diff --git a/Cargo.toml b/Cargo.toml index bab900e..73cfcb7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,6 +58,7 @@ grass = "0.13.2" reqwest = { version = "0.12.4", features = ["multipart", "json"] } pulldown-cmark = "0.11.0" blake2 = "0.10.6" +chrono = "0.4.38" [patch.crates-io] cookie = { git = "https://github.com/S0c5/cookie-rs.git" } diff --git a/public/js/xcm-programs.js b/public/js/xcm-programs.js index f156385..c407ed6 100644 --- a/public/js/xcm-programs.js +++ b/public/js/xcm-programs.js @@ -10265,11 +10265,63 @@ class XcmProgramsExecutor { this.signer = (await (0,_polkadot_extension_dapp__WEBPACK_IMPORTED_MODULE_1__.web3FromAddress)(address)).signer; } async execute(fn, ...params) { + if (!this.address || !this.signer) { + throw new Error('address must be defined'); + } return fn(this.providers, this.address, this.signer, ...params); } } +/***/ }), + +/***/ "./src/initiatives/add-members/index.ts": +/*!**********************************************!*\ + !*** ./src/initiatives/add-members/index.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ initiativeAddMembers: () => (/* binding */ initiativeAddMembers) +/* harmony export */ }); + +function initiativeAddMembers(kreivoApi, membershipAccountsAdd = []) { + return membershipAccountsAdd.map((account) => kreivoApi.tx.communities.addMember({ + Id: account, + })); + // return kreivoApi.tx.utility.batchAll([ + // ...addMembers, ...removeMembers + // ]).method.toHex(); + // const initiativeAddMembers = kreivoApi.tx.communityReferenda.submit( + // { + // Communities: { + // communityId + // } + // }, + // { + // Inline: inlineProposal + // }, + // { + // After: 0 + // } + // ); + // const initiativePreimageMetadata = kreivoApi.tx.preimage.notePreimage( + // roomId + // ); + // const initiativeReferendaMetadata = kreivoApi.tx.communityReferenda.setMetadata( + // initiativeId, + // maybeHash + // ); + // const initiativePlaceDecisionDeposit = kreivoApi.tx.communityReferenda.placeDecisionDeposit( + // initiativeId + // ); + // return kreivoApi.tx.utility + // .batchAll([initiativeAddMembers, initiativePreimageMetadata, initiativeReferendaMetadata, initiativePlaceDecisionDeposit]) + // .signAndSend(address, { signer }, () => console.log("sign")); +} + + /***/ }), /***/ "./src/initiatives/index.ts": @@ -10280,59 +10332,250 @@ class XcmProgramsExecutor { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ topupThenInitiativeAddMembers: () => (/* binding */ topupThenInitiativeAddMembers), -/* harmony export */ topupThenInitiativeVote: () => (/* binding */ topupThenInitiativeVote) +/* harmony export */ topupThenInitiativeSetup: () => (/* binding */ topupThenInitiativeSetup) /* harmony export */ }); -/* harmony import */ var _polkadot_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/api */ "./node_modules/@polkadot/api/promise/Api.js"); +/* harmony import */ var _polkadot_api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polkadot/api */ "./node_modules/@polkadot/api/promise/Api.js"); +/* harmony import */ var _polkadot_util_crypto__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polkadot/util-crypto */ "./node_modules/@polkadot/util-crypto/blake2/asU8a.js"); +/* harmony import */ var _remove_members__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./remove-members */ "./src/initiatives/remove-members/index.ts"); +/* harmony import */ var _add_members__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-members */ "./src/initiatives/add-members/index.ts"); +/* harmony import */ var _treasury__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./treasury */ "./src/initiatives/treasury/index.ts"); + + -const { Option, H256 } = __webpack_require__(/*! @polkadot/types */ "./node_modules/@polkadot/types/index.js"); -async function topupThenInitiativeAddMembers( + + +async function topupThenInitiativeSetup( // Injected parameters providers, address, signer, // Provided -communityId, initiativeId, membershipAccountsAdd = [], membershipAccountsRemove = [], roomId, maybeHash) { - const kreivoApi = await _polkadot_api__WEBPACK_IMPORTED_MODULE_0__.ApiPromise.create({ +communityId, initiativeId, roomId, title, membershipAccountsAdd = [], membershipAccountsRemove = [], periodsTreasuryRequest = []) { + const kreivoApi = await _polkadot_api__WEBPACK_IMPORTED_MODULE_3__.ApiPromise.create({ provider: providers.kreivo, }); - const addMembers = membershipAccountsAdd.map((account) => kreivoApi.tx.communities.addMember({ - Id: account, - })); - const removeMembers = membershipAccountsRemove.map((account) => kreivoApi.tx.communities.removeMember({ - Id: account.accountId, - }, account.membershipId)); + const kusamaApi = await _polkadot_api__WEBPACK_IMPORTED_MODULE_3__.ApiPromise.create({ + provider: providers.kusama, + }); + let callsOnBatch = []; + let proposal; + console.log({ periodsTreasuryRequest }); + let addMembers = (membershipAccountsAdd.length > 0) ? (0,_add_members__WEBPACK_IMPORTED_MODULE_1__.initiativeAddMembers)(kreivoApi, membershipAccountsAdd) : []; + let removeMembers = (membershipAccountsRemove.length > 0) ? (0,_remove_members__WEBPACK_IMPORTED_MODULE_0__.initiativeRemoveMembers)(kreivoApi, membershipAccountsRemove) : []; + let treasury = (periodsTreasuryRequest.length > 0) ? (0,_treasury__WEBPACK_IMPORTED_MODULE_2__.initiativeTreasuryRequest)(kreivoApi, kusamaApi, communityId, periodsTreasuryRequest, title) : { calls: [], inline: [] }; + callsOnBatch = [...treasury.calls]; const inlineProposal = kreivoApi.tx.utility.batchAll([ - ...addMembers, ...removeMembers - ]).toHex(); - console.log("call hash: ", inlineProposal); - const initiativeAddMembers = kreivoApi.tx.communityReferenda.submit({ + ...addMembers, ...removeMembers, ...treasury.inline + ]).method.toHex(); + console.log({ inlineProposal }); + if ((inlineProposal.length - 2) / 2 > 128) { + const preimageCallInitiative = kreivoApi.tx.preimage.notePreimage(inlineProposal); + callsOnBatch.push(preimageCallInitiative); + const hash = (0,_polkadot_util_crypto__WEBPACK_IMPORTED_MODULE_4__.blake2AsHex)(preimageCallInitiative.toJSON()); + proposal = { + Lookup: { + hash, + len: (inlineProposal.length - 2) / 2 + } + }; + } + else { + proposal = { + Inline: inlineProposal + }; + } + const initiativeSubmit = kreivoApi.tx.communityReferenda.submit({ Communities: { communityId } - }, { - Inline: inlineProposal - }, { + }, proposal, { After: 0 }); + console.log({ initiativeSubmit: initiativeSubmit.method.toHex() }); const initiativePreimageMetadata = kreivoApi.tx.preimage.notePreimage(roomId); - console.log("metadata: ", maybeHash); + const maybeHash = (0,_polkadot_util_crypto__WEBPACK_IMPORTED_MODULE_4__.blake2AsHex)(roomId); const initiativeReferendaMetadata = kreivoApi.tx.communityReferenda.setMetadata(initiativeId, maybeHash); const initiativePlaceDecisionDeposit = kreivoApi.tx.communityReferenda.placeDecisionDeposit(initiativeId); return kreivoApi.tx.utility - .batchAll([initiativeAddMembers, initiativePreimageMetadata, initiativeReferendaMetadata, initiativePlaceDecisionDeposit]) + .batchAll([ + ...callsOnBatch, + initiativeSubmit, + initiativePreimageMetadata, + initiativeReferendaMetadata, + initiativePlaceDecisionDeposit + ]) .signAndSend(address, { signer }, () => console.log("sign")); } -async function topupThenInitiativeVote( -// Injected parameters -providers, address, signer, -// Provided -membershipId, pollIndex, vote) { - const kreivoApi = await _polkadot_api__WEBPACK_IMPORTED_MODULE_0__.ApiPromise.create({ - provider: providers.kreivo, + + +/***/ }), + +/***/ "./src/initiatives/remove-members/index.ts": +/*!*************************************************!*\ + !*** ./src/initiatives/remove-members/index.ts ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ initiativeRemoveMembers: () => (/* binding */ initiativeRemoveMembers) +/* harmony export */ }); + +function initiativeRemoveMembers(kreivoApi, membershipAccountsRemove = []) { + return membershipAccountsRemove.map((account) => kreivoApi.tx.communities.removeMember({ + Id: account.accountId, + }, account.membershipId)); +} + + +/***/ }), + +/***/ "./src/initiatives/treasury/index.ts": +/*!*******************************************!*\ + !*** ./src/initiatives/treasury/index.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ initiativeTreasuryRequest: () => (/* binding */ initiativeTreasuryRequest) +/* harmony export */ }); +/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common */ "./src/common.ts"); + + +function initiativeTreasuryRequest(kreivoApi, kusamaApi, communityId, periods = [], title) { + let callsOnBatch = []; + let proposal; + const remarkSpendKusama = kusamaApi.tx.system.remark(title); + // Part 1: Kusama Treasury batch + const treasurySpendKusama = periods.map((period, index) => { + return kusamaApi.tx.treasury.spend({ + V4: { + location: { + parents: 0, + interior: { + X1: [{ + Parachain: 1000 + }] + } + }, + assetId: { + parents: 1, + interior: "Here" + } + } + }, period.amount, { + V4: { + parents: 1, + interior: { + X2: [ + { + Parachain: 2281 + }, + { + Plurality: { + id: { + Index: communityId + }, + part: "Voice" + } + } + ] + } + } + }, period.blocks); }); - return kreivoApi.tx.communities.vote(membershipId, pollIndex, { - Standard: vote - }).signAndSend(address, { signer }, () => console.log("sign vote")); + const inlineCallKusama = kusamaApi.tx.utility.batch([ + remarkSpendKusama, ...treasurySpendKusama + ]).method.toHex(); + console.log({ inlineCallKusama }); + // if (inlineCallKusama.length > 128) { + // const preimageCallKusama = kreivoApi.tx.preimage.notePreimage( + // inlineCallKusama + // ); + // callsOnBatch.push(preimageCallKusama); + // const hash = blake2AsHex(inlineCallKusama); + // proposal = { + // Lookup: { + // hash, + // len: (inlineCallKusama.length - 2) / 2 + // } + // } + // } else { + proposal = { + Inline: inlineCallKusama + }; + // } + const referendaSubmitKusama = kusamaApi.tx.referenda.submit({ + Origins: "BigSpender" + }, proposal, { + At: 0 + }).method.toHex(); + console.log({ referendaSubmitKusama }); + const initiativeTreasuryRequest = kreivoApi.tx.polkadotXcm.send({ + V4: (0,_common__WEBPACK_IMPORTED_MODULE_0__.location) `../Here` + }, { + V4: [ + // Part 0: Withdraw Asset + kusamaApi.createType("StagingXcmV4Instruction", { + WithdrawAsset: [(0,_common__WEBPACK_IMPORTED_MODULE_0__.fungibleAsset)((0,_common__WEBPACK_IMPORTED_MODULE_0__.location) `./Here`, 1_000_000_000_000)], + }), + // Part 1: Buy Execution + kusamaApi.createType("StagingXcmV4Instruction", { + BuyExecution: { + fees: (0,_common__WEBPACK_IMPORTED_MODULE_0__.fungibleAsset)((0,_common__WEBPACK_IMPORTED_MODULE_0__.location) `./Here`, 1_000_000_000_000), + weightLimit: "Unlimited" + }, + }), + // Part 2: Transact + kusamaApi.createType("StagingXcmV4Instruction", { + Transact: { + originKind: "SovereignAccount", + requireWeightAtMost: { + refTime: 382013000, + proofSize: 42428 + }, + call: { + encoded: referendaSubmitKusama + } + } + }), + // Part 3: Expect Transact Status + { + ExpectTransactStatus: "Success" + }, + // Part 4: Refund Surplus + "RefundSurplus", + // Part 5: Deposit Asset + { + DepositAsset: { + assets: "Definite", + beneficiary: { + parents: 0, + interior: { + X2: [ + { + Parachain: 2281 + }, + { + Plurality: { + id: { + Index: communityId + }, + part: "Voice" + } + } + ] + } + } + } + } + ] + }); + console.log({ initiativeTreasuryRequest: initiativeTreasuryRequest.method.toHex() }); + return { + calls: [...callsOnBatch], + inline: [initiativeTreasuryRequest] + }; } @@ -10786,6 +11029,35 @@ async function topupCommunityAccountInPeople(api, communityId, amount) { } +/***/ }), + +/***/ "./src/top-up-then-vote-initiative/index.ts": +/*!**************************************************!*\ + !*** ./src/top-up-then-vote-initiative/index.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ topupThenInitiativeVote: () => (/* binding */ topupThenInitiativeVote) +/* harmony export */ }); +/* harmony import */ var _polkadot_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/api */ "./node_modules/@polkadot/api/promise/Api.js"); + + +async function topupThenInitiativeVote( +// Injected parameters +providers, address, signer, +// Provided +membershipId, pollIndex, vote) { + const kreivoApi = await _polkadot_api__WEBPACK_IMPORTED_MODULE_0__.ApiPromise.create({ + provider: providers.kreivo, + }); + return kreivoApi.tx.communities.vote(membershipId, pollIndex, { + Standard: vote + }).signAndSend(address, { signer }, () => console.log("sign vote")); +} + + /***/ }), /***/ "./src/utils/community-account-ids.ts": @@ -28210,90 +28482,6 @@ class HashMap extends _Map_js__WEBPACK_IMPORTED_MODULE_0__.CodecMap { } -/***/ }), - -/***/ "./node_modules/@polkadot/types-codec/extended/Linkage.js": -/*!****************************************************************!*\ - !*** ./node_modules/@polkadot/types-codec/extended/Linkage.js ***! - \****************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Linkage: () => (/* binding */ Linkage), -/* harmony export */ LinkageResult: () => (/* binding */ LinkageResult) -/* harmony export */ }); -/* harmony import */ var _base_Option_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/Option.js */ "./node_modules/@polkadot/types-codec/base/Option.js"); -/* harmony import */ var _base_Tuple_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../base/Tuple.js */ "./node_modules/@polkadot/types-codec/base/Tuple.js"); -/* harmony import */ var _base_Vec_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../base/Vec.js */ "./node_modules/@polkadot/types-codec/base/Vec.js"); -/* harmony import */ var _native_Struct_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../native/Struct.js */ "./node_modules/@polkadot/types-codec/native/Struct.js"); - - - - -const EMPTY = new Uint8Array(); -/** - * @name Linkage - * @description The wrapper for the result from a LinkedMap - */ -class Linkage extends _native_Struct_js__WEBPACK_IMPORTED_MODULE_0__.Struct { - constructor(registry, Type, value) { - super(registry, { - previous: _base_Option_js__WEBPACK_IMPORTED_MODULE_1__.Option.with(Type), - // eslint-disable-next-line sort-keys - next: _base_Option_js__WEBPACK_IMPORTED_MODULE_1__.Option.with(Type) - }, value); - } - static withKey(Type) { - return class extends Linkage { - constructor(registry, value) { - super(registry, Type, value); - } - }; - } - /** - * @description Returns the next item the Linkage is pointing to - */ - get previous() { - return this.get('previous'); - } - /** - * @description Returns the previous item the Linkage is pointing to - */ - get next() { - return this.get('next'); - } - /** - * @description Returns the base runtime type name for this instance - */ - toRawType() { - return `Linkage<${this.next.toRawType(true)}>`; - } - /** - * @description Custom toU8a which with bare mode does not return the linkage if empty - */ - toU8a(isBare) { - // As part of a storage query (where these appear), in the case of empty, the values - // are NOT populated by the node - follow the same logic, leaving it empty - return this.isEmpty - ? EMPTY - : super.toU8a(isBare); - } -} -/** - * @name LinkageResult - * @description A Linkage keys/Values tuple - */ -class LinkageResult extends _base_Tuple_js__WEBPACK_IMPORTED_MODULE_2__.Tuple { - constructor(registry, [TypeKey, keys], [TypeValue, values]) { - super(registry, { - Keys: _base_Vec_js__WEBPACK_IMPORTED_MODULE_3__.Vec.with(TypeKey), - Values: _base_Vec_js__WEBPACK_IMPORTED_MODULE_3__.Vec.with(TypeValue) - }, [keys, values]); - } -} - - /***/ }), /***/ "./node_modules/@polkadot/types-codec/extended/Map.js": @@ -30208,21 +30396,6 @@ class Text extends String { } -/***/ }), - -/***/ "./node_modules/@polkadot/types-codec/packageInfo.js": -/*!***********************************************************!*\ - !*** ./node_modules/@polkadot/types-codec/packageInfo.js ***! - \***********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ packageInfo: () => (/* binding */ packageInfo) -/* harmony export */ }); -const packageInfo = { name: '@polkadot/types-codec', path: ( true) ? new URL("file:///home/brayan/Documents/work/virto/xcm-programs/node_modules/@polkadot/types-codec/packageInfo.js").pathname.substring(0, new URL("file:///home/brayan/Documents/work/virto/xcm-programs/node_modules/@polkadot/types-codec/packageInfo.js").pathname.lastIndexOf('/') + 1) : 0, type: 'esm', version: '11.2.1' }; - - /***/ }), /***/ "./node_modules/@polkadot/types-codec/primitive/F32.js": @@ -31477,27 +31650,6 @@ function createClassUnsafe(registry, type) { } -/***/ }), - -/***/ "./node_modules/@polkadot/types-create/create/index.js": -/*!*************************************************************!*\ - !*** ./node_modules/@polkadot/types-create/create/index.js ***! - \*************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ constructTypeClass: () => (/* reexport safe */ _class_js__WEBPACK_IMPORTED_MODULE_0__.constructTypeClass), -/* harmony export */ createClassUnsafe: () => (/* reexport safe */ _class_js__WEBPACK_IMPORTED_MODULE_0__.createClassUnsafe), -/* harmony export */ createTypeUnsafe: () => (/* reexport safe */ _type_js__WEBPACK_IMPORTED_MODULE_1__.createTypeUnsafe), -/* harmony export */ getTypeClass: () => (/* reexport safe */ _class_js__WEBPACK_IMPORTED_MODULE_0__.getTypeClass) -/* harmony export */ }); -/* harmony import */ var _class_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./class.js */ "./node_modules/@polkadot/types-create/create/class.js"); -/* harmony import */ var _type_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./type.js */ "./node_modules/@polkadot/types-create/create/type.js"); - - - - /***/ }), /***/ "./node_modules/@polkadot/types-create/create/type.js": @@ -31582,49 +31734,6 @@ function createTypeUnsafe(registry, type, params = [], options = {}) { } -/***/ }), - -/***/ "./node_modules/@polkadot/types-create/exports.js": -/*!********************************************************!*\ - !*** ./node_modules/@polkadot/types-create/exports.js ***! - \********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ XCM_MAPPINGS: () => (/* reexport safe */ _util_index_js__WEBPACK_IMPORTED_MODULE_1__.XCM_MAPPINGS), -/* harmony export */ constructTypeClass: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_0__.constructTypeClass), -/* harmony export */ createClassUnsafe: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_0__.createClassUnsafe), -/* harmony export */ createTypeUnsafe: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_0__.createTypeUnsafe), -/* harmony export */ encodeTypeDef: () => (/* reexport safe */ _util_index_js__WEBPACK_IMPORTED_MODULE_1__.encodeTypeDef), -/* harmony export */ getTypeClass: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_0__.getTypeClass), -/* harmony export */ getTypeDef: () => (/* reexport safe */ _util_index_js__WEBPACK_IMPORTED_MODULE_1__.getTypeDef), -/* harmony export */ mapXcmTypes: () => (/* reexport safe */ _util_index_js__WEBPACK_IMPORTED_MODULE_1__.mapXcmTypes), -/* harmony export */ paramsNotation: () => (/* reexport safe */ _util_index_js__WEBPACK_IMPORTED_MODULE_1__.paramsNotation), -/* harmony export */ typeSplit: () => (/* reexport safe */ _util_index_js__WEBPACK_IMPORTED_MODULE_1__.typeSplit), -/* harmony export */ withTypeString: () => (/* reexport safe */ _util_index_js__WEBPACK_IMPORTED_MODULE_1__.withTypeString) -/* harmony export */ }); -/* harmony import */ var _create_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create/index.js */ "./node_modules/@polkadot/types-create/create/index.js"); -/* harmony import */ var _util_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/index.js */ "./node_modules/@polkadot/types-create/util/index.js"); - - - - -/***/ }), - -/***/ "./node_modules/@polkadot/types-create/packageInfo.js": -/*!************************************************************!*\ - !*** ./node_modules/@polkadot/types-create/packageInfo.js ***! - \************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ packageInfo: () => (/* binding */ packageInfo) -/* harmony export */ }); -const packageInfo = { name: '@polkadot/types-create', path: ( true) ? new URL("file:///home/brayan/Documents/work/virto/xcm-programs/node_modules/@polkadot/types-create/packageInfo.js").pathname.substring(0, new URL("file:///home/brayan/Documents/work/virto/xcm-programs/node_modules/@polkadot/types-create/packageInfo.js").pathname.lastIndexOf('/') + 1) : 0, type: 'esm', version: '11.2.1' }; - - /***/ }), /***/ "./node_modules/@polkadot/types-create/types/types.js": @@ -32022,34 +32131,6 @@ function getTypeDef(_type, { displayName, name } = {}, count = 0) { } -/***/ }), - -/***/ "./node_modules/@polkadot/types-create/util/index.js": -/*!***********************************************************!*\ - !*** ./node_modules/@polkadot/types-create/util/index.js ***! - \***********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ XCM_MAPPINGS: () => (/* reexport safe */ _xcm_js__WEBPACK_IMPORTED_MODULE_3__.XCM_MAPPINGS), -/* harmony export */ encodeTypeDef: () => (/* reexport safe */ _encodeTypes_js__WEBPACK_IMPORTED_MODULE_0__.encodeTypeDef), -/* harmony export */ getTypeDef: () => (/* reexport safe */ _getTypeDef_js__WEBPACK_IMPORTED_MODULE_1__.getTypeDef), -/* harmony export */ mapXcmTypes: () => (/* reexport safe */ _xcm_js__WEBPACK_IMPORTED_MODULE_3__.mapXcmTypes), -/* harmony export */ paramsNotation: () => (/* reexport safe */ _encodeTypes_js__WEBPACK_IMPORTED_MODULE_0__.paramsNotation), -/* harmony export */ typeSplit: () => (/* reexport safe */ _typeSplit_js__WEBPACK_IMPORTED_MODULE_2__.typeSplit), -/* harmony export */ withTypeString: () => (/* reexport safe */ _encodeTypes_js__WEBPACK_IMPORTED_MODULE_0__.withTypeString) -/* harmony export */ }); -/* harmony import */ var _encodeTypes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./encodeTypes.js */ "./node_modules/@polkadot/types-create/util/encodeTypes.js"); -/* harmony import */ var _getTypeDef_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getTypeDef.js */ "./node_modules/@polkadot/types-create/util/getTypeDef.js"); -/* harmony import */ var _typeSplit_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeSplit.js */ "./node_modules/@polkadot/types-create/util/typeSplit.js"); -/* harmony import */ var _xcm_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./xcm.js */ "./node_modules/@polkadot/types-create/util/xcm.js"); - - - - - - /***/ }), /***/ "./node_modules/@polkadot/types-create/util/typeSplit.js": @@ -47389,308 +47470,6 @@ function getUpgradeVersion(genesisHash, blockNumber) { } -/***/ }), - -/***/ "./node_modules/@polkadot/types/bundle.js": -/*!************************************************!*\ - !*** ./node_modules/@polkadot/types/bundle.js ***! - \************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ BTreeMap: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.BTreeMap), -/* harmony export */ BTreeSet: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.BTreeSet), -/* harmony export */ BitVec: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.BitVec), -/* harmony export */ Bool: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.Bool), -/* harmony export */ Bytes: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.Bytes), -/* harmony export */ CodecMap: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.CodecMap), -/* harmony export */ CodecSet: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.CodecSet), -/* harmony export */ Compact: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Compact), -/* harmony export */ Data: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.Data), -/* harmony export */ DoNotConstruct: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.DoNotConstruct), -/* harmony export */ Enum: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Enum), -/* harmony export */ F32: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.F32), -/* harmony export */ F64: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.F64), -/* harmony export */ GenericAccountId: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericAccountId), -/* harmony export */ GenericAccountId32: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericAccountId32), -/* harmony export */ GenericAccountId33: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericAccountId33), -/* harmony export */ GenericAccountIndex: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericAccountIndex), -/* harmony export */ GenericAddress: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericAddress), -/* harmony export */ GenericBlock: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericBlock), -/* harmony export */ GenericCall: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericCall), -/* harmony export */ GenericChainProperties: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericChainProperties), -/* harmony export */ GenericConsensusEngineId: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericConsensusEngineId), -/* harmony export */ GenericEthereumAccountId: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericEthereumAccountId), -/* harmony export */ GenericEthereumLookupSource: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericEthereumLookupSource), -/* harmony export */ GenericEvent: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericEvent), -/* harmony export */ GenericEventData: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericEventData), -/* harmony export */ GenericExtrinsic: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericExtrinsic), -/* harmony export */ GenericExtrinsicEra: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericExtrinsicEra), -/* harmony export */ GenericExtrinsicPayload: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericExtrinsicPayload), -/* harmony export */ GenericExtrinsicPayloadUnknown: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericExtrinsicPayloadUnknown), -/* harmony export */ GenericExtrinsicPayloadV4: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericExtrinsicPayloadV4), -/* harmony export */ GenericExtrinsicSignatureV4: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericExtrinsicSignatureV4), -/* harmony export */ GenericExtrinsicUnknown: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericExtrinsicUnknown), -/* harmony export */ GenericExtrinsicV4: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericExtrinsicV4), -/* harmony export */ GenericImmortalEra: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericImmortalEra), -/* harmony export */ GenericLookupSource: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericLookupSource), -/* harmony export */ GenericMortalEra: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericMortalEra), -/* harmony export */ GenericMultiAddress: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericMultiAddress), -/* harmony export */ GenericSignerPayload: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericSignerPayload), -/* harmony export */ GenericVote: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.GenericVote), -/* harmony export */ HashMap: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.HashMap), -/* harmony export */ I128: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.I128), -/* harmony export */ I16: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.I16), -/* harmony export */ I256: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.I256), -/* harmony export */ I32: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.I32), -/* harmony export */ I64: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.I64), -/* harmony export */ I8: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.I8), -/* harmony export */ ISize: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.ISize), -/* harmony export */ Int: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Int), -/* harmony export */ Json: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Json), -/* harmony export */ Linkage: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Linkage), -/* harmony export */ Map: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Map), -/* harmony export */ Metadata: () => (/* reexport safe */ _metadata_index_js__WEBPACK_IMPORTED_MODULE_7__.Metadata), -/* harmony export */ Null: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.Null), -/* harmony export */ Option: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Option), -/* harmony export */ OptionBool: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.OptionBool), -/* harmony export */ PortableRegistry: () => (/* reexport safe */ _metadata_index_js__WEBPACK_IMPORTED_MODULE_7__.PortableRegistry), -/* harmony export */ Range: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Range), -/* harmony export */ RangeInclusive: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.RangeInclusive), -/* harmony export */ Raw: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Raw), -/* harmony export */ Result: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Result), -/* harmony export */ Set: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Set), -/* harmony export */ StorageKey: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.StorageKey), -/* harmony export */ Struct: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Struct), -/* harmony export */ Text: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.Text), -/* harmony export */ Tuple: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Tuple), -/* harmony export */ Type: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.Type), -/* harmony export */ TypeDefInfo: () => (/* reexport safe */ _polkadot_types_create__WEBPACK_IMPORTED_MODULE_0__.TypeDefInfo), -/* harmony export */ TypeRegistry: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.TypeRegistry), -/* harmony export */ U128: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.U128), -/* harmony export */ U16: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.U16), -/* harmony export */ U256: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.U256), -/* harmony export */ U32: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.U32), -/* harmony export */ U64: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.U64), -/* harmony export */ U8: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.U8), -/* harmony export */ U8aFixed: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.U8aFixed), -/* harmony export */ UInt: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.UInt), -/* harmony export */ USize: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.USize), -/* harmony export */ Vec: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.Vec), -/* harmony export */ VecFixed: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.VecFixed), -/* harmony export */ WrapperKeepOpaque: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.WrapperKeepOpaque), -/* harmony export */ WrapperOpaque: () => (/* reexport safe */ _codec_index_js__WEBPACK_IMPORTED_MODULE_4__.WrapperOpaque), -/* harmony export */ XCM_MAPPINGS: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.XCM_MAPPINGS), -/* harmony export */ bool: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.bool), -/* harmony export */ constructTypeClass: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.constructTypeClass), -/* harmony export */ convertSiV0toV1: () => (/* reexport safe */ _metadata_PortableRegistry_index_js__WEBPACK_IMPORTED_MODULE_1__.toV1), -/* harmony export */ createClass: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.createClass), -/* harmony export */ createClassUnsafe: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.createClassUnsafe), -/* harmony export */ createType: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.createType), -/* harmony export */ createTypeUnsafe: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.createTypeUnsafe), -/* harmony export */ decorateConstants: () => (/* reexport safe */ _metadata_index_js__WEBPACK_IMPORTED_MODULE_7__.decorateConstants), -/* harmony export */ decorateExtrinsics: () => (/* reexport safe */ _metadata_index_js__WEBPACK_IMPORTED_MODULE_7__.decorateExtrinsics), -/* harmony export */ decorateStorage: () => (/* reexport safe */ _metadata_index_js__WEBPACK_IMPORTED_MODULE_7__.decorateStorage), -/* harmony export */ encodeTypeDef: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.encodeTypeDef), -/* harmony export */ expandMetadata: () => (/* reexport safe */ _metadata_index_js__WEBPACK_IMPORTED_MODULE_7__.expandMetadata), -/* harmony export */ f32: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.f32), -/* harmony export */ f64: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.f64), -/* harmony export */ getTypeClass: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.getTypeClass), -/* harmony export */ getTypeDef: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.getTypeDef), -/* harmony export */ i128: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.i128), -/* harmony export */ i16: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.i16), -/* harmony export */ i256: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.i256), -/* harmony export */ i32: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.i32), -/* harmony export */ i64: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.i64), -/* harmony export */ i8: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.i8), -/* harmony export */ isize: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.isize), -/* harmony export */ lazyVariants: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.lazyVariants), -/* harmony export */ mapXcmTypes: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.mapXcmTypes), -/* harmony export */ packageInfo: () => (/* reexport safe */ _packageInfo_js__WEBPACK_IMPORTED_MODULE_2__.packageInfo), -/* harmony export */ paramsNotation: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.paramsNotation), -/* harmony export */ rpcDefinitions: () => (/* reexport safe */ _interfaces_jsonrpc_js__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ typeDefinitions: () => (/* reexport module object */ _interfaces_definitions_js__WEBPACK_IMPORTED_MODULE_9__), -/* harmony export */ typeSplit: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.typeSplit), -/* harmony export */ u128: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.u128), -/* harmony export */ u16: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.u16), -/* harmony export */ u256: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.u256), -/* harmony export */ u32: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.u32), -/* harmony export */ u64: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.u64), -/* harmony export */ u8: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.u8), -/* harmony export */ unwrapStorageType: () => (/* reexport safe */ _util_index_js__WEBPACK_IMPORTED_MODULE_3__.unwrapStorageType), -/* harmony export */ usize: () => (/* reexport safe */ _index_types_js__WEBPACK_IMPORTED_MODULE_6__.usize), -/* harmony export */ withTypeString: () => (/* reexport safe */ _create_index_js__WEBPACK_IMPORTED_MODULE_5__.withTypeString) -/* harmony export */ }); -/* harmony import */ var _interfaces_definitions_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./interfaces/definitions.js */ "./node_modules/@polkadot/types/interfaces/definitions.js"); -/* harmony import */ var _interfaces_jsonrpc_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./interfaces/jsonrpc.js */ "./node_modules/@polkadot/types/interfaces/jsonrpc.js"); -/* harmony import */ var _polkadot_types_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/types-create */ "./node_modules/@polkadot/types-create/types/types.js"); -/* harmony import */ var _metadata_PortableRegistry_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./metadata/PortableRegistry/index.js */ "./node_modules/@polkadot/types/metadata/PortableRegistry/toV1.js"); -/* harmony import */ var _packageInfo_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./packageInfo.js */ "./node_modules/@polkadot/types/packageInfo.js"); -/* harmony import */ var _util_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/index.js */ "./node_modules/@polkadot/types/util/storage.js"); -/* harmony import */ var _codec_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./codec/index.js */ "./node_modules/@polkadot/types/codec/index.js"); -/* harmony import */ var _create_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./create/index.js */ "./node_modules/@polkadot/types/create/index.js"); -/* harmony import */ var _index_types_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./index.types.js */ "./node_modules/@polkadot/types/index.types.js"); -/* harmony import */ var _metadata_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./metadata/index.js */ "./node_modules/@polkadot/types/metadata/index.js"); - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/@polkadot/types/codec/index.js": -/*!*****************************************************!*\ - !*** ./node_modules/@polkadot/types/codec/index.js ***! - \*****************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ BTreeMap: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_0__.BTreeMap), -/* harmony export */ BTreeSet: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_1__.BTreeSet), -/* harmony export */ CodecMap: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_2__.CodecMap), -/* harmony export */ CodecSet: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_3__.CodecSet), -/* harmony export */ Compact: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_4__.Compact), -/* harmony export */ DoNotConstruct: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_5__.DoNotConstruct), -/* harmony export */ Enum: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_6__.Enum), -/* harmony export */ HashMap: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_7__.HashMap), -/* harmony export */ Int: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_8__.Int), -/* harmony export */ Json: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_9__.Json), -/* harmony export */ Linkage: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_10__.Linkage), -/* harmony export */ Map: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_2__.CodecMap), -/* harmony export */ Option: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_11__.Option), -/* harmony export */ Range: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_12__.Range), -/* harmony export */ RangeInclusive: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_13__.RangeInclusive), -/* harmony export */ Raw: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_14__.Raw), -/* harmony export */ Result: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_15__.Result), -/* harmony export */ Set: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_3__.CodecSet), -/* harmony export */ Struct: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_16__.Struct), -/* harmony export */ Tuple: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_17__.Tuple), -/* harmony export */ U8aFixed: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_18__.U8aFixed), -/* harmony export */ UInt: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_19__.UInt), -/* harmony export */ Vec: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_20__.Vec), -/* harmony export */ VecFixed: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_21__.VecFixed), -/* harmony export */ WrapperKeepOpaque: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_22__.WrapperKeepOpaque), -/* harmony export */ WrapperOpaque: () => (/* reexport safe */ _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_23__.WrapperOpaque) -/* harmony export */ }); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/BTreeMap.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/BTreeSet.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/Map.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/native/Set.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/Compact.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/DoNotConstruct.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/Enum.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/HashMap.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/Int.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/native/Json.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/Linkage.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/Option.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/Range.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/RangeInclusive.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/native/Raw.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/Result.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/native/Struct.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/Tuple.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/U8aFixed.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/UInt.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/Vec.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/base/VecFixed.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/WrapperKeepOpaque.js"); -/* harmony import */ var _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @polkadot/types-codec */ "./node_modules/@polkadot/types-codec/extended/WrapperOpaque.js"); - - - -/***/ }), - -/***/ "./node_modules/@polkadot/types/create/createClass.js": -/*!************************************************************!*\ - !*** ./node_modules/@polkadot/types/create/createClass.js ***! - \************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ createClass: () => (/* binding */ createClass) -/* harmony export */ }); -/* harmony import */ var _polkadot_types_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/types-create */ "./node_modules/@polkadot/types-create/create/class.js"); - -function createClass(registry, type) { - return (0,_polkadot_types_create__WEBPACK_IMPORTED_MODULE_0__.createClassUnsafe)(registry, type); -} - - -/***/ }), - -/***/ "./node_modules/@polkadot/types/create/createType.js": -/*!***********************************************************!*\ - !*** ./node_modules/@polkadot/types/create/createType.js ***! - \***********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ createType: () => (/* binding */ createType) -/* harmony export */ }); -/* harmony import */ var _polkadot_types_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/types-create */ "./node_modules/@polkadot/types-create/create/type.js"); - -/** - * Create an instance of a `type` with a given `params`. - * @param type - A recognizable string representing the type to create an - * instance from - * @param params - The value to instantiate the type with - */ -function createType(registry, type, ...params) { - return (0,_polkadot_types_create__WEBPACK_IMPORTED_MODULE_0__.createTypeUnsafe)(registry, type, params); -} - - -/***/ }), - -/***/ "./node_modules/@polkadot/types/create/index.js": -/*!******************************************************!*\ - !*** ./node_modules/@polkadot/types/create/index.js ***! - \******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ TypeRegistry: () => (/* reexport safe */ _registry_js__WEBPACK_IMPORTED_MODULE_4__.TypeRegistry), -/* harmony export */ XCM_MAPPINGS: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.XCM_MAPPINGS), -/* harmony export */ constructTypeClass: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.constructTypeClass), -/* harmony export */ createClass: () => (/* reexport safe */ _createClass_js__WEBPACK_IMPORTED_MODULE_1__.createClass), -/* harmony export */ createClassUnsafe: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.createClassUnsafe), -/* harmony export */ createType: () => (/* reexport safe */ _createType_js__WEBPACK_IMPORTED_MODULE_2__.createType), -/* harmony export */ createTypeUnsafe: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.createTypeUnsafe), -/* harmony export */ encodeTypeDef: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.encodeTypeDef), -/* harmony export */ getTypeClass: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.getTypeClass), -/* harmony export */ getTypeDef: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.getTypeDef), -/* harmony export */ lazyVariants: () => (/* reexport safe */ _lazy_js__WEBPACK_IMPORTED_MODULE_3__.lazyVariants), -/* harmony export */ mapXcmTypes: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.mapXcmTypes), -/* harmony export */ paramsNotation: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.paramsNotation), -/* harmony export */ typeSplit: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.typeSplit), -/* harmony export */ withTypeString: () => (/* reexport safe */ _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__.withTypeString) -/* harmony export */ }); -/* harmony import */ var _polkadot_types_create_exports__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/types-create/exports */ "./node_modules/@polkadot/types-create/exports.js"); -/* harmony import */ var _createClass_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createClass.js */ "./node_modules/@polkadot/types/create/createClass.js"); -/* harmony import */ var _createType_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createType.js */ "./node_modules/@polkadot/types/create/createType.js"); -/* harmony import */ var _lazy_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lazy.js */ "./node_modules/@polkadot/types/create/lazy.js"); -/* harmony import */ var _registry_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./registry.js */ "./node_modules/@polkadot/types/create/registry.js"); - - - - - - - /***/ }), /***/ "./node_modules/@polkadot/types/create/lazy.js": @@ -51417,145 +51196,6 @@ __webpack_require__.r(__webpack_exports__); -/***/ }), - -/***/ "./node_modules/@polkadot/types/index.js": -/*!***********************************************!*\ - !*** ./node_modules/@polkadot/types/index.js ***! - \***********************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ BTreeMap: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.BTreeMap), -/* harmony export */ BTreeSet: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.BTreeSet), -/* harmony export */ BitVec: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.BitVec), -/* harmony export */ Bool: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Bool), -/* harmony export */ Bytes: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Bytes), -/* harmony export */ CodecMap: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.CodecMap), -/* harmony export */ CodecSet: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.CodecSet), -/* harmony export */ Compact: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Compact), -/* harmony export */ Data: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Data), -/* harmony export */ DoNotConstruct: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.DoNotConstruct), -/* harmony export */ Enum: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Enum), -/* harmony export */ F32: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.F32), -/* harmony export */ F64: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.F64), -/* harmony export */ GenericAccountId: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericAccountId), -/* harmony export */ GenericAccountId32: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericAccountId32), -/* harmony export */ GenericAccountId33: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericAccountId33), -/* harmony export */ GenericAccountIndex: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericAccountIndex), -/* harmony export */ GenericAddress: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericAddress), -/* harmony export */ GenericBlock: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericBlock), -/* harmony export */ GenericCall: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericCall), -/* harmony export */ GenericChainProperties: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericChainProperties), -/* harmony export */ GenericConsensusEngineId: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericConsensusEngineId), -/* harmony export */ GenericEthereumAccountId: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericEthereumAccountId), -/* harmony export */ GenericEthereumLookupSource: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericEthereumLookupSource), -/* harmony export */ GenericEvent: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericEvent), -/* harmony export */ GenericEventData: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericEventData), -/* harmony export */ GenericExtrinsic: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericExtrinsic), -/* harmony export */ GenericExtrinsicEra: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericExtrinsicEra), -/* harmony export */ GenericExtrinsicPayload: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericExtrinsicPayload), -/* harmony export */ GenericExtrinsicPayloadUnknown: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericExtrinsicPayloadUnknown), -/* harmony export */ GenericExtrinsicPayloadV4: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericExtrinsicPayloadV4), -/* harmony export */ GenericExtrinsicSignatureV4: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericExtrinsicSignatureV4), -/* harmony export */ GenericExtrinsicUnknown: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericExtrinsicUnknown), -/* harmony export */ GenericExtrinsicV4: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericExtrinsicV4), -/* harmony export */ GenericImmortalEra: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericImmortalEra), -/* harmony export */ GenericLookupSource: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericLookupSource), -/* harmony export */ GenericMortalEra: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericMortalEra), -/* harmony export */ GenericMultiAddress: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericMultiAddress), -/* harmony export */ GenericSignerPayload: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericSignerPayload), -/* harmony export */ GenericVote: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.GenericVote), -/* harmony export */ HashMap: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.HashMap), -/* harmony export */ I128: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.I128), -/* harmony export */ I16: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.I16), -/* harmony export */ I256: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.I256), -/* harmony export */ I32: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.I32), -/* harmony export */ I64: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.I64), -/* harmony export */ I8: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.I8), -/* harmony export */ ISize: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.ISize), -/* harmony export */ Int: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Int), -/* harmony export */ Json: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Json), -/* harmony export */ Linkage: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Linkage), -/* harmony export */ Map: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Map), -/* harmony export */ Metadata: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Metadata), -/* harmony export */ Null: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Null), -/* harmony export */ Option: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Option), -/* harmony export */ OptionBool: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.OptionBool), -/* harmony export */ PortableRegistry: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.PortableRegistry), -/* harmony export */ Range: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Range), -/* harmony export */ RangeInclusive: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.RangeInclusive), -/* harmony export */ Raw: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Raw), -/* harmony export */ Result: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Result), -/* harmony export */ Set: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Set), -/* harmony export */ StorageKey: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.StorageKey), -/* harmony export */ Struct: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Struct), -/* harmony export */ Text: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Text), -/* harmony export */ Tuple: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Tuple), -/* harmony export */ Type: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Type), -/* harmony export */ TypeDefInfo: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.TypeDefInfo), -/* harmony export */ TypeRegistry: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.TypeRegistry), -/* harmony export */ U128: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.U128), -/* harmony export */ U16: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.U16), -/* harmony export */ U256: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.U256), -/* harmony export */ U32: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.U32), -/* harmony export */ U64: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.U64), -/* harmony export */ U8: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.U8), -/* harmony export */ U8aFixed: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.U8aFixed), -/* harmony export */ UInt: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.UInt), -/* harmony export */ USize: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.USize), -/* harmony export */ Vec: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.Vec), -/* harmony export */ VecFixed: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.VecFixed), -/* harmony export */ WrapperKeepOpaque: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.WrapperKeepOpaque), -/* harmony export */ WrapperOpaque: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.WrapperOpaque), -/* harmony export */ XCM_MAPPINGS: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.XCM_MAPPINGS), -/* harmony export */ bool: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.bool), -/* harmony export */ constructTypeClass: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.constructTypeClass), -/* harmony export */ convertSiV0toV1: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.convertSiV0toV1), -/* harmony export */ createClass: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.createClass), -/* harmony export */ createClassUnsafe: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.createClassUnsafe), -/* harmony export */ createType: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.createType), -/* harmony export */ createTypeUnsafe: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.createTypeUnsafe), -/* harmony export */ decorateConstants: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.decorateConstants), -/* harmony export */ decorateExtrinsics: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.decorateExtrinsics), -/* harmony export */ decorateStorage: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.decorateStorage), -/* harmony export */ encodeTypeDef: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.encodeTypeDef), -/* harmony export */ expandMetadata: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.expandMetadata), -/* harmony export */ f32: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.f32), -/* harmony export */ f64: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.f64), -/* harmony export */ getTypeClass: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.getTypeClass), -/* harmony export */ getTypeDef: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.getTypeDef), -/* harmony export */ i128: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.i128), -/* harmony export */ i16: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.i16), -/* harmony export */ i256: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.i256), -/* harmony export */ i32: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.i32), -/* harmony export */ i64: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.i64), -/* harmony export */ i8: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.i8), -/* harmony export */ isize: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.isize), -/* harmony export */ lazyVariants: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.lazyVariants), -/* harmony export */ mapXcmTypes: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.mapXcmTypes), -/* harmony export */ packageInfo: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.packageInfo), -/* harmony export */ paramsNotation: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.paramsNotation), -/* harmony export */ rpcDefinitions: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.rpcDefinitions), -/* harmony export */ typeDefinitions: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.typeDefinitions), -/* harmony export */ typeSplit: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.typeSplit), -/* harmony export */ u128: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.u128), -/* harmony export */ u16: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.u16), -/* harmony export */ u256: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.u256), -/* harmony export */ u32: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.u32), -/* harmony export */ u64: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.u64), -/* harmony export */ u8: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.u8), -/* harmony export */ unwrapStorageType: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.unwrapStorageType), -/* harmony export */ usize: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.usize), -/* harmony export */ withTypeString: () => (/* reexport safe */ _bundle_js__WEBPACK_IMPORTED_MODULE_1__.withTypeString) -/* harmony export */ }); -/* harmony import */ var _packageDetect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./packageDetect.js */ "./node_modules/@polkadot/types/packageDetect.js"); -/* harmony import */ var _bundle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bundle.js */ "./node_modules/@polkadot/types/bundle.js"); - - - - /***/ }), /***/ "./node_modules/@polkadot/types/index.types.js": @@ -65251,140 +64891,6 @@ class PortableRegistry extends _polkadot_types_codec__WEBPACK_IMPORTED_MODULE_2_ } -/***/ }), - -/***/ "./node_modules/@polkadot/types/metadata/PortableRegistry/toV1.js": -/*!************************************************************************!*\ - !*** ./node_modules/@polkadot/types/metadata/PortableRegistry/toV1.js ***! - \************************************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ toV1: () => (/* binding */ toV1) -/* harmony export */ }); -/* harmony import */ var _polkadot_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/util */ "./node_modules/@polkadot/util/assert.js"); - -function convertType(key) { - return (registry, { type }) => registry.createType('Si1TypeDef', { - [key]: { - type: type.toNumber() - } - }); -} -function convertArray(registry, { len, type }) { - return registry.createType('Si1TypeDef', { - Array: { - len, - type: type.toNumber() - } - }); -} -function convertBitSequence(registry, { bitOrderType, bitStoreType }) { - return registry.createType('Si1TypeDef', { - BitSequence: { - bitOrderType: bitOrderType.toNumber(), - bitStoreType: bitStoreType.toNumber() - } - }); -} -const convertCompact = convertType('Compact'); -function convertComposite(registry, { fields }) { - return registry.createType('Si1TypeDef', { - Composite: { - fields: convertFields(registry, fields) - } - }); -} -function convertFields(registry, fields) { - return fields.map(({ docs, name, type, typeName }) => registry.createType('Si1Field', { - docs, - name, - type: type.toNumber(), - typeName - })); -} -function convertPhantom(registry, path) { - console.warn(`Converting phantom type ${path.map((p) => p.toString()).join('::')} to empty tuple`); - return registry.createType('Si1TypeDef', { - Tuple: [] - }); -} -function convertPrimitive(registry, prim) { - return registry.createType('Si1TypeDef', { - Primitive: prim.toString() - }); -} -const convertSequence = convertType('Sequence'); -function convertTuple(registry, types) { - return registry.createType('Si1TypeDef', { - Tuple: types.map((t) => t.toNumber()) - }); -} -function convertVariant(registry, { variants }) { - return registry.createType('Si1TypeDef', { - Variant: { - variants: variants.map(({ discriminant, docs, fields, name }, index) => registry.createType('Si1Variant', { - docs, - fields: convertFields(registry, fields), - index: discriminant.isSome - ? discriminant.unwrap().toNumber() - : index, - name - })) - } - }); -} -function convertDef(registry, { def, path }) { - let result; - switch (def.type) { - case 'Array': - result = convertArray(registry, def.asArray); - break; - case 'BitSequence': - result = convertBitSequence(registry, def.asBitSequence); - break; - case 'Compact': - result = convertCompact(registry, def.asCompact); - break; - case 'Composite': - result = convertComposite(registry, def.asComposite); - break; - case 'Phantom': - result = convertPhantom(registry, path); - break; - case 'Primitive': - result = convertPrimitive(registry, def.asPrimitive); - break; - case 'Sequence': - result = convertSequence(registry, def.asSequence); - break; - case 'Tuple': - result = convertTuple(registry, def.asTuple); - break; - case 'Variant': - result = convertVariant(registry, def.asVariant); - break; - default: (0,_polkadot_util__WEBPACK_IMPORTED_MODULE_0__.assertUnreachable)(def.type); - } - return result; -} -function toV1(registry, types) { - return types.map((t, index) => registry.createType('PortableType', { - // offsets are +1 from v0 - id: index + 1, - type: { - def: convertDef(registry, t), - docs: [], - params: t.params.map((p) => registry.createType('Si1TypeParameter', { - type: p.toNumber() - })), - path: t.path.map((p) => p.toString()) - } - })); -} - - /***/ }), /***/ "./node_modules/@polkadot/types/metadata/decorate/constants/index.js": @@ -66104,34 +65610,6 @@ const objectNameToCamel = /*#__PURE__*/ convert(_polkadot_util__WEBPACK_IMPORTED const objectNameToString = /*#__PURE__*/ convert((n) => n.toString()); -/***/ }), - -/***/ "./node_modules/@polkadot/types/metadata/index.js": -/*!********************************************************!*\ - !*** ./node_modules/@polkadot/types/metadata/index.js ***! - \********************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Metadata: () => (/* reexport safe */ _Metadata_js__WEBPACK_IMPORTED_MODULE_4__.Metadata), -/* harmony export */ PortableRegistry: () => (/* reexport safe */ _PortableRegistry_index_js__WEBPACK_IMPORTED_MODULE_5__.PortableRegistry), -/* harmony export */ decorateConstants: () => (/* reexport safe */ _decorate_index_js__WEBPACK_IMPORTED_MODULE_0__.decorateConstants), -/* harmony export */ decorateExtrinsics: () => (/* reexport safe */ _decorate_index_js__WEBPACK_IMPORTED_MODULE_1__.decorateExtrinsics), -/* harmony export */ decorateStorage: () => (/* reexport safe */ _decorate_index_js__WEBPACK_IMPORTED_MODULE_2__.decorateStorage), -/* harmony export */ expandMetadata: () => (/* reexport safe */ _decorate_index_js__WEBPACK_IMPORTED_MODULE_3__.expandMetadata) -/* harmony export */ }); -/* harmony import */ var _decorate_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decorate/index.js */ "./node_modules/@polkadot/types/metadata/decorate/constants/index.js"); -/* harmony import */ var _decorate_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./decorate/index.js */ "./node_modules/@polkadot/types/metadata/decorate/extrinsics/index.js"); -/* harmony import */ var _decorate_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./decorate/index.js */ "./node_modules/@polkadot/types/metadata/decorate/storage/index.js"); -/* harmony import */ var _decorate_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./decorate/index.js */ "./node_modules/@polkadot/types/metadata/decorate/index.js"); -/* harmony import */ var _Metadata_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Metadata.js */ "./node_modules/@polkadot/types/metadata/Metadata.js"); -/* harmony import */ var _PortableRegistry_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./PortableRegistry/index.js */ "./node_modules/@polkadot/types/metadata/PortableRegistry/PortableRegistry.js"); - - - - - /***/ }), /***/ "./node_modules/@polkadot/types/metadata/util/extractTypes.js": @@ -66890,41 +66368,6 @@ const LATEST_VERSION = KNOWN_VERSIONS[0]; const TO_CALLS_VERSION = 14; // LATEST_VERSION; -/***/ }), - -/***/ "./node_modules/@polkadot/types/packageDetect.js": -/*!*******************************************************!*\ - !*** ./node_modules/@polkadot/types/packageDetect.js ***! - \*******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _polkadot_types_codec_packageInfo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polkadot/types-codec/packageInfo */ "./node_modules/@polkadot/types-codec/packageInfo.js"); -/* harmony import */ var _polkadot_types_create_packageInfo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polkadot/types-create/packageInfo */ "./node_modules/@polkadot/types-create/packageInfo.js"); -/* harmony import */ var _polkadot_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/util */ "./node_modules/@polkadot/util/versionDetect.js"); -/* harmony import */ var _packageInfo_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./packageInfo.js */ "./node_modules/@polkadot/types/packageInfo.js"); - - - - -(0,_polkadot_util__WEBPACK_IMPORTED_MODULE_0__.detectPackage)(_packageInfo_js__WEBPACK_IMPORTED_MODULE_1__.packageInfo, null, [_polkadot_types_codec_packageInfo__WEBPACK_IMPORTED_MODULE_2__.packageInfo, _polkadot_types_create_packageInfo__WEBPACK_IMPORTED_MODULE_3__.packageInfo]); - - -/***/ }), - -/***/ "./node_modules/@polkadot/types/packageInfo.js": -/*!*****************************************************!*\ - !*** ./node_modules/@polkadot/types/packageInfo.js ***! - \*****************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ packageInfo: () => (/* binding */ packageInfo) -/* harmony export */ }); -const packageInfo = { name: '@polkadot/types', path: ( true) ? new URL("file:///home/brayan/Documents/work/virto/xcm-programs/node_modules/@polkadot/types/packageInfo.js").pathname.substring(0, new URL("file:///home/brayan/Documents/work/virto/xcm-programs/node_modules/@polkadot/types/packageInfo.js").pathname.lastIndexOf('/') + 1) : 0, type: 'esm', version: '11.2.1' }; - - /***/ }), /***/ "./node_modules/@polkadot/types/primitive/Data.js": @@ -71695,118 +71138,6 @@ function u8aWrapBytes(bytes) { } -/***/ }), - -/***/ "./node_modules/@polkadot/util/versionDetect.js": -/*!******************************************************!*\ - !*** ./node_modules/@polkadot/util/versionDetect.js ***! - \******************************************************/ -/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG: () => (/* binding */ POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG), -/* harmony export */ detectPackage: () => (/* binding */ detectPackage) -/* harmony export */ }); -/* harmony import */ var _polkadot_x_global__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polkadot/x-global */ "./node_modules/@polkadot/x-global/index.js"); -/* harmony import */ var _is_function_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./is/function.js */ "./node_modules/@polkadot/util/is/function.js"); - - -const DEDUPE = 'Either remove and explicitly install matching versions or dedupe using your package manager.\nThe following conflicting packages were found:'; -const POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG = 'POLKADOTJS_DISABLE_ESM_CJS_WARNING'; -/** @internal */ -function getEntry(name) { - const _global = _polkadot_x_global__WEBPACK_IMPORTED_MODULE_0__.xglobal; - if (!_global.__polkadotjs) { - _global.__polkadotjs = {}; - } - if (!_global.__polkadotjs[name]) { - _global.__polkadotjs[name] = []; - } - return _global.__polkadotjs[name]; -} -/** @internal */ -function formatDisplay(all, fmt) { - let max = 0; - for (let i = 0, count = all.length; i < count; i++) { - max = Math.max(max, all[i].version.length); - } - return all - .map((d) => `\t${fmt(d.version.padEnd(max), d).join('\t')}`) - .join('\n'); -} -/** @internal */ -function formatInfo(version, { name }) { - return [ - version, - name - ]; -} -/** @internal */ -function formatVersion(version, { path, type }) { - let extracted; - if (path && path.length >= 5) { - const nmIndex = path.indexOf('node_modules'); - extracted = nmIndex === -1 - ? path - : path.substring(nmIndex); - } - else { - extracted = ''; - } - return [ - `${`${type || ''}`.padStart(3)} ${version}`, - extracted - ]; -} -/** @internal */ -function getPath(infoPath, pathOrFn) { - if (infoPath) { - return infoPath; - } - else if ((0,_is_function_js__WEBPACK_IMPORTED_MODULE_1__.isFunction)(pathOrFn)) { - try { - return pathOrFn() || ''; - } - catch { - return ''; - } - } - return pathOrFn || ''; -} -/** @internal */ -function warn(pre, all, fmt) { - console.warn(`${pre}\n${DEDUPE}\n${formatDisplay(all, fmt)}`); -} -/** - * @name detectPackage - * @summary Checks that a specific package is only imported once - * @description A `@polkadot/*` version detection utility, checking for one occurrence of a package in addition to checking for dependency versions. - */ -function detectPackage({ name, path, type, version }, pathOrFn, deps = []) { - if (!name.startsWith('@polkadot')) { - throw new Error(`Invalid package descriptor ${name}`); - } - const entry = getEntry(name); - entry.push({ path: getPath(path, pathOrFn), type, version }); - // if we have more than one entry at DIFFERENT version types then warn. If there is more than one entry at the same - // version and ESM/CJS dual warnings are disabled, then do not display warnings - const entriesSameVersion = entry.every((e) => e.version === version); - const esmCjsWarningDisabled = _polkadot_x_global__WEBPACK_IMPORTED_MODULE_0__.xglobal.process?.env?.[POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG] === '1'; - const multipleEntries = entry.length !== 1; - const disableWarnings = esmCjsWarningDisabled && entriesSameVersion; - if (multipleEntries && !disableWarnings) { - warn(`${name} has multiple versions, ensure that there is only one installed.`, entry, formatVersion); - } - else { - const mismatches = deps.filter((d) => d && d.version !== version); - if (mismatches.length) { - warn(`${name} requires direct dependencies exactly matching version ${version}.`, mismatches, formatInfo); - } - } -} - - /***/ }), /***/ "./node_modules/@polkadot/wasm-bridge/bridge.js": @@ -76084,17 +75415,23 @@ var __webpack_exports__ = {}; \**********************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ XcmProgramsExecutor: () => (/* reexport safe */ _executor__WEBPACK_IMPORTED_MODULE_2__.XcmProgramsExecutor), +/* harmony export */ XcmProgramsExecutor: () => (/* reexport safe */ _executor__WEBPACK_IMPORTED_MODULE_3__.XcmProgramsExecutor), /* harmony export */ globallyInjectPrograms: () => (/* binding */ globallyInjectPrograms) /* harmony export */ }); /* harmony import */ var _initiatives__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./initiatives */ "./src/initiatives/index.ts"); /* harmony import */ var _top_up_then_create_community__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./top-up-then-create-community */ "./src/top-up-then-create-community/index.ts"); -/* harmony import */ var _executor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./executor */ "./src/executor.ts"); +/* harmony import */ var _top_up_then_vote_initiative__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./top-up-then-vote-initiative */ "./src/top-up-then-vote-initiative/index.ts"); +/* harmony import */ var _executor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./executor */ "./src/executor.ts"); + function globallyInjectPrograms(executor) { - const functions = [_top_up_then_create_community__WEBPACK_IMPORTED_MODULE_1__.topupThenCreateCommunity, _initiatives__WEBPACK_IMPORTED_MODULE_0__.topupThenInitiativeAddMembers, _initiatives__WEBPACK_IMPORTED_MODULE_0__.topupThenInitiativeVote]; + const functions = [ + _top_up_then_create_community__WEBPACK_IMPORTED_MODULE_1__.topupThenCreateCommunity, + _initiatives__WEBPACK_IMPORTED_MODULE_0__.topupThenInitiativeSetup, + _top_up_then_vote_initiative__WEBPACK_IMPORTED_MODULE_2__.topupThenInitiativeVote + ]; for (const fn of functions) { globalThis[fn.name] = (...params) => executor.execute(fn, ...params); } @@ -76106,4 +75443,4 @@ var __webpack_exports__XcmProgramsExecutor = __webpack_exports__.XcmProgramsExec var __webpack_exports__globallyInjectPrograms = __webpack_exports__.globallyInjectPrograms; export { __webpack_exports__XcmProgramsExecutor as XcmProgramsExecutor, __webpack_exports__globallyInjectPrograms as globallyInjectPrograms }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtCQUErQixpQkFBaUI7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCLGlCQUFpQjtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsV0FBVztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFdBQVc7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNB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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixjQUFjO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsOEJBQThCLG1DQUFtQztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEIsbUNBQW1DO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsOEJBQThCLG1DQUFtQztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixtQ0FBbUM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsUUFBUTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0JBQW9CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLFFBQVE7QUFDckM7QUFDQSw4QkFBOEIsUUFBUTtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELGVBQWUsYUFBYSxhQUFhO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhLGFBQWE7QUFDcEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhLGFBQWE7QUFDcEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsaUJBQWlCLGFBQWE7QUFDeEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhLGFBQWE7QUFDcEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixnQkFBZ0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFVBQVU7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsbUJBQW1CO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixrREFBa0Q7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELG1CQUFtQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELG1CQUFtQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0RBQWdELEdBQUc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGFBQWEsYUFBYTtBQUNwRCxnQ0FBZ0MsbUJBQW1CLGFBQWE7QUFDaEU7QUFDQTtBQUNBLDhCQUE4QixpQkFBaUIsYUFBYTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3RWdEO0FBQ0E7QUFDZjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxzQkFBc0IsMENBQUk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix3REFBVyxPQUFPLEdBQUcsd0RBQVcsU0FBUztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsTUFBTTtBQUNuQyxtQ0FBbUMsdUJBQXVCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0RBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbURBQVM7QUFDeEI7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOU0wRDtBQUNEO0FBQzJFO0FBQ1Q7QUFDbkU7QUFDZjtBQUN6QztBQUNBO0FBQ0EsVUFBVSxzREFBTTtBQUNoQjtBQUNBO0FBQ0E7QUFDTyxtQkFBbUIsa0RBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxvREFBYztBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsZ0RBQUk7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1FQUFZO0FBQ3RDLDJCQUEyQixvRUFBYTtBQUN4QztBQUNBO0FBQ0EsNkNBQTZDLG1FQUFZO0FBQ3pEO0FBQ0Esa0RBQWtELDREQUFZLEdBQUcsRUFBRSx3RUFBaUI7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQVkscUNBQXFDLFdBQVc7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3REFBUTtBQUNoQyx1QkFBdUIsd0RBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHlEQUFZO0FBQ3pDLDZCQUE2QixzREFBUSxpQkFBaUIsb0RBQWM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNERBQVc7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsa0JBQWtCLHlCQUF5QjtBQUN0SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVEsb0RBQU87QUFDL0Isb0JBQW9CLG9EQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHdFQUFpQjtBQUM3RDtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG9CQUFvQixvREFBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsZUFBZSxzQkFBc0Isc0RBQUs7QUFDdEY7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELHdEQUFRO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxZQUFZO0FBQzlEO0FBQ0E7QUFDQSxxREFBcUQsWUFBWTtBQUNqRSw2QkFBNkIsUUFBUSxHQUFHLFdBQVc7QUFDbkQ7QUFDQTtBQUNBLDhCQUE4QixpRUFBVTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGQUF3RixnREFBUztBQUNqRztBQUNBO0FBQ0EsY0FBYyx5Q0FBRTtBQUNoQixxREFBcUQsMENBQUc7QUFDeEQseURBQXlELCtCQUErQixPQUFPLHNDQUFzQztBQUNySTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsWUFBWSxvREFBYztBQUMxQixZQUFZLG9EQUFjO0FBQzFCLFlBQVksb0RBQWM7QUFDMUIsWUFBWSxvREFBYztBQUMxQixZQUFZLG9EQUFjO0FBQzFCO0FBQ0E7QUFDQSxrQkFBa0Isb0RBQWM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDRCQUE0QixHQUFHLHNDQUFzQztBQUNwRztBQUNBLGtCQUFrQixzREFBUTtBQUMxQixvQkFBb0Isb0RBQWM7QUFDbEM7QUFDQTtBQUNBLDhEQUE4RCxpRUFBVTtBQUN4RTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsZ0ZBQWdGO0FBQy9IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0RBQWMsMENBQTBDLGdEQUFJO0FBQzVFLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdUVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RSxlQUFlO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xWMEM7QUFDbkM7QUFDUCxpQ0FBaUMsd0RBQVE7QUFDekM7QUFDTztBQUNQLGtDQUFrQyx3REFBUTtBQUMxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNONEU7QUFDckM7QUFDaEMsc0JBQXNCLGdEQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMseUJBQXlCO0FBQzVELFFBQVE7QUFDUjtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxTQUFTLElBQUk7QUFDN0MsWUFBWSx3REFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyw0REFBWSxHQUFHLGVBQWUsVUFBVSxTQUFTO0FBQzNGO0FBQ0EsZUFBZSx3REFBUSxjQUFjLHdEQUFRO0FBQzdDO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ3hETyxzQkFBc0IsOEJBQThCLEtBQThCLFlBQVksaUdBQWUsZ0NBQWdDLGlHQUFlLG1DQUFtQyxDQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0F4SjtBQUNUO0FBQ0U7QUFDeUI7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrUEFBa1A7QUFDbFA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGNBQWM7QUFDL0MsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxVQUFVO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDRCQUE0QjtBQUMxQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsVUFBVSxFQUFFLFNBQVMsR0FBRyxZQUFZO0FBQ2xFLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixPQUFPO0FBQ3JDO0FBQ0E7QUFDQSx1Q0FBdUMsWUFBWTtBQUNuRCxRQUFRO0FBQ1I7QUFDQTtBQUNBLDRDQUE0QyxLQUFLO0FBQ2pELFFBQVE7QUFDUixJQUFJO0FBQ0o7QUFDQTtBQUNPLHlCQUF5QixtREFBTztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHlCQUF5QjtBQUM5RCxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywrREFBZTtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsNEJBQTRCLGtFQUFjO0FBQzFDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxVQUFVO0FBQzFELFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsZ0RBQUk7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLDREQUFZLEdBQUcsbUJBQW1CLGNBQWM7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsWUFBWSxhQUFhLGNBQWMsY0FBYyxPQUFPO0FBQ3JGLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixzREFBVTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQzlMa0Q7QUFDM0M7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQywwREFBVTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGdEQUFJO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMERBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25FOEM7QUFDUTtBQUMvQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHVDQUFLO0FBQ3hCLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsMERBQVU7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDBEQUFVO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdEQUFVO0FBQzVCO0FBQ0E7QUFDQSxZQUFZLHdEQUFRO0FBQ3BCLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0RBQVUsb0NBQW9DLHlDQUFHO0FBQ25FO0FBQ0E7QUFDQSxZQUFZLHdEQUFRO0FBQ3BCLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ3RFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsU0FBUyx5QkFBeUI7QUFDOUQ7QUFDQTtBQUNBLDJCQUEyQixTQUFTLGdCQUFnQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwwRkFBMEY7QUFDNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0U0RTtBQUN5QjtBQUN0QztBQUNmO0FBQ2hELHlEQUF5RCw2QkFBNkI7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHdEQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsT0FBTztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsUUFBUSwwREFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNERBQVksR0FBRztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNERBQVksR0FBRywwREFBMEQsNEJBQTRCLGlIQUFpSDtBQUNqTztBQUNBLDJDQUEyQztBQUMzQyxXQUFXLG9EQUFJLG9CQUFvQix3REFBUTtBQUMzQyxZQUFZO0FBQ1o7QUFDQTtBQUNPLHVCQUF1Qix5Q0FBeUM7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsb0RBQVE7QUFDL0M7QUFDQSx5Q0FBeUMsNEJBQTRCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwwREFBVTtBQUM3QjtBQUNBO0FBQ0EsbUJBQW1CLDBEQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qix3REFBUSxtQkFBbUIscURBQUs7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrR0FBa0csK0NBQVM7QUFDM0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHdEQUFRLG1CQUFtQixxREFBSztBQUM3RDtBQUNBLHdGQUF3RiwrQ0FBUztBQUNqRztBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSw0QkFBNEIsNkRBQWE7QUFDekM7QUFDQSxrSEFBa0gsMkNBQUssSUFBSSwrQ0FBUztBQUNwSTtBQUNBO0FBQ0EsdUVBQXVFO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1HQUFtRywwQ0FBRztBQUN0RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsK0NBQVM7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNkRBQWE7QUFDekM7QUFDQSx1RkFBdUYsMkNBQUssSUFBSSwrQ0FBUTtBQUN4RztBQUNBO0FBQ0Esb0JBQW9CLDZEQUFhO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix5Q0FBRSxzQ0FBc0MsMERBQWlCO0FBQ2hGO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsMENBQUcsSUFBSSxlQUFlLDBDQUEwQywwREFBaUI7QUFDekksbUJBQW1CLDZEQUFZO0FBQy9CO0FBQ0E7QUFDQSxhQUFhLEtBQUssaURBQVUsb0JBQW9CLHlDQUFFLHNDQUFzQywwREFBaUI7QUFDekc7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSw2REFBNkQsMENBQUc7QUFDaEU7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLCtDQUFTLDhEQUE4RCwwQ0FBRztBQUMvSTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUsNERBQVksR0FBRztBQUM1RjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsMERBQVU7QUFDMUI7QUFDQTtBQUNBLHFCQUFxQiwwREFBVTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixvQkFBb0I7QUFDNUM7QUFDQSw4QkFBOEIsMERBQVU7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuTitDO0FBQ3hDO0FBQ1Asd0JBQXdCLDREQUFXLEdBQUcseUNBQXlDO0FBQy9FO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0prRTtBQUNsRSxVQUFVLHNEQUFNO0FBQ2hCO0FBQ0E7QUFDQSxjQUFjLGVBQWUsRUFBRSxLQUFLLEVBQUUseUJBQXlCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQixJQUFJLHlCQUF5QjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixPQUFPLFNBQVMsbUNBQW1DLEVBQUUsK0JBQStCLEVBQUUsS0FBSyxHQUFHLDBCQUEwQixFQUFFLDhCQUE4QjtBQUM5SztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELFlBQVk7QUFDN0Q7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELFlBQVk7QUFDaEU7QUFDQTtBQUNBLGlDQUFpQyxRQUFRLEdBQUcsT0FBTztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsaUJBQWlCLDJEQUFXO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsMkRBQVc7QUFDbkI7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDaEZ5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFdBQVc7QUFDckQsUUFBUSx1RUFBaUI7QUFDekI7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2IyQztBQUNWO0FBQzFCLGdDQUFnQyxTQUFTLHNCQUFzQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qix5REFBUztBQUN0Qyw0Q0FBNEMsT0FBTztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDBDQUFDLGVBQWUsb0JBQW9CLDZCQUE2QixnQkFBZ0IsU0FBUyxxQkFBcUI7QUFDdkg7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDckI0QztBQUNyQztBQUNQLFdBQVcsMERBQVU7QUFDckI7Ozs7Ozs7Ozs7Ozs7Ozs7QUNId0M7QUFDakMsd0JBQXdCLHNEQUFNOzs7Ozs7Ozs7Ozs7Ozs7O0FDRFE7QUFDN0MsZUFBZSxRQUFRLElBQUksaUJBQWlCO0FBQzVDLGNBQWMsUUFBUSxHQUFHLE9BQU8sR0FBRyxzREFBc0Q7QUFDekY7QUFDTztBQUNQLHNDQUFzQywyREFBVztBQUNqRDtBQUNBO0FBQ0EsK0JBQStCLDRCQUE0QiwrQkFBK0IsYUFBYTtBQUN2RztBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsZUFBZTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw4QkFBOEIsc0JBQXNCLGFBQWEsYUFBYSxhQUFhO0FBQzFIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0QmdFO0FBQ0s7QUFDcEI7QUFDRjtBQUNTO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQzZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixPQUFPLHFEQUFxRCxPQUFPO0FBQzFGO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixrQ0FBa0M7QUFDekQ7QUFDQTtBQUNBLGNBQWMsb0VBQWEsQ0FBQyxvRUFBYTtBQUN6QyxnQkFBZ0IsMkJBQTJCO0FBQzNDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsMEJBQTBCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qyw0REFBWSxHQUFHLGlEQUFpRDtBQUM3RztBQUNBLGtCQUFrQixTQUFTO0FBQzNCLDRDQUE0QyxXQUFXLElBQUksUUFBUTtBQUNuRSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixNQUFNO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw4REFBb0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esb0NBQW9DLGVBQWUsUUFBUSxLQUFLLEdBQUcsUUFBUTtBQUMzRTtBQUNBLDRDQUE0QyxlQUFlLFdBQVcsK0JBQStCLElBQUksaUJBQWlCO0FBQzFIO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sOEJBQThCLG1EQUFtRCxJQUFJO0FBQzVGO0FBQ0E7QUFDQSw2REFBNkQsd0JBQXdCO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCx3Q0FBd0MsaUJBQWlCLFNBQVMsa0NBQWtDO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLDJDQUEyQyxtREFBbUQsSUFBSTtBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxrQ0FBa0MsWUFBWSxXQUFXLGdCQUFnQjtBQUN6RTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIseURBQVM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsTUFBTTtBQUNsRDtBQUNBLHNFQUFzRSxPQUFPO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG9FQUFhO0FBQ3hDLDJDQUEyQyxxREFBSyxDQUFDLG9FQUFhO0FBQzlEO0FBQ0E7QUFDQSxvRUFBb0UsUUFBUTtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLFlBQVksV0FBVztBQUN2QjtBQUNBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLFlBQVksV0FBVztBQUN2QjtBQUNBLHFDQUFxQyxRQUFRO0FBQzdDO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7Ozs7Ozs7Ozs7Ozs7OztBQ3ZPTyxzQkFBc0IseUNBQXlDLEtBQThCLFlBQVksNEdBQWUsZ0NBQWdDLDRHQUFlLG1DQUFtQyxDQUFNOzs7Ozs7Ozs7Ozs7Ozs7QUNBaE47QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDVGtJO0FBQzNILGlCQUFpQiw2REFBaUI7QUFDbEMsZ0JBQWdCLDREQUFnQjtBQUNoQyxlQUFlLDJEQUFlO0FBQzlCLGtCQUFrQix3REFBWTtBQUM5QixvQkFBb0IsMERBQWM7QUFDbEMsa0JBQWtCLHdEQUFZOzs7Ozs7Ozs7Ozs7Ozs7QUNOOUI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDbktPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDUk87QUFDUDtBQUNBO0FB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O0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FDTEs7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsV0FBVztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ2pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JDNkM7QUFDNkQ7QUFDN0Q7QUFDRjtBQUNFO0FBQ1A7QUFDaUI7QUFDUjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxzREFBTTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUN0UE87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ1RPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDMUZxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRUFBVztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUVBQVc7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzdETztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDUHFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRUFBVztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbkRxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUVBQVc7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRUFBVztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzRHFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRUFBVztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xIcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUVBQVc7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkRpRDtBQUNJO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7OztBQ0Y1QztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDMzVKTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDL3lHTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkc4RztBQUN0RDtBQUNkO0FBQ0Y7QUFDc0I7QUFDSTtBQUNOO0FBQ0o7QUFDdUM7QUFDdkQ7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDVlQ7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEUztBQUNGO0FBQ0U7Ozs7Ozs7Ozs7Ozs7OztBQ0ZyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNsSEEsaUVBQWU7QUFDZixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ3JGNkI7QUFDL0IsaUVBQWU7QUFDZixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNOSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDNUUrQjtBQUMvQixpRUFBZTtBQUNmLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDUEs7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ25JQSxpRUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNQRixpRUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDekJGLGlFQUFlO0FBQ2YsV0FBVztBQUNYO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTjZCO0FBQ1E7QUFDdkMsaUVBQWU7QUFDZixPQUFPO0FBQ1AsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUN4YUs7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNqTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWU7QUFDZixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYiw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkNnRTtBQUNGO0FBQ0k7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRm5DO0FBQ1E7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxFQUFFLEdBQUcsbURBQVMsMkRBQVMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDL1Z2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsNkJBQTZCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLGNBQWM7QUFDZDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxjQUFjLGtDQUFrQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDbGZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFB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QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDbElLO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNyQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQzFEMEM7QUFDbkM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxlQUFlLG1EQUFVO0FBQ3pCO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ3pETztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUMxQk87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ3pEZ0Q7QUFDekM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsV0FBVyx3REFBVTtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVcsd0RBQVU7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLHdEQUFVO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzFGTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ3pETztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQzlFdUM7QUFDdkMsaUVBQWU7QUFDZixXQUFXO0FBQ1gsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QiwwQkFBMEI7QUFDMUIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDMUJLO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3JDK0I7QUFDUTtBQUN2QyxpRUFBZTtBQUNmLE9BQU87QUFDUCxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNsQ0s7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDN2lCRjtBQUNBLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUN4QkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDelpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FB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LHNDQUFFO0FBQ2IsV0FBVyxzQ0FBRTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3pCRjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2hFQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ2hFQSxpRUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCcUM7QUFDdkM7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZTtBQUNmLFdBQVc7QUFDWCxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3JDSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDNUJBLGlFQUFlO0FBQ2YsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQnFDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRSxtRUFBbUU7QUFDbkUsbUVBQW1FO0FBQ25FLG1FQUFtRTtBQUNuRSxtRUFBbUU7QUFDbkUsbUVBQW1FO0FBQ25FLG1FQUFtRTtBQUNuRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRSxtRUFBbUU7QUFDbkUsbUVBQW1FO0FBQ25FLG1FQUFtRTtBQUNuRSxtRUFBbUU7QUFDbkUsbUVBQW1FO0FBQ25FLG1FQUFtRTtBQUNuRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxxREFBcUQ7QUFDckQscURBQXFEO0FBQ3JELHFEQUFxRDtBQUNyRCxxREFBcUQ7QUFDckQscURBQXFEO0FBQ3JELHFEQUFxRDtBQUNyRCxxREFBcUQ7QUFDckQscURBQXFEO0FBQ3JELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxpRUFBZTtBQUNmLFdBQVc7QUFDWCxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDdFNLO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQitCO0FBQy9CLGlFQUFlO0FBQ2YsT0FBTztBQUNQO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3JGSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtB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O0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQzdUSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtB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QUFDMUIsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUN4Tk87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUIsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUN2Tk87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDcE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxPQUFPO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsMENBQTBDLFdBQVc7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEQ2QztBQUNPO0FBQ2xCO0FBQ1E7QUFDSTtBQUNKO0FBQ047QUFDTTtBQUNBO0FBQ1Q7QUFDakM7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsV0FBVztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxPQUFPO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsVUFBVTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFD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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0UsU0FBUyxnQkFBZ0I7QUFDeEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7O1NDalhGO1NBQ0E7O1NBRUE7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7O1NBRUE7U0FDQTs7U0FFQTtTQUNBOztTQUVBO1NBQ0E7U0FDQTs7Ozs7VUN6QkE7VUFDQTtVQUNBO1VBQ0E7VUFDQSx5Q0FBeUMsd0NBQXdDO1VBQ2pGO1VBQ0E7VUFDQTs7Ozs7VUNQQTtVQUNBO1VBQ0E7VUFDQTtVQUNBLEdBQUc7VUFDSDtVQUNBO1VBQ0EsQ0FBQzs7Ozs7VUNQRDs7Ozs7VUNBQTtVQUNBO1VBQ0E7VUFDQSx1REFBdUQsaUJBQWlCO1VBQ3hFO1VBQ0EsZ0RBQWdELGFBQWE7VUFDN0Q7Ozs7O1VDTkE7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSnVGO0FBQ2I7QUFDekI7QUFDMUM7QUFDUCx1QkFBdUIsbUZBQXdCLEVBQUUsdUVBQTZCLEVBQUUsaUVBQXVCO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvaGFzaC13YXNtL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL0JlaGF2aW9yU3ViamVjdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvT2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1NjaGVkdWxlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJqZWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmliZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3Vic2NyaXB0aW9uLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tU3Vic2NyaWJhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvaW5uZXJGcm9tLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb2YuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY2F0Y2hFcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0QWxsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3RVbnRpbENoYW5nZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmlyc3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VBbGwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9vYnNlcnZlT24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hSZXBsYXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW5JbnRlcm5hbHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3Vic2NyaWJlT24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVJdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcEFjdGlvbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNBY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hc2FwLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbnRlcnZhbFByb3ZpZGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvRW1wdHlFcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0ltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvVW5zdWJzY3JpcHRpb25FcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyclJlbW92ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2NyZWF0ZUVycm9yQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9jcmVhdGVPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9lcnJvckNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNBc3luY0l0ZXJhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0l0ZXJhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1NjaGVkdWxlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2xpZnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbm9vcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3BpcGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9zcmMvY29tbW9uLnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL2V4ZWN1dG9yLnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL2luaXRpYXRpdmVzL2luZGV4LnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL3RvcC11cC10aGVuLWNyZWF0ZS1jb21tdW5pdHkvYWNxdWlyZS1tZW1iZXJzaGlwcy1pbnZpdGUtbWVtYmVycy50cyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL3NyYy90b3AtdXAtdGhlbi1jcmVhdGUtY29tbXVuaXR5L2NyZWF0ZS1jb21tdW5pdHkudHMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9zcmMvdG9wLXVwLXRoZW4tY3JlYXRlLWNvbW11bml0eS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL3NyYy90b3AtdXAtdGhlbi1jcmVhdGUtY29tbXVuaXR5L3NldC1pZGVudGl0eS50cyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL3NyYy90b3AtdXAtdGhlbi1jcmVhdGUtY29tbXVuaXR5L3RvcHVwLWFjY291bnRzLnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL3V0aWxzL2NvbW11bml0eS1hY2NvdW50LWlkcy50cyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy9pZ25vcmVkfC9ob21lL2JyYXlhbi9Eb2N1bWVudHMvd29yay92aXJ0by94Y20tcHJvZ3JhbXMvbm9kZV9tb2R1bGVzL2JuLmpzL2xpYnxidWZmZXIiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3dhc20tY3J5cHRvLXdhc20vY2pzL2J5dGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL19zaG9ydHdfdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvY3VydmUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvaGFzaC10by1jdXJ2ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC9tb2R1bGFyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3V0aWxzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L3dlaWVyc3RyYXNzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL3NlY3AyNTZrMS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9fYXNzZXJ0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL19ibGFrZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9fbWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX3U2NC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9ibGFrZTJiLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL2NyeXB0by5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9obWFjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3NoYTI1Ni5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9zaGEzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL3V0aWxzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2FjY291bnRzL2FjY291bnRJZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hY2NvdW50cy9mbGFncy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hY2NvdW50cy9pZEFuZEluZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2FjY291bnRzL2lkVG9JbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hY2NvdW50cy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hY2NvdW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hY2NvdW50cy9pbmRleFRvSWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYWNjb3VudHMvaW5kZXhlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hY2NvdW50cy9pbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2FsbGlhbmNlL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2JhZ3NMaXN0L2dldC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9iYWdzTGlzdC9nZXRFeHBhbmRlZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9iYWdzTGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9iYWdzTGlzdC9saXN0Tm9kZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYmFnc0xpc3QvdXRpbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9iYWxhbmNlcy9hY2NvdW50LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2JhbGFuY2VzL2FsbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9iYWxhbmNlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9iYWxhbmNlcy92b3RpbmdCYWxhbmNlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9ib3VudGllcy9ib3VudGllcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9ib3VudGllcy9oZWxwZXJzL2ZpbHRlckJvdW50eVByb3Bvc2Fscy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9ib3VudGllcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9idW5kbGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vYmVzdE51bWJlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jaGFpbi9iZXN0TnVtYmVyRmluYWxpemVkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NoYWluL2Jlc3ROdW1iZXJMYWcuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vZ2V0QmxvY2suanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vZ2V0QmxvY2tCeU51bWJlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jaGFpbi9nZXRIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vc3Vic2NyaWJlRmluYWxpemVkQmxvY2tzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NoYWluL3N1YnNjcmliZUZpbmFsaXplZEhlYWRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NoYWluL3N1YnNjcmliZU5ld0Jsb2Nrcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jaGFpbi9zdWJzY3JpYmVOZXdIZWFkcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jaGFpbi91dGlsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NvbGxlY3RpdmUvaGVscGVycy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jb2xsZWN0aXZlL21lbWJlcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY29sbGVjdGl2ZS9wcmltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jb2xsZWN0aXZlL3Byb3Bvc2Fscy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jb250cmFjdHMvZmVlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jb250cmFjdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY291bmNpbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jb3VuY2lsL3ZvdGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NvdW5jaWwvdm90ZXNPZi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jcm93ZGxvYW4vY2hpbGRLZXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY3Jvd2Rsb2FuL2NvbnRyaWJ1dGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY3Jvd2Rsb2FuL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2Nyb3dkbG9hbi9vd25Db250cmlidXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2Nyb3dkbG9hbi91dGlsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2RlbW9jcmFjeS9kaXNwYXRjaFF1ZXVlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2RlbW9jcmFjeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvbG9ja3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVtb2NyYWN5L25leHRFeHRlcm5hbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvcHJlaW1hZ2VzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2RlbW9jcmFjeS9wcm9wb3NhbHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVtb2NyYWN5L3JlZmVyZW5kdW1JZHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVtb2NyYWN5L3JlZmVyZW5kdW1zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2RlbW9jcmFjeS9yZWZlcmVuZHVtc0FjdGl2ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvcmVmZXJlbmR1bXNGaW5pc2hlZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvcmVmZXJlbmR1bXNJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2RlbW9jcmFjeS9zcXJ0RWxlY3RvcmF0ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvdXRpbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZXJpdmUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZWxlY3Rpb25zL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2VsZWN0aW9ucy9pbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2ltT25saW5lL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2ltT25saW5lL3JlY2VpdmVkSGVhcnRiZWF0cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9tZW1iZXJzaGlwL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3BhcmFjaGFpbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvcGFyYWNoYWlucy9pbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3BhcmFjaGFpbnMvb3ZlcnZpZXcuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvcGFyYWNoYWlucy91dGlsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3Nlc3Npb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc2Vzc2lvbi9pbmRleGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3Nlc3Npb24vaW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zZXNzaW9uL3Byb2dyZXNzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3NvY2lldHkvY2FuZGlkYXRlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zb2NpZXR5L2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3NvY2lldHkvaW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zb2NpZXR5L21lbWJlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zb2NpZXR5L21lbWJlcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9hY2NvdW50LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvY2FjaGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9jdXJyZW50UG9pbnRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvZWxlY3RlZEluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9lcmFzRXhwb3N1cmUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9lcmFzSGlzdG9yaWMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9lcmFzUG9pbnRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvZXJhc1ByZWZzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvZXJhc1Jld2FyZHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9lcmFzU2xhc2hlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcva2V5cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL292ZXJ2aWV3LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvb3duRXhwb3N1cmUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9vd25TbGFzaGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvcXVlcnkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9zdGFrZXJFeHBvc3VyZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL3N0YWtlclBvaW50cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL3N0YWtlclByZWZzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvc3Rha2VyUmV3YXJkcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL3N0YWtlclNsYXNoZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9zdGFzaGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvdXRpbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy93YWl0aW5nSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS90ZWNobmljYWxDb21taXR0ZWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHJlYXN1cnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHJlYXN1cnkvcHJvcG9zYWxzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3R4L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS90eC9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHgvc2lnbmluZ0luZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHlwZS9IZWFkZXJFeHRlbmRlZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS90eXBlL1NpZ25lZEJsb2NrRXh0ZW5kZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS90eXBlL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdXRpbC9ibG9ja051bWJlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS91dGlsL2NhY2hlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3V0aWwvY2FjaGVJbXBsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3V0aWwvZmlyc3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdXRpbC9sYXp5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvYmFzZS9EZWNvcmF0ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL2Jhc2UvRXZlbnRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvYmFzZS9HZXR0ZXJzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvYmFzZS9Jbml0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvYmFzZS9maW5kLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvYmFzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvcHJvbWlzZS9BcGkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS9wcm9taXNlL0NvbWJpbmF0b3IuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS9wcm9taXNlL2RlY29yYXRlTWV0aG9kLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvc3VibWl0dGFibGUvUmVzdWx0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvc3VibWl0dGFibGUvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS9zdWJtaXR0YWJsZS9jcmVhdGVTdWJtaXR0YWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3V0aWwvYXVnbWVudE9iamVjdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3V0aWwvZGVjb3JhdGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS91dGlsL2ZpbHRlckV2ZW50cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3V0aWwvaXNLZXlyaW5nUGFpci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3V0aWwvbG9nZ2luZy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3V0aWwvdmFsaWRhdGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2V4dGVuc2lvbi1kYXBwL2J1bmRsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvZXh0ZW5zaW9uLWRhcHAvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2V4dGVuc2lvbi1kYXBwL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2V4dGVuc2lvbi1kYXBwL3dyYXBCeXRlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvbmV0d29ya3MvZGVmYXVsdHMvZ2VuZXNpcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvbmV0d29ya3MvZGVmYXVsdHMvaWNvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L25ldHdvcmtzL2RlZmF1bHRzL2xlZGdlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvbmV0d29ya3MvZGVmYXVsdHMvdGVzdG5ldHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L25ldHdvcmtzL2ludGVyZmFjZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1jb3JlL2J1bmRsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvcnBjLWNvcmUvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1jb3JlL3V0aWwvZHJyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9ycGMtY29yZS91dGlsL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9ycGMtY29yZS91dGlsL21lbW8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1jb3JlL3V0aWwvcmVmQ291bnREZWxheS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvcnBjLXByb3ZpZGVyL2NvZGVyL2Vycm9yLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9ycGMtcHJvdmlkZXIvY29kZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1wcm92aWRlci9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvcnBjLXByb3ZpZGVyL2xydS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvcnBjLXByb3ZpZGVyL3dzL2Vycm9ycy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvcnBjLXByb3ZpZGVyL3dzL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9hYnN0cmFjdC9BcnJheS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYWJzdHJhY3QvQmFzZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYWJzdHJhY3QvSW50LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL0NvbXBhY3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Jhc2UvRG9Ob3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Jhc2UvRW51bS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYmFzZS9JbnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Jhc2UvTnVsbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYmFzZS9PcHRpb24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Jhc2UvUmVzdWx0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL1R1cGxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL1VJbnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Jhc2UvVmVjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL1ZlY0ZpeGVkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9leHRlbmRlZC9CVHJlZU1hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvZXh0ZW5kZWQvQlRyZWVTZXQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL0JpdFZlYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvZXh0ZW5kZWQvQnl0ZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL0hhc2hNYXAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL0xpbmthZ2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL01hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvZXh0ZW5kZWQvT3B0aW9uQm9vbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvZXh0ZW5kZWQvUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL1JhbmdlSW5jbHVzaXZlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9leHRlbmRlZC9UeXBlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9leHRlbmRlZC9VOGFGaXhlZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvZXh0ZW5kZWQvV3JhcHBlcktlZXBPcGFxdWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL1dyYXBwZXJPcGFxdWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL25hdGl2ZS9Cb29sLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9uYXRpdmUvRmxvYXQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL25hdGl2ZS9Kc29uLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9uYXRpdmUvUmF3LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9uYXRpdmUvU2V0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9uYXRpdmUvU3RydWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9uYXRpdmUvVGV4dC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3ByaW1pdGl2ZS9GMzIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3ByaW1pdGl2ZS9GNjQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3ByaW1pdGl2ZS9JMTI4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvSTE2LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvSTI1Ni5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL0kzMi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL0k2NC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL0k4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvSVNpemUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3ByaW1pdGl2ZS9VMTI4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvVTE2LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvVTI1Ni5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL1UzMi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL1U2NC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL1U4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvVVNpemUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3V0aWxzL2NvbXBhcmVBcnJheS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvY29tcGFyZU1hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvY29tcGFyZVNldC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvZGVjb2RlVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy91dGlscy9zYW5pdGl6ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvc29ydFZhbHVlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvdG9Db25zdHJ1Y3RvcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3V0aWxzL3R5cGVzVG9NYXAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3V0aWxzL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNyZWF0ZS9jcmVhdGUvY2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNyZWF0ZS9jcmVhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNyZWF0ZS9jcmVhdGUvdHlwZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY3JlYXRlL2V4cG9ydHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNyZWF0ZS9wYWNrYWdlSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY3JlYXRlL3R5cGVzL3R5cGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUvdXRpbC9lbmNvZGVUeXBlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY3JlYXRlL3V0aWwvZ2V0VHlwZURlZi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY3JlYXRlL3V0aWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNyZWF0ZS91dGlsL3R5cGVTcGxpdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY3JlYXRlL3V0aWwveGNtLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9jaGFpbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vc3BlYy9jZW50cmlmdWdlLWNoYWluLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL2t1c2FtYS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vc3BlYy9ub2RlLXRlbXBsYXRlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL25vZGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3NwZWMvcG9sa2Fkb3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3NwZWMvcm9jb2NvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL3NoZWxsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL3N0YXRlbWluZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vc3BlYy9zdGF0ZW1pbnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3NwZWMvd2VzdGVuZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vc3BlYy93ZXN0bWludC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vdXBncmFkZXMvZTJlL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi91cGdyYWRlcy9lMmUva3VzYW1hLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi91cGdyYWRlcy9lMmUvcG9sa2Fkb3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3VwZ3JhZGVzL2UyZS93ZXN0ZW5kLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi91cGdyYWRlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vdXRpbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvYnVuZGxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9jb2RlYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvY3JlYXRlL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9jcmVhdGUvY3JlYXRlVHlwZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvY3JlYXRlL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9jcmVhdGUvbGF6eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvY3JlYXRlL3JlZ2lzdHJ5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9ldGhlcmV1bS9BY2NvdW50SWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V0aGVyZXVtL0xvb2t1cFNvdXJjZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXRoZXJldW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9FeHRyaW5zaWMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9FeHRyaW5zaWNFcmEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9FeHRyaW5zaWNQYXlsb2FkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvRXh0cmluc2ljUGF5bG9hZFVua25vd24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9FeHRyaW5zaWNVbmtub3duLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvU2lnbmVyUGF5bG9hZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXh0cmluc2ljL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXh0cmluc2ljL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvc2lnbmVkRXh0ZW5zaW9ucy9lbXB0eUNoZWNrLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvc2lnbmVkRXh0ZW5zaW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXh0cmluc2ljL3NpZ25lZEV4dGVuc2lvbnMvcG9sa2Fkb3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9zaWduZWRFeHRlbnNpb25zL3NoZWxsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvc2lnbmVkRXh0ZW5zaW9ucy9zdGF0ZW1pbnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9zaWduZWRFeHRlbnNpb25zL3N1YnN0cmF0ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXh0cmluc2ljL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy92NC9FeHRyaW5zaWMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy92NC9FeHRyaW5zaWNQYXlsb2FkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvdjQvRXh0cmluc2ljU2lnbmF0dXJlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvdjQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2dlbmVyaWMvQWNjb3VudElkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9nZW5lcmljL0FjY291bnRJbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9CbG9jay5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9DYWxsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9nZW5lcmljL0NoYWluUHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9Db25zZW5zdXNFbmdpbmVJZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9FdmVudC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9Mb29rdXBTb3VyY2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2dlbmVyaWMvTXVsdGlBZGRyZXNzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9nZW5lcmljL1ZvdGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2dlbmVyaWMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbmRleC50eXBlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9hbGlhcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9hc3NldENvbnZlcnNpb24vZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYXNzZXRDb252ZXJzaW9uL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYXNzZXRzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2Fzc2V0cy9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2F0dGVzdGF0aW9ucy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9hdXJhL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2F1cmEvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9hdXRob3IvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYXV0aG9yL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9hdXRob3JzaGlwL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2JhYmUvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYmFiZS9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYmFiZS9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2JhbGFuY2VzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2JlZWZ5L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2JlZWZ5L3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9iZWVmeS9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2JlbmNobWFyay9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9iZW5jaG1hcmsvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ibG9ja2J1aWxkZXIvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYmxvY2tidWlsZGVyL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYnJpZGdlcy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jaGFpbi9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jaGFpbi9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvY2hpbGRzdGF0ZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jaGlsZHN0YXRlL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jbGFpbXMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvY29sbGVjdGl2ZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jb25zZW5zdXMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvY29udHJhY3RzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2NvbnRyYWN0cy9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvY29udHJhY3RzL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvY29udHJhY3RzQWJpL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2Nyb3dkbG9hbi9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jdW11bHVzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2N1bXVsdXMvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9kZW1vY3JhY3kvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZGV2L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2Rldi9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZGlzY292ZXJ5L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2Rpc2NvdmVyeS9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2VsZWN0aW9ucy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9lbmdpbmUvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZW5naW5lL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9lc3NlbnRpYWxzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2V0aC9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ldGgvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2V0aC9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2V2bS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9leHRyaW5zaWNzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2ZpbmFsaXR5L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2ZpbmFsaXR5L3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZnVuZ2libGVzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2Z1bmdpYmxlcy9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2dlbmVyaWNBc3NldC9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9nZW5lc2lzQnVpbGRlci9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9nZW5lc2lzQnVpbGRlci9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2dpbHQvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZ3JhbmRwYS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ncmFuZHBhL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ncmFuZHBhL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvaWRlbnRpdHkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvaW1PbmxpbmUvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvanNvbnJwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9sb3R0ZXJ5L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21ldGFkYXRhL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21ldGFkYXRhL2hhc2hlcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbWV0YWRhdGEvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9tZXRhZGF0YS92MTAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbWV0YWRhdGEvdjExLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21ldGFkYXRhL3YxMi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9tZXRhZGF0YS92MTMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbWV0YWRhdGEvdjE0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21ldGFkYXRhL3YxNS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9tZXRhZGF0YS92OS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9taXhuZXQvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbWl4bmV0L3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbW1yL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21tci9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbW1yL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbmZ0cy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9uZnRzL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbmltYnVzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL25pbWJ1cy9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL25vbXBvb2xzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL25vbXBvb2xzL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvb2ZmY2hhaW4vZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvb2ZmY2hhaW4vcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL29mZmNoYWluL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvb2ZmZW5jZXMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvb3JtbE9yYWNsZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9vcm1sT3JhY2xlL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvb3JtbFRva2Vucy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9vcm1sVG9rZW5zL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcGFyYWNoYWlucy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wYXJhY2hhaW5zL2hybXAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcGFyYWNoYWlucy9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3BhcmFjaGFpbnMvc2xvdHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcGF5bWVudC9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wYXltZW50L3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wYXltZW50L3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcG9sbC9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wb3cvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcG93L3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcHJveHkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcHVyY2hhc2UvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcmVjb3ZlcnkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcnBjL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3JwYy9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcnVudGltZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ydW50aW1lL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc2NhbGVJbmZvL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3NjYWxlSW5mby92MC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zY2FsZUluZm8vdjEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc2NoZWR1bGVyL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3Nlc3Npb24vZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc2Vzc2lvbi9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3NvY2lldHkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc3Rha2luZy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zdGFraW5nL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc3RhdGUvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc3RhdGUvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N0YXRlbWVudC9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zdGF0ZW1lbnQvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zdXBwb3J0L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N5bmNzdGF0ZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zeW5jc3RhdGUvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N5c3RlbS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zeXN0ZW0vcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N5c3RlbS9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3RyZWFzdXJ5L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3R4cGF5bWVudC9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy90eHF1ZXVlL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3R4cXVldWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy91bmlxdWVzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3V0aWxpdHkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvdmVzdGluZy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy94Y20vZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMveGNtL3YwLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3hjbS92MS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy94Y20vdjIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL01hZ2ljTnVtYmVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9NZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvTWV0YWRhdGFWZXJzaW9uZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL1BvcnRhYmxlUmVnaXN0cnkvUG9ydGFibGVSZWdpc3RyeS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvUG9ydGFibGVSZWdpc3RyeS90b1YxLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9kZWNvcmF0ZS9jb25zdGFudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL2Vycm9ycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvZGVjb3JhdGUvZXZlbnRzL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9kZWNvcmF0ZS9leHRyaW5zaWNzL2NyZWF0ZVVuY2hlY2tlZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvZGVjb3JhdGUvZXh0cmluc2ljcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvZGVjb3JhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3N0b3JhZ2UvY3JlYXRlRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3N0b3JhZ2UvZ2V0SGFzaGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9kZWNvcmF0ZS9zdG9yYWdlL2dldFN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3N0b3JhZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3N0b3JhZ2Uvc3Vic3RyYXRlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9kZWNvcmF0ZS9zdG9yYWdlL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS91dGlsL2V4dHJhY3RUeXBlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvdXRpbC9mbGF0dGVuVW5pcS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvdXRpbC9nZXRTaU5hbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3V0aWwvZ2V0VW5pcVR5cGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS91dGlsL3RvQ2FsbHNPbmx5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS91dGlsL3ZhbGlkYXRlVHlwZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3YxMC90b1YxMS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvdjExL3RvVjEyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS92MTIvdG9WMTMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3YxMy90b1YxNC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvdjE0L3RvVjE1LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS92MTUvdG9MYXRlc3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3Y5L3RvVjEwLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS92ZXJzaW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvcGFja2FnZURldGVjdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL3ByaW1pdGl2ZS9EYXRhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9wcmltaXRpdmUvU3RvcmFnZUtleS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvcHJpbWl0aXZlL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy91dGlsL3N0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2FkZHJlc3MvY2hlY2tzdW0uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2FkZHJlc3MvZGVjb2RlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9hZGRyZXNzL2RlZmF1bHRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9hZGRyZXNzL2VuY29kZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vYWRkcmVzcy9pcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vYWRkcmVzcy9zc2hhc2guanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2FkZHJlc3MvdmFsaWRhdGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2Jhc2UzMi9oZWxwZXJzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9iYXNlNTgvYnM1OC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vYmxha2UyL2FzVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9ibi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vY3J5cHRvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9ldGhlcmV1bS9lbmNvZGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2V0aGVyZXVtL2lzQWRkcmVzcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vZXRoZXJldW0vaXNDaGVja3N1bS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vaGVscGVycy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8va2VjY2FrL2FzVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9zZWNwMjU2azEvZXhwYW5kLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by94eGhhc2gvYXNVOGEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL3h4aGFzaC94eGhhc2g2NC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9hcnJheS9jaHVuay5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9hcnJheS9mbGF0dGVuLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2Fzc2VydC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9iaS9jb25zdHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYmkvaGVscGVycy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9ibi9jb25zdHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYm4vbWluLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2JuL3NxcnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYm4vdG9Cbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9ibi90b0hleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9ibi90b1U4YS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9jb21wYWN0L2FkZExlbmd0aC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9jb21wYWN0L2Zyb21VOGEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvY29tcGFjdC9zdHJpcExlbmd0aC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9jb21wYWN0L3RvVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2Zsb2F0L3RvVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2Zvcm1hdC9mb3JtYXRCYWxhbmNlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2Zvcm1hdC9mb3JtYXREYXRlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2Zvcm1hdC9mb3JtYXREZWNpbWFsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2Zvcm1hdC9mb3JtYXROdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvZm9ybWF0L2dldFNlcGFyYXRvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9mb3JtYXQvc2kuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaGFzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2hleC9zdHJpcFByZWZpeC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9oZXgvdG9Cbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9oZXgvdG9VOGEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvYXNjaWkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvYmlnSW50LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2JuLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2Jvb2xlYW4uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvYnVmZmVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2NoaWxkQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvY2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvY29kZWMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvY29tcGFjdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9oZWxwZXJzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2hleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9udWxsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL251bWJlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9vYmplY3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvdG9CaWdJbnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvdG9Cbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy91OGEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvdW5kZWZpbmVkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL3V0ZjguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvbGF6eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9sb2dnZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvbWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9uZXh0VGljay5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9ub29wLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL29iamVjdC9jbGVhci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9vYmplY3QvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvb2JqZWN0L3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9zdHJpbmcvY2FtZWxDYXNlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3N0cmluZy9sb3dlckZpcnN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3N0cmluZy90b0hleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9zdHJpbmcvdG9VOGEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3U4YS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvdThhL2VxLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3U4YS90b0JuLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3U4YS90b0Zsb2F0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3U4YS90b0hleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC91OGEvdG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvdThhL3RvU3RyaW5nLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3U4YS90b1U4YS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC91OGEvd3JhcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC92ZXJzaW9uRGV0ZWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWJyaWRnZS9icmlkZ2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3dhc20tYnJpZGdlL2luaXQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3dhc20tYnJpZGdlL3diZy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3Qvd2FzbS1jcnlwdG8taW5pdC9wYWNrYWdlSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3Qvd2FzbS1jcnlwdG8taW5pdC93YXNtLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtL2J1bmRsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3Qvd2FzbS1jcnlwdG8td2FzbS9wYWNrYWdlSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3Qvd2FzbS1jcnlwdG8vYnVuZGxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWNyeXB0by9pbml0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWNyeXB0by9wYWNrYWdlSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3Qvd2FzbS11dGlsL2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3Qvd2FzbS11dGlsL2ZmbGF0ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC1iaWdpbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtYmlnaW50L3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC94LWdsb2JhbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC1nbG9iYWwvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtcmFuZG9tdmFsdWVzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtcmFuZG9tdmFsdWVzL3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC94LXRleHRkZWNvZGVyL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtdGV4dGRlY29kZXIvZmFsbGJhY2suanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtdGV4dGRlY29kZXIvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtdGV4dGVuY29kZXIvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC10ZXh0ZW5jb2Rlci9mYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC10ZXh0ZW5jb2Rlci9wYWNrYWdlSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC13cy9icm93c2VyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC94LXdzL3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0BzY3VyZS9iYXNlL2xpYi9lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHN1YnN0cmF0ZS9zczU4LXJlZ2lzdHJ5L2VzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBVdGlsc1xuICBmdW5jdGlvbiBhc3NlcnQgKHZhbCwgbXNnKSB7XG4gICAgaWYgKCF2YWwpIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbiAgfVxuXG4gIC8vIENvdWxkIHVzZSBgaW5oZXJpdHNgIG1vZHVsZSwgYnV0IGRvbid0IHdhbnQgdG8gbW92ZSBmcm9tIHNpbmdsZSBmaWxlXG4gIC8vIGFyY2hpdGVjdHVyZSB5ZXQuXG4gIGZ1bmN0aW9uIGluaGVyaXRzIChjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcbiAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlO1xuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKCk7XG4gICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yO1xuICB9XG5cbiAgLy8gQk5cblxuICBmdW5jdGlvbiBCTiAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAoQk4uaXNCTihudW1iZXIpKSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cblxuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgIHRoaXMud29yZHMgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcblxuICAgIC8vIFJlZHVjdGlvbiBjb250ZXh0XG4gICAgdGhpcy5yZWQgPSBudWxsO1xuXG4gICAgaWYgKG51bWJlciAhPT0gbnVsbCkge1xuICAgICAgaWYgKGJhc2UgPT09ICdsZScgfHwgYmFzZSA9PT0gJ2JlJykge1xuICAgICAgICBlbmRpYW4gPSBiYXNlO1xuICAgICAgICBiYXNlID0gMTA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2luaXQobnVtYmVyIHx8IDAsIGJhc2UgfHwgMTAsIGVuZGlhbiB8fCAnYmUnKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBCTjtcbiAgfSBlbHNlIHtcbiAgICBleHBvcnRzLkJOID0gQk47XG4gIH1cblxuICBCTi5CTiA9IEJOO1xuICBCTi53b3JkU2l6ZSA9IDI2O1xuXG4gIHZhciBCdWZmZXI7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuQnVmZmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgQnVmZmVyID0gd2luZG93LkJ1ZmZlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICB9XG5cbiAgQk4uaXNCTiA9IGZ1bmN0aW9uIGlzQk4gKG51bSkge1xuICAgIGlmIChudW0gaW5zdGFuY2VvZiBCTikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bSAhPT0gbnVsbCAmJiB0eXBlb2YgbnVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgbnVtLmNvbnN0cnVjdG9yLndvcmRTaXplID09PSBCTi53b3JkU2l6ZSAmJiBBcnJheS5pc0FycmF5KG51bS53b3Jkcyk7XG4gIH07XG5cbiAgQk4ubWF4ID0gZnVuY3Rpb24gbWF4IChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPiAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ubWluID0gZnVuY3Rpb24gbWluIChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPCAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdCAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlciwgYmFzZSwgZW5kaWFuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0QXJyYXkobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAnaGV4Jykge1xuICAgICAgYmFzZSA9IDE2O1xuICAgIH1cbiAgICBhc3NlcnQoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNik7XG5cbiAgICBudW1iZXIgPSBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGlmIChudW1iZXJbMF0gPT09ICctJykge1xuICAgICAgc3RhcnQrKztcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA8IG51bWJlci5sZW5ndGgpIHtcbiAgICAgIGlmIChiYXNlID09PSAxNikge1xuICAgICAgICB0aGlzLl9wYXJzZUhleChudW1iZXIsIHN0YXJ0LCBlbmRpYW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcGFyc2VCYXNlKG51bWJlciwgYmFzZSwgc3RhcnQpO1xuICAgICAgICBpZiAoZW5kaWFuID09PSAnbGUnKSB7XG4gICAgICAgICAgdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLCBiYXNlLCBlbmRpYW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faW5pdE51bWJlciA9IGZ1bmN0aW9uIF9pbml0TnVtYmVyIChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIG51bWJlciA9IC1udW1iZXI7XG4gICAgfVxuICAgIGlmIChudW1iZXIgPCAweDQwMDAwMDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbbnVtYmVyICYgMHgzZmZmZmZmXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA8IDB4MTAwMDAwMDAwMDAwMDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbXG4gICAgICAgIG51bWJlciAmIDB4M2ZmZmZmZixcbiAgICAgICAgKG51bWJlciAvIDB4NDAwMDAwMCkgJiAweDNmZmZmZmZcbiAgICAgIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChudW1iZXIgPCAweDIwMDAwMDAwMDAwMDAwKTsgLy8gMiBeIDUzICh1bnNhZmUpXG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmLFxuICAgICAgICAxXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAzO1xuICAgIH1cblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIC8vIFJldmVyc2UgdGhlIGJ5dGVzXG4gICAgdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLCBiYXNlLCBlbmRpYW4pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faW5pdEFycmF5ID0gZnVuY3Rpb24gX2luaXRBcnJheSAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICAvLyBQZXJoYXBzIGEgVWludDhBcnJheVxuICAgIGFzc2VydCh0eXBlb2YgbnVtYmVyLmxlbmd0aCA9PT0gJ251bWJlcicpO1xuICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbMF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbChudW1iZXIubGVuZ3RoIC8gMyk7XG4gICAgdGhpcy53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICB9XG5cbiAgICB2YXIgaiwgdztcbiAgICB2YXIgb2ZmID0gMDtcbiAgICBpZiAoZW5kaWFuID09PSAnYmUnKSB7XG4gICAgICBmb3IgKGkgPSBudW1iZXIubGVuZ3RoIC0gMSwgaiA9IDA7IGkgPj0gMDsgaSAtPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgLSAxXSA8PCA4KSB8IChudW1iZXJbaSAtIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5kaWFuID09PSAnbGUnKSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB3ID0gbnVtYmVyW2ldIHwgKG51bWJlcltpICsgMV0gPDwgOCkgfCAobnVtYmVyW2kgKyAyXSA8PCAxNik7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgdGhpcy53b3Jkc1tqICsgMV0gPSAodyA+Pj4gKDI2IC0gb2ZmKSkgJiAweDNmZmZmZmY7XG4gICAgICAgIG9mZiArPSAyNDtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VIZXg0Qml0cyAoc3RyaW5nLCBpbmRleCkge1xuICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgIC8vICcwJyAtICc5J1xuICAgIGlmIChjID49IDQ4ICYmIGMgPD0gNTcpIHtcbiAgICAgIHJldHVybiBjIC0gNDg7XG4gICAgLy8gJ0EnIC0gJ0YnXG4gICAgfSBlbHNlIGlmIChjID49IDY1ICYmIGMgPD0gNzApIHtcbiAgICAgIHJldHVybiBjIC0gNTU7XG4gICAgLy8gJ2EnIC0gJ2YnXG4gICAgfSBlbHNlIGlmIChjID49IDk3ICYmIGMgPD0gMTAyKSB7XG4gICAgICByZXR1cm4gYyAtIDg3O1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICdJbnZhbGlkIGNoYXJhY3RlciBpbiAnICsgc3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhleEJ5dGUgKHN0cmluZywgbG93ZXJCb3VuZCwgaW5kZXgpIHtcbiAgICB2YXIgciA9IHBhcnNlSGV4NEJpdHMoc3RyaW5nLCBpbmRleCk7XG4gICAgaWYgKGluZGV4IC0gMSA+PSBsb3dlckJvdW5kKSB7XG4gICAgICByIHw9IHBhcnNlSGV4NEJpdHMoc3RyaW5nLCBpbmRleCAtIDEpIDw8IDQ7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9wYXJzZUhleCA9IGZ1bmN0aW9uIF9wYXJzZUhleCAobnVtYmVyLCBzdGFydCwgZW5kaWFuKSB7XG4gICAgLy8gQ3JlYXRlIHBvc3NpYmx5IGJpZ2dlciBhcnJheSB0byBlbnN1cmUgdGhhdCBpdCBmaXRzIHRoZSBudW1iZXJcbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbCgobnVtYmVyLmxlbmd0aCAtIHN0YXJ0KSAvIDYpO1xuICAgIHRoaXMud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IDA7XG4gICAgfVxuXG4gICAgLy8gMjQtYml0cyBjaHVua3NcbiAgICB2YXIgb2ZmID0gMDtcbiAgICB2YXIgaiA9IDA7XG5cbiAgICB2YXIgdztcbiAgICBpZiAoZW5kaWFuID09PSAnYmUnKSB7XG4gICAgICBmb3IgKGkgPSBudW1iZXIubGVuZ3RoIC0gMTsgaSA+PSBzdGFydDsgaSAtPSAyKSB7XG4gICAgICAgIHcgPSBwYXJzZUhleEJ5dGUobnVtYmVyLCBzdGFydCwgaSkgPDwgb2ZmO1xuICAgICAgICB0aGlzLndvcmRzW2pdIHw9IHcgJiAweDNmZmZmZmY7XG4gICAgICAgIGlmIChvZmYgPj0gMTgpIHtcbiAgICAgICAgICBvZmYgLT0gMTg7XG4gICAgICAgICAgaiArPSAxO1xuICAgICAgICAgIHRoaXMud29yZHNbal0gfD0gdyA+Pj4gMjY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2ZmICs9IDg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnNlTGVuZ3RoID0gbnVtYmVyLmxlbmd0aCAtIHN0YXJ0O1xuICAgICAgZm9yIChpID0gcGFyc2VMZW5ndGggJSAyID09PSAwID8gc3RhcnQgKyAxIDogc3RhcnQ7IGkgPCBudW1iZXIubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdyA9IHBhcnNlSGV4Qnl0ZShudW1iZXIsIHN0YXJ0LCBpKSA8PCBvZmY7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gdyAmIDB4M2ZmZmZmZjtcbiAgICAgICAgaWYgKG9mZiA+PSAxOCkge1xuICAgICAgICAgIG9mZiAtPSAxODtcbiAgICAgICAgICBqICs9IDE7XG4gICAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSB3ID4+PiAyNjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmYgKz0gODtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VCYXNlIChzdHIsIHN0YXJ0LCBlbmQsIG11bCkge1xuICAgIHZhciByID0gMDtcbiAgICB2YXIgYiA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciAqPSBtdWw7XG5cbiAgICAgIC8vICdhJ1xuICAgICAgaWYgKGMgPj0gNDkpIHtcbiAgICAgICAgYiA9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcpIHtcbiAgICAgICAgYiA9IGMgLSAxNyArIDB4YTtcblxuICAgICAgLy8gJzAnIC0gJzknXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiID0gYztcbiAgICAgIH1cbiAgICAgIGFzc2VydChjID49IDAgJiYgYiA8IG11bCwgJ0ludmFsaWQgY2hhcmFjdGVyJyk7XG4gICAgICByICs9IGI7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9wYXJzZUJhc2UgPSBmdW5jdGlvbiBfcGFyc2VCYXNlIChudW1iZXIsIGJhc2UsIHN0YXJ0KSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBhcyB6ZXJvXG4gICAgdGhpcy53b3JkcyA9IFswXTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG5cbiAgICAvLyBGaW5kIGxlbmd0aCBvZiBsaW1iIGluIGJhc2VcbiAgICBmb3IgKHZhciBsaW1iTGVuID0gMCwgbGltYlBvdyA9IDE7IGxpbWJQb3cgPD0gMHgzZmZmZmZmOyBsaW1iUG93ICo9IGJhc2UpIHtcbiAgICAgIGxpbWJMZW4rKztcbiAgICB9XG4gICAgbGltYkxlbi0tO1xuICAgIGxpbWJQb3cgPSAobGltYlBvdyAvIGJhc2UpIHwgMDtcblxuICAgIHZhciB0b3RhbCA9IG51bWJlci5sZW5ndGggLSBzdGFydDtcbiAgICB2YXIgbW9kID0gdG90YWwgJSBsaW1iTGVuO1xuICAgIHZhciBlbmQgPSBNYXRoLm1pbih0b3RhbCwgdG90YWwgLSBtb2QpICsgc3RhcnQ7XG5cbiAgICB2YXIgd29yZCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGxpbWJMZW4pIHtcbiAgICAgIHdvcmQgPSBwYXJzZUJhc2UobnVtYmVyLCBpLCBpICsgbGltYkxlbiwgYmFzZSk7XG5cbiAgICAgIHRoaXMuaW11bG4obGltYlBvdyk7XG4gICAgICBpZiAodGhpcy53b3Jkc1swXSArIHdvcmQgPCAweDQwMDAwMDApIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSArPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faWFkZG4od29yZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZCAhPT0gMCkge1xuICAgICAgdmFyIHBvdyA9IDE7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgbnVtYmVyLmxlbmd0aCwgYmFzZSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtb2Q7IGkrKykge1xuICAgICAgICBwb3cgKj0gYmFzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbXVsbihwb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5IChkZXN0KSB7XG4gICAgZGVzdC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXN0LndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXTtcbiAgICB9XG4gICAgZGVzdC5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICBkZXN0Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICBkZXN0LnJlZCA9IHRoaXMucmVkO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1vdmUgKGRlc3QsIHNyYykge1xuICAgIGRlc3Qud29yZHMgPSBzcmMud29yZHM7XG4gICAgZGVzdC5sZW5ndGggPSBzcmMubGVuZ3RoO1xuICAgIGRlc3QubmVnYXRpdmUgPSBzcmMubmVnYXRpdmU7XG4gICAgZGVzdC5yZWQgPSBzcmMucmVkO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9tb3ZlID0gZnVuY3Rpb24gX21vdmUgKGRlc3QpIHtcbiAgICBtb3ZlKGRlc3QsIHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lICgpIHtcbiAgICB2YXIgciA9IG5ldyBCTihudWxsKTtcbiAgICB0aGlzLmNvcHkocik7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9leHBhbmQgPSBmdW5jdGlvbiBfZXhwYW5kIChzaXplKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIFJlbW92ZSBsZWFkaW5nIGAwYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuX3N0cmlwID0gZnVuY3Rpb24gc3RyaXAgKCkge1xuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA+IDEgJiYgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICB0aGlzLmxlbmd0aC0tO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX25vcm1TaWduID0gZnVuY3Rpb24gX25vcm1TaWduICgpIHtcbiAgICAvLyAtMCA9IDBcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEgJiYgdGhpcy53b3Jkc1swXSA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIENoZWNrIFN5bWJvbC5mb3IgYmVjYXVzZSBub3QgZXZlcnl3aGVyZSB3aGVyZSBTeW1ib2wgZGVmaW5lZFxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgQk4ucHJvdG90eXBlW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gaW5zcGVjdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBCTi5wcm90b3R5cGUuaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIEJOLnByb3RvdHlwZS5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICAgIHJldHVybiAodGhpcy5yZWQgPyAnPEJOLVI6ICcgOiAnPEJOOiAnKSArIHRoaXMudG9TdHJpbmcoMTYpICsgJz4nO1xuICB9XG5cbiAgLypcblxuICB2YXIgemVyb3MgPSBbXTtcbiAgdmFyIGdyb3VwU2l6ZXMgPSBbXTtcbiAgdmFyIGdyb3VwQmFzZXMgPSBbXTtcblxuICB2YXIgcyA9ICcnO1xuICB2YXIgaSA9IC0xO1xuICB3aGlsZSAoKytpIDwgQk4ud29yZFNpemUpIHtcbiAgICB6ZXJvc1tpXSA9IHM7XG4gICAgcyArPSAnMCc7XG4gIH1cbiAgZ3JvdXBTaXplc1swXSA9IDA7XG4gIGdyb3VwU2l6ZXNbMV0gPSAwO1xuICBncm91cEJhc2VzWzBdID0gMDtcbiAgZ3JvdXBCYXNlc1sxXSA9IDA7XG4gIHZhciBiYXNlID0gMiAtIDE7XG4gIHdoaWxlICgrK2Jhc2UgPCAzNiArIDEpIHtcbiAgICB2YXIgZ3JvdXBTaXplID0gMDtcbiAgICB2YXIgZ3JvdXBCYXNlID0gMTtcbiAgICB3aGlsZSAoZ3JvdXBCYXNlIDwgKDEgPDwgQk4ud29yZFNpemUpIC8gYmFzZSkge1xuICAgICAgZ3JvdXBCYXNlICo9IGJhc2U7XG4gICAgICBncm91cFNpemUgKz0gMTtcbiAgICB9XG4gICAgZ3JvdXBTaXplc1tiYXNlXSA9IGdyb3VwU2l6ZTtcbiAgICBncm91cEJhc2VzW2Jhc2VdID0gZ3JvdXBCYXNlO1xuICB9XG5cbiAgKi9cblxuICB2YXIgemVyb3MgPSBbXG4gICAgJycsXG4gICAgJzAnLFxuICAgICcwMCcsXG4gICAgJzAwMCcsXG4gICAgJzAwMDAnLFxuICAgICcwMDAwMCcsXG4gICAgJzAwMDAwMCcsXG4gICAgJzAwMDAwMDAnLFxuICAgICcwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnXG4gIF07XG5cbiAgdmFyIGdyb3VwU2l6ZXMgPSBbXG4gICAgMCwgMCxcbiAgICAyNSwgMTYsIDEyLCAxMSwgMTAsIDksIDgsXG4gICAgOCwgNywgNywgNywgNywgNiwgNixcbiAgICA2LCA2LCA2LCA2LCA2LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNVxuICBdO1xuXG4gIHZhciBncm91cEJhc2VzID0gW1xuICAgIDAsIDAsXG4gICAgMzM1NTQ0MzIsIDQzMDQ2NzIxLCAxNjc3NzIxNiwgNDg4MjgxMjUsIDYwNDY2MTc2LCA0MDM1MzYwNywgMTY3NzcyMTYsXG4gICAgNDMwNDY3MjEsIDEwMDAwMDAwLCAxOTQ4NzE3MSwgMzU4MzE4MDgsIDYyNzQ4NTE3LCA3NTI5NTM2LCAxMTM5MDYyNSxcbiAgICAxNjc3NzIxNiwgMjQxMzc1NjksIDM0MDEyMjI0LCA0NzA0NTg4MSwgNjQwMDAwMDAsIDQwODQxMDEsIDUxNTM2MzIsXG4gICAgNjQzNjM0MywgNzk2MjYyNCwgOTc2NTYyNSwgMTE4ODEzNzYsIDE0MzQ4OTA3LCAxNzIxMDM2OCwgMjA1MTExNDksXG4gICAgMjQzMDAwMDAsIDI4NjI5MTUxLCAzMzU1NDQzMiwgMzkxMzUzOTMsIDQ1NDM1NDI0LCA1MjUyMTg3NSwgNjA0NjYxNzZcbiAgXTtcblxuICBCTi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoYmFzZSwgcGFkZGluZykge1xuICAgIGJhc2UgPSBiYXNlIHx8IDEwO1xuICAgIHBhZGRpbmcgPSBwYWRkaW5nIHwgMCB8fCAxO1xuXG4gICAgdmFyIG91dDtcbiAgICBpZiAoYmFzZSA9PT0gMTYgfHwgYmFzZSA9PT0gJ2hleCcpIHtcbiAgICAgIG91dCA9ICcnO1xuICAgICAgdmFyIG9mZiA9IDA7XG4gICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgICAgdmFyIHdvcmQgPSAoKCh3IDw8IG9mZikgfCBjYXJyeSkgJiAweGZmZmZmZikudG9TdHJpbmcoMTYpO1xuICAgICAgICBjYXJyeSA9ICh3ID4+PiAoMjQgLSBvZmYpKSAmIDB4ZmZmZmZmO1xuICAgICAgICBvZmYgKz0gMjtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhcnJ5ICE9PSAwIHx8IGkgIT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG91dCA9IHplcm9zWzYgLSB3b3JkLmxlbmd0aF0gKyB3b3JkICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHdvcmQgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgICBvdXQgPSBjYXJyeS50b1N0cmluZygxNikgKyBvdXQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAob3V0Lmxlbmd0aCAlIHBhZGRpbmcgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJzAnICsgb3V0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJy0nICsgb3V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBpZiAoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNikge1xuICAgICAgLy8gdmFyIGdyb3VwU2l6ZSA9IE1hdGguZmxvb3IoQk4ud29yZFNpemUgKiBNYXRoLkxOMiAvIE1hdGgubG9nKGJhc2UpKTtcbiAgICAgIHZhciBncm91cFNpemUgPSBncm91cFNpemVzW2Jhc2VdO1xuICAgICAgLy8gdmFyIGdyb3VwQmFzZSA9IE1hdGgucG93KGJhc2UsIGdyb3VwU2l6ZSk7XG4gICAgICB2YXIgZ3JvdXBCYXNlID0gZ3JvdXBCYXNlc1tiYXNlXTtcbiAgICAgIG91dCA9ICcnO1xuICAgICAgdmFyIGMgPSB0aGlzLmNsb25lKCk7XG4gICAgICBjLm5lZ2F0aXZlID0gMDtcbiAgICAgIHdoaWxlICghYy5pc1plcm8oKSkge1xuICAgICAgICB2YXIgciA9IGMubW9kcm4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgYyA9IGMuaWRpdm4oZ3JvdXBCYXNlKTtcblxuICAgICAgICBpZiAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1tncm91cFNpemUgLSByLmxlbmd0aF0gKyByICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHIgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGFzc2VydChmYWxzZSwgJ0Jhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYnKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlciAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMud29yZHNbMF07XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXQgKz0gdGhpcy53b3Jkc1sxXSAqIDB4NDAwMDAwMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID09PSAzICYmIHRoaXMud29yZHNbMl0gPT09IDB4MDEpIHtcbiAgICAgIC8vIE5PVEU6IGF0IHRoaXMgc3RhZ2UgaXQgaXMga25vd24gdGhhdCB0aGUgdG9wIGJpdCBpcyBzZXRcbiAgICAgIHJldCArPSAweDEwMDAwMDAwMDAwMDAwICsgKHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiAyKSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICdOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMnKTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLm5lZ2F0aXZlICE9PSAwKSA/IC1yZXQgOiByZXQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsIDIpO1xuICB9O1xuXG4gIGlmIChCdWZmZXIpIHtcbiAgICBCTi5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiB0b0J1ZmZlciAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEJ1ZmZlciwgZW5kaWFuLCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICBCTi5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIHRvQXJyYXkgKGVuZGlhbiwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksIGVuZGlhbiwgbGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiBhbGxvY2F0ZSAoQXJyYXlUeXBlLCBzaXplKSB7XG4gICAgaWYgKEFycmF5VHlwZS5hbGxvY1Vuc2FmZSkge1xuICAgICAgcmV0dXJuIEFycmF5VHlwZS5hbGxvY1Vuc2FmZShzaXplKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBcnJheVR5cGUoc2l6ZSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXlMaWtlID0gZnVuY3Rpb24gdG9BcnJheUxpa2UgKEFycmF5VHlwZSwgZW5kaWFuLCBsZW5ndGgpIHtcbiAgICB0aGlzLl9zdHJpcCgpO1xuXG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0aGlzLmJ5dGVMZW5ndGgoKTtcbiAgICB2YXIgcmVxTGVuZ3RoID0gbGVuZ3RoIHx8IE1hdGgubWF4KDEsIGJ5dGVMZW5ndGgpO1xuICAgIGFzc2VydChieXRlTGVuZ3RoIDw9IHJlcUxlbmd0aCwgJ2J5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgnKTtcbiAgICBhc3NlcnQocmVxTGVuZ3RoID4gMCwgJ1JlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCcpO1xuXG4gICAgdmFyIHJlcyA9IGFsbG9jYXRlKEFycmF5VHlwZSwgcmVxTGVuZ3RoKTtcbiAgICB2YXIgcG9zdGZpeCA9IGVuZGlhbiA9PT0gJ2xlJyA/ICdMRScgOiAnQkUnO1xuICAgIHRoaXNbJ190b0FycmF5TGlrZScgKyBwb3N0Zml4XShyZXMsIGJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl90b0FycmF5TGlrZUxFID0gZnVuY3Rpb24gX3RvQXJyYXlMaWtlTEUgKHJlcywgYnl0ZUxlbmd0aCkge1xuICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgdmFyIGNhcnJ5ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBzaGlmdCA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgd29yZCA9ICh0aGlzLndvcmRzW2ldIDw8IHNoaWZ0KSB8IGNhcnJ5O1xuXG4gICAgICByZXNbcG9zaXRpb24rK10gPSB3b3JkICYgMHhmZjtcbiAgICAgIGlmIChwb3NpdGlvbiA8IHJlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzW3Bvc2l0aW9uKytdID0gKHdvcmQgPj4gOCkgJiAweGZmO1xuICAgICAgfVxuICAgICAgaWYgKHBvc2l0aW9uIDwgcmVzLmxlbmd0aCkge1xuICAgICAgICByZXNbcG9zaXRpb24rK10gPSAod29yZCA+PiAxNikgJiAweGZmO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hpZnQgPT09IDYpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgcmVzLmxlbmd0aCkge1xuICAgICAgICAgIHJlc1twb3NpdGlvbisrXSA9ICh3b3JkID4+IDI0KSAmIDB4ZmY7XG4gICAgICAgIH1cbiAgICAgICAgY2FycnkgPSAwO1xuICAgICAgICBzaGlmdCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJyeSA9IHdvcmQgPj4+IDI0O1xuICAgICAgICBzaGlmdCArPSAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA8IHJlcy5sZW5ndGgpIHtcbiAgICAgIHJlc1twb3NpdGlvbisrXSA9IGNhcnJ5O1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gPCByZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlc1twb3NpdGlvbisrXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRSA9IGZ1bmN0aW9uIF90b0FycmF5TGlrZUJFIChyZXMsIGJ5dGVMZW5ndGgpIHtcbiAgICB2YXIgcG9zaXRpb24gPSByZXMubGVuZ3RoIC0gMTtcbiAgICB2YXIgY2FycnkgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIHNoaWZ0ID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3b3JkID0gKHRoaXMud29yZHNbaV0gPDwgc2hpZnQpIHwgY2Fycnk7XG5cbiAgICAgIHJlc1twb3NpdGlvbi0tXSA9IHdvcmQgJiAweGZmO1xuICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgICAgcmVzW3Bvc2l0aW9uLS1dID0gKHdvcmQgPj4gOCkgJiAweGZmO1xuICAgICAgfVxuICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgICAgcmVzW3Bvc2l0aW9uLS1dID0gKHdvcmQgPj4gMTYpICYgMHhmZjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNoaWZ0ID09PSA2KSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgICAgcmVzW3Bvc2l0aW9uLS1dID0gKHdvcmQgPj4gMjQpICYgMHhmZjtcbiAgICAgICAgfVxuICAgICAgICBjYXJyeSA9IDA7XG4gICAgICAgIHNoaWZ0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcnJ5ID0gd29yZCA+Pj4gMjQ7XG4gICAgICAgIHNoaWZ0ICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgIHJlc1twb3NpdGlvbi0tXSA9IGNhcnJ5O1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gPj0gMCkge1xuICAgICAgICByZXNbcG9zaXRpb24tLV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBpZiAoTWF0aC5jbHozMikge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgcmV0dXJuIDMyIC0gTWF0aC5jbHozMih3KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgdmFyIHQgPSB3O1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgaWYgKHQgPj0gMHgxMDAwKSB7XG4gICAgICAgIHIgKz0gMTM7XG4gICAgICAgIHQgPj4+PSAxMztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4NDApIHtcbiAgICAgICAgciArPSA3O1xuICAgICAgICB0ID4+Pj0gNztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4OCkge1xuICAgICAgICByICs9IDQ7XG4gICAgICAgIHQgPj4+PSA0O1xuICAgICAgfVxuICAgICAgaWYgKHQgPj0gMHgwMikge1xuICAgICAgICByICs9IDI7XG4gICAgICAgIHQgPj4+PSAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHIgKyB0O1xuICAgIH07XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3plcm9CaXRzID0gZnVuY3Rpb24gX3plcm9CaXRzICh3KSB7XG4gICAgLy8gU2hvcnQtY3V0XG4gICAgaWYgKHcgPT09IDApIHJldHVybiAyNjtcblxuICAgIHZhciB0ID0gdztcbiAgICB2YXIgciA9IDA7XG4gICAgaWYgKCh0ICYgMHgxZmZmKSA9PT0gMCkge1xuICAgICAgciArPSAxMztcbiAgICAgIHQgPj4+PSAxMztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHg3ZikgPT09IDApIHtcbiAgICAgIHIgKz0gNztcbiAgICAgIHQgPj4+PSA3O1xuICAgIH1cbiAgICBpZiAoKHQgJiAweGYpID09PSAwKSB7XG4gICAgICByICs9IDQ7XG4gICAgICB0ID4+Pj0gNDtcbiAgICB9XG4gICAgaWYgKCh0ICYgMHgzKSA9PT0gMCkge1xuICAgICAgciArPSAyO1xuICAgICAgdCA+Pj49IDI7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MSkgPT09IDApIHtcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG51bWJlciBvZiB1c2VkIGJpdHMgaW4gYSBCTlxuICBCTi5wcm90b3R5cGUuYml0TGVuZ3RoID0gZnVuY3Rpb24gYml0TGVuZ3RoICgpIHtcbiAgICB2YXIgdyA9IHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXTtcbiAgICB2YXIgaGkgPSB0aGlzLl9jb3VudEJpdHModyk7XG4gICAgcmV0dXJuICh0aGlzLmxlbmd0aCAtIDEpICogMjYgKyBoaTtcbiAgfTtcblxuICBmdW5jdGlvbiB0b0JpdEFycmF5IChudW0pIHtcbiAgICB2YXIgdyA9IG5ldyBBcnJheShudW0uYml0TGVuZ3RoKCkpO1xuXG4gICAgZm9yICh2YXIgYml0ID0gMDsgYml0IDwgdy5sZW5ndGg7IGJpdCsrKSB7XG4gICAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgICB3W2JpdF0gPSAobnVtLndvcmRzW29mZl0gPj4+IHdiaXQpICYgMHgwMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdztcbiAgfVxuXG4gIC8vIE51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHNcbiAgQk4ucHJvdG90eXBlLnplcm9CaXRzID0gZnVuY3Rpb24gemVyb0JpdHMgKCkge1xuICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gMDtcblxuICAgIHZhciByID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBiID0gdGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tpXSk7XG4gICAgICByICs9IGI7XG4gICAgICBpZiAoYiAhPT0gMjYpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYnl0ZUxlbmd0aCA9IGZ1bmN0aW9uIGJ5dGVMZW5ndGggKCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKSAvIDgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b1R3b3MgPSBmdW5jdGlvbiB0b1R3b3MgKHdpZHRoKSB7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmFicygpLmlub3RuKHdpZHRoKS5pYWRkbigxKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZnJvbVR3b3MgPSBmdW5jdGlvbiBmcm9tVHdvcyAod2lkdGgpIHtcbiAgICBpZiAodGhpcy50ZXN0bih3aWR0aCAtIDEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RuKHdpZHRoKS5pYWRkbigxKS5pbmVnKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzTmVnID0gZnVuY3Rpb24gaXNOZWcgKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0aXZlICE9PSAwO1xuICB9O1xuXG4gIC8vIFJldHVybiBuZWdhdGl2ZSBjbG9uZSBvZiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmluZWcgPSBmdW5jdGlvbiBpbmVnICgpIHtcbiAgICBpZiAoIXRoaXMuaXNaZXJvKCkpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgXj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBPciBgbnVtYCB3aXRoIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXVvciA9IGZ1bmN0aW9uIGl1b3IgKG51bSkge1xuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA8IG51bS5sZW5ndGgpIHtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGgrK10gPSAwO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXSB8IG51bS53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW9yID0gZnVuY3Rpb24gaW9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdW9yKG51bSk7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW9yID0gZnVuY3Rpb24gdW9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXVvcih0aGlzKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1YW5kID0gZnVuY3Rpb24gaXVhbmQgKG51bSkge1xuICAgIC8vIGIgPSBtaW4tbGVuZ3RoKG51bSwgdGhpcylcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldICYgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYi5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFuZCA9IGZ1bmN0aW9uIGlhbmQgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1YW5kKG51bSk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYW5kKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51YW5kID0gZnVuY3Rpb24gdWFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdWFuZCh0aGlzKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1eG9yID0gZnVuY3Rpb24gaXV4b3IgKG51bSkge1xuICAgIC8vIGEubGVuZ3RoID4gYi5sZW5ndGhcbiAgICB2YXIgYTtcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBhID0gdGhpcztcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBudW07XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldIF4gYi53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcyAhPT0gYSkge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXhvciA9IGZ1bmN0aW9uIGl4b3IgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1eG9yKG51bSk7XG4gIH07XG5cbiAgLy8gWG9yIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaXhvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5peG9yKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51eG9yID0gZnVuY3Rpb24gdXhvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdXhvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdXhvcih0aGlzKTtcbiAgfTtcblxuICAvLyBOb3QgYGB0aGlzYGAgd2l0aCBgYHdpZHRoYGAgYml0d2lkdGhcbiAgQk4ucHJvdG90eXBlLmlub3RuID0gZnVuY3Rpb24gaW5vdG4gKHdpZHRoKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicgJiYgd2lkdGggPj0gMCk7XG5cbiAgICB2YXIgYnl0ZXNOZWVkZWQgPSBNYXRoLmNlaWwod2lkdGggLyAyNikgfCAwO1xuICAgIHZhciBiaXRzTGVmdCA9IHdpZHRoICUgMjY7XG5cbiAgICAvLyBFeHRlbmQgdGhlIGJ1ZmZlciB3aXRoIGxlYWRpbmcgemVyb2VzXG4gICAgdGhpcy5fZXhwYW5kKGJ5dGVzTmVlZGVkKTtcblxuICAgIGlmIChiaXRzTGVmdCA+IDApIHtcbiAgICAgIGJ5dGVzTmVlZGVkLS07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGNvbXBsZXRlIHdvcmRzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlc05lZWRlZDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gfnRoaXMud29yZHNbaV0gJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSByZXNpZHVlXG4gICAgaWYgKGJpdHNMZWZ0ID4gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IH50aGlzLndvcmRzW2ldICYgKDB4M2ZmZmZmZiA+PiAoMjYgLSBiaXRzTGVmdCkpO1xuICAgIH1cblxuICAgIC8vIEFuZCByZW1vdmUgbGVhZGluZyB6ZXJvZXNcbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubm90biA9IGZ1bmN0aW9uIG5vdG4gKHdpZHRoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih3aWR0aCk7XG4gIH07XG5cbiAgLy8gU2V0IGBiaXRgIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc2V0biA9IGZ1bmN0aW9uIHNldG4gKGJpdCwgdmFsKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcblxuICAgIHZhciBvZmYgPSAoYml0IC8gMjYpIHwgMDtcbiAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgdGhpcy5fZXhwYW5kKG9mZiArIDEpO1xuXG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy53b3Jkc1tvZmZdID0gdGhpcy53b3Jkc1tvZmZdIHwgKDEgPDwgd2JpdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSAmIH4oMSA8PCB3Yml0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICAvLyBBZGQgYG51bWAgdG8gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAobnVtKSB7XG4gICAgdmFyIHI7XG5cbiAgICAvLyBuZWdhdGl2ZSArIHBvc2l0aXZlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gcG9zaXRpdmUgKyBuZWdhdGl2ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByID0gdGhpcy5pc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHIuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhLCBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSByID4+PiAyNjtcbiAgICB9XG4gICAgZm9yICg7IGNhcnJ5ICE9PSAwICYmIGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAvLyBDb3B5IHRoZSByZXN0IG9mIHRoZSB3b3Jkc1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAobnVtKSB7XG4gICAgdmFyIHJlcztcbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwICYmIHRoaXMubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSB0aGlzLnN1YihudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlIF49IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAobnVtLm5lZ2F0aXZlID09PSAwICYmIHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgcmVzID0gbnVtLnN1Yih0aGlzKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGQobnVtKTtcblxuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYWRkKHRoaXMpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAobnVtKSB7XG4gICAgLy8gdGhpcyAtICgtbnVtKSA9IHRoaXMgKyBudW1cbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBudW0ubmVnYXRpdmUgPSAwO1xuICAgICAgdmFyIHIgPSB0aGlzLmlhZGQobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcblxuICAgIC8vIC10aGlzIC0gbnVtID0gLSh0aGlzICsgbnVtKVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlhZGQobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCBib3RoIG51bWJlcnMgYXJlIHBvc2l0aXZlXG4gICAgdmFyIGNtcCA9IHRoaXMuY21wKG51bSk7XG5cbiAgICAvLyBPcHRpbWl6YXRpb24gLSB6ZXJvaWZ5XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGEgPiBiXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGNtcCA+IDApIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSAtIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHIgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgaWYgKGNhcnJ5ID09PSAwICYmIGkgPCBhLmxlbmd0aCAmJiBhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSk7XG5cbiAgICBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgYG51bWAgZnJvbSBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1YiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKG51bSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gc21hbGxNdWxUbyAoc2VsZiwgbnVtLCBvdXQpIHtcbiAgICBvdXQubmVnYXRpdmUgPSBudW0ubmVnYXRpdmUgXiBzZWxmLm5lZ2F0aXZlO1xuICAgIHZhciBsZW4gPSAoc2VsZi5sZW5ndGggKyBudW0ubGVuZ3RoKSB8IDA7XG4gICAgb3V0Lmxlbmd0aCA9IGxlbjtcbiAgICBsZW4gPSAobGVuIC0gMSkgfCAwO1xuXG4gICAgLy8gUGVlbCBvbmUgaXRlcmF0aW9uIChjb21waWxlciBjYW4ndCBkbyBpdCwgYmVjYXVzZSBvZiBjb2RlIGNvbXBsZXhpdHkpXG4gICAgdmFyIGEgPSBzZWxmLndvcmRzWzBdIHwgMDtcbiAgICB2YXIgYiA9IG51bS53b3Jkc1swXSB8IDA7XG4gICAgdmFyIHIgPSBhICogYjtcblxuICAgIHZhciBsbyA9IHIgJiAweDNmZmZmZmY7XG4gICAgdmFyIGNhcnJ5ID0gKHIgLyAweDQwMDAwMDApIHwgMDtcbiAgICBvdXQud29yZHNbMF0gPSBsbztcblxuICAgIGZvciAodmFyIGsgPSAxOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgIC8vIFN1bSBhbGwgd29yZHMgd2l0aCB0aGUgc2FtZSBgaSArIGogPSBrYCBhbmQgYWNjdW11bGF0ZSBgbmNhcnJ5YCxcbiAgICAgIC8vIG5vdGUgdGhhdCBuY2FycnkgY291bGQgYmUgPj0gMHgzZmZmZmZmXG4gICAgICB2YXIgbmNhcnJ5ID0gY2FycnkgPj4+IDI2O1xuICAgICAgdmFyIHJ3b3JkID0gY2FycnkgJiAweDNmZmZmZmY7XG4gICAgICB2YXIgbWF4SiA9IE1hdGgubWluKGssIG51bS5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGogPSBNYXRoLm1heCgwLCBrIC0gc2VsZi5sZW5ndGggKyAxKTsgaiA8PSBtYXhKOyBqKyspIHtcbiAgICAgICAgdmFyIGkgPSAoayAtIGopIHwgMDtcbiAgICAgICAgYSA9IHNlbGYud29yZHNbaV0gfCAwO1xuICAgICAgICBiID0gbnVtLndvcmRzW2pdIHwgMDtcbiAgICAgICAgciA9IGEgKiBiICsgcndvcmQ7XG4gICAgICAgIG5jYXJyeSArPSAociAvIDB4NDAwMDAwMCkgfCAwO1xuICAgICAgICByd29yZCA9IHIgJiAweDNmZmZmZmY7XG4gICAgICB9XG4gICAgICBvdXQud29yZHNba10gPSByd29yZCB8IDA7XG4gICAgICBjYXJyeSA9IG5jYXJyeSB8IDA7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgb3V0LndvcmRzW2tdID0gY2FycnkgfCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQubGVuZ3RoLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC5fc3RyaXAoKTtcbiAgfVxuXG4gIC8vIFRPRE8oaW5kdXRueSk6IGl0IG1heSBiZSByZWFzb25hYmxlIHRvIG9taXQgaXQgZm9yIHVzZXJzIHdobyBkb24ndCBuZWVkXG4gIC8vIHRvIHdvcmsgd2l0aCAyNTYtYml0IG51bWJlcnMsIG90aGVyd2lzZSBpdCBnaXZlcyAyMCUgaW1wcm92ZW1lbnQgZm9yIDI1Ni1iaXRcbiAgLy8gbXVsdGlwbGljYXRpb24gKGxpa2UgZWxsaXB0aWMgc2VjcDI1NmsxKS5cbiAgdmFyIGNvbWIxME11bFRvID0gZnVuY3Rpb24gY29tYjEwTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgdmFyIGEgPSBzZWxmLndvcmRzO1xuICAgIHZhciBiID0gbnVtLndvcmRzO1xuICAgIHZhciBvID0gb3V0LndvcmRzO1xuICAgIHZhciBjID0gMDtcbiAgICB2YXIgbG87XG4gICAgdmFyIG1pZDtcbiAgICB2YXIgaGk7XG4gICAgdmFyIGEwID0gYVswXSB8IDA7XG4gICAgdmFyIGFsMCA9IGEwICYgMHgxZmZmO1xuICAgIHZhciBhaDAgPSBhMCA+Pj4gMTM7XG4gICAgdmFyIGExID0gYVsxXSB8IDA7XG4gICAgdmFyIGFsMSA9IGExICYgMHgxZmZmO1xuICAgIHZhciBhaDEgPSBhMSA+Pj4gMTM7XG4gICAgdmFyIGEyID0gYVsyXSB8IDA7XG4gICAgdmFyIGFsMiA9IGEyICYgMHgxZmZmO1xuICAgIHZhciBhaDIgPSBhMiA+Pj4gMTM7XG4gICAgdmFyIGEzID0gYVszXSB8IDA7XG4gICAgdmFyIGFsMyA9IGEzICYgMHgxZmZmO1xuICAgIHZhciBhaDMgPSBhMyA+Pj4gMTM7XG4gICAgdmFyIGE0ID0gYVs0XSB8IDA7XG4gICAgdmFyIGFsNCA9IGE0ICYgMHgxZmZmO1xuICAgIHZhciBhaDQgPSBhNCA+Pj4gMTM7XG4gICAgdmFyIGE1ID0gYVs1XSB8IDA7XG4gICAgdmFyIGFsNSA9IGE1ICYgMHgxZmZmO1xuICAgIHZhciBhaDUgPSBhNSA+Pj4gMTM7XG4gICAgdmFyIGE2ID0gYVs2XSB8IDA7XG4gICAgdmFyIGFsNiA9IGE2ICYgMHgxZmZmO1xuICAgIHZhciBhaDYgPSBhNiA+Pj4gMTM7XG4gICAgdmFyIGE3ID0gYVs3XSB8IDA7XG4gICAgdmFyIGFsNyA9IGE3ICYgMHgxZmZmO1xuICAgIHZhciBhaDcgPSBhNyA+Pj4gMTM7XG4gICAgdmFyIGE4ID0gYVs4XSB8IDA7XG4gICAgdmFyIGFsOCA9IGE4ICYgMHgxZmZmO1xuICAgIHZhciBhaDggPSBhOCA+Pj4gMTM7XG4gICAgdmFyIGE5ID0gYVs5XSB8IDA7XG4gICAgdmFyIGFsOSA9IGE5ICYgMHgxZmZmO1xuICAgIHZhciBhaDkgPSBhOSA+Pj4gMTM7XG4gICAgdmFyIGIwID0gYlswXSB8IDA7XG4gICAgdmFyIGJsMCA9IGIwICYgMHgxZmZmO1xuICAgIHZhciBiaDAgPSBiMCA+Pj4gMTM7XG4gICAgdmFyIGIxID0gYlsxXSB8IDA7XG4gICAgdmFyIGJsMSA9IGIxICYgMHgxZmZmO1xuICAgIHZhciBiaDEgPSBiMSA+Pj4gMTM7XG4gICAgdmFyIGIyID0gYlsyXSB8IDA7XG4gICAgdmFyIGJsMiA9IGIyICYgMHgxZmZmO1xuICAgIHZhciBiaDIgPSBiMiA+Pj4gMTM7XG4gICAgdmFyIGIzID0gYlszXSB8IDA7XG4gICAgdmFyIGJsMyA9IGIzICYgMHgxZmZmO1xuICAgIHZhciBiaDMgPSBiMyA+Pj4gMTM7XG4gICAgdmFyIGI0ID0gYls0XSB8IDA7XG4gICAgdmFyIGJsNCA9IGI0ICYgMHgxZmZmO1xuICAgIHZhciBiaDQgPSBiNCA+Pj4gMTM7XG4gICAgdmFyIGI1ID0gYls1XSB8IDA7XG4gICAgdmFyIGJsNSA9IGI1ICYgMHgxZmZmO1xuICAgIHZhciBiaDUgPSBiNSA+Pj4gMTM7XG4gICAgdmFyIGI2ID0gYls2XSB8IDA7XG4gICAgdmFyIGJsNiA9IGI2ICYgMHgxZmZmO1xuICAgIHZhciBiaDYgPSBiNiA+Pj4gMTM7XG4gICAgdmFyIGI3ID0gYls3XSB8IDA7XG4gICAgdmFyIGJsNyA9IGI3ICYgMHgxZmZmO1xuICAgIHZhciBiaDcgPSBiNyA+Pj4gMTM7XG4gICAgdmFyIGI4ID0gYls4XSB8IDA7XG4gICAgdmFyIGJsOCA9IGI4ICYgMHgxZmZmO1xuICAgIHZhciBiaDggPSBiOCA+Pj4gMTM7XG4gICAgdmFyIGI5ID0gYls5XSB8IDA7XG4gICAgdmFyIGJsOSA9IGI5ICYgMHgxZmZmO1xuICAgIHZhciBiaDkgPSBiOSA+Pj4gMTM7XG5cbiAgICBvdXQubmVnYXRpdmUgPSBzZWxmLm5lZ2F0aXZlIF4gbnVtLm5lZ2F0aXZlO1xuICAgIG91dC5sZW5ndGggPSAxOTtcbiAgICAvKiBrID0gMCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwwLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgwLCBiaDApO1xuICAgIHZhciB3MCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzAgPj4+IDI2KSkgfCAwO1xuICAgIHcwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwxLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgxLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMSkpIHwgMDtcbiAgICB2YXIgdzEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxID4+PiAyNikpIHwgMDtcbiAgICB3MSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDIsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgyKSkgfCAwO1xuICAgIHZhciB3MiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzIgPj4+IDI2KSkgfCAwO1xuICAgIHcyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwzLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgzLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgzKSkgfCAwO1xuICAgIHZhciB3MyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzMgPj4+IDI2KSkgfCAwO1xuICAgIHczICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw0LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg0LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNCkpIHwgMDtcbiAgICB2YXIgdzQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc0ID4+PiAyNikpIHwgMDtcbiAgICB3NCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDUsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg1KSkgfCAwO1xuICAgIHZhciB3NSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzUgPj4+IDI2KSkgfCAwO1xuICAgIHc1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNiwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw2LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg2LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg2KSkgfCAwO1xuICAgIHZhciB3NiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzYgPj4+IDI2KSkgfCAwO1xuICAgIHc2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw3LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg3LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNykpIHwgMDtcbiAgICB2YXIgdzcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc3ID4+PiAyNikpIHwgMDtcbiAgICB3NyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDgsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg4KSkgfCAwO1xuICAgIHZhciB3OCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzggPj4+IDI2KSkgfCAwO1xuICAgIHc4ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gOSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg5KSkgfCAwO1xuICAgIHZhciB3OSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzkgPj4+IDI2KSkgfCAwO1xuICAgIHc5ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgxKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwxKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgxKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMCA+Pj4gMjYpKSB8IDA7XG4gICAgdzEwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgyKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwyKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgyKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxMSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzExID4+PiAyNikpIHwgMDtcbiAgICB3MTEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxMiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwzKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDMpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDMpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDMpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMiA+Pj4gMjYpKSB8IDA7XG4gICAgdzEyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg0KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw0KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg0KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMyA+Pj4gMjYpKSB8IDA7XG4gICAgdzEzICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg1KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw1KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg1KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE0ID4+PiAyNikpIHwgMDtcbiAgICB3MTQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxNSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw2KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDYpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDYpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDYpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNSA+Pj4gMjYpKSB8IDA7XG4gICAgdzE1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg3KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw3KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg3KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNiA+Pj4gMjYpKSB8IDA7XG4gICAgdzE2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg4KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw4KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg4KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE3ID4+PiAyNikpIHwgMDtcbiAgICB3MTcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxOCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw5KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDkpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDkpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDkpO1xuICAgIHZhciB3MTggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxOCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE4ICY9IDB4M2ZmZmZmZjtcbiAgICBvWzBdID0gdzA7XG4gICAgb1sxXSA9IHcxO1xuICAgIG9bMl0gPSB3MjtcbiAgICBvWzNdID0gdzM7XG4gICAgb1s0XSA9IHc0O1xuICAgIG9bNV0gPSB3NTtcbiAgICBvWzZdID0gdzY7XG4gICAgb1s3XSA9IHc3O1xuICAgIG9bOF0gPSB3ODtcbiAgICBvWzldID0gdzk7XG4gICAgb1sxMF0gPSB3MTA7XG4gICAgb1sxMV0gPSB3MTE7XG4gICAgb1sxMl0gPSB3MTI7XG4gICAgb1sxM10gPSB3MTM7XG4gICAgb1sxNF0gPSB3MTQ7XG4gICAgb1sxNV0gPSB3MTU7XG4gICAgb1sxNl0gPSB3MTY7XG4gICAgb1sxN10gPSB3MTc7XG4gICAgb1sxOF0gPSB3MTg7XG4gICAgaWYgKGMgIT09IDApIHtcbiAgICAgIG9bMTldID0gYztcbiAgICAgIG91dC5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICAvLyBQb2x5ZmlsbCBjb21iXG4gIGlmICghTWF0aC5pbXVsKSB7XG4gICAgY29tYjEwTXVsVG8gPSBzbWFsbE11bFRvO1xuICB9XG5cbiAgZnVuY3Rpb24gYmlnTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gc2VsZi5sZW5ndGggKyBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICB2YXIgaG5jYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBvdXQubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgICBobmNhcnJ5ID0gMDtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gayAtIGo7XG4gICAgICAgIHZhciBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIHZhciBiID0gbnVtLndvcmRzW2pdIHwgMDtcbiAgICAgICAgdmFyIHIgPSBhICogYjtcblxuICAgICAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgICAgICBuY2FycnkgPSAobmNhcnJ5ICsgKChyIC8gMHg0MDAwMDAwKSB8IDApKSB8IDA7XG4gICAgICAgIGxvID0gKGxvICsgcndvcmQpIHwgMDtcbiAgICAgICAgcndvcmQgPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArIChsbyA+Pj4gMjYpKSB8IDA7XG5cbiAgICAgICAgaG5jYXJyeSArPSBuY2FycnkgPj4+IDI2O1xuICAgICAgICBuY2FycnkgJj0gMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQ7XG4gICAgICBjYXJyeSA9IG5jYXJyeTtcbiAgICAgIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgb3V0LndvcmRzW2tdID0gY2Fycnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0Ll9zdHJpcCgpO1xuICB9XG5cbiAgZnVuY3Rpb24ganVtYm9NdWxUbyAoc2VsZiwgbnVtLCBvdXQpIHtcbiAgICAvLyBUZW1wb3JhcnkgZGlzYWJsZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2JuLmpzL2lzc3Vlcy8yMTFcbiAgICAvLyB2YXIgZmZ0bSA9IG5ldyBGRlRNKCk7XG4gICAgLy8gcmV0dXJuIGZmdG0ubXVscChzZWxmLCBudW0sIG91dCk7XG4gICAgcmV0dXJuIGJpZ011bFRvKHNlbGYsIG51bSwgb3V0KTtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5tdWxUbyA9IGZ1bmN0aW9uIG11bFRvIChudW0sIG91dCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aDtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEwICYmIG51bS5sZW5ndGggPT09IDEwKSB7XG4gICAgICByZXMgPSBjb21iMTBNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCA2Mykge1xuICAgICAgcmVzID0gc21hbGxNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCAxMDI0KSB7XG4gICAgICByZXMgPSBiaWdNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IGp1bWJvTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29vbGV5LVR1a2V5IGFsZ29yaXRobSBmb3IgRkZUXG4gIC8vIHNsaWdodGx5IHJldmlzaXRlZCB0byByZWx5IG9uIGxvb3BpbmcgaW5zdGVhZCBvZiByZWN1cnNpb25cblxuICBmdW5jdGlvbiBGRlRNICh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgRkZUTS5wcm90b3R5cGUubWFrZVJCVCA9IGZ1bmN0aW9uIG1ha2VSQlQgKE4pIHtcbiAgICB2YXIgdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbCA9IEJOLnByb3RvdHlwZS5fY291bnRCaXRzKE4pIC0gMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdFtpXSA9IHRoaXMucmV2QmluKGksIGwsIE4pO1xuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYmluYXJ5LXJldmVyc2VkIHJlcHJlc2VudGF0aW9uIG9mIGB4YFxuICBGRlRNLnByb3RvdHlwZS5yZXZCaW4gPSBmdW5jdGlvbiByZXZCaW4gKHgsIGwsIE4pIHtcbiAgICBpZiAoeCA9PT0gMCB8fCB4ID09PSBOIC0gMSkgcmV0dXJuIHg7XG5cbiAgICB2YXIgcmIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICByYiB8PSAoeCAmIDEpIDw8IChsIC0gaSAtIDEpO1xuICAgICAgeCA+Pj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmI7XG4gIH07XG5cbiAgLy8gUGVyZm9ybXMgXCJ0d2VlZGxpbmdcIiBwaGFzZSwgdGhlcmVmb3JlICdlbXVsYXRpbmcnXG4gIC8vIGJlaGF2aW91ciBvZiB0aGUgcmVjdXJzaXZlIGFsZ29yaXRobVxuICBGRlRNLnByb3RvdHlwZS5wZXJtdXRlID0gZnVuY3Rpb24gcGVybXV0ZSAocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBydHdzW2ldID0gcndzW3JidFtpXV07XG4gICAgICBpdHdzW2ldID0gaXdzW3JidFtpXV07XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIHRyYW5zZm9ybSAocndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4sIHJidCkge1xuICAgIHRoaXMucGVybXV0ZShyYnQsIHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOKTtcblxuICAgIGZvciAodmFyIHMgPSAxOyBzIDwgTjsgcyA8PD0gMSkge1xuICAgICAgdmFyIGwgPSBzIDw8IDE7XG5cbiAgICAgIHZhciBydHdkZiA9IE1hdGguY29zKDIgKiBNYXRoLlBJIC8gbCk7XG4gICAgICB2YXIgaXR3ZGYgPSBNYXRoLnNpbigyICogTWF0aC5QSSAvIGwpO1xuXG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IE47IHAgKz0gbCkge1xuICAgICAgICB2YXIgcnR3ZGZfID0gcnR3ZGY7XG4gICAgICAgIHZhciBpdHdkZl8gPSBpdHdkZjtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHM7IGorKykge1xuICAgICAgICAgIHZhciByZSA9IHJ0d3NbcCArIGpdO1xuICAgICAgICAgIHZhciBpZSA9IGl0d3NbcCArIGpdO1xuXG4gICAgICAgICAgdmFyIHJvID0gcnR3c1twICsgaiArIHNdO1xuICAgICAgICAgIHZhciBpbyA9IGl0d3NbcCArIGogKyBzXTtcblxuICAgICAgICAgIHZhciByeCA9IHJ0d2RmXyAqIHJvIC0gaXR3ZGZfICogaW87XG5cbiAgICAgICAgICBpbyA9IHJ0d2RmXyAqIGlvICsgaXR3ZGZfICogcm87XG4gICAgICAgICAgcm8gPSByeDtcblxuICAgICAgICAgIHJ0d3NbcCArIGpdID0gcmUgKyBybztcbiAgICAgICAgICBpdHdzW3AgKyBqXSA9IGllICsgaW87XG5cbiAgICAgICAgICBydHdzW3AgKyBqICsgc10gPSByZSAtIHJvO1xuICAgICAgICAgIGl0d3NbcCArIGogKyBzXSA9IGllIC0gaW87XG5cbiAgICAgICAgICAvKiBqc2hpbnQgbWF4ZGVwdGggOiBmYWxzZSAqL1xuICAgICAgICAgIGlmIChqICE9PSBsKSB7XG4gICAgICAgICAgICByeCA9IHJ0d2RmICogcnR3ZGZfIC0gaXR3ZGYgKiBpdHdkZl87XG5cbiAgICAgICAgICAgIGl0d2RmXyA9IHJ0d2RmICogaXR3ZGZfICsgaXR3ZGYgKiBydHdkZl87XG4gICAgICAgICAgICBydHdkZl8gPSByeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2IgPSBmdW5jdGlvbiBndWVzc0xlbjEzYiAobiwgbSkge1xuICAgIHZhciBOID0gTWF0aC5tYXgobSwgbikgfCAxO1xuICAgIHZhciBvZGQgPSBOICYgMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yIChOID0gTiAvIDIgfCAwOyBOOyBOID0gTiA+Pj4gMSkge1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAxIDw8IGkgKyAxICsgb2RkO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIGNvbmp1Z2F0ZSAocndzLCBpd3MsIE4pIHtcbiAgICBpZiAoTiA8PSAxKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE4gLyAyOyBpKyspIHtcbiAgICAgIHZhciB0ID0gcndzW2ldO1xuXG4gICAgICByd3NbaV0gPSByd3NbTiAtIGkgLSAxXTtcbiAgICAgIHJ3c1tOIC0gaSAtIDFdID0gdDtcblxuICAgICAgdCA9IGl3c1tpXTtcblxuICAgICAgaXdzW2ldID0gLWl3c1tOIC0gaSAtIDFdO1xuICAgICAgaXdzW04gLSBpIC0gMV0gPSAtdDtcbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUubm9ybWFsaXplMTNiID0gZnVuY3Rpb24gbm9ybWFsaXplMTNiICh3cywgTikge1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdyA9IE1hdGgucm91bmQod3NbMiAqIGkgKyAxXSAvIE4pICogMHgyMDAwICtcbiAgICAgICAgTWF0aC5yb3VuZCh3c1syICogaV0gLyBOKSArXG4gICAgICAgIGNhcnJ5O1xuXG4gICAgICB3c1tpXSA9IHcgJiAweDNmZmZmZmY7XG5cbiAgICAgIGlmICh3IDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIGNhcnJ5ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcnJ5ID0gdyAvIDB4NDAwMDAwMCB8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdzO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbnZlcnQxM2IgPSBmdW5jdGlvbiBjb252ZXJ0MTNiICh3cywgbGVuLCByd3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNhcnJ5ID0gY2FycnkgKyAod3NbaV0gfCAwKTtcblxuICAgICAgcndzWzIgKiBpXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICAgIHJ3c1syICogaSArIDFdID0gY2FycnkgJiAweDFmZmY7IGNhcnJ5ID0gY2FycnkgPj4+IDEzO1xuICAgIH1cblxuICAgIC8vIFBhZCB3aXRoIHplcm9lc1xuICAgIGZvciAoaSA9IDIgKiBsZW47IGkgPCBOOyArK2kpIHtcbiAgICAgIHJ3c1tpXSA9IDA7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAwKTtcbiAgICBhc3NlcnQoKGNhcnJ5ICYgfjB4MWZmZikgPT09IDApO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnN0dWIgPSBmdW5jdGlvbiBzdHViIChOKSB7XG4gICAgdmFyIHBoID0gbmV3IEFycmF5KE4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBwaFtpXSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBoO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm11bHAgPSBmdW5jdGlvbiBtdWxwICh4LCB5LCBvdXQpIHtcbiAgICB2YXIgTiA9IDIgKiB0aGlzLmd1ZXNzTGVuMTNiKHgubGVuZ3RoLCB5Lmxlbmd0aCk7XG5cbiAgICB2YXIgcmJ0ID0gdGhpcy5tYWtlUkJUKE4pO1xuXG4gICAgdmFyIF8gPSB0aGlzLnN0dWIoTik7XG5cbiAgICB2YXIgcndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciByd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBpd3N0ID0gbmV3IEFycmF5KE4pO1xuXG4gICAgdmFyIG5yd3MgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIG5yd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBuaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBybXdzID0gb3V0LndvcmRzO1xuICAgIHJtd3MubGVuZ3RoID0gTjtcblxuICAgIHRoaXMuY29udmVydDEzYih4LndvcmRzLCB4Lmxlbmd0aCwgcndzLCBOKTtcbiAgICB0aGlzLmNvbnZlcnQxM2IoeS53b3JkcywgeS5sZW5ndGgsIG5yd3MsIE4pO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0ocndzLCBfLCByd3N0LCBpd3N0LCBOLCByYnQpO1xuICAgIHRoaXMudHJhbnNmb3JtKG5yd3MsIF8sIG5yd3N0LCBuaXdzdCwgTiwgcmJ0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICB2YXIgcnggPSByd3N0W2ldICogbnJ3c3RbaV0gLSBpd3N0W2ldICogbml3c3RbaV07XG4gICAgICBpd3N0W2ldID0gcndzdFtpXSAqIG5pd3N0W2ldICsgaXdzdFtpXSAqIG5yd3N0W2ldO1xuICAgICAgcndzdFtpXSA9IHJ4O1xuICAgIH1cblxuICAgIHRoaXMuY29uanVnYXRlKHJ3c3QsIGl3c3QsIE4pO1xuICAgIHRoaXMudHJhbnNmb3JtKHJ3c3QsIGl3c3QsIHJtd3MsIF8sIE4sIHJidCk7XG4gICAgdGhpcy5jb25qdWdhdGUocm13cywgXywgTik7XG4gICAgdGhpcy5ub3JtYWxpemUxM2Iocm13cywgTik7XG5cbiAgICBvdXQubmVnYXRpdmUgPSB4Lm5lZ2F0aXZlIF4geS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0geC5sZW5ndGggKyB5Lmxlbmd0aDtcbiAgICByZXR1cm4gb3V0Ll9zdHJpcCgpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGB0aGlzYCBieSBgbnVtYFxuICBCTi5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiB0aGlzLm11bFRvKG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBNdWx0aXBseSBlbXBsb3lpbmcgRkZUXG4gIEJOLnByb3RvdHlwZS5tdWxmID0gZnVuY3Rpb24gbXVsZiAobnVtKSB7XG4gICAgdmFyIG91dCA9IG5ldyBCTihudWxsKTtcbiAgICBvdXQud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGggKyBudW0ubGVuZ3RoKTtcbiAgICByZXR1cm4ganVtYm9NdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgTXVsdGlwbGljYXRpb25cbiAgQk4ucHJvdG90eXBlLmltdWwgPSBmdW5jdGlvbiBpbXVsIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKG51bSwgdGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmltdWxuID0gZnVuY3Rpb24gaW11bG4gKG51bSkge1xuICAgIHZhciBpc05lZ051bSA9IG51bSA8IDA7XG4gICAgaWYgKGlzTmVnTnVtKSBudW0gPSAtbnVtO1xuXG4gICAgYXNzZXJ0KHR5cGVvZiBudW0gPT09ICdudW1iZXInKTtcbiAgICBhc3NlcnQobnVtIDwgMHg0MDAwMDAwKTtcblxuICAgIC8vIENhcnJ5XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gKHRoaXMud29yZHNbaV0gfCAwKSAqIG51bTtcbiAgICAgIHZhciBsbyA9ICh3ICYgMHgzZmZmZmZmKSArIChjYXJyeSAmIDB4M2ZmZmZmZik7XG4gICAgICBjYXJyeSA+Pj0gMjY7XG4gICAgICBjYXJyeSArPSAodyAvIDB4NDAwMDAwMCkgfCAwO1xuICAgICAgLy8gTk9URTogbG8gaXMgMjdiaXQgbWF4aW11bVxuICAgICAgY2FycnkgKz0gbG8gPj4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaXNOZWdOdW0gPyB0aGlzLmluZWcoKSA6IHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm11bG4gPSBmdW5jdGlvbiBtdWxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSk7XG4gIH07XG5cbiAgLy8gYHRoaXNgICogYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zcXIgPSBmdW5jdGlvbiBzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLm11bCh0aGlzKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyICgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSk7XG4gIH07XG5cbiAgLy8gTWF0aC5wb3coYHRoaXNgLCBgbnVtYClcbiAgQk4ucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyAobnVtKSB7XG4gICAgdmFyIHcgPSB0b0JpdEFycmF5KG51bSk7XG4gICAgaWYgKHcubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IEJOKDEpO1xuXG4gICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lc1xuICAgIHZhciByZXMgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdy5sZW5ndGg7IGkrKywgcmVzID0gcmVzLnNxcigpKSB7XG4gICAgICBpZiAod1tpXSAhPT0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCsraSA8IHcubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBxID0gcmVzLnNxcigpOyBpIDwgdy5sZW5ndGg7IGkrKywgcSA9IHEuc3FyKCkpIHtcbiAgICAgICAgaWYgKHdbaV0gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHJlcy5tdWwocSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBTaGlmdC1sZWZ0IGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdXNobG4gPSBmdW5jdGlvbiBpdXNobG4gKGJpdHMpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdHMgPT09ICdudW1iZXInICYmIGJpdHMgPj0gMCk7XG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSAoYml0cyAtIHIpIC8gMjY7XG4gICAgdmFyIGNhcnJ5TWFzayA9ICgweDNmZmZmZmYgPj4+ICgyNiAtIHIpKSA8PCAoMjYgLSByKTtcbiAgICB2YXIgaTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgY2FycnkgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmV3Q2FycnkgPSB0aGlzLndvcmRzW2ldICYgY2FycnlNYXNrO1xuICAgICAgICB2YXIgYyA9ICgodGhpcy53b3Jkc1tpXSB8IDApIC0gbmV3Q2FycnkpIDw8IHI7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBjIHwgY2Fycnk7XG4gICAgICAgIGNhcnJ5ID0gbmV3Q2FycnkgPj4+ICgyNiAtIHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FycnkpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzICE9PSAwKSB7XG4gICAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIHNdID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sZW5ndGggKz0gcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNobG4gPSBmdW5jdGlvbiBpc2hsbiAoYml0cykge1xuICAgIC8vIFRPRE8oaW5kdXRueSk6IGltcGxlbWVudCBtZVxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXNobG4oYml0cyk7XG4gIH07XG5cbiAgLy8gU2hpZnQtcmlnaHQgaW4tcGxhY2VcbiAgLy8gTk9URTogYGhpbnRgIGlzIGEgbG93ZXN0IGJpdCBiZWZvcmUgdHJhaWxpbmcgemVyb2VzXG4gIC8vIE5PVEU6IGlmIGBleHRlbmRlZGAgaXMgcHJlc2VudCAtIGl0IHdpbGwgYmUgZmlsbGVkIHdpdGggZGVzdHJveWVkIGJpdHNcbiAgQk4ucHJvdG90eXBlLml1c2hybiA9IGZ1bmN0aW9uIGl1c2hybiAoYml0cywgaGludCwgZXh0ZW5kZWQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdHMgPT09ICdudW1iZXInICYmIGJpdHMgPj0gMCk7XG4gICAgdmFyIGg7XG4gICAgaWYgKGhpbnQpIHtcbiAgICAgIGggPSAoaGludCAtIChoaW50ICUgMjYpKSAvIDI2O1xuICAgIH0gZWxzZSB7XG4gICAgICBoID0gMDtcbiAgICB9XG5cbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IE1hdGgubWluKChiaXRzIC0gcikgLyAyNiwgdGhpcy5sZW5ndGgpO1xuICAgIHZhciBtYXNrID0gMHgzZmZmZmZmIF4gKCgweDNmZmZmZmYgPj4+IHIpIDw8IHIpO1xuICAgIHZhciBtYXNrZWRXb3JkcyA9IGV4dGVuZGVkO1xuXG4gICAgaCAtPSBzO1xuICAgIGggPSBNYXRoLm1heCgwLCBoKTtcblxuICAgIC8vIEV4dGVuZGVkIG1vZGUsIGNvcHkgbWFza2VkIHBhcnRcbiAgICBpZiAobWFza2VkV29yZHMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICAgIG1hc2tlZFdvcmRzLndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgIH1cbiAgICAgIG1hc2tlZFdvcmRzLmxlbmd0aCA9IHM7XG4gICAgfVxuXG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIC8vIE5vLW9wLCB3ZSBzaG91bGQgbm90IG1vdmUgYW55dGhpbmcgYXQgYWxsXG4gICAgfSBlbHNlIGlmICh0aGlzLmxlbmd0aCA+IHMpIHtcbiAgICAgIHRoaXMubGVuZ3RoIC09IHM7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gdGhpcy53b3Jkc1tpICsgc107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDAgJiYgKGNhcnJ5ICE9PSAwIHx8IGkgPj0gaCk7IGktLSkge1xuICAgICAgdmFyIHdvcmQgPSB0aGlzLndvcmRzW2ldIHwgMDtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAoY2FycnkgPDwgKDI2IC0gcikpIHwgKHdvcmQgPj4+IHIpO1xuICAgICAgY2FycnkgPSB3b3JkICYgbWFzaztcbiAgICB9XG5cbiAgICAvLyBQdXNoIGNhcnJpZWQgYml0cyBhcyBhIG1hc2tcbiAgICBpZiAobWFza2VkV29yZHMgJiYgY2FycnkgIT09IDApIHtcbiAgICAgIG1hc2tlZFdvcmRzLndvcmRzW21hc2tlZFdvcmRzLmxlbmd0aCsrXSA9IGNhcnJ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaHJuID0gZnVuY3Rpb24gaXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hybihiaXRzLCBoaW50LCBleHRlbmRlZCk7XG4gIH07XG5cbiAgLy8gU2hpZnQtbGVmdFxuICBCTi5wcm90b3R5cGUuc2hsbiA9IGZ1bmN0aW9uIHNobG4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGJpdHMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51c2hsbiA9IGZ1bmN0aW9uIHVzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYml0cyk7XG4gIH07XG5cbiAgLy8gU2hpZnQtcmlnaHRcbiAgQk4ucHJvdG90eXBlLnNocm4gPSBmdW5jdGlvbiBzaHJuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNocm4gPSBmdW5jdGlvbiB1c2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFRlc3QgaWYgbiBiaXQgaXMgc2V0XG4gIEJOLnByb3RvdHlwZS50ZXN0biA9IGZ1bmN0aW9uIHRlc3RuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicgJiYgYml0ID49IDApO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGJpdCBhbmQgcmV0dXJuXG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3NdO1xuXG4gICAgcmV0dXJuICEhKHcgJiBxKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gb25seSBsb3dlcnMgYml0cyBvZiBudW1iZXIgKGluLXBsYWNlKVxuICBCTi5wcm90b3R5cGUuaW1hc2tuID0gZnVuY3Rpb24gaW1hc2tuIChiaXRzKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gKGJpdHMgLSByKSAvIDI2O1xuXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMnKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgcysrO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWluKHMsIHRoaXMubGVuZ3RoKTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSAmPSBtYXNrO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFJldHVybiBvbmx5IGxvd2VycyBiaXRzIG9mIG51bWJlclxuICBCTi5wcm90b3R5cGUubWFza24gPSBmdW5jdGlvbiBtYXNrbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGJpdHMpO1xuICB9O1xuXG4gIC8vIEFkZCBwbGFpbiBudW1iZXIgYG51bWAgdG8gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pYWRkbiA9IGZ1bmN0aW9uIGlhZGRuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pc3VibigtbnVtKTtcblxuICAgIC8vIFBvc3NpYmxlIHNpZ24gY2hhbmdlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiAodGhpcy53b3Jkc1swXSB8IDApIDw9IG51bSkge1xuICAgICAgICB0aGlzLndvcmRzWzBdID0gbnVtIC0gKHRoaXMud29yZHNbMF0gfCAwKTtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaXN1Ym4obnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhvdXQgY2hlY2tzXG4gICAgcmV0dXJuIHRoaXMuX2lhZGRuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pYWRkbiA9IGZ1bmN0aW9uIF9pYWRkbiAobnVtKSB7XG4gICAgdGhpcy53b3Jkc1swXSArPSBudW07XG5cbiAgICAvLyBDYXJyeVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGggJiYgdGhpcy53b3Jkc1tpXSA+PSAweDQwMDAwMDA7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSAtPSAweDQwMDAwMDA7XG4gICAgICBpZiAoaSA9PT0gdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5tYXgodGhpcy5sZW5ndGgsIGkgKyAxKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IHBsYWluIG51bWJlciBgbnVtYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuaXN1Ym4gPSBmdW5jdGlvbiBpc3VibiAobnVtKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBudW0gPT09ICdudW1iZXInKTtcbiAgICBhc3NlcnQobnVtIDwgMHg0MDAwMDAwKTtcbiAgICBpZiAobnVtIDwgMCkgcmV0dXJuIHRoaXMuaWFkZG4oLW51bSk7XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlhZGRuKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMud29yZHNbMF0gLT0gbnVtO1xuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPCAwKSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gLXRoaXMud29yZHNbMF07XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2FycnlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGggJiYgdGhpcy53b3Jkc1tpXSA8IDA7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldICs9IDB4NDAwMDAwMDtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0gLT0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYWRkbiA9IGZ1bmN0aW9uIGFkZG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuc3VibiA9IGZ1bmN0aW9uIHN1Ym4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFicyA9IGZ1bmN0aW9uIGlhYnMgKCkge1xuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bCA9IGZ1bmN0aW9uIF9pc2hsbnN1Ym11bCAobnVtLCBtdWwsIHNoaWZ0KSB7XG4gICAgdmFyIGxlbiA9IG51bS5sZW5ndGggKyBzaGlmdDtcbiAgICB2YXIgaTtcblxuICAgIHRoaXMuX2V4cGFuZChsZW4pO1xuXG4gICAgdmFyIHc7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICB2YXIgcmlnaHQgPSAobnVtLndvcmRzW2ldIHwgMCkgKiBtdWw7XG4gICAgICB3IC09IHJpZ2h0ICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSAodyA+PiAyNikgLSAoKHJpZ2h0IC8gMHg0MDAwMDAwKSB8IDApO1xuICAgICAgdGhpcy53b3Jkc1tpICsgc2hpZnRdID0gdyAmIDB4M2ZmZmZmZjtcbiAgICB9XG4gICAgZm9yICg7IGkgPCB0aGlzLmxlbmd0aCAtIHNoaWZ0OyBpKyspIHtcbiAgICAgIHcgPSAodGhpcy53b3Jkc1tpICsgc2hpZnRdIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgaWYgKGNhcnJ5ID09PSAwKSByZXR1cm4gdGhpcy5fc3RyaXAoKTtcblxuICAgIC8vIFN1YnRyYWN0aW9uIG92ZXJmbG93XG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAtMSk7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gLSh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICB0aGlzLm5lZ2F0aXZlID0gMTtcblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fd29yZERpdiA9IGZ1bmN0aW9uIF93b3JkRGl2IChudW0sIG1vZGUpIHtcbiAgICB2YXIgc2hpZnQgPSB0aGlzLmxlbmd0aCAtIG51bS5sZW5ndGg7XG5cbiAgICB2YXIgYSA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgYiA9IG51bTtcblxuICAgIC8vIE5vcm1hbGl6ZVxuICAgIHZhciBiaGkgPSBiLndvcmRzW2IubGVuZ3RoIC0gMV0gfCAwO1xuICAgIHZhciBiaGlCaXRzID0gdGhpcy5fY291bnRCaXRzKGJoaSk7XG4gICAgc2hpZnQgPSAyNiAtIGJoaUJpdHM7XG4gICAgaWYgKHNoaWZ0ICE9PSAwKSB7XG4gICAgICBiID0gYi51c2hsbihzaGlmdCk7XG4gICAgICBhLml1c2hsbihzaGlmdCk7XG4gICAgICBiaGkgPSBiLndvcmRzW2IubGVuZ3RoIC0gMV0gfCAwO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcXVvdGllbnRcbiAgICB2YXIgbSA9IGEubGVuZ3RoIC0gYi5sZW5ndGg7XG4gICAgdmFyIHE7XG5cbiAgICBpZiAobW9kZSAhPT0gJ21vZCcpIHtcbiAgICAgIHEgPSBuZXcgQk4obnVsbCk7XG4gICAgICBxLmxlbmd0aCA9IG0gKyAxO1xuICAgICAgcS53b3JkcyA9IG5ldyBBcnJheShxLmxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcS53b3Jkc1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRpZmYgPSBhLmNsb25lKCkuX2lzaGxuc3VibXVsKGIsIDEsIG0pO1xuICAgIGlmIChkaWZmLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICBhID0gZGlmZjtcbiAgICAgIGlmIChxKSB7XG4gICAgICAgIHEud29yZHNbbV0gPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGogPSBtIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgIHZhciBxaiA9IChhLndvcmRzW2IubGVuZ3RoICsgal0gfCAwKSAqIDB4NDAwMDAwMCArXG4gICAgICAgIChhLndvcmRzW2IubGVuZ3RoICsgaiAtIDFdIHwgMCk7XG5cbiAgICAgIC8vIE5PVEU6IChxaiAvIGJoaSkgaXMgKDB4M2ZmZmZmZiAqIDB4NDAwMDAwMCArIDB4M2ZmZmZmZikgLyAweDIwMDAwMDAgbWF4XG4gICAgICAvLyAoMHg3ZmZmZmZmKVxuICAgICAgcWogPSBNYXRoLm1pbigocWogLyBiaGkpIHwgMCwgMHgzZmZmZmZmKTtcblxuICAgICAgYS5faXNobG5zdWJtdWwoYiwgcWosIGopO1xuICAgICAgd2hpbGUgKGEubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgcWotLTtcbiAgICAgICAgYS5uZWdhdGl2ZSA9IDA7XG4gICAgICAgIGEuX2lzaGxuc3VibXVsKGIsIDEsIGopO1xuICAgICAgICBpZiAoIWEuaXNaZXJvKCkpIHtcbiAgICAgICAgICBhLm5lZ2F0aXZlIF49IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChxKSB7XG4gICAgICAgIHEud29yZHNbal0gPSBxajtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHEpIHtcbiAgICAgIHEuX3N0cmlwKCk7XG4gICAgfVxuICAgIGEuX3N0cmlwKCk7XG5cbiAgICAvLyBEZW5vcm1hbGl6ZVxuICAgIGlmIChtb2RlICE9PSAnZGl2JyAmJiBzaGlmdCAhPT0gMCkge1xuICAgICAgYS5pdXNocm4oc2hpZnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaXY6IHEgfHwgbnVsbCxcbiAgICAgIG1vZDogYVxuICAgIH07XG4gIH07XG5cbiAgLy8gTk9URTogMSkgYG1vZGVgIGNhbiBiZSBzZXQgdG8gYG1vZGAgdG8gcmVxdWVzdCBtb2Qgb25seSxcbiAgLy8gICAgICAgdG8gYGRpdmAgdG8gcmVxdWVzdCBkaXYgb25seSwgb3IgYmUgYWJzZW50IHRvXG4gIC8vICAgICAgIHJlcXVlc3QgYm90aCBkaXYgJiBtb2RcbiAgLy8gICAgICAgMikgYHBvc2l0aXZlYCBpcyB0cnVlIGlmIHVuc2lnbmVkIG1vZCBpcyByZXF1ZXN0ZWRcbiAgQk4ucHJvdG90eXBlLmRpdm1vZCA9IGZ1bmN0aW9uIGRpdm1vZCAobnVtLCBtb2RlLCBwb3NpdGl2ZSkge1xuICAgIGFzc2VydCghbnVtLmlzWmVybygpKTtcblxuICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiBuZXcgQk4oMClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRpdiwgbW9kLCByZXM7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICByZXMgPSB0aGlzLm5lZygpLmRpdm1vZChudW0sIG1vZGUpO1xuXG4gICAgICBpZiAobW9kZSAhPT0gJ21vZCcpIHtcbiAgICAgICAgZGl2ID0gcmVzLmRpdi5uZWcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaWFkZChudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IG1vZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IGRpdixcbiAgICAgICAgbW9kOiByZXMubW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgodGhpcy5uZWdhdGl2ZSAmIG51bS5uZWdhdGl2ZSkgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnZGl2Jykge1xuICAgICAgICBtb2QgPSByZXMubW9kLm5lZygpO1xuICAgICAgICBpZiAocG9zaXRpdmUgJiYgbW9kLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgICAgbW9kLmlzdWIobnVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IHJlcy5kaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmUgYXQgdGhpcyBwb2ludFxuXG4gICAgLy8gU3RyaXAgYm90aCBudW1iZXJzIHRvIGFwcHJveGltYXRlIHNoaWZ0IHZhbHVlXG4gICAgaWYgKG51bS5sZW5ndGggPiB0aGlzLmxlbmd0aCB8fCB0aGlzLmNtcChudW0pIDwgMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBuZXcgQk4oMCksXG4gICAgICAgIG1vZDogdGhpc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBWZXJ5IHNob3J0IHJlZHVjdGlvblxuICAgIGlmIChudW0ubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2RpdicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IHRoaXMuZGl2bihudW0ud29yZHNbMF0pLFxuICAgICAgICAgIG1vZDogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSA9PT0gJ21vZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IG51bGwsXG4gICAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RybihudW0ud29yZHNbMF0pKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IHRoaXMuZGl2bihudW0ud29yZHNbMF0pLFxuICAgICAgICBtb2Q6IG5ldyBCTih0aGlzLm1vZHJuKG51bS53b3Jkc1swXSkpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JkRGl2KG51bSwgbW9kZSk7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgLyBgbnVtYFxuICBCTi5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnZGl2JywgZmFsc2UpLmRpdjtcbiAgfTtcblxuICAvLyBGaW5kIGB0aGlzYCAlIGBudW1gXG4gIEJOLnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCBmYWxzZSkubW9kO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51bW9kID0gZnVuY3Rpb24gdW1vZCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ21vZCcsIHRydWUpLm1vZDtcbiAgfTtcblxuICAvLyBGaW5kIFJvdW5kKGB0aGlzYCAvIGBudW1gKVxuICBCTi5wcm90b3R5cGUuZGl2Um91bmQgPSBmdW5jdGlvbiBkaXZSb3VuZCAobnVtKSB7XG4gICAgdmFyIGRtID0gdGhpcy5kaXZtb2QobnVtKTtcblxuICAgIC8vIEZhc3QgY2FzZSAtIGV4YWN0IGRpdmlzaW9uXG4gICAgaWYgKGRtLm1vZC5pc1plcm8oKSkgcmV0dXJuIGRtLmRpdjtcblxuICAgIHZhciBtb2QgPSBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5tb2QuaXN1YihudW0pIDogZG0ubW9kO1xuXG4gICAgdmFyIGhhbGYgPSBudW0udXNocm4oMSk7XG4gICAgdmFyIHIyID0gbnVtLmFuZGxuKDEpO1xuICAgIHZhciBjbXAgPSBtb2QuY21wKGhhbGYpO1xuXG4gICAgLy8gUm91bmQgZG93blxuICAgIGlmIChjbXAgPCAwIHx8IChyMiA9PT0gMSAmJiBjbXAgPT09IDApKSByZXR1cm4gZG0uZGl2O1xuXG4gICAgLy8gUm91bmQgdXBcbiAgICByZXR1cm4gZG0uZGl2Lm5lZ2F0aXZlICE9PSAwID8gZG0uZGl2LmlzdWJuKDEpIDogZG0uZGl2LmlhZGRuKDEpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5tb2RybiA9IGZ1bmN0aW9uIG1vZHJuIChudW0pIHtcbiAgICB2YXIgaXNOZWdOdW0gPSBudW0gPCAwO1xuICAgIGlmIChpc05lZ051bSkgbnVtID0gLW51bTtcblxuICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmKTtcbiAgICB2YXIgcCA9ICgxIDw8IDI2KSAlIG51bTtcblxuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBhY2MgPSAocCAqIGFjYyArICh0aGlzLndvcmRzW2ldIHwgMCkpICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiBpc05lZ051bSA/IC1hY2MgOiBhY2M7XG4gIH07XG5cbiAgLy8gV0FSTklORzogREVQUkVDQVRFRFxuICBCTi5wcm90b3R5cGUubW9kbiA9IGZ1bmN0aW9uIG1vZG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLm1vZHJuKG51bSk7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgZGl2aXNpb24gYnkgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5pZGl2biA9IGZ1bmN0aW9uIGlkaXZuIChudW0pIHtcbiAgICB2YXIgaXNOZWdOdW0gPSBudW0gPCAwO1xuICAgIGlmIChpc05lZ051bSkgbnVtID0gLW51bTtcblxuICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmKTtcblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciB3ID0gKHRoaXMud29yZHNbaV0gfCAwKSArIGNhcnJ5ICogMHg0MDAwMDAwO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9ICh3IC8gbnVtKSB8IDA7XG4gICAgICBjYXJyeSA9IHcgJSBudW07XG4gICAgfVxuXG4gICAgdGhpcy5fc3RyaXAoKTtcbiAgICByZXR1cm4gaXNOZWdOdW0gPyB0aGlzLmluZWcoKSA6IHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmRpdm4gPSBmdW5jdGlvbiBkaXZuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVnY2QgPSBmdW5jdGlvbiBlZ2NkIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgeCA9IHRoaXM7XG4gICAgdmFyIHkgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoeC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgeCA9IHgudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHguY2xvbmUoKTtcbiAgICB9XG5cbiAgICAvLyBBICogeCArIEIgKiB5ID0geFxuICAgIHZhciBBID0gbmV3IEJOKDEpO1xuICAgIHZhciBCID0gbmV3IEJOKDApO1xuXG4gICAgLy8gQyAqIHggKyBEICogeSA9IHlcbiAgICB2YXIgQyA9IG5ldyBCTigwKTtcbiAgICB2YXIgRCA9IG5ldyBCTigxKTtcblxuICAgIHZhciBnID0gMDtcblxuICAgIHdoaWxlICh4LmlzRXZlbigpICYmIHkuaXNFdmVuKCkpIHtcbiAgICAgIHguaXVzaHJuKDEpO1xuICAgICAgeS5pdXNocm4oMSk7XG4gICAgICArK2c7XG4gICAgfVxuXG4gICAgdmFyIHlwID0geS5jbG9uZSgpO1xuICAgIHZhciB4cCA9IHguY2xvbmUoKTtcblxuICAgIHdoaWxlICgheC5pc1plcm8oKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKHgud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB4Lml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoQS5pc09kZCgpIHx8IEIuaXNPZGQoKSkge1xuICAgICAgICAgICAgQS5pYWRkKHlwKTtcbiAgICAgICAgICAgIEIuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQS5pdXNocm4oMSk7XG4gICAgICAgICAgQi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGptID0gMTsgKHkud29yZHNbMF0gJiBqbSkgPT09IDAgJiYgaiA8IDI2OyArK2osIGptIDw8PSAxKTtcbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICB5Lml1c2hybihqKTtcbiAgICAgICAgd2hpbGUgKGotLSA+IDApIHtcbiAgICAgICAgICBpZiAoQy5pc09kZCgpIHx8IEQuaXNPZGQoKSkge1xuICAgICAgICAgICAgQy5pYWRkKHlwKTtcbiAgICAgICAgICAgIEQuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQy5pdXNocm4oMSk7XG4gICAgICAgICAgRC5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHguY21wKHkpID49IDApIHtcbiAgICAgICAgeC5pc3ViKHkpO1xuICAgICAgICBBLmlzdWIoQyk7XG4gICAgICAgIEIuaXN1YihEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkuaXN1Yih4KTtcbiAgICAgICAgQy5pc3ViKEEpO1xuICAgICAgICBELmlzdWIoQik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGE6IEMsXG4gICAgICBiOiBELFxuICAgICAgZ2NkOiB5Lml1c2hsbihnKVxuICAgIH07XG4gIH07XG5cbiAgLy8gVGhpcyBpcyByZWR1Y2VkIGluY2FybmF0aW9uIG9mIHRoZSBiaW5hcnkgRUVBXG4gIC8vIGFib3ZlLCBkZXNpZ25hdGVkIHRvIGludmVydCBtZW1iZXJzIG9mIHRoZVxuICAvLyBfcHJpbWVfIGZpZWxkcyBGKHApIGF0IGEgbWF4aW1hbCBzcGVlZFxuICBCTi5wcm90b3R5cGUuX2ludm1wID0gZnVuY3Rpb24gX2ludm1wIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgYSA9IHRoaXM7XG4gICAgdmFyIGIgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgYSA9IGEudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gICAgdmFyIHgyID0gbmV3IEJOKDApO1xuXG4gICAgdmFyIGRlbHRhID0gYi5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKGEuY21wbigxKSA+IDAgJiYgYi5jbXBuKDEpID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKGEud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBhLml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoeDEuaXNPZGQoKSkge1xuICAgICAgICAgICAgeDEuaWFkZChkZWx0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeDEuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7IChiLndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgYi5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgyLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgyLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgyLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYS5jbXAoYikgPj0gMCkge1xuICAgICAgICBhLmlzdWIoYik7XG4gICAgICAgIHgxLmlzdWIoeDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYi5pc3ViKGEpO1xuICAgICAgICB4Mi5pc3ViKHgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmIChhLmNtcG4oMSkgPT09IDApIHtcbiAgICAgIHJlcyA9IHgxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB4MjtcbiAgICB9XG5cbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZChwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5nY2QgPSBmdW5jdGlvbiBnY2QgKG51bSkge1xuICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gbnVtLmFicygpO1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiB0aGlzLmFicygpO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW0uY2xvbmUoKTtcbiAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICBiLm5lZ2F0aXZlID0gMDtcblxuICAgIC8vIFJlbW92ZSBjb21tb24gZmFjdG9yIG9mIHR3b1xuICAgIGZvciAodmFyIHNoaWZ0ID0gMDsgYS5pc0V2ZW4oKSAmJiBiLmlzRXZlbigpOyBzaGlmdCsrKSB7XG4gICAgICBhLml1c2hybigxKTtcbiAgICAgIGIuaXVzaHJuKDEpO1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIHdoaWxlIChhLmlzRXZlbigpKSB7XG4gICAgICAgIGEuaXVzaHJuKDEpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGIuaXNFdmVuKCkpIHtcbiAgICAgICAgYi5pdXNocm4oMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciByID0gYS5jbXAoYik7XG4gICAgICBpZiAociA8IDApIHtcbiAgICAgICAgLy8gU3dhcCBgYWAgYW5kIGBiYCB0byBtYWtlIGBhYCBhbHdheXMgYmlnZ2VyIHRoYW4gYGJgXG4gICAgICAgIHZhciB0ID0gYTtcbiAgICAgICAgYSA9IGI7XG4gICAgICAgIGIgPSB0O1xuICAgICAgfSBlbHNlIGlmIChyID09PSAwIHx8IGIuY21wbigxKSA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYS5pc3ViKGIpO1xuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgcmV0dXJuIGIuaXVzaGxuKHNoaWZ0KTtcbiAgfTtcblxuICAvLyBJbnZlcnQgbnVtYmVyIGluIHRoZSBmaWVsZCBGKG51bSlcbiAgQk4ucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5lZ2NkKG51bSkuYS51bW9kKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLndvcmRzWzBdICYgMSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQgKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAxO1xuICB9O1xuXG4gIC8vIEFuZCBmaXJzdCB3b3JkIGFuZCBudW1cbiAgQk4ucHJvdG90eXBlLmFuZGxuID0gZnVuY3Rpb24gYW5kbG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLndvcmRzWzBdICYgbnVtO1xuICB9O1xuXG4gIC8vIEluY3JlbWVudCBhdCB0aGUgYml0IHBvc2l0aW9uIGluLWxpbmVcbiAgQk4ucHJvdG90eXBlLmJpbmNuID0gZnVuY3Rpb24gYmluY24gKGJpdCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyk7XG4gICAgdmFyIHIgPSBiaXQgJSAyNjtcbiAgICB2YXIgcyA9IChiaXQgLSByKSAvIDI2O1xuICAgIHZhciBxID0gMSA8PCByO1xuXG4gICAgLy8gRmFzdCBjYXNlOiBiaXQgaXMgbXVjaCBoaWdoZXIgdGhhbiBhbGwgZXhpc3Rpbmcgd29yZHNcbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgdGhpcy5fZXhwYW5kKHMgKyAxKTtcbiAgICAgIHRoaXMud29yZHNbc10gfD0gcTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBiaXQgYW5kIHByb3BhZ2F0ZSwgaWYgbmVlZGVkXG4gICAgdmFyIGNhcnJ5ID0gcTtcbiAgICBmb3IgKHZhciBpID0gczsgY2FycnkgIT09IDAgJiYgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB3ICs9IGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+PiAyNjtcbiAgICAgIHcgJj0gMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHc7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNtcG4gPSBmdW5jdGlvbiBjbXBuIChudW0pIHtcbiAgICB2YXIgbmVnYXRpdmUgPSBudW0gPCAwO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgIW5lZ2F0aXZlKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbmVnYXRpdmUpIHJldHVybiAxO1xuXG4gICAgdGhpcy5fc3RyaXAoKTtcblxuICAgIHZhciByZXM7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMSkge1xuICAgICAgcmVzID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgICAgIG51bSA9IC1udW07XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmLCAnTnVtYmVyIGlzIHRvbyBiaWcnKTtcblxuICAgICAgdmFyIHcgPSB0aGlzLndvcmRzWzBdIHwgMDtcbiAgICAgIHJlcyA9IHcgPT09IG51bSA/IDAgOiB3IDwgbnVtID8gLTEgOiAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29tcGFyZSB0d28gbnVtYmVycyBhbmQgcmV0dXJuOlxuICAvLyAxIC0gaWYgYHRoaXNgID4gYG51bWBcbiAgLy8gMCAtIGlmIGB0aGlzYCA9PSBgbnVtYFxuICAvLyAtMSAtIGlmIGB0aGlzYCA8IGBudW1gXG4gIEJOLnByb3RvdHlwZS5jbXAgPSBmdW5jdGlvbiBjbXAgKG51bSkge1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmIG51bS5uZWdhdGl2ZSA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIDE7XG5cbiAgICB2YXIgcmVzID0gdGhpcy51Y21wKG51bSk7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHJldHVybiAtcmVzIHwgMDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFVuc2lnbmVkIGNvbXBhcmlzb25cbiAgQk4ucHJvdG90eXBlLnVjbXAgPSBmdW5jdGlvbiB1Y21wIChudW0pIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBoYXZlIHRoZSBzYW1lIHNpZ25cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSByZXR1cm4gLTE7XG5cbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGEgPSB0aGlzLndvcmRzW2ldIHwgMDtcbiAgICAgIHZhciBiID0gbnVtLndvcmRzW2ldIHwgMDtcblxuICAgICAgaWYgKGEgPT09IGIpIGNvbnRpbnVlO1xuICAgICAgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJlcyA9IC0xO1xuICAgICAgfSBlbHNlIGlmIChhID4gYikge1xuICAgICAgICByZXMgPSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0biA9IGZ1bmN0aW9uIGd0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndCA9IGZ1bmN0aW9uIGd0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RlbiA9IGZ1bmN0aW9uIGd0ZW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA+PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGUgPSBmdW5jdGlvbiBndGUgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0biA9IGZ1bmN0aW9uIGx0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAtMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHQgPSBmdW5jdGlvbiBsdCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdGVuID0gZnVuY3Rpb24gbHRlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pIDw9IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZSA9IGZ1bmN0aW9uIGx0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXFuID0gZnVuY3Rpb24gZXFuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAwO1xuICB9O1xuXG4gIC8vXG4gIC8vIEEgcmVkdWNlIGNvbnRleHQsIGNvdWxkIGJlIHVzaW5nIG1vbnRnb21lcnkgb3Igc29tZXRoaW5nIGJldHRlciwgZGVwZW5kaW5nXG4gIC8vIG9uIHRoZSBgbWAgaXRzZWxmLlxuICAvL1xuICBCTi5yZWQgPSBmdW5jdGlvbiByZWQgKG51bSkge1xuICAgIHJldHVybiBuZXcgUmVkKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvUmVkID0gZnVuY3Rpb24gdG9SZWQgKGN0eCkge1xuICAgIGFzc2VydCghdGhpcy5yZWQsICdBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIHJldHVybiBjdHguY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tUmVkID0gZnVuY3Rpb24gZnJvbVJlZCAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAnZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2ZvcmNlUmVkID0gZnVuY3Rpb24gX2ZvcmNlUmVkIChjdHgpIHtcbiAgICB0aGlzLnJlZCA9IGN0eDtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZm9yY2VSZWQgPSBmdW5jdGlvbiBmb3JjZVJlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VSZWQoY3R4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkQWRkID0gZnVuY3Rpb24gcmVkQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJQWRkID0gZnVuY3Rpb24gcmVkSUFkZCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaWFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTdWIgPSBmdW5jdGlvbiByZWRTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTdWIgPSBmdW5jdGlvbiByZWRJU3ViIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNobCA9IGZ1bmN0aW9uIHJlZFNobCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zaGwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkTXVsID0gZnVuY3Rpb24gcmVkTXVsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTIodGhpcywgbnVtKTtcbiAgICByZXR1cm4gdGhpcy5yZWQubXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElNdWwgPSBmdW5jdGlvbiByZWRJTXVsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTIodGhpcywgbnVtKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaW11bCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTcXIgPSBmdW5jdGlvbiByZWRTcXIgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3FyKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJU3FyID0gZnVuY3Rpb24gcmVkSVNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaXNxcih0aGlzKTtcbiAgfTtcblxuICAvLyBTcXVhcmUgcm9vdCBvdmVyIHBcbiAgQk4ucHJvdG90eXBlLnJlZFNxcnQgPSBmdW5jdGlvbiByZWRTcXJ0ICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXJ0KHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJbnZtID0gZnVuY3Rpb24gcmVkSW52bSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaW52bSh0aGlzKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gbmVnYXRpdmUgY2xvbmUgb2YgYHRoaXNgICUgYHJlZCBtb2R1bG9gXG4gIEJOLnByb3RvdHlwZS5yZWROZWcgPSBmdW5jdGlvbiByZWROZWcgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQubmVnKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRQb3cgPSBmdW5jdGlvbiByZWRQb3cgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCAmJiAhbnVtLnJlZCwgJ3JlZFBvdyhub3JtYWxOdW0pJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnBvdyh0aGlzLCBudW0pO1xuICB9O1xuXG4gIC8vIFByaW1lIG51bWJlcnMgd2l0aCBlZmZpY2llbnQgcmVkdWN0aW9uXG4gIHZhciBwcmltZXMgPSB7XG4gICAgazI1NjogbnVsbCxcbiAgICBwMjI0OiBudWxsLFxuICAgIHAxOTI6IG51bGwsXG4gICAgcDI1NTE5OiBudWxsXG4gIH07XG5cbiAgLy8gUHNldWRvLU1lcnNlbm5lIHByaW1lXG4gIGZ1bmN0aW9uIE1QcmltZSAobmFtZSwgcCkge1xuICAgIC8vIFAgPSAyIF4gTiAtIEtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMucCA9IG5ldyBCTihwLCAxNik7XG4gICAgdGhpcy5uID0gdGhpcy5wLmJpdExlbmd0aCgpO1xuICAgIHRoaXMuayA9IG5ldyBCTigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCk7XG5cbiAgICB0aGlzLnRtcCA9IHRoaXMuX3RtcCgpO1xuICB9XG5cbiAgTVByaW1lLnByb3RvdHlwZS5fdG1wID0gZnVuY3Rpb24gX3RtcCAoKSB7XG4gICAgdmFyIHRtcCA9IG5ldyBCTihudWxsKTtcbiAgICB0bXAud29yZHMgPSBuZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubiAvIDEzKSk7XG4gICAgcmV0dXJuIHRtcDtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmlyZWR1Y2UgPSBmdW5jdGlvbiBpcmVkdWNlIChudW0pIHtcbiAgICAvLyBBc3N1bWVzIHRoYXQgYG51bWAgaXMgbGVzcyB0aGFuIGBQXjJgXG4gICAgLy8gbnVtID0gSEkgKiAoMiBeIE4gLSBLKSArIEhJICogSyArIExPID0gSEkgKiBLICsgTE8gKG1vZCBQKVxuICAgIHZhciByID0gbnVtO1xuICAgIHZhciBybGVuO1xuXG4gICAgZG8ge1xuICAgICAgdGhpcy5zcGxpdChyLCB0aGlzLnRtcCk7XG4gICAgICByID0gdGhpcy5pbXVsSyhyKTtcbiAgICAgIHIgPSByLmlhZGQodGhpcy50bXApO1xuICAgICAgcmxlbiA9IHIuYml0TGVuZ3RoKCk7XG4gICAgfSB3aGlsZSAocmxlbiA+IHRoaXMubik7XG5cbiAgICB2YXIgY21wID0gcmxlbiA8IHRoaXMubiA/IC0xIDogci51Y21wKHRoaXMucCk7XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgci53b3Jkc1swXSA9IDA7XG4gICAgICByLmxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgICByLmlzdWIodGhpcy5wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHIuc3RyaXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyByIGlzIGEgQk4gdjQgaW5zdGFuY2VcbiAgICAgICAgci5zdHJpcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gciBpcyBhIEJOIHY1IGluc3RhbmNlXG4gICAgICAgIHIuX3N0cmlwKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0IChpbnB1dCwgb3V0KSB7XG4gICAgaW5wdXQuaXVzaHJuKHRoaXMubiwgMCwgb3V0KTtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIHJldHVybiBudW0uaW11bCh0aGlzLmspO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEsyNTYgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdrMjU2JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZicpO1xuICB9XG4gIGluaGVyaXRzKEsyNTYsIE1QcmltZSk7XG5cbiAgSzI1Ni5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dHB1dCkge1xuICAgIC8vIDI1NiA9IDkgKiAyNiArIDIyXG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZjtcblxuICAgIHZhciBvdXRMZW4gPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIDkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspIHtcbiAgICAgIG91dHB1dC53b3Jkc1tpXSA9IGlucHV0LndvcmRzW2ldO1xuICAgIH1cbiAgICBvdXRwdXQubGVuZ3RoID0gb3V0TGVuO1xuXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA8PSA5KSB7XG4gICAgICBpbnB1dC53b3Jkc1swXSA9IDA7XG4gICAgICBpbnB1dC5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNoaWZ0IGJ5IDkgbGltYnNcbiAgICB2YXIgcHJldiA9IGlucHV0LndvcmRzWzldO1xuICAgIG91dHB1dC53b3Jkc1tvdXRwdXQubGVuZ3RoKytdID0gcHJldiAmIG1hc2s7XG5cbiAgICBmb3IgKGkgPSAxMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmV4dCA9IGlucHV0LndvcmRzW2ldIHwgMDtcbiAgICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSAoKG5leHQgJiBtYXNrKSA8PCA0KSB8IChwcmV2ID4+PiAyMik7XG4gICAgICBwcmV2ID0gbmV4dDtcbiAgICB9XG4gICAgcHJldiA+Pj49IDIyO1xuICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSBwcmV2O1xuICAgIGlmIChwcmV2ID09PSAwICYmIGlucHV0Lmxlbmd0aCA+IDEwKSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gMTA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0Lmxlbmd0aCAtPSA5O1xuICAgIH1cbiAgfTtcblxuICBLMjU2LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxMDAwMDAzZDEgPSBbIDB4NDAsIDB4M2QxIF1cbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aF0gPSAwO1xuICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoICsgMV0gPSAwO1xuICAgIG51bS5sZW5ndGggKz0gMjtcblxuICAgIC8vIGJvdW5kZWQgYXQ6IDB4NDAgKiAweDNmZmZmZmYgKyAweDNkMCA9IDB4MTAwMDAwMzkwXG4gICAgdmFyIGxvID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHcgPSBudW0ud29yZHNbaV0gfCAwO1xuICAgICAgbG8gKz0gdyAqIDB4M2QxO1xuICAgICAgbnVtLndvcmRzW2ldID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICBsbyA9IHcgKiAweDQwICsgKChsbyAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICB9XG5cbiAgICAvLyBGYXN0IGxlbmd0aCByZWR1Y3Rpb25cbiAgICBpZiAobnVtLndvcmRzW251bS5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFAyMjQgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMjI0JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMScpO1xuICB9XG4gIGluaGVyaXRzKFAyMjQsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDE5MiAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ3AxOTInLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDE5MiwgTVByaW1lKTtcblxuICBmdW5jdGlvbiBQMjU1MTkgKCkge1xuICAgIC8vIDIgXiAyNTUgLSAxOVxuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICcyNTUxOScsXG4gICAgICAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcpO1xuICB9XG4gIGluaGVyaXRzKFAyNTUxOSwgTVByaW1lKTtcblxuICBQMjU1MTkucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIC8vIEsgPSAweDEzXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhpID0gKG51bS53b3Jkc1tpXSB8IDApICogMHgxMyArIGNhcnJ5O1xuICAgICAgdmFyIGxvID0gaGkgJiAweDNmZmZmZmY7XG4gICAgICBoaSA+Pj49IDI2O1xuXG4gICAgICBudW0ud29yZHNbaV0gPSBsbztcbiAgICAgIGNhcnJ5ID0gaGk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgbnVtLndvcmRzW251bS5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICAvLyBFeHBvcnRlZCBtb3N0bHkgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHVzZSBwbGFpbiBuYW1lIGluc3RlYWRcbiAgQk4uX3ByaW1lID0gZnVuY3Rpb24gcHJpbWUgKG5hbWUpIHtcbiAgICAvLyBDYWNoZWQgdmVyc2lvbiBvZiBwcmltZVxuICAgIGlmIChwcmltZXNbbmFtZV0pIHJldHVybiBwcmltZXNbbmFtZV07XG5cbiAgICB2YXIgcHJpbWU7XG4gICAgaWYgKG5hbWUgPT09ICdrMjU2Jykge1xuICAgICAgcHJpbWUgPSBuZXcgSzI1NigpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AyMjQnKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjI0KCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDE5MicpIHtcbiAgICAgIHByaW1lID0gbmV3IFAxOTIoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjU1MTknKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjU1MTkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByaW1lICcgKyBuYW1lKTtcbiAgICB9XG4gICAgcHJpbWVzW25hbWVdID0gcHJpbWU7XG5cbiAgICByZXR1cm4gcHJpbWU7XG4gIH07XG5cbiAgLy9cbiAgLy8gQmFzZSByZWR1Y3Rpb24gZW5naW5lXG4gIC8vXG4gIGZ1bmN0aW9uIFJlZCAobSkge1xuICAgIGlmICh0eXBlb2YgbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBwcmltZSA9IEJOLl9wcmltZShtKTtcbiAgICAgIHRoaXMubSA9IHByaW1lLnA7XG4gICAgICB0aGlzLnByaW1lID0gcHJpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChtLmd0bigxKSwgJ21vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMScpO1xuICAgICAgdGhpcy5tID0gbTtcbiAgICAgIHRoaXMucHJpbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTEgPSBmdW5jdGlvbiBfdmVyaWZ5MSAoYSkge1xuICAgIGFzc2VydChhLm5lZ2F0aXZlID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQsICdyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5fdmVyaWZ5MiA9IGZ1bmN0aW9uIF92ZXJpZnkyIChhLCBiKSB7XG4gICAgYXNzZXJ0KChhLm5lZ2F0aXZlIHwgYi5uZWdhdGl2ZSkgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIGFzc2VydChhLnJlZCAmJiBhLnJlZCA9PT0gYi5yZWQsXG4gICAgICAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW1vZCA9IGZ1bmN0aW9uIGltb2QgKGEpIHtcbiAgICBpZiAodGhpcy5wcmltZSkgcmV0dXJuIHRoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk7XG5cbiAgICBtb3ZlKGEsIGEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSk7XG4gICAgcmV0dXJuIGE7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkge1xuICAgICAgcmV0dXJuIGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tLnN1YihhKS5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuXG4gICAgdmFyIHJlcyA9IGEuYWRkKGIpO1xuICAgIGlmIChyZXMuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzLmlzdWIodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5pYWRkKGIpO1xuICAgIGlmIChyZXMuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzLmlzdWIodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1YiAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5zdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5pc3ViKGIpO1xuICAgIGlmIChyZXMuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcy5pYWRkKHRoaXMubSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5zaGwgPSBmdW5jdGlvbiBzaGwgKGEsIG51bSkge1xuICAgIHRoaXMuX3ZlcmlmeTEoYSk7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLnVzaGxuKG51bSkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuICAgIHJldHVybiB0aGlzLmltb2QoYS5pbXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLm11bChiKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pc3FyID0gZnVuY3Rpb24gaXNxciAoYSkge1xuICAgIHJldHVybiB0aGlzLmltdWwoYSwgYS5jbG9uZSgpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoYSkge1xuICAgIHJldHVybiB0aGlzLm11bChhLCBhKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNxcnQgPSBmdW5jdGlvbiBzcXJ0IChhKSB7XG4gICAgaWYgKGEuaXNaZXJvKCkpIHJldHVybiBhLmNsb25lKCk7XG5cbiAgICB2YXIgbW9kMyA9IHRoaXMubS5hbmRsbigzKTtcbiAgICBhc3NlcnQobW9kMyAlIDIgPT09IDEpO1xuXG4gICAgLy8gRmFzdCBjYXNlXG4gICAgaWYgKG1vZDMgPT09IDMpIHtcbiAgICAgIHZhciBwb3cgPSB0aGlzLm0uYWRkKG5ldyBCTigxKSkuaXVzaHJuKDIpO1xuICAgICAgcmV0dXJuIHRoaXMucG93KGEsIHBvdyk7XG4gICAgfVxuXG4gICAgLy8gVG9uZWxsaS1TaGFua3MgYWxnb3JpdGhtIChUb3RhbGx5IHVub3B0aW1pemVkIGFuZCBzbG93KVxuICAgIC8vXG4gICAgLy8gRmluZCBRIGFuZCBTLCB0aGF0IFEgKiAyIF4gUyA9IChQIC0gMSlcbiAgICB2YXIgcSA9IHRoaXMubS5zdWJuKDEpO1xuICAgIHZhciBzID0gMDtcbiAgICB3aGlsZSAoIXEuaXNaZXJvKCkgJiYgcS5hbmRsbigxKSA9PT0gMCkge1xuICAgICAgcysrO1xuICAgICAgcS5pdXNocm4oMSk7XG4gICAgfVxuICAgIGFzc2VydCghcS5pc1plcm8oKSk7XG5cbiAgICB2YXIgb25lID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIHZhciBuT25lID0gb25lLnJlZE5lZygpO1xuXG4gICAgLy8gRmluZCBxdWFkcmF0aWMgbm9uLXJlc2lkdWVcbiAgICAvLyBOT1RFOiBNYXggaXMgc3VjaCBiZWNhdXNlIG9mIGdlbmVyYWxpemVkIFJpZW1hbm4gaHlwb3RoZXNpcy5cbiAgICB2YXIgbHBvdyA9IHRoaXMubS5zdWJuKDEpLml1c2hybigxKTtcbiAgICB2YXIgeiA9IHRoaXMubS5iaXRMZW5ndGgoKTtcbiAgICB6ID0gbmV3IEJOKDIgKiB6ICogeikudG9SZWQodGhpcyk7XG5cbiAgICB3aGlsZSAodGhpcy5wb3coeiwgbHBvdykuY21wKG5PbmUpICE9PSAwKSB7XG4gICAgICB6LnJlZElBZGQobk9uZSk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSB0aGlzLnBvdyh6LCBxKTtcbiAgICB2YXIgciA9IHRoaXMucG93KGEsIHEuYWRkbigxKS5pdXNocm4oMSkpO1xuICAgIHZhciB0ID0gdGhpcy5wb3coYSwgcSk7XG4gICAgdmFyIG0gPSBzO1xuICAgIHdoaWxlICh0LmNtcChvbmUpICE9PSAwKSB7XG4gICAgICB2YXIgdG1wID0gdDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyB0bXAuY21wKG9uZSkgIT09IDA7IGkrKykge1xuICAgICAgICB0bXAgPSB0bXAucmVkU3FyKCk7XG4gICAgICB9XG4gICAgICBhc3NlcnQoaSA8IG0pO1xuICAgICAgdmFyIGIgPSB0aGlzLnBvdyhjLCBuZXcgQk4oMSkuaXVzaGxuKG0gLSBpIC0gMSkpO1xuXG4gICAgICByID0gci5yZWRNdWwoYik7XG4gICAgICBjID0gYi5yZWRTcXIoKTtcbiAgICAgIHQgPSB0LnJlZE11bChjKTtcbiAgICAgIG0gPSBpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW52bSA9IGZ1bmN0aW9uIGludm0gKGEpIHtcbiAgICB2YXIgaW52ID0gYS5faW52bXAodGhpcy5tKTtcbiAgICBpZiAoaW52Lm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBpbnYubmVnYXRpdmUgPSAwO1xuICAgICAgcmV0dXJuIHRoaXMuaW1vZChpbnYpLnJlZE5lZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludik7XG4gICAgfVxuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChhLCBudW0pIHtcbiAgICBpZiAobnVtLmlzWmVybygpKSByZXR1cm4gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIGlmIChudW0uY21wbigxKSA9PT0gMCkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciB3aW5kb3dTaXplID0gNDtcbiAgICB2YXIgd25kID0gbmV3IEFycmF5KDEgPDwgd2luZG93U2l6ZSk7XG4gICAgd25kWzBdID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIHduZFsxXSA9IGE7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCB3bmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHduZFtpXSA9IHRoaXMubXVsKHduZFtpIC0gMV0sIGEpO1xuICAgIH1cblxuICAgIHZhciByZXMgPSB3bmRbMF07XG4gICAgdmFyIGN1cnJlbnQgPSAwO1xuICAgIHZhciBjdXJyZW50TGVuID0gMDtcbiAgICB2YXIgc3RhcnQgPSBudW0uYml0TGVuZ3RoKCkgJSAyNjtcbiAgICBpZiAoc3RhcnQgPT09IDApIHtcbiAgICAgIHN0YXJ0ID0gMjY7XG4gICAgfVxuXG4gICAgZm9yIChpID0gbnVtLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IG51bS53b3Jkc1tpXTtcbiAgICAgIGZvciAodmFyIGogPSBzdGFydCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIHZhciBiaXQgPSAod29yZCA+PiBqKSAmIDE7XG4gICAgICAgIGlmIChyZXMgIT09IHduZFswXSkge1xuICAgICAgICAgIHJlcyA9IHRoaXMuc3FyKHJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYml0ID09PSAwICYmIGN1cnJlbnQgPT09IDApIHtcbiAgICAgICAgICBjdXJyZW50TGVuID0gMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnQgPDw9IDE7XG4gICAgICAgIGN1cnJlbnQgfD0gYml0O1xuICAgICAgICBjdXJyZW50TGVuKys7XG4gICAgICAgIGlmIChjdXJyZW50TGVuICE9PSB3aW5kb3dTaXplICYmIChpICE9PSAwIHx8IGogIT09IDApKSBjb250aW51ZTtcblxuICAgICAgICByZXMgPSB0aGlzLm11bChyZXMsIHduZFtjdXJyZW50XSk7XG4gICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICBjdXJyZW50ID0gMDtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gMjY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRUbyA9IGZ1bmN0aW9uIGNvbnZlcnRUbyAobnVtKSB7XG4gICAgdmFyIHIgPSBudW0udW1vZCh0aGlzLm0pO1xuXG4gICAgcmV0dXJuIHIgPT09IG51bSA/IHIuY2xvbmUoKSA6IHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgcmVzID0gbnVtLmNsb25lKCk7XG4gICAgcmVzLnJlZCA9IG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvL1xuICAvLyBNb250Z29tZXJ5IG1ldGhvZCBlbmdpbmVcbiAgLy9cblxuICBCTi5tb250ID0gZnVuY3Rpb24gbW9udCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBNb250KG51bSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gTW9udCAobSkge1xuICAgIFJlZC5jYWxsKHRoaXMsIG0pO1xuXG4gICAgdGhpcy5zaGlmdCA9IHRoaXMubS5iaXRMZW5ndGgoKTtcbiAgICBpZiAodGhpcy5zaGlmdCAlIDI2ICE9PSAwKSB7XG4gICAgICB0aGlzLnNoaWZ0ICs9IDI2IC0gKHRoaXMuc2hpZnQgJSAyNik7XG4gICAgfVxuXG4gICAgdGhpcy5yID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLnNoaWZ0KTtcbiAgICB0aGlzLnIyID0gdGhpcy5pbW9kKHRoaXMuci5zcXIoKSk7XG4gICAgdGhpcy5yaW52ID0gdGhpcy5yLl9pbnZtcCh0aGlzLm0pO1xuXG4gICAgdGhpcy5taW52ID0gdGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pO1xuICAgIHRoaXMubWludiA9IHRoaXMubWludi51bW9kKHRoaXMucik7XG4gICAgdGhpcy5taW52ID0gdGhpcy5yLnN1Yih0aGlzLm1pbnYpO1xuICB9XG4gIGluaGVyaXRzKE1vbnQsIFJlZCk7XG5cbiAgTW9udC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5pbW9kKG51bS51c2hsbih0aGlzLnNoaWZ0KSk7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuY29udmVydEZyb20gPSBmdW5jdGlvbiBjb252ZXJ0RnJvbSAobnVtKSB7XG4gICAgdmFyIHIgPSB0aGlzLmltb2QobnVtLm11bCh0aGlzLnJpbnYpKTtcbiAgICByLnJlZCA9IG51bGw7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKGEsIGIpIHtcbiAgICBpZiAoYS5pc1plcm8oKSB8fCBiLmlzWmVybygpKSB7XG4gICAgICBhLndvcmRzWzBdID0gMDtcbiAgICAgIGEubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIHZhciB0ID0gYS5pbXVsKGIpO1xuICAgIHZhciBjID0gdC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSk7XG4gICAgdmFyIHUgPSB0LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpO1xuICAgIHZhciByZXMgPSB1O1xuXG4gICAgaWYgKHUuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzID0gdS5pc3ViKHRoaXMubSk7XG4gICAgfSBlbHNlIGlmICh1LmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMgPSB1LmlhZGQodGhpcy5tKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKGEsIGIpIHtcbiAgICBpZiAoYS5pc1plcm8oKSB8fCBiLmlzWmVybygpKSByZXR1cm4gbmV3IEJOKDApLl9mb3JjZVJlZCh0aGlzKTtcblxuICAgIHZhciB0ID0gYS5tdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG4gICAgaWYgKHUuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzID0gdS5pc3ViKHRoaXMubSk7XG4gICAgfSBlbHNlIGlmICh1LmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMgPSB1LmlhZGQodGhpcy5tKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIC8vIChBUileLTEgKiBSXjIgPSAoQV4tMSAqIFJeLTEpICogUl4yID0gQV4tMSAqIFJcbiAgICB2YXIgcmVzID0gdGhpcy5pbW9kKGEuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtcbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcbn0pKHR5cGVvZiBtb2R1bGUgPT09ICd1bmRlZmluZWQnIHx8IG1vZHVsZSwgdGhpcyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCIvKiFcbiAqIGhhc2gtd2FzbSAoaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvaGFzaC13YXNtKVxuICogKGMpIERhbmkgQmlyb1xuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG5jbGFzcyBNdXRleCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubXV0ZXggPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgbG9jaygpIHtcbiAgICAgICAgbGV0IGJlZ2luID0gKCkgPT4geyB9O1xuICAgICAgICB0aGlzLm11dGV4ID0gdGhpcy5tdXRleC50aGVuKCgpID0+IG5ldyBQcm9taXNlKGJlZ2luKSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzKSA9PiB7XG4gICAgICAgICAgICBiZWdpbiA9IHJlcztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRpc3BhdGNoKGZuKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB1bmxvY2sgPSB5aWVsZCB0aGlzLmxvY2soKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkIFByb21pc2UucmVzb2x2ZShmbigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHVubG9jaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cbnZhciBfYTtcbmZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIHJldHVybiBnbG9iYWw7XG59XG5jb25zdCBnbG9iYWxPYmplY3QgPSBnZXRHbG9iYWwoKTtcbmNvbnN0IG5vZGVCdWZmZXIgPSAoX2EgPSBnbG9iYWxPYmplY3QuQnVmZmVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuY29uc3QgdGV4dEVuY29kZXIgPSBnbG9iYWxPYmplY3QuVGV4dEVuY29kZXIgPyBuZXcgZ2xvYmFsT2JqZWN0LlRleHRFbmNvZGVyKCkgOiBudWxsO1xuZnVuY3Rpb24gaW50QXJyYXlUb1N0cmluZyhhcnIsIGxlbikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmFyci5zdWJhcnJheSgwLCBsZW4pKTtcbn1cbmZ1bmN0aW9uIGhleENoYXJDb2Rlc1RvSW50KGEsIGIpIHtcbiAgICByZXR1cm4gKCgoYSAmIDB4RikgKyAoKGEgPj4gNikgfCAoKGEgPj4gMykgJiAweDgpKSkgPDwgNCkgfCAoKGIgJiAweEYpICsgKChiID4+IDYpIHwgKChiID4+IDMpICYgMHg4KSkpO1xufVxuZnVuY3Rpb24gd3JpdGVIZXhUb1VJbnQ4KGJ1Ziwgc3RyKSB7XG4gICAgY29uc3Qgc2l6ZSA9IHN0ci5sZW5ndGggPj4gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IGkgPDwgMTtcbiAgICAgICAgYnVmW2ldID0gaGV4Q2hhckNvZGVzVG9JbnQoc3RyLmNoYXJDb2RlQXQoaW5kZXgpLCBzdHIuY2hhckNvZGVBdChpbmRleCArIDEpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBoZXhTdHJpbmdFcXVhbHNVSW50OChzdHIsIGJ1Zikge1xuICAgIGlmIChzdHIubGVuZ3RoICE9PSBidWYubGVuZ3RoICogMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHN0ckluZGV4ID0gaSA8PCAxO1xuICAgICAgICBpZiAoYnVmW2ldICE9PSBoZXhDaGFyQ29kZXNUb0ludChzdHIuY2hhckNvZGVBdChzdHJJbmRleCksIHN0ci5jaGFyQ29kZUF0KHN0ckluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5jb25zdCBhbHBoYSA9ICdhJy5jaGFyQ29kZUF0KDApIC0gMTA7XG5jb25zdCBkaWdpdCA9ICcwJy5jaGFyQ29kZUF0KDApO1xuZnVuY3Rpb24gZ2V0RGlnZXN0SGV4KHRtcEJ1ZmZlciwgaW5wdXQsIGhhc2hMZW5ndGgpIHtcbiAgICBsZXQgcCA9IDA7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcGx1c3BsdXMgKi9cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hMZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbmliYmxlID0gaW5wdXRbaV0gPj4+IDQ7XG4gICAgICAgIHRtcEJ1ZmZlcltwKytdID0gbmliYmxlID4gOSA/IG5pYmJsZSArIGFscGhhIDogbmliYmxlICsgZGlnaXQ7XG4gICAgICAgIG5pYmJsZSA9IGlucHV0W2ldICYgMHhGO1xuICAgICAgICB0bXBCdWZmZXJbcCsrXSA9IG5pYmJsZSA+IDkgPyBuaWJibGUgKyBhbHBoYSA6IG5pYmJsZSArIGRpZ2l0O1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXBsdXNwbHVzICovXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgdG1wQnVmZmVyKTtcbn1cbmNvbnN0IGdldFVJbnQ4QnVmZmVyID0gbm9kZUJ1ZmZlciAhPT0gbnVsbFxuICAgID8gKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgYnVmID0gbm9kZUJ1ZmZlci5mcm9tKGRhdGEsICd1dGY4Jyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIHR5cGUhJyk7XG4gICAgfVxuICAgIDogKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRleHRFbmNvZGVyLmVuY29kZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSB0eXBlIScpO1xuICAgIH07XG5jb25zdCBiYXNlNjRDaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbmNvbnN0IGJhc2U2NExvb2t1cCA9IG5ldyBVaW50OEFycmF5KDI1Nik7XG5mb3IgKGxldCBpID0gMDsgaSA8IGJhc2U2NENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgYmFzZTY0TG9va3VwW2Jhc2U2NENoYXJzLmNoYXJDb2RlQXQoaSldID0gaTtcbn1cbmZ1bmN0aW9uIGVuY29kZUJhc2U2NChkYXRhLCBwYWQgPSB0cnVlKSB7XG4gICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgZXh0cmFCeXRlcyA9IGxlbiAlIDM7XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBjb25zdCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjI7IGkgKz0gMykge1xuICAgICAgICBjb25zdCB0bXAgPSAoKGRhdGFbaV0gPDwgMTYpICYgMHhGRjAwMDApXG4gICAgICAgICAgICArICgoZGF0YVtpICsgMV0gPDwgOCkgJiAweEZGMDApXG4gICAgICAgICAgICArIChkYXRhW2kgKyAyXSAmIDB4RkYpO1xuICAgICAgICBjb25zdCB0cmlwbGV0ID0gYmFzZTY0Q2hhcnMuY2hhckF0KCh0bXAgPj4gMTgpICYgMHgzRilcbiAgICAgICAgICAgICsgYmFzZTY0Q2hhcnMuY2hhckF0KCh0bXAgPj4gMTIpICYgMHgzRilcbiAgICAgICAgICAgICsgYmFzZTY0Q2hhcnMuY2hhckF0KCh0bXAgPj4gNikgJiAweDNGKVxuICAgICAgICAgICAgKyBiYXNlNjRDaGFycy5jaGFyQXQodG1wICYgMHgzRik7XG4gICAgICAgIHBhcnRzLnB1c2godHJpcGxldCk7XG4gICAgfVxuICAgIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IGRhdGFbbGVuIC0gMV07XG4gICAgICAgIGNvbnN0IGEgPSBiYXNlNjRDaGFycy5jaGFyQXQodG1wID4+IDIpO1xuICAgICAgICBjb25zdCBiID0gYmFzZTY0Q2hhcnMuY2hhckF0KCh0bXAgPDwgNCkgJiAweDNGKTtcbiAgICAgICAgcGFydHMucHVzaChgJHthfSR7Yn1gKTtcbiAgICAgICAgaWYgKHBhZCkge1xuICAgICAgICAgICAgcGFydHMucHVzaCgnPT0nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IChkYXRhW2xlbiAtIDJdIDw8IDgpICsgZGF0YVtsZW4gLSAxXTtcbiAgICAgICAgY29uc3QgYSA9IGJhc2U2NENoYXJzLmNoYXJBdCh0bXAgPj4gMTApO1xuICAgICAgICBjb25zdCBiID0gYmFzZTY0Q2hhcnMuY2hhckF0KCh0bXAgPj4gNCkgJiAweDNGKTtcbiAgICAgICAgY29uc3QgYyA9IGJhc2U2NENoYXJzLmNoYXJBdCgodG1wIDw8IDIpICYgMHgzRik7XG4gICAgICAgIHBhcnRzLnB1c2goYCR7YX0ke2J9JHtjfWApO1xuICAgICAgICBpZiAocGFkKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKCc9Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xufVxuZnVuY3Rpb24gZ2V0RGVjb2RlQmFzZTY0TGVuZ3RoKGRhdGEpIHtcbiAgICBsZXQgYnVmZmVyTGVuZ3RoID0gTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAqIDAuNzUpO1xuICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgIGlmIChkYXRhW2xlbiAtIDFdID09PSAnPScpIHtcbiAgICAgICAgYnVmZmVyTGVuZ3RoIC09IDE7XG4gICAgICAgIGlmIChkYXRhW2xlbiAtIDJdID09PSAnPScpIHtcbiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCAtPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBidWZmZXJMZW5ndGg7XG59XG5mdW5jdGlvbiBkZWNvZGVCYXNlNjQoZGF0YSkge1xuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IGdldERlY29kZUJhc2U2NExlbmd0aChkYXRhKTtcbiAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlckxlbmd0aCk7XG4gICAgbGV0IHAgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZDEgPSBiYXNlNjRMb29rdXBbZGF0YS5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgY29uc3QgZW5jb2RlZDIgPSBiYXNlNjRMb29rdXBbZGF0YS5jaGFyQ29kZUF0KGkgKyAxKV07XG4gICAgICAgIGNvbnN0IGVuY29kZWQzID0gYmFzZTY0TG9va3VwW2RhdGEuY2hhckNvZGVBdChpICsgMildO1xuICAgICAgICBjb25zdCBlbmNvZGVkNCA9IGJhc2U2NExvb2t1cFtkYXRhLmNoYXJDb2RlQXQoaSArIDMpXTtcbiAgICAgICAgYnl0ZXNbcF0gPSAoZW5jb2RlZDEgPDwgMikgfCAoZW5jb2RlZDIgPj4gNCk7XG4gICAgICAgIHAgKz0gMTtcbiAgICAgICAgYnl0ZXNbcF0gPSAoKGVuY29kZWQyICYgMTUpIDw8IDQpIHwgKGVuY29kZWQzID4+IDIpO1xuICAgICAgICBwICs9IDE7XG4gICAgICAgIGJ5dGVzW3BdID0gKChlbmNvZGVkMyAmIDMpIDw8IDYpIHwgKGVuY29kZWQ0ICYgNjMpO1xuICAgICAgICBwICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn1cblxuY29uc3QgTUFYX0hFQVAgPSAxNiAqIDEwMjQ7XG5jb25zdCBXQVNNX0ZVTkNfSEFTSF9MRU5HVEggPSA0O1xuY29uc3Qgd2FzbU11dGV4ID0gbmV3IE11dGV4KCk7XG5jb25zdCB3YXNtTW9kdWxlQ2FjaGUgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBXQVNNSW50ZXJmYWNlKGJpbmFyeSwgaGFzaExlbmd0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCB3YXNtSW5zdGFuY2UgPSBudWxsO1xuICAgICAgICBsZXQgbWVtb3J5VmlldyA9IG51bGw7XG4gICAgICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIFdlYkFzc2VtYmx5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJBc3NlbWJseSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQhJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd3JpdGVNZW1vcnkgPSAoZGF0YSwgb2Zmc2V0ID0gMCkgPT4ge1xuICAgICAgICAgICAgbWVtb3J5Vmlldy5zZXQoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ2V0TWVtb3J5ID0gKCkgPT4gbWVtb3J5VmlldztcbiAgICAgICAgY29uc3QgZ2V0RXhwb3J0cyA9ICgpID0+IHdhc21JbnN0YW5jZS5leHBvcnRzO1xuICAgICAgICBjb25zdCBzZXRNZW1vcnlTaXplID0gKHRvdGFsU2l6ZSkgPT4ge1xuICAgICAgICAgICAgd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9TZXRNZW1vcnlTaXplKHRvdGFsU2l6ZSk7XG4gICAgICAgICAgICBjb25zdCBhcnJheU9mZnNldCA9IHdhc21JbnN0YW5jZS5leHBvcnRzLkhhc2hfR2V0QnVmZmVyKCk7XG4gICAgICAgICAgICBjb25zdCBtZW1vcnlCdWZmZXIgPSB3YXNtSW5zdGFuY2UuZXhwb3J0cy5tZW1vcnkuYnVmZmVyO1xuICAgICAgICAgICAgbWVtb3J5VmlldyA9IG5ldyBVaW50OEFycmF5KG1lbW9yeUJ1ZmZlciwgYXJyYXlPZmZzZXQsIHRvdGFsU2l6ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdldFN0YXRlU2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcod2FzbUluc3RhbmNlLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcik7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZVNpemUgPSB2aWV3LmdldFVpbnQzMih3YXNtSW5zdGFuY2UuZXhwb3J0cy5TVEFURV9TSVpFLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVNpemU7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvYWRXQVNNUHJvbWlzZSA9IHdhc21NdXRleC5kaXNwYXRjaCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXdhc21Nb2R1bGVDYWNoZS5oYXMoYmluYXJ5Lm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNtID0gZGVjb2RlQmFzZTY0KGJpbmFyeS5kYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gV2ViQXNzZW1ibHkuY29tcGlsZShhc20pO1xuICAgICAgICAgICAgICAgIHdhc21Nb2R1bGVDYWNoZS5zZXQoYmluYXJ5Lm5hbWUsIHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0geWllbGQgd2FzbU1vZHVsZUNhY2hlLmdldChiaW5hcnkubmFtZSk7XG4gICAgICAgICAgICB3YXNtSW5zdGFuY2UgPSB5aWVsZCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2R1bGUsIHtcbiAgICAgICAgICAgIC8vIGVudjoge1xuICAgICAgICAgICAgLy8gICBlbXNjcmlwdGVuX21lbWNweV9iaWc6IChkZXN0LCBzcmMsIG51bSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIGNvbnN0IG1lbW9yeUJ1ZmZlciA9IHdhc21JbnN0YW5jZS5leHBvcnRzLm1lbW9yeS5idWZmZXI7XG4gICAgICAgICAgICAvLyAgICAgY29uc3QgbWVtVmlldyA9IG5ldyBVaW50OEFycmF5KG1lbW9yeUJ1ZmZlciwgMCk7XG4gICAgICAgICAgICAvLyAgICAgbWVtVmlldy5zZXQobWVtVmlldy5zdWJhcnJheShzcmMsIHNyYyArIG51bSksIGRlc3QpO1xuICAgICAgICAgICAgLy8gICB9LFxuICAgICAgICAgICAgLy8gICBwcmludF9tZW1vcnk6IChvZmZzZXQsIGxlbikgPT4ge1xuICAgICAgICAgICAgLy8gICAgIGNvbnN0IG1lbW9yeUJ1ZmZlciA9IHdhc21JbnN0YW5jZS5leHBvcnRzLm1lbW9yeS5idWZmZXI7XG4gICAgICAgICAgICAvLyAgICAgY29uc3QgbWVtVmlldyA9IG5ldyBVaW50OEFycmF5KG1lbW9yeUJ1ZmZlciwgMCk7XG4gICAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2coJ3ByaW50X2ludDMyJywgbWVtVmlldy5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbikpO1xuICAgICAgICAgICAgLy8gICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gd2FzbUluc3RhbmNlLmV4cG9ydHMuX3N0YXJ0KCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3Qgc2V0dXBJbnRlcmZhY2UgPSAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXdhc21JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGxvYWRXQVNNUHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFycmF5T2Zmc2V0ID0gd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9HZXRCdWZmZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IG1lbW9yeUJ1ZmZlciA9IHdhc21JbnN0YW5jZS5leHBvcnRzLm1lbW9yeS5idWZmZXI7XG4gICAgICAgICAgICBtZW1vcnlWaWV3ID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5QnVmZmVyLCBhcnJheU9mZnNldCwgTUFYX0hFQVApO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW5pdCA9IChiaXRzID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9Jbml0KGJpdHMpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGVVSW50OEFycmF5ID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGxldCByZWFkID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChyZWFkIDwgZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IGRhdGEuc3ViYXJyYXkocmVhZCwgcmVhZCArIE1BWF9IRUFQKTtcbiAgICAgICAgICAgICAgICByZWFkICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBtZW1vcnlWaWV3LnNldChjaHVuayk7XG4gICAgICAgICAgICAgICAgd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9VcGRhdGUoY2h1bmsubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VwZGF0ZSgpIGNhbGxlZCBiZWZvcmUgaW5pdCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBVaW50OEJ1ZmZlciA9IGdldFVJbnQ4QnVmZmVyKGRhdGEpO1xuICAgICAgICAgICAgdXBkYXRlVUludDhBcnJheShVaW50OEJ1ZmZlcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRpZ2VzdENoYXJzID0gbmV3IFVpbnQ4QXJyYXkoaGFzaExlbmd0aCAqIDIpO1xuICAgICAgICBjb25zdCBkaWdlc3QgPSAob3V0cHV0VHlwZSwgcGFkZGluZyA9IG51bGwpID0+IHtcbiAgICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZ2VzdCgpIGNhbGxlZCBiZWZvcmUgaW5pdCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9GaW5hbChwYWRkaW5nKTtcbiAgICAgICAgICAgIGlmIChvdXRwdXRUeXBlID09PSAnYmluYXJ5Jykge1xuICAgICAgICAgICAgICAgIC8vIHRoZSBkYXRhIGlzIGNvcGllZCB0byBhbGxvdyBHQyBvZiB0aGUgb3JpZ2luYWwgbWVtb3J5IG9iamVjdFxuICAgICAgICAgICAgICAgIHJldHVybiBtZW1vcnlWaWV3LnNsaWNlKDAsIGhhc2hMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldERpZ2VzdEhleChkaWdlc3RDaGFycywgbWVtb3J5VmlldywgaGFzaExlbmd0aCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNhdmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzYXZlKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGluaXQoKSBhbmQgYmVmb3JlIGRpZ2VzdCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGF0ZU9mZnNldCA9IHdhc21JbnN0YW5jZS5leHBvcnRzLkhhc2hfR2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTGVuZ3RoID0gZ2V0U3RhdGVTaXplKCk7XG4gICAgICAgICAgICBjb25zdCBtZW1vcnlCdWZmZXIgPSB3YXNtSW5zdGFuY2UuZXhwb3J0cy5tZW1vcnkuYnVmZmVyO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxTdGF0ZSA9IG5ldyBVaW50OEFycmF5KG1lbW9yeUJ1ZmZlciwgc3RhdGVPZmZzZXQsIHN0YXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIC8vIHByZWZpeCBpcyA0IGJ5dGVzIGZyb20gU0hBMSBoYXNoIG9mIHRoZSBXQVNNIGJpbmFyeVxuICAgICAgICAgICAgLy8gaXQgaXMgdXNlZCB0byBkZXRlY3QgaW5jb21wYXRpYmxlIGludGVybmFsIHN0YXRlcyBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBoYXNoLXdhc21cbiAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkU3RhdGUgPSBuZXcgVWludDhBcnJheShXQVNNX0ZVTkNfSEFTSF9MRU5HVEggKyBzdGF0ZUxlbmd0aCk7XG4gICAgICAgICAgICB3cml0ZUhleFRvVUludDgocHJlZml4ZWRTdGF0ZSwgYmluYXJ5Lmhhc2gpO1xuICAgICAgICAgICAgcHJlZml4ZWRTdGF0ZS5zZXQoaW50ZXJuYWxTdGF0ZSwgV0FTTV9GVU5DX0hBU0hfTEVOR1RIKTtcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXhlZFN0YXRlO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsb2FkID0gKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIShzdGF0ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2FkKCkgZXhwZWN0cyBhbiBVaW50OEFycmF5IGdlbmVyYXRlZCBieSBzYXZlKCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0YXRlT2Zmc2V0ID0gd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9HZXRTdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVMZW5ndGggPSBnZXRTdGF0ZVNpemUoKTtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJhbGxMZW5ndGggPSBXQVNNX0ZVTkNfSEFTSF9MRU5HVEggKyBzdGF0ZUxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1lbW9yeUJ1ZmZlciA9IHdhc21JbnN0YW5jZS5leHBvcnRzLm1lbW9yeS5idWZmZXI7XG4gICAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoICE9PSBvdmVyYWxsTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgc3RhdGUgbGVuZ3RoIChleHBlY3RlZCAke292ZXJhbGxMZW5ndGh9IGJ5dGVzLCBnb3QgJHtzdGF0ZS5sZW5ndGh9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoZXhTdHJpbmdFcXVhbHNVSW50OChiaW5hcnkuaGFzaCwgc3RhdGUuc3ViYXJyYXkoMCwgV0FTTV9GVU5DX0hBU0hfTEVOR1RIKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgc3RhdGUgd2FzIHdyaXR0ZW4gYnkgYW4gaW5jb21wYXRpYmxlIGhhc2ggaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGludGVybmFsU3RhdGUgPSBzdGF0ZS5zdWJhcnJheShXQVNNX0ZVTkNfSEFTSF9MRU5HVEgpO1xuICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkobWVtb3J5QnVmZmVyLCBzdGF0ZU9mZnNldCwgc3RhdGVMZW5ndGgpLnNldChpbnRlcm5hbFN0YXRlKTtcbiAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXNEYXRhU2hvcnQgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIHdvcnN0IGNhc2UgaXMgNCBieXRlcyAvIGNoYXJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggPCBNQVhfSEVBUCAvIDQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5ieXRlTGVuZ3RoIDwgTUFYX0hFQVA7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBjYW5TaW1wbGlmeSA9IGlzRGF0YVNob3J0O1xuICAgICAgICBzd2l0Y2ggKGJpbmFyeS5uYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdhcmdvbjInOlxuICAgICAgICAgICAgY2FzZSAnc2NyeXB0JzpcbiAgICAgICAgICAgICAgICBjYW5TaW1wbGlmeSA9ICgpID0+IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdibGFrZTJiJzpcbiAgICAgICAgICAgIGNhc2UgJ2JsYWtlMnMnOlxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGEga2V5IGF0IGJsYWtlMiB0aGVuIGNhbm5vdCBzaW1wbGlmeVxuICAgICAgICAgICAgICAgIGNhblNpbXBsaWZ5ID0gKGRhdGEsIGluaXRQYXJhbSkgPT4gaW5pdFBhcmFtIDw9IDUxMiAmJiBpc0RhdGFTaG9ydChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JsYWtlMyc6XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBrZXkgYXQgYmxha2UzIHRoZW4gY2Fubm90IHNpbXBsaWZ5XG4gICAgICAgICAgICAgICAgY2FuU2ltcGxpZnkgPSAoZGF0YSwgaW5pdFBhcmFtKSA9PiBpbml0UGFyYW0gPT09IDAgJiYgaXNEYXRhU2hvcnQoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd4eGhhc2g2NCc6IC8vIGNhbm5vdCBzaW1wbGlmeVxuICAgICAgICAgICAgY2FzZSAneHhoYXNoMyc6XG4gICAgICAgICAgICBjYXNlICd4eGhhc2gxMjgnOlxuICAgICAgICAgICAgICAgIGNhblNpbXBsaWZ5ID0gKCkgPT4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnRoYW5kIGZvciAoaW5pdCArIHVwZGF0ZSArIGRpZ2VzdCkgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgICAgICBjb25zdCBjYWxjdWxhdGUgPSAoZGF0YSwgaW5pdFBhcmFtID0gbnVsbCwgZGlnZXN0UGFyYW0gPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNhblNpbXBsaWZ5KGRhdGEsIGluaXRQYXJhbSkpIHtcbiAgICAgICAgICAgICAgICBpbml0KGluaXRQYXJhbSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkaWdlc3QoJ2hleCcsIGRpZ2VzdFBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGdldFVJbnQ4QnVmZmVyKGRhdGEpO1xuICAgICAgICAgICAgbWVtb3J5Vmlldy5zZXQoYnVmZmVyKTtcbiAgICAgICAgICAgIHdhc21JbnN0YW5jZS5leHBvcnRzLkhhc2hfQ2FsY3VsYXRlKGJ1ZmZlci5sZW5ndGgsIGluaXRQYXJhbSwgZGlnZXN0UGFyYW0pO1xuICAgICAgICAgICAgcmV0dXJuIGdldERpZ2VzdEhleChkaWdlc3RDaGFycywgbWVtb3J5VmlldywgaGFzaExlbmd0aCk7XG4gICAgICAgIH07XG4gICAgICAgIHlpZWxkIHNldHVwSW50ZXJmYWNlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXRNZW1vcnksXG4gICAgICAgICAgICB3cml0ZU1lbW9yeSxcbiAgICAgICAgICAgIGdldEV4cG9ydHMsXG4gICAgICAgICAgICBzZXRNZW1vcnlTaXplLFxuICAgICAgICAgICAgaW5pdCxcbiAgICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgICAgIGRpZ2VzdCxcbiAgICAgICAgICAgIHNhdmUsXG4gICAgICAgICAgICBsb2FkLFxuICAgICAgICAgICAgY2FsY3VsYXRlLFxuICAgICAgICAgICAgaGFzaExlbmd0aCxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkayA9IFwiYWRsZXIzMlwiO1xudmFyIGRhdGEkayA9IFwiQUdGemJRRUFBQUFCREFOZ0FBRi9ZQUFBWUFGL0FBTUhCZ0FCQWdFQUFnVUVBUUVDQWdZT0FuOEJRWUNKQlF0L0FFR0FDQXNIY0FnR2JXVnRiM0o1QWdBT1NHRnphRjlIWlhSQ2RXWm1aWElBQUFsSVlYTm9YMGx1YVhRQUFRdElZWE5vWDFWd1pHRjBaUUFDQ2toaGMyaGZSbWx1WVd3QUF3MUlZWE5vWDBkbGRGTjBZWFJsQUFRT1NHRnphRjlEWVd4amRXeGhkR1VBQlFwVFZFRlVSVjlUU1ZwRkF3RUs2d2tHQlFCQmdBa0xDZ0JCQUVFQk5nS0VDQXZqQ0FFSGYwRUFLQUtFQ0NJQlFmLy9BM0VoQWlBQlFSQjJJUU1DUUFKQUlBQkJBVWNOQUNBQ1FRQXRBSUFKYWlJQlFZK0FmR29nQVNBQlFmRC9BMHNiSWdFZ0Eyb2lCRUVRZENJRlFZQ0FQR29nQlNBRVFmRC9BMHNiSUFGeUlRRU1BUXNDUUFKQUFrQUNRQUpBSUFCQkVFa05BRUdBQ1NFR0lBQkJzQ3RKRFFGQmdBa2hCZ05BUVFBaEJRTkFJQVlnQldvaUFTZ0NBQ0lFUWY4QmNTQUNhaUlDSUFOcUlBSWdCRUVJZGtIL0FYRnFJZ0pxSUFJZ0JFRVFka0gvQVhGcUlnSnFJQUlnQkVFWWRtb2lBbW9nQWlBQlFRUnFLQUlBSWdSQi93RnhhaUlDYWlBQ0lBUkJDSFpCL3dGeGFpSUNhaUFDSUFSQkVIWkIvd0Z4YWlJQ2FpQUNJQVJCR0hacUlnSnFJQUlnQVVFSWFpZ0NBQ0lFUWY4QmNXb2lBbW9nQWlBRVFRaDJRZjhCY1dvaUFtb2dBaUFFUVJCMlFmOEJjV29pQW1vZ0FpQUVRUmgyYWlJRWFpQUVJQUZCREdvb0FnQWlBVUgvQVhGcUlnUnFJQVFnQVVFSWRrSC9BWEZxSWdScUlBUWdBVUVRZGtIL0FYRnFJZ1JxSUFRZ0FVRVlkbW9pQW1vaEF5QUZRUkJxSWdWQnNDdEhEUUFMSUFOQjhmOERjQ0VESUFKQjhmOERjQ0VDSUFaQnNDdHFJUVlnQUVIUVZHb2lBRUd2SzBzTkFBc2dBRVVOQkNBQVFROUxEUUVNQWdzQ1FDQUFSUTBBQWtBQ1FDQUFRUU54SWdVTkFFR0FDU0VCSUFBaEJBd0JDeUFBUVh4eElRUkJBQ0VCQTBBZ0FpQUJRWUFKYWkwQUFHb2lBaUFEYWlFRElBVWdBVUVCYWlJQlJ3MEFDeUFGUVlBSmFpRUJDeUFBUVFSSkRRQURRQ0FDSUFFdEFBQnFJZ1VnQVMwQUFXb2lCaUFCTFFBQ2FpSUFJQUZCQTJvdEFBQnFJZ0lnQUNBR0lBVWdBMnBxYW1vaEF5QUJRUVJxSVFFZ0JFRjhhaUlFRFFBTEN5QUNRWStBZkdvZ0FpQUNRZkQvQTBzYklBTkI4ZjhEY0VFUWRISWhBUXdFQ3dOQUlBWW9BZ0FpQVVIL0FYRWdBbW9pQkNBRGFpQUVJQUZCQ0haQi93RnhhaUlFYWlBRUlBRkJFSFpCL3dGeGFpSUVhaUFFSUFGQkdIWnFJZ1JxSUFRZ0JrRUVhaWdDQUNJQlFmOEJjV29pQkdvZ0JDQUJRUWgyUWY4QmNXb2lCR29nQkNBQlFSQjJRZjhCY1dvaUJHb2dCQ0FCUVJoMmFpSUVhaUFFSUFaQkNHb29BZ0FpQVVIL0FYRnFJZ1JxSUFRZ0FVRUlka0gvQVhGcUlnUnFJQVFnQVVFUWRrSC9BWEZxSWdScUlBUWdBVUVZZG1vaUJHb2dCQ0FHUVF4cUtBSUFJZ0ZCL3dGeGFpSUVhaUFFSUFGQkNIWkIvd0Z4YWlJRWFpQUVJQUZCRUhaQi93RnhhaUlFYWlBRUlBRkJHSFpxSWdKcUlRTWdCa0VRYWlFR0lBQkJjR29pQUVFUFN3MEFDeUFBUlEwQkN5QUFRWDlxSVFjQ1FDQUFRUU54SWdWRkRRQWdBRUY4Y1NFQUlBVWhCQ0FHSVFFRFFDQUNJQUV0QUFCcUlnSWdBMm9oQXlBQlFRRnFJUUVnQkVGL2FpSUVEUUFMSUFZZ0JXb2hCZ3NnQjBFRFNRMEFBMEFnQWlBR0xRQUFhaUlCSUFZdEFBRnFJZ1FnQmkwQUFtb2lCU0FHUVFOcUxRQUFhaUlDSUFVZ0JDQUJJQU5xYW1wcUlRTWdCa0VFYWlFR0lBQkJmR29pQUEwQUN3c2dBMEh4L3dOd0lRTWdBa0h4L3dOd0lRSUxJQUlnQTBFUWRISWhBUXRCQUNBQk5nS0VDQXN4QVFGL1FRQkJBQ2dDaEFnaUFFRVlkQ0FBUVlEK0EzRkJDSFJ5SUFCQkNIWkJnUDREY1NBQVFSaDJjbkkyQW9BSkN3VUFRWVFJQ3pzQVFRQkJBVFlDaEFnZ0FCQUNRUUJCQUNnQ2hBZ2lBRUVZZENBQVFZRCtBM0ZCQ0hSeUlBQkJDSFpCZ1A0RGNTQUFRUmgyY25JMkFvQUpDd3NWQWdCQmdBZ0xCQVFBQUFBQVFZUUlDd1FCQUFBQVwiO1xudmFyIGhhc2gkayA9IFwiMDJkZGJkMTdcIjtcbnZhciB3YXNtSnNvbiRrID0ge1xuXHRuYW1lOiBuYW1lJGssXG5cdGRhdGE6IGRhdGEkayxcblx0aGFzaDogaGFzaCRrXG59O1xuXG5mdW5jdGlvbiBsb2NrZWRDcmVhdGUobXV0ZXgsIGJpbmFyeSwgaGFzaExlbmd0aCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHVubG9jayA9IHlpZWxkIG11dGV4LmxvY2soKTtcbiAgICAgICAgY29uc3Qgd2FzbSA9IHlpZWxkIFdBU01JbnRlcmZhY2UoYmluYXJ5LCBoYXNoTGVuZ3RoKTtcbiAgICAgICAgdW5sb2NrKCk7XG4gICAgICAgIHJldHVybiB3YXNtO1xuICAgIH0pO1xufVxuXG5jb25zdCBtdXRleCRsID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGwgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIEFkbGVyLTMyIGhhc2guIFRoZSByZXN1bHRpbmcgMzItYml0IGhhc2ggaXMgc3RvcmVkIGluXG4gKiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGJpZy1lbmRpYW4pLlxuICpcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGFkbGVyMzIoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JGwsIHdhc21Kc29uJGssIDQpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGwgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRsLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkbC5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEFkbGVyLTMyIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWRsZXIzMigpIHtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRrLCA0KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDQsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiA0LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSRqID0gXCJibGFrZTJiXCI7XG52YXIgZGF0YSRqID0gXCJBR0Z6YlFFQUFBQUJFUVJnQUFGL1lBSi9md0JnQVg4QVlBQUFBd29KQUFFQ0F3RUNBZ0FCQlFRQkFRSUNCZzRDZndGQnNJc0ZDMzhBUVlBSUN3ZHdDQVp0WlcxdmNua0NBQTVJWVhOb1gwZGxkRUoxWm1abGNnQUFDa2hoYzJoZlJtbHVZV3dBQXdsSVlYTm9YMGx1YVhRQUJRdElZWE5vWDFWd1pHRjBaUUFHRFVoaGMyaGZSMlYwVTNSaGRHVUFCdzVJWVhOb1gwTmhiR04xYkdGMFpRQUlDbE5VUVZSRlgxTkpXa1VEQVFyVE9Ba0ZBRUdBQ1F2ckFnSUZmd0YrQWtBZ0FVRUJTQTBBQWtBQ1FBSkFRWUFCUVFBb0F1Q0tBU0lDYXlJRElBRklEUUFnQVNFRURBRUxRUUJCQURZQzRJb0JBa0FnQWtIL0FFb05BQ0FDUWVDSkFXb2hCU0FBSVFSQkFDRUdBMEFnQlNBRUxRQUFPZ0FBSUFSQkFXb2hCQ0FGUVFGcUlRVWdBeUFHUVFGcUlnWkIvd0Z4U2cwQUN3dEJBRUVBS1FQQWlRRWlCMEtBQVh3M0E4Q0pBVUVBUVFBcEE4aUpBU0FIUXY5K1ZxMThOd1BJaVFGQjRJa0JFQUlnQUNBRGFpRUFBa0FnQVNBRGF5SUVRWUVCU0EwQUlBSWdBV29oQlFOQVFRQkJBQ2tEd0lrQklnZENnQUY4TndQQWlRRkJBRUVBS1FQSWlRRWdCMEwvZmxhdGZEY0R5SWtCSUFBUUFpQUFRWUFCYWlFQUlBVkJnSDlxSWdWQmdBSkxEUUFMSUFWQmdIOXFJUVFNQVFzZ0JFRUFUQTBCQzBFQUlRVURRQ0FGUVFBb0F1Q0tBV3BCNElrQmFpQUFJQVZxTFFBQU9nQUFJQVFnQlVFQmFpSUZRZjhCY1VvTkFBc0xRUUJCQUNnQzRJb0JJQVJxTmdMZ2lnRUxDNzh1QVNSK1FRQkJBQ2tEMElrQlFRQXBBN0NKQVNJQlFRQXBBNUNKQVh3Z0FDa0RJQ0lDZkNJRGhVTHIrb2JhdjdYMndSK0ZRaUNKSWdSQ3EvRFQ5Sy91dkxjOGZDSUZJQUdGUWlpSklnWWdBM3dnQUNrREtDSUJmQ0lISUFTRlFqQ0pJZ2dnQlh3aUNTQUdoVUlCaVNJS1FRQXBBOGlKQVVFQUtRT29pUUVpQkVFQUtRT0lpUUY4SUFBcEF4QWlBM3dpQllWQ245ajUyY0tSMm9LYmY0VkNJSWtpQzBLN3pxcW0yTkRyczd0L2ZDSU1JQVNGUWlpSklnMGdCWHdnQUNrREdDSUVmQ0lPZkNBQUtRTlFJZ1Y4SWc5QkFDa0R3SWtCUVFBcEE2Q0pBU0lRUVFBcEE0Q0pBU0lSZkNBQUtRTUFJZ1o4SWhLRlF0R0ZtdS82ejVTSDBRQ0ZRaUNKSWhOQ2lKTHpuZi9NK1lUcUFId2lGQ0FRaFVJb2lTSVZJQko4SUFBcEF3Z2lFSHdpRmlBVGhVSXdpU0lYaFVJZ2lTSVlRUUFwQTlpSkFVRUFLUU80aVFFaUUwRUFLUU9ZaVFGOElBQXBBekFpRW53aUdZVkMrY0w0bTVHanMvRGJBSVZDSUlraUdrTHg3ZlQ0cGFmOXA2Vi9mQ0liSUJPRlFpaUpJaHdnR1h3Z0FDa0RPQ0lUZkNJWklCcUZRakNKSWhvZ0czd2lHM3dpSFNBS2hVSW9pU0llSUE5OElBQXBBMWdpQ253aUR5QVloVUl3aVNJWUlCMThJaDBnRGlBTGhVSXdpU0lPSUF4OEloOGdEWVZDQVlraURDQVdmQ0FBS1FOQUlndDhJZzBnR29WQ0lJa2lGaUFKZkNJYUlBeUZRaWlKSWlBZ0RYd2dBQ2tEU0NJSmZDSWhJQmFGUWpDSkloWWdHeUFjaFVJQmlTSU1JQWQ4SUFBcEEyQWlCM3dpRFNBT2hVSWdpU0lPSUJjZ0ZId2lGSHdpRnlBTWhVSW9pU0liSUExOElBQXBBMmdpREh3aUhDQU9oVUl3aVNJT0lCZDhJaGNnRzRWQ0FZa2lHeUFaSUJRZ0ZZVkNBWWtpRkh3Z0FDa0RjQ0lOZkNJVklBaUZRaUNKSWhrZ0gzd2lIeUFVaFVJb2lTSVVJQlY4SUFBcEEzZ2lDSHdpRlh3Z0RId2lJb1ZDSUlraUkzd2lKQ0FiaFVJb2lTSWJJQ0o4SUJKOElpSWdGeUFZSUJVZ0dZVkNNSWtpRlNBZmZDSVpJQlNGUWdHSkloUWdJWHdnRFh3aUg0VkNJSWtpR0h3aUZ5QVVoVUlvaVNJVUlCOThJQVY4SWg4Z0dJVkNNSWtpR0NBWGZDSVhJQlNGUWdHSkloUjhJQUY4SWlFZ0ZpQWFmQ0lXSUJVZ0hTQWVoVUlCaVNJYUlCeDhJQWw4SWh5RlFpQ0pJaFY4SWgwZ0dvVkNLSWtpR2lBY2ZDQUlmQ0ljSUJXRlFqQ0pJaFdGUWlDSkloNGdHU0FPSUJZZ0lJVkNBWWtpRmlBUGZDQUNmQ0lQaFVJZ2lTSU9mQ0laSUJhRlFpaUpJaFlnRDN3Z0Mzd2lEeUFPaFVJd2lTSU9JQmw4SWhsOElpQWdGSVZDS0lraUZDQWhmQ0FFZkNJaElCNkZRakNKSWg0Z0lId2lJQ0FpSUNPRlFqQ0pJaUlnSkh3aUl5QWJoVUlCaVNJYklCeDhJQXA4SWh3Z0RvVkNJSWtpRGlBWGZDSVhJQnVGUWlpSkloc2dISHdnRTN3aUhDQU9oVUl3aVNJT0lCa2dGb1ZDQVlraUZpQWZmQ0FRZkNJWklDS0ZRaUNKSWg4Z0ZTQWRmQ0lWZkNJZElCYUZRaWlKSWhZZ0dYd2dCM3dpR1NBZmhVSXdpU0lmSUIxOEloMGdGb1ZDQVlraUZpQVZJQnFGUWdHSkloVWdEM3dnQm53aUR5QVloVUlnaVNJWUlDTjhJaG9nRllWQ0tJa2lGU0FQZkNBRGZDSVBmQ0FIZkNJaWhVSWdpU0lqZkNJa0lCYUZRaWlKSWhZZ0lud2dCbndpSWlBamhVSXdpU0lqSUNSOElpUWdGb1ZDQVlraUZpQU9JQmQ4SWc0Z0R5QVloVUl3aVNJUElDQWdGSVZDQVlraUZDQVpmQ0FLZkNJWGhVSWdpU0lZZkNJWklCU0ZRaWlKSWhRZ0Yzd2dDM3dpRjN3Z0JYd2lJQ0FQSUJwOElnOGdIeUFPSUJ1RlFnR0pJZzRnSVh3Z0NId2lHb1ZDSUlraUczd2lIeUFPaFVJb2lTSU9JQnA4SUF4OElob2dHNFZDTUlraUc0VkNJSWtpSVNBZElCNGdEeUFWaFVJQmlTSVBJQng4SUFGOEloV0ZRaUNKSWh4OEloMGdENFZDS0lraUR5QVZmQ0FEZkNJVklCeUZRakNKSWh3Z0hYd2lIWHdpSGlBV2hVSW9pU0lXSUNCOElBMThJaUFnSVlWQ01Ja2lJU0FlZkNJZUlCb2dGeUFZaFVJd2lTSVhJQmw4SWhnZ0ZJVkNBWWtpRkh3Z0NYd2lHU0FjaFVJZ2lTSWFJQ1I4SWh3Z0ZJVkNLSWtpRkNBWmZDQUNmQ0laSUJxRlFqQ0pJaG9nSFNBUGhVSUJpU0lQSUNKOElBUjhJaDBnRjRWQ0lJa2lGeUFiSUI5OElodDhJaDhnRDRWQ0tJa2lEeUFkZkNBU2ZDSWRJQmVGUWpDSkloY2dIM3dpSHlBUGhVSUJpU0lQSUJzZ0RvVkNBWWtpRGlBVmZDQVRmQ0lWSUNPRlFpQ0pJaHNnR0h3aUdDQU9oVUlvaVNJT0lCVjhJQkI4SWhWOElBeDhJaUtGUWlDSklpTjhJaVFnRDRWQ0tJa2lEeUFpZkNBSGZDSWlJQ09GUWpDSklpTWdKSHdpSkNBUGhVSUJpU0lQSUJvZ0hId2lHaUFWSUJ1RlFqQ0pJaFVnSGlBV2hVSUJpU0lXSUIxOElBUjhJaHVGUWlDSkloeDhJaDBnRm9WQ0tJa2lGaUFiZkNBUWZDSWJmQ0FCZkNJZUlCVWdHSHdpRlNBWElCb2dGSVZDQVlraUZDQWdmQ0FUZkNJWWhVSWdpU0lYZkNJYUlCU0ZRaWlKSWhRZ0dId2dDWHdpR0NBWGhVSXdpU0lYaFVJZ2lTSWdJQjhnSVNBVklBNkZRZ0dKSWc0Z0dYd2dDbndpRllWQ0lJa2lHWHdpSHlBT2hVSW9pU0lPSUJWOElBMThJaFVnR1lWQ01Ja2lHU0FmZkNJZmZDSWhJQStGUWlpSklnOGdIbndnQlh3aUhpQWdoVUl3aVNJZ0lDRjhJaUVnR3lBY2hVSXdpU0liSUIxOElod2dGb1ZDQVlraUZpQVlmQ0FEZkNJWUlCbUZRaUNKSWhrZ0pId2lIU0FXaFVJb2lTSVdJQmg4SUJKOEloZ2dHWVZDTUlraUdTQWZJQTZGUWdHSklnNGdJbndnQW53aUh5QWJoVUlnaVNJYklCY2dHbndpRjN3aUdpQU9oVUlvaVNJT0lCOThJQVo4SWg4Z0c0VkNNSWtpR3lBYWZDSWFJQTZGUWdHSklnNGdGU0FYSUJTRlFnR0pJaFI4SUFoOEloVWdJNFZDSUlraUZ5QWNmQ0ljSUJTRlFpaUpJaFFnRlh3Z0Mzd2lGWHdnQlh3aUlvVkNJSWtpSTN3aUpDQU9oVUlvaVNJT0lDSjhJQWg4SWlJZ0dpQWdJQlVnRjRWQ01Ja2lGU0FjZkNJWElCU0ZRZ0dKSWhRZ0dId2dDWHdpR0lWQ0lJa2lISHdpR2lBVWhVSW9pU0lVSUJoOElBWjhJaGdnSElWQ01Ja2lIQ0FhZkNJYUlCU0ZRZ0dKSWhSOElBUjhJaUFnR1NBZGZDSVpJQlVnSVNBUGhVSUJpU0lQSUI5OElBTjhJaDJGUWlDSkloVjhJaDhnRDRWQ0tJa2lEeUFkZkNBQ2ZDSWRJQldGUWpDSkloV0ZRaUNKSWlFZ0Z5QWJJQmtnRm9WQ0FZa2lGaUFlZkNBQmZDSVpoVUlnaVNJYmZDSVhJQmFGUWlpSkloWWdHWHdnRTN3aUdTQWJoVUl3aVNJYklCZDhJaGQ4SWg0Z0ZJVkNLSWtpRkNBZ2ZDQU1mQ0lnSUNHRlFqQ0pJaUVnSG53aUhpQWlJQ09GUWpDSklpSWdKSHdpSXlBT2hVSUJpU0lPSUIxOElCSjhJaDBnRzRWQ0lJa2lHeUFhZkNJYUlBNkZRaWlKSWc0Z0hYd2dDM3dpSFNBYmhVSXdpU0liSUJjZ0ZvVkNBWWtpRmlBWWZDQU5mQ0lYSUNLRlFpQ0pJaGdnRlNBZmZDSVZmQ0lmSUJhRlFpaUpJaFlnRjN3Z0VId2lGeUFZaFVJd2lTSVlJQjk4SWg4Z0ZvVkNBWWtpRmlBVklBK0ZRZ0dKSWc4Z0dYd2dDbndpRlNBY2hVSWdpU0laSUNOOElod2dENFZDS0lraUR5QVZmQ0FIZkNJVmZDQVNmQ0lpaFVJZ2lTSWpmQ0lrSUJhRlFpaUpJaFlnSW53Z0JYd2lJaUFqaFVJd2lTSWpJQ1I4SWlRZ0ZvVkNBWWtpRmlBYklCcDhJaG9nRlNBWmhVSXdpU0lWSUI0Z0ZJVkNBWWtpRkNBWGZDQURmQ0lYaFVJZ2lTSVpmQ0liSUJTRlFpaUpJaFFnRjN3Z0Izd2lGM3dnQW53aUhpQVZJQng4SWhVZ0dDQWFJQTZGUWdHSklnNGdJSHdnQzN3aUdvVkNJSWtpR0h3aUhDQU9oVUlvaVNJT0lCcDhJQVI4SWhvZ0dJVkNNSWtpR0lWQ0lJa2lJQ0FmSUNFZ0ZTQVBoVUlCaVNJUElCMThJQVo4SWhXRlFpQ0pJaDE4SWg4Z0Q0VkNLSWtpRHlBVmZDQUtmQ0lWSUIyRlFqQ0pJaDBnSDN3aUgzd2lJU0FXaFVJb2lTSVdJQjU4SUF4OEloNGdJSVZDTUlraUlDQWhmQ0loSUJvZ0Z5QVpoVUl3aVNJWElCdDhJaGtnRklWQ0FZa2lGSHdnRUh3aUdpQWRoVUlnaVNJYklDUjhJaDBnRklWQ0tJa2lGQ0FhZkNBSmZDSWFJQnVGUWpDSkloc2dIeUFQaFVJQmlTSVBJQ0o4SUJOOEloOGdGNFZDSUlraUZ5QVlJQng4SWhoOElod2dENFZDS0lraUR5QWZmQ0FCZkNJZklCZUZRakNKSWhjZ0hId2lIQ0FQaFVJQmlTSVBJQmdnRG9WQ0FZa2lEaUFWZkNBSWZDSVZJQ09GUWlDSkloZ2dHWHdpR1NBT2hVSW9pU0lPSUJWOElBMThJaFY4SUExOElpS0ZRaUNKSWlOOElpUWdENFZDS0lraUR5QWlmQ0FNZkNJaUlDT0ZRakNKSWlNZ0pId2lKQ0FQaFVJQmlTSVBJQnNnSFh3aUd5QVZJQmlGUWpDSkloVWdJU0FXaFVJQmlTSVdJQjk4SUJCOEloaUZRaUNKSWgxOEloOGdGb1ZDS0lraUZpQVlmQ0FJZkNJWWZDQVNmQ0loSUJVZ0dYd2lGU0FYSUJzZ0ZJVkNBWWtpRkNBZWZDQUhmQ0laaFVJZ2lTSVhmQ0liSUJTRlFpaUpJaFFnR1h3Z0FYd2lHU0FYaFVJd2lTSVhoVUlnaVNJZUlCd2dJQ0FWSUE2RlFnR0pJZzRnR253Z0Fud2lGWVZDSUlraUdud2lIQ0FPaFVJb2lTSU9JQlY4SUFWOEloVWdHb1ZDTUlraUdpQWNmQ0ljZkNJZ0lBK0ZRaWlKSWc4Z0lYd2dCSHdpSVNBZWhVSXdpU0llSUNCOElpQWdHQ0FkaFVJd2lTSVlJQjk4SWgwZ0ZvVkNBWWtpRmlBWmZDQUdmQ0laSUJxRlFpQ0pJaG9nSkh3aUh5QVdoVUlvaVNJV0lCbDhJQk44SWhrZ0dvVkNNSWtpR2lBY0lBNkZRZ0dKSWc0Z0lud2dDWHdpSENBWWhVSWdpU0lZSUJjZ0czd2lGM3dpR3lBT2hVSW9pU0lPSUJ4OElBTjhJaHdnR0lWQ01Ja2lHQ0FiZkNJYklBNkZRZ0dKSWc0Z0ZTQVhJQlNGUWdHSkloUjhJQXQ4SWhVZ0k0VkNJSWtpRnlBZGZDSWRJQlNGUWlpSkloUWdGWHdnQ253aUZYd2dCSHdpSW9WQ0lJa2lJM3dpSkNBT2hVSW9pU0lPSUNKOElBbDhJaUlnR3lBZUlCVWdGNFZDTUlraUZTQWRmQ0lYSUJTRlFnR0pJaFFnR1h3Z0RId2lHWVZDSUlraUhYd2lHeUFVaFVJb2lTSVVJQmw4SUFwOEloa2dIWVZDTUlraUhTQWJmQ0liSUJTRlFnR0pJaFI4SUFOOEloNGdHaUFmZkNJYUlCVWdJQ0FQaFVJQmlTSVBJQng4SUFkOEloeUZRaUNKSWhWOEloOGdENFZDS0lraUR5QWNmQ0FRZkNJY0lCV0ZRakNKSWhXRlFpQ0pJaUFnRnlBWUlCb2dGb1ZDQVlraUZpQWhmQ0FUZkNJYWhVSWdpU0lZZkNJWElCYUZRaWlKSWhZZ0dud2dEWHdpR2lBWWhVSXdpU0lZSUJkOEloZDhJaUVnRklWQ0tJa2lGQ0FlZkNBRmZDSWVJQ0NGUWpDSklpQWdJWHdpSVNBaUlDT0ZRakNKSWlJZ0pId2lJeUFPaFVJQmlTSU9JQng4SUF0OElod2dHSVZDSUlraUdDQWJmQ0liSUE2RlFpaUpJZzRnSEh3Z0Vud2lIQ0FZaFVJd2lTSVlJQmNnRm9WQ0FZa2lGaUFaZkNBQmZDSVhJQ0tGUWlDSkloa2dGU0FmZkNJVmZDSWZJQmFGUWlpSkloWWdGM3dnQm53aUZ5QVpoVUl3aVNJWklCOThJaDhnRm9WQ0FZa2lGaUFWSUErRlFnR0pJZzhnR253Z0NId2lGU0FkaFVJZ2lTSWFJQ044SWgwZ0Q0VkNLSWtpRHlBVmZDQUNmQ0lWZkNBTmZDSWloVUlnaVNJamZDSWtJQmFGUWlpSkloWWdJbndnQ1h3aUlpQWpoVUl3aVNJaklDUjhJaVFnRm9WQ0FZa2lGaUFZSUJ0OEloZ2dGU0FhaFVJd2lTSVZJQ0VnRklWQ0FZa2lGQ0FYZkNBU2ZDSVhoVUlnaVNJYWZDSWJJQlNGUWlpSkloUWdGM3dnQ0h3aUYzd2dCM3dpSVNBVklCMThJaFVnR1NBWUlBNkZRZ0dKSWc0Z0hud2dCbndpR0lWQ0lJa2lHWHdpSFNBT2hVSW9pU0lPSUJoOElBdDhJaGdnR1lWQ01Ja2lHWVZDSUlraUhpQWZJQ0FnRlNBUGhVSUJpU0lQSUJ4OElBcDhJaFdGUWlDSkloeDhJaDhnRDRWQ0tJa2lEeUFWZkNBRWZDSVZJQnlGUWpDSklod2dIM3dpSDN3aUlDQVdoVUlvaVNJV0lDRjhJQU44SWlFZ0hvVkNNSWtpSGlBZ2ZDSWdJQmdnRnlBYWhVSXdpU0lYSUJ0OElob2dGSVZDQVlraUZId2dCWHdpR0NBY2hVSWdpU0liSUNSOElod2dGSVZDS0lraUZDQVlmQ0FCZkNJWUlCdUZRakNKSWhzZ0h5QVBoVUlCaVNJUElDSjhJQXg4SWg4Z0Y0VkNJSWtpRnlBWklCMThJaGw4SWgwZ0Q0VkNLSWtpRHlBZmZDQVRmQ0lmSUJlRlFqQ0pJaGNnSFh3aUhTQVBoVUlCaVNJUElCa2dEb1ZDQVlraURpQVZmQ0FRZkNJVklDT0ZRaUNKSWhrZ0dud2lHaUFPaFVJb2lTSU9JQlY4SUFKOEloVjhJQk44SWlLRlFpQ0pJaU44SWlRZ0Q0VkNLSWtpRHlBaWZDQVNmQ0lpSUNPRlFqQ0pJaU1nSkh3aUpDQVBoVUlCaVNJUElCc2dISHdpR3lBVklCbUZRakNKSWhVZ0lDQVdoVUlCaVNJV0lCOThJQXQ4SWhtRlFpQ0pJaHg4SWg4Z0ZvVkNLSWtpRmlBWmZDQUNmQ0laZkNBSmZDSWdJQlVnR253aUZTQVhJQnNnRklWQ0FZa2lGQ0FoZkNBRmZDSWFoVUlnaVNJWGZDSWJJQlNGUWlpSkloUWdHbndnQTN3aUdpQVhoVUl3aVNJWGhVSWdpU0loSUIwZ0hpQVZJQTZGUWdHSklnNGdHSHdnRUh3aUZZVkNJSWtpR0h3aUhTQU9oVUlvaVNJT0lCVjhJQUY4SWhVZ0dJVkNNSWtpR0NBZGZDSWRmQ0llSUErRlFpaUpJZzhnSUh3Z0RYd2lJQ0FoaFVJd2lTSWhJQjU4SWg0Z0dTQWNoVUl3aVNJWklCOThJaHdnRm9WQ0FZa2lGaUFhZkNBSWZDSWFJQmlGUWlDSkloZ2dKSHdpSHlBV2hVSW9pU0lXSUJwOElBcDhJaG9nR0lWQ01Ja2lHQ0FkSUE2RlFnR0pJZzRnSW53Z0JId2lIU0FaaFVJZ2lTSVpJQmNnRzN3aUYzd2lHeUFPaFVJb2lTSU9JQjE4SUFkOEloMGdHWVZDTUlraUdTQWJmQ0liSUE2RlFnR0pJZzRnRlNBWElCU0ZRZ0dKSWhSOElBeDhJaFVnSTRWQ0lJa2lGeUFjZkNJY0lCU0ZRaWlKSWhRZ0ZYd2dCbndpRlh3Z0Vud2lJb1ZDSUlraUkzd2lKQ0FPaFVJb2lTSU9JQ0o4SUJOOElpSWdHeUFoSUJVZ0Y0VkNNSWtpRlNBY2ZDSVhJQlNGUWdHSkloUWdHbndnQm53aUdvVkNJSWtpSEh3aUd5QVVoVUlvaVNJVUlCcDhJQkI4SWhvZ0hJVkNNSWtpSENBYmZDSWJJQlNGUWdHSkloUjhJQTE4SWlFZ0dDQWZmQ0lZSUJVZ0hpQVBoVUlCaVNJUElCMThJQUo4SWgyRlFpQ0pJaFY4SWg0Z0Q0VkNLSWtpRHlBZGZDQUJmQ0lkSUJXRlFqQ0pJaFdGUWlDSkloOGdGeUFaSUJnZ0ZvVkNBWWtpRmlBZ2ZDQURmQ0lZaFVJZ2lTSVpmQ0lYSUJhRlFpaUpJaFlnR0h3Z0JId2lHQ0FaaFVJd2lTSVpJQmQ4SWhkOElpQWdGSVZDS0lraUZDQWhmQ0FJZkNJaElCK0ZRakNKSWg4Z0lId2lJQ0FpSUNPRlFqQ0pJaUlnSkh3aUl5QU9oVUlCaVNJT0lCMThJQWQ4SWgwZ0dZVkNJSWtpR1NBYmZDSWJJQTZGUWlpSklnNGdIWHdnREh3aUhTQVpoVUl3aVNJWklCY2dGb1ZDQVlraUZpQWFmQ0FMZkNJWElDS0ZRaUNKSWhvZ0ZTQWVmQ0lWZkNJZUlCYUZRaWlKSWhZZ0Yzd2dDWHdpRnlBYWhVSXdpU0lhSUI1OEloNGdGb1ZDQVlraUZpQVZJQStGUWdHSklnOGdHSHdnQlh3aUZTQWNoVUlnaVNJWUlDTjhJaHdnRDRWQ0tJa2lEeUFWZkNBS2ZDSVZmQ0FDZkNJQ2hVSWdpU0lpZkNJaklCYUZRaWlKSWhZZ0Fud2dDM3dpQWlBaWhVSXdpU0lMSUNOOElpSWdGb1ZDQVlraUZpQVpJQnQ4SWhrZ0ZTQVloVUl3aVNJVklDQWdGSVZDQVlraUZDQVhmQ0FOZkNJTmhVSWdpU0lYZkNJWUlCU0ZRaWlKSWhRZ0RYd2dCWHdpQlh3Z0VId2lFQ0FWSUJ4OElnMGdHaUFaSUE2RlFnR0pJZzRnSVh3Z0RId2lESVZDSUlraUZYd2lHU0FPaFVJb2lTSU9JQXg4SUJKOEloSWdGWVZDTUlraURJVkNJSWtpRlNBZUlCOGdEU0FQaFVJQmlTSU5JQjE4SUFsOElnbUZRaUNKSWc5OElob2dEWVZDS0lraURTQUpmQ0FJZkNJSklBK0ZRakNKSWdnZ0dud2lEM3dpR2lBV2hVSW9pU0lXSUJCOElBZDhJaEFnRVlVZ0RDQVpmQ0lISUE2RlFnR0pJZ3dnQ1h3Z0Nud2lDaUFMaFVJZ2lTSUxJQVVnRjRWQ01Ja2lCU0FZZkNJSmZDSU9JQXlGUWlpSklnd2dDbndnRTN3aUV5QUxoVUl3aVNJS0lBNThJZ3VGTndPQWlRRkJBQ0FESUFZZ0R5QU5oVUlCaVNJTklBSjhmQ0lDSUFXRlFpQ0pJZ1VnQjN3aUJpQU5oVUlvaVNJSElBSjhmQ0lDUVFBcEE0aUpBWVVnQkNBQklCSWdDU0FVaFVJQmlTSURmSHdpQVNBSWhVSWdpU0lTSUNKOElna2dBNFZDS0lraUF5QUJmSHdpQVNBU2hVSXdpU0lFSUFsOEloS0ZOd09JaVFGQkFDQVRRUUFwQTVDSkFZVWdFQ0FWaFVJd2lTSVFJQnA4SWhPRk53T1FpUUZCQUNBQlFRQXBBNWlKQVlVZ0FpQUZoVUl3aVNJQ0lBWjhJZ0dGTndPWWlRRkJBQ0FTSUFPRlFnR0pRUUFwQTZDSkFZVWdBb1UzQTZDSkFVRUFJQk1nRm9WQ0FZbEJBQ2tEcUlrQmhTQUtoVGNEcUlrQlFRQWdBU0FIaFVJQmlVRUFLUU93aVFHRklBU0ZOd093aVFGQkFDQUxJQXlGUWdHSlFRQXBBN2lKQVlVZ0VJVTNBN2lKQVF2ZEFnVUJmd0YrQVg4QmZnSi9Jd0JCd0FCcklnQWtBQUpBUVFBcEE5Q0pBVUlBVWcwQVFRQkJBQ2tEd0lrQklnRkJBQ2dDNElvQklnS3NmQ0lETndQQWlRRkJBRUVBS1FQSWlRRWdBeUFCVksxOE53UElpUUVDUUVFQUxRRG9pZ0ZGRFFCQkFFSi9Od1BZaVFFTFFRQkNmemNEMElrQkFrQWdBa0gvQUVvTkFFRUFJUVFEUUNBQ0lBUnFRZUNKQVdwQkFEb0FBQ0FFUVFGcUlnUkJnQUZCQUNnQzRJb0JJZ0pyU0EwQUN3dEI0SWtCRUFJZ0FFRUFLUU9BaVFFM0F3QWdBRUVBS1FPSWlRRTNBd2dnQUVFQUtRT1FpUUUzQXhBZ0FFRUFLUU9ZaVFFM0F4Z2dBRUVBS1FPZ2lRRTNBeUFnQUVFQUtRT29pUUUzQXlnZ0FFRUFLUU93aVFFM0F6QWdBRUVBS1FPNGlRRTNBemhCQUNnQzVJb0JJZ1ZCQVVnTkFFRUFJUVJCQUNFQ0EwQWdCRUdBQ1dvZ0FDQUVhaTBBQURvQUFDQUVRUUZxSVFRZ0JTQUNRUUZxSWdKQi93RnhTZzBBQ3dzZ0FFSEFBR29rQUF2OUF3TUJmd0YrQVg4akFFR0FBV3NpQWlRQVFRQkJnUUk3QWZLS0FVRUFJQUU2QVBHS0FVRUFJQUE2QVBDS0FVR1FmaUVBQTBBZ0FFR0Fpd0ZxUWdBM0FBQWdBRUg0aWdGcVFnQTNBQUFnQUVId2lnRnFRZ0EzQUFBZ0FFRVlhaUlBRFFBTFFRQWhBRUVBUVFBcEEvQ0tBU0lEUW9pUzg1My96UG1FNmdDRk53T0FpUUZCQUVFQUtRUDRpZ0ZDdTg2cXB0alE2N083ZjRVM0E0aUpBVUVBUVFBcEE0Q0xBVUtyOE5QMHIrNjh0enlGTndPUWlRRkJBRUVBS1FPSWl3RkM4ZTMwK0tXbi9hZWxmNFUzQTVpSkFVRUFRUUFwQTVDTEFVTFJoWnJ2K3MrVWg5RUFoVGNEb0lrQlFRQkJBQ2tEbUlzQlFwL1krZG5Da2RxQ20zK0ZOd09vaVFGQkFFRUFLUU9naXdGQzYvcUcycisxOXNFZmhUY0RzSWtCUVFCQkFDa0RxSXNCUXZuQytKdVJvN1B3MndDRk53TzRpUUZCQUNBRHAwSC9BWEUyQXVTS0FRSkFJQUZCQVVnTkFDQUNRZ0EzQTNnZ0FrSUFOd053SUFKQ0FEY0RhQ0FDUWdBM0EyQWdBa0lBTndOWUlBSkNBRGNEVUNBQ1FnQTNBMGdnQWtJQU53TkFJQUpDQURjRE9DQUNRZ0EzQXpBZ0FrSUFOd01vSUFKQ0FEY0RJQ0FDUWdBM0F4Z2dBa0lBTndNUUlBSkNBRGNEQ0NBQ1FnQTNBd0JCQUNFRUEwQWdBaUFBYWlBQVFZQUphaTBBQURvQUFDQUFRUUZxSVFBZ0JFRUJhaUlFUWY4QmNTQUJTQTBBQ3lBQ1FZQUJFQUVMSUFKQmdBRnFKQUFMRWdBZ0FFRURka0gvUDNFZ0FFRVFkaEFFQ3drQVFZQUpJQUFRQVFzR0FFR0FpUUVMR3dBZ0FVRURka0gvUDNFZ0FVRVFkaEFFUVlBSklBQVFBUkFEQ3dzTEFRQkJnQWdMQlBBQUFBQT1cIjtcbnZhciBoYXNoJGogPSBcIjY1NmUwZjY2XCI7XG52YXIgd2FzbUpzb24kaiA9IHtcblx0bmFtZTogbmFtZSRqLFxuXHRkYXRhOiBkYXRhJGosXG5cdGhhc2g6IGhhc2gkalxufTtcblxuY29uc3QgbXV0ZXgkayA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSRrID0gbnVsbDtcbmZ1bmN0aW9uIHZhbGlkYXRlQml0cyQ0KGJpdHMpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYml0cykgfHwgYml0cyA8IDggfHwgYml0cyA+IDUxMiB8fCBiaXRzICUgOCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHZhcmlhbnQhIFZhbGlkIHZhbHVlczogOCwgMTYsIC4uLiwgNTEyJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0SW5pdFBhcmFtJDEob3V0cHV0Qml0cywga2V5Qml0cykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgcmV0dXJuIG91dHB1dEJpdHMgfCAoa2V5Qml0cyA8PCAxNik7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgQkxBS0UyYiBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHBhcmFtIGJpdHMgTnVtYmVyIG9mIG91dHB1dCBiaXRzLCB3aGljaCBoYXMgdG8gYmUgYSBudW1iZXJcbiAqICAgICAgICAgICAgIGRpdmlzaWJsZSBieSA4LCBiZXR3ZWVuIDggYW5kIDUxMi4gRGVmYXVsdHMgdG8gNTEyLlxuICogQHBhcmFtIGtleSBPcHRpb25hbCBrZXkgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpLiBNYXhpbXVtIGxlbmd0aCBpcyA2NCBieXRlcy5cbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmxha2UyYihkYXRhLCBiaXRzID0gNTEyLCBrZXkgPSBudWxsKSB7XG4gICAgaWYgKHZhbGlkYXRlQml0cyQ0KGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZUJpdHMkNChiaXRzKSk7XG4gICAgfVxuICAgIGxldCBrZXlCdWZmZXIgPSBudWxsO1xuICAgIGxldCBpbml0UGFyYW0gPSBiaXRzO1xuICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAga2V5QnVmZmVyID0gZ2V0VUludDhCdWZmZXIoa2V5KTtcbiAgICAgICAgaWYgKGtleUJ1ZmZlci5sZW5ndGggPiA2NCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignTWF4IGtleSBsZW5ndGggaXMgNjQgYnl0ZXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdFBhcmFtID0gZ2V0SW5pdFBhcmFtJDEoYml0cywga2V5QnVmZmVyLmxlbmd0aCk7XG4gICAgfVxuICAgIGNvbnN0IGhhc2hMZW5ndGggPSBiaXRzIC8gODtcbiAgICBpZiAod2FzbUNhY2hlJGsgPT09IG51bGwgfHwgd2FzbUNhY2hlJGsuaGFzaExlbmd0aCAhPT0gaGFzaExlbmd0aCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JGssIHdhc21Kc29uJGosIGhhc2hMZW5ndGgpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGsgPSB3YXNtO1xuICAgICAgICAgICAgaWYgKGluaXRQYXJhbSA+IDUxMikge1xuICAgICAgICAgICAgICAgIHdhc21DYWNoZSRrLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGsuY2FsY3VsYXRlKGRhdGEsIGluaXRQYXJhbSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAoaW5pdFBhcmFtID4gNTEyKSB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkay53cml0ZU1lbW9yeShrZXlCdWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkay5jYWxjdWxhdGUoZGF0YSwgaW5pdFBhcmFtKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQkxBS0UyYiBoYXNoIGluc3RhbmNlXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMsIHdoaWNoIGhhcyB0byBiZSBhIG51bWJlclxuICogICAgICAgICAgICAgZGl2aXNpYmxlIGJ5IDgsIGJldHdlZW4gOCBhbmQgNTEyLiBEZWZhdWx0cyB0byA1MTIuXG4gKiBAcGFyYW0ga2V5IE9wdGlvbmFsIGtleSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSkuIE1heGltdW0gbGVuZ3RoIGlzIDY0IGJ5dGVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCTEFLRTJiKGJpdHMgPSA1MTIsIGtleSA9IG51bGwpIHtcbiAgICBpZiAodmFsaWRhdGVCaXRzJDQoYml0cykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlQml0cyQ0KGJpdHMpKTtcbiAgICB9XG4gICAgbGV0IGtleUJ1ZmZlciA9IG51bGw7XG4gICAgbGV0IGluaXRQYXJhbSA9IGJpdHM7XG4gICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICBrZXlCdWZmZXIgPSBnZXRVSW50OEJ1ZmZlcihrZXkpO1xuICAgICAgICBpZiAoa2V5QnVmZmVyLmxlbmd0aCA+IDY0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdNYXgga2V5IGxlbmd0aCBpcyA2NCBieXRlcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0UGFyYW0gPSBnZXRJbml0UGFyYW0kMShiaXRzLCBrZXlCdWZmZXIubGVuZ3RoKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0U2l6ZSA9IGJpdHMgLyA4O1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJGosIG91dHB1dFNpemUpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgaWYgKGluaXRQYXJhbSA+IDUxMikge1xuICAgICAgICAgICAgd2FzbS53cml0ZU1lbW9yeShrZXlCdWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHdhc20uaW5pdChpbml0UGFyYW0pO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiBpbml0UGFyYW0gPiA1MTJcbiAgICAgICAgICAgICAgICA/ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2FzbS53cml0ZU1lbW9yeShrZXlCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB3YXNtLmluaXQoaW5pdFBhcmFtKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdhc20uaW5pdChpbml0UGFyYW0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogMTI4LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogb3V0cHV0U2l6ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkaSA9IFwiYXJnb24yXCI7XG52YXIgZGF0YSRpID0gXCJBR0Z6YlFFQUFBQUJLUVZnQVg4QmYyQUFBWDlnRUg5L2YzOS9mMzkvZjM5L2YzOS9mMzhBWUFSL2YzOS9BR0FDZjM4QUF3WUZBQUVDQXdRRkJnRUJBb0NBQWdZSUFYOEJRWkNvQkFzSFFRUUdiV1Z0YjNKNUFnQVNTR0Z6YUY5VFpYUk5aVzF2Y25sVGFYcGxBQUFPU0dGemFGOUhaWFJDZFdabVpYSUFBUTVJWVhOb1gwTmhiR04xYkdGMFpRQUVDdmt5QlZnQkFuOUJBQ0VCQWtCQkFDZ0NpQWdpQWlBQVJnMEFBa0FnQUNBQ2F5SUFRUkIySUFCQmdJQjhjU0FBU1dvaUFFQUFRWDlIRFFCQi93SEFEd3RCQUNFQlFRQkJBQ2tEaUFnZ0FFRVFkSzE4TndPSUNBc2dBY0FMY0FFQ2Z3SkFRUUFvQW9BSUlnQU5BRUVBUHdCQkVIUWlBRFlDZ0FoQkFDZ0NpQWdpQVVHQWdDQkdEUUFDUUVHQWdDQWdBV3NpQUVFUWRpQUFRWUNBZkhFZ0FFbHFJZ0JBQUVGL1J3MEFRUUFQQzBFQVFRQXBBNGdJSUFCQkVIU3RmRGNEaUFoQkFDZ0NnQWdoQUFzZ0FBdmNEZ0VDZmlBQUlBUXBBd0FpRUNBQUtRTUFJaEY4SUJGQ0FZWkMvdi8vL3grRElCQkMvLy8vL3crRGZud2lFRGNEQUNBTUlCQWdEQ2tEQUlWQ0lJa2lFRGNEQUNBSUlCQWdDQ2tEQUNJUmZDQVJRZ0dHUXY3Ly8vOGZneUFRUXYvLy8vOFBnMzU4SWhBM0F3QWdCQ0FRSUFRcEF3Q0ZRaWlKSWhBM0F3QWdBQ0FRSUFBcEF3QWlFWHdnRUVMLy8vLy9ENE1nRVVJQmhrTCsvLy8vSDROK2ZDSVFOd01BSUF3Z0VDQU1LUU1BaFVJd2lTSVFOd01BSUFnZ0VDQUlLUU1BSWhGOElCQkMvLy8vL3crRElCRkNBWVpDL3YvLy94K0RmbndpRURjREFDQUVJQkFnQkNrREFJVkNBWWszQXdBZ0FTQUZLUU1BSWhBZ0FTa0RBQ0lSZkNBUlFnR0dRdjcvLy84Zmd5QVFRdi8vLy84UGczNThJaEEzQXdBZ0RTQVFJQTBwQXdDRlFpQ0pJaEEzQXdBZ0NTQVFJQWtwQXdBaUVYd2dFVUlCaGtMKy8vLy9INE1nRUVMLy8vLy9ENE4rZkNJUU53TUFJQVVnRUNBRktRTUFoVUlvaVNJUU53TUFJQUVnRUNBQktRTUFJaEY4SUJCQy8vLy8vdytESUJGQ0FZWkMvdi8vL3grRGZud2lFRGNEQUNBTklCQWdEU2tEQUlWQ01Ja2lFRGNEQUNBSklCQWdDU2tEQUNJUmZDQVFRdi8vLy84UGd5QVJRZ0dHUXY3Ly8vOGZnMzU4SWhBM0F3QWdCU0FRSUFVcEF3Q0ZRZ0dKTndNQUlBSWdCaWtEQUNJUUlBSXBBd0FpRVh3Z0VVSUJoa0wrLy8vL0g0TWdFRUwvLy8vL0Q0TitmQ0lRTndNQUlBNGdFQ0FPS1FNQWhVSWdpU0lRTndNQUlBb2dFQ0FLS1FNQUloRjhJQkZDQVlaQy92Ly8veCtESUJCQy8vLy8vdytEZm53aUVEY0RBQ0FHSUJBZ0Jpa0RBSVZDS0lraUVEY0RBQ0FDSUJBZ0Fpa0RBQ0lSZkNBUVF2Ly8vLzhQZ3lBUlFnR0dRdjcvLy84ZmczNThJaEEzQXdBZ0RpQVFJQTRwQXdDRlFqQ0pJaEEzQXdBZ0NpQVFJQW9wQXdBaUVYd2dFRUwvLy8vL0Q0TWdFVUlCaGtMKy8vLy9INE4rZkNJUU53TUFJQVlnRUNBR0tRTUFoVUlCaVRjREFDQURJQWNwQXdBaUVDQURLUU1BSWhGOElCRkNBWVpDL3YvLy94K0RJQkJDLy8vLy93K0RmbndpRURjREFDQVBJQkFnRHlrREFJVkNJSWtpRURjREFDQUxJQkFnQ3lrREFDSVJmQ0FSUWdHR1F2Ny8vLzhmZ3lBUVF2Ly8vLzhQZzM1OEloQTNBd0FnQnlBUUlBY3BBd0NGUWlpSkloQTNBd0FnQXlBUUlBTXBBd0FpRVh3Z0VFTC8vLy8vRDRNZ0VVSUJoa0wrLy8vL0g0TitmQ0lRTndNQUlBOGdFQ0FQS1FNQWhVSXdpU0lRTndNQUlBc2dFQ0FMS1FNQUloRjhJQkJDLy8vLy93K0RJQkZDQVlaQy92Ly8veCtEZm53aUVEY0RBQ0FISUJBZ0J5a0RBSVZDQVlrM0F3QWdBQ0FGS1FNQUloQWdBQ2tEQUNJUmZDQVJRZ0dHUXY3Ly8vOGZneUFRUXYvLy8vOFBnMzU4SWhBM0F3QWdEeUFRSUE4cEF3Q0ZRaUNKSWhBM0F3QWdDaUFRSUFvcEF3QWlFWHdnRVVJQmhrTCsvLy8vSDRNZ0VFTC8vLy8vRDROK2ZDSVFOd01BSUFVZ0VDQUZLUU1BaFVJb2lTSVFOd01BSUFBZ0VDQUFLUU1BSWhGOElCQkMvLy8vL3crRElCRkNBWVpDL3YvLy94K0RmbndpRURjREFDQVBJQkFnRHlrREFJVkNNSWtpRURjREFDQUtJQkFnQ2lrREFDSVJmQ0FRUXYvLy8vOFBneUFSUWdHR1F2Ny8vLzhmZzM1OEloQTNBd0FnQlNBUUlBVXBBd0NGUWdHSk53TUFJQUVnQmlrREFDSVFJQUVwQXdBaUVYd2dFVUlCaGtMKy8vLy9INE1nRUVMLy8vLy9ENE4rZkNJUU53TUFJQXdnRUNBTUtRTUFoVUlnaVNJUU53TUFJQXNnRUNBTEtRTUFJaEY4SUJGQ0FZWkMvdi8vL3grRElCQkMvLy8vL3crRGZud2lFRGNEQUNBR0lCQWdCaWtEQUlWQ0tJa2lFRGNEQUNBQklCQWdBU2tEQUNJUmZDQVFRdi8vLy84UGd5QVJRZ0dHUXY3Ly8vOGZnMzU4SWhBM0F3QWdEQ0FRSUF3cEF3Q0ZRakNKSWhBM0F3QWdDeUFRSUFzcEF3QWlFWHdnRUVMLy8vLy9ENE1nRVVJQmhrTCsvLy8vSDROK2ZDSVFOd01BSUFZZ0VDQUdLUU1BaFVJQmlUY0RBQ0FDSUFjcEF3QWlFQ0FDS1FNQUloRjhJQkZDQVlaQy92Ly8veCtESUJCQy8vLy8vdytEZm53aUVEY0RBQ0FOSUJBZ0RTa0RBSVZDSUlraUVEY0RBQ0FJSUJBZ0NDa0RBQ0lSZkNBUlFnR0dRdjcvLy84Zmd5QVFRdi8vLy84UGczNThJaEEzQXdBZ0J5QVFJQWNwQXdDRlFpaUpJaEEzQXdBZ0FpQVFJQUlwQXdBaUVYd2dFRUwvLy8vL0Q0TWdFVUlCaGtMKy8vLy9INE4rZkNJUU53TUFJQTBnRUNBTktRTUFoVUl3aVNJUU53TUFJQWdnRUNBSUtRTUFJaEY4SUJCQy8vLy8vdytESUJGQ0FZWkMvdi8vL3grRGZud2lFRGNEQUNBSElCQWdCeWtEQUlWQ0FZazNBd0FnQXlBRUtRTUFJaEFnQXlrREFDSVJmQ0FSUWdHR1F2Ny8vLzhmZ3lBUVF2Ly8vLzhQZzM1OEloQTNBd0FnRGlBUUlBNHBBd0NGUWlDSkloQTNBd0FnQ1NBUUlBa3BBd0FpRVh3Z0VVSUJoa0wrLy8vL0g0TWdFRUwvLy8vL0Q0TitmQ0lRTndNQUlBUWdFQ0FFS1FNQWhVSW9pU0lRTndNQUlBTWdFQ0FES1FNQUloRjhJQkJDLy8vLy93K0RJQkZDQVlaQy92Ly8veCtEZm53aUVEY0RBQ0FPSUJBZ0Rpa0RBSVZDTUlraUVEY0RBQ0FKSUJBZ0NTa0RBQ0lSZkNBUVF2Ly8vLzhQZ3lBUlFnR0dRdjcvLy84ZmczNThJaEEzQXdBZ0JDQVFJQVFwQXdDRlFnR0pOd01BQzk4YUFRTi9RUUFoQkVFQUlBSXBBd0FnQVNrREFJVTNBNUFJUVFBZ0Fpa0RDQ0FCS1FNSWhUY0RtQWhCQUNBQ0tRTVFJQUVwQXhDRk53T2dDRUVBSUFJcEF4Z2dBU2tER0lVM0E2Z0lRUUFnQWlrRElDQUJLUU1naFRjRHNBaEJBQ0FDS1FNb0lBRXBBeWlGTndPNENFRUFJQUlwQXpBZ0FTa0RNSVUzQThBSVFRQWdBaWtET0NBQktRTTRoVGNEeUFoQkFDQUNLUU5BSUFFcEEwQ0ZOd1BRQ0VFQUlBSXBBMGdnQVNrRFNJVTNBOWdJUVFBZ0Fpa0RVQ0FCS1FOUWhUY0Q0QWhCQUNBQ0tRTllJQUVwQTFpRk53UG9DRUVBSUFJcEEyQWdBU2tEWUlVM0EvQUlRUUFnQWlrRGFDQUJLUU5vaFRjRCtBaEJBQ0FDS1FOd0lBRXBBM0NGTndPQUNVRUFJQUlwQTNnZ0FTa0RlSVUzQTRnSlFRQWdBaWtEZ0FFZ0FTa0RnQUdGTndPUUNVRUFJQUlwQTRnQklBRXBBNGdCaFRjRG1BbEJBQ0FDS1FPUUFTQUJLUU9RQVlVM0E2QUpRUUFnQWlrRG1BRWdBU2tEbUFHRk53T29DVUVBSUFJcEE2QUJJQUVwQTZBQmhUY0RzQWxCQUNBQ0tRT29BU0FCS1FPb0FZVTNBN2dKUVFBZ0Fpa0RzQUVnQVNrRHNBR0ZOd1BBQ1VFQUlBSXBBN2dCSUFFcEE3Z0JoVGNEeUFsQkFDQUNLUVBBQVNBQktRUEFBWVUzQTlBSlFRQWdBaWtEeUFFZ0FTa0R5QUdGTndQWUNVRUFJQUlwQTlBQklBRXBBOUFCaFRjRDRBbEJBQ0FDS1FQWUFTQUJLUVBZQVlVM0ErZ0pRUUFnQWlrRDRBRWdBU2tENEFHRk53UHdDVUVBSUFJcEErZ0JJQUVwQStnQmhUY0QrQWxCQUNBQ0tRUHdBU0FCS1FQd0FZVTNBNEFLUVFBZ0Fpa0QrQUVnQVNrRCtBR0ZOd09JQ2tFQUlBSXBBNEFDSUFFcEE0QUNoVGNEa0FwQkFDQUNLUU9JQWlBQktRT0lBb1UzQTVnS1FRQWdBaWtEa0FJZ0FTa0RrQUtGTndPZ0NrRUFJQUlwQTVnQ0lBRXBBNWdDaFRjRHFBcEJBQ0FDS1FPZ0FpQUJLUU9nQW9VM0E3QUtRUUFnQWlrRHFBSWdBU2tEcUFLRk53TzRDa0VBSUFJcEE3QUNJQUVwQTdBQ2hUY0R3QXBCQUNBQ0tRTzRBaUFCS1FPNEFvVTNBOGdLUVFBZ0Fpa0R3QUlnQVNrRHdBS0ZOd1BRQ2tFQUlBSXBBOGdDSUFFcEE4Z0NoVGNEMkFwQkFDQUNLUVBRQWlBQktRUFFBb1UzQStBS1FRQWdBaWtEMkFJZ0FTa0QyQUtGTndQb0NrRUFJQUlwQStBQ0lBRXBBK0FDaFRjRDhBcEJBQ0FDS1FQb0FpQUJLUVBvQW9VM0EvZ0tRUUFnQWlrRDhBSWdBU2tEOEFLRk53T0FDMEVBSUFJcEEvZ0NJQUVwQS9nQ2hUY0RpQXRCQUNBQ0tRT0FBeUFCS1FPQUE0VTNBNUFMUVFBZ0Fpa0RpQU1nQVNrRGlBT0ZOd09ZQzBFQUlBSXBBNUFESUFFcEE1QURoVGNEb0F0QkFDQUNLUU9ZQXlBQktRT1lBNFUzQTZnTFFRQWdBaWtEb0FNZ0FTa0RvQU9GTndPd0MwRUFJQUlwQTZnRElBRXBBNmdEaFRjRHVBdEJBQ0FDS1FPd0F5QUJLUU93QTRVM0E4QUxRUUFnQWlrRHVBTWdBU2tEdUFPRk53UElDMEVBSUFJcEE4QURJQUVwQThBRGhUY0QwQXRCQUNBQ0tRUElBeUFCS1FQSUE0VTNBOWdMUVFBZ0Fpa0QwQU1nQVNrRDBBT0ZOd1BnQzBFQUlBSXBBOWdESUFFcEE5Z0RoVGNENkF0QkFDQUNLUVBnQXlBQktRUGdBNFUzQS9BTFFRQWdBaWtENkFNZ0FTa0Q2QU9GTndQNEMwRUFJQUlwQS9BRElBRXBBL0FEaFRjRGdBeEJBQ0FDS1FQNEF5QUJLUVA0QTRVM0E0Z01RUUFnQWlrRGdBUWdBU2tEZ0FTRk53T1FERUVBSUFJcEE0Z0VJQUVwQTRnRWhUY0RtQXhCQUNBQ0tRT1FCQ0FCS1FPUUJJVTNBNkFNUVFBZ0Fpa0RtQVFnQVNrRG1BU0ZOd09vREVFQUlBSXBBNkFFSUFFcEE2QUVoVGNEc0F4QkFDQUNLUU9vQkNBQktRT29CSVUzQTdnTVFRQWdBaWtEc0FRZ0FTa0RzQVNGTndQQURFRUFJQUlwQTdnRUlBRXBBN2dFaFRjRHlBeEJBQ0FDS1FQQUJDQUJLUVBBQklVM0E5QU1RUUFnQWlrRHlBUWdBU2tEeUFTRk53UFlERUVBSUFJcEE5QUVJQUVwQTlBRWhUY0Q0QXhCQUNBQ0tRUFlCQ0FCS1FQWUJJVTNBK2dNUVFBZ0Fpa0Q0QVFnQVNrRDRBU0ZOd1B3REVFQUlBSXBBK2dFSUFFcEErZ0VoVGNEK0F4QkFDQUNLUVB3QkNBQktRUHdCSVUzQTRBTlFRQWdBaWtEK0FRZ0FTa0QrQVNGTndPSURVRUFJQUlwQTRBRklBRXBBNEFGaFRjRGtBMUJBQ0FDS1FPSUJTQUJLUU9JQllVM0E1Z05RUUFnQWlrRGtBVWdBU2tEa0FXRk53T2dEVUVBSUFJcEE1Z0ZJQUVwQTVnRmhUY0RxQTFCQUNBQ0tRT2dCU0FCS1FPZ0JZVTNBN0FOUVFBZ0Fpa0RxQVVnQVNrRHFBV0ZOd080RFVFQUlBSXBBN0FGSUFFcEE3QUZoVGNEd0ExQkFDQUNLUU80QlNBQktRTzRCWVUzQThnTlFRQWdBaWtEd0FVZ0FTa0R3QVdGTndQUURVRUFJQUlwQThnRklBRXBBOGdGaFRjRDJBMUJBQ0FDS1FQUUJTQUJLUVBRQllVM0ErQU5RUUFnQWlrRDJBVWdBU2tEMkFXRk53UG9EVUVBSUFJcEErQUZJQUVwQStBRmhUY0Q4QTFCQUNBQ0tRUG9CU0FCS1FQb0JZVTNBL2dOUVFBZ0Fpa0Q4QVVnQVNrRDhBV0ZOd09BRGtFQUlBSXBBL2dGSUFFcEEvZ0ZoVGNEaUE1QkFDQUNLUU9BQmlBQktRT0FCb1UzQTVBT1FRQWdBaWtEaUFZZ0FTa0RpQWFGTndPWURrRUFJQUlwQTVBR0lBRXBBNUFHaFRjRG9BNUJBQ0FDS1FPWUJpQUJLUU9ZQm9VM0E2Z09RUUFnQWlrRG9BWWdBU2tEb0FhRk53T3dEa0VBSUFJcEE2Z0dJQUVwQTZnR2hUY0R1QTVCQUNBQ0tRT3dCaUFCS1FPd0JvVTNBOEFPUVFBZ0Fpa0R1QVlnQVNrRHVBYUZOd1BJRGtFQUlBSXBBOEFHSUFFcEE4QUdoVGNEMEE1QkFDQUNLUVBJQmlBQktRUElCb1UzQTlnT1FRQWdBaWtEMEFZZ0FTa0QwQWFGTndQZ0RrRUFJQUlwQTlnR0lBRXBBOWdHaFRjRDZBNUJBQ0FDS1FQZ0JpQUJLUVBnQm9VM0EvQU9RUUFnQWlrRDZBWWdBU2tENkFhRk53UDREa0VBSUFJcEEvQUdJQUVwQS9BR2hUY0RnQTlCQUNBQ0tRUDRCaUFCS1FQNEJvVTNBNGdQUVFBZ0Fpa0RnQWNnQVNrRGdBZUZOd09RRDBFQUlBSXBBNGdISUFFcEE0Z0hoVGNEbUE5QkFDQUNLUU9RQnlBQktRT1FCNFUzQTZBUFFRQWdBaWtEbUFjZ0FTa0RtQWVGTndPb0QwRUFJQUlwQTZBSElBRXBBNkFIaFRjRHNBOUJBQ0FDS1FPb0J5QUJLUU9vQjRVM0E3Z1BRUUFnQWlrRHNBY2dBU2tEc0FlRk53UEFEMEVBSUFJcEE3Z0hJQUVwQTdnSGhUY0R5QTlCQUNBQ0tRUEFCeUFCS1FQQUI0VTNBOUFQUVFBZ0Fpa0R5QWNnQVNrRHlBZUZOd1BZRDBFQUlBSXBBOUFISUFFcEE5QUhoVGNENEE5QkFDQUNLUVBZQnlBQktRUFlCNFUzQStnUFFRQWdBaWtENEFjZ0FTa0Q0QWVGTndQd0QwRUFJQUlwQStnSElBRXBBK2dIaFRjRCtBOUJBQ0FDS1FQd0J5QUJLUVB3QjRVM0E0QVFRUUFnQWlrRCtBY2dBU2tEK0FlRk53T0lFRUdRQ0VHWUNFR2dDRUdvQ0VHd0NFRzRDRUhBQ0VISUNFSFFDRUhZQ0VIZ0NFSG9DRUh3Q0VINENFR0FDVUdJQ1JBQ1FaQUpRWmdKUWFBSlFhZ0pRYkFKUWJnSlFjQUpRY2dKUWRBSlFkZ0pRZUFKUWVnSlFmQUpRZmdKUVlBS1FZZ0tFQUpCa0FwQm1BcEJvQXBCcUFwQnNBcEJ1QXBCd0FwQnlBcEIwQXBCMkFwQjRBcEI2QXBCOEFwQitBcEJnQXRCaUFzUUFrR1FDMEdZQzBHZ0MwR29DMEd3QzBHNEMwSEFDMEhJQzBIUUMwSFlDMEhnQzBIb0MwSHdDMEg0QzBHQURFR0lEQkFDUVpBTVFaZ01RYUFNUWFnTVFiQU1RYmdNUWNBTVFjZ01RZEFNUWRnTVFlQU1RZWdNUWZBTVFmZ01RWUFOUVlnTkVBSkJrQTFCbUExQm9BMUJxQTFCc0ExQnVBMUJ3QTFCeUExQjBBMUIyQTFCNEExQjZBMUI4QTFCK0ExQmdBNUJpQTRRQWtHUURrR1lEa0dnRGtHb0RrR3dEa0c0RGtIQURrSElEa0hRRGtIWURrSGdEa0hvRGtId0RrSDREa0dBRDBHSUR4QUNRWkFQUVpnUFFhQVBRYWdQUWJBUFFiZ1BRY0FQUWNnUFFkQVBRZGdQUWVBUFFlZ1BRZkFQUWZnUFFZQVFRWWdRRUFKQmtBaEJtQWhCa0FsQm1BbEJrQXBCbUFwQmtBdEJtQXRCa0F4Qm1BeEJrQTFCbUExQmtBNUJtQTVCa0E5Qm1BOFFBa0dnQ0VHb0NFR2dDVUdvQ1VHZ0NrR29Da0dnQzBHb0MwR2dERUdvREVHZ0RVR29EVUdnRGtHb0RrR2dEMEdvRHhBQ1FiQUlRYmdJUWJBSlFiZ0pRYkFLUWJnS1FiQUxRYmdMUWJBTVFiZ01RYkFOUWJnTlFiQU9RYmdPUWJBUFFiZ1BFQUpCd0FoQnlBaEJ3QWxCeUFsQndBcEJ5QXBCd0F0QnlBdEJ3QXhCeUF4QndBMUJ5QTFCd0E1QnlBNUJ3QTlCeUE4UUFrSFFDRUhZQ0VIUUNVSFlDVUhRQ2tIWUNrSFFDMEhZQzBIUURFSFlERUhRRFVIWURVSFFEa0hZRGtIUUQwSFlEeEFDUWVBSVFlZ0lRZUFKUWVnSlFlQUtRZWdLUWVBTFFlZ0xRZUFNUWVnTVFlQU5RZWdOUWVBT1FlZ09RZUFQUWVnUEVBSkI4QWhCK0FoQjhBbEIrQWxCOEFwQitBcEI4QXRCK0F0QjhBeEIrQXhCOEExQitBMUI4QTVCK0E1QjhBOUIrQThRQWtHQUNVR0lDVUdBQ2tHSUNrR0FDMEdJQzBHQURFR0lERUdBRFVHSURVR0FEa0dJRGtHQUQwR0lEMEdBRUVHSUVCQUNBa0FDUUNBRFJRMEFBMEFnQUNBRWFpSURJQUlnQkdvaUJTa0RBQ0FCSUFScUlnWXBBd0NGSUFSQmtBaHFLUU1BaFNBREtRTUFoVGNEQUNBRFFRaHFJZ01nQlVFSWFpa0RBQ0FHUVFocUtRTUFoU0FFUVpnSWFpa0RBSVVnQXlrREFJVTNBd0FnQkVFUWFpSUVRWUFJUncwQURBSUxDMEVBSVFRRFFDQUFJQVJxSWdNZ0FpQUVhaUlGS1FNQUlBRWdCR29pQmlrREFJVWdCRUdRQ0dvcEF3Q0ZOd01BSUFOQkNHb2dCVUVJYWlrREFDQUdRUWhxS1FNQWhTQUVRWmdJYWlrREFJVTNBd0FnQkVFUWFpSUVRWUFJUncwQUN3c0w3UWNNQlg4QmZnUi9BbjRDZndGK0EzOEJmZ1ovQVg0RGZ3RitBa0JCQUNnQ2dBZ2lBaUFCUVFwMGFpSURLQUlJSUFGSERRQWdBeWdDRENFRUlBTW9BZ0FoQlVFQUlBTW9BaFFpQnEwM0E3Z1FRUUFnQkswaUJ6Y0RzQkJCQUNBRklBRWdCVUVDZEc0aUNHd2lDVUVDZEswM0E2Z1FBa0FDUUFKQUFrQWdCRVVOQUVGL0lRb2dCVVVOQVNBSVFRTnNJUXNnQ0VFQ2RDSUVyU0VNSUFXdElRMGdCa0VDUmlFT0lBWkJmMnBCQWtraEQwSUFJUkFEUUVFQUlCQTNBNUFRSUE0Z0VGQWlFWEVoRWlBUXB5RVRRZ0FoRkVFQUlRRURRRUVBSUJRM0E2QVFJQVpCQVVZZ0VpQVVRZ0pVY1hJaEZTQVFJQlNFVUNJRElBOXhJUlpCZnlBQlFRRnFRUU54SUFoc1FYOXFJQkViSVJjZ0FTQVRjaUVZSUFFZ0NHd2hHU0FEUVFGMElScENBQ0ViQTBCQkFFSUFOd1BBRUVFQUlCczNBNWdRSUJvaEFRSkFJQlpGRFFCQkFFSUJOd1BBRUVHUUdFR1FFRUdRSUVFQUVBTkJrQmhCa0JoQmtDQkJBQkFEUVFJaEFRc0NRQ0FCSUFoUERRQWdCQ0FicHlJY2JDQVphaUFCYWlFREEwQWdBMEVBSUFSQkFDQVVVQ0lkR3lBQkcycEJmMm9oSGdKQUFrQWdGUTBBUVFBb0FvQUlJZ0lnSGtFS2RDSWVhaUVLREFFTEFrQWdBVUgvQUhFaUFnMEFRUUJCQUNrRHdCQkNBWHczQThBUVFaQVlRWkFRUVpBZ1FRQVFBMEdRR0VHUUdFR1FJRUVBRUFNTElCNUJDblFoSGlBQ1FRTjBRWkFZYWlFS1FRQW9Bb0FJSVFJTElBSWdBMEVLZEdvZ0FpQWVhaUFDSUFvcEF3QWlIMElnaUtjZ0JYQWdIQ0FZR3lJZUlBUnNJQUVnQVVFQUlCc2dIcTFSSWg0Yklnb2dIUnNnR1dvZ0NpQUxhaUFSR3lBQlJTQWVjbXNpSFNBWGFxMGdIMEwvLy8vL0Q0TWlIeUFmZmtJZ2lDQWRyWDVDSUloOUlBeUNwMnBCQ25ScVFRRVFBeUFEUVFGcUlRTWdDQ0FCUVFGcUlnRkhEUUFMQ3lBYlFnRjhJaHNnRFZJTkFBc2dGRUlCZkNJVXB5RUJJQlJDQkZJTkFBc2dFRUlCZkNJUUlBZFNEUUFMQ3lBSlFReDBRWUI0YWlFWlFRQW9Bb0FJSVFJZ0JVRi9haUlLUlEwQ0RBRUxRUUJDQXpjRG9CQkJBQ0FFUVg5cXJUY0RrQkJCZ0hnaEdRc2dBaUFaYWlFZElBaEJESFFoQ0VFQUlSNERRQ0FJSUI1QkFXb2lIbXhCZ0hocUlRUkJBQ0VCQTBBZ0hTQUJhaUlESUFNcEF3QWdBaUFFSUFGcWFpa0RBSVUzQXdBZ0EwRUlhaUlESUFNcEF3QWdBaUFFSUFGQkNISnFhaWtEQUlVM0F3QWdBVUVJYWlFRElBRkJFR29oQVNBRFFmZ0hTUTBBQ3lBZUlBcEhEUUFMQ3lBQ0lCbHFJUjFCZUNFQkEwQWdBaUFCYWlJRFFRaHFJQjBnQVdvaUJFRUlhaWtEQURjREFDQURRUkJxSUFSQkVHb3BBd0EzQXdBZ0EwRVlhaUFFUVJocUtRTUFOd01BSUFOQklHb2dCRUVnYWlrREFEY0RBQ0FCUVNCcUlnRkIrQWRKRFFBTEN3cz1cIjtcbnZhciBoYXNoJGkgPSBcIjdhYjE0YzkxXCI7XG52YXIgd2FzbUpzb24kaSA9IHtcblx0bmFtZTogbmFtZSRpLFxuXHRkYXRhOiBkYXRhJGksXG5cdGhhc2g6IGhhc2gkaVxufTtcblxuZnVuY3Rpb24gZW5jb2RlUmVzdWx0KHNhbHQsIG9wdGlvbnMsIHJlcykge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBbXG4gICAgICAgIGBtPSR7b3B0aW9ucy5tZW1vcnlTaXplfWAsXG4gICAgICAgIGB0PSR7b3B0aW9ucy5pdGVyYXRpb25zfWAsXG4gICAgICAgIGBwPSR7b3B0aW9ucy5wYXJhbGxlbGlzbX1gLFxuICAgIF0uam9pbignLCcpO1xuICAgIHJldHVybiBgJGFyZ29uMiR7b3B0aW9ucy5oYXNoVHlwZX0kdj0xOSQke3BhcmFtZXRlcnN9JCR7ZW5jb2RlQmFzZTY0KHNhbHQsIGZhbHNlKX0kJHtlbmNvZGVCYXNlNjQocmVzLCBmYWxzZSl9YDtcbn1cbmNvbnN0IHVpbnQzMlZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDQpKTtcbmZ1bmN0aW9uIGludDMyTEUoeCkge1xuICAgIHVpbnQzMlZpZXcuc2V0SW50MzIoMCwgeCwgdHJ1ZSk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHVpbnQzMlZpZXcuYnVmZmVyKTtcbn1cbmZ1bmN0aW9uIGhhc2hGdW5jKGJsYWtlNTEyLCBidWYsIGxlbikge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmIChsZW4gPD0gNjQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsYWtlID0geWllbGQgY3JlYXRlQkxBS0UyYihsZW4gKiA4KTtcbiAgICAgICAgICAgIGJsYWtlLnVwZGF0ZShpbnQzMkxFKGxlbikpO1xuICAgICAgICAgICAgYmxha2UudXBkYXRlKGJ1Zik7XG4gICAgICAgICAgICByZXR1cm4gYmxha2UuZGlnZXN0KCdiaW5hcnknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByID0gTWF0aC5jZWlsKGxlbiAvIDMyKSAtIDI7XG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgICAgIGJsYWtlNTEyLmluaXQoKTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKGludDMyTEUobGVuKSk7XG4gICAgICAgIGJsYWtlNTEyLnVwZGF0ZShidWYpO1xuICAgICAgICBsZXQgdnAgPSBibGFrZTUxMi5kaWdlc3QoJ2JpbmFyeScpO1xuICAgICAgICByZXQuc2V0KHZwLnN1YmFycmF5KDAsIDMyKSwgMCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcjsgaSsrKSB7XG4gICAgICAgICAgICBibGFrZTUxMi5pbml0KCk7XG4gICAgICAgICAgICBibGFrZTUxMi51cGRhdGUodnApO1xuICAgICAgICAgICAgdnAgPSBibGFrZTUxMi5kaWdlc3QoJ2JpbmFyeScpO1xuICAgICAgICAgICAgcmV0LnNldCh2cC5zdWJhcnJheSgwLCAzMiksIGkgKiAzMik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydGlhbEJ5dGVzTmVlZGVkID0gbGVuIC0gMzIgKiByO1xuICAgICAgICBsZXQgYmxha2VTbWFsbDtcbiAgICAgICAgaWYgKHBhcnRpYWxCeXRlc05lZWRlZCA9PT0gNjQpIHtcbiAgICAgICAgICAgIGJsYWtlU21hbGwgPSBibGFrZTUxMjtcbiAgICAgICAgICAgIGJsYWtlU21hbGwuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYmxha2VTbWFsbCA9IHlpZWxkIGNyZWF0ZUJMQUtFMmIocGFydGlhbEJ5dGVzTmVlZGVkICogOCk7XG4gICAgICAgIH1cbiAgICAgICAgYmxha2VTbWFsbC51cGRhdGUodnApO1xuICAgICAgICB2cCA9IGJsYWtlU21hbGwuZGlnZXN0KCdiaW5hcnknKTtcbiAgICAgICAgcmV0LnNldCh2cC5zdWJhcnJheSgwLCBwYXJ0aWFsQnl0ZXNOZWVkZWQpLCByICogMzIpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZ2V0SGFzaFR5cGUodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxufVxuZnVuY3Rpb24gYXJnb24ySW50ZXJuYWwob3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB7IHBhcmFsbGVsaXNtLCBpdGVyYXRpb25zLCBoYXNoTGVuZ3RoIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IGdldFVJbnQ4QnVmZmVyKG9wdGlvbnMucGFzc3dvcmQpO1xuICAgICAgICBjb25zdCBzYWx0ID0gZ2V0VUludDhCdWZmZXIob3B0aW9ucy5zYWx0KTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IDB4MTM7XG4gICAgICAgIGNvbnN0IGhhc2hUeXBlID0gZ2V0SGFzaFR5cGUob3B0aW9ucy5oYXNoVHlwZSk7XG4gICAgICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSB9ID0gb3B0aW9uczsgLy8gaW4gS0JcbiAgICAgICAgY29uc3Qgc2VjcmV0ID0gZ2V0VUludDhCdWZmZXIoKF9hID0gb3B0aW9ucy5zZWNyZXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnKTtcbiAgICAgICAgY29uc3QgW2FyZ29uMkludGVyZmFjZSwgYmxha2U1MTJdID0geWllbGQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgV0FTTUludGVyZmFjZSh3YXNtSnNvbiRpLCAxMDI0KSxcbiAgICAgICAgICAgIGNyZWF0ZUJMQUtFMmIoNTEyKSxcbiAgICAgICAgXSk7XG4gICAgICAgIC8vIGxhc3QgYmxvY2sgaXMgZm9yIHN0b3JpbmcgdGhlIGluaXQgdmVjdG9yXG4gICAgICAgIGFyZ29uMkludGVyZmFjZS5zZXRNZW1vcnlTaXplKG1lbW9yeVNpemUgKiAxMDI0ICsgMTAyNCk7XG4gICAgICAgIGNvbnN0IGluaXRWZWN0b3IgPSBuZXcgVWludDhBcnJheSgyNCk7XG4gICAgICAgIGNvbnN0IGluaXRWZWN0b3JWaWV3ID0gbmV3IERhdGFWaWV3KGluaXRWZWN0b3IuYnVmZmVyKTtcbiAgICAgICAgaW5pdFZlY3RvclZpZXcuc2V0SW50MzIoMCwgcGFyYWxsZWxpc20sIHRydWUpO1xuICAgICAgICBpbml0VmVjdG9yVmlldy5zZXRJbnQzMig0LCBoYXNoTGVuZ3RoLCB0cnVlKTtcbiAgICAgICAgaW5pdFZlY3RvclZpZXcuc2V0SW50MzIoOCwgbWVtb3J5U2l6ZSwgdHJ1ZSk7XG4gICAgICAgIGluaXRWZWN0b3JWaWV3LnNldEludDMyKDEyLCBpdGVyYXRpb25zLCB0cnVlKTtcbiAgICAgICAgaW5pdFZlY3RvclZpZXcuc2V0SW50MzIoMTYsIHZlcnNpb24sIHRydWUpO1xuICAgICAgICBpbml0VmVjdG9yVmlldy5zZXRJbnQzMigyMCwgaGFzaFR5cGUsIHRydWUpO1xuICAgICAgICBhcmdvbjJJbnRlcmZhY2Uud3JpdGVNZW1vcnkoaW5pdFZlY3RvciwgbWVtb3J5U2l6ZSAqIDEwMjQpO1xuICAgICAgICBibGFrZTUxMi5pbml0KCk7XG4gICAgICAgIGJsYWtlNTEyLnVwZGF0ZShpbml0VmVjdG9yKTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKGludDMyTEUocGFzc3dvcmQubGVuZ3RoKSk7XG4gICAgICAgIGJsYWtlNTEyLnVwZGF0ZShwYXNzd29yZCk7XG4gICAgICAgIGJsYWtlNTEyLnVwZGF0ZShpbnQzMkxFKHNhbHQubGVuZ3RoKSk7XG4gICAgICAgIGJsYWtlNTEyLnVwZGF0ZShzYWx0KTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKGludDMyTEUoc2VjcmV0Lmxlbmd0aCkpO1xuICAgICAgICBibGFrZTUxMi51cGRhdGUoc2VjcmV0KTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKGludDMyTEUoMCkpOyAvLyBhc3NvY2lhdGVkRGF0YSBsZW5ndGggKyBhc3NvY2lhdGVkRGF0YVxuICAgICAgICBjb25zdCBzZWdtZW50cyA9IE1hdGguZmxvb3IobWVtb3J5U2l6ZSAvIChwYXJhbGxlbGlzbSAqIDQpKTsgLy8gbGVuZ3RoIG9mIGVhY2ggbGFuZVxuICAgICAgICBjb25zdCBsYW5lcyA9IHNlZ21lbnRzICogNDtcbiAgICAgICAgY29uc3QgcGFyYW0gPSBuZXcgVWludDhBcnJheSg3Mik7XG4gICAgICAgIGNvbnN0IEgwID0gYmxha2U1MTIuZGlnZXN0KCdiaW5hcnknKTtcbiAgICAgICAgcGFyYW0uc2V0KEgwKTtcbiAgICAgICAgZm9yIChsZXQgbGFuZSA9IDA7IGxhbmUgPCBwYXJhbGxlbGlzbTsgbGFuZSsrKSB7XG4gICAgICAgICAgICBwYXJhbS5zZXQoaW50MzJMRSgwKSwgNjQpO1xuICAgICAgICAgICAgcGFyYW0uc2V0KGludDMyTEUobGFuZSksIDY4KTtcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IGxhbmUgKiBsYW5lcztcbiAgICAgICAgICAgIGxldCBjaHVuayA9IHlpZWxkIGhhc2hGdW5jKGJsYWtlNTEyLCBwYXJhbSwgMTAyNCk7XG4gICAgICAgICAgICBhcmdvbjJJbnRlcmZhY2Uud3JpdGVNZW1vcnkoY2h1bmssIHBvc2l0aW9uICogMTAyNCk7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgICAgICAgICAgcGFyYW0uc2V0KGludDMyTEUoMSksIDY0KTtcbiAgICAgICAgICAgIGNodW5rID0geWllbGQgaGFzaEZ1bmMoYmxha2U1MTIsIHBhcmFtLCAxMDI0KTtcbiAgICAgICAgICAgIGFyZ29uMkludGVyZmFjZS53cml0ZU1lbW9yeShjaHVuaywgcG9zaXRpb24gKiAxMDI0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBDID0gbmV3IFVpbnQ4QXJyYXkoMTAyNCk7XG4gICAgICAgIHdyaXRlSGV4VG9VSW50OChDLCBhcmdvbjJJbnRlcmZhY2UuY2FsY3VsYXRlKG5ldyBVaW50OEFycmF5KFtdKSwgbWVtb3J5U2l6ZSkpO1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBoYXNoRnVuYyhibGFrZTUxMiwgQywgaGFzaExlbmd0aCk7XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFR5cGUgPT09ICdoZXgnKSB7XG4gICAgICAgICAgICBjb25zdCBkaWdlc3RDaGFycyA9IG5ldyBVaW50OEFycmF5KGhhc2hMZW5ndGggKiAyKTtcbiAgICAgICAgICAgIHJldHVybiBnZXREaWdlc3RIZXgoZGlnZXN0Q2hhcnMsIHJlcywgaGFzaExlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0VHlwZSA9PT0gJ2VuY29kZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHNhbHQsIG9wdGlvbnMsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGJpbmFyeSBmb3JtYXRcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbn1cbmNvbnN0IHZhbGlkYXRlT3B0aW9ucyQzID0gKG9wdGlvbnMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3B0aW9ucyBwYXJhbWV0ZXIuIEl0IHJlcXVpcmVzIGFuIG9iamVjdC4nKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLnBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFzc3dvcmQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgb3B0aW9ucy5wYXNzd29yZCA9IGdldFVJbnQ4QnVmZmVyKG9wdGlvbnMucGFzc3dvcmQpO1xuICAgIGlmIChvcHRpb25zLnBhc3N3b3JkLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXNzd29yZCBtdXN0IGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuc2FsdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhbHQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgb3B0aW9ucy5zYWx0ID0gZ2V0VUludDhCdWZmZXIob3B0aW9ucy5zYWx0KTtcbiAgICBpZiAob3B0aW9ucy5zYWx0Lmxlbmd0aCA8IDgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTYWx0IHNob3VsZCBiZSBhdCBsZWFzdCA4IGJ5dGVzIGxvbmcnKTtcbiAgICB9XG4gICAgb3B0aW9ucy5zZWNyZXQgPSBnZXRVSW50OEJ1ZmZlcigoX2EgPSBvcHRpb25zLnNlY3JldCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLml0ZXJhdGlvbnMpIHx8IG9wdGlvbnMuaXRlcmF0aW9ucyA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdGVyYXRpb25zIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5wYXJhbGxlbGlzbSkgfHwgb3B0aW9ucy5wYXJhbGxlbGlzbSA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbGxlbGlzbSBzaG91bGQgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMuaGFzaExlbmd0aCkgfHwgb3B0aW9ucy5oYXNoTGVuZ3RoIDwgNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhc2ggbGVuZ3RoIHNob3VsZCBiZSBhdCBsZWFzdCA0IGJ5dGVzLicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5tZW1vcnlTaXplKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBzaXplIHNob3VsZCBiZSBzcGVjaWZpZWQuJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm1lbW9yeVNpemUgPCA4ICogb3B0aW9ucy5wYXJhbGxlbGlzbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCA4ICogcGFyYWxsZWxpc20uJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm91dHB1dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLm91dHB1dFR5cGUgPSAnaGV4JztcbiAgICB9XG4gICAgaWYgKCFbJ2hleCcsICdiaW5hcnknLCAnZW5jb2RlZCddLmluY2x1ZGVzKG9wdGlvbnMub3V0cHV0VHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnN1cHBvcnRlZCBvdXRwdXQgdHlwZSAke29wdGlvbnMub3V0cHV0VHlwZX0uIFZhbGlkIHZhbHVlczogWydoZXgnLCAnYmluYXJ5JywgJ2VuY29kZWQnXWApO1xuICAgIH1cbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgaGFzaCB1c2luZyB0aGUgYXJnb24yaSBwYXNzd29yZC1oYXNoaW5nIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoXG4gKi9cbmZ1bmN0aW9uIGFyZ29uMmkob3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhbGlkYXRlT3B0aW9ucyQzKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gYXJnb24ySW50ZXJuYWwoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBoYXNoVHlwZTogJ2knIH0pKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBoYXNoIHVzaW5nIHRoZSBhcmdvbjJpZCBwYXNzd29yZC1oYXNoaW5nIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoXG4gKi9cbmZ1bmN0aW9uIGFyZ29uMmlkKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB2YWxpZGF0ZU9wdGlvbnMkMyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGFyZ29uMkludGVybmFsKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgaGFzaFR5cGU6ICdpZCcgfSkpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIGhhc2ggdXNpbmcgdGhlIGFyZ29uMmQgcGFzc3dvcmQtaGFzaGluZyBmdW5jdGlvblxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaFxuICovXG5mdW5jdGlvbiBhcmdvbjJkKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB2YWxpZGF0ZU9wdGlvbnMkMyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGFyZ29uMkludGVybmFsKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgaGFzaFR5cGU6ICdkJyB9KSk7XG4gICAgfSk7XG59XG5jb25zdCBnZXRIYXNoUGFyYW1ldGVycyA9IChwYXNzd29yZCwgZW5jb2RlZCwgc2VjcmV0KSA9PiB7XG4gICAgY29uc3QgcmVnZXggPSAvXlxcJGFyZ29uMihpZHxpfGQpXFwkdj0oWzAtOV0rKVxcJCgoPzpbbXRwXT1bMC05XSssKXsyfVttdHBdPVswLTldKylcXCQoW0EtWmEtejAtOSsvXSspXFwkKFtBLVphLXowLTkrL10rKSQvO1xuICAgIGNvbnN0IG1hdGNoID0gZW5jb2RlZC5tYXRjaChyZWdleCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGFzaCcpO1xuICAgIH1cbiAgICBjb25zdCBbLCBoYXNoVHlwZSwgdmVyc2lvbiwgcGFyYW1ldGVycywgc2FsdCwgaGFzaF0gPSBtYXRjaDtcbiAgICBpZiAodmVyc2lvbiAhPT0gJzE5Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHZlcnNpb246ICR7dmVyc2lvbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkUGFyYW1ldGVycyA9IHt9O1xuICAgIGNvbnN0IHBhcmFtTWFwID0geyBtOiAnbWVtb3J5U2l6ZScsIHA6ICdwYXJhbGxlbGlzbScsIHQ6ICdpdGVyYXRpb25zJyB9O1xuICAgIHBhcmFtZXRlcnMuc3BsaXQoJywnKS5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtuLCB2XSA9IHguc3BsaXQoJz0nKTtcbiAgICAgICAgcGFyc2VkUGFyYW1ldGVyc1twYXJhbU1hcFtuXV0gPSBwYXJzZUludCh2LCAxMCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkUGFyYW1ldGVycyksIHsgcGFzc3dvcmQsXG4gICAgICAgIHNlY3JldCwgaGFzaFR5cGU6IGhhc2hUeXBlLCBzYWx0OiBkZWNvZGVCYXNlNjQoc2FsdCksIGhhc2hMZW5ndGg6IGdldERlY29kZUJhc2U2NExlbmd0aChoYXNoKSwgb3V0cHV0VHlwZTogJ2VuY29kZWQnIH0pO1xufTtcbmNvbnN0IHZhbGlkYXRlVmVyaWZ5T3B0aW9ucyQxID0gKG9wdGlvbnMpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvcHRpb25zIHBhcmFtZXRlci4gSXQgcmVxdWlyZXMgYW4gb2JqZWN0LicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5oYXNoID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG9wdGlvbnMuaGFzaCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXNoIHNob3VsZCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG59O1xuLyoqXG4gKiBWZXJpZmllcyBwYXNzd29yZCB1c2luZyB0aGUgYXJnb24yIHBhc3N3b3JkLWhhc2hpbmcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGVuY29kZWQgaGFzaCBtYXRjaGVzIHRoZSBwYXNzd29yZFxuICovXG5mdW5jdGlvbiBhcmdvbjJWZXJpZnkob3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhbGlkYXRlVmVyaWZ5T3B0aW9ucyQxKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBnZXRIYXNoUGFyYW1ldGVycyhvcHRpb25zLnBhc3N3b3JkLCBvcHRpb25zLmhhc2gsIG9wdGlvbnMuc2VjcmV0KTtcbiAgICAgICAgdmFsaWRhdGVPcHRpb25zJDMocGFyYW1zKTtcbiAgICAgICAgY29uc3QgaGFzaFN0YXJ0ID0gb3B0aW9ucy5oYXNoLmxhc3RJbmRleE9mKCckJykgKyAxO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBhcmdvbjJJbnRlcm5hbChwYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN1YnN0cmluZyhoYXNoU3RhcnQpID09PSBvcHRpb25zLmhhc2guc3Vic3RyaW5nKGhhc2hTdGFydCk7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJGggPSBcImJsYWtlMnNcIjtcbnZhciBkYXRhJGggPSBcIkFHRnpiUUVBQUFBQkVRUmdBQUYvWUFKL2Z3QmdBWDhBWUFBQUF3a0lBQUVDQXdJQ0FBRUZCQUVCQWdJR0RnSi9BVUdnaWdVTGZ3QkJnQWdMQjNBSUJtMWxiVzl5ZVFJQURraGhjMmhmUjJWMFFuVm1abVZ5QUFBS1NHRnphRjlHYVc1aGJBQURDVWhoYzJoZlNXNXBkQUFFQzBoaGMyaGZWWEJrWVhSbEFBVU5TR0Z6YUY5SFpYUlRkR0YwWlFBR0RraGhjMmhmUTJGc1kzVnNZWFJsQUFjS1UxUkJWRVZmVTBsYVJRTUJDcjB5Q0FVQVFZQUpDNlVGQVFaL0FrQWdBVUVCU0EwQUFrQUNRQUpBUWNBQVFRQW9BdkNKQVNJQ2F5SURJQUZJRFFBZ0FTRUREQUVMUVFCQkFEWUM4SWtCQWtBZ0FrSEFBRVlOQUNBQ1FiQ0pBV29oQkFKQUFrQWdBMEVIY1NJRkRRQWdBQ0VHSUFNaEJ3d0JDeUFGSVFjZ0FDRUdBMEFnQkNBR0xRQUFPZ0FBSUFSQkFXb2hCQ0FHUVFGcUlRWWdCMEYvYWlJSERRQUxRY0FBSUFJZ0JXcHJJUWNMSUFKQlIycEJCMGtOQUFOQUlBUWdCaTBBQURvQUFDQUVJQVl0QUFFNkFBRWdCQ0FHTFFBQ09nQUNJQVFnQmkwQUF6b0FBeUFFSUFZdEFBUTZBQVFnQkNBR0xRQUZPZ0FGSUFRZ0JpMEFCam9BQmlBRUlBWXRBQWM2QUFjZ0JFRUlhaUVFSUFaQkNHb2hCaUFIUVhocUlnY05BQXNMUVFBaEJFRUFRUUFvQXFDSkFTSUdRY0FBYWpZQ29Ja0JRUUJCQUNnQ3BJa0JJQVpCdjM5TGFqWUNwSWtCUWJDSkFSQUNJQUFnQTJvaEFBSkFJQUVnQTJzaUEwSEJBRWdOQUNBQ0lBRnFJUVFEUUVFQVFRQW9BcUNKQVNJR1FjQUFhallDb0lrQlFRQkJBQ2dDcElrQklBWkJ2MzlMYWpZQ3BJa0JJQUFRQWlBQVFjQUFhaUVBSUFSQlFHb2lCRUdBQVVzTkFBc2dCRUZBYWlFRFFRQW9BdkNKQVNFQ0RBRUxRUUFvQXZDSkFTRUNJQU5GRFFFTElBTkJmMm9oQVNBQ1FiQ0pBV29oQkFKQUFrQWdBMEVIY1NJR0RRQWdBeUVIREFFTElBTkJlSEVoQndOQUlBUWdBQzBBQURvQUFDQUVRUUZxSVFRZ0FFRUJhaUVBSUFaQmYyb2lCZzBBQ3dzQ1FDQUJRUWRKRFFBRFFDQUVJQUF0QUFBNkFBQWdCQ0FBTFFBQk9nQUJJQVFnQUMwQUFqb0FBaUFFSUFBdEFBTTZBQU1nQkNBQUxRQUVPZ0FFSUFRZ0FDMEFCVG9BQlNBRUlBQXRBQVk2QUFZZ0JDQUFMUUFIT2dBSElBUkJDR29oQkNBQVFRaHFJUUFnQjBGNGFpSUhEUUFMQzBFQUtBTHdpUUVoQWlBRElRUUxRUUFnQWlBRWFqWUM4SWtCQ3d1WEp3b0JmZ0YvQW40Q2Z3RitCMzhEZmdaL0FYNFNmMEVBUVFBcEE1aUpBU0lCcHlJQ1FRQXBBNGlKQVNJRHAyb2dBQ2tERUNJRXB5SUZhaUlHUVFBcEE2aUpBVUtyczQvOGthT3o4TnNBaFNJSHAzTkJFSGNpQ0VIeTVydmpBMm9pQ1NBQ2MwRVVkeUlLSUFacUlBUkNJSWluSWdKcUlnc2dDSE5CR0hjaURDQUphaUlOSUFwelFSbDNJZzVCQUNrRGtJa0JJZ1JDSUlpbklnaEJBQ2tEZ0lrQklnOUNJSWluYWlBQUtRTUlJaENuSWdacUlnbEJBQ2tEb0lrQlF2K2t1WWpGa2RxQ20zK0ZJaEZDSUlpbmMwRVFkeUlTUVlYZG50dDdhaUlUSUFoelFSUjNJaFFnQ1dvZ0VFSWdpS2NpQ0dvaUZXb2dBQ2tES0NJUXB5SUphaUlXSUFTbkloY2dENmRxSUFBcEF3QWlHS2NpQ21vaUdTQVJwM05CRUhjaUdrSG56S2ZRQm1vaUd5QVhjMEVVZHlJY0lCbHFJQmhDSUlpbkloZHFJaDBnR25OQkdIY2lIbk5CRUhjaUh5QUJRaUNJcHlJYUlBTkNJSWluYWlBQUtRTVlJZ0duSWhscUlpQWdCMElnaUtkelFSQjNJaUZCdXVxL3FucHFJaUlnR25OQkZIY2lJeUFnYWlBQlFpQ0lweUlhYWlJZ0lDRnpRUmgzSWlFZ0ltb2lJbW9pSkNBT2MwRVVkeUlsSUJacUlCQkNJSWluSWc1cUloWWdIM05CR0hjaUh5QWthaUlrSUJVZ0VuTkJHSGNpRlNBVGFpSW1JQlJ6UVJsM0loTWdIV29nQUNrRElDSUJweUlTYWlJVUlDRnpRUkIzSWgwZ0RXb2lJU0FUYzBFVWR5SW5JQlJxSUFGQ0lJaW5JZzFxSWhRZ0hYTkJHSGNpSFNBaUlDTnpRUmwzSWhNZ0Myb2dBQ2tETUNJQnB5SUxhaUlpSUJWelFSQjNJaFVnSGlBYmFpSWJhaUllSUJOelFSUjNJaU1nSW1vZ0FVSWdpS2NpRTJvaUlpQVZjMEVZZHlJVklCNXFJaDRnSTNOQkdYY2lJeUFnSUJzZ0hITkJHWGNpRzJvZ0FDa0RPQ0lCcHlJQWFpSWNJQXh6UVJCM0lpQWdKbW9pSmlBYmMwRVVkeUliSUJ4cUlBRkNJSWluSWd4cUloeHFJQk5xSWloelFSQjNJaWxxSWlvZ0kzTkJGSGNpSXlBb2FpQVphaUlvSUI0Z0h5QWNJQ0J6UVJoM0lod2dKbW9pSUNBYmMwRVpkeUliSUJScUlBQnFJaFJ6UVJCM0loOXFJaDRnRzNOQkZIY2lHeUFVYWlBSmFpSVVJQjl6UVJoM0loOGdIbW9pSGlBYmMwRVpkeUliYWlBQ2FpSW1JQjBnSVdvaUhTQWNJQ1FnSlhOQkdYY2lJU0FpYWlBTmFpSWljMEVRZHlJY2FpSWtJQ0Z6UVJSM0lpRWdJbW9nREdvaUlpQWNjMEVZZHlJY2MwRVFkeUlsSUNBZ0ZTQWRJQ2R6UVJsM0loMGdGbW9nQldvaUZuTkJFSGNpRldvaUlDQWRjMEVVZHlJZElCWnFJQkpxSWhZZ0ZYTkJHSGNpRlNBZ2FpSWdhaUluSUJ0elFSUjNJaHNnSm1vZ0NHb2lKaUFsYzBFWWR5SWxJQ2RxSWljZ0tDQXBjMEVZZHlJb0lDcHFJaWtnSTNOQkdYY2lJeUFpYWlBT2FpSWlJQlZ6UVJCM0loVWdIbW9pSGlBamMwRVVkeUlqSUNKcUlCcHFJaUlnRlhOQkdIY2lGU0FnSUIxelFSbDNJaDBnRkdvZ0Yyb2lGQ0FvYzBFUWR5SWdJQndnSkdvaUhHb2lKQ0FkYzBFVWR5SWRJQlJxSUF0cUloUWdJSE5CR0hjaUlDQWthaUlrSUIxelFSbDNJaDBnSENBaGMwRVpkeUljSUJacUlBcHFJaFlnSDNOQkVIY2lIeUFwYWlJaElCeHpRUlIzSWh3Z0Ztb2dCbW9pRm1vZ0Myb2lLSE5CRUhjaUtXb2lLaUFkYzBFVWR5SWRJQ2hxSUFwcUlpZ2dLWE5CR0hjaUtTQXFhaUlxSUIxelFSbDNJaDBnRlNBZWFpSVZJQllnSDNOQkdIY2lGaUFuSUJ0elFSbDNJaHNnRkdvZ0Rtb2lGSE5CRUhjaUhtb2lIeUFiYzBFVWR5SWJJQlJxSUJKcUloUnFJQWxxSWljZ0ZpQWhhaUlXSUNBZ0ZTQWpjMEVaZHlJVklDWnFJQXhxSWlGelFSQjNJaUJxSWlNZ0ZYTkJGSGNpRlNBaGFpQVRhaUloSUNCelFSaDNJaUJ6UVJCM0lpWWdKQ0FsSUJZZ0hITkJHWGNpRmlBaWFpQUNhaUljYzBFUWR5SWlhaUlrSUJaelFSUjNJaFlnSEdvZ0Jtb2lIQ0FpYzBFWWR5SWlJQ1JxSWlScUlpVWdIWE5CRkhjaUhTQW5haUFBYWlJbklDWnpRUmgzSWlZZ0pXb2lKU0FoSUJRZ0huTkJHSGNpRkNBZmFpSWVJQnR6UVJsM0lodHFJQTFxSWg4Z0luTkJFSGNpSVNBcWFpSWlJQnR6UVJSM0loc2dIMm9nQldvaUh5QWhjMEVZZHlJaElDUWdGbk5CR1hjaUZpQW9haUFJYWlJa0lCUnpRUkIzSWhRZ0lDQWphaUlnYWlJaklCWnpRUlIzSWhZZ0pHb2dHV29pSkNBVWMwRVlkeUlVSUNOcUlpTWdGbk5CR1hjaUZpQWdJQlZ6UVJsM0loVWdIR29nR21vaUhDQXBjMEVRZHlJZ0lCNXFJaDRnRlhOQkZIY2lGU0FjYWlBWGFpSWNhaUFUYWlJb2MwRVFkeUlwYWlJcUlCWnpRUlIzSWhZZ0tHb2dDMm9pS0NBcGMwRVlkeUlwSUNwcUlpb2dGbk5CR1hjaUZpQWhJQ0pxSWlFZ0hDQWdjMEVZZHlJY0lDVWdIWE5CR1hjaUhTQWthaUFJYWlJZ2MwRVFkeUlpYWlJa0lCMXpRUlIzSWgwZ0lHb2dGMm9pSUdvZ0Ftb2lKU0FjSUI1cUlod2dGQ0FoSUJ0elFSbDNJaHNnSjJvZ0dtb2lIbk5CRUhjaUZHb2lJU0FiYzBFVWR5SWJJQjVxSUExcUloNGdGSE5CR0hjaUZITkJFSGNpSnlBaklDWWdIQ0FWYzBFWmR5SVZJQjlxSUE1cUloeHpRUkIzSWg5cUlpTWdGWE5CRkhjaUZTQWNhaUFBYWlJY0lCOXpRUmgzSWg4Z0kyb2lJMm9pSmlBV2MwRVVkeUlXSUNWcUlBbHFJaVVnSjNOQkdIY2lKeUFtYWlJbUlDQWdJbk5CR0hjaUlDQWthaUlpSUIxelFSbDNJaDBnSG1vZ0Jtb2lIaUFmYzBFUWR5SWZJQ3BxSWlRZ0hYTkJGSGNpSFNBZWFpQVphaUllSUI5elFSaDNJaDhnSXlBVmMwRVpkeUlWSUNocUlBVnFJaU1nSUhOQkVIY2lJQ0FVSUNGcUloUnFJaUVnRlhOQkZIY2lGU0FqYWlBS2FpSWpJQ0J6UVJoM0lpQWdJV29pSVNBVmMwRVpkeUlWSUJ3Z0ZDQWJjMEVaZHlJVWFpQU1haUliSUNselFSQjNJaHdnSW1vaUlpQVVjMEVVZHlJVUlCdHFJQkpxSWh0cUlBbHFJaWh6UVJCM0lpbHFJaW9nRlhOQkZIY2lGU0FvYWlBTWFpSW9JQ0VnSnlBYklCeHpRUmgzSWhzZ0ltb2lIQ0FVYzBFWmR5SVVJQjVxSUExcUloNXpRUkIzSWlKcUlpRWdGSE5CRkhjaUZDQWVhaUFLYWlJZUlDSnpRUmgzSWlJZ0lXb2lJU0FVYzBFWmR5SVVhaUFJYWlJbklCOGdKR29pSHlBYklDWWdGbk5CR1hjaUZpQWphaUFHYWlJamMwRVFkeUliYWlJa0lCWnpRUlIzSWhZZ0kyb2dCV29pSXlBYmMwRVlkeUliYzBFUWR5SW1JQndnSUNBZklCMXpRUmwzSWgwZ0pXb2dBbW9pSDNOQkVIY2lJR29pSENBZGMwRVVkeUlkSUI5cUlCcHFJaDhnSUhOQkdIY2lJQ0FjYWlJY2FpSWxJQlJ6UVJSM0loUWdKMm9nRTJvaUp5QW1jMEVZZHlJbUlDVnFJaVVnS0NBcGMwRVlkeUlvSUNwcUlpa2dGWE5CR1hjaUZTQWphaUFaYWlJaklDQnpRUkIzSWlBZ0lXb2lJU0FWYzBFVWR5SVZJQ05xSUJKcUlpTWdJSE5CR0hjaUlDQWNJQjF6UVJsM0lod2dIbW9nQUdvaUhTQW9jMEVRZHlJZUlCc2dKR29pRzJvaUpDQWNjMEVVZHlJY0lCMXFJQmRxSWgwZ0huTkJHSGNpSGlBa2FpSWtJQnh6UVJsM0lod2dHeUFXYzBFWmR5SVdJQjlxSUE1cUloc2dJbk5CRUhjaUh5QXBhaUlpSUJaelFSUjNJaFlnRzJvZ0Myb2lHMm9nR1dvaUtITkJFSGNpS1dvaUtpQWNjMEVVZHlJY0lDaHFJQWxxSWlnZ0tYTkJHSGNpS1NBcWFpSXFJQnh6UVJsM0lod2dJQ0FoYWlJZ0lCc2dIM05CR0hjaUd5QWxJQlJ6UVJsM0loUWdIV29nQm1vaUhYTkJFSGNpSDJvaUlTQVVjMEVVZHlJVUlCMXFJQXRxSWgxcUlBVnFJaVVnR3lBaWFpSWJJQjRnSUNBVmMwRVpkeUlWSUNkcUlCSnFJaUJ6UVJCM0loNXFJaUlnRlhOQkZIY2lGU0FnYWlBSWFpSWdJQjV6UVJoM0loNXpRUkIzSWljZ0pDQW1JQnNnRm5OQkdYY2lGaUFqYWlBS2FpSWJjMEVRZHlJamFpSWtJQlp6UVJSM0loWWdHMm9nRG1vaUd5QWpjMEVZZHlJaklDUnFJaVJxSWlZZ0hITkJGSGNpSENBbGFpQVRhaUlsSUNkelFSaDNJaWNnSm1vaUppQWdJQjBnSDNOQkdIY2lIU0FoYWlJZklCUnpRUmwzSWhScUlCZHFJaUFnSTNOQkVIY2lJU0FxYWlJaklCUnpRUlIzSWhRZ0lHb2dEV29pSUNBaGMwRVlkeUloSUNRZ0ZuTkJHWGNpRmlBb2FpQWFhaUlrSUIxelFSQjNJaDBnSGlBaWFpSWVhaUlpSUJaelFSUjNJaFlnSkdvZ0Ftb2lKQ0FkYzBFWWR5SWRJQ0pxSWlJZ0ZuTkJHWGNpRmlBZUlCVnpRUmwzSWhVZ0cyb2dER29pR3lBcGMwRVFkeUllSUI5cUloOGdGWE5CRkhjaUZTQWJhaUFBYWlJYmFpQUFhaUlvYzBFUWR5SXBhaUlxSUJaelFSUjNJaFlnS0dvZ0Uyb2lLQ0FwYzBFWWR5SXBJQ3BxSWlvZ0ZuTkJHWGNpRmlBaElDTnFJaUVnR3lBZWMwRVlkeUliSUNZZ0hITkJHWGNpSENBa2FpQVhhaUllYzBFUWR5SWphaUlrSUJ4elFSUjNJaHdnSG1vZ0RHb2lIbW9nR1dvaUppQWJJQjlxSWhzZ0hTQWhJQlJ6UVJsM0loUWdKV29nQzJvaUgzTkJFSGNpSFdvaUlTQVVjMEVVZHlJVUlCOXFJQUpxSWg4Z0hYTkJHSGNpSFhOQkVIY2lKU0FpSUNjZ0d5QVZjMEVaZHlJVklDQnFJQVZxSWh0elFSQjNJaUJxSWlJZ0ZYTkJGSGNpRlNBYmFpQUphaUliSUNCelFSaDNJaUFnSW1vaUltb2lKeUFXYzBFVWR5SVdJQ1pxSUFocUlpWWdKWE5CR0hjaUpTQW5haUluSUI0Z0kzTkJHSGNpSGlBa2FpSWpJQnh6UVJsM0lod2dIMm9nQ21vaUh5QWdjMEVRZHlJZ0lDcHFJaVFnSEhOQkZIY2lIQ0FmYWlBYWFpSWZJQ0J6UVJoM0lpQWdJaUFWYzBFWmR5SVZJQ2hxSUExcUlpSWdIbk5CRUhjaUhpQWRJQ0ZxSWgxcUlpRWdGWE5CRkhjaUZTQWlhaUFHYWlJaUlCNXpRUmgzSWg0Z0lXb2lJU0FWYzBFWmR5SVZJQnNnSFNBVWMwRVpkeUlVYWlBU2FpSWJJQ2x6UVJCM0loMGdJMm9pSXlBVWMwRVVkeUlVSUJ0cUlBNXFJaHRxSUFocUlpaHpRUkIzSWlscUlpb2dGWE5CRkhjaUZTQW9haUFOYWlJb0lDRWdKU0FiSUIxelFSaDNJaHNnSTJvaUhTQVVjMEVaZHlJVUlCOXFJQk5xSWg5elFSQjNJaU5xSWlFZ0ZITkJGSGNpRkNBZmFpQU9haUlmSUNOelFSaDNJaU1nSVdvaUlTQVVjMEVaZHlJVWFpQUdhaUlsSUNBZ0pHb2lJQ0FiSUNjZ0ZuTkJHWGNpRmlBaWFpQUxhaUlpYzBFUWR5SWJhaUlrSUJaelFSUjNJaFlnSW1vZ0Yyb2lJaUFiYzBFWWR5SWJjMEVRZHlJbklCMGdIaUFnSUJ4elFSbDNJaHdnSm1vZ0dtb2lJSE5CRUhjaUhtb2lIU0FjYzBFVWR5SWNJQ0JxSUFCcUlpQWdIbk5CR0hjaUhpQWRhaUlkYWlJbUlCUnpRUlIzSWhRZ0pXb2dDV29pSlNBbmMwRVlkeUluSUNacUlpWWdLQ0FwYzBFWWR5SW9JQ3BxSWlrZ0ZYTkJHWGNpRlNBaWFpQVNhaUlpSUI1elFSQjNJaDRnSVdvaUlTQVZjMEVVZHlJVklDSnFJQmxxSWlJZ0huTkJHSGNpSGlBZElCeHpRUmwzSWh3Z0gyb2dBbW9pSFNBb2MwRVFkeUlmSUJzZ0pHb2lHMm9pSkNBY2MwRVVkeUljSUIxcUlBcHFJaDBnSDNOQkdIY2lIeUFrYWlJa0lCeHpRUmwzSWh3Z0d5QVdjMEVaZHlJV0lDQnFJQXhxSWhzZ0kzTkJFSGNpSUNBcGFpSWpJQlp6UVJSM0loWWdHMm9nQldvaUcyb2dBR29pS0hOQkVIY2lLV29pS2lBY2MwRVVkeUljSUNocUlBMXFJaWdnS1hOQkdIY2lLU0FxYWlJcUlCeHpRUmwzSWh3Z0hpQWhhaUllSUJzZ0lITkJHSGNpR3lBbUlCUnpRUmwzSWhRZ0hXb2dHV29pSFhOQkVIY2lJR29pSVNBVWMwRVVkeUlVSUIxcUlBeHFJaDFxSUF0cUlpWWdHeUFqYWlJYklCOGdIaUFWYzBFWmR5SVZJQ1ZxSUFwcUloNXpRUkIzSWg5cUlpTWdGWE5CRkhjaUZTQWVhaUFTYWlJZUlCOXpRUmgzSWg5elFSQjNJaVVnSkNBbklCc2dGbk5CR1hjaUZpQWlhaUFPYWlJYmMwRVFkeUlpYWlJa0lCWnpRUlIzSWhZZ0cyb2dDR29pR3lBaWMwRVlkeUlpSUNScUlpUnFJaWNnSEhOQkZIY2lIQ0FtYWlBR2FpSW1JQ1Z6UVJoM0lpVWdKMm9pSnlBZUlCMGdJSE5CR0hjaUhTQWhhaUlnSUJSelFSbDNJaFJxSUFscUloNGdJbk5CRUhjaUlTQXFhaUlpSUJSelFSUjNJaFFnSG1vZ0Ftb2lIaUFoYzBFWWR5SWhJQ1FnRm5OQkdYY2lGaUFvYWlBVGFpSWtJQjF6UVJCM0loMGdIeUFqYWlJZmFpSWpJQlp6UVJSM0loWWdKR29nR21vaUpDQWRjMEVZZHlJZElDTnFJaU1nRm5OQkdYY2lGaUFmSUJWelFSbDNJaFVnRzJvZ0Yyb2lHeUFwYzBFUWR5SWZJQ0JxSWlBZ0ZYTkJGSGNpRlNBYmFpQUZhaUliYWlBYWFpSWFjMEVRZHlJb2FpSXBJQlp6UVJSM0loWWdHbW9nR1dvaUdTQW9jMEVZZHlJYUlDbHFJaWdnRm5OQkdYY2lGaUFoSUNKcUlpRWdHeUFmYzBFWWR5SWJJQ2NnSEhOQkdYY2lIQ0FrYWlBU2FpSVNjMEVRZHlJZmFpSWlJQnh6UVJSM0lod2dFbW9nQldvaUJXb2dEV29pRWlBYklDQnFJZzBnSFNBaElCUnpRUmwzSWhRZ0ptb2dDV29pQ1hOQkVIY2lHMm9pSFNBVWMwRVVkeUlVSUFscUlBWnFJZ1lnRzNOQkdIY2lDWE5CRUhjaUd5QWpJQ1VnRFNBVmMwRVpkeUlOSUI1cUlCZHFJaGR6UVJCM0loVnFJaDRnRFhOQkZIY2lEU0FYYWlBQ2FpSUNJQlZ6UVJoM0loY2dIbW9pRldvaUhpQVdjMEVVZHlJV0lCSnFJQUJxSWhLdFFpQ0dJQVVnSDNOQkdIY2lCU0FpYWlJQUlCeHpRUmwzSWh3Z0Jtb2dER29pQmlBWGMwRVFkeUlYSUNocUlnd2dISE5CRkhjaUhDQUdhaUFPYWlJR3JZUWdENFVnQWlBSklCMXFJZ2tnRkhOQkdYY2lEbW9nRTJvaUFpQWFjMEVRZHlJYUlBQnFJaE1nRG5OQkZIY2lEaUFDYWlBS2FpSUNJQnB6UVJoM0lnb2dFMm9pR3ExQ0lJWWdGU0FOYzBFWmR5SU5JQmxxSUFocUlnZ2dCWE5CRUhjaUJTQUphaUlKSUExelFSUjNJaGtnQ0dvZ0Myb2lDQ0FGYzBFWWR5SUZJQWxxSWdtdGhJVTNBNENKQVVFQUlBTWdBcTFDSUlZZ0NLMkVoU0FTSUJ0elFSaDNJZ0lnSG1vaUNLMUNJSVlnQmlBWGMwRVlkeUlHSUF4cUloZXRoSVUzQTRpSkFVRUFJQVFnRnlBY2MwRVpkNjFDSUlZZ0dpQU9jMEVaZDYyRWhTQUZyVUlnaGlBQ3JZU0ZOd09RaVFGQkFDQUpJQmx6UVJsM3JVSWdoaUFJSUJaelFSbDNyWVJCQUNrRG1Ja0JoU0FHclVJZ2hpQUtyWVNGTndPWWlRRUxuUUlCQkg4akFFRWdheUlBSkFBQ1FFRUFLQUtvaVFFTkFFRUFRUUFvQXFDSkFTSUJRUUFvQXZDSkFTSUNhaUlETmdLZ2lRRkJBRUVBS0FLa2lRRWdBeUFCU1dvMkFxU0pBUUpBUVFBdEFQaUpBVVVOQUVFQVFYODJBcXlKQVF0QkFFRi9OZ0tvaVFFQ1FDQUNRVDlLRFFCQkFDRUJBMEFnQWlBQmFrR3dpUUZxUVFBNkFBQWdBVUVCYWlJQlFjQUFRUUFvQXZDSkFTSUNhMGdOQUFzTFFiQ0pBUkFDSUFCQkFDa0RnSWtCTndNQUlBQkJBQ2tEaUlrQk53TUlJQUJCQUNrRGtJa0JOd01RSUFCQkFDa0RtSWtCTndNWVFRQW9BdlNKQVNJRFFRRklEUUJCQUNFQlFRQWhBZ05BSUFGQmdBbHFJQUFnQVdvdEFBQTZBQUFnQVVFQmFpRUJJQU1nQWtFQmFpSUNRZjhCY1VvTkFBc0xJQUJCSUdva0FBdTBBd0VFZnlNQVFjQUFheUlCSkFCQkFFR0JBanNCZ29vQlFRQWdBRUVRZGlJQ09nQ0JpZ0ZCQUNBQVFRTjJPZ0NBaWdGQkFDRURBa0FEUUNBRFFZQ0pBV3BCQURZQ0FDQURRZmdBUmcwQklBTkJoSWtCYWtFQU5nSUFJQU5CQ0dvaEF3d0FDd3RCQUNFRFFRQkJBQ2dDZ0lvQklnUkI1OHluMEFaek5nS0FpUUZCQUVFQUtBS0VpZ0ZCaGQyZTIzdHpOZ0tFaVFGQkFFRUFLQUtJaWdGQjh1YTc0d056TmdLSWlRRkJBRUVBS0FLTWlnRkJ1dXEvcW5wek5nS01pUUZCQUVFQUtBS1FpZ0ZCLzZTNWlBVnpOZ0tRaVFGQkFFRUFLQUtVaWdGQmpOR1YySGx6TmdLVWlRRkJBRUVBS0FLWWlnRkJxN09QL0FGek5nS1lpUUZCQUNBRVFmOEJjVFlDOUlrQlFRQkJBQ2dDbklvQlFabWFnOThGY3pZQ25Ja0JBa0FnQUVHQWdBUkpEUUFnQVVFNGFrSUFOd01BSUFGQk1HcENBRGNEQUNBQlFTaHFRZ0EzQXdBZ0FVRWdha0lBTndNQUlBRkJHR3BDQURjREFDQUJRUkJxUWdBM0F3QWdBVUlBTndNSUlBRkNBRGNEQUVFQUlRQURRQ0FCSUFOcUlBTkJnQWxxTFFBQU9nQUFJQU5CQVdvaEF5QUNJQUJCQVdvaUFFSC9BWEZMRFFBTElBRkJ3QUFRQVFzZ0FVSEFBR29rQUFzSkFFR0FDU0FBRUFFTEJnQkJnSWtCQ3c4QUlBRVFCRUdBQ1NBQUVBRVFBd3NMQ3dFQVFZQUlDd1I4QUFBQVwiO1xudmFyIGhhc2gkaCA9IFwiYzVjNzQ2ZDRcIjtcbnZhciB3YXNtSnNvbiRoID0ge1xuXHRuYW1lOiBuYW1lJGgsXG5cdGRhdGE6IGRhdGEkaCxcblx0aGFzaDogaGFzaCRoXG59O1xuXG5jb25zdCBtdXRleCRqID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGogPSBudWxsO1xuZnVuY3Rpb24gdmFsaWRhdGVCaXRzJDMoYml0cykge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihiaXRzKSB8fCBiaXRzIDwgOCB8fCBiaXRzID4gMjU2IHx8IGJpdHMgJSA4ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgdmFyaWFudCEgVmFsaWQgdmFsdWVzOiA4LCAxNiwgLi4uLCAyNTYnKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRJbml0UGFyYW0ob3V0cHV0Qml0cywga2V5Qml0cykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgcmV0dXJuIG91dHB1dEJpdHMgfCAoa2V5Qml0cyA8PCAxNik7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgQkxBS0UycyBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHBhcmFtIGJpdHMgTnVtYmVyIG9mIG91dHB1dCBiaXRzLCB3aGljaCBoYXMgdG8gYmUgYSBudW1iZXJcbiAqICAgICAgICAgICAgIGRpdmlzaWJsZSBieSA4LCBiZXR3ZWVuIDggYW5kIDI1Ni4gRGVmYXVsdHMgdG8gMjU2LlxuICogQHBhcmFtIGtleSBPcHRpb25hbCBrZXkgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpLiBNYXhpbXVtIGxlbmd0aCBpcyAzMiBieXRlcy5cbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmxha2UycyhkYXRhLCBiaXRzID0gMjU2LCBrZXkgPSBudWxsKSB7XG4gICAgaWYgKHZhbGlkYXRlQml0cyQzKGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZUJpdHMkMyhiaXRzKSk7XG4gICAgfVxuICAgIGxldCBrZXlCdWZmZXIgPSBudWxsO1xuICAgIGxldCBpbml0UGFyYW0gPSBiaXRzO1xuICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAga2V5QnVmZmVyID0gZ2V0VUludDhCdWZmZXIoa2V5KTtcbiAgICAgICAgaWYgKGtleUJ1ZmZlci5sZW5ndGggPiAzMikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignTWF4IGtleSBsZW5ndGggaXMgMzIgYnl0ZXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdFBhcmFtID0gZ2V0SW5pdFBhcmFtKGJpdHMsIGtleUJ1ZmZlci5sZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCBoYXNoTGVuZ3RoID0gYml0cyAvIDg7XG4gICAgaWYgKHdhc21DYWNoZSRqID09PSBudWxsIHx8IHdhc21DYWNoZSRqLmhhc2hMZW5ndGggIT09IGhhc2hMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCRqLCB3YXNtSnNvbiRoLCBoYXNoTGVuZ3RoKVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSRqID0gd2FzbTtcbiAgICAgICAgICAgIGlmIChpbml0UGFyYW0gPiA1MTIpIHtcbiAgICAgICAgICAgICAgICB3YXNtQ2FjaGUkai53cml0ZU1lbW9yeShrZXlCdWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRqLmNhbGN1bGF0ZShkYXRhLCBpbml0UGFyYW0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGluaXRQYXJhbSA+IDUxMikge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGoud3JpdGVNZW1vcnkoa2V5QnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJGouY2FsY3VsYXRlKGRhdGEsIGluaXRQYXJhbSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEJMQUtFMnMgaGFzaCBpbnN0YW5jZVxuICogQHBhcmFtIGJpdHMgTnVtYmVyIG9mIG91dHB1dCBiaXRzLCB3aGljaCBoYXMgdG8gYmUgYSBudW1iZXJcbiAqICAgICAgICAgICAgIGRpdmlzaWJsZSBieSA4LCBiZXR3ZWVuIDggYW5kIDI1Ni4gRGVmYXVsdHMgdG8gMjU2LlxuICogQHBhcmFtIGtleSBPcHRpb25hbCBrZXkgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpLiBNYXhpbXVtIGxlbmd0aCBpcyAzMiBieXRlcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQkxBS0UycyhiaXRzID0gMjU2LCBrZXkgPSBudWxsKSB7XG4gICAgaWYgKHZhbGlkYXRlQml0cyQzKGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZUJpdHMkMyhiaXRzKSk7XG4gICAgfVxuICAgIGxldCBrZXlCdWZmZXIgPSBudWxsO1xuICAgIGxldCBpbml0UGFyYW0gPSBiaXRzO1xuICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAga2V5QnVmZmVyID0gZ2V0VUludDhCdWZmZXIoa2V5KTtcbiAgICAgICAgaWYgKGtleUJ1ZmZlci5sZW5ndGggPiAzMikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignTWF4IGtleSBsZW5ndGggaXMgMzIgYnl0ZXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdFBhcmFtID0gZ2V0SW5pdFBhcmFtKGJpdHMsIGtleUJ1ZmZlci5sZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRTaXplID0gYml0cyAvIDg7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kaCwgb3V0cHV0U2l6ZSkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICBpZiAoaW5pdFBhcmFtID4gNTEyKSB7XG4gICAgICAgICAgICB3YXNtLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgd2FzbS5pbml0KGluaXRQYXJhbSk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6IGluaXRQYXJhbSA+IDUxMlxuICAgICAgICAgICAgICAgID8gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3YXNtLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIHdhc20uaW5pdChpbml0UGFyYW0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2FzbS5pbml0KGluaXRQYXJhbSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IG91dHB1dFNpemUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJGcgPSBcImJsYWtlM1wiO1xudmFyIGRhdGEkZyA9IFwiQUdGemJRRUFBQUFCTVFkZ0FBRi9ZQWwvZjM5K2YzOS9mMzhBWUFaL2YzOS9mbjhBWUFGL0FHQURmMzkvQUdBQmZnQmdCWDkvZm45L0FYOEREZzBBQVFJREJBVUdBd01EQXdBRUJRUUJBUUlDQmc0Q2Z3RkJnSmdGQzM4QVFZQUlDd2R3Q0FadFpXMXZjbmtDQUE1SVlYTm9YMGRsZEVKMVptWmxjZ0FBQ1VoaGMyaGZTVzVwZEFBSUMwaGhjMmhmVlhCa1lYUmxBQWtLU0dGemFGOUdhVzVoYkFBS0RVaGhjMmhmUjJWMFUzUmhkR1VBQ3c1SVlYTm9YME5oYkdOMWJHRjBaUUFNQ2xOVVFWUkZYMU5KV2tVREFRcWNXdzBGQUVHQUNRdWpBd1FDZndGK0FYOEVmaU1BUWVBQWF5SUpKQUFDUUNBQlJRMEFJQWNnQlhJaENpQUVRUUJIclNFTElBZEJBQ0FDUVFGR0d5QUdjaUFGY2lFTUEwQWdBQ2dDQUNFSElBbEJBQ2tEZ0lrQk53TUFJQWxCQUNrRGlJa0JOd01JSUFsQkFDa0RrSWtCTndNUUlBbEJBQ2tEbUlrQk53TVlJQWxCSUdvZ0NTQUhRY0FBSUFNZ0RCQUNJQWtnQ1NrRFFDQUpLUU1naFNJTk53TUFJQWtnQ1NrRFNDQUpLUU1vaFNJT053TUlJQWtnQ1NrRFVDQUpLUU13aFNJUE53TVFJQWtnQ1NrRFdDQUpLUU00aFNJUU53TVlJQWRCd0FCcUlRY2dBaUVFQWtBRFFDQUZJUVlDUUFKQUlBUkJmMm9pQkE0Q0F3QUJDeUFLSVFZTElBbEJJR29nQ1NBSFFjQUFJQU1nQmhBQ0lBa2dDU2tEUUNBSktRTWdoU0lOTndNQUlBa2dDU2tEU0NBSktRTW9oU0lPTndNSUlBa2dDU2tEVUNBSktRTXdoU0lQTndNUUlBa2dDU2tEV0NBSktRTTRoU0lRTndNWUlBZEJ3QUJxSVFjTUFBc0xJQWdnRURjREdDQUlJQTgzQXhBZ0NDQU9Od01JSUFnZ0RUY0RBQ0FJUVNCcUlRZ2dBRUVFYWlFQUlBTWdDM3doQXlBQlFYOXFJZ0VOQUFzTElBbEI0QUJxSkFBTGhCd0NESDRmZnlBQ0tRTWdJUVlnQWlrRE9DRUhJQUlwQXpBaENDQUNLUU1BSVFrZ0Fpa0RLQ0VLSUFJcEF4QWhDeUFDS1FNSUlRd2dBaWtER0NFTklBQWdBU2tEQUNJT053TUFJQUFnQVNrRENDSVBOd01JSUFBZ0FTa0RFQ0lRTndNUUlBQWdEMElnaUtjZ0RhY2lBbW9nQVNrREdDSVJRaUNJcHlJU2FpSVRJQTFDSUlpbklnRnFJQk1nQlhOQkVIUWdFMEVRZG5JaUZFRzY2citxZW1vaUZTQVNjMEVVZHlJV2FpSVhJQTZuSUFtbkloTnFJQkNuSWhKcUloZ2dDVUlnaUtjaUJXb2dHQ0FFcDNOQkVIY2lHRUhuektmUUJtb2lHU0FTYzBFVWR5SVNhaUlhSUJoelFSaDNJaHNnR1dvaUhDQVNjMEVaZHlJZGFpQUhweUlTYWlJZUlBZENJSWluSWhocUlCNGdENmNnQzZjaUdXb2dFYWNpSDJvaUlDQUxRaUNJcHlJaGFpQWdJQU56UVJCMElDQkJFSFp5SWlCQjh1YTc0d05xSWlJZ0gzTkJGSGNpSDJvaUl5QWdjMEVZZHlJa2MwRVFkeUllSUE1Q0lJaW5JQXluSWlCcUlCQkNJSWluSWlWcUlpWWdERUlnaUtjaUEyb2dKaUFFUWlDSXAzTkJFSGNpSmtHRjNaN2JlMm9pSnlBbGMwRVVkeUlsYWlJb0lDWnpRUmgzSWlZZ0oyb2lKMm9pS1NBZGMwRVVkeUlkYWlJcUlCbHFJQmNnRkhOQkdIY2lLeUFWYWlJc0lCWnpRUmwzSWhZZ0kyb2dDS2NpRkdvaUZ5QUlRaUNJcHlJVmFpQVhJQ1p6UVJCM0loY2dIR29pSENBV2MwRVVkeUlXYWlJaklCZHpRUmgzSWlZZ0hHb2lMU0FXYzBFWmR5SXVhaUljSUJWcUlDY2dKWE5CR1hjaUpTQWFhaUFHcHlJV2FpSWFJQVpDSUlpbkloZHFJQm9nSzNOQkVIY2lHaUFrSUNKcUlpSnFJaVFnSlhOQkZIY2lKV29pSnlBYWMwRVlkeUlySUJ4elFSQjNJaThnSWlBZmMwRVpkeUlmSUNocUlBcW5JaHBxSWlJZ0NrSWdpS2NpSEdvZ0lpQWJjMEVRZHlJYklDeHFJaUlnSDNOQkZIY2lIMm9pS0NBYmMwRVlkeUliSUNKcUlpSnFJaXdnTG5OQkZIY2lMbW9pTUNBbklDQnFJQ29nSG5OQkdIY2lIaUFwYWlJbklCMXpRUmwzSWgxcUlpa2dBbW9nR3lBcGMwRVFkeUliSUMxcUlpa2dIWE5CRkhjaUhXb2lLaUFiYzBFWWR5SWJJQ2xxSWlrZ0hYTkJHWGNpSFdvZ0dHb2lMU0FXYWlBdElDTWdBV29nSWlBZmMwRVpkeUlmYWlJaUlCTnFJQjRnSW5OQkVIY2lIaUFySUNScUlpSnFJaU1nSDNOQkZIY2lIMm9pSkNBZWMwRVlkeUllYzBFUWR5SXJJQ2dnQTJvZ0lpQWxjMEVaZHlJaWFpSWxJQnBxSUNZZ0pYTkJFSGNpSlNBbmFpSW1JQ0p6UVJSM0lpSnFJaWNnSlhOQkdIY2lKU0FtYWlJbWFpSW9JQjF6UVJSM0loMXFJaTBnQVdvZ01DQXZjMEVZZHlJdklDeHFJaXdnTG5OQkdYY2lMaUFrYWlBWGFpSWtJQkpxSUNRZ0pYTkJFSGNpSkNBcGFpSWxJQzV6UVJSM0lpbHFJaTRnSkhOQkdIY2lKQ0FsYWlJbElDbHpRUmwzSWlscUlqQWdFbW9nSmlBaWMwRVpkeUlpSUNwcUlBVnFJaVlnSEdvZ0ppQXZjMEVRZHlJbUlCNGdJMm9pSG1vaUl5QWljMEVVZHlJaWFpSXFJQ1p6UVJoM0lpWWdNSE5CRUhjaUx5QWVJQjl6UVJsM0loNGdKMm9nRkdvaUh5QWhhaUFmSUJ0elFSQjNJaHNnTEdvaUh5QWVjMEVVZHlJZWFpSW5JQnR6UVJoM0loc2dIMm9pSDJvaUxDQXBjMEVVZHlJcGFpSXdJQ29nQTJvZ0xTQXJjMEVZZHlJcUlDaHFJaWdnSFhOQkdYY2lIV29pS3lBWmFpQWJJQ3R6UVJCM0loc2dKV29pSlNBZGMwRVVkeUlkYWlJcklCdHpRUmgzSWhzZ0pXb2lKU0FkYzBFWmR5SWRhaUFXYWlJdElBVnFJQzBnTGlBVmFpQWZJQjV6UVJsM0loNXFJaDhnSUdvZ0tpQWZjMEVRZHlJZklDWWdJMm9pSTJvaUppQWVjMEVVZHlJZWFpSXFJQjl6UVJoM0loOXpRUkIzSWkwZ0p5QWFhaUFqSUNKelFSbDNJaUpxSWlNZ0ZHb2dKQ0FqYzBFUWR5SWpJQ2hxSWlRZ0luTkJGSGNpSW1vaUp5QWpjMEVZZHlJaklDUnFJaVJxSWlnZ0hYTkJGSGNpSFdvaUxpQVZhaUF3SUM5elFSaDNJaThnTEdvaUxDQXBjMEVaZHlJcElDcHFJQnhxSWlvZ0dHb2dLaUFqYzBFUWR5SWpJQ1ZxSWlVZ0tYTkJGSGNpS1dvaUtpQWpjMEVZZHlJaklDVnFJaVVnS1hOQkdYY2lLV29pTUNBWWFpQWtJQ0p6UVJsM0lpSWdLMm9nQW1vaUpDQWhhaUFrSUM5elFSQjNJaVFnSHlBbWFpSWZhaUltSUNKelFSUjNJaUpxSWlzZ0pITkJHSGNpSkNBd2MwRVFkeUl2SUI4Z0huTkJHWGNpSGlBbmFpQVhhaUlmSUJOcUlCOGdHM05CRUhjaUd5QXNhaUlmSUI1elFSUjNJaDVxSWljZ0czTkJHSGNpR3lBZmFpSWZhaUlzSUNselFSUjNJaWxxSWpBZ0t5QWFhaUF1SUMxelFSaDNJaXNnS0dvaUtDQWRjMEVaZHlJZGFpSXRJQUZxSUJzZ0xYTkJFSGNpR3lBbGFpSWxJQjF6UVJSM0loMXFJaTBnRzNOQkdIY2lHeUFsYWlJbElCMXpRUmwzSWgxcUlBVnFJaTRnQW1vZ0xpQXFJQkpxSUI4Z0huTkJHWGNpSG1vaUh5QURhaUFySUI5elFSQjNJaDhnSkNBbWFpSWthaUltSUI1elFSUjNJaDVxSWlvZ0gzTkJHSGNpSDNOQkVIY2lLeUFuSUJScUlDUWdJbk5CR1hjaUltb2lKQ0FYYWlBaklDUnpRUkIzSWlNZ0tHb2lKQ0FpYzBFVWR5SWlhaUluSUNOelFSaDNJaU1nSkdvaUpHb2lLQ0FkYzBFVWR5SWRhaUl1SUJKcUlEQWdMM05CR0hjaUx5QXNhaUlzSUNselFSbDNJaWtnS21vZ0lXb2lLaUFXYWlBcUlDTnpRUkIzSWlNZ0pXb2lKU0FwYzBFVWR5SXBhaUlxSUNOelFSaDNJaU1nSldvaUpTQXBjMEVaZHlJcGFpSXdJQlpxSUNRZ0luTkJHWGNpSWlBdGFpQVphaUlrSUJOcUlDUWdMM05CRUhjaUpDQWZJQ1pxSWg5cUlpWWdJbk5CRkhjaUltb2lMU0FrYzBFWWR5SWtJREJ6UVJCM0lpOGdIeUFlYzBFWmR5SWVJQ2RxSUJ4cUloOGdJR29nSHlBYmMwRVFkeUliSUN4cUloOGdIbk5CRkhjaUhtb2lKeUFiYzBFWWR5SWJJQjlxSWg5cUlpd2dLWE5CRkhjaUtXb2lNQ0F2YzBFWWR5SXZJQ3hxSWl3Z0tYTkJHWGNpS1NBcUlCaHFJQjhnSG5OQkdYY2lIbW9pSHlBYWFpQXVJQ3R6UVJoM0lpb2dIM05CRUhjaUh5QWtJQ1pxSWlScUlpWWdIbk5CRkhjaUhtb2lLMm9nRTJvaUxpQUZhaUF1SUNjZ0Yyb2dKQ0FpYzBFWmR5SWlhaUlrSUJ4cUlDTWdKSE5CRUhjaUl5QXFJQ2hxSWlScUlpY2dJbk5CRkhjaUltb2lLQ0FqYzBFWWR5SWpjMEVRZHlJcUlDMGdGR29nSkNBZGMwRVpkeUlkYWlJa0lCVnFJQnNnSkhOQkVIY2lHeUFsYWlJa0lCMXpRUlIzSWgxcUlpVWdHM05CR0hjaUd5QWthaUlrYWlJdElDbHpRUlIzSWlscUlpNGdGbW9nS3lBZmMwRVlkeUlmSUNacUlpWWdIbk5CR1hjaUhpQW9haUFoYWlJb0lBTnFJQ2dnRzNOQkVIY2lHeUFzYWlJb0lCNXpRUlIzSWg1cUlpc2dHM05CR0hjaUd5QW9haUlvSUI1elFSbDNJaDVxSWl3Z0ZHb2dNQ0FrSUIxelFSbDNJaDFxSUFKcUlpUWdHV29nSkNBZmMwRVFkeUlmSUNNZ0oyb2lJMm9pSkNBZGMwRVVkeUlkYWlJbklCOXpRUmgzSWg4Z0xITkJFSGNpTENBaklDSnpRUmwzSWlJZ0pXb2dBV29pSXlBZ2FpQWpJQzl6UVJCM0lpTWdKbW9pSlNBaWMwRVVkeUlpYWlJbUlDTnpRUmgzSWlNZ0pXb2lKV29pTHlBZWMwRVVkeUllYWlJd0lDeHpRUmgzSWl3Z0wyb2lMeUFlYzBFWmR5SWVJQ3NnSEdvZ0pTQWljMEVaZHlJaWFpSWxJQ0ZxSUM0Z0tuTkJHSGNpS2lBbGMwRVFkeUlsSUI4Z0pHb2lIMm9pSkNBaWMwRVVkeUlpYWlJcmFpQVRhaUl1SUJwcUlDNGdKaUFYYWlBZklCMXpRUmwzSWgxcUloOGdFbW9nR3lBZmMwRVFkeUliSUNvZ0xXb2lIMm9pSmlBZGMwRVVkeUlkYWlJcUlCdHpRUmgzSWh0elFSQjNJaTBnSnlBWWFpQWZJQ2x6UVJsM0loOXFJaWNnQldvZ0l5QW5jMEVRZHlJaklDaHFJaWNnSDNOQkZIY2lIMm9pS0NBamMwRVlkeUlqSUNkcUlpZHFJaWtnSG5OQkZIY2lIbW9pTGlBaGFpQXJJQ1Z6UVJoM0lpRWdKR29pSkNBaWMwRVpkeUlpSUNwcUlCVnFJaVVnQTJvZ0pTQWpjMEVRZHlJaklDOXFJaVVnSW5OQkZIY2lJbW9pS2lBamMwRVlkeUlqSUNWcUlpVWdJbk5CR1hjaUltb2lLeUFUYWlBbklCOXpRUmwzSWhNZ01Hb2dJR29pSHlBQ2FpQWZJQ0Z6UVJCM0lpRWdHeUFtYWlJYmFpSWZJQk56UVJSM0loTnFJaVlnSVhOQkdIY2lJU0FyYzBFUWR5SW5JQ2dnR3lBZGMwRVpkeUliYWlBWmFpSWRJQUZxSUIwZ0xITkJFSGNpSFNBa2FpSWtJQnR6UVJSM0lodHFJaWdnSFhOQkdIY2lIU0FrYWlJa2FpSXJJQ0p6UVJSM0lpSnFJaXdnSjNOQkdIY2lKeUFyYWlJcklDSnpRUmwzSWlJZ0tpQWNhaUFrSUJ0elFSbDNJaHhxSWhzZ0dHb2dMaUF0YzBFWWR5SVlJQnR6UVJCM0loc2dJU0FmYWlJaGFpSWZJQnh6UVJSM0loeHFJaVJxSUJKcUloSWdHbW9nRWlBb0lCWnFJQ0VnRTNOQkdYY2lFMm9pSVNBQ2FpQWpJQ0Z6UVJCM0lnSWdHQ0FwYWlJWWFpSWhJQk56UVJSM0loTnFJaFlnQW5OQkdIY2lBbk5CRUhjaUVpQW1JQVZxSUJnZ0huTkJHWGNpQldvaUdDQVhhaUFkSUJoelFSQjNJaGdnSldvaUZ5QUZjMEVVZHlJRmFpSWFJQmh6UVJoM0loZ2dGMm9pRjJvaUhTQWljMEVVZHlJZWFpSWlOZ0lBSUFBZ0Z5QUZjMEVaZHlJRklDeHFJQ0JxSWlBZ0ZHb2dJQ0FrSUJ0elFSaDNJaFJ6UVJCM0lpQWdBaUFoYWlJQ2FpSWhJQVZ6UVJSM0lnVnFJaGNnSUhOQkdIY2lJRFlDTUNBQUlCWWdGQ0FmYWlJVUlCeHpRUmwzSWh4cUlBRnFJZ0VnRldvZ0FTQVljMEVRZHlJQklDdHFJaGdnSEhOQkZIY2lGV29pRmlBQmMwRVlkeUlCSUJocUloZ2dGWE5CR1hjMkFoQWdBQ0FYTmdJRUlBQWdBaUFUYzBFWmR5SUNJQnBxSUFOcUloTWdHV29nRXlBbmMwRVFkeUlUSUJScUloa2dBbk5CRkhjaUFtb2lBeUFUYzBFWWR5SVROZ0kwSUFBZ0lpQVNjMEVZZHlJU0lCMXFJaFFnSG5OQkdYYzJBaFFnQUNBVElCbHFJaE0yQWlBZ0FDQVlOZ0lrSUFBZ0F6WUNDQ0FBSUFFMkFqZ2dBQ0FnSUNGcUlnRWdCWE5CR1hjMkFoZ2dBQ0FVTmdJb0lBQWdGallDRENBQUlCSTJBandnQUNBVElBSnpRUmwzTmdJY0lBQWdBVFlDTEF1bEVnc0Rmd1IrQW44QmZnRi9CSDREZndGK0FuOEJmZ1IvSXdCQjBBSnJJZ0VrQUFKQUlBQkZEUUFDUUFKQVFRQXRBSW1LQVVFR2RFRUFMUUNJaWdGcUlnSU5BRUdBQ1NFRERBRUxRYUNKQVVHQUNVR0FDQ0FDYXlJQ0lBQWdBaUFBU1JzaUFoQUVJQUFnQW1zaUFFVU5BU0FCUWFBQmFrRUFLUVBRaVFFM0F3QWdBVUdvQVdwQkFDa0QySWtCTndNQUlBRkJBQ2tEb0lrQklnUTNBM0FnQVVFQUtRT29pUUVpQlRjRGVDQUJRUUFwQTdDSkFTSUdOd09BQVNBQlFRQXBBN2lKQVNJSE53T0lBU0FCUVFBcEE4aUpBVGNEbUFGQkFDMEFpb29CSVFoQkFDMEFpWW9CSVFsQkFDa0R3SWtCSVFwQkFDMEFpSW9CSVFzZ0FVR3dBV3BCQUNrRDRJa0JOd01BSUFGQnVBRnFRUUFwQStpSkFUY0RBQ0FCUWNBQmFrRUFLUVB3aVFFM0F3QWdBVUhJQVdwQkFDa0QrSWtCTndNQUlBRkIwQUZxUVFBcEE0Q0tBVGNEQUNBQklBczZBTmdCSUFFZ0NqY0RrQUVnQVNBSUlBbEZja0VDY2lJSU9nRFpBU0FCSUFjM0EvZ0JJQUVnQmpjRDhBRWdBU0FGTndQb0FTQUJJQVEzQStBQklBRWdBVUhnQVdvZ0FVR1lBV29nQ3lBS0lBaEIvd0Z4RUFJZ0FTa0RJQ0VFSUFFcEF3QWhCU0FCS1FNb0lRWWdBU2tEQ0NFSElBRXBBekFoRENBQktRTVFJUTBnQVNrRE9DRU9JQUVwQXhnaER5QUtFQVZCQUVJQU53T0FpZ0ZCQUVJQU53UDRpUUZCQUVJQU53UHdpUUZCQUVJQU53UG9pUUZCQUVJQU53UGdpUUZCQUVJQU53UFlpUUZCQUVJQU53UFFpUUZCQUVJQU53UElpUUZCQUVFQUtRT0FpUUUzQTZDSkFVRUFRUUFwQTRpSkFUY0RxSWtCUVFCQkFDa0RrSWtCTndPd2lRRkJBRUVBS1FPWWlRRTNBN2lKQVVFQVFRQXRBSkNLQVNJTFFRRnFPZ0NRaWdGQkFFRUFLUVBBaVFGQ0FYdzNBOENKQVNBTFFRVjBJZ3RCcVlvQmFpQU9JQStGTndNQUlBdEJvWW9CYWlBTUlBMkZOd01BSUF0Qm1Zb0JhaUFHSUFlRk53TUFJQXRCa1lvQmFpQUVJQVdGTndNQVFRQkJBRHNCaUlvQklBSkJnQWxxSVFNTEFrQWdBRUdCQ0VrTkFDQUJRZFFDYWlFUVFRQXBBOENKQVNFRUlBRkJLR29oRVFOQUlBUkNDb1loQ2tJQklBQkJBWEt0ZVVJL2hZYW5JUUlEUUNBQ0loSkJBWFloQWlBS0lCSkJmMnF0ZzBJQVVnMEFDeUFTUVFwMnJTRVRBa0FDUUNBU1FZQUlTdzBBSUFGQkFEc0IyQUVnQVVJQU53UFFBU0FCUWdBM0E4Z0JJQUZDQURjRHdBRWdBVUlBTndPNEFTQUJRZ0EzQTdBQklBRkNBRGNEcUFFZ0FVSUFOd09nQVNBQlFnQTNBNWdCSUFGQkFDa0RnSWtCTndOd0lBRkJBQ2tEaUlrQk53TjRJQUZCQUNrRGtJa0JOd09BQVNBQlFRQXRBSXFLQVRvQTJnRWdBVUVBS1FPWWlRRTNBNGdCSUFFZ0JEY0RrQUVnQVVId0FHb2dBeUFTRUFRZ0FTQUJLUU53SWdRM0F3QWdBU0FCS1FONElnVTNBd2dnQVNBQktRT0FBU0lHTndNUUlBRWdBU2tEaUFFaUJ6Y0RHQ0FCSUFFcEE1Z0JOd01vSUFFZ0FTa0RvQUUzQXpBZ0FTQUJLUU9vQVRjRE9DQUJMUURhQVNFQ0lBRXRBTmtCSVFzZ0FTa0RrQUVoQ2lBQklBRXRBTmdCSWdnNkFHZ2dBU0FLTndNZ0lBRWdBU2tEc0FFM0EwQWdBU0FCS1FPNEFUY0RTQ0FCSUFFcEE4QUJOd05RSUFFZ0FTa0R5QUUzQTFnZ0FTQUJLUVBRQVRjRFlDQUJJQUlnQzBWeVFRSnlJZ0k2QUdrZ0FTQUhOd080QWlBQklBWTNBN0FDSUFFZ0JUY0RxQUlnQVNBRU53T2dBaUFCUWVBQmFpQUJRYUFDYWlBUklBZ2dDaUFDUWY4QmNSQUNJQUVwQTRBQ0lRUWdBU2tENEFFaEJTQUJLUU9JQWlFR0lBRXBBK2dCSVFjZ0FTa0RrQUloRENBQktRUHdBU0VOSUFFcEE1Z0NJUTRnQVNrRCtBRWhEeUFLRUFWQkFFRUFMUUNRaWdFaUFrRUJham9Ba0lvQklBSkJCWFFpQWtHcGlnRnFJQTRnRDRVM0F3QWdBa0doaWdGcUlBd2dEWVUzQXdBZ0FrR1ppZ0ZxSUFZZ0I0VTNBd0FnQWtHUmlnRnFJQVFnQllVM0F3QU1BUXNDUUFKQUlBTWdFaUFFUVFBdEFJcUtBU0lDSUFFUUJpSVVRUUpMRFFBZ0FTa0RHQ0VLSUFFcEF4QWhCQ0FCS1FNSUlRVWdBU2tEQUNFR0RBRUxJQUpCQkhJaEZVRUFLUU9ZaVFFaERVRUFLUU9RaVFFaERrRUFLUU9JaVFFaEQwRUFLUU9BaVFFaEZnTkFJQlJCZm1vaUYwRUJkaUlZUVFGcUlobEJBM0VoQ0VFQUlRa0NRQ0FYUVFaSkRRQWdHVUY4Y1NFYVFRQWhDU0FCSVFJZ0VDRUxBMEFnQ3lBQ1FjQUJhallDQUNBTFFYeHFJQUpCZ0FGcU5nSUFJQXRCZUdvZ0FrSEFBR28yQWdBZ0MwRjBhaUFDTmdJQUlBSkJnQUpxSVFJZ0MwRVFhaUVMSUJvZ0NVRUVhaUlKUncwQUN3c0NRQ0FJUlEwQUlBRWdDVUVHZEdvaEFpQUJRY2dDYWlBSlFRSjBhaUVMQTBBZ0N5QUNOZ0lBSUFKQndBQnFJUUlnQzBFRWFpRUxJQWhCZjJvaUNBMEFDd3NnQVVISUFtb2hDeUFCUWFBQ2FpRUNJQmtoQ0FOQUlBc29BZ0FoQ1NBQklBMDNBL2dCSUFFZ0RqY0Q4QUVnQVNBUE53UG9BU0FCSUJZM0ErQUJJQUZCOEFCcUlBRkI0QUZxSUFsQndBQkNBQ0FWRUFJZ0FTa0RrQUVoQ2lBQktRTndJUVFnQVNrRG1BRWhCU0FCS1FONElRWWdBU2tEb0FFaEJ5QUJLUU9BQVNFTUlBSkJHR29nQVNrRHFBRWdBU2tEaUFHRk53TUFJQUpCRUdvZ0J5QU1oVGNEQUNBQ1FRaHFJQVVnQm9VM0F3QWdBaUFLSUFTRk53TUFJQUpCSUdvaEFpQUxRUVJxSVFzZ0NFRi9haUlJRFFBTEFrQUNRQ0FYUVg1eFFRSnFJQlJKRFFBZ0dTRVVEQUVMSUFGQm9BSnFJQmxCQlhScUlnSWdBU0FaUVFaMGFpSUxLUU1BTndNQUlBSWdDeWtEQ0RjRENDQUNJQXNwQXhBM0F4QWdBaUFMS1FNWU53TVlJQmhCQW1vaEZBc2dBU0FCS1FPZ0FpSUdOd01BSUFFZ0FTa0RxQUlpQlRjRENDQUJJQUVwQTdBQ0lnUTNBeEFnQVNBQktRTzRBaUlLTndNWUlCUkJBa3NOQUFzTElBRXBBeUFoQnlBQktRTW9JUXdnQVNrRE1DRU5JQUVwQXpnaERrRUFLUVBBaVFFUUJVRUFRUUF0QUpDS0FTSUNRUUZxT2dDUWlnRWdBa0VGZENJQ1FhbUtBV29nQ2pjREFDQUNRYUdLQVdvZ0JEY0RBQ0FDUVptS0FXb2dCVGNEQUNBQ1FaR0tBV29nQmpjREFFRUFLUVBBaVFFZ0UwSUJpSHdRQlVFQVFRQXRBSkNLQVNJQ1FRRnFPZ0NRaWdFZ0FrRUZkQ0lDUWFtS0FXb2dEamNEQUNBQ1FhR0tBV29nRFRjREFDQUNRWm1LQVdvZ0REY0RBQ0FDUVpHS0FXb2dCemNEQUF0QkFFRUFLUVBBaVFFZ0Uzd2lCRGNEd0lrQklBTWdFbW9oQXlBQUlCSnJJZ0JCZ0FoTERRQUxJQUJGRFFFTFFhQ0pBU0FESUFBUUJFRUFLUVBBaVFFUUJRc2dBVUhRQW1va0FBdUdCd0lKZndGK0l3QkJ3QUJySWdNa0FBSkFBa0FnQUMwQWFDSUVSUTBBQWtCQndBQWdCR3NpQlNBQ0lBVWdBa2tiSWdaRkRRQWdCa0VEY1NFSFFRQWhCUUpBSUFaQkJFa05BQ0FBSUFScUlRZ2dCa0Y4Y1NFSlFRQWhCUU5BSUFnZ0JXb2lDa0VvYWlBQklBVnFJZ3N0QUFBNkFBQWdDa0VwYWlBTFFRRnFMUUFBT2dBQUlBcEJLbW9nQzBFQ2FpMEFBRG9BQUNBS1FTdHFJQXRCQTJvdEFBQTZBQUFnQ1NBRlFRUnFJZ1ZIRFFBTEN3SkFJQWRGRFFBZ0FTQUZhaUVLSUFVZ0JHb2dBR3BCS0dvaEJRTkFJQVVnQ2kwQUFEb0FBQ0FLUVFGcUlRb2dCVUVCYWlFRklBZEJmMm9pQncwQUN3c2dBQzBBYUNFRUN5QUFJQVFnQm1vaUJ6b0FhQ0FCSUFacUlRRUNRQ0FDSUFacklnSU5BRUVBSVFJTUFnc2dBeUFBSUFCQktHcEJ3QUFnQUNrRElDQUFMUUJxSUFCQjZRQnFJZ1V0QUFBaUNrVnlFQUlnQUNBREtRTWdJQU1wQXdDRk53TUFJQUFnQXlrREtDQURLUU1JaFRjRENDQUFJQU1wQXpBZ0F5a0RFSVUzQXhBZ0FDQURLUU00SUFNcEF4aUZOd01ZSUFCQkFEb0FhQ0FGSUFwQkFXbzZBQUFnQUVIZ0FHcENBRGNEQUNBQVFkZ0Fha0lBTndNQUlBQkIwQUJxUWdBM0F3QWdBRUhJQUdwQ0FEY0RBQ0FBUWNBQWFrSUFOd01BSUFCQk9HcENBRGNEQUNBQVFUQnFRZ0EzQXdBZ0FFSUFOd01vQzBFQUlRY2dBa0hCQUVrTkFDQUFRZWtBYWlJS0xRQUFJUVVnQUMwQWFpRUxJQUFwQXlBaERBTkFJQU1nQUNBQlFjQUFJQXdnQ3lBRlFmOEJjVVZ5UWY4QmNSQUNJQUFnQXlrRElDQURLUU1BaFRjREFDQUFJQU1wQXlnZ0F5a0RDSVUzQXdnZ0FDQURLUU13SUFNcEF4Q0ZOd01RSUFBZ0F5a0RPQ0FES1FNWWhUY0RHQ0FLSUFWQkFXb2lCVG9BQUNBQlFjQUFhaUVCSUFKQlFHb2lBa0hBQUVzTkFBc0xBa0JCd0FBZ0IwSC9BWEVpQm1zaUJTQUNJQVVnQWtrYklnbEZEUUFnQ1VFRGNTRUxRUUFoQlFKQUlBbEJCRWtOQUNBQUlBWnFJUWNnQ1VIOEFIRWhDRUVBSVFVRFFDQUhJQVZxSWdKQktHb2dBU0FGYWlJS0xRQUFPZ0FBSUFKQktXb2dDa0VCYWkwQUFEb0FBQ0FDUVNwcUlBcEJBbW90QUFBNkFBQWdBa0VyYWlBS1FRTnFMUUFBT2dBQUlBZ2dCVUVFYWlJRlJ3MEFDd3NDUUNBTFJRMEFJQUVnQldvaEFTQUZJQVpxSUFCcVFTaHFJUVVEUUNBRklBRXRBQUE2QUFBZ0FVRUJhaUVCSUFWQkFXb2hCU0FMUVg5cUlnc05BQXNMSUFBdEFHZ2hCd3NnQUNBSElBbHFPZ0JvSUFOQndBQnFKQUFMM2dNRUJYOERmZ1YvQm40akFFSFFBV3NpQVNRQUFrQWdBSHVuSWdKQkFDMEFrSW9CSWdOUERRQkJBQzBBaW9vQlFRUnlJUVFnQVVFb2FpRUZRUUFwQTVpSkFTRUFRUUFwQTVDSkFTRUdRUUFwQTRpSkFTRUhRUUFwQTRDSkFTRUlJQU1oQ1FOQUlBRWdBRGNER0NBQklBWTNBeEFnQVNBSE53TUlJQUVnQ0RjREFDQUJJQU5CQlhRaUEwSFJpUUZxSWdvcEF3QTNBeWdnQVNBRFFkbUpBV29pQ3lrREFEY0RNQ0FCSUFOQjRZa0JhaUlNS1FNQU53TTRJQUVnQTBIcGlRRnFJZzBwQXdBM0EwQWdBU0FEUWZHSkFXb3BBd0EzQTBnZ0FTQURRZm1KQVdvcEF3QTNBMUFnQVNBRFFZR0tBV29wQXdBM0ExZ2dBMEdKaWdGcUtRTUFJUTRnQVVIQUFEb0FhQ0FCSUE0M0EyQWdBVUlBTndNZ0lBRWdCRG9BYVNBQklBQTNBNGdCSUFFZ0JqY0RnQUVnQVNBSE53TjRJQUVnQ0RjRGNDQUJRWkFCYWlBQlFmQUFhaUFGUWNBQVFnQWdCRUgvQVhFUUFpQUJLUU93QVNFT0lBRXBBNUFCSVE4Z0FTa0R1QUVoRUNBQktRT1lBU0VSSUFFcEE4QUJJUklnQVNrRG9BRWhFeUFOSUFFcEE4Z0JJQUVwQTZnQmhUY0RBQ0FNSUJJZ0U0VTNBd0FnQ3lBUUlCR0ZOd01BSUFvZ0RpQVBoVGNEQUNBSlFYOXFJZ2xCL3dGeElnTWdBa3NOQUF0QkFDQUpPZ0NRaWdFTElBRkIwQUZxSkFBTHd3a0NDbjhGZmlNQVFlQUNheUlGSkFBQ1FBSkFJQUZCZ0FoTERRQWdCU0FBTmdMOEFTQUZRZndCYWlBQlFZQUlSaUlHUVJBZ0FrRUJJQU5CQVVFQ0lBUVFBU0FHUVFwMElnY2dBVThOQVNBRlFlQUFhaUlHUWdBM0F3QWdCVUhZQUdvaUNFSUFOd01BSUFWQjBBQnFJZ2xDQURjREFDQUZRY2dBYWlJS1FnQTNBd0FnQlVIQUFHb2lDMElBTndNQUlBVkJPR29pREVJQU53TUFJQVZCTUdvaURVSUFOd01BSUFVZ0F6b0FhaUFGUWdBM0F5Z2dCVUVBT3dGb0lBVkJBQ2tEZ0lrQk53TUFJQVZCQUNrRGlJa0JOd01JSUFWQkFDa0RrSWtCTndNUUlBVkJBQ2tEbUlrQk53TVlJQVVnQVVHQUNFWWlEcTBnQW53M0F5QWdCU0FBSUFkcVFRQWdBU0FPR3hBRUlBVkJpQUZxUVRCcUlBMHBBd0EzQXdBZ0JVR0lBV3BCT0dvZ0RDa0RBRGNEQUNBRklBVXBBd0FpRHpjRGlBRWdCU0FGS1FNSUloQTNBNUFCSUFVZ0JTa0RFQ0lSTndPWUFTQUZJQVVwQXhnaUVqY0RvQUVnQlNBRktRTW9Od093QVNBRkxRQnFJUUFnQlMwQWFTRUhJQVVwQXlBaEFpQUZMUUJvSVFFZ0JVR0lBV3BCd0FCcUlBc3BBd0EzQXdBZ0JVR0lBV3BCeUFCcUlBb3BBd0EzQXdBZ0JVR0lBV3BCMEFCcUlBa3BBd0EzQXdBZ0JVR0lBV3BCMkFCcUlBZ3BBd0EzQXdBZ0JVR0lBV3BCNEFCcUlBWXBBd0EzQXdBZ0JTQUJPZ0R3QVNBRklBSTNBNmdCSUFVZ0FDQUhSWEpCQW5JaUFEb0E4UUVnQlNBU053T1lBaUFGSUJFM0E1QUNJQVVnRURjRGlBSWdCU0FQTndPQUFpQUZRYUFDYWlBRlFZQUNhaUFGUWJBQmFpQUJJQUlnQUVIL0FYRVFBaUFGS1FQQUFpRUNJQVVwQTZBQ0lROGdCU2tEeUFJaEVDQUZLUU9vQWlFUklBVXBBOUFDSVJJZ0JTa0RzQUloRXlBRUlBNUJCWFJxSWdFZ0JTa0QyQUlnQlNrRHVBS0ZOd01ZSUFFZ0VpQVRoVGNERUNBQklCQWdFWVUzQXdnZ0FTQUNJQStGTndNQVFRSkJBU0FPR3lFR0RBRUxJQUJDQVNBQlFYOXFRUXAyUVFGeXJYbENQNFdHSWcrblFRcDBJZzRnQWlBRElBVVFCaUVISUFBZ0Rtb2dBU0FPYXlBUFF2Ly8vd0dESUFKOElBTWdCVUhBQUVFZ0lBNUJnQWhMRzJvUUJpRUJBa0FnQjBFQlJ3MEFJQVFnQlNrREFEY0RBQ0FFSUFVcEF3ZzNBd2dnQkNBRktRTVFOd01RSUFRZ0JTa0RHRGNER0NBRUlBVXBBeUEzQXlBZ0JDQUZLUU1vTndNb0lBUWdCU2tETURjRE1DQUVJQVVwQXpnM0F6aEJBaUVHREFFTFFRQWhCa0VBSVFBQ1FDQUJJQWRxSWdsQkFra05BQ0FKUVg1cUlncEJBWFpCQVdvaUJrRURjU0VPUVFBaEJ3SkFJQXBCQmtrTkFDQUdRWHh4SVFnZ0JVR1VBV29oQVVFQUlRY2dCU0VBQTBBZ0FTQUFRY0FCYWpZQ0FDQUJRWHhxSUFCQmdBRnFOZ0lBSUFGQmVHb2dBRUhBQUdvMkFnQWdBVUYwYWlBQU5nSUFJQUJCZ0FKcUlRQWdBVUVRYWlFQklBZ2dCMEVFYWlJSFJ3MEFDd3NnQ2tGK2NTRUlBa0FnRGtVTkFDQUZJQWRCQm5ScUlRRWdCVUdJQVdvZ0IwRUNkR29oQUFOQUlBQWdBVFlDQUNBQlFjQUFhaUVCSUFCQkJHb2hBQ0FPUVg5cUlnNE5BQXNMSUFoQkFtb2hBQXNnQlVHSUFXb2dCa0VCUWdCQkFDQURRUVJ5UVFCQkFDQUVFQUVnQUNBSlR3MEFJQVFnQmtFRmRHb2lBU0FGSUFaQkJuUnFJZ0FwQXdBM0F3QWdBU0FBS1FNSU53TUlJQUVnQUNrREVEY0RFQ0FCSUFBcEF4ZzNBeGdnQmtFQmFpRUdDeUFGUWVBQ2FpUUFJQVlMclJBSUFuOEVmZ0YvQVg0RWZ3UitCSDhFZmlNQVFmQUJheUlCSkFBQ1FDQUFSUTBBQWtCQkFDMEFrSW9CSWdJTkFDQUJRVEJxUVFBcEE5Q0pBVGNEQUNBQlFUaHFRUUFwQTlpSkFUY0RBQ0FCUVFBcEE2Q0pBU0lETndNQUlBRkJBQ2tEcUlrQklnUTNBd2dnQVVFQUtRT3dpUUVpQlRjREVDQUJRUUFwQTdpSkFTSUdOd01ZSUFGQkFDa0R5SWtCTndNb1FRQXRBSXFLQVNFQ1FRQXRBSW1LQVNFSFFRQXBBOENKQVNFSVFRQXRBSWlLQVNFSklBRkJ3QUJxUVFBcEErQ0pBVGNEQUNBQlFjZ0Fha0VBS1FQb2lRRTNBd0FnQVVIUUFHcEJBQ2tEOElrQk53TUFJQUZCMkFCcVFRQXBBL2lKQVRjREFDQUJRZUFBYWtFQUtRT0FpZ0UzQXdBZ0FTQUpPZ0JvSUFFZ0NEY0RJQ0FCSUFJZ0IwVnlJZ0pCQW5JNkFHa2dBVUVvYWlFS1FnQWhDRUdBQ1NFTElBSkJDbkpCL3dGeElRd0RRQ0FCUWJBQmFpQUJJQW9nQ1VIL0FYRWdDQ0FNRUFJZ0FTQUJLUVBRQVNJTklBRXBBN0FCaFRjRGNDQUJJQUVwQTlnQklnNGdBU2tEdUFHRk53TjRJQUVnQVNrRDRBRWlEeUFCS1FQQUFZVTNBNEFCSUFFZ0FTa0Q2QUVpRUNBR2hUY0RxQUVnQVNBUElBV0ZOd09nQVNBQklBNGdCSVUzQTVnQklBRWdEU0FEaFRjRGtBRWdBU0FRSUFFcEE4Z0JoVGNEaUFFZ0FFSEFBQ0FBUWNBQVNSc2lFVUYvYWlFU0FrQUNRQ0FSUVFkeEloTU5BQ0FCUWZBQWFpRUNJQXNoQnlBUklSUU1BUXNnRVVINEFIRWhGQ0FCUWZBQWFpRUNJQXNoQndOQUlBY2dBaTBBQURvQUFDQUhRUUZxSVFjZ0FrRUJhaUVDSUJOQmYyb2lFdzBBQ3dzQ1FDQVNRUWRKRFFBRFFDQUhJQUlwQUFBM0FBQWdCMEVJYWlFSElBSkJDR29oQWlBVVFYaHFJaFFOQUFzTElBaENBWHdoQ0NBTElCRnFJUXNnQUNBUmF5SUFEUUFNQWdzTEFrQUNRQUpBUVFBdEFJbUtBU0lIUVFaMFFRQkJBQzBBaUlvQkloRnJSZzBBSUFFZ0VUb0FhQ0FCUVFBcEE0Q0tBVGNEWUNBQlFRQXBBL2lKQVRjRFdDQUJRUUFwQS9DSkFUY0RVQ0FCUVFBcEEraUpBVGNEU0NBQlFRQXBBK0NKQVRjRFFDQUJRUUFwQTlpSkFUY0RPQ0FCUVFBcEE5Q0pBVGNETUNBQlFRQXBBOGlKQVRjREtDQUJRUUFwQThDSkFTSUlOd01nSUFGQkFDa0R1SWtCSWdNM0F4Z2dBVUVBS1FPd2lRRWlCRGNERUNBQlFRQXBBNmlKQVNJRk53TUlJQUZCQUNrRG9Ja0JJZ1kzQXdBZ0FVRUFMUUNLaWdFaUV5QUhSWEpCQW5JaUN6b0FhU0FUUVFSeUlSTkJBQ2tEbUlrQklRMUJBQ2tEa0lrQklRNUJBQ2tEaUlrQklROUJBQ2tEZ0lrQklSQU1BUXRCd0FBaEVTQUJRY0FBT2dCb1FnQWhDQ0FCUWdBM0F5QWdBVUVBS1FPWWlRRWlEVGNER0NBQlFRQXBBNUNKQVNJT053TVFJQUZCQUNrRGlJa0JJZzgzQXdnZ0FVRUFLUU9BaVFFaUVEY0RBQ0FCUVFBdEFJcUtBVUVFY2lJVE9nQnBJQUVnQWtGK2FpSUNRUVYwSWdkQnlZb0JhaWtEQURjRFlDQUJJQWRCd1lvQmFpa0RBRGNEV0NBQklBZEJ1WW9CYWlrREFEY0RVQ0FCSUFkQnNZb0JhaWtEQURjRFNDQUJJQWRCcVlvQmFpa0RBRGNEUUNBQklBZEJvWW9CYWlrREFEY0RPQ0FCSUFkQm1Zb0JhaWtEQURjRE1DQUJJQWRCa1lvQmFpa0RBRGNES0NBVElRc2dFQ0VHSUE4aEJTQU9JUVFnRFNFRElBSkZEUUVMSUFKQmYyb2lCMEVGZENJVVFaR0tBV29wQXdBaEZTQVVRWm1LQVdvcEF3QWhGaUFVUWFHS0FXb3BBd0FoRnlBVVFhbUtBV29wQXdBaEdDQUJJQU0zQTRnQklBRWdCRGNEZ0FFZ0FTQUZOd040SUFFZ0JqY0RjQ0FCUWJBQmFpQUJRZkFBYWlBQlFTaHFJaFFnRVNBSUlBdEIvd0Z4RUFJZ0FTQVRPZ0JwSUFGQndBQTZBR2dnQVNBWU53TkFJQUVnRnpjRE9DQUJJQlkzQXpBZ0FTQVZOd01vSUFGQ0FEY0RJQ0FCSUEwM0F4Z2dBU0FPTndNUUlBRWdEemNEQ0NBQklCQTNBd0FnQVNBQktRUG9BU0FCS1FQSUFZVTNBMkFnQVNBQktRUGdBU0FCS1FQQUFZVTNBMWdnQVNBQktRUFlBU0FCS1FPNEFZVTNBMUFnQVNBQktRUFFBU0FCS1FPd0FZVTNBMGdnQjBVTkFDQUNRUVYwUWVtSkFXb2hBaUFUUWY4QmNTRVJBMEFnQWtGb2Fpa0RBQ0VJSUFKQmNHb3BBd0FoQXlBQ1FYaHFLUU1BSVFRZ0Fpa0RBQ0VGSUFFZ0RUY0RpQUVnQVNBT053T0FBU0FCSUE4M0EzZ2dBU0FRTndOd0lBRkJzQUZxSUFGQjhBQnFJQlJCd0FCQ0FDQVJFQUlnQVNBVE9nQnBJQUZCd0FBNkFHZ2dBU0FGTndOQUlBRWdCRGNET0NBQklBTTNBekFnQVNBSU53TW9JQUZDQURjRElDQUJJQTAzQXhnZ0FTQU9Od01RSUFFZ0R6Y0RDQ0FCSUJBM0F3QWdBU0FCS1FQb0FTQUJLUVBJQVlVM0EyQWdBU0FCS1FQZ0FTQUJLUVBBQVlVM0ExZ2dBU0FCS1FQWUFTQUJLUU80QVlVM0ExQWdBU0FCS1FQUUFTQUJLUU93QVlVM0EwZ2dBa0ZnYWlFQ0lBZEJmMm9pQncwQUN3c2dBVUVvYWlFSlFnQWhDRUdBQ1NFTElCTkJDSEpCL3dGeElRb0RRQ0FCUWJBQmFpQUJJQWxCd0FBZ0NDQUtFQUlnQVNBQktRUFFBU0lESUFFcEE3QUJoVGNEY0NBQklBRXBBOWdCSWdRZ0FTa0R1QUdGTndONElBRWdBU2tENEFFaUJTQUJLUVBBQVlVM0E0QUJJQUVnRFNBQktRUG9BU0lHaFRjRHFBRWdBU0FPSUFXRk53T2dBU0FCSUE4Z0JJVTNBNWdCSUFFZ0VDQURoVGNEa0FFZ0FTQUdJQUVwQThnQmhUY0RpQUVnQUVIQUFDQUFRY0FBU1JzaUVVRi9haUVTQWtBQ1FDQVJRUWR4SWhNTkFDQUJRZkFBYWlFQ0lBc2hCeUFSSVJRTUFRc2dFVUg0QUhFaEZDQUJRZkFBYWlFQ0lBc2hCd05BSUFjZ0FpMEFBRG9BQUNBSFFRRnFJUWNnQWtFQmFpRUNJQk5CZjJvaUV3MEFDd3NDUUNBU1FRZEpEUUFEUUNBSElBSXBBQUEzQUFBZ0IwRUlhaUVISUFKQkNHb2hBaUFVUVhocUloUU5BQXNMSUFoQ0FYd2hDQ0FMSUJGcUlRc2dBQ0FSYXlJQURRQUxDeUFCUWZBQmFpUUFDNk1DQVFSK0FrQUNRQ0FBUVNCR0RRQkNxN09QL0pHanMvRGJBQ0VCUXYra3VZakZrZHFDbTM4aEFrTHk1cnZqbzZmOXA2Vi9JUU5DNTh5bjBOYlE2N083ZnlFRVFRQWhBQXdCQzBFQUtRT1lDU0VCUVFBcEE1QUpJUUpCQUNrRGlBa2hBMEVBS1FPQUNTRUVRUkFoQUF0QkFDQUFPZ0NLaWdGQkFFSUFOd09BaWdGQkFFSUFOd1A0aVFGQkFFSUFOd1B3aVFGQkFFSUFOd1BvaVFGQkFFSUFOd1BnaVFGQkFFSUFOd1BZaVFGQkFFSUFOd1BRaVFGQkFFSUFOd1BJaVFGQkFFSUFOd1BBaVFGQkFDQUJOd080aVFGQkFDQUNOd093aVFGQkFDQUROd09vaVFGQkFDQUVOd09naVFGQkFDQUJOd09ZaVFGQkFDQUNOd09RaVFGQkFDQUROd09JaVFGQkFDQUVOd09BaVFGQkFFRUFPZ0NRaWdGQkFFRUFPd0dJaWdFTEJnQWdBQkFEQ3dZQUlBQVFCd3NHQUVHQWlRRUxxd0lCQkg0Q1FBSkFJQUZCSUVZTkFFS3JzNC84a2FPejhOc0FJUU5DLzZTNWlNV1Iyb0tiZnlFRVF2TG11K09qcC8ybnBYOGhCVUxuektmUTF0RHJzN3QvSVFaQkFDRUJEQUVMUVFBcEE1Z0pJUU5CQUNrRGtBa2hCRUVBS1FPSUNTRUZRUUFwQTRBSklRWkJFQ0VCQzBFQUlBRTZBSXFLQVVFQVFnQTNBNENLQVVFQVFnQTNBL2lKQVVFQVFnQTNBL0NKQVVFQVFnQTNBK2lKQVVFQVFnQTNBK0NKQVVFQVFnQTNBOWlKQVVFQVFnQTNBOUNKQVVFQVFnQTNBOGlKQVVFQVFnQTNBOENKQVVFQUlBTTNBN2lKQVVFQUlBUTNBN0NKQVVFQUlBVTNBNmlKQVVFQUlBWTNBNkNKQVVFQUlBTTNBNWlKQVVFQUlBUTNBNUNKQVVFQUlBVTNBNGlKQVVFQUlBWTNBNENKQVVFQVFRQTZBSkNLQVVFQVFRQTdBWWlLQVNBQUVBTWdBaEFIQ3dzTEFRQkJnQWdMQkhnSEFBQT1cIjtcbnZhciBoYXNoJGcgPSBcIjU0MGU4YjhlXCI7XG52YXIgd2FzbUpzb24kZyA9IHtcblx0bmFtZTogbmFtZSRnLFxuXHRkYXRhOiBkYXRhJGcsXG5cdGhhc2g6IGhhc2gkZ1xufTtcblxuY29uc3QgbXV0ZXgkaSA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSRpID0gbnVsbDtcbmZ1bmN0aW9uIHZhbGlkYXRlQml0cyQyKGJpdHMpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYml0cykgfHwgYml0cyA8IDggfHwgYml0cyAlIDggIT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCB2YXJpYW50ISBWYWxpZCB2YWx1ZXM6IDgsIDE2LCAuLi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgQkxBS0UzIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMsIHdoaWNoIGhhcyB0byBiZSBhIG51bWJlclxuICogICAgICAgICAgICAgZGl2aXNpYmxlIGJ5IDguIERlZmF1bHRzIHRvIDI1Ni5cbiAqIEBwYXJhbSBrZXkgT3B0aW9uYWwga2V5IChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KS4gTGVuZ3RoIHNob3VsZCBiZSAzMiBieXRlcy5cbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmxha2UzKGRhdGEsIGJpdHMgPSAyNTYsIGtleSA9IG51bGwpIHtcbiAgICBpZiAodmFsaWRhdGVCaXRzJDIoYml0cykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlQml0cyQyKGJpdHMpKTtcbiAgICB9XG4gICAgbGV0IGtleUJ1ZmZlciA9IG51bGw7XG4gICAgbGV0IGluaXRQYXJhbSA9IDA7IC8vIGtleSBpcyBlbXB0eSBieSBkZWZhdWx0XG4gICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICBrZXlCdWZmZXIgPSBnZXRVSW50OEJ1ZmZlcihrZXkpO1xuICAgICAgICBpZiAoa2V5QnVmZmVyLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ0tleSBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDMyIGJ5dGVzJykpO1xuICAgICAgICB9XG4gICAgICAgIGluaXRQYXJhbSA9IDMyO1xuICAgIH1cbiAgICBjb25zdCBoYXNoTGVuZ3RoID0gYml0cyAvIDg7XG4gICAgY29uc3QgZGlnZXN0UGFyYW0gPSBoYXNoTGVuZ3RoO1xuICAgIGlmICh3YXNtQ2FjaGUkaSA9PT0gbnVsbCB8fCB3YXNtQ2FjaGUkaS5oYXNoTGVuZ3RoICE9PSBoYXNoTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkaSwgd2FzbUpzb24kZywgaGFzaExlbmd0aClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkaSA9IHdhc207XG4gICAgICAgICAgICBpZiAoaW5pdFBhcmFtID09PSAzMikge1xuICAgICAgICAgICAgICAgIHdhc21DYWNoZSRpLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGkuY2FsY3VsYXRlKGRhdGEsIGluaXRQYXJhbSwgZGlnZXN0UGFyYW0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGluaXRQYXJhbSA9PT0gMzIpIHtcbiAgICAgICAgICAgIHdhc21DYWNoZSRpLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSRpLmNhbGN1bGF0ZShkYXRhLCBpbml0UGFyYW0sIGRpZ2VzdFBhcmFtKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQkxBS0UzIGhhc2ggaW5zdGFuY2VcbiAqIEBwYXJhbSBiaXRzIE51bWJlciBvZiBvdXRwdXQgYml0cywgd2hpY2ggaGFzIHRvIGJlIGEgbnVtYmVyXG4gKiAgICAgICAgICAgICBkaXZpc2libGUgYnkgOC4gRGVmYXVsdHMgdG8gMjU2LlxuICogQHBhcmFtIGtleSBPcHRpb25hbCBrZXkgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpLiBMZW5ndGggc2hvdWxkIGJlIDMyIGJ5dGVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCTEFLRTMoYml0cyA9IDI1Niwga2V5ID0gbnVsbCkge1xuICAgIGlmICh2YWxpZGF0ZUJpdHMkMihiaXRzKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVCaXRzJDIoYml0cykpO1xuICAgIH1cbiAgICBsZXQga2V5QnVmZmVyID0gbnVsbDtcbiAgICBsZXQgaW5pdFBhcmFtID0gMDsgLy8ga2V5IGlzIGVtcHR5IGJ5IGRlZmF1bHRcbiAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGtleUJ1ZmZlciA9IGdldFVJbnQ4QnVmZmVyKGtleSk7XG4gICAgICAgIGlmIChrZXlCdWZmZXIubGVuZ3RoICE9PSAzMikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignS2V5IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgMzIgYnl0ZXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdFBhcmFtID0gMzI7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dFNpemUgPSBiaXRzIC8gODtcbiAgICBjb25zdCBkaWdlc3RQYXJhbSA9IG91dHB1dFNpemU7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kZywgb3V0cHV0U2l6ZSkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICBpZiAoaW5pdFBhcmFtID09PSAzMikge1xuICAgICAgICAgICAgd2FzbS53cml0ZU1lbW9yeShrZXlCdWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHdhc20uaW5pdChpbml0UGFyYW0pO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiBpbml0UGFyYW0gPT09IDMyXG4gICAgICAgICAgICAgICAgPyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdhc20ud3JpdGVNZW1vcnkoa2V5QnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgd2FzbS5pbml0KGluaXRQYXJhbSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3YXNtLmluaXQoaW5pdFBhcmFtKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUsIGRpZ2VzdFBhcmFtKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IG91dHB1dFNpemUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJGYgPSBcImNyYzMyXCI7XG52YXIgZGF0YSRmID0gXCJBR0Z6YlFFQUFBQUJFUVJnQUFGL1lBRi9BR0FBQUdBQ2YzOEFBd2dIQUFFQkFRSUFBd1VFQVFFQ0FnWU9BbjhCUVpESkJRdC9BRUdBQ0FzSGNBZ0diV1Z0YjNKNUFnQU9TR0Z6YUY5SFpYUkNkV1ptWlhJQUFBbElZWE5vWDBsdWFYUUFBZ3RJWVhOb1gxVndaR0YwWlFBRENraGhjMmhmUm1sdVlXd0FCQTFJWVhOb1gwZGxkRk4wWVhSbEFBVU9TR0Z6YUY5RFlXeGpkV3hoZEdVQUJncFRWRUZVUlY5VFNWcEZBd0VLa2dnSEJRQkJnQWtMd3dNQkEzOUJnSWtCSVFGQkFDRUNBMEFnQVVFQVFRQkJBRUVBUVFCQkFFRUFRUUFnQWtFQmNXc2dBSEVnQWtFQmRuTWlBMEVCY1dzZ0FIRWdBMEVCZG5NaUEwRUJjV3NnQUhFZ0EwRUJkbk1pQTBFQmNXc2dBSEVnQTBFQmRuTWlBMEVCY1dzZ0FIRWdBMEVCZG5NaUEwRUJjV3NnQUhFZ0EwRUJkbk1pQTBFQmNXc2dBSEVnQTBFQmRuTWlBMEVCY1dzZ0FIRWdBMEVCZG5NMkFnQWdBVUVFYWlFQklBSkJBV29pQWtHQUFrY05BQXRCQUNFQUEwQWdBRUdFa1FGcUlBQkJoSWtCYWlnQ0FDSUNRZjhCY1VFQ2RFR0FpUUZxS0FJQUlBSkJDSFp6SWdJMkFnQWdBRUdFbVFGcUlBSkIvd0Z4UVFKMFFZQ0pBV29vQWdBZ0FrRUlkbk1pQWpZQ0FDQUFRWVNoQVdvZ0FrSC9BWEZCQW5SQmdJa0JhaWdDQUNBQ1FRaDJjeUlDTmdJQUlBQkJoS2tCYWlBQ1FmOEJjVUVDZEVHQWlRRnFLQUlBSUFKQkNIWnpJZ0kyQWdBZ0FFR0VzUUZxSUFKQi93RnhRUUowUVlDSkFXb29BZ0FnQWtFSWRuTWlBallDQUNBQVFZUzVBV29nQWtIL0FYRkJBblJCZ0lrQmFpZ0NBQ0FDUVFoMmN5SUNOZ0lBSUFCQmhNRUJhaUFDUWY4QmNVRUNkRUdBaVFGcUtBSUFJQUpCQ0haek5nSUFJQUJCQkdvaUFFSDhCMGNOQUFzTEp3QUNRRUVBS0FLQXlRRWdBRVlOQUNBQUVBRkJBQ0FBTmdLQXlRRUxRUUJCQURZQ2hNa0JDNGdEQVFOL1FRQW9Bb1RKQVVGL2N5RUJRWUFKSVFJQ1FDQUFRUWhKRFFCQmdBa2hBZ05BSUFKQkJHb29BZ0FpQTBFT2RrSDhCM0ZCZ0pFQmFpZ0NBQ0FEUVJaMlFmd0hjVUdBaVFGcUtBSUFjeUFEUVFaMlFmd0hjVUdBbVFGcUtBSUFjeUFEUWY4QmNVRUNkRUdBb1FGcUtBSUFjeUFDS0FJQUlBRnpJZ0ZCRm5aQi9BZHhRWUNwQVdvb0FnQnpJQUZCRG5aQi9BZHhRWUN4QVdvb0FnQnpJQUZCQm5aQi9BZHhRWUM1QVdvb0FnQnpJQUZCL3dGeFFRSjBRWURCQVdvb0FnQnpJUUVnQWtFSWFpRUNJQUJCZUdvaUFFRUhTdzBBQ3dzQ1FDQUFSUTBBQWtBQ1FDQUFRUUZ4RFFBZ0FDRUREQUVMSUFGQi93RnhJQUl0QUFCelFRSjBRWUNKQVdvb0FnQWdBVUVJZG5NaEFTQUNRUUZxSVFJZ0FFRi9haUVEQ3lBQVFRRkdEUUFEUUNBQlFmOEJjU0FDTFFBQWMwRUNkRUdBaVFGcUtBSUFJQUZCQ0haeklnRkIvd0Z4SUFKQkFXb3RBQUJ6UVFKMFFZQ0pBV29vQWdBZ0FVRUlkbk1oQVNBQ1FRSnFJUUlnQTBGK2FpSUREUUFMQzBFQUlBRkJmM00yQW9USkFRc3lBUUYvUVFCQkFDZ0NoTWtCSWdCQkdIUWdBRUdBL2dOeFFRaDBjaUFBUVFoMlFZRCtBM0VnQUVFWWRuSnlOZ0tBQ1FzR0FFR0V5UUVMV1FBQ1FFRUFLQUtBeVFFZ0FVWU5BQ0FCRUFGQkFDQUJOZ0tBeVFFTFFRQkJBRFlDaE1rQklBQVFBMEVBUVFBb0FvVEpBU0lCUVJoMElBRkJnUDREY1VFSWRISWdBVUVJZGtHQS9nTnhJQUZCR0haeWNqWUNnQWtMQ3dzQkFFR0FDQXNFQkFBQUFBPT1cIjtcbnZhciBoYXNoJGYgPSBcImQyZWJhNTg3XCI7XG52YXIgd2FzbUpzb24kZiA9IHtcblx0bmFtZTogbmFtZSRmLFxuXHRkYXRhOiBkYXRhJGYsXG5cdGhhc2g6IGhhc2gkZlxufTtcblxuY29uc3QgbXV0ZXgkaCA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSRoID0gbnVsbDtcbi8qKlxuICogQ2FsY3VsYXRlcyBDUkMtMzIgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY3JjMzIoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkaCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JGgsIHdhc21Kc29uJGYsIDQpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGggPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRoLmNhbGN1bGF0ZShkYXRhLCAweEVEQjg4MzIwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkaC5jYWxjdWxhdGUoZGF0YSwgMHhFREI4ODMyMCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IENSQy0zMiBoYXNoIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNSQzMyKCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJGYsIDQpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KDB4RURCODgzMjApO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgweEVEQjg4MzIwKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogNCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxuY29uc3QgbXV0ZXgkZyA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSRnID0gbnVsbDtcbi8qKlxuICogQ2FsY3VsYXRlcyBDUkMtMzJDIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNyYzMyYyhkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSRnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkZywgd2FzbUpzb24kZiwgNClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkZyA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGcuY2FsY3VsYXRlKGRhdGEsIDB4ODJGNjNCNzgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSRnLmNhbGN1bGF0ZShkYXRhLCAweDgyRjYzQjc4KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQ1JDLTMyQyBoYXNoIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNSQzMyQygpIHtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRmLCA0KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCgweDgyRjYzQjc4KTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoMHg4MkY2M0I3OCk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogNCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJGUgPSBcIm1kNFwiO1xudmFyIGRhdGEkZSA9IFwiQUdGemJRRUFBQUFCRWdSZ0FBRi9ZQUFBWUFGL0FHQUNmMzhCZndNSUJ3QUJBZ01CQUFJRkJBRUJBZ0lHRGdKL0FVR2dpZ1VMZndCQmdBZ0xCM0FJQm0xbGJXOXllUUlBRGtoaGMyaGZSMlYwUW5WbVptVnlBQUFKU0dGemFGOUpibWwwQUFFTFNHRnphRjlWY0dSaGRHVUFBZ3BJWVhOb1gwWnBibUZzQUFRTlNHRnphRjlIWlhSVGRHRjBaUUFGRGtoaGMyaGZRMkZzWTNWc1lYUmxBQVlLVTFSQlZFVmZVMGxhUlFNQkN1NFVCd1VBUVlBSkN5MEFRUUJDL3JucnhlbU9sWmtRTndLUWlRRkJBRUtCeHBTNmx2SHE1bTgzQW9pSkFVRUFRZ0EzQW9DSkFRdStCUUVIZjBFQVFRQW9Bb0NKQVNJQklBQnFRZi8vLy84QmNTSUNOZ0tBaVFGQkFFRUFLQUtFaVFFZ0FpQUJTV29nQUVFZGRtbzJBb1NKQVFKQUFrQUNRQUpBQWtBQ1FDQUJRVDl4SWdNTkFFR0FDU0VFREFFTFFjQUFJQU5ySWdVZ0FFc05BU0FGUVFOeElRWkJBQ0VCQWtBZ0EwRS9jMEVEU1EwQUlBTkJnSWtCYWlFRUlBVkIvQUJ4SVFkQkFDRUJBMEFnQkNBQmFpSUNRUmhxSUFGQmdBbHFMUUFBT2dBQUlBSkJHV29nQVVHQkNXb3RBQUE2QUFBZ0FrRWFhaUFCUVlJSmFpMEFBRG9BQUNBQ1FSdHFJQUZCZ3dscUxRQUFPZ0FBSUFjZ0FVRUVhaUlCUncwQUN3c0NRQ0FHUlEwQUlBTkJtSWtCYWlFQ0EwQWdBaUFCYWlBQlFZQUphaTBBQURvQUFDQUJRUUZxSVFFZ0JrRi9haUlHRFFBTEMwR1lpUUZCd0FBUUF4b2dBQ0FGYXlFQUlBVkJnQWxxSVFRTElBQkJ3QUJQRFFFZ0FDRUNEQUlMSUFCRkRRSWdBRUVEY1NFR1FRQWhBUUpBSUFCQkJFa05BQ0FEUVlDSkFXb2hCQ0FBUVh4eElRQkJBQ0VCQTBBZ0JDQUJhaUlDUVJocUlBRkJnQWxxTFFBQU9nQUFJQUpCR1dvZ0FVR0JDV290QUFBNkFBQWdBa0VhYWlBQlFZSUphaTBBQURvQUFDQUNRUnRxSUFGQmd3bHFMUUFBT2dBQUlBQWdBVUVFYWlJQlJ3MEFDd3NnQmtVTkFpQURRWmlKQVdvaEFnTkFJQUlnQVdvZ0FVR0FDV290QUFBNkFBQWdBVUVCYWlFQklBWkJmMm9pQmcwQURBTUxDeUFBUVQ5eElRSWdCQ0FBUVVCeEVBTWhCQXNnQWtVTkFDQUNRUU54SVFaQkFDRUJBa0FnQWtFRVNRMEFJQUpCUEhFaEFFRUFJUUVEUUNBQlFaaUpBV29nQkNBQmFpSUNMUUFBT2dBQUlBRkJtWWtCYWlBQ1FRRnFMUUFBT2dBQUlBRkJtb2tCYWlBQ1FRSnFMUUFBT2dBQUlBRkJtNGtCYWlBQ1FRTnFMUUFBT2dBQUlBQWdBVUVFYWlJQlJ3MEFDd3NnQmtVTkFBTkFJQUZCbUlrQmFpQUVJQUZxTFFBQU9nQUFJQUZCQVdvaEFTQUdRWDlxSWdZTkFBc0xDK3NLQVJkL1FRQW9BcFNKQVNFQ1FRQW9BcENKQVNFRFFRQW9Bb3lKQVNFRVFRQW9Bb2lKQVNFRkEwQWdBQ2dDSENJR0lBQW9BaFFpQnlBQUtBSVlJZ2dnQUNnQ0VDSUpJQUFvQWl3aUNpQUFLQUlvSWdzZ0FDZ0NKQ0lNSUFBb0FpQWlEU0FMSUFnZ0FDZ0NDQ0lPSUFOcUlBQW9BZ1FpRHlBQ2FpQUVJQU1nQW5OeElBSnpJQVZxSUFBb0FnQWlFR3BCQTNjaUVTQUVJQU56Y1NBRGMycEJCM2NpRWlBUklBUnpjU0FFYzJwQkMzY2lFMm9nRWlBSGFpQUpJQkZxSUFBb0Fnd2lGQ0FFYWlBVElCSWdFWE54SUJGemFrRVRkeUlSSUJNZ0VuTnhJQkp6YWtFRGR5SVNJQkVnRTNOeElCTnpha0VIZHlJVElCSWdFWE54SUJGemFrRUxkeUlWYWlBVElBeHFJQklnRFdvZ0VTQUdhaUFWSUJNZ0VuTnhJQkp6YWtFVGR5SVJJQlVnRTNOeElCTnpha0VEZHlJU0lCRWdGWE54SUJWemFrRUhkeUlUSUJJZ0VYTnhJQkZ6YWtFTGR5SVZJQUFvQWpnaUZtb2dFeUFBS0FJMEloZHFJQklnQUNnQ01DSVlhaUFSSUFwcUlCVWdFeUFTYzNFZ0VuTnFRUk4zSWhJZ0ZTQVRjM0VnRTNOcVFRTjNJaE1nRWlBVmMzRWdGWE5xUVFkM0loVWdFeUFTYzNFZ0VuTnFRUXQzSWhGcUlBa2dGV29nRUNBVGFpQVNJQUFvQWp3aUNXb2dFU0FWSUJOemNTQVRjMnBCRTNjaUVpQVJJQlZ5Y1NBUklCVnhjbXBCbWZPSjFBVnFRUU4zSWhNZ0VpQVJjbkVnRWlBUmNYSnFRWm56aWRRRmFrRUZkeUlSSUJNZ0VuSnhJQk1nRW5GeWFrR1o4NG5VQldwQkNYY2lGV29nQnlBUmFpQVBJQk5xSUJnZ0Vtb2dGU0FSSUJOeWNTQVJJQk54Y21wQm1mT0oxQVZxUVExM0loSWdGU0FSY25FZ0ZTQVJjWEpxUVpuemlkUUZha0VEZHlJUklCSWdGWEp4SUJJZ0ZYRnlha0daODRuVUJXcEJCWGNpRXlBUklCSnljU0FSSUJKeGNtcEJtZk9KMUFWcVFRbDNJaFZxSUFnZ0Uyb2dEaUFSYWlBWElCSnFJQlVnRXlBUmNuRWdFeUFSY1hKcVFabnppZFFGYWtFTmR5SVJJQlVnRTNKeElCVWdFM0Z5YWtHWjg0blVCV3BCQTNjaUVpQVJJQlZ5Y1NBUklCVnhjbXBCbWZPSjFBVnFRUVYzSWhNZ0VpQVJjbkVnRWlBUmNYSnFRWm56aWRRRmFrRUpkeUlWYWlBR0lCTnFJQlFnRW1vZ0ZpQVJhaUFWSUJNZ0VuSnhJQk1nRW5GeWFrR1o4NG5VQldwQkRYY2lFU0FWSUJOeWNTQVZJQk54Y21wQm1mT0oxQVZxUVFOM0loSWdFU0FWY25FZ0VTQVZjWEpxUVpuemlkUUZha0VGZHlJVElCSWdFWEp4SUJJZ0VYRnlha0daODRuVUJXcEJDWGNpRldvZ0VDQVNhaUFKSUJGcUlCVWdFeUFTY25FZ0V5QVNjWEpxUVpuemlkUUZha0VOZHlJR0lCVnpJaElnRTNOcVFhSFg1L1lHYWtFRGR5SVJJQVp6SUEwZ0Uyb2dFaUFSYzJwQm9kZm45Z1pxUVFsM0loSnpha0doMStmMkJtcEJDM2NpRTJvZ0RpQVJhaUFUSUJKeklCZ2dCbW9nRWlBUmN5QVRjMnBCb2RmbjlnWnFRUTkzSWhGemFrR2gxK2YyQm1wQkEzY2lGU0FSY3lBTElCSnFJQkVnRTNNZ0ZYTnFRYUhYNS9ZR2FrRUpkeUlTYzJwQm9kZm45Z1pxUVF0M0loTnFJQThnRldvZ0V5QVNjeUFXSUJGcUlCSWdGWE1nRTNOcVFhSFg1L1lHYWtFUGR5SVJjMnBCb2RmbjlnWnFRUU4zSWhVZ0VYTWdEQ0FTYWlBUklCTnpJQlZ6YWtHaDErZjJCbXBCQ1hjaUVuTnFRYUhYNS9ZR2FrRUxkeUlUYWlBVUlCVnFJQk1nRW5NZ0Z5QVJhaUFTSUJWeklCTnpha0doMStmMkJtcEJEM2NpRVhOcVFhSFg1L1lHYWtFRGR5SVZJQkZ6SUFvZ0Vtb2dFU0FUY3lBVmMycEJvZGZuOWdacVFRbDNJaEp6YWtHaDErZjJCbXBCQzNjaUV5QURhaUVESUFrZ0VXb2dFaUFWY3lBVGMycEJvZGZuOWdacVFROTNJQVJxSVFRZ0VpQUNhaUVDSUJVZ0JXb2hCU0FBUWNBQWFpRUFJQUZCUUdvaUFRMEFDMEVBSUFJMkFwU0pBVUVBSUFNMkFwQ0pBVUVBSUFRMkFveUpBVUVBSUFVMkFvaUpBU0FBQzg4REFRUi9RUUFvQW9DSkFVRS9jU0lBUVppSkFXcEJnQUU2QUFBZ0FFRUJhaUVCQWtBQ1FBSkFBa0FnQUVFL2N5SUNRUWRMRFFBZ0FrVU5BU0FCUVppSkFXcEJBRG9BQUNBQ1FRRkdEUUVnQUVHYWlRRnFRUUE2QUFBZ0FrRUNSZzBCSUFCQm00a0Jha0VBT2dBQUlBSkJBMFlOQVNBQVFaeUpBV3BCQURvQUFDQUNRUVJHRFFFZ0FFR2RpUUZxUVFBNkFBQWdBa0VGUmcwQklBQkJub2tCYWtFQU9nQUFJQUpCQmtZTkFTQUFRWitKQVdwQkFEb0FBQXdCQ3lBQ1FRaEdEUUpCTmlBQWF5RURBa0FnQWtFRGNTSUFEUUFnQXlFQ0RBSUxRUUFnQUdzaEFrRUFJUUFEUUNBQVFjK0pBV3BCQURvQUFDQUNJQUJCZjJvaUFFY05BQXNnQXlBQWFpRUNEQUVMUVppSkFVSEFBQkFER2tFQUlRRkJOeUVEUVRjaEFnc2dBMEVEU1EwQUlBRkJnSWtCYWlFQVFYOGhBUU5BSUFBZ0FtcEJGV3BCQURZQUFDQUFRWHhxSVFBZ0FpQUJRUVJxSWdGSERRQUxDMEVBUVFBb0FvU0pBVFlDMUlrQlFRQkJBQ2dDZ0lrQklnQkJGWFk2QU5PSkFVRUFJQUJCRFhZNkFOS0pBVUVBSUFCQkJYWTZBTkdKQVVFQUlBQkJBM1FpQURvQTBJa0JRUUFnQURZQ2dJa0JRWmlKQVVIQUFCQURHa0VBUVFBcEFvaUpBVGNEZ0FsQkFFRUFLUUtRaVFFM0E0Z0pDd1lBUVlDSkFRc3pBRUVBUXY2NTY4WHBqcFdaRURjQ2tJa0JRUUJDZ2NhVXVwYng2dVp2TndLSWlRRkJBRUlBTndLQWlRRWdBQkFDRUFRTEN3c0JBRUdBQ0FzRW1BQUFBQT09XCI7XG52YXIgaGFzaCRlID0gXCI3NDkwOWMyNFwiO1xudmFyIHdhc21Kc29uJGUgPSB7XG5cdG5hbWU6IG5hbWUkZSxcblx0ZGF0YTogZGF0YSRlLFxuXHRoYXNoOiBoYXNoJGVcbn07XG5cbmNvbnN0IG11dGV4JGYgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkZiA9IG51bGw7XG4vKipcbiAqIENhbGN1bGF0ZXMgTUQ0IGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIG1kNChkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSRmID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkZiwgd2FzbUpzb24kZSwgMTYpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGYgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRmLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkZi5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1ENCBoYXNoIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1ENCgpIHtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRlLCAxNikudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDE2LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSRkID0gXCJtZDVcIjtcbnZhciBkYXRhJGQgPSBcIkFHRnpiUUVBQUFBQkVnUmdBQUYvWUFBQVlBRi9BR0FDZjM4QmZ3TUlCd0FCQWdNQkFBSUZCQUVCQWdJR0RnSi9BVUdnaWdVTGZ3QkJnQWdMQjNBSUJtMWxiVzl5ZVFJQURraGhjMmhmUjJWMFFuVm1abVZ5QUFBSlNHRnphRjlKYm1sMEFBRUxTR0Z6YUY5VmNHUmhkR1VBQWdwSVlYTm9YMFpwYm1Gc0FBUU5TR0Z6YUY5SFpYUlRkR0YwWlFBRkRraGhjMmhmUTJGc1kzVnNZWFJsQUFZS1UxUkJWRVZmVTBsYVJRTUJDb29hQndVQVFZQUpDeTBBUVFCQy9ybnJ4ZW1PbFprUU53S1FpUUZCQUVLQnhwUzZsdkhxNW04M0FvaUpBVUVBUWdBM0FvQ0pBUXUrQlFFSGYwRUFRUUFvQW9DSkFTSUJJQUJxUWYvLy8vOEJjU0lDTmdLQWlRRkJBRUVBS0FLRWlRRWdBaUFCU1dvZ0FFRWRkbW8yQW9TSkFRSkFBa0FDUUFKQUFrQUNRQ0FCUVQ5eElnTU5BRUdBQ1NFRURBRUxRY0FBSUFOcklnVWdBRXNOQVNBRlFRTnhJUVpCQUNFQkFrQWdBMEUvYzBFRFNRMEFJQU5CZ0lrQmFpRUVJQVZCL0FCeElRZEJBQ0VCQTBBZ0JDQUJhaUlDUVJocUlBRkJnQWxxTFFBQU9nQUFJQUpCR1dvZ0FVR0JDV290QUFBNkFBQWdBa0VhYWlBQlFZSUphaTBBQURvQUFDQUNRUnRxSUFGQmd3bHFMUUFBT2dBQUlBY2dBVUVFYWlJQlJ3MEFDd3NDUUNBR1JRMEFJQU5CbUlrQmFpRUNBMEFnQWlBQmFpQUJRWUFKYWkwQUFEb0FBQ0FCUVFGcUlRRWdCa0YvYWlJR0RRQUxDMEdZaVFGQndBQVFBeG9nQUNBRmF5RUFJQVZCZ0FscUlRUUxJQUJCd0FCUERRRWdBQ0VDREFJTElBQkZEUUlnQUVFRGNTRUdRUUFoQVFKQUlBQkJCRWtOQUNBRFFZQ0pBV29oQkNBQVFYeHhJUUJCQUNFQkEwQWdCQ0FCYWlJQ1FSaHFJQUZCZ0FscUxRQUFPZ0FBSUFKQkdXb2dBVUdCQ1dvdEFBQTZBQUFnQWtFYWFpQUJRWUlKYWkwQUFEb0FBQ0FDUVJ0cUlBRkJnd2xxTFFBQU9nQUFJQUFnQVVFRWFpSUJSdzBBQ3dzZ0JrVU5BaUFEUVppSkFXb2hBZ05BSUFJZ0FXb2dBVUdBQ1dvdEFBQTZBQUFnQVVFQmFpRUJJQVpCZjJvaUJnMEFEQU1MQ3lBQVFUOXhJUUlnQkNBQVFVQnhFQU1oQkFzZ0FrVU5BQ0FDUVFOeElRWkJBQ0VCQWtBZ0FrRUVTUTBBSUFKQlBIRWhBRUVBSVFFRFFDQUJRWmlKQVdvZ0JDQUJhaUlDTFFBQU9nQUFJQUZCbVlrQmFpQUNRUUZxTFFBQU9nQUFJQUZCbW9rQmFpQUNRUUpxTFFBQU9nQUFJQUZCbTRrQmFpQUNRUU5xTFFBQU9nQUFJQUFnQVVFRWFpSUJSdzBBQ3dzZ0JrVU5BQU5BSUFGQm1Ja0JhaUFFSUFGcUxRQUFPZ0FBSUFGQkFXb2hBU0FHUVg5cUlnWU5BQXNMQzRjUUFSbC9RUUFvQXBTSkFTRUNRUUFvQXBDSkFTRURRUUFvQW95SkFTRUVRUUFvQW9pSkFTRUZBMEFnQUNnQ0NDSUdJQUFvQWhnaUJ5QUFLQUlvSWdnZ0FDZ0NPQ0lKSUFBb0Fqd2lDaUFBS0FJTUlnc2dBQ2dDSENJTUlBQW9BaXdpRFNBTUlBc2dDaUFOSUFrZ0NDQUhJQU1nQm1vZ0FpQUFLQUlFSWc1cUlBVWdCQ0FDSUFOemNTQUNjMm9nQUNnQ0FDSVBha0g0eUtxN2ZXcEJCM2NnQkdvaUVDQUVJQU56Y1NBRGMycEIxdTZleG41cVFReDNJQkJxSWhFZ0VDQUVjM0VnQkhOcVFkdmhnYUVDYWtFUmR5QVJhaUlTYWlBQUtBSVVJaE1nRVdvZ0FDZ0NFQ0lVSUJCcUlBUWdDMm9nRWlBUklCQnpjU0FRYzJwQjdwMzNqWHhxUVJaM0lCSnFJaEFnRWlBUmMzRWdFWE5xUWErZjhLdC9ha0VIZHlBUWFpSVJJQkFnRW5OeElCSnpha0dxakorOEJHcEJESGNnRVdvaUVpQVJJQkJ6Y1NBUWMycEJrNHpCd1hwcVFSRjNJQkpxSWhWcUlBQW9BaVFpRmlBU2FpQUFLQUlnSWhjZ0VXb2dEQ0FRYWlBVklCSWdFWE54SUJGemFrR0JxcHBxYWtFV2R5QVZhaUlRSUJVZ0VuTnhJQkp6YWtIWXNZTE1CbXBCQjNjZ0VHb2lFU0FRSUJWemNTQVZjMnBCcisrVDJuaHFRUXgzSUJGcUloSWdFU0FRYzNFZ0VITnFRYkczZldwQkVYY2dFbW9pRldvZ0FDZ0NOQ0lZSUJKcUlBQW9BakFpR1NBUmFpQU5JQkJxSUJVZ0VpQVJjM0VnRVhOcVFiNnY4OHA0YWtFV2R5QVZhaUlRSUJVZ0VuTnhJQkp6YWtHaW9zRGNCbXBCQjNjZ0VHb2lFU0FRSUJWemNTQVZjMnBCaytQaGJHcEJESGNnRVdvaUZTQVJJQkJ6Y1NBUWMycEJqb2ZsczNwcVFSRjNJQlZxSWhKcUlBY2dGV29nRGlBUmFpQUtJQkJxSUJJZ0ZTQVJjM0VnRVhOcVFhR1EwTTBFYWtFV2R5QVNhaUlRSUJKeklCVnhJQkp6YWtIaXl2aXdmMnBCQlhjZ0VHb2lFU0FRY3lBU2NTQVFjMnBCd09hQ2dueHFRUWwzSUJGcUloSWdFWE1nRUhFZ0VYTnFRZEcwK2JJQ2FrRU9keUFTYWlJVmFpQUlJQkpxSUJNZ0VXb2dEeUFRYWlBVklCSnpJQkZ4SUJKemFrR3FqOXZOZm1wQkZIY2dGV29pRUNBVmN5QVNjU0FWYzJwQjNhQzhzWDFxUVFWM0lCQnFJaEVnRUhNZ0ZYRWdFSE5xUWRPb2tCSnFRUWwzSUJGcUloSWdFWE1nRUhFZ0VYTnFRWUhOaDhWOWFrRU9keUFTYWlJVmFpQUpJQkpxSUJZZ0VXb2dGQ0FRYWlBVklCSnpJQkZ4SUJKemFrSEk5OCsrZm1wQkZIY2dGV29pRUNBVmN5QVNjU0FWYzJwQjVwdUhqd0pxUVFWM0lCQnFJaEVnRUhNZ0ZYRWdFSE5xUWRhUDNKbDhha0VKZHlBUmFpSVNJQkZ6SUJCeElCRnpha0dIbTlTbWYycEJEbmNnRW1vaUZXb2dCaUFTYWlBWUlCRnFJQmNnRUdvZ0ZTQVNjeUFSY1NBU2MycEI3YW5vcWdScVFSUjNJQlZxSWhBZ0ZYTWdFbkVnRlhOcVFZWFNqODk2YWtFRmR5QVFhaUlSSUJCeklCVnhJQkJ6YWtINHg3NW5ha0VKZHlBUmFpSVNJQkZ6SUJCeElCRnpha0haaGJ5N0JtcEJEbmNnRW1vaUZXb2dGeUFTYWlBVElCRnFJQmtnRUdvZ0ZTQVNjeUFSY1NBU2MycEJpcG1wNlhocVFSUjNJQlZxSWhBZ0ZYTWlGU0FTYzJwQnd2Sm9ha0VFZHlBUWFpSVJJQlZ6YWtHQjdjZTdlR3BCQzNjZ0VXb2lFaUFSY3lJYUlCQnpha0dpd3ZYc0JtcEJFSGNnRW1vaUZXb2dGQ0FTYWlBT0lCRnFJQWtnRUdvZ0ZTQWFjMnBCalBDVWIycEJGM2NnRldvaUVDQVZjeUlWSUJKemFrSEUxUHVsZW1wQkJIY2dFR29pRVNBVmMycEJxWi83M2dScVFRdDNJQkZxSWhJZ0VYTWlDU0FRYzJwQjRKYnR0WDlxUVJCM0lCSnFJaFZxSUE4Z0Vtb2dHQ0FSYWlBSUlCQnFJQlVnQ1hOcVFmRDQvdlY3YWtFWGR5QVZhaUlRSUJWekloVWdFbk5xUWNiOTdjUUNha0VFZHlBUWFpSVJJQlZ6YWtINno0VFZmbXBCQzNjZ0VXb2lFaUFSY3lJSUlCQnpha0dGNGJ5bmZXcEJFSGNnRW1vaUZXb2dHU0FTYWlBV0lCRnFJQWNnRUdvZ0ZTQUljMnBCaGJxZ0pHcEJGM2NnRldvaUVTQVZjeUlRSUJKemFrRzVvTlBPZldwQkJIY2dFV29pRWlBUWMycEI1YlB1dG41cVFRdDNJQkpxSWhVZ0VuTWlCeUFSYzJwQitQbUovUUZxUVJCM0lCVnFJaEJxSUF3Z0ZXb2dEeUFTYWlBR0lCRnFJQkFnQjNOcVFlV3NzYVY4YWtFWGR5QVFhaUlSSUJWQmYzTnlJQkJ6YWtIRXhLU2hmMnBCQm5jZ0VXb2lFaUFRUVg5emNpQVJjMnBCbC8rcm1RUnFRUXAzSUJKcUloQWdFVUYvYzNJZ0VuTnFRYWZIME54NmFrRVBkeUFRYWlJVmFpQUxJQkJxSUJrZ0Vtb2dFeUFSYWlBVklCSkJmM055SUJCemFrRzV3TTVrYWtFVmR5QVZhaUlSSUJCQmYzTnlJQlZ6YWtIRHMrMnFCbXBCQm5jZ0VXb2lFQ0FWUVg5emNpQVJjMnBCa3BteitIaHFRUXAzSUJCcUloSWdFVUYvYzNJZ0VITnFRZjNvdjM5cVFROTNJQkpxSWhWcUlBb2dFbW9nRnlBUWFpQU9JQkZxSUJVZ0VFRi9jM0lnRW5OcVFkRzdrYXg0YWtFVmR5QVZhaUlRSUJKQmYzTnlJQlZ6YWtIUC9LSDlCbXBCQm5jZ0VHb2lFU0FWUVg5emNpQVFjMnBCNE0yemNXcEJDbmNnRVdvaUVpQVFRWDl6Y2lBUmMycEJsSWFGbUhwcVFROTNJQkpxSWhWcUlBMGdFbW9nRkNBUmFpQVlJQkJxSUJVZ0VVRi9jM0lnRW5OcVFhR2pvUEFFYWtFVmR5QVZhaUlRSUJKQmYzTnlJQlZ6YWtHQy9jMjZmMnBCQm5jZ0VHb2lFU0FWUVg5emNpQVFjMnBCdGVUcjZYdHFRUXAzSUJGcUloSWdFRUYvYzNJZ0VYTnFRYnVsMzlZQ2FrRVBkeUFTYWlJVklBUnFJQllnRUdvZ0ZTQVJRWDl6Y2lBU2MycEJrYWViM0g1cVFSVjNhaUVFSUJVZ0Eyb2hBeUFTSUFKcUlRSWdFU0FGYWlFRklBQkJ3QUJxSVFBZ0FVRkFhaUlCRFFBTFFRQWdBallDbElrQlFRQWdBellDa0lrQlFRQWdCRFlDaklrQlFRQWdCVFlDaUlrQklBQUx6d01CQkg5QkFDZ0NnSWtCUVQ5eElnQkJtSWtCYWtHQUFUb0FBQ0FBUVFGcUlRRUNRQUpBQWtBQ1FDQUFRVDl6SWdKQkIwc05BQ0FDUlEwQklBRkJtSWtCYWtFQU9nQUFJQUpCQVVZTkFTQUFRWnFKQVdwQkFEb0FBQ0FDUVFKR0RRRWdBRUdiaVFGcVFRQTZBQUFnQWtFRFJnMEJJQUJCbklrQmFrRUFPZ0FBSUFKQkJFWU5BU0FBUVoySkFXcEJBRG9BQUNBQ1FRVkdEUUVnQUVHZWlRRnFRUUE2QUFBZ0FrRUdSZzBCSUFCQm40a0Jha0VBT2dBQURBRUxJQUpCQ0VZTkFrRTJJQUJySVFNQ1FDQUNRUU54SWdBTkFDQURJUUlNQWd0QkFDQUFheUVDUVFBaEFBTkFJQUJCejRrQmFrRUFPZ0FBSUFJZ0FFRi9haUlBUncwQUN5QURJQUJxSVFJTUFRdEJtSWtCUWNBQUVBTWFRUUFoQVVFM0lRTkJOeUVDQ3lBRFFRTkpEUUFnQVVHQWlRRnFJUUJCZnlFQkEwQWdBQ0FDYWtFVmFrRUFOZ0FBSUFCQmZHb2hBQ0FDSUFGQkJHb2lBVWNOQUFzTFFRQkJBQ2dDaElrQk5nTFVpUUZCQUVFQUtBS0FpUUVpQUVFVmRqb0EwNGtCUVFBZ0FFRU5kam9BMG9rQlFRQWdBRUVGZGpvQTBZa0JRUUFnQUVFRGRDSUFPZ0RRaVFGQkFDQUFOZ0tBaVFGQm1Ja0JRY0FBRUFNYVFRQkJBQ2tDaUlrQk53T0FDVUVBUVFBcEFwQ0pBVGNEaUFrTEJnQkJnSWtCQ3pNQVFRQkMvcm5yeGVtT2xaa1FOd0tRaVFGQkFFS0J4cFM2bHZIcTVtODNBb2lKQVVFQVFnQTNBb0NKQVNBQUVBSVFCQXNMQ3dFQVFZQUlDd1NZQUFBQVwiO1xudmFyIGhhc2gkZCA9IFwiNDJmYTRkMjlcIjtcbnZhciB3YXNtSnNvbiRkID0ge1xuXHRuYW1lOiBuYW1lJGQsXG5cdGRhdGE6IGRhdGEkZCxcblx0aGFzaDogaGFzaCRkXG59O1xuXG5jb25zdCBtdXRleCRlID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGUgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIE1ENSBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBtZDUoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JGUsIHdhc21Kc29uJGQsIDE2KVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSRlID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkZS5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJGUuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBNRDUgaGFzaCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVNRDUoKSB7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kZCwgMTYpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KCk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogNjQsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiAxNixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkYyA9IFwic2hhMVwiO1xudmFyIGRhdGEkYyA9IFwiQUdGemJRRUFBQUFCRVFSZ0FBRi9ZQUYvQUdBQUFHQUNmMzhBQXdrSUFBRUNBd0VDQUFFRkJBRUJBZ0lHRGdKL0FVSGdpUVVMZndCQmdBZ0xCM0FJQm0xbGJXOXllUUlBRGtoaGMyaGZSMlYwUW5WbVptVnlBQUFKU0dGemFGOUpibWwwQUFJTFNHRnphRjlWY0dSaGRHVUFCQXBJWVhOb1gwWnBibUZzQUFVTlNHRnphRjlIWlhSVGRHRjBaUUFHRGtoaGMyaGZRMkZzWTNWc1lYUmxBQWNLVTFSQlZFVmZVMGxhUlFNQkNwb3FDQVVBUVlBSkM2OGlDZ0YrQW44QmZnRi9BWDREZndGK0FYOEJma2QvUVFBZ0FDa0RFQ0lCUWlDSXB5SUNRUmgwSUFKQmdQNERjVUVJZEhJZ0FVSW9pS2RCZ1A0RGNTQUJRamlJcDNKeUlnTWdBQ2tEQ0NJRVFpQ0lweUlDUVJoMElBSkJnUDREY1VFSWRISWdCRUlvaUtkQmdQNERjU0FFUWppSXAzSnlJZ1Z6SUFBcEF5Z2lCa0lnaUtjaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFaQ0tJaW5RWUQrQTNFZ0JrSTRpS2R5Y2lJSGN5QUVweUlDUVJoMElBSkJnUDREY1VFSWRISWdBa0VJZGtHQS9nTnhJQUpCR0haeWNpSUlJQUFwQXdBaUJLY2lBa0VZZENBQ1FZRCtBM0ZCQ0hSeUlBSkJDSFpCZ1A0RGNTQUNRUmgyY25JaUNYTWdBQ2tESUNJS3B5SUNRUmgwSUFKQmdQNERjVUVJZEhJZ0FrRUlka0dBL2dOeElBSkJHSFp5Y2lJTGN5QUFLUU13SWd4Q0lJaW5JZ0pCR0hRZ0FrR0EvZ054UVFoMGNpQU1RaWlJcDBHQS9nTnhJQXhDT0lpbmNuSWlBbk5CQVhjaURYTkJBWGNpRGlBRklBUkNJSWluSWc5QkdIUWdEMEdBL2dOeFFRaDBjaUFFUWlpSXAwR0EvZ054SUFSQ09JaW5jbklpRUhNZ0NrSWdpS2NpRDBFWWRDQVBRWUQrQTNGQkNIUnlJQXBDS0lpblFZRCtBM0VnQ2tJNGlLZHljaUlSY3lBQUtRTTRJZ1NuSWc5QkdIUWdEMEdBL2dOeFFRaDBjaUFQUVFoMlFZRCtBM0VnRDBFWWRuSnlJZzl6UVFGM0loSnpJQWNnRVhNZ0VuTWdDeUFBS1FNWUlncW5JZ0JCR0hRZ0FFR0EvZ054UVFoMGNpQUFRUWgyUVlEK0EzRWdBRUVZZG5KeUloTnpJQTl6SUE1elFRRjNJZ0J6UVFGM0loUnpJQTBnRDNNZ0FITWdBaUFIY3lBT2N5QUdweUlWUVJoMElCVkJnUDREY1VFSWRISWdGVUVJZGtHQS9nTnhJQlZCR0haeWNpSVdJQXR6SUExeklBcENJSWluSWhWQkdIUWdGVUdBL2dOeFFRaDBjaUFLUWlpSXAwR0EvZ054SUFwQ09JaW5jbklpRnlBRGN5QUNjeUFCcHlJVlFSaDBJQlZCZ1A0RGNVRUlkSElnRlVFSWRrR0EvZ054SUJWQkdIWnljaUlZSUFoeklCWnpJQVJDSUlpbkloVkJHSFFnRlVHQS9nTnhRUWgwY2lBRVFpaUlwMEdBL2dOeElBUkNPSWluY25JaUZYTkJBWGNpR1hOQkFYY2lHbk5CQVhjaUczTkJBWGNpSEhOQkFYY2lIWE5CQVhjaUhpQVNJQlZ6SUJFZ0YzTWdGWE1nRXlBWWN5QU1weUlmUVJoMElCOUJnUDREY1VFSWRISWdIMEVJZGtHQS9nTnhJQjlCR0haeWNpSWdjeUFTYzBFQmR5SWZjMEVCZHlJaGN5QVBJQ0J6SUI5eklCUnpRUUYzSWlKelFRRjNJaU56SUJRZ0lYTWdJM01nQUNBZmN5QWljeUFlYzBFQmR5SWtjMEVCZHlJbGN5QWRJQ0p6SUNSeklCd2dGSE1nSG5NZ0d5QUFjeUFkY3lBYUlBNXpJQnh6SUJrZ0RYTWdHM01nRlNBQ2N5QWFjeUFnSUJaeklCbHpJQ0Z6UVFGM0lpWnpRUUYzSWlkelFRRjNJaWh6UVFGM0lpbHpRUUYzSWlwelFRRjNJaXR6UVFGM0lpeHpRUUYzSWkwZ0l5QW5jeUFoSUJweklDZHpJQjhnR1hNZ0puTWdJM05CQVhjaUxuTkJBWGNpTDNNZ0lpQW1jeUF1Y3lBbGMwRUJkeUl3YzBFQmR5SXhjeUFsSUM5eklERnpJQ1FnTG5NZ01ITWdMWE5CQVhjaU1uTkJBWGNpTTNNZ0xDQXdjeUF5Y3lBcklDVnpJQzF6SUNvZ0pITWdMSE1nS1NBZWN5QXJjeUFvSUIxeklDcHpJQ2NnSEhNZ0tYTWdKaUFiY3lBb2N5QXZjMEVCZHlJMGMwRUJkeUkxYzBFQmR5STJjMEVCZHlJM2MwRUJkeUk0YzBFQmR5STVjMEVCZHlJNmMwRUJkeUk3SURFZ05YTWdMeUFwY3lBMWN5QXVJQ2h6SURSeklERnpRUUYzSWp4elFRRjNJajF6SURBZ05ITWdQSE1nTTNOQkFYY2lQbk5CQVhjaVAzTWdNeUE5Y3lBL2N5QXlJRHh6SUQ1eklEdHpRUUYzSWtCelFRRjNJa0Z6SURvZ1BuTWdRSE1nT1NBemN5QTdjeUE0SURKeklEcHpJRGNnTFhNZ09YTWdOaUFzY3lBNGN5QTFJQ3R6SURkeklEUWdLbk1nTm5NZ1BYTkJBWGNpUW5OQkFYY2lRM05CQVhjaVJITkJBWGNpUlhOQkFYY2lSbk5CQVhjaVIzTkJBWGNpU0hOQkFYY2lTU0ErSUVKeklEd2dObk1nUW5NZ1AzTkJBWGNpU25NZ1FYTkJBWGNpU3lBOUlEZHpJRU56SUVwelFRRjNJa3dnUkNBNUlESWdNU0EwSUNrZ0hTQVVJQjhnRlNBV1FRQW9Bb0NKQVNKTlFRVjNRUUFvQXBDSkFTSk9haUFKYWtFQUtBS01pUUVpVDBFQUtBS0lpUUVpQ1hOQkFDZ0NoSWtCSWxCeElFOXpha0daODRuVUJXb2lVVUVlZHlKU0lBTnFJRkJCSG5jaUF5QUZhaUJQSUFNZ0NYTWdUWEVnQ1hOcUlCQnFJRkZCQlhkcVFabnppZFFGYWlJUUlGSWdUVUVlZHlJRmMzRWdCWE5xSUFrZ0NHb2dVU0FESUFWemNTQURjMm9nRUVFRmQycEJtZk9KMUFWcUlsRkJCWGRxUVpuemlkUUZhaUpUSUZGQkhuY2lBeUFRUVI1M0lnaHpjU0FJYzJvZ0JTQVlhaUJSSUFnZ1VuTnhJRkp6YWlCVFFRVjNha0daODRuVUJXb2lCVUVGZDJwQm1mT0oxQVZxSWhoQkhuY2lVbW9nVTBFZWR5SVdJQXRxSUFnZ0Uyb2dCU0FXSUFOemNTQURjMm9nR0VFRmQycEJtZk9KMUFWcUlnZ2dVaUFGUVI1M0lndHpjU0FMYzJvZ0F5QVhhaUFZSUFzZ0ZuTnhJQlp6YWlBSVFRVjNha0daODRuVUJXb2lCVUVGZDJwQm1mT0oxQVZxSWhNZ0JVRWVkeUlXSUFoQkhuY2lBM054SUFOemFpQUxJQkZxSUFVZ0F5QlNjM0VnVW5OcUlCTkJCWGRxUVpuemlkUUZhaUlSUVFWM2FrR1o4NG5VQldvaVVrRWVkeUlMYWlBQ0lCTkJIbmNpRldvZ0J5QURhaUFSSUJVZ0ZuTnhJQlp6YWlCU1FRVjNha0daODRuVUJXb2lCeUFMSUJGQkhuY2lBbk54SUFKemFpQWdJQlpxSUZJZ0FpQVZjM0VnRlhOcUlBZEJCWGRxUVpuemlkUUZhaUlSUVFWM2FrR1o4NG5VQldvaUZpQVJRUjUzSWhVZ0IwRWVkeUlIYzNFZ0IzTnFJQThnQW1vZ0VTQUhJQXR6Y1NBTGMyb2dGa0VGZDJwQm1mT0oxQVZxSWd0QkJYZHFRWm56aWRRRmFpSVJRUjUzSWdKcUlCSWdGV29nRVNBTFFSNTNJZzhnRmtFZWR5SVNjM0VnRW5OcUlBMGdCMm9nQ3lBU0lCVnpjU0FWYzJvZ0VVRUZkMnBCbWZPSjFBVnFJZzFCQlhkcVFabnppZFFGYWlJVlFSNTNJaDhnRFVFZWR5SUhjeUFaSUJKcUlBMGdBaUFQYzNFZ0QzTnFJQlZCQlhkcVFabnppZFFGYWlJTmMyb2dEaUFQYWlBVklBY2dBbk54SUFKemFpQU5RUVYzYWtHWjg0blVCV29pQWtFRmQycEJvZGZuOWdacUlnNUJIbmNpRDJvZ0FDQWZhaUFDUVI1M0lnQWdEVUVlZHlJTmN5QU9jMm9nR2lBSGFpQU5JQjl6SUFKemFpQU9RUVYzYWtHaDErZjJCbW9pQWtFRmQycEJvZGZuOWdacUlnNUJIbmNpRWlBQ1FSNTNJaFJ6SUNFZ0RXb2dEeUFBY3lBQ2Myb2dEa0VGZDJwQm9kZm45Z1pxSWdKemFpQWJJQUJxSUJRZ0QzTWdEbk5xSUFKQkJYZHFRYUhYNS9ZR2FpSUFRUVYzYWtHaDErZjJCbW9pRFVFZWR5SU9haUFjSUJKcUlBQkJIbmNpRHlBQ1FSNTNJZ0p6SUExemFpQW1JQlJxSUFJZ0VuTWdBSE5xSUExQkJYZHFRYUhYNS9ZR2FpSUFRUVYzYWtHaDErZjJCbW9pRFVFZWR5SVNJQUJCSG5jaUZITWdJaUFDYWlBT0lBOXpJQUJ6YWlBTlFRVjNha0doMStmMkJtb2lBSE5xSUNjZ0Qyb2dGQ0FPY3lBTmMyb2dBRUVGZDJwQm9kZm45Z1pxSWdKQkJYZHFRYUhYNS9ZR2FpSU5RUjUzSWc1cUlDZ2dFbW9nQWtFZWR5SVBJQUJCSG5jaUFITWdEWE5xSUNNZ0ZHb2dBQ0FTY3lBQ2Myb2dEVUVGZDJwQm9kZm45Z1pxSWdKQkJYZHFRYUhYNS9ZR2FpSU5RUjUzSWhJZ0FrRWVkeUlVY3lBZUlBQnFJQTRnRDNNZ0FuTnFJQTFCQlhkcVFhSFg1L1lHYWlJQWMyb2dMaUFQYWlBVUlBNXpJQTF6YWlBQVFRVjNha0doMStmMkJtb2lBa0VGZDJwQm9kZm45Z1pxSWcxQkhuY2lEbW9nS2lBQVFSNTNJZ0JxSUE0Z0FrRWVkeUlQY3lBa0lCUnFJQUFnRW5NZ0FuTnFJQTFCQlhkcVFhSFg1L1lHYWlJVWMyb2dMeUFTYWlBUElBQnpJQTF6YWlBVVFRVjNha0doMStmMkJtb2lEVUVGZDJwQm9kZm45Z1pxSWdBZ0RVRWVkeUlDY2lBVVFSNTNJaEp4SUFBZ0FuRnlhaUFsSUE5cUlCSWdEbk1nRFhOcUlBQkJCWGRxUWFIWDUvWUdhaUlOUVFWM2FrSGMrZTc0ZUdvaURrRWVkeUlQYWlBMUlBQkJIbmNpQUdvZ0t5QVNhaUFOSUFCeUlBSnhJQTBnQUhGeWFpQU9RUVYzYWtIYytlNzRlR29pRWlBUGNpQU5RUjUzSWcxeElCSWdEM0Z5YWlBd0lBSnFJQTRnRFhJZ0FIRWdEaUFOY1hKcUlCSkJCWGRxUWR6NTd2aDRhaUlBUVFWM2FrSGMrZTc0ZUdvaUFpQUFRUjUzSWc1eUlCSkJIbmNpRW5FZ0FpQU9jWEpxSUN3Z0RXb2dBQ0FTY2lBUGNTQUFJQkp4Y21vZ0FrRUZkMnBCM1BudStIaHFJZ0JCQlhkcVFkejU3dmg0YWlJTlFSNTNJZzlxSUR3Z0FrRWVkeUlDYWlBMklCSnFJQUFnQW5JZ0RuRWdBQ0FDY1hKcUlBMUJCWGRxUWR6NTd2aDRhaUlTSUE5eUlBQkJIbmNpQUhFZ0VpQVBjWEpxSUMwZ0Rtb2dEU0FBY2lBQ2NTQU5JQUJ4Y21vZ0VrRUZkMnBCM1BudStIaHFJZ0pCQlhkcVFkejU3dmg0YWlJTklBSkJIbmNpRG5JZ0VrRWVkeUlTY1NBTklBNXhjbW9nTnlBQWFpQUNJQkp5SUE5eElBSWdFbkZ5YWlBTlFRVjNha0hjK2U3NGVHb2lBRUVGZDJwQjNQbnUrSGhxSWdKQkhuY2lEMm9nTXlBTlFSNTNJZzFxSUQwZ0Vtb2dBQ0FOY2lBT2NTQUFJQTF4Y21vZ0FrRUZkMnBCM1BudStIaHFJaElnRDNJZ0FFRWVkeUlBY1NBU0lBOXhjbW9nT0NBT2FpQUNJQUJ5SUExeElBSWdBSEZ5YWlBU1FRVjNha0hjK2U3NGVHb2lBa0VGZDJwQjNQbnUrSGhxSWcwZ0FrRWVkeUlPY2lBU1FSNTNJaEp4SUEwZ0RuRnlhaUJDSUFCcUlBSWdFbklnRDNFZ0FpQVNjWEpxSUExQkJYZHFRZHo1N3ZoNGFpSUFRUVYzYWtIYytlNzRlR29pQWtFZWR5SVBhaUJESUE1cUlBSWdBRUVlZHlJVWNpQU5RUjUzSWcxeElBSWdGSEZ5YWlBK0lCSnFJQUFnRFhJZ0RuRWdBQ0FOY1hKcUlBSkJCWGRxUWR6NTd2aDRhaUlBUVFWM2FrSGMrZTc0ZUdvaUFrRWVkeUlTSUFCQkhuY2lEbk1nT2lBTmFpQUFJQTl5SUJSeElBQWdEM0Z5YWlBQ1FRVjNha0hjK2U3NGVHb2lBSE5xSUQ4Z0ZHb2dBaUFPY2lBUGNTQUNJQTV4Y21vZ0FFRUZkMnBCM1BudStIaHFJZ0pCQlhkcVFkYURpOU44YWlJTlFSNTNJZzlxSUVvZ0Vtb2dBa0VlZHlJVUlBQkJIbmNpQUhNZ0RYTnFJRHNnRG1vZ0FDQVNjeUFDYzJvZ0RVRUZkMnBCMW9PTDAzeHFJZ0pCQlhkcVFkYURpOU44YWlJTlFSNTNJZzRnQWtFZWR5SVNjeUJGSUFCcUlBOGdGSE1nQW5OcUlBMUJCWGRxUWRhRGk5TjhhaUlBYzJvZ1FDQVVhaUFTSUE5eklBMXphaUFBUVFWM2FrSFdnNHZUZkdvaUFrRUZkMnBCMW9PTDAzeHFJZzFCSG5jaUQyb2dRU0FPYWlBQ1FSNTNJaFFnQUVFZWR5SUFjeUFOYzJvZ1JpQVNhaUFBSUE1eklBSnphaUFOUVFWM2FrSFdnNHZUZkdvaUFrRUZkMnBCMW9PTDAzeHFJZzFCSG5jaURpQUNRUjUzSWhKeklFSWdPSE1nUkhNZ1RITkJBWGNpRlNBQWFpQVBJQlJ6SUFKemFpQU5RUVYzYWtIV2c0dlRmR29pQUhOcUlFY2dGR29nRWlBUGN5QU5jMm9nQUVFRmQycEIxb09MMDN4cUlnSkJCWGRxUWRhRGk5TjhhaUlOUVI1M0lnOXFJRWdnRG1vZ0FrRWVkeUlVSUFCQkhuY2lBSE1nRFhOcUlFTWdPWE1nUlhNZ0ZYTkJBWGNpR1NBU2FpQUFJQTV6SUFKemFpQU5RUVYzYWtIV2c0dlRmR29pQWtFRmQycEIxb09MMDN4cUlnMUJIbmNpRGlBQ1FSNTNJaEp6SUQ4Z1EzTWdUSE1nUzNOQkFYY2lHaUFBYWlBUElCUnpJQUp6YWlBTlFRVjNha0hXZzR2VGZHb2lBSE5xSUVRZ09uTWdSbk1nR1hOQkFYY2lHeUFVYWlBU0lBOXpJQTF6YWlBQVFRVjNha0hXZzR2VGZHb2lBa0VGZDJwQjFvT0wwM3hxSWcxQkhuY2lEeUJPYWpZQ2tJa0JRUUFnVHlCS0lFUnpJQlZ6SUJwelFRRjNJaFFnRW1vZ0FFRWVkeUlBSUE1eklBSnphaUFOUVFWM2FrSFdnNHZUZkdvaUVrRWVkeUlWYWpZQ2pJa0JRUUFnQ1NCRklEdHpJRWR6SUJ0elFRRjNJQTVxSUFKQkhuY2lBaUFBY3lBTmMyb2dFa0VGZDJwQjFvT0wwM3hxSWcxQkhuZHFOZ0tJaVFGQkFDQlFJRUFnU25NZ1MzTWdTWE5CQVhjZ0FHb2dEeUFDY3lBU2Myb2dEVUVGZDJwQjFvT0wwM3hxSWdCcU5nS0VpUUZCQUNCTklFd2dSWE1nR1hNZ0ZITkJBWGRxSUFKcUlCVWdEM01nRFhOcUlBQkJCWGRxUWRhRGk5TjhhallDZ0lrQkN6b0FRUUJDL3JucnhlbU9sWmtRTndLSWlRRkJBRUtCeHBTNmx2SHE1bTgzQW9DSkFVRUFRdkREeTU0TU53S1FpUUZCQUVFQU5nS1lpUUVMcUFNQkNIOUJBQ0VDUVFCQkFDZ0NsSWtCSWdNZ0FVRURkR29pQkRZQ2xJa0JRUUJCQUNnQ21Ja0JJQVFnQTBscUlBRkJIWFpxTmdLWWlRRUNRQ0FEUVFOMlFUOXhJZ1VnQVdwQndBQkpEUUJCd0FBZ0JXc2lBa0VEY1NFR1FRQWhBd0pBSUFWQlAzTkJBMGtOQUNBRlFZQ0pBV29oQnlBQ1Fmd0FjU0VJUVFBaEF3TkFJQWNnQTJvaUJFRWNhaUFBSUFOcUlna3RBQUE2QUFBZ0JFRWRhaUFKUVFGcUxRQUFPZ0FBSUFSQkhtb2dDVUVDYWkwQUFEb0FBQ0FFUVI5cUlBbEJBMm90QUFBNkFBQWdDQ0FEUVFScUlnTkhEUUFMQ3dKQUlBWkZEUUFnQUNBRGFpRUVJQU1nQldwQm5Ja0JhaUVEQTBBZ0F5QUVMUUFBT2dBQUlBUkJBV29oQkNBRFFRRnFJUU1nQmtGL2FpSUdEUUFMQzBHY2lRRVFBU0FGUWY4QWN5RURRUUFoQlNBRElBRlBEUUFEUUNBQUlBSnFFQUVnQWtIL0FHb2hBeUFDUWNBQWFpSUVJUUlnQXlBQlNRMEFDeUFFSVFJTEFrQWdBU0FDUmcwQUlBRWdBbXNoQ1NBQUlBSnFJUUlnQlVHY2lRRnFJUU5CQUNFRUEwQWdBeUFDTFFBQU9nQUFJQUpCQVdvaEFpQURRUUZxSVFNZ0NTQUVRUUZxSWdSQi93RnhTdzBBQ3dzTENRQkJnQWtnQUJBREM2WURBUUovSXdCQkVHc2lBQ1FBSUFCQmdBRTZBQWNnQUVFQUtBS1lpUUVpQVVFWWRDQUJRWUQrQTNGQkNIUnlJQUZCQ0haQmdQNERjU0FCUVJoMmNuSTJBQWdnQUVFQUtBS1VpUUVpQVVFWWRDQUJRWUQrQTNGQkNIUnlJQUZCQ0haQmdQNERjU0FCUVJoMmNuSTJBQXdnQUVFSGFrRUJFQU1DUUVFQUtBS1VpUUZCK0FOeFFjQURSZzBBQTBBZ0FFRUFPZ0FISUFCQkIycEJBUkFEUVFBb0FwU0pBVUg0QTNGQndBTkhEUUFMQ3lBQVFRaHFRUWdRQTBFQVFRQW9Bb0NKQVNJQlFSaDBJQUZCZ1A0RGNVRUlkSElnQVVFSWRrR0EvZ054SUFGQkdIWnljallDZ0FsQkFFRUFLQUtFaVFFaUFVRVlkQ0FCUVlEK0EzRkJDSFJ5SUFGQkNIWkJnUDREY1NBQlFSaDJjbkkyQW9RSlFRQkJBQ2dDaUlrQklnRkJHSFFnQVVHQS9nTnhRUWgwY2lBQlFRaDJRWUQrQTNFZ0FVRVlkbkp5TmdLSUNVRUFRUUFvQW95SkFTSUJRUmgwSUFGQmdQNERjVUVJZEhJZ0FVRUlka0dBL2dOeElBRkJHSFp5Y2pZQ2pBbEJBRUVBS0FLUWlRRWlBVUVZZENBQlFZRCtBM0ZCQ0hSeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JMkFwQUpJQUJCRUdva0FBc0dBRUdBaVFFTFF3QkJBRUwrdWV2RjZZNlZtUkEzQW9pSkFVRUFRb0hHbExxVzhlcm1iemNDZ0lrQlFRQkM4TVBMbmd3M0FwQ0pBVUVBUVFBMkFwaUpBVUdBQ1NBQUVBTVFCUXNMQ3dFQVFZQUlDd1JjQUFBQVwiO1xudmFyIGhhc2gkYyA9IFwiNmI1MzBjMjRcIjtcbnZhciB3YXNtSnNvbiRjID0ge1xuXHRuYW1lOiBuYW1lJGMsXG5cdGRhdGE6IGRhdGEkYyxcblx0aGFzaDogaGFzaCRjXG59O1xuXG5jb25zdCBtdXRleCRkID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGQgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIFNIQS0xIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNoYTEoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JGQsIHdhc21Kc29uJGMsIDIwKVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSRkID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkZC5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJGQuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTSEEtMSBoYXNoIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNIQTEoKSB7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kYywgMjApLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KCk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogNjQsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiAyMCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkYiA9IFwic2hhM1wiO1xudmFyIGRhdGEkYiA9IFwiQUdGemJRRUFBQUFCRkFSZ0FBRi9ZQUYvQUdBQ2YzOEFZQU4vZjM4QUF3Z0hBQUVCQWdFQUF3VUVBUUVDQWdZT0FuOEJRWkNOQlF0L0FFR0FDQXNIY0FnR2JXVnRiM0o1QWdBT1NHRnphRjlIWlhSQ2RXWm1aWElBQUFsSVlYTm9YMGx1YVhRQUFRdElZWE5vWDFWd1pHRjBaUUFDQ2toaGMyaGZSbWx1WVd3QUJBMUlZWE5vWDBkbGRGTjBZWFJsQUFVT1NHRnphRjlEWVd4amRXeGhkR1VBQmdwVFZFRlVSVjlUU1ZwRkF3RUtxQndIQlFCQmdBb0wxd01BUVFCQ0FEY0RnSTBCUVFCQ0FEY0QrSXdCUVFCQ0FEY0Q4SXdCUVFCQ0FEY0Q2SXdCUVFCQ0FEY0Q0SXdCUVFCQ0FEY0QySXdCUVFCQ0FEY0QwSXdCUVFCQ0FEY0R5SXdCUVFCQ0FEY0R3SXdCUVFCQ0FEY0R1SXdCUVFCQ0FEY0RzSXdCUVFCQ0FEY0RxSXdCUVFCQ0FEY0RvSXdCUVFCQ0FEY0RtSXdCUVFCQ0FEY0RrSXdCUVFCQ0FEY0RpSXdCUVFCQ0FEY0RnSXdCUVFCQ0FEY0QrSXNCUVFCQ0FEY0Q4SXNCUVFCQ0FEY0Q2SXNCUVFCQ0FEY0Q0SXNCUVFCQ0FEY0QySXNCUVFCQ0FEY0QwSXNCUVFCQ0FEY0R5SXNCUVFCQ0FEY0R3SXNCUVFCQ0FEY0R1SXNCUVFCQ0FEY0RzSXNCUVFCQ0FEY0RxSXNCUVFCQ0FEY0RvSXNCUVFCQ0FEY0RtSXNCUVFCQ0FEY0RrSXNCUVFCQ0FEY0RpSXNCUVFCQ0FEY0RnSXNCUVFCQ0FEY0QrSW9CUVFCQ0FEY0Q4SW9CUVFCQ0FEY0Q2SW9CUVFCQ0FEY0Q0SW9CUVFCQ0FEY0QySW9CUVFCQ0FEY0QwSW9CUVFCQ0FEY0R5SW9CUVFCQ0FEY0R3SW9CUVFCQ0FEY0R1SW9CUVFCQ0FEY0RzSW9CUVFCQ0FEY0RxSW9CUVFCQ0FEY0RvSW9CUVFCQ0FEY0RtSW9CUVFCQ0FEY0RrSW9CUVFCQ0FEY0RpSW9CUVFCQ0FEY0RnSW9CUVFCQndBd2dBRUVCZEd0QkEzWTJBb3lOQVVFQVFRQTJBb2lOQVF1TUF3RUlmd0pBUVFBb0FvaU5BU0lCUVFCSURRQkJBQ0FCSUFCcVFRQW9Bb3lOQVNJQ2NEWUNpSTBCQWtBQ1FDQUJEUUJCZ0FvaEF3d0JDd0pBSUFJZ0FXc2lCQ0FBSUFRZ0FFa2JJZ05GRFFBZ0EwRURjU0VGUVFBaEJnSkFJQU5CQkVrTkFDQUJRWUNLQVdvaEJ5QURRWHh4SVFoQkFDRUdBMEFnQnlBR2FpSURRY2dCYWlBR1FZQUthaTBBQURvQUFDQURRY2tCYWlBR1FZRUthaTBBQURvQUFDQURRY29CYWlBR1FZSUthaTBBQURvQUFDQURRY3NCYWlBR1FZTUthaTBBQURvQUFDQUlJQVpCQkdvaUJrY05BQXNMSUFWRkRRQWdBVUhJaXdGcUlRTURRQ0FESUFacUlBWkJnQXBxTFFBQU9nQUFJQVpCQVdvaEJpQUZRWDlxSWdVTkFBc0xJQVFnQUVzTkFVSElpd0VnQWhBRElBQWdCR3NoQUNBRVFZQUthaUVEQ3dKQUlBQWdBa2tOQUFOQUlBTWdBaEFESUFNZ0Ftb2hBeUFBSUFKcklnQWdBazhOQUFzTElBQkZEUUJCQUNFQ1FjZ0JJUVlEUUNBR1FZQ0tBV29nQXlBR2FrRzRmbW90QUFBNkFBQWdCa0VCYWlFR0lBQWdBa0VCYWlJQ1FmOEJjVXNOQUFzTEMrUUxBUzErSUFBcEEwQWhBa0VBS1FQQWlnRWhBeUFBS1FNNElRUkJBQ2tEdUlvQklRVWdBQ2tETUNFR1FRQXBBN0NLQVNFSElBQXBBeWdoQ0VFQUtRT29pZ0VoQ1NBQUtRTWdJUXBCQUNrRG9Jb0JJUXNnQUNrREdDRU1RUUFwQTVpS0FTRU5JQUFwQXhBaERrRUFLUU9RaWdFaER5QUFLUU1JSVJCQkFDa0RpSW9CSVJFZ0FDa0RBQ0VTUVFBcEE0Q0tBU0VUUVFBcEE4aUtBU0VVQWtBQ1FDQUJRY2dBU3cwQVFRQXBBOUNLQVNFVlFRQXBBK0NLQVNFV1FRQXBBOWlLQVNFWERBRUxRUUFwQStDS0FTQUFLUU5naFNFV1FRQXBBOWlLQVNBQUtRTlloU0VYUVFBcEE5Q0tBU0FBS1FOUWhTRVZJQlFnQUNrRFNJVWhGQ0FCUWVrQVNRMEFRUUJCQUNrRDZJb0JJQUFwQTJpRk53UG9pZ0ZCQUVFQUtRUHdpZ0VnQUNrRGNJVTNBL0NLQVVFQVFRQXBBL2lLQVNBQUtRTjRoVGNEK0lvQlFRQkJBQ2tEZ0lzQklBQXBBNEFCaFRjRGdJc0JJQUZCaVFGSkRRQkJBRUVBS1FPSWl3RWdBQ2tEaUFHRk53T0lpd0VMSUFNZ0FvVWhHQ0FGSUFTRklSa2dCeUFHaFNFSElBa2dDSVVoQ0NBTElBcUZJUm9nRFNBTWhTRUpJQThnRG9VaENpQVJJQkNGSVFzZ0V5QVNoU0VNUVFBcEE3aUxBU0VTUVFBcEE1Q0xBU0VUUVFBcEEraUtBU0ViUVFBcEE2Q0xBU0VjUVFBcEEvaUtBU0VOUVFBcEE3Q0xBU0VkUVFBcEE0aUxBU0VPUVFBcEE4Q0xBU0VQUVFBcEE1aUxBU0VlUVFBcEEvQ0tBU0VRUVFBcEE2aUxBU0VSUVFBcEE0Q0xBU0VmUWNCK0lRQURRQ0FhSUFjZ0M0VWdGNFVnSDRVZ0VZVkNBWW1GSUJTRklCQ0ZJQjZGSUErRklRSWdEQ0FaSUFxRklCYUZJQTZGSUIyRlFnR0poU0FJaFNBVmhTQU5oU0FjaFNJRElBZUZJU0FnQ1NBSUlBeUZJQldGSUEyRklCeUZRZ0dKaFNBWWhTQWJoU0FUaFNBU2hTSUVJQStGSVNFZ0dDQUtJQlFnR29VZ0VJVWdIb1VnRDRWQ0FZbUZJQm1GSUJhRklBNkZJQjJGSWdXRlFqZUpJaUlnQ3lBWUlBbUZJQnVGSUJPRklCS0ZRZ0dKaFNBSGhTQVhoU0FmaFNBUmhTSUdJQXFGUWo2SklpTkNmNFdESUFNZ0VZVkNBb2tpSklVaER5QU5JQUtGUWltSklpVWdCQ0FRaFVJbmlTSW1RbitGZ3lBaWhTRVJJQklnQllWQ09Ja2lFaUFHSUE2RlFnK0pJaWRDZjRXRElBTWdGNFZDQ29raUtJVWhEaUFFSUJxRlFodUpJaWtnS0NBSUlBS0ZRaVNKSWlwQ2Y0V0RoU0VOSUFZZ0dZVkNCb2tpS3lBRElBdUZRZ0dKSWl4Q2Y0V0RJQndnQW9WQ0Vva2lMWVVoRUNBcklBUWdIb1ZDQ0lraUxpQWJJQVdGUWhtSklodENmNFdEaFNFWElBWWdIWVZDUFlraUdTQUVJQlNGUWhTSklnUWdDU0FGaFVJY2lTSUlRbitGZzRVaEZDQUlJQmxDZjRXRElBTWdINFZDTFlraUE0VWhHQ0FaSUFOQ2Y0V0RJQlVnQW9WQ0E0a2lDWVVoR1NBRUlBTWdDVUovaFlPRklRY2dDU0FFUW4rRmd5QUloU0VJSUF3Z0FvVWlBaUFoUWc2SklnTkNmNFdESUJNZ0JZVkNGWWtpQklVaENTQUdJQmFGUWl1SklnVWdBeUFFUW4rRmc0VWhDaUFFSUFWQ2Y0V0RJQ0JDTElraUJJVWhDeUFBUWRBSmFpa0RBQ0FGSUFSQ2Y0V0RoU0FDaFNFTUlDY2dLRUovaFlNZ0tvVWlCU0VmSUFNZ0JDQUNRbitGZzRVaUFpRWFJQ29nS1VKL2hZTWdFb1VpQXlFZUlDMGdMa0ovaFlNZ0c0VWlCQ0VXSUNZZ0pDQWxRbitGZzRVaUJpRWRJQnNnSzBKL2hZTWdMSVVpS0NFVklDTWdKaUFpUW4rRmc0VWlJaUVjSUM0Z0xDQXRRbitGZzRVaUppRWJJQ2NnS1NBU1FuK0ZnNFVpSnlFVElDTWdKRUovaFlNZ0pZVWlJeUVTSUFCQkNHb2lBQTBBQzBFQUlCRTNBNmlMQVVFQUlBVTNBNENMQVVFQUlCYzNBOWlLQVVFQUlBYzNBN0NLQVVFQUlBczNBNGlLQVVFQUlBODNBOENMQVVFQUlBTTNBNWlMQVVFQUlCQTNBL0NLQVVFQUlCUTNBOGlLQVVFQUlBSTNBNkNLQVVFQUlBWTNBN0NMQVVFQUlBNDNBNGlMQVVFQUlBUTNBK0NLQVVFQUlCazNBN2lLQVVFQUlBbzNBNUNLQVVFQUlDSTNBNkNMQVVFQUlBMDNBL2lLQVVFQUlDZzNBOUNLQVVFQUlBZzNBNmlLQVVFQUlBdzNBNENLQVVFQUlDTTNBN2lMQVVFQUlDYzNBNUNMQVVFQUlDWTNBK2lLQVVFQUlCZzNBOENLQVVFQUlBazNBNWlLQVF2NEFnRUZmMEhrQUVFQUtBS01qUUVpQVVFQmRtc2hBZ0pBUVFBb0FvaU5BU0lEUVFCSURRQWdBU0VFQWtBZ0FTQURSZzBBSUFOQnlJc0JhaUVGUVFBaEF3TkFJQVVnQTJwQkFEb0FBQ0FEUVFGcUlnTWdBVUVBS0FLSWpRRWlCR3RKRFFBTEN5QUVRY2lMQVdvaUF5QURMUUFBSUFCeU9nQUFJQUZCeDRzQmFpSURJQU10QUFCQmdBRnlPZ0FBUWNpTEFTQUJFQU5CQUVHQWdJQ0FlRFlDaUkwQkN3SkFJQUpCQkVrTkFDQUNRUUoySWdOQkEzRWhCVUVBSVFRQ1FDQURRWDlxUVFOSkRRQWdBMEg4Ly8vL0EzRWhBVUVBSVFOQkFDRUVBMEFnQTBHQUNtb2dBMEdBaWdGcUtBSUFOZ0lBSUFOQmhBcHFJQU5CaElvQmFpZ0NBRFlDQUNBRFFZZ0thaUFEUVlpS0FXb29BZ0EyQWdBZ0EwR01DbW9nQTBHTWlnRnFLQUlBTmdJQUlBTkJFR29oQXlBQklBUkJCR29pQkVjTkFBc0xJQVZGRFFBZ0JVRUNkQ0VCSUFSQkFuUWhBd05BSUFOQmdBcHFJQU5CZ0lvQmFpZ0NBRFlDQUNBRFFRUnFJUU1nQVVGOGFpSUJEUUFMQ3dzR0FFR0FpZ0VMMFFZQkEzOUJBRUlBTndPQWpRRkJBRUlBTndQNGpBRkJBRUlBTndQd2pBRkJBRUlBTndQb2pBRkJBRUlBTndQZ2pBRkJBRUlBTndQWWpBRkJBRUlBTndQUWpBRkJBRUlBTndQSWpBRkJBRUlBTndQQWpBRkJBRUlBTndPNGpBRkJBRUlBTndPd2pBRkJBRUlBTndPb2pBRkJBRUlBTndPZ2pBRkJBRUlBTndPWWpBRkJBRUlBTndPUWpBRkJBRUlBTndPSWpBRkJBRUlBTndPQWpBRkJBRUlBTndQNGl3RkJBRUlBTndQd2l3RkJBRUlBTndQb2l3RkJBRUlBTndQZ2l3RkJBRUlBTndQWWl3RkJBRUlBTndQUWl3RkJBRUlBTndQSWl3RkJBRUlBTndQQWl3RkJBRUlBTndPNGl3RkJBRUlBTndPd2l3RkJBRUlBTndPb2l3RkJBRUlBTndPZ2l3RkJBRUlBTndPWWl3RkJBRUlBTndPUWl3RkJBRUlBTndPSWl3RkJBRUlBTndPQWl3RkJBRUlBTndQNGlnRkJBRUlBTndQd2lnRkJBRUlBTndQb2lnRkJBRUlBTndQZ2lnRkJBRUlBTndQWWlnRkJBRUlBTndQUWlnRkJBRUlBTndQSWlnRkJBRUlBTndQQWlnRkJBRUlBTndPNGlnRkJBRUlBTndPd2lnRkJBRUlBTndPb2lnRkJBRUlBTndPZ2lnRkJBRUlBTndPWWlnRkJBRUlBTndPUWlnRkJBRUlBTndPSWlnRkJBRUlBTndPQWlnRkJBRUhBRENBQlFRRjBhMEVEZGpZQ2pJMEJRUUJCQURZQ2lJMEJJQUFRQWtIa0FFRUFLQUtNalFFaUFFRUJkbXNoQXdKQVFRQW9Bb2lOQVNJQlFRQklEUUFnQUNFRUFrQWdBQ0FCUmcwQUlBRkJ5SXNCYWlFRlFRQWhBUU5BSUFVZ0FXcEJBRG9BQUNBQlFRRnFJZ0VnQUVFQUtBS0lqUUVpQkd0SkRRQUxDeUFFUWNpTEFXb2lBU0FCTFFBQUlBSnlPZ0FBSUFCQng0c0JhaUlCSUFFdEFBQkJnQUZ5T2dBQVFjaUxBU0FBRUFOQkFFR0FnSUNBZURZQ2lJMEJDd0pBSUFOQkJFa05BQ0FEUVFKMklnRkJBM0VoQlVFQUlRUUNRQ0FCUVg5cVFRTkpEUUFnQVVIOC8vLy9BM0VoQUVFQUlRRkJBQ0VFQTBBZ0FVR0FDbW9nQVVHQWlnRnFLQUlBTmdJQUlBRkJoQXBxSUFGQmhJb0JhaWdDQURZQ0FDQUJRWWdLYWlBQlFZaUtBV29vQWdBMkFnQWdBVUdNQ21vZ0FVR01pZ0ZxS0FJQU5nSUFJQUZCRUdvaEFTQUFJQVJCQkdvaUJFY05BQXNMSUFWRkRRQWdCVUVDZENFQUlBUkJBblFoQVFOQUlBRkJnQXBxSUFGQmdJb0JhaWdDQURZQ0FDQUJRUVJxSVFFZ0FFRjhhaUlBRFFBTEN3c0wyQUVCQUVHQUNBdlFBWkFCQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFJS0FBQUFBQUFBQWlvQUFBQUFBQUlBQWdBQ0FBQUFBZ0l1QUFBQUFBQUFBQVFBQWdBQUFBQUNCZ0FDQUFBQUFnQW1BQUFBQUFBQ0FpZ0FBQUFBQUFBQ0lBQUFBQUFBQUFBbUFBSUFBQUFBQUNnQUFnQUFBQUFDTGdBQ0FBQUFBQUlzQUFBQUFBQUNBaVlBQUFBQUFBSUFEZ0FBQUFBQUFnQUtBQUFBQUFBQ0FnQUFBQUFBQUFJQUtnQUFBQUFBQUFBb0FBSUFBQUFDQWdZQUFnQUFBQUlDQWdBQUFBQUFBZ0FFQUFJQUFBQUFBQ0lBQWdBQUFBSUE9XCI7XG52YXIgaGFzaCRiID0gXCJmMmY2ZjViMlwiO1xudmFyIHdhc21Kc29uJGIgPSB7XG5cdG5hbWU6IG5hbWUkYixcblx0ZGF0YTogZGF0YSRiLFxuXHRoYXNoOiBoYXNoJGJcbn07XG5cbmNvbnN0IG11dGV4JGMgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkYyA9IG51bGw7XG5mdW5jdGlvbiB2YWxpZGF0ZUJpdHMkMShiaXRzKSB7XG4gICAgaWYgKCFbMjI0LCAyNTYsIDM4NCwgNTEyXS5pbmNsdWRlcyhiaXRzKSkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHZhcmlhbnQhIFZhbGlkIHZhbHVlczogMjI0LCAyNTYsIDM4NCwgNTEyJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIFNIQS0zIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMuIFZhbGlkIHZhbHVlczogMjI0LCAyNTYsIDM4NCwgNTEyXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNoYTMoZGF0YSwgYml0cyA9IDUxMikge1xuICAgIGlmICh2YWxpZGF0ZUJpdHMkMShiaXRzKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVCaXRzJDEoYml0cykpO1xuICAgIH1cbiAgICBjb25zdCBoYXNoTGVuZ3RoID0gYml0cyAvIDg7XG4gICAgaWYgKHdhc21DYWNoZSRjID09PSBudWxsIHx8IHdhc21DYWNoZSRjLmhhc2hMZW5ndGggIT09IGhhc2hMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCRjLCB3YXNtSnNvbiRiLCBoYXNoTGVuZ3RoKVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSRjID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkYy5jYWxjdWxhdGUoZGF0YSwgYml0cywgMHgwNik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJGMuY2FsY3VsYXRlKGRhdGEsIGJpdHMsIDB4MDYpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTSEEtMyBoYXNoIGluc3RhbmNlXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMuIFZhbGlkIHZhbHVlczogMjI0LCAyNTYsIDM4NCwgNTEyXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNIQTMoYml0cyA9IDUxMikge1xuICAgIGlmICh2YWxpZGF0ZUJpdHMkMShiaXRzKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVCaXRzJDEoYml0cykpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRTaXplID0gYml0cyAvIDg7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kYiwgb3V0cHV0U2l6ZSkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoYml0cyk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KGJpdHMpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUsIDB4MDYpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDIwMCAtIDIgKiBvdXRwdXRTaXplLFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogb3V0cHV0U2l6ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxuY29uc3QgbXV0ZXgkYiA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSRiID0gbnVsbDtcbmZ1bmN0aW9uIHZhbGlkYXRlQml0cyhiaXRzKSB7XG4gICAgaWYgKCFbMjI0LCAyNTYsIDM4NCwgNTEyXS5pbmNsdWRlcyhiaXRzKSkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHZhcmlhbnQhIFZhbGlkIHZhbHVlczogMjI0LCAyNTYsIDM4NCwgNTEyJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIEtlY2NhayBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHBhcmFtIGJpdHMgTnVtYmVyIG9mIG91dHB1dCBiaXRzLiBWYWxpZCB2YWx1ZXM6IDIyNCwgMjU2LCAzODQsIDUxMlxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBrZWNjYWsoZGF0YSwgYml0cyA9IDUxMikge1xuICAgIGlmICh2YWxpZGF0ZUJpdHMoYml0cykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlQml0cyhiaXRzKSk7XG4gICAgfVxuICAgIGNvbnN0IGhhc2hMZW5ndGggPSBiaXRzIC8gODtcbiAgICBpZiAod2FzbUNhY2hlJGIgPT09IG51bGwgfHwgd2FzbUNhY2hlJGIuaGFzaExlbmd0aCAhPT0gaGFzaExlbmd0aCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JGIsIHdhc21Kc29uJGIsIGhhc2hMZW5ndGgpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGIgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRiLmNhbGN1bGF0ZShkYXRhLCBiaXRzLCAweDAxKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkYi5jYWxjdWxhdGUoZGF0YSwgYml0cywgMHgwMSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEtlY2NhayBoYXNoIGluc3RhbmNlXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMuIFZhbGlkIHZhbHVlczogMjI0LCAyNTYsIDM4NCwgNTEyXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUtlY2NhayhiaXRzID0gNTEyKSB7XG4gICAgaWYgKHZhbGlkYXRlQml0cyhiaXRzKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVCaXRzKGJpdHMpKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0U2l6ZSA9IGJpdHMgLyA4O1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJGIsIG91dHB1dFNpemUpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KGJpdHMpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdChiaXRzKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlLCAweDAxKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiAyMDAgLSAyICogb3V0cHV0U2l6ZSxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IG91dHB1dFNpemUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJGEgPSBcInNoYTI1NlwiO1xudmFyIGRhdGEkYSA9IFwiQUdGemJRRUFBQUFCRVFSZ0FBRi9ZQUYvQUdBQUFHQUNmMzhBQXdnSEFBRUJBUUlBQXdVRUFRRUNBZ1lPQW44QlFmQ0pCUXQvQUVHQUNBc0hjQWdHYldWdGIzSjVBZ0FPU0dGemFGOUhaWFJDZFdabVpYSUFBQWxJWVhOb1gwbHVhWFFBQVF0SVlYTm9YMVZ3WkdGMFpRQUNDa2hoYzJoZlJtbHVZV3dBQkExSVlYTm9YMGRsZEZOMFlYUmxBQVVPU0dGemFGOURZV3hqZFd4aGRHVUFCZ3BUVkVGVVJWOVRTVnBGQXdFS29Fb0hCUUJCZ0FrTG5RRUFRUUJDQURjRHdJa0JRUUJCSEVFZ0lBQkI0QUZHSWdBYk5nTG9pUUZCQUVLbm4rYW54dlNUL2I1L1FxdXpqL3lSbzdQdzJ3QWdBQnMzQStDSkFVRUFRckdXZ1A2Zm9vV3M2QUJDLzZTNWlNV1Iyb0tiZnlBQUd6Y0QySWtCUVFCQ2w3ckRnNU9ubG9kM1F2TG11K09qcC8ybnBYOGdBQnMzQTlDSkFVRUFRdGk5bG9qOG9MVytOa0xuektmUTF0RHJzN3QvSUFBYk53UElpUUVMN3dJQ0FYNEdmMEVBUVFBcEE4Q0pBU0lCSUFDdGZEY0R3SWtCQWtBQ1FBSkFJQUduUVQ5eElnSU5BRUdBQ1NFRERBRUxBa0JCd0FBZ0Ftc2lCQ0FBSUFRZ0FFa2JJZ05GRFFBZ0EwRURjU0VGSUFKQmdJa0JhaUVHUVFBaEFnSkFJQU5CQkVrTkFDQURRZndBY1NFSFFRQWhBZ05BSUFZZ0Ftb2lBeUFDUVlBSmFpMEFBRG9BQUNBRFFRRnFJQUpCZ1FscUxRQUFPZ0FBSUFOQkFtb2dBa0dDQ1dvdEFBQTZBQUFnQTBFRGFpQUNRWU1KYWkwQUFEb0FBQ0FISUFKQkJHb2lBa2NOQUFzTElBVkZEUUFEUUNBR0lBSnFJQUpCZ0FscUxRQUFPZ0FBSUFKQkFXb2hBaUFGUVg5cUlnVU5BQXNMSUFRZ0FFc05BVUdBaVFFUUF5QUFJQVJySVFBZ0JFR0FDV29oQXdzQ1FDQUFRY0FBU1EwQUEwQWdBeEFESUFOQndBQnFJUU1nQUVGQWFpSUFRVDlMRFFBTEN5QUFSUTBBUVFBaEFrRUFJUVVEUUNBQ1FZQ0pBV29nQXlBQ2FpMEFBRG9BQUNBQ1FRRnFJUUlnQUNBRlFRRnFJZ1ZCL3dGeFN3MEFDd3NMb3o0QlJYOUJBQ0FBS0FJOElnRkJHSFFnQVVHQS9nTnhRUWgwY2lBQlFRaDJRWUQrQTNFZ0FVRVlkbkp5SWdGQkdYY2dBVUVPZDNNZ0FVRURkbk1nQUNnQ09DSUNRUmgwSUFKQmdQNERjVUVJZEhJZ0FrRUlka0dBL2dOeElBSkJHSFp5Y2lJQ2FpQUFLQUlnSWdOQkdIUWdBMEdBL2dOeFFRaDBjaUFEUVFoMlFZRCtBM0VnQTBFWWRuSnlJZ1JCR1hjZ0JFRU9kM01nQkVFRGRuTWdBQ2dDSENJRFFSaDBJQU5CZ1A0RGNVRUlkSElnQTBFSWRrR0EvZ054SUFOQkdIWnljaUlGYWlBQUtBSUVJZ05CR0hRZ0EwR0EvZ054UVFoMGNpQURRUWgyUVlEK0EzRWdBMEVZZG5KeUlnWkJHWGNnQmtFT2QzTWdCa0VEZG5NZ0FDZ0NBQ0lEUVJoMElBTkJnUDREY1VFSWRISWdBMEVJZGtHQS9nTnhJQU5CR0haeWNpSUhhaUFBS0FJa0lnTkJHSFFnQTBHQS9nTnhRUWgwY2lBRFFRaDJRWUQrQTNFZ0EwRVlkbkp5SWdocUlBSkJEM2NnQWtFTmQzTWdBa0VLZG5OcUlnTnFJQUFvQWhnaUNVRVlkQ0FKUVlEK0EzRkJDSFJ5SUFsQkNIWkJnUDREY1NBSlFSaDJjbklpQ2tFWmR5QUtRUTUzY3lBS1FRTjJjeUFBS0FJVUlnbEJHSFFnQ1VHQS9nTnhRUWgwY2lBSlFRaDJRWUQrQTNFZ0NVRVlkbkp5SWd0cUlBSnFJQUFvQWhBaUNVRVlkQ0FKUVlEK0EzRkJDSFJ5SUFsQkNIWkJnUDREY1NBSlFSaDJjbklpREVFWmR5QU1RUTUzY3lBTVFRTjJjeUFBS0FJTUlnbEJHSFFnQ1VHQS9nTnhRUWgwY2lBSlFRaDJRWUQrQTNFZ0NVRVlkbkp5SWcxcUlBQW9BakFpQ1VFWWRDQUpRWUQrQTNGQkNIUnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWlEbW9nQUNnQ0NDSUpRUmgwSUFsQmdQNERjVUVJZEhJZ0NVRUlka0dBL2dOeElBbEJHSFp5Y2lJUFFSbDNJQTlCRG5keklBOUJBM1p6SUFacUlBQW9BaWdpQ1VFWWRDQUpRWUQrQTNGQkNIUnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWlFR29nQVVFUGR5QUJRUTEzY3lBQlFRcDJjMm9pQ1VFUGR5QUpRUTEzY3lBSlFRcDJjMm9pRVVFUGR5QVJRUTEzY3lBUlFRcDJjMm9pRWtFUGR5QVNRUTEzY3lBU1FRcDJjMm9pRTJvZ0FDZ0NOQ0lVUVJoMElCUkJnUDREY1VFSWRISWdGRUVJZGtHQS9nTnhJQlJCR0haeWNpSVZRUmwzSUJWQkRuZHpJQlZCQTNaeklBNXFJQkpxSUFBb0Fpd2lBRUVZZENBQVFZRCtBM0ZCQ0hSeUlBQkJDSFpCZ1A0RGNTQUFRUmgyY25JaUZrRVpkeUFXUVE1M2N5QVdRUU4yY3lBUWFpQVJhaUFJUVJsM0lBaEJEbmR6SUFoQkEzWnpJQVJxSUFscUlBVkJHWGNnQlVFT2QzTWdCVUVEZG5NZ0Ntb2dBV29nQzBFWmR5QUxRUTUzY3lBTFFRTjJjeUFNYWlBVmFpQU5RUmwzSUExQkRuZHpJQTFCQTNaeklBOXFJQlpxSUFOQkQzY2dBMEVOZDNNZ0EwRUtkbk5xSWhSQkQzY2dGRUVOZDNNZ0ZFRUtkbk5xSWhkQkQzY2dGMEVOZDNNZ0YwRUtkbk5xSWhoQkQzY2dHRUVOZDNNZ0dFRUtkbk5xSWhsQkQzY2dHVUVOZDNNZ0dVRUtkbk5xSWhwQkQzY2dHa0VOZDNNZ0drRUtkbk5xSWh0QkQzY2dHMEVOZDNNZ0cwRUtkbk5xSWh4QkdYY2dIRUVPZDNNZ0hFRURkbk1nQWtFWmR5QUNRUTUzY3lBQ1FRTjJjeUFWYWlBWWFpQU9RUmwzSUE1QkRuZHpJQTVCQTNaeklCWnFJQmRxSUJCQkdYY2dFRUVPZDNNZ0VFRURkbk1nQ0dvZ0ZHb2dFMEVQZHlBVFFRMTNjeUFUUVFwMmMyb2lIVUVQZHlBZFFRMTNjeUFkUVFwMmMyb2lIa0VQZHlBZVFRMTNjeUFlUVFwMmMyb2lIMm9nRTBFWmR5QVRRUTUzY3lBVFFRTjJjeUFZYWlBRFFSbDNJQU5CRG5keklBTkJBM1p6SUFGcUlCbHFJQjlCRDNjZ0gwRU5kM01nSDBFS2RuTnFJaUJxSUJKQkdYY2dFa0VPZDNNZ0VrRURkbk1nRjJvZ0gyb2dFVUVaZHlBUlFRNTNjeUFSUVFOMmN5QVVhaUFlYWlBSlFSbDNJQWxCRG5keklBbEJBM1p6SUFOcUlCMXFJQnhCRDNjZ0hFRU5kM01nSEVFS2RuTnFJaUZCRDNjZ0lVRU5kM01nSVVFS2RuTnFJaUpCRDNjZ0lrRU5kM01nSWtFS2RuTnFJaU5CRDNjZ0kwRU5kM01nSTBFS2RuTnFJaVJxSUJ0QkdYY2dHMEVPZDNNZ0cwRURkbk1nSG1vZ0kyb2dHa0VaZHlBYVFRNTNjeUFhUVFOMmN5QWRhaUFpYWlBWlFSbDNJQmxCRG5keklCbEJBM1p6SUJOcUlDRnFJQmhCR1hjZ0dFRU9kM01nR0VFRGRuTWdFbW9nSEdvZ0YwRVpkeUFYUVE1M2N5QVhRUU4yY3lBUmFpQWJhaUFVUVJsM0lCUkJEbmR6SUJSQkEzWnpJQWxxSUJwcUlDQkJEM2NnSUVFTmQzTWdJRUVLZG5OcUlpVkJEM2NnSlVFTmQzTWdKVUVLZG5OcUlpWkJEM2NnSmtFTmQzTWdKa0VLZG5OcUlpZEJEM2NnSjBFTmQzTWdKMEVLZG5OcUlpaEJEM2NnS0VFTmQzTWdLRUVLZG5OcUlpbEJEM2NnS1VFTmQzTWdLVUVLZG5OcUlpcEJEM2NnS2tFTmQzTWdLa0VLZG5OcUlpdEJHWGNnSzBFT2QzTWdLMEVEZG5NZ0gwRVpkeUFmUVE1M2N5QWZRUU4yY3lBYmFpQW5haUFlUVJsM0lCNUJEbmR6SUI1QkEzWnpJQnBxSUNacUlCMUJHWGNnSFVFT2QzTWdIVUVEZG5NZ0dXb2dKV29nSkVFUGR5QWtRUTEzY3lBa1FRcDJjMm9pTEVFUGR5QXNRUTEzY3lBc1FRcDJjMm9pTFVFUGR5QXRRUTEzY3lBdFFRcDJjMm9pTG1vZ0pFRVpkeUFrUVE1M2N5QWtRUU4yY3lBbmFpQWdRUmwzSUNCQkRuZHpJQ0JCQTNaeklCeHFJQ2hxSUM1QkQzY2dMa0VOZDNNZ0xrRUtkbk5xSWk5cUlDTkJHWGNnSTBFT2QzTWdJMEVEZG5NZ0ptb2dMbW9nSWtFWmR5QWlRUTUzY3lBaVFRTjJjeUFsYWlBdGFpQWhRUmwzSUNGQkRuZHpJQ0ZCQTNaeklDQnFJQ3hxSUN0QkQzY2dLMEVOZDNNZ0swRUtkbk5xSWpCQkQzY2dNRUVOZDNNZ01FRUtkbk5xSWpGQkQzY2dNVUVOZDNNZ01VRUtkbk5xSWpKQkQzY2dNa0VOZDNNZ01rRUtkbk5xSWpOcUlDcEJHWGNnS2tFT2QzTWdLa0VEZG5NZ0xXb2dNbW9nS1VFWmR5QXBRUTUzY3lBcFFRTjJjeUFzYWlBeGFpQW9RUmwzSUNoQkRuZHpJQ2hCQTNaeklDUnFJREJxSUNkQkdYY2dKMEVPZDNNZ0owRURkbk1nSTJvZ0syb2dKa0VaZHlBbVFRNTNjeUFtUVFOMmN5QWlhaUFxYWlBbFFSbDNJQ1ZCRG5keklDVkJBM1p6SUNGcUlDbHFJQzlCRDNjZ0wwRU5kM01nTDBFS2RuTnFJalJCRDNjZ05FRU5kM01nTkVFS2RuTnFJalZCRDNjZ05VRU5kM01nTlVFS2RuTnFJalpCRDNjZ05rRU5kM01nTmtFS2RuTnFJamRCRDNjZ04wRU5kM01nTjBFS2RuTnFJamhCRDNjZ09FRU5kM01nT0VFS2RuTnFJamxCRDNjZ09VRU5kM01nT1VFS2RuTnFJam9nT0NBMElDNGdMQ0FoSUJzZ0dTQURJQTRnQkVFQUtBTFlpUUVpTzBFYWR5QTdRUlYzY3lBN1FRZDNjMEVBS0FMa2lRRWlQR3BCQUNnQzRJa0JJajFCQUNnQzNJa0JJajV6SUR0eElEMXphaUFIYWtHWTM2aVVCR29pQjBFQUtBTFVpUUVpUDJvaUFDQU1haUE3SUExcUlENGdEMm9nUFNBR2FpQUFJRDRnTzNOeElENXphaUFBUVJwM0lBQkJGWGR6SUFCQkIzZHpha0dSaWQySkIyb2lRRUVBS0FMUWlRRWlRV29pRENBQUlEdHpjU0E3YzJvZ0RFRWFkeUFNUVJWM2N5QU1RUWQzYzJwQnovZURybnRxSWtKQkFDZ0N6SWtCSWtOcUlnMGdEQ0FBYzNFZ0FITnFJQTFCR25jZ0RVRVZkM01nRFVFSGQzTnFRYVczMTgxK2FpSkVRUUFvQXNpSkFTSUFhaUlQSUEwZ0RITnhJQXh6YWlBUFFScDNJQTlCRlhkeklBOUJCM2R6YWtIYmhOdktBMm9pUlNCQklFTWdBSE54SUVNZ0FIRnpJQUJCSG5jZ0FFRVRkM01nQUVFS2QzTnFJQWRxSWdacUlnZHFJQVVnRDJvZ0NpQU5haUFMSUF4cUlBY2dEeUFOYzNFZ0RYTnFJQWRCR25jZ0IwRVZkM01nQjBFSGQzTnFRZkdqeE04RmFpSUtJQVlnQUhNZ1EzRWdCaUFBY1hNZ0JrRWVkeUFHUVJOM2N5QUdRUXAzYzJvZ1FHb2lER29pQkNBSElBOXpjU0FQYzJvZ0JFRWFkeUFFUVJWM2N5QUVRUWQzYzJwQnBJWCtrWGxxSWdzZ0RDQUdjeUFBY1NBTUlBWnhjeUFNUVI1M0lBeEJFM2R6SUF4QkNuZHphaUJDYWlJTmFpSVBJQVFnQjNOeElBZHphaUFQUVJwM0lBOUJGWGR6SUE5QkIzZHpha0hWdmZIWWVtb2lRQ0FOSUF4eklBWnhJQTBnREhGeklBMUJIbmNnRFVFVGQzTWdEVUVLZDNOcUlFUnFJZ1pxSWdjZ0R5QUVjM0VnQkhOcUlBZEJHbmNnQjBFVmQzTWdCMEVIZDNOcVFaalZuc0I5YWlKQ0lBWWdEWE1nREhFZ0JpQU5jWE1nQmtFZWR5QUdRUk4zY3lBR1FRcDNjMm9nUldvaURHb2lCV29nRmlBSGFpQVFJQTlxSUFnZ0JHb2dCU0FISUE5emNTQVBjMm9nQlVFYWR5QUZRUlYzY3lBRlFRZDNjMnBCZ2JhTmxBRnFJZ2dnRENBR2N5QU5jU0FNSUFaeGN5QU1RUjUzSUF4QkUzZHpJQXhCQ25kemFpQUthaUlOYWlJUElBVWdCM054SUFkemFpQVBRUnAzSUE5QkZYZHpJQTlCQjNkemFrRytpOGFoQW1vaURpQU5JQXh6SUFaeElBMGdESEZ6SUExQkhuY2dEVUVUZDNNZ0RVRUtkM05xSUF0cUlnWnFJZ2NnRHlBRmMzRWdCWE5xSUFkQkduY2dCMEVWZDNNZ0IwRUhkM05xUWNQN3NhZ0ZhaUlRSUFZZ0RYTWdESEVnQmlBTmNYTWdCa0VlZHlBR1FSTjNjeUFHUVFwM2Myb2dRR29pREdvaUJDQUhJQTl6Y1NBUGMyb2dCRUVhZHlBRVFSVjNjeUFFUVFkM2MycEI5THI1bFFkcUloWWdEQ0FHY3lBTmNTQU1JQVp4Y3lBTVFSNTNJQXhCRTNkeklBeEJDbmR6YWlCQ2FpSU5haUlGYWlBQklBUnFJQUlnQjJvZ0ZTQVBhaUFGSUFRZ0IzTnhJQWR6YWlBRlFScDNJQVZCRlhkeklBVkJCM2R6YWtIKzQvcUdlR29pQnlBTklBeHpJQVp4SUEwZ0RIRnpJQTFCSG5jZ0RVRVRkM01nRFVFS2QzTnFJQWhxSWdGcUlnWWdCU0FFYzNFZ0JITnFJQVpCR25jZ0JrRVZkM01nQmtFSGQzTnFRYWVOOE41NWFpSUVJQUVnRFhNZ0RIRWdBU0FOY1hNZ0FVRWVkeUFCUVJOM2N5QUJRUXAzYzJvZ0Rtb2lBbW9pRENBR0lBVnpjU0FGYzJvZ0RFRWFkeUFNUVJWM2N5QU1RUWQzYzJwQjlPTHZqSHhxSWdVZ0FpQUJjeUFOY1NBQ0lBRnhjeUFDUVI1M0lBSkJFM2R6SUFKQkNuZHphaUFRYWlJRGFpSU5JQXdnQm5OeElBWnphaUFOUVJwM0lBMUJGWGR6SUExQkIzZHpha0hCMCsya2Ztb2lDQ0FESUFKeklBRnhJQU1nQW5GeklBTkJIbmNnQTBFVGQzTWdBMEVLZDNOcUlCWnFJZ0ZxSWc4Z0Yyb2dFU0FOYWlBVUlBeHFJQWtnQm1vZ0R5QU5JQXh6Y1NBTWMyb2dEMEVhZHlBUFFSVjNjeUFQUVFkM2MycEJoby81L1g1cUlnWWdBU0FEY3lBQ2NTQUJJQU54Y3lBQlFSNTNJQUZCRTNkeklBRkJDbmR6YWlBSGFpSUNhaUlKSUE4Z0RYTnhJQTF6YWlBSlFScDNJQWxCRlhkeklBbEJCM2R6YWtIR3U0YitBR29pRENBQ0lBRnpJQU54SUFJZ0FYRnpJQUpCSG5jZ0FrRVRkM01nQWtFS2QzTnFJQVJxSWdOcUloRWdDU0FQYzNFZ0QzTnFJQkZCR25jZ0VVRVZkM01nRVVFSGQzTnFRY3pEc3FBQ2FpSU5JQU1nQW5NZ0FYRWdBeUFDY1hNZ0EwRWVkeUFEUVJOM2N5QURRUXAzYzJvZ0JXb2lBV29pRkNBUklBbHpjU0FKYzJvZ0ZFRWFkeUFVUVJWM2N5QVVRUWQzYzJwQjc5aWs3d0pxSWc4Z0FTQURjeUFDY1NBQklBTnhjeUFCUVI1M0lBRkJFM2R6SUFGQkNuZHphaUFJYWlJQ2FpSVhhaUFUSUJScUlCZ2dFV29nRWlBSmFpQVhJQlFnRVhOeElCRnphaUFYUVJwM0lCZEJGWGR6SUJkQkIzZHpha0dxaWRMVEJHb2lHQ0FDSUFGeklBTnhJQUlnQVhGeklBSkJIbmNnQWtFVGQzTWdBa0VLZDNOcUlBWnFJZ05xSWdrZ0Z5QVVjM0VnRkhOcUlBbEJHbmNnQ1VFVmQzTWdDVUVIZDNOcVFkelR3dVVGYWlJVUlBTWdBbk1nQVhFZ0F5QUNjWE1nQTBFZWR5QURRUk4zY3lBRFFRcDNjMm9nREdvaUFXb2lFU0FKSUJkemNTQVhjMm9nRVVFYWR5QVJRUlYzY3lBUlFRZDNjMnBCMnBIbXR3ZHFJaGNnQVNBRGN5QUNjU0FCSUFOeGN5QUJRUjUzSUFGQkUzZHpJQUZCQ25kemFpQU5haUlDYWlJU0lCRWdDWE54SUFsemFpQVNRUnAzSUJKQkZYZHpJQkpCQjNkemFrSFNvdm5CZVdvaUdTQUNJQUZ6SUFOeElBSWdBWEZ6SUFKQkhuY2dBa0VUZDNNZ0FrRUtkM05xSUE5cUlnTnFJaE5xSUI0Z0Vtb2dHaUFSYWlBZElBbHFJQk1nRWlBUmMzRWdFWE5xSUJOQkduY2dFMEVWZDNNZ0UwRUhkM05xUWUyTXg4RjZhaUlhSUFNZ0FuTWdBWEVnQXlBQ2NYTWdBMEVlZHlBRFFSTjNjeUFEUVFwM2Myb2dHR29pQVdvaUNTQVRJQkp6Y1NBU2Myb2dDVUVhZHlBSlFSVjNjeUFKUVFkM2MycEJ5TStNZ0h0cUloZ2dBU0FEY3lBQ2NTQUJJQU54Y3lBQlFSNTNJQUZCRTNkeklBRkJDbmR6YWlBVWFpSUNhaUlSSUFrZ0UzTnhJQk56YWlBUlFScDNJQkZCRlhkeklCRkJCM2R6YWtISC8rWDZlMm9pRkNBQ0lBRnpJQU54SUFJZ0FYRnpJQUpCSG5jZ0FrRVRkM01nQWtFS2QzTnFJQmRxSWdOcUloSWdFU0FKYzNFZ0NYTnFJQkpCR25jZ0VrRVZkM01nRWtFSGQzTnFRZk9YZ0xkOGFpSVhJQU1nQW5NZ0FYRWdBeUFDY1hNZ0EwRWVkeUFEUVJOM2N5QURRUXAzYzJvZ0dXb2lBV29pRTJvZ0lDQVNhaUFjSUJGcUlCOGdDV29nRXlBU0lCRnpjU0FSYzJvZ0UwRWFkeUFUUVJWM2N5QVRRUWQzYzJwQng2S2VyWDFxSWhrZ0FTQURjeUFDY1NBQklBTnhjeUFCUVI1M0lBRkJFM2R6SUFGQkNuZHphaUFhYWlJQ2FpSUpJQk1nRW5OeElCSnphaUFKUVJwM0lBbEJGWGR6SUFsQkIzZHpha0hSeHFrMmFpSWFJQUlnQVhNZ0EzRWdBaUFCY1hNZ0FrRWVkeUFDUVJOM2N5QUNRUXAzYzJvZ0dHb2lBMm9pRVNBSklCTnpjU0FUYzJvZ0VVRWFkeUFSUVJWM2N5QVJRUWQzYzJwQjU5S2tvUUZxSWhnZ0F5QUNjeUFCY1NBRElBSnhjeUFEUVI1M0lBTkJFM2R6SUFOQkNuZHphaUFVYWlJQmFpSVNJQkVnQ1hOeElBbHphaUFTUVJwM0lCSkJGWGR6SUJKQkIzZHpha0dGbGR5OUFtb2lGQ0FCSUFOeklBSnhJQUVnQTNGeklBRkJIbmNnQVVFVGQzTWdBVUVLZDNOcUlCZHFJZ0pxSWhNZ0kyb2dKaUFTYWlBaUlCRnFJQ1VnQ1dvZ0V5QVNJQkZ6Y1NBUmMyb2dFMEVhZHlBVFFSVjNjeUFUUVFkM2MycEJ1TUxzOEFKcUloY2dBaUFCY3lBRGNTQUNJQUZ4Y3lBQ1FSNTNJQUpCRTNkeklBSkJDbmR6YWlBWmFpSURhaUlKSUJNZ0VuTnhJQkp6YWlBSlFScDNJQWxCRlhkeklBbEJCM2R6YWtIODI3SHBCR29pR1NBRElBSnpJQUZ4SUFNZ0FuRnpJQU5CSG5jZ0EwRVRkM01nQTBFS2QzTnFJQnBxSWdGcUloRWdDU0FUYzNFZ0UzTnFJQkZCR25jZ0VVRVZkM01nRVVFSGQzTnFRWk9hNEprRmFpSWFJQUVnQTNNZ0FuRWdBU0FEY1hNZ0FVRWVkeUFCUVJOM2N5QUJRUXAzYzJvZ0dHb2lBbW9pRWlBUklBbHpjU0FKYzJvZ0VrRWFkeUFTUVJWM2N5QVNRUWQzYzJwQjFPYXBxQVpxSWhnZ0FpQUJjeUFEY1NBQ0lBRnhjeUFDUVI1M0lBSkJFM2R6SUFKQkNuZHphaUFVYWlJRGFpSVRhaUFvSUJKcUlDUWdFV29nSnlBSmFpQVRJQklnRVhOeElCRnphaUFUUVJwM0lCTkJGWGR6SUJOQkIzZHpha0c3bGFpekIyb2lGQ0FESUFKeklBRnhJQU1nQW5GeklBTkJIbmNnQTBFVGQzTWdBMEVLZDNOcUlCZHFJZ0ZxSWdrZ0V5QVNjM0VnRW5OcUlBbEJHbmNnQ1VFVmQzTWdDVUVIZDNOcVFhNlNpNDU0YWlJWElBRWdBM01nQW5FZ0FTQURjWE1nQVVFZWR5QUJRUk4zY3lBQlFRcDNjMm9nR1dvaUFtb2lFU0FKSUJOemNTQVRjMm9nRVVFYWR5QVJRUlYzY3lBUlFRZDNjMnBCaGRuSWszbHFJaGtnQWlBQmN5QURjU0FDSUFGeGN5QUNRUjUzSUFKQkUzZHpJQUpCQ25kemFpQWFhaUlEYWlJU0lCRWdDWE54SUFsemFpQVNRUnAzSUJKQkZYZHpJQkpCQjNkemFrR2gwZitWZW1vaUdpQURJQUp6SUFGeElBTWdBbkZ6SUFOQkhuY2dBMEVUZDNNZ0EwRUtkM05xSUJocUlnRnFJaE5xSUNvZ0Vtb2dMU0FSYWlBcElBbHFJQk1nRWlBUmMzRWdFWE5xSUJOQkduY2dFMEVWZDNNZ0UwRUhkM05xUWN2TTZjQjZhaUlZSUFFZ0EzTWdBbkVnQVNBRGNYTWdBVUVlZHlBQlFSTjNjeUFCUVFwM2Myb2dGR29pQW1vaUNTQVRJQkp6Y1NBU2Myb2dDVUVhZHlBSlFSVjNjeUFKUVFkM2MycEI4SmF1a254cUloUWdBaUFCY3lBRGNTQUNJQUZ4Y3lBQ1FSNTNJQUpCRTNkeklBSkJDbmR6YWlBWGFpSURhaUlSSUFrZ0UzTnhJQk56YWlBUlFScDNJQkZCRlhkeklCRkJCM2R6YWtHam83RzdmR29pRnlBRElBSnpJQUZ4SUFNZ0FuRnpJQU5CSG5jZ0EwRVRkM01nQTBFS2QzTnFJQmxxSWdGcUloSWdFU0FKYzNFZ0NYTnFJQkpCR25jZ0VrRVZkM01nRWtFSGQzTnFRWm5ReTR4OWFpSVpJQUVnQTNNZ0FuRWdBU0FEY1hNZ0FVRWVkeUFCUVJOM2N5QUJRUXAzYzJvZ0dtb2lBbW9pRTJvZ01DQVNhaUF2SUJGcUlDc2dDV29nRXlBU0lCRnpjU0FSYzJvZ0UwRWFkeUFUUVJWM2N5QVRRUWQzYzJwQnBJemt0SDFxSWhvZ0FpQUJjeUFEY1NBQ0lBRnhjeUFDUVI1M0lBSkJFM2R6SUFKQkNuZHphaUFZYWlJRGFpSUpJQk1nRW5OeElCSnphaUFKUVJwM0lBbEJGWGR6SUFsQkIzZHpha0dGNjdpZ2Yyb2lHQ0FESUFKeklBRnhJQU1nQW5GeklBTkJIbmNnQTBFVGQzTWdBMEVLZDNOcUlCUnFJZ0ZxSWhFZ0NTQVRjM0VnRTNOcUlCRkJHbmNnRVVFVmQzTWdFVUVIZDNOcVFmREFxb01CYWlJVUlBRWdBM01nQW5FZ0FTQURjWE1nQVVFZWR5QUJRUk4zY3lBQlFRcDNjMm9nRjJvaUFtb2lFaUFSSUFsemNTQUpjMm9nRWtFYWR5QVNRUlYzY3lBU1FRZDNjMnBCbG9LVHpRRnFJaGNnQWlBQmN5QURjU0FDSUFGeGN5QUNRUjUzSUFKQkUzZHpJQUpCQ25kemFpQVphaUlEYWlJVElEWnFJRElnRW1vZ05TQVJhaUF4SUFscUlCTWdFaUFSYzNFZ0VYTnFJQk5CR25jZ0UwRVZkM01nRTBFSGQzTnFRWWpZM2ZFQmFpSVpJQU1nQW5NZ0FYRWdBeUFDY1hNZ0EwRWVkeUFEUVJOM2N5QURRUXAzYzJvZ0dtb2lBV29pQ1NBVElCSnpjU0FTYzJvZ0NVRWFkeUFKUVJWM2N5QUpRUWQzYzJwQnpPNmh1Z0pxSWhvZ0FTQURjeUFDY1NBQklBTnhjeUFCUVI1M0lBRkJFM2R6SUFGQkNuZHphaUFZYWlJQ2FpSVJJQWtnRTNOeElCTnphaUFSUVJwM0lCRkJGWGR6SUJGQkIzZHpha0cxK2NLbEEyb2lHQ0FDSUFGeklBTnhJQUlnQVhGeklBSkJIbmNnQWtFVGQzTWdBa0VLZDNOcUlCUnFJZ05xSWhJZ0VTQUpjM0VnQ1hOcUlCSkJHbmNnRWtFVmQzTWdFa0VIZDNOcVFiT1o4TWdEYWlJVUlBTWdBbk1nQVhFZ0F5QUNjWE1nQTBFZWR5QURRUk4zY3lBRFFRcDNjMm9nRjJvaUFXb2lFMm9nTEVFWmR5QXNRUTUzY3lBc1FRTjJjeUFvYWlBMGFpQXpRUTkzSUROQkRYZHpJRE5CQ25aemFpSVhJQkpxSURjZ0VXb2dNeUFKYWlBVElCSWdFWE54SUJGemFpQVRRUnAzSUJOQkZYZHpJQk5CQjNkemFrSEsxT0wyQkdvaUd5QUJJQU56SUFKeElBRWdBM0Z6SUFGQkhuY2dBVUVUZDNNZ0FVRUtkM05xSUJscUlnSnFJZ2tnRXlBU2MzRWdFbk5xSUFsQkduY2dDVUVWZDNNZ0NVRUhkM05xUWMrVTg5d0ZhaUlaSUFJZ0FYTWdBM0VnQWlBQmNYTWdBa0VlZHlBQ1FSTjNjeUFDUVFwM2Myb2dHbW9pQTJvaUVTQUpJQk56Y1NBVGMyb2dFVUVhZHlBUlFSVjNjeUFSUVFkM2MycEI4OSs1d1FacUlob2dBeUFDY3lBQmNTQURJQUp4Y3lBRFFSNTNJQU5CRTNkeklBTkJDbmR6YWlBWWFpSUJhaUlTSUJFZ0NYTnhJQWx6YWlBU1FScDNJQkpCRlhkeklCSkJCM2R6YWtIdWhiNmtCMm9pSENBQklBTnpJQUp4SUFFZ0EzRnpJQUZCSG5jZ0FVRVRkM01nQVVFS2QzTnFJQlJxSWdKcUloTnFJQzVCR1hjZ0xrRU9kM01nTGtFRGRuTWdLbW9nTm1vZ0xVRVpkeUF0UVE1M2N5QXRRUU4yY3lBcGFpQTFhaUFYUVE5M0lCZEJEWGR6SUJkQkNuWnphaUlVUVE5M0lCUkJEWGR6SUJSQkNuWnphaUlZSUJKcUlEa2dFV29nRkNBSmFpQVRJQklnRVhOeElCRnphaUFUUVJwM0lCTkJGWGR6SUJOQkIzZHpha0h2eHBYRkIyb2lDU0FDSUFGeklBTnhJQUlnQVhGeklBSkJIbmNnQWtFVGQzTWdBa0VLZDNOcUlCdHFJZ05xSWhFZ0V5QVNjM0VnRW5OcUlCRkJHbmNnRVVFVmQzTWdFVUVIZDNOcVFaVHdvYVo0YWlJYklBTWdBbk1nQVhFZ0F5QUNjWE1nQTBFZWR5QURRUk4zY3lBRFFRcDNjMm9nR1dvaUFXb2lFaUFSSUJOemNTQVRjMm9nRWtFYWR5QVNRUlYzY3lBU1FRZDNjMnBCaUlTYzVuaHFJaGtnQVNBRGN5QUNjU0FCSUFOeGN5QUJRUjUzSUFGQkUzZHpJQUZCQ25kemFpQWFhaUlDYWlJVElCSWdFWE54SUJGemFpQVRRUnAzSUJOQkZYZHpJQk5CQjNkemFrSDYvL3VGZVdvaUdpQUNJQUZ6SUFOeElBSWdBWEZ6SUFKQkhuY2dBa0VUZDNNZ0FrRUtkM05xSUJ4cUlnTnFJaFFnUEdvMkF1U0pBVUVBSUQ4Z0F5QUNjeUFCY1NBRElBSnhjeUFEUVI1M0lBTkJFM2R6SUFOQkNuZHphaUFKYWlJQklBTnpJQUp4SUFFZ0EzRnpJQUZCSG5jZ0FVRVRkM01nQVVFS2QzTnFJQnRxSWdJZ0FYTWdBM0VnQWlBQmNYTWdBa0VlZHlBQ1FSTjNjeUFDUVFwM2Myb2dHV29pQXlBQ2N5QUJjU0FESUFKeGN5QURRUjUzSUFOQkUzZHpJQU5CQ25kemFpQWFhaUlKYWpZQzFJa0JRUUFnUFNBdlFSbDNJQzlCRG5keklDOUJBM1p6SUN0cUlEZHFJQmhCRDNjZ0dFRU5kM01nR0VFS2RuTnFJaGdnRVdvZ0ZDQVRJQkp6Y1NBU2Myb2dGRUVhZHlBVVFSVjNjeUFVUVFkM2MycEI2OW5Cb25wcUloa2dBV29pRVdvMkF1Q0pBVUVBSUVFZ0NTQURjeUFDY1NBSklBTnhjeUFKUVI1M0lBbEJFM2R6SUFsQkNuZHphaUFaYWlJQmFqWUMwSWtCUVFBZ1BpQXdRUmwzSURCQkRuZHpJREJCQTNaeklDOXFJQmRxSURwQkQzY2dPa0VOZDNNZ09rRUtkbk5xSUJKcUlCRWdGQ0FUYzNFZ0UzTnFJQkZCR25jZ0VVRVZkM01nRVVFSGQzTnFRZmZINXZkN2FpSVhJQUpxSWhKcU5nTGNpUUZCQUNCRElBRWdDWE1nQTNFZ0FTQUpjWE1nQVVFZWR5QUJRUk4zY3lBQlFRcDNjMm9nRjJvaUFtbzJBc3lKQVVFQUlEc2dORUVaZHlBMFFRNTNjeUEwUVFOMmN5QXdhaUE0YWlBWVFROTNJQmhCRFhkeklCaEJDblp6YWlBVGFpQVNJQkVnRkhOeElCUnphaUFTUVJwM0lCSkJGWGR6SUJKQkIzZHpha0h5OGNXemZHb2lFU0FEYW1vMkF0aUpBVUVBSUFBZ0FpQUJjeUFKY1NBQ0lBRnhjeUFDUVI1M0lBSkJFM2R6SUFKQkNuZHphaUFSYW1vMkFzaUpBUXUyQmdJRWZ3RitRUUFvQXNDSkFTSUFRUUoyUVE5eElnRkJBblJCZ0lrQmFpSUNJQUlvQWdCQmZ5QUFRUU4wSWdCMFFYOXpjVUdBQVNBQWRITTJBZ0FDUUFKQUFrQWdBVUVPU1EwQUFrQWdBVUVPUncwQVFRQkJBRFlDdklrQkMwR0FpUUVRQTBFQUlRTU1BUXNnQVVFTlJnMEJJQUZCQVdvaEF3c2dBeUVBQWtCQkJpQURhMEVIY1NJQ1JRMEFJQU5CQW5SQmdJa0JhaUVCSUFNaEFBTkFJQUZCQURZQ0FDQUJRUVJxSVFFZ0FFRUJhaUVBSUFKQmYyb2lBZzBBQ3dzZ0EwRjVha0VIU1EwQUlBQkJBblFoQVFOQUlBRkJtSWtCYWtJQU53SUFJQUZCa0lrQmFrSUFOd0lBSUFGQmlJa0Jha0lBTndJQUlBRkJnSWtCYWtJQU53SUFJQUZCSUdvaUFVRTRSdzBBQ3d0QkFDRUJRUUJCQUNrRHdJa0JJZ1NuSWdCQkczUWdBRUVMZEVHQWdQd0hjWElnQUVFRmRrR0EvZ054SUFCQkEzUkJHSFp5Y2pZQ3ZJa0JRUUFnQkVJZGlLY2lBRUVZZENBQVFZRCtBM0ZCQ0hSeUlBQkJDSFpCZ1A0RGNTQUFRUmgyY25JMkFyaUpBVUdBaVFFUUEwRUFRUUFvQXVTSkFTSUFRUmgwSUFCQmdQNERjVUVJZEhJZ0FFRUlka0dBL2dOeElBQkJHSFp5Y2pZQzVJa0JRUUJCQUNnQzRJa0JJZ0JCR0hRZ0FFR0EvZ054UVFoMGNpQUFRUWgyUVlEK0EzRWdBRUVZZG5KeU5nTGdpUUZCQUVFQUtBTGNpUUVpQUVFWWRDQUFRWUQrQTNGQkNIUnlJQUJCQ0haQmdQNERjU0FBUVJoMmNuSTJBdHlKQVVFQVFRQW9BdGlKQVNJQVFSaDBJQUJCZ1A0RGNVRUlkSElnQUVFSWRrR0EvZ054SUFCQkdIWnljallDMklrQlFRQkJBQ2dDMUlrQklnQkJHSFFnQUVHQS9nTnhRUWgwY2lBQVFRaDJRWUQrQTNFZ0FFRVlkbkp5TmdMVWlRRkJBRUVBS0FMUWlRRWlBRUVZZENBQVFZRCtBM0ZCQ0hSeUlBQkJDSFpCZ1A0RGNTQUFRUmgyY25JMkF0Q0pBVUVBUVFBb0FzeUpBU0lBUVJoMElBQkJnUDREY1VFSWRISWdBRUVJZGtHQS9nTnhJQUJCR0haeWNqWUN6SWtCUVFCQkFDZ0N5SWtCSWdCQkdIUWdBRUdBL2dOeFFRaDBjaUFBUVFoMlFZRCtBM0VnQUVFWWRuSnlOZ0xJaVFFQ1FFRUFLQUxvaVFFaUFrVU5BRUVBSVFBRFFDQUJRWUFKYWlBQlFjaUpBV290QUFBNkFBQWdBVUVCYWlFQklBSWdBRUVCYWlJQVFmOEJjVXNOQUFzTEN3WUFRWUNKQVF1akFRQkJBRUlBTndQQWlRRkJBRUVjUVNBZ0FVSGdBVVlpQVJzMkF1aUpBVUVBUXFlZjVxZkc5SlA5dm45Q3E3T1AvSkdqcy9EYkFDQUJHemNENElrQlFRQkNzWmFBL3AraWhhem9BRUwvcExtSXhaSGFncHQvSUFFYk53UFlpUUZCQUVLWHVzT0RrNmVXaDNkQzh1YTc0Nk9uL2FlbGZ5QUJHemNEMElrQlFRQkMyTDJXaVB5Z3RiNDJRdWZNcDlEVzBPdXp1MzhnQVJzM0E4aUpBU0FBRUFJUUJBc0xDd0VBUVlBSUN3UndBQUFBXCI7XG52YXIgaGFzaCRhID0gXCI2NGYwNjY3NFwiO1xudmFyIHdhc21Kc29uJGEgPSB7XG5cdG5hbWU6IG5hbWUkYSxcblx0ZGF0YTogZGF0YSRhLFxuXHRoYXNoOiBoYXNoJGFcbn07XG5cbmNvbnN0IG11dGV4JGEgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkYSA9IG51bGw7XG4vKipcbiAqIENhbGN1bGF0ZXMgU0hBLTIgKFNIQS0yMjQpIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNoYTIyNChkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSRhID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkYSwgd2FzbUpzb24kYSwgMjgpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGEgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRhLmNhbGN1bGF0ZShkYXRhLCAyMjQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSRhLmNhbGN1bGF0ZShkYXRhLCAyMjQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTSEEtMiAoU0hBLTIyNCkgaGFzaCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVTSEEyMjQoKSB7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kYSwgMjgpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KDIyNCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KDIyNCk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogNjQsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiAyOCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxuY29uc3QgbXV0ZXgkOSA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSQ5ID0gbnVsbDtcbi8qKlxuICogQ2FsY3VsYXRlcyBTSEEtMiAoU0hBLTI1NikgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc2hhMjU2KGRhdGEpIHtcbiAgICBpZiAod2FzbUNhY2hlJDkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCQ5LCB3YXNtSnNvbiRhLCAzMilcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkOSA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJDkuY2FsY3VsYXRlKGRhdGEsIDI1Nik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJDkuY2FsY3VsYXRlKGRhdGEsIDI1Nik7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFNIQS0yIChTSEEtMjU2KSBoYXNoIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNIQTI1NigpIHtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRhLCAzMikudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoMjU2KTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoMjU2KTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDMyLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSQ5ID0gXCJzaGE1MTJcIjtcbnZhciBkYXRhJDkgPSBcIkFHRnpiUUVBQUFBQkVRUmdBQUYvWUFGL0FHQUFBR0FDZjM4QUF3Z0hBQUVCQVFJQUF3VUVBUUVDQWdZT0FuOEJRZENLQlF0L0FFR0FDQXNIY0FnR2JXVnRiM0o1QWdBT1NHRnphRjlIWlhSQ2RXWm1aWElBQUFsSVlYTm9YMGx1YVhRQUFRdElZWE5vWDFWd1pHRjBaUUFDQ2toaGMyaGZSbWx1WVd3QUJBMUlZWE5vWDBkbGRGTjBZWFJsQUFVT1NHRnphRjlEWVd4amRXeGhkR1VBQmdwVFZFRlVSVjlUU1ZwRkF3RUttV2dIQlFCQmdBa0xtd0lBUVFCQ0FEY0RnSW9CUVFCQk1FSEFBQ0FBUVlBRFJpSUFHellDeUlvQlFRQkNwSi9wOTl1RDB0ckhBRUw1d3ZpYmthT3o4TnNBSUFBYk53UEFpZ0ZCQUVLbm4rYW4xc0dMaGx0QzYvcUcycisxOXNFZklBQWJOd080aWdGQkFFS1JxdURDOXRDUzJvNS9RcC9ZK2RuQ2tkcUNtMzhnQUJzM0E3Q0tBVUVBUXJHV2dQNy96TW1aNXdCQzBZV2E3L3JQbElmUkFDQUFHemNEcUlvQlFRQkN1Yks1dUkrYis1Y1ZRdkh0OVBpbHAvMm5wWDhnQUJzM0E2Q0tBVUVBUXBlNnc0T2pxOENza1g5Q3EvRFQ5Sy91dkxjOElBQWJOd09ZaWdGQkFFS0hxdk96bzZXS3plSUFRcnZPcXFiWTBPdXp1MzhnQUJzM0E1Q0tBVUVBUXRpOWxvamNxK2ZkUzBLSWt2T2QvOHo1aE9vQUlBQWJOd09JaWdFTDhnSUNBWDRHZjBFQVFRQXBBNENLQVNJQklBQ3RmRGNEZ0lvQkFrQUNRQUpBSUFHblFmOEFjU0lDRFFCQmdBa2hBd3dCQ3dKQVFZQUJJQUpySWdRZ0FDQUVJQUJKR3lJRFJRMEFJQU5CQTNFaEJTQUNRWUNKQVdvaEJrRUFJUUlDUUNBRFFRUkpEUUFnQTBIOEFYRWhCMEVBSVFJRFFDQUdJQUpxSWdNZ0FrR0FDV290QUFBNkFBQWdBMEVCYWlBQ1FZRUphaTBBQURvQUFDQURRUUpxSUFKQmdnbHFMUUFBT2dBQUlBTkJBMm9nQWtHRENXb3RBQUE2QUFBZ0J5QUNRUVJxSWdKSERRQUxDeUFGUlEwQUEwQWdCaUFDYWlBQ1FZQUphaTBBQURvQUFDQUNRUUZxSVFJZ0JVRi9haUlGRFFBTEN5QUVJQUJMRFFGQmdJa0JFQU1nQUNBRWF5RUFJQVJCZ0FscUlRTUxBa0FnQUVHQUFVa05BQU5BSUFNUUF5QURRWUFCYWlFRElBQkJnSDlxSWdCQi93QkxEUUFMQ3lBQVJRMEFRUUFoQWtFQUlRVURRQ0FDUVlDSkFXb2dBeUFDYWkwQUFEb0FBQ0FDUVFGcUlRSWdBQ0FGUVFGcUlnVkIvd0Z4U3cwQUN3c0wzRllCVm41QkFDQUFLUU1JSWdGQ09JWWdBVUtBL2dPRFFpaUdoQ0FCUW9DQS9BZURRaGlHSUFGQ2dJQ0ErQStEUWdpR2hJUWdBVUlJaUVLQWdJRDRENE1nQVVJWWlFS0FnUHdIZzRRZ0FVSW9pRUtBL2dPRElBRkNPSWlFaElRaUFrSS9pU0FDUWppSmhTQUNRZ2VJaFNBQUtRTUFJZ0ZDT0lZZ0FVS0EvZ09EUWlpR2hDQUJRb0NBL0FlRFFoaUdJQUZDZ0lDQStBK0RRZ2lHaElRZ0FVSUlpRUtBZ0lENEQ0TWdBVUlZaUVLQWdQd0hnNFFnQVVJb2lFS0EvZ09ESUFGQ09JaUVoSVFpQTN3Z0FDa0RTQ0lCUWppR0lBRkNnUDREZzBJb2hvUWdBVUtBZ1B3SGcwSVloaUFCUW9DQWdQZ1BnMElJaG9TRUlBRkNDSWhDZ0lDQStBK0RJQUZDR0loQ2dJRDhCNE9FSUFGQ0tJaENnUDREZ3lBQlFqaUloSVNFSWdSOElBQXBBM0FpQVVJNGhpQUJRb0QrQTROQ0tJYUVJQUZDZ0lEOEI0TkNHSVlnQVVLQWdJRDRENE5DQ0lhRWhDQUJRZ2lJUW9DQWdQZ1BneUFCUWhpSVFvQ0EvQWVEaENBQlFpaUlRb0QrQTRNZ0FVSTRpSVNFaENJRlFpMkpJQVZDQTRtRklBVkNCb2lGZkNJR1FqK0pJQVpDT0ltRklBWkNCNGlGSUFBcEEzZ2lBVUk0aGlBQlFvRCtBNE5DS0lhRUlBRkNnSUQ4QjROQ0dJWWdBVUtBZ0lENEQ0TkNDSWFFaENBQlFnaUlRb0NBZ1BnUGd5QUJRaGlJUW9DQS9BZURoQ0FCUWlpSVFvRCtBNE1nQVVJNGlJU0VoQ0lIZkNBRVFqK0pJQVJDT0ltRklBUkNCNGlGSUFBcEEwQWlBVUk0aGlBQlFvRCtBNE5DS0lhRUlBRkNnSUQ4QjROQ0dJWWdBVUtBZ0lENEQ0TkNDSWFFaENBQlFnaUlRb0NBZ1BnUGd5QUJRaGlJUW9DQS9BZURoQ0FCUWlpSVFvRCtBNE1nQVVJNGlJU0VoQ0lJZkNBQUtRTVFJZ0ZDT0lZZ0FVS0EvZ09EUWlpR2hDQUJRb0NBL0FlRFFoaUdJQUZDZ0lDQStBK0RRZ2lHaElRZ0FVSUlpRUtBZ0lENEQ0TWdBVUlZaUVLQWdQd0hnNFFnQVVJb2lFS0EvZ09ESUFGQ09JaUVoSVFpQ1VJL2lTQUpRamlKaFNBSlFnZUloU0FDZkNBQUtRTlFJZ0ZDT0lZZ0FVS0EvZ09EUWlpR2hDQUJRb0NBL0FlRFFoaUdJQUZDZ0lDQStBK0RRZ2lHaElRZ0FVSUlpRUtBZ0lENEQ0TWdBVUlZaUVLQWdQd0hnNFFnQVVJb2lFS0EvZ09ESUFGQ09JaUVoSVFpQ253Z0IwSXRpU0FIUWdPSmhTQUhRZ2FJaFh3aUMzd2dBQ2tET0NJQlFqaUdJQUZDZ1A0RGcwSW9ob1FnQVVLQWdQd0hnMElZaGlBQlFvQ0FnUGdQZzBJSWhvU0VJQUZDQ0loQ2dJQ0ErQStESUFGQ0dJaENnSUQ4QjRPRUlBRkNLSWhDZ1A0RGd5QUJRamlJaElTRUlneENQNGtnREVJNGlZVWdERUlIaUlVZ0FDa0RNQ0lCUWppR0lBRkNnUDREZzBJb2hvUWdBVUtBZ1B3SGcwSVloaUFCUW9DQWdQZ1BnMElJaG9TRUlBRkNDSWhDZ0lDQStBK0RJQUZDR0loQ2dJRDhCNE9FSUFGQ0tJaENnUDREZ3lBQlFqaUloSVNFSWcxOElBZDhJQUFwQXlnaUFVSTRoaUFCUW9EK0E0TkNLSWFFSUFGQ2dJRDhCNE5DR0lZZ0FVS0FnSUQ0RDROQ0NJYUVoQ0FCUWdpSVFvQ0FnUGdQZ3lBQlFoaUlRb0NBL0FlRGhDQUJRaWlJUW9EK0E0TWdBVUk0aUlTRWhDSU9RaitKSUE1Q09JbUZJQTVDQjRpRklBQXBBeUFpQVVJNGhpQUJRb0QrQTROQ0tJYUVJQUZDZ0lEOEI0TkNHSVlnQVVLQWdJRDRENE5DQ0lhRWhDQUJRZ2lJUW9DQWdQZ1BneUFCUWhpSVFvQ0EvQWVEaENBQlFpaUlRb0QrQTRNZ0FVSTRpSVNFaENJUGZDQUFLUU5vSWdGQ09JWWdBVUtBL2dPRFFpaUdoQ0FCUW9DQS9BZURRaGlHSUFGQ2dJQ0ErQStEUWdpR2hJUWdBVUlJaUVLQWdJRDRENE1nQVVJWWlFS0FnUHdIZzRRZ0FVSW9pRUtBL2dPRElBRkNPSWlFaElRaUVId2dBQ2tER0NJQlFqaUdJQUZDZ1A0RGcwSW9ob1FnQVVLQWdQd0hnMElZaGlBQlFvQ0FnUGdQZzBJSWhvU0VJQUZDQ0loQ2dJQ0ErQStESUFGQ0dJaENnSUQ4QjRPRUlBRkNLSWhDZ1A0RGd5QUJRamlJaElTRUloRkNQNGtnRVVJNGlZVWdFVUlIaUlVZ0NYd2dBQ2tEV0NJQlFqaUdJQUZDZ1A0RGcwSW9ob1FnQVVLQWdQd0hnMElZaGlBQlFvQ0FnUGdQZzBJSWhvU0VJQUZDQ0loQ2dJQ0ErQStESUFGQ0dJaENnSUQ4QjRPRUlBRkNLSWhDZ1A0RGd5QUJRamlJaElTRUloSjhJQVpDTFlrZ0JrSURpWVVnQmtJR2lJVjhJaE5DTFlrZ0UwSURpWVVnRTBJR2lJVjhJaFJDTFlrZ0ZFSURpWVVnRkVJR2lJVjhJaFZDTFlrZ0ZVSURpWVVnRlVJR2lJVjhJaFo4SUFWQ1A0a2dCVUk0aVlVZ0JVSUhpSVVnRUh3Z0ZYd2dBQ2tEWUNJQlFqaUdJQUZDZ1A0RGcwSW9ob1FnQVVLQWdQd0hnMElZaGlBQlFvQ0FnUGdQZzBJSWhvU0VJQUZDQ0loQ2dJQ0ErQStESUFGQ0dJaENnSUQ4QjRPRUlBRkNLSWhDZ1A0RGd5QUJRamlJaElTRUloZENQNGtnRjBJNGlZVWdGMElIaUlVZ0Vud2dGSHdnQ2tJL2lTQUtRamlKaFNBS1FnZUloU0FFZkNBVGZDQUlRaitKSUFoQ09JbUZJQWhDQjRpRklBeDhJQVo4SUExQ1A0a2dEVUk0aVlVZ0RVSUhpSVVnRG53Z0JYd2dEMEkvaVNBUFFqaUpoU0FQUWdlSWhTQVJmQ0FYZkNBTFFpMkpJQXRDQTRtRklBdENCb2lGZkNJWVFpMkpJQmhDQTRtRklCaENCb2lGZkNJWlFpMkpJQmxDQTRtRklCbENCb2lGZkNJYVFpMkpJQnBDQTRtRklCcENCb2lGZkNJYlFpMkpJQnRDQTRtRklCdENCb2lGZkNJY1FpMkpJQnhDQTRtRklCeENCb2lGZkNJZFFpMkpJQjFDQTRtRklCMUNCb2lGZkNJZVFqK0pJQjVDT0ltRklCNUNCNGlGSUFkQ1A0a2dCMEk0aVlVZ0IwSUhpSVVnQlh3Z0dud2dFRUkvaVNBUVFqaUpoU0FRUWdlSWhTQVhmQ0FaZkNBU1FqK0pJQkpDT0ltRklCSkNCNGlGSUFwOElCaDhJQlpDTFlrZ0ZrSURpWVVnRmtJR2lJVjhJaDlDTFlrZ0gwSURpWVVnSDBJR2lJVjhJaUJDTFlrZ0lFSURpWVVnSUVJR2lJVjhJaUY4SUJaQ1A0a2dGa0k0aVlVZ0ZrSUhpSVVnR253Z0MwSS9pU0FMUWppSmhTQUxRZ2VJaFNBR2ZDQWJmQ0FoUWkySklDRkNBNG1GSUNGQ0JvaUZmQ0lpZkNBVlFqK0pJQlZDT0ltRklCVkNCNGlGSUJsOElDRjhJQlJDUDRrZ0ZFSTRpWVVnRkVJSGlJVWdHSHdnSUh3Z0UwSS9pU0FUUWppSmhTQVRRZ2VJaFNBTGZDQWZmQ0FlUWkySklCNUNBNG1GSUI1Q0JvaUZmQ0lqUWkySklDTkNBNG1GSUNOQ0JvaUZmQ0lrUWkySklDUkNBNG1GSUNSQ0JvaUZmQ0lsUWkySklDVkNBNG1GSUNWQ0JvaUZmQ0ltZkNBZFFqK0pJQjFDT0ltRklCMUNCNGlGSUNCOElDVjhJQnhDUDRrZ0hFSTRpWVVnSEVJSGlJVWdIM3dnSkh3Z0cwSS9pU0FiUWppSmhTQWJRZ2VJaFNBV2ZDQWpmQ0FhUWorSklCcENPSW1GSUJwQ0I0aUZJQlY4SUI1OElCbENQNGtnR1VJNGlZVWdHVUlIaUlVZ0ZId2dIWHdnR0VJL2lTQVlRamlKaFNBWVFnZUloU0FUZkNBY2ZDQWlRaTJKSUNKQ0E0bUZJQ0pDQm9pRmZDSW5RaTJKSUNkQ0E0bUZJQ2RDQm9pRmZDSW9RaTJKSUNoQ0E0bUZJQ2hDQm9pRmZDSXBRaTJKSUNsQ0E0bUZJQ2xDQm9pRmZDSXFRaTJKSUNwQ0E0bUZJQ3BDQm9pRmZDSXJRaTJKSUN0Q0E0bUZJQ3RDQm9pRmZDSXNRaTJKSUN4Q0E0bUZJQ3hDQm9pRmZDSXRRaitKSUMxQ09JbUZJQzFDQjRpRklDRkNQNGtnSVVJNGlZVWdJVUlIaUlVZ0hYd2dLWHdnSUVJL2lTQWdRamlKaFNBZ1FnZUloU0FjZkNBb2ZDQWZRaitKSUI5Q09JbUZJQjlDQjRpRklCdDhJQ2Q4SUNaQ0xZa2dKa0lEaVlVZ0prSUdpSVY4SWk1Q0xZa2dMa0lEaVlVZ0xrSUdpSVY4SWk5Q0xZa2dMMElEaVlVZ0wwSUdpSVY4SWpCOElDWkNQNGtnSmtJNGlZVWdKa0lIaUlVZ0tYd2dJa0kvaVNBaVFqaUpoU0FpUWdlSWhTQWVmQ0FxZkNBd1FpMkpJREJDQTRtRklEQkNCb2lGZkNJeGZDQWxRaitKSUNWQ09JbUZJQ1ZDQjRpRklDaDhJREI4SUNSQ1A0a2dKRUk0aVlVZ0pFSUhpSVVnSjN3Z0wzd2dJMEkvaVNBalFqaUpoU0FqUWdlSWhTQWlmQ0F1ZkNBdFFpMkpJQzFDQTRtRklDMUNCb2lGZkNJeVFpMkpJREpDQTRtRklESkNCb2lGZkNJelFpMkpJRE5DQTRtRklETkNCb2lGZkNJMFFpMkpJRFJDQTRtRklEUkNCb2lGZkNJMWZDQXNRaitKSUN4Q09JbUZJQ3hDQjRpRklDOThJRFI4SUN0Q1A0a2dLMEk0aVlVZ0swSUhpSVVnTG53Z00zd2dLa0kvaVNBcVFqaUpoU0FxUWdlSWhTQW1mQ0F5ZkNBcFFqK0pJQ2xDT0ltRklDbENCNGlGSUNWOElDMThJQ2hDUDRrZ0tFSTRpWVVnS0VJSGlJVWdKSHdnTEh3Z0owSS9pU0FuUWppSmhTQW5RZ2VJaFNBamZDQXJmQ0F4UWkySklERkNBNG1GSURGQ0JvaUZmQ0kyUWkySklEWkNBNG1GSURaQ0JvaUZmQ0kzUWkySklEZENBNG1GSURkQ0JvaUZmQ0k0UWkySklEaENBNG1GSURoQ0JvaUZmQ0k1UWkySklEbENBNG1GSURsQ0JvaUZmQ0k2UWkySklEcENBNG1GSURwQ0JvaUZmQ0k3UWkySklEdENBNG1GSUR0Q0JvaUZmQ0k4UWorSklEeENPSW1GSUR4Q0I0aUZJREJDUDRrZ01FSTRpWVVnTUVJSGlJVWdMSHdnT0h3Z0wwSS9pU0F2UWppSmhTQXZRZ2VJaFNBcmZDQTNmQ0F1UWorSklDNUNPSW1GSUM1Q0I0aUZJQ3A4SURaOElEVkNMWWtnTlVJRGlZVWdOVUlHaUlWOElqMUNMWWtnUFVJRGlZVWdQVUlHaUlWOElqNUNMWWtnUGtJRGlZVWdQa0lHaUlWOElqOThJRFZDUDRrZ05VSTRpWVVnTlVJSGlJVWdPSHdnTVVJL2lTQXhRamlKaFNBeFFnZUloU0F0ZkNBNWZDQS9RaTJKSUQ5Q0E0bUZJRDlDQm9pRmZDSkFmQ0EwUWorSklEUkNPSW1GSURSQ0I0aUZJRGQ4SUQ5OElETkNQNGtnTTBJNGlZVWdNMElIaUlVZ05ud2dQbndnTWtJL2lTQXlRamlKaFNBeVFnZUloU0F4ZkNBOWZDQThRaTJKSUR4Q0E0bUZJRHhDQm9pRmZDSkJRaTJKSUVGQ0E0bUZJRUZDQm9pRmZDSkNRaTJKSUVKQ0E0bUZJRUpDQm9pRmZDSkRRaTJKSUVOQ0E0bUZJRU5DQm9pRmZDSkVmQ0E3UWorSklEdENPSW1GSUR0Q0I0aUZJRDU4SUVOOElEcENQNGtnT2tJNGlZVWdPa0lIaUlVZ1BYd2dRbndnT1VJL2lTQTVRamlKaFNBNVFnZUloU0ExZkNCQmZDQTRRaitKSURoQ09JbUZJRGhDQjRpRklEUjhJRHg4SURkQ1A0a2dOMEk0aVlVZ04wSUhpSVVnTTN3Z08zd2dOa0kvaVNBMlFqaUpoU0EyUWdlSWhTQXlmQ0E2ZkNCQVFpMkpJRUJDQTRtRklFQkNCb2lGZkNKRlFpMkpJRVZDQTRtRklFVkNCb2lGZkNKR1FpMkpJRVpDQTRtRklFWkNCb2lGZkNKSFFpMkpJRWRDQTRtRklFZENCb2lGZkNKSVFpMkpJRWhDQTRtRklFaENCb2lGZkNKSlFpMkpJRWxDQTRtRklFbENCb2lGZkNKS1FpMkpJRXBDQTRtRklFcENCb2lGZkNKTElFa2dSU0EvSUQwZ01pQXNJQ29nSWlBZ0lCWWdCaUFYSUFoQkFDa0RxSW9CSWt4Q01va2dURUl1aVlVZ1RFSVhpWVZCQUNrRHdJb0JJazE4UVFBcEE3aUtBU0pPUVFBcEE3Q0tBU0pQaFNCTWd5Qk9oWHdnQTN4Q290eWl1WTN6aThYQ0FId2lBMEVBS1FPZ2lnRWlVSHdpQVNBUGZDQk1JQkY4SUU4Z0NYd2dUaUFDZkNBQklFOGdUSVdESUUrRmZDQUJRaktKSUFGQ0xvbUZJQUZDRjRtRmZFTE55NzJma3BMUm0vRUFmQ0pSUVFBcEE1aUtBU0pTZkNJSklBRWdUSVdESUV5RmZDQUpRaktKSUFsQ0xvbUZJQWxDRjRtRmZFS3Y5clRpL3ZtKzRMVi9mQ0pUUVFBcEE1Q0tBU0pVZkNJUElBa2dBWVdESUFHRmZDQVBRaktKSUE5Q0xvbUZJQTlDRjRtRmZFSzh0NmVNMlBUMjJtbDhJbFZCQUNrRGlJb0JJZ0Y4SWhFZ0R5QUpoWU1nQ1lWOElCRkNNb2tnRVVJdWlZVWdFVUlYaVlWOFFyanFvcHEveTdDck9Yd2lWaUJTSUZRZ0FZV0RJRlFnQVlPRklBRkNKSWtnQVVJZWlZVWdBVUlaaVlWOElBTjhJZ0o4SWdOOElBd2dFWHdnRFNBUGZDQU9JQWw4SUFNZ0VTQVBoWU1nRDRWOElBTkNNb2tnQTBJdWlZVWdBMElYaVlWOFFwbWdsN0NidnNUNDJRQjhJZzBnQWlBQmhTQlVneUFDSUFHRGhTQUNRaVNKSUFKQ0hvbUZJQUpDR1ltRmZDQlJmQ0lKZkNJSUlBTWdFWVdESUJHRmZDQUlRaktKSUFoQ0xvbUZJQWhDRjRtRmZFS2JuK1g0eXRUZ241Si9mQ0lPSUFrZ0FvVWdBWU1nQ1NBQ2c0VWdDVUlraVNBSlFoNkpoU0FKUWhtSmhYd2dVM3dpRDN3aUVTQUlJQU9GZ3lBRGhYd2dFVUl5aVNBUlFpNkpoU0FSUWhlSmhYeENtSUsyMDkzYWw0NnJmM3dpVVNBUElBbUZJQUtESUE4Z0NZT0ZJQTlDSklrZ0QwSWVpWVVnRDBJWmlZVjhJRlY4SWdKOElnTWdFU0FJaFlNZ0NJVjhJQU5DTW9rZ0EwSXVpWVVnQTBJWGlZVjhRc0tFakppSzArcURXSHdpVXlBQ0lBK0ZJQW1ESUFJZ0Q0T0ZJQUpDSklrZ0FrSWVpWVVnQWtJWmlZVjhJRlo4SWdsOElneDhJQklnQTN3Z0NpQVJmQ0FFSUFoOElBd2dBeUFSaFlNZ0VZVjhJQXhDTW9rZ0RFSXVpWVVnREVJWGlZVjhRcjdmd2F1VTROYkJFbndpQkNBSklBS0ZJQStESUFrZ0FvT0ZJQWxDSklrZ0NVSWVpWVVnQ1VJWmlZVjhJQTE4SWc5OEloRWdEQ0FEaFlNZ0E0VjhJQkZDTW9rZ0VVSXVpWVVnRVVJWGlZVjhRb3psa3Zma3QrR1lKSHdpQ2lBUElBbUZJQUtESUE4Z0NZT0ZJQTlDSklrZ0QwSWVpWVVnRDBJWmlZVjhJQTU4SWdKOElnTWdFU0FNaFlNZ0RJVjhJQU5DTW9rZ0EwSXVpWVVnQTBJWGlZVjhRdUxwL3ErOXVKK0cxUUI4SWhJZ0FpQVBoU0FKZ3lBQ0lBK0RoU0FDUWlTSklBSkNIb21GSUFKQ0dZbUZmQ0JSZkNJSmZDSUlJQU1nRVlXRElCR0ZmQ0FJUWpLSklBaENMb21GSUFoQ0Y0bUZmRUx2a3U2VHo2NlgzL0lBZkNJWElBa2dBb1VnRDRNZ0NTQUNnNFVnQ1VJa2lTQUpRaDZKaFNBSlFobUpoWHdnVTN3aUQzd2lESHdnQnlBSWZDQUZJQU44SUJBZ0VYd2dEQ0FJSUFPRmd5QURoWHdnREVJeWlTQU1RaTZKaFNBTVFoZUpoWHhDc2EzYTJPTy9yTytBZjN3aUF5QVBJQW1GSUFLRElBOGdDWU9GSUE5Q0pJa2dEMEllaVlVZ0QwSVppWVY4SUFSOElnVjhJZ0lnRENBSWhZTWdDSVY4SUFKQ01va2dBa0l1aVlVZ0FrSVhpWVY4UXJXa25LN3kxSUh1bTM5OElnZ2dCU0FQaFNBSmd5QUZJQStEaFNBRlFpU0pJQVZDSG9tRklBVkNHWW1GZkNBS2ZDSUdmQ0lKSUFJZ0RJV0RJQXlGZkNBSlFqS0pJQWxDTG9tRklBbENGNG1GZkVLVXphVDd6Szc4elVGOElnd2dCaUFGaFNBUGd5QUdJQVdEaFNBR1FpU0pJQVpDSG9tRklBWkNHWW1GZkNBU2ZDSUhmQ0lQSUFrZ0FvV0RJQUtGZkNBUFFqS0pJQTlDTG9tRklBOUNGNG1GZkVMU2xjWDNtYmpheldSOElnUWdCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBWGZDSUZmQ0lSSUJSOElCZ2dEM3dnRXlBSmZDQUxJQUo4SUJFZ0R5QUpoWU1nQ1lWOElCRkNNb2tnRVVJdWlZVWdFVUlYaVlWOFF1UEx2TUxqOEpIZmIzd2lBaUFGSUFlRklBYURJQVVnQjRPRklBVkNKSWtnQlVJZWlZVWdCVUlaaVlWOElBTjhJZ1o4SWdzZ0VTQVBoWU1nRDRWOElBdENNb2tnQzBJdWlZVWdDMElYaVlWOFFyV3JzOXpvdU9mZ0Qzd2lDU0FHSUFXRklBZURJQVlnQllPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElBaDhJZ2Q4SWhNZ0N5QVJoWU1nRVlWOElCTkNNb2tnRTBJdWlZVWdFMElYaVlWOFF1VzRzcjNIdWFpR0pId2lEeUFISUFhRklBV0RJQWNnQm9PRklBZENKSWtnQjBJZWlZVWdCMElaaVlWOElBeDhJZ1Y4SWhRZ0V5QUxoWU1nQzRWOElCUkNNb2tnRkVJdWlZVWdGRUlYaVlWOFF2V0VyTW4xamN2MExYd2lFU0FGSUFlRklBYURJQVVnQjRPRklBVkNKSWtnQlVJZWlZVWdCVUlaaVlWOElBUjhJZ1o4SWhoOElCb2dGSHdnRlNBVGZDQVpJQXQ4SUJnZ0ZDQVRoWU1nRTRWOElCaENNb2tnR0VJdWlZVWdHRUlYaVlWOFFvUEptL1dtbGFHNnlnQjhJaFlnQmlBRmhTQUhneUFHSUFXRGhTQUdRaVNKSUFaQ0hvbUZJQVpDR1ltRmZDQUNmQ0lIZkNJTElCZ2dGSVdESUJTRmZDQUxRaktKSUF0Q0xvbUZJQXRDRjRtRmZFTFU5NGZxeTd1cTJOd0FmQ0laSUFjZ0JvVWdCWU1nQnlBR2c0VWdCMElraVNBSFFoNkpoU0FIUWhtSmhYd2dDWHdpQlh3aUV5QUxJQmlGZ3lBWWhYd2dFMEl5aVNBVFFpNkpoU0FUUWhlSmhYeEN0YWZGbUtpYjR2ejJBSHdpR0NBRklBZUZJQWFESUFVZ0I0T0ZJQVZDSklrZ0JVSWVpWVVnQlVJWmlZVjhJQTk4SWdaOEloUWdFeUFMaFlNZ0M0VjhJQlJDTW9rZ0ZFSXVpWVVnRkVJWGlZVjhRcXUvbS9PdXFwU2ZtSDk4SWhvZ0JpQUZoU0FIZ3lBR0lBV0RoU0FHUWlTSklBWkNIb21GSUFaQ0dZbUZmQ0FSZkNJSGZDSVZmQ0FjSUJSOElCOGdFM3dnR3lBTGZDQVZJQlFnRTRXRElCT0ZmQ0FWUWpLSklCVkNMb21GSUJWQ0Y0bUZmRUtRNU5EdDBzM3htS2gvZkNJYklBY2dCb1VnQllNZ0J5QUdnNFVnQjBJa2lTQUhRaDZKaFNBSFFobUpoWHdnRm53aUJYd2lDeUFWSUJTRmd5QVVoWHdnQzBJeWlTQUxRaTZKaFNBTFFoZUpoWHhDdjhMc3g0bjV5WUd3ZjN3aUZpQUZJQWVGSUFhRElBVWdCNE9GSUFWQ0pJa2dCVUllaVlVZ0JVSVppWVY4SUJsOElnWjhJaE1nQ3lBVmhZTWdGWVY4SUJOQ01va2dFMEl1aVlVZ0UwSVhpWVY4UXVTZHZQZjcrTitzdjM5OEloa2dCaUFGaFNBSGd5QUdJQVdEaFNBR1FpU0pJQVpDSG9tRklBWkNHWW1GZkNBWWZDSUhmQ0lVSUJNZ0M0V0RJQXVGZkNBVVFqS0pJQlJDTG9tRklCUkNGNG1GZkVMQ242THRzLzZDOEVaOEloZ2dCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBYWZDSUZmQ0lWZkNBZUlCUjhJQ0VnRTN3Z0hTQUxmQ0FWSUJRZ0U0V0RJQk9GZkNBVlFqS0pJQlZDTG9tRklCVkNGNG1GZkVLbHpxcVkrYWprMDFWOElob2dCU0FIaFNBR2d5QUZJQWVEaFNBRlFpU0pJQVZDSG9tRklBVkNHWW1GZkNBYmZDSUdmQ0lMSUJVZ0ZJV0RJQlNGZkNBTFFqS0pJQXRDTG9tRklBdENGNG1GZkVMdmhJNkFudXFZNVFaOEloc2dCaUFGaFNBSGd5QUdJQVdEaFNBR1FpU0pJQVpDSG9tRklBWkNHWW1GZkNBV2ZDSUhmQ0lUSUFzZ0ZZV0RJQldGZkNBVFFqS0pJQk5DTG9tRklCTkNGNG1GZkVMdzNMblE4S3pLbEJSOEloWWdCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBWmZDSUZmQ0lVSUJNZ0M0V0RJQXVGZkNBVVFqS0pJQlJDTG9tRklCUkNGNG1GZkVMODM4aTIxTkRDMnlkOEloa2dCU0FIaFNBR2d5QUZJQWVEaFNBRlFpU0pJQVZDSG9tRklBVkNHWW1GZkNBWWZDSUdmQ0lWSUNoOElDUWdGSHdnSnlBVGZDQWpJQXQ4SUJVZ0ZDQVRoWU1nRTRWOElCVkNNb2tnRlVJdWlZVWdGVUlYaVlWOFFxYVNtK0dGcDhpTkxud2lHQ0FHSUFXRklBZURJQVlnQllPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElCcDhJZ2Q4SWdzZ0ZTQVVoWU1nRklWOElBdENNb2tnQzBJdWlZVWdDMElYaVlWOFF1M1ZrTmJGdjV1V3pRQjhJaG9nQnlBR2hTQUZneUFISUFhRGhTQUhRaVNKSUFkQ0hvbUZJQWRDR1ltRmZDQWJmQ0lGZkNJVElBc2dGWVdESUJXRmZDQVRRaktKSUJOQ0xvbUZJQk5DRjRtRmZFTGY1OWJzdWFLRG5OTUFmQ0liSUFVZ0I0VWdCb01nQlNBSGc0VWdCVUlraVNBRlFoNkpoU0FGUWhtSmhYd2dGbndpQm53aUZDQVRJQXVGZ3lBTGhYd2dGRUl5aVNBVVFpNkpoU0FVUWhlSmhYeEMzc2U5M2NqcW5JWGxBSHdpRmlBR0lBV0ZJQWVESUFZZ0JZT0ZJQVpDSklrZ0JrSWVpWVVnQmtJWmlZVjhJQmw4SWdkOEloVjhJQ1lnRkh3Z0tTQVRmQ0FsSUF0OElCVWdGQ0FUaFlNZ0U0VjhJQlZDTW9rZ0ZVSXVpWVVnRlVJWGlZVjhRcWpsM3VPejE0SzE5Z0I4SWhrZ0J5QUdoU0FGZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FZZkNJRmZDSUxJQlVnRklXRElCU0ZmQ0FMUWpLSklBdENMb21GSUF0Q0Y0bUZmRUxtM2JhLzVLV3k0WUYvZkNJWUlBVWdCNFVnQm9NZ0JTQUhnNFVnQlVJa2lTQUZRaDZKaFNBRlFobUpoWHdnR253aUJud2lFeUFMSUJXRmd5QVZoWHdnRTBJeWlTQVRRaTZKaFNBVFFoZUpoWHhDdStxSXBOR1FpN21TZjN3aUdpQUdJQVdGSUFlRElBWWdCWU9GSUFaQ0pJa2dCa0llaVlVZ0JrSVppWVY4SUJ0OElnZDhJaFFnRXlBTGhZTWdDNFY4SUJSQ01va2dGRUl1aVlVZ0ZFSVhpWVY4UXVTR3hPZVVsUHJmb245OEloc2dCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBV2ZDSUZmQ0lWZkNBdklCUjhJQ3NnRTN3Z0xpQUxmQ0FWSUJRZ0U0V0RJQk9GZkNBVlFqS0pJQlZDTG9tRklCVkNGNG1GZkVLQjRJaml1OG1aamFoL2ZDSVdJQVVnQjRVZ0JvTWdCU0FIZzRVZ0JVSWtpU0FGUWg2SmhTQUZRaG1KaFh3Z0dYd2lCbndpQ3lBVklCU0ZneUFVaFh3Z0MwSXlpU0FMUWk2SmhTQUxRaGVKaFh4Q2thL2loNDN1NHFWQ2ZDSVpJQVlnQllVZ0I0TWdCaUFGZzRVZ0JrSWtpU0FHUWg2SmhTQUdRaG1KaFh3Z0dId2lCM3dpRXlBTElCV0ZneUFWaFh3Z0UwSXlpU0FUUWk2SmhTQVRRaGVKaFh4Q3NQelNzckMwbExaSGZDSVlJQWNnQm9VZ0JZTWdCeUFHZzRVZ0IwSWtpU0FIUWg2SmhTQUhRaG1KaFh3Z0dud2lCWHdpRkNBVElBdUZneUFMaFh3Z0ZFSXlpU0FVUWk2SmhTQVVRaGVKaFh4Q21LUzl0NTJEdXNsUmZDSWFJQVVnQjRVZ0JvTWdCU0FIZzRVZ0JVSWtpU0FGUWg2SmhTQUZRaG1KaFh3Z0czd2lCbndpRlh3Z01TQVVmQ0F0SUJOOElEQWdDM3dnRlNBVUlCT0ZneUFUaFh3Z0ZVSXlpU0FWUWk2SmhTQVZRaGVKaFh4Q2tOS1dxOFhFd2N4V2ZDSWJJQVlnQllVZ0I0TWdCaUFGZzRVZ0JrSWtpU0FHUWg2SmhTQUdRaG1KaFh3Z0Zud2lCM3dpQ3lBVklCU0ZneUFVaFh3Z0MwSXlpU0FMUWk2SmhTQUxRaGVKaFh4Q3FzREV1OVd3allkMGZDSVdJQWNnQm9VZ0JZTWdCeUFHZzRVZ0IwSWtpU0FIUWg2SmhTQUhRaG1KaFh3Z0dYd2lCWHdpRXlBTElCV0ZneUFWaFh3Z0UwSXlpU0FUUWk2SmhTQVRRaGVKaFh4Q3VLUHZsWU9PcUxVUWZDSVpJQVVnQjRVZ0JvTWdCU0FIZzRVZ0JVSWtpU0FGUWg2SmhTQUZRaG1KaFh3Z0dId2lCbndpRkNBVElBdUZneUFMaFh3Z0ZFSXlpU0FVUWk2SmhTQVVRaGVKaFh4Q3lLSEx4dXVpc05JWmZDSVlJQVlnQllVZ0I0TWdCaUFGZzRVZ0JrSWtpU0FHUWg2SmhTQUdRaG1KaFh3Z0dud2lCM3dpRlNBMGZDQTNJQlI4SURNZ0Uzd2dOaUFMZkNBVklCUWdFNFdESUJPRmZDQVZRaktKSUJWQ0xvbUZJQlZDRjRtRmZFTFQxb2FLaFlIYm14NThJaG9nQnlBR2hTQUZneUFISUFhRGhTQUhRaVNKSUFkQ0hvbUZJQWRDR1ltRmZDQWJmQ0lGZkNJTElCVWdGSVdESUJTRmZDQUxRaktKSUF0Q0xvbUZJQXRDRjRtRmZFS1oxN3Y4emVtZHBDZDhJaHNnQlNBSGhTQUdneUFGSUFlRGhTQUZRaVNKSUFWQ0hvbUZJQVZDR1ltRmZDQVdmQ0lHZkNJVElBc2dGWVdESUJXRmZDQVRRaktKSUJOQ0xvbUZJQk5DRjRtRmZFS29rZTJNM3BhdjJEUjhJaFlnQmlBRmhTQUhneUFHSUFXRGhTQUdRaVNKSUFaQ0hvbUZJQVpDR1ltRmZDQVpmQ0lIZkNJVUlCTWdDNFdESUF1RmZDQVVRaktKSUJSQ0xvbUZJQlJDRjRtRmZFTGp0S1d1dkphRGpqbDhJaGtnQnlBR2hTQUZneUFISUFhRGhTQUhRaVNKSUFkQ0hvbUZJQWRDR1ltRmZDQVlmQ0lGZkNJVmZDQTVJQlI4SURVZ0Uzd2dPQ0FMZkNBVklCUWdFNFdESUJPRmZDQVZRaktKSUJWQ0xvbUZJQlZDRjRtRmZFTExsWWFhcnNtcTdNNEFmQ0lZSUFVZ0I0VWdCb01nQlNBSGc0VWdCVUlraVNBRlFoNkpoU0FGUWhtSmhYd2dHbndpQm53aUN5QVZJQlNGZ3lBVWhYd2dDMEl5aVNBTFFpNkpoU0FMUWhlSmhYeEM4OGFQdS9mSnNzN2JBSHdpR2lBR0lBV0ZJQWVESUFZZ0JZT0ZJQVpDSklrZ0JrSWVpWVVnQmtJWmlZVjhJQnQ4SWdkOEloTWdDeUFWaFlNZ0ZZVjhJQk5DTW9rZ0UwSXVpWVVnRTBJWGlZVjhRcVB4eXJXOS9wdVg2QUI4SWhzZ0J5QUdoU0FGZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FXZkNJRmZDSVVJQk1nQzRXRElBdUZmQ0FVUWpLSklCUkNMb21GSUJSQ0Y0bUZmRUw4NWI3djVkM2d4L1FBZkNJV0lBVWdCNFVnQm9NZ0JTQUhnNFVnQlVJa2lTQUZRaDZKaFNBRlFobUpoWHdnR1h3aUJud2lGWHdnT3lBVWZDQStJQk44SURvZ0Mzd2dGU0FVSUJPRmd5QVRoWHdnRlVJeWlTQVZRaTZKaFNBVlFoZUpoWHhDNE43Y21QVHQyTkw0QUh3aUdTQUdJQVdGSUFlRElBWWdCWU9GSUFaQ0pJa2dCa0llaVlVZ0JrSVppWVY4SUJoOElnZDhJZ3NnRlNBVWhZTWdGSVY4SUF0Q01va2dDMEl1aVlVZ0MwSVhpWVY4UXZMV3dvL0tncDdraEg5OEloZ2dCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBYWZDSUZmQ0lUSUFzZ0ZZV0RJQldGZkNBVFFqS0pJQk5DTG9tRklCTkNGNG1GZkVMczg1RFRnY0hBNDR4L2ZDSWFJQVVnQjRVZ0JvTWdCU0FIZzRVZ0JVSWtpU0FGUWg2SmhTQUZRaG1KaFh3Z0czd2lCbndpRkNBVElBdUZneUFMaFh3Z0ZFSXlpU0FVUWk2SmhTQVVRaGVKaFh4Q3FMeU1tNkwvdjkrUWYzd2lHeUFHSUFXRklBZURJQVlnQllPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElCWjhJZ2Q4SWhWOElFRWdGSHdnUUNBVGZDQThJQXQ4SUJVZ0ZDQVRoWU1nRTRWOElCVkNNb2tnRlVJdWlZVWdGVUlYaVlWOFF1bjdpdlM5blp1b3BIOThJaFlnQnlBR2hTQUZneUFISUFhRGhTQUhRaVNKSUFkQ0hvbUZJQWRDR1ltRmZDQVpmQ0lGZkNJTElCVWdGSVdESUJTRmZDQUxRaktKSUF0Q0xvbUZJQXRDRjRtRmZFS1Y4cG1XKy83by9MNS9mQ0laSUFVZ0I0VWdCb01nQlNBSGc0VWdCVUlraVNBRlFoNkpoU0FGUWhtSmhYd2dHSHdpQm53aUV5QUxJQldGZ3lBVmhYd2dFMEl5aVNBVFFpNkpoU0FUUWhlSmhYeENxNmJKbTY2ZTNyaEdmQ0lZSUFZZ0JZVWdCNE1nQmlBRmc0VWdCa0lraVNBR1FoNkpoU0FHUWhtSmhYd2dHbndpQjN3aUZDQVRJQXVGZ3lBTGhYd2dGRUl5aVNBVVFpNkpoU0FVUWhlSmhYeENuTU9aMGU3Wno1TktmQ0lhSUFjZ0JvVWdCWU1nQnlBR2c0VWdCMElraVNBSFFoNkpoU0FIUWhtSmhYd2dHM3dpQlh3aUZTQkhmQ0JESUJSOElFWWdFM3dnUWlBTGZDQVZJQlFnRTRXRElCT0ZmQ0FWUWpLSklCVkNMb21GSUJWQ0Y0bUZmRUtIaElPTzhwaXV3MUY4SWhzZ0JTQUhoU0FHZ3lBRklBZURoU0FGUWlTSklBVkNIb21GSUFWQ0dZbUZmQ0FXZkNJR2ZDSUxJQlVnRklXRElCU0ZmQ0FMUWpLSklBdENMb21GSUF0Q0Y0bUZmRUtlMW9QdjdMcWY3V3A4SWhZZ0JpQUZoU0FIZ3lBR0lBV0RoU0FHUWlTSklBWkNIb21GSUFaQ0dZbUZmQ0FaZkNJSGZDSVRJQXNnRllXRElCV0ZmQ0FUUWpLSklCTkNMb21GSUJOQ0Y0bUZmRUw0b3J2ei91L1R2blY4SWhrZ0J5QUdoU0FGZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FZZkNJRmZDSVVJQk1nQzRXRElBdUZmQ0FVUWpLSklCUkNMb21GSUJSQ0Y0bUZmRUs2MzkyUXAvV1orQVo4SWh3Z0JTQUhoU0FHZ3lBRklBZURoU0FGUWlTSklBVkNIb21GSUFWQ0dZbUZmQ0FhZkNJR2ZDSVZmQ0E5UWorSklEMUNPSW1GSUQxQ0I0aUZJRGw4SUVWOElFUkNMWWtnUkVJRGlZVWdSRUlHaUlWOEloZ2dGSHdnU0NBVGZDQkVJQXQ4SUJVZ0ZDQVRoWU1nRTRWOElCVkNNb2tnRlVJdWlZVWdGVUlYaVlWOFFxYXhvcGJhdU4reENud2lHaUFHSUFXRklBZURJQVlnQllPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElCdDhJZ2Q4SWdzZ0ZTQVVoWU1nRklWOElBdENNb2tnQzBJdWlZVWdDMElYaVlWOFFxNmI1UGZMZ09hZkVYd2lHeUFISUFhRklBV0RJQWNnQm9PRklBZENKSWtnQjBJZWlZVWdCMElaaVlWOElCWjhJZ1Y4SWhNZ0N5QVZoWU1nRllWOElCTkNNb2tnRTBJdWlZVWdFMElYaVlWOFFwdU84WmpSNXNLNEczd2lIU0FGSUFlRklBYURJQVVnQjRPRklBVkNKSWtnQlVJZWlZVWdCVUlaaVlWOElCbDhJZ1o4SWhRZ0V5QUxoWU1nQzRWOElCUkNNb2tnRkVJdWlZVWdGRUlYaVlWOFFvVDdrWmpTL3QzdEtId2lIaUFHSUFXRklBZURJQVlnQllPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElCeDhJZ2Q4SWhWOElEOUNQNGtnUDBJNGlZVWdQMElIaUlVZ08zd2dSM3dnUGtJL2lTQStRamlKaFNBK1FnZUloU0E2ZkNCR2ZDQVlRaTJKSUJoQ0E0bUZJQmhDQm9pRmZDSVdRaTJKSUJaQ0E0bUZJQlpDQm9pRmZDSVpJQlI4SUVvZ0Uzd2dGaUFMZkNBVklCUWdFNFdESUJPRmZDQVZRaktKSUJWQ0xvbUZJQlZDRjRtRmZFS1R5WnlHdE8rcTVUSjhJZ3NnQnlBR2hTQUZneUFISUFhRGhTQUhRaVNKSUFkQ0hvbUZJQWRDR1ltRmZDQWFmQ0lGZkNJVElCVWdGSVdESUJTRmZDQVRRaktKSUJOQ0xvbUZJQk5DRjRtRmZFSzgvYWF1b2NHdnp6eDhJaG9nQlNBSGhTQUdneUFGSUFlRGhTQUZRaVNKSUFWQ0hvbUZJQVZDR1ltRmZDQWJmQ0lHZkNJVUlCTWdGWVdESUJXRmZDQVVRaktKSUJSQ0xvbUZJQlJDRjRtRmZFTE1tc0RneWZqWmpzTUFmQ0liSUFZZ0JZVWdCNE1nQmlBRmc0VWdCa0lraVNBR1FoNkpoU0FHUWhtSmhYd2dIWHdpQjN3aUZTQVVJQk9GZ3lBVGhYd2dGVUl5aVNBVlFpNkpoU0FWUWhlSmhYeEN0b1g1MmV5WDllTE1BSHdpSENBSElBYUZJQVdESUFjZ0JvT0ZJQWRDSklrZ0IwSWVpWVVnQjBJWmlZVjhJQjU4SWdWOEloWWdUWHczQThDS0FVRUFJRkFnQlNBSGhTQUdneUFGSUFlRGhTQUZRaVNKSUFWQ0hvbUZJQVZDR1ltRmZDQUxmQ0lHSUFXRklBZURJQVlnQllPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElCcDhJZ2NnQm9VZ0JZTWdCeUFHZzRVZ0IwSWtpU0FIUWg2SmhTQUhRaG1KaFh3Z0czd2lCU0FIaFNBR2d5QUZJQWVEaFNBRlFpU0pJQVZDSG9tRklBVkNHWW1GZkNBY2ZDSUxmRGNEb0lvQlFRQWdUaUJBUWorSklFQkNPSW1GSUVCQ0I0aUZJRHg4SUVoOElCbENMWWtnR1VJRGlZVWdHVUlHaUlWOEloa2dFM3dnRmlBVklCU0ZneUFVaFh3Z0ZrSXlpU0FXUWk2SmhTQVdRaGVKaFh4Q3F2eVY0OCt6eXIvWkFId2lHaUFHZkNJVGZEY0R1SW9CUVFBZ1VpQUxJQVdGSUFlRElBc2dCWU9GSUF0Q0pJa2dDMEllaVlVZ0MwSVppWVY4SUJwOElnWjhOd09ZaWdGQkFDQlBJRUZDUDRrZ1FVSTRpWVVnUVVJSGlJVWdRSHdnR0h3Z1MwSXRpU0JMUWdPSmhTQkxRZ2FJaFh3Z0ZId2dFeUFXSUJXRmd5QVZoWHdnRTBJeWlTQVRRaTZKaFNBVFFoZUpoWHhDN1BYYjFyUDEyK1hmQUh3aUdDQUhmQ0lVZkRjRHNJb0JRUUFnVkNBR0lBdUZJQVdESUFZZ0M0T0ZJQVpDSklrZ0JrSWVpWVVnQmtJWmlZVjhJQmg4SWdkOE53T1FpZ0ZCQUNCTUlFVkNQNGtnUlVJNGlZVWdSVUlIaUlVZ1FYd2dTWHdnR1VJdGlTQVpRZ09KaFNBWlFnYUloWHdnRlh3Z0ZDQVRJQmFGZ3lBV2hYd2dGRUl5aVNBVVFpNkpoU0FVUWhlSmhYeENsN0NkMHNTeGhxTHNBSHdpRXlBRmZIdzNBNmlLQVVFQUlBRWdCeUFHaFNBTGd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBVGZIdzNBNGlLQVF2M0NRSUJmZ1IvUVFBcEE0Q0tBU0lBcDBFRGRrRVBjU0lCUVFOMFFZQ0pBV29pQWlBQ0tRTUFRbjhnQUVJRGhpSUFoa0ovaFlOQ2dBRWdBSWFGTndNQUlBRkJBV29oQXdKQUlBRkJEa2tOQUFKQUlBTkJEMGNOQUVFQVFnQTNBL2lKQVF0QmdJa0JFQU5CQUNFREN5QURJUUlDUUVFSElBTnJRUWR4SWdSRkRRQWdBMEVEZEVHQWlRRnFJUUVnQXlFQ0EwQWdBVUlBTndNQUlBRkJDR29oQVNBQ1FRRnFJUUlnQkVGL2FpSUVEUUFMQ3dKQUlBTkJlR3BCQjBrTkFDQUNRUU4wSVFFRFFDQUJRYmlKQVdwQ0FEY0RBQ0FCUWJDSkFXcENBRGNEQUNBQlFhaUpBV3BDQURjREFDQUJRYUNKQVdwQ0FEY0RBQ0FCUVppSkFXcENBRGNEQUNBQlFaQ0pBV3BDQURjREFDQUJRWWlKQVdwQ0FEY0RBQ0FCUVlDSkFXcENBRGNEQUNBQlFjQUFhaUlCUWZnQVJ3MEFDd3RCQUNFQlFRQkJBQ2tEZ0lvQklnQkNPNFlnQUVJcmhrS0FnSUNBZ0lEQS93Q0RoQ0FBUWh1R1FvQ0FnSUNBNEQrRElBQkNDNFpDZ0lDQWdQQWZnNFNFSUFCQ0JZaENnSUNBK0ErRElBQkNGWWhDZ0lEOEI0T0VJQUJDSlloQ2dQNERneUFBUWdPR1FqaUloSVNFTndQNGlRRkJnSWtCRUFOQkFFRUFLUVBBaWdFaUFFSTRoaUFBUW9EK0E0TkNLSWFFSUFCQ2dJRDhCNE5DR0lZZ0FFS0FnSUQ0RDROQ0NJYUVoQ0FBUWdpSVFvQ0FnUGdQZ3lBQVFoaUlRb0NBL0FlRGhDQUFRaWlJUW9EK0E0TWdBRUk0aUlTRWhEY0R3SW9CUVFCQkFDa0R1SW9CSWdCQ09JWWdBRUtBL2dPRFFpaUdoQ0FBUW9DQS9BZURRaGlHSUFCQ2dJQ0ErQStEUWdpR2hJUWdBRUlJaUVLQWdJRDRENE1nQUVJWWlFS0FnUHdIZzRRZ0FFSW9pRUtBL2dPRElBQkNPSWlFaElRM0E3aUtBVUVBUVFBcEE3Q0tBU0lBUWppR0lBQkNnUDREZzBJb2hvUWdBRUtBZ1B3SGcwSVloaUFBUW9DQWdQZ1BnMElJaG9TRUlBQkNDSWhDZ0lDQStBK0RJQUJDR0loQ2dJRDhCNE9FSUFCQ0tJaENnUDREZ3lBQVFqaUloSVNFTndPd2lnRkJBRUVBS1FPb2lnRWlBRUk0aGlBQVFvRCtBNE5DS0lhRUlBQkNnSUQ4QjROQ0dJWWdBRUtBZ0lENEQ0TkNDSWFFaENBQVFnaUlRb0NBZ1BnUGd5QUFRaGlJUW9DQS9BZURoQ0FBUWlpSVFvRCtBNE1nQUVJNGlJU0VoRGNEcUlvQlFRQkJBQ2tEb0lvQklnQkNPSVlnQUVLQS9nT0RRaWlHaENBQVFvQ0EvQWVEUWhpR0lBQkNnSUNBK0ErRFFnaUdoSVFnQUVJSWlFS0FnSUQ0RDRNZ0FFSVlpRUtBZ1B3SGc0UWdBRUlvaUVLQS9nT0RJQUJDT0lpRWhJUTNBNkNLQVVFQVFRQXBBNWlLQVNJQVFqaUdJQUJDZ1A0RGcwSW9ob1FnQUVLQWdQd0hnMElZaGlBQVFvQ0FnUGdQZzBJSWhvU0VJQUJDQ0loQ2dJQ0ErQStESUFCQ0dJaENnSUQ4QjRPRUlBQkNLSWhDZ1A0RGd5QUFRamlJaElTRU53T1lpZ0ZCQUVFQUtRT1FpZ0VpQUVJNGhpQUFRb0QrQTROQ0tJYUVJQUJDZ0lEOEI0TkNHSVlnQUVLQWdJRDRENE5DQ0lhRWhDQUFRZ2lJUW9DQWdQZ1BneUFBUWhpSVFvQ0EvQWVEaENBQVFpaUlRb0QrQTRNZ0FFSTRpSVNFaERjRGtJb0JRUUJCQUNrRGlJb0JJZ0JDT0lZZ0FFS0EvZ09EUWlpR2hDQUFRb0NBL0FlRFFoaUdJQUJDZ0lDQStBK0RRZ2lHaElRZ0FFSUlpRUtBZ0lENEQ0TWdBRUlZaUVLQWdQd0hnNFFnQUVJb2lFS0EvZ09ESUFCQ09JaUVoSVEzQTRpS0FRSkFRUUFvQXNpS0FTSUVSUTBBUVFBaEFnTkFJQUZCZ0FscUlBRkJpSW9CYWkwQUFEb0FBQ0FCUVFGcUlRRWdCQ0FDUVFGcUlnSkIvd0Z4U3cwQUN3c0xCZ0JCZ0lrQkM2RUNBRUVBUWdBM0E0Q0tBVUVBUVRCQndBQWdBVUdBQTBZaUFSczJBc2lLQVVFQVFxU2Y2ZmZiZzlMYXh3QkMrY0w0bTVHanMvRGJBQ0FCR3pjRHdJb0JRUUJDcDUvbXA5YkJpNFpiUXV2Nmh0cS90ZmJCSHlBQkd6Y0R1SW9CUVFCQ2thcmd3dmJRa3RxT2YwS2YyUG5ad3BIYWdwdC9JQUViTndPd2lnRkJBRUt4bG9EKy84ekptZWNBUXRHRm11LzZ6NVNIMFFBZ0FSczNBNmlLQVVFQVFybXl1YmlQbS91WEZVTHg3ZlQ0cGFmOXA2Vi9JQUViTndPZ2lnRkJBRUtYdXNPRG82dkFySkYvUXF2dzAvU3Y3cnkzUENBQkd6Y0RtSW9CUVFCQ2g2cnpzNk9saXMzaUFFSzd6cXFtMk5EcnM3dC9JQUViTndPUWlnRkJBRUxZdlphSTNLdm4zVXRDaUpMem5mL00rWVRxQUNBQkd6Y0RpSW9CSUFBUUFoQUVDd3NMQVFCQmdBZ0xCTkFBQUFBPVwiO1xudmFyIGhhc2gkOSA9IFwiY2RkNTdmNmFcIjtcbnZhciB3YXNtSnNvbiQ5ID0ge1xuXHRuYW1lOiBuYW1lJDksXG5cdGRhdGE6IGRhdGEkOSxcblx0aGFzaDogaGFzaCQ5XG59O1xuXG5jb25zdCBtdXRleCQ4ID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJDggPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIFNIQS0yIChTSEEtMzg0KSBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzaGEzODQoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkOCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JDgsIHdhc21Kc29uJDksIDQ4KVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSQ4ID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkOC5jYWxjdWxhdGUoZGF0YSwgMzg0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkOC5jYWxjdWxhdGUoZGF0YSwgMzg0KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU0hBLTIgKFNIQS0zODQpIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU0hBMzg0KCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDksIDQ4KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCgzODQpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgzODQpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDEyOCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDQ4LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG5jb25zdCBtdXRleCQ3ID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJDcgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIFNIQS0yIChTSEEtNTEyKSBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzaGE1MTIoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkNyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JDcsIHdhc21Kc29uJDksIDY0KVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSQ3ID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkNy5jYWxjdWxhdGUoZGF0YSwgNTEyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkNy5jYWxjdWxhdGUoZGF0YSwgNTEyKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU0hBLTIgKFNIQS01MTIpIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU0hBNTEyKCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDksIDY0KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCg1MTIpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCg1MTIpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDEyOCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDY0LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSQ4ID0gXCJ4eGhhc2gzMlwiO1xudmFyIGRhdGEkOCA9IFwiQUdGemJRRUFBQUFCRVFSZ0FBRi9ZQUYvQUdBQUFHQUNmMzhBQXdjR0FBRUJBZ0FEQlFRQkFRSUNCZzRDZndGQnNJa0ZDMzhBUVlBSUN3ZHdDQVp0WlcxdmNua0NBQTVJWVhOb1gwZGxkRUoxWm1abGNnQUFDVWhoYzJoZlNXNXBkQUFCQzBoaGMyaGZWWEJrWVhSbEFBSUtTR0Z6YUY5R2FXNWhiQUFERFVoaGMyaGZSMlYwVTNSaGRHVUFCQTVJWVhOb1gwTmhiR04xYkdGMFpRQUZDbE5VUVZSRlgxTkpXa1VEQVFxeEVBWUZBRUdBQ1F0TkFFRUFRZ0EzQTZpSkFVRUFJQUEyQW9pSkFVRUFJQUJCejR5aWpnWnFOZ0tNaVFGQkFDQUFRZmVVcjY5NGFqWUNoSWtCUVFBZ0FFR29pSTJoQW1vMkFvQ0pBVUVBUVFBMkFxQ0pBUXU0Q0FFSGZ3SkFJQUJGRFFCQkFFRUFLUU9vaVFFZ0FLMThOd09vaVFFQ1FFRUFLQUtnaVFFaUFTQUFha0VQU3cwQUFrQUNRQ0FBUVFOeElnSU5BRUdBQ1NFRElBQWhCQXdCQ3lBQVFYeHhJUVJCZ0FraEF3TkFRUUJCQUNnQ29Ja0JJZ1ZCQVdvMkFxQ0pBU0FGUVpDSkFXb2dBeTBBQURvQUFDQURRUUZxSVFNZ0FrRi9haUlDRFFBTEN5QUFRUVJKRFFFRFFFRUFRUUFvQXFDSkFTSUNRUUZxTmdLZ2lRRWdBa0dRaVFGcUlBTXRBQUE2QUFBZ0EwRUJhaTBBQUNFQ1FRQkJBQ2dDb0lrQklnVkJBV28yQXFDSkFTQUZRWkNKQVdvZ0Fqb0FBQ0FEUVFKcUxRQUFJUUpCQUVFQUtBS2dpUUVpQlVFQmFqWUNvSWtCSUFWQmtJa0JhaUFDT2dBQUlBTkJBMm90QUFBaEFrRUFRUUFvQXFDSkFTSUZRUUZxTmdLZ2lRRWdCVUdRaVFGcUlBSTZBQUFnQTBFRWFpRURJQVJCZkdvaUJBMEFEQUlMQ3lBQVFmQUlhaUVHQWtBQ1FDQUJEUUJCQUNnQ2pJa0JJUUpCQUNnQ2lJa0JJUVZCQUNnQ2hJa0JJUVJCQUNnQ2dJa0JJUUZCZ0FraEF3d0JDMEdBQ1NFREFrQWdBVUVQU3cwQVFZQUpJUU1DUUFKQVFRQWdBV3RCQTNFaUJBMEFJQUVoQlF3QkN5QUJJUUlEUUVFQUlBSkJBV29pQlRZQ29Ja0JJQUpCa0lrQmFpQURMUUFBT2dBQUlBTkJBV29oQXlBRklRSWdCRUYvYWlJRURRQUxDeUFCUVhOcVFRTkpEUUJCQUNFRUEwQWdBeUFFYWlJQkxRQUFJUWRCQUNBRklBUnFJZ0pCQVdvMkFxQ0pBU0FDUVpDSkFXb2dCem9BQUNBQlFRRnFMUUFBSVFkQkFDQUNRUUpxTmdLZ2lRRWdBa0dSaVFGcUlBYzZBQUFnQVVFQ2FpMEFBQ0VIUVFBZ0FrRURhallDb0lrQklBSkJrb2tCYWlBSE9nQUFJQUZCQTJvdEFBQWhBVUVBSUFKQkJHbzJBcUNKQVNBQ1FaT0pBV29nQVRvQUFDQUZJQVJCQkdvaUJHcEJFRWNOQUFzZ0F5QUVhaUVEQzBFQVFRQW9BcENKQVVIM2xLK3ZlR3hCQUNnQ2dJa0Jha0VOZDBHeDg5M3hlV3dpQVRZQ2dJa0JRUUJCQUNnQ2xJa0JRZmVVcjY5NGJFRUFLQUtFaVFGcVFRMTNRYkh6M2ZGNWJDSUVOZ0tFaVFGQkFFRUFLQUtZaVFGQjk1U3ZyM2hzUVFBb0FvaUpBV3BCRFhkQnNmUGQ4WGxzSWdVMkFvaUpBVUVBUVFBb0FweUpBVUgzbEsrdmVHeEJBQ2dDaklrQmFrRU5kMEd4ODkzeGVXd2lBallDaklrQkN5QUFRWUFKYWlFQUFrQWdBeUFHU3cwQUEwQWdBeWdDQUVIM2xLK3ZlR3dnQVdwQkRYZEJzZlBkOFhsc0lRRWdBMEVNYWlnQ0FFSDNsSyt2ZUd3Z0FtcEJEWGRCc2ZQZDhYbHNJUUlnQTBFSWFpZ0NBRUgzbEsrdmVHd2dCV3BCRFhkQnNmUGQ4WGxzSVFVZ0EwRUVhaWdDQUVIM2xLK3ZlR3dnQkdwQkRYZEJzZlBkOFhsc0lRUWdBMEVRYWlJRElBWk5EUUFMQzBFQUlBSTJBb3lKQVVFQUlBVTJBb2lKQVVFQUlBUTJBb1NKQVVFQUlBRTJBb0NKQVVFQUlBQWdBMnMyQXFDSkFTQUFJQU5HRFFCQkFDRUNBMEFnQWtHUWlRRnFJQU1nQW1vdEFBQTZBQUFnQWtFQmFpSUNRUUFvQXFDSkFVa05BQXNMQzZRREFnRitCbjlCQUNrRHFJa0JJZ0NuSVFFQ1FBSkFJQUJDRUZRTkFFRUFLQUtFaVFGQkIzZEJBQ2dDZ0lrQlFRRjNha0VBS0FLSWlRRkJESGRxUVFBb0FveUpBVUVTZDJvaEFnd0JDMEVBS0FLSWlRRkJzYy9ac2dGcUlRSUxJQUlnQVdvaEFrR1FpUUVoQXdKQVFRQW9BcUNKQVNJRVFaQ0pBV29pQlVHVWlRRkpEUUJCa0lrQklRRURRQ0FCS0FJQVFiM2N5cFY4YkNBQ2FrRVJkMEd2MXRPK0Ftd2hBaUFCUVFocUlRWWdBVUVFYWlJRElRRWdCaUFGVFEwQUN3c0NRQ0FESUFWR0RRQWdCRUdQaVFGcUlRWUNRQUpBSUFRZ0EydEJBWEVOQUNBRElRRU1BUXNnQTBFQmFpRUJJQU10QUFCQnNjL1pzZ0ZzSUFKcVFRdDNRYkh6M2ZGNWJDRUNDeUFHSUFOR0RRQURRQ0FCUVFGcUxRQUFRYkhQMmJJQmJDQUJMUUFBUWJIUDJiSUJiQ0FDYWtFTGQwR3g4OTN4ZVd4cVFRdDNRYkh6M2ZGNWJDRUNJQUZCQW1vaUFTQUZSdzBBQ3d0QkFDQUNRUTkySUFKelFmZVVyNjk0YkNJQlFRMTJJQUZ6UWIzY3lwVjhiQ0lCUVJCMklBRnpJZ0pCR0hRZ0FrR0EvZ054UVFoMGNpQUJRUWgyUVlEK0EzRWdBVUVZZG5KeXJUY0RnQWtMQmdCQmdJa0JDL01EQWdGK0JIOUJBRUlBTndPb2lRRkJBQ0FCTmdLSWlRRkJBQ0FCUWMrTW9vNEdhallDaklrQlFRQWdBVUgzbEsrdmVHbzJBb1NKQVVFQUlBRkJxSWlOb1FKcU5nS0FpUUZCQUVFQU5nS2dpUUVnQUJBQ1FRQXBBNmlKQVNJQ3B5RUJBa0FDUUNBQ1FoQlVEUUJCQUNnQ2hJa0JRUWQzUVFBb0FvQ0pBVUVCZDJwQkFDZ0NpSWtCUVF4M2FrRUFLQUtNaVFGQkVuZHFJUUFNQVF0QkFDZ0NpSWtCUWJIUDJiSUJhaUVBQ3lBQUlBRnFJUUJCa0lrQklRTUNRRUVBS0FLZ2lRRWlCRUdRaVFGcUlnVkJsSWtCU1EwQVFaQ0pBU0VCQTBBZ0FTZ0NBRUc5M01xVmZHd2dBR3BCRVhkQnI5YlR2Z0pzSVFBZ0FVRUlhaUVHSUFGQkJHb2lBeUVCSUFZZ0JVME5BQXNMQWtBZ0F5QUZSZzBBSUFSQmo0a0JhaUVHQWtBQ1FDQUVJQU5yUVFGeERRQWdBeUVCREFFTElBTkJBV29oQVNBRExRQUFRYkhQMmJJQmJDQUFha0VMZDBHeDg5M3hlV3doQUFzZ0JpQURSZzBBQTBBZ0FVRUJhaTBBQUVHeHo5bXlBV3dnQVMwQUFFR3h6OW15QVd3Z0FHcEJDM2RCc2ZQZDhYbHNha0VMZDBHeDg5M3hlV3doQUNBQlFRSnFJZ0VnQlVjTkFBc0xRUUFnQUVFUGRpQUFjMEgzbEsrdmVHd2lBVUVOZGlBQmMwRzkzTXFWZkd3aUFVRVFkaUFCY3lJQVFSaDBJQUJCZ1A0RGNVRUlkSElnQVVFSWRrR0EvZ054SUFGQkdIWnljcTAzQTRBSkN3c0xBUUJCZ0FnTEJEQUFBQUE9XCI7XG52YXIgaGFzaCQ4ID0gXCI5ZTNhMDBjZFwiO1xudmFyIHdhc21Kc29uJDggPSB7XG5cdG5hbWU6IG5hbWUkOCxcblx0ZGF0YTogZGF0YSQ4LFxuXHRoYXNoOiBoYXNoJDhcbn07XG5cbmNvbnN0IG11dGV4JDYgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkNiA9IG51bGw7XG5mdW5jdGlvbiB2YWxpZGF0ZVNlZWQkMyhzZWVkKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNlZWQpIHx8IHNlZWQgPCAwIHx8IHNlZWQgPiAweEZGRkZGRkZGKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1NlZWQgbXVzdCBiZSBhIHZhbGlkIDMyLWJpdCBsb25nIHVuc2lnbmVkIGludGVnZXIuJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHh4SGFzaDMyIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gc2VlZCBOdW1iZXIgdXNlZCB0byBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiB4eGhhc2gzMihkYXRhLCBzZWVkID0gMCkge1xuICAgIGlmICh2YWxpZGF0ZVNlZWQkMyhzZWVkKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVTZWVkJDMoc2VlZCkpO1xuICAgIH1cbiAgICBpZiAod2FzbUNhY2hlJDYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCQ2LCB3YXNtSnNvbiQ4LCA0KVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSQ2ID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkNi5jYWxjdWxhdGUoZGF0YSwgc2VlZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJDYuY2FsY3VsYXRlKGRhdGEsIHNlZWQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB4eEhhc2gzMiBoYXNoIGluc3RhbmNlXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHBhcmFtIHNlZWQgTnVtYmVyIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqL1xuZnVuY3Rpb24gY3JlYXRlWFhIYXNoMzIoc2VlZCA9IDApIHtcbiAgICBpZiAodmFsaWRhdGVTZWVkJDMoc2VlZCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZCQzKHNlZWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kOCwgNCkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoc2VlZCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KHNlZWQpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDE2LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogNCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkNyA9IFwieHhoYXNoNjRcIjtcbnZhciBkYXRhJDcgPSBcIkFHRnpiUUVBQUFBQkRBTmdBQUYvWUFBQVlBRi9BQU1IQmdBQkFnRUFBUVVFQVFFQ0FnWU9BbjhCUWRDSkJRdC9BRUdBQ0FzSGNBZ0diV1Z0YjNKNUFnQU9TR0Z6YUY5SFpYUkNkV1ptWlhJQUFBbElZWE5vWDBsdWFYUUFBUXRJWVhOb1gxVndaR0YwWlFBQ0NraGhjMmhmUm1sdVlXd0FBdzFJWVhOb1gwZGxkRk4wWVhSbEFBUU9TR0Z6YUY5RFlXeGpkV3hoZEdVQUJRcFRWRUZVUlY5VFNWcEZBd0VLOUE4R0JRQkJnQWtMWXdFQmZrRUFRZ0EzQThpSkFVRUFRUUFwQTRBSklnQTNBNUNKQVVFQUlBQkMrZXJRME9mSm9lVGhBSHczQTVpSkFVRUFJQUJDejliVHZ0TEhxOWxDZkRjRGlJa0JRUUFnQUVMVzY0THU2djJKOWVBQWZEY0RnSWtCUVFCQkFEWUN3SWtCQzcwSUF3Vi9CSDRDZndKQUlBQkZEUUJCQUVFQUtRUElpUUVnQUsxOE53UElpUUVDUUVFQUtBTEFpUUVpQVNBQWFrRWZTdzBBQWtBQ1FDQUFRUU54SWdJTkFFR0FDU0VESUFBaEFRd0JDeUFBUVh4eElRRkJnQWtoQXdOQVFRQkJBQ2dDd0lrQklnUkJBV28yQXNDSkFTQUVRYUNKQVdvZ0F5MEFBRG9BQUNBRFFRRnFJUU1nQWtGL2FpSUNEUUFMQ3lBQVFRUkpEUUVEUUVFQVFRQW9Bc0NKQVNJQ1FRRnFOZ0xBaVFFZ0FrR2dpUUZxSUFNdEFBQTZBQUFnQTBFQmFpMEFBQ0VDUVFCQkFDZ0N3SWtCSWdSQkFXbzJBc0NKQVNBRVFhQ0pBV29nQWpvQUFDQURRUUpxTFFBQUlRSkJBRUVBS0FMQWlRRWlCRUVCYWpZQ3dJa0JJQVJCb0lrQmFpQUNPZ0FBSUFOQkEyb3RBQUFoQWtFQVFRQW9Bc0NKQVNJRVFRRnFOZ0xBaVFFZ0JFR2dpUUZxSUFJNkFBQWdBMEVFYWlFRElBRkJmR29pQVEwQURBSUxDeUFBUWVBSWFpRUZBa0FDUUNBQkRRQkJBQ2tEbUlrQklRWkJBQ2tEa0lrQklRZEJBQ2tEaUlrQklRaEJBQ2tEZ0lrQklRbEJnQWtoQXd3QkMwR0FDU0VEQWtBZ0FVRWZTdzBBUVlBSklRTUNRQUpBUVFBZ0FXdEJBM0VpQkEwQUlBRWhBZ3dCQ3lBQklRSURRQ0FDUWFDSkFXb2dBeTBBQURvQUFDQUNRUUZxSVFJZ0EwRUJhaUVESUFSQmYyb2lCQTBBQ3dzZ0FVRmpha0VEU1EwQVFTQWdBbXNoQ2tFQUlRUURRQ0FDSUFScUlnRkJvSWtCYWlBRElBUnFJZ3N0QUFBNkFBQWdBVUdoaVFGcUlBdEJBV290QUFBNkFBQWdBVUdpaVFGcUlBdEJBbW90QUFBNkFBQWdBVUdqaVFGcUlBdEJBMm90QUFBNkFBQWdDaUFFUVFScUlnUkhEUUFMSUFNZ0JHb2hBd3RCQUVFQUtRT2dpUUZDejliVHZ0TEhxOWxDZmtFQUtRT0FpUUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJZ2szQTRDSkFVRUFRUUFwQTZpSkFVTFAxdE8rMHNlcjJVSitRUUFwQTRpSkFYeENINGxDaDVXdnI1aTIzcHVlZjM0aUNEY0RpSWtCUVFCQkFDa0RzSWtCUXMvVzA3N1N4NnZaUW41QkFDa0RrSWtCZkVJZmlVS0hsYSt2bUxiZW01NS9maUlITndPUWlRRkJBRUVBS1FPNGlRRkN6OWJUdnRMSHE5bENma0VBS1FPWWlRRjhRaCtKUW9lVnI2K1l0dDZibm45K0lnWTNBNWlKQVFzZ0FFR0FDV29oQWdKQUlBTWdCVXNOQUFOQUlBTXBBd0JDejliVHZ0TEhxOWxDZmlBSmZFSWZpVUtIbGErdm1MYmVtNTUvZmlFSklBTkJHR29wQXdCQ3o5YlR2dExIcTlsQ2ZpQUdmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZpRUdJQU5CRUdvcEF3QkN6OWJUdnRMSHE5bENmaUFIZkVJZmlVS0hsYSt2bUxiZW01NS9maUVISUFOQkNHb3BBd0JDejliVHZ0TEhxOWxDZmlBSWZFSWZpVUtIbGErdm1MYmVtNTUvZmlFSUlBTkJJR29pQXlBRlRRMEFDd3RCQUNBR053T1lpUUZCQUNBSE53T1FpUUZCQUNBSU53T0lpUUZCQUNBSk53T0FpUUZCQUNBQ0lBTnJOZ0xBaVFFZ0FpQURSZzBBUVFBaEFnTkFJQUpCb0lrQmFpQURJQUpxTFFBQU9nQUFJQUpCQVdvaUFrRUFLQUxBaVFGSkRRQUxDd3UrQmdJRmZnVi9Ba0FDUUVFQUtRUElpUUVpQUVJZ1ZBMEFRUUFwQTRpSkFTSUJRZ2VKUVFBcEE0Q0pBU0lDUWdHSmZFRUFLUU9RaVFFaUEwSU1pWHhCQUNrRG1Ja0JJZ1JDRW9sOElBSkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDNDl6S2xmek84dldGZjN3Z0FVTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0xqM01xVi9NN3k5WVYvZkNBRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRdVBjeXBYOHp2TDFoWDk4SUFSQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUM0OXpLbGZ6Tzh2V0ZmM3doQVF3QkMwRUFLUU9RaVFGQ3hjL1pzdkhsdXVvbmZDRUJDeUFCSUFCOElRQkJvSWtCSVFVQ1FFRUFLQUxBaVFFaUJrR2dpUUZxSWdkQnFJa0JTUTBBUWFDSkFTRUlBMEFnQ0NrREFFTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K0lBQ0ZRaHVKUW9lVnI2K1l0dDZibm45K1F1UGN5cFg4enZMMWhYOThJUUFnQ0VFUWFpRUpJQWhCQ0dvaUJTRUlJQWtnQjAwTkFBc0xBa0FDUUNBRlFRUnFJZ2tnQjAwTkFDQUZJUWtNQVFzZ0JUVUNBRUtIbGErdm1MYmVtNTUvZmlBQWhVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aEFBc0NRQ0FKSUFkR0RRQWdCa0dmaVFGcUlRVUNRQUpBSUFZZ0NXdEJBWEVOQUNBSklRZ01BUXNnQ1VFQmFpRUlJQWt4QUFCQ3hjL1pzdkhsdXVvbmZpQUFoVUlMaVVLSGxhK3ZtTGJlbTU1L2ZpRUFDeUFGSUFsR0RRQURRQ0FJUVFGcU1RQUFRc1hQMmJMeDVicnFKMzRnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJQUNGUWd1SlFvZVZyNitZdHQ2Ym5uOStoVUlMaVVLSGxhK3ZtTGJlbTU1L2ZpRUFJQWhCQW1vaUNDQUhSdzBBQ3d0QkFDQUFRaUdJSUFDRlFzL1cwNzdTeDZ2WlFuNGlBRUlkaUNBQWhVTDU4OTN4bWZhWnF4WitJZ0JDSUlnZ0FJVWlBVUk0aGlBQlFvRCtBNE5DS0lhRUlBRkNnSUQ4QjROQ0dJWWdBVUtBZ0lENEQ0TkNDSWFFaENBQVFnaUlRb0NBZ1BnUGd5QUFRaGlJUW9DQS9BZURoQ0FBUWlpSVFvRCtBNE1nQUVJNGlJU0VoRGNEZ0FrTEJnQkJnSWtCQ3dJQUN3c0xBUUJCZ0FnTEJGQUFBQUE9XCI7XG52YXIgaGFzaCQ3ID0gXCJkYzYxYjRlN1wiO1xudmFyIHdhc21Kc29uJDcgPSB7XG5cdG5hbWU6IG5hbWUkNyxcblx0ZGF0YTogZGF0YSQ3LFxuXHRoYXNoOiBoYXNoJDdcbn07XG5cbmNvbnN0IG11dGV4JDUgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkNSA9IG51bGw7XG5jb25zdCBzZWVkQnVmZmVyJDIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG5mdW5jdGlvbiB2YWxpZGF0ZVNlZWQkMihzZWVkKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNlZWQpIHx8IHNlZWQgPCAwIHx8IHNlZWQgPiAweEZGRkZGRkZGKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1NlZWQgbXVzdCBiZSBnaXZlbiBhcyB0d28gdmFsaWQgMzItYml0IGxvbmcgdW5zaWduZWQgaW50ZWdlcnMgKGxvICsgaGlnaCkuJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gd3JpdGVTZWVkJDIoYXJyLCBsb3csIGhpZ2gpIHtcbiAgICAvLyB3cml0ZSBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdFxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBEYXRhVmlldyhhcnIpO1xuICAgIGJ1ZmZlci5zZXRVaW50MzIoMCwgbG93LCB0cnVlKTtcbiAgICBidWZmZXIuc2V0VWludDMyKDQsIGhpZ2gsIHRydWUpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHh4SGFzaDY0IGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gc2VlZExvdyBMb3dlciAzMiBiaXRzIG9mIHRoZSBudW1iZXIgdXNlZCB0b1xuICogIGluaXRpYWxpemUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gKGRlZmF1bHRzIHRvIDApXG4gKiBAcGFyYW0gc2VlZEhpZ2ggSGlnaGVyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24geHhoYXNoNjQoZGF0YSwgc2VlZExvdyA9IDAsIHNlZWRIaWdoID0gMCkge1xuICAgIGlmICh2YWxpZGF0ZVNlZWQkMihzZWVkTG93KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVTZWVkJDIoc2VlZExvdykpO1xuICAgIH1cbiAgICBpZiAodmFsaWRhdGVTZWVkJDIoc2VlZEhpZ2gpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQkMihzZWVkSGlnaCkpO1xuICAgIH1cbiAgICBpZiAod2FzbUNhY2hlJDUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCQ1LCB3YXNtSnNvbiQ3LCA4KVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSQ1ID0gd2FzbTtcbiAgICAgICAgICAgIHdyaXRlU2VlZCQyKHNlZWRCdWZmZXIkMiwgc2VlZExvdywgc2VlZEhpZ2gpO1xuICAgICAgICAgICAgd2FzbUNhY2hlJDUud3JpdGVNZW1vcnkobmV3IFVpbnQ4QXJyYXkoc2VlZEJ1ZmZlciQyKSk7XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJDUuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd3JpdGVTZWVkJDIoc2VlZEJ1ZmZlciQyLCBzZWVkTG93LCBzZWVkSGlnaCk7XG4gICAgICAgIHdhc21DYWNoZSQ1LndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KHNlZWRCdWZmZXIkMikpO1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJDUuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB4eEhhc2g2NCBoYXNoIGluc3RhbmNlXG4gKiBAcGFyYW0gc2VlZExvdyBMb3dlciAzMiBiaXRzIG9mIHRoZSBudW1iZXIgdXNlZCB0b1xuICogIGluaXRpYWxpemUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gKGRlZmF1bHRzIHRvIDApXG4gKiBAcGFyYW0gc2VlZEhpZ2ggSGlnaGVyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqL1xuZnVuY3Rpb24gY3JlYXRlWFhIYXNoNjQoc2VlZExvdyA9IDAsIHNlZWRIaWdoID0gMCkge1xuICAgIGlmICh2YWxpZGF0ZVNlZWQkMihzZWVkTG93KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVTZWVkJDIoc2VlZExvdykpO1xuICAgIH1cbiAgICBpZiAodmFsaWRhdGVTZWVkJDIoc2VlZEhpZ2gpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQkMihzZWVkSGlnaCkpO1xuICAgIH1cbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiQ3LCA4KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlQnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgICAgICB3cml0ZVNlZWQkMihpbnN0YW5jZUJ1ZmZlciwgc2VlZExvdywgc2VlZEhpZ2gpO1xuICAgICAgICB3YXNtLndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KGluc3RhbmNlQnVmZmVyKSk7XG4gICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2FzbS53cml0ZU1lbW9yeShuZXcgVWludDhBcnJheShpbnN0YW5jZUJ1ZmZlcikpO1xuICAgICAgICAgICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDMyLFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogOCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkNiA9IFwieHhoYXNoM1wiO1xudmFyIGRhdGEkNiA9IFwiQUdGemJRRUFBQUFCTkFoZ0FBRi9ZQVIvZjM5L0FHQUhmMzkvZjM5L2Z3QmdCSDkrZm40QmZtQUVmMzkvZmdGK1lBTi9mMzRCZm1BQUFHQUJmd0FERGcwQUFRSURCQVVGQlFZSEJnQUdCUVFCQVFJQ0JnNENmd0ZCd0k0RkMzOEFRY0FKQ3dkd0NBWnRaVzF2Y25rQ0FBNUlZWE5vWDBkbGRFSjFabVpsY2dBQUNVaGhjMmhmU1c1cGRBQUlDMGhoYzJoZlZYQmtZWFJsQUFrS1NHRnphRjlHYVc1aGJBQUtEVWhoYzJoZlIyVjBVM1JoZEdVQUN3NUlZWE5vWDBOaGJHTjFiR0YwWlFBTUNsTlVRVlJGWDFOSldrVURBUXJOUWcwRkFFR0FDZ3Z2QXdFUWZnSkFJQU5GRFFBZ0FVRTRhaUVCSUFKQk9Hb2hBaUFBS1FNd0lRUWdBQ2tET0NFRklBQXBBeUFoQmlBQUtRTW9JUWNnQUNrREVDRUlJQUFwQXhnaENTQUFLUU1BSVFvZ0FDa0RDQ0VMQTBBZ0J5QUJRV2hxS1FNQUlneDhJQUpCY0dvcEF3QWdBVUZ3YWlrREFDSU5oU0lIUWlDSUlBZEMvLy8vL3crRGZud2hCeUFKSUFGQldHb3BBd0FpRG53Z0FrRmdhaWtEQUNBQlFXQnFLUU1BSWcrRklnbENJSWdnQ1VMLy8vLy9ENE4rZkNFSklBc2dBVUZJYWlrREFDSVFmQ0FDUVZCcUtRTUFJQUZCVUdvcEF3QWlFWVVpQzBJZ2lDQUxRdi8vLy84UGczNThJUXNnQWtGNGFpa0RBQ0FCUVhocUtRTUFJaEtGSWhOQ0lJZ2dFMEwvLy8vL0Q0TitJQVI4SUFFcEF3QWlFM3doQkNBQ1FXaHFLUU1BSUF5RklneENJSWdnREVMLy8vLy9ENE4rSUFaOElBMThJUVlnQWtGWWFpa0RBQ0FPaFNJTVFpQ0lJQXhDLy8vLy93K0RmaUFJZkNBUGZDRUlJQUpCU0dvcEF3QWdFSVVpREVJZ2lDQU1Rdi8vLy84UGczNGdDbndnRVh3aENpQUZJQko4SUFJcEF3QWdFNFVpQlVJZ2lDQUZRdi8vLy84UGczNThJUVVnQVVIQUFHb2hBU0FDUVFocUlRSWdBMEYvYWlJRERRQUxJQUFnQ1RjREdDQUFJQW8zQXdBZ0FDQUxOd01JSUFBZ0J6Y0RLQ0FBSUFnM0F4QWdBQ0FGTndNNElBQWdCamNESUNBQUlBUTNBekFMQzk0Q0FnRi9BWDRDUUNBQ0lBRW9BZ0FpQjJzaUFpQUVTdzBBSUFBZ0F5QUZJQWRCQTNScUlBSVFBU0FBSUFVZ0Jtb2lCeWtEQUNBQUtRTUFJZ2hDTDRpRklBaUZRckh6M2ZFSmZqY0RBQ0FBSUFjcEF3Z2dBQ2tEQ0NJSVFpK0loU0FJaFVLeDg5M3hDWDQzQXdnZ0FDQUhLUU1RSUFBcEF4QWlDRUl2aUlVZ0NJVkNzZlBkOFFsK053TVFJQUFnQnlrREdDQUFLUU1ZSWdoQ0w0aUZJQWlGUXJIejNmRUpmamNER0NBQUlBY3BBeUFnQUNrRElDSUlRaStJaFNBSWhVS3g4OTN4Q1g0M0F5QWdBQ0FIS1FNb0lBQXBBeWdpQ0VJdmlJVWdDSVZDc2ZQZDhRbCtOd01vSUFBZ0J5a0RNQ0FBS1FNd0lnaENMNGlGSUFpRlFySHozZkVKZmpjRE1DQUFJQWNwQXpnZ0FDa0RPQ0lJUWkrSWhTQUloVUt4ODkzeENYNDNBemdnQUNBRElBSkJCblJxSUFVZ0JDQUNheUlIRUFFZ0FTQUhOZ0lBRHdzZ0FDQURJQVVnQjBFRGRHb2dCQkFCSUFFZ0J5QUVhallDQUF1RkFRRUJmeUFDSUFHRklBT25JZ1JCR0hRZ0JFR0EvZ054UVFoMGNpQUVRUWgyUVlEK0EzRWdCRUVZZG5KeXJVSWdoaUFEaFgxQkFEVUNnSXdCUWlDR0lBQkIvSXNCYWpVQ0FJU0ZJZ05DTVlrZ0EwSVlpWVVnQTRWQ3BiN2o5TkdNaDltZmYzNGlBMElqaUNBQXJYd2dBNFZDcGI3ajlOR01oOW1mZjM0aUEwSWNpQ0FEaFF0bkFDQUNJQUZ6clNBRGZDSURRaUdJUVFBdEFJQ01BVUVRZENBQVFRaDBjaUFBUVFGMlFZQ01BV290QUFCQkdIUnlJQUJCLzRzQmFpMEFBSEt0aFNBRGhVTFAxdE8rMHNlcjJVSitJZ05DSFlnZ0E0VkMrZlBkOFpuMm1hc1dmaUlEUWlDSUlBT0ZDNGtEQVFSK0FrQWdBRUVKU1EwQVFRQXBBNENNQVNBQktRTWdJQUVwQXhpRklBSjhoU0lEUWppR0lBTkNnUDREZzBJb2hvUWdBMEtBZ1B3SGcwSVloaUFEUW9DQWdQZ1BnMElJaG9TRUlBTkNDSWhDZ0lDQStBK0RJQU5DR0loQ2dJRDhCNE9FSUFOQ0tJaENnUDREZ3lBRFFqaUloSVNFSUFDdGZDQUFRZmlMQVdvcEF3QWdBU2tETUNBQktRTW9oU0FDZllVaUFud2dBa0wvLy8vL0Q0TWlCQ0FEUWlDSUlnVitJZ1pDLy8vLy93K0RJQUpDSUlnaUFpQURRdi8vLy84UGd5SURmbndnQkNBRGZpSURRaUNJZkNJRVFpQ0dJQU5DLy8vLy93K0RoQ0FHUWlDSUlBSWdCWDU4SUFSQ0lJaDhoWHdpQTBJbGlDQURoVUw1ODkzeG1mS1pxeForSWdOQ0lJZ2dBNFVQQ3dKQUlBQkJCRWtOQUNBQUlBRkJDR29wQXdBZ0FVRVFhaWtEQUNBQ0VBTVBDd0pBSUFCRkRRQWdBQ0FCS0FJQUlBRkJCR29vQWdBZ0FoQUVEd3NnQVNrRE9DQUJLUU5BaFNBQ2hTSURRaUdJSUFPRlFzL1cwNzdTeDZ2WlFuNGlBMElkaUNBRGhVTDU4OTN4bWZhWnF4WitJZ05DSUlnZ0E0VUwzZ2dCQm40Z0FLMUNoNVd2cjVpMjNwdWVmMzRoQXdKQUlBQkJJVWtOQUFKQUlBQkJ3UUJKRFFBQ1FDQUFRZUVBU1EwQUlBRXBBMmdnQW4xQkFDa0R1SXdCaFNJRVF2Ly8vLzhQZ3lJRklBRXBBMkFnQW54QkFDa0RzSXdCaFNJR1FpQ0lJZ2QrSWdoQy8vLy8vdytESUFSQ0lJZ2lCQ0FHUXYvLy8vOFBneUlHZm53Z0JTQUdmaUlGUWlDSWZDSUdRaUNHSUFWQy8vLy8vdytEaENBSVFpQ0lJQVFnQjM1OElBWkNJSWg4aFNBRGZDQUJLUU40SUFKOUlBQkJ5SXNCYWlrREFJVWlBMEwvLy8vL0Q0TWlCQ0FCS1FOd0lBSjhJQUJCd0lzQmFpa0RBSVVpQlVJZ2lDSUdmaUlIUXYvLy8vOFBneUFEUWlDSUlnTWdCVUwvLy8vL0Q0TWlCWDU4SUFRZ0JYNGlCRUlnaUh3aUJVSWdoaUFFUXYvLy8vOFBnNFFnQjBJZ2lDQURJQVorZkNBRlFpQ0lmSVY4SVFNTElBRXBBMGdnQW4xQkFDa0RxSXdCaFNJRVF2Ly8vLzhQZ3lJRklBRXBBMEFnQW54QkFDa0RvSXdCaFNJR1FpQ0lJZ2QrSWdoQy8vLy8vdytESUFSQ0lJZ2lCQ0FHUXYvLy8vOFBneUlHZm53Z0JTQUdmaUlGUWlDSWZDSUdRaUNHSUFWQy8vLy8vdytEaENBSVFpQ0lJQVFnQjM1OElBWkNJSWg4aFNBRGZDQUJLUU5ZSUFKOUlBQkIySXNCYWlrREFJVWlBMEwvLy8vL0Q0TWlCQ0FCS1FOUUlBSjhJQUJCMElzQmFpa0RBSVVpQlVJZ2lDSUdmaUlIUXYvLy8vOFBneUFEUWlDSUlnTWdCVUwvLy8vL0Q0TWlCWDU4SUFRZ0JYNGlCRUlnaUh3aUJVSWdoaUFFUXYvLy8vOFBnNFFnQjBJZ2lDQURJQVorZkNBRlFpQ0lmSVY4SVFNTElBRXBBeWdnQW4xQkFDa0RtSXdCaFNJRVF2Ly8vLzhQZ3lJRklBRXBBeUFnQW54QkFDa0RrSXdCaFNJR1FpQ0lJZ2QrSWdoQy8vLy8vdytESUFSQ0lJZ2lCQ0FHUXYvLy8vOFBneUlHZm53Z0JTQUdmaUlGUWlDSWZDSUdRaUNHSUFWQy8vLy8vdytEaENBSVFpQ0lJQVFnQjM1OElBWkNJSWg4aFNBRGZDQUJLUU00SUFKOUlBQkI2SXNCYWlrREFJVWlBMEwvLy8vL0Q0TWlCQ0FCS1FNd0lBSjhJQUJCNElzQmFpa0RBSVVpQlVJZ2lDSUdmaUlIUXYvLy8vOFBneUFEUWlDSUlnTWdCVUwvLy8vL0Q0TWlCWDU4SUFRZ0JYNGlCRUlnaUh3aUJVSWdoaUFFUXYvLy8vOFBnNFFnQjBJZ2lDQURJQVorZkNBRlFpQ0lmSVY4SVFNTElBRXBBd2dnQW4xQkFDa0RpSXdCaFNJRVF2Ly8vLzhQZ3lJRklBRXBBd0FnQW54QkFDa0RnSXdCaFNJR1FpQ0lJZ2QrSWdoQy8vLy8vdytESUFSQ0lJZ2lCQ0FHUXYvLy8vOFBneUlHZm53Z0JTQUdmaUlGUWlDSWZDSUdRaUNHSUFWQy8vLy8vdytEaENBSVFpQ0lJQVFnQjM1OElBWkNJSWg4aFNBRGZDQUJLUU1ZSUFKOUlBQkIrSXNCYWlrREFJVWlBMEwvLy8vL0Q0TWlCQ0FCS1FNUUlBSjhJQUJCOElzQmFpa0RBSVVpQWtJZ2lDSUZmaUlHUXYvLy8vOFBneUFEUWlDSUlnTWdBa0wvLy8vL0Q0TWlBbjU4SUFRZ0FuNGlBa0lnaUh3aUJFSWdoaUFDUXYvLy8vOFBnNFFnQmtJZ2lDQURJQVYrZkNBRVFpQ0lmSVY4SWdKQ0pZZ2dBb1ZDK2ZQZDhabnltYXNXZmlJQ1FpQ0lJQUtGQy93S0JBRi9CWDRDZndGK1FRQWhBeUFCS1FONElBSjlRUUFwQS9pTUFZVWlCRUwvLy8vL0Q0TWlCU0FCS1FOd0lBSjhRUUFwQS9DTUFZVWlCa0lnaUNJSGZpSUlRdi8vLy84UGd5QUVRaUNJSWdRZ0JrTC8vLy8vRDRNaUJuNThJQVVnQm40aUJVSWdpSHdpQmtJZ2hpQUZRdi8vLy84UGc0UWdDRUlnaUNBRUlBZCtmQ0FHUWlDSWZJVWdBU2tEYUNBQ2ZVRUFLUVBvakFHRklnUkMvLy8vL3crRElnVWdBU2tEWUNBQ2ZFRUFLUVBnakFHRklnWkNJSWdpQjM0aUNFTC8vLy8vRDRNZ0JFSWdpQ0lFSUFaQy8vLy8vdytESWdaK2ZDQUZJQVorSWdWQ0lJaDhJZ1pDSUlZZ0JVTC8vLy8vRDRPRUlBaENJSWdnQkNBSGZud2dCa0lnaUh5RklBRXBBMWdnQW4xQkFDa0QySXdCaFNJRVF2Ly8vLzhQZ3lJRklBRXBBMUFnQW54QkFDa0QwSXdCaFNJR1FpQ0lJZ2QrSWdoQy8vLy8vdytESUFSQ0lJZ2lCQ0FHUXYvLy8vOFBneUlHZm53Z0JTQUdmaUlGUWlDSWZDSUdRaUNHSUFWQy8vLy8vdytEaENBSVFpQ0lJQVFnQjM1OElBWkNJSWg4aFNBQktRTklJQUo5UVFBcEE4aU1BWVVpQkVMLy8vLy9ENE1pQlNBQktRTkFJQUo4UVFBcEE4Q01BWVVpQmtJZ2lDSUhmaUlJUXYvLy8vOFBneUFFUWlDSUlnUWdCa0wvLy8vL0Q0TWlCbjU4SUFVZ0JuNGlCVUlnaUh3aUJrSWdoaUFGUXYvLy8vOFBnNFFnQ0VJZ2lDQUVJQWQrZkNBR1FpQ0lmSVVnQVNrRE9DQUNmVUVBS1FPNGpBR0ZJZ1JDLy8vLy93K0RJZ1VnQVNrRE1DQUNmRUVBS1FPd2pBR0ZJZ1pDSUlnaUIzNGlDRUwvLy8vL0Q0TWdCRUlnaUNJRUlBWkMvLy8vL3crRElnWitmQ0FGSUFaK0lnVkNJSWg4SWdaQ0lJWWdCVUwvLy8vL0Q0T0VJQWhDSUlnZ0JDQUhmbndnQmtJZ2lIeUZJQUVwQXlnZ0FuMUJBQ2tEcUl3QmhTSUVRdi8vLy84UGd5SUZJQUVwQXlBZ0FueEJBQ2tEb0l3QmhTSUdRaUNJSWdkK0lnaEMvLy8vL3crRElBUkNJSWdpQkNBR1F2Ly8vLzhQZ3lJR2Zud2dCU0FHZmlJRlFpQ0lmQ0lHUWlDR0lBVkMvLy8vL3crRGhDQUlRaUNJSUFRZ0IzNThJQVpDSUloOGhTQUJLUU1ZSUFKOVFRQXBBNWlNQVlVaUJFTC8vLy8vRDRNaUJTQUJLUU1RSUFKOFFRQXBBNUNNQVlVaUJrSWdpQ0lIZmlJSVF2Ly8vLzhQZ3lBRVFpQ0lJZ1FnQmtMLy8vLy9ENE1pQm41OElBVWdCbjRpQlVJZ2lId2lCa0lnaGlBRlF2Ly8vLzhQZzRRZ0NFSWdpQ0FFSUFkK2ZDQUdRaUNJZklVZ0FTa0RDQ0FDZlVFQUtRT0lqQUdGSWdSQy8vLy8vdytESWdVZ0FTa0RBQ0FDZkVFQUtRT0FqQUdGSWdaQ0lJZ2lCMzRpQ0VMLy8vLy9ENE1nQkVJZ2lDSUVJQVpDLy8vLy93K0RJZ1orZkNBRklBWitJZ1ZDSUloOElnWkNJSVlnQlVMLy8vLy9ENE9FSUFoQ0lJZ2dCQ0FIZm53Z0JrSWdpSHlGSUFDdFFvZVZyNitZdHQ2Ym5uOStmSHg4Zkh4OGZId2lCRUlsaUNBRWhVTDU4OTN4bWZLWnF4WitJZ1JDSUlnZ0JJVWhCQUpBSUFCQmtBRklEUUFnQUVFRWRrRjRhaUVKQTBBZ0FTQURhaUlLUVF0cUtRTUFJQUo5SUFOQmlJMEJhaWtEQUlVaUJVTC8vLy8vRDRNaUJpQUtRUU5xS1FNQUlBSjhJQU5CZ0kwQmFpa0RBSVVpQjBJZ2lDSUlmaUlMUXYvLy8vOFBneUFGUWlDSUlnVWdCMEwvLy8vL0Q0TWlCMzU4SUFZZ0IzNGlCa0lnaUh3aUIwSWdoaUFHUXYvLy8vOFBnNFFnQzBJZ2lDQUZJQWgrZkNBSFFpQ0lmSVVnQkh3aEJDQURRUkJxSVFNZ0NVRi9haUlKRFFBTEN5QUJLUU4vSUFKOUlBQkIrSXNCYWlrREFJVWlCVUwvLy8vL0Q0TWlCaUFCS1FOM0lBSjhJQUJCOElzQmFpa0RBSVVpQWtJZ2lDSUhmaUlJUXYvLy8vOFBneUFGUWlDSUlnVWdBa0wvLy8vL0Q0TWlBbjU4SUFZZ0FuNGlBa0lnaUh3aUJrSWdoaUFDUXYvLy8vOFBnNFFnQ0VJZ2lDQUZJQWQrZkNBR1FpQ0lmSVVnQkh3aUFrSWxpQ0FDaFVMNTg5M3htZktacXhaK0lnSkNJSWdnQW9VTDN3VUNBWDRCZndKQUFrQkJBQ2tEZ0FvaUFGQkZEUUJCZ0FnaEFVSUFJUUFNQVFzQ1FFRUFLUU9namdFZ0FGSU5BRUVBSVFFTUFRdEJBQ0VCUVFCQ3I2L3YxN3oza3FEK0FDQUFmVGNEK0lzQlFRQWdBRUxGbHV2NTJOS0ZnaWg4TndQd2l3RkJBRUtQOGVPTnJZLzBtRTRnQUgwM0EraUxBVUVBSUFCQ3E2ejR4ZFh2MGRCOGZEY0Q0SXNCUVFCQzA2M1VzcEtGdGJTZWZ5QUFmVGNEMklzQlFRQWdBRUtYbXZTTzlaYTg3Y2tBZkRjRDBJc0JRUUJDeFlPQy9hLy94TEZySUFCOU53UElpd0ZCQUNBQVF1cUxzNTNJNXZUMVEzdzNBOENMQVVFQVFzaS8rc3VjbTk2NTVBQWdBSDAzQTdpTEFVRUFJQUJDaXFPQjM5U1o3YXd4ZkRjRHNJc0JRUUJDK2JudnZmejR3cWNkSUFCOU53T29pd0ZCQUNBQVFxajEyL3V6bktlYVAzdzNBNkNMQVVFQVFyaXl2TGVVMWJmV1dDQUFmVGNEbUlzQlFRQWdBRUx4eUtHNnFiVEQvTTRBZkRjRGtJc0JRUUJDaUtHWDI3ampsSmVqZnlBQWZUY0RpSXNCUVFBZ0FFSzgwTWphbS9Ld2dFdDhOd09BaXdGQkFFTGc2OEMwbnRDT2s4d0FJQUI5TndQNGlnRkJBQ0FBUXJpUm1LTDMvcENTam45OE53UHdpZ0ZCQUVLQ3RjSHV4L20vdVNFZ0FIMDNBK2lLQVVFQUlBQkN5L09aOThTWjhQTDRBSHczQStDS0FVRUFRdktBa2FYNjl1eXpIeUFBZlRjRDJJb0JRUUFnQUVMZXFiZkx2cERreTF0OE53UFFpZ0ZCQUVMOGdvVGs4cjdJMWh3Z0FIMDNBOGlLQVVFQUlBQkN1UDJ6eTdPRTZhVytmM3czQThDS0FRdEJBRUlBTndPUWpnRkJBRUlBTndPSWpnRkJBRUlBTndPQWpnRkJBRUs5M01xVkREY0RnSW9CUVFCQ2g1V3ZyNWkyM3B1ZWZ6Y0RpSW9CUVFCQ3o5YlR2dExIcTlsQ053T1FpZ0ZCQUVMNTg5M3htZmFacXhZM0E1aUtBVUVBUXVQY3lwWDh6dkwxaFg4M0E2Q0tBVUVBUXZlVXI2OElOd09vaWdGQkFFTEZ6OW15OGVXNjZpYzNBN0NLQVVFQVFySHozZkVKTndPNGlnRkJBQ0FBTndPZ2pnRkJBQ0FCTmdLd2pnRkJBRUtRZ0lDQWdCQTNBNWlPQVF1Q0NnRUlmMEVBUVFBcEE1Q09BU0FBclh3M0E1Q09BUUpBQWtBQ1FFRUFLQUtBamdFaUFTQUFhaUlDUVlBQ1N3MEFJQUZCZ0l3QmFpRURRWUFLSVFRQ1FDQUFRUWhQRFFBZ0FDRUJEQUlMQWtBQ1FDQUFRWGhxSWdWQkEzWkJBV3BCQjNFaUJnMEFRWUFLSVFRZ0FDRUJEQUVMSUFaQkEzUWhBVUdBQ2lFRUEwQWdBeUFFS1FNQU53TUFJQU5CQ0dvaEF5QUVRUWhxSVFRZ0JrRi9haUlHRFFBTElBQWdBV3NoQVFzZ0JVRTRTUTBCQTBBZ0F5QUVLUU1BTndNQUlBTkJDR29nQkVFSWFpa0RBRGNEQUNBRFFSQnFJQVJCRUdvcEF3QTNBd0FnQTBFWWFpQUVRUmhxS1FNQU53TUFJQU5CSUdvZ0JFRWdhaWtEQURjREFDQURRU2hxSUFSQktHb3BBd0EzQXdBZ0EwRXdhaUFFUVRCcUtRTUFOd01BSUFOQk9Hb2dCRUU0YWlrREFEY0RBQ0FEUWNBQWFpRURJQVJCd0FCcUlRUWdBVUZBYWlJQlFRZExEUUFNQWdzTFFZQUtJUVFnQUVHQUNtb2hCVUVBS0FLd2pnRWlBMEhBaWdFZ0F4c2hCZ0pBSUFGRkRRQWdBVUdBakFGcUlRTkJnQW9oQkFKQUFrQkJnQUlnQVdzaUIwRUlUdzBBSUFjaEFBd0JDd0pBQWtCQitBRWdBV3NpQ0VFRGRrRUJha0VIY1NJQ0RRQkJnQW9oQkNBSElRQU1BUXRCZ0FvaEJDQUNRUU4wSWdBaEFnTkFJQU1nQkNrREFEY0RBQ0FEUVFocUlRTWdCRUVJYWlFRUlBSkJlR29pQWcwQUMwR0FBaUFCSUFCcWF5RUFDeUFJUVRoSkRRQURRQ0FESUFRcEF3QTNBd0FnQTBFSWFpQUVRUWhxS1FNQU53TUFJQU5CRUdvZ0JFRVFhaWtEQURjREFDQURRUmhxSUFSQkdHb3BBd0EzQXdBZ0EwRWdhaUFFUVNCcUtRTUFOd01BSUFOQktHb2dCRUVvYWlrREFEY0RBQ0FEUVRCcUlBUkJNR29wQXdBM0F3QWdBMEU0YWlBRVFUaHFLUU1BTndNQUlBTkJ3QUJxSVFNZ0JFSEFBR29oQkNBQVFVQnFJZ0JCQjBzTkFBc0xBa0FnQUVVTkFBSkFBa0FnQUVFSGNTSUNEUUFnQUNFQkRBRUxJQUJCZUhFaEFRTkFJQU1nQkMwQUFEb0FBQ0FEUVFGcUlRTWdCRUVCYWlFRUlBSkJmMm9pQWcwQUN3c2dBRUVJU1EwQUEwQWdBeUFFS1FBQU53QUFJQU5CQ0dvaEF5QUVRUWhxSVFRZ0FVRjRhaUlCRFFBTEMwR0FpZ0ZCaUk0QlFRQW9BcGlPQVVHQWpBRkJCQ0FHUVFBb0FweU9BUkFDUVFCQkFEWUNnSTRCSUFkQmdBcHFJUVFMQWtBZ0JFR0FBbW9nQlU4TkFDQUZRWUIrYWlFREEwQkJnSW9CUVlpT0FVRUFLQUtZamdFZ0JFRUVJQVpCQUNnQ25JNEJFQUlnQkVHQUFtb2lCQ0FEU1EwQUMwRUFJQVJCUUdvcEF3QTNBOENOQVVFQUlBUkJTR29wQXdBM0E4aU5BVUVBSUFSQlVHb3BBd0EzQTlDTkFVRUFJQVJCV0dvcEF3QTNBOWlOQVVFQUlBUkJZR29wQXdBM0ErQ05BVUVBSUFSQmFHb3BBd0EzQStpTkFVRUFJQVJCY0dvcEF3QTNBL0NOQVVFQUlBUkJlR29wQXdBM0EvaU5BUXRCZ0l3QklRTUNRQUpBSUFVZ0JHc2lBa0VJVHcwQUlBSWhCZ3dCQzBHQWpBRWhBeUFDSVFZRFFDQURJQVFwQXdBM0F3QWdBMEVJYWlFRElBUkJDR29oQkNBR1FYaHFJZ1pCQjBzTkFBc0xJQVpGRFFFRFFDQURJQVF0QUFBNkFBQWdBMEVCYWlFRElBUkJBV29oQkNBR1FYOXFJZ1lOQUF3Q0N3c2dBVVVOQUFKQUFrQWdBVUVIY1NJR0RRQWdBU0VDREFFTElBRkJlSEVoQWdOQUlBTWdCQzBBQURvQUFDQURRUUZxSVFNZ0JFRUJhaUVFSUFaQmYyb2lCZzBBQ3dzQ1FDQUJRUWhKRFFBRFFDQURJQVFwQUFBM0FBQWdBMEVJYWlFRElBUkJDR29oQkNBQ1FYaHFJZ0lOQUFzTFFRQW9Bb0NPQVNBQWFpRUNDMEVBSUFJMkFvQ09BUXVzRXdVRWZ3SitBWDhWZmdWL0l3QWlBQ0VCSUFCQmdBRnJRVUJ4SWdJa0FFRUFLQUt3amdFaUFFSEFpZ0VnQUJzaEF3SkFBa0JCQUNrRGtJNEJJZ1JDOFFGVURRQWdBa0VBS1FPQWlnRTNBd0FnQWtFQUtRT0lpZ0UzQXdnZ0FrRUFLUU9RaWdFM0F4QWdBa0VBS1FPWWlnRTNBeGdnQWtFQUtRT2dpZ0UzQXlBZ0FrRUFLUU9vaWdFM0F5Z2dBa0VBS1FPd2lnRWlCRGNETUNBQ1FRQXBBN2lLQVNJRk53TTRBa0FDUUVFQUtBS0FqZ0VpQmtIQUFFa05BQ0FDUVFBb0FvaU9BVFlDUUNBQ0lBSkJ3QUJxUVFBb0FwaU9BVUdBakFFZ0JrRi9ha0VHZGlBRFFRQW9BcHlPQVNJQUVBSWdBeUFBYWlJQVFYbHFLUU1BSVFjZ0FFRUphaWtEQUNFSUlBQkJHV29wQXdBaENTQUdRY0NMQVdvcEF3QWhCQ0FBUVFGcUtRTUFJUW9nQmtISWl3RnFLUU1BSVFVZ0JrSFFpd0ZxS1FNQUlRc2dBRUVSYWlrREFDRU1JQVpCMklzQmFpa0RBQ0VOSUFaQjRJc0JhaWtEQUNFT0lBQkJJV29wQXdBaER5QUdRZWlMQVdvcEF3QWhFQ0FBUVNscUtRTUFJUkVnQWlrREFDRVNJQUlwQXhBaEV5QUNLUU1nSVJRZ0Fpa0RDQ0VWSUFJcEF4Z2hGaUFDS1FNb0lSY2dBaWtETUNFWUlBSWdBaWtET0NBR1FmQ0xBV29wQXdBaUdYd2dBRUV4YWlrREFDQUdRZmlMQVdvcEF3QWlHb1VpRzBJZ2lDQWJRdi8vLy84UGczNThOd000SUFJZ0dpQVlJQkVnR1lVaUVVSWdpQ0FSUXYvLy8vOFBnMzU4ZkRjRE1DQVhJQTU4SUE4Z0VJVWlEMElnaUNBUFF2Ly8vLzhQZzM1OElROGdGaUFMZkNBTUlBMkZJZ3hDSUlnZ0RFTC8vLy8vRDROK2ZDRU1JQlVnQkh3Z0NpQUZoU0lLUWlDSUlBcEMvLy8vL3crRGZud2hDaUFRSUJRZ0NTQU9oU0lPUWlDSUlBNUMvLy8vL3crRGZueDhJUkFnRFNBVElBZ2dDNFVpQzBJZ2lDQUxRdi8vLy84UGczNThmQ0VJSUFVZ0VpQUhJQVNGSWdSQ0lJZ2dCRUwvLy8vL0Q0TitmSHdoQnd3QkN5QUdRY0NOQVdvaEhFSEFBQ0FHYXlFZElBSkJ3QUJxSVFBQ1FBSkFBa0FnQmtFNFRRMEFJQjBoSGd3QkN3SkFBa0JCT0NBR2F5SWZRUU4yUVFGcVFRZHhJaDROQUNBQ1FjQUFhaUVBSUIwaEhnd0JDeUFDUWNBQWFpRUFJQjVCQTNRaUlDRWVBMEFnQUNBY0tRTUFOd01BSUFCQkNHb2hBQ0FjUVFocUlSd2dIa0Y0YWlJZURRQUxRY0FBSUFZZ0lHcHJJUjRMQWtBZ0gwRTRTUTBBQTBBZ0FDQWNLUU1BTndNQUlBQkJDR29nSEVFSWFpa0RBRGNEQUNBQVFSQnFJQnhCRUdvcEF3QTNBd0FnQUVFWWFpQWNRUmhxS1FNQU53TUFJQUJCSUdvZ0hFRWdhaWtEQURjREFDQUFRU2hxSUJ4QktHb3BBd0EzQXdBZ0FFRXdhaUFjUVRCcUtRTUFOd01BSUFCQk9Hb2dIRUU0YWlrREFEY0RBQ0FBUWNBQWFpRUFJQnhCd0FCcUlSd2dIa0ZBYWlJZVFRZExEUUFMQ3lBZVJRMEJDeUFlUVg5cUlTQUNRQ0FlUVFkeEloOUZEUUFnSGtGNGNTRWVBMEFnQUNBY0xRQUFPZ0FBSUFCQkFXb2hBQ0FjUVFGcUlSd2dIMEYvYWlJZkRRQUxDeUFnUVFkSkRRQURRQ0FBSUJ3cEFBQTNBQUFnQUVFSWFpRUFJQnhCQ0dvaEhDQWVRWGhxSWg0TkFBc0xJQUpCd0FCcUlCMXFJUnhCZ0l3QklRQUNRQUpBQWtBZ0JrRUlTUTBBQWtBZ0JrRTRha0VEZGtFQmFrRUhjU0llRFFBTUFnc2dIa0VEZENFZlFZQ01BU0VBQTBBZ0hDQUFLUU1BTndNQUlCeEJDR29oSENBQVFRaHFJUUFnSGtGL2FpSWVEUUFMSUFZZ0gyc2hCZ3NnQmtVTkFRSkFJQVpCQjNFaUh3MEFJQVloSGd3QkN5QUdRWGh4SVI0RFFDQWNJQUF0QUFBNkFBQWdIRUVCYWlFY0lBQkJBV29oQUNBZlFYOXFJaDhOQUFzTElBWkJDRWtOQUFOQUlCd2dBQ2tBQURjQUFDQWNRUWhxSVJ3Z0FFRUlhaUVBSUI1QmVHb2lIZzBBQ3dzZ0EwRUFLQUtjamdGcUlnQkJlV29wQXdBaENTQUFRUWxxS1FNQUlSRWdBRUVaYWlrREFDRVNJQUJCQVdvcEF3QWhDaUFBUVJGcUtRTUFJUXdnQUVFaGFpa0RBQ0VQSUFCQktXb3BBd0FoRXlBQ0tRTUFJUlFnQWlrREVDRVZJQUlwQXlBaEZpQUNLUU1JSVJjZ0Fpa0RRQ0VMSUFJcEEwZ2hEU0FDS1FNWUlSZ2dBaWtEVUNFT0lBSXBBMWdoQ0NBQ0tRTW9JUmtnQWlrRFlDRVFJQUlwQTJnaEJ5QUNJQVVnQWlrRGNDSWFmQ0FBUVRGcUtRTUFJQUlwQTNnaUJZVWlHMElnaUNBYlF2Ly8vLzhQZzM1OE53TTRJQUlnQlNBVElCcUZJaE5DSUlnZ0UwTC8vLy8vRDROK0lBUjhmRGNETUNBWklCQjhJQThnQjRVaUJFSWdpQ0FFUXYvLy8vOFBnMzU4SVE4Z0dDQU9mQ0FNSUFpRklnUkNJSWdnQkVMLy8vLy9ENE4rZkNFTUlCY2dDM3dnQ2lBTmhTSUVRaUNJSUFSQy8vLy8vdytEZm53aENpQUhJQllnRWlBUWhTSUVRaUNJSUFSQy8vLy8vdytEZm54OElSQWdDQ0FWSUJFZ0RvVWlCRUlnaUNBRVF2Ly8vLzhQZzM1OGZDRUlJQTBnRkNBSklBdUZJZ1JDSUlnZ0JFTC8vLy8vRDROK2ZId2hCd3NnQXlrRFF5QUNLUU00aFNJRVF2Ly8vLzhQZ3lJRklBTXBBenNnQWlrRE1JVWlDMElnaUNJTmZpSU9Rdi8vLy84UGd5QUVRaUNJSWdRZ0MwTC8vLy8vRDRNaUMzNThJQVVnQzM0aUJVSWdpSHdpQzBJZ2hpQUZRdi8vLy84UGc0UWdEa0lnaUNBRUlBMStmQ0FMUWlDSWZJVWdBeWtETXlBUGhTSUVRdi8vLy84UGd5SUZJQU1wQXlzZ0VJVWlDMElnaUNJTmZpSU9Rdi8vLy84UGd5QUVRaUNJSWdRZ0MwTC8vLy8vRDRNaUMzNThJQVVnQzM0aUJVSWdpSHdpQzBJZ2hpQUZRdi8vLy84UGc0UWdEa0lnaUNBRUlBMStmQ0FMUWlDSWZJVWdBeWtESXlBTWhTSUVRdi8vLy84UGd5SUZJQU1wQXhzZ0NJVWlDMElnaUNJTmZpSU9Rdi8vLy84UGd5QUVRaUNJSWdRZ0MwTC8vLy8vRDRNaUMzNThJQVVnQzM0aUJVSWdpSHdpQzBJZ2hpQUZRdi8vLy84UGc0UWdEa0lnaUNBRUlBMStmQ0FMUWlDSWZJVWdBeWtERXlBS2hTSUVRdi8vLy84UGd5SUZJQU1wQXdzZ0I0VWlDMElnaUNJTmZpSU9Rdi8vLy84UGd5QUVRaUNJSWdRZ0MwTC8vLy8vRDRNaUMzNThJQVVnQzM0aUJVSWdpSHdpQzBJZ2hpQUZRdi8vLy84UGc0UWdEa0lnaUNBRUlBMStmQ0FMUWlDSWZJVkJBQ2tEa0k0QlFvZVZyNitZdHQ2Ym5uOStmSHg4ZkNJRVFpV0lJQVNGUXZuejNmR1o4cG1yRm40aUJFSWdpQ0FFaFNFRURBRUxJQVNuSVFBQ1FFRUFLUU9namdFaUJGQU5BQUpBSUFCQkVFc05BQ0FBUVlBSUlBUVFCU0VFREFJTEFrQWdBRUdBQVVzTkFDQUFRWUFJSUFRUUJpRUVEQUlMSUFCQmdBZ2dCQkFISVFRTUFRc0NRQ0FBUVJCTERRQWdBQ0FEUWdBUUJTRUVEQUVMQWtBZ0FFR0FBVXNOQUNBQUlBTkNBQkFHSVFRTUFRc2dBQ0FEUWdBUUJ5RUVDMEVBSUFSQ09JWWdCRUtBL2dPRFFpaUdoQ0FFUW9DQS9BZURRaGlHSUFSQ2dJQ0ErQStEUWdpR2hJUWdCRUlJaUVLQWdJRDRENE1nQkVJWWlFS0FnUHdIZzRRZ0JFSW9pRUtBL2dPRElBUkNPSWlFaElRM0E0QUtJQUVrQUFzR0FFR0FpZ0VMQWdBTEM4d0JBUUJCZ0FnTHhBRzQvbXc1STZSTHZud0JnU3ozSWEwYzN0UnQ2WU9RbDl0eVFLU2t0N05uSDh0NTVrN013T1Y0Z2xyUWZjei9jaUc0Q0VaMDkwTWtqdUExa09hQk9pWk1QQ2hTdTVIREFNdUkwR1dMRzFNdW8zRmtTSmVpRGZsT09CbnZScW5lck5pbytuWS80NXcwUC9uY3U4ZkhDMDhkaWxIZ1M4MjBXVEhJbjM3SjJYaHpaT3JGcklNMDArdkR4WUdnLy9vVFkrc1hEZDFSdC9EYVNkTVdWU1lwMUdpZUt4YStXSDFIb2Z5UCtMalJldEF4emtYTE9vK1ZGZ1FvcjlmN3lydExRSDVBQWdBQVwiO1xudmFyIGhhc2gkNiA9IFwiMGRjYTkyZDFcIjtcbnZhciB3YXNtSnNvbiQ2ID0ge1xuXHRuYW1lOiBuYW1lJDYsXG5cdGRhdGE6IGRhdGEkNixcblx0aGFzaDogaGFzaCQ2XG59O1xuXG5jb25zdCBtdXRleCQ0ID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJDQgPSBudWxsO1xuY29uc3Qgc2VlZEJ1ZmZlciQxID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuZnVuY3Rpb24gdmFsaWRhdGVTZWVkJDEoc2VlZCkge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihzZWVkKSB8fCBzZWVkIDwgMCB8fCBzZWVkID4gMHhGRkZGRkZGRikge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdTZWVkIG11c3QgYmUgZ2l2ZW4gYXMgdHdvIHZhbGlkIDMyLWJpdCBsb25nIHVuc2lnbmVkIGludGVnZXJzIChsbyArIGhpZ2gpLicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHdyaXRlU2VlZCQxKGFyciwgbG93LCBoaWdoKSB7XG4gICAgLy8gd3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXRcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgRGF0YVZpZXcoYXJyKTtcbiAgICBidWZmZXIuc2V0VWludDMyKDAsIGxvdywgdHJ1ZSk7XG4gICAgYnVmZmVyLnNldFVpbnQzMig0LCBoaWdoLCB0cnVlKTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB4eEhhc2gzIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gc2VlZExvdyBMb3dlciAzMiBiaXRzIG9mIHRoZSBudW1iZXIgdXNlZCB0b1xuICogIGluaXRpYWxpemUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gKGRlZmF1bHRzIHRvIDApXG4gKiBAcGFyYW0gc2VlZEhpZ2ggSGlnaGVyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24geHhoYXNoMyhkYXRhLCBzZWVkTG93ID0gMCwgc2VlZEhpZ2ggPSAwKSB7XG4gICAgaWYgKHZhbGlkYXRlU2VlZCQxKHNlZWRMb3cpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQkMShzZWVkTG93KSk7XG4gICAgfVxuICAgIGlmICh2YWxpZGF0ZVNlZWQkMShzZWVkSGlnaCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZCQxKHNlZWRIaWdoKSk7XG4gICAgfVxuICAgIGlmICh3YXNtQ2FjaGUkNCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JDQsIHdhc21Kc29uJDYsIDgpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJDQgPSB3YXNtO1xuICAgICAgICAgICAgd3JpdGVTZWVkJDEoc2VlZEJ1ZmZlciQxLCBzZWVkTG93LCBzZWVkSGlnaCk7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkNC53cml0ZU1lbW9yeShuZXcgVWludDhBcnJheShzZWVkQnVmZmVyJDEpKTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkNC5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3cml0ZVNlZWQkMShzZWVkQnVmZmVyJDEsIHNlZWRMb3csIHNlZWRIaWdoKTtcbiAgICAgICAgd2FzbUNhY2hlJDQud3JpdGVNZW1vcnkobmV3IFVpbnQ4QXJyYXkoc2VlZEJ1ZmZlciQxKSk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkNC5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHh4SGFzaDMgaGFzaCBpbnN0YW5jZVxuICogQHBhcmFtIHNlZWRMb3cgTG93ZXIgMzIgYml0cyBvZiB0aGUgbnVtYmVyIHVzZWQgdG9cbiAqICBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICogQHBhcmFtIHNlZWRIaWdoIEhpZ2hlciAzMiBiaXRzIG9mIHRoZSBudW1iZXIgdXNlZCB0b1xuICogIGluaXRpYWxpemUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gKGRlZmF1bHRzIHRvIDApXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVhYSGFzaDMoc2VlZExvdyA9IDAsIHNlZWRIaWdoID0gMCkge1xuICAgIGlmICh2YWxpZGF0ZVNlZWQkMShzZWVkTG93KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVTZWVkJDEoc2VlZExvdykpO1xuICAgIH1cbiAgICBpZiAodmFsaWRhdGVTZWVkJDEoc2VlZEhpZ2gpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQkMShzZWVkSGlnaCkpO1xuICAgIH1cbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiQ2LCA4KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlQnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgICAgICB3cml0ZVNlZWQkMShpbnN0YW5jZUJ1ZmZlciwgc2VlZExvdywgc2VlZEhpZ2gpO1xuICAgICAgICB3YXNtLndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KGluc3RhbmNlQnVmZmVyKSk7XG4gICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2FzbS53cml0ZU1lbW9yeShuZXcgVWludDhBcnJheShpbnN0YW5jZUJ1ZmZlcikpO1xuICAgICAgICAgICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDUxMixcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDgsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJDUgPSBcInh4aGFzaDEyOFwiO1xudmFyIGRhdGEkNSA9IFwiQUdGemJRRUFBQUFCS3dkZ0FBRi9ZQVIvZjM5L0FHQUhmMzkvZjM5L2Z3QmdBMzkvZmdGK1lBUi9mMzkrQUdBQUFHQUJmd0FERFF3QUFRSURCQVFFQlFZRkFBVUZCQUVCQWdJR0RnSi9BVUhBamdVTGZ3QkJ3QWtMQjNBSUJtMWxiVzl5ZVFJQURraGhjMmhmUjJWMFFuVm1abVZ5QUFBSlNHRnphRjlKYm1sMEFBY0xTR0Z6YUY5VmNHUmhkR1VBQ0FwSVlYTm9YMFpwYm1Gc0FBa05TR0Z6YUY5SFpYUlRkR0YwWlFBS0RraGhjMmhmUTJGc1kzVnNZWFJsQUFzS1UxUkJWRVZmVTBsYVJRTUJDdXhOREFVQVFZQUtDKzhEQVJCK0FrQWdBMFVOQUNBQlFUaHFJUUVnQWtFNGFpRUNJQUFwQXpBaEJDQUFLUU00SVFVZ0FDa0RJQ0VHSUFBcEF5Z2hCeUFBS1FNUUlRZ2dBQ2tER0NFSklBQXBBd0FoQ2lBQUtRTUlJUXNEUUNBSElBRkJhR29wQXdBaURId2dBa0Z3YWlrREFDQUJRWEJxS1FNQUlnMkZJZ2RDSUlnZ0IwTC8vLy8vRDROK2ZDRUhJQWtnQVVGWWFpa0RBQ0lPZkNBQ1FXQnFLUU1BSUFGQllHb3BBd0FpRDRVaUNVSWdpQ0FKUXYvLy8vOFBnMzU4SVFrZ0N5QUJRVWhxS1FNQUloQjhJQUpCVUdvcEF3QWdBVUZRYWlrREFDSVJoU0lMUWlDSUlBdEMvLy8vL3crRGZud2hDeUFDUVhocUtRTUFJQUZCZUdvcEF3QWlFb1VpRTBJZ2lDQVRRdi8vLy84UGczNGdCSHdnQVNrREFDSVRmQ0VFSUFKQmFHb3BBd0FnRElVaURFSWdpQ0FNUXYvLy8vOFBnMzRnQm53Z0RYd2hCaUFDUVZocUtRTUFJQTZGSWd4Q0lJZ2dERUwvLy8vL0Q0TitJQWg4SUE5OElRZ2dBa0ZJYWlrREFDQVFoU0lNUWlDSUlBeEMvLy8vL3crRGZpQUtmQ0FSZkNFS0lBVWdFbndnQWlrREFDQVRoU0lGUWlDSUlBVkMvLy8vL3crRGZud2hCU0FCUWNBQWFpRUJJQUpCQ0dvaEFpQURRWDlxSWdNTkFBc2dBQ0FKTndNWUlBQWdDamNEQUNBQUlBczNBd2dnQUNBSE53TW9JQUFnQ0RjREVDQUFJQVUzQXpnZ0FDQUdOd01nSUFBZ0JEY0RNQXNMM2dJQ0FYOEJmZ0pBSUFJZ0FTZ0NBQ0lIYXlJQ0lBUkxEUUFnQUNBRElBVWdCMEVEZEdvZ0FoQUJJQUFnQlNBR2FpSUhLUU1BSUFBcEF3QWlDRUl2aUlVZ0NJVkNzZlBkOFFsK053TUFJQUFnQnlrRENDQUFLUU1JSWdoQ0w0aUZJQWlGUXJIejNmRUpmamNEQ0NBQUlBY3BBeEFnQUNrREVDSUlRaStJaFNBSWhVS3g4OTN4Q1g0M0F4QWdBQ0FIS1FNWUlBQXBBeGdpQ0VJdmlJVWdDSVZDc2ZQZDhRbCtOd01ZSUFBZ0J5a0RJQ0FBS1FNZ0lnaENMNGlGSUFpRlFySHozZkVKZmpjRElDQUFJQWNwQXlnZ0FDa0RLQ0lJUWkrSWhTQUloVUt4ODkzeENYNDNBeWdnQUNBSEtRTXdJQUFwQXpBaUNFSXZpSVVnQ0lWQ3NmUGQ4UWwrTndNd0lBQWdCeWtET0NBQUtRTTRJZ2hDTDRpRklBaUZRckh6M2ZFSmZqY0RPQ0FBSUFNZ0FrRUdkR29nQlNBRUlBSnJJZ2NRQVNBQklBYzJBZ0FQQ3lBQUlBTWdCU0FIUVFOMGFpQUVFQUVnQVNBSElBUnFOZ0lBQyswREFRVitJQUVwQXpnZ0FDa0RPSVVpQTBMLy8vLy9ENE1pQkNBQktRTXdJQUFwQXpDRklnVkNJSWdpQm40aUIwTC8vLy8vRDRNZ0EwSWdpQ0lESUFWQy8vLy8vdytESWdWK2ZDQUVJQVYrSWdSQ0lJaDhJZ1ZDSUlZZ0JFTC8vLy8vRDRPRUlBZENJSWdnQXlBR2Zud2dCVUlnaUh5RklBRXBBeWdnQUNrREtJVWlBMEwvLy8vL0Q0TWlCQ0FCS1FNZ0lBQXBBeUNGSWdWQ0lJZ2lCbjRpQjBMLy8vLy9ENE1nQTBJZ2lDSURJQVZDLy8vLy93K0RJZ1YrZkNBRUlBVitJZ1JDSUloOElnVkNJSVlnQkVMLy8vLy9ENE9FSUFkQ0lJZ2dBeUFHZm53Z0JVSWdpSHlGSUFFcEF4Z2dBQ2tER0lVaUEwTC8vLy8vRDRNaUJDQUJLUU1RSUFBcEF4Q0ZJZ1ZDSUlnaUJuNGlCMEwvLy8vL0Q0TWdBMElnaUNJRElBVkMvLy8vL3crRElnVitmQ0FFSUFWK0lnUkNJSWg4SWdWQ0lJWWdCRUwvLy8vL0Q0T0VJQWRDSUlnZ0F5QUdmbndnQlVJZ2lIeUZJQUVwQXdnZ0FDa0RDSVVpQTBMLy8vLy9ENE1pQkNBQktRTUFJQUFwQXdDRklnVkNJSWdpQm40aUIwTC8vLy8vRDRNZ0EwSWdpQ0lESUFWQy8vLy8vdytESWdWK2ZDQUVJQVYrSWdSQ0lJaDhJZ1ZDSUlZZ0JFTC8vLy8vRDRPRUlBZENJSWdnQXlBR2Zud2dCVUlnaUh5RklBSjhmSHg4SWdKQ0pZZ2dBb1ZDK2ZQZDhabnltYXNXZmlJQ1FpQ0lJQUtGQzdvSUFnVitBMzhDUUNBQlFRbEpEUUFnQUNBQlFmaUxBV29wQXdBaUJDQUNLUU00SUFJcEF6Q0ZJQU44aFNJRlF2Ly8vLzhQZzBMM2xLK3ZDSDRnQlVLQWdJQ0FjSU44UVFBcEE0Q01BU0FDS1FNb0lBSXBBeUNGSUFOOWhTQUVoU0lEUWlDSUlnUkNzZlBkOFFsK2ZDQUVRb2VWcjY4SWZpSUVRaUNJZkNBRVF2Ly8vLzhQZ3lBRFF2Ly8vLzhQZ3lJRFFySHozZkVKZm53Z0EwS0hsYSt2Q0g0aUJFSWdpSHdpQlVJZ2lId2lBMEk0aGlBRFFvRCtBNE5DS0lhRUlBTkNnSUQ4QjROQ0dJWWdBMEtBZ0lENEQ0TkNDSWFFaENBRFFnaUlRb0NBZ1BnUGd5QURRaGlJUW9DQS9BZURoQ0FEUWlpSVFvRCtBNE1nQTBJNGlJU0VoQ0FFUXYvLy8vOFBneUFCUVg5cXJVSTJob1FnQlVJZ2hueUZJZ1JDSUlnaUJVTFAxdE8rQW40aUJrTC8vLy8vRDRNZ0JFTC8vLy8vRDRNaUJFSzkzTXFWREg1OElBUkN6OWJUdmdKK0lnUkNJSWg4SWdkQ0lJWWlDRUlsaUNBSUlBUkMvLy8vL3crRGhJVkMrZlBkOFpueW1hc1dmaUlFUWlDSUlBU0ZOd01BSUFBZ0JVSzkzTXFWREg0Z0EwTFAxdE8rMHNlcjJVSitmQ0FHUWlDSWZDQUhRaUNJZkNJRFFpV0lJQU9GUXZuejNmR1o4cG1yRm40aUEwSWdpQ0FEaFRjRENBOExBa0FnQVVFRVNRMEFJQUFnQWlrREdDQUNLUU1RaFNBRHB5SUNRUmgwSUFKQmdQNERjVUVJZEhJZ0FrRUlka0dBL2dOeElBSkJHSFp5Y3ExQ0lJWWdBNFY4SUFGQi9Jc0JhalVDQUVJZ2hrRUFOUUtBakFHRWhTSURRaUNJSWdRZ0FVRUNkRUdIbGErdmVHcXRJZ1YrSWdaQ0lJZ2dCRUt4ODkzeENYNThJQVpDLy8vLy93K0RJQU5DLy8vLy93K0RJZ05Dc2ZQZDhRbCtmQ0FESUFWK0lnTkNJSWg4SWdSQ0lJaDhJQVJDSUlZZ0EwTC8vLy8vRDRPRUlnUkNBWVo4SWdOQ0pZZ2dBNFZDK2ZQZDhabnltYXNXZmlJRlFpQ0lJQVdGTndNSUlBQWdBMElEaUNBRWhTSURRaU9JSUFPRlFxVys0L1RSaklmWm4zOStJZ05DSElnZ0E0VTNBd0FQQ3dKQUlBRkZEUUFnQUNBQ0tBSUVJQUlvQWdCenJTQURmQ0lFUWlHSVFRQXRBSUNNQVVFUWRDQUJRUWgwY2lJSklBRkJBWFpCZ0l3QmFpMEFBRUVZZEhJaUNpQUJRZitMQVdvdEFBQWlBWElpQzYyRklBU0ZRcy9XMDc3U3g2dlpRbjRpQkVJZGlDQUVoVUw1ODkzeG1mYVpxeForSWdSQ0lJZ2dCSVUzQXdBZ0FDQUNLQUlNSUFJb0FnaHpyU0FEZlNJRFFpR0lJQUZCR0hRZ0MwR0EvZ054UVFoMGNpQUpRUWgyUVlEK0EzRWdDa0VZZG5KeVFRMTNyWVVnQTRWQ3o5YlR2dExIcTlsQ2ZpSURRaDJJSUFPRlF2bnozZkdaOXBtckZuNGlBMElnaUNBRGhUY0RDQThMSUFBZ0Fpa0RVQ0FDS1FOWWhTQURoU0lFUWlHSUlBU0ZRcy9XMDc3U3g2dlpRbjRpQkVJZGlDQUVoVUw1ODkzeG1mYVpxeForSWdSQ0lJZ2dCSVUzQXdnZ0FDQUNLUU5BSUFJcEEwaUZJQU9GSWdOQ0lZZ2dBNFZDejliVHZ0TEhxOWxDZmlJRFFoMklJQU9GUXZuejNmR1o5cG1yRm40aUEwSWdpQ0FEaFRjREFBdkRDZ0VLZmlBQnJTSUVRb2VWcjYrWXR0NmJubjkrSVFVQ1FBSkFJQUZCSVU4TkFFSUFJUVlNQVF0Q0FDRUhBa0FnQVVIQkFFa05BRUlBSVFjQ1FDQUJRZUVBU1EwQUlBSkIrQUJxS1FNQUlBTjlJQUZCeUlzQmFpa0RBQ0lJaFNJSFF2Ly8vLzhQZ3lJSklBSXBBM0FnQTN3Z0FVSEFpd0ZxS1FNQUlncUZJZ3RDSUlnaURINGlEVUlnaUNBSFFpQ0lJZ2NnREg1OElBMUMvLy8vL3crRElBY2dDMEwvLy8vL0Q0TWlDMzU4SUFrZ0MzNGlCMElnaUh3aUNVSWdpSHhCQUNrRHVJd0JJZ3RCQUNrRHNJd0JJZ3g4aFNBSlFpQ0dJQWRDLy8vLy93K0RoSVVoQnlBQ1FlZ0FhaWtEQUNBRGZTQUxoU0lKUXYvLy8vOFBneUlMSUFJcEEyQWdBM3dnRElVaURFSWdpQ0lOZmlJR1F2Ly8vLzhQZ3lBSlFpQ0lJZ2tnREVMLy8vLy9ENE1pREg1OElBc2dESDRpQzBJZ2lId2lERUlnaGlBTFF2Ly8vLzhQZzRRZ0JrSWdpQ0FKSUExK2ZDQU1RaUNJZklVZ0JYd2dDQ0FLZklVaEJRc2dBa0hZQUdvcEF3QWdBMzBnQVVIWWl3RnFLUU1BSWdpRklnbEMvLy8vL3crRElnb2dBaWtEVUNBRGZDQUJRZENMQVdvcEF3QWlDNFVpREVJZ2lDSU5maUlHUXYvLy8vOFBneUFKUWlDSUlna2dERUwvLy8vL0Q0TWlESDU4SUFvZ0RINGlDa0lnaUh3aURFSWdoaUFLUXYvLy8vOFBnNFFnQmtJZ2lDQUpJQTErZkNBTVFpQ0lmSVVnQjN4QkFDa0RxSXdCSWdsQkFDa0RvSXdCSWdwOGhTRUhJQUpCeUFCcUtRTUFJQU45SUFtRklnbEMvLy8vL3crRElnd2dBaWtEUUNBRGZDQUtoU0lLUWlDSUlnMStJZ1pDLy8vLy93K0RJQWxDSUlnaUNTQUtRdi8vLy84UGd5SUtmbndnRENBS2ZpSUtRaUNJZkNJTVFpQ0dJQXBDLy8vLy93K0RoQ0FHUWlDSUlBa2dEWDU4SUF4Q0lJaDhoU0FGZkNBSUlBdDhoU0VGQ3lBQ1FUaHFLUU1BSUFOOUlBRkI2SXNCYWlrREFDSUloU0lKUXYvLy8vOFBneUlLSUFJcEF6QWdBM3dnQVVIZ2l3RnFLUU1BSWd1RklneENJSWdpRFg0aUJrTC8vLy8vRDRNZ0NVSWdpQ0lKSUF4Qy8vLy8vdytESWd4K2ZDQUtJQXgrSWdwQ0lJaDhJZ3hDSUlZZ0NrTC8vLy8vRDRPRUlBWkNJSWdnQ1NBTmZud2dERUlnaUh5RklBZDhRUUFwQTVpTUFTSUhRUUFwQTVDTUFTSUpmSVVoQmlBQ1FTaHFLUU1BSUFOOUlBZUZJZ2RDLy8vLy93K0RJZ29nQWlrRElDQURmQ0FKaFNJSlFpQ0lJZ3grSWcxQy8vLy8vdytESUFkQ0lJZ2lCeUFKUXYvLy8vOFBneUlKZm53Z0NpQUpmaUlKUWlDSWZDSUtRaUNHSUFsQy8vLy8vdytEaENBTlFpQ0lJQWNnREg1OElBcENJSWg4aFNBRmZDQUlJQXQ4aFNFRkN5QUFJQUpCR0dvcEF3QWdBMzBnQVVINGl3RnFLUU1BSWdlRklnaEMvLy8vL3crRElna2dBaWtERUNBRGZDQUJRZkNMQVdvcEF3QWlDb1VpQzBJZ2lDSU1maUlOUXYvLy8vOFBneUFJUWlDSUlnZ2dDMEwvLy8vL0Q0TWlDMzU4SUFrZ0MzNGlDVUlnaUh3aUMwSWdoaUFKUXYvLy8vOFBnNFFnRFVJZ2lDQUlJQXgrZkNBTFFpQ0lmSVVnQm54QkFDa0RpSXdCSWdoQkFDa0RnSXdCSWdsOGhTSUxJQUpCQ0dvcEF3QWdBMzBnQ0lVaUNFTC8vLy8vRDRNaURDQUNLUU1BSUFOOElBbUZJZ2xDSUlnaURYNGlCa0wvLy8vL0Q0TWdDRUlnaUNJSUlBbEMvLy8vL3crRElnbCtmQ0FNSUFsK0lnbENJSWg4SWd4Q0lJWWdDVUwvLy8vL0Q0T0VJQVpDSUlnZ0NDQU5mbndnREVJZ2lIeUZJQVY4SUFjZ0NueUZJZ1Y4SWdkQ0pZZ2dCNFZDK2ZQZDhabnltYXNXZmlJSFFpQ0lJQWVGTndNQUlBQkNBQ0FGUW9lVnI2K1l0dDZibm45K0lBUWdBMzFDejliVHZ0TEhxOWxDZm53Z0MwTGozTXFWL003eTlZVi9mbndpQTBJbGlDQURoVUw1ODkzeG1mS1pxeForSWdOQ0lJZ2dBNFY5TndNSUM2RVBBd0YvRkg0Q2YwRUFJUVFnQWtINEFHb3BBd0FnQTMxQkFDa0QrSXdCSWdXRklnWkMvLy8vL3crRElnY2dBaWtEY0NBRGZFRUFLUVB3akFFaUNJVWlDVUlnaUNJS2ZpSUxRdi8vLy84UGd5QUdRaUNJSWdZZ0NVTC8vLy8vRDRNaUNYNThJQWNnQ1g0aUIwSWdpSHdpQ1VJZ2hpQUhRdi8vLy84UGc0UWdDMElnaUNBR0lBcCtmQ0FKUWlDSWZJVWdBa0hZQUdvcEF3QWdBMzFCQUNrRDJJd0JJZ2VGSWdaQy8vLy8vdytESWdrZ0Fpa0RVQ0FEZkVFQUtRUFFqQUVpQ29VaUMwSWdpQ0lNZmlJTlF2Ly8vLzhQZ3lBR1FpQ0lJZ1lnQzBMLy8vLy9ENE1pQzM1OElBa2dDMzRpQ1VJZ2lId2lDMElnaGlBSlF2Ly8vLzhQZzRRZ0RVSWdpQ0FHSUF4K2ZDQUxRaUNJZklVZ0FrRTRhaWtEQUNBRGZVRUFLUU80akFFaUNZVWlCa0wvLy8vL0Q0TWlDeUFDS1FNd0lBTjhRUUFwQTdDTUFTSU1oU0lOUWlDSUlnNStJZzlDLy8vLy93K0RJQVpDSUlnaUJpQU5Rdi8vLy84UGd5SU5mbndnQ3lBTmZpSUxRaUNJZkNJTlFpQ0dJQXRDLy8vLy93K0RoQ0FQUWlDSUlBWWdEbjU4SUExQ0lJaDhoU0FDUVJocUtRTUFJQU45UVFBcEE1aU1BU0lMaFNJR1F2Ly8vLzhQZ3lJTklBSXBBeEFnQTN4QkFDa0RrSXdCSWc2RklnOUNJSWdpRUg0aUVVTC8vLy8vRDRNZ0JrSWdpQ0lHSUE5Qy8vLy8vdytESWc5K2ZDQU5JQTkrSWcxQ0lJaDhJZzlDSUlZZ0RVTC8vLy8vRDRPRUlCRkNJSWdnQmlBUWZud2dEMElnaUh5RlFRQXBBNGlNQVNJTlFRQXBBNENNQVNJUGZJVjhRUUFwQTZpTUFTSVFRUUFwQTZDTUFTSVJmSVY4UVFBcEE4aU1BU0lTUVFBcEE4Q01BU0lUZklWOFFRQXBBK2lNQVNJVVFRQXBBK0NNQVNJVmZJVWlCa0lsaUNBR2hVTDU4OTN4bWZLWnF4WitJZ1pDSUlnZ0JvVWhCaUFDUWVnQWFpa0RBQ0FEZlNBVWhTSVVRdi8vLy84UGd5SVdJQUlwQTJBZ0Ezd2dGWVVpRlVJZ2lDSVhmaUlZUXYvLy8vOFBneUFVUWlDSUloUWdGVUwvLy8vL0Q0TWlGWDU4SUJZZ0ZYNGlGVUlnaUh3aUZrSWdoaUFWUXYvLy8vOFBnNFFnR0VJZ2lDQVVJQmQrZkNBV1FpQ0lmSVVnQWtISUFHb3BBd0FnQTMwZ0VvVWlFa0wvLy8vL0Q0TWlGQ0FDS1FOQUlBTjhJQk9GSWhOQ0lJZ2lGWDRpRmtMLy8vLy9ENE1nRWtJZ2lDSVNJQk5DLy8vLy93K0RJaE4rZkNBVUlCTitJaE5DSUloOEloUkNJSVlnRTBMLy8vLy9ENE9FSUJaQ0lJZ2dFaUFWZm53Z0ZFSWdpSHlGSUFKQktHb3BBd0FnQTMwZ0VJVWlFRUwvLy8vL0Q0TWlFaUFDS1FNZ0lBTjhJQkdGSWhGQ0lJZ2lFMzRpRkVMLy8vLy9ENE1nRUVJZ2lDSVFJQkZDLy8vLy93K0RJaEYrZkNBU0lCRitJaEZDSUloOEloSkNJSVlnRVVMLy8vLy9ENE9FSUJSQ0lJZ2dFQ0FUZm53Z0VrSWdpSHlGSUFKQkNHb3BBd0FnQTMwZ0RZVWlEVUwvLy8vL0Q0TWlFQ0FDS1FNQUlBTjhJQStGSWc5Q0lJZ2lFWDRpRWtMLy8vLy9ENE1nRFVJZ2lDSU5JQTlDLy8vLy93K0RJZzkrZkNBUUlBOStJZzlDSUloOEloQkNJSVlnRDBMLy8vLy9ENE9FSUJKQ0lJZ2dEU0FSZm53Z0VFSWdpSHlGSUFHdElnOUNoNVd2cjVpMjNwdWVmMzU4SUFzZ0RueUZmQ0FKSUF4OGhYd2dCeUFLZklWOElBVWdDSHlGSWdWQ0pZZ2dCWVZDK2ZQZDhabnltYXNXZmlJRlFpQ0lJQVdGSVFVQ1FDQUJRYUFCU0EwQUlBRkJCWFpCZkdvaEdRTkFJQUlnQkdvaUdrRWJhaWtEQUNBRGZTQUVRWmlOQVdvcEF3QWlCNFVpQ0VMLy8vLy9ENE1pQ1NBYVFSTnFLUU1BSUFOOElBUkJrSTBCYWlrREFDSUtoU0lMUWlDSUlneCtJZzFDLy8vLy93K0RJQWhDSUlnaUNDQUxRdi8vLy84UGd5SUxmbndnQ1NBTGZpSUpRaUNJZkNJTFFpQ0dJQWxDLy8vLy93K0RoQ0FOUWlDSUlBZ2dESDU4SUF0Q0lJaDhoU0FHZkNBRVFZaU5BV29wQXdBaUNDQUVRWUNOQVdvcEF3QWlDWHlGSVFZZ0drRUxhaWtEQUNBRGZTQUloU0lJUXYvLy8vOFBneUlMSUJwQkEyb3BBd0FnQTN3Z0NZVWlDVUlnaUNJTWZpSU5Rdi8vLy84UGd5QUlRaUNJSWdnZ0NVTC8vLy8vRDRNaUNYNThJQXNnQ1g0aUNVSWdpSHdpQzBJZ2hpQUpRdi8vLy84UGc0UWdEVUlnaUNBSUlBeCtmQ0FMUWlDSWZJVWdCWHdnQnlBS2ZJVWhCU0FFUVNCcUlRUWdHVUYvYWlJWkRRQUxDeUFBSUFKQi93QnFLUU1BSUFOOElBRkI2SXNCYWlrREFDSUhoU0lJUXYvLy8vOFBneUlKSUFJcEEzY2dBMzBnQVVIZ2l3RnFLUU1BSWdxRklndENJSWdpREg0aURVTC8vLy8vRDRNZ0NFSWdpQ0lJSUF0Qy8vLy8vdytESWd0K2ZDQUpJQXQrSWdsQ0lJaDhJZ3RDSUlZZ0NVTC8vLy8vRDRPRUlBMUNJSWdnQ0NBTWZud2dDMElnaUh5RklBWjhJQUZCK0lzQmFpa0RBQ0lHSUFGQjhJc0JhaWtEQUNJSWZJVWlDU0FDUWU4QWFpa0RBQ0FEZkNBR2hTSUdRdi8vLy84UGd5SUxJQUlwQTJjZ0EzMGdDSVVpQ0VJZ2lDSU1maUlOUXYvLy8vOFBneUFHUWlDSUlnWWdDRUwvLy8vL0Q0TWlDSDU4SUFzZ0NINGlDRUlnaUh3aUMwSWdoaUFJUXYvLy8vOFBnNFFnRFVJZ2lDQUdJQXgrZkNBTFFpQ0lmSVVnQlh3Z0J5QUtmSVVpQm53aUJVSWxpQ0FGaFVMNTg5M3htZktacXhaK0lnVkNJSWdnQllVM0F3QWdBRUlBSUFaQ2g1V3ZyNWkyM3B1ZWYzNGdEeUFEZlVMUDF0Tyswc2VyMlVKK2ZDQUpRdVBjeXBYOHp2TDFoWDkrZkNJRFFpV0lJQU9GUXZuejNmR1o4cG1yRm40aUEwSWdpQ0FEaFgwM0F3Z0wzd1VDQVg0QmZ3SkFBa0JCQUNrRGdBb2lBRkJGRFFCQmdBZ2hBVUlBSVFBTUFRc0NRRUVBS1FPZ2pnRWdBRklOQUVFQUlRRU1BUXRCQUNFQlFRQkNyNi92MTd6M2txRCtBQ0FBZlRjRCtJc0JRUUFnQUVMRmx1djUyTktGZ2loOE53UHdpd0ZCQUVLUDhlT05yWS8wbUU0Z0FIMDNBK2lMQVVFQUlBQkNxNno0eGRYdjBkQjhmRGNENElzQlFRQkMwNjNVc3BLRnRiU2VmeUFBZlRjRDJJc0JRUUFnQUVLWG12U085WmE4N2NrQWZEY0QwSXNCUVFCQ3hZT0MvYS8veExGcklBQjlOd1BJaXdGQkFDQUFRdXFMczUzSTV2VDFRM3czQThDTEFVRUFRc2kvK3N1Y205NjU1QUFnQUgwM0E3aUxBVUVBSUFCQ2lxT0IzOVNaN2F3eGZEY0RzSXNCUVFCQytibnZ2Zno0d3FjZElBQjlOd09vaXdGQkFDQUFRcWoxMi91em5LZWFQM3czQTZDTEFVRUFRcml5dkxlVTFiZldXQ0FBZlRjRG1Jc0JRUUFnQUVMeHlLRzZxYlREL000QWZEY0RrSXNCUVFCQ2lLR1gyN2pqbEplamZ5QUFmVGNEaUlzQlFRQWdBRUs4ME1qYW0vS3dnRXQ4TndPQWl3RkJBRUxnNjhDMG50Q09rOHdBSUFCOU53UDRpZ0ZCQUNBQVFyaVJtS0wzL3BDU2puOThOd1B3aWdGQkFFS0N0Y0h1eC9tL3VTRWdBSDAzQStpS0FVRUFJQUJDeS9PWjk4U1o4UEw0QUh3M0ErQ0tBVUVBUXZLQWthWDY5dXl6SHlBQWZUY0QySW9CUVFBZ0FFTGVxYmZMdnBEa3kxdDhOd1BRaWdGQkFFTDhnb1RrOHI3STFod2dBSDAzQThpS0FVRUFJQUJDdVAyenk3T0U2YVcrZjN3M0E4Q0tBUXRCQUVJQU53T1FqZ0ZCQUVJQU53T0lqZ0ZCQUVJQU53T0FqZ0ZCQUVLOTNNcVZERGNEZ0lvQlFRQkNoNVd2cjVpMjNwdWVmemNEaUlvQlFRQkN6OWJUdnRMSHE5bENOd09RaWdGQkFFTDU4OTN4bWZhWnF4WTNBNWlLQVVFQVF1UGN5cFg4enZMMWhYODNBNkNLQVVFQVF2ZVVyNjhJTndPb2lnRkJBRUxGejlteThlVzY2aWMzQTdDS0FVRUFRckh6M2ZFSk53TzRpZ0ZCQUNBQU53T2dqZ0ZCQUNBQk5nS3dqZ0ZCQUVLUWdJQ0FnQkEzQTVpT0FRdUNDZ0VJZjBFQVFRQXBBNUNPQVNBQXJYdzNBNUNPQVFKQUFrQUNRRUVBS0FLQWpnRWlBU0FBYWlJQ1FZQUNTdzBBSUFGQmdJd0JhaUVEUVlBS0lRUUNRQ0FBUVFoUERRQWdBQ0VCREFJTEFrQUNRQ0FBUVhocUlnVkJBM1pCQVdwQkIzRWlCZzBBUVlBS0lRUWdBQ0VCREFFTElBWkJBM1FoQVVHQUNpRUVBMEFnQXlBRUtRTUFOd01BSUFOQkNHb2hBeUFFUVFocUlRUWdCa0YvYWlJR0RRQUxJQUFnQVdzaEFRc2dCVUU0U1EwQkEwQWdBeUFFS1FNQU53TUFJQU5CQ0dvZ0JFRUlhaWtEQURjREFDQURRUkJxSUFSQkVHb3BBd0EzQXdBZ0EwRVlhaUFFUVJocUtRTUFOd01BSUFOQklHb2dCRUVnYWlrREFEY0RBQ0FEUVNocUlBUkJLR29wQXdBM0F3QWdBMEV3YWlBRVFUQnFLUU1BTndNQUlBTkJPR29nQkVFNGFpa0RBRGNEQUNBRFFjQUFhaUVESUFSQndBQnFJUVFnQVVGQWFpSUJRUWRMRFFBTUFnc0xRWUFLSVFRZ0FFR0FDbW9oQlVFQUtBS3dqZ0VpQTBIQWlnRWdBeHNoQmdKQUlBRkZEUUFnQVVHQWpBRnFJUU5CZ0FvaEJBSkFBa0JCZ0FJZ0FXc2lCMEVJVHcwQUlBY2hBQXdCQ3dKQUFrQkIrQUVnQVdzaUNFRURka0VCYWtFSGNTSUNEUUJCZ0FvaEJDQUhJUUFNQVF0QmdBb2hCQ0FDUVFOMElnQWhBZ05BSUFNZ0JDa0RBRGNEQUNBRFFRaHFJUU1nQkVFSWFpRUVJQUpCZUdvaUFnMEFDMEdBQWlBQklBQnFheUVBQ3lBSVFUaEpEUUFEUUNBRElBUXBBd0EzQXdBZ0EwRUlhaUFFUVFocUtRTUFOd01BSUFOQkVHb2dCRUVRYWlrREFEY0RBQ0FEUVJocUlBUkJHR29wQXdBM0F3QWdBMEVnYWlBRVFTQnFLUU1BTndNQUlBTkJLR29nQkVFb2Fpa0RBRGNEQUNBRFFUQnFJQVJCTUdvcEF3QTNBd0FnQTBFNGFpQUVRVGhxS1FNQU53TUFJQU5Cd0FCcUlRTWdCRUhBQUdvaEJDQUFRVUJxSWdCQkIwc05BQXNMQWtBZ0FFVU5BQUpBQWtBZ0FFRUhjU0lDRFFBZ0FDRUJEQUVMSUFCQmVIRWhBUU5BSUFNZ0JDMEFBRG9BQUNBRFFRRnFJUU1nQkVFQmFpRUVJQUpCZjJvaUFnMEFDd3NnQUVFSVNRMEFBMEFnQXlBRUtRQUFOd0FBSUFOQkNHb2hBeUFFUVFocUlRUWdBVUY0YWlJQkRRQUxDMEdBaWdGQmlJNEJRUUFvQXBpT0FVR0FqQUZCQkNBR1FRQW9BcHlPQVJBQ1FRQkJBRFlDZ0k0QklBZEJnQXBxSVFRTEFrQWdCRUdBQW1vZ0JVOE5BQ0FGUVlCK2FpRURBMEJCZ0lvQlFZaU9BVUVBS0FLWWpnRWdCRUVFSUFaQkFDZ0NuSTRCRUFJZ0JFR0FBbW9pQkNBRFNRMEFDMEVBSUFSQlFHb3BBd0EzQThDTkFVRUFJQVJCU0dvcEF3QTNBOGlOQVVFQUlBUkJVR29wQXdBM0E5Q05BVUVBSUFSQldHb3BBd0EzQTlpTkFVRUFJQVJCWUdvcEF3QTNBK0NOQVVFQUlBUkJhR29wQXdBM0EraU5BVUVBSUFSQmNHb3BBd0EzQS9DTkFVRUFJQVJCZUdvcEF3QTNBL2lOQVF0QmdJd0JJUU1DUUFKQUlBVWdCR3NpQWtFSVR3MEFJQUloQmd3QkMwR0FqQUVoQXlBQ0lRWURRQ0FESUFRcEF3QTNBd0FnQTBFSWFpRURJQVJCQ0dvaEJDQUdRWGhxSWdaQkIwc05BQXNMSUFaRkRRRURRQ0FESUFRdEFBQTZBQUFnQTBFQmFpRURJQVJCQVdvaEJDQUdRWDlxSWdZTkFBd0NDd3NnQVVVTkFBSkFBa0FnQVVFSGNTSUdEUUFnQVNFQ0RBRUxJQUZCZUhFaEFnTkFJQU1nQkMwQUFEb0FBQ0FEUVFGcUlRTWdCRUVCYWlFRUlBWkJmMm9pQmcwQUN3c0NRQ0FCUVFoSkRRQURRQ0FESUFRcEFBQTNBQUFnQTBFSWFpRURJQVJCQ0dvaEJDQUNRWGhxSWdJTkFBc0xRUUFvQW9DT0FTQUFhaUVDQzBFQUlBSTJBb0NPQVF1UUVRWUVmd0orQVg4RGZnVi9BbjRqQUNJQUlRRWdBRUdBQVd0QlFIRWlBaVFBUVFBb0FyQ09BU0lBUWNDS0FTQUFHeUVEQWtBQ1FFRUFLUU9RamdFaUJFTHhBVlFOQUNBQ1FRQXBBNENLQVRjREFDQUNRUUFwQTRpS0FUY0RDQ0FDUVFBcEE1Q0tBVGNERUNBQ1FRQXBBNWlLQVRjREdDQUNRUUFwQTZDS0FUY0RJQ0FDUVFBcEE2aUtBVGNES0NBQ1FRQXBBN0NLQVNJRU53TXdJQUpCQUNrRHVJb0JJZ1UzQXpnQ1FBSkFRUUFvQW9DT0FTSUdRY0FBU1EwQUlBSkJBQ2dDaUk0Qk5nSkFJQUlnQWtIQUFHcEJBQ2dDbUk0QlFZQ01BU0FHUVg5cVFRWjJJQU5CQUNnQ25JNEJJZ0FRQWlBQ0lBSXBBd2dnQmtIQWl3RnFLUU1BSWdSOElBTWdBR29pQUVFQmFpa0RBQ0FHUWNpTEFXb3BBd0FpQllVaUIwSWdpQ0FIUXYvLy8vOFBnMzU4TndNSUlBSWdBaWtER0NBR1FkQ0xBV29wQXdBaUIzd2dBRUVSYWlrREFDQUdRZGlMQVdvcEF3QWlDSVVpQ1VJZ2lDQUpRdi8vLy84UGczNThOd01ZSUFJZ0JTQUVJQUJCZVdvcEF3Q0ZJZ1JDSUlnZ0JFTC8vLy8vRDROK0lBSXBBd0I4ZkRjREFDQUNJQWdnQnlBQVFRbHFLUU1BaFNJRVFpQ0lJQVJDLy8vLy93K0RmaUFDS1FNUWZIdzNBeEFnQUVFWmFpa0RBQ0VFSUFJcEF5QWhCU0FDSUFJcEF5Z2dCa0hnaXdGcUtRTUFJZ2Q4SUFCQklXb3BBd0FnQmtIb2l3RnFLUU1BSWdpRklnbENJSWdnQ1VMLy8vLy9ENE4rZkRjREtDQUNJQWdnQlNBRUlBZUZJZ1JDSUlnZ0JFTC8vLy8vRDROK2ZIdzNBeUFnQWlBQ0tRTTRJQVpCOElzQmFpa0RBQ0lFZkNBQVFURnFLUU1BSUFaQitJc0JhaWtEQUNJRmhTSUhRaUNJSUFkQy8vLy8vdytEZm53M0F6Z2dBaUFGSUFRZ0FFRXBhaWtEQUlVaUJFSWdpQ0FFUXYvLy8vOFBnMzRnQWlrRE1IeDhOd013REFFTElBWkJ3STBCYWlFS1FjQUFJQVpySVFzZ0FrSEFBR29oQUFKQUFrQUNRQ0FHUVRoTkRRQWdDeUVNREFFTEFrQUNRRUU0SUFacklnMUJBM1pCQVdwQkIzRWlEQTBBSUFKQndBQnFJUUFnQ3lFTURBRUxJQUpCd0FCcUlRQWdERUVEZENJT0lRd0RRQ0FBSUFvcEF3QTNBd0FnQUVFSWFpRUFJQXBCQ0dvaENpQU1RWGhxSWd3TkFBdEJ3QUFnQmlBT2Ftc2hEQXNDUUNBTlFUaEpEUUFEUUNBQUlBb3BBd0EzQXdBZ0FFRUlhaUFLUVFocUtRTUFOd01BSUFCQkVHb2dDa0VRYWlrREFEY0RBQ0FBUVJocUlBcEJHR29wQXdBM0F3QWdBRUVnYWlBS1FTQnFLUU1BTndNQUlBQkJLR29nQ2tFb2Fpa0RBRGNEQUNBQVFUQnFJQXBCTUdvcEF3QTNBd0FnQUVFNGFpQUtRVGhxS1FNQU53TUFJQUJCd0FCcUlRQWdDa0hBQUdvaENpQU1RVUJxSWd4QkIwc05BQXNMSUF4RkRRRUxJQXhCZjJvaERnSkFJQXhCQjNFaURVVU5BQ0FNUVhoeElRd0RRQ0FBSUFvdEFBQTZBQUFnQUVFQmFpRUFJQXBCQVdvaENpQU5RWDlxSWcwTkFBc0xJQTVCQjBrTkFBTkFJQUFnQ2lrQUFEY0FBQ0FBUVFocUlRQWdDa0VJYWlFS0lBeEJlR29pREEwQUN3c2dBa0hBQUdvZ0Myb2hDa0dBakFFaEFBSkFBa0FDUUNBR1FRaEpEUUFDUUNBR1FUaHFRUU4yUVFGcVFRZHhJZ3dOQUF3Q0N5QU1RUU4wSVExQmdJd0JJUUFEUUNBS0lBQXBBd0EzQXdBZ0NrRUlhaUVLSUFCQkNHb2hBQ0FNUVg5cUlnd05BQXNnQmlBTmF5RUdDeUFHUlEwQkFrQWdCa0VIY1NJTkRRQWdCaUVNREFFTElBWkJlSEVoREFOQUlBb2dBQzBBQURvQUFDQUtRUUZxSVFvZ0FFRUJhaUVBSUExQmYyb2lEUTBBQ3dzZ0JrRUlTUTBBQTBBZ0NpQUFLUUFBTndBQUlBcEJDR29oQ2lBQVFRaHFJUUFnREVGNGFpSU1EUUFMQ3lBQ0lBSXBBd2dnQWlrRFFDSUhmQ0FEUVFBb0FweU9BV29pQUVFQmFpa0RBQ0FDS1FOSUlnaUZJZ2xDSUlnZ0NVTC8vLy8vRDROK2ZEY0RDQ0FDSUFJcEF4Z2dBaWtEVUNJSmZDQUFRUkZxS1FNQUlBSXBBMWdpRDRVaUVFSWdpQ0FRUXYvLy8vOFBnMzU4TndNWUlBSWdDQ0FISUFCQmVXb3BBd0NGSWdkQ0lJZ2dCMEwvLy8vL0Q0TitJQUlwQXdCOGZEY0RBQ0FDSUE4Z0NTQUFRUWxxS1FNQWhTSUhRaUNJSUFkQy8vLy8vdytEZmlBQ0tRTVFmSHczQXhBZ0FFRVphaWtEQUNFSElBSXBBeUFoQ0NBQ0lBSXBBeWdnQWlrRFlDSUpmQ0FBUVNGcUtRTUFJQUlwQTJnaUQ0VWlFRUlnaUNBUVF2Ly8vLzhQZzM1OE53TW9JQUlnRHlBSUlBY2dDWVVpQjBJZ2lDQUhRdi8vLy84UGczNThmRGNESUNBQ0lBVWdBaWtEY0NJSGZDQUFRVEZxS1FNQUlBSXBBM2dpQllVaUNFSWdpQ0FJUXYvLy8vOFBnMzU4TndNNElBSWdCU0FISUFCQktXb3BBd0NGSWdkQ0lJZ2dCMEwvLy8vL0Q0TitJQVI4ZkRjRE1Bc2dBaUFDSUFOQkMycEJBQ2tEa0k0QklnUkNoNVd2cjVpMjNwdWVmMzRRQXpjRFFDQUNJQUlnQTBFQUtBS2NqZ0ZxUVhWcUlBUkN6OWJUdnRMSHE5bENma0ovaFJBRE53TklEQUVMSUFTbklRQUNRRUVBS1FPZ2pnRWlCRkFOQUFKQUlBQkJFRXNOQUNBQ1FjQUFhaUFBUVlBSUlBUVFCQXdDQ3dKQUlBQkJnQUZMRFFBZ0FrSEFBR29nQUVHQUNDQUVFQVVNQWdzZ0FrSEFBR29nQUVHQUNDQUVFQVlNQVFzQ1FDQUFRUkJMRFFBZ0FrSEFBR29nQUNBRFFnQVFCQXdCQ3dKQUlBQkJnQUZMRFFBZ0FrSEFBR29nQUNBRFFnQVFCUXdCQ3lBQ1FjQUFhaUFBSUFOQ0FCQUdDMEVBSUFJcEEzQTNBN2dLUVFBZ0Fpa0RZRGNEcUFwQkFDQUNLUU5RTndPWUNrRUFJQUpCK0FCcUtRTUFOd1BBQ2tFQUlBSkI2QUJxS1FNQU53T3dDa0VBSUFKQjJBQnFLUU1BTndPZ0NrRUFJQUlwQTBnaUJFSTRoaUFFUW9EK0E0TkNLSWFFSUFSQ2dJRDhCNE5DR0lZZ0JFS0FnSUQ0RDROQ0NJYUVoQ0FFUWdpSVFvQ0FnUGdQZ3lBRVFoaUlRb0NBL0FlRGhDQUVRaWlJUW9EK0E0TWdCRUk0aUlTRWhDSUVOd09BQ2tFQUlBUTNBNUFLUVFBZ0Fpa0RRQ0lFUWppR0lBUkNnUDREZzBJb2hvUWdCRUtBZ1B3SGcwSVloaUFFUW9DQWdQZ1BnMElJaG9TRUlBUkNDSWhDZ0lDQStBK0RJQVJDR0loQ2dJRDhCNE9FSUFSQ0tJaENnUDREZ3lBRVFqaUloSVNFTndPSUNpQUJKQUFMQmdCQmdJb0JDd0lBQ3d2TUFRRUFRWUFJQzhRQnVQNXNPU09rUzc1OEFZRXM5eUd0SE43VWJlbURrSmZiY2tDa3BMZXpaeC9MZWVaT3pNRGxlSUphMEgzTS8zSWh1QWhHZFBkREpJN2dOWkRtZ1RvbVREd29VcnVSd3dETGlOQmxpeHRUTHFOeFpFaVhvZzM1VGpnWjcwYXAzcXpZcVBwMlArT2NORC81M0x2SHh3dFBIWXBSNEV2TnRGa3h5SjkreWRsNGMyVHF4YXlETk5Qcnc4V0JvUC82RTJQckZ3M2RVYmZ3MmtuVEZsVW1LZFJvbmlzV3ZsaDlSNkg4ai9pNDBYclFNYzVGeXpxUGxSWUVLSy9YKzhxN1MwQitRQUlBQUE9PVwiO1xudmFyIGhhc2gkNSA9IFwiMWY2ODJkOTFcIjtcbnZhciB3YXNtSnNvbiQ1ID0ge1xuXHRuYW1lOiBuYW1lJDUsXG5cdGRhdGE6IGRhdGEkNSxcblx0aGFzaDogaGFzaCQ1XG59O1xuXG5jb25zdCBtdXRleCQzID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJDMgPSBudWxsO1xuY29uc3Qgc2VlZEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbmZ1bmN0aW9uIHZhbGlkYXRlU2VlZChzZWVkKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNlZWQpIHx8IHNlZWQgPCAwIHx8IHNlZWQgPiAweEZGRkZGRkZGKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1NlZWQgbXVzdCBiZSBnaXZlbiBhcyB0d28gdmFsaWQgMzItYml0IGxvbmcgdW5zaWduZWQgaW50ZWdlcnMgKGxvICsgaGlnaCkuJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gd3JpdGVTZWVkKGFyciwgbG93LCBoaWdoKSB7XG4gICAgLy8gd3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXRcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgRGF0YVZpZXcoYXJyKTtcbiAgICBidWZmZXIuc2V0VWludDMyKDAsIGxvdywgdHJ1ZSk7XG4gICAgYnVmZmVyLnNldFVpbnQzMig0LCBoaWdoLCB0cnVlKTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB4eEhhc2gxMjggaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEBwYXJhbSBzZWVkTG93IExvd2VyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqIEBwYXJhbSBzZWVkSGlnaCBIaWdoZXIgMzIgYml0cyBvZiB0aGUgbnVtYmVyIHVzZWQgdG9cbiAqICBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiB4eGhhc2gxMjgoZGF0YSwgc2VlZExvdyA9IDAsIHNlZWRIaWdoID0gMCkge1xuICAgIGlmICh2YWxpZGF0ZVNlZWQoc2VlZExvdykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZChzZWVkTG93KSk7XG4gICAgfVxuICAgIGlmICh2YWxpZGF0ZVNlZWQoc2VlZEhpZ2gpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQoc2VlZEhpZ2gpKTtcbiAgICB9XG4gICAgaWYgKHdhc21DYWNoZSQzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkMywgd2FzbUpzb24kNSwgMTYpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJDMgPSB3YXNtO1xuICAgICAgICAgICAgd3JpdGVTZWVkKHNlZWRCdWZmZXIsIHNlZWRMb3csIHNlZWRIaWdoKTtcbiAgICAgICAgICAgIHdhc21DYWNoZSQzLndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KHNlZWRCdWZmZXIpKTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkMy5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3cml0ZVNlZWQoc2VlZEJ1ZmZlciwgc2VlZExvdywgc2VlZEhpZ2gpO1xuICAgICAgICB3YXNtQ2FjaGUkMy53cml0ZU1lbW9yeShuZXcgVWludDhBcnJheShzZWVkQnVmZmVyKSk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkMy5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHh4SGFzaDEyOCBoYXNoIGluc3RhbmNlXG4gKiBAcGFyYW0gc2VlZExvdyBMb3dlciAzMiBiaXRzIG9mIHRoZSBudW1iZXIgdXNlZCB0b1xuICogIGluaXRpYWxpemUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gKGRlZmF1bHRzIHRvIDApXG4gKiBAcGFyYW0gc2VlZEhpZ2ggSGlnaGVyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqL1xuZnVuY3Rpb24gY3JlYXRlWFhIYXNoMTI4KHNlZWRMb3cgPSAwLCBzZWVkSGlnaCA9IDApIHtcbiAgICBpZiAodmFsaWRhdGVTZWVkKHNlZWRMb3cpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQoc2VlZExvdykpO1xuICAgIH1cbiAgICBpZiAodmFsaWRhdGVTZWVkKHNlZWRIaWdoKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVTZWVkKHNlZWRIaWdoKSk7XG4gICAgfVxuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDUsIDE2KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlQnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgICAgICB3cml0ZVNlZWQoaW5zdGFuY2VCdWZmZXIsIHNlZWRMb3csIHNlZWRIaWdoKTtcbiAgICAgICAgd2FzbS53cml0ZU1lbW9yeShuZXcgVWludDhBcnJheShpbnN0YW5jZUJ1ZmZlcikpO1xuICAgICAgICB3YXNtLmluaXQoKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdhc20ud3JpdGVNZW1vcnkobmV3IFVpbnQ4QXJyYXkoaW5zdGFuY2VCdWZmZXIpKTtcbiAgICAgICAgICAgICAgICB3YXNtLmluaXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA1MTIsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiAxNixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkNCA9IFwicmlwZW1kMTYwXCI7XG52YXIgZGF0YSQ0ID0gXCJBR0Z6YlFFQUFBQUJFUVJnQUFGL1lBQUFZQUYvQUdBQ2YzOEFBd2tJQUFFQ0F3SUJBQUlGQkFFQkFnSUdEZ0ovQVVIZ2lRVUxmd0JCZ0FnTEI0TUJDUVp0WlcxdmNua0NBQTVJWVhOb1gwZGxkRUoxWm1abGNnQUFDVWhoYzJoZlNXNXBkQUFCRUhKcGNHVnRaREUyTUY5MWNHUmhkR1VBQXd0SVlYTm9YMVZ3WkdGMFpRQUVDa2hoYzJoZlJtbHVZV3dBQlExSVlYTm9YMGRsZEZOMFlYUmxBQVlPU0dGemFGOURZV3hqZFd4aGRHVUFCd3BUVkVGVVJWOVRTVnBGQXdFS3p6SUlCUUJCZ0FrTE9nQkJBRUh3dzh1ZWZEWUNtSWtCUVFCQy9ybnJ4ZW1PbFprUU53S1FpUUZCQUVLQnhwUzZsdkhxNW04M0FvaUpBVUVBUWdBM0FvQ0pBUXVQTEFFaGYwRUFJQUFvQWlRaUFTQUFLQUlBSWdJZ0FDZ0NFQ0lESUFJZ0FDZ0NMQ0lFSUFBb0Fnd2lCU0FBS0FJRUlnWWdBQ2dDUENJSElBSWdBQ2dDTUNJSUlBY2dBQ2dDQ0NJSlFRQW9Bb2lKQVNJS1FRQW9BcENKQVNJTFFRQW9BcFNKQVNJTVFYOXpja0VBS0FLTWlRRWlEWE5xSUFBb0FoUWlEbXBCNXBlS2hRVnFRUWgzUVFBb0FwaUpBU0lQYWlJUVFRcDNJaEZxSUFFZ0RVRUtkeUlTYWlBQ0lBdEJDbmNpRTJvZ0RDQUFLQUljSWhScUlBOGdBQ2dDT0NJVmFpQVFJQTBnRTBGL2MzSnpha0htbDRxRkJXcEJDWGNnREdvaUZpQVFJQkpCZjNOeWMycEI1cGVLaFFWcVFRbDNJQk5xSWhBZ0ZpQVJRWDl6Y25OcVFlYVhpb1VGYWtFTGR5QVNhaUlYSUJBZ0ZrRUtkeUlXUVg5emNuTnFRZWFYaW9VRmFrRU5keUFSYWlJWUlCY2dFRUVLZHlJWlFYOXpjbk5xUWVhWGlvVUZha0VQZHlBV2FpSWFRUXAzSWh0cUlBQW9BaGdpRUNBWVFRcDNJaHhxSUFBb0FqUWlFU0FYUVFwM0loZHFJQU1nR1dvZ0JDQVdhaUFhSUJnZ0YwRi9jM0p6YWtIbWw0cUZCV3BCRDNjZ0dXb2lGaUFhSUJ4QmYzTnljMnBCNXBlS2hRVnFRUVYzSUJkcUloY2dGaUFiUVg5emNuTnFRZWFYaW9VRmFrRUhkeUFjYWlJWUlCY2dGa0VLZHlJWlFYOXpjbk5xUWVhWGlvVUZha0VIZHlBYmFpSWFJQmdnRjBFS2R5SVhRWDl6Y25OcVFlYVhpb1VGYWtFSWR5QVphaUliUVFwM0loeHFJQVVnR2tFS2R5SWRhaUFBS0FJb0loWWdHRUVLZHlJWWFpQUdJQmRxSUFBb0FpQWlBQ0FaYWlBYklCb2dHRUYvYzNKemFrSG1sNHFGQldwQkMzY2dGMm9pRnlBYklCMUJmM055YzJwQjVwZUtoUVZxUVE1M0lCaHFJaGdnRnlBY1FYOXpjbk5xUWVhWGlvVUZha0VPZHlBZGFpSVpJQmdnRjBFS2R5SWFRWDl6Y25OcVFlYVhpb1VGYWtFTWR5QWNhaUliSUJrZ0dFRUtkeUljUVg5emNuTnFRZWFYaW9VRmFrRUdkeUFhYWlJZFFRcDNJaGRxSUFVZ0dVRUtkeUlZYWlBUUlCcHFJQnNnR0VGL2MzRnFJQjBnR0hGcVFhU2l0K0lGYWtFSmR5QWNhaUlhSUJkQmYzTnhhaUFFSUJ4cUlCMGdHMEVLZHlJWlFYOXpjV29nR2lBWmNXcEJwS0szNGdWcVFRMTNJQmhxSWhzZ0YzRnFRYVNpdCtJRmFrRVBkeUFaYWlJY0lCdEJDbmNpR0VGL2MzRnFJQlFnR1dvZ0d5QWFRUXAzSWhsQmYzTnhhaUFjSUJseGFrR2tvcmZpQldwQkIzY2dGMm9pR3lBWWNXcEJwS0szNGdWcVFReDNJQmxxSWgxQkNuY2lGMm9nRmlBY1FRcDNJaHBxSUJFZ0dXb2dHeUFhUVg5emNXb2dIU0FhY1dwQnBLSzM0Z1ZxUVFoM0lCaHFJaHdnRjBGL2MzRnFJQTRnR0dvZ0hTQWJRUXAzSWhoQmYzTnhhaUFjSUJoeGFrR2tvcmZpQldwQkNYY2dHbW9pR2lBWGNXcEJwS0szNGdWcVFRdDNJQmhxSWhzZ0drRUtkeUlaUVg5emNXb2dGU0FZYWlBYUlCeEJDbmNpR0VGL2MzRnFJQnNnR0hGcVFhU2l0K0lGYWtFSGR5QVhhaUljSUJseGFrR2tvcmZpQldwQkIzY2dHR29pSFVFS2R5SVhhaUFESUJ0QkNuY2lHbW9nQUNBWWFpQWNJQnBCZjNOeGFpQWRJQnB4YWtHa29yZmlCV3BCREhjZ0dXb2lHeUFYUVg5emNXb2dDQ0FaYWlBZElCeEJDbmNpR0VGL2MzRnFJQnNnR0hGcVFhU2l0K0lGYWtFSGR5QWFhaUlhSUJkeGFrR2tvcmZpQldwQkJuY2dHR29pSENBYVFRcDNJaGxCZjNOeGFpQUJJQmhxSUJvZ0cwRUtkeUlZUVg5emNXb2dIQ0FZY1dwQnBLSzM0Z1ZxUVE5M0lCZHFJaG9nR1hGcVFhU2l0K0lGYWtFTmR5QVlhaUliUVFwM0loMXFJQVlnR2tFS2R5SWVhaUFPSUJ4QkNuY2lGMm9nQnlBWmFpQUpJQmhxSUJvZ0YwRi9jM0ZxSUJzZ0YzRnFRYVNpdCtJRmFrRUxkeUFaYWlJWUlCdEJmM055SUI1emFrSHovY0RyQm1wQkNYY2dGMm9pRnlBWVFYOXpjaUFkYzJwQjgvM0E2d1pxUVFkM0lCNXFJaGtnRjBGL2MzSWdHRUVLZHlJWWMycEI4LzNBNndacVFROTNJQjFxSWhvZ0dVRi9jM0lnRjBFS2R5SVhjMnBCOC8zQTZ3WnFRUXQzSUJocUlodEJDbmNpSEdvZ0FTQWFRUXAzSWgxcUlCQWdHVUVLZHlJWmFpQVZJQmRxSUJRZ0dHb2dHeUFhUVg5emNpQVpjMnBCOC8zQTZ3WnFRUWgzSUJkcUloY2dHMEYvYzNJZ0hYTnFRZlA5d09zR2FrRUdkeUFaYWlJWUlCZEJmM055SUJ4emFrSHovY0RyQm1wQkJuY2dIV29pR1NBWVFYOXpjaUFYUVFwM0loZHpha0h6L2NEckJtcEJEbmNnSEdvaUdpQVpRWDl6Y2lBWVFRcDNJaGh6YWtIei9jRHJCbXBCREhjZ0Yyb2lHMEVLZHlJY2FpQVdJQnBCQ25jaUhXb2dDU0FaUVFwM0lobHFJQWdnR0dvZ0FDQVhhaUFiSUJwQmYzTnlJQmx6YWtIei9jRHJCbXBCRFhjZ0dHb2lGeUFiUVg5emNpQWRjMnBCOC8zQTZ3WnFRUVYzSUJscUloZ2dGMEYvYzNJZ0hITnFRZlA5d09zR2FrRU9keUFkYWlJWklCaEJmM055SUJkQkNuY2lGM05xUWZQOXdPc0dha0VOZHlBY2FpSWFJQmxCZjNOeUlCaEJDbmNpR0hOcVFmUDl3T3NHYWtFTmR5QVhhaUliUVFwM0loeHFJQkVnR0dvZ0F5QVhhaUFiSUJwQmYzTnlJQmxCQ25jaUdYTnFRZlA5d09zR2FrRUhkeUFZYWlJWUlCdEJmM055SUJwQkNuY2lHbk5xUWZQOXdPc0dha0VGZHlBWmFpSVhRUXAzSWhzZ0VDQWFhaUFZUVFwM0loMGdBQ0FaYWlBY0lCZEJmM054YWlBWElCaHhha0hwN2JYVEIycEJEM2NnR21vaUdFRi9jM0ZxSUJnZ0YzRnFRZW50dGRNSGFrRUZkeUFjYWlJWFFYOXpjV29nRnlBWWNXcEI2ZTIxMHdkcVFRaDNJQjFxSWhsQkNuY2lHbW9nQlNBYmFpQVhRUXAzSWh3Z0JpQWRhaUFZUVFwM0loMGdHVUYvYzNGcUlCa2dGM0ZxUWVudHRkTUhha0VMZHlBYmFpSVhRWDl6Y1dvZ0Z5QVpjV3BCNmUyMTB3ZHFRUTUzSUIxcUloaEJDbmNpR3lBSElCeHFJQmRCQ25jaUhpQUVJQjFxSUJvZ0dFRi9jM0ZxSUJnZ0YzRnFRZW50dGRNSGFrRU9keUFjYWlJWFFYOXpjV29nRnlBWWNXcEI2ZTIxMHdkcVFRWjNJQnBxSWhoQmYzTnhhaUFZSUJkeGFrSHA3YlhUQjJwQkRuY2dIbW9pR1VFS2R5SWFhaUFJSUJ0cUlCaEJDbmNpSENBT0lCNXFJQmRCQ25jaUhTQVpRWDl6Y1dvZ0dTQVljV3BCNmUyMTB3ZHFRUVozSUJ0cUloZEJmM054YWlBWElCbHhha0hwN2JYVEIycEJDWGNnSFdvaUdFRUtkeUliSUJFZ0hHb2dGMEVLZHlJZUlBa2dIV29nR2lBWVFYOXpjV29nR0NBWGNXcEI2ZTIxMHdkcVFReDNJQnhxSWhkQmYzTnhhaUFYSUJoeGFrSHA3YlhUQjJwQkNYY2dHbW9pR0VGL2MzRnFJQmdnRjNGcVFlbnR0ZE1IYWtFTWR5QWVhaUlaUVFwM0lob2dCMm9nRlNBWFFRcDNJaHhxSUJvZ0ZpQWJhaUFZUVFwM0loMGdGQ0FlYWlBY0lCbEJmM054YWlBWklCaHhha0hwN2JYVEIycEJCWGNnRzJvaUYwRi9jM0ZxSUJjZ0dYRnFRZW50dGRNSGFrRVBkeUFjYWlJWVFYOXpjV29nR0NBWGNXcEI2ZTIxMHdkcVFRaDNJQjFxSWhrZ0dFRUtkeUliY3lBZElBaHFJQmdnRjBFS2R5SVhjeUFaYzJwQkNIY2dHbW9pR0hOcVFRVjNJQmRxSWhwQkNuY2lIQ0FBYWlBWlFRcDNJaGtnQm1vZ0Z5QVdhaUFZSUJseklCcHpha0VNZHlBYmFpSVhJQnh6SUJzZ0Eyb2dHaUFZUVFwM0loaHpJQmR6YWtFSmR5QVphaUlaYzJwQkRIY2dHR29pR2lBWlFRcDNJaHR6SUJnZ0Rtb2dHU0FYUVFwM0loZHpJQnB6YWtFRmR5QWNhaUlZYzJwQkRuY2dGMm9pR1VFS2R5SWNJQlZxSUJwQkNuY2lHaUFKYWlBWElCUnFJQmdnR25NZ0dYTnFRUVozSUJ0cUloY2dISE1nR3lBUWFpQVpJQmhCQ25jaUdITWdGM05xUVFoM0lCcHFJaGx6YWtFTmR5QVlhaUlhSUJsQkNuY2lHM01nR0NBUmFpQVpJQmRCQ25jaUdITWdHbk5xUVFaM0lCeHFJaGx6YWtFRmR5QVlhaUljUVFwM0loMGdER29nQkNBV0lBNGdEaUFSSUJZZ0RpQVVJQUVnQUNBQklCQWdGQ0FFSUJBZ0JpQVBhaUFUSUExeklBc2dEWE1nREhNZ0Ntb2dBbXBCQzNjZ0Qyb2lGM05xUVE1M0lBeHFJaDVCQ25jaUgyb2dBeUFTYWlBSklBeHFJQmNnRW5NZ0huTnFRUTkzSUJOcUlnd2dIM01nQlNBVGFpQWVJQmRCQ25jaUUzTWdESE5xUVF4M0lCSnFJaEp6YWtFRmR5QVRhaUlYSUJKQkNuY2lIbk1nRXlBT2FpQVNJQXhCQ25jaURITWdGM05xUVFoM0lCOXFJaEp6YWtFSGR5QU1haUlUUVFwM0loOXFJQUVnRjBFS2R5SVhhaUFNSUJScUlCSWdGM01nRTNOcVFRbDNJQjVxSWd3Z0gzTWdIaUFBYWlBVElCSkJDbmNpRW5NZ0RITnFRUXQzSUJkcUloTnpha0VOZHlBU2FpSVhJQk5CQ25jaUhuTWdFaUFXYWlBVElBeEJDbmNpREhNZ0YzTnFRUTUzSUI5cUloSnpha0VQZHlBTWFpSVRRUXAzSWg5cUlCNGdFV29nRXlBU1FRcDNJaUJ6SUF3Z0NHb2dFaUFYUVFwM0lneHpJQk56YWtFR2R5QWVhaUlTYzJwQkIzY2dER29pRTBFS2R5SVhJQ0FnQjJvZ0V5QVNRUXAzSWg1eklBd2dGV29nRWlBZmN5QVRjMnBCQ1hjZ0lHb2lFM05xUVFoM0lCOXFJZ3hCZjNOeGFpQU1JQk54YWtHWjg0blVCV3BCQjNjZ0htb2lFa0VLZHlJZmFpQVJJQmRxSUF4QkNuY2lJQ0FESUI1cUlCTkJDbmNpRXlBU1FYOXpjV29nRWlBTWNXcEJtZk9KMUFWcVFRWjNJQmRxSWd4QmYzTnhhaUFNSUJKeGFrR1o4NG5VQldwQkNIY2dFMm9pRWtFS2R5SVhJQllnSUdvZ0RFRUtkeUllSUFZZ0Uyb2dIeUFTUVg5emNXb2dFaUFNY1dwQm1mT0oxQVZxUVExM0lDQnFJZ3hCZjNOeGFpQU1JQkp4YWtHWjg0blVCV3BCQzNjZ0gyb2lFa0YvYzNGcUlCSWdESEZxUVpuemlkUUZha0VKZHlBZWFpSVRRUXAzSWg5cUlBVWdGMm9nRWtFS2R5SWdJQWNnSG1vZ0RFRUtkeUllSUJOQmYzTnhhaUFUSUJKeGFrR1o4NG5VQldwQkIzY2dGMm9pREVGL2MzRnFJQXdnRTNGcVFabnppZFFGYWtFUGR5QWVhaUlTUVFwM0loY2dBaUFnYWlBTVFRcDNJaUVnQ0NBZWFpQWZJQkpCZjNOeGFpQVNJQXh4YWtHWjg0blVCV3BCQjNjZ0lHb2lERUYvYzNGcUlBd2dFbkZxUVpuemlkUUZha0VNZHlBZmFpSVNRWDl6Y1dvZ0VpQU1jV3BCbWZPSjFBVnFRUTkzSUNGcUloTkJDbmNpSG1vZ0NTQVhhaUFTUVFwM0loOGdEaUFoYWlBTVFRcDNJaUFnRTBGL2MzRnFJQk1nRW5GcVFabnppZFFGYWtFSmR5QVhhaUlNUVg5emNXb2dEQ0FUY1dwQm1mT0oxQVZxUVF0M0lDQnFJaEpCQ25jaUV5QUVJQjlxSUF4QkNuY2lGeUFWSUNCcUlCNGdFa0YvYzNGcUlCSWdESEZxUVpuemlkUUZha0VIZHlBZmFpSU1RWDl6Y1dvZ0RDQVNjV3BCbWZPSjFBVnFRUTEzSUI1cUloSkJmM01pSUhGcUlCSWdESEZxUVpuemlkUUZha0VNZHlBWGFpSWVRUXAzSWg5cUlBTWdFa0VLZHlJU2FpQVZJQXhCQ25jaURHb2dGaUFUYWlBRklCZHFJQjRnSUhJZ0RITnFRYUhYNS9ZR2FrRUxkeUFUYWlJVElCNUJmM055SUJKemFrR2gxK2YyQm1wQkRYY2dER29pRENBVFFYOXpjaUFmYzJwQm9kZm45Z1pxUVFaM0lCSnFJaElnREVGL2MzSWdFMEVLZHlJVGMycEJvZGZuOWdacVFRZDNJQjlxSWhjZ0VrRi9jM0lnREVFS2R5SU1jMnBCb2RmbjlnWnFRUTUzSUJOcUloNUJDbmNpSDJvZ0NTQVhRUXAzSWlCcUlBWWdFa0VLZHlJU2FpQUFJQXhxSUFjZ0Uyb2dIaUFYUVg5emNpQVNjMnBCb2RmbjlnWnFRUWwzSUF4cUlnd2dIa0YvYzNJZ0lITnFRYUhYNS9ZR2FrRU5keUFTYWlJU0lBeEJmM055SUI5emFrR2gxK2YyQm1wQkQzY2dJR29pRXlBU1FYOXpjaUFNUVFwM0lneHpha0doMStmMkJtcEJEbmNnSDJvaUZ5QVRRWDl6Y2lBU1FRcDNJaEp6YWtHaDErZjJCbXBCQ0hjZ0RHb2lIa0VLZHlJZmFpQUVJQmRCQ25jaUlHb2dFU0FUUVFwM0loTnFJQkFnRW1vZ0FpQU1haUFlSUJkQmYzTnlJQk56YWtHaDErZjJCbXBCRFhjZ0Vtb2lEQ0FlUVg5emNpQWdjMnBCb2RmbjlnWnFRUVozSUJOcUloSWdERUYvYzNJZ0gzTnFRYUhYNS9ZR2FrRUZkeUFnYWlJVElCSkJmM055SUF4QkNuY2lGM05xUWFIWDUvWUdha0VNZHlBZmFpSWVJQk5CZjNOeUlCSkJDbmNpRW5OcVFhSFg1L1lHYWtFSGR5QVhhaUlmUVFwM0lneHFJQUVnRTBFS2R5SVRhaUFJSUJkcUlCOGdIa0YvYzNJZ0UzTnFRYUhYNS9ZR2FrRUZkeUFTYWlJWElBeEJmM054YWlBR0lCSnFJQjhnSGtFS2R5SVNRWDl6Y1dvZ0Z5QVNjV3BCM1BudStIaHFRUXQzSUJOcUloNGdESEZxUWR6NTd2aDRha0VNZHlBU2FpSWZJQjVCQ25jaUUwRi9jM0ZxSUFRZ0Vtb2dIaUFYUVFwM0loSkJmM054YWlBZklCSnhha0hjK2U3NGVHcEJEbmNnREdvaUhpQVRjV3BCM1BudStIaHFRUTkzSUJKcUlpQkJDbmNpREdvZ0NDQWZRUXAzSWhkcUlBSWdFbW9nSGlBWFFYOXpjV29nSUNBWGNXcEIzUG51K0hocVFRNTNJQk5xSWg4Z0RFRi9jM0ZxSUFBZ0Uyb2dJQ0FlUVFwM0loSkJmM054YWlBZklCSnhha0hjK2U3NGVHcEJEM2NnRjJvaUZ5QU1jV3BCM1BudStIaHFRUWwzSUJKcUloNGdGMEVLZHlJVFFYOXpjV29nQXlBU2FpQVhJQjlCQ25jaUVrRi9jM0ZxSUI0Z0VuRnFRZHo1N3ZoNGFrRUlkeUFNYWlJZklCTnhha0hjK2U3NGVHcEJDWGNnRW1vaUlFRUtkeUlNYWlBSElCNUJDbmNpRjJvZ0JTQVNhaUFmSUJkQmYzTnhhaUFnSUJkeGFrSGMrZTc0ZUdwQkRuY2dFMm9pSGlBTVFYOXpjV29nRkNBVGFpQWdJQjlCQ25jaUVrRi9jM0ZxSUI0Z0VuRnFRZHo1N3ZoNGFrRUZkeUFYYWlJWElBeHhha0hjK2U3NGVHcEJCbmNnRW1vaUh5QVhRUXAzSWhOQmYzTnhhaUFWSUJKcUlCY2dIa0VLZHlJU1FYOXpjV29nSHlBU2NXcEIzUG51K0hocVFRaDNJQXhxSWhjZ0UzRnFRZHo1N3ZoNGFrRUdkeUFTYWlJZVFRcDNJaUJxSUFJZ0YwRUtkeUlPYWlBRElCOUJDbmNpREdvZ0NTQVRhaUFlSUE1QmYzTnhhaUFRSUJKcUlCY2dERUYvYzNGcUlCNGdESEZxUWR6NTd2aDRha0VGZHlBVGFpSURJQTV4YWtIYytlNzRlR3BCREhjZ0RHb2lEQ0FESUNCQmYzTnljMnBCenZyUHlucHFRUWwzSUE1cUlnNGdEQ0FEUVFwM0lnTkJmM055YzJwQnp2clB5bnBxUVE5M0lDQnFJaElnRGlBTVFRcDNJZ3hCZjNOeWMycEJ6dnJQeW5wcVFRVjNJQU5xSWhOQkNuY2lGMm9nQ1NBU1FRcDNJaFpxSUFnZ0RrRUtkeUlKYWlBVUlBeHFJQUVnQTJvZ0V5QVNJQWxCZjNOeWMycEJ6dnJQeW5wcVFRdDNJQXhxSWdNZ0V5QVdRWDl6Y25OcVFjNzZ6OHA2YWtFR2R5QUphaUlJSUFNZ0YwRi9jM0p6YWtITytzL0tlbXBCQ0hjZ0Ztb2lDU0FJSUFOQkNuY2lBMEYvYzNKemFrSE8rcy9LZW1wQkRYY2dGMm9pRGlBSklBaEJDbmNpQ0VGL2MzSnpha0hPK3MvS2VtcEJESGNnQTJvaUZFRUtkeUlXYWlBQUlBNUJDbmNpREdvZ0JTQUpRUXAzSWdCcUlBWWdDR29nRlNBRGFpQVVJQTRnQUVGL2MzSnpha0hPK3MvS2VtcEJCWGNnQ0dvaUF5QVVJQXhCZjNOeWMycEJ6dnJQeW5wcVFReDNJQUJxSWdBZ0F5QVdRWDl6Y25OcVFjNzZ6OHA2YWtFTmR5QU1haUlHSUFBZ0EwRUtkeUlEUVg5emNuTnFRYzc2ejhwNmFrRU9keUFXYWlJSUlBWWdBRUVLZHlJQVFYOXpjbk5xUWM3Nno4cDZha0VMZHlBRGFpSUpRUXAzSWhWcU5nS1FpUUZCQUNBTElCZ2dBbW9nR1NBYVFRcDNJZ0p6SUJ4emFrRVBkeUFiYWlJT1FRcDNJaFpxSUJBZ0Eyb2dDU0FJSUFaQkNuY2lBMEYvYzNKemFrSE8rcy9LZW1wQkNIY2dBR29pQmtFS2QybzJBb3lKQVVFQUlBMGdHeUFGYWlBY0lCbEJDbmNpQlhNZ0RuTnFRUTEzSUFKcUloUkJDbmRxSUFjZ0FHb2dCaUFKSUFoQkNuY2lBRUYvYzNKemFrSE8rcy9LZW1wQkJYY2dBMm9pQjJvMkFvaUpBVUVBSUFBZ0Ntb2dBaUFCYWlBT0lCMXpJQlJ6YWtFTGR5QUZhaUlCYWlBUklBTnFJQWNnQmlBVlFYOXpjbk5xUWM3Nno4cDZha0VHZDJvMkFwaUpBVUVBSUFBZ0Qyb2dIV29nQlNBRWFpQVVJQlp6SUFGemFrRUxkMm8yQXBTSkFRdWlBd0VJZndKQUlBRkZEUUJCQUNFQ1FRQkJBQ2dDZ0lrQklnTWdBV29pQkRZQ2dJa0JJQU5CUDNFaEJRSkFJQVFnQTA4TkFFRUFRUUFvQW9TSkFVRUJhallDaElrQkN3SkFJQVZGRFFBQ1FFSEFBQ0FGYXlJR0lBRk5EUUFnQlNFQ0RBRUxJQVpCQTNFaEIwRUFJUU1DUUNBRlFUOXpRUU5KRFFBZ0JVR0FpUUZxSVFnZ0JrSDhBSEVoQ1VFQUlRTURRQ0FJSUFOcUlnSkJIR29nQUNBRGFpSUVMUUFBT2dBQUlBSkJIV29nQkVFQmFpMEFBRG9BQUNBQ1FSNXFJQVJCQW1vdEFBQTZBQUFnQWtFZmFpQUVRUU5xTFFBQU9nQUFJQWtnQTBFRWFpSURSdzBBQ3dzQ1FDQUhSUTBBSUFBZ0Eyb2hBaUFESUFWcVFaeUpBV29oQXdOQUlBTWdBaTBBQURvQUFDQUNRUUZxSVFJZ0EwRUJhaUVESUFkQmYyb2lCdzBBQ3d0Qm5Ja0JFQUlnQVNBR2F5RUJJQUFnQm1vaEFFRUFJUUlMQWtBZ0FVSEFBRWtOQUFOQUlBQVFBaUFBUWNBQWFpRUFJQUZCUUdvaUFVRS9TdzBBQ3dzZ0FVVU5BQ0FDUVp5SkFXb2hBMEVBSVFJRFFDQURJQUF0QUFBNkFBQWdBRUVCYWlFQUlBTkJBV29oQXlBQklBSkJBV29pQWtIL0FYRkxEUUFMQ3dzSkFFR0FDU0FBRUFNTGdnRUJBbjhqQUVFUWF5SUFKQUFnQUVFQUtBS0FpUUVpQVVFRGREWUNDQ0FBUVFBb0FvU0pBVUVEZENBQlFSMTJjallDREVHUUNFRTRRZmdBSUFGQlAzRWlBVUU0U1JzZ0FXc1FBeUFBUVFocVFRZ1FBMEVBUVFBb0FvaUpBVFlDZ0FsQkFFRUFLUUtNaVFFM0FvUUpRUUJCQUNrQ2xJa0JOd0tNQ1NBQVFSQnFKQUFMQmdCQmdJa0JDOEVCQVFGL0l3QkJFR3NpQVNRQVFRQkI4TVBMbm53MkFwaUpBVUVBUXY2NTY4WHBqcFdaRURjQ2tJa0JRUUJDZ2NhVXVwYng2dVp2TndLSWlRRkJBRUlBTndLQWlRRkJnQWtnQUJBRElBRkJBQ2dDZ0lrQklnQkJBM1EyQWdnZ0FVRUFLQUtFaVFGQkEzUWdBRUVkZG5JMkFneEJrQWhCT0VINEFDQUFRVDl4SWdCQk9Fa2JJQUJyRUFNZ0FVRUlha0VJRUFOQkFFRUFLQUtJaVFFMkFvQUpRUUJCQUNrQ2pJa0JOd0tFQ1VFQVFRQXBBcFNKQVRjQ2pBa2dBVUVRYWlRQUN3dFhBUUJCZ0FnTFVGd0FBQUFBQUFBQUFBQUFBQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiO1xudmFyIGhhc2gkNCA9IFwiYzA4OWE3Y2FcIjtcbnZhciB3YXNtSnNvbiQ0ID0ge1xuXHRuYW1lOiBuYW1lJDQsXG5cdGRhdGE6IGRhdGEkNCxcblx0aGFzaDogaGFzaCQ0XG59O1xuXG5jb25zdCBtdXRleCQyID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJDIgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIFJJUEVNRC0xNjAgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcmlwZW1kMTYwKGRhdGEpIHtcbiAgICBpZiAod2FzbUNhY2hlJDIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCQyLCB3YXNtSnNvbiQ0LCAyMClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkMiA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJDIuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSQyLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgUklQRU1ELTE2MCBoYXNoIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJJUEVNRDE2MCgpIHtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiQ0LCAyMCkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDIwLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVLZXlCdWZmZXIoaGFzaGVyLCBrZXkpIHtcbiAgICBjb25zdCB7IGJsb2NrU2l6ZSB9ID0gaGFzaGVyO1xuICAgIGNvbnN0IGJ1ZiA9IGdldFVJbnQ4QnVmZmVyKGtleSk7XG4gICAgaWYgKGJ1Zi5sZW5ndGggPiBibG9ja1NpemUpIHtcbiAgICAgICAgaGFzaGVyLnVwZGF0ZShidWYpO1xuICAgICAgICBjb25zdCB1aW50QXJyID0gaGFzaGVyLmRpZ2VzdCgnYmluYXJ5Jyk7XG4gICAgICAgIGhhc2hlci5pbml0KCk7XG4gICAgICAgIHJldHVybiB1aW50QXJyO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5sZW5ndGgpO1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlSG1hYyhoYXNoZXIsIGtleSkge1xuICAgIGhhc2hlci5pbml0KCk7XG4gICAgY29uc3QgeyBibG9ja1NpemUgfSA9IGhhc2hlcjtcbiAgICBjb25zdCBrZXlCdWYgPSBjYWxjdWxhdGVLZXlCdWZmZXIoaGFzaGVyLCBrZXkpO1xuICAgIGNvbnN0IGtleUJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGJsb2NrU2l6ZSk7XG4gICAga2V5QnVmZmVyLnNldChrZXlCdWYpO1xuICAgIGNvbnN0IG9wYWQgPSBuZXcgVWludDhBcnJheShibG9ja1NpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcbiAgICAgICAgY29uc3QgdiA9IGtleUJ1ZmZlcltpXTtcbiAgICAgICAgb3BhZFtpXSA9IHYgXiAweDVDO1xuICAgICAgICBrZXlCdWZmZXJbaV0gPSB2IF4gMHgzNjtcbiAgICB9XG4gICAgaGFzaGVyLnVwZGF0ZShrZXlCdWZmZXIpO1xuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgaW5pdDogKCkgPT4ge1xuICAgICAgICAgICAgaGFzaGVyLmluaXQoKTtcbiAgICAgICAgICAgIGhhc2hlci51cGRhdGUoa2V5QnVmZmVyKTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGhhc2hlci51cGRhdGUoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9LFxuICAgICAgICBkaWdlc3Q6ICgob3V0cHV0VHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdWludEFyciA9IGhhc2hlci5kaWdlc3QoJ2JpbmFyeScpO1xuICAgICAgICAgICAgaGFzaGVyLmluaXQoKTtcbiAgICAgICAgICAgIGhhc2hlci51cGRhdGUob3BhZCk7XG4gICAgICAgICAgICBoYXNoZXIudXBkYXRlKHVpbnRBcnIpO1xuICAgICAgICAgICAgcmV0dXJuIGhhc2hlci5kaWdlc3Qob3V0cHV0VHlwZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzYXZlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NhdmUoKSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGxvYWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbG9hZCgpIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgfSxcbiAgICAgICAgYmxvY2tTaXplOiBoYXNoZXIuYmxvY2tTaXplLFxuICAgICAgICBkaWdlc3RTaXplOiBoYXNoZXIuZGlnZXN0U2l6ZSxcbiAgICB9O1xuICAgIHJldHVybiBvYmo7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgSE1BQyBoYXNoXG4gKiBAcGFyYW0gaGFzaCBIYXNoIGFsZ29yaXRobSB0byB1c2UuIEl0IGhhcyB0byBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgZnVuY3Rpb24gbGlrZSBjcmVhdGVTSEExKClcbiAqIEBwYXJhbSBrZXkgS2V5IChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICovXG5mdW5jdGlvbiBjcmVhdGVITUFDKGhhc2gsIGtleSkge1xuICAgIGlmICghaGFzaCB8fCAhaGFzaC50aGVuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoYXNoIGZ1bmN0aW9uIGlzIHByb3ZpZGVkISBVc2FnZTogY3JlYXRlSE1BQyhjcmVhdGVNRDUoKSwgXCJrZXlcIikuJyk7XG4gICAgfVxuICAgIHJldHVybiBoYXNoLnRoZW4oKGhhc2hlcikgPT4gY2FsY3VsYXRlSG1hYyhoYXNoZXIsIGtleSkpO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVQQktERjIoZGlnZXN0LCBzYWx0LCBpdGVyYXRpb25zLCBoYXNoTGVuZ3RoLCBvdXRwdXRUeXBlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgREsgPSBuZXcgVWludDhBcnJheShoYXNoTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgYmxvY2sxID0gbmV3IFVpbnQ4QXJyYXkoc2FsdC5sZW5ndGggKyA0KTtcbiAgICAgICAgY29uc3QgYmxvY2sxVmlldyA9IG5ldyBEYXRhVmlldyhibG9jazEuYnVmZmVyKTtcbiAgICAgICAgY29uc3Qgc2FsdEJ1ZmZlciA9IGdldFVJbnQ4QnVmZmVyKHNhbHQpO1xuICAgICAgICBjb25zdCBzYWx0VUludEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHNhbHRCdWZmZXIuYnVmZmVyLCBzYWx0QnVmZmVyLmJ5dGVPZmZzZXQsIHNhbHRCdWZmZXIubGVuZ3RoKTtcbiAgICAgICAgYmxvY2sxLnNldChzYWx0VUludEJ1ZmZlcik7XG4gICAgICAgIGxldCBkZXN0UG9zID0gMDtcbiAgICAgICAgY29uc3QgaExlbiA9IGRpZ2VzdC5kaWdlc3RTaXplO1xuICAgICAgICBjb25zdCBsID0gTWF0aC5jZWlsKGhhc2hMZW5ndGggLyBoTGVuKTtcbiAgICAgICAgbGV0IFQgPSBudWxsO1xuICAgICAgICBsZXQgVSA9IG51bGw7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGw7IGkrKykge1xuICAgICAgICAgICAgYmxvY2sxVmlldy5zZXRVaW50MzIoc2FsdC5sZW5ndGgsIGkpO1xuICAgICAgICAgICAgZGlnZXN0LmluaXQoKTtcbiAgICAgICAgICAgIGRpZ2VzdC51cGRhdGUoYmxvY2sxKTtcbiAgICAgICAgICAgIFQgPSBkaWdlc3QuZGlnZXN0KCdiaW5hcnknKTtcbiAgICAgICAgICAgIFUgPSBULnNsaWNlKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGl0ZXJhdGlvbnM7IGorKykge1xuICAgICAgICAgICAgICAgIGRpZ2VzdC5pbml0KCk7XG4gICAgICAgICAgICAgICAgZGlnZXN0LnVwZGF0ZShVKTtcbiAgICAgICAgICAgICAgICBVID0gZGlnZXN0LmRpZ2VzdCgnYmluYXJ5Jyk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBoTGVuOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgVFtrXSBePSBVW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIERLLnNldChULnN1YmFycmF5KDAsIGhhc2hMZW5ndGggLSBkZXN0UG9zKSwgZGVzdFBvcyk7XG4gICAgICAgICAgICBkZXN0UG9zICs9IGhMZW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dHB1dFR5cGUgPT09ICdiaW5hcnknKSB7XG4gICAgICAgICAgICByZXR1cm4gREs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlnZXN0Q2hhcnMgPSBuZXcgVWludDhBcnJheShoYXNoTGVuZ3RoICogMik7XG4gICAgICAgIHJldHVybiBnZXREaWdlc3RIZXgoZGlnZXN0Q2hhcnMsIERLLCBoYXNoTGVuZ3RoKTtcbiAgICB9KTtcbn1cbmNvbnN0IHZhbGlkYXRlT3B0aW9ucyQyID0gKG9wdGlvbnMpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvcHRpb25zIHBhcmFtZXRlci4gSXQgcmVxdWlyZXMgYW4gb2JqZWN0LicpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGFzaEZ1bmN0aW9uIHx8ICFvcHRpb25zLmhhc2hGdW5jdGlvbi50aGVuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoYXNoIGZ1bmN0aW9uIGlzIHByb3ZpZGVkISBVc2FnZTogcGJrZGYyKFwicGFzc3dvcmRcIiwgXCJzYWx0XCIsIDEwMDAsIDMyLCBjcmVhdGVTSEExKCkpLicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5pdGVyYXRpb25zKSB8fCBvcHRpb25zLml0ZXJhdGlvbnMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXRlcmF0aW9ucyBzaG91bGQgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMuaGFzaExlbmd0aCkgfHwgb3B0aW9ucy5oYXNoTGVuZ3RoIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhc2ggbGVuZ3RoIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5vdXRwdXRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3B0aW9ucy5vdXRwdXRUeXBlID0gJ2hleCc7XG4gICAgfVxuICAgIGlmICghWydoZXgnLCAnYmluYXJ5J10uaW5jbHVkZXMob3B0aW9ucy5vdXRwdXRUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3VwcG9ydGVkIG91dHB1dCB0eXBlICR7b3B0aW9ucy5vdXRwdXRUeXBlfS4gVmFsaWQgdmFsdWVzOiBbJ2hleCcsICdiaW5hcnknXWApO1xuICAgIH1cbn07XG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyBQQktERjIgaGFzaCBmb3IgdGhlIHN1cHBsaWVkIHBhc3N3b3JkXG4gKi9cbmZ1bmN0aW9uIHBia2RmMihvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFsaWRhdGVPcHRpb25zJDIob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSB5aWVsZCBjcmVhdGVITUFDKG9wdGlvbnMuaGFzaEZ1bmN0aW9uLCBvcHRpb25zLnBhc3N3b3JkKTtcbiAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVBCS0RGMihobWFjLCBvcHRpb25zLnNhbHQsIG9wdGlvbnMuaXRlcmF0aW9ucywgb3B0aW9ucy5oYXNoTGVuZ3RoLCBvcHRpb25zLm91dHB1dFR5cGUpO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSQzID0gXCJzY3J5cHRcIjtcbnZhciBkYXRhJDMgPSBcIkFHRnpiUUVBQUFBQkd3VmdBWDhCZjJBQUFYOWdCSDkvZjM4QVlBRi9BR0FEZjM5L0FBTUdCUUFCQWdNRUJRWUJBUUtBZ0FJR0NBRi9BVUdRaUFRTEJ6a0VCbTFsYlc5eWVRSUFFa2hoYzJoZlUyVjBUV1Z0YjNKNVUybDZaUUFBRGtoaGMyaGZSMlYwUW5WbVptVnlBQUVHYzJOeWVYQjBBQVFLeHlZRldBRUNmMEVBSVFFQ1FFRUFLQUtJQ0NJQ0lBQkdEUUFDUUNBQUlBSnJJZ0JCRUhZZ0FFR0FnSHh4SUFCSmFpSUFRQUJCZjBjTkFFSC9BY0FQQzBFQUlRRkJBRUVBS1FPSUNDQUFRUkIwclh3M0E0Z0lDeUFCd0F0d0FRSi9Ba0JCQUNnQ2dBZ2lBQTBBUVFBL0FFRVFkQ0lBTmdLQUNFRUFLQUtJQ0NJQlFZQ0FJRVlOQUFKQVFZQ0FJQ0FCYXlJQVFSQjJJQUJCZ0lCOGNTQUFTV29pQUVBQVFYOUhEUUJCQUE4TFFRQkJBQ2tEaUFnZ0FFRVFkSzE4TndPSUNFRUFLQUtBQ0NFQUN5QUFDNnNGQVFOL0lBSWdBMEVIZENBQWFrRkFhaUlFS1FNQU53TUFJQUlnQkNrRENEY0RDQ0FDSUFRcEF4QTNBeEFnQWlBRUtRTVlOd01ZSUFJZ0JDa0RJRGNESUNBQ0lBUXBBeWczQXlnZ0FpQUVLUU13TndNd0lBSWdCQ2tET0RjRE9BSkFJQU5GRFFBZ0EwRUJkQ0VGSUFCQitBQnFJUVFnQTBFR2RDRUdRUUFoQUFOQUlBSWdBaWtEQUNBRVFZaC9haWtEQUlVM0F3QWdBaUFDS1FNSUlBUkJrSDlxS1FNQWhUY0RDQ0FDSUFJcEF4QWdCRUdZZjJvcEF3Q0ZOd01RSUFJZ0Fpa0RHQ0FFUWFCL2Fpa0RBSVUzQXhnZ0FpQUNLUU1nSUFSQnFIOXFLUU1BaFRjRElDQUNJQUlwQXlnZ0JFR3dmMm9wQXdDRk53TW9JQUlnQWlrRE1DQUVRYmgvYWlrREFJVTNBekFnQWlBQ0tRTTRJQVJCUUdvcEF3Q0ZOd000SUFJUUF5QUJJQUlwQXdBM0F3QWdBVUVJYWlBQ0tRTUlOd01BSUFGQkVHb2dBaWtERURjREFDQUJRUmhxSUFJcEF4ZzNBd0FnQVVFZ2FpQUNLUU1nTndNQUlBRkJLR29nQWlrREtEY0RBQ0FCUVRCcUlBSXBBekEzQXdBZ0FVRTRhaUFDS1FNNE53TUFJQUlnQWlrREFDQUVRVWhxS1FNQWhUY0RBQ0FDSUFJcEF3Z2dCRUZRYWlrREFJVTNBd2dnQWlBQ0tRTVFJQVJCV0dvcEF3Q0ZOd01RSUFJZ0Fpa0RHQ0FFUVdCcUtRTUFoVGNER0NBQ0lBSXBBeUFnQkVGb2Fpa0RBSVUzQXlBZ0FpQUNLUU1vSUFSQmNHb3BBd0NGTndNb0lBSWdBaWtETUNBRVFYaHFLUU1BaFRjRE1DQUNJQUlwQXpnZ0JDa0RBSVUzQXpnZ0FoQURJQUVnQm1vaUF5QUNLUU1BTndNQUlBTkJDR29nQWlrRENEY0RBQ0FEUVJCcUlBSXBBeEEzQXdBZ0EwRVlhaUFDS1FNWU53TUFJQU5CSUdvZ0Fpa0RJRGNEQUNBRFFTaHFJQUlwQXlnM0F3QWdBMEV3YWlBQ0tRTXdOd01BSUFOQk9Hb2dBaWtET0RjREFDQUVRWUFCYWlFRUlBRkJ3QUJxSVFFZ0FFRUNhaUlBSUFWSkRRQUxDd3U2RFFnQmZnRi9BWDRCZndGK0FYOEJmaEovSUFBZ0FDZ0NCQ0FBS1FNb0lnRkNJSWluSWdJZ0FDa0RPQ0lEUWlDSXB5SUVha0VIZHlBQUtRTUlJZ1ZDSUlpbmN5SUdJQVJxUVFsM0lBQXBBeGdpQjBJZ2lLZHpJZ2dnQm1wQkRYY2dBbk1pQ1NBSHB5SUtJQUduSWd0cVFRZDNJQU9uY3lJQ0lBdHFRUWwzSUFXbmN5SU1JQUpxUVExM0lBcHpJZzBnREdwQkVuY2dDM01pRGlBQUtRTUFJZ0ZDSUlpbklnOGdBQ2tERUNJRFFpQ0lweUlRYWtFSGR5QUFLUU1nSWdWQ0lJaW5jeUlMYWtFSGQzTWlDaUFKSUFocVFSSjNJQVJ6SWhFZ0FtcEJCM2NnQUNrRE1DSUhweUlKSUFHbkloSnFRUWQzSUFPbmN5SUVJQkpxUVFsM0lBV25jeUlUSUFScVFRMTNJQWx6SWhSeklna2dFV3BCQ1hjZ0N5QVFha0VKZHlBSFFpQ0lwM01pRlhNaUZpQUpha0VOZHlBQ2N5SVhJQlpxUVJKM0lCRnpJaEZxUVFkM0lBWWdGQ0FUYWtFU2R5QVNjeUlTYWtFSGR5QVZJQXRxUVExM0lBOXpJaFJ6SWdJZ0VtcEJDWGNnREhNaUR5QUNha0VOZHlBR2N5SVljeUlHSUJGcVFRbDNJQWdnRFNBVUlCVnFRUkozSUJCekloQWdCR3BCQjNkeklnd2dFR3BCQ1hkeklnaHpJaFVnQm1wQkRYY2dDbk1pRkNBTUlBb2dEbXBCQ1hjZ0UzTWlFeUFLYWtFTmR5QUxjeUlaSUJOcVFSSjNJQTV6SWdwcVFRZDNJQmR6SWdzZ0NtcEJDWGNnRDNNaURpQUxha0VOZHlBTWN5SVhJQTVxUVJKM0lBcHpJZzBnQWlBSUlBeHFRUTEzSUFSeklnd2dDR3BCRW5jZ0VITWlDR3BCQjNjZ0dYTWlDbXBCQjNkeklnUWdGQ0FWYWtFU2R5QVJjeUlRSUF0cVFRZDNJQWtnR0NBUGFrRVNkeUFTY3lJUmFrRUhkeUFNY3lJTUlCRnFRUWwzSUJOekloSWdER3BCRFhjZ0NYTWlEM01pQ1NBUWFrRUpkeUFLSUFocVFRbDNJQlp6SWhOekloWWdDV3BCRFhjZ0MzTWlGQ0FXYWtFU2R5QVFjeUlRYWtFSGR5QUdJQThnRW1wQkVuY2dFWE1pRVdwQkIzY2dFeUFLYWtFTmR5QUNjeUlMY3lJQ0lCRnFRUWwzSUE1eklnNGdBbXBCRFhjZ0JuTWlHSE1pQmlBUWFrRUpkeUFWSUJjZ0N5QVRha0VTZHlBSWN5SUlJQXhxUVFkM2N5SUxJQWhxUVFsM2N5SVRjeUlWSUFacVFRMTNJQVJ6SWhjZ0N5QUVJQTFxUVFsM0lCSnpJaElnQkdwQkRYY2dDbk1pR1NBU2FrRVNkeUFOY3lJRWFrRUhkeUFVY3lJS0lBUnFRUWwzSUE1eklnOGdDbXBCRFhjZ0MzTWlGQ0FQYWtFU2R5QUVjeUlOSUFJZ0V5QUxha0VOZHlBTWN5SU1JQk5xUVJKM0lBaHpJZ2hxUVFkM0lCbHpJZ3RxUVFkM2N5SUVJQmNnRldwQkVuY2dFSE1pRUNBS2FrRUhkeUFKSUJnZ0RtcEJFbmNnRVhNaURtcEJCM2NnREhNaURDQU9ha0VKZHlBU2N5SVJJQXhxUVExM0lBbHpJaGR6SWdrZ0VHcEJDWGNnQ3lBSWFrRUpkeUFXY3lJU2N5SVRJQWxxUVExM0lBcHpJaGdnRTJwQkVuY2dFSE1pRUdwQkIzY2dCaUFYSUJGcVFSSjNJQTV6SWdwcVFRZDNJQklnQzJwQkRYY2dBbk1pRjNNaUFpQUtha0VKZHlBUGN5SU9JQUpxUVExM0lBWnpJaFp6SWdZZ0NTQVdJQTVxUVJKM0lBcHpJaFpxUVFkM0lCVWdGQ0FYSUJKcVFSSjNJQWh6SWdnZ0RHcEJCM2R6SWdvZ0NHcEJDWGR6SWhJZ0NtcEJEWGNnREhNaUQzTWlEQ0FXYWtFSmR5QUVJQTFxUVFsM0lCRnpJaEZ6SWhVZ0RHcEJEWGNnQ1hNaUZDQVZha0VTZHlBV2N5SUpha0VIZHlBQ0lBOGdFbXBCRW5jZ0NITWlDR3BCQjNjZ0VTQUVha0VOZHlBTGN5SVBjeUlMSUFocVFRbDNJQk56SWhNZ0MycEJEWGNnQW5NaUYzTWlGbW8yQWdRZ0FDQUFLQUlJSUJZZ0NXcEJDWGNnQ2lBUElCRnFRUkozSUExekloRnFRUWQzSUJoeklnSWdFV3BCQ1hjZ0RuTWlEbk1pRDJvMkFnZ2dBQ0FBS0FJTUlBOGdGbXBCRFhjZ0JuTWlEV28yQWd3Z0FDQUFLQUlRSUFZZ0VHcEJDWGNnRW5NaUVpQU9JQUpxUVExM0lBcHpJaGdnRnlBVGFrRVNkeUFJY3lJS0lBeHFRUWQzY3lJSUlBcHFRUWwzY3lJV0lBaHFRUTEzSUF4eklneHFOZ0lRSUFBZ0FDZ0NBQ0FOSUE5cVFSSjNJQWx6YWpZQ0FDQUFJQUFvQWhRZ0RDQVdha0VTZHlBS2MybzJBaFFnQUNBQUtBSVlJQWhxTmdJWUlBQWdBQ2dDSENBV2FqWUNIQ0FBSUFBb0FpQWdFaUFHYWtFTmR5QUVjeUlKSUJnZ0RtcEJFbmNnRVhNaUJpQUxha0VIZDNNaUNpQUdha0VKZHlBVmN5SUVhallDSUNBQUlBQW9BaVFnQkNBS2FrRU5keUFMY3lJTGFqWUNKQ0FBSUFBb0FpZ2dDeUFFYWtFU2R5QUdjMm8yQWlnZ0FDQUFLQUlzSUFwcU5nSXNJQUFnQUNnQ01DQUpJQkpxUVJKM0lCQnpJZ1lnQW1wQkIzY2dGSE1pQzJvMkFqQWdBQ0FBS0FJMElBc2dCbXBCQ1hjZ0UzTWlDbW8yQWpRZ0FDQUFLQUk0SUFvZ0MycEJEWGNnQW5NaUFtbzJBamdnQUNBQUtBSThJQUlnQ21wQkVuY2dCbk5xTmdJOEM1RVNBdzUvQVg0T2Z3SkFJQUpGRFFBZ0FFRUhkQ0lEUVVCcUlnUkJBQ2dDZ0FnaUJTQURJQUpzSWdacUlBTWdBV3hxSWdjZ0Eyb2lDR29oQ1NBQUlBSkJCM1FpQ2lBQlFRZDBhaUlMYkNFTUlBQWdDMEdBQVdwc0lRMGdBRUVGZENJTFFRRWdDMEVCU3hzaUMwRmdjU0VPSUF0QkFYRWhEeUFIUVVCcUlSQWdBYTFDZjN3aEVTQUVJQWRxSVJJZ0J5QUFRUWgwSWhOcUlSUWdBQ0FLUVlBQmFtd2hGU0FMUVg5cVFRTkpJUlpCQUNFWFFRQWhHQU5BUVFBb0FvQUlJaGtnQXlBWWJHb2hHZ0pBSUFCRkRRQkJBQ0ViQWtBZ0ZnMEFJQmtnRjJvaEhFRUFJUXRCQUNFYkEwQWdCeUFMYWlJRUlCd2dDMm9pSFNnQ0FEWUNBQ0FFUVFScUlCMUJCR29vQWdBMkFnQWdCRUVJYWlBZFFRaHFLQUlBTmdJQUlBUkJER29nSFVFTWFpZ0NBRFlDQUNBTFFSQnFJUXNnRGlBYlFRUnFJaHRIRFFBTEN5QVBSUTBBSUFjZ0cwRUNkQ0lMYWlBYUlBdHFLQUlBTmdJQUN3SkFJQUZGRFFCQkFDRWVJQlVoSENBR0lSOERRQ0FGSVIwZ0FDRWJBa0FDUUNBQURRQWdGQ0FRS1FNQU53TUFJQlFnRUNrRENEY0RDQ0FVSUJBcEF4QTNBeEFnRkNBUUtRTVlOd01ZSUJRZ0VDa0RJRGNESUNBVUlCQXBBeWczQXlnZ0ZDQVFLUU13TndNd0lCUWdFQ2tET0RjRE9Bd0JDd05BSUIwZ0gyb2lDeUFkSUF4cUlnUXBBd0EzQXdBZ0MwRUlhaUFFUVFocUtRTUFOd01BSUF0QkVHb2dCRUVRYWlrREFEY0RBQ0FMUVJocUlBUkJHR29wQXdBM0F3QWdDMEVnYWlBRVFTQnFLUU1BTndNQUlBdEJLR29nQkVFb2Fpa0RBRGNEQUNBTFFUQnFJQVJCTUdvcEF3QTNBd0FnQzBFNGFpQUVRVGhxS1FNQU53TUFJQXRCd0FCcUlBUkJ3QUJxS1FNQU53TUFJQXRCeUFCcUlBUkJ5QUJxS1FNQU53TUFJQXRCMEFCcUlBUkIwQUJxS1FNQU53TUFJQXRCMkFCcUlBUkIyQUJxS1FNQU53TUFJQXRCNEFCcUlBUkI0QUJxS1FNQU53TUFJQXRCNkFCcUlBUkI2QUJxS1FNQU53TUFJQXRCOEFCcUlBUkI4QUJxS1FNQU53TUFJQXRCK0FCcUlBUkIrQUJxS1FNQU53TUFJQjFCZ0FGcUlSMGdHMEYvYWlJYkRRQUxJQWNnQ0NBVUlBQVFBaUFGSVIwZ0FDRWJBMEFnSFNBY2FpSUxJQjBnRFdvaUJDa0RBRGNEQUNBTFFRaHFJQVJCQ0dvcEF3QTNBd0FnQzBFUWFpQUVRUkJxS1FNQU53TUFJQXRCR0dvZ0JFRVlhaWtEQURjREFDQUxRU0JxSUFSQklHb3BBd0EzQXdBZ0MwRW9haUFFUVNocUtRTUFOd01BSUF0Qk1Hb2dCRUV3YWlrREFEY0RBQ0FMUVRocUlBUkJPR29wQXdBM0F3QWdDMEhBQUdvZ0JFSEFBR29wQXdBM0F3QWdDMEhJQUdvZ0JFSElBR29wQXdBM0F3QWdDMEhRQUdvZ0JFSFFBR29wQXdBM0F3QWdDMEhZQUdvZ0JFSFlBR29wQXdBM0F3QWdDMEhnQUdvZ0JFSGdBR29wQXdBM0F3QWdDMEhvQUdvZ0JFSG9BR29wQXdBM0F3QWdDMEh3QUdvZ0JFSHdBR29wQXdBM0F3QWdDMEg0QUdvZ0JFSDRBR29wQXdBM0F3QWdIVUdBQVdvaEhTQWJRWDlxSWhzTkFBc0xJQWdnQnlBVUlBQVFBaUFjSUJOcUlSd2dIeUFUYWlFZklCNUJBbW9pSGlBQlNRMEFDMEVBSVI0RFFBSkFBa0FnQUEwQUlCUWdFQ2tEQURjREFDQVVJQkFwQXdnM0F3Z2dGQ0FRS1FNUU53TVFJQlFnRUNrREdEY0RHQ0FVSUJBcEF5QTNBeUFnRkNBUUtRTW9Od01vSUJRZ0VDa0RNRGNETUNBVUlCQXBBemczQXpnTUFRc2dBQ0FLSUJJcEFnQWdFWU9uUVFkMGFtd2hIeUFGSVIwZ0FDRWJBMEFnSFNBTWFpSUxJQXNwQXdBZ0hTQWZhaUlFS1FNQWhUY0RBQ0FMUVFocUlod2dIQ2tEQUNBRVFRaHFLUU1BaFRjREFDQUxRUkJxSWh3Z0hDa0RBQ0FFUVJCcUtRTUFoVGNEQUNBTFFSaHFJaHdnSENrREFDQUVRUmhxS1FNQWhUY0RBQ0FMUVNCcUlod2dIQ2tEQUNBRVFTQnFLUU1BaFRjREFDQUxRU2hxSWh3Z0hDa0RBQ0FFUVNocUtRTUFoVGNEQUNBTFFUQnFJaHdnSENrREFDQUVRVEJxS1FNQWhUY0RBQ0FMUVRocUlod2dIQ2tEQUNBRVFUaHFLUU1BaFRjREFDQUxRY0FBYWlJY0lCd3BBd0FnQkVIQUFHb3BBd0NGTndNQUlBdEJ5QUJxSWh3Z0hDa0RBQ0FFUWNnQWFpa0RBSVUzQXdBZ0MwSFFBR29pSENBY0tRTUFJQVJCMEFCcUtRTUFoVGNEQUNBTFFkZ0FhaUljSUJ3cEF3QWdCRUhZQUdvcEF3Q0ZOd01BSUF0QjRBQnFJaHdnSENrREFDQUVRZUFBYWlrREFJVTNBd0FnQzBIb0FHb2lIQ0FjS1FNQUlBUkI2QUJxS1FNQWhUY0RBQ0FMUWZBQWFpSWNJQndwQXdBZ0JFSHdBR29wQXdDRk53TUFJQXRCK0FCcUlnc2dDeWtEQUNBRVFmZ0FhaWtEQUlVM0F3QWdIVUdBQVdvaEhTQWJRWDlxSWhzTkFBc2dCeUFJSUJRZ0FCQUNJQUFnQ2lBSktRSUFJQkdEcDBFSGRHcHNJUjhnQlNFZElBQWhHd05BSUIwZ0RXb2lDeUFMS1FNQUlCMGdIMm9pQkNrREFJVTNBd0FnQzBFSWFpSWNJQndwQXdBZ0JFRUlhaWtEQUlVM0F3QWdDMEVRYWlJY0lCd3BBd0FnQkVFUWFpa0RBSVUzQXdBZ0MwRVlhaUljSUJ3cEF3QWdCRUVZYWlrREFJVTNBd0FnQzBFZ2FpSWNJQndwQXdBZ0JFRWdhaWtEQUlVM0F3QWdDMEVvYWlJY0lCd3BBd0FnQkVFb2Fpa0RBSVUzQXdBZ0MwRXdhaUljSUJ3cEF3QWdCRUV3YWlrREFJVTNBd0FnQzBFNGFpSWNJQndwQXdBZ0JFRTRhaWtEQUlVM0F3QWdDMEhBQUdvaUhDQWNLUU1BSUFSQndBQnFLUU1BaFRjREFDQUxRY2dBYWlJY0lCd3BBd0FnQkVISUFHb3BBd0NGTndNQUlBdEIwQUJxSWh3Z0hDa0RBQ0FFUWRBQWFpa0RBSVUzQXdBZ0MwSFlBR29pSENBY0tRTUFJQVJCMkFCcUtRTUFoVGNEQUNBTFFlQUFhaUljSUJ3cEF3QWdCRUhnQUdvcEF3Q0ZOd01BSUF0QjZBQnFJaHdnSENrREFDQUVRZWdBYWlrREFJVTNBd0FnQzBId0FHb2lIQ0FjS1FNQUlBUkI4QUJxS1FNQWhUY0RBQ0FMUWZnQWFpSUxJQXNwQXdBZ0JFSDRBR29wQXdDRk53TUFJQjFCZ0FGcUlSMGdHMEYvYWlJYkRRQUxDeUFJSUFjZ0ZDQUFFQUlnSGtFQ2FpSWVJQUZKRFFBTEN3SkFJQUJGRFFCQkFDRWJBa0FnRmcwQUlCa2dGMm9oSEVFQUlRdEJBQ0ViQTBBZ0hDQUxhaUlFSUFjZ0Myb2lIU2dDQURZQ0FDQUVRUVJxSUIxQkJHb29BZ0EyQWdBZ0JFRUlhaUFkUVFocUtBSUFOZ0lBSUFSQkRHb2dIVUVNYWlnQ0FEWUNBQ0FMUVJCcUlRc2dEaUFiUVFScUlodEhEUUFMQ3lBUFJRMEFJQm9nRzBFQ2RDSUxhaUFISUF0cUtBSUFOZ0lBQ3lBWElBTnFJUmNnR0VFQmFpSVlJQUpIRFFBTEN3cz1cIjtcbnZhciBoYXNoJDMgPSBcImM1MWI4YmY3XCI7XG52YXIgd2FzbUpzb24kMyA9IHtcblx0bmFtZTogbmFtZSQzLFxuXHRkYXRhOiBkYXRhJDMsXG5cdGhhc2g6IGhhc2gkM1xufTtcblxuZnVuY3Rpb24gc2NyeXB0SW50ZXJuYWwob3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHsgY29zdEZhY3RvciwgYmxvY2tTaXplLCBwYXJhbGxlbGlzbSwgaGFzaExlbmd0aCwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IFNIQTI1Nkhhc2hlciA9IGNyZWF0ZVNIQTI1NigpO1xuICAgICAgICBjb25zdCBibG9ja0RhdGEgPSB5aWVsZCBwYmtkZjIoe1xuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICBzYWx0OiBvcHRpb25zLnNhbHQsXG4gICAgICAgICAgICBpdGVyYXRpb25zOiAxLFxuICAgICAgICAgICAgaGFzaExlbmd0aDogMTI4ICogYmxvY2tTaXplICogcGFyYWxsZWxpc20sXG4gICAgICAgICAgICBoYXNoRnVuY3Rpb246IFNIQTI1Nkhhc2hlcixcbiAgICAgICAgICAgIG91dHB1dFR5cGU6ICdiaW5hcnknLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2NyeXB0SW50ZXJmYWNlID0geWllbGQgV0FTTUludGVyZmFjZSh3YXNtSnNvbiQzLCAwKTtcbiAgICAgICAgLy8gbGFzdCBibG9jayBpcyBmb3Igc3RvcmluZyB0aGUgdGVtcG9yYXJ5IHZlY3RvcnNcbiAgICAgICAgY29uc3QgVlNpemUgPSAxMjggKiBibG9ja1NpemUgKiBjb3N0RmFjdG9yO1xuICAgICAgICBjb25zdCBYWVNpemUgPSAyNTYgKiBibG9ja1NpemU7XG4gICAgICAgIHNjcnlwdEludGVyZmFjZS5zZXRNZW1vcnlTaXplKGJsb2NrRGF0YS5sZW5ndGggKyBWU2l6ZSArIFhZU2l6ZSk7XG4gICAgICAgIHNjcnlwdEludGVyZmFjZS53cml0ZU1lbW9yeShibG9ja0RhdGEsIDApO1xuICAgICAgICAvLyBtaXggYmxvY2tzXG4gICAgICAgIHNjcnlwdEludGVyZmFjZS5nZXRFeHBvcnRzKCkuc2NyeXB0KGJsb2NrU2l6ZSwgY29zdEZhY3RvciwgcGFyYWxsZWxpc20pO1xuICAgICAgICBjb25zdCBleHBlbnNpdmVTYWx0ID0gc2NyeXB0SW50ZXJmYWNlXG4gICAgICAgICAgICAuZ2V0TWVtb3J5KClcbiAgICAgICAgICAgIC5zdWJhcnJheSgwLCAxMjggKiBibG9ja1NpemUgKiBwYXJhbGxlbGlzbSk7XG4gICAgICAgIGNvbnN0IG91dHB1dERhdGEgPSB5aWVsZCBwYmtkZjIoe1xuICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICBzYWx0OiBleHBlbnNpdmVTYWx0LFxuICAgICAgICAgICAgaXRlcmF0aW9uczogMSxcbiAgICAgICAgICAgIGhhc2hMZW5ndGgsXG4gICAgICAgICAgICBoYXNoRnVuY3Rpb246IFNIQTI1Nkhhc2hlcixcbiAgICAgICAgICAgIG91dHB1dFR5cGU6ICdiaW5hcnknLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0VHlwZSA9PT0gJ2hleCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2VzdENoYXJzID0gbmV3IFVpbnQ4QXJyYXkoaGFzaExlbmd0aCAqIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdldERpZ2VzdEhleChkaWdlc3RDaGFycywgb3V0cHV0RGF0YSwgaGFzaExlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGJpbmFyeSBmb3JtYXRcbiAgICAgICAgcmV0dXJuIG91dHB1dERhdGE7XG4gICAgfSk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuY29uc3QgaXNQb3dlck9mVHdvID0gKHYpID0+IHYgJiYgISh2ICYgKHYgLSAxKSk7XG5jb25zdCB2YWxpZGF0ZU9wdGlvbnMkMSA9IChvcHRpb25zKSA9PiB7XG4gICAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3B0aW9ucyBwYXJhbWV0ZXIuIEl0IHJlcXVpcmVzIGFuIG9iamVjdC4nKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMuYmxvY2tTaXplKSB8fCBvcHRpb25zLmJsb2NrU2l6ZSA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCbG9jayBzaXplIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5jb3N0RmFjdG9yKVxuICAgICAgICB8fCBvcHRpb25zLmNvc3RGYWN0b3IgPCAyXG4gICAgICAgIHx8ICFpc1Bvd2VyT2ZUd28ob3B0aW9ucy5jb3N0RmFjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvc3QgZmFjdG9yIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIsIGdyZWF0ZXIgdGhhbiAxJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLnBhcmFsbGVsaXNtKSB8fCBvcHRpb25zLnBhcmFsbGVsaXNtIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFsbGVsaXNtIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5oYXNoTGVuZ3RoKSB8fCBvcHRpb25zLmhhc2hMZW5ndGggPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaCBsZW5ndGggc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5vdXRwdXRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3B0aW9ucy5vdXRwdXRUeXBlID0gJ2hleCc7XG4gICAgfVxuICAgIGlmICghWydoZXgnLCAnYmluYXJ5J10uaW5jbHVkZXMob3B0aW9ucy5vdXRwdXRUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3VwcG9ydGVkIG91dHB1dCB0eXBlICR7b3B0aW9ucy5vdXRwdXRUeXBlfS4gVmFsaWQgdmFsdWVzOiBbJ2hleCcsICdiaW5hcnknXWApO1xuICAgIH1cbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgaGFzaCB1c2luZyB0aGUgc2NyeXB0IHBhc3N3b3JkLWJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nIG9yIGFzXG4gKiAgICAgICAgICBVaW50OEFycmF5IGRlcGVuZGluZyBvbiB0aGUgb3V0cHV0VHlwZSBvcHRpb25cbiAqL1xuZnVuY3Rpb24gc2NyeXB0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB2YWxpZGF0ZU9wdGlvbnMkMShvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHNjcnlwdEludGVybmFsKG9wdGlvbnMpO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSQyID0gXCJiY3J5cHRcIjtcbnZhciBkYXRhJDIgPSBcIkFHRnpiUUVBQUFBQkZ3UmdBQUYvWUFSL2YzOS9BR0FEZjM5L0FHQUJmd0YvQXdVRUFBRUNBd1VFQVFFQ0FnWUlBWDhCUVpDckJRc0hOQVFHYldWdGIzSjVBZ0FPU0dGemFGOUhaWFJDZFdabVpYSUFBQVppWTNKNWNIUUFBZzFpWTNKNWNIUmZkbVZ5YVdaNUFBTUsrR0FFQlFCQmdDc0wzbGtFRkg4QmZnaC9BWDRqQUVId0FHc2hCQ0FDUVFBNkFBSWdBa0dxNEFBN0FBQUNRQ0FCTFFBQVFTcEhEUUFnQVMwQUFVRXdSdzBBSUFKQk1Ub0FBUXNDUUNBQkxBQUZJQUVzQUFSQkNteHFRZkI3YWlJRlFRUkpEUUFnQVMwQUIwRmdhaUlHUWQ4QVN3MEFJQVpCa0FscUxRQUFJZ1pCUDBzTkFDQUJMUUFJUVdCcUlnZEIzd0JMRFFBZ0IwR1FDV290QUFBaUIwRS9TdzBBSUFRZ0IwRUVkaUFHUVFKMGNqb0FDQ0FCTFFBSlFXQnFJZ1pCM3dCTERRQWdCa0dRQ1dvdEFBQWlCa0UvU3cwQUlBUWdCa0VDZGlBSFFRUjBjam9BQ1NBQkxRQUtRV0JxSWdkQjN3QkxEUUFnQjBHUUNXb3RBQUFpQjBFL1N3MEFJQVFnQnlBR1FRWjBjam9BQ2lBQkxRQUxRV0JxSWdaQjN3QkxEUUFnQmtHUUNXb3RBQUFpQmtFL1N3MEFJQUV0QUF4QllHb2lCMEhmQUVzTkFDQUhRWkFKYWkwQUFDSUhRVDlMRFFBZ0JDQUhRUVIySUFaQkFuUnlPZ0FMSUFFdEFBMUJZR29pQmtIZkFFc05BQ0FHUVpBSmFpMEFBQ0lHUVQ5TERRQWdCQ0FHUVFKMklBZEJCSFJ5T2dBTUlBRXRBQTVCWUdvaUIwSGZBRXNOQUNBSFFaQUphaTBBQUNJSFFUOUxEUUFnQkNBSElBWkJCblJ5T2dBTklBRXRBQTlCWUdvaUJrSGZBRXNOQUNBR1FaQUphaTBBQUNJR1FUOUxEUUFnQVMwQUVFRmdhaUlIUWQ4QVN3MEFJQWRCa0FscUxRQUFJZ2RCUDBzTkFDQUVJQWRCQkhZZ0JrRUNkSEk2QUE0Z0FTMEFFVUZnYWlJR1FkOEFTdzBBSUFaQmtBbHFMUUFBSWdaQlAwc05BQ0FFSUFaQkFuWWdCMEVFZEhJNkFBOGdBUzBBRWtGZ2FpSUhRZDhBU3cwQUlBZEJrQWxxTFFBQUlnZEJQMHNOQUNBRUlBY2dCa0VHZEhJNkFCQWdBUzBBRTBGZ2FpSUdRZDhBU3cwQUlBWkJrQWxxTFFBQUlnWkJQMHNOQUNBQkxRQVVRV0JxSWdkQjN3QkxEUUFnQjBHUUNXb3RBQUFpQjBFL1N3MEFJQVFnQjBFRWRpQUdRUUowY2pvQUVTQUJMUUFWUVdCcUlnWkIzd0JMRFFBZ0JrR1FDV290QUFBaUJrRS9TdzBBSUFRZ0JrRUNkaUFIUVFSMGNqb0FFaUFCTFFBV1FXQnFJZ2RCM3dCTERRQWdCMEdRQ1dvdEFBQWlCMEUvU3cwQUlBUWdCeUFHUVFaMGNqb0FFeUFCTFFBWFFXQnFJZ1pCM3dCTERRQWdCa0dRQ1dvdEFBQWlCa0UvU3cwQUlBRXRBQmhCWUdvaUIwSGZBRXNOQUNBSFFaQUphaTBBQUNJSFFUOUxEUUFnQkNBSFFRUjJJQVpCQW5SeU9nQVVJQUV0QUJsQllHb2lCa0hmQUVzTkFDQUdRWkFKYWkwQUFDSUdRVDlMRFFBZ0JDQUdRUUoySUFkQkJIUnlPZ0FWSUFFdEFCcEJZR29pQjBIZkFFc05BQ0FIUVpBSmFpMEFBQ0lIUVQ5TERRQWdCQ0FISUFaQkJuUnlPZ0FXSUFFdEFCdEJZR29pQmtIZkFFc05BQ0FHUVpBSmFpMEFBQ0lHUVQ5TERRQWdBUzBBSEVGZ2FpSUhRZDhBU3cwQUlBZEJrQWxxTFFBQUlnZEJQMHNOQUVFQklBVjBJUWdnQkNBSFFRUjJJQVpCQW5SeU9nQVhJQVFnQkNnQ0NDSUZRUmgwSUFWQmdQNERjVUVJZEhJZ0JVRUlka0dBL2dOeElBVkJHSFp5Y2lJSk5nSUlJQVFnQkNnQ0RDSUZRUmgwSUFWQmdQNERjVUVJZEhJZ0JVRUlka0dBL2dOeElBVkJHSFp5Y2lJS05nSU1JQVFnQkNnQ0VDSUZRUmgwSUFWQmdQNERjVUVJZEhJZ0JVRUlka0dBL2dOeElBVkJHSFp5Y2lJTE5nSVFJQVFnQkNnQ0ZDSUZRUmgwSUFWQmdQNERjVUVJZEhJZ0JVRUlka0dBL2dOeElBVkJHSFp5Y2lJTU5nSVVJQVJCNkFCcUlBRXRBQUpCbndkcUxRQUFJZzFCQVhGQkFuUnFJUTVCQUNFR1FRQWhEMEVBSVJBZ0FDRUZBMEFnQkVJQU53Sm9JQVV0QUFBaEJ5QUVRUUEyQW13Z0JDQUhOZ0pvSUFRZ0JTd0FBQ0lSTmdKc0lBVXRBQUFoRWlBRUlBZEJDSFFpQnpZQ2FDQUVJQWNnQlVFQmFpQUFJQkliSWdVdEFBQnlJZ2MyQW1nZ0JDQVJRUWgwSWhFMkFtd2dCQ0FSSUFVc0FBQWlFbklpRVRZQ2JDQUZMUUFBSVJNZ0JDQUhRUWgwSWdjMkFtZ2dCQ0FISUFWQkFXb2dBQ0FUR3lJRkxRQUFjaUlITmdKb0lBUWdFVUVJZENJUk5nSnNJQVFnRVNBRkxBQUFJaE55SWhFMkFtd2dCUzBBQUNFVUlBUWdCMEVJZENJSE5nSm9JQVFnQnlBRlFRRnFJQUFnRkJzaUJTMEFBSElpQnpZQ2FDQUVJQkZCQ0hRaUVUWUNiQ0FFSUJFZ0JTd0FBQ0lVY2lJUk5nSnNJQVV0QUFBaEZTQUVRU0JxSUFacUlBNG9BZ0FpRmpZQ0FDQUdRZkFwYWlJWElCWWdGeWdDQUhNMkFnQWdFU0FIY3lBUGNpRVBJQVZCQVdvZ0FDQVZHeUVGSUJRZ0V5QVNjbkpCZ0FGeElCQnlJUkFnQmtFRWFpSUdRY2dBUncwQUMwRUFRUUFvQXZBcElCQkJDWFFnRFVFUGRIRkJnSUFFSUE5Qi8vOERjU0FQUVJCMmNtdHhjellDOENsQ0FDRVlRWDRoQmtId0tTRUhBMEJCQUNnQ3JDcEJBQ2dDcUNwQkFDZ0NwQ3BCQUNnQ29DcEJBQ2dDbkNwQkFDZ0NtQ3BCQUNnQ2xDcEJBQ2dDa0NwQkFDZ0NqQ3BCQUNnQ2lDcEJBQ2dDaENwQkFDZ0NnQ3BCQUNnQy9DbEJBQ2dDK0NsQkFDZ0M5Q2tnQkVFSWFpQUdRUUpxSWdaQkFuRkJBblJxS1FNQUlCaUZJaGhDSUlpbmMwRUFLQUx3S1NBWXAzTWlBRUVXZGtIOEIzRkI4QWxxS0FJQUlBQkJEblpCL0FkeFFmQVJhaWdDQUdvZ0FFRUdka0g4QjNGQjhCbHFLQUlBY3lBQVFmOEJjVUVDZEVId0lXb29BZ0JxY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQUJ6SWdCQkZuWkIvQWR4UWZBSmFpZ0NBQ0FBUVE1MlFmd0hjVUh3RVdvb0FnQnFJQUJCQm5aQi9BZHhRZkFaYWlnQ0FITWdBRUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCWE1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUFjeUlBUVJaMlFmd0hjVUh3Q1dvb0FnQWdBRUVPZGtIOEIzRkI4QkZxS0FJQWFpQUFRUVoyUWZ3SGNVSHdHV29vQWdCeklBQkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0FITWlBRUVXZGtIOEIzRkI4QWxxS0FJQUlBQkJEblpCL0FkeFFmQVJhaWdDQUdvZ0FFRUdka0g4QjNGQjhCbHFLQUlBY3lBQVFmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFCeklnQkJGblpCL0FkeFFmQUphaWdDQUNBQVFRNTJRZndIY1VId0VXb29BZ0JxSUFCQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQUVIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFBY3lJQVFSWjJRZndIY1VId0NXb29BZ0FnQUVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFBUVFaMlFmd0hjVUh3R1dvb0FnQnpJQUJCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdBSE1pQUVFV2RrSDhCM0ZCOEFscUtBSUFJQUJCRG5aQi9BZHhRZkFSYWlnQ0FHb2dBRUVHZGtIOEIzRkI4QmxxS0FJQWN5QUFRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBQnpJZ0JCRm5aQi9BZHhRZkFKYWlnQ0FDQUFRUTUyUWZ3SGNVSHdFV29vQWdCcUlBQkJCblpCL0FkeFFmQVphaWdDQUhNZ0FFSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUgvQVhGQkFuUkI4Q0ZxS0FJQUlROGdCVUVHZGtIOEIzRkI4QmxxS0FJQUlSQWdCVUVXZGtIOEIzRkI4QWxxS0FJQUlSRWdCVUVPZGtIOEIzRkI4QkZxS0FJQUlSSkJBQ2dDc0NvaEUwRUFRUUFvQXJRcUlBVnpOZ0tBcXdGQkFDQVRJQThnRUNBUklCSnFjMnB6SUFCek5nS0Vxd0VnQjBFQUtRT0Fxd0VpR0RjQ0FDQUhRUWhxSVFjZ0JrRVFTUTBBQ3lBWVFpQ0lweUVGSUJpbklRWkI4QWtoQUFOQVFRQW9BcXdxUVFBb0FxZ3FRUUFvQXFRcVFRQW9BcUFxUVFBb0Fwd3FRUUFvQXBncVFRQW9BcFFxUVFBb0FwQXFRUUFvQW93cVFRQW9Bb2dxUVFBb0FvUXFRUUFvQW9BcVFRQW9BdndwUVFBb0F2Z3BJQVZCQUNnQzlDbHpJQVpCQUNnQzhDbHpJQXR6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdESE1pQmtFV2RrSDhCM0ZCOEFscUtBSUFJQVpCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCa0VHZGtIOEIzRkI4QmxxS0FJQWN5QUdRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBWnpJZ1pCRm5aQi9BZHhRZkFKYWlnQ0FDQUdRUTUyUWZ3SGNVSHdFV29vQWdCcUlBWkJCblpCL0FkeFFmQVphaWdDQUhNZ0JrSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBR2N5SUdRUloyUWZ3SGNVSHdDV29vQWdBZ0JrRU9ka0g4QjNGQjhCRnFLQUlBYWlBR1FRWjJRZndIY1VId0dXb29BZ0J6SUFaQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQm5NaUJrRVdka0g4QjNGQjhBbHFLQUlBSUFaQkRuWkIvQWR4UWZBUmFpZ0NBR29nQmtFR2RrSDhCM0ZCOEJscUtBSUFjeUFHUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVp6SWdaQkZuWkIvQWR4UWZBSmFpZ0NBQ0FHUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVpCQm5aQi9BZHhRZkFaYWlnQ0FITWdCa0gvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCWE1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUdjeUlHUVJaMlFmd0hjVUh3Q1dvb0FnQWdCa0VPZGtIOEIzRkI4QkZxS0FJQWFpQUdRUVoyUWZ3SGNVSHdHV29vQWdCeklBWkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JuTWlCa0VXZGtIOEIzRkI4QWxxS0FJQUlBWkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JrRUdka0g4QjNGQjhCbHFLQUlBY3lBR1FmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFaeklnWkIvd0Z4UVFKMFFmQWhhaWdDQUNFSElBWkJCblpCL0FkeFFmQVphaWdDQUNFUElBWkJGblpCL0FkeFFmQUphaWdDQUNFUUlBWkJEblpCL0FkeFFmQVJhaWdDQUNFUlFRQW9BckFxSVJJZ0FFRUFLQUswS2lBR2N5SUdOZ0lBSUFCQkJHb2dFaUFISUE4Z0VDQVJhbk5xY3lBRmN5SUhOZ0lBUVFBb0Fxd3FRUUFvQXFncVFRQW9BcVFxUVFBb0FxQXFRUUFvQXB3cVFRQW9BcGdxUVFBb0FwUXFRUUFvQXBBcVFRQW9Bb3dxUVFBb0FvZ3FRUUFvQW9RcVFRQW9Bb0FxUVFBb0F2d3BRUUFvQXZncFFRQW9BdlFwSUFsQkFDZ0M4Q2x6SUFaeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQ25NZ0IzTWlCa0VXZGtIOEIzRkI4QWxxS0FJQUlBWkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JrRUdka0g4QjNGQjhCbHFLQUlBY3lBR1FmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFaeklnWkJGblpCL0FkeFFmQUphaWdDQUNBR1FRNTJRZndIY1VId0VXb29BZ0JxSUFaQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQmtIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFHY3lJR1FSWjJRZndIY1VId0NXb29BZ0FnQmtFT2RrSDhCM0ZCOEJGcUtBSUFhaUFHUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVpCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCbk1pQmtFV2RrSDhCM0ZCOEFscUtBSUFJQVpCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCa0VHZGtIOEIzRkI4QmxxS0FJQWN5QUdRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBWnpJZ1pCRm5aQi9BZHhRZkFKYWlnQ0FDQUdRUTUyUWZ3SGNVSHdFV29vQWdCcUlBWkJCblpCL0FkeFFmQVphaWdDQUhNZ0JrSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBR2N5SUdRUloyUWZ3SGNVSHdDV29vQWdBZ0JrRU9ka0g4QjNGQjhCRnFLQUlBYWlBR1FRWjJRZndIY1VId0dXb29BZ0J6SUFaQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQm5NaUJrRVdka0g4QjNGQjhBbHFLQUlBSUFaQkRuWkIvQWR4UWZBUmFpZ0NBR29nQmtFR2RrSDhCM0ZCOEJscUtBSUFjeUFHUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVp6SWdaQi93RnhRUUowUWZBaGFpZ0NBQ0VISUFaQkJuWkIvQWR4UWZBWmFpZ0NBQ0VQSUFaQkZuWkIvQWR4UWZBSmFpZ0NBQ0VRSUFaQkRuWkIvQWR4UWZBUmFpZ0NBQ0VSUVFBb0FyQXFJUklnQUVFSWFrRUFLQUswS2lBR2N5SUdOZ0lBSUFCQkRHb2dFaUFISUE4Z0VDQVJhbk5xY3lBRmN5SUZOZ0lBSUFCQkVHb2lBRUhzS1VrTkFBdEJBQ0FGTmdLRXF3RkJBQ0FHTmdLQXF3RWdCQ2dDWkNFVUlBUW9BbUFoRlNBRUtBSmNJUllnQkNnQ1dDRVhJQVFvQWxRaENTQUVLQUpRSVFvZ0JDZ0NUQ0VMSUFRb0FrZ2hEQ0FFS0FKRUlRNGdCQ2dDUUNFTklBUW9BandoR1NBRUtBSTRJUm9nQkNnQ05DRWJJQVFvQWpBaEhDQUVLQUlzSVIwZ0JDZ0NLQ0VlSUFRb0FpUWhIeUFFS0FJZ0lTQWdCQ2tERUNFaElBUXBBd2doR0FOQVFRQkJBQ2dDOENrZ0lITTJBdkFwUVFCQkFDZ0M5Q2tnSDNNMkF2UXBRUUJCQUNnQytDa2dIbk0yQXZncFFRQkJBQ2dDL0NrZ0hYTTJBdndwUVFCQkFDZ0NnQ29nSEhNMkFvQXFRUUJCQUNnQ2hDb2dHM00yQW9RcVFRQkJBQ2dDaUNvZ0duTTJBb2dxUVFCQkFDZ0NqQ29nR1hNMkFvd3FRUUJCQUNnQ2tDb2dEWE0yQXBBcVFRQkJBQ2dDbENvZ0RuTTJBcFFxUVFCQkFDZ0NtQ29nREhNMkFwZ3FRUUJCQUNnQ25Db2dDM00yQXB3cVFRQkJBQ2dDb0NvZ0NuTTJBcUFxUVFCQkFDZ0NwQ29nQ1hNMkFxUXFRUUJCQUNnQ3FDb2dGM00yQXFncVFRQkJBQ2dDckNvZ0ZuTTJBcXdxUVFCQkFDZ0NzQ29nRlhNMkFyQXFRUUJCQUNnQ3RDb2dGSE0yQXJRcVFRRWhFd05BUVFBaEFFRUFRZ0EzQTRDckFVSHdLU0VHUVFBaEJRTkFRUUFvQXF3cVFRQW9BcWdxUVFBb0FxUXFRUUFvQXFBcVFRQW9BcHdxUVFBb0FwZ3FRUUFvQXBRcVFRQW9BcEFxUVFBb0Fvd3FRUUFvQW9ncVFRQW9Bb1FxUVFBb0FvQXFRUUFvQXZ3cFFRQW9BdmdwUVFBb0F2UXBJQUJ6UVFBb0F2QXBJQVZ6SWdCQkZuWkIvQWR4UWZBSmFpZ0NBQ0FBUVE1MlFmd0hjVUh3RVdvb0FnQnFJQUJCQm5aQi9BZHhRZkFaYWlnQ0FITWdBRUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBQWN5SUFRUloyUWZ3SGNVSHdDV29vQWdBZ0FFRU9ka0g4QjNGQjhCRnFLQUlBYWlBQVFRWjJRZndIY1VId0dXb29BZ0J6SUFCQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQUhNaUFFRVdka0g4QjNGQjhBbHFLQUlBSUFCQkRuWkIvQWR4UWZBUmFpZ0NBR29nQUVFR2RrSDhCM0ZCOEJscUtBSUFjeUFBUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQUJ6SWdCQkZuWkIvQWR4UWZBSmFpZ0NBQ0FBUVE1MlFmd0hjVUh3RVdvb0FnQnFJQUJCQm5aQi9BZHhRZkFaYWlnQ0FITWdBRUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCWE1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUFjeUlBUVJaMlFmd0hjVUh3Q1dvb0FnQWdBRUVPZGtIOEIzRkI4QkZxS0FJQWFpQUFRUVoyUWZ3SGNVSHdHV29vQWdCeklBQkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0FITWlBRUVXZGtIOEIzRkI4QWxxS0FJQUlBQkJEblpCL0FkeFFmQVJhaWdDQUdvZ0FFRUdka0g4QjNGQjhCbHFLQUlBY3lBQVFmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFCeklnQkJGblpCL0FkeFFmQUphaWdDQUNBQVFRNTJRZndIY1VId0VXb29BZ0JxSUFCQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQUVIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFBY3lJQVFSWjJRZndIY1VId0NXb29BZ0FnQUVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFBUVFaMlFmd0hjVUh3R1dvb0FnQnpJQUJCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQi93RnhRUUowUWZBaGFpZ0NBQ0VISUFWQkJuWkIvQWR4UWZBWmFpZ0NBQ0VQSUFWQkZuWkIvQWR4UWZBSmFpZ0NBQ0VRSUFWQkRuWkIvQWR4UWZBUmFpZ0NBQ0VSUVFBb0FyQXFJUklnQmtFQUtBSzBLaUFGY3lJRk5nSUFJQVpCQkdvZ0VpQUhJQThnRUNBUmFuTnFjeUFBY3lJQU5nSUFJQVpCQ0dvaUJrRzRLa2tOQUF0QjhBa2hCZ05BUVFBb0Fxd3FRUUFvQXFncVFRQW9BcVFxUVFBb0FxQXFRUUFvQXB3cVFRQW9BcGdxUVFBb0FwUXFRUUFvQXBBcVFRQW9Bb3dxUVFBb0FvZ3FRUUFvQW9RcVFRQW9Bb0FxUVFBb0F2d3BRUUFvQXZncFFRQW9BdlFwSUFCelFRQW9BdkFwSUFWeklnQkJGblpCL0FkeFFmQUphaWdDQUNBQVFRNTJRZndIY1VId0VXb29BZ0JxSUFCQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQUVIL0FYRkJBblJCOENGcUtBSUFhbk1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUFjeUlBUVJaMlFmd0hjVUh3Q1dvb0FnQWdBRUVPZGtIOEIzRkI4QkZxS0FJQWFpQUFRUVoyUWZ3SGNVSHdHV29vQWdCeklBQkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0FITWlBRUVXZGtIOEIzRkI4QWxxS0FJQUlBQkJEblpCL0FkeFFmQVJhaWdDQUdvZ0FFRUdka0g4QjNGQjhCbHFLQUlBY3lBQVFmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFCeklnQkJGblpCL0FkeFFmQUphaWdDQUNBQVFRNTJRZndIY1VId0VXb29BZ0JxSUFCQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQUVIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFBY3lJQVFSWjJRZndIY1VId0NXb29BZ0FnQUVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFBUVFaMlFmd0hjVUh3R1dvb0FnQnpJQUJCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdBSE1pQUVFV2RrSDhCM0ZCOEFscUtBSUFJQUJCRG5aQi9BZHhRZkFSYWlnQ0FHb2dBRUVHZGtIOEIzRkI4QmxxS0FJQWN5QUFRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBQnpJZ0JCRm5aQi9BZHhRZkFKYWlnQ0FDQUFRUTUyUWZ3SGNVSHdFV29vQWdCcUlBQkJCblpCL0FkeFFmQVphaWdDQUhNZ0FFSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBQWN5SUFRUloyUWZ3SGNVSHdDV29vQWdBZ0FFRU9ka0g4QjNGQjhCRnFLQUlBYWlBQVFRWjJRZndIY1VId0dXb29BZ0J6SUFCQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkIvd0Z4UVFKMFFmQWhhaWdDQUNFSElBVkJCblpCL0FkeFFmQVphaWdDQUNFUElBVkJGblpCL0FkeFFmQUphaWdDQUNFUUlBVkJEblpCL0FkeFFmQVJhaWdDQUNFUlFRQW9BckFxSVJJZ0JrRUFLQUswS2lBRmN5SUZOZ0lBSUFaQkJHb2dFaUFISUE4Z0VDQVJhbk5xY3lBQWN5SUFOZ0lBSUFaQkNHb2lCa0hzS1VrTkFBdEJBQ0FBTmdLRXF3RkJBQ0FGTmdLQXF3RUNRQ0FUUVFGeFJRMEFRUUFoRTBFQVFRQXBBdkFwSUJpRk53THdLVUVBUVFBcEF2Z3BJQ0dGTndMNEtVRUFRUUFwQW9BcUlCaUZOd0tBS2tFQVFRQXBBb2dxSUNHRk53S0lLa0VBUVFBcEFwQXFJQmlGTndLUUtrRUFRUUFwQXBncUlDR0ZOd0tZS2tFQVFRQXBBcUFxSUJpRk53S2dLa0VBUVFBcEFxZ3FJQ0dGTndLb0trRUFRUUFwQXJBcUlCaUZOd0t3S2d3QkN3c2dDRUYvYWlJSURRQUxRUUFvQXJRcUlROUJBQ2dDc0NvaEVFRUFLQUtzS2lFUlFRQW9BcWdxSVJKQkFDZ0NwQ29oRTBFQUtBS2dLaUVJUVFBb0Fwd3FJUlJCQUNnQ21Db2hGVUVBS0FLVUtpRVdRUUFvQXBBcUlSZEJBQ2dDakNvaENVRUFLQUtJS2lFS1FRQW9Bb1FxSVF0QkFDZ0NnQ29oREVFQUtBTDhLU0VPUVFBb0F2Z3BJUTFCQUNnQzlDa2hHVUVBS0FMd0tTRWFRUUFoR3dOQUlCdEJBblFpSEVHZ0NHb3BBd0FpR0tjaEFDQVlRaUNJcHlFR1FVQWhCd05BSUJBZ0VTQVNJQk1nQ0NBVUlCVWdGaUFYSUFrZ0NpQUxJQXdnRGlBTklBWWdHWE1nQUNBYWN5SUFRUloyUWZ3SGNVSHdDV29vQWdBZ0FFRU9ka0g4QjNGQjhCRnFLQUlBYWlBQVFRWjJRZndIY1VId0dXb29BZ0J6SUFCQi93RnhRUUowUWZBaGFpZ0NBR3B6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdBSE1pQUVFV2RrSDhCM0ZCOEFscUtBSUFJQUJCRG5aQi9BZHhRZkFSYWlnQ0FHb2dBRUVHZGtIOEIzRkI4QmxxS0FJQWN5QUFRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBQnpJZ0JCRm5aQi9BZHhRZkFKYWlnQ0FDQUFRUTUyUWZ3SGNVSHdFV29vQWdCcUlBQkJCblpCL0FkeFFmQVphaWdDQUhNZ0FFSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBQWN5SUFRUloyUWZ3SGNVSHdDV29vQWdBZ0FFRU9ka0g4QjNGQjhCRnFLQUlBYWlBQVFRWjJRZndIY1VId0dXb29BZ0J6SUFCQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQUhNaUFFRVdka0g4QjNGQjhBbHFLQUlBSUFCQkRuWkIvQWR4UWZBUmFpZ0NBR29nQUVFR2RrSDhCM0ZCOEJscUtBSUFjeUFBUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQUJ6SWdCQkZuWkIvQWR4UWZBSmFpZ0NBQ0FBUVE1MlFmd0hjVUh3RVdvb0FnQnFJQUJCQm5aQi9BZHhRZkFaYWlnQ0FITWdBRUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCWE1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUFjeUlBUVJaMlFmd0hjVUh3Q1dvb0FnQWdBRUVPZGtIOEIzRkI4QkZxS0FJQWFpQUFRUVoyUWZ3SGNVSHdHV29vQWdCeklBQkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0FITWlBRUVXZGtIOEIzRkI4QWxxS0FJQUlBQkJEblpCL0FkeFFmQVJhaWdDQUdvZ0FFRUdka0g4QjNGQjhCbHFLQUlBY3lBQVFmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFCeklRWWdCU0FQY3lFQUlBZEJBV29pQncwQUMwRUFJQVkyQW9TckFVRUFJQUEyQW9DckFTQUVRUWhxSUJ4cVFRQXBBNENyQVRjREFDQWJRUVJKSVFBZ0cwRUNhaUViSUFBTkFBc2dBaUFCS0FJQU5nSUFJQUlnQVNnQ0JEWUNCQ0FDSUFFb0FnZzJBZ2dnQWlBQktBSU1OZ0lNSUFJZ0FTZ0NFRFlDRUNBQ0lBRW9BaFEyQWhRZ0FpQUJLQUlZTmdJWUlBSWdBU3dBSEVId0NHb3RBQUJCTUhGQndBaHFMUUFBT2dBY0lBUWdCQ2dDQ0NJQlFSaDBJQUZCZ1A0RGNVRUlkSElnQVVFSWRrR0EvZ054SUFGQkdIWnljaUlITmdJSUlBUWdCQ2dDRENJQlFSaDBJQUZCZ1A0RGNVRUlkSElnQVVFSWRrR0EvZ054SUFGQkdIWnljaUlCTmdJTUlBUWdCQ2dDRUNJQVFSaDBJQUJCZ1A0RGNVRUlkSElnQUVFSWRrR0EvZ054SUFCQkdIWnljaUlBTmdJUUlBUWdCQ2dDRkNJRlFSaDBJQVZCZ1A0RGNVRUlkSElnQlVFSWRrR0EvZ054SUFWQkdIWnljaUlGTmdJVUlBUWdCQ2dDR0NJR1FSaDBJQVpCZ1A0RGNVRUlkSElnQmtFSWRrR0EvZ054SUFaQkdIWnljaUlHTmdJWUlBUWdCQ2dDSENJUFFSaDBJQTlCZ1A0RGNVRUlkSElnRDBFSWRrR0EvZ054SUE5QkdIWnljaUlQTmdJY0FrQUNRQ0FERFFBZ0FpQUVLUU1JTndNQUlBSWdCQ2tERURjRENDQUNJQVFwQXhnM0F4QU1BUXNnQWlBUFFUOXhRY0FJYWkwQUFEb0FPQ0FDSUFWQkduWkJ3QWhxTFFBQU9nQXhJQUlnQUVFL2NVSEFDR290QUFBNkFDZ2dBaUFIUVJwMlFjQUlhaTBBQURvQUlTQUNJQVF0QUFnaUJFRUNka0hBQ0dvdEFBQTZBQjBnQWlBUFFRNTJRVHh4UWNBSWFpMEFBRG9BT3lBQ0lBOUJDblpCUDNGQndBaHFMUUFBT2dBNUlBSWdCa0VTZGtFL2NVSEFDR290QUFBNkFEVWdBaUFHUVFoMlFUOXhRY0FJYWkwQUFEb0FOQ0FDSUFWQkVIWkJQM0ZCd0FocUxRQUFPZ0F3SUFJZ0JVSDhBWEZCQW5aQndBaHFMUUFBT2dBdElBSWdBRUVZZGtFL2NVSEFDR290QUFBNkFDd2dBaUFBUVFwMlFUOXhRY0FJYWkwQUFEb0FLU0FDSUFGQkVuWkJQM0ZCd0FocUxRQUFPZ0FsSUFJZ0FVRUlka0UvY1VIQUNHb3RBQUE2QUNRZ0FpQUhRUkIyUVQ5eFFjQUlhaTBBQURvQUlDQUNJQTlCRkhaQkQzRWdEMEVFZGtFd2NYSkJ3QWhxTFFBQU9nQTZJQUlnRDBFR2RrRURjU0FHUVJaMlFUeHhja0hBQ0dvdEFBQTZBRGNnQWlBR1FReDJRVEJ4SUFaQkhIWnlRY0FJYWkwQUFEb0FOaUFDSUFaQkFuUkJQSEVnQmtFT2RrRURjWEpCd0FocUxRQUFPZ0F6SUFJZ0JrSHdBWEZCQkhZZ0JVRVVka0V3Y1hKQndBaHFMUUFBT2dBeUlBSWdCVUVXZGtFRGNTQUZRUVoyUVR4eGNrSEFDR290QUFBNkFDOGdBaUFGUVFSMFFUQnhJQVZCREhaQkQzRnlRY0FJYWkwQUFEb0FMaUFDSUFCQkRuWkJQSEVnQUVFZWRuSkJ3QWhxTFFBQU9nQXJJQUlnQUVFVWRrRVBjU0FBUVFSMlFUQnhja0hBQ0dvdEFBQTZBQ29nQWlBQVFRWjJRUU54SUFGQkZuWkJQSEZ5UWNBSWFpMEFBRG9BSnlBQ0lBRkJESFpCTUhFZ0FVRWNkbkpCd0FocUxRQUFPZ0FtSUFJZ0FVRUNkRUU4Y1NBQlFRNTJRUU54Y2tIQUNHb3RBQUE2QUNNZ0FpQUJRZkFCY1VFRWRpQUhRUlIyUVRCeGNrSEFDR290QUFBNkFDSWdBaUFIUVJaMlFRTnhJQWRCQm5aQlBIRnlRY0FJYWkwQUFEb0FIeUFDSUFSQkJIUkJNSEVnQjBFTWRrRVBjWEpCd0FocUxRQUFPZ0FlQ3lBQ1FRQTZBRHdMQzRZR0FRWi9Jd0JCNEFCcklnTWtBRUVBSVFRZ0FFR1FLMnBCQURvQUFDQURRU1E2QUVZZ0F5QUJRUXB1SWdCQk1HbzZBRVFnQTBHazVJU2pBallDUUNBRElBQkI5Z0ZzSUFGcVFUQnlPZ0JGSUFOQkFDMEFnQ3NpQVVFQ2RrSEFDR290QUFBNkFFY2dBMEVBTFFDQ0t5SUFRVDl4UWNBSWFpMEFBRG9BU2lBRFFRQXRBSU1ySWdWQkFuWkJ3QWhxTFFBQU9nQkxJQU5CQUMwQWhTc2lCa0UvY1VIQUNHb3RBQUE2QUU0Z0EwRUFMUUNCS3lJSFFRUjJJQUZCQkhSQk1IRnlRY0FJYWkwQUFEb0FTQ0FESUFCQkJuWWdCMEVDZEVFOGNYSkJ3QWhxTFFBQU9nQkpJQU5CQUMwQWhDc2lBVUVFZGlBRlFRUjBRVEJ4Y2tIQUNHb3RBQUE2QUV3Z0F5QUdRUVoySUFGQkFuUkJQSEZ5UWNBSWFpMEFBRG9BVFNBRFFRQXRBSVlySWdGQkFuWkJ3QWhxTFFBQU9nQlBJQU5CQUMwQWlDc2lBRUUvY1VIQUNHb3RBQUE2QUZJZ0EwRUFMUUNKS3lJRlFRSjJRY0FJYWkwQUFEb0FVeUFEUVFBdEFJc3JJZ1pCUDNGQndBaHFMUUFBT2dCV0lBTkJBQzBBakNzaUIwRUNka0hBQ0dvdEFBQTZBRmNnQTBFQUxRQ0hLeUlJUVFSMklBRkJCSFJCTUhGeVFjQUlhaTBBQURvQVVDQURJQUJCQm5ZZ0NFRUNkRUU4Y1hKQndBaHFMUUFBT2dCUklBTkJBQzBBaWlzaUFVRUVkaUFGUVFSMFFUQnhja0hBQ0dvdEFBQTZBRlFnQXlBR1FRWjJJQUZCQW5SQlBIRnlRY0FJYWkwQUFEb0FWU0FEUVFBdEFJMHJJZ0ZCQkhZZ0IwRUVkRUV3Y1hKQndBaHFMUUFBT2dCWUlBTkJBRG9BWFNBRFFRQXRBSTRySWdCQlAzRkJ3QWhxTFFBQU9nQmFJQU5CQUMwQWp5c2lCVUVDZGtIQUNHb3RBQUE2QUZzZ0F5QUFRUVoySUFGQkFuUkJQSEZ5UWNBSWFpMEFBRG9BV1NBRElBVkJCSFJCTUhGQndBaHFMUUFBT2dCY1FaQXJJQU5Cd0FCcUlBTWdBaEFCQTBBZ0JFR0FLMm9nQXlBRWFpSUJMUUFBT2dBQUlBUkJnU3RxSUFGQkFXb3RBQUE2QUFBZ0JFR0NLMm9nQVVFQ2FpMEFBRG9BQUNBRVFZTXJhaUFCUVFOcUxRQUFPZ0FBSUFSQmhDdHFJQUZCQkdvdEFBQTZBQUFnQkVFRmFpSUVRVHhIRFFBTElBTkI0QUJxSkFBTGh3RUNBWDhJZmlNQVFjQUFheUlCSkFBZ0FFRzhLMnBCQURvQUFFRzhLMEdBS3lBQlFRRVFBVUVBS1FPa0t5RUNJQUVwQXlRaEEwRUFLUU9jS3lFRUlBRXBBeHdoQlVFQUtRT3NLeUVHSUFFcEF5d2hCMEVBS1FPMEt5RUlJQUVwQXpRaENTQUJRY0FBYWlRQUlBVWdCRklnQXlBQ1Vtb2dCeUFHVW1wQmYwRUFJQWtnQ0ZJYlJnc0x4eUlDQUVHQUNBdndBUUlFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRUUFBQUFBQUFBQWFIQnlUMEp1WVdWc2IyaGxVM0psWkVSNWNtTjBZblZ2QUFBQUFBQUFBQUF1TDBGQ1EwUkZSa2RJU1VwTFRFMU9UMUJSVWxOVVZWWlhXRmxhWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWG93TVRJek5EVTJOemc1QUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQUFBRTJOemc1T2pzOFBUNC9RRUJBUUVCQVFBSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYlFFQkFRRUJBSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFZBUUVCQVFBQkI4QWtMeUNDbUN6SFJyTFhmbU50eS9TKzMzeHJRN2EvaHVKWitKbXBGa0h5Nm1YOHM4VWVab1NUM2JKR3o0dklCQ0JiOGpvWFlJR2xqYVU1WGNhUCtXS1IrUFpQMGozU1ZEVmkyam5KWXpZdHg3a29WZ2gya1ZIdTFXVnJDT2RVd25CTmc4aW9qc05IRjhJVmdLQmg1UWNydk9OdTRzTng1amc0WU9tQ0xEcDVzUG9vZXNNRjNGZGNuU3pHOTJpK3ZlR0JjWUZYekpWWG1sS3RWcW1LWVNGZEFGT2hqYWpuS1ZiWVFxeW8wWE15MHp1aEJFYStHVktHVDZYSjhFUlR1c3lxOGIyTmR4YWtyOWpFWWRCWStYTTRlazRlYk03cldyMXpQSkd5QlV6SjZkNGFWS0poSWp6dXZ1VXRyRytpL3hKTWhLR2JNQ2RoaGtha2grMkNzZkVneWdPeGRYVjJFNzdGMWhla0NJeWJjaUJ0bDY0RStpU1BGckpiVDgyOXREemxDOUlPQ1JBc3VCQ0NFcEVyd3lHbGVteCtlUW1qR0lacHM2ZlpobkF4bjhJalRxOUtnVVdwb0wxVFlLS2NQbHFNelVhdHNDKzl1NUR0NkUxRHdPN3FZS3Z0K0hXWHhvWFlCcnprK1djcG1pQTVEZ2htRzdveTBuMjlGdzZXRWZiNWVpenZZZFcvZ2N5REJoWjlFR2tDbWFzRldZcXJUVGdaM1B6WnkzLzRiUFFLYlFpVFgwRGRJRWdyUTArb1AyNXZBOFVuSmNsTUhleHVaZ05oNTFDWDMzdWoyR2xEKzR6dE1lYmE5NEd5WHVnYkFCTFpQcWNIRVlKOUF3cDVjWG1Na2FobXZiL3RvdFZOc1B1dXlPUk52N0ZJN0gxSDhiU3lWTUp0RVJZSE1DYjFlcndUUTQ3NzlTalBlQnlnUFpyTkxMaGxYcU12QUQzVElSVGxmQzlMYis5TzV2Y0I1VlFveVlCckdBS0hXZVhJc1FQNGxuMmZNb3gvNytPbWxqdmdpTXR2ZkZuVThGV3RoL2NnZVVDK3JVZ1d0K3JVOU1tQ0hJLzFJZXpGVGd0OEFQcnRYWEo2Z2pHL0tMbGFIR3R0cEY5LzJxRUxWdy85K0tNWXlaNnh6VlUrTXNDZGJhY2hZeXJ0ZG8vL2hvQkh3dUpnOStoQzRneUg5YkxYOFNsdlQwUzE1NUZPYVpVWDR0cnhKanRLUWwvdEwydkxkNFROK3k2UkJFL3RpNk1ia3p0cktJTzhCVEhjMi9wNSswTFFmOFN0TjJ0dVZtSkdRcm5HT3JlcWcxWk5yME5HTzBPQWx4Njh2V3p5T3Q1UjFqdnZpOW85a0t4THlFcmlJaUJ6d0RaQ2dYcTFQSE1PUGFKSHh6OUd0d2FpekdDSXZMM2NYRHI3K0xYWHFvUjhDaXcvTW9PWG9kRysxMXZPc0dKbmlpYzdnVDZpMHQrQVQvWUU3eEh6WnFLM1NacUpmRmdWM2xZQVVjOHlUZHhRYUlXVWdyZWFHK3JWMzlVSlV4ODgxbmZzTXI4M3JvSWsrZTlNYlFkWkpmaDZ1TFE0bEFGNnpjU0M3QUdnaXIrQzRWNXMyWkNRZXVRbndIWkZqVmFxbTMxbUpROEY0ZjFOYTJhSmJmU0RGdWVVQ2RnTW1nNm5QbFdKb0djZ1JRVXB6VHNvdFI3TktxUlI3VWdCUkd4VXBVNW8vVncvVzVNYWJ2SGFrWUNzQWRPYUJ0Vys2Q0IvcEcxZHI3SmJ5RmRrTktpRmxZN2EyK2JubkxnVTAvMlJXaGNWZExiQlRvWStmcVpsSHVnaHFCNFZ1NlhCNlMwUXBzN1V1Q1hYYkl5WVp4TENtYnExOTM2ZEp1R0R1bkdheTdZOXhqS3JzL3hlYWFXeFNaRmJobnJIQ3BRSTJHU2xNQ1hWQUUxbWdQam9ZNUpxWVZEOWxuVUpiMXVTUGE5WS85NWtIbk5LaDlURG83K1k0TFUzQlhTWHdoaURkVENicmNJVEc2WUpqWHN3ZUFqOXJhQW5KNzdvK0ZCaVhQS0Z3YW11RU5YOW9odUtnVWdWVG5MYzNCMUNxSElRSFBseXUzbi9zUkgyT3VQSVdWemZhT3JBTkRGRHdCQjhjOFArekFBSWE5UXl1c25TMVBGaDZneVc5SVFuYytST1IwZll2cVh4elJ6S1VBVWYxSW9IbDVUcmMyc0kzTkhhMXlLZmQ4NXBHWVVTcERnUFFEejdIeU94QkhuV2ttYzA0NGk4TzZqdWh1NEF5TWJNK0dEaUxWRTRJdVcxUEF3MUNiNzhFQ3ZhUUVyZ3NlWHlYSkhLd2VWYXZpYSs4SDNlYTNoQUlrOWtTcm91ekxqL1AzQjl5RWxVa2NXc3U1dDBhVUlmTmhKOFlSMWg2RjlvSWRMeWFuN3lNZlV2cE91eDY3UG9kaGR0bVF3bGowc05reEVjWUhPOEkyUlV5Tnp0RDNSYTZ3aVJEVGFFU1VjUmxLZ0lBbEZEZDVEb1RudmpmY1ZWT01SRFdkNnlCbXhrUlgvRldOUVJyeDZQWE94Z1JQQW1sSkZudDVvL3krdnZ4bHl5L3VwNXVQQlVlY0VYamhyRnY2ZW9LWGc2R3N5bytXaHpuSDNmNkJqMU91ZHhsS1E4ZDU1bldpVDZBSmNobVVuakpUQzVxc3hDY3VnNFZ4bmpxNHBSVFBQeWw5QzBLSHFkTzkvSTlLeDAyRHlZNUdXQjV3aGtJcHlOU3RoSVQ5MjcrcmV0bUg4UHFsVVc4NDRQSWU2YlJOMyt4S1ArTUFlL2RNc09sV215K2hTRllaUUtZcTJnUHBjN3VPNVV2MjYxOTd5cUVMMjViS0xZaEZYQmhCeWwxUjkzc0VCV2ZZVENvekJPV3ZXSHJIdjQwQTg5akE2cVFYSE8xT2FKd1RBdWVudFVVM3FyTHZJYk03cWNzWW1DclhLdWNib1R6c3E4ZWkyVEs4TDBadVdram9GQzdXbVV5V21oQXM3UXFQTlhwbmpIM3VDSEFHUXRVbTVtZ1g0ZCttZmVWcUgwOVlwcUlOL2gzTGVPWFg1UHRFWUVTYUJZcGlEVU8xaC9teDZIZjNwYVp1bGg0cFlUMVYyTnlJaHYvdzRPYmxrYkNHdXNLczgxVU1DNVQ1RWpaanlneHZHM3Y4dXRZNnYvR05HSHRLUDV6UEh6dTJSUktYZU8zWk9nVVhSQkM0Qk0rSUxiaTdrWHFxNnFqRlU5czI5QlB5L3BDOUVMSHRidHE3eDA3VDJVRkljMUJubmtlMk1kTmhZWnFSMHZrVUdLQlBmS2hZczlHSm8xYm9JT0kvS08yeDhIREpCVi9rblRMYVF1S2hFZUZzcEpXQUw5YkNaMUlHYTEwc1dJVUFBNkNJeXFOUWxqcTlWVU1QdlN0SFdGd1B5T1M4SEl6UVg2VGpmSHNYOWJiT3lKc1dUZmVmR0IwN3N1bjhvVkFiakozem9TQUI2YWVVUGdaVmRqdjZEV1gyV0dxcDJtcHdnWU14ZnlyQkZyY3lndUFMbnBFbm9RMFJjTUZaOVg5eVo0ZUR0UGJjOXZOaUZVUWVkcGZaMEJEWitObE5NVEYyRGcrY1o3NEtEMGcvMjN4NXlFK0ZVbzlzSThybitQbTk2MkQyMmhhUGVuM1FJR1VIQ1pNOWpRcGFaVDNJQlZCOTlRQ2RpNXI5THhvQUtMVWNTUUkxR3IwSURPMzFMZERyMkVBVUM3Mk9SNUdSU1NYZEU4aEZFQ0lpNzhkL0pWTnI1RzFsdFBkOUhCRkw2Qm03QW04djRXWHZRUFFiYXgvQklYTE1iTW42NVpCT2YxVjVrY2wycG9LeXFzbGVGQW85Q2tFVTlxR0xBcjdiYmJwWWhUY2FBQnBTTmVrd0E1bzdvMmhKNkwrUDArTXJZZm9CdUNNdGJiVzlIcDhIczZxN0Y4MzA1bWplTTVDS210QU5aNytJTG1GODltcjF6bnVpMDRTTy9mNnlSMVdHRzFMTVdhakpyS1g0K3AwK200Nk1rTmIzZmZuUVdqN0lIaktUdlVLKzVlei90aXNWa0JGSjVWSXVqbzZVMVdIallNZ3Q2bHIva3VWbHRDOFo2aFZXSm9Wb1dNcHFjd3oyK0daVmtvcXB2a2xNVDhjZnZSZWZERXBrQUxvK1Axd0x5Y0VYQlc3Z09Nc0tBVklGY0dWSW0zRzVEOFR3VWpjaGcvSDdzbjVCdzhmQkVHa2VVZEFGMjZJWGV0Ulh6TFJ3SnZWajhHODhtUTFFVUUwZUhzbFlKd3FZS1BvK044YmJHTWZ3clFTRHA0eTRRTFJUMmF2RllIUnl1Q1ZJMnZoa2o0ellnc2tPeUs1dnU0T29yS0ZtUTI2NW93TWN0NG85Nkl0UlhnUzBQMlV0NVZpQ0gxazhQWE01MitqU1ZUNlNIMkhKLzJkd3g2TlB2TkJZMGNLZFA4dW1hdHViem8zL2ZqMFlOd1NxUGpkNjZGTTRSdVpEV3R1MnhCVmU4WTNMR2R0TzlSbEp3VG8wTnpIRFNueG8vOEF6SklQT2JVTDdROXArNTk3WnB4OTI4NEx6NUdnbzE0VjJZZ3ZFN3NrclZ0UnYzbVVlK3ZXTzNhekxqazNlVmtSekpmaUpvQXRNUzcwcDYxQ2FEc3Jhc2JNVEhVU0hQRXVlRGRDRW1yblVaSzM1cnVoQmxCaiswc1lFR3NhK3UzS0VkaTlKVDNKdytIaVdSWkNSSVlURWdwdTdBelpLdXFyMVU1bnIyUmZxSWJhaU9tL3Z2N0Q1R1JYZ0x5ZGhzRDM4UGg3ZUdCTllBTmdSb1A5MGJBZk9QWUVya1YzelB3MjF6TnJRb054cXg3d2gwR0FzRjllQUR5K1Y2QjNKSzdvdlpsQ1JsVmhMbGkvai9SWVRxTDkzZkk0NzNUMHdyMkpoOFA1WmxOMGpyUElWZkoxdExuWi9FWmhKdXQ2aE44ZGkza09hb1RpbFYrUmpsbHVSbkJYdENDUlZkV01UTjRDeWVHc0M3blFCWUs3U0dLb0VaNnBkSFcyR1grM0NkeXA0S0VKTFdZelJqTEVBaDlhNkl5KzhBa2xvSmxLRVA1dUhSMDl1UnJmcEtVTEQvS0dvV254YUNpRDJyZmMvZ1k1VjV2TzRxRlNmODFQQVY0UlVQcURCcWZFdFFLZ0o5RG1EU2VNK0pwQmhqOTNCa3hndzdVR3FHRW9laGZ3NEliMXdLcFlZQUJpZmR3dzE1N21FV1BxT0NPVTNjSlROQmJDd2xidXk3dmV0cnlRb1gzODYzWWRXYzRKNUFWdmlBRjhTejBLY2pra2ZKSjhYM0xqaHJtZFRYSzBXOEVhL0xpZTAzaFZWTzIxcGZ3STAzdzkyTVFQclUxZTcxQWUrT1poc2RrVWhhSThFMUZzNThmVmI4Uk80VmJPdnlvMk44akczVFF5bXRjU2dtT1Nqdm9PWitBQVlFQTN6ams2ei9YNjB6ZDN3cXNiTGNWYW5tZXdYRUkzbzA5QUo0TFR2cHU4bVoyT0VkVVZjdysvZmh3dDFudkVBTWRyRzR5M1JaQ2hJYjZ4YnJLMGJqWnFMNnRJVjNsdWxMelNkcVBHeU1KSlplNzREMU45M28xR0hRcHoxY1pOMEV6YnV6a3BVRWE2cWVnbWxhd0U0MTYrOE5YNm9acFJMV3Jpak85akl1NkdtcmpDaWNEMkxpUkRxZ01lcGFUUThweTZZY0NEVFdycG0xQVY1WS9XVzJTNithSW1LT0U2T3FlR2xhbEw2V0pWNzlQdkw4ZmE5MUwzYVc4RVAxa0srbmNWcWVTQUFZYXdoNjNtQ1p1VDVUNDdXdjJRNlpmWE5KN1p0L0FzVVlzckFqcXMxWlo5cG4wQjFqN1AwU2d0Zlh6UEpaOGZtN2p5clhLMDFscE05WWhhY2F3cDRPYWxHZUQ5ckxCSG0vcVQ3WTNFMCtqTVZ6c29LV2JWK0NndUUzbVJBVjk0VldCMTdVUU9sdmVNWHRQajFHMEZGYnB0OUlnbFlhRUR2ZkJrQlJXZTY4T2lWNUE4N0Jvbmx5b0hPcW1iYlQ4YjlTRmpIdnRtblBVWjg5d21LTmt6ZGZYOVZiR0NORllEdXp5NmloRjNVU2o0MlFyQ1oxSE1xMStTcmN4UkYraE5qdHd3T0dKWW5UZVIrU0NUd3BCNjZzNTdQdnRremlGUk1yNVBkMzdqdHFoR1BTbkRhVlBlU0lEbUUyUVFDSzZpSkxKdDNmMHRoV2xtSVFjSkNrYWFzOTNBUldUUDNteFlyc2dnSE4zM3ZsdEFqVmdiZndIU3pMdmp0R3QrYXFMZFJmOVpPa1FLTlQ3VnpiUzhxTTdxY3J1RVpQcXVFbWFOUjI4OHYyUGttOUtlWFM5VUczZkNybkJqVHZhTkRRNTBWeE5iNTNFV2N2aGRmVk92Q010QVFNeml0RTVxUnRJMGhLOFZBU2dFc09FZE9waVZ0Sis0QmtpZ2JzNkNPejl2Z3FzZ05Vc2RHZ0g0SjNJbnNXQVZZZHcvaytjcmVUcTd2U1ZGTk9FNWlLQkxlYzVSdDhreUw4bTZINkIreUJ6Zzl0SEh2TU1SQWMvSHF1aWhTWWVRR3BxOVQ5VEwzdHJRT05vSzFTckRPUU5uTnBIR2ZESDVqVThyc2VDM1daNzNPcnYxUS84WjFmS2NSZGtuTENLWHZ5cjg1aFZ4L0pFUEpSV1VtMkdUNWZycm5MYk9XV1Nvd3RHb3VoSmVCOEcyREdvRjQyVlEwaEJDcEFQTERtN3M0RHZibUJhK29KaE1aT2w0TWpLVkg1L2ZrdFBnS3pTZzB4N3ljWWxCZEFvYmpEU2pTeUJ4dnNYWU1uYkRqWjgxM3k0dm1adEhid3ZtSGZIakQxVGFUT1dSMk5vZXozbGl6bTkrUHMxbXNSZ1dCUjBzL2NYU2o0U1pJdnYyVi9NajlTTjJNcVl4TmFpVEFzM01WbUtCOEt5MTYzVmFsellXYnN4ejBvaVNZcGJlMEVtNWdSdVFVRXdVVnNaeHZjZkc1Z29VZWpJRzBPRkZtbnZ5dy8xVHFza0FENmhpNHI4bHUvYlN2VFVGYVJKeElnSUVzbnpQeTdZcm5IYk53RDRSVTlQalFCWmd2YXM0OEsxSEpad2dPTHAyemtiM3hhR3ZkMkJnZFNCTy9zdUYySTNvaXJENXFucCtxdmxNWE1KSUdZeUsrd0xrYXNNQitlSHIxbW40MUpDZzNseW1MU1VKUDUvbUNNSXlZVTYzVytKM3p1UGZqMWZtY3NNNmlHby9KTk1JbzRVdWloa1RSSE53QXlJNENhVFFNWjhwbVBvdUNJbHNUdXptSVNoRmR4UFFPTTltVkw1c0RPazB0eW1zd04xUWZNbTExWVEvRndsSHRkblZGcEliKzNtSlwiO1xudmFyIGhhc2gkMiA9IFwiNDk3Yjg5YjJcIjtcbnZhciB3YXNtSnNvbiQyID0ge1xuXHRuYW1lOiBuYW1lJDIsXG5cdGRhdGE6IGRhdGEkMixcblx0aGFzaDogaGFzaCQyXG59O1xuXG5mdW5jdGlvbiBiY3J5cHRJbnRlcm5hbChvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgeyBjb3N0RmFjdG9yLCBwYXNzd29yZCwgc2FsdCB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgYmNyeXB0SW50ZXJmYWNlID0geWllbGQgV0FTTUludGVyZmFjZSh3YXNtSnNvbiQyLCAwKTtcbiAgICAgICAgYmNyeXB0SW50ZXJmYWNlLndyaXRlTWVtb3J5KGdldFVJbnQ4QnVmZmVyKHNhbHQpLCAwKTtcbiAgICAgICAgY29uc3QgcGFzc3dvcmRCdWZmZXIgPSBnZXRVSW50OEJ1ZmZlcihwYXNzd29yZCk7XG4gICAgICAgIGJjcnlwdEludGVyZmFjZS53cml0ZU1lbW9yeShwYXNzd29yZEJ1ZmZlciwgMTYpO1xuICAgICAgICBjb25zdCBzaG91bGRFbmNvZGUgPSBvcHRpb25zLm91dHB1dFR5cGUgPT09ICdlbmNvZGVkJyA/IDEgOiAwO1xuICAgICAgICBiY3J5cHRJbnRlcmZhY2UuZ2V0RXhwb3J0cygpLmJjcnlwdChwYXNzd29yZEJ1ZmZlci5sZW5ndGgsIGNvc3RGYWN0b3IsIHNob3VsZEVuY29kZSk7XG4gICAgICAgIGNvbnN0IG1lbW9yeSA9IGJjcnlwdEludGVyZmFjZS5nZXRNZW1vcnkoKTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0VHlwZSA9PT0gJ2VuY29kZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW50QXJyYXlUb1N0cmluZyhtZW1vcnksIDYwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRUeXBlID09PSAnaGV4Jykge1xuICAgICAgICAgICAgY29uc3QgZGlnZXN0Q2hhcnMgPSBuZXcgVWludDhBcnJheSgyNCAqIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdldERpZ2VzdEhleChkaWdlc3RDaGFycywgbWVtb3J5LCAyNCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGJpbmFyeSBmb3JtYXRcbiAgICAgICAgLy8gdGhlIGRhdGEgaXMgY29waWVkIHRvIGFsbG93IEdDIG9mIHRoZSBvcmlnaW5hbCBtZW1vcnkgYnVmZmVyXG4gICAgICAgIHJldHVybiBtZW1vcnkuc2xpY2UoMCwgMjQpO1xuICAgIH0pO1xufVxuY29uc3QgdmFsaWRhdGVPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvcHRpb25zIHBhcmFtZXRlci4gSXQgcmVxdWlyZXMgYW4gb2JqZWN0LicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5jb3N0RmFjdG9yKSB8fCBvcHRpb25zLmNvc3RGYWN0b3IgPCA0IHx8IG9wdGlvbnMuY29zdEZhY3RvciA+IDMxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29zdCBmYWN0b3Igc2hvdWxkIGJlIGEgbnVtYmVyIGJldHdlZW4gNCBhbmQgMzEnKTtcbiAgICB9XG4gICAgb3B0aW9ucy5wYXNzd29yZCA9IGdldFVJbnQ4QnVmZmVyKG9wdGlvbnMucGFzc3dvcmQpO1xuICAgIGlmIChvcHRpb25zLnBhc3N3b3JkLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXNzd29yZCBzaG91bGQgYmUgYXQgbGVhc3QgMSBieXRlIGxvbmcnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucGFzc3dvcmQubGVuZ3RoID4gNzIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXNzd29yZCBzaG91bGQgYmUgYXQgbW9zdCA3MiBieXRlcyBsb25nJyk7XG4gICAgfVxuICAgIG9wdGlvbnMuc2FsdCA9IGdldFVJbnQ4QnVmZmVyKG9wdGlvbnMuc2FsdCk7XG4gICAgaWYgKG9wdGlvbnMuc2FsdC5sZW5ndGggIT09IDE2KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2FsdCBzaG91bGQgYmUgMTYgYnl0ZXMgbG9uZycpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5vdXRwdXRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3B0aW9ucy5vdXRwdXRUeXBlID0gJ2VuY29kZWQnO1xuICAgIH1cbiAgICBpZiAoIVsnaGV4JywgJ2JpbmFyeScsICdlbmNvZGVkJ10uaW5jbHVkZXMob3B0aW9ucy5vdXRwdXRUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3VwcG9ydGVkIG91dHB1dCB0eXBlICR7b3B0aW9ucy5vdXRwdXRUeXBlfS4gVmFsaWQgdmFsdWVzOiBbJ2hleCcsICdiaW5hcnknLCAnZW5jb2RlZCddYCk7XG4gICAgfVxufTtcbi8qKlxuICogQ2FsY3VsYXRlcyBoYXNoIHVzaW5nIHRoZSBiY3J5cHQgcGFzc3dvcmQtaGFzaGluZyBmdW5jdGlvblxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaFxuICovXG5mdW5jdGlvbiBiY3J5cHQob3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGJjcnlwdEludGVybmFsKG9wdGlvbnMpO1xuICAgIH0pO1xufVxuY29uc3QgdmFsaWRhdGVIYXNoQ2hhcmFjdGVycyA9IChoYXNoKSA9PiB7XG4gICAgaWYgKCEvXlxcJDJbYXh5Yl1cXCRbMC0zXVswLTldXFwkWy4vQS1aYS16MC05XXs1M30kLy50ZXN0KGhhc2gpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGhhc2hbNF0gPT09ICcwJyAmJiBwYXJzZUludChoYXNoWzVdLCAxMCkgPCA0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGhhc2hbNF0gPT09ICczJyAmJiBwYXJzZUludChoYXNoWzVdLCAxMCkgPiAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuY29uc3QgdmFsaWRhdGVWZXJpZnlPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvcHRpb25zIHBhcmFtZXRlci4gSXQgcmVxdWlyZXMgYW4gb2JqZWN0LicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5oYXNoID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG9wdGlvbnMuaGFzaCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXNoIHNob3VsZCBiZSBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZW5ndGggIT09IDYwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaCBzaG91bGQgYmUgNjAgYnl0ZXMgbG9uZycpO1xuICAgIH1cbiAgICBpZiAoIXZhbGlkYXRlSGFzaENoYXJhY3RlcnMob3B0aW9ucy5oYXNoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGFzaCcpO1xuICAgIH1cbiAgICBvcHRpb25zLnBhc3N3b3JkID0gZ2V0VUludDhCdWZmZXIob3B0aW9ucy5wYXNzd29yZCk7XG4gICAgaWYgKG9wdGlvbnMucGFzc3dvcmQubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3N3b3JkIHNob3VsZCBiZSBhdCBsZWFzdCAxIGJ5dGUgbG9uZycpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wYXNzd29yZC5sZW5ndGggPiA3Mikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3N3b3JkIHNob3VsZCBiZSBhdCBtb3N0IDcyIGJ5dGVzIGxvbmcnKTtcbiAgICB9XG59O1xuLyoqXG4gKiBWZXJpZmllcyBwYXNzd29yZCB1c2luZyBiY3J5cHQgcGFzc3dvcmQtaGFzaGluZyBmdW5jdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZW5jb2RlZCBoYXNoIG1hdGNoZXMgdGhlIHBhc3N3b3JkXG4gKi9cbmZ1bmN0aW9uIGJjcnlwdFZlcmlmeShvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFsaWRhdGVWZXJpZnlPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhhc2gsIHBhc3N3b3JkIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBiY3J5cHRJbnRlcmZhY2UgPSB5aWVsZCBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDIsIDApO1xuICAgICAgICBiY3J5cHRJbnRlcmZhY2Uud3JpdGVNZW1vcnkoZ2V0VUludDhCdWZmZXIoaGFzaCksIDApO1xuICAgICAgICBjb25zdCBwYXNzd29yZEJ1ZmZlciA9IGdldFVJbnQ4QnVmZmVyKHBhc3N3b3JkKTtcbiAgICAgICAgYmNyeXB0SW50ZXJmYWNlLndyaXRlTWVtb3J5KHBhc3N3b3JkQnVmZmVyLCA2MCk7XG4gICAgICAgIHJldHVybiAhIWJjcnlwdEludGVyZmFjZS5nZXRFeHBvcnRzKCkuYmNyeXB0X3ZlcmlmeShwYXNzd29yZEJ1ZmZlci5sZW5ndGgpO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSQxID0gXCJ3aGlybHBvb2xcIjtcbnZhciBkYXRhJDEgPSBcIkFHRnpiUUVBQUFBQkVRUmdBQUYvWUFGL0FHQUNmMzhBWUFBQUF3a0lBQUVDQXdFREFBRUZCQUVCQWdJR0RnSi9BVUhRbXdVTGZ3QkJnQWdMQjNBSUJtMWxiVzl5ZVFJQURraGhjMmhmUjJWMFFuVm1abVZ5QUFBSlNHRnphRjlKYm1sMEFBTUxTR0Z6YUY5VmNHUmhkR1VBQkFwSVlYTm9YMFpwYm1Gc0FBVU5TR0Z6YUY5SFpYUlRkR0YwWlFBR0RraGhjMmhmUTJGc1kzVnNZWFJsQUFjS1UxUkJWRVZmVTBsYVJRTUJDdXdiQ0FVQVFZQVpDOHdHQVFsK0lBQXBBd0FoQVVFQVFRQXBBNENiQVNJQ053UEFtUUVnQUNrREdDRURJQUFwQXhBaEJDQUFLUU1JSVFWQkFFRUFLUU9ZbXdFaUJqY0QySmtCUVFCQkFDa0RrSnNCSWdjM0E5Q1pBVUVBUVFBcEE0aWJBU0lJTndQSW1RRkJBQ0FCSUFLRk53T0FtZ0ZCQUNBRklBaUZOd09JbWdGQkFDQUVJQWVGTndPUW1nRkJBQ0FESUFhRk53T1ltZ0VnQUNrRElDRURRUUJCQUNrRG9Kc0JJZ0UzQStDWkFVRUFJQU1nQVlVM0E2Q2FBU0FBS1FNb0lRUkJBRUVBS1FPb213RWlBemNENkprQlFRQWdCQ0FEaFRjRHFKb0JJQUFwQXpBaEJVRUFRUUFwQTdDYkFTSUVOd1B3bVFGQkFDQUZJQVNGTndPd21nRWdBQ2tET0NFSlFRQkJBQ2tEdUpzQklnVTNBL2laQVVFQUlBa2dCWVUzQTdpYUFVRUFRcGpHbU1iK2tPNkF6d0EzQTRDWkFVSEFtUUZCZ0prQkVBSkJnSm9CUWNDWkFSQUNRUUJDdHN6S3JwL3YyOGpTQURjRGdKa0JRY0NaQVVHQW1RRVFBa0dBbWdGQndKa0JFQUpCQUVMZytPNzB1SlREdlRVM0E0Q1pBVUhBbVFGQmdKa0JFQUpCZ0pvQlFjQ1pBUkFDUVFCQ25jRGZsdXpsa3YvWEFEY0RnSmtCUWNDWkFVR0FtUUVRQWtHQW1nRkJ3SmtCRUFKQkFFS1Y3dDJwL3BPOHBWbzNBNENaQVVIQW1RRkJnSmtCRUFKQmdKb0JRY0NaQVJBQ1FRQkMySktuMFpDVzZMV0ZmemNEZ0prQlFjQ1pBVUdBbVFFUUFrR0FtZ0ZCd0prQkVBSkJBRUs5dThHZ3Y5blBndWNBTndPQW1RRkJ3SmtCUVlDWkFSQUNRWUNhQVVIQW1RRVFBa0VBUXVUUGhOcjR0Ti9LV0RjRGdKa0JRY0NaQVVHQW1RRVFBa0dBbWdGQndKa0JFQUpCQUVMNzNmT3oxdnZGbzU1L053T0FtUUZCd0prQlFZQ1pBUkFDUVlDYUFVSEFtUUVRQWtFQVFzcmIvTDNRMWRiQk16Y0RnSmtCUWNDWkFVR0FtUUVRQWtHQW1nRkJ3SmtCRUFKQkFDQUNRUUFwQTRDYUFTQUFLUU1BaFlVM0E0Q2JBVUVBSUFoQkFDa0RpSm9CSUFBcEF3aUZoVGNEaUpzQlFRQWdCMEVBS1FPUW1nRWdBQ2tERUlXRk53T1Ftd0ZCQUNBR1FRQXBBNWlhQVNBQUtRTVloWVUzQTVpYkFVRUFJQUZCQUNrRG9Kb0JJQUFwQXlDRmhUY0RvSnNCUVFBZ0EwRUFLUU9vbWdFZ0FDa0RLSVdGTndPb213RkJBQ0FFUVFBcEE3Q2FBU0FBS1FNd2hZVTNBN0NiQVVFQUlBVkJBQ2tEdUpvQklBQXBBemlGaFRjRHVKc0JDNFlNQ2dGK0FYOEJmZ0YvQVg0QmZ3RitBWDhFZmdOL0lBQWdBQ2tEQUNJQ3B5SURRZjhCY1VFRGRFR1FDR29wQXdCQ09Ja2dBQ2tET0NJRXB5SUZRUVYyUWZnUGNVR1FDR29wQXdDRlFqaUpJQUFwQXpBaUJxY2lCMEVOZGtINEQzRkJrQWhxS1FNQWhVSTRpU0FBS1FNb0lnaW5JZ2xCRlhaQitBOXhRWkFJYWlrREFJVkNPSWtnQUNrRElDSUtRaUNJcDBIL0FYRkJBM1JCa0FocUtRTUFoVUk0aVNBQUtRTVlJZ3RDS0lpblFmOEJjVUVEZEVHUUNHb3BBd0NGUWppSklBQXBBeEFpREVJd2lLZEIvd0Z4UVFOMFFaQUlhaWtEQUlWQ09Ja2dBQ2tEQ0NJTlFqaUlwMEVEZEVHUUNHb3BBd0NGUWppSklBRXBBd0NGTndNQUlBQWdEYWNpRGtIL0FYRkJBM1JCa0FocUtRTUFRamlKSUFOQkJYWkIrQTl4UVpBSWFpa0RBSVZDT0lrZ0JVRU5ka0g0RDNGQmtBaHFLUU1BaFVJNGlTQUhRUlYyUWZnUGNVR1FDR29wQXdDRlFqaUpJQWhDSUlpblFmOEJjVUVEZEVHUUNHb3BBd0NGUWppSklBcENLSWluUWY4QmNVRURkRUdRQ0dvcEF3Q0ZRamlKSUF0Q01JaW5RZjhCY1VFRGRFR1FDR29wQXdDRlFqaUpJQXhDT0lpblFRTjBRWkFJYWlrREFJVkNPSWtnQVNrRENJVTNBd2dnQUNBTXB5SVBRZjhCY1VFRGRFR1FDR29wQXdCQ09Ja2dEa0VGZGtINEQzRkJrQWhxS1FNQWhVSTRpU0FEUVExMlFmZ1BjVUdRQ0dvcEF3Q0ZRamlKSUFWQkZYWkIrQTl4UVpBSWFpa0RBSVZDT0lrZ0JrSWdpS2RCL3dGeFFRTjBRWkFJYWlrREFJVkNPSWtnQ0VJb2lLZEIvd0Z4UVFOMFFaQUlhaWtEQUlWQ09Ja2dDa0l3aUtkQi93RnhRUU4wUVpBSWFpa0RBSVZDT0lrZ0MwSTRpS2RCQTNSQmtBaHFLUU1BaFVJNGlTQUJLUU1RaFRjREVDQUFJQXVuSWhCQi93RnhRUU4wUVpBSWFpa0RBRUk0aVNBUFFRVjJRZmdQY1VHUUNHb3BBd0NGUWppSklBNUJEWFpCK0E5eFFaQUlhaWtEQUlWQ09Ja2dBMEVWZGtINEQzRkJrQWhxS1FNQWhVSTRpU0FFUWlDSXAwSC9BWEZCQTNSQmtBaHFLUU1BaFVJNGlTQUdRaWlJcDBIL0FYRkJBM1JCa0FocUtRTUFoVUk0aVNBSVFqQ0lwMEgvQVhGQkEzUkJrQWhxS1FNQWhVSTRpU0FLUWppSXAwRURkRUdRQ0dvcEF3Q0ZRamlKSUFFcEF4aUZOd01ZSUFBZ0NxY2lBMEgvQVhGQkEzUkJrQWhxS1FNQVFqaUpJQkJCQlhaQitBOXhRWkFJYWlrREFJVkNPSWtnRDBFTmRrSDREM0ZCa0FocUtRTUFoVUk0aVNBT1FSVjJRZmdQY1VHUUNHb3BBd0NGUWppSklBSkNJSWluUWY4QmNVRURkRUdRQ0dvcEF3Q0ZRamlKSUFSQ0tJaW5RZjhCY1VFRGRFR1FDR29wQXdDRlFqaUpJQVpDTUlpblFmOEJjVUVEZEVHUUNHb3BBd0NGUWppSklBaENPSWluUVFOMFFaQUlhaWtEQUlWQ09Ja2dBU2tESUlVM0F5QWdBQ0FKUWY4QmNVRURkRUdRQ0dvcEF3QkNPSWtnQTBFRmRrSDREM0ZCa0FocUtRTUFoVUk0aVNBUVFRMTJRZmdQY1VHUUNHb3BBd0NGUWppSklBOUJGWFpCK0E5eFFaQUlhaWtEQUlWQ09Ja2dEVUlnaUtkQi93RnhRUU4wUVpBSWFpa0RBSVZDT0lrZ0FrSW9pS2RCL3dGeFFRTjBRWkFJYWlrREFJVkNPSWtnQkVJd2lLZEIvd0Z4UVFOMFFaQUlhaWtEQUlWQ09Ja2dCa0k0aUtkQkEzUkJrQWhxS1FNQWhVSTRpU0FCS1FNb2hUY0RLQ0FBSUFkQi93RnhRUU4wUVpBSWFpa0RBRUk0aVNBSlFRVjJRZmdQY1VHUUNHb3BBd0NGUWppSklBTkJEWFpCK0E5eFFaQUlhaWtEQUlWQ09Ja2dFRUVWZGtINEQzRkJrQWhxS1FNQWhVSTRpU0FNUWlDSXAwSC9BWEZCQTNSQmtBaHFLUU1BaFVJNGlTQU5RaWlJcDBIL0FYRkJBM1JCa0FocUtRTUFoVUk0aVNBQ1FqQ0lwMEgvQVhGQkEzUkJrQWhxS1FNQWhVSTRpU0FFUWppSXAwRURkRUdRQ0dvcEF3Q0ZRamlKSUFFcEF6Q0ZOd013SUFBZ0JVSC9BWEZCQTNSQmtBaHFLUU1BUWppSklBZEJCWFpCK0E5eFFaQUlhaWtEQUlWQ09Ja2dDVUVOZGtINEQzRkJrQWhxS1FNQWhVSTRpU0FEUVJWMlFmZ1BjVUdRQ0dvcEF3Q0ZRamlKSUF0Q0lJaW5RZjhCY1VFRGRFR1FDR29wQXdDRlFqaUpJQXhDS0lpblFmOEJjVUVEZEVHUUNHb3BBd0NGUWppSklBMUNNSWluUWY4QmNVRURkRUdRQ0dvcEF3Q0ZRamlKSUFKQ09JaW5RUU4wUVpBSWFpa0RBSVZDT0lrZ0FTa0RPSVUzQXpnTFhBQkJBRUlBTndQSW13RkJBRUlBTndPNG13RkJBRUlBTndPd213RkJBRUlBTndPb213RkJBRUlBTndPZ213RkJBRUlBTndPWW13RkJBRUlBTndPUW13RkJBRUlBTndPSW13RkJBRUlBTndPQW13RkJBRUVBTmdMQW13RUx4UU1CQ0g5QkFDRUJRUUJCQUNrRHlKc0JJQUN0ZkRjRHlKc0JBa0JCQUNnQ3dKc0JJZ0pGRFFCQkFDRUJBa0FnQWlBQWFpSURRY0FBSUFOQndBQkpHeUlFSUFKQi93RnhJZ1ZORFFBZ0JDQUZheUlCUVFOeElRWkJBQ0VIQWtBZ0JDQUZRWDl6YWtFRFNRMEFJQUZCZkhFaENFRUFJUWNEUUNBRklBZHFJZ0pCd0pvQmFpQUhRWUFaYWkwQUFEb0FBQ0FDUWNHYUFXb2dCMEdCR1dvdEFBQTZBQUFnQWtIQ21nRnFJQWRCZ2hscUxRQUFPZ0FBSUFKQnc1b0JhaUFIUVlNWmFpMEFBRG9BQUNBSUlBZEJCR29pQjBjTkFBc2dCU0FIYWlJRklRSUxJQVpGRFFBZ0IwR0FHV29oQnlBQ1FmOEJjVUVCYWlFQ0EwQWdCVUhBbWdGcUlBY3RBQUE2QUFBZ0IwRUJhaUVISUFJaUJVRUJhaUVDSUFVaEJTQUdRWDlxSWdZTkFBc0xBa0FnQTBFL1RRMEFRY0NhQVJBQlFRQWhCQXRCQUNBRU5nTEFtd0VMQWtBZ0FDQUJheUlIUWNBQVNRMEFBMEFnQVVHQUdXb1FBU0FCUWNBQWFpRUJJQWRCUUdvaUIwRS9TdzBBQ3dzQ1FDQUJJQUJHRFFCQkFDQUhOZ0xBbXdFZ0IwVU5BRUVBSVFkQkFDRUNBMEFnQjBIQW1nRnFJQWNnQVdwQmdCbHFMUUFBT2dBQVFRQW9Bc0NiQVNBQ1FRRnFJZ0pCL3dGeElnZExEUUFMQ3d2L0F3SUVmd0YrSXdCQndBQnJJZ0FrQUNBQVFUaHFRZ0EzQXdBZ0FFRXdha0lBTndNQUlBQkJLR3BDQURjREFDQUFRU0JxUWdBM0F3QWdBRUVZYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUWdBM0F3Z2dBRUlBTndNQVFRQWhBUUpBQWtCQkFDZ0N3SnNCSWdKRkRRQkJBQ0VEQTBBZ0FDQUJhaUFCUWNDYUFXb3RBQUE2QUFBZ0FVRUJhaUVCSUFJZ0EwRUJhaUlEUWY4QmNVc05BQXRCQUNBQ1FRRnFOZ0xBbXdFZ0FDQUNha0dBQVRvQUFDQUNRV0J4UVNCSERRRWdBQkFCSUFCQ0FEY0RHQ0FBUWdBM0F4QWdBRUlBTndNSUlBQkNBRGNEQUF3QkMwRUFRUUUyQXNDYkFTQUFRWUFCT2dBQUMwRUFLUVBJbXdFaEJFRUFRZ0EzQThpYkFTQUFRUUE2QURZZ0FFRUFOZ0V5SUFCQ0FEY0JLaUFBUVFBNkFDa2dBRUlBTndBaElBQkJBRG9BSUNBQUlBUkNCWWc4QUQ0Z0FDQUVRZzJJUEFBOUlBQWdCRUlWaUR3QVBDQUFJQVJDSFlnOEFEc2dBQ0FFUWlXSVBBQTZJQUFnQkVJdGlEd0FPU0FBSUFSQ05ZZzhBRGdnQUNBRVFqMklQQUEzSUFBZ0JLZEJBM1E2QUQ4Z0FCQUJRUUJCQUNrRGdKc0JOd09BR1VFQVFRQXBBNGliQVRjRGlCbEJBRUVBS1FPUW13RTNBNUFaUVFCQkFDa0RtSnNCTndPWUdVRUFRUUFwQTZDYkFUY0RvQmxCQUVFQUtRT29td0UzQTZnWlFRQkJBQ2tEc0pzQk53T3dHVUVBUVFBcEE3aWJBVGNEdUJrZ0FFSEFBR29rQUFzR0FFSEFtZ0VMWWdCQkFFSUFOd1BJbXdGQkFFSUFOd080bXdGQkFFSUFOd093bXdGQkFFSUFOd09vbXdGQkFFSUFOd09nbXdGQkFFSUFOd09ZbXdGQkFFSUFOd09RbXdGQkFFSUFOd09JbXdGQkFFSUFOd09BbXdGQkFFRUFOZ0xBbXdFZ0FCQUVFQVVMQzVnUUFRQkJnQWdMa0JDUUFBQUFBQUFBQUFBQUFBQUFBQUFBR0JoZ0dNQjRNTmdqSTR3akJhOUdKc2JHUDhaKytaRzQ2T2lINkJOdnpmdUhoeWFIVEtFVHk3aTQycmlwWW0wUkFRRUVBUWdGQWdsUFR5RlBRbTZlRFRZMjJEYXQ3bXlicHFhaXBsa0VVZi9TMG0vUzNyMjVEUFgxOC9YN0J2Y09lWG41ZWUrQThwWnZiNkZ2WDg3ZU1KR1JmcEg4N3o5dFVsSlZVcW9IcFBoZ1lKMWdKLzNBUjd5OHlyeUpkbVUxbTV0V202ek5LemVPamdLT0JJd0JpcU9qdHFOeEZWdlNEQXd3REdBOEdHeDdlL0Y3LzRyMmhEVTExRFcxNFdxQUhSMTBIZWhwT3ZYZzRLZmdVMGZkczlmWGU5ZjJyTE1od3NJdndsN3RtWnd1THJndWJaWmNRMHRMTVV0aWVwWXAvdjdmL3FNaDRWMVhWMEZYZ2hhdTFSVVZWQldvUVNxOWQzZkJkNSsyN3VnM045dzNwZXR1a3VYbHMrVjdWdGVlbjU5R240elpJeFB3OE9mdzB4ZjlJMHBLTlVwcWY1UWcydHBQMnA2VnFVUllXSDFZK2lXd29zbkpBOGtHeW8vUEtTbWtLVldOVW53S0NpZ0tVQ0lVV3JHeC9ySGhUMzlRb0tDNm9Ha2FYY2xyYTdGcmY5cldGSVdGTG9WY3F4Zlp2YjNPdllGelp6eGRYV2xkMGpTNmp4QVFRQkNBVUNDUTlQVDM5UE1EOVFmTHl3dkxGc0NMM1Q0KytEN3R4bnpUQlFVVUJTZ1JDaTFuWjRGbkgrYk9lT1RrdCtSelU5V1hKeWVjSnlXN1RnSkJRUmxCTWxpQ2M0dUxGb3NzblF1bnA2ZW1wMUVCVS9aOWZlbDl6NVQ2c3BXVmJwWGMremRKMk5oSDJJNmZyVmI3Kzh2N2l6RHJjTzd1bis0amNjSE5mSHp0Zk1lUitMdG1ab1ZtRitQTWNkM2RVOTJtanFkN0Z4ZGNGN2hMTHE5SFJ3RkhBa2FPUlo2ZVFwNkUzQ0VheXNvUHloN0ZpZFF0TGJRdGRabGFXTCsveHIrUmVXTXVCd2NjQnpnYkRqK3RyWTZ0QVNOSHJGcGFkVnJxTDdTd2c0TTJnMnkxRys4ek04d3poZjltdG1OamtXTS84c1pjQWdJSUFoQUtCQktxcXBLcU9UaEprM0Z4MlhHdnFPTGV5TWdIeUE3UGpjWVpHV1FaeUgweTBVbEpPVWx5Y0pJNzJkbEQyWWFhcjEveTh1L3l3eDM1TWVQanErTkxTTnVvVzF0eFcrSXF0cm1JaUJxSU5KSU52SnFhVXBxa3lDaytKaWFZSmkyK1RBc3lNc2d5amZwa3Y3Q3crckRwU24xWjZlbUQ2UnRxei9JUER6d1BlRE1lZDlYVmM5WG1wcmN6Z0lBNmdIUzZIZlMrdnNLK21YeGhKODNORTgwbTNvZnJORFRRTkwza2FJbElTRDFJZW5XUU12Ly8yLytySk9OVWVucjFldmVQOUkyUWtIcVE5T285WkY5ZllWL0NQcjZkSUNDQUlCMmdRRDFvYUwxb1o5WFFEeG9hYUJyUWNqVEtycTZDcmhrc1FiZTB0T3EweVY1MWZWUlVUVlNhR2FqT2s1TjJrK3psTzM4aUlvZ2lEYXBFTDJSa2pXUUg2Y2hqOGZIajhkc1MveXB6YzlGenY2TG16QklTU0JLUVdpU0NRRUFkUURwZGdIb0lDQ0FJUUNnUVNNUERLOE5XNkp1VjdPeVg3RE43eGQvYjIwdmJscENyVGFHaHZxRmhIMS9BalkwT2pSeURCNUU5UGZROTljbDZ5SmVYWnBmTThUTmJBQUFBQUFBQUFBRFB6eHZQTnRTRCtTc3JyQ3RGaDFadWRuYkZkcGV6N09HQ2dqS0NaTEFaNXRiV2Y5YitxYkVvR3h0c0c5aDNOc08xdGU2MXdWdDNkSyt2aHE4UktVTythbXExYW5mZjFCMVFVRjFRdWcyZzZrVkZDVVVTVElwWDgvUHI4OHNZK3pnd01NQXduZkJncmUvdm0rOHJkTVBFUHovOFArWERmdHBWVlVsVmtoeXF4Nktpc3FKNUVGbmI2dXFQNmdObHllbGxaWWxsRCt6S2FycTYwcnE1YUdrREx5KzhMMldUWGtyQXdDZkFUdWVkanQ3ZVg5NitnYUZnSEJ4d0hPQnNPUHo5L2RQOXV5N25SazFOS1UxU1pKb2ZrcEp5a3VUZ09YWjFkY2wxajd6cStnWUdHQVl3SGd3Mmlvb1NpaVNZQ2E2eXN2S3krVUI1UytibXYrWmpXZEdGRGc0NERuQTJISDRmSDN3ZitHTSs1MkppbFdJMzk4UlYxTlIzMU82anRUcW9xSnFvS1RKTmdaYVdZcGJFOURGUytmbkQrWnM2NzJMRnhUUEZadmFYb3lVbGxDVTFzVW9RV1ZsNVdmSWdzcXVFaENxRVZLNFYwSEp5MVhLM3ArVEZPVG5rT2RYZGN1eE1UQzFNV21HWUZsNWVaVjdLTzd5VWVIajllT2VGOEo4NE9PQTQzZGh3NVl5TUNvd1VoZ1dZMGRGajBjYXl2eGVscGE2bFFRdFg1T0xpcitKRFRkbWhZV0daWVMvNHdrNnpzL2F6OFVWN1FpRWhoQ0VWcFVJMG5KeEtuSlRXSlFnZUhuZ2U4R1k4N2tOREVVTWlVb1poeDhjN3gzYjhrN0g4L05mOHN5dmxUd1FFRUFRZ0ZBZ2tVVkZaVWJJSW91T1ptVjZadk1jdkpXMXRxVzFQeE5vaURRMDBEV2c1R21YNitzLzZnelhwZWQvZlc5KzJoS05wZm43bGZ0ZWIvS2trSkpBa1BiUklHVHM3N0R2RjEzYitxNnVXcXpFOVM1ck96aC9PUHRHQjhCRVJSQkdJVlNLWmo0OEdqd3lKQTROT1RpVk9TbXVjQkxlMzVyZlJVWE5tNit1TDZ3dGd5K0E4UFBBOC9jeDR3WUdCUG9GOHZ4LzlsSlJxbE5UK05VRDM5L3YzNnd6ekhMbTUzcm1oWjI4WUV4Tk1FNWhmSm9zc0xMQXNmWnhZVWRQVGE5UFd1THNGNStlNzUydGMwNHh1YnFWdVY4dmNPY1RFTjhSdTg1V3FBd01NQXhnUEJodFdWa1ZXaWhPczNFUkVEVVFhU1loZWYzL2hmOStlL3FDcHFaNnBJVGRQaUNvcXFDcE5nbFJudTd2V3U3RnRhd3JCd1NQQlJ1S2ZoMU5UVVZPaUFxYngzTnhYM0s2THBYSUxDeXdMV0NjV1U1MmRUcDJjMHljQmJHeXRiRWZCMkNzeE1jUXhsZlZpcEhSMHpYU0h1ZWp6OXZiLzl1TUo4UlZHUmdWR0NrT01US3lzaXF3SkprV2xpWWtlaVR5WEQ3VVVGRkFVb0VRb3RPSGhvK0ZiUXQrNkZoWllGckJPTEtZNk91ZzZ6ZEowOTJscHVXbHYwTklHQ1Fra0NVZ3RFa0Z3Y04xd3A2M2cxN2EyNHJiWlZIRnYwTkJuME02M3ZSN3Q3WlB0TzM3SDFzek1GOHd1MjRYaVFrSVZRaXBYaEdpWW1GcVl0TUl0TEtTa3FxUkpEbFh0S0NpZ0tGMklVSFZjWEcxYzJqRzRodmo0eC9pVFArMXJob1lpaGtTa0VjST1cIjtcbnZhciBoYXNoJDEgPSBcImRiYTEyMDE5XCI7XG52YXIgd2FzbUpzb24kMSA9IHtcblx0bmFtZTogbmFtZSQxLFxuXHRkYXRhOiBkYXRhJDEsXG5cdGhhc2g6IGhhc2gkMVxufTtcblxuY29uc3QgbXV0ZXgkMSA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSQxID0gbnVsbDtcbi8qKlxuICogQ2FsY3VsYXRlcyBXaGlybHBvb2wgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gd2hpcmxwb29sKGRhdGEpIHtcbiAgICBpZiAod2FzbUNhY2hlJDEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCQxLCB3YXNtSnNvbiQxLCA2NClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkMSA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJDEuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSQxLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgV2hpcmxwb29sIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2hpcmxwb29sKCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDEsIDY0KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDY0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogNjQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lID0gXCJzbTNcIjtcbnZhciBkYXRhID0gXCJBR0Z6YlFFQUFBQUJEQU5nQUFGL1lBQUFZQUYvQUFNSUJ3QUJBZ0lCQUFJRkJBRUJBZ0lHRGdKL0FVSHdpUVVMZndCQmdBZ0xCM0FJQm0xbGJXOXllUUlBRGtoaGMyaGZSMlYwUW5WbVptVnlBQUFKU0dGemFGOUpibWwwQUFFTFNHRnphRjlWY0dSaGRHVUFBZ3BJWVhOb1gwWnBibUZzQUFRTlNHRnphRjlIWlhSVGRHRjBaUUFGRGtoaGMyaGZRMkZzWTNWc1lYUmxBQVlLVTFSQlZFVmZVMGxhUlFNQkN0b2RCd1VBUVlBSkMxRUFRUUJDemR5M25PN0p3LzJ3ZnpjQ29Ja0JRUUJDdk9HOHk2cVZ6cGdXTndLWWlRRkJBRUxYaFpHNWdjQ0J4Vm8zQXBDSkFVRUFRdStzZ0p5WDE2eUt5UUEzQW9pSkFVRUFRZ0EzQW9DSkFRdnZBd0VJZndKQUlBQkZEUUJCQUNFQlFRQkJBQ2dDZ0lrQklnSWdBR29pQXpZQ2dJa0JJQUpCUDNFaEJBSkFJQU1nQWs4TkFFRUFRUUFvQW9TSkFVRUJhallDaElrQkMwR0FDU0VDQWtBZ0JFVU5BQUpBUWNBQUlBUnJJZ1VnQUUwTkFDQUVJUUVNQVFzZ0JFRS9jeUVHSUFSQnFJa0JhaUVDUVlBSklRTUNRQUpBSUFWQkIzRWlCdzBBSUFVaENBd0JDeUFISVFnRFFDQUNJQU10QUFBNkFBQWdBa0VCYWlFQ0lBTkJBV29oQXlBSVFYOXFJZ2dOQUF0QndBQWdCeUFFYW1zaENBc0NRQ0FHUVFkSkRRQURRQ0FDSUFNcEFBQTNBQUFnQWtFSWFpRUNJQU5CQ0dvaEF5QUlRWGhxSWdnTkFBc0xRYWlKQVJBRElBVkJnQWxxSVFJZ0FDQUZheUVBQ3dKQUlBQkJ3QUJKRFFBRFFDQUNFQU1nQWtIQUFHb2hBaUFBUVVCcUlnQkJQMHNOQUFzTElBQkZEUUFnQVVHb2lRRnFJUU1DUUFKQUlBQkJCM0VpQ0EwQUlBQWhCQXdCQ3lBQVFUaHhJUVFEUUNBRElBSXRBQUE2QUFBZ0EwRUJhaUVESUFKQkFXb2hBaUFJUVg5cUlnZ05BQXNMSUFCQkNFa05BQU5BSUFNZ0FpMEFBRG9BQUNBRElBSXRBQUU2QUFFZ0F5QUNMUUFDT2dBQ0lBTWdBaTBBQXpvQUF5QURJQUl0QUFRNkFBUWdBeUFDTFFBRk9nQUZJQU1nQWkwQUJqb0FCaUFESUFJdEFBYzZBQWNnQTBFSWFpRURJQUpCQ0dvaEFpQUVRWGhxSWdRTkFBc0xDK3dMQVJsL0l3QkJrQUpySWdFa0FDQUJJQUFvQWhnaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQXpZQ0dDQUJJQUFvQWhRaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQkRZQ0ZDQUJJQUFvQWdnaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQlRZQ0NDQUJJQUFvQWhBaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQmpZQ0VDQUJJQUFvQWlBaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQnpZQ0lDQUJJQUFvQWdRaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQ0RZQ0JDQUJJQUFvQWd3aUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQ1RZQ0RDQUJJQUFvQWh3aUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQ2pZQ0hDQUJJQUFvQWdBaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQ3pZQ0FDQUFLQUlrSVFJZ0FTQUFLQUkwSWd4QkdIUWdERUdBL2dOeFFRaDBjaUFNUVFoMlFZRCtBM0VnREVFWWRuSnlJZzAyQWpRZ0FTQUFLQUlvSWd4QkdIUWdERUdBL2dOeFFRaDBjaUFNUVFoMlFZRCtBM0VnREVFWWRuSnlJZzQyQWlnZ0FTQUxJQTFCRDNkeklBcHpJZ3hCRjNjZ0RFRVBkM01nQ1VFSGQzTWdEbk1nREhNaUNqWUNRQ0FCSUFBb0FqZ2lERUVZZENBTVFZRCtBM0ZCQ0hSeUlBeEJDSFpCZ1A0RGNTQU1RUmgyY25JaUN6WUNPQ0FCSUFBb0Fpd2lERUVZZENBTVFZRCtBM0ZCQ0hSeUlBeEJDSFpCZ1A0RGNTQU1RUmgyY25JaUR6WUNMQ0FCSUFnZ0MwRVBkM01nQjNNaURFRVhkeUFNUVE5M2N5QUdRUWQzY3lBUGN5QU1jellDUkNBQklBQW9BandpREVFWWRDQU1RWUQrQTNGQkNIUnlJQXhCQ0haQmdQNERjU0FNUVJoMmNuSWlERFlDUENBQklBSkJHSFFnQWtHQS9nTnhRUWgwY2lBQ1FRaDJRWUQrQTNFZ0FrRVlkbkp5SWdJMkFpUWdBU0FBS0FJd0lnQkJHSFFnQUVHQS9nTnhRUWgwY2lBQVFRaDJRWUQrQTNFZ0FFRVlkbkp5SWdZMkFqQWdBU0FGSUF4QkQzZHpJQUp6SWdCQkYzY2dBRUVQZDNNZ0JFRUhkM01nQm5NZ0FITTJBa2dnQVNBT0lBcEJEM2R6SUFseklnQkJGM2NnQUVFUGQzTWdBMEVIZDNNZ0RYTWdBSE0yQWt4QkFDRUdRU0FoQnlBQklReEJBQ2dDaUlrQkloQWhDVUVBS0FLa2lRRWlFU0VQUVFBb0FxQ0pBU0lTSVExQkFDZ0NuSWtCSWhNaENFRUFLQUtZaVFFaUZDRU9RUUFvQXBTSkFTSVZJUlpCQUNnQ2tJa0JJaGNoQTBFQUtBS01pUUVpR0NFTEEwQWdDQ0FPSWdKeklBMGlCSE1nRDJvZ0NTSUFRUXgzSWcwZ0FtcEJtWXF4emdjZ0IzWkJtWXF4emdjZ0JuUnlha0VIZHlJUGFpQU1LQUlBSWhscUlnbEJFWGNnQ1VFSmQzTWdDWE1oRGlBRElnVWdDM01nQUhNZ0Ztb2dEeUFOYzJvZ0RFRVFhaWdDQUNBWmMyb2hDU0FNUVFScUlRd2dCMEYvYWlFSElBaEJFM2NoRFNBTFFRbDNJUU1nQkNFUElBSWhDQ0FGSVJZZ0FDRUxJQVpCQVdvaUJrRVFSdzBBQzBFQUlRWkJFQ0VIQTBBZ0FTQUdhaUlNUWRBQWFpQU1RVGhxS0FJQUlBeEJMR29vQWdBZ0RFRVFhaWdDQUhNZ0RFSEVBR29vQWdBaUZrRVBkM01pQ0VFWGQzTWdDRUVQZDNNZ0RFRWNhaWdDQUVFSGQzTWdDSE1pR1RZQ0FDQU5JZzhnRGlJTVFYOXpjU0FDSUF4eGNpQUVhaUFKSWdoQkRIY2lEU0FNYWtHS3U1N1VCeUFIZDJwQkIzY2lCR29nQ21vaUNVRVJkeUFKUVFsM2N5QUpjeUVPSUFnZ0F5SUxJQUJ5Y1NBTElBQnhjaUFGYWlBRUlBMXphaUFaSUFwemFpRUpJQVpCQkdvaEJpQUNRUk4zSVEwZ0FFRUpkeUVESUJZaENpQVBJUVFnRENFQ0lBc2hCU0FJSVFBZ0IwRUJhaUlIUWNBQVJ3MEFDMEVBSUE4Z0VYTTJBcVNKQVVFQUlBMGdFbk0yQXFDSkFVRUFJQXdnRTNNMkFweUpBVUVBSUE0Z0ZITTJBcGlKQVVFQUlBc2dGWE0yQXBTSkFVRUFJQU1nRjNNMkFwQ0pBVUVBSUFnZ0dITTJBb3lKQVVFQUlBa2dFSE0yQW9pSkFTQUJRWkFDYWlRQUM0SUxBUXAvSXdCQkVHc2lBQ1FBSUFCQkFDZ0NnSWtCSWdGQkczUWdBVUVMZEVHQWdQd0hjWElnQVVFRmRrR0EvZ054SUFGQkEzUkJHSFp5Y2pZQ0RDQUFRUUFvQW9TSkFTSUNRUU4wSWdNZ0FVRWRkbklpQkVFWWRDQUVRWUQrQTNGQkNIUnlJQUpCQlhaQmdQNERjU0FEUVJoMmNuSTJBZ2dDUUVFNFFmZ0FJQUZCUDNFaUJVRTRTUnNnQldzaUEwVU5BRUVBSUFNZ0FXb2lBVFlDZ0lrQkFrQWdBU0FEVHcwQVFRQWdBa0VCYWpZQ2hJa0JDMEdRQ0NFQlFRQWhCZ0pBSUFWRkRRQUNRQ0FEUWNBQUlBVnJJZ2RQRFFBZ0JTRUdEQUVMSUFWQlAzTWhDQ0FGUWFpSkFXb2hBVUdRQ0NFQ0FrQUNRQ0FIUVFkeElna05BQ0FISVFRTUFRc2dDU0VFQTBBZ0FTQUNMUUFBT2dBQUlBRkJBV29oQVNBQ1FRRnFJUUlnQkVGL2FpSUVEUUFMUWNBQUlBa2dCV3BySVFRTEFrQWdDRUVIU1EwQUEwQWdBU0FDS1FBQU53QUFJQUZCQ0dvaEFTQUNRUWhxSVFJZ0JFRjRhaUlFRFFBTEMwR29pUUVRQXlBSFFaQUlhaUVCSUFNZ0Iyc2hBd3NDUUNBRFFjQUFTUTBBQTBBZ0FSQURJQUZCd0FCcUlRRWdBMEZBYWlJRFFUOUxEUUFMQ3lBRFJRMEFJQVpCcUlrQmFpRUNBa0FDUUNBRFFRZHhJZ1FOQUNBRElRVU1BUXNnQTBFNGNTRUZBMEFnQWlBQkxRQUFPZ0FBSUFKQkFXb2hBaUFCUVFGcUlRRWdCRUYvYWlJRURRQUxDeUFEUVFoSkRRQURRQ0FDSUFFdEFBQTZBQUFnQWlBQkxRQUJPZ0FCSUFJZ0FTMEFBam9BQWlBQ0lBRXRBQU02QUFNZ0FpQUJMUUFFT2dBRUlBSWdBUzBBQlRvQUJTQUNJQUV0QUFZNkFBWWdBaUFCTFFBSE9nQUhJQUpCQ0dvaEFpQUJRUWhxSVFFZ0JVRjRhaUlGRFFBTEMwRUFRUUFvQW9DSkFTSUNRUWhxTmdLQWlRRWdBa0UvY1NFQkFrQWdBa0Y0U1EwQVFRQkJBQ2dDaElrQlFRRnFOZ0tFaVFFTEFrQUNRQUpBQWtBZ0FRMEFRUUFoQVF3QkN5QUJRVGhKRFFBZ0FVR29pUUZxSUFBdEFBZzZBQUFDUUNBQlFUOUdEUUFnQVVHcGlRRnFJQUF0QUFrNkFBQWdBVUUrUmcwQUlBRkJxb2tCYWlBQUxRQUtPZ0FBSUFGQlBVWU5BQ0FCUWF1SkFXb2dBQzBBQ3pvQUFDQUJRVHhHRFFBZ0FVR3NpUUZxSUFBdEFBdzZBQUFnQVVFN1JnMEFJQUZCcllrQmFpQUFMUUFOT2dBQUlBRkJPa1lOQUNBQlFhNkpBV29nQUMwQURqb0FBQ0FCUVRsR0RRQWdBVUd2aVFGcUlBQXRBQTg2QUFCQnFJa0JFQU1NQXd0QnFJa0JFQU1nQWtFSGNTSUVSUTBDSUFGQlIyb2hCU0FBUVFocVFjQUFJQUZyYWlFQ0lBRkJTR29oQmtHb2lRRWhBU0FFSVFNRFFDQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWlBRFFYOXFJZ01OQUFzZ0JVRUhTUTBDSUFZZ0JHc2hBd3dCQ3lBQlFhaUpBV29oQVVFSUlRTWdBRUVJYWlFQ0N3TkFJQUVnQWlrQUFEY0FBQ0FCUVFocUlRRWdBa0VJYWlFQ0lBTkJlR29pQXcwQUN3dEJBRUVBS0FLSWlRRWlBVUVZZENBQlFZRCtBM0ZCQ0hSeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JMkFvQUpRUUJCQUNnQ2pJa0JJZ0ZCR0hRZ0FVR0EvZ054UVFoMGNpQUJRUWgyUVlEK0EzRWdBVUVZZG5KeU5nS0VDVUVBUVFBb0FwQ0pBU0lCUVJoMElBRkJnUDREY1VFSWRISWdBVUVJZGtHQS9nTnhJQUZCR0haeWNqWUNpQWxCQUVFQUtBS1VpUUVpQVVFWWRDQUJRWUQrQTNGQkNIUnlJQUZCQ0haQmdQNERjU0FCUVJoMmNuSTJBb3dKUVFCQkFDZ0NtSWtCSWdGQkdIUWdBVUdBL2dOeFFRaDBjaUFCUVFoMlFZRCtBM0VnQVVFWWRuSnlOZ0tRQ1VFQVFRQW9BcHlKQVNJQlFSaDBJQUZCZ1A0RGNVRUlkSElnQVVFSWRrR0EvZ054SUFGQkdIWnljallDbEFsQkFFRUFLQUtnaVFFaUFVRVlkQ0FCUVlEK0EzRkJDSFJ5SUFGQkNIWkJnUDREY1NBQlFSaDJjbkkyQXBnSlFRQkJBQ2dDcElrQklnRkJHSFFnQVVHQS9nTnhRUWgwY2lBQlFRaDJRWUQrQTNFZ0FVRVlkbkp5TmdLY0NTQUFRUkJxSkFBTEJnQkJnSWtCQzVVQ0FRUi9RUUJDemR5M25PN0p3LzJ3ZnpjQ29Ja0JRUUJDdk9HOHk2cVZ6cGdXTndLWWlRRkJBRUxYaFpHNWdjQ0J4Vm8zQXBDSkFVRUFRdStzZ0p5WDE2eUt5UUEzQW9pSkFVRUFRZ0EzQW9DSkFRSkFJQUJGRFFCQkFDQUFOZ0tBaVFGQmdBa2hBUUpBSUFCQndBQkpEUUJCZ0FraEFRTkFJQUVRQXlBQlFjQUFhaUVCSUFCQlFHb2lBRUUvU3cwQUN5QUFSUTBCQ3lBQVFYOXFJUUlDUUFKQUlBQkJCM0VpQXcwQVFhaUpBU0VFREFFTElBQkJlSEVoQUVHb2lRRWhCQU5BSUFRZ0FTMEFBRG9BQUNBRVFRRnFJUVFnQVVFQmFpRUJJQU5CZjJvaUF3MEFDd3NnQWtFSFNRMEFBMEFnQkNBQktRQUFOd0FBSUFSQkNHb2hCQ0FCUVFocUlRRWdBRUY0YWlJQURRQUxDeEFFQ3d0UkFnQkJnQWdMQkdnQUFBQUFRWkFJQzBDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiO1xudmFyIGhhc2ggPSBcIjU2NTE1NzEyXCI7XG52YXIgd2FzbUpzb24gPSB7XG5cdG5hbWU6IG5hbWUsXG5cdGRhdGE6IGRhdGEsXG5cdGhhc2g6IGhhc2hcbn07XG5cbmNvbnN0IG11dGV4ID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlID0gbnVsbDtcbi8qKlxuICogQ2FsY3VsYXRlcyBTTTMgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc20zKGRhdGEpIHtcbiAgICBpZiAod2FzbUNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgsIHdhc21Kc29uLCAzMilcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZS5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU00zIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU00zKCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uLCAzMikudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDMyLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG5leHBvcnQgeyBhZGxlcjMyLCBhcmdvbjJWZXJpZnksIGFyZ29uMmQsIGFyZ29uMmksIGFyZ29uMmlkLCBiY3J5cHQsIGJjcnlwdFZlcmlmeSwgYmxha2UyYiwgYmxha2UycywgYmxha2UzLCBjcmMzMiwgY3JjMzJjLCBjcmVhdGVBZGxlcjMyLCBjcmVhdGVCTEFLRTJiLCBjcmVhdGVCTEFLRTJzLCBjcmVhdGVCTEFLRTMsIGNyZWF0ZUNSQzMyLCBjcmVhdGVDUkMzMkMsIGNyZWF0ZUhNQUMsIGNyZWF0ZUtlY2NhaywgY3JlYXRlTUQ0LCBjcmVhdGVNRDUsIGNyZWF0ZVJJUEVNRDE2MCwgY3JlYXRlU0hBMSwgY3JlYXRlU0hBMjI0LCBjcmVhdGVTSEEyNTYsIGNyZWF0ZVNIQTMsIGNyZWF0ZVNIQTM4NCwgY3JlYXRlU0hBNTEyLCBjcmVhdGVTTTMsIGNyZWF0ZVdoaXJscG9vbCwgY3JlYXRlWFhIYXNoMTI4LCBjcmVhdGVYWEhhc2gzLCBjcmVhdGVYWEhhc2gzMiwgY3JlYXRlWFhIYXNoNjQsIGtlY2NhaywgbWQ0LCBtZDUsIHBia2RmMiwgcmlwZW1kMTYwLCBzY3J5cHQsIHNoYTEsIHNoYTIyNCwgc2hhMjU2LCBzaGEzLCBzaGEzODQsIHNoYTUxMiwgc20zLCB3aGlybHBvb2wsIHh4aGFzaDEyOCwgeHhoYXNoMywgeHhoYXNoMzIsIHh4aGFzaDY0IH07XG4iLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuL1N1YmplY3QnO1xudmFyIEJlaGF2aW9yU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEJlaGF2aW9yU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCZWhhdmlvclN1YmplY3QoX3ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLl92YWx1ZSA9IF92YWx1ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBfc3VwZXIucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgIXN1YnNjcmlwdGlvbi5jbG9zZWQgJiYgc3Vic2NyaWJlci5uZXh0KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIF92YWx1ZSA9IF9hLl92YWx1ZTtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyB0aHJvd25FcnJvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfTtcbiAgICBCZWhhdmlvclN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcywgKHRoaXMuX3ZhbHVlID0gdmFsdWUpKTtcbiAgICB9O1xuICAgIHJldHVybiBCZWhhdmlvclN1YmplY3Q7XG59KFN1YmplY3QpKTtcbmV4cG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmVoYXZpb3JTdWJqZWN0LmpzLm1hcCIsImV4cG9ydCB2YXIgQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbignQycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgfSkoKTtcbmV4cG9ydCBmdW5jdGlvbiBlcnJvck5vdGlmaWNhdGlvbihlcnJvcikge1xuICAgIHJldHVybiBjcmVhdGVOb3RpZmljYXRpb24oJ0UnLCB1bmRlZmluZWQsIGVycm9yKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBuZXh0Tm90aWZpY2F0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbignTicsIHZhbHVlLCB1bmRlZmluZWQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5vdGlmaWNhdGlvbihraW5kLCB2YWx1ZSwgZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Tm90aWZpY2F0aW9uRmFjdG9yaWVzLmpzLm1hcCIsImltcG9ydCB7IFNhZmVTdWJzY3JpYmVyLCBTdWJzY3JpYmVyIH0gZnJvbSAnLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IGlzU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSBhcyBTeW1ib2xfb2JzZXJ2YWJsZSB9IGZyb20gJy4vc3ltYm9sL29ic2VydmFibGUnO1xuaW1wb3J0IHsgcGlwZUZyb21BcnJheSB9IGZyb20gJy4vdXRpbC9waXBlJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBlcnJvckNvbnRleHQgfSBmcm9tICcuL3V0aWwvZXJyb3JDb250ZXh0JztcbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbU3ltYm9sX29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5leHBvcnQgeyBPYnNlcnZhYmxlIH07XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PYnNlcnZhYmxlLmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wUHJvdmlkZXIgfSBmcm9tICcuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXInO1xudmFyIFJlcGxheVN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSZXBsYXlTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlcGxheVN1YmplY3QoX2J1ZmZlclNpemUsIF93aW5kb3dUaW1lLCBfdGltZXN0YW1wUHJvdmlkZXIpIHtcbiAgICAgICAgaWYgKF9idWZmZXJTaXplID09PSB2b2lkIDApIHsgX2J1ZmZlclNpemUgPSBJbmZpbml0eTsgfVxuICAgICAgICBpZiAoX3dpbmRvd1RpbWUgPT09IHZvaWQgMCkgeyBfd2luZG93VGltZSA9IEluZmluaXR5OyB9XG4gICAgICAgIGlmIChfdGltZXN0YW1wUHJvdmlkZXIgPT09IHZvaWQgMCkgeyBfdGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXI7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuX2J1ZmZlclNpemUgPSBfYnVmZmVyU2l6ZTtcbiAgICAgICAgX3RoaXMuX3dpbmRvd1RpbWUgPSBfd2luZG93VGltZTtcbiAgICAgICAgX3RoaXMuX3RpbWVzdGFtcFByb3ZpZGVyID0gX3RpbWVzdGFtcFByb3ZpZGVyO1xuICAgICAgICBfdGhpcy5fYnVmZmVyID0gW107XG4gICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSB0cnVlO1xuICAgICAgICBfdGhpcy5faW5maW5pdGVUaW1lV2luZG93ID0gX3dpbmRvd1RpbWUgPT09IEluZmluaXR5O1xuICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IE1hdGgubWF4KDEsIF9idWZmZXJTaXplKTtcbiAgICAgICAgX3RoaXMuX3dpbmRvd1RpbWUgPSBNYXRoLm1heCgxLCBfd2luZG93VGltZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIF9idWZmZXIgPSBfYS5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2EuX2luZmluaXRlVGltZVdpbmRvdywgX3RpbWVzdGFtcFByb3ZpZGVyID0gX2EuX3RpbWVzdGFtcFByb3ZpZGVyLCBfd2luZG93VGltZSA9IF9hLl93aW5kb3dUaW1lO1xuICAgICAgICBpZiAoIWlzU3RvcHBlZCkge1xuICAgICAgICAgICAgX2J1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICFfaW5maW5pdGVUaW1lV2luZG93ICYmIF9idWZmZXIucHVzaChfdGltZXN0YW1wUHJvdmlkZXIubm93KCkgKyBfd2luZG93VGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJpbUJ1ZmZlcigpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl90cmltQnVmZmVyKCk7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgX2luZmluaXRlVGltZVdpbmRvdyA9IF9hLl9pbmZpbml0ZVRpbWVXaW5kb3csIF9idWZmZXIgPSBfYS5fYnVmZmVyO1xuICAgICAgICB2YXIgY29weSA9IF9idWZmZXIuc2xpY2UoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3B5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkgKz0gX2luZmluaXRlVGltZVdpbmRvdyA/IDEgOiAyKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29weVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIFJlcGxheVN1YmplY3QucHJvdG90eXBlLl90cmltQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfYnVmZmVyU2l6ZSA9IF9hLl9idWZmZXJTaXplLCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYS5fdGltZXN0YW1wUHJvdmlkZXIsIF9idWZmZXIgPSBfYS5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2EuX2luZmluaXRlVGltZVdpbmRvdztcbiAgICAgICAgdmFyIGFkanVzdGVkQnVmZmVyU2l6ZSA9IChfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpICogX2J1ZmZlclNpemU7XG4gICAgICAgIF9idWZmZXJTaXplIDwgSW5maW5pdHkgJiYgYWRqdXN0ZWRCdWZmZXJTaXplIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlci5zcGxpY2UoMCwgX2J1ZmZlci5sZW5ndGggLSBhZGp1c3RlZEJ1ZmZlclNpemUpO1xuICAgICAgICBpZiAoIV9pbmZpbml0ZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgICAgIHZhciBub3cgPSBfdGltZXN0YW1wUHJvdmlkZXIubm93KCk7XG4gICAgICAgICAgICB2YXIgbGFzdCA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IF9idWZmZXIubGVuZ3RoICYmIF9idWZmZXJbaV0gPD0gbm93OyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICBsYXN0ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3QgJiYgX2J1ZmZlci5zcGxpY2UoMCwgbGFzdCArIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gUmVwbGF5U3ViamVjdDtcbn0oU3ViamVjdCkpO1xuZXhwb3J0IHsgUmVwbGF5U3ViamVjdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVwbGF5U3ViamVjdC5qcy5tYXAiLCJpbXBvcnQgeyBkYXRlVGltZXN0YW1wUHJvdmlkZXIgfSBmcm9tICcuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXInO1xudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcbmV4cG9ydCB7IFNjaGVkdWxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2NoZWR1bGVyLmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcywgX192YWx1ZXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBFTVBUWV9TVUJTQ1JJUFRJT04gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBPYmplY3RVbnN1YnNjcmliZWRFcnJvciB9IGZyb20gJy4vdXRpbC9PYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG5pbXBvcnQgeyBhcnJSZW1vdmUgfSBmcm9tICcuL3V0aWwvYXJyUmVtb3ZlJztcbmltcG9ydCB7IGVycm9yQ29udGV4dCB9IGZyb20gJy4vdXRpbC9lcnJvckNvbnRleHQnO1xudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbmV4cG9ydCB7IFN1YmplY3QgfTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5leHBvcnQgeyBBbm9ueW1vdXNTdWJqZWN0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJqZWN0LmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IGlzU3Vic2NyaXB0aW9uLCBTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyByZXBvcnRVbmhhbmRsZWRFcnJvciB9IGZyb20gJy4vdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlsL25vb3AnO1xuaW1wb3J0IHsgbmV4dE5vdGlmaWNhdGlvbiwgZXJyb3JOb3RpZmljYXRpb24sIENPTVBMRVRFX05PVElGSUNBVElPTiB9IGZyb20gJy4vTm90aWZpY2F0aW9uRmFjdG9yaWVzJztcbmltcG9ydCB7IHRpbWVvdXRQcm92aWRlciB9IGZyb20gJy4vc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlcic7XG5pbXBvcnQgeyBjYXB0dXJlRXJyb3IgfSBmcm9tICcuL3V0aWwvZXJyb3JDb250ZXh0JztcbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24obmV4dE5vdGlmaWNhdGlvbih2YWx1ZSksIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24oZXJyb3JOb3RpZmljYXRpb24oZXJyKSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKENPTVBMRVRFX05PVElGSUNBVElPTiwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xuZXhwb3J0IHsgU3Vic2NyaWJlciB9O1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgU2FmZVN1YnNjcmliZXIgfTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAgaWYgKGNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKSB7XG4gICAgICAgIGNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG5mdW5jdGlvbiBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcikge1xuICAgIHZhciBvblN0b3BwZWROb3RpZmljYXRpb24gPSBjb25maWcub25TdG9wcGVkTm90aWZpY2F0aW9uO1xuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbiAmJiB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBvblN0b3BwZWROb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBzdWJzY3JpYmVyKTsgfSk7XG59XG5leHBvcnQgdmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YnNjcmliZXIuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZEFycmF5LCBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IFVuc3Vic2NyaXB0aW9uRXJyb3IgfSBmcm9tICcuL3V0aWwvVW5zdWJzY3JpcHRpb25FcnJvcic7XG5pbXBvcnQgeyBhcnJSZW1vdmUgfSBmcm9tICcuL3V0aWwvYXJyUmVtb3ZlJztcbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG5leHBvcnQgeyBTdWJzY3JpcHRpb24gfTtcbmV4cG9ydCB2YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3Vic2NyaXB0aW9uLmpzLm1hcCIsImV4cG9ydCB2YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgU2FmZVN1YnNjcmliZXIgfSBmcm9tICcuL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgdmFyIGhhc0NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29uZmlnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maXJzdFZhbHVlRnJvbS5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyByZWZDb3VudCBhcyBoaWdoZXJPcmRlclJlZkNvdW50IH0gZnJvbSAnLi4vb3BlcmF0b3JzL3JlZkNvdW50JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgaGFzTGlmdCB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29ubmVjdGFibGVPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsIHN1YmplY3RGYWN0b3J5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgX3RoaXMuc3ViamVjdEZhY3RvcnkgPSBzdWJqZWN0RmFjdG9yeTtcbiAgICAgICAgX3RoaXMuX3N1YmplY3QgPSBudWxsO1xuICAgICAgICBfdGhpcy5fcmVmQ291bnQgPSAwO1xuICAgICAgICBfdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIF90aGlzLmxpZnQgPSBzb3VyY2UubGlmdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLmdldFN1YmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5fc3ViamVjdDtcbiAgICAgICAgaWYgKCFzdWJqZWN0IHx8IHN1YmplY3QuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5zdWJqZWN0RmFjdG9yeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJqZWN0O1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5fdGVhcmRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3JlZkNvdW50ID0gMDtcbiAgICAgICAgdmFyIF9jb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjtcbiAgICAgICAgdGhpcy5fc3ViamVjdCA9IHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICBfY29ubmVjdGlvbiA9PT0gbnVsbCB8fCBfY29ubmVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Nvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uO1xuICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdmFyIHN1YmplY3RfMSA9IHRoaXMuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgY29ubmVjdGlvbi5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJqZWN0XzEsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpO1xuICAgICAgICAgICAgICAgIHN1YmplY3RfMS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpO1xuICAgICAgICAgICAgICAgIHN1YmplY3RfMS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3RlYXJkb3duKCk7IH0pKSk7XG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5yZWZDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGhpZ2hlck9yZGVyUmVmQ291bnQoKSh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGU7XG59KE9ic2VydmFibGUpKTtcbmV4cG9ydCB7IENvbm5lY3RhYmxlT2JzZXJ2YWJsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29ubmVjdGFibGVPYnNlcnZhYmxlLmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGFyZ3NBcmdBcnJheU9yT2JqZWN0IH0gZnJvbSAnLi4vdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdCc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IHBvcFJlc3VsdFNlbGVjdG9yLCBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgY3JlYXRlT2JqZWN0IH0gZnJvbSAnLi4vdXRpbC9jcmVhdGVPYmplY3QnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICB2YXIgcmVzdWx0U2VsZWN0b3IgPSBwb3BSZXN1bHRTZWxlY3RvcihhcmdzKTtcbiAgICB2YXIgX2EgPSBhcmdzQXJnQXJyYXlPck9iamVjdChhcmdzKSwgb2JzZXJ2YWJsZXMgPSBfYS5hcmdzLCBrZXlzID0gX2Eua2V5cztcbiAgICBpZiAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmcm9tKFtdLCBzY2hlZHVsZXIpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbmV3IE9ic2VydmFibGUoY29tYmluZUxhdGVzdEluaXQob2JzZXJ2YWJsZXMsIHNjaGVkdWxlciwga2V5c1xuICAgICAgICA/XG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWVzKSB7IHJldHVybiBjcmVhdGVPYmplY3Qoa2V5cywgdmFsdWVzKTsgfVxuICAgICAgICA6XG4gICAgICAgICAgICBpZGVudGl0eSkpO1xuICAgIHJldHVybiByZXN1bHRTZWxlY3RvciA/IHJlc3VsdC5waXBlKG1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKSA6IHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTGF0ZXN0SW5pdChvYnNlcnZhYmxlcywgc2NoZWR1bGVyLCB2YWx1ZVRyYW5zZm9ybSkge1xuICAgIGlmICh2YWx1ZVRyYW5zZm9ybSA9PT0gdm9pZCAwKSB7IHZhbHVlVHJhbnNmb3JtID0gaWRlbnRpdHk7IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBvYnNlcnZhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgYWN0aXZlID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0ZpcnN0VmFsdWVzID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIG1heWJlU2NoZWR1bGUoc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBmcm9tKG9ic2VydmFibGVzW2ldLCBzY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzRmlyc3RWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNGaXJzdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRmlyc3RWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nRmlyc3RWYWx1ZXMtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVtYWluaW5nRmlyc3RWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWVUcmFuc2Zvcm0odmFsdWVzLnNsaWNlKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEtLWFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sIHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBfbG9vcF8xKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBzdWJzY3JpYmVyKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsIGV4ZWN1dGUsIHN1YnNjcmlwdGlvbikge1xuICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCBleGVjdXRlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGV4ZWN1dGUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0LmpzLm1hcCIsImltcG9ydCB7IGNvbmNhdEFsbCB9IGZyb20gJy4uL29wZXJhdG9ycy9jb25jYXRBbGwnO1xuaW1wb3J0IHsgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuL2Zyb20nO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmNhdEFsbCgpKGZyb20oYXJncywgcG9wU2NoZWR1bGVyKGFyZ3MpKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuZXhwb3J0IHZhciBFTVBUWSA9IG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0pO1xuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5KHNjaGVkdWxlcikge1xuICAgIHJldHVybiBzY2hlZHVsZXIgPyBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIDogRU1QVFk7XG59XG5mdW5jdGlvbiBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0pOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVtcHR5LmpzLm1hcCIsImltcG9ydCB7IHNjaGVkdWxlZCB9IGZyb20gJy4uL3NjaGVkdWxlZC9zY2hlZHVsZWQnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi9pbm5lckZyb20nO1xuZXhwb3J0IGZ1bmN0aW9uIGZyb20oaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBzY2hlZHVsZXIgPyBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikgOiBpbm5lckZyb20oaW5wdXQpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbS5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5leHBvcnQgZnVuY3Rpb24gZnJvbVN1YnNjcmliYWJsZShzdWJzY3JpYmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliYWJsZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbVN1YnNjcmliYWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBfX2FzeW5jVmFsdWVzLCBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UgfSBmcm9tICcuLi91dGlsL2lzQXJyYXlMaWtlJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4uL3V0aWwvaXNQcm9taXNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzSW50ZXJvcE9ic2VydmFibGUgfSBmcm9tICcuLi91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNBc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0FzeW5jSXRlcmFibGUnO1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IgfSBmcm9tICcuLi91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3InO1xuaW1wb3J0IHsgaXNJdGVyYWJsZSB9IGZyb20gJy4uL3V0aWwvaXNJdGVyYWJsZSc7XG5pbXBvcnQgeyBpc1JlYWRhYmxlU3RyZWFtTGlrZSwgcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciB9IGZyb20gJy4uL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyByZXBvcnRVbmhhbmRsZWRFcnJvciB9IGZyb20gJy4uL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3InO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSBhcyBTeW1ib2xfb2JzZXJ2YWJsZSB9IGZyb20gJy4uL3N5bWJvbC9vYnNlcnZhYmxlJztcbmV4cG9ydCBmdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtTeW1ib2xfb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlubmVyRnJvbS5qcy5tYXAiLCJpbXBvcnQgeyBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4vZnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBwb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgcmV0dXJuIGZyb20oYXJncywgc2NoZWR1bGVyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9mLmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmV4cG9ydCB7IE9wZXJhdG9yU3Vic2NyaWJlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T3BlcmF0b3JTdWJzY3JpYmVyLmpzLm1hcCIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGNoRXJyb3Ioc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgIHZhciBzeW5jVW5zdWIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGhhbmRsZWRSZXN1bHQ7XG4gICAgICAgIGlubmVyU3ViID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGhhbmRsZWRSZXN1bHQgPSBpbm5lckZyb20oc2VsZWN0b3IoZXJyLCBjYXRjaEVycm9yKHNlbGVjdG9yKShzb3VyY2UpKSk7XG4gICAgICAgICAgICBpZiAoaW5uZXJTdWIpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICBoYW5kbGVkUmVzdWx0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bmNVbnN1YiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHN5bmNVbnN1Yikge1xuICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgIGhhbmRsZWRSZXN1bHQuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jYXRjaEVycm9yLmpzLm1hcCIsImltcG9ydCB7IG1lcmdlQWxsIH0gZnJvbSAnLi9tZXJnZUFsbCc7XG5leHBvcnQgZnVuY3Rpb24gY29uY2F0QWxsKCkge1xuICAgIHJldHVybiBtZXJnZUFsbCgxKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdEFsbC5qcy5tYXAiLCJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi4vU3ViamVjdCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGZyb21TdWJzY3JpYmFibGUgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2Zyb21TdWJzY3JpYmFibGUnO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAgIGNvbm5lY3RvcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFN1YmplY3QoKTsgfSxcbn07XG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IERFRkFVTFRfQ09ORklHOyB9XG4gICAgdmFyIGNvbm5lY3RvciA9IGNvbmZpZy5jb25uZWN0b3I7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IGNvbm5lY3RvcigpO1xuICAgICAgICBpbm5lckZyb20oc2VsZWN0b3IoZnJvbVN1YnNjcmliYWJsZShzdWJqZWN0KSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgc3Vic2NyaWJlci5hZGQoc291cmNlLnN1YnNjcmliZShzdWJqZWN0KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25uZWN0LmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0SWZFbXB0eS5qcy5tYXAiLCJpbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RVbnRpbENoYW5nZWQoY29tcGFyYXRvciwga2V5U2VsZWN0b3IpIHtcbiAgICBpZiAoa2V5U2VsZWN0b3IgPT09IHZvaWQgMCkgeyBrZXlTZWxlY3RvciA9IGlkZW50aXR5OyB9XG4gICAgY29tcGFyYXRvciA9IGNvbXBhcmF0b3IgIT09IG51bGwgJiYgY29tcGFyYXRvciAhPT0gdm9pZCAwID8gY29tcGFyYXRvciA6IGRlZmF1bHRDb21wYXJlO1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzS2V5O1xuICAgICAgICB2YXIgZmlyc3QgPSB0cnVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5U2VsZWN0b3IodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGZpcnN0IHx8ICFjb21wYXJhdG9yKHByZXZpb3VzS2V5LCBjdXJyZW50S2V5KSkge1xuICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNLZXkgPSBjdXJyZW50S2V5O1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc3RpbmN0VW50aWxDaGFuZ2VkLmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUsIGluZGV4KyspICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7IH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbHRlci5qcy5tYXAiLCJpbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi4vdXRpbC9FbXB0eUVycm9yJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJy4vZmlsdGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICcuL3Rha2UnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHkgfSBmcm9tICcuL2RlZmF1bHRJZkVtcHR5JztcbmltcG9ydCB7IHRocm93SWZFbXB0eSB9IGZyb20gJy4vdGhyb3dJZkVtcHR5JztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gZmlyc3QocHJlZGljYXRlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShwcmVkaWNhdGUgPyBmaWx0ZXIoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIHByZWRpY2F0ZSh2LCBpLCBzb3VyY2UpOyB9KSA6IGlkZW50aXR5LCB0YWtlKDEpLCBoYXNEZWZhdWx0VmFsdWUgPyBkZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIDogdGhyb3dJZkVtcHR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbXB0eUVycm9yKCk7IH0pKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zmlyc3QuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWFwKHByb2plY3QsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHByb2plY3QuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXAuanMubWFwIiwiaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICcuL21lcmdlTWFwJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbGwoY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsgY29uY3VycmVudCA9IEluZmluaXR5OyB9XG4gICAgcmV0dXJuIG1lcmdlTWFwKGlkZW50aXR5LCBjb25jdXJyZW50KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlQWxsLmpzLm1hcCIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kLCBpbm5lclN1YlNjaGVkdWxlciwgYWRkaXRpb25hbEZpbmFsaXplcikge1xuICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICB2YXIgYWN0aXZlID0gMDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIubGVuZ3RoICYmICFhY3RpdmUpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG91dGVyTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKGFjdGl2ZSA8IGNvbmN1cnJlbnQgPyBkb0lubmVyU3ViKHZhbHVlKSA6IGJ1ZmZlci5wdXNoKHZhbHVlKSk7IH07XG4gICAgdmFyIGRvSW5uZXJTdWIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgZXhwYW5kICYmIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIGFjdGl2ZSsrO1xuICAgICAgICB2YXIgaW5uZXJDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBpbm5lckZyb20ocHJvamVjdCh2YWx1ZSwgaW5kZXgrKykpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKGlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIG9uQmVmb3JlTmV4dCA9PT0gbnVsbCB8fCBvbkJlZm9yZU5leHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmVmb3JlTmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgICAgIGlmIChleHBhbmQpIHtcbiAgICAgICAgICAgICAgICBvdXRlck5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlubmVyQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlLS07XG4gICAgICAgICAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCAmJiBhY3RpdmUgPCBjb25jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG91dGVyTmV4dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgIH0pKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VJbnRlcm5hbHMuanMubWFwIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBtZXJnZUludGVybmFscyB9IGZyb20gJy4vbWVyZ2VJbnRlcm5hbHMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBJbmZpbml0eTsgfVxuICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24gKGEsIGkpIHsgcmV0dXJuIG1hcChmdW5jdGlvbiAoYiwgaWkpIHsgcmV0dXJuIHJlc3VsdFNlbGVjdG9yKGEsIGIsIGksIGlpKTsgfSkoaW5uZXJGcm9tKHByb2plY3QoYSwgaSkpKTsgfSwgY29uY3VycmVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiByZXN1bHRTZWxlY3RvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7IHJldHVybiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlTWFwLmpzLm1hcCIsImltcG9ydCB7IENvbm5lY3RhYmxlT2JzZXJ2YWJsZSB9IGZyb20gJy4uL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJy4vY29ubmVjdCc7XG5leHBvcnQgZnVuY3Rpb24gbXVsdGljYXN0KHN1YmplY3RPclN1YmplY3RGYWN0b3J5LCBzZWxlY3Rvcikge1xuICAgIHZhciBzdWJqZWN0RmFjdG9yeSA9IGlzRnVuY3Rpb24oc3ViamVjdE9yU3ViamVjdEZhY3RvcnkpID8gc3ViamVjdE9yU3ViamVjdEZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeTsgfTtcbiAgICBpZiAoaXNGdW5jdGlvbihzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Qoc2VsZWN0b3IsIHtcbiAgICAgICAgICAgIGNvbm5lY3Rvcjogc3ViamVjdEZhY3RvcnksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gbmV3IENvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsIHN1YmplY3RGYWN0b3J5KTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11bHRpY2FzdC5qcy5tYXAiLCJpbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlT24oc2NoZWR1bGVyLCBkZWxheSkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLm5leHQodmFsdWUpOyB9LCBkZWxheSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSwgZGVsYXkpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0sIGRlbGF5KTsgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JzZXJ2ZU9uLmpzLm1hcCIsImltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICcuLi9SZXBsYXlTdWJqZWN0JztcbmltcG9ydCB7IG11bHRpY2FzdCB9IGZyb20gJy4vbXVsdGljYXN0JztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hSZXBsYXkoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2VsZWN0b3JPclNjaGVkdWxlciwgdGltZXN0YW1wUHJvdmlkZXIpIHtcbiAgICBpZiAoc2VsZWN0b3JPclNjaGVkdWxlciAmJiAhaXNGdW5jdGlvbihzZWxlY3Rvck9yU2NoZWR1bGVyKSkge1xuICAgICAgICB0aW1lc3RhbXBQcm92aWRlciA9IHNlbGVjdG9yT3JTY2hlZHVsZXI7XG4gICAgfVxuICAgIHZhciBzZWxlY3RvciA9IGlzRnVuY3Rpb24oc2VsZWN0b3JPclNjaGVkdWxlcikgPyBzZWxlY3Rvck9yU2NoZWR1bGVyIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3QobmV3IFJlcGxheVN1YmplY3QoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgdGltZXN0YW1wUHJvdmlkZXIpLCBzZWxlY3Rvcikoc291cmNlKTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hSZXBsYXkuanMubWFwIiwiaW1wb3J0IHsgc2NhbkludGVybmFscyB9IGZyb20gJy4vc2NhbkludGVybmFscyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShzY2FuSW50ZXJuYWxzKGFjY3VtdWxhdG9yLCBzZWVkLCBhcmd1bWVudHMubGVuZ3RoID49IDIsIGZhbHNlLCB0cnVlKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1Y2UuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gcmVmQ291bnQoKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgIHNvdXJjZS5fcmVmQ291bnQrKztcbiAgICAgICAgdmFyIHJlZkNvdW50ZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UgfHwgc291cmNlLl9yZWZDb3VudCA8PSAwIHx8IDAgPCAtLXNvdXJjZS5fcmVmQ291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc2hhcmVkQ29ubmVjdGlvbiA9IHNvdXJjZS5fY29ubmVjdGlvbjtcbiAgICAgICAgICAgIHZhciBjb25uID0gY29ubmVjdGlvbjtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgaWYgKHNoYXJlZENvbm5lY3Rpb24gJiYgKCFjb25uIHx8IHNoYXJlZENvbm5lY3Rpb24gPT09IGNvbm4pKSB7XG4gICAgICAgICAgICAgICAgc2hhcmVkQ29ubmVjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShyZWZDb3VudGVyKTtcbiAgICAgICAgaWYgKCFyZWZDb3VudGVyLmNsb3NlZCkge1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IHNvdXJjZS5jb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZkNvdW50LmpzLm1hcCIsImltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBzY2FuSW50ZXJuYWxzKGFjY3VtdWxhdG9yLCBzZWVkLCBoYXNTZWVkLCBlbWl0T25OZXh0LCBlbWl0QmVmb3JlQ29tcGxldGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzU3RhdGUgPSBoYXNTZWVkO1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBpID0gaW5kZXgrKztcbiAgICAgICAgICAgIHN0YXRlID0gaGFzU3RhdGVcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yKHN0YXRlLCB2YWx1ZSwgaSlcbiAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICgoaGFzU3RhdGUgPSB0cnVlKSwgdmFsdWUpO1xuICAgICAgICAgICAgZW1pdE9uTmV4dCAmJiBzdWJzY3JpYmVyLm5leHQoc3RhdGUpO1xuICAgICAgICB9LCBlbWl0QmVmb3JlQ29tcGxldGUgJiZcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaGFzU3RhdGUgJiYgc3Vic2NyaWJlci5uZXh0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KSkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2FuSW50ZXJuYWxzLmpzLm1hcCIsImltcG9ydCB7IGNvbmNhdCB9IGZyb20gJy4uL29ic2VydmFibGUvY29uY2F0JztcbmltcG9ydCB7IHBvcFNjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmV4cG9ydCBmdW5jdGlvbiBzdGFydFdpdGgoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhbHVlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKHZhbHVlcyk7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAoc2NoZWR1bGVyID8gY29uY2F0KHZhbHVlcywgc291cmNlLCBzY2hlZHVsZXIpIDogY29uY2F0KHZhbHVlcywgc291cmNlKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhcnRXaXRoLmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZU9uKHNjaGVkdWxlciwgZGVsYXkpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7IHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpOyB9LCBkZWxheSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NyaWJlT24uanMubWFwIiwiaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gc3dpdGNoTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpc0NvbXBsZXRlICYmICFpbm5lclN1YnNjcmliZXIgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9O1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlubmVyU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBpbm5lclN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlubmVyU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdmFyIGlubmVySW5kZXggPSAwO1xuICAgICAgICAgICAgdmFyIG91dGVySW5kZXggPSBpbmRleCsrO1xuICAgICAgICAgICAgaW5uZXJGcm9tKHByb2plY3QodmFsdWUsIG91dGVySW5kZXgpKS5zdWJzY3JpYmUoKGlubmVyU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoaW5uZXJWYWx1ZSkgeyByZXR1cm4gc3Vic2NyaWJlci5uZXh0KHJlc3VsdFNlbGVjdG9yID8gcmVzdWx0U2VsZWN0b3IodmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgsIGlubmVySW5kZXgrKykgOiBpbm5lclZhbHVlKTsgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlubmVyU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaE1hcC5qcy5tYXAiLCJpbXBvcnQgeyBFTVBUWSB9IGZyb20gJy4uL29ic2VydmFibGUvZW1wdHknO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gdGFrZShjb3VudCkge1xuICAgIHJldHVybiBjb3VudCA8PSAwXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIEVNUFRZOyB9XG4gICAgICAgIDogb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKytzZWVuIDw9IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8PSBzZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZS5qcy5tYXAiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiB0YXAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgIHZhciB0YXBPYnNlcnZlciA9IGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8IGVycm9yIHx8IGNvbXBsZXRlXG4gICAgICAgID9cbiAgICAgICAgICAgIHsgbmV4dDogb2JzZXJ2ZXJPck5leHQsIGVycm9yOiBlcnJvciwgY29tcGxldGU6IGNvbXBsZXRlIH1cbiAgICAgICAgOiBvYnNlcnZlck9yTmV4dDtcbiAgICByZXR1cm4gdGFwT2JzZXJ2ZXJcbiAgICAgICAgPyBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnN1YnNjcmliZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgdmFyIGlzVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLm5leHQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaXNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpc1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgKF9hID0gdGFwT2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyLCBlcnIpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGlmIChpc1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLnVuc3Vic2NyaWJlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYiA9IHRhcE9ic2VydmVyLmZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pXG4gICAgICAgIDpcbiAgICAgICAgICAgIGlkZW50aXR5O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFwLmpzLm1hcCIsImltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dJZkVtcHR5KGVycm9yRmFjdG9yeSkge1xuICAgIGlmIChlcnJvckZhY3RvcnkgPT09IHZvaWQgMCkgeyBlcnJvckZhY3RvcnkgPSBkZWZhdWx0RXJyb3JGYWN0b3J5OyB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiAoaGFzVmFsdWUgPyBzdWJzY3JpYmVyLmNvbXBsZXRlKCkgOiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKSk7IH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckZhY3RvcnkoKSB7XG4gICAgcmV0dXJuIG5ldyBFbXB0eUVycm9yKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvd0lmRW1wdHkuanMubWFwIiwiaW1wb3J0IHsgcmVkdWNlIH0gZnJvbSAnLi9yZWR1Y2UnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG52YXIgYXJyUmVkdWNlciA9IGZ1bmN0aW9uIChhcnIsIHZhbHVlKSB7IHJldHVybiAoYXJyLnB1c2godmFsdWUpLCBhcnIpOyB9O1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICByZWR1Y2UoYXJyUmVkdWNlciwgW10pKHNvdXJjZSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9BcnJheS5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVBcnJheShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlucHV0W2krK10pO1xuICAgICAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZUFycmF5LmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAwLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZUFzeW5jSXRlcmFibGUuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgaXRlcmF0b3IgYXMgU3ltYm9sX2l0ZXJhdG9yIH0gZnJvbSAnLi4vc3ltYm9sL2l0ZXJhdG9yJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaXRlcmF0b3I7XG4gICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yID0gaW5wdXRbU3ltYm9sX2l0ZXJhdG9yXSgpO1xuICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGRvbmU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gaXRlcmF0b3IubmV4dCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXNGdW5jdGlvbihpdGVyYXRvciA9PT0gbnVsbCB8fCBpdGVyYXRvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlcmF0b3IucmV0dXJuKSAmJiBpdGVyYXRvci5yZXR1cm4oKTsgfTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlSXRlcmFibGUuanMubWFwIiwiaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb2JzZXJ2ZU9uIH0gZnJvbSAnLi4vb3BlcmF0b3JzL29ic2VydmVPbic7XG5pbXBvcnQgeyBzdWJzY3JpYmVPbiB9IGZyb20gJy4uL29wZXJhdG9ycy9zdWJzY3JpYmVPbic7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlciksIG9ic2VydmVPbihzY2hlZHVsZXIpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlT2JzZXJ2YWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICcuLi9vcGVyYXRvcnMvb2JzZXJ2ZU9uJztcbmltcG9ydCB7IHN1YnNjcmliZU9uIH0gZnJvbSAnLi4vb3BlcmF0b3JzL3N1YnNjcmliZU9uJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVQcm9taXNlLmpzLm1hcCIsImltcG9ydCB7IHNjaGVkdWxlQXN5bmNJdGVyYWJsZSB9IGZyb20gJy4vc2NoZWR1bGVBc3luY0l0ZXJhYmxlJztcbmltcG9ydCB7IHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IgfSBmcm9tICcuLi91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKGlucHV0KSwgc2NoZWR1bGVyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlLmpzLm1hcCIsImltcG9ydCB7IHNjaGVkdWxlT2JzZXJ2YWJsZSB9IGZyb20gJy4vc2NoZWR1bGVPYnNlcnZhYmxlJztcbmltcG9ydCB7IHNjaGVkdWxlUHJvbWlzZSB9IGZyb20gJy4vc2NoZWR1bGVQcm9taXNlJztcbmltcG9ydCB7IHNjaGVkdWxlQXJyYXkgfSBmcm9tICcuL3NjaGVkdWxlQXJyYXknO1xuaW1wb3J0IHsgc2NoZWR1bGVJdGVyYWJsZSB9IGZyb20gJy4vc2NoZWR1bGVJdGVyYWJsZSc7XG5pbXBvcnQgeyBzY2hlZHVsZUFzeW5jSXRlcmFibGUgfSBmcm9tICcuL3NjaGVkdWxlQXN5bmNJdGVyYWJsZSc7XG5pbXBvcnQgeyBpc0ludGVyb3BPYnNlcnZhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4uL3V0aWwvaXNQcm9taXNlJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5TGlrZSc7XG5pbXBvcnQgeyBpc0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0l0ZXJhYmxlJztcbmltcG9ydCB7IGlzQXN5bmNJdGVyYWJsZSB9IGZyb20gJy4uL3V0aWwvaXNBc3luY0l0ZXJhYmxlJztcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIH0gZnJvbSAnLi4vdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yJztcbmltcG9ydCB7IGlzUmVhZGFibGVTdHJlYW1MaWtlIH0gZnJvbSAnLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZSc7XG5pbXBvcnQgeyBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSB9IGZyb20gJy4vc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UnO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlZC5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuZXhwb3J0IHsgQWN0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BY3Rpb24uanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBc3luY0FjdGlvbiB9IGZyb20gJy4vQXN5bmNBY3Rpb24nO1xuaW1wb3J0IHsgaW1tZWRpYXRlUHJvdmlkZXIgfSBmcm9tICcuL2ltbWVkaWF0ZVByb3ZpZGVyJztcbnZhciBBc2FwQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXNhcEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc2FwQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXNhcEFjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPT0gbnVsbCAmJiBkZWxheSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVkdWxlci5hY3Rpb25zLnB1c2godGhpcyk7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZXIuX3NjaGVkdWxlZCB8fCAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSBpbW1lZGlhdGVQcm92aWRlci5zZXRJbW1lZGlhdGUoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB1bmRlZmluZWQpKSk7XG4gICAgfTtcbiAgICBBc2FwQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCA/IGRlbGF5ID4gMCA6IHRoaXMuZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCAmJiAoKF9hID0gYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaWQpICE9PSBpZCkge1xuICAgICAgICAgICAgaW1tZWRpYXRlUHJvdmlkZXIuY2xlYXJJbW1lZGlhdGUoaWQpO1xuICAgICAgICAgICAgaWYgKHNjaGVkdWxlci5fc2NoZWR1bGVkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gQXNhcEFjdGlvbjtcbn0oQXN5bmNBY3Rpb24pKTtcbmV4cG9ydCB7IEFzYXBBY3Rpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzYXBBY3Rpb24uanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xudmFyIEFzYXBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc2FwU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzYXBTY2hlZHVsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQXNhcFNjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHZhciBmbHVzaElkID0gdGhpcy5fc2NoZWR1bGVkO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzYXBTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnQgeyBBc2FwU2NoZWR1bGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc2FwU2NoZWR1bGVyLmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi9BY3Rpb24nO1xuaW1wb3J0IHsgaW50ZXJ2YWxQcm92aWRlciB9IGZyb20gJy4vaW50ZXJ2YWxQcm92aWRlcic7XG5pbXBvcnQgeyBhcnJSZW1vdmUgfSBmcm9tICcuLi91dGlsL2FyclJlbW92ZSc7XG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuZXhwb3J0IHsgQXN5bmNBY3Rpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jQWN0aW9uLmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2NoZWR1bGVyIH0gZnJvbSAnLi4vU2NoZWR1bGVyJztcbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcbmV4cG9ydCB7IEFzeW5jU2NoZWR1bGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY1NjaGVkdWxlci5qcy5tYXAiLCJpbXBvcnQgeyBBc2FwQWN0aW9uIH0gZnJvbSAnLi9Bc2FwQWN0aW9uJztcbmltcG9ydCB7IEFzYXBTY2hlZHVsZXIgfSBmcm9tICcuL0FzYXBTY2hlZHVsZXInO1xuZXhwb3J0IHZhciBhc2FwU2NoZWR1bGVyID0gbmV3IEFzYXBTY2hlZHVsZXIoQXNhcEFjdGlvbik7XG5leHBvcnQgdmFyIGFzYXAgPSBhc2FwU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNhcC5qcy5tYXAiLCJleHBvcnQgdmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChkYXRlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGVUaW1lc3RhbXBQcm92aWRlci5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEltbWVkaWF0ZSB9IGZyb20gJy4uL3V0aWwvSW1tZWRpYXRlJztcbnZhciBzZXRJbW1lZGlhdGUgPSBJbW1lZGlhdGUuc2V0SW1tZWRpYXRlLCBjbGVhckltbWVkaWF0ZSA9IEltbWVkaWF0ZS5jbGVhckltbWVkaWF0ZTtcbmV4cG9ydCB2YXIgaW1tZWRpYXRlUHJvdmlkZXIgPSB7XG4gICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW1tZWRpYXRlOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGltbWVkaWF0ZVByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbW1lZGlhdGUpIHx8IGNsZWFySW1tZWRpYXRlKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbW1lZGlhdGVQcm92aWRlci5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmV4cG9ydCB2YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldEludGVydmFsLmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbnRlcnZhbFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbnRlcnZhbCkgfHwgY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJ2YWxQcm92aWRlci5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmV4cG9ydCB2YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRUaW1lb3V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuc2V0VGltZW91dC5hcHBseShkZWxlZ2F0ZSwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lb3V0UHJvdmlkZXIuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbmV4cG9ydCB2YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXRlcmF0b3IuanMubWFwIiwiZXhwb3J0IHZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9ic2VydmFibGUuanMubWFwIiwiaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4vY3JlYXRlRXJyb3JDbGFzcyc7XG5leHBvcnQgdmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RW1wdHlFcnJvci5qcy5tYXAiLCJ2YXIgbmV4dEhhbmRsZSA9IDE7XG52YXIgcmVzb2x2ZWQ7XG52YXIgYWN0aXZlSGFuZGxlcyA9IHt9O1xuZnVuY3Rpb24gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSkge1xuICAgIGlmIChoYW5kbGUgaW4gYWN0aXZlSGFuZGxlcykge1xuICAgICAgICBkZWxldGUgYWN0aXZlSGFuZGxlc1toYW5kbGVdO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IHZhciBJbW1lZGlhdGUgPSB7XG4gICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIGhhbmRsZSA9IG5leHRIYW5kbGUrKztcbiAgICAgICAgYWN0aXZlSGFuZGxlc1toYW5kbGVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgICAgICAgcmVzb2x2ZWQgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlZC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUpICYmIGNiKCk7IH0pO1xuICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgIH0sXG4gICAgY2xlYXJJbW1lZGlhdGU6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSk7XG4gICAgfSxcbn07XG5leHBvcnQgdmFyIFRlc3RUb29scyA9IHtcbiAgICBwZW5kaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhY3RpdmVIYW5kbGVzKS5sZW5ndGg7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUltbWVkaWF0ZS5qcy5tYXAiLCJpbXBvcnQgeyBjcmVhdGVFcnJvckNsYXNzIH0gZnJvbSAnLi9jcmVhdGVFcnJvckNsYXNzJztcbmV4cG9ydCB2YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PYmplY3RVbnN1YnNjcmliZWRFcnJvci5qcy5tYXAiLCJpbXBvcnQgeyBjcmVhdGVFcnJvckNsYXNzIH0gZnJvbSAnLi9jcmVhdGVFcnJvckNsYXNzJztcbmV4cG9ydCB2YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VW5zdWJzY3JpcHRpb25FcnJvci5qcy5tYXAiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi9pc1NjaGVkdWxlcic7XG5mdW5jdGlvbiBsYXN0KGFycikge1xuICAgIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gcG9wU2NoZWR1bGVyKGFyZ3MpIHtcbiAgICByZXR1cm4gaXNTY2hlZHVsZXIobGFzdChhcmdzKSkgPyBhcmdzLnBvcCgpIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBvcE51bWJlcihhcmdzLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIGxhc3QoYXJncykgPT09ICdudW1iZXInID8gYXJncy5wb3AoKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyZ3MuanMubWFwIiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLCBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIGdldEtleXMgPSBPYmplY3Qua2V5cztcbmV4cG9ydCBmdW5jdGlvbiBhcmdzQXJnQXJyYXlPck9iamVjdChhcmdzKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBmaXJzdF8xID0gYXJnc1swXTtcbiAgICAgICAgaWYgKGlzQXJyYXkoZmlyc3RfMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGFyZ3M6IGZpcnN0XzEsIGtleXM6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQT0pPKGZpcnN0XzEpKSB7XG4gICAgICAgICAgICB2YXIga2V5cyA9IGdldEtleXMoZmlyc3RfMSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFyZ3M6IGtleXMubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGZpcnN0XzFba2V5XTsgfSksXG4gICAgICAgICAgICAgICAga2V5czoga2V5cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYXJnczogYXJncywga2V5czogbnVsbCB9O1xufVxuZnVuY3Rpb24gaXNQT0pPKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gb2JqZWN0UHJvdG87XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcmdzQXJnQXJyYXlPck9iamVjdC5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJyUmVtb3ZlLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVFcnJvckNsYXNzLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPYmplY3Qoa2V5cywgdmFsdWVzKSB7XG4gICAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSwgaSkgeyByZXR1cm4gKChyZXN1bHRba2V5XSA9IHZhbHVlc1tpXSksIHJlc3VsdCk7IH0sIHt9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZU9iamVjdC5qcy5tYXAiLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xudmFyIGNvbnRleHQgPSBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgICAgICB2YXIgaXNSb290ID0gIWNvbnRleHQ7XG4gICAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSB7IGVycm9yVGhyb3duOiBmYWxzZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjYigpO1xuICAgICAgICBpZiAoaXNSb290KSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBjb250ZXh0LCBlcnJvclRocm93biA9IF9hLmVycm9yVGhyb3duLCBlcnJvciA9IF9hLmVycm9yO1xuICAgICAgICAgICAgY29udGV4dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUVycm9yKGVycikge1xuICAgIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyAmJiBjb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQuZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICBjb250ZXh0LmVycm9yID0gZXJyO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yQ29udGV4dC5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhlY3V0ZVNjaGVkdWxlLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZGVudGl0eS5qcy5tYXAiLCJleHBvcnQgdmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNBcnJheUxpa2UuanMubWFwIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNBc3luY0l0ZXJhYmxlLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzRnVuY3Rpb24uanMubWFwIiwiaW1wb3J0IHsgb2JzZXJ2YWJsZSBhcyBTeW1ib2xfb2JzZXJ2YWJsZSB9IGZyb20gJy4uL3N5bWJvbC9vYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtTeW1ib2xfb2JzZXJ2YWJsZV0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNJbnRlcm9wT2JzZXJ2YWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBpdGVyYXRvciBhcyBTeW1ib2xfaXRlcmF0b3IgfSBmcm9tICcuLi9zeW1ib2wvaXRlcmF0b3InO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtTeW1ib2xfaXRlcmF0b3JdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzSXRlcmFibGUuanMubWFwIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuL2lzRnVuY3Rpb25cIjtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1Byb21pc2UuanMubWFwIiwiaW1wb3J0IHsgX19hc3luY0dlbmVyYXRvciwgX19hd2FpdCwgX19nZW5lcmF0b3IgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghdHJ1ZSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcy5tYXAiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVkdWxlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnNjaGVkdWxlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzU2NoZWR1bGVyLmpzLm1hcCIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlmdC5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IG1hcCB9IGZyb20gXCIuLi9vcGVyYXRvcnMvbWFwXCI7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5mdW5jdGlvbiBjYWxsT3JBcHBseShmbiwgYXJncykge1xuICAgIHJldHVybiBpc0FycmF5KGFyZ3MpID8gZm4uYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKSA6IGZuKGFyZ3MpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcE9uZU9yTWFueUFyZ3MoZm4pIHtcbiAgICByZXR1cm4gbWFwKGZ1bmN0aW9uIChhcmdzKSB7IHJldHVybiBjYWxsT3JBcHBseShmbiwgYXJncyk7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFwT25lT3JNYW55QXJncy5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gbm9vcCgpIHsgfVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9vcC5qcy5tYXAiLCJpbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4vaWRlbnRpdHknO1xuZXhwb3J0IGZ1bmN0aW9uIHBpcGUoKSB7XG4gICAgdmFyIGZucyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGZuc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gcGlwZUZyb21BcnJheShmbnMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waXBlLmpzLm1hcCIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyB0aW1lb3V0UHJvdmlkZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyJztcbmV4cG9ydCBmdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvblVuaGFuZGxlZEVycm9yID0gY29uZmlnLm9uVW5oYW5kbGVkRXJyb3I7XG4gICAgICAgIGlmIChvblVuaGFuZGxlZEVycm9yKSB7XG4gICAgICAgICAgICBvblVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcG9ydFVuaGFuZGxlZEVycm9yLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3dVbm9ic2VydmFibGVFcnJvci5qcy5tYXAiLCJpbXBvcnQgeyB1OGFUb0hleCwgaGV4VG9VOGEgfSBmcm9tIFwiQHBvbGthZG90L3V0aWxcIjtcbmltcG9ydCB7IGlzQWRkcmVzcywgZGVjb2RlQWRkcmVzcyB9IGZyb20gXCJAcG9sa2Fkb3QvdXRpbC1jcnlwdG9cIjtcbmZ1bmN0aW9uIG1ha2VQcmUodGVtcGxhdGUsIC4uLnBhcmFtcykge1xuICAgIGxldCBzdHJpbmdzID0gc3RydWN0dXJlZENsb25lKHRlbXBsYXRlLnJhdyk7XG4gICAgbGV0IHByZSA9IFwiXCI7XG4gICAgd2hpbGUgKHN0cmluZ3MubGVuZ3RoICsgcGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IHBhcmFtID0gcGFyYW1zLnNoaWZ0KCkgPz8gXCJcIjtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gXCJvYmplY3RcIiAmJiBwYXJhbS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhcmFtID0gdThhVG9IZXgocGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09IFwic3RyaW5nXCIgJiYgaXNBZGRyZXNzKHBhcmFtKSkge1xuICAgICAgICAgICAgcGFyYW0gPSB1OGFUb0hleChkZWNvZGVBZGRyZXNzKHBhcmFtKSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJlID0gYCR7cHJlfSR7c3RyaW5ncy5zaGlmdCgpfSR7cGFyYW19YDtcbiAgICB9XG4gICAgcmV0dXJuIHByZTtcbn1cbmZ1bmN0aW9uIHBhcnNlUGx1cmFsaXR5KGlubmVyKSB7XG4gICAgY29uc3QgeyBib2R5LCBib2R5SWQsIHBhcnQsIHBhcnRJZCB9ID0gLyg/PGJvZHk+KD88Ym9keUlkPlxcdyopKD86XFwoLipcXCkpPyksKD88cGFydD4oPzxwYXJ0SWQ+XFx3KikoPzpcXCguKlxcKSk/KS8uZXhlYyhpbm5lcikuZ3JvdXBzO1xuICAgIGxldCBwbHVyYWxpdHlJZDtcbiAgICBzd2l0Y2ggKGJvZHlJZCkge1xuICAgICAgICBjYXNlIFwiVW5pdFwiOlxuICAgICAgICBjYXNlIFwiRXhlY3V0aXZlXCI6XG4gICAgICAgIGNhc2UgXCJUZWNobmljYWxcIjpcbiAgICAgICAgY2FzZSBcIkxlZ2lzbGF0aXZlXCI6XG4gICAgICAgIGNhc2UgXCJKdWRpY2lhbFwiOlxuICAgICAgICBjYXNlIFwiRGVmZW5zZVwiOlxuICAgICAgICAgICAgcGx1cmFsaXR5SWQgPSBib2R5SWQ7XG4gICAgICAgIGNhc2UgXCJNb25pa2VyXCI6XG4gICAgICAgICAgICBsZXQgeyBtb25pa2VyIH0gPSAvTW9uaWtlclxcKCg/PG1vbmlrZXI+MHhcXHcqKVxcKS8uZXhlYyhib2R5KS5ncm91cHM7XG4gICAgICAgICAgICBwbHVyYWxpdHlJZCA9IHtcbiAgICAgICAgICAgICAgICBNb25pa2VyOiBoZXhUb1U4YShtb25pa2VyKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkluZGV4XCI6XG4gICAgICAgICAgICBsZXQgeyBpbmRleCB9ID0gL0luZGV4XFwoKD88aW5kZXg+XFxkKilcXCkvLmV4ZWMoYm9keSkuZ3JvdXBzO1xuICAgICAgICAgICAgcGx1cmFsaXR5SWQgPSB7XG4gICAgICAgICAgICAgICAgSW5kZXg6IE51bWJlcihpbmRleCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGxldCBwbHVyYWxpdHlQYXJ0O1xuICAgIHN3aXRjaCAocGFydElkKSB7XG4gICAgICAgIGNhc2UgXCJWb2ljZVwiOlxuICAgICAgICAgICAgcGx1cmFsaXR5UGFydCA9IFwiVm9pY2VcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTWVtYmVyc1wiOlxuICAgICAgICAgICAgbGV0IHsgbWVtYmVycyB9ID0gL01lbWJlcnNcXCgoPzxtZW1iZXJzPlxcZCopXFwpLy5leGVjKHBhcnQpLmdyb3VwcztcbiAgICAgICAgICAgIHBsdXJhbGl0eUlkID0ge1xuICAgICAgICAgICAgICAgIE1lbWJlcnM6IHsgY291bnQ6IE51bWJlcihtZW1iZXJzKSB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRnJhY3Rpb25cIjoge1xuICAgICAgICAgICAgbGV0IHsgbm9tLCBkZW5vbSB9ID0gL0ZyYWN0aW9uXFwoKD88bm9tPlxcZCopLFxccz8oPzxkZW5vbT5cXGQqKVxcKS8uZXhlYyhwYXJ0KVxuICAgICAgICAgICAgICAgIC5ncm91cHM7XG4gICAgICAgICAgICBwbHVyYWxpdHlQYXJ0ID0ge1xuICAgICAgICAgICAgICAgIEZyYWN0aW9uOiB7IG5vbTogTnVtYmVyKG5vbSksIGRlbm9tOiBOdW1iZXIoZGVub20pIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIkF0TGVhc3RQcm9wb3J0aW9uXCI6IHtcbiAgICAgICAgICAgIGxldCB7IG5vbSwgZGVub20gfSA9IC9BdExlYXN0UHJvcG9ydGlvblxcKCg/PG5vbT5cXGQqKSxcXHM/KD88ZGVub20+XFxkKilcXCkvLmV4ZWMocGFydCkuZ3JvdXBzO1xuICAgICAgICAgICAgcGx1cmFsaXR5UGFydCA9IHtcbiAgICAgICAgICAgICAgICBBdExlYXN0UHJvcG9ydGlvbjogeyBub206IE51bWJlcihub20pLCBkZW5vbTogTnVtYmVyKGRlbm9tKSB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJNb3JlVGhhblByb3BvcnRpb25cIjoge1xuICAgICAgICAgICAgbGV0IHsgbm9tLCBkZW5vbSB9ID0gL01vcmVUaGFuUHJvcG9ydGlvblxcKCg/PG5vbT5cXGQqKSxcXHM/KD88ZGVub20+XFxkKilcXCkvLmV4ZWMocGFydCkuZ3JvdXBzO1xuICAgICAgICAgICAgcGx1cmFsaXR5UGFydCA9IHtcbiAgICAgICAgICAgICAgICBNb3JlVGhhblByb3BvcnRpb246IHsgbm9tOiBOdW1iZXIobm9tKSwgZGVub206IE51bWJlcihkZW5vbSkgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGx1cmFsaXR5SWQsXG4gICAgICAgIHBhcnQ6IHBsdXJhbGl0eVBhcnQsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1ha2VJbnRlcmlvcihzZWdtZW50cykge1xuICAgIGNvbnN0IGp1bmN0aW9ucyA9IHNlZ21lbnRzLm1hcCgoc2VnbWVudCkgPT4ge1xuICAgICAgICBsZXQgeyB0eXBlLCBpbm5lciB9ID0gLyg/PHR5cGU+XFx3KikoPzpcXCgoPzxpbm5lcj4uKilcXCkpPy8uZXhlYyhzZWdtZW50KVxuICAgICAgICAgICAgLmdyb3VwcztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwiSGVyZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIkhlcmVcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQYXJhY2hhaW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBQYXJhY2hhaW46IE51bWJlcihpbm5lcikgfTtcbiAgICAgICAgICAgIGNhc2UgXCJBY2NvdW50SWQzMlwiOlxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHR5cGUsIGlubmVyKTtcbiAgICAgICAgICAgICAgICBsZXQgeyBuZXR3b3JrID0gbnVsbCwgaWQgfSA9IC8oPzxuZXR3b3JrPlxcdyosKT8oPzxpZD4weC4qKS8uZXhlYyhpbm5lcilcbiAgICAgICAgICAgICAgICAgICAgLmdyb3VwcztcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBBY2NvdW50SWQzMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBoZXhUb1U4YShpZCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhc2UgXCJQbHVyYWxpdHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBQbHVyYWxpdHk6IHBhcnNlUGx1cmFsaXR5KGlubmVyKSB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGp1bmN0aW9ucy5sZW5ndGggPT09IDEgJiYganVuY3Rpb25zWzBdID09PSBcIkhlcmVcIlxuICAgICAgICA/IFwiSGVyZVwiXG4gICAgICAgIDoge1xuICAgICAgICAgICAgW2BYJHtqdW5jdGlvbnMubGVuZ3RofWBdOiBqdW5jdGlvbnMsXG4gICAgICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gaW50ZXJpb3IodGVtcGxhdGUsIC4uLnBhcmFtcykge1xuICAgIGNvbnN0IHByZSA9IG1ha2VQcmUodGVtcGxhdGUsIC4uLnBhcmFtcyk7XG4gICAgcmV0dXJuIG1ha2VJbnRlcmlvcihwcmUuc3BsaXQoXCIvXCIpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbih0ZW1wbGF0ZSwgLi4ucGFyYW1zKSB7XG4gICAgY29uc3QgcHJlID0gbWFrZVByZSh0ZW1wbGF0ZSwgLi4ucGFyYW1zKTtcbiAgICBjb25zdCBzZWdtZW50cyA9IHByZS5zcGxpdChcIi9cIik7XG4gICAgbGV0IHBhcmVudHMgPSAwO1xuICAgIHdoaWxlIChzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaGVhZCA9IHNlZ21lbnRzLnNoaWZ0KCk7XG4gICAgICAgIGlmIChoZWFkID09IFwiLi5cIikge1xuICAgICAgICAgICAgcGFyZW50cyArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhlYWQgPT09IFwiLlwiKSB7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZWdtZW50cy51bnNoaWZ0KGhlYWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGFyZW50cyxcbiAgICAgICAgaW50ZXJpb3I6IG1ha2VJbnRlcmlvcihzZWdtZW50cyksXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQWNjb3VudElkMzIoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBBY2NvdW50SWQzMjoge1xuICAgICAgICAgICAgbmV0d29yazogbnVsbCxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZnVuZ2libGVBc3NldChpZCwgYW1vdW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGZ1bjogeyBGdW5naWJsZTogYW1vdW50IH0sXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb25jcmV0ZUlkZnVuZ2libGVBc3NldChpZCwgYW1vdW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHsgQ29uY3JldGU6IGlkIH0sXG4gICAgICAgIGZ1bjogeyBGdW5naWJsZTogYW1vdW50IH0sXG4gICAgfTtcbn1cbiIsImltcG9ydCB7IFdzUHJvdmlkZXIgfSBmcm9tIFwiQHBvbGthZG90L2FwaVwiO1xuaW1wb3J0IHsgd2ViM0VuYWJsZSwgd2ViM0Zyb21BZGRyZXNzIH0gZnJvbSBcIkBwb2xrYWRvdC9leHRlbnNpb24tZGFwcFwiO1xuZXhwb3J0IGNsYXNzIFhjbVByb2dyYW1zRXhlY3V0b3Ige1xuICAgIHByb3ZpZGVycyA9IHt9O1xuICAgIGFkZHJlc3M7XG4gICAgc2lnbmVyO1xuICAgIGNvbnN0cnVjdG9yKHByb3ZpZGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhwcm92aWRlcnMpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVyc1trZXldID0gbmV3IFdzUHJvdmlkZXIoZW5kcG9pbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGluaXRpYWxpemUoYXBwTmFtZSkge1xuICAgICAgICBhd2FpdCB3ZWIzRW5hYmxlKGFwcE5hbWUpO1xuICAgIH1cbiAgICBhc3luYyBzZXRTaWduZXIoYWRkcmVzcykge1xuICAgICAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgICB0aGlzLnNpZ25lciA9IChhd2FpdCB3ZWIzRnJvbUFkZHJlc3MoYWRkcmVzcykpLnNpZ25lcjtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZShmbiwgLi4ucGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmbih0aGlzLnByb3ZpZGVycywgdGhpcy5hZGRyZXNzLCB0aGlzLnNpZ25lciwgLi4ucGFyYW1zKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgXCJAcG9sa2Fkb3QvYXBpLWF1Z21lbnQva3VzYW1hXCI7XG5pbXBvcnQgeyBBcGlQcm9taXNlIH0gZnJvbSBcIkBwb2xrYWRvdC9hcGlcIjtcbmNvbnN0IHsgT3B0aW9uLCBIMjU2IH0gPSByZXF1aXJlKCdAcG9sa2Fkb3QvdHlwZXMnKTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b3B1cFRoZW5Jbml0aWF0aXZlQWRkTWVtYmVycyhcbi8vIEluamVjdGVkIHBhcmFtZXRlcnNcbnByb3ZpZGVycywgYWRkcmVzcywgc2lnbmVyLCBcbi8vIFByb3ZpZGVkXG5jb21tdW5pdHlJZCwgaW5pdGlhdGl2ZUlkLCBtZW1iZXJzaGlwQWNjb3VudHNBZGQgPSBbXSwgbWVtYmVyc2hpcEFjY291bnRzUmVtb3ZlID0gW10sIHJvb21JZCwgbWF5YmVIYXNoKSB7XG4gICAgY29uc3Qga3JlaXZvQXBpID0gYXdhaXQgQXBpUHJvbWlzZS5jcmVhdGUoe1xuICAgICAgICBwcm92aWRlcjogcHJvdmlkZXJzLmtyZWl2byxcbiAgICB9KTtcbiAgICBjb25zdCBhZGRNZW1iZXJzID0gbWVtYmVyc2hpcEFjY291bnRzQWRkLm1hcCgoYWNjb3VudCkgPT4ga3JlaXZvQXBpLnR4LmNvbW11bml0aWVzLmFkZE1lbWJlcih7XG4gICAgICAgIElkOiBhY2NvdW50LFxuICAgIH0pKTtcbiAgICBjb25zdCByZW1vdmVNZW1iZXJzID0gbWVtYmVyc2hpcEFjY291bnRzUmVtb3ZlLm1hcCgoYWNjb3VudCkgPT4ga3JlaXZvQXBpLnR4LmNvbW11bml0aWVzLnJlbW92ZU1lbWJlcih7XG4gICAgICAgIElkOiBhY2NvdW50LmFjY291bnRJZCxcbiAgICB9LCBhY2NvdW50Lm1lbWJlcnNoaXBJZCkpO1xuICAgIGNvbnN0IGlubGluZVByb3Bvc2FsID0ga3JlaXZvQXBpLnR4LnV0aWxpdHkuYmF0Y2hBbGwoW1xuICAgICAgICAuLi5hZGRNZW1iZXJzLCAuLi5yZW1vdmVNZW1iZXJzXG4gICAgXSkudG9IZXgoKTtcbiAgICBjb25zb2xlLmxvZyhcImNhbGwgaGFzaDogXCIsIGlubGluZVByb3Bvc2FsKTtcbiAgICBjb25zdCBpbml0aWF0aXZlQWRkTWVtYmVycyA9IGtyZWl2b0FwaS50eC5jb21tdW5pdHlSZWZlcmVuZGEuc3VibWl0KHtcbiAgICAgICAgQ29tbXVuaXRpZXM6IHtcbiAgICAgICAgICAgIGNvbW11bml0eUlkXG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIElubGluZTogaW5saW5lUHJvcG9zYWxcbiAgICB9LCB7XG4gICAgICAgIEFmdGVyOiAwXG4gICAgfSk7XG4gICAgY29uc3QgaW5pdGlhdGl2ZVByZWltYWdlTWV0YWRhdGEgPSBrcmVpdm9BcGkudHgucHJlaW1hZ2Uubm90ZVByZWltYWdlKHJvb21JZCk7XG4gICAgY29uc29sZS5sb2coXCJtZXRhZGF0YTogXCIsIG1heWJlSGFzaCk7XG4gICAgY29uc3QgaW5pdGlhdGl2ZVJlZmVyZW5kYU1ldGFkYXRhID0ga3JlaXZvQXBpLnR4LmNvbW11bml0eVJlZmVyZW5kYS5zZXRNZXRhZGF0YShpbml0aWF0aXZlSWQsIG1heWJlSGFzaCk7XG4gICAgY29uc3QgaW5pdGlhdGl2ZVBsYWNlRGVjaXNpb25EZXBvc2l0ID0ga3JlaXZvQXBpLnR4LmNvbW11bml0eVJlZmVyZW5kYS5wbGFjZURlY2lzaW9uRGVwb3NpdChpbml0aWF0aXZlSWQpO1xuICAgIHJldHVybiBrcmVpdm9BcGkudHgudXRpbGl0eVxuICAgICAgICAuYmF0Y2hBbGwoW2luaXRpYXRpdmVBZGRNZW1iZXJzLCBpbml0aWF0aXZlUHJlaW1hZ2VNZXRhZGF0YSwgaW5pdGlhdGl2ZVJlZmVyZW5kYU1ldGFkYXRhLCBpbml0aWF0aXZlUGxhY2VEZWNpc2lvbkRlcG9zaXRdKVxuICAgICAgICAuc2lnbkFuZFNlbmQoYWRkcmVzcywgeyBzaWduZXIgfSwgKCkgPT4gY29uc29sZS5sb2coXCJzaWduXCIpKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b3B1cFRoZW5Jbml0aWF0aXZlVm90ZShcbi8vIEluamVjdGVkIHBhcmFtZXRlcnNcbnByb3ZpZGVycywgYWRkcmVzcywgc2lnbmVyLCBcbi8vIFByb3ZpZGVkXG5tZW1iZXJzaGlwSWQsIHBvbGxJbmRleCwgdm90ZSkge1xuICAgIGNvbnN0IGtyZWl2b0FwaSA9IGF3YWl0IEFwaVByb21pc2UuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXI6IHByb3ZpZGVycy5rcmVpdm8sXG4gICAgfSk7XG4gICAgcmV0dXJuIGtyZWl2b0FwaS50eC5jb21tdW5pdGllcy52b3RlKG1lbWJlcnNoaXBJZCwgcG9sbEluZGV4LCB7XG4gICAgICAgIFN0YW5kYXJkOiB2b3RlXG4gICAgfSkuc2lnbkFuZFNlbmQoYWRkcmVzcywgeyBzaWduZXIgfSwgKCkgPT4gY29uc29sZS5sb2coXCJzaWduIHZvdGVcIikpO1xufVxuIiwiLy8gV2FybmluZzogKG5vdCB2ZXJ5KSBiZXN0IGVmZm9ydCBoZXJlLlxuLy8gVGhpcyBzY3JpcHQgcmVhZHMgc29tZSBtZW1iZXJzaGlwcyBpbiBzYWxlIGZyb20gdGhlIHN0b3JhZ2UsIHRoZW4gYnV5cyBhbmQgYXNzaWduZC5cbi8vIFRoaXMgZmFpbHMgaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggbWVtYmVyc2hpcHMuIEhvd2V2ZXIsIHdlIGNhbid0IHN0aWxsIHByb3BhZ2F0ZSBzdWNoIGVycm9ycy5cbmltcG9ydCBcIkBwb2xrYWRvdC9hcGktYXVnbWVudC9zdWJzdHJhdGVcIjtcbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVNZW1iZXJzaGlwcyhhcGksIG1lbWJlcnNoaXBBY2NvdW50cykge1xuICAgIGNvbnN0IGl0ZW1zRm9yU2FsZSA9IGF3YWl0IGFwaS5xdWVyeS5jb21tdW5pdHlNZW1iZXJzaGlwcy5pdGVtUHJpY2VPZi5lbnRyaWVzUGFnZWQoe1xuICAgICAgICBhcmdzOiBbMF0sXG4gICAgICAgIHBhZ2VTaXplOiBtZW1iZXJzaGlwQWNjb3VudHMubGVuZ3RoLFxuICAgIH0pO1xuICAgIHJldHVybiBpdGVtc0ZvclNhbGUubWFwKChba2V5LCB2YWx1ZV0sIGkpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUtleSA9IGtleS50b0h1bWFuKClbMV07XG4gICAgICAgIGNvbnN0IHByZUl0ZW0gPSBrZXkudG9IdW1hbigpWzFdLnJlcGxhY2VBbGwoL1xcRC9nLCBcIlwiKTtcbiAgICAgICAgY29uc3QgaXRlbSA9IE51bWJlcihwcmVJdGVtKTtcbiAgICAgICAgY29uc29sZS5sb2coaXRlbUtleSwgcHJlSXRlbSwgaXRlbSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgcHJpY2U6IHZhbHVlXG4gICAgICAgICAgICAgICAgLnVud3JhcCgpWzBdXG4gICAgICAgICAgICAgICAgLnRvTnVtYmVyKCksXG4gICAgICAgICAgICBhY2NvdW50VG9Bc3NpZ246IG1lbWJlcnNoaXBBY2NvdW50c1tpXSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3F1aXJlTWVtYmVyc2hpcHNBbmRBZGRNZW1iZXJzKGt1c2FtYUFwaSwga3JlaXZvQXBpLCBtZW1iZXJzaGlwQWNjb3VudHMpIHtcbiAgICBjb25zdCBtZW1iZXJzaGlwc1RvQWNxdWlyZSA9IGF3YWl0IHByZXBhcmVNZW1iZXJzaGlwcyhrcmVpdm9BcGksIG1lbWJlcnNoaXBBY2NvdW50cyk7XG4gICAgY29uc3QgeyBtZXRob2QgfSA9IGtyZWl2b0FwaS50eC5jb21tdW5pdGllcy5kaXNwYXRjaEFzQWNjb3VudChrcmVpdm9BcGkudHgudXRpbGl0eS5iYXRjaChtZW1iZXJzaGlwc1RvQWNxdWlyZS5mbGF0TWFwKChtKSA9PiBbXG4gICAgICAgIGtyZWl2b0FwaS50eC5jb21tdW5pdHlNZW1iZXJzaGlwcy5idXlJdGVtKDAsIG0uaXRlbSwgbS5wcmljZSksXG4gICAgICAgIGtyZWl2b0FwaS50eC5jb21tdW5pdGllcy5hZGRNZW1iZXIobS5hY2NvdW50VG9Bc3NpZ24pLFxuICAgIF0pKSk7XG4gICAgY29uc3QgZGlzcGF0Y2hJbmZvID0gYXdhaXQga3JlaXZvQXBpLmNhbGwudHJhbnNhY3Rpb25QYXltZW50Q2FsbEFwaS5xdWVyeUNhbGxJbmZvKG1ldGhvZCwgbWV0aG9kLnRvVThhKCkubGVuZ3RoKTtcbiAgICByZXR1cm4ga3VzYW1hQXBpLmNyZWF0ZVR5cGUoXCJTdGFnaW5nWGNtVjRJbnN0cnVjdGlvblwiLCB7XG4gICAgICAgIFRyYW5zYWN0OiB7XG4gICAgICAgICAgICBvcmlnaW5LaW5kOiBcIlNvdmVyZWlnbkFjY291bnRcIixcbiAgICAgICAgICAgIHJlcXVpcmVXZWlnaHRBdE1vc3Q6IGRpc3BhdGNoSW5mby53ZWlnaHQsXG4gICAgICAgICAgICBjYWxsOiB7XG4gICAgICAgICAgICAgICAgZW5jb2RlZDogbWV0aG9kLnRvSGV4KCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gXCJAcG9sa2Fkb3QvdXRpbC1jcnlwdG9cIjtcbmZ1bmN0aW9uIGdldERlY2lzaW9uTWV0aG9kKGRlY2lzaW9uTWV0aG9kKSB7XG4gICAgbGV0IGVuY29kZWREZWNpc2lvbk1ldGhvZCA9IHtcbiAgICAgICAgTWVtYmVyc2hpcDogbnVsbCxcbiAgICB9O1xuICAgIHN3aXRjaCAoZGVjaXNpb25NZXRob2Q/LnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIlJhbmtcIjpcbiAgICAgICAgICAgIGVuY29kZWREZWNpc2lvbk1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgICBSYW5rOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF0aXZlVG9rZW5cIjpcbiAgICAgICAgICAgIGVuY29kZWREZWNpc2lvbk1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgICBOYXRpdmVUb2tlbjogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNvbW11bml0eUFzc2V0XCI6XG4gICAgICAgICAgICBlbmNvZGVkRGVjaXNpb25NZXRob2QgPSB7XG4gICAgICAgICAgICAgICAgQ29tbXVuaXR5QXNzZXQ6IFtkZWNpc2lvbk1ldGhvZC5pZCwgZGVjaXNpb25NZXRob2QubWluVm90ZV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVkRGVjaXNpb25NZXRob2Q7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tbXVuaXR5VHJhbnNhY3Qoa3VzYW1hQXBpLCBrcmVpdm9BcGksIHNpZ25lckFkZHJlc3MsIGNvbW11bml0eUlkLCBuYW1lLCBkZWNpc2lvbk1ldGhvZCkge1xuICAgIGNvbnN0IGVuY29kZWREZWNpc2lvbk1ldGhvZCA9IGdldERlY2lzaW9uTWV0aG9kKGRlY2lzaW9uTWV0aG9kKTtcbiAgICAvLyBQYXJ0IDI6IENyZWF0ZSBDb21tdW5pdHksIHRoZW4gc2V0IGlkZW50aXRpZXNcbiAgICBjb25zdCBjcmVhdGVDb21tdW5pdHkgPSBrcmVpdm9BcGkudHguY29tbXVuaXRpZXNNYW5hZ2VyLnJlZ2lzdGVyKGNvbW11bml0eUlkLCBuYW1lLCB7XG4gICAgICAgIElkOiBkZWNvZGVBZGRyZXNzKHNpZ25lckFkZHJlc3MpLFxuICAgIH0sIGVuY29kZWREZWNpc2lvbk1ldGhvZCwgbnVsbCk7XG4gICAgY29uc3QgY3JlYXRlQ29tbXVuaXR5RGlzcGF0Y2hJbmZvID0gYXdhaXQga3JlaXZvQXBpLmNhbGwudHJhbnNhY3Rpb25QYXltZW50Q2FsbEFwaS5xdWVyeUNhbGxJbmZvKGNyZWF0ZUNvbW11bml0eS5tZXRob2QsIGNyZWF0ZUNvbW11bml0eS5tZXRob2QudG9VOGEoKS5sZW5ndGgpO1xuICAgIHJldHVybiBrdXNhbWFBcGkuY3JlYXRlVHlwZShcIlN0YWdpbmdYY21WNEluc3RydWN0aW9uXCIsIHtcbiAgICAgICAgVHJhbnNhY3Q6IHtcbiAgICAgICAgICAgIG9yaWdpbktpbmQ6IFwiU292ZXJlaWduQWNjb3VudFwiLFxuICAgICAgICAgICAgcmVxdWlyZVdlaWdodEF0TW9zdDogY3JlYXRlQ29tbXVuaXR5RGlzcGF0Y2hJbmZvLndlaWdodCxcbiAgICAgICAgICAgIGNhbGw6IHtcbiAgICAgICAgICAgICAgICBlbmNvZGVkOiBjcmVhdGVDb21tdW5pdHkubWV0aG9kLnRvSGV4KCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pO1xufVxuIiwiaW1wb3J0IFwiQHBvbGthZG90L2FwaS1hdWdtZW50L2t1c2FtYVwiO1xuaW1wb3J0IHsgQXBpUHJvbWlzZSB9IGZyb20gXCJAcG9sa2Fkb3QvYXBpXCI7XG5pbXBvcnQgeyBsb2NhdGlvbiwgZnVuZ2libGVBc3NldCB9IGZyb20gXCIuLi9jb21tb25cIjtcbmltcG9ydCB7IHRvcHVwQ29tbXVuaXR5QWNjb3VudEluS3JlaXZvLCB0b3B1cENvbW11bml0eUFjY291bnRJblBlb3BsZSwgdG9wdXBTaWduZXJBY2NvdW50SW5LcmVpdm8sIH0gZnJvbSBcIi4vdG9wdXAtYWNjb3VudHNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbW11bml0eVRyYW5zYWN0IH0gZnJvbSBcIi4vY3JlYXRlLWNvbW11bml0eVwiO1xuaW1wb3J0IHsgc2V0SWRlbnRpdHlUaGVuQWRkU3Vic1NlbmRUcmFuc2FjdCB9IGZyb20gXCIuL3NldC1pZGVudGl0eVwiO1xuaW1wb3J0IHsgYWNxdWlyZU1lbWJlcnNoaXBzQW5kQWRkTWVtYmVycyB9IGZyb20gXCIuL2FjcXVpcmUtbWVtYmVyc2hpcHMtaW52aXRlLW1lbWJlcnNcIjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b3B1cFRoZW5DcmVhdGVDb21tdW5pdHkoXG4vLyBJbmplY3RlZCBwYXJhbWV0ZXJzXG5wcm92aWRlcnMsIGFkZHJlc3MsIHNpZ25lciwgXG4vLyBQcm92aWRlZFxuY29tbXVuaXR5SWQsIG5hbWUsIGRlY2lzaW9uTWV0aG9kID0geyB0eXBlOiBcIk1lbWJlcnNoaXBcIiB9LCBpZGVudGl0eSwgbWVtYmVyc2hpcEFjY291bnRzID0gW10sIHRvcHVwID0ge1xuICAgIHNpZ25lckluS3JlaXZvOiAwLjUxZTEyLFxuICAgIGNvbW11bml0eUFjY291bnRJbktyZWl2bzogMWU5ICsgMC4zZTEyICogbWVtYmVyc2hpcEFjY291bnRzLmxlbmd0aCxcbiAgICBjb21tdW5pdHlBY2NvdW50SW5QZW9wbGU6IGlkZW50aXR5ID8gMC4xMWUxMiA6IDAsXG59KSB7XG4gICAgY29uc3Qga3VzYW1hQXBpID0gYXdhaXQgQXBpUHJvbWlzZS5jcmVhdGUoe1xuICAgICAgICBwcm92aWRlcjogcHJvdmlkZXJzLmt1c2FtYSxcbiAgICB9KTtcbiAgICBjb25zdCBrcmVpdm9BcGkgPSBhd2FpdCBBcGlQcm9taXNlLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcnMua3JlaXZvLFxuICAgIH0pO1xuICAgIGNvbnN0IHBlb3BsZUFwaSA9IGF3YWl0IEFwaVByb21pc2UuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXI6IHByb3ZpZGVycy5rdXNhbWFQZW9wbGUsXG4gICAgfSk7XG4gICAgLy8gUGFydCAxOiBUcmFuc2ZlciBhc3NldHNcbiAgICBjb25zdCB0cmFuc2ZlckFzc2V0c0V4ZWN1dGlvbiA9IGt1c2FtYUFwaS50eC54Y21QYWxsZXQuZXhlY3V0ZSh7XG4gICAgICAgIFY0OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgV2l0aGRyYXdBc3NldDogW1xuICAgICAgICAgICAgICAgICAgICBmdW5naWJsZUFzc2V0KGxvY2F0aW9uIGAuL0hlcmVgLCB0b3B1cC5zaWduZXJJbktyZWl2byArXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3B1cC5jb21tdW5pdHlBY2NvdW50SW5LcmVpdm8gK1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wdXAuY29tbXVuaXR5QWNjb3VudEluUGVvcGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgIDVlOCksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgQnV5RXhlY3V0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGZlZXM6IGZ1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4vSGVyZWAsIDVlOCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi4odG9wdXAuc2lnbmVySW5LcmVpdm9cbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdG9wdXBTaWduZXJBY2NvdW50SW5LcmVpdm8oa3VzYW1hQXBpLCBhZGRyZXNzLCB0b3B1cC5zaWduZXJJbktyZWl2byksXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgLi4uKHRvcHVwLmNvbW11bml0eUFjY291bnRJbktyZWl2b1xuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0b3B1cENvbW11bml0eUFjY291bnRJbktyZWl2byhrdXNhbWFBcGksIGNvbW11bml0eUlkLCB0b3B1cC5jb21tdW5pdHlBY2NvdW50SW5LcmVpdm8pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIC4uLih0b3B1cC5jb21tdW5pdHlBY2NvdW50SW5QZW9wbGVcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdG9wdXBDb21tdW5pdHlBY2NvdW50SW5QZW9wbGUoa3VzYW1hQXBpLCBjb21tdW5pdHlJZCwgdG9wdXAuY29tbXVuaXR5QWNjb3VudEluUGVvcGxlKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgUmVmdW5kU3VycGx1czogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2V0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgV2lsZDogXCJBbGxcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmVuZWZpY2lhcnk6IGxvY2F0aW9uIGAuL0FjY291bnRJZDMyKCR7YWRkcmVzc30pYCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9LCB7XG4gICAgICAgIHJlZlRpbWU6IGt1c2FtYUFwaS5jcmVhdGVUeXBlKFwiQ29tcGFjdDx1NjQ+XCIsIDFlMTApLFxuICAgICAgICBwcm9vZlNpemU6IGt1c2FtYUFwaS5jcmVhdGVUeXBlKFwiQ29tcGFjdDx1NjQ+XCIsIDFlOCksXG4gICAgfSk7XG4gICAgLy8gUGFydCAyOiBDcmVhdGUgQ29tbXVuaXR5IGFuZCBTZXQgSWRlbnRpdGllc1xuICAgIGNvbnN0IGNyZWF0ZUNvbW11bml0eVNlbmQgPSBrdXNhbWFBcGkudHgueGNtUGFsbGV0LnNlbmQoe1xuICAgICAgICBWNDogbG9jYXRpb24gYC4vUGFyYWNoYWluKDIyODEpYCxcbiAgICB9LCB7XG4gICAgICAgIFY0OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgV2l0aGRyYXdBc3NldDogW2Z1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4uL0hlcmVgLCA5ZTkpXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgQnV5RXhlY3V0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGZlZXM6IGZ1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4uL0hlcmVgLCA5ZTkpLFxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRMaW1pdDogXCJVbmxpbWl0ZWRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF3YWl0IGNyZWF0ZUNvbW11bml0eVRyYW5zYWN0KGt1c2FtYUFwaSwga3JlaXZvQXBpLCBhZGRyZXNzLCBjb21tdW5pdHlJZCwgbmFtZSwgZGVjaXNpb25NZXRob2QpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEV4cGVjdFRyYW5zYWN0U3RhdHVzOiBcIlN1Y2Nlc3NcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi4obWVtYmVyc2hpcEFjY291bnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYWNxdWlyZU1lbWJlcnNoaXBzQW5kQWRkTWVtYmVycyhrdXNhbWFBcGksIGtyZWl2b0FwaSwgbWVtYmVyc2hpcEFjY291bnRzKSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwZWN0VHJhbnNhY3RTdGF0dXM6IFwiU3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIC4uLihpZGVudGl0eSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNldElkZW50aXR5VGhlbkFkZFN1YnNTZW5kVHJhbnNhY3Qoa3VzYW1hQXBpLCBrcmVpdm9BcGksIHBlb3BsZUFwaSwgY29tbXVuaXR5SWQsIGlkZW50aXR5KSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgRXhwZWN0VHJhbnNhY3RTdGF0dXM6IFwiU3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIFwiUmVmdW5kU3VycGx1c1wiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIERlcG9zaXRBc3NldDoge1xuICAgICAgICAgICAgICAgICAgICBhc3NldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdpbGQ6IFwiQWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiBsb2NhdGlvbiBgLi9BY2NvdW50SWQzMigke2FkZHJlc3N9KWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGt1c2FtYUFwaS50eC51dGlsaXR5XG4gICAgICAgIC5iYXRjaChbdHJhbnNmZXJBc3NldHNFeGVjdXRpb24sIGNyZWF0ZUNvbW11bml0eVNlbmRdKVxuICAgICAgICAuc2lnbkFuZFNlbmQoYWRkcmVzcywgeyBzaWduZXIgfSwgKCkgPT4gY29uc29sZS5sb2coXCJzaWduXCIpKTtcbn1cbiIsImltcG9ydCBcIkBwb2xrYWRvdC9hcGktYXVnbWVudC9rdXNhbWFcIjtcbmltcG9ydCB7IGNvbW11bml0eUFjY291bnRJbktyZWl2bywgc292ZXJlaWduQWNjb3VudEZvckNvbW11bml0eUluUmVsYXksIH0gZnJvbSBcIi4uL3V0aWxzL2NvbW11bml0eS1hY2NvdW50LWlkc1wiO1xuaW1wb3J0IHsgY29uY3JldGVJZGZ1bmdpYmxlQXNzZXQsIGxvY2F0aW9uIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuZnVuY3Rpb24gZW5jb2RlYWJsZUlkZW50aXR5KGlkZW50aXR5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlkZW50aXR5KS5yZWR1Y2UoKG8sIFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgLi4ubyxcbiAgICAgICAgW2tleV06IHZhbHVlICE9PSB1bmRlZmluZWQgfHwgdmFsdWUgIT09IG51bGwgPyB7IFJhdzogdmFsdWUgfSA6IFwiTm9uZVwiLFxuICAgIH0pLCB7fSk7XG59XG5hc3luYyBmdW5jdGlvbiBzZXRJZGVudGl0eVRyYW5zYWN0KGtyZWl2b0FwaSwgcGVvcGxlQXBpLCBpZGVudGl0eSkge1xuICAgIGNvbnN0IHsgbWV0aG9kIH0gPSBwZW9wbGVBcGkudHguaWRlbnRpdHkuc2V0SWRlbnRpdHkoZW5jb2RlYWJsZUlkZW50aXR5KGlkZW50aXR5KSk7XG4gICAgY29uc3QgZGlzcGF0Y2hJbmZvID0gYXdhaXQgcGVvcGxlQXBpLmNhbGwudHJhbnNhY3Rpb25QYXltZW50Q2FsbEFwaS5xdWVyeUNhbGxJbmZvKG1ldGhvZC50b1U4YSgpLCBtZXRob2QudG9VOGEoKS5sZW5ndGgpO1xuICAgIHJldHVybiBrcmVpdm9BcGkuY3JlYXRlVHlwZShcIlhjbVYzSW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICBUcmFuc2FjdDoge1xuICAgICAgICAgICAgb3JpZ2luS2luZDogXCJTb3ZlcmVpZ25BY2NvdW50XCIsXG4gICAgICAgICAgICByZXF1aXJlV2VpZ2h0QXRNb3N0OiBkaXNwYXRjaEluZm8ud2VpZ2h0LFxuICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgIGVuY29kZWQ6IG1ldGhvZC50b0hleCgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGFkZFN1YlRyYW5zYWN0KGtyZWl2b0FwaSwgcGVvcGxlQXBpLCBzdWIsIG5hbWUpIHtcbiAgICBjb25zdCB7IG1ldGhvZCB9ID0gcGVvcGxlQXBpLnR4LmlkZW50aXR5LmFkZFN1YihzdWIsIHsgUmF3OiBuYW1lIH0pO1xuICAgIGNvbnN0IGRpc3BhdGNoSW5mbyA9IGF3YWl0IHBlb3BsZUFwaS5jYWxsLnRyYW5zYWN0aW9uUGF5bWVudENhbGxBcGkucXVlcnlDYWxsSW5mbyhtZXRob2QudG9VOGEoKSwgbWV0aG9kLnRvVThhKCkubGVuZ3RoKTtcbiAgICByZXR1cm4ga3JlaXZvQXBpLmNyZWF0ZVR5cGUoXCJYY21WM0luc3RydWN0aW9uXCIsIHtcbiAgICAgICAgVHJhbnNhY3Q6IHtcbiAgICAgICAgICAgIG9yaWdpbktpbmQ6IFwiU292ZXJlaWduQWNjb3VudFwiLFxuICAgICAgICAgICAgcmVxdWlyZVdlaWdodEF0TW9zdDogZGlzcGF0Y2hJbmZvLndlaWdodCxcbiAgICAgICAgICAgIGNhbGw6IHtcbiAgICAgICAgICAgICAgICBlbmNvZGVkOiBtZXRob2QudG9IZXgoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0SWRlbnRpdHlUaGVuQWRkU3Vic1NlbmRUcmFuc2FjdChrdXNhbWFBcGksIGtyZWl2b0FwaSwgcGVvcGxlQXBpLCBjb21tdW5pdHlJZCwgaWRlbnRpdHkpIHtcbiAgICBjb25zdCByZWxheUNvbW11bml0eUFjY291bnQgPSBhd2FpdCBzb3ZlcmVpZ25BY2NvdW50Rm9yQ29tbXVuaXR5SW5SZWxheShrcmVpdm9BcGksIGNvbW11bml0eUlkKTtcbiAgICBjb25zdCBsb2NhbENvbW11bml0eUFjY291bnQgPSBhd2FpdCBjb21tdW5pdHlBY2NvdW50SW5LcmVpdm8oa3JlaXZvQXBpLCBjb21tdW5pdHlJZCk7XG4gICAgY29uc3QgeyBtZXRob2QgfSA9IGtyZWl2b0FwaS50eC5jb21tdW5pdGllcy5kaXNwYXRjaEFzQWNjb3VudChrcmVpdm9BcGkudHgucG9sa2Fkb3RYY20uc2VuZCh7XG4gICAgICAgIFYzOiBrcmVpdm9BcGkuY3JlYXRlVHlwZShcIlN0YWdpbmdYY21WM011bHRpTG9jYXRpb25cIiwge1xuICAgICAgICAgICAgcGFyZW50czogMSxcbiAgICAgICAgICAgIGludGVyaW9yOiB7IFgxOiB7IFBhcmFjaGFpbjogMTAwNCB9IH0sXG4gICAgICAgIH0pLFxuICAgIH0sIHtcbiAgICAgICAgVjM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiBbY29uY3JldGVJZGZ1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4uL0hlcmVgLCAxZTkpXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgQnV5RXhlY3V0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGZlZXM6IGNvbmNyZXRlSWRmdW5naWJsZUFzc2V0KGxvY2F0aW9uIGAuLi9IZXJlYCwgMWU5KSxcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0TGltaXQ6IFwiVW5saW1pdGVkXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhd2FpdCBzZXRJZGVudGl0eVRyYW5zYWN0KGtyZWl2b0FwaSwgcGVvcGxlQXBpLCBpZGVudGl0eSksXG4gICAgICAgICAgICB7IEV4cGVjdFRyYW5zYWN0U3RhdHVzOiBcIlN1Y2Nlc3NcIiB9LFxuICAgICAgICAgICAgYXdhaXQgYWRkU3ViVHJhbnNhY3Qoa3JlaXZvQXBpLCBwZW9wbGVBcGksIHJlbGF5Q29tbXVuaXR5QWNjb3VudCwgXCJTb3ZlcmVpZ24gQWNjb3VudCBpbiBLdXNhbWFcIiksXG4gICAgICAgICAgICB7IEV4cGVjdFRyYW5zYWN0U3RhdHVzOiBcIlN1Y2Nlc3NcIiB9LFxuICAgICAgICAgICAgYXdhaXQgYWRkU3ViVHJhbnNhY3Qoa3JlaXZvQXBpLCBwZW9wbGVBcGksIGxvY2FsQ29tbXVuaXR5QWNjb3VudCwgXCJDb21tdW5pdHkgQWNjb3VudCBpbiBLcmVpdm9cIiksXG4gICAgICAgICAgICB7IEV4cGVjdFRyYW5zYWN0U3RhdHVzOiBcIlN1Y2Nlc3NcIiB9LFxuICAgICAgICAgICAgXCJSZWZ1bmRTdXJwbHVzXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2V0czogeyBXaWxkOiBcIkFsbFwiIH0sXG4gICAgICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiBsb2NhdGlvbiBgLi4vUGFyYWNoYWluKDIyODEpL1BsdXJhbGl0eShJbmRleCgke2NvbW11bml0eUlkfSksVm9pY2UpYCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9KSk7XG4gICAgY29uc3QgZGlzcGF0Y2hJbmZvID0gYXdhaXQga3JlaXZvQXBpLmNhbGwudHJhbnNhY3Rpb25QYXltZW50Q2FsbEFwaS5xdWVyeUNhbGxJbmZvKG1ldGhvZC50b1U4YSgpLCBtZXRob2QudG9VOGEoKS5sZW5ndGgpO1xuICAgIHJldHVybiBrdXNhbWFBcGkuY3JlYXRlVHlwZShcIlN0YWdpbmdYY21WNEluc3RydWN0aW9uXCIsIHtcbiAgICAgICAgVHJhbnNhY3Q6IHtcbiAgICAgICAgICAgIG9yaWdpbktpbmQ6IFwiU292ZXJlaWduQWNjb3VudFwiLFxuICAgICAgICAgICAgcmVxdWlyZVdlaWdodEF0TW9zdDogZGlzcGF0Y2hJbmZvLndlaWdodCxcbiAgICAgICAgICAgIGNhbGw6IHtcbiAgICAgICAgICAgICAgICBlbmNvZGVkOiBtZXRob2QudG9IZXgoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBsb2NhdGlvbiwgZnVuZ2libGVBc3NldCB9IGZyb20gXCIuLi9jb21tb25cIjtcbmltcG9ydCB7IHNvdmVyZWlnbkFjY291bnRGb3JDb21tdW5pdHlJblNpYmxpbmcgfSBmcm9tIFwiLi4vdXRpbHMvY29tbXVuaXR5LWFjY291bnQtaWRzXCI7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9wdXBTaWduZXJBY2NvdW50SW5LcmVpdm8oYXBpLCBzaWduZXJBZGRyZXNzLCBhbW91bnQpIHtcbiAgICAvLyAxYS4gVHJhbnNmZXJzIGFtb3VudCB0byBzaWduZXIgYWRkcmVzcyBpbiBLcmVpdm8uXG4gICAgLy8gVGhpcyBpcyB0byBjb3ZlciBjcmVhdGluZyB0aGUgY29tbXVuaXR5LCBhbmQgZmVlcy5cbiAgICBjb25zdCB0cmFuc2ZlclRvS3JlaXZvID0ge1xuICAgICAgICBUcmFuc2ZlclJlc2VydmVBc3NldDoge1xuICAgICAgICAgICAgYXNzZXRzOiBbZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi9IZXJlYCwgYW1vdW50KV0sXG4gICAgICAgICAgICBkZXN0OiBsb2NhdGlvbiBgLi9QYXJhY2hhaW4oMjI4MSlgLFxuICAgICAgICAgICAgeGNtOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZXM6IGZ1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4uL0hlcmVgLCBhbW91bnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0TGltaXQ6IFwiVW5saW1pdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIERlcG9zaXRBc3NldDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lsZDogXCJBbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZW5lZmljaWFyeTogbG9jYXRpb24gYC4vQWNjb3VudElkMzIoJHtzaWduZXJBZGRyZXNzfSlgLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIGFwaS5jcmVhdGVUeXBlKFwiU3RhZ2luZ1hjbVY0SW5zdHJ1Y3Rpb25cIiwgdHJhbnNmZXJUb0tyZWl2byk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9wdXBDb21tdW5pdHlBY2NvdW50SW5LcmVpdm8oYXBpLCBjb21tdW5pdHlJZCwgYW1vdW50KSB7XG4gICAgLy8gMWIuIFRyYW5zZmVyIGFtb3VudCB0byBDb21tdW5pdHkgaW4gS3JlaXZvLlxuICAgIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBidXlpbmcgbWVtYmVyc2hpcHMuXG4gICAgY29uc3QgdHJhbnNmZXJUb0tyZWl2byA9IGFwaS5jcmVhdGVUeXBlKFwiU3RhZ2luZ1hjbVY0SW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICBUcmFuc2ZlclJlc2VydmVBc3NldDoge1xuICAgICAgICAgICAgYXNzZXRzOiBbZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi9IZXJlYCwgYW1vdW50KV0sXG4gICAgICAgICAgICBkZXN0OiBsb2NhdGlvbiBgLi9QYXJhY2hhaW4oMjI4MSlgLFxuICAgICAgICAgICAgeGNtOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZXM6IGZ1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4uL0hlcmVgLCBhbW91bnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0TGltaXQ6IFwiVW5saW1pdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIERlcG9zaXRBc3NldDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lsZDogXCJBbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZW5lZmljaWFyeTogbG9jYXRpb24gYC4vUGx1cmFsaXR5KEluZGV4KCR7Y29tbXVuaXR5SWR9KSxWb2ljZSlgLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiB0cmFuc2ZlclRvS3JlaXZvO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvcHVwQ29tbXVuaXR5QWNjb3VudEluUGVvcGxlKGFwaSwgY29tbXVuaXR5SWQsIGFtb3VudCkge1xuICAgIC8vIDFjLiBUcmFuc2ZlciBhbW91bnQgdG8gUGVvcGxlIENoYWluLlxuICAgIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCB0aGUgc2V0dGluZyBvZiBpZGVudGl0aWVzXG4gICAgY29uc3QgdGVsZXBvcnRUb1Blb3BsZSA9IGFwaS5jcmVhdGVUeXBlKFwiU3RhZ2luZ1hjbVY0SW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICBJbml0aWF0ZVRlbGVwb3J0OiB7XG4gICAgICAgICAgICBhc3NldHM6IHtcbiAgICAgICAgICAgICAgICBEZWZpbml0ZTogW2Z1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4vSGVyZWAsIGFtb3VudCldLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc3Q6IGxvY2F0aW9uIGAuL1BhcmFjaGFpbigxMDA0KWAsXG4gICAgICAgICAgICB4Y206IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIEJ1eUV4ZWN1dGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlczogZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi4vSGVyZWAsIGFtb3VudCksXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRMaW1pdDogXCJVbmxpbWl0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWxkOiBcIkFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiBsb2NhdGlvbiBgLi9BY2NvdW50SWQzMigke2F3YWl0IHNvdmVyZWlnbkFjY291bnRGb3JDb21tdW5pdHlJblNpYmxpbmcoYXBpLCBjb21tdW5pdHlJZCl9KWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRlbGVwb3J0VG9QZW9wbGU7XG59XG4iLCJpbXBvcnQgeyBlbmNvZGVBZGRyZXNzIH0gZnJvbSBcIkBwb2xrYWRvdC91dGlsLWNyeXB0b1wiO1xuaW1wb3J0IHsgY3JlYXRlQkxBS0UyYiB9IGZyb20gXCJoYXNoLXdhc21cIjtcbmZ1bmN0aW9uIHJlZ2lzdGVyVHlwZXMoYXBpKSB7XG4gICAgYXBpLnJlZ2lzdGVyVHlwZXMoe1xuICAgICAgICBIYXNoZWREZXNjcmlwdG9yOiBcIlZlYzx1OD5cIixcbiAgICAgICAgXCJGYW1pbHlEZXNjcmlwdG9yPENoaWxkPlwiOiBcIihbdTg7IDEwXSwgQ29tcGFjdDx1MzI+LCBWZWM8dTg+KVwiLFxuICAgICAgICBcIkZhbWlseURlc2NyaXB0b3I8U2libGluZz5cIjogXCIoW3U4OyAxMl0sIENvbXBhY3Q8dTMyPiwgVmVjPHU4PilcIixcbiAgICAgICAgQm9keURlc2NyaXB0b3I6IFwiKFt1ODsgNF0sIFhjbVYzSnVuY3Rpb25Cb2R5SWQsIFhjbVYzSnVuY3Rpb25Cb2R5UGFydClcIixcbiAgICAgICAgQ29tbXVuaXR5QWNjb3VudDogXCIoW3U4OyAxMl0sIHUxNiwgW3U4OyAxOF0pXCIsXG4gICAgfSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tbXVuaXR5QWNjb3VudEluS3JlaXZvKGFwaSwgY29tbXVuaXR5SWQsIGZvcm1hdCA9IFwic3M1OFwiKSB7XG4gICAgcmVnaXN0ZXJUeXBlcyhhcGkpO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBhcGkuY3JlYXRlVHlwZShcIkNvbW11bml0eUFjY291bnRcIiwgW1xuICAgICAgICBcIm1vZGxrdi9jbXR5c1wiLFxuICAgICAgICBjb21tdW5pdHlJZCxcbiAgICAgICAgQXJyYXkoMTgpLmZpbGwoMCksXG4gICAgXSk7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSBcInNzNThcIjpcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKGFkZHJlc3MudG9VOGEoKSwgMik7XG4gICAgICAgIGNhc2UgXCJ1OGFcIjpcbiAgICAgICAgICAgIHJldHVybiBhZGRyZXNzLnRvVThhKCk7XG4gICAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNvdmVyZWlnbkFjY291bnRGb3JDb21tdW5pdHlJblJlbGF5KGFwaSwgY29tbXVuaXR5SWQsIGZvcm1hdCA9IFwic3M1OFwiKSB7XG4gICAgcmVnaXN0ZXJUeXBlcyhhcGkpO1xuICAgIC8vICgwLCBYMShQbHVyYWxpdHkgeyBpZCwgcGFydCB9KSlcbiAgICBjb25zdCBpbnRlcmlvciA9IGFwaS5jcmVhdGVUeXBlKFwiQm9keURlc2NyaXB0b3JcIiwgW1xuICAgICAgICBcIkJvZHlcIiwgLy8gQm9keVxuICAgICAgICB7XG4gICAgICAgICAgICBJbmRleDogY29tbXVuaXR5SWQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFZvaWNlOiBudWxsLFxuICAgICAgICB9LFxuICAgIF0pO1xuICAgIC8vICgwLCBYMShQYXJhY2hhaW4oMjI4MSkpKVxuICAgIGNvbnN0IGZhbWlseSA9IGFwaS5jcmVhdGVUeXBlKFwiRmFtaWx5RGVzY3JpcHRvcjxDaGlsZD5cIiwgW1xuICAgICAgICBcIkNoaWxkQ2hhaW5cIixcbiAgICAgICAgMjI4MSxcbiAgICAgICAgYXBpLmNyZWF0ZVR5cGUoXCJWZWM8dTg+XCIsIFsuLi5pbnRlcmlvci50b1U4YSgpXSksXG4gICAgXSk7XG4gICAgbGV0IGhhc2hlciA9IGF3YWl0IGNyZWF0ZUJMQUtFMmIoMjU2KTtcbiAgICBoYXNoZXIudXBkYXRlKGZhbWlseS50b1U4YSgpKTtcbiAgICBjb25zdCBoYXNoID0gaGFzaGVyLmRpZ2VzdChcImJpbmFyeVwiKTtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlIFwic3M1OFwiOlxuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUFkZHJlc3MoaGFzaCwgMik7XG4gICAgICAgIGNhc2UgXCJ1OGFcIjpcbiAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzb3ZlcmVpZ25BY2NvdW50Rm9yQ29tbXVuaXR5SW5TaWJsaW5nKGFwaSwgY29tbXVuaXR5SWQsIGZvcm1hdCA9IFwic3M1OFwiKSB7XG4gICAgcmVnaXN0ZXJUeXBlcyhhcGkpO1xuICAgIC8vICgwLCBYMShQbHVyYWxpdHkgeyBpZCwgcGFydCB9KSlcbiAgICBjb25zdCBpbnRlcmlvciA9IGFwaS5jcmVhdGVUeXBlKFwiQm9keURlc2NyaXB0b3JcIiwgW1xuICAgICAgICBcIkJvZHlcIiwgLy8gQm9keVxuICAgICAgICB7XG4gICAgICAgICAgICBJbmRleDogY29tbXVuaXR5SWQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFZvaWNlOiBudWxsLFxuICAgICAgICB9LFxuICAgIF0pO1xuICAgIC8vICgxLCBYMShQYXJhY2hhaW4oMjI4MSkpKVxuICAgIGNvbnN0IGZhbWlseSA9IGFwaS5jcmVhdGVUeXBlKFwiRmFtaWx5RGVzY3JpcHRvcjxTaWJsaW5nPlwiLCBbXG4gICAgICAgIFwiU2libGluZ0NoYWluXCIsXG4gICAgICAgIDIyODEsXG4gICAgICAgIGFwaS5jcmVhdGVUeXBlKFwiVmVjPHU4PlwiLCBbLi4uaW50ZXJpb3IudG9VOGEoKV0pLFxuICAgIF0pO1xuICAgIGxldCBoYXNoZXIgPSBhd2FpdCBjcmVhdGVCTEFLRTJiKDI1Nik7XG4gICAgaGFzaGVyLnVwZGF0ZShmYW1pbHkudG9VOGEoKSk7XG4gICAgY29uc3QgaGFzaCA9IGhhc2hlci5kaWdlc3QoXCJiaW5hcnlcIik7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSBcInNzNThcIjpcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKGhhc2gsIDIpO1xuICAgICAgICBjYXNlIFwidThhXCI6XG4gICAgICAgICAgICByZXR1cm4gaGFzaDtcbiAgICB9XG59XG4iLCIvKiAoaWdub3JlZCkgKi8iLCIvLyBDb3B5cmlnaHQgMjAxOS0yMDIzIEBwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtIGF1dGhvcnMgJiBjb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8vIEdlbmVyYXRlZCBhcyBwYXJ0IG9mIHRoZSBidWlsZCwgZG8gbm90IGVkaXRcblxuZXhwb3J0cy5sZW5JbiA9IDE3MTAwODtcblxuZXhwb3J0cy5sZW5PdXQgPSAzMzk0Njg7XG5cbmV4cG9ydHMuYnl0ZXMgPSAnZU5xa3ZRbVlYVmQxNTN2dXVWUFZ2VFhjbXFUU2ZPcEt0bVZic2thWEpNdll1Z1UyVHVqM21pOHZMMSsrOS9YM1pObVN3U1hqb1N4c2VKOWlGMWd5NG9VRWhaaEVCUElpR2hMVUVBVXhCVGtoSUlpVFZoTjNFTU1EQWFZUmdRUjNRa0RCZE1lQWcvdjNYMnVmYzRjYU5DRFpPdnVzcy9mYWE2Mjk5dHBycnozY2FOZURyOGxGVVpUN3g5eUsyK05ISDQxdXp6K3FmM1A4ejJ2dVVYdm5rZE0vQmRKOEtPckJzMlJQRWhIZndndXBzcWV5akdsQngvTEk3WkZWOG9oWDhBai9rdXdPWlZTcWtxVlZwS3Y1SVVVc3FoNEp4RDFpaEQ1aUdSL3hQOElRa25vcDJvc3pSblc1UjZMNFEzRlgvdUU3WHJWdzU4Nkg3N2o3M3QydjJuUHZ6cnNmM1BuYWUzZnZ1ZXZ1ZS9mc2pvcjZ1cmpsNjMxM1RPNjVjOS9PM1ZQMzNiOXphczlkVWF3TVM1VGhWVHNmM0hQUFhUczMzTEZsMTZadGV6YnQycmJ4em0yYnQ5MFpkU3ZITXM5eDU5VHI3OTkzMzg1dDQxdnYyckJseThhTlc3ZnMyYmo3cnZWZXpaV2U1MVY3OXYzU3JudDMzL2VhWDlsMXoydjNQTGh6MTZiZG16YmZzZm11UFhzMjNibHg2L2cyejd6Y00wL3RlZUMxZDAvdDJUbStmdlBXVFZzMmI5eDYvYWFOdTdaczJoVGw1OEY0MS9WN05temVCWjEzYnQyemJkdjF1Nk9jTWw4Uk1Gck9XKysrNTU3LzQvWDMzcmx6OS9WMzdONjRlL3o2NisvYWZkZkc2OGQza2ZlaitRL25jNE5EMFhDVXk1VXF1YWhjaVhPNWZCVGw0MEpjTGhXcnBSendxTnBWS3BlNnlpUEZYQ0VxNS9MbFhGY1VsYU9vaW9ibDRxNG9GK1VLUFpUSjV5dFY4aXRWNk1uRjVWeFVpSExGYUVHdUREUmZXRGhhMFpPM1BOQlNGRk11S3VlakdEU0NVVEpYakVHWjZ5NUVYYmw4VVhBSWlDS2wrTWovK1ZJcGpoWkZmQzRCam5NbC9oYXBMODRWUWFBQzBlTFkva1RGL29pUFViUkVLS0VsenZHM0o1K3Y1Y1ZmdmlzcXFMNm9VQ3FDTnRjUFFibW9WNTBHekhFWm9uaVBDdmx1YUl5RUoxb3Fwa3ZGY2ttY2xpRThONUNqYksxWTZoMlF4R0NCejZxSEY3Z3FVU0hGb21WeG5DL0V1ZTdlN2pnR3hpZjRNUnB6UmFUUW5TZFY0di84Y3NSTCtYeVVMNUFCMVBwai9aZ0tLVlBzNit2TEZ4RllvWmk3UC9lS1Y4QnlORlRxcHZzMXBxZFBSZFh5Vzh2WGxGNno1elgzVGIwK2pnYjN2Rzdmemp2dXZuL1ROblRtM2oxVHUvYnRpVjQ2M0FTaXVudnUzWWZxdno3NjNkeG9HL3cxZDk5N054M2d6cWs5KzZMYkI5bytQYmlIampUY2d2dWhYZmZjdlZ1NGY2a200SjdkTysrYXV1ODFudSt4WERYQUhyejdWZmRHSzN2RDIwTjdwdTYrNi9YUmdIMjk0NTVkZS9kc3ZDTzZ0bDl2cjM3TnJqdDNQdmpxWGFobnRMWU5jdjJHamRIQm5LSFl1K2ZPTzNmdFZaYUhXOTZWNFIyNWlnRDMzN0VYRFk5KzM5OGV0SjRhYmZBWHgvMWI0WlBqL2FOY2w5NzJQWHpmNjZMVkkvWmh6NTMzNzd6L3RYZnN2UE8rMTl3L3RlZkJCNlAzNUliYVB1eDUzZjMwcnVoSXpvUmg0Q2JuLzdjSnc0QlRlKzY4RDRhajdVYXFnVXdhNnhmYis5VE8zVWpqb1QwdzhmcjdkOTA5dGZQVnU2WjJSK056Zkh6d3ZydjJSY21pOW85UWM4L2R5RWpmYnZLS3AxcG8rUlVUTXlDcjlob25ZeXB0aEpHZThMN3JWVk43OWtUYjdQV2hxYnM4ZDZVdmZRM1plMVpPdmZiQmZlSUNLZTdkc1BPaDlUczM3OXlBbE83ZHA1eW9qSFRoVUx4cTNteTc5enlJNXIwKyt2MTQvYXo1c05pN1hudlB2cDBZcmoydjJuWFB6anQzM1hQUEhidnUzTHZ6cm51akQrYXZtN2ZNbnFtcCs2WTZTcXhvTWZxN2R1ODJSZDZuci9mZmR6Y1VUVVYva085dnlYS1hKSEV3UDlBQ2VnMzQ3cnN6T2gwUHRnQmgxcURmaTRkYm9IdGVkeS9ZNzV2YUUvMXV2dnV0R0tWR3J2cUxKL09IOHgvSS80L2M3K1dQNUw4ZUg4ay9tZi90L1AvelF1N0ovTmZpMzR5ZnpOLzd5aWZ5Si9JZndoamZ1dlBKL0VOUDhuM3piK1orelBkMzV2ODQvMjg4dC81ZkovSWZJY2Z2a08vSi9ISCtmekwvWjVSYyttVCt6M2s4bnZ1RDNBbXNlWnJoRy9HYktQUlU3dU5BbnN4L08vZXgvSi9tcHo2WS8yQys4dlVqbFEvbm43c3BkOXVqU1pSRXErUGI2NVVrbmh5UGIwK2lSakk1ZGt0U2Fkejh3RmdsdnlPSkc2ZWlwTEszZnZNdjNGTFlrVlNTV3lhVFhISno3YzdGWHZCWDY1WEc2RDZ5ZCszRC9MeFFmbUJLNlljYTB6L0xQMEJxOUtHcHFYcGVHZi9EUldRc05CWTluQlFhZlE4L3lMLzVoeDZjVk1HWFhVUkJpRmtkSnhlUmNWUVpWMTFFeGo2UjBtZWs5QmtwazBtKzBmOHcvL1FDeWpjcWdPcEZZYnZ4SXJDTktPT09pOGk0UU5VdXNHb1hoR29wdWZraVNtNVN4cTBYa1hHenF0aHNWV3gySWVldGtsZGVSTmwxeXJqbUlqTDJLT1A2aThoWUVUVVZvNmJTWlBpMmVra2xTeTBsU1llU2ZGTEo5Y3E0K2lJeTlxcUtYcXVpVjFVa2ZWUlNVR01XckRFTDNwZ2xRVW9HS1Rta0xFalpJR1dIZEFuU1paQXVoM1FidmI5Y3I0cU1hZ3NacEFNWmZCSVoxNHVNNjQyTTY0Mk1kWk5KbDVYK2R4ZFJlb05LYjdEU0c2ejArc21rUEprc0ZuaXhnUmNiZU1Ga1VwcE1SZ1FlTWZDSWdUZkQ4V1N5U2VCTkJ0NWs0TXBrY3YxazBpTndqNEY3RE53N21XeVlUSXBpdG1qTUZwM1pxaUJWZzFRZDBpOUl2MEg2SFRJZ3lJQkJCaHd5Sk1pUVFZWWNNaXpJc0VHR0hiSlFrSVVHV2VpUVJTSnFrUkcxeUlqS0M1QTNRTjRBVUQ0d21hd1RlSjJCMXhrWXl2c25rL1VDcnpmd2VnTXZua3lxazBtMzZ1bTJlcnE5bmlXQ0xESElFb2NzRldTcFFaWTZaSm1FQWI2aTRTc2FQc1E1Tkprc1U5NWxsbmVaNTEwT1lySjJXOVp1eXpxQXZuVUoyR1hBTGdOQ0kyakxBcGNOWERZd05DNmxDUVV1R2JoazRPSmtzbVFTUVZEYklxdHRrZGUyUXBBVkJsbmhrRVNReENDSlE4WUVHVFBJbUVQcWswaVpHaFphRFF1dEJtb2RtNlE1QUE4YmVOakExSnJBcWNCREJoNHlNR3EvQXZFTFBHRGdBUU9qejRzUXY4RDlCdTQzTUlxNkVQRUxYRFZ3MWNBbzZ2QmtzbHprTFRmeWxqdDVLd1ZaYVpDVkRsa2x5Q3FEckhMSUZZSmNZWkFySEhLbElGY2E1RXFIWENYSVZRYTV5aUdyQlZsdGtOVU91VnBFWFcxRVhXMUVMUk5nbVFHV0dRREtyNkJSQkY1cTRLVUdodkpWTklyQVN3eTh4TURveE1ySnBLNTY2bFpQM2V1NVJwQnJESEtOUTY0VjVGcURYT3VRTlJJRytKWWJ2dVdHRDNGZU9abXNVZDQxbG5lTjUxMExZckxXTFd2ZHNsNkJtbzBKT0diQU1RTkNJMmdUZ1JNREp3YUd4bXRwUW9GWEdIaUZnWmRQSnRkTUlnaHF1OXBxdTlwcnUwNlE2d3h5blVQR0JSazN5TGhEdGdpeXhTQmJITEoxRWlsVHcycXJZYlhWUUsxYkpta093RmNaK0NvRFUrczRuQXA4cFlHdk5EQ0tlaDNpRi9nS0ExOWhZQlQxYXNRdjhDb0Ryekl3aXJvYThRdTgwc0FyRFl5aVhqV1pyQlY1YTQyOHRVN2VSa0UyR21TalE3WUpzczBnMnh4eWd5QTNHT1FHaDJ3WFpMdEJ0anZrUmtGdU5NaU5EdGtoeUE2RDdIQklJN2t4dVNIWm1LeEpya25Ha2hYSndtUW82VStLeWJwa0FUNlZlU1ZMNnkvWG8xWWZiU3grT0JsdGpGQjZ0RkYrMkwyZzBmcUVIc1AxbHdCOUlKbGdvR3djK2VheEp3cVQ5VUY5NktuZk5sbkhuUGNrbzVOSmIvS1N5YVF2bVpnMDNDOTU4QUgrSnkyOEZjTmJNYnlOMzNyek45NWNucXkvVkFpNjZyZE9NbXhUZ095alpPOVI5aDdMM3VQWlAzVG9oYzhYOXRaZnB1eUYrazJUOVY2eTk1QzlRdlplWmUrMTdMMmUvZXVuajMwNHQ3ZitDOG9lUVZ1OUJuVzlaTzhoZTAzWmE1YTlGcklmK1Bwbjg1UDFYMHh1QmV0TlUyQk5iaktQWWJtb0hqS3FLNUxHNEdTOUQ2N0JrWXlJVjhhMm5tUVRjTkkxMFBjcWo5QVBHdnBCUi84djczbnFjOFZKM0tSSzBqY0ZaajFCM3lmMGZZYSt6OUcvRkRGTTRySFZra0dRMVlDTUNObUlJUnR4Wk0vODVBM2ZMKzJ0YjZaaWtGVmd5WkQxQ0ZtUElldHhaQzlEU0dKOE1Ca0IyZUNzakgvZ003LzV2dUplV2dIcFFKQ1E5WUtzVjhoNkRWbXZJL3NGWjF4OGcyeGtWamFmZmYrM1BoV3JqWHBGV1EvU21JUE5YelEyY1JjR05XTFc1RStNYUpCYzBNTDRBcUZmWU9nWE9QbzMvT2x2UEpHYnhOODJ4bnZuWm54VHh2aUNPUm4vNUsvLzlidmpTWnpLQ3pHK09XTmN5QmJNeXZoZi92UkR4MmpmOVJkay9HTGE5MGQvOXVPMzB6RTJYSkJOYjEra1dKQXU1dEZOOE9LWUxHaHA4WmxTZk9PN0R2NjR2QmVHTHNUNDRzazZYYUtQbGhIamF2RStJZXN6WkgyTzdLcy9mT3U3MGNVUmFnY1pqUE1FV1Y3SThvYU0yWXFRclp1c1l5M2dKSlBpekM3K2x0OC8vRngrYjMwQlNBckdPRStRRllTc1lNandsb1ZzUGJNZkdRRFFnYXh2VmdQd3FUOSsyOWN4QUlzUlRoR0NIdEFUWkVVaEt4b3kvRW9oMjJCczFuQ0g1SHBXa3g0OElMeDBSRG1md2ZqSitjZmZDUG8rYUFSOVFiUUsvVXpHTVJnd1htb3hEeVVoS3hteWtpUDc2ejkvL0dlUnBHT01GK2RtZk1RWUwwT2drRWw5eWtKV05tUmxSL2IwWDM3NEtJcmRlMEhHRnhqalZaQ1ZRVllDVWhXeXFpR3JPcklmbkgzdkQwQld1eUNiS0F0czRsZDJ5NHNzeXprdXlTUHJKMTBGZlprOC9VTGZiK2o3SGYzNzMveUZMMUpzNElLTTB3Tmh2RVR6OUlPc09xc1VuL25pWi82ZVROVUxNazRQaEhGSlVjajZaNVhpMTM3ckh6NU9KK3kvSU9QMFFEam9hcEZpbDVCMUdiSXVSL1luMzNqOGsvU1NvUXV5V1RNMjhXKzc1QktYNWVlVjVBVjNrKzRLVXV3VyttNUQzKzNvZi91NWs1L0VoZzlma1BFQlk1eDJTYnBCMWpXckZFK2VlTzVGeGxrMXlmeU1WNDF4U1ZISXVtZVY0cFBUdjNjUVpOVUxNdDV2ak04dnhkOTQ5c1hUbUlmK0M3STVaR3lhRlBFcHkzSmpTNXJ2ekMvRko3L3hyUzh3ZUttUjVtZDhPUFRvK2FUNCtiLytUK05NTlMvSU55MFNPdlRjUXZ6dUY5Nzdib2E5Z1F2eVRZdkE5L3hDUFBqMlovNkNEcTBXbVo5TFdnUXVUWWk0OFdYNXR5VjU3dk1MOGVSbnZuY2U5T28yOHpOT0cxbUhuaytJTDN6OVEvOGRHb1l1eURndEVqcjAzRkw4N2Q4Nzl3NXFWSlBNenpoTmNzRU8vYVYvK0UvSFNoZGp0MmlTdEVNemt5cHJUbEhTakc1K0tmNzUyNDk5Qk9OellVdEdJMTJ3UTMvaG4zLzBMNHozRjdaa05Na0ZPL1JQLytqajM3c29TMGFUWExCRGYvTlBwdi94RXV5V1NaRTVWbG56dUpLbVZmTkw4V01mK1oxUGdmNWlMZG44VWp6ODN6Ly96eGlmaTdWazgwdnhHOC84N1ZPWFlNbm1sK0ozUC9qUjV5N0JicGtVbWRlV2s3V1NJbFBaK2FYNHpIUHYvQnZRWDZ3cG0xK0tQMzNpUDM4elVwTmNuQ21iWDRyblQ3My9NZXppeFpxeSthWDRPMi84N2Y4S3NvczFYQ1pGWWdubFpKdWtTUGhnZmlrZU92dU5md0g5eFpxeSthWDQ5UGZmL1djWTJZczFaZk5MOFdNLy9zd2ZVdVBGbXJMNXBmaVJkNXcvYlQ3bHhSa3VwSGlOQWliWFdNRGtHZ3VZWUNZM1RpWmJGY1RZYWtHTXJTSFlLMit5bkd5WHVJbnR6Qy91ejM3cDcvNG5uQys4U0pzM3Y3Zy85OFJ6ejhENXhkcTgrY1g5M0RlZi9EUWp4OFhhdlBuRi9mMkRuM3d2NDhTaWk3UndpSHVOeEwzR3hMM0d4STA5dllGd25NRFhHdmhhQTJOY1VleVpBZmFaUWZnQmI1Y2RhaGZGdU9kdGx4Lzg5ZHYvQ29KTEZ4VGx3aURLWnJ2TUZPWDMzdnJmdnNyQXR2Q2lyV2c1YTVlWm9ueitwOTkrQjhndTJvck95K2JqMHdkK3dpaDVZWnU1eU5pc0ppOW45WE1wYTVxM1haQVhkS2VUcG5hU1RYYWROYlVUNGthc0EzVjd6Y1puQ2FwWVMwc21LTFpXR3JMV05HU3RhUWdEQjMxeDVvTExnQUx1MVphR216bXBmUHNmZmZJYkRNd3k4TlJBL0pHb1d6RXBHUTg4YlJrTjRrcEdITXRoNHB2TWVUSjNrZmtsa0xpV1VEQUVYV2NFWGVjcmlVdytHeUtuWWVRMGpCeFhUdWFrYzNiSU41OTh4eUdtS0JvZ3dEOE0vcHRnRjJKTVdpSm1wZzZRdVVEbUFwbXZJM3dMSVJ1TmtJMU95STJ6eUVXTEZ0SkFFYUxwNjB3Ti9NM2YvTE9uY1FyS2lHQjBFdXcxc0ZlODRVcFp3ODFVSVlrd1N1TGs1cjFqc1JiSEo4ZHlqV2lzMHBPclZwTzR1V2dlczJoZXJmN2VkZkUxajVSWWRtOGNaalJhazBSWDU3ZGlQbmlzcHg5RmpaTkExMTZkaitwWDhIS0VsK3YwY3ZYKy9mV2wrNU9sRXovK3pQUHYvSzMzZk9UODE2T0RFOG1iNjBzbjN2cTJYMy9UMTg2KzhlelhvbDhqMG5MRndZblZiNjZQN0s4dlM1WWVuRmovWnZyNTR2MnNlbzhjbk1pOXVWNVhOYXZycVBuVitVU0w1bzBUVkxCT0ZWeVpyTkZqRmZXTTdJZFlDdnpUVHg3LzJxYys5ajgvdmNKcVdqN3hnZk5mL05FSHYvK0pqOSs0djU0a1YxcEZTL1pyY2YvcS9PMzFIQVhIbEh5MXl0Y0pjcE1lOVJwcjlaVlVkVXpzcW82cmVEbkV5M3E5WEVPNUZmdVRGUk4vY1BiSFgvM01iMzN0amU5ODFLcGJNZkZYSC9yL3YvcStEejd4OUZNd1ZrNnVzdm9LKzltbkFEMHcxbVhadW9XL3kydU82aXZBZkJUTUcvU3lXckRwWFAxYWFsaXdYeStuY3NtQ2d4T2ZQL2g3UC9qSjU1NTQwK2RkZ2dzbURyM3R1ZDkvOGVrZkgvakhhRDhyK3F1dG9uZy8wUnN5VTFFMUtRTGZYKyt6RHozN2ljU0E2emJoekNmTExVcytTZmJUNjVhWWtKZlEzbVI0WlgwNUZWdnlWK3ZKL21RSmtmaEtVclU2Ui9mWHlRdTJ5bjdRanhxT3dRUmg5aWNWeHhGS3ZvNnNsR1J2UmxLMEQ4VmttZUQzazBOdHpOZDhzc3h3THBNNXBEbjJTMzBOT1c5a04rU3haVEZWTmpTRUNJVm1SMzBaYUFxSnNWSklTcGFybEF5QUpoVjNyNkNtUjJEbXZ3SDdNTFFmeXdwVDNVbk52blluZlFnbzZUSGtQWFNmRWZBV2s0WDdaVXdDMW41QnlKRUtNY1VyNmFZbEpZRkYrNG42bVJNWVNLMml3cUp5bVZQWmJmanlpS1FNcjN3d2xOMzc2M0VDMVdvTnkxQ1ZQQXdEUVVWa3U1L1JaL2wrQVpOQnkxQVd6ZVNnY0srSUwxdGhFeUwvT2FHRElvaCtWMG1HN1d0RnNobEloZ3p2RUNTc0FHK2NyTnd2YWdKVzQ0Y2Nya1ZER1Y2RDB4Q1VCRDdzaFlZaHA5ZGdYVVE3bHhxMnVqNmdCMm1MbWR3TFlzWWIxVDZLR012U1N4WkVZcExxUzhiQTBKM2tKQ2xjb003MlJFaDlIZTFKKy9HQkhNTVNQTEc5b1BNMFJZOEVCZDVCeUJrMXl1alpjZGFleGc4NW5NL0I5dmJNK095SEpBcXBQVk1xYzhtUVVVbTNCeGk2aEZxVzNxQU9QbGQ3bWdqQVVJRFB4Tm9UalNoNE01dmtvZG1WQVNFMTJ4T1UvT2Z0aVE0T2lZdmUwSjVFaEtXS0tEVjRCNkN6Ym55aXR4M3Q2V29QUDR5dGM3UW5RbGQ3TnFsazZjT29YQ3dxclpuQlY0Qm4rRVR5enFlMUoxU0RrbjludEtkc1NEZmEyOWFlMEh5QjlrUnZoMVZ2VllyWWJFOGFGN3o5MENuNXhjTGIwWjdrY0Q3NzUyalBJVFZiek9wbGs4b0JrMXEzR3ZxeTIzT1JTUW83ZEdudGlkNE9xU04xdEdkVGI3MUgwZTg3MnJORmIrZHFUOFRYM3A3OTFndUMxbDFtZTY0MFNhRmZsOWFlNk8yd1NuVzBaMU52cFNmcXBaM3QyYUszYzdVbjdMUzM1NkJKclZ2MjRMTGIwelVmVmJtMDlrUnZUY0U2MnJOVGI2MnJ0YlZuaTk3TzFaNE1WKzN0NlhyYkpYdHcyZTJwY1NWby9xVzBwOWxiV3F1alBadDZxM0U1akFTWFptK0h2Rk8zdG1jL21pTXE2UVdYM1o3UzJ5N0ovVExzTFFUTmFXL1Y3OVZMTDhQZTJtRFVibTgxK2dVcmNwbnRLVStqVzZndnc5NVM3NXoyVm5pREhicFVlMnQrUXJ1OTlWSGVuTC9MYXM4Y3JvOGtoZHd2dzk2aUJYUGFXMmxhME50THRiZm1KN1RiVy9XQ0xuWGN5MjVQK1dmQmtsMnl2Y1V3em1sdjNVK2d4Uy9kM3BwejBXNXYxUXZDS0grWi9WUCtkcERVSmR0YlNzMXBiOTN2czZId1V1MnRLVUc3dlhVclFpKzQ3UGIwa2NrOHgwdTJ0eWpZblBiVy9YZ2JDaS9WM3BwdzJ1MnRqd28ycTdyTTlsUS82bElQdnd4N2k3YlBhVytsSjdLNmwyRnZUVy9iN2EyOGptQkZMcXM5M1E1MXk4UmRocjFGd2VhMHQ3S1FZVnk1Vkh0cnprVzd2WlVkNmxaRFgzWjd1cVRnOHpMc0xmWE9hVy9sWndVLy9sTHRyUW1uM2Q2NkZUR3Y3VEw3cCt4RnR5ektaZGhiQkQrbnZmVnh4ZlQyVXUydCtRbnQ5dGE5Y1BUbnN0dFQ5cUpMRnVVeTdDMTJZVTU3NjM2OHVhcVhhbS9OK2VlUjBUbUs1c29TRmZZYjBOdHpOR3RQSjVVMGRzWlE4aThaMEtsTVZndmdWTHFmMzI5QWx6d2JCUGZYU1ZJWUxKZzVLN3dnS1FFbFhtUWZpS3pVeE1YQ3JFVVhTanBKMEZ6RnBxVnJOQTA3Mnd6cmlQaFpvTVpJSTFkRUlDbkhkOEdkSStCVkQxTVlNVUFXb2JYeXJSYkxkaStpdnNXR2JSSDhFbVJieUFkRFNIcFpzc2dROHErcHozS0NPZ3NOeDBLVVFISmlYRnBJYXhMU0k4TkNoZlJJVXBqRUVtVTFMcFlySDlyaTBSaUZuNUpWQnpGa2l4Um56VW1TUnRVU3MwRDAzRVhhVlJsb2lrTzBiSEZDd0lrWTdWaEsyNUtVTmtvQjNaTG5hSlhINDlLZXNncU0xeDdreTNTT2VQZEtqZmhXMHdqeFFPa2lmWFlFNmoxVXUxQXk0enZJVi9JcG81MHFSNUtyQ2M0dVQ1TFF2a1ViVVRFRnVXU3hJc2FVenZHdVJxRTBMTlZWYVpTc0owUGQwT1FvUVlZVnlUWCtaUzBzWG5FUXVhMFNTZ090MGRhQWd5Z2REQWJRT3NwZmVSQWFWMmFnRGRDNytxQlg2NkRxRDlmRnhVZEhIMWtaTmM0djIxdnZYaFd4bW5PTVRjMktuYjh2cHBtNlY4ZC9YS25ueHVPUFZ2enRXS1VlajhjbmVHc2NKU085T012NDNrbzlQeDUvSW1ROFdxa1h4dU9UeW5pRWpJUWxzNHp2cXRTTDQvRlRJZU9SU3IwMEhwOVN4c05rcEhkbkdaK28xTXZqOGRNaDQrRkt2V3M4UHEyTVo4aklyTFQyK3FSN2JYU21VdGdSVlZVUFMzNjlqYWh4THFxOU03Y1l3UE1BUXZaR2JxcWU0MlNkenRHUmswMW4xYVJTKzNzcWFweGwzNTUvR3N1eDVmbmZQdkdYVWFPdjloZEtQMzNzczFGRG1wR3Z2VXRabjJVUmlTM2JqVE81Z0llZGpqRmJPVS83dTZqNThNZ04wZDhOS2IwdWQySmtlKzRjVWN2R3IvOEZPQ3UwVXRIeG5HUlRveFpneTdYdkUxd2tRNHJ3a0RhZzB0MHF0YnVCNTZqM0ZxQ24yV0plcWIyZ2tvZTBTc2lhekNrckFNcFF0Tko0RTJlUkc5MjF0MkZ1R29lVkxxb3hSeWRyYjVIUlJSZ0RySm9jVWlYSmVQd1dQVTh2WVUySDNPKzBrdFQxU1N3d0RmcUw0cFJ2dk5WdTQvdDcvWHNzVERMYlJTUHEwTkptanVQS1VmWWNsY2JiOWNabzFEZzVZTFZYR2g4VmhPV3h4ck9zL2xrdVNLTjhtVytmTUZwci84WGtDMHdyUnJuYTd6b3BCM0pBejNOdXBmdnEvS0hGOWI2SmFPS2YvK3VibnZ6eTczNmhQQkhWVHFqTU5HdHZnbi90OUI5OCsydGYvbjR1aFo4Q1RxbkRpK3Y5czVRNkhFcTk4N05mK2VyUFhud3hnNThCcnZ5ZDJBNnpxQWEySTR2cnRWbXdIUTNZWHZRL0dmeGN3TlpaeTFHd0NVOW5MZWU4bHFPTDZ3T3oxSEtpclpaOENqNGZLdW1zL0VTb3BMUHk4OENGdnJQeUV5elhVZm14T2NTc2phMHpLejhWS3Vtc2ZCcGtxcVN6OGxQQVoydXRNMjE0TXZTSEE1cE85R2NDbWhtQ2JjdWZvVGtYc25laU9kOEdiMlozaFR0ZlFuWGUrY0xuMy9haGovN24rSkdzOEdNdW4vZDk1YnQvK08walRRWW9JL2diL3VaamYvdXZmL1dUVXNhdzR6cFZ4bVBnT2MwSVZsUGlER1AzQUlNcHlYTWxyZS8wVDJ3K3hQdlFMeDlYUnloTnNxU21YbXNKcmFoTjlEeCtBRzltVm9KTXd6c0lPaHdJK3ZGZmZESEttaGlZOG5ZU09lMUVuaWt6TXFyUFFPU2dKWEFBUml3QnRhTktuQ0N4eUJncU1jQkI5bUtSalJ2d0t5TDd0SlBOZ2cydlRJTU1lTmFCdFdUWVdEdGREcXdkc3NSKy9pUUxRS0lFeTZ2RzVjQ3NYRnJQNitEeWFPQ29sY3Z6SE41VDNrNHV6d0dYdU12NEp1cGxjSW1oSmdHWDFqam5TQ3d3Q0Z6aXBhQUNPRW1ZU3RxdHhFRkRaZ2NyeE83eVpJVnhkaWhsZHhHY2pTYUxESGpTZ1NQSnFMMGU4VmRPSi9oclYzaGRZc0k0bXdyalNDWU1FOGpTVkNDSkMyUndWb0dZa2VnUXlJbkFmS3RBemdCVDNrNkJISFdCbkMrelhxeTJSU0RXMmllUWc3WDJlUkxXMmlkd3o1ZWdUbXNlbHk4aUFJTGg1Q1U2UTJLRkNhL0lxakQrZGwwU0drdnF4dTZ6eGNEdVl0aE50ZVI1Qnk1SUZ0b3J1MHIxU2p6UGk3aUVocEpoLzVxK0x2T09rUXJzV0p2QUVGbVNpbXhzUHBFTnpTS3lVMEU4clNJN0RFeDVaL1NVQUcvSmE3MmhpNVYzcVVtcVN0TUl6RlRwRkltRnFLZ2taNXAwQ29HWi9oMG1rWmkyRlhFM2tkd1ZrdHlxNUFybk81WGNDdmhPRmU2c0E1Y215MTNWL0hWSnNwUlhmR0FIZGhzd1ZjZm5YWDZwT3A1TVgxZWFPSjlQeFhteVhmLzZKb1pObUNUSFVya3VjYm4yTmFXNWhUSForVC9jN1dweEJ2N05jcHlCYlk3OEdOdW1TdE53dTBnTGlkUzdMRW04TXpqOXpDWGNldmlycTBtcUhhZWRuVlE3RHFXdmRUY216ZzV3U3dTUys1dlVMekhxelhyQzFPWkRuUXdjRGd5YzYvWU9meFM2KzlFRzBUMnNkYktXbm4zSTZYTlJwaDM2ckJQRUdvNFJkTVJmZ1djRUlRVW5KNWc1TkhNT1lvNkltQ0hxOW01NEhscHEwQ0M3MlcvZGdaVUY3d1ZwTGNjc0Flb0JxeU1aOUJyNjU2cmhxR3JvUzJwZzRWQ2JxNERqR25JRUdvWDI3OCtLYjhFZGtKaVh5VmZMTjg0YytIUlUrekJ1S1U2NnUyYTVlVjJ6ZUE3WERQZzhybGtvTmNNMUF6NnJhOFoxQ3ZPNFpnSGJETmNzWUp2aFFZQnRWdGZNYTVuTE5XdXJwZW1haFVwbXVHYWhraG11R2ZCWlhUTU92OC9qbWxGcU50Y3NWRExETlFQWnJLNFo4Rmxkc3pZOFRkY3NvSm5obWdVME13VGJsci9wYTRYc00xeXpObmd6dXl2YytkeWx1R2FVbWRVMWMxeW40bUN5aWVxNGE4YU1QSFhOY2pOZHMxenFtbG5pc2x5elFGQ2Jhd1pzVnRmTWlUd1RCOWZNUW94S0VLUncxd3hxM1RVajRhNVpiamJYek1udWNNMGNtTGxtY1dwTkxmSHp1bWFCb3piWExKckROUU11Y2NmQk5iTkFvaEp3NmE0WkNYZk40TklzOWYycFo1YWJ6VE5MdVczenpCeVllV2IrbW5sbStYYlBMSlhGa1V3V1A2ZG54b0hmR1k0WmJNL21tSEh3U0VvZUI3OE1hYmhmaGhEY0x5UGhmaG1SemphL2JIMXd5MTRadkxMYlozUEtvdG1jTWdkbVRwa0xKM1BLWERpWlU1YStCcWNzbGRXeE5sbjlYRTdaanIwemZETE9xODdpa3MzcWp1V0RPNWFxenpSeWNuZU1SSnM3dGlONFk4Ull6UmxMWnZIRlZzL21pcm04VWxkczYyeWVXS0hkRTNPaFpaNVkraG84c1ZTR0o5djE3Wkk5c1VMd3hHRGRQVEU0YnZQRTJIWFo2WWlOdHZ0aHpscUhIK2JNWkg1WStocjhNR2NHdUNWK0RqK3NFUHd3cUo3TEQydjFhRE0zek9uSjNEQi9CWjdSYy9sdUdLVE00WWFsdFJ5enhNL25oam11ZWQyd1E3aGhPRjh0YnBoQ1pTUm9BTTdPNW11N0NabDkxV3l2am40MlRpMFZUc1Yra1loQlRyWkFEaHZrUkF2a2hFSE90RUJPR3VSc0MrU1VRYzQxSWVhWUxFVUI2VVpLbnlaOWJCbTBwZUhXU3Uwckl1bDV6cGNUdHd4aFZqYmdUK2YxdFVnSTBGT2xyRVNQU2xScmp5dE1lTlF1RVRxL3FFbkJNWU04M3dJNVlaRHB4VTJhWWtzZFVWVDRNSWZiWVdxa21mMlFRVTYzUUtZTmNxb0pFU01uUjdia254ZUdvL2IxWEV2K1l3WjV0Z1Z5d2lEbjJ6R2NCY09SSG9rUkFpdFo5UGtRNGVoenhKVnJuNmZsVnNkdnFTQVFub2Nxbk9NbmRuMG5tOW9ocnpKWmU2c0VjQ3BObkV3VEo5TEV1V2c4bmdaL1FvRCtCU2hOQ00wYnhkUEV4eXUxMzRsWjFaRHhxemlONTVkTnJvcXFIMXNaWC9Qb01zWDhwOWw2SHhQenR4dm9ybTc4NkxOditHcHByTlQ0OE5jTy9VMTVyTHZ4L2ROdmVFZCtiRkhqNzg5Lyt0ZExZNE9OeXRob1NGZkN0OFVoNzVKUWRpaDhyNGJ2UzhQM1plSDdjUGplRTc0dkQ5OVhoTy9jMmlZRHZIMnNBVTFtZE9zM2prMGsyeWNZODI4ZGV5a0pSc0tYajcyTUJOYnRObTdOdTdHK3BuN2QyRWJmOUw1bDdDV1VNMXRXM3pwMlU3S2x2bm5zK21Sci9lYXhIYjVkZmNQWU5qS1krYWlQajkyUWJLaXZIVnVYak5mWGoyM2k0cjFSVGc1c1lwMWwwL3U0NXVrNDltWFRSSEtJOU1qeGllVHhBOG5HZzNVRE5Hb1BNeXp2OEc5bGZhT0VnS3VTSFVDdU9INGd6ZGp6TU9GMUl2Mkd3QkFMdElJcm80NGZTRllkVDFZYTRqUjNsOUJ5VUNoRENZQUJ5REFtMEZOb3kxMEdFZWVUNndVUnFnczkxbEYzajRhbmRVN1pjcWY2bG9OMUE0akFrZVI2LzVaWUZlc00ySnRjRDZSTFZIdEdTR1NiZlVCZ2lBWFMxU1hRMFV0MWdRN1BEWkVqb2lORENhQ1hFeWpDbUVCUFBzMXRKT3NXQXFkcjVEZ1M4RTlHbEFzd1E5UUZWUUtCcU0vWjcybkxMWXAwUHNaRlcxQnVTVnNOZHlEcDZzUnRra3dtTFM4NWVVMjRYZUg0Z2ZyMVNEWER2RkVrV3A2eUM5RW8xcFVSWmNtVkZ1RWR3WGhEMEhwSW8xVVUwZ3NXb0F6REZVRzZORjhRaExkSG01QWgxNFZNZlFhaTlYdklmVVZUTlRJaHIrVFNoUllSWDRHSW9YOUhBbW1aaUFQTnh3K01iVW8ycGk4cTRHd2RRTmZYTStTdnA3MlhIV2ZvWHUvYU1PejhYSGV3YmdDUlhVNXU5bS9HS3lWY1UyNU9OY1V6R2hPY21USUVobGdneHFpZ0thYkpXVzZvWm0yK0JXV3Jwa0JQeW9iblJ0VEw3TFlPRWJxV0ZiRzExRjA5anIrMTFpbGI2bFMvN0dEZEFDSndPTm5zM3haWUZXc04ySmRzQnRJdnFqMGpKTElJR3hBWVlvRllLUnlEamo2cUMzUjRib2pFNVdsQkNhQlBSem5CbUVCUE1jMXRKT3U4cU5NMTNOUU9JOG9GbUNIcWh5cUJRRlJ6OXF0dHVVVVJkOUFGMGVhVlc5Sld3eDFJK2p0eG15UVh1SDZRazFmMkRFZy9OaVBWRFBOMW1YNXpsaXdWY3BXN3ZXUkVscXBGZUVjd29ZZWlXWDF0b3BCZXFEdDYvM1RwMG54QkVONGViVUtHWEJjeTlhWDlzK3I5TTFXTlRNZ2NEbkg2WGNSZGlCajZiMWIvekVUYzFPLzF5WFdaZnB2a1hiL1g0b0RmUUdzdk9jN1U1QWJYaFNIblpzM0IrcHFVaTBKeWszOHpUcE0xUVU5dWNqMUpia2l6R2hPcytCb0tVSk1SRUF1alFWTlNpK3k1b1pwMTRoYWtyWm9DUlNrYm5odFJzMlZCNmdLcGxXUWJkVmVPNDRGdmM4b1dPOVV2cGRWU3FvZVNsL2kzTWF1QTFnUllTMTRDWklBYXRxVlpJUkhQUGFBQU5Sa0JjUnRZblZ3MXFrdlZJYVY2U0hSa1NBRVFIWENjVUxTd1ZYbUV4UUZneWJURFRZMkpNRU0wa0dCTkFZSG9TbWUvMHBaYkZPblFwb3UycU55U3RwcnVRRExRaWRza09lYjZRVTVleHpnempYNjhCS2syTVdmNm5jL1VnMXJxWmtRV3EwVjRSekNoaDZKWnRiWW1rV2FvTzNyL2RLMmcrWUlndkVWYVZHT2grcWNMT1I5VWc5YXZlUCtjUlRYb2tFM0ZZR29qK2psMjJSUnhxaGpvTnpmWFpmcHRkTHQrYjhQRkc2ZTl1NC9yL0wxclE4bTVtV2poSXA5czlXL0dhZUNrbG13Tm1qTGV4Z1NIYXcwRnFKMko3a3hUVW91Y01jRmgyeGFrclpvQ1JaMXNhTU9YMUFWU3VmSE1LR1Ztdk1FcFcrUlVOMXIwZXpEWjR0L3FMZnA5WmJJRnlGWFVzS0ZGdjFmckVMR2hBTG5yTjJ4Y1E2NHJtUkYyNnZlZzZNaVFBcmlTbzk2R0U0cFd0K2szV0J3QWxrdzdqR1NuRUVTdUh4c01VRThScVVIYWNrUFJ0Wnd6RDZKZHFQeVN0cHJ1UUZKdkV1bTVvYW1lNmdjNVRiQlhTVCsySU5YazJqUnZwdC9GcG40UGNwT2pqTWlpb044SUp2UlFOT3ZLVHYxR1FRMUcvM1N0b1BsRVA5eDZpN1NveG1yMVR4ZHlNYWdHclQvby9YTVcxYUJETmhWandPbmZxdjZaaXJoRnY4ZGREenIxZTRPOGhpNVBYNmNCeUFiTEF6ajhXTnQrVDY5Unh6VWpjNEFaQWFJYzhEUUh0dE1tWS9xQWQzMkZwemZLVVRPbjhnRHpoZEZHYnUvWWFBOC9lS0NMdHI5RCtHM0VqaEpiQUhLRko1OGh1ZHlUWHlJNTdFbUY2cFo1OG1tU1N6MzVGTWtoVHhLd1d1SXB6a0l2OWdQS1BlUHhyL0tvanNlMzZZamhlTHhWK3luSDQ4MDh1c2ZqOVRxUU1SNnY0VEU0SHErbXFHS21telJiaXkxSXZONlRpZ0hmWU1sa0hUTktkbWNsYTVsdzY3bHRTLzUxUE1hMzVPL25zV0ZML3RWaWh2dzd2S2hpM3pkN1V1SHVteHpMOVZ2eVoxVjY4NWI4YVQxZnNpVi9Vcyt0VzRnaTg5ekNGSjZuTFo1c0RPU1F2QzZRUTNLTkk3b0ZjbUtlTDRNY1BWL0tsRmtJSnJZUW91ZloySkovTm1lVE1xNmtIT1BVdFI1MmYyWmhqQU8zM0lJNVpsZUo5NHd0c2JzNHg0YnMwczJ4cWwzUU9iWlV6RkRiallHWlpsSkxTQ0dwdFplcmZWWW53TlU4OFFRaUpva0VidVJOM2hTdjRuWDlUZXp6akpQYmJvclBRbW5qR1VyZFpoL0Z4OHR2aWs4TCtqVFFsMmZRVzIrS1R3cjZDYUMzWmxCRWYwelFIOFdURTlQNkUyOHhPSlB3WndXZlpoYitQUW1EMzRmUUZlL25ZdzZuajJxQ1NRVGc1VXd5WSthMm5IZXZtekE0WHR6b01lbHdEaDh1bE9JQ2drYkJVc3ZKVEZEVmNvZHNPblB0MlpndWgyeFhrNDExQ1dYTGhXd3JxZDZ6RVNNSzJWWUptMmNyaFd4WDZQcHVTN0g5TVdSRFRJb1JLMXQzeU5acllUZWx0SXZMczlrdDg5SFlnaVNuUnk0cDZjRzJMejBJUlNpSURaNTRzaVpwNmJiNDZKWmVTNjFxMUY1T2l1aWh6L3NueHlOZHVkRGowUURlZE9QQmNvOFI4S1lyQjVaNTVJQTN0VGpiNFZveGoyYVlsNmFZT1lBY3NISWNOR0JrSTFyQTFzME5oWTZKa0hJcnBscUdhVGpGdEpRcHVHTXFNT280cGlxVFNjZFV3ajkwVE94ZmFzWFVsV0hxU1RHdDRDb3h4MVFtS3VDWVZuR25oR1BpcUx4aEdvVW1XU2hkWmFDVnZWVlJmN1ZhamFwL1BoYjNQUnBiMkdiVjNucUZzRTFGZ1ZxVjFIN0pTbExSdmVZRWhIN1owN2RwMStZcnlZUmQwamE5Tk0vTDZ2M2o4WC93OUk1NlRRYXFRdlRhdHZXbGVXNnNENHpIdXoyOXRZNXB1cDA4TEY5d0wwdVdaM01kdTNlUHA5ZlhNWkt2Smc5NmpYNWtlZFpvUXlqMzBTdTlXdnRHNzlmZVNhNm13eVRVM3BkckpHT0sva2xQaUF3bXRZL0Y4WTZPdjQrcTZDcVVPcUhqTkQ3TlZrRUNVOTBFbUQ2clpFL2pDOUVZdnhhQXRKUXZHWk5RL21QdlpDTzZBVWxXR3RIMjNGR3V6SlcrRU9PeUdwUnZLZGg2aVVHYTVxeUxwUHFWeGhjc1V6eTVOZ3FGZjhnOTFHeGp6QUJKWVh2dWpLNFVvQWpKODl3ZGNYMkUxV3FzbU53UVJUYSs2RnJoaU5DWkhsV3pZVkcvT3ZQcWFHaXNUNCtGTUJ5dGpmSlYrbTYrOGMzb0ZicXNRanRlNnF4N3luaFZ0QVd3M3BXK3NJbWdYZ2d2ZXB6cEFrZ2NzTjZiNWlBV1dHZHgxRi9ZdWx0bkdTVExmaFRKdTRvbms5aWVUQURETGdCMlgwcmx1YlYvOHVySVNuSDFEdm5EaXd3Q1Z0VmZTanhsdjhHbDVRRUhjaWVBeHNYdzFzdWJWa1g4clpJc2NucUp4VVlNUmtiTEllNXNMUWM3VGRpWHQ2N3M3WGt1Zml5a2IwbEZlMGtZUkliNWNwUTdTaXVOODhPVHRkNzRVUWJ1eXRyb2FHOGo5L0plRmZ0YnJwK0FxYlhSZTNxOTNkaFdadnRLajNOTFpWZEtUT090UUtVS0g5WGRsWUphM28vaTBXaC82aW1ndEV0bzZNcTY2TjI5MjNOUEsweGR1VHI2dzE1MmdZTlJlMVYxOXl6MmpSM1FhTzdhNkwyOUdEeG55OXFsalRWcm5GYjI4TGF0alZxWlBFcHN0cFBKZGdiZnh2Sjd4dDVDQkpheTlLSUpMR1hsZSt4aXpsaG92Rit0M3NuUVlWaE5HVktkaWJQeTdJQmxnZC90dVdPMXdKYTZ4QWNocVRlcjRCaHZXZHVKOU9reXJTcVovakYzc09lYmxhMUdPT1B4c2FGR2puN1ppSWtvMHhsTTE4NHNJclROcm1xR0lMTURqY0pVNDZtd2ZmbXpCcVFYWmp6OHRVSG9oaG5rTXdhQnR3eWlWWE1qTFpQenh3MEM2U25oWXUzTTZQWWNqbzZsenkvY25uc3FwSS9WdHVlNHBNUmJBcW5nOUxEZDJUREFWRmJMLzJjUUdpS0RzTDdzYlpyVisxYUQwQ2Fad0Y3QU9sdTd0SXJtR0ZiemFLajljSDU3N2wyaDl2UERkdFRBOGp5TDlYMGRQZ003b1c4eE55SjUrZFJVcjdvK1cxMElqV2ovT2YwNTdBQWZ2U242SjdYV0Q5Z3dNWXFUY3FOWEpZRmF4Vi9nbzJvN1RmT2VVWm9ONmw4TXNLZUFmY25Ta3JabC83SmVpK1BSZC9Yc0c0KytyV2ZQZVBSTlBhdmowZGYxN0I2UHZ1TEZhQklyOXNPQThSUVl6eXRkdWlGNlRtUzlBRm5XVHBJVWZsS2w4UmhiNkt5ZG1pM0VDbEp1Uy93ajVYK3JmYVVOV3FWMk5EY2UvYnJHaXJmWlY5cWpSYmVSSWJxdHI3L04xNEkzMEhzc0k0MlNOY2U3RE9JYkE1eVFKd1RSQmdKLy9hQmxvTld5VnY2QUlLdmoxMmxjTm9XdHh5M0hBL0FXL1hnQTU0bTByWjllajVFcFpMdjU0UnJ6d3VHdGNEd0FXdGRHbisyNklmb0pOc05hcEd0Nzd2bFM4M2pBWURMZ2VMUVplamdac3NNQk1nbHRTSS9SdGJ0WTU3c2J4Qm9RYlNoVW9jSWtCdjUxSXZqOGNDTjNLejRIUXdzVFBEM1ZSVTFmVFcxUzNYSGNuSmhZYlFjbU1HRWprOW5BMGt3ZWF5YVBOcE9zbjFIeXRKKzFxRXprdHVSUGpmanpDTS9HV1dMaEhKY2lkVVNISFdxTW5JM3p6Q2hOalRrMjBRMExncDNCeThUVkNXL0hDTGRwRFYvNWkyd3kreFNUSjQ0VmZDcWVxajJXYjd5WWUwQ015V0tMY2lGSEdoazNKN2dXM0ZqT0lCeFJnUWkwd1l6cldUd1ArVlFJSVB0bnNaR0l3SU44NDVaekZFeDYvQndGQTBRMW5HU1FFc2prYTN1UzlVZjlTek1YYXFzQzA0eWhuSW1JMDFNVFhWN3VrSTV3aEIyRVlZZ3dDUHRKbTBNRUhnZi8ya0t3UTQ2UXA5QWNoR0hJQU5rUURmOEd5QVp3dHlVRjdEdGpqWThPK2NNU3JBOHY1NnFUVERGZE5xZFlqeTFtYndoZ3V0REkxYjVsRGtKWHZjaVBUeG1rOFozUGZOWitUNEFmMUVxaUpmemtYay9KdkswZTdKTXNSWHhDVGxFWHY1OGpEKytqb3d6UVhZMFg4M0p0aW1QZEdnSTBLM0MvTDI3azl0R0hwTTZGVnl3aDFiV1BwSGFKUFpERXQ5S1ZhSE1tVGIrd1JJOUhIcWk5TitjZTRKbEZqSVoyc1JjdlgxcWs0ME5XcTdVcHhGRzVxazZLNWdrR29JODVYMW8wMXRYSVFVR3hpbVBtaDI2K0VJdW9McVprWFdGS0ZucTM2eWlMRWh4STJjVkgxa1h4WjIxT0ozMkpKNDBoVlFHckowZEIwaTAzODRib2M0dU1tblA5elBlKzVKUjlqdGxDZk5iVFNIODhsdk5vVWpDbHIzMEFhNCtUczJnaTkwdUkraTJQbmJMWmxPYUtYVDFGVlRGTnE0VDJpT3F4dFFlUU9kc0RvVHJyWEZnNFhhbnh1d3VORTVnS1FEYjVWa0RDM2FwUnhya2FXZTVGTU5NVmh1ZmNXRGVpU0dtalI3WFMxa3VUSk4yM1VudHVyS0MyUlN5NFhHVzFiM2tzRDdtUkM1MStwMC83V0RJcjg3Zm5GNWJ3ZTA0NG1ZM2NLNVljbjVpdVBGSWZmWjhOVUs5czVOWHFlSnZXekpWN21BNTBMYW5uYUcwZi9VSmJZOGNHbkV5bHZ6ZGdzdUVYTG8zYjh3Tnk5ZzJjMTBsUkpxTnFWb1ZYZFAwZUF0Q09BaTJFYTBvS3hiUWN2NXhwZnlIMkdXUDFCVWJyT0F3RzN6SElBUmJ3QXdRSnhEOGEzb0lDcVFBV2drMEoxampVaHlILzNDSVJvQ2pPV2JVOUo5TytwQ2Q2Y1dZUllvcnN4OXV1bHZwcE11ZlNyZjFRR0VTbDZUSjVUMGsvUnJmRVR3VlQyR0tManl6S1RPM2hadkpRTXpuZFRCNXJKazgwa3llYnlWTlpVZ2I2S0pUcStmeW9OY2o3MENVbXFBMzZIVHdWTWJPVFkyelBpTWNLcUVYaEZ1d3RkbUN2dVlRYWZGeDlIMDN3N0JKMWdLTDFwRzR4WEZRKzJVdHlCRlU2RmZmQWNBR2tyK2pOUzMvV1JCSHp1ZWdYZmVxRDBuaStvM0g2cWZidjBUbnZrRHJVbkd2a0hzSk0zZE8wWEU2RWl1WnJEMHE0b1B2ZnpWZHVSU2NGWXlUZkMwYU5HMkFWQTAyc28vc2FvNitkRi9jK2ZpZWdxVUY3WVZYR0NaTVFORW5TUmhMUHhTSE4yQ1gvVWRMNW9QcmlLUkkvVk1KemhkcVpzR2UxK2ZBYzJSazZqV2hSMjBtNktEMUpCNGFDalQ5UmVwS08xdThOSTlJcEc5cGJSNWFUQm1tT0xDS3FaVlJKaDRoakxEekpNa0YwMUhJS3p3WmhnZ3FIOG5TOENLVTNXMVNXK2l2RkRrNXRQb0gyTkVIbzFCTk0vanpCbk5BVDA2dUlYeVJkMVc4TngyVS9aM3FVTzBMWmM0SWk1TlpFS3hyUmJiUWJjVWFOb0dxVGRCeUxkVGFBb1J0dGFJSTB6cXJsc3ZFUTM5aFNoK1JvTU4xNUg3b2JQWEFEVHdXNmNONWl5YVZlMWw3MVdQdDF0Uy9vV0xIZVBXTVROUm0xSjMzRzdtZG11OEFwZGFKWVowbzlveFNiUTYxVSsyWm41c0hBbGI4VEc1dE1oZTFrc1Y2ZEJac2lmY0xXdmhmYXdrcUdyYk1XdG1FbXd0TlpDN3MxVmN1cFlyMW5sbHJZWU5oU1M5aFpqWGhDSloyVnMwL1JLdW1zbk8yTWlkQjNWczZ1UjFWK2VnNHh5Mk9hV1RuN0I2MlN6c3JaWm1pVmRGYk9ic1JaVzR2dGZpMTRNdlJzQnpRMG5lalpOVGhyODdHZnJ5Vi9ob2I5ZnJPMkQ1MXJOb2txSW9za25zK2hPck50ZXpYNXRHMTdoU0p0OTU2eHlSV0dIZGZwV0xjV2NPQ0NqVkFNSTJ3eFkydVVma1NLNUxNNVhRTlEwY1pWWm01c0tveDFQRU9iQ2kxazczdlZCOUt0bzdNUlpCcmVRUkM3cEkyZzVnNWJtbGh6M1ZtSTFLeFlOTVhzUCtCNXhDNzFWRUwzVGxnQ2Fqa1BUUWNnTVd3TTVWakNndXdSa2UyYk9XM1JRbVR6VXplOGNqV0ZBVm5VRUpBYkU0MDExZ0tjTlJZbTBoMmVBK2tHMllYT1pjK3NYRnJQNitCU1VYRngxTW9sTzZKTmx6cTVWR2hjNG83WlRpdDdBcGQ5bG9CTGE1eG5kVzJuUWVDU1MwTzRWbFJiY05Wc09iYmVjaStEN2N6bkJnTmpqSVVlNTFZYlRIMkh0UzNXK001OGJkZTNkU0c5Y24yRnYvcDJXelo5bUN4WUluRlpzRjdUdW5kNFljZUc0ZDVaNVdFMm9rTWVCSVRGZXFzNHNPN1dKenJGUWN4WFNoNno3MXdOYTRjb2xFQUkxdFRQMng1c1FYd1B0bTNwWFNqQVZtMUU1dm1yMm9yTjg5WHNYT2FpaG1VU3psTGJpNHdHKzE3a1h0c2xtK29INjJHK3UzL1FYajI0d0pxOURqVlF4SVhEM2d2L21yNk9lcGRJWmNXeVVmdGVkZCtpM0R6cE1MdTBaaDR3c1lpb2lhWlZYRGhBTTgrYzJESkIrOGtQL3RJTDh1eDJrbjZrS25RSVdaa0tuU1l4aUdwS2FLWkN0MmtYTjArN3hZTG5hdllCSWpSdHRHZUZRZHU1WTBMMUxqUHQ3MCsxakZIYU4zVnJEN1ZXSzV1Ny9YMVBOem9YdGlBSEZlU2NVS3NLY3B6SVg1ZWJIRm1hY0RteUV0ZXFjOTNOUGQvWlVZbHdRS2E3ZFF2MDh6Wm1ZeEswNFZ0R0E5Yk5XSnkxN2RaVjQ5Z1V5STlVMnJHTVVkdFpyM0IyY3dlNGg2Q3pneHlwVWhBT2FWVUtUaXY1cTA0czhEV2xuaGw4Yzc5NnBVbDcyQ011Y3dsTHRvTzdqZnhwNGpiVzF3dmV3NC9aVGNrOVJqVW5oOXI2TWk1TUpzZTBCM1BzeWR0SU84bnB1UDRLdkxsZnZacnVWM2V6aGo3T1Fjc2gwYUl6SU43em5vY1ViUWFXbmF4WUp5QzA1THFmMW9JNzZmdlZlM3k3ZWEvWFVKbXJoc09xZ1p0N3dGSzFYZXUwdngrRzlPTUpTQzdkcjI3RmlRRXByc1c1WThJaFdGS2V1V3pYT3JNOU5xcHI1L3FoL0MyNGZ4Q0V3aGUzUlBKRG1ZWFpJZ0FSdDZpQkYxN01YamlxWC9JWFpxTE13VmgrVUpRTzJaVzByZmt2aCtMWVhjeHBYTXc4Ym1mZTRtKzRsWEwvOGpvN2k2Y2Ird3R1SVpQR1hPMUxlcEZEbEJjSjllSU1qeVZ2VHBuZzdhNEdLSEExS0hXNFdLZHp6eWdseDFDbDJqMkx2SGxaeXQrSlRZNEwySTRVdFJJMEE1dWNVMkZyZHp6eTVoZ0tXMmN0Y3FlRXA3TVcrVFhVd29GamxwaG0xQ0lIdVZsTGNHTWdMVlRTV2JrY1ExWFNXYm1jTGFIdnJGeGVFcFhqZjg4bVp2blp6VnF5eXVYaXFwTE95dVVZcXBMT3l1V2l6ZFphY3J5YmVETDBjbUtGcGhPOUhNUFptaytlZFROL2hrYnU2R3p0STE5NEZvbktNVVFTSjJOVVo3WXh4dVRUTnNaQVVXaWM5Z0dGS2h6WG9ieCtGTWE5RVU3cXVtT29YOUlnaVdQSXJWTWxqUkRNSmVtOStkUXg1RHhHNmhqS3V0RHRaL2RVVGNNN0NKSkhLb0thUXhtdEJVeDVPNG1VWXdnaE9BbURwdVVReVgwemJ2VFp4eTAzVUdaVDlKUGdsL2ZrSWVKVlFiYU1INE8zckxodXZUR3ltZi95eWsxQkJneU9JYjh6WUt5NVJWZnZienFHYnQvZ2NzaTU3SnFWUyt0NUhWeksvUlZIclZ6S01WVGVUaTdsSVVuY09rK3FKb0ZMN2hQWDZDNkRMT2JzZm5jSkFDNzVHVVZ6RFBrVkduTU1SM1FSdW9ZZFhkRmxqQVhIa0l2SzdlU1JCZzY0U3IxRkdYYU9Bb1hUcU9Za0k0dHdEc3NNZmo0ZHBQT2RqdUZRaDZQY1Bhczh6RVoweUVQT3IzaHZsWWZjSCtYdGxBZWVvZG80eHJ0VDQ5dE1SUzFyVG82a1lDTzlQcG1UVXd4RFBvQlh5OW5oaWJQRFBXaTYwSitUYTNpTGtvNmZBb05WSC9XN2t3RllUUlVrZUliOEZLbTlCcmU1bXZTNjdIejhZeDNMWmVmUzRhNTU3eFB1R1NMM1RzOHc4Nk5INXhQWHpObFRYbjYwSk5NcUxVWEdaaEVXam1IN0JJUzdsalNuMEMvZGFONFhWRWlPb2FuUXN5UzQyODlrWmlxRU4yMXFwMnZZOUZ5dEE4TnlacEdabjB2TUI4ZVFLK1JnT05XeTREMXhiNSs5Qm9kN01Kd1Rsak9GV0gyd1QzVXdlQ3VwRGdiUHNNZjhUUm9tbFdNNjZReFNMRGE5cTlGVW9EcURoMENMcmM3R1dYYU9tMWJrWFJrMGUzUnJvV3Y5MEQ3M3NRRFFZV29zR2NpRjRycE1vOFU5d3dIenZQTEJ5M1hsU0hVaU9FR3BUZ1RIa0d2dWpQZ3dXMEFzTGNRajVvejBjTFRQbkxHaXUwcHQxSjhMMUo4dWVBL1haSkJWQnlPYUxmMXRmZGtkUXhkajFvUERtVUk3Ylk0TS9SV1pOeDNEY3VvWUJyZXRleTVhbmhVdG1qdUVqb2Y4OUZNcnNwUDhjQkhWOGFPdlZrdHdsaEZPcUFXQ3phK1ROMGNOcGJscU9LOGFpa2taTElUOERWZVlSYmd2amVSU3g5Q0ttOSt2U0YvcURMTE5CR2NRUHMySk96QVk1OXlKTzZFZnl6RW5Mb1R0SW8yS3hQdElzQ09tNlJacGdpQkxsV1JRZVJMazYxSjhSU05VMHlFamIwMVd2cGxYVHB5eWdhRHA3RkNZWFRHdGhlVURhczZsUHQ1U2tmc1VRdEIwTWxRdXd5Yi9ER3lqaWprMHNjbmZCRnVpbVhjVG16eEFvYyt3eVRjUnRxWW42c0d0Sm5vNWs2QlBKSkVtZXZrb3dwd2hrdGNuek0zaEdJQVF0Ymx5d3BGaGx1TWlIRmtSZVRncUFwNm1sNmNpYlo2WGlwQ3I2VU1wUjFaRURxQUE1R3J6Z3dpUUZYNXVQMGp1aUJsS040OGFmTHRTUDRpMTV1QUg2ZjVJR1VSdUVXMzNnN0lBV1o5YnBQS3NCRUg5ckI1Q3B4OGtwMHg1NS9DRGpzUmgxRGZiWUdOa2NCWGtHSmlkVjRBc2VFYTZnaFJENTNkUXVPRUlvejYvOGdRWExNKzEra0ZjSk90OWV1Wndab2VKVyszdXhZLzc4dXpFVWFjZk5OdTRMeC9CN0xiYmI3ay81cExLTi9XeHkwSm13ZHN6UzQ0ZlpKNEFmaEJ6L1JBTzVNcjVWajhJQzJuelQ3ZVR3UlZNeC9JdzB1UGZ1aXljZVg2S3hXVGg3ay9tSEdaRGtodnpab1JpZG5kOFpweDIxb0ZkN3QvTTBHM21Cb1dSWE9Fd2xzM0RlR0JEZk9vWDJhMjY1aWJMSFdvWjBnbVFtVHYwYXAzWGtCZGk5M29vK0pHTjExejYyekt3QkRmSVEyQ1p6NWlOZ0M0TmZxYkh2NmF2UHVLRTJHTHFIclc0UWRsVklNRnJuRjFhczNuUjhoRGJnOGptQjgzbVJPdkh5MmI2UVljS3VraTN4WVBXc0dvcTVONWt3ZVJwS29UUGFHcUhIMlMrNDJyY1Q0U202QjZuZ0JRL1N2MmdrZ1VWVXkwTC91UmdtK3ZnMGFUTWtlYUdaRmMrRjFtcWk4RnBjRjFrNDZPN1Fha2NmUWh2YzRBNi9jb1FsVzhiV2xuVU10WlBLc0prRGtVd0ZuS2JXWEJ1YXBCK1BZbEJXRTRkbHgyM3VFRWVjc3BjUE5lT1ZDbUMxNVlwUmZxcU1Hbm1GcVUrY3lDNDBQU0RRbEJLNW5KV3o0QU5XVWIrMllMM2NQbXIvSmFVVWQwTHRhMTkyZjBnRjEvYWc0T1B5ZUdoVnE4aWRWV01CUGRSTXJNMnQ1ZHlSTFRJYjNRanErbEdGeVRJVG5KTk05VnhGN2UzV2VZSHBXM200Y3pneG1ELzU2amhxUHRCWFdhT2ZZb2RmR1ozMXBCY2h4OTBqSjNBSG9ocVh1ZWdnQlZlMElsK3ZLQ0Y4b0xPY1VLL2dCZFVzRk1RNWdYMU1IemUvQ2JzZ3Axb0wwRVpiMTNxS0FXN0NNcjhvVjVjUThBajdpOXhGNEhlaXA1SmQxS1pJMVRqUmd6QWk3UXB4ajlwTzVPNU9RTTBMNTkwUzBVb3BmTVd2ZTVzTExBYUg2TXoyR245aFliN01TbW5xZWRxK2lVaHZPazh3dVo1VG5QOVIvYW53bnJ4NXNkK0RZWG9WeUhyMFJrUFphOUlaenk2a29ISDVDcUR0TWpUOEIzTzB3MTRudGZBM29HdkR3MEF3eExib0c1WWRJc1hDeXIrWTNYdEZlaGFMSllUM0VVRXZUNVYvWk5keTBYRVBFT2pxNjhHc0JyNHpBYlF0U3FVNGFtcmVOaFRKQTBLZDR5UThDdGQxTnAyWVJQNllBNjNaM0tUd1kraDJXdTRiYWdRN24weEs5QTFjZE9iVURXMXgwVE1xZkNKbTZSbnBWODV2cCtWZUZCeXF3MG5xUDFTSlBlNTJWcVk0dkVyZWJ4dWJyVENOYkM3NkQxVHVGdkdOTE1RN21naDRmZjJXTjNkVmpkWEJxdm1RYStaeHY5bDZtWVZIcDNndUk3OFlqWlY2WGNHZFlaSGIyNS82a092MU80UEJLajd6cGloRHhGaFVBT0h4dERsYU14Qmh4SURpRUZ4UVVQQ20vWXladmNHMlc0cnZEVy84MGh1RGNMT2JzUVpZMXVVM05wbTAvdnVobElIQkVXbVJqVi9GVzhVT29hQzV1UERxT1habm1SZEtIUWE4cXJSdVRqZEFUbzlwVVl2SjU3RGJnRmpDNHZmRU9aaEptVG5ZeXJTRE5UUmFCSWhVU21Kc09RaVpMZVpSR2dNYzJlWllkRVZYaWtXdjBOTStwQmlLUVlzUldHaFZjelVPQmFiQkRPQkNjTFcwYTdBQ291aTFxV0NodHVIS2pKWHR3ZzhjQ21ZLzlSZXFoUEJZVUtzUnQwWmZiY3I3djE3dUJxc20rL2RFbnRtN2t6SS9EUVJmTFpEYUg0cUR2YXB6RUE2Mk5LMWRKb3RXQ1dkZDY2ME5JRE92QVZiTkVLcFVFQm4zb0laWXYwcmF3cHUrekloNmhvd0Jnelg1MVNJZm1tVm1Xc0prVTNJRWlMdDRrMkI5Z2RtRHdjc3VqSXR4Ukt1QTBQZFVpemVKOWpqSlN5MGl6ZUZZYkdtWURvWW1rTFhtZ1dtMnB0Q3h3cXBvTDBwYnRmd0hRaVNKZ1VQTG0ySisrVWZocHFrSWlIT05YdEQxR1kwUkUycW9RVkpkR0FoTGdZMDlUZ3huT0RwbFllQUl3ZXcxNEVjRCtJS0luS0dUSnpHd2VraGszOFhuMHhVdlZGNzIzaGpwMVNQM0llTU5ZU25IMVdGQUx0L2pHV3dOc0ZwWGFmbEhpUWpkaFR5Z1NmNmVYUzdpNnVubzgyQWNqTlhiMGNoYlJTVjIySjdZeEVPdjlmZzNxOUp6Ty9pUW9WTmNtbEQ4a2VZKzRSNUN6OGdpdHg4N0ErM1gzV1pTNEtIWnpqOHlpKzZTWXJEVkNyZzZFMXgwTUE2b1ZWOWMzOWNlclJnSTNabGI3M0VpRjJTSU1QWkxBeWVIV0xTU1U5TGN4Uk94ejExOENZOW0yWHdwWFcyRTI3Mk5NcWxBNkk2ajVPZXpUTDRzTTVVM2VqcG1uYmNibVU1cktpZGtmR2piSG5URlVxY0cxbE1rdE1nTnpkV3ZNSmVNT0tseG1jaUxjUFozbmJPWkd6UHNRY3JQZkpVdDIzemRoZ0tlOXI0TWpiUklHeTNVajU3ZklrV1hoM2w3YUNnd2lUc1U1dHNiS3R0YXVTcVkxMStXb3R0WGZpZWJCWWxDNDVqZWhpcHBCQkVuZG1BditEYXBXZVdjUHR4ei95a2tkWjEvWWdTclBYb2lKS2RzTE96ZEw0enJON2pCai95WFdGMVRtem9FSkpkNmNOcm4yRmtZQ0xkSDlEcU5rb3JWYklRaHBVbytWV1hucHVNSjQwalVjaVR5RWZ0dnluQmJyT1VZUGFpWmJSblNUM3cwVXZhU0RrdDhlcGNsbHI4RDlsZnFOMW4rcVZlYlNDMEhXakhoWklyNlcyejNiTnZ3T0dUNnBkckg0SmI5VUd1eTZyOW4wbHBiU1RSNlJwNDZJMG0yUXg2NTJMYWx5VlBIZGl5TDlSQnRxOFVHdVdIMkJOZis3QWpNTHpLelp2bTM4NFFrMDhIeWZ3YUtTbEFFUXBrQnhVSWVBZG5PU2xtdno3T1dkR3B4cnRzZjJLcDhTTXI1bE1BYllvdE5iNW5FTC92ekNIZk1ZaTc2d2JSTXUyUndwYjRHUzMxbGdNdWFlWW5sTktHWVRqS2FSdXQ4VGp4WnAyaFpUK2lrTDNyRGFmb0dpOGpoV1pMRkR2MjF2NDBadWV2WkdBYmpkRmMrK0xmL3NTVXhiWk5WL2tSNkVPZi9qVG5Vc21VRkcrUUpKUFNPdFIyT3lmZnNLeUcxNVhiVG5pODFPdDNiVzdjbUFsS041ZG90M1NwOFJaZU9BWmdMd25WY3VLNjFIakMrS1VobkI5VCtpNDBQbmVMdFJEakZ0ajlPT3h0SEhmeXZsSU1SeEpLalc5RmsyTnNmeFFMS21wbkhIT04vdi9OK294KzF5SnFMRXdQclpRYS84VUF2Z2ZTQUo4MmdPK0F0UDRwYmQ4U1BZbDNwcjJQTHFGL1JYL2EwT2pLL3hTTnlaa2poeGthNndhNUc2SVh0VnhvNkxnSTNiWFZHYTF4Rm8yTndXamRLWFp6dXlLS1VsamoxdWhXVWt1Tno3ZEFSQ3Z3SmtTbkNEOWRObXBCWEphZ3FxWjZ2MnRyODRZMUs2M2RuaUlEdkJuWnRwdlRNV2VVZy9OSkR0RlpGeFJiSlozUHgySTBtV3Y4czNHYkhRbHozZEV2Z2xReGVCeDZveWg3eG9OYXZGOXZMV0w0TjBVa3dpNkVVdU9nZnRNOGUzc0xiN1lGTlhBSEZWdWkvNkZTNmt6S29RNmJhMnoydHY4SXV3Nmk5T1c3dk5nT0JuWktqRWNmVksyRjhlZ0RUQXRySDFmUFNjOW11Tm5RcjUxOFdlSHlZRnBxNzNIclFwRFlrN2dwdGFQNmhhOEkxeTFzZmpjYWNyWDM2MGZTdFZzV2ZTOU9jbENsYWF2K1gzM1EyZHYzeHIwTURkcXF6WG1BOGRnNFY5UFQrY3p1Y0xoSW5jdTdBaG1la2Mza2ViYmdaZWd4L05hTElWWVpZNzJ0REk5bjJFWmUxZEIzRnNOT2IxRTVyQlFHcC9ZNWtHQVdIblJrTkk3Qk5KNzE1aFl6eWJBWGZkcHFPNHRMK0RMK1hCMmU1eXAyVWpxcUh1bGw4cnpJZnRLR3liTXZJZWdJdE53MUJaOXRScHpGeXVWRDIyUllnWGFiRVdiaGE4MTRiVEt0b0xZdENYRG8xaitGZVhKa2F3a1czK2VlVy8ra2E2SXR0czlWcno1ZDVoYlRVSmR2OFRpWFo2S1hoUTRJZFIzK2llNFF5SEw1RGJuTmNMNU10d2pQQ05Qa1J1Um01R2hHTHlJeklqU1BGV2xaMVpyejJzS0FpTGFRVFplaUVCWTQ2YWhmSHF2S1p2VnJPaVNDc3ZybHI0dWdySDdONzBSUVZyL2lFQ0lvcmQvMm5NUWUvNVRqYm9FNzNjMXFnYnB6dGhkVVcybDB4N0dlRnJJbm9ibStCVDQxMjdaZ0htNmxMVzZlc3R0TlNUQnRXYW9ucnFPRiswK2xrWFRkajJ3QkJsMkVhdnN0UjIwbm5DMjBlTGpKQTZoaEp1NTdDbXoxeUY5MWthZ3ROM2hFS0hVRS9ZOXRsYktOQkNEMk9mMmdyVVBhcWxCemE1MUZoWDJ2bWdmbXdxMnYvT1NwdmFhM3Z0cnVObHVrOHRwOE10SVNLdlFOVnMyNGZlSHhpZk5CaWFMSGFNMzFoeWI2SHp1QU5uMytUZFBUTkpmNzR4WmZNWEhjcnBoNlM4REtnbHkrYmJIWjFKb2dxKzJ6cGxZd1JtMmZOYlZtZUdyN3BxcUZ0czlValVtR0dreWJZL1drS2EzaHp0QXUrdDJ2NXI0NFcvN3hLTFZIS1VOWXd1OTZ0VFUzbDBVNnEydGRmclc3VzhOT3RaYWJWVHQ2a3dtQWFiY3BIdmRGbTdweFE3TE9QcnY4ZmZwZ1N4YSsvR05iNExUNjBMa0ZEdTJ5T1duYnVxQmlCMjFyWGdyVFNZTE52dUdYcHpjRnBzbTVKSmdKakhtQ3VvVmlPOUpmQkdhL1I0a01NaFZ5U1N3SW9Wa1BoL2dxVXhvS25lWEMyWmI0NUd4aW1ZNDlYRDVOaFJhM1U2RE93am44L0pydUZHMXRLWjlSOFV1WFJrQUlXdGdDVUVwQTBNL1cvWkxacEUzaW82NHdrN0Z3cTYrK2hXdWtiZkhPWjFsKzcyMUxuTlVDcHpPcEp3cVNMRzdpbDh5WWkyYTd4YlhvNHRGalh4MEtGMVQ3SW9tdEczdTlIamxvajJoYkZGa3I2NTB4WGswN1U4dDk4Mk9CRmExajJFelJRalNkeTkzN05VbTAyRHFUeFBmMXhQbEhoMjF4TzF5OGFzY2hzaU5mdHFmV0p4ZDJHaU5OWXQ1RFVnOWRNYU1weHpra1FWdU5EYlRGNC9vdDRqbFdzK2d3NFFTTlFGemVZZ0U4Zm1sVFdUenlxV3RibEtVeThlallRbzV2NVJ1Vlc0bGxUSEJxY3FLTGc0SGJkZHlMOEY1cERHVWY2d0dtTTRJRm5mR3lEcEN6c0t2SGZ2a1J3YVQ0YXpTQ3p1ejJQVllmZml5cDdxY3NRWDU5QU9UaER1QTkreWR5ajNNbEJvSEc5Qk5ybTBUYUhpUEFvVS9vbmYxSzRLK05zY0Exa1R2RXhOVVBuL21OS0FsM1F1ajZub1M3Qjg3b3lkeE9GL2NrM1J3L1RzK1grSjFCZmtkUXJzYWVXTE5TSVFyT0dhYVc2SlBmYXhUQ0czTEJMRkpzWVVxLy9TZ0UyTmlLNWlFb3YvMklRNUNDNmhmZFFsNzdJUXkwTHdSWFNnNlZleUZtUTNncllOQ0l5bjJINUEzWlpCTjBtSlo3K0IwZ015dHNJNWlpSmpaNUFzSVd3dWUxUUdYQU5wSmlrNVVTTnNJaGdUYXR2aW0rNlZIWmxEYUxFZkhMcFI2bjZ3KzBhZmlYU1U2eDRUc0oyU0JuM08wZCt5NWNJWllYTWxrb2lCOEg5WGlkUmZEcy9oOWg2ZzJZRE0yQWgvZk1RL0pibW1WOWVONk9FdkJnR0xlekxFZHoyampzMXNuT3VSQ0N0ZDNoc28vc0hEZC9vc2R5YU5XVWVFeFltN05EVkw3Sk9RM004am4yMHlEa1FpY3RxcXkxSHp1aDQza3pBd1Fxd2p6WUxpdWkyRlhZTU5ObHBzUk9pZ1QwYVJHaVFTcWlzQzlGcWlyaVMxbWNQN1lpSWNEbk42YzBROFhhWkdCRktpcmk2MTZjTkRUQzNIenB1SUFYWUMyQUFzcE9oNGZyOVM0Ti9UQ29udmY3Sm5TOEl4UHFDZTBaNENsSHlzVEtHR2hidy9YTEZpWlh4bWZiVzY5WTlJaXE5KzFmZGpqTWEwNEQwbXlaTkNJVk4wTUlpcnI1aGtRN1VPZDUzVW15ZllYR1Y4MkxLSWdYZG1tV3c2bWQ4Qk1NZHF6SWk5UzhTTDhYMFpwSDJOYmdleGp0R0U2b0paVmV2eGNaOUNLS2tVdHVKajF2VmgrdWRBYkRDN0Nla1VxUCswcGFZb21ZemRibEJFeGt0ZldWalJldHIveGthdXRyclMzd2lrSHRhWDFsYTFYckswNllEaUhycWlKZDdJU1pJcktBWWE0OVlCTXdpOHJZV1JVR2l1bmVYT1ZSblpXczdhMFhHU2FLMm0wUWZwS1RCU3ZkejhUTTYyV2UzcW9Zb0U3ZXl2SHlYK00wK0diRkNmK2RwOWZycHpodkk0LzZ2R2FTcjFDSjFmRXIyWDNQUVY5dFlORmRlRHI1ckdDcWJld282aDY4Rk1JMi9QaVhkY1djaFViZXd1UlU0UlRDSVVYRmFiNm5SYnFpT2dTWHlTaTFlckpSOCt2TkNVeU94MXhZSnd6NTFhd0tDL1RIVEQ2SjZHaGV5RUN5aGQ4REJmanNQeXJ5YzRTa1hvcWdPbFl4dm1UMWl2b04wZHJ6T1Q5anJPTUVIRHpYM0xuWU9GQmlCRFZVMmtPbTJ5d2MvZ0t4cmdCL1N6TUx2OWpHZlVjaHl4Tk5PRCtXeDJsMWh6UEt4aHhGTHphZTlqUDVkbUdMb05ydHhnbm5HNktqeEpja1A1WVIrTUpQbUJJbjRnQzR5VUczd0dsVlVYRk5za25qNlpSMmNzRmtpNjJuejZZWDZYaFUzRzdkeS91ZGFzeHpuU1Q5RHF2Rm9Rd1gxeWV4bkRodXNsSWRFcFR1RjVKY1QrQU9xQVJ6Yi90OWgxQ1JvaS9aRzFTZjBiWVRYdmtGVldJTEhHc1dqL3hXM2xqTXlPNFNyaVBYNmVtbklsMGVvdmlEVGtHL0xaY2VkODdWZm9icDFqL3dmRDhPQW8rak9ZM20zR3VUbzJ2eGZKMWg5ZXVtY3FZQmhMNjUvSXBIb3JQaUZoaUpGZUdBZklYWGFseEVDQm5jbkZ4eXFINHRWaWJGZmh5Z2NacDdLK1I0MjYzNHZQWk4xcjZhMCtuaHhodHkvOTYwd2JGUVZEOU5tbE1NeEN1eE14OHBsbjU1QWk4aDlwZzNYK2VVY1lqM3JXeisyUzczMFdrUkhnKzZmbENaNTJpQmhsNHNlUVJzMUhNcklURVJtU0hGYTZDQUtDSTlBeUhlZzc1bUgxcHdPdjkyVHVYZE9xYnVISk0wUHVINlJNRitRNEJiRzdqL3JHclhOdGh0Q1FwZ2NRMk0vdEhGQ3d5OUNxelpDZjY4TFZHWmJsUFRYdUI0VkpQeXFIUUxaaW9zcTZEMlRZV0s4S1JOak1MTmpiYWNsTmNGSWZ2UWpCZktEMHdwL1ZCaittZjVCM1N6MmtOVFUrUHhkMUJKbVJDNlhNRWJRRXpvNWlJbjE3Z3dwbjVLTUFrQ3l1blZBbW8xWFIzVktlRDB4Z0VPLzZPbkpocnNwcmVVWWZNZlV5QXVLZVhGNTZsSkNNNUxFSlo0VVpJaS9zdS9HV0VzYWdYQ2FOb09rc0J5VVJTNUdTY1pXN0thbFBlT1ZjZEs5a0xmazlGUVQyVTl4MHhhbi9kY2RhbmF2MG1Sc1dxZVlBbUkzM2dJZDdQUlMwWk56M0dvU0MvVmNrM29STU9Rd0lOaEhFMzJ6bUM4T0JhZHl2OE40OWFQM2hjVkhOZFR0c0lvd1pTWTdjQmVtKzBncWxud1g0akFndUJWU3orUDFrSVE3ZTk3NGtHL2JQRFV6N2VleGIyQTJYb1dONjNPdXA2MW9HVTlhNkhXczlCczNaT0JkbHBzM0c1b2FlUzVhK1JmV1IzZ3ZyL3VzZjdHOUJ0SjFocFhqQTJreXdKZmlEV3FORmUzbUI3WXFoSThCT21teTBxNm1OU1dsUXJOKy80SXZsb3NtRkxSbXVqbStpQlhTbEJyUVRlY0NIL1VXRFdwdlEvcm9vUjBYY1VhdFgxVDJwamhGd0J5K1YrQit3RHRqdE5vdTkxakdtMnhPMDZqVFg0VjREcS9DdkJhRENXUHF6Q1VyTkN0eENnV2RERWdLNnE2SnBCMVVGMGF5QnFxcmhCa1k1c3VGR1FEREpjR1dxU2NOVHhxekc0bE5MSzVqVkRyQ1lOYUFJQ25zSmJ3ZDhTWHk2ME1sbzNCYzFvckRDTDdoODRzM1RkRTM3WkFOS3NCZWc2TlJ6L1ZzekllL2FzRnljZWo1L1RrUHJBZjZOazdIdjJUbmx6UDlWMDl2UXJNQVZ0WVZKV2VqZHBEL0NLMm92UDYvV0lpdFlTZ3N3V0ZFMXBRUU02eFhhd1RxQWIrOGJJVFZGb1hmYXpzbU5aRkh5TDB2emI2U0RrSW51VUNXMEt3QmNtbnkzYmxEOU1XL2NDc2tvcEdQK1ZKSVNhSTdsZXJsaHFmOENRVEUvM3NwVjFlS3BrSStVZTV2Vkc1M3liRDdlVFVCelB4c0pwMHJzaGRZd3BmbTR6ZnBobGkrRHpvT3BobWJ2eEhIVmhVZTdVV1AweGJIVGJONTFLNk9JaUk5QTV1cXV4bUV3clhzVHgrd1AzR0ZjeWFqMCtzMXJXU2RwTmVRSmxXbDZHalhBWHQrVis4blEyMFhXVjU1OC9YdmVmYzNIdVRuWkNRWUZMWjl4ZzFLR2ljVXBLeFZMTFA4b09VVXBtT1k1bDIxaHJydUZaWkNhdUxmQXppVENBQmNqSFgyaG83T21MOVFrVkJBWW1LQ3BXVzhHR0xyWlk0T2pVS09xRzFsYkhWeGhacm9Gcm05LzgvNzk1bm41dWI2RGl1Z1pWNzluNzMzdTkrMzNlL0g4LzdQUC9uLzB6U2RhYm9OOU4wbWlZOVprSTlWdy9SNmxTRkVQVXdibkw2dTFMWXFWNVZRZC9nRlBLdVVxNXpDcFdiWC9NM3BxTGZNUEh6VGZoK293eFVZNjhIMUlHdXZ3bzd4bTdGN1BlU3ZMYzkydXJqMm9OSC9uY28vK2Z6MU04M2RmcEp2NDZYMWwvM1JpNjZwYkNSL0xmMHFuMmt2VVhIcXpZMGJ0RXZoaFBQSTB2UGFieGZ2OWs1amZmb2Q4azVqWGZvRi80NkFvbkwza08xbmZ2dnhTbDE5aWtUNEhqeFVHWHRMdjZNUXpxOUR2OUVmQmh4ZUQrSGRIMGQzaU4xUVJ4K1dwQzRPUHlVTkExeGlNcFVCRE5paHE1c2Z2b0VqUnB6WENNeHh4VnZROEtFYXd6U040OExHM0dEaHd6N0YxMVFTMmlReDFIb3N4b2ZabFI4TmZXWW14a1dlTXBVNUhFcjBCMlFUMU9oazRMNDJXYlg0cTI2UENrNk16WVVPbGEzUmlFVmRESWZVWW9hQkRWSUJHYkhiQVFEUEQyOHVNUFhSQW1qT1BRWW43RHljc2xpbGlvRjErMWFYenBmbXhQYmtNd1g4eExodEU1c3FVRXUxWjVHeTh6bkpsc3JkamR0cTRHbkowSVJuZTBCcVlwdDJzcjBMNHJva0hEQ3pWNVdUUGpERWhseUpucG1lRytaQXZnNVB5YnE1WW5PT04wamRxaXhEUEFDZDJ5YTBaNkNneGZEYkx4QzhxT3BEbUQzdVR4N1ZNdUNXQWsydEM4S0tSenFidTBGWGlPZWI3NlhTTGZZOVlnTGQ5VldSdG5FekpnRVovVnVjbnhOZjB4eUZxdG9leWRTMERWWW9hMWp5ZjZ5aGFtN0pMUTFRMUovWEc3UHVsSGtvK3lWdGtyMEZQa2pkclNkNnBpYXdkdkVqckJNZ3AxTmdpVS9XNlhSRTV1UnhKR3dNb09Bc1ZTU3R5K2Nia3pLZkZZK1ovTjVVOFJkS0FKai9qaDVCaGRna1ZPaFRmU0w4SWRCOGVNbHdZUDNrUG81dTgvbnVKekNObFBibjhtcXlNODZiMTJRRVRyTStGU0MxMUM5M2xZeTlwMklUWHFOZUtCRnI4WTdhVzV0RGNRZDFTbDJxNGF3WGZMMHk3ZERPTlZtNThtT0dudG1vdU9DSGxuRWxtS3lSc01XVk55c0hWdDVleVdZT1ZQcDlJY0NPdFJvakJmUzNZNTZmdEhtMWY3c2lDRnFFSUU0cTZwYXZFSWt5ZTZoMUVuT295ZXVhMTBpR0FEZldNaVcwSkcxcy9lNkFwY0lic0R2cXl4VlVuR1JGcDBER1J1dkRRNTRpWStTbFNCbVo4YzlrMm5MQU5YV05HUnFxVTlZcU56cWg3VUpWT2RRNjJuek1GbE1iVlcvd3pZQXcxdC9qSStzYTV0aEE5VlQ2SkhkMnJwbVA2d3RGeUxkMEVpNlliSllvMmNGZmQ1eXdYUXZpTEo0MUZ2TmpoU3Jvem1vSm1UQ0RicXh0WFdteDIvZXUxQi9WSWVsRityTGRQS2wrckl3T0NLTmRsaGFUWFhCY1FPTlVuejhQa3hXdW9qdFR1bEN3Slh0dTByYVluZDhiei9OMmMzR213TE1UTGt0RUtUenlhMUJMeWRzbTY2eHZmdFBhZ0c2TlNUaGZPWFlkbzFkS0swN2haS2NyMDJhdW5KLzJySzdqaFp6dExrL3RacmoxSWtBZStkVHE4bGxzWFk1cTZPM2tGMXN2ZHE4RURtWmQrbE4yampsblpmclJucWtsQ3JhcTJoVG9LTG9aM3B6Zi9IcWxMUGthVnBVQWZtbVgrN3FxRWhRVTNNVTJ4Y1daYjZQMmxpMzBWbTJGbGRzczlaSDNZdTkvWVUwYnVwSXRGOVQybCtVSUJxWkRqQ0FkbFZ0MG9HNlhLTlBraTBQcWRjd2Y4RDJwMTBBM1ZrZFRadVFpdXNPQlg2OGYwS2RUbUhnK0xJYURrME5PazNjOGp4VkRMazBSNklmUkU1T1E0QmI0MmxOell6YktjMjlucEpmdWpwWUJRbGxvTjBIYXF0L25td3RpdG44QUFYQjh0N2FWSHpnVTM4cVVtTE5rZTNpUms2eWZ5VjlVQzI5dUpsRFQvaytTdG9QY2FmYmxqaTJGSFpIM1MwTlJxTjRKMGVsUFlwMkw5N2ljL1NoblBBRnBWYk05dEIvWld3cVptTHpKR05RWkd2UUdYWkpXNUF3ellqUzBCTkc4UWphSjdndUcrSWczNjN4Z2JsUHU0V3ZLYjJSSFRYOTRtNTIzWEZqZGw5clpwcHpOaEFhVnUzeSthYTJHUnJESG1KeFYzT0dlV3BTbmFQNE85Qk9KcHR0Ty9TRWdVWGhOOFM2b2tQRm0vQzBFVGlBZEFONGxsUitMNEdRWCtwUW9TZTZjUWhlSWwzZktHVlR3T0lLSUh0WGlLSmJGT3hSUWsxQzlFdXRZVnpXZGt6bVIrc21YN1FGVXZVUWhFMnpxUFdqL3I4Wi9MYlJmNmpZcTJhNkNib1VsMGhhNzVWR1I1ZXFwcG9YYVZsbVRCWWNmbDRSZlMyYzVTWVlKR3d4cEJ2TVhxRVZ5NVBiYXdpK2duVE95SHFSZUNhOUt1aU5TVU53YnAvdXpYYjgzSGpmMlgyVUI2WW8xeUxPRDlsUExkRlMzOTBDaTJCeHorNWZtbDZzSVUwRURoRisrQUxCRWtOUEF6MWdFMUYxVE55VzFuZEp2bWlEbjlSTXQ2ZkpNSGthaElnY1pqNXMwK2wxWDJmemF0NUFObWZuazk1M2VMZFBTNzZ3OFNMOVd0WHBKWGhlUFp2WkswaVVudEJMT2Nkbk5WNm5WZTZzeGhVdjBZWExoRGxiMTlyWjc3eDBtOUtWNWV2MHFCWnN0VGlCZDJKdHA2T2dqZlF2MU5IK2l0ZXJCMG9oWjQ4Ymt5VkR0TThCTnpnRHJRdlJBVXRsTEpsNnFQeDJhbzgwam42T3E5bjNsU1ozdjlMeExucVRsWUVsZmJKaGx6WWVLeHlKVldySzdpMDRjbXJrZWdzWks1Y25aVWxxRENFRUZKVzg2R3g5ZnJOUnJJQUU5UEljRUJiRlZaeVB5VkJFdXNQQ2NGVDBOaytMZEIxU3dNdXp1d3dpRVhOL2IyZmN6OGtxemQydE5IZGIvWTBZWW03UkxjWGtiMlh3ZXFlT0dTdmUyV3lTTkZTc0dGeFhVcUo2eUtocDdERlZWV3lWc0tYcjgrbWJwRlhTZDlwQUdmUWFOWVBpWFlpQ050Mkx3T2hHcFFvSVJoZFNhbzh4ZlNaOWNna0VWaGNnREd3dHV0djYxSnFrN0xkYjZ0KzBnVHVmUG8yR0k5THlMbWtHTkNrZFpYZWd0N0NlYVNGZ2dva1NxNmwvMkpycW1BTkhQcU1iZkRYdVJlaU5Za1lGQmJOTXZTUTllWUxzTFR0TDdqcWIzQXpHTW1Nc0wxSUc2Tk9rR1VvOWVqeTdTbTFPSjJZTXhEcXpkeEd3cXlXYS9QZVhzS3VBU0ZXWXE4ckRUd3A5STZNRWxFanUyNmRjVlVka0dWSWxPN09oV1pOY0ZaeHFpSDR5R2t0dTIwWjFUZXM2cEZwRHlJcUJYUEo0dHAxeGlhNVhQc2VhVjBlOHVDVUkxbDJmYlU4bG9YcWp6TFVxVFBVSzJZWDE5aXBQUnkrdjV5bjdzMTVTWllwZ3JKZFVPQkVwYy9XU0trL1pqL1dTS2s4WmJaVlE1V2tiZGoxUHdiNzBraXBUQ2U1MTdJbjlRT3A1eXRJejR2NHVXN1plVXVVcGs3bGVVdVVwS0pkZVVtWEs3cjZHOVhJSHRMa3hnQ1AyRnpoYVFrb0FIUm5VSW1pSjBWbVlkZTNoaXQyU1VSWFFMeU85NUF4a25CSW1USU5RTUswWTM0VjkyTTZ4c2x6YThWTVdTK1BIaENqS0JqOHJjcGh3ZWswd21kS2hNV0dwQWhaU0FibW1rajloOHZaSUNLQVNaaldZRGtNeHVRYVFwSFF2VGlndVZDMCtUVFptOUx0MUlCTWlXc0JheXJ5VC9YRWs4OHFFMkRZcXhnMkliNDZyQkRUSnJRRlV5WTBoSnlpM2hvQndjcHFVZjJGSmUxTmhXcnB4R2lWa2NBYXdMSG16Sk1mR1pIZE51Smg2a2ZqK1B5dW9TNmRlTGtGZFBMM0hoOFVxNys4Wi9rOEpaZWNQS2hDZk5oS3l1NWFNR2duVFZqWmRzaWlYVFZlNnN5VG1pZVNHbEVTNmtZSjFGaWdZeWxjdGl6d2FqVkdoeHNwV1NmQzlzbFVTMGdlTlVOeThNSnB2K0RxbUNnWis5Y0o1YjlkY1dSbDUyMENBZUFTSWo2QmhRRUlSZ2IrNHBEa2x5KzJlQjZaTDB5MVRMRkNkc2NFdEgzL1REOTc4L284ZmZWaUdRU1U4ZGVOZCt6N3o1cTllODQ3ZG1FV1Y4QTkvOCttL2V2OU5QN3pwQXlTZ1hCc2JmUE56TngzNmkwTi8rL0ZQazdCSDhqM0RGZXZsZGJjaURaK1hDYTJOUmZkYUFNYmoyUnhFNllUVFlXNzY2Si9DeWR4bTA1OURyZ2FxS0psOEppU3dXSCtxTFlEb3NMWDlGYlZ4bDkyV2wrYnVKREx1OTI2UkRKN2R6ckxSekI0UVQ3VVhGcGlBcFFyUit2TGdnVDhWdU1nUnd4RDF1YiswWUVwM3BSeUplOVhaNWljcEcrOUoxbG1YdE5qek1WNWdjemNDUDBuRnpiVUUxNFlOTmtuWnJ5dEJOYlpOTkh1NnZERFpUaDVTak90ckVONHdBZWptMG5oT2JwenJoK1UvcFJ3bUphQlRZOFdSMnZGanRlT2p3MlBCcWc2UnRVRTBLbFVqT3pQWng5SHJPWGgzM0NOakYvTUpDcnkxUm01cDdaZUpVdFpUOFVOYmVBMWkrWmhqTzhVa0twR3dZOG9ESWhtdGxrZzcwNG16dU5mR1lSUVYyYmUxTStQTGhYbEpJcUhUT3NXTExHZXpUWDIzWlNJOVJBMnlEWk9XVjhWWG42eDdiUkVzUnBPckFrbnczUkFBSWVkcnExb3NtZXhSS0pXTytRTEF2OWpxUkJGN1ZBS1J1eHNTRTYvdVpYc0VZckIyYWJmS2drT2gyMXNDaEVhQ2NoQ3d1M0VwaTAyMkRBV0J0REE5VGFHS2FPSzNvektxYkdjcEoyMHRpc1AzMjl4Ynl5SkRyK3ZaVEZzU09qVzZIRFErWE96dUpCcHArRmMwTHRVczZhZDRoZmNPYkxsazBMZnNwMWVqek5DMk5vTHAwYW9XUmVNOWhHWlhzZlZxTktEZ2FLU3prVnFPWnNrd0E4bXlGM2E5MGJyRkkrR2hFMjJuYjkrTlpqczRwamQzTmR0Sm8rT1A2NGMxZ2lWRlpYUGErRlNOb2NaSm9peWo2T3FPaGxINkdKaHUvWFZxNFFyOFB2UTF3MC9rcUd1SStlUlAxM2hEQUxkY0tPVWNxQlBlUm5iU2wrMUIxdGFXaHBkTExUU1pZc0dIcC9uR05CemtMMWdlclN1UDlKUG5FNHhSeEtTUU9LVWdSSWRVam12ckFSR3lhdVBhUGE0Q05ub1BYQ0tveWxSa3d2S1FsVGtPVXllWHFxN0VQL0tnK0NSWFZUZm5WUkhsdUtOWGE4ckpYbTJ2dnZBSTdVOG13ZDRlaTNZMzdVK1ZTWUpmSUQvTGV6WDhRdU5HbGdkNXI2UFQvcStzWSsyTW5aVDlRdWxTajkzQlRvbEZNUHQxdEpXaWx3bm5XZjBsd3BBZGJmWDN6dVplL3J0b2UvWjUrUmwyczJ0UWIyWmZWMXkwbEJzaW90WlNodld2cXA4d3FZWXplRjlDVDdqcDl5RnFUMjdhL1drZlNwUlN0dG0zMEE5RnpSSHVxaStEak85ZlVEYkprWm41c1p0eENpQWgrM2lUbVo5VzBRdjB5SVRhUTYrSUV6cW5YdUtUZUZORUJJdXBqYStZZlQ5eERMRFFHWUd4cDdYTi9KMTBQZXV6NlE3SHltV0tHK3NUUFhOeWZaNUhWS3ZtNWVFaDlheG01ZktRRVYvaWhBVDRaUGVSblJ0dWRYdUl3ZGVTbjdCdDRSNWNPdU1GYVRvdEY4Y0Y1bFBGbjB6WHMzTzE3MEV2ZkhuUjNFWkFCcFl4UldpZ0ZnOU15MURSbXZ5cmlYSnJjNmhWNG5hUmdyMUpxWFkzWGNDcjJuSU1RYVhlaFBTVW5JaXI3R1F5UklCNkN5UlpPL0UwQlZvMG9JN3RFMkszRXpaVTJlclppb0pjMjVvYUMxVEFWQ1dvVisvVWJxQkVQRklrSU1wdEE2d0ZWSjczQ3UwQ3RFK29jdGVlcUxiM0NCVTRuby9YRFRjVHRwMGczeHQ0aU9CdmtPWkZ3WXd0dWRIYlFia0RHTTRwR0tmaG01c0N5QmcrOFFtaGFLcWpiaUxLVFhJN2VsVkQrMEp3cStFVGg5U1YzWGhzU0N4U3dqcVpTUUs3V1VyQmlSMDlDZlZEcEdpZFZDM3hRTFhuZVZwMFQrQnA0YjF1SUZRbHRJKzZXZ1FBdWJZaERDeXZXclQ2UE5ydjZRT1d6YW5kbkNHY3dRUE5sb0I5VUpKOEEwdFpJVkZMNTRXU0I4VmVBUDY0Si9jQ01JN1VIMGdiRFJvcHRYRTRSVGowd1pBYmxQbkdHWTVVVGJPRGRxN3FhRlhuMS9aWWhHeFZYU1YvMUxiSE5oTUZBVXg0VzVkbzBBcnNPWFFFc0R1R29mVFJvWVFIcmtUeWhhc0UxdFU5eS93UzFnQjRyeEs3a2ZUbFM0Qm95U3hSZnZSMnJhSWozaDhDa1Fkd3hjK25mVVJ5ZW5BaDVhZEFvUERqdlJXc3d3RGJQWUJIZHVpdEVLUmR3Q1BjTVV0dkJiVkpEVmRiMG1KUVFIMU9nNHlIL2hVVjdVWHBuRkNDVmUyY29HMWdRc0J5SnRJQyszeUZjNExjRk1JNXdVVDZUT2p2bTJoTjdGNW14RTgxeVRIRWFzNEp6R25scXN0NEtRK1pabXJPQ1lyOXE1bGFzWC9OeU5Zc0pRRE5JSlU0UU0rZFdWU016WXpqZkhBcVl0MkxadERNejZCU21EbGwwQ1FPYnNRRm1BS2hFWE1LVGd1a0wyVmVQM1dBZHY0MlBIVDIvcGYrNUpWWUNKZmtrOWRoaXdWWGZoMEFDTDd5VFdpZm1QeFg1SlA3WnJSTW5UcG8vRnZPZ1doZE5XaGRhUTY3NlN2N0s2KzZhckJiZ0RsZW5KOTZaZi9VbXlRd0tveFE1L3pWVzIvYmQrMEF6QzdLbVh6SmxUT255VnZuU3FEQ3kzblJKSVVDcGNNcUlpMkpZZkRNZ3ExZGc5NjF1NjY2TXVXWkg1L2RFckxqUVdVQzFjak1TbEZDTExrcVAyMFgxWVdmOHFwODJTN0FLK2d1cnNwWDdwcFprYndkQ0Fyb2FNK25wRFVkWjNWSGZWN3FZSUVSZmlSR1lJeXk4SGJRVkZJeCtDVGZobVhEWlNLNUQ2d3V2UklTWEY5VGV2SVFXQ00xU1FYL1g1NHZENTRnV05rVGVIOVR6T0pNODRzTmpxL055K1ZrQkZyYUM0QnZaUGFhVGpkV2syNDUxSEgwY1BlUWhLNCtvMTBxaW5qKy9lSnFXYlFBc3ZEaFYxYThDeGdKVmxSRURxQ3U5TFdSY2lUNGlTeThwRFVpbUY3K3RNbzdnZkJraXZ2cE9kcU9DNkxwV0YzTlJ2Q2NVdmMxMWNSTFlhbjJhVHIzcXRRZ084STJlRjQ1am83Q1FwSVc4OGtjempIajdGSGtqUEpjeUswdFFQTXg5Y0NpWGh2NElQRE5MVUdiaGJxcUhMaWhyU3BuNUpYbGJiaEF4cTUrVE9KOHlQQmh6ZTdJWEtydEtBMUtPTWdZbzJacURob0VvUjgwcEM2eXF3OWVMVzdjQ1cwZ0lzS1JwYy9GZTdtVURPbktldkZGc2dtckg4bWpaL3hXQmhMSGUwRXJrYkpxbHNYd1Yrd1VibHVrMW5HOVVtcDFmUkNlZTlGMXNHV1lxbDBLeU9yQ3F2SkNKMjJ3M0tIdHloVzRlRFllTVdFZ2tEQkgzYldvTlIwR3hqeTBLdzRqRGlqUGNha0ZLWk5ZS2lQelpORm42bG1qdlZkL1NyakM2YVZ0eTZpQ1VDOFAxQ1VhSXdUSUpMZG1NbVFaQm0wZEFnR2taZ253TFhzWXZzemVicUY2Nk0yTWo1akVTSnBpeXoreGRmSFlXS3ZkYm5wUDJYK3BqRzJObHhyRkVNWWxXMFRZQkNDN3Z0NU1CbngrR2NiMWg4cVN5OUpPd3diN2ZxNkNBcy9yVFJiL3dOdlIzaGZmMGErVjhKTTdDWDRzK29TY2N1VlNHeWpRV0c0Y05FV01YYm1pMVRVdno5bkF0SXJXenVKTFR4NzBGcFNIKzRzRUswRVBaNWl5TWF5eERaZHhPbWVMSExLeDFxem1aZ0dXNEE2UlhhR2wxOTQzUmh1UTVMMW1jYmpNZFFWU013K1dwa1BnanJJY1lIdFhtUllYdVVKNUxSNHBoOFNvYlRPTFpJK3UwbFpjenR2dXgvT2RQeGVzVmkvTUYyMFZWS2MwTTRZMVVvdnB5enBnZ29oSE40M3ZCUGQvNlovSkFwMldJMjhKKzlDZzgwOGl5Zk5ldFQ1QUNKdTQ5dlJlN3UveCt1OWhwMzFPOGJCK0RqYUxkM3lmMzArMnMwdW11emFudURYU1h2K3h2K2ZhdXVMT28vd1FUZXp3UC9CN2V5dTdCSzJhN2tYSnI1b1VSejYvU0YvOHJ1OHN3cml6ZVR1SHJQT2t2L3VvMDkvM3JzbXR4ZUxOMjNYaDBTOXovSjVWbXpsODkrTWMvdVdrNy8rekQwNXRMVDd4OEhPNXlVcVFvOWR1M0R3ZFpwdnR2MW0wTGkrNk80aWZ4MytIR250QnZ2cTduZWphSk5iYk5oMnM3VDRUckJuYXpuRE9qSGNUTXovaDNtUjNFcGkzeGZ3cXZRdkNBdGdmMlhqRHB0b05tMnBYTmxVSDErdlpwcnJwZkV5WDB0Ym9McFFZdW91ZmwwMDcvamFpVEdWNTVZWHhtUFpyVzhzZWpoYUVFWWJaMUdCTHRtMDEyM0p6NitKMnU5VlFENjVTcTdMcTZsaWowMnkxQVpZdDhiejZwbGZoblZQOFVNWnFxcXNJaUZXNm15TlhhL3h6ZWJuK21DK3YxK1h2bFpmNW1xT1hEN294SHltdk13alhGMThXQm1tSlErWHR2THhZZ2hsUFVDTDBMUm9YVXZDTVpwRXBoM2lZSzBxNTdGb09tbGY2TGpZUTZUSXRLck96bEhQSjdNemgwT3djZlJpek04YnhEZ1dOUXZGWjFjSXR6eGJTM1U3NlUydVc4RFFUQmpwN0UrVGF3MEpRTk5FNjY2cU9WTk1IMGZldVg5dmdTenlQWS9sODVzL0wxdzhGdmVleEpzMDhMM2JKMnFjcGNMbDBKTElhc3BDSGgrbjU0V0hLSEtTZk80bkhvZC85Q3JQSnIyei8vR3dxZlZOTkdYZWdHVDZxKzVyQ1JpTTdJUGp3czVFMXo1NnJqSDd4d1NwNHVzUjhSRHQrTDJhcDQyZTlJcXZMYVJWd3RWWXZCYWFETTFiVERTTEdEREJIbkl0bWlNVXVqOVkxZEsvbkZYZiswZjJObVJlVXRkUUVLZGRSYkxKSTdSdmFWL0R6Tk9IOEd2bnFEZTExQ3ZNZnlnYmNTSWtCalVob0FZc2xkMFA3WW41WVNOZnpRMFJ6QmUxZkZ0cHVTV1ZJWXcxSmFhL2laOFdHOWtiQjZaTlpKeFRrK2JoRk40YlZodllsL0NDNXFTeTRyMHBpaDROSUNvZmNablIra2U4dTR3ZHN5dmthbnhMUTF3dTV2SlpwVFYrcC8zeEpLM0traE1rMFh6UExmMGdka2wxWTFQSVZQcDhhTk9kbUNTYzBNVHRvemZWUFY3MmViOUo1bzU3WW51ZVo3eFBtQnc5ejhlbjdISjBDenoxOWRuREdYRCtQcHhDY3NQL1k1TnZObC9vdUpDUGZOems3ZVBaY2Z5YnVNM2Q5Y3c3aEFCRnA2ZXhndzF5Lzd5dHl0TlNGaWRuKzJPemdSWFBCMkxRcS81bFpjYUxOenB5VnMrSU5kczllbTU4K1MwZnI1M2srbzlOWnVzRks3aG9zbXVzL1F5aU8yY0hHdWY1YXNqdGxkckJrcnYvTXVBa1hSbnlQQjZ2bitzL0tuMEdEVVBpMWMvMW54MFU0MXBTd2JNNWNueXRtQitOei9YVkFyTW0xT2RjL0kyNENLNjBjZW5QOTUxQkpYblBhWFArNUx0QzZXZm9lM3JHemcxK1lNeG9ybXgwc241TStUYmV0bVdPdjZCd3lHcEVzejVxenVOK01STkVIOHU3Mm5BaVYyQm82Y1lXYTBYbTNaaVczU3JTTUt5S3VKTk1WZXRFYUh1UXRadzBXVjY4UVovdnkyY0Z6NTJTRksxOEJnN0JlS2ZaRG41K1d2OEJ5dGI2V1UyWm4xdVF2a0F6M2dqU204N1g1cy9ObnhkMkN5L25sZVh1V1Fad2o4WjRlVjlyNXMvSzF2dkxNV1liekdld2FkZktjV1FZMThhVjhNalBMV0g0dTdmdWNlR1k1R1Q4emYwYWNuSnJQNUgzZk5qM0xRSDF1dnM0blo4ek95RVF3T2ZtOWJyT3RpZWhJSjNBQ1VyNUpiNnlsang0dWFJU3NWcExYQmZKREkyOEwxRVhTd0g0Y3V4QUFjTlBUeWkrTE8wV1YwK0VtMDV1a3ArV0hGMmtpUHNFZlVUcDZsa0NoM3NUVVpGeGJYT1VsNUpLV2ZKMHJQK2ZsNThYb0hudlloWjduNnNqek9oOTlYamI2OUR3UzEvem5wZU90UDYvemVKNzYrWGx6MmNmejhGdk5mNTZySTgvclBKNG5Kejh2WFV4Ni90VGpuK2ZxeVBNNmorZkp5YytMZkQ4OWYrYnh6M04xNUhtZHgvUGs1T2VONW9qbkR5TWl6cytBeXlNWjZEd3lJQ3RuSUNEU2lRc2c5WDc5ZVoyUEZzQzc0aE4rUU5uYjZzL3JmUFFEQ3B5WG5sOTUvUE5jSFhsZTU3VUdMTVovdkVjNHI3NjVyMGxWVW5ad09UVXlJRXkwYWpMd0t3ZDNQL3JVVS9mZ0lZSUdCKzY2Z0RNYWIzSGw0QWV4NTlTbGcrbVNpVmd1R2JuMFlMb0VPUVZyK3NpbFErblNPdE95VjVlYVhEb2NGSU9PRHBEOU9YeG5EWVpmdG8rcUdSS0YxRTBRYnllcXV0blZDQ3FXa3p2YXZMMjFod1RTUkhqL2Z4VXFMQ0FNaFFyTEdBZ1ZGaTVlRmJMRnhwQXRoa0tGQlFXRUNzc2FGNGRzc1Q1a2kxN0lGa09od2pMRzhVTEZ3YXRtbmlkeGdtK3BsVGQvMml6clp0N1QrcXZabVlXSnRZTEZyMXAvVjg2eTRPTEtQcHQzMkRQUE10SFdGazlXdmtWYU5saWhuNjR0RzZ0THZtUTJiL0pNck1SZVM3MlNucTRJSit5eTgxTm5XY1h5UlZxNXRhaVdTNnFuWksyZXAydHY1d3ZURkUzTCtJeWlaWHFoOW9Tc05kR0wxWEdyS3F2Y2NGV1ZDWFM0cWs3bnErdXI2bWxpemF4V1ZWWWxyNnBhMFgvY1ZmVlU0V1IrOUtxNjR2aFZGV1FyelQ1dlZWMWVYMVZSakN5OHFrN3p5UlpZVlpFbVRyNnFybUx0UEhiUC9VbG5OYksyUGs5cjY4a1cxUm1XMWFmLzZFWDE2U0h5NUgySkRiVkY5WlQ2b3JvQzJjZ0xkSjRmdjZpS1Nid1ViaEZSVHlqY0l2aGF1RVZRdFhDTGtDdmhGaGxYd2kweXJvUmJCRlFMdHdpNUZtNFJjaVhjSXVQK2FPRVc2Zm4vU3JoRkd2aGdyN2xjMHNDQkNqQ0RnRnZuT2toK3BqN094WFd3THRRM2RhNkROZUk2T0R1T3Nja0pTV25PQkxsRHZkQWtDWjFOM2cyaFJ4SlZ2Z0RUaXVndlUrUVI0c1hUeDdJMzIzSXBnczdpQS9pV0ZzdmxxTlZNM2xYSlgwc09WbVNDN0NHUVMzaFlZYmEwcUFJdHdYZ0pJU1ZYMGdCc0ZVZHJhWWRKd3hHK2VHeVlKajNZRVJyeGtQQXMrM0d1WWhnRXJJZDdlOWtuN1ErUGEvd1NlZmR6V2FiRzVLcExLdTRLeFVGU3BhQ00xSnRKWFNvdllQbHBWYW1QVGVIRXFLdWtEdmtCanBCNmluSWl0YlFDVTBoU3BTQzdudFRTY081aUh1RGo3dGRjeC9GK2pnK3BIZmVCbVZoUjJteUpTQTQzZkVraFFUNHJTMXlOcUJORUtVVzJ0RjFaQkhraFM0NHJYNjRQUkdTYTRXdUxSNEFIQlViVnJ4Vko2SDRjRlZTVktweTV2a2dpS0xWcGo0YXF6dWhNaE9YWFJFVTF5WGtWd2ZsMXRpb1FTeFJJQ1ByRGNscThTOTljSlRvNnRhWEFSYWxvWllYZUF4NWwyR1FFUzY4TTV0U0ZzNUVtY3ZtbTVhS1JVakVWcEtQRitmTDZuWWZReFZJU3BxQmlQN24wTW0zTlZsWTFPcldxellyNlUwZDVTb1VXVGFhbXpQQ0JaN09QeTUrVTUzSEtONlJMTDYyS2VZaXpyRHA3a0xNbDlVejNUekpNQlVucFpYOXR4M1R3dzRLWldQR3FkeVQzUTVsNkltMDgrMDJyU0xFWTFMelQvU1Byd3hFZUZTNG51NDRWUm45RVRSSSs2ZUVDU05mam15S0MyRlBxQWYweXJKRldySHdkbisrVWZrQm0rTW12ZDV0UDg2NUJTbTdtaVdaeG50MWhrbHY2bG1KVG9nUUkwbTNVR1p4Sm40RWtjdm5NYWl0M3pkQ3FKMlNrQ2Fway80RXdBZWR0UFlhVEFZLzlpKzZTcXRwbkpxOWRoVjRRcEJhTHpiclczWkluK0wyMWlmY1R2NStUWncrL2owaFM0UmQ1WTBxL2h5VnY4SXNrZzA1bVhldEJVV1R3K3lWcFFQaDlRRW9PZm0rVTZNSHZIVTI3ZlFOQnNOOTNDK0VHeDI4UWJ4SnkrRVZFRVFmWGNtT3VhUDd1YS9OVGR6Q3dPWng0Ylg3S0RpdzBCTU56K3VJZHpEUVRUbCt5QXlNUWZBblRyODJYN3NDeUF6YmZ0MHp1UUhMaGtGc1c3UkFKdW04WjI4RmNBL1pwMld2ejhSMUdLZ0Z4NHU0Vk8vcVFPM1JmdTRQcHhRL3RZTzdnWGZISWl2eVU5SWk5RGRqME85K3BIWDBHRTdkMGR5QVBjY2d0MHp0RURlODhLWms4RTNUbjAvUmFYc0M5eTNaQUdMakU5M1ozMEdDbm9kNDR6VmQ2Vk5icDJRNkVENnBFSGorajdKZ2x5bHFRSFhlNitsR0wzZzRhOVduNUdwOU03QUNPU0VWNWtOZGdncTJLcVR4NDBJMFNCWjNZSVM0eVNlM0xneWdEeHplbUQ2M3hrRHF3MWdLdE5Wd0ViN0p6K0ZiOFp1ZndEZm5GWDR1NHNwMGNZb01IOUl2TkFUNFpRTEwwZXYxQ2hDRFlrT1llVmxHMGRWQ2o2aGRmRmRabnhzRTU5Q2taYmMraHIvRTdlUTU5alFrQ3IxTXAyZTExbXVDRkNlWVVYVnJUbk5hbTdGTWxyZjZZWFdIZCs5WkU1MU5ITnd4S2c4VFB4TzBNNGFKOVlUN05IM203Y1o2dEUwZkpGbnMxNDBPbTNZcm8xbzJPVzFtTTdTdzJiV016c0JLcGYydStlcHVOT2lLZGlNeW1pdlBrcXNpUjhJZ3VuZ1lTZDIrWldZbE9sUC9rbUNzZ1REQk9IT3MySnpXKzErT2ZvZUV0dnRpMXBlSy9VZ2tuOTJBcExXWDAwWTljZVZqbjVVcHFlM1FZWEtUTFg4QmRUVjVjdWdPVG1iajBNMGp3L0tBUlFldlJTSWZETVVZZHV4d25EMkptaFRHWkQrUjdMTmFiY0ROT2wreG9iSmRqRkxJWHF1a29SWEtvMUtSc0RGWXF0L1BVWkxjZUEwOWt4MjRtbnBhYkNlcGtzSWI2eENWVERZNU5VZGZrQkcwbVhabWRCTGdadjJEMU9hMHBaOFhueThmbE1HTzgxUEtwcnRQT2xxTlcxQ2pSeE1TenFnN0ZwT2htWGREVHFvYXZTWEV2ajlGK1Z3NkpkczNzOHhsbFo3UEhNSHZBZkpFK2dOQmtaR0xuWGxOdzZ5ZmNTTWlQalo4ZEd1bUNsTlhlOVMzNTdpYVBOVE9xaE5Oa1FqMmUxWURJWGtXVTFMVVd5OXc2MjdReE1zaG1XZXc1REN5aFVkejQ1WWJNRGpnRjBSR3pPL3pPVlgwaG5YVzBScllxcWJaUmloT2h3cEczNUh2MGRuMjd6bGFybUlCV0puL1A4a1ZuOG50bWZLWFBkWDZyMk5QZm9nZmk5TEppelc4VmowWktvMWh6V1orY0pmdWRLVFREVGM5UXVvd1BmbFZMSjVnYWhpY1lGbjY4MmpBaVc4WGR0LzF4by9qNm11S1JoLzVFdnhsam56cGxoak53c0R6c0hQYjhMS3RPVDAxVm53b3p4MDlhSjViaWtUb2RWNDNxcEIxdXBUWUxwcWJXUzM5RVUzdVVoVkZCT1BMMXluRzlUQk85eWZlVytrQUIwVWtSMUxqY0FRQmJORzNZZWxMRmt4b3lQNmxwWDNCdUhIdGZzSkY3NUluTWhGYmU0MzNCaStQWSt3SUJnK1ZDcVkzQlpvN2hXK3MzZzI2N0sxUUxjeWRrMmh4Q0J5YWY5ZUNQNmtiTXBPenprb2Z1RWphdWVBSmtUdEIrZDR0N25YSTFmZ2hsaXFnanVzWHJheW5pZ084bXFtR0pOZDFnaWszQjFpSkZ3U0s3aVJQVktWUys4ZDNXaGdZeEF0d1ErOWwyZ1lIc0ZtOHlXWlg4aVVVSGNsU0lvVzB2YkJpc01GYWN0NDNKZHZzTEd3K3BrcWxxSXFYb3FXcGFUdHBpUXFyWFRvVGl5R0RpQ1dlOFpqZTZCVWhETHlHQ2NMTjFDVzBTOXpQdUl5ZEtqSkt1bnFrYkxwcTF5anpZcFZMbWVraThFWkJ5OENIQUpPaDlhRW5XTlg1YkV5bVYrYWJzekxTTDg3bXBZaW1oN1p6eUhvSnFCYXQ3VjV4dC9JVTZ2a3I1a0ZPSU9sKzErMGVkUXVqM0t1Vk9wL3l2WVlwYStVM3NhNG1pNytNSG9YQi9yK1RkbkxFcHQ0amlJMWFMVXJnM0VGWEFUMEJGQWh2S3JTcXBkTFo4Q0hjWnZGaWkwcXJqVnhESzlhZGJmTXljWDNJZHJ4Ni9GU2FUQTRMdnMwK05SNURpN0dxTVBFMXZYYTZQcThIUDJmTzU4K2ZsMUM1K2VGb2J3aDRUaUNtekpqRTQ1RHdUSDZiMXdzWjVkSCsvTlBpZnVvbUdvNXRrY08wWnBFdW5vNGdkRUQyS2lBRUZub21SRWNJM2ZjM0NONzFVdHFmSjMrK0dXOHNOSzBxUU9QYzNpN0hzTnlMK2tkVDEyVyt3UVFDRjhaVDhuZm1ENGxOb0RERnJzYVUydmo4ZTB5ZlZqR1pzU2VoRkVlRUVHdWlaWlV2NStTWXh4RXRHVUxUU1ZuYU5oUEo5U0gybG9aSW9ONHNyOURlTVlPWGh3ZUhobmNQREk4UER4NGFIUjRlSHg2cERBZGdPSTNucjl3Qy94VEVJTlJ5bGlsOFY2QkMvU1BqRi9tVXkvcElMNnpqQ1ZYRW41N3IvUWM2UjRJdkhsb1kvQUxCa2FNdGMraXdCR3FJdDJyS1lpK1ByRnkzS1FiOFY5MlkzYUhqSzhwMjlYQkpGY1hDcE9sazBSYlA0RjVuRUwwZkF1M1JMaWhGUXZrRTVqR1U3b21FYnYrdzJyK2NxQmd3RXJESnJOZWxvMXF0MkZxdis4MGt6MytsUG9tOCtXdmd5SCs0RmdFOEYvSUFWSmFtOHh4cVhGc2NJZGJlRkk1UFllYTYrMnVBV2x6WVZaN1MwVVNTOTUveXlPczUwZ1F6NXlpWkhDSDhValpjb2xZS3NVT1pUaE9tbjR5c1dDN0dxT0JXbnd4SkNvQkFxaURPMHA1UkhaM3NnWUlBOENCbzhuZDFzT2dhd1dtbVFSWFpxRS96L0lyTkQzQ0xsZ1c4UjJ3VzNBR0lpTzE4K0prS01FZ3VwU25NWkh1STRsK29uK2M5WUpLYVhwQmFBMEZocmYyQzlZdkZNdmVoMk4rOEtqYzIzOVVDblR3Z1VkUU15UmNRN01MeWNnajRyV1dDQzdsdmhXKy81NFFmLzVXTWZlZXkvSDZ6Q2NBcE83bmk1RHR4NS9QWEVWejU0NEo2dnpiNzFyeDY4K1RQVkZVR1lnN1Zmb1QyUGZ6STUwaTd3cEFDS0VRWlhnWE9QZnpJQmhoZDRVaUJGUFhQOEZTRWJEVjhEUG04N2laRGsySURsOStmUXYzS29LWWxxRlZna0xqZ29XODAvc2lRQ0JpMHJ0NkNBckFQU3JjNkZYTmM1K1FuUUdPR0xrOHYvUEw1NlI3cEw4UXdVeGE4OFZ3aUVkTTdtTDQ3UklEcTcwajlTMWh3aHZvY1U1YklNSmVmUWpoNU9wMFpFeHpsTTJuUWdrTDRSNW5paGxnWGJHT1RyZ1pNWFNLb0ViQXBBdjlBaklFQVgvdjdpZDE3d2d0eEs1T2hpYjE1NWZkcS9xbVRZbjBpT213R0UxRmVwbkRFZC9DLzV3YXBLUG5Ga0J3aUI5YVErbXRvNmViSFNTZXJsbFRydmxmM21hamtmNkFHcklzSXZHYXAydFJCaDFTS29vV2hvWHNFeW8xdEdhcEQ3OFZmcUFvMm9DSTliYmx1d2wxWTA5SXVvWTFJOUx0QWFBb2M2Q2dNTTZETHlCYTdUek5CQ2pvZk9uZUxLL1lFZGZ5MG9BWG9EQ2lveS9OQzVxM0tKT2wvRnA5OXdRWHIyUmdiOW1wRHBXN0tIN1BDSjdaT0o0U1BkY21MWVUwME1SZ3FUZWZKYUdZbVNFRFFQeVFkRitQM2hIVEdqREI5TXlINC9TQUFPOWFMQXJDY0hjTGwxbzlYV1o5Y2tJTkRzdlB3MDZ3eGZNM1EvSDNuTk1JeEY2UVZpL0wxOWtLdjRpd0s2cTVIS2dlVXZya0hyb2ViUkd0RUhOSFdJTDJCZVNUUVhEUXRZbFVSVDBMQ0FRL2FCa1FLU1YxbkE1SXpob0FDYWQ5SjMwaWRQY3d1ZnpDVlZhNVhCRndYL1Y4aUJ1ck04NHp0Y3EwdmZlRTBmS0dreDR5YWZrRlNGcXF3UjNpYlZvQ3FxQ1dTcUd0U0ttaVlxTkdFcXFnbXkzTEVpTW9NOEJleCtYc1VsVkwrTEZpNG5KenRicDZva1Z3ajdNMmgwcDlvd2hGMmJNaTRMTXdIYWF3VkQwRjYzcWtOVldpYVRZUjJxd3NZY0cyNzJJd1YwMDFSVHlMQ0FDWVplTDJBQ25CUGViOWpXWUxoZE9ybUd5RVJtNTZSVXBPcmxvKzJpQ1NYZUdrTzQvdFpBY2RkZUdyejJZVmVyWnpNYzI4NE9tL3JHOEJ0bHZINUE0OVhoSVk0R2ZWSUViMGpSVngzS0lSUE5tVXpXeU8yeVNzc2xOTVpTemQ5bVNQTXdKdUtMS3ZxK2lSdElHQ1dxR0hWRGl1R2d6S3F3L2xveDZrSDh5L2hBMVEwQ3BOV3oxQXlpTEtzZ0tSclU4bjJxRWpRbjZKSHFwWFNKT2kxRjNROHFocHp1SHNac1NpVW9IN2VUbFBrVDZHUkk3ZGNGYVFGZndOOVkvaVBwbTlzYnp3UVVFVWJBc1MxVEdDSDUwM0RWSVdJWWlsNitMb3U0UkZxT2RNMmhpRFMzbVpFQ2NnUkh0cUdIWTlXL0x1SVNhZUtaRm4zRWRJb0dsQVkvZ1NFV0ppRGdTY1dveFJzbjhVTk1KdklKZTBjcFBuazExVVZJbHFHRVVGSW1LQXRDV3lpTGxNZUU4b2hvdjR0U1ZQZHFNQWY5UmZUWW9VQ2tQQWg5VWN0alhIbEUzeTE1TGRLc0ZmVC94OU5jS0EvQ1l0VHlFTFdFMWkzTEc4SEFVUGIvWUgrb1pLWlNPbEFlblZvZTRtT292QzNtOFRHd0o2dWMwVW95QmxuMWEzY29QT1B3REg3YjJwbjB0QXcwdTRMYnNDMXVDY2FzbHRTMDVHTEkxdkxzdmJBWFQ0YnB3eE90M3U2ZTVlMWtpcklOS2ltczVINkw4cTB6NUk1ZkowRk42aXIwc3VmR01jdzNVbGZaVlpjQmZCdm1uZkhiZ0YwNDFpdktab3hOMmhSWU8yd2RLVWg0YnNSTjZGY2kvb3A5VHVLSGtXWmJhcm1ORFlZbjJsY1dlZjhBbk5QRjgzVTJlT0piaHc1OTg3UHYvY2FqNGxXUlBWNkpILzNRcmZmZWR1ZVhQdmdMUk9hV3RWOXBmL0czMTN6bld6K2MrOTRSYnNSaWY3RVcyczVWV0FMWVhyRk5Yend6YlFvNTZVajBZMndUR3BYQlEzL3h4VC82SDM5eXkxY0c4R2pzR3B3K04zajlXMisvL2ZwUGZ2MGQ3OTU5RlpZWWQ1YlIyd2dKTSs4MmliMk9WVmkvYmZxNDI2Q0RpU0IvOWR1V0hIY2JrNEZJem1JRGhaRWxhZzBRVmUyVDZoczF0UG9RNDI4emU5eEdqRFU1d1E2WmpXUTFVWHhPYlRITnZXOFA3L1A1RUdCdkdlODBia3ZkOVBTTHRSTm1HaHA4NXFHdmZPeTdmLzBIMzNyMkxtM0ZIZkozYXRDZDA5SEZ1R2MyNXh5bSt4SThYYWZpOERMQ2JDempjRW10THZNcU1scy9HYnpyL1ovNDFyVWYvWjAzUE5tNEVnZWJuK0NoN0NkNTZKU2Y0Q0dBdm9QbXJoUUNnSDM4VEtqVlpJYVNqbFhNVm1nQlpSYVkzaFdHMDB4SUdqT2VlMzB6RjJRUU5Uclk0b25MSUxqUDZwR1Vla0hJWE1yeklHOTN6dTNJR1hVMU9mOGNPYy9MYStWYy9WMVAvT1BYdnZ2MmYzcjdMYWVxbUNJaWpaeEtPbys4SGRZTHUrU0ozQUpTOEdGSGNINlQ4L3A1MlNVSE00U3ZtYTI5aXpYa1oxaERab2Z2VkZLdUpFMFpJbVJ3NkdiVWJvZkRhMGU4RFZMd1JleG5jVGNrZ2pQekdxQkNaL3liODMybzVTUGRNNXROaFdHRk96RGVtZ3dQcS8yUWNJWVhhRVN5YlNvb0x2NkRuRWpaTzhnYkRud3FjT0lIVEdRR2oxMzJQMzJFc1UyT0xGZzV4b2NlbzhORDFMWjFqMUVVei9ZWWxkTWFPbDV6T09pVkU0cWpDNmFCSkNJQ0tVNkZYNHcrQlI5REVxVnJTdnFVdHZRcFpJelJpazFZUENlc0MxRTRDYlNiSXQ1bTk3bjg1alplRlBlSTZGZ3NPaDNVUFBnQ215Y2JZZFd4ZWszeGdQYUhCeUhuYVozVk9JUWZvdEFOM0NXM3FjUFlqcE56Mmo2d09sTkNyL2grd200N3V3T2tLZ2k3TWtmY2k1czVpTElLQ3lUZXBDbXVzZ1dsNVJUSVY4QitQUzBqZWk5YkphcEQrZHE0TnNQR2RjcSt5YUVMN3ZEdzJLSjYyeDVWdzZuR3FiSjhOUjBkSmRCSGZMTXlzL0llU2xWVzZoaFU0MzZvY3VCMVdBNCtRNW53b0JNb1dkVU9hQkFsM0hHR3QrNDB6ckdLTDZQYTNoL1VBeDRaM09WN2huOVFteXNhc1d4NlNaTWZNcTNNWWxWQzRJQ3JtSzR4RXdUbXpaclV3S2tFVjMrcmVDaVJnVHhlbVduc2ttZzEzcmNqelVDYjFobU52MjVwQWhkUVRhU0xpamc5dlFGdkM0V0x0WkN0aDJXaTlmTEdDWmpXWUQzWlB5bHg0TkZ4bUpkUzNPOEZyRmZ3STh0T2RYWWNyNU9kYWtGYmxtTjZKMXNXZHFvRmJWbk1rWlV0QzJGQ3RpekFhNHFSVGxkOW5hd09kQ3BiZHNUMGpybmlpRmRyazFHZ1g5K2ViUEE4ZjZCbkl3dThvcHI5RWxPN1VMeUc4TUtQYkxPSGpVYnhmUG1vSTU5eXBlSTJqNWQyYXR6bWlEN3p1YzJqbk5hVHBvY1UyM2ZJYlc0cjFvZDdjSnZiQkFPM09jRUREc3NFazdqTkdROFZ0N25FdHNpbVUrTTJadzRMYm5NS0JEZ1pIbk1hbWNBa3psQTJHbGk0T0M3MkdEblZLVzZLdTV2Wkg4a28xY3ArVVRZbnJtbWkwMHlaZU5IYmtST1U1Uzcra0JHZE5nQnBJZjF4TDR4WklBZUZZOEtZMVFyN0MyaEFxNklKeWxOWitFQURHcmRGM0o2aDFjOXpIa2E0WVpyc0x6ZWdHcUxFSFZVWkE1YUcxdEIwS0lQSU1BTXA3cXV6WTdLeEYvdUl1VnltRUFWWUxWNUxlYjFUM2xiRlpmWUxEVU9VbncvSGV4QjhqM0pjdkNjQ0xLZ2U4KzFURkV0NEwreU5Hc0ZpZzJsaWREeVA5dmhkVmVkazVxYzdoWHhqSk55aFgzcitBZld5WVR5U212VkpWUEdUUDlERzJNRkk5b3lWd1VqRXZ4S0R6SUZEWHF4QjlrdHh2RW1EN0h3VDBKZUR6T25uYXBDOUlvNDNhcEJkbE9qWVFaSTVKTkFGV3JYZ3VEZXhGMFF5TWpJNWV2ZmdpZnVPdmFQa2Jrc2MvNE8vZmZLNnI5N3ppWCs2MXc1V0JKMGc2VDJIbi9qS2ZZblJ6VkhtU2Z2QzdPLy8vWk1QdmVYMVgwaVB3amd4K082M0h6LzJnVVQwcGpTc2hZTmJqbjd4OGR1L2MvZW56azN4OGtuNjlKOS8rSU9IRS8xYmlqY1BreHhqZ1FoVC9tVUhkZHVnZDkzc1lOL3ZmZit0VDMzdWliM2ZhaUFlM0FDS1JTdUhneTQ0VnE4NHJhbktRR3l0UjB4WUxGWittMlAxMmZ4bjgyb0p2VFROZW9mVGtMVmY5Z3ZIRWN0NGJWdnhsc1JDTDhaM1gxaG44cTM2QzhRWnBEMDNXaVcrNksvZGxyMDVncWZJTGRXaW5BTkJhRHQxUkQ2TXlmNzNsTm51NVNQaDNJQm5Oeko1QUR2T1Raa3I1bFByL1hyT1ZjdXpNbEZGWkpxUGo1WUNKekM5d1J4TUpKVEkwaDQ0OFVXeEp1bWpwcWZZU3U3bVJRNUJyZERpRldxVTcrdVVQYldVQjUxQ3NPMHFSY051WEhqV0t1V29VMUlnZktkb01GYkI4bE93OHZaUnJQaUFIUjEwSVYwNXdpazR3WTVEYmNzaFJDMEx6TGdFZUtaTmgyUHdDT1pKeTBRNEcvbEtPT3BPQk9TSjRhbkFPNG9WbzIxTEdTeEkvSFVwL2tLS0VPUk1vV3Rpa2p1bnBVK3ZFWGxVZDhwZUdDT1Iwckl6TXR2U1dQQy91cVg5Z1J4YlIzTTRJeVY2VGs4OXArdzJPTVlQdTQxVFhMc0FDdjBZM1NZaFJ4cVRkM2RibmQwZEU1TWtpakxUNk9PSkwxVEpGWUdKT3FjbDBMdE5kTUJxMUhuRitXMjVoSERvTUk0Rmw1UUVUV0R4MG1HbEZPbEZ5a05VWHo3MEFOSEdRUCtVZ2t3WWxHWGFsaVp1c29xRFRKdExId1dObEFtb0FpREdUSGNGaTRhY3dsaHA5QUdBbDJqWkNzaEFhUTdNdnFhbFJZNWU0dXFTRmtCdVdMNWVFaG5HTGZLdWtwUk05WFNmakJ2ajRUQUVYUXFMbW1oQ1IzeURERllVTzVrdkh1Tml6Yy9IQ0VRUm1QbmludmJJeFNQcElsK1F2L3RHTHo2V0xqSUppVEp0ZUZFK1FqQy9pQU1OSklCWjBJanJvOThETFVGbWNjVnB5WUR1MHZpK0cwWUxiUFNqU29ONWRPU1ZobGVxSkJDb2pWd3dmbEtsSUFMc3FQTlR1Z0RWWm0ra2dFSmdTa2VaZlZqemd4bmk0bEFBaXpZOFllWmFDRXJtUUJvSUtQaUVwMDN4aXlWV09YL0ljUGR5ZGxBSEtpV21WWG1PbWFYUmwvd1J6ZXNuMHF6MGRuMW5pMnZ1RHBHWFhCMkR6bEplNWhtUmJJS0ZqN3h4ZWxRWGJlTlU1VVJST1NvdDNNUWFRREc0b1BLVGFJOUlsekhJRE4yaDlNS3FxZFV3NjYrVWVycFR0Wm5TTnBJbXZWUTliUk5wdE5OSTJ2bWtJU1ZWeldxbEIya1hlVkYraXpDRThxV1UxOWQ0YXp6RkJKZ29IVHlZcnVvT0hnUTVBK3BaT204d2xQT0lmMVozOEZpdTlUbzVnV1FLdFNnbkVNbW5yWXplS0lBNTA4MVhkYVFZa0JPUmlKQnBNcHdBeFNON2VaVlBzZE1Pd3Z6Mk1Kd0hKcks3MXpDOGxBM1BlbmJNUGloMGpsNWloOHFValdKWU5iUHpxa2lDK1VnZ1FWMk5RSUprTUl6N3g4dmlqbHJxU1FJSjFxSVRWb0VFRloveXVBeXhzcDRra0tDRWJKYlI3Q2JZWCtNWnNHNmN1SjZ5dTk2UVhHRGNrSnFVRThDZm9hdkthd09WYm1GSWpqTnlVWHBzajNpYTJhZFYzYjBtUy9rUy9peGxGSXczT3VXUldzcGJuUEtOWVVwRTRiUjI0bUM0Wm53dVhmeUI0R3RzdzNuUEE5SGNPWGF2QTNMMkduNkFHMHo2eWllSTVsWlVtdXhtWTlDR24xb1NzVzlnUDV0WFBncFRpY1ZGWDRxNXNpUFIxMEJTQ2dRY0xMWjZ4bUxTaldvSnJnQkxlVW9ZdWpIazVTK3JzMlpqRnRDM3BCQ2crMjE2cmx3Wmt2UEZnWW1rWjdtNjJ4cUxSZTFJTEdvUmxRaFdudEZGcEZ6aHlyWGtUdmVpdHFjYXRtTHFaWnhwMm9oWnAxcjd2REw4WkV2ZnlNdnM1OFFzSjIySXBpeTlsTTdvQW9pV2N2NHlKdVpBUlFEVXZlTHlXV0FaUTQxZUxtTzZiMlFaQS9IaWhXVmtWVEJtZm1TTnE3dXIvdlRYT0swU1d1Tk90SHhwMlpLaTBxWHhmZGVQRnRqT0FiSEdUWTI4OHFlMHZxbUFXdCtrMGlpWE1RV1dMSmN4MDExcUdSdXVXellzSlBMVG5yK2V2cXBXSDZsRjRudXlsRmdjZE0reGtjMUxrWmFUOUlHc3dvbitadVhiY0ptYXYwS05MYlE2ZGNyVnFWZXRUUFNSNDFhbWRhd2tXRTFHVnB5ZmNMVUtSYjFYcStIS2RNUXIwNk5qemE0eGpheExzYWRrYTlidmF2cVhhRXNyc1o0ZzFET0pMb3JFMkVqSEpFTzROdGFUOEpOeTBEdlVJR2s5cWEwb3pzaFpDcGp2RlNWZVkyVkF5dWdHSnJ5R1Z4UmhCVkZiT0JTV21KdTlHMVVvVjY4b0RoY1o4N3hmSjR5K0hTWEtWSEVlejNUTEZVV1o4ZDZnSVk0VnhabmljSkF5aElMcHVBd1YycjFLcldVWTFlZDlQYTBnQ2xTbUNuT1lRbXpHT2pFK2dEZ0VrNnozcUtCakVYWndhZEhTQXFwWnhqajFRemNYK3lZSGFNUzBhU1p5aFNHV1RsNjdJdmErbWNMME9lNlZ3b2w0OCtBZEUwNVM5cWhnaHVVQUdpSDdtM2JrSTFFMnJBcVVmVmJCMUNhOFNGRml6aHlJeSsydkNUMkZzalhlY2JzU1VqeGJ4UnBSUE50SHBBWWsxZzg3TUsrRVVYbjE1RlJQZlJiZU5hbXMzUlFvZ0p2VkY5MnZsUmJWN25uKzZDeE94UDFNRjdFVjZ0L20xUW8zS1VWTzNCZzRldmt1ZTdtdmhJVDRBcWJVRW1WU0ZReFhIcis0T2hrQ1hKRldEVU0reWFlVExuN3RNdmpTdW1WTWpoTUxYNVhuTElLVlBHY1hFcjdPTFlVdkllMjFlWmZWNzJWOVIrUVdHTm51SE9LY0ZhdDBjWHIyczQ3VzY5V2drNWt3L2ZzT0t2NjJTaVByb0xVU1V5cDlMSjZxVGhFZGE1bmlnRWZGRjJvcG1wbkdpcS9VVXNUUk1GWThPa3hoeVczc3djR1lzRGs2L0N5SEhwWmlnRHVyOFNCZFNKR014b281Ky9pRmFUeUs5R2FuVUxBcVJaRjhYUGl5MkFwSWlTN0J6cE92MnRDNFduV1QvdHJsR0M3MVRxR3NROTljcDRUZHYvSyszT1RWd2lISEVZR0hWdU04K3gySHV4WUpOUHVRZSszTFdCeStMMEpsV2RBVkpYcEVGSWIyL3hEODBkNWJpNldZV0lvVEZpbmtJU0tYcDkrN0hYYnBabkdIZzhJbzlVQnpxUUxTaEFxbTR5aGNIem5aTFhMNEtiNTUyOGx1a1hLbitOMlQzV0k5K1NGNm9xYmJDUW1oVTlVdWVxcmFXUlBnclR4S0ZtNFpDcVVPajFOcElzdWo4azdRSUhFblRzY0VNWUJJVDZZdkRRVDVkUGFDWFZ1V25idGIvU1V2RVhtMlZTbFl5eUhmdGsxUWpxc1BpaEZOdG5pSE1RQmJJNjR6TTNNb2RnL1c5NldMQkZ5MzhuR2NyT1Q0Z3JPV0EweGxtaU84VmRCbE1XNHpqOW4xcTVtOVR3UHVyVnIxK01OdGx1RmEyYjhQaEhDeGw1WDdWM01YV3hQY0lTdmhPZGpMd1U0bUk5Y0QzQWg1S1hndE5jcWU2ZFZUZGNnK3FrMEZLcFNMKzhzR0cvY2hMR21LNDN3VEJ1VTZBU1d6RU5pUHdUZ3dEN0Z5TGh1OGtHQVg5UnNPeGcwZDMzQStONXc3NzRZNzR3YVlOMDhSOCtiSU5Wd1pQTWVqZ2pvQVAzcDJpandMc2lmTk8wNVZueG10SXdKeE4wdDJOVlBkNEw1cnZuTDE1Ny93dHY5OXoyN0JpY1NtdlF6a3gwMjRwKzNlSWRXNTRHQzdmMlViN3l4ZjlWVGpGZHV0SHViT2Q5M3c1ai84eEo4L2ZNdlhHdUE0dDIyUForckpyOFNVd2VUdVVQdURHKzc5dTROLzg5aWZQZjRmWDdtTmdGT3JhUnk5bElQbHZqNjdpeHdiY010MnN5ZGJxL3NyemRqWkhYejY0UHVlL05ZN1AvWGxQMGczci9MTFliM1lCUllJMWkwaC9KYmx1aHZGRlJaaTMwVGRSY2VpbTA2RnhXSVZRSmRsQXZLQURJdDdzMUN5cnhKcnlQSmRjSGVkQ3NabW1RQkNJRnAxdzZyVUd5WTlpSGE0QzB4Uk1KZHUrelQ5UXRZMTZmMmkzMHRsbDQ1Q1hlVWZEYVhENnZqVE9XeDF6WmV3VjZialkwdFFtby8xRnF2OUpJL0cyK2gzZXdTTGdRbmQvZTZRWktYY3d1UmlyVE9MTFEwdzJiTzhLdW9lRXlMaDRCVkJOVUx5K1p6MVk0SlJVSjA3eEhtYStKU2dSN01OQk5JR0FhOUx4Zy9GcmVoUEpsSW9McDg3T0t2QlN1bEp0bkV2Ykd3U2V5Unpxekd0WURUTVBtQXVvNWd5VzVvd2JaT3MzTUROOHZsR1l1bWxhSU5hcnQ2b0lKVE1TWnVZSTVndmQrZU84dmQ2ellUdGNnN0RxUzNOWWRWVStiQW11UlBjb1BXd2VPSWtOL1JVSlNGTjBsclZNOEJ1YU9uc2hXbS9NblRLcnMraFBNbTVVMGY0akt0Rkl1TDRHWTFjenVRNld5WUorNnpHSmxrblJYY2I3SytFM3laZ2FoenhIYUQrMEV3SXVRY2NCK0wya0dEVTAwVHk2bURDN1dXdkZtdFBqKyszRnNuQ2JidU9oZ3VsaVUybzBjYWhTeEV4a1lQcmUrTXRzNlpPMkcveDBEcFo0OUZMU3pxTGE5a2Z4d1ZId1ZRa1dLeUorQ3pGbnRwcWxtYWlaQTJ6MFpBNXdGRzlFcUxCQ3llQ0p2dkJSTmNxc3FWNXJBR094Nk90OW8zalpWUkt3YUQ1emhHS3BKU0NRUFd2YS8ySFBxN1hyNG5qaS91NGFiK0tteVJuSkRISUYxNGhVZW5TT0w1SVl0QWw1c0lrYXUxMkJvcElIWm0yWDhhclpWZy8vUUtUZVNwTXlXM0VrcWZSZHQ1MmxmZ3NHZWpkT09LcHZIdXBIbnlxZlVFOHh2MmRuUy8za3owSkljUHUyN01nNUtnblRKMlhBbTFvU3F2QlVMY1B1UXYxUzNZLzkrSDVmWHpVMlZRUzd0UUtlVVRzN1BuK3FJS3B3d1JiUG82TE9kdHJQL05pZTZ2N2NGTWZsM1oybU82c2ZKUzRGenNCRzJyZmNLNDkzSDI0c1k4YlBBS2VrUXEraWUyT3kvVU4vVktPSXlLSTRxVjI5Y0o1bldaenIrOEpmU3BKbjF5SUx1em5aVzlpWVRXZkJlYUpWTVRIOVV1UmpvcE55eU9FNXFtZVhjY3V3WEY1ejkzcWNMU2J0SnpqaGFiZDFFdndjMWIzbHRuWS9OVzRwL1BJV3R6Y0hmeVJJUUZUZ0pKeXVidVBiUlBiL3FXRXVCVmk0Vkk3czJ1QXlKVENueldpUXhROWhGZ1JwWGlhU1RHSVk0L0VIV2NLSEFKN3ExazQyU3VZQjVYN2ZJUG93a1dEb3FENGZOMFlRdm9zVWdqL1VPT1FBUllIaUk5eFVETzdrcjFvTnZnUmppNXBNbnNTWHpWR2FNM3lRRGJXSzJneCt1dk9hTWpMWWtaSUNxbGVHaVVFYlJIeVdLUGtwdkhtWW9sbkVDc0x4Y0QvM25JS0U3Q2FBU3BaMHFFK1Ntc3dFRVhDV3dxaXVNZzRRUEEvQmdKR2FHbHZWYmFuUEt6WDdMZVZqVU5TbWZKVVhveCtSTnM1L2t6QTNTdXVqdUh6ck4yMTUvMDBCM0x0ajAxMmNYZUVrQzFhekZIRjBYdkFIT2lQZWNqUWRjUTAwcjQwNGdFVmo4Y2xlbGxuVS9aQlBOL04zTkVoZDRpQlpRRWQzeWxYUHQwaWxXQ0UxZ2xuZEd1bFJVaU9zejNRSE9uMXMzKzA1WklJT3dLVTBOOENYeDBZdy9KZGVjY0VEYnhGbVJ2UkZrZ3hXbEtnbUZWYnNrZGtQK054NTFMR3NoUWd2NVA5bStBVVVmMVRGaEZYaWdJYlp1YjdFVXVsME54YW5MNk5uaTlLYWZSU0Rzc01PN0tzZ0dhZmN6T2JTenBvMnU0Q1UvYTZTM09DVlk0VHJGaXUzNmFoWm5iaEpYMVpGZnVMNWFvL0RvRjJ2bmkxdXBGTWwvd0FqZFF5aWlVdlN1cXFCblp2NFhxcVlpZXFKMHU0OXEvRnJYeEh4eFlyN2lpUEVweTErc1Q2ZFlRanZjbkNQdnc4UUpmbWZmYXRGbG9hR1VRcm9SWXA2QzlOdjBCMEV0Z2d5Z0REempGZWYyZVpaai8xS0cyQmlNTkFjV2VQc2dxeVl5TGRXNlEyc3BMSFBObGJoU0FVNWsvOENmcVJGWEtKaWFpTFhkc0UzbGMwVXZudjhhMG96N2ErQWxoWmF6R21SMDJXemJoSTdydzFWejlFWlJCNHlrU2pUK0ZyUmU2dXNHcHMvc2xEK1NtNGE0ZGIwTU9CWVpSR1VNR3lpMVhiOE1NbE0zd250NGxnSXNrN1NWc0NyNE5VYzdCdnlxNHdzVFBDbVRKdlhLN05oblQ4VmRCbnY4a2xkK0I0VmNYdktiTmlFbFZGblZXNU90ZWZod2hqbTRhVjJZdk5QR05GaFpvb0txK2MxU2hvZzJncWp6b2FaclBWbUxVMkVWbEVqWnViSEZQVDJBcXNPT2xWMC9BS1JiaUtObEdQKy9IYVJOQUdOVWVQaUxUUkhCUGVleVdjcHlxcHQ2ZFc0U1hNLy9XRzBDUXkwZ2J6SDZvM2hTUHdtbmJkWFVaamhZTW9RdWtsSHJxZXN0Yk93bkh1cmNwaUNNVXowZjd1UXJVSHkvYWZmSGlzT2ExWkhRRTMvTDgyeWxIWnJQbG02ZEIwSVhhUUJERFhqcFlHbFUySnRwd3FIdjgyU3c5K2lZbWczbVNPck1hNHJBemVJSXBycVdRZHJ2ZE1NM283aHExOWFXVFBjd3hjNG92MGlUU2Y2TnNGMTFZdkNsWjNLZTR1a0YrTWNUZEl5ZUR2SGZiTXdYcTNGQnNNUFpwSUVmTFJhU0RzaFZJVmRvRmR5RXJVV3RLMjRqQ2JIbDh3Q0pzVHRIN0JJOS92Z0pLSWtta3VkSlRwVlo1RStlRFNoN0lDNmgxaWs2LzZWOUtleG1jbGlKc1dvL0h5TG8yYjRmZWdQSEpkbnlpdXZtWnY3MUk5RWdQMWdxQlVaMU9oVmFBQkZ4R2JVN1pQdW0zck5sYmRqdmNGWENETzNnN080OEwyWWc4SFYwZ3pKZmsvUlpkVyt5RERPQlMwbWIwWktWWDVYQXRzZXhRdjZHcXNKZ1RUSkZxVmVKcVI2NmpMYmdRc01heU4va28rSjRyMlpsSDg2M2l0WHVPdjROanBEcGFQOXZNUGJXK21xWTNYc09pQkdFSTA1d2lxdkM3bzA5RlJtZUhGdWlKSGFuZExUZlliMlp1a3RxZ0NxbGVkU2VaRlJUSnBFQkxCd2RLMWhscTNSWDRxc1hCR2Z1UGFSQkVqaW5NUUtGcG82Y3RMSmovWkNjYWdBNERDQXFuc1lJZUhyeTBodjFwclNtQXMwbk41aUZ4Znc4aHVEUGp4ZWxtS0hXc1NQTE9oc1BiRXVQT2FlMmtjRUxsbUw0dnRqZ0tFOUtjQ3hodjhzYmoxOEZLamZrV2JBU1FQMkxIaHdPQ0ZtWnlFTWU0R2N0bEVJc284NWVaYkl5K3BpL0NOVGE4VFV2amZDWGQ4VkRZbnh3YVRxVk1SNGlxSUxrbHlOR3p5QUpaZ1lZamYyaGFNR0lBemtpN0huNUZ5Q0NOcU9xWVM2QkVvaDZJNDZ6WEMzUjBvaXk3VUNaSnB1TFE3K0pNSmFOMGFvdW1yQWE0N0tyRnltd2prdENaZ3FYand4WGNDQnRnS2tUdzhSSWRlYS9qSHhKVXBRSnBxSlpwbDVOVjRNK2p2OHBFYmhvZlhqenlOZmRWUDd4TUhTak1hVUZ6UFZjUVErSHRMSGdCOVFmZ0lnR1FMeERSNTkxaHozSWFmM3Y4dnhrazU4OVFaSnpIcFZJeVQxSkJPTzJTY0hGK0ljUktFbXZmZHh3S3lHV3B3MG5UdGFDME5sSnIyM01Wand6VHB2NDhBbGhQaXJMaS9KRGtVaFNVaWpVRzF3Y3BZWTFNc1VXbkJwampFeFZVY2g4N3JhT1NWY2lFUDRZQkw5a2RaUUpKbkVqbHdrdnlUN0x1MFJ3YWdKL1c0WUFuRXBDU0xEMUdRMnVkMVhLYnFBYi92TC9VQVZERnhjK0FFRk5BbnFkczVHL0kwM3N6WmtLZnhRWUV5aG5TSUNwSTVwTHNVMm1Da2ZpSlNGVFVzeHdkVlY4WHFCSU1yVWs0WmZkclpMenQ4NTBrb0VNR3QxaWdRMjBFRWMwSWVSQWt0WmpJeWZtQmpxZEpBQVRKUG93SHdnZDc3SGdGcUt1UUFxM29kQjVkQ05WckVLdE9PaDZRQnR6ZHZ1YWRDekpPYWhtVFhsNjFlS2JJUE83eDB4YXdlVm4xUnNUdXN0bEVCVWxPUklFb0RvZEhzSHVkTXVhQTd0V2JKem1zeWFURlpMR1RYOTBYME9BNXhQZCt1NzR2WTlVV3hjSnhkM3hmUk16a0c5WHk3dmk4S2ZiaVFYWjlFMi9VZFh4c2pKTCsyNnpzS3VYelB3aDArQ0NybTIvVjljU0c3dmk4c1pOZjNoWVhzK3I2d2tGM2ZqcFpoekxldjdJbnQrdllGdFpPejdQcXk0dHM3Tmp5aHBhdHppdTM2OFNuTkJsWFo5elhqK2dQNVkrdjZjZkN6SDh1dVg2SE9CQk13Y0NuWjlkdER1NzRZeFczWGJ3L3Q5WEt0dFYxL05DM3MrcU5wWWRldjB2eDFSdTM2ZUNiYnJuL3ZXTFBwRU56eTdaUldkNVJBTURhS2k4Y0lKdE1aczF6K0Rlblp3cVZEYzY2VWYxcGFnSXEzaWpzZXVOZDBTZG9YV2hrZk1hVmk2R1I3V3VKSk8za09iL3hST1NBOWllKzh4VndEUjF6Skt5aFZRMlRNcEtDN0grRFFrVkJiZzNia2ZPait5Smt3VDVvK2pudUJZNDI1TE42RWE2YlIwVHFPRUhySzE2TVVPSGtGYmsydk9XRUZhUHV5QWdxZFhWV0FNSDZtT0JTMEM1T0dUcHlETmdjNldSTlhvdEpyNDhyWktrRlYwK0lIdzhQSGgwM3hkOFBVV2dNOU1teWc3Z2JhZzR6dVU4bFZWMjdCU0xSQUExRUYrUXJvOEd5T3JxaGE2RElmaVVudmtxcjlvaVdYYzNTeGp4UStUTTNQVkUwemVGdDdzb1o4L042VE42U2VSNTZrQzMrMUUxMzRFRnVjbjdxRVltZWhDRjhHNVdLWVRteVozc2ptb1BRUlFrSnc0SXd2aE5uYjZ3K0xCbjgvVzB1QjVvMi84Qy9WaFkxL2JWc2pGMEhMc0JJTEw1YmhxVnU2SlZreno5KzdLdG8yUklmSXA1WUNMWjdlTlV4UnpoOFZTWnROQ25yQldZMER3ZzQrSUJLaW1nK1RJaEtMT016Q0Y5SjRaRmF0OThMdytJVlZpakQ2TGxSZEN0Z0hSaDhIbUZSK3lSQ0FHc0xqeVRXek5DYVlZVHQ3U1VLYXltL0lJc0VRY0NnbkdXTW1ERGpjRDY5Y0JUaEV4aDBGSENJSGpnSU9rWGNyRElMUXZualZIQzlBZ0R6RTlHcko0VmI5MGkzYytFTmQ3MUIrZ0FlYXZuVU5rZXAydDIwT0FmZ1U4b000bTJQL0NMUkJkS2JXK01ucGJYQ2pJbGROUmVCLzZ2WVFibDV4RFpKY1UzbWFadlhCU0k0bFNSOSt4SmVQdW83Njhrbm1sVWJ3T0c4K1VKUXNIZkwwek42UnVDY2thRlFQMG4xRkcxbWR5d3NvN0dNcFh2aFpqZCtIb284MVBXOC92M2s5RkgwSy9NcmhPem4weW41VzQ5M2NBRm1FM29nTlNWRXVHcmNUaVZTWDNqR0dGb3J6OXlpc0lyODNqWUZWOGtPZndqelRnR0x4MlZJUmJXZzR6TUNHaHF3QTVLYnQ5ZmlHQnV0VWNjeThlTUtCbEVVODZoVGhRTW9VNk9MbCtUWk1VVkhBZ1J5eEk1K1k0N016dE8rOW5uMjhZLzNiZ2E5ZDNFaUhRRE9GbTVaSlhKeDJhNlFoMzd2Nlo3VGVPU1pDRThRTnV5d3lFY2Ezb253Nm91eG9ldFAzbFRhR1hoVWZUUUhQSlhtODBkbCtpZUhYTHQ0cFNkbTlmdDRmQ1JYaUdGY09wUlhRbjAwZk5XNndVMlpKR1o3MHEySW1NUzdwdmFlM3NwQmhiMGhvRU1NeDZnNWRhL3Q0V1o0Wngza0F2dTNuVW5mb1dxTlo3ZXc0WGlVcjFQcVkxbkRyUmpXTU5wRi84alBDMEEyb3JzUXBDWUlndUU2SlUxTGtRa1cxczJtM1BiTW8zS01pOUcyQzNaQXFhQ3U4d3RDbkp2dXhZdVlMYUJNRUVOUnZTdFpBUzhlRzNOaElQRm5hZ05GNjJBYXN6SmZvOHZVeU1pOTRHUXBudEZ6Rkg1endCanNaaUY1UVlCZVFJMkpiRGxMbkpXckZNbW03a1ZuR1Rtb1M4WkdON3V4R3NhQ0g3Y3ZlNEdtYXNhVllUdVhWdWQzRks3dCtza3hYeHZwa3VhNk05Y215WFJycmFmaE12bDhOakhGb1hsTmJtajdSaHZ2TVVRVFBhbHd2R1J4WWk5MjQxT3psSWlUVWtEN0ZtN3l2R0pkUGI0SmdCUnhHY0VJeGtzUW9RdnNnYUt2OHBvWnBRRmthZDZJbHVDSzhBZjJXMUdIcDdHR2dmYS82UXFyQ2VQRWhMWVhWbVVCY3NxMzdUSlpxT1dFSkgzUEZoc2JiZGJpSUpIVW9mWGE2bWd6QkxLTitnd0JjZm1GL1NXWEdyUUc0ZUVacWJiazFvYi9DNWlhYldHS28vdUlKc0ZnVnpPcEVZQzBMSVNlRGFsWDk3MTBudVVINzE0Qm9WNU00cUJGdERCMUx0MHJTVGtOQ1N6V055OHN6WXRxVzU5S0lEQ2RzZVlWR0JOeDBMdjlyVTVQNHlOTXhHcTlOWW9JTnAyN3dXUnJSWnAweGpZNTVsaEQ5OSs3ZEsrZHlEakh5c21YUUh4eXIyV1NVVjlJcUU2eW1yMDZlc2EzczE0WEJiR0Vyb0wyZGhqb1ZMenFDVWJkYnV6RVVoZzBHZ3dGMGszd3dxU2k5RUlQbFlaa2svcGhQVnI1eXVpVXRFd3Bnb2pYa0szOE5FcGxpdDdnZ3hHTHBmSXQ5QWtKcFowSlI3SlNyQXFERDM1WTlYVjNmanR4SG1jR3VWMjMvRDNYbkFxekhlWmYzNzNhdTM1RzBzbVZMdHBUbzA2bkJNclhCQVNjMnRzSFpNOFNKa3dFTVliaDBZQ1l6RFlXUlRKc2pDY2VkMnBZY0NWc3VNRkVIMHZFd0thZzBnd08xaVVPNEdDWU5haFBBU2QwUVFnQ0hjWWlTT0xFVERGR2JGSlNyKy95ZS8vL2QzZStjWThjSlNVdkhZNTI5ZlB2dXU3dnZ2dnUvUFAvbmtZMGlDaVAvTW9KVzZyY2pXQXJwbEEycVBpekFONVVtbGtYRlo4cWlBamNGRHdlakFvTkxkT3JNVUw0TEtJTE1DejRDRnhKS09UQkl3Vy9wZ2dwMG9wWXZNSVJNUVh0SjgwNnJGdzhtRjRBZDI3NE9Ob1podngzVTJQbnJBR1BDMUdtcjhHTFMrVjJ6aTVGa29OaE9Mc1kyMWdDNEdIT2J1OHQ3WXg1eVBsSmZaMUdzdHhqSURDRFMyMlVDZloxU1JvUmI5TVpiR0pleVFlYmxJM3VUUkY3dkZzOVgrZ3FKT3JCNXFGRHBaOFg2TTltc0VJbG1kTkZvUlZyenhPWklsVVF3ZVlLQXkySjk5cmZVeTUvQnFWMnM3L250V0phRWRQMGcyNDNEcXgrSlJheDBvUWVrV1E0b1Q1eEo5WVA4WGp2a05hdnpaQ1lXMlVWYzJoVDNSQVgxejB6MXd5OFlIRWNCUk9hc3hzaFd0aXhMYk9CbmhEbmszVHkrR1pJcS9YZk9TM2FhK0gzclMzWWF3Q1MrQmxrc0lDWVZ0MUI4WEJocXd2NjYxRUJCSXMycmF6dDVmZ1IzVHA4TDJrRU5udGdzSUFtNDlwOFRUcHIzV093cyt0bHpJOFhzdkhkOWNuUGNBRWVQZEZXYTd2ZFhyd0dZSVhrSER1UjZOdVB3eDJrRUpsQTNDSFhxR1dYNndhMlFpNjZQWE13K2Q4WG5VbGYyYkl2eEtROUhIVjdpd1FnZXdjdTNxTm5tSmdNejNNMG82enl2VzlaSkpRbGpDQ0lDYTdQeFhUOHZaQUp0L1c0RFczWVQyRSsvUERRczlNODJONng3SlRrV21qYUprWjRzSUhtdW1rUDFHbTRtY0NYSW5RNWpTM1czVWhnNmNyOE8zRVJjUVZla2R2Y252WDlKWjJPZFh4UWdzUHJFeGZrbTl1dDcyc1dUelNKL2psK3N2M3BQajF6TVJ4TDhPRGRMTjhuSlBaMWVKbm1yOWpDRGdjNWNCS0pkN05yNnhGRCtWVC9DR0VQY1J4TjAzblhaYkJyMmhwUG9yM2p2NktTNVpvcVowOXV6S2ZwNTl1dWJ6ajNTTEpvNjVPdmo3M3YwTjhPc3AzTlI5dVVUdWFnTTRLbGNGTmpzSVMzV0R5eGozWjcrK24zMWx1cUgvZWcxckhnVFk0dlFrVGlEdzhtbUhNcm5NcFNGQlZCRVN6T3Y4Q3F5eWtUU1lGaUozbWU0aFowVVZ6NEV3SUFDWU55Z3ZGa2E5QnIvaXg2MU02YlcxenZ5VXFPbmpvMzJrOGZkckdHbHpadWpwWDc5eG91bGd3NlVjVDhFd293RzM4b290bXIySGo1WUQzNmlzMWYzb2dsa0tWcjhub3NWZVhvUGo2OEpVV25ySTJ4OVpPM1cwMnc5dlhickUyeDlvck5WVjZXZ0kxdlBYS3k3b2YvY0cxM3dwVHkxNFdTckwrdnBMbW53akpmRTNuOWNsMlRlQlU5ZERGRmgxSm9oeTVSbVBYdGY5U2F1T2dhVnZ0cUlhdlNBaDhsNnhJcENsVVVKM3ZZMllMTkltR1N5WDlvays2cXpEc3EwZStJV0NPT2lQZi9QTGovbXd1b2I0L3JPamV2akZWbDNmU05aSkd1dWoxVGN4dGZIbm45YzE2ZTVTVUFRT1U2Slp4Rjg1eFpjRWdOMy9lckhMelhSYW1GdmZQYUZaV3RLR1BRRlI4NCs4aGlENm9nOTFUaWFyTXAvb2dIRm9ZbG4yWngzQUp0KytDKzduR1AyU2xNSHVkQVdRQzYwQlpBTFRRR2srUFJjS0tuYjd1QmVFRGU1VmpITHVPM00wMWtSTm1CRmJJbHVWNC9wVzJEenVyWDJqUnZTd0FaSXEwK01TM1BFeWlNc1Z2aWdMcnJGMGtITlhSQVdNYW1ZN09GcS9jWThON0doL252RGJzVkxGZXdNOVo2RzU0RUlrLzRJN2xqdlVjcUpkaU5FQklOSC9OMGpzYUprZDFDZUxxZ2thQWVwTFlmcEM5T0R3MFFxSFhJVS9lSFJZTzd3VE9GY0NZdElSaWZTaURFSkswM2JUYmNLSjg2bVlxejY5cDFsVUZKYmJCU1VFNVlqdnFWT1pwZDh1dFBZa2RlT2o3Vm1CZWVpNDBaN0MwZWpHTVozVWNtb3AzWmJ0WHhHeXFNa0xKekpKT2VrSVJsNWNuSlMwYi9JME05V2lpVHdheEozNUE0YXJGNm0zVjArSEtrUXhsWHBkWFIwU0ovMVRKL2F6VW4rTFU4bWhsV0FCRm9WWXQ4aGliNGVlV28zVkdGb2lVcEJBM2xUOFhBaFlLclRJVkdxNlE0UlVtd1A5Y1RYRW1jMEVvT3NqZDdmNkZnUk1qYm1BQllrT3gyVTQ3SVNTYlpJdXZoTW5SeWF1UmhzdHJLRHpGdVh3WUVkN3MzcDZSMGFkOEExdE9PUk5SazNkc2kwSlNFM3pURmhkTFNUU3R3SjNSNWRVMkZiZE01Zm8rbnNhREM0M1NJdndwYzZZdUtBSUVtT2Z2MCtvMzdNWjZ0WEdoZEZ0eGVLRC9qUmlEZThZTEFyQXp0SExCREUzeHVNSTlWdVFSUm5xLytBNVkrRnkwc2JBQzM5SmlDak5KV0lVQ1NrRmVNZ1ZLQzdKdzRhRG9KdkVMUUxxQlplV21oaWRNait1Z0tHMXB3ZzJQTjhLTHZoWDBIY0tvNWNpdEJHdjM2WThiS3k5MDRML2g4NWN1cXBuclJBVjY2Njg1aiszWkZiVDEvSHR2bFlPN1A3NkRGMnpoOW45ZXdXZHUxZytmTnpSOW0rVjh0ZkZMbXBHamt1enpiaXc4UzhCMnZPTXZCWkJsTm5HVXlmUmF2TldmVEQ1aXhxS3MraVJzcFoyZ3VQdTZxYzQ2TUEvY1U0K0NjRElSYUl0TXpmc0ZQZ09oNGVRR0N3cHJyejhZU2k0RlJoWjhKNjRVRFR3N1hkL21yMk9OV2tnZ3dSdENhNDV0L1F5SXR3OXlrUkduNU40QjRrTlZxOFJ4U0JHZTlSOGdVS1JMUjREMzBPNU5DMGVJL0NjVGFGOTRESnNPVTVVK3BGVkh2Nk56SUNrWHJ4Rm9YYVc4eUR0MlJlb2VReFRpcGxjdEtBRC92WUZwY3p6OWtndEVXSlY4dDE2S1JEaUZjclY5RFpRcnhhQ1pEcEJNa3BKVWdVc0RhSVFSN1NTN2x5R0JlZERmNkRxRTRMOVJBOCs0OVJCQ29ReFZSK0JBWWxYbnBJSDVSS01aOTFRN1FBOCszYUJNcnBsckZob2NtY0tCcWZLUk1GNU9udUJpa1MxY1E1UmZLT1RKR28xRzNqRk1rcFUvcjkrVWlNUTY0WU9TMHp4TjgrWG0xU2hYeG9sd0IvZXJyUzFRYnJFZE0xMDlsVktlMVN0UGtrTFJuekZFRXZuZTcxekZQK2hMNWdJTlUyamJDcGVZcVFOSU1MdnpJNERmVWV3cUlrTUFjempmNTRwakVEbEhIZjg4eFJUZVBPdk9jK0ppajlIb2l0L2lpZkVoT1Uwc2lxRHB1ZU9tWTlkY3hPdllpejB5K2lWcHNYVVQ5c1hrUTFsUytpR2lrdll0dWZ1TkQ0ZWxOaHFhYy9PckJINGZLR1BJV1BuMjlENEFmcGErVWlJRW9jVEdZUzN4RUhFblg0UlpGUFFQMk5Ed2NaWkdNTkxhQ21SOVJzY1BwQlYxczI2Tk0xdUphdzlFU2dSczFneWwyUXY5QU1KaDB6SG9rTzdzanVHYnVmN0M1OGxCbnB0czRwR2UrVWtHOVFQVzdJc3FYUG91c3lPR011K3JXUmFpejBxMjN5ZUloSFJlVHBzdDV6OEFHQXBzcUVac3d2eHJEYUJIVEJjYXNsYVJ4cXlyVzBZYWxKcUJENG5DenVkMW5VdG1XOS9DNVVVRTVQaVJDcVVjbnUxZHUvVTlhb1hzbEQ5UzhkT1RKYTNTbllKWit3R3lpcXI4ZUhmTUdTNWRNamtabnVXQWpKQjFVTG9QTm1hSktld3MwQ0thdXR3YUg2SG9FVnVRczZWUEtBeGxzTGdxcTV6V0RWZUdJV0VCUkN1U2kvY1gyNnY1ZjFkcjJvUUt1cE4xZ2VYTC9LZHNDaXovRUY2eTRUVVJGRU84N05jQjdkd0d4SlBvY3NQdjBWS1RCWTZ2akt2TDcwNTd5YkRad25rTUxvVWpnNXlMM0hYTTFZR1JVRmVNWlRWMEF4NmVvZXlTUXEwOXEyb3BPZHB5UFBlOWxPMkFvbWM0Szkrd21ZM0ZmMWdZRUlabXArSXdjcG4rVGNCRERzZ2U2VkltNEtNRm93cnhNWlNnRTg4T2FxSEhMcVRRS3B1bGFsSWZlUEtYeEthUitva09Ya2t5djdsVkYvM2lERlNBN0l2cnBMWHlCeHl6TDBlOG1iS1NRMFg5KzUrbk5tVTFDOXdydXNZbjlaNzUxSTArcXZLaUZBQ2xPMEVtSjNGTzNzb1BBNldoQitUME9KSVN0dmpYamZuRWJuOHVaR3FVeWNuSitGRTNKOGRlOHovTlhtcy9xRWNESHNwdFNFNUp3Z1Y4Z3k2ejJ2amtFMnBQaXR3amlLZGNjcXJCSC9TNWdwcWtCOVdpa3JOYWRZVk4xVmpGZ0YwMEhaT2FZcEdvVFBvcCtwdjU4QnJLNi9aMGNKLzQ4clFYTnRoMUxQeVNqNmxFUHMyeHE5dUtmcHVxUHV1dURQRVhRSFFFdkJTWEJ6NG1TVkZkRlN5RjVwYTh0MWdYT2tVWDFoZWhVbjFTK3lSVGxQSVY4S3JhWlJBTTBhMklPR3BOTUVtOFQ2Z0N5YytlOUNLSlBiME0zaEttUWpxMEhkSUF0L0p5T3FCZ05GMWFRRDQ1Y0E0MGZWaHdGWm1SSlVWb1crVlErTityTzNndzFEeVdBb0Jud0k4K21FdWovRm1uL3VyWER4WTE2TGxiOGx6UjlBbXI4OEtEc3IwZjYzTzZIdkY0bC8yYmxEQWtIdFR2UUJwQkxnbmNQTzlqbHZuMk03ZlJuZHVqeTgxaE13eHV5MVpxNFlxdnp4V2xQdFl1eGVLMDA3bGlvdGViTFZ0K2JhbmwwNzJoN1ErNi9URnI4aW9zVytWdmw5bHM3VEVtTnJ0TEpKUy9EMGoxWm10QVRWQ2xvQWlQME1WcjVCVzh5UHRMS3NwYTFldWxCTDBQc1BWczdSMGhZdkxXcHBzNWNHV2xLUmhNNSsrZkdWT1hRRm1vdFRUNFozSHJ1Mkp3MVczemxFZUlZckYrc0FSQU9HSzd1MXROMUwyN1YwdnBlMmFPazhMODFwYVp1UGJCdWNJYXN5V3Juc3VGcFZMVVpjc29TSEJpc1g2ZGZQOWE5M2FlazVYdHFtcFYxZVd0TFNUaStOdEdTTWM2ZFYwUlhlcWFmM3piUjY3cG96RGxZdTFSRzc0OWc3ZGRnMzhhc0w1UEVISDg2SndNMEZrTE5mbmFJaVJGL2x2WFpUZy94ejRNbElJQ2liMHJVS3lYalZaZE5wLzBWTXZ1a1lhM1VDYkZ3dlM2VTNTTjZna3VjUlZtSHJUeXVoK2dOQXRlWG1HNUZnL0JRbXFvdUFiVFVJaHdYZVMvLytCZmFYQWNxQnF0S0xGVEFzWTdpRTNESzFTWFViWjFYQm5ydExNWm1SWUlWVzR5b2JZMVNENkV1emQvRGovcGhVK3lqOTNqdDRoZGxNeUFCcVJwYWp2WGR3VTkxN2NZSnBYMm5oUEZlNVhsanJLMTUyaDFrOWZObk9NWFZHVkJLT1g3VS9MRnhmZ0tJTzBFd1RLcGZyNkhnRTlaOHFrZVp6RzJZSzFIL3V0NmpKNGk0dnVXT09YZFNQZmtLK1FwK2E2ckN1SVh3bk51RmNxaExoV1hQa3M4RHdlbFZLdEJyY0NNV3pwcElzZ1FqMVhSOWxLdXdYRWlOdjd1cDNSQnRYWlU5bFBGR0NhZ09tcVd4cXpoTDNucDYvempqUmdoOUhya1h6MHR0Ry9abXB5aU5OMVlNRG10K2QvaDUxWlowbm84Mmp2clNjWGVFMFhLV2VFMWV5TEErclgwQS9QWVdQSmJqTUFMbGV0Wmd1T0xwYWdBWmxBNGtrNEtMZkt0NkNYZndnekRjVjgvMDBSVjR1cGNHdXUweFRRN05EbjJtMXJiRnJIMzZIQmF3SDF5L1B1TTVUclptVjBBWXEwUmZLSC9UbGxLVzByM29jUXh1M3FQcHo2aURVckVnSkxvM0tKV05WTFBPQmJyUWNGM2QxQnBqWTRNVUhRazRpSVNPdVhRVitLMS9sRTRhd1hyU3Yrbmlta3pSbHVtQzFsaFhrSmtiK3FhNzRDcFFMY0VHSlpKRngxeGROeWZ1NHRaNDNWVThkWldoeEMxbFNzWnp1dXRJLzBZUG9vTXZqb21JdHBQRmxqSkdsMDNYaU8xZ2l4ZkJLRjNPSmo5NVBhOWp2OVpXeThWM0JNOXFWTndRYjNEY2tGQng4WHlTZ0x0aVVla3dES3JMSjY5VDkvN2lLY0pQaU5RZUZQKzVSM2pQKzJMQS9zdjF6UVpFdW83eUF5R0RpajJEVEdWVWZRdzg5M3FRamkrRk0xS2YxblRhS1NUL0puM01ZMWxoSHJVRnVhLzZlT0J2QUszdGNjYkFrSXcrQ1Z0SjlnSUpiOFZQdFVSS1ZZTnZIY0YxTlg3dSs4VTVyYWtqRzVKSEY3TzJZdWVsTlBERGFVYTlUeEZTN3RqZEVzaWZieFh2YXhSUHQ0b1BiUVNVOUZKUUE1cVI5UUhsODE4RnN4MXJtamo4K3JsVGtUOThkNVRoWWYzdGU4T0c4M2lmRzBVT3VUdk43UU1NUHU0N29XYXlVRzlIUHU2TEx4RW5nY2NSbERqREIxSVZNQ3p2a1lFVlNoclRQR2tlZXZNRDhvS09vVUR3VEFYL0QrVHpqeGZoVkdlREpZMlhsMG4wcmIvMll5NFBsTlZ6VEIvSWNPL2NxSzJGdjluRkxqRGxDSUhhcWZaVkpuM2kxRFlwNWh5SXNaYUJGZVRRZXFweEtWZVJWSDdLZWRyVThTckZ0alB5UXo5Q3JocDlpem9oRVF6bGhDb0xlYU1TeWdRbldjTVhjWUtOTXNQVjZlTE9nQ1VzU2R1ODdtK3RvQlFYY1ZUQTBMUzlTRUc0TmIySUNNNEtxNlpkemRvRndxWllIRk11aXJhdXdTS1I4bUpLMTY1Qm94eHl4dlVISlZNVFk2NUhLSHBHZjE2S2p3T0xBdVo2c0twT2M1T1UxY1J3aUFidHplVlAxQnZ1UnIwalJkWDBNM1UrV1hobE9WTjZtSHcrLzlKVjdGTEZBSDJPaGVxOTlQSFBacHhiQ2FEODBEVUcrWmlQZUZZaXVwZFROclI4TDJKUEtDalE5N2RSY0ZaSkx4QWJVclhCNy9KV0NRNDFoOFZmREpPZmJYRlFWeE9wdk5yVWZSZmRBbFJ2UytVSU1DWFovbFo5cHQvSUVGRU43RnBQN05sWWdaTStDNlNLVWV5RSt2a0JvaEg5MHMrVFlvVDRMdDU2cmVKa2FnMGV4VTBOTFN5N0RKTStvZ2lmRnQzU0YxUWY5dlF2QmE1Z2NnSjBSRkJCZXJna0thRG1EQXRwbFNybjdNRlZuNi9za2w2RUpCVGRjVitRaUNycU9MeWR5VU1wNHExOUZZVWt2alFPcU9JZU1KQXBRRzZLL0tFS05lbUM3ME1rS045WTdKa285eDZuVldzTG8rczZscXlLUTV4eVhnUk9oeXlCZHBGL3JzZWlYVFo5b01mcEU5R202TnhGOW1Pck1WQys2VmRxcUE1Vlh5bUlPaFdDbTI4enovZUlnQktWUFVjaGRhamZKSUdaT3lOL2JsamxVMVgvWk1XUE9pcGFLaFgwajVUTzAvb3JMQjdFOVRkdmxVa1JzS05Yb3BqakxYSlF6bmpGM2JnaS9pTXJJQ2krZXVZbFZTUkt0bkpWZzdoSmtKbTVLdklRdWtFU2hKWWdFcWI2aCtqTFNONUpVelpNNm1VVU9McjhQSmxKZGNEV3A5eXVZS2w4N3lrdGR2TGxVbjQ1RjY2cnI3d0p2cVNvNjFid0tONGxGZUFHQkdDL1l5N1oyaks4LzlXT2F1NkRTcTVTdkdlVXVudVVLZWZZUjkvL1lTRG8vVVVXbUoxQlE0QWJKbXRoUC9xamloNVRsaXVRdktuMEpmUm5wWi95T1lZQ1MxZ0szYlZtdlBmRjhqQmhjM2tySWJWaGZ3RlBjRXN2U1laYWlzcGVsdGlYSHpaamp5ZFlHeUMwbHJvUjRTN01zZmtWbFVHU0xVYUFQUURoNjg2cTNEUTYxRkpsWFUyWXc3cVBRUDZ6ZjVtY3hyRC9JVXdCZzJQZTNVMnVjVmNTQnk0dXR6b3d0QmRFTExvL3BlSjVhMk85M2lpbE9sUXkwOTdnL2FWU0d3UjBJK0VjelVMK2xzdktTK0xIaTRuUzkwZ2NSNTJNanhJOXhKT0NRTmZwVjY4WlhXUkw3Nk1kaEZFaGczeEFBaEhCRTJOdEJuQ29OYmpScVdSUFlGVUJyeGpQVlIwWEJYUzZtR21PVDg3dU1iK1Z1UG9VcXh1SHlQcVZRQTdSWFFHdmtpK1N0cTM1N2NDR3Y0Mk5wWkIzcHZJVTJVOEJFZzlxMmthSmVOZFhUTXVpenBMcW5KMVdXTG0rV0tHeHVESlRDT2N3ZkFUdWxWQi96ckVQVTZHMEkrUk11UUV0K2JmSzdtRXZrYVlVOHZIbHlGRWpIbjFGZ2h2S3plSy9BeFZPTFZ0YjFpS095TFRCaHc2US80ZU1hRTdxZElKdVJCSGlHbURONkxVNmx4UjE3SStSWm54STEwME1QSzhabmZnbE1tdGR5dkxQMXJvTVQ3Mk1VRnBjd3J4TS9ibG50TXBHNzVwaUw1bmF1di9DcGk4WW1ORGl4dWVUckl1ajVEK21TMHRGNjF4OGZLZ1VXbWw2TkRqQ0ZGTExVd29tNlFpdXhkSGxXTHcxbGE0WDVveE5qYWRsOGI2a2QrQlU4QVU2UFkyaTlrU2lCSm9sSHhOdmpTUVRQVzlxWnhmTW14UVlhM0s4NmFGTlAydjM2Mm5oOUJXakxPbG8zTFovWnhaSEt5cEJ1aGRrcElkdXVoUGxvZjRnZGF2bnhPTG5MSlh4cWRwQzdTOGVZYkVxODBNaDFLaGttd1pwN3VaMThGdm9kMXpvNmxIS2pjVHJtazQ5YTRVMEZBbm14Mk1EYlhWSmc2Y3hRczlESjM5ZmZNNG83QUgxak9KK1B4bjVlSkRrVmRDdDk2RkNPamtvTUxOVlNiQk4zM0xrTXVzMm9jZFZ1Qm9ZZEs0aG5VdUdaVzI4aTF2VWk4RkVkcnZHNTJ3ZXJ1aDRxS3AzZXNXcTBCb3o4TWIvbmhiYkREelZkY3NjaXdLSzc0QzNqNWJJbUlVSWlQSXZMNlhGTmRCa3MxL0tNU1kzTWE4R2ROY1hGOGh3M1FzNm93d2RvL1loeUl2a2ZGQ0xYaFlYSklKc3h1RlBpNGVYUlc0Y3E1T3FOSTMzbW1rS2RmVVk1Z0dCYnUwN3NMNXpjSkVNR3NZZHpQblZlKzlwVDU4Vnh4WGpaNVR2aXVzV1Z5ZDJocm93RGF4L0FqNk02YXQvZW9Sc0dPOVVRZnBiTkRrc0hoNlFnaVVZQWJYWXdJT3lWNGlUT3c1d01idldydVRaYzczSmhMbzV3WVlFMjNxRGdVM3hvNVNXYmlaRWpaYldMVWRLM3hpUk43WVdRTk5CQWRGV040Y1M5OFhzeG1tT3FFMUpTOFNweUFtUk5IT3N5a3BTVUR2QXltM05CVmMyVDFoTU0vaTZldEtoem1JUWcwOWcvbWRlOEM1eDRNaThMZjVXYUMzT0pBSnJRWlFCWjB3OUpRbHJaaGQwTHE0b3drT29sRnBPSlRiMWtRYWJqL0h4d01UcGhyM0VUaEU4bW9lTGMyaEc5d2x0UVYwRERrY1BrU2xaM2FrekNRbVlLR3dVM0pqTnFWaVBKZVhsdjREeXlReUtiZXJ0YVV6aWp0T2JmaytEbkREUm5GRkZ3anVEcWFKamQ1ajY3T2YxQVRLR3VXOElVOVFXWTh3VktiSjJUUjU0bjROenE2c3pvTUlSY3BtUFJEZDJweXdTZTJxOGVEcHVaTStvUk42MW54VnlJWDdvUU42aTA5SENTQ0d4dS9IdkRJc2o0UVBPUjFndzZ4Q0N5cFZiZGhCa1VhUGswaDJRdHU1ejcyeHErRVZrNVRYd08xbjdEdHpyYjRoTmkyRlhEQTZHSTNqMld4Z3ZvejcxaHYzaEZOUnAvTDNCYW1qY2lkWFc1M2tDTVBRWk5mUkk3dVpIZGt5a2ZhdFZ4S3NIeVFoQS9WbTMyeXlydGRFWnN2K2dXeXFSck5pbFNZUTZVNmU0OUlscG5haFcwK0tBV3RaVit5VTZUQTVxbkQvYlhNT3BjNUJORUpNcm5GcklJQlVPMVZzZ2laRk5valNxVDVpenk0SDNSUzFFQnFLdjFacVFydzZyK3FORmhEZ2hGYVpIdXR6Kzhmek1zSWcrbm1waTZ2M1FCRC9UYnFHbkZ3TzZJUGpGWENJbW5HU1R3VExhWENwaG1KRDFSVUNlcjk5ODVtVHRtMklSVFplbWxoZ2xqeFhmcFhHZThmMDYxRmk1dmhoQjRVZmtETWFka1FGcXNpY29kZEgvb21tZHlRQXNyU3lnNVg5RVdiYkNic0QwcTZXcDlCNExUZTZkM095Qk1GbXBoNVNLTzNqVzltK0xwdVpYTE9iQ2EzdU1DYTFYdnFOMTVYUms0Z3U1dTEyUXJLcTN1YnFQZFM2ZDNFNm9XWGR5RUl5ZlR1d2k5VTJYbDRXN0RyejRGMjQ1cTU0cW5hVW9lTXpHK0VlNGFDanFiUFppR0lybkVrbnVsNnlCVEFRdnBzWUNjK09QWktLNzg1VENxdGxYU3NJWjNvR0VkVUp4N1NKeDdvSmpwZEoyNHZFTHF4RUZDM3lmV0xVOHI2K3JFQmJSSndvQm5PdjdudjhUeG5taWdKclB5TGkxRjhxVWMvK2tuNDNpRmtURDJOaXFibnhpNnh4S3Q2QjNNcG9NSzRPbWJmdVFyYjlvVFpUUWRYd09xNy9Na3lRQndxVUlyY2JwQm5PNE5YKzdwNENKUVk4MVp1ZE1VZFl5L21PbDR3UmZ0TEF1OElSdGY5SktFdFBiL21OQUh1bFNDSHdxL0tSY3RhT1RxWkk3QSs1encyUHFOaXNraWhzMVUwU1BZU0tiQWJKVGVzajVDWm1PWmtHRHlxbVZHUXE2MkRwaTlXZlFLR0EvcWlZcldDTXZKNmc0RFZIWlpwQUMyTFl0U2pqc0V0YVV5WERyc2tNdzBvbHdXa2F0ZWcxL2xpdElRbFp1cDNpVmtIOEdHbmNDS2JWaU5zZkkwWk9CS2hSVGREVTk2WVdnTDlBZUFaRlkzcGpLdVV3YUorTnJNRitLd3BhdXJCTWdPb0lBMkhsTDdCb2V0Q1ZqT1pzQlN0MDN4U3EzNUU2bDJsT1BVS3JGS2JLZ3dyYkdoQUlZWmtzbFdiZ2YwZ295RHFKRDFkdUtCL2luZEFxSU9JODk3VVIycHpCd2Q5d3BTT05sdFk4NnFJSk5ybGNWRWgwZExVbGZwSEtXS0E4ZVVXQUduZVhZa2s5b09KeFhzbStxV0VoblZmWWw0c29NbTRrbGpmZjBEanVsYTd3Y2hYRWcxQ2VESFFONDltZnN4Y1ZrQ1VETHI1R0Q4bG95SHh0d1MxSk9BRTIxeTY4NUdLMWg1bUN5TWVJTWNlM1pXakFDN0tLb0psSkdObXhqZkFKdzBkYlNncytSVlJJMHByaWZrYm5acUx1dFZadHVNQzVJQmlHMjFRM1ZVbE4zTTFrdnlyTU9ieGMrWkQ0ZVczSUl2TjExYWdlYXN2T0hudGZlbXFHcGk4R3VkUCtIUGFHejVoWkR4N1hWWkMrYXpVNjFWS1NnTEE3K244ZWQyWkZwb0hVdExwNEtLMlR5TWMzb0FEOWgxY3d3cnJNYUlZZGwrVk85am16a2E5Vk96d1NyN1NoSE5UYXRDSXVHT01lSzIyZzl6QWt6RFZmOXJ1QVlqNjc3NlhKdm5ZdlRyNjFXS1FsZ2doekZsYUVTOWF4aEVZM28zc3I1WGdmMS9haGhYNVBadytaZjFzbEZTTjd2UHZwNnQwZm95SXlIRm54Y0VsL1VJVTVYTVZVeURLSU5WNzlabzFrM0ZDY0JDaDhZeG5peTEzb1NuZnc2S1BtMG1Db2llc1NlOWNCNXM4RnJkSU5sYWxoZk11WW1ST3I5S0JhdGFFVSt4S29xcXQxbnZGZCtMamx0R2hwZktxSjV5SG8zSERjOER6QXo4VDNVbi9MUDJXSjlkMzRLakV2ZEZpVXpOWjhyYkFtZ2lQNmwzczIwa1JDRFdkbmFlekpzNzZ6SU5rdWxQMHo4SDh0MC91eFhDQ3RHOFVobU8yUUExOGxUUkgvL2NVRklxZlVGcmFIMEJGMHQxSHBPRi9ZcDkybldwbHJmdWg0RWQvSjQrdmRod21pWTlPUVB5Z1FFTkw5bWdPVmtObnI0aFFtYlM1aFdjMnlmcjd2aEsvK2lOcnBFQlRnWHFtRmxyL0xLZG1wRmxSRk1NTUNmbEdGNTFHUitiL2RJcDZFeStpQUNrUnBMS1QwZ2NXVWRJRnVrNFRxZnIyY1o4UGxoU0NrZHRmS2VWZ0VSYWVrRGZoN21KQytrZ21FMHlhOEw3Uy9wSHR3ODNaMzZpMksybXdXMlRjL1M2elc2YWcvVEl5TTVkTEdWVEhqUXU5aXd0eVUraUpaQmVUVXZ5c0FWdGRtT3pteUxKTkRBOHpuMDBjay9WZk5xbnNhSUdPVVVrRG5WSWhrRElNNFVHOS9oTmc1Z1Z6eWl1RlR3TWNCZ0NPRmFVMzNYTkN2Vm96ZlNOc1MyVTc3ek5Jb3I0SnBFYmNBQ0lTaFdDL2Z6K0IxTnlrMms0cVIvRk9seGRITnFLY2xzUWVPUEFTRGdveVJCNUFVNmtiNUYzNHYzOS9nQTJrV0pYRHRHaDUwaHRUbW5HcVYyY0xkTUNTQmZwVnhpWjVxR2tZM1JlbitVRDFkRmtkNXpOK0w2R0VCc3pubEp5RHhxNmthT1JIeWd6NXZWREladU5objhneU9NeTRCSm9lSC9YVW8weHZuRTR5d29KNFdjR0U4bHZvS1FicEx5OWEvcXdtd1h5dGswWWJHc1NCa0p0ZjVQNU5vYjFOM0tOanFJdmorTG9iNGdFajVsVnZXVXl1S1lQZ2tMSGpLN3BLNnh5U1crTzJmMlMzaGEvVUwzdHBDRXY2dzJoYXFuLzJLblczYncwZ012MFpLL3VmWE0wQWlYdDdOVzlieUZGY21YdnhVSFljbDBRdGx3WmJEQjdyK21EU01CUHY3cjNnbENiTi91SnBUYS9xeUZSNjR2bHo4SEp3dkpuZzB3UEQ3U3FkTVJnK2VOWDR2YXo2TGVqa2ZvQ0tDS1B5clVKTjgzSmI5UE5YSEQ5Z0p3WEIxaW5Mam9GdmZHRGNpQUN5OWZiSVFpWHFpWFdsSko4MWFwSWlOVnptdXByZkJyU3V6ck4vTmY0TkdENVNFUjlqVStET1NnbzVxRDZZOXRVTnFKTWJEUCtuVUY4Nlk5QTJWM1NtWXlNb0pLRjRyTXdxVHF6NlRraU1wVzh6c0VVeTJ3RXVDbFNpRXd4N1BFUGcveVYwZVBzb3ZPZEk3RUVYSnkwcmVHc09yTVlITGIxb3ZkWjVibzVEaUZpanR2bWZWU0VNQy9GY2FKTHRRcDlIQWZkYTNzYzlLNGM5ODNlRjVwbDVUajRiam5mWXozdmhCckxrNTJucWprZlFvU1RIMXVic3FuNmswNnJKcVQvbkNOeE9ERTQxQ3NDUVQxL29OZmFyamQ3Z0lqYTRtVUZsS2dGQWxnQktJcTN3MHBBUzRHcEd1QUlSTk1yNENpdHZzY0tVTW9ZbEZvQlRZa1o0eFVBbGVCS3ZRS21NdVNjejkvM0xmM2Vpc1pHYkFmOENVd1RxS3g3REZBVVJMOTdESDdVZStneHNGS3YwT01Zb1ZxaHg0QlFXUWxnS3BCYzl4aWdwbGZvTVRoUnI5Qmo0S05lb2NlZ1NyMUNqd0diZW9VZU16NzczOUtmemU1cUk5MjlJSDdTYzNmOVJYaitZQlRnVVcrbXIyQkt2VUpmZ1pwNmhiNkNRR1ZGaU5IeG00ZDlTM2pKbm4wV3hJcmdidXBQL0lHZ3p0dUx4eDFHbDgwSGRyNmZuU0s0bU5wcE9zUisvZnZzcTZvbklxNlhqajgrL1IrekE4ZFJ3Q094YTRsZHNmcVJaQjNVRCtvL1pUZGZpT05hcUg2ayttQ1JQZGhSL3lhN3NGeTZwM1BFb2wvL2hkclo4SFNQczROcTBvMVBkNFEyK1dUSDZaTHhrRDMzbEk1MGpxR1VjYW4reFEyTzJlVTl2N0xCTVZBUUx0WDNUUi9EWlFVNFowZjlWbm9va1lidVplR01ZTGlDczVqeEorVjVRdnpxbitkcThqdkd3bk5XcWxqWXBjblJDenNWUS9QQ2haby92WENCQnBJaWRzZVdmVmZNTUg5QlBicjVmdmI1WFdCaHUyS0ZYamhmNFRrdm5MZXlLeGEyS1JEb2hYTlhMbFVycWhqenEvYzhEWHY5czdWMFJXOUlMR3dwWGRsY3VyS3BkR1dwZEVYSks3OUxRbHlXcm94TFZ4WkxWeFpLVi9UNnhNSmM2Y3FzdTZKRW9GK1c1Mm5PMEQrajBoV0IwR09CcWtRdjlFdFg5UDdvUUpHdmdUY2RDUnQvdEFrMWZxK3c4RWx0ODcwSEZIMTYwOW1ubnZxa3RuL2ZnZkVqZ3hLK2o4aVJrK3JIcU1hQ2dEYVNYU2JVU3VRQjFwVEJGY1U4TUZKTXNJc1N4TTVBdXB3K29TbFdlaTgzWUdNb2VwbjZzSHpCQU4wdGFsbit0WlQzUmR5dUw1VUNNQ1JxVUdSdlBQVWovWmZhWW1mdW5yMVprQnFCbDVjNGpkYXZXMTNlZFAveDVjMzN5ajAxYlJyVlRIcDBVeUtVbU9YQ1FWQkZiTDc5d1VzMUJnbXh5b09ldmZuRm85dUJRSkFjVXBzRWx6YnRWOWg2OHpGUnhveFhEdE0xY29iMlpXZGV1dlArTzFjTy85VFJlOEUveWZ0U05HMVZYNUhCSWNuczNkU21qWWlzT0J4aXovamZFVndmY0dlVjdsUmRaeUxtNUNtT1FxZG1KbFVlRURUcENhRmxIOXBVY2ZWRElnYXR2NkF3NldSQjVWKzFERVY1V0ZOK29ZdnJWWnhNeUVnMjhkVFcraStRUlZpekF6d1FoY0JLaWdWd2JxRTUyMWwrRHJocTNRbFUvMlVtaktzMWo4K0FkWHpVb1Z1dTBKeVEyME1NQytjSGIyRDJrb0ZZVnVRZFhZSmlBMzhxVkYvZ0ZKaVF6ZFNTdkdZQTBOYk5WaG5yWkpIeENxNFpRVnNBdUtUREJ0VVZwdjJVWVJ1WDRuVnFJaU5CeVVXRTdOZmw5ZWZpV3JXY2VVZEtwdXlIVzRJVXVraHFYUjN2K05Tb3YyQjNEUHhDWW5hbmZJdWxqbThoSHowd0JMRDZ5RjZBNy9teTNsNVgwUXFqS3N1SUY2VGxGc1dtTnZWVC9hM3RKZ3dvZnY2OERnWGtKYjFMeUZXc1JTQW94QVVqVzlqNjhqelhNcklaQWtBbGVsSUhFN0ZKdGh4enBZa0xPTGpTRkJmclVQRmxPMkJMdWxxYkcvNmFtb1JReU54b2Q1NlhFbVZpR3ExcUpWS1RxbWRBc005cEl0eENKWEZnd0lJQUhubEpNNFJDb3hpQ00zQlJDUDBJa1lhKzFZcm92b2lQbVFZSDdFb092YVcwRWY3NWpKSmE5Q2k1b3NyTFRld2pHa1Y2M1RRSERkVWpRS1NTUDFNTVdXc2xmeVpQMVRDS2trRnptdnpHNE1HMmpDZWwyZUF0TUk1Rlo4SDZuc0JmaE92RVVnT1VLTmwzZTA2anRaNlRDcmIwaGJ0ck9GaUlHVmF4VVNHSUtUU3hpQkFUMWpIRG53Z2NHRzFQK1VuVTRmWHE0N0VzUm9vL1pYU2lFcU5KanZwQmgyd1NIRTRVeXY2ZWkzMGpEaytFM0RwQnY0YnRibnRxaDZpMC9wNndKeVV6N2ZRTkJyazdmUnNSN0xneXIwYUFuendicTdHZjc1UHFEcjBHV1JzVVpwaGZUbjhsdHVFb3FtRzJjbzVEcFIwNEFGUm12NnNEOGFJMWFicE1na0FnWlg0dk9xQVk2UUlCcno2WEdEOUYxVWo3OVhBZFg4YldXYXoreURPNFI0ZXRIamR0T3BrbE1XanBXVUdqNnR3ME1XbzRscTFGVXhSS3dFQkRMRHNVTENkem5WK1RPbnRwNUxWbDlpRVVuQVcvcnQwR0VpMyt0SGFMa3NDcStGVmUwbnEraWwrMldwQ01EN25sSGIxZERURnI5aXA3OHdGQVFSVG9XTU9OZWh0Ty9FcnRWeUVTajBWci9GejhML3FPcW5DeFF2VFB2Qkk2MEhFUWF0WXRtTWpyU2lZRzBwVGdCQ1lZaVdhWEx3bVJnRG1LYkV6ZlZmM3NCaFMvWkFodUlXQ0VscHRUSEsreVlINnBYTStyZDNaeS9OWkJFUWZReTFETURYR3dhb0lDOUdUam9pWGREZk9qdzh2cjBkb1M5NUx0QVBNVjNMekl5bEhYTzd2Q1BIU2RzdERLOVBhUDZ3dWtQN2NwZ3Jod3I5UFdnWFFURXo3L0NPa0c5ZDd0bG1sSzRiTFptMjFGeU1vUWhweTRZZWJGOUFKaWY0enVQeDV5UG93cWd4ckxYdVZPd3B3ZzZ1NGV1UGlTSTQ2Skx1M29aUEZXdW5UMFJwK21zVkxnbjFEbmRCUTQ0UEgzN2R3ZkJmZGlxYU5zZGZ6UDdoZEttZmpMejRhVjI0YVZXSGt1RG1EampPNndGMlZuVko5ek8zM3BqTzZ3STVYTzZBNDdVbzAvaWlOVi9ORjBSdlZ0OTBsc0VZZVgyVGlqNFZuYUdTMmVwWjNSNGxrMkRpZ25zUU5hUE12aWdLYjNXVytKazloaXJqZkhTZEw3blBkSjdJREtsL0ZKR2dlVWt6UU9LQ2RwSEZCT1VoelE5RDVsWExldTUxZlQzWHpIUURsWHE2bVI3R0VpSzJwaG9nclRiRXllTTZ2MVo3ODdlUVF5bWhpejB4U0RnUFNUUWpJTUs1RWhJZENUSmNNVXBnamFRaUY0WExmUFRDQnJXTlZlRWdxak5zeVNZYkk4b2lKcU5zOHAzVUIvT0NZTEtSa20xWjBweWJBa0FRamNPeWN4aXI0NTNqWHBMcmZvU29aMUQwckpNTW9VT0U1L0VONGwrUk1WUFpKZmk4dGVveG5XdWV6ZStQU2dMMXM4QzRRSCtVZ0FlYWdxTjhlT3VoNmpIVnFWVWhwS2hXNlVuL0xFb3Z5VXh4WGxwenlyZktRS0VqdDh3WU9QcWxVR1ExU3RNa0NpYXBWQkUxV3JqS1dvV21XSVJWR3doU2Q4U2tabkZBVXphS01vbUxFY1JjRTV2aWxoNXBTOENETStwY3RKZkVwZW01a210RFBqVS9LU3pmaVVVUnRjNnBDRi9NdDNkdFRVSVkrYU9tUjVoVm1IbklXeWw1ZHlXclZGMGE3WForWGpwWjZRR0JjaUN5SEJtVUJvalFpSVZWSXJVWktBYjR1M0pVNUxBd3orZlAvRUpKdUc4Z2c1VkwzZkpiZnlrU0F2OFA0Rzc2WFBxZW8wNGd5QlFYVWxSSDBjR1p2cTJ4cGlqVUFNd1ZsaHc0M2RRNGZmTlMyM2hSdlUxQVNRdnQzYUFiUmthMnFIbkM2WVdRTmJhZFNWcUc1UTl1bTZCaW1TYUxhMm94R3pRZmJxZjdRNHFxOVVpODVXc09aMFJTVFlsUlV4VC9pblNWZll4NU1aYXpxNCtuVFJla1Q5a1JWOTdRVkNZQW1RU2E5K0lyZXBzZ1Z0U0VORERHYVU1UkkybUp4L1BjSjduZU91bmlMUjVGaEpHOHVxSDR1VDZBd3MxWWV4SFdrdGNyWXFxSFIyc0ZJQ3B6N3k5dWpQNTlPTkdIa3BNSTJrZC9yWEwwdFRYbSt0WUFCM0tjeDhpenh3QmM1a1ZneVZhdmoxb1RzaEdWSXRVZ3VnQUUvOHlBVG1zaHFjOEdVN2FYbjlWZmxtZENyN0dJTEp3aGVNcXQ4VVVoOFFicUtDblZUd01mVVgza1ZjcVpweC9wamZibFNRNVN2VS9haWZSTk9UKytZdGJveGNzU1lYRW8zc3RRMHQxdVFHWGgrS3JZSVd4NytBT3lyWHlCdllpOVVRaU1aeU5QallhbTY4MFpYMHhuK21HWXYzcVNIZnlkSTd2VUZwbWJqbW0yS2d6cFlvdm12NXdLRVNVM1dFeXU4NlRETXVtalozaEFhaXMxR2E2UVZoYkVRbUZWUy9PYzFhMTVQNzNCMWtZcHk2ZzE2TU0zZlFqZXFFS2dDYWJsbkJRSjVLczhFU0JvcmdOOTBFbXBjZGhsekMyMGxDRzAvaWtoQmZtZnlxdGl6RVcyU3R0cVVoM3FLY1FWTWVvcXMvMmI5U1BPOUpRRFArTDVrc0RUU0NrVzk5dVR5YVExMm9wb0kxQlk3d2c0WDFsaXV4S1p3VGZ5eGhvblVDRHdZN3Bnb2pnWmd5NUdpWVBGY1ErY204anRXcTFFVWJpVXhnNC9xR01aYk4zUmYwS2E0TzFIc1lEMkRIb1hySFQyS2R2eVJTNDlkTGtGYTdxRTBUNEZJMWRTSU1vblphaHhneUxpbEM0RlNrUmZvSGNWbXp1aXlRQUxEUjRWQkl0aEFnQVBZMU5uZWpnNXNkeGNJc05TRTR3Y0hXTXRra3lGYVVDRGVwZisxWjVVMTYyeUNDM3cvTWxlQkdVZVFMeG81UmZWUytoQlROS09YWlYxRnk0NXl5SHFHMkNGRFNlQis4SXZxbGNwdmVycTJJbjVsTFJJOVpORnN4TWtRaTdDMzZTRFJiNEJUUlkyNjMrREVyc0NwZUViV1dDZ3ppRTZuK0NtLzBJU2RuQnRYejJjZ1h3a3hmcGJHelVuRFFPOVRaY3NaYllQcnFOQS9UMXhNNHYvcUl1UGtuWnJQNXZBRnVYdHBMVkUvb3pvdjhpem50OC9nM0lpclJCY3d4L042UTdpRnZkVEErdXliM25ZUkRwUHdiNFJETkEwMjB4R0FtMFZjcUJrU3FmcUNRNEU2QlZPclhFQlhaK0loU3lxNWYzZmUwN1dwU2xmc2tqMGlCOWlhNnMrRXZSMVp5SDBERC9JZjNQYzJQSXY3SVo5OHh0dmk4KzhVZGljVVJFUXBiWGphVWJIZlpmckhWcFp6aU1ia3E5ZnNKR0sxck85UVBrR05nc0JtekwyMzZqTnRKVmxQZ1ZueEZmVG0wUkZXR1VwTS9oTFRxaE9LSFdZYzE1UjVlamorRWVIYTlKNFF0bkgvWGJjVmUrQ0hkV3dNcHduM1dVeEtpd2svcFBSbkM4d2VaU01xa0tmSGEwU3hWR3hTQXRVVmhiYUZZcDNyc0dlckQvTWRnNzBQMTdwOWtZTWt1T0dqMjlxaGZYeUFXYmY1OHd4eVNFYUN0L3pJWFF0YUdPVFRZcVFYTHdud21OOVZzWmc0U3VJVXJnWmk0czk1VmQrVytyQWE2S0J3NG5PN3Fyd2RzOXF2dE1ySlM4RDgrTlNnbVNnbnc0NVBPRTc2K1gxd3h0NkxHUXBoOC92dU56TUpmWFlHYU16Ulprd05Uei96R0VMNXQyQzZ4RVlUWUlTYUkwSzN1QnVWZ2R1RjdFSi9KZTJFUDVIQkdaSTRrakI3eXJKUW9GYzBWSU50S0FiZ0tYeDIzT1NGTElwa2dqT2dReStNTS9KbHlwd0lUUmlMYUhHQm1PdGVoUGxVNDArbU1xN3VPM2NOK1JHY3dYelhoV3Q5VjFsR0FXMjJzK3FieWV4ZWJLU3FieEl3VzdZMmE0UGZrZCtsSVU1eW1qeWlGa0RvNDBJZWY4Y3l0TG9ySnlWSGlzK1RmZFk1UDR3TTZiT0dEdE9WTXYzcDdoQkJUeWhhcC8zNzFhWGRwVnhiWW1PbkROY3hwb09xbXVnR1NGM0U4a0thaWRkc2NMNHA2SDYvS3FJREtIZWxuQTRyVi9DS0ZSWFFwdXJFc3VWNE41b3dtT28rUXoyb1VRc1J3dnlHQUhKZW1VQzdTcjJDOGV0V1R6Q0ppbThjeEFlSW5ZTkZ1MXdQRUpVZDF0VHNjUjR3NFFnTzVhUGwvS2o5VjYvTzA2NERvemlDKys2LzFPVklwNzlvOHJIZStuWjFyczZhR2tIdjNiN0diZ3VET2JqaEVqR3cxaDgvVmNzUThNeE04YkJLcnpxald4M1IwOWErcS94b2NpZEhpRzJoeFRWYjRLMm5SU0VtM2VJYUEzcmF2c0VYRkJLTE5CblN1T3VENjU4dHBta3pyWHpZVFFaYmZBZmpVS0prUGtLdkN5RUVQSGN2SjdSS2Z1RUIzR2xXYXVhbWpmd3NjbTl3VS9ESG1ZdTJramloT1VFY2pVZU42S29PNk9mb09IUWhoVFBlQVVCSFEyV0Z0Y0NUYlRIMGtuU2dSYkpKTytSNUUwa2t4bGNTY1o5SkpmK2NSb0NicFpCTXJrMDdCSmtQU0NhQ1Y0NFdxanlCSnlsdEVqU0VWbkg0anM4Y2lVSEtaVzhrdHRUVnRnbC9hVmJjcndKdWRpYVczS0l1ZDZHZEE1aGRuOVd4djViWHY3djJnY2UrOWV6VkxmYVFuTm5WajFVZjFnaDFSa2FmdFp3SmFPZkh1M2hGUnZaMTU4K0hiYjcxWHR4eXpWSmlWZjZsd2IvOVFmWmZ1Mmo1aDFhNXhnYzFndjJ5LzF4KytDUkpoLzI3Tkx4U2lLZXpSWnE2VVlhWFRkOW9VTCtFekhRMDNvcmtWNjhYdjhzdlB4T2N1RThDZS9ubXlLblovY1BrK3pUbUJXZ2pLMkhLMXRjVEo5bGN2VHcyVjhmc0cvVVVIZmxhdXV3dWVDY3dPRndkUjlLaFkwQXpiUjBkdi9hbEovN2FJbzFMVkJGRHA2SzJUUGx0VmNmUHRkK2tMcG4vNWdTRGlMZzVxZjNDclNvcGluNkJBUklJMHdOcDlTK3pUT09Wa0pNeWJIVDZ6UGw1d3hiV2lNT0tTVzZNNXc4ZFgrS3VtbUlrZktkVk9ueHF5czFTVDRhY0xDZ0JQL1hTNHdVOGRDcDJNajA2V3Z1UlBIZE4wcWovM2ExaVBmMjhRUlQ1a09VSzRqTHhEUnhaSmNRZHZhTUxvczFnYzNiaTdsYXE2Z1hmTFdYVWo3OEtiZU9sRzg1am5nVDhJQjRTWFhpVWVqc002eWhSSTNSTUZLMUduWFJVL0dRZmJ0R3RxQVpXQXFkZVVsZUVOSlJNOFB1WFF6ZHE3REVtZ1VzUG40clJvSm5oM0Q4amZHRmYvcG9UN3BWSHZkTGV0ZytyMVVkR2U0WGNMY3BHZkgzKzJINjh4Y04wT3A1TlovQk1YaHYyRnRIalNuWWNpZU9SNThka041VTNSZFc2TnZydHN3TFJMT2c3Z2NjcWtzQlgzQkNlTDZ3bU5UYllDbm5QeU5JcTg1amdkeWFKUm5BazBIZW1Zc0JCVDZOeW91cVptREJJb0Rvcm5xaFVkYUd4YnNTSjl4bVRHVjVyU3lOdXZ3cldYcTIwdS8vL0d0V2V3SWE3eTZXNUU5OXJweDVwci8rVU02SFF0WkkwcTI4ZVJKSmFzSGlSK3RvVG5uODRTMWlkeG5TVU0rNVIzZkFsRG1JLzlzekdFUmREY01ZUlA5Y0lRRnA5OTJNR1NEWmd5Z3hXSUxtYXdiQStaQk05c0Jhc1h1cWhTMWpObEJiOHVIYS9DdnVnWW0yMjNKTTJ0SytOWGRDajFHWlQvM0ROMFJZVi9xRkJKeEdyOURkOVhYeTY2UkhWcWkzSnM5ZUlOc2lENGFJU1FEbmQ3eTh1d2NwU0hpN1N5dzFqKytDdHk4UkdqQU9xZkNrc0NWRVB3VHIrOHFVL1o0R3hYUHV1VFBkT1prcXI2NWZRcGFBUi9MV1ByWnhxNE9qbk1EcVJFcWRXd1BRdzRWOVNTY1M0ZExwQVpEL2VUWWswVUZ1aDVhNXA5d2NDbXN2Z1M5TFhKck9keDZHTEtDb3cvOHgwRmVrbDlZeE1xUHN0eHlQeGhYVVRZblpTcVhpbUZNbjhpWU9MSmJHNlVlRmI0V2FqNnJBSnhTVnhPZFcvRFhlN2E1RUpmWGpRSVRZNW5FTG1ZeTJGS1MrVU9VM0JJdVlQU2hMVklDRXQydkc0dzZFZnlGL1VVeDFoTVJtN29Qdm5rUW05cm9iSmt0eVVEMzhqMjgwZjFMREhkSjZTZmxEV1FmbDRkOHRZUVlKdmp4OUYwbnFDL055RkJ5dFRnendSdXI0djZXVjZJVm9sUitpRExudm4zenUzblQvV3J5MjM4S1FGK1NhalZyMU9qZlcvd1Z4U1dqT1RMMEt1M1VLUm9JMXdOajI1aDNiNC92YUV5KzhEMVNYNGtlU0NucFdvRlVXa3VxUUR3UE9HdGs2cUZhRVZGNy9rWVNCTmhoVmtweXhIWnJjbis2eFV6a214dnc3VkVYOUE3OU1vbHJjaXQxNS9YaXR4Ni9WdVRkNjZzNCs1ZTF0c2Q1ZWdwMmVpNzgwN3VqaFJlVTZ2Mzh3YS9yTDFCU1FuRWlteFgzV0crelBHK01pbU43NWx5SHNzOFJQajNxUjdWUko3MVhFODE0aFp5Ry80d1FDWEVxeUtRYm1pSktTL1VkYlhkQk9kSTJPRlVVUXNuNkFTemF5UU1qS1VIRTZDdm0rTHhtNzIyZExNQzRsckRGUU0yME96ZVZIdnE2eDZ4eFd2bjNLeFkrMFpITkEyMlRaZ0ZzTnVFMUUzaW9GTnVvaDZNQmYwby9wM3lFcS90eE1ZQXVQUlc3bmpOc2VNblRwNFNIU3IzazZTUEF2Y0V5S1ozRUNoYnMyViszWmE5eE1pODVHQ2FseHhNQzZJTVUveDRZcXYrUFpsQUVpaDhTRTVMUkZFQkNqd3lwc1VJZmo4Y2tkanVEMldXYmJDMS90Q1hkYmcvcGN3bGpvNk5QNUljcnluV0ZGV2ZVYVZWa3Ryd3F6Q3AxQVBYS3BOY2V6VFNQWnMxemx3WnFtOXFBdFY2bVlRN0xMLzNJY0d6eUErSUUyRzFWazVBcEx1WVJxVDlMdlJPSEZoRmlUSjNaRDU0YnlOWnJHK09jMG5zMWNxRENzeFgzOEZMOHI3NE9YU2xKWXZvTWtSNzVPcTJ6a2lLM2RTRTV1bGhBcEtEcHRiVjgzVjk4Z1RMZDI3ellOQ1RRZUYra1lrbjFkV3N4RHRFOVcyQVUrc25JdmxtU3AwNU9KK3FUMUorYUovY3hvV2JLRytNU1l3eC81SytzbkFFV1dyUVNkb1MxallsYkR3aXMwdmVEYmhYcytuZDRpSWkwUlpUSTNOSjZrOFhsSnJJbmdnTVFBTnZpSnJ5VVpETEVxNitza2Zkdkw5dGhTTlR5RTNpRmRxd0lhK2pOWHd1ZC80ejBNdEJtUmxWKzlmMEtUUStwNUY3MEN6NFQ2NVVUajNJbTl0WnNJaHNEY2EvRUhHVnBQR3N4N0lwVmlUcGYvL3k3RzJVaDBYNXF2a0hLOWNXOTErTUxGekxMeXlIY1ZFeGd1eTQ1eG1iaUVXRFl3WVJnbEFhOGFadHJoY0FiZ1g4MStpSTJaWHhuWGFmVnA1Ly9GNitENG9zT2hXc0pnRnhtSjRIMHMxa3pUVVdWR1huTG5Sd3NGaG44c05TenNORngwUFZEcmNubUF4ZzlwaTcwM1ZaY3l2elhGZ0FCTkhkdUhYUGJQTFdPditsYjU1QlJqekx1OXRQR3htSWZuM0hBT25vSTRPRzZpZGlQOEVpTmJQdlVyMHh2MzhZeWJtUTMwdXRIQ3hwVnlHOWxvSlV1bndEZmJ4QldIWVJXMHNsT1NpaG91dURLQ2xWUFhnVzlBN2M3QXVsbHF1aHE4Ulo4Z3A1akdURmNudVU3M3hzbkQ3UzZrcHV2N29MZEtqTHNRMjNORHhEUmdqdWdOMWRpV0ZjR0tSUXhLZlRmdjVrK2xjbjVWOTFxT3l5NUNxVjRwcXFxOVFXNjFjWE96bThONVBEN0hGMkdGeWRLTlNMQmRDcVdZVldXQ2tIdFljVXBWb0FCWnRTTFI0NmRWNHR4d2hrU3ZIaktONEN3WWZiR0RqWTlCK3ozWEM1c3VZMEhLcnNXdkJieWszVDVLdG5iOHRZejU2NTE2K2haZzVNQTcyUHpJWFhML2RJL05pSE1KV1hSelVVbFE5QmVyMUx1WG1IMFRSYUpvbVNOd0lWS296Z0RGQnJKRVNUb1lySFlWQ0RocjlUTWN5U0U3MHVoT0tnbGJaVllJVVNUNm1PVXl2c3lQc0UvYmRlL2hRWERSVWR2N0xWMzhsQzkxTjkxQ25aNGhpTmpSSFVMSEVCSDVHcmhTbXlWaXFTd3QxajlXS0p4ckFmL3VXcDRsdm40N1pzTExBS2U5VTQydVYybHdMUExBNDJqMmNBYjlQSFZpVEY5YWx4ODR2L0xIU0J6VU1PTGxTbDBUd1BNbDFrNjBnVUZ4akgyV2ZIYzdBUDMyRXV6V2NiakozclIwRGpSWXNjQ1RCTVh1V1JMV1dFbjk3RUVQOFlFUmc1TGtGL0RUb3NkalZNMmVTc3lnQStSVUM3cFZsOXduZXlKVkE4UVl0dDBzenRXSGtRbTFtcXJDWTFiRUJHWXRDMkJWaG9ydlYzaTdObWNSeVh5ekYwU1duS2czbDZ3ZzFtUmp4cEh1b1pDTFdkV0dzSXRUdGRIcjhocDdqbTJUNHJCNUJTZ1hEYmJnaXlROU4vTnY2U0pnUXpmelliTE8vWUVtSUZOYWs5dzJaTHZKTnlISnN0ZmlWNXNGMnMrMGx6VWdYaG9CWk44RVJrb09NWlJnN0o5cll6eFM0OTBFc2RGY1RGK1NNbS8rUGg5TDB5Zk1CWGJBU0NqN0Z4ejBERk1LN3IxblRBdHpRY09relhzaVNMTTViOEo3bW5ySExFV2FlSXAvU1N1RWdBd0Q4d3NoaytUNk1POFJTVHRVRVpEY3R6S2dDMEFpSHdMNFhxa2dtaktzdUtlMVhnZE9pbDV0YlNTeG1OVG9CNWJrTjZLUUszS28za3dEWE1VanVlaVpUcFp6SmVlMEpFMGw4VFZQcVA4ckc0Q3RZR3U1MFNNaXZ5YndGcE15SUEwSjVTN0dKZU5pRENPMFFpcjNWbUlGRXNXeGl0akJJTG4va1B4TG81Uk5ZTG16RkNVR0JTLzY4TlpMaEtnSXc0VjkvV0twdWRNTzN5Ri9yeE5oV0txdmhzNkxRa0lsek1mT2xHdEUwUC9CRXVJNnd5WW1UNFVqeEtsMjVBMjFUOWNwTFRETU1TSTdIRUoyVk5XdEZ1NHJxenY3NDV1eXFZTGlyZC9ESTYwYkE0Q2NOakR5N1FoSG54VVB2YXRlRmJpUlZnR3RiNjBWKzFzYTlYUkNzZjZLNzhWWGZsZzkyVjA5MlZEM1ZYUHB3cmZWWSswbDE1clB1emozWld3dXkrWTdaNng4RGY4OVViNnRHaDZuK0hDVzYyZUNIKzJIK0JZSWp2QzBOY0psZldNd2t4K2tubTFVZHpGU1hOcG9WQUhadTNFTzRiLzhpVjdENDZzSCswR0E4aTRKR0VVdjVBcVhxbGxNZ2tPWVRyUEJJNDJKVS9FYmF4dXYxV1JaaXVRRTZvZlQyeExVZ1BSZjdJZTNuek83a1cvUWFvWUZIWmNZVStQNkJkYzhZMXYxc2VhRjliZHZrOTdUSGZJdzZlenUrR0s3K2VKWmpmdjNxL01EWlNJVktzTGpwSkg5c3p1OERDcCt0dUphaTdmcXYxVjladGpXMlNPV3I2cjlJN3BqcUZ1Z3lFanFsTG9GTnozWVA4K0dKK3liTkd3MmJUS3pSdHo2Q2pveERPVldLVkpJK3FGUmprNWZRa3I3d1dkeDQ2SUxOYzh6VzA4cndIK2pTK1dVL3FTb0VzaVdRb3JPcno4RkdmcjZobkN2Qk00Qit4dVpmTmVNbnNuZmFjUWNpRnVoNWI3TkFCTmlSL3ZkYk5YMitXL3lKejRhaG1HN28wRldxSmNQSUo2d1k1K1dJM29VMi9obTlQVzUxQVNpb0xwMTJOb1lXc2tFa1MwZ0lPbWdSTHJoVmlkbWEvSUQvQXJrNHVBbGcvZzdyRlpWZ3NRck95b2p1MEhaUG9qNktVc0ZVTGZPSCtadDBCOERiRVJ2cnQ4bHk2clBmZDVsQ3Y1dzRKN0xFN0xQeVlTb3VnTFE4eDVGSmF6R1E5dE1jalFqajVTY0pTUk1ZQWxIOEJrL0NTUjVCWUFtaUpvTFhZb3pDb3J6NVkvKzZuUHZBLy8vVk53VSttc3QyQWpCVG9CeHB3QURJTHNDVkVYb0MyS0cyY3VSSHYzN0E1UGk0bVA0c0lBb09kQ2dzUU1kMGZ5MUFiYTFVZ3VMSWxVQUlPRXo3U2wvdkJTY2gyR0l3Z05ydjZ3bGVyaGZOZWZWRC96cjM2b05MVjlycUZoYUwyYzE2YnhZcDMwSlkxQkZyTGdoZ1l3aDhwRHJNS3k2dldNTWZiRUpKeWRYbnhJSkhoMVlNVTRyeGEvNXlydGtWdVFkdDhxL0VOb2ZoUkNsNkljMWp2RDY0ZUpKdXBqc3k2STdQdXlQSXdZcEo2ZW1wbTRHWUdOTU8xVHhZT3JrNFdkUmcvRW5xbVgycW85R2puUFR5bHNnZmltemVKY2FnbzNFeEVMQjI0ZEx1Wm8xTVFTMTlyenlwc2c0RXR1U1JaVU1XMDd4NjRNbmc2NE01WGxXdjgxaW5malArYlBwVVMzK0ErTFdTcVVVTEpMbWlYekpUS1d1d2lSTWd1T1hqeFlwVDByZXF3K2FOU2JmN01xaWJZb1JkTHFBWWtmRHorU0QvTXBJejZyZ25XQmxGdzRzSUkzSW9VT0FLMzFNQjhtWUhid0E0UllDMm9uNmVQd0s0TjBYNEZVZDV4ZFVXQjZEeWVyK3hKelR2RVM1NDF1SEVOWkhFZFZsRTNYS05uSFZaUlpxaXhpc1F6Q2t3UnY3RkJLWWFBQkVIV0ZxY0lLREh5dGlVQ1lITlZNdHQya3RhQUVyMVpqVXlERWo4K0htdytQRmVJWndPbW9OTzNDT1Rvam90T3hPZ1Z1R2xtd2VyTjRBSE1YZFRockEvZEVNZnl4RUt2TDZ1aWxra1ZJRVhOYTFmdlAzNnZrbi9RVExiZm15TXU5dU8wRXJwd0xvQTUxL3pBcXExVktPYXYrNUpFUUxhZGY3ektqSnpmRjRNb3JJNHZZL2NzNGVFVElWTkJhWGhxUCtLRUwwZ1BYUmF5dG9EWDl1MGFWeDl3cGc0MzJCTHB6a0pMTEpWNjZmako1dmhKNUxMTlNDd3RqaFJUWC9BUlpNSWxtRksrTnZxKzNUTmNQai84TzZXc25aVmpaYmdzRE5VbFVvblFScVFpdkRKYzNzcmZCOWo0UUc1OFlMaXNkdUVwMXNZSGMrT0R3K1Z6K1h1S2pSSllpclQ5MG1SejU3eVV4Vjh5ZkloZnNNaUt5b25Zd1NZV1dWSE5NenZZeENJclQzalRhVGF4eUFvNVVLVGdVWVl2eUFJSmluQVBHOVg0eWJtM0xXK0wrdm1pL2o0NTU3Ymw4NkFSN216YWVwczBQdkJ1MjAzYmIxcytSK0p6MmxUVTRTZm4zN1o4Ym9oNG9QR2ZpbUZiUW1kZkN2aVJHbFZ2dE1TeUhGeThabTNBMWRXeS9OOUxoc2ZaZ0NlczVWZnh6d2syYUlubFcveHMySENMVkhMZlRabnJQSDlDejB1am9uc3Y1eDNTSTV0QldibFhvRlBWeWc2dllEdG9aZUtWZE9MM2VnVnJqQWMxbkp5clU4RXd4a01aVHM3UkdoQTRuc2R3c2xWcnB1UFFveGhPenRPYTdwbWZ3bkN5VFdzM1FxTk84RWNWakMvU0svQS9wQVlyeVJndkZPR3dMUjdSQUlSVVRoaGpVbHRHK3RrTVA5T2cxT3FDQnNtQ2ZucE91V2JWT055aWE5YU1XZjJTeGxIN0JLeDdvQ2M2TlhUYlo4YnQxZTd6cGdieDFPNFQyajA5bktkMjM2UGQwd083SFVtY1VydW5odmdpcjU0NC9uZ3EvdlRsWHQzbGZBY20yVnhzOGF1UzU0OHRmcU95dzdIRkwxNWVZV3pSUlM3NlZ1Vkk0NkwxZTRaYWVYVTVTSTJ5cWJ5NHRLd3pzNm04dHB4ZTNXTlRlV25wbzU0OW03UzRFSHptaS9Xd3VrTVRHMWUzSUN0T0R3Rk5NZjJCZEphbnc4T2JsNlpQV1Y2cVQveVdYSzJ5Q3BuZ1NCWDNzdncxcE9IZjBseFhhUmJkSjRMSktUQ1ZKc2JxRHRoRW91TDdiOHMzN2N1S2p6bVBxR2toWW1TL1FyeUoybmY2Y0NZNUhsRFhtS25FbS9kTXdJWVRMYkRCQTNqYTd0Zm5hc3BMQUk2MkVjakJSSG5xbVlueTFGdlRQYXdET1VUWSswTlRoa28zTDYwTCtkMHdHUDcvempTUC96emR3d2VhUjJyS0Vxc3IvNDJaTUd4STZGOGN0MGF0eWtLT055WWRwYld6RFdhWnFlNzJmWXhnZUJ5ajZhWEVsaHVBV05tZ1JtNnh0Z0Z2cUh3cm9YMzI1amY5MUNDY3lCQlBjY3diRHRxS21KR0llc25zRkFmbFBhb1Z3bjN5WjVWUUs1S09lVjBGV1lBNHBKTGc4M2dsc2hDUWpNeE1xVmhUSFlseEN1ZHpBVUt5Q2dTQkltdXM5Zy9wVnVyZ1cxWTNEUXE0Q2dGcmt4OEgxVy9RV1BUM3JiSXhLYkZabDdmRkZoZlJxOEJFQnRsaGZBcDZzcjgwV3VScVhJVzBaQ0ErMVdMeVNNekFuVW9jM0FCT3NtKzFQblRUdnViNTNadWNXMjNjWTAzRXhNTENKV0lTTVpHSUs0ejg3d3p4aEJJZUFSZkw3MXNWWXNVM2RCbFRCRlRmMC81Y2taQk85RVd0ZHlNaGVWSWtsVHMvU3FodHV5SGpOSjB0Q2JHTlFNZjBEZ2MzT3NldWk1QWtrTllYMVFaSndOSSttWE9YQVBORmNMaEVxMHRCRVY1NVdackc2aGhHMWtIcU9LNk5Ha1NCNS9DS0pXb0hHMS9Ld29xSi9RM1ppMkxYZWpUYjk5SlhsckRibzFFUTBwbHZjYVZrTkt1QnB6dlVLcWU5K2hQckRzMEtUdUtXVmpTVjkrSFlLd1Z3ejVKNXRXVkhlaGtiQ3psU0pCNnVMVVFuSlRkeFJiTkJzK2JnVWxzZmV3ZmY1L1NDNStOSFRWOVN1RWdjQ1BBNGRsSXQ4eEJLZkVCRDBqQ1pobXlyK1V0aFozVjhQS1ZTWlpxWEtkcEJacWRkZEtFZnp3dHRhYUNlM1NmSnZYak1CVDRTNlcxb29MQ05sQ25wSDJqb2gyd3B5WnNSRTE3Zys0Z1BQeWs0ZkZENnVBVHZTU09xQjc1dWZjQlVVN0V1QVRPaWdianE4akdpb2FCcGxXQmpmcFZRbDNvNjhxRVA1NVRXZWlmL0VIamlRNzZNeE9rcVBGZmN0UTRBRVJFN1ZDNERnSWpRcG42VDZNT05ra3plUDMyTnBBMXNhS2xuYjAxNG9ZMmI1SlJwcjlGV3lQaG5CNVlQTTNibnlZZ21rOXBuTVNyanp4UVFDSnRQYTZYNnU0RitlMHBQSTNUb0QwdW8wNnZFOUkzNDFjdjZ2WXFMell6OWU0ZmVGU1JyVjJSd3pFYzl1NEVtOHh2SUk2QWZ0WEtIb3FYaWgwcFhIb3BSZUw0aTZqcGZPcVltV0pMZzhOZ0x3ZGxhOUpWNVl5UEtyYUppRmIvVGhiek0zSVBVVWxUVDg5ODdlZVQrT29tWFJCOUQ1eWs3M0NRcTJHcDVTVWJKUzJJUzVnNHRoNHdXbFZncldhUGZJYVF3K1c0RjRQdzFEWklTL1M2T044R0hFKzNFNWhSL0xiWHB3MVhZd1BWVVY4VUtkTURzUHYxRDBUckZ5eHVSaEt6cFEyLzhtemw2aWNNNkhySjM4RUtYV0pvdHdXaXpJU2d3TDNzaSszQ0JpOEZ1TFVBWWY3by9NRXlNdXlIMUt6bjJjUlZ0azdMcDF2N1lVRzhtdXNsTFJCb0FZTmlFRzlVL056MVBkSlEwQkcxRTRQWFB5dlNpZVRSQ0crMDhLanJzWmg3MWNzNmpzNTRBSTZQbjdkdkk2RjBheTlMN1lsYWJ0VkpSKzlhRmRER2h2RGtSUEJIL2FONHdtTlNvbk9BTm15dHZtR01WZXNObWMrcUVEWXFVbkJJRUpBOFZ5bU1tVmFJeVhqTURnVjJrRVlxMzl3OEhjeERNaDhZNXFXZFJXRmhmellJYUF3eFhSZTZQREpBRy9FNUV1VWorNFkrb0NLZjNBMUVmL0pDK1VTaU5pUGh2NWNqZ05yc29taVFxdE1hU1h5Nm1LV3pFQnZOTUpLVmducTJUczlBQlFFZWlXR2l5ZnhGcUpRWkx0S3BLOUw1UlZ2S0UzVExETVpVSVNpWm5ua2lsUmJIMWRma0ZkVWtBTVVjM1ZhcWtlU3hxcmQ4aFhHb0tMandVaTVaeFEwTHQ0VmkzVGtNY2l5Zms5S2ZDbVhHbDNHaGRhRGpQdXArZ0ZDTEg0U3lrY3NTNmlla293S0VuVko4NGZoejRFaUVDZkZXYXc0a0F6VW5oSVJLMFFRc25lWm1iTlEvb0I5YXJzNFdyY3I4Y2hlVGJMY2pScjMvMUQvV1ZtVEdIN0h5V1drNmxWa0crYVJCOW1wL3hNZ0hSMVhMMUk3NEIzU3dwU3NTR2tHSEdZNHFHUmdjNkFiRHVSenNQMDQ0OENSS21iM1U3OWZ2WkZIWm8vZGhVMDgzWmY1MmZrRlhWVCtJb1JhV2RKLzBnRVRqSDluK0hlU0ZueHdMMHRaNkNiMkl6WVFZVTB2UU5rRGM0R3lDYWh0eUh0K1B2em00Snp5UEcydWZtajZ6MGNpQWJjc0NkSDhNblpxR2FBejdrVEQvRDYvWFNvZkxiRVA0WjFlZVFxRHJUVThKUFhQRE5ZYXBIR283SHZ6ZmxZVkRKWVRoYnlHdUdHSTBMUEVrdlVHbG44bTJRYnRMMGFOVTlrTWpXQkIzcTJYMnJaL3RyUUVXbXFhRlFvK0U1cFpCSzVHY0NZMkVzcXRWb0FxSVgvbWlvMFVUS1c4VW42aGRNT09CcXBFYVRYc09EYVF3RHByVjdSRkxrRnBkd0c4eVVzS01NQ28rcTF6R1RqcXIzOHRTT3YwV2ZOMFZTTkFuK2FlQU5tTDZZNzhTMDZ6b1kvYVVWRExxQlZ6UUJ4RXR1V05XTklTbWVXM2lMeTZKZTc0eURCMm9vb0RLWm1ETkdjL3pmOGxVb25BRmZGWHNQSXRuVzRudFRBSzlnakxTcHMyZTlwVE1RaitULzRlMUxvT01xcnJUVnJWMHR5VzJ3all4TmFDdjhFMmNoNFdRYmtrTW02ZjRKQ1NFenlTUk1obk4renB4b2FWbU5KYlhjVWh1Ylk4QUcyekVKR0VGWURJYkJrSUFkd01SQUlHWXpZamRiRUlRRUUyTVF1OWxGZ0dEQW1QLzd2bHYxK25XcmJRekpqSDMwWHIrbDZsWGRxcnAxNjlhOTN5MFdkR2JZTHFvVHFrMmVIaS9JMmFTQ3FkQmJCcGpqaEtaNGk4TnVvZ0Z5Vk93K1Z1d1d1VVZVTWRBNUd0Yk1JTG5JNU52eXNsVmdRWWQraXFKZVptNFU5ajR0UWJGUzFyYWxTSEJQTkNhN0NJdUU3Z092VzQ0d3pvTzNMdlJFZ1g4RDRSZGxMb0pTMzBKbGlITWx0dDFjVExUWWdyTCt5dUNFc21oUUcweXNac0FiNXhKU1JWaEpIMTFSQ0NqWXFpQnNMa01WeWdMQlFoVWFQN0pRaFJ5SHNoRVVVQnFlMHRnUTFXTlVSck1iZE5rNDUrUTZGd0NTOHoyREo5YVJCOHZXMXB1R1V3emI0QWovMFNWb3c5SWlBV0ZjWTVKeHdUWEhaR2hLSElvSXZSUHAyQ0IyZGs4NkhxZVBNdW40OXhFNDNjanlhaWh3VVlLWllQSzhSZmpneFRpb012TmNrQjU4ZGFPTEQ2dkdKTnFiOVVHb2dqQzRlTmpieDMzMXF6WW96ZGpBQVI1MFpmSmh1eVVnS3kzMjdvdVlPNDZpeURyL0dKajJWZXNYTEJFWUk3TVFMRmJlUW1EeVlUOFBwMndKWXI4S2NrSHdXZXF2VW9OZ284b0JxL3FZdFpoRXpNSWR5M1FaNU9NWFBNcWRqZnJuQWtjR2JqN1owLzJDcDFqVHVYcytsaDIzMy95OVNmNmVnTVlVNU5NeFNvUWF4dWdreGVrVXhySWJiaEtNMTlDN3VEMUMrdzBaWElLOE9UeTlITFoxMXd2a2pEWis2bi93bzNJS0JJQTFCV0ViYlIyOTJJSm9nbzcwbURhNE1Cb1YrT0NhUkhJajcwWjRUVkRzSXZGVTk1RGVNSXE2S1JJL0FEc0htY3VVMS9zVXREU1IxQWp2THNGOEJYVWxiY25vMVYzQUY0ZkxQMjB1eklXN1ZMK3kySFJNNHl4dmRKOWhBVTJuRkxwZjBDMUJjeU5ibk1XWUFPanBEQU9iYXRyZnVPZ1p0VXRDT3FaY0xMYmM5WmwxazcwbnB6YnVaWklFSWVHNEZPSFVhZGxwRWdJTUtCdk1HTnJiZFdvVllMSE9lYmtPRnFBY0hpZFk0NWdWS2RiM2R0dGRtMWVYWGFRaU1LNlJSblF5Q1h3aGpSQUNycTFTV0dIZ29YU1lDMmNybWhMb1IrN0R2OEVDeUVlOFl4dUM5eW84bkxBaUUwQnF3N1k2MjNNYStEUDhEbWhTWXBHWUpSMGNSU1R0Um1qNnhJN3BnMHUycnFCdnhyd2RSVUlzR2h2cmNGNHcrRVc1d2grYkduUFVwNzdQVVJkZTdnSUlvclZrK0lYSzFKZVcwZTFjQUloRjc1b3pmcGwzcVd3cmVkZjgvc3U4YXhDTFJlK2FIZWV4cVpIM1M5NFZXZ2wrcHZZRXNuc2hqYUJzTG84RTBHSnlqTnEvNGtHS3NGckxnK1ZXQ0J3Rmt3Y25GM0pBQkJhbU5PU2ltOW8waVhVUmpGVTBUVUp0UVhjeWJnOFpQZ29oN0duZlVSbi9FM1BibHlJTzRWRm8rRUhNWStZTVFEb2dXempObTcwT3N4M1RVdGVnTzI0MEkwczB5U3BPT1VMRzFVcXZGU3B1WnlJbEx4Ky9nLzFOK2diSmR0blFYcVIzSnNRVHhOTTVncEJWa0VON1NNMmtCT0dxdVhKK2RadnhWQmdJZ2RuQ3JSdmdXZFZjSmNaY05VSFEyK0N5c3JjdjdOOURGdlNiSElvMlNSV0VUSVFVMjFqVE9GNnYvb0dNQkxWQUlVUUVjZHZNTlhvRXVoYjVHU3Y4Yy9KaFhLS2c2cGdFTDlHY281RGtYRWJBcXloK3NRTEhnL1pPWkxVc1NoTVkzc1F6bGtCditEUTJXWUcyWnh2TE0yTmdpMWFBYm03eUkxcnpKMnRwKzRQT2lHNmxUZ25RaDdEbHIzbzJFbkMrUFh3dGRWSS9XYnNBM011NnFteUpDWUpRMmNMMFdLcmhIU2hIOUk2aW1sdDhIcVpUYW54dndlcWpFSzVuYnpRNjVtbU9SRFQ3VEtKL3NjM3ArZUhhM0N6YVo4b2Z6REF4TlJqRUgwa09SSWMxZEdMbzQwUE1OT1FoNHRwYVBvODQ2T1VGNmtBY1VJV3hib21xZ0lIaGRxbWRwZnNGam5UQ3dqMStDVmo1aHZjdjJYSFZGVnZQR2taeXJNVlRZRWZ4ZDZOWW5YcVZQYmUwOGFhQ2phR3FTSExIelZ1V25QbjB4alYzTUFrSzYwTXdZYnNiTHpMMkp1bHFyL1A5cUg5TjlCWFo3S0VCRngrL1pBR3duZlZDQzJYa01LeVE2NVZZNzdBRE9oOVI5VWtpREdIdXRkNklXVlc5a2FJYTE5eXVOM0w3eEcvQ2NKOU8xb1hXR1FGeEpOVnJvVHRhSGtwaFVCKzJBQTU2STFOWWY2VHNvdjVvd2dKQUtsWVdKSHZvdU13MXlZWTFMZlFFZUNpaDFLMEloVDJnOEtSb0dqYlBZZE1JWUZOWS94V0hJc1Z2QkpDSGtFT3pKclNxTHJUZjV5Y0VSWHhta1dnYjVCeTRPUFkxWE5ZVnRBaFV3RVdUdDUwQXNaRkJEaEp4dUh4SGsvZmJkWUFweUhjZTRiMVkvRzZ1anhsbTAyT21Rc2NpalkxV0FSQ0czVysvZmZJVWt6VUxmeDk0ZzVUWURJMWVISWdlRWNFRnd6VDVDK2ZSbkdBNmx2aGNMNjlqYzlKOFBqMTZjYzVCQWl5TUJJNG9Kc3o1Q1BBV3VUZmdja1FVZFA0MEpuRUpTb3o5SUNmTEpONkFmRGwyMDIxaTFFNFNjSXRSYjV1bExVOGdKV3FEOFV5QVdsa29nQUxqZEg1L3NsTkUwRnFwTWFqODRhUmo2eVowTzdtYlZjUWg1NXRwcHBDWmJZR2c2UDNDbUxVTlZ0cFJ1MW81eHo1QXlkSThIMURDcTRHbFJ4RWc2bEhGekdyNjlJSldRa0tUMlRwR1ZsTTlJa2NwbEFIc2lIcGdHV0lod2lteHhiUVJ5ZDFQaFZzRjlpbzF4QVl1Z2ZiQjBrM2VjMUl2cVQ5YWdtNm9IOWpQN1BPSnFKa2E0bjNadUh2OVZXeVIzN2dJM09WY05HazBveURMMkl4YXhIb3dPTFlWNit6YVNpM3UyZ2wrUXdZOUpvMlpzVCtIU08wV2tOelBNSW13Z0FVY0ZDR3dBaTR0Z2pucGN3dkRpa0RWSkl0d3UvVUdLNEtYM1lVWDhSR0xjQ29taGVNd0xjaG9CeDZseVBHU3E1YjhIRkdkS2UrYnpldkEydVBZdElqY3FXQ2h4SXM2Nmd0MFpEdkt2UUREdjdXSkduc0ovWUFNVU9HcEVEcUJEV3Fnd0dRelpzTXJ3MEM1aDRwaHVCNmo5WFZGN0FwdnpSR3NKVStHNnBOUVVKSEhCR0JCUldnRjZFVERyK1NMRE1hWXZOWnZJejJIeTdQY0N5aGdaWEk1THJqL0dRRmFKNkdpYVF5d2o0YzBBQjZEazhKQkpXaVJGTkFSSm1aVnlYT1JMQW45YVh5eDhMQ0ZZWnE4bURjWkt6Tkt4Z1JyREsxd3dGd0pwMENQVy9PRnBsWU9DeDE2RkIweVRmQ1pjSTZ1ckloVVlPK0ZZd2d5bnpIMENHQjJOWUw0QzM2eVFtd25MNUEzQjdjQk5ETGtMT0tDRnRIZjB6UU4wbkZCSFFBd01RYkcwS0NtVGsxKzIvSVhKY005eTlpQjVxWG9vUllVQ05NSHVvVW1LUnZVcGxXQjhTMjJUc1hIYkErQ09rRFlSTlFSSUxaNnRYWnIwQ2RaUTIzOHVrQzhRdUtVMlRSenhBQnp1WGpvRThmb3lCMCt3RlpWLzRsNEdJdGRVcGhISFNCRk9KQ2FpanRoZG5ORFJVMU5wS1ltV2xOVGlaMnhKY01BbStZVzJkS0ZzQ2ZGWkpQODJUQi9nS3pMRnRMVkdGNGNpK0gzSzlzVHhOLzBuc0tHRG9IV01FeTN5RnE2a2tQRWNtRkNrMk53alhmTGJPbXZpQWJxWmJtejFMZ2ttbGxtWUcwbEt4b1NBemZncG8rV2dEdStPYzNRQUIzdjFrc20wS3BRaml6UUtuRmhSV3k2eGNSNTRmZ3RCck56YWlVaDlhM2JBR1pQT1RzY3k2d1ZpZ1U0YXV2RHlZcnZ4TzZ3SlZXd25OSGkrdGpDMGhjdUl1RkhMY2RpaWd5V1VjSEN1ZVN0ZVBDV1dTdVVmNnN1ZUVzNFlxRzMvSHBKeS8zZ0xVbTJidEVVZWx1THBtT2t1M1BvUHFCS013M1RwOG93dlhMdWdPMDhtbm05VFdIalg1Q05rOGt1aU81QTgzZytSZC9WVTVPVUt2bWdVZy9RQy9TZ0tuWnkwZnJDdVFNcFhyY0Z2Uk1PVkxTSFVaUzViYkF3emkwUnpKSWxpd0NJWFk2clVWRFRldG1ERlVoNWo1aGpwanBNQW13TVlFdFNraGQwNDc2ZkxYWHRLVWlvRHlJblFsWVdGZDM2WVFrVUVrdE00Qld5cXU3V0xhRzZndmRaVGJhZjNZOEg5OWxBYkgyNzN4TGNaL01xZjNndWFWV08vS3R3UHhHYkd4QzhNam1CUkdzUzBScEFOTzRXU2xZMW9RQlBvM29LSHdJK3BaYk1ucEpHSldrTGFvSHhLZVhFWDdMWWM3N3pYR3pDdU1raStONGpyZXpkQ3QvRFgxUWlZcDE1dDB3VmFKS0dEa1RUTTlLMEdVU1B3NTRBY1RTbHc5WHIraEYvM1JBbzkyZCtHazdpRkFWSjVSZDB6QUZqOE00aVpMdkpOeDN3UGZmaTQ1Y0F4ME5ocjJSeE5Yc3U5NGxSYXdwTVRxN2hkb3lXVDl4OHBWS2xjcHFRRGlDcVVxeG54ZUp2Z0Z1NWJCT3lMby9BKzF1czBxVm5ZVEE1MCs0Z3RDV2lxTnFjTmVqY1lLcTl4cVBpTjFob2x1ajMvem42ZlNkRFJuaDB2SmhXUGJ5RFkzQUh0a0FLV2Vydm1NNUlqV2dLVmk5aGFPWHE5em5tRnlGMC9UMFlXTHNKdUJXZ1lCM3pJVi8reDJOOUJaOCsxc0lWT0ZNSnQyT0E1bWRDYXY0VlQxK3RqYTNTT2VvTWVBdURYdE94WmcxTFJ1WmdrcGk5eHUwSHVaWHhIYUlKNHI0TkZRTjA0ZDRCUWlkNnpuQjVheVg1QXJzQUZaU3dLeGFNSmNMN0Z0YkNIT0xTa1ZieXJsLzR1cnN3MitOZEY0Z1Y3bUs2aTgwRTNoWFBwNGJPN21LamlIY1RzU0d2d1EyYjcwWEdtKzloK0RrMXJQTmRkTXBYWjlBWGNsY09wb0ZBK1JxQjhoWHBuUW9ZekVnNjJNaE9kTEJMbkpaQURCTDBXSXNTM0J6b0NWQWdxYXNkcThSNlAzVjdvQkhBUXlwTnFDNmh0aVJnbkJoenFFZVIwZ1J2Rmpob3NkS0F4SXJZdG8wbWZtck51TFNWbGd0S09HZUVOYVBLbHJYY1RZUGVJb2g4VitWeHpyRm1jVGpuUXJBRkM3aVJjUU8weWpRN0F5S1ZLeEtVbWZRNXErSEFCdEE3dW5rYlFPY0VGVmo5Q1VMZGtFYVlGYmRkYmYxTmNKMFRpbVF3eVZ4Y1NWR1l0WStidHd0MytyUmhKSGxUT3lFVUR2a0VlM29TNDgwU05OYUtBQjk2TXM1U3lYbkgyM3d1ZWQvTmV5dlVsR0pxcGhUamJJb0dNY2o0RnJNNlpZZXJnUys4OHlsTlRWSHM2aDJ1QjFXbFBySE1kVi9Fc25GaHJiMFQ3U1ErTWhYdlozeEFiRDJLcGhyNFNGQzczQjlZR3ZSUEExNk5uZUZMVmx5a2hKVXpLQm1SY1Vxc1NLc1JKUlZGbWNMOFdXQVUwRDROcndCMGZzYjRjZVZGK2Zoa09EQTUvWXd2TG9xSEozUXowcE1hQWdXZ3RMRzhudzhNQmxoYURxZk4yenRRNW1uRmd2dFUyTVd2NG5LR0xxZGN2Sk94R3hpRlhKZmNXV053WnlvOXJwVG5Cck96d1FmSWpiT1NLT0dDQTVDdW1qNGM4TVMwWGVIV0txNVc1V1FyaDBIcFFoUmtJaFI1Qjd6WmxqOUZNUmVkaHBxelg2L2JVL2N4VUd6M0hXRlY0Qjdtb1VLY3piYVBCeEtDN2RCV3Z4ekRRbDVsc3JERlVvNzJPeVZiK1A5bEcyM1FWMWFtdm5rU0k1NmZ0QVRIMm1WTENMaTcvMGs0Vk9KT1Rhb0dkN3k5TUY2TTZNVUlYd1FUSVZCdUxkK3UxZHUxN3UyNldOOXU2SXdrOFpRb2hNTEtJS2Zra2E3enFPUlhkNkZZaW1YLzRaOTdiRmVLcktCNm1KN0xmODhVR2NMYzB2ZThlS0h2bVFJRDN6UG52dDJ2M2ovdWMvL2IxZHZsNTdqczlET2NUYmpSWW9TQkVwYWoyYm1NMWJtZjM4bzlDNmEyblZpcis3VWttS1hlY0xJQWdBUTRGV25NMW5DU2thcGdULzNpQnFFbUppa1ZLSm5pTjBaQVlkWG5tWEZsMFQxYklvWnVhSnBBWU1Yd1BaYUpvY3pDOXhLeEJWcEJBbE9PS3lzRVBDNjdPbmVpbXkzR3RhN2dRdnRLTHJRRGRVc0Jma01QRjlwQ2Zmd3FuREVCL0NyODFJTHFXcmg5eVZNTUhjL3NCazdHUmZ5TGpGeGV1SjBjY3FJQk9vT3c4U3hZQzljNG1zZHArY2UzRGRtUDhWbGxFV0Q3cVlyZHF2YWtEa1htRGZHRm10c05NYW9pTnE5NGQ4SmNnNXdSbDhGcElLaWZUSGtDWkRvaDJzbmNnYlk5dUM0L2U4djRRZnRDYmxIdVRMeWNRVUplYXBJa1RFZmpkemxORlduQVpSZVdLWGRoRjBTR0kyREpoQnJoOU8vNnYwS3hGTlp6clVBYnhDNGxOMDdtSkM4UmkrS1NUWUdLbklPdjg0OWxkVE9zQlV3WW1RQm9FQXZwazhQVk9FSnVJdEFZWFdHUzhibmZvb1hlOGRSN1J4VC9FeFp2M3M3VGJSQ3lBeTljQ0l0anYxTEhmbmhoTTV0U1Mrd2NGOVlaYmhxd3QzVTZLbFl4aUtncTlFU1VFWmFhSWVuUEJmVHdPSFNLc3pOTy9KUHc1L014T2ZHR25iMG9lZk1XTFJoaDdTVW9PWGJySFFyU1F5d0Y2amhGcmZqLzgraHpVb1ZyVGFkbmZML3lrUGduMElNZE5KMkM0aVZyRDZObWFoQzZ6am5menRHMFNVWkJCc3V1N0xTdlNxajNDTUJiL1RWb0NOZFZ5eDd2aHNMUTZGMjVVSUV2YVBOWXhheVI5bmYvaXAvQ1RnbzUxWDRIKzQzeTZFRGpOY2pUMDV5OVhIU2JLRzVRMjJrbWUrdHA1WGNHYlU2MlJJcWxJRFI4QTBSU2VDRHlLVjZKeGkrbFNPNGlBUmgwbjNLRXdSMWZXVVNZYStqVVhOQ1FSQjMxQXdnbFl0eGFCbTNKUlZXTVA2QkFXQlNaa1VCYjY4U0twZld0ZkZyYzFPQWNlSnlXVUU1UjZIZ3doOWZXTkQ0OUxYNk9WRUp1RzlBNHZzSzZRbFQ3Y3J5RFl5YmVpcjVLVGE3enJhbU1ueTZoS0w2REcySDYzQ3o3bktFWE9UMUFDT3VOYnI2R3hpWTNONCtzVnlJZE9keDJDVWRESjBCS2xEVHE1U0VSN0Q4dEdPWVhUOExoODVCa29xbTljS3hiUUZNQ1hFRW1oVnhVejBWVHJWUHlZYjhhY2hBRVhLemRLQkR0Ujlub0U1S05wcDZFbCtuK1doRTdyaURVMlV6S3BzTWtHWWR5MzIxcEdTd2xTNDE5TDZrbm5GSWp1Y25mY0RxTjVHajRCcFFaeWEzaEcxcm4yMHpzd0RSaldXODQ1YmRjbkVKRmdqNDFMd1c5Q2o3b1RLWVF1OGNLNUpaYXdWNWMyRmdxd0xkeENoUFRIV1QrdDFidm9TK3QvUi8rVXJjdEIyeGxhMGhoZmptZ21QM0V0aUppbUswSUZBZGE4WjRud2NJak1IWHh6NkJTQkRNamJwZ0E0UXdzeEpiQXNWOVhRMlZTcmQwTDJBRnJMbmdIQTBHR2xvWmJRWUNzRXBDM0F2Q2JnN1NBeWFWaG52cmxBbmdLZkpReGM4QTVtUzRCeE1JSW14dlBzNWIxYUR3MnVtb0VpaURmY29VWUlJRmxZZ3lMakhtcHl1UG9mYStMaFJGZElUS1ZMcGZaSlFLVTZYTElMaEc3WHBjcjdISUZpOE5QRWhnd1dMelUrUHk5QTc0dUVNME1Gd2ZZeFlHNkFCYXNRaWpxUWt1dFQxZCtWeGZmbFhzS3NoR3VuY3hOWUZwRVF4T1lGdEdXQkM0SXRNZ0NtSXJtUVZUUys4bENWbUpsQlpKTnRrcEhWckpWeTd3R0hwVEFJamcyY0hXWHA3OHJoajNzRGg3dUsxQUFWMkI3K05PaWg2NENCN2lIUnhROWRGV2Q2UjcrOE5qQXRSOFBnVU5DWXNuaERZV1BwdDYxaEFpL0R3TEFKNksvY084TDhKUFF2ZTd3UFVUTDVyMmZodThSSlFIM0FNT1VPdmVoRHo2NGdQZHE3UjVpdFRsQ0dCUkpMSFlpTmhxZHlVcXBQeW1OVXhxeGtCOE5ORjk4eTlieVFUUnJLUWVFS0dLV2FrVDlLd3crd1AyWjNtS0hleDRuOWwrZ3JtT1ViY3JCT1JQMzRGRm4wZ2MxVW5kZXRyT29mblRub3UrWTQ1TUZuSmNDOWtzQkQ4WjdwTkpDSXY2MlE4Q3VpMkVtNHJieExrUTllWVVXVnZ3ZlY4cnIxM2ZjRnlMNGd2ZGdvWVpkSWN5NExXQ2ZjQjlneG5oMVl3UWdQYVo3Q3Q1T1ZoVUtzNXA0UHJoY3pZMEJoSGZtOXUvR2lQZ2JMaURhN1ZxWURXSk9mOXlhL1VSdWRJU08xWkpBZnJVUnh1T0dkSDBZRVhRQVBLd1luMXdYbW9VOXpNaWRhS0U0b2RoWGtCN25PM0JTeDBySHNwMGRyQUlrcTVxMWtPeisvN1cxR2xLUWNHd0V0aVZRNFlrMTFCSUNqVmNlNW5Mc2NqaFVGalBFNFlBSGVYQ3JtczVrNVAyeFhqSE5GaXkxUmhESlNrV3p0UU4yWW9sVDdub2w5bTdONEJ0N3Q3SXY0OTR0NU5Ya0RVakZyZHk3ZWNaTzdxMDhReEgrTzV4amlnOGFYb0Q5QjFzR1ZJZE96aU15eWJtUjkrclZwWVVReGtqRERzMHdTU1JkRkowUnc4eWZVWEljRGZsTnBBUE5qdExpeGR0ek8xc2xTaityMGR4VEFVajNkWXNFTHpCZzJQMEh1MW5nT1NXdTlPYk1QNEQ2dzZFZThtUFlvUjcrUjJoeFAzV2FSc3VNd2t5bEN4V3UrUzQ3cTJ5b2NOMDF0M1pzdXFPbHppcnNWNXU3MHZlOXQ5SS9JdHVSMThabCsxKzIyaThJU0lFbTFMU3lxUU9YV3ZUemFpenlIVStxVG4yZGNjS3JDb3JYZzVhQ2pVWTl6ME81VXY4aW1PL1k0YzZKMFptd2M0TEdJaUQrQW9lSlROYy9qc0g1WVVXazBQYmFSeUVFcW85d0o2NytmMzllaU5Ybzh2bzM3VEhMZWFhYXZsWWN0WWNoS3JiM0RqWDFLTlVFUG1JNHQ2NWNFSCt0TElzMFJCTFBaWjZwS1FQNjYyREtpVlAvYkZOUGFLSnBTVTNYWFV3NG9la2xrWXBiRXlLQ3ZHUzdRNE1xQi83NUN1emwzZXlGR2hqVWxnYXNWbHZiWjFmbmNlaDQ0RUt5Z2tXWklaQ21Ib2RPL29rUFBwaGdIUW9UcWN4aFU5TGk4N1lKckhWNFlMMkVSY1VGeTZtTEZseVl6dHdscVZCT0NkeE94TDRYTElyQ2NhVWc5MGlSUktHR1FvS1dYeFFTMUlkNGt5S1hxQ2JoVHV1ZS85Qm1uK011WmpXRjBBWVJCaXZsTUhGUTd0cnE0eDR2ZjFSakMxbmNJV2FHVHJERER0azFjYVVYNjR4R2p5T1RrVUhwajJ6UEtaSTY3dkNjaWVZd2JVamRNSHpSdXkrZTkvdEhyai8rOEJ5NEI4Rk9RdmQrTWdjRkpFaEg2dmgvbjRNcGdITEU4QW1QTHJyL3diTmZ1UG40bndCVk1JZnhSR3Q5WjI5bFJoRlN6aUhJL0NxaW5YTmhhUWFiNGwwZWNCQjI1QTZsY0xaekNuY2xKK09QZlVmV1RZRkpFcTFZekphTENDVzJNZ2RENXhDVkl0K0JqSGl6SkUxNG9OaWhzY000RXpHR3IzbGpjUTdIQ1pSVEdHb3dVZy9NYndTV2s5NXh0bTJFQWpxVzYrQUpEeXVDc0JXd1RnVWdZaTF5VGJROFNpejNKNE1JanhWeFFLcWI1dXJRd25yVVIxNVZRR2RoMjB2cklNYnUrcERoYWxMU0xQZ215bmtZT2YxcnlYYUYzNEZ3dXc5eVZneVdJQkZleTUvd3FEaHdvaFRSSnNKZmZxRjZzT1ZHQlpMbEprOTB3Wml4dndLdlNFdE1kRi82SDV1M1RnV3dpbHdvYitrMGdNMEFpKythVUVCT0MzSHlUN2JTeHRncUNIeTBmVDBnK0hWZ29Edm1EcXN3d0w0SmhMdkliQVdoSnZySG9Xc0Y1Z09MUVFUNEZmQzAyM0FGeFFIclEweUJRMkFUaUljRWhhemxoaXZlQ2paY0dTTTg2bDdBZm15aURydXI4RElQbTdxYmNocXFLcjFGWExxQ3FidUF5a3doOHVOZ2N3bzYyT1NJZ3kwb0JFUFJIbnd5UmxzaFBiVllRRGRDVDRCNEtCNDBXSmJNMHFtcVUvdzRESXpzUlFscFV5bWVNU1Nwa0JtZ0pNUFBuV3gzUXBoRWoyYTBGZlB5YzkzRGJMRGRYcHhhQTM1WWl2U2dDS1p5bGtSdllkZW5jQ2FkcTVmQXpQUldKWFJUVTZBR0dyZnFEVVBKV0dOcnJXd0FvUEp6K3crdjZ2bTJramtDQkJ2Tml0Z1UybWdPdEI5aHhOakNSblBzMzh4S1FxWllDaXJ1WFBoa24yTUd5SFRscHFOeFZPUFplQ2F0V1RXb1MrSjZrRjhZY0pWeExkS1dpZ1cyaGhNSnlXUmtQQWZwRG5LY09XZHlxNTRtSDJHeDhVZEJ3RDA1WTRUM1RPaC9FZDRub2U5RnVQdlJ6OEo1VmJnUTVnbnRoSHk3V09JeVdnVXhmN3dVWUE3bm1rSGp3Rkl4N0hmZlRLVDhSODdsVEVXV0w4N2xudjhESTg4V2puS0NHNWhPQmpnT25BRVgwK09IUUFmc2FJdXBNaDFwOEl4T2tlNDV3SnVoTktLSk84UEJ4UW43Wm9IeU9aaGplQlRjSGNaZHZGZUhxS1lWQ1NTeXUwUDJicHdRRElWM2dkcUc4S0pRbGZvYlFNTmk0bmhyVXpqeEtrdmNRaUNHMEllUW1Ma2hBL2NOM0dDNklMZFJ5NjJGTUEyRjNCQmwzNndGZ09SUXlHMEVpWmw5a051WXl3MmZjS1hBRFdZVVpEOW0yZFBzSUpUOUtDUFVoVE1DZUwxeVJtYXUxcmpCaklLYzE5RmJPWnp6T3J6QlBJSWt3eTRKOG5GMXhRMG1DZklBWkw2UzRDMVhJZmRHa0dUTTNjQmJMZ21hbG1DWE5hakF5dTBQbm43bDcrNktIaGR5dHB3TVQ1cFhWai95L01WUFF3SGxjMFVhM2w5MDd6Vi9lUHVPZHd1TllYa04xOEkxaVZDS3RRc0FLVW13eHhxRXQ2VkRHckFkYTFycHhVUjRxeHB4Y25peFkyOVFBdU0yL1FCWFo4U0R4WXlXVzY1QVU4b1VhTWdWNkoyYi9vanB5cEVQOS9odWFTRVhXaUdIYWdGanlrS2lPRkJpb3BBb3JhQVRoMUJhbUFnQzRSQS9tbFVoRkRyUlVGTHNqVmJzaGtRakxtT0p4cC93NWlhN0NmQmdYVzZzZFZWYnBoOEw4QTl0UXhPS0Q2dmxYbVZxdWNyVktGekxNVVRUNUx1bHRSekZmZGFGY05Lc0FXb3BwTWhWcUtWQUpFZnh3MUFnVVV1MTBsZzFXNGtrS1ZmZFpiNjZ6YmhzVGt6UXpmVjJjMEppb2k1WDJHVThNZEdJWWJWdlNzUjF1U0lnQmlZQ0k4WkhJRWhMR1lLc2M1VVBFMlFFOS9odUtVRldHVUZHNnF6WngwQ1F2ZEZuUGdlaFlwcklnQnZ3bTBlcmd6QXcrOGNyK0tHZXNRNkVVWWNZd1E5MWlOSHFNaFRhV2wybVEyeXptN0hFSkwyenhpaTBaMktTbm00MWt1eVIyRk9YYSt5eU5yR0hFVXgwWWpjcUlsaVlaTFZHc2xoWmtrMHRRN0poUjU0d3lZWndqKytPR3ludWZ1aGRkWTk2aUdTa0dMWjBOR0JHZmVkYWh4OTdvb3VTcU9wYnc3NUxEZUVIL0xTUWlKU0xsVkJ1alNkU3VHOXRzcHNURW5IcmFuWVpUK3lqeTIxR3F1bUpmVVNxOVhZNUxUSGRDR21VMnpzeERaZE5pYjJ0TzNweWJuUGtSUE5QRWhrRHVpcldBdWxhWTNRdGlzK3lCaFZRTGV0UkJWWU85VmUzR01LUFpuUkVWbHNqYVNGcUMrelNSQU9LYXQwQmpXbmxiM1FkWWFOZFdrZnc3Yi9lU2pqUnRmOVd1NngzdzJsWnZTdi9HdjF3Ulo0UzFFR21YNjdzRmkrbXBBTHJYQVZHWEFPT290eU42QTBzZHdPSzI2UisyMlFmSzlja0s2d0VkWWtKVmx4Zm9JMUJnVUFGSzA2NXdqU0ZDN09laFptS2J4c3h4MUFXRUV4Zk41TFZlNWJxdjdMVmZRVWw1amVLdnRCa1g2Z1BmMkdZWDZoTjFDT1hXdGZSdGxsZVU4TVpNRG5IRTNRYUcrbEt5QmhNb0RGYzhiSFA0c3ppRlA1SUxkdkFlVDUxdzBYMzN2UDRmVy9DV2RBeEZ6emwvUXZ1ZjNmdDY5czJGVVlRTkw4RURXNmcwREl1RlV5bWxHcnh5eGR1ZnV5KzF5QjdPNTZPKzN5L05MY1J5MjJvZ2FMTXVOeXdqRk51SDl6NjVuVXZuLzkyTU9KSFhXNmxYd0VNT09XRWNWOVpSZmRsYkRjMVVEUWE5eFVBK2VrcjV6NDV0dmswUUFyN29ybVBsSDU4bmZ0STZjZUJCa0lSWk56SEVROUlYS0k4bVJHOVNWOHArVGljcS9TUjBvL0RyRU1mS2YzNEtPNlhheTBnZlNpZmt1eWhMRlEycGRtUHVHekdaZS9lTDhsbTJMMCtqa1R1ZnNucndPZ3dsT1dQSXBjaFRUbTVERFlTNnJ5Vkpnd0EyZHJKWlpHQ1hCWVpMNWNKSlNTSUJmWng1REtBTG8rVHl4aTZyS3hjWm9VY2k5b0VEZGh5SjVkVnVta0d1TkxHYjFmaGg2YmhkU2owdUdsNHZSVzdSQzZ6bTE0dVcyYldyRDZJMmQ4cGx4SDdlWnhjaHMzZ2NuS1p6QUFJTk85RVpOUlNVK2N3YWltNWJCVVFZelYzRHFHV2FxVitMNWFWcXkzc2FNYUxaUVl0SFlobEFOZ3BFc3VzOGw0czJ5WVNCS0haL2dGaUdlMStTc1V5aExBdUo1VXhPRFBCK1oxUWhpcEQvMFg4ZnllVkRZRWFrc3JHOEdNZko2K3BXL3pVZFladnViN3d3ekxFd1dxMmpFUm1ONzFFWmlEYmdVUzJwcXBJSXR0b3RQSVMyVlpQS3d0MTl3K1J5R0QrVkNxUVFYdFNSaDRySjRzaHBJS21jZ0RHMnlCWkNEcXBRNDNpUjVFc2RvRHJSZ0NNa0NTR3BlODRRUXdCWmNkTitoYjVOcEREZ0RsV2tNTzgrTFhOcU9iRnJ4VjJhZUlYUnFUdmNFNE84MFFFNWxTNHd4V2tzZDJUdzhZcVRYUVlRbWN4OFJ4VkxwTERBS1pSS29ZcDJGSWdoU25XYm9rUXR0VUs3NFd3WlhicGhiQTFubk1nSE1iZkpZUU5NMlNQZ2gzc1hBZ3orYTlFTExieWVCbHNteThQSW5qOHZUTFlPdEN2dkF5MjBUNnFhQ0ovcnd5MjN2TGFoUXltK04weWN3bkVyNUVHN2lGVG05MHBKM3Zxc3I2cHpYN3FFVjJVWUtIV1k2ZmJieFNFQStiQ2t6b0FpWE1Pejl5dUtDQjZtVFdlaTljK20zQkkycm5IRjY4eCtFS0x3T2ZRQ1FWaTVBeGEveFBsU0Y1dW51Unk3Rm5uM2M0WmJveUkxTkxKR3VDMnFVby9YZEhpOStBcUFNaHJPMndWVU5UWkRwd1F1V05meDlaRmNsOEhyM084bE5TR29DME1RTnBJVnM0RkhyNzJ6V0FwUURpUlFYT01pQjFTN0lYQitucnNFT2VuVG1BbUdQQkM3U2ZVRzlrdkdPZ01uU0VkOUkvYldQRHgveXhFbnV3UXFVSTNMS3ZRSG9weitOUXVDbUNoM2E0SkZaZGhleW52bWhIMnl0Q0daYW5oSVMydmhJNENrNkxZZHlNRWU1VURsOVN6c0lRS05MTlJYQVJxV1Y0VVhMRndFU2hrZVpHSWZVdG9Sb0s1cEdrV0E5b0d1elhlakF0b2VieXJxTElLZWV1TUlLRnNiM0gxR1IvVy8wTDFvTEpoL2JYL1Y5QloweVNVU25tTEVvVi84d2lySDBPZkN4VGhORldPSmk5SGZFTnRwckhodHNPSDJMYnJTdlhmMzlyMWJwTHN5WUNkR1VCZlRoTmtNS0F2dlQvTE41RUJlNWxVOGJTQmN4MktXeHFvcE5saHU0MWxaNTJDamdLYkRTS0RWYzVHVDZYOXZNQ1o1ZUVHYkE0RWNqSXNEZG4xMkJrUm1HQVV3WjNCd3ViMDk1Z1Vwc0h4ZjBma0JEcTVCZzYwMnZNeW94VVp5VHRBUmZPWnJCbWtZZVVKN0x0eDJKeXh0NEVNUmZ2UkpKRUNaeElKVmdDRkRBOHE0Mk92WWk5QXNVczUvZzEyRFcxS2FNY1Q4SW5HVVJpb0xMUUx3ZkJWeGJzUTJyZjl4a2NiY3hwcVR3VkQ3VUJydzBJOGJucUhoSzBheEJJcmljOUlMdmlESUxEMVFkcHNjc0hHc2RWRVMyeWhWSVlDaW5PZlNMQVhJUllvVy9XRG5MVk8vSTZRbTVTL0RNYWp2eEVZQXV0RzdLQ2lHR2hFaXBvaHBDaGFtM01IemVQTFcyUVJwRHlCK1BLT2FmNWZNczJaYURwc2pxbW8rTDJ6K1BqaUVDekFzbHVJT0IvMCs2ODVZeHczYUV1SHNsMWIrUkZyUER5R1Z3YWJuVUZ6R1VqYmhCTUphK0ovMWg2SGlSRnlPdHp3V3V1UHc5eklaL2pkQU1lYUdqZ1FRc3hRdUZqTXhseFhvS2ZBN0RCUmVSekV3UVRlSVhyMTRXdnhIbVk1T1BKeEt4TCtiN1NSMFU2ZFRlK081MXZZV1pIbUFEY2Frek5EUEovU2pNYVIzNVZpajNCamlBbkcyWG03bUduT2xZM3pHTnJRN2VJQlFWamJoN2F6WGdWNGJPOTJtWWk0L1hNRDlWQS9UNVhFdXROZTNzblB3U1BtNUhqeThwZHY1emwrbzdhc0RFN0tmZ0hrSVBENU9ERElvdUNKNkxZMGJ4SlFkSkNRRzVtaHZjdlBCMVVyV0lBSDRlQ1ErZ3J0M1BPSkt2WlpXUTZnUmk3Y29PREp5S0tLakFJTW0zNFhaYnA2bDJYNldqQUJtRGUvaStvZHYxT1hzSHl5WUJhaENRQnFDekY5cG5TR2FPRHVjZmtYZ1dFU0E1WURkRVdsNTNHUitMMnlPN1BmOTBRK0xPWG02RTVUZnFGNGxEcjhzUGgvQm00NndFZ0w0TDl5MzQ1OTVzUDdocmV0K0lwbERYc0J3VWxxTnpWd1R0SE9QNDJTNGtuSHNTSzJDZis1SUpVelFFUE1VWmtzOEMzOHhJMkxBeGVHTHpyaG9keHM3U1BMQjhPY1RkY1MrMm94V0VjUnJMQU1UbHlyR2c1SDRGNzhXUWdZdEZLeE1LUUFza21CTm9qa0RZdTB4ZDVkMjhMMVJHUC9YT1lUV0dYajg4QmszTVUzdmtJMktaUWY3bEt2aDgwdGl2VmJ6SDZ5TVd5a1c5Snd4WnpreUNLaUNERndVTldjYVRuUW9DU2tPNlB0VXk1QkpIajIxeXJFaXFjQXdsaGRMc0Q1bDR1SHJGbUQ3a3lROVlQMEMyS24ycE1uNW50MHRUTm9kQ0YzNWNNNEc1NVAwRmZ4cmcwMjRCSVF0azRPYTFYQ0hxOUlIbnNveEJlTFI4RkhIRzVzUjJ0MERqWm5IMXJVVllTeVZ0cFBaTnFEak9nVjdMaVNHY01WSWowUzVMNHE5bm53Y3c5bFZoU1IwM1gzUzVIUlZ3VFc0bGhza2JVZXNqbUo5R2JRRzIyVkt5aHdoRGZkdnZsblhUQ2FBSHpMK2RJVW14VkNaNGQzUDQzTWFhZ0xNSFJEZHF0dzlrbzBlaXJxUjlhN1BZUzlyVUFNMDc4ZzZsRE90bVVKeEowWWlMN2JNN1lhdzR0MEFoaE5SUHA0NkljN2x6QkQva25pTmZtWG9JcFFnM0wyS2JHbjY2Sk5BWFZqZnExVUIzblZTWjNPejQzM2FlYlcySXBJN1ZneUEwVEsyM2xVWUNJRktoc2pSbFRPVGRiMjRLSU8xaDBJYWpvM1VVSDBlcXpKK1ZnbUM0RFBnY1dJbUxkM1NhejRUaE5zMm9pZU9KaXM3Y1A0bkFVTXo2TzB6SlBwbWcvOUlBTTAyVVVUYUpIWkhVb1VzaC9rNURacE5ubFE1eHlLNEF3QzNnWTNQU3BHa1lWVzZDNmNBTnpiNXNKK1RoYTV4TXYvWU1mNzc5WG15UEdJaWNDbVE1MXFrL0piVnl6ZFNpNzJ6RnJld0Q4Qnp2b2xBbmhoNmNaWEU0aEk3bXlNMUFYNHJTYmFseStFcDZXWm9PQnpSRUJUekpKbWRSNjQzYkFMTkhPTTNodHRuYkFhMFgwUlVRdGhESytMd0U2cVlmWkFvbTVPRWxPY3VLNFRzNnZ4K0M2VVdHQ0xaTVl1MzJxaWQwMmdVT29jbnJURWx0TTlsdHNPQU5HWmtpQ29vdDVJTkJpY0pKUVJ5TkNRVjZ0bTQ2TjBTWVlSc04wTGZVUldQc3pLWlNSOFIzNk56UVJ5bVAwNVFqRmlHcWxETUJ1RkxtRjVoUVVLOFk5dVUxV0hUb3UxVnF4Tk5SN1hPb0VZY1dRZ2lRbUFpdU0zS2RRUm1jemlrNWcvcWtVa3NjbUtoVkl6VXc0RnBDMGd0UlAxL0N5RGpSak9KcnVCOVVDTVlhQy9zREEwQURtWjRDRUtpZ01Va0xXSk9vcHRBbVV3bEdURmttRlBPb3JPTUxRQ1E2WE5WaHU5aHpGTVpKNHJjL2tLb2hEU1F0NHdMMkdNcHZBTUVHSm85RmlhMW9XcG9lT2xOUkt4SXh5Nm1yV0ViRlNGdnpaQmpOeGRHVmk1M25ERXhUY1Q1TGx3dXdOd3VCZ0lMV3BCeTlXdGlNWW1FTDVxMEJHTXBKRVIzbVZrUlJ0K3htTkxOaUt1QjlPZ1oydGlZS2V6dnNZMlFuOHM5Q2JFTXlsMEl5UW9ORG1qdmxXZ1dvcVVMWnpic2xLOVhDSnQ3WW5DaXlXVDhjTGl5MW1XRlJseWVrSDAvd1JjVzhLZ0pBZjVhU2h1TUNnalZnMm1acDd5Smoyei9id2ZjcDJCSEdLZXFvanRaMXlhODdhTDlVNTR3T0tnWkdMbG1oN2dqMWxZOGp0Unc1ejJKUXZWeFQ3cHMvT1I0OHZrTnJOMFZnNFF4TGc4aWk4UFptSjBDNlBZV3JHR3l4RUdpdXVyZjJ1dDROSTlFdStQblJsVnpKRWdKcE42TVNHR09Fa2Zta01ST0RlM0tzeTZuRVhvbzNVb05UMXo0SytySUFOUkJNWVAxdG5tSFlJZmNQMk9XUXdkd2hEQlZaNkp0ZXAxenZCQ0ZKTk00MEE0OE1zQ0o3QWRWSGVMRjRDWnkvRllNMURUcURtV09FVVdJcElYNFJLZ2Npb0QzRmdZR0RHS1ltanhad0hPUVF4N3k2a0VPRGxvVFFnT1dNRjRQWnlvUG96Q1ArTVVKd29IelRVemFDN3ZVSXBsbFRYWHAwemhDQjhEcVBUb3dzTWozVHdybk9PMGVTREU5dDE1ejFXM25Xa3I5TENab3kzVVMxZmpuM0xlUzBLQkNvQUJUWWpTY2t4REZ4R3JLSUFzSXRDb2pFZnBQaGg4MGxRVGJxUUVNbllrL25QTnJBSDhweVFzRWlIazA4alh2cWZlL2x6QlplMmZpdDh4MXdzQzBpTnkrM1kyb251TmxQcWJpNHI5dWhCZGc3b3B1azNGZDFndUNoeHI1YU1XaHcyYU05SmtxcEFKNXJURmNQd041Q0puK0JuMGNFb3JoV2hCY1l2UUorMUhJUlJDY0krR241SjhJU1NxZ3g0UG5WVUJaOHZXTXd3d0lSUm1CbEhEaTM3VWEraVlNMWxWRXp5ejVCV09sNEdOUkFVZHZ4YWJybXJTaDRkOGp3RnAwUnB6SUQrQUg2RmZTTUczd1BtZ0FSQXdDZ0I5bWdKclFSVTcxQ0h5L2hTNjRjdXVQblg3YWIrNmVtd3oyQ3FXTTZrUGZuM2RzanRPKzhzSks0Ly9ad1pvUy8zMXVSdWUvdFhxOTFkZmpHdE1rNm5uNzFzOTh1ZVJsNjYrQWRkb1NPWjBCbng5RUZmM0poQlVzb2FBQjAxV1BDOGFBK21UYjNvRFpucjhiWE94NmVEenhQc3crT1dUMkZTNVRVR0pMdmJDTHZIcktORUl2eDNibHhxYnJTNEw2ZmZuVkIwZmZ3M2kxZ0FXZmJIWUp4elZRRmwrM3hZTUN4dDZRRlYyMm4zS1BhNGJST1B3NmRTaU1lVGRwdGhsOWlKU29oYlloWnZrM3lxbzBFUzlveGFaRDU5Z1BJcXUwRFhISHpmdmRqdGp3c0dQMkQ0MnJsOE5CR2dFSU5NRjBaRXROVDZ5czlSN2w0MVV1bmp4NGgreXFPcUg3T3I4UlhCaElydE5ZWmJjOW83RXY2czNGTkFoMWxLR0lvaTRFSXZ0WVNOZnJRaFo1aW0wM21TSDgyYXVjVWdUL3psZVZNWW9LeHhOUTJXMTI0SjZMcm9kUi83V0ZXM1pGSnNjY0V2VW5yQ0lHS2tUWXBPWUdsdUl0aUhBZDhjaW9iVFN0bG9adWIwUE5yQ2NudGpMSzJPM0laRHI4Vm9tMFdIZVVFNjJRWmxMLzVNSVlocFNnVWNSMzd1SUVvTEQ0V3RJTndmTTl3SmFkYi9HSzNiUkVVak5CVmRoQ0NRWFRrYTdLRDYyakt6TmhidnR0d1Q2TFlZcDlwekZqODUxc0diZm1xMm9hWUdGL0VFWXgxcGtTTGVxNTR5dmxsdzR6SkVEZ3hvaEJWY2dkQ2oxUzN5eTJKd0NFTDBGS0F4N0o0YzVjQkFsR1I5T3JnLzlYc2lvaUVLS0ZRSGtlSjdjcUdpTnBqZzJqMzk5U0pLUzBDTEZGRUJvZG9PTEtjUkRUM0JJYkVLaE04VGZSMDlvVmxnWXJqMHE0dlFORFQxR3hFWmQyL3BhbU9pNlJqcERnRUY2WFQ5cTRRcHhqazBNTFRWdExQNTNwVkF0ellmSEFMZE5BNGNXbFZvYy9qd09lRmV1Q0M2c2wvazFVZUZPbGhyaTU4TGZsU2MrMmFhNHN3M3gvV3o4RVlEYVpFY1FKNkVsVWdpL1dDMVAxQUNXZDRsbTlPbG01NjlkUG5QRENEK2RaS0FZNHVnVXhqa0ZVTlVPMXdrV3lHSVFRM1UzVGZLOFlwZWdlUFIxM1dueFZmQkdUU3ZhZGtlQjQzK0l0bFp6azlDSVhUMGJpcHdOd3N6ekVRbXRGTGFtUjNTVThwa3JSQllleHBjU3I5Z0JDcFVyQSt0SkRTZVVCZzJvMldwMUZ4dUViOXdJVFN3dzc0M1BzLytJaytCeUU3UWdzVDM1emw2R3JiL2xKWFhLbUlnRFlWNXlzNzB4MDk1WWhCaDNmR01LT3VkdHpoMGx1WjA5Vjh5WUNiL0NlVUpDNlBOMTBXWUVjM0xUc2R4cFhWd3pGMnU4dGQ0RGhEUE91d2NJVDEzaDRMOHJrMnRyTEFKSFpCQUQ1YllLSVlYWEIwamhrZEM3a2VRVk5SYkFnekVSN3NPN0xqWXZaNUc1aWZwRHByVTJjOGlJVmNTbkdPUVJnNTFRbm11VWFvQmR0akZZR1hDdFE2SFlGdWFBWklXeVh2b0Z0NURWdXBIOE45Rk11YUpXQ1F4K1MvSXJkeTdyNGs5S3RjaTRsUVk4WUJBRWZQV3JRQ0lSdk8vQnZJSFlpeFkwaFJzZ2lBNkpHTzRRYXZmRHA5UlBxdXlwUENpRHA3NmZHNlRTOTdrSk9ETjZzSVEvN3FNZyttZ3JncVVUanIvSncvSEw5ME1SaWpFUVFJZUhKWFkzYXM4WWVwcUdRNXV3bXdIZEFlRkx1RldMUVB5RDNOUnI0T3FWRVJzSStnUVViMEhaQW9jSVcwbTVKa0p0WU5uWUlwdys5ZjlxZ0NaTlBOUWVVQUhoMWhnWUYxVGlBdlBnRkpQTzhSZzZTNEc4UzBTbmduMjJWckZjMDBHWHhMQmNXTVF0bXpFeFVZM0ZSZzF5SVZ3dUM4VWM0OFEzbmdFd0h5NStJY25CUm1PaTF1Vm9HcGVNTVcra3U2TFlUcGN2SC9NVmFnek1LRnAvSTdRTlExUXczRTAxOG84ZkpPbDBBaitUbVBndmlrUEhOVHlDRnlVajhMT3RNLzNMSVUwTjNLVmh0dXhOUHJLQksyK29kT1FPZkZwanBhd3BVMG9HVFZRcG1aM3pkTktzcTlhdFVpbHdzcEtaaHREQzV6SXdwNGlGQmJ4Zy9obFVVL3BHa2hpckZ1S2tNQzhjUkdVa0lUUU5qSXJnM1FkemcvaUY1Q3RhY2RmQ2hxUWUxd29Rd3ZsSFFZRXRkNFNURXdrWnowTjh6VEJHdUU5Wlo2R1RxV2Yra2p5MGVNT0ZHYkU5U2p6UmRnemYvUkxOQ1hVRGVpTjFUSFEzQXpBeUQ5cEcyN3lCdG85M2hUTnlBQ2xGTFlMaWwzdFZBb0NNSEJFMDUrRTJZQ3QxeDYyTXhPTytISHZrTTlHRWp3UkxIalRCT1RkeHVpSjNVTXc2d2hiNFlPUk9MeERTOTdVZ3lDWmxVZUJ1MXNKakZyL25KaGZ1QVBBdUhzM05DWGFYcnJGdXdUdUJYMm5pcVFyS0lKemlVS0xoTkFuSUtCTStqUTJnVnMwME16QUF1UjBrTUlHcUdaTnRTdDJMUGUvVFVaaC9kT05YSzhGRW9MLzVLdEFnUVNpemp3RG5BWnArb3VtcjBYN25kOHpwR2taMTJ0V0RTSVNtbXB3ODdhUXRKMEgzdUZkeXhSTnJ6c0NFZExLbW1oL09nR1RLS09aUUZNeU1Ib0h1aU5PUjZJSDZTSTk5aEYvR1J6cnRJeXpBUkN0QTNBcUFGVFlMME1JQ0tMWmZZbEp5ODhZMVYyR05zM2Z5eW1YYkg2eWFIWHl1eVQ1WGI1L0RpT0hudFA4MEhVT0RLN3daZTJwYW5qRlZjL0dNS2ZZNUZnV2ZZMUh3T1JZRm45czFMYXdvVTVPdi8rcjJCK0NaTUNXNWVmSG1lN0FpOTBXWmJrWFJCSDhFTWRaWWxKb1BxVG5pbGZGemNKdms1NkFwNHVlbUZ6NjNSL0t5VzVldnJwNmQyRFA1Mkx1TFhxM1puWnAvemhwaHBqWENmdFlJQ1RVQ1BzZWk0SE1zQ2o3SG91Qnp1MVB6ZUhMUnRhZWNnV1hFeE9UV1M1KzhPVm9vaXFwOHVGWDVDRmFaUmNGc3RzdWFZMDdpNTFBaWZnNGw0dWRRSXYrNWx1UnQ3MTBKejR6RXRPU0dYOXg1SVlJQ2x0UmNtNXRIek1BdUN6OEhOUFdaMFlPTUhBY2FPYjVzVFhJQXFjTFBzU2o0SEl1Q3o3RW8rQnlMMG14RndWWVppNEs5czVLYVQwK2VjTjZTZDJwblExZjQ1dlh2bkZsYktNcE9hNDRzK1Rsa3ljOGh5NDlROC9ya3llY1B2VkU1RzlQam8zODk5Y0pRbTZ2S2gxdVZqN0FxSHprRGFEQUpDRmpNY3JKbHViZGxPWWxaTXNNcDhkdklIZFVQZWlCQkhNbGV6NHR1WEJ6QnZzK0xUbHdjemtianhVOXhnZlVicElIV1Q2QllzQ2VJMzhrOGRrWEdmYXdRcURvTGdhcXpFS2c2MkFpRUJXTkVCNE10V1MyeElnRXJJWWRPdmp1MjlBUXFNQ0JsdE82VnZQbnkwemRIQ25VVzR5bzNyUEE1RmdXZlkxSHdPUllGbjl2cHNBSjFQSW4zVHQ1MzIxWDBtcGlVdlBPR3BUdXd6UE9mVTN5Nk1wMHJNY1d5bkdwWjdtbFo3dUZKUE5GSXJBN25TYXhPNkVtc2p1bEpEQzdzU1N6OUU4aVRtQ1FDejR6MmswWE5qQTRhLzU1SGpqMHp1b0RVS3o5NlVhdWQ5bUcwbHEveFhzbExUM3JvajVpODkwNit0dW5YcjRXR2t5T3cyT1FSeGlhUEZHWjAyVDZNTFBrNWZIdzhOVUlFbnBMOHkyblAvUjRUeEtUa1kzKzg5ZG5xd3VmVWdvZmJXRG5DeUgwa3liMkxTWUFaeG96QUpLK21kVWRqVWxqOXlwR1pSQlk5SGFYVjZRcVVuaElpc3pyOW9ESEplVFpaTENDdlpOMVliOVNOOVViZFFtUUdGVmhJVUlHRlJJT3drR2lRQXIvKzVSdnJONEJmeDVOWGJGbTZJVFIyd1g1WmIxRzdpTXpJa3A5RGx2d2NzdVRua09WNE1xTU0vQndJVldDUzF5MDhkd20yeGFZbDE2OTc0NFBReExoVE1qczJENmJQTE1HYW1TVllzNUdaWTlBb3JYN251N0w2b3UvSzZwKytLNHVwRkFqY2twZ1dFRmhkZnRCNDhUenJYd3ZFaTRzSmpGcXh4cWpWN2hCNHorUjFXNTU4S0VwZWZNcldEelpXanB1RnhqUEhYUkc0TE04cTRzWFBQL1RyQ3pIcE5TUWZ2UE0zWC8zd2JpeE5VaUxSRk5ZSElhcStVWGR2STYzNjJrZGl4Q1N0NThFa3JUclRvTTF2ODZ3ekxXRFhLczhVSFgvK01OSk9oUkxwWlRwL1RVNHVPZk94bTBJczRuK0V0Qk9Udnp4MzlCeE04Tk9UMnpkZitVSklodHhwMzhYRXhpd3gyekZMekcvTUVvelpxQnMzNnFxamZUZ1Axa0EwNm5LR201aVlialBjeDZPZ1pqZ05tWU9kWWljaU50VTZJM25EbVd1dUJpUFU3RFlsK2ZCenY0RVRibEJWa2ZSd0kra1JKQ21ydXUrSFVIWmZLd1pLeW1LZ3BDd0dTbHJnOWU5ZDh2dVhhMlpqS2Z2UUsyKytYcnNiWEFGY2wxbGlQdHNGODFVLzg1UlYzL09VVlgvMGxCVi9LUFRidmJBY0t6KzFxYmZiMUlZcXNicW9FcXVMS3JHNnFOTHU5TnVXNURWWG4zVXplTzdleVNldVdQaGlkYUc2WWs2SEcyOHZtc3gzUmQzaW1SUVU0ZWRBbjhMVXR1V3hQOXdPOFd4U2N1aUZCMThKY2FBUDQ3bVlTc3J4M01sRzNSbGg2bXJFZWVxcVgzbnE3bUpHSzJhNFlpekdjSXRuY2xTSjFVV1Zkb2U2MDVLUHZiSHlYakhjNTMvN3V6ZENZcitLRlZCWHcyNjNaelJIQ2tkZERPZ0N3eDBidnZSRU1kejN6cmpyaVlyZG9DNG1rTkFraVlrdG1DU0xaelIxdHcrZjBYYkJkdFdmQm8zN0Jtd1hBOEhQYUtoVmlNQ28xZTZ4M1dXYnRyeU9HazlQbm5YQ0wrOW41RkJYWTFFMmtNelVKWTVrTDk0bGdkSEkvQnhLVkNxbittWGNOZS9jZWpIMmt5Y203M3Yxd3V0RFhING5CUDZReVV6ZDdNUFpyZGhGZ2Fwd0JneW9LazQ4YU4xcG5ySENCWnBkVUJWV0UxVUpDV0tveXU1UXRUbDV6OE5QL1EzeTdqN0pxODhaZ3gvZC95eFZKeWZmZU9LNld3Q1FzVmZ5Z1RQZWVHeDM1RjAzbVlISmxwdk15ckZjOVR0UFhmVkZUMTFOSElYSmJISmlMNXZNUGg0Rk5abHBUQlNXYTFxb3ZYYm5tWGY0cWF3cStlcVNEYjhPcllYZHNsejg2UWpqN1VkS250NFZYZDI4NDRqZ0ZxNmhwZmVVNUxiM25qNEhTKzlKeVpkUGZmelIwRlRtNU9saTdnTnllV2FMT2F3Y3M1MXVkRlV2ODNSVnovTjBWVy8wZEZYdktNOXNpNmN5OWZVRlpMMnNFcXVMS3JHNnFGSm82UThlTlo3N2hlVDUrdVNabDJ6WWdxbXNBZkNqaTkvZERYVVBzeHpQZXB3dy9XRXFuU25KNWN1dnYwOVQyVW5yejFrV0xCK090QkNTUjloMjB1SFlpSnNndGFPS290MHkyb2xSQTZsNGVST2dhc1ZGblN6T0oyRGM0NkpSRVE4bjRFUFVVT0lpamd0WWxFRVZoNHRKdUpEU3NnVVhMYmlRV25NNkxzQW5uSC9kaForTkpvUkU2QlNyclZTc1RuQ0sxZVRDWnU2S0t2cExvRnVGUGFOMlUvVHNxTlpQSmo1SnFLaXB4UDZjQ3FSSkg2UHJBOENMNDRhaEdTOWNPSXF3SVZOVGRTNGMwNzRuTHViRHVtV0NPcDdBUnkzOHZiMVdpV2JpOXc3RTNrZW15N0RwWG15eVEvVm8wMUdKVm4yVnB3VGNpWEdxZ3c4eFRqUGhRWXhUSEJvVm5BNW8zWmVuRml3V2NEcXdGZE0vM0dlYm9kKy82TEdMcmp2bGpWL2NjV3ZGZ3ZqelZKU01JbE04SEd1Q095bk8yNXJnWmpvVmdnRGNYekhjSVMwQzRxRVp5S2IzMzN2VEJhZWYvdURLMTMzQ0VVczQyZ1RmRVp5M05zSEZzd2w5M3lmR3ZhRm11UEkvZU5LOTV5OWFlc3NGOTFRY2F3bUhMZUZJRTV4RWNkN1VCTzlldVdhNnhMaTNvaGsrS0xkdjNQVEc2bCtjZFBFVWwyNmRwUnR1Z2dNc3podWI0QmtMMTlVZ0xlNnRhb2FyL3ZvWEx6cjM1bnZYWGZZMVY5QlZsbTZkcStGNjFoQmRJa2lMZTJ1YUFRaHh6cXF6MTYzY2NQdTJSMzBOaHl6aEtsZkROYjZHUGpFemJXN2RJL1hzNkxrL3UrYXlDMFpmOFRWY2FBbUhYQTFYaEd2SXhDeEZjK3UwMU5iMzc3Nzhvb3UzdnY2d1R6Z0dVeTYybEt2aXNqSlZIRzZHWC9xRzk5NTQvcTNMejl6K0taZHUxTktOTmJwR2JCeGZ4WTNOclpOU0c1NjQ1Ykl6UnY5OHl4NitEUzNkYUtOcnc4YnhOUnhwYnAyWU92blowOTkrNXZkUHJ0alBwUnUyZENPd2hsWVROakwrUVhFRk56VzM3cGw2Nm9VZHY3MXAvUVZMLytSSnVzNFNEamU2Tm14VUJRdUpXWmhtQUJHOGR2cXJ2M3pnaXJPZitLdFB1TW9TcnVOK0g4blhDQzhCSzZVbFp1bWJnY2oyd0VNWHJ6NXYrSTlESDNpU0RsbkNWYTZLYTFoRmJrTDd4Q1JiTTF5SDc5Mzg5SU9uWExianRHZUNSclNFUTY2T0szd2RmV0xTdVJtR3ZDOWZ0WG54MVErZWVOVy8rRGFNQWZzZk0raGswSStzcUNuK2lKb0l0MnR3Y3dwbUJFd28rR3FzRmRNQk1vbTFOdHNySTNpRnJlK0lzNndSYUFDK2Z2eHFjK3FLRjY5Zjl0eGRGMTgxelE4bFN6RVNNNnBzaW9rcWhWU1RVK2YvN3JhYnpqdjExVlZ4UDRnc3hYQU11MnBzZ0pqQzNCZFNrWTR4ZUhWZmM5blZqMjFkLy96b0JFOS9TN2N1WnRSWWp5aDMydDczYWRsd01mQ1haOWRmZGROZDE2MVo2bnZLRU5MVm9kSjdvSGtiOFY2dFZYVWhiay9EelJiNmZvdk1zVlpNZWlCenJMWEJYaGtEVmcwYkxtYlVXQk9EN3o5TDZML2FrSHByOGVWM3YzWEt2Vy91NzFtWnBSaHJNR3BzYXhBMUNxbW1wRTY4ZStWYmw1eDU0ZlgzQkV6TWtvdzJHRG0yQXB2RlZjbVNzUmxRNWRURGIvL3N4WHR2dUhUVFl6N2hzQ1VjYVRDZjNVMUFsQW5SQTRJRDJoRWxUbDJ6K280VmExWSt0ZjF2d1FoQXdrbW9Od2ZtWkg3RmFyc0t0L2ZFemIzUWFxTG11b1pXR1dLdGIyaWRhSzhNMlNlSEc0QjV3S1pyQUFhQ2JKZmRaeWVtL2pUOHpNa1AvdW1sMGVlRFBteEpnS29qaWdEM3Bnb2ZMeVJyU1kydC9PM3BhNjlhL3Z3akFRc0NpQjRMN3lnQ2VCL0wzU2RqVXpRQUF1S1dtMzY1L205THI5M3hnRTlJZkQ1U3Y5NG9zbzFJVXI1b1RNeTJSTkZUNXoxMTI3TEZQMXYxeDJHZmtEaCtqYWg0RXlnT0lRalNxYXBMUkVCTy9zMkVLeEN0NjFzaFRJSFc5YTF1VEJGRmtLMVhEMHF3OWVxQk5oQ21TRk5xdytpVzArOWI5UDZwWDNQZklsUWhpVnZ2MkVnOUNMSW52dTVUN1pYYWZPV2ZubC82eU1yTFArUDVoNlZZVlcvMFdGUHY2T0ZUc1NYcXdRWmVXN3g4NFgrL3VPTFpHdGZPeEVBazZSMDVWb1RKd2JSc1NaUTdOZmJZZFNOamw5OXp4aVNYanFpTWsxRnB3TG1nbCt3SkEzVmpIN2lOMFNNMnFlWWZxM1Bzb3k1Z0h6UUpFb1NaT3RDeVVtbzBwN1kvc2ZIYWgwZHUzZndwMzRrdEJYRGpqSDNVZ1JyeEVEVW1weTQ1ZmVXVFMxWnZQT1h6dnZkYWltSFlScW5tREN6S3ZIMHF0Z0pnK1ZLdi9Hbm96M2ZjdlBLcyt3UCtiUW5YeWJFUWhDZEFyaThZRTdNWjY4QS9ubmorenk5ZmQ5R0o1LzB4bUlTUmNBcXFEY0VQZmFUQVFIQ2JRM1FpU0tYR0J4cWdNWkM2Z0lGd05VSHdPekFPdGh3QU80dm8wWkI2L0s2YnRteDg4YndsendiQ2tDVVpxM1VjcEJZRTJTTkVrQ21wTmM4Ky92VFZqNXh3VFRDZUNlakp3dGM2RGxMcktPS1RzU1hxd0VIT3ZlanU0WlYvdWYrL2R3UmlrQ1VjcVhVY3BEWkVFU1ptVTZMb3FUdk9mSHZ6RmErOWVXY2dYUkRlay95RFZnOWhEc0lORWNKckJCeWsxbkdRMm9DRDJDZUJZV2tjcExhRUloTlQ1NzF6dzRxWFhscXlha3ZBUVN3SkVDV05nNUFpazBJVWFVbDljTUhiNTk5KzdYTi9MWEFRckZSWmVFZVJaWjRpUGhuYm9oWWM1TFdSODdmOTliVHovL0lOejBBc0hkQTZqWUVRcWJIQVFFU1FWU2g1YXVURXRmYy9jTzlMZHgvbytRZFh4bHdsbFBBUDNNYndDZkdQR3NjL2FnTCtZVjhFYnFmeGo1cHgvR1ByNWxzM1ByWDlqbXMvNy9tSHBWaFg0L2hIelRqK01iYjJoWWV2djJIRDFaLzIvTU5TcktweC9BTllwT1A0UnczNHg1OXZ2dUgyU3gvNDY3YVlKN3lsRzNMVVdCR21odWNmS0hkcS9hOWVPL1BFNVd1dWlYditBYVYzT2Y2QjI4WDhvOXJ4aitxQWYrQVZ0bHVONHgrbDFHaE9iYnp3M2p0ZnVtamRRMU05LzdBVUk5V09mOERPcVlSLy9QSFBTMysrWk5IbWxaL3cvTU5TREZjNy9sRmRobjlVZzMrYzg4Z04yKzkvNGZ4ZmUwNUZoRXZTdmRxeER5SXRscktQYXJDUE5hZTljdkxqWi8xMjA1Yzk5NkF4UlJudWdkdkYzS1BhY1kvcWdIdlFGa21ZanNZOXFzZHhqNmQvZC9FVk41NTE0bksvemlEMEdnbExIMU1TbGxBTHhjemozak9Ybm52RjNaZSsvSWVBZVZpUzBTckhQS3JLTUk5cU1JODM3anoxaHJmdnZ1b1Btd1B4d3hLT3dIMUxsSzhxd3p4UTh0U3ZYci9ubXB0MnJEeDdheUIrSUdFNTVvSGJ4Y3lqeWpHUHFvQjUyQ2VCN1dQTW8yb2M4OWorN0liWG50MHlldGViL21NRXFTTnhIVVZXa0NMRnpHUDA4Y2RXdlBuS3BvZTIrU1FFcEdQaEhVV1dlWXFFbVVjVm1NZnkzOXcwZHMzN1Q2NThMeEEvTENHQWs0eDdFRUNwbEh1ZzZLa3pUbjd0OGgwYmJqN3ZqVUQ4UU1KeTdBTzNpOWxIcFdNZmxRSDdzRStPVmpyMlVUbU9mV3k2N1kxbnRpd2NYdldhL3hqaC9FamRTc2MvS3NmeGo3TVh2L1dMVzU5NjVwSE53UUxHa2dBTnl4aElaUmtHVWdrRzh0SXB6NzJ3ZU5IWko5NFNzRzVMT09Rb3NpSk1FYzlCVVBUVW54Njk5cGtIbjd6d0xpOGphWmV1REFmQjdXSU9Fa1Y5U2Vwb3dFSHdDaHVQV0h4c3ZFcXdtR0lPOHN5TnoxMXgyaVhyWHY2S253UXRCVURTaklORVFROTJUSitxTWZYT2U5dGZQK1g1QjIvMEhKaGdsU3g1MUxqVVJ0Z3FLMitmaWcwUnhXcitxZDlzSC9ybEhhT25UL2FVdDNUQUhEUU9BdXhCVktlUWxnMFp4WnA4MlpiYlQxNDBkUGt0RFo3OFNGZmdJTk5nQm1nY0JMZUxPVWpVY1pCbzZ4Nk9nMER0em9ZakhCNGJMb3FWSjN3U2c2L3VrYnIraVMxRHE5ODZaNXVYR1ltTFNNTEN1RmlFWmJRR0V0eW5tcEs2NU1xTHp2ckwraWV1YlBBTXhGSUE0UkRhUk5ROEFvb0RlaXRJeFZZQWhWSlhySHptN1hzWFBuZkJSTTgvTE4wSUFFcEU5d2lvV1FVcStMUnNSYUV6TG45OXhZUFAzYnArbW1jZlNHZnNvdzQ5cUFibXNNWStjTnZZeHg3VTJRdTlVS3UyOVJGUERRSUpzdDBpUmczRWtHSUpDMS9kSTdYNHZkTldQTFJqeXlzelBmZXdGRU9PR2lzaVRvdmlVOFZTdjd6N3ZLVy9lKzNTWjcvb21RZThGMWx5OS9GbHBKOVhnVEFWV3dFVVN0MzQvaVZYWEhqTGJ4ODR5TlBkMHZVYk1lWnAyVmhJeVRaRXFWUDNuVHM4ZXZlMlI1ZmZGbkJ2WWdHS2M2QnAySW1zcG5ETk1NYXhoelhBRDZIandPbUlWamY1d0g0Vmx6ODFWVTAzTkRVTUZ4SjhNSFh0a25jZWZmbnN0NTY2ejM4R2R0VjQ4UUNqMjRGT1ErUFRURWhkdXYzTXB4KzQrcDZiQTdVVmZRYW9IaFRWWm9aVVR3cEx3cWgxTDcrMStjOVh2N1g1MlNkY0VvdEZJWnExak5jNGZTdDE5cnJ6SDdyOXlxVVh2ZXplSjh5TFNsK0hIWlZXdkRsRHdldGFrYzRpMWJXaS92c29MRjByY21Lb2dCYjhxazk4UWtFRldsSHk2UUtNYWNVWDltWWdBZnhxU2t5MWtBUlF4RkpGUzhQWU9QU1BORUZITkxJWUxqOUpyOXBQVnNoTlFCYXlQYnB0dXRyZ040eGllOXdyOEJQcGlkV1oyOG4zL0wxSS9GT0ZIUEtoVlBsQ3F1QzIvT3ZzTjk3K1JRUld5TjZkYVVWbDZHSzV2V1VYMDJQMUxEeTkwZUQrSWhXeWtEN29vcXZZTk9ZMml5QklNZmhjNldYem5xbGlJSzdHaXRURDF6MjY3TlhmdlBxWC9YaHgxaStXUG5uSmIzOSsreHhlL096aFRlYzkrdnc5SS9XeGFzNnZUQkhCQVRsVnduZVBmN0VUcm1yb3BlMDlJb2M5dlRqeWt4OGQ4dDIyZ2U2RHYvL3RmLzloTHB2dG1wdnIrbm8zRC8yeiszUFp1Wm0rV1JVSDhQSkgzNWoxWHprOTlLY0J2WkJHQmovSUQvYm5CNU9KSDJVR0JuUHB3Y0ZzNHNjZDNYM1pYQzZCaDRtc25pWnk2ZjVjZWlEZE41anVUTFFOSk5vU1gvcmkvdTN6QjlPaFZCM1pYcjR6Z0RmNnM1bSt3Ui9tMjNzeUhZZWw1NWZMdWw4UEU3UFQ4ejlPMWovT3pPcHJHOHpuMHNuRVY3K2NLSG5aZjJMQXYrUnVCRzk4OStERER1YmYvbjNadm81MFIzZGJwbS8vam14bjJzcTBQOHFrcHdNZGJUMXRPZjNVTzN4bElOMkJMSUpYdXR0eW5TRG4vbjI5Ky9mUHJvTi9PUCtCYWdQNWRueXJiVEJkaitzcTk5Y2cvM0dnTGVDdktYUy9HWDhUOEJkeDZlUHVIVDZqejNuNE92eDdEL2Y4NFVpODRobjN0eWV1SitGdk12Nm00Syt0dmEydk05dlgwTmFlNmNrTXpzZTVKNDBER3BYSHVmeE55dk9VemJYemhHSjM2RHFmNjhRcFA0QjNPanBBZTU0eW5YcTVveU9idDdNOTdzNmttUlVlNDVETkR3eG1PdkJqVGo2VDQ5MWNWb241L21DR1pla1l6T1o0Wkl2eW5HL3JhV2pyYk92SEc1M0lvYk16dzVjN08rMTU1MUhJRUtmZURJLzVIaDdudHFIaGVNN3dsTTVsMi9uRnJxNjJEREx1NnNxeTZGMjVOcFpuRmxvT1I3dzJTMldmbFV2amQzZTZEYzh5dmZoRGlreXVQNXZEczh3QXFZTkd4LzJlOWp5UEhkbnVMRXJYaytiem5rd2FlZlh3dWljTll2YjBaSS9Hc1RmTEF2WmsrNWk0djdzTnh4enk1d3NEV1J3RzAvaEd6OUZ0ODFHYlhuU0tQQzU3MjQ3QjRNUTVhMGZSc3hma1JMSDYybnJtTThlK2ptNFNxcThEbitYbExPYlRONHRsN0p1VlEvWjltVjZTcm0rMmJ2VWhFNUtqcjA4RTdjc09kaXZCd05FNkRhYjcrbEMwdnNITW5EemZtcGRKczBQMDRhKy9qYlhyei9aa1ovR3FQOTJHQlAzOXpMVmZYQUxuWEFaNTVqcTZlVkQ3b29vOE1NL2NMT1pJcXVWNldZRmNMOHVkNjBWbU9SU0tkM0lzUHM5cDFpeVh5ekRUWEk3MDQ3ZHpnK2t1ZFpIY0lFWXBUMGRuYzdNYjJnYjQxNS9tazRHQk5qVSt1SUNPZW05Z0lOK0xqQVlHdTN0UmpzSHVudlFnTGdlektNcmdZRnNIVWcraTNpakE0R0JtTU4vSlo2NkQ1MTFuekhleVgrVm5xWk9wRmZLREludCtFRzJYSDh6MzRxVzU2Wnk2ME54c1Ixc25icy9Oc21zZDNUWWI5NDRHRVhoRVpZOU9EMlJabktPNzhpRFcwYlB4Q0svTnl3dzB0TGUxejhlaG96dmRnN3p4QTU5dWIrdEVudTF0cy9EWG93Nk5NeDd3UmZTeDlyYmU5bXdXcHo3ODU2a1B6ZGlPbHNGZnVvY3Y1ZFMzY2NZMVRoaUtPS0JwY0p3TkdyV2pybWpDOWpRK3l5TmVUYU5DU0pudWFPUEF4Wm5GYlUrbnUzREFxT0h2V2N3eTNZMHE4NVFCN2RyVDZQZTZaSGZIRVZtbjBUZDVUSGVCZXUxczAvWTBDTXU4UVhDVU1UMTRkQnFEcFQwOVA4c3NNaDN6TzFnV2tLMDlBNnExSytPTTliajJETWlFd3lDeXpGanlIcllkam1neEhGbElVRWlWNmtGajQ1aHU0M015Q1BCczV0V1R6ZW80Z0NiZ1dSWHNRYi9FZ1JubUI1QjdsZzJDSTNMSVlueTJaOUdwMjdPOTdUaGc4T0tRUjM3WkxMTE9ja3kzZzVHd05Oa2N4eXBPN0svdFpHZnRXY3dqK0k0TnVmYnNQUHdoUDNRdEZSS3NCM1ZIbjhmWGN1aWtQSktDWkFzOHBvL2hSWVoxekdYVUMzSVpOa0l1TTZ1YnlmVzVYQWE5dnoyWEJiZnR5ZkRIYkJJMGwrMVQ0aXcvbjdNeGp2UFJmS1E2NXR2SjQ5dnpuYXhnSHBrand6eFlZdy82VWo3VGcrL25lMURoZkE4eXo0T1A4WEZmcDVLQXdzZ01qSjhmeXVmSWIzQWlJVWlYL0VDbVR3VFBEekJuYTZqOGZCMlBPYWFobzYwZGZUbk5NeXFQSTdMc0lIY2Z3RW4zMGU2WVVudDQ2TVdoRjRPS3AzNGNtQUJzajhjT2RHYWNVSG9jTVVQemxHWEt2cmx0ektvUFBRcW5mdmVCL3N5ZzB2VVBrdVlkR0IvNFEwdnkxTW5EckN5UC9hZ25UdUNhT1BJbnVnY08zVHhrK3ZqS0FBY0xUbVNlSGVnaCtBUE5adkdNdm81amVsWld5VFdxTUlMWVZEYVFjQlF6NldBamQ2UXgxYUw5VUk4MDMwLzNrbnQzcFBzR1NBbjh6dXN1dWdLK2cybEZ4WVo4Z1lKM3Q2RlJjT3p0VjI3ZDRwazRaWkd3R3pVRXFYRkd1L0RFNzNhem5KakxRTUx1TkhvVGpoQlJlT3JpUWRYdDV1akVGSTJleVR6WnozQkVQOEN4dHcvVEdHWVpUcU00WlpVV1BReE1wS003MzhGNUJlYytacHpQSVhWbUZ1bWJ3VVNDZVFzL2NoelVIWm5CekRITW13SkdSMll1eGxSSEQrZFdIRkV3VEtlWkxqem9hVHVhQi80aUw4SVJEQjVIOEZhY09CWndGS2w2TWwwb1kwOEc0eEpIRmFZbnc1eXllb2x0Z25HT0QvZWcrL09ZUjJYQW01aHBubW55N0ZNWThTSllUMTd0bHlVWHhKSEV5SUxMUWdLaVFJZERWeGNrZ2c2eUFoeVFSeGFEQWpNRXptRFZPSElHQUtORXIrWnI0RVU0Z0ZueWpWNldMZHNyWWtCRTVXU0tyTm1xUEhkaWp1RzVLNE9wRVdlSUhoZysrTkZuK2ZjTlFKN2lKL29HY3hBeWNJYkF6cFlnQjhLQnR6QVo4NDErWnB4amp5R1h4b0VmQk45WFBxb1MrQkh2NVZWTHpHTnMrbXllY3poT09WSUxMRkhWRThHejg3T1lLVHZJc0hqaytNZXBDem5sMmxCWXNDN2Q0QUNoSElzVXViYWo4ZmxjMnpISUdKMlhMNlU1ZCtLVVpoNXBOQzlaR2dkYUxrTXlnWUdoSFhMb0hxQlNMc3ZmNUowNHFwUmdXbWkzWEw0anczcmw4aHozdVh5R1JjM2xlelc2YzJDdmZKT01yWU0xeWtFdzR0djVkanlGT0FEcEhtZmtuTzgzNXQ2UnoyVlFVWjRobTZBb2VUZkM4am1PVFdTa29ZVytBZjdaa1NjTk5ETjFnakYzUWlyRDJNS3BId2UyQkk1a2dwM293aGpSblNSSHB3YSticUxEZGFJL2QzSWtkNll4M1NKQm1td2JKOGdKdk1Mb2IrZTdhWXJPUEtFLzY0ekcxT3NrSldyY21kWmJYZUFTdk9peXR6QnNPdE1TV0R2VEhEazRRbTdpaTcyY1duQWl0Y0N0U1VHSzVwU0pjT2Fia3Vsd292U0RVM1lBVFlVekJnd1hPaGlwNkhvVXdyQ21RUk9CbkZ6Y0tBblhUVHpONXFHZmpBbG45RkFtQVMzNXBVRjJ2RTRNM1I2MEtzN2tIeml4UzNWbUlHS2pkK0NNTnpOa0ZDaEFwZzJ0QjdtZXovRWRQa0UvNmNSQVozVXlzOFRFY2U0akQrbk05S1I3SWM5MWd0SG9jVjhXc2g5L3FNUGp4TU9BaWZMNFlWMGFQNHlVR2JaU1pnQzBRVU5rc0s3aElNT1BmcEVRSkxLbUpTV1p6MXkxVEdadU5xZTd4NkIvZDJhMVJNRUowaVU2VVNkWVRpZllBZy85a0lsdzdtV253c3BLclpqRnhNbFVXR1hpcUFNTGtzVjZraWRTV1dNTHgxbm9mVGl4ZGhoZEhCazRINDBEUjVTdGVEckJML2x1aGg5RXgwTTc1TUQrY0ZCR3BEakdCdzc0SkhnMERtQ1VuWG4yR0hSKzlsUEtzcDFpZXpqaUxjaWhYUTJkODhHMThiMDArbmlPUjVRTmdqNGtTUno3ZUVEZkFBVXp1b01jY01BdlRBczRtS0NHYzE4V1VuMmFJb3NHZnhvbElBblNYSFRoY3Rhc2hyUmttSFJHa2ttNnB4MGlVN3FIVFlENUVHcytscUFuUFF2ckVKNUZYcHl4YXJJZmN5Rzg4OVVNTSswQkZUR0EyakJSNEVTSkRTZXdMTjVOY3hwTTkyWTE4YVo3KzN2UVAzSEtjckdETTZxTnBRbnBqeE02RFljQi9pUXg0cHdsUjRUNHlzcWdqN0Z1ZmFnQmMrNmJSU2FBRThkZ3VnOEYwOTJqbUg5ZkQwZFlHaXV0V2FCVkh5cWpFN3NHNTNjd0k2b3hVQUFNUmJ0QUk2WDdORTV3MlkvZWlNNldua01aQTBlMEttVWcvTEUwT1QwRGkxU05JR3NpbjF3ZXEyS00wRFlteHdvSXVXSDlveEtoSDVORytCd0ZwL1FnWm5oVWpiMVpqemtOWTBSQzVzS3hCejBuUFU5MG1BZnVScXJNMDVvZUo1TXk4RU1rbjRmNWtzV1lwNlY5ZWw1YVBCTG5YQWQ1VFhwZU55UWVadE9kZ2F5T004WXFqN3FuRzJnUk5QRThUSWFnK0R5dDNYQVNPZVpoQ0dMWTRNenhnWlA2ZTNxZWxtZzRrUmJ6OFdBK3VDaTZUVmNiWldTY1VCOGN3TzduNDR6U1laMlAzb0lqZWl3RTJ4NGVrR0VYRndvNHNBZmp4R21nQzVJRy9qcDRvMitRSGJxTDY5UXVjSEpTdVF2eUUvNUFQeHpaWDNIS2NESGJwYlZtRnhaNm1MNXdtWllpQ1djSTJXUmxYV24wYUNZREI4SmZKdys4d25xY045Z0NYV2loekZ5OXc1SFlKVUduQzdOa0Y3Z3Rma0hKb1NKa01EcitQM0Z2R1ZmVjA3WU5uN3VEVXBSVUNRTXg2QTREUlFGRlFVeFVSS1FiYWNSQUVCTlVNREFRRzBVRUZRc0ZFMEZNeEc3RnhrQ3dFOTVqRnYvcnV2L1A4K0Y5UHQ3NjIrZXc5MTVyMXF4Wk0yY2M1ekd6SVlPNStsbHZRcUNGb1J4c0FFUEFhbUFSRG1jVElOanNSY0cwSEJ3TDloRzdvVkRtcGdkQkYzS0hjOSt4OS9HY3h4NFVtaXdQaWtDZ0NjRzZDREVVRG9oZ054L0JiaEVGdTQ4SWJ1YWlpSUZnUVJJazlBc2tkd2czdFlJaUVoRERRWEkxb0NPaW9iZUNvQ2h4RldqSklPWkdCVVd6TzhLa1lNK1FoV1VRcUl5YlhpektaQzJOeHZUbEN0UVB6Y0cwRjBxb05VZ3ViQTZDcThEVnhYbHhRUnlNRUlRNEM3Qk9NTmRMVUtKTVlob3hIWUkvV0lzUVJySGptQnBrWDdJV3daMWxYek12Q1JJMkc1SzVxMEh3TmZBUmN6dUNFdkEySVFwMk13aHVMamZjbUpNZWhPZ2ZIUnpNNHZSNEZCaTZ3WWpVazFOWXdUbjN3YXdOd2ZCeTRSY3pyWUdDaTRGUXNoZ0tCUnhiVm5CNkxoanhDMTdzYUl3cENEYmlndUZQc0RjSTZnQlFjWU1LWlNqNkV3VzdPczdFN2FKSVlBTWdHTDNITlNxRTNWQndLRk9id2N4ZUJJY0dNNDBPcmNVR1NIQW9ERTRRZXh1TCtwamhDRVl3elFRYm1paFlGUmdHdUVvRXMzK1FrVEdZUXNFUjBYQUZJT0VkUWJKYmpHRDJDeklKQWpNam1BMk00T2dBK0FRNG1UM3BZUGFJSWRqcG1DNFJFWDRvQWRyZ3d1d1o0bmFaZlVadnNNNkhiekNEQ2RZS0xrcUdaTGNReXpRY0pLc1VzVEp6QTJEZTJhVmc1TmxSR0hVUUNGNGcyYWZSOExMWk1mQnhtVVRyNEN6aUMweFBISm5BdFE1REZaVWk2R1dmdzhWQXYrQkpCNmRFeWtNUXBNWkR3cmxCMEJVRUVRbUx3Z3B1dUVFbkJrREV3TzFHdklYQW54WHNrMWdNTXNoRU5vWlo4TVhoSkNHQWVpQm1jWWV3Q0I4aUFxb0pCV3dpWkNLcVlUWXpCT014cE4wK0FnaENRQTRaaWFHRklnWWlDcTlZZkJpS3pzWGZPQTRDMmcwZUI0NUJSNGF3K1I0Q1hjc2VURWowREdCS0laaWg4RDBBVXVLeTBSZ0FFS0hNSzBYSm5sa0lDMWhDZ0c2d1QvQ2NRcGdoQXI2RitobWNnUnZqVENGR1Uzc2d6UTJyRURoeTdFLzRYQ0djYnhXQ3NDcUVqZE9RQkhpZVRETExpb0pWZ0ptSlNJQ1ZESlJFZ1FxQUlYQUhzQWdVa24wU3g2Qm9lVWdLUXp6a3pCTU1aU0FZbnBBZkV6Q1k4SFpEMlZud0FsbVF3KzRjTDdnS1hNa3BNdUNkYUVRb29HQTJnMEx4ekppL2pKTHBENHhnWnVGUXNLR0lna011VVNZdzQ0RElLb1FKenJ3eE1CLzlncUxkL1laK0RVeG1NcFR6WnZBSFUza29ZT3R3QjZGUnpIcXdBdE9aSzZPaGMwUGhHN0RtUnVHcFlUQkJKY2N6bnpjMEtvelpQQlJNaDRSR01jUVhCZk5rSVRGc3Vacmdna015aUp3ZEU4ZkNMUlR0SjdLd2tCV2MwVVNKNThLcUJaN0p2c1g0WktNUGYwUkRjQ01SQmJOU0tEaExId3FWSndlV3pmb2JIZ2YwUEQ0RFVnb1pINGgyUStPbnlNUGFvYW93UHpaalVMQVhVSnd3REYxbU9GRkdNUmtCSFI4V21JVGhFQlk5QXkvTTJERG1WSVJoY0xCQnhkeWlNSVl5UWJLSEdzWmk3ekFNQmZRTWlsQjBJNHB3Q0xRekhLNEdFT0ZvZVRpYjB4QXhFRENPbU1Kc0VJY3pFQ0Fjb3dNdlZuYzRNM3NRd1hDM1VlTDVoNk9mOFFLbWdkUFpMVVBBZVVDUkZDb1BqNElSQzQ4S2hkb0xSeitqcWloTWdBam9HN3h3QTVCb0RkUWdjMFpScEVEZ1RtQVNZeUNpMEErNEMwQVc4ZkN3b1NDNU4wd1pRT0t1STFqY3h5UkdPenN6MFErQ1ZRK2xCaEhIakFrQ0RPNTRoQkRBT0xqTEJQb0ZNWUg1Qm9sbnczeGdwcjhqQXFHek1ialpDNE1Ha2htdWlNQlF6b3VFWTR4SEdOSCtVVlF3ZEFtS09JaG9oSFhzTTZDYzdIc09nMk1RQ21wQWlBVUIxd0txRTJVc2MxTXdYTGtaQWtTRkU3Z2twMzBpR0FiTEFTd1FyT0VzeW9oZzdrZ0VzZ040QXB5ZkN5ZWNtUjRXYzBKdzZnMXVBU2R3WURSeVJlenFnTVJ4ZGRiZmlCRmc3VmdlQklNR0JXNHVtdlVsc0FtbXF6bWNCb0taWnM2b3dHVm5weUtHd1pjSndaemZEYlNGZVVjUkNWSHNkcmp3UHlJaG1jMmtpQlE0ZzNIeVNKWnV3bXlKUkVPZ0RYQkJ5Q2lNWkVSazdCUDRERnhzRnVrWGhxY2R5WjV3SkpRN0xzUTBGMTdzS2l4OFpyTUNKZUJCU003blJza2M4MGcvNWlCSFF1KzNGMmdDSk1QRlViUmZPcFpOSFJTeENIYlplOFRLRUt4eFhKOWd5bk1uNFcrbUVmQUg5eTRXYmhpSzlpT1NReVBoN1NBTmhQTXhWakJTVWVBUzBFZHNCS0RFRlZoeWt1RmZ5S3F3ZWhCeStVRkdzRWdJQlR1QTZ5MFViRW96SjRPN0QvZ0tFTEh3ZXR2REpFZzhaRWp1SUpnd0NJVFA3QXVtOHlGRFlCb2lZWGZZSFdQeWNZTUVmalJ1QzZxWHF4UGpCTzFnTXhLaXZlMkl5M0h0VUVCcDdDellkTzVzenFvd1lJSmRqRTFhaUhqdU1iRGJEMDJHcVlEa0prRWs4bmJzSEFRK2FFVTA0QUNjZ3JtT0Y5T1NtQU9oTEJwRXlkUURpdmJlaFVPSFc0aG1yZUl3TVVoV1NXd1VDMzZSak1NSWhtNUVhTWo4cTM4aVJCUmNUYkJPM09qZzhnT1JiQlJDaEVJeVNDb1NPRG43TW9FMUNnRkFhQXdHTXBKeTNJM2hCSGJUY0h3NTdCMS9zQTVoYWkwU2ZpSnJSZ3FBalNCV2NNTTlNZ1d0alBKamt3ZUJOeE14MEdVb3VDeENGRVpLQ2lUWHVQWTB0VHlLNWQyQURZWkRvSmVpb0JrUVFiRFBvVTJoKzZQK0NhcWpFQzRqam9CRjRiNUVDOWo0eDR2TG1VVUZKaUNRaWtESkxIZFVZRkljUkRLK1orcTUvY2xHUmJPaEhSWE5Jam9FOUJqVHJJeG1UeCtQbE0wVkZLejF6SkFpajhqRjBTZzVnZGtYekVxdU9uUWdPeGlOU1dDd0xxN1hQbitqT01pUmdhelJTTlRBcDB5QjRPd2lMaDJLa1FmdEFVaU9LN25iaUo3QlBaZm9HWWtjZklla0I1d1BHRXRNQ1FiR3NEcWpFYlhMZ2RheUYzdUxaNFVtUkFjeEE4RENqdWh3dUQzTUQ0SUh4R3FNU0FHTzdpL0gvZUdxek8xbE9SNE1LWFI0TkFKNTdnMmVMeHdpZkFDWTFROFNRNXQ5SGNPNUVORXgzTlBCR0dNcUMvbHhWaEhVQVZPRTdhZ1NKQUkwUEd5RU02eWxMUHhneHdEUVluRmJkQ3pETmVSd3FUaWtvSDFBSXZmT2VSY28yOTh4VndBRlovV2pXY0NJVHNWSjdPa3hqeGt2OWxkeUNpeUVQSm9iWFBMb1dleGVPSGNuQnZZTVR5ZUdUV2NPckl0QmlJS2JSUkVKQVQzSEpKNFNKSG9Ea210RkRQeHRKZ0g5c21NNXJCUkZPQlBJS3JFQzR6T0dLYlVZVHB0QmNvSzdRNVFNc1ViQjRBZVViRGJGTVBzVzQ1ZkN6VjNra0ZrajhQeHdkMXhDR1FKdURuc0RxNFJlWWQyT0Z6eGxYQWNSTTU1Z0RPd2J1NWRBRHZYR0s0aU5HSlRzRWFKZ1JvOGxjbUtZUThza3BubE1DSWVleElTa1lENmk4MklRRXVIVFVIL3VidUd1c1ZFV0V3b2tGaktZdlFKWkxjeTdoR0IzeW13ZlM3Z3dDRFltRk80eFlKcDRkbmZNMFlDY05RdGQyTjZuY0JQWTVWa09rdFhPZVZZY3JJaG1jNjJJNEtDeEdHYlRtTVQxWU1QWUo5Rnd2Q0J3TXVPdlFNTERZSko5eGF3MENxaFdDTlRGa1ArWWFMaXQzQ0hJaUxNR013RDNuei9pUXRsOHhCK3NIbmpDdU4xL1RHd01HeldzUHdHdHM3dmhRdllZbHZEbUxvR0FpeldTNGZhc1gyT0JON092R1ZiTWZjeFJRVkRHc3lwaW9UKzR0KzJuc3RFSkNhUEh2dVB1QVVnNzdBcjNsbnN5QUNpNURvbEZPZ2lTS1JuY05JdlUyQ2dDdkpYQTFSVE5vQWtVSEV5TWtsTUxLS0dpdWEramc1akU0K2FxWnBFa2F5UytiRDhNVGdSSGJXTHQ0UWc3S0VBWmdWSkNqNkhqRWhCTHRidjhNZkJGbWNxTjRkeUltQVE4YnlZUjFNVWtzR25NSGRKK0J3bGdnTFMvNVNSTUpKdVZNY2hyc3A1T1FVdmhYRERZamgyTkVsbThTRmFDdHhDTGtrRTk2QUVZSGp4M1puNlltQVhCYmdrUkw5TWNlQXJJNlVTeGtuMkdBekgzOElRaFE2TWgwVGd1SUc1L1NORGcwRTI0Ymd3RWF6NUxKc1BzdE9zaVJNdG9EMXc4OWlkM0NXNVNzeVF6cXlBSnIxbFFNZTBzRkM3VHlPSWNkdkZBNWdsRGNwbGd3T2tzdEVBUnlEUW1TamI4VVRBQ0RRb3VNNExSd3A0YkJndG5oRkN5NEFjRm0vT3g0QXR3MVNKTVo5OEZjNE0yTnBCN3BxQWwrQ1V6eWMwTmxDeDg1N2dMc1FESzJLMEN4dVhNQmY1Z25nVUtacEdoak5qb1JRRXJ4Mm1tV0NnR2RtY1lxZEJ3S0poM2hJS2JsU2daOXN5UUlCWXdZUmo3STlSaG81bUxVdkVIYzJaUklHVGhEby9ETk9NYUZNZEFQalM4L1RUd2tiaGFvVEhZcFZqd3dzckU5dTZEazhBYXcyRlRzU0d3N2VpRDBCbnN4WkxOM0NUaGxEdzNVZHFUK3NEeDJmVTVrOHRNQWs1a3d4VFRocjNuK0RWY2poOURrUGtQYlBwd2t0MDc4N01oV01PalFUWmdrcmthbUV6TTljUms0WUFjYnJKQWhNT0Q0YndTVEJmMkZ4Y2VZNm9nWW1rbjRFQnluekNIT3hZTUFYWUpGZ2pIUWtYRk1uY0g0QWw3TVJwTGJBSnpIK0xRQUx5WWJVSEJSZDl4Zm9naTR0aEFqWU9OWVYrRCtoVEZpbllaendTN1RoenpkeURZSFVMbnN5T1Jtb0p6aHpJYXlDdEtOcVFnT1M4MGpoa09obTB6OUJKL01lc0FnWWNDeWJuTGNRaGoyTHNRREJoV01BMFp4MmhSckJZQTAwanlvSGtZdGx6aUhIOWc4aUt0QldBT2tzV2FMTWNGSkIwRmtBemtpZGlMT2ZZc1pjVE9ZRThlMFRmVHdlMFVQMVp3Y3hwbHU0NklZejRaUkRoRU1HZmo0TzZ4WVk0Q3JXRWpHRU1mS3BURnZDandJRGhTSTlkR09PQ0JhQ0ZjSFRaUTR0Q2I3WFZ6QVJZS1JNQnhUTi9LNDBLNFdBQUZnalZJRHNSQnlUb0RHQklUN0dvTWNvQW5oTDVrNkRFSzdtam0wMENpcmhCdUZNVXhkSWhKOWpIRFlDSFpsMnk2UUNad2FSbjh3Ym8vQkxxZGZjZEdSRndJSEdIV3NCRGNOb3dORzdXd3JxaUtEZTY0VUFTcmtHeFljN2xDNExSY2Q3QjRBUUx6RzVLN1BvSUdwZzlRY2tPQnkyNURzdG93cnlFNWJ3YVdMWUVOMkRnRUNISE1kc1NGYzI4NWJBQUZ4a3M0czllUU9DZWNwZi9pd3BtdUI4U0JwNGtBSG9LQkNaQ2M1b2pqTENva2EyMTd4SXVDSFJYTjNEUVU3QVBXc1J5T0hRZVBGNVhCdE9GanRCZ25SVEtNQTVJUkRPS0FDT1BHb2xnTUE0bkxBR05BM3pPM055NmF2WWUzeXE0YXpXV3lVZURvYVBoZGNmQk5JYmdlZ0Y4YXloMkRSakhaVGhqQkg2enZFZTR3aHdZakVUM0RiQVRHTTh3c0pEc2ZYRElJTmpJWjF2bVBGa1BCbWdZWEVIOXo5aHVTdzU5UXdtdUUxWVRqemFoejdaOXhneGV1Ri9jM3F3c2hCSGNTMTFPd0pxeHhNUXdXZ0dTbmg3S1FFVGxUVGpMM210T2FiR2pEUDJFSGNJMkQ0d0hCaUYrUURQcEV3VDFmR0ZuRVlWeTdZQjRaMzRtRlpSeFREZEVnMDhzb0FrSmhSVkd5M296bk5BR0NBRGFUNDVuZFk0bGFWQWpZRnRmZ05Cb2txbzNuN2l5ZUpWd2dXUVhzMFROWUxCb0ZOMHpqdWVFQzJBWXRpZWVlQjlMOWpBQ0NrblYwUEtkQU9CZ1ZrajBDanEyTE5DQ2pDTFBaRDQrZDlRWGNYSzRPekFxR2FBRjc1eGl3S0xrMnQrT2dpT1NZVEdnUGNGQXlkeFVGVTZaeENlM2tXWlM0T2h3Vk51eHhNdXZ1Qk1hbWdXU1lQa3J1SkE2R2pvTXl4Z3UrSUNTak84WWxNQ2NJa2dXa0tKamhSTWw2TnlHV3k0K2haUDBIUHdZbWhmdWpYZkhqajBRRVgrQWVjWms0bEZ5Y0ZaZjBqMlpKNG5vNmlZMWltRFowWmhMejFTSFpWWk00dFpMRVprNFMxNWRKbkVzY2h6Z1ROYWNnSll0ZVJKVEZ1QlJ4S2NoVlFuS1BwUDBKTXdJbVZ3VGpoUkVFcklGMUhvcHdDSGpkOFF6MHgvTmw2UlVrNTlnSE9CMFNaSlpvRk1taGNqeHNYQkVTbGJMUnk0STl2Rmdnd1FpdDRGcWdZSCtqN2ZHc0grTlpyQnVQc0F1MU1ZUWVqaEg2Q2hMbmhRU3lKODVjSmU0VDlpZTdMVWhVQTMzSUZFVjhDR01WUURLUENBVTZLWjdoM1V4eXlvV05NTlplcGx5UUxPUStnZW1MQjVyRy9jMnVGb3BIQi9RQUw0YU13L1l4OEJVTVZOWWJuRkZIUk12Y1FaUU1xNGVFbmNYSlVOVHgwZWdONXN6Rlk5S3g2M0MwUHpaODRlZWphQ2NoY3NNWWd1VXFVWEFxamh2VUVOQUxETUxFQzc0eEpGTzlHT3FzRzRHUk1QNHFTdFNPWVFKcmpEdUh1OEJPaEpualdzYTVPQ2k0TmtDVnhBUGlaYVJaZENnWExVS3kwSnVWREg1RGdRRUZHUlhIUmpYK3dMVTU1aEFrZ3djNFhtaTdjOFVtRnhNWW1KaGc3S29jOVlTRng2eDJwTEM0R2pEZ0lGZzEwWWpyV01FeEtUQUx1Y1BZUGNOcFlWL0F3MmQ5QklJUUo5bXRzeWZNNkVIeG1GQk14LzR6U1pGaTlHT0NoY0x3OEJpZ3hEbDZFTnhqQWNUTkhuZ1NSaE8rU1dKcUVSTGZKM0c5a29SZVMyR2pOUVc5aW9ZbkJPUDZxQmtLRGZrdTFNMnVnWUpqQXlQZTRONjFFMVBhaHcxa05BUkhVVWZCY0lvRUpCQllOQUpQay9PcFVUSnFOb3A0Sm5BdUhoSEFjeGlhS0pRY3hncjhDak1wQVVSVjVqSW1BUDluYjJNNE5ETWhCaUVWSGxBQ0ltTldQUlEyQk5NY0NjanRvVTRrSi9FSlV4VHRqaGZ6NERuS09RU2pMS1BnQ0JML1ZJNHJNY2NuMFE4T1dUd3JFcUN1RTVFd0NJUmtkZ3lTOGVCUm9PdkF5V2N2bG50T0JKYzhGcktkaWdYYUpqdWIrZHFKWUJTenJzR3dTRVNENFBBd1RJZkZtVXlYb1dSVkIySWhBZ1FEQTFrWHNHZUlrcjBCOVNFQ0JTWTd1MVlvMStlSkRPcG16UXYxYjc4YVFsczJ5MW1BR0EwSnJ4MVVDQ1MvMmFFQS83Z1NWcGhWZ0x3ejdoTWxkMTZjSHhQb2U4ajJ6OW04U0dRRUlUa2pmdU52amlqSmtiK1JhV0c4VkZZeUJqcEhmVXFFZTQzcWsvNFJhSGNTS0FvUTBIZE0zekxCNEpBazFsN0d5V0ZqaGRPNkVDeVlSb25lZzRoaEFqVW1jUW1JSk9ZZk0yTUMzY3p5aWlqWW8rVTBOUVRyRkJTYzBrZ0tuSUZYZXpnTUhRN1ZFWUNTOGFzeHZybWNGempxdURnNlA0bkxYa0d5UDlua2hHUTFNVTBKd1pyR1hFa0lMZ0pQWXZvT2dsMmZaUk9TV0FBSmdUUFFsM2d4dHhVRis0WmRuS0VxRUF5N1FzSGRCZ3V6TUp0WUdJdUMrNXRWMXM1UlNJb0dkcHJFNGhwSWJzWWtzWHdsQks3QTdBMEhia0t3eTNMdUVTUnJETk0zU1FoVzhTVkxqTEY3NGhRWkpPdEJ6b0NuTUpXV3d2b3JoZVZkaytRcDBRbnN4YjdpSEtsWklIYjRRU0w5eWtGcnMyQi85TUNPWlJDMFA5YlIrRmgxSUxhK3h3MGtaSXo4WVl5eEdaUGl6dVZtdFA2MWxrY2JyeTcvZXM5ZS81d3pFVGZSZnNJL0gyQmxGUE4yLy9YMVAzOE9aVnhldUFJelFtTXM3T3p0T1NxUXZmMHdWb3hrT2NyMm8vUVl1d2lOMEd2UEVPa0JZNGpUZ3g3NWI3UDFtTUxTSS9xQ3RtdXd0VWZXN2VWL3ptK0hhdldpZy9SWS84YnBoVWJwdFlOcDlucGtpV043L090WXFFdldWbnhETkIzZnNYVkgvL21PbmYwL0p4UE54dmRzN2RGL3Z1ZW95YmlkZkh6TzFpK3hPNDB6dDJ3dnpMakN6TGE5c0dvdnpMbnJkUDNYV3FkdWVPbmdwWXNYdHBYVTAwdVY5NWZycGVyTk1aUWI5amROTmpVMU5UTTFON1V3dFRTMU1yVTJ0VEcxTmJVek16VXpNek0zc3pDek5MTXlzemF6TWJNMXN6TTNOVGN6TnplM01MYzB0ekszTnJjeHR6VzNzekMxTUxNd3Q3Q3dzTFN3c3JDMnNMR3d0YkN6TkxVMHN6UzN0TEMwdExTeXRMYTBzYlMxdExNeXRUS3pNcmV5c0xLMHNyS3l0ckt4c3JXeXN6YTFOck0ydDdhd3RyUzJzcmEydHJHMnRiYXpNYlV4c3pHM3NiQ3h0TEd5c2JheHNiRzFzYk0xdFRXek5iZTFzTFcwdGJLMXRyV3h0YlcxczBNVDdYQjVPMVJ0aDlQczhCR1dDdjdQdU5ISHF6dGU3RGtRVHlBU2ljVjhpVmdxa1hXVWQxWFFVdFJXNnFDc3BDTHNJRkJWN1NSVDUya0lOWGxhQW0xSkYxNVh2cTY2bnFDZndBaS9RVzhxTU9PYjgzYnhpL2g3aE1YU1gvemZvci84VmtHYnJDUTVaVm4yTnRPSms1WmxyZXo2U0ZsbHBQdnZQOFltZzZiNitENWJrTDA4Sjdmb3dQR0s2cG9MRngrL2VObEd3bzZxZmN3c2Jld2RCcmlOOEZtd0hGOGVPbDVSYy9GcTNZdVgrSUZCWmU1YmU0ZGh3OTFHVEFzSVhKQ3pjZE9GcTNWS0hmdmdJN2VKVTZaTzh3MEl6TTRwd2luVkY1NjhlTm1zMUhHWVcwQmcyb0t5eXBPbmJ0MXBic25JWExhajhPU3A2dk5YNis0L2NGMTM0a3JOMVRxMzBSNFR2YWY1TGxtKzRzQ1JvNmZPMUp5LzAxRmRZOHJVYjk5YjI5SWlaejUrb3F3YkZkMjFtKytjdWFYNzVsVlVxbXZvNkE1M0dlMHhhZkxVYVhQbkhhNitlZXRoYzh2WDJMZ1Y4UWxyRFl4TmR1MDdldXA4M1owbkd3Ym5yVE5kb1h2OTV0VzIwUjZUcDBpa0toMTZtelI5aklxMkdUQm95TENWT1dPREUyb3ZYS3UvZSs5MWF4dnArWFpQZnlKTWQ1WjJFWW83enQrcm5GWXMwcFhON3lMUWt2S0VKa0pMb1VUQWs0Z2xIZVdlS3FxUzhSS0JzS3RjSnBBS0pBSytRTUIrb2xhZ0lPWXBxNGxHUzdwSUprcjRZblVsVCtGUWdaR0FKK3dvVmxHMEYzYnI1YXNYS1F6cmxWWXJTdDh2MEJhbi94VjRTOVJsbXJMT2lwMFZ3OFJ5c2JiWVc5SlBORnplWDZnbzVBbk1GUG9MdGNVS2dyUzkrTXJFYkpRZ2JZZlVVYUFpY0pUWVN2dUowdHM2YWtwTk9ob0o5RlgwVmRLeWhPbDVXZ3BxaTFlTFRFUU9FcjZ5cGl6dFpQZDR4YlRiMm9xaXREWlIyaFBGVDVzRU5yTDVVenVubFV2VExvbmttZzRDdWRoV09seXFLSTVYMEJGTUZuckwwakkwdThyVlplN0N0S1hpNGgyS0drS3pyY0w1OXcwa2lpSlJXbUdIK1Y4bFBMMitZbnliTFV3N0tlZ2lVRkVpTVkrSG0rT0xKQksrVkNyankwVUtmR1ZoQjE1SHZxcW9VOGZPUERXK0JsOUxxYXVvbTdRbkwwd1l6dDhucU9UWDhldjVOeFZ2eVc3ejcvRHY4NTZLR3ZpdmhXLzRUWHJOd2g5OERGU2VZbStIZ2FNOVZoUVViRTVkdG1ydHRyTGpDdytJSlRMckFRTW5mTDVXTCt5c2FXMHpZZUs4UGFYN1RsZzlWVjIwWkhuQmYwY2lHNGlqUFFJQ3B4NDUycVdyUkNwWDZLeGhiV2UvdStqdVBabk55cHpkRXJuRHdLRFFGYm5SdnFlYVBrNmU4ZVZQMjRhTnhpYTlEY2R2MnJKMSs0NWR1MHVPVjU0VEt5aXFkYk1mTkd4TTRhN0xWN1pJdExTNzl4bzQ2UFg3ajIzVk5VSzlIcjBNREMxczdWMUh1SHVPSFQrQkRicnAvb0ZCNFhISmMrWXQzYkZuMy83VDEwcjNSVVd2bXRZOVZTUVFHZ21DQkR3VDQ3VDBiZ0l6bGE3Q25qSWRVVCtSczFDNWI5b2VjVTloVDZHaDFGSmg5TkQ1TmpKMXVWVFRZWmlkd0Y4cU0xVVg2UXU2aUhpRGJZVWpSU1pDdVVRbUdhelhXNmdvc3hiWWk3UWxRa1dKcDV1TmhaS0Z4RmdxbjIvZ05kcFEybGRkMjZCclp3M1phRnpBV1VsTEloZTdTbnZMRWhRR09mVVZPNGprNGpGaW5xaURRSlMyYklhT3ExU2VWaml0K3pBRnVWaXBrNzFZYnQxZnFKRjJ6REZncktLclRENThXQmRYNlZnbHQvbVM0Zkp1QWhjM0c0R3lWQzYyazhqblcydWxIZVdwbUN0bGJBeEtVRWc3dDlUZFgybUJ5WXI2ZEpldHg5THRKSDJGVThVRzh1RnlRMUduOVAxVEFrY0s3U1FkQjdNeGtQZER1dUIyWDltMjEvTXRqQVFkaGRMNVdVdUU0U0lsZ1V6U0lYZTZpeXplTWUyYlBFNGFvelk4YlVObnhZa3lyYlJGODEwRW1VTlUxQlo0NnFZMTlFdTdaU1RRRnZMbkQ5YnRhQy9pTFhpYTlyMlB1MUF1NUdkMGRIWWZrSGJXVWN3VGpoZDFzZVRQVis0dkRGQ2NJRThydGUybTFGOG93N2dYcDIzSXVJdWJWaExFSzNwTE1JdFVGSVcydUJsRGFmZlI4OGNwcWdsRUFvbXNtMEJCSkpiTHhWSm8xYlJMdmVRTHhFelhDb2d5c0pZK1J6U2RmRHB0SVZVTlBWMUZ2ZW02SC90djZkZlhWSzkvZE9IVC92emQwNDEwZms4M3BsWTk2NEsyNmRaL2VRM1dQTG0rVFUrbEJwdGlaVDg3RTgydGRxWmRHMXcrNitpN040YzFlSGhFNjN0dXF0enFTWFYrWXdMcnQ0NmgrL3BlOUxSaHJHbUQzL2pTWjFzblhIdlRNRUdQb2lZMjg5b21VZ3hKeUlqSDQvSHhuK2VxWUtyV2dSY0lKY0xITHlmMzRPbDBtYUpnTDVQeE5JVThHZWFjcUovQVVkcFhrNmRuZ3hPRVVpZ0xpWnpmaldmUFRoZEtjWWljcjgzajgrMHdPWVY4S0NlZURsK0FuNVRGZXhFTzRIWG1xMlBxNG1qVUxlVkpCSEsrRHM4QjV5cmlURU5VajFyUlVUeWhoSy9BMWNxYWhJdnkyZnV1ZkR1MDd6OVg2Y1p6NVFsNXFKd241WTNoOFNXSzBoazh2a3hCUElMZkJmWHhlRGJLUEZ4UnBNRHJLZU1GQ1hsaU5JcXZ4UmNLT2dpVjhLZVlwOEpEdnd1NjhYWHdmekNmSjVIeStBb3lIbFFtTDRIZm5aY29FUEpsUExIZ0FUb0JyWld3R3ZsU3NaelBNOVUxRTVyaXZZaG5LRlBFSGdnNFFHQ0xMM0dpd0Y3SzU2OFQ0SmN5SmV5Q0FuN05ZT0pWNGVmMnMzblk0bFljaWgrZjVHSHJDRTgrckN2YXJzVVg4Zkw0MnFwS1BBT3Bsb0t4d0JUM3h1ZjM1ZzFGei9QeFcyUlNuZ25QQXJYeStTTGNkMSsrbE5mRXVvMkhoZHNkT25RZzFQS010MFpFQXR5bDBGQWc1TzFFL2NSZnIyQW1UT1ZacS9UQlhjb0ZacWhSd2hzZzZDbmlTUWZpWnlBdFpSak5QRjhCNjBneGJ3dFBJRlhqZXBYSFUrY3BTd1NpS2ltN0VRM1dvM2hPN0NnZS94M2FKVWJaaFQ5ZXlqNEpZMzJCYndNRmVLQWlrdkg0WC9FOE1CcDRLM0UxSVU5UGJpam1ucEtZTHpCR1o1TUVuY0h6VWtkRFVNc3NNUzZBL3NaSVk1Zmk0VDVnTjRnM1NEaUcvVzNNMXlEY3MxQWtsZklsT3NMVjJNNWJhQzdsS2ZQVVJUd1YxTlNScTBXRUVjc2JJQ1JKcElTbXB6VVRwVEVIRUQ5QlQ2YlRlVHpUbVh5WlNKVVh3Tk5tZmFYUURmMk1uMHZrbHJ0L2VLVWZmTUpWaFNhL0NONTcrTGlBdXJ5MGV0Zldwa0xzVjNyL1cySngvUFprNzA0WFJ3bm9SSlNhZytGdUh2VTV6WnUrN2JXSUtoeTMrTmZZU2FqdHlMT3Ixbm9pOG00cE0xaTlVVXl6SHZWTjlQUVVrRmVhNExSem5ZQ1NVZ2FmejRvVFUxdGs5YWJJd1h6YXYwVjVSTzh1WXRxa3VlTFB6bHZ3YVJWUDVFLzdLS0VDOTdUQ05aa1M2dlpINkdwZXpxZTNnMzNTOXZ3bHNyc3gwZGoxSFo4bVZjYnovU1JFYmJVRC9CVEdvTDVmVTFmV0xwUlE0aG5mMVdka1F2TDRzN1dtV0V0Q0M4UmxLK2RWOGVoSjAvaUxsOE9KQnZaYjFsZlNCMTB5Nm9Qem5za2lzakt3cUJLc0ZaRmh5b2g5RHBGOEtzb0xqU3BFZDUwTjJtZXpESisvNTI0YzkvWC9LTHNZcDdwdCtTYWg2L3Z5NU5FWlBMSk5QUG5ONVk2RTFnWE1MWkJNRUpKbCthY3VxeElGNUZEdjFSaDRYVWFiQzArcW5mZFhJbUZpeUtYQWt5S2Fwei9nZk5OREFXMHduZDNGQ1pzVmZManhkYXEyUDUvbUIxNUpNWG1yUkQ4ZmR5YW5yd3ZPa0VKVEJSL09lNnhEMXRlYVZZcjByVmZWL0psUHBIVEVmYUNDd2xjcG1ibnZ5RnhsTHFLUkE3YmYrRGxiU2dOekJ0OFIyUkZ0aTd1dFlYZ2NNY0dyTDcwTkIvTEpVdnZzMCtzV1BKcS9vcy9QNng1Q0N0a3pheEdHQnFYY1dqVnBUWXFRdGdSdk5BMVNFbEhUeTVOS1JqZjVWTk84NUloR2k1aE04NXJjZCs4WDBZdnhNeTkwNkNhbURtR3kybndSK3B1M08zdjZMRVZTM24yc0lXQ3JoQUt2LzlueFJwZEhsL2Q0MkpSWFNzaGoxTWN2azAxRTFDSDc1N3JCWmlJNk1UNWhVazR4bjViY3ZhWTBhSldZMWd4eHIxZzRWRWhabmpQTUlpOEpxR1piYkhrSTduOWp2NWF3OUcwaTBxdllLWFd1NU5PUWNWc2V2VXVXVW5jbks5VURiWExxdi9CcmRsT0NBdWxHZGE2YnVscE94Mis3N0toSzU5R25qOVl2QS9CcmltTnBuRzU2TG8rbUxrOHVhUG5KcDhNSEJyN2VOWTVIbWVsOTU3YzhFRkJlM3FEakdyOHdIbXp6RCtWL0UxTjI1a0dseVJqZkZRZlh2aXEyRjlLcDdhTlhYNXNxcHhtanRNdmpKa2pvNXVuNlhzYzhaZFRKcWM4OTIwRXlxczNJTFR6cEo2UUQrdVo3TnZTWDBLanY4YzVKd1h6S1RDdHIzQjlBZEtHM3c5ZlJ6UUl5ZTNuOTFvZmJQTnAyc0p4WEd5a2cwMm1yYnU1NlNqUkg2ZkxWbzQ5NTFQK1IzdWlpc1VRL3Q5UWMrRjBrb2E3K3V3dVhCb3NwOE9EZHhUWnZSWlF5WlAzdDIxM2s5T3lGbHZmcnZSSzZVMko3bzJDa0FnV2tiUkxNMVJkVDVGd0w2WTdIWWhLbnoxQTlNMHRFY2NMbmdaZGN4SFNoUkhlbktCOC9pYjV2Mk1wVGI0UjArK2t3KytlZFJhVFN1bXlLNDFnSlhlZzhOM1Y4aG9paysvWDFOQndsOUxodjJ0SUYyQVhqMjh0em91RlBaZlFyT0svTHRkTWlXbVk3WlBOaWpPZTd3M3VWVHU0dEpOZWhDOTM0VXlUVXp5Q21RNE94aUs1TS9qMnVGRC9DZUhpUC9iWDZVd0thdW9tLzd2QlNIalV1bWY2M3VyK0FSQnRYVC9VMEVOTDFXWXFMTmNPRWRQL3lZczN1TzRUMFpHdy9yMENNKzhoNXRLMzdXU2w5U0hxdzhlZ0VCYnFpMnFyelJrZEljMlNTRTBWNk1vcXlmRC8zcnlXZlZwMmFaKzdBazVCUzJJY1BVUmkvK3o1WGJBczh6S2Z4V3Q1THJvN2xFeit4UGozWmdDaDV1M0djMWxhaWlMN0xqN2M0aUduRGs1V1hWMjhXayt1ZmpVbjFaa0xLMjNJLytuZ2V4dm5idWs2Q3kySmF2eU43UWFmdE1wTDEwQm95OWhLVTU5L0hqOWV1RWRCajFYazUzWFhFcEZDWE5YemhGUUhOUDYzZGZXeW1rS0xrbzBjT3Z5QW1nVkJ6d1hGZkNZbXk5VzlPZFJDUyt1RnJHMDBTK1hUdzBxUGZyMnQ0ZE9MWjNpcVpOL3A1b0ZFZVQxOUlvMG83cU43dUtLS29UY3ByUGlhS2FkS25KVSsxeTJXVXJybW11NXVqbUd6TU40NjYxU0tuQlE5RzVmYTZvVXlMSHVzNXV5NFVFSC8rRVoreTIzdzZIV2U0OXBDbm1GWjM2djIzcTFSSTZUMWJYODNUbHRDNDJ0cWQ1UmozeXlNSHY3dzBTRUpqdnRTWldqN0c1alZaZTRPUGpjTTg5ZzRjR1JFdnBINGJhaUlkVXlVVTlldnN3SllQUXFwOW0zcG44aHRGdXBlNnZHemJBd2sxZWp6dnR2T0NpRnc2eGdmVURoZlJTZ1BaK2lkYk1SOXVmN21RZFJHdWdjT1ZDL1BDQlRUdFFaNWxrQmFmZ3BWYlV1cGFvRi9tOXBOZmNoUlNXRkxia3lXZVJJdVgzV2hZOEloSDNhVTFnbUZwUWpvMGIzdi9hd1dLbEpHODV2Qlp0Q01qYVA1eTIzTG9rZkNqNDg0ZFVTUlI0SmlsZG1PVktLSGUydjQ2QXU1SWw1bzRpNzlDNm51dFNhZVBNbjZiTnRhNHp0aEVUQyt5TTljOW5TbWhKenJEa3E5L2hUNklXMjl4d0ZSQ0NhSHY5TWF0RlZPZCtzNVQyNlVDbXR3VzB1M0RUaEZsS0t1MTlsVlZJak4rUmRDRmZkQno2WTRaeWVkNHRLTHpueXE3WkJuOVdEWm55YVVSUXZLTzg1cFUvVlJFVSsvc2k1dGlKNkNZWXk5MjdJdEZPMVFLekR0M0Y5UGZWaXZlRVFCTUdTTTdUZXNjUW5TNUtsMjI4QVdQMXQvcDVQc2I3K2VPYzdZeHZBRDlIL1o0OHpsUEh2WHE2Q0piODBsQWRXWVhEelgxa1ZEbHFZVEQzZlBGcFBxc2NxSTBSNUhXVlNSc09WeW1UQ0c3SCtZN0x1U1JUR055SCtVa0FYWDZxMmN6K1M2UnVIaW1iaHZhNC9zMEp5bHlLZXphc1MwdUkyTWtwRkdzM1poZXlxY3I0blZEYm1Oem9yZDNWNmlOVHhQVCtKSnpiZWQ3U2Foc2ZWMjlHdlRQNHZ4Q3AzRjZjaG83OHNxY0lhNUNxajZ4OUUxT3ZZeDBMaVhsWGw0dG9kUHJyblg5M28vSTlIckU1ZUpOUWlvVC9iUUlsQXRwUjdueDNvOXh1RzZtNzR4eFY0UTAxblB2V1lOellwb21HM2wxV3FHSWpvUi9Xamo0SEZGbXNsYkltaUVTcXYxelpHSUduSTZtZ1VtMnZZT2xGT08zT2VXVWw0UjZXRHkvWDNoSVRBL3IzNjRkZmxoQzE3UXpHNzlIU2NseXhLVDBpczF3TUdmMVdqRmhscEJ5U25Sa2kwZnhxT2ZWQTVwVE92TXBjbFBROWx4N0hyMmNNL0YwVi9TSDEvcGxGZUtMQWxvcHVGVTlINXYydkUrVFdLcGFDV25mdGgrUDFwNUZmKzNxZk8rbm1vaHVqZS9lbG1NbW9ZOG5kcHlkaXAreHZicXM0NStKandSMGZxV2wzU2JvVTZkZXVoWEcwT3ViMm5vY1ZYdEROSFRjTS9WREMvbjA1bVM5YmVzSm9xUjRPcCs3bStqTjloUFdQVC9BMzhqNVJILzdBdnZaL25oKzNFbWlWUWZLYm5vMUNzakUxTkFvRWVlcFRubnVLTE9XMHRWR3I0UlJSeFRJZDRGQzYxTWRDYjBNdlRCZHZFbE05NHFHYitsbW9rQW52aHBmN2JkY1JFdWpzNzYveVJKVG1WL3VjNE1tK0R0MUNqdmxBd1NrRVQyZ2IzU0loTUptZTBjV3FvcG9UTUxPbUEzVGlkeUhPeTQ5RFQzV1lOZFVxenNXZW5QRFVsOVRQeEdkTE0xOW41MEhORzdiN05LU1VDbU5VK25UbzFGSFJ1RTUyVXVjTVA1dldnMnNMcFZMNmRicC9hOE5ML1BwUmNUU2Q5TXgzd3VUem1iMkVRcnAzWTNocVlIV1lwcGQvYWwwcXluUm51djJGUGVkUjRrcVovb0hpSWdLLy9ULzRlcEExR2RvVXdkSCtHZUJnOCtlYVZUZ1UySGMycDUzRndtbzcremNoN3RQS3RGSDVjQmJ5MCtJcUdId2xVSEtINlZVM094blVld0p2VG1OLzJ6RUMyQ0d3dDU1cVQvaFA3MC9IV3NaSXFMWlZ3OFlMMTdNbzduaVlkVUJlZEJ6SFg1c3l6RG5VMzJQdVQvM0pXRmVWbFJtcnlrbnVsM3lKbThLd0xlRW1OOEgxM3FJS0NnM3FJL3drNGkrT3JtVjdsc2hwVVdKNzg1bCtNaG9tTlBGQXBzNkdjVlhlT1czM29HOTBEbWdYck5QUkIrN3IzZy9BdVBMK0Y0djlZS0RBb3BiN0hsenlnOFIrYno1YlJleVhFTGhtZVUyMzQwRUpCN2RNaVFEL1p6Z2RHZEo4bG9CZWU3OExkSFM1OUZpc2xwaG9DSWhGOSswQXhuRHhIU3RmOGErTHYzbHBIN25acGZUNWpKYVBtVlgxWmYzUWxwY1VqZnN4bWtKamYvOE1FWVB2NjhlOEtKN2Z0dERDZld5ZURyOS9nZ1JiVWo4dVB6ZVZENWxiUlJFdkVTL0w3Vkl6aHFwaTNuUnIxTDlUMzh4N2JtWHB2cDFObzhtRitsTks2MFEwUHM5TTF3U2xQZzA3S2pEK2VncUNkV1BqTXM3WHlnazVUVUhsL1pFLzU0ZnVQUENPRE5sK3VBWS9hS2xYRTVEdng2ek90QXFwTkpWSmJuMXNHL2ZyNmdXR284V1VuR0cydm92TVdJNnRITFIvYVhMQk9UemM4eVQvQkZFNVd0di9mYS9KNklSTC9lR2JEVGkwL3BxNjhYTGk0UzA5VjMvZzZWdVJHWXBmeElVNWtqSkxlSDRDL2RvSHJtZEhIVDZ4VjRSNWF2MVBhTThWMDVCS21NMW10WklhRzdyUTMvSE9XSnEwcTR0YVlhL0dEZ3ozYjE1Z0lpYVRROVpUR25sMDR4c3hXbEJYVVUwLzhSN0wva1UrTk12L3F3UlB4VFJIR0ZDdGVFeEFiMWNhRERtc3dPZnhqMTBPNlYxUlV3THEvWUY2dnZCZnhmTTJLNnR3YU05dS9WMkd3ZklTV1dRV1dyRlp4azk3eE52M3dWNmNIdStodGRLT1B6WDlqV3ZDanhEWkJnL05lVmNJUE1IZmNZTTdvcm5yWEJvZ0FyMHp0YUpxMjQ4aDE0OHNtdjFkWXRpQVIzODRIMDg1WnlRb3MxSGFTcFZDY254NCtVTHVSMmdqN3VKNHZmZUZWREp0YUZmajhobHRPSyt5dDdQMTVUbytjdTRYdDAraW1oV3A2TlQ3RFVVS1NzblFERElpeWgxcVgvazEwVmk2blJ0YWU1YUNaOHNQSGFLRnR3UTBVVCtnUDFxYjRtVzZ2OXNOb3NTMFE5K3cySmZmeEdWN3d5OVYzMkpUN01zbDEzNGJTR2k1enM2VDVqd1IwVEwxNjFNZXRVQS9lSDJZc095NXpJYU8wRnk2TGVybUdLdkRMN2JraTJud0p1eWVIZDk5Tk9zeUhOS0UrSFhQY3Zwc2hsK1ZQR1FRWnBIcklXMGJyN0hucjJlSWhwM3J2TzVqcjNGRktNUktJNkgzUTg4dS9DVGM3MlE1dWMyTlMrTzU1Rmk0dFFIRVFVOEtuOGZON2dJOGNXUDYwTS8rMStWVXJhMXpwemQ4T3NhQzNpVkg0Wko2ZG8xd3c4YjhwUkoyMk4xcHFSRVNDODIxcXJLVHNGdVpuMitXQUo3Mi8vcXdiVm5wdkVwbGVmUk5qNVJRbjRyT2srOXNnY2I0R1dZVlZsaTNCMjRKalI2QlQrV0Z4eHJzUTMrVEdpZWtYQkRBWDd0WldXM1M4MzdCUFRKc3ZxTHdsQXhPY2Q2dnFnSzRGTk03bmF0emU2WVg1WHJ2eStBbjdMK2hQbjNuNWZsTkcyd252Mjc4MmluNmIwOWgvL0MvOGh5ZURWeGw1QW05TXpMWGIyY1Q5ZmRvOSs4N3NDakYxOEZ0d3RnSDM4czVRblZkVVNrMlgzRXd5Ym9qV3NMVmkwcjZpS2lWV3NWNW82ZlNyUmYrZXlTL1JVWXB3VUt2NTJlaUNtNllkR0hSUjJVeUhUWDVxa1ArREthcnJtZ3VYVUpuNkxuWHRBMXU4b2ozUWVIQnczaWkybmRuemNKZVlja05NenpWRWxNaVlEV3RTYWZHZGNncGxNYmJyZGErL1BvL2M4K3g0S2FoYlJxU2tSQlc2T1FqcGVOckZ5U3hhT0xhL29Hbk5vbnBtTzdPLzJNOFZTaWluNTdDL3dDSmVRZC82V1hWN0VDdVV3cDd2d2hBc0Y1K1FkSFdYOFpuYm4rZFliaVk2TERIbkYxdkxWQyt0YnNuMTUxR1A1NzVPR3ZBMmNJU2JDbVMrYklCOWlQVHF0Y3Vtb2UvRHpkR1ZON2RCWlM0bVR0TDc2NjhKZVA3WWtMUmh4dEZaU2ZzdHRlUUFVUmFuOFdJLzRMYWQ0eHlzbGZRRytYSHJrWEJyOWphS2w2cDVrM2hEUXB1NnZpRlZVNWZab3FQYUh6VlVJTlg1OEgvK3JQbzdDYnoxc1UwM2kwdTluWHoyYW9pUFNYRjN5cXNVRGNlVjV6WG9kYlFwcW12Zk9HeHdqbzZ3cFg0WlV2UXRKUkc1cDVZNmFZT212bEpDYzk0TkVSN1poSG9TNHlDanB5cU1VdUErUGsrZEtSK3NWQ2F0Mi81YVBjVjA3MUdsdDI5eStWVVBUWjhObDJYZ0k2bWRwOXl5eU01MlcrYjg5a3ZZS2YwVzJXL2NCV01mV051ajdybnJhQVpoelRrMzFBY3V6dmtiRU96eGZ4eUwvenJKVjlKb2tvZDlkVDEwOU9ZdW9lWkYrdCs0RkhSa2F5cm9WRHhEU3Z2dU5yR3kwRjBuZTY4bUhrUTBWNlBHQ1o0dVlKY3RvNmEyZkFiUUg4N0U5TFJpMXY1RkZlNngvMTBnNndRd3BYWXp0cThDbmQrdFNIbkRFaU9yM3NrM1cvQXlLeVVTdGF5Znkrb2Q0bi83ejZLU2FWdDYvZW10anpTYXpMVzVNMVUwaTZHNmFGaUVNRjFDMzVyb2ZqU1NFdFdmb25iT1lRT1NVNm5ucnhKVUpHMDh5L3IvcUt1SDVLbXJEdTRYZ0J1UmFFbHQ5VlF2dXpWN3l6SHk0aGk5TTVVWm5UWVMrZUxxZCtkVVFqWGFTOU8rSzZEeEljTDQxYUo2S2tuM1VYVzk4S0tmWGUzRW5pSUI1Tk9UYzUvMjZaaEY1TTdwNDZhWUdJcXVZV0JxbWNFWkY4eVEvejJQVWl5aXpwWkx5d1ZrNm5HdHQyRGV1TC9sczM4bmp2YVZJcW5HalM0cjlkUUxFMWN6S1RnZ1EwN0k3bm95aWVtTVlKRlhkOFNKSlF4em5sSzNLZzkwWXRuS3d6cDFCTVQ4OTNHRklOL09YSThiV0RpcmVJS01GbDhYNHIrRDg3QTBZTitmeERRdnNXdXBaSlhQbms3MUhwdS9pdUFoM3NNWDdnR2pVZURiaXVXWFFIOWxEWmJNdWw4YTlocjBhbjlMVHVJNmI3ZnZVNk9oK0lxcUxMVlQ0dkp3cFdhSnM3Zm9hQXJNenpSYnN1SW9kbXFwM29CYnpCdDlPVng5Y0IyWVhacmc4S3pJRmRFYy9xTVZPVFJ3ZGptdnBHd04rcE9uWlovL05IQmRyWThYdmZIZkNiL2o0TE1aNmNKYUpGMzB4TW0rNEp5RzNIVkJXZnJXTDZkWFNUTjM4NzRwS0h6ajlFR0VmNU40NWJpZUhmeit2elI2bk5sazh1eDUzU25sUkk2TmJ1VTdLV0JoR2Q2VmhnNjR3NHQzaFZqTDgrOUZxWEsvbDVjK0RIWExFYUhLazNWVVM5RWgrdkxQa2xJV2Uvcm5ZTDRWOE8zeXcxRHU0RDNLTDB3K1ZGcXNvVTA5VGRMdndLeHNzQTUzTHYrZkNIakRlL3Z3Y2NLYkpPM3B3S2YxWThYWDYxLzFURVVmRlhsdjFKNXRQNWR4YTNWOFBPU2g1Ly96SzhUa1J1emd2MmVWb2l2dkRRL05VSC91N2k0aHd2dnhEWXAzZnV0OGJZd3I5NUdWRnl5bHRFdXhZZjJ2ZGlpWUN5aWxaTytEVUVPSW10bGNsQUx4RmQvN2h6WEw2TVI1Wk5uejdMRVI5cmQ3NHo2Q1BpK0NYbnZSV2JHc1UwZXNuT29BZnc3eDdmdkpZYWhYallkNnpqM0VNUklscTdZTUJOVTMzb280SDFzNXd2UzJpLzkvaHZXWVlBS1JmZmErNXpSRTR0K2xjYjlzeVcwN3Z6bno2K001YlI5bk85djVzMFNxbkhNTi9hR09pcmpZWjU4dXBhRVhsOWMrbmw2U09oMGwvK08zdmVCOXpvbi9MT1dpNmdnS0x4aDNtRE1COFRiVi91UkgrNlptdjE5d091NGw2WU51ektPT2lqUTNWdUJYdUVOS05ZZlp5NmpaQVdsdng5OUJ2ajM3Nnk1ZXBhOUZlcitNamNlSUdZTG1jcFZoNStJS1daeDFveUc2T0Z0R0hrSzJ0RGJOaHAwSC8wcmx3ZHhQLzNCOS9LdVNLaDdidHl6SWZvOE9qUjJkaUh3OThLYU5lVFo0c3pBWCsyam4zMGJzc2cySVBYK1d0dXpPVFQrNUVtRWl2WUVmTXZjeTd1WDB4ME9xSzFkWnl5aEJUVHk3WjNUZUJUUXBQOTdCVzNoZlNyNHlLUHYyNks5T0dyUEdiOGVjUUplOGJOdGhpRytIakh6OGphT2duWkQzbmdGemxjU0NQZVhUdi9yWkpIRFIzOHh1Mi9KYUcxb3ZOMzF0cExxRlAwd09tKzhFOStQaStlSmxoRUZHYlpRNkZzQXVhMS9jZ0pVMHVCQjNyekJlNGxQSExhR0RNeWV3VndyWThlSzVkcXlFbndOQzV0bTVrQzVXUnJPUlh5NURRbE8yYmd3bGRFQjA2Tk85SjVQZEhSdGIyZEV1dDVwQkkvY0oya1NrQXRTK2ZyMU1HUDYrZTk5WmxETitqYmR4bWFFOTFGdENkcVgzOHpqSXVvZ2gyVmZWZUo2S211dGFJY2RuclZ0eWZTbDc2S2xGNDJzL2tNeHNHSXdicWQxanlXVVVsVC9Lb2VXM2lrdHl4R1Jlc1YvS2VQYmczNlVVS3Ewek82U3ZBWGhSa1daeTgvNDVGSHFmMzR1NnZCcDFEcXNka1VjVXRTZWZCZTgxTEVCNzJkN3E1NHk2T2xpOThjTmdBK2NEZFY5ZmorbmRDUEh0YnJIcnVMNmJWSHhKSDBZOG8wVFhyc2FaVW1ueUt1UFJ2NGZwd3luUzEyekZrcmtCSi9TT2ZMd1hreThnelFsYnk0RFh2MFl1RGJLc1FoOTU5L3VUSndKd0RwNjNOVHptb2kvanowTWszN0hKOUdWbTlhL2xSRlRFZTN5S3BheXNSVVdYR3Bvd00yU1A2d2E5TENpVjk0MUxVMktiVnlGWENTckNzaHU0TVZ5TUQ2WG9tV0MzREh6cFByUjhDUDYvRjc2cmNCSXdWMG8ycUQ5K0YzeWpUZVpkRFJZY0JWYkh6ODRpUUhlSFF6ZHM1YkpLTG8yYWFsRDM4ampoeDk4VnJGVmZqM0o3eW5tOTZ2Ump0Y1QxMyt1QmR4NTlIMUVaTngvZUFRdm9YbWNPQXdSWWtkUzY1S3FQdXJVVFZTSFFVYW90ZzNkK1krRlhxM3Q2dSs2Mm40aThwVE5rYkJMN3oyd3NOR3ZWeENHUzRUUWg2Z2Y1NEVUVXEvWWc4K3hVVjM5eFVWaUlPYkw3dzh0WnRQZHpxZnV4Tm5MS0RMZ3pvS3ozU1JrSmM4ZkxSV0M0Kyt0TVNNV1RtWFIrL3NyNjQ2ZjRDb2VlM1Y1MkZmeFZSNDZOdkNodTE4K3JqYllGK0FqaUxOV1M5cXZXOHBJL1B6SDQ1dGk1ZlNudHcvYXlzcjVSU1hxNVAxWVMzUnJ1Skw5ODhDcnlnWk5YZmpRK0NzWWZVYmE2NHNFOVBCZmExRnZkdkUxTWRmMTI4Z25zTjhvMXE3RHNEanE2K2V2ck8vbkVmWDdma3h1NE9FdE9CWjVKVEovU1JVWmJQZGNEajBRdmJyNlYrQ0krQW54SVk4ZnJsU0VYZ1Q3N29Wc25ldi94Yk9tdXlLZmFaZmgzeUlSN3huTUhmTnN6bDRYZ2J4ejVNSWNWVnAvbUhEMW9NWTMzbEs2bHUxeGJSY2RmeTgxS1ZDS254UlZyMy91SmlNVEI2WjZxY0w2RkR5dDJQZXdQR3ltd1NpcXpWSW1Xd2NudmhLUTBKOTZ2MGRoY0NiRGxwY1Urd0QvSWIzY0Z6TW9oc3lzczJ3T1h6Mmg1U1dHUHJuSDNpQy9NS1lBdGRlbVFLeW1ESXIxUFUrN042UjJLUlBOMkUvRE83VnozcU4rRy9xZzAvZFRQbjB2TnBoTzdMamxDNUlHSFFZK04zVUpGNU01Uy9nd2IzT2o5TzVMS1Q4QnZ2d3V3MEt5RUh1MGpERi9DMllwZmpDNDVxVVd1c2F1bGNoVFdPMDNhYTdCL3l0NWY1REU0Sk9DMm5lWE4wTFN4UWxOR2ZkdFkwZkN2bTBaZXlkRjdOaWVkUTU0ZXJmejhhd1p3UG5mTmRJSTdvVTZUcFFDZm9tMFNWMVZoN3lGcnU2dkw0NXpZdEhRUlBxRjJVQnQrNFRLdzI2NVNLbDRSYzAzNVZOZ045VWVDUmloeTMwa2VuTlBmMFFaMjUydTNsR3VWUklwdnB6RDA5ZUl5Uy83U2NMYXVFM3RKYWNDaXo3d3FjRmlmWjhmVTBCclJnV3IzRm9qb1IyelRtNWJlTWw1R1gySDFmSjUrRzZlN1ZVMjREalhCaDUzWGNpNG51eiszNldYZWJ4YUtGaGhHQkF1SXdzbkQ3bnozNklPTHZiTy81N2tZd3V4TzE5ZnN0QVJvN09nODZsQTVmeXVpcXczS2dscEFzSHVqNkw4QkRRZ3V5eW0vbXdDOXRPcUZlRWRCSlFVVW1uRGNkZ3I4OGxHTVNvd2w2V25HNDB6QVllOE5yNVZOc0JWUW1sbHR6STcxN0xvNHI1SjZTNWg0aWlKVXJ5MzRodjVwMiszKzJHa1RJZDZsSGNZenBma2F3dlh6Z3d2YWVjUEkzdUI4aGZLSkJUcktIUndZZDhPbXF3Ym45dXVaaDh2cnkzbTc0ZE9QbGMyZTJxbFlnL2RJMVRteWJ5YUhQTXhVM0d3QUZieS9MYVhpY0xhTWl5MWVOYXk0V1VuSHFuUkdXeWhINlBuOW94Q2ZtRkllNlpML1h2U1NuWXc3cm10NUtFM3Jma2x4OXpsWktCNGRFRExkQmoxNDJXNURSOGtkSmx5akJYdzNpWk1mN0hsLzN3RTdyOTFxOTZmb1JIZTArcTUvZUdmL1ZFbzVpL0VmYjhnN25UZTFYRXdVbmxSeWYwN0FMY3VIN1JXSjJ6SWpLNTZEYXJDdjN5cUtEU2VHaVpnQjdlUFQ4L2I0bVVudkF6elY0cnlTaTRaT1ZKVGRpL0xnZlVPdDZmTHFVc2M5Tk9mLzBVeU5zNDYraFo0TlJKUjNOTmJNVVNlaGhnODJVU1gwTGZoQnZhYWhCZlB5anJxenUxR3ZIMGVyWEErWXJ3K3phODJmckRHUGpQMUdlcUhkOWduaXNjMmp0cEtKLzZwK1pPWGdBYysvSVlyZjUzeEVya3M2MVZwSHRDa1M3di9uakhEdmhjanpHVER1K1pJS081UGM4dlhRKzdzZjlHOUpNU05RbHRlMzc3blRic1lGRXRiMllYNUpOQ2k2MktGK0U1NXR6ZjhrYmZUMEJYQnZwVUcwcHduMStDK2w0QnpxT1VPY1hCQW9uTFkyRisyOXV5ZVhRcnFEbENpcmgvOXEwVGg5S21pMm12MmZDOEdsUEUzWisrdm1vdUUxTGFodTd6dHNHUGFPbThjcXN2ODZlMVJHODF4eURPS2RjeitqR2NhTmlZOHhjZFJ3amd4NXpWU3JBWDBadWF4V01yUUVSeitCcjdPc29KNzdlcWJvbzdSdlI4a01IUXJwUDRWTnl3dW5XaUlWSGNndmt0b3hjS3FWdjVOUVg3M1NMYXFwVzVzRWVTQXBVNGFGMy9QVTVLODBkdHRva3psRkhGdHp1bGdnZzVIZHpnbjJjTy9JWC9aS2EyRWdBeEhkMTZ4K2JGSXVwMnJ0ZDA0eU1TT2o2cTZuVEpMajVkbmROMWtza3NNVldWR1ZtSk1HOTd6WHJidk5JQWVPZUFuUkd1c0x2ZEN0YUVqbGtHdlhBNWRPTGtXdUR1OHdLUE40NEFUdjlyNDRNdDBIZDlGYXBmS3QrWFVuMWxULzc3aVlxa3BPbnpaQnppZU4xdFdmYWIyb2pHYWQ2Y2M4Nk9UenUwMXhTdldpQWdIWnVWbFoxQlFGdTYwbUJGSyt6dmdPakp1OEtRWjduY05QbU5ReWY0TVJzcnF4LzFCQTd6eDdJNkZqaE4zcHI0cHpSVWdSWXVYSmVtR0t0SWVROW41eGowNE5PbDhiL2Q1TW9pMHBvWHBhQzRCSEdaMFpUdGptWElGL1cwV2Rkcm9vU3NEZCtyN3A2Q09QVGNScTMwelJKU1BySXUrd25td3ptZk8zK1BEdVpSN3R3YmZGOXNnSzk4ZWJtNjZuVStmZE9jdVZkdFBPektFcDNRMElsQ0tobGFPT1hoQURIcEIwZjJzQUcrK1R0T2YwaGlnWXo2U3UzdkRITlVwaHBSZUl6S2V6NDlNSnBpS1hvdW9QeXdPSiswRThncjd0TDVtamtSZVlydnBSMTVaOFIwaG1mU0kxNkJSM2U5VjB4ZnJjNm5SWnRYYkQzL1hVRGxOcjNPanJIbGtack5GTVBhc1FMNnNyM1hwbCszUlhTeGNIdFo2MlJGV25ENE11L2taNkpEQjljZmlRVnVwZkE3MEVDd1hJRTJ6VjdzOUNzZWNYbEUxSXRNSndrOWNMM284cUlYOE85ZFJacnJ2NGpvMSs5ZnB4eFBJQTVQK0M1OERmdjBTMmZKNC92dyszdHAvWDQ0RFBxaHJ0SFJlWnl0aURxZjJhdWRzaDQ0MjhWUkU1V2hOMlVqZTZ3ZUZDVW1pVzc2MEJERTJZcys2T2Q1ZFpTUTI5MzFPN2ZaUyttQlkvNnY2Y2ZsNURqR2Nvc3Q0cFgzSitQc243d1JVZHE2UWV0eWdWZlVwSFdkdUJyeGFaZEovZnkvQUwrN0VIQkR2NnNiOVBNaFo3Y2RpSGVhUWpSOFlrSEFmUHArOGF6aTF6enlIWGx1dmF0SWdoL1FCUWIyRHo4UnQvRi92QWRzekgyV1BMMEQ5ZjduYzZTOENYQTJBZklucHlpOXdBQnpLeXN6dTVpUS85bWNYdzgwYWoyMkVGK1BiUktobHhDamh5MzhjWlFlbHYwSGd0RUtlaXJiSUJXck9nNmgzc0dzSG13bW5oS254N1plMEpzUnFBZmVzeDViY1BnUEQ5WmVUdzhyZS85RGlnVko5UC8zWDM4OVkvcURlam0rcVY4SGptOXFpUExmNzExUjh2LzFmZ1JLUmw2WXdEanFiTU1nTU5UMTJKNSszQjhnYnV0aGR3UTBpUzE1REEwTW9BVTRudlhIZjF2TS9XQUJ4N2R0YnlXK2MxL05kdlBIK01HeDdEY0RUcUJrWE5taGJBdmtlRDBROC9YYWY0NUFEM3pwRUQyMk41UVJDTDk2b1BYVEd4ekxPS0wvSE1zMkYyMy90UVM5WVd6blJ6Qjd1VFhuMUhsR0I0NC82eG1MN2IzWllzS2g3ZjNhVGtybTZNVmMxLzdyUGR1NHd0Y1A1L1QvRnk4VlAzTkI3UTMzOVRQK3Y3alAzQW1nNVhQZnp1RGVnZS9QdmZQbitpdUZxM2NJNjRELzZ6cnRoNDNsN25JNDI0VWludnZLazdYZCtiLzNoQzdtUG03ZnRwVGJvTUd3ajE1b0hHNGIzN1BkbXdJY3VPNXlidC93a3p2NG56VVV2bXpEWHlLVGY3VVpxUWp3bE52M1VPUysvbGU5WnZpT2NiN1pjZVo0UmNmNWNsUnNpMytkYjRuWCtQYmE5YmhMZ2JtYzVkK0IrejBIajdILy9ZaDI0RFAyK3c5c0ZmZFl0cUlVVk9yMkZkMy9vV0czYi82R3BRdDYyQWdGSzNMWlBiSEgrYysyVWlCZkI4VEZCNERmYjYrSE5TVFlaNERORXl3VitxY2F4cUgvei9kUjBmLzZVSzk5d2FBZU5pekNXa3c4R2d6UVNJeWRLS3hRanJMWHc0NjZXTDVsaklxOHVGTW1ZQVV2RzV0eGVtelpDdHR6RUdQbzN5ZXdQVTZNMjgvNlA0N3ljdlp5R3Uxc2ovYXkxWExjMnRuMmVZQVZLQ0RxLzg4Qi83VCtuLzFWTUgreFlpck9YbStvNTNqVWgzVlNlbXh6b29nVXIvZ0lsOENvOWthaG1WZys4YytaNkw3MlQ0ZUMvTTROcFAvajYvODhEWFNHdlgxbzlEKzhlVHk0cUdoN3ZRQkdlMGVqMmhkNTQ2ZEcycmRWU0F6VUExVTlBY3RhMlRJbTdvSnNUUmcwRWx1YTlwOG44ZDg3YWI5N2pvUERBeGVKTjMzc09DK1BJY01Tell4TmpjMUhCV0xQdnlnOTlnWVZHY1VGeHZ6enN4NWs5YTl4WS8xL3ZiZjU1N05EZ1IzSUZpVmNIVUtZUmtpSmtTTWJOMUhCdUc4MG0vMmN5bi8xcUJIcktyMzJ2VGJScGUwcmw3bmZWSUVTK3VlSFVlTDZzemZjUWxDbWpaalc4Um8rMU5iVXdwek4zZjh0UHMrZG1ZNnIvcnhXcEtGbFIxcWQ2dmlVcUQxSDNuV1NoSnJOUjQwMVFweDFmZEV2LzlNclJiVDcxcUVoMDNmeWFHeDlnZHJsSlR3U2xqcnVlWXo4L2QzREhUMmE5L0FwTno5b3NqZndkdDlaRzNjZVJCdzdUL3JSK3lEeUwvdEVEODd0L2lvazBaQnJrdDNIUk9UNXR0T1VmZUJ2L0cveGlEYkwvaXcvQnI5U1diUnJ4NmtWWXVxU3QybU5XMThoL1MwWXJ2MFMrTUVrSGZNT2pjaW5uOUlNRWNsRktNM0g2MTRHdnRycjE0WExUdlA1bFBGcTVoZS9VWHlhN0h6K2kwVUtuMlJ0aWVjYWZ5T3VHR204TG53ZjBjdms0Mk5VUzhCL21OMzBvUlIrODFpcmI1ZXUvWlQ4ci9HWHpHYXFKYjFyd3M4WFNWclV0TUJybTVBZmNUOC9TRVlSbGcvTVQwOER6dG8vckdJaThpZzdzdWFrSGdIcDFxTFBhK2RmQytCblJ2dThIQTJjZDJXYzhRS2ZJVUxTZUtGOUxnRDV4SmtqMy9LRHpZVjAySFM2alNVTVpsclZUMVhSUjZJRnZjWjhLZ0lQNUhaelVjNXkrRzMvVzd5cDJRTWZDWU84VmNocW1VaDV6QjlsVXJ4Y2xxMFlqTHk5eGRYMWQvUGd0M2NSSjA3TGtkSTl5OXpQSDRCampuUFVMYmFHZjNYLzY2U21GZUJMMnR6ZTBtbHRBL3d0dlU0aitFVUMwczdaZHVIZVZ4NzkrUE5yZFFyOHV1cnNaeGQzMzRVL3FpZ3JPd0IvL3R6N3M5VVNFRmk3NVp2NEt6OFMwcjJkM1EzcXI4cnAzaEFYdjhac0dkMDQvQ0M2S0IvOENOcHcwK1lSZUJSajlyaU5RMzZtMk1mbFduS0RnRlR6dHFxNklGOVo4a1ZsNFZuRXMyWURtbThuS29HMzhFS3NyK0dNUExQUmgzMWo0SkpNOXZpdzhZK2xpQ3k5NnV3bTN4VlJ3QnZWbWFHS0dDZm5KMlZzd2ZoYzNlQXFkUVplMnUvcjdwbEhYUkR2M0FnMVB3NytSSnJuMStNL0hhVDAyUGZrbk43bkJKVHJmbk9mRmVMa2dRbnJCNnNqajlyalJUUXRFaUlPdUgzeW9oL3djR0hRcE11R2FOZXo4eXVNR2YreHp1L0VyZTNJRDcvNnBqUEZVeDM0NGlUTGhYZUNNTzlNSnRka0RsRWkzZmdmbDJkTUU1SHp5Z04reDhJVnlWWnZwc2hTVFViMktaYSt4ejFrWkNrOWs3OTVoNFJxdWk5TjdnU2UxaFM3VDFFajIwUjBTdkp0OG5MRUFWWHZkMVltSU85eTgzdG1xRHJ5SkJ0ZXk4a091T2VzbndFcDdzaDdESmp5czBIRG1rZlZnM1pmN2VQS281M3ZaNDQyVVpDUVk4Q2Y1WjBOd1l1WnNsNHdNRUZLUWNIRlpiNm5sT2kyMWJES0tsOHBuVjN6S0c5QnFvRGV0QjI2N2FZbUp0djZBMGJia1BjcDJHOHNya09jT09uN3k1bjVmL24wNlBFK3IxTGdVSGt2dElKMmJRSi9hdnoxY1dMZ1BqZWRwbDNYU2dlUHFpWWhQakVPL0pQQW5wMHZyUUUrc0xldzcxMitsRHhkS3pOYWhrQnZpdVZkUFlBRFNtUnhJdTlUNEgyVTFBLyt1NTVQMzE4S056d0diOEc3NitYalRjQVI1WDErSE5nS0hHbkZnYW9KYjM4RE41M2kxTkNTTEtFdlp6N0dUL29PM0p5dk5UaDBLWjlHUFF3dnN1a0hYbXBoY0owK25QajZhU1pKZXNGQzZuN2IrL05wY3pGNVBkdmVUMWJHcHpTRGpyTjd6VkNtVzdNM0QwamdTV20xMXlhNVFwT0VlbDkwZi9jYk9Nc20vNEgydWdzazVPdGNaZm9XZWRuMFRxOTMwUzhCV1Q0WXNOYW9CNCt5SlFxdmN5Y0lTSGRXVXVlTExueTY5dWROK1BnSHdPR0V2NTc1OWtPY3B4TmRZakJiZ1Y2a2RwOHBBMS9QZmFPUmtrbXNrT3lmanRZYkRyNGV3Z1RIUnJSNzFQTS9hOC85QnErMmRFNzR5UVRrRTE1ZHpWVGJMcVEyVXp0K0k0eXA2dSsxMFVmZHdJOHJMU3dWZnVQVHV4NnJWajIwRVpOTHRuQmp5VjhCZlo4c3ZMa2Z2QnUrVG5PSDkzOFE1NC91ZVc0VDRzcVRMbWU2cE9hS3lVNjYxekxUVkVxREJ3a0NyTUc3SzI0TnlrbnFKQ1JublZhM1F1UUZsMXorV0dvRlhQNzRwMFd1UTl0NDVHeWszSDMrVDZJeGpwcTd0RmNLcWZtSGR0YTRvenhTbjI4OU5ndjkwVGpBOW5VQUZnYXVtRDFwLzIvZzVmVUdSeGVWZHhIU3hweWcyZDd1Q2xTbHN2NklKK3hPZlBmY1RlL3dITFFYQnN6OGdIeEJVVTNNMDVtN3BYUnkrTkI0NXpuQWJYY0g3RHlTenFmd0hnay8wc0NqODFRYzF1M2tiekU5K0tPYUZmc08rY0VsbFNQWEgrYlJkTEg3N3RTUkVpb3Z2ZEtTREQybzJISjd2eGk4RjUrUVR4VFhKQ0ROQkowRkxpbHltdnZtL3VLNC9ncjBwa3ZlalJMa2VWdVVUVEk4TmFXMCtIZi9zTmszSlhUMDlweUNGK1A1ZEx6Z2xyOStGdkNkU2RSWEYvajFoZEpMN2pxTVQ1RFNKMUVOY2ZIVDI4M0xPMS9qMCs5RnI3UDdJdDk2L1dmOE5GRVRuenBKemI3WkRoYURWMzFqVWgzbTBlU0VGeHZtbUVob3hCK1ZVSjJaS3FTbU5NVnFXN29TSFR5UythYnVvWlFhMzk0ODNwb3NwOTdObGluZmNvVjAwM0Q4L0d1UEphUWFwRDNHRC9QU1dlMnhwekY0cVE5dXZkdHEwaWFnSUx0Vldib2hmTEpTWDZVdkFsN2h0ZEIwUkV1OG1GYTZGaTNPUHdFNzNHaHliVlFISWUwTWt6MFFqNVpSai8ydmx1VHJ5K2ordG9VM2kzRWQzVFhUYzhzR3krbkNSOWZKVTlTbDFIZEl6NDdUVHZGcFF1bUU0TTdJYzV1K1diVGgzZ2dlL1UzYkgzZ1JlWWV2ditUNy9XdmhyNFF0MkJLL0EzR0J6cnFQTzZFM1hwMGE2VmdLLzZOL1J1ZDlsbE9GNEc5dm5ITWtCL3lmdzVxYlp4NlVrZldOakN5emNjQkg4bktPYWlEZk5YMmpkTUgrWVlqMEJNRS9EaTFCSG1qam9iU3V3RHQ2RGMrWk0vY1crdmxsb0g3c2FRRjVQTld5UGZaU1JOOTN6MzdQZnl5Z2o3bnY3STA2OEdtNHZlS3Q3c2hQamw2U3VXcTNNZnlPeitOUEZZQVBlbW50amdyZnplRGRUc3pYeVpvaG91THViNlFIa09mVnR1NVR1c0lIZlBQVW92cmFFaW5GQTJqVkRwUFN6Ym9wU3p0c0VLSi81eXpQMGhCVGdtQm1uR1V6ajlaTkgrSG5odnhTNGFtSEMwZE1CNjhsUUdQMnpYcU1iK013TXluczFqRFBDOE1lSE9TVG9tbjJmQS93RStLZmJYNnpSSWE4NXZ1M21jdDZLOUtWWjZtQjN1QVBSUythRkZwdm9rSW1DZ2Fpc2tZNVRZcFJXWFBNVklYbVhUYXkvd3ZjMHR4TjlYZlJhdUJIYWhmVGxpTTREVFYvNzFqZldVTEJGNi9WRDBTdzcxVTllcEVWZUZOOWpyVmtDei96cU1kR0RZYzdXQ2lpTUdmN3k5Ulg0TUZtbUk2TFI5NnZiOHByTlgzNHNVZE5qMVVjQXg1a1lLNjF6QWQrMW9TYk9pdEdxd01YRi9jNE1LZENSR2ZkeXd6WDFQUHBzNGxwZVJEeUttTksvdDZyaFYvWTIyYksxSVBBZitTMmtyUmQ4R2RQenJoWUU0ejhUdjh6UG4xN0lBKzBhSCtuMDkzR1MraUt3LzZPaXFINHpiNFZ0d29mRG9ZOUdKb3NuSmlGUFBXT09FUFB1enpLdi9sNHJrNkFoR1orZGIvMTRUMlA5cCtkNERYb05KOUdYNjN6a2pRUk5mNVduLzhJT09TN05wVk93ZUFCVEYyVFdaNE92dTViL3lMZjYzNDhtck5qYkdxQ3BvVDBUVlNXTldpSlNmait6SXNudjhGRHFOQ3BYWGRIUk9IM0hpd2J2aDc4QzYyaXNGY0RsRWg3bzdmMkQvQnBjcDMwVCt6K3JrQmFGcW83Um5VRGJucnUxYm1HVlhLcWE3My9aVGptMi9idmozK3RXQTA3Vy9uNTd4WGtMM3Q5YUYzUmlEeXp5TTVsZzM0djhPbFV4K1NPN0NTbUQrSkQvVmJEbjM3MjZQU3djNGhjdHQ4NTEvMHVlR2JtelM3blJFZEVaTmY4dXJtbVZVYXpYZnFIVmw0Rkg3ZElLMnhka3BTVWx5VnQzZk5XVE1YVjdoOU53Q05lTXZ1Y25uZWFpUHJuL1p6cEFqOXk4T25OVDA3QWo1dGZsa3VFUE0rN3BXOGZKbzdnMCtEenA1K1VkVWZldGlITlV1dU5oSTQ1RGQxeWI1Q0FLdldXQnZ2WGdoZXhkRXlaQkh3Tlh0M2FuVjJIS3BLd2M5cnMrMnBTT3RSaFJmUkdSeW1wRDE3VlBkUlNTaE5lMkpsOVJoNVRVL05KeElwdUFsSWYyWGxreEE4ZWJScDRwenhoSGZoWXU5cnVOZitHM2IxODVPSXNNZmlPbXdUUzhIbDgydk9FMGt6QUUrNVZQV05MTHZKVUdwTWtPVytQUTMvMlhMajdVcDZBWHFkMHF2MWRKU0sreWJSZWxkRFhuZ3ZYVC9pK1habWNaais5T2ErUGpMcm85T2NmQWkrNHpOdTdlWlVwanpScmpFMnNUaUNQOFhieHh1UUVvbU91YnpVNklzNTRGU1F4M3dSK3l5NFQrekVMa1VkVjZkS3czaDU1NjhpeTIzWEtzTDhyc2h1c1FoeEVOSE85L3BLdFpzQW5ZeE0yMlpzZzczRnViQ01CbjE5aUV0M3hDZkxVaTU4K1RUd0xmSE5EUUp2VzJyMHk0SGdldjRkRmkybGI2N0VtMjh1d3F3OWlZZ01rUEtwVmluL2JBcjdaRTRmeW11Q09BZ3JwTU5KcmlDMzBTcXZwcGh2SXgxemI0cVEvRlBGVXI3UGxvMXVSbjE3VzdPUS9WQlh4aG9HUjluTTMyTmtEaGZObWRRS09PRGNwdDNTK01uaysvRkY5cWp1ZlZtWnJiTy9yaGZ6Ymt0R0xIZ0QvdHVpeTRIZWFrWmp5ZnZWdWpob0lIcXZGMmdMSExlRER2cFQxT0ltOHJxMmJYK2hZQUM2TFJOdEtYc0x1ODMrR2I2N3R3cU1IdFZvQjhRaDRoM3A1cXJ6MkZkTGN6bXRxOWR6azVPTysydSs5Qkh6aDB4cFB2WHBMYUZianRrZEh1OHZBcjN2d1RRdnhRNWFDNHRwQzlLdGJseGZWRGZCcm5iWkhqaGtFL1Zmd2V2ZGZRUmlQN0pUdFo5UWJJcTZTYnVjNXcwK1d6UjkvN0dZVStDQ0x0M3hyZ1orbjN5TjZhclMva0c0bzNNNVZ3M3k5VloyWnV2bUlFcjN6bktCaE5FdEdtODZjaWh3SWYwbjVaSnh0dDRFUytpSHZjdXZiVHZCczl5b1ZUZ0FQeitEOTB0UUU2TkVUYWI1ZkJxQS9DOWR1emhxVUxLWXJCY203TFBsODhpcExubmtFZk1yN3l2M3ZiNGYrdkJIVDlmU3dsZUEvZE9pbGxucVFoN3pkMkI0aDRCRTgvYkkzWkRyNEhKZmpaLzNaSUFHL0pVQWhNQS96WmYzby9MM0Y0RjFkS1NzYnl3Y1A1Y2l2UlhlbjdPRFI3RE9SRWxmdzhuWjMzRU5waUdmalpkSUw3N2NLNmZRSi84Vlo0RCtaZWc0ZlViZGZRRWF6dnBhV1k5RjRTYS9HSkhFSmVJREQ3Z1E3SVUrUUhqWjk2U1hrN1krYkpaMzhoVjhmOWJUb1dEVVdmSXo1U3RMV1FPUlh0bmJoQmQyckZ0QzNtbThQQnNQUHI5MjhLUXZ1RFdXRnA0ekxSRjZ0RjYySk9Wa3VJRmxob2RHU1cySXlHNkVsSFZDSmNkT3cyVlRKVmt4S1RlWDlIZThJNmNqcDR5WHB5SXVkZEgvMHFEaEtRRnA3eldmMDNnSDhmSzd6ZzlnelVwcTc2NmlvK29lQU9neWE5M1BpYmpIOHVua1RUdjlSSkszUjZRV0swQ08vRnNRczdZOThVVWpSYnNmdnFVSUtOalJJeklGOXVkb2h6WVBoMTQvVjM4N1dnTC8xOS9EaFlSdnVnUmUzdnFkSGNBOFJkVExRTlBqMWcyaGRsbkJkM0FvUWl0VnVlaGlBajNzMVZkWmFQRUtCek8xN0NmNDRLTktub3ptdDV6ZnlTWDNFZ2hkK3U2UTByU3BXZGNaVVpjcC85dnFCQnVLY3I2dmowdU9HaWVpUjU3ZkNwa0R3WnM1bngzdnF3YTlhUER6T2FDWjRINnZNcnY0QVArYmxiSTN5bnNBenJneTJWUG9WQnorKzRLWWlGbFhTVmExaVdtY0NudXZmcUEyUE5zdHBrS0ZoMGVvYTVFMUh2bWk2QXIrMWFtcVp4Qnk4blN4djIxSGE0QWRjK2xFd2NDbjdiZUM5ejZSN3hxSERkNjBZbEF2LzBXVFNqb0k5c2VDbHVkeU9jQnJFb3l6M0MrdjNBQjl4YnNNV0R0OHcvbmhacnFOREpYUzd5Ylh4TC9MbEorSjNldWhMd2RjU1hCdGJvU2Fuczd2N3B4Um9ZTjRNcmcxckJOL2lpSDNGczFVOTVIUnhvZnZTaEYwS05MTDE5a0ExeEkrRDEvMG83ZEZYUXZtaDY3MU9nbStxM3FQVHg1ZmdVeHovVmFPOEZ2ZVI2Rm02Nmx0SHhPTVhWKzg1aGJ6Sm92TEUxU25ncDZTNERsZVZRWC9QZS94RDdTLzBtWUxYbmFhK284RGozSFgyZWlEYU1maXRyZGVVR0RtdGRmQXBpNGxReFBQZk1VK3pVb0hteGZwSDNzRDZrUm5UQzcvOStBVjc5bmkzMFpJS1ByMTZkcjc1SnU3bjk0L08zcC9OQmFSNGR1RmJOZGpsM1NVOTd5K094RHE2dmtIZHhldWd6eWRyVmI0RDMrYTN1TEhyWFU4aERZb3Y3YnIyTHVicjhUbFpWY2puK0I5cTJIWG9ob1ErbHp4N1BISUJlQWorYTN1WFhCSlNncGRlNGRZaldCY1JlUzJuOXh2WWM4ZWlpN0VEK1BSbFQwangwV1lSRGZNL2ZyUFhZenhQM1R0YmVxN2trWFlIMzQ2QnZqeVM1blVPWGdtKzViNmRsK3J2YXZGSW90ZDY5VGZXSTYxZWVmWnp0WThpbGFZYzF2TWFwa0JMeERyK1oyTHdXOVFibGYxUGg4c3A2MHFrMXBXZjRBY1loaHVFZ1ovdjgrUlpYT2tHMk5NRFdtVjNsWVNrOUZoajJHK3NjMGxJZldNMUxrOUVJVGFwWVF3bk1QZDNONW1jSWFUcFRrTjlUV0YvU3llTTVqM0N1cjR0aTRaS0gyRytwbDJlSHF5NUFQbDJpN0dCRTRZeVhxZTFmNGlKbEV5SGZocytycnNTS1dpNTduYjBWaUFOb1VGa2YvQVVWMWRvdUs1VTVkUFhjZVdQdFJCL3o3ay8vZWxONEJXSzNXNHJuNENlM0xWaHdiUU55Tk1QS2ZQV3JkZ3JKa1gvc1M0ZnNaNnd5S2h2bitId3QyNXZ5elpkRndjOHFHZU0zRjBaZWZrN3FkdjMzY2YxbHd4OEdMNVprVjdlZi8rd3JaVkhWYm5qVnArTnhUeThPVzJvWVRid0xNUDFXaDVpNkxHaFgwK3FZSjJCWS9hdGpFZDdjTnliZDdPOE1lNU9tbDY1UGV3ODdFVHlrL0ZKcy9tMGZkNHFpNUFrSG8zWGRGWWZNMWhFbGFJc3QwemdWNTcrcDFTODFKUXA5SDc4cWNaajRKbDIxSk5tdE9LWHNoLzM5dnNlSjZQOW9WZkdHcWpnZmhzVU5pOEduMVltR2JNNkxCcjhEWFdLZGYwa29aeTZobm9kbHQvY0huUE9HRHpZVE1VemUyd3ZJSWMwTStWREFPeDU1RFROTXdkTzRybXFURjg1RHZ4T2w3VnFnM3EzWUwyVHdxN3hkNVpKU2ZwcTZtTDdBcXhmbTl4bGNTWit6ZG5INDBaSUF2d20zNGR6MTU5WktxQ09PaytYenY3RG85ZHY0c2FQZ3Y5NzNlMXJoZU5GRVExMXFuNnZoK2QvSkxNazlpWG1oOE9CTWJzMHdMTzluSFlnNWdaNG1OcGY2bnVsMklDdklKMCtZY0pvOEdoYkw5MzdBMzc4OHFjT0hRNTVDK2xSWDZOQkl6ZUk2TjN5aWxwTGpEZlpDTytUanNqTFBuWlBUMXJYQ2h4SlVhbnE2WFhnYlRPRFF2SytDbWk5M1pHNWsvWVFhZFhrSGo3L0hIcmJXUlNSQTc2UVE4NXhlVDE0ZncvcTVoKytNZ3dZOHdyNzhVK2ZpNmlzVFVkNEVQZ1B0VWsrQzhCUC8rQjhUMm1TQVBNcE1IZk85MnhGYW5RNytId3o3cTlobnp4enlWc3BoY1lVanptZ3JraVpXV1VhdDVGUDk1czg1N1h4YS9EOVJtbTB4UmFCSjFZVDUrLy9EUGhTV2ZLS0xyZkJnN1krMC9qeER0RXRlY0NTcnNYZ3dlcCtLVTMzRlpIU0I0M1BFME5oNzN2SDc5dVd3Nk0zeXNNOWh2WlRwdDgzZnAydWdYK3E0cDY2S2lSRFRGTVdkZWp6QSt2QmhvbWVQbmh0SXllenpvN1ZJNkUvejk2cjhGRUd6ekp2YW1uKzcxcndQbzgyVEoySytYRDVzT2VMcDgrQTd4N2lCWDhBSG1CQTIrWTFJQzg2ZGtqVzRqL2dlWjVaS2xsL0hNOVZyZVBHMEY5WXQxYmw2ZURTMVpGUHJ0MmVkUXQrRGJ4bXE4djRYd1lDdXJmUDkrd29aU1Zhdk9JODZGaFM2blprck4xRytGZkhManNhZmhrUC9zaDByZC9CajRBcnR1N2JLbkVCLzZ0ZnZuRm5yQnRMMC96aHFubWVhS0Zqajd2M1JvSVhNNmwxK2NRM1lqcnNGQk01QmVzdzFPWmFmcjZOOVFBK1dpdlcvUUZlMXhDNGZhREdOK0JzdzBwLzNoK21UUFl6SHZqYklONyt1Vmp1K1hPWkFsM1FuWE9tN3IyRWRETFNKWVlYTWY3dUhKaGpBUjdYN3pXMkh5T3hqczlsN3A3N2YxZnhFRis5c1hHOHdLZGZHZFdHMmtNRmxISjMyWDAzMkkrdVoyWU4zbjBJOFhQenUvVy93YmV0NmZIaXlHSDRVYmNldFR6eDFBRi9OMkcwZWVJQThJYWMxb3h6QmM5Z1d2OHZSWCtCZDcwYkw1MVFnVGpJdGFUVFhGV3NHM2svZWFYd1lJMkl6bTljdkR3OFFVQkx6RWJrSkNMT3JEOGgybjdnaVpENjZNNFh0V0c5aS9FOVI4TVpIOFRVNFBWK3FKb1A4T0NUSGF3MDRZZEV6RElkeWdNZnN2anpza01yd1ArZHRlTE02SGZ3ODZiMWFmUHBhQzBqd1UxZDU5bTJNdXBzVkRMTk5raUM5VjdpWlI1WTd6YkRJZjFiTXZCZ2FkeU5KUXZCSXhhWGExeWR1VVVNL24zZW9ucndFWThucHRjMjdKTlFTRW50L0UvZEVHZjMzSEZDalB6MWg1WTlCbDAwQkZUdnNyVHM3bEVsT20xWjBMbnBMUFRYbncwenZtSWRRWkhiSDgrM2lPdDZPbHNVZGdadlpiZjdoTHlWNE4zMXN1cFJPWG9CK0pWTmY0Y09nNTkwdlV2Ym50N2dUVXJyNGx6LzZ2UEp5Vi9OM2tPUFR3RTdBZ2M3WWQ1bTFIMXdVQVFQVEs4d0ttWXV4a1hQWTlIZWU3TEJKOGx6ci9XQnYxOXdkckRwbXpsQ2VpMEpMSHU4UkViclhSNytlblVUK3ZiTmxua1pXVXAwUG4vbjFDQ3NMN2ludEZydGZDQ1AxblRkYXUrYmpQaDN3Zk03NjFKRnRLRGtjdlFqdGs1ejVaKzFtU0hnRS9rSmJvWmhISDZNVGRydERUOXJ4MG5zcTR0MTZoUEQrZy82anZtd3dITDJueWlzdjRtMGZtK1h2QTUrNnJ5Nk5icndTeXBmVkM1UEtGV2dyL2VQbG5nRGI2M1k0bXQ2d29OUGRWc1RMcS9EdWp1TEJIbjNoaXpnRW1jYU9zekNldDZBVS9WcGU4SGpPTmp2VUk0YmVQYXhROWRQbVk3NU9tbkQxSm5QemNTMElyYnVZMTBqL09pcnJvYnFyZkNYRHN6Mk1jckUvSDg1OWFTS0V2Q0QxT2ZEbjIzRitzMWJiYUltYlNXNmwyUXRkRDhrSisyMXF4czhzTTdwVW1PUlhTbHc3dTgvRFE3WGd2ZmZyVEU0elExMlZlTkN0UE9tWkNFdFB6cGFVcnhJU0VPZlowMXp1TUdqNFYzZWJYWWF5S01kcjN3bTZNYnlhVVBGcHlZdlJURjFqQ3lkZmJaYWdZUlJhM0pXaHluUXptNmRMaHp2S2FPcC9mUWVmOGU2dU1DTjJUMlRnS2UwTFB2clVMa0Vmb2JUOXJDQjROZTdscDY1dlIwOHViQkpDZ2FMOE56K1hGYXR1b0M4d1pRdFp3ZU9oRjh3UnMyeGVSdlcwYVVXK2czWEFBL2Y5dE9TYlpYUTY5RjU5aWZHQXo4OHVyY2xUeE54VmJrazlXaC84TksvaENZTmtJSjNLTGxxNUdMWVQ0bkd6STRiWXdNZTMxaHBmZCtCaUlPS3JVdHFIb0luYy92RXJjSFBDdUhIdFA3NDQzRldRdXFWcmwwdll6MUprZGFocUJ0OElYbHQ2WnoxRFh4T3UvcXpVM29obnhHbWFYYnpOZkJmOVpKZGQ0M0E1Nk81SDhybllMMkd2WmZKdGFiSjRBMnR2cGF6cGpQbVJjd1o0YWRZTVkwTm05OXBZVDhGVW40ZnZkbHpOWGhoZTgwdTNnWFArdGV4OHJoSTRNa0hmejVkZnduK21xdWRkYzJ2cHhqSFYxeGZuUHdPdTZ4eXY0TktnNUFhOVlxUFJTQVBkUzNpcmNjZnRIdUgxWG0xWEEwaDZWOEpOenhtb1V5cjh4OGNQM2hSbVg2ZWVETFhkclNFN3Frc3JlNDBGUEZ2enhrVGR1c3FVTjhQRCsrOEJsOTNlY2ZsY2IrUW4rblg1Q3RuOXZXbVZ2T21HT0FKNjYrWWpyREVlczB2M2EyTmgwVHdxZm13S0V3TXZreGhtbkNGOHpNaHJXbCs4UFNLTStLbjlYM055a1ppbjRXcFA3NzJWVVRlY2ZFbjk4M2dvNmxlM0hvNEN2cTAvdkxIYmM3THdNOXIzYnp2ZXIyVXFvSWZtMnVBOTIrbDNpZTBDdXR2UGE5L2N2MDhFSFp4NjlacFNFZlE0b2FaYjU2M0V0YnR6akRmaWpqYndXcWZlODkrV0JmMzlLeTdPRnhNTjA1Z3p4QzB6eXh6WnNvVnhJOGxSeFlsVjllQU4rUjlSL2RUc1JLbExCeXJlaE4yY294Wjc1a0thUW8wZmY0Qnl3OEJXSWZRYmFQUnZsZ0pUUm05ekhuaFRlZ1J6ZXhIazY3eWFabWpaL0JtNkJIK3F2Q1BUNEYzYjNobG91VitEK3M2UXJkMTkzSVIwY0h5aFp1U2tTOThHUHI3UkJYeU80TWtmbisyWkNNT3MxY01hVWxEM3U3bUgwZWY3WEw2L3VqOGxaY2k4T0wySnFjdEJ2L1pOdHhzNUI3d3hzSnErcjAwOU1GNnhrdGpCRHJLNE9uckhvZzNBWDlOOFBpT291b21BUjJZVU5ia0F4eTdmTGFCVmpiNGF6OS9IeTU2Q056MjJkYitVL2RYOE1oaXpmSUVOY1NKOTQrR3lmMHN3V2Y2V3AvME9sQk9PK3gwM0wrMlNHbVlnZGVhTHMxWUQvdDQwNE83V0FkOU9lOTQxcUp4WXF5citaWjlmcm1BdW9kdFAxbnFpUFVUdnFOZjFyekRlalBsQVN1eDJRa3BZUlczQ1hESnJhK21pa1F2MEsvbU82MUc4RVcwNmRQOWNTdS9JYzVlTmt1cEc5cDlxYURNSnhaNXlzeG8wVVpGNUZYdnR2MDYxUXErb3R2WFVZMFZJeFJKeit6NW5Rcll2ZlU5VEw4bXdENU83RGs2NHdCYlYxeVJYS1ZWaW5YTXQrNU5TeDBHT3lnYWtLeUU2d3EwajdiOUFROVZSME5OYUcwdG9zQmtpY3pDakUrVit5eUhPby9CT3RzSk5wbFYrL20wc0cvZm81Y1FyNjVWYmZWMG42WkVpbFVmT3oxQ3Z1YkR5N1NxbXRNeTJqWGo5L051eUQ5OWx1YmNYb0g5RDJxTERydzF3YnBXaGUzSFZteURYN3h1YzVlTFJ5TVJGMnJHdUUxQ1hCbSs2YkRjQS9QMnJIK0l2eG55TnZ1SHpDMThLZWVCeDZyYlhERUwxL2Q0ZFd4WEd2SkxiNlg2eG9nVDB4TEdxaWlseXNob3dZWFQvak93enNGdTJOeDByRmV5dnpQMGdSTDBTbzlES2ZhbjlCUnA0L1VucTlVNmdUZnFsZDNZdTFCQWZoTXluUVlqSDdvZ1kvTzFCUGhMUnRuTHBwZkJMcmowbTlJMUVIbjQzaDFpL0hzc0JCNWVvM1gyTnRaSFA1NjBzRzBBOG9sMXA0dmFycU9mSm82K29UOFI2OURFaXJNU1RUN0RYa1dkZjF0OEMrc2JHNFFOalYwVjZjR1pjU2ZWd0w4OFVYdWhuODVrckQrMjJmKzVGdXRqMWtVVVJVOUVYang2MGZQRllkQ0xkZE9QWGUyQjlRUWoxcHRyTGZMaFU1VENCSWZieDdCKzhHWnRaMFB3blQvc2tEODdpWHpNKzJUVmhSK3lSYlRtd3RranU2Y0k2RlNtMmJLZDRQMmZxT2h4WlR6OGtSOFpycWUxM21QZHRObmh0WVh3cjZkV0IzMWFaUVBlbzhPRm9zWElqejNvMVdPNzhrYWlhYlBQekN5ZERUL2JOZk94WFJ0d2pPcVBWVTBEUmZUWG1OKzQrUmZXY2M3djFQODhjTkFmdWlkMEVoQy8xcm00T2ZnanoveGRSZFhOQmZuNWlkZE9mNytDZGJrZnNwTzd2RWE4czFqUllVVU0xbGV1T3VoNDBnTDg5Q0hrbDVPOFRraXhQSjk1bXpZaG4xcmd3RnNGdi83aVJUdmY4ck5FM3FNMkZwbjZnT2VYMXpqMXRET1BQczZ6WEtvQS9mczkzcWVsNDMzb2lkYlRXbnV4VGpoeTMrc1BjY2pMUnYzMEdkM0FsOVBJd3dNcitXK2hYNjBXbHlVc0J0KzIwWDVNRm5EQ05yVXRtdGFZdnpKTG02RUJHSi83dWp0NHJzRStDVStldmUyaWgvdVlGZGZtTmdsNTlWOFNsOEM0MTN3NjA4TTk3OHNKUG5oZzEydVBIUlNTWVdWUjJac3cyS2VwNmgzU3hmRHpyczJ3Y0Q0Z3BQSjhyNjZOd0EzcVlrL1ZySE9YMC9xN1Zhc0R3UjkyK0hWbmV5ZXNmd3ZhdDl6Sk5rWkdzM1NqanB3L2luV2M5ejVtYnNVNnNoL2pPOHlzL0FWOHJ0VTZlVFB5Z29WR0NjTy9wSU1YNFc2dWR5T1ZSelhya2pzdXdYNGRDazViY2tmQi85aFZuYXh5RC9QYThIN2x1YTNvSC9QUUU2R3U4M0Y5bngwNVZVZXh6djJJMVY1MXJOOFBrelYyZTQ3MWNxUE01QWVMQ3BYSVJhZ2JmUTNySzkzc0ZYN0VZSitINUEyMUEwZUFCejdIYm43SkcreGJFUkRkOWNTa2Fna05HTDcyUms4MTVJKzFDNXpESnlGUCtXSEV5cm53MTVjN2RsdDR2UUg4MTMxYnBvNUFQdUJrdEZQZkx0alBZVUtFbVVKWVZ5VjYwT1ZPd2M0RUplcjJYbGViai9XZHkrZEZqZW05Um9GdUQ5MGxsd0NmeitqNDZGSkFPSStHdmpOUEhUa0krMk5ZcGU4czFvS2ZYL0x3MUJyZ2dQa2JmTFNOMEM2VElaa0tlaHRnbHgvTjNITUs2K2oySlB1K0JWMlhqTklMdHFWZ1BlVVR5ME5lblE0RGp6TG9laTBWNjgrMjFFNTN1R09KL04vUTFidnZQMVdneEcxbEk4ZjBsNUpHMzlOdWM1ZGpYZHViYU1zMXlFTU10MW9SWWJxRTZOdGlrL0ROZHhIWFBMMHd5aGI4aUdGSFdwYmRSNTVIRmhsV2RCdjVyVkVtVFI1dVZjai9oaS9MWHdleW5hdmFXajFzNmdqZTcwWnI5UW5nNFVmdlhWajhYcEVPMEoxTXFsR2d4ajlLRFFQMXBSU3A0M2JINXB1Yzl0VGQ3eE9xanJ6a043UHdkT0FYYzBhRUJvOEgvNlg3eXdQZnY0QzN1VzVDWmE4RzhFOU9wbjdUSHI1UlNHdnQrODlVdy80Z1NvcVRQZ1p2RU5PZnVwaVB0cU5FOUd4MjFMWDBGZ21wSk9ndmp4MkpmQkd2Uzk1S2ZML2R2K2pUWVBoekp3dFY5ellxeU9pY2s3bndNdlQxK3hCZWNjQnk4R2VpZDVlZjJNYW5QcUZHNFE2V3lEYzBadTBSQWw5dEhGcFZPd0xydHBNbXp2S29DQmZSaWg2elo1am1Jazk0cDcrcWRnbjRCTTg5bzNaaVBlcWR2bWExOVZpM3BQeW15NEVKMk05aHdQN1V1WjFuS05LVFV3UGp0V0NmRHZVTjhmNERQK1o4YmRiejRqd3BwZHRsS3o3SDgvMmJQbnplSWZoVFhSK2VMODhCbnByeDh1ZktYZlBBVTcxYlgxTUR2SGVIMGM2NWl5N3dhSW5mN294VTVLdDJLcG01N2JPQS9SQjJWWjhQM3NHYms1WWpHcEt3cnVuT3FCTW5yNHBwcy9tUUYyY0dLOURBb3ZvMmx4NENlbHJSdjljUzVQOWsrMWVNTkVVL3loMTIrZTFGdnJIcnlaT1duOFE0LzkybFhZSkR5SnM3Ylc2ZWp2eHQ4dCsxVGJ1d1hxZ21xczhvSzhRbDU5VWRDcjlpWDVmT2luVUhGYkJ2eU9TYWk1a0hnWmRZcVY5OHVnNStZZFA0bzRkKzdwSFNKK2ZTd3puaGZLbzlNQ3M3RGZ2cDdEY2RIeHk2Qyt2cjE0MDIvRjBobzg4Vy9XeVhpc0NmeUZIWExFcEEzTHcwL05nVjJNZnI4KzlmY0lsRFhtenl2WHNEOTRqSUwvRGUrVWJrMWZaZUZqZFBRbnpodHJkL1JRVncrdmZ1NjlQTnNkNXF6WnVYbmVkdVFkNTVSOUs1SzVNVUtPMEZ2M1h4WlFVS2UvN2w2QjZzMHh1N2Z2aUZyTUZTK2puaWJ1bDNPZkRvbjByckxxa0s2V0dmcHJ2WjJHL0xaMkxXdHlmQVFkMCtmcnZ1ZzYzRU90M0lxVG9PdnN6TEtkL1VlQmpIRjBaWjYvZnZDVDB6dlRCZ3lsRXhaWjdtOHh5eG45NkowbkF6YmVTQmxwMzVmRzlEaVp6ZWJyQ3dWWWNkY05qdEhlZ1FJeUxWMjZKUm0zOHBVRC94eGNkdSt5WDBKNmI4eVZ6Z2o0WUhrbTQzaFlxQXYrMS9hQ1BEL21CdmsvTUZ3RUh0ZSt0OHlRWmZPc1BaMldvV2NNbjFxZGVQL3NWNi9oZjZ0N3NsSXY1YjRzYzNkVFFIZnRTbjh2SUFtWmhHQ2haTVB3ay9LalZiL3AxWGh6eGZjTTA0N1VOU3VqKytZdjFJNEFndVI5WXBhajVIL0JUek5ETnpnNEJhL1ExZXoxWUh6Mm5JZy9lZHdTc3ZqL241VUI5NmMxYjZnaTA2YzVDbjJXKzQ5ZlVSMkVXZmhJNEo0TEVIaWxhZFhaQUp1K0VVZlQ4VmVkblVlNC9XTjRKdmM3QjA1TE9IcmxnZklIcS9adUpSUGwySXZGKzk0NVFDZGJNcENLemRJNk1OMFpVcFA4M2tkRTYzeWVyTVVPQWxuN1RXZDkwS0hQSzR6MWwzQytBYmRFamovaHFzNDFtMThHZ2o1bG5ONTc2WFI0Si90UERkOW83bmRNVjAydmpNaG5yWXhhZkM4cG9IaUZOeUYrMHZPcFVDL1R6azFyYTBEekpLbnRiM2ZDdDRCRWJwZlcrT3dUNUFiOHh1SDNsM1dFWWlGKzhESGg5bDlFWEo5UDRZRUExanUwN29keGg4ajVVdk8vQnpzZjQ2YzIxeVFTTFd6V3E0aHN3N0QwTGkrMVQxS2ErbWlhbklzMXpyUG5EaVBnR0JnUXVoajkwM1JIdmJGVXZvMUpZZHVVM0FYWnJ1N0pBUHE0US9yT0NRVlBoRkVldnRsUlc2OUJTVDJxcHVIdmxLaXZRbC9mbnJyV0RDMXBsb0xsMkpkVWpyamgvdDFBYzhxcXJNcXVRNjhEdUtpcWM5NG9NSE4raUs2c3pSMkZDdTJ2N24yMkRrTzh6a2t5N3VuUTQ4L0ZQTkxWL2tTNHZmbjFXYjF4WHJsTWNZN0h5UGZYL2Vocnlhbm1pSCtqL2xUdGdGZmZBeEtHSnVRWmtDcmI5Zk9ha1E2OGEwTy8yU2RRVWZKMTl4MExESFdPOGRraHduYVhvQy9PN21ydS92TzRycFc4Q0ppTG5nNjYybzFvOW8yZy85Nk5QOFZ3bnJjcWU1MUcyYUFEK29ZbDE4NzZsWTM3K2t5dWNlRm54U00rMzIrSVI1SEJlZVovcDFuNXk4RjV4Mm5Yd1g2Mm1HV0s5OXQxWkNCa2ZPZVRZcGlHbHdSa1NyS0EwNHVOa3U3ZDlqd2U4WFo3ei9KY0c2YUsrQnRkT3dMOWJmQmFLVkV6WUROL3FUbTN2VFdVU0xGM3BaYmo0T3ZOam9rTXEyQlh4cWpZNjUxejhRNCtqVm81TFV2MkpTLzJ6YXg4VVkraVN4N3cycmJ3cjBseDd2Zlg5SlNsWkZiNTA2T2dsbzlhWFBRM1M2WXYxNEt6Vy9ScDdXUXpvL0x3djc0bDN2K1hCckNPS1czWU9yNWNtbmdCdVB2WE4xTHVKUis3aXpiNjRYaWVqbDl3ZUMreUw0UDZWSDF5L3N6cU1MNGF2S2V2U0YvbjRWdHZNRXh1UGdwenFpMVNBMUQ4N2JKNmxZQmIzNzYrYjdJNjlsTk9UM2RMVlUyTDBqdnBjdGcvc2czL0dvMTk5NXFZcFVabnFqcWdmMGZXSDk5T2RTN0Q5bkhGdjcrU244WTVzam1rZnVMU1FxUHZubWZBcjRMS3FQcEpYNTRERzJ4WXk5T3dEcmNmZHFHYmFLa2YvNm9KWmJMSDRBKy9EV1N1NkZmZlNHbnc3WEh4eU52Tzg5bFkwVHR5blFzdmR6Qnh2ZytTdDRIQjV4SC82ZmF1U1JLczlGQ2pSaSs2WEtRcXcvMW82eEVFcXdYNWp5b3ArVGxtTWZtY3Ywd0svV1JrQk4xeEltWGtOOTJpKzdyeDRNSG1vdm82c253NEdqZEJXWTdFcEQzdi80NTExcEhRWUtTV2d4cDcvT0RLTFB6US8ycndVdjR1dHQ4M3dUUnhVNk1YZHMvZkk5WXZwaXEza2hGM0V3djhQRkpTK1JMOHZPOEU2L2pIMWRQcStaOHZrRzVrdVBvcUZuazhHYktPdlNjNVU1OGdyMkovS200M1pwWk5FUTZScms1elh1bm4vWk1SeDVBSTlMSjVjaEx2VHBLaDhwd3ZxZlMyY3lrZ2JBL3psdnVPbXkwQVdLODlPQmRTL0IreWlJakYvWE5RcjR3YjQxTVFvWWorTWQzd1NrWWQxZHc2eHRQaCszWVYrZlRjWlA5eUsrZmRNYzJPaU5SUmtXTXJVYkFjQUw3K3E4K2JUVGkwOUtiNEk4RFJDZjcvVEx6bEVwUkp5Zzh2bjdTR2ZzOStUNG9VZ0orSkhEZ2hNeFo2QTNKbHk3ZGRyemlqSWRTM2tkTnYwbzFpMDlDdTkrQXZ2Uy9OUzFHNnNEL2wyNVJweFNGdUtQdHVoZkFTL2VpMm5MOUIyVmc1RjNWc3orTFMrQy9qUlUzVnFwalR6bTVyMlcwMDdEamgwOE03N2xaUzh4clRXUGpXYnh4OVdQSXQ0NjdPOWkzVFJOM1c4VzRzS0hveHFHd2M4Y3N1Tmt2MkxncVFabXZUNE4vaVNqeGFQTkNoNVhJVCszNDgrT25jQXIvN3hZU091eFBueU1XMmVIa1ZoTThqWnNiZElTckFQN3U5a3VTbU01N01xcVE5T212b0QvWWFmemVhRVpqNHdybnN3N0NIOWRmNkR2cHFIdzYwZUZ6VzJkanY3ck5tUGo0by9BenhwdmlBWVpZMytpblAyUFZQUDlwVlEyNjhwS29hWXlwUTdQUzgvNUxLQzk4elZPaGlCK1d2UFVhNHpXTFBBWXp4bm5WeU9PTUFwTUtXZ0cvclhRNkZQM0Y5dkZ0Q3dpdzJFNTlzVXlMem52bTRKOVNXcDlDMno1NEoySUV4WlZ0bmhEYnlvNkthOFh3cThxYmIxMkIzRk5zL20xakZhc2krdFQvL0ZOdHJ1VWxQUmZpV2NEYndqdFBHK0ZEZkk4UzY2WFh2WEN2aVdUWm14WU10MUlUcXUzeFlpT3FXRjlXcThpYVFOd0w5bUZzYXJmUHNJL2lERlMvb2poY2U1WDN0SHQyQTl2YmYyVm1OUEE2MXpjeHg1WWdYeFozMThaODkwSSthWEhQYzU1Zy8rUmtsUXVHYlVTZklUQlAxMkRrR2RZT0hEUjFwMVlCMTB4VHZ2Y0N3bjA4ZTJSRGdxSW4yUDN2ZHNyaDc3T3p6bis2Q2JzeS9vSmgzTWE3MG9vNHJ5aml4bjJhN2h0OXNwc0xkWXJQenJ6ZTZnKzVzbVdOZHVtNUdOZk5iSHZ5Ri9EVTlET01aT0xxM3NpLzNaalU3TEZCT2kvQjdhZjdrTVBiSGJZZENiaWhwVDh1dCtKY2NhNEtTM1NqQm1RQ1I1TTdkbFJBN0Z1N1dXRFJHMDcxaTI5czdENit2d1luNnJGdTN2ZlFmNTZ1OXJWMnZHdy84cDk1QklQN0hmaVpITjM0WWpyeU9kY3Zkbm1taWlrVFFVWk9Xdms0SjFvelA5OEMzNkg4aG5WMEhQOXNlOWI2WVZ1Qm9ndnhuUmFFN0ZzZ0F6cmkxZk01UUgzTy9kemJNRjQyTXUzVVl1SDg4b1VhVkNmbnRORzlaTlNSVXJGWWkwZDVDOHFEdzQzd2J4eFNrMi91dnM3MW9mTTFGQ2ZoUDBiRXN1K1RoVWhQL0FwdTk3dzBuZ2VyVmJmbXE5VWhYeUxXWEZ2WmRqZEkyNnpScytROHVuR3l3MXBFWWovblVJSG5KTkQvK3owbm5EUEhmdGEvRFJNT0tnMFZZVXNjdnYvcmNUK1dHZnZDcXc5OWVXMCtJQ1M3cFYzWW9ydk9HZmtPOFF2VXoyZWhQaGhmZi9TK21pTmxGTkU4bThlR3NIWXorZGFnNExkVCt4Yk5LRGYzUHd4Mk45aXZuVG45U3JvdVFFV3k1MmR1aUJ2c2lSdTVKTURFc3I2K2tPaWlYM2pYaTZ6bjU4TDNtWHMrT3lxZGZlQjJ3NGZOLzZlanBTTXJIeDZybHNvcHA3YnlnNCsvUVIvb1d2L2JXSFZXTE5WMW1MM0h2dmZpRnZPZjVWZmdOMWRFZmpwS3A3L0xFM052cG5BYlJKL2J6ajhJQVk0Zm02ZGdpcmlwVVdEWi9wc3d6cm01dnR4NTc1Z0hiYlJmTGVXWGVCNzlGNGdEKzBsVWFGZktjMk45c2l2OTYzeGM4NTlCUDE3MTdOMHNsaEdQMStlSy9nQXZwRjd5SFR4ZGVRSFFsTHRZdnJsZ1cvLzg4WWtPK0NPaDBmWFZ5NWF4YWVKU25wUGVpSFBuRG0wMGYzbkhheTNmUjl6aG9Bdk45LzlMQkNCUjNTMUpXQzVGdUtTRHhlckgxbzZ5MGgzZHREbWxlZmxsSEJZZDFNRzFqa21WbHdFZHF0SWN3MU81QmxnUDZqS1pPMTdUOEZmVmZ4MFdWVytIamlXZ1c3RFdTZnNRMkN4ODlmVkoxaHI0WlliVm1BdG9ZQ1FkWjErWTMrZ3ZaMitsL2NEdnZReDcxUHlCK3hqK2JGYlVPK1lVUGlYNHg1a2lJZnc2TnJreTJlaWdSdHVDc3E1Vld1dVJPWVJ1MGVsN0pQQnprYmViWHdxSlVrMzlVTVpHRTk1OVp0NjZtQ2Z0eFVUOURRdklaNjhhYnA0NWdIZ0E2L3lRdWYveGY1ZlN6MVBuZlNIbitEUlQxeWdpdnpSWDlVcFRnWXZnUy9tOXY2N0JUejFvenRqdnBVczQ1SG5yUm52V3VDUERNcjZPdWY1WVdWU3FsbG85eG41OUZkdnAyYVVleWpTOXBuTHp6eGVMNlhOL1FxUFIrK1UwYVFCWndNN1lOOGlsV1VXSzFVUkYrakhHeGZNaFI1WmNsTkRieWIyalZvU00yeENJZTduL1lWTlV6MkJneTd5ZXI3d1l6enlMMnRPTzkvRGZrNTYvZTdZdVdOL3pVbjVLZGF1d1B2U3JpM3pDZnVOdUdHUzFPMzVVaVZTM1plYU53cjdWRDUwaXZkK0MxN3NsT1VQRnowRVRucXM0ZURrNGNDSFhBemY5MjRGSDBQczBmemdGZmFQVERUdjhpZExJS0JVZi9zTGFjaGpkR3g0RXBXQlBJcFMvMVFyL2trKy9iaFpPNm5wb1poeS9icE5Nc2Z6L3R2THhYa0M5bkZjVkh0Y1NxK3czbHR6dHUzVUFYTGFaZkcxeGFjQWVFOXpkY3ZQVjNJeXNmL211V083QXMxUm5XSHhBMzdEbHdQcCsrd3dQNHJuZkRJMlg0dzh5ZFp0dGpaNXdJVzB1dWNNdy80V3ZZZmIzVFdEUG15aGJhdXZweExWeEQrams0SFE0OVpIV3Q3QTM5eGdiM2V2RnZud3pCdmRpdnNVWUwxdytQbURtY0JidkYwLzJkU0JEL0t6ZGZuWnZxbEs1T0Z0M25XSFRJbTBXdHY2Q255RU5QcHh4TVlYMk5TNFpiWjVwVC9XalQ1cUNYV2ZodjJHYm0xTnFUbmZrMCtOdlg0V1BnUVBxVHpwbFg4RzRvTzYzeTk2L1lJK0h6MVlsbmdHOXJmalVuTisyeFNpRjZyVlNvKzJ5RWpsaXUrcDFWTHdSdk1IOGR5d0h2UzhsY3R4bGE4eTBucjZlSGJ2Uk9BeVR5LzJpRUg4V0dQd2JyM1ZaQjQ1OWh1akh3dmN2YkduMVA0UzlNS09iWU11bHdOUDlqWDE2RkdKUE81andabUt0RzFZbis4VGFyMGJmRGp0cFY1Tys2NGhudXB0c01nSnZIaWpOVWM2dlhGUm9PT09YYzhHSUYrL08vN0tBemZzMTdVeGZwWEtiY1MzaXZLTDVhTTJ5V25UZ3lVYWlsTGc1YnQwUHM1R1BKU1d0aWxSQ2V2OUJZWE83bk44c1U1Njh0a0JXOFNZSDJNdExQWWhmclNxY1BUYkFOd2tjVVBENlNkWUJ4eFFYZFpQQi95elMxNGRkdG9DLzF4eStwSHZ4M3JrRSs0ZmUvZjJKT0x5dlZzVWJreVMwb3JTdzI5ekVjOWZINzAvdkt0UWdWYmRDZ251QmR6ZUkzV0k5d0xna1R5SmY2SXQvSUNYYjBVM2s3SGZ3MUxwUSsxSCtjaHZORXk0OXhONnJmVk1ZTW1yZzFpZlgzQTBWb2IxUHZ0ODNIdGtZNzg0dDhIemIxY0EzL1JzbVhmYmQ0TVM5Ylc2OW5aZEVlS0VmVHQ4TDJSSUtjcUE5K2ZCTDJYRWR5cmJQZ25sRlB5aEpjUU0rejhQSEpIOFdnbjRlWkt3TFBrUzl2TkkxemVPMmdiKzc2N2NtT29zN0hPV3N2K2Q2UURZRzc1V3pjNjlFd1UwdnVmdDZwakRlRzZhT2dWbEtnTEs2VDM3Z01wRXpJdWU1UXJqaStCMzl0Q1dmMElldDJsamp6czl3ZE9zVWsrb2NyUUVqK0ZwdDUvVlR0Qmpha2Y2endNdjZNbWlVYWMzQUJjNjhmTE9zalhJTTVpckxmWC9Bai9NMUhUbnRDT0lsL1pFUEI3Y0IvdFdkUmtXYkR4RkNIL3J6OERoRXV5M2toUFZHcjRNKzRnKytYUHJneDd5cUJVZHZnaEh3NThLMjNMdDlBZG5yRzhmZFhmaHVCZks5TVhmOXBMeGFQQm11NWw3Qkk2UzBvaGZNektLOVJEUDNidmlNaFQ5NmIvQXQyUWQ5SHlyd3FWbExkajNML0hNNzRFNzd5Rk9QWHppa1RyMmhhb3IzbGx4cUI1Mll1eE8xNlhYaGJSZVFUaGxPZXg5emhLL1R6dXcvODNJdmpiN2NoQ0g1VG0zR3BvcXczOEo4N2lZYWlBSDMyVEkyU2JzazYwOHNIdG5mK3hUdE1iM2dDOGZ2TmZWclRNendyT3hUK1M5NzY3T3dNL1RoaVMzQnNHdW16MjZjczRUdk1IYmJUdWt6bGhNKzhqeVFXazZlRDQrdGxjdjFDR1BxVE5seC9vS1ErelA4dXJoaTByc0Z4YXRzT2xjbEI5d21sY3pGdmo4bEZHMWQ4N0dnU1hZZDNYVWxvUWRHK0hYcVUxbzZpL0V2aEc5ZWo2YmpMemI4NXRqRDB4RDN1UkMwY1pybjNjTGFQazdvVklvOGxPblo0NnN2d0o3NExSM28zTUs4cXNlcnZyRDgrRVhaNGVyZlFydElLWjlIUndtR3J3anVscDBZZkJyOE1MVTlpcFAvSmFNZlpyczhpMCtPV01mdTRnMVIxMndUdnZhZU4xV2MxY0ZtakhEWjlvUXJFKzZldXloWlNsdzNjMTcxYlJEWnd0SmNiQlAxRlBvblFNRGY5enJqdlV5aFlHcmJZWWhYbzE2ZktlbFVJeDlUU1IrNTA2M0NPbnV5OThQRDJCOVZ1OU9xZkthdldqL3VCenBCc1NWNGhFVm5XOCtBQjc3b01WTnVrcUZQbDRNMmxHTmZVODJ2dk1ZMXhQNHhrYmVSNzJ4MzZUWWMvTjZWYnd1aTBlazJlV0lFOFk0aWVxU3dhT2VIVy9jMnd6Ny9OVlAzVHRpV2xmZ3YwLy9YanlBNTdyUzNqVHNQUGFGMjlqbUdEb2ErNkgrWFRqeFpuL29mZE9xeDZtVjRDVXN1WjQ4YUFYV2szVDhjVkJtdUZxSk5wNzlrV1FPUGxOd2E3WER6dzVTT3JBM2NMNGIxb2NZeS9PbFBaRlBpUk8rcmdWOWdEcjE2RmE4QUhsZGh6WGZQaWljQWU2bEx4aDB6QTc4dUswZGM1NkRQemJMSkVkWkZmdHBEQzNkRy9EbEVvOG0razFzakJzTFh1NlUybFZma084anA4UUYxOCtCbjdCWGZLcTFGUlU2cGMvNkRkd204TzlybCtXSDRHZDBHMVZOOEs5REptLzBuZ1NjK3Q0dHA4cUV2OUNUUGtXNmYrN3hxZU54NVUrOTc0UEhvV1ZxZkF5OGx4OVRoeStiRDd5cFhOYldiZVVRN0N1UlVlUGpqZjN1L2ordXpnSXU2dVpwNEhzbzBvcUNMWFozaXkxMmQzZDNvR0luZG5lTDNkMkszWVdvaU5pbkl1S0oySXFLL1g3bmZ2dDc1UDAveitlOFpXOXpkbloyZG1aMlpzTGREZ0V0UnVJdk5lZU9GTWVSQzZjWlBLdjFaZVQvSFl0WHZqTUNQYk5IcGNOSGZtSHZ1S3JEcVltbEx1TmZ3WEhPbmptTjBITWVYeGdRMmpXSmVoNlFadWdpN0hXOXZpNUp2WnA5T21aS1ZBbEg3RzdmVE1qaUZjeDdrYUo5eDZXL3dEMWh2bmVUSkZNNTF5WWNLdGUxQnUxRUw0cHdkWS9DdjhLKzR3Tjl3WSs5M1J0ZWFZaGR4ZWhNSlpzRXBFSVBkbUJtNElZK3ppckxrTzByUCtIL3IrYnNHdzZ4YzVFYk4zZ3pjQ2wrekhLSDdKcFo1Q2p2eGxKRjdrbkwvUzNiN0k3N1J2RWVqemhUd2RQaFE4SmluL1FjK2hoNjZML1JyUi8yb2Q3enN5eHRoVi9IM2JZZU14NWlIOW51VzhDS0NZUHhDK0JRZWxlWkp1Z1BvcFAzaVh6c29vYTZMYngxaXZjc1BhNGNYZUI2eFVYVnJSOXhzT2VsSkNyTmhSSFZoenhFdnVsNXFraGQ1R1lkM2kvTHQ1UDNrODBYRE51VHJuVWlWVzdpaFVsVDhGL3BQbUg0eUN6WVAvVjZHZjR5Ty82azgyNTkvUDRROWtTWGJoYzlITEVHUFg5ODA0N3A4Sk53Y01pK05PVmZZS2RmTzNQVFFSWGMxSVVMNis3Y2c5OUoydTVyM25PWGVUL1lNdnZVRmRqWDk3dXk2bWpSVlk1cTU3YXM3WjNRMHcwc2xqenpBdnhFOUYvaXUva0I5dDFld1ExYWxEenJwRlkyWEs4aU5pWlJHWlkyOXh6aHAxUmJwLzVUN2pSRGYxVFA5amtmZmxYdWptNDc0ejUrRjZzWEx0MHFZcG1yT2pLdi9MVS90SE0zdm54c01INWtScVJzdENUcFBQeVpWRXJudFk1NzBDZHJpY1ArK0hrWnVQamJ4T3Vyc2NjYzU1YWgraVA4bmhVUDNGWVp1OThSVjBMWExLakZmWFRlNGxRZjEvS3VyUGkrZXczWUY3dmVPbWNJamJRb3IweTc0ay95dm1UT3lXdWVpWGluY1hkeTFMQTQ3TU91OUMzNlp2NWJkL1ZyUTZJaFRlNG1WUkhUU2crOWpYK1BHeTFMRHBpRVhyVEszZUsxcW1EMzAyaDcrNnJySTNndk9PRGxEUDh3L0ZoZFBuKzRCdWY2Z3djYjF3OUYzbks1NEhxZml0eEQrd3hlWDNvOGRqbER5dFdOSE5zWnY3Y3ZhMnllaDUzKzBlWEZCdTJSZThHY1hUdFBRd2VkWm5xT21ZKytOdG5qelgxVFYzRldFMzN5ejAxNUIvbnM2NWFycXg1eVZUVk9sWC9kR2I5bEw5MVNIN3czMzBFOTIvcTBSOGd0N05lV2ZlbzBubmN2WXpvUFhGMGYrL2MvUWRiZTRkN3M3d0hyMHZkQ2o3Q3ovNGZjYVpBYi8vcjd3ZWt0ZHVXUHo5MkxtbzFoOFhHbkx2R1g3cnVxUVM2VDEvWEpuVlRkcmpwcHIvVVY4cExPeFpyMjN1YWlxaGUxNWVyNjBFT3RycDUyVWZzUytNdWFFUnM4Q3IzNndKVTNwM1ZEN3BhMXo2UHdxL3VRNng3OGUra2wvbWxDc3U1OE11MFNkaFNKL3A0ZmdwM1k4YlRSRlRyQ3IxWFBjS2w1VmZUWG4wYjgyWkVIdStDdjE1TU9QSTJmMTk3VGMwMis2TXg1VSt5aUxUYS91K3FWTHlaTGVsL3VqWlA5Qmkxa1AvV3M4SEwyRHVURVdVNUczSGlQM1B5VVIwTVhqbDMxZFBLdTdNUHhqK1Uzcm5aUVovUUcwN1plY3FtR2M0aXEzUXZ1NjQxZDQvM3hkY2F0RDFWcWRmTDBIOC9Dejc4SjJkdm1FM2FzWG1kUGpYN3dGZnZQaGFOL0xyM2hydExsVHQ1Nllta1gxV3ordzVIemVFL1l6TVh4eENiTzNiZDlPMFhINzhVL1ZIQ3lReGV3ZjFsbXNRNWVBai96STluRWozdnhGMUxKK2pQZlZldzNTclFldjdLS0MvZXd3SEhOYW5LZnpsOW1YZnA2TTdBWC9lNDJvL2hRcGQ1WDNYZnQ2Q3YwcWFmMnRidERQSXlUUmI3VnFJOC8wWjFKYzlWb2o3LzUyVStITjgwS0gzNzc1bnkvaU83NHBjbmM0dWRjOU5URG5xN0xNZzc3bzJwSmp2MU5pbjFNa1czTEt2VkdUbC9xODRINm50aEJlYzg2OGFrS2RpR1hCMC9kdFJjNTU4cWV4OXUrVzhNNzhLbXAyM1pIYnJqd1lwLzZJM2x2ODJqdWpmaHU0RzJMWlJmVGVjSTMvbHl6NlhqWkI3em5yVmhxNlhEMDRHK091SmNxUmh3QmxldnIwTnpZTFV6dDYzTWQ4MDAxWkdoQThuUWZuTlM4d0hXYlBFcGdENUlqNnNoTTVJMmhkd09udk9NOVZmQ0kySU43S1YvWjJUZFpWdXp0ZDBaV1BqWVUrTmllUmwwYWdCL2ZUVW1IMVpvZWhUeDdsUGUwMVl5LzhQc3UvVE8yZDFQOS8yNVo0WWsrZWw3T0JpODJmSVd2N1JUVUpneDcwTVdwNXUwVi8rMjV4aDN4TExVSmYrNkI0VnN5b2dlOE0relN4dlBRMDlqaVRyZVhuNFUraHE2NGxoVTZsOG9oVVROWEVPRm44alZwUDhKdnordVRQT3pISjk2UEhDNTd4T2VCdTdxUUlyREpoQTRlNm5IS1pibGFvKy83SG5SOTd4SDBWUFVYZlZxY0ZqdmhwdlYzTC9MRExuUHB0TGUvWGVHSEJ6WWMweWtGOFFWV0xpbVI3RGI2d1BlRGF0V3V5YjEzOUpqWU5XRy9IRlRlOE5WOVVpeHh3RTk2WHN0QTdQMnpOYXQzZVFGeW51bVZPNFpNRjd1bEQ5VmFueUp3eCtiZGIyWWVRSjkyL0pQZm8rcS8zWlR2alVQSHAwV3dyejZzOWlrd3hrVUY1VTZ6dEJieXRSMlhvM3ZNZ0c5OXZxZE8weFB3cFROZWRDaGlBVStIakdveGV5cHkwdDRWS2pxbDJRUC9uTjJqY2l6K1hSZjlqWnVwbGptb2pFc2VEWnlQMzV1Mmw4cDk5YzdxcEE3bktSdDNGRDdvd0laM1JXSnJ1U2puVkMyOWhuRWZXTmErZE1jUjdPc202NXBkcVkwY2IrRm1weWFWeHZHZTVmQ252amJvZVpPZzNkMHJJeTg5MmlSbXpPdG9SNVVoZGN0WmNjZ2R0anN1bmxPVWU4V0tDejZUSm9CblR0bDhwaTk1ZzMxSHdVOS91M3gyVUtWM1I1WEdiRjNsUEQ0dDlndnhISzRNR2ZkeVFXSGU1NlM5WDZrMC9nRzhwZ1EyS09qRis1QkdZNTRzWlh4MzUwMXQrd1E3dUJ5djJ6UU5SbC8zOU0rU21WM0RPVC8zK3V5YWhsK0NleU50R3liaTFLUDBVZmRUbDMyUTk3cDRkdStMUDc1K2w2NWxycnNlK2NxVTZQZXYxaWRXQXp0UFdwS2lQVDVUcXVYUGZnVi9ua2RLbFBWTXdyMmhhT2JQdGNkbTQzMUtrd1BwS3VkRTdwTER0OTBuN09oYTF3b3FjSUIzancyWEZocVdnL004MitteUUydmNTNkpxM2J1VDZqN3ltMlVsejE1VlFlZ2ZWdFVzTW9kNzk2RW96N0dUMFpzUDh0NmVLcVlzNzczcjdMcmRGYjltZnc4TXpjeHhvQW80M3ppYWFxeWJDcTR3dVVXaGFlaGRNNFh0WEIzdXBGSytQTlNxTjIrV3YyN3J0TGdnZXJjTXd4ZXZlc2E1V3E1YWhzNmhLUktwMFU0UGJUdXI0WWY1VmREN2ZQT1ZHbnFpU3ZHeDZIV3V0ZDkwT0k1ejQwYlp3Y2YzdnNaZmtHTm14OTdvRzNwbGpvcCtpejdSWWZOSDEyM2dwK3Y5L1cyeWYzWlR2L3AvenZ6dGhiUHFlNmJqemRDamJpckhpTS9abm1OWGYzYm9oUHlCM1lobmtkRzI0bGRjSXBXOXdJL1hUaWNTcWJVUmJROVZQWUlkVFpZVys1c1FGK0IyaWxYMTU3SytEenA3NXQxL0twSGFlblZDMlNUb05kOHVQZHR1QS80VzM1ZmZsTVNkZDE2cHJ1MDdWNVQ3NzRUQU95UHpiM1JYZjFhUEdOc2R2NS9yR2w0SmFGL1FXUzJmVXIvVEkvU01oWHRNM2pnd05YcVByZlhDUTFtWE5DTSsvRDZPdkxsM3VhbFRTdUFQdHNMM1lVL2ZJa2NiZUxCVTcyYUg0TjhpNmozTGpueXIrYVVsQWRWNEoxUHQrdUdiZmJBLzhzNitOK1lXOXF6RnR1UmE1ZlFMT2Z6RktlNVZaMkxmWERZa2FBRjB1ZURUdXRHZjhPZTNiL09vNUVVbkpWVmxkK2R6VCszSGU0ZENwNmZ2NWIxcjZkaml2OXVnUi8zU2ZrSGQrWWtjVkxuNmtYL0g4ZDU0Mlo0M281dG50NmlEZ3krNFRzSHUrZStXS2FPekVzZGtXTlZ6cDFOd2Jnd3B2SFh3SnRiVi8wcjNQSjE0QjZObUp5NzU0eGY2N0FQSGl3M2tuakMwK2NhdGxlc2dINWk4b2tIL1dIZTFkbmpNdXhZRFhOVVRqN3pEcjdwanY3RGR2M0I5K01DU3c1b1dtWVA5MUxJQ1ZmYWRYbzFkOTlJZXc3WWpaOTczZm1yek84UTlXZHlwVVB1NXZPT3ZscWo2cXZuSXlYT2wyeFY1RG1jMUd4NDlxSklXZStTUTdYM1hWOEhldnV2Vjc4M256MHFzd2xaa25KMkwrRWVXazF2bXZNRHV6bjE4SHUrRkJWelVrdERYVlk3eGJuRjQvT0ltajNsZk95aThSTHBpVHkwcTZiZmF2OS9BejFYcHVkVEhGWGxZZzFhbGJpOGZCaC9ZY1c3VEdzUitxdlp4ZUxNYjQ5Q1Q1dlYyeCt4WXJTamhuZTM3UVl2YTEzM1p4c0xFelJpUjArMVZ2cXJjZzhZc3VuOGJPWHp1ek0zT052dkplNVh2elgzU0lvOW81Skp5K2lyZTdWNnJVYURBeVJ6WUpaVjlPZjdNYUVkMUxkT2dJWjdzcDZJZnR3dzZoRDE4ejNrRmRoYmpYbHpNZjJQaDcrajVkaVZkSDdlekFYeGxwYVBydjZFMys5eHlTODZMK044WkdscjVReXYwblRrZUQ2MTFiaC96Nkx5dmJYY2ZOOVg4b245MDh5bXVLbC9IVFpFM0c3dXJFNC91cjQ0SFRwL256RjQwRi8rS08wS3kzVDVMZktkRy9YTnVpK0IrNzlXazA0V2RPTFI2T214NDE3WEloeU0rTEV3V2l2M2t2T1R2YzlhQVA0dFA4V1htSGQ0ZEJ5YytjTy9JVGQ3VnZwKys5QnoyUFExUFpIa2VpMzZneFBGZGxjN253QjQzWC9TNlovQjl0NHRmdUJhQlA5by9RMVlHOTBYKzFEenB2RGF6aXlWU1RkSTFHVk9VZHhScjB0L3AxSGEvUlEyWmR5QnI5VHJvUjlhNGhxWkVEdjMwY05EUjVQQWZ2dVZlZVFjUkgyUDV4WTNqcDJNZnVXQnlqb0Z6OGRmeGJuUFRCbFYzdTZxekYzK09MTTA5OG1mODU0bkRQTkRyVExuUW9jZDJWK1UxZEhYQkpQZGRWUFBWeVE3VjVaNit3TkwxM0Mzc3BzTEg5VjFWL294U1p6MjdwN3dPdkh1UFg1VjlOM1pvclVmUDJ6WVovbjVQM1RkWlNrRWYxcGZwdWZFMjkvMzN2NU5PdmNRN2pSenZaOXdJNXB4NDBpMkxhK3dnVjlVL3JNTDdFWUZKVk1hZGY4NGNqWEpYeDdxa2Q4dnp6azJOTGpOK1lHZjhiTzUzLy9hK0NYNU1HbDlNdWpzcmRsVFpjeFhjVmg0K0lzM0pyTzRoK0IyK2NTZnhwQm5JV1VvVTZ6WHhFUHhOdmVDbnA0ZHlIalJZMi96bVl0NWZONjUzcDFhakV0aWJkNHM0MlJsOTJwZjIzL1k5Uk42eTZlZ3A5N3RSek90UHU5VG5jam1xVEYvbTVwdXgya1B0NjR5QUVMM2YrS2ZEYitkR1g3VjUxcEk0UCt3ZFBQbzk2dFBMS2JINithdlEvb0hoME9FaTQ0cDBxSWM5WnNpREhrMWY4UHVYS1VXNnNXRS9GckM5bVFhL09iRFdwSkw5NEROWGpXMTY0UVIyaDc4UE5SMjhlalp5N0xQOTNJWmd2M0YxcHlYanRNN3dJUmFmei8zZ2ozeFdXRmVkNUozS1ZVdS9YR3gvMWQ1aHp2ejc4SGV2bzFadmVZZmVKcmlleTZROFYzbWZzV0h4NmJtY2kwOEh0ZnlURVQxcjd4eHBzazNsM1YzSFZsMENYd2VoQjcyOGNPaG45Qit4YWN2ZXlvQWNzVW1pTnFzNzc4RlBRc3kwdFIrUlV4WFkraTdvRis5emFtOG9WRzdLZEE5Vjh2N1dkWnMvYy80TVNEV2dFZlF1M1pVVy9iNmczdzd4cmU2YkZidlBocTU3UG1aQzM1bXFmK05FU2JDYmRSdGZ2bDFwNUJXL25wd3FueG45UzdNTnpXMnpzQy9MbitaRTkrTDROZlo2RWY0a0dmNUJ5dGNJN3BtUk9DQ0xQNDlZR3BxZmQ0TE5KdXhPL0FwK1krSG42cnVKVDlFeVE0bEpEVHU1NHg4MXhhZDB4RmR4Q3pvd1BTMzJDcXNIRExEMnlvazhyT0tzL2NXeG0xcCt4cUZ5bG0xS0ZWeDdkUGNaN1AwWDNGdmM2OHg2L0Noa2FMSHZHdmZtL2VOL2xIVENMK3ltdHRQRDEzS3VuTGFFcmo0OEI3K1Vud3ZNdjNMUVEzbDhPamR6SEg0QTl1d0pTZldDT0UyNW52cFdtb2tmODQyZDI1VTdnZU91ak01MWsvMTU0S1R5ZityaGZRYzlsY3V0ak82aE51U3pNUS9mK2hBbndTRTg1S01yNzYvYWRRdGJOUi8vbjNYUHBoblRDM25DeHZYSDUxM0JQaStrc3VQQ3lMcjRoWEg3L0xzWmRqM2ZwMGE4dUlTZXJwVzFqdGV6T3J4SEdWRFV2MVVsN0hLeUQ1NnhvQlo2azdOSmZuOUJ2L2E3U2thSGZUdlFpeWEvOStNRS9oWktqVXRjN2l6djZmcXR6VjJ1UG54R3dYVHZ1bXpCbjBhOTlpZi8xc0Z1ZEVHTlk1dExjRDdHckhybDA1NTROVGM5M3ZRN1BKLzRHRjBmaHMycGpWMW1mNWRxdjk2QXY5TU9MbnozMWtQTk9kRW8zZGtEeEIvd2Q1dlpCL3F5cFdqczVmTFFqNHhlZ3grZG0ydFJ6MXZNemRUdE9mcVViUjBjbXplSERreDJuMTBNUHZiazRIVExzeURYOG04NTE4K0dVNmtQcTNmT09ZdDgvZHpzNWFzajhlTThmRy9CclJHRmliZDFla1hmYXVEclRnL1BsSm54MDNqdHorSkt6N0NuN3VveTh1N2lYZENSYTJwc0JmeUU1cWo1L1ZsaDVFVXVsZnIwWG95K0lQSlFmSUUveUtOdDg1TnZmSTZkeERETHh5WmJzQmZwMHNVbHFzSXY3aDA5K2gwdENYM2MxOUtwOXh2ODRidGtjWGc2RlRsT3Vvd0x6dGFIbnRZbG1sUG5UczRxdVAyZmtNZlprWU1XclI1NUJ6OFVzeXN2bURlVGM3M0htU2VIVXZSelUrdURzNWRkZ1Q0NXlDMTEzQ0g4ZmI1dTkrekpHZWhNdFlEUDNXeThSeG1mSy9uRktyY1NxUmJWVW82WXovNnZWOW5QYVM3MnV1VVh0RGpRSDc5REF3SWV0VitKZm5EQ3NjbkRHNzNIbnJKUW04SS84Wi95T01XOS9TbUFZMVIwZzZVQnlHODNQRjh5TWg3NHJ6bmdscWZuQ0VkbDNkMXlWbjMwVkplbUZYY2VPOFJKelR6eE11OGwzcVVFWUlqaWo3eWxqUGVPdVVld1Y3UTh5K3hhaGJpQnovOU04MW5OdTkwbDlXN1VPSTYrcWxURXBHTXY4YXV3L1Z5NzUxV0kxNUptYVlWY2JmTTZxL296OXorOWl0MSsya2QzNHVONFB6TFhvZS9TcWF4SHd3TDNBMytpbnovL1lNeTBidDNaRDN0N3V3N0Z6MzNmQ3RrdjI1Qm5EZnRWM2YvNVV1SkJ0ZXhoR2NTNS9lQzUwN2FMeUUvTCt2YVpkWlY0SjliUTlqbTQ5cXRXSzdMNmRzTVBzc2Y1NzltV1llOS9iT3FYbmg4eThTN3FldnEwcnRnOVoxK2RPV2dBZUhkcWUyaUhqTVBkNFBPS0pGNUozSVVZcjBNYlNrUGZ1M3VtLzVLTmQ0bm5IeVMrR2NkN3dwRXIxN1oyNGYxZnZlSGxTMFZ5ajBpYloweWJkWGVSazJ5cTNuQkxPdUtyM1Q2WGNjajhKT3BDbGg0N2ZKRmZUM3kyTTJ6TFFPSzhWSDJXdVRIeGt3Skw1ODVia3ZjZlRaZVV1RDk2aUt1YTY3RnY1SFg4UWdTa0hucHpKZTlrM1k1TnZiSzlBUEY4SHJiYkdYY0V2M25MRXVkL3lIbmEwWkptZXcvc0xiYjA5NzU4NGp4eWxqd3hpVi96dnV6UDJnRVpZemZ4WHJKdmxiWmRXTitadHlLMnhtSDNGcEszNkpadCtLbmVVZlhCaHRjUkxpcmEramxsTXVTUjJZZVhUT3FQZmpCYitSMExzaTdnL0kxSjJ2TW82M0R4a2w4aGQ3dzZCZ3djL0hRTjc3bGVqa2t4YnBBMy9rK0RzNDNKeFRrdzBydGd1cWhGNkljOFhqeWVqTC9vdVBLMWluODd5ejJzNTVTdWozaW4vR2JPM01SamVLL1haK09wdnZkZzNMUG1HSjR4TmZyRlRLTWY1dXlIUGRQUkZaZlQrMkJYMExQUm1tcVoxemlyOFBKbmVnVVQ3MmJSQS9jM2ZmRXI0ZHJvU0tJVjJOTVB2RGIvOFMzMEpqVm1IQnpmZ3ZlU3d4cjNyRmdNdjZ1ZFhRNFhXNG8vaU9UZGNvNU95WDArNU9QQytFckUyWnYwOWFmelJ1eTNQTDRGKzJhRW4weCtKWFdIRXVQY1ZPdkE0azFpc0Z1WUV4MytlQWYwNEVXMVRLZGlpU2YzOW5yeEFoWHcvL0ZuejRPeG9ZUmMvVFRnMWQ1WnlOZWpCalZLbm9INGREbDZuYzRRZ2Y2M1lRUFBYNTdZRzY3SzNyL1l4V1RZbVJUNFdibzc3OTJIajdvMU1KNTdVT0x4WS91TVFKQzdMdG5wbG1kekFiZWpqWFpmbU91cWJqOEtQejI5UDN4ZHQ2RnJzejV6VitjY2kyZmVGNEkvNmxTcmFrekFYODM2RWNzS1ZpYiswUGsvVjZxM3dsNWxXTDc1QlEvZ1YzZFQ1SnExOVloL0VqYzJiT3A3L1BZUGVYQ3hZMWI0ZDJ1bTFDVjdZcDk5UEtMU3gwWFE4NlpwbWllK2dOL2pCVTB5RjNqZ0FGMzZHQmw5R1A5VFI3bzEzcldVOTl1L3BuaXRmZlRhUlpYdGZjQzlFUDU3K2xaKy9lWGlXK3hKYzI4OHNmNHMvZ2NLSGI5Y21QdjJ1Wm1IMHNjU3Y2RlQyeWRkV25CL0MvazR0R3k3cEJiVlk4N0RKbmZ4Ynpzajc1VUtpL0UzTThwL3k5emMrSmtLOUZsNHZrTnArTTlPWGhlcnQwRk8vbnpjak1mMVBGUjQya3Qrb2ZqZG1sZHZaK2R1WmR6Vi9aTmJkbTU2NzY2eVpQbTgrOHhaRDdWdVhJTWlwNkZ2dVZQT1dIMXJQbks1RHRPOWZtQ3ZNMzlUN09NNXEvQkRiaTM1WXhUK29lWStHdkhqQlA2Qm5uVXYrYm9PNytRU1p3MzBXUUMvZjZObzJmS1QwSi92dUQ5MVlTZjRqWWsvMnl5ck90WkZaUW5OZWFsb2ZRK0YyVU1odnlXOHo4eWU3cTRmY2QwcUgzdXhZekwrZmdwdXFOcGsrMWZld1NSUDFuTWk4bzN0MmI0R2xxaUwvYysxSVMzRkQ5N25VZnZtZS9BdWZQK25UcStMWVI4WlhpL3ZxNHBwc1MrTmE3aHBNZkxPOHRQS0hCMkF2RHRwMmM0ckc1ZUF6azRzR0hVaUZmeEtoZURDaEs5Vk8vZUVIY3VMWDZycDZXL1gvNHBkcG11clJtc0xMdlZRYWU3YzJuV1ArREVaczBWbGkrZGRWOVNZOXYzdk5zTE9QTjUvK1huc1VUYTAzUnpZQnYxTDh1RnpyWm54di9MRDhtWGJkT3diYS9mcEhlN0pPKzVXKzVkNFJMNTFWSjhkVzExOTlZMjRZY3NibHloZjFWbjV2bXM5WnN4S04vVzZlS0VWamZEUE5QeG05bHFWMEYvVjhxNzlwdUFpN211RkExdWN3TjlSM1RlQngwdnducTljelU3cGUwQVg4OXdMOWE3Tyt2cmFGdXhhaU4zM2dsclpkcWVGWGg5cUVGNWpGWEtHcjMzM1RxdEtYSjBVdFFldDNnNGVCcjMzYnJKNUxmcVZFUm5LWFUrWFZMMFlNZlZJOVptTzZ0UElVenRYbEhSVHR3TUtCK3gxNFY3NjVIQnBhelA4ZmVYNi9tMGM4cW5EbXk1NS84QXVmblJZdjBjbnNXTjJ2alhpN0U3ODRwMnJNU1ZMZjg3cHcyMW1ueHVOZkN6YjBDK25YeEVQck16MFRObjM0emRtVUk5eUdadGluN0RlZGFEVEJ0N0hYWjBZY0xuQ1FCY1Y4dVBPSUVma21JRi9zOWIvM041VlRVM3UzV0NSNE51TnpZdU9jNjR0cloxb1RYdmVKNnc4TVhscGtwellJemFZZkxrK2RtUWhOVGM0YkVCZWxIVGo1YUcvdUVjVXJObG1lVjdpdGx6T3E1d3U4ODdJTDNYWW9pN0VhVWo5UGwzdWplanpSN3J1N3pVUC9VWFhSNWNQemZwQi9LdXRlWmZaMGlSVDZkS2xpMSs4MmszOTZOdjE4eUxrdDZXSHppaGNIbi93SGxuOU8vc0JueHhodldabVovL242dDB0MVFuME03bDdSTjM5aTUxbWhTMWxQTThoejNkYzNUSlJ6aEhvWDFzdFdQYUlPQzdPQlhhVmszdnY0R1BmR2xyd2oxRWw4bmZaYnc2OGo4clE2RkRrUTNmVkxJTDdNM1loNDdPOHZ1WHNSOXpaM1N1VGhZTFhyemEyRzNRU1BMNVVyY1c0SGJ3UDZlSVRIditCOTlYNVlwMDNua0x1a2FyZjlJV1B1UCtlMmRRK2ZDbjN2WjB0TzNxTzR2MUpyM2R1NGZINEcyOXY2WGFFWnhIcTZ1alJ4WXIyNUozUzVsVm4zL0JlWWRxUDBWc2FjYzRkOGdqeGp3dHlWZmVYT2ZkM080eGMwL2IzY1dMOGU3UTkzZW5TVy96WGVmUnEyNnNjOFVYVDNQUm9mQVg3b2FPTEF1cnM0UjZjSSt2Nk9iWFJYMWRKM2ZGZTYyeklBWVpNZC9LNGhuMmZlNU1LUmJCdmQ5bVVmZjV4N204Zms3ZnVGa1ljNGlSUDNmUGRRSTlxODYvejRDbnhZaUpPVjF0YTBaZUJuYitRYXpkeXM0b1ZlL3R0eEMvOGpkMituWEx3M24zRDVGa1h5blRsWGhaY0l0Y3MvSTRNdXgrWHJRUjg1S3AzTTk4bTVydjZ6L3ViSXVFTFBLNzUxNndQZkZwMDY3ZXZKdmU4ejB0S0RPdUVucjlNdTF3ZDZ2RStyVjRqajhBVHlGTm5ldzBhdkd1VnV3cnd2UDNpQ1hadFVZL0d0ZCtFdmRDNi9xbm5ManZtcUZxL2VleTBqVGdHQTd6aWNtNGtYbkhtSTBtUy9FTGY5ekNveFBvUGFZZ0w4MlpBOUF2OE5ieWRjL05SUEg2Z3JJRmhGWXJ3anExeTZubmRONkJmSHh1eU1mOVVkL3dkckZhTHhtTlhlYnBJN1lQSlVkTzEzZUxhdXhkMlJDR1ZkN1Z3NVYzemxkOUpqcXg0NGFKQ1QvZVBjTWEvVE1QY0JXWXN3NzdhdmUrbGluMngvL2xaNDlqWlk5anJ6MGswNUdJSjd2ZGVRUmNIbmtUdVV5SW0xWU9hNkRzTFpqdTVwd2x5QjRlT1lSbVA4ejY1eko2Tk5YWWpUenYzb0xqYmFCenp6aWk1di9FdS9BZkYzTXg2SVF6LzU1c0d0c3Axa1BoSDVYZGxPTEg0b1pzYU1yak4zMGE4YzlzODcxcmJFdHdEVTJXTXZuaUpkOFBqdDl2ZTlVRFBPdTladmpTcmtHK1A2RFcyK1FQMHF2MXlyS2ljckMvdnV1WlhtRmRsRVhLWHg5OHYxZWJjYnJJZ0trVXQ3SGphaGZlczBQVWdlcEZqT2VOaWVSOGI0K0cvNFNqMitUOXJibGNkUm1Qbm1TaGs4ckQ1Ym1yWndzdjd0N1YyVnQrNmZiMzhpWE4yelovdUR6MnhReGh6OTZCMUFuNDlDd3hKbmZRUGVvYTVlNjlsZkFKL05UOTJYODBseE9OSk8ycnU1S3JjMjg2MHpsTzdQUEwvaUoyTjIyN2hmdXpwa1hWOFZmWnhreFRmVTliQVh2N1NNZHVGOGVmUUZ3L3RkR0RETGpkVnYyemJGQzhLOGY1alorMTY5NU83cU1lak45MTBoYitzc3Z2cnp0ejR5eG96ci9uY0hjemowNTAwS2ZZUjEvZlJ3V3laSStFTHV4VnFlN3JVU3ZnUTI0NHgwZEROczErcnY2eUd2OFFwMVM4M1Nkb1NmcmRpajhUcm9NKzNTM3FsTGM0OXQ5S1V6NW51QnJtb3Jla1BYcmpFTzgzK0piZTRmOE9PTjZPbDc4ZXR4RlU2bW1pOVV3dmtxRi9INWZ6NkJQL2w1WVk1QjA3dUQxMis5dmhpQ1BnVHQ4WTFEUGRFeXJIZDlUKy9yeU4vZnZ1MXlRemVnVGZQNFYzd0dQWkNMaTVuSnpueWpzb0htNEhNMkI5RTF3eGZrZ1kvRTJVZmhxMmJUN3d6VjhlemwwOGp0enkxcmVEMSt2V1RxZ0duWm43YU41WTRMM1YrdFY2SWY2amQ2ZFA4VG8yZXIxL2cwUHpEWG5DdVQ2KzBKQTMzemVVQlR5Ymx4ZC9EMlM0TjdyMUZYMS9lUFYrdFM3emJMYmp3ZEtWZjJHbTZGY3YwTVlaMzhmM1AxZXZWbi92RXJOenpEdVZGL2hCOHEraHVGK0tFUmg5c0had3h4azFsM0YxdTQwNzRyTUZkR3Q5ekpHN2RzVjJYdXA5KzVxeU9qcm9mUFNvYy85QUgyMlhMaFQxR3FRS2JrL2JIYnJ0MFRQK3d1ajNnVTlUNkhHMDUxOGRPeXovaUZYTC9aaWQyMUJ2RSthU2NldzRmemYzN3NhMzQ0NmU4YjUrMnU4VE1wc2pMaWorL3U2NE81NnhiNGVkYmNxTEh1Zmp6MSs0enhHK1kwRzFpcG5YdlhOWEVxV055clorTVBVbncxbXNiOENzMjVYNVV2c3I0T3preGZZbmZzOExFYWQyMnhha3M4dHBIeVE5V0tZNityL1AwaUdJVE91RDNNMjVQNHJuNFRVblJaY1Z2Si94VnJBd3ZkZmsyL043M3BJdUhkK2JkMDR5YlUySTNETVp1TU9qbmpxaEk0dG9WaS9YTml4MUhtaitmODJSMzQ1MU1wem8xVDg5MFZXZXVaTHJUaWpqcmFXbzh1YnVXZlZ6bnlJQUtaYkJYdTlOZ1dnY3Y5QWFUMHM5eVRZV2NlSFJmcndGdHNaT3ErNlRVK2tlOHk2MjY0L1NORXlQd2I5R3JYc1Z0dThIL05DMFBCT0Z2dm45ZzVKZjc2SjEvRlh4MHZOaGsvSnNzU3JGa3FUZjI1bE5TbGV5UG42YU1xMjQzM2pIY1hYMTgvdTNkZWU2aE9WV21jN2VKaDc2dGdPdW5VZmh6ZURKbzBxL1R4UEU1c09GQW94SElTMXZkYXJ6Z052cmZpRGVxMVhQOE1VMFp0dlIwRHVKR05GbGJJbFZiN05KVHJFKytjU3Aycy82TzllOUVJU2NQNkZEeHdEMzBGYWZIVHF2NEJQOVBoMHQzT3BrZHU5dk5tNFlkbW9jOVNjck9TU3EzSG90Y3QrU3lxalBYRWRkM1FNWW5qZG0vcis4WGpNd0gzZkR0a09yS1ZPSzEzUDBXazM0WC92Vzd4eFZwc0lyM0VWVkd4TlVLeEQ5bG5nYjVucGNsTHZUZDRpbi9UR2dKWGc4b3R5Z1AreU5sbTZhRC9JdWpSM3A1NzBhZnJHN3F5ZlMzZGIyd2kyMWY2VWFWZU82TmR5ZU9HTklPK2MzMTBPS1Z2K0NQNitDakdlVnJEOGRQY2I1WjcwN2hiMmxBNTdsdC9rempYVWpSR3JWcjRvZGpRWUVtbDJwakI1QnNjdE9wNlpFWFh1bmsvZlFCZEdCZzBaZFRsNkIvUHBQTy9jcXFVT0tRUlV6eDdvSGZqY0dCN2ROMUdJQi94cWZmdjl5K2sxVFo3dldjNjRhZHhPWWh6WDI5a2FPKzl5bC9xQVBuek9nRjB3dHVHQXM5M3ZxbDUyYnNGNndSNjNha3hGNXg2TU5ENTV0ZzF4TTQ4bmF4ck1oeFR1NGJPcjRiL2luK2VoYTJCUklQSmFCa3pOUjR2bzlXMmJ6Mk52WTY0UXZkdTk3UDRLenlKYnNYc3ZjSThvNnFnZHZxVFhGVDZkc1YyRjBLdVUzeTh1djhieEl2NXMzOE5NZldFYzhtc2t6Rm4vUFI5eldPclJNNEtoMzY3S3I5dTYwazNseXhaNXZmSnNHZldqS25scm1LNDJkdHlKbWdhcEhMc0lzYTNYZFhlK1FDN1g5SDlNMEkzeDIyZjNuM0ZMekhmRm0rNC9yazcvRFhVL2Z5bDNQWUR6djNUSnMzTFhRdnh1Sy9kMkFUZDlYQlZyMndLM2IvdnFzM1ZrK0hQNXF0RnpvMWUreUszOFhWVDk0ZTVMMUxoN1RwMXB6bTNhM2JpUGoyczVHZlBUcjRLNmY0eHp6L3ZOYXpZOWcxRjM2MTBYS1g5OGFOazQ1STlCTjdTNS9kUTVLMUgrK3NjcmxPYVJYYTFWMjljOXQ3NUVWTjdyMXozdzlaZ24rWUVrM3JGbjlPUEtGQ2lXdVdPb3ZlOGt6UnlrUDh3b2pmMW10SzRZTlo0TCtDZmxhYWc3NHIvOW9obDNaQ0I5NVYyWFQ4S0hFa1Z6ZkpYYkFWL3E3TDNMKytZMEk5OUpqUEI1MmRRMXlmNnQrUFpHbU1YN1k4STcrVnlSbmhxUGJ1bnA3MWNVWGlyQjBkKzYwcmVKUy9rdS9FOFBUWWo1VDIzWlFIZjduOUZvYWxDY3FUV05XYTRUZlJEejNybmQxWkxxZkp5L3ZXcFJPT05kckhlOXZMZFo2OFI0L3g1ZDcrSEZiaVFiMUw3N3k1SlA0SnpyK1lPcTBJOG9ObmJkTFY2b2ZmeWNoVGw3dGxnMStzY01DNVVKTFNibXJmelJhMno4U1o2dEdxLzVkdkk1T3FPWGRYajd2N3lGMFZPOUsyV1diODZZN0xNckNhMHkvMlRlOThLOFBYd3QrOGVCdzZIRC9NUHg2bmQ2ekh2YXYrcUF1SmsvT2VyMjcrNU0wdWVoSHY4c2ozUkkySU8rZWNaWVhQVytLQzdEbFh0bGhXL05WMlhSdTNyQXArYjNLbnJWUEJCYnVORkltdWpCMTd3MFZOblB2dDVKQVgrQWQrNjVaMlpLYWt4R2Z2KzNaWFBPZjB5UnNWSHVCMzhPYlh5R29mc0lOYWR6Tm44Y1BzLy92SmJtY3FjOVNpT20vbzJhUVNmamRYN0QveXV6eCtrSHVXYTl3Y3dxazZ2TXN5b2pINjRiR0JGYTc5NHI1UmZ2YWJRVSt3c3h5VUswNTlqc1dPckc2SmFZMnFlYWdkMThyWERyR2l2M2g5T3N6N3RwdHFrZTkyNzEvSVFVKzhYT0ZjYlRKeG5zNnVmVFgzdVVXTktoVVZXWjEzeTVPM3VqYlBnQitIM0dsN25NNk5QZG1XeFkzZXAwTmY5dnJReWM2RlBxRS9MTnc0dUNmK0NFLysvbmxsVVRIZS9jMCtiUW5udmRhU2x5T2JuNHpqSGR5UjFBdXZ0RVl2TXYxMzVyTEUwMDNacTZqeko2SVhUTnpRcG5YUWUxZTFxOEg3Z0JYSVpVNDM5dTRVZ2IzS2U1Zll4Ry80ZTlJcmxlc2Evc3JMSGZ0eW9RcnZhYTRIclA3eGxYZnVUNXZmakY2TS8rZ29sMHRsdTJLWE9Uem1RZDZ6dFlnRDRsNDZwT1VXN3NQV1RqNHo4V2U5OHBaN3pvYlk5ZDgvV0tyK0R2ak9lOTVOQjhkaVg3YXF5emdIWCt5L0YyZXYvc0FUUDM3TkE5VDJQYnd2VDc4aE5uY203T3pDT3FqWWdVTXQ2a2lGT3RsM1l6Y1QrdXh2aTBMNDY3TU1kaDVjbURoM3hZTXNjUzJRRjJiZmxLbWdNLzZSZXFjb3NYa1c5aFZKSDVSdlg0ajNncGN2K3RkZVFmemQ3TCtHYjkrRUh4azFhazNaUXN0ZDFQbzlGL1lteG0vcThHTjdpMDVEbi9GbTlNYzFkWURmNVk2UmhjY2hyd3E3NHRGMDBrUkg0b0Jkc0ZiaDNYTys0TGdrTzZ2amQyb3cwVjJ4VTAweFkxQ0dqTmliUEMrMHNOY2E5T3UvYjJVSXEwZzg4YzlKaDFab1dUbVpPcEtxYUl1eitNMnBQZkRlNzVyY3h4TTk4NXJSSVI3OTRkKzcrelB6N3JYcXhhWFY2K0RmT3k3KzI5OW4yQ3MrKzlhaTV6UHV3WGUrdEMzdWpSMXVvVU9PQTJlanIwbVNjZkxxYS9BdEx4YW5xWEdCZUkzUlhjdmZ1TTU5dFc2ZHR0WDZvYitxcytGUDBlYThCeitYWTltRWZmUHdXNTZqYUtQYkw1M1ZyaDFIbnVjNzY2STJCV1VjUG13cTk5SjJ0V0tYenZkUTl4KzArNWFQOTQyelR4Vi9uUi83c2N2dGk0ZGU1ZjYxY1ZuUDc3T1I0dzVaRmJjckMrOExkN2QrRVoyMkkzNUtNN2Y3ZExFQitvMjNxeGIyYm83OEpETFZ5eTc0SmZXdmw4bTZCem5hdzMyaE43UGpYL3JzNFVIamQ3UndWUzREZXVSd1NvRy9oRG4xdzlLc2RWZDk3Mng2Vnc1L28vbnVWUnMvMllLL293SWhrUy93V3hVN3MzRGFJOWhkSHlxYTNxUDJBT3lLUzQ0LzhRNTZmMmwyZmRkYnZEdUxLOW1qNVBJcnJIUGI3N0hIMmQ4ektzN3J1TGNmNzNTNnA1amVzcU9ES3ZSaTZLVnljNGpQdEczeGd4RWRYZFUrNXhGWlJpT0hiZFhObG1pb0ZmMUFkcmQxVDU4NHE4Ui9PMDdjakQrYkNqT2ZsQXZGRCtuZnJzbHEzT0hkMi9UU2kyZWZSZjZlMGhaOUxvdzRaWGtiNXd1K2d4LzJ5MlBLQjhmZFJ0MTY4VkhkY2Roemx4clI2MkhqeE1TSkhyWTkzelhpb2dYa1ByeW5KSFk0bGZZdnlsd09mL29qUzR6TE0vbWNzNHE2Tzc1NUFmeXVkV251ZE1jTCtWdjVmQ2s3TlVZZWZMTGNqMk9QMEF2Y21aYmpZaEhzTHRyMjdPcFhCaitXL1phc21MOEd2dUZoa2FMcFNrSi9neTMxMWFUR1NWUkhuMWRsbS9BZVpzMVcxZGVDSHd2SERGNTVUeEFuM3Z2NGtsenJnVzlBaGFvL08zNU9vbUpqTXcrS1JsNll4djNqcGsrLzhFODhjZmFCY2UrSXczQ3gvWTN2OEdWdERuU0ttanpRVVczelQ5cTBLZjYyNHA4bnFoU0l2K2M2WjJvWDZjazZ6K2xkMWU4YStvU0JlZi9tN0lYL2w2OEhsa1FWK1VRYytlcFhXbXpBVDgzYUUxZUxKY0UvMGRQQnYrSlA1TWJ2NU9LL1NaNGNkRk1ia3gvTHRkR1Z1S2Y5SHA0dVFuODl4ajg5VjRaM3JkMXpQUHBib2xaaTFiOXY2bjRXK0xiZFgxSWwyNHZjSUcrbDViT1A4TDdrN2NoSnY3c1IvM05VNC9Idm1zQzN0ajZ3NzNvYi9IeDFMN2Urb2h2djNGMG56UFIxZ3Q5djkyRFY4WlhJZlRvTlhqTm5OL1lvUlI4NmRQb0duekF6Wkh6ZTBjazlWQW1YZG9lN3AzTlhQUEwwRGp6bW9zN2xMTks3RXZLbm9XTUdwVWxML0lpa2MycTV4YjdBanN1N2FKTERHd2pUdUdaV3lnNzRjVzI2dkxMN3oxNFc1Zm51ellPM3lGOGQwa3grbllyM0hiNFgyelpMelRvMW1QR2lkQ2JzNHE0TnNQWGI5QlM1VENzbmwybjRWVmxZZS9LMSs3ZXh6OXpuL3lxT2VaNjk5clp4VmZ6SUxYVE4xbW9JK3pUVGhwbFBNcURmS3Q4NklPTFRSZ2MxWTMxRTVWVmpsYnJlMm4vaUdlNzFsWllPdVRnQk9jeXVlUStXRnF2b3FGTFdpN2xjR3IvOWthWEhacjJBZlBIVHdrM3JIcURuV1RUSi9XM3kzeTRxc2tXdXR3ZDRyMy94N053WDRsZDBSNnJxVnp5eG4rdTZKL2ZUTGZDWG02ODVCYWZzazBqZCs1TnU5UXppVFdXYTJ6Ri9FUFlSUndLdnpYbU1QL0NJc1pOcU50aXYxT1hZOUkxT1lhZTFzczNxQjNpOFVwYjY4NWYwNGp3ZWYzUGNqUS9jNXdPYjFnaTRTVHk4eWR0dkR0K0JIOXdqVGR2M3ovSWNPOTNEZzB0UHdPL1dwR25SazJxMWRGVWxmMVl1dkNLNXN3cnBzWFI0M1VqOE1BZmZ6SjIrQis4ekx6NWJQeFo1dDU5ZjFmZmJ4Uy9FMDY1blQ5NU9wTWFrUGhjVGhKK0x1UHhwanFYQWptWHAwQlZuWjhBUFBSZ1V1djhIY3RITVR6TE9kZWFlODM3TzUrdzdPN2dwaHgxTE83WEZiOTJXUWh2UDFjRitzMnJnUWMvcmw5blhKV3JHSGlIZWJPcitXejJUWTQvZnIzcUh3LzN4RjVINVJvZHNtek5BZjQ4dm4vRUxmN3ZPODQ5ZUNzQWZiL3lBSXN1emNGNi8rcnp0WTlOMnhGN0tkVExzSXZyQVhYZkNneWV4YnF1WDVQQjhEbDRrNjV5a1MxTHdzcU90eHRJdnhIZExHL0ZtN2hRLzRGMTJ3YXoybnVCRG12SVJNeHpkMU0rRkw2Wit3WjY1UU1rYlcrb2c1enpTSStlaDcvQlZyaDhpYTdhR1Q1cTlZcmgzSS9SbFlWMkd2dmpOZnF1UjVGeEVOZnhSajA2V3VtY0Y0cjdmYlgveHVjUVpMZituL285YS9OMi9lOFU5dGVEM2VoNlA4TXVESEtyYzMzYVppdkErSWZ4bnB1K3JLeWRWVWZtOS9uZ1FwL1R1OXo0WnErUDNjMkxCdlhIdmtQL2RURFdyYXdQcys0bzJPcFkzZGh6eTBrcVhmUHJ6UG43dGpkU3hNOUJ6SkR0Uk1iNEtkbG5ObXA2K2tBai9BY3ZHenQ4MmN3YnZ1anJkdC9qOHdJNXIwZE5iYWlkMmhMbE9XckljSTk3SmhhUFRwcmRJcHNhc2ladCsraE42cTFkemJ0M0FicjNvc2xaakZoRW5iVjdhalhuL1ZFK2sycVFkTWI0dTlobTVqbzM2R2JxYzkyWmJMcFZ0UGhqL1VFRmVYWnlKQjNaMzdRT25nNXhudlJvc0NNayt4MUUxNy9yeWVIWE85YTdCbGlNNThadFdNY2U2K1ZmUXV4ZDZNdWYyYS95Uk9PNSsvT05LUCtML2xWcnJOeWFEcXhyejQ4QytQdkR4bGd6ei9lb2lsL3grY2xLMU9PSUZQcGx6S1ZNai9LVjlML0cyVEg3ZXc2ZS9QYkR4SHV3bVZpNWNNTzQ3OFNCU24rMjNlQnJ2UVMrdit0NWVjWTZGRnRrL2FENXhlL01PZTkzcE1mSHZMb2RiZG56ZjRheGV1SGFaNm9BODROSGJOb2xEQ3JxcG0wVTdsS3d5emtOOU9kM3E4RGIyNFlMeW54dkc4QzdoeTllaks1SmpIL3lxaTYzZkFPeFFMejFKZGUzdUZ1TEtmSXc5OFlyM2k4MmFUbHYwQ3ZuUWhGMUJEdy9oNzNmSUs4OUxmVm9oTDF6enlNTjlLM1NxYnRzS0Q2QWJuNTYvRE8rSUhNZmZkMmdqVC94WmJnOS9FM2xoRlBxY3dWNlpGdUczdEhCK2RmVXE5aDJmYTBZVjY0R2NZUHJ6T3MrT1lIOVllL2pYaHg3b0dSc092NVFwRnY5ajh6OCtQdVNDZitmUWo5VmJaY1ArcWVPcFFzZUQ4Si9UdVczTnU1dWdRMmV5dmVxK0NMK2ZqMzlkS3J3SGYwZ0htKzVNcytJN2RoVHZPaTNac014TlJWMnZsTEVZY3NmTmFaOWNTSGtkUDJscjBnUkY1WFZScnBFQlF5dHZTYVRPQm94dFVBaC9ZQ25MekNxeWtQbTh6Smh2WjNyODlGYjBYYkMrTm5FdGIxbzhNbDBqTG15eE8xOVdWeWUrK2VrYXBhYjU0cGN2Wmw2WkYzbnhTM0ZzenVJLzNwd2JjNjR0UE4zK0QvTG1sOWRtUE15SlA2ZXhQOWRQZE9iY3ZWbDV1UDhpL1BVTTZ2aDlNUDRQOCsrb2x2dHBBZXg0aHhiOTNRQy9jZFVicDBzekcvdTh6SzlIM05tTXZWMk5LUzl5L2wzSVBYZVpZODgveEFmTWNuaDA5QkRpKzZVTnZiTnBiM3ZpQUt4YWNNQUZQd0kxK2x5NXRwTCszNTJiZjdnamZvbWNianovZFl3NDhYM0hlNmRxZnQxZFRkM24zMmxtUzNjVjZCbjJ2QmwyS3gyOFVpK3ZqRjg5L3c4ajE5NGsvbkxWL2dlcjc0Q3ZmdHAzWTltSzJHK21leEZWZVNiK2V4dFVkWEszc1orMis2eXZNbTAzZGpJcDNlWm53VzVvck4vbXhlbndMOXR6eTliRTgzaC8wSGRxMmJSWFZSTFZiWmpIalBUZzc3bzVCOFl0R09HbTBrVStHakVVLzNHdlprK3YxREVPUHpNM0NrMnNoanhvY0gvM2NkZlJoN1I1SHZQMEovalc1a1dTOW1sNU4zQ2pUbUJNcWRMSVdlTkc1VWsxa1BpelM1TjRyRzZOWHJEcWxuVGY0SHMzN0poeDdRUDYwZlkrMCt2UElON1IrajVocWNmV0pENTJ0d0tKOHZKdS9Xbk5oV2R5b3k4L1YrbkcvajZqWEZVdm4rbWZ2bTFHNzUwc3VkTlU0bFhzTDdBdDFkUUI2Q1VLRDBtLy9UcDZxNXlIV3A3QzNxdnhoQmQzVjhMSDFIcS9vdmRzM2plc0c1RGxTQS9veFlTajU1djhKVTVrN2lVUFBUY25kVkN0bXY3YWxRNTk5Wmo0YXc1WHdqaXY2elo3ZXhxNzBjNlYzL2M0VFB3TjY5akpPWXRnSDExcDRiQ1p6NEtTcW5MeGkyLzJXOEQ3aW54SlUrVEF2M2JLSHgvN3ZVSk9HL3I5YzhNKzZFc0tIZDU3dGkxNi9Xc2psdTNQamY2eWZPc1U0WE81RndYM0RxZ3pHMyt1N2xrY0trN24vWjluaTkwSGx2QmVOaVI3bzdHcDBNdFVmSFk4eGhmNzMyYnpDaTFxY3dmNTBmeFRpNzJEME5QOVRKZTlQdStBMTQrWVh6RWNPRjZJT2Zyb0IrZG5UZmMvK1JyREwyNXIvWDZpQ3dydHVFTlRoMlpEcnZiRnNWamUwOWpoTGV0MlAzczc2TktmamxsMjFlRTh6bnVycFU5aTlJTWplMFp2RGltRW5WVG8xRnlEaVFOVEtjbTQwWlV6dXFndXN6cjR0aXFKbitrK1F4L0VJazlWT2ZzVys0cWZtQzhyeGx5Y1Riems0UTFPcFQ2RmZVV2RRdkd6RnFBSFREN0F0V016M2tIZWZmMCthQ3puUm9hbGZYZFV3eDcxMWNzdS9YTWo1OW1WYmNhUlR0Z3pXS29kMnJtYysxSDN0MDcrODlGamhxeHY4amgzZXV3Slk2ZDJpQ0VlakYvN3JlSFB1Uzl1N252MXg5UlR5TCtkLzJRdUdlYWl1dTZkdEtNdC92MzNUcDR3ckFMK3lxcEU1aWppaTkrZzhsbjdIOXJBK2Q1ZzBvQlN4OUFiTlgxeGNQMTE3RWtxeFNmYmtLOHk4Njh5cXZ0TDNwbFU2UEN3V1dyc3JPY2NibnphSDc5Qnp3Yk5ybmFhOTZnckR5MTV1U1NadTFxL2FzQ3FiOFJqSFJaeXFzY08vQ1pYZVYxeGJLKzkyTWNYY210WGgvdFZ3NmF0UEY4UjNiRDlRTWVCanNTVjdKaXNTVlovL0wrOWQ5bjRvYmpJblRkMGZsb2JmMklQRHM4OCtEYlNVU1U2ODNOamJmd1VaTi9adG41OXp2Zjlmc1hqU29YQ0oreStjZlVqL08yYjFydDJab0MrdHVnN01Hd1c3d0VxcDEwMDJBcy9ZNHMvRHZwV25YZWFEWXBlYnRzYS9XVHkydG52ckNXT2hOZFV2eDU3OFhPMCsyMnpXV1BnZHhMNWVnYU54ODc2U3UrSFVTbVFZN1krVnQ2MVBISGwzZU0yejd5S2ZQUnkvdzJKeEUvajZQZGZqeVlYdVZOc3dVYWY4WVBmTTIrdjBzdTZ1S29ramhPTHIrZGRhMFNpSk80TGlDKzl2MnVHVmUrYkVYOHo2ZE12RStFTGN5NWJQRDBIY1R6dVhrODB0UXYrZmh3blR4K2VDcm05Ly9vVk4yL3dYdEQ1NU9DeXgveDVGelRsMmJjaDN0elg4MDIvbWg3NVF1dlF2eXQzMUhkUXFYMjluc1FOd1Q3MndNT3lEL0NUbkNQaTlLYWQrRW51dURSRGhzYjRKYnYrUGRlTjhkREQyL21udVZWTGxsVDltcEM2VDZMR3ZLY09ITHAzTVlFVDl6c3UrSjZCdUdZSDM3VHYzNVAzVFhWVCtUOWRYcDc5Y2VaRmx2UHQ4UXRRS2E3VWMrVExXd3BVREp4RFpMZ3k3bk1LNVNKK3lzUDJMMTcxT3dNOTY5WHZieVg0d1IvalNybE1TOC85cSs2dHRwMTV0MzhyZGNFY2UvRC9sTy8yeS9nbHlDT2lMbFRZY0hja2ZqcHZKN2RlSko1YWRMWmx6Ynl4SDk4WHRhN2hEZTQvajg3OVdlZUxYdkpsMng4ZTNZaWpsbkxSeDYycHNHTWFudUxsZ0tzZXZGT3RZSnVVQ3o1K2ZzZjF0ME9RODZ3NC9uajZUL3kxbHhyNzRFNEo3SnozNTM4ZlVCSjcxYm1QbSt5c2dkL1p2TWszdmEyQjMvSFJYNjVPcUlkZnJjWjNOL2RjZ0YzQnQwTGpldmJEajgzYUJ6bnJOMEIrNzlkMFVYbllLblY3U3F2ZnBYbnY4WFNscFVZVy9JenNEd3A3MlIzL3VJOFRoUzl1ZzExVTAvWEZOelNFenlnNXF1bWdhc1RWSGVhVkliQWxlb1gwcVVOTFhicnRycUtLandrb2pCNzYzcFlmeHhhc2NGT2xidlk2OUpaNDdtdnpXemN0Z3M1dDltd2YwQXIvYjBOcXFncGZPTStIN3htVGZ6TnhiK3JuV21qejR2M1F4Z1A5UjZhSG5xU2NNNmJYRGVKWURkbWJOMDl3ZHdjVjFMYjcycExjazNwNVpvNUp6Ymtjc2lGL3U4QjV6bXJ0Y3UvWEh5czZxelRQRzM3b1dOcFZlYWE2MnF0a0tRK1ZxMktoekRHOFV4aWYrbkRCTlhXUkIvajd0Sm1IdlAxV2JFRDRGZXlLaCsvb09hNC8vdFJhTkU2NllnZnZZamJOSE5kYzRreE5LRmM1N3lqODRSVzRNUExGUGVTMVUrZjJhRjBIUFdxRTA5cjFuYmU3cTM0RnZ2b214VjVqUW8zUXVkUHc3LzAzL2FlSitkZzNYd3ZlRDA5bWRWVjlmOVV1M1FkOVpHakpyM1hTTDZTZmJFWERPbUwvbW1ObTRLVmNRa2RlenQ1eUFyNjJma0RhNUpPd28zTmNHQjNUOFNKKzlEYTllTjhBdSt5bld6cGVqT0o4K05qcndMUDArTk1kVlBuYTk0VW5uTEgzRy96b08zWWtGNTRkaXkyeDMxV2xiWlpuNm1uMEZIZGVMdlY4QTMvK2JzWWk1M3JFTmM3NGRYYVZVdGhMOXZEUDFIRXk3K3FiM0xNZE84Rzc3d0k1aXljL1RMOHp4dmRiZjQvNzhxZFR1ODRkb1AzRzQ5NnNIbzBlczkvaFo2K1BJdGVhK21uKzlhcllTMDVNTkxqelF2eDBsd3lxMW1qRWJ5ZjFzbGFCUm5VYklsKzlXSGJzMjZuWW1WMnVaZG1Ibm5kSWdPL2NHdkNORldiMGVMQVV2ZEhub1ZlYkI0N0dIaXJyOUdiMVhqc28xN05uYlM2WG1kKzc3bE43ODM2aDc0TjFJN2J6SG1adm9aVjNGcUFIY3dwU2xmS2psN3ZSK2Urcm5yd1AvLzRwMlBVTzc3ZWpYNHpLdmlQWVJVMk8zbS9iLzhCRCtYcXRxTEhwaDd2eW56djRwQmQrNDNjVlBsdkhGZjVwOFpTRkk5ZGg1OUx2ZWZFZk9jV2VJelJqd1Z2WWgyeDRQVGIrTTNaZnRRK25mREVFTytvUEdaMGE5OEt1TTBuVEpaWDdjWjlZczJaWmtrNjhxNDl5TFZjaTR3cUxPbmx5eVozcmc1QkxwcHIyMUFlOWluZGdnN3M1RTd1b0J4dTIzVytBWCtyZU9lZVZQb2tmZ3ZPT1A0NTFISkpZYlNnVXVzT0tIbVBDbEpzMzVzT2ZkcHhWWjl0QTRpT2N6NXhoWDNYODVSMDhVSHhoUStMamJQZmZuZDhUUFdXMXVQUjNQSWozbm1YWm5rTGQ0WHQrVE0zWE9nLyt1dzdFTG96cTFOaERYZXUyY2tqT3JzNnFSdS9rdTd2aHYvTEVpMk9KczhFWDdscDhLOWh0S1ByMnUyTy9URnVKZmZ1R3hHbFB3MmZtYjFEL2VpM2VYVDl3U1R1c0lPTUxiM3k4UXNyNitPY0x0RjFQalIxVnJtbWV4WGR4anp2Y3JPM0Zvdm13bTZ1eHNFTXE3STkzRmp2eHFnNzA5TXluZ2QyNjlYSlhGU29QdU5FSlAyZHJjNlcvVittN20rcDFhL0NxajVOZGxOWFdlVlFRY3VqOVo0YVg2Y3E3L0ZHckc1eXBocitidGo4S3o3NUx2UEhzaGVaVStJcjlTb0VGSDlMa3g5OVlubFZYV3I5QUxtQVorTWI3SUg1VTVyazNIaTN2Z1o2OUg3WXlJM0xRWTlHVGpueGgzZXZrRDUwZTd1Mm02cDM0R05Xd3VLdjZ2S0JRNllYWG5kWG9Qb3Q2dTVkeVVVdC90L1lwaHoxYnNSeVpwbG5SdXlTNU9MVHJKK1NNUzcwRHdwMndaenp3dS8vSkM5eVgxblZKZm04RTgrcDk0TmZiQi9INE5TNTkyaHFESGFucjV4bkZHMkFQT0Ryb1kvMUJ2SitOOGpyeGZoTnhaTnl6M3FnY1hkZEZYVXVWWTh0NC9ENFA3UjdzRVQ4SVAzMk5IMllxeHJsNFpmN1FpQ0xZanc3TTNObmlocDZyOTdyNFExMCs0djg0SWwzeFBiMko4MVQ0Zm9rbHk0REROVndLanVTZFkzektNMjh6SmxhMUo3L1BOWnM0SGQ4WFZtLzVITG4vRnBjRExZYlhKbjVndlZ1VEQ4SHZQc3R5NEhsWWRHSlZhV2Y0ODB6bzkyZHZlemY4Sy9ZQnUvNzBtREtaKy9hc3VyYnpCYkRuUzFZbVltMTc1TEhmUXUrTjhjSnUwbmZGa1dPaWIrdTllWHJWTEhueGo1ZXZXRkFoM3FtVjdsRDI3blQwaFVzcXZobnhIYm4yMXFPRFVzWVFYNngycjA3dHh1RnZaR0NYRFpZZm5FZmxleStjbFJUL0tabXZIMjVaRmp1UzhUbGYzcjZQWHFoejNqV1BTcTNGcjByNHZyUk5pWnI4dC95aXJJZDVuOTR5WGNEWDVjVGQvMW4wVTFSYUIvakg3MXNXN01adlFNaSt6OTRsaVNmNVljS3BveWYvb0FmMVhyQzRKbnFFSkxrbStNWTJJVjdHbFp2WlIrTlgyalZ1ZDVyMXlDVVdXVVpWU0V3OGxKZXYzamRMejMzdlo4RGFTNk80eDRZMmU1NGhHbi8xUTc1VnZGVUMvOTRWdmx6NVVSTzd2ZDRsWWk0RklCZFovOGdweVhEc29ROVhPRHkyRFBiZlUyWnQzL2w4QWZmbkVqTXF2TUorYk9sVmg5K2VNOUZIWnd6ZWVZNzc3WWl5TjViTndrNXJaOE42ZjFMakwzQkxsbzlEdjZDUHlEZm8xOTd2NkJVdTUvWll1UWo3czV6dlU3ZXpjVjladWlRKzkxYjhnZ3o5bWppaitQdXB0dTZUM3hYNC80RytFM2FPeFI0MFhjdSs1N2NTTS9ibnRzcmVRNGlyWmluOVoxNTM1TjJ0VDdRdTVJVzlZZTQ3UlJ0TnhCOVppeGtINTlRaGp0K1JyOThTMzhFTzRIZjM4Szh2a2JkUEc1em9mVWY4b0UxSjRmTm0ybFFYdFdkT2pReFZwK0ludEdteDNySDRHNzdUOVBXQjRSUFJEeTJhdTJVNy9zYnJiUmtTNDhBN2xkSDdlbmhOUnA3OTNLbGxnWDBFYWw1UzRMbmZQT3c2aWppNDVFdkN1NXU1UjE1MlQwMWNoRGUrNjVvbEk0N0FqUG41TXk0aG5sN0dpdGsrVitWYzdYckdZZlVhN0orWDlzejU0a1Z2M3NQT3ZQM3c3RnppNDUxOEVIc0R1Y1RhNDdiNFNONUhsSzNmNmRkVDNwMUdsbTJ6dzRlNEdSOEtaYmthd1h1TFIvc3EzdWlEZnQvejNMM1BTYkV2VERVMWNPMFgvRE1GbHo0M0t4NDl3NlA0dm9XRDhITXp0MkViajZHTDJXZTVISDYvNW0vSDVHL3lUZ2gyVnRkTzVBeS9lY3RkblJ4WTY4ZitsTWpicW4xcGw1L2ZsM2JabnZqWmFlSVk5VjMrZHhIOG1tcFpvWE1qOXZXcHFwRVgxL0RPS2MrMXQxVis4RTR5Sk8vdkxyTTRuenI5ZnBybitrWGl3dTZwK2ZwTVFmVFJSNzdQWDRqZGRLRDd6ZFVPdkpNK3V0ZXovWGI4dWRYTjBXeGlKSExTMmVlZWoybjVtamhweDhlc09jNjk1MlJBM3RZaDZIT0xWWGhiOEFENjQzTXg1ZmJPSU43Y0NjL2dGUjY4bDVqMUt2djZydHo3dmM5dnZuOEgrOVVxZHhhUEtsb1RQNkVibndkMjUveDNyMzkrbC9kVTNqSE55Wk4wQU84R24xeE9VUzByZnMxL0RkbFdlY1p4Ti9VdWRaK0RkOUJYdlBBdmtuVWJjZy9ia2VjVkJ6Ymh2VldmY2I5TDRNZWtZUEdMdGZZUUY2OUZvdFpQMjJKZjIvSDQzeTIrV2ZCWFdMMzZyVy80YVF1dE91TmpPL1FPM1N0ZnFSekdlK1VoMXJsNW43KzNLTjhVdTErMngyNnVhRXhZNElJOXZIZjNTWnY4Ty9wM3dnbjdkK28xeUM5ejZaSTZLbm5qWHNSdjdoWkFkT2NtWFhyMkh6Qm9rTVFUbGpMK2d3WUVEQ2dna2JxYkVMdTlWLzhlT255NFJISXZZSytyS3hRZ1J6TEwrUGVSTDByYS8ycHMvN2VMVXVVVHhEMG1aSlRpZVlIcVlYUHBQWGwzaitPRFB2Y3ZWK1pMZzAzakdpZHROS3VuNDhvZER5Wm1TbnM5c28zejFST2ZwVXpaTFNHVHBGeSsrRVYvcE96SGtqNGRwUHl0Q2JaZFVpZFQzd3I1cEY2ZmszNC9wZTZJTEdPOXBINmV6T0o5VGRuanRzdC9FL0E5S1AvTk1MN0gyLy9uZTZiT3A1dzlGYWp6WFhRNWpoYjdmNFRNc3Y5SHZ2MFhMTG5zMzlRM3ZvMmZ4MC9YOVJMcGJ3ZjlyYnNaNzZvVHV2NTRzejlkWUx3NURtZWREMlZTMlIxdVlWL1QxaUU1Y2ZEd3NLTUdTRXgzdFpLVU9YYjg3TmgvUzZFbTJ1TkhHN011WW85aTM4Z2VUNXFvMWZZU0Z0cnpVRW50SzhFckFudkVjeS84dEN0MVgvbTlPWE5ldVZWTVRpRXV2anBBTlZOV2RlemZiY25GQVo0OTdMc0pXaFE3TkZmU0hpNWUwbHpvbEYvd1dacmhycHJHWGxsK0VFdHJuTGRRT1JtUnJqSEhJWVVQQy92NERMeVEvNUx5dHlPamxaajdpSmJzLzBsY2RSbU96TVp2eVRrYVJtbnJiaS9pUTVCOUhJd1FxaDMxc0wwd1pzcjJFWGpxSnIzc1U1YXcrcjQwbmRLZUIrdElnMUtQeDQvMmorUVJlVmIvaXNtd1BTVTlDUEQ5WnAybjA3K1dwSVRFTXY3TFJqOEdLSEZmYkI4KzF3RDczTm52ZkF0QXM2aFUvMDNMalZZdzJMWURXY1pvd0U1QUlTUHh0TGNqWUNJNHRVcHVCd3pITnJtdTloRVRLc3IrcjlSSkN1Z1FsV3Z3WVF4RlBXTXM1bnJJUjJab3BxUWY0eit6SEtUUVBpWmpyUkNFNjNMeXR5eUpRRmRLeXNmRmppNENrMlRLYjlsRjRBQUZOS3I1YlpjL3hlTytmZXdDS1FPYVJydlNxL3lXUnVjSXhHVmRVT1RaeTNycGxvMFI0dWJ0anpTM0JnYkIrTS9iRGlmcHpLaHZyb3ZVTnBEYlJHZjUzVmgxRXdZRzNHVkdBaDlqYk5LZi9FWkFRVDEzUk5iVWRiYlhFNGdhdnh1cithOFBHYUdncGZ3cStjYnFHYXR0ak40QWgvbXYvQ2N3Tk9BdGN6UjZOZHN6MWwzK2NyWFhkN2ZQN0YvdkFrM3B3MWczd2hUWjJ6UG1JTC81YmIwQ25MZ0hTd0g1UVRhZE5DQWRHWTBZSUpVOEE5VFNqZEdZUVFNQTlnZHBCQ1dhL0dqTXgvaVdmNlVBNXVqMitVcHpSaG16Q1dsVVJpVlFNdW9ZY0RGeFQ0Wmhkc2FqYnZ0Z1FKYm9xM1JJdERRQnRYUW0veG9kbVJVVGtZZTBLUUVvVElEWTBXTnpDQTFjdEJqTGFReEhCbUtVd2ZyUG5qYTN2MHpNSEpJTTFDaG5wSTNOWk1CSStqTVdUVnFUbEd3R0UzTC9rTUNzLzcrQU1uNHp3V1J1SStQZmhHQXcrcE1aR2dqbU56NlUyYnoya2Q5TTFQMVhSMW95NlRWMnhmWWFNaWRqREFiTWlPT3BrY1JZSG1Pa2tyTFY1ZzBGL3JGczJmOG8yK3NDeWpaNnMrcFRDN3N1YkVldGtRNFcyOHZNeXBhVDM5NXVWVGI4M2xqeERXTDdzRm5acW9SYmJLKzNxcUhCU1pVMU9KMnk3VTJuWExhblY5WUNmL0MxZ2IrUTZ0NlcrLzYzTExZN1BzcnlQSU9hRkpCTTJmcWxWMC9Rd2RwNEoyakRsNndOdTdzVXhPcTM1dnVqbkVxbXNFUVdMS3hzdkpHMkRhR3RNOGt0dHJ5UkZodHZWcTJ6UFpYdGpZK3k0Wi9jMXRSRjJWNHh6dC9PYWlUeFJteDl2U3pXby9SL250OTMwVi9zVnZVRWZic3RCMjdoVG0xWE5nZmFlYlZWV1ovemQzUUJGWU9QTzZlUTVCYnJ2UXpLZWp2R1lpM2phckZoTDJuRGQzMU1TOW9udGt3c2R2T1o4VDFqZThlY1gvaW81UGd4c0tXbGZ1RStGc3ZuM2hhbkU0emhvWTk2eGIya1R4M21YeFgrTVJkdklmQ0Rab3Z6VVZiaWM5cUlsV25iem5nOElpMFRSakgzL3VtVjdhT1B1ai9nbGlXUXVNYVducmNzMXJzeEZodTJCemJpeDlzaU15Z2IvaUJzRHhrWGN1a1UrTVIzcWVldWJNVG10V1Z5NWg3TU9QOFdVRlpzSld6UDZBTWZPclpud0tIYUs0c1ZlM3dic2Q1Y3NQKzNmU2lnb3JlbFVTN2hxWlhOeHZqeG1XZDc3cU1lNWdXMjRJRzFCR1d4ZjdMeFpzK0dIeHBiZkFibE1pbVpzdUlUMjRaK3lZb05zZzI1bU5PWmxCWWIxTnY2bVBFZ1Y3VVJJOElXVGIvRTlyUzVSRm8rVkNOdkRYaVFPdEppdmNNOGJnSC9NWnZSRXpEbjNsNFdXelI5LytTZE9EcFlLKzhNYk5nZXh1QlgyVmJybFNYMWFlYkFtM1liZG1vMmZHN1lpSjl0bThLNDRwbFBWMng2cTN0YVhMRVpkNm5zYmJIbS82T3M2S21keXRFditrb2JiMzF0VWJTTlROSG1BSDdrK0tPeTRYZkw5aFFZNGNmUWhnMnl6VVk3MktLNkZHZnRyekt1UzN3T2dpUHR2WlJMdnRRVzZ5aGdqdzdCUmtBT1d4L0dpbjJlTFJ2ajhaSjFvQjNrQjFac1V1OTNaeTc0Z3JjTkFxK2ZzRDRwNk84YmJUZUM2SjV3WmIyb2t6M1NZbm5BSHFuNXloSUNuMjFMTGpqcm8yS1IxVnBqTWl0TFhHK0xiVHJ0Vkg5bHNWa3BONUY1eHJHT3lCYXRlWmdiUGlCZi9mSlJQdGptMmZDN1ppTTJ0ZzIvNUxZcHR5eVdpQXpLZVFYcjVrTS9QUmtuOWoyMkp6N0s2Y0EyWlNVR3ZoWC92N1pXeEJZcWh4enVISE4vbjEvWnZqSCt0clRORzM5YkgzQU9XM2ZyRWVaK25BOStvWnpLNFJNU2YwaTJHb3lIaTU2Vk4reTJiT3h2Yk1Oc1VjenRDSHZtSHYzZ3U4eUNuWlB0WFFIbGtnUjRZOU5rWFUrOVFwUzlERHlKN1diakhtWjdUUG9EdjMra0x2WUp0a0ZlRnN1bjNoYnJiL0wzMHRaN2NPWVlmYjhGUDh1d2o1R1oyQlE0Z3k0Z3RoUHA0ZWxVeWhPMGt3UzQvYUZPS0IvMDhiYVhmRi94VVM2bFBaV1REZmlqRzdMaHQ4S1dCeGtyOTNsclh0STVxVE9VdHJHbnRtVWsvWlk2enhuTFlNb2pDN05sWWF5NXlmOElucDVncnVWb0l3QTQ0bC9ZK3A2MWlBTzMwZlZaODdJT3ZKbTM4WjdVWm1XODJIbmFpdmF4V091QkErbkpIMGI5UkpFV2x4QVBaY1cyTGZZNlpmN1NGL2RjR3o1U2JDOEtLQXR2MzJ6dHZOaFRhVldQMGttVkMzZDkyMjBaRDcrVjVMZUI5UHVJUHBGSjJEQm90MTZDQnR6T3JLd2QrTnViTWFMN3RQMEJoc1dnTWRIZ0dqYllQdWpwTFIvQm4ybmdUM3JLK0xxeTEvZ05lKytSVjZCOXlPbHRrUVZVWnVSc05tUWZ0Z0xZMlEwQ3Q1RlQyWkR4MkNLQkJiNk5iRDlvVjdFWDRBT3M1eGdUOXJuV3Q3U1RPcDJ5eFBDTmYxbGJabUJWZ2pxNVdKdWJsUGtpNjhxYVl3TnJJMzZlRmQ5ejFqRG9KYlpwVnU3RjFwcjhoaDJvbGRnc3RyT3NzMnVreGFrNCtIYVh0a1lBcjhmVW13cXVmOHl2UXNKbzZ4TmoyTTlhdVZOM1BQUGhMWTZWK0FuMys1TkcvMjdGOTV6TDJ4MnFhVFBnOXA1eGorUU1xSmpCWXVNTnB2VVZPTTJiUDAvaVM5dHVNZDZkMU1rRVBINnlGNDZrc3RoNGoydmJRUjUydnNsNDQyODl1RjFaWGdEckFZeWpFdlRFRzFwSTdIYmJYOW9aVGJtY2ZEK2xuWi9zUTN6Z3ZlcU1QWGdCOWxsbXlpUmpQL2U0WlhIcHlGZ3R3S3dEYXpxQWVRMU1yeVlNWWo2OGxiTDlaaTVwZ0JQdkJteWpOaXVuODk3c2VmSzZzOFlqRTFsc3lHZXR1WURuTGNid2tIbWQ0M2NmOEtmSk5wV3hQblJwSEdVZjBUL3ZmbXo0RUxFTjNhd3NIMWpudTVtVlN6SE9wc0JiRmkvZVN0bXd3M1E1RFIxZTY2aXlZaU5teTh5Y0p6QUczalhhM3RKR0ZHMGQ5YlRZUHJEdkUvUGJkOXBFUjJ3Tlo1M3dxV1o3eWJsMzBWSGRMNTJNK3l6MXFyTG5ud0hiYTZ6SEczQ2xHN0M0eHg2ckIwM0FGNEFOK1pJdEZ6aEhQRWhiT0czeEhzckdXMjZYZXRBNlloVlkwOUlHUHNHczJjbEhKbXN0bXhiWWtQN3NvekpnODJJdHhlOW5PZU1HQXIrS3FTeE9nNWtMTWQ1dFZjTXQxcktVUXkvUXB5WjQrNWoxU0JscHlaNmNQbTJNSlpveStJaTNFVi9jU2d6U0NXT1NxVDYxS1plVlB2QUpaaHVWVGswWVNkdHJnRW1zNENXZkErREhoYTBxT2w5aDVjYTdiTnRuNEdHbGpmM2c0c3NDS2tzajRCVkp1UmRibGNXV1FhWEhaNHF0WkIrTERSdEtXekpYaTBzWnptMzB1clpVckNOMm90WWYxTDFQK2EvZ3hEdldEZDJ0WmZVSml4ZHZuM3I0SmxYUnlNcWorckczOG0yREJvRWorSXEzOWdVdkxNRDlBdlh1UWhQUWo5cGlvWmZGVXl2cmZlRDNpblo2d0orMG91MmtsTHZIMzY4cGkveHh3bWptNDBuZU8vN2V5dmp4YVdjYkFyNzZDdzlGSDI5WUoyZCtMODZZaWQ5bGZadFp0V25PM3FnTTM1V04vS20zTE43RXE3ZUVRME93RjdNNU1vL1N3R29rYldBdmJ5TUdxQzBEZVRNNFIxNkRWMStCeTVjQ0toTzJvN1l6UGlvbWYySGxjamlWNVZWYjlzY24ra1FuWXowRVRIY3dKK3ducmVnTU1xYWhiRjkrajAxaHNRMVBCTC9DbklhbFU1blEyN2hVcFJ4K0cyMHhqUE1EODRyZ0xSeDZjWmQ2N0FIZTVjUWlnN1RWNFBjbzV1ZlBtUkJMR2E5SVN3ZytrMjBIR0V1SlBoYVhjWjRXcTYrVGNucVZ3bUlwRFcwYkI0MGVKN2pEdVh5QmZjeTdYQnMrUG15RGFiTXUzOWpiMjVDMVdmRzdPUFFvK0lGL0lodHZzMjNZQlZzSkltSjVDVDJmQUU0WEFXYWZCSy9oR2JDcHM3a0RoNDNDbXptcnV6Y1l6MlRLdkpJOVVJQnpISmhHa1A0T25lNUZmaTlpVUY2RmZwZGd6cnd2c1ExbmI3NWczc0hibGRXRE1lTEQzdVZ6ZXBXQk4ySzJFZW1VODNMb0JuWTF0b0xzOXhIcy9WNnM5MjhMdE41SFJSWXFySjZVVHFzczk1bjdML0F6Nng5d2tYUnE2bWFCSGx4M1ZkYk1zdGZBSFdLZjI0alBZTTFOTzNjbzg0d1ArbmNiYnh1c0o2RkZ3Mmg3RVhQNHd2elJoMW0vMDhaRnh2MFIrQk9md2ZhWnY5MEV4eGdMOGVSc1lyUHhJSU95UkFHVFcvQm5kL2s5akhuZzQ5dUduMEViUGtPY1N2RjNHUGlESHk4Yk1ub2JjbVZybW5UNFhQaEpHK3o3TS9BWitjSEZHUHhWbDJNTjhGTm1HOG80M3JOSGNnaFBTUDg3YU9zMHNMRXhycG5DNy9OdHphQ2NqbmxhUmw1ampRTEF4d2ptOG9CN3dFUDZDb0ZtbDRJUFdFMCtmcU5jcnJzcDZ4dCtKMWFkTlNMR2t2NEQ5YkdUdGg0R0Y5Q3JXTWVBRDlkZFZDcmVwTmxHazllR3NkUitaWm5wS05JaTduS0pjQWF1VGxsQ0xGNzZIalpCblZIZDdha0dhcjdLcWdyWkJTVU9TTHlxMlc5QXhmUUZPUWVYYVJ5NHFnNy9YY1Rsdm9WSENvUXhTcUhDNDc4ZFdxeFQzaTZOUWdxcEJUYm1MUkEvSy9hZWNLQ3JDdXRyTjdZQzNNSXFVNjRmSlFodGJ4ZUFpYUFHcXpZdE5wR1VLYk15eEV3ZDlFMnVsTDFIdVduV0pKQTM3N2p0dDFTcDFVUWhkdGM5NTJCR21WUkJ5aGgzT1hCTTMrdU1teWlPMC9WZFVXNzh5ZWt0SGYrS09BV1BjZmI4RXRSQmpVOVBPTXZWOThNTS9KcFQzdzJKZUdXWHJja29qWHRvT21vWU1nUXBJVUtPTlBZYnAzRlB4U08xcXM5M0xuNlJkbVYxRE1HZmVjWG5MUkI5eTd5TmRjcEIyaENQVk9ZZUxlSVZBemFPaU1LNHdjZS80czdMUS9wc1ZCUjVDT3lqL1hKTHFDVjluVGVFR1poYTJDVlF2RDFDbkdsY2loUFRuRFBOQytCRW1pZUFsZ25LUjhBcmNyZGl5czhhU3hjVExUSmNBWWh4a1RZWHhCQU9sUDN2T2k4VFQyeWZsa3lGQUlIL2lSVGtWK25GR2JtbVNNRGMrRjAraGpqU1FEYVJiRlMwaXdzdzVmeFBXR0RLMnRJcHY1alhqQVg5aXlGRWs1Lzlma2xXT3dQNGhvUklCQTY0NExUTEFBMjVrY2hNQ0pKcmwvV1pra0lCcFRFbitWM216dk5pZThPeWFOSk8wWCtpaGFnM2RETEFHSklwbWpNRmFVYUR4RGdFWUc1MndCbFRSa3VqSjI1SUdnUkREQUdRSWNJei9zdHZINUpnREs5MDdVSks2ZHlIUlVwQ3QyL3AxdUtLYUVrU00wa1pzRWlxa1YyQUlLdHNERUc2Tldid1Q5ekJVWlZBNkNPZGV6Q00xTG9HQnVGMEpQQTJrY3lRVXYrclk4Z3JwVzJSOFJIb1Vxc2NrRDdOZU0rWVZsbFNhSEdKaUljTXdCaHlQM1ByRy9JMjQyLzVYVmJka01hYThqZVpGYTRQLzVQaitwQmp5ZzhGcDAwSm92eUd5c3NPVEk1UmUxdEdLeWFHaUtUVi9FdGFkRk4rZXo4d3lnNDhQZEpDTm1sUzZBWXhiLzhUT3ByREU3UXhWMWVRWDlaU0dqVGtVNFljVGZhcDBkby8xTVRPZTlsSHVwbU14WXlIZmJNWm9tQlREUGlQNHZ3VDZ4cmdsdTBoSlZML0ovc1NIWUtCcEVTWDBuSXZrL0tLWE0wVVBqdlp4eW8wMWxRWUdPT1ZaZkRiK29uUmNNMDBvV0lTYm9HWkNTdjVscjNoOForNlFNcEpqckZqQkZrTklac3hkRzl3dzJqRkZMNlpZT041Z3ZJTCtpeW9DaVEyU3dLWHh3YTVORmZJSUowbVVST1NaMUFLQXc5a2pXV3l4aGorNGJhalBWY29tY2k1RFl3d3B1aGlwMkl5U2xNeTdJRno4VGdaZzZoS0pJRVp2cWtwK04vbE1EYXVJZHlWV1FoNWRyWHJPMFIzSUQwSVZzdklqSTFwNkJGTXFmbS94UlJFZ0FSdC9TTDlRaWIyU3dLM21QODBCNFlnMFJSRkd2MmFMWmpDWlFQV3BxRFMrQmpMYWtxNFpYYUdBTlZBT2ptc1RObTFVZDRRbVBvZC9Nb0FpRDlveWxQL2JVTkRaRzRPUVJvV0FCaTRiUkQ5ZjNKWlUxSXI1QmtxTk9PYlVGZ0QvWTExTlk1azQxZ1RXaUI2SDFNd0szTXgxc25FUDJPZUFsL1prMFpKQXlNRTF3eHM4L3Nnbld5em1LTDJmeFFyNFVSTWpaUkJvWTNmemFQV2dJY3B5alVwNFA4WGZtT0lxZ1hVcHE3RHdBSlRzMk1TQkVPOGIrSzZTVmtFRTR3dFpoL3grdStNT0tVVU1mNHpLTDhoQi9jN0l6K3VaRHJHTVlzbDAzKzhoeHcyMHJHQVV0RE5PTGhOOVlkc1VmTzROTGFnOFRjeXFmK1VBckpseldVMzVkWC85QlN1K3BReEplWUpKZTZHUE41bzArL2RENzFkNGlYUnpWRGdtTDhhTlkxdEs3K1lPZ1VqMXlBcEJ1Z050REJPUEZPbDg2L3N2OFV4MUI5K3RwOTBsc2hPcG41Smt0ZGVKcEV4U1kwcGdUZEdZUnpmeHJiL054K3BZK2hyekNVMHljYy9kREVXMkMvMkY5ME1GTUpxVWorVE1UWG9oK2lpVExDWWUxVTZGTjJpMFlIUmxFR01SY05wcEEwTSs2ZlgrcWNuTTdnTHYramZBbUJHOEVNU3VLUDl4elFZbTFEK0Vqcm5GL1NIQXZkWUM2RTE1aDZRZG1TbkdhTXcrcERqNVorbTdKOHF4RGdZREVwbWpEZ2hrMkpRRGdONG91azBTcGlnTmxnU2FWTlExZXo1MytMOVU5dVk1TU1nR01Zb3pGYitJWlpaeXRReFFoai8vQlcxcHRHWlRPbmZjSXhobXdzaUtVUDNaaHdCL3hyOWR3WUN6eHZqTHlnM1I2R0p3TTRxZitCVDF0aXVCdkFOekRRSmlURlpnenlZeDQyNVVLSzROWmdYdjgyQk5JUnh2bXdoQXlyR25qZUxHeHZZWU1HTitScW4yeithdzJqZVNDTkV5RTJvNHpJSnRFRXVUU3FRVUt0bEhLeW1OUWRiOHVBRW1vRjgrSjJTaEYzSFord0FjeC9MSVAvcHRQNzFZK3JGakYwSXJNWlBwQUZNY1A2cDFjeDFNUmdLQWJmZllTbGtiTXB6a3VSSlZrTHRxVG1kZitUQjVPcU5jOWxVSFpwTGFETEEvN1RrQnJ6TUxXNjBCSGUyZnhLZFlYcGd6dHRFSjRQeitYY1FtQXBodzdiQlJGYVQ3cGhZWk9TWld5V2hldFdnQzBZWnYvMlROV3pQU0dMUFZ2d24vVnNsazFvWlBabjZRSlBDSmx3N0U0ZU5MV2NlS2dsdFF2N1J5OFNxTHFZdXpsaUlWZVBTaVJCYzhRaGRvVWhSS0F1VkE3Y3luSW9waEVtcXFad2tmRGNZcWRUcEJuaFlFU00rUHRBRzlaRUlueG5ZMXloNUZJOGs3ZmxTSHlXVHdpbWF2VDBwOThDZkd6S2dRR0dqTGdtVStPNG10MDYrN1NZWmZCL21kWjdaTmcvYjdHV2t2TFJydHJPWXdtbnhjbmtNVDBZRXdWRUk4VlVJWHZGSDhQZUxDVXAxRXBpUmg0Sks4WWpKWG44Y1l4UkxHakZwa0RiYnQ2UThaWWZJZnRaOUlSaFZHUmtqRGx2LzYwdSs1VGVFOWNxck4zM1Q0Uk5lTnVGMDBqNWVsSUVLd2JKOUh0S3U1RjNBdzRGZnYzL3prRHl6VFVrTFhLb1JaUUZIMnYvOTNSY3ZmeGJNaXVZdytLUlRqWEhKZUxZTTR4RUxuajViSUtUb2dKQUNnWlU2d0lENjZ2Vkl6Vmg2U1RPa1MxUC9JaFpZTEpGQ09LK084Mkx4T2FpQ2drYWx4NHR0Y3lKQUh1T1ZaUlNlTTZSOW1WTUEzeWhQRkVFei9vTVpvTExQWFdEVkhLRUpBV0grRy9zQmpTZUQ5Rmh1anlWNkxjWlhYdDN4cWd3ZVlXU3Rudkl4OFVEbWRvU1hucmZ3VXY2ZU1YZ3k5bEhVUXpGbWh5c0tHdnRZcStreEM1N0o5MSs4WDc0Y2pTWGpJcUl1ME83U1Jrck5HbTZNRTRHcWZYekJSTTdmd3dkSGd2YS9VOE12b1V4RGNtUzBLM001RGs2RTRFa2NwNW4yK2E0RlBqajJ0ODlWY0U1d1ErcGl6S2RhM3JJb2hPb0t4YmVhcXVmWlZYK2JNSkN5T0thMXcxVGtOekxXbENXVUNpTEtheEZ3aXFXMzV3bCttREJid0R3NjR6VlY4TS9FRVp5S1FkbU0vU1hsZXhFMWxZQ0M5dkg4WWJ3UHUySjFEaTdpRE16ZVp4N1dPYUQ1di8xcDRzMHhQZVp3eEY0eXpvYXNyNnl0dERrVFFIU2pYOWtQTW5kcEI3UzAvL2FBYUNFWWJ2N1hqc3hGMXR0Y0U4bm5BWTY5ck9DcDFKVjJCZWVLYWpqamNNQytkK1UzMlFjWUNhZ2lSRDJRdllCQTJpNXZFempYQjFudmFwaWRBbGQrTUJlUk5nbGRxUVZPMXREdFpDWmlXMk1XcHlKaXBoSjhWckhIWlkwRVprMHdkZnZPL1A5Z29sY1JCRTNDWUM3VHpoK2l1TmJUNHhRY2tubWF0RUxtdFlBeEhlRXpoL1U1VlozMjlUemYwazVqRml1Y2pEVFFnUmc5dmd5T3h2aUZwcVNuN1h4NnJpMzBubGhCbmRmMEwzOUxuMHVJL2k3NGhtRGNQazZCa1FtL3FnQmU4RWJxMVFkM2h3RjhnYmxKWDI5VklESU9iTWM5UGppdnRPY1B3c3V3d051a29ZMVlCSm1YNE1WRm5YOE5EOUVDUDJtM1AwaTFsSDFlaVUzZml6MGlheWJ6QTgzdHNPY3htY0tnUVNWaW5ySjNCRDZ5THdRWDVSc250SGJZUzN0UzdqemVkVXlhTEdWcjUzWlFINkU5V2NHak05QytPbnJmK3pUbGxSWmo3Y0w1c1Fxa3NiSStialJXQXk4dUZmZ0kzcHJuUThoZ1BNeXdENlZkR1pQQUpoaWF3QU1IZTFyR1l1NVhFejVTVDlhdm1ENVhnaGpYVUwwWEJhL3NaNGYrVzlaYnloL1hZeXVHQmFPMFkvWXZPQzFybGFFMGVBNkFCa0wwWkoya2phTjYvNkRJVk1NWjRCeDRwQ1RNZFh4YncweFE2dnV6RDBONFZTSTB4Tng3c2hibU9ycjVPS2hwMEQrWm4vUWpjN3dKdlNNQWhzSllRazNtQlRqQmx4VEtYQlZQdWRiZ3oyQzlsM0t6RDRWK21lZEVIUHVqQXZSQzZLdEpJMlh0WmF5eWZtYjdnL1RjNVl5Uk1RN1E1Uk9lM3dJL2t3NUwyNGQ2T0tnSVh2MmVteVhyeDFqWUE2Y3pHV1ZsN05LT09VY1RmbVk3b2V6aFZDRDlidGF4YWtNaUZXaFlQeU1xc2xsSHlyS2Q3ZU4xeEZwWnpuNXBNemQ0a3hzYVhsbnY2OTRyT0djMXJaTzZVcVlMOCs2SS9hdXNpK3c5bkNmWVlUZU0vZ2hjcUpyenlRMWRiQVpBT0JMdE9GNGNBbFNGZGdSUGd6RTFiZ3dPWHREakVwakttTzR6UHNFWGdYVVoxbjhRYXlGemxqNWRLSmVMRGZJUzNzR2ZqaVZDbzdtdWxZS2drZlNQVVpBZHhqTFd3ZURPWk9pVHdFck9XNkgxTWc0Y3VkdHBoNXlic2o3cEtGY1RRTWcrTnZHbE9VUnFKdkNiRDYwNUQrNG41SlBvM2w0dkdoNWdEN0NDemJDUDF6eVRaYXhDWTB3Y01QZlFEL1pld2o1a25WSXppS0pzNXVMUUxtZm81d3g0QXRFRENLNUlXZWxQMWxaZ3RrRFRIbWNpdlhlRmRnZ3NwUStacjdTWHE3VkJGNFFXWElRSGtmV1VQdnlnZVRKWG1Yc0ZZSGFKRytNNVBnSVhnUlBWN0wvdDBHdFJtdllGajJWZGc4Qi9SMml4R0JuTEhBOXBQSzRKUGw2R1B1OWFiT0N3ekZuYUU3b3E1NWVjK1R5VXNyZi9NUjh2QnFGbmVkbEUzakEvSm8rWkNIN1ZoYjI5WUlNeFZuUC95ejZXOCtoK29GTHRXSmZxNEJsT2x2NmpEZkpiQlY3RDl1SHNsTE5JWUhBRG1pcTBWR0M5RU5yRFl5LzdHdC9BTzJvdDZLRzBMK1Z3Sm1rZjAxc084cC9RK1A2MGdXTXplMTRQOW96UU5wa25qNDN0NDBuSVd3b3NMMENvemJHYWU2MGNMK2VrbnN4ZHZnWFhwTDFhZU5vdUFYN0llU0I1V1VIQUlNNENRZkJSR281Q3o0V09Yd2J2VFg3WENWaGQ1VE9OOFFqdkk3aUdVejA3RHR3QUowMGFpSEdiZlQrYVBKSHdLRkpHNEM3Zkc0RDFFSERYUEora3pFdWk4d3Z2SUhDS3BvKzE3Q2UyckgzT0puL2JIcHI2aVVVMDZiejBENnRrN3ljM3J5WExBNFBhZUJPUTlaYnlnajkybmdjK2RTYWJ2WVVlMzFGZWdPemxRNkJYKysvRG1IOGx6dlpEZk13NXlKNlV2b1crU2orQzZ3TFg1elMraWN6UHJOMDd6a3FjbGR2blpKNnAwcS9KdzB2YnhUbXJPN0R1OXhub0Urb2RnUGFZNnpTYnZYS2NLQ0xDeHdwK0QrV2wxbVorRjM3SXhGdHozOHBla3ZYT0JtMlNNMUg2RkJvcFkydkVKcEw5akRMMlA5aElIVi91UUtNVDNNZE1XQXR1ZEdMeEJZZk1NVXVlMURYNzJ3OHNNQlpSL2ZCU0kzWGxkNU9teWUrZGFWdnVEcktuemZsSUdZTEIyZkc3SG5QcnhWeG1zc2R6d0FzSjNVbklGd3JleWQ2WC9rNlU0OFdOeGtYenZCaXVZZElLWUVTeEYzWUpYNkRuSXJSZDlsbzZjTFloZUh6VUxNc1BMWFE2STNEdnd4d3pnTDlWMllBSjUvK09Gd29KNzVNeTduRE9NQm1iOEpKclFMd2N1aStocVRLdTV0d2p6UHVBSDhUTXJHL0NUdkJGNnY0QzExYnh4dzVlWDQ2bmd0U1J0Y29KdkI0eXBscEUyZi9GbU9QWUwzTCtDRDNxeU9STitBamVDSnpOdldPZVA5TFBFK2gwT1QydTF1RFRDczZnemlENVZqYmpWbzN6SldvWS9JYkFWZmFvL1c3SHZuYm16aVJqbGpMbmFNZUVzL3h0M2xlK1Fqc2xYOFlReWh4TDg3bkdtTTB4eUhqa1RpampsTFVYM0pPeWdvZkNjOTBCejgzN1RYUE5Md3Raa1RHVTdJc1hhNDB2TWxacGE3TmVxK1lnZWlhQWNSV2NFVHcyK1JTaDdjbmhmNFJPQ1d5M2NxQUpiT1MzMFF1TWZHbFA5b24wWVo2RjByYWMxZmJ6dkFIZUdEazNURHBveWdvRVBuSzNrcktWNkZmNGVmdjlMUUZjVEI3SXhCSFpMK1lkM01SM3VRY0pQQjR4dGp2Z3F1Q20zTWRrYkNZTmtMTkF5Z2kvSVBYVHd3Y200WjYyRDA4ZEM0Z2U0Z2xnRnVoNzEzbk9RUm1ydENIM0Vha241N2lNMTl5ZmdvOEVJYlRES1FjNjU0SjhVb05QWGVFM1RSNUsrajNNL3V0TzlKeU01UjNVSXhhaW5vYTM0SVhRZGsvMlppOXcxYVJYZ2pleXBvS1gwbllYOXB6UVA0SHg3REtJa2RjNzJNOEZLU1ByS3VOWUFteDc2elVTSE9DeHQzMy95enJLMzBQWWY5VUJyc0JGMnBUNWY0WDJKMk15TTJuY3BCMlMzMDZQVC9haHRDMXpLS041UFJtVHpGMWdLZC83T1h2SDhxa0IzN3VWdlNCNEllWFB3cE42Z0xjZXVsNGF4aGNDb1puQ0JwUDFOdnZLQjh5aktaZVl2WjRWR2JiQVJNWlhsSDNlbi9OeEdHdGt3dHN1eTJCUWVVSDBBZkJkditDSmhKOFJuSXRpSGVWOGwvSEtXU1RyWmQ1WnBKOVF6bkxaSDlMT096d3lteklsbVkvOXJnbnVtZVh2YU40N0o0MC8wM0E4dzVvMjVGeWJDcXhxYXQ2L0puTVVlQXJ0U0hqSEUzeWNETjh5bHc3VE03OVVrLy9SVzV3bzJOdkRhTlpPZDJYc010WmVJUEJWN3N1eG5Nbm0vVUZvZ0xSbDBrenp2bWZpdnZTMW43UEt2S1BhN3cyOFloVWFKbVhrdmlKOU5RQ3g3ckZQQlNkTmVMUUZYamk2c3YvOUVseFB3bDNjRzgvdmNsYkxtRVJ1STN1OU5nQWFvdkZoQlR6ak9rMVA1RDVxUHcvaEZ5b3dBSE5za2lmdEMzemxIQlE2WlBicHlJUk4yY1ZKYU9ZV1h0cmU0TTRwdUN4OXBlVjhXWU9YLzdua0NYOWwwbHRaZjJuM0dISTBHM2N6VXg1Z3dubzV3RFZwa0xRdHVDbmY1cHBJbVZUNjNtK2VGMUpYYUtqc3Y1M2NOV1IvaWR3c1BRU3JORGduN1ltbmEvTU1tTUplTWRjTzQyNzdtRXo2ZUFUY0djRjhFcll0ZlI1bklYcGhTdFFPUE4yTjEwanBRM0JPY0VGd1dXQXMvUi9reGZKN0RlUGQ0Tnh5OXJHc3FjeDlCZlVMc2NsZlFPak5zVWkreUFnRkp2SXQ5TFNlcGtNN3dNbE5uaGFGd1pkS1R6c1Q5VG1WVmQrUnpmM2NSUGZueU42VmU0TFFPVS9HS1gxSSswS0h6WE5GWkNNeWJsRHR2L0diNHpCcHNEbm5HL0ROSnU4VHBtbXAwQ2haWHh3cUdYSmo2UE55WU55ZlBTVmpFamdMWGtoL3NtNENlMmw3RVhnZzkyd01lKzIvbStleXlEZ0ZSNFZQbFRVM2VVSlRQcDJRdjZyUFpXbUtoa0cwTnhaZ3Z2OTRPS216MVlRUHhLTUhlMEx3V3RxVXRaSCtFdkxHMHQ0MXptOVQxbUMvRTdEMkRod01zbThFTnVaOVR1QXNNalRoM1RhQU84SkRTeHZoeUFMeTQ0bFBjRlQrVG5oV1N2dm12VUxtLzRCekl6ME5KNlROZHA0eEFlNU5sdnNhZDc1VGZBaVFZS2RMc25aeU42dEp3VlRjelFwcG1Vc2hJaXliZE0rK0RzaDFiL0xCa0Y3ZDFQaUFVMGcxRFRpVXAyL1pIK1o2MjNsTllQY080dm9HV0xsb3VwNkV4WGpCdmpidnlnS3poREl4R1c4SXRGZGdMdU1OeDV2dTFsUjRmRTRnSXhLNkxPM3Zaci80d09pRmNONk5BVDhrRXFHTXV4OHdmZ2lkRWJ5U1B0NHdOdk9lTEgwSUxBVWZicE52Z1Y2RjYvbVo5RnpLUEdYY1hGWHQ0elBuYmQ1RHBTems3ejk1dGF6L1J3MlBYc3h2QUh1a0o0Z2hjSkExTUdXMEltTVNQaHZqY0JVTC9lN0YyRTE1OWhObjdwOFF0amxNN2pNMFpUWDNDeE11MGtZUDl2eG84RUxnSnYyZDF2MFYxdnRZemdBcHQwUGpwNnlQbkVsUHRkNURZQ2w3VDhaK25mUGxCNStFOTA0VFZySitRaVBrKzZ6dXc3eUR6dVFNRlh3ejZZbDhQd2MvSHhLSjM2VFRVazc0UmVubkFPWGxiSkg5K29RQ0ppOGhZNW12eDFtQk8zbENXWjJkUG5QK3lKNDI5MFZIK0Y0NXQyVXRFdEtQWkFDL1R6KzhXdWd4MldDRVpIOUlHemk5dGZkMWhrVm9CbzJUY1VoYjB2Y0VHalBsS1ZMUFBCL00vWktDTTNHQ0h0OFhjRW40V1ZNMkptVmtYV1hOb3BqUURuMis3V2QrK1RUK2lUemtMaCs1WTBwNUF0OFljbjNOUndvUEtOL2g0QjlPRk95L21maHQzci9sZDRHTEtmc3g3MTRtZjNwSXhnVSttUG9EeVRQcGJCeDRKVHlobEc4RW9qcXdGOVl4TGg2K3FkdlFIbk1kYXNJekxkZTBmNTllNjRMSW9FWnk4RWlmQW4rQ2ROclh0VWh5aThyRlIyaUZuRUh2MlhQbHVVc0w3eVAxWXNDREFnbm9vWXo3dGo3LzZONitkbGYwT3BqMHhKU0ZDTXl0dXF4SnF3cmk5UUl5WUUrSDZkOEVybmY0ZklDbXR0SDl5cDFiMnR0RFJmTThsZlpHY1BhYmF5NTlsZFAwWjZXZXIreHBvV1ByOVRxbllPeGZhU09oL1BrMWlHL3lRSUp2enZ3dTl3YjV6WlRmMnU4SG5MWG12SVErcFNOQ1RGZjJWeDI5dHAzMFdFWGViY284cGIyS25HZGJmUEV5cXVFajlGUGFGTjJvSFg2Y3I1bkFmZlBlSTIwTHZSQmFuUmg1eVZOb1JHTE9lNkdIVWwvd1ZHQXY3ZG5QV3ZCckkyT09wNDJFY21DN3ZsSGpEVTRrN1dlQWlUdlN2NXpmVWc2SG1QYThvZkNDTzRoaWRKOXY4MzdiRTd3cXlSM29ySzV2M3Jua3JKV3orengwWncweXRHcDQxVFhQT0pPUGwvb3labG1iTVpTN0IxSS80ZXkrcjJuV2ZUMy9wZERCUFJwdnpidXUwRkRwUStacnlzTUZQN3R6N2dsZktQbS9rQk84NDV3VHZPSHhwNTJubFBuY0JBN3BXY0FybkJXUGRGOEo5LzQxWkFteXY0US9Tcm5JMkZzeURya255Tzg5MlhNaUx4QVlWd2QzV3ZBeDV5MHdIYVp4YVhRckI3V0xQZ1RHc2xkT2E3ejl4SmtTb1htY01teWtjSTBYYWZDNEkzTVJlSWhjVG1DTXMwbzcveWw4Z3N6UnBIdDJubDNETTRyOW54ZjVoTkJpYzEwYUF0akUwRjAvNE42YnVRcHRsTjkrc1ZjUDZ2R2Q1UGVaNE0xdXVSY2xvQzF2b2NYeXhsL0tDeHdFbGdJRG1RUE9ldXg3OEFEalhrMmY4cnZnU2xuK2xqNkUvc2haSkdzaDlGL3F5SjZ3NDRxcGw4RnpXVWZvaEhqdWtqRkxmZk91WXVKbEh1U0JVNGhjWXQ0RHBMN1FCR25meEFFZUtQM0hsMGk5N3d6R0RmbU55Uk9LMXhHWjV5THVzTk1aWHhJV2tPWDRqejlMS0JPUTlBWThyY2k1S3Z4ODF3UjNXVG0zeG1Fb1liOXY2WDMzRGpqSy9wWHh5TjFUY0tFWUxrOEVqdEplQmpaeEJMb2ladzNycSt4aGs5N0tmSHN5U0dsTDlyTHNhMms3b2J5aW81WTltVEtJbWdsMFhxYWRoQ2xQTnV2SUdzbHZKczhyWTVjeVB0Qm82VXRrYmpjaHd1czVMMFVmYUo2akp0NExyeW5ySlRoZGdjOW04ODdHdmRmazZ6K2g4OW1sWVNPd3ROOEpFdWdwNU84RjdJOGc3dURya04yWS9JRE1VK1RIMGs5VDFtRVFEWTVsRTlWblFqSTJnYkhBUitxdkJTL3FVbEhHSS9QWkQ1RTFlU2VSVGFkaGplWHNsSFlYNlgwa05NL0VOUm1MTDNTa0VqemRJODYycG96bkczdXVPSFJMZmpkNUQ1T20yK1ZpR3I0Mnphdkkzdi9PM2pCcFN6YmFrM3lUTnpMNVNPRVpwVDJoNlRJZWx0a08xMHZjeVJXUlROS0M2eGF4TDJFT1c4RHBZTHg3M21DdzdjRFZpWEpJb3UrcXoxeHJ3V1RpQ01wT3AvWkNyNGN4WmtkOVZvRytxak5qU2NLNkNVMjM2ekNCWFJ4MTVDN0RRMDQ3SFJWZTVDNndFeDJ5ek12Y0p3S3pqK0JBVitSRkJNZTMwMm5UemtMbWNvYXhtblRmTGsvWE9Cd0ZZdTZpWDFrZktkc1dndHNTUFZJYnhtek9YL2FOMEVXcEozUVdSd0FxZ0hHWjkzcWhKOXRvWXdQcjdRay84b2V6UVBnaFU0OXQ0cDZwT3hMNktPM0ora2kvMG9iZ2tPRFBPQ1lwYTNZR3ZpMGVaQTlETjNzRVBWRnQ5bG8xOEUzb3JKdzVzemxQaGNlU3MzVWwvWmFDQmdwdXlab210SnN3ejJvWjQyTHU0Zjd3Nnh6Wi8ra05UTnNYbVl0ZGp3V1FjSFpyenhkKzM3U1hNWGxCVThZbjlNR0VQUTk1MVNSK0ZGb283UTZiVGJRaFBZWkNWQllZeURoSFFROEhheHg4d3RxTGpGWHlUZDZsS3ZyM1ZCckhSakpXb1JreVY1TnVtbmVtcDlnVENRN0tldjBHWnhQYVM4bnZvN21MQ1d6a2J6ay83VFpZckZjZFpQemY0U1VrVCtxRys2TTdJLzg5ZTAzMnJheUgvZDJVcHVzbXIybnFFcVZ0azJkeUFONG53YmRkd05PMExlbVBFRURRWFdCZzAyZUl5ZHRMbXpkWVA5SHZ0dUJqNm1La1haTVBsbnVXd0VIb2xmUWxORmZ3L2hnYlFtaVpqR2VlMWdHWjZ5WGp1OHp2MWNFcEhsMnE3cHB1M2VQOEh3UnhFUm9xOFBSbE1XWDlSSlpSUmE5QlB1amtkYzFUU1R2aldaTnpGREw1YytsUGNFVDZtYWRwa1BBdDByNzBML1RNM0NQbWZWM21LN2lCNDNyNy9lQTU1L1pWNENSeU11RkJ6RFVST2phSENmWmtYTXZJNkVhbkJTa3JlcTlqZkpad3pwanJidGQ5NlBvaGxCVVk0b2pmdm1la0w4RWYrWmE5SWUxLzBHUGNDVDJzekFhek1xOEs4QWRsdWUvaitOZStMaWFQS0hNVkhKTzJaTjBzckdjaDl2NStEYU9NN09YOXlONFNudDAvd00wcmFaSFphOWdJdlpKK016R2Y2Z251a2VhWm5aMU9Sb0ZZejhGTDRYRms3a0ovcEU1bDZJVjVQblZqSVZ5eEFTdEJ3d1RNVWpoQXNNdWZCRGY2d09NTHp5eDFaRy9aY1YzM2NSVGUyS1R6b3hsck5qMzJ4endObE85VXpMMm92dE80YVhwcjNwTk5IWjZzZFFxSXNDbUx0ZXRFS1lURFRIdi9kOUNOakFSZkZnTkwwMWJSdkN1Yk9vbUVjbzJqMmw3dEdvUHVRVFE2MlJjQ3ErUzYvNU1hVGx1dzA1QW9ZaUkvRk5taHVSZWtuWHZnWmlYVzhBOW5TaHBrVlh0MG5hemtpMTdVZnI2Qkt5ZjVtUFp0ajRBbndUcnNZK3JMeE1vQjA5U3NTeUw0dlpQZ21wZitUZTVTc3Q0Qi9DMjQ4NFAxS1F1dk40WHp3OXo3QVp4UlVVeTJNeGxDRjJUOGlUUnNEekN1dXBwM0tMelNRWjJDdGdrdXlYcVlNalRwUjNTRWdyZXpHWWZZV0FqdUpaUjFtUFpvTXZZR2VuNlh3YjlXT3YwZC9CdlBlVFNjdmZGYjU5M244S2lnNFNnOGkrekRSOXFHSkNHdC9JRWNwU0ozdlcvVWJVLy9GY0JiNStvT0toWVpVemJNaXhQcVZrMGJ2ajVjUkU5enZtWmxjVWZLcG9EUS9nYW5UQnE3amZZSWZxSHU4YWtuTWhvQUkvTVZHbE5QdzBiNEZsa2JnYVBBN0M2dzJRZC9JRENYdjJYL0M4OHpUbXcyMFgxY1psK2NZNDNsN2l3d3k4cjhUZHlXc2NuY0JHNlQ2VXNDamNwZDRiS1c2K1ZtWDVTRmZnZUNaei9RL3doL0tPc3E1NnVjcDRJWEFwOW5ZdStBclZZTFB1N1lWSmh6djgwOWZRcHQvSmlKVEVxdnV5OW5yK0MyekNrUTNKRTJwQzJ4RVRCMWM5Sm1DRENWZTd2TTZROFZQQm4zZC9hYW5FMnl4ei9wOVRyQkhkN0VDZnM1b1grM0FKQjhUSFNCaHRzVStqWDFHd0tIOXN5M2pjWXhPUzlrUEthdVgvbzB6Mi9CSDd2K1V1aXMzcE1mTlM4bjQrNmsyMDlJcSsxeUEzMnV0d2QrMFd4UXVTZktlR1YrMHBmY2pRVXZaUjFsdmkyd0UvcklPajNqYkRtZzViZGQyQitUbWJQQVc4cktQaGI5elVIazY0SXowbjVuZmhTWlZrTDVrK0NuS2JNMzdYVE1jVFZoZjkvWGF5NHdsekxYSWU3Qy84cmN6ZnVRek5QVU94UUU2Skh3d1NJVHh5R0Ntcy9DbUx5c0tUZVc5Zzl5M3RmUXZIOFZ6b090N0FOcHo3eHJtdmFNY3I0SlRCdHArRGZUc0RIdGhWOERQUE91WTlJL2MveFhkRm01bzBzYmg0a0tmVkI0SGVpUEJkaVorbU81WHdzZTFNSjJ5VHh6WlU1bCtXTWl1aDdoaGFTY2VUNEluTWF6R0VKL2hjL3JEeUo5MGZ5Ny9MMktQYll0Z1MyRnpHTnZBaHR6VS9ZcGExa1UrblZJajlPOHY1aHlPTE9zNElIZ3owdVJmK2w3cHVDdTdOM2MrbndmQWtCTU9aM1V4OUd6blo2YXZIRjVGajZVK3NtQWRXcGR4N1NsL1FMeGNvQ3hFUjVZNnEvUzQ3bkpXdGFBU0pnOGtzQlZaSE1DaXlDOUh0UDUzZVFiSlg4MXNDMlR4RUY5NXU1bTZtYlhhM21LMkF0S3U2SGdwTXcxb1c0bW9kNDg0Zm0xRDNvaVpRV3VNaGNaM3piMlNCZzgzS1VFY0JOWWRvUVgzMHFraUNjYUZ6MkE3V0RnSW5SRFlER1ZBVldCL295aXZpbmZrdkZsNHF3eWRXVmo5THFaOGsvQjI5bkF6UHhieHBuUW5pT0xocVdwNnpSNTA0VHloUmpPdkliUTY0dDBhc3BONWpGb09UTUUvaWJObDdaVDZ2YXlzWWNTSTUrZnlaMmpEN2dWeW5rL0g1MjZLYytxeGJ3eXdyekltc3RkT3dsLy84THRxY2tMQ0p6TWNjZ1l6UHVIak1uVUZ3MkRIcHJ5Qy9sTjdCOEZibG1nZDFrMDMrUExQWFk0ZENXVkhwZU1XZmFTYTJGZW91bXpMeisyQ1dKL1lMZXBkSE5RV1NEZ1I1QmhTRG54ZnVyTUdrbi93dk82d0s4TERaSStaVjFrWFUyNXkyL29tZ2xuR1djZ2ZKQjVSc3NjVEo1STlzSmJkRFFSNEdkQ0d3d3Bjd2pHN29qR0M3YXpmYTFNZloyTVQyaXAwR3pwVzc3VEE3TkxBTzJCeHV0bm5FRzMyRnc3Z1hlTXppTklueDNYVFYyR2VTZVErdVlkZng5amlVYnZLMmN5d1RqK096ZGxyQldnVVkzMG1HVHVzajRiYWQ4Wjc5VFpFOGt6Yy9BaTNnRllHT2thNEdCKzB2TENwaUQzcCtLazdTOXFzRFdzcE11VTR3RitWVjJtS3hsMWRib05udEtiNmpMZHZuTTMxT255dE5OV3QxT0d2bnJxL0RhTXRhK3V1NGN5QWFSRmRPSk9lcEl1bjRwMjV1bnlCRDVWaTNUNUtES0NkRG9QLzJ6VTZWQStPM1c2TzNNOHFPdVdwczFnblQrUzhaL1I3ZmNsUDFTbjN6UCsrN3I4RGNacDFXbC94aENwMDhscElGcTNrNXIyMytqOHhlTHRXNmNES0IrbjA5dm9LMTYzLzBaNGg4UkczV0swNzA1YXloUWh3NU8wZlR6VXphRHoyOU5tWnAxK1NUdlpkZDFCcFBQcnREZGpMcTdMZEdVdXZyb2RITTZwcWpvZlIvcXFwaTVmbC9ZYjZ2d2NzbDQ2WFVqV1M2ZmpaYjEwK2NIZ1hsZWRUa20vZlhYN2hTay9YSmNQSVQxYXA4dFNkN3d1czU3MExOS3lwbC9wSzBpWE9VZitXbDNtTW5EWXFmTlBNTis5T2wxUjFrNm5qMUkzV0tjSE00WVRlanlyS0VNOFZYdCtZOHBjMGVrTzVJZnFkRWZ3UGt5WHIwVmY5M1Urd1pLVVZlY0hNZjVvblorSGYySjBmaGRaVTUxL2hycHhPcjFRMXRTRUNWRlNjT3R0ejYveWsvVWxMZmwzR1krN3ptOUlPNTQ2dllPK3ZIWGFnYnBwZEZvZTMyWFFkUkdQcSt3NnZWWFdtclRBcWl0cFg1MWVSSnRWZGQxMHdMT216bi9OL20ycTZ3NW03bTExK2g3bHUrcnk1UmxEVDUyT0pOMVhwLzJabzc5T1A0RTNDdEIxdDlIK2FOMStJZHFacHN1NFVuZVdUcGVTZmFyVGxXbG5rVTZQWVF6TGREc2ZHUDlhM1U0dzZaMDZ2eS9wZ3pvZFF2c25kTjFSdEhsR3AzOER6d3M2M1ovMnIraDBhdEtoT2wyVzhtRTZUVkE1YkppTnZvNXhCNDAwWWNKY1luUzZOWGVJRHpyOVJOWlVsLzlLbTRtVEdPM2twazFublE2anJqdHBLVDlFMWxIbjUrQ2ZORHEvSU8xa0ppM3Q0QmhkNWRkbE9pTWZLNnp6cDdORzVYUjVmOUpWZFRvRDdkZlZaV3FEU3kxMWZuYmE3R2ltaFg3cU5wMWs3WFM2aGF5ZFRudFFQa0NYcnkxcnA5djhUdmxwdWt3ZFdUdWRia1Q1ZWJvTVR0eFZrSzVia3Z5Tk9uMVlvbURvOG5HVTJhdno1OUZ2c000ZlJaa1RPcDJhOUJtZG5pTjIzN3I4WS9vTjFma05xQnVtMHlzWVp3UnBvUlVuZ0ZXMExuOFRtZE1ibmM0aWRGV1hmeUhycGZQWDBKZTUzdzlSUmpucDg0SjBZcDNlUTNsbjBuYmFTTnFidExHT0RpcURMck9mTVdUV1piTEt2dE5sWWtrWDEvbHhwQ3VaZFdYZjZYUUVEVFRVNldMZ1ZVdWRkcGExMDNXSFFFdjc2dndGekQxQTk1dWVNc04xUG01ejFYaWQva0daYWJwTVNmQmhsczV2d2J3VzZmemNsRm1tMDdWcEowaVhxY2MrMnFqekNiaWx0dXI4ZU9ydTFmblBxSHRRcC8zZ3BZSjFtWmZrbjlINUJETlNGM1QrV29Henp0OG1lMDJuVDlKWGhFNi9KdisrVHE4bjM2clRRMGxINnZSZ29iYzZYWmt4eCtqMkplREJCNTNlQ216ak5kd1dBcmZFemtiK0E5cHhKeTExcnpNZVQ1MXVLV3VxeTRUSm11cjh1WEtHNm5SaitzMnUwLzNJejYzVE5ZRnRmbDAzQlhNdnJ2TVJGU3RmblgrQS9FbzZ2ejNyVzFYblQ2RGZ1am85bi9hYjZqS2xLZDlTcDZkUnBxMHVFeXgwV09jVDBGSDFKRzJuMjdKbmRmb0I3WXpYWmE0S0w2VHIxbWRlczNSK05kcVpwOU5KS0xOSTEvV2d6RnFkSHdvUHZWSFhqYWJNVHAwK0wyZXJMcE5MK0NKZDE0VitMK2o4YTN5dTZQS05LQk9tMDh1cGUxK1hxU0pucU01UFJyL1I1bnhwSjBhblc1SC9ScWVIay85QnArY3czemhkMTRXTVh6cWRoUHpFTGtZNm8vQklwTzE3azN4UDBqTE9tNlF6NkRLZXdoZnBkRTNac3pyOVdOWlIxL1dSYzlPc0srZW16dC9LMkdycTlCREsxOVhwSDhJajZYUmR6cSttdXMxNmxHK3I4ODlUcHFOT1h5Qy9xMDVMMUplZU9yMkIvTDQ2UFltMHYwN1hRZjRVb050c0ovUlpqMjBIWmFicE1oOFp6eXlkUGl2MFdaY0pwdDhnblMvRWNxMXU1eWxsdHVveWsyanpJR21ocGNYaHNTL29Nak5rLytxNnd6bDN3blIrRnVyZTErbUI1RWZxOUU4NUszWDZCSEQ0b05PSjRGdmlkVHVPbFBtbCs0MFdHdXRxbEZuUCtEMUoyOTNueUZtcDArdUFUeHFkN2lNOGp5NS9FcHFmbmJTMDA0dnloWFdaNU1MZjZ2UmcydlRWNlc3a2w5UHA2M3dxNlhaS1VLYW16bmVnbmJvNlhaUnhOdFR0TnhmK1ZxZmo1VHpWWlM3S2VhclRsNW1Mdnk0elZ2aGJuVjhmV2pGZTk1Vk16bE9kbncxNTB5eWRIeXI4ajg0dktQUlpwenZKblVXWEdjVDROK3A4TDhhelZmZTFoRFlQNm53Q3cvNjM5emVUSDZ6ekEwU2VxTnU1SS9SWjE5M0ptTU4wT29CMXRPb3lqMmcvV3FjSFV2ZU5UcThtUDQ2MDRFa2Ywb25kakxyVGhLNlNscjQyTW41dm5hN0pHTkxvOUZ1NXArajBNYUd4T24yVGRyS1RsdlpmaVY4MW5TNHNkMG1kbmtxNkhHbnB0NmVza2E1Ymg3NGE2dlFtb2FVNlhaN3h0TlRwZzhMVDZuYU9VcWFyemk5Sm16MzErUC9LL0hXWkZPRHFhRjNtdU54TmRINW0yV3M2UDVEeHo5THBLcHlEODh4eDB2NHluVzhUdmtqbjc1RTd0RTczRmI1SWx4bERlcTlPcCtUSGc3cE1YWERtaEU3UEVocHJ3aFA2ZkVYblR4WmVTT2VQa1BOVXA2ZkszdFJsQnRKK3BNNG5xTDJLMXZuNWhjYnEvQU55WjlIcGk4QXFUcGZ4bEgycTAxTW9rOWhkM3l2NXg1bTA1SytUUGF2elcxUEdXNmR2VURlTkxwTTNHN0RUK1YzcE43dE9GMk5ldVhYYWwvejhPajJJTmd2cmRFUEJBZDJPRyt0U1R1ZjdBSjlLT3ArZ3FVUkpOZEtCUW9kMW1TamFhYXJUSjRGSlM3TWQ0YTkwdWd6dDlOVHB6ckovZGJvZGRZZnJ1dldaMTJpZHppcjRRTm91WjJBOHMzUitNOHJQMCttNXpHV1JUbjhtdlV5bkIxQTNTTmNkSjdSWDkzV0x1bnQxbVRWeXp1cjBCLzRKMW1VMml2eEIxNjFMZnFqTzMweCtoTTYvS211dDZ5NlEvVXZhN2lXVWZQT08wMFg0WVYzR2tYUzhUcytpMzE4NkhjWjRsSWUrdzhxNjYzUi82SU16YWVuM0V1MTc2dlJlV1d1ZFhpUVJrSFc2SXYzbTFuVTlhVE8vVHI5blVJVjFtWWNpZjlEcHJzSXY2VExWK0tlcXptOUdPM1YxL2dtaHlUci9NR05ycWZNN0NyK2s4M3ZUVGxlZEg0SnV1NmZPZnkxM0o1MG1JS1VhcnRNN3dmbnhPbDFMOXJpdWkybTdtcVh6N3doOTF2azVTSnQ4YVZwd1lKbk9qeEZhcmN1L0JWWWJkYnFDeUN0MG1SdXkzM1Y2aXRCdG5iNG1QSlV1bjVhTU16cjlRbmdxblNhNG5RclQ2Vk1pbDlCMXM0bmNTYWZYQ3MrczB6YnlvM1g2LzlnNkY3aXJwcTJONys2cFY2VUxTUWdoWFVoQ2lOTkxDSFdFVUlSSzdyY1FraERpaEZDRTNFTUlSY2kxRUVKVVJGRVVvcENFa0UrKzAzRys1ei9uTTlxTDMxZS90ZDluanozbWZZd3h4eHh6cnJWcU15ODdiUlhGNVZhYlBnZDVNTDVKL0d1Tk4wVDNoWkdydHN6UjlYTGE3Y1RmUURpdEFkRjM0eW5ZZWVNalZNL201aCtNcjJWOEVUcHVuc3ZSY2VNV3JKWE1jNjN5Nld6Nmhmcm9zcDZ1T2RyMGp0TFo3cVkzVVAvM012MXM0bEhHTHpKZm0rZHoxV2VnY1QzeG4ybWVnZUlmWkh3WmF5dmpiOFUveFB4L2lqN2M5QS8xTWNMMFN1SlUwUzdoc08wVDhLdEZSKzl1WUQzbHREY3hYNXQrTzdFcDA3L1h4M1RuYzZqNllhWndXcit3VmpMUHZkaDI0K25ZZHZPL2loeWFQcHYxa2ZFQzBWY1lYeUU1WEJWdHgzODJQazc4c2Y1NlNQenJ6SzhYZWN0SnlUdzlSYTh0REgwNy9Hcmo4NUFCNDIxWlE1bi9kY2JkK0hEeHR6VFBxL0xUV2duVExyMlFyZFRSdUo3NHU1aWZKNngxTS82T09kMXArekNuUjFucXc5NU91ek5ySXROYnNpWnkybzZpRHpMOUZQWHpZR085Mkw4MHhEeURzZUhHRGRCMzgxelBuRzY4RFAvWlpZMWlqV3oreWV5UE9QN1RsdkUxLzR1cTgwVGp1MVRuU2NZcjBBMm52Umg3Ymx5U0hNNHd6OEhFcVl5UFYxL05NczkwTFc3bkdldkY1cVZGeG04eDd1WS9UZXZjNWFaUFU5cFZ4dlgxNHhyakUxWC9kY2J6bVUvZHJ1ZnczeHBrK216R1Y1ZzgyK0RMR1Q4cTNOajRHdllSTGVjbmlON1U5SVdNdS9NNUFsOU9tUHczVWJudGpXdmhlNXQvdUhBWDQ0UFZWMTJOYjBUZTFzZUNKQSttajJLZFpid0I5dDlsTldHOWJQcTdyTE9NaDhtZTl6UFBINktmYW5vVmpkZVp4algxTWNnOHJ4SkxjVDA3c1hZMi9XN1d6dVpmSWZwbzAzOFQvempqZHFyRGVQUHczT01KcGk4bVZ1azhYMWU1TDVobnFmUnh1bm51VVo0emhiRUpUNnFzQmVaNVVQUkZwbjlBck1QNVhLaXhYdU8weTlCWjg4L2hub21OTXIyWGNHMWgrRzlnRFNXYzlsK0lONXJuV21KVzV0bVZPSWJwOVZqL212OWZySnVNNjZqK25ZMDNZK3lNOVZMMVVsZW4vWkdZaHZQc3kwc29UZiszOHVsbi9tWFlYTk9ycUE1bkdsK3M4UnBzUEZqNUR6UC9sZGhlNDd0RUgyRmNvVDRjYWY0TDBGUGpBMVRQY2ViWm1yMEQ0NWVVLzNqenpGV2ZURFM5TjJlOVRLK0IzMlg2MDlobjQwbmluMjU4bVhobUdMZGo3TnplVS9ERFRSOUZURktZc2JzVW0yejZoWXlqeTFvai90V21iNmUyckRIOVV2VFVlQlorVjBQUDZmamJ3dW5Say9qYnBsK25zaG9MVTFZajVsbnp0RkhhdHVaNWszbldlRXZXeGNibmk2ZVRzVjVtWE9yc3RPUFFSOU43b0lQR0g0bS91M0ViZkd6akkvQ3hqY2ZoWXp1ZjY4VGZ6L1RUQ3ZGNWJjT1dCb3BPdnkxVC9RY1pOeVNtWWZ3Mk50bHBLOVUvbzV4bkErVXoxdlFuV1djWkR4ZjlidU92UkI5di9BUHpzdE51eDVyTDlQZXd5YVp2cVk4WGpHOW1mTTF6RXZ0RXhpOHBuMW5tR2MrOGJIbzF4dHAxUGtHMmQ2bDVYbEhhaUNWV01oZWIveW54cnpMUHB1d05tWDQ4ZnJqeGI4THJqQnVqMTQxeS9zUFlueFltN1I3TXVhYi96dDZCNlI4UW54UW1iVk9sYld2NjBiSWJIWTI3TWRiR0U5UW5YYzEvTlB0OXBsL05QUkxHYTZRanZZMUhNNmJtUDVENGxmSEY3QTBaZjY2UE0xMjMxb3JERHpGOU9Yb2RkVk9kaHp2UDc0bFhtLzRsUHBYcEsxbERtYTdqdmFWeHB1dkZycVh4eG1maFU3bXNMVVdmYW5wbjloU2M5aEQyRkl4L0lPNWgvcFdzYzh3L2l2T3B4aFg0eitidnBZL2xwbS9EMkRudDNjU1poZEc3WWRqYnhsNExzeVlTaHFlU2VLUHBQK0FMQ1NkL2pEV1I4Ym42YUd1ZWpmR0JuYllGZnEvcGM5a3ZNRzZpdEQyZGRsZjhJdU1weERxTWQyY2VOTzVBdk5INExvM0ZRT2R6bHVwenB1bUhNUSthM29WNTBIaFg5aFNNRjRvKzBuWDdtdjEwMDdmVHN4bnVOdTZoUENjNHo3M1VoeE9OT3hKRGR0b2IyUGN4ZlE1alpGeVRNVEllaDk0WlZ4RTk0dFgvbEJ6T2NsbTNFYk15N2tkczJmd0RDbnZCYjdBbU1sMmgwOUpTODcrTEhUYStXbmkxOFowcWE2MzVUeUMyYlBydjdPczFjVDd5MldvYlZ5aHRoVEE4UDZPcnh0M1pSekRQcHVyL0ZzWXZZWi9OMDRFNTEvZ0J4dDM0RE9aWjh6Y3YyUCt0V0JlYnZvUjFzVEQ5K1RSMjJQUi9JZy9HT3lBUHhuVlpCNW4vZUo2UDRiS0dFT3N3ZlMvRnI0YVpmZ0ZySE9QbXdxT01yMFFmbmVmKzJGN2o4NWxuamZkVW5jY2J6eVhlNWJRZllYdE5QNFc5Sk9ONktuZXFlZVl6UjVpK0czdEp4dTJJZlJrZmdoMTJuUTlpVFdUNnRZVjkvNG5zSlptK3VmQVM0MnI0ek1iYnErM0xYVzRuOGF3eS9XN2lZT3ZIVHZiWitDUDJEVjN1ZnNqRHhwbCtOZnU4eHNPRUs0eGZZbzQyMW9PVFM0MkZLZXNsWk1QMHRkaHQwNjhUYm1WOHJOcllYcGl5ZXVJem0vOGliSUo1emxROXU1bitGVEpuK3JYS3A1ZnhZUEgwTlU4ZjVkblA5SVhJZ1BFZzFrcm1xWlJNRGpiOVl0Vi9tT25QNDRNWkwxWWJSeGkzVk94NnBQbEw3T09iZm80K3hwcCtPL0V1NGZTdVltVEFQRWNSQXpIZWdoaUk4V1A0WGNaUHNpNTJQbTFWdDVudWs1UFJmZU5xNGw5aS9oT0pmUm12Sk81aHZCRnhEK2Z6alBCcTR4Mnc0Y1pUZURuSUp0N0haNzllR1BvNjFqN0NhZjBvbnFibTJZTTlRZE0vWkg0eWYxZlZzNzN4TFB4bjg2eGdISTEzVWY1ZG5NOXV4TEZOWDhXNnhta2ZJNDVoK3U2TW8vSDJ5cWVmOGFYNkdHaitRWnl4TWU3R210YzhGMnFzaDVqZVMvVGhwajhnZjJDRTZiWFFjZU1OaUhHWlp6Zmlsc1pQc1A1MW5mV3l1ZEpFMDZ1d3huSGF6ZGcvTXM4TzZLOTU5R0RxMGt6emJNRVpHOU9QSnlacDNKWlloSEZENGh2bS80Z3pWS2J2d1Y2aGNTUDJDbzMzWlY1MnVienJhSzNUYnNTZWZsUDNGVHByL0FUenRUQXllYURvVFUxdnpud3RURDViaU5CS09PM1BvbyttOStFTXVlbjFSTzlxK3ExSzI5UDAxdGhlNTZsYlBVcDlUZitFbUtUcGpWaVRHdXZvYWVsTTg4em1qTHZ4RXZhUHpOT08vU09YcFNQb3BWSEdPMktIemZNTmUzekdOM0pXeW0yc1NXelo5QkhZU2VPcHpNWEdzNW1Malk4ajl1ZzZmS04yelRJK0c3MHpic2VjYS83ZkpXTkxUTCtJOVk3cE04V3p3cGloV0dXZXUvRjdUYS9Obkd1OERML1grQ3Y4M2sxekczOWdyaFVtN1U3WVV1TWZpRGtZTDJCUFFUaWRsZEo5NjYxTS8wYjA5cVpmclhWRVI5TVBacDQxL1dMT1pyaXNYbXBMZC9NY0s1NWU1dmxWWmZVMi9XbldzNlpmd3ZyQzg4aFE0WUhtNllzK09zL0J4SjFNNzRoUFpieFllS1I1SGlGbUtNeDRiU2dmWTRMenY1OHpHT2FmSy85dGl2RWh5djhGNHdvbG1tRThoZjFmeDRYYUZmWjNGbkwyeVhuK203TTB4a05ZdHhwdm9nd1dPSi9ubGY4UzEyMFc5c3YwalF1eDVhK1UvMnFuM1ZaendScnpmSW52NUxRbnNXNXRsdW10MklzM2ZwNzlBdUhrRXhJdkVxYnR2eEIvRU03bmNDU2ZqbStNNUl5ejAvYkJGekxQVmNKZGpmZkJUM2Fla3puUFp2N2p4ZFBYUE05aVA0Mi9KUlpobnRNWkwrTmJPVlBxK254S3pNSDhsK0FETy8vRzJFblRYMFVIalVkako1M1BZOFNDekgrRjdPMFUwMzltVDliOE8zTXUwZlNobkt0MGY1NU1QTkE4SFJrNzR6WHMrNWgvTW10UDEzTS85bnBjMWxYNE1PWS9FVjB6dnA3NXp2eGZNQzZiWmY3cXhQQ0ZVd3hOZXpkTmhaTnZyekZ0WWR4QUg2Mk1IeWFlWVA3TkpLc2RqWWNVempDY29QTURuY3kvaUhpUmVSN2lETERML1V4bkJYc2F6Mk4vMXZ5RHViL0IvQzlnSjQydlljMWlQQWJmMWZ5ZlVyYnhTSHdWOHh3bVBNSjRBR3RNNHpyeU9VZVpmemxub2t5dnlUZ2FuOG80dW03WHNNWVVwdCsySWtibk9QbUJqS1A1UHhIUGRPZTVsTEV6dlI5aloveUQ4cHpqUFA5RHY1aS9QVHBsbmduQ3k0M3ZWejRyakp1aXk4YkhxVzlYTyswSHhBMU1uNGI5Tko2TFA5TTgvSGFOdFhDS05lSGJDRk9IYjRnSG1xY3VlL0htT1F2ZnhuZys5MnVZNXdUbVFhZmRsejBhODJ5Si9UVFBFbzFwTitOL2M3Yk4vSmV4TjJmNkFQd1c0ejgwN21jYVA2RThCenZQMnprbmJEd05YOVQ0RTJJOTVuOUY4WmFSenY4UXpZOWpUUi9LV1JIUEl4OHpKenB0UGVKQ3htL1MxK2IvREwvVTlCdnhTNDJQWUs0MGZvZXhOcTVRZmFZYlYxV2Z6SEFkNmtzWDVwaitsdExPTXo2ZU02VXU2OVhpMldEbVRkUG5zeTl2ZkI3K2pQR1R4QWFOUHhEL091UGQ4V2Myei9uY2h2ejQzSGdQOUZyMEZFc2tGbUc4RFh0ejVsL05HUXpqK3NTQmhkUDVNYzVCR2YvSXVzaHBYMWU1WFl4L3c3ODBIazBzd3ZrTVVUNjlURi9GL0dkOEdqRWk4NHpqekl6eHM5aGJsM1VrODZQNXgrS2ptcWVlQ0NOTWY1SjV6ZlNQOVRIYWFiOVMvOXh0bnFzNUcyT2VxOUZaWVhUMkZjYk85Sm5ZVzZkOWc3UGZwbmRGTjUzUEtkaFY4M3lPLzJtZWgvQS9qVmV5cGpEL0w4eURwcS9qYkl6cFI2dndkY1lic3BiZnd1c0Y4ZGMyYnN2OTlNS1V0UmxqWkhwUGZGSFRIMU9lcllUVEc2Y2tZNTNNTTRMendNTHAvQ2Z6b09udGxiYWI2UmV5cGpBK201aTg4ZGZFaGN3L2liUDZway9DeHBwK3ZPek1JTk5uYVE5OWlIRlBWV1M0OGFmQ0k0MC9ZMy9FK0RqUnh4a3ZZaTNnT01hVnhBZWMvL2ZpbVdDZUtTSk1NdjZRZFlUYlBvbm5HWmkrRkYvVTlJYm9sT21iRWVkeG5vY3hYc2FkV09PYmYwazZSKzRZRno2bmVWcmhxNWorVDNScVM1K1JaaC9LZUluNm9VSVlucDNaVHpGOVhZcXhlbDFKbk1mME8rVi90alQ5YWVsT1crT0wySnZ3ZnV2citEbm1iNlg2ZERKZVFPelMvUFBVUDEyTmQ5VDkxOTJOajJlTmJ6eVZ0YUhUTm1WTWpUOVd1UVBOY3lybkNVM2ZrdjF1NHcwNE95cE0vK3pDK3NMOFIrSG5HRmRqWFcvK2VhS1BOZjk0MWhmR25aVjJrdm1YVXlmanIxbFRPTzBObkYweHZiMzRaeG0vTGJtYVo3eUUrMmpNM3hmYmFIcHRZckRHVDZqZlZwbG5KR3Q1MTJHYTBxNHp2VHR6WDR0TTMxdHpmWVZ3V25kb1hCb2JmNnA1cXJueEpPbFJTK01XN0pzSXAvTVBuQ2MwcnM2ZXFmUGNXdlF1cHUvT0d0RDB1NVEyN3FrWktkelRQUDlndkp6L0tjeUQ1bCtIUFRUUEF1eWg2YityTFVOTW4wVE0zUGdQOU03NURGRC9qRFRXcXd0TG80MC9WbjNHR2IvTWZPZTBxNG5OR3UvUHVTUHp2TWQrcVBkYkh4V091TUZsK3BoaW5uWHNXUnRYWlgvRStXeFBYTTc0RFhUVDlZZHhnZm4vUWZ6TlBGc1NmelBlajNXaThVM0VZODIvRzJlNWpmOFFYbXY4QUF2SXJUTC9aUFRVdUNHK2pmSGpuRXQzL3orT255TTZObk4zYktrdytjeVFUOXZTK0JOaTc4TFVlVGhuZlUydnhaa0U0emVKc3puLy9weEJNdjZPdWMrNEs4ODdNWDhuOU5IMFhWbHJHTCt1Y2dlYXB4WDduc2Jub29QR1o3RGVOLyt2bk9VMkhzUWFKUEpCdHN6ZkEzdnIrditCdjJwNmU4YmEvSzhxN1VUakhWVzNTY2FmU242bW1QOVB4dGQ0RGZmT21PY0x6Z0NiM2srKzFoeVhkUWJ4R2RPN0ZlS2x6NG0rMUR3bm82Zk9wdzR4ZHZPZnl2a2kwNmZqcjBiZFpCTktXM3V1SVQ1ai9DM25USVRUMlVoc3IvRjl6SlhHbjZrdHpjMS9PbXRKNFdRVFZMZjI1bW1xajQ3bVdVVXN6blJlemRiRjlGK1lONDNQUTMvTnN4SDZhM3AzMlkyK3h1Tlk3N3VzaTJWREJwbmVGLzExMm1ib3IvRmU3SG1aWjRiczNrampZemczYUo3M3RNWWZhL3AvOFYxTm44Lyt0ZW5uY3M3RTlEZVMvZkw4SzdtZGFseVZjcTBMeHlwbU5kMzBtemxmWkh3Uzl6QzYvbXVZcDAxZnlSenEvQmVpcDhiZFdVZmJQdXlFempydG9lcXJOZVlaeGR4cTNJZnpoTWF0MGQ5dHJKdmM2eXVjZkV0aTVxYXZVaDgyTVAxV3pwYVl2Z2gvMWZnNTVsbmpMOWxQRVU3bkRSaHIwMzlUUDNSMFBodXoxMm04SjJ0UDR3TTVQMlo4TSt0dXA3MkIySjF4TTMzME5VOExZbmVtZjhlWllkTnJGKzZsT3FFUXMvMUFkUmhrbmhQWVV6T2VqNjB4UGcwYmJ0eVZmUzduMzVVMXFmSDlyRW1ONTNHMjBQeDNFWGNTVG0vUmswODQxVHhuRURNeDNwdzFxZnVITjdQT2N0b1RwY3Z6VFA4Tm0reTF3eVBFZkV4L25iV244NW5OL2FwUkgzVForWnlqOFZwci9DRG5SVnY2RER6M1R4bjN4WTh5UHByOU11RjBMd25uRm94L0VXNHVuTzUxNVo1aTh6ZlZqMjNOYzVMNnFxT3hIa0ZTNm13OHJIQWU0QzdHMS9RTjlOSGQrQTcyeFp6bkI1d2ZNMzBIemdBYjF5SE9ZSjVmMkY4eC9TaldwS1ovamw0YmI2QzJEelBQdHV5Sm1QNHBNVDIzcFhFaExyUVA5VFRQTzV3ZGN0cE4yTXMyL3BNMXZ2dTVMZXNYNTFPZGVjMXBEeWZ1Wi9wQnFzTk1wOTJHdUpEeCsvakd4bDJWenhMejc4VTlxcVp2cjQvVnh2T1paOWYzbFQ2M2RmeVFlMnFFVTN5QXMyR21kMkZ2eTdncTV4RE1NNEJ4RkU1bml0alBNdjFnMmN6MnhvOW9yZEhKZUhQaVFzN25HTWJPOUgyWlowMS9RdVBlMC9Rak9WdGkzRTgvOWpOK2pYbkYrRVB1WjNUYUxkZ0hNZDZMc1ROK1J2a01jejAzWlAzaXRKZHpiNVI1dGlhK1p6eVRlekdNdjhRbUcrdXhBYVh4VHF1a3BZbkc3eE5ETU04ampKM3g3c3l6NXBuTVBHdjZGT0lNdmtkamhuUnpwdXMybFhNbTV0bEQ5VnpndEU5b2psaGkzSkUxanJHU2xsWVpiNHROZHRwZTZLLzMwQjhUWG12Nk85aG40L3JvNzNhZUwvQ3ZqSi9DdnpJZUlCem44MXV6YmhVOWpUV3hYT1BoK05MQ2FZK2VzNzVPdTFJZjdVMi9qMzB4MDhlci9wMU52NU56UjZZdllpNTJuaTJJTFpobkFjL1pNLzZZTTczR2ZRdTZWZzFmMnZRQnlJRHozRngyY29qeGZzeVB4dGNUY3pCK0JGMDJyaUgra2NZZjR2ZDY3WFk3c1FqVGE0dG50UEVUN0k4YmQyWHZ3SDAxSGZreC9YVDJ5bzBuY203UWVDNCttL0dXbXBzbXV2N1hzM2RqK2tiSWtuRk43cnMwejAvRW9FeS9Rend6amZjaTltaDhJUEVOODlkbG5SWDMwN0dIYnA0cTdKc2J0Mll1TVA4ZHlKaHhKWHZsNXZtYTlaZnAvU1Y4YXoxZXZiSC8yM3VQR1BreFBxY3dsODJYUDF3aGVqckxpZzBSVG5GNzRwRG1YNmlQbHFaZndUbFM4Ky9MdVRYelhNMCtqdkZzNHBEbTJZbXo0cWF2WTQvVitFbjhPdU56dWMvVWNZRFJ5SmpMK2d6N0V2bHdiNGp4R1BiS25YWXFmcnY1MitPcldIOVB4bTgzei9lY0QvUzl4cThWenBLZHc1bFYrd24zSUcvbTM1TXpiOFpOdWEvRStERFdkNjdENGF6dlhPNXMrWkFUalBYWXpOSVU4N1REemhnL3lMcmJ1TFBLbXVVOFg4SDNNLzRQZHNhNFMrSDg4MGFxd3dMVFAyYS96M2cxZSs3R3g3RG5idHljK0pqeDN2aUhMbmNvWngxTi80TDRtT25YNGYrYjNoUC9zSlhQaytpanVuRGFTMlVkSjV6aVk1enQ4WjcreCt6Rm16NkV2VCtudlp5elZjWS9zYjV6UGlkeHhzYjhlclZmcVl2cDNianZ6L3ovNVpra3BqZlRSeS9qR2RnWDQ4WHNHUm0veDdPRklyN0hIcTdwQTNuMnNzdHFJMXNkY2VZRDJKdHdXVFh3dXh5cjc4TjVHNmY5bWZQRzV1bkMrczcwM3V6Rm0vNE5aeXBNZjRMejU2WmZJTnM3MGZRbTlKWHByeEZQTS8wajdKSHhQR1F5ZUNSanMweS9rSDE1MHpmbDNpTFR6OFhPT0ZaMkgzNkY2UGlmelZuclJidndEODIvSFhPTjZaTzRsOFQ4MStGTDdHQ2ZpaGkxY0RvcndwZ2FYNCtmYjU2Tk9UdG4vRDNqYTN3VzhXcnpOeXpvNWxPY2NUWFBmdGdLNDliWUN1T3ZXT003N1crY2V6UStqbjE4NFhRR2xYTlR4aVY4ZnZPY3d6MjV6cWN6Y1g3djJkM0RYR1A2eDl3N1pqeUljNjFPdTVhMXZPa2I0aXVhZm9Ec3pHampWL0FQWGU0dDNPUGd2WXdaNnBNSlR0dGQrM1FUelgrMDhwOWkvbmQ1MzVqcHcxanJHVzlkdU5meVYzVGY5RGFNci9FcVlqWE92enByZWROZmxNKzJ3bmdwOFJtWFZVSE16ZnpkZUJ0K2E4ZTQ1TFBWTm42TCt3aUVVN25jRTJyY2xyMG44enhhOEpIMkZtNWhua0hZZi9OMDVmbEN4Z3RVejQ3bXVRZGZ3bGl2NXlwMU5zOEYzSzl0K3NIb3VQSFBuRkVYcHY3OThTZk5mNmYwdEoveEo1eVBNcTZxajBIR0xkVnZRNXgyTy9HUGNKN1ZlYmVIZVhaV3pHUzA4YW5FZTgyekQzNmo4VVdzNWMxVHlWa2EwOC9oTEkzcHkra1QwLy9CT1Ezam56aUxibndoUHFUeFc4VGlqRy9uWGtXdi9hZnAvcEZaem5OajlObzhkN0RINGJZc1VIMldtcWNENno3ekhDSVpXMlc2WGlGVldtTmNvWTkxeG50aXE5dFl0cFZQaFhGdnhsbzRuWDNpakkxeEw5Ynl4aVdWMWNLNHVlYWFsc1pkcEF1dG5NOXA3RGthdjEzb3o0dUkxNW4rSGpFYzQ0NmNWM2MraHpMdkc2K1UvUFEwVHd2VzZhYXY0YXlzY1J2T3lBbW5lQTR4YzlQUFpFMWh2QVh6dnZQcEtzSXc0Ni9aYXpiUFJPeWUvWXF4clBITk01LzdGSngvUi94QTgxZGlvK3dQekNKbWEvcGQrSVRHWTRuWk9wK3JoS2NZdjhiZWxubjZzZDQzdlJtMjNmUi9zODlsUEl0NytZMlAwL2pPTS8vUHNvZUxqRjltVGpmUFVHTHZwbC9NdnFUeHUvU2RjU1B1UXpIL3pwemJhWnZwdzFuN0N5Yy9VUDFmWWZvU1BWdTJzZkYveGRQY1BEdHBqNk9GNmJ1eVQrU3pIeFh5ZFZ1WmZnUitvREI5K0NKckI5UDdzWFp3UGs5eFBzR3g1UldzSTh4L00zRUE4NnpsUEkvVFBreWMxdlRheEhtTTV4T2ZOejZkTSszbTc0RU1PTS9idUk5TW1IbHRtcDRYTk5vOHYrUHJPdTJiakxWeFhkYjc1bW1vZGswMGZvVjRyUEcvaU9HWS8wTDJtbzNiU0M5bW1PZHg1akw3UWdzNUUrdjYzQ3YrQmViZkE1L051SmIwYTRueGovZ2V4bE5VN25MbmVTdnp1T25Mc1BOUk45bVF0Y2J2bzdmdHZKWlgvcldGVTV4SEhWQmgranZvdnVsTjJZczMvaFRkTjc0SzNUY2VVM2ltemIyY1BUQzltdkpzNVR3cldEOGFYeWg2SitOcmVRZWk3Mm45Z25OQlRsc0wrMi84UERGODQyT3gvMDU3SS9KZytpWGNSMng4U21IdGZJQjQrcHErRlRFSHB6MmdjTzlEZGNuMnFhWmZpaDlpL2g2ODY5MzBEWGllZ09tYmkyZTRNV0h2RWVicHpMMFB3b3pqVUo1L1pmcmg2SUw1OTFDQ0NhWmZ5Ymw2WVdSdk8vYTFUZStwdERPTnowYmZuZllZbm1sbStpYXF6NktnTSs4Ynp5ZjJhL3duc21IK2s1QU4wN3RJYmxlYjNsQWZhNDE3MEpnZHZXNGloaStjbnQxSDNGNDQzUU5PM043NElPVEJlRlA4RStPbmVNYWc4VGI0ZThiOXVYL2NlQmpuK294UFpHL09aWFhqYkszcnNIL0IzMzZQZWNIOEwzSWZrL0dCckFlTkgrTStKbU1DT25IZjYyam1DOU5IRUFNM1BwWDV3bVU5VC96UTlEazhuOUQwRGRoVE0zMEpQcUh4SW54Qzg1d2wrUmxodkV5RE9jcTREL3V0eHRXNHY4bHBiK0ZaUGNaakN6cGJSeDhUekg4aSsrbkdYVGhmYmY3RHNDM0d0MkZiakgva25JRHZjNm5KZmFtbTk4S0hkRDZuYzI3UTlCbWNCWFdmNzZWeFgyS2VwWnk3TnM5dTJuZFlZZnBzelRXcmphZXpSMkNlMDRsQkdXL1BQT3MrUDVLQTJrN2U5eVFlWmJ3MzUxdUV5ZWQvT0U5b3JGZS9sWm9hWDRFUGFmN3V1dkdqcGVrdklEK205OGV2TUgwZzg2L3ByN0EzWlB3RDhVbmpYWWhQbXI4Szk2S2FmaWhubkV3ZmlweVlQb3Q5WHROL0pFNWxYSXQxb3ZHdHhKYk5mejE3QktiZmd0dzZ4aktDZUlKNTNpZFdZRnlQV0lGeExhVWQ1YlQvSzUwZGEveDA0ZnpxWXVZZzgrL0ozcjF3aWh1d1orMzdFQS9DLzNUYXM4US8xZnlQSURQR3k3aDMxVHd2NFhPYTNvUTV5SGt1Wmc0eXZhOXM0Q0x6THhYUFV1UFRpQStZLzFqdVV6YjlPdDRuNk9mTWRDZzg2M0lMZkU3ei9FbDhxYjN2SzBRZWhKUHVzTll3L1QxaVNxWVBVSjJiRzQ5bGYxQVltL2tyTVFIVDUzR2V6V2xmWmg0eFhzS3ptTTJqNlYzUGRmSzVDMkxVOXRsR3NEOW9laVBPZXh2L3duTm1uRTh6N284ejdsOTRsdGROM0V2dTV5T3RZQy9KUEVQVWI0T2NUMWZzaHVuUG9pOCs1MUNER0did2M2N1kvTWNWbnYvWldybzUwdlRuT2N0aC92L2x2TEhwSnlqL3UwMWZpMzlpK3Ruc1FRZ3pSdDhTUXpDZVNoekFlRERQVVhUYVRpcHJudE91eHA4MC9nLytobms2RUVzMC9YSGhWYzduem9JZFBrajVyRFhQaDhTRmRvN25hOGtPR0crdCtHRnQ0WFFXbXVka21uNVVJWDQ0Qnhrd3ovN3NUUWhUVmszdWtUVC9JZHFiYUd1ZVJlaUM2WmR4SnNmNFMrWm04M3lHSFhBK2M5Rjkwdy9YZVBVMlBvcDd6NDNuRk96Yk1UeWp3UFNqaVNFNC8wWDZHT3c4WitKUEdrL1JSOXdiKzQ3eUhPVzA5YmkveHJpS2JQWGR6dWMvNkxYeGNHSUZ4ZzhYbmpmN0d1Y0JUSjlKWE1iNTFPZFptc2FmTXkrWTV3aDB5dmZ0L2tRczBYVjdrUHM0ekhNdFo4aU5sN0JQNFh4T0prWmsvcGFzSzgzelBtdDJ4dzNPWTgvQy9CdHd2NVY1SHVSY3EzRjF6bWlaWnd3eTBNSHhkcDVGSTV6V0k4U1JqTS9GeHpEUFB4aDM0WFEra3pQTTVqbUtOWUo1bm1OdjBmUS91Ty9lOCtCVHJDK2N0aFpueTQybm9lL212NWYxby9QcHAvcjBNLzBBeHRyNHY0Vjl2UjA0VTJkNmM4NjRPdTBPck9Yam5sLzJwMXpXUmV4UG1iOHE1eDZOUyt3cE9PMEQySGJqWnBLSDhjYkhxS3dKNW4rYnNUYStISDhnNm94dE4yN0QvVmJSTG54STQyT1o5ODJ6SXpFRTR5T0pJYmllSDZxZVM4MS9EL0VpNDdFOHU4LzgvK1RaSStidnpIN1RMbzZETWI4YlYzSTIwdmhVN25jV1RucW50alEySHNSNUQrUHZXQytZZnlraFpOTWZZbjRYeHM0L2pFOW9QQWs3WS81LzRWZkhYbzgrZWprdGhMN0d1L0RjU1Bza3I3RTJkTm9mc2VmR2IzT0cyZnpWOURIWStDTE9MWnRuUG50TXh2dkl2bzB3VHkvMmtremZpWE1neG5xTWVtbXNlZW9TT3pKOUdIdEd4aFBRY2VNM2lROEkwN2R6ZUplcjErWVBzYmRvbnYvQkIzS2VYMHBXWnhoL3hka3RwNTNKZlZqbS81UnpQcWJ2alQvbVBlZzYzR3RnK2dLZTYrdjdRZnB5THQxNS9zNjlCdVk1by9Bc3BnL1FYK09yZVBaSXgzak9zOFpYT08zUHNwOWlmQlZyQk9PZmlOMElrLzlOUERmTTlLT0k4NXZlbmJXQWNOcUhVbjI2bVA0YiswSG0vNFM1MjNqbmdvL3hJMmU2VEwrVHRZRHhrZmgxeG8ybFgzMk42OUF1eThaQnJBVmNWbHZpQnViWm56aVM4VGpzbSsxd00rNWZNSDlyNW5mejdNT2NidHhPUHc1M1c2NWdiV2o4SWZGaDQ2MDRCK0o4Rm5LTzNXa25FeU15ejg0OFI4NDhuN0kvYUo2K1BFZk85Ry9SYTlPcmM0K0RjUi8xNFNMejlPWWVhdU4zZWFhQmVXcHJQYmpLOU1tME1kckNQYk9tZDBMZmQvVTRvdS9HUCtLL0NhZllEbWU5VE45Qno0dHJiTnkvY005cFQrTEc1dS9OWEcrZUF6Z0xaUHFPeUlQeHBzaURjUnZ1aGZHZWJBWFBrWFBhSmV3YkNxYzVuYldBWTNmajhmUE5NNXoxa1hsVzRkc2JmOG02enp6UGNYYmErQmFlYXlHTWJGK0Q3cHYrZ216RkNOZm5NbVV3S3VqczlaaitEckppZkEzUHZqWSt1bkJPNExqQ3ZaUHR1VWZNUEx0dzlzQjVOc1NITjE2c2lyeGduaG5jYTI5NmRYeDQ0MmJzRnh1dkZQOGM4ei9Ccy9YOGZOMzlaTnNYbUw2RytkMzlzQTMrdk9rZjQvOFpQOHQ1UCtkNUNYRkM0OW1TcTlKdVBnUEdzOFdFMDNQdHVCZEpPSjExNFoyZjV2a0EzVGR1eWhraDg5aGM0MjNvdlVKejlQcUNaU1c5RGlJOWlLZUdndGJWU2h2NUNacThVWVZmTHRYek9DYS9WYXA3ZjlVNmVzTHg1cVVyU2cyUzFXNklSdXNkQ0ZWTFcrdmJVSDF2bE41Y1FpcTlxREtkMy9oSThsYzc0WnA2NDVCZUU2R3ltNVJxcThVajlmYWdUVXA2bVZaNnJsd3QwWnVXdHRQb0o5a3NiYUNjVTFRMi9WNnJ0RzFwei9UMkg5NU1RVWZzTDFxRnl0bTJkTHR5cnBXNE5renZ4ZGxIM3pVRDYxMFZtNGhDTGV2cGYvNTkwOUptdWtqL1NKNjNpT3VrblJYRllzUzFVWDZEUktMVEQ0MUtkWldxaXJheXF1VTVUNm5vODB1RXRGUXZ0VTNjdzB0Nm5RU3ZYZFQ3SmlvZm1LS2UwalBtTzdQL0pmWU4wd3Q5TkZ5cTVNYXBvazNUNTdaTXZTa0ptV3NxUzRKUDEvTUNsRDNTYnhSQlJlcG53Vk51c2h2cFgwdFJ3STFTQlNySFBhVkN2NmhHdy9LUXRWZXEvSzJLVUs1OFdwQUpiWi9vRGRNdjJ5UXV6V3pwRytYcjVaS3EzNDdLdmFsd0J3bEJQWjdRbEVPeDZTK2RXU1YxTWk4cnlwMlZ2MUViR1JDWFZTdmxtSTc4aVl2YWsrNGdjVlVSWlRQOTJrS29SdDRRVmZmekY0NXRzMG5LVDkxTnc5Ylk3VHBLZVRmSk4raW1uQnVub2FlY3RPQVZxcS8yMUhROW9OTFRkZFdQT1NkeUJ6VlI2UnVKYnd0eHgyRFhTaS9LeWI4MzFraVJYeFg5clNFQkNaR2dmN0lvcFFOdENXMmwvdXlmTnp4RmJhWnY5VkxycXFoTmpGQVdtRngrOC9TSlhLUTNtU1N1V2hvSitqeVBHNXdWcVorYmFRd1pwVHFKdnJGNE5pNVZYdm1zeG5rSE1xdVNaRHRyRmpwU1Y1UXE2ZjN6Wk1CbkhmMnZuRXFDSjZ0UlNLNWlEYVdoZTZ1bnl0R05aSzlIa3FUMG1TYzNyMHFTLy9wNS9hUXVZMEFySkpaVjlmYVpUWlFLL1VDWDZIUit5NDJzcG1wdWtmSnRveHkyU29OUVhWeVVVS08wdWI3WDAyY01JS21xNm45RkVvVEdlWDUyTFpKdmFKWFlMTDE1dDE2TzNaaE9LN01nN3EzOEtUdEZ0Vkk5eUMyM2h2Wkc5MGQvNVVIZVVuK3hJSFIrTmZjS2VlUzJaOEdqVEZTVk9tUlIwVHljWndwejBmY29WWVAxSXJKaGZqS1dPT2habEE5eDNGUjVaSFVtSGJYYWNYMmRzWDI1cmxsWXE1VXFmM3hCNC9adGxmYUpKNVEzMXpzTFhuVnhiNnEyTTJyVWpGN2tYM3RSeVIrTytycHlYeloyK2pxcWE0WEswNk1zVTkzQ0JsWlR1VFgxUzBQOWhuWE91ZEczV1NocmFGVG8yOXBDdEpiZjZNczh1cm1NVU44R0Z2a1dxWGJZMXpBUE9jL2d3bHhVU1gyamQxUXZmVW50NVVsZWJtWTI2TldsTVdnbWcxU2V0bEpBSWpVY0xnWXBDMi9teVNZNjNSU2V4S0txTlRaUEoxclNtajkvejhOTmg2b1MzMHhMblY0dERWUzJYVFdTSU5YMGtPYUc4MnRWNlhuYWNIRnUyZGFWVlNjM2wzeHpKNGR3TU5SWjVLbGw3anpVQUkzUEFzNTBnNkF5Vkhub2NzZWlmRGtYWmhMNnBxYnlyNnFVS1FBdFd2V2tXQ2hHV0J6c0M0TEs3MHorV1Zpb2Z3UDlYdm41eTJydjdQUXVNUVp6czJSRTZLRXNsUFZTSHRTTVljL3R5dU9TQnppR05TdEViZ0dxenBEV2RKL1YxdDlxU1loaWRPcFlMSXJpa01XTnoyeldhb2duVkRiYlRPWWl4REtYZ3Jya1hNSmtrUys5SGQvNWkxb3d5OUxtUEhNeTF6Qis5VlBxK2trME4weTByRnE1ekd3aWE2Znh5ZU9lQlJaWnlEMkQwUXVsekxOQUxqSFhMc3RJV1E2eUt4SEtXeDdKcGtuVjg5eUZPbUNFd29pUlA2VWpwZGswOFoxK3paTER2N3JyelZsVzBuS3ZNb1paZmtQQm1SWHpiOURRaWp5cklYLzhRbG5JZVpiOW5LSW8wY1hSeWlPYlRUZTltUCtSa3lhY3AxK1hURjIwa2FxVU93bmxqVzZnMlNGQVpZVkEvSnRJMkxLNmxEdU5HWVlLWnB1ZmhiZWE4c2hpa2pzaVc2RGNCZEFxbjM1RHhZK3BVc09PVE02VHZCRkZuREZvMmFibWN1ZzZaa3BTeDZCV3R4TFNWTlF6bDBRMzVlNUNzTElibEhQT3RydEI2Z3JzWXN4ZmRmUHpkdEwveWdVelZiTWpRcUt3VURIaDV2NFArU3ZidUd5M2NtZGxLeFVqa21VZmpVOTJhOHFieXZvZG5obGphMGVCbEpHN2g3eXp6NFFFVTI3a3cvZWl4YXErWGdKSms2VXFTeEJkbEcxWmNPYjhtOGlEakdtTWJxSm1JZE5vTVIyTE1HUTl5Nm1SNnNpRndTOVBRMWtLODJma2w2MHRBeHdTbmUwVmd3V3VwaW1ZMzlHZ25BN1hoNVI1a0NzOExNV1dSaXRqRXN5V0hJN2N4K1haSmdRd1cvOHQ3YTJTcG9sRk9ic2hsSW9vSTI2SUJ6WTR6eFI1VkdsbjF2L2NVK1VwTTVkT1htVTlycnptSFkyb05ubGlaVk5YdzFvMmlkbGZ5aDJkalI2R0tRdFE3b0E4QURFSmhlcVhtMXVqVkxtS0lyVG5tZldZdXZ0ZCttNXRsakZHS0dlYTFUaGIvT2pOTE9wSVYzWkJRcTFRamhnTHRXYlJ1eXFLV3luV0c4b1liS3hFdGdKbGpjOGVMQk5CYmhWWlZ0NDdXMWtvdWhOV3Q5aVBaZmtybW85R1Vqa1NQY281TFBzTFpiVXZvMmhmVkNubXFXeHdRaDZ6R2NndVVRcHVteCtqUW9PaWU1SHRYQlBrSXErU3NJdGhGTEpVUnVOemszUFAwOWpLYSthcXhndTU4OGdtcmRqWFVaZGlhMWtYbEdmUXNtWXpucm1OMFU2NkZxc1RkT2FWc0E5WWpXaDVOb0xsTW5MdjVTVkRPRy9wOXFoVUkrcVdKU2htd2l3aDRiVFNPc1EwQzE3bHl2ZlVQbDVDWTlHcS9CUENIYndxTWJHRnNRbjF6MHBOdzFIcVBDaGx2elJQWk9sOU9tbkFZenFrRXJHd3l6NTQ1bzBoeW81TWJnWk5BR0VLa2JwY2czSlRXU2FIQTVoakVyR1VMWXRJL3NjeWp2enlQTUhBa2lwemxEdTFSbkp3OG9JMEJJSGFrQzY0RzY4M1ZtWERtamxqYXZpckxzVU1sZnNoUkN6M1RYbnRrS2NZeXNJK2hGOFBGODRhS2h6OUZTV1N1bkw4aHhxaEE3TWFsdTF2TEJmcEJMbzlwQ3drUHJ5RkxGK2hQUnJ3WDhqdU93V2RxQXllWnRGN2lXNlBXU3NzYTY3WWhuL3hTUDQ2QjVJbUQxSTBtWWJsR2FSc3kvRjZ5b1l4ODJTQksvcmtSUzNMeGpmVHNuZFhkbDNDbWRFdDhuOVpBR1diQkg4T0V1WGN3dW5JQTRZOXlQa2p5dmp5b2EzWkNtZmZFLyt3UEQ4VTF4Ri94V0g1Y20vbU1uSktPUjdMUDFLUFQrYU85Ny80Mll4QUh0Vnk2cnpTaXVWamVTWU1IeVRidnFocG9MQXB4VjdKZWgrTDZaQ2NtUGV6cnh2ZWI5RzJSSTlXM3JsUXRmNm9Ta3hkWlN0VlZMcEloUUNIYWNoOVc3YWZaWVZsSFZDMlRKRzZYTWZNbjgxSnJDNnpxNW5Wb25ZS0ExQlNqRVpvQlQxWlZ0bnl1akNYUi9RcmJIa3VzZkovRjZsMWVwQnR0Z3RraWFpVVZhdTRPbzlnVm5HQ1F5U0xUa29XV3hTa3VGREwxR3ptODNLbWNzMG5LdmdaK2NkaE0ySktqYXBuazU3TGprN09KV1NMUzM2NVBCcVdQZlR5c09lRlFYbnF5VGF0Ykt2QzFRb0JLaytlWmJjdmZpdUtHTDlWVGxtc3VqK2t5VEdueWNPWHVhTGZzcE9ZMVovT0Q0OGlwOGpsbGllOTNJY0VHTXJDa3gzdnFHY0lmOWpjY3EzRGJPU3h5WXY0b3Vtby9IeUphc3ZabHZXZEdRMnRYTWRQOTh0Zmo0bXdtSGw1Q010RmgwMkxWV0hXa25KWUs5dTY3TU5sL1EyTnpJTVF2bjVaVzZQYUlmZmx1c1N2NGEyWE82YmNEZGlPTE85NU1ORHI2R2k0eXNLWE94RmRMN3Q5MURyMHZPeDVsOWNwTWJXR0hTMVA4MFVQS01yT2E5Z1c2M3N4eERkbWdTeTJNUXNVZTdab3RmSWNsRmRsWmF0YStmQlNqWlFPUVlTdVpjTlkrUXJrSGFKSEl0OGNBOEp6am1rN3Qwa2ovZ3NKUHVIT2lQWFRjRm04aWUrWEZaeGM4L2lWbGJJWTY0Z1pwR2pCaXdvVDM3SlFoaU5ROW5LTDY2c1EvcndtekxJUURsTlpmc29qRndxVDFUMU1SUFFwTTNUWnZ1Y3hqWVZJS0Z2Wi9vWi9HQ3FWNTYyaXh4cGx4V2lFaEpYWHkyRThOVklMbG1WMXk1MWZ0bWJZUEg3NjJwMGZ5dlRYVUYweEZscTBFK1hxNXY5bEExK2NmbU1TaU1xWEY0NGhHQ0ZjeFNWK2xpYW91VU56RjRVYTVQSXlSM1JkMlFzTTJ4ZExzMWp4RlJXMitDMFBkSEc0V0JlV2wrcGw1U3IvajM3Q3pjOTFDTWVpNklWbWhjOXIwOVRieTc5UmIxLzVSbkxwb3hOaTliaWwzc3V1dDltWFdtbVVEdFExUVV5YksyaTV1L0QrdXRycFl0TlJiN2t2ZlNpc045S1h6bVFibDFzYzJkNFg3U0JkWXhTTlBzcjdaN3lTZmhmUkR0YlZTOWRIdXZpdGlUYTFTSyszL3FmWDhjZEZmdnVLNTErNlNMOHpSK3pZUGpmK1dxL3ZmMXl2Ylg5YWsvMFAyb0tacmRmY1J4NkQwdFprZmgzOVBlek9LNC9CSFAxazEwNTRaMTI4YXA5WDJFOFR6ek5LeTZ2NktXZXMzZ2xQR1lPVjd4NzBqZjdTQjJOR3B6Y0hwYTBiNmtYN3lKZS91N2hPcnlndk5qNm42eSs3Zyt4VWJhKzl6dkg2VHQ5UmZyVHRZbjBmSi9xTHFqdjkxZGI5ZWlKN2F2NStnUDlTeGxXNkdtcy80SFB4YjNDSzBuT3JEVHZOSEIzd1JYK1NsbnF6TC9lK2VCL1JSYnRvSysxaVM0SFgvRU9qRDZHOXdDc1JqczIwWWIweVRWMlMrb3kyc2NQMXFQSzloT01PbG9IV3V0Z3gvVkkvUHU3WDZjL1M5YXN1ZmgrbGZ1ek9NU0NPZWJMRlRIN1Nrd3QxMFRlYnE2T0dYS2xqYkdrcktlZHhPaHZHYnU5RWZXOGoyZUNpRHJTSFBHcXI3V3hlYStoTEQ0dHZLbTF4R3NZcDlSdkhYajB1OUE5MWpYNDhtZTFndCtGQnBhMnFNVDFFUWorQVkyV012Mmp0SmNnYnFQN1FrQlBhK1l6NER1YlluYjdRYjhqWXYvU1hzV2JRcTR6VGRyL3I4cGw0dStydjlwYjFwMFN2MEo0Nk1rS2RTRjlWN1RydGRvMFY4c2h0UWFZekJqcEpzMzRNWnZENkJnMzJmZnJMZHpXLzFJbGI2c1FUNDQ1dUhXVDlRb2JvY3piSTZYKyswMWIwVHRtWDNsVy9vZ05CZTAzNTBqOThwLy80eS9XSTZJczlydDk3YkFkeXk2SGJSRjhPMVhXbTZxR3VTbU5NLzFVbzNhbWlzY1gvb3hUeUxYMy9WWWFDY2JqQThoZDVwRHBwSUtIVkVCKzdBTlFOR2FZTzZEc3kvcUk2bTNIcXIrc1hYWXdoRjcvdmFUMko5cEF2WTMrMDVQbG44ZDZsZkp0WUI4NVNXZlJycEVjWDZTdjZmeWg5cG5xK2NhL0tkSDcwRjJOUG4xOVNHQ2Rra1VNT1lhdTZPZjNadGp2MEozVkJGanJZZnFGTGxQM29LTW1TNnZNTng2OHRsL0R1eS9GT2pxeUpqdXl2czE3eHR6RTZyMDZtSGZBeDVtT2NyKzRrUy9tK3lWRVc3TEY0N3RSRkdkUnhGYmZHU09ld1A4akM5NzBWNDFXanFTdjJpUDZqRHVSRGZycVR0blNhTHAzWUxKM3R2TWZwZHlWTC9YQ2h4alRraFhUSTAzdTZ2dVB4MHR5aXFYcDhJVjJnVGZCdzNBSTdpSjBQK1ExN2dhM0FubjNrdmtCZmpyQnRpWG1HT2lFNzFPTkpIdHZMWHB2SzJGY1g4aDU4L05WVE12UktlWldodnlGSHRKRjVpYjU5V21td3ZkaDY2a0hlMUkyOE95amo0b1VkM3NtOHlCZmwxbFo2YlR1V1hwQStJbnNjSzluVCtlZ2tjY3JuVU0rTHpFVzd1WS9xYXV5V2ljRG0rS1BLNkdUeHpwYXdoMzEvVGRldE1qWU5QUmRTSnZXa2I5N1FoUjAvVm9JNFhJUDJrc3AvbS9sTTF6dkNCNDBwMnpQNjRRU08rTUdqaTdHRlR2MCtFQi8xWTl5Wm83RzdYRHFoWDJwMG4zVFQ0NCtNWTEvZ3ZVLzBTY2k3NnNWRm0va2RmWHdWdlpiOW91ekpTdnVBWlJWYlFUNzBkOHpWMk8yZHhJZHM4bHZvTXIvZm8zejZDYmZqVml6SjZaVzZRaStvZTlTSGVaVjZ2NlU4SnV2Nld0ZEtsOWxhZW8xZFJUZkpYM2Q5cEx5ZnRSMm1YL3FyQU9xUGpVVTJrVEhzSGVtZ3B6bGMzK2RZRGtsSC8wL1E5YVF1Zkl4cGx0blhkTkczNU1NOGdLdzhLeHJqaWN4aEo5RlQ2czdGbkVWK01kNmtHNmk2UGF1Mmg1eGhHOXVJanN6d081aS8yQnF1alcwUHFFZTBHeHMvWER5TUtUSittL0tqUFBncGkzYlRGNXRwbmczYlNKdDFCMmxxVXpmTDBlUGFqTHBmMXlUSjJCbnF5MmcvVitLblBjcjdJVjNVcjFQZjNHZU1DLzI1aStZMitqMzhzeTNWR0d3Qjh5WHpJMzRKZFF6L1RLWjV2YTBKT1JndmZlaWl2QS9YZGFRNkJSdE1YOTdDcTFZc0IrZ2J0dUpCdDU4NUNmMUZYMmd6Y3dWODVJMnZGbmsvWnY2bFBIcFRobmcydmdhdmR3czc3ZmtBWHZKWUpnWEdWdUduOEZ0SEtTTy8wWi93TTlmRzlSUitrTXA1bmx2RWRTSHIxSk81RTVzTC95SGNqb0VjU01jMzRiWnAwWml6NlplWitrN2V0TDJucnYwS2MvRFB4K1c4TGo4KzF3T2JBQyt5UDB2OU1sczhpMnp2YVJQNnBkUDQ2K2QzYkQ5dEppM3pXTktKZ2t5anEzdktsaUg3WFRYSTZBOTZFZmIwVkk1K3luRkVIcEFUeGo3bVp2Smt2aUZQN0ROeWdKeHNiMTgzMmtDZHNXbllNT3JKT0lRZU1YNzBBMlA0SExZTWZkSVY4eThYWThSZmZHMyszaUcrSDJSM1J0aGU2ZlJtcWdQekhkZkR1cEJEeG9FNjRWK2hjOURDeDBJL3FWUHlML1RiRG5KVzd0RzhqT3pnNjhadno5eVFiVG0ralU1MnI5Y2g3TVJUUFA3V2RhTGVwQTFmUlU5UlQ3SVhjOXFpTzVXWDZrMmU1SStzVW5kMGxycjM1ekVMNGgvTjQ4cUdTUS92MER5amlRVDlPTnJ0dkYvMWd4Zk0zQnl5emZneWQvTzlPSC9yTkhEcEpGMlBtdzhkUWQ1aUhrT2Y2UzlrZ0RrY20wWmYwWlpLTlJyZkplUTk3Q3JyRHZKNlNiUS81UERRVDloay9qS2ZZc2Zld0VaWUI1Q3pzSmQxTkFjeWhwRm5COWtJNUFkZmhqNmtuN2lvKzBUN3V1UjduTkw5UTVlMjVFc2JhdzJLWGNTbkNsdEtmck9VcG9FYUZ1c0ZMdHJKWEUyOUdVUHFIYkpBZWVFNzhCMmRpSHFHblppaVBNTyt0YkU5VGVzSGpSWGp6RzhIU3FtYVNIYW1XSVlQMWhveGZNVGx5b002ZExkOXZVTlgrSXNEMUxpSFZUY3dOaEc1aUxtSitZQjJoejFGWHFnN2ZZYzhVWWVrWi8rUGphWjlZZE9DaG8ybnJhRkh2M0JMa09VMFpJbjhvMTlJeS96S1BKUG1Vc2todjhkdjRYOFJXV0FlV28yOTlOcUFlbU8vS0N2czJXRzZzTDh4RDVNUGJXUmRoVzNRVTZSS2plUzBqRkYrZjhyZTBYL1lvdERGSzJTZlRuU2ZZNmRDZnFsYkx3MHNkYU5zL0cvcVJ4blVnN1VidWgxemZheXhXV3QyVmJyb1ovbzRmRlV1K2dQN1NUOVRCanBER1Y5NDNzV080YnVHci9PcXJ2clduYkFGc2Q1TWRsS0tRVDM0dnAxaytBS3RMN2JYM3lYYU00MXkrVHRmNVdKZitZNU5DeHVJdldVOHBxc1BtRU9SWmE2SXBkenQ5UnQ4OUZHYWoxMGVZNkZUOWFVK3RnMnNCMmdMOWNZK1FEdE8vUXVOdHVGcllwUDVuYlQwR2I1OTBBZkpIb1lON1NGNTdxQXIxclRZdE12bEJ6QStkVlVuNUlaNWsrL1kvZkJGNloraS9XZnhHSDNQSEl4TW5LdTZoVDlMT3licCsvVnEvelBDaTdXMllINGhIL3hYMnNEWTA0WnplZnlWZUhkbEx2TTFnTDcwZklDK0VXTmdQWFdFQklUMTFIUHFUT2FNUjEybjBEbnFIZktiYkYvQjV0SmVmTHJUOWYxTjdLWEhJdVp1OEJMNXNhU2p2TERieE5WaS9ZbnNNVzR4ZHhDem9WOWpub3M1bGpnS2FZYW9iVGVJeGpvajlQT253dGgwVjJUdlZHNER6RjI2M2w4SmZ4TTZQa2pVQmJ1VDVtNzF3eHlsMzBYMldIZVhsbnBLRjV2THpzS0Rqc0x6bHRZT0M2VUlrK24vdi9uNStMbVJKekVaOFAwYS83bllQOWs1K3JHUjdjWFZ5aCs5UTE5dmxpS0dqaU03TCt2M1dCZlNOc2FpTTM2aDFpQTdTMS9HWUFNc0UyZklkc0hML0lMYzl0RGlnSDVoZkZqUDQxTlFIMlE4eGl6cWNZZm0xckF4akxWYzJkSzFrbHZHTVBuTHlxKzkraUw4WjhhSHRjMC8xTGlKa3IySWMwd3J4QnRtRldLVXNWYU5kUXRqcXJjdHJ2ZWRzTXVrdTlmclYyaGhhNmgzR2hQTks4eHp5TUFCOWt1UVlmb0plMG1iQmtvWEdRdDBLK1paNUNER216bVN2dHhESFJKMUlUMWxVZ2ZLdzBlblBPUWk5WmtFSjlaZVNlWXRlNnh4U0l2TThoY2ZuUFUrWmQ0dVoxNTNOSlh1VlozbzQxMTRCYnJIRmYrWU5VQW42ZGlteXF1MUhNcjZrcTltc2czN3lPNWM0MWhWeEUraW5SRUhZMzFEK2VqcVNHVjRuZGNzMUdHQWZNQ0k0WVJ0b2QxMWxULzZmYlR5UUwvUmU4YWE5ditxb0haUlp5NlJUTVU2NWhDVmdjK0JUeGJqeXRoOG96bUplQ01YN2Z1bjdWVFlxdWhiNXRNWUkrSW1JUXUwaFRwQUo2NzN3Ti9pM01YWUZmM01tcU9GTW1mZGhHK0ZQYUFlOU9manVsdUhlQU1YOWFHUGlFZlRSNndEOE9tWmowSS93d1pHUElWOHdvK0krU3JpNnRpem00azFPbjY3ZnY2eXpJV1BUZDRoZDJIN2FUdC9VeDlmb1RpNC9YNXMzMkhxNDYvdmxpL205WEg0QU1nU0YrbmlMNzl6UmY4ancvUTVOcGgxQVhYQmRsQ1hrNVR2YnBLcFdHTlRoemMwOWxIM21BL3hRNWszcWN0RzhndlJ3OURyWXZ3bytSUE9POG9uem9KdUg4NGR2YzVycWV6QU4xcERocjR6dG1IL3NBdmdUV1EvenltMEkvSkg1dmw5Z2VhRzUyNHIrNi9KeC9iZms2VlBWL0VJWXdYY2FIdVBtSVBjSm5qTzBIaXdUNEdOb0IwTjFMY25pb1plM20vZERCbkhCakRmaG85RWZMYVg4bWVOZ2kvRUhJb2M0aHN3dDRldWhNeVFmL2lPMUxXZTdERXlGenFMbnh2eWRxWDBIQnZOK3FpRitGYUlSdndCZXhWeXNwVUNRNnNsMzhnSFplTC9NOC9NVkwzdVZ6cjZFNzVhR3F0WXg5Tm5UK2t2K3k3VUFWdUZuc2I4RWZhQ2d4L3dIcW4yelZGZG92K3BlL1FGOVF3WnBHM2t4UndXY3lvNkJCOTl5RHFBZWxNbnlxRmU0UWRRRi9KSGovaTduWDN5UTlpbkVmTm5tcE93UDZGbjhFUjk0THRTY3RUYlBsakUyeHBxSGtJbTZiOFJ1cUp2bys1dmlhYmxZZWxXNWxLTi8yWGVUOEh2SU0rTGJzMlljbGk3MDYva3oxNFIrY2NjUUg3WWlmQmoyWU9DRHpsSXNWRDNiY3dqdEtldDdBUHRHYTl5c1ZIc0o5MHVmYnRHQ1Q2UVQvdU8rRzdVOVlYN0pud1laQno1UVpZRHg5cUZlV2lVcm1YWFp2bW12RmpiOWxFNTRiKzhLbWNsZlB2VWh4cGIyb0xOb3M3b04rdU5RNjByRVJPaGJjUmxhQ2Y3VnRpRGlIUEVlTkJ1OGdrZmdiVU42OGF3VC9RRlBLekg0ZUd1UEw0VEQrZjdXYXJyZVlxdmhlK1hZa25TNGJDWHlXOVdmWWVMMXVNYTZaWG1kc3JGem9VL0UzYVkrWUx4MmUzeVBCZkUzbW40aDhrUGxEK1FZbEwrSHJHV3NHdmt6WGpoTnpKZXpPM0lkNHdGYVpublVxeXI0QXNRWDQwK1FJWnZ0czV5NmVrMDYrVVluNHI1alRnRGU2UmhHeWlYdmNDd2liUWo1SUI2Ull3VkhYcUlXNFFMdjFNKzdhVjg1anhpVmFPbHc0d3hOamRpTjNmZFZJNFpoaTM4V3ZOelN4NGRxN0x4MC9CSllnMmVZakd5TmROa2JDTEdSYjhSNDcxV0JiR21pOWh1cEVQUGtZZm9kNjdrUzZ2TXZocEhZc0x3SWxmZkd2L2Irb052QzI4ZHhRUmlMeTNXdmRTMXF1amhrNFl2Z2J6Ry9CVytvSjU2VlJxaksyS1k3ZkNkUEg0UlczcWVRMjZPOVNEN2pObnVsZzE4MVBCQlE5NnYxcHowbWVUNkNlbFNIM1Z3K01QRWdVakR2aFZwcmxPL1UxZmlmV0d2OExsaXJxSit0VFZSUHVqeGpQbWlpM1dLTnZTWFhTakdLMDVUdjYyUW5VSkcrUjcrRk5kRDduZGsvdzhKSVcyaFg2THVFWitQUGYvaWZrL0U1N0hwbDdIdnB6SllkNlc5WU5zOTJvWVBHbk0wUGloWVQwWllQOFlSWTJITThEUE9VeDlnNCtKc0FuNHM5bTZFWk9hY1I3SU1jZlVraHV4NWtMcFFEK1FwMXQvVXM3RUNiK2NYWW9mWWNPdzdQUFFyZlRSYUV6Ryt4bVBVeWVrWUQrcUFuY0VPRkdQT3g2cGN4bzlid3ZURXlkS2hxaHorSW5QcUpScm5pRzNRZDJ0bGQvYm1kVzN5eTVqanNJV3h6cUpmc1N1WFlDZllXOVJtWGNndDlVZWZZLzZoYmRpTEZLUEZCcmp1akxkVWNMM3R4TFpqQzJsSGFxZkhMNTI5NEhFaFhoZnpuVDRQdVk3WUV2R3lXSE5QbFR6RXVCRy9ESXdPZ1BGL3NLTlJEK3FOZjA4K05YbGNzQzc2Y2FyOWNlb1JzVmYycDhualJmbGg1RUc3UzljcGh1SDZrMS9FQWlKV2htMksrVEgwYWdmNzdmeEd1Ylc4RHh1Mm04VjR4TStpbmFkNW5WN052MkZIbWtsSFZxcHZJbmFIUHNTK1VlZ2RNZWVZcjdHUnpPLzRkYkdPSEt4OHc4OGZKUnd4T2NhQThtSU9PWXN6TWJhdGJ4WGlqOHdMajZyK2U2a3U4RkkrN1dMdm1yMXcydFJIYVcvMm1ScnF4dm1maUQ4Vlk0ZC9seDN5RHArUlBWcjBESDc2Sk9ZM3h1WmcrWTJ4N3gvbkdlQkJab3QrTFh2azlBUDZWdlNSd3ViUU42K29ubk5WY05nTXlzUGZqUE1SUDZtZEwya01ocXBTM2IySGlUMFAvNEh2ZFhUVjFjRy90MlZiNzVEUHByYzZyYmNaeUVWeFg0TzluRGdMaEszNnk1NXlZVzJMSFVRM2lCbGpQMW9wM2hDNnlUNE9lWVc5b08yMGhkZzZlaDN6SzJYVDc4aHVyR05pbjRTMmNwMHR2NFRmNkk5b0UrMmozOEpHOGR0dGFsZXM4eUplRXZ1V1lZZWJxbzYwR1ptQmQ2WHNTYXlWeUtNZWo4Ym1YSkw2dkNpYjJGQms2Tyt4NmZPMXA5VkFhKzdrajZndFlRdGlyUlJ6T1BSTE5XY1Z6NGRSeDJmbEMwU3Nnb3R4WUM1Z0RHSy9PdmFzdWVndlBaa3I2UlU0eFFDcEgrdGt5eDR4UU1hSWRsUVY1dXpXaVpJZitwMExXeHcyR0hrdXhySGpMRWIwM3dmU1pmeUxDOVFmVDB0K3p0VTFYTmV0K3M2YUk5WTlDOFgvcy8wSGZQWTBEeFYrZjBpK05iS0N2b3kxMzRCOUhDeVpqWmcwOFQ3bU9QeGdiR3o0d2hQMFEzTzFnVEZIdnhpN0taSy9XSWN6RnZneDVBRlBySDNDaHZCM0ovSEhYZ3l5VGQyeEVSMUZSeitLOG84TzF0WDFpaVplMm9QTlNQRkEvQktQRTNXai9zekQrYmthbVFmWml2bCtkOGxhN0h0em9TTzBqell3ZHVIcm51djVKZGFBRTNROVUranI5d3A3aERFdW5FSGpuTUZwMnF2QkxsRnYxczJ4TnR4UVYvaitmMThMMHZkMTdDOVJic3dGMUNuaU9PaENmUWxFekRmVWk3Nmt2b3R0MzlQNjJHdjdCZXJjTmQ3ZlpjeEQ5N2hxU2NDZ0UxT0p1WS85c09TUHlxOGRKVU1Xc1p2L1QrZjQ3WHpKMnprOG10UHljYVh3Uk8xSE5uUThKdUk4ektYZ1FiYnQxSkUrS09aVmhYTXNxa3VYa1hsdTVYZlN3VXY4bFBRUkgwYWVsbm92SXVZR1BSbXk5S0g2SVBaRG9CVjltK2FhaXlQV1hsemJwRDZ6ZkNBRFZYVldJT0loeFA3bzg3Q2ZzU2NUYTl1WGRaMmdObTB2djQyOE9kZEszc3dqZk9kY1R2UnR4SEwwMXI5VUgvUTk0Z29oUDJHWDAvck5NbG5zSitZNDlrTGpIQlk2Z3IyTmVmQnFaYkxUWFZxRDJIOG4zNkVhZjJLeHp4ZmkxS3hCc1djeHQ5Skc4b3cyeHB4QW1idXJmWHd2eG1qRHRpZjc2bk52NE1YcThNRHNrY1grR2ZMeGQzbVA4NXg2YWxTS3Q4RFBlR08vOFpFbzR5dDE2SXNhNS9QVWhsaHpIZjU0MXJPemRNVjhGWHNiNkFGKzNlN2lJUi9xU0QvaEN6Rkh4Ymd4aG5IR2p2WkdmL0liOW81NFhxemRvTEhma1B4S3g5ait2dS9KczNQNG5iM3RXT2R5MWlSaVhzd0xiOXUrUmh3aC9JYmlHZGR0dlRmQ0dFYytIS0l1cmtzNDY2UzNweVFaSVg1eW1OYnpwTUdIQ1AzR2ZzU2FtdXNMNmVUeGltbUg3VTI2cEw0Tkg1VCt1MC9qZktQMlFoZ0xmQWZHalhHL3p2bGorOVA4VVlqQklLL3NUK01IMzY0OE5FeWx2bzU3MCtiaWZpYm5SZWhyN0FSNmlhMFBuMDFQTjB3NmwvclNkalhXb3VIZlJubk1yY2dCYzJ0cVorSGNLLzBWZmhwcmhTUHRaNGZ0RDNrbkw3MWRwdlNaMXd2VUtlU1dNM1lwVnFCMVp2aVFFVlBCRnQyaTlWUlZqUk5sN1c5N0hldjRHdHJEb1Izd3p1S2NnODlNOE5zU3ppNElveVBVQmYzZVM0WVZ1YVJmOEMzQ2o4S3VSTHptUDVxajJlTU8zeXBpcDlTSnMwcG5xTCtMWnhPNGluNEV1aGRyRSt3bitVQVBIK0FUMVlteGlUMGUxZ0Z4ZmpMbUN0SWVJN3VDM3AxaHZRcy9kSVhzYXNqMUNoVzJXQXMyZkkzSS96YnRpWjJyamJDWUI3R04rQVdjSFUvN2ZPN1h1ZHJ2ZlZyWHhlcVRLOVNtZEJhK3NOY1c1MFVaZi9vTzNjSk9vT01kVkxlUXVYU21Rcnl4YnhNeElQWkhRcDRpRGhCclFjcUV6cnlEL01jNXdtS2NBenNUZXhQUlY3UW41S21IOWpIamJGRHNOWVZQTjFkanVGVmhucUdleE5MRGZ6OWZnVmY0MEl2cjVaL01scTdHK3BuMmRGYjdxRlA0ckpFUFpjUWN4Ky8vVjlpWHdIazlmbTFQZXpHWWFsSUlVNUpwbjJyYXR5bXRoRll0MnFabWFxcXBwbWFtWFFzdFU2S2thRlZSYVpOcFk2UVVpaENTa0F5aUVFSUlJYnpYOWV1Ni8rLzFQSi9uZlIrZno0elRtZk05OTduM2M1OXo3bk16emkrTVk4WUdFSjRDKzJmUUY0YkRSa2lmZTdDWFJmUWFuUXRjUjJOc1R5ZzcyRkpqMmJjY09QaGJXSFBaeDV6RElXNkNmbGpLR0d4YzdEZktjSTQrQkh5N1JyWTk5aVYxL1BXYWsrei9HM0dlNERyUkdYVXZnN2tUZkRYaC9CYk95WXd2SnM4dU9NdHhMTXlCRFlKckFjYzU5emlXenpVdCtINjVWb1d6Sk9XbExaSzZPZGNmWkJpT21nYTdOcy9ZN1Bjdk1MYkRHc215MmI1c3EzQys5dk5EME5HNEIzTWNCLzlJc0x2eSs2c3c3cGtXTCtpSXdSYkZ1c3dCbm5zTmJROGNkMXp6K2VNNi95bnBZL1NsOENmME8yMWl3Uy9JdlozN1ZlaGo0cWh6YzU5bG5lZzNPb294TUJtTGM0ZzdZRGR5M0FUN0V2MDJRUThuRC9ZSjk1YlMrT0JtakwxbzlNMUNESzZ3VDRiNHZubFlJOE84dWcxMm9JQ25UNGpqaUdPTGV5ajc2VVBvUXV5bitiam9FV0thdzN3TWJScnN6dXdieXNaNFhQTGhlckdaVDdGcW5JWTQzUEE5NVdaOXdsaTVFY3JMZUZ5cWlLUjVQRllnYXJMZzFYaDdmaHJnU0NwMXZKT1hJM3d2ck9mekJJLzVHell6d0pGMHplOFhpRm9oL0JmZ3MxcndWajRuSWZoUkRJUU40bmt0NkhPRmovcWdRTlJPd2YraTNEelJmUHN2N2wwSXZ3MDhEd2krRjIxOVNQQko4RGtzZUNSeWZSNFJmQmJsSHBOc242TGNrNExIWVhDY0Jjd0xXTytCWjVENUlmdDJNZVM1S1BqNFA1Y01WNUduMzhDemNJQmg3QzRPbUh4T2duODV3SkhVYjJqUE9ORnNnZnlWQkM4SEhDLzRMdEJVRi93bVpFZ1EzQjZ5SlFxZUM1NE54Yk1wMmo5SitBMW8vOWFDZDBPMjlvSzdnWDlId1ErQlp5ZkJNYWhYTjhFN0FQY1VmQ2RvK2dpZWhqWWNJSGdueWtvSk5KQXpUZkFpMEtRTHJvU0Jud0U0a29vZjVVNFcvbDk4TzAxd0hReXdHWUsvZ1p3NWdwOEF6M21DWDhDM0N3U1BoRHlMQkUvQkdGaWl1Zyt3Y290Z3ZLMFcvaDdJc0VId3ZTZzNWelFaMW9iVE9hNEUzNGYyekJQOVpjRHZGLzRaRzUrVklOc0I0VnVBenlIQnQ2TE5RMXU5akxvY0Z2dytlQjVST3d6aEV4WEN0N1h4dndheW5SUitFdmdmVmtyVmUxSDMwNkZOd1BPTTRLZFE5N09TY3diNG5CZitHdUF2Q0w4VTdjQ2crc2pUaENnM0dqQnBlb0pQak9BZjBENnhndXYvakdTaGdnZURaM25CTDRBbURqQjUzdmxUZ2FoNDhXeUFjWklvbWdVWTV3MUZNeGN5SndrL0Z2MHlYcy9UREFPK3RmQkpuTE5LZVYwSlBOdUw1OGQ4N2xCOEVsQnVIK0hmQXA4d2JyZWhyZExFcHpMYUtsMXdZNDQzMFJlMThma08ybit5ZVBZR3pRekJENkZONXVuYmU5QW1Dd1EvYTJ0T0U3VGhvbEIzbS90TFFMOUM5TjhhL1NEQXE0WHZpSExYQXVaMTB5OUFueWQ4UzlRM2pMZWlrSCtQOE85QXR2MlNmekRhODdEd3BmbWNnV1JZZ1g0NUxueFRqTThBeDZIdjhnVS9BSjRuQmJmSEduaGEzNzRQL21lRnZ3bDh6Z251Z0RGelhqVHZnZWFpOEYzUlIyRzlyYzREMmJQcVg2NXBnbDhGZll6Z2ViUTdBbzZzRlpDdHZPRFJrRDlPY0NiNnBaTGdFaWczWHQ5K0NEaEI4QWpJMWxBMFdhaExlTDdxUy9CcEt2dzJsSnNrK3RYb28vYUEyVzZyTVFlN2llWktHM3Nid0wrbjZKK0FEQU5Fa3d3K0tZSTc0OXMwd1ljZ2YxaExiK1RhSXZ3YzRETUVQd0krV1lJZnh6bzJYdkI5NERrNXlJOHhNRTJ5TFFKTndEK050cDBudUJIR3d3TEJ2VkRmUllJWGdNOFN3Vlc0QndsdUMveHF3YTlDdHJDRzl3Rk5XQU4zUWJhMW9pa0puaHNFN3dTOFJmQjByb2VDSzJCczd4VGNEbkJZWjI2Rm5HRnRHUVg1ODBUek84YnpIdFZyRS9nY0V2NWVybDJDSjl0NE9NczFVUFFmb3czemhjL2xXQlY4RmNvOUxmZ0gwSjhSZlVIVTk3emdvNmhqV0pNWGdROGRxNUdubENCRFljRkxRVjljOExPZ2lSWThIenhqQUVkMEJ0Q1hFejRYUE1PKzFoZDFMQy84UjZDUEE4eHlONkNkcXd2L1BzWi9HR014cGxkczVSZ1cvd3JZRnhycTI5NFluNjBGMzhBOVYzeGk4VzJZSXpQUnp0MkVmd24wUFVWL0ZQS25DRDhHL05QRS8yL0lIOWFIUmFEUEVIMDY4Sk5GMzV4akR6QjFqNG5nRStiQ0ZNaTJRRFRQZ1ZuUTVYcEN0dENlZjJLdUxSTFBIZWpyc083MUIzNjFhQ2JZbnRJYjdiWlcrSTNnczBId1JOdmpEdkFwS1BHOG0yTkpOSWZRbm9HbUhPajNDSitPc2JGZmNMYnhUTFA1K3lIcWRVRDRtbGdERHdsKzNjYkRMSXpEdzRKVE1NZVBDQzRLL0RIQlE5RzJ4eVhibnphbkxvTU1wMFZ6Ry9kZnRmOHd3T2VFZnhreS9HZjhveS9PaTA4R0R6UjVsK0JSR0pQUmdDUFBKcUx1c1lBak9pM2FzSnp3cFRBRzRvUnZaR3ZndjdhblhJYzVVa2swUDNEOTFMZS9nVStDeW5vUjN3YmRaajdrcjZSVS95WFJQazMxN1gyUUlVbndBTFJWYThIOXFDc0tyc09jK09Kek0rVHZLUDZGVUZaUHdXVkFFL2JCWjFCdWlyNTlEWDBhOXJqdnVWOEwzd1J0bFM2NE1XTnRCTSt5ZVRFRTM0YTVlUWp5WjRubUk5Q0VkZkpkM2x0V3VkK2dIY2FySGQ2Q25OTWtXemZ1Ny9yMlU4NFg4WHdVL0JlSVpoTG13Z3JCQzNqdUVKOEhBT2NLenVaWlEvQnd3UHNGYjBEZGc0NzNESGdlRXArYjBNN0hWTzVFOU9seHdZc0I1d3ZlZ25GeVV2U3ZvS3l6NHZrejF6clJGQWYrQW1ETzM1YmdXZno1Uy9RMU1ZWmpBVWZXVExSSk9jRS80WTloclJqUHRUZk1JN1I1bU9NUG9rM0tpLzV5Nm5YaStRRm9xZ3VmaWZHV0lQaDE0RU03SjBDZVJORS9BdjVKb21sbS9iS01PcDd3RlZCV2U4R1YwVzRkQVVlZVBVV2ZkaE4rRVdUb0tYZ1orUGNSelI3UXB3anVpTEdhTHBvYnFPTUJwdnYvQVQ0cEpYeDE5R05vazltUWVaN2dITW9tT0kxN3ErRDdNYzduNlhtdkZhaHZhSi91NkpjbHFtTWI3TXZoTEhtVWE3WGFJWjU2bldSN0RQWGRJcDdwa0NGWGNEM3dDWHZCb3hoN080Vi9EakxrQ2Y0RWRkd2pQZzBoendIaHg5aThlNCs2aDhiRHF5ajNFR2dpT2Q0QUh4ZjhIZHJrakw3OUZYek9TdjY3SWNNRndSMXRYZjBGUE1QK05RSGp0dkJ1UFV1Szlvd0JITkZ2MGI5aERlUlQ2YkdpZWQvT3VUZEMvampnSTA4aGNDMFNuSVQrU2hDZkxhQlBGTndkK0lhQzk0TytxZWhmd0hnT2RkeUxlclVXZmpENnNhUG9LNkZ0Zzk1MWhQa3ZoRDhLK202U3JSVDZhNERnQnVBWjlyc2VxRXM2OEpGOGtPQXpXVFM5d1Qrc09WL3k3Q21lTS9rY2htaEdVLzhVdmhENHI1QnNwVUcvVnZqTjZOOGdUeUdlTi9YdGgzYk9IWXYyM3ltYWZKNHh4V2NuMXhQQkhUQ1d3cnE5SG53T2lYNDkyMUJqYnd2d2g0Vy9EdjBZeHZrTitQYUk4RjhCUGliNE5hNC9namRSUnhUL0g3Z1dDVC9PemxOSEljOUp5Zk9wNmM4Yk1UYk9pSDZTcmZPM1lGMDZLL3hvcy9OTVFwdWZFLzREMVBlODJxUU45OFFYOU55ZTdXVjkwTTdSd0VmR1AvaUhjc3ZiMmJZZXlvb1J6YWZvdTFqQjQ3QVlsQU1jZWNJRGRZa1Qva251ZllKN1FiWjRsWnZJOWhTK0l0b2hyQnNGVU4rd3BpMEZuNGFpNld0bjg0V1FKNHpKZGhnUG9mMy9NSDNwT0dScnFtKzM4Qnl0Y2ZzV3lnMzFyV3g3Ym5XMGVaTGt2dzM0c0E3L0FqNmgzSzl0cnRYRUdHaXZ1bXpqK05lMzNUQy9RbC9QUVZseGVOYWYrSGJvaXo2aUdjenpqbVRiemoxUlQ5UWRNZG5lcGoxSE5QbG9uM1RCZDZDL3doeUpSVitFYyt0TXJDRVpvSWs4WlFnRDhUVFJmNEZ2WndpdWhmTmpqbVFZQVprWFNQN0xJTU1LMGV4QXVhc0Zud0hQc043ZWgzTFhDcjhlUERjSUxnUStXOFJuQytqekJHY0FQcUN5bnVRZUxmb0hPRWNFWjlpWjlDcTB5VEhKUHgxd3FOY0t5SFphOUt2eDdSbkI4NEFQWSs4SzRNOEszZzk4NlBmWk9QU2Zrd3duR1BDcWRhYW42Wjk3dUQ1TDV0RmNoL2RJcjBCL1JRditndllad0JIZEVnRWhZVDhxUlZzaThKUjVKV2ppUmRNYy9JTSswQi80NnVKekY1UFlxOXhvNEJPQlo3blAwRmFqYjR1YWJlME5qTGZXK25ZVWNqRjBGTTNuS0xlVDhHWE0xcHBoWjhBT3RCK0tmaFh4NHJrT1BQdm8yOUlvTjBVMFhTRlBtdkFmMlA2eUhlTS96SkdMUE9Pb3ZtMTVWbEpadC9LTUkzeEZqaXZWNjArVXRVSTg0L0Z0MEE5L3NYUFRXTzdqb2ltSThieEY4bHhqOXNCajRKTXJta05jdHdXL1FWdU55cnFjWTB6ZnZvYXlqZ2gva0d1czhQbWN5Nkdkc1FlZEZzMXluaU9FTDg2emcvaFBRcmtYQmQrTThWQjRyNTVMQm4wMDRNalk0M2tXTU90K0RIMFJKM3h2ak8xS2d0dWozSEErZlFIMDhlTHpFT1NmcCtjVUY2Tk5Fa1NmZzNHWUtKcU8zS01GUDJabmtGTjJEcjBEYTA1cmZUc2I4N2U5NE9YVTl3Q3pqcG1nNlNuOGVMUkpIOEVuamVacnlCL1cwckZZendlbzNCZDVGZ3ZqRm5VSmRmd0VmczAwMGZSRnVSbkNEemRiZlNXVUZlQWl0T2VJZndjN3g3MERtbkJ1dlp4bkRmSDVtV05HYlhzVnZnMzY4Qy80Tm96dHF6bE9najRESFNsSDhueHR1c1JSVkc2QmVGWkNYWUl1dWhjMGk0U3ZSaDFEOEYvb294VnFrNm0wMndqL0dmb2wySC9hWTk4SnVseDFqTDFnVjZ5QmNSVnNJOW1nM3lJK0ZURzI4OFRuTlQ2dEtEa25RWjZ3VmhRM1crS3prT0dBYUNaZzdBVWQ1b3paLzJ0eFhJbG5Oc285SXZvbTFEZUVyMkRqcWd6R1c3N2E4M3V1bWNKUDVmalh0MCtabnRNWFpRWGZTanprdnlENnAwd1BhWVErdXFodk4wR2V3aTlLRHdkTmNjR2YyZm5vWnA2dnc3ekFlaGhzSUxtMFkyQWZqS1FBdEQyeElObzVHbndpejVtaFRXSUJVLzdYQUZjQ3pMYmR6cnRmd1I0TCtqRFgvcUQ5V2VQa0MvT1IzVzdqL0RYUUJOdkZzMmlmQkpWVkRuQkRsUldEdGcxMnAvcW9ZOWc3TG9NTTdTWERNYlJiOE4wTTRObEtkYjhHMzRhNmY4bHpsdkEzMGZZZWZDdW1neldoajBuMDYrbkxFSDBuMDhHdW96MUs5QmsyWm1yWit0QWE5UjJndXF6Qk9FeVRuUG0wbDRybkwyWi92cDYrUmVFZk1GMjBpY2wyTldRTzUvY1p0T2VMZjNYYTg4VS9pdnFuOElNaGY5REpCNklkbG9qbVY1UWJ4dFZ5K25SVTdvZlVLd1QzdFcvLzVONnF1bjhNZUl0b0NwaTl0Q1hhUHplTU4vb0N3cHlpblYveVBBVCtlMEsvQUE1enFyUFY5emVlQlVUL09OcWtvNTdZeXdQUE1OL2Y1VGdYL0JiUGc2TC9qUDRtamJlRCtEWThzOTRNOEJHVld3NDB4d1F2TUZ2eFFaUGhHOXNmZTVoL1o2elowUEpRWU5ETnJrYWJoMzEyc1owZm14blBHdXc3dFhsanRFblE3WE5BZjF6eTNBNTh2dXJ5T2RyNWRHaG5uZ0dEdnhJeW5CRitGZGZrNEMvam1WZmZ2c0E5VkgzOU10b3RuS2NTR0h5M1Qrc3RiYlphQjZJaFcySGhFMEZUWEhBbjdoM3EzNmN3aHFPQko4ODA4OTgxeGJnS2ZmRTViWmlxN3pMem5UVXd2OUwxdEZXcUhVYUFmem1WOVRmUG9XcTNqK2czRWY0ejZxaUNFOUNlWVI5cHlQVUhlSzRQTjlsWlBodjdiR0tneDFocUNKaHQwaDMwU1lJLzRSNGsraFRxODZyTDA1Qy92ZXBZRWpJRW1odDV2bEJaazh5blVKWGpFNEdmRWR1WDJlMkhtNzFpTXRvbnpMWFRQSmVGZFFQZnBrak9IcUJKVTdtNzhHMW9uNjdveHl6aHZ3QSs3TE1uQUFjZDlXSElPVTE4UnBrTWpiRmZ6QkErRzdwRWp1bytpdXVEZUM2enVWK1c1M3JodjZRTlVQUjUzQnNFdjJKOWxBaytlYUovSC9LRTgyTTNzelVkNFI2cWI5OEdUVmkzYjdmemRUWFFIQVlOYlZuRElNTnAwVCtEdGpvcitSZUEvcHp3OHlCRFdJZC9vczFaY0RyUEVaTG5lclJuMEYwUDQ5dkMrK1dQQUJ3dCtCLzNmZkFjRFh4RTMwYS9sQlBjMVd4b3Mra1RFYjQrZFNlMVd4SGFENEZudWUrWnJyaVlaMlRKME5Oa2ZzZnN3RDl4SEVxR0F1aXY2cEx0S004bUt1dFB4amFJLzFrN0M2eTBOV0UzenluNjlnTG9PNHArbjgyTDhjRDNGSDRueGttSytKZEZ1V21DbDlLUExMaUluZSt1TXo5Q0tzb05hOEpGMm5NMFZvZWJ2akdVWjJISnN3YmxqaGU4em15a0sxRFdOSlhWRWYwK1F6VFAweWNvZkFycXRVQXlIMGVickJEK1Z0dGZubUtjZzJnRzh5d3NPTmI4V2M5VGI1U2N0K1Bic0hlUEE4ODhsYnVCdGliVjhTTDZkNy93ZXlEbklaVzdIM3pDdWwzRDdBQUhxQWVLcHBqcEQwbW9WN0I3ekFmL0VEdTBoZnVMNkplRDV4SEpYSm5yditBbnNQK2VFYzNqNXUrYmczRjROcFNGY1g1T2NIL3o0NXcwZjlrNHlIOWVOTHNCWHhEOE5IM2NndFBNbjk2T3dVNHZTY2NBWEZqd2h4YXpOTlhhc0Q3OWpLQ2h6T3RNZDcyT1ozYmd1V2FlQTF4SmZQNHdIKzUrODdWTm9JNEJHcmI1OWRRREFUT3Q5R3VvUzFnSHNqbTJSZFBBMXRpVmtET000WmR3QnVrbWVhNEgvUURCVzgwSGR4TDgweVZQQll1VE9RMTg4RC8ranJHWG9iSWFNcTViOU0xUVZ2Qlp4MEcyb0pOOGJuYk9JN2JPdnd6K2t5WERidEFIbjkxUGpCTVR6em84aHdhWk1hNldDSitOL2xvaGVBZnFzbHJ5UE1UMVdmQlZtQys1b3JtUE5uYkJ4VENXOGtSVEJQVDd4ZjlSeUg5WU5CdDVUaGQrS2ZENXdyL0pHREI5RzJ0bjV4eTB5Um5oK1ZiME9kR3ZOdC9LQ296YnNOWjF0cjErSTNVenJTZUg2VS9YdDllZ1g0Sk5leC9vTHdnZmc3cTMxdFBQajBPZWl5cTNKV2lDVDNBUWRSN3h6RUViRm41WnZsMnpweTJuanFlK0tFVGRSalIvNEc1RnRPREtrQ2Z3N01tMVR1dFlOOVFsUmpUalVQZFl3SlRoVDhnd282cjBRTFJoZWVEWmh1MnQvVDhIWWRqMzY0Ti9hSWV6cHNlbW9jM2p4YjhrNW05MXdUVmdKMHdRenhuNDFWVGxWa1NmdGhhK0ptT0J3dm9ER1RvSm53eTRqK0E0dEZzYVlNYmViR0xzbWZoL1RYdVJlSGExdUk1Tlp1c2V5UE83Nk0vYTJlZFRyRmRCWjM0SWJUSlBmTGJ4aVh6UmR6ZS93RjdHYjRpbU4yMmJvcW1MdGcwNlRCV3psZDBFbXJXaUtZVDFiWU8rcllaOUtsZjRrZlNyQ3Y4TGJaWENqK0c2TFh3MHo1NXE1M3pZU1E0SlA1cm5kTUU5MFA1aEhKYTFNK2tEWnN2NjIvYnhqcER0dU1ycWFIYk8yb0R6aGM4RS81UGkzNDR4ZThFbnhWZ085Y3RLK2dKRTA4ZjhZck5ScjR2QWM4MzhFLzBZL1VySnlCdWJnMm5yQXh6eFhhS1BncjVYRi9pd3ByMW0rbndmN3ZXZ0ovOHIwRDREQUVmV1ovQk1GL3dIOE1GSEdjczlXdlF0NlRzV1RRV0w4NmxuK2tZNnYxVlo5OXRaZUlicDByZHhiSWpuSjFpVEY0bm5Fc3FzdWp5T01iQldjRFRhTGV5YjZUeUhDaitPZTdyNG5LRHRTMjNlMXZyM081UzFVelJiekJaMG5yNUZsWHVNKzd0NGZtSnJMNTVFKzQ5dXN3dnRjMWowT2ZRdENrN2hXVXpmVHFLdlUyTmpJZVFKWjZ1R0dCdG5STE9BdXF2ZzJzQ2ZFOXdGZFR3UG1QMmJnTEVhN0psMU1MWUxIOURlQkVSeHdXa1c2OXZXNGxYeUdFY0Jtb2pld3Y0VG5JVTFKTmdXZnJSNTNRTDA1VUhEdW5UQUdoTDZOQU5qTzloVmZzR3ZlUEc1bXpFOGdyKzJlTFBWMUkxeHFTWmlFNlplS3BwdXRnLytReitPOE8xbzA5TzNuekRHUTc2QUxveFZrenhsYUxkUmZSK2lIVXo5OGczWG1SQUhndjIzcDJoU0dZZWp0V1UxZmVYaXN3STgwd1MvaUQ3S0VuMXR4a1ZJbnB0UjkybWl1UTNmemdQTWM4ZFhacE5KdzVnTTQrb0xmQlRhZnhwdHBPSlpFKzBXempLdEljOEc0ZXVBZjlEVG5yT3p5UVdMRXhzUE9iZElobDlkWjBCOWcxK3lFODlXb2psUG02SGE0UXpIZytaSUhQbzNyTWtQZ3VhQVpHaUFidytwdmhld3h4MFIvZ0Q2NHBqZ3F6Q1dqZ3UraUp5TytZSnpHWStoY21kYi9GdUd4VVVQcC80cCtwa285d0w4YTVINjhveW1jcmVqclM2STVnSEd1b1J6TVcyVjRsL1BZbVkrb0E1NVVIWnAvSW9HSE5sVHpDWjVCOW8yVnZoaEZvZVFaM3ZUQ2RPN0xrS2U4cUpQWnJ5bCtEK0dPUkwyNVNmcHJ4Zk5LWXlIQk1GZHpTYlp3K1JQaFB3TlJYTVBaQWkydTYwV0UxdkQ0dUh6MGU5Skt2ZFp4b1FJSGdxWnczbDVGdHF6dmZBanpIYTlrUDc2RUl1T3NkRVJOR3kza1JZditpc1F3Wjl5Z2JaTjhjbWpmMEZ3QTY3LytuYS8yZHM3bzc3cHdITXRPZ2llazFXdktzRFBFSDBmaThkWWp2R3pRRHlQUXA3UTV0bW1lNXpHdDR2RXB5NzIzQldDLytiWlFXMjRDTit1RmY5cDRKa3JucDl3cm9sK0RmZDA0ZWZSeHlSNEJlK3ppZVl2VzhNbmNkMFd6MlNMemJ1SmEzZ29pMnU0K0RURVdBcnIzaHpxdE9KWkVOK2VFMXpTYk01VnNUNkhtTlV4ZG5icmo3NjdJSjUzMEphdXRwckRjYTV5NjRHbStLczZoNEltV3ZCanRCTUsvc0I4anMraVRXS0Y3NFZ4RmZyclZvdmJMd24rNVVCRE9XK2tQVi8wdTlDMmxRQkhmTUVvSzBINFBJczdta3I3bVBBTmVPZEg5QmZRUitFczFvbitMTkc4Ym4wM2hmWnRqZTA5OUw5TGhycEFkQkxjQm0zVlV6eWIwemFvZGZWQm0xUFgwZllsL3ArRFo0aHAvQW50RUhTYkpYYS81cWpaOW90U3B4WC9UTlEzUytVV0JwOXdoaDNJOFN5YVdNaVpBNWpqL0dYcW9xS3ZibmNsM2dDZllDdW95N2d2d2NQUWhrSEgreDN5QlAycUo5cG50ZVIvZzJjSDdVZDV0QlVML3B5Mk5kSFVnVHdiVk83TnRDdXF2cWNzSHY0NTlHbXVaSDRQTkNFbWVRUGFMWncxSnBrdjRHYnczeVArNnlEL2ZuMjd3L1RZV295VEVYNHA1NEprNkdzMnd5emE0b1JmaDdxSGM5RFAxRmYxN1YzVWI0VWZUTnV5OEJWNHFRc1hrQWtuMEphcmNrdVpyYktPeFM5dDUvZ0hmZVNzeXZFdmVDUGpUd1NYdEhGU2x2NTk0SGwrV1lsTGZkVkZrMlErMExVYzU4SmZqM21kS0huMlFjNGt3WFVzSHZoYTBIUVVmaHZhcmFmZzVoeVQ0dk0xN2VyaTM5emljR1pEempUUmpLU05XbjJYWXpHUUg1cnZ2Z3QxM1hBM3dleWlEVEZIMHNWbkxNWlNodUJHOUwwS1hzSjlSM3p5R01jbC9JMW1reHlHY3NQK01vbGpKc1FpWXQ2Rk5lb3Vzd212UUgwbnE3NXJVVmFPZU43QWUwYUNaMEhtNENPclpIYkxjV1p6ZXg5OXQwRDBMYm5taStmenJHUFFuV2kza2Q1YkVtMitXalM1NEIvaTRuNDNXK2dPMEljOSttT2VnMEpNQmNvTmZiM1Uxc01GdGw2OVpHZWljUmFQZlpQRkxLMnpNMW9jNU5raWVhb0RuNmU2N0dHY2orcDR3UGpQNGxuNDZrdHo1R203dTFFWE1vZisvWnA3bHZqY3pwaHR3Vy9oN0hOQVplV2dyNDhJZnhEdGRnd3dlWDdIR0FuaEgwYmRUNHIrYXNZdmFZNTNzL1BPaitaWGZadnRyRyt2Qk05emdMbldiVEJiWEtMWjkrNm5QU1RFalpoZnVEeGtZRkw2aUYrVlo0M1ExNmhMWWVIWG9xemlndmR5TGdzZVpyYmZhaGF6K3FuRis5WEVmSXdCZlNTdUdHMVZUdDkyUVRzSHZmZEp1OXQxT2VwU0hqU1JHRG1MNWJqTTQrSXdqK0xGWndCOXJCcExMYzIvTTVyeFB5cTNJdSs3Q2I3R3hsSUJucStscjE0TitxYWdZUnUrWlA2amZlakhqdnAySk9PbE5UNmZwNjg1dEFuM0JzbmNsTEU5d28reWVPOVlzNzNQdFJqMVhhVFhYdFBRMm1vNjQ5REVKNGJ4eVJvRCt5QmJ1bWp1NURpVVBFM1JobG1pZjhYMnJJRzhkNk95VXVsckZzMmp0RTlLNXEvTnJ2c2N4NFAwcTRuUUU0SXQ2SDBRaHZXNURmczNuRis0ejRwbkNhNG5na2VZblh3WGRVamh2N1Y3amlmTmI0dXBHYlZJOVZxTmZsOGgrbCtwMTRXMnRYUHJuUmIvZjlMMjNQc1orNkYrL0FsamFZKytUVVU3SEJMUHV6R0dnMjZ6MG54aGxjRHpzR1RvQnZpWTRFRmNRL1R0QnA2VnhQTTcyaVRWZCtWUmdiUENQMkR4aHoxb2U5ZTM1U3lHWkliRk9uN0plQ2VWOVNqbjNldmFGMHcvYjIvNjZzZDJ2bGpNKzJpZ2o4VFJvYzNEWGRjeHRNTURUL3BsNEZsZVBKdnhYZzlnN3EyNUZsZFpFUFZLRlAxM2RqN2RiWEY2czhDL3FmZ01OeC8wNDR5akUvNW16TTNXZ3BmU3J5clp6cUNzYnVKL0hkcXFqL0JGekljNHhOYnR0Nm52aWI0QVk1ekVzd1g0WkFsZmtYZk54T2M0NkhNQXM5OUxXUXg1UGVDWGlHWVQ2TmVLejNrYlYzZEEvaER2dlp0MnFCQWZnanFHTzkyRmFKdlN0ODliYk9xREdGZGJoSjl2ODY0czVrNnU1SHpRNGk1MjBmY2tmQjBnOWd1K212NG04VmxPVzczZ3Fidzdwbm8xQlQ3Y2xiNFg4cDhVelNMUW5GWWRxNXR2YmdyZ2NEZHpuNTBCditkK0lmcFk5TVZGd2JWNXorSU5uUk41VjFyejkxWHpDYTdpZXd5Z29jd2YyVDcrQS9qSDZ0dDZXQ2ZEM1lkSDZIOEo5NlRzem5VbitrUUUzMkcrNzV2TmpsR0o5empFOHgzNkZqVm5xNW1kOWhtT2JkSHN3RWVockFmTUIxcUFzUVNTK1cyTDlmMkM5bVNWTzVFeDBxQmhPd3cxbTJjRDhFOFUvL1pvbjRhaXVZYzJYcFhWRC9WdExmelBGaU0zQ3Q5MjByZHpPYmFGNzhHNEF0RWZwczRjeGdZRUhDRDZub3hWbHN4ckxlWndOdkFoVGkrRytxVG9Yd1RQRE5FdnBlMUwvQjgxZjhFRmkzdDVIWElHL2JBNll3YkVKeHRKT25QRVp5empOd1JmVHoxZjlGTlIzOUNQaGRHMlMxVFdNTWFVQ3I3VDRzd2ZRRHZuaXMvclpsY2ZZbWV1a25ZZS9NSHNPZk1ZZTZ5eDFJZG5xQUR6RHAxa3JtRm4xUis1NWt1R1huYm1lb2gzbENSREErcGorblkrNUF5eFREL1lQYXlUdkVjZ21qRzBtNG5uTnZhWFpMNEZOT0g4dmd6ajU3Um9CcHR1T1kxelRlV1d0eGl0ZWlnMzVHZTRoakYrS3F1cTJaWS9zWHQvMitrTEU1L3RqRzE0OHhLY1l1ZmxhWXlkQmo2eUg1a3RPdDd1ajZ6RW1Jd1J6ZmNXSXpFYWRRbjdlQmJHUUN4b0lqWnc4QWwzU0svR1doRW5mSDNJVXgxdzVINDNhY1J6cVBsMDZ2T2VsT1RjYTNyVVgrYXo2RUdic0hpV29kOG54SXBRRHhIOEsyaTZnWVpyNElmb3g2RHp2OGs1b205UDBXY2hHYzV5amdoK2tMR3NvaW5NZURuQk56QmVXanhUNldNVnZnMzNnbkFPdFJpd1pSYXJYTlRPZ0RzWUY2YzZ2bS94WXlrOER3WmR5K3pHTXhpZkp0bTJZTzdrQ1I1dmR5V2VzZGpVMXhtekt2NXRvTGNjRVAwcjNDOEVGMmRmaDNNMGRTcmg3eklmeldMNmZGWEhZMll6MldqOTlTVGFJVjgwQmMzV2VyMmQ3N0xOZmp2SDdEWWYwUFliYkdJV1E3Nk85Z1RKdjluT2t1K1pIYStGN1M5djJ0MldzaFpIZHgzalErcXBUMmx6RnM5VTVueVF6SVdNL21ITGIxQUtkUSt4aFlNNDVwSFFMbUxmc0RQUktveXJHT0dmUkR1WEJ4eUpRN003dG5jeWxrL2p0aUJ6bUlobUVHUFM5RzFUNEJPRVg0aDFKdGdlRjFLL0VrMFJ6S01rd0pUbk1QN1lYdkF3czVNbmNZMFZueE9tN3lWZ3JRajIySkdjRitMNU51UVB2cGd1ZHZkekFHZ0dpT1ltbEpzdStCeG94Z3YrR1BBTWxmVzByY1BMMFE0NXdoZm1mUi9KZVIxanFwRTBMdUpUNEwxQzBTVFQ3eU40Qm1OdkFITitEYlR4WDRWbjhDQ3p4UXAyUjFsNStyYXZ4WDNkaVBHMlIvaTZ0cWNVWUx5bytOU2x2U3ZVa1hHVm9pOWplVUw2MjVxekNYTG1pK1ptc3lHOFNOMWVmQWJhL1pjY2xIditHdGs4TGE1Z2hKMS9LK0xiczJxZmx1eDNyYjJiZWFkVlpZMHdYVGZCN0R3N1VmY0xvcW1FdHIwb3VEL2tqM3BMZmk3ekNkWkhHNFo5WjdMZHVYNmN2bVBSbjZMdlFEUzlJRTg1NENQOVFwK2c0T2RzL0s4M1cxbER6alhKZWNqc0Q4L1RUeFo4Yzd6SHJUVm5JczhSNEJtSmdVZGJ4WXQvanQzRExXajNtQWJ4YktKdkQ2Q3M2a0UyaTVHWUNmcWdUN2FnYnFtNVg0ZitHdERUZnpjRjM3Ylh0NGVwWTRTWUU3TUR2SXBmSGRVbUQ2TXVZWThZd1QxQ1ovK3VhUCtlNG5NYjZ0VkhjQWZJUDBEMUdzOVlUY0hYV2w2Z3lhNkgyeG0vTC9kY2xidVdaMjNCc3dIbkNHNUIvVnp0L0JibmtjcDlGdlVOZk5KdHJlNlBNUkI4VDQvd1hDTStkMUh2RWp6T2JEdVgyeDJCdVhhV3Y1YitGNVYxQldoMnFsNlZ6ZjV3bTluODMyR2VGdEV2TkgycG85MGxlWlJ4OWFKNTFQTERUS1NQVXZ6dlljeW40STZnRDJlaVpOUGZydVg5Y2ZIWlplMHdtZjUzemJYMmpNY1F6WHZjczhSekk4OUJndTlGVzRWMXJKYlpRcS9pWHFsdnB6Q1dTWEIveG1ibzI0SjIxMkNIMlVZbVc4NktKODIyODZiRi80OEMvNHZpZWNidUhUOWs4ZGlYMFg2T2hML3NyOVptMjhuaStWRnRzdG5PT0ZVNFIwVHpHT2NPa2xsR2JCMTJ2NjhPODlVRS9tWWYzZ3g4Tk1xS3JIVjJyM09BblJOZnh2eU5BUTNyM3RoMG0rSm1iOWxIbTd4b1VtenQrc1R1eU45cHVZQit0cHdERFJpckp2dzN0RCtvN2kvYW1mU00zUnRpMHJqcW9ybldiRndyTVU4YnFpNVAwMFluZTBncDVuWVFmakRqRVBUdEdsdHZYemU3d1kyV3UrWm1PNXNYTjV0elpjWWNpczg5ekVraXVEanFFdlQyTnA1bkEvUXBhcDh5OUxFQzVocFYyMnd5MjZsL2lxWW40eEFFdjJDNWFCcmJPVEVMOUl0RU01VjMrZ1MzTS9vTHdLOFZmZ0RhY0l2YTRYT3owUzJ5dmw1SUc2ejZxeGw5VC9xMmlxMERIUmpycUhtMzJYVFVkdHozMVE3UGd2NkE0RDJXWTIweDcweHBQNTFvL3FCbk9kZFVyemNZVzZoN1JsZGluUXowWGVqTGtKeXZXQTZ4NzVnRFNtVVZ0RHh2Wld5T1IzTlBWOTFuUXY2VGdxdmFuZVZKMkNOT2k4OFV4dWNFR3U2aGFvZGxrRCtzUldOUTdrWFJGTEs0MDk3MEZ3aStrM2U2MzdtazU1eWdid3R3WkkrMit2YWhuMHY0aWhiM3RkemlFK0lZbHk2YUlyUnBDTDZhdGd2QWxHMGFiWjZDWDdMMmVZbzZwK2huZ0NaUk5JbTJINzFrNC93TnlOeFVOTGRDbHdqcjIwNjBUMnZnMlQ2dkEvNlBUZGp1MnM4SHZwTytuVUdma2NxdHhKZ2N0Y001aTFGcFJ6MVdmYlNXc1QzaTM1bHgwZUt6a0hmRUJIOW04M2VGbmJtU0xLZFpFc1poanZnVTQ3NHBHVEs1SjRwUE9kb3JndCtaY1RXNmc5WUozNjRXL1FERzlnZ3VhdnJiRzd4N0tQd3B0UDhXd2Q5QzVuQ0grcHpsVnJyWC9MeXpRWjhyK2hlWUZ5N2t3cksrT0daK3RNMldJeUlENDNhbnZwMUttVlhIb21aMy9ZdnpEdmppakx1d0dLMlpnRStITVlNNm5oRjh5UHpkSDF0ODF5anF4bXFyU2RSUkJSZEczUy9xMjkvc1hMK1J1dWdSM2NHbkxWUjFIODdZV3VBajlHYmYyMHBkRkhqS1A4WnlDZjVtT1RxZTRWcWtiNThILzVCcjdnTnJuL04yWCtNYml4bCtqWHFzNU1sbmpFZTQ2MlQydE1NOGw0bG1tc1V0LzRLeXFrdTJKb3huQTB3N3htclR0VExzdnN4T251c1V0MW5EN0pPN3diT2o1SytDTmc5bnZaNGM4K0xmd1BKajlPWWRjTW1UYTdGVjliQ3ZoWDMyS2RDSFdPalI5bTBqdThON1A5YW80QWVzU2h1SXlycmFkTFo2bGgveVU5aGVNa1R6dU9rMnEzaVhVUGgzekM3YWpENGQ0WXZSeHFVNjNvSzFZb253TFJsckpQbnZZZjRyMGN6bDNCRmN5bUpsbDlwY2Z0ZmlPZzVCemkxcWt5WW9kNmY0L3dzNzgzN2hIN1dZbWNjWnp5bitIWGhYVVhYcFovRS90ekFQbTJqbThRNmc0THNaQ3llNG1OMXJXTVQ4VnlxckJlKzVDRCtFNTBISlU0SjJTT21mYTAxUGVNL3EwZ2p5QlAydHZObTNIOE02Y0ZaOEhtYStVL1h2ZVBxR0pNOU8ydmNrdzFNV2d6ZUx1UkhldmJTdTFqY2Q0R2JhbHBFUU9SSXp3TmdoMEVUODRNd2ZCWmhsM1FMNlNvQWpiV2o3MFdiVXE3cG9XdEdtTFhnbTg4K0lmcm5aWnRzd2prajRuMUd2WU52c2FQNnM5Y3dMSno3ZkF4L202WEhUSVIraDdvcWs1Wkg5a2JtQThJaExaRjNsblZueHI0QXhsaVkrSFhqUFJmUHhndVg0ZXNOczEyK1lmZnQ1S3plRC9sRHhmSUErVUxWUEsrN2RRZGV5K0t2ZGRzNmRhUE82TCtPaXhhZUwyWWNuZzJlT2VGYXkreXd2TVA1WjlIUHQvdjY5MU9YVWo2OHl2MGZJaFlpK1dLdjYvZ1NhWFBGc2JMbklsdEJQSVpwVnRMZHIvRXloWFV2NFVUeGJDWDdCOUxFdmVTZGRQQ3ZhR2J3Zll3K0VyMmRubGxjWUZ5VDVXekZ1WDNLZXRwaWxzdlFqUzRhSG1TdEpkZHdNT2M5SWhxL052dmN4ejFiaXVRZHo1S0xLTFVHbjcxSGQwMlFzcU9BLzdQNzdQcnNydllxMmE5QkU3TEZvLzdCUFpYTmM2ZHM0M3NzUWZMbWRyMnN4SDQ2K3JXais5NXJtVHkvTS9NT2kyV1o2ZXlmYXVvR1A1TERsZmlGNEN1ZUx5bnFSODBINHY1a2pUbno2bzl3K2d0dnpYaEpnam9HU2pDbFMvNzdPdkY3NmRvSHRDNzh6VjJTNDI4SVlIbjI3eWU3VVBHZytqb25VMjFWV05mTzcvUXpHNGJ4UWpyNTQwYlJqREE5ZzduMnBqS2NLc1oxMkI3T2I2WEtwM1BmMTdlUDBzMHZtaXB6THdvKzJXTEpoZG4rdG1lR1g4ajYxMXM4dWpOVlhHeVphTHJMcDFIUEV2NERKTTVUMkpaWFYyM1RtVFhaT3FjQTFYelRYVXNmVCtqQ1d1VzVVMWdDVW15LytHeXhtYWJ6bFFIak43aGRrV1E3TVhyUnBpOCtOa1BPYzRBbU1DMVc1VDloY0c4THp2dWJDdDd4UExUbm5jZ3lMZmp4cDhMQSsrZFRtZXhCcW4xbDJKbHJIT1FLYWlNK09kWVJOTXJLZldteEFsTFhoNWJ6M0twNlRPVWNBczY5akdTZXZ2ZXdPMURmY3VSN050aFg5VXVyMjBtZGVzWHZsaTNuV2tBeWxHWGNIbVBqcHBwdDF4N3FkSlB3bTFLV2o2TitrUGhPK05admhNTWJTQ0QvUGN2VGRBM3hQNFI4MTNTbmViTE9wbGhzNTNlNkF2QU9kcDQ5a2FNVTROTFZKR2U0dndyZTIvS1hQUWM0c2xmV2MrWDBPMkRsclBBNzA0OVUrUDBET2FlSnpsOTJIZXByK1g5RVh0THVaNjlHRzgwUmZHMjBWZExubmJhM3VZZmJKWXFZRDFHZU1zZHEyRW4wbE9rZVVNRjIwaU5sTFg3RzR6VU4yOWs5ZzNJdmdYSHdVenQwdjJSaEloRDZ3Uk8zd09mTUFDRTZqMzAzeVhHMXhCVU10Yjloc3kzM1JCMk5ndGVwN3U5bXlodE5HSVo1Tk1QNkRiV3FyMlQzMmNFMEw4VXMyanlaWTdGWVA1aVpTWHpUbStpT2VmNkJOOXFqY1NuWXZxWkRaeXE2aDcwejB0NkFmRHd1K2lUNHk4YXhxTnJTeDhJY2VGOCtoekVrdStsSGM3MFJmbXZZRTRZc1puMVZtTitoaWNTbmo2Rk1RVFZmbUNoRC9PeXpuMGpPZ0NlZSs4MWh6aWgrN1JETVgvR01GTDdkWXhOTFdqNDlZZnNYV3RMbUpmcTNsVXBocU1jTnR6VmF6eHVLdjZsdHVxNmFtcS9jQ1RYWHdqUGdacVpzQkp2NUh5TnhRK05kcFp4QitxcTM1amRHR1lhM0lOSDM3R3Q1emxKemx6YjdYd2V3OGMrenVmRzJzYVoxRTM1QjJlNVY3TCtPNkFYT3YvSWozZVNYRFZzYlRpdVpGaTcvNmpPY2c4Wm5JT0NMUjkrTmVLZm9NM0tsWkpIaSsyWk9mWjJ5NTZGdUQvMnJSWUJwRnJSVitrTDFmMEpiMzJsVFdhb3NUZUpTUGFhaGV3NnlQMmpOZml2cTBqdVZTT0VuL2p2cXJMMjBGNHBtSXNSVE8remRZVEZkbENIUkFzcDJnRFZQd1VQcVV4Yk1DZFVXTnBUWm96eENYV0I5d3lEdjNNK2VMeXZvTi9JK3JuUit5ZkpLajdDNzhOenczcWF3UDhlMVp3WFhCODF5QXdTZWNVNW96YjR6cXRadG5UT21sblhqV1U3M0swZzhyT1Q5Q093VDljSjdGQkQ1bXNXUkZtZU5kZlZIRmRNc21uSGVxeXhEQXhkKy9WSmQ3TEhmVDdjd3BCM3pFTHMxOHlGb1RudUVZQlQ1aXZ3SytLUjRRaWRoaExLWWltV2RxZlR1YWZtMjFTVW16emRheXNkR2FkK0ZGWDk1OFlRdHBQNWZPdkppNnFNck5zbmo0cjh3VzlCUmtUaFNmdGRSWEFiT08zNW9kdFlEdFRlOVF4NUFNOGJ4L3JXK25RLzdpdFMrVmRkeHNRZVBCdjcxb1pqSVhpdUFZNXNkVEcrNDFQMHN2M2tXU3pKd1lhWUo3OEc2eStxS3MrVm1xbVorckg4L1UydS82V1c3cSs3Z09TNGVwQUo0Wmt1RVI1azVSZlhOdC9UeG8rUWNXMmwzdk8zZ25XaktYdHB3dDh5eGZXUm5HeGtoLys1dTVLU1QvUm9zNWVSODBTMExmTVVaQzhKdWdYeTM2eGVibnFteTJzdjZvWTRndDcyNTNiM2RSLzljNjNKNzNEY1Z6RytzdWZmVWY2RGxieFA4WDJ2QlZsMmNzUnZFRzgzUDliR2ZTUHZUTjZkdkpGa055UDgrU3dsZmtHekVxZHdQbTJuRzE3UUdlU1RWUFcxSHZsUy8xT0hQb3FkeFZqSWtTZlQvNjlBV1hadHhhWGVVRU14OWlRK2FtRU0xMTVwdSswdTdaYldLODZ3ZXl5VkNuRlR5QitpUmc4cG5KV0Q3aGI3TThkWDh4dndyd0VUbjVacnZvNXpGSGtPQ3Q5Q21MNWhHdXNlSVRqM1dwcCtERkZnT3ptZmRIUlA4YTh5d3ByK0FIak5rVHp4U01xeERmZUQ5OUFkSnpGakd1VmQ5K2IvY2diclk3bFlQUS9sbWlhY3k0UHZFY1NGdTA5TDAvN1I1ck9zZXo1TndLK2VjSjNtUXgrZDNOYi9Vcjc5bHBiS3ptL1gydDh4dTQ5bXA5VHFNZk5zUk8yL2k1bTduRnhQOFJmaXM1ZjdXNDJiOHNOMnd1ODFkSS9vL3dLMWZ3SFhaMnVJMzVLNFRQdDdpVXFveTNEUGszS0xQS2JXYnI2amMyNXZmemJxQm9uclMzbVNxQ0p0Z3RWekRuc0dSTzQzc3JhdjkxbUkvSGhhL01lN2ppOHp4OXpkSnZPMXRNMUJFN2M0M2tmcWR2eTZCL3p3citpbmsrTmIvaWVkOVErRnZNUi84VDl5blYvU0RuZ3VBMDQxL1o5dG43OEcxaFBNb2IwWmVZRDFOd2FZc2ZlNXIzS1lSL2h2c2o0RWp1UjdQdnJXWDhqTmEzdmJ5dnFqMWxvOW1GcW5NUEVzK3Z6TTdjalhkZTFHN0Y3VDdVQko0QlJaOUwyd0xLalp4L0xYYmlvTzNGWDlyZGxwL05QdFBQNGlFbldHNnVJL1J6cVM0cE5rZGlMRi85VTh4NXF6bXltM2Y2Sk1PUE5qY25jTzZyZlc2M08yaVRPZmVGMzhqNEVIMTcxdmJCb294amx3eTE3VjJoR3J4TEx2b3U3SGZSN0dlTXJ1Q1Jsb08zczczL2ttL25tbzMwa1luUEljYTY2OXNpbkJlQ2Mrd08vdHZNSnlQOEl1enZpL1R0Ulh1ajRUZkdLNFk4N1pBLzJHUmVoTXhMUlArbHhiaWVZNDQ3dGNNYXdCc0U3N08ydWhyMTJnazgvZDBQYys4UXpUMjBxMHVlRzlHbklSNjdyUG1TVHREZUtKcGxQRS9wMnptc3U4Ymt1OHhsSk5tV21DK2dvZmxyZXRwNTVESGV2ZFZacktENUUxdHpEUWx2QkZqY1JUZmVaNWNNZmZodTFIRzl1d1Nha1BNdEd2V0tCcDU3YXpIT0tjQ3M3MmNXODNrcnh5VHdFYitxNVUxdHkzdTFtaVBMYnNBNEZNMVNxMHNzN2NDeTdiOXI5OFJibVQ1NWhjVTFyVUt1NmRiZ0U0bXZaZ3l0Wk83RVhFYUNPMk9mSFNDYXVoYmpjWXZaRm1hYXpYdzV4a3l3RmF5aS9xOXY3K2JkdlJDclpqYm4yb3cvMVBtaUx2VTYwVmMxRy9qYk5sOXFXZDc3bFdZM2FHSyttUGxvdHpCT3B2UHRBL0ZzeEJ5UzZxL2RHQ2RCN3kzSU9RVWEyclV1dDF3aXpUQWZaK2piQkxPcFRxZjlYK09xTC9QemlENGFiM0RuaUg0cjU1RmdQbklZOU9UcFpnOGNZUDZtQVR3ZmFmOWRacm5ObndDZkJlSlR3YzZ0TytsVEUzNGdmZGJxcjZZV2oxR2RNVjBhYjlVc3Y4US9uR3VpVDRScyt3VS9ZV2YyMnBhcjdYZk9SOUZVNTNsTlkrKzg2YmRqbVpOV1k3aWk1ZVN2Z1hKUGlqNkZlVTRrODFmZ0greXVMZmlXaXRidFZxWkRicldjRlh3OE03UmhEZDR4Q2JZWHV5OVRrdStBcUw2UDhUNlVaUDRhZlIzR0NSK3RMSTRIWmlOMkdPYWtGZHdLYTFld1I1VzI5L3NhV0Q3a1RPcUhvSS9jdGJIM3NBWlNWeFNmZHl5Mk00Vm5aK0hub081SmdDUHJKSE5lQlgrVzVmd3N5M2VPeEw4eFk0Y0FzeTc5bUpkSmZES3BiK2dzY3dYdjk0bG5LZVlsRS8xK3J2UGkweC8xblNGNElPL1dpYjZ3dmRmVHc5YTlNbWpiOGZJSkZ1QzdXdnAyT2Uwa3dxZWE3YkVvWStwa2YydEIyYVQ3SlZxc2FTdmFOeVIvTE44TlVSem1EYnp2SDZQekhXT1FWTmF0dE85SnpoNjAvYW92M3JYOXZiWGw2WnBsOFJJbjdJNW5VZHZqa2kyM3huYXpvWFZnSEtQSytvdTVFQ1ZEWjhzek05L2l3Ri9FV0Fwci9tRzdOM0hRN3JZM3RKeG1PNW1iUXZ5M012ODVZSzR6djFPM1ZILzlZLzdIU2RRUEpVTzAyYUtyOEswVytYRXU1MWxTY0RITEtYcVQ1UnVweG5nR3RmbEhnTU1iT2svd1hDRCtVMDJINzJTMmduTm05NXRtYjNIbW1kLzJQZDdsaE8rVk5EczQxdFV2OTZGOUxxaGVReG5YY1VMckE4WmhOT0JJWGxuRzFRaS9uY3VqWkh2RXp1eExMRGE3TzNNSGFWMWF3N2dtZmR1UWMxYmo4RW53RExhZyt1WXp1aC90SEtkeUU4MHZ1ZGpHMjN4cmh4enpWWjAxVzJWVjJrekU1M3ZUMi8vaFhxbHpkQUp5cnpVVXpVajY5UVNQdy9yV1NUTDM0NzB0d09UNXZkMTMrOWplREtwS25WRGYxclMzdXVieG5ySytIVTc3cDNqK1pQZkYvc0JIZ2Y0VHV4djdMTS9kYXR0WEdMY3NQaXZ0WHVveGk3ZE1wbDFGL005YjdzRjdlVGJVdDRYTlQ5ckRjakVkb1AwenlNbjc0S3JMSE9abUJ4eTVoMmp4RDAzTU43Zkc4a0ovYWU4alhFT2RVOSsrWmV0UGNaNmR0YWZVUjFsN0pITTF5Qi9XZ1FXTUt4WitHMjJWZ3RkYlROVDN2SU92L1hjYzl2RkRrcm1XbmZ0T28wTEg5TzFtNXNRUXpUbXpWeWZ5ZnBQcXRkZnkrKzAxUDJ3NlkvdkY1ekR2MTJpOC9jMTNpSVF2WWI3T0p4bjdvYksyOEUwcndiTk1WM3lWZDM0L1Z2eWU1Zks2emZ3c2Q5dDlyajc0dGpqb0k3WUx5Qk9qYnlkelRBcmYwdXhPSmV5TW5NazVLUHJuelovU2dUNENmZnNHYzRJSlhtbjV0VFpZL3ZrbkxFNTRPbVB5UlQrQjdSbjQyTDJQY3RndmtsVHVMYWJqSFRYYnhVSzM3MW5jYjJXTG5lNXJPUUZ5bVk5T1BMTk5OeDVsWjZ0UCtKYW82SzlsYmhEWlZWYlN6cU52dDl0NTlqTG1DWkg4TjBMbWJxSlpaTDdtSFl3SEJwNXRjci9sTTZuQUdHRGd1VWZFTU81YWV1K1ZxRXVJTTNuYS9OUUxiUytiejN0cTRua2IzOWdOOWpUemo3ZXpYQjlKb0praDJXNm5QaWI4aithWDNNYzNQZFZINnptdnhiK1h4VCtQc0hpemx4Z1BvTHJIVStjWHp6UGdHZWJJR3N2VmNOcHk3YlpremxMSnc4Zk1WNnNkbXZPK2dQQ05MQjU3REgxMndnOHhHKzhObGhkaU5lODBTZWE3VGMvWkMzeVFyVEcrRGI2aFhuYVg1MnFMZDNxVU1XTXFhd1h2K0t1Tzl6SW52T0NIYWVjUnpXM01VYW56NW50OEx5L2tuR2RlRjUzWGh0Z1phckxaZTUremZFMVY3ZTdrVlhiM3JaQ2RLUmJ3ZlNMUmw2TytyZnIydDN0YmMvZ2V0L0I3N1J6eGs5M2h1dHZzV2ltUU9kaXJrKzIrYlIrYk8rMVE5L0JXeFRLZWYxWDNWdVp2L2NQeXNsNEQrb3VTWVFIa0xKNnY5d0V0UmpxWk5pamhiMEk3bHhQY21mTVJjR1NkWkV3bVlQTHB5YndCYXBNTGR1ZTNOV01NUkYvWTNuYVpqcllLTVRNcnpWWTVBV3Qrb25oZWFibFloL0ZzSWo1ZCtNNWFPTU9pWGlGKzRDNmVCNFgva1haRnJlR2x1YmJnVys1WnNaQy9tK3F5Z25aQzhXeUFkZ2pqc0pUbGNEaUZYNkZlMlphM2RnWGtEMzNSamJGQTRNTTVjaTM2TjhTRDliZjdib01ZcDZHeVZqQlhwMlNZWkhlT3luRlBsNXh2MGQ2cmNrK0FjSUhvbDFrdXByR2dXYUsyYXNHODM5SmhTdGc5MElGbVQrdk5jNmo0WERRZDR3bStieFgyUHZnZ1FuenNkTHZMZjRMN3ZuZ3VaLzVEbGR1RmMxLzErbzczdFlYZmJ2dGRTWXUvR3NaemRQQmxXRHpNdFdqelE1SnRsdG44WSswZHRIV00rNEt2SVJJN1FmK1h5bDF1T2JXYVltd0UyL2djZS9QbFllWUFFZi9qNXJ0ODArSVB1d0FPT1FvRzJKdTh4M2lHMGpnc1l2TjlJTzJvMnUreThHMisrTjlwTW45amJkaUpQa2ZKWEk5bjhEQWVMRy9KamN3OW9qWThiWGVVaGxHZkYvOTc3S3dkYmVlSVduUlVmeUw3RlhNcEE0NzRPL2kydGVESnRIY0JqdHc3WUU1dndjOVFyd1pNTzFnS2ZiTGExNTdoKy92aTJjbmlPbXFESnNpMjErNE96N0czTUhyVHQ2aHYxNEUrNU5CN2wyZHFsVHZGM3NMWXdUZXZSYjhIOVEzNzdBdU1IUkwrS2RQUDY4TVcwVWY0eDdqR3FvNGxHUWNvL2s4ekZrZzA3MWtzK2wxMkQrSXE3dGVpYjR2MkQyTnlBK2NqOEp5UEs3RCtMQkNmKzNoUFFYQnJ2dFVZOUJ6enNkNWl1U1dmdGx4a0QvRmVyYjVOczVqa2VtWW5UTEkzeTVaVFY1ZHNwZXhkenJFOE53bi9JczlIZ2x2UnBxUjIrTnplV0tsbTc1ZTFwWjFmTXJSRSt3VDVDMW44MjJ1b1M0aWJuV0ordDM0V3MxVFIvRWV2TXNaUDVkN0tuQXppZjR6alJEU2ZNTitnZkJBTlVKZGpvbGx2NisxUTJyWEVaekRmRnhQOGtkM0gyY2o0SEgxYmxQY2RSUE9GM2U4WWEzcmFDNVpITjRzMjRVOWxVK1ZaV1BBWm5vVUJSOVlUMkhWN0lsOWZSQjd1RVpMNWNlWWpCUTN4WDluNjloSnRHcUpaWjdGYnI5cGJhY2RRU09HYkxuMTduNTFubDFpK3dUOFk0eTMrcFRrZkFYTSt2bWJ4bjNHMDg4am05aW4zTmNsY2grTmZaK28xbkhmQ0QrYWFwcnIzMll3K0ZmNUt1eWYxZ01YbGJ1ZWRJTFZKZi9xcHRUZU5vZzlSMzdZMFc4ZFR2QWVuK2o1aE1kak5PYS9sQzE1aTl6aWFNbjVBL0NmeURwSGdlV1pqNldRNnhqSHVhNG90djliaXVndWFiV0dOM2FjWXpQZnJKV2QxK3Y1Q2psbXpVOVV3UFNxTjc2aXF6ZisxK0kwcldTL2dPZmVIOEQ2TDVIek83ckVtTXQrWDlwMGlwb3VlQTJISWUvQWkzN2dYLzlhV0YrSXAray9GOHpEdlNvaW1KdmRROVh0LzVpMVJYYkpvRHc5M0VDeW1jUi92ejRwbUtQUC9DeDRKbmlmRmM2aTk5WE9GNWZLcXl6MUk5QzN3NjZ6bzM0WU9jRjZ5RGFMZFhuVzVqYllkbFR1R09UMCtVMXR4N29ReFFEOG04UHgyRWUzOE9tdWZzN05oYmVxV29pbGhPbllCNms3Q1gydHgrK09zdmxkWXZ0KzM3UzdET295QmVNbnpNdWNPWVBaZEFjalRGSERrbnBUNUpvcmJQajdlMXA5Yk9LY2tRenQ3SC9ZbTJsMkZYOGs4ejRJdjJwMnN5K3hObjhlWTgwcmxYbVArdFFSN3cvRWEranRBdzc1ZWFYRk56ZTNlMy8wV2UvT3d4YjJNNFowRjFmY2ZpMUhQdDN2SGJlMnQvQThnVzVndm4vQytxbVJMc2xqb3J6ak9oYzgzL0tmbXk3NFA3UlowKy8zbWQrakNzYWUxYnFmZEpXbklleTdpT2NkaVdWdGFQcHlSZkM5QWRXbkRPMGVDZnpRL1l5UG9Ob3R1VnR3cGJlemhmVnZ6ajlUQnQxdjBiUUwyNVREMysvSU5kTW5RSDJ0Z25taSs1Tmt6K0dMcy9aZXl6TXNxK2xsMmhoM0lXQ3pCQyt6dS9HeUwxVHpIOTVJME5ocHlqOU5aTWc3dGNFUThsOUFPTEJrcTJWdVpmU0ZidnZETGJQeDNwYjFVMzQ2MFhMS2RtSDllNWE1aXJJSyt2Yy84OGdVdEgzVXQzaXZYM0wrZWZtcXR6OTNNRnpBTHNwMFZuNnNzcjJ4VDVqN1NuT3B1ZnQ3MVp1ZWZpTEtpVGlvT2xqR3VnRW4vSnY1WVR2anJhSnNTUG9sdnhBQ08rRlBzZmtlTzVWVzQyK0lISHJHOEh6TnRUcjFzOFZlYjBZL0JIbktCYzE5bEZXUU9OTUFSR3o3bnNzcGR5M04wQmRtQkdSK2xkNStub0UzNlNPYmY3YjVTYjlReFJkOE9ZZDVYOFh6Yzd2SWN0ak5GTXUrcWl6N0s5T2Qveko3V3krN3pmbW55UDJsK3dMYThWeXQ1YnFmOVJ6eVhtZzEydXZrSVRsayt0ejYwZ1VqT1hSYWYwOC91VS9leFhLbFA4RndwL3JXWnMxMzhIN2R6K2lsYkd5L2EralBCNGlIeklleGF5WHllWjBiMVJTbDd4K2ROOUV1ZXloMk45dHdqT1IrZzMwSGYva3I3ZzhiaEJNWjdpNlk1WTEwa1p6cnQ2cUlmUzcxYStQMzJ6c3RleHZEbzIyS1c4MkVyOVVuaEgrSjgxTGNqR0FQMnVjNG05dTdZTDJqL3dzQ1RaalBmbHhITlp1WXYwajNOT3NESENqK0t1WHhWM3gyTVk1SHVXdHBzZ0ZzdFpuc3VmVXpDMzRYMkx3Yys1RG1HYzBmd1FkUFBoOWs5MEpubUUxbHZOdDRNeXljMkVmV0tsMnkxSVZ1d2FUeG91a0VNODZ1cmpuVk4vbWw4KzE3ZmJ1ZjhFazBKNWdtVWJLM3NEWnBzNWlyUnZPamxlZEo0SjFjMjdmNld5K0psMm5qREcxdm1tNzZWZHlSVjd2VzJwOWV3czg5a3Z0dGJUV09EK1dCRlA5YnlES3hpL0kvd0RmZ2VqWHlDZDFQUGwvdzFhUHNGVEh0T0ZjdXozYzN1ZmZmaXVVYjdTM1hHT1l2L05YYmUzMFU3ajNndTVGbFNiWFdVOTVqVWQvZnlucGZrMmNYMVNIM1J3M0llcG5GZmxvLzRjOGFzaW1jV3ZsMmliOHZ5YlRYQWtmV1pZeXprbXVOYkc1TG5Cb3VWM2NiNUtIbWlMTGR3YSthRkVQNUt5MVc0ay9HbG9WeXpFNWFqYjBYNjJHekxyWlJydG9zdkdMZWdiMHZ6L1d1OUF6WFQzcGFhelRzRmt1RlRleSt5SFcxOUlhYUZzUWZpczhEeUJ4NWt2S1ZvL3FBZFJ2SjN3NWc4RTJET2E4RS9XaXp1U0w2VjlvVnlCa0x2bmFmMy9kdWJQYnd5MTFYUnpEWGI3RWJHcndKUCtyNm1tOVUxTy94ajlMM3FEYXdidUphS3ZnbHpqb25uTTR5WkYzNHU5MlhBck9OWjVxVVhUWFd6UjMxbCtWVWU0VHRjV3NkaVRCOW95eGc1ZlR1ZmNhcHEyeWRNRDd6ZmJDQXo3STd6ZFBQOVRhVmJJK1RWaElCSmtpMkwrV0FsODFUR0dlb2NVWmR2VUlwK05YMnlrbUdReFdZMHN2emJQVTJISE1GWUR2RWZZbmRoeXFPdEJvalBuOWEvZmUyZHRXWW9OK2lUM2MydVhveDM2aVhuRzd5VEpUN2JMTi92Rkl5QkxPRVhXNzZqaG1hdlhzeHpwV2h1c1Z3ZkF4bkRHZUliR2U4aCtkKzMrd3ZqTEg3c1k0dWRTR1JjbHRyaEw3TWgxTEk4RzQ5d1Q1UTgwK3o4T3hsdjZJZXoyREs3UzNLSDVWVjdCWDBVMnFReTMweVJ6Zjlldm1Fa21jdmJPNXM5NllkU0hhKzBHT1BobG5lOWxzVzR4dGk5bTdVOEM2c3VOMWhzNmtIZVlSZk5tNEREZkc5RUhVYjk4cDNGaDQrenZUdktZb2NhMEo4bCtnZjVScTNhT2RWaWUvcHhQWlMrUGRqYTVERFBGS3JYK3lncjdIZnI3YnhXZ25kNXhMK0I1VU4raWJuSUpIOVBpOGU0MStJcUcxZ3VsOHVZRTBBeVBNbTdQT0taeHZnMHlWREhjdVgxZzg1L1NQaG8zRTA3RERnU0oyWTJ5V1QwVWI3cXU0UjVzUVRQb1Q5YWNBdmV5eGI4RmU4WHE1MXIyVGwzRStWVVBGZ2o1bEVQc1RmbTMyL1B1MWNhMisrWXpsbmI3bVp1WW40RDFXdUV2ZGs2Z3JHYXA3VC9XdHZlelhoTDRIbk83ZUE1dTB4Zi9jajg3QXY1Qmdyb0kyOVNRTTR3QjMrenU0VDMyQjNubCtsalVybW43ZjMwTStianlLRXRRcmJmWkhzVHBBeGtTTVMza1ZoTjN0dlYyV2VQK1o2YTgzMGYrVkMrNVQwNHlaWnVlL0VXNmg2UzRSZTdWL1d2N1UzanFiT3ByRlZjRzBWZmsvWnR3YU9aZTBmOG4wTTdCTjI3bk5rSm0xanNZblBMeDNLdjlXTU51ek0xd2ZKQTVqRldUV1VsTS9ZeXZLTnErKzlFODBuVm9QMU45TjlBNXFUd0xwdmxTZWh2OXNrUlpvdExwSDFEL1Q0TU11ZW83anZ3cnRBQ3dkZmJQZG5SOXJic1lzYXFxZHdkbGxOMGdOMXhleFlNVm9obU52M1U0bGtlMzI0QXpIblVsN2tPUkxPYnNTV2kyVWRmc01yS001dmUvWkR6Z0dnbTI3dVorNW1IUkh6K1lCNXY5ZEY0MmoyRW4yTit0d2xjeDBRVHd6TzE1UG1aYTVyd0Qxdk1mR0dMVlZ0bDU2eG12S2V2OWFRZTc0eWZWdTRJaTRmOHhuejZleGhMQ1pySXVzRTgrY0pQdEp4THZlM3Q0OGRZUjgycHJwWnJkTDc1THg2eE9NeTc3VDJMQXN6Ykkza2VOaC9mRldiYjZZVDVHeSthS3l5bXR3WFBOV0djbUUzalhZc2xUa0pkRXZFdDlmQ2x0djZVc0hGeUhkcXp2ZXJiQkxwcko4QVJ2ZEh1RlBUZ1hCUE5VTWdRZEo0UnRPTUpYOHBzWmQydEhXYlFOb0wzNnlOcnIvaytodEVPb0c5ZjV4eFJ1ZE5BbnlFNDNuSjA5d0o5bHRyaGZzYkRhODJmWm5rRnY3UDNGT3BienQ0aHZEY3FucTNScHlIZXVLRzlZL1dYdlhmOHJiMkYvWVA1eDErMU0yTkh4dnlvRGRlWkRhUXUxb0VacXRjOGUvdmdQZWJia2UvMUZOOHAwN2xzbnEwREQ5TEhyYmw4eE00VWhXeXNuclFjVU52c2JIS2FieWdMUDliZWZ4bkxXRm5WUFpWblE5RU1ZanliNU54c2VUSjNXYXpDWVByYTlPMTFwdWY4WmpGSTJ4anJJcHFhZGpkdE5Ob2gwTHhnZHNpTFhHZlVqeS9SM3Fodi83STFjRHgxQnRIczRZL2dDeFp2WE0vRytSN1B5d0U1RDZsZTlkQ2VRU2ZQWmZ1SVR3M0d0d2d1YlhhWWV5d1dheERmMWRJYzMyVjMzQjVBdmM1cEgvbVFaOTV3Zjl6aWpoNm1YMEQxR2s0ZFEvS3NaMS9vVGx5OG5iOGU1SjBPMFIreU1aWmpmdkF5WnZ2ZFluTTJ5MnhpNXkxK3NvRDVRODh3cGtYODV6S3ZqczdzdjFFUENXdUw1VkZzWmI2L3Zid3pvamNyQzlNbStlV2w5V1FKMThid0pnTFA4c0JIMnA5bEtWN3JETzB0d1BQYnQ2ZzdDZTVLZlVQME1lYlRPV1YzdFQ2M0hEdkZ6Ry9ZbVc4UTZOczFQTjhKTGdYNkVPZjVGWFVNbGZVaDQxY0ZSNXR0LzN2bVlBYys4blkvYzU1SXA3cUR0cXhDaXQwMW4vZ0J6bG54T2NYNnl2YVN4UHROR2orcEZpdFNuSDQ2OGI5SWU3dmtYR1IzQTU5a3JodmhFNm1QcWU0ejdhMmx5MHovTEd0ajdFMzZyV3JJNXNiemwvaDh4bmM5MVA1VHVFNUs1clVXcTNZLzM1MFgvV25HcmdTWWVVVmtTMjlDUDc3S2VwZCtSdlhSQjl6M2hSOXZPVU9XMmQyaTMrbXpVM3htQnZVV3lkRFJiRWN6TEVmZmgzWkhQb2Q1QmlUUFkzYVd6T0E5RWVGNzhpeXNkMWh1WjF4QnlGOWtaOG1udVhhSlBwWnJsT0JPakFXVlBNUHBRMVFmSmRLSEtQZ28vZnVpdjVXNUFvUnZaV2U2SlB3NklqNzc2SThRek1kN1RncCttMzQ5amF1ZklQTVo4YWxORzZENG4rQzVRL1Izc2gvVmQzTnQ3K2dLZkpoZmNieVhMZnFQTEJkNkM4YnRoSndrdGlaTTR2djFYMG4zZzV5aDNFSm1FNnRnOFNkbGFFdlJYRHRndnFmSjlvWnNjOHNMbEdSemFnTnROU3ByTjg4c2dDTnpoSFhSbllzNDlIdXNhSjduRzQ2QUkyZFlzNlU4eDdnYWZWdk85dG5ITFlad2pKMlA1akdIbS9oTVk1NUp3QkhmSldSb0wvZ0g4ME50WXN5cTZGKzFlOFFqemJiVHlPS0JxekEyV3pJM1l4eXA0RXpPYThsNXVlWHVxTS94S2QwcERUSmtxYXcvelYvd0xQaE1FNThKcHAvdk5qbWZObnZ5MWJ6L29ySWVwUDlSOERIR0c2aE5pdGpadkxpZHJSNHp2L3kvdEFOSW52c3NSL0duRm1OZnlNN3ZoVzM5YWNSNXJXOFgyWDJmUVl4aFUxdWxtODNuVmF0dlUvRFpJcG16bVhORDY4TUU1dFdScm5VUGRRenhIOGljcTVKbmplVnVpcmZjbU9NWUU2WHgzOW4wNXdGODYxOWxQV1EybnpiMlp0bXpkai9yRUg0ZEVuMEt6eWFTWVpXMVlXUEx5NUZwOXR2ZXBndTlRanVlZFBzVWk5bm93cnN3NGwvVjRycVAyOTJCYy9ZMjRudjA2U2dlb0NiV2s5UDZkcXpGOFQ1dSttMGpPNk5sTVpkNGVIY0RjLytNeHRVQ3UvdHpGM1BnYTYrY2JIYmFJWGJuNnhVL3Y5RHZvN0Y2aGNWd3RzRjRPQ2Q4RWNZMmhQZUNMUjdtVVZ1VGM4MlBNSkcyYnRYckNPZU81R3pGWElXS1hYbllmTVN6TEg5bUh2VVdmYnVBYzdPRTVpbmp2cVRESHdTaThOZTZEOGg0Q2NGdDdONzBhT29Wd0VkaVY4d0gxOFhtWXgzbUxRRk5KQmFGZmgvQk04MHZVOExteUVuVFoyYUJ2cnJvdDFvdXJNYk13U2g3NEdDTExSbEN2VWowVzJ4dlBjODNqa05jdE1uMnNlZjA0MWtQMzNLdHU4enkyVjVtZWV3SE1TZFBlTWVFYjVPcHJOK3Ryek1ZWTZZMnllT2JxaXAzbXIwTFA5dml3VmJnVGRKTzRoTnRzUmxIR0dzcVgxSXhhNThaZG8vcFd0NGh3cmUwYnd5MHUyUE56SWF3MDg1M2Jaa3JRLzNZanJxTnloMWc3eFRmWmZiYmtyUW5xMDJtTXg1WWNMejVhb2ZUM3E3NnpqZmRJTWJ1aHo0SStZUGZyVFA2THJ6UjBOWE9OYkcwUzBoM09tdm4wSnNaTXl5WmQ5cDVyUlJ6QzJzUDNjWDdYNnJMTFl3L2xEd1AybHZ3K1Z6bnd4bkhZaEdyMkwybmEybWZVUjFYYzI4SWRoNTd5Nit6dllsendQU0VEK3hjK2F6RlB3d3krOFp6OUVOSnR0bFc5MjBXbTVGc3ZvOHhrUG1ZNkQ5Zy9KNzRwMWx1aERsOEswZG5rMS90emdMcndQK1NCUE9uSmRjSDZtUTh4K3Z2a1hXSVk0TmpndTFIV3ozM1M4WUMwNTk0S1ZVUnI4dEc4SFJYOGY5TU1kV005cGpVbUtnRS9GeUxuNzlTWXFLK3dNOE8vQ3pFVHpwK211Q25ESDUrSFJRVGxZZWZ3cEgvQ2hRb1hEaXE1WkxOYjBSZFhxS0RKTGt0cW1VdUVXdUtCRXlIa1dPVDA0ZW14QTFPVHg2U0dUVW9hM3hjaFdaeFk3SXpzekpUQjJYVXFWZC9lTzMrWXhQNkovYXYzWC9RcUpGWnFlT3orbzhjMVQ5alRPcWdVU015b2pKVDB3ZkhaYVZtWnNVTlRoNmFucG9TMVhiVW1MaXN0S0daY1puSkl6TFNVNnRmK2tmOXVqVUdUc2hLamN2TUdqTjA1SkM0Y1VQVDArTUdwc1psWjZhbXhDVm54ZzBkbVpHZEZaZVNuSlVjRlI4Ukk2NXlYTmMydDNaQzZiZlg3dCsyWTh0MlhmdDM2OVdwVGY4N1duYTl2VXBjczJiLzgxOXZ2ZXVPVGwzYWRPM2E0YTQ3SWRpZzRha1RXSlU3dTNmc0dKV1JQZEQvT1NvN2l5V0dmMTRxLzcvK01UMTE1SDh3bVVPSE9Ed3lPU3Q3VE9wL01HZ0tOTjkvL2JwKzRuOWxidjhla1Rra0xUa3pyVzZkLzhhZ2ViTzRoTGpLbGVNdS9hdHBzN2k2VWY5akw2UU9HcEdkbnZXZnpoaWEyWDlnOXREMHJQaks2TG9hemNOZnM4WlgrZjkrUGlSMTVQL0NJa0pCTmhYK1J6NkRVL25keE5ReG8rSXJEMG10MFJ5RVZmOXZ5NkV5OGYvUHJtelZvWnYzVlpXNEZuRjE2MmJITlk2clh5KzdDa2JvcGYvYVI3VzhrSXVSV3FCQVZNdlYyd0JVT0RkMy9KdTdmeWhlclVqVmt4bno2L3g1UTZlREJ5cHNHbGR0M2NjN2l6N3g3ZkJUcmFaRnRaeTJIWVIzTGlsNzRlcDdwaGVNV3JYNHdTL3l0MThSZFhGNXdXS1h6NzR5cWsrVm9yMFA3cjQ4S3YrUEtZTmZuTUFVYkRGL3pUOVNMT3JBMHBiZDArWVdqdHBaOXU4TnhVdGVHYlYvMzEwbnVyZU5qbnF5OHJnVGpTSEhTWEpONkphR0FUd29PVDE1VE56Z01Nckh4K0ZYOXNqaEkwZU5HeW01a1RUaDMzLy8rZmZmZjZOYWJ0eUI3MklpRjZ6Z1ozbmpSSTB2Zm52dGxtTGdSM3pzRDd0ZnJ6Vm16UlZSQlZ0ZnpMNThjWUdvbXpxM1FWVnpkdUp2U1MxYjFqOHlyMS9CcUw5ZktEVDMvTEFyby9LMzdnYkxxNkxBRnYrRi8yT3hpZEFkYmZIRHRJcDdsMlcrVVBXN1MzOUEyZStTVHptVi9kS2Q0ell0amZvNThkSmxMNjVITFJmc1V0dm1FWWg1NWZTK3l6Wk83VFlxUHVmS0FoOU11ZlYwVk12anhLOHZVUDN1YmMwMnZKWDY0WWpFckdJSEw0dWZ5NXI1ZjdWelAyNnpMTzZSTTFQZk9ETTZkdTZtWm1XK203SHc5SUwwTTI4TlAvWlVoYU96RWtaUFBUQjM2ODdSWlY0dCt1dktMY1ZMVlR6dzN3b2FzL2VtNnlZL1d2Q3o4WU9ueDMxYnNXYXAzaW1sY2dxV3I3enVaRUtmL1IyZkh0VDFod0tMUjhlbmw0Z3EzV2RwejFxZGkwVjFPTGZpbThURTZLaHZKN1QrcXVob2JKMnAxWVo5TXhIMWVZNzFLUnZWY2tNRUtCZlZjZytCMHBIblNOVXpoTThzS2hVMXVFVEdtRkVwMllOU3gyUVdpQVk0S0RVVEt4R1dxRUxSM1FkbWo4ektqaHVVbmp4eVNNbmFpVFVUYWliVXFKMGRRZGF1V2J2b3VPUjB6SWFpQ1RWck42cVpFRDB1T1hORWpZRkRSNlpncnBSS3FGbW5ab05HY2ZHTkJpYWtKQ1lNYXBCY0phcmlWVm5KWTRha1ptR3lSSmFNekFMVnJocVJuWlU4TUQyMXhwRDBVUU9UMHpQL0Q2VWhCV0k9JztcbiIsIi8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9cbmltcG9ydCB7IGhtYWMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL2htYWMnO1xuaW1wb3J0IHsgY29uY2F0Qnl0ZXMsIHJhbmRvbUJ5dGVzIH0gZnJvbSAnQG5vYmxlL2hhc2hlcy91dGlscyc7XG5pbXBvcnQgeyB3ZWllcnN0cmFzcyB9IGZyb20gJy4vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMnO1xuLy8gY29ubmVjdHMgbm9ibGUtY3VydmVzIHRvIG5vYmxlLWhhc2hlc1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhhc2goaGFzaCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGhhc2gsXG4gICAgICAgIGhtYWM6IChrZXksIC4uLm1zZ3MpID0+IGhtYWMoaGFzaCwga2V5LCBjb25jYXRCeXRlcyguLi5tc2dzKSksXG4gICAgICAgIHJhbmRvbUJ5dGVzLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VydmUoY3VydmVEZWYsIGRlZkhhc2gpIHtcbiAgICBjb25zdCBjcmVhdGUgPSAoaGFzaCkgPT4gd2VpZXJzdHJhc3MoeyAuLi5jdXJ2ZURlZiwgLi4uZ2V0SGFzaChoYXNoKSB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLmNyZWF0ZShkZWZIYXNoKSwgY3JlYXRlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X3Nob3J0d191dGlscy5qcy5tYXAiLCIvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovXG4vLyBBYmVsaWFuIGdyb3VwIHV0aWxpdGllc1xuaW1wb3J0IHsgdmFsaWRhdGVGaWVsZCwgbkxlbmd0aCB9IGZyb20gJy4vbW9kdWxhci5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gJy4vdXRpbHMuanMnO1xuY29uc3QgXzBuID0gQmlnSW50KDApO1xuY29uc3QgXzFuID0gQmlnSW50KDEpO1xuLy8gRWxsaXB0aWMgY3VydmUgbXVsdGlwbGljYXRpb24gb2YgUG9pbnQgYnkgc2NhbGFyLiBGcmFnaWxlLlxuLy8gU2NhbGFycyBzaG91bGQgYWx3YXlzIGJlIGxlc3MgdGhhbiBjdXJ2ZSBvcmRlcjogdGhpcyBzaG91bGQgYmUgY2hlY2tlZCBpbnNpZGUgb2YgYSBjdXJ2ZSBpdHNlbGYuXG4vLyBDcmVhdGVzIHByZWNvbXB1dGF0aW9uIHRhYmxlcyBmb3IgZmFzdCBtdWx0aXBsaWNhdGlvbjpcbi8vIC0gcHJpdmF0ZSBzY2FsYXIgaXMgc3BsaXQgYnkgZml4ZWQgc2l6ZSB3aW5kb3dzIG9mIFcgYml0c1xuLy8gLSBldmVyeSB3aW5kb3cgcG9pbnQgaXMgY29sbGVjdGVkIGZyb20gd2luZG93J3MgdGFibGUgJiBhZGRlZCB0byBhY2N1bXVsYXRvclxuLy8gLSBzaW5jZSB3aW5kb3dzIGFyZSBkaWZmZXJlbnQsIHNhbWUgcG9pbnQgaW5zaWRlIHRhYmxlcyB3b24ndCBiZSBhY2Nlc3NlZCBtb3JlIHRoYW4gb25jZSBwZXIgY2FsY1xuLy8gLSBlYWNoIG11bHRpcGxpY2F0aW9uIGlzICdNYXRoLmNlaWwoQ1VSVkVfT1JERVIgLyDwnZGKKSArIDEnIHBvaW50IGFkZGl0aW9ucyAoZml4ZWQgZm9yIGFueSBzY2FsYXIpXG4vLyAtICsxIHdpbmRvdyBpcyBuZWNjZXNzYXJ5IGZvciB3TkFGXG4vLyAtIHdOQUYgcmVkdWNlcyB0YWJsZSBzaXplOiAyeCBsZXNzIG1lbW9yeSArIDJ4IGZhc3RlciBnZW5lcmF0aW9uLCBidXQgMTAlIHNsb3dlciBtdWx0aXBsaWNhdGlvblxuLy8gVE9ETzogUmVzZWFyY2ggcmV0dXJuaW5nIDJkIEpTIGFycmF5IG9mIHdpbmRvd3MsIGluc3RlYWQgb2YgYSBzaW5nbGUgd2luZG93LiBUaGlzIHdvdWxkIGFsbG93XG4vLyB3aW5kb3dzIHRvIGJlIGluIGRpZmZlcmVudCBtZW1vcnkgbG9jYXRpb25zXG5leHBvcnQgZnVuY3Rpb24gd05BRihjLCBiaXRzKSB7XG4gICAgY29uc3QgY29uc3RUaW1lTmVnYXRlID0gKGNvbmRpdGlvbiwgaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBuZWcgPSBpdGVtLm5lZ2F0ZSgpO1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gbmVnIDogaXRlbTtcbiAgICB9O1xuICAgIGNvbnN0IG9wdHMgPSAoVykgPT4ge1xuICAgICAgICBjb25zdCB3aW5kb3dzID0gTWF0aC5jZWlsKGJpdHMgLyBXKSArIDE7IC8vICsxLCBiZWNhdXNlXG4gICAgICAgIGNvbnN0IHdpbmRvd1NpemUgPSAyICoqIChXIC0gMSk7IC8vIC0xIGJlY2F1c2Ugd2Ugc2tpcCB6ZXJvXG4gICAgICAgIHJldHVybiB7IHdpbmRvd3MsIHdpbmRvd1NpemUgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbnN0VGltZU5lZ2F0ZSxcbiAgICAgICAgLy8gbm9uLWNvbnN0IHRpbWUgbXVsdGlwbGljYXRpb24gbGFkZGVyXG4gICAgICAgIHVuc2FmZUxhZGRlcihlbG0sIG4pIHtcbiAgICAgICAgICAgIGxldCBwID0gYy5aRVJPO1xuICAgICAgICAgICAgbGV0IGQgPSBlbG07XG4gICAgICAgICAgICB3aGlsZSAobiA+IF8wbikge1xuICAgICAgICAgICAgICAgIGlmIChuICYgXzFuKVxuICAgICAgICAgICAgICAgICAgICBwID0gcC5hZGQoZCk7XG4gICAgICAgICAgICAgICAgZCA9IGQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgbiA+Pj0gXzFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgd05BRiBwcmVjb21wdXRhdGlvbiB3aW5kb3cuIFVzZWQgZm9yIGNhY2hpbmcuXG4gICAgICAgICAqIERlZmF1bHQgd2luZG93IHNpemUgaXMgc2V0IGJ5IGB1dGlscy5wcmVjb21wdXRlKClgIGFuZCBpcyBlcXVhbCB0byA4LlxuICAgICAgICAgKiBOdW1iZXIgb2YgcHJlY29tcHV0ZWQgcG9pbnRzIGRlcGVuZHMgb24gdGhlIGN1cnZlIHNpemU6XG4gICAgICAgICAqIDJeKPCdkYriiJIxKSAqIChNYXRoLmNlaWwo8J2RmyAvIPCdkYopICsgMSksIHdoZXJlOlxuICAgICAgICAgKiAtIPCdkYogaXMgdGhlIHdpbmRvdyBzaXplXG4gICAgICAgICAqIC0g8J2RmyBpcyB0aGUgYml0bGVuZ3RoIG9mIHRoZSBjdXJ2ZSBvcmRlci5cbiAgICAgICAgICogRm9yIGEgMjU2LWJpdCBjdXJ2ZSBhbmQgd2luZG93IHNpemUgOCwgdGhlIG51bWJlciBvZiBwcmVjb21wdXRlZCBwb2ludHMgaXMgMTI4ICogMzMgPSA0MjI0LlxuICAgICAgICAgKiBAcmV0dXJucyBwcmVjb21wdXRlZCBwb2ludCB0YWJsZXMgZmxhdHRlbmVkIHRvIGEgc2luZ2xlIGFycmF5XG4gICAgICAgICAqL1xuICAgICAgICBwcmVjb21wdXRlV2luZG93KGVsbSwgVykge1xuICAgICAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgICAgICBsZXQgcCA9IGVsbTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gcDtcbiAgICAgICAgICAgIGZvciAobGV0IHdpbmRvdyA9IDA7IHdpbmRvdyA8IHdpbmRvd3M7IHdpbmRvdysrKSB7XG4gICAgICAgICAgICAgICAgYmFzZSA9IHA7XG4gICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goYmFzZSk7XG4gICAgICAgICAgICAgICAgLy8gPTEsIGJlY2F1c2Ugd2Ugc2tpcCB6ZXJvXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB3aW5kb3dTaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UuYWRkKHApO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChiYXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcCA9IGJhc2UuZG91YmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogSW1wbGVtZW50cyBlYyBtdWx0aXBsaWNhdGlvbiB1c2luZyBwcmVjb21wdXRlZCB0YWJsZXMgYW5kIHctYXJ5IG5vbi1hZGphY2VudCBmb3JtLlxuICAgICAgICAgKiBAcGFyYW0gVyB3aW5kb3cgc2l6ZVxuICAgICAgICAgKiBAcGFyYW0gcHJlY29tcHV0ZXMgcHJlY29tcHV0ZWQgdGFibGVzXG4gICAgICAgICAqIEBwYXJhbSBuIHNjYWxhciAod2UgZG9uJ3QgY2hlY2sgaGVyZSwgYnV0IHNob3VsZCBiZSBsZXNzIHRoYW4gY3VydmUgb3JkZXIpXG4gICAgICAgICAqIEByZXR1cm5zIHJlYWwgYW5kIGZha2UgKGZvciBjb25zdC10aW1lKSBwb2ludHNcbiAgICAgICAgICovXG4gICAgICAgIHdOQUYoVywgcHJlY29tcHV0ZXMsIG4pIHtcbiAgICAgICAgICAgIC8vIFRPRE86IG1heWJlIGNoZWNrIHRoYXQgc2NhbGFyIGlzIGxlc3MgdGhhbiBncm91cCBvcmRlcj8gd05BRiBiZWhhdmlvdXMgaXMgdW5kZWZpbmVkIG90aGVyd2lzZVxuICAgICAgICAgICAgLy8gQnV0IG5lZWQgdG8gY2FyZWZ1bGx5IHJlbW92ZSBvdGhlciBjaGVja3MgYmVmb3JlIHdOQUYuIE9SREVSID09IGJpdHMgaGVyZVxuICAgICAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpO1xuICAgICAgICAgICAgbGV0IHAgPSBjLlpFUk87XG4gICAgICAgICAgICBsZXQgZiA9IGMuQkFTRTtcbiAgICAgICAgICAgIGNvbnN0IG1hc2sgPSBCaWdJbnQoMiAqKiBXIC0gMSk7IC8vIENyZWF0ZSBtYXNrIHdpdGggVyBvbmVzOiAwYjExMTEgZm9yIFc9NCBldGMuXG4gICAgICAgICAgICBjb25zdCBtYXhOdW1iZXIgPSAyICoqIFc7XG4gICAgICAgICAgICBjb25zdCBzaGlmdEJ5ID0gQmlnSW50KFcpO1xuICAgICAgICAgICAgZm9yIChsZXQgd2luZG93ID0gMDsgd2luZG93IDwgd2luZG93czsgd2luZG93KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB3aW5kb3cgKiB3aW5kb3dTaXplO1xuICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgVyBiaXRzLlxuICAgICAgICAgICAgICAgIGxldCB3Yml0cyA9IE51bWJlcihuICYgbWFzayk7XG4gICAgICAgICAgICAgICAgLy8gU2hpZnQgbnVtYmVyIGJ5IFcgYml0cy5cbiAgICAgICAgICAgICAgICBuID4+PSBzaGlmdEJ5O1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBiaXRzIGFyZSBiaWdnZXIgdGhhbiBtYXggc2l6ZSwgd2UnbGwgc3BsaXQgdGhvc2UuXG4gICAgICAgICAgICAgICAgLy8gKzIyNCA9PiAyNTYgLSAzMlxuICAgICAgICAgICAgICAgIGlmICh3Yml0cyA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2JpdHMgLT0gbWF4TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBuICs9IF8xbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBmaXJzdCB3cml0dGVuIHdpdGggYXNzdW1wdGlvbiB0aGF0ICdmJyBhbmQgJ3AnIHdpbGwgbmV2ZXIgYmUgaW5maW5pdHkgcG9pbnQ6XG4gICAgICAgICAgICAgICAgLy8gc2luY2UgZWFjaCBhZGRpdGlvbiBpcyBtdWx0aXBsaWVkIGJ5IDIgKiogVywgaXQgY2Fubm90IGNhbmNlbCBlYWNoIG90aGVyLiBIb3dldmVyLFxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5lZ2F0ZSBub3c6IGl0IGlzIHBvc3NpYmxlIHRoYXQgbmVnYXRlZCBlbGVtZW50IGZyb20gbG93IHZhbHVlXG4gICAgICAgICAgICAgICAgLy8gd291bGQgYmUgdGhlIHNhbWUgYXMgaGlnaCBlbGVtZW50LCB3aGljaCB3aWxsIGNyZWF0ZSBjYXJyeSBpbnRvIG5leHQgd2luZG93LlxuICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IG9idmlvdXMgaG93IHRoaXMgY2FuIGZhaWwsIGJ1dCBzdGlsbCB3b3J0aCBpbnZlc3RpZ2F0aW5nIGxhdGVyLlxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9udG8gWmVybyBwb2ludC5cbiAgICAgICAgICAgICAgICAvLyBBZGQgcmFuZG9tIHBvaW50IGluc2lkZSBjdXJyZW50IHdpbmRvdyB0byBmLlxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldDEgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0MiA9IG9mZnNldCArIE1hdGguYWJzKHdiaXRzKSAtIDE7IC8vIC0xIGJlY2F1c2Ugd2Ugc2tpcCB6ZXJvXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZDEgPSB3aW5kb3cgJSAyICE9PSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmQyID0gd2JpdHMgPCAwO1xuICAgICAgICAgICAgICAgIGlmICh3Yml0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBmb3IgY29uc3QtdGltZSBnZXRQdWJsaWNLZXlcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYuYWRkKGNvbnN0VGltZU5lZ2F0ZShjb25kMSwgcHJlY29tcHV0ZXNbb2Zmc2V0MV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLmFkZChjb25zdFRpbWVOZWdhdGUoY29uZDIsIHByZWNvbXB1dGVzW29mZnNldDJdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSklULWNvbXBpbGVyIHNob3VsZCBub3QgZWxpbWluYXRlIGYgaGVyZSwgc2luY2UgaXQgd2lsbCBsYXRlciBiZSB1c2VkIGluIG5vcm1hbGl6ZVooKVxuICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgdmFyaWFibGUgaXMgc3RpbGwgdW51c2VkLCB0aGVyZSBhcmUgc29tZSBjaGVja3Mgd2hpY2ggd2lsbFxuICAgICAgICAgICAgLy8gdGhyb3cgYW4gZXhjZXB0aW9uLCBzbyBjb21waWxlciBuZWVkcyB0byBwcm92ZSB0aGV5IHdvbid0IGhhcHBlbiwgd2hpY2ggaXMgaGFyZC5cbiAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgYSB3YXkgdG8gRiBiZSBpbmZpbml0eS1wb2ludCBldmVuIGlmIHAgaXMgbm90LFxuICAgICAgICAgICAgLy8gd2hpY2ggbWFrZXMgaXQgbGVzcyBjb25zdC10aW1lOiBhcm91bmQgMSBiaWdpbnQgbXVsdGlwbHkuXG4gICAgICAgICAgICByZXR1cm4geyBwLCBmIH07XG4gICAgICAgIH0sXG4gICAgICAgIHdOQUZDYWNoZWQoUCwgcHJlY29tcHV0ZXNNYXAsIG4sIHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgVyA9IFAuX1dJTkRPV19TSVpFIHx8IDE7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgcHJlY29tcHV0ZXMgb24gYSBmaXJzdCBydW4sIHJldXNlIHRoZW0gYWZ0ZXJcbiAgICAgICAgICAgIGxldCBjb21wID0gcHJlY29tcHV0ZXNNYXAuZ2V0KFApO1xuICAgICAgICAgICAgaWYgKCFjb21wKSB7XG4gICAgICAgICAgICAgICAgY29tcCA9IHRoaXMucHJlY29tcHV0ZVdpbmRvdyhQLCBXKTtcbiAgICAgICAgICAgICAgICBpZiAoVyAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVjb21wdXRlc01hcC5zZXQoUCwgdHJhbnNmb3JtKGNvbXApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53TkFGKFcsIGNvbXAsIG4pO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCYXNpYyhjdXJ2ZSkge1xuICAgIHZhbGlkYXRlRmllbGQoY3VydmUuRnApO1xuICAgIHZhbGlkYXRlT2JqZWN0KGN1cnZlLCB7XG4gICAgICAgIG46ICdiaWdpbnQnLFxuICAgICAgICBoOiAnYmlnaW50JyxcbiAgICAgICAgR3g6ICdmaWVsZCcsXG4gICAgICAgIEd5OiAnZmllbGQnLFxuICAgIH0sIHtcbiAgICAgICAgbkJpdExlbmd0aDogJ2lzU2FmZUludGVnZXInLFxuICAgICAgICBuQnl0ZUxlbmd0aDogJ2lzU2FmZUludGVnZXInLFxuICAgIH0pO1xuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgLi4ubkxlbmd0aChjdXJ2ZS5uLCBjdXJ2ZS5uQml0TGVuZ3RoKSxcbiAgICAgICAgLi4uY3VydmUsXG4gICAgICAgIC4uLnsgcDogY3VydmUuRnAuT1JERVIgfSxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWN1cnZlLmpzLm1hcCIsImltcG9ydCB7IG1vZCB9IGZyb20gJy4vbW9kdWxhci5qcyc7XG5pbXBvcnQgeyBieXRlc1RvTnVtYmVyQkUsIGFieXRlcywgY29uY2F0Qnl0ZXMsIHV0ZjhUb0J5dGVzLCB2YWxpZGF0ZU9iamVjdCB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gT2N0ZXQgU3RyZWFtIHRvIEludGVnZXIuIFwic3BlY1wiIGltcGxlbWVudGF0aW9uIG9mIG9zMmlwIGlzIDIuNXggc2xvd2VyIHZzIGJ5dGVzVG9OdW1iZXJCRS5cbmNvbnN0IG9zMmlwID0gYnl0ZXNUb051bWJlckJFO1xuLy8gSW50ZWdlciB0byBPY3RldCBTdHJlYW0gKG51bWJlclRvQnl0ZXNCRSlcbmZ1bmN0aW9uIGkyb3NwKHZhbHVlLCBsZW5ndGgpIHtcbiAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IDEgPDwgKDggKiBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIEkyT1NQIGNhbGw6IHZhbHVlPSR7dmFsdWV9IGxlbmd0aD0ke2xlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KS5maWxsKDApO1xuICAgIGZvciAobGV0IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICByZXNbaV0gPSB2YWx1ZSAmIDB4ZmY7XG4gICAgICAgIHZhbHVlID4+Pj0gODtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlcyk7XG59XG5mdW5jdGlvbiBzdHJ4b3IoYSwgYikge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KGEubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldID0gYVtpXSBeIGJbaV07XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59XG5mdW5jdGlvbiBhbnVtKGl0ZW0pIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGl0ZW0pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ251bWJlciBleHBlY3RlZCcpO1xufVxuLy8gUHJvZHVjZXMgYSB1bmlmb3JtbHkgcmFuZG9tIGJ5dGUgc3RyaW5nIHVzaW5nIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9uIEggdGhhdCBvdXRwdXRzIGIgYml0c1xuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkzODAjc2VjdGlvbi01LjMuMVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuSW5CeXRlcywgSCkge1xuICAgIGFieXRlcyhtc2cpO1xuICAgIGFieXRlcyhEU1QpO1xuICAgIGFudW0obGVuSW5CeXRlcyk7XG4gICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkzODAjc2VjdGlvbi01LjMuM1xuICAgIGlmIChEU1QubGVuZ3RoID4gMjU1KVxuICAgICAgICBEU1QgPSBIKGNvbmNhdEJ5dGVzKHV0ZjhUb0J5dGVzKCdIMkMtT1ZFUlNJWkUtRFNULScpLCBEU1QpKTtcbiAgICBjb25zdCB7IG91dHB1dExlbjogYl9pbl9ieXRlcywgYmxvY2tMZW46IHJfaW5fYnl0ZXMgfSA9IEg7XG4gICAgY29uc3QgZWxsID0gTWF0aC5jZWlsKGxlbkluQnl0ZXMgLyBiX2luX2J5dGVzKTtcbiAgICBpZiAoZWxsID4gMjU1KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgeG1kIGxlbmd0aCcpO1xuICAgIGNvbnN0IERTVF9wcmltZSA9IGNvbmNhdEJ5dGVzKERTVCwgaTJvc3AoRFNULmxlbmd0aCwgMSkpO1xuICAgIGNvbnN0IFpfcGFkID0gaTJvc3AoMCwgcl9pbl9ieXRlcyk7XG4gICAgY29uc3QgbF9pX2Jfc3RyID0gaTJvc3AobGVuSW5CeXRlcywgMik7IC8vIGxlbl9pbl9ieXRlc19zdHJcbiAgICBjb25zdCBiID0gbmV3IEFycmF5KGVsbCk7XG4gICAgY29uc3QgYl8wID0gSChjb25jYXRCeXRlcyhaX3BhZCwgbXNnLCBsX2lfYl9zdHIsIGkyb3NwKDAsIDEpLCBEU1RfcHJpbWUpKTtcbiAgICBiWzBdID0gSChjb25jYXRCeXRlcyhiXzAsIGkyb3NwKDEsIDEpLCBEU1RfcHJpbWUpKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBlbGw7IGkrKykge1xuICAgICAgICBjb25zdCBhcmdzID0gW3N0cnhvcihiXzAsIGJbaSAtIDFdKSwgaTJvc3AoaSArIDEsIDEpLCBEU1RfcHJpbWVdO1xuICAgICAgICBiW2ldID0gSChjb25jYXRCeXRlcyguLi5hcmdzKSk7XG4gICAgfVxuICAgIGNvbnN0IHBzZXVkb19yYW5kb21fYnl0ZXMgPSBjb25jYXRCeXRlcyguLi5iKTtcbiAgICByZXR1cm4gcHNldWRvX3JhbmRvbV9ieXRlcy5zbGljZSgwLCBsZW5JbkJ5dGVzKTtcbn1cbi8vIFByb2R1Y2VzIGEgdW5pZm9ybWx5IHJhbmRvbSBieXRlIHN0cmluZyB1c2luZyBhbiBleHRlbmRhYmxlLW91dHB1dCBmdW5jdGlvbiAoWE9GKSBILlxuLy8gMS4gVGhlIGNvbGxpc2lvbiByZXNpc3RhbmNlIG9mIEggTVVTVCBiZSBhdCBsZWFzdCBrIGJpdHMuXG4vLyAyLiBIIE1VU1QgYmUgYW4gWE9GIHRoYXQgaGFzIGJlZW4gcHJvdmVkIGluZGlmZmVyZW50aWFibGUgZnJvbVxuLy8gICAgYSByYW5kb20gb3JhY2xlIHVuZGVyIGEgcmVhc29uYWJsZSBjcnlwdG9ncmFwaGljIGFzc3VtcHRpb24uXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTUuMy4yXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kX21lc3NhZ2VfeG9mKG1zZywgRFNULCBsZW5JbkJ5dGVzLCBrLCBIKSB7XG4gICAgYWJ5dGVzKG1zZyk7XG4gICAgYWJ5dGVzKERTVCk7XG4gICAgYW51bShsZW5JbkJ5dGVzKTtcbiAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTUuMy4zXG4gICAgLy8gRFNUID0gSCgnSDJDLU9WRVJTSVpFLURTVC0nIHx8IGFfdmVyeV9sb25nX0RTVCwgTWF0aC5jZWlsKChsZW5JbkJ5dGVzICogaykgLyA4KSk7XG4gICAgaWYgKERTVC5sZW5ndGggPiAyNTUpIHtcbiAgICAgICAgY29uc3QgZGtMZW4gPSBNYXRoLmNlaWwoKDIgKiBrKSAvIDgpO1xuICAgICAgICBEU1QgPSBILmNyZWF0ZSh7IGRrTGVuIH0pLnVwZGF0ZSh1dGY4VG9CeXRlcygnSDJDLU9WRVJTSVpFLURTVC0nKSkudXBkYXRlKERTVCkuZGlnZXN0KCk7XG4gICAgfVxuICAgIGlmIChsZW5JbkJ5dGVzID4gNjU1MzUgfHwgRFNULmxlbmd0aCA+IDI1NSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBhbmRfbWVzc2FnZV94b2Y6IGludmFsaWQgbGVuSW5CeXRlcycpO1xuICAgIHJldHVybiAoSC5jcmVhdGUoeyBka0xlbjogbGVuSW5CeXRlcyB9KVxuICAgICAgICAudXBkYXRlKG1zZylcbiAgICAgICAgLnVwZGF0ZShpMm9zcChsZW5JbkJ5dGVzLCAyKSlcbiAgICAgICAgLy8gMi4gRFNUX3ByaW1lID0gRFNUIHx8IEkyT1NQKGxlbihEU1QpLCAxKVxuICAgICAgICAudXBkYXRlKERTVClcbiAgICAgICAgLnVwZGF0ZShpMm9zcChEU1QubGVuZ3RoLCAxKSlcbiAgICAgICAgLmRpZ2VzdCgpKTtcbn1cbi8qKlxuICogSGFzaGVzIGFyYml0cmFyeS1sZW5ndGggYnl0ZSBzdHJpbmdzIHRvIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBlbGVtZW50cyBvZiBhIGZpbml0ZSBmaWVsZCBGXG4gKiBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTUuMlxuICogQHBhcmFtIG1zZyBhIGJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UgdG8gaGFzaFxuICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgRiB0byBvdXRwdXRcbiAqIEBwYXJhbSBvcHRpb25zIGB7RFNUOiBzdHJpbmcsIHA6IGJpZ2ludCwgbTogbnVtYmVyLCBrOiBudW1iZXIsIGV4cGFuZDogJ3htZCcgfCAneG9mJywgaGFzaDogSH1gLCBzZWUgYWJvdmVcbiAqIEByZXR1cm5zIFt1XzAsIC4uLiwgdV8oY291bnQgLSAxKV0sIGEgbGlzdCBvZiBmaWVsZCBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hfdG9fZmllbGQobXNnLCBjb3VudCwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsIHtcbiAgICAgICAgRFNUOiAnc3RyaW5nT3JVaW50OEFycmF5JyxcbiAgICAgICAgcDogJ2JpZ2ludCcsXG4gICAgICAgIG06ICdpc1NhZmVJbnRlZ2VyJyxcbiAgICAgICAgazogJ2lzU2FmZUludGVnZXInLFxuICAgICAgICBoYXNoOiAnaGFzaCcsXG4gICAgfSk7XG4gICAgY29uc3QgeyBwLCBrLCBtLCBoYXNoLCBleHBhbmQsIERTVDogX0RTVCB9ID0gb3B0aW9ucztcbiAgICBhYnl0ZXMobXNnKTtcbiAgICBhbnVtKGNvdW50KTtcbiAgICBjb25zdCBEU1QgPSB0eXBlb2YgX0RTVCA9PT0gJ3N0cmluZycgPyB1dGY4VG9CeXRlcyhfRFNUKSA6IF9EU1Q7XG4gICAgY29uc3QgbG9nMnAgPSBwLnRvU3RyaW5nKDIpLmxlbmd0aDtcbiAgICBjb25zdCBMID0gTWF0aC5jZWlsKChsb2cycCArIGspIC8gOCk7IC8vIHNlY3Rpb24gNS4xIG9mIGlldGYgZHJhZnQgbGluayBhYm92ZVxuICAgIGNvbnN0IGxlbl9pbl9ieXRlcyA9IGNvdW50ICogbSAqIEw7XG4gICAgbGV0IHByYjsgLy8gcHNldWRvX3JhbmRvbV9ieXRlc1xuICAgIGlmIChleHBhbmQgPT09ICd4bWQnKSB7XG4gICAgICAgIHByYiA9IGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuX2luX2J5dGVzLCBoYXNoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXhwYW5kID09PSAneG9mJykge1xuICAgICAgICBwcmIgPSBleHBhbmRfbWVzc2FnZV94b2YobXNnLCBEU1QsIGxlbl9pbl9ieXRlcywgaywgaGFzaCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV4cGFuZCA9PT0gJ19pbnRlcm5hbF9wYXNzJykge1xuICAgICAgICAvLyBmb3IgaW50ZXJuYWwgdGVzdHMgb25seVxuICAgICAgICBwcmIgPSBtc2c7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGFuZCBtdXN0IGJlIFwieG1kXCIgb3IgXCJ4b2ZcIicpO1xuICAgIH1cbiAgICBjb25zdCB1ID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgZSA9IG5ldyBBcnJheShtKTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVsbV9vZmZzZXQgPSBMICogKGogKyBpICogbSk7XG4gICAgICAgICAgICBjb25zdCB0diA9IHByYi5zdWJhcnJheShlbG1fb2Zmc2V0LCBlbG1fb2Zmc2V0ICsgTCk7XG4gICAgICAgICAgICBlW2pdID0gbW9kKG9zMmlwKHR2KSwgcCk7XG4gICAgICAgIH1cbiAgICAgICAgdVtpXSA9IGU7XG4gICAgfVxuICAgIHJldHVybiB1O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzb2dlbnlNYXAoZmllbGQsIG1hcCkge1xuICAgIC8vIE1ha2Ugc2FtZSBvcmRlciBhcyBpbiBzcGVjXG4gICAgY29uc3QgQ09FRkYgPSBtYXAubWFwKChpKSA9PiBBcnJheS5mcm9tKGkpLnJldmVyc2UoKSk7XG4gICAgcmV0dXJuICh4LCB5KSA9PiB7XG4gICAgICAgIGNvbnN0IFt4TnVtLCB4RGVuLCB5TnVtLCB5RGVuXSA9IENPRUZGLm1hcCgodmFsKSA9PiB2YWwucmVkdWNlKChhY2MsIGkpID0+IGZpZWxkLmFkZChmaWVsZC5tdWwoYWNjLCB4KSwgaSkpKTtcbiAgICAgICAgeCA9IGZpZWxkLmRpdih4TnVtLCB4RGVuKTsgLy8geE51bSAvIHhEZW5cbiAgICAgICAgeSA9IGZpZWxkLm11bCh5LCBmaWVsZC5kaXYoeU51bSwgeURlbikpOyAvLyB5ICogKHlOdW0gLyB5RGV2KVxuICAgICAgICByZXR1cm4geyB4LCB5IH07XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIYXNoZXIoUG9pbnQsIG1hcFRvQ3VydmUsIGRlZikge1xuICAgIGlmICh0eXBlb2YgbWFwVG9DdXJ2ZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXBUb0N1cnZlKCkgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLy8gRW5jb2RlcyBieXRlIHN0cmluZyB0byBlbGxpcHRpYyBjdXJ2ZS5cbiAgICAgICAgLy8gaGFzaF90b19jdXJ2ZSBmcm9tIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MzgwI3NlY3Rpb24tM1xuICAgICAgICBoYXNoVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHUgPSBoYXNoX3RvX2ZpZWxkKG1zZywgMiwgeyAuLi5kZWYsIERTVDogZGVmLkRTVCwgLi4ub3B0aW9ucyB9KTtcbiAgICAgICAgICAgIGNvbnN0IHUwID0gUG9pbnQuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMF0pKTtcbiAgICAgICAgICAgIGNvbnN0IHUxID0gUG9pbnQuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMV0pKTtcbiAgICAgICAgICAgIGNvbnN0IFAgPSB1MC5hZGQodTEpLmNsZWFyQ29mYWN0b3IoKTtcbiAgICAgICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiBQO1xuICAgICAgICB9LFxuICAgICAgICAvLyBFbmNvZGVzIGJ5dGUgc3RyaW5nIHRvIGVsbGlwdGljIGN1cnZlLlxuICAgICAgICAvLyBlbmNvZGVfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTNcbiAgICAgICAgZW5jb2RlVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHUgPSBoYXNoX3RvX2ZpZWxkKG1zZywgMSwgeyAuLi5kZWYsIERTVDogZGVmLmVuY29kZURTVCwgLi4ub3B0aW9ucyB9KTtcbiAgICAgICAgICAgIGNvbnN0IFAgPSBQb2ludC5mcm9tQWZmaW5lKG1hcFRvQ3VydmUodVswXSkpLmNsZWFyQ29mYWN0b3IoKTtcbiAgICAgICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiBQO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXNoLXRvLWN1cnZlLmpzLm1hcCIsIi8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9cbi8vIFV0aWxpdGllcyBmb3IgbW9kdWxhciBhcml0aG1ldGljcyBhbmQgZmluaXRlIGZpZWxkc1xuaW1wb3J0IHsgYml0TWFzaywgbnVtYmVyVG9CeXRlc0JFLCBudW1iZXJUb0J5dGVzTEUsIGJ5dGVzVG9OdW1iZXJCRSwgYnl0ZXNUb051bWJlckxFLCBlbnN1cmVCeXRlcywgdmFsaWRhdGVPYmplY3QsIH0gZnJvbSAnLi91dGlscy5qcyc7XG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IF8wbiA9IEJpZ0ludCgwKSwgXzFuID0gQmlnSW50KDEpLCBfMm4gPSBCaWdJbnQoMiksIF8zbiA9IEJpZ0ludCgzKTtcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgXzRuID0gQmlnSW50KDQpLCBfNW4gPSBCaWdJbnQoNSksIF84biA9IEJpZ0ludCg4KTtcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgXzluID0gQmlnSW50KDkpLCBfMTZuID0gQmlnSW50KDE2KTtcbi8vIENhbGN1bGF0ZXMgYSBtb2R1bG8gYlxuZXhwb3J0IGZ1bmN0aW9uIG1vZChhLCBiKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYSAlIGI7XG4gICAgcmV0dXJuIHJlc3VsdCA+PSBfMG4gPyByZXN1bHQgOiBiICsgcmVzdWx0O1xufVxuLyoqXG4gKiBFZmZpY2llbnRseSByYWlzZSBudW0gdG8gcG93ZXIgYW5kIGRvIG1vZHVsYXIgZGl2aXNpb24uXG4gKiBVbnNhZmUgaW4gc29tZSBjb250ZXh0czogdXNlcyBsYWRkZXIsIHNvIGNhbiBleHBvc2UgYmlnaW50IGJpdHMuXG4gKiBAZXhhbXBsZVxuICogcG93KDJuLCA2biwgMTFuKSAvLyA2NG4gJSAxMW4gPT0gOW5cbiAqL1xuLy8gVE9ETzogdXNlIGZpZWxkIHZlcnNpb24gJiYgcmVtb3ZlXG5leHBvcnQgZnVuY3Rpb24gcG93KG51bSwgcG93ZXIsIG1vZHVsbykge1xuICAgIGlmIChtb2R1bG8gPD0gXzBuIHx8IHBvd2VyIDwgXzBuKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBvd2VyL21vZHVsbyA+IDAnKTtcbiAgICBpZiAobW9kdWxvID09PSBfMW4pXG4gICAgICAgIHJldHVybiBfMG47XG4gICAgbGV0IHJlcyA9IF8xbjtcbiAgICB3aGlsZSAocG93ZXIgPiBfMG4pIHtcbiAgICAgICAgaWYgKHBvd2VyICYgXzFuKVxuICAgICAgICAgICAgcmVzID0gKHJlcyAqIG51bSkgJSBtb2R1bG87XG4gICAgICAgIG51bSA9IChudW0gKiBudW0pICUgbW9kdWxvO1xuICAgICAgICBwb3dlciA+Pj0gXzFuO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLy8gRG9lcyB4IF4gKDIgXiBwb3dlcikgbW9kIHAuIHBvdzIoMzAsIDQpID09IDMwIF4gKDIgXiA0KVxuZXhwb3J0IGZ1bmN0aW9uIHBvdzIoeCwgcG93ZXIsIG1vZHVsbykge1xuICAgIGxldCByZXMgPSB4O1xuICAgIHdoaWxlIChwb3dlci0tID4gXzBuKSB7XG4gICAgICAgIHJlcyAqPSByZXM7XG4gICAgICAgIHJlcyAlPSBtb2R1bG87XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vLyBJbnZlcnNlcyBudW1iZXIgb3ZlciBtb2R1bG9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQobnVtYmVyLCBtb2R1bG8pIHtcbiAgICBpZiAobnVtYmVyID09PSBfMG4gfHwgbW9kdWxvIDw9IF8wbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcnMsIGdvdCBuPSR7bnVtYmVyfSBtb2Q9JHttb2R1bG99YCk7XG4gICAgfVxuICAgIC8vIEV1Y2xpZGVhbiBHQ0QgaHR0cHM6Ly9icmlsbGlhbnQub3JnL3dpa2kvZXh0ZW5kZWQtZXVjbGlkZWFuLWFsZ29yaXRobS9cbiAgICAvLyBGZXJtYXQncyBsaXR0bGUgdGhlb3JlbSBcIkNULWxpa2VcIiB2ZXJzaW9uIGludihuKSA9IG5eKG0tMikgbW9kIG0gaXMgMzB4IHNsb3dlci5cbiAgICBsZXQgYSA9IG1vZChudW1iZXIsIG1vZHVsbyk7XG4gICAgbGV0IGIgPSBtb2R1bG87XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IHggPSBfMG4sIHkgPSBfMW4sIHUgPSBfMW4sIHYgPSBfMG47XG4gICAgd2hpbGUgKGEgIT09IF8wbikge1xuICAgICAgICAvLyBKSVQgYXBwbGllcyBvcHRpbWl6YXRpb24gaWYgdGhvc2UgdHdvIGxpbmVzIGZvbGxvdyBlYWNoIG90aGVyXG4gICAgICAgIGNvbnN0IHEgPSBiIC8gYTtcbiAgICAgICAgY29uc3QgciA9IGIgJSBhO1xuICAgICAgICBjb25zdCBtID0geCAtIHUgKiBxO1xuICAgICAgICBjb25zdCBuID0geSAtIHYgKiBxO1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgYiA9IGEsIGEgPSByLCB4ID0gdSwgeSA9IHYsIHUgPSBtLCB2ID0gbjtcbiAgICB9XG4gICAgY29uc3QgZ2NkID0gYjtcbiAgICBpZiAoZ2NkICE9PSBfMW4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52ZXJ0OiBkb2VzIG5vdCBleGlzdCcpO1xuICAgIHJldHVybiBtb2QoeCwgbW9kdWxvKTtcbn1cbi8qKlxuICogVG9uZWxsaS1TaGFua3Mgc3F1YXJlIHJvb3Qgc2VhcmNoIGFsZ29yaXRobS5cbiAqIDEuIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTIvNjg1LnBkZiAocGFnZSAxMilcbiAqIDIuIFNxdWFyZSBSb290cyBmcm9tIDE7IDI0LCA1MSwgMTAgdG8gRGFuIFNoYW5rc1xuICogV2lsbCBzdGFydCBhbiBpbmZpbml0ZSBsb29wIGlmIGZpZWxkIG9yZGVyIFAgaXMgbm90IHByaW1lLlxuICogQHBhcmFtIFAgZmllbGQgb3JkZXJcbiAqIEByZXR1cm5zIGZ1bmN0aW9uIHRoYXQgdGFrZXMgZmllbGQgRnAgKGNyZWF0ZWQgZnJvbSBQKSBhbmQgbnVtYmVyIG5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvbmVsbGlTaGFua3MoUCkge1xuICAgIC8vIExlZ2VuZHJlIGNvbnN0YW50OiB1c2VkIHRvIGNhbGN1bGF0ZSBMZWdlbmRyZSBzeW1ib2wgKGEgfCBwKSxcbiAgICAvLyB3aGljaCBkZW5vdGVzIHRoZSB2YWx1ZSBvZiBhXigocC0xKS8yKSAobW9kIHApLlxuICAgIC8vIChhIHwgcCkg4omhIDEgICAgaWYgYSBpcyBhIHNxdWFyZSAobW9kIHApXG4gICAgLy8gKGEgfCBwKSDiiaEgLTEgICBpZiBhIGlzIG5vdCBhIHNxdWFyZSAobW9kIHApXG4gICAgLy8gKGEgfCBwKSDiiaEgMCAgICBpZiBhIOKJoSAwIChtb2QgcClcbiAgICBjb25zdCBsZWdlbmRyZUMgPSAoUCAtIF8xbikgLyBfMm47XG4gICAgbGV0IFEsIFMsIFo7XG4gICAgLy8gU3RlcCAxOiBCeSBmYWN0b3Jpbmcgb3V0IHBvd2VycyBvZiAyIGZyb20gcCAtIDEsXG4gICAgLy8gZmluZCBxIGFuZCBzIHN1Y2ggdGhhdCBwIC0gMSA9IHEqKDJecykgd2l0aCBxIG9kZFxuICAgIGZvciAoUSA9IFAgLSBfMW4sIFMgPSAwOyBRICUgXzJuID09PSBfMG47IFEgLz0gXzJuLCBTKyspXG4gICAgICAgIDtcbiAgICAvLyBTdGVwIDI6IFNlbGVjdCBhIG5vbi1zcXVhcmUgeiBzdWNoIHRoYXQgKHogfCBwKSDiiaEgLTEgYW5kIHNldCBjIOKJoSB6cVxuICAgIGZvciAoWiA9IF8ybjsgWiA8IFAgJiYgcG93KFosIGxlZ2VuZHJlQywgUCkgIT09IFAgLSBfMW47IForKylcbiAgICAgICAgO1xuICAgIC8vIEZhc3QtcGF0aFxuICAgIGlmIChTID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuKSAvIF80bjtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlGYXN0KEZwLCBuKSB7XG4gICAgICAgICAgICBjb25zdCByb290ID0gRnAucG93KG4sIHAxZGl2NCk7XG4gICAgICAgICAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdCksIG4pKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QnKTtcbiAgICAgICAgICAgIHJldHVybiByb290O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBTbG93LXBhdGhcbiAgICBjb25zdCBRMWRpdjIgPSAoUSArIF8xbikgLyBfMm47XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlTbG93KEZwLCBuKSB7XG4gICAgICAgIC8vIFN0ZXAgMDogQ2hlY2sgdGhhdCBuIGlzIGluZGVlZCBhIHNxdWFyZTogKG4gfCBwKSBzaG91bGQgbm90IGJlIOKJoSAtMVxuICAgICAgICBpZiAoRnAucG93KG4sIGxlZ2VuZHJlQykgPT09IEZwLm5lZyhGcC5PTkUpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCcpO1xuICAgICAgICBsZXQgciA9IFM7XG4gICAgICAgIC8vIFRPRE86IHdpbGwgZmFpbCBhdCBGcDIvZXRjXG4gICAgICAgIGxldCBnID0gRnAucG93KEZwLm11bChGcC5PTkUsIFopLCBRKTsgLy8gd2lsbCB1cGRhdGUgYm90aCB4IGFuZCBiXG4gICAgICAgIGxldCB4ID0gRnAucG93KG4sIFExZGl2Mik7IC8vIGZpcnN0IGd1ZXNzIGF0IHRoZSBzcXVhcmUgcm9vdFxuICAgICAgICBsZXQgYiA9IEZwLnBvdyhuLCBRKTsgLy8gZmlyc3QgZ3Vlc3MgYXQgdGhlIGZ1ZGdlIGZhY3RvclxuICAgICAgICB3aGlsZSAoIUZwLmVxbChiLCBGcC5PTkUpKSB7XG4gICAgICAgICAgICBpZiAoRnAuZXFsKGIsIEZwLlpFUk8pKVxuICAgICAgICAgICAgICAgIHJldHVybiBGcC5aRVJPOyAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ub25lbGxpJUUyJTgwJTkzU2hhbmtzX2FsZ29yaXRobSAoNC4gSWYgdCA9IDAsIHJldHVybiByID0gMClcbiAgICAgICAgICAgIC8vIEZpbmQgbSBzdWNoIGJeKDJebSk9PTFcbiAgICAgICAgICAgIGxldCBtID0gMTtcbiAgICAgICAgICAgIGZvciAobGV0IHQyID0gRnAuc3FyKGIpOyBtIDwgcjsgbSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEZwLmVxbCh0MiwgRnAuT05FKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgdDIgPSBGcC5zcXIodDIpOyAvLyB0MiAqPSB0MlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTk9URTogci1tLTEgY2FuIGJlIGJpZ2dlciB0aGFuIDMyLCBuZWVkIHRvIGNvbnZlcnQgdG8gYmlnaW50IGJlZm9yZSBzaGlmdCwgb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgb3ZlcmZsb3dcbiAgICAgICAgICAgIGNvbnN0IGdlID0gRnAucG93KGcsIF8xbiA8PCBCaWdJbnQociAtIG0gLSAxKSk7IC8vIGdlID0gMl4oci1tLTEpXG4gICAgICAgICAgICBnID0gRnAuc3FyKGdlKTsgLy8gZyA9IGdlICogZ2VcbiAgICAgICAgICAgIHggPSBGcC5tdWwoeCwgZ2UpOyAvLyB4ICo9IGdlXG4gICAgICAgICAgICBiID0gRnAubXVsKGIsIGcpOyAvLyBiICo9IGdcbiAgICAgICAgICAgIHIgPSBtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gRnBTcXJ0KFApIHtcbiAgICAvLyBOT1RFOiBkaWZmZXJlbnQgYWxnb3JpdGhtcyBjYW4gZ2l2ZSBkaWZmZXJlbnQgcm9vdHMsIGl0IGlzIHVwIHRvIHVzZXIgdG8gZGVjaWRlIHdoaWNoIG9uZSB0aGV5IHdhbnQuXG4gICAgLy8gRm9yIGV4YW1wbGUgdGhlcmUgaXMgRnBTcXJ0T2RkL0ZwU3FydEV2ZW4gdG8gY2hvaWNlIHJvb3QgYmFzZWQgb24gb2RkbmVzcyAodXNlZCBmb3IgaGFzaC10by1jdXJ2ZSkuXG4gICAgLy8gUCDiiaEgMyAobW9kIDQpXG4gICAgLy8g4oiabiA9IG5eKChQKzEpLzQpXG4gICAgaWYgKFAgJSBfNG4gPT09IF8zbikge1xuICAgICAgICAvLyBOb3QgYWxsIHJvb3RzIHBvc3NpYmxlIVxuICAgICAgICAvLyBjb25zdCBPUkRFUiA9XG4gICAgICAgIC8vICAgMHgxYTAxMTFlYTM5N2ZlNjlhNGIxYmE3YjY0MzRiYWNkNzY0Nzc0Yjg0ZjM4NTEyYmY2NzMwZDJhMGY2YjBmNjI0MWVhYmZmZmViMTUzZmZmZmI5ZmVmZmZmZmZmZmFhYWJuO1xuICAgICAgICAvLyBjb25zdCBOVU0gPSA3MjA1NzU5NDAzNzkyNzgxNm47XG4gICAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuKSAvIF80bjtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNxcnQzbW9kNChGcCwgbikge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IEZwLnBvdyhuLCBwMWRpdjQpO1xuICAgICAgICAgICAgLy8gVGhyb3cgaWYgcm9vdCoqMiAhPSBuXG4gICAgICAgICAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdCksIG4pKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QnKTtcbiAgICAgICAgICAgIHJldHVybiByb290O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBBdGtpbiBhbGdvcml0aG0gZm9yIHEg4omhIDUgKG1vZCA4KSwgaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxMi82ODUucGRmIChwYWdlIDEwKVxuICAgIGlmIChQICUgXzhuID09PSBfNW4pIHtcbiAgICAgICAgY29uc3QgYzEgPSAoUCAtIF81bikgLyBfOG47XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBzcXJ0NW1vZDgoRnAsIG4pIHtcbiAgICAgICAgICAgIGNvbnN0IG4yID0gRnAubXVsKG4sIF8ybik7XG4gICAgICAgICAgICBjb25zdCB2ID0gRnAucG93KG4yLCBjMSk7XG4gICAgICAgICAgICBjb25zdCBudiA9IEZwLm11bChuLCB2KTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBGcC5tdWwoRnAubXVsKG52LCBfMm4pLCB2KTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBGcC5tdWwobnYsIEZwLnN1YihpLCBGcC5PTkUpKTtcbiAgICAgICAgICAgIGlmICghRnAuZXFsKEZwLnNxcihyb290KSwgbikpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCcpO1xuICAgICAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFAg4omhIDkgKG1vZCAxNilcbiAgICBpZiAoUCAlIF8xNm4gPT09IF85bikge1xuICAgICAgICAvLyBOT1RFOiB0b25lbGxpIGlzIHRvbyBzbG93IGZvciBibHMtRnAyIGNhbGN1bGF0aW9ucyBldmVuIG9uIHN0YXJ0XG4gICAgICAgIC8vIE1lYW5zIHdlIGNhbm5vdCB1c2Ugc3FydCBmb3IgY29uc3RhbnRzIGF0IGFsbCFcbiAgICAgICAgLy9cbiAgICAgICAgLy8gY29uc3QgYzEgPSBGcC5zcXJ0KEZwLm5lZ2F0ZShGcC5PTkUpKTsgLy8gIDEuIGMxID0gc3FydCgtMSkgaW4gRiwgaS5lLiwgKGMxXjIpID09IC0xIGluIEZcbiAgICAgICAgLy8gY29uc3QgYzIgPSBGcC5zcXJ0KGMxKTsgICAgICAgICAgICAgICAgLy8gIDIuIGMyID0gc3FydChjMSkgaW4gRiwgaS5lLiwgKGMyXjIpID09IGMxIGluIEZcbiAgICAgICAgLy8gY29uc3QgYzMgPSBGcC5zcXJ0KEZwLm5lZ2F0ZShjMSkpOyAgICAgLy8gIDMuIGMzID0gc3FydCgtYzEpIGluIEYsIGkuZS4sIChjM14yKSA9PSAtYzEgaW4gRlxuICAgICAgICAvLyBjb25zdCBjNCA9IChQICsgXzduKSAvIF8xNm47ICAgICAgICAgICAvLyAgNC4gYzQgPSAocSArIDcpIC8gMTYgICAgICAgICMgSW50ZWdlciBhcml0aG1ldGljXG4gICAgICAgIC8vIHNxcnQgPSAoeCkgPT4ge1xuICAgICAgICAvLyAgIGxldCB0djEgPSBGcC5wb3coeCwgYzQpOyAgICAgICAgICAgICAvLyAgMS4gdHYxID0geF5jNFxuICAgICAgICAvLyAgIGxldCB0djIgPSBGcC5tdWwoYzEsIHR2MSk7ICAgICAgICAgICAvLyAgMi4gdHYyID0gYzEgKiB0djFcbiAgICAgICAgLy8gICBjb25zdCB0djMgPSBGcC5tdWwoYzIsIHR2MSk7ICAgICAgICAgLy8gIDMuIHR2MyA9IGMyICogdHYxXG4gICAgICAgIC8vICAgbGV0IHR2NCA9IEZwLm11bChjMywgdHYxKTsgICAgICAgICAgIC8vICA0LiB0djQgPSBjMyAqIHR2MVxuICAgICAgICAvLyAgIGNvbnN0IGUxID0gRnAuZXF1YWxzKEZwLnNxdWFyZSh0djIpLCB4KTsgLy8gIDUuICBlMSA9ICh0djJeMikgPT0geFxuICAgICAgICAvLyAgIGNvbnN0IGUyID0gRnAuZXF1YWxzKEZwLnNxdWFyZSh0djMpLCB4KTsgLy8gIDYuICBlMiA9ICh0djNeMikgPT0geFxuICAgICAgICAvLyAgIHR2MSA9IEZwLmNtb3YodHYxLCB0djIsIGUxKTsgLy8gIDcuIHR2MSA9IENNT1YodHYxLCB0djIsIGUxKSAgIyBTZWxlY3QgdHYyIGlmICh0djJeMikgPT0geFxuICAgICAgICAvLyAgIHR2MiA9IEZwLmNtb3YodHY0LCB0djMsIGUyKTsgLy8gIDguIHR2MiA9IENNT1YodHY0LCB0djMsIGUyKSAgIyBTZWxlY3QgdHYzIGlmICh0djNeMikgPT0geFxuICAgICAgICAvLyAgIGNvbnN0IGUzID0gRnAuZXF1YWxzKEZwLnNxdWFyZSh0djIpLCB4KTsgLy8gIDkuICBlMyA9ICh0djJeMikgPT0geFxuICAgICAgICAvLyAgIHJldHVybiBGcC5jbW92KHR2MSwgdHYyLCBlMyk7IC8vICAxMC4gIHogPSBDTU9WKHR2MSwgdHYyLCBlMykgICMgU2VsZWN0IHRoZSBzcXJ0IGZyb20gdHYxIGFuZCB0djJcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICAvLyBPdGhlciBjYXNlczogVG9uZWxsaS1TaGFua3MgYWxnb3JpdGhtXG4gICAgcmV0dXJuIHRvbmVsbGlTaGFua3MoUCk7XG59XG4vLyBMaXR0bGUtZW5kaWFuIGNoZWNrIGZvciBmaXJzdCBMRSBiaXQgKGxhc3QgQkUgYml0KTtcbmV4cG9ydCBjb25zdCBpc05lZ2F0aXZlTEUgPSAobnVtLCBtb2R1bG8pID0+IChtb2QobnVtLCBtb2R1bG8pICYgXzFuKSA9PT0gXzFuO1xuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBGSUVMRF9GSUVMRFMgPSBbXG4gICAgJ2NyZWF0ZScsICdpc1ZhbGlkJywgJ2lzMCcsICduZWcnLCAnaW52JywgJ3NxcnQnLCAnc3FyJyxcbiAgICAnZXFsJywgJ2FkZCcsICdzdWInLCAnbXVsJywgJ3BvdycsICdkaXYnLFxuICAgICdhZGROJywgJ3N1Yk4nLCAnbXVsTicsICdzcXJOJ1xuXTtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpZWxkKGZpZWxkKSB7XG4gICAgY29uc3QgaW5pdGlhbCA9IHtcbiAgICAgICAgT1JERVI6ICdiaWdpbnQnLFxuICAgICAgICBNQVNLOiAnYmlnaW50JyxcbiAgICAgICAgQllURVM6ICdpc1NhZmVJbnRlZ2VyJyxcbiAgICAgICAgQklUUzogJ2lzU2FmZUludGVnZXInLFxuICAgIH07XG4gICAgY29uc3Qgb3B0cyA9IEZJRUxEX0ZJRUxEUy5yZWR1Y2UoKG1hcCwgdmFsKSA9PiB7XG4gICAgICAgIG1hcFt2YWxdID0gJ2Z1bmN0aW9uJztcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCBpbml0aWFsKTtcbiAgICByZXR1cm4gdmFsaWRhdGVPYmplY3QoZmllbGQsIG9wdHMpO1xufVxuLy8gR2VuZXJpYyBmaWVsZCBmdW5jdGlvbnNcbi8qKlxuICogU2FtZSBhcyBgcG93YCBidXQgZm9yIEZwOiBub24tY29uc3RhbnQtdGltZS5cbiAqIFVuc2FmZSBpbiBzb21lIGNvbnRleHRzOiB1c2VzIGxhZGRlciwgc28gY2FuIGV4cG9zZSBiaWdpbnQgYml0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEZwUG93KGYsIG51bSwgcG93ZXIpIHtcbiAgICAvLyBTaG91bGQgaGF2ZSBzYW1lIHNwZWVkIGFzIHBvdyBmb3IgYmlnaW50c1xuICAgIC8vIFRPRE86IGJlbmNobWFyayFcbiAgICBpZiAocG93ZXIgPCBfMG4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcG93ZXIgPiAwJyk7XG4gICAgaWYgKHBvd2VyID09PSBfMG4pXG4gICAgICAgIHJldHVybiBmLk9ORTtcbiAgICBpZiAocG93ZXIgPT09IF8xbilcbiAgICAgICAgcmV0dXJuIG51bTtcbiAgICBsZXQgcCA9IGYuT05FO1xuICAgIGxldCBkID0gbnVtO1xuICAgIHdoaWxlIChwb3dlciA+IF8wbikge1xuICAgICAgICBpZiAocG93ZXIgJiBfMW4pXG4gICAgICAgICAgICBwID0gZi5tdWwocCwgZCk7XG4gICAgICAgIGQgPSBmLnNxcihkKTtcbiAgICAgICAgcG93ZXIgPj49IF8xbjtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG4vKipcbiAqIEVmZmljaWVudGx5IGludmVydCBhbiBhcnJheSBvZiBGaWVsZCBlbGVtZW50cy5cbiAqIGBpbnYoMClgIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgIGhlcmU6IG1ha2Ugc3VyZSB0byB0aHJvdyBhbiBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEZwSW52ZXJ0QmF0Y2goZiwgbnVtcykge1xuICAgIGNvbnN0IHRtcCA9IG5ldyBBcnJheShudW1zLmxlbmd0aCk7XG4gICAgLy8gV2FsayBmcm9tIGZpcnN0IHRvIGxhc3QsIG11bHRpcGx5IHRoZW0gYnkgZWFjaCBvdGhlciBNT0QgcFxuICAgIGNvbnN0IGxhc3RNdWx0aXBsaWVkID0gbnVtcy5yZWR1Y2UoKGFjYywgbnVtLCBpKSA9PiB7XG4gICAgICAgIGlmIChmLmlzMChudW0pKVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgdG1wW2ldID0gYWNjO1xuICAgICAgICByZXR1cm4gZi5tdWwoYWNjLCBudW0pO1xuICAgIH0sIGYuT05FKTtcbiAgICAvLyBJbnZlcnQgbGFzdCBlbGVtZW50XG4gICAgY29uc3QgaW52ZXJ0ZWQgPSBmLmludihsYXN0TXVsdGlwbGllZCk7XG4gICAgLy8gV2FsayBmcm9tIGxhc3QgdG8gZmlyc3QsIG11bHRpcGx5IHRoZW0gYnkgaW52ZXJ0ZWQgZWFjaCBvdGhlciBNT0QgcFxuICAgIG51bXMucmVkdWNlUmlnaHQoKGFjYywgbnVtLCBpKSA9PiB7XG4gICAgICAgIGlmIChmLmlzMChudW0pKVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgdG1wW2ldID0gZi5tdWwoYWNjLCB0bXBbaV0pO1xuICAgICAgICByZXR1cm4gZi5tdWwoYWNjLCBudW0pO1xuICAgIH0sIGludmVydGVkKTtcbiAgICByZXR1cm4gdG1wO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZwRGl2KGYsIGxocywgcmhzKSB7XG4gICAgcmV0dXJuIGYubXVsKGxocywgdHlwZW9mIHJocyA9PT0gJ2JpZ2ludCcgPyBpbnZlcnQocmhzLCBmLk9SREVSKSA6IGYuaW52KHJocykpO1xufVxuLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIFRydWUgd2hlbmV2ZXIgdGhlIHZhbHVlIHggaXMgYSBzcXVhcmUgaW4gdGhlIGZpZWxkIEYuXG5leHBvcnQgZnVuY3Rpb24gRnBJc1NxdWFyZShmKSB7XG4gICAgY29uc3QgbGVnZW5kcmVDb25zdCA9IChmLk9SREVSIC0gXzFuKSAvIF8ybjsgLy8gSW50ZWdlciBhcml0aG1ldGljXG4gICAgcmV0dXJuICh4KSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBmLnBvdyh4LCBsZWdlbmRyZUNvbnN0KTtcbiAgICAgICAgcmV0dXJuIGYuZXFsKHAsIGYuWkVSTykgfHwgZi5lcWwocCwgZi5PTkUpO1xuICAgIH07XG59XG4vLyBDVVJWRS5uIGxlbmd0aHNcbmV4cG9ydCBmdW5jdGlvbiBuTGVuZ3RoKG4sIG5CaXRMZW5ndGgpIHtcbiAgICAvLyBCaXQgc2l6ZSwgYnl0ZSBzaXplIG9mIENVUlZFLm5cbiAgICBjb25zdCBfbkJpdExlbmd0aCA9IG5CaXRMZW5ndGggIT09IHVuZGVmaW5lZCA/IG5CaXRMZW5ndGggOiBuLnRvU3RyaW5nKDIpLmxlbmd0aDtcbiAgICBjb25zdCBuQnl0ZUxlbmd0aCA9IE1hdGguY2VpbChfbkJpdExlbmd0aCAvIDgpO1xuICAgIHJldHVybiB7IG5CaXRMZW5ndGg6IF9uQml0TGVuZ3RoLCBuQnl0ZUxlbmd0aCB9O1xufVxuLyoqXG4gKiBJbml0aWFsaXplcyBhIGZpbml0ZSBmaWVsZCBvdmVyIHByaW1lLiAqKk5vbi1wcmltZXMgYXJlIG5vdCBzdXBwb3J0ZWQuKipcbiAqIERvIG5vdCBpbml0IGluIGxvb3A6IHNsb3cuIFZlcnkgZnJhZ2lsZTogYWx3YXlzIHJ1biBhIGJlbmNobWFyayBvbiBhIGNoYW5nZS5cbiAqIE1ham9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnM6XG4gKiAqIGEpIGRlbm9ybWFsaXplZCBvcGVyYXRpb25zIGxpa2UgbXVsTiBpbnN0ZWFkIG9mIG11bFxuICogKiBiKSBzYW1lIG9iamVjdCBzaGFwZTogbmV2ZXIgYWRkIG9yIHJlbW92ZSBrZXlzXG4gKiAqIGMpIE9iamVjdC5mcmVlemVcbiAqIEBwYXJhbSBPUkRFUiBwcmltZSBwb3NpdGl2ZSBiaWdpbnRcbiAqIEBwYXJhbSBiaXRMZW4gaG93IG1hbnkgYml0cyB0aGUgZmllbGQgY29uc3VtZXNcbiAqIEBwYXJhbSBpc0xFIChkZWY6IGZhbHNlKSBpZiBlbmNvZGluZyAvIGRlY29kaW5nIHNob3VsZCBiZSBpbiBsaXR0bGUtZW5kaWFuXG4gKiBAcGFyYW0gcmVkZWYgb3B0aW9uYWwgZmFzdGVyIHJlZGVmaW5pdGlvbnMgb2Ygc3FydCBhbmQgb3RoZXIgbWV0aG9kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gRmllbGQoT1JERVIsIGJpdExlbiwgaXNMRSA9IGZhbHNlLCByZWRlZiA9IHt9KSB7XG4gICAgaWYgKE9SREVSIDw9IF8wbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBGaWVsZCBPUkRFUiA+IDAsIGdvdCAke09SREVSfWApO1xuICAgIGNvbnN0IHsgbkJpdExlbmd0aDogQklUUywgbkJ5dGVMZW5ndGg6IEJZVEVTIH0gPSBuTGVuZ3RoKE9SREVSLCBiaXRMZW4pO1xuICAgIGlmIChCWVRFUyA+IDIwNDgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGQgbGVuZ3RocyBvdmVyIDIwNDggYnl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICBjb25zdCBzcXJ0UCA9IEZwU3FydChPUkRFUik7XG4gICAgY29uc3QgZiA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBPUkRFUixcbiAgICAgICAgQklUUyxcbiAgICAgICAgQllURVMsXG4gICAgICAgIE1BU0s6IGJpdE1hc2soQklUUyksXG4gICAgICAgIFpFUk86IF8wbixcbiAgICAgICAgT05FOiBfMW4sXG4gICAgICAgIGNyZWF0ZTogKG51bSkgPT4gbW9kKG51bSwgT1JERVIpLFxuICAgICAgICBpc1ZhbGlkOiAobnVtKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ2JpZ2ludCcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZpZWxkIGVsZW1lbnQ6IGV4cGVjdGVkIGJpZ2ludCwgZ290ICR7dHlwZW9mIG51bX1gKTtcbiAgICAgICAgICAgIHJldHVybiBfMG4gPD0gbnVtICYmIG51bSA8IE9SREVSOyAvLyAwIGlzIHZhbGlkIGVsZW1lbnQsIGJ1dCBpdCdzIG5vdCBpbnZlcnRpYmxlXG4gICAgICAgIH0sXG4gICAgICAgIGlzMDogKG51bSkgPT4gbnVtID09PSBfMG4sXG4gICAgICAgIGlzT2RkOiAobnVtKSA9PiAobnVtICYgXzFuKSA9PT0gXzFuLFxuICAgICAgICBuZWc6IChudW0pID0+IG1vZCgtbnVtLCBPUkRFUiksXG4gICAgICAgIGVxbDogKGxocywgcmhzKSA9PiBsaHMgPT09IHJocyxcbiAgICAgICAgc3FyOiAobnVtKSA9PiBtb2QobnVtICogbnVtLCBPUkRFUiksXG4gICAgICAgIGFkZDogKGxocywgcmhzKSA9PiBtb2QobGhzICsgcmhzLCBPUkRFUiksXG4gICAgICAgIHN1YjogKGxocywgcmhzKSA9PiBtb2QobGhzIC0gcmhzLCBPUkRFUiksXG4gICAgICAgIG11bDogKGxocywgcmhzKSA9PiBtb2QobGhzICogcmhzLCBPUkRFUiksXG4gICAgICAgIHBvdzogKG51bSwgcG93ZXIpID0+IEZwUG93KGYsIG51bSwgcG93ZXIpLFxuICAgICAgICBkaXY6IChsaHMsIHJocykgPT4gbW9kKGxocyAqIGludmVydChyaHMsIE9SREVSKSwgT1JERVIpLFxuICAgICAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgZG9lc24ndCBub3JtYWxpemVcbiAgICAgICAgc3FyTjogKG51bSkgPT4gbnVtICogbnVtLFxuICAgICAgICBhZGROOiAobGhzLCByaHMpID0+IGxocyArIHJocyxcbiAgICAgICAgc3ViTjogKGxocywgcmhzKSA9PiBsaHMgLSByaHMsXG4gICAgICAgIG11bE46IChsaHMsIHJocykgPT4gbGhzICogcmhzLFxuICAgICAgICBpbnY6IChudW0pID0+IGludmVydChudW0sIE9SREVSKSxcbiAgICAgICAgc3FydDogcmVkZWYuc3FydCB8fCAoKG4pID0+IHNxcnRQKGYsIG4pKSxcbiAgICAgICAgaW52ZXJ0QmF0Y2g6IChsc3QpID0+IEZwSW52ZXJ0QmF0Y2goZiwgbHN0KSxcbiAgICAgICAgLy8gVE9ETzogZG8gd2UgcmVhbGx5IG5lZWQgY29uc3RhbnQgY21vdj9cbiAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBjb25zdC10aW1lIGJpZ2ludHMgYW55d2F5LCBzbyBwcm9iYWJseSB3aWxsIGJlIG5vdCB2ZXJ5IHVzZWZ1bFxuICAgICAgICBjbW92OiAoYSwgYiwgYykgPT4gKGMgPyBiIDogYSksXG4gICAgICAgIHRvQnl0ZXM6IChudW0pID0+IChpc0xFID8gbnVtYmVyVG9CeXRlc0xFKG51bSwgQllURVMpIDogbnVtYmVyVG9CeXRlc0JFKG51bSwgQllURVMpKSxcbiAgICAgICAgZnJvbUJ5dGVzOiAoYnl0ZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChieXRlcy5sZW5ndGggIT09IEJZVEVTKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnAuZnJvbUJ5dGVzOiBleHBlY3RlZCAke0JZVEVTfSwgZ290ICR7Ynl0ZXMubGVuZ3RofWApO1xuICAgICAgICAgICAgcmV0dXJuIGlzTEUgPyBieXRlc1RvTnVtYmVyTEUoYnl0ZXMpIDogYnl0ZXNUb051bWJlckJFKGJ5dGVzKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBGcFNxcnRPZGQoRnAsIGVsbSkge1xuICAgIGlmICghRnAuaXNPZGQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmllbGQgZG9lc24ndCBoYXZlIGlzT2RkYCk7XG4gICAgY29uc3Qgcm9vdCA9IEZwLnNxcnQoZWxtKTtcbiAgICByZXR1cm4gRnAuaXNPZGQocm9vdCkgPyByb290IDogRnAubmVnKHJvb3QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZwU3FydEV2ZW4oRnAsIGVsbSkge1xuICAgIGlmICghRnAuaXNPZGQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmllbGQgZG9lc24ndCBoYXZlIGlzT2RkYCk7XG4gICAgY29uc3Qgcm9vdCA9IEZwLnNxcnQoZWxtKTtcbiAgICByZXR1cm4gRnAuaXNPZGQocm9vdCkgPyBGcC5uZWcocm9vdCkgOiByb290O1xufVxuLyoqXG4gKiBcIkNvbnN0YW50LXRpbWVcIiBwcml2YXRlIGtleSBnZW5lcmF0aW9uIHV0aWxpdHkuXG4gKiBTYW1lIGFzIG1hcEtleVRvRmllbGQsIGJ1dCBhY2NlcHRzIGxlc3MgYnl0ZXMgKDQwIGluc3RlYWQgb2YgNDggZm9yIDMyLWJ5dGUgZmllbGQpLlxuICogV2hpY2ggbWFrZXMgaXQgc2xpZ2h0bHkgbW9yZSBiaWFzZWQsIGxlc3Mgc2VjdXJlLlxuICogQGRlcHJlY2F0ZWQgdXNlIG1hcEtleVRvRmllbGQgaW5zdGVhZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaFRvUHJpdmF0ZVNjYWxhcihoYXNoLCBncm91cE9yZGVyLCBpc0xFID0gZmFsc2UpIHtcbiAgICBoYXNoID0gZW5zdXJlQnl0ZXMoJ3ByaXZhdGVIYXNoJywgaGFzaCk7XG4gICAgY29uc3QgaGFzaExlbiA9IGhhc2gubGVuZ3RoO1xuICAgIGNvbnN0IG1pbkxlbiA9IG5MZW5ndGgoZ3JvdXBPcmRlcikubkJ5dGVMZW5ndGggKyA4O1xuICAgIGlmIChtaW5MZW4gPCAyNCB8fCBoYXNoTGVuIDwgbWluTGVuIHx8IGhhc2hMZW4gPiAxMDI0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGhhc2hUb1ByaXZhdGVTY2FsYXI6IGV4cGVjdGVkICR7bWluTGVufS0xMDI0IGJ5dGVzIG9mIGlucHV0LCBnb3QgJHtoYXNoTGVufWApO1xuICAgIGNvbnN0IG51bSA9IGlzTEUgPyBieXRlc1RvTnVtYmVyTEUoaGFzaCkgOiBieXRlc1RvTnVtYmVyQkUoaGFzaCk7XG4gICAgcmV0dXJuIG1vZChudW0sIGdyb3VwT3JkZXIgLSBfMW4pICsgXzFuO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRvdGFsIG51bWJlciBvZiBieXRlcyBjb25zdW1lZCBieSB0aGUgZmllbGQgZWxlbWVudC5cbiAqIEZvciBleGFtcGxlLCAzMiBieXRlcyBmb3IgdXN1YWwgMjU2LWJpdCB3ZWllcnN0cmFzcyBjdXJ2ZS5cbiAqIEBwYXJhbSBmaWVsZE9yZGVyIG51bWJlciBvZiBmaWVsZCBlbGVtZW50cywgdXN1YWxseSBDVVJWRS5uXG4gKiBAcmV0dXJucyBieXRlIGxlbmd0aCBvZiBmaWVsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKSB7XG4gICAgaWYgKHR5cGVvZiBmaWVsZE9yZGVyICE9PSAnYmlnaW50JylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWVsZCBvcmRlciBtdXN0IGJlIGJpZ2ludCcpO1xuICAgIGNvbnN0IGJpdExlbmd0aCA9IGZpZWxkT3JkZXIudG9TdHJpbmcoMikubGVuZ3RoO1xuICAgIHJldHVybiBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gOCk7XG59XG4vKipcbiAqIFJldHVybnMgbWluaW1hbCBhbW91bnQgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlZHVjZWRcbiAqIGJ5IGZpZWxkIG9yZGVyLlxuICogU2hvdWxkIGJlIDJeLTEyOCBmb3IgMTI4LWJpdCBjdXJ2ZSBzdWNoIGFzIFAyNTYuXG4gKiBAcGFyYW0gZmllbGRPcmRlciBudW1iZXIgb2YgZmllbGQgZWxlbWVudHMsIHVzdWFsbHkgQ1VSVkUublxuICogQHJldHVybnMgYnl0ZSBsZW5ndGggb2YgdGFyZ2V0IGhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcikge1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldEZpZWxkQnl0ZXNMZW5ndGgoZmllbGRPcmRlcik7XG4gICAgcmV0dXJuIGxlbmd0aCArIE1hdGguY2VpbChsZW5ndGggLyAyKTtcbn1cbi8qKlxuICogXCJDb25zdGFudC10aW1lXCIgcHJpdmF0ZSBrZXkgZ2VuZXJhdGlvbiB1dGlsaXR5LlxuICogQ2FuIHRha2UgKG4gKyBuLzIpIG9yIG1vcmUgYnl0ZXMgb2YgdW5pZm9ybSBpbnB1dCBlLmcuIGZyb20gQ1NQUk5HIG9yIEtERlxuICogYW5kIGNvbnZlcnQgdGhlbSBpbnRvIHByaXZhdGUgc2NhbGFyLCB3aXRoIHRoZSBtb2R1bG8gYmlhcyBiZWluZyBuZWdsaWdpYmxlLlxuICogTmVlZHMgYXQgbGVhc3QgNDggYnl0ZXMgb2YgaW5wdXQgZm9yIDMyLWJ5dGUgcHJpdmF0ZSBrZXkuXG4gKiBodHRwczovL3Jlc2VhcmNoLmt1ZGVsc2tpc2VjdXJpdHkuY29tLzIwMjAvMDcvMjgvdGhlLWRlZmluaXRpdmUtZ3VpZGUtdG8tbW9kdWxvLWJpYXMtYW5kLWhvdy10by1hdm9pZC1pdC9cbiAqIEZJUFMgMTg2LTUsIEEuMiBodHRwczovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2RldGFpbC9maXBzLzE4Ni81L2ZpbmFsXG4gKiBSRkMgOTM4MCwgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkzODAjc2VjdGlvbi01XG4gKiBAcGFyYW0gaGFzaCBoYXNoIG91dHB1dCBmcm9tIFNIQTMgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gZ3JvdXBPcmRlciBzaXplIG9mIHN1Ymdyb3VwIC0gKGUuZy4gc2VjcDI1NmsxLkNVUlZFLm4pXG4gKiBAcGFyYW0gaXNMRSBpbnRlcnByZXQgaGFzaCBieXRlcyBhcyBMRSBudW1cbiAqIEByZXR1cm5zIHZhbGlkIHByaXZhdGUgc2NhbGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBIYXNoVG9GaWVsZChrZXksIGZpZWxkT3JkZXIsIGlzTEUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxlbiA9IGtleS5sZW5ndGg7XG4gICAgY29uc3QgZmllbGRMZW4gPSBnZXRGaWVsZEJ5dGVzTGVuZ3RoKGZpZWxkT3JkZXIpO1xuICAgIGNvbnN0IG1pbkxlbiA9IGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcik7XG4gICAgLy8gTm8gc21hbGwgbnVtYmVyczogbmVlZCB0byB1bmRlcnN0YW5kIGJpYXMgc3RvcnkuIE5vIGh1Z2UgbnVtYmVyczogZWFzaWVyIHRvIGRldGVjdCBKUyB0aW1pbmdzLlxuICAgIGlmIChsZW4gPCAxNiB8fCBsZW4gPCBtaW5MZW4gfHwgbGVuID4gMTAyNClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke21pbkxlbn0tMTAyNCBieXRlcyBvZiBpbnB1dCwgZ290ICR7bGVufWApO1xuICAgIGNvbnN0IG51bSA9IGlzTEUgPyBieXRlc1RvTnVtYmVyQkUoa2V5KSA6IGJ5dGVzVG9OdW1iZXJMRShrZXkpO1xuICAgIC8vIGBtb2QoeCwgMTEpYCBjYW4gc29tZXRpbWVzIHByb2R1Y2UgMC4gYG1vZCh4LCAxMCkgKyAxYCBpcyB0aGUgc2FtZSwgYnV0IG5vIDBcbiAgICBjb25zdCByZWR1Y2VkID0gbW9kKG51bSwgZmllbGRPcmRlciAtIF8xbikgKyBfMW47XG4gICAgcmV0dXJuIGlzTEUgPyBudW1iZXJUb0J5dGVzTEUocmVkdWNlZCwgZmllbGRMZW4pIDogbnVtYmVyVG9CeXRlc0JFKHJlZHVjZWQsIGZpZWxkTGVuKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1vZHVsYXIuanMubWFwIiwiLyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL1xuLy8gMTAwIGxpbmVzIG9mIGNvZGUgaW4gdGhlIGZpbGUgYXJlIGR1cGxpY2F0ZWQgZnJvbSBub2JsZS1oYXNoZXMgKHV0aWxzKS5cbi8vIFRoaXMgaXMgT0s6IGBhYnN0cmFjdGAgZGlyZWN0b3J5IGRvZXMgbm90IHVzZSBub2JsZS1oYXNoZXMuXG4vLyBVc2VyIG1heSBvcHQtaW4gaW50byB1c2luZyBkaWZmZXJlbnQgaGFzaGluZyBsaWJyYXJ5LiBUaGlzIHdheSwgbm9ibGUtaGFzaGVzXG4vLyB3b24ndCBiZSBpbmNsdWRlZCBpbnRvIHRoZWlyIGJ1bmRsZS5cbmNvbnN0IF8wbiA9IEJpZ0ludCgwKTtcbmNvbnN0IF8xbiA9IEJpZ0ludCgxKTtcbmNvbnN0IF8ybiA9IEJpZ0ludCgyKTtcbmV4cG9ydCBmdW5jdGlvbiBpc0J5dGVzKGEpIHtcbiAgICByZXR1cm4gKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8XG4gICAgICAgIChhICE9IG51bGwgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmIGEuY29uc3RydWN0b3IubmFtZSA9PT0gJ1VpbnQ4QXJyYXknKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWJ5dGVzKGl0ZW0pIHtcbiAgICBpZiAoIWlzQnl0ZXMoaXRlbSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVWludDhBcnJheSBleHBlY3RlZCcpO1xufVxuLy8gQXJyYXkgd2hlcmUgaW5kZXggMHhmMCAoMjQwKSBpcyBtYXBwZWQgdG8gc3RyaW5nICdmMCdcbmNvbnN0IGhleGVzID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoXywgaSkgPT4gaS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSk7XG4vKipcbiAqIEBleGFtcGxlIGJ5dGVzVG9IZXgoVWludDhBcnJheS5mcm9tKFsweGNhLCAweGZlLCAweDAxLCAweDIzXSkpIC8vICdjYWZlMDEyMydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9IZXgoYnl0ZXMpIHtcbiAgICBhYnl0ZXMoYnl0ZXMpO1xuICAgIC8vIHByZS1jYWNoaW5nIGltcHJvdmVzIHRoZSBzcGVlZCA2eFxuICAgIGxldCBoZXggPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGhleCArPSBoZXhlc1tieXRlc1tpXV07XG4gICAgfVxuICAgIHJldHVybiBoZXg7XG59XG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9IZXhVbnBhZGRlZChudW0pIHtcbiAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpO1xuICAgIHJldHVybiBoZXgubGVuZ3RoICYgMSA/IGAwJHtoZXh9YCA6IGhleDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb051bWJlcihoZXgpIHtcbiAgICBpZiAodHlwZW9mIGhleCAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICcgKyB0eXBlb2YgaGV4KTtcbiAgICAvLyBCaWcgRW5kaWFuXG4gICAgcmV0dXJuIEJpZ0ludChoZXggPT09ICcnID8gJzAnIDogYDB4JHtoZXh9YCk7XG59XG4vLyBXZSB1c2Ugb3B0aW1pemVkIHRlY2huaXF1ZSB0byBjb252ZXJ0IGhleCBzdHJpbmcgdG8gYnl0ZSBhcnJheVxuY29uc3QgYXNjaWlzID0geyBfMDogNDgsIF85OiA1NywgX0E6IDY1LCBfRjogNzAsIF9hOiA5NywgX2Y6IDEwMiB9O1xuZnVuY3Rpb24gYXNjaWlUb0Jhc2UxNihjaGFyKSB7XG4gICAgaWYgKGNoYXIgPj0gYXNjaWlzLl8wICYmIGNoYXIgPD0gYXNjaWlzLl85KVxuICAgICAgICByZXR1cm4gY2hhciAtIGFzY2lpcy5fMDtcbiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX0EgJiYgY2hhciA8PSBhc2NpaXMuX0YpXG4gICAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fQSAtIDEwKTtcbiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX2EgJiYgY2hhciA8PSBhc2NpaXMuX2YpXG4gICAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fYSAtIDEwKTtcbiAgICByZXR1cm47XG59XG4vKipcbiAqIEBleGFtcGxlIGhleFRvQnl0ZXMoJ2NhZmUwMTIzJykgLy8gVWludDhBcnJheS5mcm9tKFsweGNhLCAweGZlLCAweDAxLCAweDIzXSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvQnl0ZXMoaGV4KSB7XG4gICAgaWYgKHR5cGVvZiBoZXggIT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCAnICsgdHlwZW9mIGhleCk7XG4gICAgY29uc3QgaGwgPSBoZXgubGVuZ3RoO1xuICAgIGNvbnN0IGFsID0gaGwgLyAyO1xuICAgIGlmIChobCAlIDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFkZGVkIGhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCB1bnBhZGRlZCBoZXggb2YgbGVuZ3RoICcgKyBobCk7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShhbCk7XG4gICAgZm9yIChsZXQgYWkgPSAwLCBoaSA9IDA7IGFpIDwgYWw7IGFpKyssIGhpICs9IDIpIHtcbiAgICAgICAgY29uc3QgbjEgPSBhc2NpaVRvQmFzZTE2KGhleC5jaGFyQ29kZUF0KGhpKSk7XG4gICAgICAgIGNvbnN0IG4yID0gYXNjaWlUb0Jhc2UxNihoZXguY2hhckNvZGVBdChoaSArIDEpKTtcbiAgICAgICAgaWYgKG4xID09PSB1bmRlZmluZWQgfHwgbjIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IGhleFtoaV0gKyBoZXhbaGkgKyAxXTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IG5vbi1oZXggY2hhcmFjdGVyIFwiJyArIGNoYXIgKyAnXCIgYXQgaW5kZXggJyArIGhpKTtcbiAgICAgICAgfVxuICAgICAgICBhcnJheVthaV0gPSBuMSAqIDE2ICsgbjI7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cbi8vIEJFOiBCaWcgRW5kaWFuLCBMRTogTGl0dGxlIEVuZGlhblxuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9OdW1iZXJCRShieXRlcykge1xuICAgIHJldHVybiBoZXhUb051bWJlcihieXRlc1RvSGV4KGJ5dGVzKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYnl0ZXNUb051bWJlckxFKGJ5dGVzKSB7XG4gICAgYWJ5dGVzKGJ5dGVzKTtcbiAgICByZXR1cm4gaGV4VG9OdW1iZXIoYnl0ZXNUb0hleChVaW50OEFycmF5LmZyb20oYnl0ZXMpLnJldmVyc2UoKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlclRvQnl0ZXNCRShuLCBsZW4pIHtcbiAgICByZXR1cm4gaGV4VG9CeXRlcyhuLnRvU3RyaW5nKDE2KS5wYWRTdGFydChsZW4gKiAyLCAnMCcpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJUb0J5dGVzTEUobiwgbGVuKSB7XG4gICAgcmV0dXJuIG51bWJlclRvQnl0ZXNCRShuLCBsZW4pLnJldmVyc2UoKTtcbn1cbi8vIFVucGFkZGVkLCByYXJlbHkgdXNlZFxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlclRvVmFyQnl0ZXNCRShuKSB7XG4gICAgcmV0dXJuIGhleFRvQnl0ZXMobnVtYmVyVG9IZXhVbnBhZGRlZChuKSk7XG59XG4vKipcbiAqIFRha2VzIGhleCBzdHJpbmcgb3IgVWludDhBcnJheSwgY29udmVydHMgdG8gVWludDhBcnJheS5cbiAqIFZhbGlkYXRlcyBvdXRwdXQgbGVuZ3RoLlxuICogV2lsbCB0aHJvdyBlcnJvciBmb3Igb3RoZXIgdHlwZXMuXG4gKiBAcGFyYW0gdGl0bGUgZGVzY3JpcHRpdmUgdGl0bGUgZm9yIGFuIGVycm9yIGUuZy4gJ3ByaXZhdGUga2V5J1xuICogQHBhcmFtIGhleCBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXlcbiAqIEBwYXJhbSBleHBlY3RlZExlbmd0aCBvcHRpb25hbCwgd2lsbCBjb21wYXJlIHRvIHJlc3VsdCBhcnJheSdzIGxlbmd0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUJ5dGVzKHRpdGxlLCBoZXgsIGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgbGV0IHJlcztcbiAgICBpZiAodHlwZW9mIGhleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcyA9IGhleFRvQnl0ZXMoaGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RpdGxlfSBtdXN0IGJlIHZhbGlkIGhleCBzdHJpbmcsIGdvdCBcIiR7aGV4fVwiLiBDYXVzZTogJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQnl0ZXMoaGV4KSkge1xuICAgICAgICAvLyBVaW50OEFycmF5LmZyb20oKSBpbnN0ZWFkIG9mIGhhc2guc2xpY2UoKSBiZWNhdXNlIG5vZGUuanMgQnVmZmVyXG4gICAgICAgIC8vIGlzIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXksIGFuZCBpdHMgc2xpY2UoKSBjcmVhdGVzICoqbXV0YWJsZSoqIGNvcHlcbiAgICAgICAgcmVzID0gVWludDhBcnJheS5mcm9tKGhleCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGl0bGV9IG11c3QgYmUgaGV4IHN0cmluZyBvciBVaW50OEFycmF5YCk7XG4gICAgfVxuICAgIGNvbnN0IGxlbiA9IHJlcy5sZW5ndGg7XG4gICAgaWYgKHR5cGVvZiBleHBlY3RlZExlbmd0aCA9PT0gJ251bWJlcicgJiYgbGVuICE9PSBleHBlY3RlZExlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RpdGxlfSBleHBlY3RlZCAke2V4cGVjdGVkTGVuZ3RofSBieXRlcywgZ290ICR7bGVufWApO1xuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIENvcGllcyBzZXZlcmFsIFVpbnQ4QXJyYXlzIGludG8gb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0Qnl0ZXMoLi4uYXJyYXlzKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tpXTtcbiAgICAgICAgYWJ5dGVzKGEpO1xuICAgICAgICBzdW0gKz0gYS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHN1bSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIHBhZCA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tpXTtcbiAgICAgICAgcmVzLnNldChhLCBwYWQpO1xuICAgICAgICBwYWQgKz0gYS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vLyBDb21wYXJlcyAyIHU4YS1zIGluIGtpbmRhIGNvbnN0YW50IHRpbWVcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbEJ5dGVzKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0IGRpZmYgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKylcbiAgICAgICAgZGlmZiB8PSBhW2ldIF4gYltpXTtcbiAgICByZXR1cm4gZGlmZiA9PT0gMDtcbn1cbi8qKlxuICogQGV4YW1wbGUgdXRmOFRvQnl0ZXMoJ2FiYycpIC8vIG5ldyBVaW50OEFycmF5KFs5NywgOTgsIDk5XSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cikge1xuICAgIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1dGY4VG9CeXRlcyBleHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiBzdHJ9YCk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpKTsgLy8gaHR0cHM6Ly9idWd6aWwubGEvMTY4MTgwOVxufVxuLy8gQml0IG9wZXJhdGlvbnNcbi8qKlxuICogQ2FsY3VsYXRlcyBhbW91bnQgb2YgYml0cyBpbiBhIGJpZ2ludC5cbiAqIFNhbWUgYXMgYG4udG9TdHJpbmcoMikubGVuZ3RoYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYml0TGVuKG4pIHtcbiAgICBsZXQgbGVuO1xuICAgIGZvciAobGVuID0gMDsgbiA+IF8wbjsgbiA+Pj0gXzFuLCBsZW4gKz0gMSlcbiAgICAgICAgO1xuICAgIHJldHVybiBsZW47XG59XG4vKipcbiAqIEdldHMgc2luZ2xlIGJpdCBhdCBwb3NpdGlvbi5cbiAqIE5PVEU6IGZpcnN0IGJpdCBwb3NpdGlvbiBpcyAwIChzYW1lIGFzIGFycmF5cylcbiAqIFNhbWUgYXMgYCEhK0FycmF5LmZyb20obi50b1N0cmluZygyKSkucmV2ZXJzZSgpW3Bvc11gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaXRHZXQobiwgcG9zKSB7XG4gICAgcmV0dXJuIChuID4+IEJpZ0ludChwb3MpKSAmIF8xbjtcbn1cbi8qKlxuICogU2V0cyBzaW5nbGUgYml0IGF0IHBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYml0U2V0KG4sIHBvcywgdmFsdWUpIHtcbiAgICByZXR1cm4gbiB8ICgodmFsdWUgPyBfMW4gOiBfMG4pIDw8IEJpZ0ludChwb3MpKTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIG1hc2sgZm9yIE4gYml0cy4gTm90IHVzaW5nICoqIG9wZXJhdG9yIHdpdGggYmlnaW50cyBiZWNhdXNlIG9mIG9sZCBlbmdpbmVzLlxuICogU2FtZSBhcyBCaWdJbnQoYDBiJHtBcnJheShpKS5maWxsKCcxJykuam9pbignJyl9YClcbiAqL1xuZXhwb3J0IGNvbnN0IGJpdE1hc2sgPSAobikgPT4gKF8ybiA8PCBCaWdJbnQobiAtIDEpKSAtIF8xbjtcbi8vIERSQkdcbmNvbnN0IHU4biA9IChkYXRhKSA9PiBuZXcgVWludDhBcnJheShkYXRhKTsgLy8gY3JlYXRlcyBVaW50OEFycmF5XG5jb25zdCB1OGZyID0gKGFycikgPT4gVWludDhBcnJheS5mcm9tKGFycik7IC8vIGFub3RoZXIgc2hvcnRjdXRcbi8qKlxuICogTWluaW1hbCBITUFDLURSQkcgZnJvbSBOSVNUIDgwMC05MCBmb3IgUkZDNjk3OSBzaWdzLlxuICogQHJldHVybnMgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgRFJCRyB1bnRpbCAybmQgYXJnIHJldHVybnMgc29tZXRoaW5nIG1lYW5pbmdmdWxcbiAqIEBleGFtcGxlXG4gKiAgIGNvbnN0IGRyYmcgPSBjcmVhdGVIbWFjRFJCRzxLZXk+KDMyLCAzMiwgaG1hYyk7XG4gKiAgIGRyYmcoc2VlZCwgYnl0ZXNUb0tleSk7IC8vIGJ5dGVzVG9LZXkgbXVzdCByZXR1cm4gS2V5IG9yIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG1hY0RyYmcoaGFzaExlbiwgcUJ5dGVMZW4sIGhtYWNGbikge1xuICAgIGlmICh0eXBlb2YgaGFzaExlbiAhPT0gJ251bWJlcicgfHwgaGFzaExlbiA8IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaExlbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgaWYgKHR5cGVvZiBxQnl0ZUxlbiAhPT0gJ251bWJlcicgfHwgcUJ5dGVMZW4gPCAyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3FCeXRlTGVuIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAodHlwZW9mIGhtYWNGbiAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdobWFjRm4gbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgLy8gU3RlcCBCLCBTdGVwIEM6IHNldCBoYXNoTGVuIHRvIDgqY2VpbChobGVuLzgpXG4gICAgbGV0IHYgPSB1OG4oaGFzaExlbik7IC8vIE1pbmltYWwgbm9uLWZ1bGwtc3BlYyBITUFDLURSQkcgZnJvbSBOSVNUIDgwMC05MCBmb3IgUkZDNjk3OSBzaWdzLlxuICAgIGxldCBrID0gdThuKGhhc2hMZW4pOyAvLyBTdGVwcyBCIGFuZCBDIG9mIFJGQzY5NzkgMy4yOiBzZXQgaGFzaExlbiwgaW4gb3VyIGNhc2UgYWx3YXlzIHNhbWVcbiAgICBsZXQgaSA9IDA7IC8vIEl0ZXJhdGlvbnMgY291bnRlciwgd2lsbCB0aHJvdyB3aGVuIG92ZXIgMTAwMFxuICAgIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgICAgICB2LmZpbGwoMSk7XG4gICAgICAgIGsuZmlsbCgwKTtcbiAgICAgICAgaSA9IDA7XG4gICAgfTtcbiAgICBjb25zdCBoID0gKC4uLmIpID0+IGhtYWNGbihrLCB2LCAuLi5iKTsgLy8gaG1hYyhrKSh2LCAuLi52YWx1ZXMpXG4gICAgY29uc3QgcmVzZWVkID0gKHNlZWQgPSB1OG4oKSkgPT4ge1xuICAgICAgICAvLyBITUFDLURSQkcgcmVzZWVkKCkgZnVuY3Rpb24uIFN0ZXBzIEQtR1xuICAgICAgICBrID0gaCh1OGZyKFsweDAwXSksIHNlZWQpOyAvLyBrID0gaG1hYyhrIHx8IHYgfHwgMHgwMCB8fCBzZWVkKVxuICAgICAgICB2ID0gaCgpOyAvLyB2ID0gaG1hYyhrIHx8IHYpXG4gICAgICAgIGlmIChzZWVkLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgayA9IGgodThmcihbMHgwMV0pLCBzZWVkKTsgLy8gayA9IGhtYWMoayB8fCB2IHx8IDB4MDEgfHwgc2VlZClcbiAgICAgICAgdiA9IGgoKTsgLy8gdiA9IGhtYWMoayB8fCB2KVxuICAgIH07XG4gICAgY29uc3QgZ2VuID0gKCkgPT4ge1xuICAgICAgICAvLyBITUFDLURSQkcgZ2VuZXJhdGUoKSBmdW5jdGlvblxuICAgICAgICBpZiAoaSsrID49IDEwMDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RyYmc6IHRyaWVkIDEwMDAgdmFsdWVzJyk7XG4gICAgICAgIGxldCBsZW4gPSAwO1xuICAgICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgICAgd2hpbGUgKGxlbiA8IHFCeXRlTGVuKSB7XG4gICAgICAgICAgICB2ID0gaCgpO1xuICAgICAgICAgICAgY29uc3Qgc2wgPSB2LnNsaWNlKCk7XG4gICAgICAgICAgICBvdXQucHVzaChzbCk7XG4gICAgICAgICAgICBsZW4gKz0gdi5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmNhdEJ5dGVzKC4uLm91dCk7XG4gICAgfTtcbiAgICBjb25zdCBnZW5VbnRpbCA9IChzZWVkLCBwcmVkKSA9PiB7XG4gICAgICAgIHJlc2V0KCk7XG4gICAgICAgIHJlc2VlZChzZWVkKTsgLy8gU3RlcHMgRC1HXG4gICAgICAgIGxldCByZXMgPSB1bmRlZmluZWQ7IC8vIFN0ZXAgSDogZ3JpbmQgdW50aWwgayBpcyBpbiBbMS4ubi0xXVxuICAgICAgICB3aGlsZSAoIShyZXMgPSBwcmVkKGdlbigpKSkpXG4gICAgICAgICAgICByZXNlZWQoKTtcbiAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIHJldHVybiBnZW5VbnRpbDtcbn1cbi8vIFZhbGlkYXRpbmcgY3VydmVzIGFuZCBmaWVsZHNcbmNvbnN0IHZhbGlkYXRvckZucyA9IHtcbiAgICBiaWdpbnQ6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdiaWdpbnQnLFxuICAgIGZ1bmN0aW9uOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nLFxuICAgIGJvb2xlYW46ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyxcbiAgICBzdHJpbmc6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnLFxuICAgIHN0cmluZ09yVWludDhBcnJheTogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgaXNCeXRlcyh2YWwpLFxuICAgIGlzU2FmZUludGVnZXI6ICh2YWwpID0+IE51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbCksXG4gICAgYXJyYXk6ICh2YWwpID0+IEFycmF5LmlzQXJyYXkodmFsKSxcbiAgICBmaWVsZDogKHZhbCwgb2JqZWN0KSA9PiBvYmplY3QuRnAuaXNWYWxpZCh2YWwpLFxuICAgIGhhc2g6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIodmFsLm91dHB1dExlbiksXG59O1xuLy8gdHlwZSBSZWNvcmQ8SyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgVD4gPSB7IFtQIGluIEtdOiBUOyB9XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob2JqZWN0LCB2YWxpZGF0b3JzLCBvcHRWYWxpZGF0b3JzID0ge30pIHtcbiAgICBjb25zdCBjaGVja0ZpZWxkID0gKGZpZWxkTmFtZSwgdHlwZSwgaXNPcHRpb25hbCkgPT4ge1xuICAgICAgICBjb25zdCBjaGVja1ZhbCA9IHZhbGlkYXRvckZuc1t0eXBlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja1ZhbCAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgXCIke3R5cGV9XCIsIGV4cGVjdGVkIGZ1bmN0aW9uYCk7XG4gICAgICAgIGNvbnN0IHZhbCA9IG9iamVjdFtmaWVsZE5hbWVdO1xuICAgICAgICBpZiAoaXNPcHRpb25hbCAmJiB2YWwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFjaGVja1ZhbCh2YWwsIG9iamVjdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbSAke1N0cmluZyhmaWVsZE5hbWUpfT0ke3ZhbH0gKCR7dHlwZW9mIHZhbH0pLCBleHBlY3RlZCAke3R5cGV9YCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZvciAoY29uc3QgW2ZpZWxkTmFtZSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXModmFsaWRhdG9ycykpXG4gICAgICAgIGNoZWNrRmllbGQoZmllbGROYW1lLCB0eXBlLCBmYWxzZSk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhvcHRWYWxpZGF0b3JzKSlcbiAgICAgICAgY2hlY2tGaWVsZChmaWVsZE5hbWUsIHR5cGUsIHRydWUpO1xuICAgIHJldHVybiBvYmplY3Q7XG59XG4vLyB2YWxpZGF0ZSB0eXBlIHRlc3RzXG4vLyBjb25zdCBvOiB7IGE6IG51bWJlcjsgYjogbnVtYmVyOyBjOiBudW1iZXIgfSA9IHsgYTogMSwgYjogNSwgYzogNiB9O1xuLy8gY29uc3QgejAgPSB2YWxpZGF0ZU9iamVjdChvLCB7IGE6ICdpc1NhZmVJbnRlZ2VyJyB9LCB7IGM6ICdiaWdpbnQnIH0pOyAvLyBPayFcbi8vIC8vIFNob3VsZCBmYWlsIHR5cGUtY2hlY2tcbi8vIGNvbnN0IHoxID0gdmFsaWRhdGVPYmplY3QobywgeyBhOiAndG1wJyB9LCB7IGM6ICd6eicgfSk7XG4vLyBjb25zdCB6MiA9IHZhbGlkYXRlT2JqZWN0KG8sIHsgYTogJ2lzU2FmZUludGVnZXInIH0sIHsgYzogJ3p6JyB9KTtcbi8vIGNvbnN0IHozID0gdmFsaWRhdGVPYmplY3QobywgeyB0ZXN0OiAnYm9vbGVhbicsIHo6ICdidWcnIH0pO1xuLy8gY29uc3QgejQgPSB2YWxpZGF0ZU9iamVjdChvLCB7IGE6ICdib29sZWFuJywgejogJ2J1ZycgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLCIvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovXG4vLyBTaG9ydCBXZWllcnN0cmFzcyBjdXJ2ZS4gVGhlIGZvcm11bGEgaXM6IHnCsiA9IHjCsyArIGF4ICsgYlxuaW1wb3J0ICogYXMgbW9kIGZyb20gJy4vbW9kdWxhci5qcyc7XG5pbXBvcnQgKiBhcyB1dCBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7IGVuc3VyZUJ5dGVzIH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgeyB3TkFGLCB2YWxpZGF0ZUJhc2ljIH0gZnJvbSAnLi9jdXJ2ZS5qcyc7XG5mdW5jdGlvbiB2YWxpZGF0ZVBvaW50T3B0cyhjdXJ2ZSkge1xuICAgIGNvbnN0IG9wdHMgPSB2YWxpZGF0ZUJhc2ljKGN1cnZlKTtcbiAgICB1dC52YWxpZGF0ZU9iamVjdChvcHRzLCB7XG4gICAgICAgIGE6ICdmaWVsZCcsXG4gICAgICAgIGI6ICdmaWVsZCcsXG4gICAgfSwge1xuICAgICAgICBhbGxvd2VkUHJpdmF0ZUtleUxlbmd0aHM6ICdhcnJheScsXG4gICAgICAgIHdyYXBQcml2YXRlS2V5OiAnYm9vbGVhbicsXG4gICAgICAgIGlzVG9yc2lvbkZyZWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGNsZWFyQ29mYWN0b3I6ICdmdW5jdGlvbicsXG4gICAgICAgIGFsbG93SW5maW5pdHlQb2ludDogJ2Jvb2xlYW4nLFxuICAgICAgICBmcm9tQnl0ZXM6ICdmdW5jdGlvbicsXG4gICAgICAgIHRvQnl0ZXM6ICdmdW5jdGlvbicsXG4gICAgfSk7XG4gICAgY29uc3QgeyBlbmRvLCBGcCwgYSB9ID0gb3B0cztcbiAgICBpZiAoZW5kbykge1xuICAgICAgICBpZiAoIUZwLmVxbChhLCBGcC5aRVJPKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmRvbW9ycGhpc20gY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgS29ibGl0eiBjdXJ2ZXMgdGhhdCBoYXZlIGE9MCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5kbyAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgIHR5cGVvZiBlbmRvLmJldGEgIT09ICdiaWdpbnQnIHx8XG4gICAgICAgICAgICB0eXBlb2YgZW5kby5zcGxpdFNjYWxhciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlbmRvbW9ycGhpc20gd2l0aCBiZXRhOiBiaWdpbnQgYW5kIHNwbGl0U2NhbGFyOiBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ub3B0cyB9KTtcbn1cbi8vIEFTTi4xIERFUiBlbmNvZGluZyB1dGlsaXRpZXNcbmNvbnN0IHsgYnl0ZXNUb051bWJlckJFOiBiMm4sIGhleFRvQnl0ZXM6IGgyYiB9ID0gdXQ7XG5leHBvcnQgY29uc3QgREVSID0ge1xuICAgIC8vIGFzbi4xIERFUiBlbmNvZGluZyB1dGlsc1xuICAgIEVycjogY2xhc3MgREVSRXJyIGV4dGVuZHMgRXJyb3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcihtID0gJycpIHtcbiAgICAgICAgICAgIHN1cGVyKG0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBfcGFyc2VJbnQoZGF0YSkge1xuICAgICAgICBjb25zdCB7IEVycjogRSB9ID0gREVSO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCAyIHx8IGRhdGFbMF0gIT09IDB4MDIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRSgnSW52YWxpZCBzaWduYXR1cmUgaW50ZWdlciB0YWcnKTtcbiAgICAgICAgY29uc3QgbGVuID0gZGF0YVsxXTtcbiAgICAgICAgY29uc3QgcmVzID0gZGF0YS5zdWJhcnJheSgyLCBsZW4gKyAyKTtcbiAgICAgICAgaWYgKCFsZW4gfHwgcmVzLmxlbmd0aCAhPT0gbGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEUoJ0ludmFsaWQgc2lnbmF0dXJlIGludGVnZXI6IHdyb25nIGxlbmd0aCcpO1xuICAgICAgICAvLyBodHRwczovL2NyeXB0by5zdGFja2V4Y2hhbmdlLmNvbS9hLzU3NzM0IExlZnRtb3N0IGJpdCBvZiBmaXJzdCBieXRlIGlzICduZWdhdGl2ZScgZmxhZyxcbiAgICAgICAgLy8gc2luY2Ugd2UgYWx3YXlzIHVzZSBwb3NpdGl2ZSBpbnRlZ2VycyBoZXJlLiBJdCBtdXN0IGFsd2F5cyBiZSBlbXB0eTpcbiAgICAgICAgLy8gLSBhZGQgemVybyBieXRlIGlmIGV4aXN0c1xuICAgICAgICAvLyAtIGlmIG5leHQgYnl0ZSBkb2Vzbid0IGhhdmUgYSBmbGFnLCBsZWFkaW5nIHplcm8gaXMgbm90IGFsbG93ZWQgKG1pbmltYWwgZW5jb2RpbmcpXG4gICAgICAgIGlmIChyZXNbMF0gJiAwYjEwMDAwMDAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEUoJ0ludmFsaWQgc2lnbmF0dXJlIGludGVnZXI6IG5lZ2F0aXZlJyk7XG4gICAgICAgIGlmIChyZXNbMF0gPT09IDB4MDAgJiYgIShyZXNbMV0gJiAwYjEwMDAwMDAwKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFKCdJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB1bm5lY2Vzc2FyeSBsZWFkaW5nIHplcm8nKTtcbiAgICAgICAgcmV0dXJuIHsgZDogYjJuKHJlcyksIGw6IGRhdGEuc3ViYXJyYXkobGVuICsgMikgfTsgLy8gZCBpcyBkYXRhLCBsIGlzIGxlZnRcbiAgICB9LFxuICAgIHRvU2lnKGhleCkge1xuICAgICAgICAvLyBwYXJzZSBERVIgc2lnbmF0dXJlXG4gICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgaGV4ID09PSAnc3RyaW5nJyA/IGgyYihoZXgpIDogaGV4O1xuICAgICAgICB1dC5hYnl0ZXMoZGF0YSk7XG4gICAgICAgIGxldCBsID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGlmIChsIDwgMiB8fCBkYXRhWzBdICE9IDB4MzApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRSgnSW52YWxpZCBzaWduYXR1cmUgdGFnJyk7XG4gICAgICAgIGlmIChkYXRhWzFdICE9PSBsIC0gMilcbiAgICAgICAgICAgIHRocm93IG5ldyBFKCdJbnZhbGlkIHNpZ25hdHVyZTogaW5jb3JyZWN0IGxlbmd0aCcpO1xuICAgICAgICBjb25zdCB7IGQ6IHIsIGw6IHNCeXRlcyB9ID0gREVSLl9wYXJzZUludChkYXRhLnN1YmFycmF5KDIpKTtcbiAgICAgICAgY29uc3QgeyBkOiBzLCBsOiByQnl0ZXNMZWZ0IH0gPSBERVIuX3BhcnNlSW50KHNCeXRlcyk7XG4gICAgICAgIGlmIChyQnl0ZXNMZWZ0Lmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFKCdJbnZhbGlkIHNpZ25hdHVyZTogbGVmdCBieXRlcyBhZnRlciBwYXJzaW5nJyk7XG4gICAgICAgIHJldHVybiB7IHIsIHMgfTtcbiAgICB9LFxuICAgIGhleEZyb21TaWcoc2lnKSB7XG4gICAgICAgIC8vIEFkZCBsZWFkaW5nIHplcm8gaWYgZmlyc3QgYnl0ZSBoYXMgbmVnYXRpdmUgYml0IGVuYWJsZWQuIE1vcmUgZGV0YWlscyBpbiAnX3BhcnNlSW50J1xuICAgICAgICBjb25zdCBzbGljZSA9IChzKSA9PiAoTnVtYmVyLnBhcnNlSW50KHNbMF0sIDE2KSAmIDBiMTAwMCA/ICcwMCcgKyBzIDogcyk7XG4gICAgICAgIGNvbnN0IGggPSAobnVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgcmV0dXJuIGhleC5sZW5ndGggJiAxID8gYDAke2hleH1gIDogaGV4O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzID0gc2xpY2UoaChzaWcucykpO1xuICAgICAgICBjb25zdCByID0gc2xpY2UoaChzaWcucikpO1xuICAgICAgICBjb25zdCBzaGwgPSBzLmxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IHJobCA9IHIubGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3Qgc2wgPSBoKHNobCk7XG4gICAgICAgIGNvbnN0IHJsID0gaChyaGwpO1xuICAgICAgICByZXR1cm4gYDMwJHtoKHJobCArIHNobCArIDQpfTAyJHtybH0ke3J9MDIke3NsfSR7c31gO1xuICAgIH0sXG59O1xuLy8gQmUgZnJpZW5kbHkgdG8gYmFkIEVDTUFTY3JpcHQgcGFyc2VycyBieSBub3QgdXNpbmcgYmlnaW50IGxpdGVyYWxzXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IF8wbiA9IEJpZ0ludCgwKSwgXzFuID0gQmlnSW50KDEpLCBfMm4gPSBCaWdJbnQoMiksIF8zbiA9IEJpZ0ludCgzKSwgXzRuID0gQmlnSW50KDQpO1xuZXhwb3J0IGZ1bmN0aW9uIHdlaWVyc3RyYXNzUG9pbnRzKG9wdHMpIHtcbiAgICBjb25zdCBDVVJWRSA9IHZhbGlkYXRlUG9pbnRPcHRzKG9wdHMpO1xuICAgIGNvbnN0IHsgRnAgfSA9IENVUlZFOyAvLyBBbGwgY3VydmVzIGhhcyBzYW1lIGZpZWxkIC8gZ3JvdXAgbGVuZ3RoIGFzIGZvciBub3csIGJ1dCB0aGV5IGNhbiBkaWZmZXJcbiAgICBjb25zdCB0b0J5dGVzID0gQ1VSVkUudG9CeXRlcyB8fFxuICAgICAgICAoKF9jLCBwb2ludCwgX2lzQ29tcHJlc3NlZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IHBvaW50LnRvQWZmaW5lKCk7XG4gICAgICAgICAgICByZXR1cm4gdXQuY29uY2F0Qnl0ZXMoVWludDhBcnJheS5mcm9tKFsweDA0XSksIEZwLnRvQnl0ZXMoYS54KSwgRnAudG9CeXRlcyhhLnkpKTtcbiAgICAgICAgfSk7XG4gICAgY29uc3QgZnJvbUJ5dGVzID0gQ1VSVkUuZnJvbUJ5dGVzIHx8XG4gICAgICAgICgoYnl0ZXMpID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnN0IGhlYWQgPSBieXRlc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHRhaWwgPSBieXRlcy5zdWJhcnJheSgxKTtcbiAgICAgICAgICAgIC8vIGlmIChoZWFkICE9PSAweDA0KSB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgbm9uLWNvbXByZXNzZWQgZW5jb2RpbmcgaXMgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICBjb25zdCB4ID0gRnAuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoMCwgRnAuQllURVMpKTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBGcC5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcC5CWVRFUywgMiAqIEZwLkJZVEVTKSk7XG4gICAgICAgICAgICByZXR1cm4geyB4LCB5IH07XG4gICAgICAgIH0pO1xuICAgIC8qKlxuICAgICAqIHnCsiA9IHjCsyArIGF4ICsgYjogU2hvcnQgd2VpZXJzdHJhc3MgY3VydmUgZm9ybXVsYVxuICAgICAqIEByZXR1cm5zIHnCslxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdlaWVyc3RyYXNzRXF1YXRpb24oeCkge1xuICAgICAgICBjb25zdCB7IGEsIGIgfSA9IENVUlZFO1xuICAgICAgICBjb25zdCB4MiA9IEZwLnNxcih4KTsgLy8geCAqIHhcbiAgICAgICAgY29uc3QgeDMgPSBGcC5tdWwoeDIsIHgpOyAvLyB4MiAqIHhcbiAgICAgICAgcmV0dXJuIEZwLmFkZChGcC5hZGQoeDMsIEZwLm11bCh4LCBhKSksIGIpOyAvLyB4MyArIGEgKiB4ICsgYlxuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB3aGV0aGVyIHRoZSBwYXNzZWQgY3VydmUgcGFyYW1zIGFyZSB2YWxpZC5cbiAgICAvLyBXZSBjaGVjayBpZiBjdXJ2ZSBlcXVhdGlvbiB3b3JrcyBmb3IgZ2VuZXJhdG9yIHBvaW50LlxuICAgIC8vIGBhc3NlcnRWYWxpZGl0eSgpYCB3b24ndCB3b3JrOiBgaXNUb3JzaW9uRnJlZSgpYCBpcyBub3QgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQgaW4gYmxzMTItMzgxLlxuICAgIC8vIFByb2plY3RpdmVQb2ludCBjbGFzcyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LlxuICAgIGlmICghRnAuZXFsKEZwLnNxcihDVVJWRS5HeSksIHdlaWVyc3RyYXNzRXF1YXRpb24oQ1VSVkUuR3gpKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgZ2VuZXJhdG9yIHBvaW50OiBlcXVhdGlvbiBsZWZ0ICE9IHJpZ2h0Jyk7XG4gICAgLy8gVmFsaWQgZ3JvdXAgZWxlbWVudHMgcmVzaWRlIGluIHJhbmdlIDEuLm4tMVxuICAgIGZ1bmN0aW9uIGlzV2l0aGluQ3VydmVPcmRlcihudW0pIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBudW0gPT09ICdiaWdpbnQnICYmIF8wbiA8IG51bSAmJiBudW0gPCBDVVJWRS5uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3NlcnRHRShudW0pIHtcbiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIobnVtKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdmFsaWQgYmlnaW50OiAwIDwgYmlnaW50IDwgY3VydmUubicpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZXMgaWYgcHJpdiBrZXkgaXMgdmFsaWQgYW5kIGNvbnZlcnRzIGl0IHRvIGJpZ2ludC5cbiAgICAvLyBTdXBwb3J0cyBvcHRpb25zIGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RocyBhbmQgd3JhcFByaXZhdGVLZXkuXG4gICAgZnVuY3Rpb24gbm9ybVByaXZhdGVLZXlUb1NjYWxhcihrZXkpIHtcbiAgICAgICAgY29uc3QgeyBhbGxvd2VkUHJpdmF0ZUtleUxlbmd0aHM6IGxlbmd0aHMsIG5CeXRlTGVuZ3RoLCB3cmFwUHJpdmF0ZUtleSwgbiB9ID0gQ1VSVkU7XG4gICAgICAgIGlmIChsZW5ndGhzICYmIHR5cGVvZiBrZXkgIT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICBpZiAodXQuaXNCeXRlcyhrZXkpKVxuICAgICAgICAgICAgICAgIGtleSA9IHV0LmJ5dGVzVG9IZXgoa2V5KTtcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byBoZXggc3RyaW5nLCBwYWQuIEUuZy4gUDUyMSB3b3VsZCBub3JtIDEzMC0xMzIgY2hhciBoZXggdG8gMTMyLWNoYXIgYnl0ZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJyB8fCAhbGVuZ3Rocy5pbmNsdWRlcyhrZXkubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgICAgICAgICBrZXkgPSBrZXkucGFkU3RhcnQobkJ5dGVMZW5ndGggKiAyLCAnMCcpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBudW07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBudW0gPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBrZXkgPT09ICdiaWdpbnQnXG4gICAgICAgICAgICAgICAgICAgID8ga2V5XG4gICAgICAgICAgICAgICAgICAgIDogdXQuYnl0ZXNUb051bWJlckJFKGVuc3VyZUJ5dGVzKCdwcml2YXRlIGtleScsIGtleSwgbkJ5dGVMZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJpdmF0ZSBrZXkgbXVzdCBiZSAke25CeXRlTGVuZ3RofSBieXRlcywgaGV4IG9yIGJpZ2ludCwgbm90ICR7dHlwZW9mIGtleX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcFByaXZhdGVLZXkpXG4gICAgICAgICAgICBudW0gPSBtb2QubW9kKG51bSwgbik7IC8vIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGVuYWJsZWQgZm9yIEJMU1xuICAgICAgICBhc3NlcnRHRShudW0pOyAvLyBudW0gaW4gcmFuZ2UgWzEuLk4tMV1cbiAgICAgICAgcmV0dXJuIG51bTtcbiAgICB9XG4gICAgY29uc3QgcG9pbnRQcmVjb21wdXRlcyA9IG5ldyBNYXAoKTtcbiAgICBmdW5jdGlvbiBhc3NlcnRQcmpQb2ludChvdGhlcikge1xuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFBvaW50KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdGl2ZVBvaW50IGV4cGVjdGVkJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2plY3RpdmUgUG9pbnQgd29ya3MgaW4gM2QgLyBwcm9qZWN0aXZlIChob21vZ2VuZW91cykgY29vcmRpbmF0ZXM6ICh4LCB5LCB6KSDiiIsgKHg9eC96LCB5PXkveilcbiAgICAgKiBEZWZhdWx0IFBvaW50IHdvcmtzIGluIDJkIC8gYWZmaW5lIGNvb3JkaW5hdGVzOiAoeCwgeSlcbiAgICAgKiBXZSdyZSBkb2luZyBjYWxjdWxhdGlvbnMgaW4gcHJvamVjdGl2ZSwgYmVjYXVzZSBpdHMgb3BlcmF0aW9ucyBkb24ndCByZXF1aXJlIGNvc3RseSBpbnZlcnNpb24uXG4gICAgICovXG4gICAgY2xhc3MgUG9pbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihweCwgcHksIHB6KSB7XG4gICAgICAgICAgICB0aGlzLnB4ID0gcHg7XG4gICAgICAgICAgICB0aGlzLnB5ID0gcHk7XG4gICAgICAgICAgICB0aGlzLnB6ID0gcHo7XG4gICAgICAgICAgICBpZiAocHggPT0gbnVsbCB8fCAhRnAuaXNWYWxpZChweCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd4IHJlcXVpcmVkJyk7XG4gICAgICAgICAgICBpZiAocHkgPT0gbnVsbCB8fCAhRnAuaXNWYWxpZChweSkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd5IHJlcXVpcmVkJyk7XG4gICAgICAgICAgICBpZiAocHogPT0gbnVsbCB8fCAhRnAuaXNWYWxpZChweikpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd6IHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9lcyBub3QgdmFsaWRhdGUgaWYgdGhlIHBvaW50IGlzIG9uLWN1cnZlLlxuICAgICAgICAvLyBVc2UgZnJvbUhleCBpbnN0ZWFkLCBvciBjYWxsIGFzc2VydFZhbGlkaXR5KCkgbGF0ZXIuXG4gICAgICAgIHN0YXRpYyBmcm9tQWZmaW5lKHApIHtcbiAgICAgICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gcCB8fCB7fTtcbiAgICAgICAgICAgIGlmICghcCB8fCAhRnAuaXNWYWxpZCh4KSB8fCAhRnAuaXNWYWxpZCh5KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYWZmaW5lIHBvaW50Jyk7XG4gICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFBvaW50KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvamVjdGl2ZSBwb2ludCBub3QgYWxsb3dlZCcpO1xuICAgICAgICAgICAgY29uc3QgaXMwID0gKGkpID0+IEZwLmVxbChpLCBGcC5aRVJPKTtcbiAgICAgICAgICAgIC8vIGZyb21BZmZpbmUoeDowLCB5OjApIHdvdWxkIHByb2R1Y2UgKHg6MCwgeTowLCB6OjEpLCBidXQgd2UgbmVlZCAoeDowLCB5OjEsIHo6MClcbiAgICAgICAgICAgIGlmIChpczAoeCkgJiYgaXMwKHkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBQb2ludC5aRVJPO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh4LCB5LCBGcC5PTkUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB4KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS54O1xuICAgICAgICB9XG4gICAgICAgIGdldCB5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS55O1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYWtlcyBhIGJ1bmNoIG9mIFByb2plY3RpdmUgUG9pbnRzIGJ1dCBleGVjdXRlcyBvbmx5IG9uZVxuICAgICAgICAgKiBpbnZlcnNpb24gb24gYWxsIG9mIHRoZW0uIEludmVyc2lvbiBpcyB2ZXJ5IHNsb3cgb3BlcmF0aW9uLFxuICAgICAgICAgKiBzbyB0aGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIG1hc3NpdmVseS5cbiAgICAgICAgICogT3B0aW1pemF0aW9uOiBjb252ZXJ0cyBhIGxpc3Qgb2YgcHJvamVjdGl2ZSBwb2ludHMgdG8gYSBsaXN0IG9mIGlkZW50aWNhbCBwb2ludHMgd2l0aCBaPTEuXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aWMgbm9ybWFsaXplWihwb2ludHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvSW52ID0gRnAuaW52ZXJ0QmF0Y2gocG9pbnRzLm1hcCgocCkgPT4gcC5weikpO1xuICAgICAgICAgICAgcmV0dXJuIHBvaW50cy5tYXAoKHAsIGkpID0+IHAudG9BZmZpbmUodG9JbnZbaV0pKS5tYXAoUG9pbnQuZnJvbUFmZmluZSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnZlcnRzIGhhc2ggc3RyaW5nIG9yIFVpbnQ4QXJyYXkgdG8gUG9pbnQuXG4gICAgICAgICAqIEBwYXJhbSBoZXggc2hvcnQvbG9uZyBFQ0RTQSBoZXhcbiAgICAgICAgICovXG4gICAgICAgIHN0YXRpYyBmcm9tSGV4KGhleCkge1xuICAgICAgICAgICAgY29uc3QgUCA9IFBvaW50LmZyb21BZmZpbmUoZnJvbUJ5dGVzKGVuc3VyZUJ5dGVzKCdwb2ludEhleCcsIGhleCkpKTtcbiAgICAgICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiBQO1xuICAgICAgICB9XG4gICAgICAgIC8vIE11bHRpcGxpZXMgZ2VuZXJhdG9yIHBvaW50IGJ5IHByaXZhdGVLZXkuXG4gICAgICAgIHN0YXRpYyBmcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gUG9pbnQuQkFTRS5tdWx0aXBseShub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBcIlByaXZhdGUgbWV0aG9kXCIsIGRvbid0IHVzZSBpdCBkaXJlY3RseVxuICAgICAgICBfc2V0V2luZG93U2l6ZSh3aW5kb3dTaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9XSU5ET1dfU0laRSA9IHdpbmRvd1NpemU7XG4gICAgICAgICAgICBwb2ludFByZWNvbXB1dGVzLmRlbGV0ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBIHBvaW50IG9uIGN1cnZlIGlzIHZhbGlkIGlmIGl0IGNvbmZvcm1zIHRvIGVxdWF0aW9uLlxuICAgICAgICBhc3NlcnRWYWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzMCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gKDAsIDEsIDApIGFrYSBaRVJPIGlzIGludmFsaWQgaW4gbW9zdCBjb250ZXh0cy5cbiAgICAgICAgICAgICAgICAvLyBJbiBCTFMsIFpFUk8gY2FuIGJlIHNlcmlhbGl6ZWQsIHNvIHdlIGFsbG93IGl0LlxuICAgICAgICAgICAgICAgIC8vICgwLCAwLCAwKSBpcyB3cm9uZyByZXByZXNlbnRhdGlvbiBvZiBaRVJPIGFuZCBpcyBhbHdheXMgaW52YWxpZC5cbiAgICAgICAgICAgICAgICBpZiAoQ1VSVkUuYWxsb3dJbmZpbml0eVBvaW50ICYmICFGcC5pczAodGhpcy5weSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwb2ludDogWkVSTycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU29tZSAzcmQtcGFydHkgdGVzdCB2ZWN0b3JzIHJlcXVpcmUgZGlmZmVyZW50IHdvcmRpbmcgYmV0d2VlbiBoZXJlICYgYGZyb21Db21wcmVzc2VkSGV4YFxuICAgICAgICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB4LCB5IGFyZSB2YWxpZCBmaWVsZCBlbGVtZW50c1xuICAgICAgICAgICAgaWYgKCFGcC5pc1ZhbGlkKHgpIHx8ICFGcC5pc1ZhbGlkKHkpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHBvaW50OiB4IG9yIHkgbm90IEZFJyk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gRnAuc3FyKHkpOyAvLyB5wrJcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsgLy8geMKzICsgYXggKyBiXG4gICAgICAgICAgICBpZiAoIUZwLmVxbChsZWZ0LCByaWdodCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQnKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1RvcnNpb25GcmVlKCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgcG9pbnQ6IG5vdCBpbiBwcmltZS1vcmRlciBzdWJncm91cCcpO1xuICAgICAgICB9XG4gICAgICAgIGhhc0V2ZW5ZKCkge1xuICAgICAgICAgICAgY29uc3QgeyB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7XG4gICAgICAgICAgICBpZiAoRnAuaXNPZGQpXG4gICAgICAgICAgICAgICAgcmV0dXJuICFGcC5pc09kZCh5KTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIGRvZXNuJ3Qgc3VwcG9ydCBpc09kZFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcGFyZSBvbmUgcG9pbnQgdG8gYW5vdGhlci5cbiAgICAgICAgICovXG4gICAgICAgIGVxdWFscyhvdGhlcikge1xuICAgICAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDEsIHB5OiBZMSwgcHo6IFoxIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDIsIHB5OiBZMiwgcHo6IFoyIH0gPSBvdGhlcjtcbiAgICAgICAgICAgIGNvbnN0IFUxID0gRnAuZXFsKEZwLm11bChYMSwgWjIpLCBGcC5tdWwoWDIsIFoxKSk7XG4gICAgICAgICAgICBjb25zdCBVMiA9IEZwLmVxbChGcC5tdWwoWTEsIFoyKSwgRnAubXVsKFkyLCBaMSkpO1xuICAgICAgICAgICAgcmV0dXJuIFUxICYmIFUyO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGbGlwcyBwb2ludCB0byBvbmUgY29ycmVzcG9uZGluZyB0byAoeCwgLXkpIGluIEFmZmluZSBjb29yZGluYXRlcy5cbiAgICAgICAgICovXG4gICAgICAgIG5lZ2F0ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy5weCwgRnAubmVnKHRoaXMucHkpLCB0aGlzLnB6KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW5lcy1Db3N0ZWxsby1CYXRpbmEgZXhjZXB0aW9uLWZyZWUgZG91YmxpbmcgZm9ybXVsYS5cbiAgICAgICAgLy8gVGhlcmUgaXMgMzAlIGZhc3RlciBKYWNvYmlhbiBmb3JtdWxhLCBidXQgaXQgaXMgbm90IGNvbXBsZXRlLlxuICAgICAgICAvLyBodHRwczovL2VwcmludC5pYWNyLm9yZy8yMDE1LzEwNjAsIGFsZ29yaXRobSAzXG4gICAgICAgIC8vIENvc3Q6IDhNICsgM1MgKyAzKmEgKyAyKmIzICsgMTVhZGQuXG4gICAgICAgIGRvdWJsZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7XG4gICAgICAgICAgICBjb25zdCBiMyA9IEZwLm11bChiLCBfM24pO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDEsIHB5OiBZMSwgcHo6IFoxIH0gPSB0aGlzO1xuICAgICAgICAgICAgbGV0IFgzID0gRnAuWkVSTywgWTMgPSBGcC5aRVJPLCBaMyA9IEZwLlpFUk87IC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAgICAgbGV0IHQwID0gRnAubXVsKFgxLCBYMSk7IC8vIHN0ZXAgMVxuICAgICAgICAgICAgbGV0IHQxID0gRnAubXVsKFkxLCBZMSk7XG4gICAgICAgICAgICBsZXQgdDIgPSBGcC5tdWwoWjEsIFoxKTtcbiAgICAgICAgICAgIGxldCB0MyA9IEZwLm11bChYMSwgWTEpO1xuICAgICAgICAgICAgdDMgPSBGcC5hZGQodDMsIHQzKTsgLy8gc3RlcCA1XG4gICAgICAgICAgICBaMyA9IEZwLm11bChYMSwgWjEpO1xuICAgICAgICAgICAgWjMgPSBGcC5hZGQoWjMsIFozKTtcbiAgICAgICAgICAgIFgzID0gRnAubXVsKGEsIFozKTtcbiAgICAgICAgICAgIFkzID0gRnAubXVsKGIzLCB0Mik7XG4gICAgICAgICAgICBZMyA9IEZwLmFkZChYMywgWTMpOyAvLyBzdGVwIDEwXG4gICAgICAgICAgICBYMyA9IEZwLnN1Yih0MSwgWTMpO1xuICAgICAgICAgICAgWTMgPSBGcC5hZGQodDEsIFkzKTtcbiAgICAgICAgICAgIFkzID0gRnAubXVsKFgzLCBZMyk7XG4gICAgICAgICAgICBYMyA9IEZwLm11bCh0MywgWDMpO1xuICAgICAgICAgICAgWjMgPSBGcC5tdWwoYjMsIFozKTsgLy8gc3RlcCAxNVxuICAgICAgICAgICAgdDIgPSBGcC5tdWwoYSwgdDIpO1xuICAgICAgICAgICAgdDMgPSBGcC5zdWIodDAsIHQyKTtcbiAgICAgICAgICAgIHQzID0gRnAubXVsKGEsIHQzKTtcbiAgICAgICAgICAgIHQzID0gRnAuYWRkKHQzLCBaMyk7XG4gICAgICAgICAgICBaMyA9IEZwLmFkZCh0MCwgdDApOyAvLyBzdGVwIDIwXG4gICAgICAgICAgICB0MCA9IEZwLmFkZChaMywgdDApO1xuICAgICAgICAgICAgdDAgPSBGcC5hZGQodDAsIHQyKTtcbiAgICAgICAgICAgIHQwID0gRnAubXVsKHQwLCB0Myk7XG4gICAgICAgICAgICBZMyA9IEZwLmFkZChZMywgdDApO1xuICAgICAgICAgICAgdDIgPSBGcC5tdWwoWTEsIFoxKTsgLy8gc3RlcCAyNVxuICAgICAgICAgICAgdDIgPSBGcC5hZGQodDIsIHQyKTtcbiAgICAgICAgICAgIHQwID0gRnAubXVsKHQyLCB0Myk7XG4gICAgICAgICAgICBYMyA9IEZwLnN1YihYMywgdDApO1xuICAgICAgICAgICAgWjMgPSBGcC5tdWwodDIsIHQxKTtcbiAgICAgICAgICAgIFozID0gRnAuYWRkKFozLCBaMyk7IC8vIHN0ZXAgMzBcbiAgICAgICAgICAgIFozID0gRnAuYWRkKFozLCBaMyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50KFgzLCBZMywgWjMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlbmVzLUNvc3RlbGxvLUJhdGluYSBleGNlcHRpb24tZnJlZSBhZGRpdGlvbiBmb3JtdWxhLlxuICAgICAgICAvLyBUaGVyZSBpcyAzMCUgZmFzdGVyIEphY29iaWFuIGZvcm11bGEsIGJ1dCBpdCBpcyBub3QgY29tcGxldGUuXG4gICAgICAgIC8vIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTUvMTA2MCwgYWxnb3JpdGhtIDFcbiAgICAgICAgLy8gQ29zdDogMTJNICsgMFMgKyAzKmEgKyAzKmIzICsgMjNhZGQuXG4gICAgICAgIGFkZChvdGhlcikge1xuICAgICAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDEsIHB5OiBZMSwgcHo6IFoxIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDIsIHB5OiBZMiwgcHo6IFoyIH0gPSBvdGhlcjtcbiAgICAgICAgICAgIGxldCBYMyA9IEZwLlpFUk8sIFkzID0gRnAuWkVSTywgWjMgPSBGcC5aRVJPOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGEgPSBDVVJWRS5hO1xuICAgICAgICAgICAgY29uc3QgYjMgPSBGcC5tdWwoQ1VSVkUuYiwgXzNuKTtcbiAgICAgICAgICAgIGxldCB0MCA9IEZwLm11bChYMSwgWDIpOyAvLyBzdGVwIDFcbiAgICAgICAgICAgIGxldCB0MSA9IEZwLm11bChZMSwgWTIpO1xuICAgICAgICAgICAgbGV0IHQyID0gRnAubXVsKFoxLCBaMik7XG4gICAgICAgICAgICBsZXQgdDMgPSBGcC5hZGQoWDEsIFkxKTtcbiAgICAgICAgICAgIGxldCB0NCA9IEZwLmFkZChYMiwgWTIpOyAvLyBzdGVwIDVcbiAgICAgICAgICAgIHQzID0gRnAubXVsKHQzLCB0NCk7XG4gICAgICAgICAgICB0NCA9IEZwLmFkZCh0MCwgdDEpO1xuICAgICAgICAgICAgdDMgPSBGcC5zdWIodDMsIHQ0KTtcbiAgICAgICAgICAgIHQ0ID0gRnAuYWRkKFgxLCBaMSk7XG4gICAgICAgICAgICBsZXQgdDUgPSBGcC5hZGQoWDIsIFoyKTsgLy8gc3RlcCAxMFxuICAgICAgICAgICAgdDQgPSBGcC5tdWwodDQsIHQ1KTtcbiAgICAgICAgICAgIHQ1ID0gRnAuYWRkKHQwLCB0Mik7XG4gICAgICAgICAgICB0NCA9IEZwLnN1Yih0NCwgdDUpO1xuICAgICAgICAgICAgdDUgPSBGcC5hZGQoWTEsIFoxKTtcbiAgICAgICAgICAgIFgzID0gRnAuYWRkKFkyLCBaMik7IC8vIHN0ZXAgMTVcbiAgICAgICAgICAgIHQ1ID0gRnAubXVsKHQ1LCBYMyk7XG4gICAgICAgICAgICBYMyA9IEZwLmFkZCh0MSwgdDIpO1xuICAgICAgICAgICAgdDUgPSBGcC5zdWIodDUsIFgzKTtcbiAgICAgICAgICAgIFozID0gRnAubXVsKGEsIHQ0KTtcbiAgICAgICAgICAgIFgzID0gRnAubXVsKGIzLCB0Mik7IC8vIHN0ZXAgMjBcbiAgICAgICAgICAgIFozID0gRnAuYWRkKFgzLCBaMyk7XG4gICAgICAgICAgICBYMyA9IEZwLnN1Yih0MSwgWjMpO1xuICAgICAgICAgICAgWjMgPSBGcC5hZGQodDEsIFozKTtcbiAgICAgICAgICAgIFkzID0gRnAubXVsKFgzLCBaMyk7XG4gICAgICAgICAgICB0MSA9IEZwLmFkZCh0MCwgdDApOyAvLyBzdGVwIDI1XG4gICAgICAgICAgICB0MSA9IEZwLmFkZCh0MSwgdDApO1xuICAgICAgICAgICAgdDIgPSBGcC5tdWwoYSwgdDIpO1xuICAgICAgICAgICAgdDQgPSBGcC5tdWwoYjMsIHQ0KTtcbiAgICAgICAgICAgIHQxID0gRnAuYWRkKHQxLCB0Mik7XG4gICAgICAgICAgICB0MiA9IEZwLnN1Yih0MCwgdDIpOyAvLyBzdGVwIDMwXG4gICAgICAgICAgICB0MiA9IEZwLm11bChhLCB0Mik7XG4gICAgICAgICAgICB0NCA9IEZwLmFkZCh0NCwgdDIpO1xuICAgICAgICAgICAgdDAgPSBGcC5tdWwodDEsIHQ0KTtcbiAgICAgICAgICAgIFkzID0gRnAuYWRkKFkzLCB0MCk7XG4gICAgICAgICAgICB0MCA9IEZwLm11bCh0NSwgdDQpOyAvLyBzdGVwIDM1XG4gICAgICAgICAgICBYMyA9IEZwLm11bCh0MywgWDMpO1xuICAgICAgICAgICAgWDMgPSBGcC5zdWIoWDMsIHQwKTtcbiAgICAgICAgICAgIHQwID0gRnAubXVsKHQzLCB0MSk7XG4gICAgICAgICAgICBaMyA9IEZwLm11bCh0NSwgWjMpO1xuICAgICAgICAgICAgWjMgPSBGcC5hZGQoWjMsIHQwKTsgLy8gc3RlcCA0MFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludChYMywgWTMsIFozKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJ0cmFjdChvdGhlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKG90aGVyLm5lZ2F0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpczAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHMoUG9pbnQuWkVSTyk7XG4gICAgICAgIH1cbiAgICAgICAgd05BRihuKSB7XG4gICAgICAgICAgICByZXR1cm4gd25hZi53TkFGQ2FjaGVkKHRoaXMsIHBvaW50UHJlY29tcHV0ZXMsIG4sIChjb21wKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9JbnYgPSBGcC5pbnZlcnRCYXRjaChjb21wLm1hcCgocCkgPT4gcC5weikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wLm1hcCgocCwgaSkgPT4gcC50b0FmZmluZSh0b0ludltpXSkpLm1hcChQb2ludC5mcm9tQWZmaW5lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOb24tY29uc3RhbnQtdGltZSBtdWx0aXBsaWNhdGlvbi4gVXNlcyBkb3VibGUtYW5kLWFkZCBhbGdvcml0aG0uXG4gICAgICAgICAqIEl0J3MgZmFzdGVyLCBidXQgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHlvdSBkb24ndCBjYXJlIGFib3V0XG4gICAgICAgICAqIGFuIGV4cG9zZWQgcHJpdmF0ZSBrZXkgZS5nLiBzaWcgdmVyaWZpY2F0aW9uLCB3aGljaCB3b3JrcyBvdmVyICpwdWJsaWMqIGtleXMuXG4gICAgICAgICAqL1xuICAgICAgICBtdWx0aXBseVVuc2FmZShuKSB7XG4gICAgICAgICAgICBjb25zdCBJID0gUG9pbnQuWkVSTztcbiAgICAgICAgICAgIGlmIChuID09PSBfMG4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIEk7XG4gICAgICAgICAgICBhc3NlcnRHRShuKTsgLy8gV2lsbCB0aHJvdyBvbiAwXG4gICAgICAgICAgICBpZiAobiA9PT0gXzFuKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgY29uc3QgeyBlbmRvIH0gPSBDVVJWRTtcbiAgICAgICAgICAgIGlmICghZW5kbylcbiAgICAgICAgICAgICAgICByZXR1cm4gd25hZi51bnNhZmVMYWRkZXIodGhpcywgbik7XG4gICAgICAgICAgICAvLyBBcHBseSBlbmRvbW9ycGhpc21cbiAgICAgICAgICAgIGxldCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pO1xuICAgICAgICAgICAgbGV0IGsxcCA9IEk7XG4gICAgICAgICAgICBsZXQgazJwID0gSTtcbiAgICAgICAgICAgIGxldCBkID0gdGhpcztcbiAgICAgICAgICAgIHdoaWxlIChrMSA+IF8wbiB8fCBrMiA+IF8wbikge1xuICAgICAgICAgICAgICAgIGlmIChrMSAmIF8xbilcbiAgICAgICAgICAgICAgICAgICAgazFwID0gazFwLmFkZChkKTtcbiAgICAgICAgICAgICAgICBpZiAoazIgJiBfMW4pXG4gICAgICAgICAgICAgICAgICAgIGsycCA9IGsycC5hZGQoZCk7XG4gICAgICAgICAgICAgICAgZCA9IGQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgazEgPj49IF8xbjtcbiAgICAgICAgICAgICAgICBrMiA+Pj0gXzFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGsxbmVnKVxuICAgICAgICAgICAgICAgIGsxcCA9IGsxcC5uZWdhdGUoKTtcbiAgICAgICAgICAgIGlmIChrMm5lZylcbiAgICAgICAgICAgICAgICBrMnAgPSBrMnAubmVnYXRlKCk7XG4gICAgICAgICAgICBrMnAgPSBuZXcgUG9pbnQoRnAubXVsKGsycC5weCwgZW5kby5iZXRhKSwgazJwLnB5LCBrMnAucHopO1xuICAgICAgICAgICAgcmV0dXJuIGsxcC5hZGQoazJwKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RhbnQgdGltZSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgICAgICogVXNlcyB3TkFGIG1ldGhvZC4gV2luZG93ZWQgbWV0aG9kIG1heSBiZSAxMCUgZmFzdGVyLFxuICAgICAgICAgKiBidXQgdGFrZXMgMnggbG9uZ2VyIHRvIGdlbmVyYXRlIGFuZCBjb25zdW1lcyAyeCBtZW1vcnkuXG4gICAgICAgICAqIFVzZXMgcHJlY29tcHV0ZXMgd2hlbiBhdmFpbGFibGUuXG4gICAgICAgICAqIFVzZXMgZW5kb21vcnBoaXNtIGZvciBLb2JsaXR6IGN1cnZlcy5cbiAgICAgICAgICogQHBhcmFtIHNjYWxhciBieSB3aGljaCB0aGUgcG9pbnQgd291bGQgYmUgbXVsdGlwbGllZFxuICAgICAgICAgKiBAcmV0dXJucyBOZXcgcG9pbnRcbiAgICAgICAgICovXG4gICAgICAgIG11bHRpcGx5KHNjYWxhcikge1xuICAgICAgICAgICAgYXNzZXJ0R0Uoc2NhbGFyKTtcbiAgICAgICAgICAgIGxldCBuID0gc2NhbGFyO1xuICAgICAgICAgICAgbGV0IHBvaW50LCBmYWtlOyAvLyBGYWtlIHBvaW50IGlzIHVzZWQgdG8gY29uc3QtdGltZSBtdWx0XG4gICAgICAgICAgICBjb25zdCB7IGVuZG8gfSA9IENVUlZFO1xuICAgICAgICAgICAgaWYgKGVuZG8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pO1xuICAgICAgICAgICAgICAgIGxldCB7IHA6IGsxcCwgZjogZjFwIH0gPSB0aGlzLndOQUYoazEpO1xuICAgICAgICAgICAgICAgIGxldCB7IHA6IGsycCwgZjogZjJwIH0gPSB0aGlzLndOQUYoazIpO1xuICAgICAgICAgICAgICAgIGsxcCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsxbmVnLCBrMXApO1xuICAgICAgICAgICAgICAgIGsycCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsybmVnLCBrMnApO1xuICAgICAgICAgICAgICAgIGsycCA9IG5ldyBQb2ludChGcC5tdWwoazJwLnB4LCBlbmRvLmJldGEpLCBrMnAucHksIGsycC5weik7XG4gICAgICAgICAgICAgICAgcG9pbnQgPSBrMXAuYWRkKGsycCk7XG4gICAgICAgICAgICAgICAgZmFrZSA9IGYxcC5hZGQoZjJwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcCwgZiB9ID0gdGhpcy53TkFGKG4pO1xuICAgICAgICAgICAgICAgIHBvaW50ID0gcDtcbiAgICAgICAgICAgICAgICBmYWtlID0gZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBgemAgZm9yIGJvdGggcG9pbnRzLCBidXQgcmV0dXJuIG9ubHkgcmVhbCBvbmVcbiAgICAgICAgICAgIHJldHVybiBQb2ludC5ub3JtYWxpemVaKFtwb2ludCwgZmFrZV0pWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFZmZpY2llbnRseSBjYWxjdWxhdGUgYGFQICsgYlFgLiBVbnNhZmUsIGNhbiBleHBvc2UgcHJpdmF0ZSBrZXksIGlmIHVzZWQgaW5jb3JyZWN0bHkuXG4gICAgICAgICAqIE5vdCB1c2luZyBTdHJhdXNzLVNoYW1pciB0cmljazogcHJlY29tcHV0YXRpb24gdGFibGVzIGFyZSBmYXN0ZXIuXG4gICAgICAgICAqIFRoZSB0cmljayBjb3VsZCBiZSB1c2VmdWwgaWYgYm90aCBQIGFuZCBRIGFyZSBub3QgRyAobm90IGluIG91ciBjYXNlKS5cbiAgICAgICAgICogQHJldHVybnMgbm9uLXplcm8gYWZmaW5lIHBvaW50XG4gICAgICAgICAqL1xuICAgICAgICBtdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKSB7XG4gICAgICAgICAgICBjb25zdCBHID0gUG9pbnQuQkFTRTsgLy8gTm8gU3RyYXVzcy1TaGFtaXIgdHJpY2s6IHdlIGhhdmUgMTAlIGZhc3RlciBHIHByZWNvbXB1dGVzXG4gICAgICAgICAgICBjb25zdCBtdWwgPSAoUCwgYSAvLyBTZWxlY3QgZmFzdGVyIG11bHRpcGx5KCkgbWV0aG9kXG4gICAgICAgICAgICApID0+IChhID09PSBfMG4gfHwgYSA9PT0gXzFuIHx8ICFQLmVxdWFscyhHKSA/IFAubXVsdGlwbHlVbnNhZmUoYSkgOiBQLm11bHRpcGx5KGEpKTtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IG11bCh0aGlzLCBhKS5hZGQobXVsKFEsIGIpKTtcbiAgICAgICAgICAgIHJldHVybiBzdW0uaXMwKCkgPyB1bmRlZmluZWQgOiBzdW07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29udmVydHMgUHJvamVjdGl2ZSBwb2ludCB0byBhZmZpbmUgKHgsIHkpIGNvb3JkaW5hdGVzLlxuICAgICAgICAvLyBDYW4gYWNjZXB0IHByZWNvbXB1dGVkIFpeLTEgLSBmb3IgZXhhbXBsZSwgZnJvbSBpbnZlcnRCYXRjaC5cbiAgICAgICAgLy8gKHgsIHksIHopIOKIiyAoeD14L3osIHk9eS96KVxuICAgICAgICB0b0FmZmluZShpeikge1xuICAgICAgICAgICAgY29uc3QgeyBweDogeCwgcHk6IHksIHB6OiB6IH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgaXMwID0gdGhpcy5pczAoKTtcbiAgICAgICAgICAgIC8vIElmIGludlogd2FzIDAsIHdlIHJldHVybiB6ZXJvIHBvaW50LiBIb3dldmVyIHdlIHN0aWxsIHdhbnQgdG8gZXhlY3V0ZVxuICAgICAgICAgICAgLy8gYWxsIG9wZXJhdGlvbnMsIHNvIHdlIHJlcGxhY2UgaW52WiB3aXRoIGEgcmFuZG9tIG51bWJlciwgMS5cbiAgICAgICAgICAgIGlmIChpeiA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGl6ID0gaXMwID8gRnAuT05FIDogRnAuaW52KHopO1xuICAgICAgICAgICAgY29uc3QgYXggPSBGcC5tdWwoeCwgaXopO1xuICAgICAgICAgICAgY29uc3QgYXkgPSBGcC5tdWwoeSwgaXopO1xuICAgICAgICAgICAgY29uc3QgenogPSBGcC5tdWwoeiwgaXopO1xuICAgICAgICAgICAgaWYgKGlzMClcbiAgICAgICAgICAgICAgICByZXR1cm4geyB4OiBGcC5aRVJPLCB5OiBGcC5aRVJPIH07XG4gICAgICAgICAgICBpZiAoIUZwLmVxbCh6eiwgRnAuT05FKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludlogd2FzIGludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiB7IHg6IGF4LCB5OiBheSB9O1xuICAgICAgICB9XG4gICAgICAgIGlzVG9yc2lvbkZyZWUoKSB7XG4gICAgICAgICAgICBjb25zdCB7IGg6IGNvZmFjdG9yLCBpc1RvcnNpb25GcmVlIH0gPSBDVVJWRTtcbiAgICAgICAgICAgIGlmIChjb2ZhY3RvciA9PT0gXzFuKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBObyBzdWJncm91cHMsIGFsd2F5cyB0b3JzaW9uLWZyZWVcbiAgICAgICAgICAgIGlmIChpc1RvcnNpb25GcmVlKVxuICAgICAgICAgICAgICAgIHJldHVybiBpc1RvcnNpb25GcmVlKFBvaW50LCB0aGlzKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaXNUb3JzaW9uRnJlZSgpIGhhcyBub3QgYmVlbiBkZWNsYXJlZCBmb3IgdGhlIGVsbGlwdGljIGN1cnZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJDb2ZhY3RvcigpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaDogY29mYWN0b3IsIGNsZWFyQ29mYWN0b3IgfSA9IENVUlZFO1xuICAgICAgICAgICAgaWYgKGNvZmFjdG9yID09PSBfMW4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7IC8vIEZhc3QtcGF0aFxuICAgICAgICAgICAgaWYgKGNsZWFyQ29mYWN0b3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFyQ29mYWN0b3IoUG9pbnQsIHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlVbnNhZmUoQ1VSVkUuaCk7XG4gICAgICAgIH1cbiAgICAgICAgdG9SYXdCeXRlcyhpc0NvbXByZXNzZWQgPSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICByZXR1cm4gdG9CeXRlcyhQb2ludCwgdGhpcywgaXNDb21wcmVzc2VkKTtcbiAgICAgICAgfVxuICAgICAgICB0b0hleChpc0NvbXByZXNzZWQgPSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdXQuYnl0ZXNUb0hleCh0aGlzLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUG9pbnQuQkFTRSA9IG5ldyBQb2ludChDVVJWRS5HeCwgQ1VSVkUuR3ksIEZwLk9ORSk7XG4gICAgUG9pbnQuWkVSTyA9IG5ldyBQb2ludChGcC5aRVJPLCBGcC5PTkUsIEZwLlpFUk8pO1xuICAgIGNvbnN0IF9iaXRzID0gQ1VSVkUubkJpdExlbmd0aDtcbiAgICBjb25zdCB3bmFmID0gd05BRihQb2ludCwgQ1VSVkUuZW5kbyA/IE1hdGguY2VpbChfYml0cyAvIDIpIDogX2JpdHMpO1xuICAgIC8vIFZhbGlkYXRlIGlmIGdlbmVyYXRvciBwb2ludCBpcyBvbiBjdXJ2ZVxuICAgIHJldHVybiB7XG4gICAgICAgIENVUlZFLFxuICAgICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50LFxuICAgICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLFxuICAgICAgICB3ZWllcnN0cmFzc0VxdWF0aW9uLFxuICAgICAgICBpc1dpdGhpbkN1cnZlT3JkZXIsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0cyhjdXJ2ZSkge1xuICAgIGNvbnN0IG9wdHMgPSB2YWxpZGF0ZUJhc2ljKGN1cnZlKTtcbiAgICB1dC52YWxpZGF0ZU9iamVjdChvcHRzLCB7XG4gICAgICAgIGhhc2g6ICdoYXNoJyxcbiAgICAgICAgaG1hYzogJ2Z1bmN0aW9uJyxcbiAgICAgICAgcmFuZG9tQnl0ZXM6ICdmdW5jdGlvbicsXG4gICAgfSwge1xuICAgICAgICBiaXRzMmludDogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYml0czJpbnRfbW9kTjogJ2Z1bmN0aW9uJyxcbiAgICAgICAgbG93UzogJ2Jvb2xlYW4nLFxuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgbG93UzogdHJ1ZSwgLi4ub3B0cyB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWllcnN0cmFzcyhjdXJ2ZURlZikge1xuICAgIGNvbnN0IENVUlZFID0gdmFsaWRhdGVPcHRzKGN1cnZlRGVmKTtcbiAgICBjb25zdCB7IEZwLCBuOiBDVVJWRV9PUkRFUiB9ID0gQ1VSVkU7XG4gICAgY29uc3QgY29tcHJlc3NlZExlbiA9IEZwLkJZVEVTICsgMTsgLy8gZS5nLiAzMyBmb3IgMzJcbiAgICBjb25zdCB1bmNvbXByZXNzZWRMZW4gPSAyICogRnAuQllURVMgKyAxOyAvLyBlLmcuIDY1IGZvciAzMlxuICAgIGZ1bmN0aW9uIGlzVmFsaWRGaWVsZEVsZW1lbnQobnVtKSB7XG4gICAgICAgIHJldHVybiBfMG4gPCBudW0gJiYgbnVtIDwgRnAuT1JERVI7IC8vIDAgaXMgYmFubmVkIHNpbmNlIGl0J3Mgbm90IGludmVydGlibGUgRkVcbiAgICB9XG4gICAgZnVuY3Rpb24gbW9kTihhKSB7XG4gICAgICAgIHJldHVybiBtb2QubW9kKGEsIENVUlZFX09SREVSKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW52TihhKSB7XG4gICAgICAgIHJldHVybiBtb2QuaW52ZXJ0KGEsIENVUlZFX09SREVSKTtcbiAgICB9XG4gICAgY29uc3QgeyBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50LCBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLCB3ZWllcnN0cmFzc0VxdWF0aW9uLCBpc1dpdGhpbkN1cnZlT3JkZXIsIH0gPSB3ZWllcnN0cmFzc1BvaW50cyh7XG4gICAgICAgIC4uLkNVUlZFLFxuICAgICAgICB0b0J5dGVzKF9jLCBwb2ludCwgaXNDb21wcmVzc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gcG9pbnQudG9BZmZpbmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBGcC50b0J5dGVzKGEueCk7XG4gICAgICAgICAgICBjb25zdCBjYXQgPSB1dC5jb25jYXRCeXRlcztcbiAgICAgICAgICAgIGlmIChpc0NvbXByZXNzZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbcG9pbnQuaGFzRXZlblkoKSA/IDB4MDIgOiAweDAzXSksIHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdChVaW50OEFycmF5LmZyb20oWzB4MDRdKSwgeCwgRnAudG9CeXRlcyhhLnkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnJvbUJ5dGVzKGJ5dGVzKSB7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBoZWFkID0gYnl0ZXNbMF07XG4gICAgICAgICAgICBjb25zdCB0YWlsID0gYnl0ZXMuc3ViYXJyYXkoMSk7XG4gICAgICAgICAgICAvLyB0aGlzLmFzc2VydFZhbGlkaXR5KCkgaXMgZG9uZSBpbnNpZGUgb2YgZnJvbUhleFxuICAgICAgICAgICAgaWYgKGxlbiA9PT0gY29tcHJlc3NlZExlbiAmJiAoaGVhZCA9PT0gMHgwMiB8fCBoZWFkID09PSAweDAzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSB1dC5ieXRlc1RvTnVtYmVyQkUodGFpbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRmllbGRFbGVtZW50KHgpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBvbiBjdXJ2ZScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkyID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsgLy8gecKyID0geMKzICsgYXggKyBiXG4gICAgICAgICAgICAgICAgbGV0IHk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgeSA9IEZwLnNxcnQoeTIpOyAvLyB5ID0gecKyIF4gKHArMSkvNFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoc3FydEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNxcnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gJzogJyArIHNxcnRFcnJvci5tZXNzYWdlIDogJyc7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IG9uIGN1cnZlJyArIHN1ZmZpeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzWU9kZCA9ICh5ICYgXzFuKSA9PT0gXzFuO1xuICAgICAgICAgICAgICAgIC8vIEVDRFNBXG4gICAgICAgICAgICAgICAgY29uc3QgaXNIZWFkT2RkID0gKGhlYWQgJiAxKSA9PT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaXNIZWFkT2RkICE9PSBpc1lPZGQpXG4gICAgICAgICAgICAgICAgICAgIHkgPSBGcC5uZWcoeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgeCwgeSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobGVuID09PSB1bmNvbXByZXNzZWRMZW4gJiYgaGVhZCA9PT0gMHgwNCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBGcC5mcm9tQnl0ZXModGFpbC5zdWJhcnJheSgwLCBGcC5CWVRFUykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBGcC5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcC5CWVRFUywgMiAqIEZwLkJZVEVTKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgeCwgeSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2ludCBvZiBsZW5ndGggJHtsZW59IHdhcyBpbnZhbGlkLiBFeHBlY3RlZCAke2NvbXByZXNzZWRMZW59IGNvbXByZXNzZWQgYnl0ZXMgb3IgJHt1bmNvbXByZXNzZWRMZW59IHVuY29tcHJlc3NlZCBieXRlc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IG51bVRvTkJ5dGVTdHIgPSAobnVtKSA9PiB1dC5ieXRlc1RvSGV4KHV0Lm51bWJlclRvQnl0ZXNCRShudW0sIENVUlZFLm5CeXRlTGVuZ3RoKSk7XG4gICAgZnVuY3Rpb24gaXNCaWdnZXJUaGFuSGFsZk9yZGVyKG51bWJlcikge1xuICAgICAgICBjb25zdCBIQUxGID0gQ1VSVkVfT1JERVIgPj4gXzFuO1xuICAgICAgICByZXR1cm4gbnVtYmVyID4gSEFMRjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplUyhzKSB7XG4gICAgICAgIHJldHVybiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIocykgPyBtb2ROKC1zKSA6IHM7XG4gICAgfVxuICAgIC8vIHNsaWNlIGJ5dGVzIG51bVxuICAgIGNvbnN0IHNsY051bSA9IChiLCBmcm9tLCB0bykgPT4gdXQuYnl0ZXNUb051bWJlckJFKGIuc2xpY2UoZnJvbSwgdG8pKTtcbiAgICAvKipcbiAgICAgKiBFQ0RTQSBzaWduYXR1cmUgd2l0aCBpdHMgKHIsIHMpIHByb3BlcnRpZXMuIFN1cHBvcnRzIERFUiAmIGNvbXBhY3QgcmVwcmVzZW50YXRpb25zLlxuICAgICAqL1xuICAgIGNsYXNzIFNpZ25hdHVyZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHIsIHMsIHJlY292ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnIgPSByO1xuICAgICAgICAgICAgdGhpcy5zID0gcztcbiAgICAgICAgICAgIHRoaXMucmVjb3ZlcnkgPSByZWNvdmVyeTtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYWlyIChieXRlcyBvZiByLCBieXRlcyBvZiBzKVxuICAgICAgICBzdGF0aWMgZnJvbUNvbXBhY3QoaGV4KSB7XG4gICAgICAgICAgICBjb25zdCBsID0gQ1VSVkUubkJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBoZXggPSBlbnN1cmVCeXRlcygnY29tcGFjdFNpZ25hdHVyZScsIGhleCwgbCAqIDIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoc2xjTnVtKGhleCwgMCwgbCksIHNsY051bShoZXgsIGwsIDIgKiBsKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gREVSIGVuY29kZWQgRUNEU0Egc2lnbmF0dXJlXG4gICAgICAgIC8vIGh0dHBzOi8vYml0Y29pbi5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvNTc2NDQvd2hhdC1hcmUtdGhlLXBhcnRzLW9mLWEtYml0Y29pbi10cmFuc2FjdGlvbi1pbnB1dC1zY3JpcHRcbiAgICAgICAgc3RhdGljIGZyb21ERVIoaGV4KSB7XG4gICAgICAgICAgICBjb25zdCB7IHIsIHMgfSA9IERFUi50b1NpZyhlbnN1cmVCeXRlcygnREVSJywgaGV4KSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShyLCBzKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRWYWxpZGl0eSgpIHtcbiAgICAgICAgICAgIC8vIGNhbiB1c2UgYXNzZXJ0R0UgaGVyZVxuICAgICAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIodGhpcy5yKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3IgbXVzdCBiZSAwIDwgciA8IENVUlZFLm4nKTtcbiAgICAgICAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKHRoaXMucykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzIG11c3QgYmUgMCA8IHMgPCBDVVJWRS5uJyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkUmVjb3ZlcnlCaXQocmVjb3ZlcnkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMuciwgdGhpcy5zLCByZWNvdmVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHIsIHMsIHJlY292ZXJ5OiByZWMgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBoID0gYml0czJpbnRfbW9kTihlbnN1cmVCeXRlcygnbXNnSGFzaCcsIG1zZ0hhc2gpKTsgLy8gVHJ1bmNhdGUgaGFzaFxuICAgICAgICAgICAgaWYgKHJlYyA9PSBudWxsIHx8ICFbMCwgMSwgMiwgM10uaW5jbHVkZXMocmVjKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlY292ZXJ5IGlkIGludmFsaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGogPSByZWMgPT09IDIgfHwgcmVjID09PSAzID8gciArIENVUlZFLm4gOiByO1xuICAgICAgICAgICAgaWYgKHJhZGogPj0gRnAuT1JERVIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWNvdmVyeSBpZCAyIG9yIDMgaW52YWxpZCcpO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gKHJlYyAmIDEpID09PSAwID8gJzAyJyA6ICcwMyc7XG4gICAgICAgICAgICBjb25zdCBSID0gUG9pbnQuZnJvbUhleChwcmVmaXggKyBudW1Ub05CeXRlU3RyKHJhZGopKTtcbiAgICAgICAgICAgIGNvbnN0IGlyID0gaW52TihyYWRqKTsgLy8gcl4tMVxuICAgICAgICAgICAgY29uc3QgdTEgPSBtb2ROKC1oICogaXIpOyAvLyAtaHJeLTFcbiAgICAgICAgICAgIGNvbnN0IHUyID0gbW9kTihzICogaXIpOyAvLyBzcl4tMVxuICAgICAgICAgICAgY29uc3QgUSA9IFBvaW50LkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUiwgdTEsIHUyKTsgLy8gKHNyXi0xKVItKGhyXi0xKUcgPSAtKGhyXi0xKUcgKyAoc3JeLTEpXG4gICAgICAgICAgICBpZiAoIVEpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2ludCBhdCBpbmZpbmlmeScpOyAvLyB1bnNhZmUgaXMgZmluZTogbm8gcHJpdiBkYXRhIGxlYWtlZFxuICAgICAgICAgICAgUS5hc3NlcnRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgcmV0dXJuIFE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2lnbmF0dXJlcyBzaG91bGQgYmUgbG93LXMsIHRvIHByZXZlbnQgbWFsbGVhYmlsaXR5LlxuICAgICAgICBoYXNIaWdoUygpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIodGhpcy5zKTtcbiAgICAgICAgfVxuICAgICAgICBub3JtYWxpemVTKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzSGlnaFMoKSA/IG5ldyBTaWduYXR1cmUodGhpcy5yLCBtb2ROKC10aGlzLnMpLCB0aGlzLnJlY292ZXJ5KSA6IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gREVSLWVuY29kZWRcbiAgICAgICAgdG9ERVJSYXdCeXRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiB1dC5oZXhUb0J5dGVzKHRoaXMudG9ERVJIZXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9ERVJIZXgoKSB7XG4gICAgICAgICAgICByZXR1cm4gREVSLmhleEZyb21TaWcoeyByOiB0aGlzLnIsIHM6IHRoaXMucyB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYWRkZWQgYnl0ZXMgb2YgciwgdGhlbiBwYWRkZWQgYnl0ZXMgb2Ygc1xuICAgICAgICB0b0NvbXBhY3RSYXdCeXRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiB1dC5oZXhUb0J5dGVzKHRoaXMudG9Db21wYWN0SGV4KCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvQ29tcGFjdEhleCgpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1Ub05CeXRlU3RyKHRoaXMucikgKyBudW1Ub05CeXRlU3RyKHRoaXMucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdXRpbHMgPSB7XG4gICAgICAgIGlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9ybVByaXZhdGVLZXlUb1NjYWxhcjogbm9ybVByaXZhdGVLZXlUb1NjYWxhcixcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2R1Y2VzIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSBwcml2YXRlIGtleSBmcm9tIHJhbmRvbSBvZiBzaXplXG4gICAgICAgICAqIChncm91cExlbiArIGNlaWwoZ3JvdXBMZW4gLyAyKSkgd2l0aCBtb2R1bG8gYmlhcyBiZWluZyBuZWdsaWdpYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gbW9kLmdldE1pbkhhc2hMZW5ndGgoQ1VSVkUubik7XG4gICAgICAgICAgICByZXR1cm4gbW9kLm1hcEhhc2hUb0ZpZWxkKENVUlZFLnJhbmRvbUJ5dGVzKGxlbmd0aCksIENVUlZFLm4pO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBwcmVjb21wdXRlIHRhYmxlIGZvciBhbiBhcmJpdHJhcnkgRUMgcG9pbnQuIE1ha2VzIHBvaW50IFwiY2FjaGVkXCIuXG4gICAgICAgICAqIEFsbG93cyB0byBtYXNzaXZlbHkgc3BlZWQtdXAgYHBvaW50Lm11bHRpcGx5KHNjYWxhcilgLlxuICAgICAgICAgKiBAcmV0dXJucyBjYWNoZWQgcG9pbnRcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogY29uc3QgZmFzdCA9IHV0aWxzLnByZWNvbXB1dGUoOCwgUHJvamVjdGl2ZVBvaW50LmZyb21IZXgoc29tZW9uZXNQdWJLZXkpKTtcbiAgICAgICAgICogZmFzdC5tdWx0aXBseShwcml2S2V5KTsgLy8gbXVjaCBmYXN0ZXIgRUNESCBub3dcbiAgICAgICAgICovXG4gICAgICAgIHByZWNvbXB1dGUod2luZG93U2l6ZSA9IDgsIHBvaW50ID0gUG9pbnQuQkFTRSkge1xuICAgICAgICAgICAgcG9pbnQuX3NldFdpbmRvd1NpemUod2luZG93U2l6ZSk7XG4gICAgICAgICAgICBwb2ludC5tdWx0aXBseShCaWdJbnQoMykpOyAvLyAzIGlzIGFyYml0cmFyeSwganVzdCBuZWVkIGFueSBudW1iZXIgaGVyZVxuICAgICAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgICAgICB9LFxuICAgIH07XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgcHVibGljIGtleSBmb3IgYSBwcml2YXRlIGtleS4gQ2hlY2tzIGZvciB2YWxpZGl0eSBvZiB0aGUgcHJpdmF0ZSBrZXkuXG4gICAgICogQHBhcmFtIHByaXZhdGVLZXkgcHJpdmF0ZSBrZXlcbiAgICAgKiBAcGFyYW0gaXNDb21wcmVzc2VkIHdoZXRoZXIgdG8gcmV0dXJuIGNvbXBhY3QgKGRlZmF1bHQpLCBvciBmdWxsIGtleVxuICAgICAqIEByZXR1cm5zIFB1YmxpYyBrZXksIGZ1bGwgd2hlbiBpc0NvbXByZXNzZWQ9ZmFsc2U7IHNob3J0IHdoZW4gaXNDb21wcmVzc2VkPXRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQdWJsaWNLZXkocHJpdmF0ZUtleSwgaXNDb21wcmVzc2VkID0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQuZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSkudG9SYXdCeXRlcyhpc0NvbXByZXNzZWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBRdWljayBhbmQgZGlydHkgY2hlY2sgZm9yIGl0ZW0gYmVpbmcgcHVibGljIGtleS4gRG9lcyBub3QgdmFsaWRhdGUgaGV4LCBvciBiZWluZyBvbi1jdXJ2ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1Byb2JQdWIoaXRlbSkge1xuICAgICAgICBjb25zdCBhcnIgPSB1dC5pc0J5dGVzKGl0ZW0pO1xuICAgICAgICBjb25zdCBzdHIgPSB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZyc7XG4gICAgICAgIGNvbnN0IGxlbiA9IChhcnIgfHwgc3RyKSAmJiBpdGVtLmxlbmd0aDtcbiAgICAgICAgaWYgKGFycilcbiAgICAgICAgICAgIHJldHVybiBsZW4gPT09IGNvbXByZXNzZWRMZW4gfHwgbGVuID09PSB1bmNvbXByZXNzZWRMZW47XG4gICAgICAgIGlmIChzdHIpXG4gICAgICAgICAgICByZXR1cm4gbGVuID09PSAyICogY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IDIgKiB1bmNvbXByZXNzZWRMZW47XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUG9pbnQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFQ0RIIChFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUgSGVsbG1hbikuXG4gICAgICogQ29tcHV0ZXMgc2hhcmVkIHB1YmxpYyBrZXkgZnJvbSBwcml2YXRlIGtleSBhbmQgcHVibGljIGtleS5cbiAgICAgKiBDaGVja3M6IDEpIHByaXZhdGUga2V5IHZhbGlkaXR5IDIpIHNoYXJlZCBrZXkgaXMgb24tY3VydmUuXG4gICAgICogRG9lcyBOT1QgaGFzaCB0aGUgcmVzdWx0LlxuICAgICAqIEBwYXJhbSBwcml2YXRlQSBwcml2YXRlIGtleVxuICAgICAqIEBwYXJhbSBwdWJsaWNCIGRpZmZlcmVudCBwdWJsaWMga2V5XG4gICAgICogQHBhcmFtIGlzQ29tcHJlc3NlZCB3aGV0aGVyIHRvIHJldHVybiBjb21wYWN0IChkZWZhdWx0KSwgb3IgZnVsbCBrZXlcbiAgICAgKiBAcmV0dXJucyBzaGFyZWQgcHVibGljIGtleVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFNoYXJlZFNlY3JldChwcml2YXRlQSwgcHVibGljQiwgaXNDb21wcmVzc2VkID0gdHJ1ZSkge1xuICAgICAgICBpZiAoaXNQcm9iUHViKHByaXZhdGVBKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3QgYXJnIG11c3QgYmUgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgaWYgKCFpc1Byb2JQdWIocHVibGljQikpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY29uZCBhcmcgbXVzdCBiZSBwdWJsaWMga2V5Jyk7XG4gICAgICAgIGNvbnN0IGIgPSBQb2ludC5mcm9tSGV4KHB1YmxpY0IpOyAvLyBjaGVjayBmb3IgYmVpbmcgb24tY3VydmVcbiAgICAgICAgcmV0dXJuIGIubXVsdGlwbHkobm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlQSkpLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKTtcbiAgICB9XG4gICAgLy8gUkZDNjk3OTogZW5zdXJlIEVDRFNBIG1zZyBpcyBYIGJ5dGVzIGFuZCA8IE4uIFJGQyBzdWdnZXN0cyBvcHRpb25hbCB0cnVuY2F0aW5nIHZpYSBiaXRzMm9jdGV0cy5cbiAgICAvLyBGSVBTIDE4Ni00IDQuNiBzdWdnZXN0cyB0aGUgbGVmdG1vc3QgbWluKG5CaXRMZW4sIG91dExlbikgYml0cywgd2hpY2ggbWF0Y2hlcyBiaXRzMmludC5cbiAgICAvLyBiaXRzMmludCBjYW4gcHJvZHVjZSByZXM+Tiwgd2UgY2FuIGRvIG1vZChyZXMsIE4pIHNpbmNlIHRoZSBiaXRMZW4gaXMgdGhlIHNhbWUuXG4gICAgLy8gaW50Mm9jdGV0cyBjYW4ndCBiZSB1c2VkOyBwYWRzIHNtYWxsIG1zZ3Mgd2l0aCAwOiB1bmFjY2VwdGF0YmxlIGZvciB0cnVuYyBhcyBwZXIgUkZDIHZlY3RvcnNcbiAgICBjb25zdCBiaXRzMmludCA9IENVUlZFLmJpdHMyaW50IHx8XG4gICAgICAgIGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICAgICAgLy8gRm9yIGN1cnZlcyB3aXRoIG5CaXRMZW5ndGggJSA4ICE9PSAwOiBiaXRzMm9jdGV0cyhiaXRzMm9jdGV0cyhtKSkgIT09IGJpdHMyb2N0ZXRzKG0pXG4gICAgICAgICAgICAvLyBmb3Igc29tZSBjYXNlcywgc2luY2UgYnl0ZXMubGVuZ3RoICogOCBpcyBub3QgYWN0dWFsIGJpdExlbmd0aC5cbiAgICAgICAgICAgIGNvbnN0IG51bSA9IHV0LmJ5dGVzVG9OdW1iZXJCRShieXRlcyk7IC8vIGNoZWNrIGZvciA9PSB1OCBkb25lIGhlcmVcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gYnl0ZXMubGVuZ3RoICogOCAtIENVUlZFLm5CaXRMZW5ndGg7IC8vIHRydW5jYXRlIHRvIG5CaXRMZW5ndGggbGVmdG1vc3QgYml0c1xuICAgICAgICAgICAgcmV0dXJuIGRlbHRhID4gMCA/IG51bSA+PiBCaWdJbnQoZGVsdGEpIDogbnVtO1xuICAgICAgICB9O1xuICAgIGNvbnN0IGJpdHMyaW50X21vZE4gPSBDVVJWRS5iaXRzMmludF9tb2ROIHx8XG4gICAgICAgIGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG1vZE4oYml0czJpbnQoYnl0ZXMpKTsgLy8gY2FuJ3QgdXNlIGJ5dGVzVG9OdW1iZXJCRSBoZXJlXG4gICAgICAgIH07XG4gICAgLy8gTk9URTogcGFkcyBvdXRwdXQgd2l0aCB6ZXJvIGFzIHBlciBzcGVjXG4gICAgY29uc3QgT1JERVJfTUFTSyA9IHV0LmJpdE1hc2soQ1VSVkUubkJpdExlbmd0aCk7XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdG8gYnl0ZXMuIENoZWNrcyBpZiBudW0gaW4gYFswLi5PUkRFUl9NQVNLLTFdYCBlLmcuOiBgWzAuLjJeMjU2LTFdYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnQyb2N0ZXRzKG51bSkge1xuICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ2JpZ2ludCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpZ2ludCBleHBlY3RlZCcpO1xuICAgICAgICBpZiAoIShfMG4gPD0gbnVtICYmIG51bSA8IE9SREVSX01BU0spKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaWdpbnQgZXhwZWN0ZWQgPCAyXiR7Q1VSVkUubkJpdExlbmd0aH1gKTtcbiAgICAgICAgLy8gd29ya3Mgd2l0aCBvcmRlciwgY2FuIGhhdmUgZGlmZmVyZW50IHNpemUgdGhhbiBudW1Ub0ZpZWxkIVxuICAgICAgICByZXR1cm4gdXQubnVtYmVyVG9CeXRlc0JFKG51bSwgQ1VSVkUubkJ5dGVMZW5ndGgpO1xuICAgIH1cbiAgICAvLyBTdGVwcyBBLCBEIG9mIFJGQzY5NzkgMy4yXG4gICAgLy8gQ3JlYXRlcyBSRkM2OTc5IHNlZWQ7IGNvbnZlcnRzIG1zZy9wcml2S2V5IHRvIG51bWJlcnMuXG4gICAgLy8gVXNlZCBvbmx5IGluIHNpZ24sIG5vdCBpbiB2ZXJpZnkuXG4gICAgLy8gTk9URTogd2UgY2Fubm90IGFzc3VtZSBoZXJlIHRoYXQgbXNnSGFzaCBoYXMgc2FtZSBhbW91bnQgb2YgYnl0ZXMgYXMgY3VydmUgb3JkZXIsIHRoaXMgd2lsbCBiZSB3cm9uZyBhdCBsZWFzdCBmb3IgUDUyMS5cbiAgICAvLyBBbHNvIGl0IGNhbiBiZSBiaWdnZXIgZm9yIFAyMjQgKyBTSEEyNTZcbiAgICBmdW5jdGlvbiBwcmVwU2lnKG1zZ0hhc2gsIHByaXZhdGVLZXksIG9wdHMgPSBkZWZhdWx0U2lnT3B0cykge1xuICAgICAgICBpZiAoWydyZWNvdmVyZWQnLCAnY2Fub25pY2FsJ10uc29tZSgoaykgPT4gayBpbiBvcHRzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbigpIGxlZ2FjeSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgY29uc3QgeyBoYXNoLCByYW5kb21CeXRlcyB9ID0gQ1VSVkU7XG4gICAgICAgIGxldCB7IGxvd1MsIHByZWhhc2gsIGV4dHJhRW50cm9weTogZW50IH0gPSBvcHRzOyAvLyBnZW5lcmF0ZXMgbG93LXMgc2lncyBieSBkZWZhdWx0XG4gICAgICAgIGlmIChsb3dTID09IG51bGwpXG4gICAgICAgICAgICBsb3dTID0gdHJ1ZTsgLy8gUkZDNjk3OSAzLjI6IHdlIHNraXAgc3RlcCBBLCBiZWNhdXNlIHdlIGFscmVhZHkgcHJvdmlkZSBoYXNoXG4gICAgICAgIG1zZ0hhc2ggPSBlbnN1cmVCeXRlcygnbXNnSGFzaCcsIG1zZ0hhc2gpO1xuICAgICAgICBpZiAocHJlaGFzaClcbiAgICAgICAgICAgIG1zZ0hhc2ggPSBlbnN1cmVCeXRlcygncHJlaGFzaGVkIG1zZ0hhc2gnLCBoYXNoKG1zZ0hhc2gpKTtcbiAgICAgICAgLy8gV2UgY2FuJ3QgbGF0ZXIgY2FsbCBiaXRzMm9jdGV0cywgc2luY2UgbmVzdGVkIGJpdHMyaW50IGlzIGJyb2tlbiBmb3IgY3VydmVzXG4gICAgICAgIC8vIHdpdGggbkJpdExlbmd0aCAlIDggIT09IDAuIEJlY2F1c2Ugb2YgdGhhdCwgd2UgdW53cmFwIGl0IGhlcmUgYXMgaW50Mm9jdGV0cyBjYWxsLlxuICAgICAgICAvLyBjb25zdCBiaXRzMm9jdGV0cyA9IChiaXRzKSA9PiBpbnQyb2N0ZXRzKGJpdHMyaW50X21vZE4oYml0cykpXG4gICAgICAgIGNvbnN0IGgxaW50ID0gYml0czJpbnRfbW9kTihtc2dIYXNoKTtcbiAgICAgICAgY29uc3QgZCA9IG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIocHJpdmF0ZUtleSk7IC8vIHZhbGlkYXRlIHByaXZhdGUga2V5LCBjb252ZXJ0IHRvIGJpZ2ludFxuICAgICAgICBjb25zdCBzZWVkQXJncyA9IFtpbnQyb2N0ZXRzKGQpLCBpbnQyb2N0ZXRzKGgxaW50KV07XG4gICAgICAgIC8vIGV4dHJhRW50cm9weS4gUkZDNjk3OSAzLjY6IGFkZGl0aW9uYWwgaycgKG9wdGlvbmFsKS5cbiAgICAgICAgaWYgKGVudCAhPSBudWxsICYmIGVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIEsgPSBITUFDX0soViB8fCAweDAwIHx8IGludDJvY3RldHMoeCkgfHwgYml0czJvY3RldHMoaDEpIHx8IGsnKVxuICAgICAgICAgICAgY29uc3QgZSA9IGVudCA9PT0gdHJ1ZSA/IHJhbmRvbUJ5dGVzKEZwLkJZVEVTKSA6IGVudDsgLy8gZ2VuZXJhdGUgcmFuZG9tIGJ5dGVzIE9SIHBhc3MgYXMtaXNcbiAgICAgICAgICAgIHNlZWRBcmdzLnB1c2goZW5zdXJlQnl0ZXMoJ2V4dHJhRW50cm9weScsIGUpKTsgLy8gY2hlY2sgZm9yIGJlaW5nIGJ5dGVzXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlZCA9IHV0LmNvbmNhdEJ5dGVzKC4uLnNlZWRBcmdzKTsgLy8gU3RlcCBEIG9mIFJGQzY5NzkgMy4yXG4gICAgICAgIGNvbnN0IG0gPSBoMWludDsgLy8gTk9URTogbm8gbmVlZCB0byBjYWxsIGJpdHMyaW50IHNlY29uZCB0aW1lIGhlcmUsIGl0IGlzIGluc2lkZSB0cnVuY2F0ZUhhc2ghXG4gICAgICAgIC8vIENvbnZlcnRzIHNpZ25hdHVyZSBwYXJhbXMgaW50byBwb2ludCB3IHIvcywgY2hlY2tzIHJlc3VsdCBmb3IgdmFsaWRpdHkuXG4gICAgICAgIGZ1bmN0aW9uIGsyc2lnKGtCeXRlcykge1xuICAgICAgICAgICAgLy8gUkZDIDY5NzkgU2VjdGlvbiAzLjIsIHN0ZXAgMzogayA9IGJpdHMyaW50KFQpXG4gICAgICAgICAgICBjb25zdCBrID0gYml0czJpbnQoa0J5dGVzKTsgLy8gQ2Fubm90IHVzZSBmaWVsZHMgbWV0aG9kcywgc2luY2UgaXQgaXMgZ3JvdXAgZWxlbWVudFxuICAgICAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIoaykpXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBJbXBvcnRhbnQ6IGFsbCBtb2QoKSBjYWxscyBoZXJlIG11c3QgYmUgZG9uZSBvdmVyIE5cbiAgICAgICAgICAgIGNvbnN0IGlrID0gaW52TihrKTsgLy8ga14tMSBtb2QgblxuICAgICAgICAgICAgY29uc3QgcSA9IFBvaW50LkJBU0UubXVsdGlwbHkoaykudG9BZmZpbmUoKTsgLy8gcSA9IEdrXG4gICAgICAgICAgICBjb25zdCByID0gbW9kTihxLngpOyAvLyByID0gcS54IG1vZCBuXG4gICAgICAgICAgICBpZiAociA9PT0gXzBuKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8vIENhbiB1c2Ugc2NhbGFyIGJsaW5kaW5nIGJeLTEoYm0gKyBiZHIpIHdoZXJlIGIg4oiIIFsxLHHiiJIxXSBhY2NvcmRpbmcgdG9cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vdGNoZXMuaWFjci5vcmcvaW5kZXgucGhwL1RDSEVTL2FydGljbGUvdmlldy83MzM3LzY1MDkuIFdlJ3ZlIGRlY2lkZWQgYWdhaW5zdCBpdDpcbiAgICAgICAgICAgIC8vIGEpIGRlcGVuZGVuY3kgb24gQ1NQUk5HIGIpIDE1JSBzbG93ZG93biBjKSBkb2Vzbid0IHJlYWxseSBoZWxwIHNpbmNlIGJpZ2ludHMgYXJlIG5vdCBDVFxuICAgICAgICAgICAgY29uc3QgcyA9IG1vZE4oaWsgKiBtb2ROKG0gKyByICogZCkpOyAvLyBOb3QgdXNpbmcgYmxpbmRpbmcgaGVyZVxuICAgICAgICAgICAgaWYgKHMgPT09IF8wbilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBsZXQgcmVjb3ZlcnkgPSAocS54ID09PSByID8gMCA6IDIpIHwgTnVtYmVyKHEueSAmIF8xbik7IC8vIHJlY292ZXJ5IGJpdCAoMiBvciAzLCB3aGVuIHEueCA+IG4pXG4gICAgICAgICAgICBsZXQgbm9ybVMgPSBzO1xuICAgICAgICAgICAgaWYgKGxvd1MgJiYgaXNCaWdnZXJUaGFuSGFsZk9yZGVyKHMpKSB7XG4gICAgICAgICAgICAgICAgbm9ybVMgPSBub3JtYWxpemVTKHMpOyAvLyBpZiBsb3dTIHdhcyBwYXNzZWQsIGVuc3VyZSBzIGlzIGFsd2F5c1xuICAgICAgICAgICAgICAgIHJlY292ZXJ5IF49IDE7IC8vIC8vIGluIHRoZSBib3R0b20gaGFsZiBvZiBOXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShyLCBub3JtUywgcmVjb3ZlcnkpOyAvLyB1c2Ugbm9ybVMsIG5vdCBzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc2VlZCwgazJzaWcgfTtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFNpZ09wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07XG4gICAgY29uc3QgZGVmYXVsdFZlck9wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07XG4gICAgLyoqXG4gICAgICogU2lnbnMgbWVzc2FnZSBoYXNoIHdpdGggYSBwcml2YXRlIGtleS5cbiAgICAgKiBgYGBcbiAgICAgKiBzaWduKG0sIGQsIGspIHdoZXJlXG4gICAgICogICAoeCwgeSkgPSBHIMOXIGtcbiAgICAgKiAgIHIgPSB4IG1vZCBuXG4gICAgICogICBzID0gKG0gKyBkcikvayBtb2QgblxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBtc2dIYXNoIE5PVCBtZXNzYWdlLiBtc2cgbmVlZHMgdG8gYmUgaGFzaGVkIHRvIGBtc2dIYXNoYCwgb3IgdXNlIGBwcmVoYXNoYC5cbiAgICAgKiBAcGFyYW0gcHJpdktleSBwcml2YXRlIGtleVxuICAgICAqIEBwYXJhbSBvcHRzIGxvd1MgZm9yIG5vbi1tYWxsZWFibGUgc2lncy4gZXh0cmFFbnRyb3B5IGZvciBtaXhpbmcgcmFuZG9tbmVzcyBpbnRvIGsuIHByZWhhc2ggd2lsbCBoYXNoIGZpcnN0IGFyZy5cbiAgICAgKiBAcmV0dXJucyBzaWduYXR1cmUgd2l0aCByZWNvdmVyeSBwYXJhbVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNpZ24obXNnSGFzaCwgcHJpdktleSwgb3B0cyA9IGRlZmF1bHRTaWdPcHRzKSB7XG4gICAgICAgIGNvbnN0IHsgc2VlZCwgazJzaWcgfSA9IHByZXBTaWcobXNnSGFzaCwgcHJpdktleSwgb3B0cyk7IC8vIFN0ZXBzIEEsIEQgb2YgUkZDNjk3OSAzLjIuXG4gICAgICAgIGNvbnN0IEMgPSBDVVJWRTtcbiAgICAgICAgY29uc3QgZHJiZyA9IHV0LmNyZWF0ZUhtYWNEcmJnKEMuaGFzaC5vdXRwdXRMZW4sIEMubkJ5dGVMZW5ndGgsIEMuaG1hYyk7XG4gICAgICAgIHJldHVybiBkcmJnKHNlZWQsIGsyc2lnKTsgLy8gU3RlcHMgQiwgQywgRCwgRSwgRiwgR1xuICAgIH1cbiAgICAvLyBFbmFibGUgcHJlY29tcHV0ZXMuIFNsb3dzIGRvd24gZmlyc3QgcHVibGljS2V5IGNvbXB1dGF0aW9uIGJ5IDIwbXMuXG4gICAgUG9pbnQuQkFTRS5fc2V0V2luZG93U2l6ZSg4KTtcbiAgICAvLyB1dGlscy5wcmVjb21wdXRlKDgsIFByb2plY3RpdmVQb2ludC5CQVNFKVxuICAgIC8qKlxuICAgICAqIFZlcmlmaWVzIGEgc2lnbmF0dXJlIGFnYWluc3QgbWVzc2FnZSBoYXNoIGFuZCBwdWJsaWMga2V5LlxuICAgICAqIFJlamVjdHMgbG93UyBzaWduYXR1cmVzIGJ5IGRlZmF1bHQ6IHRvIG92ZXJyaWRlLFxuICAgICAqIHNwZWNpZnkgb3B0aW9uIGB7bG93UzogZmFsc2V9YC4gSW1wbGVtZW50cyBzZWN0aW9uIDQuMS40IGZyb20gaHR0cHM6Ly93d3cuc2VjZy5vcmcvc2VjMS12Mi5wZGY6XG4gICAgICpcbiAgICAgKiBgYGBcbiAgICAgKiB2ZXJpZnkociwgcywgaCwgUCkgd2hlcmVcbiAgICAgKiAgIFUxID0gaHNeLTEgbW9kIG5cbiAgICAgKiAgIFUyID0gcnNeLTEgbW9kIG5cbiAgICAgKiAgIFIgPSBVMeKLhUcgLSBVMuKLhVBcbiAgICAgKiAgIG1vZChSLngsIG4pID09IHJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2ZXJpZnkoc2lnbmF0dXJlLCBtc2dIYXNoLCBwdWJsaWNLZXksIG9wdHMgPSBkZWZhdWx0VmVyT3B0cykge1xuICAgICAgICBjb25zdCBzZyA9IHNpZ25hdHVyZTtcbiAgICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCdtc2dIYXNoJywgbXNnSGFzaCk7XG4gICAgICAgIHB1YmxpY0tleSA9IGVuc3VyZUJ5dGVzKCdwdWJsaWNLZXknLCBwdWJsaWNLZXkpO1xuICAgICAgICBpZiAoJ3N0cmljdCcgaW4gb3B0cylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5zdHJpY3Qgd2FzIHJlbmFtZWQgdG8gbG93UycpO1xuICAgICAgICBjb25zdCB7IGxvd1MsIHByZWhhc2ggfSA9IG9wdHM7XG4gICAgICAgIGxldCBfc2lnID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgUDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2cgPT09ICdzdHJpbmcnIHx8IHV0LmlzQnl0ZXMoc2cpKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lnbmF0dXJlIGNhbiBiZSByZXByZXNlbnRlZCBpbiAyIHdheXM6IGNvbXBhY3QgKDIqbkJ5dGVMZW5ndGgpICYgREVSICh2YXJpYWJsZS1sZW5ndGgpLlxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIERFUiBjYW4gYWxzbyBiZSAyKm5CeXRlTGVuZ3RoIGJ5dGVzLCB3ZSBjaGVjayBmb3IgaXQgZmlyc3QuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tREVSKHNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGRlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRlckVycm9yIGluc3RhbmNlb2YgREVSLkVycikpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tQ29tcGFjdChzZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNnID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygc2cuciA9PT0gJ2JpZ2ludCcgJiYgdHlwZW9mIHNnLnMgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyByLCBzIH0gPSBzZztcbiAgICAgICAgICAgICAgICBfc2lnID0gbmV3IFNpZ25hdHVyZShyLCBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUEFSU0UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFAgPSBQb2ludC5mcm9tSGV4KHB1YmxpY0tleSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSA9PT0gJ1BBUlNFJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZSBtdXN0IGJlIFNpZ25hdHVyZSBpbnN0YW5jZSwgVWludDhBcnJheSBvciBoZXggc3RyaW5nYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd1MgJiYgX3NpZy5oYXNIaWdoUygpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocHJlaGFzaClcbiAgICAgICAgICAgIG1zZ0hhc2ggPSBDVVJWRS5oYXNoKG1zZ0hhc2gpO1xuICAgICAgICBjb25zdCB7IHIsIHMgfSA9IF9zaWc7XG4gICAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOyAvLyBDYW5ub3QgdXNlIGZpZWxkcyBtZXRob2RzLCBzaW5jZSBpdCBpcyBncm91cCBlbGVtZW50XG4gICAgICAgIGNvbnN0IGlzID0gaW52TihzKTsgLy8gc14tMVxuICAgICAgICBjb25zdCB1MSA9IG1vZE4oaCAqIGlzKTsgLy8gdTEgPSBoc14tMSBtb2QgblxuICAgICAgICBjb25zdCB1MiA9IG1vZE4ociAqIGlzKTsgLy8gdTIgPSByc14tMSBtb2QgblxuICAgICAgICBjb25zdCBSID0gUG9pbnQuQkFTRS5tdWx0aXBseUFuZEFkZFVuc2FmZShQLCB1MSwgdTIpPy50b0FmZmluZSgpOyAvLyBSID0gdTHii4VHICsgdTLii4VQXG4gICAgICAgIGlmICghUilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgdiA9IG1vZE4oUi54KTtcbiAgICAgICAgcmV0dXJuIHYgPT09IHI7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIENVUlZFLFxuICAgICAgICBnZXRQdWJsaWNLZXksXG4gICAgICAgIGdldFNoYXJlZFNlY3JldCxcbiAgICAgICAgc2lnbixcbiAgICAgICAgdmVyaWZ5LFxuICAgICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50LFxuICAgICAgICBTaWduYXR1cmUsXG4gICAgICAgIHV0aWxzLFxuICAgIH07XG59XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGFsbHVlIGFuZCB2YW4gZGUgV29lc3Rpam5lIG1ldGhvZCBmb3IgYW55IHdlaWVyc3RyYXNzIGN1cnZlLlxuICogVE9ETzogY2hlY2sgaWYgdGhlcmUgaXMgYSB3YXkgdG8gbWVyZ2UgdGhpcyB3aXRoIHV2UmF0aW8gaW4gRWR3YXJkczsgbW92ZSB0byBtb2R1bGFyLlxuICogYiA9IFRydWUgYW5kIHkgPSBzcXJ0KHUgLyB2KSBpZiAodSAvIHYpIGlzIHNxdWFyZSBpbiBGLCBhbmRcbiAqIGIgPSBGYWxzZSBhbmQgeSA9IHNxcnQoWiAqICh1IC8gdikpIG90aGVyd2lzZS5cbiAqIEBwYXJhbSBGcFxuICogQHBhcmFtIFpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTV1VGcFNxcnRSYXRpbyhGcCwgWikge1xuICAgIC8vIEdlbmVyaWMgaW1wbGVtZW50YXRpb25cbiAgICBjb25zdCBxID0gRnAuT1JERVI7XG4gICAgbGV0IGwgPSBfMG47XG4gICAgZm9yIChsZXQgbyA9IHEgLSBfMW47IG8gJSBfMm4gPT09IF8wbjsgbyAvPSBfMm4pXG4gICAgICAgIGwgKz0gXzFuO1xuICAgIGNvbnN0IGMxID0gbDsgLy8gMS4gYzEsIHRoZSBsYXJnZXN0IGludGVnZXIgc3VjaCB0aGF0IDJeYzEgZGl2aWRlcyBxIC0gMS5cbiAgICAvLyBXZSBuZWVkIDJuICoqIGMxIGFuZCAybiAqKiAoYzEtMSkuIFdlIGNhbid0IHVzZSAqKjsgYnV0IHdlIGNhbiB1c2UgPDwuXG4gICAgLy8gMm4gKiogYzEgPT0gMm4gPDwgKGMxLTEpXG4gICAgY29uc3QgXzJuX3Bvd19jMV8xID0gXzJuIDw8IChjMSAtIF8xbiAtIF8xbik7XG4gICAgY29uc3QgXzJuX3Bvd19jMSA9IF8ybl9wb3dfYzFfMSAqIF8ybjtcbiAgICBjb25zdCBjMiA9IChxIC0gXzFuKSAvIF8ybl9wb3dfYzE7IC8vIDIuIGMyID0gKHEgLSAxKSAvICgyXmMxKSAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICBjb25zdCBjMyA9IChjMiAtIF8xbikgLyBfMm47IC8vIDMuIGMzID0gKGMyIC0gMSkgLyAyICAgICAgICAgICAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICBjb25zdCBjNCA9IF8ybl9wb3dfYzEgLSBfMW47IC8vIDQuIGM0ID0gMl5jMSAtIDEgICAgICAgICAgICAgICAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICBjb25zdCBjNSA9IF8ybl9wb3dfYzFfMTsgLy8gNS4gYzUgPSAyXihjMSAtIDEpICAgICAgICAgICAgICAgICAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICBjb25zdCBjNiA9IEZwLnBvdyhaLCBjMik7IC8vIDYuIGM2ID0gWl5jMlxuICAgIGNvbnN0IGM3ID0gRnAucG93KFosIChjMiArIF8xbikgLyBfMm4pOyAvLyA3LiBjNyA9IFpeKChjMiArIDEpIC8gMilcbiAgICBsZXQgc3FydFJhdGlvID0gKHUsIHYpID0+IHtcbiAgICAgICAgbGV0IHR2MSA9IGM2OyAvLyAxLiB0djEgPSBjNlxuICAgICAgICBsZXQgdHYyID0gRnAucG93KHYsIGM0KTsgLy8gMi4gdHYyID0gdl5jNFxuICAgICAgICBsZXQgdHYzID0gRnAuc3FyKHR2Mik7IC8vIDMuIHR2MyA9IHR2Ml4yXG4gICAgICAgIHR2MyA9IEZwLm11bCh0djMsIHYpOyAvLyA0LiB0djMgPSB0djMgKiB2XG4gICAgICAgIGxldCB0djUgPSBGcC5tdWwodSwgdHYzKTsgLy8gNS4gdHY1ID0gdSAqIHR2M1xuICAgICAgICB0djUgPSBGcC5wb3codHY1LCBjMyk7IC8vIDYuIHR2NSA9IHR2NV5jM1xuICAgICAgICB0djUgPSBGcC5tdWwodHY1LCB0djIpOyAvLyA3LiB0djUgPSB0djUgKiB0djJcbiAgICAgICAgdHYyID0gRnAubXVsKHR2NSwgdik7IC8vIDguIHR2MiA9IHR2NSAqIHZcbiAgICAgICAgdHYzID0gRnAubXVsKHR2NSwgdSk7IC8vIDkuIHR2MyA9IHR2NSAqIHVcbiAgICAgICAgbGV0IHR2NCA9IEZwLm11bCh0djMsIHR2Mik7IC8vIDEwLiB0djQgPSB0djMgKiB0djJcbiAgICAgICAgdHY1ID0gRnAucG93KHR2NCwgYzUpOyAvLyAxMS4gdHY1ID0gdHY0XmM1XG4gICAgICAgIGxldCBpc1FSID0gRnAuZXFsKHR2NSwgRnAuT05FKTsgLy8gMTIuIGlzUVIgPSB0djUgPT0gMVxuICAgICAgICB0djIgPSBGcC5tdWwodHYzLCBjNyk7IC8vIDEzLiB0djIgPSB0djMgKiBjN1xuICAgICAgICB0djUgPSBGcC5tdWwodHY0LCB0djEpOyAvLyAxNC4gdHY1ID0gdHY0ICogdHYxXG4gICAgICAgIHR2MyA9IEZwLmNtb3YodHYyLCB0djMsIGlzUVIpOyAvLyAxNS4gdHYzID0gQ01PVih0djIsIHR2MywgaXNRUilcbiAgICAgICAgdHY0ID0gRnAuY21vdih0djUsIHR2NCwgaXNRUik7IC8vIDE2LiB0djQgPSBDTU9WKHR2NSwgdHY0LCBpc1FSKVxuICAgICAgICAvLyAxNy4gZm9yIGkgaW4gKGMxLCBjMSAtIDEsIC4uLiwgMik6XG4gICAgICAgIGZvciAobGV0IGkgPSBjMTsgaSA+IF8xbjsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgdHY1ID0gaSAtIF8ybjsgLy8gMTguICAgIHR2NSA9IGkgLSAyXG4gICAgICAgICAgICB0djUgPSBfMm4gPDwgKHR2NSAtIF8xbik7IC8vIDE5LiAgICB0djUgPSAyXnR2NVxuICAgICAgICAgICAgbGV0IHR2djUgPSBGcC5wb3codHY0LCB0djUpOyAvLyAyMC4gICAgdHY1ID0gdHY0XnR2NVxuICAgICAgICAgICAgY29uc3QgZTEgPSBGcC5lcWwodHZ2NSwgRnAuT05FKTsgLy8gMjEuICAgIGUxID0gdHY1ID09IDFcbiAgICAgICAgICAgIHR2MiA9IEZwLm11bCh0djMsIHR2MSk7IC8vIDIyLiAgICB0djIgPSB0djMgKiB0djFcbiAgICAgICAgICAgIHR2MSA9IEZwLm11bCh0djEsIHR2MSk7IC8vIDIzLiAgICB0djEgPSB0djEgKiB0djFcbiAgICAgICAgICAgIHR2djUgPSBGcC5tdWwodHY0LCB0djEpOyAvLyAyNC4gICAgdHY1ID0gdHY0ICogdHYxXG4gICAgICAgICAgICB0djMgPSBGcC5jbW92KHR2MiwgdHYzLCBlMSk7IC8vIDI1LiAgICB0djMgPSBDTU9WKHR2MiwgdHYzLCBlMSlcbiAgICAgICAgICAgIHR2NCA9IEZwLmNtb3YodHZ2NSwgdHY0LCBlMSk7IC8vIDI2LiAgICB0djQgPSBDTU9WKHR2NSwgdHY0LCBlMSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBpc1FSLCB2YWx1ZTogdHYzIH07XG4gICAgfTtcbiAgICBpZiAoRnAuT1JERVIgJSBfNG4gPT09IF8zbikge1xuICAgICAgICAvLyBzcXJ0X3JhdGlvXzNtb2Q0KHUsIHYpXG4gICAgICAgIGNvbnN0IGMxID0gKEZwLk9SREVSIC0gXzNuKSAvIF80bjsgLy8gMS4gYzEgPSAocSAtIDMpIC8gNCAgICAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICAgICAgY29uc3QgYzIgPSBGcC5zcXJ0KEZwLm5lZyhaKSk7IC8vIDIuIGMyID0gc3FydCgtWilcbiAgICAgICAgc3FydFJhdGlvID0gKHUsIHYpID0+IHtcbiAgICAgICAgICAgIGxldCB0djEgPSBGcC5zcXIodik7IC8vIDEuIHR2MSA9IHZeMlxuICAgICAgICAgICAgY29uc3QgdHYyID0gRnAubXVsKHUsIHYpOyAvLyAyLiB0djIgPSB1ICogdlxuICAgICAgICAgICAgdHYxID0gRnAubXVsKHR2MSwgdHYyKTsgLy8gMy4gdHYxID0gdHYxICogdHYyXG4gICAgICAgICAgICBsZXQgeTEgPSBGcC5wb3codHYxLCBjMSk7IC8vIDQuIHkxID0gdHYxXmMxXG4gICAgICAgICAgICB5MSA9IEZwLm11bCh5MSwgdHYyKTsgLy8gNS4geTEgPSB5MSAqIHR2MlxuICAgICAgICAgICAgY29uc3QgeTIgPSBGcC5tdWwoeTEsIGMyKTsgLy8gNi4geTIgPSB5MSAqIGMyXG4gICAgICAgICAgICBjb25zdCB0djMgPSBGcC5tdWwoRnAuc3FyKHkxKSwgdik7IC8vIDcuIHR2MyA9IHkxXjI7IDguIHR2MyA9IHR2MyAqIHZcbiAgICAgICAgICAgIGNvbnN0IGlzUVIgPSBGcC5lcWwodHYzLCB1KTsgLy8gOS4gaXNRUiA9IHR2MyA9PSB1XG4gICAgICAgICAgICBsZXQgeSA9IEZwLmNtb3YoeTIsIHkxLCBpc1FSKTsgLy8gMTAuIHkgPSBDTU9WKHkyLCB5MSwgaXNRUilcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGlzUVIsIHZhbHVlOiB5IH07IC8vIDExLiByZXR1cm4gKGlzUVIsIHkpIGlzUVIgPyB5IDogeSpjMlxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBObyBjdXJ2ZXMgdXNlcyB0aGF0XG4gICAgLy8gaWYgKEZwLk9SREVSICUgXzhuID09PSBfNW4pIC8vIHNxcnRfcmF0aW9fNW1vZDhcbiAgICByZXR1cm4gc3FydFJhdGlvO1xufVxuLyoqXG4gKiBTaW1wbGlmaWVkIFNoYWxsdWUtdmFuIGRlIFdvZXN0aWpuZS1VbGFzIE1ldGhvZFxuICogaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkzODAjc2VjdGlvbi02LjYuMlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwgb3B0cykge1xuICAgIG1vZC52YWxpZGF0ZUZpZWxkKEZwKTtcbiAgICBpZiAoIUZwLmlzVmFsaWQob3B0cy5BKSB8fCAhRnAuaXNWYWxpZChvcHRzLkIpIHx8ICFGcC5pc1ZhbGlkKG9wdHMuWikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWFwVG9DdXJ2ZVNpbXBsZVNXVTogaW52YWxpZCBvcHRzJyk7XG4gICAgY29uc3Qgc3FydFJhdGlvID0gU1dVRnBTcXJ0UmF0aW8oRnAsIG9wdHMuWik7XG4gICAgaWYgKCFGcC5pc09kZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGcC5pc09kZCBpcyBub3QgaW1wbGVtZW50ZWQhJyk7XG4gICAgLy8gSW5wdXQ6IHUsIGFuIGVsZW1lbnQgb2YgRi5cbiAgICAvLyBPdXRwdXQ6ICh4LCB5KSwgYSBwb2ludCBvbiBFLlxuICAgIHJldHVybiAodSkgPT4ge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgbGV0IHR2MSwgdHYyLCB0djMsIHR2NCwgdHY1LCB0djYsIHgsIHk7XG4gICAgICAgIHR2MSA9IEZwLnNxcih1KTsgLy8gMS4gIHR2MSA9IHVeMlxuICAgICAgICB0djEgPSBGcC5tdWwodHYxLCBvcHRzLlopOyAvLyAyLiAgdHYxID0gWiAqIHR2MVxuICAgICAgICB0djIgPSBGcC5zcXIodHYxKTsgLy8gMy4gIHR2MiA9IHR2MV4yXG4gICAgICAgIHR2MiA9IEZwLmFkZCh0djIsIHR2MSk7IC8vIDQuICB0djIgPSB0djIgKyB0djFcbiAgICAgICAgdHYzID0gRnAuYWRkKHR2MiwgRnAuT05FKTsgLy8gNS4gIHR2MyA9IHR2MiArIDFcbiAgICAgICAgdHYzID0gRnAubXVsKHR2Mywgb3B0cy5CKTsgLy8gNi4gIHR2MyA9IEIgKiB0djNcbiAgICAgICAgdHY0ID0gRnAuY21vdihvcHRzLlosIEZwLm5lZyh0djIpLCAhRnAuZXFsKHR2MiwgRnAuWkVSTykpOyAvLyA3LiAgdHY0ID0gQ01PVihaLCAtdHYyLCB0djIgIT0gMClcbiAgICAgICAgdHY0ID0gRnAubXVsKHR2NCwgb3B0cy5BKTsgLy8gOC4gIHR2NCA9IEEgKiB0djRcbiAgICAgICAgdHYyID0gRnAuc3FyKHR2Myk7IC8vIDkuICB0djIgPSB0djNeMlxuICAgICAgICB0djYgPSBGcC5zcXIodHY0KTsgLy8gMTAuIHR2NiA9IHR2NF4yXG4gICAgICAgIHR2NSA9IEZwLm11bCh0djYsIG9wdHMuQSk7IC8vIDExLiB0djUgPSBBICogdHY2XG4gICAgICAgIHR2MiA9IEZwLmFkZCh0djIsIHR2NSk7IC8vIDEyLiB0djIgPSB0djIgKyB0djVcbiAgICAgICAgdHYyID0gRnAubXVsKHR2MiwgdHYzKTsgLy8gMTMuIHR2MiA9IHR2MiAqIHR2M1xuICAgICAgICB0djYgPSBGcC5tdWwodHY2LCB0djQpOyAvLyAxNC4gdHY2ID0gdHY2ICogdHY0XG4gICAgICAgIHR2NSA9IEZwLm11bCh0djYsIG9wdHMuQik7IC8vIDE1LiB0djUgPSBCICogdHY2XG4gICAgICAgIHR2MiA9IEZwLmFkZCh0djIsIHR2NSk7IC8vIDE2LiB0djIgPSB0djIgKyB0djVcbiAgICAgICAgeCA9IEZwLm11bCh0djEsIHR2Myk7IC8vIDE3LiAgIHggPSB0djEgKiB0djNcbiAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCB2YWx1ZSB9ID0gc3FydFJhdGlvKHR2MiwgdHY2KTsgLy8gMTguIChpc19neDFfc3F1YXJlLCB5MSkgPSBzcXJ0X3JhdGlvKHR2MiwgdHY2KVxuICAgICAgICB5ID0gRnAubXVsKHR2MSwgdSk7IC8vIDE5LiAgIHkgPSB0djEgKiB1ICAtPiBaICogdV4zICogeTFcbiAgICAgICAgeSA9IEZwLm11bCh5LCB2YWx1ZSk7IC8vIDIwLiAgIHkgPSB5ICogeTFcbiAgICAgICAgeCA9IEZwLmNtb3YoeCwgdHYzLCBpc1ZhbGlkKTsgLy8gMjEuICAgeCA9IENNT1YoeCwgdHYzLCBpc19neDFfc3F1YXJlKVxuICAgICAgICB5ID0gRnAuY21vdih5LCB2YWx1ZSwgaXNWYWxpZCk7IC8vIDIyLiAgIHkgPSBDTU9WKHksIHkxLCBpc19neDFfc3F1YXJlKVxuICAgICAgICBjb25zdCBlMSA9IEZwLmlzT2RkKHUpID09PSBGcC5pc09kZCh5KTsgLy8gMjMuICBlMSA9IHNnbjAodSkgPT0gc2duMCh5KVxuICAgICAgICB5ID0gRnAuY21vdihGcC5uZWcoeSksIHksIGUxKTsgLy8gMjQuICAgeSA9IENNT1YoLXksIHksIGUxKVxuICAgICAgICB4ID0gRnAuZGl2KHgsIHR2NCk7IC8vIDI1LiAgIHggPSB4IC8gdHY0XG4gICAgICAgIHJldHVybiB7IHgsIHkgfTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2VpZXJzdHJhc3MuanMubWFwIiwiLyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL1xuaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGEyNTYnO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7IEZpZWxkLCBtb2QsIHBvdzIgfSBmcm9tICcuL2Fic3RyYWN0L21vZHVsYXIuanMnO1xuaW1wb3J0IHsgbWFwVG9DdXJ2ZVNpbXBsZVNXVSB9IGZyb20gJy4vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMnO1xuaW1wb3J0IHsgYnl0ZXNUb051bWJlckJFLCBjb25jYXRCeXRlcywgZW5zdXJlQnl0ZXMsIG51bWJlclRvQnl0ZXNCRSB9IGZyb20gJy4vYWJzdHJhY3QvdXRpbHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaGVyLCBpc29nZW55TWFwIH0gZnJvbSAnLi9hYnN0cmFjdC9oYXNoLXRvLWN1cnZlLmpzJztcbmltcG9ydCB7IGNyZWF0ZUN1cnZlIH0gZnJvbSAnLi9fc2hvcnR3X3V0aWxzLmpzJztcbmNvbnN0IHNlY3AyNTZrMVAgPSBCaWdJbnQoJzB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmMyZicpO1xuY29uc3Qgc2VjcDI1NmsxTiA9IEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxJyk7XG5jb25zdCBfMW4gPSBCaWdJbnQoMSk7XG5jb25zdCBfMm4gPSBCaWdJbnQoMik7XG5jb25zdCBkaXZOZWFyZXN0ID0gKGEsIGIpID0+IChhICsgYiAvIF8ybikgLyBiO1xuLyoqXG4gKiDiiJpuID0gbl4oKHArMSkvNCkgZm9yIGZpZWxkcyBwID0gMyBtb2QgNC4gV2UgdW53cmFwIHRoZSBsb29wIGFuZCBtdWx0aXBseSBiaXQtYnktYml0LlxuICogKFArMW4vNG4pLnRvU3RyaW5nKDIpIHdvdWxkIHByb2R1Y2UgYml0cyBbMjIzeCAxLCAwLCAyMnggMSwgNHggMCwgMTEsIDAwXVxuICovXG5mdW5jdGlvbiBzcXJ0TW9kKHkpIHtcbiAgICBjb25zdCBQID0gc2VjcDI1NmsxUDtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBfM24gPSBCaWdJbnQoMyksIF82biA9IEJpZ0ludCg2KSwgXzExbiA9IEJpZ0ludCgxMSksIF8yMm4gPSBCaWdJbnQoMjIpO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGNvbnN0IF8yM24gPSBCaWdJbnQoMjMpLCBfNDRuID0gQmlnSW50KDQ0KSwgXzg4biA9IEJpZ0ludCg4OCk7XG4gICAgY29uc3QgYjIgPSAoeSAqIHkgKiB5KSAlIFA7IC8vIHheMywgMTFcbiAgICBjb25zdCBiMyA9IChiMiAqIGIyICogeSkgJSBQOyAvLyB4XjdcbiAgICBjb25zdCBiNiA9IChwb3cyKGIzLCBfM24sIFApICogYjMpICUgUDtcbiAgICBjb25zdCBiOSA9IChwb3cyKGI2LCBfM24sIFApICogYjMpICUgUDtcbiAgICBjb25zdCBiMTEgPSAocG93MihiOSwgXzJuLCBQKSAqIGIyKSAlIFA7XG4gICAgY29uc3QgYjIyID0gKHBvdzIoYjExLCBfMTFuLCBQKSAqIGIxMSkgJSBQO1xuICAgIGNvbnN0IGI0NCA9IChwb3cyKGIyMiwgXzIybiwgUCkgKiBiMjIpICUgUDtcbiAgICBjb25zdCBiODggPSAocG93MihiNDQsIF80NG4sIFApICogYjQ0KSAlIFA7XG4gICAgY29uc3QgYjE3NiA9IChwb3cyKGI4OCwgXzg4biwgUCkgKiBiODgpICUgUDtcbiAgICBjb25zdCBiMjIwID0gKHBvdzIoYjE3NiwgXzQ0biwgUCkgKiBiNDQpICUgUDtcbiAgICBjb25zdCBiMjIzID0gKHBvdzIoYjIyMCwgXzNuLCBQKSAqIGIzKSAlIFA7XG4gICAgY29uc3QgdDEgPSAocG93MihiMjIzLCBfMjNuLCBQKSAqIGIyMikgJSBQO1xuICAgIGNvbnN0IHQyID0gKHBvdzIodDEsIF82biwgUCkgKiBiMikgJSBQO1xuICAgIGNvbnN0IHJvb3QgPSBwb3cyKHQyLCBfMm4sIFApO1xuICAgIGlmICghRnAuZXFsKEZwLnNxcihyb290KSwgeSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QnKTtcbiAgICByZXR1cm4gcm9vdDtcbn1cbmNvbnN0IEZwID0gRmllbGQoc2VjcDI1NmsxUCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgc3FydDogc3FydE1vZCB9KTtcbmV4cG9ydCBjb25zdCBzZWNwMjU2azEgPSBjcmVhdGVDdXJ2ZSh7XG4gICAgYTogQmlnSW50KDApLCAvLyBlcXVhdGlvbiBwYXJhbXM6IGEsIGJcbiAgICBiOiBCaWdJbnQoNyksIC8vIFNlZW0gdG8gYmUgcmlnaWQ6IGJpdGNvaW50YWxrLm9yZy9pbmRleC5waHA/dG9waWM9Mjg5Nzk1Lm1zZzMxODM5NzUjbXNnMzE4Mzk3NVxuICAgIEZwLCAvLyBGaWVsZCdzIHByaW1lOiAybioqMjU2biAtIDJuKiozMm4gLSAybioqOW4gLSAybioqOG4gLSAybioqN24gLSAybioqNm4gLSAybioqNG4gLSAxblxuICAgIG46IHNlY3AyNTZrMU4sIC8vIEN1cnZlIG9yZGVyLCB0b3RhbCBjb3VudCBvZiB2YWxpZCBwb2ludHMgaW4gdGhlIGZpZWxkXG4gICAgLy8gQmFzZSBwb2ludCAoeCwgeSkgYWthIGdlbmVyYXRvciBwb2ludFxuICAgIEd4OiBCaWdJbnQoJzU1MDY2MjYzMDIyMjc3MzQzNjY5NTc4NzE4ODk1MTY4NTM0MzI2MjUwNjAzNDUzNzc3NTk0MTc1NTAwMTg3MzYwMzg5MTE2NzI5MjQwJyksXG4gICAgR3k6IEJpZ0ludCgnMzI2NzA1MTAwMjA3NTg4MTY5NzgwODMwODUxMzA1MDcwNDMxODQ0NzEyNzMzODA2NTkyNDMyNzU5Mzg5MDQzMzU3NTczMzc0ODI0MjQnKSxcbiAgICBoOiBCaWdJbnQoMSksIC8vIENvZmFjdG9yXG4gICAgbG93UzogdHJ1ZSwgLy8gQWxsb3cgb25seSBsb3ctUyBzaWduYXR1cmVzIGJ5IGRlZmF1bHQgaW4gc2lnbigpIGFuZCB2ZXJpZnkoKVxuICAgIC8qKlxuICAgICAqIHNlY3AyNTZrMSBiZWxvbmdzIHRvIEtvYmxpdHogY3VydmVzOiBpdCBoYXMgZWZmaWNpZW50bHkgY29tcHV0YWJsZSBlbmRvbW9ycGhpc20uXG4gICAgICogRW5kb21vcnBoaXNtIHVzZXMgMnggbGVzcyBSQU0sIHNwZWVkcyB1cCBwcmVjb21wdXRhdGlvbiBieSAyeCBhbmQgRUNESCAvIGtleSByZWNvdmVyeSBieSAyMCUuXG4gICAgICogRm9yIHByZWNvbXB1dGVkIHdOQUYgaXQgdHJhZGVzIG9mZiAxLzIgaW5pdCB0aW1lICYgMS8zIHJhbSBmb3IgMjAlIHBlcmYgaGl0LlxuICAgICAqIEV4cGxhbmF0aW9uOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsbWlsbHIvZWI2NzA4MDY3OTNlODRkZjYyOGE3YzQzNGE4NzMwNjZcbiAgICAgKi9cbiAgICBlbmRvOiB7XG4gICAgICAgIGJldGE6IEJpZ0ludCgnMHg3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlJyksXG4gICAgICAgIHNwbGl0U2NhbGFyOiAoaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbiA9IHNlY3AyNTZrMU47XG4gICAgICAgICAgICBjb25zdCBhMSA9IEJpZ0ludCgnMHgzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNScpO1xuICAgICAgICAgICAgY29uc3QgYjEgPSAtXzFuICogQmlnSW50KCcweGU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzJyk7XG4gICAgICAgICAgICBjb25zdCBhMiA9IEJpZ0ludCgnMHgxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgnKTtcbiAgICAgICAgICAgIGNvbnN0IGIyID0gYTE7XG4gICAgICAgICAgICBjb25zdCBQT1dfMl8xMjggPSBCaWdJbnQoJzB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7IC8vICgybioqMTI4bikudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICBjb25zdCBjMSA9IGRpdk5lYXJlc3QoYjIgKiBrLCBuKTtcbiAgICAgICAgICAgIGNvbnN0IGMyID0gZGl2TmVhcmVzdCgtYjEgKiBrLCBuKTtcbiAgICAgICAgICAgIGxldCBrMSA9IG1vZChrIC0gYzEgKiBhMSAtIGMyICogYTIsIG4pO1xuICAgICAgICAgICAgbGV0IGsyID0gbW9kKC1jMSAqIGIxIC0gYzIgKiBiMiwgbik7XG4gICAgICAgICAgICBjb25zdCBrMW5lZyA9IGsxID4gUE9XXzJfMTI4O1xuICAgICAgICAgICAgY29uc3QgazJuZWcgPSBrMiA+IFBPV18yXzEyODtcbiAgICAgICAgICAgIGlmIChrMW5lZylcbiAgICAgICAgICAgICAgICBrMSA9IG4gLSBrMTtcbiAgICAgICAgICAgIGlmIChrMm5lZylcbiAgICAgICAgICAgICAgICBrMiA9IG4gLSBrMjtcbiAgICAgICAgICAgIGlmIChrMSA+IFBPV18yXzEyOCB8fCBrMiA+IFBPV18yXzEyOCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3BsaXRTY2FsYXI6IEVuZG9tb3JwaGlzbSBmYWlsZWQsIGs9JyArIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgazFuZWcsIGsxLCBrMm5lZywgazIgfTtcbiAgICAgICAgfSxcbiAgICB9LFxufSwgc2hhMjU2KTtcbi8vIFNjaG5vcnIgc2lnbmF0dXJlcyBhcmUgc3VwZXJpb3IgdG8gRUNEU0EgZnJvbSBhYm92ZS4gQmVsb3cgaXMgU2Nobm9yci1zcGVjaWZpYyBCSVAwMzQwIGNvZGUuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzQwLm1lZGlhd2lraVxuY29uc3QgXzBuID0gQmlnSW50KDApO1xuY29uc3QgZmUgPSAoeCkgPT4gdHlwZW9mIHggPT09ICdiaWdpbnQnICYmIF8wbiA8IHggJiYgeCA8IHNlY3AyNTZrMVA7XG5jb25zdCBnZSA9ICh4KSA9PiB0eXBlb2YgeCA9PT0gJ2JpZ2ludCcgJiYgXzBuIDwgeCAmJiB4IDwgc2VjcDI1NmsxTjtcbi8qKiBBbiBvYmplY3QgbWFwcGluZyB0YWdzIHRvIHRoZWlyIHRhZ2dlZCBoYXNoIHByZWZpeCBvZiBbU0hBMjU2KHRhZykgfCBTSEEyNTYodGFnKV0gKi9cbmNvbnN0IFRBR0dFRF9IQVNIX1BSRUZJWEVTID0ge307XG5mdW5jdGlvbiB0YWdnZWRIYXNoKHRhZywgLi4ubWVzc2FnZXMpIHtcbiAgICBsZXQgdGFnUCA9IFRBR0dFRF9IQVNIX1BSRUZJWEVTW3RhZ107XG4gICAgaWYgKHRhZ1AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0YWdIID0gc2hhMjU2KFVpbnQ4QXJyYXkuZnJvbSh0YWcsIChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpKTtcbiAgICAgICAgdGFnUCA9IGNvbmNhdEJ5dGVzKHRhZ0gsIHRhZ0gpO1xuICAgICAgICBUQUdHRURfSEFTSF9QUkVGSVhFU1t0YWddID0gdGFnUDtcbiAgICB9XG4gICAgcmV0dXJuIHNoYTI1Nihjb25jYXRCeXRlcyh0YWdQLCAuLi5tZXNzYWdlcykpO1xufVxuLy8gRUNEU0EgY29tcGFjdCBwb2ludHMgYXJlIDMzLWJ5dGUuIFNjaG5vcnIgaXMgMzI6IHdlIHN0cmlwIGZpcnN0IGJ5dGUgMHgwMiBvciAweDAzXG5jb25zdCBwb2ludFRvQnl0ZXMgPSAocG9pbnQpID0+IHBvaW50LnRvUmF3Qnl0ZXModHJ1ZSkuc2xpY2UoMSk7XG5jb25zdCBudW1UbzMyYiA9IChuKSA9PiBudW1iZXJUb0J5dGVzQkUobiwgMzIpO1xuY29uc3QgbW9kUCA9ICh4KSA9PiBtb2QoeCwgc2VjcDI1NmsxUCk7XG5jb25zdCBtb2ROID0gKHgpID0+IG1vZCh4LCBzZWNwMjU2azFOKTtcbmNvbnN0IFBvaW50ID0gc2VjcDI1NmsxLlByb2plY3RpdmVQb2ludDtcbmNvbnN0IEdtdWxBZGQgPSAoUSwgYSwgYikgPT4gUG9pbnQuQkFTRS5tdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKTtcbi8vIENhbGN1bGF0ZSBwb2ludCwgc2NhbGFyIGFuZCBieXRlc1xuZnVuY3Rpb24gc2Nobm9yckdldEV4dFB1YktleShwcml2KSB7XG4gICAgbGV0IGRfID0gc2VjcDI1NmsxLnV0aWxzLm5vcm1Qcml2YXRlS2V5VG9TY2FsYXIocHJpdik7IC8vIHNhbWUgbWV0aG9kIGV4ZWN1dGVkIGluIGZyb21Qcml2YXRlS2V5XG4gICAgbGV0IHAgPSBQb2ludC5mcm9tUHJpdmF0ZUtleShkXyk7IC8vIFAgPSBkJ+KLhUc7IDAgPCBkJyA8IG4gY2hlY2sgaXMgZG9uZSBpbnNpZGVcbiAgICBjb25zdCBzY2FsYXIgPSBwLmhhc0V2ZW5ZKCkgPyBkXyA6IG1vZE4oLWRfKTtcbiAgICByZXR1cm4geyBzY2FsYXI6IHNjYWxhciwgYnl0ZXM6IHBvaW50VG9CeXRlcyhwKSB9O1xufVxuLyoqXG4gKiBsaWZ0X3ggZnJvbSBCSVAzNDAuIENvbnZlcnQgMzItYnl0ZSB4IGNvb3JkaW5hdGUgdG8gZWxsaXB0aWMgY3VydmUgcG9pbnQuXG4gKiBAcmV0dXJucyB2YWxpZCBwb2ludCBjaGVja2VkIGZvciBiZWluZyBvbi1jdXJ2ZVxuICovXG5mdW5jdGlvbiBsaWZ0X3goeCkge1xuICAgIGlmICghZmUoeCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHg6IG5lZWQgMCA8IHggPCBwJyk7IC8vIEZhaWwgaWYgeCDiiaUgcC5cbiAgICBjb25zdCB4eCA9IG1vZFAoeCAqIHgpO1xuICAgIGNvbnN0IGMgPSBtb2RQKHh4ICogeCArIEJpZ0ludCg3KSk7IC8vIExldCBjID0geMKzICsgNyBtb2QgcC5cbiAgICBsZXQgeSA9IHNxcnRNb2QoYyk7IC8vIExldCB5ID0gY14ocCsxKS80IG1vZCBwLlxuICAgIGlmICh5ICUgXzJuICE9PSBfMG4pXG4gICAgICAgIHkgPSBtb2RQKC15KTsgLy8gUmV0dXJuIHRoZSB1bmlxdWUgcG9pbnQgUCBzdWNoIHRoYXQgeChQKSA9IHggYW5kXG4gICAgY29uc3QgcCA9IG5ldyBQb2ludCh4LCB5LCBfMW4pOyAvLyB5KFApID0geSBpZiB5IG1vZCAyID0gMCBvciB5KFApID0gcC15IG90aGVyd2lzZS5cbiAgICBwLmFzc2VydFZhbGlkaXR5KCk7XG4gICAgcmV0dXJuIHA7XG59XG4vKipcbiAqIENyZWF0ZSB0YWdnZWQgaGFzaCwgY29udmVydCBpdCB0byBiaWdpbnQsIHJlZHVjZSBtb2R1bG8tbi5cbiAqL1xuZnVuY3Rpb24gY2hhbGxlbmdlKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gbW9kTihieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgnQklQMDM0MC9jaGFsbGVuZ2UnLCAuLi5hcmdzKSkpO1xufVxuLyoqXG4gKiBTY2hub3JyIHB1YmxpYyBrZXkgaXMganVzdCBgeGAgY29vcmRpbmF0ZSBvZiBQb2ludCBhcyBwZXIgQklQMzQwLlxuICovXG5mdW5jdGlvbiBzY2hub3JyR2V0UHVibGljS2V5KHByaXZhdGVLZXkpIHtcbiAgICByZXR1cm4gc2Nobm9yckdldEV4dFB1YktleShwcml2YXRlS2V5KS5ieXRlczsgLy8gZCc9aW50KHNrKS4gRmFpbCBpZiBkJz0wIG9yIGQn4omlbi4gUmV0IGJ5dGVzKGQn4ouFRylcbn1cbi8qKlxuICogQ3JlYXRlcyBTY2hub3JyIHNpZ25hdHVyZSBhcyBwZXIgQklQMzQwLiBWZXJpZmllcyBpdHNlbGYgYmVmb3JlIHJldHVybmluZyBhbnl0aGluZy5cbiAqIGF1eFJhbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdCB0aGUgc29sZSBzb3VyY2Ugb2YgayBnZW5lcmF0aW9uOiBiYWQgQ1NQUk5HIHdvbid0IGJlIGRhbmdlcm91cy5cbiAqL1xuZnVuY3Rpb24gc2Nobm9yclNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgYXV4UmFuZCA9IHJhbmRvbUJ5dGVzKDMyKSkge1xuICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGNvbnN0IHsgYnl0ZXM6IHB4LCBzY2FsYXI6IGQgfSA9IHNjaG5vcnJHZXRFeHRQdWJLZXkocHJpdmF0ZUtleSk7IC8vIGNoZWNrcyBmb3IgaXNXaXRoaW5DdXJ2ZU9yZGVyXG4gICAgY29uc3QgYSA9IGVuc3VyZUJ5dGVzKCdhdXhSYW5kJywgYXV4UmFuZCwgMzIpOyAvLyBBdXhpbGlhcnkgcmFuZG9tIGRhdGEgYTogYSAzMi1ieXRlIGFycmF5XG4gICAgY29uc3QgdCA9IG51bVRvMzJiKGQgXiBieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgnQklQMDM0MC9hdXgnLCBhKSkpOyAvLyBMZXQgdCBiZSB0aGUgYnl0ZS13aXNlIHhvciBvZiBieXRlcyhkKSBhbmQgaGFzaC9hdXgoYSlcbiAgICBjb25zdCByYW5kID0gdGFnZ2VkSGFzaCgnQklQMDM0MC9ub25jZScsIHQsIHB4LCBtKTsgLy8gTGV0IHJhbmQgPSBoYXNoL25vbmNlKHQgfHwgYnl0ZXMoUCkgfHwgbSlcbiAgICBjb25zdCBrXyA9IG1vZE4oYnl0ZXNUb051bWJlckJFKHJhbmQpKTsgLy8gTGV0IGsnID0gaW50KHJhbmQpIG1vZCBuXG4gICAgaWYgKGtfID09PSBfMG4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbiBmYWlsZWQ6IGsgaXMgemVybycpOyAvLyBGYWlsIGlmIGsnID0gMC5cbiAgICBjb25zdCB7IGJ5dGVzOiByeCwgc2NhbGFyOiBrIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KGtfKTsgLy8gTGV0IFIgPSBrJ+KLhUcuXG4gICAgY29uc3QgZSA9IGNoYWxsZW5nZShyeCwgcHgsIG0pOyAvLyBMZXQgZSA9IGludChoYXNoL2NoYWxsZW5nZShieXRlcyhSKSB8fCBieXRlcyhQKSB8fCBtKSkgbW9kIG4uXG4gICAgY29uc3Qgc2lnID0gbmV3IFVpbnQ4QXJyYXkoNjQpOyAvLyBMZXQgc2lnID0gYnl0ZXMoUikgfHwgYnl0ZXMoKGsgKyBlZCkgbW9kIG4pLlxuICAgIHNpZy5zZXQocngsIDApO1xuICAgIHNpZy5zZXQobnVtVG8zMmIobW9kTihrICsgZSAqIGQpKSwgMzIpO1xuICAgIC8vIElmIFZlcmlmeShieXRlcyhQKSwgbSwgc2lnKSAoc2VlIGJlbG93KSByZXR1cm5zIGZhaWx1cmUsIGFib3J0XG4gICAgaWYgKCFzY2hub3JyVmVyaWZ5KHNpZywgbSwgcHgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ246IEludmFsaWQgc2lnbmF0dXJlIHByb2R1Y2VkJyk7XG4gICAgcmV0dXJuIHNpZztcbn1cbi8qKlxuICogVmVyaWZpZXMgU2Nobm9yciBzaWduYXR1cmUuXG4gKiBXaWxsIHN3YWxsb3cgZXJyb3JzICYgcmV0dXJuIGZhbHNlIGV4Y2VwdCBmb3IgaW5pdGlhbCB0eXBlIHZhbGlkYXRpb24gb2YgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBzY2hub3JyVmVyaWZ5KHNpZ25hdHVyZSwgbWVzc2FnZSwgcHVibGljS2V5KSB7XG4gICAgY29uc3Qgc2lnID0gZW5zdXJlQnl0ZXMoJ3NpZ25hdHVyZScsIHNpZ25hdHVyZSwgNjQpO1xuICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGNvbnN0IHB1YiA9IGVuc3VyZUJ5dGVzKCdwdWJsaWNLZXknLCBwdWJsaWNLZXksIDMyKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBQID0gbGlmdF94KGJ5dGVzVG9OdW1iZXJCRShwdWIpKTsgLy8gUCA9IGxpZnRfeChpbnQocGspKTsgZmFpbCBpZiB0aGF0IGZhaWxzXG4gICAgICAgIGNvbnN0IHIgPSBieXRlc1RvTnVtYmVyQkUoc2lnLnN1YmFycmF5KDAsIDMyKSk7IC8vIExldCByID0gaW50KHNpZ1swOjMyXSk7IGZhaWwgaWYgciDiiaUgcC5cbiAgICAgICAgaWYgKCFmZShyKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcyA9IGJ5dGVzVG9OdW1iZXJCRShzaWcuc3ViYXJyYXkoMzIsIDY0KSk7IC8vIExldCBzID0gaW50KHNpZ1szMjo2NF0pOyBmYWlsIGlmIHMg4omlIG4uXG4gICAgICAgIGlmICghZ2UocykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UobnVtVG8zMmIociksIHBvaW50VG9CeXRlcyhQKSwgbSk7IC8vIGludChjaGFsbGVuZ2UoYnl0ZXMocil8fGJ5dGVzKFApfHxtKSklblxuICAgICAgICBjb25zdCBSID0gR211bEFkZChQLCBzLCBtb2ROKC1lKSk7IC8vIFIgPSBz4ouFRyAtIGXii4VQXG4gICAgICAgIGlmICghUiB8fCAhUi5oYXNFdmVuWSgpIHx8IFIudG9BZmZpbmUoKS54ICE9PSByKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyAtZVAgPT0gKG4tZSlQXG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBGYWlsIGlmIGlzX2luZmluaXRlKFIpIC8gbm90IGhhc19ldmVuX3koUikgLyB4KFIpIOKJoCByLlxuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBzY2hub3JyID0gLyogQF9fUFVSRV9fICovICgoKSA9PiAoe1xuICAgIGdldFB1YmxpY0tleTogc2Nobm9yckdldFB1YmxpY0tleSxcbiAgICBzaWduOiBzY2hub3JyU2lnbixcbiAgICB2ZXJpZnk6IHNjaG5vcnJWZXJpZnksXG4gICAgdXRpbHM6IHtcbiAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogc2VjcDI1NmsxLnV0aWxzLnJhbmRvbVByaXZhdGVLZXksXG4gICAgICAgIGxpZnRfeCxcbiAgICAgICAgcG9pbnRUb0J5dGVzLFxuICAgICAgICBudW1iZXJUb0J5dGVzQkUsXG4gICAgICAgIGJ5dGVzVG9OdW1iZXJCRSxcbiAgICAgICAgdGFnZ2VkSGFzaCxcbiAgICAgICAgbW9kLFxuICAgIH0sXG59KSkoKTtcbmNvbnN0IGlzb01hcCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaXNvZ2VueU1hcChGcCwgW1xuICAgIC8vIHhOdW1cbiAgICBbXG4gICAgICAgICcweDhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhkYWFhYWE4YzcnLFxuICAgICAgICAnMHg3ZDNkNGM4MGJjMzIxZDViOWYzMTVjZWE3ZmQ0NGM1ZDU5NWQyZmMwYmY2M2I5MmRmZmYxMDQ0ZjE3YzY1ODEnLFxuICAgICAgICAnMHg1MzRjMzI4ZDIzZjIzNGU2ZTJhNDEzZGVjYTI1Y2FlY2U0NTA2MTQ0MDM3YzQwMzE0ZWNiZDBiNTNkOWRkMjYyJyxcbiAgICAgICAgJzB4OGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGRhYWFhYTg4YycsXG4gICAgXSxcbiAgICAvLyB4RGVuXG4gICAgW1xuICAgICAgICAnMHhkMzU3NzExOTNkOTQ5MThhOWNhMzRjY2JiN2I2NDBkZDg2Y2Q0MDk1NDJmODQ4N2Q5ZmU2Yjc0NTc4MWViNDliJyxcbiAgICAgICAgJzB4ZWRhZGM2ZjY0MzgzZGMxZGY3YzRiMmQ1MWI1NDIyNTQwNmQzNmI2NDFmNWU0MWJiYzUyYTU2NjEyYThjNmQxNCcsXG4gICAgICAgICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLCAvLyBMQVNUIDFcbiAgICBdLFxuICAgIC8vIHlOdW1cbiAgICBbXG4gICAgICAgICcweDRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiOGUzOGUyM2MnLFxuICAgICAgICAnMHhjNzVlMGMzMmQ1Y2I3YzBmYTlkMGE1NGIxMmEwYTZkNTY0N2FiMDQ2ZDY4NmRhNmZkZmZjOTBmYzIwMWQ3MWEzJyxcbiAgICAgICAgJzB4MjlhNjE5NDY5MWY5MWE3MzcxNTIwOWVmNjUxMmU1NzY3MjI4MzBhMjAxYmUyMDE4YTc2NWU4NWE5ZWNlZTkzMScsXG4gICAgICAgICcweDJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmMzhlMzhkODQnLFxuICAgIF0sXG4gICAgLy8geURlblxuICAgIFtcbiAgICAgICAgJzB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZjkzYicsXG4gICAgICAgICcweDdhMDY1MzRiYjhiZGI0OWZkNWU5ZTY2MzI3MjJjMjk4OTQ2N2MxYmZjOGU4ZDk3OGRmYjQyNWQyNjg1YzI1NzMnLFxuICAgICAgICAnMHg2NDg0YWE3MTY1NDVjYTJjZjNhNzBjM2ZhOGZlMzM3ZTBhM2QyMTE2MmYwZDYyOTlhN2JmODE5MmJmZDJhNzZmJyxcbiAgICAgICAgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsIC8vIExBU1QgMVxuICAgIF0sXG5dLm1hcCgoaSkgPT4gaS5tYXAoKGopID0+IEJpZ0ludChqKSkpKSkoKTtcbmNvbnN0IG1hcFNXVSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwge1xuICAgIEE6IEJpZ0ludCgnMHgzZjg3MzFhYmRkNjYxYWRjYTA4YTU1NThmMGY1ZDI3MmU5NTNkMzYzY2I2ZjBlNWQ0MDU0NDdjMDFhNDQ0NTMzJyksXG4gICAgQjogQmlnSW50KCcxNzcxJyksXG4gICAgWjogRnAuY3JlYXRlKEJpZ0ludCgnLTExJykpLFxufSkpKCk7XG5jb25zdCBodGYgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGNyZWF0ZUhhc2hlcihzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LCAoc2NhbGFycykgPT4ge1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gbWFwU1dVKEZwLmNyZWF0ZShzY2FsYXJzWzBdKSk7XG4gICAgcmV0dXJuIGlzb01hcCh4LCB5KTtcbn0sIHtcbiAgICBEU1Q6ICdzZWNwMjU2azFfWE1EOlNIQS0yNTZfU1NXVV9ST18nLFxuICAgIGVuY29kZURTVDogJ3NlY3AyNTZrMV9YTUQ6U0hBLTI1Nl9TU1dVX05VXycsXG4gICAgcDogRnAuT1JERVIsXG4gICAgbTogMSxcbiAgICBrOiAxMjgsXG4gICAgZXhwYW5kOiAneG1kJyxcbiAgICBoYXNoOiBzaGEyNTYsXG59KSkoKTtcbmV4cG9ydCBjb25zdCBoYXNoVG9DdXJ2ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaHRmLmhhc2hUb0N1cnZlKSgpO1xuZXhwb3J0IGNvbnN0IGVuY29kZVRvQ3VydmUgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGh0Zi5lbmNvZGVUb0N1cnZlKSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VjcDI1NmsxLmpzLm1hcCIsImZ1bmN0aW9uIG51bWJlcihuKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuKSB8fCBuIDwgMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBub3QgJHtufWApO1xufVxuZnVuY3Rpb24gYm9vbChiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSAnYm9vbGVhbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYm9vbGVhbiBleHBlY3RlZCwgbm90ICR7Yn1gKTtcbn1cbi8vIGNvcGllZCBmcm9tIHV0aWxzXG5leHBvcnQgZnVuY3Rpb24gaXNCeXRlcyhhKSB7XG4gICAgcmV0dXJuIChhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fFxuICAgICAgICAoYSAhPSBudWxsICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVaW50OEFycmF5JykpO1xufVxuZnVuY3Rpb24gYnl0ZXMoYiwgLi4ubGVuZ3Rocykge1xuICAgIGlmICghaXNCeXRlcyhiKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVaW50OEFycmF5IGV4cGVjdGVkJyk7XG4gICAgaWYgKGxlbmd0aHMubGVuZ3RoID4gMCAmJiAhbGVuZ3Rocy5pbmNsdWRlcyhiLmxlbmd0aCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJHtsZW5ndGhzfSwgbm90IG9mIGxlbmd0aD0ke2IubGVuZ3RofWApO1xufVxuZnVuY3Rpb24gaGFzaChoKSB7XG4gICAgaWYgKHR5cGVvZiBoICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBoLmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXNoIHNob3VsZCBiZSB3cmFwcGVkIGJ5IHV0aWxzLndyYXBDb25zdHJ1Y3RvcicpO1xuICAgIG51bWJlcihoLm91dHB1dExlbik7XG4gICAgbnVtYmVyKGguYmxvY2tMZW4pO1xufVxuZnVuY3Rpb24gZXhpc3RzKGluc3RhbmNlLCBjaGVja0ZpbmlzaGVkID0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5kZXN0cm95ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQnKTtcbiAgICBpZiAoY2hlY2tGaW5pc2hlZCAmJiBpbnN0YW5jZS5maW5pc2hlZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXNoI2RpZ2VzdCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkJyk7XG59XG5mdW5jdGlvbiBvdXRwdXQob3V0LCBpbnN0YW5jZSkge1xuICAgIGJ5dGVzKG91dCk7XG4gICAgY29uc3QgbWluID0gaW5zdGFuY2Uub3V0cHV0TGVuO1xuICAgIGlmIChvdXQubGVuZ3RoIDwgbWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlnZXN0SW50bygpIGV4cGVjdHMgb3V0cHV0IGJ1ZmZlciBvZiBsZW5ndGggYXQgbGVhc3QgJHttaW59YCk7XG4gICAgfVxufVxuZXhwb3J0IHsgbnVtYmVyLCBib29sLCBieXRlcywgaGFzaCwgZXhpc3RzLCBvdXRwdXQgfTtcbmNvbnN0IGFzc2VydCA9IHsgbnVtYmVyLCBib29sLCBieXRlcywgaGFzaCwgZXhpc3RzLCBvdXRwdXQgfTtcbmV4cG9ydCBkZWZhdWx0IGFzc2VydDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV9hc3NlcnQuanMubWFwIiwiaW1wb3J0IHsgbnVtYmVyLCBleGlzdHMsIG91dHB1dCB9IGZyb20gJy4vX2Fzc2VydC5qcyc7XG5pbXBvcnQgeyBIYXNoLCB0b0J5dGVzLCB1MzIsIGlzTEUsIGJ5dGVTd2FwMzIsIGJ5dGVTd2FwSWZCRSB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gQmxha2UgaXMgYmFzZWQgb24gQ2hhQ2hhIHBlcm11dGF0aW9uLlxuLy8gRm9yIEJMQUtFMmIsIHRoZSB0d28gZXh0cmEgcGVybXV0YXRpb25zIGZvciByb3VuZHMgMTAgYW5kIDExIGFyZSBTSUdNQVsxMC4uMTFdID0gU0lHTUFbMC4uMV0uXG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydCBjb25zdCBTSUdNQSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDhBcnJheShbXG4gICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcbiAgICAxNCwgMTAsIDQsIDgsIDksIDE1LCAxMywgNiwgMSwgMTIsIDAsIDIsIDExLCA3LCA1LCAzLFxuICAgIDExLCA4LCAxMiwgMCwgNSwgMiwgMTUsIDEzLCAxMCwgMTQsIDMsIDYsIDcsIDEsIDksIDQsXG4gICAgNywgOSwgMywgMSwgMTMsIDEyLCAxMSwgMTQsIDIsIDYsIDUsIDEwLCA0LCAwLCAxNSwgOCxcbiAgICA5LCAwLCA1LCA3LCAyLCA0LCAxMCwgMTUsIDE0LCAxLCAxMSwgMTIsIDYsIDgsIDMsIDEzLFxuICAgIDIsIDEyLCA2LCAxMCwgMCwgMTEsIDgsIDMsIDQsIDEzLCA3LCA1LCAxNSwgMTQsIDEsIDksXG4gICAgMTIsIDUsIDEsIDE1LCAxNCwgMTMsIDQsIDEwLCAwLCA3LCA2LCAzLCA5LCAyLCA4LCAxMSxcbiAgICAxMywgMTEsIDcsIDE0LCAxMiwgMSwgMywgOSwgNSwgMCwgMTUsIDQsIDgsIDYsIDIsIDEwLFxuICAgIDYsIDE1LCAxNCwgOSwgMTEsIDMsIDAsIDgsIDEyLCAyLCAxMywgNywgMSwgNCwgMTAsIDUsXG4gICAgMTAsIDIsIDgsIDQsIDcsIDYsIDEsIDUsIDE1LCAxMSwgOSwgMTQsIDMsIDEyLCAxMywgMCxcbiAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICAgIDE0LCAxMCwgNCwgOCwgOSwgMTUsIDEzLCA2LCAxLCAxMiwgMCwgMiwgMTEsIDcsIDUsIDMsXG5dKTtcbmV4cG9ydCBjbGFzcyBCTEFLRSBleHRlbmRzIEhhc2gge1xuICAgIGNvbnN0cnVjdG9yKGJsb2NrTGVuLCBvdXRwdXRMZW4sIG9wdHMgPSB7fSwga2V5TGVuLCBzYWx0TGVuLCBwZXJzTGVuKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjtcbiAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgICAgIG51bWJlcihibG9ja0xlbik7XG4gICAgICAgIG51bWJlcihvdXRwdXRMZW4pO1xuICAgICAgICBudW1iZXIoa2V5TGVuKTtcbiAgICAgICAgaWYgKG91dHB1dExlbiA8IDAgfHwgb3V0cHV0TGVuID4ga2V5TGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdXRwdXRMZW4gYmlnZ2VyIHRoYW4ga2V5TGVuJyk7XG4gICAgICAgIGlmIChvcHRzLmtleSAhPT0gdW5kZWZpbmVkICYmIChvcHRzLmtleS5sZW5ndGggPCAxIHx8IG9wdHMua2V5Lmxlbmd0aCA+IGtleUxlbikpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleSBtdXN0IGJlIHVwIDEuLiR7a2V5TGVufSBieXRlIGxvbmcgb3IgdW5kZWZpbmVkYCk7XG4gICAgICAgIGlmIChvcHRzLnNhbHQgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnNhbHQubGVuZ3RoICE9PSBzYWx0TGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzYWx0IG11c3QgYmUgJHtzYWx0TGVufSBieXRlIGxvbmcgb3IgdW5kZWZpbmVkYCk7XG4gICAgICAgIGlmIChvcHRzLnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkICYmIG9wdHMucGVyc29uYWxpemF0aW9uLmxlbmd0aCAhPT0gcGVyc0xlbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcGVyc29uYWxpemF0aW9uIG11c3QgYmUgJHtwZXJzTGVufSBieXRlIGxvbmcgb3IgdW5kZWZpbmVkYCk7XG4gICAgICAgIHRoaXMuYnVmZmVyMzIgPSB1MzIoKHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW4pKSk7XG4gICAgfVxuICAgIHVwZGF0ZShkYXRhKSB7XG4gICAgICAgIGV4aXN0cyh0aGlzKTtcbiAgICAgICAgLy8gTWFpbiBkaWZmZXJlbmNlIHdpdGggb3RoZXIgaGFzaGVzOiB0aGVyZSBpcyBmbGFnIGZvciBsYXN0IGJsb2NrLFxuICAgICAgICAvLyBzbyB3ZSBjYW5ub3QgcHJvY2VzcyBjdXJyZW50IGJsb2NrIGJlZm9yZSB3ZSBrbm93IHRoYXQgdGhlcmVcbiAgICAgICAgLy8gaXMgdGhlIG5leHQgb25lLiBUaGlzIHNpZ25pZmljYW50bHkgY29tcGxpY2F0ZXMgbG9naWMgYW5kIHJlZHVjZXMgYWJpbGl0eVxuICAgICAgICAvLyB0byBkbyB6ZXJvLWNvcHkgcHJvY2Vzc2luZ1xuICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXIsIGJ1ZmZlcjMyIH0gPSB0aGlzO1xuICAgICAgICBkYXRhID0gdG9CeXRlcyhkYXRhKTtcbiAgICAgICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGRhdGEuYnl0ZU9mZnNldDtcbiAgICAgICAgY29uc3QgYnVmID0gZGF0YS5idWZmZXI7XG4gICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjspIHtcbiAgICAgICAgICAgIC8vIElmIGJ1ZmZlciBpcyBmdWxsIGFuZCB3ZSBzdGlsbCBoYXZlIGlucHV0IChkb24ndCBwcm9jZXNzIGxhc3QgYmxvY2ssIHNhbWUgYXMgYmxha2UycylcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA9PT0gYmxvY2tMZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTEUpXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVTd2FwMzIoYnVmZmVyMzIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHJlc3MoYnVmZmVyMzIsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTEUpXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVTd2FwMzIoYnVmZmVyMzIpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpO1xuICAgICAgICAgICAgY29uc3QgZGF0YU9mZnNldCA9IG9mZnNldCArIHBvcztcbiAgICAgICAgICAgIC8vIGZ1bGwgYmxvY2sgJiYgYWxpZ25lZCB0byA0IGJ5dGVzICYmIG5vdCBsYXN0IGluIGlucHV0XG4gICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4gJiYgIShkYXRhT2Zmc2V0ICUgNCkgJiYgcG9zICsgdGFrZSA8IGxlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEzMiA9IG5ldyBVaW50MzJBcnJheShidWYsIGRhdGFPZmZzZXQsIE1hdGguZmxvb3IoKGxlbiAtIHBvcykgLyA0KSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0xFKVxuICAgICAgICAgICAgICAgICAgICBieXRlU3dhcDMyKGRhdGEzMik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcG9zMzIgPSAwOyBwb3MgKyBibG9ja0xlbiA8IGxlbjsgcG9zMzIgKz0gYnVmZmVyMzIubGVuZ3RoLCBwb3MgKz0gYmxvY2tMZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gYmxvY2tMZW47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHJlc3MoZGF0YTMyLCBwb3MzMiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWlzTEUpXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVTd2FwMzIoZGF0YTMyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlci5zZXQoZGF0YS5zdWJhcnJheShwb3MsIHBvcyArIHRha2UpLCB0aGlzLnBvcyk7XG4gICAgICAgICAgICB0aGlzLnBvcyArPSB0YWtlO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gdGFrZTtcbiAgICAgICAgICAgIHBvcyArPSB0YWtlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkaWdlc3RJbnRvKG91dCkge1xuICAgICAgICBleGlzdHModGhpcyk7XG4gICAgICAgIG91dHB1dChvdXQsIHRoaXMpO1xuICAgICAgICBjb25zdCB7IHBvcywgYnVmZmVyMzIgfSA9IHRoaXM7XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAvLyBQYWRkaW5nXG4gICAgICAgIHRoaXMuYnVmZmVyLnN1YmFycmF5KHBvcykuZmlsbCgwKTtcbiAgICAgICAgaWYgKCFpc0xFKVxuICAgICAgICAgICAgYnl0ZVN3YXAzMihidWZmZXIzMik7XG4gICAgICAgIHRoaXMuY29tcHJlc3MoYnVmZmVyMzIsIDAsIHRydWUpO1xuICAgICAgICBpZiAoIWlzTEUpXG4gICAgICAgICAgICBieXRlU3dhcDMyKGJ1ZmZlcjMyKTtcbiAgICAgICAgY29uc3Qgb3V0MzIgPSB1MzIob3V0KTtcbiAgICAgICAgdGhpcy5nZXQoKS5mb3JFYWNoKCh2LCBpKSA9PiAob3V0MzJbaV0gPSBieXRlU3dhcElmQkUodikpKTtcbiAgICB9XG4gICAgZGlnZXN0KCkge1xuICAgICAgICBjb25zdCB7IGJ1ZmZlciwgb3V0cHV0TGVuIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmRpZ2VzdEludG8oYnVmZmVyKTtcbiAgICAgICAgY29uc3QgcmVzID0gYnVmZmVyLnNsaWNlKDAsIG91dHB1dExlbik7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBfY2xvbmVJbnRvKHRvKSB7XG4gICAgICAgIGNvbnN0IHsgYnVmZmVyLCBsZW5ndGgsIGZpbmlzaGVkLCBkZXN0cm95ZWQsIG91dHB1dExlbiwgcG9zIH0gPSB0aGlzO1xuICAgICAgICB0byB8fCAodG8gPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih7IGRrTGVuOiBvdXRwdXRMZW4gfSkpO1xuICAgICAgICB0by5zZXQoLi4udGhpcy5nZXQoKSk7XG4gICAgICAgIHRvLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICAgICAgdG8uZGVzdHJveWVkID0gZGVzdHJveWVkO1xuICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRvLmJ1ZmZlci5zZXQoYnVmZmVyKTtcbiAgICAgICAgdG8ucG9zID0gcG9zO1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2JsYWtlLmpzLm1hcCIsImltcG9ydCB7IGV4aXN0cywgb3V0cHV0IH0gZnJvbSAnLi9fYXNzZXJ0LmpzJztcbmltcG9ydCB7IEhhc2gsIGNyZWF0ZVZpZXcsIHRvQnl0ZXMgfSBmcm9tICcuL3V0aWxzLmpzJztcbi8vIFBvbHlmaWxsIGZvciBTYWZhcmkgMTRcbmZ1bmN0aW9uIHNldEJpZ1VpbnQ2NCh2aWV3LCBieXRlT2Zmc2V0LCB2YWx1ZSwgaXNMRSkge1xuICAgIGlmICh0eXBlb2Ygdmlldy5zZXRCaWdVaW50NjQgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB2aWV3LnNldEJpZ1VpbnQ2NChieXRlT2Zmc2V0LCB2YWx1ZSwgaXNMRSk7XG4gICAgY29uc3QgXzMybiA9IEJpZ0ludCgzMik7XG4gICAgY29uc3QgX3UzMl9tYXggPSBCaWdJbnQoMHhmZmZmZmZmZik7XG4gICAgY29uc3Qgd2ggPSBOdW1iZXIoKHZhbHVlID4+IF8zMm4pICYgX3UzMl9tYXgpO1xuICAgIGNvbnN0IHdsID0gTnVtYmVyKHZhbHVlICYgX3UzMl9tYXgpO1xuICAgIGNvbnN0IGggPSBpc0xFID8gNCA6IDA7XG4gICAgY29uc3QgbCA9IGlzTEUgPyAwIDogNDtcbiAgICB2aWV3LnNldFVpbnQzMihieXRlT2Zmc2V0ICsgaCwgd2gsIGlzTEUpO1xuICAgIHZpZXcuc2V0VWludDMyKGJ5dGVPZmZzZXQgKyBsLCB3bCwgaXNMRSk7XG59XG4vLyBDaG9pY2U6IGEgPyBiIDogY1xuZXhwb3J0IGNvbnN0IENoaSA9IChhLCBiLCBjKSA9PiAoYSAmIGIpIF4gKH5hICYgYyk7XG4vLyBNYWpvcml0eSBmdW5jdGlvbiwgdHJ1ZSBpZiBhbnkgdHdvIGlucHVzdCBpcyB0cnVlXG5leHBvcnQgY29uc3QgTWFqID0gKGEsIGIsIGMpID0+IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcbi8qKlxuICogTWVya2xlLURhbWdhcmQgaGFzaCBjb25zdHJ1Y3Rpb24gYmFzZSBjbGFzcy5cbiAqIENvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIE1ENSwgUklQRU1ELCBTSEExLCBTSEEyLlxuICovXG5leHBvcnQgY2xhc3MgSGFzaE1EIGV4dGVuZHMgSGFzaCB7XG4gICAgY29uc3RydWN0b3IoYmxvY2tMZW4sIG91dHB1dExlbiwgcGFkT2Zmc2V0LCBpc0xFKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjtcbiAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRoaXMucGFkT2Zmc2V0ID0gcGFkT2Zmc2V0O1xuICAgICAgICB0aGlzLmlzTEUgPSBpc0xFO1xuICAgICAgICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGJsb2NrTGVuKTtcbiAgICAgICAgdGhpcy52aWV3ID0gY3JlYXRlVmlldyh0aGlzLmJ1ZmZlcik7XG4gICAgfVxuICAgIHVwZGF0ZShkYXRhKSB7XG4gICAgICAgIGV4aXN0cyh0aGlzKTtcbiAgICAgICAgY29uc3QgeyB2aWV3LCBidWZmZXIsIGJsb2NrTGVuIH0gPSB0aGlzO1xuICAgICAgICBkYXRhID0gdG9CeXRlcyhkYXRhKTtcbiAgICAgICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjspIHtcbiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpO1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoOiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBibG9jayBpbiBpbnB1dCwgY2FzdCBpdCB0byB2aWV3IGFuZCBwcm9jZXNzXG4gICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IGNyZWF0ZVZpZXcoZGF0YSk7XG4gICAgICAgICAgICAgICAgZm9yICg7IGJsb2NrTGVuIDw9IGxlbiAtIHBvczsgcG9zICs9IGJsb2NrTGVuKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoZGF0YVZpZXcsIHBvcyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIuc2V0KGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyB0YWtlKSwgdGhpcy5wb3MpO1xuICAgICAgICAgICAgdGhpcy5wb3MgKz0gdGFrZTtcbiAgICAgICAgICAgIHBvcyArPSB0YWtlO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbikge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHRoaXMucm91bmRDbGVhbigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGlnZXN0SW50byhvdXQpIHtcbiAgICAgICAgZXhpc3RzKHRoaXMpO1xuICAgICAgICBvdXRwdXQob3V0LCB0aGlzKTtcbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7XG4gICAgICAgIC8vIFBhZGRpbmdcbiAgICAgICAgLy8gV2UgY2FuIGF2b2lkIGFsbG9jYXRpb24gb2YgYnVmZmVyIGZvciBwYWRkaW5nIGNvbXBsZXRlbHkgaWYgaXRcbiAgICAgICAgLy8gd2FzIHByZXZpb3VzbHkgbm90IGFsbG9jYXRlZCBoZXJlLiBCdXQgaXQgd29uJ3QgY2hhbmdlIHBlcmZvcm1hbmNlLlxuICAgICAgICBjb25zdCB7IGJ1ZmZlciwgdmlldywgYmxvY2tMZW4sIGlzTEUgfSA9IHRoaXM7XG4gICAgICAgIGxldCB7IHBvcyB9ID0gdGhpcztcbiAgICAgICAgLy8gYXBwZW5kIHRoZSBiaXQgJzEnIHRvIHRoZSBtZXNzYWdlXG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSAwYjEwMDAwMDAwO1xuICAgICAgICB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MpLmZpbGwoMCk7XG4gICAgICAgIC8vIHdlIGhhdmUgbGVzcyB0aGFuIHBhZE9mZnNldCBsZWZ0IGluIGJ1ZmZlciwgc28gd2UgY2Fubm90IHB1dCBsZW5ndGggaW5cbiAgICAgICAgLy8gY3VycmVudCBibG9jaywgbmVlZCBwcm9jZXNzIGl0IGFuZCBwYWQgYWdhaW5cbiAgICAgICAgaWYgKHRoaXMucGFkT2Zmc2V0ID4gYmxvY2tMZW4gLSBwb3MpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTtcbiAgICAgICAgICAgIHBvcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGFkIHVudGlsIGZ1bGwgYmxvY2sgYnl0ZSB3aXRoIHplcm9zXG4gICAgICAgIGZvciAobGV0IGkgPSBwb3M7IGkgPCBibG9ja0xlbjsgaSsrKVxuICAgICAgICAgICAgYnVmZmVyW2ldID0gMDtcbiAgICAgICAgLy8gTm90ZTogc2hhNTEyIHJlcXVpcmVzIGxlbmd0aCB0byBiZSAxMjhiaXQgaW50ZWdlciwgYnV0IGxlbmd0aCBpbiBKUyB3aWxsIG92ZXJmbG93IGJlZm9yZSB0aGF0XG4gICAgICAgIC8vIFlvdSBuZWVkIHRvIHdyaXRlIGFyb3VuZCAyIGV4YWJ5dGVzICh1NjRfbWF4IC8gOCAvICgxMDI0Kio2KSkgZm9yIHRoaXMgdG8gaGFwcGVuLlxuICAgICAgICAvLyBTbyB3ZSBqdXN0IHdyaXRlIGxvd2VzdCA2NCBiaXRzIG9mIHRoYXQgdmFsdWUuXG4gICAgICAgIHNldEJpZ1VpbnQ2NCh2aWV3LCBibG9ja0xlbiAtIDgsIEJpZ0ludCh0aGlzLmxlbmd0aCAqIDgpLCBpc0xFKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzKHZpZXcsIDApO1xuICAgICAgICBjb25zdCBvdmlldyA9IGNyZWF0ZVZpZXcob3V0KTtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5vdXRwdXRMZW47XG4gICAgICAgIC8vIE5PVEU6IHdlIGRvIGRpdmlzaW9uIGJ5IDQgbGF0ZXIsIHdoaWNoIHNob3VsZCBiZSBmdXNlZCBpbiBzaW5nbGUgb3Agd2l0aCBtb2R1bG8gYnkgSklUXG4gICAgICAgIGlmIChsZW4gJSA0KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdfc2hhMjogb3V0cHV0TGVuIHNob3VsZCBiZSBhbGlnbmVkIHRvIDMyYml0Jyk7XG4gICAgICAgIGNvbnN0IG91dExlbiA9IGxlbiAvIDQ7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgaWYgKG91dExlbiA+IHN0YXRlLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignX3NoYTI6IG91dHB1dExlbiBiaWdnZXIgdGhhbiBzdGF0ZScpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dExlbjsgaSsrKVxuICAgICAgICAgICAgb3ZpZXcuc2V0VWludDMyKDQgKiBpLCBzdGF0ZVtpXSwgaXNMRSk7XG4gICAgfVxuICAgIGRpZ2VzdCgpIHtcbiAgICAgICAgY29uc3QgeyBidWZmZXIsIG91dHB1dExlbiB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5kaWdlc3RJbnRvKGJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IHJlcyA9IGJ1ZmZlci5zbGljZSgwLCBvdXRwdXRMZW4pO1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgX2Nsb25lSW50byh0bykge1xuICAgICAgICB0byB8fCAodG8gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpKTtcbiAgICAgICAgdG8uc2V0KC4uLnRoaXMuZ2V0KCkpO1xuICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXIsIGxlbmd0aCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgcG9zIH0gPSB0aGlzO1xuICAgICAgICB0by5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIHRvLnBvcyA9IHBvcztcbiAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICAgICAgdG8uZGVzdHJveWVkID0gZGVzdHJveWVkO1xuICAgICAgICBpZiAobGVuZ3RoICUgYmxvY2tMZW4pXG4gICAgICAgICAgICB0by5idWZmZXIuc2V0KGJ1ZmZlcik7XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fbWQuanMubWFwIiwiY29uc3QgVTMyX01BU0s2NCA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMiAqKiAzMiAtIDEpO1xuY29uc3QgXzMybiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMzIpO1xuLy8gV2UgYXJlIG5vdCB1c2luZyBCaWdVaW50NjRBcnJheSwgYmVjYXVzZSB0aGV5IGFyZSBleHRyZW1lbHkgc2xvdyBhcyBwZXIgMjAyMlxuZnVuY3Rpb24gZnJvbUJpZyhuLCBsZSA9IGZhbHNlKSB7XG4gICAgaWYgKGxlKVxuICAgICAgICByZXR1cm4geyBoOiBOdW1iZXIobiAmIFUzMl9NQVNLNjQpLCBsOiBOdW1iZXIoKG4gPj4gXzMybikgJiBVMzJfTUFTSzY0KSB9O1xuICAgIHJldHVybiB7IGg6IE51bWJlcigobiA+PiBfMzJuKSAmIFUzMl9NQVNLNjQpIHwgMCwgbDogTnVtYmVyKG4gJiBVMzJfTUFTSzY0KSB8IDAgfTtcbn1cbmZ1bmN0aW9uIHNwbGl0KGxzdCwgbGUgPSBmYWxzZSkge1xuICAgIGxldCBBaCA9IG5ldyBVaW50MzJBcnJheShsc3QubGVuZ3RoKTtcbiAgICBsZXQgQWwgPSBuZXcgVWludDMyQXJyYXkobHN0Lmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBoLCBsIH0gPSBmcm9tQmlnKGxzdFtpXSwgbGUpO1xuICAgICAgICBbQWhbaV0sIEFsW2ldXSA9IFtoLCBsXTtcbiAgICB9XG4gICAgcmV0dXJuIFtBaCwgQWxdO1xufVxuY29uc3QgdG9CaWcgPSAoaCwgbCkgPT4gKEJpZ0ludChoID4+PiAwKSA8PCBfMzJuKSB8IEJpZ0ludChsID4+PiAwKTtcbi8vIGZvciBTaGlmdCBpbiBbMCwgMzIpXG5jb25zdCBzaHJTSCA9IChoLCBfbCwgcykgPT4gaCA+Pj4gcztcbmNvbnN0IHNoclNMID0gKGgsIGwsIHMpID0+IChoIDw8ICgzMiAtIHMpKSB8IChsID4+PiBzKTtcbi8vIFJpZ2h0IHJvdGF0ZSBmb3IgU2hpZnQgaW4gWzEsIDMyKVxuY29uc3Qgcm90clNIID0gKGgsIGwsIHMpID0+IChoID4+PiBzKSB8IChsIDw8ICgzMiAtIHMpKTtcbmNvbnN0IHJvdHJTTCA9IChoLCBsLCBzKSA9PiAoaCA8PCAoMzIgLSBzKSkgfCAobCA+Pj4gcyk7XG4vLyBSaWdodCByb3RhdGUgZm9yIFNoaWZ0IGluICgzMiwgNjQpLCBOT1RFOiAzMiBpcyBzcGVjaWFsIGNhc2UuXG5jb25zdCByb3RyQkggPSAoaCwgbCwgcykgPT4gKGggPDwgKDY0IC0gcykpIHwgKGwgPj4+IChzIC0gMzIpKTtcbmNvbnN0IHJvdHJCTCA9IChoLCBsLCBzKSA9PiAoaCA+Pj4gKHMgLSAzMikpIHwgKGwgPDwgKDY0IC0gcykpO1xuLy8gUmlnaHQgcm90YXRlIGZvciBzaGlmdD09PTMyIChqdXN0IHN3YXBzIGwmaClcbmNvbnN0IHJvdHIzMkggPSAoX2gsIGwpID0+IGw7XG5jb25zdCByb3RyMzJMID0gKGgsIF9sKSA9PiBoO1xuLy8gTGVmdCByb3RhdGUgZm9yIFNoaWZ0IGluIFsxLCAzMilcbmNvbnN0IHJvdGxTSCA9IChoLCBsLCBzKSA9PiAoaCA8PCBzKSB8IChsID4+PiAoMzIgLSBzKSk7XG5jb25zdCByb3RsU0wgPSAoaCwgbCwgcykgPT4gKGwgPDwgcykgfCAoaCA+Pj4gKDMyIC0gcykpO1xuLy8gTGVmdCByb3RhdGUgZm9yIFNoaWZ0IGluICgzMiwgNjQpLCBOT1RFOiAzMiBpcyBzcGVjaWFsIGNhc2UuXG5jb25zdCByb3RsQkggPSAoaCwgbCwgcykgPT4gKGwgPDwgKHMgLSAzMikpIHwgKGggPj4+ICg2NCAtIHMpKTtcbmNvbnN0IHJvdGxCTCA9IChoLCBsLCBzKSA9PiAoaCA8PCAocyAtIDMyKSkgfCAobCA+Pj4gKDY0IC0gcykpO1xuLy8gSlMgdXNlcyAzMi1iaXQgc2lnbmVkIGludGVnZXJzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMgd2hpY2ggbWVhbnMgd2UgY2Fubm90XG4vLyBzaW1wbGUgdGFrZSBjYXJyeSBvdXQgb2YgbG93IGJpdCBzdW0gYnkgc2hpZnQsIHdlIG5lZWQgdG8gdXNlIGRpdmlzaW9uLlxuZnVuY3Rpb24gYWRkKEFoLCBBbCwgQmgsIEJsKSB7XG4gICAgY29uc3QgbCA9IChBbCA+Pj4gMCkgKyAoQmwgPj4+IDApO1xuICAgIHJldHVybiB7IGg6IChBaCArIEJoICsgKChsIC8gMiAqKiAzMikgfCAwKSkgfCAwLCBsOiBsIHwgMCB9O1xufVxuLy8gQWRkaXRpb24gd2l0aCBtb3JlIHRoYW4gMiBlbGVtZW50c1xuY29uc3QgYWRkM0wgPSAoQWwsIEJsLCBDbCkgPT4gKEFsID4+PiAwKSArIChCbCA+Pj4gMCkgKyAoQ2wgPj4+IDApO1xuY29uc3QgYWRkM0ggPSAobG93LCBBaCwgQmgsIENoKSA9PiAoQWggKyBCaCArIENoICsgKChsb3cgLyAyICoqIDMyKSB8IDApKSB8IDA7XG5jb25zdCBhZGQ0TCA9IChBbCwgQmwsIENsLCBEbCkgPT4gKEFsID4+PiAwKSArIChCbCA+Pj4gMCkgKyAoQ2wgPj4+IDApICsgKERsID4+PiAwKTtcbmNvbnN0IGFkZDRIID0gKGxvdywgQWgsIEJoLCBDaCwgRGgpID0+IChBaCArIEJoICsgQ2ggKyBEaCArICgobG93IC8gMiAqKiAzMikgfCAwKSkgfCAwO1xuY29uc3QgYWRkNUwgPSAoQWwsIEJsLCBDbCwgRGwsIEVsKSA9PiAoQWwgPj4+IDApICsgKEJsID4+PiAwKSArIChDbCA+Pj4gMCkgKyAoRGwgPj4+IDApICsgKEVsID4+PiAwKTtcbmNvbnN0IGFkZDVIID0gKGxvdywgQWgsIEJoLCBDaCwgRGgsIEVoKSA9PiAoQWggKyBCaCArIENoICsgRGggKyBFaCArICgobG93IC8gMiAqKiAzMikgfCAwKSkgfCAwO1xuLy8gcHJldHRpZXItaWdub3JlXG5leHBvcnQgeyBmcm9tQmlnLCBzcGxpdCwgdG9CaWcsIHNoclNILCBzaHJTTCwgcm90clNILCByb3RyU0wsIHJvdHJCSCwgcm90ckJMLCByb3RyMzJILCByb3RyMzJMLCByb3RsU0gsIHJvdGxTTCwgcm90bEJILCByb3RsQkwsIGFkZCwgYWRkM0wsIGFkZDNILCBhZGQ0TCwgYWRkNEgsIGFkZDVILCBhZGQ1TCwgfTtcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgdTY0ID0ge1xuICAgIGZyb21CaWcsIHNwbGl0LCB0b0JpZyxcbiAgICBzaHJTSCwgc2hyU0wsXG4gICAgcm90clNILCByb3RyU0wsIHJvdHJCSCwgcm90ckJMLFxuICAgIHJvdHIzMkgsIHJvdHIzMkwsXG4gICAgcm90bFNILCByb3RsU0wsIHJvdGxCSCwgcm90bEJMLFxuICAgIGFkZCwgYWRkM0wsIGFkZDNILCBhZGQ0TCwgYWRkNEgsIGFkZDVILCBhZGQ1TCxcbn07XG5leHBvcnQgZGVmYXVsdCB1NjQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fdTY0LmpzLm1hcCIsImltcG9ydCB7IEJMQUtFLCBTSUdNQSB9IGZyb20gJy4vX2JsYWtlLmpzJztcbmltcG9ydCB1NjQgZnJvbSAnLi9fdTY0LmpzJztcbmltcG9ydCB7IHRvQnl0ZXMsIHUzMiwgd3JhcENvbnN0cnVjdG9yV2l0aE9wdHMsIGJ5dGVTd2FwSWZCRSB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gU2FtZSBhcyBTSEEtNTEyIGJ1dCBMRVxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBCMkJfSVYgPSAvKiBAX19QVVJFX18gKi8gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweGYzYmNjOTA4LCAweDZhMDllNjY3LCAweDg0Y2FhNzNiLCAweGJiNjdhZTg1LCAweGZlOTRmODJiLCAweDNjNmVmMzcyLCAweDVmMWQzNmYxLCAweGE1NGZmNTNhLFxuICAgIDB4YWRlNjgyZDEsIDB4NTEwZTUyN2YsIDB4MmIzZTZjMWYsIDB4OWIwNTY4OGMsIDB4ZmI0MWJkNmIsIDB4MWY4M2Q5YWIsIDB4MTM3ZTIxNzksIDB4NWJlMGNkMTlcbl0pO1xuLy8gVGVtcG9yYXJ5IGJ1ZmZlclxuY29uc3QgQkJVRiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoMzIpO1xuLy8gTWl4aW5nIGZ1bmN0aW9uIEcgc3BsaXR0ZWQgaW4gdHdvIGhhbGZzXG5mdW5jdGlvbiBHMWIoYSwgYiwgYywgZCwgbXNnLCB4KSB7XG4gICAgLy8gTk9URTogViBpcyBMRSBoZXJlXG4gICAgY29uc3QgWGwgPSBtc2dbeF0sIFhoID0gbXNnW3ggKyAxXTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IEFsID0gQkJVRlsyICogYV0sIEFoID0gQkJVRlsyICogYSArIDFdOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBsZXQgQmwgPSBCQlVGWzIgKiBiXSwgQmggPSBCQlVGWzIgKiBiICsgMV07IC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGxldCBDbCA9IEJCVUZbMiAqIGNdLCBDaCA9IEJCVUZbMiAqIGMgKyAxXTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IERsID0gQkJVRlsyICogZF0sIERoID0gQkJVRlsyICogZCArIDFdOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAvLyB2W2FdID0gKHZbYV0gKyB2W2JdICsgeCkgfCAwO1xuICAgIGxldCBsbCA9IHU2NC5hZGQzTChBbCwgQmwsIFhsKTtcbiAgICBBaCA9IHU2NC5hZGQzSChsbCwgQWgsIEJoLCBYaCk7XG4gICAgQWwgPSBsbCB8IDA7XG4gICAgLy8gdltkXSA9IHJvdHIodltkXSBeIHZbYV0sIDMyKVxuICAgICh7IERoLCBEbCB9ID0geyBEaDogRGggXiBBaCwgRGw6IERsIF4gQWwgfSk7XG4gICAgKHsgRGgsIERsIH0gPSB7IERoOiB1NjQucm90cjMySChEaCwgRGwpLCBEbDogdTY0LnJvdHIzMkwoRGgsIERsKSB9KTtcbiAgICAvLyB2W2NdID0gKHZbY10gKyB2W2RdKSB8IDA7XG4gICAgKHsgaDogQ2gsIGw6IENsIH0gPSB1NjQuYWRkKENoLCBDbCwgRGgsIERsKSk7XG4gICAgLy8gdltiXSA9IHJvdHIodltiXSBeIHZbY10sIDI0KVxuICAgICh7IEJoLCBCbCB9ID0geyBCaDogQmggXiBDaCwgQmw6IEJsIF4gQ2wgfSk7XG4gICAgKHsgQmgsIEJsIH0gPSB7IEJoOiB1NjQucm90clNIKEJoLCBCbCwgMjQpLCBCbDogdTY0LnJvdHJTTChCaCwgQmwsIDI0KSB9KTtcbiAgICAoQkJVRlsyICogYV0gPSBBbCksIChCQlVGWzIgKiBhICsgMV0gPSBBaCk7XG4gICAgKEJCVUZbMiAqIGJdID0gQmwpLCAoQkJVRlsyICogYiArIDFdID0gQmgpO1xuICAgIChCQlVGWzIgKiBjXSA9IENsKSwgKEJCVUZbMiAqIGMgKyAxXSA9IENoKTtcbiAgICAoQkJVRlsyICogZF0gPSBEbCksIChCQlVGWzIgKiBkICsgMV0gPSBEaCk7XG59XG5mdW5jdGlvbiBHMmIoYSwgYiwgYywgZCwgbXNnLCB4KSB7XG4gICAgLy8gTk9URTogViBpcyBMRSBoZXJlXG4gICAgY29uc3QgWGwgPSBtc2dbeF0sIFhoID0gbXNnW3ggKyAxXTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IEFsID0gQkJVRlsyICogYV0sIEFoID0gQkJVRlsyICogYSArIDFdOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBsZXQgQmwgPSBCQlVGWzIgKiBiXSwgQmggPSBCQlVGWzIgKiBiICsgMV07IC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGxldCBDbCA9IEJCVUZbMiAqIGNdLCBDaCA9IEJCVUZbMiAqIGMgKyAxXTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IERsID0gQkJVRlsyICogZF0sIERoID0gQkJVRlsyICogZCArIDFdOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAvLyB2W2FdID0gKHZbYV0gKyB2W2JdICsgeCkgfCAwO1xuICAgIGxldCBsbCA9IHU2NC5hZGQzTChBbCwgQmwsIFhsKTtcbiAgICBBaCA9IHU2NC5hZGQzSChsbCwgQWgsIEJoLCBYaCk7XG4gICAgQWwgPSBsbCB8IDA7XG4gICAgLy8gdltkXSA9IHJvdHIodltkXSBeIHZbYV0sIDE2KVxuICAgICh7IERoLCBEbCB9ID0geyBEaDogRGggXiBBaCwgRGw6IERsIF4gQWwgfSk7XG4gICAgKHsgRGgsIERsIH0gPSB7IERoOiB1NjQucm90clNIKERoLCBEbCwgMTYpLCBEbDogdTY0LnJvdHJTTChEaCwgRGwsIDE2KSB9KTtcbiAgICAvLyB2W2NdID0gKHZbY10gKyB2W2RdKSB8IDA7XG4gICAgKHsgaDogQ2gsIGw6IENsIH0gPSB1NjQuYWRkKENoLCBDbCwgRGgsIERsKSk7XG4gICAgLy8gdltiXSA9IHJvdHIodltiXSBeIHZbY10sIDYzKVxuICAgICh7IEJoLCBCbCB9ID0geyBCaDogQmggXiBDaCwgQmw6IEJsIF4gQ2wgfSk7XG4gICAgKHsgQmgsIEJsIH0gPSB7IEJoOiB1NjQucm90ckJIKEJoLCBCbCwgNjMpLCBCbDogdTY0LnJvdHJCTChCaCwgQmwsIDYzKSB9KTtcbiAgICAoQkJVRlsyICogYV0gPSBBbCksIChCQlVGWzIgKiBhICsgMV0gPSBBaCk7XG4gICAgKEJCVUZbMiAqIGJdID0gQmwpLCAoQkJVRlsyICogYiArIDFdID0gQmgpO1xuICAgIChCQlVGWzIgKiBjXSA9IENsKSwgKEJCVUZbMiAqIGMgKyAxXSA9IENoKTtcbiAgICAoQkJVRlsyICogZF0gPSBEbCksIChCQlVGWzIgKiBkICsgMV0gPSBEaCk7XG59XG5jbGFzcyBCTEFLRTJiIGV4dGVuZHMgQkxBS0Uge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgICAgICBzdXBlcigxMjgsIG9wdHMuZGtMZW4gPT09IHVuZGVmaW5lZCA/IDY0IDogb3B0cy5ka0xlbiwgb3B0cywgNjQsIDE2LCAxNik7XG4gICAgICAgIC8vIFNhbWUgYXMgU0hBLTUxMiwgYnV0IExFXG4gICAgICAgIHRoaXMudjBsID0gQjJCX0lWWzBdIHwgMDtcbiAgICAgICAgdGhpcy52MGggPSBCMkJfSVZbMV0gfCAwO1xuICAgICAgICB0aGlzLnYxbCA9IEIyQl9JVlsyXSB8IDA7XG4gICAgICAgIHRoaXMudjFoID0gQjJCX0lWWzNdIHwgMDtcbiAgICAgICAgdGhpcy52MmwgPSBCMkJfSVZbNF0gfCAwO1xuICAgICAgICB0aGlzLnYyaCA9IEIyQl9JVls1XSB8IDA7XG4gICAgICAgIHRoaXMudjNsID0gQjJCX0lWWzZdIHwgMDtcbiAgICAgICAgdGhpcy52M2ggPSBCMkJfSVZbN10gfCAwO1xuICAgICAgICB0aGlzLnY0bCA9IEIyQl9JVls4XSB8IDA7XG4gICAgICAgIHRoaXMudjRoID0gQjJCX0lWWzldIHwgMDtcbiAgICAgICAgdGhpcy52NWwgPSBCMkJfSVZbMTBdIHwgMDtcbiAgICAgICAgdGhpcy52NWggPSBCMkJfSVZbMTFdIHwgMDtcbiAgICAgICAgdGhpcy52NmwgPSBCMkJfSVZbMTJdIHwgMDtcbiAgICAgICAgdGhpcy52NmggPSBCMkJfSVZbMTNdIHwgMDtcbiAgICAgICAgdGhpcy52N2wgPSBCMkJfSVZbMTRdIHwgMDtcbiAgICAgICAgdGhpcy52N2ggPSBCMkJfSVZbMTVdIHwgMDtcbiAgICAgICAgY29uc3Qga2V5TGVuZ3RoID0gb3B0cy5rZXkgPyBvcHRzLmtleS5sZW5ndGggOiAwO1xuICAgICAgICB0aGlzLnYwbCBePSB0aGlzLm91dHB1dExlbiB8IChrZXlMZW5ndGggPDwgOCkgfCAoMHgwMSA8PCAxNikgfCAoMHgwMSA8PCAyNCk7XG4gICAgICAgIGlmIChvcHRzLnNhbHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNhbHQgPSB1MzIodG9CeXRlcyhvcHRzLnNhbHQpKTtcbiAgICAgICAgICAgIHRoaXMudjRsIF49IGJ5dGVTd2FwSWZCRShzYWx0WzBdKTtcbiAgICAgICAgICAgIHRoaXMudjRoIF49IGJ5dGVTd2FwSWZCRShzYWx0WzFdKTtcbiAgICAgICAgICAgIHRoaXMudjVsIF49IGJ5dGVTd2FwSWZCRShzYWx0WzJdKTtcbiAgICAgICAgICAgIHRoaXMudjVoIF49IGJ5dGVTd2FwSWZCRShzYWx0WzNdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5wZXJzb25hbGl6YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBlcnMgPSB1MzIodG9CeXRlcyhvcHRzLnBlcnNvbmFsaXphdGlvbikpO1xuICAgICAgICAgICAgdGhpcy52NmwgXj0gYnl0ZVN3YXBJZkJFKHBlcnNbMF0pO1xuICAgICAgICAgICAgdGhpcy52NmggXj0gYnl0ZVN3YXBJZkJFKHBlcnNbMV0pO1xuICAgICAgICAgICAgdGhpcy52N2wgXj0gYnl0ZVN3YXBJZkJFKHBlcnNbMl0pO1xuICAgICAgICAgICAgdGhpcy52N2ggXj0gYnl0ZVN3YXBJZkJFKHBlcnNbM10pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmtleSkge1xuICAgICAgICAgICAgLy8gUGFkIHRvIGJsb2NrTGVuIGFuZCB1cGRhdGVcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW4pO1xuICAgICAgICAgICAgdG1wLnNldCh0b0J5dGVzKG9wdHMua2V5KSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0bXApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGdldCgpIHtcbiAgICAgICAgbGV0IHsgdjBsLCB2MGgsIHYxbCwgdjFoLCB2MmwsIHYyaCwgdjNsLCB2M2gsIHY0bCwgdjRoLCB2NWwsIHY1aCwgdjZsLCB2NmgsIHY3bCwgdjdoIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW3YwbCwgdjBoLCB2MWwsIHYxaCwgdjJsLCB2MmgsIHYzbCwgdjNoLCB2NGwsIHY0aCwgdjVsLCB2NWgsIHY2bCwgdjZoLCB2N2wsIHY3aF07XG4gICAgfVxuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHNldCh2MGwsIHYwaCwgdjFsLCB2MWgsIHYybCwgdjJoLCB2M2wsIHYzaCwgdjRsLCB2NGgsIHY1bCwgdjVoLCB2NmwsIHY2aCwgdjdsLCB2N2gpIHtcbiAgICAgICAgdGhpcy52MGwgPSB2MGwgfCAwO1xuICAgICAgICB0aGlzLnYwaCA9IHYwaCB8IDA7XG4gICAgICAgIHRoaXMudjFsID0gdjFsIHwgMDtcbiAgICAgICAgdGhpcy52MWggPSB2MWggfCAwO1xuICAgICAgICB0aGlzLnYybCA9IHYybCB8IDA7XG4gICAgICAgIHRoaXMudjJoID0gdjJoIHwgMDtcbiAgICAgICAgdGhpcy52M2wgPSB2M2wgfCAwO1xuICAgICAgICB0aGlzLnYzaCA9IHYzaCB8IDA7XG4gICAgICAgIHRoaXMudjRsID0gdjRsIHwgMDtcbiAgICAgICAgdGhpcy52NGggPSB2NGggfCAwO1xuICAgICAgICB0aGlzLnY1bCA9IHY1bCB8IDA7XG4gICAgICAgIHRoaXMudjVoID0gdjVoIHwgMDtcbiAgICAgICAgdGhpcy52NmwgPSB2NmwgfCAwO1xuICAgICAgICB0aGlzLnY2aCA9IHY2aCB8IDA7XG4gICAgICAgIHRoaXMudjdsID0gdjdsIHwgMDtcbiAgICAgICAgdGhpcy52N2ggPSB2N2ggfCAwO1xuICAgIH1cbiAgICBjb21wcmVzcyhtc2csIG9mZnNldCwgaXNMYXN0KSB7XG4gICAgICAgIHRoaXMuZ2V0KCkuZm9yRWFjaCgodiwgaSkgPT4gKEJCVUZbaV0gPSB2KSk7IC8vIEZpcnN0IGhhbGYgZnJvbSBzdGF0ZS5cbiAgICAgICAgQkJVRi5zZXQoQjJCX0lWLCAxNik7IC8vIFNlY29uZCBoYWxmIGZyb20gSVYuXG4gICAgICAgIGxldCB7IGgsIGwgfSA9IHU2NC5mcm9tQmlnKEJpZ0ludCh0aGlzLmxlbmd0aCkpO1xuICAgICAgICBCQlVGWzI0XSA9IEIyQl9JVls4XSBeIGw7IC8vIExvdyB3b3JkIG9mIHRoZSBvZmZzZXQuXG4gICAgICAgIEJCVUZbMjVdID0gQjJCX0lWWzldIF4gaDsgLy8gSGlnaCB3b3JkLlxuICAgICAgICAvLyBJbnZlcnQgYWxsIGJpdHMgZm9yIGxhc3QgYmxvY2tcbiAgICAgICAgaWYgKGlzTGFzdCkge1xuICAgICAgICAgICAgQkJVRlsyOF0gPSB+QkJVRlsyOF07XG4gICAgICAgICAgICBCQlVGWzI5XSA9IH5CQlVGWzI5XTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgIGNvbnN0IHMgPSBTSUdNQTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBHMWIoMCwgNCwgOCwgMTIsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMmIoMCwgNCwgOCwgMTIsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMWIoMSwgNSwgOSwgMTMsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMmIoMSwgNSwgOSwgMTMsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMWIoMiwgNiwgMTAsIDE0LCBtc2csIG9mZnNldCArIDIgKiBzW2orK10pO1xuICAgICAgICAgICAgRzJiKDIsIDYsIDEwLCAxNCwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcxYigzLCA3LCAxMSwgMTUsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMmIoMywgNywgMTEsIDE1LCBtc2csIG9mZnNldCArIDIgKiBzW2orK10pO1xuICAgICAgICAgICAgRzFiKDAsIDUsIDEwLCAxNSwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcyYigwLCA1LCAxMCwgMTUsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMWIoMSwgNiwgMTEsIDEyLCBtc2csIG9mZnNldCArIDIgKiBzW2orK10pO1xuICAgICAgICAgICAgRzJiKDEsIDYsIDExLCAxMiwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcxYigyLCA3LCA4LCAxMywgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcyYigyLCA3LCA4LCAxMywgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcxYigzLCA0LCA5LCAxNCwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcyYigzLCA0LCA5LCAxNCwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnYwbCBePSBCQlVGWzBdIF4gQkJVRlsxNl07XG4gICAgICAgIHRoaXMudjBoIF49IEJCVUZbMV0gXiBCQlVGWzE3XTtcbiAgICAgICAgdGhpcy52MWwgXj0gQkJVRlsyXSBeIEJCVUZbMThdO1xuICAgICAgICB0aGlzLnYxaCBePSBCQlVGWzNdIF4gQkJVRlsxOV07XG4gICAgICAgIHRoaXMudjJsIF49IEJCVUZbNF0gXiBCQlVGWzIwXTtcbiAgICAgICAgdGhpcy52MmggXj0gQkJVRls1XSBeIEJCVUZbMjFdO1xuICAgICAgICB0aGlzLnYzbCBePSBCQlVGWzZdIF4gQkJVRlsyMl07XG4gICAgICAgIHRoaXMudjNoIF49IEJCVUZbN10gXiBCQlVGWzIzXTtcbiAgICAgICAgdGhpcy52NGwgXj0gQkJVRls4XSBeIEJCVUZbMjRdO1xuICAgICAgICB0aGlzLnY0aCBePSBCQlVGWzldIF4gQkJVRlsyNV07XG4gICAgICAgIHRoaXMudjVsIF49IEJCVUZbMTBdIF4gQkJVRlsyNl07XG4gICAgICAgIHRoaXMudjVoIF49IEJCVUZbMTFdIF4gQkJVRlsyN107XG4gICAgICAgIHRoaXMudjZsIF49IEJCVUZbMTJdIF4gQkJVRlsyOF07XG4gICAgICAgIHRoaXMudjZoIF49IEJCVUZbMTNdIF4gQkJVRlsyOV07XG4gICAgICAgIHRoaXMudjdsIF49IEJCVUZbMTRdIF4gQkJVRlszMF07XG4gICAgICAgIHRoaXMudjdoIF49IEJCVUZbMTVdIF4gQkJVRlszMV07XG4gICAgICAgIEJCVUYuZmlsbCgwKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1ZmZlcjMyLmZpbGwoMCk7XG4gICAgICAgIHRoaXMuc2V0KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApO1xuICAgIH1cbn1cbi8qKlxuICogQkxBS0UyYiAtIG9wdGltaXplZCBmb3IgNjQtYml0IHBsYXRmb3Jtcy4gSlMgZG9lc24ndCBoYXZlIHVpbnQ2NCwgc28gaXQncyBzbG93ZXIgdGhhbiBCTEFLRTJzLlxuICogQHBhcmFtIG1zZyAtIG1lc3NhZ2UgdGhhdCB3b3VsZCBiZSBoYXNoZWRcbiAqIEBwYXJhbSBvcHRzIC0gZGtMZW4sIGtleSwgc2FsdCwgcGVyc29uYWxpemF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBibGFrZTJiID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcldpdGhPcHRzKChvcHRzKSA9PiBuZXcgQkxBS0UyYihvcHRzKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ibGFrZTJiLmpzLm1hcCIsImV4cG9ydCBjb25zdCBjcnlwdG8gPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcgJiYgJ2NyeXB0bycgaW4gZ2xvYmFsVGhpcyA/IGdsb2JhbFRoaXMuY3J5cHRvIDogdW5kZWZpbmVkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3J5cHRvLmpzLm1hcCIsImltcG9ydCB7IGhhc2ggYXMgYXNzZXJ0SGFzaCwgYnl0ZXMgYXMgYXNzZXJ0Qnl0ZXMsIGV4aXN0cyBhcyBhc3NlcnRFeGlzdHMgfSBmcm9tICcuL19hc3NlcnQuanMnO1xuaW1wb3J0IHsgSGFzaCwgdG9CeXRlcyB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gSE1BQyAoUkZDIDIxMDQpXG5leHBvcnQgY2xhc3MgSE1BQyBleHRlbmRzIEhhc2gge1xuICAgIGNvbnN0cnVjdG9yKGhhc2gsIF9rZXkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICBhc3NlcnRIYXNoKGhhc2gpO1xuICAgICAgICBjb25zdCBrZXkgPSB0b0J5dGVzKF9rZXkpO1xuICAgICAgICB0aGlzLmlIYXNoID0gaGFzaC5jcmVhdGUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlIYXNoLnVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgaW5zdGFuY2Ugb2YgY2xhc3Mgd2hpY2ggZXh0ZW5kcyB1dGlscy5IYXNoJyk7XG4gICAgICAgIHRoaXMuYmxvY2tMZW4gPSB0aGlzLmlIYXNoLmJsb2NrTGVuO1xuICAgICAgICB0aGlzLm91dHB1dExlbiA9IHRoaXMuaUhhc2gub3V0cHV0TGVuO1xuICAgICAgICBjb25zdCBibG9ja0xlbiA9IHRoaXMuYmxvY2tMZW47XG4gICAgICAgIGNvbnN0IHBhZCA9IG5ldyBVaW50OEFycmF5KGJsb2NrTGVuKTtcbiAgICAgICAgLy8gYmxvY2tMZW4gY2FuIGJlIGJpZ2dlciB0aGFuIG91dHB1dExlblxuICAgICAgICBwYWQuc2V0KGtleS5sZW5ndGggPiBibG9ja0xlbiA/IGhhc2guY3JlYXRlKCkudXBkYXRlKGtleSkuZGlnZXN0KCkgOiBrZXkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHBhZFtpXSBePSAweDM2O1xuICAgICAgICB0aGlzLmlIYXNoLnVwZGF0ZShwYWQpO1xuICAgICAgICAvLyBCeSBkb2luZyB1cGRhdGUgKHByb2Nlc3Npbmcgb2YgZmlyc3QgYmxvY2spIG9mIG91dGVyIGhhc2ggaGVyZSB3ZSBjYW4gcmUtdXNlIGl0IGJldHdlZW4gbXVsdGlwbGUgY2FsbHMgdmlhIGNsb25lXG4gICAgICAgIHRoaXMub0hhc2ggPSBoYXNoLmNyZWF0ZSgpO1xuICAgICAgICAvLyBVbmRvIGludGVybmFsIFhPUiAmJiBhcHBseSBvdXRlciBYT1JcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBwYWRbaV0gXj0gMHgzNiBeIDB4NWM7XG4gICAgICAgIHRoaXMub0hhc2gudXBkYXRlKHBhZCk7XG4gICAgICAgIHBhZC5maWxsKDApO1xuICAgIH1cbiAgICB1cGRhdGUoYnVmKSB7XG4gICAgICAgIGFzc2VydEV4aXN0cyh0aGlzKTtcbiAgICAgICAgdGhpcy5pSGFzaC51cGRhdGUoYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRpZ2VzdEludG8ob3V0KSB7XG4gICAgICAgIGFzc2VydEV4aXN0cyh0aGlzKTtcbiAgICAgICAgYXNzZXJ0Qnl0ZXMob3V0LCB0aGlzLm91dHB1dExlbik7XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlIYXNoLmRpZ2VzdEludG8ob3V0KTtcbiAgICAgICAgdGhpcy5vSGFzaC51cGRhdGUob3V0KTtcbiAgICAgICAgdGhpcy5vSGFzaC5kaWdlc3RJbnRvKG91dCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICBkaWdlc3QoKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IG5ldyBVaW50OEFycmF5KHRoaXMub0hhc2gub3V0cHV0TGVuKTtcbiAgICAgICAgdGhpcy5kaWdlc3RJbnRvKG91dCk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIF9jbG9uZUludG8odG8pIHtcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBpbnN0YW5jZSB3aXRob3V0IGNhbGxpbmcgY29uc3RydWN0b3Igc2luY2Uga2V5IGFscmVhZHkgaW4gc3RhdGUgYW5kIHdlIGRvbid0IGtub3cgaXQuXG4gICAgICAgIHRvIHx8ICh0byA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7fSkpO1xuICAgICAgICBjb25zdCB7IG9IYXNoLCBpSGFzaCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgYmxvY2tMZW4sIG91dHB1dExlbiB9ID0gdGhpcztcbiAgICAgICAgdG8gPSB0bztcbiAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICAgICAgdG8uZGVzdHJveWVkID0gZGVzdHJveWVkO1xuICAgICAgICB0by5ibG9ja0xlbiA9IGJsb2NrTGVuO1xuICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRvLm9IYXNoID0gb0hhc2guX2Nsb25lSW50byh0by5vSGFzaCk7XG4gICAgICAgIHRvLmlIYXNoID0gaUhhc2guX2Nsb25lSW50byh0by5pSGFzaCk7XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9IYXNoLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pSGFzaC5kZXN0cm95KCk7XG4gICAgfVxufVxuLyoqXG4gKiBITUFDOiBSRkMyMTA0IG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZS5cbiAqIEBwYXJhbSBoYXNoIC0gZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSB1c2VkIGUuZy4gc2hhMjU2XG4gKiBAcGFyYW0ga2V5IC0gbWVzc2FnZSBrZXlcbiAqIEBwYXJhbSBtZXNzYWdlIC0gbWVzc2FnZSBkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBobWFjID0gKGhhc2gsIGtleSwgbWVzc2FnZSkgPT4gbmV3IEhNQUMoaGFzaCwga2V5KS51cGRhdGUobWVzc2FnZSkuZGlnZXN0KCk7XG5obWFjLmNyZWF0ZSA9IChoYXNoLCBrZXkpID0+IG5ldyBITUFDKGhhc2gsIGtleSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1obWFjLmpzLm1hcCIsImltcG9ydCB7IEhhc2hNRCwgQ2hpLCBNYWogfSBmcm9tICcuL19tZC5qcyc7XG5pbXBvcnQgeyByb3RyLCB3cmFwQ29uc3RydWN0b3IgfSBmcm9tICcuL3V0aWxzLmpzJztcbi8vIFNIQTItMjU2IG5lZWQgdG8gdHJ5IDJeMTI4IGhhc2hlcyB0byBleGVjdXRlIGJpcnRoZGF5IGF0dGFjay5cbi8vIEJUQyBuZXR3b3JrIGlzIGRvaW5nIDJeNjcgaGFzaGVzL3NlYyBhcyBwZXIgZWFybHkgMjAyMy5cbi8vIFJvdW5kIGNvbnN0YW50czpcbi8vIGZpcnN0IDMyIGJpdHMgb2YgdGhlIGZyYWN0aW9uYWwgcGFydHMgb2YgdGhlIGN1YmUgcm9vdHMgb2YgdGhlIGZpcnN0IDY0IHByaW1lcyAyLi4zMTEpXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFNIQTI1Nl9LID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbXG4gICAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgICAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLCAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LFxuICAgIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsXG4gICAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgICAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLCAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LFxuICAgIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsXG4gICAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgICAweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4LCAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyXG5dKTtcbi8vIEluaXRpYWwgc3RhdGU6XG4vLyBmaXJzdCAzMiBiaXRzIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnRzIG9mIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlIGZpcnN0IDggcHJpbWVzIDIuLjE5XG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFNIQTI1Nl9JViA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4NmEwOWU2NjcsIDB4YmI2N2FlODUsIDB4M2M2ZWYzNzIsIDB4YTU0ZmY1M2EsIDB4NTEwZTUyN2YsIDB4OWIwNTY4OGMsIDB4MWY4M2Q5YWIsIDB4NWJlMGNkMTlcbl0pO1xuLy8gVGVtcG9yYXJ5IGJ1ZmZlciwgbm90IHVzZWQgdG8gc3RvcmUgYW55dGhpbmcgYmV0d2VlbiBydW5zXG4vLyBOYW1lZCB0aGlzIHdheSBiZWNhdXNlIGl0IG1hdGNoZXMgc3BlY2lmaWNhdGlvbi5cbmNvbnN0IFNIQTI1Nl9XID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheSg2NCk7XG5jbGFzcyBTSEEyNTYgZXh0ZW5kcyBIYXNoTUQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcig2NCwgMzIsIDgsIGZhbHNlKTtcbiAgICAgICAgLy8gV2UgY2Fubm90IHVzZSBhcnJheSBoZXJlIHNpbmNlIGFycmF5IGFsbG93cyBpbmRleGluZyBieSB2YXJpYWJsZVxuICAgICAgICAvLyB3aGljaCBtZWFucyBvcHRpbWl6ZXIvY29tcGlsZXIgY2Fubm90IHVzZSByZWdpc3RlcnMuXG4gICAgICAgIHRoaXMuQSA9IFNIQTI1Nl9JVlswXSB8IDA7XG4gICAgICAgIHRoaXMuQiA9IFNIQTI1Nl9JVlsxXSB8IDA7XG4gICAgICAgIHRoaXMuQyA9IFNIQTI1Nl9JVlsyXSB8IDA7XG4gICAgICAgIHRoaXMuRCA9IFNIQTI1Nl9JVlszXSB8IDA7XG4gICAgICAgIHRoaXMuRSA9IFNIQTI1Nl9JVls0XSB8IDA7XG4gICAgICAgIHRoaXMuRiA9IFNIQTI1Nl9JVls1XSB8IDA7XG4gICAgICAgIHRoaXMuRyA9IFNIQTI1Nl9JVls2XSB8IDA7XG4gICAgICAgIHRoaXMuSCA9IFNIQTI1Nl9JVls3XSB8IDA7XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBBLCBCLCBDLCBELCBFLCBGLCBHLCBIIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW0EsIEIsIEMsIEQsIEUsIEYsIEcsIEhdO1xuICAgIH1cbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBzZXQoQSwgQiwgQywgRCwgRSwgRiwgRywgSCkge1xuICAgICAgICB0aGlzLkEgPSBBIHwgMDtcbiAgICAgICAgdGhpcy5CID0gQiB8IDA7XG4gICAgICAgIHRoaXMuQyA9IEMgfCAwO1xuICAgICAgICB0aGlzLkQgPSBEIHwgMDtcbiAgICAgICAgdGhpcy5FID0gRSB8IDA7XG4gICAgICAgIHRoaXMuRiA9IEYgfCAwO1xuICAgICAgICB0aGlzLkcgPSBHIHwgMDtcbiAgICAgICAgdGhpcy5IID0gSCB8IDA7XG4gICAgfVxuICAgIHByb2Nlc3Modmlldywgb2Zmc2V0KSB7XG4gICAgICAgIC8vIEV4dGVuZCB0aGUgZmlyc3QgMTYgd29yZHMgaW50byB0aGUgcmVtYWluaW5nIDQ4IHdvcmRzIHdbMTYuLjYzXSBvZiB0aGUgbWVzc2FnZSBzY2hlZHVsZSBhcnJheVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyssIG9mZnNldCArPSA0KVxuICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE2OyBpIDwgNjQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgVzE1ID0gU0hBMjU2X1dbaSAtIDE1XTtcbiAgICAgICAgICAgIGNvbnN0IFcyID0gU0hBMjU2X1dbaSAtIDJdO1xuICAgICAgICAgICAgY29uc3QgczAgPSByb3RyKFcxNSwgNykgXiByb3RyKFcxNSwgMTgpIF4gKFcxNSA+Pj4gMyk7XG4gICAgICAgICAgICBjb25zdCBzMSA9IHJvdHIoVzIsIDE3KSBeIHJvdHIoVzIsIDE5KSBeIChXMiA+Pj4gMTApO1xuICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSAoczEgKyBTSEEyNTZfV1tpIC0gN10gKyBzMCArIFNIQTI1Nl9XW2kgLSAxNl0pIHwgMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDb21wcmVzc2lvbiBmdW5jdGlvbiBtYWluIGxvb3AsIDY0IHJvdW5kc1xuICAgICAgICBsZXQgeyBBLCBCLCBDLCBELCBFLCBGLCBHLCBIIH0gPSB0aGlzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ21hMSA9IHJvdHIoRSwgNikgXiByb3RyKEUsIDExKSBeIHJvdHIoRSwgMjUpO1xuICAgICAgICAgICAgY29uc3QgVDEgPSAoSCArIHNpZ21hMSArIENoaShFLCBGLCBHKSArIFNIQTI1Nl9LW2ldICsgU0hBMjU2X1dbaV0pIHwgMDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ21hMCA9IHJvdHIoQSwgMikgXiByb3RyKEEsIDEzKSBeIHJvdHIoQSwgMjIpO1xuICAgICAgICAgICAgY29uc3QgVDIgPSAoc2lnbWEwICsgTWFqKEEsIEIsIEMpKSB8IDA7XG4gICAgICAgICAgICBIID0gRztcbiAgICAgICAgICAgIEcgPSBGO1xuICAgICAgICAgICAgRiA9IEU7XG4gICAgICAgICAgICBFID0gKEQgKyBUMSkgfCAwO1xuICAgICAgICAgICAgRCA9IEM7XG4gICAgICAgICAgICBDID0gQjtcbiAgICAgICAgICAgIEIgPSBBO1xuICAgICAgICAgICAgQSA9IChUMSArIFQyKSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIHRoZSBjb21wcmVzc2VkIGNodW5rIHRvIHRoZSBjdXJyZW50IGhhc2ggdmFsdWVcbiAgICAgICAgQSA9IChBICsgdGhpcy5BKSB8IDA7XG4gICAgICAgIEIgPSAoQiArIHRoaXMuQikgfCAwO1xuICAgICAgICBDID0gKEMgKyB0aGlzLkMpIHwgMDtcbiAgICAgICAgRCA9IChEICsgdGhpcy5EKSB8IDA7XG4gICAgICAgIEUgPSAoRSArIHRoaXMuRSkgfCAwO1xuICAgICAgICBGID0gKEYgKyB0aGlzLkYpIHwgMDtcbiAgICAgICAgRyA9IChHICsgdGhpcy5HKSB8IDA7XG4gICAgICAgIEggPSAoSCArIHRoaXMuSCkgfCAwO1xuICAgICAgICB0aGlzLnNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKTtcbiAgICB9XG4gICAgcm91bmRDbGVhbigpIHtcbiAgICAgICAgU0hBMjU2X1cuZmlsbCgwKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7XG4gICAgICAgIHRoaXMuYnVmZmVyLmZpbGwoMCk7XG4gICAgfVxufVxuLy8gQ29uc3RhbnRzIGZyb20gaHR0cHM6Ly9udmxwdWJzLm5pc3QuZ292L25pc3RwdWJzL0ZJUFMvTklTVC5GSVBTLjE4MC00LnBkZlxuY2xhc3MgU0hBMjI0IGV4dGVuZHMgU0hBMjU2IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5BID0gMHhjMTA1OWVkOCB8IDA7XG4gICAgICAgIHRoaXMuQiA9IDB4MzY3Y2Q1MDcgfCAwO1xuICAgICAgICB0aGlzLkMgPSAweDMwNzBkZDE3IHwgMDtcbiAgICAgICAgdGhpcy5EID0gMHhmNzBlNTkzOSB8IDA7XG4gICAgICAgIHRoaXMuRSA9IDB4ZmZjMDBiMzEgfCAwO1xuICAgICAgICB0aGlzLkYgPSAweDY4NTgxNTExIHwgMDtcbiAgICAgICAgdGhpcy5HID0gMHg2NGY5OGZhNyB8IDA7XG4gICAgICAgIHRoaXMuSCA9IDB4YmVmYTRmYTQgfCAwO1xuICAgICAgICB0aGlzLm91dHB1dExlbiA9IDI4O1xuICAgIH1cbn1cbi8qKlxuICogU0hBMi0yNTYgaGFzaCBmdW5jdGlvblxuICogQHBhcmFtIG1lc3NhZ2UgLSBkYXRhIHRoYXQgd291bGQgYmUgaGFzaGVkXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEyNTYgPSAvKiBAX19QVVJFX18gKi8gd3JhcENvbnN0cnVjdG9yKCgpID0+IG5ldyBTSEEyNTYoKSk7XG5leHBvcnQgY29uc3Qgc2hhMjI0ID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgU0hBMjI0KCkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhMjU2LmpzLm1hcCIsImltcG9ydCB7IGJ5dGVzLCBleGlzdHMsIG51bWJlciwgb3V0cHV0IH0gZnJvbSAnLi9fYXNzZXJ0LmpzJztcbmltcG9ydCB7IHJvdGxCSCwgcm90bEJMLCByb3RsU0gsIHJvdGxTTCwgc3BsaXQgfSBmcm9tICcuL191NjQuanMnO1xuaW1wb3J0IHsgSGFzaCwgdTMyLCB0b0J5dGVzLCB3cmFwQ29uc3RydWN0b3IsIHdyYXBYT0ZDb25zdHJ1Y3RvcldpdGhPcHRzLCBpc0xFLCBieXRlU3dhcDMyLCB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gU0hBMyAoa2VjY2FrKSBpcyBiYXNlZCBvbiBhIG5ldyBkZXNpZ246IGJhc2ljYWxseSwgdGhlIGludGVybmFsIHN0YXRlIGlzIGJpZ2dlciB0aGFuIG91dHB1dCBzaXplLlxuLy8gSXQncyBjYWxsZWQgYSBzcG9uZ2UgZnVuY3Rpb24uXG4vLyBWYXJpb3VzIHBlciByb3VuZCBjb25zdGFudHMgY2FsY3VsYXRpb25zXG5jb25zdCBTSEEzX1BJID0gW107XG5jb25zdCBTSEEzX1JPVEwgPSBbXTtcbmNvbnN0IF9TSEEzX0lPVEEgPSBbXTtcbmNvbnN0IF8wbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMCk7XG5jb25zdCBfMW4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDEpO1xuY29uc3QgXzJuID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyKTtcbmNvbnN0IF83biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoNyk7XG5jb25zdCBfMjU2biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMjU2KTtcbmNvbnN0IF8weDcxbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMHg3MSk7XG5mb3IgKGxldCByb3VuZCA9IDAsIFIgPSBfMW4sIHggPSAxLCB5ID0gMDsgcm91bmQgPCAyNDsgcm91bmQrKykge1xuICAgIC8vIFBpXG4gICAgW3gsIHldID0gW3ksICgyICogeCArIDMgKiB5KSAlIDVdO1xuICAgIFNIQTNfUEkucHVzaCgyICogKDUgKiB5ICsgeCkpO1xuICAgIC8vIFJvdGF0aW9uYWxcbiAgICBTSEEzX1JPVEwucHVzaCgoKChyb3VuZCArIDEpICogKHJvdW5kICsgMikpIC8gMikgJSA2NCk7XG4gICAgLy8gSW90YVxuICAgIGxldCB0ID0gXzBuO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgNzsgaisrKSB7XG4gICAgICAgIFIgPSAoKFIgPDwgXzFuKSBeICgoUiA+PiBfN24pICogXzB4NzFuKSkgJSBfMjU2bjtcbiAgICAgICAgaWYgKFIgJiBfMm4pXG4gICAgICAgICAgICB0IF49IF8xbiA8PCAoKF8xbiA8PCAvKiBAX19QVVJFX18gKi8gQmlnSW50KGopKSAtIF8xbik7XG4gICAgfVxuICAgIF9TSEEzX0lPVEEucHVzaCh0KTtcbn1cbmNvbnN0IFtTSEEzX0lPVEFfSCwgU0hBM19JT1RBX0xdID0gLyogQF9fUFVSRV9fICovIHNwbGl0KF9TSEEzX0lPVEEsIHRydWUpO1xuLy8gTGVmdCByb3RhdGlvbiAod2l0aG91dCAwLCAzMiwgNjQpXG5jb25zdCByb3RsSCA9IChoLCBsLCBzKSA9PiAocyA+IDMyID8gcm90bEJIKGgsIGwsIHMpIDogcm90bFNIKGgsIGwsIHMpKTtcbmNvbnN0IHJvdGxMID0gKGgsIGwsIHMpID0+IChzID4gMzIgPyByb3RsQkwoaCwgbCwgcykgOiByb3RsU0woaCwgbCwgcykpO1xuLy8gU2FtZSBhcyBrZWNjYWtmMTYwMCwgYnV0IGFsbG93cyB0byBza2lwIHNvbWUgcm91bmRzXG5leHBvcnQgZnVuY3Rpb24ga2VjY2FrUChzLCByb3VuZHMgPSAyNCkge1xuICAgIGNvbnN0IEIgPSBuZXcgVWludDMyQXJyYXkoNSAqIDIpO1xuICAgIC8vIE5PVEU6IGFsbCBpbmRpY2VzIGFyZSB4MiBzaW5jZSB3ZSBzdG9yZSBzdGF0ZSBhcyB1MzIgaW5zdGVhZCBvZiB1NjQgKGJpZ2ludHMgdG8gc2xvdyBpbiBqcylcbiAgICBmb3IgKGxldCByb3VuZCA9IDI0IC0gcm91bmRzOyByb3VuZCA8IDI0OyByb3VuZCsrKSB7XG4gICAgICAgIC8vIFRoZXRhIM64XG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHgrKylcbiAgICAgICAgICAgIEJbeF0gPSBzW3hdIF4gc1t4ICsgMTBdIF4gc1t4ICsgMjBdIF4gc1t4ICsgMzBdIF4gc1t4ICsgNDBdO1xuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4ICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeDEgPSAoeCArIDgpICUgMTA7XG4gICAgICAgICAgICBjb25zdCBpZHgwID0gKHggKyAyKSAlIDEwO1xuICAgICAgICAgICAgY29uc3QgQjAgPSBCW2lkeDBdO1xuICAgICAgICAgICAgY29uc3QgQjEgPSBCW2lkeDAgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IFRoID0gcm90bEgoQjAsIEIxLCAxKSBeIEJbaWR4MV07XG4gICAgICAgICAgICBjb25zdCBUbCA9IHJvdGxMKEIwLCBCMSwgMSkgXiBCW2lkeDEgKyAxXTtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgNTA7IHkgKz0gMTApIHtcbiAgICAgICAgICAgICAgICBzW3ggKyB5XSBePSBUaDtcbiAgICAgICAgICAgICAgICBzW3ggKyB5ICsgMV0gXj0gVGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmhvICjPgSkgYW5kIFBpICjPgClcbiAgICAgICAgbGV0IGN1ckggPSBzWzJdO1xuICAgICAgICBsZXQgY3VyTCA9IHNbM107XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMjQ7IHQrKykge1xuICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSBTSEEzX1JPVExbdF07XG4gICAgICAgICAgICBjb25zdCBUaCA9IHJvdGxIKGN1ckgsIGN1ckwsIHNoaWZ0KTtcbiAgICAgICAgICAgIGNvbnN0IFRsID0gcm90bEwoY3VySCwgY3VyTCwgc2hpZnQpO1xuICAgICAgICAgICAgY29uc3QgUEkgPSBTSEEzX1BJW3RdO1xuICAgICAgICAgICAgY3VySCA9IHNbUEldO1xuICAgICAgICAgICAgY3VyTCA9IHNbUEkgKyAxXTtcbiAgICAgICAgICAgIHNbUEldID0gVGg7XG4gICAgICAgICAgICBzW1BJICsgMV0gPSBUbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGkgKM+HKVxuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IDUwOyB5ICs9IDEwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspXG4gICAgICAgICAgICAgICAgQlt4XSA9IHNbeSArIHhdO1xuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCAxMDsgeCsrKVxuICAgICAgICAgICAgICAgIHNbeSArIHhdIF49IH5CWyh4ICsgMikgJSAxMF0gJiBCWyh4ICsgNCkgJSAxMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW90YSAozrkpXG4gICAgICAgIHNbMF0gXj0gU0hBM19JT1RBX0hbcm91bmRdO1xuICAgICAgICBzWzFdIF49IFNIQTNfSU9UQV9MW3JvdW5kXTtcbiAgICB9XG4gICAgQi5maWxsKDApO1xufVxuZXhwb3J0IGNsYXNzIEtlY2NhayBleHRlbmRzIEhhc2gge1xuICAgIC8vIE5PVEU6IHdlIGFjY2VwdCBhcmd1bWVudHMgaW4gYnl0ZXMgaW5zdGVhZCBvZiBiaXRzIGhlcmUuXG4gICAgY29uc3RydWN0b3IoYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCBlbmFibGVYT0YgPSBmYWxzZSwgcm91bmRzID0gMjQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5ibG9ja0xlbiA9IGJsb2NrTGVuO1xuICAgICAgICB0aGlzLnN1ZmZpeCA9IHN1ZmZpeDtcbiAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRoaXMuZW5hYmxlWE9GID0gZW5hYmxlWE9GO1xuICAgICAgICB0aGlzLnJvdW5kcyA9IHJvdW5kcztcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLnBvc091dCA9IDA7XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gQ2FuIGJlIHBhc3NlZCBmcm9tIHVzZXIgYXMgZGtMZW5cbiAgICAgICAgbnVtYmVyKG91dHB1dExlbik7XG4gICAgICAgIC8vIDE2MDAgPSA1eDUgbWF0cml4IG9mIDY0Yml0LiAgMTYwMCBiaXRzID09PSAyMDAgYnl0ZXNcbiAgICAgICAgaWYgKDAgPj0gdGhpcy5ibG9ja0xlbiB8fCB0aGlzLmJsb2NrTGVuID49IDIwMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2hhMyBzdXBwb3J0cyBvbmx5IGtlY2Nhay1mMTYwMCBmdW5jdGlvbicpO1xuICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMjAwKTtcbiAgICAgICAgdGhpcy5zdGF0ZTMyID0gdTMyKHRoaXMuc3RhdGUpO1xuICAgIH1cbiAgICBrZWNjYWsoKSB7XG4gICAgICAgIGlmICghaXNMRSlcbiAgICAgICAgICAgIGJ5dGVTd2FwMzIodGhpcy5zdGF0ZTMyKTtcbiAgICAgICAga2VjY2FrUCh0aGlzLnN0YXRlMzIsIHRoaXMucm91bmRzKTtcbiAgICAgICAgaWYgKCFpc0xFKVxuICAgICAgICAgICAgYnl0ZVN3YXAzMih0aGlzLnN0YXRlMzIpO1xuICAgICAgICB0aGlzLnBvc091dCA9IDA7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICB9XG4gICAgdXBkYXRlKGRhdGEpIHtcbiAgICAgICAgZXhpc3RzKHRoaXMpO1xuICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBzdGF0ZSB9ID0gdGhpcztcbiAgICAgICAgZGF0YSA9IHRvQnl0ZXMoZGF0YSk7XG4gICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBwb3MgPSAwOyBwb3MgPCBsZW47KSB7XG4gICAgICAgICAgICBjb25zdCB0YWtlID0gTWF0aC5taW4oYmxvY2tMZW4gLSB0aGlzLnBvcywgbGVuIC0gcG9zKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFrZTsgaSsrKVxuICAgICAgICAgICAgICAgIHN0YXRlW3RoaXMucG9zKytdIF49IGRhdGFbcG9zKytdO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbilcbiAgICAgICAgICAgICAgICB0aGlzLmtlY2NhaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmaW5pc2goKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbmlzaGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgc3VmZml4LCBwb3MsIGJsb2NrTGVuIH0gPSB0aGlzO1xuICAgICAgICAvLyBEbyB0aGUgcGFkZGluZ1xuICAgICAgICBzdGF0ZVtwb3NdIF49IHN1ZmZpeDtcbiAgICAgICAgaWYgKChzdWZmaXggJiAweDgwKSAhPT0gMCAmJiBwb3MgPT09IGJsb2NrTGVuIC0gMSlcbiAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7XG4gICAgICAgIHN0YXRlW2Jsb2NrTGVuIC0gMV0gXj0gMHg4MDtcbiAgICAgICAgdGhpcy5rZWNjYWsoKTtcbiAgICB9XG4gICAgd3JpdGVJbnRvKG91dCkge1xuICAgICAgICBleGlzdHModGhpcywgZmFsc2UpO1xuICAgICAgICBieXRlcyhvdXQpO1xuICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICBjb25zdCBidWZmZXJPdXQgPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCB7IGJsb2NrTGVuIH0gPSB0aGlzO1xuICAgICAgICBmb3IgKGxldCBwb3MgPSAwLCBsZW4gPSBvdXQubGVuZ3RoOyBwb3MgPCBsZW47KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3NPdXQgPj0gYmxvY2tMZW4pXG4gICAgICAgICAgICAgICAgdGhpcy5rZWNjYWsoKTtcbiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zT3V0LCBsZW4gLSBwb3MpO1xuICAgICAgICAgICAgb3V0LnNldChidWZmZXJPdXQuc3ViYXJyYXkodGhpcy5wb3NPdXQsIHRoaXMucG9zT3V0ICsgdGFrZSksIHBvcyk7XG4gICAgICAgICAgICB0aGlzLnBvc091dCArPSB0YWtlO1xuICAgICAgICAgICAgcG9zICs9IHRha2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgeG9mSW50byhvdXQpIHtcbiAgICAgICAgLy8gU2hhMy9LZWNjYWsgdXNhZ2Ugd2l0aCBYT0YgaXMgcHJvYmFibHkgbWlzdGFrZSwgb25seSBTSEFLRSBpbnN0YW5jZXMgY2FuIGRvIFhPRlxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlWE9GKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdYT0YgaXMgbm90IHBvc3NpYmxlIGZvciB0aGlzIGluc3RhbmNlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLndyaXRlSW50byhvdXQpO1xuICAgIH1cbiAgICB4b2YoYnl0ZXMpIHtcbiAgICAgICAgbnVtYmVyKGJ5dGVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMueG9mSW50byhuZXcgVWludDhBcnJheShieXRlcykpO1xuICAgIH1cbiAgICBkaWdlc3RJbnRvKG91dCkge1xuICAgICAgICBvdXRwdXQob3V0LCB0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZ2VzdCgpIHdhcyBhbHJlYWR5IGNhbGxlZCcpO1xuICAgICAgICB0aGlzLndyaXRlSW50byhvdXQpO1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgZGlnZXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaWdlc3RJbnRvKG5ldyBVaW50OEFycmF5KHRoaXMub3V0cHV0TGVuKSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGF0ZS5maWxsKDApO1xuICAgIH1cbiAgICBfY2xvbmVJbnRvKHRvKSB7XG4gICAgICAgIGNvbnN0IHsgYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCByb3VuZHMsIGVuYWJsZVhPRiB9ID0gdGhpcztcbiAgICAgICAgdG8gfHwgKHRvID0gbmV3IEtlY2NhayhibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIGVuYWJsZVhPRiwgcm91bmRzKSk7XG4gICAgICAgIHRvLnN0YXRlMzIuc2V0KHRoaXMuc3RhdGUzMik7XG4gICAgICAgIHRvLnBvcyA9IHRoaXMucG9zO1xuICAgICAgICB0by5wb3NPdXQgPSB0aGlzLnBvc091dDtcbiAgICAgICAgdG8uZmluaXNoZWQgPSB0aGlzLmZpbmlzaGVkO1xuICAgICAgICB0by5yb3VuZHMgPSByb3VuZHM7XG4gICAgICAgIC8vIFN1ZmZpeCBjYW4gY2hhbmdlIGluIGNTSEFLRVxuICAgICAgICB0by5zdWZmaXggPSBzdWZmaXg7XG4gICAgICAgIHRvLm91dHB1dExlbiA9IG91dHB1dExlbjtcbiAgICAgICAgdG8uZW5hYmxlWE9GID0gZW5hYmxlWE9GO1xuICAgICAgICB0by5kZXN0cm95ZWQgPSB0aGlzLmRlc3Ryb3llZDtcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cbn1cbmNvbnN0IGdlbiA9IChzdWZmaXgsIGJsb2NrTGVuLCBvdXRwdXRMZW4pID0+IHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG91dHB1dExlbikpO1xuZXhwb3J0IGNvbnN0IHNoYTNfMjI0ID0gLyogQF9fUFVSRV9fICovIGdlbigweDA2LCAxNDQsIDIyNCAvIDgpO1xuLyoqXG4gKiBTSEEzLTI1NiBoYXNoIGZ1bmN0aW9uXG4gKiBAcGFyYW0gbWVzc2FnZSAtIHRoYXQgd291bGQgYmUgaGFzaGVkXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEzXzI1NiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oMHgwNiwgMTM2LCAyNTYgLyA4KTtcbmV4cG9ydCBjb25zdCBzaGEzXzM4NCA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oMHgwNiwgMTA0LCAzODQgLyA4KTtcbmV4cG9ydCBjb25zdCBzaGEzXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oMHgwNiwgNzIsIDUxMiAvIDgpO1xuZXhwb3J0IGNvbnN0IGtlY2Nha18yMjQgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDB4MDEsIDE0NCwgMjI0IC8gOCk7XG4vKipcbiAqIGtlY2Nhay0yNTYgaGFzaCBmdW5jdGlvbi4gRGlmZmVyZW50IGZyb20gU0hBMy0yNTYuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIHRoYXQgd291bGQgYmUgaGFzaGVkXG4gKi9cbmV4cG9ydCBjb25zdCBrZWNjYWtfMjU2ID0gLyogQF9fUFVSRV9fICovIGdlbigweDAxLCAxMzYsIDI1NiAvIDgpO1xuZXhwb3J0IGNvbnN0IGtlY2Nha18zODQgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDB4MDEsIDEwNCwgMzg0IC8gOCk7XG5leHBvcnQgY29uc3Qga2VjY2FrXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oMHgwMSwgNzIsIDUxMiAvIDgpO1xuY29uc3QgZ2VuU2hha2UgPSAoc3VmZml4LCBibG9ja0xlbiwgb3V0cHV0TGVuKSA9PiB3cmFwWE9GQ29uc3RydWN0b3JXaXRoT3B0cygob3B0cyA9IHt9KSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG9wdHMuZGtMZW4gPT09IHVuZGVmaW5lZCA/IG91dHB1dExlbiA6IG9wdHMuZGtMZW4sIHRydWUpKTtcbmV4cG9ydCBjb25zdCBzaGFrZTEyOCA9IC8qIEBfX1BVUkVfXyAqLyBnZW5TaGFrZSgweDFmLCAxNjgsIDEyOCAvIDgpO1xuZXhwb3J0IGNvbnN0IHNoYWtlMjU2ID0gLyogQF9fUFVSRV9fICovIGdlblNoYWtlKDB4MWYsIDEzNiwgMjU2IC8gOCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGEzLmpzLm1hcCIsIi8qISBub2JsZS1oYXNoZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9cbi8vIFdlIHVzZSBXZWJDcnlwdG8gYWthIGdsb2JhbFRoaXMuY3J5cHRvLCB3aGljaCBleGlzdHMgaW4gYnJvd3NlcnMgYW5kIG5vZGUuanMgMTYrLlxuLy8gbm9kZS5qcyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gdjE5IGRvbid0IGRlY2xhcmUgaXQgaW4gZ2xvYmFsIHNjb3BlLlxuLy8gRm9yIG5vZGUuanMsIHBhY2thZ2UuanNvbiNleHBvcnRzIGZpZWxkIG1hcHBpbmcgcmV3cml0ZXMgaW1wb3J0XG4vLyBmcm9tIGBjcnlwdG9gIHRvIGBjcnlwdG9Ob2RlYCwgd2hpY2ggaW1wb3J0cyBuYXRpdmUgbW9kdWxlLlxuLy8gTWFrZXMgdGhlIHV0aWxzIHVuLWltcG9ydGFibGUgaW4gYnJvd3NlcnMgd2l0aG91dCBhIGJ1bmRsZXIuXG4vLyBPbmNlIG5vZGUuanMgMTggaXMgZGVwcmVjYXRlZCAoMjAyNS0wNC0zMCksIHdlIGNhbiBqdXN0IGRyb3AgdGhlIGltcG9ydC5cbmltcG9ydCB7IGNyeXB0byB9IGZyb20gJ0Bub2JsZS9oYXNoZXMvY3J5cHRvJztcbmltcG9ydCB7IGJ5dGVzIGFzIGFieXRlcyB9IGZyb20gJy4vX2Fzc2VydC5qcyc7XG4vLyBleHBvcnQgeyBpc0J5dGVzIH0gZnJvbSAnLi9fYXNzZXJ0LmpzJztcbi8vIFdlIGNhbid0IHJldXNlIGlzQnl0ZXMgZnJvbSBfYXNzZXJ0LCBiZWNhdXNlIHNvbWVob3cgdGhpcyBjYXVzZXMgaHVnZSBwZXJmIGlzc3Vlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnl0ZXMoYSkge1xuICAgIHJldHVybiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHxcbiAgICAgICAgKGEgIT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgYS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVWludDhBcnJheScpKTtcbn1cbi8vIENhc3QgYXJyYXkgdG8gZGlmZmVyZW50IHR5cGVcbmV4cG9ydCBjb25zdCB1OCA9IChhcnIpID0+IG5ldyBVaW50OEFycmF5KGFyci5idWZmZXIsIGFyci5ieXRlT2Zmc2V0LCBhcnIuYnl0ZUxlbmd0aCk7XG5leHBvcnQgY29uc3QgdTMyID0gKGFycikgPT4gbmV3IFVpbnQzMkFycmF5KGFyci5idWZmZXIsIGFyci5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGFyci5ieXRlTGVuZ3RoIC8gNCkpO1xuLy8gQ2FzdCBhcnJheSB0byB2aWV3XG5leHBvcnQgY29uc3QgY3JlYXRlVmlldyA9IChhcnIpID0+IG5ldyBEYXRhVmlldyhhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgYXJyLmJ5dGVMZW5ndGgpO1xuLy8gVGhlIHJvdGF0ZSByaWdodCAoY2lyY3VsYXIgcmlnaHQgc2hpZnQpIG9wZXJhdGlvbiBmb3IgdWludDMyXG5leHBvcnQgY29uc3Qgcm90ciA9ICh3b3JkLCBzaGlmdCkgPT4gKHdvcmQgPDwgKDMyIC0gc2hpZnQpKSB8ICh3b3JkID4+PiBzaGlmdCk7XG4vLyBUaGUgcm90YXRlIGxlZnQgKGNpcmN1bGFyIGxlZnQgc2hpZnQpIG9wZXJhdGlvbiBmb3IgdWludDMyXG5leHBvcnQgY29uc3Qgcm90bCA9ICh3b3JkLCBzaGlmdCkgPT4gKHdvcmQgPDwgc2hpZnQpIHwgKCh3b3JkID4+PiAoMzIgLSBzaGlmdCkpID4+PiAwKTtcbmV4cG9ydCBjb25zdCBpc0xFID0gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQzMkFycmF5KFsweDExMjIzMzQ0XSkuYnVmZmVyKVswXSA9PT0gMHg0NDtcbi8vIFRoZSBieXRlIHN3YXAgb3BlcmF0aW9uIGZvciB1aW50MzJcbmV4cG9ydCBjb25zdCBieXRlU3dhcCA9ICh3b3JkKSA9PiAoKHdvcmQgPDwgMjQpICYgMHhmZjAwMDAwMCkgfFxuICAgICgod29yZCA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgKCh3b3JkID4+PiA4KSAmIDB4ZmYwMCkgfFxuICAgICgod29yZCA+Pj4gMjQpICYgMHhmZik7XG4vLyBDb25kaXRpb25hbGx5IGJ5dGUgc3dhcCBpZiBvbiBhIGJpZy1lbmRpYW4gcGxhdGZvcm1cbmV4cG9ydCBjb25zdCBieXRlU3dhcElmQkUgPSBpc0xFID8gKG4pID0+IG4gOiAobikgPT4gYnl0ZVN3YXAobik7XG4vLyBJbiBwbGFjZSBieXRlIHN3YXAgZm9yIFVpbnQzMkFycmF5XG5leHBvcnQgZnVuY3Rpb24gYnl0ZVN3YXAzMihhcnIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBieXRlU3dhcChhcnJbaV0pO1xuICAgIH1cbn1cbi8vIEFycmF5IHdoZXJlIGluZGV4IDB4ZjAgKDI0MCkgaXMgbWFwcGVkIHRvIHN0cmluZyAnZjAnXG5jb25zdCBoZXhlcyA9IC8qIEBfX1BVUkVfXyAqLyBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSwgKF8sIGkpID0+IGkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpO1xuLyoqXG4gKiBAZXhhbXBsZSBieXRlc1RvSGV4KFVpbnQ4QXJyYXkuZnJvbShbMHhjYSwgMHhmZSwgMHgwMSwgMHgyM10pKSAvLyAnY2FmZTAxMjMnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlc1RvSGV4KGJ5dGVzKSB7XG4gICAgYWJ5dGVzKGJ5dGVzKTtcbiAgICAvLyBwcmUtY2FjaGluZyBpbXByb3ZlcyB0aGUgc3BlZWQgNnhcbiAgICBsZXQgaGV4ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBoZXggKz0gaGV4ZXNbYnl0ZXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gaGV4O1xufVxuLy8gV2UgdXNlIG9wdGltaXplZCB0ZWNobmlxdWUgdG8gY29udmVydCBoZXggc3RyaW5nIHRvIGJ5dGUgYXJyYXlcbmNvbnN0IGFzY2lpcyA9IHsgXzA6IDQ4LCBfOTogNTcsIF9BOiA2NSwgX0Y6IDcwLCBfYTogOTcsIF9mOiAxMDIgfTtcbmZ1bmN0aW9uIGFzY2lpVG9CYXNlMTYoY2hhcikge1xuICAgIGlmIChjaGFyID49IGFzY2lpcy5fMCAmJiBjaGFyIDw9IGFzY2lpcy5fOSlcbiAgICAgICAgcmV0dXJuIGNoYXIgLSBhc2NpaXMuXzA7XG4gICAgaWYgKGNoYXIgPj0gYXNjaWlzLl9BICYmIGNoYXIgPD0gYXNjaWlzLl9GKVxuICAgICAgICByZXR1cm4gY2hhciAtIChhc2NpaXMuX0EgLSAxMCk7XG4gICAgaWYgKGNoYXIgPj0gYXNjaWlzLl9hICYmIGNoYXIgPD0gYXNjaWlzLl9mKVxuICAgICAgICByZXR1cm4gY2hhciAtIChhc2NpaXMuX2EgLSAxMCk7XG4gICAgcmV0dXJuO1xufVxuLyoqXG4gKiBAZXhhbXBsZSBoZXhUb0J5dGVzKCdjYWZlMDEyMycpIC8vIFVpbnQ4QXJyYXkuZnJvbShbMHhjYSwgMHhmZSwgMHgwMSwgMHgyM10pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb0J5dGVzKGhleCkge1xuICAgIGlmICh0eXBlb2YgaGV4ICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgJyArIHR5cGVvZiBoZXgpO1xuICAgIGNvbnN0IGhsID0gaGV4Lmxlbmd0aDtcbiAgICBjb25zdCBhbCA9IGhsIC8gMjtcbiAgICBpZiAoaGwgJSAyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhZGRlZCBoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAnICsgaGwpO1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWwpO1xuICAgIGZvciAobGV0IGFpID0gMCwgaGkgPSAwOyBhaSA8IGFsOyBhaSsrLCBoaSArPSAyKSB7XG4gICAgICAgIGNvbnN0IG4xID0gYXNjaWlUb0Jhc2UxNihoZXguY2hhckNvZGVBdChoaSkpO1xuICAgICAgICBjb25zdCBuMiA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkgKyAxKSk7XG4gICAgICAgIGlmIChuMSA9PT0gdW5kZWZpbmVkIHx8IG4yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBoZXhbaGldICsgaGV4W2hpICsgMV07XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCBub24taGV4IGNoYXJhY3RlciBcIicgKyBjaGFyICsgJ1wiIGF0IGluZGV4ICcgKyBoaSk7XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXlbYWldID0gbjEgKiAxNiArIG4yO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG59XG4vLyBUaGVyZSBpcyBubyBzZXRJbW1lZGlhdGUgaW4gYnJvd3NlciBhbmQgc2V0VGltZW91dCBpcyBzbG93LlxuLy8gY2FsbCBvZiBhc3luYyBmbiB3aWxsIHJldHVybiBQcm9taXNlLCB3aGljaCB3aWxsIGJlIGZ1bGxmaWxlZCBvbmx5IG9uXG4vLyBuZXh0IHNjaGVkdWxlciBxdWV1ZSBwcm9jZXNzaW5nIHN0ZXAgYW5kIHRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQuXG5leHBvcnQgY29uc3QgbmV4dFRpY2sgPSBhc3luYyAoKSA9PiB7IH07XG4vLyBSZXR1cm5zIGNvbnRyb2wgdG8gdGhyZWFkIGVhY2ggJ3RpY2snIG1zIHRvIGF2b2lkIGJsb2NraW5nXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNMb29wKGl0ZXJzLCB0aWNrLCBjYikge1xuICAgIGxldCB0cyA9IERhdGUubm93KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyczsgaSsrKSB7XG4gICAgICAgIGNiKGkpO1xuICAgICAgICAvLyBEYXRlLm5vdygpIGlzIG5vdCBtb25vdG9uaWMsIHNvIGluIGNhc2UgaWYgY2xvY2sgZ29lcyBiYWNrd2FyZHMgd2UgcmV0dXJuIHJldHVybiBjb250cm9sIHRvb1xuICAgICAgICBjb25zdCBkaWZmID0gRGF0ZS5ub3coKSAtIHRzO1xuICAgICAgICBpZiAoZGlmZiA+PSAwICYmIGRpZmYgPCB0aWNrKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGF3YWl0IG5leHRUaWNrKCk7XG4gICAgICAgIHRzICs9IGRpZmY7XG4gICAgfVxufVxuLyoqXG4gKiBAZXhhbXBsZSB1dGY4VG9CeXRlcygnYWJjJykgLy8gbmV3IFVpbnQ4QXJyYXkoWzk3LCA5OCwgOTldKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cikpOyAvLyBodHRwczovL2J1Z3ppbC5sYS8xNjgxODA5XG59XG4vKipcbiAqIE5vcm1hbGl6ZXMgKG5vbi1oZXgpIHN0cmluZyBvciBVaW50OEFycmF5IHRvIFVpbnQ4QXJyYXkuXG4gKiBXYXJuaW5nOiB3aGVuIFVpbnQ4QXJyYXkgaXMgcGFzc2VkLCBpdCB3b3VsZCBOT1QgZ2V0IGNvcGllZC5cbiAqIEtlZXAgaW4gbWluZCBmb3IgZnV0dXJlIG11dGFibGUgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQnl0ZXMoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpXG4gICAgICAgIGRhdGEgPSB1dGY4VG9CeXRlcyhkYXRhKTtcbiAgICBhYnl0ZXMoZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG59XG4vKipcbiAqIENvcGllcyBzZXZlcmFsIFVpbnQ4QXJyYXlzIGludG8gb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0Qnl0ZXMoLi4uYXJyYXlzKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tpXTtcbiAgICAgICAgYWJ5dGVzKGEpO1xuICAgICAgICBzdW0gKz0gYS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHN1bSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIHBhZCA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tpXTtcbiAgICAgICAgcmVzLnNldChhLCBwYWQpO1xuICAgICAgICBwYWQgKz0gYS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vLyBGb3IgcnVudGltZSBjaGVjayBpZiBjbGFzcyBpbXBsZW1lbnRzIGludGVyZmFjZVxuZXhwb3J0IGNsYXNzIEhhc2gge1xuICAgIC8vIFNhZmUgdmVyc2lvbiB0aGF0IGNsb25lcyBpbnRlcm5hbCBzdGF0ZVxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCk7XG4gICAgfVxufVxuY29uc3QgdG9TdHIgPSB7fS50b1N0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBjaGVja09wdHMoZGVmYXVsdHMsIG9wdHMpIHtcbiAgICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkICYmIHRvU3RyLmNhbGwob3B0cykgIT09ICdbb2JqZWN0IE9iamVjdF0nKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCBvciB1bmRlZmluZWQnKTtcbiAgICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRzLCBvcHRzKTtcbiAgICByZXR1cm4gbWVyZ2VkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBDb25zdHJ1Y3RvcihoYXNoQ29ucykge1xuICAgIGNvbnN0IGhhc2hDID0gKG1zZykgPT4gaGFzaENvbnMoKS51cGRhdGUodG9CeXRlcyhtc2cpKS5kaWdlc3QoKTtcbiAgICBjb25zdCB0bXAgPSBoYXNoQ29ucygpO1xuICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47XG4gICAgaGFzaEMuYmxvY2tMZW4gPSB0bXAuYmxvY2tMZW47XG4gICAgaGFzaEMuY3JlYXRlID0gKCkgPT4gaGFzaENvbnMoKTtcbiAgICByZXR1cm4gaGFzaEM7XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcENvbnN0cnVjdG9yV2l0aE9wdHMoaGFzaENvbnMpIHtcbiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzKG1zZykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTtcbiAgICBoYXNoQy5vdXRwdXRMZW4gPSB0bXAub3V0cHV0TGVuO1xuICAgIGhhc2hDLmJsb2NrTGVuID0gdG1wLmJsb2NrTGVuO1xuICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTtcbiAgICByZXR1cm4gaGFzaEM7XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHMoaGFzaENvbnMpIHtcbiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzKG1zZykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTtcbiAgICBoYXNoQy5vdXRwdXRMZW4gPSB0bXAub3V0cHV0TGVuO1xuICAgIGhhc2hDLmJsb2NrTGVuID0gdG1wLmJsb2NrTGVuO1xuICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTtcbiAgICByZXR1cm4gaGFzaEM7XG59XG4vKipcbiAqIFNlY3VyZSBQUk5HLiBVc2VzIGBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzYCwgd2hpY2ggZGVmZXJzIHRvIE9TLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tQnl0ZXMoYnl0ZXNMZW5ndGggPSAzMikge1xuICAgIGlmIChjcnlwdG8gJiYgdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoYnl0ZXNMZW5ndGgpKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwiaW1wb3J0IHsgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXNzZXJ0UmV0dXJuLCBpc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBhY2NvdW50SWRcbiAqIEBwYXJhbSB7KEFkZHJlc3MgfCBBY2NvdW50SWQgfCBBY2NvdW50SW5kZXggfCBzdHJpbmcgfCBudWxsKX0gYWRkcmVzcyAtIEFuIGFjY291bnRzIGFkZHJlc3MgaW4gdmFyaW91cyBmb3JtYXRzLlxuICogQGRlc2NyaXB0aW9uICBBbiBbW0FjY291bnRJZF1dXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY2NvdW50SWQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGlzVThhKGFkZHJlc3MpXG4gICAgICAgICAgICA/IGFkZHJlc3NcbiAgICAgICAgICAgIDogZGVjb2RlQWRkcmVzcygoYWRkcmVzcyB8fCAnJykudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChkZWNvZGVkLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudElkJywgZGVjb2RlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjY291bnRJbmRleCA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdBY2NvdW50SW5kZXgnLCBkZWNvZGVkKTtcbiAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuYWNjb3VudHMuaW5kZXhUb0lkKGFjY291bnRJbmRleC50b1N0cmluZygpKS5waXBlKG1hcCgoYSkgPT4gYXNzZXJ0UmV0dXJuKGEsICdVbmFibGUgdG8gcmV0cmlldmUgYWNjb3VudElkJykpKTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5mdW5jdGlvbiBwYXJzZUZsYWdzKGFkZHJlc3MsIFtlbGVjdGlvbnNNZW1iZXJzLCBjb3VuY2lsTWVtYmVycywgdGVjaG5pY2FsQ29tbWl0dGVlTWVtYmVycywgc29jaWV0eU1lbWJlcnMsIHN1ZG9LZXldKSB7XG4gICAgY29uc3QgYWRkclN0ciA9IGFkZHJlc3M/LnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaXNJbmNsdWRlZCA9IChpZCkgPT4gaWQudG9TdHJpbmcoKSA9PT0gYWRkclN0cjtcbiAgICByZXR1cm4ge1xuICAgICAgICBpc0NvdW5jaWw6IChlbGVjdGlvbnNNZW1iZXJzPy5tYXAoKHIpID0+IEFycmF5LmlzQXJyYXkocikgPyByWzBdIDogci53aG8pIHx8IGNvdW5jaWxNZW1iZXJzIHx8IFtdKS5zb21lKGlzSW5jbHVkZWQpLFxuICAgICAgICBpc1NvY2lldHk6IChzb2NpZXR5TWVtYmVycyB8fCBbXSkuc29tZShpc0luY2x1ZGVkKSxcbiAgICAgICAgaXNTdWRvOiBzdWRvS2V5Py50b1N0cmluZygpID09PSBhZGRyU3RyLFxuICAgICAgICBpc1RlY2hDb21taXR0ZWU6ICh0ZWNobmljYWxDb21taXR0ZWVNZW1iZXJzIHx8IFtdKS5zb21lKGlzSW5jbHVkZWQpXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfZmxhZ3MoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW3VuZGVmaW5lZCwgW10sIFtdLCBbXSwgdW5kZWZpbmVkXTtcbiAgICAgICAgY29uc3QgY2FsbHMgPSBbXG4gICAgICAgICAgICAoYXBpLnF1ZXJ5LmVsZWN0aW9ucyB8fCBhcGkucXVlcnlbJ3BocmFnbWVuRWxlY3Rpb24nXSB8fCBhcGkucXVlcnlbJ2VsZWN0aW9uc1BocmFnbWVuJ10pPy5tZW1iZXJzLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LmNvdW5jaWw/Lm1lbWJlcnMsXG4gICAgICAgICAgICBhcGkucXVlcnkudGVjaG5pY2FsQ29tbWl0dGVlPy5tZW1iZXJzLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHk/Lm1lbWJlcnMsXG4gICAgICAgICAgICBhcGkucXVlcnkuc3Vkbz8ua2V5XG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gY2FsbHMuZmlsdGVyKChjKSA9PiBjKTtcbiAgICAgICAgaWYgKCFmaWx0ZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihyZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpLnF1ZXJ5TXVsdGkoZmlsdGVyZWQpLnBpcGUobWFwKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHRJbmRleCA9IC0xO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gY2FsbHMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gdmFsdWVzWysrcmVzdWx0SW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vKipcbiAqIEBuYW1lIGluZm9cbiAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGFjY291bnQgbWVtYmVyc2hpcCBmbGFnc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhZ3MoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IGFwaS5kZXJpdmUuYWNjb3VudHMuX2ZsYWdzKCkucGlwZShtYXAoKHIpID0+IHBhcnNlRmxhZ3MoYWRkcmVzcywgcikpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBpZEFuZEluZGV4XG4gKiBAcGFyYW0geyhBZGRyZXNzIHwgQWNjb3VudElkIHwgQWNjb3VudEluZGV4IHwgVWludDhBcnJheSB8IHN0cmluZyB8IG51bGwpfSBhZGRyZXNzIC0gQW4gYWNjb3VudHMgYWRkcmVzcyBpbiB2YXJpb3VzIGZvcm1hdHMuXG4gKiBAZGVzY3JpcHRpb24gIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIFtbQWNjb3VudElkXV0gYW5kIFtbQWNjb3VudEluZGV4XV0gYXMgb3B0aW9uYWwgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBhcGkuZGVyaXZlLmFjY291bnRzLmlkQW5kSW5kZXgoJ0Y3SHMnLCAoW2lkLCBpeF0pID0+IHtcbiAqICAgY29uc29sZS5sb2coYEFjY291bnRJZCAjJHtpZH0gd2l0aCBjb3JyZXNwb25kaW5nIEFjY291bnRJbmRleCAke2l4fWApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkQW5kSW5kZXgoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHllcywgdGhpcyBjYW4gZmFpbCwgZG9uJ3QgY2FyZSB0b28gbXVjaCwgY2F0Y2ggd2lsbCBjYXRjaCBpdFxuICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGlzVThhKGFkZHJlc3MpXG4gICAgICAgICAgICAgICAgPyBhZGRyZXNzXG4gICAgICAgICAgICAgICAgOiBkZWNvZGVBZGRyZXNzKChhZGRyZXNzIHx8ICcnKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGlmIChkZWNvZGVkLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50SWQgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudElkJywgZGVjb2RlZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuYWNjb3VudHMuaWRUb0luZGV4KGFjY291bnRJZCkucGlwZShtYXAoKGFjY291bnRJbmRleCkgPT4gW2FjY291bnRJZCwgYWNjb3VudEluZGV4XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWNjb3VudEluZGV4ID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0FjY291bnRJbmRleCcsIGRlY29kZWQpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuYWNjb3VudHMuaW5kZXhUb0lkKGFjY291bnRJbmRleC50b1N0cmluZygpKS5waXBlKG1hcCgoYWNjb3VudElkKSA9PiBbYWNjb3VudElkLCBhY2NvdW50SW5kZXhdKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFt1bmRlZmluZWQsIHVuZGVmaW5lZF0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgaWRUb0luZGV4XG4gKiBAcGFyYW0geyggQWNjb3VudElkIHwgc3RyaW5nICl9IGFjY291bnRJZCAtIEFuIGFjY291bnRzIElkIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBBY2NvdW50SW5kZXguXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IEFMSUNFID0gJzVHcnd2YUVGNXpYYjI2Rno5cmNRcERXUzU3Q3RFUkhwTmVoWENQY05vSEdLdXRRWSc7XG4gKiBhcGkuZGVyaXZlLmFjY291bnRzLmlkVG9JbmRleChBTElDRSwgKGFjY291bnRJbmRleCkgPT4ge1xuICogICBjb25zb2xlLmxvZyhgVGhlIEFjY291bnRJbmRleCBvZiAke0FMSUNFfSBpcyAke2FjY291bnRJbmRleH1gKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZFRvSW5kZXgoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCkgPT4gYXBpLmRlcml2ZS5hY2NvdW50cy5pbmRleGVzKCkucGlwZShtYXAoKGluZGV4ZXMpID0+IGluZGV4ZXNbYWNjb3VudElkLnRvU3RyaW5nKCldKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0hleCwgdThhVG9TdHJpbmcgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IFVOREVGX0hFWCA9IHsgdG9IZXg6ICgpID0+IHVuZGVmaW5lZCB9O1xuZnVuY3Rpb24gZGF0YUFzU3RyaW5nKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhLmlzUmF3XG4gICAgICAgID8gdThhVG9TdHJpbmcoZGF0YS5hc1Jhdy50b1U4YSh0cnVlKSlcbiAgICAgICAgOiBkYXRhLmlzTm9uZVxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogZGF0YS50b0hleCgpO1xufVxuZnVuY3Rpb24gZXh0cmFjdE90aGVyKGFkZGl0aW9uYWwpIHtcbiAgICByZXR1cm4gYWRkaXRpb25hbC5yZWR1Y2UoKG90aGVyLCBbX2tleSwgX3ZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBkYXRhQXNTdHJpbmcoX2tleSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YUFzU3RyaW5nKF92YWx1ZSk7XG4gICAgICAgIGlmIChrZXkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIG90aGVyW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3RoZXI7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gaWRlbnRpdHlDb21wYXQoaWRlbnRpdHlPZk9wdCkge1xuICAgIGNvbnN0IGlkZW50aXR5ID0gaWRlbnRpdHlPZk9wdC51bndyYXAoKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShpZGVudGl0eSlcbiAgICAgICAgPyBpZGVudGl0eVswXVxuICAgICAgICA6IGlkZW50aXR5O1xufVxuZnVuY3Rpb24gZXh0cmFjdElkZW50aXR5KGlkZW50aXR5T2ZPcHQsIHN1cGVyT2YpIHtcbiAgICBpZiAoIWlkZW50aXR5T2ZPcHQ/LmlzU29tZSkge1xuICAgICAgICByZXR1cm4geyBqdWRnZW1lbnRzOiBbXSB9O1xuICAgIH1cbiAgICBjb25zdCB7IGluZm8sIGp1ZGdlbWVudHMgfSA9IGlkZW50aXR5Q29tcGF0KGlkZW50aXR5T2ZPcHQpO1xuICAgIGNvbnN0IHRvcERpc3BsYXkgPSBkYXRhQXNTdHJpbmcoaW5mby5kaXNwbGF5KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBkaXNjb3JkOiBkYXRhQXNTdHJpbmcoaW5mby5kaXNjb3JkKSxcbiAgICAgICAgZGlzcGxheTogKHN1cGVyT2YgJiYgZGF0YUFzU3RyaW5nKHN1cGVyT2ZbMV0pKSB8fCB0b3BEaXNwbGF5LFxuICAgICAgICBkaXNwbGF5UGFyZW50OiBzdXBlck9mICYmIHRvcERpc3BsYXksXG4gICAgICAgIGVtYWlsOiBkYXRhQXNTdHJpbmcoaW5mby5lbWFpbCksXG4gICAgICAgIGdpdGh1YjogZGF0YUFzU3RyaW5nKGluZm8uZ2l0aHViKSxcbiAgICAgICAgaW1hZ2U6IGRhdGFBc1N0cmluZyhpbmZvLmltYWdlKSxcbiAgICAgICAganVkZ2VtZW50cyxcbiAgICAgICAgbGVnYWw6IGRhdGFBc1N0cmluZyhpbmZvLmxlZ2FsKSxcbiAgICAgICAgbWF0cml4OiBkYXRhQXNTdHJpbmcoaW5mby5tYXRyaXgpLFxuICAgICAgICBvdGhlcjogaW5mby5hZGRpdGlvbmFsID8gZXh0cmFjdE90aGVyKGluZm8uYWRkaXRpb25hbCkgOiB7fSxcbiAgICAgICAgcGFyZW50OiBzdXBlck9mPy5bMF0sXG4gICAgICAgIHBncDogaW5mby5wZ3BGaW5nZXJwcmludC51bndyYXBPcihVTkRFRl9IRVgpLnRvSGV4KCksXG4gICAgICAgIHJpb3Q6IGRhdGFBc1N0cmluZyhpbmZvLnJpb3QpLFxuICAgICAgICB0d2l0dGVyOiBkYXRhQXNTdHJpbmcoaW5mby50d2l0dGVyKSxcbiAgICAgICAgd2ViOiBkYXRhQXNTdHJpbmcoaW5mby53ZWIpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudChhcGksIGlkZW50aXR5T2ZPcHQsIHN1cGVyT2ZPcHQpIHtcbiAgICBpZiAoaWRlbnRpdHlPZk9wdD8uaXNTb21lKSB7XG4gICAgICAgIC8vIHRoaXMgaWRlbnRpdHkgaGFzIHNvbWV0aGluZyBzZXRcbiAgICAgICAgcmV0dXJuIG9mKFtpZGVudGl0eU9mT3B0LCB1bmRlZmluZWRdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3VwZXJPZk9wdD8uaXNTb21lKSB7XG4gICAgICAgIGNvbnN0IHN1cGVyT2YgPSBzdXBlck9mT3B0LnVud3JhcCgpO1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBhcGkuZGVyaXZlLmFjY291bnRzLl9pZGVudGl0eShzdXBlck9mWzBdKS5waXBlKG1hcCgoW2luZm9dKSA9PiBpbmZvKSksXG4gICAgICAgICAgICBvZihzdXBlck9mKVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLy8gbm90aGluZyBvZiB2YWx1ZSByZXR1cm5lZFxuICAgIHJldHVybiBvZihbdW5kZWZpbmVkLCB1bmRlZmluZWRdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfaWRlbnRpdHkoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCkgPT4gYWNjb3VudElkICYmIGFwaS5xdWVyeS5pZGVudGl0eT8uaWRlbnRpdHlPZlxuICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgYXBpLnF1ZXJ5LmlkZW50aXR5LmlkZW50aXR5T2YoYWNjb3VudElkKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeS5pZGVudGl0eS5zdXBlck9mKGFjY291bnRJZClcbiAgICAgICAgXSlcbiAgICAgICAgOiBvZihbdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7XG59XG4vKipcbiAqIEBuYW1lIGlkZW50aXR5XG4gKiBAZGVzY3JpcHRpb24gUmV0dXJucyBpZGVudGl0eSBpbmZvIGZvciBhbiBhY2NvdW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkKSA9PiBhcGkuZGVyaXZlLmFjY291bnRzLl9pZGVudGl0eShhY2NvdW50SWQpLnBpcGUoc3dpdGNoTWFwKChbaWRlbnRpdHlPZk9wdCwgc3VwZXJPZk9wdF0pID0+IGdldFBhcmVudChhcGksIGlkZW50aXR5T2ZPcHQsIHN1cGVyT2ZPcHQpKSwgbWFwKChbaWRlbnRpdHlPZk9wdCwgc3VwZXJPZl0pID0+IGV4dHJhY3RJZGVudGl0eShpZGVudGl0eU9mT3B0LCBzdXBlck9mKSkpKTtcbn1cbmV4cG9ydCBjb25zdCBoYXNJZGVudGl0eSA9IC8qI19fUFVSRV9fKi8gZmlyc3RNZW1vKChhcGksIGFjY291bnRJZCkgPT4gYXBpLmRlcml2ZS5hY2NvdW50cy5oYXNJZGVudGl0eU11bHRpKFthY2NvdW50SWRdKSk7XG5leHBvcnQgZnVuY3Rpb24gaGFzSWRlbnRpdHlNdWx0aShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkcykgPT4gYXBpLnF1ZXJ5LmlkZW50aXR5Py5pZGVudGl0eU9mXG4gICAgICAgID8gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBhcGkucXVlcnkuaWRlbnRpdHkuaWRlbnRpdHlPZi5tdWx0aShhY2NvdW50SWRzKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeS5pZGVudGl0eS5zdXBlck9mLm11bHRpKGFjY291bnRJZHMpXG4gICAgICAgIF0pLnBpcGUobWFwKChbaWRlbnRpdGllcywgc3VwZXJzXSkgPT4gaWRlbnRpdGllcy5tYXAoKGlkZW50aXR5T2ZPcHQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdXBlck9mT3B0ID0gc3VwZXJzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc3VwZXJPZk9wdCAmJiBzdXBlck9mT3B0LmlzU29tZVxuICAgICAgICAgICAgICAgID8gc3VwZXJPZk9wdC51bndyYXAoKVswXS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZGlzcGxheTtcbiAgICAgICAgICAgIGlmIChpZGVudGl0eU9mT3B0ICYmIGlkZW50aXR5T2ZPcHQuaXNTb21lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhQXNTdHJpbmcoaWRlbnRpdHlDb21wYXQoaWRlbnRpdHlPZk9wdCkuaW5mby5kaXNwbGF5KTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIWlzSGV4KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgZGlzcGxheSwgaGFzSWRlbnRpdHk6ICEhKGRpc3BsYXkgfHwgcGFyZW50SWQpLCBwYXJlbnRJZCB9O1xuICAgICAgICB9KSkpXG4gICAgICAgIDogb2YoYWNjb3VudElkcy5tYXAoKCkgPT4gKHsgaGFzSWRlbnRpdHk6IGZhbHNlIH0pKSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50SWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lkQW5kSW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lkVG9JbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZGV4ZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmRleFRvSWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmZvLmpzJztcbiIsImltcG9ydCB7IG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgaW5kZXhUb0lkXG4gKiBAcGFyYW0geyggQWNjb3VudEluZGV4IHwgc3RyaW5nICl9IGFjY291bnRJbmRleCAtIEFuIGFjY291bnRzIGluZGV4IGluIGRpZmZlcmVudCBmb3JtYXRzLlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBBY2NvdW50SWQuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGFwaS5kZXJpdmUuYWNjb3VudHMuaW5kZXhUb0lkKCdGN0hzJywgKGFjY291bnRJZCkgPT4ge1xuICogICBjb25zb2xlLmxvZyhgVGhlIEFjY291bnRJZCBvZiBGN0hzIGlzICR7YWNjb3VudElkfWApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4VG9JZChpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudEluZGV4KSA9PiBhcGkucXVlcnkuaW5kaWNlc1xuICAgICAgICA/IGFwaS5xdWVyeS5pbmRpY2VzLmFjY291bnRzKGFjY291bnRJbmRleCkucGlwZShtYXAoKG9wdFJlc3VsdCkgPT4gb3B0UmVzdWx0LnVud3JhcE9yKFtdKVswXSkpXG4gICAgICAgIDogb2YodW5kZWZpbmVkKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmxldCBpbmRpY2VzQ2FjaGUgPSBudWxsO1xuZnVuY3Rpb24gcXVlcnlBY2NvdW50cyhhcGkpIHtcbiAgICByZXR1cm4gYXBpLnF1ZXJ5LmluZGljZXMuYWNjb3VudHMuZW50cmllcygpLnBpcGUobWFwKChlbnRyaWVzKSA9PiBlbnRyaWVzLnJlZHVjZSgoaW5kZXhlcywgW2tleSwgaWRPcHRdKSA9PiB7XG4gICAgICAgIGlmIChpZE9wdC5pc1NvbWUpIHtcbiAgICAgICAgICAgIGluZGV4ZXNbaWRPcHQudW53cmFwKClbMF0udG9TdHJpbmcoKV0gPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudEluZGV4Jywga2V5LmFyZ3NbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleGVzO1xuICAgIH0sIHt9KSkpO1xufVxuLyoqXG4gKiBAbmFtZSBpbmRleGVzXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFsbCB0aGUgaW5kZXhlcyBvbiB0aGUgc3lzdGVtLlxuICogQGRlc2NyaXB0aW9uIFRoaXMgaXMgYW4gdW53aWVsZGx5IHF1ZXJ5IHNpbmNlIGl0IGxvb3BzIHRocm91Z2hcbiAqIGFsbCBvZiB0aGUgZW51bXNldHMgYW5kIHJldHVybnMgYWxsIG9mIHRoZSB2YWx1ZXMgZm91bmQuIFRoaXMgY291bGQgYmUgdXAgdG8gMzJrIGRlcGVuZGluZ1xuICogb24gdGhlIG51bWJlciBvZiBhY3RpdmUgYWNjb3VudHMgaW4gdGhlIHN5c3RlbVxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBhcGkuZGVyaXZlLmFjY291bnRzLmluZGV4ZXMoKGluZGV4ZXMpID0+IHtcbiAqICAgY29uc29sZS5sb2coJ0FsbCBleGlzdGluZyBBY2NvdW50SW5kZXhlcycsIGluZGV4ZXMpO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4ZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gaW5kaWNlc0NhY2hlXG4gICAgICAgID8gb2YoaW5kaWNlc0NhY2hlKVxuICAgICAgICA6IChhcGkucXVlcnkuaW5kaWNlc1xuICAgICAgICAgICAgPyBxdWVyeUFjY291bnRzKGFwaSkucGlwZShzdGFydFdpdGgoe30pKVxuICAgICAgICAgICAgOiBvZih7fSkpLnBpcGUobWFwKChpbmRpY2VzKSA9PiB7XG4gICAgICAgICAgICBpbmRpY2VzQ2FjaGUgPSBpbmRpY2VzO1xuICAgICAgICAgICAgcmV0dXJuIGluZGljZXM7XG4gICAgICAgIH0pKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHU4YVRvU3RyaW5nIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gcmV0cmlldmVOaWNrKGFwaSwgYWNjb3VudElkKSB7XG4gICAgcmV0dXJuIChhY2NvdW50SWQgJiYgYXBpLnF1ZXJ5WyduaWNrcyddPy5bJ25hbWVPZiddXG4gICAgICAgID8gYXBpLnF1ZXJ5WyduaWNrcyddWyduYW1lT2YnXShhY2NvdW50SWQpXG4gICAgICAgIDogb2YodW5kZWZpbmVkKSkucGlwZShtYXAoKG5hbWVPZikgPT4gbmFtZU9mPy5pc1NvbWVcbiAgICAgICAgPyB1OGFUb1N0cmluZyhuYW1lT2YudW53cmFwKClbMF0pLnN1YnN0cmluZygwLCBhcGkuY29uc3RzWyduaWNrcyddWydtYXhMZW5ndGgnXS50b051bWJlcigpKVxuICAgICAgICA6IHVuZGVmaW5lZCkpO1xufVxuLyoqXG4gKiBAbmFtZSBpbmZvXG4gKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhdXguIGluZm8gd2l0aCByZWdhcmRzIHRvIGFuIGFjY291bnQsIGN1cnJlbnQgdGhhdCBpbmNsdWRlcyB0aGUgYWNjb3VudElkLCBhY2NvdW50SW5kZXggYW5kIG5pY2tuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhZGRyZXNzKSA9PiBhcGkuZGVyaXZlLmFjY291bnRzLmlkQW5kSW5kZXgoYWRkcmVzcykucGlwZShzd2l0Y2hNYXAoKFthY2NvdW50SWQsIGFjY291bnRJbmRleF0pID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZih7IGFjY291bnRJZCwgYWNjb3VudEluZGV4IH0pLFxuICAgICAgICBhcGkuZGVyaXZlLmFjY291bnRzLmlkZW50aXR5KGFjY291bnRJZCksXG4gICAgICAgIHJldHJpZXZlTmljayhhcGksIGFjY291bnRJZClcbiAgICBdKSksIG1hcCgoW3sgYWNjb3VudElkLCBhY2NvdW50SW5kZXggfSwgaWRlbnRpdHksIG5pY2tuYW1lXSkgPT4gKHtcbiAgICAgICAgYWNjb3VudElkLCBhY2NvdW50SW5kZXgsIGlkZW50aXR5LCBuaWNrbmFtZVxuICAgIH0pKSkpO1xufVxuIiwiaW1wb3J0IHsgaGFzUHJvcG9zYWxzIGFzIGNvbGxlY3RpdmVIYXNQcm9wb3NhbHMsIG1lbWJlcnMgYXMgY29sbGVjdGl2ZU1lbWJlcnMsIHByaW1lIGFzIGNvbGxlY3RpdmVQcmltZSwgcHJvcG9zYWwgYXMgY29sbGVjdGl2ZVByb3Bvc2FsLCBwcm9wb3NhbENvdW50IGFzIGNvbGxlY3RpdmVQcm9wb3NhbENvdW50LCBwcm9wb3NhbEhhc2hlcyBhcyBjb2xsZWN0aXZlUHJvcG9zYWxIYXNoZXMsIHByb3Bvc2FscyBhcyBjb2xsZWN0aXZlUHJvcG9zYWxzIH0gZnJvbSAnLi4vY29sbGVjdGl2ZS9pbmRleC5qcyc7XG5leHBvcnQgY29uc3QgbWVtYmVycyA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZU1lbWJlcnMoJ2FsbGlhbmNlTW90aW9uJyk7XG5leHBvcnQgY29uc3QgaGFzUHJvcG9zYWxzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlSGFzUHJvcG9zYWxzKCdhbGxpYW5jZU1vdGlvbicpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FsID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWwoJ2FsbGlhbmNlTW90aW9uJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxDb3VudCA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByb3Bvc2FsQ291bnQoJ2FsbGlhbmNlTW90aW9uJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxIYXNoZXMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcygnYWxsaWFuY2VNb3Rpb24nKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbHMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbHMoJ2FsbGlhbmNlTW90aW9uJyk7XG5leHBvcnQgY29uc3QgcHJpbWUgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcmltZSgnYWxsaWFuY2VNb3Rpb24nKTtcbiIsImltcG9ydCB7IG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQk5fWkVSTywgYm5Ub0JuLCBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRRdWVyeUludGVyZmFjZSB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBvcmRlckJhZ3MoaWRzLCBiYWdzKSB7XG4gICAgY29uc3Qgc29ydGVkID0gaWRzXG4gICAgICAgIC5tYXAoKGlkLCBpbmRleCkgPT4gKHtcbiAgICAgICAgYmFnOiBiYWdzW2luZGV4XS51bndyYXBPcihudWxsKSxcbiAgICAgICAgaWQsXG4gICAgICAgIGtleTogaWQudG9TdHJpbmcoKVxuICAgIH0pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5pZC5jbXAoYS5pZCkpO1xuICAgIGNvbnN0IG1heCA9IHNvcnRlZC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBzb3J0ZWQubWFwKChlbnRyeSwgaW5kZXgpID0+IG9iamVjdFNwcmVhZChlbnRyeSwge1xuICAgICAgICBiYWdMb3dlcjogaW5kZXggPT09IG1heFxuICAgICAgICAgICAgPyBCTl9aRVJPXG4gICAgICAgICAgICA6IHNvcnRlZFtpbmRleCArIDFdLmlkLFxuICAgICAgICBiYWdVcHBlcjogZW50cnkuaWQsXG4gICAgICAgIGluZGV4XG4gICAgfSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9nZXRJZHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgY29uc3QgcXVlcnkgPSBnZXRRdWVyeUludGVyZmFjZShhcGkpO1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChfaWRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IF9pZHMubWFwKChpZCkgPT4gYm5Ub0JuKGlkKSk7XG4gICAgICAgIHJldHVybiBpZHMubGVuZ3RoXG4gICAgICAgICAgICA/IHF1ZXJ5Lmxpc3RCYWdzLm11bHRpKGlkcykucGlwZShtYXAoKGJhZ3MpID0+IG9yZGVyQmFncyhpZHMsIGJhZ3MpKSlcbiAgICAgICAgICAgIDogb2YoW10pO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFsbChpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICBjb25zdCBxdWVyeSA9IGdldFF1ZXJ5SW50ZXJmYWNlKGFwaSk7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gcXVlcnkubGlzdEJhZ3Mua2V5cygpLnBpcGUoc3dpdGNoTWFwKChrZXlzKSA9PiBhcGkuZGVyaXZlLmJhZ3NMaXN0Ll9nZXRJZHMoa2V5cy5tYXAoKHsgYXJnczogW2lkXSB9KSA9PiBpZCkpKSwgbWFwKChsaXN0KSA9PiBsaXN0LmZpbHRlcigoeyBiYWcgfSkgPT4gYmFnKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGlkKSA9PiBhcGkuZGVyaXZlLmJhZ3NMaXN0Ll9nZXRJZHMoW2JuVG9CbihpZCldKS5waXBlKG1hcCgoYmFncykgPT4gYmFnc1swXSkpKTtcbn1cbiIsImltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChiYWcpID0+IGFwaS5kZXJpdmUuYmFnc0xpc3QubGlzdE5vZGVzKGJhZy5iYWcpLnBpcGUobWFwKChub2RlcykgPT4gb2JqZWN0U3ByZWFkKHsgbm9kZXMgfSwgYmFnKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHBhbmRlZChpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoaWQpID0+IGFwaS5kZXJpdmUuYmFnc0xpc3QuZ2V0KGlkKS5waXBlKHN3aXRjaE1hcCgoYmFnKSA9PiBhcGkuZGVyaXZlLmJhZ3NMaXN0LmV4cGFuZChiYWcpKSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9nZXQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRFeHBhbmRlZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpc3ROb2Rlcy5qcyc7XG4iLCJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwLCB0b0FycmF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBuZXh0VGljayB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldFF1ZXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi91dGlsLmpzJztcbmZ1bmN0aW9uIHRyYXZlcnNlTGlua3MoYXBpLCBoZWFkKSB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoaGVhZCk7XG4gICAgY29uc3QgcXVlcnkgPSBnZXRRdWVyeUludGVyZmFjZShhcGkpO1xuICAgIHJldHVybiBzdWJqZWN0LnBpcGUoc3dpdGNoTWFwKChhY2NvdW50KSA9PiBxdWVyeS5saXN0Tm9kZXMoYWNjb3VudCkpLCB0YXAoKG5vZGUpID0+IHtcbiAgICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgbm9kZS5pc1NvbWUgJiYgbm9kZS52YWx1ZS5uZXh0LmlzU29tZVxuICAgICAgICAgICAgICAgID8gc3ViamVjdC5uZXh0KG5vZGUudW53cmFwKCkubmV4dC51bndyYXAoKSlcbiAgICAgICAgICAgICAgICA6IHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgfSksIHRvQXJyYXkoKSwgLy8gdG9BcnJheSBzaW5jZSB3ZSB3YW50IHRvIHN0YXJ0U3ViamVjdCB0byBiZSBjb21wbGV0ZWRcbiAgICBtYXAoKGFsbCkgPT4gYWxsLm1hcCgobykgPT4gby51bndyYXAoKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsaXN0Tm9kZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGJhZykgPT4gYmFnICYmIGJhZy5oZWFkLmlzU29tZVxuICAgICAgICA/IHRyYXZlcnNlTGlua3MoYXBpLCBiYWcuaGVhZC51bndyYXAoKSlcbiAgICAgICAgOiBvZihbXSkpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5SW50ZXJmYWNlKGFwaSkge1xuICAgIHJldHVybiAoXG4gICAgLy8gbGF0ZXN0IHN1YnN0cmF0ZSAmIHBvbGthZG90XG4gICAgYXBpLnF1ZXJ5LnZvdGVyTGlzdCB8fFxuICAgICAgICAvLyBwcmV2aW91cyBzdWJzdHJhdGVcbiAgICAgICAgYXBpLnF1ZXJ5Wyd2b3RlckJhZ3NMaXN0J10gfHxcbiAgICAgICAgYXBpLnF1ZXJ5WydiYWdzTGlzdCddKTtcbn1cbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gemVyb0JhbGFuY2UoYXBpKSB7XG4gICAgcmV0dXJuIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyk7XG59XG5mdW5jdGlvbiBnZXRCYWxhbmNlKGFwaSwgW2ZyZWVCYWxhbmNlLCByZXNlcnZlZEJhbGFuY2UsIGZyb3plbkZlZSwgZnJvemVuTWlzY10pIHtcbiAgICBjb25zdCB2b3RpbmdCYWxhbmNlID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnLCBmcmVlQmFsYW5jZS50b0JuKCkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZyZWVCYWxhbmNlLFxuICAgICAgICBmcm96ZW5GZWUsXG4gICAgICAgIGZyb3plbk1pc2MsXG4gICAgICAgIHJlc2VydmVkQmFsYW5jZSxcbiAgICAgICAgdm90aW5nQmFsYW5jZVxuICAgIH07XG59XG5mdW5jdGlvbiBjYWxjQmFsYW5jZXMoYXBpLCBbYWNjb3VudElkLCBbYWNjb3VudE5vbmNlLCBbcHJpbWFyeSwgLi4uYWRkaXRpb25hbF1dXSkge1xuICAgIHJldHVybiBvYmplY3RTcHJlYWQoe1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIGFjY291bnROb25jZSxcbiAgICAgICAgYWRkaXRpb25hbDogYWRkaXRpb25hbC5tYXAoKGIpID0+IGdldEJhbGFuY2UoYXBpLCBiKSlcbiAgICB9LCBnZXRCYWxhbmNlKGFwaSwgcHJpbWFyeSkpO1xufVxuZnVuY3Rpb24gcXVlcnlCYWxhbmNlc0ZyZWUoYXBpLCBhY2NvdW50SWQpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIGFwaS5xdWVyeS5iYWxhbmNlc1snZnJlZUJhbGFuY2UnXShhY2NvdW50SWQpLFxuICAgICAgICBhcGkucXVlcnkuYmFsYW5jZXNbJ3Jlc2VydmVkQmFsYW5jZSddKGFjY291bnRJZCksXG4gICAgICAgIGFwaS5xdWVyeS5zeXN0ZW1bJ2FjY291bnROb25jZSddKGFjY291bnRJZClcbiAgICBdKS5waXBlKG1hcCgoW2ZyZWVCYWxhbmNlLCByZXNlcnZlZEJhbGFuY2UsIGFjY291bnROb25jZV0pID0+IFtcbiAgICAgICAgYWNjb3VudE5vbmNlLFxuICAgICAgICBbW2ZyZWVCYWxhbmNlLCByZXNlcnZlZEJhbGFuY2UsIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSldXVxuICAgIF0pKTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5Tm9uY2VPbmx5KGFwaSwgYWNjb3VudElkKSB7XG4gICAgY29uc3QgZmlsbCA9IChub25jZSkgPT4gW1xuICAgICAgICBub25jZSxcbiAgICAgICAgW1t6ZXJvQmFsYW5jZShhcGkpLCB6ZXJvQmFsYW5jZShhcGkpLCB6ZXJvQmFsYW5jZShhcGkpLCB6ZXJvQmFsYW5jZShhcGkpXV1cbiAgICBdO1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudClcbiAgICAgICAgPyBhcGkucXVlcnkuc3lzdGVtLmFjY291bnQoYWNjb3VudElkKS5waXBlKG1hcCgoeyBub25jZSB9KSA9PiBmaWxsKG5vbmNlKSkpXG4gICAgICAgIDogaXNGdW5jdGlvbihhcGkucXVlcnkuc3lzdGVtWydhY2NvdW50Tm9uY2UnXSlcbiAgICAgICAgICAgID8gYXBpLnF1ZXJ5LnN5c3RlbVsnYWNjb3VudE5vbmNlJ10oYWNjb3VudElkKS5waXBlKG1hcCgobm9uY2UpID0+IGZpbGwobm9uY2UpKSlcbiAgICAgICAgICAgIDogb2YoZmlsbChhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnSW5kZXgnKSkpO1xufVxuZnVuY3Rpb24gcXVlcnlCYWxhbmNlc0FjY291bnQoYXBpLCBhY2NvdW50SWQsIG1vZHVsZXMgPSBbJ2JhbGFuY2VzJ10pIHtcbiAgICBjb25zdCBiYWxhbmNlcyA9IG1vZHVsZXNcbiAgICAgICAgLm1hcCgobSkgPT4gYXBpLmRlcml2ZVttXT8uY3VzdG9tQWNjb3VudCB8fCBhcGkucXVlcnlbbV0/LmFjY291bnQpXG4gICAgICAgIC5maWx0ZXIoKHEpID0+IGlzRnVuY3Rpb24ocSkpO1xuICAgIGNvbnN0IGV4dHJhY3QgPSAobm9uY2UsIGRhdGEpID0+IFtcbiAgICAgICAgbm9uY2UsXG4gICAgICAgIGRhdGEubWFwKCh7IGZlZUZyb3plbiwgZnJlZSwgbWlzY0Zyb3plbiwgcmVzZXJ2ZWQgfSkgPT4gW2ZyZWUsIHJlc2VydmVkLCBmZWVGcm96ZW4sIG1pc2NGcm96ZW5dKVxuICAgIF07XG4gICAgLy8gTk9URSB0aGlzIGlzIGZvciB0aGUgZmlyc3QgY2FzZSB3aGVyZSB3ZSBkbyBoYXZlIGluc3RhbmNlcyBzcGVjaWZpZWRcbiAgICByZXR1cm4gYmFsYW5jZXMubGVuZ3RoXG4gICAgICAgID8gaXNGdW5jdGlvbihhcGkucXVlcnkuc3lzdGVtLmFjY291bnQpXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudChhY2NvdW50SWQpLFxuICAgICAgICAgICAgICAgIC4uLmJhbGFuY2VzLm1hcCgoYykgPT4gYyhhY2NvdW50SWQpKVxuICAgICAgICAgICAgXSkucGlwZShtYXAoKFt7IG5vbmNlIH0sIC4uLmJhbGFuY2VzXSkgPT4gZXh0cmFjdChub25jZSwgYmFsYW5jZXMpKSlcbiAgICAgICAgICAgIDogY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LnN5c3RlbVsnYWNjb3VudE5vbmNlJ10oYWNjb3VudElkKSxcbiAgICAgICAgICAgICAgICAuLi5iYWxhbmNlcy5tYXAoKGMpID0+IGMoYWNjb3VudElkKSlcbiAgICAgICAgICAgIF0pLnBpcGUobWFwKChbbm9uY2UsIC4uLmJhbGFuY2VzXSkgPT4gZXh0cmFjdChub25jZSwgYmFsYW5jZXMpKSlcbiAgICAgICAgOiBxdWVyeU5vbmNlT25seShhcGksIGFjY291bnRJZCk7XG59XG5mdW5jdGlvbiBxdWVyeVN5c3RlbUFjY291bnQoYXBpLCBhY2NvdW50SWQpIHtcbiAgICAvLyBBY2NvdW50SW5mbyBpcyBjdXJyZW50LCBzdXBwb3J0IG9sZCwgZWcuIEVkZ2V3YXJlXG4gICAgcmV0dXJuIGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudChhY2NvdW50SWQpLnBpcGUobWFwKChpbmZvT3JUdXBsZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gaW5mb09yVHVwbGUubm9uY2VcbiAgICAgICAgICAgID8gaW5mb09yVHVwbGUuZGF0YVxuICAgICAgICAgICAgOiBpbmZvT3JUdXBsZVsxXTtcbiAgICAgICAgY29uc3Qgbm9uY2UgPSBpbmZvT3JUdXBsZS5ub25jZSB8fCBpbmZvT3JUdXBsZVswXTtcbiAgICAgICAgaWYgKCFkYXRhIHx8IGRhdGEuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub25jZSxcbiAgICAgICAgICAgICAgICBbW3plcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSldXVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGZlZUZyb3plbiwgZnJlZSwgbWlzY0Zyb3plbiwgcmVzZXJ2ZWQgfSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBub25jZSxcbiAgICAgICAgICAgIFtbZnJlZSwgcmVzZXJ2ZWQsIGZlZUZyb3plbiwgbWlzY0Zyb3plbl1dXG4gICAgICAgIF07XG4gICAgfSkpO1xufVxuLyoqXG4gKiBAbmFtZSBhY2NvdW50XG4gKiBAcGFyYW0geyggQWNjb3VudEluZGV4IHwgQWNjb3VudElkIHwgQWRkcmVzcyB8IHN0cmluZyApfSBhZGRyZXNzIC0gQW4gYWNjb3VudHMgSWQgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB2YXJpb3VzIGJhbGFuY2UgcXVlcmllc1xuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBBTElDRSA9ICdGN0hzJztcbiAqXG4gKiBhcGkuZGVyaXZlLmJhbGFuY2VzLmFsbChBTElDRSwgKHsgYWNjb3VudElkLCBsb2NrZWRCYWxhbmNlIH0pID0+IHtcbiAqICAgY29uc29sZS5sb2coYFRoZSBhY2NvdW50ICR7YWNjb3VudElkfSBoYXMgYSBsb2NrZWQgYmFsYW5jZSAke2xvY2tlZEJhbGFuY2V9IHVuaXRzLmApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY291bnQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgY29uc3QgYmFsYW5jZUluc3RhbmNlcyA9IGFwaS5yZWdpc3RyeS5nZXRNb2R1bGVJbnN0YW5jZXMoYXBpLnJ1bnRpbWVWZXJzaW9uLnNwZWNOYW1lLCAnYmFsYW5jZXMnKTtcbiAgICBjb25zdCBub25EZWZhdWx0QmFsYW5jZXMgPSBiYWxhbmNlSW5zdGFuY2VzICYmIGJhbGFuY2VJbnN0YW5jZXNbMF0gIT09ICdiYWxhbmNlcyc7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IGFwaS5kZXJpdmUuYWNjb3VudHMuYWNjb3VudElkKGFkZHJlc3MpLnBpcGUoc3dpdGNoTWFwKChhY2NvdW50SWQpID0+IChhY2NvdW50SWRcbiAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKGFjY291bnRJZCksXG4gICAgICAgICAgICBub25EZWZhdWx0QmFsYW5jZXNcbiAgICAgICAgICAgICAgICA/IHF1ZXJ5QmFsYW5jZXNBY2NvdW50KGFwaSwgYWNjb3VudElkLCBiYWxhbmNlSW5zdGFuY2VzKVxuICAgICAgICAgICAgICAgIDogaXNGdW5jdGlvbihhcGkucXVlcnkuc3lzdGVtPy5hY2NvdW50KVxuICAgICAgICAgICAgICAgICAgICA/IHF1ZXJ5U3lzdGVtQWNjb3VudChhcGksIGFjY291bnRJZClcbiAgICAgICAgICAgICAgICAgICAgOiBpc0Z1bmN0aW9uKGFwaS5xdWVyeS5iYWxhbmNlcz8uYWNjb3VudClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcXVlcnlCYWxhbmNlc0FjY291bnQoYXBpLCBhY2NvdW50SWQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlzRnVuY3Rpb24oYXBpLnF1ZXJ5LmJhbGFuY2VzPy5bJ2ZyZWVCYWxhbmNlJ10pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBxdWVyeUJhbGFuY2VzRnJlZShhcGksIGFjY291bnRJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHF1ZXJ5Tm9uY2VPbmx5KGFwaSwgYWNjb3VudElkKVxuICAgICAgICBdKVxuICAgICAgICA6IG9mKFthcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudElkJyksIFtcbiAgICAgICAgICAgICAgICBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnSW5kZXgnKSxcbiAgICAgICAgICAgICAgICBbW3plcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSldXVxuICAgICAgICAgICAgXV0pKSksIG1hcCgocmVzdWx0KSA9PiBjYWxjQmFsYW5jZXMoYXBpLCByZXN1bHQpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCTiwgQk5fWkVSTywgYm5NYXgsIGJuTWluLCBpc0Z1bmN0aW9uLCBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5jb25zdCBWRVNUSU5HX0lEID0gJzB4NzY2NTczNzQ2OTZlNjcyMCc7XG5mdW5jdGlvbiBjYWxjTG9ja2VkKGFwaSwgYmVzdE51bWJlciwgbG9ja3MpIHtcbiAgICBsZXQgbG9ja2VkQmFsYW5jZSA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyk7XG4gICAgbGV0IGxvY2tlZEJyZWFrZG93biA9IFtdO1xuICAgIGxldCB2ZXN0aW5nTG9ja2VkID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKTtcbiAgICBsZXQgYWxsTG9ja2VkID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobG9ja3MpKSB7XG4gICAgICAgIC8vIG9ubHkgZ2V0IHRoZSBsb2NrcyB0aGF0IGFyZSB2YWxpZCB1bnRpbCBwYXNzZWQgdGhlIGN1cnJlbnQgYmxvY2tcbiAgICAgICAgbG9ja2VkQnJlYWtkb3duID0gbG9ja3MuZmlsdGVyKCh7IHVudGlsIH0pID0+ICF1bnRpbCB8fCAoYmVzdE51bWJlciAmJiB1bnRpbC5ndChiZXN0TnVtYmVyKSkpO1xuICAgICAgICBhbGxMb2NrZWQgPSBsb2NrZWRCcmVha2Rvd24uc29tZSgoeyBhbW91bnQgfSkgPT4gYW1vdW50ICYmIGFtb3VudC5pc01heCgpKTtcbiAgICAgICAgdmVzdGluZ0xvY2tlZCA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJywgbG9ja2VkQnJlYWtkb3duLmZpbHRlcigoeyBpZCB9KSA9PiBpZC5lcShWRVNUSU5HX0lEKSkucmVkdWNlKChyZXN1bHQsIHsgYW1vdW50IH0pID0+IHJlc3VsdC5pYWRkKGFtb3VudCksIG5ldyBCTigwKSkpO1xuICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gb2YgdGhlIGxvY2tzIGFjY29yZGluZyB0byBodHRwczovL2dpdGh1Yi5jb20vcGFyaXR5dGVjaC9zdWJzdHJhdGUvYmxvYi9tYXN0ZXIvc3JtbC9iYWxhbmNlcy9zcmMvbGliLnJzI0w2OTlcbiAgICAgICAgY29uc3Qgbm90QWxsID0gbG9ja2VkQnJlYWtkb3duLmZpbHRlcigoeyBhbW91bnQgfSkgPT4gYW1vdW50ICYmICFhbW91bnQuaXNNYXgoKSk7XG4gICAgICAgIGlmIChub3RBbGwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsb2NrZWRCYWxhbmNlID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnLCBibk1heCguLi5ub3RBbGwubWFwKCh7IGFtb3VudCB9KSA9PiBhbW91bnQpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYWxsTG9ja2VkLCBsb2NrZWRCYWxhbmNlLCBsb2NrZWRCcmVha2Rvd24sIHZlc3RpbmdMb2NrZWQgfTtcbn1cbmZ1bmN0aW9uIGNhbGNTaGFyZWQoYXBpLCBiZXN0TnVtYmVyLCBkYXRhLCBsb2Nrcykge1xuICAgIGNvbnN0IHsgYWxsTG9ja2VkLCBsb2NrZWRCYWxhbmNlLCBsb2NrZWRCcmVha2Rvd24sIHZlc3RpbmdMb2NrZWQgfSA9IGNhbGNMb2NrZWQoYXBpLCBiZXN0TnVtYmVyLCBsb2Nrcyk7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7fSwgZGF0YSwge1xuICAgICAgICBhdmFpbGFibGVCYWxhbmNlOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScsIGFsbExvY2tlZCA/IDAgOiBibk1heChuZXcgQk4oMCksIGRhdGE/LmZyZWVCYWxhbmNlID8gZGF0YS5mcmVlQmFsYW5jZS5zdWIobG9ja2VkQmFsYW5jZSkgOiBuZXcgQk4oMCkpKSxcbiAgICAgICAgbG9ja2VkQmFsYW5jZSxcbiAgICAgICAgbG9ja2VkQnJlYWtkb3duLFxuICAgICAgICB2ZXN0aW5nTG9ja2VkXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjYWxjVmVzdGluZyhiZXN0TnVtYmVyLCBzaGFyZWQsIF92ZXN0aW5nKSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSB2ZXN0aW5nIGJhbGFuY2VzLFxuICAgIC8vICAtIG9mZnNldCA9IGJhbGFuY2UgbG9ja2VkIGF0IHN0YXJ0aW5nQmxvY2tcbiAgICAvLyAgLSBwZXJCbG9jayBpcyB0aGUgdW5sb2NrIGFtb3VudFxuICAgIGNvbnN0IHZlc3RpbmcgPSBfdmVzdGluZyB8fCBbXTtcbiAgICBjb25zdCBpc1Zlc3RpbmcgPSAhc2hhcmVkLnZlc3RpbmdMb2NrZWQuaXNaZXJvKCk7XG4gICAgY29uc3QgdmVzdGVkQmFsYW5jZXMgPSB2ZXN0aW5nLm1hcCgoeyBsb2NrZWQsIHBlckJsb2NrLCBzdGFydGluZ0Jsb2NrIH0pID0+IGJlc3ROdW1iZXIuZ3Qoc3RhcnRpbmdCbG9jaylcbiAgICAgICAgPyBibk1pbihsb2NrZWQsIHBlckJsb2NrLm11bChiZXN0TnVtYmVyLnN1YihzdGFydGluZ0Jsb2NrKSkpXG4gICAgICAgIDogQk5fWkVSTyk7XG4gICAgY29uc3QgdmVzdGVkQmFsYW5jZSA9IHZlc3RlZEJhbGFuY2VzLnJlZHVjZSgoYWxsLCB2YWx1ZSkgPT4gYWxsLmlhZGQodmFsdWUpLCBuZXcgQk4oMCkpO1xuICAgIGNvbnN0IHZlc3RpbmdUb3RhbCA9IHZlc3RpbmcucmVkdWNlKChhbGwsIHsgbG9ja2VkIH0pID0+IGFsbC5pYWRkKGxvY2tlZCksIG5ldyBCTigwKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNWZXN0aW5nLFxuICAgICAgICB2ZXN0ZWRCYWxhbmNlLFxuICAgICAgICB2ZXN0ZWRDbGFpbWFibGU6IGlzVmVzdGluZ1xuICAgICAgICAgICAgPyBzaGFyZWQudmVzdGluZ0xvY2tlZC5zdWIodmVzdGluZ1RvdGFsLnN1Yih2ZXN0ZWRCYWxhbmNlKSlcbiAgICAgICAgICAgIDogQk5fWkVSTyxcbiAgICAgICAgdmVzdGluZzogdmVzdGluZ1xuICAgICAgICAgICAgLm1hcCgoeyBsb2NrZWQsIHBlckJsb2NrLCBzdGFydGluZ0Jsb2NrIH0sIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgZW5kQmxvY2s6IGxvY2tlZC5kaXYocGVyQmxvY2spLmlhZGQoc3RhcnRpbmdCbG9jayksXG4gICAgICAgICAgICBsb2NrZWQsXG4gICAgICAgICAgICBwZXJCbG9jayxcbiAgICAgICAgICAgIHN0YXJ0aW5nQmxvY2ssXG4gICAgICAgICAgICB2ZXN0ZWQ6IHZlc3RlZEJhbGFuY2VzW2luZGV4XVxuICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbG9ja2VkIH0pID0+ICFsb2NrZWQuaXNaZXJvKCkpLFxuICAgICAgICB2ZXN0aW5nVG90YWxcbiAgICB9O1xufVxuZnVuY3Rpb24gY2FsY0JhbGFuY2VzKGFwaSwgcmVzdWx0KSB7XG4gICAgY29uc3QgW2RhdGEsIFt2ZXN0aW5nLCBhbGxMb2NrcywgbmFtZWRSZXNlcnZlc10sIGJlc3ROdW1iZXJdID0gcmVzdWx0O1xuICAgIGNvbnN0IHNoYXJlZCA9IGNhbGNTaGFyZWQoYXBpLCBiZXN0TnVtYmVyLCBkYXRhLCBhbGxMb2Nrc1swXSk7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZChzaGFyZWQsIGNhbGNWZXN0aW5nKGJlc3ROdW1iZXIsIHNoYXJlZCwgdmVzdGluZyksIHtcbiAgICAgICAgYWNjb3VudElkOiBkYXRhLmFjY291bnRJZCxcbiAgICAgICAgYWNjb3VudE5vbmNlOiBkYXRhLmFjY291bnROb25jZSxcbiAgICAgICAgYWRkaXRpb25hbDogYWxsTG9ja3NcbiAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgLm1hcCgobCwgaW5kZXgpID0+IGNhbGNTaGFyZWQoYXBpLCBiZXN0TnVtYmVyLCBkYXRhLmFkZGl0aW9uYWxbaW5kZXhdLCBsKSksXG4gICAgICAgIG5hbWVkUmVzZXJ2ZXNcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5T2xkKGFwaSwgYWNjb3VudElkKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucXVlcnkuYmFsYW5jZXMubG9ja3MoYWNjb3VudElkKSxcbiAgICAgICAgYXBpLnF1ZXJ5LmJhbGFuY2VzWyd2ZXN0aW5nJ10oYWNjb3VudElkKVxuICAgIF0pLnBpcGUobWFwKChbbG9ja3MsIG9wdFZlc3RpbmddKSA9PiB7XG4gICAgICAgIGxldCB2ZXN0aW5nTmV3ID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdFZlc3RpbmcuaXNTb21lKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogbG9ja2VkLCBwZXJCbG9jaywgc3RhcnRpbmdCbG9jayB9ID0gb3B0VmVzdGluZy51bndyYXAoKTtcbiAgICAgICAgICAgIHZlc3RpbmdOZXcgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVmVzdGluZ0luZm8nLCB7IGxvY2tlZCwgcGVyQmxvY2ssIHN0YXJ0aW5nQmxvY2sgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHZlc3RpbmdOZXdcbiAgICAgICAgICAgICAgICA/IFt2ZXN0aW5nTmV3XVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIFtsb2Nrc10sXG4gICAgICAgICAgICBbXVxuICAgICAgICBdO1xuICAgIH0pKTtcbn1cbmNvbnN0IGlzTm9uTnVsbGFibGUgPSAobnVsbGFibGUpID0+ICEhbnVsbGFibGU7XG5mdW5jdGlvbiBjcmVhdGVDYWxscyhjYWxscykge1xuICAgIHJldHVybiBbXG4gICAgICAgIGNhbGxzLm1hcCgoYykgPT4gIWMpLFxuICAgICAgICBjYWxscy5maWx0ZXIoaXNOb25OdWxsYWJsZSlcbiAgICBdO1xufVxuZnVuY3Rpb24gcXVlcnlDdXJyZW50KGFwaSwgYWNjb3VudElkLCBiYWxhbmNlSW5zdGFuY2VzID0gWydiYWxhbmNlcyddKSB7XG4gICAgY29uc3QgW2xvY2tFbXB0eSwgbG9ja1F1ZXJpZXNdID0gY3JlYXRlQ2FsbHMoYmFsYW5jZUluc3RhbmNlcy5tYXAoKG0pID0+IGFwaS5kZXJpdmVbbV0/LmN1c3RvbUxvY2tzIHx8IGFwaS5xdWVyeVttXT8ubG9ja3MpKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUVtcHR5LCByZXNlcnZlUXVlcmllc10gPSBjcmVhdGVDYWxscyhiYWxhbmNlSW5zdGFuY2VzLm1hcCgobSkgPT4gYXBpLnF1ZXJ5W21dPy5yZXNlcnZlcykpO1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLnF1ZXJ5LnZlc3Rpbmc/LnZlc3RpbmdcbiAgICAgICAgICAgID8gYXBpLnF1ZXJ5LnZlc3RpbmcudmVzdGluZyhhY2NvdW50SWQpXG4gICAgICAgICAgICA6IG9mKGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdPcHRpb248VmVzdGluZ0luZm8+JykpLFxuICAgICAgICBsb2NrUXVlcmllcy5sZW5ndGhcbiAgICAgICAgICAgID8gY29tYmluZUxhdGVzdChsb2NrUXVlcmllcy5tYXAoKGMpID0+IGMoYWNjb3VudElkKSkpXG4gICAgICAgICAgICA6IG9mKFtdKSxcbiAgICAgICAgcmVzZXJ2ZVF1ZXJpZXMubGVuZ3RoXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QocmVzZXJ2ZVF1ZXJpZXMubWFwKChjKSA9PiBjKGFjY291bnRJZCkpKVxuICAgICAgICAgICAgOiBvZihbXSlcbiAgICBdKS5waXBlKG1hcCgoW29wdCwgbG9ja3MsIHJlc2VydmVzXSkgPT4ge1xuICAgICAgICBsZXQgb2Zmc2V0TG9jayA9IC0xO1xuICAgICAgICBsZXQgb2Zmc2V0UmVzZXJ2ZSA9IC0xO1xuICAgICAgICBjb25zdCB2ZXN0aW5nID0gb3B0LnVud3JhcE9yKG51bGwpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdmVzdGluZ1xuICAgICAgICAgICAgICAgID8gQXJyYXkuaXNBcnJheSh2ZXN0aW5nKVxuICAgICAgICAgICAgICAgICAgICA/IHZlc3RpbmdcbiAgICAgICAgICAgICAgICAgICAgOiBbdmVzdGluZ11cbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBsb2NrRW1wdHkubWFwKChlKSA9PiBlID8gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1ZlYzxCYWxhbmNlTG9jaz4nKSA6IGxvY2tzWysrb2Zmc2V0TG9ja10pLFxuICAgICAgICAgICAgcmVzZXJ2ZUVtcHR5Lm1hcCgoZSkgPT4gZSA/IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdWZWM8UGFsbGV0QmFsYW5jZXNSZXNlcnZlRGF0YT4nKSA6IHJlc2VydmVzWysrb2Zmc2V0UmVzZXJ2ZV0pXG4gICAgICAgIF07XG4gICAgfSkpO1xufVxuLyoqXG4gKiBAbmFtZSBhbGxcbiAqIEBwYXJhbSB7KCBBY2NvdW50SW5kZXggfCBBY2NvdW50SWQgfCBBZGRyZXNzIHwgc3RyaW5nICl9IGFkZHJlc3MgLSBBbiBhY2NvdW50cyBJZCBpbiBkaWZmZXJlbnQgZm9ybWF0cy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHZhcmlvdXMgYmFsYW5jZSBxdWVyaWVzXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IEFMSUNFID0gJ0Y3SHMnO1xuICpcbiAqIGFwaS5kZXJpdmUuYmFsYW5jZXMuYWxsKEFMSUNFLCAoeyBhY2NvdW50SWQsIGxvY2tlZEJhbGFuY2UgfSkgPT4ge1xuICogICBjb25zb2xlLmxvZyhgVGhlIGFjY291bnQgJHthY2NvdW50SWR9IGhhcyBhIGxvY2tlZCBiYWxhbmNlICR7bG9ja2VkQmFsYW5jZX0gdW5pdHMuYCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIGNvbnN0IGJhbGFuY2VJbnN0YW5jZXMgPSBhcGkucmVnaXN0cnkuZ2V0TW9kdWxlSW5zdGFuY2VzKGFwaS5ydW50aW1lVmVyc2lvbi5zcGVjTmFtZSwgJ2JhbGFuY2VzJyk7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkuZGVyaXZlLmJhbGFuY2VzLmFjY291bnQoYWRkcmVzcyksXG4gICAgICAgIGlzRnVuY3Rpb24oYXBpLnF1ZXJ5LnN5c3RlbT8uYWNjb3VudCkgfHwgaXNGdW5jdGlvbihhcGkucXVlcnkuYmFsYW5jZXM/LmFjY291bnQpXG4gICAgICAgICAgICA/IHF1ZXJ5Q3VycmVudChhcGksIGFkZHJlc3MsIGJhbGFuY2VJbnN0YW5jZXMpXG4gICAgICAgICAgICA6IHF1ZXJ5T2xkKGFwaSwgYWRkcmVzcylcbiAgICBdKS5waXBlKHN3aXRjaE1hcCgoW2FjY291bnQsIGxvY2tzXSkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9mKGFjY291bnQpLFxuICAgICAgICBvZihsb2NrcyksXG4gICAgICAgIGFwaS5kZXJpdmUuY2hhaW4uYmVzdE51bWJlcigpXG4gICAgXSkpLCBtYXAoKHJlc3VsdCkgPT4gY2FsY0JhbGFuY2VzKGFwaSwgcmVzdWx0KSkpKTtcbn1cbiIsImltcG9ydCB7IGFsbCB9IGZyb20gJy4vYWxsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZvdGluZ0JhbGFuY2VzLmpzJztcbmNvbnN0IHZvdGluZ0JhbGFuY2UgPSBhbGw7XG5leHBvcnQgeyBhbGwsIHZvdGluZ0JhbGFuY2UgfTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gdm90aW5nQmFsYW5jZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3NlcykgPT4gIWFkZHJlc3Nlcz8ubGVuZ3RoXG4gICAgICAgID8gb2YoW10pXG4gICAgICAgIDogY29tYmluZUxhdGVzdChhZGRyZXNzZXMubWFwKChhY2NvdW50SWQpID0+IGFwaS5kZXJpdmUuYmFsYW5jZXMuYWNjb3VudChhY2NvdW50SWQpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJCb3VudGllc1Byb3Bvc2FscyB9IGZyb20gJy4vaGVscGVycy9maWx0ZXJCb3VudHlQcm9wb3NhbHMuanMnO1xuZnVuY3Rpb24gcGFyc2VSZXN1bHQoW21heWJlQm91bnRpZXMsIG1heWJlRGVzY3JpcHRpb25zLCBpZHMsIGJvdW50eVByb3Bvc2Fsc10pIHtcbiAgICBjb25zdCBib3VudGllcyA9IFtdO1xuICAgIG1heWJlQm91bnRpZXMuZm9yRWFjaCgoYm91bnR5LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoYm91bnR5LmlzU29tZSkge1xuICAgICAgICAgICAgYm91bnRpZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgYm91bnR5OiBib3VudHkudW53cmFwKCksXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG1heWJlRGVzY3JpcHRpb25zW2luZGV4XS51bndyYXBPckRlZmF1bHQoKS50b1V0ZjgoKSxcbiAgICAgICAgICAgICAgICBpbmRleDogaWRzW2luZGV4XSxcbiAgICAgICAgICAgICAgICBwcm9wb3NhbHM6IGJvdW50eVByb3Bvc2Fscy5maWx0ZXIoKGJvdW50eVByb3Bvc2FsKSA9PiBib3VudHlQcm9wb3NhbC5wcm9wb3NhbCAmJiBpZHNbaW5kZXhdLmVxKGJvdW50eVByb3Bvc2FsLnByb3Bvc2FsLmFyZ3NbMF0pKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYm91bnRpZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gYm91bnRpZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgY29uc3QgYm91bnR5QmFzZSA9IGFwaS5xdWVyeS5ib3VudGllcyB8fCBhcGkucXVlcnkudHJlYXN1cnk7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYm91bnR5QmFzZS5ib3VudGllc1xuICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgYm91bnR5QmFzZS5ib3VudHlDb3VudCgpLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LmNvdW5jaWxcbiAgICAgICAgICAgICAgICA/IGFwaS5xdWVyeS5jb3VuY2lsLnByb3Bvc2FsQ291bnQoKVxuICAgICAgICAgICAgICAgIDogb2YoMClcbiAgICAgICAgXSkucGlwZShzd2l0Y2hNYXAoKCkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBib3VudHlCYXNlLmJvdW50aWVzLmtleXMoKSxcbiAgICAgICAgICAgIGFwaS5kZXJpdmUuY291bmNpbFxuICAgICAgICAgICAgICAgID8gYXBpLmRlcml2ZS5jb3VuY2lsLnByb3Bvc2FscygpXG4gICAgICAgICAgICAgICAgOiBvZihbXSlcbiAgICAgICAgXSkpLCBzd2l0Y2hNYXAoKFtrZXlzLCBwcm9wb3NhbHNdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZHMgPSBrZXlzLm1hcCgoeyBhcmdzOiBbaWRdIH0pID0+IGlkKTtcbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICBib3VudHlCYXNlLmJvdW50aWVzLm11bHRpKGlkcyksXG4gICAgICAgICAgICAgICAgYm91bnR5QmFzZS5ib3VudHlEZXNjcmlwdGlvbnMubXVsdGkoaWRzKSxcbiAgICAgICAgICAgICAgICBvZihpZHMpLFxuICAgICAgICAgICAgICAgIG9mKGZpbHRlckJvdW50aWVzUHJvcG9zYWxzKGFwaSwgcHJvcG9zYWxzKSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9KSwgbWFwKHBhcnNlUmVzdWx0KSlcbiAgICAgICAgOiBvZihwYXJzZVJlc3VsdChbW10sIFtdLCBbXSwgW11dKSkpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckJvdW50aWVzUHJvcG9zYWxzKGFwaSwgYWxsUHJvcG9zYWxzKSB7XG4gICAgY29uc3QgYm91bnR5VHhCYXNlID0gYXBpLnR4LmJvdW50aWVzID8gYXBpLnR4LmJvdW50aWVzIDogYXBpLnR4LnRyZWFzdXJ5O1xuICAgIGNvbnN0IGJvdW50eVByb3Bvc2FsQ2FsbHMgPSBbYm91bnR5VHhCYXNlLmFwcHJvdmVCb3VudHksIGJvdW50eVR4QmFzZS5jbG9zZUJvdW50eSwgYm91bnR5VHhCYXNlLnByb3Bvc2VDdXJhdG9yLCBib3VudHlUeEJhc2UudW5hc3NpZ25DdXJhdG9yXTtcbiAgICByZXR1cm4gYWxsUHJvcG9zYWxzLmZpbHRlcigocHJvcG9zYWwpID0+IGJvdW50eVByb3Bvc2FsQ2FsbHMuZmluZCgoYm91bnR5Q2FsbCkgPT4gcHJvcG9zYWwucHJvcG9zYWwgJiYgYm91bnR5Q2FsbC5pcyhwcm9wb3NhbC5wcm9wb3NhbCkpKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vYm91bnRpZXMuanMnO1xuIiwiaW1wb3J0IHsgbGF6eURlcml2ZVNlY3Rpb24gfSBmcm9tICcuL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVyaXZlIH0gZnJvbSAnLi9kZXJpdmUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXJpdmUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlL2luZGV4LmpzJztcbmV4cG9ydCB7IGxhenlEZXJpdmVTZWN0aW9uIH07XG5jb25zdCBjaGVja3MgPSB7XG4gICAgYWxsaWFuY2VNb3Rpb246IHtcbiAgICAgICAgaW5zdGFuY2VzOiBbJ2FsbGlhbmNlTW90aW9uJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdXG4gICAgfSxcbiAgICBiYWdzTGlzdDoge1xuICAgICAgICBpbnN0YW5jZXM6IFsndm90ZXJCYWdzTGlzdCcsICd2b3Rlckxpc3QnLCAnYmFnc0xpc3QnXSxcbiAgICAgICAgbWV0aG9kczogW10sXG4gICAgICAgIHdpdGhEZXRlY3Q6IHRydWVcbiAgICB9LFxuICAgIGNvbnRyYWN0czoge1xuICAgICAgICBpbnN0YW5jZXM6IFsnY29udHJhY3RzJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdXG4gICAgfSxcbiAgICBjb3VuY2lsOiB7XG4gICAgICAgIGluc3RhbmNlczogWydjb3VuY2lsJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdLFxuICAgICAgICB3aXRoRGV0ZWN0OiB0cnVlXG4gICAgfSxcbiAgICBjcm93ZGxvYW46IHtcbiAgICAgICAgaW5zdGFuY2VzOiBbJ2Nyb3dkbG9hbiddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH0sXG4gICAgZGVtb2NyYWN5OiB7XG4gICAgICAgIGluc3RhbmNlczogWydkZW1vY3JhY3knXSxcbiAgICAgICAgbWV0aG9kczogW11cbiAgICB9LFxuICAgIGVsZWN0aW9uczoge1xuICAgICAgICBpbnN0YW5jZXM6IFsncGhyYWdtZW5FbGVjdGlvbicsICdlbGVjdGlvbnNQaHJhZ21lbicsICdlbGVjdGlvbnMnLCAnY291bmNpbCddLFxuICAgICAgICBtZXRob2RzOiBbXSxcbiAgICAgICAgd2l0aERldGVjdDogdHJ1ZVxuICAgIH0sXG4gICAgaW1PbmxpbmU6IHtcbiAgICAgICAgaW5zdGFuY2VzOiBbJ2ltT25saW5lJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdXG4gICAgfSxcbiAgICBtZW1iZXJzaGlwOiB7XG4gICAgICAgIGluc3RhbmNlczogWydtZW1iZXJzaGlwJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdXG4gICAgfSxcbiAgICBwYXJhY2hhaW5zOiB7XG4gICAgICAgIGluc3RhbmNlczogWydwYXJhY2hhaW5zJywgJ3JlZ2lzdHJhciddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH0sXG4gICAgc2Vzc2lvbjoge1xuICAgICAgICBpbnN0YW5jZXM6IFsnc2Vzc2lvbiddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH0sXG4gICAgc29jaWV0eToge1xuICAgICAgICBpbnN0YW5jZXM6IFsnc29jaWV0eSddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH0sXG4gICAgc3Rha2luZzoge1xuICAgICAgICBpbnN0YW5jZXM6IFsnc3Rha2luZyddLFxuICAgICAgICBtZXRob2RzOiBbJ2VyYXNSZXdhcmRQb2ludHMnXVxuICAgIH0sXG4gICAgdGVjaG5pY2FsQ29tbWl0dGVlOiB7XG4gICAgICAgIGluc3RhbmNlczogWyd0ZWNobmljYWxDb21taXR0ZWUnXSxcbiAgICAgICAgbWV0aG9kczogW10sXG4gICAgICAgIHdpdGhEZXRlY3Q6IHRydWVcbiAgICB9LFxuICAgIHRyZWFzdXJ5OiB7XG4gICAgICAgIGluc3RhbmNlczogWyd0cmVhc3VyeSddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH1cbn07XG5mdW5jdGlvbiBnZXRNb2R1bGVJbnN0YW5jZXMoYXBpLCBzcGVjTmFtZSwgbW9kdWxlTmFtZSkge1xuICAgIHJldHVybiBhcGkucmVnaXN0cnkuZ2V0TW9kdWxlSW5zdGFuY2VzKHNwZWNOYW1lLCBtb2R1bGVOYW1lKSB8fCBbXTtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCB3aWxsIGluamVjdCBgYXBpYCBpbnRvIGFsbCB0aGUgZnVuY3Rpb25zIGluc2lkZVxuICogYGFsbFNlY3Rpb25zYCwgYW5kIGtlZXAgdGhlIG9iamVjdCBhcmNoaXRlY3R1cmUgb2YgYGFsbFNlY3Rpb25zYC5cbiAqL1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gaW5qZWN0RnVuY3Rpb25zKGluc3RhbmNlSWQsIGFwaSwgZGVyaXZlcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoZGVyaXZlcyk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFwaS5xdWVyeSk7XG4gICAgY29uc3Qgc3BlY05hbWUgPSBhcGkucnVudGltZVZlcnNpb24uc3BlY05hbWU7XG4gICAgY29uc3QgZmlsdGVyS2V5cyA9IChxKSA9PiBrZXlzLmluY2x1ZGVzKHEpO1xuICAgIGNvbnN0IGZpbHRlckluc3RhbmNlcyA9IChxKSA9PiBnZXRNb2R1bGVJbnN0YW5jZXMoYXBpLCBzcGVjTmFtZSwgcSkuc29tZShmaWx0ZXJLZXlzKTtcbiAgICBjb25zdCBmaWx0ZXJNZXRob2RzID0gKGFsbCkgPT4gKG0pID0+IGFsbC5zb21lKChxKSA9PiBrZXlzLmluY2x1ZGVzKHEpICYmIGFwaS5xdWVyeVtxXVttXSk7XG4gICAgY29uc3QgZ2V0S2V5cyA9IChzKSA9PiBPYmplY3Qua2V5cyhkZXJpdmVzW3NdKTtcbiAgICBjb25zdCBjcmVhdG9yID0gKHMsIG0pID0+IGRlcml2ZXNbc11bbV0oaW5zdGFuY2VJZCwgYXBpKTtcbiAgICBjb25zdCBpc0luY2x1ZGVkID0gKGMpID0+ICghY2hlY2tzW2NdIHx8ICgoY2hlY2tzW2NdLmluc3RhbmNlcy5zb21lKGZpbHRlcktleXMpICYmICghY2hlY2tzW2NdLm1ldGhvZHMubGVuZ3RoIHx8XG4gICAgICAgIGNoZWNrc1tjXS5tZXRob2RzLmV2ZXJ5KGZpbHRlck1ldGhvZHMoY2hlY2tzW2NdLmluc3RhbmNlcykpKSkgfHxcbiAgICAgICAgKGNoZWNrc1tjXS53aXRoRGV0ZWN0ICYmXG4gICAgICAgICAgICBjaGVja3NbY10uaW5zdGFuY2VzLnNvbWUoZmlsdGVySW5zdGFuY2VzKSkpKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBuYW1lcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgaXNJbmNsdWRlZChuYW1lKSAmJlxuICAgICAgICAgICAgbGF6eURlcml2ZVNlY3Rpb24ocmVzdWx0LCBuYW1lLCBnZXRLZXlzLCBjcmVhdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVEZXJpdmVzKGluc3RhbmNlSWQsIGFwaSwgY3VzdG9tID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbmplY3RGdW5jdGlvbnMoaW5zdGFuY2VJZCwgYXBpLCBkZXJpdmUpLFxuICAgICAgICAuLi5pbmplY3RGdW5jdGlvbnMoaW5zdGFuY2VJZCwgYXBpLCBjdXN0b20pXG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUJsb2NrTnVtYmVyRGVyaXZlIH0gZnJvbSAnLi91dGlsLmpzJztcbi8qKlxuICogQG5hbWUgYmVzdE51bWJlclxuICogQHJldHVybnMgVGhlIGxhdGVzdCBibG9jayBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGFwaS5kZXJpdmUuY2hhaW4uYmVzdE51bWJlcigoYmxvY2tOdW1iZXIpID0+IHtcbiAqICAgY29uc29sZS5sb2coYHRoZSBjdXJyZW50IGJlc3QgYmxvY2sgaXMgIyR7YmxvY2tOdW1iZXJ9YCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgYmVzdE51bWJlciA9IC8qI19fUFVSRV9fKi8gY3JlYXRlQmxvY2tOdW1iZXJEZXJpdmUoKGFwaSkgPT4gYXBpLnJwYy5jaGFpbi5zdWJzY3JpYmVOZXdIZWFkcygpKTtcbiIsImltcG9ydCB7IGNyZWF0ZUJsb2NrTnVtYmVyRGVyaXZlIH0gZnJvbSAnLi91dGlsLmpzJztcbi8qKlxuICogQG5hbWUgYmVzdE51bWJlckZpbmFsaXplZFxuICogQHJldHVybnMgQSBCbG9ja051bWJlclxuICogQGRlc2NyaXB0aW9uIEdldCB0aGUgbGF0ZXN0IGZpbmFsaXplZCBibG9jayBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGFwaS5kZXJpdmUuY2hhaW4uYmVzdE51bWJlckZpbmFsaXplZCgoYmxvY2tOdW1iZXIpID0+IHtcbiAqICAgY29uc29sZS5sb2coYHRoZSBjdXJyZW50IGZpbmFsaXplZCBibG9jayBpcyAjJHtibG9ja051bWJlcn1gKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBiZXN0TnVtYmVyRmluYWxpemVkID0gLyojX19QVVJFX18qLyBjcmVhdGVCbG9ja051bWJlckRlcml2ZSgoYXBpKSA9PiBhcGkucnBjLmNoYWluLnN1YnNjcmliZUZpbmFsaXplZEhlYWRzKCkpO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIGJlc3ROdW1iZXJMYWdcbiAqIEByZXR1cm5zIEEgbnVtYmVyIG9mIGJsb2Nrc1xuICogQGRlc2NyaXB0aW9uIENhbGN1bGF0ZXMgdGhlIGxhZyBiZXR3ZWVuIGZpbmFsaXplZCBoZWFkIGFuZCBiZXN0IGhlYWRcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogYXBpLmRlcml2ZS5jaGFpbi5iZXN0TnVtYmVyTGFnKChsYWcpID0+IHtcbiAqICAgY29uc29sZS5sb2coYGZpbmFsaXplZCBpcyAke2xhZ30gYmxvY2tzIGJlaGluZCBoZWFkYCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmVzdE51bWJlckxhZyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5jaGFpbi5iZXN0TnVtYmVyKCksXG4gICAgICAgIGFwaS5kZXJpdmUuY2hhaW4uYmVzdE51bWJlckZpbmFsaXplZCgpXG4gICAgXSkucGlwZShtYXAoKFtiZXN0TnVtYmVyLCBiZXN0TnVtYmVyRmluYWxpemVkXSkgPT4gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0Jsb2NrTnVtYmVyJywgYmVzdE51bWJlci5zdWIoYmVzdE51bWJlckZpbmFsaXplZCkpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjcmVhdGVTaWduZWRCbG9ja0V4dGVuZGVkIH0gZnJvbSAnLi4vdHlwZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRBdXRob3JEZXRhaWxzIH0gZnJvbSAnLi91dGlsLmpzJztcbi8qKlxuICogQG5hbWUgZ2V0QmxvY2tcbiAqIEBwYXJhbSB7KCBVaW50OEFycmF5IHwgc3RyaW5nICl9IGhhc2ggLSBBIGJsb2NrIGhhc2ggYXMgVTggYXJyYXkgb3Igc3RyaW5nLlxuICogQGRlc2NyaXB0aW9uIEdldCBhIHNwZWNpZmljIGJsb2NrIChlLmcuIHJwYy5jaGFpbi5nZXRCbG9jaykgYW5kIGV4dGVuZCBpdCB3aXRoIHRoZSBhdXRob3JcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgeyBhdXRob3IsIGJsb2NrIH0gPSBhd2FpdCBhcGkuZGVyaXZlLmNoYWluLmdldEJsb2NrKCcweDEyMy4uLjQ1NicpO1xuICpcbiAqIGNvbnNvbGUubG9nKGBibG9jayAjJHtibG9jay5oZWFkZXIubnVtYmVyfSB3YXMgYXV0aG9yZWQgYnkgJHthdXRob3J9YCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJsb2NrKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChibG9ja0hhc2gpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucnBjLmNoYWluLmdldEJsb2NrKGJsb2NrSGFzaCksXG4gICAgICAgIGFwaS5xdWVyeUF0KGJsb2NrSGFzaClcbiAgICBdKS5waXBlKHN3aXRjaE1hcCgoW3NpZ25lZEJsb2NrLCBxdWVyeUF0XSkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9mKHNpZ25lZEJsb2NrKSxcbiAgICAgICAgcXVlcnlBdC5zeXN0ZW0uZXZlbnRzKCksXG4gICAgICAgIGdldEF1dGhvckRldGFpbHMoYXBpLCBzaWduZWRCbG9jay5ibG9jay5oZWFkZXIsIGJsb2NrSGFzaClcbiAgICBdKSksIG1hcCgoW3NpZ25lZEJsb2NrLCBldmVudHMsIFssIHZhbGlkYXRvcnMsIGF1dGhvcl1dKSA9PiBjcmVhdGVTaWduZWRCbG9ja0V4dGVuZGVkKGV2ZW50cy5yZWdpc3RyeSwgc2lnbmVkQmxvY2ssIGV2ZW50cywgdmFsaWRhdG9ycywgYXV0aG9yKSkpKTtcbn1cbiIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJsb2NrQnlOdW1iZXIoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGJsb2NrTnVtYmVyKSA9PiBhcGkucnBjLmNoYWluLmdldEJsb2NrSGFzaChibG9ja051bWJlcikucGlwZShzd2l0Y2hNYXAoKGgpID0+IGFwaS5kZXJpdmUuY2hhaW4uZ2V0QmxvY2soaCkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlSGVhZGVyRXh0ZW5kZWQgfSBmcm9tICcuLi90eXBlL2luZGV4LmpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEF1dGhvckRldGFpbHMgfSBmcm9tICcuL3V0aWwuanMnO1xuLyoqXG4gKiBAbmFtZSBnZXRIZWFkZXJcbiAqIEBwYXJhbSB7KCBVaW50OEFycmF5IHwgc3RyaW5nICl9IGhhc2ggLSBBIGJsb2NrIGhhc2ggYXMgVTggYXJyYXkgb3Igc3RyaW5nLlxuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgYmxvY2sgaGVhZGVyIGFuZCB0aGUgYmxvY2sgYXV0aG9yXG4gKiBAZGVzY3JpcHRpb24gR2V0IGEgc3BlY2lmaWMgYmxvY2sgaGVhZGVyIGFuZCBleHRlbmQgaXQgd2l0aCB0aGUgYXV0aG9yXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IHsgYXV0aG9yLCBudW1iZXIgfSA9IGF3YWl0IGFwaS5kZXJpdmUuY2hhaW4uZ2V0SGVhZGVyKCcweDEyMy4uLjQ1NicpO1xuICpcbiAqIGNvbnNvbGUubG9nKGBibG9jayAjJHtudW1iZXJ9IHdhcyBhdXRob3JlZCBieSAke2F1dGhvcn1gKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChibG9ja0hhc2gpID0+IGFwaS5ycGMuY2hhaW4uZ2V0SGVhZGVyKGJsb2NrSGFzaCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4gZ2V0QXV0aG9yRGV0YWlscyhhcGksIGhlYWRlciwgYmxvY2tIYXNoKSksIG1hcCgoW2hlYWRlciwgdmFsaWRhdG9ycywgYXV0aG9yXSkgPT4gY3JlYXRlSGVhZGVyRXh0ZW5kZWQoKHZhbGlkYXRvcnMgfHwgaGVhZGVyKS5yZWdpc3RyeSwgaGVhZGVyLCB2YWxpZGF0b3JzLCBhdXRob3IpKSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9iZXN0TnVtYmVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYmVzdE51bWJlckZpbmFsaXplZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Jlc3ROdW1iZXJMYWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRCbG9jay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dldEJsb2NrQnlOdW1iZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRIZWFkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpYmVGaW5hbGl6ZWRCbG9ja3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N1YnNjcmliZU5ld0Jsb2Nrcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N1YnNjcmliZU5ld0hlYWRzLmpzJztcbiIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBzdWJzY3JpYmVGaW5hbGl6ZWRCbG9ja3NcbiAqIEByZXR1cm5zIFRoZSBmaW5hbGl6ZWQgYmxvY2sgJiBldmVudHMgZm9yIHRoYXQgYmxvY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZUZpbmFsaXplZEJsb2NrcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkuZGVyaXZlLmNoYWluLnN1YnNjcmliZUZpbmFsaXplZEhlYWRzKCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4gYXBpLmRlcml2ZS5jaGFpbi5nZXRCbG9jayhoZWFkZXIuY3JlYXRlZEF0SGFzaCB8fCBoZWFkZXIuaGFzaCkpKSk7XG59XG4iLCJpbXBvcnQgeyBmcm9tLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG4vKipcbiAqIFJldHVybnMgYSBoZWFkZXIgcmFuZ2UgZnJvbSBzdGFydEhhc2ggdG8gdG8gKG5vdCBpbmNsdWRpbmcpIGVuZEhhc2gsIGkuZS4gbGFzdEJsb2NrLnBhcmVudEhhc2ggPT09IGVuZEhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9nZXRIZWFkZXJSYW5nZShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoc3RhcnRIYXNoLCBlbmRIYXNoLCBwcmV2ID0gW10pID0+IGFwaS5ycGMuY2hhaW4uZ2V0SGVhZGVyKHN0YXJ0SGFzaCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4gaGVhZGVyLnBhcmVudEhhc2guZXEoZW5kSGFzaClcbiAgICAgICAgPyBvZihbaGVhZGVyLCAuLi5wcmV2XSlcbiAgICAgICAgOiBhcGkuZGVyaXZlLmNoYWluLl9nZXRIZWFkZXJSYW5nZShoZWFkZXIucGFyZW50SGFzaCwgZW5kSGFzaCwgW2hlYWRlciwgLi4ucHJldl0pKSkpO1xufVxuLyoqXG4gKiBAbmFtZSBzdWJzY3JpYmVGaW5hbGl6ZWRIZWFkc1xuICogQGRlc2NyaXB0aW9uIEFuIG9ic2VydmFibGUgb2YgdGhlIGZpbmFsaXplZCBibG9jayBoZWFkZXJzLiBVbmxpa2UgdGhlIGJhc2VcbiAqIGNoYWluLnN1YnNjcmliZUZpbmFsaXplZEhlYWRzIHRoaXMgZG9lcyBub3Qgc2tpcCBhbnkgaGVhZGVycy4gU2luY2UgZmluYWxpemF0aW9uXG4gKiBtYXkgc2tpcCBzcGVjaWZpYyBibG9ja3MgKGZpbmFsaXphdGlvbiBoYXBwZW5zIGluIHRlcm1zIG9mIGNoYWlucyksIHRoaXMgdmVyc2lvblxuICogb2YgdGhlIGRlcml2ZSB0cmFja3MgbWlzc2luZyBoZWFkZXJzIChzaW5jZSBsYXN0ICByZXRyaWV2ZWQpIGFuZCBwcm92aWRlcyB0aGVtXG4gKiB0byB0aGUgY2FsbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiB7XG4gICAgICAgIGxldCBwcmV2SGFzaCA9IG51bGw7XG4gICAgICAgIHJldHVybiBhcGkucnBjLmNoYWluLnN1YnNjcmliZUZpbmFsaXplZEhlYWRzKCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW5kSGFzaCA9IHByZXZIYXNoO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRIYXNoID0gaGVhZGVyLnBhcmVudEhhc2g7XG4gICAgICAgICAgICBwcmV2SGFzaCA9IGhlYWRlci5jcmVhdGVkQXRIYXNoID0gaGVhZGVyLmhhc2g7XG4gICAgICAgICAgICByZXR1cm4gZW5kSGFzaCA9PT0gbnVsbCB8fCBzdGFydEhhc2guZXEoZW5kSGFzaClcbiAgICAgICAgICAgICAgICA/IG9mKGhlYWRlcilcbiAgICAgICAgICAgICAgICA6IGFwaS5kZXJpdmUuY2hhaW4uX2dldEhlYWRlclJhbmdlKHN0YXJ0SGFzaCwgZW5kSGFzaCwgW2hlYWRlcl0pLnBpcGUoc3dpdGNoTWFwKChoZWFkZXJzKSA9PiBmcm9tKGhlYWRlcnMpKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBzdWJzY3JpYmVOZXdCbG9ja3NcbiAqIEByZXR1cm5zIFRoZSBsYXRlc3QgYmxvY2sgJiBldmVudHMgZm9yIHRoYXQgYmxvY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZU5ld0Jsb2NrcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkuZGVyaXZlLmNoYWluLnN1YnNjcmliZU5ld0hlYWRzKCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4gYXBpLmRlcml2ZS5jaGFpbi5nZXRCbG9jayhoZWFkZXIuY3JlYXRlZEF0SGFzaCB8fCBoZWFkZXIuaGFzaCkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlSGVhZGVyRXh0ZW5kZWQgfSBmcm9tICcuLi90eXBlL2luZGV4LmpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEF1dGhvckRldGFpbHMgfSBmcm9tICcuL3V0aWwuanMnO1xuLyoqXG4gKiBAbmFtZSBzdWJzY3JpYmVOZXdIZWFkc1xuICogQHJldHVybnMgQSBoZWFkZXIgd2l0aCB0aGUgY3VycmVudCBoZWFkZXIgKGluY2x1ZGluZyBleHRyYWN0ZWQgYXV0aG9yKVxuICogQGRlc2NyaXB0aW9uIEFuIG9ic2VydmFibGUgb2YgdGhlIGN1cnJlbnQgYmxvY2sgaGVhZGVyIGFuZCBpdCdzIGF1dGhvclxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBhcGkuZGVyaXZlLmNoYWluLnN1YnNjcmliZU5ld0hlYWRzKChoZWFkZXIpID0+IHtcbiAqICAgY29uc29sZS5sb2coYGJsb2NrICMke2hlYWRlci5udW1iZXJ9IHdhcyBhdXRob3JlZCBieSAke2hlYWRlci5hdXRob3J9YCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlTmV3SGVhZHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLnJwYy5jaGFpbi5zdWJzY3JpYmVOZXdIZWFkcygpLnBpcGUoc3dpdGNoTWFwKChoZWFkZXIpID0+IGdldEF1dGhvckRldGFpbHMoYXBpLCBoZWFkZXIpKSwgbWFwKChbaGVhZGVyLCB2YWxpZGF0b3JzLCBhdXRob3JdKSA9PiB7XG4gICAgICAgIGhlYWRlci5jcmVhdGVkQXRIYXNoID0gaGVhZGVyLmhhc2g7XG4gICAgICAgIHJldHVybiBjcmVhdGVIZWFkZXJFeHRlbmRlZChoZWFkZXIucmVnaXN0cnksIGhlYWRlciwgdmFsaWRhdG9ycywgYXV0aG9yKTtcbiAgICB9KSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBtZXJnZU1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbywgdW53cmFwQmxvY2tOdW1iZXIgfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja051bWJlckRlcml2ZShmbikge1xuICAgIHJldHVybiAoaW5zdGFuY2VJZCwgYXBpKSA9PiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGZuKGFwaSkucGlwZShtYXAodW53cmFwQmxvY2tOdW1iZXIpKSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBnZXRBdXRob3JEZXRhaWxzV2l0aEF0KGhlYWRlciwgcXVlcnlBdCkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBxdWVyeUF0LnNlc3Npb24/LnZhbGlkYXRvcnNcbiAgICAgICAgPyBxdWVyeUF0LnNlc3Npb24udmFsaWRhdG9ycygpXG4gICAgICAgIDogb2YobnVsbCk7XG4gICAgLy8gbmltYnVzIGNvbnNlbnN1cyBzdG9yZXMgdGhlIHNlc3Npb24ga2V5IG9mIHRoZSBibG9jayBhdXRob3IgaW4gaGVhZGVyIGxvZ3NcbiAgICBjb25zdCB7IGxvZ3M6IFtsb2ddIH0gPSBoZWFkZXIuZGlnZXN0O1xuICAgIGNvbnN0IGxvZ2dlZEF1dGhvciA9IChsb2cgJiYgKChsb2cuaXNDb25zZW5zdXMgJiYgbG9nLmFzQ29uc2Vuc3VzWzBdLmlzTmltYnVzICYmIGxvZy5hc0NvbnNlbnN1c1sxXSkgfHxcbiAgICAgICAgKGxvZy5pc1ByZVJ1bnRpbWUgJiYgbG9nLmFzUHJlUnVudGltZVswXS5pc05pbWJ1cyAmJiBsb2cuYXNQcmVSdW50aW1lWzFdKSkpO1xuICAgIGlmIChsb2dnZWRBdXRob3IpIHtcbiAgICAgICAgLy8gdXNlIHRoZSBhdXRob3IgbWFwcGluZyBwYWxsZXQsIGlmIGF2YWlsYWJsZSAoaWU6IG1vb25iZWFtLCBtb29ucml2ZXIpLCB0byBtYXAgc2Vzc2lvbiAobmltYnVzKSBrZXkgdG8gYXV0aG9yIChjb2xsYXRvci92YWxpZGF0b3IpIGtleVxuICAgICAgICBpZiAocXVlcnlBdFsnYXV0aG9yTWFwcGluZyddPy5bJ21hcHBpbmdXaXRoRGVwb3NpdCddKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgb2YoaGVhZGVyKSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICAgICAgICAgIHF1ZXJ5QXRbJ2F1dGhvck1hcHBpbmcnXVsnbWFwcGluZ1dpdGhEZXBvc2l0J10obG9nZ2VkQXV0aG9yKS5waXBlKG1hcCgobykgPT4gby51bndyYXBPcih7IGFjY291bnQ6IG51bGwgfSkuYWNjb3VudCkpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc2Vzc2lvbiBhbmQgcGFyYWNoYWluIHN0YWtpbmcgcGFsbGV0cywgaWYgYXZhaWxhYmxlIChpZTogbWFudGEsIGNhbGFtYXJpKSwgdG8gbWFwIHNlc3Npb24gKG5pbWJ1cykga2V5IHRvIGF1dGhvciAoY29sbGF0b3IpIGtleVxuICAgICAgICBpZiAocXVlcnlBdFsncGFyYWNoYWluU3Rha2luZyddPy5bJ3NlbGVjdGVkQ2FuZGlkYXRlcyddICYmIHF1ZXJ5QXQuc2Vzc2lvbj8ubmV4dEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ2dlZEhleCA9IGxvZ2dlZEF1dGhvci50b0hleCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIG9mKGhlYWRlciksXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgICAgICAgICBxdWVyeUF0WydwYXJhY2hhaW5TdGFraW5nJ11bJ3NlbGVjdGVkQ2FuZGlkYXRlcyddKCkucGlwZShtZXJnZU1hcCgoc2VsZWN0ZWRDYW5kaWRhdGVzKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICAgICAgb2Yoc2VsZWN0ZWRDYW5kaWRhdGVzKSxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlBdC5zZXNzaW9uLm5leHRLZXlzLm11bHRpKHNlbGVjdGVkQ2FuZGlkYXRlcykucGlwZShtYXAoKG5leHRLZXlzKSA9PiBuZXh0S2V5cy5maW5kSW5kZXgoKG8pID0+IG8udW53cmFwT3JEZWZhdWx0KCkubmltYnVzLnRvSGV4KCkgPT09IGxvZ2dlZEhleCkpKVxuICAgICAgICAgICAgICAgIF0pKSwgbWFwKChbc2VsZWN0ZWRDYW5kaWRhdGVzLCBpbmRleF0pID0+IGluZGV4ID09PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZENhbmRpZGF0ZXNbaW5kZXhdKSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vcm1hbCBvcGVyYXRpb24sIG5vbi1tYXBwaW5nXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZihoZWFkZXIpLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBvZihudWxsKVxuICAgIF0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhvckRldGFpbHMoYXBpLCBoZWFkZXIsIGJsb2NrSGFzaCkge1xuICAgIC8vIEZvciBvbi1jaGFpbiBzdGF0ZSwgd2UgbmVlZCB0byByZXRyaWV2ZSBpdCBhcyBwZXIgdGhlIHN0YXJ0XG4gICAgLy8gb2YgdGhlIGJsb2NrIGJlaW5nIGNvbnN0cnVjdGVkLCBpLmUuIHNlc3Npb24gdmFsaWRhdG9ycyB3b3VsZFxuICAgIC8vIGJlIGF0IHRoZSBwb2ludCBvZiB0aGUgYmxvY2sgY29uc3RydWN0aW9uLCBub3Qgd2hlbiBhbGwgb3BlcmF0aW9uc1xuICAgIC8vIGhhcyBiZWVuIHN1cHBsaWVkLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciBmb3IgdGhlIGZpcnN0IGJsb2NrIChubyBwYXJlbnRIYXNoIGF2YWlsYWJsZSksIHdlIHdvdWxkXG4gICAgLy8ganVzdCB1c2UgdGhlIGFzLWlzXG4gICAgcmV0dXJuIGFwaS5xdWVyeUF0KGhlYWRlci5wYXJlbnRIYXNoLmlzRW1wdHlcbiAgICAgICAgPyBibG9ja0hhc2ggfHwgaGVhZGVyLmhhc2hcbiAgICAgICAgOiBoZWFkZXIucGFyZW50SGFzaCkucGlwZShzd2l0Y2hNYXAoKHF1ZXJ5QXQpID0+IGdldEF1dGhvckRldGFpbHNXaXRoQXQoaGVhZGVyLCBxdWVyeUF0KSkpO1xufVxuIiwiaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoYXBpLCBzZWN0aW9uKSB7XG4gICAgY29uc3QgaW5zdGFuY2VzID0gYXBpLnJlZ2lzdHJ5LmdldE1vZHVsZUluc3RhbmNlcyhhcGkucnVudGltZVZlcnNpb24uc3BlY05hbWUsIHNlY3Rpb24pO1xuICAgIGNvbnN0IG5hbWUgPSBpbnN0YW5jZXM/Lmxlbmd0aFxuICAgICAgICA/IGluc3RhbmNlc1swXVxuICAgICAgICA6IHNlY3Rpb247XG4gICAgcmV0dXJuIGFwaS5xdWVyeVtuYW1lXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2VjdGlvbihzZWN0aW9uLCBmbikge1xuICAgIHJldHVybiAoaW5zdGFuY2VJZCwgYXBpKSA9PiBtZW1vKGluc3RhbmNlSWQsIGZuKGdldEluc3RhbmNlKGFwaSwgc2VjdGlvbiksIGFwaSwgaW5zdGFuY2VJZCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxNZXRob2QobWV0aG9kLCBlbXB0eSkge1xuICAgIHJldHVybiAoc2VjdGlvbikgPT4gd2l0aFNlY3Rpb24oc2VjdGlvbiwgKHF1ZXJ5KSA9PiAoKSA9PiBpc0Z1bmN0aW9uKHF1ZXJ5Py5bbWV0aG9kXSlcbiAgICAgICAgPyBxdWVyeVttZXRob2RdKClcbiAgICAgICAgOiBvZihlbXB0eSkpO1xufVxuIiwiaW1wb3J0IHsgY2FsbE1ldGhvZCB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5leHBvcnQgY29uc3QgbWVtYmVycyA9IC8qI19fUFVSRV9fKi8gY2FsbE1ldGhvZCgnbWVtYmVycycsIFtdKTtcbiIsImltcG9ydCB7IG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyB3aXRoU2VjdGlvbiB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcHJpbWUoc2VjdGlvbikge1xuICAgIHJldHVybiB3aXRoU2VjdGlvbihzZWN0aW9uLCAocXVlcnkpID0+ICgpID0+IGlzRnVuY3Rpb24ocXVlcnk/LnByaW1lKVxuICAgICAgICA/IHF1ZXJ5LnByaW1lKCkucGlwZShtYXAoKG8pID0+IG8udW53cmFwT3IobnVsbCkpKVxuICAgICAgICA6IG9mKG51bGwpKTtcbn1cbiIsImltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGZpcnN0T2JzZXJ2YWJsZSB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgY2FsbE1ldGhvZCwgd2l0aFNlY3Rpb24gfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuZnVuY3Rpb24gcGFyc2UoYXBpLCBbaGFzaGVzLCBwcm9wb3NhbHMsIHZvdGVzXSkge1xuICAgIHJldHVybiBwcm9wb3NhbHMubWFwKChvLCBpbmRleCkgPT4gKHtcbiAgICAgICAgaGFzaDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0hhc2gnLCBoYXNoZXNbaW5kZXhdKSxcbiAgICAgICAgcHJvcG9zYWw6IG8gJiYgby5pc1NvbWVcbiAgICAgICAgICAgID8gby51bndyYXAoKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB2b3Rlczogdm90ZXNbaW5kZXhdLnVud3JhcE9yKG51bGwpXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gX3Byb3Bvc2Fsc0Zyb20oYXBpLCBxdWVyeSwgaGFzaGVzKSB7XG4gICAgcmV0dXJuIChpc0Z1bmN0aW9uKHF1ZXJ5Py5wcm9wb3NhbHMpICYmIGhhc2hlcy5sZW5ndGhcbiAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKGhhc2hlcyksXG4gICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBzaW1wbHkgYmUgYXBpLnF1ZXJ5W3NlY3Rpb25dLnByb3Bvc2FsT2YubXVsdGk8T3B0aW9uPFByb3Bvc2FsPj4oaGFzaGVzKSxcbiAgICAgICAgICAgIC8vIGhvd2V2ZXIgd2UgaGF2ZSBoYWQgY2FzZXMgb24gRWRnZXdhcmUgd2hlcmUgdGhlIGluZGljZXMgaGF2ZSBtb3ZlZCBhcm91bmQgYWZ0ZXIgYW5cbiAgICAgICAgICAgIC8vIHVwZ3JhZGUsIHdoaWNoIHJlc3VsdHMgaW4gaW52YWxpZCBvbi1jaGFpbiBkYXRhXG4gICAgICAgICAgICBxdWVyeS5wcm9wb3NhbE9mLm11bHRpKGhhc2hlcykucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKGhhc2hlcy5tYXAoKCkgPT4gbnVsbCkpKSksXG4gICAgICAgICAgICBxdWVyeS52b3RpbmcubXVsdGkoaGFzaGVzKVxuICAgICAgICBdKVxuICAgICAgICA6IG9mKFtbXSwgW10sIFtdXSkpLnBpcGUobWFwKChyKSA9PiBwYXJzZShhcGksIHIpKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcG9zYWxzKHNlY3Rpb24pIHtcbiAgICByZXR1cm4gd2l0aFNlY3Rpb24oc2VjdGlvbiwgKHF1ZXJ5KSA9PiAoKSA9PiBvZihpc0Z1bmN0aW9uKHF1ZXJ5Py5wcm9wb3NhbHMpKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvcG9zYWxzKHNlY3Rpb24pIHtcbiAgICByZXR1cm4gd2l0aFNlY3Rpb24oc2VjdGlvbiwgKHF1ZXJ5LCBhcGkpID0+ICgpID0+IGFwaS5kZXJpdmVbc2VjdGlvbl0ucHJvcG9zYWxIYXNoZXMoKS5waXBlKHN3aXRjaE1hcCgoYWxsKSA9PiBfcHJvcG9zYWxzRnJvbShhcGksIHF1ZXJ5LCBhbGwpKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByb3Bvc2FsKHNlY3Rpb24pIHtcbiAgICByZXR1cm4gd2l0aFNlY3Rpb24oc2VjdGlvbiwgKHF1ZXJ5LCBhcGkpID0+IChoYXNoKSA9PiBpc0Z1bmN0aW9uKHF1ZXJ5Py5wcm9wb3NhbHMpXG4gICAgICAgID8gZmlyc3RPYnNlcnZhYmxlKF9wcm9wb3NhbHNGcm9tKGFwaSwgcXVlcnksIFtoYXNoXSkpXG4gICAgICAgIDogb2YobnVsbCkpO1xufVxuZXhwb3J0IGNvbnN0IHByb3Bvc2FsQ291bnQgPSAvKiNfX1BVUkVfXyovIGNhbGxNZXRob2QoJ3Byb3Bvc2FsQ291bnQnLCBudWxsKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbEhhc2hlcyA9IC8qI19fUFVSRV9fKi8gY2FsbE1ldGhvZCgncHJvcG9zYWxzJywgW10pO1xuIiwiaW1wb3J0IHsgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gcXVlcnlDb25zdGFudHMoYXBpKSB7XG4gICAgcmV0dXJuIG9mKFtcbiAgICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgICBhcGkuY29uc3RzLmNvbnRyYWN0c1snY2FsbEJhc2VGZWUnXSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScpLFxuICAgICAgICBhcGkuY29uc3RzLmNvbnRyYWN0c1snY29udHJhY3RGZWUnXSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScpLFxuICAgICAgICBhcGkuY29uc3RzLmNvbnRyYWN0c1snY3JlYXRpb25GZWUnXSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScpLFxuICAgICAgICBhcGkuY29uc3RzLmNvbnRyYWN0c1sndHJhbnNhY3Rpb25CYXNlRmVlJ10gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSxcbiAgICAgICAgYXBpLmNvbnN0cy5jb250cmFjdHNbJ3RyYW5zYWN0aW9uQnl0ZUZlZSddIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyksXG4gICAgICAgIGFwaS5jb25zdHMuY29udHJhY3RzWyd0cmFuc2ZlckZlZSddIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyksXG4gICAgICAgIC8vIGN1cnJlbnRcbiAgICAgICAgYXBpLmNvbnN0cy5jb250cmFjdHNbJ3JlbnRCeXRlRmVlJ10gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSxcbiAgICAgICAgYXBpLmNvbnN0cy5jb250cmFjdHNbJ3JlbnREZXBvc2l0T2Zmc2V0J10gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSxcbiAgICAgICAgYXBpLmNvbnN0cy5jb250cmFjdHNbJ3N1cmNoYXJnZVJld2FyZCddIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyksXG4gICAgICAgIGFwaS5jb25zdHMuY29udHJhY3RzWyd0b21ic3RvbmVEZXBvc2l0J10gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKVxuICAgIF0pO1xufVxuLyoqXG4gKiBAbmFtZSBmZWVzXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY29tYmluZWQgcmVzdWx0cyBvZiB0aGUgcXVlcmllcyBmb3JcbiAqIGFsbCByZWxldmFudCBjb250cmFjdCBmZWVzIGFzIGRlY2xhcmVkIGluIHRoZSBzdWJzdHJhdGUgY2hhaW4gc3BlYy5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogYXBpLmRlcml2ZS5jb250cmFjdHMuZmVlcygoW2NyZWF0aW9uRmVlLCB0cmFuc2ZlckZlZV0pID0+IHtcbiAqICAgY29uc29sZS5sb2coYFRoZSBmZWUgZm9yIGNyZWF0aW5nIGEgbmV3IGNvbnRyYWN0IG9uIHRoaXMgY2hhaW4gaXMgJHtjcmVhdGlvbkZlZX0gdW5pdHMuIFRoZSBmZWUgcmVxdWlyZWQgdG8gY2FsbCB0aGlzIGNvbnRyYWN0IGlzICR7dHJhbnNmZXJGZWV9IHVuaXRzLmApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZlZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gcXVlcnlDb25zdGFudHMoYXBpKS5waXBlKG1hcCgoW2NhbGxCYXNlRmVlLCBjb250cmFjdEZlZSwgY3JlYXRpb25GZWUsIHRyYW5zYWN0aW9uQmFzZUZlZSwgdHJhbnNhY3Rpb25CeXRlRmVlLCB0cmFuc2ZlckZlZSwgcmVudEJ5dGVGZWUsIHJlbnREZXBvc2l0T2Zmc2V0LCBzdXJjaGFyZ2VSZXdhcmQsIHRvbWJzdG9uZURlcG9zaXRdKSA9PiAoe1xuICAgICAgICAgICAgY2FsbEJhc2VGZWUsXG4gICAgICAgICAgICBjb250cmFjdEZlZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmVlLFxuICAgICAgICAgICAgcmVudEJ5dGVGZWUsXG4gICAgICAgICAgICByZW50RGVwb3NpdE9mZnNldCxcbiAgICAgICAgICAgIHN1cmNoYXJnZVJld2FyZCxcbiAgICAgICAgICAgIHRvbWJzdG9uZURlcG9zaXQsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkJhc2VGZWUsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkJ5dGVGZWUsXG4gICAgICAgICAgICB0cmFuc2ZlckZlZVxuICAgICAgICB9KSkpO1xuICAgIH0pO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9mZWVzLmpzJztcbiIsImltcG9ydCB7IGhhc1Byb3Bvc2FscyBhcyBjb2xsZWN0aXZlSGFzUHJvcG9zYWxzLCBtZW1iZXJzIGFzIGNvbGxlY3RpdmVNZW1iZXJzLCBwcmltZSBhcyBjb2xsZWN0aXZlUHJpbWUsIHByb3Bvc2FsIGFzIGNvbGxlY3RpdmVQcm9wb3NhbCwgcHJvcG9zYWxDb3VudCBhcyBjb2xsZWN0aXZlUHJvcG9zYWxDb3VudCwgcHJvcG9zYWxIYXNoZXMgYXMgY29sbGVjdGl2ZVByb3Bvc2FsSGFzaGVzLCBwcm9wb3NhbHMgYXMgY29sbGVjdGl2ZVByb3Bvc2FscyB9IGZyb20gJy4uL2NvbGxlY3RpdmUvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi92b3Rlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZvdGVzT2YuanMnO1xuZXhwb3J0IGNvbnN0IG1lbWJlcnMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVNZW1iZXJzKCdjb3VuY2lsJyk7XG5leHBvcnQgY29uc3QgaGFzUHJvcG9zYWxzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlSGFzUHJvcG9zYWxzKCdjb3VuY2lsJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWwgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbCgnY291bmNpbCcpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FsQ291bnQgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbENvdW50KCdjb3VuY2lsJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxIYXNoZXMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcygnY291bmNpbCcpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FscyA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByb3Bvc2FscygnY291bmNpbCcpO1xuZXhwb3J0IGNvbnN0IHByaW1lID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJpbWUoJ2NvdW5jaWwnKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIGlzVm90ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZnVuY3Rpb24gcmV0cmlldmVTdGFrZU9mKGVsZWN0aW9ucykge1xuICAgIHJldHVybiBlbGVjdGlvbnNbJ3N0YWtlT2YnXS5lbnRyaWVzKCkucGlwZShtYXAoKGVudHJpZXMpID0+IGVudHJpZXMubWFwKChbeyBhcmdzOiBbYWNjb3VudElkXSB9LCBzdGFrZV0pID0+IFthY2NvdW50SWQsIHN0YWtlXSkpKTtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlVm90ZU9mKGVsZWN0aW9ucykge1xuICAgIHJldHVybiBlbGVjdGlvbnNbJ3ZvdGVzT2YnXS5lbnRyaWVzKCkucGlwZShtYXAoKGVudHJpZXMpID0+IGVudHJpZXMubWFwKChbeyBhcmdzOiBbYWNjb3VudElkXSB9LCB2b3Rlc10pID0+IFthY2NvdW50SWQsIHZvdGVzXSkpKTtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlUHJldihhcGksIGVsZWN0aW9ucykge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgcmV0cmlldmVTdGFrZU9mKGVsZWN0aW9ucyksXG4gICAgICAgIHJldHJpZXZlVm90ZU9mKGVsZWN0aW9ucylcbiAgICBdKS5waXBlKG1hcCgoW3N0YWtlcywgdm90ZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICB2b3Rlcy5mb3JFYWNoKChbdm90ZXIsIHZvdGVzXSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW3ZvdGVyLCB7IHN0YWtlOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScpLCB2b3RlcyB9XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdGFrZXMuZm9yRWFjaCgoW3N0YWtlciwgc3Rha2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHJlc3VsdC5maW5kKChbdm90ZXJdKSA9PiB2b3Rlci5lcShzdGFrZXIpKTtcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5WzFdLnN0YWtlID0gc3Rha2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChbc3Rha2VyLCB7IHN0YWtlLCB2b3RlczogW10gfV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSk7XG59XG5mdW5jdGlvbiByZXRyaWV2ZUN1cnJlbnQoZWxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIGVsZWN0aW9ucy52b3RpbmcuZW50cmllcygpLnBpcGUobWFwKChlbnRyaWVzKSA9PiBlbnRyaWVzLm1hcCgoW3sgYXJnczogW2FjY291bnRJZF0gfSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgaXNWb3Rlcih2YWx1ZSlcbiAgICAgICAgICAgID8geyBzdGFrZTogdmFsdWUuc3Rha2UsIHZvdGVzOiB2YWx1ZS52b3RlcyB9XG4gICAgICAgICAgICA6IHsgc3Rha2U6IHZhbHVlWzBdLCB2b3RlczogdmFsdWVbMV0gfVxuICAgIF0pKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdm90ZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgY29uc3QgZWxlY3Rpb25zID0gYXBpLnF1ZXJ5LmVsZWN0aW9ucyB8fCBhcGkucXVlcnlbJ3BocmFnbWVuRWxlY3Rpb24nXSB8fCBhcGkucXVlcnlbJ2VsZWN0aW9uc1BocmFnbWVuJ107XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gZWxlY3Rpb25zXG4gICAgICAgID8gZWxlY3Rpb25zWydzdGFrZU9mJ11cbiAgICAgICAgICAgID8gcmV0cmlldmVQcmV2KGFwaSwgZWxlY3Rpb25zKVxuICAgICAgICAgICAgOiByZXRyaWV2ZUN1cnJlbnQoZWxlY3Rpb25zKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCBmdW5jdGlvbiB2b3Rlc09mKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWQpID0+IGFwaS5kZXJpdmUuY291bmNpbC52b3RlcygpLnBpcGUobWFwKCh2b3RlcykgPT4gKHZvdGVzLmZpbmQoKFtmcm9tXSkgPT4gZnJvbS5lcShhY2NvdW50SWQpKSB8fFxuICAgICAgICBbbnVsbCwgeyBzdGFrZTogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSwgdm90ZXM6IFtdIH1dKVsxXSkpKTtcbn1cbiIsImltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdThhQ29uY2F0LCB1OGFUb0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGJsYWtlMkFzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIGNyZWF0ZUNoaWxkS2V5KGluZm8pIHtcbiAgICByZXR1cm4gdThhVG9IZXgodThhQ29uY2F0KCc6Y2hpbGRfc3RvcmFnZTpkZWZhdWx0OicsIGJsYWtlMkFzVThhKHU4YUNvbmNhdCgnY3Jvd2Rsb2FuJywgKGluZm8uZnVuZEluZGV4IHx8IGluZm8udHJpZUluZGV4KS50b1U4YSgpKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZEtleShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAocGFyYUlkKSA9PiBhcGkucXVlcnlbJ2Nyb3dkbG9hbiddWydmdW5kcyddKHBhcmFJZCkucGlwZShtYXAoKG9wdEluZm8pID0+IG9wdEluZm8uaXNTb21lXG4gICAgICAgID8gY3JlYXRlQ2hpbGRLZXkob3B0SW5mby51bndyYXAoKSlcbiAgICAgICAgOiBudWxsKSkpO1xufVxuIiwiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgbWFwLCBvZiwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXJyYXlGbGF0dGVuLCBpc0Z1bmN0aW9uLCBuZXh0VGljayB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGV4dHJhY3RDb250cmlidXRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5jb25zdCBQQUdFX1NJWkVfSyA9IDEwMDA7IC8vIGxpbWl0IGFsaWduZWQgd2l0aCB0aGUgMWsgb24gdGhlIG5vZGUgKHRyaWUgbG9va3VwcyBhcmUgaGVhdnkpXG5mdW5jdGlvbiBfZ2V0VXBkYXRlcyhhcGksIHBhcmFJZCkge1xuICAgIGxldCBhZGRlZCA9IFtdO1xuICAgIGxldCByZW1vdmVkID0gW107XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5zeXN0ZW0uZXZlbnRzKCkucGlwZShzd2l0Y2hNYXAoKGV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gZXh0cmFjdENvbnRyaWJ1dGVkKHBhcmFJZCwgZXZlbnRzKTtcbiAgICAgICAgaWYgKGNoYW5nZXMuYWRkZWQubGVuZ3RoIHx8IGNoYW5nZXMucmVtb3ZlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZGVkID0gYWRkZWQuY29uY2F0KC4uLmNoYW5nZXMuYWRkZWQpO1xuICAgICAgICAgICAgcmVtb3ZlZCA9IHJlbW92ZWQuY29uY2F0KC4uLmNoYW5nZXMucmVtb3ZlZCk7XG4gICAgICAgICAgICByZXR1cm4gb2YoeyBhZGRlZCwgYWRkZWREZWx0YTogY2hhbmdlcy5hZGRlZCwgYmxvY2tIYXNoOiBldmVudHMuY3JlYXRlZEF0SGFzaD8udG9IZXgoKSB8fCAnLScsIHJlbW92ZWQsIHJlbW92ZWREZWx0YTogY2hhbmdlcy5yZW1vdmVkIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSwgc3RhcnRXaXRoKHsgYWRkZWQsIGFkZGVkRGVsdGE6IFtdLCBibG9ja0hhc2g6ICctJywgcmVtb3ZlZCwgcmVtb3ZlZERlbHRhOiBbXSB9KSk7XG59XG5mdW5jdGlvbiBfZXZlbnRUcmlnZ2VyQWxsKGFwaSwgcGFyYUlkKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5zeXN0ZW0uZXZlbnRzKCkucGlwZShzd2l0Y2hNYXAoKGV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGV2ZW50cy5maWx0ZXIoKHsgZXZlbnQ6IHsgZGF0YTogW2V2ZW50UGFyYUlkXSwgbWV0aG9kLCBzZWN0aW9uIH0gfSkgPT4gc2VjdGlvbiA9PT0gJ2Nyb3dkbG9hbicgJiZcbiAgICAgICAgICAgIFsnQWxsUmVmdW5kZWQnLCAnRGlzc29sdmVkJywgJ1BhcnRpYWxseVJlZnVuZGVkJ10uaW5jbHVkZXMobWV0aG9kKSAmJlxuICAgICAgICAgICAgZXZlbnRQYXJhSWQuZXEocGFyYUlkKSk7XG4gICAgICAgIHJldHVybiBpdGVtcy5sZW5ndGhcbiAgICAgICAgICAgID8gb2YoZXZlbnRzLmNyZWF0ZWRBdEhhc2g/LnRvSGV4KCkgfHwgJy0nKVxuICAgICAgICAgICAgOiBFTVBUWTtcbiAgICB9KSwgc3RhcnRXaXRoKCctJykpO1xufVxuZnVuY3Rpb24gX2dldEtleXNQYWdlZChhcGksIGNoaWxkS2V5KSB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcbiAgICByZXR1cm4gc3ViamVjdC5waXBlKHN3aXRjaE1hcCgoc3RhcnRLZXkpID0+IGFwaS5ycGMuY2hpbGRzdGF0ZS5nZXRLZXlzUGFnZWQoY2hpbGRLZXksICcweCcsIFBBR0VfU0laRV9LLCBzdGFydEtleSkpLCB0YXAoKGtleXMpID0+IHtcbiAgICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAga2V5cy5sZW5ndGggPT09IFBBR0VfU0laRV9LXG4gICAgICAgICAgICAgICAgPyBzdWJqZWN0Lm5leHQoa2V5c1tQQUdFX1NJWkVfSyAtIDFdLnRvSGV4KCkpXG4gICAgICAgICAgICAgICAgOiBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pLCB0b0FycmF5KCksIC8vIHRvQXJyYXkgc2luY2Ugd2Ugd2FudCB0byBzdGFydFN1YmplY3QgdG8gYmUgY29tcGxldGVkXG4gICAgbWFwKChrZXlBcnIpID0+IGFycmF5RmxhdHRlbihrZXlBcnIpKSk7XG59XG5mdW5jdGlvbiBfZ2V0QWxsKGFwaSwgcGFyYUlkLCBjaGlsZEtleSkge1xuICAgIHJldHVybiBfZXZlbnRUcmlnZ2VyQWxsKGFwaSwgcGFyYUlkKS5waXBlKHN3aXRjaE1hcCgoKSA9PiBpc0Z1bmN0aW9uKGFwaS5ycGMuY2hpbGRzdGF0ZS5nZXRLZXlzUGFnZWQpXG4gICAgICAgID8gX2dldEtleXNQYWdlZChhcGksIGNoaWxkS2V5KVxuICAgICAgICA6IGFwaS5ycGMuY2hpbGRzdGF0ZS5nZXRLZXlzKGNoaWxkS2V5LCAnMHgnKSksIG1hcCgoa2V5cykgPT4ga2V5cy5tYXAoKGspID0+IGsudG9IZXgoKSkpKTtcbn1cbmZ1bmN0aW9uIF9jb250cmlidXRpb25zKGFwaSwgcGFyYUlkLCBjaGlsZEtleSkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgX2dldEFsbChhcGksIHBhcmFJZCwgY2hpbGRLZXkpLFxuICAgICAgICBfZ2V0VXBkYXRlcyhhcGksIHBhcmFJZClcbiAgICBdKS5waXBlKG1hcCgoW2tleXMsIHsgYWRkZWQsIGJsb2NrSGFzaCwgcmVtb3ZlZCB9XSkgPT4ge1xuICAgICAgICBjb25zdCBjb250cmlidXRvcnNNYXAgPSB7fTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICBjb250cmlidXRvcnNNYXBba10gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgYWRkZWQuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgY29udHJpYnV0b3JzTWFwW2tdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbW92ZWQuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGNvbnRyaWJ1dG9yc01hcFtrXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBibG9ja0hhc2gsXG4gICAgICAgICAgICBjb250cmlidXRvcnNIZXg6IE9iamVjdC5rZXlzKGNvbnRyaWJ1dG9yc01hcClcbiAgICAgICAgfTtcbiAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29udHJpYnV0aW9ucyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAocGFyYUlkKSA9PiBhcGkuZGVyaXZlLmNyb3dkbG9hbi5jaGlsZEtleShwYXJhSWQpLnBpcGUoc3dpdGNoTWFwKChjaGlsZEtleSkgPT4gY2hpbGRLZXlcbiAgICAgICAgPyBfY29udHJpYnV0aW9ucyhhcGksIHBhcmFJZCwgY2hpbGRLZXkpXG4gICAgICAgIDogb2YoeyBibG9ja0hhc2g6ICctJywgY29udHJpYnV0b3JzSGV4OiBbXSB9KSkpKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY2hpbGRLZXkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3duQ29udHJpYnV0aW9ucy5qcyc7XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgbWFwLCBvZiwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGV4dHJhY3RDb250cmlidXRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBfZ2V0VmFsdWVzKGFwaSwgY2hpbGRLZXksIGtleXMpIHtcbiAgICAvLyBXZSBhY3R1YWxseSB3b3VsZCBsb3ZlIHRvIHVzZSBtdWx0aS1rZXlzIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9pc3N1ZXMvOTIwM1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGtleXMubWFwKChrKSA9PiBhcGkucnBjLmNoaWxkc3RhdGUuZ2V0U3RvcmFnZShjaGlsZEtleSwgaykpKS5waXBlKG1hcCgodmFsdWVzKSA9PiB2YWx1ZXNcbiAgICAgICAgLm1hcCgodikgPT4gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ09wdGlvbjxTdG9yYWdlRGF0YT4nLCB2KSlcbiAgICAgICAgLm1hcCgobykgPT4gby5pc1NvbWVcbiAgICAgICAgPyBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScsIG8udW53cmFwKCkpXG4gICAgICAgIDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSlcbiAgICAgICAgLnJlZHVjZSgoYWxsLCBiLCBpbmRleCkgPT4gb2JqZWN0U3ByZWFkKGFsbCwgeyBba2V5c1tpbmRleF1dOiBiIH0pLCB7fSkpKTtcbn1cbmZ1bmN0aW9uIF93YXRjaE93bkNoYW5nZXMoYXBpLCBwYXJhSWQsIGNoaWxka2V5LCBrZXlzKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5zeXN0ZW0uZXZlbnRzKCkucGlwZShzd2l0Y2hNYXAoKGV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gZXh0cmFjdENvbnRyaWJ1dGVkKHBhcmFJZCwgZXZlbnRzKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBrZXlzLmZpbHRlcigoaykgPT4gY2hhbmdlcy5hZGRlZC5pbmNsdWRlcyhrKSB8fFxuICAgICAgICAgICAgY2hhbmdlcy5yZW1vdmVkLmluY2x1ZGVzKGspKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkLmxlbmd0aFxuICAgICAgICAgICAgPyBfZ2V0VmFsdWVzKGFwaSwgY2hpbGRrZXksIGZpbHRlcmVkKVxuICAgICAgICAgICAgOiBFTVBUWTtcbiAgICB9KSwgc3RhcnRXaXRoKHt9KSk7XG59XG5mdW5jdGlvbiBfY29udHJpYnV0aW9ucyhhcGksIHBhcmFJZCwgY2hpbGRLZXksIGtleXMpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIF9nZXRWYWx1ZXMoYXBpLCBjaGlsZEtleSwga2V5cyksXG4gICAgICAgIF93YXRjaE93bkNoYW5nZXMoYXBpLCBwYXJhSWQsIGNoaWxkS2V5LCBrZXlzKVxuICAgIF0pLnBpcGUobWFwKChbYWxsLCBsYXRlc3RdKSA9PiBvYmplY3RTcHJlYWQoe30sIGFsbCwgbGF0ZXN0KSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG93bkNvbnRyaWJ1dGlvbnMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKHBhcmFJZCwga2V5cykgPT4gYXBpLmRlcml2ZS5jcm93ZGxvYW4uY2hpbGRLZXkocGFyYUlkKS5waXBlKHN3aXRjaE1hcCgoY2hpbGRLZXkpID0+IGNoaWxkS2V5ICYmIGtleXMubGVuZ3RoXG4gICAgICAgID8gX2NvbnRyaWJ1dGlvbnMoYXBpLCBwYXJhSWQsIGNoaWxkS2V5LCBrZXlzKVxuICAgICAgICA6IG9mKHt9KSkpKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q29udHJpYnV0ZWQocGFyYUlkLCBldmVudHMpIHtcbiAgICBjb25zdCBhZGRlZCA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWQgPSBbXTtcbiAgICByZXR1cm4gZXZlbnRzXG4gICAgICAgIC5maWx0ZXIoKHsgZXZlbnQ6IHsgZGF0YTogWywgZXZlbnRQYXJhSWRdLCBtZXRob2QsIHNlY3Rpb24gfSB9KSA9PiBzZWN0aW9uID09PSAnY3Jvd2Rsb2FuJyAmJlxuICAgICAgICBbJ0NvbnRyaWJ1dGVkJywgJ1dpdGhkcmV3J10uaW5jbHVkZXMobWV0aG9kKSAmJlxuICAgICAgICBldmVudFBhcmFJZC5lcShwYXJhSWQpKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIHsgZXZlbnQ6IHsgZGF0YTogW2FjY291bnRJZF0sIG1ldGhvZCB9IH0pID0+IHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NvbnRyaWJ1dGVkJykge1xuICAgICAgICAgICAgcmVzdWx0LmFkZGVkLnB1c2goYWNjb3VudElkLnRvSGV4KCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnJlbW92ZWQucHVzaChhY2NvdW50SWQudG9IZXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7IGFkZGVkLCBibG9ja0hhc2g6IGV2ZW50cy5jcmVhdGVkQXRIYXNoPy50b0hleCgpIHx8ICctJywgcmVtb3ZlZCB9KTtcbn1cbiIsImltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW51bSB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBvYmplY3RTcHJlYWQsIHN0cmluZ1RvSGV4IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0SW1hZ2VIYXNoQm91bmRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5jb25zdCBERU1PQ1JBQ1lfSUQgPSBzdHJpbmdUb0hleCgnZGVtb2NyYWMnKTtcbmZ1bmN0aW9uIGlzTWF5YmVIYXNoZWRPckJvdW5kZWQoY2FsbCkge1xuICAgIC8vIGNoZWNrIGZvciBlbnVtXG4gICAgcmV0dXJuIGNhbGwgaW5zdGFuY2VvZiBFbnVtO1xufVxuZnVuY3Rpb24gaXNCb3VuZGVkKGNhbGwpIHtcbiAgICAvLyBjaGVjayBmb3IgdHlwZVxuICAgIHJldHVybiBjYWxsLmlzSW5saW5lIHx8IGNhbGwuaXNMZWdhY3kgfHwgY2FsbC5pc0xvb2t1cDtcbn1cbmZ1bmN0aW9uIHF1ZXJ5UXVldWUoYXBpKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5kZW1vY3JhY3lbJ2Rpc3BhdGNoUXVldWUnXSgpLnBpcGUoc3dpdGNoTWFwKChkaXNwYXRjaGVzKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2YoZGlzcGF0Y2hlcyksXG4gICAgICAgIGFwaS5kZXJpdmUuZGVtb2NyYWN5LnByZWltYWdlcyhkaXNwYXRjaGVzLm1hcCgoWywgaGFzaF0pID0+IGhhc2gpKVxuICAgIF0pKSwgbWFwKChbZGlzcGF0Y2hlcywgaW1hZ2VzXSkgPT4gZGlzcGF0Y2hlcy5tYXAoKFthdCwgaW1hZ2VIYXNoLCBpbmRleF0sIGRpc3BhdGNoSW5kZXgpID0+ICh7XG4gICAgICAgIGF0LFxuICAgICAgICBpbWFnZTogaW1hZ2VzW2Rpc3BhdGNoSW5kZXhdLFxuICAgICAgICBpbWFnZUhhc2g6IGdldEltYWdlSGFzaEJvdW5kZWQoaW1hZ2VIYXNoKSxcbiAgICAgICAgaW5kZXhcbiAgICB9KSkpKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlckVudHJpZXMoYXBpKSB7XG4gICAgLy8gV2UgZG9uJ3QgZ2V0IGVudHJpZXMsIGJ1dCByYXRoZXIgd2UgZ2V0IHRoZSBrZXlzICh0cmlnZ2VyZWQgdmlhIGZpbmlzaGVkIHJlZmVyZW5kdW1zKSBhbmRcbiAgICAvLyB0aGUgc3Vic2NyaWJlIHRvIHRob3NlIGtleXMgLSB0aGlzIG1lYW5zIHdlIHBpY2t1cCB3aGVuIHRoZSBzY2hlZHVsZXJzIGFjdHVhbGx5IGV4ZWN1dGVzXG4gICAgLy8gYXQgYSBibG9jaywgdGhlIGVudHJ5IGZvciB0aGF0IGJsb2NrIHdpbGwgYmVjb21lIGVtcHR5XG4gICAgcmV0dXJuIGFwaS5kZXJpdmUuZGVtb2NyYWN5LnJlZmVyZW5kdW1zRmluaXNoZWQoKS5waXBlKHN3aXRjaE1hcCgoKSA9PiBhcGkucXVlcnkuc2NoZWR1bGVyLmFnZW5kYS5rZXlzKCkpLCBzd2l0Y2hNYXAoKGtleXMpID0+IHtcbiAgICAgICAgY29uc3QgYmxvY2tOdW1iZXJzID0ga2V5cy5tYXAoKHsgYXJnczogW2Jsb2NrTnVtYmVyXSB9KSA9PiBibG9ja051bWJlcik7XG4gICAgICAgIHJldHVybiBibG9ja051bWJlcnMubGVuZ3RoXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIG9mKGJsb2NrTnVtYmVycyksXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgc2ltcGx5IGJlIGFwaS5xdWVyeS5zY2hlZHVsZXIuYWdlbmRhLm11bHRpLFxuICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIgd2UgaGF2ZSBoYWQgY2FzZXMgb24gRGFyd2luaWEgd2hlcmUgdGhlIGluZGljZXMgaGF2ZSBtb3ZlZCBhcm91bmQgYWZ0ZXIgYW5cbiAgICAgICAgICAgICAgICAvLyB1cGdyYWRlLCB3aGljaCByZXN1bHRzIGluIGludmFsaWQgb24tY2hhaW4gZGF0YVxuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5zY2hlZHVsZXIuYWdlbmRhLm11bHRpKGJsb2NrTnVtYmVycykucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKGJsb2NrTnVtYmVycy5tYXAoKCkgPT4gW10pKSkpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBvZihbW10sIFtdXSk7XG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcXVlcnlTY2hlZHVsZXIoYXBpKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlckVudHJpZXMoYXBpKS5waXBlKHN3aXRjaE1hcCgoW2Jsb2NrTnVtYmVycywgYWdlbmRhc10pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGJsb2NrTnVtYmVycy5mb3JFYWNoKChhdCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIChhZ2VuZGFzW2luZGV4XSB8fCBbXSkuZmlsdGVyKChvKSA9PiBvLmlzU29tZSkuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVkdWxlZCA9IG8udW53cmFwKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVkdWxlZC5tYXliZUlkLmlzU29tZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHNjaGVkdWxlZC5tYXliZUlkLnVud3JhcCgpLnRvSGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZC5zdGFydHNXaXRoKERFTU9DUkFDWV9JRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlSGFzaCA9IGlzTWF5YmVIYXNoZWRPckJvdW5kZWQoc2NoZWR1bGVkLmNhbGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpc0JvdW5kZWQoc2NoZWR1bGVkLmNhbGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0SW1hZ2VIYXNoQm91bmRlZChzY2hlZHVsZWQuY2FsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzY2hlZHVsZWQuY2FsbC5pc0hhc2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2NoZWR1bGVkLmNhbGwuYXNIYXNoLnRvSGV4KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2NoZWR1bGVkLmNhbGwuYXNWYWx1ZS5hcmdzWzBdLnRvSGV4KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNjaGVkdWxlZC5jYWxsLmFyZ3NbMF0udG9IZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgYXQsIGltYWdlSGFzaCwgaW5kZXg6IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCcodTY0LCBSZWZlcmVuZHVtSW5kZXgpJywgaWQpWzFdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBvZihyZXN1bHQpLFxuICAgICAgICAgICAgcmVzdWx0Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYXBpLmRlcml2ZS5kZW1vY3JhY3kucHJlaW1hZ2VzKHJlc3VsdC5tYXAoKHsgaW1hZ2VIYXNoIH0pID0+IGltYWdlSGFzaCkpXG4gICAgICAgICAgICAgICAgOiBvZihbXSlcbiAgICAgICAgXSk7XG4gICAgfSksIG1hcCgoW2luZm9zLCBpbWFnZXNdKSA9PiBpbmZvcy5tYXAoKGluZm8sIGluZGV4KSA9PiBvYmplY3RTcHJlYWQoeyBpbWFnZTogaW1hZ2VzW2luZGV4XSB9LCBpbmZvKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaFF1ZXVlKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGlzRnVuY3Rpb24oYXBpLnF1ZXJ5LnNjaGVkdWxlcj8uYWdlbmRhKVxuICAgICAgICA/IHF1ZXJ5U2NoZWR1bGVyKGFwaSlcbiAgICAgICAgOiBhcGkucXVlcnkuZGVtb2NyYWN5WydkaXNwYXRjaFF1ZXVlJ11cbiAgICAgICAgICAgID8gcXVlcnlRdWV1ZShhcGkpXG4gICAgICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL2Rpc3BhdGNoUXVldWUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2Nrcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL25leHRFeHRlcm5hbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ByZWltYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3Bvc2Fscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5kdW1JZHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWZlcmVuZHVtcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5kdW1zQWN0aXZlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmZXJlbmR1bXNGaW5pc2hlZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5kdW1zSW5mby5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NxcnRFbGVjdG9yYXRlLmpzJztcbiIsImltcG9ydCB7IG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQk5fWkVSTywgaXNVbmRlZmluZWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5jb25zdCBMT0NLVVBTID0gWzAsIDEsIDIsIDQsIDgsIDE2LCAzMl07XG5mdW5jdGlvbiBwYXJzZUVuZChhcGksIHZvdGUsIHsgYXBwcm92ZWQsIGVuZCB9KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgZW5kLFxuICAgICAgICAoYXBwcm92ZWQuaXNUcnVlICYmIHZvdGUuaXNBeWUpIHx8IChhcHByb3ZlZC5pc0ZhbHNlICYmIHZvdGUuaXNOYXkpXG4gICAgICAgICAgICA/IGVuZC5hZGQoKGFwaS5jb25zdHMuZGVtb2NyYWN5LnZvdGVMb2NraW5nUGVyaW9kIHx8XG4gICAgICAgICAgICAgICAgYXBpLmNvbnN0cy5kZW1vY3JhY3kuZW5hY3RtZW50UGVyaW9kKS5tdWxuKExPQ0tVUFNbdm90ZS5jb252aWN0aW9uLmluZGV4XSkpXG4gICAgICAgICAgICA6IEJOX1pFUk9cbiAgICBdO1xufVxuZnVuY3Rpb24gcGFyc2VMb2NrKGFwaSwgW3JlZmVyZW5kdW1JZCwgYWNjb3VudFZvdGVdLCByZWZlcmVuZHVtKSB7XG4gICAgY29uc3QgeyBiYWxhbmNlLCB2b3RlIH0gPSBhY2NvdW50Vm90ZS5hc1N0YW5kYXJkO1xuICAgIGNvbnN0IFtyZWZlcmVuZHVtRW5kLCB1bmxvY2tBdF0gPSByZWZlcmVuZHVtLmlzRmluaXNoZWRcbiAgICAgICAgPyBwYXJzZUVuZChhcGksIHZvdGUsIHJlZmVyZW5kdW0uYXNGaW5pc2hlZClcbiAgICAgICAgOiBbQk5fWkVSTywgQk5fWkVST107XG4gICAgcmV0dXJuIHsgYmFsYW5jZSwgaXNEZWxlZ2F0ZWQ6IGZhbHNlLCBpc0ZpbmlzaGVkOiByZWZlcmVuZHVtLmlzRmluaXNoZWQsIHJlZmVyZW5kdW1FbmQsIHJlZmVyZW5kdW1JZCwgdW5sb2NrQXQsIHZvdGUgfTtcbn1cbmZ1bmN0aW9uIGRlbGVnYXRlTG9ja3MoYXBpLCB7IGJhbGFuY2UsIGNvbnZpY3Rpb24sIHRhcmdldCB9KSB7XG4gICAgcmV0dXJuIGFwaS5kZXJpdmUuZGVtb2NyYWN5LmxvY2tzKHRhcmdldCkucGlwZShtYXAoKGF2YWlsYWJsZSkgPT4gYXZhaWxhYmxlLm1hcCgoeyBpc0ZpbmlzaGVkLCByZWZlcmVuZHVtRW5kLCByZWZlcmVuZHVtSWQsIHVubG9ja0F0LCB2b3RlIH0pID0+ICh7XG4gICAgICAgIGJhbGFuY2UsXG4gICAgICAgIGlzRGVsZWdhdGVkOiB0cnVlLFxuICAgICAgICBpc0ZpbmlzaGVkLFxuICAgICAgICByZWZlcmVuZHVtRW5kLFxuICAgICAgICByZWZlcmVuZHVtSWQsXG4gICAgICAgIHVubG9ja0F0OiB1bmxvY2tBdC5pc1plcm8oKVxuICAgICAgICAgICAgPyB1bmxvY2tBdFxuICAgICAgICAgICAgOiByZWZlcmVuZHVtRW5kLmFkZCgoYXBpLmNvbnN0cy5kZW1vY3JhY3kudm90ZUxvY2tpbmdQZXJpb2QgfHxcbiAgICAgICAgICAgICAgICBhcGkuY29uc3RzLmRlbW9jcmFjeS5lbmFjdG1lbnRQZXJpb2QpLm11bG4oTE9DS1VQU1tjb252aWN0aW9uLmluZGV4XSkpLFxuICAgICAgICB2b3RlOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVm90ZScsIHsgYXllOiB2b3RlLmlzQXllLCBjb252aWN0aW9uIH0pXG4gICAgfSkpKSk7XG59XG5mdW5jdGlvbiBkaXJlY3RMb2NrcyhhcGksIHsgdm90ZXMgfSkge1xuICAgIGlmICghdm90ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIHJldHVybiBhcGkucXVlcnkuZGVtb2NyYWN5LnJlZmVyZW5kdW1JbmZvT2YubXVsdGkodm90ZXMubWFwKChbcmVmZXJlbmR1bUlkXSkgPT4gcmVmZXJlbmR1bUlkKSkucGlwZShtYXAoKHJlZmVyZW5kdW1zKSA9PiB2b3Rlc1xuICAgICAgICAubWFwKCh2b3RlLCBpbmRleCkgPT4gW3ZvdGUsIHJlZmVyZW5kdW1zW2luZGV4XS51bndyYXBPcihudWxsKV0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbVsxXSAmJiBpc1VuZGVmaW5lZChpdGVtWzFdLmVuZCkgJiYgaXRlbVswXVsxXS5pc1N0YW5kYXJkKVxuICAgICAgICAubWFwKChbZGlyZWN0Vm90ZSwgcmVmZXJlbmR1bV0pID0+IHBhcnNlTG9jayhhcGksIGRpcmVjdFZvdGUsIHJlZmVyZW5kdW0pKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxvY2tzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWQpID0+IGFwaS5xdWVyeS5kZW1vY3JhY3kudm90aW5nT2ZcbiAgICAgICAgPyBhcGkucXVlcnkuZGVtb2NyYWN5LnZvdGluZ09mKGFjY291bnRJZCkucGlwZShzd2l0Y2hNYXAoKHZvdGluZykgPT4gdm90aW5nLmlzRGlyZWN0XG4gICAgICAgICAgICA/IGRpcmVjdExvY2tzKGFwaSwgdm90aW5nLmFzRGlyZWN0KVxuICAgICAgICAgICAgOiB2b3RpbmcuaXNEZWxlZ2F0aW5nXG4gICAgICAgICAgICAgICAgPyBkZWxlZ2F0ZUxvY2tzKGFwaSwgdm90aW5nLmFzRGVsZWdhdGluZylcbiAgICAgICAgICAgICAgICA6IG9mKFtdKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbiIsImltcG9ydCB7IG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0SW1hZ2VIYXNoQm91bmRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiB3aXRoSW1hZ2UoYXBpLCBuZXh0T3B0KSB7XG4gICAgaWYgKG5leHRPcHQuaXNOb25lKSB7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9XG4gICAgY29uc3QgW2hhc2gsIHRocmVzaG9sZF0gPSBuZXh0T3B0LnVud3JhcCgpO1xuICAgIHJldHVybiBhcGkuZGVyaXZlLmRlbW9jcmFjeS5wcmVpbWFnZShoYXNoKS5waXBlKG1hcCgoaW1hZ2UpID0+ICh7XG4gICAgICAgIGltYWdlLFxuICAgICAgICBpbWFnZUhhc2g6IGdldEltYWdlSGFzaEJvdW5kZWQoaGFzaCksXG4gICAgICAgIHRocmVzaG9sZFxuICAgIH0pKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbmV4dEV4dGVybmFsKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS5kZW1vY3JhY3k/Lm5leHRFeHRlcm5hbFxuICAgICAgICA/IGFwaS5xdWVyeS5kZW1vY3JhY3kubmV4dEV4dGVybmFsKCkucGlwZShzd2l0Y2hNYXAoKG5leHRPcHQpID0+IHdpdGhJbWFnZShhcGksIG5leHRPcHQpKSlcbiAgICAgICAgOiBvZihudWxsKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJOX1pFUk8sIGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEltYWdlSGFzaEJvdW5kZWQgfSBmcm9tICcuL3V0aWwuanMnO1xuZnVuY3Rpb24gZ2V0VW5yZXF1ZXN0ZWRUaWNrZXQoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cy50aWNrZXQgfHwgc3RhdHVzLmRlcG9zaXQ7XG59XG5mdW5jdGlvbiBnZXRSZXF1ZXN0ZWRUaWNrZXQoc3RhdHVzKSB7XG4gICAgcmV0dXJuIChzdGF0dXMubWF5YmVUaWNrZXQgfHwgc3RhdHVzLmRlcG9zaXQpLnVud3JhcE9yRGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gaXNEZW1vY3JhY3lQcmVpbWFnZShhcGksIGltYWdlT3B0KSB7XG4gICAgcmV0dXJuICEhaW1hZ2VPcHQgJiYgIWFwaS5xdWVyeS5kZW1vY3JhY3lbJ2Rpc3BhdGNoUXVldWUnXTtcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdFByb3Bvc2FsKGFwaSwgW2J5dGVzLCBwcm9wb3NlciwgYmFsYW5jZSwgYXRdKSB7XG4gICAgbGV0IHByb3Bvc2FsO1xuICAgIHRyeSB7XG4gICAgICAgIHByb3Bvc2FsID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0NhbGwnLCBieXRlcy50b1U4YSh0cnVlKSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXQsIGJhbGFuY2UsIHByb3Bvc2FsLCBwcm9wb3NlciB9O1xufVxuZnVuY3Rpb24gcGFyc2VEZW1vY3JhY3koYXBpLCBpbWFnZU9wdCkge1xuICAgIGlmIChpbWFnZU9wdC5pc05vbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNEZW1vY3JhY3lQcmVpbWFnZShhcGksIGltYWdlT3B0KSkge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBpbWFnZU9wdC51bndyYXAoKTtcbiAgICAgICAgaWYgKHN0YXR1cy5pc01pc3NpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRhdGEsIGRlcG9zaXQsIHByb3ZpZGVyLCBzaW5jZSB9ID0gc3RhdHVzLmFzQXZhaWxhYmxlO1xuICAgICAgICByZXR1cm4gY29uc3RydWN0UHJvcG9zYWwoYXBpLCBbZGF0YSwgcHJvdmlkZXIsIGRlcG9zaXQsIHNpbmNlXSk7XG4gICAgfVxuICAgIHJldHVybiBjb25zdHJ1Y3RQcm9wb3NhbChhcGksIGltYWdlT3B0LnVud3JhcCgpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlSW1hZ2UoYXBpLCBbcHJvcG9zYWxIYXNoLCBzdGF0dXMsIGJ5dGVzXSkge1xuICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IFtwcm9wb3NlciwgYmFsYW5jZV0gPSBzdGF0dXMuaXNVbnJlcXVlc3RlZFxuICAgICAgICA/IGdldFVucmVxdWVzdGVkVGlja2V0KHN0YXR1cy5hc1VucmVxdWVzdGVkKVxuICAgICAgICA6IGdldFJlcXVlc3RlZFRpY2tldChzdGF0dXMuYXNSZXF1ZXN0ZWQpO1xuICAgIGxldCBwcm9wb3NhbDtcbiAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb3Bvc2FsID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0NhbGwnLCBieXRlcy50b1U4YSh0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBhdDogQk5fWkVSTywgYmFsYW5jZSwgcHJvcG9zYWwsIHByb3Bvc2FsSGFzaCwgcHJvcG9zZXIgfTtcbn1cbmZ1bmN0aW9uIGdldERlbW9jcmFjeUltYWdlcyhhcGksIGJvdW5kZWQpIHtcbiAgICBjb25zdCBoYXNoZXMgPSBib3VuZGVkLm1hcCgoYikgPT4gZ2V0SW1hZ2VIYXNoQm91bmRlZChiKSk7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5kZW1vY3JhY3lbJ3ByZWltYWdlcyddLm11bHRpKGhhc2hlcykucGlwZShtYXAoKGltYWdlcykgPT4gaW1hZ2VzLm1hcCgoaW1hZ2VPcHQpID0+IHBhcnNlRGVtb2NyYWN5KGFwaSwgaW1hZ2VPcHQpKSkpO1xufVxuZnVuY3Rpb24gZ2V0SW1hZ2VzKGFwaSwgYm91bmRlZCkge1xuICAgIGNvbnN0IGhhc2hlcyA9IGJvdW5kZWQubWFwKChiKSA9PiBnZXRJbWFnZUhhc2hCb3VuZGVkKGIpKTtcbiAgICBjb25zdCBieXRlc1R5cGUgPSBhcGkucmVnaXN0cnkubG9va3VwLmdldFR5cGVEZWYoYXBpLnF1ZXJ5LnByZWltYWdlLnByZWltYWdlRm9yLmNyZWF0b3IubWV0YS50eXBlLmFzTWFwLmtleSkudHlwZTtcbiAgICByZXR1cm4gYXBpLnF1ZXJ5LnByZWltYWdlLnN0YXR1c0Zvci5tdWx0aShoYXNoZXMpLnBpcGUoc3dpdGNoTWFwKChvcHRTdGF0dXMpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzZXMgPSBvcHRTdGF0dXMubWFwKChvKSA9PiBvLnVud3JhcE9yKG51bGwpKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IHN0YXR1c2VzXG4gICAgICAgICAgICAubWFwKChzLCBpKSA9PiBzXG4gICAgICAgICAgICA/IGJ5dGVzVHlwZSA9PT0gJ0gyNTYnXG4gICAgICAgICAgICAgICAgLy8gZmlyc3QgZ2VuZXJhdGlvblxuICAgICAgICAgICAgICAgID8gaGFzaGVzW2ldXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCBnZW5lcmF0aW9uIChIMjU2LHUzMilcbiAgICAgICAgICAgICAgICA6IHMuaXNSZXF1ZXN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyBbaGFzaGVzW2ldLCBzLmFzUmVxdWVzdGVkLmxlbi51bndyYXBPcigwKV1cbiAgICAgICAgICAgICAgICAgICAgOiBbaGFzaGVzW2ldLCBzLmFzVW5yZXF1ZXN0ZWQubGVuXVxuICAgICAgICAgICAgOiBudWxsKVxuICAgICAgICAgICAgLmZpbHRlcigocCkgPT4gISFwKTtcbiAgICAgICAgcmV0dXJuIGFwaS5xdWVyeS5wcmVpbWFnZS5wcmVpbWFnZUZvci5tdWx0aShrZXlzKS5waXBlKG1hcCgob3B0Qnl0ZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBwdHIgPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNlc1xuICAgICAgICAgICAgICAgIC5tYXAoKHMsIGkpID0+IHNcbiAgICAgICAgICAgICAgICA/IFtoYXNoZXNbaV0sIHMsIG9wdEJ5dGVzWysrcHRyXS51bndyYXBPcihudWxsKV1cbiAgICAgICAgICAgICAgICA6IFtoYXNoZXNbaV0sIG51bGwsIG51bGxdKVxuICAgICAgICAgICAgICAgIC5tYXAoKHYpID0+IHBhcnNlSW1hZ2UoYXBpLCB2KSk7XG4gICAgICAgIH0pKTtcbiAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJlaW1hZ2VzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChoYXNoZXMpID0+IGhhc2hlcy5sZW5ndGhcbiAgICAgICAgPyBpc0Z1bmN0aW9uKGFwaS5xdWVyeS5kZW1vY3JhY3lbJ3ByZWltYWdlcyddKVxuICAgICAgICAgICAgPyBnZXREZW1vY3JhY3lJbWFnZXMoYXBpLCBoYXNoZXMpXG4gICAgICAgICAgICA6IGlzRnVuY3Rpb24oYXBpLnF1ZXJ5LnByZWltYWdlLnByZWltYWdlRm9yKVxuICAgICAgICAgICAgICAgID8gZ2V0SW1hZ2VzKGFwaSwgaGFzaGVzKVxuICAgICAgICAgICAgICAgIDogb2YoW10pXG4gICAgICAgIDogb2YoW10pKTtcbn1cbmV4cG9ydCBjb25zdCBwcmVpbWFnZSA9IC8qI19fUFVSRV9fKi8gZmlyc3RNZW1vKChhcGksIGhhc2gpID0+IGFwaS5kZXJpdmUuZGVtb2NyYWN5LnByZWltYWdlcyhbaGFzaF0pKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0SW1hZ2VIYXNoQm91bmRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBpc05ld0RlcG9zaXRvcnMoZGVwb3NpdG9ycykge1xuICAgIC8vIERldGVjdCBiYWxhbmNlLi4uXG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oZGVwb3NpdG9yc1sxXS5tdWwpO1xufVxuZnVuY3Rpb24gcGFyc2UoW3Byb3Bvc2FscywgaW1hZ2VzLCBvcHREZXBvc2l0b3JzXSkge1xuICAgIHJldHVybiBwcm9wb3NhbHNcbiAgICAgICAgLmZpbHRlcigoWywgLCBwcm9wb3Nlcl0sIGluZGV4KSA9PiAhIShvcHREZXBvc2l0b3JzW2luZGV4XT8uaXNTb21lKSAmJiAhcHJvcG9zZXIuaXNFbXB0eSlcbiAgICAgICAgLm1hcCgoW2luZGV4LCBoYXNoLCBwcm9wb3Nlcl0sIHByb3Bvc2FsSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVwb3NpdG9ycyA9IG9wdERlcG9zaXRvcnNbcHJvcG9zYWxJbmRleF0udW53cmFwKCk7XG4gICAgICAgIHJldHVybiBvYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaW1hZ2U6IGltYWdlc1twcm9wb3NhbEluZGV4XSxcbiAgICAgICAgICAgIGltYWdlSGFzaDogZ2V0SW1hZ2VIYXNoQm91bmRlZChoYXNoKSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgcHJvcG9zZXJcbiAgICAgICAgfSwgaXNOZXdEZXBvc2l0b3JzKGRlcG9zaXRvcnMpXG4gICAgICAgICAgICA/IHsgYmFsYW5jZTogZGVwb3NpdG9yc1sxXSwgc2Vjb25kczogZGVwb3NpdG9yc1swXSB9XG4gICAgICAgICAgICA6IHsgYmFsYW5jZTogZGVwb3NpdG9yc1swXSwgc2Vjb25kczogZGVwb3NpdG9yc1sxXSB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcm9wb3NhbHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gaXNGdW5jdGlvbihhcGkucXVlcnkuZGVtb2NyYWN5Py5wdWJsaWNQcm9wcylcbiAgICAgICAgPyBhcGkucXVlcnkuZGVtb2NyYWN5LnB1YmxpY1Byb3BzKCkucGlwZShzd2l0Y2hNYXAoKHByb3Bvc2FscykgPT4gcHJvcG9zYWxzLmxlbmd0aFxuICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICBvZihwcm9wb3NhbHMpLFxuICAgICAgICAgICAgICAgIGFwaS5kZXJpdmUuZGVtb2NyYWN5LnByZWltYWdlcyhwcm9wb3NhbHMubWFwKChbLCBoYXNoXSkgPT4gaGFzaCkpLFxuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5kZW1vY3JhY3kuZGVwb3NpdE9mLm11bHRpKHByb3Bvc2Fscy5tYXAoKFtpbmRleF0pID0+IGluZGV4KSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IG9mKFtbXSwgW10sIFtdXSkpLCBtYXAocGFyc2UpKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmR1bUlkcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkucXVlcnkuZGVtb2NyYWN5Py5sb3dlc3RVbmJha2VkXG4gICAgICAgID8gYXBpLnF1ZXJ5TXVsdGkoW1xuICAgICAgICAgICAgYXBpLnF1ZXJ5LmRlbW9jcmFjeS5sb3dlc3RVbmJha2VkLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LmRlbW9jcmFjeS5yZWZlcmVuZHVtQ291bnRcbiAgICAgICAgXSkucGlwZShtYXAoKFtmaXJzdCwgdG90YWxdKSA9PiB0b3RhbC5ndChmaXJzdClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgICAgID8gWy4uLkFycmF5KHRvdGFsLnN1YihmaXJzdCkudG9OdW1iZXIoKSldLm1hcCgoXywgaSkgPT4gZmlyc3QuYWRkbihpKSlcbiAgICAgICAgICAgIDogW10pKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuZHVtcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkuZGVyaXZlLmRlbW9jcmFjeS5yZWZlcmVuZHVtc0FjdGl2ZSgpLnBpcGUoc3dpdGNoTWFwKChyZWZlcmVuZHVtcykgPT4gcmVmZXJlbmR1bXMubGVuZ3RoXG4gICAgICAgID8gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBvZihyZWZlcmVuZHVtcyksXG4gICAgICAgICAgICBhcGkuZGVyaXZlLmRlbW9jcmFjeS5fcmVmZXJlbmR1bXNWb3RlcyhyZWZlcmVuZHVtcylcbiAgICAgICAgXSlcbiAgICAgICAgOiBvZihbW10sIFtdXSkpLCBtYXAoKFtyZWZlcmVuZHVtcywgdm90ZXNdKSA9PiByZWZlcmVuZHVtcy5tYXAoKHJlZmVyZW5kdW0sIGluZGV4KSA9PiBvYmplY3RTcHJlYWQoe30sIHJlZmVyZW5kdW0sIHZvdGVzW2luZGV4XSkpKSkpO1xufVxuIiwiaW1wb3J0IHsgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5kdW1zQWN0aXZlKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5kZXJpdmUuZGVtb2NyYWN5LnJlZmVyZW5kdW1JZHMoKS5waXBlKHN3aXRjaE1hcCgoaWRzKSA9PiBpZHMubGVuZ3RoXG4gICAgICAgID8gYXBpLmRlcml2ZS5kZW1vY3JhY3kucmVmZXJlbmR1bXNJbmZvKGlkcylcbiAgICAgICAgOiBvZihbXSkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5kdW1zRmluaXNoZWQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLmRlcml2ZS5kZW1vY3JhY3kucmVmZXJlbmR1bUlkcygpLnBpcGUoc3dpdGNoTWFwKChpZHMpID0+IGFwaS5xdWVyeS5kZW1vY3JhY3kucmVmZXJlbmR1bUluZm9PZi5tdWx0aShpZHMpKSwgbWFwKChpbmZvcykgPT4gaW5mb3NcbiAgICAgICAgLm1hcCgobykgPT4gby51bndyYXBPcihudWxsKSlcbiAgICAgICAgLmZpbHRlcigoaW5mbykgPT4gISFpbmZvICYmIGluZm8uaXNGaW5pc2hlZClcbiAgICAgICAgLm1hcCgoaW5mbykgPT4gaW5mby5hc0ZpbmlzaGVkKSkpKTtcbn1cbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgY2FsY1ZvdGVzLCBnZXRJbWFnZUhhc2gsIGdldFN0YXR1cyB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiB2b3Rlc1ByZXYoYXBpLCByZWZlcmVuZHVtSWQpIHtcbiAgICByZXR1cm4gYXBpLnF1ZXJ5LmRlbW9jcmFjeVsndm90ZXJzRm9yJ10ocmVmZXJlbmR1bUlkKS5waXBlKHN3aXRjaE1hcCgodm90ZXJzRm9yKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2Yodm90ZXJzRm9yKSxcbiAgICAgICAgdm90ZXJzRm9yLmxlbmd0aFxuICAgICAgICAgICAgPyBhcGkucXVlcnkuZGVtb2NyYWN5Wyd2b3RlT2YnXS5tdWx0aSh2b3RlcnNGb3IubWFwKChhY2NvdW50SWQpID0+IFtyZWZlcmVuZHVtSWQsIGFjY291bnRJZF0pKVxuICAgICAgICAgICAgOiBvZihbXSksXG4gICAgICAgIGFwaS5kZXJpdmUuYmFsYW5jZXMudm90aW5nQmFsYW5jZXModm90ZXJzRm9yKVxuICAgIF0pKSwgbWFwKChbdm90ZXJzRm9yLCB2b3RlcywgYmFsYW5jZXNdKSA9PiB2b3RlcnNGb3IubWFwKChhY2NvdW50SWQsIGluZGV4KSA9PiAoe1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIGJhbGFuY2U6IGJhbGFuY2VzW2luZGV4XS52b3RpbmdCYWxhbmNlIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyksXG4gICAgICAgIGlzRGVsZWdhdGluZzogZmFsc2UsXG4gICAgICAgIHZvdGU6IHZvdGVzW2luZGV4XSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVm90ZScpXG4gICAgfSkpKSk7XG59XG5mdW5jdGlvbiBleHRyYWN0Vm90ZXMobWFwcGVkLCByZWZlcmVuZHVtSWQpIHtcbiAgICByZXR1cm4gbWFwcGVkXG4gICAgICAgIC5maWx0ZXIoKFssIHZvdGluZ10pID0+IHZvdGluZy5pc0RpcmVjdClcbiAgICAgICAgLm1hcCgoW2FjY291bnRJZCwgdm90aW5nXSkgPT4gW1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIHZvdGluZy5hc0RpcmVjdC52b3Rlcy5maWx0ZXIoKFtpZHhdKSA9PiBpZHguZXEocmVmZXJlbmR1bUlkKSlcbiAgICBdKVxuICAgICAgICAuZmlsdGVyKChbLCBkaXJlY3RWb3Rlc10pID0+ICEhZGlyZWN0Vm90ZXMubGVuZ3RoKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIFthY2NvdW50SWQsIHZvdGVzXSkgPT4gXG4gICAgLy8gRklYTUUgV2UgYXJlIGlnbm9yaW5nIHNwbGl0IHZvdGVzXG4gICAgdm90ZXMucmVkdWNlKChyZXN1bHQsIFssIHZvdGVdKSA9PiB7XG4gICAgICAgIGlmICh2b3RlLmlzU3RhbmRhcmQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICAgICAgYWNjb3VudElkLFxuICAgICAgICAgICAgICAgIGlzRGVsZWdhdGluZzogZmFsc2VcbiAgICAgICAgICAgIH0sIHZvdGUuYXNTdGFuZGFyZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgcmVzdWx0KSwgW10pO1xufVxuZnVuY3Rpb24gdm90ZXNDdXJyKGFwaSwgcmVmZXJlbmR1bUlkKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5kZW1vY3JhY3kudm90aW5nT2YuZW50cmllcygpLnBpcGUobWFwKChhbGxWb3RpbmcpID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gYWxsVm90aW5nLm1hcCgoW3sgYXJnczogW2FjY291bnRJZF0gfSwgdm90aW5nXSkgPT4gW2FjY291bnRJZCwgdm90aW5nXSk7XG4gICAgICAgIGNvbnN0IHZvdGVzID0gZXh0cmFjdFZvdGVzKG1hcHBlZCwgcmVmZXJlbmR1bUlkKTtcbiAgICAgICAgY29uc3QgZGVsZWdhdGlvbnMgPSBtYXBwZWRcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIHZvdGluZ10pID0+IHZvdGluZy5pc0RlbGVnYXRpbmcpXG4gICAgICAgICAgICAubWFwKChbYWNjb3VudElkLCB2b3RpbmddKSA9PiBbYWNjb3VudElkLCB2b3RpbmcuYXNEZWxlZ2F0aW5nXSk7XG4gICAgICAgIC8vIGFkZCBkZWxlZ2F0aW9uc1xuICAgICAgICBkZWxlZ2F0aW9ucy5mb3JFYWNoKChbYWNjb3VudElkLCB7IGJhbGFuY2UsIGNvbnZpY3Rpb24sIHRhcmdldCB9XSkgPT4ge1xuICAgICAgICAgICAgLy8gQXJlIHdlIGRlbGVnYXRpbmcgdG8gYSBkZWxlZ2F0b3JcbiAgICAgICAgICAgIGNvbnN0IHRvRGVsZWdhdG9yID0gZGVsZWdhdGlvbnMuZmluZCgoW2FjY291bnRJZF0pID0+IGFjY291bnRJZC5lcSh0YXJnZXQpKTtcbiAgICAgICAgICAgIGNvbnN0IHRvID0gdm90ZXMuZmluZCgoeyBhY2NvdW50SWQgfSkgPT4gYWNjb3VudElkLmVxKHRvRGVsZWdhdG9yID8gdG9EZWxlZ2F0b3JbMF0gOiB0YXJnZXQpKTtcbiAgICAgICAgICAgIC8vIHRoaXMgZGVsZWdhdGlvbiBoYXMgYSB0YXJnZXRcbiAgICAgICAgICAgIGlmICh0bykge1xuICAgICAgICAgICAgICAgIHZvdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgICAgICAgICAgICAgIGJhbGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGlzRGVsZWdhdGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdm90ZTogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1ZvdGUnLCB7IGF5ZTogdG8udm90ZS5pc0F5ZSwgY29udmljdGlvbiB9KVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZvdGVzO1xuICAgIH0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfcmVmZXJlbmR1bVZvdGVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChyZWZlcmVuZHVtKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5kZW1vY3JhY3kuc3FydEVsZWN0b3JhdGUoKSxcbiAgICAgICAgaXNGdW5jdGlvbihhcGkucXVlcnkuZGVtb2NyYWN5LnZvdGluZ09mKVxuICAgICAgICAgICAgPyB2b3Rlc0N1cnIoYXBpLCByZWZlcmVuZHVtLmluZGV4KVxuICAgICAgICAgICAgOiB2b3Rlc1ByZXYoYXBpLCByZWZlcmVuZHVtLmluZGV4KVxuICAgIF0pLnBpcGUobWFwKChbc3FydEVsZWN0b3JhdGUsIHZvdGVzXSkgPT4gY2FsY1ZvdGVzKHNxcnRFbGVjdG9yYXRlLCByZWZlcmVuZHVtLCB2b3RlcykpKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3JlZmVyZW5kdW1zVm90ZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKHJlZmVyZW5kdW1zKSA9PiByZWZlcmVuZHVtcy5sZW5ndGhcbiAgICAgICAgPyBjb21iaW5lTGF0ZXN0KHJlZmVyZW5kdW1zLm1hcCgocmVmZXJlbmR1bSkgPT4gYXBpLmRlcml2ZS5kZW1vY3JhY3kuX3JlZmVyZW5kdW1Wb3RlcyhyZWZlcmVuZHVtKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfcmVmZXJlbmR1bUluZm8oaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGluZGV4LCBpbmZvKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGdldFN0YXR1cyhpbmZvKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c1xuICAgICAgICAgICAgPyBhcGkuZGVyaXZlLmRlbW9jcmFjeS5wcmVpbWFnZShzdGF0dXMucHJvcG9zYWwgfHxcbiAgICAgICAgICAgICAgICBzdGF0dXMucHJvcG9zYWxIYXNoKS5waXBlKG1hcCgoaW1hZ2UpID0+ICh7XG4gICAgICAgICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgICAgICAgaW1hZ2VIYXNoOiBnZXRJbWFnZUhhc2goc3RhdHVzKSxcbiAgICAgICAgICAgICAgICBpbmRleDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1JlZmVyZW5kdW1JbmRleCcsIGluZGV4KSxcbiAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIH0pKSlcbiAgICAgICAgICAgIDogb2YobnVsbCk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmR1bXNJbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChpZHMpID0+IGlkcy5sZW5ndGhcbiAgICAgICAgPyBhcGkucXVlcnkuZGVtb2NyYWN5LnJlZmVyZW5kdW1JbmZvT2YubXVsdGkoaWRzKS5waXBlKHN3aXRjaE1hcCgoaW5mb3MpID0+IGNvbWJpbmVMYXRlc3QoaWRzLm1hcCgoaWQsIGluZGV4KSA9PiBhcGkuZGVyaXZlLmRlbW9jcmFjeS5fcmVmZXJlbmR1bUluZm8oaWQsIGluZm9zW2luZGV4XSkpKSksIG1hcCgoaW5mb3MpID0+IGluZm9zLmZpbHRlcigocikgPT4gISFyKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbiIsImltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYm5TcXJ0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHNxcnRFbGVjdG9yYXRlKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS5iYWxhbmNlcy50b3RhbElzc3VhbmNlKCkucGlwZShtYXAoYm5TcXJ0KSkpO1xufVxuIiwiaW1wb3J0IHsgQk4sIGJuU3FydCwgaXNIZXgsIGlzU3RyaW5nLCBpc1U4YSwgb2JqZWN0U3ByZWFkLCBzdHJpbmdUb0hleCwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5mdW5jdGlvbiBpc09sZEluZm8oaW5mbykge1xuICAgIHJldHVybiAhIWluZm8ucHJvcG9zYWxIYXNoO1xufVxuZnVuY3Rpb24gaXNDdXJyZW50U3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiAhIXN0YXR1cy50YWxseTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlUmF0aW9uYWxzKG4xLCBkMSwgbjIsIGQyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgcTEgPSBuMS5kaXYoZDEpO1xuICAgICAgICBjb25zdCBxMiA9IG4yLmRpdihkMik7XG4gICAgICAgIGlmIChxMS5sdChxMikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHEyLmx0KHExKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIxID0gbjEubW9kKGQxKTtcbiAgICAgICAgY29uc3QgcjIgPSBuMi5tb2QoZDIpO1xuICAgICAgICBpZiAocjIuaXNaZXJvKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyMS5pc1plcm8oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbjEgPSBkMjtcbiAgICAgICAgbjIgPSBkMTtcbiAgICAgICAgZDEgPSByMjtcbiAgICAgICAgZDIgPSByMTtcbiAgICB9XG59XG5mdW5jdGlvbiBjYWxjUGFzc2luZ090aGVyKHRocmVzaG9sZCwgc3FydEVsZWN0b3JhdGUsIHsgdm90ZWRBeWUsIHZvdGVkTmF5LCB2b3RlZFRvdGFsIH0pIHtcbiAgICBjb25zdCBzcXJ0Vm90ZXJzID0gYm5TcXJ0KHZvdGVkVG90YWwpO1xuICAgIHJldHVybiBzcXJ0Vm90ZXJzLmlzWmVybygpXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB0aHJlc2hvbGQuaXNTdXBlck1ham9yaXR5QXBwcm92ZVxuICAgICAgICAgICAgPyBjb21wYXJlUmF0aW9uYWxzKHZvdGVkTmF5LCBzcXJ0Vm90ZXJzLCB2b3RlZEF5ZSwgc3FydEVsZWN0b3JhdGUpXG4gICAgICAgICAgICA6IGNvbXBhcmVSYXRpb25hbHModm90ZWROYXksIHNxcnRFbGVjdG9yYXRlLCB2b3RlZEF5ZSwgc3FydFZvdGVycyk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY1Bhc3NpbmcodGhyZXNob2xkLCBzcXJ0RWxlY3RvcmF0ZSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdGhyZXNob2xkLmlzU2ltcGxlTWFqb3JpdHlcbiAgICAgICAgPyBzdGF0ZS52b3RlZEF5ZS5ndChzdGF0ZS52b3RlZE5heSlcbiAgICAgICAgOiBjYWxjUGFzc2luZ090aGVyKHRocmVzaG9sZCwgc3FydEVsZWN0b3JhdGUsIHN0YXRlKTtcbn1cbmZ1bmN0aW9uIGNhbGNWb3Rlc1ByZXYodm90ZXNGb3IpIHtcbiAgICByZXR1cm4gdm90ZXNGb3IucmVkdWNlKChzdGF0ZSwgZGVyaXZlZCkgPT4ge1xuICAgICAgICBjb25zdCB7IGJhbGFuY2UsIHZvdGUgfSA9IGRlcml2ZWQ7XG4gICAgICAgIGNvbnN0IGlzRGVmYXVsdCA9IHZvdGUuY29udmljdGlvbi5pbmRleCA9PT0gMDtcbiAgICAgICAgY29uc3QgY291bnRlZCA9IGJhbGFuY2VcbiAgICAgICAgICAgIC5tdWxuKGlzRGVmYXVsdCA/IDEgOiB2b3RlLmNvbnZpY3Rpb24uaW5kZXgpXG4gICAgICAgICAgICAuZGl2bihpc0RlZmF1bHQgPyAxMCA6IDEpO1xuICAgICAgICBpZiAodm90ZS5pc0F5ZSkge1xuICAgICAgICAgICAgc3RhdGUuYWxsQXllLnB1c2goZGVyaXZlZCk7XG4gICAgICAgICAgICBzdGF0ZS52b3RlQ291bnRBeWUrKztcbiAgICAgICAgICAgIHN0YXRlLnZvdGVkQXllLmlhZGQoY291bnRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5hbGxOYXkucHVzaChkZXJpdmVkKTtcbiAgICAgICAgICAgIHN0YXRlLnZvdGVDb3VudE5heSsrO1xuICAgICAgICAgICAgc3RhdGUudm90ZWROYXkuaWFkZChjb3VudGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS52b3RlQ291bnQrKztcbiAgICAgICAgc3RhdGUudm90ZWRUb3RhbC5pYWRkKGNvdW50ZWQpO1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSwgeyBhbGxBeWU6IFtdLCBhbGxOYXk6IFtdLCB2b3RlQ291bnQ6IDAsIHZvdGVDb3VudEF5ZTogMCwgdm90ZUNvdW50TmF5OiAwLCB2b3RlZEF5ZTogbmV3IEJOKDApLCB2b3RlZE5heTogbmV3IEJOKDApLCB2b3RlZFRvdGFsOiBuZXcgQk4oMCkgfSk7XG59XG5mdW5jdGlvbiBjYWxjVm90ZXNDdXJyZW50KHRhbGx5LCB2b3Rlcykge1xuICAgIGNvbnN0IGFsbEF5ZSA9IFtdO1xuICAgIGNvbnN0IGFsbE5heSA9IFtdO1xuICAgIHZvdGVzLmZvckVhY2goKGRlcml2ZWQpID0+IHtcbiAgICAgICAgaWYgKGRlcml2ZWQudm90ZS5pc0F5ZSkge1xuICAgICAgICAgICAgYWxsQXllLnB1c2goZGVyaXZlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhbGxOYXkucHVzaChkZXJpdmVkKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFsbEF5ZSxcbiAgICAgICAgYWxsTmF5LFxuICAgICAgICB2b3RlQ291bnQ6IGFsbEF5ZS5sZW5ndGggKyBhbGxOYXkubGVuZ3RoLFxuICAgICAgICB2b3RlQ291bnRBeWU6IGFsbEF5ZS5sZW5ndGgsXG4gICAgICAgIHZvdGVDb3VudE5heTogYWxsTmF5Lmxlbmd0aCxcbiAgICAgICAgdm90ZWRBeWU6IHRhbGx5LmF5ZXMsXG4gICAgICAgIHZvdGVkTmF5OiB0YWxseS5uYXlzLFxuICAgICAgICB2b3RlZFRvdGFsOiB0YWxseS50dXJub3V0XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxjVm90ZXMoc3FydEVsZWN0b3JhdGUsIHJlZmVyZW5kdW0sIHZvdGVzKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBpc0N1cnJlbnRTdGF0dXMocmVmZXJlbmR1bS5zdGF0dXMpXG4gICAgICAgID8gY2FsY1ZvdGVzQ3VycmVudChyZWZlcmVuZHVtLnN0YXR1cy50YWxseSwgdm90ZXMpXG4gICAgICAgIDogY2FsY1ZvdGVzUHJldih2b3Rlcyk7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXNzaW5nOiBjYWxjUGFzc2luZyhyZWZlcmVuZHVtLnN0YXR1cy50aHJlc2hvbGQsIHNxcnRFbGVjdG9yYXRlLCBzdGF0ZSksXG4gICAgICAgIHZvdGVzXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzKGluZm8pIHtcbiAgICBpZiAoaW5mby5pc05vbmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVud3JhcHBlZCA9IGluZm8udW53cmFwKCk7XG4gICAgcmV0dXJuIGlzT2xkSW5mbyh1bndyYXBwZWQpXG4gICAgICAgID8gdW53cmFwcGVkXG4gICAgICAgIDogdW53cmFwcGVkLmlzT25nb2luZ1xuICAgICAgICAgICAgPyB1bndyYXBwZWQuYXNPbmdvaW5nXG4gICAgICAgICAgICAvLyBkb25lLCB3ZSBkb24ndCBpbmNsdWRlIGl0IGhlcmUuLi4gb25seSBjdXJyZW50bHkgYWN0aXZlXG4gICAgICAgICAgICA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VIYXNoQm91bmRlZChoYXNoKSB7XG4gICAgcmV0dXJuIGhhc2guaXNMZWdhY3lcbiAgICAgICAgPyBoYXNoLmFzTGVnYWN5Lmhhc2hfLnRvSGV4KClcbiAgICAgICAgOiBoYXNoLmlzTG9va3VwXG4gICAgICAgICAgICA/IGhhc2guYXNMb29rdXAuaGFzaF8udG9IZXgoKVxuICAgICAgICAgICAgLy8gZm9yIGlubGluZSwgdXNlIHRoZSBhY3R1YWwgQnl0ZXMgaGFzaFxuICAgICAgICAgICAgOiBoYXNoLmlzSW5saW5lXG4gICAgICAgICAgICAgICAgPyBoYXNoLmFzSW5saW5lLmhhc2gudG9IZXgoKVxuICAgICAgICAgICAgICAgIDogaXNTdHJpbmcoaGFzaClcbiAgICAgICAgICAgICAgICAgICAgPyBpc0hleChoYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBoYXNoXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHN0cmluZ1RvSGV4KGhhc2gpXG4gICAgICAgICAgICAgICAgICAgIDogaXNVOGEoaGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdThhVG9IZXgoaGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzaC50b0hleCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlSGFzaChzdGF0dXMpIHtcbiAgICByZXR1cm4gZ2V0SW1hZ2VIYXNoQm91bmRlZChzdGF0dXMucHJvcG9zYWwgfHxcbiAgICAgICAgc3RhdHVzLnByb3Bvc2FsSGFzaCk7XG59XG4iLCJpbXBvcnQgKiBhcyBhY2NvdW50cyBmcm9tICcuL2FjY291bnRzL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIGFsbGlhbmNlIGZyb20gJy4vYWxsaWFuY2UvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgYmFnc0xpc3QgZnJvbSAnLi9iYWdzTGlzdC9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBiYWxhbmNlcyBmcm9tICcuL2JhbGFuY2VzL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIGJvdW50aWVzIGZyb20gJy4vYm91bnRpZXMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgY2hhaW4gZnJvbSAnLi9jaGFpbi9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBjb250cmFjdHMgZnJvbSAnLi9jb250cmFjdHMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgY291bmNpbCBmcm9tICcuL2NvdW5jaWwvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgY3Jvd2Rsb2FuIGZyb20gJy4vY3Jvd2Rsb2FuL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIGRlbW9jcmFjeSBmcm9tICcuL2RlbW9jcmFjeS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBlbGVjdGlvbnMgZnJvbSAnLi9lbGVjdGlvbnMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgaW1PbmxpbmUgZnJvbSAnLi9pbU9ubGluZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBtZW1iZXJzaGlwIGZyb20gJy4vbWVtYmVyc2hpcC9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBwYXJhY2hhaW5zIGZyb20gJy4vcGFyYWNoYWlucy9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBzZXNzaW9uIGZyb20gJy4vc2Vzc2lvbi9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBzb2NpZXR5IGZyb20gJy4vc29jaWV0eS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBzdGFraW5nIGZyb20gJy4vc3Rha2luZy9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB0ZWNobmljYWxDb21taXR0ZWUgZnJvbSAnLi90ZWNobmljYWxDb21taXR0ZWUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdHJlYXN1cnkgZnJvbSAnLi90cmVhc3VyeS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB0eCBmcm9tICcuL3R4L2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCBkZXJpdmUgPSB7IGFjY291bnRzLCBhbGxpYW5jZSwgYmFnc0xpc3QsIGJhbGFuY2VzLCBib3VudGllcywgY2hhaW4sIGNvbnRyYWN0cywgY291bmNpbCwgY3Jvd2Rsb2FuLCBkZW1vY3JhY3ksIGVsZWN0aW9ucywgaW1PbmxpbmUsIG1lbWJlcnNoaXAsIHBhcmFjaGFpbnMsIHNlc3Npb24sIHNvY2lldHksIHN0YWtpbmcsIHRlY2huaWNhbENvbW1pdHRlZSwgdHJlYXN1cnksIHR4IH07XG4iLCJleHBvcnQgKiBmcm9tICcuL2luZm8uanMnO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gaXNTZWF0SG9sZGVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQ2FuZGlkYXRlVHVwbGUodmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRBY2NvdW50VHVwbGUodmFsdWUpIHtcbiAgICByZXR1cm4gaXNTZWF0SG9sZGVyKHZhbHVlKVxuICAgICAgICA/IFt2YWx1ZS53aG8sIHZhbHVlLnN0YWtlXVxuICAgICAgICA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0Q2FuZGlkYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzQ2FuZGlkYXRlVHVwbGUodmFsdWUpXG4gICAgICAgID8gdmFsdWVbMF1cbiAgICAgICAgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNvcnRBY2NvdW50cyhbLCBiYWxhbmNlQV0sIFssIGJhbGFuY2VCXSkge1xuICAgIHJldHVybiBiYWxhbmNlQi5jbXAoYmFsYW5jZUEpO1xufVxuZnVuY3Rpb24gZ2V0Q29uc3RhbnRzKGFwaSwgZWxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIGVsZWN0aW9uc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGNhbmRpZGFjeUJvbmQ6IGFwaS5jb25zdHNbZWxlY3Rpb25zXS5jYW5kaWRhY3lCb25kLFxuICAgICAgICAgICAgZGVzaXJlZFJ1bm5lcnNVcDogYXBpLmNvbnN0c1tlbGVjdGlvbnNdLmRlc2lyZWRSdW5uZXJzVXAsXG4gICAgICAgICAgICBkZXNpcmVkU2VhdHM6IGFwaS5jb25zdHNbZWxlY3Rpb25zXS5kZXNpcmVkTWVtYmVycyxcbiAgICAgICAgICAgIHRlcm1EdXJhdGlvbjogYXBpLmNvbnN0c1tlbGVjdGlvbnNdLnRlcm1EdXJhdGlvbixcbiAgICAgICAgICAgIHZvdGluZ0JvbmQ6IGFwaS5jb25zdHNbZWxlY3Rpb25zXVsndm90aW5nQm9uZCddLFxuICAgICAgICAgICAgdm90aW5nQm9uZEJhc2U6IGFwaS5jb25zdHNbZWxlY3Rpb25zXS52b3RpbmdCb25kQmFzZSxcbiAgICAgICAgICAgIHZvdGluZ0JvbmRGYWN0b3I6IGFwaS5jb25zdHNbZWxlY3Rpb25zXS52b3RpbmdCb25kRmFjdG9yXG4gICAgICAgIH1cbiAgICAgICAgOiB7fTtcbn1cbmZ1bmN0aW9uIGdldE1vZHVsZXMoYXBpKSB7XG4gICAgY29uc3QgW2NvdW5jaWxdID0gYXBpLnJlZ2lzdHJ5LmdldE1vZHVsZUluc3RhbmNlcyhhcGkucnVudGltZVZlcnNpb24uc3BlY05hbWUsICdjb3VuY2lsJykgfHwgWydjb3VuY2lsJ107XG4gICAgY29uc3QgZWxlY3Rpb25zID0gYXBpLnF1ZXJ5WydwaHJhZ21lbkVsZWN0aW9uJ11cbiAgICAgICAgPyAncGhyYWdtZW5FbGVjdGlvbidcbiAgICAgICAgOiBhcGkucXVlcnlbJ2VsZWN0aW9uc1BocmFnbWVuJ11cbiAgICAgICAgICAgID8gJ2VsZWN0aW9uc1BocmFnbWVuJ1xuICAgICAgICAgICAgOiBhcGkucXVlcnkuZWxlY3Rpb25zXG4gICAgICAgICAgICAgICAgPyAnZWxlY3Rpb25zJ1xuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAvLyBJbiBzb21lIGNhc2VzIGNvdW5jaWwgaGVyZSBjYW4gcmVmZXIgdG8gYGdlbmVyYWxDb3VuY2lsYCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgY2hhaW4gc3BlY2lmaWMgb3ZlcnJpZGUgaXMuXG4gICAgLy8gVGhlcmVmb3JlLCB3ZSBjaGVjayB0byBzZWUgaWYgaXQgZXhpc3RzIGluIHRoZSBxdWVyeSBmaWVsZC4gSWYgaXQgZG9lcyBub3Qgd2UgZGVmYXVsdCB0byBgY291bmNpbGAuXG4gICAgY29uc3QgcmVzb2x2ZWRDb3VuY2lsID0gYXBpLnF1ZXJ5W2NvdW5jaWxdID8gY291bmNpbCA6ICdjb3VuY2lsJztcbiAgICByZXR1cm4gW3Jlc29sdmVkQ291bmNpbCwgZWxlY3Rpb25zXTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5QWxsKGFwaSwgY291bmNpbCwgZWxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeU11bHRpKFtcbiAgICAgICAgYXBpLnF1ZXJ5W2NvdW5jaWxdLm1lbWJlcnMsXG4gICAgICAgIGFwaS5xdWVyeVtlbGVjdGlvbnNdLmNhbmRpZGF0ZXMsXG4gICAgICAgIGFwaS5xdWVyeVtlbGVjdGlvbnNdLm1lbWJlcnMsXG4gICAgICAgIGFwaS5xdWVyeVtlbGVjdGlvbnNdLnJ1bm5lcnNVcFxuICAgIF0pO1xufVxuZnVuY3Rpb24gcXVlcnlDb3VuY2lsKGFwaSwgY291bmNpbCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLnF1ZXJ5W2NvdW5jaWxdLm1lbWJlcnMoKSxcbiAgICAgICAgb2YoW10pLFxuICAgICAgICBvZihbXSksXG4gICAgICAgIG9mKFtdKVxuICAgIF0pO1xufVxuLyoqXG4gKiBAbmFtZSBpbmZvXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY29tYmluZWQgcmVzdWx0cyBvZiB0aGUgc3RvcmFnZSBxdWVyaWVzIGZvclxuICogYWxsIHJlbGV2YW50IGVsZWN0aW9uIG1vZHVsZSBwcm9wZXJ0aWVzLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBhcGkuZGVyaXZlLmVsZWN0aW9ucy5pbmZvKCh7IG1lbWJlcnMsIGNhbmRpZGF0ZXMgfSkgPT4ge1xuICogICBjb25zb2xlLmxvZyhgVGhlcmUgYXJlIGN1cnJlbnRseSAke21lbWJlcnMubGVuZ3RofSBjb3VuY2lsIG1lbWJlcnMgYW5kICR7Y2FuZGlkYXRlcy5sZW5ndGh9IHByb3NwZWN0aXZlIGNvdW5jaWwgY2FuZGlkYXRlcy5gKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IHtcbiAgICAgICAgY29uc3QgW2NvdW5jaWwsIGVsZWN0aW9uc10gPSBnZXRNb2R1bGVzKGFwaSk7XG4gICAgICAgIHJldHVybiAoZWxlY3Rpb25zXG4gICAgICAgICAgICA/IHF1ZXJ5QWxsKGFwaSwgY291bmNpbCwgZWxlY3Rpb25zKVxuICAgICAgICAgICAgOiBxdWVyeUNvdW5jaWwoYXBpLCBjb3VuY2lsKSkucGlwZShtYXAoKFtjb3VuY2lsTWVtYmVycywgY2FuZGlkYXRlcywgbWVtYmVycywgcnVubmVyc1VwXSkgPT4gb2JqZWN0U3ByZWFkKHt9LCBnZXRDb25zdGFudHMoYXBpLCBlbGVjdGlvbnMpLCB7XG4gICAgICAgICAgICBjYW5kaWRhdGVDb3VudDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ3UzMicsIGNhbmRpZGF0ZXMubGVuZ3RoKSxcbiAgICAgICAgICAgIGNhbmRpZGF0ZXM6IGNhbmRpZGF0ZXMubWFwKGdldENhbmRpZGF0ZSksXG4gICAgICAgICAgICBtZW1iZXJzOiBtZW1iZXJzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gbWVtYmVycy5tYXAoZ2V0QWNjb3VudFR1cGxlKS5zb3J0KHNvcnRBY2NvdW50cylcbiAgICAgICAgICAgICAgICA6IGNvdW5jaWxNZW1iZXJzLm1hcCgoYSkgPT4gW2EsIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyldKSxcbiAgICAgICAgICAgIHJ1bm5lcnNVcDogcnVubmVyc1VwLm1hcChnZXRBY2NvdW50VHVwbGUpLnNvcnQoc29ydEFjY291bnRzKVxuICAgICAgICB9KSkpO1xuICAgIH0pO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9yZWNlaXZlZEhlYXJ0YmVhdHMuanMnO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCTl9aRVJPIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gbWFwUmVzdWx0KFtyZXN1bHQsIHZhbGlkYXRvcnMsIGhlYXJ0YmVhdHMsIG51bUJsb2Nrc10pIHtcbiAgICB2YWxpZGF0b3JzLmZvckVhY2goKHZhbGlkYXRvciwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ySWQgPSB2YWxpZGF0b3IudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgYmxvY2tDb3VudCA9IG51bUJsb2Nrc1tpbmRleF07XG4gICAgICAgIGNvbnN0IGhhc01lc3NhZ2UgPSAhaGVhcnRiZWF0c1tpbmRleF0uaXNFbXB0eTtcbiAgICAgICAgY29uc3QgcHJldiA9IHJlc3VsdFt2YWxpZGF0b3JJZF07XG4gICAgICAgIGlmICghcHJldiB8fCBwcmV2Lmhhc01lc3NhZ2UgIT09IGhhc01lc3NhZ2UgfHwgIXByZXYuYmxvY2tDb3VudC5lcShibG9ja0NvdW50KSkge1xuICAgICAgICAgICAgcmVzdWx0W3ZhbGlkYXRvcklkXSA9IHtcbiAgICAgICAgICAgICAgICBibG9ja0NvdW50LFxuICAgICAgICAgICAgICAgIGhhc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgaXNPbmxpbmU6IGhhc01lc3NhZ2UgfHwgYmxvY2tDb3VudC5ndChCTl9aRVJPKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXR1cm4gYSBib29sZWFuIGFycmF5IGluZGljYXRpbmcgd2hldGhlciB0aGUgcGFzc2VkIGFjY291bnRzIGhhZCByZWNlaXZlZCBoZWFydGJlYXRzIGluIHRoZSBjdXJyZW50IHNlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY2VpdmVkSGVhcnRiZWF0cyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkucXVlcnkuaW1PbmxpbmU/LnJlY2VpdmVkSGVhcnRiZWF0c1xuICAgICAgICA/IGFwaS5kZXJpdmUuc3Rha2luZy5vdmVydmlldygpLnBpcGUoc3dpdGNoTWFwKCh7IGN1cnJlbnRJbmRleCwgdmFsaWRhdG9ycyB9KSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKHt9KSxcbiAgICAgICAgICAgIG9mKHZhbGlkYXRvcnMpLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LmltT25saW5lLnJlY2VpdmVkSGVhcnRiZWF0cy5tdWx0aSh2YWxpZGF0b3JzLm1hcCgoX2FkZHJlc3MsIGluZGV4KSA9PiBbY3VycmVudEluZGV4LCBpbmRleF0pKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeS5pbU9ubGluZS5hdXRob3JlZEJsb2Nrcy5tdWx0aSh2YWxpZGF0b3JzLm1hcCgoYWRkcmVzcykgPT4gW2N1cnJlbnRJbmRleCwgYWRkcmVzc10pKVxuICAgICAgICBdKSksIG1hcChtYXBSZXN1bHQpKVxuICAgICAgICA6IG9mKHt9KSk7XG59XG4iLCJpbXBvcnQgeyBoYXNQcm9wb3NhbHMgYXMgY29sbGVjdGl2ZUhhc1Byb3Bvc2FscywgbWVtYmVycyBhcyBjb2xsZWN0aXZlTWVtYmVycywgcHJpbWUgYXMgY29sbGVjdGl2ZVByaW1lLCBwcm9wb3NhbCBhcyBjb2xsZWN0aXZlUHJvcG9zYWwsIHByb3Bvc2FsQ291bnQgYXMgY29sbGVjdGl2ZVByb3Bvc2FsQ291bnQsIHByb3Bvc2FsSGFzaGVzIGFzIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcywgcHJvcG9zYWxzIGFzIGNvbGxlY3RpdmVQcm9wb3NhbHMgfSBmcm9tICcuLi9jb2xsZWN0aXZlL2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCBtZW1iZXJzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlTWVtYmVycygnbWVtYmVyc2hpcCcpO1xuZXhwb3J0IGNvbnN0IGhhc1Byb3Bvc2FscyA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZUhhc1Byb3Bvc2FscygnbWVtYmVyc2hpcCcpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FsID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWwoJ21lbWJlcnNoaXAnKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbENvdW50ID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWxDb3VudCgnbWVtYmVyc2hpcCcpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FsSGFzaGVzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWxIYXNoZXMoJ21lbWJlcnNoaXAnKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbHMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbHMoJ21lbWJlcnNoaXAnKTtcbmV4cG9ydCBjb25zdCBwcmltZSA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByaW1lKCdtZW1iZXJzaGlwJyk7XG4iLCJleHBvcnQgKiBmcm9tICcuL2luZm8uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vdmVydmlldy5qcyc7XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBkaWRVcGRhdGVUb0Jvb2wgfSBmcm9tICcuL3V0aWwuanMnO1xuZnVuY3Rpb24gcGFyc2VBY3RpdmUoaWQsIGFjdGl2ZSkge1xuICAgIGNvbnN0IGZvdW5kID0gYWN0aXZlLmZpbmQoKFtwYXJhSWRdKSA9PiBwYXJhSWQgPT09IGlkKTtcbiAgICBpZiAoZm91bmQgJiYgZm91bmRbMV0uaXNTb21lKSB7XG4gICAgICAgIGNvbnN0IFtjb2xsYXRvcklkLCByZXRyaWFibGVdID0gZm91bmRbMV0udW53cmFwKCk7XG4gICAgICAgIHJldHVybiBvYmplY3RTcHJlYWQoeyBjb2xsYXRvcklkIH0sIHJldHJpYWJsZS5pc1dpdGhSZXRyaWVzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBpc1JldHJpYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXRyaWVzOiByZXRyaWFibGUuYXNXaXRoUmV0cmllcy50b051bWJlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBpc1JldHJpYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmV0cmllczogMFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gcGFyc2VDb2xsYXRvcnMoaWQsIGNvbGxhdG9yUXVldWUpIHtcbiAgICByZXR1cm4gY29sbGF0b3JRdWV1ZS5tYXAoKHF1ZXVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gcXVldWUuZmluZCgoW3BhcmFJZF0pID0+IHBhcmFJZCA9PT0gaWQpO1xuICAgICAgICByZXR1cm4gZm91bmQgPyBmb3VuZFsxXSA6IG51bGw7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBwYXJzZShpZCwgW2FjdGl2ZSwgcmV0cnlRdWV1ZSwgc2VsZWN0ZWRUaHJlYWRzLCBkaWRVcGRhdGUsIGluZm8sIHBlbmRpbmdTd2FwLCBoZWFkcywgcmVsYXlEaXNwYXRjaFF1ZXVlXSkge1xuICAgIGlmIChpbmZvLmlzTm9uZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aXZlOiBwYXJzZUFjdGl2ZShpZCwgYWN0aXZlKSxcbiAgICAgICAgZGlkVXBkYXRlOiBkaWRVcGRhdGVUb0Jvb2woZGlkVXBkYXRlLCBpZCksXG4gICAgICAgIGhlYWRzLFxuICAgICAgICBpZCxcbiAgICAgICAgaW5mbzogb2JqZWN0U3ByZWFkKHsgaWQgfSwgaW5mby51bndyYXAoKSksXG4gICAgICAgIHBlbmRpbmdTd2FwSWQ6IHBlbmRpbmdTd2FwLnVud3JhcE9yKG51bGwpLFxuICAgICAgICByZWxheURpc3BhdGNoUXVldWUsXG4gICAgICAgIHJldHJ5Q29sbGF0b3JzOiBwYXJzZUNvbGxhdG9ycyhpZCwgcmV0cnlRdWV1ZSksXG4gICAgICAgIHNlbGVjdGVkQ29sbGF0b3JzOiBwYXJzZUNvbGxhdG9ycyhpZCwgc2VsZWN0ZWRUaHJlYWRzKVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gaW5mbyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoaWQpID0+IGFwaS5xdWVyeVsncmVnaXN0cmFyJ10gJiYgYXBpLnF1ZXJ5WydwYXJhY2hhaW5zJ11cbiAgICAgICAgPyBhcGkucXVlcnlNdWx0aShbXG4gICAgICAgICAgICBhcGkucXVlcnlbJ3JlZ2lzdHJhciddWydhY3RpdmUnXSxcbiAgICAgICAgICAgIGFwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3JldHJ5UXVldWUnXSxcbiAgICAgICAgICAgIGFwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3NlbGVjdGVkVGhyZWFkcyddLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5WydwYXJhY2hhaW5zJ11bJ2RpZFVwZGF0ZSddLFxuICAgICAgICAgICAgW2FwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3BhcmFzJ10sIGlkXSxcbiAgICAgICAgICAgIFthcGkucXVlcnlbJ3JlZ2lzdHJhciddWydwZW5kaW5nU3dhcCddLCBpZF0sXG4gICAgICAgICAgICBbYXBpLnF1ZXJ5WydwYXJhY2hhaW5zJ11bJ2hlYWRzJ10sIGlkXSxcbiAgICAgICAgICAgIFthcGkucXVlcnlbJ3BhcmFjaGFpbnMnXVsncmVsYXlEaXNwYXRjaFF1ZXVlJ10sIGlkXVxuICAgICAgICBdKVxuICAgICAgICAgICAgLnBpcGUobWFwKChyZXN1bHQpID0+IHBhcnNlKGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdQYXJhSWQnLCBpZCksIHJlc3VsdCkpKVxuICAgICAgICA6IG9mKG51bGwpKTtcbn1cbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZGlkVXBkYXRlVG9Cb29sIH0gZnJvbSAnLi91dGlsLmpzJztcbmZ1bmN0aW9uIHBhcnNlKFtpZHMsIGRpZFVwZGF0ZSwgcmVsYXlEaXNwYXRjaFF1ZXVlU2l6ZXMsIGluZm9zLCBwZW5kaW5nU3dhcHNdKSB7XG4gICAgcmV0dXJuIGlkcy5tYXAoKGlkLCBpbmRleCkgPT4gKHtcbiAgICAgICAgZGlkVXBkYXRlOiBkaWRVcGRhdGVUb0Jvb2woZGlkVXBkYXRlLCBpZCksXG4gICAgICAgIGlkLFxuICAgICAgICBpbmZvOiBvYmplY3RTcHJlYWQoeyBpZCB9LCBpbmZvc1tpbmRleF0udW53cmFwT3IobnVsbCkpLFxuICAgICAgICBwZW5kaW5nU3dhcElkOiBwZW5kaW5nU3dhcHNbaW5kZXhdLnVud3JhcE9yKG51bGwpLFxuICAgICAgICByZWxheURpc3BhdGNoUXVldWVTaXplOiByZWxheURpc3BhdGNoUXVldWVTaXplc1tpbmRleF1bMF0udG9OdW1iZXIoKVxuICAgIH0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvdmVydmlldyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkucXVlcnlbJ3JlZ2lzdHJhciddPy5bJ3BhcmFjaGFpbnMnXSAmJiBhcGkucXVlcnlbJ3BhcmFjaGFpbnMnXVxuICAgICAgICA/IGFwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3BhcmFjaGFpbnMnXSgpLnBpcGUoc3dpdGNoTWFwKChwYXJhSWRzKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKHBhcmFJZHMpLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5WydwYXJhY2hhaW5zJ11bJ2RpZFVwZGF0ZSddKCksXG4gICAgICAgICAgICBhcGkucXVlcnlbJ3BhcmFjaGFpbnMnXVsncmVsYXlEaXNwYXRjaFF1ZXVlU2l6ZSddLm11bHRpKHBhcmFJZHMpLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5WydyZWdpc3RyYXInXVsncGFyYXMnXS5tdWx0aShwYXJhSWRzKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3BlbmRpbmdTd2FwJ10ubXVsdGkocGFyYUlkcylcbiAgICAgICAgXSkpLCBtYXAocGFyc2UpKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGlkVXBkYXRlVG9Cb29sKGRpZFVwZGF0ZSwgaWQpIHtcbiAgICByZXR1cm4gZGlkVXBkYXRlLmlzU29tZVxuICAgICAgICA/IGRpZFVwZGF0ZS51bndyYXAoKS5zb21lKChwYXJhSWQpID0+IHBhcmFJZC5lcShpZCkpXG4gICAgICAgIDogZmFsc2U7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL2luZGV4ZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmZvLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZ3Jlc3MuanMnO1xuIiwiaW1wb3J0IHsgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gcGFyc2UoW2N1cnJlbnRJbmRleCwgYWN0aXZlRXJhLCBhY3RpdmVFcmFTdGFydCwgY3VycmVudEVyYSwgdmFsaWRhdG9yQ291bnRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aXZlRXJhLFxuICAgICAgICBhY3RpdmVFcmFTdGFydCxcbiAgICAgICAgY3VycmVudEVyYSxcbiAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgICB2YWxpZGF0b3JDb3VudFxuICAgIH07XG59XG5mdW5jdGlvbiBxdWVyeVN0YWtpbmcoYXBpKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeU11bHRpKFtcbiAgICAgICAgYXBpLnF1ZXJ5LnNlc3Npb24uY3VycmVudEluZGV4LFxuICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5hY3RpdmVFcmEsXG4gICAgICAgIGFwaS5xdWVyeS5zdGFraW5nLmN1cnJlbnRFcmEsXG4gICAgICAgIGFwaS5xdWVyeS5zdGFraW5nLnZhbGlkYXRvckNvdW50XG4gICAgXSkucGlwZShtYXAoKFtjdXJyZW50SW5kZXgsIGFjdGl2ZU9wdCwgY3VycmVudEVyYSwgdmFsaWRhdG9yQ291bnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIHN0YXJ0IH0gPSBhY3RpdmVPcHQudW53cmFwT3JEZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBwYXJzZShbXG4gICAgICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgY3VycmVudEVyYS51bndyYXBPckRlZmF1bHQoKSxcbiAgICAgICAgICAgIHZhbGlkYXRvckNvdW50XG4gICAgICAgIF0pO1xuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5U2Vzc2lvbihhcGkpIHtcbiAgICByZXR1cm4gYXBpLnF1ZXJ5LnNlc3Npb24uY3VycmVudEluZGV4KCkucGlwZShtYXAoKGN1cnJlbnRJbmRleCkgPT4gcGFyc2UoW1xuICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdFcmFJbmRleCcpLFxuICAgICAgICBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnT3B0aW9uPE1vbWVudD4nKSxcbiAgICAgICAgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0VyYUluZGV4JyksXG4gICAgICAgIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCd1MzInKVxuICAgIF0pKSk7XG59XG5mdW5jdGlvbiBlbXB0eShhcGkpIHtcbiAgICByZXR1cm4gb2YocGFyc2UoW1xuICAgICAgICBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnU2Vzc2lvbkluZGV4JywgMSksXG4gICAgICAgIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdFcmFJbmRleCcpLFxuICAgICAgICBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnT3B0aW9uPE1vbWVudD4nKSxcbiAgICAgICAgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0VyYUluZGV4JyksXG4gICAgICAgIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCd1MzInKVxuICAgIF0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmRleGVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS5zZXNzaW9uXG4gICAgICAgID8gYXBpLnF1ZXJ5LnN0YWtpbmdcbiAgICAgICAgICAgID8gcXVlcnlTdGFraW5nKGFwaSlcbiAgICAgICAgICAgIDogcXVlcnlTZXNzaW9uKGFwaSlcbiAgICAgICAgOiBlbXB0eShhcGkpKTtcbn1cbiIsImltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCB0aGUgc2Vzc2lvbiBhbmQgZXJhIHF1ZXJ5IGFuZCBjYWxjdWxhdGVzIHNwZWNpZmljIHZhbHVlcyBvbiBpdCBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXNzaW9uIGFuZCBlcmFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5kZXJpdmUuc2Vzc2lvbi5pbmRleGVzKCkucGlwZShtYXAoKGluZGV4ZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkxlbmd0aCA9IGFwaS5jb25zdHM/LmJhYmU/LmVwb2NoRHVyYXRpb24gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ3U2NCcsIDEpO1xuICAgICAgICBjb25zdCBzZXNzaW9uc1BlckVyYSA9IGFwaS5jb25zdHM/LnN0YWtpbmc/LnNlc3Npb25zUGVyRXJhIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdTZXNzaW9uSW5kZXgnLCAxKTtcbiAgICAgICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBlcmFMZW5ndGg6IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCbG9ja051bWJlcicsIHNlc3Npb25zUGVyRXJhLm11bChzZXNzaW9uTGVuZ3RoKSksXG4gICAgICAgICAgICBpc0Vwb2NoOiAhIWFwaS5xdWVyeS5iYWJlLFxuICAgICAgICAgICAgc2Vzc2lvbkxlbmd0aCxcbiAgICAgICAgICAgIHNlc3Npb25zUGVyRXJhXG4gICAgICAgIH0sIGluZGV4ZXMpO1xuICAgIH0pKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIHdpdGhQcm9ncmVzc0ZpZWxkKGZpZWxkKSB7XG4gICAgcmV0dXJuIChpbnN0YW5jZUlkLCBhcGkpID0+IG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLmRlcml2ZS5zZXNzaW9uLnByb2dyZXNzKCkucGlwZShtYXAoKGluZm8pID0+IGluZm9bZmllbGRdKSkpO1xufVxuZnVuY3Rpb24gY3JlYXRlRGVyaXZlKGFwaSwgaW5mbywgW2N1cnJlbnRTbG90LCBlcG9jaEluZGV4LCBlcG9jaE9yR2VuZXNpc1N0YXJ0U2xvdCwgYWN0aXZlRXJhU3RhcnRTZXNzaW9uSW5kZXhdKSB7XG4gICAgY29uc3QgZXBvY2hTdGFydFNsb3QgPSBlcG9jaEluZGV4Lm11bChpbmZvLnNlc3Npb25MZW5ndGgpLmlhZGQoZXBvY2hPckdlbmVzaXNTdGFydFNsb3QpO1xuICAgIGNvbnN0IHNlc3Npb25Qcm9ncmVzcyA9IGN1cnJlbnRTbG90LnN1YihlcG9jaFN0YXJ0U2xvdCk7XG4gICAgY29uc3QgZXJhUHJvZ3Jlc3MgPSBpbmZvLmN1cnJlbnRJbmRleC5zdWIoYWN0aXZlRXJhU3RhcnRTZXNzaW9uSW5kZXgpLmltdWwoaW5mby5zZXNzaW9uTGVuZ3RoKS5pYWRkKHNlc3Npb25Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7XG4gICAgICAgIGVyYVByb2dyZXNzOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmxvY2tOdW1iZXInLCBlcmFQcm9ncmVzcyksXG4gICAgICAgIHNlc3Npb25Qcm9ncmVzczogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0Jsb2NrTnVtYmVyJywgc2Vzc2lvblByb2dyZXNzKVxuICAgIH0sIGluZm8pO1xufVxuZnVuY3Rpb24gcXVlcnlBdXJhKGFwaSkge1xuICAgIHJldHVybiBhcGkuZGVyaXZlLnNlc3Npb24uaW5mbygpLnBpcGUobWFwKChpbmZvKSA9PiBvYmplY3RTcHJlYWQoe1xuICAgICAgICBlcmFQcm9ncmVzczogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0Jsb2NrTnVtYmVyJyksXG4gICAgICAgIHNlc3Npb25Qcm9ncmVzczogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0Jsb2NrTnVtYmVyJylcbiAgICB9LCBpbmZvKSkpO1xufVxuZnVuY3Rpb24gcXVlcnlCYWJlKGFwaSkge1xuICAgIHJldHVybiBhcGkuZGVyaXZlLnNlc3Npb24uaW5mbygpLnBpcGUoc3dpdGNoTWFwKChpbmZvKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2YoaW5mbyksXG4gICAgICAgIC8vIHdlIG1heSBoYXZlIG5vIHN0YWtpbmcsIGJ1dCBoYXZlIGJhYmUgKHBlcm1pc3Npb25lZClcbiAgICAgICAgYXBpLnF1ZXJ5LnN0YWtpbmc/LmVyYXNTdGFydFNlc3Npb25JbmRleFxuICAgICAgICAgICAgPyBhcGkucXVlcnlNdWx0aShbXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LmJhYmUuY3VycmVudFNsb3QsXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LmJhYmUuZXBvY2hJbmRleCxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuYmFiZS5nZW5lc2lzU2xvdCxcbiAgICAgICAgICAgICAgICBbYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YXJ0U2Vzc2lvbkluZGV4LCBpbmZvLmFjdGl2ZUVyYV1cbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IGFwaS5xdWVyeU11bHRpKFtcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuYmFiZS5jdXJyZW50U2xvdCxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuYmFiZS5lcG9jaEluZGV4LFxuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5iYWJlLmdlbmVzaXNTbG90XG4gICAgICAgICAgICBdKVxuICAgIF0pKSwgbWFwKChbaW5mbywgW2N1cnJlbnRTbG90LCBlcG9jaEluZGV4LCBnZW5lc2lzU2xvdCwgb3B0U3RhcnRJbmRleF1dKSA9PiBbXG4gICAgICAgIGluZm8sIFtjdXJyZW50U2xvdCwgZXBvY2hJbmRleCwgZ2VuZXNpc1Nsb3QsIG9wdFN0YXJ0SW5kZXggJiYgb3B0U3RhcnRJbmRleC5pc1NvbWUgPyBvcHRTdGFydEluZGV4LnVud3JhcCgpIDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1Nlc3Npb25JbmRleCcsIDEpXVxuICAgIF0pKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwgdGhlIHNlc3Npb24gYW5kIGVyYSBxdWVyeSBhbmQgY2FsY3VsYXRlcyBzcGVjaWZpYyB2YWx1ZXMgb24gaXQgYXMgdGhlIGxlbmd0aCBvZiB0aGUgc2Vzc2lvbiBhbmQgZXJhc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3MoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLnF1ZXJ5LmJhYmVcbiAgICAgICAgPyBxdWVyeUJhYmUoYXBpKS5waXBlKG1hcCgoW2luZm8sIHNsb3RzXSkgPT4gY3JlYXRlRGVyaXZlKGFwaSwgaW5mbywgc2xvdHMpKSlcbiAgICAgICAgOiBxdWVyeUF1cmEoYXBpKSk7XG59XG5leHBvcnQgY29uc3QgZXJhTGVuZ3RoID0gLyojX19QVVJFX18qLyB3aXRoUHJvZ3Jlc3NGaWVsZCgnZXJhTGVuZ3RoJyk7XG5leHBvcnQgY29uc3QgZXJhUHJvZ3Jlc3MgPSAvKiNfX1BVUkVfXyovIHdpdGhQcm9ncmVzc0ZpZWxkKCdlcmFQcm9ncmVzcycpO1xuZXhwb3J0IGNvbnN0IHNlc3Npb25Qcm9ncmVzcyA9IC8qI19fUFVSRV9fKi8gd2l0aFByb2dyZXNzRmllbGQoJ3Nlc3Npb25Qcm9ncmVzcycpO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5mdW5jdGlvbiBnZXRQcmV2KGFwaSkge1xuICAgIHJldHVybiBhcGkucXVlcnkuc29jaWV0eS5jYW5kaWRhdGVzKCkucGlwZShzd2l0Y2hNYXAoKGNhbmRpZGF0ZXMpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZihjYW5kaWRhdGVzKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHlbJ3N1c3BlbmRlZENhbmRpZGF0ZXMnXS5tdWx0aShjYW5kaWRhdGVzLm1hcCgoeyB3aG8gfSkgPT4gd2hvKSlcbiAgICBdKSksIG1hcCgoW2NhbmRpZGF0ZXMsIHN1c3BlbmRlZF0pID0+IGNhbmRpZGF0ZXMubWFwKCh7IGtpbmQsIHZhbHVlLCB3aG8gfSwgaW5kZXgpID0+ICh7XG4gICAgICAgIGFjY291bnRJZDogd2hvLFxuICAgICAgICBpc1N1c3BlbmRlZDogc3VzcGVuZGVkW2luZGV4XS5pc1NvbWUsXG4gICAgICAgIGtpbmQsXG4gICAgICAgIHZhbHVlXG4gICAgfSkpKSk7XG59XG5mdW5jdGlvbiBnZXRDdXJyKGFwaSkge1xuICAgIHJldHVybiBhcGkucXVlcnkuc29jaWV0eS5jYW5kaWRhdGVzLmVudHJpZXMoKS5waXBlKG1hcCgoZW50cmllcykgPT4gZW50cmllc1xuICAgICAgICAuZmlsdGVyKChbLCBvcHRdKSA9PiBvcHQuaXNTb21lKVxuICAgICAgICAubWFwKChbeyBhcmdzOiBbYWNjb3VudElkXSB9LCBvcHRdKSA9PiBbYWNjb3VudElkLCBvcHQudW53cmFwKCldKVxuICAgICAgICAvLyBGSVhNRSBXZSBhcmUgbWlzc2luZyB0aGUgbmV3IGZpZWxkcyBmcm9tIHRoZSBjYW5kaWRhdGUgcmVjb3JkXG4gICAgICAgIC5tYXAoKFthY2NvdW50SWQsIHsgYmlkLCBraW5kIH1dKSA9PiAoe1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIGlzU3VzcGVuZGVkOiBmYWxzZSxcbiAgICAgICAga2luZCxcbiAgICAgICAgdmFsdWU6IGJpZFxuICAgIH0pKSkpO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBjYW5kaWRhdGUgaW5mbyBmb3IgYSBzb2NpZXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5kaWRhdGVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS5zb2NpZXR5WydzdXNwZW5kZWRDYW5kaWRhdGVzJ10gJiYgYXBpLnF1ZXJ5LnNvY2lldHkuY2FuZGlkYXRlcy5jcmVhdG9yLm1ldGEudHlwZS5pc1BsYWluXG4gICAgICAgID8gZ2V0UHJldihhcGkpXG4gICAgICAgIDogZ2V0Q3VycihhcGkpKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY2FuZGlkYXRlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZm8uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW1iZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW1iZXJzLmpzJztcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldCB0aGUgb3ZlcmFsbCBpbmZvIGZvciBhIHNvY2lldHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZm8oaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIGFwaS5xdWVyeS5zb2NpZXR5LmJpZHMoKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHlbJ2RlZmVuZGVyJ11cbiAgICAgICAgICAgID8gYXBpLnF1ZXJ5LnNvY2lldHlbJ2RlZmVuZGVyJ10oKVxuICAgICAgICAgICAgOiBvZih1bmRlZmluZWQpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5mb3VuZGVyKCksXG4gICAgICAgIGFwaS5xdWVyeS5zb2NpZXR5LmhlYWQoKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHlbJ21heE1lbWJlcnMnXVxuICAgICAgICAgICAgPyBhcGkucXVlcnkuc29jaWV0eVsnbWF4TWVtYmVycyddKClcbiAgICAgICAgICAgIDogb2YodW5kZWZpbmVkKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHkucG90KClcbiAgICBdKS5waXBlKG1hcCgoW2JpZHMsIGRlZmVuZGVyLCBmb3VuZGVyLCBoZWFkLCBtYXhNZW1iZXJzLCBwb3RdKSA9PiAoe1xuICAgICAgICBiaWRzLFxuICAgICAgICBkZWZlbmRlcjogZGVmZW5kZXI/LnVud3JhcE9yKHVuZGVmaW5lZCksXG4gICAgICAgIGZvdW5kZXI6IGZvdW5kZXIudW53cmFwT3IodW5kZWZpbmVkKSxcbiAgICAgICAgaGFzRGVmZW5kZXI6IChkZWZlbmRlcj8uaXNTb21lICYmIGhlYWQuaXNTb21lICYmICFoZWFkLmVxKGRlZmVuZGVyKSkgfHwgZmFsc2UsXG4gICAgICAgIGhlYWQ6IGhlYWQudW53cmFwT3IodW5kZWZpbmVkKSxcbiAgICAgICAgbWF4TWVtYmVycyxcbiAgICAgICAgcG90XG4gICAgfSkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldCB0aGUgbWVtYmVyIGluZm8gZm9yIGEgc29jaWV0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWQpID0+IGFwaS5kZXJpdmUuc29jaWV0eS5fbWVtYmVycyhbYWNjb3VudElkXSkucGlwZShtYXAoKFtyZXN1bHRdKSA9PiByZXN1bHQpKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIF9tZW1iZXJzUHJldihhcGksIGFjY291bnRJZHMpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9mKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5wYXlvdXRzLm11bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eVsnc3RyaWtlcyddLm11bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5kZWZlbmRlclZvdGVzLm11bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5zdXNwZW5kZWRNZW1iZXJzLm11bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eVsndm91Y2hpbmcnXS5tdWx0aShhY2NvdW50SWRzKVxuICAgIF0pLnBpcGUobWFwKChbYWNjb3VudElkcywgcGF5b3V0cywgc3RyaWtlcywgZGVmZW5kZXJWb3Rlcywgc3VzcGVuZGVkLCB2b3VjaGluZ10pID0+IGFjY291bnRJZHMubWFwKChhY2NvdW50SWQsIGluZGV4KSA9PiAoe1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIGlzRGVmZW5kZXJWb3RlcjogZGVmZW5kZXJWb3Rlc1tpbmRleF0uaXNTb21lLFxuICAgICAgICBpc1N1c3BlbmRlZDogc3VzcGVuZGVkW2luZGV4XS5pc1RydWUsXG4gICAgICAgIHBheW91dHM6IHBheW91dHNbaW5kZXhdLFxuICAgICAgICBzdHJpa2VzOiBzdHJpa2VzW2luZGV4XSxcbiAgICAgICAgdm90ZTogZGVmZW5kZXJWb3Rlc1tpbmRleF0udW53cmFwT3IodW5kZWZpbmVkKSxcbiAgICAgICAgdm91Y2hpbmc6IHZvdWNoaW5nW2luZGV4XS51bndyYXBPcih1bmRlZmluZWQpXG4gICAgfSkpKSk7XG59XG5mdW5jdGlvbiBfbWVtYmVyc0N1cnIoYXBpLCBhY2NvdW50SWRzKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZihhY2NvdW50SWRzKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHkubWVtYmVycy5tdWx0aShhY2NvdW50SWRzKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHkucGF5b3V0cy5tdWx0aShhY2NvdW50SWRzKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHkuY2hhbGxlbmdlUm91bmRDb3VudCgpLnBpcGUoc3dpdGNoTWFwKChyb3VuZCkgPT4gYXBpLnF1ZXJ5LnNvY2lldHkuZGVmZW5kZXJWb3Rlcy5tdWx0aShhY2NvdW50SWRzLm1hcCgoYWNjb3VudElkKSA9PiBbcm91bmQsIGFjY291bnRJZF0pKSkpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5zdXNwZW5kZWRNZW1iZXJzLm11bHRpKGFjY291bnRJZHMpXG4gICAgXSkucGlwZShtYXAoKFthY2NvdW50SWRzLCBtZW1iZXJzLCBwYXlvdXRzLCBkZWZlbmRlclZvdGVzLCBzdXNwZW5kZWRNZW1iZXJzXSkgPT4gYWNjb3VudElkc1xuICAgICAgICAubWFwKChhY2NvdW50SWQsIGluZGV4KSA9PiBtZW1iZXJzW2luZGV4XS5pc1NvbWVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgICAgICBpc0RlZmVuZGVyVm90ZXI6IGRlZmVuZGVyVm90ZXNbaW5kZXhdLmlzU29tZSxcbiAgICAgICAgICAgIGlzU3VzcGVuZGVkOiBzdXNwZW5kZWRNZW1iZXJzW2luZGV4XS5pc1NvbWUsXG4gICAgICAgICAgICBtZW1iZXI6IG1lbWJlcnNbaW5kZXhdLnVud3JhcCgpLFxuICAgICAgICAgICAgcGF5b3V0czogcGF5b3V0c1tpbmRleF0ucGF5b3V0c1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbClcbiAgICAgICAgLmZpbHRlcigobSkgPT4gISFtKVxuICAgICAgICAubWFwKCh7IGFjY291bnRJZCwgaXNEZWZlbmRlclZvdGVyLCBpc1N1c3BlbmRlZCwgbWVtYmVyLCBwYXlvdXRzIH0pID0+ICh7XG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgaXNEZWZlbmRlclZvdGVyLFxuICAgICAgICBpc1N1c3BlbmRlZCxcbiAgICAgICAgcGF5b3V0cyxcbiAgICAgICAgc3RyaWtlczogbWVtYmVyLnN0cmlrZXMsXG4gICAgICAgIHZvdWNoaW5nOiBtZW1iZXIudm91Y2hpbmcudW53cmFwT3IodW5kZWZpbmVkKVxuICAgIH0pKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9tZW1iZXJzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWRzKSA9PiBhcGkucXVlcnkuc29jaWV0eS5tZW1iZXJzLmNyZWF0b3IubWV0YS50eXBlLmlzTWFwXG4gICAgICAgID8gX21lbWJlcnNDdXJyKGFwaSwgYWNjb3VudElkcylcbiAgICAgICAgOiBfbWVtYmVyc1ByZXYoYXBpLCBhY2NvdW50SWRzKSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIG1lbWJlciBpbmZvIGZvciBhIHNvY2lldHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlcnMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLnF1ZXJ5LnNvY2lldHkubWVtYmVycy5jcmVhdG9yLm1ldGEudHlwZS5pc01hcFxuICAgICAgICA/IGFwaS5xdWVyeS5zb2NpZXR5Lm1lbWJlcnMua2V5cygpLnBpcGUoc3dpdGNoTWFwKChrZXlzKSA9PiBhcGkuZGVyaXZlLnNvY2lldHkuX21lbWJlcnMoa2V5cy5tYXAoKHsgYXJnczogW2FjY291bnRJZF0gfSkgPT4gYWNjb3VudElkKSkpKVxuICAgICAgICA6IGFwaS5xdWVyeS5zb2NpZXR5Lm1lbWJlcnMoKS5waXBlKHN3aXRjaE1hcCgobWVtYmVycykgPT4gYXBpLmRlcml2ZS5zb2NpZXR5Ll9tZW1iZXJzKG1lbWJlcnMpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJOLCBCTl9aRVJPLCBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IFFVRVJZX09QVFMgPSB7XG4gICAgd2l0aERlc3RpbmF0aW9uOiB0cnVlLFxuICAgIHdpdGhMZWRnZXI6IHRydWUsXG4gICAgd2l0aE5vbWluYXRpb25zOiB0cnVlLFxuICAgIHdpdGhQcmVmczogdHJ1ZVxufTtcbmZ1bmN0aW9uIGdyb3VwQnlFcmEobGlzdCkge1xuICAgIHJldHVybiBsaXN0LnJlZHVjZSgobWFwLCB7IGVyYSwgdmFsdWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBlcmEudG9TdHJpbmcoKTtcbiAgICAgICAgbWFwW2tleV0gPSAobWFwW2tleV0gfHwgQk5fWkVSTykuYWRkKHZhbHVlLnVud3JhcCgpKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCB7fSk7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVVbmxvY2tpbmcoYXBpLCBzdGFraW5nTGVkZ2VyLCBzZXNzaW9uSW5mbykge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBPYmplY3RcbiAgICAgICAgLmVudHJpZXMoZ3JvdXBCeUVyYSgoc3Rha2luZ0xlZGdlcj8udW5sb2NraW5nIHx8IFtdKS5maWx0ZXIoKHsgZXJhIH0pID0+IGVyYS51bndyYXAoKS5ndChzZXNzaW9uSW5mby5hY3RpdmVFcmEpKSkpXG4gICAgICAgIC5tYXAoKFtlcmFTdHJpbmcsIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgcmVtYWluaW5nRXJhczogbmV3IEJOKGVyYVN0cmluZykuaXN1YihzZXNzaW9uSW5mby5hY3RpdmVFcmEpLFxuICAgICAgICB2YWx1ZTogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnLCB2YWx1ZSlcbiAgICB9KSk7XG4gICAgcmV0dXJuIHJlc3VsdHMubGVuZ3RoXG4gICAgICAgID8gcmVzdWx0c1xuICAgICAgICA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlZGVlbWFibGVTdW0oYXBpLCBzdGFraW5nTGVkZ2VyLCBzZXNzaW9uSW5mbykge1xuICAgIHJldHVybiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScsIChzdGFraW5nTGVkZ2VyPy51bmxvY2tpbmcgfHwgW10pLnJlZHVjZSgodG90YWwsIHsgZXJhLCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIC8vIGFsaWducyB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9ibG9iL2ZkZmRjNzNmOWU2NGRjNDc5MzRiNzJlYjlhZjNlMTk4OWU0YmE2OTkvZnJhbWUvc3Rha2luZy9zcmMvcGFsbGV0L21vZC5ycyNMOTczLUw5NzVcbiAgICAgICAgLy8gKGVuc3VyZSBjdXJyZW50RXJhID49IGVyYSBwYXNzZWQsIGFzIHBlciBodHRwczovL2dpdGh1Yi5jb20vcGFyaXR5dGVjaC9zdWJzdHJhdGUvYmxvYi9mZGZkYzczZjllNjRkYzQ3OTM0YjcyZWI5YWYzZTE5ODllNGJhNjk5L2ZyYW1lL3N0YWtpbmcvc3JjL2xpYi5ycyNMNDc3LUw0OTQpXG4gICAgICAgIC8vIE5PVEU6IFByZXZpb3VzbHkgd2UgdXNlZCBhY3RpdmVFcmEgPj0gZXJhLCB3aGljaCBpcyBpbmNvcnJlY3QgZm9yIHRoZSBsYXN0IHNlc3Npb25cbiAgICAgICAgcmV0dXJuIGVyYS51bndyYXAoKS5ndChzZXNzaW9uSW5mby5jdXJyZW50RXJhKVxuICAgICAgICAgICAgPyB0b3RhbFxuICAgICAgICAgICAgOiB0b3RhbC5pYWRkKHZhbHVlLnVud3JhcCgpKTtcbiAgICB9LCBuZXcgQk4oMCkpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlUmVzdWx0KGFwaSwgc2Vzc2lvbkluZm8sIGtleXMsIHF1ZXJ5KSB7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7fSwga2V5cywgcXVlcnksIHtcbiAgICAgICAgcmVkZWVtYWJsZTogcmVkZWVtYWJsZVN1bShhcGksIHF1ZXJ5LnN0YWtpbmdMZWRnZXIsIHNlc3Npb25JbmZvKSxcbiAgICAgICAgdW5sb2NraW5nOiBjYWxjdWxhdGVVbmxvY2tpbmcoYXBpLCBxdWVyeS5zdGFraW5nTGVkZ2VyLCBzZXNzaW9uSW5mbylcbiAgICB9KTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZyb20gYSBsaXN0IG9mIHN0YXNoZXMsIGZpbGwgaW4gYWxsIHRoZSByZWxldmFudCBzdGFraW5nIGRldGFpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY291bnRzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWRzLCBvcHRzID0gUVVFUllfT1BUUykgPT4gYXBpLmRlcml2ZS5zZXNzaW9uLmluZm8oKS5waXBlKHN3aXRjaE1hcCgoc2Vzc2lvbkluZm8pID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcua2V5c011bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcucXVlcnlNdWx0aShhY2NvdW50SWRzLCBvcHRzKVxuICAgIF0pLnBpcGUobWFwKChba2V5cywgcXVlcmllc10pID0+IHF1ZXJpZXMubWFwKChxLCBpbmRleCkgPT4gcGFyc2VSZXN1bHQoYXBpLCBzZXNzaW9uSW5mbywga2V5c1tpbmRleF0sIHEpKSkpKSkpO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRnJvbSBhIHN0YXNoLCByZXRyaWV2ZSB0aGUgY29udHJvbGxlcklkIGFuZCBmaWxsIGluIGFsbCB0aGUgcmVsZXZhbnQgc3Rha2luZyBkZXRhaWxzXG4gKi9cbmV4cG9ydCBjb25zdCBhY2NvdW50ID0gLyojX19QVVJFX18qLyBmaXJzdE1lbW8oKGFwaSwgYWNjb3VudElkLCBvcHRzKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuYWNjb3VudHMoW2FjY291bnRJZF0sIG9wdHMpKTtcbiIsImltcG9ydCB7IGRlcml2ZUNhY2hlIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJhQ2FjaGUoQ0FDSEVfS0VZLCBlcmEsIHdpdGhBY3RpdmUpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke0NBQ0hFX0tFWX0tJHtlcmEudG9TdHJpbmcoKX1gO1xuICAgIHJldHVybiBbXG4gICAgICAgIGNhY2hlS2V5LFxuICAgICAgICB3aXRoQWN0aXZlXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBkZXJpdmVDYWNoZS5nZXQoY2FjaGVLZXkpXG4gICAgXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcmFNdWx0aUNhY2hlKENBQ0hFX0tFWSwgZXJhcywgd2l0aEFjdGl2ZSkge1xuICAgIGNvbnN0IGNhY2hlZCA9IHdpdGhBY3RpdmVcbiAgICAgICAgPyBbXVxuICAgICAgICA6IGVyYXNcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IGRlcml2ZUNhY2hlLmdldChgJHtDQUNIRV9LRVl9LSR7ZS50b1N0cmluZygpfWApKVxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gISF2KTtcbiAgICByZXR1cm4gY2FjaGVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldEVyYUNhY2hlKGNhY2hlS2V5LCB3aXRoQWN0aXZlLCB2YWx1ZSkge1xuICAgICF3aXRoQWN0aXZlICYmIGRlcml2ZUNhY2hlLnNldChjYWNoZUtleSwgdmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcmFNdWx0aUNhY2hlKENBQ0hFX0tFWSwgd2l0aEFjdGl2ZSwgdmFsdWVzKSB7XG4gICAgIXdpdGhBY3RpdmUgJiYgdmFsdWVzLmZvckVhY2goKHYpID0+IGRlcml2ZUNhY2hlLnNldChgJHtDQUNIRV9LRVl9LSR7di5lcmEudG9TdHJpbmcoKX1gLCB2KSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJDYWNoZWRFcmFzKGVyYXMsIGNhY2hlZCwgcXVlcnkpIHtcbiAgICByZXR1cm4gZXJhc1xuICAgICAgICAubWFwKChlKSA9PiBjYWNoZWQuZmluZCgoeyBlcmEgfSkgPT4gZS5lcShlcmEpKSB8fFxuICAgICAgICBxdWVyeS5maW5kKCh7IGVyYSB9KSA9PiBlLmVxKGVyYSkpKVxuICAgICAgICAuZmlsdGVyKChlKSA9PiAhIWUpO1xufVxuIiwiaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSB0aGUgc3Rha2luZyBvdmVydmlldywgaW5jbHVkaW5nIGVsZWN0ZWQgYW5kIHBvaW50cyBlYXJuZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRQb2ludHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLmRlcml2ZS5zZXNzaW9uLmluZGV4ZXMoKS5waXBlKHN3aXRjaE1hcCgoeyBhY3RpdmVFcmEgfSkgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1Jld2FyZFBvaW50cyhhY3RpdmVFcmEpKSkpO1xufVxuIiwiaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGFycmF5RmxhdHRlbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IERFRkFVTFRfRkxBR1MgPSB7IHdpdGhDb250cm9sbGVyOiB0cnVlLCB3aXRoRXhwb3N1cmU6IHRydWUsIHdpdGhQcmVmczogdHJ1ZSB9O1xuZnVuY3Rpb24gY29tYmluZUFjY291bnRzKG5leHRFbGVjdGVkLCB2YWxpZGF0b3JzKSB7XG4gICAgcmV0dXJuIGFycmF5RmxhdHRlbihbbmV4dEVsZWN0ZWQsIHZhbGlkYXRvcnMuZmlsdGVyKCh2KSA9PiAhbmV4dEVsZWN0ZWQuZmluZCgobikgPT4gbi5lcSh2KSkpXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZWxlY3RlZEluZm8oaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGZsYWdzID0gREVGQVVMVF9GTEFHUywgcGFnZSA9IDApID0+IGFwaS5kZXJpdmUuc3Rha2luZy52YWxpZGF0b3JzKCkucGlwZShzd2l0Y2hNYXAoKHsgbmV4dEVsZWN0ZWQsIHZhbGlkYXRvcnMgfSkgPT4gYXBpLmRlcml2ZS5zdGFraW5nLnF1ZXJ5TXVsdGkoY29tYmluZUFjY291bnRzKG5leHRFbGVjdGVkLCB2YWxpZGF0b3JzKSwgZmxhZ3MsIHBhZ2UpLnBpcGUobWFwKChpbmZvKSA9PiAoe1xuICAgICAgICBpbmZvLFxuICAgICAgICBuZXh0RWxlY3RlZCxcbiAgICAgICAgdmFsaWRhdG9yc1xuICAgIH0pKSkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRFcmFDYWNoZSwgc2V0RXJhQ2FjaGUgfSBmcm9tICcuL2NhY2hlLmpzJztcbmltcG9ydCB7IGNvbWJpbmVFcmFzLCBlcmFzSGlzdG9yaWNBcHBseSwgc2luZ2xlRXJhIH0gZnJvbSAnLi91dGlsLmpzJztcbmNvbnN0IENBQ0hFX0tFWSA9ICdlcmFFeHBvc3VyZSc7XG5mdW5jdGlvbiBtYXBTdGFrZXJzQ2xpcHBlZChlcmEsIHN0YWtlcnMpIHtcbiAgICBjb25zdCBub21pbmF0b3JzID0ge307XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuICAgIHN0YWtlcnMuZm9yRWFjaCgoW2tleSwgZXhwb3N1cmVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcklkID0ga2V5LmFyZ3NbMV0udG9TdHJpbmcoKTtcbiAgICAgICAgdmFsaWRhdG9yc1t2YWxpZGF0b3JJZF0gPSBleHBvc3VyZTtcbiAgICAgICAgZXhwb3N1cmUub3RoZXJzLmZvckVhY2goKHsgd2hvIH0sIHZhbGlkYXRvckluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub21pbmF0b3JJZCA9IHdoby50b1N0cmluZygpO1xuICAgICAgICAgICAgbm9taW5hdG9yc1tub21pbmF0b3JJZF0gPSBub21pbmF0b3JzW25vbWluYXRvcklkXSB8fCBbXTtcbiAgICAgICAgICAgIG5vbWluYXRvcnNbbm9taW5hdG9ySWRdLnB1c2goeyB2YWxpZGF0b3JJZCwgdmFsaWRhdG9ySW5kZXggfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGVyYSwgbm9taW5hdG9ycywgdmFsaWRhdG9ycyB9O1xufVxuZnVuY3Rpb24gbWFwU3Rha2Vyc1BhZ2VkKGVyYSwgc3Rha2Vycykge1xuICAgIGNvbnN0IG5vbWluYXRvcnMgPSB7fTtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0ge307XG4gICAgc3Rha2Vycy5mb3JFYWNoKChba2V5LCBleHBvc3VyZU9wdF0pID0+IHtcbiAgICAgICAgaWYgKGV4cG9zdXJlT3B0LmlzU29tZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ySWQgPSBrZXkuYXJnc1sxXS50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgZXhwb3N1cmUgPSBleHBvc3VyZU9wdC51bndyYXAoKTtcbiAgICAgICAgICAgIHZhbGlkYXRvcnNbdmFsaWRhdG9ySWRdID0gZXhwb3N1cmU7XG4gICAgICAgICAgICBleHBvc3VyZS5vdGhlcnMuZm9yRWFjaCgoeyB3aG8gfSwgdmFsaWRhdG9ySW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub21pbmF0b3JJZCA9IHdoby50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG5vbWluYXRvcnNbbm9taW5hdG9ySWRdID0gbm9taW5hdG9yc1tub21pbmF0b3JJZF0gfHwgW107XG4gICAgICAgICAgICAgICAgbm9taW5hdG9yc1tub21pbmF0b3JJZF0ucHVzaCh7IHZhbGlkYXRvcklkLCB2YWxpZGF0b3JJbmRleCB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgZXJhLCBub21pbmF0b3JzLCB2YWxpZGF0b3JzIH07XG59XG4vKipcbiAqIGVyYXNTdGFrZXJzQ2xpcHBlZCB3aWxsIGJlIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIHdpdGggZXJhc1N0YWtlcnNQYWdlZC4gVGhlcmVmb3JlIHN1cHBvcnQgaXMgZ2l2ZW4gZm9yIGJvdGhcbiAqIHN0b3JhZ2UgcXVlcmllcyB1bnRpbCBlcmFzU3Rha2Vyc0NsaXBwZWQgaGFzIGJlZW4gY29tcGxldGVseSBvdXQgb2YgdXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX2VyYUV4cG9zdXJlKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChlcmEsIHdpdGhBY3RpdmUgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCBbY2FjaGVLZXksIGNhY2hlZF0gPSBnZXRFcmFDYWNoZShDQUNIRV9LRVksIGVyYSwgd2l0aEFjdGl2ZSk7XG4gICAgICAgIHJldHVybiBjYWNoZWRcbiAgICAgICAgICAgID8gb2YoY2FjaGVkKVxuICAgICAgICAgICAgOiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc1BhZ2VkXG4gICAgICAgICAgICAgICAgPyBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc1BhZ2VkLmVudHJpZXMoZXJhKS5waXBlKG1hcCgocikgPT4gc2V0RXJhQ2FjaGUoY2FjaGVLZXksIHdpdGhBY3RpdmUsIG1hcFN0YWtlcnNQYWdlZChlcmEsIHIpKSkpXG4gICAgICAgICAgICAgICAgOiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc0NsaXBwZWQuZW50cmllcyhlcmEpLnBpcGUobWFwKChyKSA9PiBzZXRFcmFDYWNoZShjYWNoZUtleSwgd2l0aEFjdGl2ZSwgbWFwU3Rha2Vyc0NsaXBwZWQoZXJhLCByKSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBlcmFFeHBvc3VyZSA9IC8qI19fUFVSRV9fKi8gc2luZ2xlRXJhKCdfZXJhRXhwb3N1cmUnKTtcbmV4cG9ydCBjb25zdCBfZXJhc0V4cG9zdXJlID0gLyojX19QVVJFX18qLyBjb21iaW5lRXJhcygnX2VyYUV4cG9zdXJlJyk7XG5leHBvcnQgY29uc3QgZXJhc0V4cG9zdXJlID0gLyojX19QVVJFX18qLyBlcmFzSGlzdG9yaWNBcHBseSgnX2VyYXNFeHBvc3VyZScpO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQk5fT05FLCBCTl9aRVJPIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGVyYXNIaXN0b3JpYyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAod2l0aEFjdGl2ZSkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIGFwaS5xdWVyeS5zdGFraW5nLmFjdGl2ZUVyYSgpLFxuICAgICAgICBhcGkuY29uc3RzLnN0YWtpbmcuaGlzdG9yeURlcHRoXG4gICAgICAgICAgICA/IG9mKGFwaS5jb25zdHMuc3Rha2luZy5oaXN0b3J5RGVwdGgpXG4gICAgICAgICAgICA6IGFwaS5xdWVyeS5zdGFraW5nWydoaXN0b3J5RGVwdGgnXSgpXG4gICAgXSkucGlwZShtYXAoKFthY3RpdmVFcmFPcHQsIGhpc3RvcnlEZXB0aF0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IG1heCA9IGhpc3RvcnlEZXB0aC50b051bWJlcigpO1xuICAgICAgICBjb25zdCBhY3RpdmVFcmEgPSBhY3RpdmVFcmFPcHQudW53cmFwT3JEZWZhdWx0KCkuaW5kZXg7XG4gICAgICAgIGxldCBsYXN0RXJhID0gYWN0aXZlRXJhO1xuICAgICAgICB3aGlsZSAobGFzdEVyYS5ndGUoQk5fWkVSTykgJiYgKHJlc3VsdC5sZW5ndGggPCBtYXgpKSB7XG4gICAgICAgICAgICBpZiAoKGxhc3RFcmEgIT09IGFjdGl2ZUVyYSkgfHwgKHdpdGhBY3RpdmUgPT09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0VyYUluZGV4JywgbGFzdEVyYSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdEVyYSA9IGxhc3RFcmEuc3ViKEJOX09ORSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ28gZnJvbSBvbGRlc3QgdG8gbmV3ZXN0XG4gICAgICAgIHJldHVybiByZXN1bHQucmV2ZXJzZSgpO1xuICAgIH0pKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCTl9aRVJPIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZmlsdGVyQ2FjaGVkRXJhcywgZ2V0RXJhTXVsdGlDYWNoZSwgc2V0RXJhTXVsdGlDYWNoZSB9IGZyb20gJy4vY2FjaGUuanMnO1xuaW1wb3J0IHsgZXJhc0hpc3RvcmljQXBwbHksIGZpbHRlckVyYXMgfSBmcm9tICcuL3V0aWwuanMnO1xuY29uc3QgQ0FDSEVfS0VZID0gJ2VyYVBvaW50cyc7XG5mdW5jdGlvbiBtYXBWYWxpZGF0b3JzKHsgaW5kaXZpZHVhbCB9KSB7XG4gICAgcmV0dXJuIFsuLi5pbmRpdmlkdWFsLmVudHJpZXMoKV1cbiAgICAgICAgLmZpbHRlcigoWywgcG9pbnRzXSkgPT4gcG9pbnRzLmd0KEJOX1pFUk8pKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIFt2YWxpZGF0b3JJZCwgcG9pbnRzXSkgPT4ge1xuICAgICAgICByZXN1bHRbdmFsaWRhdG9ySWQudG9TdHJpbmcoKV0gPSBwb2ludHM7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gbWFwUG9pbnRzKGVyYXMsIHBvaW50cykge1xuICAgIHJldHVybiBlcmFzLm1hcCgoZXJhLCBpbmRleCkgPT4gKHtcbiAgICAgICAgZXJhLFxuICAgICAgICBlcmFQb2ludHM6IHBvaW50c1tpbmRleF0udG90YWwsXG4gICAgICAgIHZhbGlkYXRvcnM6IG1hcFZhbGlkYXRvcnMocG9pbnRzW2luZGV4XSlcbiAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX2VyYXNQb2ludHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGVyYXMsIHdpdGhBY3RpdmUpID0+IHtcbiAgICAgICAgaWYgKCFlcmFzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSBnZXRFcmFNdWx0aUNhY2hlKENBQ0hFX0tFWSwgZXJhcywgd2l0aEFjdGl2ZSk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGZpbHRlckVyYXMoZXJhcywgY2FjaGVkKTtcbiAgICAgICAgcmV0dXJuICFyZW1haW5pbmcubGVuZ3RoXG4gICAgICAgICAgICA/IG9mKGNhY2hlZClcbiAgICAgICAgICAgIDogYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1Jld2FyZFBvaW50cy5tdWx0aShyZW1haW5pbmcpLnBpcGUobWFwKChwKSA9PiBmaWx0ZXJDYWNoZWRFcmFzKGVyYXMsIGNhY2hlZCwgc2V0RXJhTXVsdGlDYWNoZShDQUNIRV9LRVksIHdpdGhBY3RpdmUsIG1hcFBvaW50cyhyZW1haW5pbmcsIHApKSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBlcmFzUG9pbnRzID0gLyojX19QVVJFX18qLyBlcmFzSGlzdG9yaWNBcHBseSgnX2VyYXNQb2ludHMnKTtcbiIsImltcG9ydCB7IG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEVyYUNhY2hlLCBzZXRFcmFDYWNoZSB9IGZyb20gJy4vY2FjaGUuanMnO1xuaW1wb3J0IHsgY29tYmluZUVyYXMsIGVyYXNIaXN0b3JpY0FwcGx5LCBzaW5nbGVFcmEgfSBmcm9tICcuL3V0aWwuanMnO1xuY29uc3QgQ0FDSEVfS0VZID0gJ2VyYVByZWZzJztcbmZ1bmN0aW9uIG1hcFByZWZzKGVyYSwgYWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuICAgIGFsbC5mb3JFYWNoKChba2V5LCBwcmVmc10pID0+IHtcbiAgICAgICAgdmFsaWRhdG9yc1trZXkuYXJnc1sxXS50b1N0cmluZygpXSA9IHByZWZzO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGVyYSwgdmFsaWRhdG9ycyB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9lcmFQcmVmcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoZXJhLCB3aXRoQWN0aXZlKSA9PiB7XG4gICAgICAgIGNvbnN0IFtjYWNoZUtleSwgY2FjaGVkXSA9IGdldEVyYUNhY2hlKENBQ0hFX0tFWSwgZXJhLCB3aXRoQWN0aXZlKTtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFxuICAgICAgICAgICAgPyBvZihjYWNoZWQpXG4gICAgICAgICAgICA6IGFwaS5xdWVyeS5zdGFraW5nLmVyYXNWYWxpZGF0b3JQcmVmcy5lbnRyaWVzKGVyYSkucGlwZShtYXAoKHIpID0+IHNldEVyYUNhY2hlKGNhY2hlS2V5LCB3aXRoQWN0aXZlLCBtYXBQcmVmcyhlcmEsIHIpKSkpO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IGVyYVByZWZzID0gLyojX19QVVJFX18qLyBzaW5nbGVFcmEoJ19lcmFQcmVmcycpO1xuZXhwb3J0IGNvbnN0IF9lcmFzUHJlZnMgPSAvKiNfX1BVUkVfXyovIGNvbWJpbmVFcmFzKCdfZXJhUHJlZnMnKTtcbmV4cG9ydCBjb25zdCBlcmFzUHJlZnMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5KCdfZXJhc1ByZWZzJyk7XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJDYWNoZWRFcmFzLCBnZXRFcmFNdWx0aUNhY2hlLCBzZXRFcmFNdWx0aUNhY2hlIH0gZnJvbSAnLi9jYWNoZS5qcyc7XG5pbXBvcnQgeyBlcmFzSGlzdG9yaWNBcHBseSwgZmlsdGVyRXJhcyB9IGZyb20gJy4vdXRpbC5qcyc7XG5jb25zdCBDQUNIRV9LRVkgPSAnZXJhUmV3YXJkcyc7XG5mdW5jdGlvbiBtYXBSZXdhcmRzKGVyYXMsIG9wdFJld2FyZHMpIHtcbiAgICByZXR1cm4gZXJhcy5tYXAoKGVyYSwgaW5kZXgpID0+ICh7XG4gICAgICAgIGVyYSxcbiAgICAgICAgZXJhUmV3YXJkOiBvcHRSZXdhcmRzW2luZGV4XS51bndyYXBPckRlZmF1bHQoKVxuICAgIH0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfZXJhc1Jld2FyZHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGVyYXMsIHdpdGhBY3RpdmUpID0+IHtcbiAgICAgICAgaWYgKCFlcmFzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSBnZXRFcmFNdWx0aUNhY2hlKENBQ0hFX0tFWSwgZXJhcywgd2l0aEFjdGl2ZSk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGZpbHRlckVyYXMoZXJhcywgY2FjaGVkKTtcbiAgICAgICAgaWYgKCFyZW1haW5pbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoY2FjaGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1ZhbGlkYXRvclJld2FyZC5tdWx0aShyZW1haW5pbmcpLnBpcGUobWFwKChyKSA9PiBmaWx0ZXJDYWNoZWRFcmFzKGVyYXMsIGNhY2hlZCwgc2V0RXJhTXVsdGlDYWNoZShDQUNIRV9LRVksIHdpdGhBY3RpdmUsIG1hcFJld2FyZHMocmVtYWluaW5nLCByKSkpKSk7XG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgZXJhc1Jld2FyZHMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5KCdfZXJhc1Jld2FyZHMnKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEVyYUNhY2hlLCBzZXRFcmFDYWNoZSB9IGZyb20gJy4vY2FjaGUuanMnO1xuaW1wb3J0IHsgY29tYmluZUVyYXMsIGVyYXNIaXN0b3JpY0FwcGx5LCBzaW5nbGVFcmEgfSBmcm9tICcuL3V0aWwuanMnO1xuY29uc3QgQ0FDSEVfS0VZID0gJ2VyYVNsYXNoZXMnO1xuZnVuY3Rpb24gbWFwU2xhc2hlcyhlcmEsIG5vbXMsIHZhbHMpIHtcbiAgICBjb25zdCBub21pbmF0b3JzID0ge307XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuICAgIG5vbXMuZm9yRWFjaCgoW2tleSwgb3B0QmFsYW5jZV0pID0+IHtcbiAgICAgICAgbm9taW5hdG9yc1trZXkuYXJnc1sxXS50b1N0cmluZygpXSA9IG9wdEJhbGFuY2UudW53cmFwKCk7XG4gICAgfSk7XG4gICAgdmFscy5mb3JFYWNoKChba2V5LCBvcHRSZXNdKSA9PiB7XG4gICAgICAgIHZhbGlkYXRvcnNba2V5LmFyZ3NbMV0udG9TdHJpbmcoKV0gPSBvcHRSZXMudW53cmFwT3JEZWZhdWx0KClbMV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgZXJhLCBub21pbmF0b3JzLCB2YWxpZGF0b3JzIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX2VyYVNsYXNoZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGVyYSwgd2l0aEFjdGl2ZSkgPT4ge1xuICAgICAgICBjb25zdCBbY2FjaGVLZXksIGNhY2hlZF0gPSBnZXRFcmFDYWNoZShDQUNIRV9LRVksIGVyYSwgd2l0aEFjdGl2ZSk7XG4gICAgICAgIHJldHVybiBjYWNoZWRcbiAgICAgICAgICAgID8gb2YoY2FjaGVkKVxuICAgICAgICAgICAgOiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5ub21pbmF0b3JTbGFzaEluRXJhLmVudHJpZXMoZXJhKSxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy52YWxpZGF0b3JTbGFzaEluRXJhLmVudHJpZXMoZXJhKVxuICAgICAgICAgICAgXSkucGlwZShtYXAoKFtuLCB2XSkgPT4gc2V0RXJhQ2FjaGUoY2FjaGVLZXksIHdpdGhBY3RpdmUsIG1hcFNsYXNoZXMoZXJhLCBuLCB2KSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBlcmFTbGFzaGVzID0gLyojX19QVVJFX18qLyBzaW5nbGVFcmEoJ19lcmFTbGFzaGVzJyk7XG5leHBvcnQgY29uc3QgX2VyYXNTbGFzaGVzID0gLyojX19QVVJFX18qLyBjb21iaW5lRXJhcygnX2VyYVNsYXNoZXMnKTtcbmV4cG9ydCBjb25zdCBlcmFzU2xhc2hlcyA9IC8qI19fUFVSRV9fKi8gZXJhc0hpc3RvcmljQXBwbHkoJ19lcmFzU2xhc2hlcycpO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3VycmVudFBvaW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VsZWN0ZWRJbmZvLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJhc0V4cG9zdXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJhc0hpc3RvcmljLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJhc1BvaW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VyYXNQcmVmcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VyYXNSZXdhcmRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJhc1NsYXNoZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXlzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcnZpZXcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vd25FeHBvc3VyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL293blNsYXNoZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YWtlckV4cG9zdXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2VyUG9pbnRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2VyUHJlZnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFrZXJSZXdhcmRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2VyU2xhc2hlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXNoZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3JzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2FpdGluZ0luZm8uanMnO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIGV4dHJhY3RzSWRzKHN0YXNoSWQsIHF1ZXVlZEtleXMsIG5leHRLZXlzKSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkcyA9IChxdWV1ZWRLZXlzLmZpbmQoKFtjdXJyZW50SWRdKSA9PiBjdXJyZW50SWQuZXEoc3Rhc2hJZCkpIHx8IFt1bmRlZmluZWQsIFtdXSlbMV07XG4gICAgY29uc3QgbmV4dFNlc3Npb25JZHMgPSBuZXh0S2V5cy51bndyYXBPcihbXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dFNlc3Npb25JZHM6IEFycmF5LmlzQXJyYXkobmV4dFNlc3Npb25JZHMpXG4gICAgICAgICAgICA/IG5leHRTZXNzaW9uSWRzXG4gICAgICAgICAgICA6IFsuLi5uZXh0U2Vzc2lvbklkcy52YWx1ZXMoKV0sXG4gICAgICAgIHNlc3Npb25JZHM6IEFycmF5LmlzQXJyYXkoc2Vzc2lvbklkcylcbiAgICAgICAgICAgID8gc2Vzc2lvbklkc1xuICAgICAgICAgICAgOiBbLi4uc2Vzc2lvbklkcy52YWx1ZXMoKV1cbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IGtleXMgPSAvKiNfX1BVUkVfXyovIGZpcnN0TWVtbygoYXBpLCBzdGFzaElkKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcua2V5c011bHRpKFtzdGFzaElkXSkpO1xuZXhwb3J0IGZ1bmN0aW9uIGtleXNNdWx0aShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoc3Rhc2hJZHMpID0+IHN0YXNoSWRzLmxlbmd0aFxuICAgICAgICA/IGFwaS5xdWVyeS5zZXNzaW9uLnF1ZXVlZEtleXMoKS5waXBlKHN3aXRjaE1hcCgocXVldWVkS2V5cykgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBvZihxdWV1ZWRLZXlzKSxcbiAgICAgICAgICAgIGFwaS5jb25zdHNbJ3Nlc3Npb24nXT8uWydkZWR1cEtleVByZWZpeCddXG4gICAgICAgICAgICAgICAgPyBhcGkucXVlcnkuc2Vzc2lvbi5uZXh0S2V5cy5tdWx0aShzdGFzaElkcy5tYXAoKHMpID0+IFthcGkuY29uc3RzWydzZXNzaW9uJ11bJ2RlZHVwS2V5UHJlZml4J10sIHNdKSlcbiAgICAgICAgICAgICAgICA6IGNvbWJpbmVMYXRlc3Qoc3Rhc2hJZHMubWFwKChzKSA9PiBhcGkucXVlcnkuc2Vzc2lvbi5uZXh0S2V5cyhzKSkpXG4gICAgICAgIF0pKSwgbWFwKChbcXVldWVkS2V5cywgbmV4dEtleXNdKSA9PiBzdGFzaElkcy5tYXAoKHN0YXNoSWQsIGluZGV4KSA9PiBleHRyYWN0c0lkcyhzdGFzaElkLCBxdWV1ZWRLZXlzLCBuZXh0S2V5c1tpbmRleF0pKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmUgdGhlIHN0YWtpbmcgb3ZlcnZpZXcsIGluY2x1ZGluZyBlbGVjdGVkIGFuZCBwb2ludHMgZWFybmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVydmlldyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5zZXNzaW9uLmluZGV4ZXMoKSxcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLnZhbGlkYXRvcnMoKVxuICAgIF0pLnBpcGUobWFwKChbaW5kZXhlcywgeyBuZXh0RWxlY3RlZCwgdmFsaWRhdG9ycyB9XSkgPT4gb2JqZWN0U3ByZWFkKHt9LCBpbmRleGVzLCB7XG4gICAgICAgIG5leHRFbGVjdGVkLFxuICAgICAgICB2YWxpZGF0b3JzXG4gICAgfSkpKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCB9IGZyb20gJy4vdXRpbC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gX293bkV4cG9zdXJlcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkLCBlcmFzLCBfd2l0aEFjdGl2ZSwgcGFnZSkgPT4ge1xuICAgICAgICBjb25zdCBlbXB0eVN0YWtpbmdFeHBvc3VyZSA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdFeHBvc3VyZScpO1xuICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IGV4cGxpY2l0bHkgbWFrZSB0aGUgYWN0dWFsIHR5cGVzIGlzIGZvciBjb21wYXRpYmlsaXR5LiBJZiB0aGUgY2hhaW4gZG9lc24ndCBoYXZlIHRoZSBub3RlZCB0eXBlIGl0IHdpbGwgZmFpbFxuICAgICAgICAvLyBvbiBjb25zdHJ1Y3Rpb24uIFRoZXJlZm9yZSB3ZSBqdXN0IG1ha2UgYW4gZW1wdHkgb3B0aW9uLlxuICAgICAgICBjb25zdCBlbXB0eU9wdGlvblBhZ2UgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnT3B0aW9uPE51bGw+Jyk7XG4gICAgICAgIGNvbnN0IGVtcHR5T3B0aW9uTWV0YSA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdPcHRpb248TnVsbD4nKTtcbiAgICAgICAgcmV0dXJuIGVyYXMubGVuZ3RoXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkcyBhbmQgZm9yd2FyZCBjb21wYXQgZm9yIGhpc3RvcmljYWwgaW50ZWdyaXR5IHdoZW4gdXNpbmcgYGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudGBcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc0NsaXBwZWRcbiAgICAgICAgICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KGVyYXMubWFwKChlKSA9PiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc0NsaXBwZWQoZSwgYWNjb3VudElkKSkpXG4gICAgICAgICAgICAgICAgICAgIDogb2YoZXJhcy5tYXAoKF8pID0+IGVtcHR5U3Rha2luZ0V4cG9zdXJlKSksXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KGVyYXMubWFwKChlKSA9PiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2VycyhlLCBhY2NvdW50SWQpKSlcbiAgICAgICAgICAgICAgICAgICAgOiBvZihlcmFzLm1hcCgoXykgPT4gZW1wdHlTdGFraW5nRXhwb3N1cmUpKSxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc1BhZ2VkXG4gICAgICAgICAgICAgICAgICAgID8gY29tYmluZUxhdGVzdChlcmFzLm1hcCgoZSkgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnNQYWdlZChlLCBhY2NvdW50SWQsIHBhZ2UpKSlcbiAgICAgICAgICAgICAgICAgICAgOiBvZihlcmFzLm1hcCgoXykgPT4gZW1wdHlPcHRpb25QYWdlKSksXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnNPdmVydmlld1xuICAgICAgICAgICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoZXJhcy5tYXAoKGUpID0+IGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzT3ZlcnZpZXcoZSwgYWNjb3VudElkKSkpXG4gICAgICAgICAgICAgICAgICAgIDogb2YoZXJhcy5tYXAoKF8pID0+IGVtcHR5T3B0aW9uTWV0YSkpXG4gICAgICAgICAgICBdKS5waXBlKG1hcCgoW2NscCwgZXhwLCBwYWdlZCwgZXhwTWV0YV0pID0+IGVyYXMubWFwKChlcmEsIGluZGV4KSA9PiAoeyBjbGlwcGVkOiBjbHBbaW5kZXhdLCBlcmEsIGV4cG9zdXJlOiBleHBbaW5kZXhdLCBleHBvc3VyZU1ldGE6IGV4cE1ldGFbaW5kZXhdLCBleHBvc3VyZVBhZ2VkOiBwYWdlZFtpbmRleF0gfSkpKSlcbiAgICAgICAgICAgIDogb2YoW10pO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IG93bkV4cG9zdXJlID0gLyojX19QVVJFX18qLyBmaXJzdE1lbW8oKGFwaSwgYWNjb3VudElkLCBlcmEsIHBhZ2UpID0+IGFwaS5kZXJpdmUuc3Rha2luZy5fb3duRXhwb3N1cmVzKGFjY291bnRJZCwgW2VyYV0sIHRydWUsIHBhZ2UgfHwgMCkpO1xuZXhwb3J0IGNvbnN0IG93bkV4cG9zdXJlcyA9IC8qI19fUFVSRV9fKi8gZXJhc0hpc3RvcmljQXBwbHlBY2NvdW50KCdfb3duRXhwb3N1cmVzJyk7XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCB9IGZyb20gJy4vdXRpbC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gX293blNsYXNoZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCwgZXJhcywgX3dpdGhBY3RpdmUpID0+IGVyYXMubGVuZ3RoXG4gICAgICAgID8gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KGVyYXMubWFwKChlKSA9PiBhcGkucXVlcnkuc3Rha2luZy52YWxpZGF0b3JTbGFzaEluRXJhKGUsIGFjY291bnRJZCkpKSxcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoZXJhcy5tYXAoKGUpID0+IGFwaS5xdWVyeS5zdGFraW5nLm5vbWluYXRvclNsYXNoSW5FcmEoZSwgYWNjb3VudElkKSkpXG4gICAgICAgIF0pLnBpcGUobWFwKChbdmFscywgbm9tc10pID0+IGVyYXMubWFwKChlcmEsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgdG90YWw6IHZhbHNbaW5kZXhdLmlzU29tZVxuICAgICAgICAgICAgICAgID8gdmFsc1tpbmRleF0udW53cmFwKClbMV1cbiAgICAgICAgICAgICAgICA6IG5vbXNbaW5kZXhdLnVud3JhcE9yRGVmYXVsdCgpXG4gICAgICAgIH0pKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbmV4cG9ydCBjb25zdCBvd25TbGFzaCA9IC8qI19fUFVSRV9fKi8gZmlyc3RNZW1vKChhcGksIGFjY291bnRJZCwgZXJhKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuX293blNsYXNoZXMoYWNjb3VudElkLCBbZXJhXSwgdHJ1ZSkpO1xuZXhwb3J0IGNvbnN0IG93blNsYXNoZXMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCgnX293blNsYXNoZXMnKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3RNZW1vLCBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5mdW5jdGlvbiByZXdhcmREZXN0aW5hdGlvbkNvbXBhdChyZXdhcmREZXN0aW5hdGlvbikge1xuICAgIC8vIFdlIGVuc3VyZSB0aGUgdHlwZSBpcyBhbiBPcHRpb24gYnkgY2hlY2tpbmcgaWYgaXNTb21lIGlzIGEgYm9vbGVhbi4gV2hlbiBpc1NvbWUgZG9lc24ndCBleGlzdCBpdCB3aWxsIGFsd2F5cyByZXR1cm4gdW5kZWZpbmVkLlxuICAgIHJldHVybiB0eXBlb2YgcmV3YXJkRGVzdGluYXRpb24uaXNTb21lID09PSAnYm9vbGVhbidcbiAgICAgICAgPyByZXdhcmREZXN0aW5hdGlvbi51bndyYXBPcihudWxsKVxuICAgICAgICA6IHJld2FyZERlc3RpbmF0aW9uO1xufVxuZnVuY3Rpb24gZmlsdGVyQ2xhaW1lZFJld2FyZHMoYXBpLCBjbCkge1xuICAgIHJldHVybiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVmVjPHUzMj4nLCBjbC5maWx0ZXIoKGMpID0+IGMgIT09IC0xKSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJSZXdhcmRzKHN0YXNoSWRzLCBlcmFzLCBjbGFpbWVkUmV3YXJkcywgc3Rha2Vyc092ZXJ2aWV3KSB7XG4gICAgY29uc3QgY2xhaW1lZERhdGEgPSB7fTtcbiAgICBjb25zdCBvdmVydmlld0RhdGEgPSB7fTtcbiAgICBjb25zdCBpZHMgPSBzdGFzaElkcy5tYXAoKGkpID0+IGkudG9TdHJpbmcoKSk7XG4gICAgY2xhaW1lZFJld2FyZHMuZm9yRWFjaCgoW2tleXMsIHJld2FyZHNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0ga2V5cy5hcmdzWzFdLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVyYSA9IGtleXMuYXJnc1swXS50b051bWJlcigpO1xuICAgICAgICBpZiAoaWRzLmluY2x1ZGVzKGlkKSkge1xuICAgICAgICAgICAgaWYgKGNsYWltZWREYXRhW2lkXSkge1xuICAgICAgICAgICAgICAgIGNsYWltZWREYXRhW2lkXS5zZXQoZXJhLCByZXdhcmRzLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjbGFpbWVkRGF0YVtpZF0gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgY2xhaW1lZERhdGFbaWRdLnNldChlcmEsIHJld2FyZHMudG9BcnJheSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHN0YWtlcnNPdmVydmlldy5mb3JFYWNoKChba2V5cywgb3ZlcnZpZXddKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0ga2V5cy5hcmdzWzFdLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVyYSA9IGtleXMuYXJnc1swXS50b051bWJlcigpO1xuICAgICAgICBpZiAoaWRzLmluY2x1ZGVzKGlkKSAmJiBvdmVydmlldy5pc1NvbWUpIHtcbiAgICAgICAgICAgIGlmIChvdmVydmlld0RhdGFbaWRdKSB7XG4gICAgICAgICAgICAgICAgb3ZlcnZpZXdEYXRhW2lkXS5zZXQoZXJhLCBvdmVydmlldy51bndyYXAoKS5wYWdlQ291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3ZlcnZpZXdEYXRhW2lkXSA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBvdmVydmlld0RhdGFbaWRdLnNldChlcmEsIG92ZXJ2aWV3LnVud3JhcCgpLnBhZ2VDb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3Rhc2hJZHMubWFwKChpZCkgPT4ge1xuICAgICAgICBjb25zdCByZXdhcmRzUGVyRXJhID0gY2xhaW1lZERhdGFbaWQudG9TdHJpbmcoKV07XG4gICAgICAgIGNvbnN0IG92ZXJ2aWV3UGVyRXJhID0gb3ZlcnZpZXdEYXRhW2lkLnRvU3RyaW5nKCldO1xuICAgICAgICByZXR1cm4gZXJhcy5tYXAoKGVyYSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJld2FyZHNQZXJFcmEgJiYgcmV3YXJkc1BlckVyYS5oYXMoZXJhKSAmJiBvdmVydmlld1BlckVyYSAmJiBvdmVydmlld1BlckVyYS5oYXMoZXJhKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJld2FyZHMgPSByZXdhcmRzUGVyRXJhLmdldChlcmEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IG92ZXJ2aWV3UGVyRXJhLmdldChlcmEpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXdhcmRzLmxlbmd0aCA9PT0gcGFnZUNvdW50LnRvTnVtYmVyKClcbiAgICAgICAgICAgICAgICAgICAgPyBlcmFcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBwYXJzZURldGFpbHMoYXBpLCBzdGFzaElkLCBjb250cm9sbGVySWRPcHQsIG5vbWluYXRvcnNPcHQsIHJld2FyZERlc3RpbmF0aW9uT3B0cywgdmFsaWRhdG9yUHJlZnMsIGV4cG9zdXJlLCBzdGFraW5nTGVkZ2VyT3B0LCBleHBvc3VyZU1ldGEsIGNsYWltZWRSZXdhcmRzLCBleHBvc3VyZUVyYVN0YWtlcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhY2NvdW50SWQ6IHN0YXNoSWQsXG4gICAgICAgIGNsYWltZWRSZXdhcmRzRXJhczogZmlsdGVyQ2xhaW1lZFJld2FyZHMoYXBpLCBjbGFpbWVkUmV3YXJkcyksXG4gICAgICAgIGNvbnRyb2xsZXJJZDogY29udHJvbGxlcklkT3B0Py51bndyYXBPcihudWxsKSB8fCBudWxsLFxuICAgICAgICBleHBvc3VyZUVyYVN0YWtlcnMsXG4gICAgICAgIGV4cG9zdXJlTWV0YSxcbiAgICAgICAgZXhwb3N1cmVQYWdlZDogZXhwb3N1cmUsXG4gICAgICAgIG5vbWluYXRvcnM6IG5vbWluYXRvcnNPcHQuaXNTb21lXG4gICAgICAgICAgICA/IG5vbWluYXRvcnNPcHQudW53cmFwKCkudGFyZ2V0c1xuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgcmV3YXJkRGVzdGluYXRpb246IHJld2FyZERlc3RpbmF0aW9uQ29tcGF0KHJld2FyZERlc3RpbmF0aW9uT3B0cyksXG4gICAgICAgIHN0YWtpbmdMZWRnZXI6IHN0YWtpbmdMZWRnZXJPcHQudW53cmFwT3JEZWZhdWx0KCksXG4gICAgICAgIHN0YXNoSWQsXG4gICAgICAgIHZhbGlkYXRvclByZWZzXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldExlZGdlcnMoYXBpLCBvcHRJZHMsIHsgd2l0aExlZGdlciA9IGZhbHNlIH0pIHtcbiAgICBjb25zdCBpZHMgPSBvcHRJZHNcbiAgICAgICAgLmZpbHRlcigobykgPT4gd2l0aExlZGdlciAmJiAhIW8gJiYgby5pc1NvbWUpXG4gICAgICAgIC5tYXAoKG8pID0+IG8udW53cmFwKCkpO1xuICAgIGNvbnN0IGVtcHR5TGVkID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ09wdGlvbjxTdGFraW5nTGVkZ2VyPicpO1xuICAgIHJldHVybiAoaWRzLmxlbmd0aFxuICAgICAgICA/IGNvbWJpbmVMYXRlc3QoaWRzLm1hcCgocykgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcubGVkZ2VyKHMpKSlcbiAgICAgICAgOiBvZihbXSkpLnBpcGUobWFwKChvcHRMZWRnZXJzKSA9PiB7XG4gICAgICAgIGxldCBvZmZzZXQgPSAtMTtcbiAgICAgICAgcmV0dXJuIG9wdElkcy5tYXAoKG8pID0+IG8gJiYgby5pc1NvbWVcbiAgICAgICAgICAgID8gb3B0TGVkZ2Vyc1srK29mZnNldF0gfHwgZW1wdHlMZWRcbiAgICAgICAgICAgIDogZW1wdHlMZWQpO1xuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIGdldFN0YXNoSW5mbyhhcGksIHN0YXNoSWRzLCBhY3RpdmVFcmEsIHsgd2l0aENsYWltZWRSZXdhcmRzRXJhcywgd2l0aENvbnRyb2xsZXIsIHdpdGhEZXN0aW5hdGlvbiwgd2l0aEV4cG9zdXJlLCB3aXRoRXhwb3N1cmVFcmFzU3Rha2Vyc0xlZ2FjeSwgd2l0aEV4cG9zdXJlTWV0YSwgd2l0aExlZGdlciwgd2l0aE5vbWluYXRpb25zLCB3aXRoUHJlZnMgfSwgcGFnZSkge1xuICAgIGNvbnN0IGVtcHR5Tm9tcyA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdPcHRpb248Tm9taW5hdGlvbnM+Jyk7XG4gICAgY29uc3QgZW1wdHlSZXdhID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1Jld2FyZERlc3RpbmF0aW9uJyk7XG4gICAgY29uc3QgZW1wdHlFeHBvRXJhU3Rha2VycyA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdFeHBvc3VyZScpO1xuICAgIGNvbnN0IGVtcHR5UHJlZnMgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVmFsaWRhdG9yUHJlZnMnKTtcbiAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IGV4cGxpY2l0bHkgbWFrZSB0aGUgYWN0dWFsIHR5cGVzIGlzIGZvciBjb21wYXRpYmlsaXR5LiBJZiB0aGUgY2hhaW4gZG9lc24ndCBoYXZlIHRoZSBub3RlZCB0eXBlIGl0IHdpbGwgZmFpbFxuICAgIC8vIG9uIGNvbnN0cnVjdGlvbi4gVGhlcmVmb3JlIHdlIGp1c3QgbWFrZSBhbiBlbXB0eSBvcHRpb24uXG4gICAgY29uc3QgZW1wdHlFeHBvID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ09wdGlvbjxOdWxsPicpO1xuICAgIGNvbnN0IGVtcHR5RXhwb01ldGEgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnT3B0aW9uPE51bGw+Jyk7XG4gICAgY29uc3QgZW1wdHlDbGFpbWVkUmV3YXJkcyA9IFstMV07XG4gICAgY29uc3QgZGVwdGggPSBOdW1iZXIoYXBpLmNvbnN0cy5zdGFraW5nLmhpc3RvcnlEZXB0aC50b051bWJlcigpKTtcbiAgICBjb25zdCBlcmFzID0gbmV3IEFycmF5KGRlcHRoKS5maWxsKDApLm1hcCgoXywgaWR4KSA9PiB7XG4gICAgICAgIGlmIChpZHggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmVFcmEudG9OdW1iZXIoKSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZUVyYS50b051bWJlcigpIC0gaWR4IC0gMTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHdpdGhDb250cm9sbGVyIHx8IHdpdGhMZWRnZXJcbiAgICAgICAgICAgID8gY29tYmluZUxhdGVzdChzdGFzaElkcy5tYXAoKHMpID0+IGFwaS5xdWVyeS5zdGFraW5nLmJvbmRlZChzKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBudWxsKSksXG4gICAgICAgIHdpdGhOb21pbmF0aW9uc1xuICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KHN0YXNoSWRzLm1hcCgocykgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcubm9taW5hdG9ycyhzKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBlbXB0eU5vbXMpKSxcbiAgICAgICAgd2l0aERlc3RpbmF0aW9uXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3Qoc3Rhc2hJZHMubWFwKChzKSA9PiBhcGkucXVlcnkuc3Rha2luZy5wYXllZShzKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBlbXB0eVJld2EpKSxcbiAgICAgICAgd2l0aFByZWZzXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3Qoc3Rhc2hJZHMubWFwKChzKSA9PiBhcGkucXVlcnkuc3Rha2luZy52YWxpZGF0b3JzKHMpKSlcbiAgICAgICAgICAgIDogb2Yoc3Rhc2hJZHMubWFwKCgpID0+IGVtcHR5UHJlZnMpKSxcbiAgICAgICAgd2l0aEV4cG9zdXJlICYmIGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzUGFnZWRcbiAgICAgICAgICAgID8gY29tYmluZUxhdGVzdChzdGFzaElkcy5tYXAoKHMpID0+IGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzUGFnZWQoYWN0aXZlRXJhLCBzLCBwYWdlKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBlbXB0eUV4cG8pKSxcbiAgICAgICAgd2l0aEV4cG9zdXJlTWV0YSAmJiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc092ZXJ2aWV3XG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3Qoc3Rhc2hJZHMubWFwKChzKSA9PiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc092ZXJ2aWV3KGFjdGl2ZUVyYSwgcykpKVxuICAgICAgICAgICAgOiBvZihzdGFzaElkcy5tYXAoKCkgPT4gZW1wdHlFeHBvTWV0YSkpLFxuICAgICAgICB3aXRoQ2xhaW1lZFJld2FyZHNFcmFzICYmIGFwaS5xdWVyeS5zdGFraW5nLmNsYWltZWRSZXdhcmRzXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5zdGFraW5nLmNsYWltZWRSZXdhcmRzLmVudHJpZXMoKSxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc092ZXJ2aWV3LmVudHJpZXMoKVxuICAgICAgICAgICAgXSkucGlwZShtYXAoKFtyZXdhcmRzU3RvcmFnZVZlYywgb3ZlcnZpZXdTdG9yYWdlVmVjXSkgPT4gZmlsdGVyUmV3YXJkcyhzdGFzaElkcywgZXJhcywgcmV3YXJkc1N0b3JhZ2VWZWMsIG92ZXJ2aWV3U3RvcmFnZVZlYykpKVxuICAgICAgICAgICAgOiBvZihzdGFzaElkcy5tYXAoKCkgPT4gZW1wdHlDbGFpbWVkUmV3YXJkcykpLFxuICAgICAgICB3aXRoRXhwb3N1cmVFcmFzU3Rha2Vyc0xlZ2FjeSAmJiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc1xuICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KHN0YXNoSWRzLm1hcCgocykgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnMoYWN0aXZlRXJhLCBzKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBlbXB0eUV4cG9FcmFTdGFrZXJzKSlcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIGdldEJhdGNoKGFwaSwgYWN0aXZlRXJhLCBzdGFzaElkcywgZmxhZ3MsIHBhZ2UpIHtcbiAgICByZXR1cm4gZ2V0U3Rhc2hJbmZvKGFwaSwgc3Rhc2hJZHMsIGFjdGl2ZUVyYSwgZmxhZ3MsIHBhZ2UpLnBpcGUoc3dpdGNoTWFwKChbY29udHJvbGxlcklkT3B0LCBub21pbmF0b3JzT3B0LCByZXdhcmREZXN0aW5hdGlvbiwgdmFsaWRhdG9yUHJlZnMsIGV4cG9zdXJlLCBleHBvc3VyZU1ldGEsIGNsYWltZWRSZXdhcmRzRXJhcywgZXhwb3N1cmVFcmFTdGFrZXJzXSkgPT4gZ2V0TGVkZ2VycyhhcGksIGNvbnRyb2xsZXJJZE9wdCwgZmxhZ3MpLnBpcGUobWFwKChzdGFraW5nTGVkZ2VyT3B0cykgPT4gc3Rhc2hJZHMubWFwKChzdGFzaElkLCBpbmRleCkgPT4gcGFyc2VEZXRhaWxzKGFwaSwgc3Rhc2hJZCwgY29udHJvbGxlcklkT3B0W2luZGV4XSwgbm9taW5hdG9yc09wdFtpbmRleF0sIHJld2FyZERlc3RpbmF0aW9uW2luZGV4XSwgdmFsaWRhdG9yUHJlZnNbaW5kZXhdLCBleHBvc3VyZVtpbmRleF0sIHN0YWtpbmdMZWRnZXJPcHRzW2luZGV4XSwgZXhwb3N1cmVNZXRhW2luZGV4XSwgY2xhaW1lZFJld2FyZHNFcmFzW2luZGV4XSwgZXhwb3N1cmVFcmFTdGFrZXJzW2luZGV4XSkpKSkpKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZyb20gYSBzdGFzaCwgcmV0cmlldmUgdGhlIGNvbnRyb2xsZXJJZCBhbmQgYWxsIHJlbGV2YW50IGRldGFpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5ID0gLyojX19QVVJFX18qLyBmaXJzdE1lbW8oKGFwaSwgYWNjb3VudElkLCBmbGFncywgcGFnZSkgPT4gYXBpLmRlcml2ZS5zdGFraW5nLnF1ZXJ5TXVsdGkoW2FjY291bnRJZF0sIGZsYWdzLCBwYWdlKSk7XG5leHBvcnQgZnVuY3Rpb24gcXVlcnlNdWx0aShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkcywgZmxhZ3MsIHBhZ2UpID0+IGFwaS5kZXJpdmUuc2Vzc2lvbi5pbmRleGVzKCkucGlwZShzd2l0Y2hNYXAoKHsgYWN0aXZlRXJhIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc3Rhc2hJZHMgPSBhY2NvdW50SWRzLm1hcCgoYSkgPT4gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0FjY291bnRJZCcsIGEpKTtcbiAgICAgICAgY29uc3QgcCA9IHBhZ2UgfHwgMDtcbiAgICAgICAgcmV0dXJuIHN0YXNoSWRzLmxlbmd0aFxuICAgICAgICAgICAgPyBnZXRCYXRjaChhcGksIGFjdGl2ZUVyYSwgc3Rhc2hJZHMsIGZsYWdzLCBwKVxuICAgICAgICAgICAgOiBvZihbXSk7XG4gICAgfSkpKTtcbn1cbiIsImltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBfc3Rha2VyRXhwb3N1cmVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWRzLCBlcmFzLCB3aXRoQWN0aXZlID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3Qgc3Rha2VySWRzID0gYWNjb3VudElkcy5tYXAoKGEpID0+IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdBY2NvdW50SWQnLCBhKS50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuc3Rha2luZy5fZXJhc0V4cG9zdXJlKGVyYXMsIHdpdGhBY3RpdmUpLnBpcGUobWFwKChleHBvc3VyZXMpID0+IHN0YWtlcklkcy5tYXAoKHN0YWtlcklkKSA9PiBleHBvc3VyZXMubWFwKCh7IGVyYSwgbm9taW5hdG9yczogYWxsTm9taW5hdG9ycywgdmFsaWRhdG9yczogYWxsVmFsaWRhdG9ycyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkYXRvciA9ICEhYWxsVmFsaWRhdG9yc1tzdGFrZXJJZF07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0ge307XG4gICAgICAgICAgICBjb25zdCBub21pbmF0aW5nID0gYWxsTm9taW5hdG9yc1tzdGFrZXJJZF0gfHwgW107XG4gICAgICAgICAgICBpZiAoaXNWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzW3N0YWtlcklkXSA9IGFsbFZhbGlkYXRvcnNbc3Rha2VySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9taW5hdGluZykge1xuICAgICAgICAgICAgICAgIG5vbWluYXRpbmcuZm9yRWFjaCgoeyB2YWxpZGF0b3JJZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbdmFsaWRhdG9ySWRdID0gYWxsVmFsaWRhdG9yc1t2YWxpZGF0b3JJZF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBlcmEsIGlzRW1wdHk6ICFPYmplY3Qua2V5cyh2YWxpZGF0b3JzKS5sZW5ndGgsIGlzVmFsaWRhdG9yLCBub21pbmF0aW5nLCB2YWxpZGF0b3JzIH07XG4gICAgICAgIH0pKSkpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0YWtlckV4cG9zdXJlcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkcywgd2l0aEFjdGl2ZSA9IGZhbHNlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuZXJhc0hpc3RvcmljKHdpdGhBY3RpdmUpLnBpcGUoc3dpdGNoTWFwKChlcmFzKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuX3N0YWtlckV4cG9zdXJlcyhhY2NvdW50SWRzLCBlcmFzLCB3aXRoQWN0aXZlKSkpKTtcbn1cbmV4cG9ydCBjb25zdCBzdGFrZXJFeHBvc3VyZSA9IC8qI19fUFVSRV9fKi8gZmlyc3RNZW1vKChhcGksIGFjY291bnRJZCwgd2l0aEFjdGl2ZSkgPT4gYXBpLmRlcml2ZS5zdGFraW5nLnN0YWtlckV4cG9zdXJlcyhbYWNjb3VudElkXSwgd2l0aEFjdGl2ZSkpO1xuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBlcmFzSGlzdG9yaWNBcHBseUFjY291bnQgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFrZXJQb2ludHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCwgZXJhcywgd2l0aEFjdGl2ZSkgPT4ge1xuICAgICAgICBjb25zdCBzdGFrZXJJZCA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdBY2NvdW50SWQnLCBhY2NvdW50SWQpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBhcGkuZGVyaXZlLnN0YWtpbmcuX2VyYXNQb2ludHMoZXJhcywgd2l0aEFjdGl2ZSkucGlwZShtYXAoKHBvaW50cykgPT4gcG9pbnRzLm1hcCgoeyBlcmEsIGVyYVBvaW50cywgdmFsaWRhdG9ycyB9KSA9PiAoe1xuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgZXJhUG9pbnRzLFxuICAgICAgICAgICAgcG9pbnRzOiB2YWxpZGF0b3JzW3N0YWtlcklkXSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnUmV3YXJkUG9pbnQnKVxuICAgICAgICB9KSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBzdGFrZXJQb2ludHMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCgnX3N0YWtlclBvaW50cycpO1xuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBlcmFzSGlzdG9yaWNBcHBseUFjY291bnQgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFrZXJQcmVmcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkLCBlcmFzLCBfd2l0aEFjdGl2ZSkgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1ZhbGlkYXRvclByZWZzLm11bHRpKGVyYXMubWFwKChlKSA9PiBbZSwgYWNjb3VudElkXSkpLnBpcGUobWFwKChhbGwpID0+IGFsbC5tYXAoKHZhbGlkYXRvclByZWZzLCBpbmRleCkgPT4gKHtcbiAgICAgICAgZXJhOiBlcmFzW2luZGV4XSxcbiAgICAgICAgdmFsaWRhdG9yUHJlZnNcbiAgICB9KSkpKSk7XG59XG5leHBvcnQgY29uc3Qgc3Rha2VyUHJlZnMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCgnX3N0YWtlclByZWZzJyk7XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJOX0JJTExJT04sIEJOX1pFUk8sIG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGZpcnN0TWVtbywgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gZXh0cmFjdENvbXBhdFJld2FyZHMoY2xhaW1lZFJld2FyZHNFcmFzLCBsZWRnZXIpIHtcbiAgICBjb25zdCBsID0gbGVkZ2VyXG4gICAgICAgID8gKGxlZGdlci5sZWdhY3lDbGFpbWVkUmV3YXJkcyB8fFxuICAgICAgICAgICAgbGVkZ2VyLmNsYWltZWRSZXdhcmRzKS50b0FycmF5KClcbiAgICAgICAgOiBbXTtcbiAgICByZXR1cm4gY2xhaW1lZFJld2FyZHNFcmFzLnRvQXJyYXkoKS5jb25jYXQobCk7XG59XG5mdW5jdGlvbiBwYXJzZVJld2FyZHMoYXBpLCBzdGFzaElkLCBbZXJhc1BvaW50cywgZXJhc1ByZWZzLCBlcmFzUmV3YXJkc10sIGV4cG9zdXJlcykge1xuICAgIHJldHVybiBleHBvc3VyZXMubWFwKCh7IGVyYSwgaXNFbXB0eSwgaXNWYWxpZGF0b3IsIG5vbWluYXRpbmcsIHZhbGlkYXRvcnM6IGVyYVZhbGlkYXRvcnMgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVyYVBvaW50cywgdmFsaWRhdG9yczogYWxsVmFsUG9pbnRzIH0gPSBlcmFzUG9pbnRzLmZpbmQoKHApID0+IHAuZXJhLmVxKGVyYSkpIHx8IHsgZXJhUG9pbnRzOiBCTl9aRVJPLCB2YWxpZGF0b3JzOiB7fSB9O1xuICAgICAgICBjb25zdCB7IGVyYVJld2FyZCB9ID0gZXJhc1Jld2FyZHMuZmluZCgocikgPT4gci5lcmEuZXEoZXJhKSkgfHwgeyBlcmFSZXdhcmQ6IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJykgfTtcbiAgICAgICAgY29uc3QgeyB2YWxpZGF0b3JzOiBhbGxWYWxQcmVmcyB9ID0gZXJhc1ByZWZzLmZpbmQoKHApID0+IHAuZXJhLmVxKGVyYSkpIHx8IHsgdmFsaWRhdG9yczoge30gfTtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuICAgICAgICBjb25zdCBzdGFrZXJJZCA9IHN0YXNoSWQudG9TdHJpbmcoKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZXJhVmFsaWRhdG9ycykuZm9yRWFjaCgoW3ZhbGlkYXRvcklkLCBleHBvc3VyZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbFBvaW50cyA9IGFsbFZhbFBvaW50c1t2YWxpZGF0b3JJZF0gfHwgQk5fWkVSTztcbiAgICAgICAgICAgIGNvbnN0IHZhbENvbW0gPSBhbGxWYWxQcmVmc1t2YWxpZGF0b3JJZF0/LmNvbW1pc3Npb24udW53cmFwKCkgfHwgQk5fWkVSTztcbiAgICAgICAgICAgIGNvbnN0IGV4cFRvdGFsID0gZXhwb3N1cmUudG90YWxcbiAgICAgICAgICAgICAgICA/IGV4cG9zdXJlLnRvdGFsPy51bndyYXAoKVxuICAgICAgICAgICAgICAgIDogZXhwb3N1cmUucGFnZVRvdGFsXG4gICAgICAgICAgICAgICAgICAgID8gZXhwb3N1cmUucGFnZVRvdGFsPy51bndyYXAoKVxuICAgICAgICAgICAgICAgICAgICA6IEJOX1pFUk87XG4gICAgICAgICAgICBsZXQgYXZhaWwgPSBCTl9aRVJPO1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCEoZXhwVG90YWwuaXNaZXJvKCkgfHwgdmFsUG9pbnRzLmlzWmVybygpIHx8IGVyYVBvaW50cy5pc1plcm8oKSkpIHtcbiAgICAgICAgICAgICAgICBhdmFpbCA9IGVyYVJld2FyZC5tdWwodmFsUG9pbnRzKS5kaXYoZXJhUG9pbnRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxDdXQgPSB2YWxDb21tLm11bChhdmFpbCkuZGl2KEJOX0JJTExJT04pO1xuICAgICAgICAgICAgICAgIGxldCBzdGFrZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcklkID09PSBzdGFrZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3N1cmUub3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFrZWQgPSBleHBvc3VyZS5vd24udW53cmFwKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBBY2NvdW50ID0gZXhwb3N1cmUub3RoZXJzLmZpbmQoKHsgd2hvIH0pID0+IHdoby5lcSh2YWxpZGF0b3JJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VkID0gZXhwQWNjb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXhwQWNjb3VudC52YWx1ZS51bndyYXAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQk5fWkVSTztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rha2VyRXhwID0gZXhwb3N1cmUub3RoZXJzLmZpbmQoKHsgd2hvIH0pID0+IHdoby5lcShzdGFrZXJJZCkpO1xuICAgICAgICAgICAgICAgICAgICBzdGFrZWQgPSBzdGFrZXJFeHBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3Rha2VyRXhwLnZhbHVlLnVud3JhcCgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEJOX1pFUk87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlID0gYXZhaWwuc3ViKHZhbEN1dCkuaW11bChzdGFrZWQpLmRpdihleHBUb3RhbCkuaWFkZCh2YWxpZGF0b3JJZCA9PT0gc3Rha2VySWQgPyB2YWxDdXQgOiBCTl9aRVJPKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRvcnNbdmFsaWRhdG9ySWRdID0ge1xuICAgICAgICAgICAgICAgIHRvdGFsOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScsIGF2YWlsKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnLCB2YWx1ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgZXJhUmV3YXJkLFxuICAgICAgICAgICAgaXNFbXB0eSxcbiAgICAgICAgICAgIGlzVmFsaWRhdG9yLFxuICAgICAgICAgICAgbm9taW5hdGluZyxcbiAgICAgICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFsbFVuaXFWYWxpZGF0b3JzKHJld2FyZHMpIHtcbiAgICByZXR1cm4gcmV3YXJkcy5yZWR1Y2UoKFthbGwsIHBlclN0YXNoXSwgcmV3YXJkcykgPT4ge1xuICAgICAgICBjb25zdCB1bmlxID0gW107XG4gICAgICAgIHBlclN0YXNoLnB1c2godW5pcSk7XG4gICAgICAgIHJld2FyZHMuZm9yRWFjaCgoeyB2YWxpZGF0b3JzIH0pID0+IE9iamVjdC5rZXlzKHZhbGlkYXRvcnMpLmZvckVhY2goKHZhbGlkYXRvcklkKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXVuaXEuaW5jbHVkZXModmFsaWRhdG9ySWQpKSB7XG4gICAgICAgICAgICAgICAgdW5pcS5wdXNoKHZhbGlkYXRvcklkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbC5pbmNsdWRlcyh2YWxpZGF0b3JJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsLnB1c2godmFsaWRhdG9ySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gW2FsbCwgcGVyU3Rhc2hdO1xuICAgIH0sIFtbXSwgW11dKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNsYWltZWQodmFsaWRhdG9ycywgcXVlcnlWYWxpZGF0b3JzLCByZXdhcmQsIGNsYWltZWRSZXdhcmRzRXJhcykge1xuICAgIGNvbnN0IHJtID0gW107XG4gICAgT2JqZWN0LmtleXMocmV3YXJkLnZhbGlkYXRvcnMpLmZvckVhY2goKHZhbGlkYXRvcklkKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdmFsaWRhdG9ycy5pbmRleE9mKHZhbGlkYXRvcklkKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgdmFsTGVkZ2VyID0gcXVlcnlWYWxpZGF0b3JzW2luZGV4XS5zdGFraW5nTGVkZ2VyO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RDb21wYXRSZXdhcmRzKGNsYWltZWRSZXdhcmRzRXJhcywgdmFsTGVkZ2VyKS5zb21lKChlKSA9PiByZXdhcmQuZXJhLmVxKGUpKSkge1xuICAgICAgICAgICAgICAgIHJtLnB1c2godmFsaWRhdG9ySWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcm0uZm9yRWFjaCgodmFsaWRhdG9ySWQpID0+IHtcbiAgICAgICAgZGVsZXRlIHJld2FyZC52YWxpZGF0b3JzW3ZhbGlkYXRvcklkXTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZpbHRlclJld2FyZHMoZXJhcywgdmFsSW5mbywgeyBjbGFpbWVkUmV3YXJkc0VyYXMsIHJld2FyZHMsIHN0YWtpbmdMZWRnZXIgfSkge1xuICAgIGNvbnN0IGZpbHRlciA9IGVyYXMuZmlsdGVyKChlKSA9PiAhZXh0cmFjdENvbXBhdFJld2FyZHMoY2xhaW1lZFJld2FyZHNFcmFzLCBzdGFraW5nTGVkZ2VyKS5zb21lKChzKSA9PiBzLmVxKGUpKSk7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHZhbEluZm8ubWFwKChbdl0pID0+IHYpO1xuICAgIGNvbnN0IHF1ZXJ5VmFsaWRhdG9ycyA9IHZhbEluZm8ubWFwKChbLCBxXSkgPT4gcSk7XG4gICAgcmV0dXJuIHJld2FyZHNcbiAgICAgICAgLmZpbHRlcigoeyBpc0VtcHR5IH0pID0+ICFpc0VtcHR5KVxuICAgICAgICAuZmlsdGVyKChyZXdhcmQpID0+IHtcbiAgICAgICAgaWYgKCFmaWx0ZXIuc29tZSgoZSkgPT4gcmV3YXJkLmVyYS5lcShlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVDbGFpbWVkKHZhbGlkYXRvcnMsIHF1ZXJ5VmFsaWRhdG9ycywgcmV3YXJkLCBjbGFpbWVkUmV3YXJkc0VyYXMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKCh7IHZhbGlkYXRvcnMgfSkgPT4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoICE9PSAwKVxuICAgICAgICAubWFwKChyZXdhcmQpID0+IG9iamVjdFNwcmVhZCh7fSwgcmV3YXJkLCB7XG4gICAgICAgIG5vbWluYXRvcnM6IHJld2FyZC5ub21pbmF0aW5nLmZpbHRlcigobikgPT4gcmV3YXJkLnZhbGlkYXRvcnNbbi52YWxpZGF0b3JJZF0pXG4gICAgfSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9zdGFrZXJSZXdhcmRzRXJhcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoZXJhcywgd2l0aEFjdGl2ZSA9IGZhbHNlKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLl9lcmFzUG9pbnRzKGVyYXMsIHdpdGhBY3RpdmUpLFxuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcuX2VyYXNQcmVmcyhlcmFzLCB3aXRoQWN0aXZlKSxcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLl9lcmFzUmV3YXJkcyhlcmFzLCB3aXRoQWN0aXZlKVxuICAgIF0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfc3Rha2VyUmV3YXJkcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkcywgZXJhcywgd2l0aEFjdGl2ZSA9IGZhbHNlKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLnF1ZXJ5TXVsdGkoYWNjb3VudElkcywgeyB3aXRoQ2xhaW1lZFJld2FyZHNFcmFzOiB0cnVlLCB3aXRoTGVkZ2VyOiB0cnVlIH0pLFxuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcuX3N0YWtlckV4cG9zdXJlcyhhY2NvdW50SWRzLCBlcmFzLCB3aXRoQWN0aXZlKSxcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLl9zdGFrZXJSZXdhcmRzRXJhcyhlcmFzLCB3aXRoQWN0aXZlKVxuICAgIF0pLnBpcGUoc3dpdGNoTWFwKChbcXVlcmllcywgZXhwb3N1cmVzLCBlcmFzUmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxSZXdhcmRzID0gcXVlcmllcy5tYXAoKHsgY2xhaW1lZFJld2FyZHNFcmFzLCBzdGFraW5nTGVkZ2VyLCBzdGFzaElkIH0sIGluZGV4KSA9PiAoIXN0YXNoSWQgfHwgKCFzdGFraW5nTGVkZ2VyICYmICFjbGFpbWVkUmV3YXJkc0VyYXMpKVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiBwYXJzZVJld2FyZHMoYXBpLCBzdGFzaElkLCBlcmFzUmVzdWx0LCBleHBvc3VyZXNbaW5kZXhdKSk7XG4gICAgICAgIGlmICh3aXRoQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoYWxsUmV3YXJkcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2FsbFZhbGlkYXRvcnMsIHN0YXNoVmFsaWRhdG9yc10gPSBhbGxVbmlxVmFsaWRhdG9ycyhhbGxSZXdhcmRzKTtcbiAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuc3Rha2luZy5xdWVyeU11bHRpKGFsbFZhbGlkYXRvcnMsIHsgd2l0aENsYWltZWRSZXdhcmRzRXJhczogdHJ1ZSwgd2l0aExlZGdlcjogdHJ1ZSB9KS5waXBlKG1hcCgocXVlcmllZFZhbHMpID0+IHF1ZXJpZXMubWFwKCh7IGNsYWltZWRSZXdhcmRzRXJhcywgc3Rha2luZ0xlZGdlciB9LCBpbmRleCkgPT4gZmlsdGVyUmV3YXJkcyhlcmFzLCBzdGFzaFZhbGlkYXRvcnNbaW5kZXhdXG4gICAgICAgICAgICAubWFwKCh2YWxpZGF0b3JJZCkgPT4gW1xuICAgICAgICAgICAgdmFsaWRhdG9ySWQsXG4gICAgICAgICAgICBxdWVyaWVkVmFscy5maW5kKChxKSA9PiBxLmFjY291bnRJZC5lcSh2YWxpZGF0b3JJZCkpXG4gICAgICAgIF0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2KSA9PiAhIXZbMV0pLCB7XG4gICAgICAgICAgICBjbGFpbWVkUmV3YXJkc0VyYXMsXG4gICAgICAgICAgICByZXdhcmRzOiBhbGxSZXdhcmRzW2luZGV4XSxcbiAgICAgICAgICAgIHN0YWtpbmdMZWRnZXJcbiAgICAgICAgfSkpKSk7XG4gICAgfSkpKTtcbn1cbmV4cG9ydCBjb25zdCBzdGFrZXJSZXdhcmRzID0gLyojX19QVVJFX18qLyBmaXJzdE1lbW8oKGFwaSwgYWNjb3VudElkLCB3aXRoQWN0aXZlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuZXJhc0hpc3RvcmljKHdpdGhBY3RpdmUpLnBpcGUoc3dpdGNoTWFwKChlcmFzKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuX3N0YWtlclJld2FyZHMoW2FjY291bnRJZF0sIGVyYXMsIHdpdGhBY3RpdmUpKSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHN0YWtlclJld2FyZHNNdWx0aUVyYXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZHMsIGVyYXMpID0+IGFjY291bnRJZHMubGVuZ3RoICYmIGVyYXMubGVuZ3RoXG4gICAgICAgID8gYXBpLmRlcml2ZS5zdGFraW5nLl9zdGFrZXJSZXdhcmRzKGFjY291bnRJZHMsIGVyYXMsIGZhbHNlKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gc3Rha2VyUmV3YXJkc011bHRpKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWRzLCB3aXRoQWN0aXZlID0gZmFsc2UpID0+IGFwaS5kZXJpdmUuc3Rha2luZy5lcmFzSGlzdG9yaWMod2l0aEFjdGl2ZSkucGlwZShzd2l0Y2hNYXAoKGVyYXMpID0+IGFwaS5kZXJpdmUuc3Rha2luZy5zdGFrZXJSZXdhcmRzTXVsdGlFcmFzKGFjY291bnRJZHMsIGVyYXMpKSkpO1xufVxuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBlcmFzSGlzdG9yaWNBcHBseUFjY291bnQgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFrZXJTbGFzaGVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWQsIGVyYXMsIHdpdGhBY3RpdmUpID0+IHtcbiAgICAgICAgY29uc3Qgc3Rha2VySWQgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudElkJywgYWNjb3VudElkKS50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4gYXBpLmRlcml2ZS5zdGFraW5nLl9lcmFzU2xhc2hlcyhlcmFzLCB3aXRoQWN0aXZlKS5waXBlKG1hcCgoc2xhc2hlcykgPT4gc2xhc2hlcy5tYXAoKHsgZXJhLCBub21pbmF0b3JzLCB2YWxpZGF0b3JzIH0pID0+ICh7XG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b3RhbDogbm9taW5hdG9yc1tzdGFrZXJJZF0gfHwgdmFsaWRhdG9yc1tzdGFrZXJJZF0gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKVxuICAgICAgICB9KSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBzdGFrZXJTbGFzaGVzID0gLyojX19QVVJFX18qLyBlcmFzSGlzdG9yaWNBcHBseUFjY291bnQoJ19zdGFrZXJTbGFzaGVzJyk7XG4iLCJpbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkcnIsIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIG9uQm9uZGVkRXZlbnQoYXBpKSB7XG4gICAgbGV0IGN1cnJlbnQgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBhcGkucXVlcnkuc3lzdGVtLmV2ZW50cygpLnBpcGUobWFwKChldmVudHMpID0+IHtcbiAgICAgICAgY3VycmVudCA9IGV2ZW50cy5maWx0ZXIoKHsgZXZlbnQsIHBoYXNlIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBoYXNlLmlzQXBwbHlFeHRyaW5zaWMgJiZcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2VjdGlvbiA9PT0gJ3N0YWtpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGhvZCA9PT0gJ0JvbmRlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgPyBEYXRlLm5vdygpXG4gICAgICAgICAgICA6IGN1cnJlbnQ7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pLCBzdGFydFdpdGgoY3VycmVudCksIGRycih7IHNraXBUaW1lb3V0OiB0cnVlIH0pKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlIHRoZSBsaXN0IG9mIGFsbCB2YWxpZGF0b3Igc3Rhc2hlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3Rhc2hlcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBvbkJvbmRlZEV2ZW50KGFwaSkucGlwZShzd2l0Y2hNYXAoKCkgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcudmFsaWRhdG9ycy5rZXlzKCkpLCBtYXAoKGtleXMpID0+IGtleXMubWFwKCh7IGFyZ3M6IFt2XSB9KSA9PiB2KS5maWx0ZXIoKGEpID0+IGEpKSkpO1xufVxuIiwiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXJyYXlDaHVuaywgYXJyYXlGbGF0dGVuLCBuZXh0VGljayB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IEVSQV9DSFVOS19TSVpFID0gMTQ7XG5mdW5jdGlvbiBjaHVua0VyYXMoZXJhcywgZm4pIHtcbiAgICBjb25zdCBjaHVua2VkID0gYXJyYXlDaHVuayhlcmFzLCBFUkFfQ0hVTktfU0laRSk7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChjaHVua2VkW2luZGV4XSk7XG4gICAgcmV0dXJuIHN1YmplY3QucGlwZShzd2l0Y2hNYXAoZm4pLCB0YXAoKCkgPT4ge1xuICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaW5kZXggPT09IGNodW5rZWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBzdWJqZWN0LmNvbXBsZXRlKClcbiAgICAgICAgICAgICAgICA6IHN1YmplY3QubmV4dChjaHVua2VkW2luZGV4XSk7XG4gICAgICAgIH0pO1xuICAgIH0pLCB0b0FycmF5KCksIG1hcChhcnJheUZsYXR0ZW4pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJFcmFzKGVyYXMsIGxpc3QpIHtcbiAgICByZXR1cm4gZXJhcy5maWx0ZXIoKGUpID0+ICFsaXN0LnNvbWUoKHsgZXJhIH0pID0+IGUuZXEoZXJhKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVyYXNIaXN0b3JpY0FwcGx5KGZuKSB7XG4gICAgcmV0dXJuIChpbnN0YW5jZUlkLCBhcGkpID0+IFxuICAgIC8vIENhbm5vdCBxdWl0ZSBnZXQgdGhlIHR5cGluZyByaWdodCwgYnV0IGl0IGlzIHJpZ2h0IGluIHRoZSBjb2RlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgbWVtbyhpbnN0YW5jZUlkLCAod2l0aEFjdGl2ZSA9IGZhbHNlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuZXJhc0hpc3RvcmljKHdpdGhBY3RpdmUpLnBpcGUoc3dpdGNoTWFwKChlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmdbZm5dKGUsIHdpdGhBY3RpdmUpKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudChmbikge1xuICAgIHJldHVybiAoaW5zdGFuY2VJZCwgYXBpKSA9PiBcbiAgICAvLyBDYW5ub3QgcXVpdGUgZ2V0IHRoZSB0eXBpbmcgcmlnaHQsIGJ1dCBpdCBpcyByaWdodCBpbiB0aGUgY29kZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCwgd2l0aEFjdGl2ZSA9IGZhbHNlLCBwYWdlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuZXJhc0hpc3RvcmljKHdpdGhBY3RpdmUpLnBpcGUoc3dpdGNoTWFwKChlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmdbZm5dKGFjY291bnRJZCwgZSwgd2l0aEFjdGl2ZSwgcGFnZSB8fCAwKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaW5nbGVFcmEoZm4pIHtcbiAgICByZXR1cm4gKGluc3RhbmNlSWQsIGFwaSkgPT4gXG4gICAgLy8gQ2Fubm90IHF1aXRlIGdldCB0aGUgdHlwaW5nIHJpZ2h0LCBidXQgaXQgaXMgcmlnaHQgaW4gdGhlIGNvZGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICBtZW1vKGluc3RhbmNlSWQsIChlcmEpID0+IGFwaS5kZXJpdmUuc3Rha2luZ1tmbl0oZXJhLCB0cnVlKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUVyYXMoZm4pIHtcbiAgICByZXR1cm4gKGluc3RhbmNlSWQsIGFwaSkgPT4gXG4gICAgLy8gQ2Fubm90IHF1aXRlIGdldCB0aGUgdHlwaW5nIHJpZ2h0LCBidXQgaXQgaXMgcmlnaHQgaW4gdGhlIGNvZGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICBtZW1vKGluc3RhbmNlSWQsIChlcmFzLCB3aXRoQWN0aXZlKSA9PiAhZXJhcy5sZW5ndGhcbiAgICAgICAgPyBvZihbXSlcbiAgICAgICAgOiBjaHVua0VyYXMoZXJhcywgKGVyYXMpID0+IGNvbWJpbmVMYXRlc3QoZXJhcy5tYXAoKGUpID0+IGFwaS5kZXJpdmUuc3Rha2luZ1tmbl0oZSwgd2l0aEFjdGl2ZSkpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gbmV4dEVsZWN0ZWQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gXG4gICAgLy8gQ29tcGF0aWJpbGl0eSBmb3IgZnV0dXJlIGdlbmVyYXRpb24gY2hhbmdlcyBpbiBzdGFraW5nLlxuICAgIGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzUGFnZWRcbiAgICAgICAgPyBhcGkuZGVyaXZlLnNlc3Npb24uaW5kZXhlcygpLnBpcGUoXG4gICAgICAgIC8vIG9ubHkgcG9wdWxhdGUgZm9yIG5leHQgZXJhIGluIHRoZSBsYXN0IHNlc3Npb24sIHNvIHRyYWNrIGJvdGggaGVyZSAtIGVudHJpZXMgYXJlIG5vdFxuICAgICAgICAvLyBzdWJzY3JpcHRpb25zLCBzbyB3ZSBuZWVkIGEgdHJpZ2dlciAtIGN1cnJlbnRJbmRleCBhY3RzIGFzIHRoYXQgdHJpZ2dlciB0byByZWZyZXNoXG4gICAgICAgIHN3aXRjaE1hcCgoeyBjdXJyZW50RXJhIH0pID0+IGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzUGFnZWQua2V5cyhjdXJyZW50RXJhKSksIFxuICAgICAgICAvLyBEZWR1cGUgYW55IGR1cGxpY2F0ZXNcbiAgICAgICAgbWFwKChrZXlzKSA9PiBbLi4ubmV3IFNldChrZXlzLm1hcCgoeyBhcmdzOiBbLCBhY2NvdW50SWRdIH0pID0+IGFjY291bnRJZC50b1N0cmluZygpKSldLm1hcCgoYSkgPT4gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0FjY291bnRJZCcsIGEpKSkpXG4gICAgICAgIDogYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnNcbiAgICAgICAgICAgID8gYXBpLmRlcml2ZS5zZXNzaW9uLmluZGV4ZXMoKS5waXBlKFxuICAgICAgICAgICAgLy8gb25seSBwb3B1bGF0ZSBmb3IgbmV4dCBlcmEgaW4gdGhlIGxhc3Qgc2Vzc2lvbiwgc28gdHJhY2sgYm90aCBoZXJlIC0gZW50cmllcyBhcmUgbm90XG4gICAgICAgICAgICAvLyBzdWJzY3JpcHRpb25zLCBzbyB3ZSBuZWVkIGEgdHJpZ2dlciAtIGN1cnJlbnRJbmRleCBhY3RzIGFzIHRoYXQgdHJpZ2dlciB0byByZWZyZXNoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHsgY3VycmVudEVyYSB9KSA9PiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vycy5rZXlzKGN1cnJlbnRFcmEpKSwgXG4gICAgICAgICAgICAvLyBEZWR1cGUgYW55IGR1cGxpY2F0ZXNcbiAgICAgICAgICAgIG1hcCgoa2V5cykgPT4gWy4uLm5ldyBTZXQoa2V5cy5tYXAoKHsgYXJnczogWywgYWNjb3VudElkXSB9KSA9PiBhY2NvdW50SWQudG9TdHJpbmcoKSkpXS5tYXAoKGEpID0+IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdBY2NvdW50SWQnLCBhKSkpKVxuICAgICAgICAgICAgOiBhcGkucXVlcnkuc3Rha2luZ1snY3VycmVudEVsZWN0ZWQnXSgpKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlIGxhdGVzdCBsaXN0IG9mIHZhbGlkYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRvcnMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gXG4gICAgLy8gU2FkbHkgdGhlIG5vZGUtdGVtcGxhdGUgaXMgKGZvciBzb21lIG9ic2N1cmUgcmVhc29uKSBub3QgY29tcHJlaGVuc2l2ZSwgc28gd2hpbGUgdGhlIGRlcml2ZSB3b3Jrc1xuICAgIC8vIGluIGFsbCBhY3R1YWwgcmVhbC13b3JsZCBkZXBsb3llZCBjaGFpbnMsIGl0IGRvZXMgY3JlYXRlIHNvbWUgY29uZnVzaW9uIGZvciBsaW1pdGVkIHRlbXBsYXRlIGNoYWluc1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucXVlcnkuc2Vzc2lvblxuICAgICAgICAgICAgPyBhcGkucXVlcnkuc2Vzc2lvbi52YWxpZGF0b3JzKClcbiAgICAgICAgICAgIDogb2YoW10pLFxuICAgICAgICBhcGkucXVlcnkuc3Rha2luZ1xuICAgICAgICAgICAgPyBhcGkuZGVyaXZlLnN0YWtpbmcubmV4dEVsZWN0ZWQoKVxuICAgICAgICAgICAgOiBvZihbXSlcbiAgICBdKS5waXBlKG1hcCgoW3ZhbGlkYXRvcnMsIG5leHRFbGVjdGVkXSkgPT4gKHtcbiAgICAgICAgbmV4dEVsZWN0ZWQ6IG5leHRFbGVjdGVkLmxlbmd0aFxuICAgICAgICAgICAgPyBuZXh0RWxlY3RlZFxuICAgICAgICAgICAgOiB2YWxpZGF0b3JzLFxuICAgICAgICB2YWxpZGF0b3JzXG4gICAgfSkpKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuY29uc3QgREVGQVVMVF9GTEFHUyA9IHsgd2l0aENvbnRyb2xsZXI6IHRydWUsIHdpdGhQcmVmczogdHJ1ZSB9O1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRpbmdJbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChmbGFncyA9IERFRkFVTFRfRkxBR1MpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcudmFsaWRhdG9ycygpLFxuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcuc3Rhc2hlcygpXG4gICAgXSkucGlwZShzd2l0Y2hNYXAoKFt7IG5leHRFbGVjdGVkIH0sIHN0YXNoZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZWN0ZWQgPSBuZXh0RWxlY3RlZC5tYXAoKGEpID0+IGEudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IHdhaXRpbmcgPSBzdGFzaGVzLmZpbHRlcigodikgPT4gIWVsZWN0ZWQuaW5jbHVkZXModi50b1N0cmluZygpKSk7XG4gICAgICAgIHJldHVybiBhcGkuZGVyaXZlLnN0YWtpbmcucXVlcnlNdWx0aSh3YWl0aW5nLCBmbGFncykucGlwZShtYXAoKGluZm8pID0+ICh7XG4gICAgICAgICAgICBpbmZvLFxuICAgICAgICAgICAgd2FpdGluZ1xuICAgICAgICB9KSkpO1xuICAgIH0pKSk7XG59XG4iLCJpbXBvcnQgeyBoYXNQcm9wb3NhbHMgYXMgY29sbGVjdGl2ZUhhc1Byb3Bvc2FscywgbWVtYmVycyBhcyBjb2xsZWN0aXZlTWVtYmVycywgcHJpbWUgYXMgY29sbGVjdGl2ZVByaW1lLCBwcm9wb3NhbCBhcyBjb2xsZWN0aXZlUHJvcG9zYWwsIHByb3Bvc2FsQ291bnQgYXMgY29sbGVjdGl2ZVByb3Bvc2FsQ291bnQsIHByb3Bvc2FsSGFzaGVzIGFzIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcywgcHJvcG9zYWxzIGFzIGNvbGxlY3RpdmVQcm9wb3NhbHMgfSBmcm9tICcuLi9jb2xsZWN0aXZlL2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCBtZW1iZXJzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlTWVtYmVycygndGVjaG5pY2FsQ29tbWl0dGVlJyk7XG5leHBvcnQgY29uc3QgaGFzUHJvcG9zYWxzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlSGFzUHJvcG9zYWxzKCd0ZWNobmljYWxDb21taXR0ZWUnKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbCA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByb3Bvc2FsKCd0ZWNobmljYWxDb21taXR0ZWUnKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbENvdW50ID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWxDb3VudCgndGVjaG5pY2FsQ29tbWl0dGVlJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxIYXNoZXMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcygndGVjaG5pY2FsQ29tbWl0dGVlJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWxzKCd0ZWNobmljYWxDb21taXR0ZWUnKTtcbmV4cG9ydCBjb25zdCBwcmltZSA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByaW1lKCd0ZWNobmljYWxDb21taXR0ZWUnKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vcHJvcG9zYWxzLmpzJztcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gcGFyc2VSZXN1bHQoYXBpLCB7IGFsbElkcywgYWxsUHJvcG9zYWxzLCBhcHByb3ZhbElkcywgY291bmNpbFByb3Bvc2FscywgcHJvcG9zYWxDb3VudCB9KSB7XG4gICAgY29uc3QgYXBwcm92YWxzID0gW107XG4gICAgY29uc3QgcHJvcG9zYWxzID0gW107XG4gICAgY29uc3QgY291bmNpbFRyZWFzdXJ5ID0gY291bmNpbFByb3Bvc2Fscy5maWx0ZXIoKHsgcHJvcG9zYWwgfSkgPT4gcHJvcG9zYWwgJiYgKGFwaS50eC50cmVhc3VyeS5hcHByb3ZlUHJvcG9zYWwuaXMocHJvcG9zYWwpIHx8XG4gICAgICAgIGFwaS50eC50cmVhc3VyeS5yZWplY3RQcm9wb3NhbC5pcyhwcm9wb3NhbCkpKTtcbiAgICBhbGxJZHMuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChhbGxQcm9wb3NhbHNbaW5kZXhdLmlzU29tZSkge1xuICAgICAgICAgICAgY29uc3QgY291bmNpbCA9IGNvdW5jaWxUcmVhc3VyeVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgcHJvcG9zYWwgfSkgPT4gcHJvcG9zYWwgJiYgaWQuZXEocHJvcG9zYWwuYXJnc1swXSkpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucHJvcG9zYWwgJiYgYi5wcm9wb3NhbFxuICAgICAgICAgICAgICAgID8gYS5wcm9wb3NhbC5tZXRob2QubG9jYWxlQ29tcGFyZShiLnByb3Bvc2FsLm1ldGhvZClcbiAgICAgICAgICAgICAgICA6IGEucHJvcG9zYWxcbiAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICA6IDEpO1xuICAgICAgICAgICAgY29uc3QgaXNBcHByb3ZhbCA9IGFwcHJvdmFsSWRzLnNvbWUoKGFwcHJvdmFsSWQpID0+IGFwcHJvdmFsSWQuZXEoaWQpKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcml2ZWQgPSB7IGNvdW5jaWwsIGlkLCBwcm9wb3NhbDogYWxsUHJvcG9zYWxzW2luZGV4XS51bndyYXAoKSB9O1xuICAgICAgICAgICAgaWYgKGlzQXBwcm92YWwpIHtcbiAgICAgICAgICAgICAgICBhcHByb3ZhbHMucHVzaChkZXJpdmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb3Bvc2Fscy5wdXNoKGRlcml2ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYXBwcm92YWxzLCBwcm9wb3NhbENvdW50LCBwcm9wb3NhbHMgfTtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlUHJvcG9zYWxzKGFwaSwgcHJvcG9zYWxDb3VudCwgYXBwcm92YWxJZHMpIHtcbiAgICBjb25zdCBwcm9wb3NhbElkcyA9IFtdO1xuICAgIGNvbnN0IGNvdW50ID0gcHJvcG9zYWxDb3VudC50b051bWJlcigpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgICAgICBpZiAoIWFwcHJvdmFsSWRzLnNvbWUoKGlkKSA9PiBpZC5lcW4oaW5kZXgpKSkge1xuICAgICAgICAgICAgcHJvcG9zYWxJZHMucHVzaChhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnUHJvcG9zYWxJbmRleCcsIGluZGV4KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWxsSWRzID0gWy4uLnByb3Bvc2FsSWRzLCAuLi5hcHByb3ZhbElkc107XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucXVlcnkudHJlYXN1cnkucHJvcG9zYWxzLm11bHRpKGFsbElkcyksXG4gICAgICAgIGFwaS5kZXJpdmUuY291bmNpbFxuICAgICAgICAgICAgPyBhcGkuZGVyaXZlLmNvdW5jaWwucHJvcG9zYWxzKClcbiAgICAgICAgICAgIDogb2YoW10pXG4gICAgXSkucGlwZShtYXAoKFthbGxQcm9wb3NhbHMsIGNvdW5jaWxQcm9wb3NhbHNdKSA9PiBwYXJzZVJlc3VsdChhcGksIHsgYWxsSWRzLCBhbGxQcm9wb3NhbHMsIGFwcHJvdmFsSWRzLCBjb3VuY2lsUHJvcG9zYWxzLCBwcm9wb3NhbENvdW50IH0pKSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSBhbGwgYWN0aXZlIGFuZCBhcHByb3ZlZCB0cmVhc3VyeSBwcm9wb3NhbHMsIGFsb25nIHdpdGggdGhlaXIgaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcG9zYWxzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS50cmVhc3VyeVxuICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgYXBpLnF1ZXJ5LnRyZWFzdXJ5LnByb3Bvc2FsQ291bnQoKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeS50cmVhc3VyeS5hcHByb3ZhbHMoKVxuICAgICAgICBdKS5waXBlKHN3aXRjaE1hcCgoW3Byb3Bvc2FsQ291bnQsIGFwcHJvdmFsSWRzXSkgPT4gcmV0cmlldmVQcm9wb3NhbHMoYXBpLCBwcm9wb3NhbENvdW50LCBhcHByb3ZhbElkcykpKVxuICAgICAgICA6IG9mKHtcbiAgICAgICAgICAgIGFwcHJvdmFsczogW10sXG4gICAgICAgICAgICBwcm9wb3NhbENvdW50OiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnUHJvcG9zYWxJbmRleCcpLFxuICAgICAgICAgICAgcHJvcG9zYWxzOiBbXVxuICAgICAgICB9KSk7XG59XG4iLCJpbXBvcnQgeyBCTiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBjb25zdCBGQUxMQkFDS19NQVhfSEFTSF9DT1VOVCA9IDI1MDtcbmV4cG9ydCBjb25zdCBGQUxMQkFDS19QRVJJT0QgPSBuZXcgQk4oNiAqIDEwMDApO1xuZXhwb3J0IGNvbnN0IE1BWF9GSU5BTElUWV9MQUcgPSBuZXcgQk4oNSk7XG5leHBvcnQgY29uc3QgTU9SVEFMX1BFUklPRCA9IG5ldyBCTig1ICogNjAgKiAxMDAwKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZXZlbnRzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChibG9ja0hhc2gpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucnBjLmNoYWluLmdldEJsb2NrKGJsb2NrSGFzaCksXG4gICAgICAgIGFwaS5xdWVyeUF0KGJsb2NrSGFzaCkucGlwZShzd2l0Y2hNYXAoKHF1ZXJ5QXQpID0+IHF1ZXJ5QXQuc3lzdGVtLmV2ZW50cygpKSlcbiAgICBdKS5waXBlKG1hcCgoW2Jsb2NrLCBldmVudHNdKSA9PiAoeyBibG9jaywgZXZlbnRzIH0pKSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9ldmVudHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zaWduaW5nSW5mby5qcyc7XG4iLCJpbXBvcnQgeyBjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTnVtYmVyLCBpc1VuZGVmaW5lZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IHVud3JhcEJsb2NrTnVtYmVyIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBGQUxMQkFDS19NQVhfSEFTSF9DT1VOVCwgRkFMTEJBQ0tfUEVSSU9ELCBNQVhfRklOQUxJVFlfTEFHLCBNT1JUQUxfUEVSSU9EIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuZnVuY3Rpb24gbGF0ZXN0Tm9uY2UoYXBpLCBhZGRyZXNzKSB7XG4gICAgcmV0dXJuIGFwaS5kZXJpdmUuYmFsYW5jZXMuYWNjb3VudChhZGRyZXNzKS5waXBlKG1hcCgoeyBhY2NvdW50Tm9uY2UgfSkgPT4gYWNjb3VudE5vbmNlKSk7XG59XG5mdW5jdGlvbiBuZXh0Tm9uY2UoYXBpLCBhZGRyZXNzKSB7XG4gICAgcmV0dXJuIGFwaS5ycGMuc3lzdGVtPy5hY2NvdW50TmV4dEluZGV4XG4gICAgICAgID8gYXBpLnJwYy5zeXN0ZW0uYWNjb3VudE5leHRJbmRleChhZGRyZXNzKVxuICAgICAgICA6IGxhdGVzdE5vbmNlKGFwaSwgYWRkcmVzcyk7XG59XG5mdW5jdGlvbiBzaWduaW5nSGVhZGVyKGFwaSkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLnJwYy5jaGFpbi5nZXRIZWFkZXIoKS5waXBlKHN3aXRjaE1hcCgoaGVhZGVyKSA9PiBcbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoYWlucyBhdCBnZW5lc2lzICh1bnRpbCBibG9jayAxIGlzIHByb2R1Y2VkLCBlLmcuIDZzKSwgc2luY2VcbiAgICAgICAgLy8gd2UgZG8gbmVlZCB0byBhbGxvdyB0cmFuc2FjdGlvbnMgYXQgY2hhaW4gc3RhcnQgKGFsc28gZGV2L3NlYWwgY2hhaW5zKVxuICAgICAgICBoZWFkZXIucGFyZW50SGFzaC5pc0VtcHR5XG4gICAgICAgICAgICA/IG9mKGhlYWRlcilcbiAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIHRoZSBjdXJyZW50IGJsb2NrLCB3ZSB1c2UgdGhlIHBhcmVudCB0byBtaW5pbWl6ZSB0aGVcbiAgICAgICAgICAgIC8vIGltcGFjdCBvZiBmb3JrcyBvbiB0aGUgc3lzdGVtLCBidXQgbm90IGNvbXBsZXRlbHkgcmVtb3ZlIGl0XG4gICAgICAgICAgICA6IGFwaS5ycGMuY2hhaW4uZ2V0SGVhZGVyKGhlYWRlci5wYXJlbnRIYXNoKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YoaGVhZGVyKSkpKSksXG4gICAgICAgIGFwaS5ycGMuY2hhaW4uZ2V0RmluYWxpemVkSGVhZCgpLnBpcGUoc3dpdGNoTWFwKChoYXNoKSA9PiBhcGkucnBjLmNoYWluLmdldEhlYWRlcihoYXNoKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKSkpXG4gICAgXSkucGlwZShtYXAoKFtjdXJyZW50LCBmaW5hbGl6ZWRdKSA9PiBcbiAgICAvLyBkZXRlcm1pbmUgdGhlIGhhc2ggdG8gdXNlLCBjdXJyZW50IHdoZW4gbGFnID4gbWF4LCBlbHNlIGZpbmFsaXplZFxuICAgICFmaW5hbGl6ZWQgfHwgdW53cmFwQmxvY2tOdW1iZXIoY3VycmVudCkuc3ViKHVud3JhcEJsb2NrTnVtYmVyKGZpbmFsaXplZCkpLmd0KE1BWF9GSU5BTElUWV9MQUcpXG4gICAgICAgID8gY3VycmVudFxuICAgICAgICA6IGZpbmFsaXplZCkpO1xufVxuZnVuY3Rpb24gYmFiZU9yQXVyYVBlcmlvZChhcGkpIHtcbiAgICBjb25zdCBwZXJpb2QgPSBhcGkuY29uc3RzLmJhYmU/LmV4cGVjdGVkQmxvY2tUaW1lIHx8XG4gICAgICAgIC8vIHRoaXMgd2lsbCBiZSBwcmVzZW50IG9uZXMgaHR0cHM6Ly9naXRodWIuY29tL3Bhcml0eXRlY2gvcG9sa2Fkb3Qtc2RrL3B1bGwvMzczMiBpcyBtZXJnZWRcbiAgICAgICAgYXBpLmNvbnN0c1snYXVyYSddPy5zbG90RHVyYXRpb24gfHxcbiAgICAgICAgYXBpLmNvbnN0cy50aW1lc3RhbXA/Lm1pbmltdW1QZXJpb2QubXVsbigyKTtcbiAgICByZXR1cm4gIXBlcmlvZC5pc1plcm8oKSA/IHBlcmlvZCA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaWduaW5nSW5mbyhfaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgLy8gbm8gbWVtbywgd2Ugd2FudCB0byBkbyB0aGlzIGZyZXNoIG9uIGVhY2ggcnVuXG4gICAgcmV0dXJuIChhZGRyZXNzLCBub25jZSwgZXJhKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgLy8gcmV0cmlldmUgbm9uY2UgaWYgbm9uZSB3YXMgc3BlY2lmaWVkXG4gICAgICAgIGlzVW5kZWZpbmVkKG5vbmNlKVxuICAgICAgICAgICAgPyBsYXRlc3ROb25jZShhcGksIGFkZHJlc3MpXG4gICAgICAgICAgICA6IG5vbmNlID09PSAtMVxuICAgICAgICAgICAgICAgID8gbmV4dE5vbmNlKGFwaSwgYWRkcmVzcylcbiAgICAgICAgICAgICAgICA6IG9mKGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdJbmRleCcsIG5vbmNlKSksXG4gICAgICAgIC8vIGlmIG5vIGVyYSAoY3JlYXRlKSBvciBlcmEgPiAwIChtb3J0YWwpLCBkbyBibG9jayByZXRyaWV2YWxcbiAgICAgICAgKGlzVW5kZWZpbmVkKGVyYSkgfHwgKGlzTnVtYmVyKGVyYSkgJiYgZXJhID4gMCkpXG4gICAgICAgICAgICA/IHNpZ25pbmdIZWFkZXIoYXBpKVxuICAgICAgICAgICAgOiBvZihudWxsKVxuICAgIF0pLnBpcGUobWFwKChbbm9uY2UsIGhlYWRlcl0pID0+ICh7XG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgbW9ydGFsTGVuZ3RoOiBNYXRoLm1pbihhcGkuY29uc3RzLnN5c3RlbT8uYmxvY2tIYXNoQ291bnQ/LnRvTnVtYmVyKCkgfHwgRkFMTEJBQ0tfTUFYX0hBU0hfQ09VTlQsIE1PUlRBTF9QRVJJT0RcbiAgICAgICAgICAgIC5kaXYoYmFiZU9yQXVyYVBlcmlvZChhcGkpIHx8IEZBTExCQUNLX1BFUklPRClcbiAgICAgICAgICAgIC5pYWRkKE1BWF9GSU5BTElUWV9MQUcpXG4gICAgICAgICAgICAudG9OdW1iZXIoKSksXG4gICAgICAgIG5vbmNlXG4gICAgfSkpKTtcbn1cbiIsImltcG9ydCB7IGV4dHJhY3RBdXRob3IgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhlYWRlckV4dGVuZGVkKHJlZ2lzdHJ5LCBoZWFkZXIsIHZhbGlkYXRvcnMsIGF1dGhvcikge1xuICAgIC8vIGFuIGluc3RhbmNlIG9mIHRoZSBiYXNlIGV4dHJpbnNpYyBmb3IgdXMgdG8gZXh0ZW5kXG4gICAgY29uc3QgSGVhZGVyQmFzZSA9IHJlZ2lzdHJ5LmNyZWF0ZUNsYXNzKCdIZWFkZXInKTtcbiAgICBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEhlYWRlckJhc2Uge1xuICAgICAgICBfX2ludGVybmFsX19hdXRob3I7XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBoZWFkZXIsIHZhbGlkYXRvcnMsIGF1dGhvcikge1xuICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIGhlYWRlcik7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2F1dGhvciA9IGF1dGhvciB8fCBleHRyYWN0QXV0aG9yKHRoaXMuZGlnZXN0LCB2YWxpZGF0b3JzIHx8IFtdKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEF0SGFzaCA9IGhlYWRlcj8uY3JlYXRlZEF0SGFzaDtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlbmllbmNlIG1ldGhvZCwgcmV0dXJucyB0aGUgYXV0aG9yIGZvciB0aGUgYmxvY2tcbiAgICAgICAgICovXG4gICAgICAgIGdldCBhdXRob3IoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19hdXRob3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBsZW1lbnRhdGlvbihyZWdpc3RyeSwgaGVhZGVyLCB2YWxpZGF0b3JzLCBhdXRob3IpO1xufVxuIiwiaW1wb3J0IHsgZXh0cmFjdEF1dGhvciB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBtYXBFeHRyaW5zaWNzKGV4dHJpbnNpY3MsIHJlY29yZHMpIHtcbiAgICByZXR1cm4gZXh0cmluc2ljcy5tYXAoKGV4dHJpbnNpYywgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGRpc3BhdGNoRXJyb3I7XG4gICAgICAgIGxldCBkaXNwYXRjaEluZm87XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHJlY29yZHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgcGhhc2UgfSkgPT4gcGhhc2UuaXNBcHBseUV4dHJpbnNpYyAmJiBwaGFzZS5hc0FwcGx5RXh0cmluc2ljLmVxKGluZGV4KSlcbiAgICAgICAgICAgIC5tYXAoKHsgZXZlbnQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNlY3Rpb24gPT09ICdzeXN0ZW0nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Lm1ldGhvZCA9PT0gJ0V4dHJpbnNpY1N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoSW5mbyA9IGV2ZW50LmRhdGFbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50Lm1ldGhvZCA9PT0gJ0V4dHJpbnNpY0ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFcnJvciA9IGV2ZW50LmRhdGFbMF07XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoSW5mbyA9IGV2ZW50LmRhdGFbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgZGlzcGF0Y2hFcnJvciwgZGlzcGF0Y2hJbmZvLCBldmVudHMsIGV4dHJpbnNpYyB9O1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZ25lZEJsb2NrRXh0ZW5kZWQocmVnaXN0cnksIGJsb2NrLCBldmVudHMsIHZhbGlkYXRvcnMsIGF1dGhvcikge1xuICAgIC8vIGFuIGluc3RhbmNlIG9mIHRoZSBiYXNlIGV4dHJpbnNpYyBmb3IgdXMgdG8gZXh0ZW5kXG4gICAgY29uc3QgU2lnbmVkQmxvY2tCYXNlID0gcmVnaXN0cnkuY3JlYXRlQ2xhc3MoJ1NpZ25lZEJsb2NrJyk7XG4gICAgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBTaWduZWRCbG9ja0Jhc2Uge1xuICAgICAgICBfX2ludGVybmFsX19hdXRob3I7XG4gICAgICAgIF9faW50ZXJuYWxfX2V2ZW50cztcbiAgICAgICAgX19pbnRlcm5hbF9fZXh0cmluc2ljcztcbiAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIGJsb2NrLCBldmVudHMsIHZhbGlkYXRvcnMsIGF1dGhvcikge1xuICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIGJsb2NrKTtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXV0aG9yID0gYXV0aG9yIHx8IGV4dHJhY3RBdXRob3IodGhpcy5ibG9jay5oZWFkZXIuZGlnZXN0LCB2YWxpZGF0b3JzIHx8IFtdKTtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRzID0gZXZlbnRzIHx8IFtdO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19leHRyaW5zaWNzID0gbWFwRXh0cmluc2ljcyh0aGlzLmJsb2NrLmV4dHJpbnNpY3MsIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRzKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEF0SGFzaCA9IGJsb2NrPy5jcmVhdGVkQXRIYXNoO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVuaWVuY2UgbWV0aG9kLCByZXR1cm5zIHRoZSBhdXRob3IgZm9yIHRoZSBibG9ja1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IGF1dGhvcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2F1dGhvcjtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlbmllbmNlIG1ldGhvZCwgcmV0dXJucyB0aGUgZXZlbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmxvY2tcbiAgICAgICAgICovXG4gICAgICAgIGdldCBldmVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19ldmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBleHRyaW5zaWNzIGFuZCB0aGVpciBldmVudHMsIG1hcHBlZFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IGV4dHJpbnNpY3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19leHRyaW5zaWNzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wbGVtZW50YXRpb24ocmVnaXN0cnksIGJsb2NrLCBldmVudHMsIHZhbGlkYXRvcnMsIGF1dGhvcik7XG59XG4iLCJleHBvcnQgeyBjcmVhdGVIZWFkZXJFeHRlbmRlZCB9IGZyb20gJy4vSGVhZGVyRXh0ZW5kZWQuanMnO1xuZXhwb3J0IHsgY3JlYXRlU2lnbmVkQmxvY2tFeHRlbmRlZCB9IGZyb20gJy4vU2lnbmVkQmxvY2tFeHRlbmRlZC5qcyc7XG4iLCJleHBvcnQgZnVuY3Rpb24gZXh0cmFjdEF1dGhvcihkaWdlc3QsIHNlc3Npb25WYWxpZGF0b3JzKSB7XG4gICAgY29uc3QgW2NpdGVtXSA9IGRpZ2VzdC5sb2dzLmZpbHRlcigoZSkgPT4gZS5pc0NvbnNlbnN1cyk7XG4gICAgY29uc3QgW3BpdGVtXSA9IGRpZ2VzdC5sb2dzLmZpbHRlcigoZSkgPT4gZS5pc1ByZVJ1bnRpbWUpO1xuICAgIGNvbnN0IFtzaXRlbV0gPSBkaWdlc3QubG9ncy5maWx0ZXIoKGUpID0+IGUuaXNTZWFsKTtcbiAgICBsZXQgYWNjb3VudElkO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgaXMgY3JpdGljYWwgdG8gYmUgZmlyc3QgZm9yIEJBQkUgKGJlZm9yZSBDb25zZW5zdXMpXG4gICAgICAgIC8vIElmIG5vdCBmaXJzdCwgd2UgZW5kIHVwIGRyb3BwaW5nIHRoZSBhdXRob3IgYXQgc2Vzc2lvbi1lbmRcbiAgICAgICAgaWYgKHBpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBbZW5naW5lLCBkYXRhXSA9IHBpdGVtLmFzUHJlUnVudGltZTtcbiAgICAgICAgICAgIGFjY291bnRJZCA9IGVuZ2luZS5leHRyYWN0QXV0aG9yKGRhdGEsIHNlc3Npb25WYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjY291bnRJZCAmJiBjaXRlbSkge1xuICAgICAgICAgICAgY29uc3QgW2VuZ2luZSwgZGF0YV0gPSBjaXRlbS5hc0NvbnNlbnN1cztcbiAgICAgICAgICAgIGFjY291bnRJZCA9IGVuZ2luZS5leHRyYWN0QXV0aG9yKGRhdGEsIHNlc3Npb25WYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTRUFMLCBzdGlsbCB1c2VkIGluIGUuZy4gS3VsdXB1IGZvciBwb3dcbiAgICAgICAgaWYgKCFhY2NvdW50SWQgJiYgc2l0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IFtlbmdpbmUsIGRhdGFdID0gc2l0ZW0uYXNTZWFsO1xuICAgICAgICAgICAgYWNjb3VudElkID0gZW5naW5lLmV4dHJhY3RBdXRob3IoZGF0YSwgc2Vzc2lvblZhbGlkYXRvcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgfVxuICAgIHJldHVybiBhY2NvdW50SWQ7XG59XG4iLCJpbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgZnVuY3Rpb24gdW53cmFwQmxvY2tOdW1iZXIoaGRyKSB7XG4gICAgcmV0dXJuIGlzQ29tcGFjdChoZHIubnVtYmVyKVxuICAgICAgICA/IGhkci5udW1iZXIudW53cmFwKClcbiAgICAgICAgOiBoZHIubnVtYmVyO1xufVxuIiwiaW1wb3J0IHsgZGVyaXZlTm9vcENhY2hlIH0gZnJvbSAnLi9jYWNoZUltcGwuanMnO1xuY29uc3QgQ0hBQ0hFX0VYUElSWSA9IDcgKiAoMjQgKiA2MCkgKiAoNjAgKiAxMDAwKTtcbmxldCBkZXJpdmVDYWNoZTtcbmZ1bmN0aW9uIHdyYXBDYWNoZShrZXlTdGFydCwgY2FjaGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZWw6IChwYXJ0aWFsKSA9PiBjYWNoZS5kZWwoYCR7a2V5U3RhcnR9JHtwYXJ0aWFsfWApLFxuICAgICAgICBmb3JFYWNoOiBjYWNoZS5mb3JFYWNoLFxuICAgICAgICBnZXQ6IChwYXJ0aWFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgJHtrZXlTdGFydH0ke3BhcnRpYWx9YDtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgICAgIGNhY2hlZC54ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCBjYWNoZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWQudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKHBhcnRpYWwsIHYpID0+IHtcbiAgICAgICAgICAgIGNhY2hlLnNldChgJHtrZXlTdGFydH0ke3BhcnRpYWx9YCwgeyB2LCB4OiBEYXRlLm5vdygpIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2FjaGUoY2FjaGUpIHtcbiAgICAvLyBjbGVhciBhbGwgZXhwaXJlZCB2YWx1ZXNcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFsbCA9IFtdO1xuICAgIGNhY2hlLmZvckVhY2goKGtleSwgeyB4IH0pID0+IHtcbiAgICAgICAgKChub3cgLSB4KSA+IENIQUNIRV9FWFBJUlkpICYmIGFsbC5wdXNoKGtleSk7XG4gICAgfSk7XG4gICAgLy8gZG9uJ3QgZG8gZGVsZXRlIGluc2lkZSBsb29wLCBqdXN0IGluLWNhc2VcbiAgICBhbGwuZm9yRWFjaCgoa2V5KSA9PiBjYWNoZS5kZWwoa2V5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVyaXZlQ2FjaGUocHJlZml4ID0gJycsIGNhY2hlKSB7XG4gICAgZGVyaXZlQ2FjaGUgPSBjYWNoZVxuICAgICAgICA/IHdyYXBDYWNoZShgZGVyaXZlOiR7cHJlZml4fTpgLCBjYWNoZSlcbiAgICAgICAgOiBkZXJpdmVOb29wQ2FjaGU7XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGNsZWFyQ2FjaGUoY2FjaGUpO1xuICAgIH1cbn1cbnNldERlcml2ZUNhY2hlKCk7XG5leHBvcnQgeyBkZXJpdmVDYWNoZSB9O1xuIiwiY29uc3QgbWFwQ2FjaGUgPSBuZXcgTWFwKCk7XG5leHBvcnQgY29uc3QgZGVyaXZlTWFwQ2FjaGUgPSB7XG4gICAgZGVsOiAoa2V5KSA9PiB7XG4gICAgICAgIG1hcENhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH0sXG4gICAgZm9yRWFjaDogKGNiKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIG1hcENhY2hlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY2Ioaywgdik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldDogKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gbWFwQ2FjaGUuZ2V0KGtleSk7XG4gICAgfSxcbiAgICBzZXQ6IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIG1hcENhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IGRlcml2ZU5vb3BDYWNoZSA9IHtcbiAgICBkZWw6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBmb3JFYWNoOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgZ2V0OiAoKSA9PiB1bmRlZmluZWQsXG4gICAgc2V0OiAoXywgdmFsdWUpID0+IHZhbHVlXG59O1xuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnQHBvbGthZG90L3JwYy1jb3JlJztcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdE9ic2VydmFibGUob2JzKSB7XG4gICAgcmV0dXJuIG9icy5waXBlKG1hcCgoW2FdKSA9PiBhKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RNZW1vKGZuKSB7XG4gICAgcmV0dXJuIChpbnN0YW5jZUlkLCBhcGkpID0+IG1lbW8oaW5zdGFuY2VJZCwgKC4uLmFyZ3MpID0+IGZpcnN0T2JzZXJ2YWJsZShmbihhcGksIC4uLmFyZ3MpKSk7XG59XG4iLCJpbXBvcnQgeyBsYXp5TWV0aG9kLCBsYXp5TWV0aG9kcyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBsYXp5RGVyaXZlU2VjdGlvbihyZXN1bHQsIHNlY3Rpb24sIGdldEtleXMsIGNyZWF0b3IpIHtcbiAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc2VjdGlvbiwgKCkgPT4gbGF6eU1ldGhvZHMoe30sIGdldEtleXMoc2VjdGlvbiksIChtZXRob2QpID0+IGNyZWF0b3Ioc2VjdGlvbiwgbWV0aG9kKSkpO1xufVxuIiwiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tLCBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0QXZhaWxhYmxlRGVyaXZlcyB9IGZyb20gJ0Bwb2xrYWRvdC9hcGktZGVyaXZlJztcbmltcG9ydCB7IG1lbW8sIFJwY0NvcmUgfSBmcm9tICdAcG9sa2Fkb3QvcnBjLWNvcmUnO1xuaW1wb3J0IHsgV3NQcm92aWRlciB9IGZyb20gJ0Bwb2xrYWRvdC9ycGMtcHJvdmlkZXInO1xuaW1wb3J0IHsgZXhwYW5kTWV0YWRhdGEsIEdlbmVyaWNFeHRyaW5zaWMsIHR5cGVEZWZpbml0aW9ucywgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzJztcbmltcG9ydCB7IGdldFNwZWNSdW50aW1lIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWtub3duJztcbmltcG9ydCB7IGFycmF5Q2h1bmssIGFycmF5RmxhdHRlbiwgYXNzZXJ0UmV0dXJuLCBCTiwgY29tcGFjdFN0cmlwTGVuZ3RoLCBsYXp5TWV0aG9kLCBsYXp5TWV0aG9kcywgbG9nZ2VyLCBuZXh0VGljaywgb2JqZWN0U3ByZWFkLCBzdHJpbmdDYW1lbENhc2UsIHN0cmluZ1VwcGVyRmlyc3QsIHU4YUNvbmNhdFN0cmljdCwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBibGFrZTJBc0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5pbXBvcnQgeyBjcmVhdGVTdWJtaXR0YWJsZSB9IGZyb20gJy4uL3N1Ym1pdHRhYmxlL2luZGV4LmpzJztcbmltcG9ydCB7IGF1Z21lbnRPYmplY3QgfSBmcm9tICcuLi91dGlsL2F1Z21lbnRPYmplY3QuanMnO1xuaW1wb3J0IHsgZGVjb3JhdGVEZXJpdmVTZWN0aW9ucyB9IGZyb20gJy4uL3V0aWwvZGVjb3JhdGUuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFN0b3JhZ2VBcmdzIH0gZnJvbSAnLi4vdXRpbC92YWxpZGF0ZS5qcyc7XG5pbXBvcnQgeyBFdmVudHMgfSBmcm9tICcuL0V2ZW50cy5qcyc7XG5pbXBvcnQgeyBmaW5kQ2FsbCwgZmluZEVycm9yIH0gZnJvbSAnLi9maW5kLmpzJztcbmNvbnN0IFBBR0VfU0laRV9LID0gMTAwMDsgLy8gbGltaXQgYWxpZ25lZCB3aXRoIHRoZSAxayBvbiB0aGUgbm9kZSAodHJpZSBsb29rdXBzIGFyZSBoZWF2eSlcbmNvbnN0IFBBR0VfU0laRV9WID0gMjUwOyAvLyBsaW1pdGVkIHNpbmNlIHRoZSBkYXRhIG1heSBiZSA+IDE2TUIgKGUuZy4gbWlzZmlyaW5nIGVsZWN0aW9ucylcbmNvbnN0IFBBR0VfU0laRV9RID0gNTA7IC8vIHF1ZXVlIG9mIHBlbmRpbmcgc3RvcmFnZSBxdWVyaWVzIChtYXBwZWQgdG9nZXRoZXIsIG5leHQgdGljaylcbmNvbnN0IGwgPSBsb2dnZXIoJ2FwaS9pbml0Jyk7XG5sZXQgaW5zdGFuY2VDb3VudGVyID0gMDtcbmZ1bmN0aW9uIGdldEF0UXVlcnlGbihhcGksIHsgbWV0aG9kLCBzZWN0aW9uIH0pIHtcbiAgICByZXR1cm4gYXNzZXJ0UmV0dXJuKGFwaS5yeC5xdWVyeVtzZWN0aW9uXSAmJiBhcGkucngucXVlcnlbc2VjdGlvbl1bbWV0aG9kXSwgKCkgPT4gYHF1ZXJ5LiR7c2VjdGlvbn0uJHttZXRob2R9IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBtZXRhZGF0YWApO1xufVxuZXhwb3J0IGNsYXNzIERlY29yYXRlIGV4dGVuZHMgRXZlbnRzIHtcbiAgICBfX2ludGVybmFsX19pbnN0YW5jZUlkO1xuICAgIF9faW50ZXJuYWxfX3J1bnRpbWVMb2cgPSB7fTtcbiAgICBfX2ludGVybmFsX19yZWdpc3RyeTtcbiAgICBfX2ludGVybmFsX19zdG9yYWdlR2V0USA9IFtdO1xuICAgIF9faW50ZXJuYWxfX3N0b3JhZ2VTdWJRID0gW107XG4gICAgLy8gSEFDSyBVc2UgQk4gaW1wb3J0IHNvIGRlY29yYXRlRGVyaXZlIHdvcmtzLi4uIHllcywgd3RmLlxuICAgIF9fcGhhbnRvbSA9IG5ldyBCTigwKTtcbiAgICBfdHlwZTtcbiAgICBfY2FsbCA9IHt9O1xuICAgIF9jb25zdHMgPSB7fTtcbiAgICBfZGVyaXZlO1xuICAgIF9lcnJvcnMgPSB7fTtcbiAgICBfZXZlbnRzID0ge307XG4gICAgX2V4dHJpbnNpY3M7XG4gICAgX2V4dHJpbnNpY1R5cGUgPSBHZW5lcmljRXh0cmluc2ljLkxBVEVTVF9FWFRSSU5TSUNfVkVSU0lPTjtcbiAgICBfZ2VuZXNpc0hhc2g7XG4gICAgX2lzQ29ubmVjdGVkO1xuICAgIF9pc1JlYWR5ID0gZmFsc2U7XG4gICAgX3F1ZXJ5ID0ge307XG4gICAgX3F1ZXJ5TXVsdGk7XG4gICAgX3JwYztcbiAgICBfcnBjQ29yZTtcbiAgICBfcnVudGltZU1hcCA9IHt9O1xuICAgIF9ydW50aW1lQ2hhaW47XG4gICAgX3J1bnRpbWVNZXRhZGF0YTtcbiAgICBfcnVudGltZVZlcnNpb247XG4gICAgX3J4ID0geyBjYWxsOiB7fSwgY29uc3RzOiB7fSwgcXVlcnk6IHt9LCB0eDoge30gfTtcbiAgICBfb3B0aW9ucztcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBvbmUgYW5kIG9ubHkgbWV0aG9kIGNvbmNyZXRlIGNoaWxkcmVuIGNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQuXG4gICAgICogSXQncyBhIGhpZ2hlci1vcmRlciBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgb25lIGFyZ3VtZW50XG4gICAgICogYG1ldGhvZDogTWV0aG9kIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBPYnNlcnZhYmxlPGFueT5gXG4gICAgICogKGFuZCBvbmUgb3B0aW9uYWwgYG9wdGlvbnNgKSwgYW5kIHNob3VsZCByZXR1cm4gdGhlIHVzZXIgZmFjaW5nIG1ldGhvZC5cbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKiAtIEZvciBBcGlSeCwgYGRlY29yYXRlTWV0aG9kYCBzaG91bGQganVzdCBiZSBpZGVudGl0eSwgYmVjYXVzZSB0aGUgaW5wdXRcbiAgICAgKiBmdW5jdGlvbiBpcyBhbHJlYWR5IGFuIE9ic2VydmFibGVcbiAgICAgKiAtIEZvciBBcGlQcm9taXNlLCBgZGVjb3JhdGVNZXRob2RgIHNob3VsZCByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHRha2VzIGFsbFxuICAgICAqIHRoZSBwYXJhbWV0ZXJzIGZyb20gYG1ldGhvZGAsIGFkZHMgYW4gb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCwgYW5kXG4gICAgICogcmV0dXJucyBhIFByb21pc2UuXG4gICAgICpcbiAgICAgKiBXZSBjb3VsZCBlYXNpbHkgaW1hZ2luZSBvdGhlciB1c2VyLWZhY2luZyBpbnRlcmZhY2VzLCB3aGljaCBhcmUgc2ltcGx5XG4gICAgICogaW1wbGVtZW50ZWQgYnkgdHJhbnNmb3JtaW5nIHRoZSBPYnNlcnZhYmxlIHRvIFN0cmVhbS9JdGVyYXRvci9LZWZpci9CYWNvblxuICAgICAqIHZpYSBgZGVjb3JhdGVNZXRob2RgLlxuICAgICAqL1xuICAgIF9kZWNvcmF0ZU1ldGhvZDtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3QgdG8gY3JlYXRlIEFQSSBpbnN0YW5jZSBvciBhIFByb3ZpZGVyIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxCUj5cbiAgICAgKlxuICAgICAqIGBgYGphdmFzY3JpcHRcbiAgICAgKiBpbXBvcnQgQXBpIGZyb20gJ0Bwb2xrYWRvdC9hcGkvcHJvbWlzZSc7XG4gICAgICpcbiAgICAgKiBjb25zdCBhcGkgPSBuZXcgQXBpKCkuaXNSZWFkeSgpO1xuICAgICAqXG4gICAgICogYXBpLnJwYy5zdWJzY3JpYmVOZXdIZWFkcygoaGVhZGVyKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyhgbmV3IGJsb2NrICMke2hlYWRlci5udW1iZXIudG9OdW1iZXIoKX1gKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2luc3RhbmNlSWQgPSBgJHsrK2luc3RhbmNlQ291bnRlcn1gO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5ID0gb3B0aW9ucy5zb3VyY2U/LnJlZ2lzdHJ5IHx8IG9wdGlvbnMucmVnaXN0cnkgfHwgbmV3IFR5cGVSZWdpc3RyeSgpO1xuICAgICAgICB0aGlzLl9yeC5jYWxsQXQgPSAoYmxvY2tIYXNoLCBrbm93blZlcnNpb24pID0+IGZyb20odGhpcy5hdChibG9ja0hhc2gsIGtub3duVmVyc2lvbikpLnBpcGUobWFwKChhKSA9PiBhLnJ4LmNhbGwpKTtcbiAgICAgICAgdGhpcy5fcngucXVlcnlBdCA9IChibG9ja0hhc2gsIGtub3duVmVyc2lvbikgPT4gZnJvbSh0aGlzLmF0KGJsb2NrSGFzaCwga25vd25WZXJzaW9uKSkucGlwZShtYXAoKGEpID0+IGEucngucXVlcnkpKTtcbiAgICAgICAgdGhpcy5fcngucmVnaXN0cnkgPSB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5O1xuICAgICAgICB0aGlzLl9kZWNvcmF0ZU1ldGhvZCA9IGRlY29yYXRlTWV0aG9kO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gb3B0aW9ucy5zb3VyY2VcbiAgICAgICAgICAgID8gb3B0aW9ucy5zb3VyY2UuX3JwY0NvcmUucHJvdmlkZXIuaXNDbG9uYWJsZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5zb3VyY2UuX3JwY0NvcmUucHJvdmlkZXIuY2xvbmUoKVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5zb3VyY2UuX3JwY0NvcmUucHJvdmlkZXJcbiAgICAgICAgICAgIDogKG9wdGlvbnMucHJvdmlkZXIgfHwgbmV3IFdzUHJvdmlkZXIoKSk7XG4gICAgICAgIC8vIFRoZSBSUEMgaW50ZXJmYWNlIGRlY29yYXRlcyB0aGUga25vd24gaW50ZXJmYWNlcyBvbiBpbml0XG4gICAgICAgIHRoaXMuX3JwY0NvcmUgPSBuZXcgUnBjQ29yZSh0aGlzLl9faW50ZXJuYWxfX2luc3RhbmNlSWQsIHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnksIHtcbiAgICAgICAgICAgIGlzUGVkYW50aWM6IHRoaXMuX29wdGlvbnMuaXNQZWRhbnRpYyxcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgdXNlclJwYzogdGhpcy5fb3B0aW9ucy5ycGNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9ycGNDb3JlLnByb3ZpZGVyLmlzQ29ubmVjdGVkKTtcbiAgICAgICAgdGhpcy5fcnguaGFzU3Vic2NyaXB0aW9ucyA9IHRoaXMuX3JwY0NvcmUucHJvdmlkZXIuaGFzU3Vic2NyaXB0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybiB0aGUgY3VycmVudCB1c2VkIHJlZ2lzdHJ5XG4gICAgICovXG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yZWdpc3RyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSB0eXBlIGFzIHJlZ2lzdGVyZWRcbiAgICAgKi9cbiAgICBjcmVhdGVUeXBlKHR5cGUsIC4uLnBhcmFtcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yZWdpc3RyeS5jcmVhdGVUeXBlKHR5cGUsIC4uLnBhcmFtcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlciBhZGRpdGlvbmFsIHVzZXItZGVmaW5lZCBvZiBjaGFpbi1zcGVjaWZpYyB0eXBlcyBpbiB0aGUgdHlwZSByZWdpc3RyeVxuICAgICAqL1xuICAgIHJlZ2lzdGVyVHlwZXModHlwZXMpIHtcbiAgICAgICAgdHlwZXMgJiYgdGhpcy5fX2ludGVybmFsX19yZWdpc3RyeS5yZWdpc3Rlcih0eXBlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgQVBJIG9wZXJhdGVzIHdpdGggc3Vic2NyaXB0aW9uc1xuICAgICAqL1xuICAgIGdldCBoYXNTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnBjQ29yZS5wcm92aWRlci5oYXNTdWJzY3JpcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIEFQSSBkZWNvcmF0ZSBtdWx0aS1rZXkgcXVlcmllc1xuICAgICAqL1xuICAgIGdldCBzdXBwb3J0TXVsdGkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ycGNDb3JlLnByb3ZpZGVyLmhhc1N1YnNjcmlwdGlvbnMgfHwgISF0aGlzLl9ycGNDb3JlLnN0YXRlLnF1ZXJ5U3RvcmFnZUF0O1xuICAgIH1cbiAgICBfZW1wdHlEZWNvcmF0ZWQocmVnaXN0cnksIGJsb2NrSGFzaCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2FsbDoge30sXG4gICAgICAgICAgICBjb25zdHM6IHt9LFxuICAgICAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgICAgIGV2ZW50czoge30sXG4gICAgICAgICAgICBxdWVyeToge30sXG4gICAgICAgICAgICByZWdpc3RyeSxcbiAgICAgICAgICAgIHJ4OiB7XG4gICAgICAgICAgICAgICAgY2FsbDoge30sXG4gICAgICAgICAgICAgICAgcXVlcnk6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHg6IGNyZWF0ZVN1Ym1pdHRhYmxlKHRoaXMuX3R5cGUsIHRoaXMuX3J4LCB0aGlzLl9kZWNvcmF0ZU1ldGhvZCwgcmVnaXN0cnksIGJsb2NrSGFzaClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2NyZWF0ZURlY29yYXRlZChyZWdpc3RyeSwgZnJvbUVtcHR5LCBkZWNvcmF0ZWRBcGksIGJsb2NrSGFzaCkge1xuICAgICAgICBpZiAoIWRlY29yYXRlZEFwaSkge1xuICAgICAgICAgICAgZGVjb3JhdGVkQXBpID0gdGhpcy5fZW1wdHlEZWNvcmF0ZWQocmVnaXN0cnkucmVnaXN0cnksIGJsb2NrSGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21FbXB0eSB8fCAhcmVnaXN0cnkuZGVjb3JhdGVkTWV0YSkge1xuICAgICAgICAgICAgcmVnaXN0cnkuZGVjb3JhdGVkTWV0YSA9IGV4cGFuZE1ldGFkYXRhKHJlZ2lzdHJ5LnJlZ2lzdHJ5LCByZWdpc3RyeS5tZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnVudGltZSA9IHRoaXMuX2RlY29yYXRlQ2FsbHMocmVnaXN0cnksIHRoaXMuX2RlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpO1xuICAgICAgICBjb25zdCBydW50aW1lUnggPSB0aGlzLl9kZWNvcmF0ZUNhbGxzKHJlZ2lzdHJ5LCB0aGlzLl9yeERlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpO1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5fZGVjb3JhdGVTdG9yYWdlKHJlZ2lzdHJ5LmRlY29yYXRlZE1ldGEsIHRoaXMuX2RlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpO1xuICAgICAgICBjb25zdCBzdG9yYWdlUnggPSB0aGlzLl9kZWNvcmF0ZVN0b3JhZ2UocmVnaXN0cnkuZGVjb3JhdGVkTWV0YSwgdGhpcy5fcnhEZWNvcmF0ZU1ldGhvZCwgYmxvY2tIYXNoKTtcbiAgICAgICAgYXVnbWVudE9iamVjdCgnY29uc3RzJywgcmVnaXN0cnkuZGVjb3JhdGVkTWV0YS5jb25zdHMsIGRlY29yYXRlZEFwaS5jb25zdHMsIGZyb21FbXB0eSk7XG4gICAgICAgIGF1Z21lbnRPYmplY3QoJ2Vycm9ycycsIHJlZ2lzdHJ5LmRlY29yYXRlZE1ldGEuZXJyb3JzLCBkZWNvcmF0ZWRBcGkuZXJyb3JzLCBmcm9tRW1wdHkpO1xuICAgICAgICBhdWdtZW50T2JqZWN0KCdldmVudHMnLCByZWdpc3RyeS5kZWNvcmF0ZWRNZXRhLmV2ZW50cywgZGVjb3JhdGVkQXBpLmV2ZW50cywgZnJvbUVtcHR5KTtcbiAgICAgICAgYXVnbWVudE9iamVjdCgncXVlcnknLCBzdG9yYWdlLCBkZWNvcmF0ZWRBcGkucXVlcnksIGZyb21FbXB0eSk7XG4gICAgICAgIGF1Z21lbnRPYmplY3QoJ3F1ZXJ5Jywgc3RvcmFnZVJ4LCBkZWNvcmF0ZWRBcGkucngucXVlcnksIGZyb21FbXB0eSk7XG4gICAgICAgIGF1Z21lbnRPYmplY3QoJ2NhbGwnLCBydW50aW1lLCBkZWNvcmF0ZWRBcGkuY2FsbCwgZnJvbUVtcHR5KTtcbiAgICAgICAgYXVnbWVudE9iamVjdCgnY2FsbCcsIHJ1bnRpbWVSeCwgZGVjb3JhdGVkQXBpLnJ4LmNhbGwsIGZyb21FbXB0eSk7XG4gICAgICAgIGRlY29yYXRlZEFwaS5maW5kQ2FsbCA9IChjYWxsSW5kZXgpID0+IGZpbmRDYWxsKHJlZ2lzdHJ5LnJlZ2lzdHJ5LCBjYWxsSW5kZXgpO1xuICAgICAgICBkZWNvcmF0ZWRBcGkuZmluZEVycm9yID0gKGVycm9ySW5kZXgpID0+IGZpbmRFcnJvcihyZWdpc3RyeS5yZWdpc3RyeSwgZXJyb3JJbmRleCk7XG4gICAgICAgIGRlY29yYXRlZEFwaS5xdWVyeU11bHRpID0gYmxvY2tIYXNoXG4gICAgICAgICAgICA/IHRoaXMuX2RlY29yYXRlTXVsdGlBdChkZWNvcmF0ZWRBcGksIHRoaXMuX2RlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpXG4gICAgICAgICAgICA6IHRoaXMuX2RlY29yYXRlTXVsdGkodGhpcy5fZGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBkZWNvcmF0ZWRBcGkucnVudGltZVZlcnNpb24gPSByZWdpc3RyeS5ydW50aW1lVmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogYmxvY2tIYXNoLFxuICAgICAgICAgICAgZGVjb3JhdGVkQXBpLFxuICAgICAgICAgICAgZGVjb3JhdGVkTWV0YTogcmVnaXN0cnkuZGVjb3JhdGVkTWV0YVxuICAgICAgICB9O1xuICAgIH1cbiAgICBfaW5qZWN0TWV0YWRhdGEocmVnaXN0cnksIGZyb21FbXB0eSA9IGZhbHNlKSB7XG4gICAgICAgIC8vIGNsZWFyIHRoZSBkZWNvcmF0aW9uLCB3ZSBhcmUgcmVkb2luZyBpdCBoZXJlXG4gICAgICAgIGlmIChmcm9tRW1wdHkgfHwgIXJlZ2lzdHJ5LmRlY29yYXRlZEFwaSkge1xuICAgICAgICAgICAgcmVnaXN0cnkuZGVjb3JhdGVkQXBpID0gdGhpcy5fZW1wdHlEZWNvcmF0ZWQocmVnaXN0cnkucmVnaXN0cnkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGVjb3JhdGVkQXBpLCBkZWNvcmF0ZWRNZXRhIH0gPSB0aGlzLl9jcmVhdGVEZWNvcmF0ZWQocmVnaXN0cnksIGZyb21FbXB0eSwgcmVnaXN0cnkuZGVjb3JhdGVkQXBpKTtcbiAgICAgICAgdGhpcy5fY2FsbCA9IGRlY29yYXRlZEFwaS5jYWxsO1xuICAgICAgICB0aGlzLl9jb25zdHMgPSBkZWNvcmF0ZWRBcGkuY29uc3RzO1xuICAgICAgICB0aGlzLl9lcnJvcnMgPSBkZWNvcmF0ZWRBcGkuZXJyb3JzO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBkZWNvcmF0ZWRBcGkuZXZlbnRzO1xuICAgICAgICB0aGlzLl9xdWVyeSA9IGRlY29yYXRlZEFwaS5xdWVyeTtcbiAgICAgICAgdGhpcy5fcnguY2FsbCA9IGRlY29yYXRlZEFwaS5yeC5jYWxsO1xuICAgICAgICB0aGlzLl9yeC5xdWVyeSA9IGRlY29yYXRlZEFwaS5yeC5xdWVyeTtcbiAgICAgICAgY29uc3QgdHggPSB0aGlzLl9kZWNvcmF0ZUV4dHJpbnNpY3MoZGVjb3JhdGVkTWV0YSwgdGhpcy5fZGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBjb25zdCByeHR4ID0gdGhpcy5fZGVjb3JhdGVFeHRyaW5zaWNzKGRlY29yYXRlZE1ldGEsIHRoaXMuX3J4RGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBpZiAoZnJvbUVtcHR5IHx8ICF0aGlzLl9leHRyaW5zaWNzKSB7XG4gICAgICAgICAgICB0aGlzLl9leHRyaW5zaWNzID0gdHg7XG4gICAgICAgICAgICB0aGlzLl9yeC50eCA9IHJ4dHg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhdWdtZW50T2JqZWN0KCd0eCcsIHR4LCB0aGlzLl9leHRyaW5zaWNzLCBmYWxzZSk7XG4gICAgICAgICAgICBhdWdtZW50T2JqZWN0KG51bGwsIHJ4dHgsIHRoaXMuX3J4LnR4LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXVnbWVudE9iamVjdChudWxsLCBkZWNvcmF0ZWRNZXRhLmNvbnN0cywgdGhpcy5fcnguY29uc3RzLCBmcm9tRW1wdHkpO1xuICAgICAgICB0aGlzLmVtaXQoJ2RlY29yYXRlZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqIGJhY2t3YXJkcyBjb21wYXRpYmxlIGVuZHBvaW50IGZvciBtZXRhZGF0YSBpbmplY3Rpb24sIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgKEhvd2V2ZXIsIGl0IGlzIHN0aWxsIHVzZWZ1bCBmb3IgdGVzdGluZyBpbmplY3Rpb24pXG4gICAgICovXG4gICAgaW5qZWN0TWV0YWRhdGEobWV0YWRhdGEsIGZyb21FbXB0eSwgcmVnaXN0cnkpIHtcbiAgICAgICAgdGhpcy5faW5qZWN0TWV0YWRhdGEoeyBjb3VudGVyOiAwLCBtZXRhZGF0YSwgcmVnaXN0cnk6IHJlZ2lzdHJ5IHx8IHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnksIHJ1bnRpbWVWZXJzaW9uOiB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1J1bnRpbWVWZXJzaW9uUGFydGlhbCcpIH0sIGZyb21FbXB0eSk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZUZ1bmN0aW9uTWV0YShpbnB1dCwgb3V0cHV0KSB7XG4gICAgICAgIG91dHB1dC5tZXRhID0gaW5wdXQubWV0YTtcbiAgICAgICAgb3V0cHV0Lm1ldGhvZCA9IGlucHV0Lm1ldGhvZDtcbiAgICAgICAgb3V0cHV0LnNlY3Rpb24gPSBpbnB1dC5zZWN0aW9uO1xuICAgICAgICBvdXRwdXQudG9KU09OID0gaW5wdXQudG9KU09OO1xuICAgICAgICBpZiAoaW5wdXQuY2FsbEluZGV4KSB7XG4gICAgICAgICAgICBvdXRwdXQuY2FsbEluZGV4ID0gaW5wdXQuY2FsbEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIC8vIEZpbHRlciBhbGwgUlBDIG1ldGhvZHMgYmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgdGhlIHJwY19tZXRob2RzIGNhbGwuIFdlIGRvIHRoaXMgaW4gdGhlIGZvbGxvd2luZ1xuICAgIC8vIG1hbm5lciB0byBjYXRlciBmb3IgYm90aCBvbGQgYW5kIG5ldzpcbiAgICAvLyAgIC0gd2hlbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYXJlIDAsIG9ubHkgcmVtb3ZlIHRoZSBvbmVzIHdpdGggaXNPcHRpb25hbCAoYWNjb3VudCAmIGNvbnRyYWN0cylcbiAgICAvLyAgIC0gd2hlbiBub24temVybywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGluIHRoZSBhcnJheSAod2UgZG9uJ3QgZG8gdGhpcylcbiAgICBfZmlsdGVyUnBjKG1ldGhvZHMsIGFkZGl0aW9uYWwpIHtcbiAgICAgICAgLy8gYWRkIGFueSBzcGVjaWZpYyB1c2VyLWJhc2UgUlBDc1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoYWRkaXRpb25hbCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ycGNDb3JlLmFkZFVzZXJJbnRlcmZhY2VzKGFkZGl0aW9uYWwpO1xuICAgICAgICAgICAgLy8gcmUtZGVjb3JhdGUsIG9ubHkgYWRkaW5nIGFueSBuZXcgYWRkaXRpb25hbCBpbnRlcmZhY2VzXG4gICAgICAgICAgICB0aGlzLl9kZWNvcmF0ZVJwYyh0aGlzLl9ycGNDb3JlLCB0aGlzLl9kZWNvcmF0ZU1ldGhvZCwgdGhpcy5fcnBjKTtcbiAgICAgICAgICAgIHRoaXMuX2RlY29yYXRlUnBjKHRoaXMuX3JwY0NvcmUsIHRoaXMuX3J4RGVjb3JhdGVNZXRob2QsIHRoaXMuX3J4LnJwYyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0cmFjdCB0aGUgYWN0dWFsIHNlY3Rpb25zIGZyb20gdGhlIG1ldGhvZHMgKHRoaXMgaXMgdXNlZnVsIHdoZW5cbiAgICAgICAgLy8gd2UgdHJ5IGFuZCBjcmVhdGUgbWFwcGluZ3MgdG8gcnVudGltZSBuYW1lcyB2aWEgYSBoYXNoIG1hcHBpbmcpXG4gICAgICAgIGNvbnN0IHNlY3Rpb25NYXAgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbc2VjdGlvbl0gPSBtZXRob2RzW2ldLnNwbGl0KCdfJyk7XG4gICAgICAgICAgICBzZWN0aW9uTWFwW3NlY3Rpb25dID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBhY3R1YWwgc2VjdGlvbiBuYW1lcyBpbnRvIGFuIGVhc3kgbmFtZSBsb29rdXBcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBPYmplY3Qua2V5cyhzZWN0aW9uTWFwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gc2VjdGlvbnMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbmFtZUEgPSBzdHJpbmdVcHBlckZpcnN0KHNlY3Rpb25zW2ldKTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVCID0gYCR7bmFtZUF9QXBpYDtcbiAgICAgICAgICAgIHRoaXMuX3J1bnRpbWVNYXBbYmxha2UyQXNIZXgobmFtZUEsIDY0KV0gPSBuYW1lQTtcbiAgICAgICAgICAgIHRoaXMuX3J1bnRpbWVNYXBbYmxha2UyQXNIZXgobmFtZUIsIDY0KV0gPSBuYW1lQjtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5hbGx5IHdlIGZpbHRlciB0aGUgYWN0dWFsIG1ldGhvZHMgdG8gZXhwb3NlXG4gICAgICAgIHRoaXMuX2ZpbHRlclJwY01ldGhvZHMobWV0aG9kcyk7XG4gICAgfVxuICAgIF9maWx0ZXJScGNNZXRob2RzKGV4cG9zZWQpIHtcbiAgICAgICAgY29uc3QgaGFzUmVzdWx0cyA9IGV4cG9zZWQubGVuZ3RoICE9PSAwO1xuICAgICAgICBjb25zdCBhbGxLbm93biA9IFsuLi50aGlzLl9ycGNDb3JlLm1hcHBpbmcuZW50cmllcygpXTtcbiAgICAgICAgY29uc3QgYWxsS2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBjb3VudCA9IGFsbEtub3duLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbLCB7IGFsaWFzLCBlbmRwb2ludCwgbWV0aG9kLCBwdWJzdWIsIHNlY3Rpb24gfV0gPSBhbGxLbm93bltpXTtcbiAgICAgICAgICAgIGFsbEtleXMucHVzaChgJHtzZWN0aW9ufV8ke21ldGhvZH1gKTtcbiAgICAgICAgICAgIGlmIChwdWJzdWIpIHtcbiAgICAgICAgICAgICAgICBhbGxLZXlzLnB1c2goYCR7c2VjdGlvbn1fJHtwdWJzdWJbMV19YCk7XG4gICAgICAgICAgICAgICAgYWxsS2V5cy5wdXNoKGAke3NlY3Rpb259XyR7cHVic3ViWzJdfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsaWFzKSB7XG4gICAgICAgICAgICAgICAgYWxsS2V5cy5wdXNoKC4uLmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRwb2ludCkge1xuICAgICAgICAgICAgICAgIGFsbEtleXMucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdW5rbm93biA9IGV4cG9zZWQuZmlsdGVyKChrKSA9PiAhYWxsS2V5cy5pbmNsdWRlcyhrKSAmJlxuICAgICAgICAgICAgIWsuaW5jbHVkZXMoJ191bnN0YWJsZV8nKSk7XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCAmJiAhdGhpcy5fb3B0aW9ucy5ub0luaXRXYXJuKSB7XG4gICAgICAgICAgICBsLndhcm4oYFJQQyBtZXRob2RzIG5vdCBkZWNvcmF0ZWQ6ICR7dW5rbm93bi5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbGwgZW50cmllcyB3ZSBoYXZlIChwb3B1bGF0ZWQgaW4gZGVjb3JhdGUpIGFuZCBmaWx0ZXIgYXMgcmVxdWlyZWRcbiAgICAgICAgLy8gb25seSByZW1vdmUgd2hlbiB3ZSBoYXZlIHJlc3VsdHMgYW5kIG1ldGhvZCBtaXNzaW5nLCBvciB3aXRoIG5vIHJlc3VsdHMgaWYgb3B0aW9uYWxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbaywgeyBtZXRob2QsIHNlY3Rpb24gfV0gPSBhbGxLbm93bltpXTtcbiAgICAgICAgICAgIGlmIChoYXNSZXN1bHRzICYmICFleHBvc2VkLmluY2x1ZGVzKGspICYmIGsgIT09ICdycGNfbWV0aG9kcycpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcnBjW3NlY3Rpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ycGNbc2VjdGlvbl1bbWV0aG9kXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3J4LnJwY1tzZWN0aW9uXVttZXRob2RdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfcnBjU3VibWl0dGVyKGRlY29yYXRlTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IChtZXRob2QsIC4uLnBhcmFtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5fcnBjQ29yZS5wcm92aWRlci5zZW5kKG1ldGhvZCwgcGFyYW1zKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZChtZXRob2QpO1xuICAgIH1cbiAgICBfZGVjb3JhdGVScGMocnBjLCBkZWNvcmF0ZU1ldGhvZCwgaW5wdXQgPSB0aGlzLl9ycGNTdWJtaXR0ZXIoZGVjb3JhdGVNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IGlucHV0O1xuICAgICAgICBjb25zdCBkZWNvcmF0ZUZuID0gKHNlY3Rpb24sIG1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcnBjW3NlY3Rpb25dW21ldGhvZF07XG4gICAgICAgICAgICBjb25zdCBmbiA9IGRlY29yYXRlTWV0aG9kKHNvdXJjZSwgeyBtZXRob2ROYW1lOiBtZXRob2QgfSk7XG4gICAgICAgICAgICBmbi5tZXRhID0gc291cmNlLm1ldGE7XG4gICAgICAgICAgICBmbi5yYXcgPSBkZWNvcmF0ZU1ldGhvZChzb3VyY2UucmF3LCB7IG1ldGhvZE5hbWU6IG1ldGhvZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDAsIHNjb3VudCA9IHJwYy5zZWN0aW9ucy5sZW5ndGg7IHMgPCBzY291bnQ7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHJwYy5zZWN0aW9uc1tzXTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dCwgc2VjdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXMocnBjW3NlY3Rpb25dKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvcmF0ZUludGVybmFsID0gKG1ldGhvZCkgPT4gZGVjb3JhdGVGbihzZWN0aW9uLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwLCBtY291bnQgPSBtZXRob2RzLmxlbmd0aDsgbSA8IG1jb3VudDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbbV07XG4gICAgICAgICAgICAgICAgICAgIC8vICBza2lwIHN1YnNjcmlwdGlvbnMgd2hlcmUgd2UgaGF2ZSBhIG5vbi1zdWJzY3JpYmUgaW50ZXJmYWNlXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1N1YnNjcmlwdGlvbnMgfHwgIShtZXRob2Quc3RhcnRzV2l0aCgnc3Vic2NyaWJlJykgfHwgbWV0aG9kLnN0YXJ0c1dpdGgoJ3Vuc3Vic2NyaWJlJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXQsIHNlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0W3NlY3Rpb25dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXp5TWV0aG9kKG91dFtzZWN0aW9uXSwgbWV0aG9kLCBkZWNvcmF0ZUludGVybmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICAvLyBhZGQgYWxsIGRlZmluaXRpb24gZW50cmllc1xuICAgIF9hZGRSdW50aW1lRGVmKHJlc3VsdCwgYWRkaXRpb25hbCkge1xuICAgICAgICBpZiAoIWFkZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoYWRkaXRpb25hbCk7XG4gICAgICAgIGZvciAobGV0IGogPSAwLCBlY291bnQgPSBlbnRyaWVzLmxlbmd0aDsgaiA8IGVjb3VudDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCBkZWZzXSA9IGVudHJpZXNbal07XG4gICAgICAgICAgICBpZiAocmVzdWx0W2tleV0pIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIHRoaXMgb25lIGFscmVhZHksIHN0ZXAgdGhyb3VnaCBmb3IgbmV3IHZlcnNpb25zIG9yXG4gICAgICAgICAgICAgICAgLy8gbmV3IG1ldGhvZHMgYW5kIGFkZCB0aG9zZSBhcyBhcHBsaWNhYmxlXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDAsIGRjb3VudCA9IGRlZnMubGVuZ3RoOyBrIDwgZGNvdW50OyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmID0gZGVmc1trXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHJlc3VsdFtrZXldLmZpbmQoKHsgdmVyc2lvbiB9KSA9PiBkZWYudmVyc2lvbiA9PT0gdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcmxlYXZlIHRoZSBuZXcgbWV0aG9kcyB3aXRoIHRoZSBvbGQgLSBsYXN0IGRlZmluaXRpb24gd2luc1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3ByZWFkKHByZXYubWV0aG9kcywgZGVmLm1ldGhvZHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGlzIHNwZWNpZmljIHZlcnNpb24sIGFkZCBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaChkZWYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGlzIHJ1bnRpbWUgZGVmaW5pdGlvbiwgYWRkIGl0IGFzLWlzXG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBkZWZzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGV4dHJhY3QgYWxsIHJ1bnRpbWUgZGVmaW5pdGlvbnNcbiAgICBfZ2V0UnVudGltZURlZnMocmVnaXN0cnksIHNwZWNOYW1lLCBjaGFpbiA9ICcnKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBjb25zdCBkZWZWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHR5cGVEZWZpbml0aW9ucyk7XG4gICAgICAgIC8vIG9wdGlvbnMgPiBjaGFpbi9zcGVjID4gYnVpbHQtaW4sIGFwcGx5IGluIHJldmVyc2Ugb3JkZXIgd2l0aFxuICAgICAgICAvLyBtZXRob2RzIG92ZXJyaWRpbmcgcHJldmlvdXMgZGVmaW5pdGlvbnMgKG9yIGludGVybGVhdmUgbWlzc2luZylcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gZGVmVmFsdWVzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZFJ1bnRpbWVEZWYocmVzdWx0LCBkZWZWYWx1ZXNbaV0ucnVudGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWRkUnVudGltZURlZihyZXN1bHQsIGdldFNwZWNSdW50aW1lKHJlZ2lzdHJ5LCBjaGFpbiwgc3BlY05hbWUpKTtcbiAgICAgICAgdGhpcy5fYWRkUnVudGltZURlZihyZXN1bHQsIHRoaXMuX29wdGlvbnMucnVudGltZSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpO1xuICAgIH1cbiAgICAvLyBwcmUtbWV0YWRhdGEgZGVjb3JhdGlvblxuICAgIF9kZWNvcmF0ZUNhbGxzKHsgcmVnaXN0cnksIHJ1bnRpbWVWZXJzaW9uOiB7IGFwaXMsIHNwZWNOYW1lLCBzcGVjVmVyc2lvbiB9IH0sIGRlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNvbnN0IG5hbWVkID0ge307XG4gICAgICAgIGNvbnN0IGhhc2hlcyA9IHt9O1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldFJ1bnRpbWVEZWZzKHJlZ2lzdHJ5LCBzcGVjTmFtZSwgdGhpcy5fcnVudGltZUNoYWluKTtcbiAgICAgICAgY29uc3Qgb2xkZXIgPSBbXTtcbiAgICAgICAgY29uc3QgaW1wbE5hbWUgPSBgJHtzcGVjTmFtZS50b1N0cmluZygpfS8ke3NwZWNWZXJzaW9uLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgY29uc3QgaGFzTG9nZ2VkID0gdGhpcy5fX2ludGVybmFsX19ydW50aW1lTG9nW2ltcGxOYW1lXSB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ydW50aW1lTG9nW2ltcGxOYW1lXSA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBzY291bnQgPSBzZWN0aW9ucy5sZW5ndGg7IGkgPCBzY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgW19zZWN0aW9uLCBzZWNzXSA9IHNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkhhc2ggPSBibGFrZTJBc0hleChfc2VjdGlvbiwgNjQpO1xuICAgICAgICAgICAgY29uc3QgcnRBcGkgPSBhcGlzLmZpbmQoKFthXSkgPT4gYS5lcShzZWN0aW9uSGFzaCkpO1xuICAgICAgICAgICAgaGFzaGVzW3NlY3Rpb25IYXNoXSA9IHRydWU7XG4gICAgICAgICAgICBpZiAocnRBcGkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGwgPSBzZWNzLm1hcCgoeyB2ZXJzaW9uIH0pID0+IHZlcnNpb24pLnNvcnQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWMgPSBzZWNzLmZpbmQoKHsgdmVyc2lvbiB9KSA9PiBydEFwaVsxXS5lcSh2ZXJzaW9uKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gc3RyaW5nQ2FtZWxDYXNlKF9zZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5lbnRyaWVzKHNlYy5tZXRob2RzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWVkW3NlY3Rpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRbc2VjdGlvbl0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwLCBtY291bnQgPSBtZXRob2RzLmxlbmd0aDsgbSA8IG1jb3VudDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW19tZXRob2QsIGRlZl0gPSBtZXRob2RzW21dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHN0cmluZ0NhbWVsQ2FzZShfbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZFtzZWN0aW9uXVttZXRob2RdID0gb2JqZWN0U3ByZWFkKHsgbWV0aG9kLCBuYW1lOiBgJHtfc2VjdGlvbn1fJHtfbWV0aG9kfWAsIHNlY3Rpb24sIHNlY3Rpb25IYXNoIH0sIGRlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZGVyLnB1c2goYCR7X3NlY3Rpb259LyR7cnRBcGlbMV0udG9TdHJpbmcoKX0gKCR7YWxsLmpvaW4oJy8nKX0ga25vd24pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgdGhlIHJ1bnRpbWVzIHRoYXQgd2UgZG9uJ3QgaGF2ZSBoYXNoZXMgZm9yXG4gICAgICAgIGNvbnN0IG5vdEZvdW5kID0gYXBpc1xuICAgICAgICAgICAgLm1hcCgoW2EsIHZdKSA9PiBbYS50b0hleCgpLCB2LnRvU3RyaW5nKCldKVxuICAgICAgICAgICAgLmZpbHRlcigoW2FdKSA9PiAhaGFzaGVzW2FdKVxuICAgICAgICAgICAgLm1hcCgoW2EsIHZdKSA9PiBgJHt0aGlzLl9ydW50aW1lTWFwW2FdIHx8IGF9LyR7dn1gKTtcbiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLm5vSW5pdFdhcm4gJiYgIWhhc0xvZ2dlZCkge1xuICAgICAgICAgICAgaWYgKG9sZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGwud2FybihgJHtpbXBsTmFtZX06IE5vdCBkZWNvcmF0aW5nIHJ1bnRpbWUgYXBpcyB3aXRob3V0IG1hdGNoaW5nIHZlcnNpb25zOiAke29sZGVyLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90Rm91bmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbC53YXJuKGAke2ltcGxOYW1lfTogTm90IGRlY29yYXRpbmcgdW5rbm93biBydW50aW1lIGFwaXM6ICR7bm90Rm91bmQuam9pbignLCAnKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZUNhbGwgPSBibG9ja0hhc2hcbiAgICAgICAgICAgID8gKG5hbWUsIGJ5dGVzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmNhbGwobmFtZSwgYnl0ZXMsIGJsb2NrSGFzaClcbiAgICAgICAgICAgIDogKG5hbWUsIGJ5dGVzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmNhbGwobmFtZSwgYnl0ZXMpO1xuICAgICAgICBjb25zdCBsYXp5U2VjdGlvbiA9IChzZWN0aW9uKSA9PiBsYXp5TWV0aG9kcyh7fSwgT2JqZWN0LmtleXMobmFtZWRbc2VjdGlvbl0pLCAobWV0aG9kKSA9PiB0aGlzLl9kZWNvcmF0ZUNhbGwocmVnaXN0cnksIG5hbWVkW3NlY3Rpb25dW21ldGhvZF0sIHN0YXRlQ2FsbCwgZGVjb3JhdGVNZXRob2QpKTtcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IE9iamVjdC5rZXlzKG5hbWVkKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gbW9kdWxlcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgbW9kdWxlc1tpXSwgbGF6eVNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9kZWNvcmF0ZUNhbGwocmVnaXN0cnksIGRlZiwgc3RhdGVDYWxsLCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgIGNvbnN0IGRlY29yYXRlZCA9IGRlY29yYXRlTWV0aG9kKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IGRlZi5wYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2RlZi5uYW1lfTo6IEV4cGVjdGVkICR7ZGVmLnBhcmFtcy5sZW5ndGh9IGFyZ3VtZW50cywgZm91bmQgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVnaXN0cnkuY3JlYXRlVHlwZSgnUmF3JywgdThhQ29uY2F0U3RyaWN0KGFyZ3MubWFwKChhLCBpKSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKGRlZi5wYXJhbXNbaV0udHlwZSwgW2FdKS50b1U4YSgpKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlQ2FsbChkZWYubmFtZSwgYnl0ZXMpLnBpcGUobWFwKChyKSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKGRlZi50eXBlLCBbcl0pKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkZWNvcmF0ZWQubWV0YSA9IGRlZjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiBkZWNvcmF0ZWQ7XG4gICAgfVxuICAgIC8vIG9ubHkgYmUgY2FsbGVkIGlmIHN1cHBvcnRNdWx0aSBpcyB0cnVlXG4gICAgX2RlY29yYXRlTXVsdGkoZGVjb3JhdGVNZXRob2QpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCgoa2V5cykgPT4ga2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gKHRoaXMuaGFzU3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICAgID8gdGhpcy5fcnBjQ29yZS5zdGF0ZS5zdWJzY3JpYmVTdG9yYWdlXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9ycGNDb3JlLnN0YXRlLnF1ZXJ5U3RvcmFnZUF0KShrZXlzLm1hcCgoYXJncykgPT4gQXJyYXkuaXNBcnJheShhcmdzKVxuICAgICAgICAgICAgICAgID8gYXJnc1swXS5jcmVhdG9yLm1ldGEudHlwZS5pc1BsYWluXG4gICAgICAgICAgICAgICAgICAgID8gW2FyZ3NbMF0uY3JlYXRvcl1cbiAgICAgICAgICAgICAgICAgICAgOiBhcmdzWzBdLmNyZWF0b3IubWV0YS50eXBlLmFzTWFwLmhhc2hlcnMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFthcmdzWzBdLmNyZWF0b3IsIGFyZ3Muc2xpY2UoMSldXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFthcmdzWzBdLmNyZWF0b3IsIC4uLmFyZ3Muc2xpY2UoMSldXG4gICAgICAgICAgICAgICAgOiBbYXJncy5jcmVhdG9yXSkpXG4gICAgICAgICAgICA6IG9mKFtdKSk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZU11bHRpQXQoYXRBcGksIGRlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCgoY2FsbHMpID0+IGNhbGxzLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLl9ycGNDb3JlLnN0YXRlLnF1ZXJ5U3RvcmFnZUF0KGNhbGxzLm1hcCgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY3JlYXRvciB9ID0gZ2V0QXRRdWVyeUZuKGF0QXBpLCBhcmdzWzBdLmNyZWF0b3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRvci5tZXRhLnR5cGUuaXNQbGFpblxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbY3JlYXRvcl1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogY3JlYXRvci5tZXRhLnR5cGUuYXNNYXAuaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtjcmVhdG9yLCBhcmdzLnNsaWNlKDEpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW2NyZWF0b3IsIC4uLmFyZ3Muc2xpY2UoMSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW2dldEF0UXVlcnlGbihhdEFwaSwgYXJncy5jcmVhdG9yKS5jcmVhdG9yXTtcbiAgICAgICAgICAgIH0pLCBibG9ja0hhc2gpXG4gICAgICAgICAgICA6IG9mKFtdKSk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZUV4dHJpbnNpY3MoeyB0eCB9LCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVTdWJtaXR0YWJsZSh0aGlzLl90eXBlLCB0aGlzLl9yeCwgZGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBjb25zdCBsYXp5U2VjdGlvbiA9IChzZWN0aW9uKSA9PiBsYXp5TWV0aG9kcyh7fSwgT2JqZWN0LmtleXModHhbc2VjdGlvbl0pLCAobWV0aG9kKSA9PiBtZXRob2Quc3RhcnRzV2l0aCgnJCcpXG4gICAgICAgICAgICA/IHR4W3NlY3Rpb25dW21ldGhvZF1cbiAgICAgICAgICAgIDogdGhpcy5fZGVjb3JhdGVFeHRyaW5zaWNFbnRyeSh0eFtzZWN0aW9uXVttZXRob2RdLCByZXN1bHQpKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBPYmplY3Qua2V5cyh0eCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHNlY3Rpb25zLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGxhenlNZXRob2QocmVzdWx0LCBzZWN0aW9uc1tpXSwgbGF6eVNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9kZWNvcmF0ZUV4dHJpbnNpY0VudHJ5KG1ldGhvZCwgY3JlYXRvcikge1xuICAgICAgICBjb25zdCBkZWNvcmF0ZWQgPSAoLi4ucGFyYW1zKSA9PiBjcmVhdG9yKG1ldGhvZCguLi5wYXJhbXMpKTtcbiAgICAgICAgLy8gcGFzcyB0aHJvdWdoIHRoZSBgLmlzYFxuICAgICAgICBkZWNvcmF0ZWQuaXMgPSAob3RoZXIpID0+IG1ldGhvZC5pcyhvdGhlcik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb3JhdGVGdW5jdGlvbk1ldGEobWV0aG9kLCBkZWNvcmF0ZWQpO1xuICAgIH1cbiAgICBfZGVjb3JhdGVTdG9yYWdlKHsgcXVlcnksIHJlZ2lzdHJ5IH0sIGRlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNvbnN0IGxhenlTZWN0aW9uID0gKHNlY3Rpb24pID0+IGxhenlNZXRob2RzKHt9LCBPYmplY3Qua2V5cyhxdWVyeVtzZWN0aW9uXSksIChtZXRob2QpID0+IGJsb2NrSGFzaFxuICAgICAgICAgICAgPyB0aGlzLl9kZWNvcmF0ZVN0b3JhZ2VFbnRyeUF0KHJlZ2lzdHJ5LCBxdWVyeVtzZWN0aW9uXVttZXRob2RdLCBkZWNvcmF0ZU1ldGhvZCwgYmxvY2tIYXNoKVxuICAgICAgICAgICAgOiB0aGlzLl9kZWNvcmF0ZVN0b3JhZ2VFbnRyeShxdWVyeVtzZWN0aW9uXVttZXRob2RdLCBkZWNvcmF0ZU1ldGhvZCkpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gc2VjdGlvbnMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgbGF6eU1ldGhvZChyZXN1bHQsIHNlY3Rpb25zW2ldLCBsYXp5U2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX2RlY29yYXRlU3RvcmFnZUVudHJ5KGNyZWF0b3IsIGRlY29yYXRlTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IGdldEFyZ3MgPSAoYXJncywgcmVnaXN0cnkpID0+IGV4dHJhY3RTdG9yYWdlQXJncyhyZWdpc3RyeSB8fCB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5LCBjcmVhdG9yLCBhcmdzKTtcbiAgICAgICAgY29uc3QgZ2V0UXVlcnlBdCA9IChibG9ja0hhc2gpID0+IGZyb20odGhpcy5hdChibG9ja0hhc2gpKS5waXBlKG1hcCgoYXBpKSA9PiBnZXRBdFF1ZXJ5Rm4oYXBpLCBjcmVhdG9yKSkpO1xuICAgICAgICAvLyBEaXNhYmxlIHRoaXMgd2hlcmUgaXQgb2NjdXJzIGZvciBlYWNoIGZpZWxkIHdlIGFyZSBkZWNvcmF0aW5nXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQgKi9cbiAgICAgICAgY29uc3QgZGVjb3JhdGVkID0gdGhpcy5fZGVjb3JhdGVTdG9yYWdlQ2FsbChjcmVhdG9yLCBkZWNvcmF0ZU1ldGhvZCk7XG4gICAgICAgIGRlY29yYXRlZC5jcmVhdG9yID0gY3JlYXRvcjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGRlY29yYXRlZC5hdCA9IGRlY29yYXRlTWV0aG9kKChibG9ja0hhc2gsIC4uLmFyZ3MpID0+IGdldFF1ZXJ5QXQoYmxvY2tIYXNoKS5waXBlKHN3aXRjaE1hcCgocSkgPT4gcSguLi5hcmdzKSkpKTtcbiAgICAgICAgZGVjb3JhdGVkLmhhc2ggPSBkZWNvcmF0ZU1ldGhvZCgoLi4uYXJncykgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRTdG9yYWdlSGFzaChnZXRBcmdzKGFyZ3MpKSk7XG4gICAgICAgIGRlY29yYXRlZC5pcyA9IChrZXkpID0+IGtleS5zZWN0aW9uID09PSBjcmVhdG9yLnNlY3Rpb24gJiZcbiAgICAgICAgICAgIGtleS5tZXRob2QgPT09IGNyZWF0b3IubWV0aG9kO1xuICAgICAgICBkZWNvcmF0ZWQua2V5ID0gKC4uLmFyZ3MpID0+IHU4YVRvSGV4KGNvbXBhY3RTdHJpcExlbmd0aChjcmVhdG9yKC4uLmFyZ3MpKVsxXSk7XG4gICAgICAgIGRlY29yYXRlZC5rZXlQcmVmaXggPSAoLi4uYXJncykgPT4gdThhVG9IZXgoY3JlYXRvci5rZXlQcmVmaXgoLi4uYXJncykpO1xuICAgICAgICBkZWNvcmF0ZWQuc2l6ZSA9IGRlY29yYXRlTWV0aG9kKCguLi5hcmdzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmdldFN0b3JhZ2VTaXplKGdldEFyZ3MoYXJncykpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGRlY29yYXRlZC5zaXplQXQgPSBkZWNvcmF0ZU1ldGhvZCgoYmxvY2tIYXNoLCAuLi5hcmdzKSA9PiBnZXRRdWVyeUF0KGJsb2NrSGFzaCkucGlwZShzd2l0Y2hNYXAoKHEpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0U3RvcmFnZVNpemUoZ2V0QXJncyhhcmdzLCBxLmNyZWF0b3IubWV0YS5yZWdpc3RyeSksIGJsb2NrSGFzaCkpKSk7XG4gICAgICAgIC8vIC5rZXlzKCkgJiAuZW50cmllcygpIG9ubHkgYXZhaWxhYmxlIG9uIG1hcCB0eXBlc1xuICAgICAgICBpZiAoY3JlYXRvci5pdGVyS2V5ICYmIGNyZWF0b3IubWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICBkZWNvcmF0ZWQuZW50cmllcyA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAoLi4uYXJncykgPT4gdGhpcy5fcmV0cmlldmVNYXBFbnRyaWVzKGNyZWF0b3IsIG51bGwsIGFyZ3MpKSk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgICAgIGRlY29yYXRlZC5lbnRyaWVzQXQgPSBkZWNvcmF0ZU1ldGhvZChtZW1vKHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCwgKGJsb2NrSGFzaCwgLi4uYXJncykgPT4gZ2V0UXVlcnlBdChibG9ja0hhc2gpLnBpcGUoc3dpdGNoTWFwKChxKSA9PiB0aGlzLl9yZXRyaWV2ZU1hcEVudHJpZXMocS5jcmVhdG9yLCBibG9ja0hhc2gsIGFyZ3MpKSkpKTtcbiAgICAgICAgICAgIGRlY29yYXRlZC5lbnRyaWVzUGFnZWQgPSBkZWNvcmF0ZU1ldGhvZChtZW1vKHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCwgKG9wdHMpID0+IHRoaXMuX3JldHJpZXZlTWFwRW50cmllc1BhZ2VkKGNyZWF0b3IsIHVuZGVmaW5lZCwgb3B0cykpKTtcbiAgICAgICAgICAgIGRlY29yYXRlZC5rZXlzID0gZGVjb3JhdGVNZXRob2QobWVtbyh0aGlzLl9faW50ZXJuYWxfX2luc3RhbmNlSWQsICguLi5hcmdzKSA9PiB0aGlzLl9yZXRyaWV2ZU1hcEtleXMoY3JlYXRvciwgbnVsbCwgYXJncykpKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgICAgZGVjb3JhdGVkLmtleXNBdCA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAoYmxvY2tIYXNoLCAuLi5hcmdzKSA9PiBnZXRRdWVyeUF0KGJsb2NrSGFzaCkucGlwZShzd2l0Y2hNYXAoKHEpID0+IHRoaXMuX3JldHJpZXZlTWFwS2V5cyhxLmNyZWF0b3IsIGJsb2NrSGFzaCwgYXJncykpKSkpO1xuICAgICAgICAgICAgZGVjb3JhdGVkLmtleXNQYWdlZCA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAob3B0cykgPT4gdGhpcy5fcmV0cmlldmVNYXBLZXlzUGFnZWQoY3JlYXRvciwgdW5kZWZpbmVkLCBvcHRzKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRNdWx0aSAmJiBjcmVhdG9yLm1ldGEudHlwZS5pc01hcCkge1xuICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBkb3VibGUgbWFwIHN0b3JhZ2UgZnVuY3Rpb24sIHVzZXIgbmVlZCB0byBwYXNzIGRvdWJsZSBtYXAga2V5IGFzIGFuIGFycmF5XG4gICAgICAgICAgICBkZWNvcmF0ZWQubXVsdGkgPSBkZWNvcmF0ZU1ldGhvZCgoYXJncykgPT4gY3JlYXRvci5tZXRhLnR5cGUuYXNNYXAuaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3JldHJpZXZlTXVsdGkoYXJncy5tYXAoKGEpID0+IFtjcmVhdG9yLCBbYV1dKSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3JldHJpZXZlTXVsdGkoYXJncy5tYXAoKGEpID0+IFtjcmVhdG9yLCBhXSkpKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29yYXRlRnVuY3Rpb25NZXRhKGNyZWF0b3IsIGRlY29yYXRlZCk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZVN0b3JhZ2VFbnRyeUF0KHJlZ2lzdHJ5LCBjcmVhdG9yLCBkZWNvcmF0ZU1ldGhvZCwgYmxvY2tIYXNoKSB7XG4gICAgICAgIGNvbnN0IGdldEFyZ3MgPSAoYXJncykgPT4gZXh0cmFjdFN0b3JhZ2VBcmdzKHJlZ2lzdHJ5LCBjcmVhdG9yLCBhcmdzKTtcbiAgICAgICAgLy8gRGlzYWJsZSB0aGlzIHdoZXJlIGl0IG9jY3VycyBmb3IgZWFjaCBmaWVsZCB3ZSBhcmUgZGVjb3JhdGluZ1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50ICovXG4gICAgICAgIGNvbnN0IGRlY29yYXRlZCA9IGRlY29yYXRlTWV0aG9kKCguLi5hcmdzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmdldFN0b3JhZ2UoZ2V0QXJncyhhcmdzKSwgYmxvY2tIYXNoKSk7XG4gICAgICAgIGRlY29yYXRlZC5jcmVhdG9yID0gY3JlYXRvcjtcbiAgICAgICAgZGVjb3JhdGVkLmhhc2ggPSBkZWNvcmF0ZU1ldGhvZCgoLi4uYXJncykgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRTdG9yYWdlSGFzaChnZXRBcmdzKGFyZ3MpLCBibG9ja0hhc2gpKTtcbiAgICAgICAgZGVjb3JhdGVkLmlzID0gKGtleSkgPT4ga2V5LnNlY3Rpb24gPT09IGNyZWF0b3Iuc2VjdGlvbiAmJlxuICAgICAgICAgICAga2V5Lm1ldGhvZCA9PT0gY3JlYXRvci5tZXRob2Q7XG4gICAgICAgIGRlY29yYXRlZC5rZXkgPSAoLi4uYXJncykgPT4gdThhVG9IZXgoY29tcGFjdFN0cmlwTGVuZ3RoKGNyZWF0b3IoLi4uYXJncykpWzFdKTtcbiAgICAgICAgZGVjb3JhdGVkLmtleVByZWZpeCA9ICguLi5rZXlzKSA9PiB1OGFUb0hleChjcmVhdG9yLmtleVByZWZpeCguLi5rZXlzKSk7XG4gICAgICAgIGRlY29yYXRlZC5zaXplID0gZGVjb3JhdGVNZXRob2QoKC4uLmFyZ3MpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0U3RvcmFnZVNpemUoZ2V0QXJncyhhcmdzKSwgYmxvY2tIYXNoKSk7XG4gICAgICAgIC8vIC5rZXlzKCkgJiAuZW50cmllcygpIG9ubHkgYXZhaWxhYmxlIG9uIG1hcCB0eXBlc1xuICAgICAgICBpZiAoY3JlYXRvci5pdGVyS2V5ICYmIGNyZWF0b3IubWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICBkZWNvcmF0ZWQuZW50cmllcyA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAoLi4uYXJncykgPT4gdGhpcy5fcmV0cmlldmVNYXBFbnRyaWVzKGNyZWF0b3IsIGJsb2NrSGFzaCwgYXJncykpKTtcbiAgICAgICAgICAgIGRlY29yYXRlZC5lbnRyaWVzUGFnZWQgPSBkZWNvcmF0ZU1ldGhvZChtZW1vKHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCwgKG9wdHMpID0+IHRoaXMuX3JldHJpZXZlTWFwRW50cmllc1BhZ2VkKGNyZWF0b3IsIGJsb2NrSGFzaCwgb3B0cykpKTtcbiAgICAgICAgICAgIGRlY29yYXRlZC5rZXlzID0gZGVjb3JhdGVNZXRob2QobWVtbyh0aGlzLl9faW50ZXJuYWxfX2luc3RhbmNlSWQsICguLi5hcmdzKSA9PiB0aGlzLl9yZXRyaWV2ZU1hcEtleXMoY3JlYXRvciwgYmxvY2tIYXNoLCBhcmdzKSkpO1xuICAgICAgICAgICAgZGVjb3JhdGVkLmtleXNQYWdlZCA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAob3B0cykgPT4gdGhpcy5fcmV0cmlldmVNYXBLZXlzUGFnZWQoY3JlYXRvciwgYmxvY2tIYXNoLCBvcHRzKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRNdWx0aSAmJiBjcmVhdG9yLm1ldGEudHlwZS5pc01hcCkge1xuICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBkb3VibGUgbWFwIHN0b3JhZ2UgZnVuY3Rpb24sIHVzZXIgbmVlZCB0byBwYXNzIGRvdWJsZSBtYXAga2V5IGFzIGFuIGFycmF5XG4gICAgICAgICAgICBkZWNvcmF0ZWQubXVsdGkgPSBkZWNvcmF0ZU1ldGhvZCgoYXJncykgPT4gY3JlYXRvci5tZXRhLnR5cGUuYXNNYXAuaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3JldHJpZXZlTXVsdGkoYXJncy5tYXAoKGEpID0+IFtjcmVhdG9yLCBbYV1dKSwgYmxvY2tIYXNoKVxuICAgICAgICAgICAgICAgIDogdGhpcy5fcmV0cmlldmVNdWx0aShhcmdzLm1hcCgoYSkgPT4gW2NyZWF0b3IsIGFdKSwgYmxvY2tIYXNoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50ICovXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvcmF0ZUZ1bmN0aW9uTWV0YShjcmVhdG9yLCBkZWNvcmF0ZWQpO1xuICAgIH1cbiAgICBfcXVldWVTdG9yYWdlKGNhbGwsIHF1ZXVlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gcXVldWUgPT09IHRoaXMuX19pbnRlcm5hbF9fc3RvcmFnZVN1YlFcbiAgICAgICAgICAgID8gdGhpcy5fcnBjQ29yZS5zdGF0ZS5zdWJzY3JpYmVTdG9yYWdlXG4gICAgICAgICAgICA6IHRoaXMuX3JwY0NvcmUuc3RhdGUucXVlcnlTdG9yYWdlQXQ7XG4gICAgICAgIGxldCBxdWV1ZUlkeCA9IHF1ZXVlLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCB2YWx1ZUlkeCA9IDA7XG4gICAgICAgIGxldCB2YWx1ZU9icztcbiAgICAgICAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBxdWV1ZSBlbnRyaWVzIHlldCxcbiAgICAgICAgLy8gb3IgdGhlIGN1cnJlbnQgcXVldWUgaGFzIGZpcmVkIChzZWUgZnJvbSBiZWxvdyksXG4gICAgICAgIC8vIG9yIHRoZSBjdXJyZW50IHF1ZXVlIGhhcyB0aGUgbWF4IGVudHJpZXMsXG4gICAgICAgIC8vIHRoZW4gd2UgY3JlYXRlIGEgbmV3IHF1ZXVlXG4gICAgICAgIGlmIChxdWV1ZUlkeCA9PT0gLTEgfHwgIXF1ZXVlW3F1ZXVlSWR4XSB8fCBxdWV1ZVtxdWV1ZUlkeF1bMV0ubGVuZ3RoID09PSBQQUdFX1NJWkVfUSkge1xuICAgICAgICAgICAgcXVldWVJZHgrKztcbiAgICAgICAgICAgIHZhbHVlT2JzID0gZnJvbShcbiAgICAgICAgICAgIC8vIHdlIGRlbGF5IHRoZSBleGVjdXRpb24gdW50aWwgdGhlIG5leHQgdGljaywgdGhpcyBhbGxvd3NcbiAgICAgICAgICAgIC8vIGFueSBxdWVyaWVzIG1hZGUgaW4gdGhpcyB0aW1lZnJhbWUgdG8gYmUgYWRkZWQgdG8gdGhlIHNhbWVcbiAgICAgICAgICAgIC8vIHF1ZXVlIGZvciBhIHNpbmdsZSBxdWVyeVxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdldCBhbGwgdGhlIGNhbGxzIGluIHRoaXMgaW5zdGFuY2UsIHJlc29sdmUgd2l0aCBpdFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiBjbGVhciB0aGUgcXVldWUgc28gd2UgZG9uJ3QgYWRkIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgLy8gKGFueXRoaW5nIGFmdGVyIHRoaXMgd2lsbCBiZSBhZGRlZCB0byBhIG5ldyBxdWV1ZSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbHMgPSBxdWV1ZVtxdWV1ZUlkeF1bMV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZVtxdWV1ZUlkeF07XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2FsbHMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpLnBpcGUoc3dpdGNoTWFwKChjYWxscykgPT4gcXVlcnkoY2FsbHMpKSk7XG4gICAgICAgICAgICBxdWV1ZS5wdXNoKFt2YWx1ZU9icywgW2NhbGxdXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZU9icyA9IHF1ZXVlW3F1ZXVlSWR4XVswXTtcbiAgICAgICAgICAgIHZhbHVlSWR4ID0gcXVldWVbcXVldWVJZHhdWzFdLmxlbmd0aDtcbiAgICAgICAgICAgIHF1ZXVlW3F1ZXVlSWR4XVsxXS5wdXNoKGNhbGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZU9icy5waXBlKFxuICAgICAgICAvLyByZXR1cm4gdGhlIHNpbmdsZSB2YWx1ZSBhdCB0aGlzIGluZGV4XG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXNbdmFsdWVJZHhdKSk7XG4gICAgfVxuICAgIC8vIERlY29yYXRlIHRoZSBiYXNlIHN0b3JhZ2UgY2FsbC4gSW4gdGhlIGNhc2Ugb3IgcnhqcyBvciBwcm9taXNlLXdpdGhvdXQtY2FsbGJhY2sgKGF3YWl0KVxuICAgIC8vIHdlIG1ha2UgYSBzdWJzY3JpcHRpb24sIGFsdGVybmF0aXZlbHkgd2UgcHVzaCB0aGlzIHRocm91Z2ggYSBzaW5nbGUtc2hvdCBxdWVyeVxuICAgIF9kZWNvcmF0ZVN0b3JhZ2VDYWxsKGNyZWF0b3IsIGRlY29yYXRlTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IG1lbW9lZCA9IG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FsbCA9IGV4dHJhY3RTdG9yYWdlQXJncyh0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5LCBjcmVhdG9yLCBhcmdzKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0U3RvcmFnZShjYWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9xdWV1ZVN0b3JhZ2UoY2FsbCwgdGhpcy5fX2ludGVybmFsX19zdG9yYWdlU3ViUSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QobWVtb2VkLCB7XG4gICAgICAgICAgICBtZXRob2ROYW1lOiBjcmVhdG9yLm1ldGhvZCxcbiAgICAgICAgICAgIG92ZXJyaWRlTm9TdWI6ICguLi5hcmdzKSA9PiB0aGlzLl9xdWV1ZVN0b3JhZ2UoZXh0cmFjdFN0b3JhZ2VBcmdzKHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnksIGNyZWF0b3IsIGFyZ3MpLCB0aGlzLl9faW50ZXJuYWxfX3N0b3JhZ2VHZXRRKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmV0cmlldmUgYSBzZXQgb2YgdmFsdWVzIGZvciBhIHNwZWNpZmljIHNldCBvZiBrZXlzIC0gaGVyZSB3ZSBjaHVuayB0aGUga2V5cyBpbnRvIFBBR0VfU0laRSBzaXplc1xuICAgIF9yZXRyaWV2ZU11bHRpKGtleXMsIGJsb2NrSGFzaCkge1xuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5oYXNTdWJzY3JpcHRpb25zICYmICFibG9ja0hhc2hcbiAgICAgICAgICAgID8gdGhpcy5fcnBjQ29yZS5zdGF0ZS5zdWJzY3JpYmVTdG9yYWdlXG4gICAgICAgICAgICA6IHRoaXMuX3JwY0NvcmUuc3RhdGUucXVlcnlTdG9yYWdlQXQ7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA8PSBQQUdFX1NJWkVfVikge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2NrSGFzaFxuICAgICAgICAgICAgICAgID8gcXVlcnkoa2V5cywgYmxvY2tIYXNoKVxuICAgICAgICAgICAgICAgIDogcXVlcnkoa2V5cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoYXJyYXlDaHVuayhrZXlzLCBQQUdFX1NJWkVfVikubWFwKChrKSA9PiBibG9ja0hhc2hcbiAgICAgICAgICAgID8gcXVlcnkoaywgYmxvY2tIYXNoKVxuICAgICAgICAgICAgOiBxdWVyeShrKSkpLnBpcGUobWFwKGFycmF5RmxhdHRlbikpO1xuICAgIH1cbiAgICBfcmV0cmlldmVNYXBLZXlzKHsgaXRlcktleSwgbWV0YSwgbWV0aG9kLCBzZWN0aW9uIH0sIGF0LCBhcmdzKSB7XG4gICAgICAgIGlmICghaXRlcktleSB8fCAhbWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXMgY2FuIG9ubHkgYmUgcmV0cmlldmVkIG9uIG1hcHMnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkS2V5ID0gaXRlcktleSguLi5hcmdzKS50b0hleCgpO1xuICAgICAgICBjb25zdCBzdGFydFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGhlYWRLZXkpO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGF0XG4gICAgICAgICAgICA/IChzdGFydEtleSkgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRLZXlzUGFnZWQoaGVhZEtleSwgUEFHRV9TSVpFX0ssIHN0YXJ0S2V5LCBhdClcbiAgICAgICAgICAgIDogKHN0YXJ0S2V5KSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmdldEtleXNQYWdlZChoZWFkS2V5LCBQQUdFX1NJWkVfSywgc3RhcnRLZXkpO1xuICAgICAgICBjb25zdCBzZXRNZXRhID0gKGtleSkgPT4ga2V5LnNldE1ldGEobWV0YSwgc2VjdGlvbiwgbWV0aG9kKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0U3ViamVjdC5waXBlKHN3aXRjaE1hcChxdWVyeSksIG1hcCgoa2V5cykgPT4ga2V5cy5tYXAoc2V0TWV0YSkpLCB0YXAoKGtleXMpID0+IG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGtleXMubGVuZ3RoID09PSBQQUdFX1NJWkVfS1xuICAgICAgICAgICAgICAgID8gc3RhcnRTdWJqZWN0Lm5leHQoa2V5c1tQQUdFX1NJWkVfSyAtIDFdLnRvSGV4KCkpXG4gICAgICAgICAgICAgICAgOiBzdGFydFN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgfSkpLCB0b0FycmF5KCksIC8vIHRvQXJyYXkgc2luY2Ugd2Ugd2FudCB0byBzdGFydFN1YmplY3QgdG8gYmUgY29tcGxldGVkXG4gICAgICAgIG1hcChhcnJheUZsYXR0ZW4pKTtcbiAgICB9XG4gICAgX3JldHJpZXZlTWFwS2V5c1BhZ2VkKHsgaXRlcktleSwgbWV0YSwgbWV0aG9kLCBzZWN0aW9uIH0sIGF0LCBvcHRzKSB7XG4gICAgICAgIGlmICghaXRlcktleSB8fCAhbWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXMgY2FuIG9ubHkgYmUgcmV0cmlldmVkIG9uIG1hcHMnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXRNZXRhID0gKGtleSkgPT4ga2V5LnNldE1ldGEobWV0YSwgc2VjdGlvbiwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBhdFxuICAgICAgICAgICAgPyAoaGVhZEtleSkgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRLZXlzUGFnZWQoaGVhZEtleSwgb3B0cy5wYWdlU2l6ZSwgb3B0cy5zdGFydEtleSB8fCBoZWFkS2V5LCBhdClcbiAgICAgICAgICAgIDogKGhlYWRLZXkpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0S2V5c1BhZ2VkKGhlYWRLZXksIG9wdHMucGFnZVNpemUsIG9wdHMuc3RhcnRLZXkgfHwgaGVhZEtleSk7XG4gICAgICAgIHJldHVybiBxdWVyeShpdGVyS2V5KC4uLm9wdHMuYXJncykudG9IZXgoKSkucGlwZShtYXAoKGtleXMpID0+IGtleXMubWFwKHNldE1ldGEpKSk7XG4gICAgfVxuICAgIF9yZXRyaWV2ZU1hcEVudHJpZXMoZW50cnksIGF0LCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gYXRcbiAgICAgICAgICAgID8gKGtleXMpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUucXVlcnlTdG9yYWdlQXQoa2V5cywgYXQpXG4gICAgICAgICAgICA6IChrZXlzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLnF1ZXJ5U3RvcmFnZUF0KGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmV0cmlldmVNYXBLZXlzKGVudHJ5LCBhdCwgYXJncykucGlwZShzd2l0Y2hNYXAoKGtleXMpID0+IGtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoYXJyYXlDaHVuayhrZXlzLCBQQUdFX1NJWkVfVikubWFwKHF1ZXJ5KSkucGlwZShtYXAoKHZhbHNBcnIpID0+IGFycmF5RmxhdHRlbih2YWxzQXJyKS5tYXAoKHZhbHVlLCBpbmRleCkgPT4gW2tleXNbaW5kZXhdLCB2YWx1ZV0pKSlcbiAgICAgICAgICAgIDogb2YoW10pKSk7XG4gICAgfVxuICAgIF9yZXRyaWV2ZU1hcEVudHJpZXNQYWdlZChlbnRyeSwgYXQsIG9wdHMpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBhdFxuICAgICAgICAgICAgPyAoa2V5cykgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5xdWVyeVN0b3JhZ2VBdChrZXlzLCBhdClcbiAgICAgICAgICAgIDogKGtleXMpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUucXVlcnlTdG9yYWdlQXQoa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXRyaWV2ZU1hcEtleXNQYWdlZChlbnRyeSwgYXQsIG9wdHMpLnBpcGUoc3dpdGNoTWFwKChrZXlzKSA9PiBrZXlzLmxlbmd0aFxuICAgICAgICAgICAgPyBxdWVyeShrZXlzKS5waXBlKG1hcCgodmFsc0FycikgPT4gdmFsc0Fyci5tYXAoKHZhbHVlLCBpbmRleCkgPT4gW2tleXNbaW5kZXhdLCB2YWx1ZV0pKSlcbiAgICAgICAgICAgIDogb2YoW10pKSk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZURlcml2ZVJ4KGRlY29yYXRlTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IHNwZWNOYW1lID0gdGhpcy5fcnVudGltZVZlcnNpb24/LnNwZWNOYW1lLnRvU3RyaW5nKCk7XG4gICAgICAgIC8vIFB1bGwgaW4gZGVyaXZlIGZyb20gYXBpLWRlcml2ZVxuICAgICAgICBjb25zdCBhdmFpbGFibGUgPSBnZXRBdmFpbGFibGVEZXJpdmVzKHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCwgdGhpcy5fcngsIG9iamVjdFNwcmVhZCh7fSwgdGhpcy5fb3B0aW9ucy5kZXJpdmVzLCB0aGlzLl9vcHRpb25zLnR5cGVzQnVuZGxlPy5zcGVjPy5bc3BlY05hbWUgfHwgJyddPy5kZXJpdmVzKSk7XG4gICAgICAgIHJldHVybiBkZWNvcmF0ZURlcml2ZVNlY3Rpb25zKGRlY29yYXRlTWV0aG9kLCBhdmFpbGFibGUpO1xuICAgIH1cbiAgICBfZGVjb3JhdGVEZXJpdmUoZGVjb3JhdGVNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGRlY29yYXRlRGVyaXZlU2VjdGlvbnMoZGVjb3JhdGVNZXRob2QsIHRoaXMuX3J4LmRlcml2ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1dCB0aGUgYHRoaXMub25DYWxsYCBmdW5jdGlvbiBvZiBBcGlSeCBoZXJlLCBiZWNhdXNlIGl0IGlzIG5lZWRlZCBieVxuICAgICAqIGBhcGkuX3J4YC5cbiAgICAgKi9cbiAgICBfcnhEZWNvcmF0ZU1ldGhvZCA9IChtZXRob2QpID0+IHtcbiAgICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5leHBvcnQgY2xhc3MgRXZlbnRzIHtcbiAgICBfX2ludGVybmFsX19ldmVudGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgZW1pdCh0eXBlLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2V2ZW50ZW1pdHRlci5lbWl0KHR5cGUsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXR0YWNoIGFuIGV2ZW50ZW1pdHRlciBoYW5kbGVyIHRvIGxpc3RlbiB0byBhIHNwZWNpZmljIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBldmVudCB0byBsaXN0ZW4gdG8uIEF2YWlsYWJsZSBldmVudHMgYXJlIGBjb25uZWN0ZWRgLCBgZGlzY29ubmVjdGVkYCwgYHJlYWR5YCBhbmQgYGVycm9yYFxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgZmlyZXMuIERlcGVuZGluZyBvbiB0aGUgZXZlbnQgdHlwZSwgaXQgY291bGQgZmlyZSB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogYXBpLm9uKCdjb25uZWN0ZWQnLCAoKTogdm9pZCA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnQVBJIGhhcyBiZWVuIGNvbm5lY3RlZCB0byB0aGUgZW5kcG9pbnQnKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGFwaS5vbignZGlzY29ubmVjdGVkJywgKCk6IHZvaWQgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coJ0FQSSBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgZW5kcG9pbnQnKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBvbih0eXBlLCBoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRlbWl0dGVyLm9uKHR5cGUsIGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZSB0aGUgZ2l2ZW4gZXZlbnRlbWl0dGVyIGhhbmRsZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGV2ZW50IHRoZSBjYWxsYmFjayB3YXMgYXR0YWNoZWQgdG8uIEF2YWlsYWJsZSBldmVudHMgYXJlIGBjb25uZWN0ZWRgLCBgZGlzY29ubmVjdGVkYCwgYHJlYWR5YCBhbmQgYGVycm9yYFxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBjYWxsYmFjayB0byB1bnJlZ2lzdGVyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogY29uc3QgaGFuZGxlciA9ICgpOiB2b2lkID0+IHtcbiAgICAgKiAgY29uc29sZS5sb2coJ0Nvbm5lY3RlZCAhKTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gU3RhcnQgbGlzdGVuaW5nXG4gICAgICogYXBpLm9uKCdjb25uZWN0ZWQnLCBoYW5kbGVyKTtcbiAgICAgKlxuICAgICAqIC8vIFN0b3AgbGlzdGVuaW5nXG4gICAgICogYXBpLm9mZignY29ubmVjdGVkJywgaGFuZGxlcik7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgb2ZmKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ldmVudGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIodHlwZSwgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXR0YWNoIGFuIG9uZS10aW1lIGV2ZW50ZW1pdHRlciBoYW5kbGVyIHRvIGxpc3RlbiB0byBhIHNwZWNpZmljIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBldmVudCB0byBsaXN0ZW4gdG8uIEF2YWlsYWJsZSBldmVudHMgYXJlIGBjb25uZWN0ZWRgLCBgZGlzY29ubmVjdGVkYCwgYHJlYWR5YCBhbmQgYGVycm9yYFxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgZmlyZXMuIERlcGVuZGluZyBvbiB0aGUgZXZlbnQgdHlwZSwgaXQgY291bGQgZmlyZSB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogYXBpLm9uY2UoJ2Nvbm5lY3RlZCcsICgpOiB2b2lkID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBUEkgaGFzIGJlZW4gY29ubmVjdGVkIHRvIHRoZSBlbmRwb2ludCcpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXBpLm9uY2UoJ2Rpc2Nvbm5lY3RlZCcsICgpOiB2b2lkID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBUEkgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gdGhlIGVuZHBvaW50Jyk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgb25jZSh0eXBlLCBoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRlbWl0dGVyLm9uY2UodHlwZSwgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi4vcGFja2FnZUluZm8uanMnO1xuaW1wb3J0IHsgZmluZENhbGwsIGZpbmRFcnJvciB9IGZyb20gJy4vZmluZC5qcyc7XG5pbXBvcnQgeyBJbml0IH0gZnJvbSAnLi9Jbml0LmpzJztcbmZ1bmN0aW9uIGFzc2VydFJlc3VsdCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFwaSBpbnRlcmZhY2VzIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2luZywgd2FpdCBmb3IgJ2lzUmVhZHknXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgY2xhc3MgR2V0dGVycyBleHRlbmRzIEluaXQge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSdW50aW1lIGNhbGwgaW50ZXJmYWNlcyAoY3VycmVudGx5IHVudHlwZWQsIG9ubHkgZGVjb3JhdGVkIHZpYSBBUEkgb3B0aW9ucylcbiAgICAgKi9cbiAgICBnZXQgY2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9jYWxsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgdHlwZXMgKGNvbnN0YW50cykgb2YgYWxsIG1vZHVsZXMuXG4gICAgICpcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBpbnN0YW5jZXMgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUgYW5kIGFyZSBhY2Nlc3NpYmxlIHVzaW5nIGBzZWN0aW9uYC5gY29uc3RhbnROYW1lYCxcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPEJSPlxuICAgICAqXG4gICAgICogYGBgamF2YXNjcmlwdFxuICAgICAqIGNvbnNvbGUubG9nKGFwaS5jb25zdHMuZGVtb2NyYWN5LmVuYWN0bWVudFBlcmlvZC50b1N0cmluZygpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBjb25zdHMoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fY29uc3RzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERlcml2ZWQgcmVzdWx0cyB0aGF0IGFyZSBpbmplY3RlZCBpbnRvIHRoZSBBUEksIGFsbG93aW5nIGZvciBjb21iaW5hdGlvbnMgb2YgdmFyaW91cyBxdWVyeSByZXN1bHRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogYXBpLmRlcml2ZS5jaGFpbi5iZXN0TnVtYmVyKChudW1iZXIpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdiZXN0IG51bWJlcicsIG51bWJlcik7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IGRlcml2ZSgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9kZXJpdmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXJyb3JzIGZyb20gbWV0YWRhdGFcbiAgICAgKi9cbiAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gYXNzZXJ0UmVzdWx0KHRoaXMuX2Vycm9ycyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudHMgZnJvbSBtZXRhZGF0YVxuICAgICAqL1xuICAgIGdldCBldmVudHMoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fZXZlbnRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uICBSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIGV4dHJpbnNpY3MgaW4tdXNlIG9uIHRoaXMgY2hhaW5cbiAgICAgKi9cbiAgICBnZXQgZXh0cmluc2ljVmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJpbnNpY1R5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250YWlucyB0aGUgZ2VuZXNpcyBIYXNoIG9mIHRoZSBhdHRhY2hlZCBjaGFpbi4gQXBhcnQgZnJvbSBiZWluZyB1c2VmdWwgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgY2hhaW4sIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gc2lnbiBpbW1vcnRhbCB0cmFuc2FjdGlvbnMuXG4gICAgICovXG4gICAgZ2V0IGdlbmVzaXNIYXNoKCkge1xuICAgICAgICByZXR1cm4gYXNzZXJ0UmVzdWx0KHRoaXMuX2dlbmVzaXNIYXNoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHRydWUgaXMgdGhlIHVuZGVybHlpbmcgcHJvdmlkZXIgaXMgY29ubmVjdGVkXG4gICAgICovXG4gICAgZ2V0IGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDb25uZWN0ZWQuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsaWJyYXJ5IGluZm9ybWF0aW9uIG5hbWUgJiB2ZXJzaW9uIChmcm9tIHBhY2thZ2UuanNvbilcbiAgICAgKi9cbiAgICBnZXQgbGlicmFyeUluZm8oKSB7XG4gICAgICAgIHJldHVybiBgJHtwYWNrYWdlSW5mby5uYW1lfSB2JHtwYWNrYWdlSW5mby52ZXJzaW9ufWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250YWlucyBhbGwgdGhlIGNoYWluIHN0YXRlIG1vZHVsZXMgYW5kIHRoZWlyIHN1YnNlcXVlbnQgbWV0aG9kcyBpbiB0aGUgQVBJLiBUaGVzZSBhcmUgYXR0YWNoZWQgZHluYW1pY2FsbHkgZnJvbSB0aGUgcnVudGltZSBtZXRhZGF0YS5cbiAgICAgKlxuICAgICAqIEFsbCBjYWxscyBpbnNpZGUgdGhlIG5hbWVzcGFjZSwgaXMgZGVub3RlZCBieSBgc2VjdGlvbmAuYG1ldGhvZGAgYW5kIG1heSB0YWtlIGFuIG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlci4gQXMgYW4gZXhhbXBsZSwgYGFwaS5xdWVyeS50aW1lc3RhbXAubm93KClgIChjdXJyZW50IGJsb2NrIHRpbWVzdGFtcCkgZG9lcyBub3QgdGFrZSBwYXJhbWV0ZXJzLCB3aGlsZSBgYXBpLnF1ZXJ5LnN5c3RlbS5hY2NvdW50KDxhY2NvdW50SWQ+KWAgKHJldHJpZXZpbmcgdGhlIGFzc29jaWF0ZWQgbm9uY2UgJiBiYWxhbmNlcyBmb3IgYW4gYWNjb3VudCksIHRha2VzIHRoZSBgQWNjb3VudElkYCBhcyBhIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPEJSPlxuICAgICAqXG4gICAgICogYGBgamF2YXNjcmlwdFxuICAgICAqIGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudCg8YWNjb3VudElkPiwgKFtub25jZSwgYmFsYW5jZV0pID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCduZXcgZnJlZSBiYWxhbmNlJywgYmFsYW5jZS5mcmVlLCAnbmV3IG5vbmNlJywgbm9uY2UpO1xuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9xdWVyeSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBbGxvd3MgZm9yIHRoZSBxdWVyeWluZyBvZiBtdWx0aXBsZSBzdG9yYWdlIGVudHJpZXMgYW5kIHRoZSBjb21iaW5hdGlvbiB0aGVyZW9mIGludG8gYSBzaW5nbGUgcmVzdWx0LiBUaGlzIGlzIGEgdmVyeSBvcHRpbWFsIHdheSB0byBtYWtlIG11bHRpcGxlIHF1ZXJpZXMgc2luY2UgaXQgb25seSBtYWtlcyBhIHNpbmdsZSBjb25uZWN0aW9uIHRvIHRoZSBub2RlIGFuZCByZXRyaWV2ZXMgdGhlIGRhdGEgb3ZlciBvbmUgc3Vic2NyaXB0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogY29uc3QgdW5zdWIgPSBhd2FpdCBhcGkucXVlcnlNdWx0aShcbiAgICAgKiAgIFtcbiAgICAgKiAgICAgLy8geW91IGNhbiBpbmNsdWRlIHRoZSBzdG9yYWdlIHdpdGhvdXQgYW55IHBhcmFtZXRlcnNcbiAgICAgKiAgICAgYXBpLnF1ZXJ5LmJhbGFuY2VzLnRvdGFsSXNzdWFuY2UsXG4gICAgICogICAgIC8vIG9yIHlvdSBjYW4gcGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSBzdG9yYWdlIHF1ZXJ5XG4gICAgICogICAgIFthcGkucXVlcnkuc3lzdGVtLmFjY291bnQsICc1R3J3dmFFRjV6WGIyNkZ6OXJjUXBEV1M1N0N0RVJIcE5laFhDUGNOb0hHS3V0UVknXVxuICAgICAqICAgXSxcbiAgICAgKiAgIChbZXhpc3RlbnRpYWwsIFssIHsgZnJlZSB9XV0pID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFlvdSBoYXZlICR7ZnJlZS5zdWIoZXhpc3RlbnRpYWwpfSBtb3JlIHRoYW4gdGhlIGV4aXN0ZW50aWFsIGRlcG9zaXRgKTtcbiAgICAgKlxuICAgICAqICAgICB1bnN1YigpO1xuICAgICAqICAgfVxuICAgICAqICk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IHF1ZXJ5TXVsdGkoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fcXVlcnlNdWx0aSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250YWlucyBhbGwgdGhlIHJhdyBycGMgc2VjdGlvbnMgYW5kIHRoZWlyIHN1YnNlcXVlbnQgbWV0aG9kcyBpbiB0aGUgQVBJIGFzIGRlZmluZWQgYnkgdGhlIGpzb25ycGMgaW50ZXJmYWNlIGRlZmluaXRpb25zLiBVbmxpa2UgdGhlIGR5bmFtaWMgYGFwaS5xdWVyeWAgYW5kIGBhcGkudHhgIHNlY3Rpb25zLCB0aGVzZSBtZXRob2RzIGFyZSBmaXhlZCAoYWx0aG91Z2ggZXh0ZW5zaWJsZSB3aXRoIG5vZGUgdXBncmFkZXMpIGFuZCBub3QgZGV0ZXJtaW5lZCBieSB0aGUgcnVudGltZS5cbiAgICAgKlxuICAgICAqIFJQQyBlbmRwb2ludHMgYXZhaWxhYmxlIGhlcmUgYWxsb3cgZm9yIHRoZSBxdWVyeSBvZiBjaGFpbiwgbm9kZSBhbmQgc3lzdGVtIGluZm9ybWF0aW9uLCBpbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgaW50ZXJmYWNlcyBmb3IgdGhlIHJhdyBxdWVyaWVzIG9mIHN0YXRlICh1c2luZyBrbm93biBrZXlzKSBhbmQgdGhlIHN1Ym1pc3Npb24gb2YgdHJhbnNhY3Rpb25zLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogYXBpLnJwYy5jaGFpbi5zdWJzY3JpYmVOZXdIZWFkcygoaGVhZGVyKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnbmV3IGhlYWRlcicsIGhlYWRlcik7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IHJwYygpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9ycGMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udGFpbnMgdGhlIGNoYWluIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBub2RlLlxuICAgICAqL1xuICAgIGdldCBydW50aW1lQ2hhaW4oKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fcnVudGltZUNoYWluKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFlpZWxkcyB0aGUgY3VycmVudCBhdHRhY2hlZCBydW50aW1lIG1ldGFkYXRhLiBHZW5lcmFsbHkgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29uc3RydWN0IGV4dHJpbnNpY3MgJiBzdG9yYWdlLCBidXQgaXMgdXNlZnVsIGZvciBjdXJyZW50IHJ1bnRpbWUgaW5zcGVjdGlvbi5cbiAgICAgKi9cbiAgICBnZXQgcnVudGltZU1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gYXNzZXJ0UmVzdWx0KHRoaXMuX3J1bnRpbWVNZXRhZGF0YSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250YWlucyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgcnVudGltZS5cbiAgICAgKi9cbiAgICBnZXQgcnVudGltZVZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fcnVudGltZVZlcnNpb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHVuZGVybHlpbmcgUnggQVBJIGludGVyZmFjZVxuICAgICAqL1xuICAgIGdldCByeCgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9yeCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHByb3ZpZGVyIHN0YXRzXG4gICAgICovXG4gICAgZ2V0IHN0YXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnBjQ29yZS5zdGF0cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0eXBlIG9mIHRoaXMgQVBJIGluc3RhbmNlLCBlaXRoZXIgJ3J4anMnIG9yICdwcm9taXNlJ1xuICAgICAqL1xuICAgIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRhaW5zIGFsbCB0aGUgZXh0cmluc2ljIG1vZHVsZXMgYW5kIHRoZWlyIHN1YnNlcXVlbnQgbWV0aG9kcyBpbiB0aGUgQVBJLiBJdCBhbGxvd3MgZm9yIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdHJhbnNhY3Rpb25zIGFuZCB0aGUgc3VibWlzc2lvbiB0aGVyZW9mLiBUaGVzZSBhcmUgYXR0YWNoZWQgZHluYW1pY2FsbHkgZnJvbSB0aGUgcnVudGltZSBtZXRhZGF0YS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPEJSPlxuICAgICAqXG4gICAgICogYGBgamF2YXNjcmlwdFxuICAgICAqIGFwaS50eC5iYWxhbmNlc1xuICAgICAqICAgLnRyYW5zZmVyQWxsb3dEZWF0aCg8cmVjaXBpZW50SWQ+LCA8YmFsYW5jZT4pXG4gICAgICogICAuc2lnbkFuZFNlbmQoPGtleVBhaXI+LCAoe3N0YXR1c30pID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ3R4IHN0YXR1cycsIHN0YXR1cy5hc0ZpbmFsaXplZC50b0hleCgpKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCB0eCgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9leHRyaW5zaWNzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZpbmRzIHRoZSBkZWZpbml0aW9uIGZvciBhIHNwZWNpZmljIFtbQ2FsbEZ1bmN0aW9uXV0gYmFzZWQgb24gdGhlIGluZGV4IHN1cHBsaWVkXG4gICAgICovXG4gICAgZmluZENhbGwoY2FsbEluZGV4KSB7XG4gICAgICAgIHJldHVybiBmaW5kQ2FsbCh0aGlzLnJlZ2lzdHJ5LCBjYWxsSW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRmluZHMgdGhlIGRlZmluaXRpb24gZm9yIGEgc3BlY2lmaWMgW1tSZWdpc3RyeUVycm9yXV0gYmFzZWQgb24gdGhlIGluZGV4IHN1cHBsaWVkXG4gICAgICovXG4gICAgZmluZEVycm9yKGVycm9ySW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRFcnJvcih0aGlzLnJlZ2lzdHJ5LCBlcnJvckluZGV4KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZXRhZGF0YSwgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzJztcbmltcG9ydCB7IGdldFNwZWNBbGlhcywgZ2V0U3BlY0V4dGVuc2lvbnMsIGdldFNwZWNIYXNoZXIsIGdldFNwZWNScGMsIGdldFNwZWNUeXBlcywgZ2V0VXBncmFkZVZlcnNpb24gfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMta25vd24nO1xuaW1wb3J0IHsgYXNzZXJ0UmV0dXJuLCBCTl9aRVJPLCBpc1VuZGVmaW5lZCwgbG9nZ2VyLCBub29wLCBvYmplY3RTcHJlYWQsIHU4YUVxLCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjcnlwdG9XYWl0UmVhZHkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgRGVjb3JhdGUgfSBmcm9tICcuL0RlY29yYXRlLmpzJztcbmNvbnN0IEtFRVBBTElWRV9JTlRFUlZBTCA9IDEwMDAwO1xuY29uc3QgV0lUSF9WRVJTSU9OX1NIT1JUQ1VUID0gZmFsc2U7XG5jb25zdCBsID0gbG9nZ2VyKCdhcGkvaW5pdCcpO1xuZnVuY3Rpb24gdGV4dFRvU3RyaW5nKHQpIHtcbiAgICByZXR1cm4gdC50b1N0cmluZygpO1xufVxuZXhwb3J0IGNsYXNzIEluaXQgZXh0ZW5kcyBEZWNvcmF0ZSB7XG4gICAgX19pbnRlcm5hbF9fYXRMYXN0ID0gbnVsbDtcbiAgICBfX2ludGVybmFsX19oZWFsdGhUaW1lciA9IG51bGw7XG4gICAgX19pbnRlcm5hbF9fcmVnaXN0cmllcyA9IFtdO1xuICAgIF9faW50ZXJuYWxfX3VwZGF0ZVN1YiA9IG51bGw7XG4gICAgX19pbnRlcm5hbF9fd2FpdGluZ1JlZ2lzdHJpZXMgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICBzdXBlcihvcHRpb25zLCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCk7XG4gICAgICAgIC8vIGFsbCBpbmplY3RlZCB0eXBlcyBhZGRlZCB0byB0aGUgcmVnaXN0cnkgZm9yIG92ZXJyaWRlc1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5LnNldEtub3duVHlwZXMob3B0aW9ucyk7XG4gICAgICAgIC8vIFdlIG9ubHkgcmVnaXN0ZXIgdGhlIHR5cGVzIChnbG9iYWwpIGlmIHRoaXMgaXMgbm90IGEgY2xvbmVkIGluc3RhbmNlLlxuICAgICAgICAvLyBEbyByaWdodCB1cC1mcm9udCwgc28gd2UgZ2V0IGluIHRoZSB1c2VyIHR5cGVzIGJlZm9yZSB3ZSBhcmUgYWN0dWFsbHlcbiAgICAgICAgLy8gZG9pbmcgYW55dGhpbmcgb24tY2hhaW4sIHRoaXMgZW5zdXJlcyB3ZSBoYXZlIHRoZSBvdmVycmlkZXMgaW4tcGxhY2VcbiAgICAgICAgaWYgKCFvcHRpb25zLnNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVzKG9wdGlvbnMudHlwZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19yZWdpc3RyaWVzID0gb3B0aW9ucy5zb3VyY2UuX19pbnRlcm5hbF9fcmVnaXN0cmllcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ycGMgPSB0aGlzLl9kZWNvcmF0ZVJwYyh0aGlzLl9ycGNDb3JlLCB0aGlzLl9kZWNvcmF0ZU1ldGhvZCk7XG4gICAgICAgIHRoaXMuX3J4LnJwYyA9IHRoaXMuX2RlY29yYXRlUnBjKHRoaXMuX3JwY0NvcmUsIHRoaXMuX3J4RGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0TXVsdGkpIHtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5TXVsdGkgPSB0aGlzLl9kZWNvcmF0ZU11bHRpKHRoaXMuX2RlY29yYXRlTWV0aG9kKTtcbiAgICAgICAgICAgIHRoaXMuX3J4LnF1ZXJ5TXVsdGkgPSB0aGlzLl9kZWNvcmF0ZU11bHRpKHRoaXMuX3J4RGVjb3JhdGVNZXRob2QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3J4LnNpZ25lciA9IG9wdGlvbnMuc2lnbmVyO1xuICAgICAgICB0aGlzLl9ycGNDb3JlLnNldFJlZ2lzdHJ5U3dhcCgoYmxvY2tIYXNoKSA9PiB0aGlzLmdldEJsb2NrUmVnaXN0cnkoYmxvY2tIYXNoKSk7XG4gICAgICAgIHRoaXMuX3JwY0NvcmUuc2V0UmVzb2x2ZUJsb2NrSGFzaCgoYmxvY2tOdW1iZXIpID0+IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuY2hhaW4uZ2V0QmxvY2tIYXNoKGJsb2NrTnVtYmVyKSkpO1xuICAgICAgICBpZiAodGhpcy5oYXNTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9ycGNDb3JlLnByb3ZpZGVyLm9uKCdkaXNjb25uZWN0ZWQnLCAoKSA9PiB0aGlzLl9faW50ZXJuYWxfX29uUHJvdmlkZXJEaXNjb25uZWN0KCkpO1xuICAgICAgICAgICAgdGhpcy5fcnBjQ29yZS5wcm92aWRlci5vbignZXJyb3InLCAoZSkgPT4gdGhpcy5fX2ludGVybmFsX19vblByb3ZpZGVyRXJyb3IoZSkpO1xuICAgICAgICAgICAgdGhpcy5fcnBjQ29yZS5wcm92aWRlci5vbignY29ubmVjdGVkJywgKCkgPT4gdGhpcy5fX2ludGVybmFsX19vblByb3ZpZGVyQ29ubmVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5fb3B0aW9ucy5ub0luaXRXYXJuKSB7XG4gICAgICAgICAgICBsLndhcm4oJ0FwaSB3aWxsIGJlIGF2YWlsYWJsZSBpbiBhIGxpbWl0ZWQgbW9kZSBzaW5jZSB0aGUgcHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydCBzdWJzY3JpcHRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHByb3ZpZGVyIHdhcyBpbnN0YW50aWF0ZWQgZWFybGllciwgYW5kIGhhcyBhbHJlYWR5IGVtaXR0ZWQgYVxuICAgICAgICAvLyAnY29ubmVjdGVkJyBldmVudCwgdGhlbiB0aGUgYG9uKCdjb25uZWN0ZWQnKWAgd29uJ3QgZmlyZSBhbnltb3JlLiBUb1xuICAgICAgICAvLyBjYXRlciBmb3IgdGhpcyBjYXNlLCB3ZSBjYWxsIG1hbnVhbGx5IGB0aGlzLl9vblByb3ZpZGVyQ29ubmVjdGAuXG4gICAgICAgIGlmICh0aGlzLl9ycGNDb3JlLnByb3ZpZGVyLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX29uUHJvdmlkZXJDb25uZWN0KCkuY2F0Y2gobm9vcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERlY29yYXRlcyBhIHJlZ2lzdHJ5IGJhc2VkIG9uIHRoZSBydW50aW1lIHZlcnNpb25cbiAgICAgKi9cbiAgICBfaW5pdFJlZ2lzdHJ5KHJlZ2lzdHJ5LCBjaGFpbiwgdmVyc2lvbiwgbWV0YWRhdGEsIGNoYWluUHJvcHMpIHtcbiAgICAgICAgcmVnaXN0cnkuY2xlYXJDYWNoZSgpO1xuICAgICAgICByZWdpc3RyeS5zZXRDaGFpblByb3BlcnRpZXMoY2hhaW5Qcm9wcyB8fCB0aGlzLnJlZ2lzdHJ5LmdldENoYWluUHJvcGVydGllcygpKTtcbiAgICAgICAgcmVnaXN0cnkuc2V0S25vd25UeXBlcyh0aGlzLl9vcHRpb25zKTtcbiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoZ2V0U3BlY1R5cGVzKHJlZ2lzdHJ5LCBjaGFpbiwgdmVyc2lvbi5zcGVjTmFtZSwgdmVyc2lvbi5zcGVjVmVyc2lvbikpO1xuICAgICAgICByZWdpc3RyeS5zZXRIYXNoZXIoZ2V0U3BlY0hhc2hlcihyZWdpc3RyeSwgY2hhaW4sIHZlcnNpb24uc3BlY05hbWUpKTtcbiAgICAgICAgLy8gZm9yIGJ1bmRsZWQgdHlwZXMsIHB1bGwgdGhyb3VnaCB0aGUgYWxpYXNlcyBkZWZpbmVkXG4gICAgICAgIGlmIChyZWdpc3RyeS5rbm93blR5cGVzLnR5cGVzQnVuZGxlKSB7XG4gICAgICAgICAgICByZWdpc3RyeS5rbm93blR5cGVzLnR5cGVzQWxpYXMgPSBnZXRTcGVjQWxpYXMocmVnaXN0cnksIGNoYWluLCB2ZXJzaW9uLnNwZWNOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RyeS5zZXRNZXRhZGF0YShtZXRhZGF0YSwgdW5kZWZpbmVkLCBvYmplY3RTcHJlYWQoe30sIGdldFNwZWNFeHRlbnNpb25zKHJlZ2lzdHJ5LCBjaGFpbiwgdmVyc2lvbi5zcGVjTmFtZSksIHRoaXMuX29wdGlvbnMuc2lnbmVkRXh0ZW5zaW9ucyksIHRoaXMuX29wdGlvbnMubm9Jbml0V2Fybik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBkZWZhdWx0IHZlcnNpb25lZCByZWdpc3RyeVxuICAgICAqL1xuICAgIF9nZXREZWZhdWx0UmVnaXN0cnkoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXR1cm4odGhpcy5fX2ludGVybmFsX19yZWdpc3RyaWVzLmZpbmQoKHsgaXNEZWZhdWx0IH0pID0+IGlzRGVmYXVsdCksICdJbml0aWFsaXphdGlvbiBlcnJvciwgY2Fubm90IGZpbmQgdGhlIGRlZmF1bHQgcmVnaXN0cnknKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBkZWNvcmF0ZWQgQVBJIGluc3RhbmNlIGF0IGEgc3BlY2lmaWMgcG9pbnQgaW4gdGltZVxuICAgICAqL1xuICAgIGFzeW5jIGF0KGJsb2NrSGFzaCwga25vd25WZXJzaW9uKSB7XG4gICAgICAgIGNvbnN0IHU4YUhhc2ggPSB1OGFUb1U4YShibG9ja0hhc2gpO1xuICAgICAgICBjb25zdCB1OGFIZXggPSB1OGFUb0hleCh1OGFIYXNoKTtcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCB0aGlzLmdldEJsb2NrUmVnaXN0cnkodThhSGFzaCwga25vd25WZXJzaW9uKTtcbiAgICAgICAgaWYgKCF0aGlzLl9faW50ZXJuYWxfX2F0TGFzdCB8fCB0aGlzLl9faW50ZXJuYWxfX2F0TGFzdFswXSAhPT0gdThhSGV4KSB7XG4gICAgICAgICAgICAvLyBhbHdheXMgY3JlYXRlIGEgbmV3IGRlY29yYXRpb24gLSBzaW5jZSB3ZSBhcmUgcG9pbnRpbmcgdG8gYSBzcGVjaWZpYyBoYXNoLCB0aGlzXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGFsbCBxdWVyaWVzIG5lZWRzIHRvIHVzZSB0aGF0IGhhc2ggKG5vdCBhIHByZXZpb3VzIG9uZSBhbHJlYWR5IGV4aXN0aW5nKVxuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19hdExhc3QgPSBbdThhSGV4LCB0aGlzLl9jcmVhdGVEZWNvcmF0ZWQocmVnaXN0cnksIHRydWUsIG51bGwsIHU4YUhhc2gpLmRlY29yYXRlZEFwaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYXRMYXN0WzFdO1xuICAgIH1cbiAgICBhc3luYyBfY3JlYXRlQmxvY2tSZWdpc3RyeShibG9ja0hhc2gsIGhlYWRlciwgdmVyc2lvbikge1xuICAgICAgICBjb25zdCByZWdpc3RyeSA9IG5ldyBUeXBlUmVnaXN0cnkoYmxvY2tIYXNoKTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEocmVnaXN0cnksIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0TWV0YWRhdGEucmF3KGhlYWRlci5wYXJlbnRIYXNoKSkpO1xuICAgICAgICBjb25zdCBydW50aW1lQ2hhaW4gPSB0aGlzLl9ydW50aW1lQ2hhaW47XG4gICAgICAgIGlmICghcnVudGltZUNoYWluKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5pdGlhbGl6aW9uIG9yZGVyLCBydW50aW1lQ2hhaW4gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRSZWdpc3RyeShyZWdpc3RyeSwgcnVudGltZUNoYWluLCB2ZXJzaW9uLCBtZXRhZGF0YSk7XG4gICAgICAgIC8vIGFkZCBvdXIgbmV3IHJlZ2lzdHJ5XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgY291bnRlcjogMCwgbGFzdEJsb2NrSGFzaDogYmxvY2tIYXNoLCBtZXRhZGF0YSwgcmVnaXN0cnksIHJ1bnRpbWVWZXJzaW9uOiB2ZXJzaW9uIH07XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cmllcy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9jYWNoZUJsb2NrUmVnaXN0cnlQcm9ncmVzcyhrZXksIGNyZWF0b3IpIHtcbiAgICAgICAgLy8gbG9vayBmb3Igd2FpdGluZyByZXNvbHZlc1xuICAgICAgICBsZXQgd2FpdGluZyA9IHRoaXMuX19pbnRlcm5hbF9fd2FpdGluZ1JlZ2lzdHJpZXNba2V5XTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHdhaXRpbmcpKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHdhaXRpbmcsIGNvbnN0cnVjdCBuZXdcbiAgICAgICAgICAgIHdhaXRpbmcgPSB0aGlzLl9faW50ZXJuYWxfX3dhaXRpbmdSZWdpc3RyaWVzW2tleV0gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY3JlYXRvcigpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChyZWdpc3RyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fX2ludGVybmFsX193YWl0aW5nUmVnaXN0cmllc1trZXldO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9faW50ZXJuYWxfX3dhaXRpbmdSZWdpc3RyaWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2FpdGluZztcbiAgICB9XG4gICAgX2dldEJsb2NrUmVnaXN0cnlWaWFWZXJzaW9uKGJsb2NrSGFzaCwgdmVyc2lvbikge1xuICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHByZS1leGlzdGluZyByZWdpc3RyaWVzLiBXZSBhbHNvIGNoZWNrIHNwZWNOYW1lLCBlLmcuIGl0XG4gICAgICAgICAgICAvLyBjb3VsZCBiZSBjaGFuZ2VkIGxpa2UgaW4gV2VzdG1pbnQgd2l0aCB1cGdyYWRlIGZyb20gc2hlbGwgLT4gd2VzdG1pbnRcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nVmlhVmVyc2lvbiA9IHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cmllcy5maW5kKCh7IHJ1bnRpbWVWZXJzaW9uOiB7IHNwZWNOYW1lLCBzcGVjVmVyc2lvbiB9IH0pID0+IHNwZWNOYW1lLmVxKHZlcnNpb24uc3BlY05hbWUpICYmXG4gICAgICAgICAgICAgICAgc3BlY1ZlcnNpb24uZXEodmVyc2lvbi5zcGVjVmVyc2lvbikpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nVmlhVmVyc2lvbikge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmlhVmVyc2lvbi5jb3VudGVyKys7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdWaWFWZXJzaW9uLmxhc3RCbG9ja0hhc2ggPSBibG9ja0hhc2g7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVmlhVmVyc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgYXN5bmMgX2dldEJsb2NrUmVnaXN0cnlWaWFIYXNoKGJsb2NrSGFzaCkge1xuICAgICAgICAvLyBlbnN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHJlcXVpcmVkXG4gICAgICAgIGlmICghdGhpcy5fZ2VuZXNpc0hhc2ggfHwgIXRoaXMuX3J1bnRpbWVWZXJzaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBkYXRhIG9uIGFuIHVuaW5pdGlhbGl6ZWQgY2hhaW4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBoYXZlIHRvIGFzc3VtZSB0aGF0IG9uIHRoZSBSUEMgbGF5ZXIgdGhlIGNhbGxzIHVzZWQgaGVyZSBkb2VzIG5vdCBjYWxsIGJhY2sgaW50b1xuICAgICAgICAvLyB0aGUgcmVnaXN0cnkgc3dhcCwgc28gZ2V0SGVhZGVyICYgZ2V0UnVudGltZVZlcnNpb24gc2hvdWxkIG5vdCBiZSBoaXN0b3JpY1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0hlYWRlclBhcnRpYWwnLCB0aGlzLl9nZW5lc2lzSGFzaC5lcShibG9ja0hhc2gpXG4gICAgICAgICAgICA/IHsgbnVtYmVyOiBCTl9aRVJPLCBwYXJlbnRIYXNoOiB0aGlzLl9nZW5lc2lzSGFzaCB9XG4gICAgICAgICAgICA6IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuY2hhaW4uZ2V0SGVhZGVyLnJhdyhibG9ja0hhc2gpKSk7XG4gICAgICAgIGlmIChoZWFkZXIucGFyZW50SGFzaC5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSBoZWFkZXIgYW5kIHBhcmVudCBmcm9tIHN1cHBsaWVkIGhhc2gnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgdGhlIHJ1bnRpbWUgdmVyc2lvbiwgZWl0aGVyIG9uLWNoYWluIG9yIHZpYSBhbiBrbm93biB1cGdyYWRlIGhpc3RvcnlcbiAgICAgICAgY29uc3QgW2ZpcnN0VmVyc2lvbiwgbGFzdFZlcnNpb25dID0gZ2V0VXBncmFkZVZlcnNpb24odGhpcy5fZ2VuZXNpc0hhc2gsIGhlYWRlci5udW1iZXIpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5yZWdpc3RyeS5jcmVhdGVUeXBlKCdSdW50aW1lVmVyc2lvblBhcnRpYWwnLCBXSVRIX1ZFUlNJT05fU0hPUlRDVVQgJiYgKGZpcnN0VmVyc2lvbiAmJiAobGFzdFZlcnNpb24gfHxcbiAgICAgICAgICAgIGZpcnN0VmVyc2lvbi5zcGVjVmVyc2lvbi5lcSh0aGlzLl9ydW50aW1lVmVyc2lvbi5zcGVjVmVyc2lvbikpKVxuICAgICAgICAgICAgPyB7IGFwaXM6IGZpcnN0VmVyc2lvbi5hcGlzLCBzcGVjTmFtZTogdGhpcy5fcnVudGltZVZlcnNpb24uc3BlY05hbWUsIHNwZWNWZXJzaW9uOiBmaXJzdFZlcnNpb24uc3BlY1ZlcnNpb24gfVxuICAgICAgICAgICAgOiBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9ycGNDb3JlLnN0YXRlLmdldFJ1bnRpbWVWZXJzaW9uLnJhdyhoZWFkZXIucGFyZW50SGFzaCkpKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgdmlhIHZlcnNpb25cbiAgICAgICAgdGhpcy5fZ2V0QmxvY2tSZWdpc3RyeVZpYVZlcnNpb24oYmxvY2tIYXNoLCB2ZXJzaW9uKSB8fFxuICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBvciBpbi1mbGlnaHQgcmVzdWx0XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jYWNoZUJsb2NrUmVnaXN0cnlQcm9ncmVzcyh2ZXJzaW9uLnRvSGV4KCksICgpID0+IHRoaXMuX2NyZWF0ZUJsb2NrUmVnaXN0cnkoYmxvY2tIYXNoLCBoZWFkZXIsIHZlcnNpb24pKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRzIHVwIGEgcmVnaXN0cnkgYmFzZWQgb24gdGhlIGJsb2NrIGhhc2ggZGVmaW5lZFxuICAgICAqL1xuICAgIGFzeW5jIGdldEJsb2NrUmVnaXN0cnkoYmxvY2tIYXNoLCBrbm93blZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgdmlhIGJsb2NrSGFzaFxuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJpZXMuZmluZCgoeyBsYXN0QmxvY2tIYXNoIH0pID0+IGxhc3RCbG9ja0hhc2ggJiYgdThhRXEobGFzdEJsb2NrSGFzaCwgYmxvY2tIYXNoKSkgfHxcbiAgICAgICAgICAgIC8vIHRyeSB0byBmaW5kIHZpYSB2ZXJzaW9uXG4gICAgICAgICAgICB0aGlzLl9nZXRCbG9ja1JlZ2lzdHJ5VmlhVmVyc2lvbihibG9ja0hhc2gsIGtub3duVmVyc2lvbikgfHxcbiAgICAgICAgICAgIC8vIHJldHVybiBuZXcgb3IgaW4tZmxpZ2h0IHJlc3VsdFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2FjaGVCbG9ja1JlZ2lzdHJ5UHJvZ3Jlc3ModThhVG9IZXgoYmxvY2tIYXNoKSwgKCkgPT4gdGhpcy5fZ2V0QmxvY2tSZWdpc3RyeVZpYUhhc2goYmxvY2tIYXNoKSkpO1xuICAgIH1cbiAgICBhc3luYyBfbG9hZE1ldGEoKSB7XG4gICAgICAgIC8vIG9uIHJlLWNvbm5lY3Rpb24gdG8gdGhlIHNhbWUgY2hhaW4sIHdlIGRvbid0IHdhbnQgdG8gcmUtZG8gZXZlcnl0aGluZyBmcm9tIGNoYWluIGFnYWluXG4gICAgICAgIGlmICh0aGlzLl9pc1JlYWR5KSB7XG4gICAgICAgICAgICAvLyBvbiByZS1jb25uZWN0aW9uIG9ubHkgcmUtc3Vic2NyaWJlIHRvIGNoYWluIHVwZGF0ZXMgaWYgd2UgYXJlIG5vdCBhIGNsb25lXG4gICAgICAgICAgICBpZiAoIXRoaXMuX29wdGlvbnMuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlVXBkYXRlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVVcGRhdGVzKCk7XG4gICAgICAgIC8vIG9ubHkgbG9hZCBmcm9tIG9uLWNoYWluIGlmIHdlIGFyZSBub3QgYSBjbG9uZSAoZGVmYXVsdCBwYXRoKSwgYWx0ZXJuYXRpdmVseVxuICAgICAgICAvLyBqdXN0IHVzZSB0aGUgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBpbnN0YW5jZSBwcm92aWRlZFxuICAgICAgICBbdGhpcy5fZ2VuZXNpc0hhc2gsIHRoaXMuX3J1bnRpbWVNZXRhZGF0YV0gPSB0aGlzLl9vcHRpb25zLnNvdXJjZT8uX2lzUmVhZHlcbiAgICAgICAgICAgID8gYXdhaXQgdGhpcy5fbWV0YUZyb21Tb3VyY2UodGhpcy5fb3B0aW9ucy5zb3VyY2UpXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuX21ldGFGcm9tQ2hhaW4odGhpcy5fb3B0aW9ucy5tZXRhZGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0RnJvbU1ldGEodGhpcy5fcnVudGltZU1ldGFkYXRhKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gICAgYXN5bmMgX21ldGFGcm9tU291cmNlKHNvdXJjZSkge1xuICAgICAgICB0aGlzLl9leHRyaW5zaWNUeXBlID0gc291cmNlLmV4dHJpbnNpY1ZlcnNpb247XG4gICAgICAgIHRoaXMuX3J1bnRpbWVDaGFpbiA9IHNvdXJjZS5ydW50aW1lQ2hhaW47XG4gICAgICAgIHRoaXMuX3J1bnRpbWVWZXJzaW9uID0gc291cmNlLnJ1bnRpbWVWZXJzaW9uO1xuICAgICAgICAvLyBtYW51YWxseSBidWlsZCBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBtZXRob2RzIGluIHRoaXMgUlBDLCB3ZSBhcmVcbiAgICAgICAgLy8gZ29pbmcgdG8gZmlsdGVyIG9uIGl0IHRvIGFsaWduIHRoZSBjbG9uZWQgUlBDIHdpdGhvdXQgbWFraW5nIGEgY2FsbFxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IE9iamVjdC5rZXlzKHNvdXJjZS5ycGMpO1xuICAgICAgICBjb25zdCBycGNzID0gW107XG4gICAgICAgIGZvciAobGV0IHMgPSAwLCBzY291bnQgPSBzZWN0aW9ucy5sZW5ndGg7IHMgPCBzY291bnQ7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW3NdO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5rZXlzKHNvdXJjZS5ycGNbc2VjdGlvbl0pO1xuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDAsIG1jb3VudCA9IG1ldGhvZHMubGVuZ3RoOyBtIDwgbWNvdW50OyBtKyspIHtcbiAgICAgICAgICAgICAgICBycGNzLnB1c2goYCR7c2VjdGlvbn1fJHttZXRob2RzW21dfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpbHRlclJwYyhycGNzLCBnZXRTcGVjUnBjKHRoaXMucmVnaXN0cnksIHNvdXJjZS5ydW50aW1lQ2hhaW4sIHNvdXJjZS5ydW50aW1lVmVyc2lvbi5zcGVjTmFtZSkpO1xuICAgICAgICByZXR1cm4gW3NvdXJjZS5nZW5lc2lzSGFzaCwgc291cmNlLnJ1bnRpbWVNZXRhZGF0YV07XG4gICAgfVxuICAgIC8vIHN1YnNjcmliZSB0byBtZXRhZGF0YSB1cGRhdGVzLCBpbmplY3QgdGhlIHR5cGVzIG9uIGNoYW5nZXNcbiAgICBfc3Vic2NyaWJlVXBkYXRlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fdXBkYXRlU3ViIHx8ICF0aGlzLmhhc1N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3VwZGF0ZVN1YiA9IHRoaXMuX3JwY0NvcmUuc3RhdGUuc3Vic2NyaWJlUnVudGltZVZlcnNpb24oKS5waXBlKHN3aXRjaE1hcCgodmVyc2lvbikgPT4gXG4gICAgICAgIC8vIG9ubHkgcmV0cmlldmUgdGhlIG1ldGFkYXRhIHdoZW4gdGhlIG9uLWNoYWluIHZlcnNpb24gaGFzIGJlZW4gY2hhbmdlZFxuICAgICAgICB0aGlzLl9ydW50aW1lVmVyc2lvbj8uc3BlY1ZlcnNpb24uZXEodmVyc2lvbi5zcGVjVmVyc2lvbilcbiAgICAgICAgICAgID8gb2YoZmFsc2UpXG4gICAgICAgICAgICA6IHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0TWV0YWRhdGEoKS5waXBlKG1hcCgobWV0YWRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBsLmxvZyhgUnVudGltZSB2ZXJzaW9uIHVwZGF0ZWQgdG8gc3BlYz0ke3ZlcnNpb24uc3BlY1ZlcnNpb24udG9TdHJpbmcoKX0sIHR4PSR7dmVyc2lvbi50cmFuc2FjdGlvblZlcnNpb24udG9TdHJpbmcoKX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ydW50aW1lTWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ydW50aW1lVmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgdGhpcy5fcngucnVudGltZVZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgZGVmYXVsdCByZWdpc3RyeSB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc1JlZ2lzdHJ5ID0gdGhpcy5fZ2V0RGVmYXVsdFJlZ2lzdHJ5KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVudGltZUNoYWluID0gdGhpcy5fcnVudGltZUNoYWluO1xuICAgICAgICAgICAgICAgIGlmICghcnVudGltZUNoYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbml0aWFsaXppb24gb3JkZXIsIHJ1bnRpbWVDaGFpbiBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNldHVwIHRoZSBkYXRhIGFzIHBlciB0aGUgY3VycmVudCB2ZXJzaW9uc1xuICAgICAgICAgICAgICAgIHRoaXNSZWdpc3RyeS5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXNSZWdpc3RyeS5ydW50aW1lVmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdFJlZ2lzdHJ5KHRoaXMucmVnaXN0cnksIHJ1bnRpbWVDaGFpbiwgdmVyc2lvbiwgbWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdE1ldGFkYXRhKHRoaXNSZWdpc3RyeSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSkpKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgYXN5bmMgX21ldGFGcm9tQ2hhaW4ob3B0TWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgW2dlbmVzaXNIYXNoLCBydW50aW1lVmVyc2lvbiwgY2hhaW4sIGNoYWluUHJvcHMsIHJwY01ldGhvZHMsIGNoYWluTWV0YWRhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20odGhpcy5fcnBjQ29yZS5jaGFpbi5nZXRCbG9ja0hhc2goMCkpLFxuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20odGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRSdW50aW1lVmVyc2lvbigpKSxcbiAgICAgICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuc3lzdGVtLmNoYWluKCkpLFxuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20odGhpcy5fcnBjQ29yZS5zeXN0ZW0ucHJvcGVydGllcygpKSxcbiAgICAgICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUucnBjLm1ldGhvZHMoKSksXG4gICAgICAgICAgICBvcHRNZXRhZGF0YVxuICAgICAgICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgICAgOiBmaXJzdFZhbHVlRnJvbSh0aGlzLl9ycGNDb3JlLnN0YXRlLmdldE1ldGFkYXRhKCkpXG4gICAgICAgIF0pO1xuICAgICAgICAvLyBzZXQgb3VyIGNoYWluIHZlcnNpb24gJiBnZW5lc2lzSGFzaCBhcyByZXR1cm5lZFxuICAgICAgICB0aGlzLl9ydW50aW1lQ2hhaW4gPSBjaGFpbjtcbiAgICAgICAgdGhpcy5fcnVudGltZVZlcnNpb24gPSBydW50aW1lVmVyc2lvbjtcbiAgICAgICAgdGhpcy5fcngucnVudGltZVZlcnNpb24gPSBydW50aW1lVmVyc2lvbjtcbiAgICAgICAgLy8gcmV0cmlldmUgbWV0YWRhdGEsIGVpdGhlciBmcm9tIGNoYWluICBvciBhcyBwYXNzLWluIHZpYSBvcHRpb25zXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhS2V5ID0gYCR7Z2VuZXNpc0hhc2gudG9IZXgoKSB8fCAnMHgnfS0ke3J1bnRpbWVWZXJzaW9uLnNwZWNWZXJzaW9uLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBjaGFpbk1ldGFkYXRhIHx8IChvcHRNZXRhZGF0YT8uW21ldGFkYXRhS2V5XVxuICAgICAgICAgICAgPyBuZXcgTWV0YWRhdGEodGhpcy5yZWdpc3RyeSwgb3B0TWV0YWRhdGFbbWV0YWRhdGFLZXldKVxuICAgICAgICAgICAgOiBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9ycGNDb3JlLnN0YXRlLmdldE1ldGFkYXRhKCkpKTtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZXMgdGhlIHJlZ2lzdHJ5ICYgUlBDXG4gICAgICAgIHRoaXMuX2luaXRSZWdpc3RyeSh0aGlzLnJlZ2lzdHJ5LCBjaGFpbiwgcnVudGltZVZlcnNpb24sIG1ldGFkYXRhLCBjaGFpblByb3BzKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyUnBjKHJwY01ldGhvZHMubWV0aG9kcy5tYXAodGV4dFRvU3RyaW5nKSwgZ2V0U3BlY1JwYyh0aGlzLnJlZ2lzdHJ5LCBjaGFpbiwgcnVudGltZVZlcnNpb24uc3BlY05hbWUpKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVXBkYXRlcygpO1xuICAgICAgICAvLyBzZXR1cCB0aGUgaW5pdGlhbCByZWdpc3RyeSwgd2hlbiB3ZSBoYXZlIG5vbmVcbiAgICAgICAgaWYgKCF0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJpZXMucHVzaCh7IGNvdW50ZXI6IDAsIGlzRGVmYXVsdDogdHJ1ZSwgbWV0YWRhdGEsIHJlZ2lzdHJ5OiB0aGlzLnJlZ2lzdHJ5LCBydW50aW1lVmVyc2lvbiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgdW5pcXVlIHR5cGVzICYgdmFsaWRhdGVcbiAgICAgICAgbWV0YWRhdGEuZ2V0VW5pcVR5cGVzKHRoaXMuX29wdGlvbnMudGhyb3dPblVua25vd24gfHwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gW2dlbmVzaXNIYXNoLCBtZXRhZGF0YV07XG4gICAgfVxuICAgIF9pbml0RnJvbU1ldGEobWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVZlcnNpb24gPSB0aGlzLl9ydW50aW1lVmVyc2lvbjtcbiAgICAgICAgaWYgKCFydW50aW1lVmVyc2lvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluaXRpYWxpemlvbiBvcmRlciwgcnVudGltZVZlcnNpb24gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V4dHJpbnNpY1R5cGUgPSBtZXRhZGF0YS5hc0xhdGVzdC5leHRyaW5zaWMudmVyc2lvbi50b051bWJlcigpO1xuICAgICAgICB0aGlzLl9yeC5leHRyaW5zaWNUeXBlID0gdGhpcy5fZXh0cmluc2ljVHlwZTtcbiAgICAgICAgdGhpcy5fcnguZ2VuZXNpc0hhc2ggPSB0aGlzLl9nZW5lc2lzSGFzaDtcbiAgICAgICAgdGhpcy5fcngucnVudGltZVZlcnNpb24gPSBydW50aW1lVmVyc2lvbjtcbiAgICAgICAgLy8gaW5qZWN0IG1ldGFkYXRhIGFuZCBhZGp1c3QgdGhlIHR5cGVzIGFzIGRldGVjdGVkXG4gICAgICAgIHRoaXMuX2luamVjdE1ldGFkYXRhKHRoaXMuX2dldERlZmF1bHRSZWdpc3RyeSgpLCB0cnVlKTtcbiAgICAgICAgLy8gZGVyaXZlIGlzIGxhc3QsIHNpbmNlIGl0IHVzZXMgdGhlIGRlY29yYXRlZCByeFxuICAgICAgICB0aGlzLl9yeC5kZXJpdmUgPSB0aGlzLl9kZWNvcmF0ZURlcml2ZVJ4KHRoaXMuX3J4RGVjb3JhdGVNZXRob2QpO1xuICAgICAgICB0aGlzLl9kZXJpdmUgPSB0aGlzLl9kZWNvcmF0ZURlcml2ZSh0aGlzLl9kZWNvcmF0ZU1ldGhvZCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBfc3Vic2NyaWJlSGVhbHRoKCkge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUhlYWx0aCgpO1xuICAgICAgICAvLyBPbmx5IGVuYWJsZSB0aGUgaGVhbHRoIGtlZXBhbGl2ZSBvbiBXUywgbm90IG5lZWRlZCBvbiBIVFRQXG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhbHRoVGltZXIgPSB0aGlzLmhhc1N1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgID8gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuc3lzdGVtLmhlYWx0aC5yYXcoKSkuY2F0Y2gobm9vcCk7XG4gICAgICAgICAgICB9LCBLRUVQQUxJVkVfSU5URVJWQUwpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIF91bnN1YnNjcmliZUhlYWx0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9faGVhbHRoVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fX2ludGVybmFsX19oZWFsdGhUaW1lcik7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYWx0aFRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfdW5zdWJzY3JpYmVVcGRhdGVzKCkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX191cGRhdGVTdWIpIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fdXBkYXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3VwZGF0ZVN1YiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3Vuc3Vic2NyaWJlKCkge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUhlYWx0aCgpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZVVwZGF0ZXMoKTtcbiAgICB9XG4gICAgYXN5bmMgX19pbnRlcm5hbF9fb25Qcm92aWRlckNvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGVkJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjcnlwdG9SZWFkeSA9IHRoaXMuX29wdGlvbnMuaW5pdFdhc20gPT09IGZhbHNlXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiBhd2FpdCBjcnlwdG9XYWl0UmVhZHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc01ldGEgPSBhd2FpdCB0aGlzLl9sb2FkTWV0YSgpO1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlSGVhbHRoKCk7XG4gICAgICAgICAgICBpZiAoaGFzTWV0YSAmJiAhdGhpcy5faXNSZWFkeSAmJiBjcnlwdG9SZWFkeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZHknLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgRkFUQUw6IFVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBBUEk6ICR7X2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICBsLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX19pbnRlcm5hbF9fb25Qcm92aWRlckRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgIH1cbiAgICBfX2ludGVybmFsX19vblByb3ZpZGVyRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBmaW5kQ2FsbChyZWdpc3RyeSwgY2FsbEluZGV4KSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmZpbmRNZXRhQ2FsbCh1OGFUb1U4YShjYWxsSW5kZXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRXJyb3IocmVnaXN0cnksIGVycm9ySW5kZXgpIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuZmluZE1ldGFFcnJvcih1OGFUb1U4YShlcnJvckluZGV4KSk7XG59XG4iLCJpbXBvcnQgeyBpc1N0cmluZywgb2JqZWN0U3ByZWFkLCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBHZXR0ZXJzIH0gZnJvbSAnLi9HZXR0ZXJzLmpzJztcbmV4cG9ydCBjbGFzcyBBcGlCYXNlIGV4dGVuZHMgR2V0dGVycyB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0IHRvIGNyZWF0ZSBBUEkgaW5zdGFuY2Ugb3IgYSBQcm92aWRlciBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogaW1wb3J0IEFwaSBmcm9tICdAcG9sa2Fkb3QvYXBpL3Byb21pc2UnO1xuICAgICAqXG4gICAgICogY29uc3QgYXBpID0gbmV3IEFwaSgpLmlzUmVhZHkoKTtcbiAgICAgKlxuICAgICAqIGFwaS5ycGMuc3Vic2NyaWJlTmV3SGVhZHMoKGhlYWRlcikgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coYG5ldyBibG9jayAjJHtoZWFkZXIubnVtYmVyLnRvTnVtYmVyKCl9YCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICBzdXBlcihvcHRpb25zLCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25uZWN0IGZyb20gdGhlIHVuZGVybHlpbmcgcHJvdmlkZXIsIGhhbHRpbmcgYWxsIG5ldHdvcmsgdHJhZmZpY1xuICAgICAqL1xuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ycGNDb3JlLmNvbm5lY3QoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERpc2Nvbm5lY3QgZnJvbSB0aGUgdW5kZXJseWluZyBwcm92aWRlciwgaGFsdGluZyBhbGwgbmV0d29yayB0cmFmZmljXG4gICAgICovXG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JwY0NvcmUuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0IGFuIGV4dGVybmFsIHNpZ25lciB3aGljaCB3aWxsIGJlIHVzZWQgdG8gc2lnbiBleHRyaW5zaWMgd2hlbiBhY2NvdW50IHBhc3NlZCBpbiBpcyBub3QgS2V5cmluZ1BhaXJcbiAgICAgKi9cbiAgICBzZXRTaWduZXIoc2lnbmVyKSB7XG4gICAgICAgIHRoaXMuX3J4LnNpZ25lciA9IHNpZ25lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ25zIGEgcmF3IHNpZ25lciBwYXlsb2FkLCBzdHJpbmcgb3IgVWludDhBcnJheVxuICAgICAqL1xuICAgIGFzeW5jIHNpZ24oYWRkcmVzcywgZGF0YSwgeyBzaWduZXIgfSA9IHt9KSB7XG4gICAgICAgIGlmIChpc1N0cmluZyhhZGRyZXNzKSkge1xuICAgICAgICAgICAgY29uc3QgX3NpZ25lciA9IHNpZ25lciB8fCB0aGlzLl9yeC5zaWduZXI7XG4gICAgICAgICAgICBpZiAoIV9zaWduZXI/LnNpZ25SYXcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNpZ25lciBleGlzdHMgd2l0aCBhIHNpZ25SYXcgaW50ZXJmYWNlLiBZb3UgcG9zc2libHkgbmVlZCB0byBwYXNzIHRocm91Z2ggYW4gZXhwbGljaXQga2V5cGFpciBmb3IgdGhlIG9yaWdpbiBzbyBpdCBjYW4gYmUgdXNlZCBmb3Igc2lnbmluZy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoYXdhaXQgX3NpZ25lci5zaWduUmF3KG9iamVjdFNwcmVhZCh7IHR5cGU6ICdieXRlcycgfSwgZGF0YSwgeyBhZGRyZXNzIH0pKSkuc2lnbmF0dXJlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1OGFUb0hleChhZGRyZXNzLnNpZ24odThhVG9VOGEoZGF0YS5kYXRhKSkpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogJ0Bwb2xrYWRvdC9hcGknLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMS4yLjEnIH07XG4iLCJpbXBvcnQgeyBub29wLCBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBBcGlCYXNlIH0gZnJvbSAnLi4vYmFzZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBDb21iaW5hdG9yIH0gZnJvbSAnLi9Db21iaW5hdG9yLmpzJztcbmltcG9ydCB7IHByb21pc2VUcmFja2VyLCB0b1Byb21pc2VNZXRob2QgfSBmcm9tICcuL2RlY29yYXRlTWV0aG9kLmpzJztcbi8qKlxuICogIyBAcG9sa2Fkb3QvYXBpL3Byb21pc2VcbiAqXG4gKiAjIyBPdmVydmlld1xuICpcbiAqIEBuYW1lIEFwaVByb21pc2VcbiAqIEBkZXNjcmlwdGlvblxuICogQXBpUHJvbWlzZSBpcyBhIHN0YW5kYXJkIEphdmFTY3JpcHQgd3JhcHBlciBhcm91bmQgdGhlIFJQQyBhbmQgaW50ZXJmYWNlcyBvbiB0aGUgUG9sa2Fkb3QgbmV0d29yay4gQXMgYSBmdWxsIFByb21pc2UtYmFzZWQsIGFsbCBpbnRlcmZhY2UgY2FsbHMgcmV0dXJuIFByb21pc2VzLCBpbmNsdWRpbmcgdGhlIHN0YXRpYyBgLmNyZWF0ZSguLi4pYC4gU3Vic2NyaXB0aW9uIGNhbGxzIHV0aWxpc2UgYCh2YWx1ZSkgPT4ge31gIGNhbGxiYWNrcyB0byBwYXNzIHRocm91Z2ggdGhlIGxhdGVzdCB2YWx1ZXMuXG4gKlxuICogVGhlIEFQSSBpcyB3ZWxsIHN1aXRlZCB0byByZWFsLXRpbWUgYXBwbGljYXRpb25zIHdoZXJlIGVpdGhlciB0aGUgc2luZ2xlLXNob3Qgc3RhdGUgaXMgbmVlZGVkIG9yIHVzZSBpcyB0byBiZSBtYWRlIG9mIHRoZSBzdWJzY3JpcHRpb24tYmFzZWQgZmVhdHVyZXMgb2YgUG9sa2Fkb3QgKGFuZCBTdWJzdHJhdGUpIGNsaWVudHMuXG4gKlxuICogQHNlZSBbW0FwaVJ4XV1cbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIE1ha2luZyBycGMgY2FsbHMgLVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBBcGlQcm9taXNlIGZyb20gJ0Bwb2xrYWRvdC9hcGkvcHJvbWlzZSc7XG4gKlxuICogLy8gaW5pdGlhbGlzZSB2aWEgc3RhdGljIGNyZWF0ZVxuICogY29uc3QgYXBpID0gYXdhaXQgQXBpUHJvbWlzZS5jcmVhdGUoKTtcbiAqXG4gKiAvLyBtYWtlIGEgc3Vic2NyaXB0aW9uIHRvIHRoZSBuZXR3b3JrIGhlYWRcbiAqIGFwaS5ycGMuY2hhaW4uc3Vic2NyaWJlTmV3SGVhZHMoKGhlYWRlcikgPT4ge1xuICogICBjb25zb2xlLmxvZyhgQ2hhaW4gaXMgYXQgIyR7aGVhZGVyLm51bWJlcn1gKTtcbiAqIH0pO1xuICogYGBgXG4gKiA8QlI+XG4gKlxuICogU3Vic2NyaWJpbmcgdG8gY2hhaW4gc3RhdGUgLVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IEFwaVByb21pc2UsIFdzUHJvdmlkZXIgfSBmcm9tICdAcG9sa2Fkb3QvYXBpJztcbiAqXG4gKiAvLyBpbml0aWFsaXNlIGEgcHJvdmlkZXIgd2l0aCBhIHNwZWNpZmljIGVuZHBvaW50XG4gKiBjb25zdCBwcm92aWRlciA9IG5ldyBXc1Byb3ZpZGVyKCd3c3M6Ly9leGFtcGxlLmNvbTo5OTQ0JylcbiAqXG4gKiAvLyBpbml0aWFsaXNlIHZpYSBpc1JlYWR5ICYgbmV3IHdpdGggc3BlY2lmaWMgcHJvdmlkZXJcbiAqIGNvbnN0IGFwaSA9IGF3YWl0IG5ldyBBcGlQcm9taXNlKHsgcHJvdmlkZXIgfSkuaXNSZWFkeTtcbiAqXG4gKiAvLyByZXRyaWV2ZSB0aGUgYmxvY2sgdGFyZ2V0IHRpbWVcbiAqIGNvbnN0IGJsb2NrUGVyaW9kID0gYXdhaXQgYXBpLnF1ZXJ5LnRpbWVzdGFtcC5ibG9ja1BlcmlvZCgpLnRvTnVtYmVyKCk7XG4gKiBsZXQgbGFzdCA9IDA7XG4gKlxuICogLy8gc3Vic2NyaWJlIHRvIHRoZSBjdXJyZW50IGJsb2NrIHRpbWVzdGFtcCwgdXBkYXRlcyBhdXRvbWF0aWNhbGx5IChjYWxsYmFjayBwcm92aWRlZClcbiAqIGFwaS5xdWVyeS50aW1lc3RhbXAubm93KCh0aW1lc3RhbXApID0+IHtcbiAqICAgY29uc3QgZWxhcHNlZCA9IGxhc3RcbiAqICAgICA/IGAsICR7dGltZXN0YW1wLnRvTnVtYmVyKCkgLSBsYXN0fXMgc2luY2UgbGFzdGBcbiAqICAgICA6ICcnO1xuICpcbiAqICAgbGFzdCA9IHRpbWVzdGFtcC50b051bWJlcigpO1xuICogICBjb25zb2xlLmxvZyhgdGltZXN0YW1wICR7dGltZXN0YW1wfSR7ZWxhcHNlZH0gKCR7YmxvY2tQZXJpb2R9cyB0YXJnZXQpYCk7XG4gKiB9KTtcbiAqIGBgYFxuICogPEJSPlxuICpcbiAqIFN1Ym1pdHRpbmcgYSB0cmFuc2FjdGlvbiAtXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IEFwaVByb21pc2UgZnJvbSAnQHBvbGthZG90L2FwaS9wcm9taXNlJztcbiAqXG4gKiBBcGlQcm9taXNlLmNyZWF0ZSgpLnRoZW4oKGFwaSkgPT4ge1xuICogICBjb25zdCBbbm9uY2VdID0gYXdhaXQgYXBpLnF1ZXJ5LnN5c3RlbS5hY2NvdW50KGtleXJpbmcuYWxpY2UuYWRkcmVzcyk7XG4gKlxuICogICBhcGkudHguYmFsYW5jZXNcbiAqICAgICAvLyBjcmVhdGUgdHJhbnNmZXJcbiAqICAgICB0cmFuc2ZlcihrZXlyaW5nLmJvYi5hZGRyZXNzLCAxMjM0NSlcbiAqICAgICAvLyBzaWduIHRoZSB0cmFuc2NhdGlvblxuICogICAgIC5zaWduKGtleXJpbmcuYWxpY2UsIHsgbm9uY2UgfSlcbiAqICAgICAvLyBzZW5kIHRoZSB0cmFuc2FjdGlvbiAob3B0aW9uYWwgc3RhdHVzIGNhbGxiYWNrKVxuICogICAgIC5zZW5kKChzdGF0dXMpID0+IHtcbiAqICAgICAgIGNvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1cyAke3N0YXR1cy50eXBlfWApO1xuICogICAgIH0pXG4gKiAgICAgLy8gcmV0cmlldmUgdGhlIHN1Ym1pdHRlZCBleHRyaW5zaWMgaGFzaFxuICogICAgIC50aGVuKChoYXNoKSA9PiB7XG4gKiAgICAgICBjb25zb2xlLmxvZyhgc3VibWl0dGVkIHdpdGggaGFzaCAke2hhc2h9YCk7XG4gKiAgICAgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXBpUHJvbWlzZSBleHRlbmRzIEFwaUJhc2Uge1xuICAgIF9faW50ZXJuYWxfX2lzUmVhZHlQcm9taXNlO1xuICAgIF9faW50ZXJuYWxfX2lzUmVhZHlPckVycm9yUHJvbWlzZTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgQXBpUHJvbWlzZSBjbGFzc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gY3JlYXRlIGFuIGluc3RhbmNlLiBUaGlzIGNhbiBiZSBlaXRoZXIgW1tBcGlPcHRpb25zXV0gb3JcbiAgICAgKiBhbiBbW1dzUHJvdmlkZXJdXS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxCUj5cbiAgICAgKlxuICAgICAqIGBgYGphdmFzY3JpcHRcbiAgICAgKiBpbXBvcnQgQXBpIGZyb20gJ0Bwb2xrYWRvdC9hcGkvcHJvbWlzZSc7XG4gICAgICpcbiAgICAgKiBuZXcgQXBpKCkuaXNSZWFkeS50aGVuKChhcGkpID0+IHtcbiAgICAgKiAgIGFwaS5ycGMuc3Vic2NyaWJlTmV3SGVhZHMoKGhlYWRlcikgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgbmV3IGJsb2NrICMke2hlYWRlci5udW1iZXIudG9OdW1iZXIoKX1gKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgJ3Byb21pc2UnLCB0b1Byb21pc2VNZXRob2QpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzUmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHN1cGVyLm9uY2UoJ3JlYWR5JywgKCkgPT4gcmVzb2x2ZSh0aGlzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzUmVhZHlPckVycm9yUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrZXIgPSBwcm9taXNlVHJhY2tlcihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgc3VwZXIub25jZSgncmVhZHknLCAoKSA9PiB0cmFja2VyLnJlc29sdmUodGhpcykpO1xuICAgICAgICAgICAgc3VwZXIub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHRyYWNrZXIucmVqZWN0KGVycm9yKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBBcGlQcm9taXNlIGluc3RhbmNlIHVzaW5nIHRoZSBzdXBwbGllZCBwcm92aWRlci4gUmV0dXJucyBhbiBQcm9taXNlIGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBBcGkgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyB0aGF0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3MgY29udHJ1Y3Rvci4gQ2FuIGJlIGVpdGhlciBbW0FwaU9wdGlvbnNdXSBvciBhXG4gICAgICogcHJvdmlkZXIgKHNlZSB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzKVxuICAgICAqIEBleGFtcGxlXG4gICAgICogPEJSPlxuICAgICAqXG4gICAgICogYGBgamF2YXNjcmlwdFxuICAgICAqIGltcG9ydCBBcGkgZnJvbSAnQHBvbGthZG90L2FwaS9wcm9taXNlJztcbiAgICAgKlxuICAgICAqIEFwaS5jcmVhdGUoKS50aGVuKGFzeW5jIChhcGkpID0+IHtcbiAgICAgKiAgIGNvbnN0IHRpbWVzdGFtcCA9IGF3YWl0IGFwaS5xdWVyeS50aW1lc3RhbXAubm93KCk7XG4gICAgICpcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBsYXN0ZXN0IGJsb2NrIHRpbWVzdGFtcCAke3RpbWVzdGFtcH1gKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQXBpUHJvbWlzZShvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50aHJvd09uQ29ubmVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmlzUmVhZHlPckVycm9yO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN3YWxsb3cgYW55IHJlamVjdGlvbnMgb24gaXNSZWFkeU9yRXJyb3JcbiAgICAgICAgLy8gKGluIE5vZGUgMTUueCB0aGlzIGNyZWF0ZXMgaXNzdWVzLCB3aGVuIG5vdCBiZWluZyBsb29rZWQgYXQpXG4gICAgICAgIGluc3RhbmNlLmlzUmVhZHlPckVycm9yLmNhdGNoKG5vb3ApO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UuaXNSZWFkeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFByb21pc2UgdGhhdCByZXNvbHZlcyB0aGUgZmlyc3QgdGltZSB3ZSBhcmUgY29ubmVjdGVkIGFuZCBsb2FkZWRcbiAgICAgKi9cbiAgICBnZXQgaXNSZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNSZWFkeVByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgaWYgd2UgY2FuIGNvbm5lY3QsIG9yIHJlamVjdCBpZiB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAqL1xuICAgIGdldCBpc1JlYWR5T3JFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNSZWFkeU9yRXJyb3JQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgQXBpUHJvbWlzZSBpbnN0YW5jZSAobmV3IHVuZGVybHlpbmcgcHJvdmlkZXIgY29ubmVjdGlvbilcbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcGlQcm9taXNlKG9iamVjdFNwcmVhZCh7fSwgdGhpcy5fb3B0aW9ucywgeyBzb3VyY2U6IHRoaXMgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGNvbWJpbmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBjb21iaW5lIHRoZSBsYXRlc3QgcmVzdWx0cyBmcm9tIG11bHRpcGxlIHN1YnNjcmlwdGlvbnNcbiAgICAgKiBAcGFyYW0gZm5zIEFuIGFycmF5IG9mIGZ1bmN0aW9uIHRvIGNvbWJpbmUsIGVhY2ggaW4gdGhlIGZvcm0gb2YgYChjYjogKHZhbHVlOiB2b2lkKSkgPT4gdm9pZGBcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0aGF0IHdpbGwgcmV0dXJuIGFuIEFycmF5IG9mIGFsbCB0aGUgdmFsdWVzIHRoaXMgY29tYmluYXRvciBoYXMgYmVlbiBhcHBsaWVkIHRvXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogY29uc3QgYWRkcmVzcyA9ICc1RFRlc3RVUHRzM2tqZVhTVE15ZXJIaWhuMXV3TWZMajh2VThzcUY3cVlyRmFjVDcnO1xuICAgICAqXG4gICAgICogLy8gY29tYmluZXMgdmFsdWVzIGZyb20gYmFsYW5jZSAmIG5vbmNlIGFzIGl0IHVwZGF0ZXNcbiAgICAgKiBhcGkuY29tYmluZUxhdGVzdChbXG4gICAgICogICBhcGkucnBjLmNoYWluLnN1YnNjcmliZU5ld0hlYWRzLFxuICAgICAqICAgKGNiKSA9PiBhcGkucXVlcnkuc3lzdGVtLmFjY291bnQoYWRkcmVzcywgY2IpXG4gICAgICogXSwgKFtoZWFkLCBbYmFsYW5jZSwgbm9uY2VdXSkgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coYCMke2hlYWQubnVtYmVyfTogWW91IGhhdmUgJHtiYWxhbmNlLmZyZWV9IHVuaXRzLCB3aXRoICR7bm9uY2V9IHRyYW5zYWN0aW9ucyBzZW50YCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gICAgYXN5bmMgY29tYmluZUxhdGVzdChmbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihmbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbWJpbmF0b3IudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBub29wIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZXhwb3J0IGNsYXNzIENvbWJpbmF0b3Ige1xuICAgIF9faW50ZXJuYWxfX2FsbEhhc0ZpcmVkID0gZmFsc2U7XG4gICAgX19pbnRlcm5hbF9fY2FsbGJhY2s7XG4gICAgX19pbnRlcm5hbF9fZmlyZWQgPSBbXTtcbiAgICBfX2ludGVybmFsX19mbnMgPSBbXTtcbiAgICBfX2ludGVybmFsX19pc0FjdGl2ZSA9IHRydWU7XG4gICAgX19pbnRlcm5hbF9fcmVzdWx0cyA9IFtdO1xuICAgIF9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICBjb25zdHJ1Y3RvcihmbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcywgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdWJzY3JpcHRpb25zID0gZm5zLm1hcChhc3luYyAoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbZm4sIC4uLmFyZ3NdID0gQXJyYXkuaXNBcnJheShpbnB1dClcbiAgICAgICAgICAgICAgICA/IGlucHV0XG4gICAgICAgICAgICAgICAgOiBbaW5wdXRdO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19maXJlZC5wdXNoKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZm5zLnB1c2goZm4pO1xuICAgICAgICAgICAgLy8gTm90IHF1aXRlIDEwMCUgaG93IHRvIGhhdmUgYSB2YXJpYWJsZSBudW1iZXIgYXQgdGhlIGZyb250IGhlcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVybixAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gICAgICAgICAgICByZXR1cm4gZm4oLi4uYXJncywgdGhpcy5fY3JlYXRlQ2FsbGJhY2soaW5kZXgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hbGxIYXNGaXJlZCgpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19hbGxIYXNGaXJlZCB8fD0gdGhpcy5fX2ludGVybmFsX19maXJlZC5maWx0ZXIoKGhhc0ZpcmVkKSA9PiAhaGFzRmlyZWQpLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYWxsSGFzRmlyZWQ7XG4gICAgfVxuICAgIF9jcmVhdGVDYWxsYmFjayhpbmRleCkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2ZpcmVkW2luZGV4XSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3Jlc3VsdHNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyVXBkYXRlKCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF90cmlnZ2VyVXBkYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX19pbnRlcm5hbF9faXNBY3RpdmUgfHwgIWlzRnVuY3Rpb24odGhpcy5fX2ludGVybmFsX19jYWxsYmFjaykgfHwgIXRoaXMuX2FsbEhhc0ZpcmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgUHJvbWlzZVxuICAgICAgICAgICAgICAgIC5yZXNvbHZlKHRoaXMuX19pbnRlcm5hbF9fY2FsbGJhY2sodGhpcy5fX2ludGVybmFsX19yZXN1bHRzKSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gobm9vcCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gc3dhbGxvdywgd2UgZG9uJ3Qgd2FudCB0aGUgaGFuZGxlciB0byB0cmlwIHVzIHVwXG4gICAgICAgIH1cbiAgICB9XG4gICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX19pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgICAgLmFsbCh0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMubWFwKGFzeW5jIChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBhd2FpdCBzdWJzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odW5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgLy8gaWdub3JlLCBhbHJlYWR5IGlnbm9yZWQgYWJvdmUsIHNob3VsZCBuZXZlciB0aHJvd1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjYXRjaEVycm9yLCBFTVBUWSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBuZXh0VGljayB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlVHJhY2tlcihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgaXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICByZWplY3Q6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIGlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9LFxuICAgICAgICByZXNvbHZlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICBpc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gZXh0cmFjdEFyZ3MoYXJncywgbmVlZHNDYWxsYmFjaykge1xuICAgIGNvbnN0IGFjdHVhbEFyZ3MgPSBhcmdzLnNsaWNlKCk7XG4gICAgLy8gSWYgdGhlIGxhc3QgYXJnIGlzIGEgZnVuY3Rpb24sIHdlIHBvcCBpdCwgcHV0IGl0IGludG8gY2FsbGJhY2suXG4gICAgLy8gYWN0dWFsQXJncyB3aWxsIHRoZW4gaG9sZCB0aGUgYWN0dWFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gYG1ldGhvZGBcbiAgICBjb25zdCBjYWxsYmFjayA9IChhcmdzLmxlbmd0aCAmJiBpc0Z1bmN0aW9uKGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpXG4gICAgICAgID8gYWN0dWFsQXJncy5wb3AoKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAvLyBXaGVuIHdlIG5lZWQgYSBzdWJzY3JpcHRpb24sIGVuc3VyZSB0aGF0IGEgdmFsaWQgY2FsbGJhY2sgaXMgYWN0dWFsbHkgcGFzc2VkXG4gICAgaWYgKG5lZWRzQ2FsbGJhY2sgJiYgIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYSBjYWxsYmFjayB0byBiZSBwYXNzZWQgd2l0aCBzdWJzY3JpcHRpb25zJyk7XG4gICAgfVxuICAgIHJldHVybiBbYWN0dWFsQXJncywgY2FsbGJhY2tdO1xufVxuZnVuY3Rpb24gZGVjb3JhdGVDYWxsKG1ldGhvZCwgYXJncykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIHNpbmdsZSByZXN1bHQgdHJhY2tlciAtIGVpdGhlciByZWplY3Qgd2l0aCBFcnJvciBvciByZXNvbHZlIHdpdGggQ29kZWMgcmVzdWx0XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSBwcm9taXNlVHJhY2tlcihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAvLyBlbmNvZGluZyBlcnJvcnMgcmVqZWN0IGltbWVkaWF0ZWx5LCBhbnkgcmVzdWx0IHVuc3Vic2NyaWJlcyBhbmQgcmVzb2x2ZXNcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbWV0aG9kKC4uLmFyZ3MpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnJvcikgPT4gdHJhY2tlci5yZWplY3QoZXJyb3IpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdHJhY2tlci5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICBuZXh0VGljaygoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGVjb3JhdGVTdWJzY3JpYmUobWV0aG9kLCBhcmdzLCByZXN1bHRDYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIGVpdGhlciByZWplY3Qgd2l0aCBlcnJvciBvciByZXNvbHZlIHdpdGggdW5zdWJzY3JpYmUgY2FsbGJhY2tcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IHByb21pc2VUcmFja2VyKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIC8vIGVycm9ycyByZWplY3QgaW1tZWRpYXRlbHksIHRoZSBmaXJzdCByZXN1bHQgcmVzb2x2ZXMgd2l0aCBhbiB1bnN1YnNjcmliZSBwcm9taXNlLCBhbGwgcmVzdWx0cyB2aWEgY2FsbGJhY2tcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbWV0aG9kKC4uLmFyZ3MpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnJvcikgPT4gdHJhY2tlci5yZWplY3QoZXJyb3IpKSwgdGFwKCgpID0+IHRyYWNrZXIucmVzb2x2ZSgoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAvLyBxdWV1ZSByZXN1bHQgKGJhY2sgb2YgcXVldWUgdG8gY2xlYXIgY3VycmVudClcbiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHJlc3VsdENiKHJlc3VsdCkpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRlIG1ldGhvZCBmb3IgQXBpUHJvbWlzZSwgd2hlcmUgdGhlIHJlc3VsdHMgYXJlIGNvbnZlcnRlZCB0byB0aGUgUHJvbWlzZSBlcXVpdmFsZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Byb21pc2VNZXRob2QobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgY29uc3QgbmVlZHNDYWxsYmFjayA9ICEhKG9wdGlvbnM/Lm1ldGhvZE5hbWUgJiYgb3B0aW9ucy5tZXRob2ROYW1lLmluY2x1ZGVzKCdzdWJzY3JpYmUnKSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IFthY3R1YWxBcmdzLCByZXN1bHRDYl0gPSBleHRyYWN0QXJncyhhcmdzLCBuZWVkc0NhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdENiXG4gICAgICAgICAgICA/IGRlY29yYXRlU3Vic2NyaWJlKG1ldGhvZCwgYWN0dWFsQXJncywgcmVzdWx0Q2IpXG4gICAgICAgICAgICA6IGRlY29yYXRlQ2FsbChvcHRpb25zPy5vdmVycmlkZU5vU3ViIHx8IG1ldGhvZCwgYWN0dWFsQXJncyk7XG4gICAgfTtcbn1cbiIsImNvbnN0IHJlY29yZElkZW50aXR5ID0gKHJlY29yZCkgPT4gcmVjb3JkO1xuZnVuY3Rpb24gZmlsdGVyQW5kQXBwbHkoZXZlbnRzLCBzZWN0aW9uLCBtZXRob2RzLCBvbkZvdW5kKSB7XG4gICAgcmV0dXJuIGV2ZW50c1xuICAgICAgICAuZmlsdGVyKCh7IGV2ZW50IH0pID0+IHNlY3Rpb24gPT09IGV2ZW50LnNlY3Rpb24gJiZcbiAgICAgICAgbWV0aG9kcy5pbmNsdWRlcyhldmVudC5tZXRob2QpKVxuICAgICAgICAubWFwKChyZWNvcmQpID0+IG9uRm91bmQocmVjb3JkKSk7XG59XG5mdW5jdGlvbiBnZXREaXNwYXRjaEVycm9yKHsgZXZlbnQ6IHsgZGF0YTogW2Rpc3BhdGNoRXJyb3JdIH0gfSkge1xuICAgIHJldHVybiBkaXNwYXRjaEVycm9yO1xufVxuZnVuY3Rpb24gZ2V0RGlzcGF0Y2hJbmZvKHsgZXZlbnQ6IHsgZGF0YSwgbWV0aG9kIH0gfSkge1xuICAgIHJldHVybiBtZXRob2QgPT09ICdFeHRyaW5zaWNTdWNjZXNzJ1xuICAgICAgICA/IGRhdGFbMF1cbiAgICAgICAgOiBkYXRhWzFdO1xufVxuZnVuY3Rpb24gZXh0cmFjdEVycm9yKGV2ZW50cyA9IFtdKSB7XG4gICAgcmV0dXJuIGZpbHRlckFuZEFwcGx5KGV2ZW50cywgJ3N5c3RlbScsIFsnRXh0cmluc2ljRmFpbGVkJ10sIGdldERpc3BhdGNoRXJyb3IpWzBdO1xufVxuZnVuY3Rpb24gZXh0cmFjdEluZm8oZXZlbnRzID0gW10pIHtcbiAgICByZXR1cm4gZmlsdGVyQW5kQXBwbHkoZXZlbnRzLCAnc3lzdGVtJywgWydFeHRyaW5zaWNGYWlsZWQnLCAnRXh0cmluc2ljU3VjY2VzcyddLCBnZXREaXNwYXRjaEluZm8pWzBdO1xufVxuZXhwb3J0IGNsYXNzIFN1Ym1pdHRhYmxlUmVzdWx0IHtcbiAgICBkaXNwYXRjaEVycm9yO1xuICAgIGRpc3BhdGNoSW5mbztcbiAgICBpbnRlcm5hbEVycm9yO1xuICAgIGV2ZW50cztcbiAgICBzdGF0dXM7XG4gICAgdHhIYXNoO1xuICAgIHR4SW5kZXg7XG4gICAgYmxvY2tOdW1iZXI7XG4gICAgY29uc3RydWN0b3IoeyBibG9ja051bWJlciwgZGlzcGF0Y2hFcnJvciwgZGlzcGF0Y2hJbmZvLCBldmVudHMsIGludGVybmFsRXJyb3IsIHN0YXR1cywgdHhIYXNoLCB0eEluZGV4IH0pIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEVycm9yID0gZGlzcGF0Y2hFcnJvciB8fCBleHRyYWN0RXJyb3IoZXZlbnRzKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEluZm8gPSBkaXNwYXRjaEluZm8gfHwgZXh0cmFjdEluZm8oZXZlbnRzKTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBldmVudHMgfHwgW107XG4gICAgICAgIHRoaXMuaW50ZXJuYWxFcnJvciA9IGludGVybmFsRXJyb3I7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnR4SGFzaCA9IHR4SGFzaDtcbiAgICAgICAgdGhpcy50eEluZGV4ID0gdHhJbmRleDtcbiAgICAgICAgdGhpcy5ibG9ja051bWJlciA9IGJsb2NrTnVtYmVyO1xuICAgIH1cbiAgICBnZXQgaXNDb21wbGV0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRXJyb3IgfHwgdGhpcy5zdGF0dXMuaXNJbkJsb2NrIHx8IHRoaXMuc3RhdHVzLmlzRmluYWxpemVkO1xuICAgIH1cbiAgICBnZXQgaXNFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzLmlzRHJvcHBlZCB8fCB0aGlzLnN0YXR1cy5pc0ZpbmFsaXR5VGltZW91dCB8fCB0aGlzLnN0YXR1cy5pc0ludmFsaWQgfHwgdGhpcy5zdGF0dXMuaXNVc3VycGVkO1xuICAgIH1cbiAgICBnZXQgaXNGaW5hbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXR1cy5pc0ZpbmFsaXplZDtcbiAgICB9XG4gICAgZ2V0IGlzSW5CbG9jaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzLmlzSW5CbG9jaztcbiAgICB9XG4gICAgZ2V0IGlzV2FybmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzLmlzUmV0cmFjdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRmlsdGVycyBFdmVudFJlY29yZHMgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kICYgc2VjdGlvbiAodGhlcmUgY291bGQgYmUgbXVsdGlwbGUpXG4gICAgICovXG4gICAgZmlsdGVyUmVjb3JkcyhzZWN0aW9uLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckFuZEFwcGx5KHRoaXMuZXZlbnRzLCBzZWN0aW9uLCBBcnJheS5pc0FycmF5KG1ldGhvZCkgPyBtZXRob2QgOiBbbWV0aG9kXSwgcmVjb3JkSWRlbnRpdHkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRmluZHMgYW4gRXZlbnRSZWNvcmQgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kICYgc2VjdGlvblxuICAgICAqL1xuICAgIGZpbmRSZWNvcmQoc2VjdGlvbiwgbWV0aG9kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlclJlY29yZHMoc2VjdGlvbiwgbWV0aG9kKVswXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBodW1hbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3V0cHV0XG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkaXNwYXRjaEVycm9yOiB0aGlzLmRpc3BhdGNoRXJyb3I/LnRvSHVtYW4oKSxcbiAgICAgICAgICAgIGRpc3BhdGNoSW5mbzogdGhpcy5kaXNwYXRjaEluZm8/LnRvSHVtYW4oKSxcbiAgICAgICAgICAgIGV2ZW50czogdGhpcy5ldmVudHMubWFwKChlKSA9PiBlLnRvSHVtYW4oaXNFeHRlbmRlZCkpLFxuICAgICAgICAgICAgaW50ZXJuYWxFcnJvcjogdGhpcy5pbnRlcm5hbEVycm9yPy5tZXNzYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLnRvSHVtYW4oaXNFeHRlbmRlZClcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjYXRjaEVycm9yLCBmaXJzdCwgbWFwLCBtZXJnZU1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpZGVudGl0eSwgaXNCbiwgaXNGdW5jdGlvbiwgaXNOdW1iZXIsIGlzU3RyaW5nLCBpc1U4YSwgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZmlsdGVyRXZlbnRzLCBpc0tleXJpbmdQYWlyIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBTdWJtaXR0YWJsZVJlc3VsdCB9IGZyb20gJy4vUmVzdWx0LmpzJztcbmZ1bmN0aW9uIG1ha2VFcmFPcHRpb25zKGFwaSwgcmVnaXN0cnksIHBhcnRpYWxPcHRpb25zLCB7IGhlYWRlciwgbW9ydGFsTGVuZ3RoLCBub25jZSB9KSB7XG4gICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgICAgaWYgKHBhcnRpYWxPcHRpb25zLmVyYSAmJiAhcGFydGlhbE9wdGlvbnMuYmxvY2tIYXNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJsb2NrSGFzaCB0byBiZSBwYXNzZWQgYWxvbmdzaWRlIG5vbi1pbW1vcnRhbCBlcmEgb3B0aW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihwYXJ0aWFsT3B0aW9ucy5lcmEpKSB7XG4gICAgICAgICAgICAvLyBzaW5jZSB3ZSBoYXZlIG5vIGhlYWRlciwgaXQgaXMgaW1tb3J0YWwsIHJlbW92ZSBhbnkgb3B0aW9uIG92ZXJyaWRlc1xuICAgICAgICAgICAgLy8gc28gd2Ugb25seSBzdXBwbHkgdGhlIGdlbmVzaXNIYXNoIGFuZCBubyBlcmEgdG8gdGhlIGNvbnN0cnVjdGlvblxuICAgICAgICAgICAgZGVsZXRlIHBhcnRpYWxPcHRpb25zLmVyYTtcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aWFsT3B0aW9ucy5ibG9ja0hhc2g7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VTaWduT3B0aW9ucyhhcGksIHBhcnRpYWxPcHRpb25zLCB7IG5vbmNlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVNpZ25PcHRpb25zKGFwaSwgcGFydGlhbE9wdGlvbnMsIHtcbiAgICAgICAgYmxvY2tIYXNoOiBoZWFkZXIuaGFzaCxcbiAgICAgICAgZXJhOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdFeHRyaW5zaWNFcmEnLCBbe1xuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IGhlYWRlci5udW1iZXIsXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBwYXJ0aWFsT3B0aW9ucy5lcmEgfHwgbW9ydGFsTGVuZ3RoXG4gICAgICAgICAgICB9XSksXG4gICAgICAgIG5vbmNlXG4gICAgfSk7XG59XG5mdW5jdGlvbiBtYWtlU2lnbkFuZFNlbmRPcHRpb25zKHBhcnRpYWxPcHRpb25zLCBzdGF0dXNDYikge1xuICAgIGxldCBvcHRpb25zID0ge307XG4gICAgaWYgKGlzRnVuY3Rpb24ocGFydGlhbE9wdGlvbnMpKSB7XG4gICAgICAgIHN0YXR1c0NiID0gcGFydGlhbE9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBvcHRpb25zID0gb2JqZWN0U3ByZWFkKHt9LCBwYXJ0aWFsT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBbb3B0aW9ucywgc3RhdHVzQ2JdO1xufVxuZnVuY3Rpb24gbWFrZVNpZ25PcHRpb25zKGFwaSwgcGFydGlhbE9wdGlvbnMsIGV4dHJhcykge1xuICAgIHJldHVybiBvYmplY3RTcHJlYWQoeyBibG9ja0hhc2g6IGFwaS5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2g6IGFwaS5nZW5lc2lzSGFzaCB9LCBwYXJ0aWFsT3B0aW9ucywgZXh0cmFzLCB7IHJ1bnRpbWVWZXJzaW9uOiBhcGkucnVudGltZVZlcnNpb24sIHNpZ25lZEV4dGVuc2lvbnM6IGFwaS5yZWdpc3RyeS5zaWduZWRFeHRlbnNpb25zLCB2ZXJzaW9uOiBhcGkuZXh0cmluc2ljVHlwZSB9KTtcbn1cbmZ1bmN0aW9uIG9wdGlvbnNPck5vbmNlKHBhcnRpYWxPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gaXNCbihwYXJ0aWFsT3B0aW9ucykgfHwgaXNOdW1iZXIocGFydGlhbE9wdGlvbnMpXG4gICAgICAgID8geyBub25jZTogcGFydGlhbE9wdGlvbnMgfVxuICAgICAgICA6IHBhcnRpYWxPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHsgYXBpLCBhcGlUeXBlLCBibG9ja0hhc2gsIGRlY29yYXRlTWV0aG9kIH0pIHtcbiAgICAvLyBhbiBpbnN0YW5jZSBvZiB0aGUgYmFzZSBleHRyaW5zaWMgZm9yIHVzIHRvIGV4dGVuZFxuICAgIGNvbnN0IEV4dHJpbnNpY0Jhc2UgPSBhcGkucmVnaXN0cnkuY3JlYXRlQ2xhc3MoJ0V4dHJpbnNpYycpO1xuICAgIGNsYXNzIFN1Ym1pdHRhYmxlIGV4dGVuZHMgRXh0cmluc2ljQmFzZSB7XG4gICAgICAgIF9faW50ZXJuYWxfX2lnbm9yZVN0YXR1c0NiO1xuICAgICAgICBfX2ludGVybmFsX190cmFuc2Zvcm1SZXN1bHQgPSAoaWRlbnRpdHkpO1xuICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgZXh0cmluc2ljKSB7XG4gICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgZXh0cmluc2ljLCB7IHZlcnNpb246IGFwaS5leHRyaW5zaWNUeXBlIH0pO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19pZ25vcmVTdGF0dXNDYiA9IGFwaVR5cGUgPT09ICdyeGpzJztcbiAgICAgICAgfVxuICAgICAgICBnZXQgaGFzRHJ5UnVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oYXBpLnJwYy5zeXN0ZW0/LmRyeVJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGhhc1BheW1lbnRJbmZvKCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oYXBpLmNhbGwudHJhbnNhY3Rpb25QYXltZW50QXBpPy5xdWVyeUluZm8pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRyeSBydW4gYW4gZXh0cmluc2ljXG4gICAgICAgIGRyeVJ1bihhY2NvdW50LCBvcHRpb25zT3JIYXNoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzRHJ5UnVuKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3lzdGVtLmRyeVJ1biBSUEMgY2FsbCBpcyBub3QgYXZhaWxhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChibG9ja0hhc2ggfHwgaXNTdHJpbmcob3B0aW9uc09ySGFzaCkgfHwgaXNVOGEob3B0aW9uc09ySGFzaCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QoKCkgPT4gYXBpLnJwYy5zeXN0ZW0uZHJ5UnVuKHRoaXMudG9IZXgoKSwgYmxvY2tIYXNoIHx8IG9wdGlvbnNPckhhc2gpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVybixAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCgoKSA9PiB0aGlzLl9faW50ZXJuYWxfX29ic2VydmVTaWduKGFjY291bnQsIG9wdGlvbnNPckhhc2gpLnBpcGUoc3dpdGNoTWFwKCgpID0+IGFwaS5ycGMuc3lzdGVtLmRyeVJ1bih0aGlzLnRvSGV4KCkpKSkpKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBwYXltZW50IGluZm8gZm9yIHRoaXMgdHJhbnNhY3Rpb24gKGlmIHNpZ25lZCBhbmQgc3VibWl0dGVkKVxuICAgICAgICBwYXltZW50SW5mbyhhY2NvdW50LCBvcHRpb25zT3JIYXNoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzUGF5bWVudEluZm8pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0cmFuc2FjdGlvblBheW1lbnRBcGkucXVlcnlJbmZvIHJ1bnRpbWUgY2FsbCBpcyBub3QgYXZhaWxhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChibG9ja0hhc2ggfHwgaXNTdHJpbmcob3B0aW9uc09ySGFzaCkgfHwgaXNVOGEob3B0aW9uc09ySGFzaCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QoKCkgPT4gYXBpLmNhbGxBdChibG9ja0hhc2ggfHwgb3B0aW9uc09ySGFzaCkucGlwZShzd2l0Y2hNYXAoKGNhbGxBdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1OGEgPSB0aGlzLnRvVThhKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsQXQudHJhbnNhY3Rpb25QYXltZW50QXBpLnF1ZXJ5SW5mbyh1OGEsIHU4YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbYWxsT3B0aW9uc10gPSBtYWtlU2lnbkFuZFNlbmRPcHRpb25zKG9wdGlvbnNPckhhc2gpO1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IGlzS2V5cmluZ1BhaXIoYWNjb3VudCkgPyBhY2NvdW50LmFkZHJlc3MgOiBhY2NvdW50LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4sQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QoKCkgPT4gYXBpLmRlcml2ZS50eC5zaWduaW5nSW5mbyhhZGRyZXNzLCBhbGxPcHRpb25zLm5vbmNlLCBhbGxPcHRpb25zLmVyYSkucGlwZShmaXJzdCgpLCBzd2l0Y2hNYXAoKHNpZ25pbmdJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dXAgb3VyIG9wdGlvbnMgKHNhbWUgd2F5IGFzIGluIHNpZ25BbmRTZW5kKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVyYU9wdGlvbnMgPSBtYWtlRXJhT3B0aW9ucyhhcGksIHRoaXMucmVnaXN0cnksIGFsbE9wdGlvbnMsIHNpZ25pbmdJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduT3B0aW9ucyA9IG1ha2VTaWduT3B0aW9ucyhhcGksIGVyYU9wdGlvbnMsIHt9KTtcbiAgICAgICAgICAgICAgICAvLyAxLiBEb24ndCB1c2UgdGhlIGludGVybmFsIG9iamVjdHMgaW5zaWRlIHRoZSBuZXcgdHggKGhlbmNlIHRvVThhKVxuICAgICAgICAgICAgICAgIC8vIDIuIERvbid0IG92ZXJyaWRlIHRoZSBkYXRhIGZyb20gZXhpc3Rpbmcgc2lnbmVkIGV4dHJpbnNpY3NcbiAgICAgICAgICAgICAgICAvLyAzLiBFbnN1cmUgdGhhdCB0aGlzIG9iamVjdCBzdGF5cyBpbnRhY3QsIHdpdGggbm8gbmV3IHNpZ24gYWZ0ZXIgb3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgdThhID0gYXBpLnR4KHRoaXMudG9VOGEoKSkuc2lnbkZha2UoYWRkcmVzcywgc2lnbk9wdGlvbnMpLnRvVThhKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5jYWxsLnRyYW5zYWN0aW9uUGF5bWVudEFwaS5xdWVyeUluZm8odThhLCB1OGEubGVuZ3RoKTtcbiAgICAgICAgICAgIH0pKSkoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZW5kIGltcGxlbWVudGF0aW9uIGZvciBib3RoIGltbWVkaWF0ZSBIYXNoIGFuZCBzdGF0dXNDYiB2YXJpYW50c1xuICAgICAgICBzZW5kKHN0YXR1c0NiKSB7XG4gICAgICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9IGFwaS5oYXNTdWJzY3JpcHRpb25zICYmICh0aGlzLl9faW50ZXJuYWxfX2lnbm9yZVN0YXR1c0NiIHx8ICEhc3RhdHVzQ2IpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRlTWV0aG9kKGlzU3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX29ic2VydmVTdWJzY3JpYmVcbiAgICAgICAgICAgICAgICA6IHRoaXMuX19pbnRlcm5hbF9fb2JzZXJ2ZVNlbmQpKHN0YXR1c0NiKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNpZ25zIGEgdHJhbnNhY3Rpb24sIHJldHVybmluZyBgdGhpc2AgdG8gYWxsb3cgY2hhaW5pbmcuIEUuZy46IGBzaWduQXN5bmMoLi4uKS5zZW5kKClgLiBMaWtlIGAuc2lnbkFuZFNlbmRgIHRoaXMgd2lsbCByZXRyaWV2ZSB0aGUgbm9uY2UgYW5kIGJsb2NrSGFzaCB0byBzZW5kIHRoZSB0eCB3aXRoLlxuICAgICAgICAgKi9cbiAgICAgICAgc2lnbkFzeW5jKGFjY291bnQsIHBhcnRpYWxPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4sQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QoKCkgPT4gdGhpcy5fX2ludGVybmFsX19vYnNlcnZlU2lnbihhY2NvdW50LCBwYXJ0aWFsT3B0aW9ucykucGlwZShtYXAoKCkgPT4gdGhpcykpKSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNpZ25BbmRTZW5kIGltcGxlbWVudGF0aW9uIGZvciBhbGwgMyBjYXNlcyBhYm92ZVxuICAgICAgICBzaWduQW5kU2VuZChhY2NvdW50LCBwYXJ0aWFsT3B0aW9ucywgb3B0aW9uYWxTdGF0dXNDYikge1xuICAgICAgICAgICAgY29uc3QgW29wdGlvbnMsIHN0YXR1c0NiXSA9IG1ha2VTaWduQW5kU2VuZE9wdGlvbnMocGFydGlhbE9wdGlvbnMsIG9wdGlvbmFsU3RhdHVzQ2IpO1xuICAgICAgICAgICAgY29uc3QgaXNTdWJzY3JpcHRpb24gPSBhcGkuaGFzU3Vic2NyaXB0aW9ucyAmJiAodGhpcy5fX2ludGVybmFsX19pZ25vcmVTdGF0dXNDYiB8fCAhIXN0YXR1c0NiKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVybixAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCgoKSA9PiB0aGlzLl9faW50ZXJuYWxfX29ic2VydmVTaWduKGFjY291bnQsIG9wdGlvbnMpLnBpcGUoc3dpdGNoTWFwKChpbmZvKSA9PiBpc1N1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19vYnNlcnZlU3Vic2NyaWJlKGluZm8pXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9faW50ZXJuYWxfX29ic2VydmVTZW5kKGluZm8pKSkgLy8gRklYTUUgVGhpcyBpcyB3cm9uZywgU3VibWl0dGFibGVSZXN1bHQgaXMgX25vdF8gYSBjb2RlY1xuICAgICAgICAgICAgKShzdGF0dXNDYik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkcyBhIHRyYW5zZm9ybSB0byB0aGUgcmVzdWx0LCBhcHBsaWVkIGJlZm9yZSByZXN1bHQgaXMgcmV0dXJuZWRcbiAgICAgICAgd2l0aFJlc3VsdFRyYW5zZm9ybSh0cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fdHJhbnNmb3JtUmVzdWx0ID0gdHJhbnNmb3JtO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgX19pbnRlcm5hbF9fb2JzZXJ2ZVNpZ24gPSAoYWNjb3VudCwgcGFydGlhbE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBpc0tleXJpbmdQYWlyKGFjY291bnQpID8gYWNjb3VudC5hZGRyZXNzIDogYWNjb3VudC50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNPck5vbmNlKHBhcnRpYWxPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBhcGkuZGVyaXZlLnR4LnNpZ25pbmdJbmZvKGFkZHJlc3MsIG9wdGlvbnMubm9uY2UsIG9wdGlvbnMuZXJhKS5waXBlKGZpcnN0KCksIG1lcmdlTWFwKGFzeW5jIChzaWduaW5nSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyYU9wdGlvbnMgPSBtYWtlRXJhT3B0aW9ucyhhcGksIHRoaXMucmVnaXN0cnksIG9wdGlvbnMsIHNpZ25pbmdJbmZvKTtcbiAgICAgICAgICAgICAgICBsZXQgdXBkYXRlSWQgPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoaXNLZXlyaW5nUGFpcihhY2NvdW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ24oYWNjb3VudCwgZXJhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJZCA9IGF3YWl0IHRoaXMuX19pbnRlcm5hbF9fc2lnblZpYVNpZ25lcihhZGRyZXNzLCBlcmFPcHRpb25zLCBzaWduaW5nSW5mby5oZWFkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBvcHRpb25zOiBlcmFPcHRpb25zLCB1cGRhdGVJZCB9O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgICAgICBfX2ludGVybmFsX19vYnNlcnZlU3RhdHVzID0gKHR4SGFzaCwgc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXN0YXR1cy5pc0ZpbmFsaXplZCAmJiAhc3RhdHVzLmlzSW5CbG9jaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl9faW50ZXJuYWxfX3RyYW5zZm9ybVJlc3VsdChuZXcgU3VibWl0dGFibGVSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIHR4SGFzaFxuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBibG9ja0hhc2ggPSBzdGF0dXMuaXNJbkJsb2NrXG4gICAgICAgICAgICAgICAgPyBzdGF0dXMuYXNJbkJsb2NrXG4gICAgICAgICAgICAgICAgOiBzdGF0dXMuYXNGaW5hbGl6ZWQ7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmRlcml2ZS50eC5ldmVudHMoYmxvY2tIYXNoKS5waXBlKG1hcCgoeyBibG9jaywgZXZlbnRzIH0pID0+IHRoaXMuX19pbnRlcm5hbF9fdHJhbnNmb3JtUmVzdWx0KG5ldyBTdWJtaXR0YWJsZVJlc3VsdCh7XG4gICAgICAgICAgICAgICAgLi4uZmlsdGVyRXZlbnRzKHR4SGFzaCwgYmxvY2ssIGV2ZW50cywgc3RhdHVzKSxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHhIYXNoXG4gICAgICAgICAgICB9KSkpLCBjYXRjaEVycm9yKChpbnRlcm5hbEVycm9yKSA9PiBvZih0aGlzLl9faW50ZXJuYWxfX3RyYW5zZm9ybVJlc3VsdChuZXcgU3VibWl0dGFibGVSZXN1bHQoe1xuICAgICAgICAgICAgICAgIGludGVybmFsRXJyb3IsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHR4SGFzaFxuICAgICAgICAgICAgfSkpKSkpO1xuICAgICAgICB9O1xuICAgICAgICBfX2ludGVybmFsX19vYnNlcnZlU2VuZCA9IChpbmZvKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXBpLnJwYy5hdXRob3Iuc3VibWl0RXh0cmluc2ljKHRoaXMpLnBpcGUodGFwKChoYXNoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX191cGRhdGVTaWduZXIoaGFzaCwgaW5mbyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIF9faW50ZXJuYWxfX29ic2VydmVTdWJzY3JpYmUgPSAoaW5mbykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHhIYXNoID0gdGhpcy5oYXNoO1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5ycGMuYXV0aG9yLnN1Ym1pdEFuZFdhdGNoRXh0cmluc2ljKHRoaXMpLnBpcGUoc3dpdGNoTWFwKChzdGF0dXMpID0+IHRoaXMuX19pbnRlcm5hbF9fb2JzZXJ2ZVN0YXR1cyh0eEhhc2gsIHN0YXR1cykpLCB0YXAoKHN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fdXBkYXRlU2lnbmVyKHN0YXR1cywgaW5mbyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIF9faW50ZXJuYWxfX3NpZ25WaWFTaWduZXIgPSBhc3luYyAoYWRkcmVzcywgb3B0aW9ucywgaGVhZGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaWduZXIgPSBvcHRpb25zLnNpZ25lciB8fCBhcGkuc2lnbmVyO1xuICAgICAgICAgICAgaWYgKCFzaWduZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNpZ25lciBzcGVjaWZpZWQsIGVpdGhlciB2aWEgYXBpLnNldFNpZ25lciBvciB2aWEgc2lnbiBvcHRpb25zLiBZb3UgcG9zc2libHkgbmVlZCB0byBwYXNzIHRocm91Z2ggYW4gZXhwbGljaXQga2V5cGFpciBmb3IgdGhlIG9yaWdpbiBzbyBpdCBjYW4gYmUgdXNlZCBmb3Igc2lnbmluZy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1NpZ25lclBheWxvYWQnLCBbb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrTnVtYmVyOiBoZWFkZXIgPyBoZWFkZXIubnVtYmVyIDogMCxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZFxuICAgICAgICAgICAgICAgIH0pXSk7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2lnbmVyLnNpZ25QYXlsb2FkKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHNpZ25lci5zaWduUGF5bG9hZChwYXlsb2FkLnRvUGF5bG9hZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24oc2lnbmVyLnNpZ25SYXcpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgc2lnbmVyLnNpZ25SYXcocGF5bG9hZC50b1JhdygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduZXIgaW50ZXJmYWNlLCBpdCBzaG91bGQgaW1wbGVtZW50IGVpdGhlciBzaWduUGF5bG9hZCBvciBzaWduUmF3IChvciBib3RoKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGVyZSB3ZSBleHBsaWNpdGx5IGNhbGwgYHRvUGF5bG9hZCgpYCBhZ2FpbiBpbnN0ZWFkIG9mIHdvcmtpbmcgd2l0aCBhbiBvYmplY3RcbiAgICAgICAgICAgIC8vIChyZWZlcmVuY2UpIGFzIHBhc3NlZCB0byB0aGUgc2lnbmVyLiBUaGlzIG1lYW5zIHRoYXQgd2UgYXJlIHN1cmUgdGhhdCB0aGVcbiAgICAgICAgICAgIC8vIHBheWxvYWQgZGF0YSBpcyBub3QgbW9kaWZpZWQgZnJvbSBvdXIgaW5wdXRzLCBidXQgdGhlIHNpZ25lclxuICAgICAgICAgICAgc3VwZXIuYWRkU2lnbmF0dXJlKGFkZHJlc3MsIHJlc3VsdC5zaWduYXR1cmUsIHBheWxvYWQudG9QYXlsb2FkKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pZDtcbiAgICAgICAgfTtcbiAgICAgICAgX19pbnRlcm5hbF9fdXBkYXRlU2lnbmVyID0gKHN0YXR1cywgaW5mbykgPT4ge1xuICAgICAgICAgICAgaWYgKGluZm8gJiYgKGluZm8udXBkYXRlSWQgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgb3B0aW9ucywgdXBkYXRlSWQgfSA9IGluZm87XG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVyID0gb3B0aW9ucy5zaWduZXIgfHwgYXBpLnNpZ25lcjtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmVyICYmIGlzRnVuY3Rpb24oc2lnbmVyLnVwZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmVyLnVwZGF0ZSh1cGRhdGVJZCwgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBTdWJtaXR0YWJsZTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUNsYXNzIH0gZnJvbSAnLi9jcmVhdGVDbGFzcy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3VibWl0dGFibGUoYXBpVHlwZSwgYXBpLCBkZWNvcmF0ZU1ldGhvZCwgcmVnaXN0cnksIGJsb2NrSGFzaCkge1xuICAgIGNvbnN0IFN1Ym1pdHRhYmxlID0gY3JlYXRlQ2xhc3MoeyBhcGksIGFwaVR5cGUsIGJsb2NrSGFzaCwgZGVjb3JhdGVNZXRob2QgfSk7XG4gICAgcmV0dXJuIChleHRyaW5zaWMpID0+IG5ldyBTdWJtaXR0YWJsZShyZWdpc3RyeSB8fCBhcGkucmVnaXN0cnksIGV4dHJpbnNpYyk7XG59XG4iLCJpbXBvcnQgeyBsYXp5TWV0aG9kcywgbG9nZ2VyLCBvYmplY3RDbGVhciB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmNvbnN0IGwgPSBsb2dnZXIoJ2FwaS9hdWdtZW50Jyk7XG5mdW5jdGlvbiBsb2dMZW5ndGgodHlwZSwgdmFsdWVzLCBhbmQgPSBbXSkge1xuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoXG4gICAgICAgID8gYCAke3ZhbHVlcy5sZW5ndGh9ICR7dHlwZX0ke2FuZC5sZW5ndGggPyAnIGFuZCcgOiAnJ31gXG4gICAgICAgIDogJyc7XG59XG5mdW5jdGlvbiBsb2dWYWx1ZXModHlwZSwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5sZW5ndGhcbiAgICAgICAgPyBgXFxuXFx0JHt0eXBlLnBhZFN0YXJ0KDcpfTogJHt2YWx1ZXMuc29ydCgpLmpvaW4oJywgJyl9YFxuICAgICAgICA6ICcnO1xufVxuZnVuY3Rpb24gd2FybihwcmVmaXgsIHR5cGUsIFthZGRlZCwgcmVtb3ZlZF0pIHtcbiAgICBpZiAoYWRkZWQubGVuZ3RoIHx8IHJlbW92ZWQubGVuZ3RoKSB7XG4gICAgICAgIGwud2FybihgYXBpLiR7cHJlZml4fTogRm91bmQke2xvZ0xlbmd0aCgnYWRkZWQnLCBhZGRlZCwgcmVtb3ZlZCl9JHtsb2dMZW5ndGgoJ3JlbW92ZWQnLCByZW1vdmVkKX0gJHt0eXBlfToke2xvZ1ZhbHVlcygnYWRkZWQnLCBhZGRlZCl9JHtsb2dWYWx1ZXMoJ3JlbW92ZWQnLCByZW1vdmVkKX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmaW5kU2VjdGlvbkV4Y2x1ZGVzKGEsIGIpIHtcbiAgICByZXR1cm4gYS5maWx0ZXIoKHMpID0+ICFiLmluY2x1ZGVzKHMpKTtcbn1cbmZ1bmN0aW9uIGZpbmRTZWN0aW9uSW5jbHVkZXMoYSwgYikge1xuICAgIHJldHVybiBhLmZpbHRlcigocykgPT4gYi5pbmNsdWRlcyhzKSk7XG59XG5mdW5jdGlvbiBleHRyYWN0U2VjdGlvbnMoc3JjLCBkc3QpIHtcbiAgICBjb25zdCBzcmNTZWN0aW9ucyA9IE9iamVjdC5rZXlzKHNyYyk7XG4gICAgY29uc3QgZHN0U2VjdGlvbnMgPSBPYmplY3Qua2V5cyhkc3QpO1xuICAgIHJldHVybiBbXG4gICAgICAgIGZpbmRTZWN0aW9uRXhjbHVkZXMoc3JjU2VjdGlvbnMsIGRzdFNlY3Rpb25zKSxcbiAgICAgICAgZmluZFNlY3Rpb25FeGNsdWRlcyhkc3RTZWN0aW9ucywgc3JjU2VjdGlvbnMpXG4gICAgXTtcbn1cbmZ1bmN0aW9uIGZpbmRNZXRob2RFeGNsdWRlcyhzcmMsIGRzdCkge1xuICAgIGNvbnN0IHNyY1NlY3Rpb25zID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICBjb25zdCBkc3RTZWN0aW9ucyA9IGZpbmRTZWN0aW9uSW5jbHVkZXMoT2JqZWN0LmtleXMoZHN0KSwgc3JjU2VjdGlvbnMpO1xuICAgIGNvbnN0IGV4Y2x1ZGVzID0gW107XG4gICAgZm9yIChsZXQgcyA9IDAsIHNjb3VudCA9IGRzdFNlY3Rpb25zLmxlbmd0aDsgcyA8IHNjb3VudDsgcysrKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBkc3RTZWN0aW9uc1tzXTtcbiAgICAgICAgY29uc3Qgc3JjTWV0aG9kcyA9IE9iamVjdC5rZXlzKHNyY1tzZWN0aW9uXSk7XG4gICAgICAgIGNvbnN0IGRzdE1ldGhvZHMgPSBPYmplY3Qua2V5cyhkc3Rbc2VjdGlvbl0pO1xuICAgICAgICBmb3IgKGxldCBkID0gMCwgbWNvdW50ID0gZHN0TWV0aG9kcy5sZW5ndGg7IGQgPCBtY291bnQ7IGQrKykge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gZHN0TWV0aG9kc1tkXTtcbiAgICAgICAgICAgIGlmICghc3JjTWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZXMucHVzaChgJHtzZWN0aW9ufS4ke21ldGhvZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhjbHVkZXM7XG59XG5mdW5jdGlvbiBleHRyYWN0TWV0aG9kcyhzcmMsIGRzdCkge1xuICAgIHJldHVybiBbXG4gICAgICAgIGZpbmRNZXRob2RFeGNsdWRlcyhkc3QsIHNyYyksXG4gICAgICAgIGZpbmRNZXRob2RFeGNsdWRlcyhzcmMsIGRzdClcbiAgICBdO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGFrZXMgYSBkZWNvcmF0ZWQgYXBpIHNlY3Rpb24gKGUuZy4gYXBpLnR4KSBhbmQgYXVnbWVudCBpdCB3aXRoIHRoZSBkZXRhaWxzLiBJdCBkb2VzIG5vdCBvdmVycmlkZSB3aGF0IGlzXG4gKiBhbHJlYWR5IGF2YWlsYWJsZSwgYnV0IHJhdGhlciBqdXN0IGFkZHMgbmV3IG1pc3NpbmcgaXRlbXMgaW50byB0aGUgcmVzdWx0IG9iamVjdC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudE9iamVjdChwcmVmaXgsIHNyYywgZHN0LCBmcm9tRW1wdHkgPSBmYWxzZSkge1xuICAgIGZyb21FbXB0eSAmJiBvYmplY3RDbGVhcihkc3QpO1xuICAgIC8vIE5PVEU6IFRoaXMgcGFydCBpcyBzbGlnaHRseSBwcm9ibGVtYXRpYyBzaW5jZSBpdCB3aWxsIGdldCB0aGVcbiAgICAvLyB2YWx1ZXMgZm9yIGF0IGxlYXN0IGFsbCB0aGUgc2VjdGlvbnMgYW5kIHRoZSBuYW1lcyBvZiB0aGUgbWV0aG9kc1xuICAgIC8vIChTaW5jZSBtZXRob2RzIHdvbid0IGJlIGRlY29yYXRlZCBiZWZvcmUgbGF6eSwgdGhpcyBfbWF5XyBiZSBvaylcbiAgICBpZiAocHJlZml4ICYmIE9iamVjdC5rZXlzKGRzdCkubGVuZ3RoKSB7XG4gICAgICAgIHdhcm4ocHJlZml4LCAnbW9kdWxlcycsIGV4dHJhY3RTZWN0aW9ucyhzcmMsIGRzdCkpO1xuICAgICAgICB3YXJuKHByZWZpeCwgJ2NhbGxzJywgZXh0cmFjdE1ldGhvZHMoc3JjLCBkc3QpKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHNlY3Rpb25zLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW2ldO1xuICAgICAgICBjb25zdCBtZXRob2RzID0gc3JjW3NlY3Rpb25dO1xuICAgICAgICAvLyBXZSBkb24ndCBzZXQgaGVyZSB3aXRoIGEgbGF6eSBpbnRlcmZhY2UsIHdlIGRlY29yYXRlIGJhc2VkXG4gICAgICAgIC8vIG9uIHRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlICh0aGlzIGJ5cGFzc2VzIGFkZGluZyBsYXp5IG9udG8gbGF6eSlcbiAgICAgICAgaWYgKCFkc3Rbc2VjdGlvbl0pIHtcbiAgICAgICAgICAgIGRzdFtzZWN0aW9uXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGxhenlNZXRob2RzKGRzdFtzZWN0aW9uXSwgT2JqZWN0LmtleXMobWV0aG9kcyksIChtKSA9PiBtZXRob2RzW21dKTtcbiAgICB9XG4gICAgcmV0dXJuIGRzdDtcbn1cbiIsImltcG9ydCB7IGxhenlEZXJpdmVTZWN0aW9uIH0gZnJvbSAnQHBvbGthZG90L2FwaS1kZXJpdmUnO1xuLyoqXG4gKiBUaGlzIGlzIGEgc2VjdGlvbiBkZWNvcmF0b3Igd2hpY2gga2VlcHMgYWxsIHR5cGUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZURlcml2ZVNlY3Rpb25zKGRlY29yYXRlTWV0aG9kLCBkZXJpdmVzKSB7XG4gICAgY29uc3QgZ2V0S2V5cyA9IChzKSA9PiBPYmplY3Qua2V5cyhkZXJpdmVzW3NdKTtcbiAgICBjb25zdCBjcmVhdG9yID0gKHMsIG0pID0+IGRlY29yYXRlTWV0aG9kKGRlcml2ZXNbc11bbV0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoZGVyaXZlcyk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gbmFtZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBsYXp5RGVyaXZlU2VjdGlvbihyZXN1bHQsIG5hbWVzW2ldLCBnZXRLZXlzLCBjcmVhdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGwgfSBmcm9tICcuL2xvZ2dpbmcuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckV2ZW50cyh0eEhhc2gsIHsgYmxvY2s6IHsgZXh0cmluc2ljcywgaGVhZGVyIH0gfSwgYWxsRXZlbnRzLCBzdGF0dXMpIHtcbiAgICAvLyBleHRyaW5zaWNzIHRvIGhhc2hlc1xuICAgIGZvciAoY29uc3QgW3R4SW5kZXgsIHhdIG9mIGV4dHJpbnNpY3MuZW50cmllcygpKSB7XG4gICAgICAgIGlmICh4Lmhhc2guZXEodHhIYXNoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja051bWJlcjogaXNDb21wYWN0KGhlYWRlci5udW1iZXIpID8gaGVhZGVyLm51bWJlci51bndyYXAoKSA6IGhlYWRlci5udW1iZXIsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiBhbGxFdmVudHMuZmlsdGVyKCh7IHBoYXNlIH0pID0+IHBoYXNlLmlzQXBwbHlFeHRyaW5zaWMgJiZcbiAgICAgICAgICAgICAgICAgICAgcGhhc2UuYXNBcHBseUV4dHJpbnNpYy5lcW4odHhJbmRleCkpLFxuICAgICAgICAgICAgICAgIHR4SW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaWYgd2UgZG8gZ2V0IHRoZSBibG9jayBhZnRlciBmaW5hbGl6ZWQsIGl0IF9zaG91bGRfIGJlIHRoZXJlXG4gICAgLy8gb25seSB3YXJuIG9uIGZpbHRlcmluZyB3aXRoIGlzSW5CbG9jayAoZmluYWxpemF0aW9uIGZpbmFsaXplcyBhZnRlcilcbiAgICBpZiAoc3RhdHVzLmlzSW5CbG9jaykge1xuICAgICAgICBjb25zdCBhbGxIYXNoZXMgPSBleHRyaW5zaWNzLm1hcCgoeCkgPT4geC5oYXNoLnRvSGV4KCkpO1xuICAgICAgICBsLndhcm4oYGJsb2NrICR7aGVhZGVyLmhhc2gudG9IZXgoKX06IFVuYWJsZSB0byBmaW5kIGV4dHJpbnNpYyAke3R4SGFzaC50b0hleCgpfSBpbnNpZGUgJHthbGxIYXNoZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBpc0tleXJpbmdQYWlyKGFjY291bnQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhY2NvdW50LnNpZ24pO1xufVxuIiwiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZXhwb3J0IGNvbnN0IGwgPSAvKiNfX1BVUkVfXyovIGxvZ2dlcignYXBpL3V0aWwnKTtcbiIsImltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gc2lnKHsgbG9va3VwIH0sIHsgbWV0aG9kLCBzZWN0aW9uIH0sIGFyZ3MpIHtcbiAgICByZXR1cm4gYCR7c2VjdGlvbn0uJHttZXRob2R9KCR7YXJncy5tYXAoKGEpID0+IGxvb2t1cC5nZXRUeXBlRGVmKGEpLnR5cGUpLmpvaW4oJywgJyl9KWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0b3JhZ2VBcmdzKHJlZ2lzdHJ5LCBjcmVhdG9yLCBfYXJncykge1xuICAgIGNvbnN0IGFyZ3MgPSBfYXJncy5maWx0ZXIoKGEpID0+ICFpc1VuZGVmaW5lZChhKSk7XG4gICAgaWYgKGNyZWF0b3IubWV0YS50eXBlLmlzUGxhaW4pIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c2lnKHJlZ2lzdHJ5LCBjcmVhdG9yLCBbXSl9IGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50cywgJHthcmdzLmxlbmd0aH0gZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBoYXNoZXJzLCBrZXkgfSA9IGNyZWF0b3IubWV0YS50eXBlLmFzTWFwO1xuICAgICAgICBjb25zdCBrZXlzID0gaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgID8gW2tleV1cbiAgICAgICAgICAgIDogcmVnaXN0cnkubG9va3VwLmdldFNpVHlwZShrZXkpLmRlZi5hc1R1cGxlLm1hcCgodCkgPT4gdCk7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0ga2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzaWcocmVnaXN0cnksIGNyZWF0b3IsIGtleXMpfSBpcyBhIG1hcCwgcmVxdWlyaW5nICR7a2V5cy5sZW5ndGh9IGFyZ3VtZW50cywgJHthcmdzLmxlbmd0aH0gZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBwYXNzIGFzIHR1cGxlXG4gICAgcmV0dXJuIFtjcmVhdG9yLCBhcmdzXTtcbn1cbiIsImltcG9ydCB7IGlzUHJvbWlzZSwgb2JqZWN0U3ByZWFkLCB1OGFFcSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MsIGVuY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgZG9jdW1lbnRSZWFkeVByb21pc2UgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IHsgcGFja2FnZUluZm8gfSBmcm9tICcuL3BhY2thZ2VJbmZvLmpzJztcbmV4cG9ydCB7IHVud3JhcEJ5dGVzLCB3cmFwQnl0ZXMgfSBmcm9tICcuL3dyYXBCeXRlcy5qcyc7XG5jb25zdCB3aW4gPSB3aW5kb3c7XG53aW4uaW5qZWN0ZWRXZWIzID0gd2luLmluamVjdGVkV2ViMyB8fCB7fTtcbmxldCBpc1dlYjNJbmplY3RlZCA9IHdlYjNJc0luamVjdGVkKCk7XG5sZXQgd2ViM0VuYWJsZVByb21pc2UgPSBudWxsO1xuZXhwb3J0IHsgaXNXZWIzSW5qZWN0ZWQsIHdlYjNFbmFibGVQcm9taXNlIH07XG4vKiogQGludGVybmFsIHRydWUgd2hlbiBhbnl0aGluZyBoYXMgYmVlbiBpbmplY3RlZCBhbmQgaXMgYXZhaWxhYmxlICovXG5mdW5jdGlvbiB3ZWIzSXNJbmplY3RlZCgpIHtcbiAgICByZXR1cm4gT2JqZWN0XG4gICAgICAgIC52YWx1ZXMod2luLmluamVjdGVkV2ViMylcbiAgICAgICAgLmZpbHRlcigoeyBjb25uZWN0LCBlbmFibGUgfSkgPT4gISEoY29ubmVjdCB8fCBlbmFibGUpKVxuICAgICAgICAubGVuZ3RoICE9PSAwO1xufVxuLyoqIEBpbnRlcm5hbCB0aHJvdyBhIGNvbnNpc3RlbnQgZXJyb3Igd2hlbiBub3QgZXh0ZW5zaW9ucyBoYXZlIG5vdCBiZWVuIGVuYWJsZWQgKi9cbmZ1bmN0aW9uIHRocm93RXJyb3IobWV0aG9kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH06IHdlYjNFbmFibGUob3JpZ2luTmFtZSkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSAke21ldGhvZH1gKTtcbn1cbi8qKiBAaW50ZXJuYWwgbWFwIGZyb20gQXJyYXk8SW5qZWN0ZWRBY2NvdW50PiB0byBBcnJheTxJbmplY3RlZEFjY291bnRXaXRoTWV0YT4gKi9cbmZ1bmN0aW9uIG1hcEFjY291bnRzKHNvdXJjZSwgbGlzdCwgc3M1OEZvcm1hdCkge1xuICAgIHJldHVybiBsaXN0Lm1hcCgoeyBhZGRyZXNzLCBnZW5lc2lzSGFzaCwgbmFtZSwgdHlwZSB9KSA9PiAoe1xuICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLmxlbmd0aCA9PT0gNDJcbiAgICAgICAgICAgID8gYWRkcmVzc1xuICAgICAgICAgICAgOiBlbmNvZGVBZGRyZXNzKGRlY29kZUFkZHJlc3MoYWRkcmVzcyksIHNzNThGb3JtYXQpLFxuICAgICAgICBtZXRhOiB7IGdlbmVzaXNIYXNoLCBuYW1lLCBzb3VyY2UgfSxcbiAgICAgICAgdHlwZVxuICAgIH0pKTtcbn1cbi8qKiBAaW50ZXJuYWwgZmlsdGVyIGFjY291bnRzIGJhc2VkIG9uIGdlbmVzaXNIYXNoIGFuZCB0eXBlIG9mIGFjY291bnQgKi9cbmZ1bmN0aW9uIGZpbHRlckFjY291bnRzKGxpc3QsIGdlbmVzaXNIYXNoLCB0eXBlKSB7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKChhKSA9PiAoIWEudHlwZSB8fCAhdHlwZSB8fCB0eXBlLmluY2x1ZGVzKGEudHlwZSkpICYmXG4gICAgICAgICghYS5nZW5lc2lzSGFzaCB8fCAhZ2VuZXNpc0hhc2ggfHwgYS5nZW5lc2lzSGFzaCA9PT0gZ2VuZXNpc0hhc2gpKTtcbn1cbi8qKiBAaW50ZXJuYWwgcmV0cmlldmVzIGFsbCB0aGUgZXh0ZW5zaW9ucyBhdmFpbGFibGUgb24gdGhlIHdpbmRvdyAqL1xuZnVuY3Rpb24gZ2V0V2luZG93RXh0ZW5zaW9ucyhvcmlnaW5OYW1lKSB7XG4gICAgcmV0dXJuIFByb21pc2VcbiAgICAgICAgLmFsbChPYmplY3RcbiAgICAgICAgLmVudHJpZXMod2luLmluamVjdGVkV2ViMylcbiAgICAgICAgLm1hcCgoW25hbWVPckhhc2gsIHsgY29ubmVjdCwgZW5hYmxlLCB2ZXJzaW9uIH1dKSA9PiBQcm9taXNlXG4gICAgICAgIC5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4oKCkgPT4gY29ubmVjdFxuICAgICAgICAvLyBuZXcgc3R5bGUsIHJldHVybmluZyBhbGwgaW5mb1xuICAgICAgICA/IGNvbm5lY3Qob3JpZ2luTmFtZSlcbiAgICAgICAgOiBlbmFibGVcbiAgICAgICAgICAgIC8vIHByZXZpb3VzIGludGVyZmFjZSwgbGVha2FnZXMgb24gbmFtZS92ZXJzaW9uXG4gICAgICAgICAgICA/IGVuYWJsZShvcmlnaW5OYW1lKS50aGVuKChlKSA9PiBvYmplY3RTcHJlYWQoeyBuYW1lOiBuYW1lT3JIYXNoLCB2ZXJzaW9uOiB2ZXJzaW9uIHx8ICd1bmtub3duJyB9LCBlKSlcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdObyBjb25uZWN0KC4uKSBvciBlbmFibGUoLi4uKSBob29rIGZvdW5kJykpKVxuICAgICAgICAuY2F0Y2goKHsgbWVzc2FnZSB9KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluaXRpYWxpemluZyAke25hbWVPckhhc2h9OiAke21lc3NhZ2V9YCk7XG4gICAgfSkpKVxuICAgICAgICAudGhlbigoZXh0cykgPT4gZXh0cy5maWx0ZXIoKGUpID0+ICEhZSkpO1xufVxuLyoqIEBpbnRlcm5hbCBFbnN1cmUgdGhlIGVuYWJsZSBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBmaWx0ZXIgYnkgZXh0ZW5zaW9ucyAqL1xuYXN5bmMgZnVuY3Rpb24gZmlsdGVyRW5hYmxlKGNhbGxlciwgZXh0ZW5zaW9ucykge1xuICAgIGlmICghd2ViM0VuYWJsZVByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbGVyKTtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlcyA9IGF3YWl0IHdlYjNFbmFibGVQcm9taXNlO1xuICAgIHJldHVybiBzb3VyY2VzLmZpbHRlcigoeyBuYW1lIH0pID0+ICFleHRlbnNpb25zIHx8XG4gICAgICAgIGV4dGVuc2lvbnMuaW5jbHVkZXMobmFtZSkpO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBFbmFibGVzIGFsbCB0aGUgcHJvdmlkZXJzIGZvdW5kIG9uIHRoZSBpbmplY3RlZCB3aW5kb3cgaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEVuYWJsZXMgYWxsIGluamVjdGVkIGV4dGVuc2lvbnMgdGhhdCBoYXMgYmVlbiBmb3VuZCBvbiB0aGUgcGFnZS4gVGhpc1xuICogc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgbWFraW5nIHVzZSBvZiBhbnkgb3RoZXIgd2ViMyogZnVuY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViM0VuYWJsZShvcmlnaW5OYW1lLCBjb21wYXRJbml0cyA9IFtdKSB7XG4gICAgaWYgKCFvcmlnaW5OYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcGFzcyBhIG5hbWUgZm9yIHlvdXIgYXBwIHRvIHRoZSB3ZWIzRW5hYmxlIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGluaXRDb21wYXQgPSBjb21wYXRJbml0cy5sZW5ndGhcbiAgICAgICAgPyBQcm9taXNlLmFsbChjb21wYXRJbml0cy5tYXAoKGMpID0+IGMoKS5jYXRjaCgoKSA9PiBmYWxzZSkpKVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZShbdHJ1ZV0pO1xuICAgIHdlYjNFbmFibGVQcm9taXNlID0gZG9jdW1lbnRSZWFkeVByb21pc2UoKCkgPT4gaW5pdENvbXBhdC50aGVuKCgpID0+IGdldFdpbmRvd0V4dGVuc2lvbnMob3JpZ2luTmFtZSlcbiAgICAgICAgLnRoZW4oKHZhbHVlcykgPT4gdmFsdWVzLm1hcCgoZSkgPT4ge1xuICAgICAgICAvLyBpZiB3ZSBkb24ndCBoYXZlIGFuIGFjY291bnRzIHN1YnNjcmliZXIsIGFkZCBhIHNpbmdsZS1zaG90IHZlcnNpb25cbiAgICAgICAgaWYgKCFlLmFjY291bnRzLnN1YnNjcmliZSkge1xuICAgICAgICAgICAgZS5hY2NvdW50cy5zdWJzY3JpYmUgPSAoY2IpID0+IHtcbiAgICAgICAgICAgICAgICBlLmFjY291bnRzXG4gICAgICAgICAgICAgICAgICAgIC5nZXQoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihjYilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIHVic3Vic2NyaWJlIG5lZWRlZCwgdGhpcyBpcyBhIHNpbmdsZS1zaG90XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfSkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBbXSlcbiAgICAgICAgLnRoZW4oKHZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHZhbHVlcy5tYXAoKHsgbmFtZSwgdmVyc2lvbiB9KSA9PiBgJHtuYW1lfS8ke3ZlcnNpb259YCk7XG4gICAgICAgIGlzV2ViM0luamVjdGVkID0gd2ViM0lzSW5qZWN0ZWQoKTtcbiAgICAgICAgY29uc29sZS5pbmZvKGB3ZWIzRW5hYmxlOiBFbmFibGVkICR7dmFsdWVzLmxlbmd0aH0gZXh0ZW5zaW9uJHt2YWx1ZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9OiAke25hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfSkpKTtcbiAgICByZXR1cm4gd2ViM0VuYWJsZVByb21pc2U7XG59XG4vKipcbiAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbGwgdGhlIGFjY291bnRzIGFjcm9zcyBhbGwgcHJvdmlkZXJzXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgcmV0dXJucyB0aGUgZnVsbCBsaXN0IG9mIGFjY291bnQgYXZhaWxhYmxlIChhY3Jvc3MgYWxsIGV4dGVuc2lvbnMpIHRvXG4gKiB0aGUgcGFnZS4gRmlsdGVyaW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvZiBhIHBlci1leHRlbnNpb24sIHBlciB0eXBlIGFuZFxuICogcGVyLWdlbmVzaXNIYXNoIGJhc2lzLiBPcHRpb25hbGx5IHRoZSBhY2NvdW50cyBjYW4gYmUgZW5jb2RlZCB3aXRoIHRoZSBwcm92aWRlZFxuICogc3M1OEZvcm1hdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2ViM0FjY291bnRzKHsgYWNjb3VudFR5cGUsIGV4dGVuc2lvbnMsIGdlbmVzaXNIYXNoLCBzczU4Rm9ybWF0IH0gPSB7fSkge1xuICAgIGNvbnN0IGFjY291bnRzID0gW107XG4gICAgY29uc3Qgc291cmNlcyA9IGF3YWl0IGZpbHRlckVuYWJsZSgnd2ViM0FjY291bnRzJywgZXh0ZW5zaW9ucyk7XG4gICAgY29uc3QgcmV0cmlldmVkID0gYXdhaXQgUHJvbWlzZS5hbGwoc291cmNlcy5tYXAoYXN5bmMgKHsgYWNjb3VudHMsIG5hbWU6IHNvdXJjZSB9KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgYWNjb3VudHMuZ2V0KCk7XG4gICAgICAgICAgICByZXR1cm4gbWFwQWNjb3VudHMoc291cmNlLCBmaWx0ZXJBY2NvdW50cyhsaXN0LCBnZW5lc2lzSGFzaCwgYWNjb3VudFR5cGUpLCBzczU4Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAvLyBjYW5ub3QgaGFuZGxlIHRoaXMgb25lXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgcmV0cmlldmVkLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgICAgICBhY2NvdW50cy5wdXNoKC4uLnJlc3VsdCk7XG4gICAgfSk7XG4gICAgY29uc29sZS5pbmZvKGB3ZWIzQWNjb3VudHM6IEZvdW5kICR7YWNjb3VudHMubGVuZ3RofSBhZGRyZXNzJHthY2NvdW50cy5sZW5ndGggIT09IDEgPyAnZXMnIDogJyd9YCk7XG4gICAgcmV0dXJuIGFjY291bnRzO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBTdWJzY3JpYmVzIHRvIGFsbCB0aGUgYWNjb3VudHMgYWNyb3NzIGFsbCBwcm92aWRlcnNcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBpcyB0aGUgc3Vic2NyaXB0aW9uIHZlcnNpb24gb2YgdGhlIHdlYjNBY2NvdW50cyBpbnRlcmZhY2Ugd2l0aFxuICogdXBkYXRlcyBhcyB0byB3aGVuIG5ldyBhY2NvdW50cyBkbyBiZWNvbWUgYXZhaWxhYmxlLiBUaGUgbGlzdCBvZiBmaWx0ZXJpbmdcbiAqIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgd2ViM0FjY291bnRzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdlYjNBY2NvdW50c1N1YnNjcmliZShjYiwgeyBhY2NvdW50VHlwZSwgZXh0ZW5zaW9ucywgZ2VuZXNpc0hhc2gsIHNzNThGb3JtYXQgfSA9IHt9KSB7XG4gICAgY29uc3Qgc291cmNlcyA9IGF3YWl0IGZpbHRlckVuYWJsZSgnd2ViM0FjY291bnRzU3Vic2NyaWJlJywgZXh0ZW5zaW9ucyk7XG4gICAgY29uc3QgYWNjb3VudHMgPSB7fTtcbiAgICBjb25zdCB0cmlnZ2VyVXBkYXRlID0gKCkgPT4gY2IoT2JqZWN0XG4gICAgICAgIC5lbnRyaWVzKGFjY291bnRzKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIFtzb3VyY2UsIGxpc3RdKSA9PiB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLm1hcEFjY291bnRzKHNvdXJjZSwgZmlsdGVyQWNjb3VudHMobGlzdCwgZ2VuZXNpc0hhc2gsIGFjY291bnRUeXBlKSwgc3M1OEZvcm1hdCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKSk7XG4gICAgY29uc3QgdW5zdWJzID0gc291cmNlcy5tYXAoKHsgYWNjb3VudHM6IHsgc3Vic2NyaWJlIH0sIG5hbWU6IHNvdXJjZSB9KSA9PiBzdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBhY2NvdW50c1tzb3VyY2VdID0gcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdHJpZ2dlclVwZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVuc3Vicy5mb3JFYWNoKCh1bnN1YikgPT4ge1xuICAgICAgICAgICAgdW5zdWIoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbi8qKlxuICogQHN1bW1hcnkgRmluZHMgYSBzcGVjaWZpYyBwcm92aWRlciBiYXNlZCBvbiB0aGUgbmFtZVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHJldHJpZXZlcyBhIHNwZWNpZmljIHNvdXJjZSAoZXh0ZW5zaW9uKSBiYXNlZCBvbiB0aGUgbmFtZS4gSW4gbW9zdFxuICogY2FzZXMgaXQgc2hvdWxkIG5vdCBiZSBuZWVkZWQgdG8gY2FsbCBpdCBkaXJlY3RseSAoZS5nLiBpdCBpcyB1c2VkIGludGVybmFsbHlcbiAqIGJ5IGNhbGxzIHN1Y2ggYXMgd2ViM0Zyb21BZGRyZXNzKSBidXQgd291bGQgYWxsb3cgb3BlcmF0aW9uIG9uIGEgc3BlY2lmaWNcbiAqIGtub3duIGV4dGVuc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdlYjNGcm9tU291cmNlKHNvdXJjZSkge1xuICAgIGlmICghd2ViM0VuYWJsZVByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ3dlYjNGcm9tU291cmNlJyk7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZXMgPSBhd2FpdCB3ZWIzRW5hYmxlUHJvbWlzZTtcbiAgICBjb25zdCBmb3VuZCA9IHNvdXJjZSAmJiBzb3VyY2VzLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBzb3VyY2UpO1xuICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3ZWIzRnJvbVNvdXJjZTogVW5hYmxlIHRvIGZpbmQgYW4gaW5qZWN0ZWQgJHtzb3VyY2V9YCk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbn1cbi8qKlxuICogQHN1bW1hcnkgRmluZCBhIHNwZWNpZmljIHByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpYyBhZGRyZXNzXG4gKiBAZGVzY3JpcHRpb25cbiAqIEJhc2VkIG9uIGFuIGFkZHJlc3MsIHJldHVybiB0aGUgcHJvdmlkZXIgdGhhdCBoYXMgbWFrZXMgdGhpcyBhZGRyZXNzXG4gKiBhdmFpbGFibGUgdG8gdGhlIHBhZ2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3ZWIzRnJvbUFkZHJlc3MoYWRkcmVzcykge1xuICAgIGlmICghd2ViM0VuYWJsZVByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ3dlYjNGcm9tQWRkcmVzcycpO1xuICAgIH1cbiAgICBjb25zdCBhY2NvdW50cyA9IGF3YWl0IHdlYjNBY2NvdW50cygpO1xuICAgIGxldCBmb3VuZDtcbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICBjb25zdCBhY2NvdW50VThhID0gZGVjb2RlQWRkcmVzcyhhZGRyZXNzKTtcbiAgICAgICAgZm91bmQgPSBhY2NvdW50cy5maW5kKChhY2NvdW50KSA9PiB1OGFFcShkZWNvZGVBZGRyZXNzKGFjY291bnQuYWRkcmVzcyksIGFjY291bnRVOGEpKTtcbiAgICB9XG4gICAgaWYgKCFmb3VuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdlYjNGcm9tQWRkcmVzczogVW5hYmxlIHRvIGZpbmQgaW5qZWN0ZWQgJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICByZXR1cm4gd2ViM0Zyb21Tb3VyY2UoZm91bmQubWV0YS5zb3VyY2UpO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBMaXN0IGFsbCBwcm92aWRlcnMgZXhwb3NlZCBieSBvbmUgc291cmNlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZvciBleHRlbnNpb25zIHRoYXQgc3VwcGx5IFJQQyBwcm92aWRlcnMsIHRoaXMgY2FsbCB3b3VsZCByZXR1cm4gdGhlIGxpc3RcbiAqIG9mIFJQQyBwcm92aWRlcnMgdGhhdCBhbnkgZXh0ZW5zaW9uIG1heSBzdXBwbHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3ZWIzTGlzdFJwY1Byb3ZpZGVycyhzb3VyY2UpIHtcbiAgICBjb25zdCB7IHByb3ZpZGVyIH0gPSBhd2FpdCB3ZWIzRnJvbVNvdXJjZShzb3VyY2UpO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFeHRlbnNpb24gJHtzb3VyY2V9IGRvZXMgbm90IGV4cG9zZSBhbnkgcHJvdmlkZXJgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwcm92aWRlci5saXN0UHJvdmlkZXJzKCk7XG59XG4vKipcbiAqIEBzdW1tYXJ5IFN0YXJ0IGFuIFJQQyBwcm92aWRlciBwcm92aWRlciBieSBhIHNwZWNpZmljIHNvdXJjZVxuICogQGRlc2NyaXB0aW9uXG4gKiBGb3IgZXh0ZW5zaW9ucyB0aGF0IHN1cHBseSBSUEMgcHJvdmlkZXJzLCB0aGlzIGNhbGwgd291bGQgcmV0dXJuIGFuXG4gKiBlbmFibGVkIHByb3ZpZGVyIChpbml0aWFsaXplZCB3aXRoIHRoZSBzcGVjaWZpYyBrZXkpIGZyb20gdGhlXG4gKiBzcGVjaWZpZWQgZXh0ZW5zaW9uIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdlYjNVc2VScGNQcm92aWRlcihzb3VyY2UsIGtleSkge1xuICAgIGNvbnN0IHsgcHJvdmlkZXIgfSA9IGF3YWl0IHdlYjNGcm9tU291cmNlKHNvdXJjZSk7XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dGVuc2lvbiAke3NvdXJjZX0gZG9lcyBub3QgZXhwb3NlIGFueSBwcm92aWRlcmApO1xuICAgIH1cbiAgICBjb25zdCBtZXRhID0gYXdhaXQgcHJvdmlkZXIuc3RhcnRQcm92aWRlcihrZXkpO1xuICAgIHJldHVybiB7IG1ldGEsIHByb3ZpZGVyIH07XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QvZXh0ZW5zaW9uLWRhcHAnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcwLjQ3LjUnIH07XG4iLCJleHBvcnQgZnVuY3Rpb24gZG9jdW1lbnRSZWFkeVByb21pc2UoY3JlYXRvcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgcmVzb2x2ZShjcmVhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiByZXNvbHZlKGNyZWF0b3IoKSkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBVOEFfV1JBUF9FVEhFUkVVTSwgVThBX1dSQVBfUE9TVEZJWCwgVThBX1dSQVBfUFJFRklYLCB1OGFJc1dyYXBwZWQsIHU4YVVud3JhcEJ5dGVzLCB1OGFXcmFwQnl0ZXMgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgY29uc3QgRVRIRVJFVU0gPSBVOEFfV1JBUF9FVEhFUkVVTTtcbmV4cG9ydCBjb25zdCBQT1NURklYID0gVThBX1dSQVBfUE9TVEZJWDtcbmV4cG9ydCBjb25zdCBQUkVGSVggPSBVOEFfV1JBUF9QUkVGSVg7XG5leHBvcnQgY29uc3QgaXNXcmFwcGVkID0gdThhSXNXcmFwcGVkO1xuZXhwb3J0IGNvbnN0IHVud3JhcEJ5dGVzID0gdThhVW53cmFwQnl0ZXM7XG5leHBvcnQgY29uc3Qgd3JhcEJ5dGVzID0gdThhV3JhcEJ5dGVzO1xuIiwiZXhwb3J0IGNvbnN0IGtub3duR2VuZXNpcyA9IHtcbiAgICBhY2FsYTogW1xuICAgICAgICAnMHhmYzQxYjliZDhlZjhmZTUzZDU4YzdlYTY3Yzc5NGM3ZWM5YTczZGFmMDVlNmQ1NGIxNGZmNjM0MmM5OWJhNjRjJ1xuICAgIF0sXG4gICAgYWp1bmE6IFtcbiAgICAgICAgJzB4ZTM1OGViMWQxMWIzMTI1NWEyODZjMTJlNDRmZTY3ODBiN2VkYjE3MWQ2NTc5MDVhOTdlMzlmNzFkOWM2YzNlZSdcbiAgICBdLFxuICAgICdhbGVwaC1ub2RlJzogW1xuICAgICAgICAnMHg3MDI1NWI0ZDI4ZGUwZmM0ZTFhMTkzZDdlMTc1YWQxY2NlZjQzMTU5ODIxMWM1NTUzOGYxMDE4NjUxYTAzNDRlJ1xuICAgIF0sXG4gICAgYXN0YXI6IFtcbiAgICAgICAgJzB4OWViNzZjNTE4NGM0YWI4Njc5ZDJkNWQ4MTlmZGY5MGI5YzAwMTQwM2U5ZTE3ZGEyZTE0YjZkOGFlYzQwMjljNidcbiAgICBdLFxuICAgIGJhc2lsaXNrOiBbXG4gICAgICAgICcweGE4NWNmYjliOWZkNGQ2MjJhNWIyODI4OWEwMjM0N2FmOTg3ZDhmNzNmYTMxMDg0NTBlMmI0YTExYzFjZTU3NTUnXG4gICAgXSxcbiAgICBiaWZyb3N0OiBbXG4gICAgICAgICcweDI2MmUxYjJhZDcyODQ3NWZkNmZlODhlNjJkMzRjMjAwYWJlNmZkNjkzOTMxZGRhZDE0NDA1OWIxZWI4ODRlNWInXG4gICAgXSxcbiAgICAnYmlmcm9zdC1rdXNhbWEnOiBbXG4gICAgICAgICcweDlmMjhjNmE2OGUwZmM5NjQ2ZWZmNjQ5MzU2ODRmNmVlZWVjZTUyN2UzN2JiZTFmMjEzZDIyY2FhMWQ5ZDZiZWQnXG4gICAgXSxcbiAgICBiaXR0ZW5zb3I6IFtcbiAgICAgICAgJzB4MmYwNTU1Y2M3NmZjMjg0MGEyNWE2ZWEzYjk2MzcxNDY4MDZmMWY0NGIwOTBjMTc1ZmZkZTJhN2U1YWIzNmMwMydcbiAgICBdLFxuICAgIGNlbnRyaWZ1Z2U6IFtcbiAgICAgICAgJzB4YjNkYjQxNDIxNzAyZGY5YTdmY2FjNjJiNTNmZmVhYzg1Zjc4NTNjYzRlNjg5ZTBiOTNhZWIzZGIxOGMwOWQ4MicsXG4gICAgICAgICcweDY3ZGRkZjI2NzNiNjllNWY4NzVmNmYyNTI3NzQ5NTgzNDM5OGVhZmQ2N2Y0OTJlMDlmM2YzMzQ1ZTAwM2QxYjUnXG4gICAgXSxcbiAgICBjZXJlOiBbXG4gICAgICAgICcweDgxNDQzODM2YTlhMjRjYWFhMjNmMTI0MTg5N2QxMjM1NzE3NTM1NzExZDFkM2ZlMjRlYWU0ZmRjOTQyYzA5MmMnXG4gICAgXSxcbiAgICBjb21wb3NhYmxlOiBbXG4gICAgICAgICcweGRhYWI4ZGY3NzZlYjUyZWM2MDRhNWRmNWQzODhiYjYyYTA1MGEwYWFlYzQ1NTZhNjQyNjViOWQ0Mjc1NTU1MmQnXG4gICAgXSxcbiAgICBkYXJ3aW5pYTogW1xuICAgICAgICAnMHhlNzE1NzhiMzdhN2M3OTliMGFiNGVlODdmZmE2ZjA1OWE2Yjk4ZjcxZjA2ZmI4Yzg0YThkODgwMTNhNTQ4YWQ2J1xuICAgIF0sXG4gICAgJ2RvY2stbWFpbm5ldCc6IFtcbiAgICAgICAgJzB4NmJmZTI0ZGNhMmEzYmUxMGYyMjIxMjY3OGFjMTNhNjQ0NmVjNzY0MTAzYzBmMzQ3MWM3MTYwOWVhYzM4NGFhZScsXG4gICAgICAgICcweGY3MzQ2N2M2NTQ0YWE2OGRmMmVlNTQ2YjEzNWY5NTVjNDZiOTBmYTYyN2U5YjVkNzkzNWY0MTA2MWJiOGE1YTknXG4gICAgXSxcbiAgICBlZGdld2FyZTogW1xuICAgICAgICAnMHg3NDJhMmNhNzBjMmZkYTZjZWU0ZjhkZjk4ZDY0YzRjNjcwYTA1MmQ5NTY4MDU4OTgyZGFkOWQ1YTdhMTM1YzViJ1xuICAgIF0sXG4gICAgZW5qaW46IFtcbiAgICAgICAgJzB4ZDg3NjFkM2M4OGYyNmRjMTI4NzVjMDBkMzE2NWY3ZDY3MjQzZDU2ZmM4NWI0Y2YxOTkzNzYwMWE3OTE2ZTVhOSdcbiAgICBdLFxuICAgIGVxdWlsaWJyaXVtOiBbXG4gICAgICAgICcweDZmMWE4MDBkZTNkYWZmN2Y1ZTAzN2RkZjY2YWIyMmNlMDNhYjkxODc0ZGViZWRkYjEwODZmNWY3ZGJkNDg5MjUnXG4gICAgXSxcbiAgICBnZW5zaGlybzogW1xuICAgICAgICAnMHg5YjhjZWZjMGViNWM1NjhiNTI3OTk4YmRkNzZjMTg0ZTJiNzZhZTU2MWJlNzZlNDY2NzA3MjIzMDIxN2VhMjQzJ1xuICAgIF0sXG4gICAgaHlkcmFkeDogW1xuICAgICAgICAnMHhhZmRjMTg4ZjQ1YzcxZGFjYmFhMGI2MmUxNmE5MWY3MjZjN2I4Njk5YTk3NDhjZGY3MTU0NTlkZTZiN2YzNjZkJywgLy8gSHlkcmFEWCBQYXJhY2hhaW5cbiAgICAgICAgJzB4ZDJhNjIwYzI3ZWM1Y2JjNTYyMWZmOWE1MjI2ODk4OTUwNzRmN2NjYTBkMDhlNzEzNGE3ODA0ZTFhM2JhODZmYycsIC8vIFNuYWtlbmV0IEdlbjMtMVxuICAgICAgICAnMHgxMGFmNmU4NDIzNDQ3N2Q4NGRjNTcyYmFjMDc4OTgxM2IyNTRhYTQ5MDc2N2VkMDZmYjk1OTExOTFkMTA3M2Y5JywgLy8gU25ha2VuZXQgR2VuM1xuICAgICAgICAnMHgzZDc1NTA3ZGQ0NjMwMTc2N2U2MDEyNjU3OTFkYTFkOWNiNDdiNmViYzk0ZTg3MzQ3YjYzNWU1YmY1OGJkMDQ3JywgLy8gU25ha2VuZXQgR2VuMlxuICAgICAgICAnMHgwZWQzMmJmY2FiNGE4MzUxN2ZhYzg4ZjJhYTdjYmMyZjg4ZDNhYjkzYmU5YTEyYjYxODhhMDM2YmY4YTk0M2MyJyAvLyBTbmFrZW5ldCBHZW4xXG4gICAgXSxcbiAgICAnaW50ZXJsYXktcGFyYWNoYWluJzogW1xuICAgICAgICAnMHhiZjg4ZWZlNzBlOWUwZTkxNjQxNmU4YmVkNjFmMmI0NTcxN2Y1MTdkN2YzNTIzZTMzYzdiMDAxZTVmZmNiYzcyJ1xuICAgIF0sXG4gICAga2FydXJhOiBbXG4gICAgICAgICcweGJhZjVhYWJlNDA2NDZkMTFmMGVlOGFiYmRjNjRmNGE0Yjc2NzQ5MjVjYmEwOGU0YTA1ZmY5ZWJlZDZlMjEyNmInXG4gICAgXSxcbiAgICBraGFsYTogW1xuICAgICAgICAnMHhkNDM1NDBiYTZkM2ViNDg5N2MyOGE3N2Q0OGNiNWI3MjlmZWEzNzYwM2NiYmZjN2E4NmE3M2I3MmFkYjNiZThkJ1xuICAgIF0sXG4gICAga3VsdXB1OiBbXG4gICAgICAgICcweGY3YTk5ZDNjYjkyODUzZDAwZDUyNzVjOTcxYzEzMmMwNzQ2MzYyNTY1ODNmZWU1M2IzYmJlNjBkN2I4NzY5YmEnXG4gICAgXSxcbiAgICBrdXNhbWE6IFtcbiAgICAgICAgJzB4YjBhOGQ0OTMyODVjMmRmNzMyOTBkZmI3ZTYxZjg3MGYxN2I0MTgwMTE5N2ExNDljYTkzNjU0NDk5ZWEzZGFmZScsIC8vIEt1c2FtYSBDQzMsXG4gICAgICAgICcweGUzNzc3ZmE5MjJjYWZiZmYyMDBjYWRlYWVhMWE3NmJkNzg5OGFkNWI4OWY3ODQ4OTk5MDU4YjUwZTcxNWY2MzYnLCAvLyBLdXNhbWEgQ0MyXG4gICAgICAgICcweDNmZDdiOWViNmEwMDM3NmU1YmU2MWYwMWFiYjQyOWZmYjBiMTA0YmUwNWVhZmY0ZDQ1OGRhNDhmY2Q0MjViYWYnIC8vIEt1c2FtYSBDQzFcbiAgICBdLFxuICAgIG1hdHJpeGNoYWluOiBbXG4gICAgICAgICcweDNhZjRmZjQ4ZWM3NmQyZWZjODQ3NjczMGY0MjNhYzA3ZTI1YWQ0OGY1ZjRjOWRjMzljNzc4YjE2NGQ4MDg2MTUnXG4gICAgXSxcbiAgICBub2RsZTogW1xuICAgICAgICAnMHg5N2RhN2VkZTk4ZDdiYWQ0ZTM2YjRkNzM0YjYwNTU0MjVhM2JlMDM2ZGEyYTMzMmVhNWE3MDM3NjU2NDI3YTIxJ1xuICAgIF0sXG4gICAgb3JpZ2ludHJhaWw6IFtcbiAgICAgICAgJzB4ZTdlMDk2MjMyNGEzYjg2YzgzNDA0ZGJlYTQ4M2YyNWZiNWRhYjRjMjI0NzkxYzgxYjc1NmNmYzk0ODAwNjE3NCdcbiAgICBdLFxuICAgIHAzZDogW1xuICAgICAgICAnMHg2YzU4OTQ4MzdhZDg5YjZkOTJiMTE0YTJmYjNlYWZhOGZlM2QyNmE1NDg0OGUzNDQ3MDE1NDQyY2Q2ZWY0ZTY2J1xuICAgIF0sXG4gICAgcGFyYWxsZWw6IFtcbiAgICAgICAgJzB4ZTYxYTQxYzUzZjVkY2QwYmViMDlkZjkzYjM0NDAyYWFkYTQ0Y2IwNTExN2I3MTA1OWNjZTQwYTI3MjNhNGU5NydcbiAgICBdLFxuICAgIHBlbmR1bHVtOiBbXG4gICAgICAgICcweDVkM2MyOTg2MjJkNTYzNGVkMDE5YmY2MWVhNGI3MTY1NTAzMDAxNWJkZTliZWIwZDZhMjQ3NDM3MTQ0NjJjODYnXG4gICAgXSxcbiAgICBwaGFsYTogW1xuICAgICAgICAnMHgxYmI5NjlkODU5NjVlNGJiNWE2NTFhYmJlZGYyMWE1NGI2YjMxYTIxZjY2YjU0MDFjYzNmMWUyODYyNjhkNzM2J1xuICAgIF0sXG4gICAgcGljYXNzbzogW1xuICAgICAgICAnMHg2ODExYTMzOTY3M2M5ZGFhODk3OTQ0ZGNkYWM5OWM2ZTI5MzljYzg4MjQ1ZWQyMTk1MWEwYTNjOWEyYmU3NWJjJyxcbiAgICAgICAgJzB4ZThlN2YwZjRjNGY1YTAwNzIwYjQ4MjFkYmZkZGVmZWE3NDkwYmNmMGIxOTAwOTk2MWNjNDY5NTc5ODRlMmMxYydcbiAgICBdLFxuICAgIHBvbGthZGV4OiBbXG4gICAgICAgICcweDM5MjBiY2I0OTYwYTFlZWY1NTgwY2Q1MzY3ZmYzZjQzMGVlZjA1Mjc3NGY3ODQ2ODg1MmY3YjljYjM5ZjhhM2MnXG4gICAgXSxcbiAgICBwb2xrYWRvdDogW1xuICAgICAgICAnMHg5MWIxNzFiYjE1OGUyZDM4NDhmYTIzYTlmMWMyNTE4MmZiOGUyMDMxM2IyYzFlYjQ5MjE5ZGE3YTcwY2U5MGMzJ1xuICAgIF0sXG4gICAgcG9seW1lc2g6IFtcbiAgICAgICAgJzB4NmZiZDc0ZTVlMWQwYTYxZDUyY2NmZTlkNGFkYWVkMTZkZDNhN2NhYTM3YzZiYzRkMGMyZmExMmU4YjJmNDA2MydcbiAgICBdLFxuICAgIHF1YXJ0ejogW1xuICAgICAgICAnMHhjZDRkNzMyMjAxZWJlNWQ2YjAxNGVkZGEwNzFjNDIwM2UxNjg2NzMwNTMzMjMwMWRjOGQwOTIwNDRiMjhlNTU0J1xuICAgIF0sXG4gICAgcm9jb2NvOiBbXG4gICAgICAgICcweDY0MDhkZTc3MzdjNTljMjM4ODkwNTMzYWYyNTg5NmEyYzIwNjA4ZDhiMzgwYmIwMTAyOWFjYjM5Mjc4MTA2M2UnLFxuICAgICAgICAnMHhhYWYyY2QxYjc0YjVmNzI2ODk1OTIxMjU5NDIxYjUzNDEyNDcyNjI2Mzk4MjUyMjE3NDE0NzA0NmI4ODI3ODk3JyxcbiAgICAgICAgJzB4MDM3ZjVmM2M4ZTY3YjMxNDA2MjAyNWZjODg2ZmNkNjIzOGVhMjVhNGE5YjQ1ZGNlOGQyNDY4MTVjOWViZTc3MCcsXG4gICAgICAgICcweGMxOTZmODEyNjBjZjE2ODYxNzJiNDdhNzljZjAwMjEyMDczNWQ3Y2IwZWIxNDc0ZThhZGNlNTY2MTg0NTZmZmYnLFxuICAgICAgICAnMHhmNmU5OTgzYzM3YmFmNjg4NDZmZWRhZmUyMWU1NjcxODc5MGUzOWZiMWM1ODJhYmM0MDhiODFiYzdiMjA4ZjlhJyxcbiAgICAgICAgJzB4NWZjZTY4N2RhMzkzMDVkZmU2ODJiMTE3ZjA4MjBiMzE5MzQ4ZThiYjM3ZWIxNmNmMzRhY2JmNmEyMDJkZTlkOScsXG4gICAgICAgICcweGU3YzNkNWVkZGU3ZGI5NjQzMTdjZDliNTFhM2EwNTlkN2NkOTlmODFiZGJjZTE0OTkwMDQ3MzU0MzM0Yzk3NzknLFxuICAgICAgICAnMHgxNjExZTFkYmYwNDA1Mzc5Yjg2MWUyZTI3ZGFhOTBmNDgwYjJlNmQzNjgyNDE0YTgwODM1YTUyZThjYjhhMjE1JyxcbiAgICAgICAgJzB4MzQzNDQyZjEyZmE3MTU0ODlhODcxNGU3OWE3YjI2NGVhODhjMGQ1YjhjNjZiNjg0YTc3ODhhNTE2MDMyZjZiOScsXG4gICAgICAgICcweDc4YmNkNTMwYzZiM2EwNjhiYzE3NDczY2Y1ZDJhZmY5YzI4NzEwMmJlZDlhZjNhZTNjNDFjMzNiOWQ2YzYxNDcnLFxuICAgICAgICAnMHg0NzM4MWVlMDY5NzE1M2Q2NDQwNGZjNTc4MzkyYzhmZDVjYmE5MDczMzkxOTA4ZjQ2Yzg4ODQ5ODQxNTY0N2JkJyxcbiAgICAgICAgJzB4MTljMGU0ZmE4YWI3NWY1YWM3ODY1ZTBiOGY3NGZmOTFlYjlhMTAwZDMzNmY0MjNjZDAxM2E4YmVmYmE0MDI5OSdcbiAgICBdLFxuICAgIHNvcmE6IFtcbiAgICAgICAgJzB4N2U0ZTMyZDBmZWFmZDRmOWM5NDE0YjBiZTg2MzczZjlhMWVmYTkwNDgwOWI2ODM0NTNhOWFmNjg1NmQzOGFkNSdcbiAgICBdLFxuICAgIHN0YWZpOiBbXG4gICAgICAgICcweDI5MGE0MTQ5ZjA5ZWEwZTQwMmM3NGMxYzdlOTZhZTQyMzk1ODg1NzdmZTc4OTMyZjk0ZjU0MDRjNjgyNDNkODAnXG4gICAgXSxcbiAgICBzdGF0ZW1pbmU6IFtcbiAgICAgICAgJzB4NDgyMzllZjYwN2Q3OTI4ODc0MDI3YTQzYTY3Njg5MjA5NzI3ZGZiM2QzZGM1ZTViMDNhMzliZGMyZWRhNzcxYSdcbiAgICBdLFxuICAgIHN0YXRlbWludDogW1xuICAgICAgICAnMHg2OGQ1NmYxNWY4NWQzMTM2OTcwZWMxNjk0NjA0MGJjMTc1MjY1NGU5MDYxNDdmN2U0M2U5ZDUzOWQ3YzNkZTJmJ1xuICAgIF0sXG4gICAgc3Vic29jaWFsOiBbXG4gICAgICAgICcweDBiZDcyYzFjMzA1MTcyZTEyNzUyNzhhYWViM2YxNjFlMDJlY2NiN2E4MTllNjNmNjJkNDdiZDUzYTI4MTg5ZjgnXG4gICAgXSxcbiAgICB0ZXJub2E6IFtcbiAgICAgICAgJzB4Njg1OWM4MWNhOTVlZjYyNGM5ZGZlNGRjNmUzMzgxYzMzZTVkNjUwOWUzNWUxNDcwOTJiZmJjNzgwZjc3N2M0ZSdcbiAgICBdLFxuICAgIHVuaXF1ZTogW1xuICAgICAgICAnMHg4NDMyMmQ5Y2RkYmYzNTA4OGYxZTU0ZTlhODVjOTY3YTQxYTU2YTRmNDM0NDU3NjgxMjVlNjFhZjE2NmM3ZDMxJ1xuICAgIF0sXG4gICAgdnRiOiBbXG4gICAgICAgICcweDI4NmJjODQxNGM3MDAwY2UxZDZlZTZhODM0ZTI5YTU0YzE3ODQ4MTRiNzYyNDNlYjc3ZWQwYjJjNTU3M2M2MGYnLFxuICAgICAgICAnMHg3NDgzYjg5NTcyZmIyYmQ2ODdjN2I5YTkzYjI0MmQwYjIzN2Y5YWJhNDYzYWJhMDdlYzI0NTAzOTMxMDM4YWFhJ1xuICAgIF0sXG4gICAgd2VzdGVuZDogW1xuICAgICAgICAnMHhlMTQzZjIzODAzYWM1MGU4ZjZmOGU2MjY5NWQxY2U5ZTRlMWQ2OGFhMzZjMWNkMmNmZDE1MzQwMjEzZjM0MjNlJ1xuICAgIF0sXG4gICAgeHhuZXR3b3JrOiBbXG4gICAgICAgICcweDUwZGQ1ZDIwNjkxN2JmMTA1MDJjNjhmYjRkMThhNTlmYzhhYTMxNTg2ZjRlODg1NmI0OTNlNDM1NDRhYTgyYWEnXG4gICAgXSxcbiAgICB6ZWl0Z2Vpc3Q6IFtcbiAgICAgICAgJzB4MWJmMmEyZWNiNGE4NjhkZTY2ZWE4NjEwZjJjZTdjOGM0MzcwNjU2MWI2NDc2MDMxMzE1ZjY2NDBmZTM4ZTA2MCdcbiAgICBdXG59O1xuIiwiZXhwb3J0IGNvbnN0IGtub3duSWNvbiA9IHtcbiAgICBjZW50cmlmdWdlOiAncG9sa2Fkb3QnLFxuICAgIGt1c2FtYTogJ3BvbGthZG90JyxcbiAgICBwb2xrYWRvdDogJ3BvbGthZG90JyxcbiAgICBzb3JhOiAncG9sa2Fkb3QnLFxuICAgIHN0YXRlbWluZTogJ3BvbGthZG90JyxcbiAgICBzdGF0ZW1pbnQ6ICdwb2xrYWRvdCcsXG4gICAgd2VzdG1pbnQ6ICdwb2xrYWRvdCdcbn07XG4iLCJleHBvcnQgY29uc3Qga25vd25MZWRnZXIgPSB7XG4gICAgYWNhbGE6IDB4MDAwMDAzMTMsXG4gICAgYWp1bmE6IDB4MDAwMDAxNjIsXG4gICAgJ2FsZXBoLW5vZGUnOiAweDAwMDAwMjgzLFxuICAgIGFzdGFyOiAweDAwMDAwMzJhLFxuICAgIGJpZnJvc3Q6IDB4MDAwMDAzMTQsXG4gICAgJ2JpZnJvc3Qta3VzYW1hJzogMHgwMDAwMDMxNCxcbiAgICBjZW50cmlmdWdlOiAweDAwMDAwMmViLFxuICAgIGNvbXBvc2FibGU6IDB4MDAwMDAxNjIsXG4gICAgZGFyd2luaWE6IDB4MDAwMDAxNjIsXG4gICAgJ2RvY2stbWFpbm5ldCc6IDB4MDAwMDAyNTIsXG4gICAgZWRnZXdhcmU6IDB4MDAwMDAyMGIsXG4gICAgZW5qaW46IDB4MDAwMDA0ODMsXG4gICAgZXF1aWxpYnJpdW06IDB4MDVmNWUwZmQsXG4gICAgZ2Vuc2hpcm86IDB4MDVmNWUwZmMsXG4gICAgaHlkcmFkeDogMHgwMDAwMDE2MixcbiAgICAnaW50ZXJsYXktcGFyYWNoYWluJzogMHgwMDAwMDE2MixcbiAgICBrYXJ1cmE6IDB4MDAwMDAyYWUsXG4gICAga2hhbGE6IDB4MDAwMDAxYjIsXG4gICAga3VzYW1hOiAweDAwMDAwMWIyLFxuICAgIG1hdHJpeGNoYWluOiAweDAwMDAwNDgzLFxuICAgIG5vZGxlOiAweDAwMDAwM2ViLFxuICAgIG9yaWdpbnRyYWlsOiAweDAwMDAwMTYyLFxuICAgIHBhcmFsbGVsOiAweDAwMDAwMTYyLFxuICAgIHBlbmR1bHVtOiAweDAwMDAwMTYyLFxuICAgIHBoYWxhOiAweDAwMDAwMTYyLFxuICAgIHBpY2Fzc286IDB4MDAwMDAxYjIsXG4gICAgcG9sa2FkZXg6IDB4MDAwMDAzMWYsXG4gICAgcG9sa2Fkb3Q6IDB4MDAwMDAxNjIsXG4gICAgcG9seW1lc2g6IDB4MDAwMDAyNTMsXG4gICAgcXVhcnR6OiAweDAwMDAwMjc3LFxuICAgIHNvcmE6IDB4MDAwMDAyNjksXG4gICAgc3RhZmk6IDB4MDAwMDAzOGIsXG4gICAgc3RhdGVtaW5lOiAweDAwMDAwMWIyLCAvLyBjb21tb24tZ29vZCBvbiBLdXNhbWEsIHNoYXJlcyBkZXJpdmF0aW9uXG4gICAgc3RhdGVtaW50OiAweDAwMDAwMTYyLCAvLyBjb21tb24tZ29vZCBvbiBQb2xrYWRvdCwgc2hhcmVzIGRlcml2YXRpb25cbiAgICB0ZXJub2E6IDB4MDAwMDNlMyxcbiAgICB1bmlxdWU6IDB4MDAwMDAyOTUsXG4gICAgdnRiOiAweDAwMDAwMmI2LFxuICAgIHh4bmV0d29yazogMHgwMDAwMDdhMyxcbiAgICB6ZWl0Z2Vpc3Q6IDB4MDAwMDAxNjJcbn07XG4iLCJleHBvcnQgY29uc3Qga25vd25UZXN0bmV0ID0ge1xuICAgICcnOiB0cnVlLCAvLyB0aGlzIGlzIHRoZSBkZWZhdWx0IG5vbi1uZXR3b3JrIGVudHJ5XG4gICAgJ2Nlc3MtdGVzdG5ldCc6IHRydWUsXG4gICAgJ2RvY2stdGVzdG5ldCc6IHRydWUsXG4gICAganVwaXRlcjogdHJ1ZSxcbiAgICAnbWF0aGNoYWluLXRlc3RuZXQnOiB0cnVlLFxuICAgIHAzZHQ6IHRydWUsXG4gICAgc3Vic3BhY2VfdGVzdG5ldDogdHJ1ZSxcbiAgICAnemVyby1hbHBoYXZpbGxlJzogdHJ1ZVxufTtcbiIsImltcG9ydCBrbm93blN1YnN0cmF0ZSBmcm9tICdAc3Vic3RyYXRlL3NzNTgtcmVnaXN0cnknO1xuaW1wb3J0IHsga25vd25HZW5lc2lzLCBrbm93bkljb24sIGtub3duTGVkZ2VyLCBrbm93blRlc3RuZXQgfSBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmNvbnN0IFVOU09SVEVEID0gWzAsIDIsIDQyXTtcbmNvbnN0IFRFU1RORVRTID0gWyd0ZXN0bmV0J107XG5mdW5jdGlvbiB0b0V4cGFuZGVkKG8pIHtcbiAgICBjb25zdCBuZXR3b3JrID0gby5uZXR3b3JrIHx8ICcnO1xuICAgIGNvbnN0IG5hbWVQYXJ0cyA9IG5ldHdvcmsucmVwbGFjZSgvXy9nLCAnLScpLnNwbGl0KCctJyk7XG4gICAgY29uc3QgbiA9IG87XG4gICAgLy8gbGVkZ2VyIGFkZGl0aW9uc1xuICAgIG4uc2xpcDQ0ID0ga25vd25MZWRnZXJbbmV0d29ya107XG4gICAgbi5oYXNMZWRnZXJTdXBwb3J0ID0gISFuLnNsaXA0NDtcbiAgICAvLyBnZW5lcmFsIGl0ZW1zXG4gICAgbi5nZW5lc2lzSGFzaCA9IGtub3duR2VuZXNpc1tuZXR3b3JrXSB8fCBbXTtcbiAgICBuLmljb24gPSBrbm93bkljb25bbmV0d29ya10gfHwgJ3N1YnN0cmF0ZSc7XG4gICAgLy8gZmlsdGVyaW5nXG4gICAgbi5pc1Rlc3RuZXQgPSAhIWtub3duVGVzdG5ldFtuZXR3b3JrXSB8fCBURVNUTkVUUy5pbmNsdWRlcyhuYW1lUGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdKTtcbiAgICBuLmlzSWdub3JlZCA9IG4uaXNUZXN0bmV0IHx8ICghKG8uc3RhbmRhcmRBY2NvdW50ICYmXG4gICAgICAgIG8uZGVjaW1hbHM/Lmxlbmd0aCAmJlxuICAgICAgICBvLnN5bWJvbHM/Lmxlbmd0aCkgJiZcbiAgICAgICAgby5wcmVmaXggIT09IDQyKTtcbiAgICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIGZpbHRlclNlbGVjdGFibGUoeyBnZW5lc2lzSGFzaCwgcHJlZml4IH0pIHtcbiAgICByZXR1cm4gISFnZW5lc2lzSGFzaC5sZW5ndGggfHwgcHJlZml4ID09PSA0Mjtcbn1cbmZ1bmN0aW9uIGZpbHRlckF2YWlsYWJsZShuKSB7XG4gICAgcmV0dXJuICFuLmlzSWdub3JlZCAmJiAhIW4ubmV0d29yaztcbn1cbmZ1bmN0aW9uIHNvcnROZXR3b3JrcyhhLCBiKSB7XG4gICAgY29uc3QgaXNVblNvcnRlZEEgPSBVTlNPUlRFRC5pbmNsdWRlcyhhLnByZWZpeCk7XG4gICAgY29uc3QgaXNVblNvcnRlZEIgPSBVTlNPUlRFRC5pbmNsdWRlcyhiLnByZWZpeCk7XG4gICAgcmV0dXJuIGlzVW5Tb3J0ZWRBID09PSBpc1VuU29ydGVkQlxuICAgICAgICA/IGlzVW5Tb3J0ZWRBXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpXG4gICAgICAgIDogaXNVblNvcnRlZEFcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogMTtcbn1cbmV4cG9ydCBjb25zdCBhbGxOZXR3b3JrcyA9IGtub3duU3Vic3RyYXRlLm1hcCh0b0V4cGFuZGVkKTtcbmV4cG9ydCBjb25zdCBhdmFpbGFibGVOZXR3b3JrcyA9IGFsbE5ldHdvcmtzLmZpbHRlcihmaWx0ZXJBdmFpbGFibGUpLnNvcnQoc29ydE5ldHdvcmtzKTtcbmV4cG9ydCBjb25zdCBzZWxlY3RhYmxlTmV0d29ya3MgPSBhdmFpbGFibGVOZXR3b3Jrcy5maWx0ZXIoZmlsdGVyU2VsZWN0YWJsZSk7XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlLCBwdWJsaXNoUmVwbGF5LCByZWZDb3VudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgcnBjRGVmaW5pdGlvbnMgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMnO1xuaW1wb3J0IHsgaGV4VG9VOGEsIGlzRnVuY3Rpb24sIGlzTnVsbCwgaXNVbmRlZmluZWQsIGxhenlNZXRob2QsIGxvZ2dlciwgbWVtb2l6ZSwgb2JqZWN0U3ByZWFkLCB1OGFDb25jYXQsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZHJyLCByZWZDb3VudERlbGF5IH0gZnJvbSAnLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWwvaW5kZXguanMnO1xuY29uc3QgbCA9IGxvZ2dlcigncnBjLWNvcmUnKTtcbmNvbnN0IEVNUFRZX01FVEEgPSB7XG4gICAgZmFsbGJhY2s6IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllcjogeyBpc09wdGlvbmFsOiB0cnVlIH0sXG4gICAgdHlwZToge1xuICAgICAgICBhc01hcDogeyBsaW5rZWQ6IHsgaXNUcnVlOiBmYWxzZSB9IH0sXG4gICAgICAgIGlzTWFwOiBmYWxzZVxuICAgIH1cbn07XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBsb2dFcnJvck1lc3NhZ2UobWV0aG9kLCB7IG5vRXJyb3JMb2csIHBhcmFtcywgdHlwZSB9LCBlcnJvcikge1xuICAgIGlmIChub0Vycm9yTG9nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbC5lcnJvcihgJHttZXRob2R9KCR7cGFyYW1zLm1hcCgoeyBpc09wdGlvbmFsLCBuYW1lLCB0eXBlIH0pID0+IGAke25hbWV9JHtpc09wdGlvbmFsID8gJz8nIDogJyd9OiAke3R5cGV9YCkuam9pbignLCAnKX0pOiAke3R5cGV9OjogJHtlcnJvci5tZXNzYWdlfWApO1xufVxuZnVuY3Rpb24gaXNUcmVhdEFzSGV4KGtleSkge1xuICAgIC8vIDpjb2RlIGlzIHByb2JsZW1hdGljIC0gaXQgZG9lcyBub3QgaGF2ZSB0aGUgbGVuZ3RoIGF0dGFjaGVkLCB3aGljaCBpc1xuICAgIC8vIHVubGlrZSBhbGwgb3RoZXIgc3RvcmFnZSBlbnRyaWVzIHdoZXJlIGl0IGlzIGluZGVlZCBwcm9wZXJseSBlbmNvZGVkXG4gICAgcmV0dXJuIFsnMHgzYTYzNmY2NDY1J10uaW5jbHVkZXMoa2V5LnRvSGV4KCkpO1xufVxuLyoqXG4gKiBAbmFtZSBScGNcbiAqIEBzdW1tYXJ5IFRoZSBBUEkgbWF5IHVzZSBhIEhUVFAgb3IgV2ViU29ja2V0cyBwcm92aWRlci5cbiAqIEBkZXNjcmlwdGlvbiBJdCBhbGxvd3MgZm9yIHF1ZXJ5aW5nIGEgUG9sa2Fkb3QgQ2xpZW50IE5vZGUuXG4gKiBXZWJTb2NrZXRzIHByb3ZpZGVyIGlzIHJlY29tbWVuZGVkIHNpbmNlIEhUVFAgcHJvdmlkZXIgb25seSBzdXBwb3J0cyBiYXNpYyBxdWVyeWluZy5cbiAqXG4gKiBgYGBtZXJtYWlkXG4gKiBncmFwaCBMUjtcbiAqICAgQVtBcGldIC0tPiB8V2ViU29ja2V0c3wgQltXc1Byb3ZpZGVyXTtcbiAqICAgQiAtLT4gfGVuZHBvaW50fCBDW3dzOi8vMTI3LjAuMC4xOjk5NDRdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBScGMgZnJvbSAnQHBvbGthZG90L3JwYy1jb3JlJztcbiAqIGltcG9ydCB7IFdzUHJvdmlkZXIgfSBmcm9tICdAcG9sa2Fkb3QvcnBjLXByb3ZpZGVyL3dzJztcbiAqXG4gKiBjb25zdCBwcm92aWRlciA9IG5ldyBXc1Byb3ZpZGVyKCd3czovLzEyNy4wLjAuMTo5OTQ0Jyk7XG4gKiBjb25zdCBycGMgPSBuZXcgUnBjKHByb3ZpZGVyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUnBjQ29yZSB7XG4gICAgX19pbnRlcm5hbF9faW5zdGFuY2VJZDtcbiAgICBfX2ludGVybmFsX19pc1BlZGFudGljO1xuICAgIF9faW50ZXJuYWxfX3JlZ2lzdHJ5RGVmYXVsdDtcbiAgICBfX2ludGVybmFsX19zdG9yYWdlQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgX19pbnRlcm5hbF9fc3RvcmFnZUNhY2hlSGl0cyA9IDA7XG4gICAgX19pbnRlcm5hbF9fc3RvcmFnZUNhY2hlU2l6ZSA9IDA7XG4gICAgX19pbnRlcm5hbF9fZ2V0QmxvY2tSZWdpc3RyeTtcbiAgICBfX2ludGVybmFsX19nZXRCbG9ja0hhc2g7XG4gICAgbWFwcGluZyA9IG5ldyBNYXAoKTtcbiAgICBwcm92aWRlcjtcbiAgICBzZWN0aW9ucyA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoZSBjb3JlIFJQQyBoYW5kbGVyXG4gICAgICogQHBhcmFtICB7UHJvdmlkZXJJbnRlcmZhY2V9IHByb3ZpZGVyIEFuIEFQSSBwcm92aWRlciB1c2luZyBhbnkgb2YgdGhlIHN1cHBvcnRlZCBwcm92aWRlcnMgKEhUVFAsIFNDIG9yIFdlYlNvY2tldClcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpbnN0YW5jZUlkLCByZWdpc3RyeSwgeyBpc1BlZGFudGljID0gdHJ1ZSwgcHJvdmlkZXIsIHVzZXJScGMgPSB7fSB9KSB7XG4gICAgICAgIGlmICghcHJvdmlkZXIgfHwgIWlzRnVuY3Rpb24ocHJvdmlkZXIuc2VuZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgUHJvdmlkZXIgdG8gQVBJIGNyZWF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCA9IGluc3RhbmNlSWQ7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faXNQZWRhbnRpYyA9IGlzUGVkYW50aWM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnlEZWZhdWx0ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgICAgICAgY29uc3Qgc2VjdGlvbk5hbWVzID0gT2JqZWN0LmtleXMocnBjRGVmaW5pdGlvbnMpO1xuICAgICAgICAvLyB0aGVzZSBhcmUgdGhlIGJhc2Uga2V5cyAoaS5lLiBwYXJ0IG9mIGpzb25ycGMpXG4gICAgICAgIHRoaXMuc2VjdGlvbnMucHVzaCguLi5zZWN0aW9uTmFtZXMpO1xuICAgICAgICAvLyBkZWNvcmF0ZSBhbGwgaW50ZXJmYWNlcywgZGVmaW5lZCBhbmQgdXNlciBvbiB0aGlzIGluc3RhbmNlXG4gICAgICAgIHRoaXMuYWRkVXNlckludGVyZmFjZXModXNlclJwYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBjb25uZWN0ZWQgc3RhdHVzIG9mIGEgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBnZXQgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmlzQ29ubmVjdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTWFudWFsbHkgY29ubmVjdCBmcm9tIHRoZSBhdHRhY2hlZCBwcm92aWRlclxuICAgICAqL1xuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmNvbm5lY3QoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE1hbnVhbGx5IGRpc2Nvbm5lY3QgZnJvbSB0aGUgYXR0YWNoZWQgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIGNvcmUgc3RhdHMsIGluY2x1ZGluZyB0aG9zZSBmcm9tIHRlaCBwcm92aWRlclxuICAgICAqL1xuICAgIGdldCBzdGF0cygpIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB0aGlzLnByb3ZpZGVyLnN0YXRzO1xuICAgICAgICByZXR1cm4gc3RhdHNcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRzLFxuICAgICAgICAgICAgICAgIGNvcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVIaXRzOiB0aGlzLl9faW50ZXJuYWxfX3N0b3JhZ2VDYWNoZUhpdHMsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlU2l6ZTogdGhpcy5fX2ludGVybmFsX19zdG9yYWdlQ2FjaGVTaXplXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRzIGEgcmVnaXN0cnkgc3dhcCAodHlwaWNhbGx5IGZyb20gQXBpKVxuICAgICAqL1xuICAgIHNldFJlZ2lzdHJ5U3dhcChyZWdpc3RyeVN3YXApIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19nZXRCbG9ja1JlZ2lzdHJ5ID0gbWVtb2l6ZShyZWdpc3RyeVN3YXAsIHtcbiAgICAgICAgICAgIGdldEluc3RhbmNlSWQ6ICgpID0+IHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHMgYSBmdW5jdGlvbiB0byByZXNvbHZlIGJsb2NrIGhhc2ggZnJvbSBibG9jayBudW1iZXJcbiAgICAgKi9cbiAgICBzZXRSZXNvbHZlQmxvY2tIYXNoKHJlc29sdmVCbG9ja0hhc2gpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19nZXRCbG9ja0hhc2ggPSBtZW1vaXplKHJlc29sdmVCbG9ja0hhc2gsIHtcbiAgICAgICAgICAgIGdldEluc3RhbmNlSWQ6ICgpID0+IHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWRkVXNlckludGVyZmFjZXModXNlclJwYykge1xuICAgICAgICAvLyBhZGQgYW55IGV4dHJhIHVzZXItZGVmaW5lZCBzZWN0aW9uc1xuICAgICAgICB0aGlzLnNlY3Rpb25zLnB1c2goLi4uT2JqZWN0LmtleXModXNlclJwYykuZmlsdGVyKChrKSA9PiAhdGhpcy5zZWN0aW9ucy5pbmNsdWRlcyhrKSkpO1xuICAgICAgICBmb3IgKGxldCBzID0gMCwgc2NvdW50ID0gdGhpcy5zZWN0aW9ucy5sZW5ndGg7IHMgPCBzY291bnQ7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNbc107XG4gICAgICAgICAgICBjb25zdCBkZWZzID0gb2JqZWN0U3ByZWFkKHt9LCBycGNEZWZpbml0aW9uc1tzZWN0aW9uXSwgdXNlclJwY1tzZWN0aW9uXSk7XG4gICAgICAgICAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXMoZGVmcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMCwgbWNvdW50ID0gbWV0aG9kcy5sZW5ndGg7IG0gPCBtY291bnQ7IG0rKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbbV07XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmID0gZGVmc1ttZXRob2RdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25ycGMgPSBkZWYuZW5kcG9pbnQgfHwgYCR7c2VjdGlvbn1fJHttZXRob2R9YDtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFwcGluZy5oYXMoanNvbnJwYykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTdWJzY3JpcHRpb24gPSAhIWRlZi5wdWJzdWI7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpc1tzZWN0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcGluZy5zZXQoanNvbnJwYywgb2JqZWN0U3ByZWFkKHt9LCBkZWYsIHsgaXNTdWJzY3JpcHRpb24sIGpzb25ycGMsIG1ldGhvZCwgc2VjdGlvbiB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGxhenlNZXRob2QodGhpc1tzZWN0aW9uXSwgbWV0aG9kLCAoKSA9PiBpc1N1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jcmVhdGVNZXRob2RTdWJzY3JpYmUoc2VjdGlvbiwgbWV0aG9kLCBkZWYpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NyZWF0ZU1ldGhvZFNlbmQoc2VjdGlvbiwgbWV0aG9kLCBkZWYpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX21lbW9taXplKGNyZWF0b3IsIGRlZikge1xuICAgICAgICBjb25zdCBtZW1vT3B0cyA9IHsgZ2V0SW5zdGFuY2VJZDogKCkgPT4gdGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkIH07XG4gICAgICAgIGNvbnN0IG1lbW9pemVkID0gbWVtb2l6ZShjcmVhdG9yKHRydWUpLCBtZW1vT3B0cyk7XG4gICAgICAgIG1lbW9pemVkLnJhdyA9IG1lbW9pemUoY3JlYXRvcihmYWxzZSksIG1lbW9PcHRzKTtcbiAgICAgICAgbWVtb2l6ZWQubWV0YSA9IGRlZjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cbiAgICBfZm9ybWF0UmVzdWx0KGlzU2NhbGUsIHJlZ2lzdHJ5LCBibG9ja0hhc2gsIG1ldGhvZCwgZGVmLCBwYXJhbXMsIHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gaXNTY2FsZVxuICAgICAgICAgICAgPyB0aGlzLl9mb3JtYXRPdXRwdXQocmVnaXN0cnksIGJsb2NrSGFzaCwgbWV0aG9kLCBkZWYsIHBhcmFtcywgcmVzdWx0KVxuICAgICAgICAgICAgOiByZXN1bHQ7XG4gICAgfVxuICAgIF9jcmVhdGVNZXRob2RTZW5kKHNlY3Rpb24sIG1ldGhvZCwgZGVmKSB7XG4gICAgICAgIGNvbnN0IHJwY05hbWUgPSBkZWYuZW5kcG9pbnQgfHwgYCR7c2VjdGlvbn1fJHttZXRob2R9YDtcbiAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gZGVmLnBhcmFtcy5maW5kSW5kZXgoKHsgaXNIaXN0b3JpYyB9KSA9PiBpc0hpc3RvcmljKTtcbiAgICAgICAgbGV0IG1lbW9pemVkID0gbnVsbDtcbiAgICAgICAgLy8gZXhlY3V0ZSB0aGUgUlBDIGNhbGwsIGRvaW5nIGEgcmVnaXN0cnkgc3dhcCBmb3IgaGlzdG9yaWMgYXMgYXBwbGljYWJsZVxuICAgICAgICBjb25zdCBjYWxsV2l0aFJlZ2lzdHJ5ID0gYXN5bmMgKGlzU2NhbGUsIHZhbHVlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IGhhc2hJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHZhbHVlc1toYXNoSW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tIYXNoID0gYmxvY2tJZCAmJiBkZWYucGFyYW1zW2hhc2hJbmRleF0udHlwZSA9PT0gJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gYXdhaXQgdGhpcy5fX2ludGVybmFsX19nZXRCbG9ja0hhc2g/LihibG9ja0lkKVxuICAgICAgICAgICAgICAgIDogYmxvY2tJZDtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVnaXN0cnkgfSA9IGlzU2NhbGUgJiYgYmxvY2tIYXNoICYmIHRoaXMuX19pbnRlcm5hbF9fZ2V0QmxvY2tSZWdpc3RyeVxuICAgICAgICAgICAgICAgID8gYXdhaXQgdGhpcy5fX2ludGVybmFsX19nZXRCbG9ja1JlZ2lzdHJ5KHU4YVRvVThhKGJsb2NrSGFzaCkpXG4gICAgICAgICAgICAgICAgOiB7IHJlZ2lzdHJ5OiB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5RGVmYXVsdCB9O1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fZm9ybWF0UGFyYW1zKHJlZ2lzdHJ5LCBudWxsLCBkZWYsIHZhbHVlcyk7XG4gICAgICAgICAgICAvLyBvbmx5IGNhY2hlIC5hdCg8YmxvY2tIYXNoPikgcXVlcmllcywgZS5nLiB3aGVyZSB2YWxpZCBibG9ja0hhc2ggd2FzIHN1cHBsaWVkXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb3ZpZGVyLnNlbmQocnBjTmFtZSwgcGFyYW1zLm1hcCgocCkgPT4gcC50b0pTT04oKSksICEhYmxvY2tIYXNoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRSZXN1bHQoaXNTY2FsZSwgcmVnaXN0cnksIGJsb2NrSGFzaCwgbWV0aG9kLCBkZWYsIHBhcmFtcywgcmVzdWx0KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY3JlYXRvciA9IChpc1NjYWxlKSA9PiAoLi4udmFsdWVzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0RlbGF5ZWQgPSBpc1NjYWxlICYmIGhhc2hJbmRleCAhPT0gLTEgJiYgISF2YWx1ZXNbaGFzaEluZGV4XTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsV2l0aFJlZ2lzdHJ5KGlzU2NhbGUsIHZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3JNZXNzYWdlKG1ldGhvZCwgZGVmLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgb2xkIHJlc3VsdHMgZnJvbSBjYWNoZVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWQ/LnVubWVtb2l6ZSguLi52YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWQ/LnJhdy51bm1lbW9pemUoLi4udmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLCAvLyBjcmVhdGUgYSBSZXBsYXkoMSlcbiAgICAgICAgICAgIGlzRGVsYXllZFxuICAgICAgICAgICAgICAgID8gcmVmQ291bnREZWxheSgpIC8vIFVuc3Vic2NyaWJlIGFmdGVyIGRlbGF5XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgICAgICAgOiByZWZDb3VudCgpKTtcbiAgICAgICAgfTtcbiAgICAgICAgbWVtb2l6ZWQgPSB0aGlzLl9tZW1vbWl6ZShjcmVhdG9yLCBkZWYpO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuICAgIC8vIGNyZWF0ZSBhIHN1YnNjcmlwdG9yLCBpdCBzdWJzY3JpYmVzIG9uY2UgYW5kIHJlc29sdmVzIHdpdGggdGhlIGlkIGFzIHN1YnNjcmliZVxuICAgIF9jcmVhdGVTdWJzY3JpYmVyKHsgcGFyYW1zSnNvbiwgc3ViTmFtZSwgc3ViVHlwZSwgdXBkYXRlIH0sIGVycm9ySGFuZGxlcikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoc3ViVHlwZSwgc3ViTmFtZSwgcGFyYW1zSnNvbiwgdXBkYXRlKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2NyZWF0ZU1ldGhvZFN1YnNjcmliZShzZWN0aW9uLCBtZXRob2QsIGRlZikge1xuICAgICAgICBjb25zdCBbdXBkYXRlVHlwZSwgc3ViTWV0aG9kLCB1bnN1Yk1ldGhvZF0gPSBkZWYucHVic3ViO1xuICAgICAgICBjb25zdCBzdWJOYW1lID0gYCR7c2VjdGlvbn1fJHtzdWJNZXRob2R9YDtcbiAgICAgICAgY29uc3QgdW5zdWJOYW1lID0gYCR7c2VjdGlvbn1fJHt1bnN1Yk1ldGhvZH1gO1xuICAgICAgICBjb25zdCBzdWJUeXBlID0gYCR7c2VjdGlvbn1fJHt1cGRhdGVUeXBlfWA7XG4gICAgICAgIGxldCBtZW1vaXplZCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGNyZWF0b3IgPSAoaXNTY2FsZSkgPT4gKC4uLnZhbHVlcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgcHJvbWlzZSwgYXMgdXNlZCBpbiB0aGUgdW5zdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBsZXQgc3Vic2NyaXB0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnlEZWZhdWx0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dFcnJvck1lc3NhZ2UobWV0aG9kLCBkZWYsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fZm9ybWF0UGFyYW1zKHJlZ2lzdHJ5LCBudWxsLCBkZWYsIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IChlcnJvciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dFcnJvck1lc3NhZ2UobWV0aG9kLCBkZWYsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5fZm9ybWF0UmVzdWx0KGlzU2NhbGUsIHJlZ2lzdHJ5LCBudWxsLCBtZXRob2QsIGRlZiwgcGFyYW1zLCByZXN1bHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uUHJvbWlzZSA9IHRoaXMuX2NyZWF0ZVN1YnNjcmliZXIoeyBwYXJhbXNKc29uOiBwYXJhbXMubWFwKChwKSA9PiBwLnRvSlNPTigpKSwgc3ViTmFtZSwgc3ViVHlwZSwgdXBkYXRlIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUZWFyZG93biBsb2dpY1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSBmcm9tIGNhY2hlLCBzbyBvbGQgcmVzdWx0cyBkb24ndCBoYW5nIGFyb3VuZFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWQ/LnVubWVtb2l6ZSguLi52YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWQ/LnJhdy51bm1lbW9pemUoLi4udmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIHByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvblByb21pc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChzdWJzY3JpcHRpb25JZCkgPT4gaXNOdWxsKHN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucHJvdmlkZXIudW5zdWJzY3JpYmUoc3ViVHlwZSwgdW5zdWJOYW1lLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBsb2dFcnJvck1lc3NhZ2UobWV0aG9kLCBkZWYsIGVycm9yKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLnBpcGUoZHJyKCkpO1xuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZCA9IHRoaXMuX21lbW9taXplKGNyZWF0b3IsIGRlZik7XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9XG4gICAgX2Zvcm1hdFBhcmFtcyhyZWdpc3RyeSwgYmxvY2tIYXNoLCBkZWYsIGlucHV0cykge1xuICAgICAgICBjb25zdCBjb3VudCA9IGlucHV0cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlcUNvdW50ID0gZGVmLnBhcmFtcy5maWx0ZXIoKHsgaXNPcHRpb25hbCB9KSA9PiAhaXNPcHRpb25hbCkubGVuZ3RoO1xuICAgICAgICBpZiAoY291bnQgPCByZXFDb3VudCB8fCBjb3VudCA+IGRlZi5wYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZGVmLnBhcmFtcy5sZW5ndGh9IHBhcmFtZXRlcnMke3JlcUNvdW50ID09PSBkZWYucGFyYW1zLmxlbmd0aCA/ICcnIDogYCAoJHtkZWYucGFyYW1zLmxlbmd0aCAtIHJlcUNvdW50fSBvcHRpb25hbClgfSwgJHtjb3VudH0gZm91bmQgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgcGFyYW1zW2ldID0gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZShkZWYucGFyYW1zW2ldLnR5cGUsIFtpbnB1dHNbaV1dLCB7IGJsb2NrSGFzaCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cbiAgICBfZm9ybWF0T3V0cHV0KHJlZ2lzdHJ5LCBibG9ja0hhc2gsIG1ldGhvZCwgcnBjLCBwYXJhbXMsIHJlc3VsdCkge1xuICAgICAgICBpZiAocnBjLnR5cGUgPT09ICdTdG9yYWdlRGF0YScpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHBhcmFtc1swXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRTdG9yYWdlRGF0YShyZWdpc3RyeSwgYmxvY2tIYXNoLCBrZXksIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocnBjLnR5cGUgPT09ICdTdG9yYWdlQ2hhbmdlU2V0Jykge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IHBhcmFtc1swXTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9mb3JtYXRTdG9yYWdlU2V0KHJlZ2lzdHJ5LCByZXN1bHQuYmxvY2ssIGtleXMsIHJlc3VsdC5jaGFuZ2VzKVxuICAgICAgICAgICAgICAgIDogcmVnaXN0cnkuY3JlYXRlVHlwZSgnU3RvcmFnZUNoYW5nZVNldCcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocnBjLnR5cGUgPT09ICdWZWM8U3RvcmFnZUNoYW5nZVNldD4nKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uU2V0ID0gcmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSBqc29uU2V0Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGJsb2NrLCBjaGFuZ2VzIH0gPSBqc29uU2V0W2ldO1xuICAgICAgICAgICAgICAgIG1hcHBlZFtpXSA9IFtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnkuY3JlYXRlVHlwZSgnQmxvY2tIYXNoJywgYmxvY2spLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRTdG9yYWdlU2V0KHJlZ2lzdHJ5LCBibG9jaywgcGFyYW1zWzBdLCBjaGFuZ2VzKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBvbmx5IHF1ZXJ5IGF0IGEgc3BlY2lmaWMgYmxvY2ssIG5vdCBhIHJhbmdlIC0gZmxhdHRlblxuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZCA9PT0gJ3F1ZXJ5U3RvcmFnZUF0J1xuICAgICAgICAgICAgICAgID8gbWFwcGVkWzBdWzFdXG4gICAgICAgICAgICAgICAgOiBtYXBwZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUocnBjLnR5cGUsIFtyZXN1bHRdLCB7IGJsb2NrSGFzaCB9KTtcbiAgICB9XG4gICAgX2Zvcm1hdFN0b3JhZ2VEYXRhKHJlZ2lzdHJ5LCBibG9ja0hhc2gsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXNFbXB0eSA9IGlzTnVsbCh2YWx1ZSk7XG4gICAgICAgIC8vIHdlIGNvbnZlcnQgdG8gVWludDhBcnJheSBzaW5jZSBpdCBtYXBzIHRvIHRoZSByYXcgZW5jb2RpbmcsIGFsbFxuICAgICAgICAvLyBkYXRhIHdpbGwgYmUgY29ycmVjdGx5IGVuY29kZWQgKGluY2wuIG51bWJlcnMsIGV4Y2wuIDpjb2RlKVxuICAgICAgICBjb25zdCBpbnB1dCA9IGlzRW1wdHlcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBpc1RyZWF0QXNIZXgoa2V5KVxuICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICA6IHU4YVRvVThhKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25ld1R5cGUocmVnaXN0cnksIGJsb2NrSGFzaCwga2V5LCBpbnB1dCwgaXNFbXB0eSk7XG4gICAgfVxuICAgIF9mb3JtYXRTdG9yYWdlU2V0KHJlZ2lzdHJ5LCBibG9ja0hhc2gsIGtleXMsIGNoYW5nZXMpIHtcbiAgICAgICAgLy8gRm9yIFN0b3JhZ2VDaGFuZ2VTZXQsIHRoZSBjaGFuZ2VzIGhhcyB0aGUgW2tleSwgdmFsdWVdIG1hcHBpbmdzXG4gICAgICAgIGNvbnN0IGNvdW50ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHdpdGhDYWNoZSA9IGNvdW50ICE9PSAxO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICAvLyBtdWx0aXBsZSByZXR1cm4gdmFsdWVzICh2aWEgc3RhdGUuc3RvcmFnZSBzdWJzY3JpcHRpb24pLCBkZWNvZGUgdGhlXG4gICAgICAgIC8vIHZhbHVlcyBvbmUgYXQgYSB0aW1lLCBhbGwgYmFzZWQgb24gdGhlIHN1cHBsaWVkIHF1ZXJ5IHR5cGVzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdmFsdWVzW2ldID0gdGhpcy5fZm9ybWF0U3RvcmFnZVNldEVudHJ5KHJlZ2lzdHJ5LCBibG9ja0hhc2gsIGtleXNbaV0sIGNoYW5nZXMsIHdpdGhDYWNoZSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG4gICAgX2Zvcm1hdFN0b3JhZ2VTZXRFbnRyeShyZWdpc3RyeSwgYmxvY2tIYXNoLCBrZXksIGNoYW5nZXMsIHdpdGhDYWNoZSwgZW50cnlJbmRleCkge1xuICAgICAgICBjb25zdCBoZXhLZXkgPSBrZXkudG9IZXgoKTtcbiAgICAgICAgY29uc3QgZm91bmQgPSBjaGFuZ2VzLmZpbmQoKFtrZXldKSA9PiBrZXkgPT09IGhleEtleSk7XG4gICAgICAgIGNvbnN0IGlzTm90Rm91bmQgPSBpc1VuZGVmaW5lZChmb3VuZCk7XG4gICAgICAgIC8vIGlmIHdlIGRvbid0IGZpbmQgdGhlIHZhbHVlLCB0aGlzIGlzIG91ciBmYWxsYmFja1xuICAgICAgICAvLyAgIC0gaW4gdGhlIGNhc2Ugb2YgYW4gYXJyYXkgb2YgdmFsdWVzLCBmaWxsIHRoZSBob2xlIGZyb20gdGhlIGNhY2hlXG4gICAgICAgIC8vICAgLSBpZiBhIHNpbmdsZSByZXN1bHQgdmFsdWUsIGRvbid0IGZpbGwgLSBpdCBpcyBub3QgYW4gdXBkYXRlIGhvbGVcbiAgICAgICAgLy8gICAtIGZhbGxiYWNrIHRvIGFuIGVtcHR5IG9wdGlvbiBpbiBhbGwgY2FzZXNcbiAgICAgICAgaWYgKGlzTm90Rm91bmQgJiYgd2l0aENhY2hlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLl9faW50ZXJuYWxfX3N0b3JhZ2VDYWNoZS5nZXQoaGV4S2V5KTtcbiAgICAgICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N0b3JhZ2VDYWNoZUhpdHMrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNOb3RGb3VuZFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGZvdW5kWzFdO1xuICAgICAgICBjb25zdCBpc0VtcHR5ID0gaXNOdWxsKHZhbHVlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBpc0VtcHR5IHx8IGlzVHJlYXRBc0hleChrZXkpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IHU4YVRvVThhKHZhbHVlKTtcbiAgICAgICAgY29uc3QgY29kZWMgPSB0aGlzLl9uZXdUeXBlKHJlZ2lzdHJ5LCBibG9ja0hhc2gsIGtleSwgaW5wdXQsIGlzRW1wdHksIGVudHJ5SW5kZXgpO1xuICAgICAgICAvLyBzdG9yZSB0aGUgcmV0cmlldmVkIHJlc3VsdCAtIHRoZSBvbmx5IGlzc3VlIHdpdGggdGhpcyBjYWNoZSBpcyB0aGF0IHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIGNsZWFyaW5nIG9mIGl0LCBzbyB2ZXJ5IGxvbmcgcnVubmluZyBwcm9jZXNzZXMgKG5vdCBqdXN0IGEgY291cGxlIG9mIGhvdXJzLCBsb25nZXIpXG4gICAgICAgIC8vIHdpbGwgaW5jcmVhc2UgbWVtb3J5IGJleW9uZCB3aGF0IGlzIGFsbG93ZWQuXG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc3RvcmFnZUNhY2hlLnNldChoZXhLZXksIGNvZGVjKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdG9yYWdlQ2FjaGVTaXplKys7XG4gICAgICAgIHJldHVybiBjb2RlYztcbiAgICB9XG4gICAgX25ld1R5cGUocmVnaXN0cnksIGJsb2NrSGFzaCwga2V5LCBpbnB1dCwgaXNFbXB0eSwgZW50cnlJbmRleCA9IC0xKSB7XG4gICAgICAgIC8vIHNpbmdsZSByZXR1cm4gdmFsdWUgKHZpYSBzdGF0ZS5nZXRTdG9yYWdlKSwgZGVjb2RlIHRoZSB2YWx1ZSBiYXNlZCBvbiB0aGVcbiAgICAgICAgLy8gb3V0cHV0VHlwZSB0aGF0IHdlIGhhdmUgc3BlY2lmaWVkLiBGYWxsYmFjayB0byBSYXcgb24gbm90aGluZ1xuICAgICAgICBjb25zdCB0eXBlID0ga2V5Lm91dHB1dFR5cGUgfHwgJ1Jhdyc7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBrZXkubWV0YSB8fCBFTVBUWV9NRVRBO1xuICAgICAgICBjb25zdCBlbnRyeU51bSA9IGVudHJ5SW5kZXggPT09IC0xXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IGAgZW50cnkgJHtlbnRyeUluZGV4fTpgO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUodHlwZSwgW1xuICAgICAgICAgICAgICAgIGlzRW1wdHlcbiAgICAgICAgICAgICAgICAgICAgPyBtZXRhLmZhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Igb2xkLXN0eWxlIExpbmthZ2UsIHdlIGFkZCBhbiBlbXB0eSBsaW5rYWdlIGF0IHRoZSBlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHlwZS5pbmNsdWRlcygnTGlua2FnZTwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdThhQ29uY2F0KGhleFRvVThhKG1ldGEuZmFsbGJhY2sudG9IZXgoKSksIG5ldyBVaW50OEFycmF5KDIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGV4VG9VOGEobWV0YS5mYWxsYmFjay50b0hleCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgOiBtZXRhLm1vZGlmaWVyLmlzT3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSh0eXBlLCBbaW5wdXRdLCB7IGJsb2NrSGFzaCwgaXNQZWRhbnRpYzogdGhpcy5fX2ludGVybmFsX19pc1BlZGFudGljIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0XG4gICAgICAgICAgICBdLCB7IGJsb2NrSGFzaCwgaXNGYWxsYmFjazogaXNFbXB0eSAmJiAhIW1ldGEuZmFsbGJhY2ssIGlzT3B0aW9uYWw6IG1ldGEubW9kaWZpZXIuaXNPcHRpb25hbCwgaXNQZWRhbnRpYzogdGhpcy5fX2ludGVybmFsX19pc1BlZGFudGljICYmICFtZXRhLm1vZGlmaWVyLmlzT3B0aW9uYWwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZWNvZGUgc3RvcmFnZSAke2tleS5zZWN0aW9uIHx8ICd1bmtub3duJ30uJHtrZXkubWV0aG9kIHx8ICd1bmtub3duJ306JHtlbnRyeU51bX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogJ0Bwb2xrYWRvdC9ycGMtY29yZScsIHBhdGg6IChpbXBvcnQubWV0YSAmJiBpbXBvcnQubWV0YS51cmwpID8gbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLnN1YnN0cmluZygwLCBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpIDogJ2F1dG8nLCB0eXBlOiAnZXNtJywgdmVyc2lvbjogJzExLjIuMScgfTtcbiIsImltcG9ydCB7IGNhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBwdWJsaXNoUmVwbGF5LCByZWZDb3VudCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyByZWZDb3VudERlbGF5IH0gZnJvbSAnLi9yZWZDb3VudERlbGF5LmpzJztcbmZ1bmN0aW9uIENNUChhLCBiKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeSh7IHQ6IGEgfSkgPT09IHN0cmluZ2lmeSh7IHQ6IGIgfSk7XG59XG5mdW5jdGlvbiBFUlIoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbn1cbmZ1bmN0aW9uIE5PT1AoKSB7XG4gICAgLy8gZW1wdHlcbn1cbi8qKlxuICogU2hvcnRoYW5kIGZvciBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBwdWJsaXNoUmVwbGF5KDEpIGFuZCByZWZDb3VudCgpLlxuICpcbiAqIEBpZ25vcmVcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJyKHsgZGVsYXksIHNraXBDaGFuZ2UgPSBmYWxzZSwgc2tpcFRpbWVvdXQgPSBmYWxzZSB9ID0ge30pIHtcbiAgICByZXR1cm4gKHNvdXJjZSQpID0+IHNvdXJjZSQucGlwZShjYXRjaEVycm9yKEVSUiksIHNraXBDaGFuZ2VcbiAgICAgICAgPyB0YXAoTk9PUClcbiAgICAgICAgOiBkaXN0aW5jdFVudGlsQ2hhbmdlZChDTVApLCBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBwdWJsaXNoUmVwbGF5KDEpLCBza2lwVGltZW91dFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgPyByZWZDb3VudCgpXG4gICAgICAgIDogcmVmQ291bnREZWxheShkZWxheSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9kcnIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW1vLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmQ291bnREZWxheS5qcyc7XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZHJyIH0gZnJvbSAnLi9kcnIuanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW8oaW5zdGFuY2VJZCwgaW5uZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBnZXRJbnN0YW5jZUlkOiAoKSA9PiBpbnN0YW5jZUlkIH07XG4gICAgY29uc3QgY2FjaGVkID0gbWVtb2l6ZSgoLi4ucGFyYW1zKSA9PiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gaW5uZXIoLi4ucGFyYW1zKS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2FjaGVkLnVubWVtb2l6ZSguLi5wYXJhbXMpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH07XG4gICAgfSkucGlwZShkcnIoKSksIG9wdGlvbnMpO1xuICAgIHJldHVybiBjYWNoZWQ7XG59XG4iLCJpbXBvcnQgeyBhc2FwU2NoZWR1bGVyLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZDb3VudERlbGF5KGRlbGF5ID0gMTc1MCkge1xuICAgIHJldHVybiAoc291cmNlKSA9PiB7XG4gICAgICAgIC8vIHN0YXRlOiAwID0gZGlzY29ubmVjdGVkLCAxID0gZGlzY29ubmVjdGluZywgMiA9IGNvbm5lY3RpbmcsIDMgPSBjb25uZWN0ZWRcbiAgICAgICAgbGV0IFtzdGF0ZSwgcmVmQ291bnQsIGNvbm5lY3Rpb24sIHNjaGVkdWxlcl0gPSBbMCwgMCwgU3Vic2NyaXB0aW9uLkVNUFRZLCBTdWJzY3JpcHRpb24uRU1QVFldO1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9iKSA9PiB7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKG9iKTtcbiAgICAgICAgICAgIGlmIChyZWZDb3VudCsrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBzb3VyY2UuY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZSA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgtLXJlZkNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyID0gYXNhcFNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuY29uc3QgVU5LTk9XTiA9IC05OTk5OTtcbmZ1bmN0aW9uIGV4dGVuZCh0aGF0LCBuYW1lLCB2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBuYW1lLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlXG4gICAgfSk7XG59XG4vKipcbiAqIEBuYW1lIFJwY0Vycm9yXG4gKiBAc3VtbWFyeSBFeHRlbnNpb24gdG8gdGhlIGJhc2ljIEpTIEVycm9yLlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgYnVpbHQtaW4gSmF2YVNjcmlwdCBFcnJvciBjbGFzcyBpcyBleHRlbmRlZCBieSBhZGRpbmcgYSBjb2RlIHRvIGFsbG93IGZvciBFcnJvciBjYXRlZ29yaXphdGlvbi4gSW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBgc3RhY2tgLCBgbWVzc2FnZWAsIHRoZSBudW1lcmljIGBjb2RlYCBhbmQgYGRhdGFgIChhbnkgdHlwZXMpIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCB7IFJwY0Vycm9yIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnKTtcbiAqXG4gKiB0aHJvdyBuZXcgUnBjRXJyb3IoJ3NvbWUgbWVzc2FnZScsIFJwY0Vycm9yLkNPREVTLk1FVEhPRF9OT1RfRk9VTkQpOyAvLyA9PiBlcnJvci5jb2RlID0gLTMyNjAxXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnBjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29kZTtcbiAgICBkYXRhO1xuICAgIG1lc3NhZ2U7XG4gICAgbmFtZTtcbiAgICBzdGFjaztcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJycsIGNvZGUgPSBVTktOT1dOLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGV4dGVuZCh0aGlzLCAnbWVzc2FnZScsIFN0cmluZyhtZXNzYWdlKSk7XG4gICAgICAgIGV4dGVuZCh0aGlzLCAnbmFtZScsIHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG4gICAgICAgIGV4dGVuZCh0aGlzLCAnZGF0YScsIGRhdGEpO1xuICAgICAgICBleHRlbmQodGhpcywgJ2NvZGUnLCBjb2RlKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIHN0YWNrICYmIGV4dGVuZCh0aGlzLCAnc3RhY2snLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIENPREVTID0ge1xuICAgICAgICBBU1NFUlQ6IC05MDAwOSxcbiAgICAgICAgSU5WQUxJRF9KU09OUlBDOiAtOTk5OTgsXG4gICAgICAgIE1FVEhPRF9OT1RfRk9VTkQ6IC0zMjYwMSwgLy8gUnVzdCBjbGllbnRcbiAgICAgICAgVU5LTk9XTlxuICAgIH07XG59XG4iLCJpbXBvcnQgeyBpc051bWJlciwgaXNTdHJpbmcsIGlzVW5kZWZpbmVkLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgUnBjRXJyb3IgZnJvbSAnLi9lcnJvci5qcyc7XG5mdW5jdGlvbiBmb3JtYXRFcnJvckRhdGEoZGF0YSkge1xuICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGA6ICR7aXNTdHJpbmcoZGF0YSlcbiAgICAgICAgPyBkYXRhLnJlcGxhY2UoL0Vycm9yXFwoXCIvZywgJycpLnJlcGxhY2UoL1xcKFwiL2csICcoJykucmVwbGFjZSgvXCJcXCkvZywgJyknKS5yZXBsYWNlKC9cXCgvZywgJywgJykucmVwbGFjZSgvXFwpL2csICcnKVxuICAgICAgICA6IHN0cmluZ2lmeShkYXRhKX1gO1xuICAgIC8vIFdlIG5lZWQgc29tZSBzb3J0IG9mIGN1dC1vZmYgaGVyZSBzaW5jZSB0aGVzZSBjYW4gYmUgdmVyeSBsYXJnZSBhbmRcbiAgICAvLyB2ZXJ5IG5lc3RlZCwgcGljayBhIG51bWJlciBhbmQgdHJpbSB0aGUgcmVzdWx0IGRpc3BsYXkgdG8gaXRcbiAgICByZXR1cm4gZm9ybWF0dGVkLmxlbmd0aCA8PSAyNTZcbiAgICAgICAgPyBmb3JtYXR0ZWRcbiAgICAgICAgOiBgJHtmb3JtYXR0ZWQuc3Vic3RyaW5nKDAsIDI1NSl94oCmYDtcbn1cbmZ1bmN0aW9uIGNoZWNrRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtZXNzYWdlIH0gPSBlcnJvcjtcbiAgICAgICAgdGhyb3cgbmV3IFJwY0Vycm9yKGAke2NvZGV9OiAke21lc3NhZ2V9JHtmb3JtYXRFcnJvckRhdGEoZGF0YSl9YCwgY29kZSwgZGF0YSk7XG4gICAgfVxufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNsYXNzIFJwY0NvZGVyIHtcbiAgICBfX2ludGVybmFsX19pZCA9IDA7XG4gICAgZGVjb2RlUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5qc29ucnBjICE9PSAnMi4wJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGpzb25ycGMgZmllbGQgaW4gZGVjb2RlZCBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9ICFpc1VuZGVmaW5lZChyZXNwb25zZS5wYXJhbXMpICYmICFpc1VuZGVmaW5lZChyZXNwb25zZS5tZXRob2QpO1xuICAgICAgICBpZiAoIWlzTnVtYmVyKHJlc3BvbnNlLmlkKSAmJlxuICAgICAgICAgICAgKCFpc1N1YnNjcmlwdGlvbiB8fCAoIWlzTnVtYmVyKHJlc3BvbnNlLnBhcmFtcy5zdWJzY3JpcHRpb24pICYmXG4gICAgICAgICAgICAgICAgIWlzU3RyaW5nKHJlc3BvbnNlLnBhcmFtcy5zdWJzY3JpcHRpb24pKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpZCBmaWVsZCBpbiBkZWNvZGVkIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0ID09PSB1bmRlZmluZWQgJiYgIWlzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlc3VsdCBmb3VuZCBpbiBqc29ucnBjIHJlc3BvbnNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjaGVja0Vycm9yKHJlc3BvbnNlLnBhcmFtcy5lcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucGFyYW1zLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0O1xuICAgIH1cbiAgICBlbmNvZGVKc29uKG1ldGhvZCwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IFtpZCwgZGF0YV0gPSB0aGlzLmVuY29kZU9iamVjdChtZXRob2QsIHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBbaWQsIHN0cmluZ2lmeShkYXRhKV07XG4gICAgfVxuICAgIGVuY29kZU9iamVjdChtZXRob2QsIHBhcmFtcykge1xuICAgICAgICBjb25zdCBpZCA9ICsrdGhpcy5fX2ludGVybmFsX19pZDtcbiAgICAgICAgcmV0dXJuIFtpZCwge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICAgIH1dO1xuICAgIH1cbn1cbiIsImNvbnN0IEhUVFBfVVJMID0gJ2h0dHA6Ly8xMjcuMC4wLjE6OTkzMyc7XG5jb25zdCBXU19VUkwgPSAnd3M6Ly8xMjcuMC4wLjE6OTk0NCc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgSFRUUF9VUkwsXG4gICAgV1NfVVJMXG59O1xuIiwiZXhwb3J0IGNvbnN0IERFRkFVTFRfQ0FQQUNJVFkgPSAxMjg7XG5jbGFzcyBMUlVOb2RlIHtcbiAgICBrZXk7XG4gICAgbmV4dDtcbiAgICBwcmV2O1xuICAgIGNvbnN0cnVjdG9yKGtleSkge1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5wcmV2ID0gdGhpcztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTFJVQ2FjaGUge1xuICAgIGNhcGFjaXR5O1xuICAgIF9faW50ZXJuYWxfX2RhdGEgPSBuZXcgTWFwKCk7XG4gICAgX19pbnRlcm5hbF9fcmVmcyA9IG5ldyBNYXAoKTtcbiAgICBfX2ludGVybmFsX19sZW5ndGggPSAwO1xuICAgIF9faW50ZXJuYWxfX2hlYWQ7XG4gICAgX19pbnRlcm5hbF9fdGFpbDtcbiAgICBjb25zdHJ1Y3RvcihjYXBhY2l0eSA9IERFRkFVTFRfQ0FQQUNJVFkpIHtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IGNhcGFjaXR5O1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYWQgPSB0aGlzLl9faW50ZXJuYWxfX3RhaWwgPSBuZXcgTFJVTm9kZSgnPGVtcHR5PicpO1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19sZW5ndGg7XG4gICAgfVxuICAgIGdldCBsZW5ndGhEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19kYXRhLnNpemU7XG4gICAgfVxuICAgIGdldCBsZW5ndGhSZWZzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yZWZzLnNpemU7XG4gICAgfVxuICAgIGVudHJpZXMoKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLmtleXMoKTtcbiAgICAgICAgY29uc3QgY291bnQgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGVudHJpZXNbaV0gPSBba2V5LCB0aGlzLl9faW50ZXJuYWxfX2RhdGEuZ2V0KGtleSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICBjb25zdCBrZXlzID0gW107XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX2xlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGN1cnIgPSB0aGlzLl9faW50ZXJuYWxfX2hlYWQ7XG4gICAgICAgICAgICB3aGlsZSAoY3VyciAhPT0gdGhpcy5fX2ludGVybmFsX190YWlsKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGN1cnIua2V5KTtcbiAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5cy5wdXNoKGN1cnIua2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5fX2ludGVybmFsX19kYXRhLmdldChrZXkpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190b0hlYWQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19kYXRhLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3RvSGVhZChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBMUlVOb2RlKGtleSk7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZnMuc2V0KG5vZGUua2V5LCBub2RlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhZCA9IHRoaXMuX19pbnRlcm5hbF9fdGFpbCA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYWQucHJldiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgbm9kZS5uZXh0ID0gdGhpcy5fX2ludGVybmFsX19oZWFkO1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhZCA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19sZW5ndGggPT09IHRoaXMuY2FwYWNpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2RhdGEuZGVsZXRlKHRoaXMuX19pbnRlcm5hbF9fdGFpbC5rZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmVmcy5kZWxldGUodGhpcy5fX2ludGVybmFsX190YWlsLmtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190YWlsID0gdGhpcy5fX2ludGVybmFsX190YWlsLnByZXY7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190YWlsLm5leHQgPSB0aGlzLl9faW50ZXJuYWxfX2hlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2xlbmd0aCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIF9faW50ZXJuYWxfX3RvSGVhZChrZXkpIHtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fX2ludGVybmFsX19yZWZzLmdldChrZXkpO1xuICAgICAgICBpZiAocmVmICYmIHJlZiAhPT0gdGhpcy5fX2ludGVybmFsX19oZWFkKSB7XG4gICAgICAgICAgICByZWYucHJldi5uZXh0ID0gcmVmLm5leHQ7XG4gICAgICAgICAgICByZWYubmV4dC5wcmV2ID0gcmVmLnByZXY7XG4gICAgICAgICAgICByZWYubmV4dCA9IHRoaXMuX19pbnRlcm5hbF9faGVhZDtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhZC5wcmV2ID0gcmVmO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19oZWFkID0gcmVmO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiY29uc3Qga25vd24gPSB7XG4gICAgMTAwMDogJ05vcm1hbCBDbG9zdXJlJyxcbiAgICAxMDAxOiAnR29pbmcgQXdheScsXG4gICAgMTAwMjogJ1Byb3RvY29sIEVycm9yJyxcbiAgICAxMDAzOiAnVW5zdXBwb3J0ZWQgRGF0YScsXG4gICAgMTAwNDogJyhGb3IgZnV0dXJlKScsXG4gICAgMTAwNTogJ05vIFN0YXR1cyBSZWNlaXZlZCcsXG4gICAgMTAwNjogJ0Fibm9ybWFsIENsb3N1cmUnLFxuICAgIDEwMDc6ICdJbnZhbGlkIGZyYW1lIHBheWxvYWQgZGF0YScsXG4gICAgMTAwODogJ1BvbGljeSBWaW9sYXRpb24nLFxuICAgIDEwMDk6ICdNZXNzYWdlIHRvbyBiaWcnLFxuICAgIDEwMTA6ICdNaXNzaW5nIEV4dGVuc2lvbicsXG4gICAgMTAxMTogJ0ludGVybmFsIEVycm9yJyxcbiAgICAxMDEyOiAnU2VydmljZSBSZXN0YXJ0JyxcbiAgICAxMDEzOiAnVHJ5IEFnYWluIExhdGVyJyxcbiAgICAxMDE0OiAnQmFkIEdhdGV3YXknLFxuICAgIDEwMTU6ICdUTFMgSGFuZHNoYWtlJ1xufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRXU0Vycm9yU3RyaW5nKGNvZGUpIHtcbiAgICBpZiAoY29kZSA+PSAwICYmIGNvZGUgPD0gOTk5KSB7XG4gICAgICAgIHJldHVybiAnKFVudXNlZCknO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2RlID49IDEwMTYpIHtcbiAgICAgICAgaWYgKGNvZGUgPD0gMTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuICcoRm9yIFdlYlNvY2tldCBzdGFuZGFyZCknO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgPD0gMjk5OSkge1xuICAgICAgICAgICAgcmV0dXJuICcoRm9yIFdlYlNvY2tldCBleHRlbnNpb25zKSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA8PSAzOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gJyhGb3IgbGlicmFyaWVzIGFuZCBmcmFtZXdvcmtzKSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA8PSA0OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gJyhGb3IgYXBwbGljYXRpb25zKSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGtub3duW2NvZGVdIHx8ICcoVW5rbm93biknO1xufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5pbXBvcnQgeyBpc0NoaWxkQ2xhc3MsIGlzTnVsbCwgaXNVbmRlZmluZWQsIGxvZ2dlciwgbm9vcCwgb2JqZWN0U3ByZWFkLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyB4Z2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmltcG9ydCB7IFdlYlNvY2tldCB9IGZyb20gJ0Bwb2xrYWRvdC94LXdzJztcbmltcG9ydCB7IFJwY0NvZGVyIH0gZnJvbSAnLi4vY29kZXIvaW5kZXguanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzLmpzJztcbmltcG9ydCB7IERFRkFVTFRfQ0FQQUNJVFksIExSVUNhY2hlIH0gZnJvbSAnLi4vbHJ1LmpzJztcbmltcG9ydCB7IGdldFdTRXJyb3JTdHJpbmcgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5jb25zdCBBTElBU0VTID0ge1xuICAgIGNoYWluX2ZpbmFsaXNlZEhlYWQ6ICdjaGFpbl9maW5hbGl6ZWRIZWFkJyxcbiAgICBjaGFpbl9zdWJzY3JpYmVGaW5hbGlzZWRIZWFkczogJ2NoYWluX3N1YnNjcmliZUZpbmFsaXplZEhlYWRzJyxcbiAgICBjaGFpbl91bnN1YnNjcmliZUZpbmFsaXNlZEhlYWRzOiAnY2hhaW5fdW5zdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcydcbn07XG5jb25zdCBSRVRSWV9ERUxBWSA9IDI1MDA7XG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSA2MCAqIDEwMDA7XG5jb25zdCBUSU1FT1VUX0lOVEVSVkFMID0gNTAwMDtcbmNvbnN0IGwgPSBsb2dnZXIoJ2FwaS13cycpO1xuLyoqIEBpbnRlcm5hbCBDbGVhcnMgYSBSZWNvcmQ8Kj4gb2YgYWxsIGtleXMsIG9wdGlvbmFsbHkgd2l0aCBhbGwgY2FsbGJhY2sgb24gY2xlYXIgKi9cbmZ1bmN0aW9uIGVyYXNlUmVjb3JkKHJlY29yZCwgY2IpIHtcbiAgICBPYmplY3Qua2V5cyhyZWNvcmQpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKHJlY29yZFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgcmVjb3JkW2tleV07XG4gICAgfSk7XG59XG4vKiogQGludGVybmFsIENyZWF0ZXMgYSBkZWZhdWx0L2VtcHR5IHN0YXRzIG9iamVjdCAqL1xuZnVuY3Rpb24gZGVmYXVsdEVuZHBvaW50U3RhdHMoKSB7XG4gICAgcmV0dXJuIHsgYnl0ZXNSZWN2OiAwLCBieXRlc1NlbnQ6IDAsIGNhY2hlZDogMCwgZXJyb3JzOiAwLCByZXF1ZXN0czogMCwgc3Vic2NyaXB0aW9uczogMCwgdGltZW91dDogMCB9O1xufVxuLyoqXG4gKiAjIEBwb2xrYWRvdC9ycGMtcHJvdmlkZXIvd3NcbiAqXG4gKiBAbmFtZSBXc1Byb3ZpZGVyXG4gKlxuICogQGRlc2NyaXB0aW9uIFRoZSBXZWJTb2NrZXQgUHJvdmlkZXIgYWxsb3dzIHNlbmRpbmcgcmVxdWVzdHMgdXNpbmcgV2ViU29ja2V0IHRvIGEgV2ViU29ja2V0IFJQQyBzZXJ2ZXIgVENQIHBvcnQuIFVubGlrZSB0aGUgW1tIdHRwUHJvdmlkZXJdXSwgaXQgZG9lcyBzdXBwb3J0IHN1YnNjcmlwdGlvbnMgYW5kIGFsbG93cyBsaXN0ZW5pbmcgdG8gZXZlbnRzIHN1Y2ggYXMgbmV3IGJsb2NrcyBvciBiYWxhbmNlIGNoYW5nZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgQXBpIGZyb20gJ0Bwb2xrYWRvdC9hcGkvcHJvbWlzZSc7XG4gKiBpbXBvcnQgeyBXc1Byb3ZpZGVyIH0gZnJvbSAnQHBvbGthZG90L3JwYy1wcm92aWRlci93cyc7XG4gKlxuICogY29uc3QgcHJvdmlkZXIgPSBuZXcgV3NQcm92aWRlcignd3M6Ly8xMjcuMC4wLjE6OTk0NCcpO1xuICogY29uc3QgYXBpID0gbmV3IEFwaShwcm92aWRlcik7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIFtbSHR0cFByb3ZpZGVyXV1cbiAqL1xuZXhwb3J0IGNsYXNzIFdzUHJvdmlkZXIge1xuICAgIF9faW50ZXJuYWxfX2NhbGxDYWNoZTtcbiAgICBfX2ludGVybmFsX19jb2RlcjtcbiAgICBfX2ludGVybmFsX19lbmRwb2ludHM7XG4gICAgX19pbnRlcm5hbF9faGVhZGVycztcbiAgICBfX2ludGVybmFsX19ldmVudGVtaXR0ZXI7XG4gICAgX19pbnRlcm5hbF9faGFuZGxlcnMgPSB7fTtcbiAgICBfX2ludGVybmFsX19pc1JlYWR5UHJvbWlzZTtcbiAgICBfX2ludGVybmFsX19zdGF0cztcbiAgICBfX2ludGVybmFsX193YWl0aW5nRm9ySWQgPSB7fTtcbiAgICBfX2ludGVybmFsX19hdXRvQ29ubmVjdE1zO1xuICAgIF9faW50ZXJuYWxfX2VuZHBvaW50SW5kZXg7XG4gICAgX19pbnRlcm5hbF9fZW5kcG9pbnRTdGF0cztcbiAgICBfX2ludGVybmFsX19pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIF9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICBfX2ludGVybmFsX190aW1lb3V0SWQgPSBudWxsO1xuICAgIF9faW50ZXJuYWxfX3dlYnNvY2tldDtcbiAgICBfX2ludGVybmFsX190aW1lb3V0O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119ICBlbmRwb2ludCAgICBUaGUgZW5kcG9pbnQgdXJsLiBVc3VhbGx5IGB3czovL2lwOjk5NDRgIG9yIGB3c3M6Ly9pcDo5OTQ0YCwgbWF5IHByb3ZpZGUgYW4gYXJyYXkgb2YgZW5kcG9pbnQgc3RyaW5ncy5cbiAgICAgKiBAcGFyYW0ge251bWJlciB8IGZhbHNlfSBhdXRvQ29ubmVjdE1zIFdoZXRoZXIgdG8gY29ubmVjdCBhdXRvbWF0aWNhbGx5IG9yIG5vdCAoZGVmYXVsdCkuIFByb3ZpZGVkIHZhbHVlIGlzIHVzZWQgYXMgYSBkZWxheSBiZXR3ZWVuIHJldHJpZXMuXG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzIFRoZSBoZWFkZXJzIHByb3ZpZGVkIHRvIHRoZSB1bmRlcmx5aW5nIFdlYlNvY2tldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZW91dF0gQ3VzdG9tIHRpbWVvdXQgdmFsdWUgdXNlZCBwZXIgcmVxdWVzdCAuIERlZmF1bHRzIHRvIGBERUZBVUxUX1RJTUVPVVRfTVNgXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZW5kcG9pbnQgPSBkZWZhdWx0cy5XU19VUkwsIGF1dG9Db25uZWN0TXMgPSBSRVRSWV9ERUxBWSwgaGVhZGVycyA9IHt9LCB0aW1lb3V0LCBjYWNoZUNhcGFjaXR5KSB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50cyA9IEFycmF5LmlzQXJyYXkoZW5kcG9pbnQpXG4gICAgICAgICAgICA/IGVuZHBvaW50XG4gICAgICAgICAgICA6IFtlbmRwb2ludF07XG4gICAgICAgIGlmIChlbmRwb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dzUHJvdmlkZXIgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIEVuZHBvaW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZW5kcG9pbnRzLmZvckVhY2goKGVuZHBvaW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eKHdzc3x3cyk6XFwvXFwvLy50ZXN0KGVuZHBvaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kcG9pbnQgc2hvdWxkIHN0YXJ0IHdpdGggJ3dzOi8vJywgcmVjZWl2ZWQgJyR7ZW5kcG9pbnR9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19jYWxsQ2FjaGUgPSBuZXcgTFJVQ2FjaGUoY2FjaGVDYXBhY2l0eSB8fCBERUZBVUxUX0NBUEFDSVRZKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ldmVudGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXV0b0Nvbm5lY3RNcyA9IGF1dG9Db25uZWN0TXMgfHwgMDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19jb2RlciA9IG5ldyBScGNDb2RlcigpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50SW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludHMgPSBlbmRwb2ludHM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cyA9IHtcbiAgICAgICAgICAgIGFjdGl2ZTogeyByZXF1ZXN0czogMCwgc3Vic2NyaXB0aW9uczogMCB9LFxuICAgICAgICAgICAgdG90YWw6IGRlZmF1bHRFbmRwb2ludFN0YXRzKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzID0gZGVmYXVsdEVuZHBvaW50U3RhdHMoKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX190aW1lb3V0ID0gdGltZW91dCB8fCBERUZBVUxUX1RJTUVPVVRfTVM7XG4gICAgICAgIGlmIChhdXRvQ29ubmVjdE1zICYmIGF1dG9Db25uZWN0TXMgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RXaXRoUmV0cnkoKS5jYXRjaChub29wKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzUmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRlbWl0dGVyLm9uY2UoJ2Nvbm5lY3RlZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBgdHJ1ZWAgd2hlbiB0aGlzIHByb3ZpZGVyIHN1cHBvcnRzIHN1YnNjcmlwdGlvbnNcbiAgICAgKi9cbiAgICBnZXQgaGFzU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuICEhdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgYHRydWVgIHdoZW4gdGhpcyBwcm92aWRlciBzdXBwb3J0cyBjbG9uZSgpXG4gICAgICovXG4gICAgZ2V0IGlzQ2xvbmFibGUoKSB7XG4gICAgICAgIHJldHVybiAhIXRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFdoZXRoZXIgdGhlIG5vZGUgaXMgY29ubmVjdGVkIG9yIG5vdC5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGNvbm5lY3RlZFxuICAgICAqL1xuICAgIGdldCBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNDb25uZWN0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIGZpcnN0IHRpbWUgd2UgYXJlIGNvbm5lY3RlZCBhbmQgbG9hZGVkXG4gICAgICovXG4gICAgZ2V0IGlzUmVhZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2lzUmVhZHlQcm9taXNlO1xuICAgIH1cbiAgICBnZXQgZW5kcG9pbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50c1t0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50SW5kZXhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBvYmplY3RcbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXc1Byb3ZpZGVyKHRoaXMuX19pbnRlcm5hbF9fZW5kcG9pbnRzKTtcbiAgICB9XG4gICAgc2VsZWN0RW5kcG9pbnRJbmRleChlbmRwb2ludHMpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50SW5kZXggKyAxKSAlIGVuZHBvaW50cy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IE1hbnVhbGx5IGNvbm5lY3RcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbV3NQcm92aWRlcl1dIGNvbm5lY3RzIGF1dG9tYXRpY2FsbHkgYnkgZGVmYXVsdCwgaG93ZXZlciBpZiB5b3UgZGVjaWRlZCBvdGhlcndpc2UsIHlvdSBtYXlcbiAgICAgKiBjb25uZWN0IG1hbnVhbGx5IHVzaW5nIHRoaXMgbWV0aG9kLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdFxuICAgIGFzeW5jIGNvbm5lY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJTb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludEluZGV4ID0gdGhpcy5zZWxlY3RFbmRwb2ludEluZGV4KHRoaXMuX19pbnRlcm5hbF9fZW5kcG9pbnRzKTtcbiAgICAgICAgICAgIC8vIHRoZSBhcyBoZXJlIGlzIERlbm8tc3BlY2lmaWMgLSBub3QgYXZhaWxhYmxlIG9uIHRoZSBnbG9iYWxUaGlzXG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldCA9IHR5cGVvZiB4Z2xvYmFsLldlYlNvY2tldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNDaGlsZENsYXNzKHhnbG9iYWwuV2ViU29ja2V0LCBXZWJTb2NrZXQpXG4gICAgICAgICAgICAgICAgPyBuZXcgV2ViU29ja2V0KHRoaXMuZW5kcG9pbnQpXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgLSBXUyBtYXkgYmUgYW4gaW5zdGFuY2Ugb2Ygd3MsIHdoaWNoIHN1cHBvcnRzIG9wdGlvbnNcbiAgICAgICAgICAgICAgICA6IG5ldyBXZWJTb2NrZXQodGhpcy5lbmRwb2ludCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuX19pbnRlcm5hbF9faGVhZGVyc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX193ZWJzb2NrZXQub25jbG9zZSA9IHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRDbG9zZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldC5vbmVycm9yID0gdGhpcy5fX2ludGVybmFsX19vblNvY2tldEVycm9yO1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRNZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0Lm9ub3BlbiA9IHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRPcGVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGltZW91dCBhbnkgaGFuZGxlcnMgdGhhdCBoYXZlIG5vdCBoYWQgYSByZXNwb25zZVxuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190aW1lb3V0SWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXRIYW5kbGVycygpLCBUSU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGwuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25uZWN0LCBuZXZlciB0aHJvd2luZyBhbiBlcnJvciwgYnV0IHJhdGhlciBmb3JjaW5nIGEgcmV0cnlcbiAgICAgKi9cbiAgICBhc3luYyBjb25uZWN0V2l0aFJldHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19hdXRvQ29ubmVjdE1zID4gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0V2l0aFJldHJ5KCkuY2F0Y2gobm9vcCk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5fX2ludGVybmFsX19hdXRvQ29ubmVjdE1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTWFudWFsbHkgZGlzY29ubmVjdCBmcm9tIHRoZSBjb25uZWN0aW9uLCBjbGVhcmluZyBhdXRvLWNvbm5lY3QgbG9naWNcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgICBhc3luYyBkaXNjb25uZWN0KCkge1xuICAgICAgICAvLyBzd2l0Y2ggb2ZmIGF1dG9Db25uZWN0LCB3ZSBhcmUgaW4gbWFudWFsIG1vZGUgbm93XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXV0b0Nvbm5lY3RNcyA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX193ZWJzb2NrZXQpIHtcbiAgICAgICAgICAgICAgICAvLyAxMDAwIC0gTm9ybWFsIGNsb3N1cmU7IHRoZSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWRcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldC5jbG9zZSgxMDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGwuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHN0YXRzXG4gICAgICovXG4gICAgZ2V0IHN0YXRzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZlOiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdHM6IE9iamVjdC5rZXlzKHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnMpLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiBPYmplY3Qua2V5cyh0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMpLmxlbmd0aFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9faW50ZXJuYWxfX3N0YXRzLnRvdGFsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldCBlbmRwb2ludFN0YXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBMaXN0ZW5zIG9uIGV2ZW50cyBhZnRlciBoYXZpbmcgc3Vic2NyaWJlZCB1c2luZyB0aGUgW1tzdWJzY3JpYmVdXSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gIHtQcm92aWRlckludGVyZmFjZUVtaXR0ZWR9IHR5cGUgRXZlbnRcbiAgICAgKiBAcGFyYW0gIHtQcm92aWRlckludGVyZmFjZUVtaXRDYn0gIHN1YiAgQ2FsbGJhY2tcbiAgICAgKiBAcmV0dXJuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uXG4gICAgICovXG4gICAgb24odHlwZSwgc3ViKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRlbWl0dGVyLm9uKHR5cGUsIHN1Yik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2V2ZW50ZW1pdHRlci5yZW1vdmVMaXN0ZW5lcih0eXBlLCBzdWIpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBTZW5kIEpTT04gZGF0YSB1c2luZyBXZWJTb2NrZXRzIHRvIGNvbmZpZ3VyZWQgSFRUUCBFbmRwb2ludCBvciBxdWV1ZS5cbiAgICAgKiBAcGFyYW0gbWV0aG9kIFRoZSBSUEMgbWV0aG9kcyB0byBleGVjdXRlXG4gICAgICogQHBhcmFtIHBhcmFtcyBFbmNvZGVkIHBhcmFtZXRlcnMgYXMgYXBwbGljYWJsZSBmb3IgdGhlIG1ldGhvZFxuICAgICAqIEBwYXJhbSBzdWJzY3JpcHRpb24gU3Vic2NyaXB0aW9uIGRldGFpbHMgKGludGVybmFsbHkgdXNlZClcbiAgICAgKi9cbiAgICBzZW5kKG1ldGhvZCwgcGFyYW1zLCBpc0NhY2hlYWJsZSwgc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZW5kcG9pbnRTdGF0cy5yZXF1ZXN0cysrO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N0YXRzLnRvdGFsLnJlcXVlc3RzKys7XG4gICAgICAgIGNvbnN0IFtpZCwgYm9keV0gPSB0aGlzLl9faW50ZXJuYWxfX2NvZGVyLmVuY29kZUpzb24obWV0aG9kLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IGlzQ2FjaGVhYmxlID8gYCR7bWV0aG9kfTo6JHtzdHJpbmdpZnkocGFyYW1zKX1gIDogJyc7XG4gICAgICAgIGxldCByZXN1bHRQcm9taXNlID0gaXNDYWNoZWFibGVcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19jYWxsQ2FjaGUuZ2V0KGNhY2hlS2V5KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAoIXJlc3VsdFByb21pc2UpIHtcbiAgICAgICAgICAgIHJlc3VsdFByb21pc2UgPSB0aGlzLl9faW50ZXJuYWxfX3NlbmQoaWQsIGJvZHksIG1ldGhvZCwgcGFyYW1zLCBzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgaWYgKGlzQ2FjaGVhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jYWxsQ2FjaGUuc2V0KGNhY2hlS2V5LCByZXN1bHRQcm9taXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZW5kcG9pbnRTdGF0cy5jYWNoZWQrKztcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc3RhdHMudG90YWwuY2FjaGVkKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFByb21pc2U7XG4gICAgfVxuICAgIGFzeW5jIF9faW50ZXJuYWxfX3NlbmQoaWQsIGJvZHksIG1ldGhvZCwgcGFyYW1zLCBzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkIHx8IHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSAoZXJyb3IsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGwuZGVidWcoKCkgPT4gWydjYWxsaW5nJywgbWV0aG9kLCBib2R5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19oYW5kbGVyc1tpZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNTZW50ID0gYm9keS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLmJ5dGVzU2VudCArPSBieXRlc1NlbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5ieXRlc1NlbnQgKz0gYnl0ZXNTZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0LnNlbmQoYm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50U3RhdHMuZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5lcnJvcnMrKztcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQG5hbWUgc3Vic2NyaWJlXG4gICAgICogQHN1bW1hcnkgQWxsb3dzIHN1YnNjcmliaW5nIHRvIGEgc3BlY2lmaWMgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxCUj5cbiAgICAgKlxuICAgICAqIGBgYGphdmFzY3JpcHRcbiAgICAgKiBjb25zdCBwcm92aWRlciA9IG5ldyBXc1Byb3ZpZGVyKCd3czovLzEyNy4wLjAuMTo5OTQ0Jyk7XG4gICAgICogY29uc3QgcnBjID0gbmV3IFJwYyhwcm92aWRlcik7XG4gICAgICpcbiAgICAgKiBycGMuc3RhdGUuc3Vic2NyaWJlU3RvcmFnZShbW3N0b3JhZ2Uuc3lzdGVtLmFjY291bnQsIDxBZGRyZXNzPl1dLCAoXywgdmFsdWVzKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyh2YWx1ZXMpXG4gICAgICogfSkudGhlbigoc3Vic2NyaXB0aW9uSWQpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdiYWxhbmNlIGNoYW5nZXMgc3Vic2NyaXB0aW9uIGlkOiAnLCBzdWJzY3JpcHRpb25JZClcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHN1YnNjcmliZSh0eXBlLCBtZXRob2QsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLnN1YnNjcmlwdGlvbnMrKztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5zdWJzY3JpcHRpb25zKys7XG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbnMgYXJlIG5vdCBjYWNoZWQsIExSVSBhcHBsaWVzIHRvIC5hdCg8YmxvY2tIYXNoPikgb25seVxuICAgICAgICByZXR1cm4gdGhpcy5zZW5kKG1ldGhvZCwgcGFyYW1zLCBmYWxzZSwgeyBjYWxsYmFjaywgdHlwZSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgQWxsb3dzIHVuc3Vic2NyaWJpbmcgdG8gc3Vic2NyaXB0aW9ucyBtYWRlIHdpdGggW1tzdWJzY3JpYmVdXS5cbiAgICAgKi9cbiAgICBhc3luYyB1bnN1YnNjcmliZSh0eXBlLCBtZXRob2QsIGlkKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGAke3R5cGV9Ojoke2lkfWA7XG4gICAgICAgIC8vIEZJWE1FIFRoaXMgbm93IGNvdWxkIGhhcHBlbiB3aXRoIHJlLXN1YnNjcmlwdGlvbnMuIFRoZSBpc3N1ZSBpcyB0aGF0IHdpdGggYSByZS1zdWJcbiAgICAgICAgLy8gdGhlIGFzc2lnbmVkIGlkIG5vdyBkb2VzIG5vdCBtYXRjaCB3aGF0IHRoZSBBUEkgdXNlciBvcmlnaW5hbGx5IHJlY2VpdmVkLiBJdCBoYXNcbiAgICAgICAgLy8gYSBzbGlnaHQgY29tcGxpY2F0aW9uIGluIHNvbHZpbmcgLSBzaW5jZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgc2VuZCBpZCwgYnV0IHJhdGhlclxuICAgICAgICAvLyBuZWVkIHRvIGZpbmQgdGhlIGFjdHVhbCBzdWJzY3JpcHRpb24gaWQgdG8gbWFwIGl0XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnNbc3Vic2NyaXB0aW9uXSkpIHtcbiAgICAgICAgICAgIGwuZGVidWcoKCkgPT4gYFVuYWJsZSB0byBmaW5kIGFjdGl2ZSBzdWJzY3JpcHRpb249JHtzdWJzY3JpcHRpb259YCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX19pbnRlcm5hbF9fc3Vic2NyaXB0aW9uc1tzdWJzY3JpcHRpb25dO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQgJiYgIWlzTnVsbCh0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldClcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2VuZChtZXRob2QsIFtpZF0pXG4gICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfX2ludGVybmFsX19lbWl0ID0gKHR5cGUsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ldmVudGVtaXR0ZXIuZW1pdCh0eXBlLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX29uU29ja2V0Q2xvc2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYGRpc2Nvbm5lY3RlZCBmcm9tICR7dGhpcy5lbmRwb2ludH06ICR7ZXZlbnQuY29kZX06OiAke2V2ZW50LnJlYXNvbiB8fCBnZXRXU0Vycm9yU3RyaW5nKGV2ZW50LmNvZGUpfWApO1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19hdXRvQ29ubmVjdE1zID4gMCkge1xuICAgICAgICAgICAgbC5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX193ZWJzb2NrZXQub25jbG9zZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldC5vbmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0Lm9ubWVzc2FnZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldC5vbm9wZW4gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX193ZWJzb2NrZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXRJZCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXRJZCk7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVqZWN0IGFsbCBoYW5naW5nIHJlcXVlc3RzXG4gICAgICAgIGVyYXNlUmVjb3JkKHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnMsIChoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGguY2FsbGJhY2soZXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgdGhyb3dcbiAgICAgICAgICAgICAgICBsLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlcmFzZVJlY29yZCh0aGlzLl9faW50ZXJuYWxfX3dhaXRpbmdGb3JJZCk7XG4gICAgICAgIC8vIFJlc2V0IHN0YXRzIGZvciBhY3RpdmUgZW5kcG9pbnRcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzID0gZGVmYXVsdEVuZHBvaW50U3RhdHMoKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbWl0KCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fYXV0b0Nvbm5lY3RNcyA+IDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdFdpdGhSZXRyeSgpLmNhdGNoKG5vb3ApO1xuICAgICAgICAgICAgfSwgdGhpcy5fX2ludGVybmFsX19hdXRvQ29ubmVjdE1zKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19pbnRlcm5hbF9fb25Tb2NrZXRFcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICBsLmRlYnVnKCgpID0+IFsnc29ja2V0IGVycm9yJywgZXJyb3JdKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX29uU29ja2V0TWVzc2FnZSA9IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGwuZGVidWcoKCkgPT4gWydyZWNlaXZlZCcsIG1lc3NhZ2UuZGF0YV0pO1xuICAgICAgICBjb25zdCBieXRlc1JlY3YgPSBtZXNzYWdlLmRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50U3RhdHMuYnl0ZXNSZWN2ICs9IGJ5dGVzUmVjdjtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5ieXRlc1JlY3YgKz0gYnl0ZXNSZWN2O1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKHJlc3BvbnNlLm1ldGhvZClcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19vblNvY2tldE1lc3NhZ2VSZXN1bHQocmVzcG9uc2UpXG4gICAgICAgICAgICA6IHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRNZXNzYWdlU3Vic2NyaWJlKHJlc3BvbnNlKTtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX29uU29ja2V0TWVzc2FnZVJlc3VsdCA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5fX2ludGVybmFsX19oYW5kbGVyc1tyZXNwb25zZS5pZF07XG4gICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgbC5kZWJ1ZygoKSA9PiBgVW5hYmxlIHRvIGZpbmQgaGFuZGxlciBmb3IgaWQ9JHtyZXNwb25zZS5pZH1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBtZXRob2QsIHBhcmFtcywgc3Vic2NyaXB0aW9uIH0gPSBoYW5kbGVyO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fX2ludGVybmFsX19jb2Rlci5kZWNvZGVSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICAvLyBmaXJzdCBzZW5kIHRoZSByZXN1bHQgLSBpbiBjYXNlIG9mIHN1YnMsIHdlIG1heSBoYXZlIGFuIHVwZGF0ZVxuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgaWYgd2UgaGF2ZSBzb21lIHF1ZXVlZCByZXN1bHRzIGFscmVhZHlcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJJZCA9IGAke3N1YnNjcmlwdGlvbi50eXBlfTo6JHtyZXN1bHR9YDtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnNbc3ViSWRdID0gb2JqZWN0U3ByZWFkKHt9LCBzdWJzY3JpcHRpb24sIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgcmVzdWx0IHdhaXRpbmcgZm9yIHRoaXMgc3Vic2NyaXB0aW9uIGFscmVhZHlcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX193YWl0aW5nRm9ySWRbc3ViSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRNZXNzYWdlU3Vic2NyaWJlKHRoaXMuX19pbnRlcm5hbF9fd2FpdGluZ0ZvcklkW3N1YklkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLmVycm9ycysrO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5lcnJvcnMrKztcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbGJhY2soZXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnNbcmVzcG9uc2UuaWRdO1xuICAgIH07XG4gICAgX19pbnRlcm5hbF9fb25Tb2NrZXRNZXNzYWdlU3Vic2NyaWJlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UubWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG1ldGhvZCBmb3VuZCBpbiBKU09OUlBDIHJlc3BvbnNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0aG9kID0gQUxJQVNFU1tyZXNwb25zZS5tZXRob2RdIHx8IHJlc3BvbnNlLm1ldGhvZDtcbiAgICAgICAgY29uc3Qgc3ViSWQgPSBgJHttZXRob2R9Ojoke3Jlc3BvbnNlLnBhcmFtcy5zdWJzY3JpcHRpb259YDtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX19pbnRlcm5hbF9fc3Vic2NyaXB0aW9uc1tzdWJJZF07XG4gICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgLy8gc3RvcmUgdGhlIEpTT04sIHdlIGNvdWxkIGhhdmUgb3V0LW9mLW9yZGVyIHN1YmlkIGNvbWluZyBpblxuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX193YWl0aW5nRm9ySWRbc3ViSWRdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBsLmRlYnVnKCgpID0+IGBVbmFibGUgdG8gZmluZCBoYW5kbGVyIGZvciBzdWJzY3JpcHRpb249JHtzdWJJZH1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBob3VzZWtlZXBpbmdcbiAgICAgICAgZGVsZXRlIHRoaXMuX19pbnRlcm5hbF9fd2FpdGluZ0ZvcklkW3N1YklkXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX19pbnRlcm5hbF9fY29kZXIuZGVjb2RlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgaGFuZGxlci5jYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLmVycm9ycysrO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5lcnJvcnMrKztcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbGJhY2soZXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX29uU29ja2V0T3BlbiA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYlNvY2tldCBjYW5ub3QgYmUgbnVsbCBpbiBvbk9wZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBsLmRlYnVnKCgpID0+IFsnY29ubmVjdGVkIHRvJywgdGhpcy5lbmRwb2ludF0pO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yZXN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2VtaXQoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX3Jlc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gdGhpcy5fX2ludGVybmFsX19zdWJzY3JpcHRpb25zO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgICAgUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoc3Vic2NyaXB0aW9ucykubWFwKGFzeW5jIChpZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgbWV0aG9kLCBwYXJhbXMsIHR5cGUgfSA9IHN1YnNjcmlwdGlvbnNbaWRdO1xuICAgICAgICAgICAgLy8gb25seSByZS1jcmVhdGUgc3Vic2NyaXB0aW9ucyB3aGljaCBhcmUgbm90IGluIGF1dGhvciAob25seSBhcmVhIHdoZXJlXG4gICAgICAgICAgICAvLyB0cmFuc2FjdGlvbnMgYXJlIGNyZWF0ZWQsIGkuZS4gc3VibWlzc2lvbnMgc3VjaCBhcyAnYXV0aG9yX3N1Ym1pdEFuZFdhdGNoRXh0cmluc2ljJ1xuICAgICAgICAgICAgLy8gYXJlIG5vdCBpbmNsdWRlZCAoYW5kIHdpbGwgbm90IGJlIHJlLWJyb2FkY2FzdClcbiAgICAgICAgICAgIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2F1dGhvcl8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdWJzY3JpYmUodHlwZSwgbWV0aG9kLCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGwuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSkuY2F0Y2gobC5lcnJvcik7XG4gICAgfTtcbiAgICBfX2ludGVybmFsX190aW1lb3V0SGFuZGxlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBpZHMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnNbaWRzW2ldXTtcbiAgICAgICAgICAgIGlmICgobm93IC0gaGFuZGxlci5zdGFydCkgPiB0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmNhbGxiYWNrKG5ldyBFcnJvcihgTm8gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBSUEMgZW5kcG9pbnQgaW4gJHt0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXQgLyAxMDAwfXNgKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLnRpbWVvdXQrKztcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N0YXRzLnRvdGFsLnRpbWVvdXQrKztcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fX2ludGVybmFsX19oYW5kbGVyc1tpZHNbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNvbXBhY3RUb1U4YSwgdThhQ29uY2F0U3RyaWN0LCB1OGFUb0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGNvbXBhcmVBcnJheSB9IGZyb20gJy4uL3V0aWxzL2NvbXBhcmVBcnJheS5qcyc7XG4vKipcbiAqIEBuYW1lIEFic3RyYWN0QXJyYXlcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBtYW5hZ2VzIGNvZGVjIGFycmF5cy4gSXQgaXMgYW4gZXh0ZW5zaW9uIHRvIEFycmF5LCBwcm92aWRpbmdcbiAqIHNwZWNpZmljIGVuY29kaW5nL2RlY29kaW5nIG9uIHRvcCBvZiB0aGUgYmFzZSB0eXBlLlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RBcnJheSBleHRlbmRzIEFycmF5IHtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGg7XG4gICAgaXNTdG9yYWdlRmFsbGJhY2s7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgZW5zdXJlcyB0aGF0IG9wZXJhdG9ycyBzdWNoIGFzIGNsaWNlLCBmaWx0ZXIsIG1hcCwgZXRjLiByZXR1cm5cbiAgICAgKiBuZXcgQXJyYXkgaW5zdGFuY2VzICh3aXRob3V0IHRoaXMgd2UgbmVlZCB0byBhcHBseSBvdmVycmlkZXMpXG4gICAgICovXG4gICAgc3RhdGljIGdldCBbU3ltYm9sLnNwZWNpZXNdKCkge1xuICAgICAgICByZXR1cm4gQXJyYXk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBsZW5ndGgpIHtcbiAgICAgICAgc3VwZXIobGVuZ3RoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGxvb3AgdGhyb3VnaCBhbGwgZW50cmllcyBzaW5jZSB0aGV5IG1heSBoYXZlIGEgdmFyaWFibGUgbGVuZ3RoIHRoZW1zZWx2ZXMsXG4gICAgICAgIC8vIGUuZy4gd2hlbiBhIFZlYyBvciBDb21wYWN0IGlzIGNvbnRhaW5lZCB3aXRoaW5nLCBpdCBoYXMgYSB2YXJpYWJsZSBsZW5ndGggYmFzZWQgb24gZGF0YVxuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBsZXQgdG90YWwgPSBjb21wYWN0VG9VOGEoY291bnQpLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB0b3RhbCArPSB0aGlzW2ldLmVuY29kZWRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Lmhhc2godGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAvLyBvbmx5IGluY2x1ZGVkIGhlcmUgc2luY2Ugd2UgaWdub3JlIGluaGVyaXRlZCBkb2NzXG4gICAgICAgIHJldHVybiBzdXBlci5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVBcnJheSh0aGlzLCBvdGhlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5uZXI6IHRoaXMuaW5zcGVjdElubmVyKCksXG4gICAgICAgICAgICBvdXRlcjogW2NvbXBhY3RUb1U4YSh0aGlzLmxlbmd0aCldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBJbnRlcm5hbCBwZXItaXRlbSBpbnNwZWN0aW9uIG9mIGludGVybmFsIHZhbHVlc1xuICAgICAqL1xuICAgIGluc3BlY3RJbm5lcigpIHtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlubmVyW2ldID0gdGhpc1tpXS5pbnNwZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlubmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBhbiBzdGFuZGFyZCBKYXZhU2NyaXB0IEFycmF5XG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b0hleCgpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvSGV4KHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSB0aGlzW2ldICYmIHRoaXNbaV0udG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IGxvZyBpbnNpZGUgdGhlIFU4YSBkZWNvZGluZyBhbmQgdXNlIEpTT04uc3RyaW5naWZ5KC4uLiksIHdoaWNoXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IHRoZSBWZWMgbWF5IGJlIHBhcnRpYWxseSBwb3B1bGF0ZWQgKHNhbWUgYXBwbGllcyB0byB0b0h1bWFuLCBzYW1lIGNoZWNrKVxuICAgICAgICAgICAgcmVzdWx0W2ldID0gdGhpc1tpXSAmJiB0aGlzW2ldLnRvSlNPTigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRoaXNbaV0gJiYgdGhpc1tpXS50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0W2ldID0gdGhpc1tpXS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgWyR7cmVzdWx0LmpvaW4oJywgJyl9XWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBTQ0FMRSBzcGVjaWZpY2F0aW9uc1xuICAgICAqIEBwYXJhbSBpc0JhcmUgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBwcmVmaXhlcyAoaW50ZXJuYWwpXG4gICAgICovXG4gICAgdG9VOGEoaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSB0aGlzLnRvVThhSW5uZXIoKTtcbiAgICAgICAgcmV0dXJuIGlzQmFyZVxuICAgICAgICAgICAgPyB1OGFDb25jYXRTdHJpY3QoZW5jb2RlZClcbiAgICAgICAgICAgIDogdThhQ29uY2F0U3RyaWN0KFtjb21wYWN0VG9VOGEodGhpcy5sZW5ndGgpLCAuLi5lbmNvZGVkXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBJbnRlcm5hbCBwZXItaXRlbSBTQ0FMRSBlbmNvZGluZyBvZiBjb250YWluZWQgdmFsdWVzXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YUlubmVyKGlzQmFyZSkge1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBlbmNvZGVkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBlbmNvZGVkW2ldID0gdGhpc1tpXS50b1U4YShpc0JhcmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmNvZGVkO1xuICAgIH1cbn1cbiIsIi8qKlxuICogQG5hbWUgQmFzZVxuICogQGRlc2NyaXB0aW9uIEEgdHlwZSBleHRlbmRzIHRoZSBCYXNlIGNsYXNzLCB3aGVuIGl0IGhvbGRzIGEgdmFsdWVcbiAqL1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0QmFzZSB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpbml0aWFsVThhTGVuZ3RoO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIF9faW50ZXJuYWxfX3JhdztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGluaXRpYWxVOGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gaW5pdGlhbFU4YUxlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yYXcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1U4YSgpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIHRoZSBpbm5lciAod3JhcHBlZCB2YWx1ZSlcbiAgICAgKi9cbiAgICBnZXQgaW5uZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LmlzRW1wdHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LmVxKG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy5pbnNwZWN0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUuIGlzTGUgcmV0dXJucyBhIExFIChudW1iZXItb25seSkgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICB0b0hleChpc0xlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b0hleChpc0xlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1N0cmluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9VOGEoaXNCYXJlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGlubmVyIHdyYXBwZWQgdmFsdWUgKGVxdWl2YWxlbnQgdG8gdmFsdWVPZilcbiAgICAgKi9cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGlubmVyIHdyYXBwZWQgdmFsdWVcbiAgICAgKi9cbiAgICB2YWx1ZU9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXc7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQk4sIEJOX0JJTExJT04sIEJOX0hVTkRSRUQsIEJOX01JTExJT04sIEJOX1FVSU5USUxMLCBiblRvQm4sIGJuVG9IZXgsIGJuVG9VOGEsIGZvcm1hdEJhbGFuY2UsIGZvcm1hdE51bWJlciwgaGV4VG9CbiwgaXNCaWdJbnQsIGlzQm4sIGlzRnVuY3Rpb24sIGlzSGV4LCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1U4YSwgdThhVG9CbiwgdThhVG9OdW1iZXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9VSU5UX0JJVFMgPSA2NDtcbmNvbnN0IE1BWF9OVU1CRVJfQklUUyA9IDUyO1xuY29uc3QgTVVMX1AgPSBuZXcgQk4oMTAwMDApO1xuY29uc3QgRk9STUFUVEVSUyA9IFtcbiAgICBbJ1BlcnF1aW50aWxsJywgQk5fUVVJTlRJTExdLFxuICAgIFsnUGVyYmlsbCcsIEJOX0JJTExJT05dLFxuICAgIFsnUGVybWlsbCcsIEJOX01JTExJT05dLFxuICAgIFsnUGVyY2VudCcsIEJOX0hVTkRSRURdXG5dO1xuZnVuY3Rpb24gaXNUb0JuKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUudG9Cbik7XG59XG5mdW5jdGlvbiB0b1BlcmNlbnRhZ2UodmFsdWUsIGRpdmlzb3IpIHtcbiAgICByZXR1cm4gYCR7KHZhbHVlLm11bChNVUxfUCkuZGl2KGRpdmlzb3IpLnRvTnVtYmVyKCkgLyAxMDApLnRvRml4ZWQoMil9JWA7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVBYnN0cmFjdEludCh2YWx1ZSwgaXNOZWdhdGl2ZSkge1xuICAgIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8IHZhbHVlIDwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVyIG5lZWRzIHRvIGJlIGFuIGludGVnZXIgPD0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGkuZS4gMiBeIDUzIC0gMScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIGlmIChpc0hleCh2YWx1ZSwgLTEsIHRydWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gaGV4VG9Cbih2YWx1ZSwgeyBpc0xlOiBmYWxzZSwgaXNOZWdhdGl2ZSB9KS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnLicpIHx8IHZhbHVlLmluY2x1ZGVzKCcsJykgfHwgdmFsdWUuaW5jbHVkZXMoJ2UnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgc2hvdWxkIG5vdCBjb250YWluIGRlY2ltYWwgcG9pbnRzIG9yIHNjaWVudGlmaWMgbm90YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQm4odmFsdWUpIHx8IGlzQmlnSW50KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGlmIChpc1RvQm4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9CbigpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxsb3cgdGhlIGNvbnN0cnVjdGlvbiBmcm9tIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIHRvcC1sZXZlbCBrZXkuIFRoaXMgbWVhbnMgdGhhdFxuICAgICAgICAvLyBzaW5nbGUga2V5IG9iamVjdHMgY2FuIGJlIHRyZWF0ZWQgZXF1aXZhbGVudGx5IHRvIG51bWJlcnMsIGFzc3VtaW5nIHRoZXkgbWVldCB0aGVcbiAgICAgICAgLy8gc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiAoVGhpcyBpcyB1c2VmdWwgaW4gV2VpZ2h0cyAxLjUgd2hlcmUgT2JqZWN0cyBhcmUgY29tcGFjdClcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjb25zdHJ1Y3QgbnVtYmVyIGZyb20gbXVsdGkta2V5IG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNvZGVBYnN0cmFjdEludCh2YWx1ZVtrZXlzWzBdXSwgaXNOZWdhdGl2ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY3JlYXRlIEJOIGZyb20gdW5rbm93biB0eXBlICR7dHlwZW9mIHZhbHVlfWApO1xufVxuLyoqXG4gKiBAbmFtZSBBYnN0cmFjdEludFxuICogQGlnbm9yZVxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RJbnQgZXh0ZW5kcyBCTiB7XG4gICAgcmVnaXN0cnk7XG4gICAgZW5jb2RlZExlbmd0aDtcbiAgICBpc1Vuc2lnbmVkO1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19iaXRMZW5ndGg7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlID0gMCwgYml0TGVuZ3RoID0gREVGQVVMVF9VSU5UX0JJVFMsIGlzU2lnbmVkID0gZmFsc2UpIHtcbiAgICAgICAgLy8gQ29uc3RydWN0IHZpYSBhIHN0cmluZy9udW1iZXIsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGluIHRoZSBCTiBjb25zdHJ1Y3Rvci5cbiAgICAgICAgLy8gSXQgd291bGQgYmUgaWRlYWwgdG8gYWN0dWFsbHkgcmV0dXJuIGEgQk4sIGJ1dCB0aGVyZSBpcyBhbiBpc3N1ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvYm4uanMvaXNzdWVzLzIwNlxuICAgICAgICBzdXBlcihcbiAgICAgICAgLy8gc2hvcnRjdXQgaXNVOGEgYXMgdXNlZCBpbiBTQ0FMRSBkZWNvZGluZ1xuICAgICAgICBpc1U4YSh2YWx1ZSlcbiAgICAgICAgICAgID8gYml0TGVuZ3RoIDw9IDQ4XG4gICAgICAgICAgICAgICAgPyB1OGFUb051bWJlcih2YWx1ZS5zdWJhcnJheSgwLCBiaXRMZW5ndGggLyA4KSwgeyBpc05lZ2F0aXZlOiBpc1NpZ25lZCB9KVxuICAgICAgICAgICAgICAgIDogdThhVG9Cbih2YWx1ZS5zdWJhcnJheSgwLCBiaXRMZW5ndGggLyA4KSwgeyBpc0xlOiB0cnVlLCBpc05lZ2F0aXZlOiBpc1NpZ25lZCB9KS50b1N0cmluZygpXG4gICAgICAgICAgICA6IGRlY29kZUFic3RyYWN0SW50KHZhbHVlLCBpc1NpZ25lZCkpO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoID0gYml0TGVuZ3RoO1xuICAgICAgICB0aGlzLmVuY29kZWRMZW5ndGggPSB0aGlzLl9faW50ZXJuYWxfX2JpdExlbmd0aCAvIDg7XG4gICAgICAgIHRoaXMuaW5pdGlhbFU4YUxlbmd0aCA9IHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoIC8gODtcbiAgICAgICAgdGhpcy5pc1Vuc2lnbmVkID0gIWlzU2lnbmVkO1xuICAgICAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5pc05lZygpO1xuICAgICAgICBjb25zdCBtYXhCaXRzID0gYml0TGVuZ3RoIC0gKGlzU2lnbmVkICYmICFpc05lZ2F0aXZlID8gMSA6IDApO1xuICAgICAgICBpZiAoaXNOZWdhdGl2ZSAmJiAhaXNTaWduZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLnRvUmF3VHlwZSgpfTogTmVnYXRpdmUgbnVtYmVyIHBhc3NlZCB0byB1bnNpZ25lZCB0eXBlYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3VwZXIuYml0TGVuZ3RoKCkgPiBtYXhCaXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50b1Jhd1R5cGUoKX06IElucHV0IHRvbyBsYXJnZS4gRm91bmQgaW5wdXQgd2l0aCAke3N1cGVyLmJpdExlbmd0aCgpfSBiaXRzLCBleHBlY3RlZCAke21heEJpdHN9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGEgemVybyB2YWx1ZSAoYWxpZ24gZWxzZXdoZXJlKVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1plcm8oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIGJpdExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgLy8gSGVyZSB3ZSBhcmUgYWN0dWFsbHkgb3ZlcnJpZGluZyB0aGUgYnVpbHQtaW4gLmVxIHRvIHRha2UgY2FyZSBvZiBib3RoXG4gICAgICAgIC8vIG51bWJlciBhbmQgQk4gaW5wdXRzIChubyBgLmVxbmAgbmVlZGVkKSAtIG51bWJlcnMgd2lsbCBiZSBjb252ZXJ0ZWRcbiAgICAgICAgcmV0dXJuIHN1cGVyLmVxKGlzSGV4KG90aGVyKVxuICAgICAgICAgICAgPyBoZXhUb0JuKG90aGVyLnRvU3RyaW5nKCksIHsgaXNMZTogZmFsc2UsIGlzTmVnYXRpdmU6ICF0aGlzLmlzVW5zaWduZWQgfSlcbiAgICAgICAgICAgIDogYm5Ub0JuKG90aGVyKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3V0ZXI6IFt0aGlzLnRvVThhKCldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgdGhlIG1heCBvZiB0aGUgdHlwZVxuICAgICAqL1xuICAgIGlzTWF4KCkge1xuICAgICAgICBjb25zdCB1OGEgPSB0aGlzLnRvVThhKCkuZmlsdGVyKChiKSA9PiBiID09PSAweGZmKTtcbiAgICAgICAgcmV0dXJuIHU4YS5sZW5ndGggPT09ICh0aGlzLl9faW50ZXJuYWxfX2JpdExlbmd0aCAvIDgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIEJpZ0ludCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyXG4gICAgICovXG4gICAgdG9CaWdJbnQoKSB7XG4gICAgICAgIHJldHVybiBCaWdJbnQodGhpcy50b1N0cmluZygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIEJOIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIuIChDb21wYXRpYmlsaXR5KVxuICAgICAqL1xuICAgIHRvQm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoaXNMZSA9IGZhbHNlKSB7XG4gICAgICAgIC8vIEZvciBkaXNwbGF5L0pTT04sIHRoaXMgaXMgQkUsIGZvciBjb21wYXJlLCB1c2UgaXNMZVxuICAgICAgICByZXR1cm4gYm5Ub0hleCh0aGlzLCB7XG4gICAgICAgICAgICBiaXRMZW5ndGg6IHRoaXMuYml0TGVuZ3RoKCksXG4gICAgICAgICAgICBpc0xlLFxuICAgICAgICAgICAgaXNOZWdhdGl2ZTogIXRoaXMuaXNVbnNpZ25lZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKF9pc0V4cGFuZGVkKSB7XG4gICAgICAgIGNvbnN0IHJhd1R5cGUgPSB0aGlzLnRvUmF3VHlwZSgpO1xuICAgICAgICBpZiAocmF3VHlwZSA9PT0gJ0JhbGFuY2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01heCgpXG4gICAgICAgICAgICAgICAgPyAnZXZlcnl0aGluZydcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZXMgd2UgbmVlZCBzb21lIHdheSBvZiBkZXRlY3Rpbmcgd2hpY2ggaW5zdGFuY2UgdGhpcyBiZWxvbmdzXG4gICAgICAgICAgICAgICAgLy8gdG8uIGFzIGl0IHN0YW5kcyB3ZSB3aWxsIGFsd2F5cyBmb3JtYXQgKGluY29ycmVjdGx5KSBhZ2FpbnN0IHRoZSBmaXJzdCB0b2tlbiBkZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBmb3JtYXRCYWxhbmNlKHRoaXMsIHsgZGVjaW1hbHM6IHRoaXMucmVnaXN0cnkuY2hhaW5EZWNpbWFsc1swXSwgd2l0aFNpOiB0cnVlLCB3aXRoVW5pdDogdGhpcy5yZWdpc3RyeS5jaGFpblRva2Vuc1swXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbLCBkaXZpc29yXSA9IEZPUk1BVFRFUlMuZmluZCgoW3R5cGVdKSA9PiB0eXBlID09PSByYXdUeXBlKSB8fCBbXTtcbiAgICAgICAgcmV0dXJuIGRpdmlzb3JcbiAgICAgICAgICAgID8gdG9QZXJjZW50YWdlKHRoaXMsIGRpdmlzb3IpXG4gICAgICAgICAgICA6IGZvcm1hdE51bWJlcih0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04ob25seUhleCA9IGZhbHNlKSB7XG4gICAgICAgIC8vIEZJWE1FIHRoaXMgcmV0dXJuIHR5cGUgc2hvdWxkIGJ5IHN0cmluZyB8IG51bWJlciwgaG93ZXZlciBCTiByZXR1cm5zIHN0cmluZ1xuICAgICAgICAvLyBPcHRpb25zIGhlcmUgYXJlXG4gICAgICAgIC8vICAgLSBzdXBlci5iaXRMZW5ndGgoKSAtIHRoZSBhY3R1YWwgdXNlZCBiaXRzLCB1c2UgaGV4IHdoZW4gY2xvc2UgdG8gTUFYX1NBRkVfSU5URUdFUlxuICAgICAgICAvLyAgIC0gdGhpcy5fX2ludGVybmFsX19iaXRMZW5ndGggLSB0aGUgbWF4IHVzZWQgYml0cywgdXNlIGhleCB3aGVuIGxhcmdlciB0aGFuIG5hdGl2ZSBSdXN0IHR5cGVcbiAgICAgICAgcmV0dXJuIG9ubHlIZXggfHwgKHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoID4gMTI4KSB8fCAoc3VwZXIuYml0TGVuZ3RoKCkgPiBNQVhfTlVNQkVSX0JJVFMpXG4gICAgICAgICAgICA/IHRoaXMudG9IZXgoKVxuICAgICAgICAgICAgOiB0aGlzLnRvTnVtYmVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB2YWx1ZSBpbiBhIHByaW1pdGl2ZSBmb3JtLCBlaXRoZXIgbnVtYmVyIHdoZW4gPD0gNTIgYml0cywgb3Igc3RyaW5nIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuYml0TGVuZ3RoKCkgPiBNQVhfTlVNQkVSX0JJVFNcbiAgICAgICAgICAgID8gdGhpcy50b1N0cmluZygpXG4gICAgICAgICAgICA6IHRoaXMudG9OdW1iZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIC8vIE5PVEUgSW4gdGhlIGNhc2Ugb2YgYmFsYW5jZXMsIHdoaWNoIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcgb24gdGhlIFVJXG4gICAgICAgIC8vIGFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHksIHJldHVybiBhIHNwZWNpZmljIHZhbHVlIGZvciBpdCBzb1xuICAgICAgICAvLyB1bmRlcmx5aW5nIGl0IGFsd2F5cyBtYXRjaGVzIChubyBtYXR0ZXIgd2hpY2ggbGVuZ3RoIGl0IGFjdHVhbGx5IGlzKVxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHRoaXMucmVnaXN0cnkuY3JlYXRlQ2xhc3NVbnNhZmUoJ0JhbGFuY2UnKVxuICAgICAgICAgICAgPyAnQmFsYW5jZSdcbiAgICAgICAgICAgIDogYCR7dGhpcy5pc1Vuc2lnbmVkID8gJ3UnIDogJ2knfSR7dGhpcy5iaXRMZW5ndGgoKX1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqIEBwYXJhbSBiYXNlIFRoZSBiYXNlIHRvIHVzZSBmb3IgdGhlIGNvbnZlcnNpb25cbiAgICAgKi9cbiAgICB0b1N0cmluZyhiYXNlKSB7XG4gICAgICAgIC8vIG9ubHkgaW5jbHVkZWQgaGVyZSBzaW5jZSB3ZSBkbyBub3QgaW5oZXJpdCBkb2NzXG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZyhiYXNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gYm5Ub1U4YSh0aGlzLCB7XG4gICAgICAgICAgICBiaXRMZW5ndGg6IHRoaXMuYml0TGVuZ3RoKCksXG4gICAgICAgICAgICBpc0xlOiB0cnVlLFxuICAgICAgICAgICAgaXNOZWdhdGl2ZTogIXRoaXMuaXNVbnNpZ25lZFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0RnJvbVU4YSwgY29tcGFjdEZyb21VOGFMaW0sIGNvbXBhY3RUb1U4YSwgaWRlbnRpdHksIGlzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgdHlwZVRvQ29uc3RydWN0b3IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5mdW5jdGlvbiBkZWNvZGVDb21wYWN0KHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgW2RlY29kZWRMZW5ndGgsIGJuXSA9ICh2YWx1ZVswXSAmIDBiMTEpIDwgMGIxMVxuICAgICAgICAgICAgPyBjb21wYWN0RnJvbVU4YUxpbSh2YWx1ZSlcbiAgICAgICAgICAgIDogY29tcGFjdEZyb21VOGEodmFsdWUpO1xuICAgICAgICByZXR1cm4gW25ldyBUeXBlKHJlZ2lzdHJ5LCBibiksIGRlY29kZWRMZW5ndGhdO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbXBhY3QpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gdmFsdWUudW53cmFwKCk7XG4gICAgICAgIHJldHVybiByYXcgaW5zdGFuY2VvZiBUeXBlXG4gICAgICAgICAgICA/IFtyYXcsIDBdXG4gICAgICAgICAgICA6IFtuZXcgVHlwZShyZWdpc3RyeSwgcmF3KSwgMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgICByZXR1cm4gW3ZhbHVlLCAwXTtcbiAgICB9XG4gICAgcmV0dXJuIFtuZXcgVHlwZShyZWdpc3RyeSwgdmFsdWUpLCAwXTtcbn1cbi8qKlxuICogQG5hbWUgQ29tcGFjdFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIGNvbXBhY3QgbGVuZ3RoLWVuY29kaW5nIGNvZGVjIHdyYXBwZXIuIEl0IHBlcmZvcm1zIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIExlbmd0aCwgaG93ZXZlclxuICogZGlmZmVycyBpbiB0aGF0IGl0IHVzZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYnl0ZXMgdG8gZG8gdGhlIGFjdHVhbCBlbmNvZGluZy4gVGhpcyBpcyBtb3N0bHlcbiAqIHVzZWQgYnkgb3RoZXIgdHlwZXMgdG8gYWRkIGxlbmd0aC1wcmVmaXhlZCBlbmNvZGluZywgb3IgaW4gdGhlIGNhc2Ugb2Ygd3JhcHBlZCB0eXBlcywgdGFraW5nXG4gKiBhIG51bWJlciBhbmQgbWFraW5nIHRoZSBjb21wYWN0IHJlcHJlc2VudGF0aW9uIHRoZXJlb2ZcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBhY3Qge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19UeXBlO1xuICAgIF9faW50ZXJuYWxfX3JhdztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUgPSAwLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gPSBpZGVudGl0eSB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX1R5cGUgPSBkZWZpbml0aW9uIHx8IHNldERlZmluaXRpb24odHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIFR5cGUpKTtcbiAgICAgICAgY29uc3QgW3JhdywgZGVjb2RlZExlbmd0aF0gPSBkZWNvZGVDb21wYWN0KHJlZ2lzdHJ5LCB0aGlzLl9faW50ZXJuYWxfX1R5cGUsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gZGVjb2RlZExlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yYXcgPSByYXc7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGUpIHtcbiAgICAgICAgbGV0IGRlZmluaXRpb247XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgICAgIGNvbnN0IHNldERlZmluaXRpb24gPSAoZCkgPT4gKGRlZmluaXRpb24gPSBkKTtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29tcGFjdCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9VOGEoKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcuaXNFbXB0eTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIGJpdExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LmJpdExlbmd0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy5lcShvdGhlciBpbnN0YW5jZW9mIENvbXBhY3RcbiAgICAgICAgICAgID8gb3RoZXIuX19pbnRlcm5hbF9fcmF3XG4gICAgICAgICAgICA6IG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdXRlcjogW3RoaXMudG9VOGEoKV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBCaWdJbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlclxuICAgICAqL1xuICAgIHRvQmlnSW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9CaWdJbnQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIEJOIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXJcbiAgICAgKi9cbiAgICB0b0JuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9CbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLiBpc0xlIHJldHVybnMgYSBMRSAobnVtYmVyLW9ubHkpIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgdG9IZXgoaXNMZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9IZXgoaXNMZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9OdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b051bWJlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYENvbXBhY3Q8JHt0aGlzLnJlZ2lzdHJ5LmdldENsYXNzTmFtZSh0aGlzLl9faW50ZXJuYWxfX1R5cGUpIHx8IHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvUmF3VHlwZSgpfT5gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gY29tcGFjdFRvVThhKHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvQm4oKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBlbWJlZGRlZCBbW1VJbnRdXSBvciBbW01vbWVudF1dIHZhbHVlXG4gICAgICovXG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXc7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBAbmFtZSBEb05vdENvbnN0cnVjdFxuICogQGRlc2NyaXB0aW9uXG4gKiBBbiB1bmtub3duIHR5cGUgdGhhdCBmYWlscyBvbiBjb25zdHJ1Y3Rpb24gd2l0aCB0aGUgdHlwZSBpbmZvXG4gKi9cbmV4cG9ydCBjbGFzcyBEb05vdENvbnN0cnVjdCB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19uZXZlckVycm9yO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB0eXBlTmFtZSA9ICdEb05vdENvbnN0cnVjdCcpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3IgPSBuZXcgRXJyb3IoYERvTm90Q29uc3RydWN0OiBDYW5ub3QgY29uc3RydWN0IHVua25vd24gdHlwZSAke3R5cGVOYW1lfWApO1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKHR5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIERvTm90Q29uc3RydWN0IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIHR5cGVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5fX2ludGVybmFsX19uZXZlckVycm9yO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWUgKGFsd2F5cyB0cnVlKVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkXG4gICAgICovXG4gICAgZXEoKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWRcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWRcbiAgICAgKi9cbiAgICB0b0h1bWFuKCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkXG4gICAgICovXG4gICAgdG9QcmltaXRpdmUoKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWRcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWRcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5fX2ludGVybmFsX19uZXZlckVycm9yO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVW5pbXBsZW1lbnRlZFxuICAgICAqL1xuICAgIHRvVThhKCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaWRlbnRpdHksIGlzSGV4LCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1U4YSwgb2JqZWN0UHJvcGVydGllcywgc3RyaW5nQ2FtZWxDYXNlLCBzdHJpbmdpZnksIHN0cmluZ1Bhc2NhbENhc2UsIHU4YUNvbmNhdFN0cmljdCwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWFwVG9UeXBlTWFwLCB0eXBlc1RvTWFwIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IHsgTnVsbCB9IGZyb20gJy4vTnVsbC5qcyc7XG5mdW5jdGlvbiBpc1J1c3RFbnVtKGRlZikge1xuICAgIGNvbnN0IGRlZlZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZGVmKTtcbiAgICBpZiAoZGVmVmFsdWVzLnNvbWUoKHYpID0+IGlzTnVtYmVyKHYpKSkge1xuICAgICAgICBpZiAoIWRlZlZhbHVlcy5ldmVyeSgodikgPT4gaXNOdW1iZXIodikgJiYgdiA+PSAwICYmIHYgPD0gMjU1KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG51bWJlci1pbmRleGVkIGVudW0gZGVmaW5pdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBleHRyYWN0RGVmKHJlZ2lzdHJ5LCBfZGVmKSB7XG4gICAgY29uc3QgZGVmID0ge307XG4gICAgbGV0IGlzQmFzaWM7XG4gICAgbGV0IGlzSW5kZXhlZDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShfZGVmKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBfZGVmLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGRlZltfZGVmW2ldXSA9IHsgVHlwZTogTnVsbCwgaW5kZXg6IGkgfTtcbiAgICAgICAgfVxuICAgICAgICBpc0Jhc2ljID0gdHJ1ZTtcbiAgICAgICAgaXNJbmRleGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUnVzdEVudW0oX2RlZikpIHtcbiAgICAgICAgY29uc3QgW1R5cGVzLCBrZXlzXSA9IG1hcFRvVHlwZU1hcChyZWdpc3RyeSwgX2RlZik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGtleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgZGVmW2tleXNbaV1dID0geyBUeXBlOiBUeXBlc1tpXSwgaW5kZXg6IGkgfTtcbiAgICAgICAgfVxuICAgICAgICBpc0Jhc2ljID0gIU9iamVjdC52YWx1ZXMoZGVmKS5zb21lKCh7IFR5cGUgfSkgPT4gVHlwZSAhPT0gTnVsbCk7XG4gICAgICAgIGlzSW5kZXhlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKF9kZWYpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBlbnRyaWVzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIGluZGV4XSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBkZWZba2V5XSA9IHsgVHlwZTogTnVsbCwgaW5kZXggfTtcbiAgICAgICAgfVxuICAgICAgICBpc0Jhc2ljID0gdHJ1ZTtcbiAgICAgICAgaXNJbmRleGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVmLFxuICAgICAgICBpc0Jhc2ljLFxuICAgICAgICBpc0luZGV4ZWRcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0RW50cnlUeXBlKGRlZiwgY2hlY2tJZHgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKGRlZik7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdmFsdWVzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBUeXBlLCBpbmRleCB9ID0gdmFsdWVzW2ldO1xuICAgICAgICBpZiAoaW5kZXggPT09IGNoZWNrSWR4KSB7XG4gICAgICAgICAgICByZXR1cm4gVHlwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjcmVhdGUgRW51bSB2aWEgaW5kZXggJHtjaGVja0lkeH0sIGluICR7T2JqZWN0LmtleXMoZGVmKS5qb2luKCcsICcpfWApO1xufVxuZnVuY3Rpb24gY3JlYXRlRnJvbVU4YShyZWdpc3RyeSwgZGVmLCBpbmRleCwgdmFsdWUpIHtcbiAgICBjb25zdCBUeXBlID0gZ2V0RW50cnlUeXBlKGRlZiwgaW5kZXgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICB2YWx1ZTogbmV3IFR5cGUocmVnaXN0cnksIHZhbHVlKVxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVGcm9tVmFsdWUocmVnaXN0cnksIGRlZiwgaW5kZXggPSAwLCB2YWx1ZSkge1xuICAgIGNvbnN0IFR5cGUgPSBnZXRFbnRyeVR5cGUoZGVmLCBpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSBpbnN0YW5jZW9mIFR5cGVcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbmV3IFR5cGUocmVnaXN0cnksIHZhbHVlKVxuICAgIH07XG59XG5mdW5jdGlvbiBkZWNvZGVGcm9tSlNPTihyZWdpc3RyeSwgZGVmLCBrZXksIHZhbHVlKSB7XG4gICAgLy8gSlNPTiBjb21lcyBpbiB0aGUgZm9ybSBvZiB7IFwiPHR5cGUgKGNhbWVsQ2FzZSk+XCI6IFwiPHZhbHVlIGZvciB0eXBlPlwiIH0sIGhlcmUgd2VcbiAgICAvLyBhZGRpdGlvbmFsbHkgZm9yY2UgdG8gbG93ZXIgdG8gZW5zdXJlIGZvcndhcmQgY29tcGF0XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZikubWFwKChrKSA9PiBrLnRvTG93ZXJDYXNlKCkpO1xuICAgIGNvbnN0IGtleUxvd2VyID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgaW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5TG93ZXIpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbWFwIEVudW0gSlNPTiwgdW5hYmxlIHRvIGZpbmQgJyR7a2V5fScgaW4gJHtrZXlzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tVmFsdWUocmVnaXN0cnksIGRlZiwgT2JqZWN0LnZhbHVlcyhkZWYpW2luZGV4XS5pbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnVtKCR7a2V5fSk6OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjb2RlRW51bShyZWdpc3RyeSwgZGVmLCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAvLyBOT1RFIFdlIGNoZWNrIHRoZSBpbmRleCBwYXRoIGZpcnN0LCBiZWZvcmUgbG9va2luZyBhdCB2YWx1ZXMgLSB0aGlzIGFsbG93cyB0cmVhdGluZ1xuICAgIC8vIHRoZSBvcHRpb25hbCBpbmRleGVzIGJlZm9yZSBhbnl0aGluZyBlbHNlLCBtb3JlLXNwZWNpZmljID4gbGVzcy1zcGVjaWZpY1xuICAgIGlmIChpc051bWJlcihpbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21WYWx1ZShyZWdpc3RyeSwgZGVmLCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1U4YSh2YWx1ZSkgfHwgaXNIZXgodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHU4YSA9IHU4YVRvVThhKHZhbHVlKTtcbiAgICAgICAgLy8gbmVzdGVkLCB3ZSBkb24ndCB3YW50IHRvIG1hdGNoIGlzT2JqZWN0IGJlbG93XG4gICAgICAgIGlmICh1OGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRnJvbVU4YShyZWdpc3RyeSwgZGVmLCB1OGFbMF0sIHU4YS5zdWJhcnJheSgxKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBFbnVtKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tVmFsdWUocmVnaXN0cnksIGRlZiwgdmFsdWUuaW5kZXgsIHZhbHVlLnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tVmFsdWUocmVnaXN0cnksIGRlZiwgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZUZyb21KU09OKHJlZ2lzdHJ5LCBkZWYsIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXModmFsdWUpWzBdO1xuICAgICAgICByZXR1cm4gZGVjb2RlRnJvbUpTT04ocmVnaXN0cnksIGRlZiwga2V5LCB2YWx1ZVtrZXldKTtcbiAgICB9XG4gICAgLy8gV29yc3QtY2FzZSBzY2VuYXJpbywgcmV0dXJuIHRoZSBmaXJzdCB3aXRoIGRlZmF1bHRcbiAgICByZXR1cm4gY3JlYXRlRnJvbVZhbHVlKHJlZ2lzdHJ5LCBkZWYsIE9iamVjdC52YWx1ZXMoZGVmKVswXS5pbmRleCk7XG59XG4vKipcbiAqIEBuYW1lIEVudW1cbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBpbXBsZW1lbnRzIGFuIGVudW0sIHRoYXQgYmFzZWQgb24gdGhlIHZhbHVlIHdyYXBzIGEgZGlmZmVyZW50IHR5cGUuIEl0IGlzIGVmZmVjdGl2ZWx5XG4gKiBhbiBleHRlbnNpb24gdG8gZW51bSB3aGVyZSB0aGUgdmFsdWUgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3R1YWwgaW5kZXguXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnVtIHtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGg7XG4gICAgaXNTdG9yYWdlRmFsbGJhY2s7XG4gICAgX19pbnRlcm5hbF9fZGVmO1xuICAgIF9faW50ZXJuYWxfX2VudHJ5SW5kZXg7XG4gICAgX19pbnRlcm5hbF9faW5kZXhlcztcbiAgICBfX2ludGVybmFsX19pc0Jhc2ljO1xuICAgIF9faW50ZXJuYWxfX2lzSW5kZXhlZDtcbiAgICBfX2ludGVybmFsX19yYXc7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIFR5cGVzLCB2YWx1ZSwgaW5kZXgsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiA9IGlkZW50aXR5IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB7IGRlZiwgaXNCYXNpYywgaXNJbmRleGVkIH0gPSBkZWZpbml0aW9uIHx8IHNldERlZmluaXRpb24oZXh0cmFjdERlZihyZWdpc3RyeSwgVHlwZXMpKTtcbiAgICAgICAgLy8gc2hvcnRjdXQgaXNVOGEgYXMgdXNlZCBpbiBTQ0FMRSBkZWNvZGluZ1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gaXNVOGEodmFsdWUpICYmIHZhbHVlLmxlbmd0aCAmJiAhaXNOdW1iZXIoaW5kZXgpXG4gICAgICAgICAgICA/IGNyZWF0ZUZyb21VOGEocmVnaXN0cnksIGRlZiwgdmFsdWVbMF0sIHZhbHVlLnN1YmFycmF5KDEpKVxuICAgICAgICAgICAgOiBkZWNvZGVFbnVtKHJlZ2lzdHJ5LCBkZWYsIHZhbHVlLCBpbmRleCk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19kZWYgPSBkZWY7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faXNCYXNpYyA9IGlzQmFzaWM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faXNJbmRleGVkID0gaXNJbmRleGVkO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2luZGV4ZXMgPSBPYmplY3QudmFsdWVzKGRlZikubWFwKCh7IGluZGV4IH0pID0+IGluZGV4KTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbnRyeUluZGV4ID0gdGhpcy5fX2ludGVybmFsX19pbmRleGVzLmluZGV4T2YoZGVjb2RlZC5pbmRleCk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmF3ID0gZGVjb2RlZC52YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fcmF3LmluaXRpYWxVOGFMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFU4YUxlbmd0aCA9IDEgKyB0aGlzLl9faW50ZXJuYWxfX3Jhdy5pbml0aWFsVThhTGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGVzKSB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmV0dXJuLWFzc2lnblxuICAgICAgICBjb25zdCBzZXREZWZpbml0aW9uID0gKGQpID0+IGRlZmluaXRpb24gPSBkO1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBFbnVtIHtcbiAgICAgICAgICAgIHN0YXRpYyB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IEFycmF5LmlzQXJyYXkoVHlwZXMpXG4gICAgICAgICAgICAgICAgICAgID8gVHlwZXNcbiAgICAgICAgICAgICAgICAgICAgOiBPYmplY3Qua2V5cyhUeXBlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBhc0tleXMgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzS2V5cyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBzdHJpbmdQYXNjYWxDYXNlKGtleXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICBhc0tleXNbaV0gPSBgYXMke25hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgaXNLZXlzW2ldID0gYGlzJHtuYW1lfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iamVjdFByb3BlcnRpZXModGhpcy5wcm90b3R5cGUsIGlzS2V5cywgKF8sIGksIHNlbGYpID0+IHNlbGYudHlwZSA9PT0ga2V5c1tpXSk7XG4gICAgICAgICAgICAgICAgb2JqZWN0UHJvcGVydGllcyh0aGlzLnByb3RvdHlwZSwgYXNLZXlzLCAoaywgaSwgc2VsZikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi50eXBlICE9PSBrZXlzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0ICcke3NlbGYudHlwZX0nIHZpYSAke2t9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIFR5cGVzLCB2YWx1ZSwgaW5kZXgsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIDEgKyB0aGlzLl9faW50ZXJuYWxfX3Jhdy5lbmNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Lmhhc2godGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmRleCBvZiB0aGUgZW51bSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faW5kZXhlc1t0aGlzLl9faW50ZXJuYWxfX2VudHJ5SW5kZXhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHZhbHVlIG9mIHRoZSBlbnVtXG4gICAgICovXG4gICAgZ2V0IGlubmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiB0cnVlIGlmIHRoaXMgaXMgYSBiYXNpYyBlbnVtIChubyB2YWx1ZXMpXG4gICAgICovXG4gICAgZ2V0IGlzQmFzaWMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2lzQmFzaWM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy5pc0VtcHR5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSBFbnVtIHBvaW50cyB0byBhIFtbTnVsbF1dIHR5cGVcbiAgICAgKi9cbiAgICBnZXQgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcgaW5zdGFuY2VvZiBOdWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGF2YWlsYWJsZSBrZXlzIGZvciB0aGlzIGVudW1cbiAgICAgKi9cbiAgICBnZXQgZGVmSW5kZXhlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faW5kZXhlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhdmFpbGFibGUga2V5cyBmb3IgdGhpcyBlbnVtXG4gICAgICovXG4gICAgZ2V0IGRlZktleXMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9faW50ZXJuYWxfX2RlZik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGlzIGVudW0gdmFsdWUgcmVwcmVzZW50c1xuICAgICAqL1xuICAgIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZLZXlzW3RoaXMuX19pbnRlcm5hbF9fZW50cnlJbmRleF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdmFsdWUgb2YgdGhlIGVudW1cbiAgICAgKi9cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICAvLyBjYXRlciBmb3IgdGhlIGNhc2Ugd2hlcmUgd2Ugb25seSBwYXNzIHRoZSBlbnVtIGluZGV4XG4gICAgICAgIGlmIChpc1U4YShvdGhlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy50b1U4YSgpLnNvbWUoKGVudHJ5LCBpbmRleCkgPT4gZW50cnkgIT09IG90aGVyW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIob3RoZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b051bWJlcigpID09PSBvdGhlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9faW50ZXJuYWxfX2lzQmFzaWMgJiYgaXNTdHJpbmcob3RoZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBvdGhlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0hleChvdGhlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvSGV4KCkgPT09IG90aGVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG90aGVyIGluc3RhbmNlb2YgRW51bSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IG90aGVyLmluZGV4ICYmIHRoaXMudmFsdWUuZXEob3RoZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KG90aGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuZXEob3RoZXJbdGhpcy50eXBlXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29tcGFyZSB0aGUgYWN0dWFsIHdyYXBwZXIgdmFsdWVcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuZXEob3RoZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9faXNCYXNpYykge1xuICAgICAgICAgICAgcmV0dXJuIHsgb3V0ZXI6IFtuZXcgVWludDhBcnJheShbdGhpcy5pbmRleF0pXSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgaW5uZXIsIG91dGVyID0gW10gfSA9IHRoaXMuX19pbnRlcm5hbF9fcmF3Lmluc3BlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlubmVyLFxuICAgICAgICAgICAgb3V0ZXI6IFtuZXcgVWludDhBcnJheShbdGhpcy5pbmRleF0pLCAuLi5vdXRlcl1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KCkge1xuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19pc0Jhc2ljIHx8IHRoaXMuaXNOb25lXG4gICAgICAgICAgICA/IHRoaXMudHlwZVxuICAgICAgICAgICAgOiB7IFt0aGlzLnR5cGVdOiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2lzQmFzaWNcbiAgICAgICAgICAgID8gdGhpcy50eXBlXG4gICAgICAgICAgICA6IHsgW3N0cmluZ0NhbWVsQ2FzZSh0aGlzLnR5cGUpXTogdGhpcy5fX2ludGVybmFsX19yYXcudG9KU09OKCkgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9OdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNCYXNpY1xuICAgICAgICAgICAgPyB0aGlzLnR5cGVcbiAgICAgICAgICAgIDogeyBbc3RyaW5nQ2FtZWxDYXNlKHRoaXMudHlwZSldOiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgcmF3IHN0cnVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZW51bSB0eXBlc1xuICAgICAqL1xuICAgIF90b1Jhd1N0cnVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9faXNCYXNpYykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNJbmRleGVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmRlZktleXMucmVkdWNlKChvdXQsIGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0W2tleV0gPSB0aGlzLl9faW50ZXJuYWxfX2luZGV4ZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICAgICAgICAgIDogdGhpcy5kZWZLZXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9faW50ZXJuYWxfX2RlZik7XG4gICAgICAgIHJldHVybiB0eXBlc1RvTWFwKHRoaXMucmVnaXN0cnksIGVudHJpZXMucmVkdWNlKChvdXQsIFtrZXksIHsgVHlwZSB9XSwgaSkgPT4ge1xuICAgICAgICAgICAgb3V0WzBdW2ldID0gVHlwZTtcbiAgICAgICAgICAgIG91dFsxXVtpXSA9IGtleTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH0sIFtuZXcgQXJyYXkoZW50cmllcy5sZW5ndGgpLCBuZXcgQXJyYXkoZW50cmllcy5sZW5ndGgpXSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeSh7IF9lbnVtOiB0aGlzLl90b1Jhd1N0cnVjdCgpIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc05vbmVcbiAgICAgICAgICAgID8gdGhpcy50eXBlXG4gICAgICAgICAgICA6IHN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgcmV0dXJuIGlzQmFyZVxuICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1U4YShpc0JhcmUpXG4gICAgICAgICAgICA6IHU4YUNvbmNhdFN0cmljdChbXG4gICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoW3RoaXMuaW5kZXhdKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1U4YShpc0JhcmUpXG4gICAgICAgICAgICBdKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEludCB9IGZyb20gJy4uL2Fic3RyYWN0L0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIEludFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIGdlbmVyaWMgc2lnbmVkIGludGVnZXIgY29kZWMuIEZvciBTdWJzdHJhdGUgYWxsIG51bWJlcnMgYXJlIExpdHRsZSBFbmRpYW4gZW5jb2RlZCxcbiAqIHRoaXMgaGFuZGxlcyB0aGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHRob3NlIG51bWJlcnMuIFVwb24gY29uc3RydWN0aW9uXG4gKiB0aGUgYml0TGVuZ3RoIGlzIHByb3ZpZGVkIGFuZCBhbnkgYWRkaXRpb25hbCB1c2Uga2VlcHMgdGhlIG51bWJlciB0byB0aGlzXG4gKiBsZW5ndGguIFRoaXMgZXh0ZW5kcyBgQk5gLCBzbyBhbGwgbWV0aG9kcyBhdmFpbGFibGUgb24gYSBub3JtYWwgYEJOYCBvYmplY3RcbiAqIGlzIGF2YWlsYWJsZSBoZXJlLlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgSW50IGV4dGVuZHMgQWJzdHJhY3RJbnQge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSA9IDAsIGJpdExlbmd0aCkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgdmFsdWUsIGJpdExlbmd0aCwgdHJ1ZSk7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKGJpdExlbmd0aCwgdHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgSW50IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSwgYml0TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZU5hbWUgfHwgc3VwZXIudG9SYXdUeXBlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNOdWxsIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqXG4gKiBAbmFtZSBOdWxsXG4gKiBAZGVzY3JpcHRpb25cbiAqIEltcGxlbWVudHMgYSB0eXBlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnl0aGluZyAoYXBhcnQgZnJvbSBgbnVsbGApXG4gKi9cbmV4cG9ydCBjbGFzcyBOdWxsIHtcbiAgICBlbmNvZGVkTGVuZ3RoID0gMDtcbiAgICBpc0VtcHR5ID0gdHJ1ZTtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGggPSAwO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5KSB7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy5oYXNoIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBOdWxsJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgTnVsbCB8fCBpc051bGwob3RoZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiAnMHgnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgaXNDb2RlYywgaXNOdWxsLCBpc1U4YSwgaXNVbmRlZmluZWQsIHU4YVRvSGV4IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgdHlwZVRvQ29uc3RydWN0b3IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBOdWxsIH0gZnJvbSAnLi9OdWxsLmpzJztcbmNsYXNzIE5vbmUgZXh0ZW5kcyBOdWxsIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdOb25lJztcbiAgICB9XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVPcHRpb24ocmVnaXN0cnksIFR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgICAvLyBkb24ndCByZS1jcmVhdGUsIHVzZSBhcyBpdCAod2hpY2ggYWxzbyBjYXRlcnMgZm9yIGRlcml2ZWQgdHlwZXMpXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgICAgaWYgKHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgICAgICAgLy8gc2FtZSBpbnN0YW5jZSwgcmV0dXJuIGl0XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNOb25lKSB7XG4gICAgICAgICAgICAvLyBpbnRlcm5hbCBpcyBOb25lLCB3ZSBhcmUgYWxzbyBub25lXG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vbmUocmVnaXN0cnkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnZlcnQgdGhlIGFjdHVhbCB2YWx1ZSBpbnRvIGtub3duXG4gICAgICAgIHJldHVybiBuZXcgVHlwZShyZWdpc3RyeSwgdmFsdWUudmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc051bGwodmFsdWUpIHx8IGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJzB4JyB8fCB2YWx1ZSBpbnN0YW5jZW9mIE5vbmUpIHtcbiAgICAgICAgLy8gYW55dGhpbmcgZW1wdHkgd2UgcGFzcyBhcy1pc1xuICAgICAgICByZXR1cm4gbmV3IE5vbmUocmVnaXN0cnkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gdGhlIGlzVThhIGNoZWNrIGhhcHBlbnMgbGFzdCBpbiB0aGUgaWYtdHJlZSAtIHNpbmNlIHRoZSB3cmFwcGVkIHZhbHVlXG4gICAgICAgIC8vIG1heSBiZSBhbiBpbnN0YW5jZSBvZiBpdCwgc28gVHlwZSBhbmQgT3B0aW9uIGNoZWNrcyBnbyBpbiBmaXJzdFxuICAgICAgICByZXR1cm4gIXZhbHVlLmxlbmd0aCB8fCB2YWx1ZVswXSA9PT0gMFxuICAgICAgICAgICAgPyBuZXcgTm9uZShyZWdpc3RyeSlcbiAgICAgICAgICAgIDogbmV3IFR5cGUocmVnaXN0cnksIHZhbHVlLnN1YmFycmF5KDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUeXBlKHJlZ2lzdHJ5LCB2YWx1ZSk7XG59XG4vKipcbiAqIEBuYW1lIE9wdGlvblxuICogQGRlc2NyaXB0aW9uXG4gKiBBbiBPcHRpb24gaXMgYW4gb3B0aW9uYWwgZmllbGQuIEJhc2ljYWxseSB0aGUgZmlyc3QgYnl0ZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpc1xuICogaXMgdmFsdWUgdG8gZm9sbG93LiBJZiB0aGUgYnl0ZSBpcyBgMWAgdGhlcmUgaXMgYW4gYWN0dWFsIHZhbHVlLiBTbyB0aGUgT3B0aW9uXG4gKiBpbXBsZW1lbnRzIHRoYXQgLSBkZWNvZGVzLCBjaGVja3MgZm9yIG9wdGlvbmFsaXR5IGFuZCB3cmFwcyB0aGUgcmVxdWlyZWQgc3RydWN0dXJlXG4gKiB3aXRoIGEgdmFsdWUgaWYvYXMgcmVxdWlyZWQvZm91bmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBPcHRpb24ge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19UeXBlO1xuICAgIF9faW50ZXJuYWxfX3JhdztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdHlwZU5hbWUsIHZhbHVlLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gPSBpZGVudGl0eSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgVHlwZSA9IGRlZmluaXRpb24gfHwgc2V0RGVmaW5pdGlvbih0eXBlVG9Db25zdHJ1Y3RvcihyZWdpc3RyeSwgdHlwZU5hbWUpKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGlzVThhKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggJiYgIWlzQ29kZWModmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlWzBdID09PSAwXG4gICAgICAgICAgICAgICAgPyBuZXcgTm9uZShyZWdpc3RyeSlcbiAgICAgICAgICAgICAgICA6IG5ldyBUeXBlKHJlZ2lzdHJ5LCB2YWx1ZS5zdWJhcnJheSgxKSlcbiAgICAgICAgICAgIDogZGVjb2RlT3B0aW9uKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19UeXBlID0gVHlwZTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yYXcgPSBkZWNvZGVkO1xuICAgICAgICBpZiAoZGVjb2RlZD8uaW5pdGlhbFU4YUxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gMSArIGRlY29kZWQuaW5pdGlhbFU4YUxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgd2l0aChUeXBlKSB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uO1xuICAgICAgICBjb25zdCBzZXREZWZpbml0aW9uID0gKGQpID0+IHtcbiAgICAgICAgICAgIGRlZmluaXRpb24gPSBkO1xuICAgICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIE9wdGlvbiB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgLy8gYm9vbGVhbiBieXRlIChoYXMgdmFsdWUsIGRvZXNuJ3QgaGF2ZSkgYWxvbmcgd2l0aCB3cmFwcGVkIGxlbmd0aFxuICAgICAgICByZXR1cm4gMSArIHRoaXMuX19pbnRlcm5hbF9fcmF3LmVuY29kZWRMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSBPcHRpb24gaGFzIG5vIHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTm9uZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgT3B0aW9uIGhhcyBubyB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc05vbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdyBpbnN0YW5jZW9mIE5vbmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIE9wdGlvbiBoYXMgYSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc1NvbWUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc05vbmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0dWFsIHZhbHVlIGZvciB0aGUgT3B0aW9uXG4gICAgICovXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuaXNTb21lID09PSBvdGhlci5pc1NvbWUpICYmIHRoaXMudmFsdWUuZXEob3RoZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmVxKG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgb3V0ZXI6IFtuZXcgVWludDhBcnJheShbMF0pXSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgaW5uZXIsIG91dGVyID0gW10gfSA9IHRoaXMuX19pbnRlcm5hbF9fcmF3Lmluc3BlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlubmVyLFxuICAgICAgICAgICAgb3V0ZXI6IFtuZXcgVWludDhBcnJheShbMV0pLCAuLi5vdXRlcl1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KCkge1xuICAgICAgICAvLyBUaGlzIGF0dGVtcHRzIHRvIGFsaWduIHdpdGggdGhlIEpTT04gZW5jb2RpbmcgLSBhY3R1YWxseSBpbiB0aGlzIGNhc2VcbiAgICAgICAgLy8gdGhlIGlzU29tZSB2YWx1ZSBpcyBjb3JyZWN0LCBob3dldmVyIHRoZSBgaXNOb25lYCBtYXkgYmUgcHJvYmxlbWF0aWNcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNOb25lXG4gICAgICAgICAgICA/ICcweCdcbiAgICAgICAgICAgIDogdThhVG9IZXgodGhpcy50b1U4YSgpLnN1YmFycmF5KDEpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNOb25lXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogdGhpcy5fX2ludGVybmFsX19yYXcudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc05vbmVcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZShpc0JhcmUpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IHRoaXMucmVnaXN0cnkuZ2V0Q2xhc3NOYW1lKHRoaXMuX19pbnRlcm5hbF9fVHlwZSkgfHwgbmV3IHRoaXMuX19pbnRlcm5hbF9fVHlwZSh0aGlzLnJlZ2lzdHJ5KS50b1Jhd1R5cGUoKTtcbiAgICAgICAgcmV0dXJuIGlzQmFyZVxuICAgICAgICAgICAgPyB3cmFwcGVkXG4gICAgICAgICAgICA6IGBPcHRpb248JHt3cmFwcGVkfT5gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgaWYgKGlzQmFyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvVThhKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHU4YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuZW5jb2RlZExlbmd0aCk7XG4gICAgICAgIGlmICh0aGlzLmlzU29tZSkge1xuICAgICAgICAgICAgdThhLnNldChbMV0pO1xuICAgICAgICAgICAgdThhLnNldCh0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1U4YSgpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdThhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB0aGUgT3B0aW9uIHJlcHJlc2VudHMgKGlmIGF2YWlsYWJsZSksIHRocm93cyBpZiBudWxsXG4gICAgICovXG4gICAgdW53cmFwKCkge1xuICAgICAgICBpZiAodGhpcy5pc05vbmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3B0aW9uOiB1bndyYXBwaW5nIGEgTm9uZSB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgdGhlIE9wdGlvbiByZXByZXNlbnRzIChpZiBhdmFpbGFibGUpIG9yIGRlZmF1bHRWYWx1ZSBpZiBub25lXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBvcHRpb24gaXNOb25lXG4gICAgICovXG4gICAgdW53cmFwT3IoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU29tZVxuICAgICAgICAgICAgPyB0aGlzLnVud3JhcCgpXG4gICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgdGhlIE9wdGlvbiByZXByZXNlbnRzIChpZiBhdmFpbGFibGUpIG9yIGRlZmF1bHRWYWx1ZSBpZiBub25lXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBvcHRpb24gaXNOb25lXG4gICAgICovXG4gICAgdW53cmFwT3JEZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NvbWVcbiAgICAgICAgICAgID8gdGhpcy51bndyYXAoKVxuICAgICAgICAgICAgOiBuZXcgdGhpcy5fX2ludGVybmFsX19UeXBlKHRoaXMucmVnaXN0cnkpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVudW0gfSBmcm9tICcuL0VudW0uanMnO1xuLyoqXG4gKiBAbmFtZSBSZXN1bHRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBSZXN1bHQgbWFwcyB0byB0aGUgUnVzdCBSZXN1bHQgdHlwZSwgdGhhdCBjYW4gZWl0aGVyIHdyYXAgYSBzdWNjZXNzIG9yIGVycm9yIHZhbHVlXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN1bHQgZXh0ZW5kcyBFbnVtIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgT2ssIEVyciwgdmFsdWUpIHtcbiAgICAgICAgLy8gTk9URSBUaGlzIGlzIG9yZGVyLWRlcGVuZGVudCwgT2sgKHdpdGggaW5kZXggMCkgbmVlZHMgdG8gYmUgZmlyc3RcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgeyBPaywgRXJyIH0sIHZhbHVlKTtcbiAgICB9XG4gICAgc3RhdGljIHdpdGgoVHlwZXMpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgUmVzdWx0IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlcy5PaywgVHlwZXMuRXJyLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVyIEVyciB2YWx1ZSAoaWYgaXNFcnIpXG4gICAgICovXG4gICAgZ2V0IGFzRXJyKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4dHJhY3QgRXJyIHZhbHVlIGZyb20gT2sgcmVzdWx0LCBjaGVjayBpc0VyciBmaXJzdCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlciBPayB2YWx1ZSAoaWYgaXNPaylcbiAgICAgKi9cbiAgICBnZXQgYXNPaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4dHJhY3QgT2sgdmFsdWUgZnJvbSBFcnIgcmVzdWx0LCBjaGVjayBpc09rIGZpcnN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIFJlc3VsdCBoYXMgbm8gdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPayAmJiB0aGlzLnZhbHVlLmlzRW1wdHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIFJlc3VsdCB3cmFwcyBhbiBFcnIgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFcnIoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSBSZXN1bHQgd3JhcHMgYW4gT2sgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNPaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICBjb25zdCBUeXBlcyA9IHRoaXMuX3RvUmF3U3RydWN0KCk7XG4gICAgICAgIHJldHVybiBgUmVzdWx0PCR7VHlwZXMuT2t9LCR7VHlwZXMuRXJyfT5gO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGlkZW50aXR5LCBpc0Z1bmN0aW9uLCBpc0hleCwgaXNTdHJpbmcsIGlzVThhLCBzdHJpbmdpZnksIHU4YUNvbmNhdFN0cmljdCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBBYnN0cmFjdEFycmF5IH0gZnJvbSAnLi4vYWJzdHJhY3QvQXJyYXkuanMnO1xuaW1wb3J0IHsgZGVjb2RlVThhLCBtYXBUb1R5cGVNYXAsIHR5cGVzVG9Db25zdHJ1Y3RvcnMsIHR5cGVUb0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlVHVwbGUocmVnaXN0cnksIHJlc3VsdCwgdmFsdWUsIENsYXNzZXMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgVHlwZXMgPSBDbGFzc2VzWzBdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBUeXBlcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdmFsdWU/LltpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBlbnRyeSBpbnN0YW5jZW9mIFR5cGVzW2ldXG4gICAgICAgICAgICAgICAgICAgID8gZW50cnlcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgVHlwZXNbaV0ocmVnaXN0cnksIGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHVwbGU6IGZhaWxlZCBvbiAke2l9OjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmVzdWx0LCAwXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNIZXgodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVOGEocmVnaXN0cnksIHJlc3VsdCwgdThhVG9VOGEodmFsdWUpLCBDbGFzc2VzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXZhbHVlIHx8ICFyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IFR5cGVzID0gQ2xhc3Nlc1swXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gVHlwZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0W2ldID0gbmV3IFR5cGVzW2ldKHJlZ2lzdHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3Jlc3VsdCwgMF07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkgaW5wdXQgdG8gVHVwbGUgZGVjb2RpbmcsIGZvdW5kICR7dHlwZW9mIHZhbHVlfTogJHtzdHJpbmdpZnkodmFsdWUpfWApO1xufVxuLyoqXG4gKiBAbmFtZSBUdXBsZVxuICogQGRlc2NyaXB0aW9uXG4gKiBBIFR1cGxlIGRlZmluZXMgYW4gYW5vbnltb3VzIGZpeGVkLWxlbmd0aCBhcnJheSwgd2hlcmUgZWFjaCBlbGVtZW50IGhhcyBpdHNcbiAqIG93biB0eXBlLiBJdCBleHRlbmRzIHRoZSBiYXNlIEpTIGBBcnJheWAgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgVHVwbGUgZXh0ZW5kcyBBYnN0cmFjdEFycmF5IHtcbiAgICBfX2ludGVybmFsX19UeXBlcztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZXMsIHZhbHVlLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gPSBpZGVudGl0eSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgQ2xhc3NlcyA9IGRlZmluaXRpb24gfHwgc2V0RGVmaW5pdGlvbihBcnJheS5pc0FycmF5KFR5cGVzKVxuICAgICAgICAgICAgPyBbdHlwZXNUb0NvbnN0cnVjdG9ycyhyZWdpc3RyeSwgVHlwZXMpLCBbXV1cbiAgICAgICAgICAgIDogaXNGdW5jdGlvbihUeXBlcykgfHwgaXNTdHJpbmcoVHlwZXMpXG4gICAgICAgICAgICAgICAgPyBbW3R5cGVUb0NvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBUeXBlcyldLCBbXV1cbiAgICAgICAgICAgICAgICA6IG1hcFRvVHlwZU1hcChyZWdpc3RyeSwgVHlwZXMpKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIENsYXNzZXNbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gKGlzVThhKHZhbHVlKVxuICAgICAgICAgICAgPyBkZWNvZGVVOGEocmVnaXN0cnksIHRoaXMsIHZhbHVlLCBDbGFzc2VzKVxuICAgICAgICAgICAgOiBkZWNvZGVUdXBsZShyZWdpc3RyeSwgdGhpcywgdmFsdWUsIENsYXNzZXMpKVsxXTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19UeXBlcyA9IENsYXNzZXM7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGVzKSB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmV0dXJuLWFzc2lnblxuICAgICAgICBjb25zdCBzZXREZWZpbml0aW9uID0gKGQpID0+IGRlZmluaXRpb24gPSBkO1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBUdXBsZSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZXMsIHZhbHVlLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHRoaXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdG90YWwgKz0gdGhpc1tpXS5lbmNvZGVkTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0eXBlcyBkZWZpbml0aW9uIG9mIHRoZSB0dXBsZVxuICAgICAqL1xuICAgIGdldCBUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fVHlwZXNbMV0ubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuX19pbnRlcm5hbF9fVHlwZXNbMV1cbiAgICAgICAgICAgIDogdGhpcy5fX2ludGVybmFsX19UeXBlc1swXS5tYXAoKFQpID0+IG5ldyBUKHRoaXMucmVnaXN0cnkpLnRvUmF3VHlwZSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbm5lcjogdGhpcy5pbnNwZWN0SW5uZXIoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgY29uc3QgdHlwZXMgPSB0aGlzLl9faW50ZXJuYWxfX1R5cGVzWzBdLm1hcCgoVCkgPT4gdGhpcy5yZWdpc3RyeS5nZXRDbGFzc05hbWUoVCkgfHwgbmV3IFQodGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCkpO1xuICAgICAgICByZXR1cm4gYCgke3R5cGVzLmpvaW4oJywnKX0pYDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgLy8gT3ZlcndyaXRlIHRoZSBkZWZhdWx0IHRvU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIEFycmF5LlxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICByZXR1cm4gdThhQ29uY2F0U3RyaWN0KHRoaXMudG9VOGFJbm5lcihpc0JhcmUpKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEludCB9IGZyb20gJy4uL2Fic3RyYWN0L0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIFVJbnRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBnZW5lcmljIHVuc2lnbmVkIGludGVnZXIgY29kZWMuIEZvciBTdWJzdHJhdGUgYWxsIG51bWJlcnMgYXJlIExpdHRsZSBFbmRpYW4gZW5jb2RlZCxcbiAqIHRoaXMgaGFuZGxlcyB0aGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHRob3NlIG51bWJlcnMuIFVwb24gY29uc3RydWN0aW9uXG4gKiB0aGUgYml0TGVuZ3RoIGlzIHByb3ZpZGVkIGFuZCBhbnkgYWRkaXRpb25hbCB1c2Uga2VlcHMgdGhlIG51bWJlciB0byB0aGlzXG4gKiBsZW5ndGguIFRoaXMgZXh0ZW5kcyBgQk5gLCBzbyBhbGwgbWV0aG9kcyBhdmFpbGFibGUgb24gYSBub3JtYWwgYEJOYCBvYmplY3RcbiAqIGlzIGF2YWlsYWJsZSBoZXJlLlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgVUludCBleHRlbmRzIEFic3RyYWN0SW50IHtcbiAgICBzdGF0aWMgd2l0aChiaXRMZW5ndGgsIHR5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIFVJbnQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlLCBiaXRMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9SYXdUeXBlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlTmFtZSB8fCBzdXBlci50b1Jhd1R5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0RnJvbVU4YUxpbSwgaWRlbnRpdHksIGlzSGV4LCBpc1U4YSwgbG9nZ2VyLCBzdHJpbmdpZnksIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcnJheSB9IGZyb20gJy4uL2Fic3RyYWN0L0FycmF5LmpzJztcbmltcG9ydCB7IGRlY29kZVU4YVZlYywgdHlwZVRvQ29uc3RydWN0b3IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCBNQVhfTEVOR1RIID0gNjQgKiAxMDI0O1xuY29uc3QgbCA9IGxvZ2dlcignVmVjJyk7XG5mdW5jdGlvbiBkZWNvZGVWZWNMZW5ndGgodmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFt2YWx1ZSwgdmFsdWUubGVuZ3RoLCAwXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSkge1xuICAgICAgICBjb25zdCB1OGEgPSB1OGFUb1U4YSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IFtzdGFydEF0LCBsZW5ndGhdID0gY29tcGFjdEZyb21VOGFMaW0odThhKTtcbiAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmVjIGxlbmd0aCAke2xlbmd0aC50b1N0cmluZygpfSBleGNlZWRzICR7TUFYX0xFTkdUSH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3U4YSwgbGVuZ3RoLCBzdGFydEF0XTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbbnVsbCwgMCwgMF07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkvaGV4IGlucHV0IHRvIFZlYzwqPiBkZWNvZGluZywgZm91bmQgJHt0eXBlb2YgdmFsdWV9OiAke3N0cmluZ2lmeSh2YWx1ZSl9YCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVmVjKHJlZ2lzdHJ5LCByZXN1bHQsIHZhbHVlLCBzdGFydEF0LCBUeXBlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAvLyAyNi8wOC8yMDIyIHRoaXMgaXMgYWN0dWFsbHkgYSBmYWxzZSBwb3NpdGl2ZSAtIGFmdGVyIHJlY2VudCBlc2xpbnQgdXBnZGF0ZXNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdmFsdWVbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGVudHJ5IGluc3RhbmNlb2YgVHlwZVxuICAgICAgICAgICAgICAgICAgICA/IGVudHJ5XG4gICAgICAgICAgICAgICAgICAgIDogbmV3IFR5cGUocmVnaXN0cnksIGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGwuZXJyb3IoYFVuYWJsZSB0byBkZWNvZGUgb24gaW5kZXggJHtpfWAsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbMCwgMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gWzAsIDBdO1xuICAgIH1cbiAgICAvLyB3ZSBkb24ndCBuZWVkIG1vcmUgY2hlY2tzLCB3ZSBhbHJlYWR5IGxpbWl0ZWQgaXQgdmlhIHRoZSBsZW5ndGggZGVjb2RpbmdcbiAgICByZXR1cm4gZGVjb2RlVThhVmVjKHJlZ2lzdHJ5LCByZXN1bHQsIHU4YVRvVThhKHZhbHVlKSwgc3RhcnRBdCwgVHlwZSk7XG59XG4vKipcbiAqIEBuYW1lIFZlY1xuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIG1hbmFnZXMgY29kZWMgYXJyYXlzLiBJbnRlcm5hbGx5IGl0IGtlZXBzIHRyYWNrIG9mIHRoZSBsZW5ndGggKGFzIGRlY29kZWQpIGFuZCBhbGxvd3NcbiAqIGNvbnN0cnVjdGlvbiB3aXRoIHRoZSBwYXNzZWQgYFR5cGVgIGluIHRoZSBjb25zdHJ1Y3Rvci4gSXQgaXMgYW4gZXh0ZW5zaW9uIHRvIEFycmF5LCBwcm92aWRpbmdcbiAqIHNwZWNpZmljIGVuY29kaW5nL2RlY29kaW5nIG9uIHRvcCBvZiB0aGUgYmFzZSB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgVmVjIGV4dGVuZHMgQWJzdHJhY3RBcnJheSB7XG4gICAgX19pbnRlcm5hbF9fVHlwZTtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUgPSBbXSwgeyBkZWZpbml0aW9uLCBzZXREZWZpbml0aW9uID0gaWRlbnRpdHkgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IFtkZWNvZGVGcm9tLCBsZW5ndGgsIHN0YXJ0QXRdID0gZGVjb2RlVmVjTGVuZ3RoKHZhbHVlKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGxlbmd0aCk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fVHlwZSA9IGRlZmluaXRpb24gfHwgc2V0RGVmaW5pdGlvbih0eXBlVG9Db25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSkpO1xuICAgICAgICB0aGlzLmluaXRpYWxVOGFMZW5ndGggPSAoaXNVOGEoZGVjb2RlRnJvbSlcbiAgICAgICAgICAgID8gZGVjb2RlVThhVmVjKHJlZ2lzdHJ5LCB0aGlzLCBkZWNvZGVGcm9tLCBzdGFydEF0LCB0aGlzLl9faW50ZXJuYWxfX1R5cGUpXG4gICAgICAgICAgICA6IGRlY29kZVZlYyhyZWdpc3RyeSwgdGhpcywgZGVjb2RlRnJvbSwgc3RhcnRBdCwgdGhpcy5fX2ludGVybmFsX19UeXBlKSlbMF07XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGUpIHtcbiAgICAgICAgbGV0IGRlZmluaXRpb247XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgICAgIGNvbnN0IHNldERlZmluaXRpb24gPSAoZCkgPT4gKGRlZmluaXRpb24gPSBkKTtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgVmVjIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSwgeyBkZWZpbml0aW9uLCBzZXREZWZpbml0aW9uIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHR5cGUgZm9yIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIGdldCBUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19UeXBlLm5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIGluIHRoZSBhcnJheVxuICAgICAqL1xuICAgIGluZGV4T2Yob3RoZXIpIHtcbiAgICAgICAgLy8gY29udmVydCB0eXBlIGZpcnN0LCB0aGlzIHJlbW92ZXMgb3ZlcmhlYWQgZnJvbSB0aGUgZXFcbiAgICAgICAgY29uc3QgY2hlY2sgPSBvdGhlciBpbnN0YW5jZW9mIHRoaXMuX19pbnRlcm5hbF9fVHlwZVxuICAgICAgICAgICAgPyBvdGhlclxuICAgICAgICAgICAgOiBuZXcgdGhpcy5fX2ludGVybmFsX19UeXBlKHRoaXMucmVnaXN0cnksIG90aGVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdGhpcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2suZXEodGhpc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYFZlYzwke3RoaXMucmVnaXN0cnkuZ2V0Q2xhc3NOYW1lKHRoaXMuX19pbnRlcm5hbF9fVHlwZSkgfHwgbmV3IHRoaXMuX19pbnRlcm5hbF9fVHlwZSh0aGlzLnJlZ2lzdHJ5KS50b1Jhd1R5cGUoKX0+YDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgaXNVOGEsIHU4YUNvbmNhdFN0cmljdCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IEFic3RyYWN0QXJyYXkgfSBmcm9tICcuLi9hYnN0cmFjdC9BcnJheS5qcyc7XG5pbXBvcnQgeyBkZWNvZGVVOGFWZWMsIHR5cGVUb0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVjb2RlVmVjIH0gZnJvbSAnLi9WZWMuanMnO1xuLyoqXG4gKiBAbmFtZSBWZWNGaXhlZFxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIG1hbmFnZXMgY29kZWMgYXJyYXlzIG9mIGEgZml4ZWQgbGVuZ3RoXG4gKi9cbmV4cG9ydCBjbGFzcyBWZWNGaXhlZCBleHRlbmRzIEFic3RyYWN0QXJyYXkge1xuICAgIF9faW50ZXJuYWxfX1R5cGU7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIFR5cGUsIGxlbmd0aCwgdmFsdWUgPSBbXSwgeyBkZWZpbml0aW9uLCBzZXREZWZpbml0aW9uID0gaWRlbnRpdHkgfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX1R5cGUgPSBkZWZpbml0aW9uIHx8IHNldERlZmluaXRpb24odHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIFR5cGUpKTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gKGlzVThhKHZhbHVlKVxuICAgICAgICAgICAgPyBkZWNvZGVVOGFWZWMocmVnaXN0cnksIHRoaXMsIHZhbHVlLCAwLCB0aGlzLl9faW50ZXJuYWxfX1R5cGUpXG4gICAgICAgICAgICA6IGRlY29kZVZlYyhyZWdpc3RyeSwgdGhpcywgdmFsdWUsIDAsIHRoaXMuX19pbnRlcm5hbF9fVHlwZSkpWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aChUeXBlLCBsZW5ndGgpIHtcbiAgICAgICAgbGV0IGRlZmluaXRpb247XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgICAgIGNvbnN0IHNldERlZmluaXRpb24gPSAoZCkgPT4gKGRlZmluaXRpb24gPSBkKTtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgVmVjRml4ZWQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIFR5cGUsIGxlbmd0aCwgdmFsdWUsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0eXBlIGZvciB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBnZXQgVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLl9faW50ZXJuYWxfX1R5cGUodGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHRoaXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdG90YWwgKz0gdGhpc1tpXS5lbmNvZGVkTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbm5lcjogdGhpcy5pbnNwZWN0SW5uZXIoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICB0b1U4YSgpIHtcbiAgICAgICAgLy8gd2Ugb3ZlcnJpZGUsIHdlIGRvbid0IGFkZCB0aGUgbGVuZ3RoIHByZWZpeCBmb3Igb3Vyc2VsdmVzLCBhbmQgYXQgdGhlIHNhbWUgdGltZSB3ZVxuICAgICAgICAvLyBpZ25vcmUgaXNCYXJlIG9uIGVudHJpZXMsIHNpbmNlIHRoZXkgc2hvdWxkIGJlIHByb3Blcmx5IGVuY29kZWQgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSB0aGlzLnRvVThhSW5uZXIoKTtcbiAgICAgICAgcmV0dXJuIGVuY29kZWQubGVuZ3RoXG4gICAgICAgICAgICA/IHU4YUNvbmNhdFN0cmljdChlbmNvZGVkKVxuICAgICAgICAgICAgOiBuZXcgVWludDhBcnJheShbXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYFske3RoaXMuVHlwZX07JHt0aGlzLmxlbmd0aH1dYDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBDb2RlY01hcCB9IGZyb20gJy4vTWFwLmpzJztcbmV4cG9ydCBjbGFzcyBCVHJlZU1hcCBleHRlbmRzIENvZGVjTWFwIHtcbiAgICBzdGF0aWMgd2l0aChrZXlUeXBlLCB2YWxUeXBlKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEJUcmVlTWFwIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBrZXlUeXBlLCB2YWxUeXBlLCB2YWx1ZSwgJ0JUcmVlTWFwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgY29tcGFjdEZyb21VOGFMaW0sIGNvbXBhY3RUb1U4YSwgaXNIZXgsIGlzVThhLCBsb2dnZXIsIHN0cmluZ2lmeSwgdThhQ29uY2F0U3RyaWN0LCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjb21wYXJlU2V0LCBkZWNvZGVVOGFWZWMsIHNvcnRTZXQsIHR5cGVUb0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgbCA9IGxvZ2dlcignQlRyZWVTZXQnKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVNldEZyb21VOGEocmVnaXN0cnksIFZhbENsYXNzLCB1OGEpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgW29mZnNldCwgY291bnRdID0gY29tcGFjdEZyb21VOGFMaW0odThhKTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGNvbnN0IFtkZWNvZGVkTGVuZ3RoXSA9IGRlY29kZVU4YVZlYyhyZWdpc3RyeSwgcmVzdWx0LCB1OGEsIG9mZnNldCwgVmFsQ2xhc3MpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBvdXRwdXQuYWRkKHJlc3VsdFtpXSk7XG4gICAgfVxuICAgIHJldHVybiBbVmFsQ2xhc3MsIG91dHB1dCwgZGVjb2RlZExlbmd0aF07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVTZXRGcm9tU2V0KHJlZ2lzdHJ5LCBWYWxDbGFzcywgdmFsdWUpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgU2V0KCk7XG4gICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvdXRwdXQuYWRkKCh2YWwgaW5zdGFuY2VvZiBWYWxDbGFzcykgPyB2YWwgOiBuZXcgVmFsQ2xhc3MocmVnaXN0cnksIHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbC5lcnJvcignRmFpbGVkIHRvIGRlY29kZSBrZXkgb3IgdmFsdWU6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbVmFsQ2xhc3MsIG91dHB1dCwgMF07XG59XG4vKipcbiAqIERlY29kZSBpbnB1dCB0byBwYXNzIGludG8gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIFZhbENsYXNzIC0gVHlwZSBvZiB0aGUgbWFwIHZhbHVlXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBkZWNvZGUsIG9uZSBvZjpcbiAqIC0gbnVsbFxuICogLSB1bmRlZmluZWRcbiAqIC0gaGV4XG4gKiAtIFVpbnQ4QXJyYXlcbiAqIC0gU2V0PGFueT4sIHdoZXJlIGJvdGgga2V5IGFuZCB2YWx1ZSB0eXBlcyBhcmUgZWl0aGVyXG4gKiAgIGNvbnN0cnVjdG9ycyBvciBkZWNvZGVhYmxlIHZhbHVlcyBmb3IgdGhlaXIgdHlwZXMuXG4gKiBAcGFyYW0ganNvblNldFxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVNldChyZWdpc3RyeSwgdmFsVHlwZSwgdmFsdWUpIHtcbiAgICBjb25zdCBWYWxDbGFzcyA9IHR5cGVUb0NvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWxUeXBlKTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbVmFsQ2xhc3MsIG5ldyBTZXQoKSwgMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzVThhKHZhbHVlKSB8fCBpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVNldEZyb21VOGEocmVnaXN0cnksIFZhbENsYXNzLCB1OGFUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICByZXR1cm4gZGVjb2RlU2V0RnJvbVNldChyZWdpc3RyeSwgVmFsQ2xhc3MsIHZhbHVlKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCVHJlZVNldDogY2Fubm90IGRlY29kZSB0eXBlJyk7XG59XG5leHBvcnQgY2xhc3MgQlRyZWVTZXQgZXh0ZW5kcyBTZXQge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19WYWxDbGFzcztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsVHlwZSwgcmF3VmFsdWUpIHtcbiAgICAgICAgY29uc3QgW1ZhbENsYXNzLCB2YWx1ZXMsIGRlY29kZWRMZW5ndGhdID0gZGVjb2RlU2V0KHJlZ2lzdHJ5LCB2YWxUeXBlLCByYXdWYWx1ZSk7XG4gICAgICAgIHN1cGVyKHNvcnRTZXQodmFsdWVzKSk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gZGVjb2RlZExlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19WYWxDbGFzcyA9IFZhbENsYXNzO1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aCh2YWxUeXBlKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEJUcmVlU2V0IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWxUeXBlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIGxldCBsZW4gPSBjb21wYWN0VG9VOGEodGhpcy5zaXplKS5sZW5ndGg7XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBsZW4gKz0gdi5lbmNvZGVkTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGFzaCBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaXplID09PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFjdHVhbCBzZXQgdmFsdWVzIGFzIGEgc3RyaW5nW11cbiAgICAgKi9cbiAgICBnZXQgc3RyaW5ncygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi5zdXBlci52YWx1ZXMoKV0ubWFwKCh2KSA9PiB2LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlU2V0KHRoaXMsIG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpbm5lci5wdXNoKHYuaW5zcGVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5uZXIsXG4gICAgICAgICAgICBvdXRlcjogW2NvbXBhY3RUb1U4YSh0aGlzLnNpemUpXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLiBpc0xlIHJldHVybnMgYSBMRSAobnVtYmVyLW9ubHkpIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGpzb24ucHVzaCh2LnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqc29uID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBqc29uLnB1c2godi50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYEJUcmVlU2V0PCR7dGhpcy5yZWdpc3RyeS5nZXRDbGFzc05hbWUodGhpcy5fX2ludGVybmFsX19WYWxDbGFzcykgfHwgbmV3IHRoaXMuX19pbnRlcm5hbF9fVmFsQ2xhc3ModGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCl9PmA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICBjb25zdCBqc29uID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBqc29uLnB1c2godi50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IFtdO1xuICAgICAgICBpZiAoIWlzQmFyZSkge1xuICAgICAgICAgICAgZW5jb2RlZC5wdXNoKGNvbXBhY3RUb1U4YSh0aGlzLnNpemUpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgZW5jb2RlZC5wdXNoKHYudG9VOGEoaXNCYXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHU4YUNvbmNhdFN0cmljdChlbmNvZGVkKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0RnJvbVU4YUxpbSwgY29tcGFjdFRvVThhLCBpc1N0cmluZywgdThhQ29uY2F0U3RyaWN0LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IFJhdyB9IGZyb20gJy4uL25hdGl2ZS9SYXcuanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlQml0VmVjVThhKHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbMCwgbmV3IFVpbnQ4QXJyYXkoKV07XG4gICAgfVxuICAgIC8vIGhhbmRsZSBhbGwgb3RoZXIgVWludDhBcnJheSBpbnB1dHMsIHRoZXNlIGRvIGhhdmUgYSBsZW5ndGggcHJlZml4IHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgYml0cyBlbmNvZGVkXG4gICAgY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IGNvbXBhY3RGcm9tVThhTGltKHZhbHVlKTtcbiAgICBjb25zdCB0b3RhbCA9IG9mZnNldCArIE1hdGguY2VpbChsZW5ndGggLyA4KTtcbiAgICBpZiAodG90YWwgPiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCaXRWZWM6IHJlcXVpcmVkIGxlbmd0aCBsZXNzIHRoYW4gcmVtYWluZGVyLCBleHBlY3RlZCBhdCBsZWFzdCAke3RvdGFsfSwgZm91bmQgJHt2YWx1ZS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiBbbGVuZ3RoLCB2YWx1ZS5zdWJhcnJheShvZmZzZXQsIHRvdGFsKV07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVCaXRWZWModmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHU4YSA9IHU4YVRvVThhKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFt1OGEubGVuZ3RoIC8gOCwgdThhXTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZUJpdFZlY1U4YSh2YWx1ZSk7XG59XG4vKipcbiAqIEBuYW1lIEJpdFZlY1xuICogQGRlc2NyaXB0aW9uXG4gKiBBIEJpdFZlYyB0aGF0IHJlcHJlc2VudHMgYW4gYXJyYXkgb2YgYml0cy4gVGhlIGJpdHMgYXJlIGhvd2V2ZXIgc3RvcmVkIGVuY29kZWQuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpc1xuICogYW5kIGEgbm9ybWFsIEJ5dGVzIHdvdWxkIGJlIHRoYXQgdGhlIGxlbmd0aCBwcmVmaXggaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYml0cyBlbmNvZGVkLCBub3QgdGhlIGJ5dGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBCaXRWZWMgZXh0ZW5kcyBSYXcge1xuICAgIF9faW50ZXJuYWxfX2RlY29kZWRMZW5ndGg7XG4gICAgX19pbnRlcm5hbF9faXNNc2I7XG4gICAgLy8gSW4gbGlldSBvZiBoYXZpbmcgdGhlIE1zYi9Mc2IgaWRlbnRpZmllcnMgcGFzc2VkIHRocm91Z2gsIHdlIGRlZmF1bHQgdG8gYXNzdW1pbmdcbiAgICAvLyB3ZSBhcmUgZGVhbGluZyB3aXRoIExzYiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgKGFzIG9mIHdyaXRpbmcpIEJpdFZlYyBmb3JtYXQgdXNlZFxuICAgIC8vIGluIHRoZSBQb2xrYWRvdCBjb2RlICh0aGlzIG9ubHkgYWZmZWN0cyB0aGUgdG9IdW1hbiBkaXNwbGF5cylcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGlzTXNiID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgW2RlY29kZWRMZW5ndGgsIHU4YV0gPSBkZWNvZGVCaXRWZWModmFsdWUpO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgdThhKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19kZWNvZGVkTGVuZ3RoID0gZGVjb2RlZExlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19pc01zYiA9IGlzTXNiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggKyBjb21wYWN0VG9VOGEodGhpcy5fX2ludGVybmFsX19kZWNvZGVkTGVuZ3RoKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3V0ZXI6IFtjb21wYWN0VG9VOGEodGhpcy5fX2ludGVybmFsX19kZWNvZGVkTGVuZ3RoKSwgc3VwZXIudG9VOGEoKV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBib29sZWFuIGFycmF5IG9mIHRoZSBiaXQgdmFsdWVzXG4gICAgICovXG4gICAgdG9Cb29sQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IFsuLi50aGlzLnRvVThhKHRydWUpXS5tYXAoKHYpID0+IFtcbiAgICAgICAgICAgICEhKHYgJiAxMjgpLFxuICAgICAgICAgICAgISEodiAmIDY0KSxcbiAgICAgICAgICAgICEhKHYgJiAzMiksXG4gICAgICAgICAgICAhISh2ICYgMTYpLFxuICAgICAgICAgICAgISEodiAmIDgpLFxuICAgICAgICAgICAgISEodiAmIDQpLFxuICAgICAgICAgICAgISEodiAmIDIpLFxuICAgICAgICAgICAgISEodiAmIDEpXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBjb3VudCA9IG1hcC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSg4ICogY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZiA9IGkgKiA4O1xuICAgICAgICAgICAgY29uc3QgdiA9IG1hcFtpXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W29mZiArIGpdID0gdGhpcy5fX2ludGVybmFsX19pc01zYlxuICAgICAgICAgICAgICAgICAgICA/IHZbal1cbiAgICAgICAgICAgICAgICAgICAgOiB2WzcgLSBqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiBgMGIke1suLi50aGlzLnRvVThhKHRydWUpXVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gYDAwMDAwMDAwJHtkLnRvU3RyaW5nKDIpfWAuc2xpY2UoLTgpKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gdGhpcy5fX2ludGVybmFsX19pc01zYiA/IHMgOiBzLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJykpXG4gICAgICAgICAgICAuam9pbignXycpfWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ0JpdFZlYyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBTQ0FMRSBzcGVjaWZpY2F0aW9uc1xuICAgICAqIEBwYXJhbSBpc0JhcmUgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBwcmVmaXhlcyAoaW50ZXJuYWwpXG4gICAgICovXG4gICAgdG9VOGEoaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IGJpdFZlYyA9IHN1cGVyLnRvVThhKGlzQmFyZSk7XG4gICAgICAgIHJldHVybiBpc0JhcmVcbiAgICAgICAgICAgID8gYml0VmVjXG4gICAgICAgICAgICA6IHU4YUNvbmNhdFN0cmljdChbY29tcGFjdFRvVThhKHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZExlbmd0aCksIGJpdFZlY10pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGNvbXBhY3RBZGRMZW5ndGgsIGNvbXBhY3RGcm9tVThhTGltLCBjb21wYWN0VG9VOGEsIGlzU3RyaW5nLCBpc1U4YSwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBSYXcgfSBmcm9tICcuLi9uYXRpdmUvUmF3LmpzJztcbmNvbnN0IE1BWF9MRU5HVEggPSAxMCAqIDEwMjQgKiAxMDI0O1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlQnl0ZXNVOGEodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW25ldyBVaW50OEFycmF5KCksIDBdO1xuICAgIH1cbiAgICAvLyBoYW5kbGUgYWxsIG90aGVyIFVpbnQ4QXJyYXkgaW5wdXRzLCB0aGVzZSBkbyBoYXZlIGEgbGVuZ3RoIHByZWZpeFxuICAgIGNvbnN0IFtvZmZzZXQsIGxlbmd0aF0gPSBjb21wYWN0RnJvbVU4YUxpbSh2YWx1ZSk7XG4gICAgY29uc3QgdG90YWwgPSBvZmZzZXQgKyBsZW5ndGg7XG4gICAgaWYgKGxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCeXRlcyBsZW5ndGggJHtsZW5ndGgudG9TdHJpbmcoKX0gZXhjZWVkcyAke01BWF9MRU5HVEh9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRvdGFsID4gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQnl0ZXM6IHJlcXVpcmVkIGxlbmd0aCBsZXNzIHRoYW4gcmVtYWluZGVyLCBleHBlY3RlZCBhdCBsZWFzdCAke3RvdGFsfSwgZm91bmQgJHt2YWx1ZS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiBbdmFsdWUuc3ViYXJyYXkob2Zmc2V0LCB0b3RhbCksIHRvdGFsXTtcbn1cbi8qKlxuICogQG5hbWUgQnl0ZXNcbiAqIEBkZXNjcmlwdGlvblxuICogQSBCeXRlcyB3cmFwcGVyIGZvciBWZWM8dTg+LiBUaGUgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIGEgbm9ybWFsIFVpbnQ4QXJyYXlcbiAqIGlzIHRoYXQgdGhpcyB2ZXJzaW9uIGFsbG93cyBmb3IgbGVuZ3RoLWVuY29kaW5nLiAoaS5lLiBpdCBpcyBhIHZhcmlhYmxlLWl0ZW0gY29kZWMsIHRoZSBzYW1lXG4gKiBhcyB3aGF0IGlzIGZvdW5kIGluIFtbVGV4dF1dIGFuZCBbW1ZlY11dKVxuICovXG5leHBvcnQgY2xhc3MgQnl0ZXMgZXh0ZW5kcyBSYXcge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBbdThhLCBkZWNvZGVkTGVuZ3RoXSA9IGlzVThhKHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgUmF3KVxuICAgICAgICAgICAgPyBkZWNvZGVCeXRlc1U4YSh2YWx1ZSlcbiAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAgICAgPyBbdThhVG9VOGEodmFsdWUpLCAwXVxuICAgICAgICAgICAgICAgIDogW3ZhbHVlLCAwXTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHU4YSwgZGVjb2RlZExlbmd0aCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCArIGNvbXBhY3RUb1U4YSh0aGlzLmxlbmd0aCkubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdChpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgY2xlbmd0aCA9IGNvbXBhY3RUb1U4YSh0aGlzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdXRlcjogaXNCYXJlXG4gICAgICAgICAgICAgICAgPyBbc3VwZXIudG9VOGEoKV1cbiAgICAgICAgICAgICAgICA6IHRoaXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gW2NsZW5ndGgsIHN1cGVyLnRvVThhKCldXG4gICAgICAgICAgICAgICAgICAgIDogW2NsZW5ndGhdXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ0J5dGVzJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgcmV0dXJuIGlzQmFyZVxuICAgICAgICAgICAgPyBzdXBlci50b1U4YShpc0JhcmUpXG4gICAgICAgICAgICA6IGNvbXBhY3RBZGRMZW5ndGgodGhpcyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQ29kZWNNYXAgfSBmcm9tICcuL01hcC5qcyc7XG5leHBvcnQgY2xhc3MgSGFzaE1hcCBleHRlbmRzIENvZGVjTWFwIHtcbiAgICBzdGF0aWMgd2l0aChrZXlUeXBlLCB2YWxUeXBlKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEhhc2hNYXAge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIGtleVR5cGUsIHZhbFR5cGUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi9iYXNlL09wdGlvbi5qcyc7XG5pbXBvcnQgeyBUdXBsZSB9IGZyb20gJy4uL2Jhc2UvVHVwbGUuanMnO1xuaW1wb3J0IHsgVmVjIH0gZnJvbSAnLi4vYmFzZS9WZWMuanMnO1xuaW1wb3J0IHsgU3RydWN0IH0gZnJvbSAnLi4vbmF0aXZlL1N0cnVjdC5qcyc7XG5jb25zdCBFTVBUWSA9IG5ldyBVaW50OEFycmF5KCk7XG4vKipcbiAqIEBuYW1lIExpbmthZ2VcbiAqIEBkZXNjcmlwdGlvbiBUaGUgd3JhcHBlciBmb3IgdGhlIHJlc3VsdCBmcm9tIGEgTGlua2VkTWFwXG4gKi9cbmV4cG9ydCBjbGFzcyBMaW5rYWdlIGV4dGVuZHMgU3RydWN0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHtcbiAgICAgICAgICAgIHByZXZpb3VzOiBPcHRpb24ud2l0aChUeXBlKSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb3J0LWtleXNcbiAgICAgICAgICAgIG5leHQ6IE9wdGlvbi53aXRoKFR5cGUpXG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICB9XG4gICAgc3RhdGljIHdpdGhLZXkoVHlwZSkge1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBMaW5rYWdlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBuZXh0IGl0ZW0gdGhlIExpbmthZ2UgaXMgcG9pbnRpbmcgdG9cbiAgICAgKi9cbiAgICBnZXQgcHJldmlvdXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgncHJldmlvdXMnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHByZXZpb3VzIGl0ZW0gdGhlIExpbmthZ2UgaXMgcG9pbnRpbmcgdG9cbiAgICAgKi9cbiAgICBnZXQgbmV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCduZXh0Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYExpbmthZ2U8JHt0aGlzLm5leHQudG9SYXdUeXBlKHRydWUpfT5gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3VzdG9tIHRvVThhIHdoaWNoIHdpdGggYmFyZSBtb2RlIGRvZXMgbm90IHJldHVybiB0aGUgbGlua2FnZSBpZiBlbXB0eVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICAvLyBBcyBwYXJ0IG9mIGEgc3RvcmFnZSBxdWVyeSAod2hlcmUgdGhlc2UgYXBwZWFyKSwgaW4gdGhlIGNhc2Ugb2YgZW1wdHksIHRoZSB2YWx1ZXNcbiAgICAgICAgLy8gYXJlIE5PVCBwb3B1bGF0ZWQgYnkgdGhlIG5vZGUgLSBmb2xsb3cgdGhlIHNhbWUgbG9naWMsIGxlYXZpbmcgaXQgZW1wdHlcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFbXB0eVxuICAgICAgICAgICAgPyBFTVBUWVxuICAgICAgICAgICAgOiBzdXBlci50b1U4YShpc0JhcmUpO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgTGlua2FnZVJlc3VsdFxuICogQGRlc2NyaXB0aW9uIEEgTGlua2FnZSBrZXlzL1ZhbHVlcyB0dXBsZVxuICovXG5leHBvcnQgY2xhc3MgTGlua2FnZVJlc3VsdCBleHRlbmRzIFR1cGxlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgW1R5cGVLZXksIGtleXNdLCBbVHlwZVZhbHVlLCB2YWx1ZXNdKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBLZXlzOiBWZWMud2l0aChUeXBlS2V5KSxcbiAgICAgICAgICAgIFZhbHVlczogVmVjLndpdGgoVHlwZVZhbHVlKVxuICAgICAgICB9LCBba2V5cywgdmFsdWVzXSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgY29tcGFjdEZyb21VOGFMaW0sIGNvbXBhY3RUb1U4YSwgaXNIZXgsIGlzT2JqZWN0LCBpc1U4YSwgbG9nZ2VyLCBzdHJpbmdpZnksIHU4YUNvbmNhdFN0cmljdCwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcnJheSB9IGZyb20gJy4uL2Fic3RyYWN0L0FycmF5LmpzJztcbmltcG9ydCB7IEVudW0gfSBmcm9tICcuLi9iYXNlL0VudW0uanMnO1xuaW1wb3J0IHsgUmF3IH0gZnJvbSAnLi4vbmF0aXZlL1Jhdy5qcyc7XG5pbXBvcnQgeyBTdHJ1Y3QgfSBmcm9tICcuLi9uYXRpdmUvU3RydWN0LmpzJztcbmltcG9ydCB7IGNvbXBhcmVNYXAsIGRlY29kZVU4YSwgc29ydE1hcCwgdHlwZVRvQ29uc3RydWN0b3IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCBsID0gbG9nZ2VyKCdNYXAnKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZU1hcEZyb21VOGEocmVnaXN0cnksIEtleUNsYXNzLCBWYWxDbGFzcywgdThhKSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IFtvZmZzZXQsIGNvdW50XSA9IGNvbXBhY3RGcm9tVThhTGltKHU4YSk7XG4gICAgY29uc3QgdHlwZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdHlwZXMucHVzaChLZXlDbGFzcywgVmFsQ2xhc3MpO1xuICAgIH1cbiAgICBjb25zdCBbdmFsdWVzLCBkZWNvZGVkTGVuZ3RoXSA9IGRlY29kZVU4YShyZWdpc3RyeSwgbmV3IEFycmF5KHR5cGVzLmxlbmd0aCksIHU4YS5zdWJhcnJheShvZmZzZXQpLCBbdHlwZXMsIFtdXSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdmFsdWVzLmxlbmd0aDsgaSA8IGNvdW50OyBpICs9IDIpIHtcbiAgICAgICAgb3V0cHV0LnNldCh2YWx1ZXNbaV0sIHZhbHVlc1tpICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gW0tleUNsYXNzLCBWYWxDbGFzcywgb3V0cHV0LCBvZmZzZXQgKyBkZWNvZGVkTGVuZ3RoXTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZU1hcEZyb21NYXAocmVnaXN0cnksIEtleUNsYXNzLCBWYWxDbGFzcywgdmFsdWUpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCBpc0NvbXBsZXggPSBLZXlDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBYnN0cmFjdEFycmF5IHx8XG4gICAgICAgICAgICBLZXlDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBTdHJ1Y3QgfHxcbiAgICAgICAgICAgIEtleUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEVudW07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvdXRwdXQuc2V0KGtleSBpbnN0YW5jZW9mIEtleUNsYXNzXG4gICAgICAgICAgICAgICAgPyBrZXlcbiAgICAgICAgICAgICAgICA6IG5ldyBLZXlDbGFzcyhyZWdpc3RyeSwgaXNDb21wbGV4ICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShrZXkpIDoga2V5KSwgdmFsIGluc3RhbmNlb2YgVmFsQ2xhc3NcbiAgICAgICAgICAgICAgICA/IHZhbFxuICAgICAgICAgICAgICAgIDogbmV3IFZhbENsYXNzKHJlZ2lzdHJ5LCB2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGwuZXJyb3IoJ0ZhaWxlZCB0byBkZWNvZGUga2V5IG9yIHZhbHVlOicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtLZXlDbGFzcywgVmFsQ2xhc3MsIG91dHB1dCwgMF07XG59XG4vKipcbiAqIERlY29kZSBpbnB1dCB0byBwYXNzIGludG8gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIEtleUNsYXNzIC0gVHlwZSBvZiB0aGUgbWFwIGtleVxuICogQHBhcmFtIFZhbENsYXNzIC0gVHlwZSBvZiB0aGUgbWFwIHZhbHVlXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBkZWNvZGUsIG9uZSBvZjpcbiAqIC0gbnVsbFxuICogLSB1bmRlZmluZWRcbiAqIC0gaGV4XG4gKiAtIFVpbnQ4QXJyYXlcbiAqIC0gTWFwPGFueSwgYW55Piwgd2hlcmUgYm90aCBrZXkgYW5kIHZhbHVlIHR5cGVzIGFyZSBlaXRoZXJcbiAqICAgY29uc3RydWN0b3JzIG9yIGRlY29kZWFibGUgdmFsdWVzIGZvciB0aGVpciB0eXBlcy5cbiAqIEBwYXJhbSBqc29uTWFwXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZGVjb2RlTWFwKHJlZ2lzdHJ5LCBrZXlUeXBlLCB2YWxUeXBlLCB2YWx1ZSkge1xuICAgIGNvbnN0IEtleUNsYXNzID0gdHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIGtleVR5cGUpO1xuICAgIGNvbnN0IFZhbENsYXNzID0gdHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIHZhbFR5cGUpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFtLZXlDbGFzcywgVmFsQ2xhc3MsIG5ldyBNYXAoKSwgMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzVThhKHZhbHVlKSB8fCBpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZU1hcEZyb21VOGEocmVnaXN0cnksIEtleUNsYXNzLCBWYWxDbGFzcywgdThhVG9VOGEodmFsdWUpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZU1hcEZyb21NYXAocmVnaXN0cnksIEtleUNsYXNzLCBWYWxDbGFzcywgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZU1hcEZyb21NYXAocmVnaXN0cnksIEtleUNsYXNzLCBWYWxDbGFzcywgbmV3IE1hcChPYmplY3QuZW50cmllcyh2YWx1ZSkpKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNYXA6IGNhbm5vdCBkZWNvZGUgdHlwZScpO1xufVxuZXhwb3J0IGNsYXNzIENvZGVjTWFwIGV4dGVuZHMgTWFwIHtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGg7XG4gICAgaXNTdG9yYWdlRmFsbGJhY2s7XG4gICAgX19pbnRlcm5hbF9fS2V5Q2xhc3M7XG4gICAgX19pbnRlcm5hbF9fVmFsQ2xhc3M7XG4gICAgX19pbnRlcm5hbF9fdHlwZTtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwga2V5VHlwZSwgdmFsVHlwZSwgcmF3VmFsdWUsIHR5cGUgPSAnSGFzaE1hcCcpIHtcbiAgICAgICAgY29uc3QgW0tleUNsYXNzLCBWYWxDbGFzcywgZGVjb2RlZCwgZGVjb2RlZExlbmd0aF0gPSBkZWNvZGVNYXAocmVnaXN0cnksIGtleVR5cGUsIHZhbFR5cGUsIHJhd1ZhbHVlKTtcbiAgICAgICAgc3VwZXIodHlwZSA9PT0gJ0JUcmVlTWFwJyA/IHNvcnRNYXAoZGVjb2RlZCkgOiBkZWNvZGVkKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLmluaXRpYWxVOGFMZW5ndGggPSBkZWNvZGVkTGVuZ3RoO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX0tleUNsYXNzID0gS2V5Q2xhc3M7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fVmFsQ2xhc3MgPSBWYWxDbGFzcztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlID0gdHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgbGV0IGxlbiA9IGNvbXBhY3RUb1U4YSh0aGlzLnNpemUpLmxlbmd0aDtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGxlbiArPSBrLmVuY29kZWRMZW5ndGggKyB2LmVuY29kZWRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoYXNoIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUgPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVNYXAodGhpcywgb3RoZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlubmVyLnB1c2goay5pbnNwZWN0KCkpO1xuICAgICAgICAgICAgaW5uZXIucHVzaCh2Lmluc3BlY3QoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlubmVyLFxuICAgICAgICAgICAgb3V0ZXI6IFtjb21wYWN0VG9VOGEodGhpcy5zaXplKV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS4gaXNMZSByZXR1cm5zIGEgTEUgKG51bWJlci1vbmx5KSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIHRvSGV4KCkge1xuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICBjb25zdCBqc29uID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBqc29uW2sgaW5zdGFuY2VvZiBSYXcgJiYgIWRpc2FibGVBc2NpaSAmJiBrLmlzQXNjaWlcbiAgICAgICAgICAgICAgICA/IGsudG9VdGY4KClcbiAgICAgICAgICAgICAgICA6IGsudG9TdHJpbmcoKV0gPSB2LnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGpzb25bay50b1N0cmluZygpXSA9IHYudG9KU09OKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICBjb25zdCBqc29uID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBqc29uW2sgaW5zdGFuY2VvZiBSYXcgJiYgIWRpc2FibGVBc2NpaSAmJiBrLmlzQXNjaWlcbiAgICAgICAgICAgICAgICA/IGsudG9VdGY4KClcbiAgICAgICAgICAgICAgICA6IGsudG9TdHJpbmcoKV0gPSB2LnRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fX2ludGVybmFsX190eXBlfTwke3RoaXMucmVnaXN0cnkuZ2V0Q2xhc3NOYW1lKHRoaXMuX19pbnRlcm5hbF9fS2V5Q2xhc3MpIHx8IG5ldyB0aGlzLl9faW50ZXJuYWxfX0tleUNsYXNzKHRoaXMucmVnaXN0cnkpLnRvUmF3VHlwZSgpfSwke3RoaXMucmVnaXN0cnkuZ2V0Q2xhc3NOYW1lKHRoaXMuX19pbnRlcm5hbF9fVmFsQ2xhc3MpIHx8IG5ldyB0aGlzLl9faW50ZXJuYWxfX1ZhbENsYXNzKHRoaXMucmVnaXN0cnkpLnRvUmF3VHlwZSgpfT5gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICBjb25zdCBlbmNvZGVkID0gW107XG4gICAgICAgIGlmICghaXNCYXJlKSB7XG4gICAgICAgICAgICBlbmNvZGVkLnB1c2goY29tcGFjdFRvVThhKHRoaXMuc2l6ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBlbmNvZGVkLnB1c2goay50b1U4YShpc0JhcmUpLCB2LnRvVThhKGlzQmFyZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1OGFDb25jYXRTdHJpY3QoZW5jb2RlZCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNIZXgsIGlzVThhLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uL2Jhc2UvT3B0aW9uLmpzJztcbmltcG9ydCB7IGJvb2wgYXMgQm9vbCB9IGZyb20gJy4uL25hdGl2ZS9Cb29sLmpzJztcbmZ1bmN0aW9uIGRlY29kZVU4YShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAvLyBFbmNvZGVkIGFzIC1cbiAgICAvLyAgLSAwID0gTm9uZVxuICAgIC8vICAtIDEgPSBUcnVlXG4gICAgLy8gIC0gMiA9IEZhbHNlXG4gICAgcmV0dXJuIHZhbHVlWzBdID09PSAwXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IG5ldyBCb29sKHJlZ2lzdHJ5LCB2YWx1ZVswXSA9PT0gMSk7XG59XG4vKipcbiAqIEBuYW1lIE9wdGlvbkJvb2xcbiAqIEBkZXNjcmlwdGlvbiBBIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIE9wdGlvbjxib29sPiB0aGFuIGFsbG93cyBmb3Igc2luZ2xlLWJ5dGUgZW5jb2RpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIE9wdGlvbkJvb2wgZXh0ZW5kcyBPcHRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgQm9vbCwgaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKVxuICAgICAgICAgICAgPyBkZWNvZGVVOGEocmVnaXN0cnksIHU4YVRvVThhKHZhbHVlKSlcbiAgICAgICAgICAgIDogdmFsdWUpO1xuICAgICAgICB0aGlzLmluaXRpYWxVOGFMZW5ndGggPSAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gMSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlIChhbHdheXMgZmFsc2UpXG4gICAgICovXG4gICAgZ2V0IGlzRmFsc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU29tZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlIChhbHdheXMgZmFsc2UpXG4gICAgICovXG4gICAgZ2V0IGlzVHJ1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTb21lXG4gICAgICAgICAgICA/IHRoaXMudmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHsgb3V0ZXI6IFt0aGlzLnRvVThhKCldIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKGlzQmFyZSkge1xuICAgICAgICByZXR1cm4gaXNCYXJlXG4gICAgICAgICAgICA/ICdib29sJ1xuICAgICAgICAgICAgOiAnT3B0aW9uPGJvb2w+JztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgaWYgKGlzQmFyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnRvVThhKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzU29tZVxuICAgICAgICAgICAgPyBuZXcgVWludDhBcnJheShbdGhpcy5pc1RydWUgPyAxIDogMl0pXG4gICAgICAgICAgICA6IG5ldyBVaW50OEFycmF5KFswXSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgVHVwbGUgfSBmcm9tICcuLi9iYXNlL1R1cGxlLmpzJztcbi8qKlxuICogQG5hbWUgUmFuZ2VcbiAqIEBkZXNjcmlwdGlvblxuICogUnVzdCBgUmFuZ2U8VD5gIHJlcHJlc2VudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZSBleHRlbmRzIFR1cGxlIHtcbiAgICBfX2ludGVybmFsX19yYW5nZU5hbWU7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIFR5cGUsIHZhbHVlLCB7IHJhbmdlTmFtZSA9ICdSYW5nZScgfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBbVHlwZSwgVHlwZV0sIHZhbHVlKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yYW5nZU5hbWUgPSByYW5nZU5hbWU7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgUmFuZ2Uge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIFR5cGUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0YXJ0aW5nIHJhbmdlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0IHN0YXJ0KCkge1xuICAgICAgICByZXR1cm4gdGhpc1swXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGVuZGluZyByYW5nZSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBlbmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzWzFdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX19pbnRlcm5hbF9fcmFuZ2VOYW1lfTwke3RoaXMuc3RhcnQudG9SYXdUeXBlKCl9PmA7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuL1JhbmdlLmpzJztcbmV4cG9ydCBjbGFzcyBSYW5nZUluY2x1c2l2ZSBleHRlbmRzIFJhbmdlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIFR5cGUsIHZhbHVlLCB7IHJhbmdlTmFtZTogJ1JhbmdlSW5jbHVzaXZlJyB9KTtcbiAgICB9XG4gICAgc3RhdGljIHdpdGgoVHlwZSkge1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBSYW5nZUluY2x1c2l2ZSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFRleHQgfSBmcm9tICcuLi9uYXRpdmUvVGV4dC5qcyc7XG5pbXBvcnQgeyBzYW5pdGl6ZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgVHlwZVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGlzIGEgZXh0ZW5kZWQgdmVyc2lvbiBvZiBUZXh0LCBzcGVjaWZpY2FsbHkgdG8gaGFuZGxlIHR5cGVzLiBIZXJlIHdlIHJlbHkgZnVsbHlcbiAqIG9uIHdoYXQgVGV4dCBwcm92aWRlcyB1cywgaG93ZXZlciB3ZSBhbHNvIGFkanVzdCB0aGUgdHlwZXMgcmVjZWl2ZWQgZnJvbSB0aGUgcnVudGltZSxcbiAqIGkuZS4gd2UgcmVtb3ZlIHRoZSBgVDo6YCBwcmVmaXhlcyBmb3VuZCBpbiBzb21lIHR5cGVzIGZvciBjb25zaXN0ZW5jeSBhY3Jvc3MgaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlIGV4dGVuZHMgVGV4dCB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlID0gJycpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRPdmVycmlkZShzYW5pdGl6ZSh0aGlzLnRvU3RyaW5nKCkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnVHlwZSc7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNVOGEsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgUmF3IH0gZnJvbSAnLi4vbmF0aXZlL1Jhdy5qcyc7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVVOGFGaXhlZCh2YWx1ZSwgYml0TGVuZ3RoKSB7XG4gICAgY29uc3QgdThhID0gdThhVG9VOGEodmFsdWUpO1xuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBiaXRMZW5ndGggLyA4O1xuICAgIGlmICghdThhLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW25ldyBVaW50OEFycmF5KGJ5dGVMZW5ndGgpLCAwXTtcbiAgICB9XG4gICAgaWYgKGlzVThhKHZhbHVlKSA/IHU4YS5sZW5ndGggPCBieXRlTGVuZ3RoIDogdThhLmxlbmd0aCAhPT0gYnl0ZUxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGlucHV0IHdpdGggJHtieXRlTGVuZ3RofSBieXRlcyAoJHtiaXRMZW5ndGh9IGJpdHMpLCBmb3VuZCAke3U4YS5sZW5ndGh9IGJ5dGVzYCk7XG4gICAgfVxuICAgIHJldHVybiBbdThhLnN1YmFycmF5KDAsIGJ5dGVMZW5ndGgpLCBieXRlTGVuZ3RoXTtcbn1cbi8qKlxuICogQG5hbWUgVThhRml4ZWRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBVOGEgdGhhdCBtYW5hZ2VzIGEgYSBzZXF1ZW5jZSBvZiBieXRlcyB1cCB0byB0aGUgc3BlY2lmaWVkIGJpdExlbmd0aC4gTm90IG1lYW50XG4gKiB0byBiZSB1c2VkIGRpcmVjdGx5LCByYXRoZXIgaXMgc2hvdWxkIGJlIHN1YmNsYXNzZWQgd2l0aCB0aGUgc3BlY2lmaWMgbGVuZ3Rocy5cbiAqL1xuZXhwb3J0IGNsYXNzIFU4YUZpeGVkIGV4dGVuZHMgUmF3IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUgPSBuZXcgVWludDhBcnJheSgpLCBiaXRMZW5ndGggPSAyNTYpIHtcbiAgICAgICAgY29uc3QgW3U4YSwgZGVjb2RlZExlbmd0aF0gPSBkZWNvZGVVOGFGaXhlZCh2YWx1ZSwgYml0TGVuZ3RoKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHU4YSwgZGVjb2RlZExlbmd0aCk7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKGJpdExlbmd0aCwgdHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgVThhRml4ZWQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlLCBiaXRMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9SYXdUeXBlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlTmFtZSB8fCBzdXBlci50b1Jhd1R5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiBgW3U4OyR7dGhpcy5sZW5ndGh9XWA7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgY29tcGFjdEFkZExlbmd0aCwgY29tcGFjdFN0cmlwTGVuZ3RoLCBjb21wYWN0VG9VOGEsIGlzSGV4LCBpc1U4YSwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBSYXcgfSBmcm9tICcuLi9uYXRpdmUvUmF3LmpzJztcbmltcG9ydCB7IHR5cGVUb0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IHsgQnl0ZXMgfSBmcm9tICcuL0J5dGVzLmpzJztcbmZ1bmN0aW9uIGRlY29kZVJhdyhyZWdpc3RyeSwgdHlwZU5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgVHlwZSA9IHR5cGVUb0NvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB0eXBlTmFtZSk7XG4gICAgaWYgKGlzVThhKHZhbHVlKSB8fCBpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IFssIHU4YV0gPSBpc0hleCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IFswLCB1OGFUb1U4YSh2YWx1ZSldXG4gICAgICAgICAgICAgICAgOiAodmFsdWUgaW5zdGFuY2VvZiBSYXcpXG4gICAgICAgICAgICAgICAgICAgID8gWzAsIHZhbHVlLnN1YmFycmF5KCldXG4gICAgICAgICAgICAgICAgICAgIDogY29tcGFjdFN0cmlwTGVuZ3RoKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBbVHlwZSwgbmV3IFR5cGUocmVnaXN0cnksIHU4YSksIHZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gW1R5cGUsIG51bGwsIHZhbHVlXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUeXBlKHJlZ2lzdHJ5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIFtUeXBlLCBpbnN0YW5jZSwgY29tcGFjdEFkZExlbmd0aChpbnN0YW5jZS50b1U4YSgpKV07XG59XG5leHBvcnQgY2xhc3MgV3JhcHBlcktlZXBPcGFxdWUgZXh0ZW5kcyBCeXRlcyB7XG4gICAgX19pbnRlcm5hbF9fVHlwZTtcbiAgICBfX2ludGVybmFsX19kZWNvZGVkO1xuICAgIF9faW50ZXJuYWxfX29wYXF1ZU5hbWU7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHR5cGVOYW1lLCB2YWx1ZSwgeyBvcGFxdWVOYW1lID0gJ1dyYXBwZXJLZWVwT3BhcXVlJyB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgW1R5cGUsIGRlY29kZWQsIHU4YV0gPSBkZWNvZGVSYXcocmVnaXN0cnksIHR5cGVOYW1lLCB2YWx1ZSk7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB1OGEpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX1R5cGUgPSBUeXBlO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2RlY29kZWQgPSBkZWNvZGVkO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX29wYXF1ZU5hbWUgPSBvcGFxdWVOYW1lO1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aChUeXBlKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIFdyYXBwZXJLZWVwT3BhcXVlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHdyYXBwZXIgaXMgZGVjb2RhYmxlXG4gICAgICovXG4gICAgZ2V0IGlzRGVjb2RlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fX2ludGVybmFsX19kZWNvZGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgaW5uZXI6IFt0aGlzLl9faW50ZXJuYWxfX2RlY29kZWQuaW5zcGVjdCgpXSxcbiAgICAgICAgICAgICAgICBvdXRlcjogW2NvbXBhY3RUb1U4YSh0aGlzLmxlbmd0aCldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBvdXRlcjogW2NvbXBhY3RUb1U4YSh0aGlzLmxlbmd0aCksIHRoaXMudG9VOGEodHJ1ZSldXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2RlY29kZWRcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19kZWNvZGVkLnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKVxuICAgICAgICAgICAgOiBzdXBlci50b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19kZWNvZGVkXG4gICAgICAgICAgICA/IHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZC50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpXG4gICAgICAgICAgICA6IHN1cGVyLnRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fX2ludGVybmFsX19vcGFxdWVOYW1lfTwke3RoaXMucmVnaXN0cnkuZ2V0Q2xhc3NOYW1lKHRoaXMuX19pbnRlcm5hbF9fVHlwZSkgfHwgKHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZCA/IHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZC50b1Jhd1R5cGUoKSA6IG5ldyB0aGlzLl9faW50ZXJuYWxfX1R5cGUodGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCkpfT5gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIHN0cmluZyAoZWl0aGVyIGRlY29kZWQgb3IgYnl0ZXMpXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2RlY29kZWRcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19kZWNvZGVkLnRvU3RyaW5nKClcbiAgICAgICAgICAgIDogc3VwZXIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGRlY29kZWQgdGhhdCB0aGUgV3JhcHBlcktlZXBPcGFxdWUgcmVwcmVzZW50cyAoaWYgYXZhaWxhYmxlKSwgdGhyb3dzIGlmIG5vbi1kZWNvZGFibGVcbiAgICAgKi9cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX19kZWNvZGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5fX2ludGVybmFsX19vcGFxdWVOYW1lfTogdW53cmFwcGluZyBhbiB1bmRlY29kYWJsZSB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2RlY29kZWQ7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgV3JhcHBlcktlZXBPcGFxdWUgfSBmcm9tICcuL1dyYXBwZXJLZWVwT3BhcXVlLmpzJztcbmV4cG9ydCBjbGFzcyBXcmFwcGVyT3BhcXVlIGV4dGVuZHMgV3JhcHBlcktlZXBPcGFxdWUge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB0eXBlTmFtZSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHR5cGVOYW1lLCB2YWx1ZSwgeyBvcGFxdWVOYW1lOiAnV3JhcHBlck9wYXF1ZScgfSk7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgV3JhcHBlck9wYXF1ZSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGlubmVyIHZhbHVlIGZvciB0aGlzIHdyYXBwZXIsIGluIGFsbCBjYXNlcyBpdCBfc2hvdWxkXyBiZSBkZWNvZGFibGUgKHVubGlrZSBLZWVwT3BhcXVlKVxuICAgICAqL1xuICAgIGdldCBpbm5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW53cmFwKCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNVOGEsIHU4YVRvSGV4IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqXG4gKiBAbmFtZSBib29sXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJlcHJlc2VudGF0aW9uIGZvciBhIGJvb2xlYW4gdmFsdWUgaW4gdGhlIHN5c3RlbS4gSXQgZXh0ZW5kcyB0aGUgYmFzZSBKUyBgQm9vbGVhbmAgY2xhc3NcbiAqIEBub0luaGVyaXREb2NcbiAqL1xuZXhwb3J0IGNsYXNzIGJvb2wgZXh0ZW5kcyBCb29sZWFuIHtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGggPSAxO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKGlzVThhKHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZVswXSA9PT0gMVxuICAgICAgICAgICAgOiB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW5cbiAgICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgIDogISF2YWx1ZSk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIDEgfCAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Lmhhc2godGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWUgKHRydWUgd2hlbiBpdCB3cmFwcyBmYWxzZS9kZWZhdWx0KVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSB2YWx1ZSAoYWx3YXlzIGZhbHNlKVxuICAgICAqL1xuICAgIGdldCBpc0ZhbHNlKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNUcnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSB2YWx1ZSAoYWx3YXlzIGZhbHNlKVxuICAgICAqL1xuICAgIGdldCBpc1RydWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IChvdGhlciBpbnN0YW5jZW9mIEJvb2xlYW5cbiAgICAgICAgICAgID8gb3RoZXIudmFsdWVPZigpXG4gICAgICAgICAgICA6IG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdXRlcjogW3RoaXMudG9VOGEoKV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KCkge1xuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSB2YWx1ZSBpbiBhIGJlc3QtZml0IHByaW1pdGl2ZSBmb3JtXG4gICAgICovXG4gICAgdG9QcmltaXRpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdib29sJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCkudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW3RoaXMudmFsdWVPZigpID8gMSA6IDBdKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBmbG9hdFRvVThhLCBpc0hleCwgaXNVOGEsIHU4YVRvRmxvYXQsIHU4YVRvSGV4LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKlxuICogQG5hbWUgRmxvYXRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBDb2RlYyB3cmFwcGVyIGZvciBGMzIgJiBGNjQgdmFsdWVzLiBZb3UgZ2VuZXJhbGx5IGRvbid0IHdhbnQgdG8gYmUgdXNpbmdcbiAqIGYzMi9mNjQgaW4geW91ciBydW50aW1lLCBvcGVyYXRpb25zIG9uIGZpeGVkIHBvaW50cyBudW1iZXJzIGFyZSBwcmVmZXJhYmxlLiBUaGlzIGNsYXNzXG4gKiB3YXMgZXhwbGljaXRseSBhZGRlZCBzaW5jZSBzY2FsZS1jb2RlYyBoYXMgYSBmbGFnIHRoYXQgZW5hYmxlcyB0aGlzIGFuZCBpdCBpcyBhdmFpbGFibGVcbiAqIGluIHNvbWUgZXRoXyogUlBDc1xuICovXG5leHBvcnQgY2xhc3MgRmxvYXQgZXh0ZW5kcyBOdW1iZXIge1xuICAgIGVuY29kZWRMZW5ndGg7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpbml0aWFsVThhTGVuZ3RoO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIF9faW50ZXJuYWxfX2JpdExlbmd0aDtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIHsgYml0TGVuZ3RoID0gMzIgfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKGlzVThhKHZhbHVlKSB8fCBpc0hleCh2YWx1ZSlcbiAgICAgICAgICAgID8gdmFsdWUubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiB1OGFUb0Zsb2F0KHU4YVRvVThhKHZhbHVlKSwgeyBiaXRMZW5ndGggfSlcbiAgICAgICAgICAgIDogKHZhbHVlIHx8IDApKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19iaXRMZW5ndGggPSBiaXRMZW5ndGg7XG4gICAgICAgIHRoaXMuZW5jb2RlZExlbmd0aCA9IGJpdExlbmd0aCAvIDg7XG4gICAgICAgIHRoaXMuaW5pdGlhbFU4YUxlbmd0aCA9IHRoaXMuZW5jb2RlZExlbmd0aDtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aChiaXRMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgRmxvYXQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlLCB7IGJpdExlbmd0aCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRydWUgaWYgdGhlIHR5cGUgd3JhcHMgYW4gZW1wdHkvZGVmYXVsdCBhbGwtMCB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBOdW1iZXIob3RoZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGVyOiBbdGhpcy50b1U4YSgpXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGEgaGV4IG9yIGEgc3RyaW5nIHZhbHVlXG4gICAgICAgIC8vICh3b3VsZCBuZWVkIHRvIGNoZWNrIGFnYWluc3QgUlBDcyB0byBzZWUgdGhlIHJlc3VsdCBoZXJlKVxuICAgICAgICByZXR1cm4gdGhpcy50b0hleCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbnVtYmVyIHJlcHJlc2VudGF0aW9uIChTYW1lIGFzIHZhbHVlT2YpXG4gICAgICovXG4gICAgdG9OdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSB2YWx1ZSBpbiBhIGJlc3QtZml0IHByaW1pdGl2ZSBmb3JtXG4gICAgICovXG4gICAgdG9QcmltaXRpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvTnVtYmVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYGYke3RoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RofWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBTQ0FMRSBzcGVjaWZpY2F0aW9uc1xuICAgICAqL1xuICAgIHRvVThhKF9pc0JhcmUpIHtcbiAgICAgICAgcmV0dXJuIGZsb2F0VG9VOGEodGhpcywge1xuICAgICAgICAgICAgYml0TGVuZ3RoOiB0aGlzLl9faW50ZXJuYWxfX2JpdExlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBvYmplY3RQcm9wZXJ0aWVzLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjb21wYXJlTWFwIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlSnNvbih2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZSB8fCB7fSk7XG59XG4vKipcbiAqIEBuYW1lIEpzb25cbiAqIEBkZXNjcmlwdGlvblxuICogV3JhcHMgdGhlIGEgSlNPTiBzdHJ1Y3R1cmUgcmV0cmlldmUgdmlhIFJQQy4gSXQgZXh0ZW5kcyB0aGUgc3RhbmRhcmQgSlMgTWFwIHdpdGguIFdoaWxlIGl0XG4gKiBpbXBsZW1lbnRzIGEgQ29kZWMsIGl0IGlzIGxpbWl0ZWQgaW4gdGhhdCBpdCBjYW4gb25seSBiZSB1c2VkIHdpdGggaW5wdXQgb2JqZWN0cyB2aWEgUlBDLFxuICogaS5lLiBubyBoZXggZGVjb2RpbmcuIFVubGlrZSBhIHN0cnVjdCwgdGhpcyB3YXBzIGEgSlNPTiBvYmplY3Qgd2l0aCB1bmtub3duIGtleXNcbiAqIEBub0luaGVyaXREb2NcbiAqL1xuZXhwb3J0IGNsYXNzIEpzb24gZXh0ZW5kcyBNYXAge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUpzb24odmFsdWUpO1xuICAgICAgICBzdXBlcihkZWNvZGVkKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICBvYmplY3RQcm9wZXJ0aWVzKHRoaXMsIGRlY29kZWQubWFwKChba10pID0+IGspLCAoaykgPT4gdGhpcy5nZXQoaykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQWx3YXlzIDAsIG5ldmVyIGVuY29kZXMgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiAwIHwgMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5rZXlzKCldLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gY29tcGFyZU1hcCh0aGlzLCBvdGhlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgdHlwZWQgdmFsdWUgZnJvbSB0aGUgaW50ZXJuYWwgbWFwXG4gICAgICovXG4gICAgZ2V0VChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGtleSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkLCB3aWxsIHRocm93XG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmltcGxlbWVudGVkJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkLCB3aWxsIHRocm93XG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5pbXBsZW1lbnRlZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzKCldLnJlZHVjZSgoanNvbiwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBqc29uW2tleV0gPSBpc0Z1bmN0aW9uKHZhbHVlPy50b0h1bWFuKVxuICAgICAgICAgICAgICAgID8gdmFsdWUudG9IdW1hbigpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllcygpXS5yZWR1Y2UoKGpzb24sIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAganNvbltrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4ganNvbjtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXMoKV0ucmVkdWNlKChqc29uLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGpzb25ba2V5XSA9IGlzRnVuY3Rpb24odmFsdWUudG9QcmltaXRpdmUpXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ0pzb24nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVW5pbXBsZW1lbnRlZCwgd2lsbCB0aHJvd1xuICAgICAqL1xuICAgIHRvVThhKF9pc0JhcmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmltcGxlbWVudGVkJyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNBc2NpaSwgaXNVbmRlZmluZWQsIGlzVXRmOCwgdThhVG9IZXgsIHU4YVRvU3RyaW5nLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKlxuICogQG5hbWUgUmF3XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgYmFzaWMgd3JhcHBlciBhcm91bmQgVWludDhBcnJheSwgd2l0aCBubyBmcmlsbHMgYW5kIG5vIGZ1c3MuIEl0IGRvZXMgZGlmZmVyXG4gKiBmcm9tIG90aGVyIGltcGxlbWVudGF0aW9ucyB3aGVyZSBpdCB3aWxsIGNvbnN1bWUgdGhlIGZ1bGwgVWludDhBcnJheSBhcyBwYXNzZWQgdG8gaXQuXG4gKiBBcyBzdWNoIGl0IGlzIG1lYW50IHRvIGJlIHN1YmNsYXNzZWQgd2hlcmUgdGhlIHdyYXBwZXIgdGFrZXMgY2FyZSBvZiB0aGVcbiAqIGFjdHVhbCBsZW5ndGhzIGluc3RlYWQgb2YgdXNlZCBkaXJlY3RseS5cbiAqIEBub0luaGVyaXREb2NcbiAqL1xuZXhwb3J0IGNsYXNzIFJhdyBleHRlbmRzIFVpbnQ4QXJyYXkge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhpcyBlbnN1cmVzIHRoYXQgb3BlcmF0b3JzIHN1Y2ggYXMgY2xpY2UsIGZpbHRlciwgbWFwLCBldGMuIHJldHVyblxuICAgICAqIG5ldyBBcnJheSBpbnN0YW5jZXMgKHdpdGhvdXQgdGhpcyB3ZSBuZWVkIHRvIGFwcGx5IG92ZXJyaWRlcylcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGluaXRpYWxVOGFMZW5ndGgpIHtcbiAgICAgICAgc3VwZXIodThhVG9VOGEodmFsdWUpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLmluaXRpYWxVOGFMZW5ndGggPSBpbml0aWFsVThhTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0cnVlIGlmIHRoZSB3cmFwcGVkIHZhbHVlIGNvbnRhaW5zIG9ubHkgQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcnNcbiAgICAgKi9cbiAgICBnZXQgaXNBc2NpaSgpIHtcbiAgICAgICAgcmV0dXJuIGlzQXNjaWkodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRydWUgaWYgdGhlIHR5cGUgd3JhcHMgYW4gZW1wdHkvZGVmYXVsdCBhbGwtMCB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubGVuZ3RoIHx8IGlzVW5kZWZpbmVkKHRoaXMuZmluZCgoYikgPT4gISFiKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRydWUgaWYgdGhlIHdyYXBwZWQgdmFsdWUgY29udGFpbnMgb25seSB1dGY4IGNoYXJhY3RlcnNcbiAgICAgKi9cbiAgICBnZXQgaXNVdGY4KCkge1xuICAgICAgICByZXR1cm4gaXNVdGY4KHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIHZhbHVlXG4gICAgICovXG4gICAgYml0TGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggKiA4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5sZW5ndGggPT09IG90aGVyLmxlbmd0aCkgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5zb21lKChiLCBpbmRleCkgPT4gYiAhPT0gb3RoZXJbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lcSh1OGFUb1U4YShvdGhlcikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGVyOiBbdGhpcy50b1U4YSgpXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKF9pc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9QcmltaXRpdmUoZGlzYWJsZUFzY2lpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSGV4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICBpZiAoIWRpc2FibGVBc2NpaSAmJiB0aGlzLmlzQXNjaWkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnRvVXRmOCgpO1xuICAgICAgICAgICAgLy8gZW5zdXJlIHdlIGRpZG4ndCBlbmQgdXAgd2l0aCBtdWx0aWJ5dGUgY29kZXBvaW50c1xuICAgICAgICAgICAgaWYgKGlzQXNjaWkodGV4dCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnUmF3JztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9IZXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlZCBkYXRhIGFzIGEgVVRGLTggc3RyaW5nXG4gICAgICovXG4gICAgdG9VdGY4KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNVdGY4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgaXMgbm90IGEgdmFsaWQgVXRmOCBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdThhVG9TdHJpbmcodGhpcyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQk4sIGJuVG9CbiwgYm5Ub1U4YSwgaXNCbiwgaXNOdW1iZXIsIGlzU3RyaW5nLCBpc1U4YSwgaXNVbmRlZmluZWQsIG9iamVjdFByb3BlcnRpZXMsIHN0cmluZ2lmeSwgc3RyaW5nUGFzY2FsQ2FzZSwgdThhVG9CbiwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgY29tcGFyZUFycmF5IH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuZnVuY3Rpb24gZW5jb2RlU2V0KHNldFZhbHVlcywgdmFsdWVzKSB7XG4gICAgY29uc3QgZW5jb2RlZCA9IG5ldyBCTigwKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSB2YWx1ZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBlbmNvZGVkLmlvcihiblRvQm4oc2V0VmFsdWVzW3ZhbHVlc1tpXV0gfHwgMCkpO1xuICAgIH1cbiAgICByZXR1cm4gZW5jb2RlZDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVNldEFycmF5KHNldFZhbHVlcywgdmFsdWVzKSB7XG4gICAgY29uc3QgY291bnQgPSB2YWx1ZXMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHZhbHVlc1tpXTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHNldFZhbHVlc1trZXldKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXQ6IEludmFsaWQga2V5ICcke2tleX0nIHBhc3NlZCB0byBTZXQsIGFsbG93ZWQgJHtPYmplY3Qua2V5cyhzZXRWYWx1ZXMpLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W2ldID0ga2V5O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlU2V0TnVtYmVyKHNldFZhbHVlcywgX3ZhbHVlKSB7XG4gICAgY29uc3QgYm4gPSBiblRvQm4oX3ZhbHVlKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2V0VmFsdWVzKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBrZXlzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKGJuLmFuZChiblRvQm4oc2V0VmFsdWVzW2tleV0pKS5lcShiblRvQm4oc2V0VmFsdWVzW2tleV0pKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb21wdXRlZCA9IGVuY29kZVNldChzZXRWYWx1ZXMsIHJlc3VsdCk7XG4gICAgaWYgKCFibi5lcShjb21wdXRlZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXQ6IE1pc21hdGNoIGRlY29kaW5nICcke2JuLnRvU3RyaW5nKCl9JywgY29tcHV0ZWQgYXMgJyR7Y29tcHV0ZWQudG9TdHJpbmcoKX0nIHdpdGggJHtyZXN1bHQuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVNldChzZXRWYWx1ZXMsIHZhbHVlID0gMCwgYml0TGVuZ3RoKSB7XG4gICAgaWYgKGJpdExlbmd0aCAlIDggIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB2YWxpZCBiaXRMZW5ndGgsIHBvd2VyIG9mIDgsIGZvdW5kICR7Yml0TGVuZ3RofWApO1xuICAgIH1cbiAgICBjb25zdCBieXRlTGVuZ3RoID0gYml0TGVuZ3RoIC8gODtcbiAgICBpZiAoaXNVOGEodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogZGVjb2RlU2V0TnVtYmVyKHNldFZhbHVlcywgdThhVG9Cbih2YWx1ZS5zdWJhcnJheSgwLCBieXRlTGVuZ3RoKSwgeyBpc0xlOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVTZXQoc2V0VmFsdWVzLCB1OGFUb1U4YSh2YWx1ZSksIGJ5dGVMZW5ndGgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IFsuLi52YWx1ZS52YWx1ZXMoKV07XG4gICAgICAgIHJldHVybiBkZWNvZGVTZXRBcnJheShzZXRWYWx1ZXMsIGlucHV0KTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZVNldE51bWJlcihzZXRWYWx1ZXMsIHZhbHVlKTtcbn1cbi8qKlxuICogQG5hbWUgU2V0XG4gKiBAZGVzY3JpcHRpb25cbiAqIEFuIFNldCBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLCByZXByZXNlbnRlZCBhbiBhbiBlbmNvZGVkIHR5cGUgYnlcbiAqIGEgYml0d2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgQ29kZWNTZXQgZXh0ZW5kcyBTZXQge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19hbGxvd2VkO1xuICAgIF9faW50ZXJuYWxfX2J5dGVMZW5ndGg7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHNldFZhbHVlcywgdmFsdWUsIGJpdExlbmd0aCA9IDgpIHtcbiAgICAgICAgc3VwZXIoZGVjb2RlU2V0KHNldFZhbHVlcywgdmFsdWUsIGJpdExlbmd0aCkpO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYWxsb3dlZCA9IHNldFZhbHVlcztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ieXRlTGVuZ3RoID0gYml0TGVuZ3RoIC8gODtcbiAgICB9XG4gICAgc3RhdGljIHdpdGgodmFsdWVzLCBiaXRMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29kZWNTZXQge1xuICAgICAgICAgICAgc3RhdGljIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzS2V5cyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzS2V5c1tpXSA9IGBpcyR7c3RyaW5nUGFzY2FsQ2FzZShrZXlzW2ldKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmplY3RQcm9wZXJ0aWVzKHRoaXMucHJvdG90eXBlLCBpc0tleXMsIChfLCBpLCBzZWxmKSA9PiBzZWxmLnN0cmluZ3MuaW5jbHVkZXMoa2V5c1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlcywgdmFsdWUsIGJpdExlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2J5dGVMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gdHJ1ZSBpcyB0aGUgU2V0IGNvbnRhaW5zIG5vIHZhbHVlc1xuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaXplID09PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFjdHVhbCBzZXQgdmFsdWVzIGFzIGEgc3RyaW5nW11cbiAgICAgKi9cbiAgICBnZXQgc3RyaW5ncygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi5zdXBlci52YWx1ZXMoKV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZW5jb2RlZCB2YWx1ZSBmb3IgdGhlIHNldCBtZW1iZXJzXG4gICAgICovXG4gICAgZ2V0IHZhbHVlRW5jb2RlZCgpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVNldCh0aGlzLl9faW50ZXJuYWxfX2FsbG93ZWQsIHRoaXMuc3RyaW5ncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBhZGRzIGEgdmFsdWUgdG8gdGhlIFNldCAoZXh0ZW5kZWQgdG8gYWxsb3cgZm9yIHZhbGlkaXR5IGNoZWNraW5nKVxuICAgICAqL1xuICAgIGFkZCA9IChrZXkpID0+IHtcbiAgICAgICAgLy8gXl5eIGFkZCA9ICgpIHByb3BlcnR5IGRvbmUgdG8gYXNzaWduIHRoaXMgaW5zdGFuY2UncyB0aGlzLCBvdGhlcndpc2UgU2V0LmFkZCBjcmVhdGVzIFwic29tZVwiIGNoYW9zXG4gICAgICAgIC8vIHdlIGhhdmUgdGhlIGlzVW5kZWZpbmVkKHRoaXMuX3NldFZhbHVlcykgaW4gaGVyZSBhcyB3ZWxsLCBhZGQgaXMgdXNlZCBpbnRlcm5hbGx5XG4gICAgICAgIC8vIGluIHRoZSBTZXQgY29uc3RydWN0b3IgKHNvIGl0IGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LCBhbmQgc2hvdWxkIGFsbG93KVxuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19hbGxvd2VkICYmIGlzVW5kZWZpbmVkKHRoaXMuX19pbnRlcm5hbF9fYWxsb3dlZFtrZXldKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXQ6IEludmFsaWQga2V5ICcke2tleX0nIG9uIGFkZGApO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmFkZChrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3RoZXIpKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSBjYXJlIGFib3V0IHRoZSBvcmRlciwgc29ydCB0aGUgdmFsdWVzXG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZUFycmF5KHRoaXMuc3RyaW5ncy5zb3J0KCksIG90aGVyLnNvcnQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3RoZXIgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVxKFsuLi5vdGhlci52YWx1ZXMoKV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKG90aGVyKSB8fCBpc0JuKG90aGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVFbmNvZGVkLmVxKGJuVG9CbihvdGhlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdXRlcjogW3RoaXMudG9VOGEoKV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KCkge1xuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZW5jb2RlZCB2YWx1ZSBmb3IgdGhlIHNldCBtZW1iZXJzXG4gICAgICovXG4gICAgdG9OdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlRW5jb2RlZC50b051bWJlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHsgX3NldDogdGhpcy5fX2ludGVybmFsX19hbGxvd2VkIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYFske3RoaXMuc3RyaW5ncy5qb2luKCcsICcpfV1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKi9cbiAgICB0b1U4YShfaXNCYXJlKSB7XG4gICAgICAgIHJldHVybiBiblRvVThhKHRoaXMudmFsdWVFbmNvZGVkLCB7XG4gICAgICAgICAgICBiaXRMZW5ndGg6IHRoaXMuX19pbnRlcm5hbF9fYnl0ZUxlbmd0aCAqIDgsXG4gICAgICAgICAgICBpc0xlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGlzQm9vbGVhbiwgaXNIZXgsIGlzT2JqZWN0LCBpc1U4YSwgaXNVbmRlZmluZWQsIG9iamVjdFByb3BlcnRpZXMsIHN0cmluZ0NhbWVsQ2FzZSwgc3RyaW5naWZ5LCB1OGFDb25jYXRTdHJpY3QsIHU4YVRvSGV4LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGNvbXBhcmVNYXAsIGRlY29kZVU4YVN0cnVjdCwgbWFwVG9UeXBlTWFwLCB0eXBlc1RvTWFwIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuZnVuY3Rpb24gbm9vcFNldERlZmluaXRpb24oZCkge1xuICAgIHJldHVybiBkO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlU3RydWN0RnJvbU9iamVjdChyZWdpc3RyeSwgW1R5cGVzLCBrZXlzXSwgdmFsdWUsIGpzb25NYXApIHtcbiAgICBsZXQganNvbk9iajtcbiAgICBjb25zdCB0eXBlb2ZBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgIGNvbnN0IHR5cGVvZk1hcCA9IHZhbHVlIGluc3RhbmNlb2YgTWFwO1xuICAgIGNvbnN0IGNvdW50ID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKCF0eXBlb2ZBcnJheSAmJiAhdHlwZW9mTWFwICYmICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdHJ1Y3Q6IENhbm5vdCBkZWNvZGUgdmFsdWUgJHtzdHJpbmdpZnkodmFsdWUpfSAodHlwZW9mICR7dHlwZW9mIHZhbHVlfSksIGV4cGVjdGVkIGFuIGlucHV0IG9iamVjdCwgbWFwIG9yIGFycmF5YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZkFycmF5ICYmIHZhbHVlLmxlbmd0aCAhPT0gY291bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdHJ1Y3Q6IFVuYWJsZSB0byBtYXAgJHtzdHJpbmdpZnkodmFsdWUpfSBhcnJheSB0byBvYmplY3Qgd2l0aCBrbm93biBrZXlzICR7a2V5cy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCByYXcgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBjb25zdCBqc29uS2V5ID0ganNvbk1hcC5nZXQoa2V5KSB8fCBrZXk7XG4gICAgICAgIGNvbnN0IFR5cGUgPSBUeXBlc1tpXTtcbiAgICAgICAgbGV0IGFzc2lnbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2ZBcnJheSkge1xuICAgICAgICAgICAgICAgIGFzc2lnbiA9IHZhbHVlW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mTWFwKSB7XG4gICAgICAgICAgICAgICAgYXNzaWduID0ganNvbktleSAmJiB2YWx1ZS5nZXQoanNvbktleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NpZ24gPSBqc29uS2V5ICYmIHZhbHVlW2pzb25LZXldO1xuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChhc3NpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChqc29uT2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25PYmogPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGUgPSAwLCBlY291bnQgPSBlbnRyaWVzLmxlbmd0aDsgZSA8IGVjb3VudDsgZSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbk9ialtzdHJpbmdDYW1lbENhc2UoZW50cmllc1tlXVswXSldID0gZW50cmllc1tlXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhc3NpZ24gPSBqc29uS2V5ICYmIGpzb25PYmpbanNvbktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmF3W2ldID0gW1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBhc3NpZ24gaW5zdGFuY2VvZiBUeXBlXG4gICAgICAgICAgICAgICAgICAgID8gYXNzaWduXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IFR5cGUocmVnaXN0cnksIGFzc2lnbilcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IFR5cGUubmFtZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9IG5ldyBUeXBlKHJlZ2lzdHJ5KS50b1Jhd1R5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RydWN0OiBmYWlsZWQgb24gJHtqc29uS2V5fTogJHt0eXBlfTo6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3JhdywgMF07XG59XG4vKipcbiAqIEBuYW1lIFN0cnVjdFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIFN0cnVjdCBkZWZpbmVzIGFuIE9iamVjdCB3aXRoIGtleS12YWx1ZSBwYWlycyAtIHdoZXJlIHRoZSB2YWx1ZXMgYXJlIENvZGVjIHZhbHVlcy4gSXQgcmVtb3Zlc1xuICogYSBsb3Qgb2YgcmVwZXRpdGlvbiBmcm9tIHRoZSBhY3R1YWwgY29kaW5nLCBkZWZpbmUgYSBzdHJ1Y3R1cmUgdHlwZSwgcGFzcyBpdCB0aGUga2V5L0NvZGVjXG4gKiB2YWx1ZXMgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCBpdCBtYW5hZ2VzIHRoZSBkZWNvZGluZy4gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGNvbnN0cnVjdG9yXG4gKiB2YWx1ZXMgbWF0Y2hlcyAxMDAlIHRvIHRoZSBvcmRlciBpbiB0aCBSdXN0IGNvZGUsIGkuZS4gZG9uJ3QgZ28gY3JhenkgYW5kIG1ha2UgaXQgYWxwaGFiZXRpY2FsLFxuICogaXQgbmVlZHMgdG8gZGVjb2RlZCBpbiB0aGUgc3BlY2lmaWMgZGVmaW5lZCBvcmRlci5cbiAqIEBub0luaGVyaXREb2NcbiAqL1xuZXhwb3J0IGNsYXNzIFN0cnVjdCBleHRlbmRzIE1hcCB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpbml0aWFsVThhTGVuZ3RoO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIF9faW50ZXJuYWxfX2pzb25NYXA7XG4gICAgX19pbnRlcm5hbF9fVHlwZXM7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIFR5cGVzLCB2YWx1ZSwganNvbk1hcCA9IG5ldyBNYXAoKSwgeyBkZWZpbml0aW9uLCBzZXREZWZpbml0aW9uID0gbm9vcFNldERlZmluaXRpb24gfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHR5cGVNYXAgPSBkZWZpbml0aW9uIHx8IHNldERlZmluaXRpb24obWFwVG9UeXBlTWFwKHJlZ2lzdHJ5LCBUeXBlcykpO1xuICAgICAgICBjb25zdCBbZGVjb2RlZCwgZGVjb2RlZExlbmd0aF0gPSBpc1U4YSh2YWx1ZSkgfHwgaXNIZXgodmFsdWUpXG4gICAgICAgICAgICA/IGRlY29kZVU4YVN0cnVjdChyZWdpc3RyeSwgbmV3IEFycmF5KHR5cGVNYXBbMF0ubGVuZ3RoKSwgdThhVG9VOGEodmFsdWUpLCB0eXBlTWFwKVxuICAgICAgICAgICAgOiB2YWx1ZSBpbnN0YW5jZW9mIFN0cnVjdFxuICAgICAgICAgICAgICAgID8gW3ZhbHVlLCAwXVxuICAgICAgICAgICAgICAgIDogZGVjb2RlU3RydWN0RnJvbU9iamVjdChyZWdpc3RyeSwgdHlwZU1hcCwgdmFsdWUgfHwge30sIGpzb25NYXApO1xuICAgICAgICBzdXBlcihkZWNvZGVkKTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gZGVjb2RlZExlbmd0aDtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2pzb25NYXAgPSBqc29uTWFwO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX1R5cGVzID0gdHlwZU1hcDtcbiAgICB9XG4gICAgc3RhdGljIHdpdGgoVHlwZXMsIGpzb25NYXApIHtcbiAgICAgICAgbGV0IGRlZmluaXRpb247XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgICAgIGNvbnN0IHNldERlZmluaXRpb24gPSAoZCkgPT4gZGVmaW5pdGlvbiA9IGQ7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIFN0cnVjdCB7XG4gICAgICAgICAgICBzdGF0aWMge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhUeXBlcyk7XG4gICAgICAgICAgICAgICAgb2JqZWN0UHJvcGVydGllcyh0aGlzLnByb3RvdHlwZSwga2V5cywgKGssIF8sIHNlbGYpID0+IHNlbGYuZ2V0KGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlcywgdmFsdWUsIGpzb25NYXAsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhdmFpbGFibGUga2V5cyBmb3IgdGhpcyBzdHJ1Y3RcbiAgICAgKi9cbiAgICBnZXQgZGVmS2V5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fVHlwZXNbMV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAoIXYuaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcbiAgICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIHRvdGFsICs9IHYuZW5jb2RlZExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgVHlwZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RydWN0dXJlXG4gICAgICovXG4gICAgZ2V0IFR5cGUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBjb25zdCBbVHlwZXMsIGtleXNdID0gdGhpcy5fX2ludGVybmFsX19UeXBlcztcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0ga2V5cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5c1tpXV0gPSBuZXcgVHlwZXNbaV0odGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gY29tcGFyZU1hcCh0aGlzLCBvdGhlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgc3BlY2lmaWMgbmFtZXMgZW50cnkgaW4gdGhlIHN0cnVjdHVyZVxuICAgICAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGVudHJ5IHRvIHJldHJpZXZlXG4gICAgICovXG4gICAgZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KGtleSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB2YWx1ZXMgb2YgYSBtZW1iZXIgYXQgYSBzcGVjaWZpYyBpbmRleCAoUmF0aGVyIHVzZSBnZXQobmFtZSkgZm9yIHBlcmZvcm1hbmNlKVxuICAgICAqL1xuICAgIGdldEF0SW5kZXgoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9BcnJheSgpW2luZGV4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGEgdHlwZXMgdmFsdWUgYnkgbmFtZVxuICAgICAqL1xuICAgIGdldFQoa2V5KSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXQoa2V5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpbm5lci5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi52Lmluc3BlY3QoIWlzQmFyZSB8fCBpc0Jvb2xlYW4oaXNCYXJlKVxuICAgICAgICAgICAgICAgICAgICA/IGlzQmFyZVxuICAgICAgICAgICAgICAgICAgICA6IGlzQmFyZVtrXSksXG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nQ2FtZWxDYXNlKGspXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5uZXJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gYW4gc3RhbmRhcmQgSmF2YVNjcmlwdCBBcnJheVxuICAgICAqL1xuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy52YWx1ZXMoKV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b0hleCgpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvSGV4KHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAganNvbltrXSA9IHYudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgLy8gSGVyZSB3ZSBwdWxsIG91dCB0aGUgZW50cnkgYWdhaW5zdCB0aGUgSlNPTiBtYXBwaW5nIChpZiBzdXBwbGllZClcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoaXMgcmVwcmVzZW50YXRpb24gZ29lcyBvdmVyIFJQQyBhbmQgbmVlZHMgdG8gYmUgY29ycmVjdFxuICAgICAgICAgICAganNvblsodGhpcy5fX2ludGVybmFsX19qc29uTWFwLmdldChrKSB8fCBrKV0gPSB2LnRvSlNPTigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAganNvbltrXSA9IHYudG9QcmltaXRpdmUoZGlzYWJsZUFzY2lpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnkodHlwZXNUb01hcCh0aGlzLnJlZ2lzdHJ5LCB0aGlzLl9faW50ZXJuYWxfX1R5cGVzKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnkodGhpcy50b0pTT04oKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBTQ0FMRSBzcGVjaWZpY2F0aW9uc1xuICAgICAqIEBwYXJhbSBpc0JhcmUgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBwcmVmaXhlcyAoaW50ZXJuYWwpXG4gICAgICovXG4gICAgdG9VOGEoaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGVuY29kZWQucHVzaCh2LnRvVThhKCFpc0JhcmUgfHwgaXNCb29sZWFuKGlzQmFyZSlcbiAgICAgICAgICAgICAgICA/IGlzQmFyZVxuICAgICAgICAgICAgICAgIDogaXNCYXJlW2tdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHU4YUNvbmNhdFN0cmljdChlbmNvZGVkKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0QWRkTGVuZ3RoLCBjb21wYWN0RnJvbVU4YUxpbSwgY29tcGFjdFRvVThhLCBoZXhUb1U4YSwgaXNIZXgsIGlzU3RyaW5nLCBpc1U4YSwgc3RyaW5nVG9VOGEsIHU4YVRvSGV4LCB1OGFUb1N0cmluZyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IFJhdyB9IGZyb20gJy4vUmF3LmpzJztcbmNvbnN0IE1BWF9MRU5HVEggPSAxMjggKiAxMDI0O1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlVGV4dCh2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbJycsIDBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZvciBSYXcsIHRoZSBpbnRlcm5hbCBidWZmZXIgZG9lcyBub3QgaGF2ZSBhbiBpbnRlcm5hbCBsZW5ndGhcbiAgICAgICAgLy8gKHRoZSBzYW1lIGFwcGxpZXMgaW4gZS5nLiBCeXRlcywgd2hlcmUgbGVuZ3RoIGlzIGFkZGVkIGF0IGVuY29kaW5nLXRpbWUpXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhdykge1xuICAgICAgICAgICAgcmV0dXJuIFt1OGFUb1N0cmluZyh2YWx1ZSksIDBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtvZmZzZXQsIGxlbmd0aF0gPSBjb21wYWN0RnJvbVU4YUxpbSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gb2Zmc2V0ICsgbGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0xFTkdUSCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZXh0OiBsZW5ndGggJHtsZW5ndGgudG9TdHJpbmcoKX0gZXhjZWVkcyAke01BWF9MRU5HVEh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodG90YWwgPiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGV4dDogcmVxdWlyZWQgbGVuZ3RoIGxlc3MgdGhhbiByZW1haW5kZXIsIGV4cGVjdGVkIGF0IGxlYXN0ICR7dG90YWx9LCBmb3VuZCAke3ZhbHVlLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3U4YVRvU3RyaW5nKHZhbHVlLnN1YmFycmF5KG9mZnNldCwgdG90YWwpKSwgdG90YWxdO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFt1OGFUb1N0cmluZyhoZXhUb1U4YSh2YWx1ZSkpLCAwXTtcbiAgICB9XG4gICAgcmV0dXJuIFt2YWx1ZSA/IHZhbHVlLnRvU3RyaW5nKCkgOiAnJywgMF07XG59XG4vKipcbiAqIEBuYW1lIFRleHRcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBpcyBhIHN0cmluZyB3cmFwcGVyLCBhbG9uZyB3aXRoIHRoZSBsZW5ndGguIEl0IGlzIHVzZWQgYm90aCBmb3Igc3RyaW5ncyBhcyB3ZWxsXG4gKiBhcyBpdGVtcyBzdWNoIGFzIGRvY3VtZW50YXRpb24uIEl0IHNpbXBseSBleHRlbmRzIHRoZSBzdGFuZGFyZCBKUyBgU3RyaW5nYCBidWlsdC1pblxuICogb2JqZWN0LCBpbmhlcml0aW5nIGFsbCBtZXRob2RzIGV4cG9zZWQgZnJvbSBgU3RyaW5nYC5cbiAqIEBub0luaGVyaXREb2NcbiAqL1xuZXhwb3J0IGNsYXNzIFRleHQgZXh0ZW5kcyBTdHJpbmcge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19vdmVycmlkZSA9IG51bGw7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFtzdHIsIGRlY29kZWRMZW5ndGhdID0gZGVjb2RlVGV4dCh2YWx1ZSk7XG4gICAgICAgIHN1cGVyKHN0cik7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gZGVjb2RlZExlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9VOGEoKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIC8vIG9ubHkgaW5jbHVkZWQgaGVyZSBzaW5jZSB3ZSBpZ25vcmUgaW5oZXJpdGVkIGRvY3NcbiAgICAgICAgcmV0dXJuIHN1cGVyLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcob3RoZXIpXG4gICAgICAgICAgICA/IHRoaXMudG9TdHJpbmcoKSA9PT0gb3RoZXIudG9TdHJpbmcoKVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3RyaW5nVG9VOGEoc3VwZXIudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdXRlcjogdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBbY29tcGFjdFRvVThhKHZhbHVlLmxlbmd0aCksIHZhbHVlXVxuICAgICAgICAgICAgICAgIDogW2NvbXBhY3RUb1U4YSh2YWx1ZS5sZW5ndGgpXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0IGFuIG92ZXJyaWRlIHZhbHVlIGZvciB0aGlzXG4gICAgICovXG4gICAgc2V0T3ZlcnJpZGUob3ZlcnJpZGUpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19vdmVycmlkZSA9IG92ZXJyaWRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIC8vIGxpa2Ugd2l0aCBWZWM8dTg+LCB3aGVuIHdlIGFyZSBlbmNvZGluZyB0byBoZXgsIHdlIGRvbid0IGFjdHVhbGx5IGFkZFxuICAgICAgICAvLyB0aGUgbGVuZ3RoIHByZWZpeCAoaXQgaXMgYWxyZWFkeSBpbXBsaWVkIGJ5IHRoZSBhY3R1YWwgc3RyaW5nIGxlbmd0aClcbiAgICAgICAgcmV0dXJuIHU4YVRvSGV4KHRoaXMudG9VOGEodHJ1ZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSB2YWx1ZSBpbiBhIGJlc3QtZml0IHByaW1pdGl2ZSBmb3JtXG4gICAgICovXG4gICAgdG9QcmltaXRpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdUZXh0JztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fb3ZlcnJpZGUgfHwgc3VwZXIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgLy8gTk9URSBIZXJlIHdlIHVzZSB0aGUgc3VwZXIgdG9TdHJpbmcgKHdlIGFyZSBub3QgdGFraW5nIG92ZXJyaWRlcyBpbnRvIGFjY291bnQsXG4gICAgICAgIC8vIHJhdGhlciBlbmNvZGluZyB0aGUgb3JpZ2luYWwgdmFsdWUgdGhlIHN0cmluZyB3YXMgY29uc3RydWN0ZWQgd2l0aClcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IHN0cmluZ1RvVThhKHN1cGVyLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gaXNCYXJlXG4gICAgICAgICAgICA/IGVuY29kZWRcbiAgICAgICAgICAgIDogY29tcGFjdEFkZExlbmd0aChlbmNvZGVkKTtcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMS4yLjEnIH07XG4iLCJpbXBvcnQgeyBGbG9hdCB9IGZyb20gJy4uL25hdGl2ZS9GbG9hdC5qcyc7XG4vKipcbiAqIEBuYW1lIGYzMlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDMyLWJpdCBmbG9hdFxuICovXG5leHBvcnQgY2xhc3MgZjMyIGV4dGVuZHMgRmxvYXQud2l0aCgzMikge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX0Zsb2F0VHlwZSA9ICdmMzInO1xufVxuIiwiaW1wb3J0IHsgRmxvYXQgfSBmcm9tICcuLi9uYXRpdmUvRmxvYXQuanMnO1xuLyoqXG4gKiBAbmFtZSBmNjRcbiAqIEBkZXNjcmlwdGlvblxuICogQSA2NC1iaXQgZmxvYXRcbiAqL1xuZXhwb3J0IGNsYXNzIGY2NCBleHRlbmRzIEZsb2F0LndpdGgoNjQpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19GbG9hdFR5cGUgPSAnZjY0Jztcbn1cbiIsImltcG9ydCB7IEludCB9IGZyb20gJy4uL2Jhc2UvSW50LmpzJztcbi8qKlxuICogQG5hbWUgaTEyOFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDEyOC1iaXQgc2lnbmVkIGludGVnZXJcbiAqL1xuZXhwb3J0IGNsYXNzIGkxMjggZXh0ZW5kcyBJbnQud2l0aCgxMjgpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19JbnRUeXBlID0gJ2kxMjgnO1xufVxuIiwiaW1wb3J0IHsgSW50IH0gZnJvbSAnLi4vYmFzZS9JbnQuanMnO1xuLyoqXG4gKiBAbmFtZSBpMTZcbiAqIEBkZXNjcmlwdGlvblxuICogQSAxNi1iaXQgc2lnbmVkIGludGVnZXJcbiAqL1xuZXhwb3J0IGNsYXNzIGkxNiBleHRlbmRzIEludC53aXRoKDE2KSB7XG4gICAgLy8gTk9URSB3aXRob3V0IHRoaXMsIHdlIGNhbm5vdCBwcm9wZXJseSBkZXRlcm1pbmUgZXh0ZW5zaW9uc1xuICAgIF9fSW50VHlwZSA9ICdpMTYnO1xufVxuIiwiaW1wb3J0IHsgSW50IH0gZnJvbSAnLi4vYmFzZS9JbnQuanMnO1xuLyoqXG4gKiBAbmFtZSBpMjU2XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgMjU2LWJpdCBzaWduZWQgaW50ZWdlclxuICovXG5leHBvcnQgY2xhc3MgaTI1NiBleHRlbmRzIEludC53aXRoKDI1Nikge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX0ludFR5cGUgPSAnaTI1Nic7XG59XG4iLCJpbXBvcnQgeyBJbnQgfSBmcm9tICcuLi9iYXNlL0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIGkzMlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDMyLWJpdCBzaWduZWQgaW50ZWdlclxuICovXG5leHBvcnQgY2xhc3MgaTMyIGV4dGVuZHMgSW50LndpdGgoMzIpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19JbnRUeXBlID0gJ2kzMic7XG59XG4iLCJpbXBvcnQgeyBJbnQgfSBmcm9tICcuLi9iYXNlL0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIGk2NFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDY0LWJpdCBzaWduZWQgaW50ZWdlclxuICovXG5leHBvcnQgY2xhc3MgaTY0IGV4dGVuZHMgSW50LndpdGgoNjQpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19JbnRUeXBlID0gJ2k2NCc7XG59XG4iLCJpbXBvcnQgeyBJbnQgfSBmcm9tICcuLi9iYXNlL0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIGk4XG4gKiBAZGVzY3JpcHRpb25cbiAqIEFuIDgtYml0IHNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyBpOCBleHRlbmRzIEludC53aXRoKDgpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19JbnRUeXBlID0gJ2k4Jztcbn1cbiIsImltcG9ydCB7IGkzMiB9IGZyb20gJy4vSTMyLmpzJztcbi8qKlxuICogQG5hbWUgSVNpemVcbiAqIEBkZXNjcmlwdGlvblxuICogQSBTeXN0ZW0gZGVmYXVsdCBzaWduZWQgbnVtYmVyLCB0eXBpY2FsbHkgdXNlZCBpbiBSUEMgdG8gcmVwb3J0IG5vbi1jb25zZW5zdXNcbiAqIGRhdGEuIEl0IGlzIGEgd3JhcHBlciBmb3IgW1tJMzJdXSBhcyBhIFdBU00gZGVmYXVsdCAoYXMgZ2VuZXJhdGVkIGJ5IFJ1c3QgYmluZGluZ3MpLlxuICogSXQgaXMgbm90IHRvIGJlIHVzZWQsIHNpbmNlIGl0IGNyZWF0ZXMgY29uc2Vuc3VzIG1pc21hdGNoZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBpc2l6ZSBleHRlbmRzIGkzMiB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGBpc2l6ZWAgdHlwZSBzaG91bGQgbm90IGJlIHVzZWQuIFNpbmNlIGl0IGlzIHBsYXRmb3JtLXNwZWNpZmljLCBpdCBjcmVhdGVzIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gbmF0aXZlIChnZW5lcmFsbHkgaTY0KSBhbmQgV0FTTSAoYWx3YXlzIGkzMikgY29kZS4gVXNlIG9uZSBvZiB0aGUgYGkzMmAgb3IgYGk2NGAgdHlwZXMgZXhwbGljaXRseS4nKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBVSW50IH0gZnJvbSAnLi4vYmFzZS9VSW50LmpzJztcbi8qKlxuICogQG5hbWUgdTEyOFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDEyOC1iaXQgdW5zaWduZWQgaW50ZWdlclxuICovXG5leHBvcnQgY2xhc3MgdTEyOCBleHRlbmRzIFVJbnQud2l0aCgxMjgpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19VSW50VHlwZSA9ICd1MTI4Jztcbn1cbiIsImltcG9ydCB7IFVJbnQgfSBmcm9tICcuLi9iYXNlL1VJbnQuanMnO1xuLyoqXG4gKiBAbmFtZSB1MTZcbiAqIEBkZXNjcmlwdGlvblxuICogQSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlclxuICovXG5leHBvcnQgY2xhc3MgdTE2IGV4dGVuZHMgVUludC53aXRoKDE2KSB7XG4gICAgLy8gTk9URSB3aXRob3V0IHRoaXMsIHdlIGNhbm5vdCBwcm9wZXJseSBkZXRlcm1pbmUgZXh0ZW5zaW9uc1xuICAgIF9fVUludFR5cGUgPSAndTE2Jztcbn1cbiIsImltcG9ydCB7IFVJbnQgfSBmcm9tICcuLi9iYXNlL1VJbnQuanMnO1xuLyoqXG4gKiBAbmFtZSB1MjU2XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgMjU2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyB1MjU2IGV4dGVuZHMgVUludC53aXRoKDI1Nikge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX1VJbnRUeXBlID0gJ3UyNTYnO1xufVxuIiwiaW1wb3J0IHsgVUludCB9IGZyb20gJy4uL2Jhc2UvVUludC5qcyc7XG4vKipcbiAqIEBuYW1lIHUzMlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyB1MzIgZXh0ZW5kcyBVSW50LndpdGgoMzIpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19VSW50VHlwZSA9ICd1MzInO1xufVxuIiwiaW1wb3J0IHsgVUludCB9IGZyb20gJy4uL2Jhc2UvVUludC5qcyc7XG4vKipcbiAqIEBuYW1lIHU2NFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyB1NjQgZXh0ZW5kcyBVSW50LndpdGgoNjQpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19VSW50VHlwZSA9ICd1NjQnO1xufVxuIiwiaW1wb3J0IHsgVUludCB9IGZyb20gJy4uL2Jhc2UvVUludC5qcyc7XG4vKipcbiAqIEBuYW1lIHU4XG4gKiBAZGVzY3JpcHRpb25cbiAqIEFuIDgtYml0IHVuc2lnbmVkIGludGVnZXJcbiAqL1xuZXhwb3J0IGNsYXNzIHU4IGV4dGVuZHMgVUludC53aXRoKDgpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19VSW50VHlwZSA9ICd1OCc7XG59XG4iLCJpbXBvcnQgeyB1MzIgfSBmcm9tICcuL1UzMi5qcyc7XG4vKipcbiAqIEBuYW1lIFVTaXplXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgU3lzdGVtIGRlZmF1bHQgdW5zaWduZWQgbnVtYmVyLCB0eXBpY2FsbHkgdXNlZCBpbiBSUEMgdG8gcmVwb3J0IG5vbi1jb25zZW5zdXNcbiAqIGRhdGEuIEl0IGlzIGEgd3JhcHBlciBmb3IgW1tVMzJdXSBhcyBhIFdBU00gZGVmYXVsdCAoYXMgZ2VuZXJhdGVkIGJ5IFJ1c3QgYmluZGluZ3MpLlxuICogSXQgaXMgbm90IHRvIGJlIHVzZWQsIHNpbmNlIGl0IGNyZWF0ZWQgY29uc2Vuc3VzIG1pc21hdGNoZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyB1c2l6ZSBleHRlbmRzIHUzMiB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGB1c2l6ZWAgdHlwZSBzaG91bGQgbm90IGJlIHVzZWQuIFNpbmNlIGl0IGlzIHBsYXRmb3JtLXNwZWNpZmljLCBpdCBjcmVhdGVzIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gbmF0aXZlIChnZW5lcmFsbHkgdTY0KSBhbmQgV0FTTSAoYWx3YXlzIHUzMikgY29kZS4gVXNlIG9uZSBvZiB0aGUgYHUzMmAgb3IgYHU2NGAgdHlwZXMgZXhwbGljaXRseS4nKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGhhc0VxIH0gZnJvbSAnLi91dGlsLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlQXJyYXkoYSwgYikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgIHJldHVybiAoYS5sZW5ndGggPT09IGIubGVuZ3RoKSAmJiBpc1VuZGVmaW5lZChhLmZpbmQoKHYsIGluZGV4KSA9PiBoYXNFcSh2KVxuICAgICAgICAgICAgPyAhdi5lcShiW2luZGV4XSlcbiAgICAgICAgICAgIDogdiAhPT0gYltpbmRleF0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzVW5kZWZpbmVkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgaGFzRXEgfSBmcm9tICcuL3V0aWwuanMnO1xuZnVuY3Rpb24gaGFzTWlzbWF0Y2goYSwgYikge1xuICAgIHJldHVybiBpc1VuZGVmaW5lZChhKSB8fCAoaGFzRXEoYSlcbiAgICAgICAgPyAhYS5lcShiKVxuICAgICAgICA6IGEgIT09IGIpO1xufVxuZnVuY3Rpb24gbm90RW50cnkodmFsdWUpIHtcbiAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCAhPT0gMjtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVNYXBBcnJheShhLCBiKSB7XG4gICAgLy8gZXF1YWwgbnVtYmVyIG9mIGVudHJpZXMgYW5kIGVhY2ggZW50cnkgaW4gdGhlIGFycmF5IHNob3VsZCBtYXRjaFxuICAgIHJldHVybiAoYS5zaXplID09PSBiLmxlbmd0aCkgJiYgIWIuc29tZSgoZSkgPT4gbm90RW50cnkoZSkgfHxcbiAgICAgICAgaGFzTWlzbWF0Y2goYS5nZXQoZVswXSksIGVbMV0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlTWFwKGEsIGIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICByZXR1cm4gY29tcGFyZU1hcEFycmF5KGEsIGIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChiIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlTWFwQXJyYXkoYSwgWy4uLmIuZW50cmllcygpXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KGIpKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlTWFwQXJyYXkoYSwgT2JqZWN0LmVudHJpZXMoYikpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmZ1bmN0aW9uIGNvbXBhcmVTZXRBcnJheShhLCBiKSB7XG4gICAgLy8gZXF1YWwgbnVtYmVyIG9mIGVudHJpZXMgYW5kIGVhY2ggZW50cnkgaW4gdGhlIGFycmF5IHNob3VsZCBtYXRjaFxuICAgIHJldHVybiAoYS5zaXplID09PSBiLmxlbmd0aCkgJiYgIWIuc29tZSgoZSkgPT4gIWEuaGFzKGUpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlU2V0KGEsIGIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICByZXR1cm4gY29tcGFyZVNldEFycmF5KGEsIGIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChiIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlU2V0QXJyYXkoYSwgWy4uLmIudmFsdWVzKCldKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoYikpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVTZXRBcnJheShhLCBPYmplY3QudmFsdWVzKGIpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IHsgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBmb3JtYXRGYWlsdXJlKHJlZ2lzdHJ5LCBmbiwgX3Jlc3VsdCwgeyBtZXNzYWdlIH0sIHU4YSwgaSwgY291bnQsIFR5cGUsIGtleSkge1xuICAgIGxldCB0eXBlID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgICAgdHlwZSA9IGA6ICR7bmV3IFR5cGUocmVnaXN0cnkpLnRvUmF3VHlwZSgpfWA7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgfVxuICAgIC8vIFRoaXMgaXMgZXh0cmEgZGVidWdnaW5nIGluZm8gKHdlIG1vc3QtcHJvYmFibHkgd2FudCB0aGlzIGluIGluIHNvbWUgd2F5LCBzaGFwZSBvciBmb3JtLFxuICAgIC8vIGJ1dCBhdCB0aGlzIHBvaW50IG5vdCBxdWl0ZSBzdXJlIGhvdyB0byBpbmNsdWRlIGFuZCBmb3JtYXQgaXQgKGl0IGNhbiBiZSBxdWl0ZSBtYXNzaXZlKVxuICAgIC8vIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSk7XG4gICAgcmV0dXJuIGAke2ZufTogZmFpbGVkIGF0ICR7dThhVG9IZXgodThhLnN1YmFycmF5KDAsIDE2KSl94oCmJHtrZXkgPyBgIG9uICR7a2V5fWAgOiAnJ30gKGluZGV4ICR7aSArIDF9LyR7Y291bnR9KSR7dHlwZX06OiAke21lc3NhZ2V9YDtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKlxuICogR2l2ZW4gYW4gdThhLCBhbmQgYW4gYXJyYXkgb2YgVHlwZSBjb25zdHJ1Y3RvcnMsIGRlY29kZSB0aGUgdThhIGFnYWluc3QgdGhlXG4gKiB0eXBlcywgYW5kIHJldHVybiBhbiBhcnJheSBvZiBkZWNvZGVkIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0gdThhIC0gVGhlIHU4YSB0byBkZWNvZGUuXG4gKiBAcGFyYW0gcmVzdWx0IC0gVGhlIHJlc3VsdCBhcnJheSAod2lsbCBiZSByZXR1cm5lZCB3aXRoIHZhbHVlcyBwdXNoZWQpXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgYXJyYXkgb2YgQ29kZWNDbGFzcyB0byBkZWNvZGUgdGhlIFU4YSBhZ2FpbnN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVThhKHJlZ2lzdHJ5LCByZXN1bHQsIHU4YSwgW1R5cGVzLCBrZXlzXSkge1xuICAgIGNvbnN0IGNvdW50ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKGkgPCBjb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgVHlwZXNbaV0ocmVnaXN0cnksIHU4YS5zdWJhcnJheShvZmZzZXQpKTtcbiAgICAgICAgICAgIG9mZnNldCArPSB2YWx1ZS5pbml0aWFsVThhTGVuZ3RoIHx8IHZhbHVlLmVuY29kZWRMZW5ndGg7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdEZhaWx1cmUocmVnaXN0cnksICdkZWNvZGVVOGEnLCByZXN1bHQsIGVycm9yLCB1OGEuc3ViYXJyYXkob2Zmc2V0KSwgaSwgY291bnQsIFR5cGVzW2ldLCBrZXlzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBbcmVzdWx0LCBvZmZzZXRdO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqXG4gKiBTcGxpdCBmcm9tIGRlY29kZVU4YSBzaW5jZSB0aGlzIGlzIHNwZWNpYWxpemVkIHRvIHppcCByZXR1cm5zIC4uLiB3aGlsZSB3ZSBkdXBsaWNhdGUsIHRoaXNcbiAqIGlzIGFsbCBvbiB0aGUgaG90LXBhdGgsIHNvIGl0IGlzIG5vdCBncmVhdCwgaG93ZXZlciB0aGVyZSBpcyAoc29tZSkgbWV0aG9kIGJlaGluZCB0aGUgbWFkbmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVThhU3RydWN0KHJlZ2lzdHJ5LCByZXN1bHQsIHU4YSwgW1R5cGVzLCBrZXlzXSkge1xuICAgIGNvbnN0IGNvdW50ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgaSA9IDA7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKGkgPCBjb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgVHlwZXNbaV0ocmVnaXN0cnksIHU4YS5zdWJhcnJheShvZmZzZXQpKTtcbiAgICAgICAgICAgIG9mZnNldCArPSB2YWx1ZS5pbml0aWFsVThhTGVuZ3RoIHx8IHZhbHVlLmVuY29kZWRMZW5ndGg7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBba2V5c1tpXSwgdmFsdWVdO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RmFpbHVyZShyZWdpc3RyeSwgJ2RlY29kZVU4YVN0cnVjdCcsIHJlc3VsdCwgZXJyb3IsIHU4YS5zdWJhcnJheShvZmZzZXQpLCBpLCBjb3VudCwgVHlwZXNbaV0sIGtleXNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXN1bHQsIG9mZnNldF07XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIFNwbGl0IGZyb20gZGVjb2RlVThhIHNpbmNlIHRoaXMgaXMgc3BlY2lhbGl6ZWQgdG8gMSBpbnN0YW5jZSAuLi4gd2hpbGUgd2UgZHVwbGljYXRlLCB0aGlzXG4gKiBpcyBhbGwgb24gdGhlIGhvdC1wYXRoLCBzbyBpdCBpcyBub3QgZ3JlYXQsIGhvd2V2ZXIgdGhlcmUgaXMgKHNvbWUpIG1ldGhvZCBiZWhpbmQgdGhlIG1hZG5lc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVU4YVZlYyhyZWdpc3RyeSwgcmVzdWx0LCB1OGEsIHN0YXJ0QXQsIFR5cGUpIHtcbiAgICBjb25zdCBjb3VudCA9IHJlc3VsdC5sZW5ndGg7XG4gICAgbGV0IG9mZnNldCA9IHN0YXJ0QXQ7XG4gICAgbGV0IGkgPSAwO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlIChpIDwgY291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IFR5cGUocmVnaXN0cnksIHU4YS5zdWJhcnJheShvZmZzZXQpKTtcbiAgICAgICAgICAgIG9mZnNldCArPSB2YWx1ZS5pbml0aWFsVThhTGVuZ3RoIHx8IHZhbHVlLmVuY29kZWRMZW5ndGg7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdEZhaWx1cmUocmVnaXN0cnksICdkZWNvZGVVOGFWZWMnLCByZXN1bHQsIGVycm9yLCB1OGEuc3ViYXJyYXkob2Zmc2V0KSwgaSwgY291bnQsIFR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFtvZmZzZXQsIG9mZnNldCAtIHN0YXJ0QXRdO1xufVxuIiwiY29uc3QgQk9VTkRFRCA9IFsnQlRyZWVNYXAnLCAnQlRyZWVTZXQnLCAnSGFzaE1hcCcsICdWZWMnXTtcbmNvbnN0IEFMTE9XRURfQk9YRVMgPSBCT1VOREVELmNvbmNhdChbJ0NvbXBhY3QnLCAnRG9Ob3RDb25zdHJ1Y3QnLCAnSW50JywgJ0xpbmthZ2UnLCAnUmFuZ2UnLCAnUmFuZ2VJbmNsdXNpdmUnLCAnUmVzdWx0JywgJ09wYXF1ZScsICdPcHRpb24nLCAnVUludCcsICdXcmFwcGVyS2VlcE9wYXF1ZScsICdXcmFwcGVyT3BhcXVlJ10pO1xuY29uc3QgQk9YX1BSRUNFRElORyA9IFsnPCcsICcoJywgJ1snLCAnXCInLCAnLCcsICcgJ107IC8vIHN0YXJ0IG9mIHZlYywgdHVwbGUsIGZpeGVkIGFycmF5LCBwYXJ0IG9mIHN0cnVjdCBkZWYgb3IgaW4gdHVwbGVcbmNvbnN0IG1hcHBpbmdzID0gW1xuICAgIC8vIGFsaWFzIDxUOjpJbmhlcmVudE9mZmxpbmVSZXBvcnQgYXMgSW5oZXJlbnRPZmZsaW5lUmVwb3J0Pjo6SW5oZXJlbnQgLT4gSW5oZXJlbnRPZmZsaW5lUmVwb3J0XG4gICAgYWxpYXMoJzxUOjpJbmhlcmVudE9mZmxpbmVSZXBvcnQgYXMgSW5oZXJlbnRPZmZsaW5lUmVwb3J0Pjo6SW5oZXJlbnQnLCAnSW5oZXJlbnRPZmZsaW5lUmVwb3J0JywgZmFsc2UpLFxuICAgIGFsaWFzKCdWZWNEZXF1ZTwnLCAnVmVjPCcsIGZhbHNlKSxcbiAgICAvLyA8VDo6QmFsYW5jZSBhcyBIYXNDb21wYWN0PlxuICAgIGNsZWFudXBDb21wYWN0KCksXG4gICAgLy8gQ2hhbmdlIEJvdW5kZWRWZWM8VHlwZSwgU2l6ZT4gdG8gVmVjPFR5cGU+XG4gICAgcmVtb3ZlRXh0ZW5zaW9ucygnQm91bmRlZCcsIHRydWUpLFxuICAgIC8vIENoYW5nZSBXZWFrVmVjPFR5cGU+IHRvIFZlYzxUeXBlPlxuICAgIHJlbW92ZUV4dGVuc2lvbnMoJ1dlYWsnLCBmYWxzZSksXG4gICAgLy8gUmVtb3ZlIGFsbCB0aGUgdHJhaXQgcHJlZml4ZXNcbiAgICByZW1vdmVUcmFpdHMoKSxcbiAgICAvLyByZW1vdmUgUGFpck9mPFQ+IC0+IChULCBUKVxuICAgIHJlbW92ZVBhaXJPZigpLFxuICAgIC8vIHJlbW92ZSBib3hpbmcsIGBCb3g8UHJvcG9zYWw+YCAtPiBgUHJvcG9zYWxgXG4gICAgcmVtb3ZlV3JhcCgnQm94PCcpLFxuICAgIC8vIHJlbW92ZSBnZW5lcmljcywgYE1pc2JlaGF2aW9yUmVwb3J0PEhhc2gsIEJsb2NrTnVtYmVyPmAgLT4gYE1pc2JlaGF2aW9yUmVwb3J0YFxuICAgIHJlbW92ZUdlbmVyaWNzKCksXG4gICAgLy8gYWxpYXMgU3RyaW5nIC0+IFRleHQgKGNvbXBhdCB3aXRoIGpzb25ycGMgbWV0aG9kcylcbiAgICBhbGlhcygnU3RyaW5nJywgJ1RleHQnKSxcbiAgICAvLyBhbGlhcyBWZWM8dTg+IC0+IEJ5dGVzXG4gICAgYWxpYXMoJ1ZlYzx1OD4nLCAnQnl0ZXMnKSxcbiAgICBhbGlhcygnJlxcXFxbdThcXFxcXScsICdCeXRlcycpLFxuICAgIGFsaWFzKFwiJidzdGF0aWNcXFxcW3U4XFxcXF1cIiwgJ0J5dGVzJyksXG4gICAgLy8gYWxpYXMgUmF3QWRkcmVzcyAtPiBBZGRyZXNzXG4gICAgYWxpYXMoJ1Jhd0FkZHJlc3MnLCAnQWRkcmVzcycpLFxuICAgIC8vIGxvb2t1cHMsIG1hcHBlZCB0byBBZGRyZXNzL0FjY291bnRJZCBhcyBhcHByb3ByaWF0ZSBpbiBydW50aW1lXG4gICAgYWxpYXMoJ0xvb2t1cDo6U291cmNlJywgJ0xvb2t1cFNvdXJjZScpLFxuICAgIGFsaWFzKCdMb29rdXA6OlRhcmdldCcsICdMb29rdXBUYXJnZXQnKSxcbiAgICAvLyBIQUNLIGR1cGxpY2F0aW9uIGJldHdlZW4gY29udHJhY3RzICYgcHJpbWl0aXZlcywgaG93ZXZlciBjb250cmFjdHMgcHJlZml4ZWQgd2l0aCBleGVjXG4gICAgYWxpYXMoJ2V4ZWM6OlN0b3JhZ2VLZXknLCAnQ29udHJhY3RTdG9yYWdlS2V5JyksXG4gICAgLy8gZmxhdHRlbnMgdHVwbGVzIHdpdGggb25lIHZhbHVlLCBgKEFjY291bnRJZClgIC0+IGBBY2NvdW50SWRgXG4gICAgZmxhdHRlblNpbmdsZVR1cGxlKCksXG4gICAgLy8gY29udmVydHMgOjpUeXBlIHRvIFR5cGUsIDxUIGFzIFRyYWl0PEk+Pjo6UHJvcG9zYWwgLT4gUHJvcG9zYWxcbiAgICByZW1vdmVDb2xvbnMoKSxcbiAgICAvLyByZW1vdmUgYWxsIHRyYWlsaW5nIHNwYWNlcyAtIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0aGUgbGFzdFxuICAgIHRyaW0oKVxuXTtcbmV4cG9ydCBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAodmFsdWUpID0+IHZhbHVlLnRyaW0oKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQ2xvc2luZyh2YWx1ZSwgc3RhcnQpIHtcbiAgICBsZXQgZGVwdGggPSAwO1xuICAgIGZvciAobGV0IGkgPSBzdGFydCwgY291bnQgPSB2YWx1ZS5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGlmICh2YWx1ZVtpXSA9PT0gJz4nKSB7XG4gICAgICAgICAgICBpZiAoIWRlcHRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlW2ldID09PSAnPCcpIHtcbiAgICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBjbG9zaW5nIG1hdGNoaW5nIDw+IG9uICcke3ZhbHVlfScgKHN0YXJ0ICR7c3RhcnR9KWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzKHNyYywgZGVzdCwgd2l0aENoZWNrcyA9IHRydWUpIHtcbiAgICBjb25zdCBmcm9tID0gbmV3IFJlZ0V4cChgKF4ke3NyY318JHtCT1hfUFJFQ0VESU5HLm1hcCgoYm94KSA9PiBgXFxcXCR7Ym94fSR7c3JjfWApLmpvaW4oJ3wnKX0pYCwgJ2cnKTtcbiAgICBjb25zdCB0byA9IChzcmMpID0+IHtcbiAgICAgICAgZnJvbS5sYXN0SW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gd2l0aENoZWNrcyAmJiBCT1hfUFJFQ0VESU5HLmluY2x1ZGVzKHNyY1swXSlcbiAgICAgICAgICAgID8gYCR7c3JjWzBdfSR7ZGVzdH1gXG4gICAgICAgICAgICA6IGRlc3Q7XG4gICAgfTtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiB2YWx1ZS5yZXBsYWNlKGZyb20sIHRvKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnIGFzIEhhc0NvbXBhY3QnKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdmFsdWUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGZpbmRDbG9zaW5nKHZhbHVlLCBpICsgMSkgLSAxNDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN1YnN0cmluZyhlbmQsIGVuZCArIDE0KSA9PT0gJyBhcyBIYXNDb21wYWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBgQ29tcGFjdDwke3ZhbHVlLnN1YnN0cmluZyhpICsgMSwgZW5kKX0+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuU2luZ2xlVHVwbGUoKSB7XG4gICAgY29uc3QgZnJvbTEgPSAvLFxcKS9nO1xuICAgIGNvbnN0IGZyb20yID0gL1xcKChbXixdKylcXCkvO1xuICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgZnJvbTEubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAvLyB0dXBsZXMgbWF5IGhhdmUgdHJhaWxpbmcgY29tbWFzLCBlLmcuICh1MzIsIEJsb2NrTnVtYmVyLCApXG4gICAgICAgICAgICAucmVwbGFjZShmcm9tMSwgJyknKVxuICAgICAgICAgICAgLy8gY2hhbmdlICh1MzIpIC0+IHUzMlxuICAgICAgICAgICAgLnJlcGxhY2UoZnJvbTIsICckMScpO1xuICAgIH07XG59XG5mdW5jdGlvbiByZXBsYWNlVGFnV2l0aCh2YWx1ZSwgbWF0Y2hlciwgcmVwbGFjZXIpIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpbmRleCA9IHZhbHVlLmluZGV4T2YobWF0Y2hlciwgaW5kZXggKyAxKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXggKyBtYXRjaGVyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZW5kID0gZmluZENsb3NpbmcodmFsdWUsIHN0YXJ0KTtcbiAgICAgICAgdmFsdWUgPSBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpfSR7cmVwbGFjZXIodmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKX0ke3ZhbHVlLnN1YnN0cmluZyhlbmQgKyAxKX1gO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFeHRlbnNpb25zKHR5cGUsIGlzU2l6ZWQpIHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IEJPVU5ERUQubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdGFnID0gQk9VTkRFRFtpXTtcbiAgICAgICAgICAgIHZhbHVlID0gcmVwbGFjZVRhZ1dpdGgodmFsdWUsIGAke3R5cGV9JHt0YWd9PGAsICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSB2XG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChzKSA9PiBzKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RhZ308JHtwYXJ0cy5qb2luKCcsJyl9PmA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDb2xvbnMoKSB7XG4gICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBpbmRleCA9IHZhbHVlLmluZGV4T2YoJzo6Jyk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCBzdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIHdoaWxlIChzdGFydCAhPT0gLTEgJiYgIUJPWF9QUkVDRURJTkcuaW5jbHVkZXModmFsdWVbc3RhcnRdKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnN1YnN0cmluZygwLCBzdGFydCArIDEpfSR7dmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMil9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVHZW5lcmljcygpIHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHZhbHVlLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtpXSA9PT0gJzwnKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgYWdhaW5zdCB0aGUgYWxsb3dlZCB3cmFwcGVycywgYmUgaXQgVmVjPC4uPiwgT3B0aW9uPC4uLj4gLi4uXG4gICAgICAgICAgICAgICAgY29uc3QgYm94ID0gQUxMT1dFRF9CT1hFUy5maW5kKChib3gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBpIC0gYm94Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoc3RhcnQgPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBpKSA9PT0gYm94KSAmJiAoXG4gICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBzdGFuZC1hbG9uZSwgaS5lLiBkb24ndCBjYXRjaCBFbGVjdGlvblJlc3VsdDwuLi4+IGFzIFJlc3VsdDwuLi4+XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBCT1hfUFJFQ0VESU5HLmluY2x1ZGVzKHZhbHVlW3N0YXJ0IC0gMV0pKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBub3QgZm91bmQgYW55dGhpbmcsIHVud3JhcCBnZW5lcmljIGlubmFyZHNcbiAgICAgICAgICAgICAgICBpZiAoIWJveCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBmaW5kQ2xvc2luZyh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnN1YnN0cmluZygwLCBpKX0ke3ZhbHVlLnN1YnN0cmluZyhlbmQgKyAxKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQYWlyT2YoKSB7XG4gICAgY29uc3QgcmVwbGFjZXIgPSAodikgPT4gYCgke3Z9LCR7dn0pYDtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiByZXBsYWNlVGFnV2l0aCh2YWx1ZSwgJ1BhaXJPZjwnLCByZXBsYWNlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVHJhaXRzKCkge1xuICAgIGNvbnN0IGZyb20xID0gL1xccy9nO1xuICAgIGNvbnN0IGZyb20yID0gLyhUfFNlbGYpOjovZztcbiAgICBjb25zdCBmcm9tMyA9IC88KFR8U2VsZilhc1RyYWl0Pjo6L2c7XG4gICAgY29uc3QgZnJvbTQgPSAvPFRhc1thLXpdKzo6VHJhaXQ+OjovZztcbiAgICBjb25zdCBmcm9tNSA9IC88TG9va3VwYXNTdGF0aWNMb29rdXA+L2c7XG4gICAgY29uc3QgZnJvbTYgPSAvOjpUeXBlL2c7XG4gICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICBmcm9tMS5sYXN0SW5kZXggPSAwO1xuICAgICAgICBmcm9tMi5sYXN0SW5kZXggPSAwO1xuICAgICAgICBmcm9tMy5sYXN0SW5kZXggPSAwO1xuICAgICAgICBmcm9tNC5sYXN0SW5kZXggPSAwO1xuICAgICAgICBmcm9tNS5sYXN0SW5kZXggPSAwO1xuICAgICAgICBmcm9tNi5sYXN0SW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgd2hpdGVzcGFjZXNcbiAgICAgICAgICAgIC5yZXBsYWNlKGZyb20xLCAnJylcbiAgICAgICAgICAgIC8vIGFueXRoaW5nIGBUOjo8dHlwZT5gIHRvIGVuZCB1cCBhcyBgPHR5cGU+YFxuICAgICAgICAgICAgLnJlcGxhY2UoZnJvbTIsICcnKVxuICAgICAgICAgICAgLy8gcmVwbGFjZSBgPFQgYXMgVHJhaXQ+OjpgICh3aGl0ZXNwYWNlcyB3ZXJlIHJlbW92ZWQgYWJvdmUpXG4gICAgICAgICAgICAucmVwbGFjZShmcm9tMywgJycpXG4gICAgICAgICAgICAvLyByZXBsYWNlIGA8VCBhcyBzb21ldGhpbmc6OlRyYWl0Pjo6YCAod2hpdGVzcGFjZXMgd2VyZSByZW1vdmVkIGFib3ZlKVxuICAgICAgICAgICAgLnJlcGxhY2UoZnJvbTQsICcnKVxuICAgICAgICAgICAgLy8gcmVwbGFjZSA8TG9va3VwIGFzIFN0YXRpY0xvb2t1cD5cbiAgICAgICAgICAgIC5yZXBsYWNlKGZyb201LCAnTG9va3VwJylcbiAgICAgICAgICAgIC8vIHJlcGxhY2UgYDwuLi4+OjpUeXBlYFxuICAgICAgICAgICAgLnJlcGxhY2UoZnJvbTYsICcnKTtcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVdyYXAoY2hlY2spIHtcbiAgICBjb25zdCByZXBsYWNlciA9ICh2KSA9PiB2O1xuICAgIHJldHVybiAodmFsdWUpID0+IHJlcGxhY2VUYWdXaXRoKHZhbHVlLCBjaGVjaywgcmVwbGFjZXIpO1xufVxuY29uc3Qgc2FuaXRpemVNYXAgPSBuZXcgTWFwKCk7XG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemUodmFsdWUpIHtcbiAgICBjb25zdCBzdGFydFZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICBjb25zdCBtZW1vaXplZCA9IHNhbml0aXplTWFwLmdldChzdGFydFZhbHVlKTtcbiAgICBpZiAobWVtb2l6ZWQpIHtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gc3RhcnRWYWx1ZTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBtYXBwaW5ncy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IG1hcHBpbmdzW2ldKHJlc3VsdCk7XG4gICAgfVxuICAgIHNhbml0aXplTWFwLnNldChzdGFydFZhbHVlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBiblRvQm4sIGlzQmlnSW50LCBpc0JuLCBpc0Jvb2xlYW4sIGlzQ29kZWMsIGlzTnVtYmVyLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4vKiogQGludGVybmFsICoqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UoYXJnKSB7XG4gICAgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQXJyYXkuaXNBcnJheShhcmcpO1xufVxuLyoqIEBpbnRlcm5hbCAqKi9cbmZ1bmN0aW9uIGlzRW51bShhcmcpIHtcbiAgICByZXR1cm4gaXNDb2RlYyhhcmcpICYmIGlzTnVtYmVyKGFyZy5pbmRleCkgJiYgaXNDb2RlYyhhcmcudmFsdWUpO1xufVxuLyoqIEBpbnRlcm5hbCAqKi9cbmZ1bmN0aW9uIGlzT3B0aW9uKGFyZykge1xuICAgIHJldHVybiBpc0NvZGVjKGFyZykgJiYgaXNCb29sZWFuKGFyZy5pc1NvbWUpICYmIGlzQ29kZWMoYXJnLnZhbHVlKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGlzTnVtYmVyTGlrZShhcmcpIHtcbiAgICByZXR1cm4gaXNOdW1iZXIoYXJnKSB8fCBpc0JuKGFyZykgfHwgaXNCaWdJbnQoYXJnKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIHNvcnRBcnJheShhLCBiKSB7XG4gICAgLy8gVmVjLCBUdXBsZSwgQnl0ZXMgZXRjLlxuICAgIGxldCBzb3J0UmVzID0gMDtcbiAgICBjb25zdCBtaW5MZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluTGVuOyArK2kpIHtcbiAgICAgICAgc29ydFJlcyA9IHNvcnRBc2MoYVtpXSwgYltpXSk7XG4gICAgICAgIGlmIChzb3J0UmVzICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc29ydFJlcztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNoZWNrRm9yRHVwbGljYXRlcyhjb250YWluZXIsIHNlZW4sIGFyZykge1xuICAgIC8vIENvbnZlcnQgdGhlIHZhbHVlIHRvIGhleC5cbiAgICBpZiAoaXNDb2RlYyhhcmcpKSB7XG4gICAgICAgIGNvbnN0IGhleCA9IGFyZy50b0hleCgpO1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIHNlZW4gdGhlIHZhbHVlLlxuICAgICAgICBpZiAoc2Vlbi5oYXMoaGV4KSkge1xuICAgICAgICAgICAgLy8gRHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSB2YWx1ZSBpbiAke2NvbnRhaW5lcn06ICR7c3RyaW5naWZ5KGFyZyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQoaGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vKipcbiogU29ydCBrZXlzL3ZhbHVlcyBvZiBCVHJlZVNldC9CVHJlZU1hcCBpbiBhc2NlbmRpbmcgb3JkZXIgZm9yIGVuY29kaW5nIGNvbXBhdGliaWxpdHkgd2l0aCBSdXN0J3MgQlRyZWVTZXQvQlRyZWVNYXBcbiogKGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3N0ZC9jb2xsZWN0aW9ucy9zdHJ1Y3QuQlRyZWVTZXQuaHRtbClcbiogKGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3N0ZC9jb2xsZWN0aW9ucy9zdHJ1Y3QuQlRyZWVNYXAuaHRtbClcbiovXG5leHBvcnQgZnVuY3Rpb24gc29ydEFzYyhhLCBiKSB7XG4gICAgaWYgKGlzTnVtYmVyTGlrZShhKSAmJiBpc051bWJlckxpa2UoYikpIHtcbiAgICAgICAgcmV0dXJuIGJuVG9CbihhKS5jbXAoYm5Ub0JuKGIpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE1hcCAmJiBiIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHJldHVybiBzb3J0QXNjKEFycmF5LmZyb20oYS52YWx1ZXMoKSksIEFycmF5LmZyb20oYi52YWx1ZXMoKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0VudW0oYSkgJiYgaXNFbnVtKGIpKSB7XG4gICAgICAgIHJldHVybiBzb3J0QXNjKGEuaW5kZXgsIGIuaW5kZXgpIHx8IHNvcnRBc2MoYS52YWx1ZSwgYi52YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT3B0aW9uKGEpICYmIGlzT3B0aW9uKGIpKSB7XG4gICAgICAgIHJldHVybiBzb3J0QXNjKGEuaXNOb25lID8gMCA6IDEsIGIuaXNOb25lID8gMCA6IDEpIHx8IHNvcnRBc2MoYS52YWx1ZSwgYi52YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlKGEpICYmIGlzQXJyYXlMaWtlKGIpKSB7XG4gICAgICAgIHJldHVybiBzb3J0QXJyYXkoYSwgYik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQ29kZWMoYSkgJiYgaXNDb2RlYyhiKSkge1xuICAgICAgICAvLyBUZXh0LCBCb29sIGV0Yy5cbiAgICAgICAgcmV0dXJuIHNvcnRBc2MoYS50b1U4YSh0cnVlKSwgYi50b1U4YSh0cnVlKSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQXR0ZW1wdGluZyB0byBzb3J0IHVucmVjb2duaXplZCB2YWx1ZXM6ICR7c3RyaW5naWZ5KGEpfSAodHlwZW9mICR7dHlwZW9mIGF9KSA8LT4gJHtzdHJpbmdpZnkoYil9ICh0eXBlb2YgJHt0eXBlb2YgYn0pYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gc29ydFNldChzZXQpIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20oc2V0KS5maWx0ZXIoKHZhbHVlKSA9PiBjaGVja0ZvckR1cGxpY2F0ZXMoJ0JUcmVlU2V0Jywgc2VlbiwgdmFsdWUpKS5zb3J0KHNvcnRBc2MpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzb3J0TWFwKG1hcCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgcmV0dXJuIG5ldyBNYXAoQXJyYXkuZnJvbShtYXAuZW50cmllcygpKS5maWx0ZXIoKFtrZXldKSA9PiBjaGVja0ZvckR1cGxpY2F0ZXMoJ0JUcmVlTWFwJywgc2Vlbiwga2V5KSkuc29ydCgoW2tleUFdLCBba2V5Ql0pID0+IHNvcnRBc2Moa2V5QSwga2V5QikpKTtcbn1cbiIsIi8qKlxuICogQGludGVybmFsXG4gKiBGcm9tIGEgdHlwZSBzdHJpbmcgb3IgY2xhc3MsIHJldHVybiB0aGUgYXNzb2NpYXRlZCB0eXBlIGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlVG9Db25zdHJ1Y3RvcihyZWdpc3RyeSwgdHlwZSkge1xuICAgIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHR5cGVcbiAgICAgICAgOiByZWdpc3RyeS5jcmVhdGVDbGFzc1Vuc2FmZSh0eXBlKTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKiBUYWtlcyBhbiBpbnB1dCBhcnJheSBvZiB0eXBlcyBhbmQgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBjbGFzc2VzIGZvciBpdFxuKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc1RvQ29uc3RydWN0b3JzKHJlZ2lzdHJ5LCB0eXBlcykge1xuICAgIGNvbnN0IGNvdW50ID0gdHlwZXMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdFtpXSA9IHR5cGVUb0NvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB0eXBlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICogVGFrZXMgYW4gaW5wdXQgbWFwIG9mIHRoZSBmb3JtIGB7IFtzdHJpbmddOiBzdHJpbmcgfCBDb2RlY0NsYXNzIH1gIGFuZCByZXR1cm5zIGEgbWFwIG9mIGB7IFtzdHJpbmddOiBDb2RlY0NsYXNzIH1gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1R5cGVNYXAocmVnaXN0cnksIGlucHV0KSB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGlucHV0KTtcbiAgICBjb25zdCBjb3VudCA9IGVudHJpZXMubGVuZ3RoO1xuICAgIGNvbnN0IG91dHB1dCA9IFtuZXcgQXJyYXkoY291bnQpLCBuZXcgQXJyYXkoY291bnQpXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgb3V0cHV0WzFdW2ldID0gZW50cmllc1tpXVswXTtcbiAgICAgICAgb3V0cHV0WzBdW2ldID0gdHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIGVudHJpZXNbaV1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHR5cGVzVG9NYXAocmVnaXN0cnksIFtUeXBlcywga2V5c10pIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBrZXlzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgcmVzdWx0W2tleXNbaV1dID0gcmVnaXN0cnkuZ2V0Q2xhc3NOYW1lKFR5cGVzW2ldKSB8fCBuZXcgVHlwZXNbaV0ocmVnaXN0cnkpLnRvUmF3VHlwZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBoYXNFcShvKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oby5lcSk7XG59XG4iLCJpbXBvcnQgeyBCVHJlZU1hcCwgQlRyZWVTZXQsIEJ5dGVzLCBDb2RlY1NldCwgQ29tcGFjdCwgRG9Ob3RDb25zdHJ1Y3QsIEVudW0sIEhhc2hNYXAsIEludCwgTnVsbCwgT3B0aW9uLCBSYW5nZSwgUmFuZ2VJbmNsdXNpdmUsIFJlc3VsdCwgU3RydWN0LCBUdXBsZSwgVThhRml4ZWQsIFVJbnQsIFZlYywgVmVjRml4ZWQsIFdyYXBwZXJLZWVwT3BhcXVlLCBXcmFwcGVyT3BhcXVlIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzTnVtYmVyLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBUeXBlRGVmSW5mbyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IGdldFR5cGVEZWYgfSBmcm9tICcuLi91dGlsL2dldFR5cGVEZWYuanMnO1xuZnVuY3Rpb24gZ2V0VHlwZURlZlR5cGUoeyBsb29rdXBOYW1lLCB0eXBlIH0pIHtcbiAgICByZXR1cm4gbG9va3VwTmFtZSB8fCB0eXBlO1xufVxuZnVuY3Rpb24gZ2V0U3ViRGVmQXJyYXkodmFsdWUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUuc3ViKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN1YnR5cGUgYXMgVHlwZURlZltdIGluICR7c3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLnN1Yjtcbn1cbmZ1bmN0aW9uIGdldFN1YkRlZih2YWx1ZSkge1xuICAgIGlmICghdmFsdWUuc3ViIHx8IEFycmF5LmlzQXJyYXkodmFsdWUuc3ViKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN1YnR5cGUgYXMgVHlwZURlZiBpbiAke3N0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5zdWI7XG59XG5mdW5jdGlvbiBnZXRTdWJUeXBlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGdldFR5cGVEZWZUeXBlKGdldFN1YkRlZih2YWx1ZSkpO1xufVxuZnVuY3Rpb24gZ2V0VHlwZUNsYXNzTWFwKHZhbHVlKSB7XG4gICAgY29uc3Qgc3VicyA9IGdldFN1YkRlZkFycmF5KHZhbHVlKTtcbiAgICBjb25zdCBtYXAgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBzdWJzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3ViID0gc3Vic1tpXTtcbiAgICAgICAgaWYgKCFzdWIubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBuYW1lIGZvdW5kIGluIGRlZmluaXRpb24gJHtzdHJpbmdpZnkoc3ViKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBtYXBbc3ViLm5hbWVdID0gZ2V0VHlwZURlZlR5cGUoc3ViKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbn1cbmZ1bmN0aW9uIGdldFR5cGVDbGFzc0FycmF5KHZhbHVlKSB7XG4gICAgcmV0dXJuIGdldFN1YkRlZkFycmF5KHZhbHVlKS5tYXAoZ2V0VHlwZURlZlR5cGUpO1xufVxuZnVuY3Rpb24gY3JlYXRlSW50KENsYXp6LCB7IGRpc3BsYXlOYW1lLCBsZW5ndGggfSkge1xuICAgIGlmICghaXNOdW1iZXIobGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJpdExlbmd0aCBpbmZvcm1hdGlvbiBmb3IgJHtkaXNwbGF5TmFtZSB8fCBDbGF6ei5jb25zdHJ1Y3Rvci5uYW1lfTxiaXRMZW5ndGg+YCk7XG4gICAgfVxuICAgIHJldHVybiBDbGF6ei53aXRoKGxlbmd0aCwgZGlzcGxheU5hbWUpO1xufVxuZnVuY3Rpb24gY3JlYXRlSGFzaE1hcChDbGF6eiwgdmFsdWUpIHtcbiAgICBjb25zdCBba2V5VHlwZSwgdmFsdWVUeXBlXSA9IGdldFR5cGVDbGFzc0FycmF5KHZhbHVlKTtcbiAgICByZXR1cm4gQ2xhenoud2l0aChrZXlUeXBlLCB2YWx1ZVR5cGUpO1xufVxuZnVuY3Rpb24gY3JlYXRlV2l0aFN1YihDbGF6eiwgdmFsdWUpIHtcbiAgICByZXR1cm4gQ2xhenoud2l0aChnZXRTdWJUeXBlKHZhbHVlKSk7XG59XG5jb25zdCBpbmZvTWFwcGluZyA9IHtcbiAgICBbVHlwZURlZkluZm8uQlRyZWVNYXBdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gY3JlYXRlSGFzaE1hcChCVHJlZU1hcCwgdmFsdWUpLFxuICAgIFtUeXBlRGVmSW5mby5CVHJlZVNldF06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBjcmVhdGVXaXRoU3ViKEJUcmVlU2V0LCB2YWx1ZSksXG4gICAgW1R5cGVEZWZJbmZvLkNvbXBhY3RdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gY3JlYXRlV2l0aFN1YihDb21wYWN0LCB2YWx1ZSksXG4gICAgW1R5cGVEZWZJbmZvLkRvTm90Q29uc3RydWN0XTogKF9yZWdpc3RyeSwgdmFsdWUpID0+IERvTm90Q29uc3RydWN0LndpdGgodmFsdWUuZGlzcGxheU5hbWUgfHwgdmFsdWUudHlwZSksXG4gICAgW1R5cGVEZWZJbmZvLkVudW1dOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzID0gZ2V0U3ViRGVmQXJyYXkodmFsdWUpO1xuICAgICAgICByZXR1cm4gRW51bS53aXRoKHN1YnMuZXZlcnkoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAnTnVsbCcpXG4gICAgICAgICAgICA/IHN1YnMucmVkdWNlKChvdXQsIHsgaW5kZXgsIG5hbWUgfSwgY291bnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBuYW1lIGZvdW5kIGluIHN1YiBkZWZpbml0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dFtuYW1lXSA9IGluZGV4IHx8IGNvdW50O1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgICAgIDogZ2V0VHlwZUNsYXNzTWFwKHZhbHVlKSk7XG4gICAgfSxcbiAgICBbVHlwZURlZkluZm8uSGFzaE1hcF06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBjcmVhdGVIYXNoTWFwKEhhc2hNYXAsIHZhbHVlKSxcbiAgICBbVHlwZURlZkluZm8uSW50XTogKF9yZWdpc3RyeSwgdmFsdWUpID0+IGNyZWF0ZUludChJbnQsIHZhbHVlKSxcbiAgICAvLyBXZSBoYXZlIGNpcmN1bGFyIGRlcHMgYmV0d2VlbiBMaW5rYWdlICYgU3RydWN0XG4gICAgW1R5cGVEZWZJbmZvLkxpbmthZ2VdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gYE9wdGlvbjwke2dldFN1YlR5cGUodmFsdWUpfT5gO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgIGNvbnN0IENsYXp6ID0gU3RydWN0LndpdGgoeyBwcmV2aW91czogdHlwZSwgbmV4dDogdHlwZSB9KTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBDbGF6ei5wcm90b3R5cGUudG9SYXdUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9ucyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgICAgICByZXR1cm4gYExpbmthZ2U8JHt0aGlzLm5leHQudG9SYXdUeXBlKHRydWUpfT5gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gQ2xheno7XG4gICAgfSxcbiAgICBbVHlwZURlZkluZm8uTnVsbF06IChfcmVnaXN0cnksIF92YWx1ZSkgPT4gTnVsbCxcbiAgICBbVHlwZURlZkluZm8uT3B0aW9uXTogKF9yZWdpc3RyeSwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCF2YWx1ZS5zdWIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZS5zdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHR5cGUgaW5mb3JtYXRpb24gZm9yIE9wdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5PVEUgVGhpcyBpcyBvcHQtaW4gKHVuaGFuZGxlZCksIG5vdCBieSBkZWZhdWx0XG4gICAgICAgIC8vIGlmICh2YWx1ZS5zdWIudHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgICAgIC8vICAgcmV0dXJuIE9wdGlvbkJvb2w7XG4gICAgICAgIC8vIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVdpdGhTdWIoT3B0aW9uLCB2YWx1ZSk7XG4gICAgfSxcbiAgICBbVHlwZURlZkluZm8uUGxhaW5dOiAocmVnaXN0cnksIHZhbHVlKSA9PiByZWdpc3RyeS5nZXRPclVua25vd24odmFsdWUudHlwZSksXG4gICAgW1R5cGVEZWZJbmZvLlJhbmdlXTogKF9yZWdpc3RyeSwgdmFsdWUpID0+IGNyZWF0ZVdpdGhTdWIoUmFuZ2UsIHZhbHVlKSxcbiAgICBbVHlwZURlZkluZm8uUmFuZ2VJbmNsdXNpdmVdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gY3JlYXRlV2l0aFN1YihSYW5nZUluY2x1c2l2ZSwgdmFsdWUpLFxuICAgIFtUeXBlRGVmSW5mby5SZXN1bHRdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBbT2ssIEVycl0gPSBnZXRUeXBlQ2xhc3NBcnJheSh2YWx1ZSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgcmV0dXJuIFJlc3VsdC53aXRoKHsgRXJyLCBPayB9KTtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5TZXRdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gQ29kZWNTZXQud2l0aChnZXRTdWJEZWZBcnJheSh2YWx1ZSkucmVkdWNlKChyZXN1bHQsIHsgaW5kZXgsIG5hbWUgfSkgPT4ge1xuICAgICAgICBpZiAoIW5hbWUgfHwgIWlzTnVtYmVyKGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBuYW1lIGZvdW5kIGluIHN1YiBkZWZpbml0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W25hbWVdID0gaW5kZXg7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pLCB2YWx1ZS5sZW5ndGgpLFxuICAgIFtUeXBlRGVmSW5mby5TaV06IChyZWdpc3RyeSwgdmFsdWUpID0+IGdldFR5cGVDbGFzcyhyZWdpc3RyeSwgcmVnaXN0cnkubG9va3VwLmdldFR5cGVEZWYodmFsdWUudHlwZSkpLFxuICAgIFtUeXBlRGVmSW5mby5TdHJ1Y3RdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gU3RydWN0LndpdGgoZ2V0VHlwZUNsYXNzTWFwKHZhbHVlKSwgdmFsdWUuYWxpYXMpLFxuICAgIFtUeXBlRGVmSW5mby5UdXBsZV06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBUdXBsZS53aXRoKGdldFR5cGVDbGFzc0FycmF5KHZhbHVlKSksXG4gICAgW1R5cGVEZWZJbmZvLlVJbnRdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gY3JlYXRlSW50KFVJbnQsIHZhbHVlKSxcbiAgICBbVHlwZURlZkluZm8uVmVjXTogKF9yZWdpc3RyeSwgeyBzdWIgfSkgPT4ge1xuICAgICAgICBpZiAoIXN1YiB8fCBBcnJheS5pc0FycmF5KHN1YikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdmVjdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChzdWIudHlwZSA9PT0gJ3U4J1xuICAgICAgICAgICAgPyBCeXRlc1xuICAgICAgICAgICAgOiBWZWMud2l0aChnZXRUeXBlRGVmVHlwZShzdWIpKSk7XG4gICAgfSxcbiAgICBbVHlwZURlZkluZm8uVmVjRml4ZWRdOiAoX3JlZ2lzdHJ5LCB7IGRpc3BsYXlOYW1lLCBsZW5ndGgsIHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghaXNOdW1iZXIobGVuZ3RoKSB8fCAhc3ViIHx8IEFycmF5LmlzQXJyYXkoc3ViKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsZW5ndGggJiB0eXBlIGluZm9ybWF0aW9uIGZvciBmaXhlZCB2ZWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHN1Yi50eXBlID09PSAndTgnXG4gICAgICAgICAgICA/IFU4YUZpeGVkLndpdGgoKGxlbmd0aCAqIDgpLCBkaXNwbGF5TmFtZSlcbiAgICAgICAgICAgIDogVmVjRml4ZWQud2l0aChnZXRUeXBlRGVmVHlwZShzdWIpLCBsZW5ndGgpKTtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5XcmFwcGVyS2VlcE9wYXF1ZV06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBjcmVhdGVXaXRoU3ViKFdyYXBwZXJLZWVwT3BhcXVlLCB2YWx1ZSksXG4gICAgW1R5cGVEZWZJbmZvLldyYXBwZXJPcGFxdWVdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gY3JlYXRlV2l0aFN1YihXcmFwcGVyT3BhcXVlLCB2YWx1ZSlcbn07XG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0VHlwZUNsYXNzKHJlZ2lzdHJ5LCB0eXBlRGVmKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgVHlwZSA9IGluZm9NYXBwaW5nW3R5cGVEZWYuaW5mb10ocmVnaXN0cnksIHR5cGVEZWYpO1xuICAgICAgICBpZiAoIVR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2xhc3MgY3JlYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IGNsb2JiZXIgYW55IGV4aXN0aW5nXG4gICAgICAgIGlmICghVHlwZS5fX2ZhbGxiYWNrVHlwZSAmJiB0eXBlRGVmLmZhbGxiYWNrVHlwZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSAuLi50aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIHdlIGFjdHVhbGx5IGFzc2lnbiB0aGlzLi4uXG4gICAgICAgICAgICBUeXBlLl9fZmFsbGJhY2tUeXBlID0gdHlwZURlZi5mYWxsYmFja1R5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25zdHJ1Y3QgY2xhc3MgZnJvbSAke3N0cmluZ2lmeSh0eXBlRGVmKX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNsYXNzKHJlZ2lzdHJ5LCB0eXBlRGVmKSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmdldFVuc2FmZSh0eXBlRGVmLnR5cGUsIGZhbHNlLCB0eXBlRGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGFzc1Vuc2FmZShyZWdpc3RyeSwgdHlwZSkge1xuICAgIHJldHVybiAoXG4gICAgLy8ganVzdCByZXRyaWV2ZSB2aWEgbmFtZSwgbm8gY3JlYXRpb24gdmlhIHR5cGVEZWZcbiAgICByZWdpc3RyeS5nZXRVbnNhZmUodHlwZSkgfHxcbiAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyB0eXBlLCBjcmVhdGUgdGhlIGNsYXNzIHZpYSB0eXBlRGVmXG4gICAgICAgIGdldFR5cGVDbGFzcyhyZWdpc3RyeSwgcmVnaXN0cnkuaXNMb29rdXBUeXBlKHR5cGUpXG4gICAgICAgICAgICA/IHJlZ2lzdHJ5Lmxvb2t1cC5nZXRUeXBlRGVmKHR5cGUpXG4gICAgICAgICAgICA6IGdldFR5cGVEZWYodHlwZSkpKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY2xhc3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlLmpzJztcbiIsImltcG9ydCB7IE9wdGlvbiB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBpc0hleCwgaXNVOGEsIHU4YUVxLCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVDbGFzc1Vuc2FmZSB9IGZyb20gJy4vY2xhc3MuanMnO1xuZnVuY3Rpb24gY2hlY2tJbnN0YW5jZShjcmVhdGVkLCBtYXRjaGVyKSB7XG4gICAgY29uc3QgdThhID0gY3JlYXRlZC50b1U4YSgpO1xuICAgIGNvbnN0IHJhd1R5cGUgPSBjcmVhdGVkLnRvUmF3VHlwZSgpO1xuICAgIGNvbnN0IGlzT2sgPSAoXG4gICAgLy8gZnVsbCBtYXRjaCwgYWxsIG9rXG4gICAgdThhRXEodThhLCBtYXRjaGVyKSB8fFxuICAgICAgICAoXG4gICAgICAgIC8vIG9uIGEgbGVuZ3RoLXByZWZpeGVkIHR5cGUsIGp1c3QgY2hlY2sgdGhlIGFjdHVhbCBsZW5ndGhcbiAgICAgICAgWydCeXRlcycsICdUZXh0JywgJ1R5cGUnXS5pbmNsdWRlcyhyYXdUeXBlKSAmJlxuICAgICAgICAgICAgbWF0Y2hlci5sZW5ndGggPT09IGNyZWF0ZWQubGVuZ3RoKSB8fFxuICAgICAgICAoXG4gICAgICAgIC8vIHdoZW4gdGhlIGNyZWF0ZWQgaXMgZW1wdHkgYW5kIG1hdGNoZXIgaXMgYWxzbyBlbXB0eSwgbGV0IGl0IHNsaWRlLi4uXG4gICAgICAgIGNyZWF0ZWQuaXNFbXB0eSAmJlxuICAgICAgICAgICAgbWF0Y2hlci5ldmVyeSgodikgPT4gIXYpKSk7XG4gICAgaWYgKCFpc09rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyYXdUeXBlfTo6IERlY29kZWQgaW5wdXQgZG9lc24ndCBtYXRjaCBpbnB1dCwgcmVjZWl2ZWQgJHt1OGFUb0hleChtYXRjaGVyLCA1MTIpfSAoJHttYXRjaGVyLmxlbmd0aH0gYnl0ZXMpLCBjcmVhdGVkICR7dThhVG9IZXgodThhLCA1MTIpfSAoJHt1OGEubGVuZ3RofSBieXRlcylgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja1BlZGFudGljKGNyZWF0ZWQsIFt2YWx1ZV0pIHtcbiAgICBpZiAoaXNVOGEodmFsdWUpKSB7XG4gICAgICAgIGNoZWNrSW5zdGFuY2UoY3JlYXRlZCwgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgY2hlY2tJbnN0YW5jZShjcmVhdGVkLCB1OGFUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRUeXBlKHJlZ2lzdHJ5LCBUeXBlLCBwYXJhbXMgPSBbXSwgeyBibG9ja0hhc2gsIGlzRmFsbGJhY2ssIGlzT3B0aW9uYWwsIGlzUGVkYW50aWMgfSA9IHt9KSB7XG4gICAgY29uc3QgY3JlYXRlZCA9IG5ldyAoaXNPcHRpb25hbFxuICAgICAgICA/IE9wdGlvbi53aXRoKFR5cGUpXG4gICAgICAgIDogVHlwZSkocmVnaXN0cnksIC4uLnBhcmFtcyk7XG4gICAgaXNQZWRhbnRpYyAmJiBjaGVja1BlZGFudGljKGNyZWF0ZWQsIHBhcmFtcyk7XG4gICAgaWYgKGJsb2NrSGFzaCkge1xuICAgICAgICBjcmVhdGVkLmNyZWF0ZWRBdEhhc2ggPSBjcmVhdGVUeXBlVW5zYWZlKHJlZ2lzdHJ5LCAnQmxvY2tIYXNoJywgW2Jsb2NrSGFzaF0pO1xuICAgIH1cbiAgICBpZiAoaXNGYWxsYmFjaykge1xuICAgICAgICBjcmVhdGVkLmlzU3RvcmFnZUZhbGxiYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZVVuc2FmZShyZWdpc3RyeSwgdHlwZSwgcGFyYW1zID0gW10sIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBDbGF6eiA9IG51bGw7XG4gICAgbGV0IGZpcnN0RXJyb3IgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICAgIENsYXp6ID0gY3JlYXRlQ2xhc3NVbnNhZmUocmVnaXN0cnksIHR5cGUpO1xuICAgICAgICByZXR1cm4gaW5pdFR5cGUocmVnaXN0cnksIENsYXp6LCBwYXJhbXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZmlyc3RFcnJvciA9IG5ldyBFcnJvcihgY3JlYXRlVHlwZSgke3R5cGV9KTo6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKENsYXp6Py5fX2ZhbGxiYWNrVHlwZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgQ2xhenogPSBjcmVhdGVDbGFzc1Vuc2FmZShyZWdpc3RyeSwgQ2xhenouX19mYWxsYmFja1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluaXRUeXBlKHJlZ2lzdHJ5LCBDbGF6eiwgcGFyYW1zLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAvLyBzd2FsbG93LCB3ZSB3aWxsIHRocm93IHRoZSBmaXJzdCBlcnJvciBhZ2FpblxuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGZpcnN0RXJyb3I7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL2NyZWF0ZS9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWwvaW5kZXguanMnO1xuIiwiZXhwb3J0IGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZScsIHBhdGg6IChpbXBvcnQubWV0YSAmJiBpbXBvcnQubWV0YS51cmwpID8gbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLnN1YnN0cmluZygwLCBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpIDogJ2F1dG8nLCB0eXBlOiAnZXNtJywgdmVyc2lvbjogJzExLjIuMScgfTtcbiIsImV4cG9ydCB2YXIgVHlwZURlZkluZm87XG4oZnVuY3Rpb24gKFR5cGVEZWZJbmZvKSB7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJCVHJlZU1hcFwiXSA9IDBdID0gXCJCVHJlZU1hcFwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiQlRyZWVTZXRcIl0gPSAxXSA9IFwiQlRyZWVTZXRcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIkNvbXBhY3RcIl0gPSAyXSA9IFwiQ29tcGFjdFwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiRG9Ob3RDb25zdHJ1Y3RcIl0gPSAzXSA9IFwiRG9Ob3RDb25zdHJ1Y3RcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIkVudW1cIl0gPSA0XSA9IFwiRW51bVwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiSGFzaE1hcFwiXSA9IDVdID0gXCJIYXNoTWFwXCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJJbnRcIl0gPSA2XSA9IFwiSW50XCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJMaW5rYWdlXCJdID0gN10gPSBcIkxpbmthZ2VcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIk51bGxcIl0gPSA4XSA9IFwiTnVsbFwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiT3B0aW9uXCJdID0gOV0gPSBcIk9wdGlvblwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiUGxhaW5cIl0gPSAxMF0gPSBcIlBsYWluXCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJSYW5nZVwiXSA9IDExXSA9IFwiUmFuZ2VcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlJhbmdlSW5jbHVzaXZlXCJdID0gMTJdID0gXCJSYW5nZUluY2x1c2l2ZVwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiUmVzdWx0XCJdID0gMTNdID0gXCJSZXN1bHRcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlNldFwiXSA9IDE0XSA9IFwiU2V0XCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJTaVwiXSA9IDE1XSA9IFwiU2lcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlN0cnVjdFwiXSA9IDE2XSA9IFwiU3RydWN0XCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJUdXBsZVwiXSA9IDE3XSA9IFwiVHVwbGVcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlVJbnRcIl0gPSAxOF0gPSBcIlVJbnRcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlZlY1wiXSA9IDE5XSA9IFwiVmVjXCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJWZWNGaXhlZFwiXSA9IDIwXSA9IFwiVmVjRml4ZWRcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIldyYXBwZXJLZWVwT3BhcXVlXCJdID0gMjFdID0gXCJXcmFwcGVyS2VlcE9wYXF1ZVwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiV3JhcHBlck9wYXF1ZVwiXSA9IDIyXSA9IFwiV3JhcHBlck9wYXF1ZVwiO1xufSkoVHlwZURlZkluZm8gfHwgKFR5cGVEZWZJbmZvID0ge30pKTtcbiIsImltcG9ydCB7IGlzTnVtYmVyLCBpc1VuZGVmaW5lZCwgb2JqZWN0U3ByZWFkLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBUeXBlRGVmSW5mbyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmNvbnN0IHN0cmluZ0lkZW50aXR5ID0gKHZhbHVlKSA9PiB2YWx1ZS50b1N0cmluZygpO1xuY29uc3QgSU5GT19XUkFQID0gWydCVHJlZU1hcCcsICdCVHJlZVNldCcsICdDb21wYWN0JywgJ0hhc2hNYXAnLCAnT3B0aW9uJywgJ1Jlc3VsdCcsICdWZWMnXTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJhbXNOb3RhdGlvbihvdXRlciwgaW5uZXIsIHRyYW5zZm9ybSA9IHN0cmluZ0lkZW50aXR5KSB7XG4gICAgcmV0dXJuIGAke291dGVyfSR7aW5uZXJcbiAgICAgICAgPyBgPCR7KEFycmF5LmlzQXJyYXkoaW5uZXIpID8gaW5uZXIgOiBbaW5uZXJdKS5tYXAodHJhbnNmb3JtKS5qb2luKCcsICcpfT5gXG4gICAgICAgIDogJyd9YDtcbn1cbmZ1bmN0aW9uIGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsIG91dGVyKSB7XG4gICAgY29uc3QgeyBpbmZvLCBzdWIgfSA9IHR5cGVEZWY7XG4gICAgc3dpdGNoIChpbmZvKSB7XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uQlRyZWVNYXA6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uQlRyZWVTZXQ6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uQ29tcGFjdDpcbiAgICAgICAgY2FzZSBUeXBlRGVmSW5mby5IYXNoTWFwOlxuICAgICAgICBjYXNlIFR5cGVEZWZJbmZvLkxpbmthZ2U6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uT3B0aW9uOlxuICAgICAgICBjYXNlIFR5cGVEZWZJbmZvLlJhbmdlOlxuICAgICAgICBjYXNlIFR5cGVEZWZJbmZvLlJhbmdlSW5jbHVzaXZlOlxuICAgICAgICBjYXNlIFR5cGVEZWZJbmZvLlJlc3VsdDpcbiAgICAgICAgY2FzZSBUeXBlRGVmSW5mby5WZWM6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uV3JhcHBlcktlZXBPcGFxdWU6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uV3JhcHBlck9wYXF1ZTpcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXNOb3RhdGlvbihvdXRlciwgc3ViLCAocCkgPT4gZW5jb2RlVHlwZURlZihyZWdpc3RyeSwgcCkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBlbmNvZGUgJHtzdHJpbmdpZnkodHlwZURlZil9IHdpdGggcGFyYW1zYCk7XG59XG5mdW5jdGlvbiBlbmNvZGVTdWJUeXBlcyhyZWdpc3RyeSwgc3ViLCBhc0VudW0sIGV4dHJhKSB7XG4gICAgY29uc3QgbmFtZXMgPSBzdWIubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSk7XG4gICAgaWYgKCFuYW1lcy5ldmVyeSgobikgPT4gISFuKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN1YnR5cGVzIGRvZXMgbm90IGhhdmUgY29uc2lzdGVudCBuYW1lcywgJHtuYW1lcy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBpbm5lciA9IG9iamVjdFNwcmVhZCh7fSwgZXh0cmEpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHN1Yi5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IHN1YltpXTtcbiAgICAgICAgaWYgKCFkZWYubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBuYW1lIGZvdW5kIGluICR7c3RyaW5naWZ5KGRlZil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5uZXJbZGVmLm5hbWVdID0gZW5jb2RlVHlwZURlZihyZWdpc3RyeSwgZGVmKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ2lmeShhc0VudW1cbiAgICAgICAgPyB7IF9lbnVtOiBpbm5lciB9XG4gICAgICAgIDogaW5uZXIpO1xufVxuY29uc3QgZW5jb2RlcnMgPSB7XG4gICAgW1R5cGVEZWZJbmZvLkJUcmVlTWFwXTogKHJlZ2lzdHJ5LCB0eXBlRGVmKSA9PiBlbmNvZGVXaXRoUGFyYW1zKHJlZ2lzdHJ5LCB0eXBlRGVmLCAnQlRyZWVNYXAnKSxcbiAgICBbVHlwZURlZkluZm8uQlRyZWVTZXRdOiAocmVnaXN0cnksIHR5cGVEZWYpID0+IGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsICdCVHJlZVNldCcpLFxuICAgIFtUeXBlRGVmSW5mby5Db21wYWN0XTogKHJlZ2lzdHJ5LCB0eXBlRGVmKSA9PiBlbmNvZGVXaXRoUGFyYW1zKHJlZ2lzdHJ5LCB0eXBlRGVmLCAnQ29tcGFjdCcpLFxuICAgIFtUeXBlRGVmSW5mby5Eb05vdENvbnN0cnVjdF06IChyZWdpc3RyeSwgeyBkaXNwbGF5TmFtZSwgbG9va3VwSW5kZXgsIGxvb2t1cE5hbWUgfSkgPT4gYERvTm90Q29uc3RydWN0PCR7bG9va3VwTmFtZSB8fCBkaXNwbGF5TmFtZSB8fCAoaXNVbmRlZmluZWQobG9va3VwSW5kZXgpID8gJ1Vua25vd24nIDogcmVnaXN0cnkuY3JlYXRlTG9va3VwVHlwZShsb29rdXBJbmRleCkpfT5gLFxuICAgIFtUeXBlRGVmSW5mby5FbnVtXTogKHJlZ2lzdHJ5LCB7IHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbmNvZGUgRW51bSB0eXBlJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYy1saWtlIGVudW1zIGhhdmUgYWxsIE51bGwgZW50cmllc1xuICAgICAgICAvLyBUT0RPIFdlIG5lZWQgdG8gdGFrZSB0aGUgZGlzY2ltaW5hbnQgaW50byBhY2NvdW50IGFuZCBhdXRvLWFkZCBlbXB0eSBlbnRyaWVzXG4gICAgICAgIHJldHVybiBzdWIuZXZlcnkoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAnTnVsbCcpXG4gICAgICAgICAgICA/IHN0cmluZ2lmeSh7IF9lbnVtOiBzdWIubWFwKCh7IG5hbWUgfSwgaW5kZXgpID0+IGAke25hbWUgfHwgYEVtcHR5JHtpbmRleH1gfWApIH0pXG4gICAgICAgICAgICA6IGVuY29kZVN1YlR5cGVzKHJlZ2lzdHJ5LCBzdWIsIHRydWUpO1xuICAgIH0sXG4gICAgW1R5cGVEZWZJbmZvLkhhc2hNYXBdOiAocmVnaXN0cnksIHR5cGVEZWYpID0+IGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsICdIYXNoTWFwJyksXG4gICAgW1R5cGVEZWZJbmZvLkludF06IChfcmVnaXN0cnksIHsgbGVuZ3RoID0gMzIgfSkgPT4gYEludDwke2xlbmd0aH0+YCxcbiAgICBbVHlwZURlZkluZm8uTGlua2FnZV06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ0xpbmthZ2UnKSxcbiAgICBbVHlwZURlZkluZm8uTnVsbF06IChfcmVnaXN0cnksIF90eXBlRGVmKSA9PiAnTnVsbCcsXG4gICAgW1R5cGVEZWZJbmZvLk9wdGlvbl06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ09wdGlvbicpLFxuICAgIFtUeXBlRGVmSW5mby5QbGFpbl06IChfcmVnaXN0cnksIHsgZGlzcGxheU5hbWUsIHR5cGUgfSkgPT4gZGlzcGxheU5hbWUgfHwgdHlwZSxcbiAgICBbVHlwZURlZkluZm8uUmFuZ2VdOiAocmVnaXN0cnksIHR5cGVEZWYpID0+IGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsICdSYW5nZScpLFxuICAgIFtUeXBlRGVmSW5mby5SYW5nZUluY2x1c2l2ZV06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ1JhbmdlSW5jbHVzaXZlJyksXG4gICAgW1R5cGVEZWZJbmZvLlJlc3VsdF06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ1Jlc3VsdCcpLFxuICAgIFtUeXBlRGVmSW5mby5TZXRdOiAoX3JlZ2lzdHJ5LCB7IGxlbmd0aCA9IDgsIHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbmNvZGUgU2V0IHR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIF9zZXQ6IHN1Yi5yZWR1Y2UoKGFsbCwgeyBpbmRleCwgbmFtZSB9LCBjb3VudCkgPT4gb2JqZWN0U3ByZWFkKGFsbCwgeyBbYCR7bmFtZSB8fCBgVW5rbm93biR7aW5kZXggfHwgY291bnR9YH1gXTogaW5kZXggfHwgY291bnQgfSksIHsgX2JpdExlbmd0aDogbGVuZ3RoIHx8IDggfSlcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBbVHlwZURlZkluZm8uU2ldOiAoX3JlZ2lzdHJ5LCB7IGxvb2t1cE5hbWUsIHR5cGUgfSkgPT4gbG9va3VwTmFtZSB8fCB0eXBlLFxuICAgIFtUeXBlRGVmSW5mby5TdHJ1Y3RdOiAocmVnaXN0cnksIHsgYWxpYXMsIHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbmNvZGUgU3RydWN0IHR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2RlU3ViVHlwZXMocmVnaXN0cnksIHN1YiwgZmFsc2UsIGFsaWFzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBfYWxpYXM6IFsuLi5hbGlhcy5lbnRyaWVzKCldLnJlZHVjZSgoYWxsLCBbaywgdl0pID0+IG9iamVjdFNwcmVhZChhbGwsIHsgW2tdOiB2IH0pLCB7fSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pO1xuICAgIH0sXG4gICAgW1R5cGVEZWZJbmZvLlR1cGxlXTogKHJlZ2lzdHJ5LCB7IHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbmNvZGUgVHVwbGUgdHlwZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgKCR7c3ViLm1hcCgodHlwZSkgPT4gZW5jb2RlVHlwZURlZihyZWdpc3RyeSwgdHlwZSkpLmpvaW4oJywnKX0pYDtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5VSW50XTogKF9yZWdpc3RyeSwgeyBsZW5ndGggPSAzMiB9KSA9PiBgVUludDwke2xlbmd0aH0+YCxcbiAgICBbVHlwZURlZkluZm8uVmVjXTogKHJlZ2lzdHJ5LCB0eXBlRGVmKSA9PiBlbmNvZGVXaXRoUGFyYW1zKHJlZ2lzdHJ5LCB0eXBlRGVmLCAnVmVjJyksXG4gICAgW1R5cGVEZWZJbmZvLlZlY0ZpeGVkXTogKF9yZWdpc3RyeSwgeyBsZW5ndGgsIHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghaXNOdW1iZXIobGVuZ3RoKSB8fCAhc3ViIHx8IEFycmF5LmlzQXJyYXkoc3ViKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZW5jb2RlIFZlY0ZpeGVkIHR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFske3N1Yi50eXBlfTske2xlbmd0aH1dYDtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5XcmFwcGVyS2VlcE9wYXF1ZV06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ1dyYXBwZXJLZWVwT3BhcXVlJyksXG4gICAgW1R5cGVEZWZJbmZvLldyYXBwZXJPcGFxdWVdOiAocmVnaXN0cnksIHR5cGVEZWYpID0+IGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsICdXcmFwcGVyT3BhcXVlJylcbn07XG5mdW5jdGlvbiBlbmNvZGVUeXBlKHJlZ2lzdHJ5LCB0eXBlRGVmLCB3aXRoTG9va3VwID0gdHJ1ZSkge1xuICAgIHJldHVybiB3aXRoTG9va3VwICYmIHR5cGVEZWYubG9va3VwTmFtZVxuICAgICAgICA/IHR5cGVEZWYubG9va3VwTmFtZVxuICAgICAgICA6IGVuY29kZXJzW3R5cGVEZWYuaW5mb10ocmVnaXN0cnksIHR5cGVEZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVR5cGVEZWYocmVnaXN0cnksIHR5cGVEZWYpIHtcbiAgICAvLyBJbiB0aGUgY2FzZSBvZiBjb250cmFjdHMgd2UgZG8gaGF2ZSB0aGUgdW5mb3J0dW5hdGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBkaXNwbGF5TmFtZSB3b3VsZFxuICAgIC8vIHJlZmVyIHRvIFwiT3B0aW9uXCIgd2hlbiBpdCBpcyBhbiBvcHRpb24uIEZvciB0aGVzZSwgc3RyaW5nIGl0IG91dCwgb25seSB1c2luZyB3aGVuIGFjdHVhbGx5XG4gICAgLy8gbm90IGEgdG9wLWxldmVsIGVsZW1lbnQgdG8gYmUgdXNlZFxuICAgIHJldHVybiAodHlwZURlZi5kaXNwbGF5TmFtZSAmJiAhSU5GT19XUkFQLnNvbWUoKGkpID0+IHR5cGVEZWYuZGlzcGxheU5hbWUgPT09IGkpKVxuICAgICAgICA/IHR5cGVEZWYuZGlzcGxheU5hbWVcbiAgICAgICAgOiBlbmNvZGVUeXBlKHJlZ2lzdHJ5LCB0eXBlRGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVHlwZVN0cmluZyhyZWdpc3RyeSwgdHlwZURlZikge1xuICAgIHJldHVybiBvYmplY3RTcHJlYWQoe30sIHR5cGVEZWYsIHtcbiAgICAgICAgdHlwZTogZW5jb2RlVHlwZShyZWdpc3RyeSwgdHlwZURlZiwgZmFsc2UpXG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBzYW5pdGl6ZSB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBpc051bWJlciwgaXNTdHJpbmcsIG9iamVjdFNwcmVhZCwgc3RyaW5naWZ5IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgVHlwZURlZkluZm8gfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyB0eXBlU3BsaXQgfSBmcm9tICcuL3R5cGVTcGxpdC5qcyc7XG5jb25zdCBLTk9XTl9JTlRFUk5BTFMgPSBbJ19hbGlhcycsICdfZmFsbGJhY2snXTtcbmZ1bmN0aW9uIGdldFR5cGVTdHJpbmcodHlwZU9yT2JqKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHR5cGVPck9iailcbiAgICAgICAgPyB0eXBlT3JPYmoudG9TdHJpbmcoKVxuICAgICAgICA6IHN0cmluZ2lmeSh0eXBlT3JPYmopO1xufVxuZnVuY3Rpb24gaXNSdXN0RW51bShkZXRhaWxzKSB7XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhkZXRhaWxzKTtcbiAgICBpZiAodmFsdWVzLnNvbWUoKHYpID0+IGlzTnVtYmVyKHYpKSkge1xuICAgICAgICBpZiAoIXZhbHVlcy5ldmVyeSgodikgPT4gaXNOdW1iZXIodikgJiYgdiA+PSAwICYmIHYgPD0gMjU1KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG51bWJlci1pbmRleGVkIGVudW0gZGVmaW5pdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBfZGVjb2RlRW51bSh2YWx1ZSwgZGV0YWlscywgY291bnQsIGZhbGxiYWNrVHlwZSkge1xuICAgIHZhbHVlLmluZm8gPSBUeXBlRGVmSW5mby5FbnVtO1xuICAgIHZhbHVlLmZhbGxiYWNrVHlwZSA9IGZhbGxiYWNrVHlwZTtcbiAgICAvLyBub3QgYXMgcHJldHR5LCBidXQgcmVtYWluIGNvbXBhdGlibGUgd2l0aCBvbzcgZm9yIGJvdGggc3RydWN0IGFuZCBBcnJheSB0eXBlc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRldGFpbHMpKSB7XG4gICAgICAgIHZhbHVlLnN1YiA9IGRldGFpbHMubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSdXN0RW51bShkZXRhaWxzKSkge1xuICAgICAgICB2YWx1ZS5zdWIgPSBPYmplY3QuZW50cmllcyhkZXRhaWxzKS5tYXAoKFtuYW1lLCB0eXBlT3JPYmpdLCBpbmRleCkgPT4gb2JqZWN0U3ByZWFkKHt9LCBnZXRUeXBlRGVmKGdldFR5cGVTdHJpbmcodHlwZU9yT2JqIHx8ICdOdWxsJyksIHsgbmFtZSB9LCBjb3VudCksIHsgaW5kZXggfSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFsdWUuc3ViID0gT2JqZWN0LmVudHJpZXMoZGV0YWlscykubWFwKChbbmFtZSwgaW5kZXhdKSA9PiAoe1xuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5QbGFpbixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0eXBlOiAnTnVsbCdcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfZGVjb2RlU2V0KHZhbHVlLCBkZXRhaWxzLCBmYWxsYmFja1R5cGUpIHtcbiAgICB2YWx1ZS5pbmZvID0gVHlwZURlZkluZm8uU2V0O1xuICAgIHZhbHVlLmZhbGxiYWNrVHlwZSA9IGZhbGxiYWNrVHlwZTtcbiAgICB2YWx1ZS5sZW5ndGggPSBkZXRhaWxzLl9iaXRMZW5ndGg7XG4gICAgdmFsdWUuc3ViID0gT2JqZWN0XG4gICAgICAgIC5lbnRyaWVzKGRldGFpbHMpXG4gICAgICAgIC5maWx0ZXIoKFtuYW1lXSkgPT4gIW5hbWUuc3RhcnRzV2l0aCgnXycpKVxuICAgICAgICAubWFwKChbbmFtZSwgaW5kZXhdKSA9PiAoe1xuICAgICAgICBpbmRleCxcbiAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH0pKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfZGVjb2RlU3RydWN0KHZhbHVlLCB0eXBlLCBfLCBjb3VudCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodHlwZSk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCk7XG4gICAgaWYgKHBhcnNlZC5fZW51bSkge1xuICAgICAgICByZXR1cm4gX2RlY29kZUVudW0odmFsdWUsIHBhcnNlZC5fZW51bSwgY291bnQsIHBhcnNlZC5fZmFsbGJhY2spO1xuICAgIH1cbiAgICBlbHNlIGlmIChwYXJzZWQuX3NldCkge1xuICAgICAgICByZXR1cm4gX2RlY29kZVNldCh2YWx1ZSwgcGFyc2VkLl9zZXQsIHBhcnNlZC5fZmFsbGJhY2spO1xuICAgIH1cbiAgICB2YWx1ZS5hbGlhcyA9IHBhcnNlZC5fYWxpYXNcbiAgICAgICAgPyBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHBhcnNlZC5fYWxpYXMpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB2YWx1ZS5mYWxsYmFja1R5cGUgPSBwYXJzZWQuX2ZhbGxiYWNrO1xuICAgIHZhbHVlLnN1YiA9IGtleXNcbiAgICAgICAgLmZpbHRlcigobmFtZSkgPT4gIUtOT1dOX0lOVEVSTkFMUy5pbmNsdWRlcyhuYW1lKSlcbiAgICAgICAgLm1hcCgobmFtZSkgPT4gZ2V0VHlwZURlZihnZXRUeXBlU3RyaW5nKHBhcnNlZFtuYW1lXSksIHsgbmFtZSB9LCBjb3VudCkpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIF9kZWNvZGVGaXhlZFZlYyh2YWx1ZSwgdHlwZSwgXywgY291bnQpIHtcbiAgICBjb25zdCBtYXggPSB0eXBlLmxlbmd0aCAtIDE7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgbGV0IGlubmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgKGkgPCBtYXgpICYmIChpbmRleCA9PT0gLTEpOyBpKyspIHtcbiAgICAgICAgc3dpdGNoICh0eXBlW2ldKSB7XG4gICAgICAgICAgICBjYXNlICc7Jzoge1xuICAgICAgICAgICAgICAgIGlmIChpbm5lciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgIGlubmVyKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgY2FzZSAnPic6XG4gICAgICAgICAgICAgICAgaW5uZXItLTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfTogVW5hYmxlIHRvIGV4dHJhY3QgbG9jYXRpb24gb2YgJzsnYCk7XG4gICAgfVxuICAgIGNvbnN0IHZlY1R5cGUgPSB0eXBlLnN1YnN0cmluZygxLCBpbmRleCk7XG4gICAgY29uc3QgW3N0ckxlbmd0aCwgZGlzcGxheU5hbWVdID0gdHlwZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBtYXgpLnNwbGl0KCc7Jyk7XG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoc3RyTGVuZ3RoLnRyaW0oKSwgMTApO1xuICAgIGlmIChsZW5ndGggPiAyMDQ4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfTogT25seSBzdXBwb3J0IGZvciBbVHlwZTsgPGxlbmd0aD5dLCB3aGVyZSBsZW5ndGggPD0gMjA0OGApO1xuICAgIH1cbiAgICB2YWx1ZS5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgIHZhbHVlLmxlbmd0aCA9IGxlbmd0aDtcbiAgICB2YWx1ZS5zdWIgPSBnZXRUeXBlRGVmKHZlY1R5cGUsIHt9LCBjb3VudCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX2RlY29kZVR1cGxlKHZhbHVlLCBfLCBzdWJUeXBlLCBjb3VudCkge1xuICAgIHZhbHVlLnN1YiA9IHN1YlR5cGUubGVuZ3RoID09PSAwXG4gICAgICAgID8gW11cbiAgICAgICAgOiB0eXBlU3BsaXQoc3ViVHlwZSkubWFwKChpbm5lcikgPT4gZ2V0VHlwZURlZihpbm5lciwge30sIGNvdW50KSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX2RlY29kZUFueUludCh2YWx1ZSwgdHlwZSwgXywgY2xhenopIHtcbiAgICBjb25zdCBbc3RyTGVuZ3RoLCBkaXNwbGF5TmFtZV0gPSB0eXBlLnN1YnN0cmluZyhjbGF6ei5sZW5ndGggKyAxLCB0eXBlLmxlbmd0aCAtIDEpLnNwbGl0KCcsJyk7XG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoc3RyTGVuZ3RoLnRyaW0oKSwgMTApO1xuICAgIGlmICgobGVuZ3RoID4gODE5MikgfHwgKGxlbmd0aCAlIDgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfTogT25seSBzdXBwb3J0IGZvciAke2NsYXp6fTxiaXRMZW5ndGg+LCB3aGVyZSBsZW5ndGggPD0gODE5MiBhbmQgYSBwb3dlciBvZiA4LCBmb3VuZCAke2xlbmd0aH1gKTtcbiAgICB9XG4gICAgdmFsdWUuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICB2YWx1ZS5sZW5ndGggPSBsZW5ndGg7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX2RlY29kZUludCh2YWx1ZSwgdHlwZSwgc3ViVHlwZSkge1xuICAgIHJldHVybiBfZGVjb2RlQW55SW50KHZhbHVlLCB0eXBlLCBzdWJUeXBlLCAnSW50Jyk7XG59XG5mdW5jdGlvbiBfZGVjb2RlVUludCh2YWx1ZSwgdHlwZSwgc3ViVHlwZSkge1xuICAgIHJldHVybiBfZGVjb2RlQW55SW50KHZhbHVlLCB0eXBlLCBzdWJUeXBlLCAnVUludCcpO1xufVxuZnVuY3Rpb24gX2RlY29kZURvTm90Q29uc3RydWN0KHZhbHVlLCB0eXBlLCBfKSB7XG4gICAgY29uc3QgTkFNRV9MRU5HVEggPSAnRG9Ob3RDb25zdHJ1Y3QnLmxlbmd0aDtcbiAgICB2YWx1ZS5kaXNwbGF5TmFtZSA9IHR5cGUuc3Vic3RyaW5nKE5BTUVfTEVOR1RIICsgMSwgdHlwZS5sZW5ndGggLSAxKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBoYXNXcmFwcGVyKHR5cGUsIFtzdGFydCwgZW5kXSkge1xuICAgIHJldHVybiAodHlwZS5zdGFydHNXaXRoKHN0YXJ0KSkgJiYgKHR5cGUuc2xpY2UoLTEgKiBlbmQubGVuZ3RoKSA9PT0gZW5kKTtcbn1cbmNvbnN0IG5lc3RlZEV4dHJhY3Rpb24gPSBbXG4gICAgWydbJywgJ10nLCBUeXBlRGVmSW5mby5WZWNGaXhlZCwgX2RlY29kZUZpeGVkVmVjXSxcbiAgICBbJ3snLCAnfScsIFR5cGVEZWZJbmZvLlN0cnVjdCwgX2RlY29kZVN0cnVjdF0sXG4gICAgWycoJywgJyknLCBUeXBlRGVmSW5mby5UdXBsZSwgX2RlY29kZVR1cGxlXSxcbiAgICAvLyB0aGUgaW5uZXIgZm9yIHRoZXNlIGFyZSB0aGUgc2FtZSBhcyB0dXBsZSwgbXVsdGlwbGUgdmFsdWVzXG4gICAgWydCVHJlZU1hcDwnLCAnPicsIFR5cGVEZWZJbmZvLkJUcmVlTWFwLCBfZGVjb2RlVHVwbGVdLFxuICAgIFsnSGFzaE1hcDwnLCAnPicsIFR5cGVEZWZJbmZvLkhhc2hNYXAsIF9kZWNvZGVUdXBsZV0sXG4gICAgWydJbnQ8JywgJz4nLCBUeXBlRGVmSW5mby5JbnQsIF9kZWNvZGVJbnRdLFxuICAgIFsnUmVzdWx0PCcsICc+JywgVHlwZURlZkluZm8uUmVzdWx0LCBfZGVjb2RlVHVwbGVdLFxuICAgIFsnVUludDwnLCAnPicsIFR5cGVEZWZJbmZvLlVJbnQsIF9kZWNvZGVVSW50XSxcbiAgICBbJ0RvTm90Q29uc3RydWN0PCcsICc+JywgVHlwZURlZkluZm8uRG9Ob3RDb25zdHJ1Y3QsIF9kZWNvZGVEb05vdENvbnN0cnVjdF1cbl07XG5jb25zdCB3cmFwcGVkRXh0cmFjdGlvbiA9IFtcbiAgICBbJ0JUcmVlU2V0PCcsICc+JywgVHlwZURlZkluZm8uQlRyZWVTZXRdLFxuICAgIFsnQ29tcGFjdDwnLCAnPicsIFR5cGVEZWZJbmZvLkNvbXBhY3RdLFxuICAgIFsnTGlua2FnZTwnLCAnPicsIFR5cGVEZWZJbmZvLkxpbmthZ2VdLFxuICAgIFsnT3BhcXVlPCcsICc+JywgVHlwZURlZkluZm8uV3JhcHBlck9wYXF1ZV0sXG4gICAgWydPcHRpb248JywgJz4nLCBUeXBlRGVmSW5mby5PcHRpb25dLFxuICAgIFsnUmFuZ2U8JywgJz4nLCBUeXBlRGVmSW5mby5SYW5nZV0sXG4gICAgWydSYW5nZUluY2x1c2l2ZTwnLCAnPicsIFR5cGVEZWZJbmZvLlJhbmdlSW5jbHVzaXZlXSxcbiAgICBbJ1ZlYzwnLCAnPicsIFR5cGVEZWZJbmZvLlZlY10sXG4gICAgWydXcmFwcGVyS2VlcE9wYXF1ZTwnLCAnPicsIFR5cGVEZWZJbmZvLldyYXBwZXJLZWVwT3BhcXVlXSxcbiAgICBbJ1dyYXBwZXJPcGFxdWU8JywgJz4nLCBUeXBlRGVmSW5mby5XcmFwcGVyT3BhcXVlXVxuXTtcbmZ1bmN0aW9uIGV4dHJhY3RTdWJUeXBlKHR5cGUsIFtzdGFydCwgZW5kXSkge1xuICAgIHJldHVybiB0eXBlLnN1YnN0cmluZyhzdGFydC5sZW5ndGgsIHR5cGUubGVuZ3RoIC0gZW5kLmxlbmd0aCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZURlZihfdHlwZSwgeyBkaXNwbGF5TmFtZSwgbmFtZSB9ID0ge30sIGNvdW50ID0gMCkge1xuICAgIC8vIGNyZWF0ZSB0aGUgdHlwZSB2aWEgVHlwZSwgYWxsb3dpbmcgdHlwZXMgdG8gYmUgc2FuaXRpemVkXG4gICAgY29uc3QgdHlwZSA9IHNhbml0aXplKF90eXBlKTtcbiAgICBjb25zdCB2YWx1ZSA9IHsgZGlzcGxheU5hbWUsIGluZm86IFR5cGVEZWZJbmZvLlBsYWluLCBuYW1lLCB0eXBlIH07XG4gICAgaWYgKCsrY291bnQgPiA2NCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFR5cGVEZWY6IE1heGltdW0gbmVzdGVkIGxpbWl0IHJlYWNoZWQnKTtcbiAgICB9XG4gICAgY29uc3QgbmVzdGVkID0gbmVzdGVkRXh0cmFjdGlvbi5maW5kKChuZXN0ZWQpID0+IGhhc1dyYXBwZXIodHlwZSwgbmVzdGVkKSk7XG4gICAgaWYgKG5lc3RlZCkge1xuICAgICAgICB2YWx1ZS5pbmZvID0gbmVzdGVkWzJdO1xuICAgICAgICByZXR1cm4gbmVzdGVkWzNdKHZhbHVlLCB0eXBlLCBleHRyYWN0U3ViVHlwZSh0eXBlLCBuZXN0ZWQpLCBjb3VudCk7XG4gICAgfVxuICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwcGVkRXh0cmFjdGlvbi5maW5kKCh3cmFwcGVkKSA9PiBoYXNXcmFwcGVyKHR5cGUsIHdyYXBwZWQpKTtcbiAgICBpZiAod3JhcHBlZCkge1xuICAgICAgICB2YWx1ZS5pbmZvID0gd3JhcHBlZFsyXTtcbiAgICAgICAgdmFsdWUuc3ViID0gZ2V0VHlwZURlZihleHRyYWN0U3ViVHlwZSh0eXBlLCB3cmFwcGVkKSwge30sIGNvdW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9lbmNvZGVUeXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dldFR5cGVEZWYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlU3BsaXQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi94Y20uanMnO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIHR5cGVTcGxpdCh0eXBlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgLy8gdGhlc2UgYXJlIHRoZSBkZXB0aHMgb2YgdGhlIHZhcmlvdXMgdG9rZW5zOiA8LCBbLCB7LCAoXG4gICAgbGV0IGMgPSAwO1xuICAgIGxldCBmID0gMDtcbiAgICBsZXQgcyA9IDA7XG4gICAgbGV0IHQgPSAwO1xuICAgIC8vIGN1cnJlbnQgc3RhcnQgcG9zaXRpb25cbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHR5cGUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBzd2l0Y2ggKHR5cGVbaV0pIHtcbiAgICAgICAgICAgIC8vIGlmIHdlIGFyZSBub3QgbmVzdGVkLCBhZGQgdGhlIHR5cGVcbiAgICAgICAgICAgIGNhc2UgJywnOiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYyB8fCBmIHx8IHMgfHwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godHlwZS5zdWJzdHJpbmcoc3RhcnQsIGkpLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWRqdXN0IGNvbXBhY3QvdmVjIChhbmQgZnJpZW5kcykgZGVwdGhcbiAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgIGMrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgICAgICAgIGMtLTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGFkanVzdCBmaXhlZCB2ZWMgZGVwdGhzXG4gICAgICAgICAgICBjYXNlICdbJzpcbiAgICAgICAgICAgICAgICBmKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAgICAgICBmLS07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvLyBhZGp1c3Qgc3RydWN0IGRlcHRoXG4gICAgICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICAgICAgICBzKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvLyBhZGp1c3QgdHVwbGUgZGVwdGhcbiAgICAgICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgICAgIHQrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgICAgIHQtLTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBlbnN1cmUgd2UgaGF2ZSBhbGwgdGhlIHRlcm1pbmF0b3JzIHRha2VuIGNhcmUgb2ZcbiAgICBpZiAoYyB8fCBmIHx8IHMgfHwgdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGVmaW5pdGlvbiAobWlzc2luZyB0ZXJtaW5hdG9ycykgZm91bmQgaW4gJHt0eXBlfWApO1xuICAgIH1cbiAgICAvLyB0aGUgZmluYWwgbGVnIG9mIHRoZSBqb3VybmV5XG4gICAgcmVzdWx0LnB1c2godHlwZS5zdWJzdHJpbmcoc3RhcnQsIHR5cGUubGVuZ3RoKS50cmltKCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgY29uc3QgWENNX01BUFBJTkdTID0gWydBc3NldEluc3RhbmNlJywgJ0Z1bmdpYmlsaXR5JywgJ0p1bmN0aW9uJywgJ0p1bmN0aW9ucycsICdNdWx0aUFzc2V0JywgJ011bHRpQXNzZXRGaWx0ZXInLCAnTXVsdGlMb2NhdGlvbicsICdSZXNwb25zZScsICdXaWxkRnVuZ2liaWxpdHknLCAnV2lsZE11bHRpQXNzZXQnLCAnWGNtJywgJ1hjbUVycm9yJywgJ1hjbU9yZGVyJ107XG5leHBvcnQgZnVuY3Rpb24gbWFwWGNtVHlwZXModmVyc2lvbikge1xuICAgIHJldHVybiBYQ01fTUFQUElOR1MucmVkdWNlKChhbGwsIGtleSkgPT4gb2JqZWN0U3ByZWFkKGFsbCwgeyBba2V5XTogYCR7a2V5fSR7dmVyc2lvbn1gIH0pLCB7fSk7XG59XG4iLCJleHBvcnQgY29uc3QgdHlwZXNDaGFpbiA9IHt9O1xuIiwiY29uc3Qgc2hhcmVkVHlwZXMgPSB7XG4gICAgLy8gQW5jaG9yXG4gICAgQW5jaG9yRGF0YToge1xuICAgICAgICBhbmNob3JlZEJsb2NrOiAndTY0JyxcbiAgICAgICAgZG9jUm9vdDogJ0gyNTYnLFxuICAgICAgICBpZDogJ0gyNTYnXG4gICAgfSxcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBQcmVDb21taXREYXRhOiB7XG4gICAgICAgIGV4cGlyYXRpb25CbG9jazogJ3U2NCcsXG4gICAgICAgIGlkZW50aXR5OiAnSDI1NicsXG4gICAgICAgIHNpZ25pbmdSb290OiAnSDI1NidcbiAgICB9LFxuICAgIC8vIEZlZXNcbiAgICBGZWU6IHtcbiAgICAgICAga2V5OiAnSGFzaCcsXG4gICAgICAgIHByaWNlOiAnQmFsYW5jZSdcbiAgICB9LFxuICAgIC8vIE11bHRpQWNjb3VudFxuICAgIE11bHRpQWNjb3VudERhdGE6IHtcbiAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICBkZXBvc2l0b3I6ICdBY2NvdW50SWQnLFxuICAgICAgICBzaWduYXRvcmllczogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgdGhyZXNob2xkOiAndTE2J1xuICAgIH0sXG4gICAgLy8gQnJpZGdlXG4gICAgQ2hhaW5JZDogJ3U4JyxcbiAgICBEZXBvc2l0Tm9uY2U6ICd1NjQnLFxuICAgIFJlc291cmNlSWQ6ICdbdTg7IDMyXScsXG4gICAgJ2NoYWluYnJpZGdlOjpDaGFpbklkJzogJ3U4JyxcbiAgICAvLyBORlRcbiAgICBSZWdpc3RyeUlkOiAnSDE2MCcsXG4gICAgVG9rZW5JZDogJ1UyNTYnLFxuICAgIEFzc2V0SWQ6IHtcbiAgICAgICAgcmVnaXN0cnlJZDogJ1JlZ2lzdHJ5SWQnLFxuICAgICAgICB0b2tlbklkOiAnVG9rZW5JZCdcbiAgICB9LFxuICAgIEFzc2V0SW5mbzoge1xuICAgICAgICBtZXRhZGF0YTogJ0J5dGVzJ1xuICAgIH0sXG4gICAgTWludEluZm86IHtcbiAgICAgICAgYW5jaG9ySWQ6ICdIYXNoJyxcbiAgICAgICAgcHJvb2ZzOiAnVmVjPFByb29mTWludD4nLFxuICAgICAgICBzdGF0aWNIYXNoZXM6ICdbSGFzaDsgM10nXG4gICAgfSxcbiAgICBQcm9vZjoge1xuICAgICAgICBsZWFmSGFzaDogJ0gyNTYnLFxuICAgICAgICBzb3J0ZWRIYXNoZXM6ICdIMjU2J1xuICAgIH0sXG4gICAgUHJvb2ZNaW50OiB7XG4gICAgICAgIGhhc2hlczogJ1ZlYzxIYXNoPicsXG4gICAgICAgIHByb3BlcnR5OiAnQnl0ZXMnLFxuICAgICAgICBzYWx0OiAnW3U4OyAzMl0nLFxuICAgICAgICB2YWx1ZTogJ0J5dGVzJ1xuICAgIH0sXG4gICAgUmVnaXN0cnlJbmZvOiB7XG4gICAgICAgIGZpZWxkczogJ1ZlYzxCeXRlcz4nLFxuICAgICAgICBvd25lckNhbkJ1cm46ICdib29sJ1xuICAgIH0sXG4gICAgUHJveHlUeXBlOiB7XG4gICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAnQW55JyxcbiAgICAgICAgICAgICdOb25UcmFuc2ZlcicsXG4gICAgICAgICAgICAnR292ZXJuYW5jZScsXG4gICAgICAgICAgICAnU3Rha2luZycsXG4gICAgICAgICAgICAnTm9uUHJveHknXG4gICAgICAgIF1cbiAgICB9XG59O1xuY29uc3Qgc3RhbmRhbG9uZVR5cGVzID0ge1xuICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgIEFjY291bnRJbmZvOiAnQWNjb3VudEluZm9XaXRoUmVmQ291bnQnLFxuICAgIEFkZHJlc3M6ICdMb29rdXBTb3VyY2UnLFxuICAgIExvb2t1cFNvdXJjZTogJ0luZGljZXNMb29rdXBTb3VyY2UnLFxuICAgIE11bHRpcGxpZXI6ICdGaXhlZDY0JyxcbiAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknXG59O1xuZXhwb3J0IGNvbnN0IHZlcnNpb25lZCA9IFtcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzI0MCwgMjQzXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnN0YW5kYWxvbmVUeXBlcyxcbiAgICAgICAgICAgIFByb3h5VHlwZToge1xuICAgICAgICAgICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAgICAgICAgICdBbnknLFxuICAgICAgICAgICAgICAgICAgICAnTm9uVHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICAgICAnR292ZXJuYW5jZScsXG4gICAgICAgICAgICAgICAgICAgICdTdGFraW5nJyxcbiAgICAgICAgICAgICAgICAgICAgJ1Zlc3RpbmcnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzI0NCwgOTk5XSxcbiAgICAgICAgdHlwZXM6IHsgLi4uc3RhbmRhbG9uZVR5cGVzIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTAwMCwgdW5kZWZpbmVkXSxcbiAgICAgICAgdHlwZXM6IHsgLi4uc2hhcmVkVHlwZXMgfVxuICAgIH1cbl07XG4iLCJpbXBvcnQgeyB2ZXJzaW9uZWQgYXMgY2VudHJpZnVnZUNoYWluIH0gZnJvbSAnLi9jZW50cmlmdWdlLWNoYWluLmpzJztcbmltcG9ydCB7IHZlcnNpb25lZCBhcyBrdXNhbWEgfSBmcm9tICcuL2t1c2FtYS5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uZWQgYXMgbm9kZSB9IGZyb20gJy4vbm9kZS5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uZWQgYXMgbm9kZVRlbXBsYXRlIH0gZnJvbSAnLi9ub2RlLXRlbXBsYXRlLmpzJztcbmltcG9ydCB7IHZlcnNpb25lZCBhcyBwb2xrYWRvdCB9IGZyb20gJy4vcG9sa2Fkb3QuanMnO1xuaW1wb3J0IHsgdmVyc2lvbmVkIGFzIHJvY29jbyB9IGZyb20gJy4vcm9jb2NvLmpzJztcbmltcG9ydCB7IHZlcnNpb25lZCBhcyBzaGVsbCB9IGZyb20gJy4vc2hlbGwuanMnO1xuaW1wb3J0IHsgdmVyc2lvbmVkIGFzIHN0YXRlbWluZSB9IGZyb20gJy4vc3RhdGVtaW5lLmpzJztcbmltcG9ydCB7IHZlcnNpb25lZCBhcyBzdGF0ZW1pbnQgfSBmcm9tICcuL3N0YXRlbWludC5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uZWQgYXMgd2VzdGVuZCB9IGZyb20gJy4vd2VzdGVuZC5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uZWQgYXMgd2VzdG1pbnQgfSBmcm9tICcuL3dlc3RtaW50LmpzJztcbmV4cG9ydCBjb25zdCB0eXBlc1NwZWMgPSB7XG4gICAgJ2NlbnRyaWZ1Z2UtY2hhaW4nOiBjZW50cmlmdWdlQ2hhaW4sXG4gICAga3VzYW1hLFxuICAgIG5vZGUsXG4gICAgJ25vZGUtdGVtcGxhdGUnOiBub2RlVGVtcGxhdGUsXG4gICAgcG9sa2Fkb3QsXG4gICAgcm9jb2NvLFxuICAgIHNoZWxsLFxuICAgIHN0YXRlbWluZSxcbiAgICBzdGF0ZW1pbnQsXG4gICAgd2VzdGVuZCxcbiAgICB3ZXN0bWludFxufTtcbiIsImltcG9ydCB7IG1hcFhjbVR5cGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5jb25zdCBzaGFyZWRUeXBlcyA9IHtcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMjQnLFxuICAgIERpc3BhdGNoRXJyb3JNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlVTgnLFxuICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMjQnLFxuICAgIEtleXM6ICdTZXNzaW9uS2V5czYnLFxuICAgIFByb3h5VHlwZToge1xuICAgICAgICBfZW51bTogWydBbnknLCAnTm9uVHJhbnNmZXInLCAnR292ZXJuYW5jZScsICdTdGFraW5nJywgJ0lkZW50aXR5SnVkZ2VtZW50JywgJ0NhbmNlbFByb3h5JywgJ0F1Y3Rpb24nXVxuICAgIH0sXG4gICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG59O1xuY29uc3QgYWRkckluZGljZXNUeXBlcyA9IHtcbiAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aFJlZkNvdW50JyxcbiAgICBBZGRyZXNzOiAnTG9va3VwU291cmNlJyxcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIERpc3BhdGNoRXJyb3JNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlVTgnLFxuICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMTYnLFxuICAgIEtleXM6ICdTZXNzaW9uS2V5czUnLFxuICAgIExvb2t1cFNvdXJjZTogJ0luZGljZXNMb29rdXBTb3VyY2UnLFxuICAgIFZhbGlkYXRvclByZWZzOiAnVmFsaWRhdG9yUHJlZnNXaXRoQ29tbWlzc2lvbidcbn07XG5jb25zdCBhZGRyQWNjb3VudElkVHlwZXMgPSB7XG4gICAgQWNjb3VudEluZm86ICdBY2NvdW50SW5mb1dpdGhSZWZDb3VudCcsXG4gICAgQWRkcmVzczogJ0FjY291bnRJZCcsXG4gICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzV2l0aDE2JyxcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBSYXdTb2x1dGlvbjogJ1Jhd1NvbHV0aW9uV2l0aDE2JyxcbiAgICBLZXlzOiAnU2Vzc2lvbktleXM1JyxcbiAgICBMb29rdXBTb3VyY2U6ICdBY2NvdW50SWQnLFxuICAgIFZhbGlkYXRvclByZWZzOiAnVmFsaWRhdG9yUHJlZnNXaXRoQ29tbWlzc2lvbidcbn07XG5leHBvcnQgY29uc3QgdmVyc2lvbmVkID0gW1xuICAgIHtcbiAgICAgICAgLy8gMTAyMCBpcyBmaXJzdCBDQzNcbiAgICAgICAgbWlubWF4OiBbMTAxOSwgMTAzMV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5hZGRySW5kaWNlc1R5cGVzLFxuICAgICAgICAgICAgQmFsYW5jZUxvY2s6ICdCYWxhbmNlTG9ja1RvMjEyJyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIERpc3BhdGNoRXJyb3I6ICdEaXNwYXRjaEVycm9yVG8xOTgnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgSWRlbnRpdHlJbmZvOiAnSWRlbnRpdHlJbmZvVG8xOTgnLFxuICAgICAgICAgICAgS2V5czogJ1Nlc3Npb25LZXlzNScsXG4gICAgICAgICAgICBNdWx0aXBsaWVyOiAnRml4ZWQ2NCcsXG4gICAgICAgICAgICBPcGVuVGlwOiAnT3BlblRpcFRvMjI1JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OScsXG4gICAgICAgICAgICBSZWZlcmVuZHVtSW5mbzogJ1JlZmVyZW5kdW1JbmZvVG8yMzknLFxuICAgICAgICAgICAgU2NoZWR1bGVkOiAnU2NoZWR1bGVkVG8yNTQnLFxuICAgICAgICAgICAgU2xhc2hpbmdTcGFuczogJ1NsYXNoaW5nU3BhbnNUbzIwNCcsXG4gICAgICAgICAgICBTdGFraW5nTGVkZ2VyOiAnU3Rha2luZ0xlZGdlclRvMjIzJyxcbiAgICAgICAgICAgIFZvdGVzOiAnVm90ZXNUbzIzMCcsXG4gICAgICAgICAgICBXZWlnaHQ6ICd1MzInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTAzMiwgMTA0Ml0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5hZGRySW5kaWNlc1R5cGVzLFxuICAgICAgICAgICAgQmFsYW5jZUxvY2s6ICdCYWxhbmNlTG9ja1RvMjEyJyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIERpc3BhdGNoSW5mbzogJ0Rpc3BhdGNoSW5mb1RvMjQ0JyxcbiAgICAgICAgICAgIEhlYXJ0YmVhdDogJ0hlYXJ0YmVhdFRvMjQ0JyxcbiAgICAgICAgICAgIEtleXM6ICdTZXNzaW9uS2V5czUnLFxuICAgICAgICAgICAgTXVsdGlwbGllcjogJ0ZpeGVkNjQnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknLFxuICAgICAgICAgICAgUmVmZXJlbmR1bUluZm86ICdSZWZlcmVuZHVtSW5mb1RvMjM5JyxcbiAgICAgICAgICAgIFNjaGVkdWxlZDogJ1NjaGVkdWxlZFRvMjU0JyxcbiAgICAgICAgICAgIFNsYXNoaW5nU3BhbnM6ICdTbGFzaGluZ1NwYW5zVG8yMDQnLFxuICAgICAgICAgICAgU3Rha2luZ0xlZGdlcjogJ1N0YWtpbmdMZWRnZXJUbzIyMycsXG4gICAgICAgICAgICBWb3RlczogJ1ZvdGVzVG8yMzAnLFxuICAgICAgICAgICAgV2VpZ2h0OiAndTMyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIGFjdHVhbCBhdCAxMDQ1ICgxMDQzLTEwNDQgaXMgZGV2KVxuICAgICAgICBtaW5tYXg6IFsxMDQzLCAxMDQ1XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLmFkZHJJbmRpY2VzVHlwZXMsXG4gICAgICAgICAgICBCYWxhbmNlTG9jazogJ0JhbGFuY2VMb2NrVG8yMTInLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgS2V5czogJ1Nlc3Npb25LZXlzNScsXG4gICAgICAgICAgICBNdWx0aXBsaWVyOiAnRml4ZWQ2NCcsXG4gICAgICAgICAgICBPcGVuVGlwOiAnT3BlblRpcFRvMjI1JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OScsXG4gICAgICAgICAgICBSZWZlcmVuZHVtSW5mbzogJ1JlZmVyZW5kdW1JbmZvVG8yMzknLFxuICAgICAgICAgICAgU2NoZWR1bGVkOiAnU2NoZWR1bGVkVG8yNTQnLFxuICAgICAgICAgICAgU3Rha2luZ0xlZGdlcjogJ1N0YWtpbmdMZWRnZXJUbzIyMycsXG4gICAgICAgICAgICBWb3RlczogJ1ZvdGVzVG8yMzAnLFxuICAgICAgICAgICAgV2VpZ2h0OiAndTMyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzEwNDYsIDEwNDldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5hZGRyQWNjb3VudElkVHlwZXMsXG4gICAgICAgICAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNUbzI1NycsXG4gICAgICAgICAgICBEaXNwYXRjaEluZm86ICdEaXNwYXRjaEluZm9UbzI0NCcsXG4gICAgICAgICAgICBIZWFydGJlYXQ6ICdIZWFydGJlYXRUbzI0NCcsXG4gICAgICAgICAgICBNdWx0aXBsaWVyOiAnRml4ZWQ2NCcsXG4gICAgICAgICAgICBPcGVuVGlwOiAnT3BlblRpcFRvMjI1JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OScsXG4gICAgICAgICAgICBSZWZlcmVuZHVtSW5mbzogJ1JlZmVyZW5kdW1JbmZvVG8yMzknLFxuICAgICAgICAgICAgU2NoZWR1bGVkOiAnU2NoZWR1bGVkVG8yNTQnLFxuICAgICAgICAgICAgU3Rha2luZ0xlZGdlcjogJ1N0YWtpbmdMZWRnZXJUbzIyMycsXG4gICAgICAgICAgICBXZWlnaHQ6ICd1MzInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTA1MCwgMTA1NF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIERpc3BhdGNoSW5mbzogJ0Rpc3BhdGNoSW5mb1RvMjQ0JyxcbiAgICAgICAgICAgIEhlYXJ0YmVhdDogJ0hlYXJ0YmVhdFRvMjQ0JyxcbiAgICAgICAgICAgIE11bHRpcGxpZXI6ICdGaXhlZDY0JyxcbiAgICAgICAgICAgIE9wZW5UaXA6ICdPcGVuVGlwVG8yMjUnLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5JyxcbiAgICAgICAgICAgIFJlZmVyZW5kdW1JbmZvOiAnUmVmZXJlbmR1bUluZm9UbzIzOScsXG4gICAgICAgICAgICBTY2hlZHVsZWQ6ICdTY2hlZHVsZWRUbzI1NCcsXG4gICAgICAgICAgICBTdGFraW5nTGVkZ2VyOiAnU3Rha2luZ0xlZGdlclRvMjQwJyxcbiAgICAgICAgICAgIFdlaWdodDogJ3UzMidcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxMDU1LCAxMDU2XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgTXVsdGlwbGllcjogJ0ZpeGVkNjQnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknLFxuICAgICAgICAgICAgU2NoZWR1bGVkOiAnU2NoZWR1bGVkVG8yNTQnLFxuICAgICAgICAgICAgU3Rha2luZ0xlZGdlcjogJ1N0YWtpbmdMZWRnZXJUbzI0MCcsXG4gICAgICAgICAgICBXZWlnaHQ6ICd1MzInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTA1NywgMTA2MV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIERpc3BhdGNoSW5mbzogJ0Rpc3BhdGNoSW5mb1RvMjQ0JyxcbiAgICAgICAgICAgIEhlYXJ0YmVhdDogJ0hlYXJ0YmVhdFRvMjQ0JyxcbiAgICAgICAgICAgIE9wZW5UaXA6ICdPcGVuVGlwVG8yMjUnLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5JyxcbiAgICAgICAgICAgIC8vIExhc3QgMTAwJSBrbm93biBwcm9ibGVtYXRpYyBydW50aW1lIHJhbmdlIC0gdGhpcyBxdWl0ZSBwb3NzaWJseSBuZWVkIHRvXG4gICAgICAgICAgICAvLyBhcHBseSB0byBtb3JlIHJ1bnRpbWUgcmFuZ2VzIHRoYXQgZm9sbG93LCB3ZSBqdXN0IGRvbid0IGtub3cgaG93IGZhciB0aGlzXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYXBwbGllZCB0b1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFRMO0RSIHdoYWNrLWEtbW9sZSBzaW5jZSB0aGlzIHdhcyBub3QgaGlzdHJpY2FsbHkgY2hlY2tlZFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcG9sa2Fkb3QtanMvYXBpL2lzc3Vlcy81NjE4I2lzc3VlY29tbWVudC0xNTMwOTcwMzE2XG4gICAgICAgICAgICBTY2hlZHVsZWQ6ICdTY2hlZHVsZWRUbzI1NCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxMDYyLCAyMDEyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMjAxMywgMjAyMl0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyMDIzLCAyMDI0XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzIwMjUsIDIwMjddLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5hZGRyQWNjb3VudElkVHlwZXNcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyMDI4LCAyMDI5XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgQWNjb3VudEluZm86ICdBY2NvdW50SW5mb1dpdGhEdWFsUmVmQ291bnQnLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzV2l0aDE2JyxcbiAgICAgICAgICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMTYnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMjAzMCwgOTAwMF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1dpdGgxNicsXG4gICAgICAgICAgICBSYXdTb2x1dGlvbjogJ1Jhd1NvbHV0aW9uV2l0aDE2J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzkwMTAsIDkwOTldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjAnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIGp1bXAgZnJvbSA5MTAwIHRvIDkxMTAsIGhvd2V2ZXIgYWxpZ24gd2l0aCBSb2NvY29cbiAgICAgICAgbWlubWF4OiBbOTEwMCwgOTEwNV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLm1hcFhjbVR5cGVzKCdWMScpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgLy8gbWV0YWRhdGEgdjE0XG4gICAgICAgIG1pbm1heDogWzkxMDYsIHVuZGVmaW5lZF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAsXG4gICAgLy8ge1xuICAgIC8vICAgLy8gd2VpZ2h0IHYyIGludHJvZHVjdGlvblxuICAgIC8vICAgbWlubWF4OiBbOTMwMCwgdW5kZWZpbmVkXSxcbiAgICAvLyAgIHR5cGVzOiB7XG4gICAgLy8gICAgIFdlaWdodDogJ1dlaWdodFYyJ1xuICAgIC8vICAgfVxuICAgIC8vIH1cbl07XG4iLCJleHBvcnQgY29uc3QgdmVyc2lvbmVkID0gW1xuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMCwgdW5kZWZpbmVkXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcsIEFQSSB0cmFja3MgbWFzdGVyXG4gICAgICAgICAgICAvLyAodjIgd2VpZ2h0cyBhcmUgbm90IHlldCB0aGUgZGVmYXVsdClcbiAgICAgICAgICAgIFdlaWdodDogJ1dlaWdodFYyJ1xuICAgICAgICB9XG4gICAgfVxuXTtcbiIsImV4cG9ydCBjb25zdCB2ZXJzaW9uZWQgPSBbXG4gICAge1xuICAgICAgICBtaW5tYXg6IFswLCB1bmRlZmluZWRdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLy8gbm90aGluZywgQVBJIHRyYWNrcyBtYXN0ZXJcbiAgICAgICAgICAgIC8vICh2MiB3ZWlnaHRzIGFyZSBub3QgeWV0IHRoZSBkZWZhdWx0KVxuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjInXG4gICAgICAgIH1cbiAgICB9XG5dO1xuIiwiY29uc3Qgc2hhcmVkVHlwZXMgPSB7XG4gICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzV2l0aDE2JyxcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBSYXdTb2x1dGlvbjogJ1Jhd1NvbHV0aW9uV2l0aDE2JyxcbiAgICBLZXlzOiAnU2Vzc2lvbktleXM2JyxcbiAgICBQcm94eVR5cGU6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEFueTogMCxcbiAgICAgICAgICAgIE5vblRyYW5zZmVyOiAxLFxuICAgICAgICAgICAgR292ZXJuYW5jZTogMixcbiAgICAgICAgICAgIFN0YWtpbmc6IDMsXG4gICAgICAgICAgICBVbnVzZWRTdWRvQmFsYW5jZXM6IDQsXG4gICAgICAgICAgICBJZGVudGl0eUp1ZGdlbWVudDogNSxcbiAgICAgICAgICAgIENhbmNlbFByb3h5OiA2LFxuICAgICAgICAgICAgQXVjdGlvbjogN1xuICAgICAgICB9XG4gICAgfSxcbiAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbn07XG5jb25zdCBhZGRyQWNjb3VudElkVHlwZXMgPSB7XG4gICAgQWNjb3VudEluZm86ICdBY2NvdW50SW5mb1dpdGhSZWZDb3VudCcsXG4gICAgQWRkcmVzczogJ0FjY291bnRJZCcsXG4gICAgRGlzcGF0Y2hFcnJvck1vZHVsZTogJ0Rpc3BhdGNoRXJyb3JNb2R1bGVVOCcsXG4gICAgS2V5czogJ1Nlc3Npb25LZXlzNScsXG4gICAgTG9va3VwU291cmNlOiAnQWNjb3VudElkJyxcbiAgICBWYWxpZGF0b3JQcmVmczogJ1ZhbGlkYXRvclByZWZzV2l0aENvbW1pc3Npb24nXG59O1xuZXhwb3J0IGNvbnN0IHZlcnNpb25lZCA9IFtcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzAsIDEyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTMsIDIyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzIzLCAyNF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyNSwgMjddLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5hZGRyQWNjb3VudElkVHlwZXNcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyOCwgMjldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aER1YWxSZWZDb3VudCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFszMCwgOTEwOV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlc1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIG1ldGFkYXRhIHYxNFxuICAgICAgICBtaW5tYXg6IFs5MTEwLCB1bmRlZmluZWRdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gLFxuICAgIC8vIHtcbiAgICAvLyAgIC8vIHdlaWdodCB2MiBpbnRyb2R1Y3Rpb25cbiAgICAvLyAgIG1pbm1heDogWzkzMDAsIHVuZGVmaW5lZF0sXG4gICAgLy8gICB0eXBlczoge1xuICAgIC8vICAgICBXZWlnaHQ6ICdXZWlnaHRWMidcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5dO1xuIiwiaW1wb3J0IHsgbWFwWGNtVHlwZXMgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbi8qIGVzbGludC1kaXNhYmxlIHNvcnQta2V5cyAqL1xuY29uc3Qgc2hhcmVkVHlwZXMgPSB7XG4gICAgRGlzcGF0Y2hFcnJvck1vZHVsZTogJ0Rpc3BhdGNoRXJyb3JNb2R1bGVVOCcsXG4gICAgRnVsbElkZW50aWZpY2F0aW9uOiAnKCknLCAvLyBObyBzdGFraW5nLCBvbmx5IHNlc3Npb24gKGFzIHBlciBjb25maWcpXG4gICAgS2V5czogJ1Nlc3Npb25LZXlzN0InLFxuICAgIFdlaWdodDogJ1dlaWdodFYxJ1xufTtcbmV4cG9ydCBjb25zdCB2ZXJzaW9uZWQgPSBbXG4gICAge1xuICAgICAgICBtaW5tYXg6IFswLCAyMDBdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aER1YWxSZWZDb3VudCcsXG4gICAgICAgICAgICBBZGRyZXNzOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIExvb2t1cFNvdXJjZTogJ0FjY291bnRJZCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyMDEsIDIxNF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIEFjY291bnRJbmZvOiAnQWNjb3VudEluZm9XaXRoRHVhbFJlZkNvdW50J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzIxNSwgMjI4XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgS2V5czogJ1Nlc3Npb25LZXlzNidcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyMjksIDkwOTldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjAnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzkxMDAsIDkxMDVdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjEnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIG1ldGFkYXRhIHYxNFxuICAgICAgICBtaW5tYXg6IFs5MTA2LCB1bmRlZmluZWRdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gLFxuICAgIC8vIHtcbiAgICAvLyAgIC8vIHdlaWdodCB2MiBpbnRyb2R1Y3Rpb25cbiAgICAvLyAgIG1pbm1heDogWzkzMDAsIHVuZGVmaW5lZF0sXG4gICAgLy8gICB0eXBlczoge1xuICAgIC8vICAgICBXZWlnaHQ6ICdXZWlnaHRWMidcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5dO1xuIiwiZXhwb3J0IGNvbnN0IHZlcnNpb25lZCA9IFtcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzAsIHVuZGVmaW5lZF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgIC8vIG5vdGhpbmcsIGxpbWl0ZWQgcnVudGltZVxuICAgICAgICB9XG4gICAgfVxuXTtcbiIsImltcG9ydCB7IG1hcFhjbVR5cGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5jb25zdCBzaGFyZWRUeXBlcyA9IHtcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBUQXNzZXRCYWxhbmNlOiAndTEyOCcsXG4gICAgUHJveHlUeXBlOiB7XG4gICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAnQW55JyxcbiAgICAgICAgICAgICdOb25UcmFuc2ZlcicsXG4gICAgICAgICAgICAnQ2FuY2VsUHJveHknLFxuICAgICAgICAgICAgJ0Fzc2V0cycsXG4gICAgICAgICAgICAnQXNzZXRPd25lcicsXG4gICAgICAgICAgICAnQXNzZXRNYW5hZ2VyJyxcbiAgICAgICAgICAgICdTdGFraW5nJ1xuICAgICAgICBdXG4gICAgfSxcbiAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbn07XG5leHBvcnQgY29uc3QgdmVyc2lvbmVkID0gW1xuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMCwgM10sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAvLyBFbnVtIHdhcyBtb2RpZmllZCBtaWQtZmxpZ2h0IC1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9wdWxsLzEwMzgyL2ZpbGVzI2RpZmYtZTRlMDE2YjMzYTgyMjY4YjYyMDhkYzk3NGVlYTg0MWJhZDQ3NTk3ODY1YTc0OWZlZTJmOTM3ZWI2ZmRmNjdiNFI0OThcbiAgICAgICAgICAgIERpc3BhdGNoRXJyb3I6ICdEaXNwYXRjaEVycm9yUHJlNkZpcnN0JyxcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4ubWFwWGNtVHlwZXMoJ1YwJylcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs0LCA1XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC8vIEFzIGFib3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BvbGthZG90LWpzL2FwaS9pc3N1ZXMvNTMwMVxuICAgICAgICAgICAgRGlzcGF0Y2hFcnJvcjogJ0Rpc3BhdGNoRXJyb3JQcmU2Rmlyc3QnLFxuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjEnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIG1ldGFkYXRhIFYxNFxuICAgICAgICBtaW5tYXg6IFs1MDAsIDk5OTldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnLFxuICAgICAgICAgICAgVEFzc2V0Q29udmVyc2lvbjogJ09wdGlvbjxBc3NldElkPidcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxMDAwMCwgdW5kZWZpbmVkXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIFdlaWdodDogJ1dlaWdodFYxJ1xuICAgICAgICB9XG4gICAgfVxuXTtcbiIsImltcG9ydCB7IG1hcFhjbVR5cGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5jb25zdCBzaGFyZWRUeXBlcyA9IHtcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBUQXNzZXRCYWxhbmNlOiAndTEyOCcsXG4gICAgUHJveHlUeXBlOiB7XG4gICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAnQW55JyxcbiAgICAgICAgICAgICdOb25UcmFuc2ZlcicsXG4gICAgICAgICAgICAnQ2FuY2VsUHJveHknLFxuICAgICAgICAgICAgJ0Fzc2V0cycsXG4gICAgICAgICAgICAnQXNzZXRPd25lcicsXG4gICAgICAgICAgICAnQXNzZXRNYW5hZ2VyJyxcbiAgICAgICAgICAgICdTdGFraW5nJ1xuICAgICAgICBdXG4gICAgfSxcbiAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbn07XG5leHBvcnQgY29uc3QgdmVyc2lvbmVkID0gW1xuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMCwgM10sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAvLyBFbnVtIHdhcyBtb2RpZmllZCBtaWQtZmxpZ2h0IC1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9wdWxsLzEwMzgyL2ZpbGVzI2RpZmYtZTRlMDE2YjMzYTgyMjY4YjYyMDhkYzk3NGVlYTg0MWJhZDQ3NTk3ODY1YTc0OWZlZTJmOTM3ZWI2ZmRmNjdiNFI0OThcbiAgICAgICAgICAgIERpc3BhdGNoRXJyb3I6ICdEaXNwYXRjaEVycm9yUHJlNkZpcnN0JyxcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4ubWFwWGNtVHlwZXMoJ1YwJylcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs0LCA1XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC8vIEFzIGFib3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BvbGthZG90LWpzL2FwaS9pc3N1ZXMvNTMwMVxuICAgICAgICAgICAgRGlzcGF0Y2hFcnJvcjogJ0Rpc3BhdGNoRXJyb3JQcmU2Rmlyc3QnLFxuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjEnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIG1ldGFkYXRhIFYxNFxuICAgICAgICBtaW5tYXg6IFs1MDAsIDEwMDEwMDNdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnLFxuICAgICAgICAgICAgVEFzc2V0Q29udmVyc2lvbjogJ09wdGlvbjxBc3NldElkPidcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxMDAyMDAwLCB1bmRlZmluZWRdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gLFxuICAgIC8vIHtcbiAgICAvLyAgIC8vIHdlaWdodCB2MiBpbnRyb2R1Y3Rpb25cbiAgICAvLyAgIG1pbm1heDogWzkzMDAsIHVuZGVmaW5lZF0sXG4gICAgLy8gICB0eXBlczoge1xuICAgIC8vICAgICBXZWlnaHQ6ICdXZWlnaHRWMidcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5dO1xuIiwiaW1wb3J0IHsgbWFwWGNtVHlwZXMgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbmNvbnN0IHNoYXJlZFR5cGVzID0ge1xuICAgIC8vIDE2IHZhbGlkYXRvcnNcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIERpc3BhdGNoRXJyb3JNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlVTgnLFxuICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMTYnLFxuICAgIC8vIGdlbmVyYWxcbiAgICBLZXlzOiAnU2Vzc2lvbktleXM2JyxcbiAgICBQcm94eVR5cGU6IHtcbiAgICAgICAgX2VudW06IFsnQW55JywgJ05vblRyYW5zZmVyJywgJ1N0YWtpbmcnLCAnU3Vkb0JhbGFuY2VzJywgJ0lkZW50aXR5SnVkZ2VtZW50JywgJ0NhbmNlbFByb3h5J11cbiAgICB9LFxuICAgIFdlaWdodDogJ1dlaWdodFYxJ1xufTtcbmNvbnN0IGFkZHJBY2NvdW50SWRUeXBlcyA9IHtcbiAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aFJlZkNvdW50JyxcbiAgICBBZGRyZXNzOiAnQWNjb3VudElkJyxcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIERpc3BhdGNoRXJyb3JNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlVTgnLFxuICAgIExvb2t1cFNvdXJjZTogJ0FjY291bnRJZCcsXG4gICAgS2V5czogJ1Nlc3Npb25LZXlzNScsXG4gICAgUmF3U29sdXRpb246ICdSYXdTb2x1dGlvbldpdGgxNicsXG4gICAgVmFsaWRhdG9yUHJlZnM6ICdWYWxpZGF0b3JQcmVmc1dpdGhDb21taXNzaW9uJ1xufTtcbmV4cG9ydCBjb25zdCB2ZXJzaW9uZWQgPSBbXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxLCAyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgTXVsdGlwbGllcjogJ0ZpeGVkNjQnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknLFxuICAgICAgICAgICAgV2VpZ2h0OiAndTMyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzMsIDIyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMjMsIDQyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzQzLCA0NF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIERpc3BhdGNoSW5mbzogJ0Rpc3BhdGNoSW5mb1RvMjQ0JyxcbiAgICAgICAgICAgIEhlYXJ0YmVhdDogJ0hlYXJ0YmVhdFRvMjQ0JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs0NSwgNDddLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5hZGRyQWNjb3VudElkVHlwZXNcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs0OCwgNDldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aER1YWxSZWZDb3VudCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs1MCwgOTA5OV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLm1hcFhjbVR5cGVzKCdWMCcpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbOTEwMCwgOTEwNV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLm1hcFhjbVR5cGVzKCdWMScpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgLy8gbWV0YWRhdGEgdjE0XG4gICAgICAgIG1pbm1heDogWzkxMDYsIHVuZGVmaW5lZF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAsXG4gICAgLy8ge1xuICAgIC8vICAgLy8gd2VpZ2h0IHYyIGludHJvZHVjdGlvblxuICAgIC8vICAgbWlubWF4OiBbOTMwMCwgdW5kZWZpbmVkXSxcbiAgICAvLyAgIHR5cGVzOiB7XG4gICAgLy8gICAgIFdlaWdodDogJ1dlaWdodFYyJ1xuICAgIC8vICAgfVxuICAgIC8vIH1cbl07XG4iLCJpbXBvcnQgeyBtYXBYY21UeXBlcyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUnO1xuY29uc3Qgc2hhcmVkVHlwZXMgPSB7XG4gICAgRGlzcGF0Y2hFcnJvck1vZHVsZTogJ0Rpc3BhdGNoRXJyb3JNb2R1bGVVOCcsXG4gICAgVEFzc2V0QmFsYW5jZTogJ3UxMjgnLFxuICAgIFByb3h5VHlwZToge1xuICAgICAgICBfZW51bTogW1xuICAgICAgICAgICAgJ0FueScsXG4gICAgICAgICAgICAnTm9uVHJhbnNmZXInLFxuICAgICAgICAgICAgJ0NhbmNlbFByb3h5JyxcbiAgICAgICAgICAgICdBc3NldHMnLFxuICAgICAgICAgICAgJ0Fzc2V0T3duZXInLFxuICAgICAgICAgICAgJ0Fzc2V0TWFuYWdlcicsXG4gICAgICAgICAgICAnU3Rha2luZydcbiAgICAgICAgXVxuICAgIH0sXG4gICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG59O1xuZXhwb3J0IGNvbnN0IHZlcnNpb25lZCA9IFtcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzAsIDNdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLy8gRW51bSB3YXMgbW9kaWZpZWQgbWlkLWZsaWdodCAtXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGFyaXR5dGVjaC9zdWJzdHJhdGUvcHVsbC8xMDM4Mi9maWxlcyNkaWZmLWU0ZTAxNmIzM2E4MjI2OGI2MjA4ZGM5NzRlZWE4NDFiYWQ0NzU5Nzg2NWE3NDlmZWUyZjkzN2ViNmZkZjY3YjRSNDk4XG4gICAgICAgICAgICBEaXNwYXRjaEVycm9yOiAnRGlzcGF0Y2hFcnJvclByZTZGaXJzdCcsXG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLm1hcFhjbVR5cGVzKCdWMCcpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbNCwgNV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAvLyBBcyBhYm92ZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wb2xrYWRvdC1qcy9hcGkvaXNzdWVzLzUzMDFcbiAgICAgICAgICAgIERpc3BhdGNoRXJyb3I6ICdEaXNwYXRjaEVycm9yUHJlNkZpcnN0JyxcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4ubWFwWGNtVHlwZXMoJ1YxJylcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICAvLyBtZXRhZGF0YSBWMTRcbiAgICAgICAgbWlubWF4OiBbNTAwLCA5NDM0XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIFdlaWdodDogJ1dlaWdodFYxJyxcbiAgICAgICAgICAgIFRBc3NldENvbnZlcnNpb246ICdPcHRpb248QXNzZXRJZD4nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbOTQzNSwgdW5kZWZpbmVkXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIFdlaWdodDogJ1dlaWdodFYxJ1xuICAgICAgICB9XG4gICAgfVxuXTtcbiIsImV4cG9ydCB7IHVwZ3JhZGVzIGFzIGt1c2FtYSB9IGZyb20gJy4va3VzYW1hLmpzJztcbmV4cG9ydCB7IHVwZ3JhZGVzIGFzIHBvbGthZG90IH0gZnJvbSAnLi9wb2xrYWRvdC5qcyc7XG5leHBvcnQgeyB1cGdyYWRlcyBhcyB3ZXN0ZW5kIH0gZnJvbSAnLi93ZXN0ZW5kLmpzJztcbiIsImV4cG9ydCBjb25zdCB1cGdyYWRlcyA9IFtcbiAgICBbXG4gICAgICAgIDAsXG4gICAgICAgIDEwMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI2NjY5LFxuICAgICAgICAxMDIxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAzODI0NSxcbiAgICAgICAgMTAyMixcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNTQyNDgsXG4gICAgICAgIDEwMjMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU5NjU5LFxuICAgICAgICAxMDI0LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA2NzY1MSxcbiAgICAgICAgMTAyNSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgODIxOTEsXG4gICAgICAgIDEwMjcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDgzMjM4LFxuICAgICAgICAxMDI4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDE1MDMsXG4gICAgICAgIDEwMjksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwMzQ2NixcbiAgICAgICAgMTAzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMjk1Nzg3LFxuICAgICAgICAxMDMxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA0NjE2OTIsXG4gICAgICAgIDEwMzIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDUwNDMyOSxcbiAgICAgICAgMTAzMyxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNTY5MzI3LFxuICAgICAgICAxMDM4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA1ODc2ODcsXG4gICAgICAgIDEwMzksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDY1MzE4MyxcbiAgICAgICAgMTA0MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNjkzNDg4LFxuICAgICAgICAxMDQyLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA5MDE0NDIsXG4gICAgICAgIDEwNDUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEzNzUwODYsXG4gICAgICAgIDEwNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NDU0NTgsXG4gICAgICAgIDEwNTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NzI5NjAsXG4gICAgICAgIDEwNTIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NzU2NDgsXG4gICAgICAgIDEwNTMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0OTE1OTYsXG4gICAgICAgIDEwNTQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE1NzQ0MDgsXG4gICAgICAgIDEwNTUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwNjQ5NjEsXG4gICAgICAgIDEwNTgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIyMDE5OTEsXG4gICAgICAgIDEwNjIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI2NzE1MjgsXG4gICAgICAgIDIwMDUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI3MDQyMDIsXG4gICAgICAgIDIwMDcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI3MjgwMDIsXG4gICAgICAgIDIwMDgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI4MzI1MzQsXG4gICAgICAgIDIwMTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI5NjIyOTQsXG4gICAgICAgIDIwMTIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDMyNDAwMDAsXG4gICAgICAgIDIwMTMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDMyNzQ0MDgsXG4gICAgICAgIDIwMTUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDMzMjM1NjUsXG4gICAgICAgIDIwMTksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM1MzQxNzUsXG4gICAgICAgIDIwMjIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM4NjAyODEsXG4gICAgICAgIDIwMjMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDQxNDMxMjksXG4gICAgICAgIDIwMjQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDQ0MDEyNDIsXG4gICAgICAgIDIwMjUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDQ4NDEzNjcsXG4gICAgICAgIDIwMjYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU5NjE2MDAsXG4gICAgICAgIDIwMjcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDYxMzc5MTIsXG4gICAgICAgIDIwMjgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDY1NjE4NTUsXG4gICAgICAgIDIwMjksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDcxMDA4OTEsXG4gICAgICAgIDIwMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc0Njg3OTIsXG4gICAgICAgIDkwMTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNzY2ODYwMCxcbiAgICAgICAgOTAzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA3ODEyNDc2LFxuICAgICAgICA5MDQwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDgwMTA5ODEsXG4gICAgICAgIDkwNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgODA3MzgzMyxcbiAgICAgICAgOTA3MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA4NTU1ODI1LFxuICAgICAgICA5MDgwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg5NDUyNDUsXG4gICAgICAgIDkwOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgOTYxMTM3NyxcbiAgICAgICAgOTEwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA5NjI1MTI5LFxuICAgICAgICA5MTExLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDk4NjY0MjIsXG4gICAgICAgIDkxMjIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA0MDM3ODQsXG4gICAgICAgIDkxMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA5NjA3NjUsXG4gICAgICAgIDkxNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTEwMDY2MTQsXG4gICAgICAgIDkxNTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE0MDQ0ODIsXG4gICAgICAgIDkxNjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE2MDE4MDMsXG4gICAgICAgIDkxNzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTIwMDgwMjIsXG4gICAgICAgIDkxODAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTI0MDU0NTEsXG4gICAgICAgIDkxOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTI2NjU0MTYsXG4gICAgICAgIDkyMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTI5MDk1MDgsXG4gICAgICAgIDkyMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTMxMDk3NTIsXG4gICAgICAgIDkyMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTM1NTU3NzcsXG4gICAgICAgIDkyNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTM3Mjc3NDcsXG4gICAgICAgIDkyNjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTQyNDgwNDQsXG4gICAgICAgIDkyNzEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NDMzODQwLFxuICAgICAgICA5MjgwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTQ2NDU5MDAsXG4gICAgICAgIDkyOTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTA0ODM3NSxcbiAgICAgICAgOTMwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE1NDI2MDE1LFxuICAgICAgICA5MzIwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTU2ODA3MTMsXG4gICAgICAgIDkzNDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTc1NjI5NixcbiAgICAgICAgOTM1MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE1OTEyMDA3LFxuICAgICAgICA5MzYwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTYzNTY1NDcsXG4gICAgICAgIDkzNzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNzMzNTQ1MCxcbiAgICAgICAgOTM4MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE4MDYyNzM5LFxuICAgICAgICA5NDIwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE4NjI1MDAwLFxuICAgICAgICA5NDMwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwNDY1ODA2LFxuICAgICAgICAxMDAwMDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMTU3MDAwMCxcbiAgICAgICAgMTAwMTAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA3XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIxNzg2MjkxLFxuICAgICAgICAxMDAxMDAyLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGZiYzU3N2I5ZDc0N2VmZDZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMjI1MTU5NjIsXG4gICAgICAgIDEwMDEwMDMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgN1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMjc5MDAwMCxcbiAgICAgICAgMTAwMjAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMzE3NjAxNSxcbiAgICAgICAgMTAwMjAwMSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF1cbl07XG4iLCJleHBvcnQgY29uc3QgdXBncmFkZXMgPSBbXG4gICAgW1xuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyOTIzMSxcbiAgICAgICAgMSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTg4ODM2LFxuICAgICAgICA1LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxOTk0MDUsXG4gICAgICAgIDYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIxNDI2NCxcbiAgICAgICAgNyxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMjQ0MzU4LFxuICAgICAgICA4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAzMDMwNzksXG4gICAgICAgIDksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDMxNDIwMSxcbiAgICAgICAgMTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM0MjQwMCxcbiAgICAgICAgMTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDQ0Mzk2MyxcbiAgICAgICAgMTIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDUyODQ3MCxcbiAgICAgICAgMTMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDY4Nzc1MSxcbiAgICAgICAgMTQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc0NjA4NSxcbiAgICAgICAgMTUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc4NzkyMyxcbiAgICAgICAgMTYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc5OTMwMixcbiAgICAgICAgMTcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEyMDUxMjgsXG4gICAgICAgIDE4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNjAzNDIzLFxuICAgICAgICAyMyxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTczMzIxOCxcbiAgICAgICAgMjQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwMDU2NzMsXG4gICAgICAgIDI1LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyNDM2Njk4LFxuICAgICAgICAyNixcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMzYxMzU2NCxcbiAgICAgICAgMjcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM4OTk1NDcsXG4gICAgICAgIDI4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA0MzQ1NzY3LFxuICAgICAgICAyOSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNDg3NjEzNCxcbiAgICAgICAgMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU2NjE0NDIsXG4gICAgICAgIDkwNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNjMyMTYxOSxcbiAgICAgICAgOTA4MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA2NzEzMjQ5LFxuICAgICAgICA5MDkwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDcyMTc5MDcsXG4gICAgICAgIDkxMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNzIyOTEyNixcbiAgICAgICAgOTExMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA3NTYwNTU4LFxuICAgICAgICA5MTIyLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDgxMTU4NjksXG4gICAgICAgIDkxNDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgODYzODEwMyxcbiAgICAgICAgOTE1MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA5MjgwMTc5LFxuICAgICAgICA5MTcwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDk3Mzg3MTcsXG4gICAgICAgIDkxODAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTAxNTY4NTYsXG4gICAgICAgIDkxOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA0NTg1NzYsXG4gICAgICAgIDkyMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA2NTUxMTYsXG4gICAgICAgIDkyMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA4NzkzNzEsXG4gICAgICAgIDkyMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTEzMjg4ODQsXG4gICAgICAgIDkyNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE1MzI4NTYsXG4gICAgICAgIDkyNjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE5MzM4MTgsXG4gICAgICAgIDkyNzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTIyMTc1MzUsXG4gICAgICAgIDkyODAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEyMjQ1Mjc3LFxuICAgICAgICA5MjgxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMjUzMjY0NCxcbiAgICAgICAgOTI5MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEyODc2MTg5LFxuICAgICAgICA5MzAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTM4MDAwMTUsXG4gICAgICAgIDkzNDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNDE4ODgzMyxcbiAgICAgICAgOTM2MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NTQzOTE4LFxuICAgICAgICA5MzcwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTU5NzgzNjIsXG4gICAgICAgIDk0MjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTY0NTAwMDAsXG4gICAgICAgIDk0MzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTc4NDAwMDAsXG4gICAgICAgIDk0MzEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTg0MDc0NzUsXG4gICAgICAgIDEwMDAwMDEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTk1NTEwMDAsXG4gICAgICAgIDEwMDEwMDIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMDE4MTc1OCxcbiAgICAgICAgMTAwMTAwMyxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwNDM4NTMwLFxuICAgICAgICAxMDAyMDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXVxuXTtcbiIsImV4cG9ydCBjb25zdCB1cGdyYWRlcyA9IFtcbiAgICBbXG4gICAgICAgIDIxNDM1NixcbiAgICAgICAgNCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMzkyNzY0LFxuICAgICAgICA3LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA0MDk3NDAsXG4gICAgICAgIDgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDgwOTk3NixcbiAgICAgICAgMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg3NzU4MSxcbiAgICAgICAgMjQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg3OTIzOCxcbiAgICAgICAgMjUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg4OTQ3MixcbiAgICAgICAgMjYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDkwMjkzNyxcbiAgICAgICAgMjcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDkzMjc1MSxcbiAgICAgICAgMjgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDk5MTE0MixcbiAgICAgICAgMjksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEwMzAxNjIsXG4gICAgICAgIDMxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTE5NjU3LFxuICAgICAgICAzMixcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE5OTI4MixcbiAgICAgICAgMzMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEzNDI1MzQsXG4gICAgICAgIDM0LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMzkyMjYzLFxuICAgICAgICAzNSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTQzMTcwMyxcbiAgICAgICAgMzYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0MzMzNjksXG4gICAgICAgIDM3LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNDkwOTcyLFxuICAgICAgICA0MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMjA4NzM5NyxcbiAgICAgICAgNDMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIzMTY2ODgsXG4gICAgICAgIDQ0LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyNTQ5ODY0LFxuICAgICAgICA0NSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMzkyNTc4MixcbiAgICAgICAgNDYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM5MjU4NDMsXG4gICAgICAgIDQ3LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA0MjA3ODAwLFxuICAgICAgICA0OCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNDYyNzk0NCxcbiAgICAgICAgNDksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDUxMjQwNzYsXG4gICAgICAgIDUwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA1NDc4NjY0LFxuICAgICAgICA5MDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU0ODI0NTAsXG4gICAgICAgIDkwMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNTU4NDMwNSxcbiAgICAgICAgOTAxMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA1Nzg0NTY2LFxuICAgICAgICA5MDMwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU4Nzk4MjIsXG4gICAgICAgIDkwMzEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNTg5Njg1NixcbiAgICAgICAgOTAzMixcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA1ODk3MzE2LFxuICAgICAgICA5MDMzLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDYxMTc5MjcsXG4gICAgICAgIDkwNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNjIxMDI3NCxcbiAgICAgICAgOTA3MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA2Mzc5MzE0LFxuICAgICAgICA5MDgwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDY5NzkxNDEsXG4gICAgICAgIDkwOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNzU2ODQ1MyxcbiAgICAgICAgOTEwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA3NzY2Mzk0LFxuICAgICAgICA5MTExLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc5MTE2OTEsXG4gICAgICAgIDkxMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNzk2ODg2NixcbiAgICAgICAgOTEyMSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA3OTgyODg5LFxuICAgICAgICA5MTIyLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg1MTQzMjIsXG4gICAgICAgIDkxMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgOTA5MTcyNixcbiAgICAgICAgOTE0MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA5MDkxNzc0LFxuICAgICAgICA5MTUwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDk0MDY3MjYsXG4gICAgICAgIDkxNjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgOTkyMTA2NixcbiAgICAgICAgOTE3MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDAwNzExNSxcbiAgICAgICAgOTE4MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDQ4MDk3MyxcbiAgICAgICAgOTE5MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDU3ODA5MSxcbiAgICAgICAgOTIwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDY3ODUwOSxcbiAgICAgICAgOTIxMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDgxMTAwMSxcbiAgICAgICAgOTIyMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTA5NjExNixcbiAgICAgICAgOTIzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTQwOTI3OSxcbiAgICAgICAgOTI1MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTU4NDgyMCxcbiAgICAgICAgOTI1MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTcxNjgzNyxcbiAgICAgICAgOTI2MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTg3NjkxOSxcbiAgICAgICAgOTI2MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTk4NzkyNyxcbiAgICAgICAgOTI3MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTIwNzczMjQsXG4gICAgICAgIDkyNzEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEyMzAxODcxLFxuICAgICAgICA5MjgwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTI2MDQzNDMsXG4gICAgICAgIDkyOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMjg0MTAzNCxcbiAgICAgICAgOTMwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEzMTI4MjM3LFxuICAgICAgICA5MzEwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTMyNzIzNjMsXG4gICAgICAgIDkzMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMzQ4MzQ5NyxcbiAgICAgICAgOTMzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEzNjQ5NDMzLFxuICAgICAgICA5MzQwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTM3NjExMDAsXG4gICAgICAgIDkzNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMzg0NzQwMCxcbiAgICAgICAgOTM2MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0MjQ5MjAwLFxuICAgICAgICA5MzcwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTQ1NzY4NTUsXG4gICAgICAgIDkzODAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNDg0OTgzMCxcbiAgICAgICAgOTM5MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTE0NjgzMixcbiAgICAgICAgOTQwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTMzMjMxNyxcbiAgICAgICAgOTQwMSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTY2MTc5MyxcbiAgICAgICAgOTQyMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNjE2NTQ2OSxcbiAgICAgICAgOTQzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxODI5Mzk4NCxcbiAgICAgICAgMTAyMDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGZiYzU3N2I5ZDc0N2VmZDZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTgyOTM5OTEsXG4gICAgICAgIDEwMzAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA4XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE4NDUxNzgzLFxuICAgICAgICAxMDQwMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgOVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxODY3OTc0MSxcbiAgICAgICAgMTAwNTAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5MTY2Njk1LFxuICAgICAgICAxMDA2MDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5MjM0MTU3LFxuICAgICAgICAxMDA2MDAxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5NTQyOTQ0LFxuICAgICAgICAxMDA3MDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5NjIxMjU4LFxuICAgICAgICAxMDA3MDAxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5NzYxNDA2LFxuICAgICAgICAxMDA4MDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwMDU2OTk3LFxuICAgICAgICAxMDA5MDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwMzY4MzE4LFxuICAgICAgICAxMDEwMDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NmZmNTJlZTg1OGU2YzViZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMDY0OTA4NixcbiAgICAgICAgMTAxMTAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDZmZjUyZWU4NThlNmM1YmRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGZiYzU3N2I5ZDc0N2VmZDZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdXG5dO1xuIiwiaW1wb3J0IHsgc2VsZWN0YWJsZU5ldHdvcmtzIH0gZnJvbSAnQHBvbGthZG90L25ldHdvcmtzJztcbmltcG9ydCB7IEJOLCBoZXhUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCAqIGFzIGFsbEtub3duIGZyb20gJy4vZTJlL2luZGV4LmpzJztcbmNvbnN0IE5FVF9FWFRSQSA9IHtcbiAgICB3ZXN0ZW5kOiB7XG4gICAgICAgIGdlbmVzaXNIYXNoOiBbJzB4ZTE0M2YyMzgwM2FjNTBlOGY2ZjhlNjI2OTVkMWNlOWU0ZTFkNjhhYTM2YzFjZDJjZmQxNTM0MDIxM2YzNDIzZSddXG4gICAgfVxufTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIG1hcFJhdyhbbmV0d29yaywgdmVyc2lvbnNdKSB7XG4gICAgY29uc3QgY2hhaW4gPSBzZWxlY3RhYmxlTmV0d29ya3MuZmluZCgobikgPT4gbi5uZXR3b3JrID09PSBuZXR3b3JrKSB8fCBORVRfRVhUUkFbbmV0d29ya107XG4gICAgaWYgKCFjaGFpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGluZm8gZm9yIGNoYWluICR7bmV0d29ya31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2VuZXNpc0hhc2g6IGhleFRvVThhKGNoYWluLmdlbmVzaXNIYXNoWzBdKSxcbiAgICAgICAgbmV0d29yayxcbiAgICAgICAgdmVyc2lvbnM6IHZlcnNpb25zLm1hcCgoW2Jsb2NrTnVtYmVyLCBzcGVjVmVyc2lvbiwgYXBpc10pID0+ICh7XG4gICAgICAgICAgICBhcGlzLFxuICAgICAgICAgICAgYmxvY2tOdW1iZXI6IG5ldyBCTihibG9ja051bWJlciksXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogbmV3IEJOKHNwZWNWZXJzaW9uKVxuICAgICAgICB9KSlcbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IHVwZ3JhZGVzID0gT2JqZWN0LmVudHJpZXMoYWxsS25vd24pLm1hcChtYXBSYXcpO1xuIiwiaW1wb3J0IHsgYm5Ub0JuIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgdHlwZXNDaGFpbiB9IGZyb20gJy4vY2hhaW4vaW5kZXguanMnO1xuaW1wb3J0IHsgdHlwZXNTcGVjIH0gZnJvbSAnLi9zcGVjL2luZGV4LmpzJztcbmltcG9ydCB7IHVwZ3JhZGVzIH0gZnJvbSAnLi91cGdyYWRlcy9pbmRleC5qcyc7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQZXJmb3JtIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2luZyB0aGUgc3RyaW5naWZpZWQgc3BlYy9jaGFpblxuICogQGludGVybmFsXG4gKiAqL1xuZnVuY3Rpb24gd2l0aE5hbWVzKGNoYWluTmFtZSwgc3BlY05hbWUsIGZuKSB7XG4gICAgcmV0dXJuIGZuKGNoYWluTmFtZS50b1N0cmluZygpLCBzcGVjTmFtZS50b1N0cmluZygpKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uRmZsYXR0ZW4gYSBWZXJzaW9uZWRUeXBlW10gaW50byBhIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqIEBpbnRlcm5hbFxuICogKi9cbmZ1bmN0aW9uIGZpbHRlclZlcnNpb25zKHZlcnNpb25zID0gW10sIHNwZWNWZXJzaW9uKSB7XG4gICAgcmV0dXJuIHZlcnNpb25zXG4gICAgICAgIC5maWx0ZXIoKHsgbWlubWF4OiBbbWluLCBtYXhdIH0pID0+IChtaW4gPT09IHVuZGVmaW5lZCB8fCBtaW4gPT09IG51bGwgfHwgc3BlY1ZlcnNpb24gPj0gbWluKSAmJlxuICAgICAgICAobWF4ID09PSB1bmRlZmluZWQgfHwgbWF4ID09PSBudWxsIHx8IHNwZWNWZXJzaW9uIDw9IG1heCkpXG4gICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwgeyB0eXBlcyB9KSA9PiAoeyAuLi5yZXN1bHQsIC4uLnR5cGVzIH0pLCB7fSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlZCBvbiB0aGUgY2hhaW4gYW5kIHJ1bnRpbWVWZXJzaW9uLCBnZXQgdGhlIGFwcGxpY2FibGUgc2lnbmVkIGV4dGVuc2lvbnMgKHJlYWR5IGZvciByZWdpc3RyYXRpb24pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGVjRXh0ZW5zaW9ucyh7IGtub3duVHlwZXMgfSwgY2hhaW5OYW1lLCBzcGVjTmFtZSkge1xuICAgIHJldHVybiB3aXRoTmFtZXMoY2hhaW5OYW1lLCBzcGVjTmFtZSwgKGMsIHMpID0+ICh7XG4gICAgICAgIC4uLihrbm93blR5cGVzLnR5cGVzQnVuZGxlPy5zcGVjPy5bc10/LnNpZ25lZEV4dGVuc2lvbnMgPz8ge30pLFxuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0J1bmRsZT8uY2hhaW4/LltjXT8uc2lnbmVkRXh0ZW5zaW9ucyA/PyB7fSlcbiAgICB9KSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlZCBvbiB0aGUgY2hhaW4gYW5kIHJ1bnRpbWVWZXJzaW9uLCBnZXQgdGhlIGFwcGxpY2FibGUgdHlwZXMgKHJlYWR5IGZvciByZWdpc3RyYXRpb24pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGVjVHlwZXMoeyBrbm93blR5cGVzIH0sIGNoYWluTmFtZSwgc3BlY05hbWUsIHNwZWNWZXJzaW9uKSB7XG4gICAgY29uc3QgX3NwZWNWZXJzaW9uID0gYm5Ub0JuKHNwZWNWZXJzaW9uKS50b051bWJlcigpO1xuICAgIHJldHVybiB3aXRoTmFtZXMoY2hhaW5OYW1lLCBzcGVjTmFtZSwgKGMsIHMpID0+ICh7XG4gICAgICAgIC8vIFRoZSBvcmRlciBoZXJlIGlzIGFsd2F5cywgYmFzZWQgb24gLVxuICAgICAgICAvLyAgIC0gc3BlYyB0aGVuIGNoYWluXG4gICAgICAgIC8vICAgLSB0eXBlc0J1bmRsZSB0YWtlcyBoaWdoZXIgcHJlY2VkZW5jZVxuICAgICAgICAvLyAgIC0gdHlwZXMgaXMgdGhlIGZpbmFsIGNhdGNoLWFsbCBvdmVycmlkZVxuICAgICAgICAuLi5maWx0ZXJWZXJzaW9ucyh0eXBlc1NwZWNbc10sIF9zcGVjVmVyc2lvbiksXG4gICAgICAgIC4uLmZpbHRlclZlcnNpb25zKHR5cGVzQ2hhaW5bY10sIF9zcGVjVmVyc2lvbiksXG4gICAgICAgIC4uLmZpbHRlclZlcnNpb25zKGtub3duVHlwZXMudHlwZXNCdW5kbGU/LnNwZWM/LltzXT8udHlwZXMsIF9zcGVjVmVyc2lvbiksXG4gICAgICAgIC4uLmZpbHRlclZlcnNpb25zKGtub3duVHlwZXMudHlwZXNCdW5kbGU/LmNoYWluPy5bY10/LnR5cGVzLCBfc3BlY1ZlcnNpb24pLFxuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc1NwZWM/LltzXSA/PyB7fSksXG4gICAgICAgIC4uLihrbm93blR5cGVzLnR5cGVzQ2hhaW4/LltjXSA/PyB7fSksXG4gICAgICAgIC4uLihrbm93blR5cGVzLnR5cGVzID8/IHt9KVxuICAgIH0pKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2VkIG9uIHRoZSBjaGFpbiBvciBzcGVjLCByZXR1cm4gdGhlIGhhc2hlciB1c2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGVjSGFzaGVyKHsga25vd25UeXBlcyB9LCBjaGFpbk5hbWUsIHNwZWNOYW1lKSB7XG4gICAgcmV0dXJuIHdpdGhOYW1lcyhjaGFpbk5hbWUsIHNwZWNOYW1lLCAoYywgcykgPT4ga25vd25UeXBlcy5oYXNoZXIgfHxcbiAgICAgICAga25vd25UeXBlcy50eXBlc0J1bmRsZT8uY2hhaW4/LltjXT8uaGFzaGVyIHx8XG4gICAgICAgIGtub3duVHlwZXMudHlwZXNCdW5kbGU/LnNwZWM/LltzXT8uaGFzaGVyIHx8XG4gICAgICAgIG51bGwpO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZWQgb24gdGhlIGNoYWluIGFuZCBydW50aW1lVmVyc2lvbiwgZ2V0IHRoZSBhcHBsaWNhYmxlIHJwYyBkZWZpbml0aW9ucyAocmVhZHkgZm9yIHJlZ2lzdHJhdGlvbilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwZWNScGMoeyBrbm93blR5cGVzIH0sIGNoYWluTmFtZSwgc3BlY05hbWUpIHtcbiAgICByZXR1cm4gd2l0aE5hbWVzKGNoYWluTmFtZSwgc3BlY05hbWUsIChjLCBzKSA9PiAoe1xuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0J1bmRsZT8uc3BlYz8uW3NdPy5ycGMgPz8ge30pLFxuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0J1bmRsZT8uY2hhaW4/LltjXT8ucnBjID8/IHt9KVxuICAgIH0pKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2VkIG9uIHRoZSBjaGFpbiBhbmQgcnVudGltZVZlcnNpb24sIGdldCB0aGUgYXBwbGljYWJsZSBydW50aW1lIGRlZmluaXRpb25zIChyZWFkeSBmb3IgcmVnaXN0cmF0aW9uKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BlY1J1bnRpbWUoeyBrbm93blR5cGVzIH0sIGNoYWluTmFtZSwgc3BlY05hbWUpIHtcbiAgICByZXR1cm4gd2l0aE5hbWVzKGNoYWluTmFtZSwgc3BlY05hbWUsIChjLCBzKSA9PiAoe1xuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0J1bmRsZT8uc3BlYz8uW3NdPy5ydW50aW1lID8/IHt9KSxcbiAgICAgICAgLi4uKGtub3duVHlwZXMudHlwZXNCdW5kbGU/LmNoYWluPy5bY10/LnJ1bnRpbWUgPz8ge30pXG4gICAgfSkpO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZWQgb24gdGhlIGNoYWluIGFuZCBydW50aW1lVmVyc2lvbiwgZ2V0IHRoZSBhcHBsaWNhYmxlIGFsaWFzIGRlZmluaXRpb25zIChyZWFkeSBmb3IgcmVnaXN0cmF0aW9uKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BlY0FsaWFzKHsga25vd25UeXBlcyB9LCBjaGFpbk5hbWUsIHNwZWNOYW1lKSB7XG4gICAgcmV0dXJuIHdpdGhOYW1lcyhjaGFpbk5hbWUsIHNwZWNOYW1lLCAoYywgcykgPT4gKHtcbiAgICAgICAgLy8gYXMgcGVyIHZlcnNpb25zLCBmaXJzdCBzcGVjLCB0aGVuIGNoYWluIHRoZW4gZmluYWxseSBub24tdmVyc2lvbmVkXG4gICAgICAgIC4uLihrbm93blR5cGVzLnR5cGVzQnVuZGxlPy5zcGVjPy5bc10/LmFsaWFzID8/IHt9KSxcbiAgICAgICAgLi4uKGtub3duVHlwZXMudHlwZXNCdW5kbGU/LmNoYWluPy5bY10/LmFsaWFzID8/IHt9KSxcbiAgICAgICAgLi4uKGtub3duVHlwZXMudHlwZXNBbGlhcyA/PyB7fSlcbiAgICB9KSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgdmVyc2lvbiByZWNvcmQgZm9yIGtub3duIGNoYWlucyB3aGVyZSB1cGdyYWRlcyBhcmUgYmVpbmcgdHJhY2tlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBncmFkZVZlcnNpb24oZ2VuZXNpc0hhc2gsIGJsb2NrTnVtYmVyKSB7XG4gICAgY29uc3Qga25vd24gPSB1cGdyYWRlcy5maW5kKCh1KSA9PiBnZW5lc2lzSGFzaC5lcSh1LmdlbmVzaXNIYXNoKSk7XG4gICAgcmV0dXJuIGtub3duXG4gICAgICAgID8gW1xuICAgICAgICAgICAga25vd24udmVyc2lvbnMucmVkdWNlKChsYXN0LCB2ZXJzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrTnVtYmVyLmd0KHZlcnNpb24uYmxvY2tOdW1iZXIpXG4gICAgICAgICAgICAgICAgICAgID8gdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICA6IGxhc3Q7XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQpLFxuICAgICAgICAgICAga25vd24udmVyc2lvbnMuZmluZCgodmVyc2lvbikgPT4gYmxvY2tOdW1iZXIubHRlKHZlcnNpb24uYmxvY2tOdW1iZXIpKVxuICAgICAgICBdXG4gICAgICAgIDogW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbn1cbiIsImltcG9ydCAqIGFzIHR5cGVEZWZpbml0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvZGVmaW5pdGlvbnMuanMnO1xuaW1wb3J0IHJwY0RlZmluaXRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9qc29ucnBjLmpzJztcbmV4cG9ydCB7IFR5cGVEZWZJbmZvIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5leHBvcnQgeyBjb252ZXJ0U2lWMHRvVjEgfSBmcm9tICcuL21ldGFkYXRhL1BvcnRhYmxlUmVnaXN0cnkvaW5kZXguanMnO1xuZXhwb3J0IHsgcGFja2FnZUluZm8gfSBmcm9tICcuL3BhY2thZ2VJbmZvLmpzJztcbmV4cG9ydCB7IHVud3JhcFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29kZWMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmRleC50eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21ldGFkYXRhL2luZGV4LmpzJztcbmV4cG9ydCB7IHJwY0RlZmluaXRpb25zLCB0eXBlRGVmaW5pdGlvbnMgfTtcbiIsImV4cG9ydCB7IEJUcmVlTWFwLCBCVHJlZVNldCwgQ29kZWNNYXAsIENvZGVjU2V0LCBDb21wYWN0LCBEb05vdENvbnN0cnVjdCwgRW51bSwgSGFzaE1hcCwgSW50LCBKc29uLCBMaW5rYWdlLCBNYXAsIE9wdGlvbiwgUmFuZ2UsIFJhbmdlSW5jbHVzaXZlLCBSYXcsIFJlc3VsdCwgU2V0LCBTdHJ1Y3QsIFR1cGxlLCBVOGFGaXhlZCwgVUludCwgVmVjLCBWZWNGaXhlZCwgV3JhcHBlcktlZXBPcGFxdWUsIFdyYXBwZXJPcGFxdWUgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuIiwiaW1wb3J0IHsgY3JlYXRlQ2xhc3NVbnNhZmUgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGFzcyhyZWdpc3RyeSwgdHlwZSkge1xuICAgIHJldHVybiBjcmVhdGVDbGFzc1Vuc2FmZShyZWdpc3RyeSwgdHlwZSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVUeXBlVW5zYWZlIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIGB0eXBlYCB3aXRoIGEgZ2l2ZW4gYHBhcmFtc2AuXG4gKiBAcGFyYW0gdHlwZSAtIEEgcmVjb2duaXphYmxlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHR5cGUgdG8gY3JlYXRlIGFuXG4gKiBpbnN0YW5jZSBmcm9tXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZhbHVlIHRvIGluc3RhbnRpYXRlIHRoZSB0eXBlIHdpdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGUocmVnaXN0cnksIHR5cGUsIC4uLnBhcmFtcykge1xuICAgIHJldHVybiBjcmVhdGVUeXBlVW5zYWZlKHJlZ2lzdHJ5LCB0eXBlLCBwYXJhbXMpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZS9leHBvcnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlQ2xhc3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGVUeXBlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGF6eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdHJ5LmpzJztcbiIsImltcG9ydCB7IGxhenlNZXRob2QgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgZnVuY3Rpb24gbGF6eVZhcmlhbnRzKGxvb2t1cCwgeyB0eXBlIH0sIGdldE5hbWUsIGNyZWF0b3IpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB2YXJpYW50cyA9IGxvb2t1cC5nZXRTaVR5cGUodHlwZSkuZGVmLmFzVmFyaWFudC52YXJpYW50cztcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSB2YXJpYW50cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGxhenlNZXRob2QocmVzdWx0LCB2YXJpYW50c1tpXSwgY3JlYXRvciwgZ2V0TmFtZSwgaSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBEb05vdENvbnN0cnVjdCwgSnNvbiwgUmF3IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGNvbnN0cnVjdFR5cGVDbGFzcywgY3JlYXRlQ2xhc3NVbnNhZmUsIGNyZWF0ZVR5cGVVbnNhZmUgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbmltcG9ydCB7IGFzc2VydFJldHVybiwgQk5fWkVSTywgZm9ybWF0QmFsYW5jZSwgaXNCbiwgaXNGdW5jdGlvbiwgaXNOdW1iZXIsIGlzU3RyaW5nLCBpc1U4YSwgbGF6eU1ldGhvZCwgbG9nZ2VyLCBvYmplY3RTcHJlYWQsIHN0cmluZ0NhbWVsQ2FzZSwgc3RyaW5naWZ5IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgYmxha2UyQXNVOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgZXhwYW5kRXh0ZW5zaW9uVHlwZXMsIGZhbGxiYWNrRXh0ZW5zaW9ucywgZmluZFVua25vd25FeHRlbnNpb25zIH0gZnJvbSAnLi4vZXh0cmluc2ljL3NpZ25lZEV4dGVuc2lvbnMvaW5kZXguanMnO1xuaW1wb3J0IHsgR2VuZXJpY0V2ZW50RGF0YSB9IGZyb20gJy4uL2dlbmVyaWMvRXZlbnQuanMnO1xuaW1wb3J0ICogYXMgYmFzZVR5cGVzIGZyb20gJy4uL2luZGV4LnR5cGVzLmpzJztcbmltcG9ydCAqIGFzIGRlZmluaXRpb25zIGZyb20gJy4uL2ludGVyZmFjZXMvZGVmaW5pdGlvbnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ2FsbEZ1bmN0aW9uIH0gZnJvbSAnLi4vbWV0YWRhdGEvZGVjb3JhdGUvZXh0cmluc2ljcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZWNvcmF0ZUNvbnN0YW50cywgZmlsdGVyQ2FsbHNTb21lLCBmaWx0ZXJFdmVudHNTb21lIH0gZnJvbSAnLi4vbWV0YWRhdGEvZGVjb3JhdGUvaW5kZXguanMnO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuLi9tZXRhZGF0YS9NZXRhZGF0YS5qcyc7XG5pbXBvcnQgeyBQb3J0YWJsZVJlZ2lzdHJ5IH0gZnJvbSAnLi4vbWV0YWRhdGEvUG9ydGFibGVSZWdpc3RyeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBsYXp5VmFyaWFudHMgfSBmcm9tICcuL2xhenkuanMnO1xuY29uc3QgREVGQVVMVF9GSVJTVF9DQUxMX0lEWCA9IG5ldyBVaW50OEFycmF5KDIpO1xuY29uc3QgbCA9IGxvZ2dlcigncmVnaXN0cnknKTtcbmZ1bmN0aW9uIHNvcnREZWNpbWFsU3RyaW5ncyhhLCBiKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGEsIDEwKSAtIHBhcnNlSW50KGIsIDEwKTtcbn1cbmZ1bmN0aW9uIHZhbHVlVG9TdHJpbmcodikge1xuICAgIHJldHVybiB2LnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBnZXRGaWVsZEFyZ3MobG9va3VwLCBmaWVsZHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGZpZWxkcy5sZW5ndGg7XG4gICAgY29uc3QgYXJncyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBsb29rdXAuZ2V0VHlwZURlZihmaWVsZHNbaV0udHlwZSkudHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5mdW5jdGlvbiBjbGVhclJlY29yZChyZWNvcmQpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBrZXlzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgZGVsZXRlIHJlY29yZFtrZXlzW2ldXTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRWYXJpYW50U3RyaW5nSWR4KHsgaW5kZXggfSkge1xuICAgIHJldHVybiBpbmRleC50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gaW5qZWN0RXJyb3JzKF8sIHsgbG9va3VwLCBwYWxsZXRzIH0sIHZlcnNpb24sIHJlc3VsdCkge1xuICAgIGNsZWFyUmVjb3JkKHJlc3VsdCk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gcGFsbGV0cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JzLCBpbmRleCwgbmFtZSB9ID0gcGFsbGV0c1tpXTtcbiAgICAgICAgaWYgKGVycm9ycy5pc1NvbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gc3RyaW5nQ2FtZWxDYXNlKG5hbWUpO1xuICAgICAgICAgICAgbGF6eU1ldGhvZChyZXN1bHQsIHZlcnNpb24gPj0gMTIgPyBpbmRleC50b051bWJlcigpIDogaSwgKCkgPT4gbGF6eVZhcmlhbnRzKGxvb2t1cCwgZXJyb3JzLnVud3JhcCgpLCBnZXRWYXJpYW50U3RyaW5nSWR4LCAoeyBkb2NzLCBmaWVsZHMsIGluZGV4LCBuYW1lIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgYXJnczogZ2V0RmllbGRBcmdzKGxvb2t1cCwgZmllbGRzKSxcbiAgICAgICAgICAgICAgICBkb2NzOiBkb2NzLm1hcCh2YWx1ZVRvU3RyaW5nKSxcbiAgICAgICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LnRvTnVtYmVyKCksXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBuYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb25OYW1lXG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaW5qZWN0RXZlbnRzKHJlZ2lzdHJ5LCB7IGxvb2t1cCwgcGFsbGV0cyB9LCB2ZXJzaW9uLCByZXN1bHQpIHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHBhbGxldHMuZmlsdGVyKGZpbHRlckV2ZW50c1NvbWUpO1xuICAgIGNsZWFyUmVjb3JkKHJlc3VsdCk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gZmlsdGVyZWQubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB7IGV2ZW50cywgaW5kZXgsIG5hbWUgfSA9IGZpbHRlcmVkW2ldO1xuICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgdmVyc2lvbiA+PSAxMiA/IGluZGV4LnRvTnVtYmVyKCkgOiBpLCAoKSA9PiBsYXp5VmFyaWFudHMobG9va3VwLCBldmVudHMudW53cmFwKCksIGdldFZhcmlhbnRTdHJpbmdJZHgsICh2YXJpYW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gcmVnaXN0cnkuY3JlYXRlVHlwZSgnRXZlbnRNZXRhZGF0YUxhdGVzdCcsIG9iamVjdFNwcmVhZCh7fSwgdmFyaWFudCwgeyBhcmdzOiBnZXRGaWVsZEFyZ3MobG9va3VwLCB2YXJpYW50LmZpZWxkcykgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgR2VuZXJpY0V2ZW50RGF0YSB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSwgbWV0YSwgc3RyaW5nQ2FtZWxDYXNlKG5hbWUpLCB2YXJpYW50Lm5hbWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluamVjdEV4dHJpbnNpY3MocmVnaXN0cnksIHsgbG9va3VwLCBwYWxsZXRzIH0sIHZlcnNpb24sIHJlc3VsdCwgbWFwcGluZykge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gcGFsbGV0cy5maWx0ZXIoZmlsdGVyQ2FsbHNTb21lKTtcbiAgICBjbGVhclJlY29yZChyZXN1bHQpO1xuICAgIGNsZWFyUmVjb3JkKG1hcHBpbmcpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGZpbHRlcmVkLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBjYWxscywgaW5kZXgsIG5hbWUgfSA9IGZpbHRlcmVkW2ldO1xuICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSB2ZXJzaW9uID49IDEyID8gaW5kZXgudG9OdW1iZXIoKSA6IGk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gc3RyaW5nQ2FtZWxDYXNlKG5hbWUpO1xuICAgICAgICBjb25zdCBhbGxDYWxscyA9IGNhbGxzLnVud3JhcCgpO1xuICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc2VjdGlvbkluZGV4LCAoKSA9PiBsYXp5VmFyaWFudHMobG9va3VwLCBhbGxDYWxscywgZ2V0VmFyaWFudFN0cmluZ0lkeCwgKHZhcmlhbnQpID0+IGNyZWF0ZUNhbGxGdW5jdGlvbihyZWdpc3RyeSwgbG9va3VwLCB2YXJpYW50LCBzZWN0aW9uTmFtZSwgc2VjdGlvbkluZGV4KSkpO1xuICAgICAgICBjb25zdCB7IHBhdGggfSA9IHJlZ2lzdHJ5Lmxvb2t1cC5nZXRTaVR5cGUoYWxsQ2FsbHMudHlwZSk7XG4gICAgICAgIC8vIGZyYW1lX3N5c3RlbTo6cGFsbGV0OjpDYWxsIC8gcGFsbGV0X2JhbGFuY2VzOjpwYWxsZXQ6OkNhbGwgLyBwb2xrYWRvdF9ydW50aW1lX3BhcmFjaGFpbnM6OmNvbmZpZ3VyYXRpb246OnBhbGxldDo6Q2FsbCAvXG4gICAgICAgIGNvbnN0IHBhbGxldElkeCA9IHBhdGguZmluZEluZGV4KCh2KSA9PiB2LmVxKCdwYWxsZXQnKSk7XG4gICAgICAgIGlmIChwYWxsZXRJZHggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gc3RyaW5nQ2FtZWxDYXNlKHBhdGhcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgcGFsbGV0SWR4KVxuICAgICAgICAgICAgICAgIC5tYXAoKHAsIGkpID0+IGkgPT09IDBcbiAgICAgICAgICAgICAgICAvLyBmcmFtZV9zeXN0ZW0gfHwgcGFsbGV0X2JhbGFuY2VzXG4gICAgICAgICAgICAgICAgPyBwLnJlcGxhY2UoL14oZnJhbWV8cGFsbGV0KV8vLCAnJylcbiAgICAgICAgICAgICAgICA6IHApXG4gICAgICAgICAgICAgICAgLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICBpZiAoIW1hcHBpbmdbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nW25hbWVdID0gW3NlY3Rpb25OYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hcHBpbmdbbmFtZV0ucHVzaChzZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBleHRyYWN0UHJvcGVydGllcyhyZWdpc3RyeSwgbWV0YWRhdGEpIHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IHJlZ2lzdHJ5LmdldENoYWluUHJvcGVydGllcygpO1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IGRlY29yYXRlQ29uc3RhbnRzKHJlZ2lzdHJ5LCBtZXRhZGF0YS5hc0xhdGVzdCwgbWV0YWRhdGEudmVyc2lvbik7XG4gICAgY29uc3Qgc3M1OEZvcm1hdCA9IGNvbnN0YW50c1snc3lzdGVtJ10gJiYgKGNvbnN0YW50c1snc3lzdGVtJ11bJ3NTNThQcmVmaXgnXSB8fCBjb25zdGFudHNbJ3N5c3RlbSddWydzczU4UHJlZml4J10pO1xuICAgIGlmICghc3M1OEZvcm1hdCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgfVxuICAgIGNvbnN0IHsgaXNFdGhlcmV1bSwgdG9rZW5EZWNpbWFscywgdG9rZW5TeW1ib2wgfSA9IG9yaWdpbmFsIHx8IHt9O1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdDaGFpblByb3BlcnRpZXMnLCBbeyBpc0V0aGVyZXVtLCBzczU4Rm9ybWF0LCB0b2tlbkRlY2ltYWxzLCB0b2tlblN5bWJvbCB9XSk7XG59XG5leHBvcnQgY2xhc3MgVHlwZVJlZ2lzdHJ5IHtcbiAgICBfX2ludGVybmFsX19jaGFpblByb3BlcnRpZXM7XG4gICAgX19pbnRlcm5hbF9fY2xhc3NlcyA9IG5ldyBNYXAoKTtcbiAgICBfX2ludGVybmFsX19kZWZpbml0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICBfX2ludGVybmFsX19maXJzdENhbGxJbmRleCA9IG51bGw7XG4gICAgX19pbnRlcm5hbF9faGFzaGVyID0gYmxha2UyQXNVOGE7XG4gICAgX19pbnRlcm5hbF9fa25vd25UeXBlcyA9IHt9O1xuICAgIF9faW50ZXJuYWxfX2xvb2t1cDtcbiAgICBfX2ludGVybmFsX19tZXRhZGF0YTtcbiAgICBfX2ludGVybmFsX19tZXRhZGF0YVZlcnNpb24gPSAwO1xuICAgIF9faW50ZXJuYWxfX3NpZ25lZEV4dGVuc2lvbnMgPSBmYWxsYmFja0V4dGVuc2lvbnM7XG4gICAgX19pbnRlcm5hbF9fdW5rbm93blR5cGVzID0gbmV3IE1hcCgpO1xuICAgIF9faW50ZXJuYWxfX3VzZXJFeHRlbnNpb25zO1xuICAgIF9faW50ZXJuYWxfX2tub3duRGVmYXVsdHM7XG4gICAgX19pbnRlcm5hbF9fa25vd25EZWZhdWx0c0VudHJpZXM7XG4gICAgX19pbnRlcm5hbF9fa25vd25EZWZpbml0aW9ucztcbiAgICBfX2ludGVybmFsX19tZXRhZGF0YUNhbGxzID0ge307XG4gICAgX19pbnRlcm5hbF9fbWV0YWRhdGFFcnJvcnMgPSB7fTtcbiAgICBfX2ludGVybmFsX19tZXRhZGF0YUV2ZW50cyA9IHt9O1xuICAgIF9faW50ZXJuYWxfX21vZHVsZU1hcCA9IHt9O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgY29uc3RydWN0b3IoY3JlYXRlZEF0SGFzaCkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmYXVsdHMgPSBvYmplY3RTcHJlYWQoeyBKc29uLCBNZXRhZGF0YSwgUG9ydGFibGVSZWdpc3RyeSwgUmF3IH0sIGJhc2VUeXBlcyk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fa25vd25EZWZhdWx0c0VudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmYXVsdHMpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICAgICAgY29uc3QgYWxsS25vd24gPSBPYmplY3QudmFsdWVzKHRoaXMuX19pbnRlcm5hbF9fa25vd25EZWZpbml0aW9ucyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGFsbEtub3duLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoYWxsS25vd25baV0udHlwZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjcmVhdGVkQXRIYXNoKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRBdEhhc2ggPSB0aGlzLmNyZWF0ZVR5cGUoJ0Jsb2NrSGFzaCcsIGNyZWF0ZWRBdEhhc2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjaGFpbkRlY2ltYWxzKCkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19jaGFpblByb3BlcnRpZXM/LnRva2VuRGVjaW1hbHMuaXNTb21lKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxEZWNpbWFscyA9IHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzLnRva2VuRGVjaW1hbHMudW53cmFwKCk7XG4gICAgICAgICAgICBpZiAoYWxsRGVjaW1hbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsbERlY2ltYWxzLm1hcCgoYikgPT4gYi50b051bWJlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWzEyXTtcbiAgICB9XG4gICAgZ2V0IGNoYWluSXNFdGhlcmV1bSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzPy5pc0V0aGVyZXVtLmlzVHJ1ZSB8fCBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGNoYWluU1M1OCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzPy5zczU4Rm9ybWF0LmlzU29tZVxuICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX2NoYWluUHJvcGVydGllcy5zczU4Rm9ybWF0LnVud3JhcCgpLnRvTnVtYmVyKClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgY2hhaW5Ub2tlbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX2NoYWluUHJvcGVydGllcz8udG9rZW5TeW1ib2wuaXNTb21lKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUb2tlbnMgPSB0aGlzLl9faW50ZXJuYWxfX2NoYWluUHJvcGVydGllcy50b2tlblN5bWJvbC51bndyYXAoKTtcbiAgICAgICAgICAgIGlmIChhbGxUb2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsbFRva2Vucy5tYXAodmFsdWVUb1N0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtmb3JtYXRCYWxhbmNlLmdldERlZmF1bHRzKCkudW5pdF07XG4gICAgfVxuICAgIGdldCBmaXJzdENhbGxJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZmlyc3RDYWxsSW5kZXggfHwgREVGQVVMVF9GSVJTVF9DQUxMX0lEWDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHlwZSBpcyBpbiBhIENvbXBhdCBmb3JtYXRcbiAgICAgKi9cbiAgICBpc0xvb2t1cFR5cGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIC9Mb29rdXBcXGQrJC8udGVzdCh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbG9va3VwIHN0cmluZyBmcm9tIHRoZSBzdXBwbGllZCBpZFxuICAgICAqL1xuICAgIGNyZWF0ZUxvb2t1cFR5cGUobG9va3VwSWQpIHtcbiAgICAgICAgcmV0dXJuIGBMb29rdXAke3R5cGVvZiBsb29rdXBJZCA9PT0gJ251bWJlcicgPyBsb29rdXBJZCA6IGxvb2t1cElkLnRvTnVtYmVyKCl9YDtcbiAgICB9XG4gICAgZ2V0IGtub3duVHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2tub3duVHlwZXM7XG4gICAgfVxuICAgIGdldCBsb29rdXAoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXR1cm4odGhpcy5fX2ludGVybmFsX19sb29rdXAsICdQb3J0YWJsZVJlZ2lzdHJ5IGhhcyBub3QgYmVlbiBzZXQgb24gdGhpcyByZWdpc3RyeScpO1xuICAgIH1cbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXR1cm4odGhpcy5fX2ludGVybmFsX19tZXRhZGF0YSwgJ01ldGFkYXRhIGhhcyBub3QgYmVlbiBzZXQgb24gdGhpcyByZWdpc3RyeScpO1xuICAgIH1cbiAgICBnZXQgdW5rbm93blR5cGVzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuX19pbnRlcm5hbF9fdW5rbm93blR5cGVzLmtleXMoKV07XG4gICAgfVxuICAgIGdldCBzaWduZWRFeHRlbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19zaWduZWRFeHRlbnNpb25zO1xuICAgIH1cbiAgICBjbGVhckNhY2hlKCkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmliZSBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuICAgICAqL1xuICAgIGNyZWF0ZUNsYXNzKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNsYXNzVW5zYWZlKHRoaXMsIHR5cGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpYmUgQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBjcmVhdGVDbGFzc1Vuc2FmZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDbGFzc1Vuc2FmZSh0aGlzLCB0eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSB0eXBlIGFzIHJlZ2lzdGVyZWRcbiAgICAgKi9cbiAgICBjcmVhdGVUeXBlKHR5cGUsIC4uLnBhcmFtcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZVVuc2FmZSh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBhIHR5cGUgYXMgcmVnaXN0ZXJlZFxuICAgICAqL1xuICAgIGNyZWF0ZVR5cGVVbnNhZmUodHlwZSwgcGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVUeXBlVW5zYWZlKHRoaXMsIHR5cGUsIHBhcmFtcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIGZpbmQgYSBzcGVjaWZpYyBjYWxsXG4gICAgZmluZE1ldGFDYWxsKGNhbGxJbmRleCkge1xuICAgICAgICBjb25zdCBbc2VjdGlvbiwgbWV0aG9kXSA9IFtjYWxsSW5kZXhbMF0sIGNhbGxJbmRleFsxXV07XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXR1cm4odGhpcy5fX2ludGVybmFsX19tZXRhZGF0YUNhbGxzW2Ake3NlY3Rpb259YF0gJiYgdGhpcy5fX2ludGVybmFsX19tZXRhZGF0YUNhbGxzW2Ake3NlY3Rpb259YF1bYCR7bWV0aG9kfWBdLCAoKSA9PiBgZmluZE1ldGFDYWxsOiBVbmFibGUgdG8gZmluZCBDYWxsIHdpdGggaW5kZXggWyR7c2VjdGlvbn0sICR7bWV0aG9kfV0vWyR7Y2FsbEluZGV4LnRvU3RyaW5nKCl9XWApO1xuICAgIH1cbiAgICAvLyBmaW5kcyBhbiBlcnJvclxuICAgIGZpbmRNZXRhRXJyb3IoZXJyb3JJbmRleCkge1xuICAgICAgICBjb25zdCBbc2VjdGlvbiwgbWV0aG9kXSA9IGlzVThhKGVycm9ySW5kZXgpXG4gICAgICAgICAgICA/IFtlcnJvckluZGV4WzBdLCBlcnJvckluZGV4WzFdXVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgZXJyb3JJbmRleC5pbmRleC50b051bWJlcigpLFxuICAgICAgICAgICAgICAgIGlzVThhKGVycm9ySW5kZXguZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JJbmRleC5lcnJvclswXVxuICAgICAgICAgICAgICAgICAgICA6IGVycm9ySW5kZXguZXJyb3IudG9OdW1iZXIoKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJldHVybih0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhRXJyb3JzW2Ake3NlY3Rpb259YF0gJiYgdGhpcy5fX2ludGVybmFsX19tZXRhZGF0YUVycm9yc1tgJHtzZWN0aW9ufWBdW2Ake21ldGhvZH1gXSwgKCkgPT4gYGZpbmRNZXRhRXJyb3I6IFVuYWJsZSB0byBmaW5kIEVycm9yIHdpdGggaW5kZXggWyR7c2VjdGlvbn0sICR7bWV0aG9kfV0vWyR7ZXJyb3JJbmRleC50b1N0cmluZygpfV1gKTtcbiAgICB9XG4gICAgZmluZE1ldGFFdmVudChldmVudEluZGV4KSB7XG4gICAgICAgIGNvbnN0IFtzZWN0aW9uLCBtZXRob2RdID0gW2V2ZW50SW5kZXhbMF0sIGV2ZW50SW5kZXhbMV1dO1xuICAgICAgICByZXR1cm4gYXNzZXJ0UmV0dXJuKHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFFdmVudHNbYCR7c2VjdGlvbn1gXSAmJiB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhRXZlbnRzW2Ake3NlY3Rpb259YF1bYCR7bWV0aG9kfWBdLCAoKSA9PiBgZmluZE1ldGFFdmVudDogVW5hYmxlIHRvIGZpbmQgRXZlbnQgd2l0aCBpbmRleCBbJHtzZWN0aW9ufSwgJHttZXRob2R9XS9bJHtldmVudEluZGV4LnRvU3RyaW5nKCl9XWApO1xuICAgIH1cbiAgICBnZXQobmFtZSwgd2l0aFVua25vd24sIGtub3duVHlwZURlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRVbnNhZmUobmFtZSwgd2l0aFVua25vd24sIGtub3duVHlwZURlZik7XG4gICAgfVxuICAgIGdldFVuc2FmZShuYW1lLCB3aXRoVW5rbm93biwga25vd25UeXBlRGVmKSB7XG4gICAgICAgIGxldCBUeXBlID0gdGhpcy5fX2ludGVybmFsX19jbGFzc2VzLmdldChuYW1lKSB8fCB0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmYXVsdHNbbmFtZV07XG4gICAgICAgIC8vIHdlIGhhdmUgbm90IGFscmVhZHkgY3JlYXRlZCB0aGUgdHlwZSwgYXR0ZW1wdCBpdFxuICAgICAgICBpZiAoIVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLl9faW50ZXJuYWxfX2RlZmluaXRpb25zLmdldChuYW1lKTtcbiAgICAgICAgICAgIGxldCBCYXNlVHlwZTtcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBkZWZpbml0aW9uLCBzbyBjcmVhdGUgdGhlIGNsYXNzIG5vdyAobGF6aWx5KVxuICAgICAgICAgICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICBCYXNlVHlwZSA9IGNyZWF0ZUNsYXNzVW5zYWZlKHRoaXMsIGRlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa25vd25UeXBlRGVmKSB7XG4gICAgICAgICAgICAgICAgQmFzZVR5cGUgPSBjb25zdHJ1Y3RUeXBlQ2xhc3ModGhpcywga25vd25UeXBlRGVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHdpdGhVbmtub3duKSB7XG4gICAgICAgICAgICAgICAgbC53YXJuKGBVbmFibGUgdG8gcmVzb2x2ZSB0eXBlICR7bmFtZX0sIGl0IHdpbGwgZmFpbCBvbiBjb25zdHJ1Y3Rpb25gKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3Vua25vd25UeXBlcy5zZXQobmFtZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgQmFzZVR5cGUgPSBEb05vdENvbnN0cnVjdC53aXRoKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEJhc2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gTk9URSBJZiB3ZSBkaWRuJ3QgZXh0ZW5kIGhlcmUsIHdlIHdvdWxkIGhhdmUgc3RyYW5nZSBhcnRpZmFjdHMuIEFuIGV4YW1wbGUgaXNcbiAgICAgICAgICAgICAgICAvLyBCYWxhbmNlLCB3aXRoIHRoaXMsIG5ldyBCYWxhbmNlKCkgaW5zdGFuY2VvZiB1MTI4IGlzIHRydWUsIGJ1dCBCYWxhbmNlICE9PSB1MTI4XG4gICAgICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCB3ZSBub3cgcGFzcyB0aHJvdWdoIHRoZSByZWdpc3RyeSwgd2hpY2ggaXMgYSBsaW5rIHRvIG91cnNlbHZlc1xuICAgICAgICAgICAgICAgIFR5cGUgPSBjbGFzcyBleHRlbmRzIEJhc2VUeXBlIHtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fY2xhc3Nlcy5zZXQobmFtZSwgVHlwZSk7XG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgbG9va3Vwcywgd2UgYWxzbyB3YW50IHRvIHN0b3JlIHRoZSBhY3R1YWwgY2xhc3MgYWdhaW5zdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBsb29rdXAgbmFtZSwgaW5zdGFkIG9mIGhhdmluZyB0byB0cmF2ZXJzZSBhZ2FpblxuICAgICAgICAgICAgICAgIGlmIChrbm93blR5cGVEZWYgJiYgaXNOdW1iZXIoa25vd25UeXBlRGVmLmxvb2t1cEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMuc2V0KHRoaXMuY3JlYXRlTG9va3VwVHlwZShrbm93blR5cGVEZWYubG9va3VwSW5kZXgpLCBUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGU7XG4gICAgfVxuICAgIGdldENoYWluUHJvcGVydGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBnZXRDbGFzc05hbWUoVHlwZSkge1xuICAgICAgICAvLyB3ZSBjYW5ub3QgcmVseSBvbiBleHBvcnQgb3JkZXIgKGFueW1vcmUsIHNpbmNlIGJhYmVsL2NvcmUgNy4xNS44KSwgc28gaW4gdGhlIGNhc2Ugb2ZcbiAgICAgICAgLy8gaXRlbXMgc3VjaCBhcyB1MzIgJiBVMzIsIHdlIGdldCB0aGUgbG93ZXJjYXNlIHZlcnNpb25zIGhlcmUuLi4gbm90IHF1aXRlIGFzIG9wdGltYWxcbiAgICAgICAgLy8gKHByZXZpb3VzbHkgdGhpcyB1c2VkIHRvIGJlIGEgc2ltcGxlIGZpbmQgJiByZXR1cm4pXG4gICAgICAgIGNvbnN0IG5hbWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIENsYXp6XSBvZiB0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmYXVsdHNFbnRyaWVzKSB7XG4gICAgICAgICAgICBpZiAoVHlwZSA9PT0gQ2xhenopIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIENsYXp6XSBvZiB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoVHlwZSA9PT0gQ2xhenopIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lcy5sZW5ndGhcbiAgICAgICAgICAgIC8vIGJvdGggc29ydCBhbmQgcmV2ZXJzZSBhcmUgZG9uZSBpbi1wbGFjZVxuICAgICAgICAgICAgLy8gWydVMzInLCAndTMyJ10gLT4gWyd1MzInLCAnVTMyJ11cbiAgICAgICAgICAgID8gbmFtZXMuc29ydCgpLnJldmVyc2UoKVswXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldERlZmluaXRpb24odHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZGVmaW5pdGlvbnMuZ2V0KHR5cGVOYW1lKTtcbiAgICB9XG4gICAgZ2V0TW9kdWxlSW5zdGFuY2VzKHNwZWNOYW1lLCBtb2R1bGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2tub3duVHlwZXM/LnR5cGVzQnVuZGxlPy5zcGVjPy5bc3BlY05hbWUudG9TdHJpbmcoKV0/Lmluc3RhbmNlcz8uW21vZHVsZU5hbWVdIHx8IHRoaXMuX19pbnRlcm5hbF9fbW9kdWxlTWFwW21vZHVsZU5hbWVdO1xuICAgIH1cbiAgICBnZXRPclRocm93KG5hbWUpIHtcbiAgICAgICAgY29uc3QgQ2xhenogPSB0aGlzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFDbGF6eikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eXBlICR7bmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENsYXp6O1xuICAgIH1cbiAgICBnZXRPclVua25vd24obmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQobmFtZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGdldFNpZ25lZEV4dGVuc2lvbkV4dHJhKCkge1xuICAgICAgICByZXR1cm4gZXhwYW5kRXh0ZW5zaW9uVHlwZXModGhpcy5fX2ludGVybmFsX19zaWduZWRFeHRlbnNpb25zLCAncGF5bG9hZCcsIHRoaXMuX19pbnRlcm5hbF9fdXNlckV4dGVuc2lvbnMpO1xuICAgIH1cbiAgICBnZXRTaWduZWRFeHRlbnNpb25UeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIGV4cGFuZEV4dGVuc2lvblR5cGVzKHRoaXMuX19pbnRlcm5hbF9fc2lnbmVkRXh0ZW5zaW9ucywgJ2V4dHJpbnNpYycsIHRoaXMuX19pbnRlcm5hbF9fdXNlckV4dGVuc2lvbnMpO1xuICAgIH1cbiAgICBoYXNDbGFzcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMuaGFzKG5hbWUpIHx8ICEhdGhpcy5fX2ludGVybmFsX19rbm93bkRlZmF1bHRzW25hbWVdO1xuICAgIH1cbiAgICBoYXNEZWYobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19kZWZpbml0aW9ucy5oYXMobmFtZSk7XG4gICAgfVxuICAgIGhhc1R5cGUobmFtZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX19pbnRlcm5hbF9fdW5rbm93blR5cGVzLmdldChuYW1lKSAmJiAodGhpcy5oYXNDbGFzcyhuYW1lKSB8fCB0aGlzLmhhc0RlZihuYW1lKSk7XG4gICAgfVxuICAgIGhhc2goZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUeXBlKCdDb2RlY0hhc2gnLCB0aGlzLl9faW50ZXJuYWxfX2hhc2hlcihkYXRhKSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBlLWNsYXNzLW1lbWJlcnNcbiAgICByZWdpc3RlcihhcmcxLCBhcmcyKSB7XG4gICAgICAgIC8vIE5PVEUgQ29uc3RydWN0b3JzIGFwcGVhciBhcyBmdW5jdGlvbnMgaGVyZVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihhcmcxKSkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jbGFzc2VzLnNldChhcmcxLm5hbWUsIGFyZzEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKGFyZzEpKSB7XG4gICAgICAgICAgICBpZiAoIWlzRnVuY3Rpb24oYXJnMikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNsYXNzIGRlZmluaXRpb24gcGFzc2VkIHRvICcke2FyZzF9JyByZWdpc3RyYXRpb25gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZzEgPT09IGFyZzIudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlZ2lzdGVyIGNpcmN1bGFyICR7YXJnMX0gPT09ICR7YXJnMX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fY2xhc3Nlcy5zZXQoYXJnMSwgYXJnMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdGVyT2JqZWN0KGFyZzEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9faW50ZXJuYWxfX3JlZ2lzdGVyT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMob2JqKTtcbiAgICAgICAgZm9yIChsZXQgZSA9IDAsIGNvdW50ID0gZW50cmllcy5sZW5ndGg7IGUgPCBjb3VudDsgZSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbbmFtZSwgdHlwZV0gPSBlbnRyaWVzW2VdO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odHlwZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIF9sb29rc18gYSBiaXQgZnVubnksIGJ1dCBgdHlwZW9mIENsYXp6ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jbGFzc2VzLnNldChuYW1lLCB0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZiA9IGlzU3RyaW5nKHR5cGUpXG4gICAgICAgICAgICAgICAgICAgID8gdHlwZVxuICAgICAgICAgICAgICAgICAgICA6IHN0cmluZ2lmeSh0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZGVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlZ2lzdGVyIGNpcmN1bGFyICR7bmFtZX0gPT09ICR7ZGVmfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB3ZSBhbHJlYWR5IGhhdmUgdGhpcyB0eXBlLCByZW1vdmUgdGhlIGNsYXNzZXMgcmVnaXN0ZXJlZCBmb3IgaXRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19jbGFzc2VzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2RlZmluaXRpb25zLnNldChuYW1lLCBkZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyBzZXRzIHRoZSBjaGFpbiBwcm9wZXJ0aWVzXG4gICAgc2V0Q2hhaW5Qcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRIYXNoZXIoaGFzaGVyKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGFzaGVyID0gaGFzaGVyIHx8IGJsYWtlMkFzVThhO1xuICAgIH1cbiAgICBzZXRLbm93blR5cGVzKGtub3duVHlwZXMpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19rbm93blR5cGVzID0ga25vd25UeXBlcztcbiAgICB9XG4gICAgc2V0TG9va3VwKGxvb2t1cCkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2xvb2t1cCA9IGxvb2t1cDtcbiAgICAgICAgLy8gcmVnaXN0ZXIgYWxsIGFwcGxpY2FibGUgdHlwZXMgZm91bmRcbiAgICAgICAgbG9va3VwLnJlZ2lzdGVyKCk7XG4gICAgfVxuICAgIC8vIHJlZ2lzdGVyIGFsaWFzIHR5cGVzIGFsb25nc2lkZSB0aGUgcG9ydGFibGUvbG9va3VwIHNldHVwXG4gICAgLy8gKHdlIGRvbid0IGNvbWJpbmUgdGhpcyBpbnRvIHNldExvb2t1cCBzaW5jZSB0aGF0IHdvdWxkL2NvdWxkXG4gICAgLy8gYWZmZWN0IHN0YW5kLWFsb25nIGxvb2t1cHMsIHN1Y2ggYXMgQUJJcyB3aGljaCBkb24ndCBoYXZlXG4gICAgLy8gYWN0dWFsIG9uLWNoYWluIG1ldGFkYXRhKVxuICAgIF9faW50ZXJuYWxfX3JlZ2lzdGVyTG9va3VwID0gKGxvb2t1cCkgPT4ge1xuICAgICAgICAvLyBhdHRhY2ggdGhlIGxvb2t1cCBiZWZvcmUgd2UgcmVnaXN0ZXIgYW55IHR5cGVzXG4gICAgICAgIHRoaXMuc2V0TG9va3VwKGxvb2t1cCk7XG4gICAgICAgIC8vIHdlIGRldGVjdCBiYXNlZCBvbiBydW50aW1lIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgbGV0IFdlaWdodCA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmhhc1R5cGUoJ1NwV2VpZ2h0c1dlaWdodFYyV2VpZ2h0JykpIHtcbiAgICAgICAgICAgIC8vIGRldGVjdGlvbiBmb3IgV2VpZ2h0VjIgdHlwZSBiYXNlZCBvbiBsYXRlc3QgbmFtaW5nXG4gICAgICAgICAgICBjb25zdCB3ZWlnaHR2MiA9IHRoaXMuY3JlYXRlVHlwZSgnU3BXZWlnaHRzV2VpZ2h0VjJXZWlnaHQnKTtcbiAgICAgICAgICAgIFdlaWdodCA9IHdlaWdodHYyLnJlZlRpbWUgJiYgd2VpZ2h0djIucHJvb2ZTaXplXG4gICAgICAgICAgICAgICAgLy8gd2l0aCBib3RoIHJlZlRpbWUgJiBwcm9vZlNpemUgd2UgdXNlIGFzLWlzIChXZWlnaHRWMilcbiAgICAgICAgICAgICAgICA/ICdTcFdlaWdodHNXZWlnaHRWMldlaWdodCdcbiAgICAgICAgICAgICAgICAvLyBmYWxsYmFjayB0byBXZWlnaHRWMSAoV2VpZ2h0VjEuNSBpcyBhIHN0cnVjdCwgc2luZ2xlIGZpZWxkKVxuICAgICAgICAgICAgICAgIDogJ1dlaWdodFYxJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXNCbih0aGlzLmNyZWF0ZVR5cGUoJ1dlaWdodCcpKSkge1xuICAgICAgICAgICAgLy8gd2hlcmUgd2UgaGF2ZSBhbiBhbHJlYWR5LXN1cHBsaWVkIEJOIG92ZXJyaWRlLCB3ZSBkb24ndCBjbG9iYmVyXG4gICAgICAgICAgICAvLyBpdCB3aXRoIG91ciBkZXRlY3RlZCB2YWx1ZSAoVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHByZS1kZWZpbmVzXG4gICAgICAgICAgICAvLyB3aGVyZSBXZWlnaHQgbWF5IGJlIGFsaWFzc2VkIHRvIFdlaWdodFYwLCBlLmcuIGluIGVhcmx5IEt1c2FtYSBjaGFpbnMpXG4gICAgICAgICAgICBXZWlnaHQgPSAnV2VpZ2h0VjEnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChXZWlnaHQpIHtcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgZGV0ZWN0ZWQgYSB2ZXJzaW9uLCBhZGp1c3QgdGhlIGRlZmluaXRpb25cbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoeyBXZWlnaHQgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIHNldHMgdGhlIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEobWV0YWRhdGEsIHNpZ25lZEV4dGVuc2lvbnMsIHVzZXJFeHRlbnNpb25zLCBub0luaXRXYXJuKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEgPSBtZXRhZGF0YS5hc0xhdGVzdDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19tZXRhZGF0YVZlcnNpb24gPSBtZXRhZGF0YS52ZXJzaW9uO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2ZpcnN0Q2FsbEluZGV4ID0gbnVsbDtcbiAgICAgICAgLy8gYXR0YWNoIHRoZSBsb29rdXAgYXQgdGhpcyBwb2ludCBhbmQgcmVnaXN0ZXIgcmVsZXZhbnQgdHlwZXMgKGJlZm9yZSBpbmplY3RpbmcpXG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0ZXJMb29rdXAodGhpcy5fX2ludGVybmFsX19tZXRhZGF0YS5sb29rdXApO1xuICAgICAgICBpbmplY3RFeHRyaW5zaWNzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFWZXJzaW9uLCB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhQ2FsbHMsIHRoaXMuX19pbnRlcm5hbF9fbW9kdWxlTWFwKTtcbiAgICAgICAgaW5qZWN0RXJyb3JzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFWZXJzaW9uLCB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhRXJyb3JzKTtcbiAgICAgICAgaW5qZWN0RXZlbnRzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFWZXJzaW9uLCB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhRXZlbnRzKTtcbiAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IGNhbGwgaW5kZXggKHRoZSBsb3dlc3Qgc2VjdGlvbiwgdGhlIGxvd2VzdCBtZXRob2QpXG4gICAgICAgIC8vIGluIG1vc3QgY2hhaW5zIHRoaXMgc2hvdWxkIGJlIDAsMFxuICAgICAgICBjb25zdCBbZGVmU2VjdGlvbl0gPSBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFDYWxscylcbiAgICAgICAgICAgIC5zb3J0KHNvcnREZWNpbWFsU3RyaW5ncyk7XG4gICAgICAgIGlmIChkZWZTZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBbZGVmTWV0aG9kXSA9IE9iamVjdFxuICAgICAgICAgICAgICAgIC5rZXlzKHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFDYWxsc1tkZWZTZWN0aW9uXSlcbiAgICAgICAgICAgICAgICAuc29ydChzb3J0RGVjaW1hbFN0cmluZ3MpO1xuICAgICAgICAgICAgaWYgKGRlZk1ldGhvZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZmlyc3RDYWxsSW5kZXggPSBuZXcgVWludDhBcnJheShbcGFyc2VJbnQoZGVmU2VjdGlvbiwgMTApLCBwYXJzZUludChkZWZNZXRob2QsIDEwKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNldHVwIHRoZSBhdmFpbGFibGUgZXh0ZW5zaW9uc1xuICAgICAgICB0aGlzLnNldFNpZ25lZEV4dGVuc2lvbnMoc2lnbmVkRXh0ZW5zaW9ucyB8fCAodGhpcy5fX2ludGVybmFsX19tZXRhZGF0YS5leHRyaW5zaWMudmVyc2lvbi5ndChCTl9aRVJPKVxuICAgICAgICAgICAgLy8gRklYTUUgVXNlIHRoZSBleHRlbnNpb24gYW5kIHRoZWlyIGluamVjdGVkIHR5cGVzXG4gICAgICAgICAgICA/IHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEuZXh0cmluc2ljLnNpZ25lZEV4dGVuc2lvbnMubWFwKCh7IGlkZW50aWZpZXIgfSkgPT4gaWRlbnRpZmllci50b1N0cmluZygpKVxuICAgICAgICAgICAgOiBmYWxsYmFja0V4dGVuc2lvbnMpLCB1c2VyRXh0ZW5zaW9ucywgbm9Jbml0V2Fybik7XG4gICAgICAgIC8vIHNldHVwIHRoZSBjaGFpbiBwcm9wZXJ0aWVzIHdpdGggZm9ybWF0IG92ZXJyaWRlc1xuICAgICAgICB0aGlzLnNldENoYWluUHJvcGVydGllcyhleHRyYWN0UHJvcGVydGllcyh0aGlzLCBtZXRhZGF0YSkpO1xuICAgIH1cbiAgICAvLyBzZXRzIHRoZSBhdmFpbGFibGUgc2lnbmVkIGV4dGVuc2lvbnNcbiAgICBzZXRTaWduZWRFeHRlbnNpb25zKHNpZ25lZEV4dGVuc2lvbnMgPSBmYWxsYmFja0V4dGVuc2lvbnMsIHVzZXJFeHRlbnNpb25zLCBub0luaXRXYXJuKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc2lnbmVkRXh0ZW5zaW9ucyA9IHNpZ25lZEV4dGVuc2lvbnM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fdXNlckV4dGVuc2lvbnMgPSB1c2VyRXh0ZW5zaW9ucztcbiAgICAgICAgaWYgKCFub0luaXRXYXJuKSB7XG4gICAgICAgICAgICBjb25zdCB1bmtub3duID0gZmluZFVua25vd25FeHRlbnNpb25zKHRoaXMuX19pbnRlcm5hbF9fc2lnbmVkRXh0ZW5zaW9ucywgdGhpcy5fX2ludGVybmFsX191c2VyRXh0ZW5zaW9ucyk7XG4gICAgICAgICAgICBpZiAodW5rbm93bi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsLndhcm4oYFVua25vd24gc2lnbmVkIGV4dGVuc2lvbnMgJHt1bmtub3duLmpvaW4oJywgJyl9IGZvdW5kLCB0cmVhdGluZyB0aGVtIGFzIG5vLWVmZmVjdGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgVThhRml4ZWQgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaGV4VG9VOGEsIGlzSGV4LCBpc1N0cmluZywgaXNVOGEsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZXRoZXJldW1FbmNvZGUsIGlzRXRoZXJldW1BZGRyZXNzIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUFjY291bnRJZCh2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvVThhKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNIZXgodmFsdWUpIHx8IGlzRXRoZXJldW1BZGRyZXNzKHZhbHVlLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgIHJldHVybiBoZXhUb1U4YSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1OGFUb1U4YSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgd3JhcHBlciBhcm91bmQgYW4gRXRoZXJldW0tY29tcGF0aWJsZSBBY2NvdW50SWQuIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGhcbiAqIHVuZGVybHlpbmcgYWRkcmVzc2VzICgyMCBieXRlcyBpbiBsZW5ndGgpLCB3ZSBleHRlbmQgZnJvbSBVOGFGaXhlZCB3aGljaCBpc1xuICoganVzdCBhIFVpbnQ4QXJyYXkgd3JhcHBlciB3aXRoIGEgZml4ZWQgbGVuZ3RoLlxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkIGV4dGVuZHMgVThhRml4ZWQge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSA9IG5ldyBVaW50OEFycmF5KCkpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGRlY29kZUFjY291bnRJZCh2YWx1ZSksIDE2MCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuICEhb3RoZXIgJiYgc3VwZXIuZXEoZGVjb2RlQWNjb3VudElkKG90aGVyKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBldGhlcmV1bUVuY29kZSh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnQWNjb3VudElkJztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEJhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaXNCaWdJbnQsIGlzQm4sIGlzSGV4LCBpc051bWJlciwgaXNVOGEsIHU4YUNvbmNhdCwgdThhVG9CbiwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5pbXBvcnQgeyBHZW5lcmljQWNjb3VudEluZGV4IH0gZnJvbSAnLi4vZ2VuZXJpYy9BY2NvdW50SW5kZXguanMnO1xuaW1wb3J0IHsgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkIH0gZnJvbSAnLi9BY2NvdW50SWQuanMnO1xuZXhwb3J0IGNvbnN0IEFDQ09VTlRfSURfUFJFRklYID0gbmV3IFVpbnQ4QXJyYXkoWzB4ZmZdKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVN0cmluZyhyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlQWRkcmVzcyh2YWx1ZSk7XG4gICAgcmV0dXJuIGRlY29kZWQubGVuZ3RoID09PSAyMFxuICAgICAgICA/IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V0aGVyZXVtQWNjb3VudElkJywgW2RlY29kZWRdKVxuICAgICAgICA6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFt1OGFUb0JuKGRlY29kZWQpXSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVVOGEocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gaW5zdGFudGlhdGUgYW4gYWRkcmVzcyB3aXRoIGEgcmF3IHB1YmxpY0tleS4gRG8gdGhpcyBmaXJzdCBiZWZvcmVcbiAgICAvLyB3ZSBjaGVja2luZyB0aGUgZmlyc3QgYnl0ZSwgb3RoZXJ3aXNlIHdlIG1heSBzcGxpdCBhbiBhbHJlYWR5LWV4aXN0ZW50IHZhbGlkIGFkZHJlc3NcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAyMCkge1xuICAgICAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnRXRoZXJldW1BY2NvdW50SWQnLCBbdmFsdWVdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWVbMF0gPT09IDB4ZmYpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V0aGVyZXVtQWNjb3VudElkJywgW3ZhbHVlLnN1YmFycmF5KDEpXSk7XG4gICAgfVxuICAgIGNvbnN0IFtvZmZzZXQsIGxlbmd0aF0gPSBHZW5lcmljQWNjb3VudEluZGV4LnJlYWRMZW5ndGgodmFsdWUpO1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdBY2NvdW50SW5kZXgnLCBbdThhVG9Cbih2YWx1ZS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCkpXSk7XG59XG5mdW5jdGlvbiBkZWNvZGVBZGRyZXNzT3JJbmRleChyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBHZW5lcmljRXRoZXJldW1Mb29rdXBTb3VyY2VcbiAgICAgICAgPyB2YWx1ZS5pbm5lclxuICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkIHx8IHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0FjY291bnRJbmRleFxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBpc1U4YSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNIZXgodmFsdWUpXG4gICAgICAgICAgICAgICAgPyBkZWNvZGVVOGEocmVnaXN0cnksIHU4YVRvVThhKHZhbHVlKSlcbiAgICAgICAgICAgICAgICA6IGlzQm4odmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSB8fCBpc0JpZ0ludCh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdBY2NvdW50SW5kZXgnLCBbdmFsdWVdKVxuICAgICAgICAgICAgICAgICAgICA6IGRlY29kZVN0cmluZyhyZWdpc3RyeSwgdmFsdWUpO1xufVxuLyoqXG4gKiBAbmFtZSBHZW5lcmljRXRoZXJldW1Mb29rdXBTb3VyY2VcbiAqIEBkZXNjcmlwdGlvblxuICogQSB3cmFwcGVyIGFyb3VuZCBhbiBFdGhlcmV1bUFjY291bnRJZCBhbmQvb3IgQWNjb3VudEluZGV4IHRoYXQgaXMgZW5jb2RlZCB3aXRoIGEgcHJlZml4LlxuICogU2luY2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCB1bmRlcmx5aW5nIHB1YmxpY0tleXMgKG9yIHNob3J0ZXIgZW5jb2RlZCBhZGRyZXNzZXMpLFxuICogd2UgZXh0ZW5kIGZyb20gQmFzZSB3aXRoIGFuIEFjY291bnRJZC9BY2NvdW50SW5kZXggd3JhcHBlci4gQmFzaWNhbGx5IHRoZSBBZGRyZXNzXG4gKiBpcyBlbmNvZGVkIGFzIGBbIDxwcmVmaXgtYnl0ZT4sIC4uLnB1YmxpY0tleS8uLi5ieXRlcyBdYCBhcyBwZXIgc3BlY1xuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V0aGVyZXVtTG9va3VwU291cmNlIGV4dGVuZHMgQWJzdHJhY3RCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUgPSBuZXcgVWludDhBcnJheSgpKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBkZWNvZGVBZGRyZXNzT3JJbmRleChyZWdpc3RyeSwgdmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgY29uc3QgcmF3TGVuZ3RoID0gdGhpcy5fcmF3TGVuZ3RoO1xuICAgICAgICByZXR1cm4gcmF3TGVuZ3RoICsgKFxuICAgICAgICAvLyBmb3IgMSBieXRlIEFjY291bnRJbmRleGVzLCB3ZSBhcmUgbm90IGFkZGluZyBhIHNwZWNpZmljIHByZWZpeFxuICAgICAgICByYXdMZW5ndGggPiAxXG4gICAgICAgICAgICA/IDFcbiAgICAgICAgICAgIDogMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSByYXcgdmFsdWUsIGVpdGhlciBBY2NvdW50SW5kZXggb3IgQWNjb3VudElkXG4gICAgICovXG4gICAgZ2V0IF9yYXdMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyIGluc3RhbmNlb2YgR2VuZXJpY0FjY291bnRJbmRleFxuICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LmNhbGNMZW5ndGgodGhpcy5pbm5lcilcbiAgICAgICAgICAgIDogdGhpcy5pbm5lci5lbmNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdBZGRyZXNzJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IHRoaXMuaW5uZXIudG9VOGEoKS5zdWJhcnJheSgwLCB0aGlzLl9yYXdMZW5ndGgpO1xuICAgICAgICByZXR1cm4gaXNCYXJlXG4gICAgICAgICAgICA/IGVuY29kZWRcbiAgICAgICAgICAgIDogdThhQ29uY2F0KHRoaXMuaW5uZXIgaW5zdGFuY2VvZiBHZW5lcmljQWNjb3VudEluZGV4XG4gICAgICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LndyaXRlTGVuZ3RoKGVuY29kZWQpXG4gICAgICAgICAgICAgICAgOiBBQ0NPVU5UX0lEX1BSRUZJWCwgZW5jb2RlZCk7XG4gICAgfVxufVxuIiwiZXhwb3J0IHsgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkIH0gZnJvbSAnLi9BY2NvdW50SWQuanMnO1xuZXhwb3J0IHsgR2VuZXJpY0V0aGVyZXVtTG9va3VwU291cmNlIH0gZnJvbSAnLi9Mb29rdXBTb3VyY2UuanMnO1xuIiwiaW1wb3J0IHsgQWJzdHJhY3RCYXNlIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGNvbXBhY3RBZGRMZW5ndGgsIGNvbXBhY3RGcm9tVThhLCBjb21wYWN0VG9VOGEsIGlzSGV4LCBpc1U4YSwgb2JqZWN0UHJvcGVydHksIG9iamVjdFNwcmVhZCwgdThhQ29uY2F0LCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBFWFRSSU5TSUNfVkVSU0lPTiBhcyBMQVRFU1RfRVhUUklOU0lDX1ZFUlNJT04gfSBmcm9tICcuL3Y0L0V4dHJpbnNpYy5qcyc7XG5pbXBvcnQgeyBCSVRfU0lHTkVELCBCSVRfVU5TSUdORUQsIERFRkFVTFRfVkVSU0lPTiwgVU5NQVNLX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5jb25zdCBWRVJTSU9OUyA9IFtcbiAgICAnRXh0cmluc2ljVW5rbm93bicsIC8vIHYwIGlzIHVua25vd25cbiAgICAnRXh0cmluc2ljVW5rbm93bicsXG4gICAgJ0V4dHJpbnNpY1Vua25vd24nLFxuICAgICdFeHRyaW5zaWNVbmtub3duJyxcbiAgICAnRXh0cmluc2ljVjQnXG5dO1xuZXhwb3J0IHsgTEFURVNUX0VYVFJJTlNJQ19WRVJTSU9OIH07XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBuZXdGcm9tVmFsdWUocmVnaXN0cnksIHZhbHVlLCB2ZXJzaW9uKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0V4dHJpbnNpYykge1xuICAgICAgICByZXR1cm4gdmFsdWUudW53cmFwKCk7XG4gICAgfVxuICAgIGNvbnN0IGlzU2lnbmVkID0gKHZlcnNpb24gJiBCSVRfU0lHTkVEKSA9PT0gQklUX1NJR05FRDtcbiAgICBjb25zdCB0eXBlID0gVkVSU0lPTlNbdmVyc2lvbiAmIFVOTUFTS19WRVJTSU9OXSB8fCBWRVJTSU9OU1swXTtcbiAgICAvLyB3ZSBjYXN0IGhlcmUgc2luY2UgdGhlIFZFUlNJT04gZGVmaW5pdGlvbiBpcyBpbmNyZWRpYmx5IGJyb2FkIC0gd2UgZG9uJ3QgaGF2ZSBhXG4gICAgLy8gc2xpY2UgZm9yIFwib25seSBhZGQgZXh0cmluc2ljIHR5cGVzXCIsIGFuZCBtb3JlIHN0cmluZyBkZWZpbml0aW9ucyBiZWNvbWUgdW53aWVsZHlcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSh0eXBlLCBbdmFsdWUsIHsgaXNTaWduZWQsIHZlcnNpb24gfV0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlRXh0cmluc2ljKHJlZ2lzdHJ5LCB2YWx1ZSwgdmVyc2lvbiA9IERFRkFVTFRfVkVSU0lPTikge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNIZXgodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVOGEocmVnaXN0cnksIHU4YVRvVThhKHZhbHVlKSwgdmVyc2lvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgcmVnaXN0cnkuY3JlYXRlQ2xhc3NVbnNhZmUoJ0NhbGwnKSkge1xuICAgICAgICByZXR1cm4gbmV3RnJvbVZhbHVlKHJlZ2lzdHJ5LCB7IG1ldGhvZDogdmFsdWUgfSwgdmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXdGcm9tVmFsdWUocmVnaXN0cnksIHZhbHVlLCB2ZXJzaW9uKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVU4YShyZWdpc3RyeSwgdmFsdWUsIHZlcnNpb24pIHtcbiAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3RnJvbVZhbHVlKHJlZ2lzdHJ5LCBuZXcgVWludDhBcnJheSgpLCB2ZXJzaW9uKTtcbiAgICB9XG4gICAgY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IGNvbXBhY3RGcm9tVThhKHZhbHVlKTtcbiAgICBjb25zdCB0b3RhbCA9IG9mZnNldCArIGxlbmd0aC50b051bWJlcigpO1xuICAgIGlmICh0b3RhbCA+IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dHJpbnNpYzogbGVuZ3RoIGxlc3MgdGhhbiByZW1haW5kZXIsIGV4cGVjdGVkIGF0IGxlYXN0ICR7dG90YWx9LCBmb3VuZCAke3ZhbHVlLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHZhbHVlLnN1YmFycmF5KG9mZnNldCwgdG90YWwpO1xuICAgIHJldHVybiBuZXdGcm9tVmFsdWUocmVnaXN0cnksIGRhdGEuc3ViYXJyYXkoMSksIGRhdGFbMF0pO1xufVxuY2xhc3MgRXh0cmluc2ljQmFzZSBleHRlbmRzIEFic3RyYWN0QmFzZSB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlLCBpbml0aWFsVThhTGVuZ3RoKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSwgaW5pdGlhbFU4YUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNpZ25LZXlzID0gT2JqZWN0LmtleXMocmVnaXN0cnkuZ2V0U2lnbmVkRXh0ZW5zaW9uVHlwZXMoKSk7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IChrZXkpID0+IHRoaXMuaW5uZXIuc2lnbmF0dXJlW2tleV07XG4gICAgICAgIC8vIFRoaXMgaXMgb24gdGhlIGFic3RyYWN0IGNsYXNzLCBlbnN1cmluZyB0aGF0IGhhc093blByb3BlcnR5IG9wZXJhdGVzXG4gICAgICAgIC8vIGNvcnJlY3RseSwgaS5lLiBpdCBuZWVkcyB0byBiZSBvbiB0aGUgYmFzZSBjbGFzcyBleHBvc2luZyBpdFxuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBzaWduS2V5cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBvYmplY3RQcm9wZXJ0eSh0aGlzLCBzaWduS2V5c1tpXSwgZ2V0dGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gZm9yIHRoZSBjYWxsLCBleHBvc2VzIGFyZ3Mgc28gaXQgaXMgY29tcGF0aWJsZSB3aXRoIFtbQ2FsbF1dXG4gICAgICovXG4gICAgZ2V0IGFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZC5hcmdzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFyZ3VtZW50IGRlZmluaXRpb25zLCBjb21wYXRpYmxlIHdpdGggW1tDYWxsXV1cbiAgICAgKi9cbiAgICBnZXQgYXJnc0RlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kLmFyZ3NEZWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0dWFsIGBbc2VjdGlvbkluZGV4LCBtZXRob2RJbmRleF1gIGFzIHVzZWQgaW4gdGhlIENhbGxcbiAgICAgKi9cbiAgICBnZXQgY2FsbEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QuY2FsbEluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFjdHVhbCBkYXRhIGZvciB0aGUgQ2FsbFxuICAgICAqL1xuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QuZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBlcmEgZm9yIHRoaXMgZXh0cmluc2ljXG4gICAgICovXG4gICAgZ2V0IGVyYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIuc2lnbmF0dXJlLmVyYTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9VOGEoKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBgdHJ1ZWAgaWQgdGhlIGV4dHJpbnNpYyBpcyBzaWduZWRcbiAgICAgKi9cbiAgICBnZXQgaXNTaWduZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnNpZ25hdHVyZS5pc1NpZ25lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIGFjdHVhbCBkYXRhLCBleGNsdWRpbmcgcHJlZml4XG4gICAgICovXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9VOGEodHJ1ZSkubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRnVuY3Rpb25NZXRhZGF0YUxhdGVzdF1dIHRoYXQgZGVzY3JpYmVzIHRoZSBleHRyaW5zaWNcbiAgICAgKi9cbiAgICBnZXQgbWV0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kLm1ldGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgW1tDYWxsXV0gdGhpcyBleHRyaW5zaWMgd3JhcHNcbiAgICAgKi9cbiAgICBnZXQgbWV0aG9kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5tZXRob2Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbm9uY2UgZm9yIHRoaXMgZXh0cmluc2ljXG4gICAgICovXG4gICAgZ2V0IG5vbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5zaWduYXR1cmUubm9uY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0dWFsIFtbRWNkc2FTaWduYXR1cmVdXSwgW1tFZDI1NTE5U2lnbmF0dXJlXV0gb3IgW1tTcjI1NTE5U2lnbmF0dXJlXV1cbiAgICAgKi9cbiAgICBnZXQgc2lnbmF0dXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5zaWduYXR1cmUuc2lnbmF0dXJlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbQWRkcmVzc11dIHRoYXQgc2lnbmVkXG4gICAgICovXG4gICAgZ2V0IHNpZ25lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIuc2lnbmF0dXJlLnNpZ25lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvcndhcmRzIGNvbXBhdFxuICAgICAqL1xuICAgIGdldCB0aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnNpZ25hdHVyZS50aXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBGb3J3YXJkIGNvbXBhdFxuICAgICAqL1xuICAgIGdldCBhc3NldElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5zaWduYXR1cmUuYXNzZXRJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvcndhcmQgY29tcGF0XG4gICAgICovXG4gICAgZ2V0IG1ldGFkYXRhSGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIuc2lnbmF0dXJlLm1ldGFkYXRhSGFzaDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHJhdyB0cmFuc2FjdGlvbiB2ZXJzaW9uIChub3QgZmxhZ2dlZCB3aXRoIHNpZ25pbmcgaW5mb3JtYXRpb24pXG4gICAgKi9cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIudmVyc2lvbjtcbiAgICB9XG4gICAgZ2V0IGlubmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bndyYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGVuY29kZWQgdmVyc2lvbiBmbGFnXG4gICAgKi9cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSB8ICh0aGlzLmlzU2lnbmVkID8gQklUX1NJR05FRCA6IEJJVF9VTlNJR05FRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHNvdXJjZSBtYXRjaGVzIHRoaXMgaW4gdHlwZVxuICAgICAqL1xuICAgIGlzKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZC5pcyhvdGhlcik7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVud3JhcCgpO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1xuICogQGRlc2NyaXB0aW9uXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhbiBFeHRyaW5zaWMgaW4gdGhlIHN5c3RlbS4gSXQgY29udGFpbnMgdGhlIGFjdHVhbCBjYWxsLFxuICogKG9wdGlvbmFsKSBzaWduYXR1cmUgYW5kIGVuY29kZXMgd2l0aCBhbiBhY3R1YWwgbGVuZ3RoIHByZWZpeFxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGFyaXR5dGVjaC93aWtpL2Jsb2IvbWFzdGVyL0V4dHJpbnNpYy5tZCN0aGUtZXh0cmluc2ljLWZvcm1hdC1mb3Itbm9kZX0uXG4gKlxuICogQ2FuIGJlOlxuICogLSBzaWduZWQsIHRvIGNyZWF0ZSBhIHRyYW5zYWN0aW9uXG4gKiAtIGxlZnQgYXMgaXMsIHRvIGNyZWF0ZSBhbiBpbmhlcmVudFxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpYyBleHRlbmRzIEV4dHJpbnNpY0Jhc2Uge1xuICAgIF9faW50ZXJuYWxfX2hhc2hDYWNoZTtcbiAgICBzdGF0aWMgTEFURVNUX0VYVFJJTlNJQ19WRVJTSU9OID0gTEFURVNUX0VYVFJJTlNJQ19WRVJTSU9OO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSwgeyB2ZXJzaW9uIH0gPSB7fSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZGVjb2RlRXh0cmluc2ljKHJlZ2lzdHJ5LCB2YWx1ZSwgdmVyc2lvbikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX19oYXNoQ2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGFzaENhY2hlID0gc3VwZXIuaGFzaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19oYXNoQ2FjaGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBJbmplY3RzIGFuIGFscmVhZHktZ2VuZXJhdGVkIHNpZ25hdHVyZSBpbnRvIHRoZSBleHRyaW5zaWNcbiAgICAgKi9cbiAgICBhZGRTaWduYXR1cmUoc2lnbmVyLCBzaWduYXR1cmUsIHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5pbm5lci5hZGRTaWduYXR1cmUoc2lnbmVyLCBzaWduYXR1cmUsIHBheWxvYWQpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hhc2hDYWNoZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICBjb25zdCBlbmNvZGVkID0gdThhQ29uY2F0KC4uLnRoaXMudG9VOGFJbm5lcigpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlubmVyOiB0aGlzLmlzU2lnbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlubmVyLmluc3BlY3QoKS5pbm5lclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbm5lci5tZXRob2QuaW5zcGVjdCgpLmlubmVyLFxuICAgICAgICAgICAgb3V0ZXI6IFtjb21wYWN0VG9VOGEoZW5jb2RlZC5sZW5ndGgpLCBuZXcgVWludDhBcnJheShbdGhpcy52ZXJzaW9uXSldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTaWduIHRoZSBleHRyaW5zaWMgd2l0aCBhIHNwZWNpZmljIGtleXBhaXJcbiAgICAgKi9cbiAgICBzaWduKGFjY291bnQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5pbm5lci5zaWduKGFjY291bnQsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hhc2hDYWNoZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmliZSBBZGRzIGEgZmFrZSBzaWduYXR1cmUgdG8gdGhlIGV4dHJpbnNpY1xuICAgICAqL1xuICAgIHNpZ25GYWtlKHNpZ25lciwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmlubmVyLnNpZ25GYWtlKHNpZ25lciwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGFzaENhY2hlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KGlzQmFyZSkge1xuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YShpc0JhcmUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0U3ByZWFkKHt9LCB7XG4gICAgICAgICAgICBpc1NpZ25lZDogdGhpcy5pc1NpZ25lZCxcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QudG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpXG4gICAgICAgIH0sIHRoaXMuaXNTaWduZWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFzc2V0SWQ6IHRoaXMuYXNzZXRJZCA/IHRoaXMuYXNzZXRJZC50b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSkgOiBudWxsLFxuICAgICAgICAgICAgICAgIGVyYTogdGhpcy5lcmEudG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhSGFzaDogdGhpcy5tZXRhZGF0YUhhc2ggPyB0aGlzLm1ldGFkYXRhSGFzaC50b0hleCgpIDogbnVsbCxcbiAgICAgICAgICAgICAgICBub25jZTogdGhpcy5ub25jZS50b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSksXG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlOiB0aGlzLnNpZ25hdHVyZS50b0hleCgpLFxuICAgICAgICAgICAgICAgIHNpZ25lcjogdGhpcy5zaWduZXIudG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpLFxuICAgICAgICAgICAgICAgIHRpcDogdGhpcy50aXAudG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9IZXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnRXh0cmluc2ljJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBsZW5ndGgtcHJlZml4ZWRcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IHU4YUNvbmNhdCguLi50aGlzLnRvVThhSW5uZXIoKSk7XG4gICAgICAgIHJldHVybiBpc0JhcmVcbiAgICAgICAgICAgID8gZW5jb2RlZFxuICAgICAgICAgICAgOiBjb21wYWN0QWRkTGVuZ3RoKGVuY29kZWQpO1xuICAgIH1cbiAgICB0b1U4YUlubmVyKCkge1xuICAgICAgICAvLyB3ZSBkbyBub3QgYXBwbHkgYmFyZSB0byB0aGUgaW50ZXJuYWwgdmFsdWVzLCByYXRoZXIgdGhpcyBvbmx5IGRldGVybWluZXMgb3V0IGxlbmd0aCBhZGRpdGlvbixcbiAgICAgICAgLy8gd2hlcmUgd2Ugc3RyaXAgYWxsIGxlbmd0aHMgdGhpcyBjcmVhdGVzIGFuIGV4dHJpbnNpYyB0aGF0IGNhbm5vdCBiZSBkZWNvZGVkXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgVWludDhBcnJheShbdGhpcy52ZXJzaW9uXSksXG4gICAgICAgICAgICB0aGlzLmlubmVyLnRvVThhKClcbiAgICAgICAgXTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBFbnVtLCBSYXcsIFR1cGxlLCBVNjQgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgYm5Ub0JuLCBmb3JtYXROdW1iZXIsIGhleFRvVThhLCBpc0hleCwgaXNPYmplY3QsIGlzVThhLCB1OGFUb0JuLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IElNTU9SVEFMX0VSQSB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmZ1bmN0aW9uIGdldFRyYWlsaW5nWmVyb3MocGVyaW9kKSB7XG4gICAgY29uc3QgYmluYXJ5ID0gcGVyaW9kLnRvU3RyaW5nKDIpO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGJpbmFyeVtiaW5hcnkubGVuZ3RoIC0gMSAtIGluZGV4XSA9PT0gJzAnKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZU1vcnRhbEVyYShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBpZiAoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlTW9ydGFsVThhKHJlZ2lzdHJ5LCB1OGFUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVTY0KHJlZ2lzdHJ5KSwgbmV3IFU2NChyZWdpc3RyeSldO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZU1vcnRhbE9iamVjdChyZWdpc3RyeSwgdmFsdWUpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSBwYXNzZWQgdG8gTW9ydGFsIGVyYScpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlTW9ydGFsT2JqZWN0KHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGNvbnN0IHsgY3VycmVudCwgcGVyaW9kIH0gPSB2YWx1ZTtcbiAgICBsZXQgY2FsUGVyaW9kID0gTWF0aC5wb3coMiwgTWF0aC5jZWlsKE1hdGgubG9nMihwZXJpb2QpKSk7XG4gICAgY2FsUGVyaW9kID0gTWF0aC5taW4oTWF0aC5tYXgoY2FsUGVyaW9kLCA0KSwgMSA8PCAxNik7XG4gICAgY29uc3QgcGhhc2UgPSBjdXJyZW50ICUgY2FsUGVyaW9kO1xuICAgIGNvbnN0IHF1YW50aXplRmFjdG9yID0gTWF0aC5tYXgoY2FsUGVyaW9kID4+IDEyLCAxKTtcbiAgICBjb25zdCBxdWFudGl6ZWRQaGFzZSA9IHBoYXNlIC8gcXVhbnRpemVGYWN0b3IgKiBxdWFudGl6ZUZhY3RvcjtcbiAgICByZXR1cm4gW25ldyBVNjQocmVnaXN0cnksIGNhbFBlcmlvZCksIG5ldyBVNjQocmVnaXN0cnksIHF1YW50aXplZFBoYXNlKV07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVNb3J0YWxVOGEocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW25ldyBVNjQocmVnaXN0cnkpLCBuZXcgVTY0KHJlZ2lzdHJ5KV07XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0ID0gdThhVG9Cbih2YWx1ZS5zdWJhcnJheSgwLCAxKSkudG9OdW1iZXIoKTtcbiAgICBjb25zdCBzZWNvbmQgPSB1OGFUb0JuKHZhbHVlLnN1YmFycmF5KDEsIDIpKS50b051bWJlcigpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBmaXJzdCArIChzZWNvbmQgPDwgOCk7XG4gICAgY29uc3QgcGVyaW9kID0gMiA8PCAoZW5jb2RlZCAlICgxIDw8IDQpKTtcbiAgICBjb25zdCBxdWFudGl6ZUZhY3RvciA9IE1hdGgubWF4KHBlcmlvZCA+PiAxMiwgMSk7XG4gICAgY29uc3QgcGhhc2UgPSAoZW5jb2RlZCA+PiA0KSAqIHF1YW50aXplRmFjdG9yO1xuICAgIGlmIChwZXJpb2QgPCA0IHx8IHBoYXNlID49IHBlcmlvZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSBwYXNzZWQgdG8gTW9ydGFsIGVyYScpO1xuICAgIH1cbiAgICByZXR1cm4gW25ldyBVNjQocmVnaXN0cnksIHBlcmlvZCksIG5ldyBVNjQocmVnaXN0cnksIHBoYXNlKV07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVFeHRyaW5zaWNFcmEodmFsdWUgPSBuZXcgVWludDhBcnJheSgpKSB7XG4gICAgaWYgKGlzVThhKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKCF2YWx1ZS5sZW5ndGggfHwgdmFsdWVbMF0gPT09IDApXG4gICAgICAgICAgICA/IG5ldyBVaW50OEFycmF5KFswXSlcbiAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoWzEsIHZhbHVlWzBdLCB2YWx1ZVsxXV0pO1xuICAgIH1cbiAgICBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFswXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0V4dHJpbnNpY0VyYSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlRXh0cmluc2ljRXJhKHZhbHVlLnRvVThhKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZUV4dHJpbnNpY0VyYShoZXhUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtrLCB2XSkgPT4gW2sudG9Mb3dlckNhc2UoKSwgdl0pO1xuICAgICAgICBjb25zdCBtb3J0YWwgPSBlbnRyaWVzLmZpbmQoKFtrXSkgPT4gay50b0xvd2VyQ2FzZSgpID09PSAnbW9ydGFsZXJhJyk7XG4gICAgICAgIGNvbnN0IGltbW9ydGFsID0gZW50cmllcy5maW5kKChba10pID0+IGsudG9Mb3dlckNhc2UoKSA9PT0gJ2ltbW9ydGFsZXJhJyk7XG4gICAgICAgIC8vIHRoaXMgaXMgdG8gZGUtc2VyaWFsaXplIGZyb20gSlNPTlxuICAgICAgICByZXR1cm4gbW9ydGFsXG4gICAgICAgICAgICA/IHsgTW9ydGFsRXJhOiBtb3J0YWxbMV0gfVxuICAgICAgICAgICAgOiBpbW1vcnRhbFxuICAgICAgICAgICAgICAgID8geyBJbW1vcnRhbEVyYTogaW1tb3J0YWxbMV0gfVxuICAgICAgICAgICAgICAgIDogeyBNb3J0YWxFcmE6IHZhbHVlIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIHBhc3NlZCB0byBFcmEnKTtcbn1cbi8qKlxuICogQG5hbWUgSW1tb3J0YWxFcmFcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIEltbW9ydGFsRXJhIGZvciBhbiBleHRyaW5zaWNcbiAqL1xuZXhwb3J0IGNsYXNzIEltbW9ydGFsRXJhIGV4dGVuZHMgUmF3IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgX3ZhbHVlKSB7XG4gICAgICAgIC8vIEZvciBpbW1vcnRhbHMsIHdlIGFsd2F5cyBwcm92aWRlIHRoZSBrbm93biB2YWx1ZSAoaS5lLiB0cmVhdGVkIGFzIGFcbiAgICAgICAgLy8gY29uc3RhbnQgbm8gbWF0dGVyIGhvdyBpdCBpcyBjb25zdHJ1Y3RlZCAtIGl0IGlzIGEgZml4ZWQgc3RydWN0dXJlKVxuICAgICAgICBzdXBlcihyZWdpc3RyeSwgSU1NT1JUQUxfRVJBKTtcbiAgICB9XG59XG4vKipcbiAqIEBuYW1lIE1vcnRhbEVyYVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgTW9ydGFsRXJhIGZvciBhbiBleHRyaW5zaWMsIGluZGljYXRpbmcgcGVyaW9kIGFuZCBwaGFzZVxuICovXG5leHBvcnQgY2xhc3MgTW9ydGFsRXJhIGV4dGVuZHMgVHVwbGUge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgcGVyaW9kOiBVNjQsXG4gICAgICAgICAgICBwaGFzZTogVTY0XG4gICAgICAgIH0sIGRlY29kZU1vcnRhbEVyYShyZWdpc3RyeSwgdmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZWQgbGVuZ3RoIGZvciBtb3J0YWxzIG9jY3VweSAyIGJ5dGVzLCBkaWZmZXJlbnQgZnJvbSB0aGUgYWN0dWFsIFR1cGxlIHNpbmNlIGl0IGlzIGVuY29kZWQuIFRoaXMgaXMgYSBzaG9ydGN1dCBmcm8gYHRvVThhKCkubGVuZ3RoYFxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gMiB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgcGVyaW9kIG9mIHRoaXMgTW9ydGFsIHdyYXBzIGFzIGEgW1tVNjRdXVxuICAgICAqL1xuICAgIGdldCBwZXJpb2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzWzBdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHBoYXNlIG9mIHRoaXMgTW9ydGFsIHdyYXBzIGFzIGEgW1tVNjRdXVxuICAgICAqL1xuICAgIGdldCBwaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbMV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBlcmlvZDogZm9ybWF0TnVtYmVyKHRoaXMucGVyaW9kKSxcbiAgICAgICAgICAgIHBoYXNlOiBmb3JtYXROdW1iZXIodGhpcy5waGFzZSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWVcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSGV4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBwYXJpdHktY29kZWMgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqIFBlcmlvZCBhbmQgcGhhc2UgYXJlIGVuY29kZWQ6XG4gICAgICogICAtIFRoZSBwZXJpb2Qgb2YgdmFsaWRpdHkgZnJvbSB0aGUgYmxvY2sgaGFzaCBmb3VuZCBpbiB0aGUgc2lnbmluZyBtYXRlcmlhbC5cbiAgICAgKiAgIC0gVGhlIHBoYXNlIGluIHRoZSBwZXJpb2QgdGhhdCB0aGlzIHRyYW5zYWN0aW9uJ3MgbGlmZXRpbWUgYmVnaW5zIChhbmQsIGltcG9ydGFudGx5LFxuICAgICAqICAgICBpbXBsaWVzIHdoaWNoIGJsb2NrIGhhc2ggaXMgaW5jbHVkZWQgaW4gdGhlIHNpZ25hdHVyZSBtYXRlcmlhbCkuIElmIHRoZSBgcGVyaW9kYCBpc1xuICAgICAqICAgICBncmVhdGVyIHRoYW4gMSA8PCAxMiwgdGhlbiBpdCB3aWxsIGJlIGEgZmFjdG9yIG9mIHRoZSB0aW1lcyBncmVhdGVyIHRoYW4gMTw8MTIgdGhhdFxuICAgICAqICAgICBgcGVyaW9kYCBpcy5cbiAgICAgKi9cbiAgICB0b1U4YShfaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IHBlcmlvZCA9IHRoaXMucGVyaW9kLnRvTnVtYmVyKCk7XG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSBNYXRoLm1pbigxNSwgTWF0aC5tYXgoMSwgZ2V0VHJhaWxpbmdaZXJvcyhwZXJpb2QpIC0gMSkpICsgKCh0aGlzLnBoYXNlLnRvTnVtYmVyKCkgLyBNYXRoLm1heChwZXJpb2QgPj4gMTIsIDEpKSA8PCA0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtcbiAgICAgICAgICAgIGVuY29kZWQgJiAweGZmLFxuICAgICAgICAgICAgZW5jb2RlZCA+PiA4XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBibG9jayBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBlcmEgd2hvc2UgcHJvcGVydGllcyB0aGlzIG9iamVjdCBkZXNjcmliZXMgdGhhdCBgY3VycmVudGAgYmVsb25ncyB0by5cbiAgICAgKi9cbiAgICBiaXJ0aChjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHBoYXNlID0gdGhpcy5waGFzZS50b051bWJlcigpO1xuICAgICAgICBjb25zdCBwZXJpb2QgPSB0aGlzLnBlcmlvZC50b051bWJlcigpO1xuICAgICAgICAvLyBGSVhNRSBObyB0b051bWJlcigpIGhlcmVcbiAgICAgICAgcmV0dXJuICh+figoTWF0aC5tYXgoYm5Ub0JuKGN1cnJlbnQpLnRvTnVtYmVyKCksIHBoYXNlKSAtIHBoYXNlKSAvIHBlcmlvZCkgKiBwZXJpb2QpICsgcGhhc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIGJsb2NrIG51bWJlciBvZiB0aGUgZmlyc3QgYmxvY2sgYXQgd2hpY2ggdGhlIGVyYSBoYXMgZW5kZWQuXG4gICAgICovXG4gICAgZGVhdGgoY3VycmVudCkge1xuICAgICAgICAvLyBGSVhNRSBObyB0b051bWJlcigpIGhlcmVcbiAgICAgICAgcmV0dXJuIHRoaXMuYmlydGgoY3VycmVudCkgKyB0aGlzLnBlcmlvZC50b051bWJlcigpO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY0VyYVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZXJhIGZvciBhbiBleHRyaW5zaWMsIGluZGljYXRpbmcgZWl0aGVyIGEgbW9ydGFsIG9yIGltbW9ydGFsIGV4dHJpbnNpY1xuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpY0VyYSBleHRlbmRzIEVudW0ge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgSW1tb3J0YWxFcmEsXG4gICAgICAgICAgICBNb3J0YWxFcmFcbiAgICAgICAgfSwgZGVjb2RlRXh0cmluc2ljRXJhKHZhbHVlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBPdmVycmlkZSB0aGUgZW5jb2RlZCBsZW5ndGggbWV0aG9kXG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW1tb3J0YWxFcmFcbiAgICAgICAgICAgID8gdGhpcy5hc0ltbW9ydGFsRXJhLmVuY29kZWRMZW5ndGhcbiAgICAgICAgICAgIDogdGhpcy5hc01vcnRhbEVyYS5lbmNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgaXRlbSBhcyBhIFtbSW1tb3J0YWxFcmFdXVxuICAgICAqL1xuICAgIGdldCBhc0ltbW9ydGFsRXJhKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJbW1vcnRhbEVyYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAnJHt0aGlzLnR5cGV9JyB2aWEgYXNJbW1vcnRhbEVyYWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgaXRlbSBhcyBhIFtbTW9ydGFsRXJhXV1cbiAgICAgKi9cbiAgICBnZXQgYXNNb3J0YWxFcmEoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc01vcnRhbEVyYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAnJHt0aGlzLnR5cGV9JyB2aWEgYXNNb3J0YWxFcmFgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbm5lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIGB0cnVlYCBpZiBJbW1vcnRhbFxuICAgICAqL1xuICAgIGdldCBpc0ltbW9ydGFsRXJhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIGB0cnVlYCBpZiBNb3J0YWxcbiAgICAgKi9cbiAgICBnZXQgaXNNb3J0YWxFcmEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID4gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIHBhcml0eS1jb2RlYyBzcGVjaWZpY2F0aW9uc1xuICAgICAqIEBwYXJhbSBpc0JhcmUgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBwcmVmaXhlcyAoaW50ZXJuYWwpXG4gICAgICovXG4gICAgdG9VOGEoaXNCYXJlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW9ydGFsRXJhXG4gICAgICAgICAgICA/IHRoaXMuYXNNb3J0YWxFcmEudG9VOGEoaXNCYXJlKVxuICAgICAgICAgICAgOiB0aGlzLmFzSW1tb3J0YWxFcmEudG9VOGEoaXNCYXJlKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEJhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBERUZBVUxUX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5jb25zdCBWRVJTSU9OUyA9IFtcbiAgICAnRXh0cmluc2ljUGF5bG9hZFVua25vd24nLCAvLyB2MCBpcyB1bmtub3duXG4gICAgJ0V4dHJpbnNpY1BheWxvYWRVbmtub3duJyxcbiAgICAnRXh0cmluc2ljUGF5bG9hZFVua25vd24nLFxuICAgICdFeHRyaW5zaWNQYXlsb2FkVW5rbm93bicsXG4gICAgJ0V4dHJpbnNpY1BheWxvYWRWNCdcbl07XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVFeHRyaW5zaWNQYXlsb2FkKHJlZ2lzdHJ5LCB2YWx1ZSwgdmVyc2lvbiA9IERFRkFVTFRfVkVSU0lPTikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS51bndyYXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoVkVSU0lPTlNbdmVyc2lvbl0gfHwgVkVSU0lPTlNbMF0sIFt2YWx1ZSwgeyB2ZXJzaW9uIH1dKTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBzaWduaW5nIHBheWxvYWQgZm9yIGFuIFtbRXh0cmluc2ljXV0uIEZvciB0aGUgZmluYWwgZW5jb2RpbmcsIGl0IGlzIHZhcmlhYmxlIGxlbmd0aCBiYXNlZFxuICogb24gdGhlIGNvbnRlbnRzIGluY2x1ZGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljRXh0cmluc2ljUGF5bG9hZCBleHRlbmRzIEFic3RyYWN0QmFzZSB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlLCB7IHZlcnNpb24gfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBkZWNvZGVFeHRyaW5zaWNQYXlsb2FkKHJlZ2lzdHJ5LCB2YWx1ZSwgdmVyc2lvbikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGJsb2NrIFtbQmxvY2tIYXNoXV0gdGhlIHNpZ25hdHVyZSBhcHBsaWVzIHRvIChtb3J0YWwvaW1tb3J0YWwpXG4gICAgICovXG4gICAgZ2V0IGJsb2NrSGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIuYmxvY2tIYXNoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXh0cmluc2ljRXJhXV1cbiAgICAgKi9cbiAgICBnZXQgZXJhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5lcmE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZ2VuZXNpcyBibG9jayBbW0Jsb2NrSGFzaF1dIHRoZSBzaWduYXR1cmUgYXBwbGllcyB0b1xuICAgICAqL1xuICAgIGdldCBnZW5lc2lzSGFzaCgpIHtcbiAgICAgICAgLy8gTk9URSBvbmx5IHYzK1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5nZW5lc2lzSGFzaCB8fCB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0hhc2gnLCBbXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgW1tCeXRlc11dIGNvbnRhaW5lZCBpbiB0aGUgcGF5bG9hZFxuICAgICAqL1xuICAgIGdldCBtZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLm1ldGhvZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0luZGV4XV1cbiAgICAgKi9cbiAgICBnZXQgbm9uY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLm5vbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHNwZWNWZXJzaW9uIGFzIGEgW1t1MzJdXSBmb3IgdGhpcyBwYXlsb2FkXG4gICAgICovXG4gICAgZ2V0IHNwZWNWZXJzaW9uKCkge1xuICAgICAgICAvLyBOT1RFIG9ubHkgdjMrXG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnNwZWNWZXJzaW9uIHx8IHRoaXMucmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgndTMyJywgW10pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbQmFsYW5jZV1dXG4gICAgICovXG4gICAgZ2V0IHRpcCgpIHtcbiAgICAgICAgLy8gTk9URSBmcm9tIHYyK1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci50aXAgfHwgdGhpcy5yZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdDb21wYWN0PEJhbGFuY2U+JywgW10pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHZlcnNpb24gYXMgYSBbW3UzMl1dIGZvciB0aGlzIHBheWxvYWRcbiAgICAgKi9cbiAgICBnZXQgdHJhbnNhY3Rpb25WZXJzaW9uKCkge1xuICAgICAgICAvLyBOT1RFIG9ubHkgdjQrXG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnRyYW5zYWN0aW9uVmVyc2lvbiB8fCB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ3UzMicsIFtdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSAob3B0aW9uYWwpIGFzc2V0IGlkIGFzIGEgW1t1MzJdXSBvciBbW011bHRpTG9jYXRpb25dXSBmb3IgdGhpcyBwYXlsb2FkXG4gICAgICovXG4gICAgZ2V0IGFzc2V0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLmFzc2V0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgKG9wdGlvbmFsKSBbW0hhc2hdXSBvZiB0aGUgZ2VuZXNpcyBtZXRhZGF0YSBmb3IgdGhpcyBwYXlsb2FkXG4gICAgICovXG4gICAgZ2V0IG1ldGFkYXRhSGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIubWV0YWRhdGFIYXNoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLmVxKG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ24gdGhlIHBheWxvYWQgd2l0aCB0aGUga2V5cGFpclxuICAgICAqL1xuICAgIHNpZ24oc2lnbmVyUGFpcikge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmlubmVyLnNpZ24oc2lnbmVyUGFpcik7XG4gICAgICAgIC8vIFRoaXMgaXMgZXh0ZW5zaWJsZSwgc28gd2UgY291bGQgcXVpdGUgcmVhZGlseSBleHRlbmQgdG8gc2VuZCBiYWNrIGV4dHJhXG4gICAgICAgIC8vIGluZm9ybWF0aW9uLCBzdWNoIGFzIGZvciBpbnN0YW5jZSB0aGUgcGF5bG9hZCwgaS5lLiBgcGF5bG9hZDogdGhpcy50b0hleCgpYFxuICAgICAgICAvLyBGb3IgdGhlIGNhc2UgaGVyZSB3ZSBzaWduIHZpYSB0aGUgZXh0cmluc2ljLCB3ZSBpZ25vcmUgdGhlIHJldHVybiwgc28gZ2VuZXJhbGx5XG4gICAgICAgIC8vIHRoaXMgaXMgYXBwbGljYWJsZSBmb3IgZXh0ZXJuYWwgc2lnbmluZ1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lnbmF0dXJlOiB1OGFUb0hleChzaWduYXR1cmUpXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9IZXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnRXh0cmluc2ljUGF5bG9hZCc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSGV4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgc2VyaWFsaXplZCB1OGEgZm9ybVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICAvLyBjYWxsIG91ciBwYXJlbnQsIHdpdGggb25seSB0aGUgbWV0aG9kIHN0cmlwcGVkXG4gICAgICAgIHJldHVybiBzdXBlci50b1U4YShpc0JhcmUgPyB7IG1ldGhvZDogdHJ1ZSB9IDogZmFsc2UpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN0cnVjdCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkVW5rbm93blxuICogQGRlc2NyaXB0aW9uXG4gKiBBIGRlZmF1bHQgaGFuZGxlciBmb3IgcGF5bG9hZHMgd2hlcmUgdGhlIHZlcnNpb24gaXMgbm90IGtub3duIChkZWZhdWx0IHRocm93KVxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRVbmtub3duIGV4dGVuZHMgU3RydWN0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgX3ZhbHVlLCB7IHZlcnNpb24gPSAwIH0gPSB7fSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge30pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV4dHJpbnNpYyBwYXlsb2FkIHZlcnNpb24gJHt2ZXJzaW9ufWApO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN0cnVjdCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBVTk1BU0tfVkVSU0lPTiB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1Vua25vd25cbiAqIEBkZXNjcmlwdGlvblxuICogQSBkZWZhdWx0IGhhbmRsZXIgZm9yIGV4dHJpbnNpY3Mgd2hlcmUgdGhlIHZlcnNpb24gaXMgbm90IGtub3duIChkZWZhdWx0IHRocm93KVxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpY1Vua25vd24gZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBfdmFsdWUsIHsgaXNTaWduZWQgPSBmYWxzZSwgdmVyc2lvbiA9IDAgfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB7fSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgJHtpc1NpZ25lZCA/ICcnIDogJ3VuJ31zaWduZWQgZXh0cmluc2ljIHZlcnNpb24gJHt2ZXJzaW9uICYgVU5NQVNLX1ZFUlNJT059YCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgT3B0aW9uLCBTdHJ1Y3QgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgb2JqZWN0UHJvcGVydHksIG9iamVjdFNwcmVhZCwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5jb25zdCBrbm93blR5cGVzID0ge1xuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICBhc3NldElkOiAnT3B0aW9uPFRBc3NldENvbnZlcnNpb24+JyxcbiAgICBibG9ja0hhc2g6ICdIYXNoJyxcbiAgICBibG9ja051bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICBlcmE6ICdFeHRyaW5zaWNFcmEnLFxuICAgIGdlbmVzaXNIYXNoOiAnSGFzaCcsXG4gICAgbWV0YWRhdGFIYXNoOiAnT3B0aW9uPFt1ODszMl0+JyxcbiAgICBtZXRob2Q6ICdDYWxsJyxcbiAgICBtb2RlOiAndTgnLFxuICAgIG5vbmNlOiAnQ29tcGFjdDxJbmRleD4nLFxuICAgIHJ1bnRpbWVWZXJzaW9uOiAnUnVudGltZVZlcnNpb24nLFxuICAgIHNpZ25lZEV4dGVuc2lvbnM6ICdWZWM8VGV4dD4nLFxuICAgIHRpcDogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgIHZlcnNpb246ICd1OCdcbn07XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNTaWduZXJQYXlsb2FkXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgZ2VuZXJpYyBzaWduZXIgcGF5bG9hZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBzZXJpYWxpemF0aW9uIGJldHdlZW4gQVBJIGFuZCBzaWduZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNTaWduZXJQYXlsb2FkIGV4dGVuZHMgU3RydWN0IHtcbiAgICBfX2ludGVybmFsX19leHRyYVR5cGVzO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBleHRlbnNpb25UeXBlcyA9IG9iamVjdFNwcmVhZCh7fSwgcmVnaXN0cnkuZ2V0U2lnbmVkRXh0ZW5zaW9uVHlwZXMoKSwgcmVnaXN0cnkuZ2V0U2lnbmVkRXh0ZW5zaW9uRXh0cmEoKSk7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBvYmplY3RTcHJlYWQoe30sIGV4dGVuc2lvblR5cGVzLCBrbm93blR5cGVzKSwgdmFsdWUpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2V4dHJhVHlwZXMgPSB7fTtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gKGtleSkgPT4gdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgLy8gYWRkIGFsbCBleHRyYXMgdGhhdCBhcmUgbm90IGluIHRoZSBiYXNlIHR5cGVzXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoZXh0ZW5zaW9uVHlwZXMpKSB7XG4gICAgICAgICAgICBpZiAoIWtub3duVHlwZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXh0cmFUeXBlc1trZXldID0gdHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9iamVjdFByb3BlcnR5KHRoaXMsIGtleSwgZ2V0dGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYWRkcmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnYWRkcmVzcycpO1xuICAgIH1cbiAgICBnZXQgYmxvY2tIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdibG9ja0hhc2gnKTtcbiAgICB9XG4gICAgZ2V0IGJsb2NrTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdibG9ja051bWJlcicpO1xuICAgIH1cbiAgICBnZXQgZXJhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdlcmEnKTtcbiAgICB9XG4gICAgZ2V0IGdlbmVzaXNIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdnZW5lc2lzSGFzaCcpO1xuICAgIH1cbiAgICBnZXQgbWV0aG9kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRob2QnKTtcbiAgICB9XG4gICAgZ2V0IG5vbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdub25jZScpO1xuICAgIH1cbiAgICBnZXQgcnVudGltZVZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3J1bnRpbWVWZXJzaW9uJyk7XG4gICAgfVxuICAgIGdldCBzaWduZWRFeHRlbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdzaWduZWRFeHRlbnNpb25zJyk7XG4gICAgfVxuICAgIGdldCB0aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3RpcCcpO1xuICAgIH1cbiAgICBnZXQgYXNzZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnYXNzZXRJZCcpO1xuICAgIH1cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgndmVyc2lvbicpO1xuICAgIH1cbiAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnbW9kZScpO1xuICAgIH1cbiAgICBnZXQgbWV0YWRhdGFIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRhZGF0YUhhc2gnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBhcyBhbiBJU2lnbmVyUGF5bG9hZCBKU09OXG4gICAgICovXG4gICAgdG9QYXlsb2FkKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX19pbnRlcm5hbF9fZXh0cmFUeXBlcyk7XG4gICAgICAgIC8vIGFkZCBhbnkgZXhwbGljaXQgb3ZlcnJpZGVzIHdlIG1heSBoYXZlXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGtleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRUKGtleSk7XG4gICAgICAgICAgICAvLyBEb24ndCBpbmNsdWRlIE9wdGlvbi5pc05vbmVcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgT3B0aW9uKSB8fCB2YWx1ZS5pc1NvbWUpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RFIEluIHRoZSBzcHJlYWQgYmVsb3cgd2UgY29udmVydCAobW9zdGx5KSB0byBIZXggdG8gYWxpZ25cbiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSB0eXBpbmdzLiBJbiB0aGUgY2FzZSBvZiBcInVua25vd25cIiBmaWVsZHMsIHdlIHVzZSB0aGVcbiAgICAgICAgICAgICAgICAvLyBwcmltaXRpdmUgdG9KU09OIGNvbnZlcnNpb24gKHdoaWNoIGlzIHNlcmlhbGl6YWJsZSkuIFRlY2huaWNhbGx5XG4gICAgICAgICAgICAgICAgLy8gd2UgY2FuIGluY2x1ZGUgaXNOb25lIGluIGhlcmUgYXMgd2VsbCAoXCJudWxsXCIgaXMgYWxsb3dlZCksIGhvd2V2ZXJcbiAgICAgICAgICAgICAgICAvLyBmb3IgZW1wdHkgZmllbGRzIHdlIGp1c3Qgc2tpcCBpdCBjb21wbGV0ZWx5IChoaXN0b3JpY2FsIGNvbXBhdClcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlLnRvSlNPTigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RTcHJlYWQocmVzdWx0LCB7XG4gICAgICAgICAgICAvLyB0aGUga25vd24gZGVmYXVsdHMgYXMgbWFuYWdlZCBleHBsaWNpdGx5IGFuZCBoYXMgZGlmZmVyZW50XG4gICAgICAgICAgICAvLyBmb3JtYXR0aW5nIGluIGNhc2VzLCBlLmcuIHdlIG1vc3RseSBleHBvc2UgYSBoZXggZm9ybWF0IGhlcmVcbiAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMuYWRkcmVzcy50b1N0cmluZygpLFxuICAgICAgICAgICAgYXNzZXRJZDogdGhpcy5hc3NldElkID8gdGhpcy5hc3NldElkLnRvSlNPTigpIDogbnVsbCxcbiAgICAgICAgICAgIGJsb2NrSGFzaDogdGhpcy5ibG9ja0hhc2gudG9IZXgoKSxcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyOiB0aGlzLmJsb2NrTnVtYmVyLnRvSGV4KCksXG4gICAgICAgICAgICBlcmE6IHRoaXMuZXJhLnRvSGV4KCksXG4gICAgICAgICAgICBnZW5lc2lzSGFzaDogdGhpcy5nZW5lc2lzSGFzaC50b0hleCgpLFxuICAgICAgICAgICAgbWV0YWRhdGFIYXNoOiB0aGlzLm1ldGFkYXRhSGFzaC5pc1NvbWUgPyB0aGlzLm1ldGFkYXRhSGFzaC50b0hleCgpIDogbnVsbCxcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QudG9IZXgoKSxcbiAgICAgICAgICAgIG1vZGU6IHRoaXMubW9kZS50b051bWJlcigpLFxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UudG9IZXgoKSxcbiAgICAgICAgICAgIHNpZ25lZEV4dGVuc2lvbnM6IHRoaXMuc2lnbmVkRXh0ZW5zaW9ucy5tYXAoKGUpID0+IGUudG9TdHJpbmcoKSksXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogdGhpcy5ydW50aW1lVmVyc2lvbi5zcGVjVmVyc2lvbi50b0hleCgpLFxuICAgICAgICAgICAgdGlwOiB0aGlzLnRpcC50b0hleCgpLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uOiB0aGlzLnJ1bnRpbWVWZXJzaW9uLnRyYW5zYWN0aW9uVmVyc2lvbi50b0hleCgpLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLnRvTnVtYmVyKClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBheWxvYWQgaW4gcmF3IEV4cmluc2ljIGZvcm1cbiAgICAgKi9cbiAgICB0b1JhdygpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMudG9QYXlsb2FkKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1OGFUb0hleCh0aGlzLnJlZ2lzdHJ5XG4gICAgICAgICAgICAuY3JlYXRlVHlwZVVuc2FmZSgnRXh0cmluc2ljUGF5bG9hZCcsIFtwYXlsb2FkLCB7IHZlcnNpb246IHBheWxvYWQudmVyc2lvbiB9XSlcbiAgICAgICAgICAgIC8vIE5PVEUgRXhwbGljaXRseSBwYXNzIHRoZSBiYXJlIGZsYWcgc28gdGhlIG1ldGhvZCBpcyBlbmNvZGVkIHVuLXByZWZpeGVkIChub24tZGVjb2RhYmxlLCBmb3Igc2lnbmluZyBvbmx5KVxuICAgICAgICAgICAgLnRvVThhKHsgbWV0aG9kOiB0cnVlIH0pKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHBheWxvYWQuYWRkcmVzcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0eXBlOiAncGF5bG9hZCdcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgQklUX1NJR05FRCA9IDBiMTAwMDAwMDA7XG5leHBvcnQgY29uc3QgQklUX1VOU0lHTkVEID0gMDtcbmV4cG9ydCBjb25zdCBFTVBUWV9VOEEgPSBuZXcgVWludDhBcnJheSgpO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVSU0lPTiA9IDQ7XG5leHBvcnQgY29uc3QgSU1NT1JUQUxfRVJBID0gbmV3IFVpbnQ4QXJyYXkoWzBdKTtcbmV4cG9ydCBjb25zdCBVTk1BU0tfVkVSU0lPTiA9IDBiMDExMTExMTE7XG4iLCJleHBvcnQgeyBHZW5lcmljRXh0cmluc2ljIH0gZnJvbSAnLi9FeHRyaW5zaWMuanMnO1xuZXhwb3J0IHsgR2VuZXJpY0V4dHJpbnNpY0VyYSwgSW1tb3J0YWxFcmEgYXMgR2VuZXJpY0ltbW9ydGFsRXJhLCBNb3J0YWxFcmEgYXMgR2VuZXJpY01vcnRhbEVyYSB9IGZyb20gJy4vRXh0cmluc2ljRXJhLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkIH0gZnJvbSAnLi9FeHRyaW5zaWNQYXlsb2FkLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkVW5rbm93biB9IGZyb20gJy4vRXh0cmluc2ljUGF5bG9hZFVua25vd24uanMnO1xuZXhwb3J0IHsgR2VuZXJpY0V4dHJpbnNpY1Vua25vd24gfSBmcm9tICcuL0V4dHJpbnNpY1Vua25vd24uanMnO1xuZXhwb3J0IHsgR2VuZXJpY1NpZ25lclBheWxvYWQgfSBmcm9tICcuL1NpZ25lclBheWxvYWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92NC9pbmRleC5qcyc7XG4iLCJleHBvcnQgY29uc3QgZW1wdHlDaGVjayA9IHtcbiAgICBleHRyaW5zaWM6IHt9LFxuICAgIHBheWxvYWQ6IHt9XG59O1xuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgcG9sa2Fkb3QgfSBmcm9tICcuL3BvbGthZG90LmpzJztcbmltcG9ydCB7IHNoZWxsIH0gZnJvbSAnLi9zaGVsbC5qcyc7XG5pbXBvcnQgeyBzdGF0ZW1pbnQgfSBmcm9tICcuL3N0YXRlbWludC5qcyc7XG5pbXBvcnQgeyBzdWJzdHJhdGUgfSBmcm9tICcuL3N1YnN0cmF0ZS5qcyc7XG5leHBvcnQgY29uc3QgYWxsRXh0ZW5zaW9ucyA9IG9iamVjdFNwcmVhZCh7fSwgc3Vic3RyYXRlLCBwb2xrYWRvdCwgc2hlbGwsIHN0YXRlbWludCk7XG5leHBvcnQgY29uc3QgZmFsbGJhY2tFeHRlbnNpb25zID0gW1xuICAgICdDaGVja1ZlcnNpb24nLFxuICAgICdDaGVja0dlbmVzaXMnLFxuICAgICdDaGVja0VyYScsXG4gICAgJ0NoZWNrTm9uY2UnLFxuICAgICdDaGVja1dlaWdodCcsXG4gICAgJ0NoYXJnZVRyYW5zYWN0aW9uUGF5bWVudCcsXG4gICAgJ0NoZWNrQmxvY2tHYXNMaW1pdCdcbl07XG5leHBvcnQgZnVuY3Rpb24gZmluZFVua25vd25FeHRlbnNpb25zKGV4dGVuc2lvbnMsIHVzZXJFeHRlbnNpb25zID0ge30pIHtcbiAgICBjb25zdCBuYW1lcyA9IFsuLi5PYmplY3Qua2V5cyhhbGxFeHRlbnNpb25zKSwgLi4uT2JqZWN0LmtleXModXNlckV4dGVuc2lvbnMpXTtcbiAgICByZXR1cm4gZXh0ZW5zaW9ucy5maWx0ZXIoKGspID0+ICFuYW1lcy5pbmNsdWRlcyhrKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kRXh0ZW5zaW9uVHlwZXMoZXh0ZW5zaW9ucywgdHlwZSwgdXNlckV4dGVuc2lvbnMgPSB7fSkge1xuICAgIHJldHVybiBleHRlbnNpb25zXG4gICAgICAgIC8vIEFsd2F5cyBhbGxvdyB1c2VyIGV4dGVuc2lvbnMgZmlyc3QgLSB0aGVzZSBzaG91bGQgcHJvdmlkZSBvdmVycmlkZXNcbiAgICAgICAgLm1hcCgoaykgPT4gdXNlckV4dGVuc2lvbnNba10gfHwgYWxsRXh0ZW5zaW9uc1trXSlcbiAgICAgICAgLmZpbHRlcigoaW5mbykgPT4gISFpbmZvKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIGluZm8pID0+IG9iamVjdFNwcmVhZChyZXN1bHQsIGluZm9bdHlwZV0pLCB7fSk7XG59XG4iLCJpbXBvcnQgeyBlbXB0eUNoZWNrIH0gZnJvbSAnLi9lbXB0eUNoZWNrLmpzJztcbmV4cG9ydCBjb25zdCBwb2xrYWRvdCA9IHtcbiAgICBMaW1pdFBhcmF0aHJlYWRDb21taXRzOiBlbXB0eUNoZWNrLFxuICAgIE9ubHlTdGFraW5nQW5kQ2xhaW1zOiBlbXB0eUNoZWNrLFxuICAgIFByZXZhbGlkYXRlQXR0ZXN0czogZW1wdHlDaGVjayxcbiAgICBSZXN0cmljdEZ1bmN0aW9uYWxpdHk6IGVtcHR5Q2hlY2ssXG4gICAgVHJhbnNhY3Rpb25DYWxsRmlsdGVyOiBlbXB0eUNoZWNrLFxuICAgIFZhbGlkYXRlRG91YmxlVm90ZVJlcG9ydHM6IGVtcHR5Q2hlY2tcbn07XG4iLCJpbXBvcnQgeyBlbXB0eUNoZWNrIH0gZnJvbSAnLi9lbXB0eUNoZWNrLmpzJztcbmV4cG9ydCBjb25zdCBzaGVsbCA9IHtcbiAgICBEaXNhbGxvd1NpZ25lZDogZW1wdHlDaGVja1xufTtcbiIsImV4cG9ydCBjb25zdCBzdGF0ZW1pbnQgPSB7XG4gICAgQ2hhcmdlQXNzZXRUeFBheW1lbnQ6IHtcbiAgICAgICAgZXh0cmluc2ljOiB7XG4gICAgICAgICAgICB0aXA6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb3J0LWtleXNcbiAgICAgICAgICAgIGFzc2V0SWQ6ICdUQXNzZXRDb252ZXJzaW9uJ1xuICAgICAgICB9LFxuICAgICAgICBwYXlsb2FkOiB7fVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBlbXB0eUNoZWNrIH0gZnJvbSAnLi9lbXB0eUNoZWNrLmpzJztcbmNvbnN0IENoZWNrTWV0YWRhdGFIYXNoID0ge1xuICAgIGV4dHJpbnNpYzoge1xuICAgICAgICBtb2RlOiAndTgnXG4gICAgfSxcbiAgICBwYXlsb2FkOiB7XG4gICAgICAgIG1ldGFkYXRhSGFzaDogJ09wdGlvbjxbdTg7MzJdPidcbiAgICB9XG59O1xuY29uc3QgQ2hlY2tNb3J0YWxpdHkgPSB7XG4gICAgZXh0cmluc2ljOiB7XG4gICAgICAgIGVyYTogJ0V4dHJpbnNpY0VyYSdcbiAgICB9LFxuICAgIHBheWxvYWQ6IHtcbiAgICAgICAgYmxvY2tIYXNoOiAnSGFzaCdcbiAgICB9XG59O1xuY29uc3QgQ2hhcmdlVHJhbnNhY3Rpb25QYXltZW50ID0ge1xuICAgIGV4dHJpbnNpYzoge1xuICAgICAgICB0aXA6ICdDb21wYWN0PEJhbGFuY2U+J1xuICAgIH0sXG4gICAgcGF5bG9hZDoge31cbn07XG5leHBvcnQgY29uc3Qgc3Vic3RyYXRlID0ge1xuICAgIENoYXJnZVRyYW5zYWN0aW9uUGF5bWVudCxcbiAgICBDaGVja0Jsb2NrR2FzTGltaXQ6IGVtcHR5Q2hlY2ssXG4gICAgQ2hlY2tFcmE6IENoZWNrTW9ydGFsaXR5LFxuICAgIENoZWNrR2VuZXNpczoge1xuICAgICAgICBleHRyaW5zaWM6IHt9LFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBnZW5lc2lzSGFzaDogJ0hhc2gnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIENoZWNrTWV0YWRhdGFIYXNoLFxuICAgIENoZWNrTW9ydGFsaXR5LFxuICAgIENoZWNrTm9uWmVyb1NlbmRlcjogZW1wdHlDaGVjayxcbiAgICBDaGVja05vbmNlOiB7XG4gICAgICAgIGV4dHJpbnNpYzoge1xuICAgICAgICAgICAgbm9uY2U6ICdDb21wYWN0PEluZGV4PidcbiAgICAgICAgfSxcbiAgICAgICAgcGF5bG9hZDoge31cbiAgICB9LFxuICAgIENoZWNrU3BlY1ZlcnNpb246IHtcbiAgICAgICAgZXh0cmluc2ljOiB7fSxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgc3BlY1ZlcnNpb246ICd1MzInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIENoZWNrVHhWZXJzaW9uOiB7XG4gICAgICAgIGV4dHJpbnNpYzoge30sXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uVmVyc2lvbjogJ3UzMidcbiAgICAgICAgfVxuICAgIH0sXG4gICAgQ2hlY2tWZXJzaW9uOiB7XG4gICAgICAgIGV4dHJpbnNpYzoge30sXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiAndTMyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBDaGVja1dlaWdodDogZW1wdHlDaGVjayxcbiAgICBMb2NrU3Rha2luZ1N0YXR1czogZW1wdHlDaGVjayxcbiAgICBTa2lwQ2hlY2tJZkZlZWxlc3M6IENoYXJnZVRyYW5zYWN0aW9uUGF5bWVudCxcbiAgICBWYWxpZGF0ZUVxdWl2b2NhdGlvblJlcG9ydDogZW1wdHlDaGVja1xufTtcbiIsImV4cG9ydCBmdW5jdGlvbiBzaWduKHJlZ2lzdHJ5LCBzaWduZXJQYWlyLCB1OGEsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBlbmNvZGVkID0gdThhLmxlbmd0aCA+IDI1NlxuICAgICAgICA/IHJlZ2lzdHJ5Lmhhc2godThhKVxuICAgICAgICA6IHU4YTtcbiAgICByZXR1cm4gc2lnbmVyUGFpci5zaWduKGVuY29kZWQsIG9wdGlvbnMpO1xufVxuIiwiaW1wb3J0IHsgU3RydWN0IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZXhwb3J0IGNvbnN0IEVYVFJJTlNJQ19WRVJTSU9OID0gNDtcbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1Y0XG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSB0aGlyZCBnZW5lcmF0aW9uIG9mIGNvbXBhY3QgZXh0cmluc2ljc1xuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpY1Y0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIHsgaXNTaWduZWQgfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBzaWduYXR1cmU6ICdFeHRyaW5zaWNTaWduYXR1cmVWNCcsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgICAgICBtZXRob2Q6ICdDYWxsJ1xuICAgICAgICB9LCBHZW5lcmljRXh0cmluc2ljVjQuZGVjb2RlRXh0cmluc2ljKHJlZ2lzdHJ5LCB2YWx1ZSwgaXNTaWduZWQpKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHN0YXRpYyBkZWNvZGVFeHRyaW5zaWMocmVnaXN0cnksIHZhbHVlLCBpc1NpZ25lZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNFeHRyaW5zaWNWNCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgcmVnaXN0cnkuY3JlYXRlQ2xhc3NVbnNhZmUoJ0NhbGwnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWV0aG9kOiB2YWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVThhKHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gaGVyZSB3ZSBkZWNvZGUgbWFudWFsbHkgc2luY2Ugd2UgbmVlZCB0byBwdWxsIHRocm91Z2ggdGhlIHZlcnNpb24gaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V4dHJpbnNpY1NpZ25hdHVyZVY0JywgW3ZhbHVlLCB7IGlzU2lnbmVkIH1dKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0NhbGwnLCBbdmFsdWUuc3ViYXJyYXkoc2lnbmF0dXJlLmVuY29kZWRMZW5ndGgpXSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1U4YSgpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0NhbGxdXSB0aGlzIGV4dHJpbnNpYyB3cmFwc1xuICAgICAqL1xuICAgIGdldCBtZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ21ldGhvZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXh0cmluc2ljU2lnbmF0dXJlVjRdXVxuICAgICAqL1xuICAgIGdldCBzaWduYXR1cmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3NpZ25hdHVyZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHZlcnNpb24gZm9yIHRoZSBzaWduYXR1cmVcbiAgICAgKi9cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIEVYVFJJTlNJQ19WRVJTSU9OO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQWRkIGFuIFtbRXh0cmluc2ljU2lnbmF0dXJlVjRdXSB0byB0aGUgZXh0cmluc2ljIChhbHJlYWR5IGdlbmVyYXRlZClcbiAgICAgKi9cbiAgICBhZGRTaWduYXR1cmUoc2lnbmVyLCBzaWduYXR1cmUsIHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUuYWRkU2lnbmF0dXJlKHNpZ25lciwgc2lnbmF0dXJlLCBwYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTaWduIHRoZSBleHRyaW5zaWMgd2l0aCBhIHNwZWNpZmljIGtleXBhaXJcbiAgICAgKi9cbiAgICBzaWduKGFjY291bnQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUuc2lnbih0aGlzLm1ldGhvZCwgYWNjb3VudCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpYmUgQWRkcyBhIGZha2Ugc2lnbmF0dXJlIHRvIHRoZSBleHRyaW5zaWNcbiAgICAgKi9cbiAgICBzaWduRmFrZShzaWduZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUuc2lnbkZha2UodGhpcy5tZXRob2QsIHNpZ25lciwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVudW0sIFN0cnVjdCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBzaWduIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkVjRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBzaWduaW5nIHBheWxvYWQgZm9yIGFuIFtbRXh0cmluc2ljXV0uIEZvciB0aGUgZmluYWwgZW5jb2RpbmcsIGl0IGlzXG4gKiB2YXJpYWJsZSBsZW5ndGggYmFzZWQgb24gdGhlIGNvbnRlbnRzIGluY2x1ZGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljRXh0cmluc2ljUGF5bG9hZFY0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfX2ludGVybmFsX19zaWduT3B0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIG9iamVjdFNwcmVhZCh7IG1ldGhvZDogJ0J5dGVzJyB9LCByZWdpc3RyeS5nZXRTaWduZWRFeHRlbnNpb25UeXBlcygpLCByZWdpc3RyeS5nZXRTaWduZWRFeHRlbnNpb25FeHRyYSgpKSwgdmFsdWUpO1xuICAgICAgICAvLyBEbyBkZXRlY3Rpb24gZm9yIHRoZSB0eXBlIG9mIGV4dHJpbnNpYywgaW4gdGhlIGNhc2Ugb2YgTXVsdGlTaWduYXR1cmVcbiAgICAgICAgLy8gdGhpcyBpcyBhbiBlbnVtLCBpbiB0aGUgY2FzZSBvZiBBbnlTaWduYXR1cmUsIHRoaXMgaXMgYSBIYXNoIG9ubHlcbiAgICAgICAgLy8gKHdoaWNoIG1heSBiZSA2NCBvciA2NSBieXRlcylcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zaWduT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHdpdGhUeXBlOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdFeHRyaW5zaWNTaWduYXR1cmUnLCBbXSkgaW5zdGFuY2VvZiBFbnVtXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuaW5zcGVjdCh7IG1ldGhvZDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBibG9jayBbW0Jsb2NrSGFzaF1dIHRoZSBzaWduYXR1cmUgYXBwbGllcyB0byAobW9ydGFsL2ltbW9ydGFsKVxuICAgICAqL1xuICAgIGdldCBibG9ja0hhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2Jsb2NrSGFzaCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXh0cmluc2ljRXJhXV1cbiAgICAgKi9cbiAgICBnZXQgZXJhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdlcmEnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBnZW5lc2lzIFtbQmxvY2tIYXNoXV0gdGhlIHNpZ25hdHVyZSBhcHBsaWVzIHRvIChtb3J0YWwvaW1tb3J0YWwpXG4gICAgICovXG4gICAgZ2V0IGdlbmVzaXNIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdnZW5lc2lzSGFzaCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbQnl0ZXNdXSBjb250YWluZWQgaW4gdGhlIHBheWxvYWRcbiAgICAgKi9cbiAgICBnZXQgbWV0aG9kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRob2QnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0luZGV4XV1cbiAgICAgKi9cbiAgICBnZXQgbm9uY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ25vbmNlJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgc3BlY1ZlcnNpb24gZm9yIHRoaXMgc2lnbmF0dXJlXG4gICAgICovXG4gICAgZ2V0IHNwZWNWZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdzcGVjVmVyc2lvbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRpcCBbW0JhbGFuY2VdXVxuICAgICAqL1xuICAgIGdldCB0aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3RpcCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uVmVyc2lvbiBmb3IgdGhpcyBzaWduYXR1cmVcbiAgICAgKi9cbiAgICBnZXQgdHJhbnNhY3Rpb25WZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCd0cmFuc2FjdGlvblZlcnNpb24nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSAob3B0aW9uYWwpIGFzc2V0IGlkIGZvciB0aGlzIHNpZ25hdHVyZSBmb3IgY2hhaW5zIHRoYXQgc3VwcG9ydCB0cmFuc2FjdGlvbiBmZWVzIGluIGFzc2V0c1xuICAgICAqL1xuICAgIGdldCBhc3NldElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdhc3NldElkJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgKG9wdGlvbmFsKSBhc3NldCBpZCBmb3IgdGhpcyBzaWduYXR1cmUgZm9yIGNoYWlucyB0aGF0IHN1cHBvcnQgdHJhbnNhY3Rpb24gZmVlcyBpbiBhc3NldHNcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGFIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRhZGF0YUhhc2gnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ24gdGhlIHBheWxvYWQgd2l0aCB0aGUga2V5cGFpclxuICAgICAqL1xuICAgIHNpZ24oc2lnbmVyUGFpcikge1xuICAgICAgICAvLyBOT1RFIFRoZSBgdG9VOGEoeyBtZXRob2Q6IHRydWUgfSlgIGFyZ3VtZW50IGlzIGFic29sdXRlbHkgY3JpdGljYWwsIHdlXG4gICAgICAgIC8vIGRvbid0IHdhbnQgdGhlIG1ldGhvZCAoQnl0ZXMpIHRvIGhhdmUgdGhlIGxlbmd0aCBwcmVmaXggaW5jbHVkZWQuIFRoaXNcbiAgICAgICAgLy8gbWVhbnMgdGhhdCB0aGUgZGF0YS1hcy1zaWduZWQgaXMgdW4tZGVjb2RhYmxlLCBidXQgaXMgYWxzbyBkb2Vzbid0IG5lZWRcbiAgICAgICAgLy8gdGhlIGV4dHJhIGluZm9ybWF0aW9uLCBvbmx5IHRoZSBwdXJlIGRhdGEgKGFuZCBpcyBub3QgZGVjb2RlZCkgLi4uXG4gICAgICAgIC8vIFRoZSBzYW1lIGFwcGxpZXMgdG8gVjEuLlYzLCBpZiB3ZSBoYXZlIGEgVjUsIGNhcnJ5IHRoaXMgY29tbWVudFxuICAgICAgICByZXR1cm4gc2lnbih0aGlzLnJlZ2lzdHJ5LCBzaWduZXJQYWlyLCB0aGlzLnRvVThhKHsgbWV0aG9kOiB0cnVlIH0pLCB0aGlzLl9faW50ZXJuYWxfX3NpZ25PcHRpb25zKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdHJ1Y3QgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaXNVOGEsIGlzVW5kZWZpbmVkLCBvYmplY3RQcm9wZXJ0aWVzLCBvYmplY3RTcHJlYWQsIHN0cmluZ2lmeSwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBFTVBUWV9VOEEsIElNTU9SVEFMX0VSQSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBHZW5lcmljRXh0cmluc2ljUGF5bG9hZFY0IH0gZnJvbSAnLi9FeHRyaW5zaWNQYXlsb2FkLmpzJztcbmNvbnN0IEZBS0VfU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoMjU2KS5maWxsKDEpO1xuZnVuY3Rpb24gdG9BZGRyZXNzKHJlZ2lzdHJ5LCBhZGRyZXNzKSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FkZHJlc3MnLCBbaXNVOGEoYWRkcmVzcykgPyB1OGFUb0hleChhZGRyZXNzKSA6IGFkZHJlc3NdKTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1NpZ25hdHVyZVY0XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgY29udGFpbmVyIGZvciB0aGUgW1tTaWduYXR1cmVdXSBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBbW0V4dHJpbnNpY11dXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljRXh0cmluc2ljU2lnbmF0dXJlVjQgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9faW50ZXJuYWxfX3NpZ25LZXlzO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSwgeyBpc1NpZ25lZCB9ID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2lnblR5cGVzID0gcmVnaXN0cnkuZ2V0U2lnbmVkRXh0ZW5zaW9uVHlwZXMoKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIG9iamVjdFNwcmVhZChcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICB7IHNpZ25lcjogJ0FkZHJlc3MnLCBzaWduYXR1cmU6ICdFeHRyaW5zaWNTaWduYXR1cmUnIH0sIHNpZ25UeXBlcyksIEdlbmVyaWNFeHRyaW5zaWNTaWduYXR1cmVWNC5kZWNvZGVFeHRyaW5zaWNTaWduYXR1cmUodmFsdWUsIGlzU2lnbmVkKSk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc2lnbktleXMgPSBPYmplY3Qua2V5cyhzaWduVHlwZXMpO1xuICAgICAgICBvYmplY3RQcm9wZXJ0aWVzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fc2lnbktleXMsIChrKSA9PiB0aGlzLmdldChrKSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBzdGF0aWMgZGVjb2RlRXh0cmluc2ljU2lnbmF0dXJlKHZhbHVlLCBpc1NpZ25lZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9VOEE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBHZW5lcmljRXh0cmluc2ljU2lnbmF0dXJlVjQpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTaWduZWRcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogRU1QVFlfVThBO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NpZ25lZFxuICAgICAgICAgICAgPyBzdXBlci5lbmNvZGVkTGVuZ3RoXG4gICAgICAgICAgICA6IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBgdHJ1ZWAgaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZFxuICAgICAqL1xuICAgIGdldCBpc1NpZ25lZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNpZ25hdHVyZS5pc0VtcHR5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXh0cmluc2ljRXJhXV0gKG1vcnRhbCBvciBpbW1vcnRhbCkgdGhpcyBzaWduYXR1cmUgYXBwbGllcyB0b1xuICAgICAqL1xuICAgIGdldCBlcmEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2VyYScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbSW5kZXhdXSBmb3IgdGhlIHNpZ25hdHVyZVxuICAgICAqL1xuICAgIGdldCBub25jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnbm9uY2UnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhY3R1YWwgW1tFY2RzYVNpZ25hdHVyZV1dLCBbW0VkMjU1MTlTaWduYXR1cmVdXSBvciBbW1NyMjU1MTlTaWduYXR1cmVdXVxuICAgICAqL1xuICAgIGdldCBzaWduYXR1cmUoKSB7XG4gICAgICAgIC8vIHRoZSBzZWNvbmQgY2FzZSBoZXJlIGlzIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBlbnVtIHNpZ25hdHVyZSwgdHJlYXQgYXMgcmF3XG4gICAgICAgIHJldHVybiAodGhpcy5tdWx0aVNpZ25hdHVyZS52YWx1ZSB8fCB0aGlzLm11bHRpU2lnbmF0dXJlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSByYXcgW1tFeHRyaW5zaWNTaWduYXR1cmVdXVxuICAgICAqL1xuICAgIGdldCBtdWx0aVNpZ25hdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnc2lnbmF0dXJlJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgW1tBZGRyZXNzXV0gdGhhdCBzaWduZWRcbiAgICAgKi9cbiAgICBnZXQgc2lnbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdzaWduZXInKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0JhbGFuY2VdXSB0aXBcbiAgICAgKi9cbiAgICBnZXQgdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCd0aXAnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW3UzMl1dIG9yIFtbTXVsdGlMb2NhdGlvbl1dIGFzc2V0SWRcbiAgICAgKi9cbiAgICBnZXQgYXNzZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnYXNzZXRJZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbSGFzaF1dIGZvciB0aGUgbWV0YWRhdGFcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGFIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRhZGF0YUhhc2gnKTtcbiAgICB9XG4gICAgX2luamVjdFNpZ25hdHVyZShzaWduZXIsIHNpZ25hdHVyZSwgcGF5bG9hZCkge1xuICAgICAgICAvLyB1c2UgdGhlIGZpZWxkcyBleHBvc2VkIHRvIGd1aWRlIHRoZSBnZXR0ZXJzXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHRoaXMuX19pbnRlcm5hbF9fc2lnbktleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuX19pbnRlcm5hbF9fc2lnbktleXNbaV07XG4gICAgICAgICAgICBjb25zdCB2ID0gcGF5bG9hZC5nZXQoayk7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkaXRpb25hbCBmaWVsZHMgKGV4cG9zZWQgaW4gc3RydWN0IGl0c2VsZilcbiAgICAgICAgdGhpcy5zZXQoJ3NpZ25lcicsIHNpZ25lcik7XG4gICAgICAgIHRoaXMuc2V0KCdzaWduYXR1cmUnLCBzaWduYXR1cmUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFkZHMgYSByYXcgc2lnbmF0dXJlXG4gICAgICovXG4gICAgYWRkU2lnbmF0dXJlKHNpZ25lciwgc2lnbmF0dXJlLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RTaWduYXR1cmUodG9BZGRyZXNzKHRoaXMucmVnaXN0cnksIHNpZ25lciksIHRoaXMucmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnRXh0cmluc2ljU2lnbmF0dXJlJywgW3NpZ25hdHVyZV0pLCBuZXcgR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRWNCh0aGlzLnJlZ2lzdHJ5LCBwYXlsb2FkKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgcGF5bG9hZCBmcm9tIHRoZSBzdXBwbGllZCBvcHRpb25zXG4gICAgICovXG4gICAgY3JlYXRlUGF5bG9hZChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBlcmEsIHJ1bnRpbWVWZXJzaW9uOiB7IHNwZWNWZXJzaW9uLCB0cmFuc2FjdGlvblZlcnNpb24gfSB9ID0gb3B0aW9ucztcbiAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmljRXh0cmluc2ljUGF5bG9hZFY0KHRoaXMucmVnaXN0cnksIG9iamVjdFNwcmVhZCh7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgZXJhOiBlcmEgfHwgSU1NT1JUQUxfRVJBLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QudG9IZXgoKSxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlIGEgcGF5bG9hZCBhbmQgYXBwbGllcyB0aGUgc2lnbmF0dXJlIGZyb20gYSBrZXlwYWlyXG4gICAgICovXG4gICAgc2lnbihtZXRob2QsIGFjY291bnQsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFhY2NvdW50Py5hZGRyZXNzUmF3KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgdmFsaWQga2V5cGFpciBmb3Igc2lnbmluZywgZm91bmQgJHtzdHJpbmdpZnkoYWNjb3VudCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuY3JlYXRlUGF5bG9hZChtZXRob2QsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0U2lnbmF0dXJlKHRvQWRkcmVzcyh0aGlzLnJlZ2lzdHJ5LCBhY2NvdW50LmFkZHJlc3NSYXcpLCB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V4dHJpbnNpY1NpZ25hdHVyZScsIFtwYXlsb2FkLnNpZ24oYWNjb3VudCldKSwgcGF5bG9hZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZSBhIHBheWxvYWQgYW5kIGFwcGxpZXMgYSBmYWtlIHNpZ25hdHVyZVxuICAgICAqL1xuICAgIHNpZ25GYWtlKG1ldGhvZCwgYWRkcmVzcywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSB2YWxpZCBhZGRyZXNzIGZvciBzaWduaW5nLCBmb3VuZCAke3N0cmluZ2lmeShhZGRyZXNzKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jcmVhdGVQYXlsb2FkKG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RTaWduYXR1cmUodG9BZGRyZXNzKHRoaXMucmVnaXN0cnksIGFkZHJlc3MpLCB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V4dHJpbnNpY1NpZ25hdHVyZScsIFtGQUtFX1NJR05BVFVSRV0pLCBwYXlsb2FkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTaWduZWRcbiAgICAgICAgICAgID8gc3VwZXIudG9VOGEoaXNCYXJlKVxuICAgICAgICAgICAgOiBFTVBUWV9VOEE7XG4gICAgfVxufVxuIiwiZXhwb3J0IHsgR2VuZXJpY0V4dHJpbnNpY1Y0IH0gZnJvbSAnLi9FeHRyaW5zaWMuanMnO1xuZXhwb3J0IHsgR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRWNCB9IGZyb20gJy4vRXh0cmluc2ljUGF5bG9hZC5qcyc7XG5leHBvcnQgeyBHZW5lcmljRXh0cmluc2ljU2lnbmF0dXJlVjQgfSBmcm9tICcuL0V4dHJpbnNpY1NpZ25hdHVyZS5qcyc7XG4iLCJpbXBvcnQgeyBVOGFGaXhlZCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBoZXhUb1U4YSwgaXNIZXgsIGlzU3RyaW5nLCBpc1U4YSwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBkZWNvZGVBZGRyZXNzLCBlbmNvZGVBZGRyZXNzIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUFjY291bnRJZCh2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvVThhKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGhleFRvVThhKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVBZGRyZXNzKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBwYXNzZWQgdG8gQWNjb3VudElkIGNvbnN0cnVjdG9yLCBmb3VuZCB0eXBlb2YgJHt0eXBlb2YgdmFsdWV9YCk7XG59XG5jbGFzcyBCYXNlQWNjb3VudElkIGV4dGVuZHMgVThhRml4ZWQge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBhbGxvd2VkQml0cyA9IDI1NiB8IDI2NCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUFjY291bnRJZCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWRCaXRzID0gZGVjb2RlZC5sZW5ndGggKiA4O1xuICAgICAgICAvLyBQYXJ0IG9mIHN0cmVhbSBjb250YWluaW5nID49IDMyIGJ5dGVzIG9yIGEgYWxsIGVtcHR5IChkZWZhdWx0cylcbiAgICAgICAgaWYgKGRlY29kZWRCaXRzIDwgYWxsb3dlZEJpdHMgJiYgZGVjb2RlZC5zb21lKChiKSA9PiBiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEFjY291bnRJZCBwcm92aWRlZCwgZXhwZWN0ZWQgJHthbGxvd2VkQml0cyA+PiAzfSBieXRlcywgZm91bmQgJHtkZWNvZGVkLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZGVjb2RlZCwgYWxsb3dlZEJpdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5lcShkZWNvZGVBY2NvdW50SWQob3RoZXIpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZUFkZHJlc3ModGhpcywgdGhpcy5yZWdpc3RyeS5jaGFpblNTNTgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdBY2NvdW50SWQnO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0FjY291bnRJZFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHdyYXBwZXIgYXJvdW5kIGFuIEFjY291bnRJZC9QdWJsaWNLZXkgcmVwcmVzZW50YXRpb24uIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGhcbiAqIHVuZGVybHlpbmcgUHVibGljS2V5cyAoMzIgYnl0ZXMgaW4gbGVuZ3RoKSwgd2UgZXh0ZW5kIGZyb20gVThhRml4ZWQgd2hpY2ggaXNcbiAqIGp1c3QgYSBVaW50OEFycmF5IHdyYXBwZXIgd2l0aCBhIGZpeGVkIGxlbmd0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNBY2NvdW50SWQgZXh0ZW5kcyBCYXNlQWNjb3VudElkIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIDI1NiwgdmFsdWUpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHZW5lcmljQWNjb3VudElkMzMgZXh0ZW5kcyBCYXNlQWNjb3VudElkIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIDI2NCwgdmFsdWUpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IHUzMiB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBCTiwgYm5Ub0JuLCBpc0JpZ0ludCwgaXNCbiwgaXNIZXgsIGlzTnVtYmVyLCBpc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MsIGVuY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuY29uc3QgUFJFRklYXzFCWVRFID0gMHhlZjtcbmNvbnN0IFBSRUZJWF8yQllURSA9IDB4ZmM7XG5jb25zdCBQUkVGSVhfNEJZVEUgPSAweGZkO1xuY29uc3QgUFJFRklYXzhCWVRFID0gMHhmZTtcbmNvbnN0IE1BWF8xQllURSA9IG5ldyBCTihQUkVGSVhfMUJZVEUpO1xuY29uc3QgTUFYXzJCWVRFID0gbmV3IEJOKDEpLnNobG4oMTYpO1xuY29uc3QgTUFYXzRCWVRFID0gbmV3IEJOKDEpLnNobG4oMzIpO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlQWNjb3VudEluZGV4KHZhbHVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNBY2NvdW50SW5kZXgpIHtcbiAgICAgICAgLy8gYHZhbHVlLnRvQm4oKWAgb24gQWNjb3VudEluZGV4IHJldHVybnMgYSBwdXJlIEJOIChpLmUuIG5vdCBhblxuICAgICAgICAvLyBBY2NvdW50SW5kZXgpLCB3aGljaCBoYXMgdGhlIGluaXRpYWwgYHRvU3RyaW5nKClgIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXR1cm4gdmFsdWUudG9CbigpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0JuKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkgfHwgaXNIZXgodmFsdWUpIHx8IGlzVThhKHZhbHVlKSB8fCBpc0JpZ0ludCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGVjb2RlQWNjb3VudEluZGV4KGRlY29kZUFkZHJlc3ModmFsdWUpKTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0FjY291bnRJbmRleFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHdyYXBwZXIgYXJvdW5kIGFuIEFjY291bnRJbmRleCwgd2hpY2ggaXMgYSBzaG9ydGVuZWQsIHZhcmlhYmxlLWxlbmd0aCBlbmNvZGluZ1xuICogZm9yIGFuIEFjY291bnQuIFdlIGV4dGVuZHMgZnJvbSBbW1UzMl1dIHRvIHByb3ZpZGUgdGhlIG51bWJlci1saWtlIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljQWNjb3VudEluZGV4IGV4dGVuZHMgdTMyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUgPSBuZXcgQk4oMCkpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGRlY29kZUFjY291bnRJbmRleCh2YWx1ZSkpO1xuICAgIH1cbiAgICBzdGF0aWMgY2FsY0xlbmd0aChfdmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBiblRvQm4oX3ZhbHVlKTtcbiAgICAgICAgaWYgKHZhbHVlLmx0ZShNQVhfMUJZVEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sdChNQVhfMkJZVEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sdChNQVhfNEJZVEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gODtcbiAgICB9XG4gICAgc3RhdGljIHJlYWRMZW5ndGgoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBpbnB1dFswXTtcbiAgICAgICAgaWYgKGZpcnN0ID09PSBQUkVGSVhfMkJZVEUpIHtcbiAgICAgICAgICAgIHJldHVybiBbMSwgMl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmlyc3QgPT09IFBSRUZJWF80QllURSkge1xuICAgICAgICAgICAgcmV0dXJuIFsxLCA0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaXJzdCA9PT0gUFJFRklYXzhCWVRFKSB7XG4gICAgICAgICAgICByZXR1cm4gWzEsIDhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbMCwgMV07XG4gICAgfVxuICAgIHN0YXRpYyB3cml0ZUxlbmd0aChpbnB1dCkge1xuICAgICAgICBzd2l0Y2ggKGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW1BSRUZJWF8yQllURV0pO1xuICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW1BSRUZJWF80QllURV0pO1xuICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW1BSRUZJWF84QllURV0pO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG5ldyBVaW50OEFycmF5KFtdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIC8vIHNob3J0Y3V0IGZvciBCTiBvciBOdW1iZXIsIGRvbid0IGNyZWF0ZSBhbiBvYmplY3RcbiAgICAgICAgaWYgKGlzQm4ob3RoZXIpIHx8IGlzTnVtYmVyKG90aGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmVxKG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb252ZXJ0IGFuZCBjb21wYXJlXG4gICAgICAgIHJldHVybiBzdXBlci5lcSh0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFtvdGhlcl0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gR2VuZXJpY0FjY291bnRJbmRleC5jYWxjTGVuZ3RoKHRoaXMpO1xuICAgICAgICByZXR1cm4gZW5jb2RlQWRkcmVzcyh0aGlzLnRvVThhKCkuc3ViYXJyYXkoMCwgbGVuZ3RoKSwgdGhpcy5yZWdpc3RyeS5jaGFpblNTNTgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdBY2NvdW50SW5kZXgnO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN0cnVjdCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNCbG9ja1xuICogQGRlc2NyaXB0aW9uXG4gKiBBIGJsb2NrIGVuY29kZWQgd2l0aCBoZWFkZXIgYW5kIGV4dHJpbnNpY3NcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNCbG9jayBleHRlbmRzIFN0cnVjdCB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBoZWFkZXI6ICdIZWFkZXInLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICAgICAgZXh0cmluc2ljczogJ1ZlYzxFeHRyaW5zaWM+J1xuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIGEgY29udGVudCBbW0hhc2hdXSBmb3IgdGhlIGJsb2NrXG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgW1tFeHRyaW5zaWNdXSBjb250YWluZWQgaW4gdGhlIGJsb2NrXG4gICAgICovXG4gICAgZ2V0IGV4dHJpbnNpY3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2V4dHJpbnNpY3MnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEJsb2NrL2hlYWRlciBbW0hhc2hdXVxuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXIuaGFzaDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0hlYWRlcl1dIG9mIHRoZSBibG9ja1xuICAgICAqL1xuICAgIGdldCBoZWFkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2hlYWRlcicpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN0cnVjdCwgVThhRml4ZWQgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaXNIZXgsIGlzT2JqZWN0LCBpc1U4YSwgb2JqZWN0U3ByZWFkLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKlxuICogR2V0IGEgbWFwcGluZyBvZiBgYXJndW1lbnQgbmFtZSAtPiBhcmd1bWVudCB0eXBlYCBmb3IgdGhlIGZ1bmN0aW9uLCBmcm9tXG4gKiBpdHMgbWV0YWRhdGEuXG4gKlxuICogQHBhcmFtIG1ldGEgLSBUaGUgZnVuY3Rpb24gbWV0YWRhdGEgdXNlZCB0byBnZXQgdGhlIGRlZmluaXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0QXJnc0RlZihyZWdpc3RyeSwgbWV0YSkge1xuICAgIHJldHVybiBtZXRhLmZpZWxkcy5yZWR1Y2UoKHJlc3VsdCwgeyBuYW1lLCB0eXBlIH0sIGluZGV4KSA9PiB7XG4gICAgICAgIHJlc3VsdFtuYW1lLnVud3JhcE9yKGBwYXJhbSR7aW5kZXh9YCkudG9TdHJpbmcoKV0gPSByZWdpc3RyeS5jcmVhdGVMb29rdXBUeXBlKHR5cGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUNhbGxWaWFPYmplY3QocmVnaXN0cnksIHZhbHVlLCBfbWV0YSkge1xuICAgIC8vIHdlIG9ubHkgcGFzcyBhcmdzL21ldGhvZHNJbmRleCBvdXRcbiAgICBjb25zdCB7IGFyZ3MsIGNhbGxJbmRleCB9ID0gdmFsdWU7XG4gICAgLy8gR2V0IHRoZSBjb3JyZWN0IGxvb2t1cEluZGV4XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGNvbnN0IGxvb2t1cEluZGV4ID0gY2FsbEluZGV4IGluc3RhbmNlb2YgR2VuZXJpY0NhbGxJbmRleFxuICAgICAgICA/IGNhbGxJbmRleC50b1U4YSgpXG4gICAgICAgIDogY2FsbEluZGV4O1xuICAgIC8vIEZpbmQgbWV0YWRhdGEgd2l0aCBjYWxsSW5kZXhcbiAgICBjb25zdCBtZXRhID0gX21ldGEgfHwgcmVnaXN0cnkuZmluZE1ldGFDYWxsKGxvb2t1cEluZGV4KS5tZXRhO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIGFyZ3NEZWY6IGdldEFyZ3NEZWYocmVnaXN0cnksIG1ldGEpLFxuICAgICAgICBjYWxsSW5kZXgsXG4gICAgICAgIG1ldGFcbiAgICB9O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlQ2FsbFZpYVU4YShyZWdpc3RyeSwgdmFsdWUsIF9tZXRhKSB7XG4gICAgLy8gV2UgbmVlZCAyIGJ5dGVzIGZvciB0aGUgY2FsbEluZGV4XG4gICAgY29uc3QgY2FsbEluZGV4ID0gcmVnaXN0cnkuZmlyc3RDYWxsSW5kZXguc2xpY2UoKTtcbiAgICBjYWxsSW5kZXguc2V0KHZhbHVlLnN1YmFycmF5KDAsIDIpLCAwKTtcbiAgICAvLyBGaW5kIG1ldGFkYXRhIHdpdGggY2FsbEluZGV4XG4gICAgY29uc3QgbWV0YSA9IF9tZXRhIHx8IHJlZ2lzdHJ5LmZpbmRNZXRhQ2FsbChjYWxsSW5kZXgpLm1ldGE7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogdmFsdWUuc3ViYXJyYXkoMiksXG4gICAgICAgIGFyZ3NEZWY6IGdldEFyZ3NEZWYocmVnaXN0cnksIG1ldGEpLFxuICAgICAgICBjYWxsSW5kZXgsXG4gICAgICAgIG1ldGFcbiAgICB9O1xufVxuLyoqXG4gKiBEZWNvZGUgaW5wdXQgdG8gcGFzcyBpbnRvIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGRlY29kZSwgb25lIG9mOlxuICogLSBoZXhcbiAqIC0gVWludDhBcnJheVxuICogLSB7QHNlZSBEZWNvZGVNZXRob2RJbnB1dH1cbiAqIEBwYXJhbSBfbWV0YSAtIE1ldGFkYXRhIHRvIHVzZSwgc28gdGhhdCBgaW5qZWN0TWV0aG9kc2AgbG9va3VwIGlzIG5vdFxuICogbmVjZXNzYXJ5LlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUNhbGwocmVnaXN0cnksIHZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoKSwgX21ldGEpIHtcbiAgICBpZiAoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlQ2FsbFZpYVU4YShyZWdpc3RyeSwgdThhVG9VOGEodmFsdWUpLCBfbWV0YSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5jYWxsSW5kZXggJiYgdmFsdWUuYXJncykge1xuICAgICAgICByZXR1cm4gZGVjb2RlQ2FsbFZpYU9iamVjdChyZWdpc3RyeSwgdmFsdWUsIF9tZXRhKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYWxsOiBDYW5ub3QgZGVjb2RlIHZhbHVlICcke3ZhbHVlfScgb2YgdHlwZSAke3R5cGVvZiB2YWx1ZX1gKTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0NhbGxJbmRleFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHdyYXBwZXIgYXJvdW5kIHRoZSBgW3NlY3Rpb25JbmRleCwgbWV0aG9kSW5kZXhdYCB2YWx1ZSB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBtZXRob2RcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNDYWxsSW5kZXggZXh0ZW5kcyBVOGFGaXhlZCB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSwgMTYpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9IZXgoKTtcbiAgICB9XG59XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNDYWxsXG4gKiBAZGVzY3JpcHRpb25cbiAqIEV4dHJpbnNpYyBmdW5jdGlvbiBkZXNjcmlwdG9yXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljQ2FsbCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX21ldGE7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlLCBtZXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVDYWxsKHJlZ2lzdHJ5LCB2YWx1ZSwgbWV0YSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgICAgIGNhbGxJbmRleDogR2VuZXJpY0NhbGxJbmRleCxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgICAgICAgICAgYXJnczogU3RydWN0LndpdGgoZGVjb2RlZC5hcmdzRGVmKVxuICAgICAgICAgICAgfSwgZGVjb2RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsZXQgbWV0aG9kID0gJ3Vua25vd24udW5rbm93bic7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSByZWdpc3RyeS5maW5kTWV0YUNhbGwoZGVjb2RlZC5jYWxsSW5kZXgpO1xuICAgICAgICAgICAgICAgIG1ldGhvZCA9IGAke2Muc2VjdGlvbn0uJHtjLm1ldGhvZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYWxsOiBmYWlsZWQgZGVjb2RpbmcgJHttZXRob2R9OjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21ldGEgPSBkZWNvZGVkLm1ldGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYXJndW1lbnRzIGZvciB0aGUgZnVuY3Rpb24gY2FsbFxuICAgICAqL1xuICAgIGdldCBhcmdzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZ2V0VCgnYXJncycpLnZhbHVlcygpXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhcmd1bWVudCBkZWZpbml0aW9uc1xuICAgICAqL1xuICAgIGdldCBhcmdzRGVmKCkge1xuICAgICAgICByZXR1cm4gZ2V0QXJnc0RlZih0aGlzLnJlZ2lzdHJ5LCB0aGlzLm1ldGEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFyZ3VtZW50IGVudHJpZXNcbiAgICAgKi9cbiAgICBnZXQgYXJnc0VudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5nZXRUKCdhcmdzJykuZW50cmllcygpXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBlbmNvZGVkIGBbc2VjdGlvbkluZGV4LCBtZXRob2RJbmRleF1gIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICBnZXQgY2FsbEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdjYWxsSW5kZXgnKS50b1U4YSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVuY29kZWQgZGF0YVxuICAgICAqL1xuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdhcmdzJykudG9VOGEoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0Z1bmN0aW9uTWV0YWRhdGFdXVxuICAgICAqL1xuICAgIGdldCBtZXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZFxuICAgICAqL1xuICAgIGdldCBtZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmZpbmRNZXRhQ2FsbCh0aGlzLmNhbGxJbmRleCkubWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIG1ldGhvZFxuICAgICAqL1xuICAgIGdldCBzZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5maW5kTWV0YUNhbGwodGhpcy5jYWxsSW5kZXgpLnNlY3Rpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHNvdXJjZSBtYXRjaGVzIHRoaXMgaW4gdHlwZVxuICAgICAqL1xuICAgIGlzKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBvdGhlci5jYWxsSW5kZXhbMF0gPT09IHRoaXMuY2FsbEluZGV4WzBdICYmIG90aGVyLmNhbGxJbmRleFsxXSA9PT0gdGhpcy5jYWxsSW5kZXhbMV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgbGV0IGNhbGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsID0gdGhpcy5yZWdpc3RyeS5maW5kTWV0YUNhbGwodGhpcy5jYWxsSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIHN3YWxsb3dcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGFyZ3M6IHRoaXMuYXJnc0VudHJpZXMucmVkdWNlKChhcmdzLCBbbiwgYV0pID0+IG9iamVjdFNwcmVhZChhcmdzLCB7IFtuXTogYS50b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSkgfSksIHt9KSxcbiAgICAgICAgICAgIG1ldGhvZDogY2FsbD8ubWV0aG9kLFxuICAgICAgICAgICAgc2VjdGlvbjogY2FsbD8uc2VjdGlvblxuICAgICAgICB9LCBpc0V4cGFuZGVkICYmIGNhbGxcbiAgICAgICAgICAgID8geyBkb2NzOiBjYWxsLm1ldGEuZG9jcy5tYXAoKGQpID0+IGQudG9TdHJpbmcoKSkgfVxuICAgICAgICAgICAgOiBudWxsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnQ2FsbCc7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSnNvbiB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc051bGwsIGlzVW5kZWZpbmVkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gY3JlYXRlVmFsdWUocmVnaXN0cnksIHR5cGUsIHZhbHVlLCBhc0FycmF5ID0gdHJ1ZSkge1xuICAgIC8vIFdlIGRldGVjdCBjb2RlYyBoZXJlIGFzIHdlbGwgLSB3aGVuIGZvdW5kLCBnZW5lcmFsbHkgdGhpcyBpcyBjb25zdHJ1Y3RlZCBmcm9tIGl0c2VsZlxuICAgIGlmICh2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVud3JhcE9yRGVmYXVsdCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSh0eXBlLCBbXG4gICAgICAgIGFzQXJyYXlcbiAgICAgICAgICAgID8gaXNOdWxsKHZhbHVlKSB8fCBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBbdmFsdWVdXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgXSk7XG59XG5mdW5jdGlvbiBkZWNvZGVWYWx1ZShyZWdpc3RyeSwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBrZXkgPT09ICdzczU4Rm9ybWF0J1xuICAgICAgICA/IGNyZWF0ZVZhbHVlKHJlZ2lzdHJ5LCAnT3B0aW9uPHUzMj4nLCB2YWx1ZSwgZmFsc2UpXG4gICAgICAgIDoga2V5ID09PSAndG9rZW5EZWNpbWFscydcbiAgICAgICAgICAgID8gY3JlYXRlVmFsdWUocmVnaXN0cnksICdPcHRpb248VmVjPHUzMj4+JywgdmFsdWUpXG4gICAgICAgICAgICA6IGtleSA9PT0gJ3Rva2VuU3ltYm9sJ1xuICAgICAgICAgICAgICAgID8gY3JlYXRlVmFsdWUocmVnaXN0cnksICdPcHRpb248VmVjPFRleHQ+PicsIHZhbHVlKVxuICAgICAgICAgICAgICAgIDoga2V5ID09PSAnaXNFdGhlcmV1bSdcbiAgICAgICAgICAgICAgICAgICAgPyBjcmVhdGVWYWx1ZShyZWdpc3RyeSwgJ0Jvb2wnLCB2YWx1ZSwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWU7XG59XG5mdW5jdGlvbiBkZWNvZGUocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAvLyBhbGxvdyBkZWNvZGluZyBmcm9tIGEgbWFwIGFzIHdlbGwgKG91cnNlbHZlcylcbiAgICB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVudHJpZXMpXG4gICAgICAgID8gWy4uLnZhbHVlLmVudHJpZXMoKV1cbiAgICAgICAgOiBPYmplY3QuZW50cmllcyh2YWx1ZSB8fCB7fSkpLnJlZHVjZSgoYWxsLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWxsW2tleV0gPSBkZWNvZGVWYWx1ZShyZWdpc3RyeSwga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBhbGw7XG4gICAgfSwge1xuICAgICAgICBpc0V0aGVyZXVtOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdCb29sJywgW10pLFxuICAgICAgICBzczU4Rm9ybWF0OiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdPcHRpb248dTMyPicsIFtdKSxcbiAgICAgICAgdG9rZW5EZWNpbWFsczogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnT3B0aW9uPFZlYzx1MzI+PicsIFtdKSxcbiAgICAgICAgdG9rZW5TeW1ib2w6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ09wdGlvbjxWZWM8VGV4dD4+JywgW10pXG4gICAgfSk7XG59XG5leHBvcnQgY2xhc3MgR2VuZXJpY0NoYWluUHJvcGVydGllcyBleHRlbmRzIEpzb24ge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZGVjb2RlKHJlZ2lzdHJ5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGNoYWluIHVzZXMgRXRoZXJldW0gYWRkcmVzc2VzXG4gICAgICovXG4gICAgZ2V0IGlzRXRoZXJldW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2lzRXRoZXJldW0nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBjaGFpbiBzczU4Rm9ybWF0XG4gICAgICovXG4gICAgZ2V0IHNzNThGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3NzNThGb3JtYXQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBkZWNpbWFscyBmb3IgZWFjaCBvZiB0aGUgdG9rZW5zXG4gICAgICovXG4gICAgZ2V0IHRva2VuRGVjaW1hbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3Rva2VuRGVjaW1hbHMnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBzeW1ib2xzIGZvciB0aGUgdG9rZW5zXG4gICAgICovXG4gICAgZ2V0IHRva2VuU3ltYm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCd0b2tlblN5bWJvbCcpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFU4YUZpeGVkIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IEJOLCBiblRvVThhLCBpc051bWJlciwgc3RyaW5nVG9VOGEsIHU4YVRvSGV4LCB1OGFUb1N0cmluZyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBjb25zdCBDSURfQVVSQSA9IC8qI19fUFVSRV9fKi8gc3RyaW5nVG9VOGEoJ2F1cmEnKTtcbmV4cG9ydCBjb25zdCBDSURfQkFCRSA9IC8qI19fUFVSRV9fKi8gc3RyaW5nVG9VOGEoJ0JBQkUnKTtcbmV4cG9ydCBjb25zdCBDSURfR1JQQSA9IC8qI19fUFVSRV9fKi8gc3RyaW5nVG9VOGEoJ0ZSTksnKTtcbmV4cG9ydCBjb25zdCBDSURfUE9XID0gLyojX19QVVJFX18qLyBzdHJpbmdUb1U4YSgncG93XycpO1xuZXhwb3J0IGNvbnN0IENJRF9OTUJTID0gLyojX19QVVJFX18qLyBzdHJpbmdUb1U4YSgnbm1icycpO1xuZnVuY3Rpb24gZ2V0QXVyYUF1dGhvcihyZWdpc3RyeSwgYnl0ZXMsIHNlc3Npb25WYWxpZGF0b3JzKSB7XG4gICAgcmV0dXJuIHNlc3Npb25WYWxpZGF0b3JzW3JlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1Jhd0F1cmFQcmVEaWdlc3QnLCBbYnl0ZXMudG9VOGEodHJ1ZSldKVxuICAgICAgICAuc2xvdE51bWJlclxuICAgICAgICAubW9kKG5ldyBCTihzZXNzaW9uVmFsaWRhdG9ycy5sZW5ndGgpKVxuICAgICAgICAudG9OdW1iZXIoKV07XG59XG5mdW5jdGlvbiBnZXRCYWJlQXV0aG9yKHJlZ2lzdHJ5LCBieXRlcywgc2Vzc2lvblZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCBkaWdlc3QgPSByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdSYXdCYWJlUHJlRGlnZXN0Q29tcGF0JywgW2J5dGVzLnRvVThhKHRydWUpXSk7XG4gICAgcmV0dXJuIHNlc3Npb25WYWxpZGF0b3JzW2RpZ2VzdC52YWx1ZS50b051bWJlcigpXTtcbn1cbmZ1bmN0aW9uIGdldEJ5dGVzQXNBdXRob3IocmVnaXN0cnksIGJ5dGVzKSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJZCcsIFtieXRlc10pO1xufVxuLyoqXG4gKiBAbmFtZSBHZW5lcmljQ29uc2Vuc3VzRW5naW5lSWRcbiAqIEBkZXNjcmlwdGlvblxuICogQSA0LWJ5dGUgaWRlbnRpZmllciBpZGVudGlmeWluZyB0aGUgZW5naW5lXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljQ29uc2Vuc3VzRW5naW5lSWQgZXh0ZW5kcyBVOGFGaXhlZCB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBpc051bWJlcih2YWx1ZSlcbiAgICAgICAgICAgID8gYm5Ub1U4YSh2YWx1ZSwgeyBpc0xlOiBmYWxzZSB9KVxuICAgICAgICAgICAgOiB2YWx1ZSwgMzIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlmIHRoZSBlbmdpbmUgbWF0Y2hlcyBhdXJhXG4gICAgICovXG4gICAgZ2V0IGlzQXVyYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoQ0lEX0FVUkEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlzIHRoZSBlbmdpbmUgbWF0Y2hlcyBiYWJlXG4gICAgICovXG4gICAgZ2V0IGlzQmFiZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoQ0lEX0JBQkUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlzIHRoZSBlbmdpbmUgbWF0Y2hlcyBncmFuZHBhXG4gICAgICovXG4gICAgZ2V0IGlzR3JhbmRwYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoQ0lEX0dSUEEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlzIHRoZSBlbmdpbmUgbWF0Y2hlcyBwb3dcbiAgICAgKi9cbiAgICBnZXQgaXNQb3coKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVxKENJRF9QT1cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlzIHRoZSBlbmdpbmUgbWF0Y2hlcyBuaW1idXNcbiAgICAgKi9cbiAgICBnZXQgaXNOaW1idXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVxKENJRF9OTUJTKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZyb20gdGhlIGlucHV0IGJ5dGVzLCBkZWNvZGUgaW50byBhbiBhdXRob3JcbiAgICAgKi9cbiAgICBleHRyYWN0QXV0aG9yKGJ5dGVzLCBzZXNzaW9uVmFsaWRhdG9ycykge1xuICAgICAgICBpZiAoc2Vzc2lvblZhbGlkYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBdXJhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEF1cmFBdXRob3IodGhpcy5yZWdpc3RyeSwgYnl0ZXMsIHNlc3Npb25WYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNCYWJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEJhYmVBdXRob3IodGhpcy5yZWdpc3RyeSwgYnl0ZXMsIHNlc3Npb25WYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgcG93ICYgTmltYnVzLCB0aGUgYnl0ZXMgYXJlIHRoZSBhY3R1YWwgYXV0aG9yXG4gICAgICAgIGlmICh0aGlzLmlzUG93IHx8IHRoaXMuaXNOaW1idXMpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRCeXRlc0FzQXV0aG9yKHRoaXMucmVnaXN0cnksIGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ0NvbnNlbnN1c0VuZ2luZUlkJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHRvU3RyaW5nIHRvIHJldHVybiBhIDQtYnl0ZSBzdHJpbmdcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBc2NpaVxuICAgICAgICAgICAgPyB1OGFUb1N0cmluZyh0aGlzKVxuICAgICAgICAgICAgOiB1OGFUb0hleCh0aGlzKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBOdWxsLCBTdHJ1Y3QsIFR1cGxlIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IG9iamVjdFByb3BlcnRpZXMsIG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUV2ZW50KHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGlmICghdmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4geyBEYXRhVHlwZTogTnVsbCB9O1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHZhbHVlLnN1YmFycmF5KDAsIDIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIERhdGFUeXBlOiByZWdpc3RyeS5maW5kTWV0YUV2ZW50KGluZGV4KSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlLnN1YmFycmF5KDIpLFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNFdmVudERhdGFcbiAqIEBkZXNjcmlwdGlvblxuICogV3JhcHBlciBmb3IgdGhlIGFjdHVhbCBkYXRhIHRoYXQgZm9ybXMgcGFydCBvZiBhbiBbW0V2ZW50XV1cbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNFdmVudERhdGEgZXh0ZW5kcyBUdXBsZSB7XG4gICAgX19pbnRlcm5hbF9fbWV0YTtcbiAgICBfX2ludGVybmFsX19tZXRob2Q7XG4gICAgX19pbnRlcm5hbF9fbmFtZXMgPSBudWxsO1xuICAgIF9faW50ZXJuYWxfX3NlY3Rpb247XG4gICAgX19pbnRlcm5hbF9fdHlwZURlZjtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIG1ldGEsIHNlY3Rpb24gPSAnPHVua25vd24+JywgbWV0aG9kID0gJzx1bmtub3duPicpIHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gbWV0YT8uZmllbGRzIHx8IFtdO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZmllbGRzLm1hcCgoeyB0eXBlIH0pID0+IHJlZ2lzdHJ5LmNyZWF0ZUxvb2t1cFR5cGUodHlwZSkpLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fbWV0YSA9IG1ldGE7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fbWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3NlY3Rpb24gPSBzZWN0aW9uO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWYgPSBmaWVsZHMubWFwKCh7IHR5cGUgfSkgPT4gcmVnaXN0cnkubG9va3VwLmdldFR5cGVEZWYodHlwZSkpO1xuICAgICAgICBjb25zdCBuYW1lcyA9IGZpZWxkc1xuICAgICAgICAgICAgLm1hcCgoeyBuYW1lIH0pID0+IHJlZ2lzdHJ5Lmxvb2t1cC5zYW5pdGl6ZUZpZWxkKG5hbWUpWzBdKVxuICAgICAgICAgICAgLmZpbHRlcigobikgPT4gISFuKTtcbiAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19uYW1lcyA9IG5hbWVzO1xuICAgICAgICAgICAgb2JqZWN0UHJvcGVydGllcyh0aGlzLCBuYW1lcywgKF8sIGkpID0+IHRoaXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgd3JhcHBlZCBbW0V2ZW50TWV0YWRhdGFdXVxuICAgICAqL1xuICAgIGdldCBtZXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19tZXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIG1ldGhvZCBhcyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGdldCBtZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX21ldGhvZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBmaWVsZCBuYW1lcyAoYXMgYXZhaWxhYmxlKVxuICAgICAqL1xuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fbmFtZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VjdGlvbiBhcyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGdldCBzZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19zZWN0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbVHlwZURlZl1dIGZvciB0aGlzIGV2ZW50XG4gICAgICovXG4gICAgZ2V0IHR5cGVEZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fbmFtZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHRoaXMuX19pbnRlcm5hbF9fbmFtZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGpzb25bdGhpcy5fX2ludGVybmFsX19uYW1lc1tpXV0gPSB0aGlzW2ldLnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci50b0h1bWFuKGlzRXh0ZW5kZWQpO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V2ZW50XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBzeXN0ZW0gZXZlbnQuIFRoZXNlIGFyZSBnZW5lcmF0ZWQgdmlhIHRoZSBbW01ldGFkYXRhXV0gaW50ZXJmYWNlcyBhbmRcbiAqIHNwZWNpZmljIHRvIGEgc3BlY2lmaWMgU3Vic3RyYXRlIHJ1bnRpbWVcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNFdmVudCBleHRlbmRzIFN0cnVjdCB7XG4gICAgLy8gQ3VycmVudGx5IHdlIF9vbmx5XyBkZWNvZGUgZnJvbSBVaW50OEFycmF5LCBzaW5jZSB3ZSBleHBlY3QgaXQgdG9cbiAgICAvLyBiZSB1c2VkIHZpYSBFdmVudFJlY29yZFxuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBfdmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBEYXRhVHlwZSwgdmFsdWUgfSA9IGRlY29kZUV2ZW50KHJlZ2lzdHJ5LCBfdmFsdWUpO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgaW5kZXg6ICdFdmVudElkJyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb3J0LWtleXNcbiAgICAgICAgICAgIGRhdGE6IERhdGFUeXBlXG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB3cmFwcGVkIFtbRXZlbnREYXRhXV1cbiAgICAgKi9cbiAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnZGF0YScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXZlbnRJZF1dLCBpZGVudGlmeWluZyB0aGUgcmF3IGV2ZW50XG4gICAgICovXG4gICAgZ2V0IGluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdpbmRleCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXZlbnRNZXRhZGF0YV1dIHdpdGggdGhlIGRvY3VtZW50YXRpb25cbiAgICAgKi9cbiAgICBnZXQgbWV0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tZXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIG1ldGhvZCBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGV2ZW50XG4gICAgICovXG4gICAgZ2V0IG1ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tZXRob2Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VjdGlvbiBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGV2ZW50XG4gICAgICovXG4gICAgZ2V0IHNlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2VjdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW1R5cGVEZWZdXSBmb3IgdGhlIGV2ZW50XG4gICAgICovXG4gICAgZ2V0IHR5cGVEZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEudHlwZURlZjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICBzZWN0aW9uOiB0aGlzLnNlY3Rpb25cbiAgICAgICAgfSwgaXNFeHBhbmRlZFxuICAgICAgICAgICAgPyB7IGRvY3M6IHRoaXMubWV0YS5kb2NzLm1hcCgoZCkgPT4gZC50b1N0cmluZygpKSB9XG4gICAgICAgICAgICA6IG51bGwsIHN1cGVyLnRvSHVtYW4oaXNFeHBhbmRlZCwgZGlzYWJsZUFzY2lpKSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQWJzdHJhY3RCYXNlIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzQmlnSW50LCBpc0JuLCBpc0hleCwgaXNOdW1iZXIsIGlzVThhLCB1OGFDb25jYXQsIHU4YVRvQm4sIHU4YVRvSGV4LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgR2VuZXJpY0FjY291bnRJZCB9IGZyb20gJy4vQWNjb3VudElkLmpzJztcbmltcG9ydCB7IEdlbmVyaWNBY2NvdW50SW5kZXggfSBmcm9tICcuL0FjY291bnRJbmRleC5qcyc7XG5leHBvcnQgY29uc3QgQUNDT1VOVF9JRF9QUkVGSVggPSBuZXcgVWludDhBcnJheShbMHhmZl0pO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVBZGRyZXNzKHZhbHVlKTtcbiAgICByZXR1cm4gZGVjb2RlZC5sZW5ndGggPT09IDMyXG4gICAgICAgID8gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnQWNjb3VudElkJywgW2RlY29kZWRdKVxuICAgICAgICA6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFt1OGFUb0JuKGRlY29kZWQpXSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVVOGEocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gaW5zdGFudGlhdGUgYW4gYWRkcmVzcyB3aXRoIGEgcmF3IHB1YmxpY0tleS4gRG8gdGhpcyBmaXJzdCBiZWZvcmVcbiAgICAvLyB3ZSBjaGVja2luZyB0aGUgZmlyc3QgYnl0ZSwgb3RoZXJ3aXNlIHdlIG1heSBzcGxpdCBhbiBhbHJlYWR5LWV4aXN0ZW50IHZhbGlkIGFkZHJlc3NcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAzMikge1xuICAgICAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnQWNjb3VudElkJywgW3ZhbHVlXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlWzBdID09PSAweGZmKSB7XG4gICAgICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdBY2NvdW50SWQnLCBbdmFsdWUuc3ViYXJyYXkoMSldKTtcbiAgICB9XG4gICAgY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IEdlbmVyaWNBY2NvdW50SW5kZXgucmVhZExlbmd0aCh2YWx1ZSk7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFt1OGFUb0JuKHZhbHVlLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSldKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUFkZHJlc3NPckluZGV4KHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNMb29rdXBTb3VyY2VcbiAgICAgICAgPyB2YWx1ZS5pbm5lclxuICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0FjY291bnRJZCB8fCB2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNBY2NvdW50SW5kZXhcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogaXNCbih2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpIHx8IGlzQmlnSW50KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnQWNjb3VudEluZGV4JywgW3ZhbHVlXSlcbiAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSB8fCBpc1U4YSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyBkZWNvZGVVOGEocmVnaXN0cnksIHU4YVRvVThhKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgOiBkZWNvZGVTdHJpbmcocmVnaXN0cnksIHZhbHVlKTtcbn1cbi8qKlxuICogQG5hbWUgTG9va3VwU291cmNlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgd3JhcHBlciBhcm91bmQgYW4gQWNjb3VudElkIGFuZC9vciBBY2NvdW50SW5kZXggdGhhdCBpcyBlbmNvZGVkIHdpdGggYSBwcmVmaXguXG4gKiBTaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIHVuZGVybHlpbmcgcHVibGljS2V5cyAob3Igc2hvcnRlciBlbmNvZGVkIGFkZHJlc3NlcyksXG4gKiB3ZSBleHRlbmQgZnJvbSBCYXNlIHdpdGggYW4gQWNjb3VudElkL0FjY291bnRJbmRleCB3cmFwcGVyLiBCYXNpY2FsbHkgdGhlIEFkZHJlc3NcbiAqIGlzIGVuY29kZWQgYXMgYFsgPHByZWZpeC1ieXRlPiwgLi4ucHVibGljS2V5Ly4uLmJ5dGVzIF1gIGFzIHBlciBzcGVjXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljTG9va3VwU291cmNlIGV4dGVuZHMgQWJzdHJhY3RCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUgPSBuZXcgVWludDhBcnJheSgpKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBkZWNvZGVBZGRyZXNzT3JJbmRleChyZWdpc3RyeSwgdmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgY29uc3QgcmF3TGVuZ3RoID0gdGhpcy5fcmF3TGVuZ3RoO1xuICAgICAgICByZXR1cm4gcmF3TGVuZ3RoICsgKFxuICAgICAgICAvLyBmb3IgMSBieXRlIEFjY291bnRJbmRleGVzLCB3ZSBhcmUgbm90IGFkZGluZyBhIHNwZWNpZmljIHByZWZpeFxuICAgICAgICByYXdMZW5ndGggPiAxXG4gICAgICAgICAgICA/IDFcbiAgICAgICAgICAgIDogMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSByYXcgdmFsdWUsIGVpdGhlciBBY2NvdW50SW5kZXggb3IgQWNjb3VudElkXG4gICAgICovXG4gICAgZ2V0IF9yYXdMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyIGluc3RhbmNlb2YgR2VuZXJpY0FjY291bnRJbmRleFxuICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LmNhbGNMZW5ndGgodGhpcy5pbm5lcilcbiAgICAgICAgICAgIDogdGhpcy5pbm5lci5lbmNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmlubmVyLnRvVThhKCkuc3ViYXJyYXkoMCwgdGhpcy5fcmF3TGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGVyOiBbXG4gICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkodGhpcy5pbm5lciBpbnN0YW5jZW9mIEdlbmVyaWNBY2NvdW50SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LndyaXRlTGVuZ3RoKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IEFDQ09VTlRfSURfUFJFRklYKSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdBZGRyZXNzJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IHRoaXMuaW5uZXIudG9VOGEoKS5zdWJhcnJheSgwLCB0aGlzLl9yYXdMZW5ndGgpO1xuICAgICAgICByZXR1cm4gaXNCYXJlXG4gICAgICAgICAgICA/IGVuY29kZWRcbiAgICAgICAgICAgIDogdThhQ29uY2F0KHRoaXMuaW5uZXIgaW5zdGFuY2VvZiBHZW5lcmljQWNjb3VudEluZGV4XG4gICAgICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LndyaXRlTGVuZ3RoKGVuY29kZWQpXG4gICAgICAgICAgICAgICAgOiBBQ0NPVU5UX0lEX1BSRUZJWCwgZW5jb2RlZCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRW51bSB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBpc0JuLCBpc051bWJlciwgaXNTdHJpbmcsIGlzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5pbXBvcnQgeyBHZW5lcmljQWNjb3VudElkIH0gZnJvbSAnLi9BY2NvdW50SWQuanMnO1xuaW1wb3J0IHsgR2VuZXJpY0FjY291bnRJbmRleCB9IGZyb20gJy4vQWNjb3VudEluZGV4LmpzJztcbmZ1bmN0aW9uIGRlY29kZVU4YShyZWdpc3RyeSwgdThhKSB7XG4gICAgaWYgKFswLCAzMl0uaW5jbHVkZXModThhLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIHsgSWQ6IHU4YSB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh1OGEubGVuZ3RoID09PSAyMCkge1xuICAgICAgICByZXR1cm4geyBBZGRyZXNzMjA6IHU4YSB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh1OGEubGVuZ3RoIDw9IDgpIHtcbiAgICAgICAgcmV0dXJuIHsgSW5kZXg6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFt1OGFdKS50b051bWJlcigpIH07XG4gICAgfVxuICAgIHJldHVybiB1OGE7XG59XG5mdW5jdGlvbiBkZWNvZGVNdWx0aUFueShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBHZW5lcmljQWNjb3VudElkKSB7XG4gICAgICAgIHJldHVybiB7IElkOiB2YWx1ZSB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gTk9URSBUaGlzIGlzIGFmdGVyIHRoZSBBY2NvdW50SWQgY2hlY2sgKHdoaWNoIGlzIFU4YSlcbiAgICAgICAgcmV0dXJuIGRlY29kZVU4YShyZWdpc3RyeSwgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNNdWx0aUFkZHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNBY2NvdW50SW5kZXggfHwgaXNCbih2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IEluZGV4OiBpc051bWJlcih2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlLnRvTnVtYmVyKCkgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVOGEocmVnaXN0cnksIGRlY29kZUFkZHJlc3ModmFsdWUudG9TdHJpbmcoKSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgY2xhc3MgR2VuZXJpY011bHRpQWRkcmVzcyBleHRlbmRzIEVudW0ge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgSWQ6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgSW5kZXg6ICdDb21wYWN0PEFjY291bnRJbmRleD4nLFxuICAgICAgICAgICAgUmF3OiAnQnl0ZXMnLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICAgICAgQWRkcmVzczMyOiAnSDI1NicsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgICAgICBBZGRyZXNzMjA6ICdIMTYwJ1xuICAgICAgICB9LCBkZWNvZGVNdWx0aUFueShyZWdpc3RyeSwgdmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIGNvbnN0IHsgaW5uZXIsIG91dGVyID0gW10gfSA9IHRoaXMuaW5uZXIuaW5zcGVjdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5uZXIsXG4gICAgICAgICAgICBvdXRlcjogW25ldyBVaW50OEFycmF5KFt0aGlzLmluZGV4XSksIC4uLm91dGVyXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJvb2wsIFU4YUZpeGVkIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzVThhLCBpc1VuZGVmaW5lZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmNvbnN0IEFZRV9CSVRTID0gMGIxMDAwMDAwMDtcbmNvbnN0IE5BWV9CSVRTID0gMGIwMDAwMDAwMDtcbmNvbnN0IENPTl9NQVNLID0gMGIwMTExMTExMTtcbmNvbnN0IERFRl9DT05WID0gMGIwMDAwMDAwMDsgLy8gdGhlIGRlZmF1bHQgY29udmljdGlvbiwgTm9uZVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlVm90ZUJvb2wodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyBuZXcgVWludDhBcnJheShbQVlFX0JJVFMgfCBERUZfQ09OVl0pXG4gICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoW05BWV9CSVRTXSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVWb3RlVThhKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aFxuICAgICAgICA/IHZhbHVlLnN1YmFycmF5KDAsIDEpXG4gICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoW05BWV9CSVRTXSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVWb3RlVHlwZShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAobmV3IEJvb2wocmVnaXN0cnksIHZhbHVlLmF5ZSkuaXNUcnVlXG4gICAgICAgICAgICA/IEFZRV9CSVRTXG4gICAgICAgICAgICA6IE5BWV9CSVRTKSB8XG4gICAgICAgICAgICByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdDb252aWN0aW9uJywgW3ZhbHVlLmNvbnZpY3Rpb24gfHwgREVGX0NPTlZdKS5pbmRleFxuICAgIF0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlVm90ZShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBpZiAoaXNVOGEodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVWb3RlVThhKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbiB8fCBpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVWb3RlQm9vbChuZXcgQm9vbChyZWdpc3RyeSwgdmFsdWUpLmlzVHJ1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVm90ZUJvb2wodmFsdWUgPCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZVZvdGVUeXBlKHJlZ2lzdHJ5LCB2YWx1ZSk7XG59XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNWb3RlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgbnVtYmVyIG9mIGxvY2sgcGVyaW9kcywgcGx1cyBhIHZvdGUsIG9uZSB3YXkgb3IgdGhlIG90aGVyLlxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZvdGUgZXh0ZW5kcyBVOGFGaXhlZCB7XG4gICAgX19pbnRlcm5hbF9fYXllO1xuICAgIF9faW50ZXJuYWxfX2NvbnZpY3Rpb247XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIC8vIGRlY29kZWQgaXMganVzdCAxIGJ5dGVcbiAgICAgICAgLy8gQXllOiBNb3N0IFNpZ25pZmljYW50IEJpdFxuICAgICAgICAvLyBDb252aWN0aW9uOiAwMDAwIC0gMDEwMVxuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVm90ZShyZWdpc3RyeSwgdmFsdWUpO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZGVjb2RlZCwgOCk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXllID0gKGRlY29kZWRbMF0gJiBBWUVfQklUUykgPT09IEFZRV9CSVRTO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NvbnZpY3Rpb24gPSB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0NvbnZpY3Rpb24nLCBbZGVjb2RlZFswXSAmIENPTl9NQVNLXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgVjIgY29udmljdGlvblxuICAgICAqL1xuICAgIGdldCBjb252aWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19jb252aWN0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gdHJ1ZSBpZiB0aGUgd3JhcHBlZCB2YWx1ZSBpcyBhIHBvc2l0aXZlIHZvdGVcbiAgICAgKi9cbiAgICBnZXQgaXNBeWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2F5ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHRydWUgaWYgdGhlIHdyYXBwZWQgdmFsdWUgaXMgYSBuZWdhdGl2ZSB2b3RlXG4gICAgICovXG4gICAgZ2V0IGlzTmF5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNBeWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4cGFuZGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb252aWN0aW9uOiB0aGlzLmNvbnZpY3Rpb24udG9IdW1hbihpc0V4cGFuZGVkKSxcbiAgICAgICAgICAgIHZvdGU6IHRoaXMuaXNBeWUgPyAnQXllJyA6ICdOYXknXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXllOiB0aGlzLmlzQXllLFxuICAgICAgICAgICAgY29udmljdGlvbjogdGhpcy5jb252aWN0aW9uLnRvUHJpbWl0aXZlKClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnVm90ZSc7XG4gICAgfVxufVxuIiwiZXhwb3J0IHsgR2VuZXJpY0FjY291bnRJZCwgR2VuZXJpY0FjY291bnRJZCBhcyBHZW5lcmljQWNjb3VudElkMzIsIEdlbmVyaWNBY2NvdW50SWQzMyB9IGZyb20gJy4vQWNjb3VudElkLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNBY2NvdW50SW5kZXggfSBmcm9tICcuL0FjY291bnRJbmRleC5qcyc7XG5leHBvcnQgeyBHZW5lcmljQmxvY2sgfSBmcm9tICcuL0Jsb2NrLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNDYWxsIH0gZnJvbSAnLi9DYWxsLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNDaGFpblByb3BlcnRpZXMgfSBmcm9tICcuL0NoYWluUHJvcGVydGllcy5qcyc7XG5leHBvcnQgeyBHZW5lcmljQ29uc2Vuc3VzRW5naW5lSWQgfSBmcm9tICcuL0NvbnNlbnN1c0VuZ2luZUlkLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNFdmVudCwgR2VuZXJpY0V2ZW50RGF0YSB9IGZyb20gJy4vRXZlbnQuanMnO1xuZXhwb3J0IHsgR2VuZXJpY0xvb2t1cFNvdXJjZSB9IGZyb20gJy4vTG9va3VwU291cmNlLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNNdWx0aUFkZHJlc3MgYXMgR2VuZXJpY0FkZHJlc3MsIEdlbmVyaWNNdWx0aUFkZHJlc3MgfSBmcm9tICcuL011bHRpQWRkcmVzcy5qcyc7XG5leHBvcnQgeyBHZW5lcmljVm90ZSB9IGZyb20gJy4vVm90ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuLi9ldGhlcmV1bS9pbmRleC5qcyc7XG4iLCJpbXBvcnQgJy4vcGFja2FnZURldGVjdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2J1bmRsZS5qcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL2V4dHJpbnNpYy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcmltaXRpdmUvaW5kZXguanMnO1xuIiwiY29uc3QgdHlwZXNBbGlhcyA9IHtcbiAgICBhc3NldHM6IHtcbiAgICAgICAgQXBwcm92YWw6ICdBc3NldEFwcHJvdmFsJyxcbiAgICAgICAgQXBwcm92YWxLZXk6ICdBc3NldEFwcHJvdmFsS2V5JyxcbiAgICAgICAgQmFsYW5jZTogJ1RBc3NldEJhbGFuY2UnLFxuICAgICAgICBEZXN0cm95V2l0bmVzczogJ0Fzc2V0RGVzdHJveVdpdG5lc3MnXG4gICAgfSxcbiAgICBiYWJlOiB7XG4gICAgICAgIEVxdWl2b2NhdGlvblByb29mOiAnQmFiZUVxdWl2b2NhdGlvblByb29mJ1xuICAgIH0sXG4gICAgYmFsYW5jZXM6IHtcbiAgICAgICAgU3RhdHVzOiAnQmFsYW5jZVN0YXR1cydcbiAgICB9LFxuICAgIGJlZWZ5OiB7XG4gICAgICAgIEF1dGhvcml0eUlkOiAnQmVlZnlJZCdcbiAgICB9LFxuICAgIGNvbnRyYWN0czoge1xuICAgICAgICBTdG9yYWdlS2V5OiAnQ29udHJhY3RTdG9yYWdlS2V5J1xuICAgIH0sXG4gICAgZWxlY3Rpb25Qcm92aWRlck11bHRpUGhhc2U6IHtcbiAgICAgICAgUGhhc2U6ICdFbGVjdGlvblBoYXNlJ1xuICAgIH0sXG4gICAgZXRoZXJldW06IHtcbiAgICAgICAgQmxvY2s6ICdFdGhCbG9jaycsXG4gICAgICAgIEhlYWRlcjogJ0V0aEhlYWRlcicsXG4gICAgICAgIFJlY2VpcHQ6ICdFdGhSZWNlaXB0JyxcbiAgICAgICAgVHJhbnNhY3Rpb246ICdFdGhUcmFuc2FjdGlvbicsXG4gICAgICAgIFRyYW5zYWN0aW9uU3RhdHVzOiAnRXRoVHJhbnNhY3Rpb25TdGF0dXMnXG4gICAgfSxcbiAgICBldm06IHtcbiAgICAgICAgQWNjb3VudDogJ0V2bUFjY291bnQnLFxuICAgICAgICBMb2c6ICdFdm1Mb2cnLFxuICAgICAgICBWaWNpbml0eTogJ0V2bVZpY2luaXR5J1xuICAgIH0sXG4gICAgZ3JhbmRwYToge1xuICAgICAgICBFcXVpdm9jYXRpb246ICdHcmFuZHBhRXF1aXZvY2F0aW9uJyxcbiAgICAgICAgRXF1aXZvY2F0aW9uUHJvb2Y6ICdHcmFuZHBhRXF1aXZvY2F0aW9uUHJvb2YnXG4gICAgfSxcbiAgICBpZGVudGl0eToge1xuICAgICAgICBKdWRnZW1lbnQ6ICdJZGVudGl0eUp1ZGdlbWVudCdcbiAgICB9LFxuICAgIGluY2x1c2lvbjoge1xuICAgICAgICBWYWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICB9LFxuICAgIHBhcmFEaXNwdXRlczoge1xuICAgICAgICBWYWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICB9LFxuICAgIHBhcmFJbmNsdXNpb246IHtcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICdQYXJhVmFsaWRhdG9ySW5kZXgnXG4gICAgfSxcbiAgICBwYXJhU2NoZWR1bGVyOiB7XG4gICAgICAgIFZhbGlkYXRvckluZGV4OiAnUGFyYVZhbGlkYXRvckluZGV4J1xuICAgIH0sXG4gICAgcGFyYVNoYXJlZDoge1xuICAgICAgICBWYWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICB9LFxuICAgIHBhcmFjaGFpbnM6IHtcbiAgICAgICAgSWQ6ICdQYXJhSWQnXG4gICAgfSxcbiAgICBwYXJhc0Rpc3B1dGVzOiB7XG4gICAgICAgIFZhbGlkYXRvckluZGV4OiAnUGFyYVZhbGlkYXRvckluZGV4J1xuICAgIH0sXG4gICAgcGFyYXNJbmNsdXNpb246IHtcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICdQYXJhVmFsaWRhdG9ySW5kZXgnXG4gICAgfSxcbiAgICBwYXJhc1NjaGVkdWxlcjoge1xuICAgICAgICBWYWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICB9LFxuICAgIHBhcmFzU2hhcmVkOiB7XG4gICAgICAgIFZhbGlkYXRvckluZGV4OiAnUGFyYVZhbGlkYXRvckluZGV4J1xuICAgIH0sXG4gICAgcHJvcG9zZVBhcmFjaGFpbjoge1xuICAgICAgICBQcm9wb3NhbDogJ1BhcmFjaGFpblByb3Bvc2FsJ1xuICAgIH0sXG4gICAgcHJveHk6IHtcbiAgICAgICAgQW5ub3VuY2VtZW50OiAnUHJveHlBbm5vdW5jZW1lbnQnXG4gICAgfSxcbiAgICBzY2hlZHVsZXI6IHtcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICdQYXJhVmFsaWRhdG9ySW5kZXgnXG4gICAgfSxcbiAgICBzaGFyZWQ6IHtcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICdQYXJhVmFsaWRhdG9ySW5kZXgnXG4gICAgfSxcbiAgICBzb2NpZXR5OiB7XG4gICAgICAgIEp1ZGdlbWVudDogJ1NvY2lldHlKdWRnZW1lbnQnLFxuICAgICAgICBWb3RlOiAnU29jaWV0eVZvdGUnXG4gICAgfSxcbiAgICBzdGFraW5nOiB7XG4gICAgICAgIENvbXBhY3Q6ICdDb21wYWN0QXNzaWdubWVudHMnXG4gICAgfSxcbiAgICB0cmVhc3VyeToge1xuICAgICAgICBQcm9wb3NhbDogJ1RyZWFzdXJ5UHJvcG9zYWwnXG4gICAgfSxcbiAgICB4Y206IHtcbiAgICAgICAgQXNzZXRJZDogJ1hjbUFzc2V0SWQnXG4gICAgfSxcbiAgICB4Y21QYWxsZXQ6IHtcbiAgICAgICAgQXNzZXRJZDogJ1hjbUFzc2V0SWQnXG4gICAgfVxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldCB0eXBlcyBmb3Igc3BlY2lmaWMgbW9kdWxlcyAobWV0YWRhdGEgb3ZlcnJpZGUpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGlhc1R5cGVzKHsga25vd25UeXBlcyB9LCBzZWN0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHR5cGVzQWxpYXNbc2VjdGlvbl0gPz8ge30pLFxuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0FsaWFzPy5bc2VjdGlvbl0gPz8ge30pXG4gICAgfTtcbn1cbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBUQXNzZXRDb252ZXJzaW9uOiAnT3B0aW9uPE11bHRpTG9jYXRpb24+J1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBBc3NldENvbnZlcnNpb25BcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGdldF9yZXNlcnZlczoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCBwb29sIHJlc2VydmVzJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Fzc2V0MScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0YWdpbmdYY21WM011bHRpTG9jYXRpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhc3NldDInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTdGFnaW5nWGNtVjNNdWx0aUxvY2F0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPChCYWxhbmNlLEJhbGFuY2UpPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHF1b3RlX3ByaWNlX2V4YWN0X3Rva2Vuc19mb3JfdG9rZW5zOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUXVvdGUgcHJpY2U6IGV4YWN0IHRva2VucyBmb3IgdG9rZW5zJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Fzc2V0MScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0YWdpbmdYY21WM011bHRpTG9jYXRpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhc3NldDInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTdGFnaW5nWGNtVjNNdWx0aUxvY2F0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTEyOCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2luY2x1ZGVfZmVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjwoQmFsYW5jZSk+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcXVvdGVfcHJpY2VfdG9rZW5zX2Zvcl9leGFjdF90b2tlbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdRdW90ZSBwcmljZTogdG9rZW5zIGZvciBleGFjdCB0b2tlbnMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYXNzZXQxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU3RhZ2luZ1hjbVYzTXVsdGlMb2NhdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Fzc2V0MicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0YWdpbmdYY21WM011bHRpTG9jYXRpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd1MTI4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaW5jbHVkZV9mZWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPChCYWxhbmNlKT4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgQXNzZXRBcHByb3ZhbEtleToge1xuICAgICAgICAgICAgb3duZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZGVsZWdhdGU6ICdBY2NvdW50SWQnXG4gICAgICAgIH0sXG4gICAgICAgIEFzc2V0QXBwcm92YWw6IHtcbiAgICAgICAgICAgIGFtb3VudDogJ1RBc3NldEJhbGFuY2UnLFxuICAgICAgICAgICAgZGVwb3NpdDogJ1RBc3NldERlcG9zaXRCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBBc3NldEJhbGFuY2U6IHtcbiAgICAgICAgICAgIGJhbGFuY2U6ICdUQXNzZXRCYWxhbmNlJyxcbiAgICAgICAgICAgIGlzRnJvemVuOiAnYm9vbCcsXG4gICAgICAgICAgICBpc1N1ZmZpY2llbnQ6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBBc3NldERlc3Ryb3lXaXRuZXNzOiB7XG4gICAgICAgICAgICBhY2NvdW50czogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBzdWZmaWNpZW50czogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBhcHByb3ZhbHM6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgIH0sXG4gICAgICAgIEFzc2V0RGV0YWlsczoge1xuICAgICAgICAgICAgb3duZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgaXNzdWVyOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGFkbWluOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGZyZWV6ZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgc3VwcGx5OiAnVEFzc2V0QmFsYW5jZScsXG4gICAgICAgICAgICBkZXBvc2l0OiAnVEFzc2V0RGVwb3NpdEJhbGFuY2UnLFxuICAgICAgICAgICAgbWluQmFsYW5jZTogJ1RBc3NldEJhbGFuY2UnLFxuICAgICAgICAgICAgaXNTdWZmaWNpZW50OiAnYm9vbCcsXG4gICAgICAgICAgICBhY2NvdW50czogJ3UzMicsXG4gICAgICAgICAgICBzdWZmaWNpZW50czogJ3UzMicsXG4gICAgICAgICAgICBhcHByb3ZhbHM6ICd1MzInLFxuICAgICAgICAgICAgaXNGcm96ZW46ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBBc3NldE1ldGFkYXRhOiB7XG4gICAgICAgICAgICBkZXBvc2l0OiAnVEFzc2V0RGVwb3NpdEJhbGFuY2UnLFxuICAgICAgICAgICAgbmFtZTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgc3ltYm9sOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBkZWNpbWFsczogJ3U4JyxcbiAgICAgICAgICAgIGlzRnJvemVuOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgVEFzc2V0QmFsYW5jZTogJ3U2NCcsXG4gICAgICAgIFRBc3NldERlcG9zaXRCYWxhbmNlOiAnQmFsYW5jZU9mJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBBc3NldHNBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGFjY291bnRfYmFsYW5jZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIGN1cnJlbnQgc2V0IG9mIGF1dGhvcml0aWVzLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPCh1MzIsIFRBc3NldEJhbGFuY2UpPidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEJsb2NrQXR0ZXN0YXRpb25zOiB7XG4gICAgICAgICAgICByZWNlaXB0OiAnQ2FuZGlkYXRlUmVjZWlwdCcsXG4gICAgICAgICAgICB2YWxpZDogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgICAgIGludmFsaWQ6ICdWZWM8QWNjb3VudElkPidcbiAgICAgICAgfSxcbiAgICAgICAgSW5jbHVkZWRCbG9ja3M6IHtcbiAgICAgICAgICAgIGFjdHVhbE51bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHNlc3Npb246ICdTZXNzaW9uSW5kZXgnLFxuICAgICAgICAgICAgcmFuZG9tU2VlZDogJ0gyNTYnLFxuICAgICAgICAgICAgYWN0aXZlUGFyYWNoYWluczogJ1ZlYzxQYXJhSWQ+JyxcbiAgICAgICAgICAgIHBhcmFCbG9ja3M6ICdWZWM8SGFzaD4nXG4gICAgICAgIH0sXG4gICAgICAgIE1vcmVBdHRlc3RhdGlvbnM6IHt9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBSYXdBdXJhUHJlRGlnZXN0OiB7XG4gICAgICAgICAgICBzbG90TnVtYmVyOiAndTY0J1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIEF1cmFBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGF1dGhvcml0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBjdXJyZW50IHNldCBvZiBhdXRob3JpdGllcy4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEF1dGhvcml0eUlkPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNsb3RfZHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzbG90IGR1cmF0aW9uIGZvciBBdXJhLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTbG90RHVyYXRpb24nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEV4dHJpbnNpY09ySGFzaDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICAgICAgRXh0cmluc2ljOiAnQnl0ZXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEV4dHJpbnNpY1N0YXR1czoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBGdXR1cmU6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBSZWFkeTogJ051bGwnLFxuICAgICAgICAgICAgICAgIEJyb2FkY2FzdDogJ1ZlYzxUZXh0PicsXG4gICAgICAgICAgICAgICAgSW5CbG9jazogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIFJldHJhY3RlZDogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIEZpbmFsaXR5VGltZW91dDogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIEZpbmFsaXplZDogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIFVzdXJwZWQ6ICdIYXNoJyxcbiAgICAgICAgICAgICAgICBEcm9wcGVkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgSW52YWxpZDogJ051bGwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBoYXNLZXk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRydWUgaWYgdGhlIGtleXN0b3JlIGhhcyBwcml2YXRlIGtleXMgZm9yIHRoZSBnaXZlbiBwdWJsaWMga2V5IGFuZCBrZXkgdHlwZS4nLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3B1YmxpY0tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5VHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH0sXG4gICAgaGFzU2Vzc2lvbktleXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRydWUgaWYgdGhlIGtleXN0b3JlIGhhcyBwcml2YXRlIGtleXMgZm9yIHRoZSBnaXZlbiBzZXNzaW9uIHB1YmxpYyBrZXlzLicsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2Vzc2lvbktleXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfSxcbiAgICBpbnNlcnRLZXk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnNlcnQgYSBrZXkgaW50byB0aGUga2V5c3RvcmUuJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXlUeXBlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVGV4dCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3N1cmknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdUZXh0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHVibGljS2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICB9LFxuICAgIHBlbmRpbmdFeHRyaW5zaWNzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhbGwgcGVuZGluZyBleHRyaW5zaWNzLCBwb3RlbnRpYWxseSBncm91cGVkIGJ5IHNlbmRlcicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8RXh0cmluc2ljPidcbiAgICB9LFxuICAgIHJlbW92ZUV4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JlbW92ZSBnaXZlbiBleHRyaW5zaWMgZnJvbSB0aGUgcG9vbCBhbmQgdGVtcG9yYXJpbHkgYmFuIGl0IHRvIHByZXZlbnQgcmVpbXBvcnRpbmcnLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2J5dGVzT3JIYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEV4dHJpbnNpY09ySGFzaD4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdWZWM8SGFzaD4nXG4gICAgfSxcbiAgICByb3RhdGVLZXlzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgbmV3IHNlc3Npb24ga2V5cyBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5cycsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgfSxcbiAgICBzdWJtaXRBbmRXYXRjaEV4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Ym1pdCBhbmQgc3Vic2NyaWJlIHRvIHdhdGNoIGFuIGV4dHJpbnNpYyB1bnRpbCB1bnN1YnNjcmliZWQnLFxuICAgICAgICBpc1NpZ25lZDogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4dHJpbnNpYycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcHVic3ViOiBbXG4gICAgICAgICAgICAnZXh0cmluc2ljVXBkYXRlJyxcbiAgICAgICAgICAgICdzdWJtaXRBbmRXYXRjaEV4dHJpbnNpYycsXG4gICAgICAgICAgICAndW53YXRjaEV4dHJpbnNpYydcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V4dHJpbnNpY1N0YXR1cydcbiAgICB9LFxuICAgIHN1Ym1pdEV4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Ym1pdCBhIGZ1bGx5IGZvcm1hdHRlZCBleHRyaW5zaWMgZm9yIGJsb2NrIGluY2x1c2lvbicsXG4gICAgICAgIGlzU2lnbmVkOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXh0cmluc2ljJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnRXh0cmluc2ljJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgVW5jbGVFbnRyeUl0ZW06IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgSW5jbHVzaW9uSGVpZ2h0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgICAgIFVuY2xlOiAnKEhhc2gsIE9wdGlvbjxBY2NvdW50SWQ+KSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBBbGxvd2VkU2xvdHM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1ByaW1hcnlTbG90cycsICdQcmltYXJ5QW5kU2Vjb25kYXJ5UGxhaW5TbG90cycsICdQcmltYXJ5QW5kU2Vjb25kYXJ5VlJGU2xvdHMnXVxuICAgICAgICB9LFxuICAgICAgICBCYWJlQXV0aG9yaXR5V2VpZ2h0OiAndTY0JyxcbiAgICAgICAgQmFiZUVwb2NoQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgYzogJyh1NjQsIHU2NCknLFxuICAgICAgICAgICAgYWxsb3dlZFNsb3RzOiAnQWxsb3dlZFNsb3RzJ1xuICAgICAgICB9LFxuICAgICAgICBCYWJlQmxvY2tXZWlnaHQ6ICd1MzInLFxuICAgICAgICBCYWJlRXF1aXZvY2F0aW9uUHJvb2Y6IHtcbiAgICAgICAgICAgIG9mZmVuZGVyOiAnQXV0aG9yaXR5SWQnLFxuICAgICAgICAgICAgc2xvdE51bWJlcjogJ1Nsb3ROdW1iZXInLFxuICAgICAgICAgICAgZmlyc3RIZWFkZXI6ICdIZWFkZXInLFxuICAgICAgICAgICAgc2Vjb25kSGVhZGVyOiAnSGVhZGVyJ1xuICAgICAgICB9LFxuICAgICAgICBCYWJlR2VuZXNpc0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIHNsb3REdXJhdGlvbjogJ3U2NCcsXG4gICAgICAgICAgICBlcG9jaExlbmd0aDogJ3U2NCcsXG4gICAgICAgICAgICBjOiAnKHU2NCwgdTY0KScsXG4gICAgICAgICAgICBnZW5lc2lzQXV0aG9yaXRpZXM6ICdWZWM8KEF1dGhvcml0eUlkLCBCYWJlQXV0aG9yaXR5V2VpZ2h0KT4nLFxuICAgICAgICAgICAgcmFuZG9tbmVzczogJ1JhbmRvbW5lc3MnLFxuICAgICAgICAgICAgYWxsb3dlZFNsb3RzOiAnQWxsb3dlZFNsb3RzJ1xuICAgICAgICB9LFxuICAgICAgICBCYWJlR2VuZXNpc0NvbmZpZ3VyYXRpb25WMToge1xuICAgICAgICAgICAgc2xvdER1cmF0aW9uOiAndTY0JyxcbiAgICAgICAgICAgIGVwb2NoTGVuZ3RoOiAndTY0JyxcbiAgICAgICAgICAgIGM6ICcodTY0LCB1NjQpJyxcbiAgICAgICAgICAgIGdlbmVzaXNBdXRob3JpdGllczogJ1ZlYzwoQXV0aG9yaXR5SWQsIEJhYmVBdXRob3JpdHlXZWlnaHQpPicsXG4gICAgICAgICAgICByYW5kb21uZXNzOiAnUmFuZG9tbmVzcycsXG4gICAgICAgICAgICBzZWNvbmRhcnlTbG90czogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIEJhYmVXZWlnaHQ6ICd1NjQnLFxuICAgICAgICBNYXliZVJhbmRvbW5lc3M6ICdPcHRpb248UmFuZG9tbmVzcz4nLFxuICAgICAgICBNYXliZVZyZjogJ09wdGlvbjxWcmZEYXRhPicsXG4gICAgICAgIEVwb2NoOiB7XG4gICAgICAgICAgICBlcG9jaEluZGV4OiAndTY0JyxcbiAgICAgICAgICAgIHN0YXJ0U2xvdDogJ1Nsb3QnLFxuICAgICAgICAgICAgZHVyYXRpb246ICd1NjQnLFxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6ICdWZWM8KEF1dGhvcml0eUlkLCBCYWJlQXV0aG9yaXR5V2VpZ2h0KT4nLFxuICAgICAgICAgICAgcmFuZG9tbmVzczogJ0hhc2gnLCAvLyBbdTg7IFZSRl9PVVRQVVRfTEVOR1RIXSxcbiAgICAgICAgICAgIGNvbmZpZzogJ0JhYmVFcG9jaENvbmZpZ3VyYXRpb24nXG4gICAgICAgIH0sXG4gICAgICAgIEVwb2NoQXV0aG9yc2hpcDoge1xuICAgICAgICAgICAgcHJpbWFyeTogJ1ZlYzx1NjQ+JyxcbiAgICAgICAgICAgIHNlY29uZGFyeTogJ1ZlYzx1NjQ+JyxcbiAgICAgICAgICAgIHNlY29uZGFyeV92cmY6ICdWZWM8dTY0PidcbiAgICAgICAgfSxcbiAgICAgICAgTmV4dENvbmZpZ0Rlc2NyaXB0b3I6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgVjA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBWMTogJ05leHRDb25maWdEZXNjcmlwdG9yVjEnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIE5leHRDb25maWdEZXNjcmlwdG9yVjE6IHtcbiAgICAgICAgICAgIGM6ICcodTY0LCB1NjQpJyxcbiAgICAgICAgICAgIGFsbG93ZWRTbG90czogJ0FsbG93ZWRTbG90cydcbiAgICAgICAgfSxcbiAgICAgICAgT3BhcXVlS2V5T3duZXJzaGlwUHJvb2Y6ICdCeXRlcycsXG4gICAgICAgIFJhbmRvbW5lc3M6ICdIYXNoJywgLy8gW3U4OyBSQU5ET01ORVNTX0xFTkdUSF0sXG4gICAgICAgIFJhd0JhYmVQcmVEaWdlc3Q6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgUGhhbnRvbTogJ051bGwnLCAvLyBpbmRleCBzdGFydHMgYXQgMS4uLiBlbXB0eSBzbG90IGF0IDBcbiAgICAgICAgICAgICAgICBQcmltYXJ5OiAnUmF3QmFiZVByZURpZ2VzdFByaW1hcnknLFxuICAgICAgICAgICAgICAgIFNlY29uZGFyeVBsYWluOiAnUmF3QmFiZVByZURpZ2VzdFNlY29uZGFyeVBsYWluJyxcbiAgICAgICAgICAgICAgICBTZWNvbmRhcnlWUkY6ICdSYXdCYWJlUHJlRGlnZXN0U2Vjb25kYXJ5VlJGJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBSYXdCYWJlUHJlRGlnZXN0UHJpbWFyeToge1xuICAgICAgICAgICAgYXV0aG9yaXR5SW5kZXg6ICd1MzInLCAvLyBBdXRob3JpdHlJbmRleCAoYWxzbyBpbiBhdXJhKVxuICAgICAgICAgICAgc2xvdE51bWJlcjogJ1Nsb3ROdW1iZXInLFxuICAgICAgICAgICAgdnJmT3V0cHV0OiAnVnJmT3V0cHV0JyxcbiAgICAgICAgICAgIHZyZlByb29mOiAnVnJmUHJvb2YnXG4gICAgICAgIH0sXG4gICAgICAgIFJhd0JhYmVQcmVEaWdlc3RTZWNvbmRhcnlQbGFpbjoge1xuICAgICAgICAgICAgYXV0aG9yaXR5SW5kZXg6ICd1MzInLCAvLyBBdXRob3JpdHlJbmRleCAoYWxzbyBpbiBhdXJhKVxuICAgICAgICAgICAgc2xvdE51bWJlcjogJ1Nsb3ROdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIFJhd0JhYmVQcmVEaWdlc3RTZWNvbmRhcnlWUkY6IHtcbiAgICAgICAgICAgIGF1dGhvcml0eUluZGV4OiAndTMyJyxcbiAgICAgICAgICAgIHNsb3ROdW1iZXI6ICdTbG90TnVtYmVyJyxcbiAgICAgICAgICAgIHZyZk91dHB1dDogJ1ZyZk91dHB1dCcsXG4gICAgICAgICAgICB2cmZQcm9vZjogJ1ZyZlByb29mJ1xuICAgICAgICB9LFxuICAgICAgICBSYXdCYWJlUHJlRGlnZXN0VG8xNTk6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgUHJpbWFyeTogJ1Jhd0JhYmVQcmVEaWdlc3RQcmltYXJ5VG8xNTknLFxuICAgICAgICAgICAgICAgIFNlY29uZGFyeTogJ1Jhd0JhYmVQcmVEaWdlc3RTZWNvbmRhcnlUbzE1OSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUmF3QmFiZVByZURpZ2VzdFByaW1hcnlUbzE1OToge1xuICAgICAgICAgICAgYXV0aG9yaXR5SW5kZXg6ICd1MzInLFxuICAgICAgICAgICAgc2xvdE51bWJlcjogJ1Nsb3ROdW1iZXInLFxuICAgICAgICAgICAgd2VpZ2h0OiAnQmFiZUJsb2NrV2VpZ2h0JyxcbiAgICAgICAgICAgIHZyZk91dHB1dDogJ1ZyZk91dHB1dCcsXG4gICAgICAgICAgICB2cmZQcm9vZjogJ1ZyZlByb29mJ1xuICAgICAgICB9LFxuICAgICAgICBSYXdCYWJlUHJlRGlnZXN0U2Vjb25kYXJ5VG8xNTk6IHtcbiAgICAgICAgICAgIGF1dGhvcml0eUluZGV4OiAndTMyJyxcbiAgICAgICAgICAgIHNsb3ROdW1iZXI6ICdTbG90TnVtYmVyJyxcbiAgICAgICAgICAgIHdlaWdodDogJ0JhYmVCbG9ja1dlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYSBjcm9zcyBvbGQvbmV3IGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgZGlnZXN0LCB0aGF0IGlzIF9vbmx5XyB1c2VmdWxcbiAgICAgICAgLy8gZm9yIHBhcnRpYWwgcGFyc2luZyBhbmQgZXh0cmFjdGlvbiBvZiB0aGUgYXV0aG9yLiBUaGlzIGFzc3VtZXMgdGhhdCBhbGxcbiAgICAgICAgLy8gZW50cmllcyBoYXMgdGhlIGF1dGhvcml0eUluZGV4IGluIHRoZSBmaXJzdCBwb3NpdGlvbiAtIGFuZCB0aGF0IGl0IGlzIGFsbFxuICAgICAgICAvLyB3ZSBhcmUgaW50ZXJlc3RlZCBpblxuICAgICAgICBSYXdCYWJlUHJlRGlnZXN0Q29tcGF0OiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFplcm86ICd1MzInLFxuICAgICAgICAgICAgICAgIE9uZTogJ3UzMicsXG4gICAgICAgICAgICAgICAgVHdvOiAndTMyJyxcbiAgICAgICAgICAgICAgICBUaHJlZTogJ3UzMidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2xvdE51bWJlcjogJ3U2NCcsXG4gICAgICAgIFZyZkRhdGE6ICdbdTg7IDMyXScsXG4gICAgICAgIFZyZk91dHB1dDogJ1t1ODsgMzJdJyxcbiAgICAgICAgVnJmUHJvb2Y6ICdbdTg7IDY0XSdcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBlcG9jaEF1dGhvcnNoaXA6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGRhdGEgYWJvdXQgd2hpY2ggc2xvdHMgKHByaW1hcnkgb3Igc2Vjb25kYXJ5KSBjYW4gYmUgY2xhaW1lZCBpbiB0aGUgY3VycmVudCBlcG9jaCB3aXRoIHRoZSBrZXlzIGluIHRoZSBrZXlzdG9yZScsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnSGFzaE1hcDxBdXRob3JpdHlJZCwgRXBvY2hBdXRob3JzaGlwPidcbiAgICB9XG59O1xuIiwiY29uc3QgVjFfVjJfU0hBUkVEID0ge1xuICAgIGN1cnJlbnRfZXBvY2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgY3VycmVudCBlcG9jaC4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnRXBvY2gnXG4gICAgfSxcbiAgICBjdXJyZW50X2Vwb2NoX3N0YXJ0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc2xvdCB0aGF0IHN0YXJ0ZWQgdGhlIGN1cnJlbnQgZXBvY2guJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1Nsb3QnXG4gICAgfSxcbiAgICBnZW5lcmF0ZV9rZXlfb3duZXJzaGlwX3Byb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGVzIGEgcHJvb2Ygb2Yga2V5IG93bmVyc2hpcCBmb3IgdGhlIGdpdmVuIGF1dGhvcml0eSBpbiB0aGUgY3VycmVudCBlcG9jaC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2xvdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1Nsb3QnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhdXRob3JpdHlJZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0F1dGhvcml0eUlkJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPE9wYXF1ZUtleU93bmVyc2hpcFByb29mPidcbiAgICB9LFxuICAgIG5leHRfZXBvY2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgbmV4dCBlcG9jaCAod2hpY2ggd2FzIGFscmVhZHkgcHJldmlvdXNseSBhbm5vdW5jZWQpLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdFcG9jaCdcbiAgICB9LFxuICAgIHN1Ym1pdF9yZXBvcnRfZXF1aXZvY2F0aW9uX3Vuc2lnbmVkX2V4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Ym1pdHMgYW4gdW5zaWduZWQgZXh0cmluc2ljIHRvIHJlcG9ydCBhbiBlcXVpdm9jYXRpb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VxdWl2b2NhdGlvblByb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmFiZUVxdWl2b2NhdGlvblByb29mJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5T3duZXJQcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wYXF1ZUtleU93bmVyc2hpcFByb29mJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPE51bGw+J1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBCYWJlQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBnZW5lc2lzIGNvbmZpZ3VyYXRpb24gZm9yIEJBQkUuIFRoZSBjb25maWd1cmF0aW9uIGlzIG9ubHkgcmVhZCBvbiBnZW5lc2lzLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWJlR2VuZXNpc0NvbmZpZ3VyYXRpb24nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5WMV9WMl9TSEFSRURcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGZvciBCQUJFLiBWZXJzaW9uIDEuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0JhYmVHZW5lc2lzQ29uZmlndXJhdGlvblYxJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uVjFfVjJfU0hBUkVEXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjY291bnREYXRhOiB7XG4gICAgICAgICAgICBmcmVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICByZXNlcnZlZDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgbWlzY0Zyb3plbjogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgZmVlRnJvemVuOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgQmFsYW5jZUxvY2tUbzIxMjoge1xuICAgICAgICAgICAgaWQ6ICdMb2NrSWRlbnRpZmllcicsXG4gICAgICAgICAgICBhbW91bnQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHVudGlsOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgcmVhc29uczogJ1dpdGhkcmF3UmVhc29ucydcbiAgICAgICAgfSxcbiAgICAgICAgQmFsYW5jZUxvY2s6IHtcbiAgICAgICAgICAgIGlkOiAnTG9ja0lkZW50aWZpZXInLFxuICAgICAgICAgICAgYW1vdW50OiAnQmFsYW5jZScsXG4gICAgICAgICAgICByZWFzb25zOiAnUmVhc29ucydcbiAgICAgICAgfSxcbiAgICAgICAgQmFsYW5jZVN0YXR1czoge1xuICAgICAgICAgICAgX2VudW06IFsnRnJlZScsICdSZXNlcnZlZCddXG4gICAgICAgIH0sXG4gICAgICAgIFJlYXNvbnM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0ZlZScsICdNaXNjJywgJ0FsbCddXG4gICAgICAgIH0sXG4gICAgICAgIFJlc2VydmVEYXRhOiB7XG4gICAgICAgICAgICBpZDogJ1Jlc2VydmVJZGVudGlmaWVyJyxcbiAgICAgICAgICAgIGFtb3VudDogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIFJlc2VydmVJZGVudGlmaWVyOiAnW3U4OyA4XScsXG4gICAgICAgIFZlc3RpbmdTY2hlZHVsZToge1xuICAgICAgICAgICAgb2Zmc2V0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBwZXJCbG9jazogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgc3RhcnRpbmdCbG9jazogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBXaXRoZHJhd1JlYXNvbnM6IHtcbiAgICAgICAgICAgIF9zZXQ6IHtcbiAgICAgICAgICAgICAgICBUcmFuc2FjdGlvblBheW1lbnQ6IDEsXG4gICAgICAgICAgICAgICAgVHJhbnNmZXI6IDIsXG4gICAgICAgICAgICAgICAgUmVzZXJ2ZTogNCxcbiAgICAgICAgICAgICAgICBGZWU6IDgsXG4gICAgICAgICAgICAgICAgVGlwOiAxNlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjLmpzJztcbmltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEJlZWZ5QXV0aG9yaXR5U2V0OiB7XG4gICAgICAgICAgICBpZDogJ3U2NCcsXG4gICAgICAgICAgICBsZW46ICd1MzInLFxuICAgICAgICAgICAgcm9vdDogJ0gyNTYnXG4gICAgICAgIH0sXG4gICAgICAgIEJlZWZ5Q29tbWl0bWVudDoge1xuICAgICAgICAgICAgcGF5bG9hZDogJ0JlZWZ5UGF5bG9hZCcsXG4gICAgICAgICAgICBibG9ja051bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHZhbGlkYXRvclNldElkOiAnVmFsaWRhdG9yU2V0SWQnXG4gICAgICAgIH0sXG4gICAgICAgIEJlZWZ5SWQ6ICdbdTg7IDMzXScsXG4gICAgICAgIEJlZWZ5RXF1aXZvY2F0aW9uUHJvb2Y6IHtcbiAgICAgICAgICAgIGZpcnN0OiAnQmVlZnlWb3RlTWVzc2FnZScsXG4gICAgICAgICAgICBzZWNvbmQ6ICdCZWVmeVZvdGVNZXNzYWdlJ1xuICAgICAgICB9LFxuICAgICAgICBCZWVmeUNvbXBhY3RTaWduZWRDb21taXRtZW50OiB7XG4gICAgICAgICAgICBjb21taXRtZW50OiAnQmVlZnlDb21taXRtZW50JyxcbiAgICAgICAgICAgIHNpZ25hdHVyZXNGcm9tOiAnVmVjPHU4PicsXG4gICAgICAgICAgICB2YWxpZGF0b3JTZXRMZW46ICd1MzInLFxuICAgICAgICAgICAgc2lnbmF0dXJlc0NvbXBhY3Q6ICdWZWM8RWNkc2FTaWduYXR1cmU+J1xuICAgICAgICB9LFxuICAgICAgICBCZWVmeVNpZ25lZENvbW1pdG1lbnQ6IHtcbiAgICAgICAgICAgIGNvbW1pdG1lbnQ6ICdCZWVmeUNvbW1pdG1lbnQnLFxuICAgICAgICAgICAgc2lnbmF0dXJlczogJ1ZlYzxPcHRpb248RWNkc2FTaWduYXR1cmU+PidcbiAgICAgICAgfSxcbiAgICAgICAgQmVlZnlWZXJzaW9uZWRGaW5hbGl0eVByb29mOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFYwOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgVjE6ICdCZWVmeUNvbXBhY3RTaWduZWRDb21taXRtZW50J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBCZWVmeU5leHRBdXRob3JpdHlTZXQ6IHtcbiAgICAgICAgICAgIGlkOiAndTY0JyxcbiAgICAgICAgICAgIGxlbjogJ3UzMicsXG4gICAgICAgICAgICByb290OiAnSDI1NidcbiAgICAgICAgfSxcbiAgICAgICAgQmVlZnlQYXlsb2FkOiAnVmVjPChCZWVmeVBheWxvYWRJZCwgQnl0ZXMpPicsXG4gICAgICAgIEJlZWZ5UGF5bG9hZElkOiAnW3U4OzJdJyxcbiAgICAgICAgQmVlZnlWb3RlTWVzc2FnZToge1xuICAgICAgICAgICAgY29tbWl0bWVudDogJ0JlZWZ5Q29tbWl0bWVudCcsXG4gICAgICAgICAgICBpZDogJ0F1dGhvcml0eUlkJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogJ1NpZ25hdHVyZSdcbiAgICAgICAgfSxcbiAgICAgICAgTW1yUm9vdEhhc2g6ICdIMjU2JyxcbiAgICAgICAgVmFsaWRhdG9yU2V0SWQ6ICd1NjQnLFxuICAgICAgICBWYWxpZGF0b3JTZXQ6IHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6ICdWZWM8QXV0aG9yaXR5SWQ+JyxcbiAgICAgICAgICAgIGlkOiAnVmFsaWRhdG9yU2V0SWQnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBnZXRGaW5hbGl6ZWRIZWFkOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBoYXNoIG9mIHRoZSBsYXRlc3QgQkVFRlkgZmluYWxpemVkIGJsb2NrIGFzIHNlZW4gYnkgdGhpcyBjbGllbnQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0gyNTYnXG4gICAgfSxcbiAgICBzdWJzY3JpYmVKdXN0aWZpY2F0aW9uczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJsb2NrIG1vc3QgcmVjZW50bHkgZmluYWxpemVkIGJ5IEJFRUZZLCBhbG9uZ3NpZGUgaXRzIGp1c3RpZmljYXRpb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgcHVic3ViOiBbXG4gICAgICAgICAgICAnanVzdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgJ3N1YnNjcmliZUp1c3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICd1bnN1YnNjcmliZUp1c3RpZmljYXRpb25zJ1xuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQmVlZnlWZXJzaW9uZWRGaW5hbGl0eVByb29mJ1xuICAgIH1cbn07XG4iLCJjb25zdCBCRUVGWV9WMV9WMyA9IHtcbiAgICBiZWVmeV9nZW5lc2lzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBibG9jayBudW1iZXIgd2hlcmUgQkVFRlkgY29uc2Vuc3VzIGlzIGVuYWJsZWQvc3RhcnRlZCcsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdPcHRpb248QmxvY2tOdW1iZXI+J1xuICAgIH0sXG4gICAgZ2VuZXJhdGVfa2V5X293bmVyc2hpcF9wcm9vZjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlcyBhIHByb29mIG9mIGtleSBvd25lcnNoaXAgZm9yIHRoZSBnaXZlbiBhdXRob3JpdHkgaW4gdGhlIGdpdmVuIHNldC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2V0SWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWYWxpZGF0b3JTZXRJZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2F1dGhvcml0eUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQXV0aG9yaXR5SWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248T3BhcXVlS2V5T3duZXJzaGlwUHJvb2Y+J1xuICAgIH0sXG4gICAgc3VibWl0X3JlcG9ydF9lcXVpdm9jYXRpb25fdW5zaWduZWRfZXh0cmluc2ljOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU3VibWl0cyBhbiB1bnNpZ25lZCBleHRyaW5zaWMgdG8gcmVwb3J0IGFuIGVxdWl2b2NhdGlvbi4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXF1aXZvY2F0aW9uUHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCZWVmeUVxdWl2b2NhdGlvblByb29mJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5T3duZXJQcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wYXF1ZUtleU93bmVyc2hpcFByb29mJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPE51bGw+J1xuICAgIH0sXG4gICAgdmFsaWRhdG9yX3NldDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiB0aGUgY3VycmVudCBhY3RpdmUgQkVFRlkgdmFsaWRhdG9yIHNldCcsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdPcHRpb248VmFsaWRhdG9yU2V0PidcbiAgICB9XG59O1xuY29uc3QgQkVFRllfTU1SX1YxID0ge1xuICAgIGF1dGhvcml0eV9zZXRfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgQkVFRlkgYXV0aG9yaXR5IHNldCBwcm9vZi4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnQmVlZnlBdXRob3JpdHlTZXQnXG4gICAgfSxcbiAgICBuZXh0X2F1dGhvcml0eV9zZXRfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIG5leHQvcXVldWVkIEJFRUZZIGF1dGhvcml0eSBzZXQgcHJvb2YuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0JlZWZ5TmV4dEF1dGhvcml0eVNldCdcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgQmVlZnlBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczogQkVFRllfVjFfVjMsXG4gICAgICAgICAgICB2ZXJzaW9uOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IEJFRUZZX1YxX1YzLFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiBCRUVGWV9WMV9WMyxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF0sXG4gICAgQmVlZnlNbXJBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczogQkVFRllfTU1SX1YxLFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBCZW5jaG1hcmtCYXRjaDoge1xuICAgICAgICAgICAgcGFsbGV0OiAnVGV4dCcsXG4gICAgICAgICAgICBpbnN0YW5jZTogJ1RleHQnLFxuICAgICAgICAgICAgYmVuY2htYXJrOiAnVGV4dCcsXG4gICAgICAgICAgICByZXN1bHRzOiAnVmVjPEJlbmNobWFya1Jlc3VsdD4nXG4gICAgICAgIH0sXG4gICAgICAgIEJlbmNobWFya0NvbmZpZzoge1xuICAgICAgICAgICAgcGFsbGV0OiAnQnl0ZXMnLFxuICAgICAgICAgICAgYmVuY2htYXJrOiAnQnl0ZXMnLFxuICAgICAgICAgICAgc2VsZWN0ZWRDb21wb25lbnRzOiAnVmVjPChCZW5jaG1hcmtQYXJhbWV0ZXIsIHUzMik+JyxcbiAgICAgICAgICAgIHZlcmlmeTogJ2Jvb2wnLFxuICAgICAgICAgICAgaW50ZXJuYWxSZXBlYXRzOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBCZW5jaG1hcmtMaXN0OiB7XG4gICAgICAgICAgICBwYWxsZXQ6ICdCeXRlcycsXG4gICAgICAgICAgICBpbnN0YW5jZTogJ0J5dGVzJyxcbiAgICAgICAgICAgIGJlbmNobWFya3M6ICdWZWM8QmVuY2htYXJrTWV0YWRhdGE+J1xuICAgICAgICB9LFxuICAgICAgICBCZW5jaG1hcmtNZXRhZGF0YToge1xuICAgICAgICAgICAgbmFtZTogJ0J5dGVzJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6ICdWZWM8KEJlbmNobWFya1BhcmFtZXRlciwgdTMyLCB1MzIpPidcbiAgICAgICAgfSxcbiAgICAgICAgQmVuY2htYXJrUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICBfZW51bTogWydhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJywgJ2snLCAnbCcsICdtJywgJ24nLCAnbycsICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onXVxuICAgICAgICB9LFxuICAgICAgICBCZW5jaG1hcmtSZXN1bHQ6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHM6ICdWZWM8KEJlbmNobWFya1BhcmFtZXRlciwgdTMyKT4nLFxuICAgICAgICAgICAgZXh0cmluc2ljVGltZTogJ3UxMjgnLFxuICAgICAgICAgICAgc3RvcmFnZVJvb3RUaW1lOiAndTEyOCcsXG4gICAgICAgICAgICByZWFkczogJ3UzMicsXG4gICAgICAgICAgICByZXBlYXRSZWFkczogJ3UzMicsXG4gICAgICAgICAgICB3cml0ZXM6ICd1MzInLFxuICAgICAgICAgICAgcmVwZWF0V3JpdGVzOiAndTMyJyxcbiAgICAgICAgICAgIHByb29mU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBiZW5jaEtleXM6ICdWZWM8KFZlYzx1OD4sIHUzMiwgdTMyLCBib29sKT4nXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgQmVuY2htYXJrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBiZW5jaG1hcmtfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGJlbmNobWFyayBtZXRhZGF0YSBhdmFpbGFibGUgZm9yIHRoaXMgcnVudGltZS4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXh0cmEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnKFZlYzxCZW5jaG1hcmtMaXN0PiwgVmVjPFN0b3JhZ2VJbmZvPiknXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaF9iZW5jaG1hcms6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEaXNwYXRjaCB0aGUgZ2l2ZW4gYmVuY2htYXJrLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb25maWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCZW5jaG1hcmtDb25maWcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdSZXN1bHQ8VmVjPEJlbmNobWFya0JhdGNoPiwgVGV4dD4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgQ2hlY2tJbmhlcmVudHNSZXN1bHQ6IHtcbiAgICAgICAgICAgIG9rYXk6ICdib29sJyxcbiAgICAgICAgICAgIGZhdGFsRXJyb3I6ICdib29sJyxcbiAgICAgICAgICAgIGVycm9yczogJ0luaGVyZW50RGF0YSdcbiAgICAgICAgfSxcbiAgICAgICAgSW5oZXJlbnREYXRhOiB7XG4gICAgICAgICAgICBkYXRhOiAnQlRyZWVNYXA8SW5oZXJlbnRJZGVudGlmaWVyLCBCeXRlcz4nXG4gICAgICAgIH0sXG4gICAgICAgIEluaGVyZW50SWRlbnRpZmllcjogJ1t1ODsgOF0nXG4gICAgfVxufTtcbiIsImNvbnN0IEJCX1YyX1RPX1Y0ID0ge1xuICAgIC8vIHRoaXMgd2FzIHJlbW92ZWQgYWZ0ZXIgVjRcbiAgICByYW5kb21fc2VlZDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGEgcmFuZG9tIHNlZWQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgfVxufTtcbmNvbnN0IEJCX1YyX1RPX1Y1ID0ge1xuICAgIGFwcGx5X2V4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGx5IHRoZSBnaXZlbiBleHRyaW5zaWMuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4dHJpbnNpYycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0FwcGx5RXh0cmluc2ljUmVzdWx0UHJlNidcbiAgICB9XG59O1xuY29uc3QgQkJfVjJfVE9fVjYgPSB7XG4gICAgY2hlY2tfaW5oZXJlbnRzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgdGhhdCB0aGUgaW5oZXJlbnRzIGFyZSB2YWxpZC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2snLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9jaydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGEnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdJbmhlcmVudERhdGEnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdDaGVja0luaGVyZW50c1Jlc3VsdCdcbiAgICB9LFxuICAgIGluaGVyZW50X2V4dHJpbnNpY3M6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBpbmhlcmVudCBleHRyaW5zaWNzLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmhlcmVudCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0luaGVyZW50RGF0YSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxFeHRyaW5zaWM+J1xuICAgIH1cbn07XG5jb25zdCBCQl9WM19UT19WNiA9IHtcbiAgICAvLyByZW5hbWVkIGluIHYzIGZyb20gZmluYWxpemVfYmxvY2tcbiAgICBmaW5hbGl6ZV9ibG9jazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0ZpbmlzaCB0aGUgY3VycmVudCBibG9jay4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBCbG9ja0J1aWxkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGFwcGx5X2V4dHJpbnNpYzoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGx5IHRoZSBnaXZlbiBleHRyaW5zaWMuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2V4dHJpbnNpYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FwcGx5RXh0cmluc2ljUmVzdWx0J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uQkJfVjJfVE9fVjYsXG4gICAgICAgICAgICAgICAgLi4uQkJfVjNfVE9fVjZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAvLyBhcHBseV9leHRyaW5zaWMgcmVzdWx0IGNoYW5nZWQgaW4gNlxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y1LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y2LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YzX1RPX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLy8gcmFuZG9tX3NlZWQgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y0LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y1LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y2LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YzX1RPX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemVfYmxvY2sgcmVuYW1lZFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y0LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y2LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YzX1RPX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgZmluYWxpc2VfYmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdGaW5pc2ggdGhlIGN1cnJlbnQgYmxvY2suJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y0LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEJyaWRnZWRCbG9ja0hhc2g6ICdIMjU2JyxcbiAgICAgICAgQnJpZGdlZEJsb2NrTnVtYmVyOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICBCcmlkZ2VkSGVhZGVyOiAnSGVhZGVyJyxcbiAgICAgICAgQnJpZGdlTWVzc2FnZUlkOiAnKExhbmVJZCwgTWVzc2FnZU5vbmNlKScsXG4gICAgICAgIENhbGxPcmlnaW46IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgU291cmNlUm9vdDogJ051bGwnLFxuICAgICAgICAgICAgICAgIFRhcmdldEFjY291bnQ6ICcoQWNjb3VudElkLCBNdWx0aVNpZ25lciwgTXVsdGlTaWduYXR1cmUpJyxcbiAgICAgICAgICAgICAgICBTb3VyY2VBY2NvdW50OiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDaGFpbklkOiAnW3U4OyA0XScsXG4gICAgICAgIERlbGl2ZXJlZE1lc3NhZ2VzOiB7XG4gICAgICAgICAgICBiZWdpbjogJ01lc3NhZ2VOb25jZScsXG4gICAgICAgICAgICBlbmQ6ICdNZXNzYWdlTm9uY2UnLFxuICAgICAgICAgICAgLy8gcHViIHR5cGUgRGlzcGF0Y2hSZXN1bHRzQml0VmVjID0gQml0VmVjPE1zYjAsIHU4PjtcbiAgICAgICAgICAgIGRpc3BhdGNoUmVzdWx0czogJ0JpdFZlYydcbiAgICAgICAgfSxcbiAgICAgICAgRGlzcGF0Y2hGZWVQYXltZW50OiB7XG4gICAgICAgICAgICBfZW51bTogWydBdFNvdXJjZUNoYWluJywgJ0F0VGFyZ2V0Q2hhaW4nXVxuICAgICAgICB9LFxuICAgICAgICBJbmJvdW5kTGFuZURhdGE6IHtcbiAgICAgICAgICAgIHJlbGF5ZXJzOiAnVmVjPFVucmV3YXJkZWRSZWxheWVyPicsXG4gICAgICAgICAgICBsYXN0Q29uZmlybWVkTm9uY2U6ICdNZXNzYWdlTm9uY2UnXG4gICAgICAgIH0sXG4gICAgICAgIEluYm91bmRSZWxheWVyOiAnQWNjb3VudElkJyxcbiAgICAgICAgSW5pdGlhbGl6YXRpb25EYXRhOiB7XG4gICAgICAgICAgICBoZWFkZXI6ICdIZWFkZXInLFxuICAgICAgICAgICAgYXV0aG9yaXR5TGlzdDogJ0F1dGhvcml0eUxpc3QnLFxuICAgICAgICAgICAgc2V0SWQ6ICdTZXRJZCcsXG4gICAgICAgICAgICBpc0hhbHRlZDogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIExhbmVJZDogJ1t1ODsgNF0nLFxuICAgICAgICBNZXNzYWdlRGF0YToge1xuICAgICAgICAgICAgcGF5bG9hZDogJ0J5dGVzJyxcbiAgICAgICAgICAgIGZlZTogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIE1lc3NhZ2VzRGVsaXZlcnlQcm9vZk9mOiB7XG4gICAgICAgICAgICBicmlkZ2VkSGVhZGVySGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICBzdG9yYWdlUHJvb2Y6ICdWZWM8Qnl0ZXM+JyxcbiAgICAgICAgICAgIGxhbmU6ICdMYW5lSWQnXG4gICAgICAgIH0sXG4gICAgICAgIE1lc3NhZ2VLZXk6IHtcbiAgICAgICAgICAgIGxhbmVJZDogJ0xhbmVJZCcsXG4gICAgICAgICAgICBub25jZTogJ01lc3NhZ2VOb25jZSdcbiAgICAgICAgfSxcbiAgICAgICAgTWVzc2FnZU5vbmNlOiAndTY0JyxcbiAgICAgICAgTWVzc2FnZXNQcm9vZk9mOiB7XG4gICAgICAgICAgICBicmlkZ2VkSGVhZGVySGFzaDogJ0JyaWRnZWRCbG9ja0hhc2gnLFxuICAgICAgICAgICAgc3RvcmFnZVByb29mOiAnVmVjPEJ5dGVzPicsXG4gICAgICAgICAgICBsYW5lOiAnTGFuZUlkJyxcbiAgICAgICAgICAgIG5vbmNlc1N0YXJ0OiAnTWVzc2FnZU5vbmNlJyxcbiAgICAgICAgICAgIG5vbmNlc0VuZDogJ01lc3NhZ2VOb25jZSdcbiAgICAgICAgfSxcbiAgICAgICAgT3BlcmF0aW5nTW9kZToge1xuICAgICAgICAgICAgX2VudW06IFsnTm9ybWFsJywgJ1JlamVjdGluZ091dGJvdW5kTWVzc2FnZXMnLCAnSGFsdGVkJ11cbiAgICAgICAgfSxcbiAgICAgICAgT3V0Ym91bmRMYW5lRGF0YToge1xuICAgICAgICAgICAgb2xkZXN0VW5wcnVuZWROb25jZTogJ01lc3NhZ2VOb25jZScsXG4gICAgICAgICAgICBsYXRlc3RSZWNlaXZlZE5vbmNlOiAnTWVzc2FnZU5vbmNlJyxcbiAgICAgICAgICAgIGxhdGVzdEdlbmVyYXRlZE5vbmNlOiAnTWVzc2FnZU5vbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBPdXRib3VuZE1lc3NhZ2VGZWU6ICdCYWxhbmNlJyxcbiAgICAgICAgT3V0Ym91bmRQYXlsb2FkOiB7XG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICB3ZWlnaHQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgb3JpZ2luOiAnQ2FsbE9yaWdpbicsXG4gICAgICAgICAgICBkaXNwYXRjaEZlZVBheW1lbnQ6ICdEaXNwYXRjaEZlZVBheW1lbnQnLFxuICAgICAgICAgICAgY2FsbDogJ0J5dGVzJ1xuICAgICAgICB9LFxuICAgICAgICBQYXJhbWV0ZXI6ICdOdWxsJyxcbiAgICAgICAgUmVsYXllcklkOiAnQWNjb3VudElkJyxcbiAgICAgICAgVW5yZXdhcmRlZFJlbGF5ZXI6IHtcbiAgICAgICAgICAgIHJlbGF5ZXI6ICdSZWxheWVySWQnLFxuICAgICAgICAgICAgbWVzc2FnZXM6ICdEZWxpdmVyZWRNZXNzYWdlcydcbiAgICAgICAgfSxcbiAgICAgICAgVW5yZXdhcmRlZFJlbGF5ZXJzU3RhdGU6IHtcbiAgICAgICAgICAgIHVucmV3YXJkZWRSZWxheWVyX0VudHJpZXM6ICdNZXNzYWdlTm9uY2UnLFxuICAgICAgICAgICAgbWVzc2FnZXNJbk9sZGVzdEVudHJ5OiAnTWVzc2FnZU5vbmNlJyxcbiAgICAgICAgICAgIHRvdGFsTWVzc2FnZXM6ICdNZXNzYWdlTm9uY2UnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICBCbG9ja0hhc2g6ICdIYXNoJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGdldEJsb2NrOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IGhlYWRlciBhbmQgYm9keSBvZiBhIHJlbGF5IGNoYWluIGJsb2NrJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnU2lnbmVkQmxvY2snXG4gICAgfSxcbiAgICBnZXRCbG9ja0hhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGJsb2NrIGhhc2ggZm9yIGEgc3BlY2lmaWMgYmxvY2snLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9ja051bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgIH0sXG4gICAgZ2V0RmluYWxpemVkSGVhZDoge1xuICAgICAgICBhbGlhczogWydjaGFpbl9nZXRGaW5hbGlzZWRIZWFkJ10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IGhhc2ggb2YgdGhlIGxhc3QgZmluYWxpemVkIGJsb2NrIGluIHRoZSBjYW5vbiBjaGFpbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgfSxcbiAgICBnZXRIZWFkZXI6IHtcbiAgICAgICAgYWxpYXM6IFsnY2hhaW5fZ2V0SGVhZCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgaGVhZGVyIGZvciBhIHNwZWNpZmljIGJsb2NrJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgIH0sXG4gICAgc3Vic2NyaWJlQWxsSGVhZHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIG5ld2VzdCBoZWFkZXIgdmlhIHN1YnNjcmlwdGlvbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHB1YnN1YjogW1xuICAgICAgICAgICAgJ2FsbEhlYWQnLFxuICAgICAgICAgICAgJ3N1YnNjcmliZUFsbEhlYWRzJyxcbiAgICAgICAgICAgICd1bnN1YnNjcmliZUFsbEhlYWRzJ1xuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgIH0sXG4gICAgc3Vic2NyaWJlRmluYWxpemVkSGVhZHM6IHtcbiAgICAgICAgYWxpYXM6IFsnY2hhaW5fc3Vic2NyaWJlRmluYWxpc2VkSGVhZHMnLCAnY2hhaW5fdW5zdWJzY3JpYmVGaW5hbGlzZWRIZWFkcyddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgYmVzdCBmaW5hbGl6ZWQgaGVhZGVyIHZpYSBzdWJzY3JpcHRpb24nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICBwdWJzdWI6IFtcbiAgICAgICAgICAgICdmaW5hbGl6ZWRIZWFkJyxcbiAgICAgICAgICAgICdzdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcycsXG4gICAgICAgICAgICAndW5zdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcydcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICB9LFxuICAgIHN1YnNjcmliZU5ld0hlYWRzOiB7XG4gICAgICAgIGFsaWFzOiBbJ2NoYWluX3Vuc3Vic2NyaWJlTmV3SGVhZHMnLCAnc3Vic2NyaWJlX25ld0hlYWQnLCAndW5zdWJzY3JpYmVfbmV3SGVhZCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgYmVzdCBoZWFkZXIgdmlhIHN1YnNjcmlwdGlvbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIC8vIE5PVEUgVGhlc2Ugc3RpbGwgaGFzIHRoZSBhbGlhc3NlZCB2ZXJzaW9uLCBjb21wYXRpYmxlIHdpdGggMS54XG4gICAgICAgIHB1YnN1YjogW1xuICAgICAgICAgICAgJ25ld0hlYWQnLFxuICAgICAgICAgICAgJ3N1YnNjcmliZU5ld0hlYWQnLFxuICAgICAgICAgICAgJ3Vuc3Vic2NyaWJlTmV3SGVhZCdcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICAvLyBTdG9yYWdlS2V5IGV4dGVuZHMgQnl0ZXNcbiAgICAgICAgUHJlZml4ZWRTdG9yYWdlS2V5OiAnU3RvcmFnZUtleSdcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBnZXRLZXlzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUga2V5cyB3aXRoIHByZWZpeCBmcm9tIGEgY2hpbGQgc3RvcmFnZSwgbGVhdmUgZW1wdHkgdG8gZ2V0IGFsbCB0aGUga2V5cycsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZEtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ByZWZpeGVkU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ByZWZpeCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgIH0sXG4gICAgZ2V0S2V5c1BhZ2VkOiB7XG4gICAgICAgIGFsaWFzOiBbJ2NoaWxkc3RhdGVfZ2V0S2V5c1BhZ2VkQXQnXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBrZXlzIHdpdGggcHJlZml4IGZyb20gYSBjaGlsZCBzdG9yYWdlIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0JyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkS2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHJlZml4ZWRTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJlZml4JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NvdW50JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdzdGFydEtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYSBjaGlsZCBzdG9yYWdlIGVudHJ5IGF0IGEgc3BlY2lmaWMgYmxvY2sgc3RhdGUnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGRLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcmVmaXhlZFN0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxTdG9yYWdlRGF0YT4nXG4gICAgfSxcbiAgICBnZXRTdG9yYWdlRW50cmllczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgY2hpbGQgc3RvcmFnZSBlbnRyaWVzIGZvciBtdWx0aXBsZSBrZXlzIGF0IGEgc3BlY2lmaWMgYmxvY2sgc3RhdGUnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGRLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcmVmaXhlZFN0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXlzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxPcHRpb248U3RvcmFnZURhdGE+PidcbiAgICB9LFxuICAgIGdldFN0b3JhZ2VIYXNoOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgaGFzaCBvZiBhIGNoaWxkIHN0b3JhZ2UgZW50cnkgYXQgYSBibG9jayBzdGF0ZScsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZEtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ByZWZpeGVkU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPEhhc2g+J1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZVNpemU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzaXplIG9mIGEgY2hpbGQgc3RvcmFnZSBlbnRyeSBhdCBhIGJsb2NrIHN0YXRlJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkS2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHJlZml4ZWRTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248dTY0PidcbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgU3RhdGVtZW50S2luZDoge1xuICAgICAgICAgICAgX2VudW06IFsnUmVndWxhcicsICdTYWZ0J11cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBDb2xsZWN0aXZlT3JpZ2luOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE1lbWJlcnM6ICcoTWVtYmVyQ291bnQsIE1lbWJlckNvdW50KScsXG4gICAgICAgICAgICAgICAgTWVtYmVyOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBNZW1iZXJDb3VudDogJ3UzMicsXG4gICAgICAgIFByb3Bvc2FsSW5kZXg6ICd1MzInLFxuICAgICAgICBWb3Rlc1RvMjMwOiB7XG4gICAgICAgICAgICBpbmRleDogJ1Byb3Bvc2FsSW5kZXgnLFxuICAgICAgICAgICAgdGhyZXNob2xkOiAnTWVtYmVyQ291bnQnLFxuICAgICAgICAgICAgYXllczogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgICAgIG5heXM6ICdWZWM8QWNjb3VudElkPidcbiAgICAgICAgfSxcbiAgICAgICAgVm90ZXM6IHtcbiAgICAgICAgICAgIGluZGV4OiAnUHJvcG9zYWxJbmRleCcsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6ICdNZW1iZXJDb3VudCcsXG4gICAgICAgICAgICBheWVzOiAnVmVjPEFjY291bnRJZD4nLFxuICAgICAgICAgICAgbmF5czogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgICAgIGVuZDogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEF1dGhvcml0eUlkOiAnQWNjb3VudElkJyxcbiAgICAgICAgUmF3VlJGT3V0cHV0OiAnW3U4OyAzMl0nXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjLmpzJztcbmltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFsaXZlQ29udHJhY3RJbmZvOiB7XG4gICAgICAgICAgICB0cmllSWQ6ICdUcmllSWQnLFxuICAgICAgICAgICAgc3RvcmFnZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgcGFpckNvdW50OiAndTMyJyxcbiAgICAgICAgICAgIGNvZGVIYXNoOiAnQ29kZUhhc2gnLFxuICAgICAgICAgICAgcmVudEFsbG93YW5jZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgcmVudFBhaWQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGRlZHVjdEJsb2NrOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgbGFzdFdyaXRlOiAnT3B0aW9uPEJsb2NrTnVtYmVyPicsXG4gICAgICAgICAgICBfcmVzZXJ2ZWQ6ICdPcHRpb248TnVsbD4nXG4gICAgICAgIH0sXG4gICAgICAgIENvZGVIYXNoOiAnSGFzaCcsXG4gICAgICAgIENvZGVTb3VyY2U6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgVXBsb2FkOiAnQnl0ZXMnLFxuICAgICAgICAgICAgICAgIEV4aXN0aW5nOiAnSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgQ29kZVVwbG9hZFJlcXVlc3Q6IHtcbiAgICAgICAgICAgIG9yaWdpbjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBjb2RlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgc3RvcmFnZURlcG9zaXRMaW1pdDogJ09wdGlvbjxCYWxhbmNlPidcbiAgICAgICAgfSxcbiAgICAgICAgQ29kZVVwbG9hZFJlc3VsdDogJ1Jlc3VsdDxDb2RlVXBsb2FkUmVzdWx0VmFsdWUsIERpc3BhdGNoRXJyb3I+JyxcbiAgICAgICAgQ29kZVVwbG9hZFJlc3VsdFZhbHVlOiB7XG4gICAgICAgICAgICBjb2RlSGFzaDogJ0NvZGVIYXNoJyxcbiAgICAgICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdENhbGxSZXF1ZXN0OiB7XG4gICAgICAgICAgICBvcmlnaW46ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZGVzdDogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB2YWx1ZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgZ2FzTGltaXQ6ICd1NjQnLFxuICAgICAgICAgICAgc3RvcmFnZURlcG9zaXRMaW1pdDogJ09wdGlvbjxCYWxhbmNlPicsXG4gICAgICAgICAgICBpbnB1dERhdGE6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RFeGVjUmVzdWx0U3VjY2Vzc1RvMjU1OiB7XG4gICAgICAgICAgICBzdGF0dXM6ICd1OCcsXG4gICAgICAgICAgICBkYXRhOiAnUmF3J1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdEV4ZWNSZXN1bHRUbzI1NToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBTdWNjZXNzOiAnQ29udHJhY3RFeGVjUmVzdWx0U3VjY2Vzc1RvMjU1JyxcbiAgICAgICAgICAgICAgICBFcnJvcjogJ051bGwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0RXhlY1Jlc3VsdFN1Y2Nlc3NUbzI2MDoge1xuICAgICAgICAgICAgZmxhZ3M6ICdDb250cmFjdFJldHVybkZsYWdzJyxcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcycsXG4gICAgICAgICAgICBnYXNDb25zdW1lZDogJ3U2NCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RFeGVjUmVzdWx0VG8yNjA6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgU3VjY2VzczogJ0NvbnRyYWN0RXhlY1Jlc3VsdFN1Y2Nlc3NUbzI2MCcsXG4gICAgICAgICAgICAgICAgRXJyb3I6ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdEV4ZWNSZXN1bHRPazoge1xuICAgICAgICAgICAgZmxhZ3M6ICdDb250cmFjdFJldHVybkZsYWdzJyxcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RFeGVjUmVzdWx0UmVzdWx0OiAnUmVzdWx0PENvbnRyYWN0RXhlY1Jlc3VsdE9rLCBEaXNwYXRjaEVycm9yPicsXG4gICAgICAgIENvbnRyYWN0RXhlY1Jlc3VsdFRvMjY3OiB7XG4gICAgICAgICAgICBnYXNDb25zdW1lZDogJ3U2NCcsXG4gICAgICAgICAgICBkZWJ1Z01lc3NhZ2U6ICdUZXh0JyxcbiAgICAgICAgICAgIHJlc3VsdDogJ0NvbnRyYWN0RXhlY1Jlc3VsdFJlc3VsdCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RFeGVjUmVzdWx0OiB7XG4gICAgICAgICAgICBnYXNDb25zdW1lZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBnYXNSZXF1aXJlZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBzdG9yYWdlRGVwb3NpdDogJ1N0b3JhZ2VEZXBvc2l0JyxcbiAgICAgICAgICAgIGRlYnVnTWVzc2FnZTogJ1RleHQnLFxuICAgICAgICAgICAgcmVzdWx0OiAnQ29udHJhY3RFeGVjUmVzdWx0UmVzdWx0J1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdEV4ZWNSZXN1bHRVNjQ6IHtcbiAgICAgICAgICAgIGdhc0NvbnN1bWVkOiAndTY0JyxcbiAgICAgICAgICAgIGdhc1JlcXVpcmVkOiAndTY0JyxcbiAgICAgICAgICAgIHN0b3JhZ2VEZXBvc2l0OiAnU3RvcmFnZURlcG9zaXQnLFxuICAgICAgICAgICAgZGVidWdNZXNzYWdlOiAnVGV4dCcsXG4gICAgICAgICAgICByZXN1bHQ6ICdDb250cmFjdEV4ZWNSZXN1bHRSZXN1bHQnXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0SW5mbzoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBBbGl2ZTogJ0FsaXZlQ29udHJhY3RJbmZvJyxcbiAgICAgICAgICAgICAgICBUb21ic3RvbmU6ICdUb21ic3RvbmVDb250cmFjdEluZm8nXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0Q2FsbEZsYWdzOiB7XG4gICAgICAgICAgICBfc2V0OiB7XG4gICAgICAgICAgICAgICAgX2JpdExlbmd0aDogMzIsXG4gICAgICAgICAgICAgICAgRm9yd2FyZElucHV0OiAxLFxuICAgICAgICAgICAgICAgIENsb25lSW5wdXQ6IDIsXG4gICAgICAgICAgICAgICAgVGFpbENhbGw6IDQsXG4gICAgICAgICAgICAgICAgQWxsb3dSZWVudHJ5OiA4XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0UmV0dXJuRmxhZ3M6IHtcbiAgICAgICAgICAgIF9zZXQ6IHtcbiAgICAgICAgICAgICAgICBfYml0TGVuZ3RoOiAzMixcbiAgICAgICAgICAgICAgICBSZXZlcnQ6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RTdG9yYWdlS2V5OiAnW3U4OyAzMl0nLFxuICAgICAgICBEZWxldGVkQ29udHJhY3Q6IHtcbiAgICAgICAgICAgIHBhaXJDb3VudDogJ3UzMicsXG4gICAgICAgICAgICB0cmllSWQ6ICdUcmllSWQnXG4gICAgICAgIH0sXG4gICAgICAgIEV4ZWNSZXR1cm5WYWx1ZToge1xuICAgICAgICAgICAgZmxhZ3M6ICdDb250cmFjdFJldHVybkZsYWdzJyxcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgR2FzOiAndTY0JyxcbiAgICAgICAgSG9zdEZuV2VpZ2h0c1RvMjY0OiB7XG4gICAgICAgICAgICBjYWxsZXI6ICdXZWlnaHQnLFxuICAgICAgICAgICAgYWRkcmVzczogJ1dlaWdodCcsXG4gICAgICAgICAgICBnYXNMZWZ0OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGJhbGFuY2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgdmFsdWVUcmFuc2ZlcnJlZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBtaW5pbXVtQmFsYW5jZTogJ1dlaWdodCcsXG4gICAgICAgICAgICB0b21ic3RvbmVEZXBvc2l0OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHJlbnRBbGxvd2FuY2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgYmxvY2tOdW1iZXI6ICdXZWlnaHQnLFxuICAgICAgICAgICAgbm93OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHdlaWdodFRvRmVlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGdhczogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnB1dDogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnB1dFBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmV0dXJuOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHJldHVyblBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgdGVybWluYXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHJlc3RvcmVUbzogJ1dlaWdodCcsXG4gICAgICAgICAgICByZXN0b3JlVG9QZXJEZWx0YTogJ1dlaWdodCcsXG4gICAgICAgICAgICByYW5kb206ICdXZWlnaHQnLFxuICAgICAgICAgICAgZGVwb3NpdEV2ZW50OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGRlcG9zaXRFdmVudFBlclRvcGljOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGRlcG9zaXRFdmVudFBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgc2V0UmVudEFsbG93YW5jZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBzZXRTdG9yYWdlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHNldFN0b3JhZ2VQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNsZWFyU3RvcmFnZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBnZXRTdG9yYWdlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGdldFN0b3JhZ2VQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHRyYW5zZmVyOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNhbGw6ICdXZWlnaHQnLFxuICAgICAgICAgICAgY2FsbFRyYW5zZmVyU3VyY2hhcmdlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNhbGxQZXJJbnB1dEJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgY2FsbFBlck91dHB1dEJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5zdGFudGlhdGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5zdGFudGlhdGVQZXJJbnB1dEJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5zdGFudGlhdGVQZXJPdXRwdXRCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hTaGEyMjU2OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hTaGEyMjU2UGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBoYXNoS2VjY2FrMjU2OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hLZWNjYWsyNTZQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hCbGFrZTIyNTY6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaGFzaEJsYWtlMjI1NlBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaGFzaEJsYWtlMjEyODogJ1dlaWdodCcsXG4gICAgICAgICAgICBoYXNoQmxha2UyMTI4UGVyQnl0ZTogJ1dlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgSG9zdEZuV2VpZ2h0czoge1xuICAgICAgICAgICAgY2FsbGVyOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGFkZHJlc3M6ICdXZWlnaHQnLFxuICAgICAgICAgICAgZ2FzTGVmdDogJ1dlaWdodCcsXG4gICAgICAgICAgICBiYWxhbmNlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHZhbHVlVHJhbnNmZXJyZWQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgbWluaW11bUJhbGFuY2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgdG9tYnN0b25lRGVwb3NpdDogJ1dlaWdodCcsXG4gICAgICAgICAgICByZW50QWxsb3dhbmNlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIG5vdzogJ1dlaWdodCcsXG4gICAgICAgICAgICB3ZWlnaHRUb0ZlZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBnYXM6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5wdXQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5wdXRQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHJldHVybjogJ1dlaWdodCcsXG4gICAgICAgICAgICByZXR1cm5QZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHRlcm1pbmF0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICB0ZXJtaW5hdGVQZXJDb2RlQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICByZXN0b3JlVG86ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmVzdG9yZVRvUGVyQ2FsbGVyQ29kZUJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmVzdG9yZVRvUGVyVG9tYnN0b25lQ29kZUJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmVzdG9yZVRvUGVyRGVsdGE6ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmFuZG9tOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGRlcG9zaXRFdmVudDogJ1dlaWdodCcsXG4gICAgICAgICAgICBkZXBvc2l0RXZlbnRQZXJUb3BpYzogJ1dlaWdodCcsXG4gICAgICAgICAgICBkZXBvc2l0RXZlbnRQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHNldFJlbnRBbGxvd2FuY2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgc2V0U3RvcmFnZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBzZXRTdG9yYWdlUGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBjbGVhclN0b3JhZ2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgZ2V0U3RvcmFnZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBnZXRTdG9yYWdlUGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICB0cmFuc2ZlcjogJ1dlaWdodCcsXG4gICAgICAgICAgICBjYWxsOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNhbGxQZXJDb2RlQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBjYWxsVHJhbnNmZXJTdXJjaGFyZ2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgY2FsbFBlcklucHV0Qnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBjYWxsUGVyT3V0cHV0Qnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnN0YW50aWF0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnN0YW50aWF0ZVBlckNvZGVCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGluc3RhbnRpYXRlUGVySW5wdXRCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGluc3RhbnRpYXRlUGVyT3V0cHV0Qnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnN0YW50aWF0ZVBlclNhbHRCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hTaGEyMjU2OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hTaGEyMjU2UGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBoYXNoS2VjY2FrMjU2OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hLZWNjYWsyNTZQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hCbGFrZTIyNTY6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaGFzaEJsYWtlMjI1NlBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaGFzaEJsYWtlMjEyODogJ1dlaWdodCcsXG4gICAgICAgICAgICBoYXNoQmxha2UyMTI4UGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICByZW50UGFyYW1zOiAnV2VpZ2h0J1xuICAgICAgICB9LFxuICAgICAgICBJbnN0YW50aWF0ZVJlcXVlc3RWMToge1xuICAgICAgICAgICAgb3JpZ2luOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBnYXNMaW1pdDogJ0dhcycsXG4gICAgICAgICAgICBjb2RlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJyxcbiAgICAgICAgICAgIHNhbHQ6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgSW5zdGFudGlhdGVSZXF1ZXN0VjI6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ0luc3RhbnRpYXRlUmVxdWVzdFYxJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB2YWx1ZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgZ2FzTGltaXQ6ICdHYXMnLFxuICAgICAgICAgICAgc3RvcmFnZURlcG9zaXRMaW1pdDogJ09wdGlvbjxCYWxhbmNlPicsXG4gICAgICAgICAgICBjb2RlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJyxcbiAgICAgICAgICAgIHNhbHQ6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgSW5zdGFudGlhdGVSZXF1ZXN0OiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdJbnN0YW50aWF0ZVJlcXVlc3RWMicsXG4gICAgICAgICAgICBvcmlnaW46ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgdmFsdWU6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGdhc0xpbWl0OiAnR2FzJyxcbiAgICAgICAgICAgIHN0b3JhZ2VEZXBvc2l0TGltaXQ6ICdPcHRpb248QmFsYW5jZT4nLFxuICAgICAgICAgICAgY29kZTogJ0NvZGVTb3VyY2UnLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJyxcbiAgICAgICAgICAgIHNhbHQ6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RJbnN0YW50aWF0ZVJlc3VsdFRvMjY3OiAnUmVzdWx0PEluc3RhbnRpYXRlUmV0dXJuVmFsdWVUbzI2NywgTnVsbD4nLFxuICAgICAgICBDb250cmFjdEluc3RhbnRpYXRlUmVzdWx0VG8yOTk6ICdSZXN1bHQ8SW5zdGFudGlhdGVSZXR1cm5WYWx1ZU9rLCBOdWxsPicsXG4gICAgICAgIENvbnRyYWN0SW5zdGFudGlhdGVSZXN1bHQ6IHtcbiAgICAgICAgICAgIGdhc0NvbnN1bWVkOiAnV2VpZ2h0VjInLFxuICAgICAgICAgICAgZ2FzUmVxdWlyZWQ6ICdXZWlnaHRWMicsXG4gICAgICAgICAgICBzdG9yYWdlRGVwb3NpdDogJ1N0b3JhZ2VEZXBvc2l0JyxcbiAgICAgICAgICAgIGRlYnVnTWVzc2FnZTogJ1RleHQnLFxuICAgICAgICAgICAgcmVzdWx0OiAnSW5zdGFudGlhdGVSZXR1cm5WYWx1ZSdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RJbnN0YW50aWF0ZVJlc3VsdFU2NDoge1xuICAgICAgICAgICAgLy8gb25seSB0aGlzIG9uZSBjYW4gZmFpbCwgdGhlIGN1cnJlbnQgdmVyc2lvbiAoYWJvdmUpIF9zaG91bGRfIGJlIGNvcnJlY3RseVxuICAgICAgICAgICAgLy8gdmVyc2lvbmVkIG5vdywgYWthIG5vIG1vcmUgZGVwcmVjYXRlZCBSUENzIGludm9sdmVkLCBvbmx5IHJ1bnRpbWUgY2FsbHNcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ0NvbnRyYWN0SW5zdGFudGlhdGVSZXN1bHRUbzI5OScsXG4gICAgICAgICAgICBnYXNDb25zdW1lZDogJ3U2NCcsXG4gICAgICAgICAgICBnYXNSZXF1aXJlZDogJ3U2NCcsXG4gICAgICAgICAgICBzdG9yYWdlRGVwb3NpdDogJ1N0b3JhZ2VEZXBvc2l0JyxcbiAgICAgICAgICAgIGRlYnVnTWVzc2FnZTogJ1RleHQnLFxuICAgICAgICAgICAgcmVzdWx0OiAnSW5zdGFudGlhdGVSZXR1cm5WYWx1ZSdcbiAgICAgICAgfSxcbiAgICAgICAgSW5zdGFudGlhdGVSZXR1cm5WYWx1ZVRvMjY3OiB7XG4gICAgICAgICAgICByZXN1bHQ6ICdFeGVjUmV0dXJuVmFsdWUnLFxuICAgICAgICAgICAgYWNjb3VudElkOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHJlbnRQcm9qZWN0aW9uOiAnT3B0aW9uPFJlbnRQcm9qZWN0aW9uPidcbiAgICAgICAgfSxcbiAgICAgICAgSW5zdGFudGlhdGVSZXR1cm5WYWx1ZU9rOiB7XG4gICAgICAgICAgICByZXN1bHQ6ICdFeGVjUmV0dXJuVmFsdWUnLFxuICAgICAgICAgICAgYWNjb3VudElkOiAnQWNjb3VudElkJ1xuICAgICAgICB9LFxuICAgICAgICBJbnN0YW50aWF0ZVJldHVyblZhbHVlOiAnUmVzdWx0PEluc3RhbnRpYXRlUmV0dXJuVmFsdWVPaywgRGlzcGF0Y2hFcnJvcj4nLFxuICAgICAgICBJbnN0cnVjdGlvbldlaWdodHM6IHtcbiAgICAgICAgICAgIGk2NGNvbnN0OiAndTMyJyxcbiAgICAgICAgICAgIGk2NGxvYWQ6ICd1MzInLFxuICAgICAgICAgICAgaTY0c3RvcmU6ICd1MzInLFxuICAgICAgICAgICAgc2VsZWN0OiAndTMyJyxcbiAgICAgICAgICAgIHJJZjogJ3UzMicsXG4gICAgICAgICAgICBicjogJ3UzMicsXG4gICAgICAgICAgICBicklmOiAndTMyJyxcbiAgICAgICAgICAgIGJySWFibGU6ICd1MzInLFxuICAgICAgICAgICAgYnJJYWJsZVBlckVudHJ5OiAndTMyJyxcbiAgICAgICAgICAgIGNhbGw6ICd1MzInLFxuICAgICAgICAgICAgY2FsbEluZGlyZWN0OiAndTMyJyxcbiAgICAgICAgICAgIGNhbGxJbmRpcmVjdFBlclBhcmFtOiAndTMyJyxcbiAgICAgICAgICAgIGxvY2FsR2V0OiAndTMyJyxcbiAgICAgICAgICAgIGxvY2FsU2V0OiAndTMyJyxcbiAgICAgICAgICAgIGxvY2FsX3RlZTogJ3UzMicsXG4gICAgICAgICAgICBnbG9iYWxHZXQ6ICd1MzInLFxuICAgICAgICAgICAgZ2xvYmFsU2V0OiAndTMyJyxcbiAgICAgICAgICAgIG1lbW9yeUN1cnJlbnQ6ICd1MzInLFxuICAgICAgICAgICAgbWVtb3J5R3JvdzogJ3UzMicsXG4gICAgICAgICAgICBpNjRjbHo6ICd1MzInLFxuICAgICAgICAgICAgaTY0Y3R6OiAndTMyJyxcbiAgICAgICAgICAgIGk2NHBvcGNudDogJ3UzMicsXG4gICAgICAgICAgICBpNjRlcXo6ICd1MzInLFxuICAgICAgICAgICAgaTY0ZXh0ZW5kc2kzMjogJ3UzMicsXG4gICAgICAgICAgICBpNjRleHRlbmR1aTMyOiAndTMyJyxcbiAgICAgICAgICAgIGkzMndyYXBpNjQ6ICd1MzInLFxuICAgICAgICAgICAgaTY0ZXE6ICd1MzInLFxuICAgICAgICAgICAgaTY0bmU6ICd1MzInLFxuICAgICAgICAgICAgaTY0bHRzOiAndTMyJyxcbiAgICAgICAgICAgIGk2NGx0dTogJ3UzMicsXG4gICAgICAgICAgICBpNjRndHM6ICd1MzInLFxuICAgICAgICAgICAgaTY0Z3R1OiAndTMyJyxcbiAgICAgICAgICAgIGk2NGxlczogJ3UzMicsXG4gICAgICAgICAgICBpNjRsZXU6ICd1MzInLFxuICAgICAgICAgICAgaTY0Z2VzOiAndTMyJyxcbiAgICAgICAgICAgIGk2NGdldTogJ3UzMicsXG4gICAgICAgICAgICBpNjRhZGQ6ICd1MzInLFxuICAgICAgICAgICAgaTY0c3ViOiAndTMyJyxcbiAgICAgICAgICAgIGk2NG11bDogJ3UzMicsXG4gICAgICAgICAgICBpNjRkaXZzOiAndTMyJyxcbiAgICAgICAgICAgIGk2NGRpdnU6ICd1MzInLFxuICAgICAgICAgICAgaTY0cmVtczogJ3UzMicsXG4gICAgICAgICAgICBpNjRyZW11OiAndTMyJyxcbiAgICAgICAgICAgIGk2NGFuZDogJ3UzMicsXG4gICAgICAgICAgICBpNjRvcjogJ3UzMicsXG4gICAgICAgICAgICBpNjR4b3I6ICd1MzInLFxuICAgICAgICAgICAgaTY0c2hsOiAndTMyJyxcbiAgICAgICAgICAgIGk2NHNocnM6ICd1MzInLFxuICAgICAgICAgICAgaTY0c2hydTogJ3UzMicsXG4gICAgICAgICAgICBpNjRyb3RsOiAndTMyJyxcbiAgICAgICAgICAgIGk2NHJvdHI6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIExpbWl0c1RvMjY0OiB7XG4gICAgICAgICAgICBldmVudFRvcGljczogJ3UzMicsXG4gICAgICAgICAgICBzdGFja0hlaWdodDogJ3UzMicsXG4gICAgICAgICAgICBnbG9iYWxzOiAndTMyJyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6ICd1MzInLFxuICAgICAgICAgICAgbWVtb3J5UGFnZXM6ICd1MzInLFxuICAgICAgICAgICAgdGFibGVTaXplOiAndTMyJyxcbiAgICAgICAgICAgIGJyVGFibGVTaXplOiAndTMyJyxcbiAgICAgICAgICAgIHN1YmplY3RMZW46ICd1MzInLFxuICAgICAgICAgICAgY29kZVNpemU6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIExpbWl0czoge1xuICAgICAgICAgICAgZXZlbnRUb3BpY3M6ICd1MzInLFxuICAgICAgICAgICAgc3RhY2tIZWlnaHQ6ICd1MzInLFxuICAgICAgICAgICAgZ2xvYmFsczogJ3UzMicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiAndTMyJyxcbiAgICAgICAgICAgIG1lbW9yeVBhZ2VzOiAndTMyJyxcbiAgICAgICAgICAgIHRhYmxlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBiclRhYmxlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBzdWJqZWN0TGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBQcmVmYWJXYXNtTW9kdWxlOiB7XG4gICAgICAgICAgICBzY2hlZHVsZVZlcnNpb246ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgaW5pdGlhbDogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBtYXhpbXVtOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIHJlZmNvdW50OiAnQ29tcGFjdDx1NjQ+JyxcbiAgICAgICAgICAgIF9yZXNlcnZlZDogJ09wdGlvbjxOdWxsPicsXG4gICAgICAgICAgICBjb2RlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgb3JpZ2luYWxDb2RlTGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBSZW50UHJvamVjdGlvbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBFdmljdGlvbkF0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgICAgIE5vRXZpY3Rpb246ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsZVRvMjEyOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIHB1dENvZGVQZXJCeXRlQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBncm93TWVtQ29zdDogJ0dhcycsXG4gICAgICAgICAgICByZWd1bGFyT3BDb3N0OiAnR2FzJyxcbiAgICAgICAgICAgIHJldHVybkRhdGFQZXJCeXRlQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBldmVudERhdGFQZXJCeXRlQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBldmVudFBlclRvcGljQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBldmVudEJhc2VDb3N0OiAnR2FzJyxcbiAgICAgICAgICAgIHNhbmRib3hEYXRhUmVhZENvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgc2FuZGJveERhdGFXcml0ZUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgbWF4RXZlbnRUb3BpY3M6ICd1MzInLFxuICAgICAgICAgICAgbWF4U3RhY2tIZWlnaHQ6ICd1MzInLFxuICAgICAgICAgICAgbWF4TWVtb3J5UGFnZXM6ICd1MzInLFxuICAgICAgICAgICAgZW5hYmxlUHJpbnRsbjogJ2Jvb2wnLFxuICAgICAgICAgICAgbWF4U3ViamVjdExlbjogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgU2NoZWR1bGVUbzI1ODoge1xuICAgICAgICAgICAgdmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBwdXRDb2RlUGVyQnl0ZUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgZ3Jvd01lbUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgcmVndWxhck9wQ29zdDogJ0dhcycsXG4gICAgICAgICAgICByZXR1cm5EYXRhUGVyQnl0ZUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgZXZlbnREYXRhUGVyQnl0ZUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgZXZlbnRQZXJUb3BpY0Nvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgZXZlbnRCYXNlQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBzYW5kYm94RGF0YVJlYWRDb3N0OiAnR2FzJyxcbiAgICAgICAgICAgIHNhbmRib3hEYXRhV3JpdGVDb3N0OiAnR2FzJyxcbiAgICAgICAgICAgIHRyYW5zZmVyQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBtYXhFdmVudFRvcGljczogJ3UzMicsXG4gICAgICAgICAgICBtYXhTdGFja0hlaWdodDogJ3UzMicsXG4gICAgICAgICAgICBtYXhNZW1vcnlQYWdlczogJ3UzMicsXG4gICAgICAgICAgICBlbmFibGVQcmludGxuOiAnYm9vbCcsXG4gICAgICAgICAgICBtYXhTdWJqZWN0TGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsZVRvMjY0OiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIGVuYWJsZVByaW50bG46ICdib29sJyxcbiAgICAgICAgICAgIGxpbWl0czogJ0xpbWl0c1RvMjY0JyxcbiAgICAgICAgICAgIGluc3RydWN0aW9uV2VpZ2h0czogJ0luc3RydWN0aW9uV2VpZ2h0cycsXG4gICAgICAgICAgICBob3N0Rm5XZWlnaHRzOiAnSG9zdEZuV2VpZ2h0c1RvMjY0J1xuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsZToge1xuICAgICAgICAgICAgdmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBlbmFibGVQcmludGxuOiAnYm9vbCcsXG4gICAgICAgICAgICBsaW1pdHM6ICdMaW1pdHMnLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25XZWlnaHRzOiAnSW5zdHJ1Y3Rpb25XZWlnaHRzJyxcbiAgICAgICAgICAgIGhvc3RGbldlaWdodHM6ICdIb3N0Rm5XZWlnaHRzJ1xuICAgICAgICB9LFxuICAgICAgICBTZWVkT2Y6ICdIYXNoJyxcbiAgICAgICAgU3RvcmFnZURlcG9zaXQ6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgUmVmdW5kOiAnQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgQ2hhcmdlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgVG9tYnN0b25lQ29udHJhY3RJbmZvOiAnSGFzaCcsXG4gICAgICAgIFRyaWVJZDogJ0J5dGVzJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGNhbGw6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSB0aGUgcnVudGltZSBpbnRlcmZhY2UgYGFwaS5jYWxsLmNvbnRyYWN0c0FwaS5jYWxsYCBpbnN0ZWFkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdFeGVjdXRlcyBhIGNhbGwgdG8gYSBjb250cmFjdCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjYWxsUmVxdWVzdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0NvbnRyYWN0Q2FsbFJlcXVlc3QnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdDb250cmFjdEV4ZWNSZXN1bHQnXG4gICAgfSxcbiAgICBnZXRTdG9yYWdlOiB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6ICdVc2UgdGhlIHJ1bnRpbWUgaW50ZXJmYWNlIGBhcGkuY2FsbC5jb250cmFjdHNBcGkuZ2V0U3RvcmFnZWAgaW5zdGVhZCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgdmFsdWUgdW5kZXIgYSBzcGVjaWZpZWQgc3RvcmFnZSBrZXkgaW4gYSBjb250cmFjdCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxCeXRlcz4nXG4gICAgfSxcbiAgICBpbnN0YW50aWF0ZToge1xuICAgICAgICBkZXByZWNhdGVkOiAnVXNlIHRoZSBydW50aW1lIGludGVyZmFjZSBgYXBpLmNhbGwuY29udHJhY3RzQXBpLmluc3RhbnRpYXRlYCBpbnN0ZWFkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnN0YW50aWF0ZSBhIG5ldyBjb250cmFjdCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdyZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSW5zdGFudGlhdGVSZXF1ZXN0VjEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdDb250cmFjdEluc3RhbnRpYXRlUmVzdWx0J1xuICAgIH0sXG4gICAgcmVudFByb2plY3Rpb246IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ05vdCBhdmFpbGFibGUgaW4gbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIGNvbnRyYWN0cyBpbnRlcmZhY2VzJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBwcm9qZWN0ZWQgdGltZSBhIGdpdmVuIGNvbnRyYWN0IHdpbGwgYmUgYWJsZSB0byBzdXN0YWluIHBheWluZyBpdHMgcmVudCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPEJsb2NrTnVtYmVyPidcbiAgICB9LFxuICAgIHVwbG9hZENvZGU6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSB0aGUgcnVudGltZSBpbnRlcmZhY2UgYGFwaS5jYWxsLmNvbnRyYWN0c0FwaS51cGxvYWRDb2RlYCBpbnN0ZWFkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWQgbmV3IGNvZGUgd2l0aG91dCBpbnN0YW50aWF0aW5nIGEgY29udHJhY3QgZnJvbSBpdCcsXG4gICAgICAgIC8vIFRoZSBSUEMgaGVyZSBpcyB0ZXJyaWJseSBtaXNuYW1lZCAtIHNvbWVib2R5IGZvcmdvdCBob3cgdGhlIFJQQ3NcbiAgICAgICAgLy8gYXJlIGFjdHVhbGx5IGRvbmUsIGllLiA8bW9kdWxlPl88Y2FtZWxDYXNlZE1ldGhvZD5cbiAgICAgICAgZW5kcG9pbnQ6ICdjb250cmFjdHNfdXBsb2FkX2NvZGUnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkUmVxdWVzdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0NvZGVVcGxvYWRSZXF1ZXN0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQ29kZVVwbG9hZFJlc3VsdCdcbiAgICB9XG59O1xuIiwiY29uc3QgU0hBUkVEX1YxX1YyID0ge1xuICAgIGdldF9zdG9yYWdlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUXVlcnkgYSBnaXZlbiBzdG9yYWdlIGtleSBpbiBhIGdpdmVuIGNvbnRyYWN0LicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248Qnl0ZXM+J1xuICAgIH0sXG4gICAgdXBsb2FkX2NvZGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWQgbmV3IGNvZGUgd2l0aG91dCBpbnN0YW50aWF0aW5nIGEgY29udHJhY3QgZnJvbSBpdC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3JpZ2luJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RvcmFnZURlcG9zaXRMaW1pdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCYWxhbmNlPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0NvZGVVcGxvYWRSZXN1bHQnXG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIENvbnRyYWN0c0FwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1BlcmZvcm0gYSBjYWxsIGZyb20gYSBzcGVjaWZpZWQgYWNjb3VudCB0byBhIGdpdmVuIGNvbnRyYWN0LicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvcmlnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZ2FzTGltaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248V2VpZ2h0VjI+J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc3RvcmFnZURlcG9zaXRMaW1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCYWxhbmNlPidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lucHV0RGF0YScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzx1OD4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb250cmFjdEV4ZWNSZXN1bHQnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZToge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luc3RhbnRpYXRlIGEgbmV3IGNvbnRyYWN0LicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvcmlnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0JhbGFuY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdnYXNMaW1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxXZWlnaHRWMj4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzdG9yYWdlRGVwb3NpdExpbWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPEJhbGFuY2U+J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0NvZGVTb3VyY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzYWx0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb250cmFjdEluc3RhbnRpYXRlUmVzdWx0J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uU0hBUkVEX1YxX1YyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1BlcmZvcm0gYSBjYWxsIGZyb20gYSBzcGVjaWZpZWQgYWNjb3VudCB0byBhIGdpdmVuIGNvbnRyYWN0LicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvcmlnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZ2FzTGltaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd1NjQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzdG9yYWdlRGVwb3NpdExpbWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPEJhbGFuY2U+J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaW5wdXREYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU4PidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0NvbnRyYWN0RXhlY1Jlc3VsdFU2NCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSW5zdGFudGlhdGUgYSBuZXcgY29udHJhY3QuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ29yaWdpbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2dhc0xpbWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTY0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc3RvcmFnZURlcG9zaXRMaW1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCYWxhbmNlPidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb2RlU291cmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2FsdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ29udHJhY3RJbnN0YW50aWF0ZVJlc3VsdFU2NCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLlNIQVJFRF9WMV9WMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmNvbnN0IGxheW91dCA9IHtcbiAgICBDb250cmFjdENyeXB0b0hhc2hlcjoge1xuICAgICAgICBfZW51bTogWydCbGFrZTJ4MjU2JywgJ1NoYTJ4MjU2JywgJ0tlY2NhazI1NiddXG4gICAgfSxcbiAgICBDb250cmFjdERpc2NyaW1pbmFudDogJ3UzMicsXG4gICAgQ29udHJhY3RMYXlvdXRBcnJheToge1xuICAgICAgICBvZmZzZXQ6ICdDb250cmFjdExheW91dEtleScsXG4gICAgICAgIGxlbjogJ3UzMicsXG4gICAgICAgIGNlbGxzUGVyRWxlbTogJ3U2NCcsXG4gICAgICAgIGxheW91dDogJ0NvbnRyYWN0U3RvcmFnZUxheW91dCdcbiAgICB9LFxuICAgIENvbnRyYWN0TGF5b3V0Q2VsbDoge1xuICAgICAgICBrZXk6ICdDb250cmFjdExheW91dEtleScsXG4gICAgICAgIHR5OiAnU2lMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBDb250cmFjdExheW91dEVudW06IHtcbiAgICAgICAgZGlzcGF0Y2hLZXk6ICdDb250cmFjdExheW91dEtleScsXG4gICAgICAgIHZhcmlhbnRzOiAnQlRyZWVNYXA8Q29udHJhY3REaXNjcmltaW5hbnQsIENvbnRyYWN0TGF5b3V0U3RydWN0PidcbiAgICB9LFxuICAgIENvbnRyYWN0TGF5b3V0SGFzaDoge1xuICAgICAgICBvZmZzZXQ6ICdDb250cmFjdExheW91dEtleScsXG4gICAgICAgIHN0cmF0ZWd5OiAnQ29udHJhY3RMYXlvdXRIYXNoaW5nU3RyYXRlZ3knLFxuICAgICAgICBsYXlvdXQ6ICdDb250cmFjdFN0b3JhZ2VMYXlvdXQnXG4gICAgfSxcbiAgICBDb250cmFjdExheW91dEhhc2hpbmdTdHJhdGVneToge1xuICAgICAgICBoYXNoZXI6ICdDb250cmFjdENyeXB0b0hhc2hlcicsXG4gICAgICAgIHBvc3RmaXg6ICdWZWM8dTg+JyxcbiAgICAgICAgcHJlZml4OiAnVmVjPHU4PidcbiAgICB9LFxuICAgIENvbnRyYWN0TGF5b3V0S2V5OiAnW3U4OyAzMl0nLFxuICAgIENvbnRyYWN0TGF5b3V0U3RydWN0OiB7XG4gICAgICAgIGZpZWxkczogJ1ZlYzxDb250cmFjdExheW91dFN0cnVjdEZpZWxkPidcbiAgICB9LFxuICAgIENvbnRyYWN0TGF5b3V0U3RydWN0RmllbGQ6IHtcbiAgICAgICAgbGF5b3V0OiAnQ29udHJhY3RTdG9yYWdlTGF5b3V0JyxcbiAgICAgICAgbmFtZTogJ1RleHQnXG4gICAgfSxcbiAgICBDb250cmFjdFN0b3JhZ2VMYXlvdXQ6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENlbGw6ICdDb250cmFjdExheW91dENlbGwnLFxuICAgICAgICAgICAgSGFzaDogJ0NvbnRyYWN0TGF5b3V0SGFzaCcsXG4gICAgICAgICAgICBBcnJheTogJ0NvbnRyYWN0TGF5b3V0QXJyYXknLFxuICAgICAgICAgICAgU3RydWN0OiAnQ29udHJhY3RMYXlvdXRTdHJ1Y3QnLFxuICAgICAgICAgICAgRW51bTogJ0NvbnRyYWN0TGF5b3V0RW51bSdcbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCBzcGVjID0ge1xuICAgIENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjA6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzZWxlY3RvcjogJ0NvbnRyYWN0U2VsZWN0b3InLFxuICAgICAgICBhcmdzOiAnVmVjPENvbnRyYWN0TWVzc2FnZVBhcmFtU3BlY1YwPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdENvbnN0cnVjdG9yU3BlY1YxOiB7XG4gICAgICAgIG5hbWU6ICdWZWM8VGV4dD4nLFxuICAgICAgICBzZWxlY3RvcjogJ0NvbnRyYWN0U2VsZWN0b3InLFxuICAgICAgICBhcmdzOiAnVmVjPENvbnRyYWN0TWVzc2FnZVBhcmFtU3BlY1YwPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdENvbnN0cnVjdG9yU3BlY1YyOiB7XG4gICAgICAgIGxhYmVsOiAnVGV4dCcsXG4gICAgICAgIHNlbGVjdG9yOiAnQ29udHJhY3RTZWxlY3RvcicsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjI+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjM6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdDb250cmFjdFNlbGVjdG9yJyxcbiAgICAgICAgcGF5YWJsZTogJ2Jvb2wnLFxuICAgICAgICBhcmdzOiAnVmVjPENvbnRyYWN0TWVzc2FnZVBhcmFtU3BlY1YyPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdENvbnN0cnVjdG9yU3BlY1Y0OiB7XG4gICAgICAgIGxhYmVsOiAnVGV4dCcsXG4gICAgICAgIHNlbGVjdG9yOiAnQ29udHJhY3RTZWxlY3RvcicsXG4gICAgICAgIHBheWFibGU6ICdib29sJyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNWMj4nLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+JyxcbiAgICAgICAgZGVmYXVsdDogJ2Jvb2wnLFxuICAgICAgICByZXR1cm5UeXBlOiAnT3B0aW9uPENvbnRyYWN0VHlwZVNwZWM+J1xuICAgIH0sXG4gICAgQ29udHJhY3RDb250cmFjdFNwZWNWMDoge1xuICAgICAgICBjb25zdHJ1Y3RvcnM6ICdWZWM8Q29udHJhY3RDb25zdHJ1Y3RvclNwZWNWMD4nLFxuICAgICAgICBtZXNzYWdlczogJ1ZlYzxDb250cmFjdE1lc3NhZ2VTcGVjVjA+JyxcbiAgICAgICAgZXZlbnRzOiAnVmVjPENvbnRyYWN0RXZlbnRTcGVjVjA+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0Q29udHJhY3RTcGVjVjE6IHtcbiAgICAgICAgY29uc3RydWN0b3JzOiAnVmVjPENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjE+JyxcbiAgICAgICAgbWVzc2FnZXM6ICdWZWM8Q29udHJhY3RNZXNzYWdlU3BlY1YxPicsXG4gICAgICAgIGV2ZW50czogJ1ZlYzxDb250cmFjdEV2ZW50U3BlY1YxPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdENvbnRyYWN0U3BlY1YyOiB7XG4gICAgICAgIGNvbnN0cnVjdG9yczogJ1ZlYzxDb250cmFjdENvbnN0cnVjdG9yU3BlY1YyPicsXG4gICAgICAgIG1lc3NhZ2VzOiAnVmVjPENvbnRyYWN0TWVzc2FnZVNwZWNWMj4nLFxuICAgICAgICBldmVudHM6ICdWZWM8Q29udHJhY3RFdmVudFNwZWNWMj4nLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgQ29udHJhY3RDb250cmFjdFNwZWNWMzoge1xuICAgICAgICBjb25zdHJ1Y3RvcnM6ICdWZWM8Q29udHJhY3RDb25zdHJ1Y3RvclNwZWNWMz4nLFxuICAgICAgICBtZXNzYWdlczogJ1ZlYzxDb250cmFjdE1lc3NhZ2VTcGVjVjI+JyxcbiAgICAgICAgZXZlbnRzOiAnVmVjPENvbnRyYWN0RXZlbnRTcGVjVjI+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0Q29udHJhY3RTcGVjVjQ6IHtcbiAgICAgICAgY29uc3RydWN0b3JzOiAnVmVjPENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjQ+JyxcbiAgICAgICAgbWVzc2FnZXM6ICdWZWM8Q29udHJhY3RNZXNzYWdlU3BlY1YzPicsXG4gICAgICAgIGV2ZW50czogJ1ZlYzxDb250cmFjdEV2ZW50U3BlY1YyPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nLFxuICAgICAgICBlbnZpcm9ubWVudDogJ0NvbnRyYWN0RW52aXJvbm1lbnRWNCdcbiAgICB9LFxuICAgIENvbnRyYWN0Q29udHJhY3RTcGVjVjU6IHtcbiAgICAgICAgY29uc3RydWN0b3JzOiAnVmVjPENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjQ+JyxcbiAgICAgICAgbWVzc2FnZXM6ICdWZWM8Q29udHJhY3RNZXNzYWdlU3BlY1YzPicsXG4gICAgICAgIGV2ZW50czogJ1ZlYzxDb250cmFjdEV2ZW50U3BlY1YzPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nLFxuICAgICAgICBlbnZpcm9ubWVudDogJ0NvbnRyYWN0RW52aXJvbm1lbnRWNCdcbiAgICB9LFxuICAgIENvbnRyYWN0RGlzcGxheU5hbWU6ICdTaVBhdGgnLFxuICAgIENvbnRyYWN0RXZlbnRQYXJhbVNwZWNWMDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIGluZGV4ZWQ6ICdib29sJyxcbiAgICAgICAgdHlwZTogJ0NvbnRyYWN0VHlwZVNwZWMnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgQ29udHJhY3RFdmVudFBhcmFtU3BlY1YyOiB7XG4gICAgICAgIGxhYmVsOiAnVGV4dCcsXG4gICAgICAgIGluZGV4ZWQ6ICdib29sJyxcbiAgICAgICAgdHlwZTogJ0NvbnRyYWN0VHlwZVNwZWMnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgQ29udHJhY3RFdmVudFNwZWNWMDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RFdmVudFBhcmFtU3BlY1YwPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdEV2ZW50U3BlY1YxOiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdEV2ZW50UGFyYW1TcGVjVjA+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0RXZlbnRTcGVjVjI6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdEV2ZW50UGFyYW1TcGVjVjI+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0RXZlbnRTcGVjVjM6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdEV2ZW50UGFyYW1TcGVjVjI+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PicsXG4gICAgICAgIG1vZHVsZV9wYXRoOiAnVGV4dCcsXG4gICAgICAgIHNpZ25hdHVyZV90b3BpYzogJ09wdGlvbjxbdTg7IDMyXT4nXG4gICAgfSxcbiAgICBDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNWMDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIHR5cGU6ICdDb250cmFjdFR5cGVTcGVjJ1xuICAgIH0sXG4gICAgQ29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjI6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgdHlwZTogJ0NvbnRyYWN0VHlwZVNwZWMnXG4gICAgfSxcbiAgICBDb250cmFjdE1lc3NhZ2VTcGVjVjA6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzZWxlY3RvcjogJ0NvbnRyYWN0U2VsZWN0b3InLFxuICAgICAgICBtdXRhdGVzOiAnYm9vbCcsXG4gICAgICAgIHBheWFibGU6ICdib29sJyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNWMD4nLFxuICAgICAgICByZXR1cm5UeXBlOiAnT3B0aW9uPENvbnRyYWN0VHlwZVNwZWM+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0TWVzc2FnZVNwZWNWMToge1xuICAgICAgICBuYW1lOiAnVmVjPFRleHQ+JyxcbiAgICAgICAgc2VsZWN0b3I6ICdDb250cmFjdFNlbGVjdG9yJyxcbiAgICAgICAgbXV0YXRlczogJ2Jvb2wnLFxuICAgICAgICBwYXlhYmxlOiAnYm9vbCcsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjA+JyxcbiAgICAgICAgcmV0dXJuVHlwZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdE1lc3NhZ2VTcGVjVjI6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdDb250cmFjdFNlbGVjdG9yJyxcbiAgICAgICAgbXV0YXRlczogJ2Jvb2wnLFxuICAgICAgICBwYXlhYmxlOiAnYm9vbCcsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjI+JyxcbiAgICAgICAgcmV0dXJuVHlwZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdE1lc3NhZ2VTcGVjVjM6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdDb250cmFjdFNlbGVjdG9yJyxcbiAgICAgICAgbXV0YXRlczogJ2Jvb2wnLFxuICAgICAgICBwYXlhYmxlOiAnYm9vbCcsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjI+JyxcbiAgICAgICAgcmV0dXJuVHlwZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nLFxuICAgICAgICBkZWZhdWx0OiAnYm9vbCdcbiAgICB9LFxuICAgIENvbnRyYWN0U2VsZWN0b3I6ICdbdTg7IDRdJyxcbiAgICBDb250cmFjdFR5cGVTcGVjOiB7XG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQ29udHJhY3REaXNwbGF5TmFtZSdcbiAgICB9XG59O1xuY29uc3QgbGF0ZXN0ID0ge1xuICAgIENvbnRyYWN0Q29uc3RydWN0b3JTcGVjTGF0ZXN0OiAnQ29udHJhY3RDb25zdHJ1Y3RvclNwZWNWNCcsXG4gICAgQ29udHJhY3RFdmVudFNwZWNMYXRlc3Q6ICdDb250cmFjdEV2ZW50U3BlY1YzJyxcbiAgICBDb250cmFjdEV2ZW50UGFyYW1TcGVjTGF0ZXN0OiAnQ29udHJhY3RFdmVudFBhcmFtU3BlY1YyJyxcbiAgICBDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNMYXRlc3Q6ICdDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNWMicsXG4gICAgQ29udHJhY3RNZXNzYWdlU3BlY0xhdGVzdDogJ0NvbnRyYWN0TWVzc2FnZVNwZWNWMycsXG4gICAgQ29udHJhY3RNZXRhZGF0YUxhdGVzdDogJ0NvbnRyYWN0TWV0YWRhdGFWNSdcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5sYXlvdXQsXG4gICAgICAgIC4uLnNwZWMsXG4gICAgICAgIC4uLmxhdGVzdCxcbiAgICAgICAgQ29udHJhY3RQcm9qZWN0SW5mbzoge1xuICAgICAgICAgICAgc291cmNlOiAnQ29udHJhY3RQcm9qZWN0U291cmNlJyxcbiAgICAgICAgICAgIGNvbnRyYWN0OiAnQ29udHJhY3RQcm9qZWN0Q29udHJhY3QnXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0TWV0YWRhdGFWMDoge1xuICAgICAgICAgICAgbWV0YWRhdGFWZXJzaW9uOiAnVGV4dCcsXG4gICAgICAgICAgICB0eXBlczogJ1ZlYzxTaTBUeXBlPicsXG4gICAgICAgICAgICBzcGVjOiAnQ29udHJhY3RDb250cmFjdFNwZWNWMCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RNZXRhZGF0YVYxOiB7XG4gICAgICAgICAgICB0eXBlczogJ1ZlYzxQb3J0YWJsZVR5cGU+JyxcbiAgICAgICAgICAgIHNwZWM6ICdDb250cmFjdENvbnRyYWN0U3BlY1YxJ1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdE1ldGFkYXRhVjI6IHtcbiAgICAgICAgICAgIHR5cGVzOiAnVmVjPFBvcnRhYmxlVHlwZT4nLFxuICAgICAgICAgICAgc3BlYzogJ0NvbnRyYWN0Q29udHJhY3RTcGVjVjInXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0TWV0YWRhdGFWMzoge1xuICAgICAgICAgICAgdHlwZXM6ICdWZWM8UG9ydGFibGVUeXBlPicsXG4gICAgICAgICAgICBzcGVjOiAnQ29udHJhY3RDb250cmFjdFNwZWNWMydcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RNZXRhZGF0YVY0OiB7XG4gICAgICAgICAgICB0eXBlczogJ1ZlYzxQb3J0YWJsZVR5cGU+JyxcbiAgICAgICAgICAgIHNwZWM6ICdDb250cmFjdENvbnRyYWN0U3BlY1Y0JyxcbiAgICAgICAgICAgIHZlcnNpb246ICdUZXh0J1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdE1ldGFkYXRhVjU6IHtcbiAgICAgICAgICAgIHR5cGVzOiAnVmVjPFBvcnRhYmxlVHlwZT4nLFxuICAgICAgICAgICAgc3BlYzogJ0NvbnRyYWN0Q29udHJhY3RTcGVjVjUnLFxuICAgICAgICAgICAgdmVyc2lvbjogJ3U2NCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RNZXRhZGF0YToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ0NvbnRyYWN0TWV0YWRhdGFWMCcsXG4gICAgICAgICAgICAgICAgVjE6ICdDb250cmFjdE1ldGFkYXRhVjEnLFxuICAgICAgICAgICAgICAgIFYyOiAnQ29udHJhY3RNZXRhZGF0YVYyJyxcbiAgICAgICAgICAgICAgICBWMzogJ0NvbnRyYWN0TWV0YWRhdGFWMycsXG4gICAgICAgICAgICAgICAgVjQ6ICdDb250cmFjdE1ldGFkYXRhVjQnLFxuICAgICAgICAgICAgICAgIFY1OiAnQ29udHJhY3RNZXRhZGF0YVY1J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdFByb2plY3RWMDoge1xuICAgICAgICAgICAgbWV0YWRhdGFWZXJzaW9uOiAnVGV4dCcsXG4gICAgICAgICAgICBzb3VyY2U6ICdDb250cmFjdFByb2plY3RTb3VyY2UnLFxuICAgICAgICAgICAgY29udHJhY3Q6ICdDb250cmFjdFByb2plY3RDb250cmFjdCcsXG4gICAgICAgICAgICB0eXBlczogJ1ZlYzxTaTBUeXBlPicsXG4gICAgICAgICAgICBzcGVjOiAnQ29udHJhY3RDb250cmFjdFNwZWNWMCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RQcm9qZWN0OiAnKENvbnRyYWN0UHJvamVjdEluZm8sIENvbnRyYWN0TWV0YWRhdGEpJyxcbiAgICAgICAgQ29udHJhY3RQcm9qZWN0Q29udHJhY3Q6IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIGRvY3M6ICdkb2N1bWVudGF0aW9uJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgICAgIHZlcnNpb246ICdUZXh0JyxcbiAgICAgICAgICAgIGF1dGhvcnM6ICdWZWM8VGV4dD4nLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb248VGV4dD4nLFxuICAgICAgICAgICAgZG9jczogJ09wdGlvbjxUZXh0PicsXG4gICAgICAgICAgICByZXBvc2l0b3J5OiAnT3B0aW9uPFRleHQ+JyxcbiAgICAgICAgICAgIGhvbWVwYWdlOiAnT3B0aW9uPFRleHQ+JyxcbiAgICAgICAgICAgIGxpY2Vuc2U6ICdPcHRpb248VGV4dD4nXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0UHJvamVjdFNvdXJjZToge1xuICAgICAgICAgICAgX2FsaWFzOiB7XG4gICAgICAgICAgICAgICAgd2FzbUhhc2g6ICdoYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdhc21IYXNoOiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICdUZXh0JyxcbiAgICAgICAgICAgIGNvbXBpbGVyOiAnVGV4dCcsXG4gICAgICAgICAgICB3YXNtOiAnUmF3J1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdEVudmlyb25tZW50VjQ6IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIGhhc2hUeXBlOiAnaGFzaCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBOT1RFIFRoZXNlIGFyZSBub3QgbWFya2VkIG9wdGlvbmFsIGluIHRoZSBSdXN0IGNvZGUsIGhvd2V2ZXIgc2luY2Ugd2VcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgZnJvbSBvbGRlciB2ZXJzaW9ucyB0byBuZXdlciwgd2UgbWF5IG5vdCBoYXZlIHRoZXNlIGZpZWxkcy5cbiAgICAgICAgICAgIC8vIFRoZSBPcHRpb248Li4uPiB3b3JrcyBzaW5jZSBvdXIgaW5wdXRzIGFyZSBhbHdheXMgSlNPTiwgc28gaXQgd2lsbFxuICAgICAgICAgICAgLy8gYmUgTm9uZSB3aGVuIG5vdCBzcGVjaWZpZWQuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5IHdlIGRvbid0IG1hcmsgdGhlIGZ1bGwgc3RydWN0dXJlIGFzIE9wdGlvbiwgcmF0aGVyIHdlXG4gICAgICAgICAgICAvLyBkbyBpdCBvbiBhIHBlci1maWVsZCBiYXNpcyBzaW5jZSBmaWVsZHMgbWF5IGJlIGFkZGVkIGFzIHRoZSB2ZXJzaW9uc1xuICAgICAgICAgICAgLy8gcHJvZ3Jlc3MuXG4gICAgICAgICAgICBhY2NvdW50SWQ6ICdPcHRpb248Q29udHJhY3RUeXBlU3BlYz4nLFxuICAgICAgICAgICAgYmFsYW5jZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgICAgICBibG9ja051bWJlcjogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgICAgICBoYXNoVHlwZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgICAgICB0aW1lc3RhbXA6ICdPcHRpb248Q29udHJhY3RUeXBlU3BlYz4nLFxuICAgICAgICAgICAgbWF4RXZlbnRUb3BpY3M6ICdPcHRpb248dTMyPidcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBGdW5kSW5kZXg6ICd1MzInLFxuICAgICAgICBMYXN0Q29udHJpYnV0aW9uOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE5ldmVyOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgUHJlRW5kaW5nOiAndTMyJyxcbiAgICAgICAgICAgICAgICBFbmRpbmc6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRnVuZEluZm86IHtcbiAgICAgICAgICAgIGRlcG9zaXRvcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB2ZXJpZmllcjogJ09wdGlvbjxNdWx0aVNpZ25lcj4nLFxuICAgICAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgcmFpc2VkOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBlbmQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBjYXA6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGxhc3RDb250cmlidXRpb246ICdMYXN0Q29udHJpYnV0aW9uJyxcbiAgICAgICAgICAgIGZpcnN0UGVyaW9kOiAnTGVhc2VQZXJpb2QnLFxuICAgICAgICAgICAgbGFzdFBlcmlvZDogJ0xlYXNlUGVyaW9kJyxcbiAgICAgICAgICAgIHRyaWVJbmRleDogJ1RyaWVJbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgVHJpZUluZGV4OiAndTMyJ1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmNvbnN0IGRtcFF1ZXVlID0ge1xuICAgIENvbGxhdGlvbkluZm86IHtcbiAgICAgICAgdXB3YXJkTWVzc2FnZXM6ICdWZWM8VXB3YXJkTWVzc2FnZT4nLFxuICAgICAgICBob3Jpem9udGFsTWVzc2FnZXM6ICdWZWM8T3V0Ym91bmRIcm1wTWVzc2FnZT4nLFxuICAgICAgICBuZXdWYWxpZGF0aW9uQ29kZTogJ09wdGlvbjxWYWxpZGF0aW9uQ29kZT4nLFxuICAgICAgICBwcm9jZXNzZWREb3dud2FyZE1lc3NhZ2VzOiAndTMyJyxcbiAgICAgICAgaHJtcFdhdGVybWFyazogJ1JlbGF5QmxvY2tOdW1iZXInLFxuICAgICAgICBoZWFkRGF0YTogJ0hlYWREYXRhJ1xuICAgIH0sXG4gICAgQ29sbGF0aW9uSW5mb1YxOiB7XG4gICAgICAgIHVwd2FyZE1lc3NhZ2VzOiAnVmVjPFVwd2FyZE1lc3NhZ2U+JyxcbiAgICAgICAgaG9yaXpvbnRhbE1lc3NhZ2VzOiAnVmVjPE91dGJvdW5kSHJtcE1lc3NhZ2U+JyxcbiAgICAgICAgbmV3VmFsaWRhdGlvbkNvZGU6ICdPcHRpb248VmFsaWRhdGlvbkNvZGU+JyxcbiAgICAgICAgcHJvY2Vzc2VkRG93bndhcmRNZXNzYWdlczogJ3UzMicsXG4gICAgICAgIGhybXBXYXRlcm1hcms6ICdSZWxheUJsb2NrTnVtYmVyJ1xuICAgIH0sXG4gICAgQ29uZmlnRGF0YToge1xuICAgICAgICBtYXhJbmRpdmlkdWFsOiAnV2VpZ2h0J1xuICAgIH0sXG4gICAgTWVzc2FnZUlkOiAnW3U4OyAzMl0nLFxuICAgIE92ZXJ3ZWlnaHRJbmRleDogJ3U2NCcsXG4gICAgUGFnZUNvdW50ZXI6ICd1MzInLFxuICAgIFBhZ2VJbmRleERhdGE6IHtcbiAgICAgICAgYmVnaW5Vc2VkOiAnUGFnZUNvdW50ZXInLFxuICAgICAgICBlbmRVc2VkOiAnUGFnZUNvdW50ZXInLFxuICAgICAgICBvdmVyd2VpZ2h0Q291bnQ6ICdPdmVyd2VpZ2h0SW5kZXgnXG4gICAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IGRtcFF1ZXVlXG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgQXVyYVVuaW5jbHVkZWRTZWdtZW50QXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjYW5fYnVpbGRfdXBvbjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgaXQgaXMgbGVnYWwgdG8gZXh0ZW5kIHRoZSBjaGFpbicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpbmNsdWRlZEhhc2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzbG90JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU2xvdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF0sXG4gICAgQ29sbGVjdENvbGxhdGlvbkluZm86IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGNvbGxlY3RfY29sbGF0aW9uX2luZm86IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb2xsZWN0IGluZm9ybWF0aW9uIGFib3V0IGEgY29sbGF0aW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdoZWFkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdIZWFkZXInXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb2xsYXRpb25JbmZvJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0X2NvbGxhdGlvbl9pbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbGxhdGlvbi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ29sbGF0aW9uSW5mb1YxJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9lc3NlbnRpYWxzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXNzZXRDb252ZXJzaW9uIH0gZnJvbSAnLi9hc3NldENvbnZlcnNpb24vZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3NldHMgfSBmcm9tICcuL2Fzc2V0cy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGF1cmEgfSBmcm9tICcuL2F1cmEvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhdXRob3JzaGlwIH0gZnJvbSAnLi9hdXRob3JzaGlwL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYmFiZSB9IGZyb20gJy4vYmFiZS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJhbGFuY2VzIH0gZnJvbSAnLi9iYWxhbmNlcy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJlZWZ5IH0gZnJvbSAnLi9iZWVmeS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJlbmNobWFyayB9IGZyb20gJy4vYmVuY2htYXJrL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYmxvY2tidWlsZGVyIH0gZnJvbSAnLi9ibG9ja2J1aWxkZXIvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb2xsZWN0aXZlIH0gZnJvbSAnLi9jb2xsZWN0aXZlL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29uc2Vuc3VzIH0gZnJvbSAnLi9jb25zZW5zdXMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb250cmFjdHMgfSBmcm9tICcuL2NvbnRyYWN0cy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlbW9jcmFjeSB9IGZyb20gJy4vZGVtb2NyYWN5L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGV2IH0gZnJvbSAnLi9kZXYvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkaXNjb3ZlcnkgfSBmcm9tICcuL2Rpc2NvdmVyeS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVsZWN0aW9ucyB9IGZyb20gJy4vZWxlY3Rpb25zL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5naW5lIH0gZnJvbSAnLi9lbmdpbmUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBldm0gfSBmcm9tICcuL2V2bS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV4dHJpbnNpY3MgfSBmcm9tICcuL2V4dHJpbnNpY3MvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmdW5naWJsZXMgfSBmcm9tICcuL2Z1bmdpYmxlcy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdlbmVyaWNBc3NldCB9IGZyb20gJy4vZ2VuZXJpY0Fzc2V0L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2VuZXNpc0J1aWxkZXIgfSBmcm9tICcuL2dlbmVzaXNCdWlsZGVyL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2lsdCB9IGZyb20gJy4vZ2lsdC9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdyYW5kcGEgfSBmcm9tICcuL2dyYW5kcGEvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpZGVudGl0eSB9IGZyb20gJy4vaWRlbnRpdHkvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbU9ubGluZSB9IGZyb20gJy4vaW1PbmxpbmUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsb3R0ZXJ5IH0gZnJvbSAnLi9sb3R0ZXJ5L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWl4bmV0IH0gZnJvbSAnLi9taXhuZXQvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtbXIgfSBmcm9tICcuL21tci9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG5mdHMgfSBmcm9tICcuL25mdHMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBub21wb29scyB9IGZyb20gJy4vbm9tcG9vbHMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvZmZlbmNlcyB9IGZyb20gJy4vb2ZmZW5jZXMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3cgfSBmcm9tICcuL3Bvdy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByb3h5IH0gZnJvbSAnLi9wcm94eS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlY292ZXJ5IH0gZnJvbSAnLi9yZWNvdmVyeS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNjaGVkdWxlciB9IGZyb20gJy4vc2NoZWR1bGVyL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2Vzc2lvbiB9IGZyb20gJy4vc2Vzc2lvbi9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNvY2lldHkgfSBmcm9tICcuL3NvY2lldHkvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGFraW5nIH0gZnJvbSAnLi9zdGFraW5nL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdGVtZW50IH0gZnJvbSAnLi9zdGF0ZW1lbnQvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdXBwb3J0IH0gZnJvbSAnLi9zdXBwb3J0L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3luY3N0YXRlIH0gZnJvbSAnLi9zeW5jc3RhdGUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzeXN0ZW0gfSBmcm9tICcuL3N5c3RlbS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyZWFzdXJ5IH0gZnJvbSAnLi90cmVhc3VyeS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHR4cGF5bWVudCB9IGZyb20gJy4vdHhwYXltZW50L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHhxdWV1ZSB9IGZyb20gJy4vdHhxdWV1ZS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuaXF1ZXMgfSBmcm9tICcuL3VuaXF1ZXMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1dGlsaXR5IH0gZnJvbSAnLi91dGlsaXR5L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmVzdGluZyB9IGZyb20gJy4vdmVzdGluZy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGF0dGVzdGF0aW9ucyB9IGZyb20gJy4vYXR0ZXN0YXRpb25zL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYnJpZGdlcyB9IGZyb20gJy4vYnJpZGdlcy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYWltcyB9IGZyb20gJy4vY2xhaW1zL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3Jvd2Rsb2FuIH0gZnJvbSAnLi9jcm93ZGxvYW4vZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjdW11bHVzIH0gZnJvbSAnLi9jdW11bHVzL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmluYWxpdHkgfSBmcm9tICcuL2ZpbmFsaXR5L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFyYWNoYWlucyB9IGZyb20gJy4vcGFyYWNoYWlucy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvbGwgfSBmcm9tICcuL3BvbGwvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwdXJjaGFzZSB9IGZyb20gJy4vcHVyY2hhc2UvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB4Y20gfSBmcm9tICcuL3hjbS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRyYWN0c0FiaSB9IGZyb20gJy4vY29udHJhY3RzQWJpL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXRoIH0gZnJvbSAnLi9ldGgvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBuaW1idXMgfSBmcm9tICcuL25pbWJ1cy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9ybWxPcmFjbGUgfSBmcm9tICcuL29ybWxPcmFjbGUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvcm1sVG9rZW5zIH0gZnJvbSAnLi9vcm1sVG9rZW5zL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcnBjIH0gZnJvbSAnLi9ycGMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhdXRob3IgfSBmcm9tICcuL2F1dGhvci9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYWluIH0gZnJvbSAnLi9jaGFpbi9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoaWxkc3RhdGUgfSBmcm9tICcuL2NoaWxkc3RhdGUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvZmZjaGFpbiB9IGZyb20gJy4vb2ZmY2hhaW4vZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXltZW50IH0gZnJvbSAnLi9wYXltZW50L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdGUgfSBmcm9tICcuL3N0YXRlL2RlZmluaXRpb25zLmpzJztcbiIsImV4cG9ydCBjb25zdCBBbGxDb252aWN0aW9ucyA9IFtcbiAgICAvLyAwLjF4IHZvdGVzLCB1bmxvY2tlZC5cbiAgICAnTm9uZScsXG4gICAgLy8gMXggdm90ZXMsIGxvY2tlZCBmb3IgYW4gZW5hY3RtZW50IHBlcmlvZCBmb2xsb3dpbmcgYSBzdWNjZXNzZnVsIHZvdGUuXG4gICAgJ0xvY2tlZDF4JyxcbiAgICAvLyAyeCB2b3RlcywgbG9ja2VkIGZvciAyeCBlbmFjdG1lbnQgcGVyaW9kcyBmb2xsb3dpbmcgYSBzdWNjZXNzZnVsIHZvdGUuXG4gICAgJ0xvY2tlZDJ4JyxcbiAgICAvLyAzeCB2b3RlcywgbG9ja2VkIGZvciA0eC4uLlxuICAgICdMb2NrZWQzeCcsXG4gICAgLy8gNHggdm90ZXMsIGxvY2tlZCBmb3IgOHguLi5cbiAgICAnTG9ja2VkNHgnLFxuICAgIC8vIDV4IHZvdGVzLCBsb2NrZWQgZm9yIDE2eC4uLlxuICAgICdMb2NrZWQ1eCcsXG4gICAgLy8gNnggdm90ZXMsIGxvY2tlZCBmb3IgMzJ4Li4uXG4gICAgJ0xvY2tlZDZ4J1xuXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjY291bnRWb3RlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFN0YW5kYXJkOiAnQWNjb3VudFZvdGVTdGFuZGFyZCcsXG4gICAgICAgICAgICAgICAgU3BsaXQ6ICdBY2NvdW50Vm90ZVNwbGl0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBBY2NvdW50Vm90ZVNwbGl0OiB7XG4gICAgICAgICAgICBheWU6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIG5heTogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIEFjY291bnRWb3RlU3RhbmRhcmQ6IHtcbiAgICAgICAgICAgIHZvdGU6ICdWb3RlJyxcbiAgICAgICAgICAgIGJhbGFuY2U6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBDb252aWN0aW9uOiB7XG4gICAgICAgICAgICBfZW51bTogQWxsQ29udmljdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgRGVsZWdhdGlvbnM6IHtcbiAgICAgICAgICAgIHZvdGVzOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBjYXBpdGFsOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgUHJlaW1hZ2VTdGF0dXM6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgTWlzc2luZzogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgICAgICBBdmFpbGFibGU6ICdQcmVpbWFnZVN0YXR1c0F2YWlsYWJsZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUHJlaW1hZ2VTdGF0dXNBdmFpbGFibGU6IHtcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcycsXG4gICAgICAgICAgICBwcm92aWRlcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBzaW5jZTogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGV4cGlyeTogJ09wdGlvbjxCbG9ja051bWJlcj4nXG4gICAgICAgIH0sXG4gICAgICAgIFByaW9yTG9jazogJyhCbG9ja051bWJlciwgQmFsYW5jZSknLFxuICAgICAgICBQcm9wSW5kZXg6ICd1MzInLFxuICAgICAgICBQcm9wb3NhbDogJ0NhbGwnLFxuICAgICAgICBQcm94eVN0YXRlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE9wZW46ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgICAgIEFjdGl2ZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUmVmZXJlbmR1bUluZGV4OiAndTMyJyxcbiAgICAgICAgUmVmZXJlbmR1bUluZm9UbzIzOToge1xuICAgICAgICAgICAgZW5kOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgcHJvcG9zYWxIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6ICdWb3RlVGhyZXNob2xkJyxcbiAgICAgICAgICAgIGRlbGF5OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIFJlZmVyZW5kdW1JbmZvOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE9uZ29pbmc6ICdSZWZlcmVuZHVtU3RhdHVzJyxcbiAgICAgICAgICAgICAgICBGaW5pc2hlZDogJ1JlZmVyZW5kdW1JbmZvRmluaXNoZWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFJlZmVyZW5kdW1JbmZvRmluaXNoZWQ6IHtcbiAgICAgICAgICAgIGFwcHJvdmVkOiAnYm9vbCcsXG4gICAgICAgICAgICBlbmQ6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgUmVmZXJlbmR1bVN0YXR1czoge1xuICAgICAgICAgICAgZW5kOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgcHJvcG9zYWxIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6ICdWb3RlVGhyZXNob2xkJyxcbiAgICAgICAgICAgIGRlbGF5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgdGFsbHk6ICdUYWxseSdcbiAgICAgICAgfSxcbiAgICAgICAgVGFsbHk6IHtcbiAgICAgICAgICAgIGF5ZXM6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIG5heXM6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHR1cm5vdXQ6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBWb3Rpbmc6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgRGlyZWN0OiAnVm90aW5nRGlyZWN0JyxcbiAgICAgICAgICAgICAgICBEZWxlZ2F0aW5nOiAnVm90aW5nRGVsZWdhdGluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgVm90aW5nRGlyZWN0OiB7XG4gICAgICAgICAgICB2b3RlczogJ1ZlYzxWb3RpbmdEaXJlY3RWb3RlPicsXG4gICAgICAgICAgICBkZWxlZ2F0aW9uczogJ0RlbGVnYXRpb25zJyxcbiAgICAgICAgICAgIHByaW9yOiAnUHJpb3JMb2NrJ1xuICAgICAgICB9LFxuICAgICAgICBWb3RpbmdEaXJlY3RWb3RlOiAnKFJlZmVyZW5kdW1JbmRleCwgQWNjb3VudFZvdGUpJyxcbiAgICAgICAgVm90aW5nRGVsZWdhdGluZzoge1xuICAgICAgICAgICAgYmFsYW5jZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgdGFyZ2V0OiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGNvbnZpY3Rpb246ICdDb252aWN0aW9uJyxcbiAgICAgICAgICAgIGRlbGVnYXRpb25zOiAnRGVsZWdhdGlvbnMnLFxuICAgICAgICAgICAgcHJpb3I6ICdQcmlvckxvY2snXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICBCbG9ja1N0YXRzOiB7XG4gICAgICAgICAgICB3aXRuZXNzTGVuOiAndTY0JyxcbiAgICAgICAgICAgIHdpdG5lc3NDb21wYWN0TGVuOiAndTY0JyxcbiAgICAgICAgICAgIGJsb2NrTGVuOiAndTY0JyxcbiAgICAgICAgICAgIGJsb2NrTnVtRXh0cmluc2ljczogJ3U2NCdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGdldEJsb2NrU3RhdHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZWV4ZWN1dGUgdGhlIHNwZWNpZmllZCBgYmxvY2tfaGFzaGAgYW5kIGdhdGhlciBzdGF0aXN0aWNzIHdoaWxlIGRvaW5nIHNvJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxCbG9ja1N0YXRzPidcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7fVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIEF1dGhvcml0eURpc2NvdmVyeUFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZSBhdXRob3JpdHkgaWRlbnRpZmllcnMgb2YgdGhlIGN1cnJlbnQgYW5kIG5leHQgYXV0aG9yaXR5IHNldC4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEF1dGhvcml0eUlkPidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFwcHJvdmFsRmxhZzogJ3UzMicsXG4gICAgICAgIERlZnVuY3RWb3Rlcjoge1xuICAgICAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHZvdGVDb3VudDogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBjYW5kaWRhdGVDb3VudDogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgfSxcbiAgICAgICAgUmVub3VuY2luZzoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBNZW1iZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBSdW5uZXJVcDogJ051bGwnLFxuICAgICAgICAgICAgICAgIENhbmRpZGF0ZTogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2V0SW5kZXg6ICd1MzInLFxuICAgICAgICBWb3RlOiAnR2VuZXJpY1ZvdGUnLFxuICAgICAgICBWb3RlSW5kZXg6ICd1MzInLFxuICAgICAgICBWb3RlckluZm86IHtcbiAgICAgICAgICAgIGxhc3RBY3RpdmU6ICdWb3RlSW5kZXgnLFxuICAgICAgICAgICAgbGFzdFdpbjogJ1ZvdGVJbmRleCcsXG4gICAgICAgICAgICBwb3Q6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHN0YWtlOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgVm90ZVRocmVzaG9sZDoge1xuICAgICAgICAgICAgX2VudW06IFtcbiAgICAgICAgICAgICAgICAnU3VwZXIgTWFqb3JpdHkgQXBwcm92ZScsXG4gICAgICAgICAgICAgICAgJ1N1cGVyIE1ham9yaXR5IEFnYWluc3QnLFxuICAgICAgICAgICAgICAgICdTaW1wbGUgTWFqb3JpdHknXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICBDcmVhdGVkQmxvY2s6IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIGJsb2NrSGFzaDogJ2hhc2gnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvY2tIYXNoOiAnQmxvY2tIYXNoJyxcbiAgICAgICAgICAgIGF1eDogJ0ltcG9ydGVkQXV4J1xuICAgICAgICB9LFxuICAgICAgICBJbXBvcnRlZEF1eDoge1xuICAgICAgICAgICAgaGVhZGVyT25seTogJ2Jvb2wnLFxuICAgICAgICAgICAgY2xlYXJKdXN0aWZpY2F0aW9uUmVxdWVzdHM6ICdib29sJyxcbiAgICAgICAgICAgIG5lZWRzSnVzdGlmaWNhdGlvbjogJ2Jvb2wnLFxuICAgICAgICAgICAgYmFkSnVzdGlmaWNhdGlvbjogJ2Jvb2wnLFxuICAgICAgICAgICAgbmVlZHNGaW5hbGl0eVByb29mOiAnYm9vbCcsXG4gICAgICAgICAgICBpc05ld0Jlc3Q6ICdib29sJ1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBycGMgPSB7XG4gICAgY3JlYXRlQmxvY2s6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnN0cnVjdHMgdGhlIG1hbnVhbC1zZWFsIGF1dGhvcnNoaXAgdGFzayB0byBjcmVhdGUgYSBuZXcgYmxvY2snLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY3JlYXRlRW1wdHknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmluYWxpemUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdwYXJlbnRIYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQ3JlYXRlZEJsb2NrJ1xuICAgIH0sXG4gICAgZmluYWxpemVCbG9jazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0luc3RydWN0cyB0aGUgbWFudWFsLXNlYWwgYXV0aG9yc2hpcCB0YXNrIHRvIGZpbmFsaXplIGEgYmxvY2snLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnanVzdGlmaWNhdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0p1c3RpZmljYXRpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIG1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzY2FsZUluZm8gfSBmcm9tICcuL3NjYWxlSW5mby9kZWZpbml0aW9ucy5qcyc7XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmNvbnN0IFYwID0ge1xuICAgIEJsb2NrVjA6IHtcbiAgICAgICAgaGVhZGVyOiAnRXRoSGVhZGVyJyxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiAnVmVjPFRyYW5zYWN0aW9uVjA+JyxcbiAgICAgICAgb21tZXJzOiAnVmVjPEV0aEhlYWRlcj4nXG4gICAgfSxcbiAgICBMZWdhY3lUcmFuc2FjdGlvbjoge1xuICAgICAgICBub25jZTogJ1UyNTYnLFxuICAgICAgICBnYXNQcmljZTogJ1UyNTYnLFxuICAgICAgICBnYXNMaW1pdDogJ1UyNTYnLFxuICAgICAgICBhY3Rpb246ICdFdGhUcmFuc2FjdGlvbkFjdGlvbicsXG4gICAgICAgIHZhbHVlOiAnVTI1NicsXG4gICAgICAgIGlucHV0OiAnQnl0ZXMnLFxuICAgICAgICBzaWduYXR1cmU6ICdFdGhUcmFuc2FjdGlvblNpZ25hdHVyZSdcbiAgICB9LFxuICAgIFRyYW5zYWN0aW9uVjA6ICdMZWdhY3lUcmFuc2FjdGlvbidcbn07XG5jb25zdCBWMSA9IHtcbiAgICBCbG9ja1YxOiB7XG4gICAgICAgIGhlYWRlcjogJ0V0aEhlYWRlcicsXG4gICAgICAgIHRyYW5zYWN0aW9uczogJ1ZlYzxUcmFuc2FjdGlvblYxPicsXG4gICAgICAgIG9tbWVyczogJ1ZlYzxFdGhIZWFkZXI+J1xuICAgIH0sXG4gICAgRUlQMjkzMFRyYW5zYWN0aW9uOiB7XG4gICAgICAgIGNoYWluSWQ6ICd1NjQnLFxuICAgICAgICBub25jZTogJ1UyNTYnLFxuICAgICAgICBnYXNQcmljZTogJ1UyNTYnLFxuICAgICAgICBnYXNMaW1pdDogJ1UyNTYnLFxuICAgICAgICBhY3Rpb246ICdFdGhUcmFuc2FjdGlvbkFjdGlvbicsXG4gICAgICAgIHZhbHVlOiAnVTI1NicsXG4gICAgICAgIGlucHV0OiAnQnl0ZXMnLFxuICAgICAgICBhY2Nlc3NMaXN0OiAnRXRoQWNjZXNzTGlzdCcsXG4gICAgICAgIG9kZFlQYXJpdHk6ICdib29sJyxcbiAgICAgICAgcjogJ0gyNTYnLFxuICAgICAgICBzOiAnSDI1NidcbiAgICB9LFxuICAgIFRyYW5zYWN0aW9uVjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIExlZ2FjeTogJ0xlZ2FjeVRyYW5zYWN0aW9uJyxcbiAgICAgICAgICAgIEVJUDI5MzA6ICdFSVAyOTMwVHJhbnNhY3Rpb24nXG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3QgVjIgPSB7XG4gICAgQmxvY2tWMjoge1xuICAgICAgICBoZWFkZXI6ICdFdGhIZWFkZXInLFxuICAgICAgICB0cmFuc2FjdGlvbnM6ICdWZWM8VHJhbnNhY3Rpb25WMj4nLFxuICAgICAgICBvbW1lcnM6ICdWZWM8RXRoSGVhZGVyPidcbiAgICB9LFxuICAgIEVJUDE1NTlUcmFuc2FjdGlvbjoge1xuICAgICAgICBjaGFpbklkOiAndTY0JyxcbiAgICAgICAgbm9uY2U6ICdVMjU2JyxcbiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICdVMjU2JyxcbiAgICAgICAgbWF4RmVlUGVyR2FzOiAnVTI1NicsXG4gICAgICAgIGdhc0xpbWl0OiAnVTI1NicsXG4gICAgICAgIGFjdGlvbjogJ0V0aFRyYW5zYWN0aW9uQWN0aW9uJyxcbiAgICAgICAgdmFsdWU6ICdVMjU2JyxcbiAgICAgICAgaW5wdXQ6ICdCeXRlcycsXG4gICAgICAgIGFjY2Vzc0xpc3Q6ICdFdGhBY2Nlc3NMaXN0JyxcbiAgICAgICAgb2RkWVBhcml0eTogJ2Jvb2wnLFxuICAgICAgICByOiAnSDI1NicsXG4gICAgICAgIHM6ICdIMjU2J1xuICAgIH0sXG4gICAgVHJhbnNhY3Rpb25WMjoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgTGVnYWN5OiAnTGVnYWN5VHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgRUlQMjkzMDogJ0VJUDI5MzBUcmFuc2FjdGlvbicsXG4gICAgICAgICAgICBFSVAxNTU5OiAnRUlQMTU1OVRyYW5zYWN0aW9uJ1xuICAgICAgICB9XG4gICAgfVxufTtcbmNvbnN0IHR5cGVzID0ge1xuICAgIC4uLlYwLFxuICAgIC4uLlYxLFxuICAgIC4uLlYyLFxuICAgIEV0aGVyZXVtQWNjb3VudElkOiAnR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkJyxcbiAgICBFdGhlcmV1bUFkZHJlc3M6ICdHZW5lcmljRXRoZXJldW1BY2NvdW50SWQnLFxuICAgIEV0aGVyZXVtTG9va3VwU291cmNlOiAnR2VuZXJpY0V0aGVyZXVtTG9va3VwU291cmNlJyxcbiAgICBFdGhlcmV1bVNpZ25hdHVyZTogJ1t1ODsgNjVdJyxcbiAgICBFdGhBY2Nlc3NMaXN0SXRlbToge1xuICAgICAgICBhZGRyZXNzOiAnRXRoQWRkcmVzcycsXG4gICAgICAgIHNsb3RzOiAnVmVjPEgyNTY+J1xuICAgIH0sXG4gICAgRXRoQWNjZXNzTGlzdDogJ1ZlYzxFdGhBY2Nlc3NMaXN0SXRlbT4nLFxuICAgIEV0aEFjY291bnQ6IHtcbiAgICAgICAgYWRkcmVzczogJ0V0aEFkZHJlc3MnLFxuICAgICAgICBiYWxhbmNlOiAnVTI1NicsXG4gICAgICAgIG5vbmNlOiAnVTI1NicsXG4gICAgICAgIGNvZGVIYXNoOiAnSDI1NicsXG4gICAgICAgIHN0b3JhZ2VIYXNoOiAnSDI1NicsXG4gICAgICAgIGFjY291bnRQcm9vZjogJ1ZlYzxCeXRlcz4nLFxuICAgICAgICBzdG9yYWdlUHJvb2Y6ICdWZWM8RXRoU3RvcmFnZVByb29mPidcbiAgICB9LFxuICAgIEV0aEFkZHJlc3M6ICdIMTYwJyxcbiAgICBFdGhCbG9jazoge1xuICAgICAgICBoZWFkZXI6ICdFdGhIZWFkZXInLFxuICAgICAgICB0cmFuc2FjdGlvbnM6ICdWZWM8RXRoVHJhbnNhY3Rpb24+JyxcbiAgICAgICAgb21tZXJzOiAnVmVjPEV0aEhlYWRlcj4nXG4gICAgfSxcbiAgICBFdGhIZWFkZXI6IHtcbiAgICAgICAgcGFyZW50SGFzaDogJ0gyNTYnLFxuICAgICAgICBvbW1lcnNIYXNoOiAnSDI1NicsXG4gICAgICAgIGJlbmVmaWNpYXJ5OiAnRXRoQWRkcmVzcycsXG4gICAgICAgIHN0YXRlUm9vdDogJ0gyNTYnLFxuICAgICAgICB0cmFuc2FjdGlvbnNSb290OiAnSDI1NicsXG4gICAgICAgIHJlY2VpcHRzUm9vdDogJ0gyNTYnLFxuICAgICAgICBsb2dzQmxvb206ICdFdGhCbG9vbScsXG4gICAgICAgIGRpZmZpY3VsdHk6ICdVMjU2JyxcbiAgICAgICAgbnVtYmVyOiAnVTI1NicsXG4gICAgICAgIGdhc0xpbWl0OiAnVTI1NicsXG4gICAgICAgIGdhc1VzZWQ6ICdVMjU2JyxcbiAgICAgICAgdGltZXN0YW1wOiAndTY0JyxcbiAgICAgICAgZXh0cmFEYXRhOiAnQnl0ZXMnLFxuICAgICAgICBtaXhNYXNoOiAnSDI1NicsXG4gICAgICAgIG5vbmNlOiAnSDY0J1xuICAgIH0sXG4gICAgRXRoUmljaEJsb2NrOiB7XG4gICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgYmxvY2tIYXNoOiAnaGFzaCcsXG4gICAgICAgICAgICBibG9ja1NpemU6ICdzaXplJ1xuICAgICAgICB9LFxuICAgICAgICBibG9ja0hhc2g6ICdPcHRpb248SDI1Nj4nLFxuICAgICAgICBwYXJlbnRIYXNoOiAnSDI1NicsXG4gICAgICAgIHNoYTNVbmNsZXM6ICdIMjU2JyxcbiAgICAgICAgYXV0aG9yOiAnRXRoQWRkcmVzcycsXG4gICAgICAgIG1pbmVyOiAnRXRoQWRkcmVzcycsXG4gICAgICAgIHN0YXRlUm9vdDogJ0gyNTYnLFxuICAgICAgICB0cmFuc2FjdGlvbnNSb290OiAnSDI1NicsXG4gICAgICAgIHJlY2VpcHRzUm9vdDogJ0gyNTYnLFxuICAgICAgICBudW1iZXI6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICBnYXNVc2VkOiAnVTI1NicsXG4gICAgICAgIGdhc0xpbWl0OiAnVTI1NicsXG4gICAgICAgIGV4dHJhRGF0YTogJ0J5dGVzJyxcbiAgICAgICAgbG9nc0Jsb29tOiAnRXRoQmxvb20nLFxuICAgICAgICB0aW1lc3RhbXA6ICdVMjU2JyxcbiAgICAgICAgZGlmZmljdWx0eTogJ1UyNTYnLFxuICAgICAgICB0b3RhbERpZmZpY3VsdHk6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICBzZWFsRmllbGRzOiAnVmVjPEJ5dGVzPicsXG4gICAgICAgIHVuY2xlczogJ1ZlYzxIMjU2PicsXG4gICAgICAgIHRyYW5zYWN0aW9uczogJ1ZlYzxFdGhUcmFuc2FjdGlvbj4nLFxuICAgICAgICBibG9ja1NpemU6ICdPcHRpb248VTI1Nj4nXG4gICAgfSxcbiAgICBFdGhCbG9vbTogJ0gyMDQ4JyxcbiAgICBFdGhDYWxsUmVxdWVzdDoge1xuICAgICAgICBmcm9tOiAnT3B0aW9uPEV0aEFkZHJlc3M+JyxcbiAgICAgICAgdG86ICdPcHRpb248RXRoQWRkcmVzcz4nLFxuICAgICAgICBnYXNQcmljZTogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGdhczogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIHZhbHVlOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgZGF0YTogJ09wdGlvbjxCeXRlcz4nLFxuICAgICAgICBub25jZTogJ09wdGlvbjxVMjU2PidcbiAgICB9LFxuICAgIEV0aEZlZUhpc3Rvcnk6IHtcbiAgICAgICAgb2xkZXN0QmxvY2s6ICdVMjU2JyxcbiAgICAgICAgYmFzZUZlZVBlckdhczogJ1ZlYzxVMjU2PicsXG4gICAgICAgIGdhc1VzZWRSYXRpbzogJ1ZlYzxmNjQ+JyxcbiAgICAgICAgcmV3YXJkOiAnT3B0aW9uPFZlYzxWZWM8VTI1Nj4+PidcbiAgICB9LFxuICAgIEV0aEZpbHRlcjoge1xuICAgICAgICBmcm9tQmxvY2s6ICdPcHRpb248QmxvY2tOdW1iZXI+JyxcbiAgICAgICAgdG9CbG9jazogJ09wdGlvbjxCbG9ja051bWJlcj4nLFxuICAgICAgICBibG9ja0hhc2g6ICdPcHRpb248SDI1Nj4nLFxuICAgICAgICBhZGRyZXNzOiAnT3B0aW9uPEV0aEZpbHRlckFkZHJlc3M+JyxcbiAgICAgICAgdG9waWNzOiAnT3B0aW9uPEV0aEZpbHRlclRvcGljPidcbiAgICB9LFxuICAgIEV0aEZpbHRlckFkZHJlc3M6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFNpbmdsZTogJ0V0aEFkZHJlc3MnLFxuICAgICAgICAgICAgTXVsdGlwbGU6ICdWZWM8RXRoQWRkcmVzcz4nLFxuICAgICAgICAgICAgTnVsbDogJ051bGwnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEV0aEZpbHRlckNoYW5nZXM6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIExvZ3M6ICdWZWM8RXRoTG9nPicsXG4gICAgICAgICAgICBIYXNoZXM6ICdWZWM8SDI1Nj4nLFxuICAgICAgICAgICAgRW1wdHk6ICdOdWxsJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFdGhGaWx0ZXJUb3BpYzoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgU2luZ2xlOiAnRXRoRmlsdGVyVG9waWNJbm5lcicsXG4gICAgICAgICAgICBNdWx0aXBsZTogJ1ZlYzxFdGhGaWx0ZXJUb3BpY0lubmVyPicsXG4gICAgICAgICAgICBOdWxsOiAnTnVsbCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRXRoRmlsdGVyVG9waWNFbnRyeTogJ09wdGlvbjxIMjU2PicsXG4gICAgRXRoRmlsdGVyVG9waWNJbm5lcjoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgU2luZ2xlOiAnRXRoRmlsdGVyVG9waWNFbnRyeScsXG4gICAgICAgICAgICBNdWx0aXBsZTogJ1ZlYzxFdGhGaWx0ZXJUb3BpY0VudHJ5PicsXG4gICAgICAgICAgICBOdWxsOiAnTnVsbCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRXRoUmljaEhlYWRlcjoge1xuICAgICAgICBfYWxpYXM6IHtcbiAgICAgICAgICAgIGJsb2NrSGFzaDogJ2hhc2gnLFxuICAgICAgICAgICAgYmxvY2tTaXplOiAnc2l6ZSdcbiAgICAgICAgfSxcbiAgICAgICAgYmxvY2tIYXNoOiAnT3B0aW9uPEgyNTY+JyxcbiAgICAgICAgcGFyZW50SGFzaDogJ0gyNTYnLFxuICAgICAgICBzaGEzVW5jbGVzOiAnSDI1NicsXG4gICAgICAgIGF1dGhvcjogJ0V0aEFkZHJlc3MnLFxuICAgICAgICBtaW5lcjogJ0V0aEFkZHJlc3MnLFxuICAgICAgICBzdGF0ZVJvb3Q6ICdIMjU2JyxcbiAgICAgICAgdHJhbnNhY3Rpb25zUm9vdDogJ0gyNTYnLFxuICAgICAgICByZWNlaXB0c1Jvb3Q6ICdIMjU2JyxcbiAgICAgICAgbnVtYmVyOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgZ2FzVXNlZDogJ1UyNTYnLFxuICAgICAgICBnYXNMaW1pdDogJ1UyNTYnLFxuICAgICAgICBleHRyYURhdGE6ICdCeXRlcycsXG4gICAgICAgIGxvZ3NCbG9vbTogJ0V0aEJsb29tJyxcbiAgICAgICAgdGltZXN0YW1wOiAnVTI1NicsXG4gICAgICAgIGRpZmZpY3VsdHk6ICdVMjU2JyxcbiAgICAgICAgc2VhbEZpZWxkczogJ1ZlYzxCeXRlcz4nLFxuICAgICAgICBibG9ja1NpemU6ICdPcHRpb248VTI1Nj4nXG4gICAgfSxcbiAgICBFdGhMb2c6IHtcbiAgICAgICAgYWRkcmVzczogJ0V0aEFkZHJlc3MnLFxuICAgICAgICB0b3BpY3M6ICdWZWM8SDI1Nj4nLFxuICAgICAgICBkYXRhOiAnQnl0ZXMnLFxuICAgICAgICBibG9ja0hhc2g6ICdPcHRpb248SDI1Nj4nLFxuICAgICAgICBibG9ja051bWJlcjogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIHRyYW5zYWN0aW9uSGFzaDogJ09wdGlvbjxIMjU2PicsXG4gICAgICAgIHRyYW5zYWN0aW9uSW5kZXg6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICBsb2dJbmRleDogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIHRyYW5zYWN0aW9uTG9nSW5kZXg6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICByZW1vdmVkOiAnYm9vbCdcbiAgICB9LFxuICAgIEV0aFJlY2VpcHQ6IHtcbiAgICAgICAgdHJhbnNhY3Rpb25IYXNoOiAnT3B0aW9uPEgyNTY+JyxcbiAgICAgICAgdHJhbnNhY3Rpb25JbmRleDogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGJsb2NrSGFzaDogJ09wdGlvbjxIMjU2PicsXG4gICAgICAgIGZyb206ICdPcHRpb248RXRoQWRkcmVzcz4nLFxuICAgICAgICB0bzogJ09wdGlvbjxFdGhBZGRyZXNzPicsXG4gICAgICAgIGJsb2NrTnVtYmVyOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgY3VtdWxhdGl2ZUdhc1VzZWQ6ICdVMjU2JyxcbiAgICAgICAgZ2FzVXNlZDogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJ09wdGlvbjxFdGhBZGRyZXNzPicsXG4gICAgICAgIGxvZ3M6ICdWZWM8RXRoTG9nPicsXG4gICAgICAgIHJvb3Q6ICdPcHRpb248SDI1Nj4nLFxuICAgICAgICBsb2dzQmxvb206ICdFdGhCbG9vbScsXG4gICAgICAgIHN0YXR1c0NvZGU6ICdPcHRpb248VTY0PidcbiAgICB9LFxuICAgIC8vIG5vdCBjb252aW5jZWQsIGhvd2V2ZXIgdGhlIG9yaWdpbmFsIGNvbW1pdCBtYXRjaGVzLCBzby4uLiAobWF5YmUgVjMgaXMgaW5jb3JyZWN0PylcbiAgICBFdGhSZWNlaXB0VjA6ICdFdGhSZWNlaXB0JyxcbiAgICBFdGhSZWNlaXB0VjM6ICdFdGhSZWNlaXB0JyxcbiAgICBFdGhTdG9yYWdlUHJvb2Y6IHtcbiAgICAgICAga2V5OiAnVTI1NicsXG4gICAgICAgIHZhbHVlOiAnVTI1NicsXG4gICAgICAgIHByb29mOiAnVmVjPEJ5dGVzPidcbiAgICB9LFxuICAgIEV0aFN1YktpbmQ6IHtcbiAgICAgICAgX2VudW06IFsnbmV3SGVhZHMnLCAnbG9ncycsICduZXdQZW5kaW5nVHJhbnNhY3Rpb25zJywgJ3N5bmNpbmcnXVxuICAgIH0sXG4gICAgRXRoU3ViUGFyYW1zOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBOb25lOiAnTnVsbCcsXG4gICAgICAgICAgICBMb2dzOiAnRXRoRmlsdGVyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFdGhTdWJSZXN1bHQ6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEhlYWRlcjogJ0V0aFJpY2hIZWFkZXInLFxuICAgICAgICAgICAgTG9nOiAnRXRoTG9nJyxcbiAgICAgICAgICAgIFRyYW5zYWN0aW9uSGFzaDogJ0gyNTYnLFxuICAgICAgICAgICAgU3luY1N0YXRlOiAnRXRoU3luY1N0YXR1cydcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRXRoU3luY0luZm86IHtcbiAgICAgICAgc3RhcnRpbmdCbG9jazogJ1UyNTYnLFxuICAgICAgICBjdXJyZW50QmxvY2s6ICdVMjU2JyxcbiAgICAgICAgaGlnaGVzdEJsb2NrOiAnVTI1NicsXG4gICAgICAgIHdhcnBDaHVua3NBbW91bnQ6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICB3YXJwQ2h1bmtzUHJvY2Vzc2VkOiAnT3B0aW9uPFUyNTY+J1xuICAgIH0sXG4gICAgRXRoU3luY1N0YXR1czoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgSW5mbzogJ0V0aFN5bmNJbmZvJyxcbiAgICAgICAgICAgIE5vbmU6ICdOdWxsJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFdGhUcmFuc2FjdGlvbjoge1xuICAgICAgICBoYXNoOiAnSDI1NicsXG4gICAgICAgIG5vbmNlOiAnVTI1NicsXG4gICAgICAgIGJsb2NrSGFzaDogJ09wdGlvbjxIMjU2PicsXG4gICAgICAgIGJsb2NrTnVtYmVyOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgdHJhbnNhY3Rpb25JbmRleDogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGZyb206ICdIMTYwJyxcbiAgICAgICAgdG86ICdPcHRpb248SDE2MD4nLFxuICAgICAgICB2YWx1ZTogJ1UyNTYnLFxuICAgICAgICBnYXNQcmljZTogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIG1heEZlZVBlckdhczogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgZ2FzOiAnVTI1NicsXG4gICAgICAgIGlucHV0OiAnQnl0ZXMnLFxuICAgICAgICBjcmVhdGVzOiAnT3B0aW9uPEgxNjA+JyxcbiAgICAgICAgcmF3OiAnQnl0ZXMnLFxuICAgICAgICBwdWJsaWNLZXk6ICdPcHRpb248SDUxMj4nLFxuICAgICAgICBjaGFpbklkOiAnT3B0aW9uPFU2ND4nLFxuICAgICAgICBzdGFuZGFyZFY6ICdVMjU2JyxcbiAgICAgICAgdjogJ1UyNTYnLFxuICAgICAgICByOiAnVTI1NicsXG4gICAgICAgIHM6ICdVMjU2JyxcbiAgICAgICAgYWNjZXNzTGlzdDogJ09wdGlvbjxWZWM8RXRoQWNjZXNzTGlzdEl0ZW0+PicsXG4gICAgICAgIHRyYW5zYWN0aW9uVHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICB9LFxuICAgIEV0aFRyYW5zYWN0aW9uU2lnbmF0dXJlOiB7XG4gICAgICAgIHY6ICd1NjQnLFxuICAgICAgICByOiAnSDI1NicsXG4gICAgICAgIHM6ICdIMjU2J1xuICAgIH0sXG4gICAgRXRoVHJhbnNhY3Rpb25BY3Rpb246IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENhbGw6ICdIMTYwJyxcbiAgICAgICAgICAgIENyZWF0ZTogJ051bGwnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEV0aFRyYW5zYWN0aW9uQ29uZGl0aW9uOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBibG9jazogJ3U2NCcsXG4gICAgICAgICAgICB0aW1lOiAndTY0J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFdGhUcmFuc2FjdGlvblJlcXVlc3Q6IHtcbiAgICAgICAgZnJvbTogJ09wdGlvbjxFdGhBZGRyZXNzPicsXG4gICAgICAgIHRvOiAnT3B0aW9uPEV0aEFkZHJlc3M+JyxcbiAgICAgICAgZ2FzUHJpY2U6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICBnYXM6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICB2YWx1ZTogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGRhdGE6ICdPcHRpb248Qnl0ZXM+JyxcbiAgICAgICAgbm9uY2U6ICdPcHRpb248VTI1Nj4nXG4gICAgfSxcbiAgICBFdGhUcmFuc2FjdGlvblN0YXR1czoge1xuICAgICAgICB0cmFuc2FjdGlvbkhhc2g6ICdIMjU2JyxcbiAgICAgICAgdHJhbnNhY3Rpb25JbmRleDogJ3UzMicsXG4gICAgICAgIGZyb206ICdFdGhBZGRyZXNzJyxcbiAgICAgICAgdG86ICdPcHRpb248RXRoQWRkcmVzcz4nLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICdPcHRpb248RXRoQWRkcmVzcz4nLFxuICAgICAgICBsb2dzOiAnVmVjPEV0aExvZz4nLFxuICAgICAgICBsb2dzQmxvb206ICdFdGhCbG9vbSdcbiAgICB9LFxuICAgIEV0aFdvcms6IHtcbiAgICAgICAgcG93SGFzaDogJ0gyNTYnLFxuICAgICAgICBzZWVkSGFzaDogJ0gyNTYnLFxuICAgICAgICB0YXJnZXQ6ICdIMjU2JyxcbiAgICAgICAgbnVtYmVyOiAnT3B0aW9uPHU2ND4nXG4gICAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IHsgcnBjLCBydW50aW1lLCB0eXBlcyB9O1xuIiwiY29uc3QgbmV0UnBjID0ge1xuICAgIGxpc3RlbmluZzoge1xuICAgICAgICBhbGlhc1NlY3Rpb246ICduZXQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdHJ1ZSBpZiBjbGllbnQgaXMgYWN0aXZlbHkgbGlzdGVuaW5nIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zLiBPdGhlcndpc2UgZmFsc2UuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfSxcbiAgICBwZWVyQ291bnQ6IHtcbiAgICAgICAgYWxpYXNTZWN0aW9uOiAnbmV0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIG51bWJlciBvZiBwZWVycyBjb25uZWN0ZWQgdG8gbm9kZS4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVGV4dCdcbiAgICB9LFxuICAgIHZlcnNpb246IHtcbiAgICAgICAgYWxpYXNTZWN0aW9uOiAnbmV0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHByb3RvY29sIHZlcnNpb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgfVxufTtcbmNvbnN0IHdlYjNScGMgPSB7XG4gICAgY2xpZW50VmVyc2lvbjoge1xuICAgICAgICBhbGlhc1NlY3Rpb246ICd3ZWIzJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGN1cnJlbnQgY2xpZW50IHZlcnNpb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgfSxcbiAgICBzaGEzOiB7XG4gICAgICAgIGFsaWFzU2VjdGlvbjogJ3dlYjMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgc2hhMyBvZiB0aGUgZ2l2ZW4gZGF0YScsXG4gICAgICAgIHBhcmFtczogW3sgbmFtZTogJ2RhdGEnLCB0eXBlOiAnQnl0ZXMnIH1dLFxuICAgICAgICB0eXBlOiAnSDI1NidcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICAuLi5uZXRScGMsXG4gICAgLi4ud2ViM1JwYyxcbiAgICBhY2NvdW50czoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYWNjb3VudHMgbGlzdC4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVmVjPEgxNjA+J1xuICAgIH0sXG4gICAgYmxvY2tOdW1iZXI6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBibG9ja051bWJlcicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdVMjU2J1xuICAgIH0sXG4gICAgY2FsbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0NhbGwgY29udHJhY3QsIHJldHVybmluZyB0aGUgb3V0cHV0IGRhdGEuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlcXVlc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhDYWxsUmVxdWVzdCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgIH0sXG4gICAgY2hhaW5JZDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGNoYWluIElEIHVzZWQgZm9yIHRyYW5zYWN0aW9uIHNpZ25pbmcgYXQgdGhlIGN1cnJlbnQgYmVzdCBibG9jay4gTm9uZSBpcyByZXR1cm5lZCBpZiBub3QgYXZhaWxhYmxlLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdVNjQnXG4gICAgfSxcbiAgICBjb2luYmFzZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYmxvY2sgYXV0aG9yLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgIH0sXG4gICAgZXN0aW1hdGVHYXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdFc3RpbWF0ZSBnYXMgbmVlZGVkIGZvciBleGVjdXRpb24gb2YgZ2l2ZW4gY29udHJhY3QuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlcXVlc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhDYWxsUmVxdWVzdCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgfSxcbiAgICBmZWVIaXN0b3J5OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBmZWUgaGlzdG9yeSBmb3IgZ2l2ZW4gYmxvY2sgY291bnQgJiByZXdhcmQgcGVyY2VudGlsZXMnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2tDb3VudCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICduZXdlc3RCbG9jaycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncmV3YXJkUGVyY2VudGlsZXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VmVjPGY2ND4+J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXRoRmVlSGlzdG9yeSdcbiAgICB9LFxuICAgIGdhc1ByaWNlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBjdXJyZW50IGdhcyBwcmljZS4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIGdldEJhbGFuY2U6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGJhbGFuY2Ugb2YgdGhlIGdpdmVuIGFjY291bnQuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIGdldEJsb2NrQnlIYXNoOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBibG9jayB3aXRoIGdpdmVuIGhhc2guJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hhc2gnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZnVsbCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248RXRoUmljaEJsb2NrPidcbiAgICB9LFxuICAgIGdldEJsb2NrQnlOdW1iZXI6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGJsb2NrIHdpdGggZ2l2ZW4gbnVtYmVyLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2Z1bGwnLCB0eXBlOiAnYm9vbCcgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPEV0aFJpY2hCbG9jaz4nXG4gICAgfSxcbiAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeUhhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGluIGEgYmxvY2sgd2l0aCBnaXZlbiBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgfSxcbiAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeU51bWJlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgaW4gYSBibG9jayB3aXRoIGdpdmVuIGJsb2NrIG51bWJlci4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2snLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgfSxcbiAgICBnZXRDb2RlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgY29kZSBhdCBnaXZlbiBhZGRyZXNzIGF0IGdpdmVuIHRpbWUgKGJsb2NrIG51bWJlcikuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgfSxcbiAgICBnZXRGaWx0ZXJDaGFuZ2VzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBmaWx0ZXIgY2hhbmdlcyBzaW5jZSBsYXN0IHBvbGwuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2luZGV4JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVTI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V0aEZpbHRlckNoYW5nZXMnXG4gICAgfSxcbiAgICBnZXRGaWx0ZXJMb2dzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhbGwgbG9ncyBtYXRjaGluZyBnaXZlbiBmaWx0ZXIgKGluIGEgcmFuZ2UgXFwnZnJvbVxcJyAtIFxcJ3RvXFwnKS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPEV0aExvZz4nXG4gICAgfSxcbiAgICBnZXRMb2dzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBsb2dzIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBvYmplY3QuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZpbHRlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0V0aEZpbHRlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxFdGhMb2c+J1xuICAgIH0sXG4gICAgZ2V0UHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHByb29mIGZvciBhY2NvdW50IGFuZCBzdG9yYWdlLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDE2MCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3N0b3JhZ2VLZXlzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEgyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdGhBY2NvdW50J1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZUF0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBjb250ZW50IG9mIHRoZSBzdG9yYWdlIGF0IGdpdmVuIGFkZHJlc3MuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSDI1NidcbiAgICB9LFxuICAgIGdldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdHJhbnNhY3Rpb24gYXQgZ2l2ZW4gYmxvY2sgaGFzaCBhbmQgaW5kZXguJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hhc2gnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXRoVHJhbnNhY3Rpb24nXG4gICAgfSxcbiAgICBnZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdHJhbnNhY3Rpb24gYnkgZ2l2ZW4gYmxvY2sgbnVtYmVyIGFuZCBpbmRleC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdGhUcmFuc2FjdGlvbidcbiAgICB9LFxuICAgIGdldFRyYW5zYWN0aW9uQnlIYXNoOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRyYW5zYWN0aW9uIGJ5IGl0cyBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V0aFRyYW5zYWN0aW9uJ1xuICAgIH0sXG4gICAgZ2V0VHJhbnNhY3Rpb25Db3VudDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2VudCBmcm9tIGdpdmVuIGFkZHJlc3MgYXQgZ2l2ZW4gdGltZSAoYmxvY2sgbnVtYmVyKS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdVMjU2J1xuICAgIH0sXG4gICAgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0cmFuc2FjdGlvbiByZWNlaXB0IGJ5IHRyYW5zYWN0aW9uIGhhc2guJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hhc2gnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMjU2J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXRoUmVjZWlwdCdcbiAgICB9LFxuICAgIGdldFVuY2xlQnlCbG9ja0hhc2hBbmRJbmRleDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYW4gdW5jbGVzIGF0IGdpdmVuIGJsb2NrIGFuZCBpbmRleC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gyNTYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdGhSaWNoQmxvY2snXG4gICAgfSxcbiAgICBnZXRVbmNsZUJ5QmxvY2tOdW1iZXJBbmRJbmRleDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYW4gdW5jbGVzIGF0IGdpdmVuIGJsb2NrIGFuZCBpbmRleC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdGhSaWNoQmxvY2snXG4gICAgfSxcbiAgICBnZXRVbmNsZUNvdW50QnlCbG9ja0hhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jbGVzIGluIGEgYmxvY2sgd2l0aCBnaXZlbiBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgfSxcbiAgICBnZXRVbmNsZUNvdW50QnlCbG9ja051bWJlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIG51bWJlciBvZiB1bmNsZXMgaW4gYSBibG9jayB3aXRoIGdpdmVuIGJsb2NrIG51bWJlci4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdVMjU2J1xuICAgIH0sXG4gICAgZ2V0V29yazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGhhc2ggb2YgdGhlIGN1cnJlbnQgYmxvY2ssIHRoZSBzZWVkSGFzaCwgYW5kIHRoZSBib3VuZGFyeSBjb25kaXRpb24gdG8gYmUgbWV0LicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdFdGhXb3JrJ1xuICAgIH0sXG4gICAgaGFzaHJhdGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBudW1iZXIgb2YgaGFzaGVzIHBlciBzZWNvbmQgdGhhdCB0aGUgbm9kZSBpcyBtaW5pbmcgd2l0aC4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBtYXggcHJpb3JpdHkgZmVlIHBlciBnYXMnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIG1pbmluZzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdHJ1ZSBpZiBjbGllbnQgaXMgYWN0aXZlbHkgbWluaW5nIG5ldyBibG9ja3MuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfSxcbiAgICBuZXdCbG9ja0ZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgaWQgb2YgbmV3IGJsb2NrIGZpbHRlci4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIG5ld0ZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgaWQgb2YgbmV3IGZpbHRlci4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnRXRoRmlsdGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIG5ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgaWQgb2YgbmV3IGJsb2NrIGZpbHRlci4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIHByb3RvY29sVmVyc2lvbjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgcHJvdG9jb2wgdmVyc2lvbiBlbmNvZGVkIGFzIGEgc3RyaW5nIChxdW90ZXMgYXJlIG5lY2Vzc2FyeSkuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ3U2NCdcbiAgICB9LFxuICAgIHNlbmRSYXdUcmFuc2FjdGlvbjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1NlbmRzIHNpZ25lZCB0cmFuc2FjdGlvbiwgcmV0dXJuaW5nIGl0cyBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdieXRlcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSDI1NidcbiAgICB9LFxuICAgIHNlbmRUcmFuc2FjdGlvbjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1NlbmRzIHRyYW5zYWN0aW9uOyB3aWxsIGJsb2NrIHdhaXRpbmcgZm9yIHNpZ25lciB0byByZXR1cm4gdGhlIHRyYW5zYWN0aW9uIGhhc2gnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndHgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhUcmFuc2FjdGlvblJlcXVlc3QnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdIMjU2J1xuICAgIH0sXG4gICAgc3VibWl0SGFzaHJhdGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdVc2VkIGZvciBzdWJtaXR0aW5nIG1pbmluZyBoYXNocmF0ZS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH0sXG4gICAgc3VibWl0V29yazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZWQgZm9yIHN1Ym1pdHRpbmcgYSBwcm9vZi1vZi13b3JrIHNvbHV0aW9uLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdub25jZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0g2NCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hlYWRlckhhc2gnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWl4RGlnZXN0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfSxcbiAgICBzdWJzY3JpYmU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJzY3JpYmUgdG8gRXRoIHN1YnNjcmlwdGlvbi4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2tpbmQnLCB0eXBlOiAnRXRoU3ViS2luZCcgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhTdWJQYXJhbXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHB1YnN1YjogW1xuICAgICAgICAgICAgJ3N1YnNjcmlwdGlvbicsXG4gICAgICAgICAgICAnc3Vic2NyaWJlJyxcbiAgICAgICAgICAgICd1bnN1YnNjcmliZSdcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ051bGwnXG4gICAgfSxcbiAgICBzeW5jaW5nOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBkYXRhIGFib3V0IHRoZSBzeW5jIHN0YXR1cyBvciBmYWxzZS4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnRXRoU3luY1N0YXR1cydcbiAgICB9LFxuICAgIHVuaW5zdGFsbEZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1VuaW5zdGFsbHMgZmlsdGVyLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH1cbn07XG4iLCJjb25zdCBldGhNZXRob2RzVjQgPSB7XG4gICAgYWNjb3VudF9iYXNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgcGFsbGV0X2V2bTo6QWNjb3VudHMgYnkgYWRkcmVzcy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdm1BY2NvdW50J1xuICAgIH0sXG4gICAgYWNjb3VudF9jb2RlX2F0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRm9yIGEgZ2l2ZW4gYWNjb3VudCBhZGRyZXNzLCByZXR1cm5zIHBhbGxldF9ldm06OkFjY291bnRDb2Rlcy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICB9LFxuICAgIGF1dGhvcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGNvbnZlcnRlZCBGaW5kQXV0aG9yOjpmaW5kX2F1dGhvciBhdXRob3JpdHkgaWQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgfSxcbiAgICBjYWxsOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhIGZyYW1lX2V0aGVyZXVtOjpjYWxsIHJlc3BvbnNlLiBJZiBgZXN0aW1hdGVgIGlzIHRydWUsJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Zyb20nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndG8nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzx1OD4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdnYXNMaW1pdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtYXhGZWVQZXJHYXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VTI1Nj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtYXhQcmlvcml0eUZlZVBlckdhcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25vbmNlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFUyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXN0aW1hdGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWNjZXNzTGlzdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxWZWM8KEgxNjAsIFZlYzxIMjU2Pik+PidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDxFdm1DYWxsSW5mbywgRGlzcGF0Y2hFcnJvcj4nXG4gICAgfSxcbiAgICBjaGFpbl9pZDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgcnVudGltZSBkZWZpbmVkIHBhbGxldF9ldm06OkNoYWluSWQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ3U2NCdcbiAgICB9LFxuICAgIGNyZWF0ZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYSBmcmFtZV9ldGhlcmV1bTo6Y2FsbCByZXNwb25zZS4gSWYgYGVzdGltYXRlYCBpcyB0cnVlLCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmcm9tJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDE2MCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGEnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8dTg+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2FzTGltaXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4RmVlUGVyR2FzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFUyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4UHJpb3JpdHlGZWVQZXJHYXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VTI1Nj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdub25jZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VzdGltYXRlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FjY2Vzc0xpc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VmVjPChIMTYwLCBWZWM8SDI1Nj4pPj4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8RXZtQ3JlYXRlSW5mbywgRGlzcGF0Y2hFcnJvcj4nXG4gICAgfSxcbiAgICBjdXJyZW50X2FsbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiBhbGwgdGhlIGN1cnJlbnQgZGF0YSBmb3IgYSBibG9jayBpbiBhIHNpbmdsZSBydW50aW1lIGNhbGwuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJyhPcHRpb248QmxvY2tWMj4sIE9wdGlvbjxWZWM8RXRoUmVjZWlwdFYzPj4sIE9wdGlvbjxWZWM8RXRoVHJhbnNhY3Rpb25TdGF0dXM+PiknXG4gICAgfSxcbiAgICBjdXJyZW50X2Jsb2NrOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBjdXJyZW50IGJsb2NrLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdCbG9ja1YyJ1xuICAgIH0sXG4gICAgY3VycmVudF9yZWNlaXB0czoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiB0aGUgY3VycmVudCByZWNlaXB0LicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdPcHRpb248VmVjPEV0aFJlY2VpcHRWMz4+J1xuICAgIH0sXG4gICAgY3VycmVudF90cmFuc2FjdGlvbl9zdGF0dXNlczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzdGF0dXMuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxWZWM8RXRoVHJhbnNhY3Rpb25TdGF0dXM+PidcbiAgICB9LFxuICAgIGVsYXN0aWNpdHk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIGVsYXN0aWNpdHkgbXVsdGlwbGllci4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPFBlcm1pbGw+J1xuICAgIH0sXG4gICAgZXh0cmluc2ljX2ZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JlY2VpdmVzIGEgYFZlYzxPcGFxdWVFeHRyaW5zaWM+YCBhbmQgZmlsdGVycyBhbGwgdGhlIGV0aGVyZXVtIHRyYW5zYWN0aW9ucy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAneHRzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEV4dHJpbnNpYz4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdWZWM8VHJhbnNhY3Rpb25WMj4nXG4gICAgfSxcbiAgICBnYXNfcHJpY2U6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIEZpeGVkR2FzUHJpY2U6Om1pbl9nYXNfcHJpY2UnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAndTI1NidcbiAgICB9LFxuICAgIHN0b3JhZ2VfYXQ6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdGb3IgYSBnaXZlbiBhY2NvdW50IGFkZHJlc3MgYW5kIGluZGV4LCByZXR1cm5zIHBhbGxldF9ldm06OkFjY291bnRTdG9yYWdlcy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdIMjU2J1xuICAgIH1cbn07XG5jb25zdCBldGhNZXRob2RzVjUgPSB7XG4gICAgY2FsbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYSBmcmFtZV9ldGhlcmV1bTo6Y2FsbCByZXNwb25zZS4gSWYgYGVzdGltYXRlYCBpcyB0cnVlLCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmcm9tJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDE2MCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3RvJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDE2MCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGEnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8dTg+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2FzTGltaXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4RmVlUGVyR2FzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFUyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4UHJpb3JpdHlGZWVQZXJHYXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VTI1Nj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdub25jZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VzdGltYXRlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FjY2Vzc0xpc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VmVjPChIMTYwLCBWZWM8SDI1Nj4pPj4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8RXZtQ2FsbEluZm9WMiwgRGlzcGF0Y2hFcnJvcj4nXG4gICAgfSxcbiAgICBjcmVhdGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGEgZnJhbWVfZXRoZXJldW06OmNhbGwgcmVzcG9uc2UuIElmIGBlc3RpbWF0ZWAgaXMgdHJ1ZSwnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZnJvbScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdkYXRhJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU4PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVTI1NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2dhc0xpbWl0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVTI1NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21heEZlZVBlckdhcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21heFByaW9yaXR5RmVlUGVyR2FzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFUyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbm9uY2UnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VTI1Nj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlc3RpbWF0ZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhY2Nlc3NMaXN0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFZlYzwoSDE2MCwgVmVjPEgyNTY+KT4+J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVzdWx0PEV2bUNyZWF0ZUluZm9WMiwgRGlzcGF0Y2hFcnJvcj4nXG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIENvbnZlcnRUcmFuc2FjdGlvblJ1bnRpbWVBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRfdHJhbnNhY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb252ZXJ0cyBhbiBFdGhlcmV1bS1zdHlsZSB0cmFuc2FjdGlvbiB0byBFeHRyaW5zaWMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUcmFuc2FjdGlvblYyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRXh0cmluc2ljJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH1cbiAgICBdLFxuICAgIERlYnVnUnVudGltZUFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdHJhY2VfYmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUcmFjZSBhbGwgYmxvY2sgZXh0cmluc2ljcycsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdleHRyaW5zaWNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEV4dHJpbnNpYz4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdrbm93blRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxIMjU2PidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgRGlzcGF0Y2hFcnJvcj4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFjZV90cmFuc2FjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RyYWNlIHRyYW5zYWN0aW9uIGV4dHJpbnNpY3MnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXh0cmluc2ljcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxFeHRyaW5zaWM+J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhUcmFuc2FjdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgRGlzcGF0Y2hFcnJvcj4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgRXRoZXJldW1SdW50aW1lUlBDQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5ldGhNZXRob2RzVjRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5ldGhNZXRob2RzVjQsXG4gICAgICAgICAgICAgICAgLi4uZXRoTWV0aG9kc1Y1XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEV2bUFjY291bnQ6IHtcbiAgICAgICAgICAgIG5vbmNlOiAndTI1NicsXG4gICAgICAgICAgICBiYWxhbmNlOiAndTI1NidcbiAgICAgICAgfSxcbiAgICAgICAgRXZtQ2FsbEluZm86IHtcbiAgICAgICAgICAgIGV4aXRSZWFzb246ICdFeGl0UmVhc29uJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgdXNlZEdhczogJ1UyNTYnLFxuICAgICAgICAgICAgbG9nczogJ1ZlYzxFdm1Mb2c+J1xuICAgICAgICB9LFxuICAgICAgICBFdm1DcmVhdGVJbmZvOiB7XG4gICAgICAgICAgICBleGl0UmVhc29uOiAnRXhpdFJlYXNvbicsXG4gICAgICAgICAgICB2YWx1ZTogJ0gxNjAnLFxuICAgICAgICAgICAgdXNlZEdhczogJ1UyNTYnLFxuICAgICAgICAgICAgbG9nczogJ1ZlYzxFdm1Mb2c+J1xuICAgICAgICB9LFxuICAgICAgICBFdm1DYWxsSW5mb1YyOiB7XG4gICAgICAgICAgICBleGl0UmVhc29uOiAnRXhpdFJlYXNvbicsXG4gICAgICAgICAgICB2YWx1ZTogJ0J5dGVzJyxcbiAgICAgICAgICAgIHVzZWRHYXM6ICdVMjU2JyxcbiAgICAgICAgICAgIHdlaWdodEluZm86ICdPcHRpb248RXZtV2VpZ2h0SW5mbz4nLFxuICAgICAgICAgICAgbG9nczogJ1ZlYzxFdm1Mb2c+J1xuICAgICAgICB9LFxuICAgICAgICBFdm1DcmVhdGVJbmZvVjI6IHtcbiAgICAgICAgICAgIGV4aXRSZWFzb246ICdFeGl0UmVhc29uJyxcbiAgICAgICAgICAgIHZhbHVlOiAnSDE2MCcsXG4gICAgICAgICAgICB1c2VkR2FzOiAnVTI1NicsXG4gICAgICAgICAgICB3ZWlnaHRJbmZvOiAnT3B0aW9uPEV2bVdlaWdodEluZm8+JyxcbiAgICAgICAgICAgIGxvZ3M6ICdWZWM8RXZtTG9nPidcbiAgICAgICAgfSxcbiAgICAgICAgRXZtTG9nOiB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnSDE2MCcsXG4gICAgICAgICAgICB0b3BpY3M6ICdWZWM8SDI1Nj4nLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJ1xuICAgICAgICB9LFxuICAgICAgICBFdm1WaWNpbml0eToge1xuICAgICAgICAgICAgZ2FzUHJpY2U6ICd1MjU2JyxcbiAgICAgICAgICAgIG9yaWdpbjogJ0gxNjAnXG4gICAgICAgIH0sXG4gICAgICAgIEV2bVdlaWdodEluZm86IHtcbiAgICAgICAgICAgIHJlZlRpbWVMaW1pdDogJ09wdGlvbjx1NjQ+JyxcbiAgICAgICAgICAgIHByb29mU2l6ZUxpbWl0OiAnT3B0aW9uPHU2ND4nLFxuICAgICAgICAgICAgcmVmVGltZVVzYWdlOiAnT3B0aW9uPHU2ND4nLFxuICAgICAgICAgICAgcHJvb2ZTaXplVXNhZ2U6ICdPcHRpb248dTY0PidcbiAgICAgICAgfSxcbiAgICAgICAgRXhpdEVycm9yOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFN0YWNrVW5kZXJmbG93OiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgU3RhY2tPdmVyZmxvdzogJ051bGwnLFxuICAgICAgICAgICAgICAgIEludmFsaWRKdW1wOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgSW52YWxpZFJhbmdlOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgRGVzaWduYXRlZEludmFsaWQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDYWxsVG9vRGVlcDogJ051bGwnLFxuICAgICAgICAgICAgICAgIENyZWF0ZUNvbGxpc2lvbjogJ051bGwnLFxuICAgICAgICAgICAgICAgIENyZWF0ZUNvbnRyYWN0TGltaXQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBPdXRPZk9mZnNldDogJ051bGwnLFxuICAgICAgICAgICAgICAgIE91dE9mR2FzOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgT3V0T2ZGdW5kOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgUENVbmRlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVFbXB0eTogJ051bGwnLFxuICAgICAgICAgICAgICAgIE90aGVyOiAnVGV4dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRXhpdEZhdGFsOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE5vdFN1cHBvcnRlZDogJ051bGwnLFxuICAgICAgICAgICAgICAgIFVuaGFuZGxlZEludGVycnVwdDogJ051bGwnLFxuICAgICAgICAgICAgICAgIENhbGxFcnJvckFzRmF0YWw6ICdFeGl0RXJyb3InLFxuICAgICAgICAgICAgICAgIE90aGVyOiAnVGV4dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRXhpdFJlYXNvbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBTdWNjZWVkOiAnRXhpdFN1Y2NlZWQnLFxuICAgICAgICAgICAgICAgIEVycm9yOiAnRXhpdEVycm9yJyxcbiAgICAgICAgICAgICAgICBSZXZlcnQ6ICdFeGl0UmV2ZXJ0JyxcbiAgICAgICAgICAgICAgICBGYXRhbDogJ0V4aXRGYXRhbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRXhpdFJldmVydDoge1xuICAgICAgICAgICAgX2VudW06IFsnUmV2ZXJ0ZWQnXVxuICAgICAgICB9LFxuICAgICAgICBFeGl0U3VjY2VlZDoge1xuICAgICAgICAgICAgX2VudW06IFsnU3RvcHBlZCcsICdSZXR1cm5lZCcsICdTdWljaWRlZCddXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgRXh0cmluc2ljOiAnR2VuZXJpY0V4dHJpbnNpYycsXG4gICAgICAgIEV4dHJpbnNpY0VyYTogJ0dlbmVyaWNFeHRyaW5zaWNFcmEnLFxuICAgICAgICBFeHRyaW5zaWNQYXlsb2FkOiAnR2VuZXJpY0V4dHJpbnNpY1BheWxvYWQnLFxuICAgICAgICBFeHRyaW5zaWNTaWduYXR1cmU6ICdNdWx0aVNpZ25hdHVyZScsXG4gICAgICAgIEV4dHJpbnNpY1Y0OiAnR2VuZXJpY0V4dHJpbnNpY1Y0JyxcbiAgICAgICAgRXh0cmluc2ljUGF5bG9hZFY0OiAnR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRWNCcsXG4gICAgICAgIEV4dHJpbnNpY1NpZ25hdHVyZVY0OiAnR2VuZXJpY0V4dHJpbnNpY1NpZ25hdHVyZVY0JyxcbiAgICAgICAgRXh0cmluc2ljVW5rbm93bjogJ0dlbmVyaWNFeHRyaW5zaWNVbmtub3duJyxcbiAgICAgICAgRXh0cmluc2ljUGF5bG9hZFVua25vd246ICdHZW5lcmljRXh0cmluc2ljUGF5bG9hZFVua25vd24nLFxuICAgICAgICAvLyBlcmFzXG4gICAgICAgIEVyYTogJ0V4dHJpbnNpY0VyYScsXG4gICAgICAgIEltbW9ydGFsRXJhOiAnR2VuZXJpY0ltbW9ydGFsRXJhJyxcbiAgICAgICAgTW9ydGFsRXJhOiAnR2VuZXJpY01vcnRhbEVyYScsXG4gICAgICAgIC8vIHNpZ25hdHVyZXMgJiBzaWduZXJcbiAgICAgICAgQW55U2lnbmF0dXJlOiAnSDUxMicsXG4gICAgICAgIE11bHRpU2lnbmF0dXJlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIEVkMjU1MTk6ICdFZDI1NTE5U2lnbmF0dXJlJyxcbiAgICAgICAgICAgICAgICBTcjI1NTE5OiAnU3IyNTUxOVNpZ25hdHVyZScsXG4gICAgICAgICAgICAgICAgRWNkc2E6ICdFY2RzYVNpZ25hdHVyZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2lnbmF0dXJlOiAnSDUxMicsXG4gICAgICAgIFNpZ25lclBheWxvYWQ6ICdHZW5lcmljU2lnbmVyUGF5bG9hZCcsXG4gICAgICAgIEVjZHNhU2lnbmF0dXJlOiAnW3U4OyA2NV0nLFxuICAgICAgICBFZDI1NTE5U2lnbmF0dXJlOiAnSDUxMicsXG4gICAgICAgIFNyMjU1MTlTaWduYXR1cmU6ICdINTEyJ1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHt9XG59O1xuIiwiY29uc3QgZmluYWxpdHlWMSA9IHtcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGJlc3RfZmluYWxpemVkOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgbnVtYmVyIGFuZCBoYXNoIG9mIHRoZSBiZXN0IGZpbmFsaXplZCBoZWFkZXIga25vd24gdG8gdGhlIGJyaWRnZSBtb2R1bGUuJyxcbiAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICB0eXBlOiAnKEJsb2NrTnVtYmVyLCBIYXNoKSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdmVyc2lvbjogMVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIEt1c2FtYUZpbmFsaXR5QXBpOiBbZmluYWxpdHlWMV0sXG4gICAgUG9sa2Fkb3RGaW5hbGl0eUFwaTogW2ZpbmFsaXR5VjFdLFxuICAgIFJvY29jb0ZpbmFsaXR5QXBpOiBbZmluYWxpdHlWMV0sXG4gICAgV2VzdGVuZEZpbmFsaXR5QXBpOiBbZmluYWxpdHlWMV1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgRnVuZ2libGVzQWNjZXNzRXJyb3I6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0Fzc2V0SWRDb252ZXJzaW9uRmFpbGVkJywgJ0Ftb3VudFRvQmFsYW5jZUNvbnZlcnNpb25GYWlsZWQnXVxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIEZ1bmdpYmxlc0FwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgcXVlcnlfYWNjb3VudF9iYWxhbmNlczoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGxpc3Qgb2YgYWxsIGBNdWx0aUFzc2V0YCB0aGF0IGFuIGBBY2NvdW50SWRgIGhhcycsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmVzdWx0PFZlYzxYY21WM011bHRpQXNzZXQ+LCBGdW5naWJsZXNBY2Nlc3NFcnJvcj4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIHF1ZXJ5X2FjY291bnRfYmFsYW5jZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBgTXVsdGlBc3NldGAgdGhhdCBhbiBgQWNjb3VudElkYCBoYXMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Jlc3VsdDxYY21WZXJzaW9uZWRNdWx0aUFzc2V0cywgRnVuZ2libGVzQWNjZXNzRXJyb3I+J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgQXNzZXRPcHRpb25zOiB7XG4gICAgICAgICAgICBpbml0YWxJc3N1YW5jZTogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgcGVybWlzc2lvbnM6ICdQZXJtaXNzaW9uTGF0ZXN0J1xuICAgICAgICB9LFxuICAgICAgICBPd25lcjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBOb25lOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQWRkcmVzczogJ0FjY291bnRJZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUGVybWlzc2lvbnNWMToge1xuICAgICAgICAgICAgdXBkYXRlOiAnT3duZXInLFxuICAgICAgICAgICAgbWludDogJ093bmVyJyxcbiAgICAgICAgICAgIGJ1cm46ICdPd25lcidcbiAgICAgICAgfSxcbiAgICAgICAgUGVybWlzc2lvblZlcnNpb25zOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFYxOiAnUGVybWlzc2lvbnNWMSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUGVybWlzc2lvbkxhdGVzdDogJ1Blcm1pc3Npb25zVjEnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBHZW5lc2lzQnVpbGRFcnI6ICdUZXh0J1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBHZW5lc2lzQnVpbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgYnVpbGRfY29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQnVpbGQgYFJ1bnRpbWVHZW5lc2lzQ29uZmlnYCBmcm9tIGEgSlNPTiBibG9iIG5vdCB1c2luZyBhbnkgZGVmYXVsdHMgYW5kIHN0b3JlIGl0IGluIHRoZSBzdG9yYWdlLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU4PidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgR2VuZXNpc0J1aWxkRXJyPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNyZWF0ZV9kZWZhdWx0X2NvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZXMgdGhlIGRlZmF1bHQgYFJ1bnRpbWVHZW5lc2lzQ29uZmlnYCBhbmQgcmV0dXJucyBpdCBhcyBhIEpTT04gYmxvYi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU4PidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjdGl2ZUdpbHQ6IHtcbiAgICAgICAgICAgIHByb3BvcnRpb246ICdQZXJxdWludGlsbCcsXG4gICAgICAgICAgICBhbW91bnQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHdobzogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBleHBpcnk6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQWN0aXZlR2lsdHNUb3RhbDoge1xuICAgICAgICAgICAgZnJvemVuOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBwcm9wb3J0aW9uOiAnUGVycXVpbnRpbGwnLFxuICAgICAgICAgICAgaW5kZXg6ICdBY3RpdmVJbmRleCcsXG4gICAgICAgICAgICB0YXJnZXQ6ICdQZXJxdWludGlsbCdcbiAgICAgICAgfSxcbiAgICAgICAgQWN0aXZlSW5kZXg6ICd1MzInLFxuICAgICAgICBHaWx0QmlkOiB7XG4gICAgICAgICAgICBhbW91bnQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHdobzogJ0FjY291bnRJZCdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBBdXRob3JpdHlJbmRleDogJ3U2NCcsXG4gICAgICAgIEF1dGhvcml0eUxpc3Q6ICdWZWM8TmV4dEF1dGhvcml0eT4nLFxuICAgICAgICBBdXRob3JpdHlTZXQ6IHtcbiAgICAgICAgICAgIGN1cnJlbnRBdXRob3JpdGllczogJ0F1dGhvcml0eUxpc3QnLFxuICAgICAgICAgICAgc2V0SWQ6ICd1NjQnLFxuICAgICAgICAgICAgcGVuZGluZ1N0YW5kYXJkQ2hhbmdlczogJ0ZvcmtUcmVlUGVuZGluZ0NoYW5nZScsXG4gICAgICAgICAgICBwZW5kaW5nRm9yY2VkQ2hhbmdlczogJ1ZlYzxQZW5kaW5nQ2hhbmdlPicsXG4gICAgICAgICAgICBhdXRob3JpdHlTZXRDaGFuZ2VzOiAnQXV0aG9yaXR5U2V0Q2hhbmdlcydcbiAgICAgICAgfSxcbiAgICAgICAgRm9ya1RyZWVQZW5kaW5nQ2hhbmdlOiB7XG4gICAgICAgICAgICByb290czogJ1ZlYzxGb3JrVHJlZVBlbmRpbmdDaGFuZ2VOb2RlPicsXG4gICAgICAgICAgICBiZXN0RmluYWxpemVkTnVtYmVyOiAnT3B0aW9uPEJsb2NrTnVtYmVyPidcbiAgICAgICAgfSxcbiAgICAgICAgRm9ya1RyZWVQZW5kaW5nQ2hhbmdlTm9kZToge1xuICAgICAgICAgICAgaGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICBudW1iZXI6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBkYXRhOiAnUGVuZGluZ0NoYW5nZScsIC8vIGFjdHVhbCBkYXRhLCBoZXJlIFBlbmRpbmdDaGFuZ2VcbiAgICAgICAgICAgIGNoaWxkcmVuOiAnVmVjPEZvcmtUcmVlUGVuZGluZ0NoYW5nZU5vZGU+J1xuICAgICAgICB9LFxuICAgICAgICBBdXRob3JpdHlTZXRDaGFuZ2U6ICcoVTY0LCBCbG9ja051bWJlciknLFxuICAgICAgICBBdXRob3JpdHlTZXRDaGFuZ2VzOiAnVmVjPEF1dGhvcml0eVNldENoYW5nZT4nLFxuICAgICAgICBBdXRob3JpdHlXZWlnaHQ6ICd1NjQnLFxuICAgICAgICBEZWxheUtpbmQ6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgRmluYWxpemVkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQmVzdDogJ0RlbGF5S2luZEJlc3QnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIERlbGF5S2luZEJlc3Q6IHtcbiAgICAgICAgICAgIG1lZGlhbkxhc3RGaW5hbGl6ZWQ6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgRW5jb2RlZEZpbmFsaXR5UHJvb2ZzOiAnQnl0ZXMnLFxuICAgICAgICBHcmFuZHBhRXF1aXZvY2F0aW9uOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFByZXZvdGU6ICdHcmFuZHBhRXF1aXZvY2F0aW9uVmFsdWUnLFxuICAgICAgICAgICAgICAgIFByZWNvbW1pdDogJ0dyYW5kcGFFcXVpdm9jYXRpb25WYWx1ZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgR3JhbmRwYUVxdWl2b2NhdGlvblByb29mOiB7XG4gICAgICAgICAgICBzZXRJZDogJ1NldElkJyxcbiAgICAgICAgICAgIGVxdWl2b2NhdGlvbjogJ0dyYW5kcGFFcXVpdm9jYXRpb24nXG4gICAgICAgIH0sXG4gICAgICAgIEdyYW5kcGFFcXVpdm9jYXRpb25WYWx1ZToge1xuICAgICAgICAgICAgcm91bmROdW1iZXI6ICd1NjQnLFxuICAgICAgICAgICAgaWRlbnRpdHk6ICdBdXRob3JpdHlJZCcsXG4gICAgICAgICAgICBmaXJzdDogJyhHcmFuZHBhUHJldm90ZSwgQXV0aG9yaXR5U2lnbmF0dXJlKScsXG4gICAgICAgICAgICBzZWNvbmQ6ICcoR3JhbmRwYVByZXZvdGUsIEF1dGhvcml0eVNpZ25hdHVyZSknXG4gICAgICAgIH0sXG4gICAgICAgIEdyYW5kcGFQcmV2b3RlOiB7XG4gICAgICAgICAgICB0YXJnZXRIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICB0YXJnZXROdW1iZXI6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgR3JhbmRwYUNvbW1pdDoge1xuICAgICAgICAgICAgdGFyZ2V0SGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICB0YXJnZXROdW1iZXI6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBwcmVjb21taXRzOiAnVmVjPEdyYW5kcGFTaWduZWRQcmVjb21taXQ+J1xuICAgICAgICB9LFxuICAgICAgICBHcmFuZHBhUHJlY29tbWl0OiB7XG4gICAgICAgICAgICB0YXJnZXRIYXNoOiAnQmxvY2tIYXNoJyxcbiAgICAgICAgICAgIHRhcmdldE51bWJlcjogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBHcmFuZHBhU2lnbmVkUHJlY29tbWl0OiB7XG4gICAgICAgICAgICBwcmVjb21taXQ6ICdHcmFuZHBhUHJlY29tbWl0JyxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogJ0F1dGhvcml0eVNpZ25hdHVyZScsXG4gICAgICAgICAgICBpZDogJ0F1dGhvcml0eUlkJ1xuICAgICAgICB9LFxuICAgICAgICBHcmFuZHBhSnVzdGlmaWNhdGlvbjoge1xuICAgICAgICAgICAgcm91bmQ6ICd1NjQnLFxuICAgICAgICAgICAgY29tbWl0OiAnR3JhbmRwYUNvbW1pdCcsXG4gICAgICAgICAgICB2b3Rlc0FuY2VzdHJpZXM6ICdWZWM8SGVhZGVyPidcbiAgICAgICAgfSxcbiAgICAgICAgSnVzdGlmaWNhdGlvbk5vdGlmaWNhdGlvbjogJ0J5dGVzJyxcbiAgICAgICAgS2V5T3duZXJQcm9vZjogJ01lbWJlcnNoaXBQcm9vZicsXG4gICAgICAgIE5leHRBdXRob3JpdHk6ICcoQXV0aG9yaXR5SWQsIEF1dGhvcml0eVdlaWdodCknLFxuICAgICAgICBQZW5kaW5nQ2hhbmdlOiB7XG4gICAgICAgICAgICBuZXh0QXV0aG9yaXRpZXM6ICdBdXRob3JpdHlMaXN0JyxcbiAgICAgICAgICAgIGRlbGF5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgY2Fub25IZWlnaHQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBjYW5vbkhhc2g6ICdCbG9ja0hhc2gnLFxuICAgICAgICAgICAgZGVsYXlLaW5kOiAnRGVsYXlLaW5kJ1xuICAgICAgICB9LFxuICAgICAgICBQZW5kaW5nUGF1c2U6IHtcbiAgICAgICAgICAgIHNjaGVkdWxlZEF0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgZGVsYXk6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgUGVuZGluZ1Jlc3VtZToge1xuICAgICAgICAgICAgc2NoZWR1bGVkQXQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBkZWxheTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBQcmVjb21taXRzOiB7XG4gICAgICAgICAgICBjdXJyZW50V2VpZ2h0OiAndTMyJyxcbiAgICAgICAgICAgIG1pc3Npbmc6ICdCVHJlZVNldDxBdXRob3JpdHlJZD4nXG4gICAgICAgIH0sXG4gICAgICAgIFByZXZvdGVzOiB7XG4gICAgICAgICAgICBjdXJyZW50V2VpZ2h0OiAndTMyJyxcbiAgICAgICAgICAgIG1pc3Npbmc6ICdCVHJlZVNldDxBdXRob3JpdHlJZD4nXG4gICAgICAgIH0sXG4gICAgICAgIFJlcG9ydGVkUm91bmRTdGF0ZXM6IHtcbiAgICAgICAgICAgIHNldElkOiAndTMyJyxcbiAgICAgICAgICAgIGJlc3Q6ICdSb3VuZFN0YXRlJyxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICdWZWM8Um91bmRTdGF0ZT4nXG4gICAgICAgIH0sXG4gICAgICAgIFJvdW5kU3RhdGU6IHtcbiAgICAgICAgICAgIHJvdW5kOiAndTMyJyxcbiAgICAgICAgICAgIHRvdGFsV2VpZ2h0OiAndTMyJyxcbiAgICAgICAgICAgIHRocmVzaG9sZFdlaWdodDogJ3UzMicsXG4gICAgICAgICAgICBwcmV2b3RlczogJ1ByZXZvdGVzJyxcbiAgICAgICAgICAgIHByZWNvbW1pdHM6ICdQcmVjb21taXRzJ1xuICAgICAgICB9LFxuICAgICAgICBTZXRJZDogJ3U2NCcsXG4gICAgICAgIFN0b3JlZFBlbmRpbmdDaGFuZ2U6IHtcbiAgICAgICAgICAgIHNjaGVkdWxlZEF0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgZGVsYXk6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBuZXh0QXV0aG9yaXRpZXM6ICdBdXRob3JpdHlMaXN0J1xuICAgICAgICB9LFxuICAgICAgICBTdG9yZWRTdGF0ZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBMaXZlOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgUGVuZGluZ1BhdXNlOiAnUGVuZGluZ1BhdXNlJyxcbiAgICAgICAgICAgICAgICBQYXVzZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBQZW5kaW5nUmVzdW1lOiAnUGVuZGluZ1Jlc3VtZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIHByb3ZlRmluYWxpdHk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQcm92ZSBmaW5hbGl0eSBmb3IgdGhlIGdpdmVuIGJsb2NrIG51bWJlciwgcmV0dXJuaW5nIHRoZSBKdXN0aWZpY2F0aW9uIGZvciB0aGUgbGFzdCBibG9jayBpbiB0aGUgc2V0LicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9ja051bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPEVuY29kZWRGaW5hbGl0eVByb29mcz4nXG4gICAgfSxcbiAgICByb3VuZFN0YXRlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgYmVzdCByb3VuZCBzdGF0ZSBhcyB3ZWxsIGFzIHRoZSBvbmdvaW5nIGJhY2tncm91bmQgcm91bmRzJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1JlcG9ydGVkUm91bmRTdGF0ZXMnXG4gICAgfSxcbiAgICBzdWJzY3JpYmVKdXN0aWZpY2F0aW9uczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1YnNjcmliZXMgdG8gZ3JhbmRwYSBqdXN0aWZpY2F0aW9ucycsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHB1YnN1YjogW1xuICAgICAgICAgICAgJ2p1c3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICdzdWJzY3JpYmVKdXN0aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAndW5zdWJzY3JpYmVKdXN0aWZpY2F0aW9ucydcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0p1c3RpZmljYXRpb25Ob3RpZmljYXRpb24nXG4gICAgfVxufTtcbiIsImNvbnN0IEdSQU5EUEFfVjJfVjMgPSB7XG4gICAgZ2VuZXJhdGVfa2V5X293bmVyc2hpcF9wcm9vZjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlcyBhIHByb29mIG9mIGtleSBvd25lcnNoaXAgZm9yIHRoZSBnaXZlbiBhdXRob3JpdHkgaW4gdGhlIGdpdmVuIHNldC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2V0SWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTZXRJZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2F1dGhvcml0eUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQXV0aG9yaXR5SWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248T3BhcXVlS2V5T3duZXJzaGlwUHJvb2Y+J1xuICAgIH0sXG4gICAgZ3JhbmRwYV9hdXRob3JpdGllczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgY3VycmVudCBHUkFORFBBIGF1dGhvcml0aWVzIGFuZCB3ZWlnaHRzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIGV4Y2VwdCBmb3Igd2hlbiBjaGFuZ2VzIGFyZSBzY2hlZHVsZWQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRlbGF5IGhhcyBwYXNzZWQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0F1dGhvcml0eUxpc3QnXG4gICAgfSxcbiAgICBzdWJtaXRfcmVwb3J0X2VxdWl2b2NhdGlvbl91bnNpZ25lZF9leHRyaW5zaWM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJtaXRzIGFuIHVuc2lnbmVkIGV4dHJpbnNpYyB0byByZXBvcnQgYW4gZXF1aXZvY2F0aW9uLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlcXVpdm9jYXRpb25Qcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0dyYW5kcGFFcXVpdm9jYXRpb25Qcm9vZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleU93bmVyUHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcGFxdWVLZXlPd25lcnNoaXBQcm9vZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxOdWxsPidcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgR3JhbmRwYUFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudF9zZXRfaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgY3VycmVudCBHUkFORFBBIGF1dGhvcml0eSBzZXQgaWQuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1NldElkJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uR1JBTkRQQV9WMl9WM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczogR1JBTkRQQV9WMl9WMyxcbiAgICAgICAgICAgIHZlcnNpb246IDJcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBJZGVudGl0eUZpZWxkczoge1xuICAgICAgICAgICAgX3NldDoge1xuICAgICAgICAgICAgICAgIF9iaXRMZW5ndGg6IDY0LFxuICAgICAgICAgICAgICAgIC8vIE1hcHBlZCBoZXJlIHRvIDMyIGJpdHMsIGluIFJ1c3QgdGhlc2UgYXJlIDY0LWJpdCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBEaXNwbGF5OiAxLFxuICAgICAgICAgICAgICAgIExlZ2FsOiAyLFxuICAgICAgICAgICAgICAgIFdlYjogNCxcbiAgICAgICAgICAgICAgICBSaW90OiA4LFxuICAgICAgICAgICAgICAgIEVtYWlsOiAxNixcbiAgICAgICAgICAgICAgICBQZ3BGaW5nZXJwcmludDogMzIsXG4gICAgICAgICAgICAgICAgSW1hZ2U6IDY0LFxuICAgICAgICAgICAgICAgIFR3aXR0ZXI6IDEyOFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBJZGVudGl0eUluZm9BZGRpdGlvbmFsOiAnKERhdGEsIERhdGEpJyxcbiAgICAgICAgSWRlbnRpdHlJbmZvVG8xOTg6IHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWw6ICdWZWM8SWRlbnRpdHlJbmZvQWRkaXRpb25hbD4nLFxuICAgICAgICAgICAgZGlzcGxheTogJ0RhdGEnLFxuICAgICAgICAgICAgbGVnYWw6ICdEYXRhJyxcbiAgICAgICAgICAgIHdlYjogJ0RhdGEnLFxuICAgICAgICAgICAgcmlvdDogJ0RhdGEnLFxuICAgICAgICAgICAgZW1haWw6ICdEYXRhJyxcbiAgICAgICAgICAgIHBncEZpbmdlcnByaW50OiAnT3B0aW9uPEgxNjA+JyxcbiAgICAgICAgICAgIGltYWdlOiAnRGF0YSdcbiAgICAgICAgfSxcbiAgICAgICAgSWRlbnRpdHlJbmZvOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdJZGVudGl0eUluZm9UbzE5OCcsXG4gICAgICAgICAgICBhZGRpdGlvbmFsOiAnVmVjPElkZW50aXR5SW5mb0FkZGl0aW9uYWw+JyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdEYXRhJyxcbiAgICAgICAgICAgIGxlZ2FsOiAnRGF0YScsXG4gICAgICAgICAgICB3ZWI6ICdEYXRhJyxcbiAgICAgICAgICAgIHJpb3Q6ICdEYXRhJyxcbiAgICAgICAgICAgIGVtYWlsOiAnRGF0YScsXG4gICAgICAgICAgICBwZ3BGaW5nZXJwcmludDogJ09wdGlvbjxIMTYwPicsXG4gICAgICAgICAgICBpbWFnZTogJ0RhdGEnLFxuICAgICAgICAgICAgdHdpdHRlcjogJ0RhdGEnXG4gICAgICAgIH0sXG4gICAgICAgIElkZW50aXR5SnVkZ2VtZW50OiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFVua25vd246ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBGZWVQYWlkOiAnQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgUmVhc29uYWJsZTogJ051bGwnLFxuICAgICAgICAgICAgICAgIEtub3duR29vZDogJ051bGwnLFxuICAgICAgICAgICAgICAgIE91dE9mRGF0ZTogJ051bGwnLFxuICAgICAgICAgICAgICAgIExvd1F1YWxpdHk6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBFcnJvbmVvdXM6ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBSZWdpc3RyYXRpb25KdWRnZW1lbnQ6ICcoUmVnaXN0cmFySW5kZXgsIElkZW50aXR5SnVkZ2VtZW50KScsXG4gICAgICAgIFJlZ2lzdHJhdGlvblRvMTk4OiB7XG4gICAgICAgICAgICBqdWRnZW1lbnRzOiAnVmVjPFJlZ2lzdHJhdGlvbkp1ZGdlbWVudD4nLFxuICAgICAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgaW5mbzogJ0lkZW50aXR5SW5mb1RvMTk4J1xuICAgICAgICB9LFxuICAgICAgICBSZWdpc3RyYXRpb246IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ1JlZ2lzdHJhdGlvblRvMTk4JyxcbiAgICAgICAgICAgIGp1ZGdlbWVudHM6ICdWZWM8UmVnaXN0cmF0aW9uSnVkZ2VtZW50PicsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBpbmZvOiAnSWRlbnRpdHlJbmZvJ1xuICAgICAgICB9LFxuICAgICAgICBSZWdpc3RyYXJJbmRleDogJ3UzMicsXG4gICAgICAgIFJlZ2lzdHJhckluZm86IHtcbiAgICAgICAgICAgIGFjY291bnQ6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZmVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBmaWVsZHM6ICdJZGVudGl0eUZpZWxkcydcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBBdXRoSW5kZXg6ICd1MzInLFxuICAgICAgICBBdXRob3JpdHlTaWduYXR1cmU6ICdTaWduYXR1cmUnLFxuICAgICAgICBIZWFydGJlYXQ6IHtcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgbmV0d29ya1N0YXRlOiAnT3BhcXVlTmV0d29ya1N0YXRlJyxcbiAgICAgICAgICAgIHNlc3Npb25JbmRleDogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICBhdXRob3JpdHlJbmRleDogJ0F1dGhJbmRleCcsXG4gICAgICAgICAgICB2YWxpZGF0b3JzTGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBIZWFydGJlYXRUbzI0NDoge1xuICAgICAgICAgICAgYmxvY2tOdW1iZXI6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBuZXR3b3JrU3RhdGU6ICdPcGFxdWVOZXR3b3JrU3RhdGUnLFxuICAgICAgICAgICAgc2Vzc2lvbkluZGV4OiAnU2Vzc2lvbkluZGV4JyxcbiAgICAgICAgICAgIGF1dGhvcml0eUluZGV4OiAnQXV0aEluZGV4J1xuICAgICAgICB9LFxuICAgICAgICBPcGFxdWVNdWx0aWFkZHI6ICdPcGFxdWU8Qnl0ZXM+JyxcbiAgICAgICAgT3BhcXVlUGVlcklkOiAnT3BhcXVlPEJ5dGVzPicsXG4gICAgICAgIE9wYXF1ZU5ldHdvcmtTdGF0ZToge1xuICAgICAgICAgICAgcGVlcklkOiAnT3BhcXVlUGVlcklkJyxcbiAgICAgICAgICAgIGV4dGVybmFsQWRkcmVzc2VzOiAnVmVjPE9wYXF1ZU11bHRpYWRkcj4nXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0ICogYXMgZGVmcyBmcm9tICcuL2RlZmluaXRpb25zLmpzJztcbmNvbnN0IGpzb25ycGMgPSB7fTtcbk9iamVjdC5rZXlzKGRlZnMpLmZvckVhY2goKHMpID0+IE9iamVjdC5lbnRyaWVzKGRlZnNbc10ucnBjIHx8IHt9KS5mb3JFYWNoKChbbWV0aG9kLCBkZWZdKSA9PiB7XG4gICAgLy8gYWxsb3cgZm9yIHNlY3Rpb24gb3ZlcnJpZGVzXG4gICAgY29uc3Qgc2VjdGlvbiA9IGRlZi5hbGlhc1NlY3Rpb24gfHwgcztcbiAgICBpZiAoIWpzb25ycGNbc2VjdGlvbl0pIHtcbiAgICAgICAganNvbnJwY1tzZWN0aW9uXSA9IHt9O1xuICAgIH1cbiAgICBqc29ucnBjW3NlY3Rpb25dW21ldGhvZF0gPSBvYmplY3RTcHJlYWQoe30sIGRlZiwge1xuICAgICAgICBpc1N1YnNjcmlwdGlvbjogISFkZWYucHVic3ViLFxuICAgICAgICBqc29ucnBjOiBgJHtzZWN0aW9ufV8ke21ldGhvZH1gLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIHNlY3Rpb25cbiAgICB9KTtcbn0pKTtcbmV4cG9ydCBkZWZhdWx0IGpzb25ycGM7XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBDYWxsSW5kZXg6ICcodTgsIHU4KScsXG4gICAgICAgIExvdHRlcnlDb25maWc6IHtcbiAgICAgICAgICAgIHByaWNlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBzdGFydDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGxlbmd0aDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGRlbGF5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgcmVwZWF0OiAnYm9vbCdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBBbGxIYXNoZXJzIH0gZnJvbSAnLi9oYXNoZXJzLmpzJztcbmltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuaW1wb3J0IHsgdjkgfSBmcm9tICcuL3Y5LmpzJztcbmltcG9ydCB7IHYxMCB9IGZyb20gJy4vdjEwLmpzJztcbmltcG9ydCB7IHYxMSB9IGZyb20gJy4vdjExLmpzJztcbmltcG9ydCB7IHYxMiB9IGZyb20gJy4vdjEyLmpzJztcbmltcG9ydCB7IHYxMyB9IGZyb20gJy4vdjEzLmpzJztcbmltcG9ydCB7IHYxNCB9IGZyb20gJy4vdjE0LmpzJztcbmltcG9ydCB7IHYxNSB9IGZyb20gJy4vdjE1LmpzJztcbmV4cG9ydCB7IEFsbEhhc2hlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgLy8gYWxsIGtub3duXG4gICAgICAgIC4uLnY5LFxuICAgICAgICAuLi52MTAsXG4gICAgICAgIC4uLnYxMSxcbiAgICAgICAgLi4udjEyLFxuICAgICAgICAuLi52MTMsXG4gICAgICAgIC4uLnYxNCxcbiAgICAgICAgLi4udjE1LFxuICAgICAgICAvLyBsYXRlc3QgbWFwcGluZ3NcbiAgICAgICAgLy8gTk9URTogRm9yIHYxNSwgd2Ugb25seSBhZGRlZCB0aGUgcnVudGltZSBkZWZpbnRpb25zLFxuICAgICAgICAvLyBoZW5jZSBsYXRlc3QgZm9yIG1vc3QgcG9pbnRpbmcgdG8gdGhlIHByZXZpb3VzIFYxNFxuICAgICAgICBFcnJvck1ldGFkYXRhTGF0ZXN0OiAnRXJyb3JNZXRhZGF0YVYxNCcsXG4gICAgICAgIEV2ZW50TWV0YWRhdGFMYXRlc3Q6ICdFdmVudE1ldGFkYXRhVjE0JyxcbiAgICAgICAgRXh0cmluc2ljTWV0YWRhdGFMYXRlc3Q6ICdFeHRyaW5zaWNNZXRhZGF0YVYxNScsXG4gICAgICAgIEZ1bmN0aW9uQXJndW1lbnRNZXRhZGF0YUxhdGVzdDogJ0Z1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxNCcsXG4gICAgICAgIEZ1bmN0aW9uTWV0YWRhdGFMYXRlc3Q6ICdGdW5jdGlvbk1ldGFkYXRhVjE0JyxcbiAgICAgICAgTWV0YWRhdGFMYXRlc3Q6ICdNZXRhZGF0YVYxNScsXG4gICAgICAgIFBhbGxldENhbGxNZXRhZGF0YUxhdGVzdDogJ1BhbGxldENhbGxNZXRhZGF0YVYxNCcsXG4gICAgICAgIFBhbGxldENvbnN0YW50TWV0YWRhdGFMYXRlc3Q6ICdQYWxsZXRDb25zdGFudE1ldGFkYXRhVjE0JyxcbiAgICAgICAgUGFsbGV0RXJyb3JNZXRhZGF0YUxhdGVzdDogJ1BhbGxldEVycm9yTWV0YWRhdGFWMTQnLFxuICAgICAgICBQYWxsZXRFdmVudE1ldGFkYXRhTGF0ZXN0OiAnUGFsbGV0RXZlbnRNZXRhZGF0YVYxNCcsXG4gICAgICAgIFBhbGxldE1ldGFkYXRhTGF0ZXN0OiAnUGFsbGV0TWV0YWRhdGFWMTUnLFxuICAgICAgICBQYWxsZXRTdG9yYWdlTWV0YWRhdGFMYXRlc3Q6ICdQYWxsZXRTdG9yYWdlTWV0YWRhdGFWMTQnLFxuICAgICAgICBQb3J0YWJsZVR5cGU6ICdQb3J0YWJsZVR5cGVWMTQnLFxuICAgICAgICBSdW50aW1lQXBpTWV0YWRhdGFMYXRlc3Q6ICdSdW50aW1lQXBpTWV0YWRhdGFWMTUnLFxuICAgICAgICBTaWduZWRFeHRlbnNpb25NZXRhZGF0YUxhdGVzdDogJ1NpZ25lZEV4dGVuc2lvbk1ldGFkYXRhVjE0JyxcbiAgICAgICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFMYXRlc3Q6ICdTdG9yYWdlRW50cnlNZXRhZGF0YVYxNCcsXG4gICAgICAgIFN0b3JhZ2VFbnRyeU1vZGlmaWVyTGF0ZXN0OiAnU3RvcmFnZUVudHJ5TW9kaWZpZXJWMTQnLFxuICAgICAgICBTdG9yYWdlRW50cnlUeXBlTGF0ZXN0OiAnU3RvcmFnZUVudHJ5VHlwZVYxNCcsXG4gICAgICAgIFN0b3JhZ2VIYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjE0JyxcbiAgICAgICAgLy8gYWRkaXRpb25hbCB0eXBlc1xuICAgICAgICBPcGFxdWVNZXRhZGF0YTogJ09wYXF1ZTxCeXRlcz4nLFxuICAgICAgICAvLyB0aGUgZW51bSBjb250YWluaW5nIGFsbCB0aGUgbWFwcGluZ3NcbiAgICAgICAgTWV0YWRhdGFBbGw6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgVjA6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVYwPicsXG4gICAgICAgICAgICAgICAgVjE6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVYxPicsXG4gICAgICAgICAgICAgICAgVjI6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVYyPicsXG4gICAgICAgICAgICAgICAgVjM6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVYzPicsXG4gICAgICAgICAgICAgICAgVjQ6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY0PicsXG4gICAgICAgICAgICAgICAgVjU6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY1PicsXG4gICAgICAgICAgICAgICAgVjY6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY2PicsXG4gICAgICAgICAgICAgICAgVjc6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY3PicsXG4gICAgICAgICAgICAgICAgVjg6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY4PicsXG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgdmVyc2lvbiBvbiBLdXNhbWEgaW4gVjksIGRyb3BwaW5nIHdpbGwgYmUgcHJvYmxlbWF0aWNcbiAgICAgICAgICAgICAgICBWOTogJ01ldGFkYXRhVjknLFxuICAgICAgICAgICAgICAgIFYxMDogJ01ldGFkYXRhVjEwJyxcbiAgICAgICAgICAgICAgICBWMTE6ICdNZXRhZGF0YVYxMScsXG4gICAgICAgICAgICAgICAgVjEyOiAnTWV0YWRhdGFWMTInLFxuICAgICAgICAgICAgICAgIFYxMzogJ01ldGFkYXRhVjEzJyxcbiAgICAgICAgICAgICAgICBWMTQ6ICdNZXRhZGF0YVYxNCcsXG4gICAgICAgICAgICAgICAgVjE1OiAnTWV0YWRhdGFWMTUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgc29ydC1rZXlzICovXG5leHBvcnQgY29uc3QgQWxsSGFzaGVycyA9IHtcbiAgICBCbGFrZTJfMTI4OiBudWxsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgIEJsYWtlMl8yNTY6IG51bGwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgQmxha2UyXzEyOENvbmNhdDogbnVsbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICBUd294MTI4OiBudWxsLFxuICAgIFR3b3gyNTY6IG51bGwsXG4gICAgVHdveDY0Q29uY2F0OiBudWxsLFxuICAgIC8vIG5ldyBpbiB2MTFcbiAgICBJZGVudGl0eTogbnVsbFxufTtcbiIsImNvbnN0IE1FVEFfVjFfVE9fVjIgPSB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBtZXRhZGF0YSBvZiBhIHJ1bnRpbWUnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnT3BhcXVlTWV0YWRhdGEnXG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIE1ldGFkYXRhOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YV9hdF92ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgbWV0YWRhdGEgYXQgYSBnaXZlbiB2ZXJzaW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPE9wYXF1ZU1ldGFkYXRhPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhX3ZlcnNpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc3VwcG9ydGVkIG1ldGFkYXRhIHZlcnNpb25zLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8dTMyPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLk1FVEFfVjFfVE9fVjJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5NRVRBX1YxX1RPX1YyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBjb25zdCB2MTAgPSB7XG4gICAgLy8gdjEwXG4gICAgRXJyb3JNZXRhZGF0YVYxMDogJ0Vycm9yTWV0YWRhdGFWOScsXG4gICAgRXZlbnRNZXRhZGF0YVYxMDogJ0V2ZW50TWV0YWRhdGFWOScsXG4gICAgRnVuY3Rpb25Bcmd1bWVudE1ldGFkYXRhVjEwOiAnRnVuY3Rpb25Bcmd1bWVudE1ldGFkYXRhVjknLFxuICAgIEZ1bmN0aW9uTWV0YWRhdGFWMTA6ICdGdW5jdGlvbk1ldGFkYXRhVjknLFxuICAgIE1ldGFkYXRhVjEwOiB7XG4gICAgICAgIG1vZHVsZXM6ICdWZWM8TW9kdWxlTWV0YWRhdGFWMTA+J1xuICAgIH0sXG4gICAgTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMDogJ01vZHVsZUNvbnN0YW50TWV0YWRhdGFWOScsXG4gICAgTW9kdWxlTWV0YWRhdGFWMTA6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzdG9yYWdlOiAnT3B0aW9uPFN0b3JhZ2VNZXRhZGF0YVYxMD4nLFxuICAgICAgICBjYWxsczogJ09wdGlvbjxWZWM8RnVuY3Rpb25NZXRhZGF0YVYxMD4+JyxcbiAgICAgICAgZXZlbnRzOiAnT3B0aW9uPFZlYzxFdmVudE1ldGFkYXRhVjEwPj4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8TW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMD4nLFxuICAgICAgICBlcnJvcnM6ICdWZWM8RXJyb3JNZXRhZGF0YVYxMD4nXG4gICAgfSxcbiAgICBTdG9yYWdlRW50cnlNb2RpZmllclYxMDogJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyVjknLFxuICAgIFN0b3JhZ2VFbnRyeU1ldGFkYXRhVjEwOiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgbW9kaWZpZXI6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxMCcsXG4gICAgICAgIHR5cGU6ICdTdG9yYWdlRW50cnlUeXBlVjEwJyxcbiAgICAgICAgZmFsbGJhY2s6ICdCeXRlcycsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBTdG9yYWdlRW50cnlUeXBlVjEwOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBQbGFpbjogJ1R5cGUnLFxuICAgICAgICAgICAgTWFwOiB7XG4gICAgICAgICAgICAgICAgaGFzaGVyOiAnU3RvcmFnZUhhc2hlclYxMCcsXG4gICAgICAgICAgICAgICAga2V5OiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBsaW5rZWQ6ICdib29sJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIERvdWJsZU1hcDoge1xuICAgICAgICAgICAgICAgIGhhc2hlcjogJ1N0b3JhZ2VIYXNoZXJWMTAnLFxuICAgICAgICAgICAgICAgIGtleTE6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBrZXkyOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBrZXkySGFzaGVyOiAnU3RvcmFnZUhhc2hlclYxMCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgU3RvcmFnZU1ldGFkYXRhVjEwOiB7XG4gICAgICAgIHByZWZpeDogJ1RleHQnLFxuICAgICAgICBpdGVtczogJ1ZlYzxTdG9yYWdlRW50cnlNZXRhZGF0YVYxMD4nXG4gICAgfSxcbiAgICBTdG9yYWdlSGFzaGVyVjEwOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBCbGFrZTJfMTI4OiBudWxsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgICAgICAgICAgQmxha2UyXzI1NjogbnVsbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgICAgICAgIEJsYWtlMl8xMjhDb25jYXQ6IG51bGwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgICAgICBUd294MTI4OiBudWxsLFxuICAgICAgICAgICAgVHdveDI1NjogbnVsbCxcbiAgICAgICAgICAgIFR3b3g2NENvbmNhdDogbnVsbFxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IEFsbEhhc2hlcnMgfSBmcm9tICcuL2hhc2hlcnMuanMnO1xuZXhwb3J0IGNvbnN0IHYxMSA9IHtcbiAgICAvLyB2MTFcbiAgICBFcnJvck1ldGFkYXRhVjExOiAnRXJyb3JNZXRhZGF0YVYxMCcsXG4gICAgRXZlbnRNZXRhZGF0YVYxMTogJ0V2ZW50TWV0YWRhdGFWMTAnLFxuICAgIEV4dHJpbnNpY01ldGFkYXRhVjExOiB7XG4gICAgICAgIHZlcnNpb246ICd1OCcsXG4gICAgICAgIHNpZ25lZEV4dGVuc2lvbnM6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWMTE6ICdGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWMTAnLFxuICAgIEZ1bmN0aW9uTWV0YWRhdGFWMTE6ICdGdW5jdGlvbk1ldGFkYXRhVjEwJyxcbiAgICBNZXRhZGF0YVYxMToge1xuICAgICAgICBtb2R1bGVzOiAnVmVjPE1vZHVsZU1ldGFkYXRhVjExPicsXG4gICAgICAgIGV4dHJpbnNpYzogJ0V4dHJpbnNpY01ldGFkYXRhVjExJ1xuICAgIH0sXG4gICAgTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMTogJ01vZHVsZUNvbnN0YW50TWV0YWRhdGFWMTAnLFxuICAgIE1vZHVsZU1ldGFkYXRhVjExOiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgc3RvcmFnZTogJ09wdGlvbjxTdG9yYWdlTWV0YWRhdGFWMTE+JyxcbiAgICAgICAgY2FsbHM6ICdPcHRpb248VmVjPEZ1bmN0aW9uTWV0YWRhdGFWMTE+PicsXG4gICAgICAgIGV2ZW50czogJ09wdGlvbjxWZWM8RXZlbnRNZXRhZGF0YVYxMT4+JyxcbiAgICAgICAgY29uc3RhbnRzOiAnVmVjPE1vZHVsZUNvbnN0YW50TWV0YWRhdGFWMTE+JyxcbiAgICAgICAgZXJyb3JzOiAnVmVjPEVycm9yTWV0YWRhdGFWMTE+J1xuICAgIH0sXG4gICAgU3RvcmFnZUVudHJ5TW9kaWZpZXJWMTE6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxMCcsXG4gICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFWMTE6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBtb2RpZmllcjogJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyVjExJyxcbiAgICAgICAgdHlwZTogJ1N0b3JhZ2VFbnRyeVR5cGVWMTEnLFxuICAgICAgICBmYWxsYmFjazogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFN0b3JhZ2VFbnRyeVR5cGVWMTE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFBsYWluOiAnVHlwZScsXG4gICAgICAgICAgICBNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjExJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGxpbmtlZDogJ2Jvb2wnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRG91YmxlTWFwOiB7XG4gICAgICAgICAgICAgICAgaGFzaGVyOiAnU3RvcmFnZUhhc2hlclYxMScsXG4gICAgICAgICAgICAgICAga2V5MTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGtleTI6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGtleTJIYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjExJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBTdG9yYWdlTWV0YWRhdGFWMTE6IHtcbiAgICAgICAgcHJlZml4OiAnVGV4dCcsXG4gICAgICAgIGl0ZW1zOiAnVmVjPFN0b3JhZ2VFbnRyeU1ldGFkYXRhVjExPidcbiAgICB9LFxuICAgIFN0b3JhZ2VIYXNoZXJWMTE6IHtcbiAgICAgICAgX2VudW06IEFsbEhhc2hlcnNcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHYxMiA9IHtcbiAgICAvLyB2MTJcbiAgICBFcnJvck1ldGFkYXRhVjEyOiAnRXJyb3JNZXRhZGF0YVYxMScsXG4gICAgRXZlbnRNZXRhZGF0YVYxMjogJ0V2ZW50TWV0YWRhdGFWMTEnLFxuICAgIEV4dHJpbnNpY01ldGFkYXRhVjEyOiAnRXh0cmluc2ljTWV0YWRhdGFWMTEnLFxuICAgIEZ1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxMjogJ0Z1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxMScsXG4gICAgRnVuY3Rpb25NZXRhZGF0YVYxMjogJ0Z1bmN0aW9uTWV0YWRhdGFWMTEnLFxuICAgIE1ldGFkYXRhVjEyOiB7XG4gICAgICAgIG1vZHVsZXM6ICdWZWM8TW9kdWxlTWV0YWRhdGFWMTI+JyxcbiAgICAgICAgZXh0cmluc2ljOiAnRXh0cmluc2ljTWV0YWRhdGFWMTInXG4gICAgfSxcbiAgICBNb2R1bGVDb25zdGFudE1ldGFkYXRhVjEyOiAnTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMScsXG4gICAgTW9kdWxlTWV0YWRhdGFWMTI6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzdG9yYWdlOiAnT3B0aW9uPFN0b3JhZ2VNZXRhZGF0YVYxMj4nLFxuICAgICAgICBjYWxsczogJ09wdGlvbjxWZWM8RnVuY3Rpb25NZXRhZGF0YVYxMj4+JyxcbiAgICAgICAgZXZlbnRzOiAnT3B0aW9uPFZlYzxFdmVudE1ldGFkYXRhVjEyPj4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8TW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMj4nLFxuICAgICAgICBlcnJvcnM6ICdWZWM8RXJyb3JNZXRhZGF0YVYxMj4nLFxuICAgICAgICBpbmRleDogJ3U4J1xuICAgIH0sXG4gICAgU3RvcmFnZUVudHJ5TW9kaWZpZXJWMTI6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxMScsXG4gICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFWMTI6ICdTdG9yYWdlRW50cnlNZXRhZGF0YVYxMScsXG4gICAgU3RvcmFnZUVudHJ5VHlwZVYxMjogJ1N0b3JhZ2VFbnRyeVR5cGVWMTEnLFxuICAgIFN0b3JhZ2VNZXRhZGF0YVYxMjogJ1N0b3JhZ2VNZXRhZGF0YVYxMScsXG4gICAgU3RvcmFnZUhhc2hlclYxMjogJ1N0b3JhZ2VIYXNoZXJWMTEnXG59O1xuIiwiZXhwb3J0IGNvbnN0IHYxMyA9IHtcbiAgICAvLyB2MTNcbiAgICBFcnJvck1ldGFkYXRhVjEzOiAnRXJyb3JNZXRhZGF0YVYxMicsXG4gICAgRXZlbnRNZXRhZGF0YVYxMzogJ0V2ZW50TWV0YWRhdGFWMTInLFxuICAgIEV4dHJpbnNpY01ldGFkYXRhVjEzOiAnRXh0cmluc2ljTWV0YWRhdGFWMTInLFxuICAgIEZ1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxMzogJ0Z1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxMicsXG4gICAgRnVuY3Rpb25NZXRhZGF0YVYxMzogJ0Z1bmN0aW9uTWV0YWRhdGFWMTInLFxuICAgIE1ldGFkYXRhVjEzOiB7XG4gICAgICAgIG1vZHVsZXM6ICdWZWM8TW9kdWxlTWV0YWRhdGFWMTM+JyxcbiAgICAgICAgZXh0cmluc2ljOiAnRXh0cmluc2ljTWV0YWRhdGFWMTMnXG4gICAgfSxcbiAgICBNb2R1bGVDb25zdGFudE1ldGFkYXRhVjEzOiAnTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMicsXG4gICAgTW9kdWxlTWV0YWRhdGFWMTM6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzdG9yYWdlOiAnT3B0aW9uPFN0b3JhZ2VNZXRhZGF0YVYxMz4nLFxuICAgICAgICBjYWxsczogJ09wdGlvbjxWZWM8RnVuY3Rpb25NZXRhZGF0YVYxMz4+JyxcbiAgICAgICAgZXZlbnRzOiAnT3B0aW9uPFZlYzxFdmVudE1ldGFkYXRhVjEzPj4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8TW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMz4nLFxuICAgICAgICBlcnJvcnM6ICdWZWM8RXJyb3JNZXRhZGF0YVYxMz4nLFxuICAgICAgICBpbmRleDogJ3U4J1xuICAgIH0sXG4gICAgU3RvcmFnZUVudHJ5TW9kaWZpZXJWMTM6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxMicsXG4gICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFWMTM6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBtb2RpZmllcjogJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyVjEzJyxcbiAgICAgICAgdHlwZTogJ1N0b3JhZ2VFbnRyeVR5cGVWMTMnLFxuICAgICAgICBmYWxsYmFjazogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFN0b3JhZ2VFbnRyeVR5cGVWMTM6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFBsYWluOiAnVHlwZScsXG4gICAgICAgICAgICBNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjEzJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGxpbmtlZDogJ2Jvb2wnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRG91YmxlTWFwOiB7XG4gICAgICAgICAgICAgICAgaGFzaGVyOiAnU3RvcmFnZUhhc2hlclYxMycsXG4gICAgICAgICAgICAgICAga2V5MTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGtleTI6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGtleTJIYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjEzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE5NYXA6IHtcbiAgICAgICAgICAgICAgICBrZXlWZWM6ICdWZWM8VHlwZT4nLFxuICAgICAgICAgICAgICAgIGhhc2hlcnM6ICdWZWM8U3RvcmFnZUhhc2hlclYxMz4nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnVHlwZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgU3RvcmFnZU1ldGFkYXRhVjEzOiB7XG4gICAgICAgIHByZWZpeDogJ1RleHQnLFxuICAgICAgICBpdGVtczogJ1ZlYzxTdG9yYWdlRW50cnlNZXRhZGF0YVYxMz4nXG4gICAgfSxcbiAgICBTdG9yYWdlSGFzaGVyVjEzOiAnU3RvcmFnZUhhc2hlclYxMidcbn07XG4iLCJpbXBvcnQgeyBTaTFWYXJpYW50IH0gZnJvbSAnLi4vc2NhbGVJbmZvL3YxLmpzJztcbmV4cG9ydCBjb25zdCB2MTQgPSB7XG4gICAgLy8gcmVnaXN0cnlcbiAgICBQb3J0YWJsZVR5cGVWMTQ6IHtcbiAgICAgICAgaWQ6ICdTaTFMb29rdXBUeXBlSWQnLFxuICAgICAgICB0eXBlOiAnU2kxVHlwZSdcbiAgICB9LFxuICAgIC8vIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIGxheW91dHMsIGkuZS4gZG9uJ3QgYnJlYWsgcHJldmlvdXMgdXNlcnNcbiAgICBFcnJvck1ldGFkYXRhVjE0OiB7XG4gICAgICAgIC4uLlNpMVZhcmlhbnQsXG4gICAgICAgIGFyZ3M6ICdWZWM8VHlwZT4nXG4gICAgfSxcbiAgICBFdmVudE1ldGFkYXRhVjE0OiB7XG4gICAgICAgIC4uLlNpMVZhcmlhbnQsXG4gICAgICAgIGFyZ3M6ICdWZWM8VHlwZT4nXG4gICAgfSxcbiAgICBGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWMTQ6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICB0eXBlOiAnVHlwZScsXG4gICAgICAgIHR5cGVOYW1lOiAnT3B0aW9uPFR5cGU+J1xuICAgIH0sXG4gICAgRnVuY3Rpb25NZXRhZGF0YVYxNDoge1xuICAgICAgICAuLi5TaTFWYXJpYW50LFxuICAgICAgICBhcmdzOiAnVmVjPEZ1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxND4nXG4gICAgfSxcbiAgICAvLyBWMTRcbiAgICBFeHRyaW5zaWNNZXRhZGF0YVYxNDoge1xuICAgICAgICB0eXBlOiAnU2lMb29rdXBUeXBlSWQnLFxuICAgICAgICB2ZXJzaW9uOiAndTgnLFxuICAgICAgICBzaWduZWRFeHRlbnNpb25zOiAnVmVjPFNpZ25lZEV4dGVuc2lvbk1ldGFkYXRhVjE0PidcbiAgICB9LFxuICAgIE1ldGFkYXRhVjE0OiB7XG4gICAgICAgIGxvb2t1cDogJ1BvcnRhYmxlUmVnaXN0cnknLFxuICAgICAgICBwYWxsZXRzOiAnVmVjPFBhbGxldE1ldGFkYXRhVjE0PicsXG4gICAgICAgIGV4dHJpbnNpYzogJ0V4dHJpbnNpY01ldGFkYXRhVjE0JyxcbiAgICAgICAgdHlwZTogJ1NpTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgUGFsbGV0Q2FsbE1ldGFkYXRhVjE0OiB7XG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFBhbGxldENvbnN0YW50TWV0YWRhdGFWMTQ6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICB0eXBlOiAnU2lMb29rdXBUeXBlSWQnLFxuICAgICAgICB2YWx1ZTogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFBhbGxldEVycm9yTWV0YWRhdGFWMTQ6IHtcbiAgICAgICAgdHlwZTogJ1NpTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgUGFsbGV0RXZlbnRNZXRhZGF0YVYxNDoge1xuICAgICAgICB0eXBlOiAnU2lMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBQYWxsZXRNZXRhZGF0YVYxNDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIHN0b3JhZ2U6ICdPcHRpb248UGFsbGV0U3RvcmFnZU1ldGFkYXRhVjE0PicsXG4gICAgICAgIGNhbGxzOiAnT3B0aW9uPFBhbGxldENhbGxNZXRhZGF0YVYxND4nLFxuICAgICAgICBldmVudHM6ICdPcHRpb248UGFsbGV0RXZlbnRNZXRhZGF0YVYxND4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8UGFsbGV0Q29uc3RhbnRNZXRhZGF0YVYxND4nLFxuICAgICAgICBlcnJvcnM6ICdPcHRpb248UGFsbGV0RXJyb3JNZXRhZGF0YVYxND4nLFxuICAgICAgICBpbmRleDogJ3U4J1xuICAgIH0sXG4gICAgUGFsbGV0U3RvcmFnZU1ldGFkYXRhVjE0OiB7XG4gICAgICAgIHByZWZpeDogJ1RleHQnLFxuICAgICAgICAvLyBOT1RFOiBSZW5hbWVkIGZyb20gZW50cmllc1xuICAgICAgICBpdGVtczogJ1ZlYzxTdG9yYWdlRW50cnlNZXRhZGF0YVYxND4nXG4gICAgfSxcbiAgICBTaWduZWRFeHRlbnNpb25NZXRhZGF0YVYxNDoge1xuICAgICAgICBpZGVudGlmaWVyOiAnVGV4dCcsXG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGFkZGl0aW9uYWxTaWduZWQ6ICdTaUxvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFN0b3JhZ2VFbnRyeU1ldGFkYXRhVjE0OiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgbW9kaWZpZXI6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxNCcsXG4gICAgICAgIHR5cGU6ICdTdG9yYWdlRW50cnlUeXBlVjE0JyxcbiAgICAgICAgZmFsbGJhY2s6ICdCeXRlcycsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBTdG9yYWdlRW50cnlNb2RpZmllclYxNDogJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyVjEzJyxcbiAgICBTdG9yYWdlRW50cnlUeXBlVjE0OiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBQbGFpbjogJ1NpTG9va3VwVHlwZUlkJyxcbiAgICAgICAgICAgIE1hcDoge1xuICAgICAgICAgICAgICAgIGhhc2hlcnM6ICdWZWM8U3RvcmFnZUhhc2hlclYxND4nLFxuICAgICAgICAgICAgICAgIGtleTogJ1NpTG9va3VwVHlwZUlkJywgLy8gTk9URTogUmVuYW1lZCBmcm9tIFwia2V5c1wiXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdTaUxvb2t1cFR5cGVJZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgU3RvcmFnZUhhc2hlclYxNDogJ1N0b3JhZ2VIYXNoZXJWMTMnXG59O1xuIiwiZXhwb3J0IGNvbnN0IHYxNSA9IHtcbiAgICAvLyBuZXcvYWRqdXN0ZWQgaW4gdjE1XG4gICAgQ3VzdG9tTWV0YWRhdGExNToge1xuICAgICAgICBtYXA6ICdCVHJlZU1hcDxUZXh0LCBDdXN0b21WYWx1ZU1ldGFkYXRhMTU+J1xuICAgIH0sXG4gICAgQ3VzdG9tVmFsdWVNZXRhZGF0YTE1OiB7XG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIHZhbHVlOiAnQnl0ZXMnXG4gICAgfSxcbiAgICBFeHRyaW5zaWNNZXRhZGF0YVYxNToge1xuICAgICAgICB2ZXJzaW9uOiAndTgnLFxuICAgICAgICBhZGRyZXNzVHlwZTogJ1NpTG9va3VwVHlwZUlkJyxcbiAgICAgICAgY2FsbFR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIHNpZ25hdHVyZVR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGV4dHJhVHlwZTogJ1NpTG9va3VwVHlwZUlkJyxcbiAgICAgICAgc2lnbmVkRXh0ZW5zaW9uczogJ1ZlYzxTaWduZWRFeHRlbnNpb25NZXRhZGF0YVYxND4nXG4gICAgfSxcbiAgICBPdXRlckVudW1zMTU6IHtcbiAgICAgICAgY2FsbFR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGV2ZW50VHlwZTogJ1NpTG9va3VwVHlwZUlkJyxcbiAgICAgICAgZXJyb3JUeXBlOiAnU2lMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBQYWxsZXRNZXRhZGF0YVYxNToge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIHN0b3JhZ2U6ICdPcHRpb248UGFsbGV0U3RvcmFnZU1ldGFkYXRhVjE0PicsXG4gICAgICAgIGNhbGxzOiAnT3B0aW9uPFBhbGxldENhbGxNZXRhZGF0YVYxND4nLFxuICAgICAgICBldmVudHM6ICdPcHRpb248UGFsbGV0RXZlbnRNZXRhZGF0YVYxND4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8UGFsbGV0Q29uc3RhbnRNZXRhZGF0YVYxND4nLFxuICAgICAgICBlcnJvcnM6ICdPcHRpb248UGFsbGV0RXJyb3JNZXRhZGF0YVYxND4nLFxuICAgICAgICBpbmRleDogJ3U4JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFJ1bnRpbWVBcGlNZXRhZGF0YVYxNToge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIG1ldGhvZHM6ICdWZWM8UnVudGltZUFwaU1ldGhvZE1ldGFkYXRhVjE1PicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBSdW50aW1lQXBpTWV0aG9kTWV0YWRhdGFWMTU6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBpbnB1dHM6ICdWZWM8UnVudGltZUFwaU1ldGhvZFBhcmFtTWV0YWRhdGFWMTU+JyxcbiAgICAgICAgb3V0cHV0OiAnU2lMb29rdXBUeXBlSWQnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgUnVudGltZUFwaU1ldGhvZFBhcmFtTWV0YWRhdGFWMTU6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICB0eXBlOiAnU2lMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICAvLyBhY3R1YWwgdjE1IGRlZmluaXRpb25cbiAgICBNZXRhZGF0YVYxNToge1xuICAgICAgICBsb29rdXA6ICdQb3J0YWJsZVJlZ2lzdHJ5JyxcbiAgICAgICAgcGFsbGV0czogJ1ZlYzxQYWxsZXRNZXRhZGF0YVYxNT4nLFxuICAgICAgICBleHRyaW5zaWM6ICdFeHRyaW5zaWNNZXRhZGF0YVYxNScsXG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGFwaXM6ICdWZWM8UnVudGltZUFwaU1ldGFkYXRhVjE1PicsXG4gICAgICAgIG91dGVyRW51bXM6ICdPdXRlckVudW1zMTUnLFxuICAgICAgICBjdXN0b206ICdDdXN0b21NZXRhZGF0YTE1J1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdjkgPSB7XG4gICAgLy8gdjlcbiAgICBFcnJvck1ldGFkYXRhVjk6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgRXZlbnRNZXRhZGF0YVY5OiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxUeXBlPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWOToge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIHR5cGU6ICdUeXBlJ1xuICAgIH0sXG4gICAgRnVuY3Rpb25NZXRhZGF0YVY5OiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWOT4nLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgTWV0YWRhdGFWOToge1xuICAgICAgICBtb2R1bGVzOiAnVmVjPE1vZHVsZU1ldGFkYXRhVjk+J1xuICAgIH0sXG4gICAgTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVY5OiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgdHlwZTogJ1R5cGUnLFxuICAgICAgICB2YWx1ZTogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIE1vZHVsZU1ldGFkYXRhVjk6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzdG9yYWdlOiAnT3B0aW9uPFN0b3JhZ2VNZXRhZGF0YVY5PicsXG4gICAgICAgIGNhbGxzOiAnT3B0aW9uPFZlYzxGdW5jdGlvbk1ldGFkYXRhVjk+PicsXG4gICAgICAgIGV2ZW50czogJ09wdGlvbjxWZWM8RXZlbnRNZXRhZGF0YVY5Pj4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8TW9kdWxlQ29uc3RhbnRNZXRhZGF0YVY5PicsXG4gICAgICAgIGVycm9yczogJ1ZlYzxFcnJvck1ldGFkYXRhVjk+J1xuICAgIH0sXG4gICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFWOToge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIG1vZGlmaWVyOiAnU3RvcmFnZUVudHJ5TW9kaWZpZXJWOScsXG4gICAgICAgIHR5cGU6ICdTdG9yYWdlRW50cnlUeXBlVjknLFxuICAgICAgICBmYWxsYmFjazogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFN0b3JhZ2VFbnRyeU1vZGlmaWVyVjk6IHtcbiAgICAgICAgX2VudW06IFsnT3B0aW9uYWwnLCAnRGVmYXVsdCcsICdSZXF1aXJlZCddXG4gICAgfSxcbiAgICBTdG9yYWdlRW50cnlUeXBlVjk6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFBsYWluOiAnVHlwZScsXG4gICAgICAgICAgICBNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjknLFxuICAgICAgICAgICAgICAgIGtleTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgbGlua2VkOiAnYm9vbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBEb3VibGVNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjknLFxuICAgICAgICAgICAgICAgIGtleTE6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBrZXkyOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBrZXkySGFzaGVyOiAnU3RvcmFnZUhhc2hlclY5J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBTdG9yYWdlSGFzaGVyVjk6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEJsYWtlMl8xMjg6IG51bGwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgICAgICBCbGFrZTJfMjU2OiBudWxsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgICAgICAgICAgVHdveDEyODogbnVsbCxcbiAgICAgICAgICAgIFR3b3gyNTY6IG51bGwsXG4gICAgICAgICAgICBUd294NjRDb25jYXQ6IG51bGxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgU3RvcmFnZU1ldGFkYXRhVjk6IHtcbiAgICAgICAgcHJlZml4OiAnVGV4dCcsXG4gICAgICAgIGl0ZW1zOiAnVmVjPFN0b3JhZ2VFbnRyeU1ldGFkYXRhVjk+J1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgTWl4bm9kZToge1xuICAgICAgICAgICAgZXh0ZXJuYWxBZGRyZXNzZXM6ICdWZWM8Qnl0ZXM+JyxcbiAgICAgICAgICAgIGt4UHVibGljOiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgcGVlcklkOiAnW3U4OyAzMl0nXG4gICAgICAgIH0sXG4gICAgICAgIE1peG5vZGVzRXJyOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIEluc3VmZmljaWVudFJlZ2lzdHJhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbWluOiAndTMyJyxcbiAgICAgICAgICAgICAgICAgICAgbnVtOiAndTMyJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2Vzc2lvblBoYXNlOiB7XG4gICAgICAgICAgICBfZW51bTogWydDb3ZlclRvQ3VycmVudCcsICdSZXF1ZXN0c1RvQ3VycmVudCcsICdDb3ZlclRvUHJldicsICdEaXNjb25uZWN0RnJvbVByZXYnXVxuICAgICAgICB9LFxuICAgICAgICBTZXNzaW9uU3RhdHVzOiB7XG4gICAgICAgICAgICBjdXJyZW50SW5kZXg6ICd1MzInLFxuICAgICAgICAgICAgcGhhc2U6ICdTZXNzaW9uUGhhc2UnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgTWl4bmV0QXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50X21peG5vZGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBpbmRleCBhbmQgcGhhc2Ugb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmVzdWx0PE1peG5vZGUsIE1peG5vZGVzRXJyPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1heWJlX3JlZ2lzdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVHJ5IHRvIHJlZ2lzdGVyIGEgbWl4bm9kZSBmb3IgdGhlIG5leHQgc2Vzc2lvbi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2Vzc2lvbl9pbmRleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ21peG5vZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdNaXhub2RlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZXZfbWl4bm9kZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGluZGV4IGFuZCBwaGFzZSBvZiB0aGUgY3VycmVudCBzZXNzaW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdSZXN1bHQ8TWl4bm9kZSwgTWl4bm9kZXNFcnI+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0dXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGluZGV4IGFuZCBwaGFzZSBvZiB0aGUgY3VycmVudCBzZXNzaW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTZXNzaW9uU3RhdHVzJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjLFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgTW1yQmF0Y2hQcm9vZjoge1xuICAgICAgICAgICAgbGVhZkluZGljZXM6ICdWZWM8TW1yTGVhZkluZGV4PicsXG4gICAgICAgICAgICBsZWFmQ291bnQ6ICdNbXJOb2RlSW5kZXgnLFxuICAgICAgICAgICAgaXRlbXM6ICdWZWM8SGFzaD4nXG4gICAgICAgIH0sXG4gICAgICAgIE1tckVuY29kYWJsZU9wYXF1ZUxlYWY6ICdCeXRlcycsXG4gICAgICAgIE1tckVycm9yOiB7XG4gICAgICAgICAgICBfZW51bTogWydJbnZhbGlkTnVtZXJpY09wJywgJ1B1c2gnLCAnR2V0Um9vdCcsICdDb21taXQnLCAnR2VuZXJhdGVQcm9vZicsICdWZXJpZnknLCAnTGVhZk5vdEZvdW5kJywgJyBQYWxsZXROb3RJbmNsdWRlZCcsICdJbnZhbGlkTGVhZkluZGV4JywgJ0ludmFsaWRCZXN0S25vd25CbG9jayddXG4gICAgICAgIH0sXG4gICAgICAgIE1tckhhc2g6ICdIYXNoJyxcbiAgICAgICAgTW1yTGVhZkJhdGNoUHJvb2Y6IHtcbiAgICAgICAgICAgIGJsb2NrSGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICBsZWF2ZXM6ICdCeXRlcycsXG4gICAgICAgICAgICBwcm9vZjogJ0J5dGVzJ1xuICAgICAgICB9LFxuICAgICAgICBNbXJMZWFmSW5kZXg6ICd1NjQnLFxuICAgICAgICBNbXJMZWFmUHJvb2Y6IHtcbiAgICAgICAgICAgIGJsb2NrSGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICBsZWFmOiAnQnl0ZXMnLFxuICAgICAgICAgICAgcHJvb2Y6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgTW1yTm9kZUluZGV4OiAndTY0JyxcbiAgICAgICAgTW1yUHJvb2Y6IHtcbiAgICAgICAgICAgIGxlYWZJbmRleDogJ01tckxlYWZJbmRleCcsXG4gICAgICAgICAgICBsZWFmQ291bnQ6ICdNbXJOb2RlSW5kZXgnLFxuICAgICAgICAgICAgaXRlbXM6ICdWZWM8SGFzaD4nXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBnZW5lcmF0ZVByb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgTU1SIHByb29mIGZvciB0aGUgZ2l2ZW4gYmxvY2sgbnVtYmVycy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2tOdW1iZXJzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU2ND4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jlc3RLbm93bkJsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTY0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnTW1yTGVhZkJhdGNoUHJvb2YnXG4gICAgfSxcbiAgICByb290OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBNTVIgcm9vdCBoYXNoIGZvciB0aGUgY3VycmVudCBiZXN0IGJsb2NrLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdNbXJIYXNoJ1xuICAgIH0sXG4gICAgdmVyaWZ5UHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgYW4gTU1SIHByb29mJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Byb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yTGVhZkJhdGNoUHJvb2YnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH0sXG4gICAgdmVyaWZ5UHJvb2ZTdGF0ZWxlc3M6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgYW4gTU1SIHByb29mIHN0YXRlbGVzc2x5IGdpdmVuIGFuIG1tcl9yb290JyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJIYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJMZWFmQmF0Y2hQcm9vZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfVxufTtcbiIsImNvbnN0IE1NUl9WMiA9IHtcbiAgICBnZW5lcmF0ZV9wcm9vZjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIE1NUiBwcm9vZiBmb3IgdGhlIGdpdmVuIGJsb2NrIG51bWJlcnMuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrTnVtYmVycycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxCbG9ja051bWJlcj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdiZXN0S25vd25CbG9ja051bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCbG9ja051bWJlcj4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8KFZlYzxNbXJFbmNvZGFibGVPcGFxdWVMZWFmPiwgTW1yQmF0Y2hQcm9vZiksIE1tckVycm9yPidcbiAgICB9LFxuICAgIG1tcl9sZWFmX2NvdW50OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBudW1iZXIgb2YgTU1SIGJsb2NrcyBpbiB0aGUgY2hhaW4uJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDxVNjQsIE1tckVycm9yPidcbiAgICB9LFxuICAgIG1tcl9yb290OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBvbi1jaGFpbiBNTVIgcm9vdCBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8SGFzaCwgTW1yRXJyb3I+J1xuICAgIH0sXG4gICAgdmVyaWZ5X3Byb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmVyaWZ5IE1NUiBwcm9vZiBhZ2FpbnN0IG9uLWNoYWluIE1NUi4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVhdmVzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPE1tckVuY29kYWJsZU9wYXF1ZUxlYWY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJCYXRjaFByb29mJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVzdWx0PCgpLCBNbXJFcnJvcj4nXG4gICAgfSxcbiAgICB2ZXJpZnlfcHJvb2Zfc3RhdGVsZXNzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmVyaWZ5IE1NUiBwcm9vZiBhZ2FpbnN0IGdpdmVuIHJvb3QgaGFzaC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZWF2ZXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8TW1yRW5jb2RhYmxlT3BhcXVlTGVhZj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ01tckJhdGNoUHJvb2YnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8KCksIE1tckVycm9yPidcbiAgICB9XG59O1xuY29uc3QgTU1SX1YxID0ge1xuICAgIGdlbmVyYXRlX2JhdGNoX3Byb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgTU1SIHByb29mIGZvciBhIHNlcmllcyBvZiBsZWF2ZXMgdW5kZXIgZ2l2ZW4gaW5kaWNlcy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVhZkluZGljZXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8TW1yTGVhZkluZGV4PidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDwoVmVjPE1tckVuY29kYWJsZU9wYXF1ZUxlYWY+LCBNbXJCYXRjaFByb29mKSwgTW1yRXJyb3I+J1xuICAgIH0sXG4gICAgZ2VuZXJhdGVfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBNTVIgcHJvb2YgZm9yIGEgbGVhZiB1bmRlciBnaXZlbiBpbmRleC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVhZkluZGV4JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yTGVhZkluZGV4J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVzdWx0PChNbXJFbmNvZGFibGVPcGFxdWVMZWFmLCBNbXJQcm9vZiksIE1tckVycm9yPidcbiAgICB9LFxuICAgIG1tcl9yb290OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBvbi1jaGFpbiBNTVIgcm9vdCBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8SGFzaCwgTW1yRXJyb3I+J1xuICAgIH0sXG4gICAgdmVyaWZ5X2JhdGNoX3Byb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmVyaWZ5IE1NUiBwcm9vZiBhZ2FpbnN0IG9uLWNoYWluIE1NUiBmb3IgYSBiYXRjaCBvZiBsZWF2ZXMuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2xlYXZlcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxNbXJFbmNvZGFibGVPcGFxdWVMZWFmPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Byb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yQmF0Y2hQcm9vZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgTW1yRXJyb3I+J1xuICAgIH0sXG4gICAgdmVyaWZ5X2JhdGNoX3Byb29mX3N0YXRlbGVzczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZlcmlmeSBNTVIgcHJvb2YgYWdhaW5zdCBnaXZlbiByb290IGhhc2ggb3IgYSBiYXRjaCBvZiBsZWF2ZXMuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVhdmVzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPE1tckVuY29kYWJsZU9wYXF1ZUxlYWY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJCYXRjaFByb29mJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVzdWx0PCgpLCBNbXJFcnJvcj4nXG4gICAgfSxcbiAgICB2ZXJpZnlfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgTU1SIHByb29mIGFnYWluc3Qgb24tY2hhaW4gTU1SLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZWFmJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yRW5jb2RhYmxlT3BhcXVlTGVhZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Byb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yUHJvb2YnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8KCksIE1tckVycm9yPidcbiAgICB9LFxuICAgIHZlcmlmeV9wcm9vZl9zdGF0ZWxlc3M6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgTU1SIHByb29mIGFnYWluc3QgZ2l2ZW4gcm9vdCBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2xlYWYnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJFbmNvZGFibGVPcGFxdWVMZWFmJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJQcm9vZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgTW1yRXJyb3I+J1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBNbXJBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczogTU1SX1YyLFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiBNTVJfVjEsXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIE5mdENvbGxlY3Rpb25JZDogJ3UzMicsXG4gICAgICAgIE5mdEl0ZW1JZDogJ3UzMidcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgTmZ0c0FwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQW4gYXR0cmlidXRlJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmZ0SXRlbUlkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248Qnl0ZXM+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbl9hdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBIGNvbGxlY3Rpb24gYXR0cmlidXRlJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCeXRlcz4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX293bmVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQSBjb2xsZWN0aW9uIG93bmVyJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248QWNjb3VudElkPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGN1c3RvbV9hdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBIGN1c3RvbSBhdHRyaWJ1dGUnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmZ0SXRlbUlkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248Qnl0ZXM+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3duZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb2xsZWN0aW9uIG93bmVyJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmZ0SXRlbUlkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPEFjY291bnRJZD4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1fYXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU3lzdGVtIGF0dHJpYnV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmZ0Q29sbGVjdGlvbklkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05mdEl0ZW1JZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPEJ5dGVzPidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge31cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICAvLyBkZXByZWNhdGVkLCB0aGUgTmltYnVzQXBpIGlzIGN1cnJlbnQgLSB0aGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAgQXV0aG9yRmlsdGVyQVBJOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjYW5fYXV0aG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHJ1bnRpbWUgYXBpIHVzZWQgdG8gcHJlZGljdCB3aGV0aGVyIGFuIGF1dGhvciB3aWxsIGJlIGVsaWdpYmxlIGluIHRoZSBnaXZlbiBzbG90JyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2F1dGhvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3JlbGF5UGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGFyZW50SGVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgY2FuX2F1dGhvcjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBydW50aW1lIGFwaSB1c2VkIHRvIHByZWRpY3Qgd2hldGhlciBhbiBhdXRob3Igd2lsbCBiZSBlbGlnaWJsZSBpbiB0aGUgZ2l2ZW4gc2xvdCcsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhdXRob3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyZWxheVBhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF0sXG4gICAgTmltYnVzQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjYW5fYXV0aG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHJ1bnRpbWUgYXBpIHVzZWQgdG8gcHJlZGljdCB3aGV0aGVyIGEgTmltYnVzIGF1dGhvciB3aWxsIGJlIGVsaWdpYmxlIGluIHRoZSBnaXZlbiBzbG90JyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2F1dGhvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3JlbGF5UGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGFyZW50SGVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBOcEFwaUVycm9yOiB7XG4gICAgICAgICAgICBfZW51bTogWydNZW1iZXJOb3RGb3VuZCcsICdPdmVyZmxvd0luUGVuZGluZ1Jld2FyZHMnXVxuICAgICAgICB9LFxuICAgICAgICBOcFBvb2xJZDogJ3UzMidcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgTm9taW5hdGlvblBvb2xzQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBiYWxhbmNlX3RvX3BvaW50czoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGVxdWl2YWxlbnQgcG9pbnRzIG9mIGBuZXdfZnVuZHNgIGZvciBhIGdpdmVuIHBvb2wuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Bvb2xJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05wUG9vbElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbmV3RnVuZHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBlbmRpbmdfcmV3YXJkczoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHBlbmRpbmcgcmV3YXJkcyBmb3IgdGhlIGdpdmVuIG1lbWJlci4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbWVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvaW50c190b19iYWxhbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgZXF1aXZhbGVudCBiYWxhbmNlIG9mIGBwb2ludHNgIGZvciBhIGdpdmVuIHBvb2wuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Bvb2xJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05wUG9vbElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncG9pbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0JhbGFuY2UnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBTdG9yYWdlS2luZDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBQRVJTSVNURU5UOiAxLFxuICAgICAgICAgICAgICAgIExPQ0FMOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBsb2NhbFN0b3JhZ2VHZXQ6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgb2ZmY2hhaW4gbG9jYWwgc3RvcmFnZSB1bmRlciBnaXZlbiBrZXkgYW5kIHByZWZpeCcsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2luZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLaW5kJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248Qnl0ZXM+J1xuICAgIH0sXG4gICAgbG9jYWxTdG9yYWdlU2V0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU2V0IG9mZmNoYWluIGxvY2FsIHN0b3JhZ2UgdW5kZXIgZ2l2ZW4ga2V5IGFuZCBwcmVmaXgnLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tpbmQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2luZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ051bGwnXG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIE9mZmNoYWluV29ya2VyQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBvZmZjaGFpbl93b3JrZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTdGFydHMgdGhlIG9mZi1jaGFpbiB0YXNrIGZvciBnaXZlbiBibG9jayBoZWFkZXIuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2hlYWRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIG9mZmNoYWluX3dvcmtlcjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyB0aGUgb2ZmLWNoYWluIHRhc2sgZm9yIGdpdmVuIGJsb2NrIGhlYWRlci4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgRGVmZXJyZWRPZmZlbmNlT2Y6ICcoVmVjPE9mZmVuY2VEZXRhaWxzPiwgVmVjPFBlcmJpbGw+LCBTZXNzaW9uSW5kZXgpJyxcbiAgICAgICAgS2luZDogJ1t1ODsgMTZdJyxcbiAgICAgICAgT2ZmZW5jZURldGFpbHM6IHtcbiAgICAgICAgICAgIG9mZmVuZGVyOiAnT2ZmZW5kZXInLFxuICAgICAgICAgICAgcmVwb3J0ZXJzOiAnVmVjPFJlcG9ydGVyPidcbiAgICAgICAgfSxcbiAgICAgICAgT2ZmZW5kZXI6ICdJZGVudGlmaWNhdGlvblR1cGxlJyxcbiAgICAgICAgT3BhcXVlVGltZVNsb3Q6ICdCeXRlcycsXG4gICAgICAgIFJlcG9ydElkT2Y6ICdIYXNoJyxcbiAgICAgICAgUmVwb3J0ZXI6ICdBY2NvdW50SWQnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge31cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3Blbi13ZWIzLXN0YWNrL29wZW4tcnVudGltZS1tb2R1bGUtbGlicmFyeS9ibG9iL2I1N2Y4OGIzOWNkNTQ3ZTJmYjUxNzI3ZDhiYjliY2M2NGZkZGY4YjUvb3JhY2xlL3JwYy9ydW50aW1lLWFwaS9zcmMvbGliLnJzI0wxMi1MMjFcbiAgICBPcmFjbGVBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGdldF9hbGxfdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIGFsbCB2YWx1ZXMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncHJvdmlkZXJJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIENvZGVjIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdvbid0IGFjdHVhbGx5IHdvcmsgYXMgZXhwZWN0ZWQgLSBzaW5jZSB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3R1YWwgUmF3IHNpemVzLCB3ZSBjYW5ub3RcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGl0IGluIHRoaXMgZm9ybWF0IChpdCB3b3VsZCBuZWVkIGFuIG92ZXJyaWRlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgc3BlY2lmaWMgQ29kZWMpLiBTbyByZXR1cm4gdGhlIFJhdyB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gdHlwZTogJ1ZlYzwoUmF3LCBPcHRpb248UmF3Pik+J1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0X3ZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIGEgc2luZ2xlIHZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Byb3ZpZGVySWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBDb2RlYyB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1JhdydcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIENvZGVjIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIE9wdGlvbjxDb2RlYz4gdHlwZVxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFJhdz4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHt9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW4td2ViMy1zdGFjay9vcGVuLXJ1bnRpbWUtbW9kdWxlLWxpYnJhcnkvYmxvYi9iNTdmODhiMzljZDU0N2UyZmI1MTcyN2Q4YmI5YmNjNjRmZGRmOGI1L3Rva2Vucy9ycGMvcnVudGltZS1hcGkvc3JjL2xpYi5ycyNMMTEtTDE4XG4gICAgVG9rZW5zQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBxdWVyeV9leGlzdGVudGlhbF9kZXBvc2l0OiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUXVlcnkgdGhlIGV4aXN0ZW50aWFsIGFtb3VudCBmb3IgYSBzcGVjaWZpYyBjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjdXJyZW5jeUlkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIEN1cnJlbmN5SWQsIGFzIHBlciB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBhcmUgdW5zdXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBzcGVjaWFsaXplZCBhbmQvb3IgZ2xvYmFsIHRvIHRoZSBjaGFpbiBvciBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIEJhbGFuY2UgLSBzaW5jZSB3ZSBkb24ndCB1bmRlcnN0YW5kIGVub3VnaCBhYm91dCB0aGUgd2F5XG4gICAgICAgICAgICAgICAgICAgIC8vIGluIHdoaWNoIHRoaXMgaXMgdXNlZCwgd2UgZGVmYXVsdCB0byB1MTI4IGhlcmUgKGl0IGNlcnRhaW5seSBjb3VsZFxuICAgICAgICAgICAgICAgICAgICAvLyBiZSBhIHNwZWNpYWxpemVkIHR5cGUgdGhhdCBkb2Vzbid0IG1hcCB0byB0aGUgb24tY2hhaW4gQmFsYW5jZSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3UxMjgnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgaHJtcFR5cGVzIGZyb20gJy4vaHJtcC5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmltcG9ydCBzbG90VHlwZXMgZnJvbSAnLi9zbG90cy5qcyc7XG5jb25zdCBwcm9wb3NlVHlwZXMgPSB7XG4gICAgUGFyYWNoYWluUHJvcG9zYWw6IHtcbiAgICAgICAgcHJvcG9zZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICBnZW5lc2lzSGVhZDogJ0hlYWREYXRhJyxcbiAgICAgICAgdmFsaWRhdG9yczogJ1ZlYzxWYWxpZGF0b3JJZD4nLFxuICAgICAgICBuYW1lOiAnQnl0ZXMnLFxuICAgICAgICBiYWxhbmNlOiAnQmFsYW5jZSdcbiAgICB9LFxuICAgIFJlZ2lzdGVyZWRQYXJhY2hhaW5JbmZvOiB7XG4gICAgICAgIHZhbGlkYXRvcnM6ICdWZWM8VmFsaWRhdG9ySWQ+JyxcbiAgICAgICAgcHJvcG9zZXI6ICdBY2NvdW50SWQnXG4gICAgfVxufTtcbmNvbnN0IGN1bXVsdXNUeXBlcyA9IHtcbiAgICBTZXJ2aWNlUXVhbGl0eToge1xuICAgICAgICBfZW51bTogWydPcmRlcmVkJywgJ0Zhc3QnXVxuICAgIH1cbn07XG5jb25zdCBkaXNwdXRlVHlwZXMgPSB7XG4gICAgRGlzcHV0ZUxvY2F0aW9uOiB7XG4gICAgICAgIF9lbnVtOiBbJ0xvY2FsJywgJ1JlbW90ZSddXG4gICAgfSxcbiAgICBEaXNwdXRlUmVzdWx0OiB7XG4gICAgICAgIF9lbnVtOiBbJ1ZhbGlkJywgJ0ludmFsaWQnXVxuICAgIH0sXG4gICAgRGlzcHV0ZVN0YXRlOiB7XG4gICAgICAgIHZhbGlkYXRvcnNGb3I6ICdCaXRWZWMnLFxuICAgICAgICB2YWxpZGF0b3JzQWdhaW5zdDogJ0JpdFZlYycsXG4gICAgICAgIHN0YXJ0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICBjb25jbHVkZWRBdDogJ09wdGlvbjxCbG9ja051bWJlcj4nXG4gICAgfSxcbiAgICBEaXNwdXRlU3RhdGVtZW50OiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBWYWxpZDogJ1ZhbGlkRGlzcHV0ZVN0YXRlbWVudEtpbmQnLFxuICAgICAgICAgICAgSW52YWxpZDogJ0ludmFsaWREaXNwdXRlU3RhdGVtZW50S2luZCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRGlzcHV0ZVN0YXRlbWVudFNldDoge1xuICAgICAgICBjYW5kaWRhdGVIYXNoOiAnQ2FuZGlkYXRlSGFzaCcsXG4gICAgICAgIHNlc3Npb246ICdTZXNzaW9uSW5kZXgnLFxuICAgICAgICBzdGF0ZW1lbnRzOiAnVmVjPChEaXNwdXRlU3RhdGVtZW50LCBQYXJhVmFsaWRhdG9ySW5kZXgsIFZhbGlkYXRvclNpZ25hdHVyZSk+J1xuICAgIH0sXG4gICAgRXhlY3V0b3JQYXJhbToge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgUGhhbnRvbTogJ051bGwnLCAvLyBpbmRleCBzdGFydHMgYXQgMS4uLiBlbXB0eSBzbG90IGF0IDBcbiAgICAgICAgICAgIE1heE1lbW9yeVBhZ2VzOiAndTMyJyxcbiAgICAgICAgICAgIFN0YWNrTG9naWNhbE1heDogJ3UzMicsXG4gICAgICAgICAgICBTdGFja05hdGl2ZU1heDogJ3UzMicsXG4gICAgICAgICAgICBQcmVjaGVja2luZ01heE1lbW9yeTogJ3U2NCcsXG4gICAgICAgICAgICBQdmZQcmVwVGltZW91dDogJyhQdmZQcmVwVGltZW91dEtpbmQsIHU2NCknLFxuICAgICAgICAgICAgUHZmRXhlY1RpbWVvdXQ6ICcoUHZmRXhlY1RpbWVvdXRLaW5kLCB1NjQpJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFeGVjdXRvclBhcmFtc0hhc2g6ICdIYXNoJyxcbiAgICBFeGVjdXRvclBhcmFtczogJ1ZlYzxFeGVjdXRvclBhcmFtPicsXG4gICAgRXhwbGljaXREaXNwdXRlU3RhdGVtZW50OiB7XG4gICAgICAgIHZhbGlkOiAnYm9vbCcsXG4gICAgICAgIGNhbmRpZGF0ZUhhc2g6ICdDYW5kaWRhdGVIYXNoJyxcbiAgICAgICAgc2Vzc2lvbjogJ1Nlc3Npb25JbmRleCdcbiAgICB9LFxuICAgIEludmFsaWREaXNwdXRlU3RhdGVtZW50S2luZDoge1xuICAgICAgICBfZW51bTogWydFeHBsaWNpdCddXG4gICAgfSxcbiAgICBNdWx0aURpc3B1dGVTdGF0ZW1lbnRTZXQ6ICdWZWM8RGlzcHV0ZVN0YXRlbWVudFNldD4nLFxuICAgIFB2ZkV4ZWNUaW1lb3V0S2luZDoge1xuICAgICAgICBfZW51bTogWydCYWNraW5nJywgJ0FwcHJvdmFsJ11cbiAgICB9LFxuICAgIFB2ZlByZXBUaW1lb3V0S2luZDoge1xuICAgICAgICBfZW51bTogWydQcmVjaGVjaycsICdMZW5pZW50J11cbiAgICB9LFxuICAgIFZhbGlkRGlzcHV0ZVN0YXRlbWVudEtpbmQ6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEV4cGxpY2l0OiAnTnVsbCcsXG4gICAgICAgICAgICBCYWNraW5nU2Vjb25kZWQ6ICdIYXNoJyxcbiAgICAgICAgICAgIEJhY2tpbmdWYWxpZDogJ0hhc2gnLFxuICAgICAgICAgICAgQXBwcm92YWxDaGVja2luZzogJ051bGwnXG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5jdW11bHVzVHlwZXMsXG4gICAgICAgIC4uLmRpc3B1dGVUeXBlcyxcbiAgICAgICAgLi4uaHJtcFR5cGVzLFxuICAgICAgICAuLi5wcm9wb3NlVHlwZXMsXG4gICAgICAgIC4uLnNsb3RUeXBlcyxcbiAgICAgICAgQWJyaWRnZWRDYW5kaWRhdGVSZWNlaXB0OiB7XG4gICAgICAgICAgICBwYXJhY2hhaW5JbmRleDogJ1BhcmFJZCcsXG4gICAgICAgICAgICByZWxheVBhcmVudDogJ0hhc2gnLFxuICAgICAgICAgICAgaGVhZERhdGE6ICdIZWFkRGF0YScsXG4gICAgICAgICAgICBjb2xsYXRvcjogJ0NvbGxhdG9ySWQnLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiAnQ29sbGF0b3JTaWduYXR1cmUnLFxuICAgICAgICAgICAgcG92QmxvY2tIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICBjb21taXRtZW50czogJ0NhbmRpZGF0ZUNvbW1pdG1lbnRzJ1xuICAgICAgICB9LFxuICAgICAgICBBYnJpZGdlZEhvc3RDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBtYXhDb2RlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtYXhIZWFkRGF0YVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4VXB3YXJkUXVldWVDb3VudDogJ3UzMicsXG4gICAgICAgICAgICBtYXhVcHdhcmRRdWV1ZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4VXB3YXJkTWVzc2FnZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4VXB3YXJkTWVzc2FnZU51bVBlckNhbmRpZGF0ZTogJ3UzMicsXG4gICAgICAgICAgICBocm1wTWF4TWVzc2FnZU51bVBlckNhbmRpZGF0ZTogJ3UzMicsXG4gICAgICAgICAgICB2YWxpZGF0aW9uVXBncmFkZUZyZXF1ZW5jeTogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHZhbGlkYXRpb25VcGdyYWRlRGVsYXk6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQWJyaWRnZWRIcm1wQ2hhbm5lbDoge1xuICAgICAgICAgICAgbWF4Q2FwYWNpdHk6ICd1MzInLFxuICAgICAgICAgICAgbWF4VG90YWxTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1heE1lc3NhZ2VTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1zZ0NvdW50OiAndTMyJyxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtcWNIZWFkOiAnT3B0aW9uPEhhc2g+J1xuICAgICAgICB9LFxuICAgICAgICBBcHByb3ZhbFZvdGluZ1BhcmFtczoge1xuICAgICAgICAgICAgbWF4QXBwcm92YWxDb2FsZXNjZUNvdW50OiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBBc3NpZ25tZW50SWQ6ICdBY2NvdW50SWQnLFxuICAgICAgICBBc3NpZ25tZW50S2luZDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBQYXJhY2hhaW46ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBQYXJhdGhyZWFkOiAnKENvbGxhdG9ySWQsIHUzMiknXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEFzeW5jQmFja2luZ1BhcmFtczoge1xuICAgICAgICAgICAgbWF4Q2FuZGlkYXRlRGVwdGg6ICd1MzInLFxuICAgICAgICAgICAgYWxsb3dlZEFuY2VzdHJ5TGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBBdHRlc3RlZENhbmRpZGF0ZToge1xuICAgICAgICAgICAgY2FuZGlkYXRlOiAnQWJyaWRnZWRDYW5kaWRhdGVSZWNlaXB0JyxcbiAgICAgICAgICAgIHZhbGlkaXR5Vm90ZXM6ICdWZWM8VmFsaWRpdHlBdHRlc3RhdGlvbj4nLFxuICAgICAgICAgICAgdmFsaWRhdG9ySW5kaWNlczogJ0JpdFZlYydcbiAgICAgICAgfSxcbiAgICAgICAgQXV0aG9yaXR5RGlzY292ZXJ5SWQ6ICdBY2NvdW50SWQnLFxuICAgICAgICBBdmFpbGFiaWxpdHlCaXRmaWVsZDogJ0JpdFZlYycsXG4gICAgICAgIEF2YWlsYWJpbGl0eUJpdGZpZWxkUmVjb3JkOiB7XG4gICAgICAgICAgICBiaXRmaWVsZDogJ0F2YWlsYWJpbGl0eUJpdGZpZWxkJyxcbiAgICAgICAgICAgIHN1Ym1pdHRlZFR0OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIEJhY2tlZENhbmRpZGF0ZToge1xuICAgICAgICAgICAgY2FuZGlkYXRlOiAnQ29tbWl0dGVkQ2FuZGlkYXRlUmVjZWlwdCcsXG4gICAgICAgICAgICB2YWxpZGl0eVZvdGVzOiAnVmVjPFZhbGlkaXR5QXR0ZXN0YXRpb24+JyxcbiAgICAgICAgICAgIHZhbGlkYXRvckluZGljZXM6ICdCaXRWZWMnXG4gICAgICAgIH0sXG4gICAgICAgIEJhY2tpbmdTdGF0ZToge1xuICAgICAgICAgICAgY29uc3RyYWludHM6ICdDb25zdHJhaW50cycsXG4gICAgICAgICAgICBwZW5kaW5nQXZhaWxhYmlsaXR5OiAnVmVjPENhbmRpZGF0ZVBlbmRpbmdBdmFpbGFiaWxpdHk+J1xuICAgICAgICB9LFxuICAgICAgICBCdWZmZXJlZFNlc3Npb25DaGFuZ2U6IHtcbiAgICAgICAgICAgIGFwcGx5QXQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICB2YWxpZGF0b3JzOiAnVmVjPFZhbGlkYXRvcklkPicsXG4gICAgICAgICAgICBxdWV1ZWQ6ICdWZWM8VmFsaWRhdG9ySWQ+JyxcbiAgICAgICAgICAgIHNlc3Npb25JbmRleDogJ1Nlc3Npb25JbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgQ2FuZGlkYXRlQ29tbWl0bWVudHM6IHtcbiAgICAgICAgICAgIHVwd2FyZE1lc3NhZ2VzOiAnVmVjPFVwd2FyZE1lc3NhZ2U+JyxcbiAgICAgICAgICAgIGhvcml6b250YWxNZXNzYWdlczogJ1ZlYzxPdXRib3VuZEhybXBNZXNzYWdlPicsXG4gICAgICAgICAgICBuZXdWYWxpZGF0aW9uQ29kZTogJ09wdGlvbjxWYWxpZGF0aW9uQ29kZT4nLFxuICAgICAgICAgICAgaGVhZERhdGE6ICdIZWFkRGF0YScsXG4gICAgICAgICAgICBwcm9jZXNzZWREb3dud2FyZE1lc3NhZ2VzOiAndTMyJyxcbiAgICAgICAgICAgIGhybXBXYXRlcm1hcms6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQ2FuZGlkYXRlRGVzY3JpcHRvcjoge1xuICAgICAgICAgICAgcGFyYUlkOiAnUGFyYUlkJyxcbiAgICAgICAgICAgIHJlbGF5UGFyZW50OiAnUmVsYXlDaGFpbkhhc2gnLFxuICAgICAgICAgICAgY29sbGF0b3JJZDogJ0NvbGxhdG9ySWQnLFxuICAgICAgICAgICAgcGVyc2lzdGVkVmFsaWRhdGlvbkRhdGFIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICBwb3ZIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICBlcmFzdXJlUm9vdDogJ0hhc2gnLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiAnQ29sbGF0b3JTaWduYXR1cmUnLFxuICAgICAgICAgICAgcGFyYUhlYWQ6ICdIYXNoJyxcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db2RlSGFzaDogJ1ZhbGlkYXRpb25Db2RlSGFzaCdcbiAgICAgICAgfSxcbiAgICAgICAgQ2FuZGlkYXRlRXZlbnQ6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgQ2FuZGlkYXRlQmFja2VkOiAnKENhbmRpZGF0ZVJlY2VpcHQsIEhlYWREYXRhLCBDb3JlSW5kZXgsIEdyb3VwSW5kZXgpJyxcbiAgICAgICAgICAgICAgICBDYW5kaWRhdGVJbmNsdWRlZDogJyhDYW5kaWRhdGVSZWNlaXB0LCBIZWFkRGF0YSwgQ29yZUluZGV4LCBHcm91cEluZGV4KScsXG4gICAgICAgICAgICAgICAgQ2FuZGlkYXRlVGltZWRPdXQ6ICcoQ2FuZGlkYXRlUmVjZWlwdCwgSGVhZERhdGEsIENvcmVJbmRleCknXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENhbmRpZGF0ZUhhc2g6ICdIYXNoJyxcbiAgICAgICAgQ2FuZGlkYXRlSW5mbzoge1xuICAgICAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBDYW5kaWRhdGVQZW5kaW5nQXZhaWxhYmlsaXR5OiB7XG4gICAgICAgICAgICBjb3JlOiAnQ29yZUluZGV4JyxcbiAgICAgICAgICAgIGhhc2g6ICdDYW5kaWRhdGVIYXNoJyxcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdDYW5kaWRhdGVEZXNjcmlwdG9yJyxcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVZvdGVzOiAnQml0VmVjJyxcbiAgICAgICAgICAgIGJhY2tlcnM6ICdCaXRWZWMnLFxuICAgICAgICAgICAgcmVsYXlQYXJlbnROdW1iZXI6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBiYWNrZWRJbk51bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGJhY2tpbmdHcm91cDogJ0dyb3VwSW5kZXgnXG4gICAgICAgIH0sXG4gICAgICAgIENhbmRpZGF0ZVJlY2VpcHQ6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdDYW5kaWRhdGVEZXNjcmlwdG9yJyxcbiAgICAgICAgICAgIGNvbW1pdG1lbnRzSGFzaDogJ0hhc2gnXG4gICAgICAgIH0sXG4gICAgICAgIEdsb2JhbFZhbGlkYXRpb25EYXRhOiB7XG4gICAgICAgICAgICBtYXhDb2RlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtYXhIZWFkRGF0YVNpemU6ICd1MzInLFxuICAgICAgICAgICAgYmxvY2tOdW1iZXI6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQ29sbGF0b3JJZDogJ0gyNTYnLFxuICAgICAgICBDb2xsYXRvclNpZ25hdHVyZTogJ1NpZ25hdHVyZScsXG4gICAgICAgIENvbW1pdHRlZENhbmRpZGF0ZVJlY2VpcHQ6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdDYW5kaWRhdGVEZXNjcmlwdG9yJyxcbiAgICAgICAgICAgIGNvbW1pdG1lbnRzOiAnQ2FuZGlkYXRlQ29tbWl0bWVudHMnXG4gICAgICAgIH0sXG4gICAgICAgIENvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICBtaW5SZWxheVBhcmVudE51bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIG1heFBvdlNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4Q29kZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgdW1wUmVtYWluaW5nOiAndTMyJyxcbiAgICAgICAgICAgIHVtcFJlbWFpbmluZ0J5dGVzOiAndTMyJyxcbiAgICAgICAgICAgIG1heFVtcE51bVBlckNhbmRpZGF0ZTogJ3UzMicsXG4gICAgICAgICAgICBkbXBSZW1haW5pbmdNZXNzYWdlczogJ1ZlYzxCbG9ja051bWJlcj4nLFxuICAgICAgICAgICAgaHJtcEluYm91bmQ6ICdJbmJvdW5kSHJtcExpbWl0YXRpb25zJyxcbiAgICAgICAgICAgIGhybXBDaGFubmVsc091dDogJ0hhc2hNYXA8UGFyYUlkLCBPdXRib3VuZEhybXBDaGFubmVsTGltaXRhdGlvbnM+JyxcbiAgICAgICAgICAgIG1heEhybXBOdW1QZXJDYW5kaWRhdGU6ICd1MzInLFxuICAgICAgICAgICAgcmVxdWlyZWRQYXJlbnQ6ICdIZWFkRGF0YScsXG4gICAgICAgICAgICB2YWxpZGF0aW9uQ29kZUhhc2g6ICdWYWxpZGF0aW9uQ29kZUhhc2gnLFxuICAgICAgICAgICAgdXBncmFkZVJlc3RyaWN0aW9uOiAnT3B0aW9uPFVwZ3JhZGVSZXN0cmljdGlvbj4nLFxuICAgICAgICAgICAgZnV0dXJlVmFsaWRhdGlvbkNvZGU6ICdPcHRpb248KEJsb2NrTnVtYmVyLCBWYWxpZGF0aW9uQ29kZUhhc2gpPidcbiAgICAgICAgfSxcbiAgICAgICAgQ29yZUFzc2lnbm1lbnQ6IHtcbiAgICAgICAgICAgIGNvcmU6ICdDb3JlSW5kZXgnLFxuICAgICAgICAgICAgcGFyYUlkOiAnUGFyYUlkJyxcbiAgICAgICAgICAgIGtpbmQ6ICdBc3NpZ25tZW50S2luZCcsXG4gICAgICAgICAgICBncm91cElkeDogJ0dyb3VwSW5kZXgnXG4gICAgICAgIH0sXG4gICAgICAgIENvcmVJbmRleDogJ3UzMicsXG4gICAgICAgIENvcmVPY2N1cGllZDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBQYXJhdGhyZWFkOiAnUGFyYXRocmVhZEVudHJ5JyxcbiAgICAgICAgICAgICAgICBQYXJhY2hhaW46ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDb3JlU3RhdGU6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgT2NjdXBpZWQ6ICdPY2N1cGllZENvcmUnLFxuICAgICAgICAgICAgICAgIFNjaGVkdWxlZDogJ1NjaGVkdWxlZENvcmUnLFxuICAgICAgICAgICAgICAgIEZyZWU6ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBEaXNwdXRlUHJvb2Y6IHtcbiAgICAgICAgICAgIHRpbWVTbG90OiAnRGlzcHV0ZXNUaW1lU2xvdCcsXG4gICAgICAgICAgICBraW5kOiAnU2xhc2hpbmdPZmZlbmNlS2luZCcsXG4gICAgICAgICAgICB2YWxpZGF0b3JJbmRleDogJ1ZhbGlkYXRvckluZGV4JyxcbiAgICAgICAgICAgIHZhbGlkYXRvcklkOiAnVmFsaWRhdG9ySWQnXG4gICAgICAgIH0sXG4gICAgICAgIERpc3B1dGVzVGltZVNsb3Q6IHtcbiAgICAgICAgICAgIHNlc3Npb25JbmRleDogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICBjYW5kaWRhdGVIYXNoOiAnQ2FuZGlkYXRlSGFzaCdcbiAgICAgICAgfSxcbiAgICAgICAgRG91YmxlVm90ZVJlcG9ydDoge1xuICAgICAgICAgICAgaWRlbnRpdHk6ICdWYWxpZGF0b3JJZCcsXG4gICAgICAgICAgICBmaXJzdDogJyhTdGF0ZW1lbnQsIFZhbGlkYXRvclNpZ25hdHVyZSknLFxuICAgICAgICAgICAgc2Vjb25kOiAnKFN0YXRlbWVudCwgVmFsaWRhdG9yU2lnbmF0dXJlKScsXG4gICAgICAgICAgICBwcm9vZjogJ01lbWJlcnNoaXBQcm9vZicsXG4gICAgICAgICAgICBzaWduaW5nQ29udGV4dDogJ1NpZ25pbmdDb250ZXh0J1xuICAgICAgICB9LFxuICAgICAgICBEb3dud2FyZE1lc3NhZ2U6ICdCeXRlcycsXG4gICAgICAgIEdyb3VwSW5kZXg6ICd1MzInLFxuICAgICAgICBHcm91cFJvdGF0aW9uSW5mbzoge1xuICAgICAgICAgICAgc2Vzc2lvblN0YXJ0QmxvY2s6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBncm91cFJvdGF0aW9uRnJlcXVlbmN5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgbm93OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIEdsb2JhbFZhbGlkYXRpb25TY2hlZHVsZToge1xuICAgICAgICAgICAgbWF4Q29kZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4SGVhZERhdGFTaXplOiAndTMyJyxcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyOiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIEhlYWREYXRhOiAnQnl0ZXMnLFxuICAgICAgICBIb3N0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgbWF4Q29kZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4SGVhZERhdGFTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1heFVwd2FyZFF1ZXVlQ291bnQ6ICd1MzInLFxuICAgICAgICAgICAgbWF4VXB3YXJkUXVldWVTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1heFVwd2FyZE1lc3NhZ2VTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1heFVwd2FyZE1lc3NhZ2VOdW1QZXJDYW5kaWRhdGU6ICd1MzInLFxuICAgICAgICAgICAgaHJtcE1heE1lc3NhZ2VOdW1QZXJDYW5kaWRhdGU6ICd1MzInLFxuICAgICAgICAgICAgdmFsaWRhdGlvblVwZ3JhZGVGcmVxdWVuY3k6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICB2YWxpZGF0aW9uVXBncmFkZURlbGF5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgbWF4UG92U2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtYXhEb3dud2FyZE1lc3NhZ2VTaXplOiAndTMyJyxcbiAgICAgICAgICAgIHByZWZlcnJlZERpc3BhdGNoYWJsZVVwd2FyZE1lc3NhZ2VzU3RlcFdlaWdodDogJ1dlaWdodCcsXG4gICAgICAgICAgICBocm1wTWF4UGFyYWNoYWluT3V0Ym91bmRDaGFubmVsczogJ3UzMicsXG4gICAgICAgICAgICBocm1wTWF4UGFyYXRocmVhZE91dGJvdW5kQ2hhbm5lbHM6ICd1MzInLFxuICAgICAgICAgICAgaHJtcE9wZW5SZXF1ZXN0VHRsOiAndTMyJyxcbiAgICAgICAgICAgIGhybXBTZW5kZXJEZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBocm1wUmVjaXBpZW50RGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgaHJtcENoYW5uZWxNYXhDYXBhY2l0eTogJ3UzMicsXG4gICAgICAgICAgICBocm1wQ2hhbm5lbE1heFRvdGFsU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBocm1wTWF4UGFyYWNoYWluSW5ib3VuZENoYW5uZWxzOiAndTMyJyxcbiAgICAgICAgICAgIGhybXBNYXhQYXJhdGhyZWFkSW5ib3VuZENoYW5uZWxzOiAndTMyJyxcbiAgICAgICAgICAgIGhybXBDaGFubmVsTWF4TWVzc2FnZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgY29kZVJldGVudGlvblBlcmlvZDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHBhcmF0aHJlYWRDb3JlczogJ3UzMicsXG4gICAgICAgICAgICBwYXJhdGhyZWFkUmV0cmllczogJ3UzMicsXG4gICAgICAgICAgICBncm91cFJvdGF0aW9uRnJlcXVlbmN5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgY2hhaW5BdmFpbGFiaWxpdHlQZXJpb2Q6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICB0aHJlYWRBdmFpbGFiaWxpdHlQZXJpb2Q6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBzY2hlZHVsaW5nTG9va2FoZWFkOiAndTMyJyxcbiAgICAgICAgICAgIG1heFZhbGlkYXRvcnNQZXJDb3JlOiAnT3B0aW9uPHUzMj4nLFxuICAgICAgICAgICAgbWF4VmFsaWRhdG9yczogJ09wdGlvbjx1MzI+JyxcbiAgICAgICAgICAgIGRpc3B1dGVQZXJpb2Q6ICdTZXNzaW9uSW5kZXgnLFxuICAgICAgICAgICAgZGlzcHV0ZVBvc3RDb25jbHVzaW9uQWNjZXB0YW5jZVBlcmlvZDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGRpc3B1dGVNYXhTcGFtU2xvdHM6ICd1MzInLFxuICAgICAgICAgICAgZGlzcHV0ZUNvbmNsdXNpb25CeVRpbWVPdXRQZXJpb2Q6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBub1Nob3dTbG90czogJ3UzMicsXG4gICAgICAgICAgICBuRGVsYXlUcmFuY2hlczogJ3UzMicsXG4gICAgICAgICAgICB6ZXJvdGhEZWxheVRyYW5jaGVXaWR0aDogJ3UzMicsXG4gICAgICAgICAgICBuZWVkZWRBcHByb3ZhbHM6ICd1MzInLFxuICAgICAgICAgICAgcmVsYXlWcmZNb2R1bG9TYW1wbGVzOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBJbmJvdW5kRG93bndhcmRNZXNzYWdlOiB7XG4gICAgICAgICAgICBwdWJTZW50QXQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBwdWJNc2c6ICdEb3dud2FyZE1lc3NhZ2UnXG4gICAgICAgIH0sXG4gICAgICAgIEluYm91bmRIcm1wTWVzc2FnZToge1xuICAgICAgICAgICAgc2VudEF0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJ1xuICAgICAgICB9LFxuICAgICAgICBJbmJvdW5kSHJtcExpbWl0YXRpb25zOiB7XG4gICAgICAgICAgICB2YWxpZFdhdGVybWFya3M6ICdWZWM8QmxvY2tOdW1iZXI+J1xuICAgICAgICB9LFxuICAgICAgICBJbmJvdW5kSHJtcE1lc3NhZ2VzOiAnVmVjPEluYm91bmRIcm1wTWVzc2FnZT4nLFxuICAgICAgICBMb2NhbFZhbGlkYXRpb25EYXRhOiB7XG4gICAgICAgICAgICBwYXJlbnRIZWFkOiAnSGVhZERhdGEnLFxuICAgICAgICAgICAgYmFsYW5jZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgY29kZVVwZ3JhZGVBbGxvd2VkOiAnT3B0aW9uPEJsb2NrTnVtYmVyPidcbiAgICAgICAgfSxcbiAgICAgICAgTWVzc2FnZUluZ2VzdGlvblR5cGU6IHtcbiAgICAgICAgICAgIGRvd253YXJkTWVzc2FnZXM6ICdWZWM8SW5ib3VuZERvd253YXJkTWVzc2FnZT4nLFxuICAgICAgICAgICAgaG9yaXpvbnRhbE1lc3NhZ2VzOiAnQlRyZWVNYXA8UGFyYUlkLCBJbmJvdW5kSHJtcE1lc3NhZ2VzPidcbiAgICAgICAgfSxcbiAgICAgICAgTWVzc2FnZVF1ZXVlQ2hhaW46ICdSZWxheUNoYWluSGFzaCcsXG4gICAgICAgIE5vZGVGZWF0dXJlczogJ0JpdFZlYycsXG4gICAgICAgIE9jY3VwaWVkQ29yZToge1xuICAgICAgICAgICAgbmV4dFVwT25BdmFpbGFibGU6ICdPcHRpb248U2NoZWR1bGVkQ29yZT4nLFxuICAgICAgICAgICAgb2NjdXBpZWRTaW5jZTogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHRpbWVPdXRBdDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIG5leHRVcE9uVGltZU91dDogJ09wdGlvbjxTY2hlZHVsZWRDb3JlPicsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHk6ICdCaXRWZWMnLFxuICAgICAgICAgICAgZ3JvdXBSZXNwb25zaWJsZTogJ0dyb3VwSW5kZXgnLFxuICAgICAgICAgICAgY2FuZGlkYXRlSGFzaDogJ0NhbmRpZGF0ZUhhc2gnLFxuICAgICAgICAgICAgY2FuZGlkYXRlRGVzY3JpcHRvcjogJ0NhbmRpZGF0ZURlc2NyaXB0b3InXG4gICAgICAgIH0sXG4gICAgICAgIE9jY3VwaWVkQ29yZUFzc3VtcHRpb246IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0luY2x1ZGVkLCcsICdUaW1lZE91dCcsICdGcmVlJ11cbiAgICAgICAgfSxcbiAgICAgICAgT3V0Ym91bmRIcm1wQ2hhbm5lbExpbWl0YXRpb25zOiB7XG4gICAgICAgICAgICBieXRlc1JlbWFpbmluZzogJ3UzMicsXG4gICAgICAgICAgICBtZXNzYWdlc1JlbWFpbmluZzogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgT3V0Ym91bmRIcm1wTWVzc2FnZToge1xuICAgICAgICAgICAgcmVjaXBpZW50OiAndTMyJyxcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgUGVuZGluZ1NsYXNoZXM6IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIHNsYXNoS2V5czogJ2tleXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2xhc2hLZXlzOiAnQlRyZWVNYXA8VmFsaWRhdG9ySW5kZXgsIFZhbGlkYXRvcklkPicsXG4gICAgICAgICAgICBraW5kOiAnU2xhc2hpbmdPZmZlbmNlS2luZCdcbiAgICAgICAgfSxcbiAgICAgICAgUGFyYWNoYWluRGlzcGF0Y2hPcmlnaW46IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1NpZ25lZCcsICdQYXJhY2hhaW4nLCAnUm9vdCddXG4gICAgICAgIH0sXG4gICAgICAgIFBhcmFjaGFpbkluaGVyZW50RGF0YToge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkRhdGE6ICdQZXJzaXN0ZWRWYWxpZGF0aW9uRGF0YScsXG4gICAgICAgICAgICByZWxheUNoYWluU3RhdGU6ICdTdG9yYWdlUHJvb2YnLFxuICAgICAgICAgICAgZG93bndhcmRNZXNzYWdlczogJ1ZlYzxJbmJvdW5kRG93bndhcmRNZXNzYWdlPicsXG4gICAgICAgICAgICBob3Jpem9udGFsTWVzc2FnZXM6ICdCVHJlZU1hcDxQYXJhSWQsIFZlY0luYm91bmRIcm1wTWVzc2FnZT4nXG4gICAgICAgIH0sXG4gICAgICAgIFBhcmFjaGFpbnNJbmhlcmVudERhdGE6IHtcbiAgICAgICAgICAgIGJpdGZpZWxkczogJ1NpZ25lZEF2YWlsYWJpbGl0eUJpdGZpZWxkcycsXG4gICAgICAgICAgICBiYWNrZWRDYW5kaWRhdGVzOiAnVmVjPEJhY2tlZENhbmRpZGF0ZT4nLFxuICAgICAgICAgICAgZGlzcHV0ZXM6ICdNdWx0aURpc3B1dGVTdGF0ZW1lbnRTZXQnLFxuICAgICAgICAgICAgcGFyZW50SGVhZGVyOiAnSGVhZGVyJ1xuICAgICAgICB9LFxuICAgICAgICBQYXJhR2VuZXNpc0FyZ3M6IHtcbiAgICAgICAgICAgIGdlbmVzaXNIZWFkOiAnQnl0ZXMnLFxuICAgICAgICAgICAgdmFsaWRhdGlvbkNvZGU6ICdCeXRlcycsXG4gICAgICAgICAgICBwYXJhY2hhaW46ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBQYXJhSWQ6ICd1MzInLFxuICAgICAgICBQYXJhSW5mbzoge1xuICAgICAgICAgICAgbWFuYWdlcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBsb2NrZWQ6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBQYXJhTGlmZWN5Y2xlOiB7XG4gICAgICAgICAgICBfZW51bTogWydPbmJvYXJkaW5nJywgJ1BhcmF0aHJlYWQnLCAnUGFyYWNoYWluJywgJ1VwZ3JhZGluZ1RvUGFyYWNoYWluJywgJ0Rvd25ncmFkaW5nVG9QYXJhdGhyZWFkJywgJ091dGdvaW5nUGFyYXRocmVhZCcsICdPdXRnb2luZ1BhcmFjaGFpbiddXG4gICAgICAgIH0sXG4gICAgICAgIFBhcmFQYXN0Q29kZU1ldGE6IHtcbiAgICAgICAgICAgIHVwZ3JhZGVUaW1lczogJ1ZlYzxSZXBsYWNlbWVudFRpbWVzPicsXG4gICAgICAgICAgICBsYXN0UHJ1bmVkOiAnT3B0aW9uPEJsb2NrTnVtYmVyPidcbiAgICAgICAgfSxcbiAgICAgICAgUGFyYVNjaGVkdWxpbmc6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0Fsd2F5cycsICdEeW5hbWljJ11cbiAgICAgICAgfSxcbiAgICAgICAgUGFyYXRocmVhZENsYWltOiAnKFBhcmFJZCwgQ29sbGF0b3JJZCknLFxuICAgICAgICBQYXJhdGhyZWFkQ2xhaW1RdWV1ZToge1xuICAgICAgICAgICAgcXVldWU6ICdWZWM8UXVldWVkUGFyYXRocmVhZD4nLFxuICAgICAgICAgICAgbmV4dENvcmVPZmZzZXQ6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFBhcmF0aHJlYWRFbnRyeToge1xuICAgICAgICAgICAgY2xhaW06ICdQYXJhdGhyZWFkQ2xhaW0nLFxuICAgICAgICAgICAgcmV0cmllczogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgUGFyYVZhbGlkYXRvckluZGV4OiAndTMyJyxcbiAgICAgICAgUGVyc2lzdGVkVmFsaWRhdGlvbkRhdGE6IHtcbiAgICAgICAgICAgIHBhcmVudEhlYWQ6ICdIZWFkRGF0YScsXG4gICAgICAgICAgICByZWxheVBhcmVudE51bWJlcjogJ1JlbGF5Q2hhaW5CbG9ja051bWJlcicsXG4gICAgICAgICAgICByZWxheVBhcmVudFN0b3JhZ2VSb290OiAnSGFzaCcsXG4gICAgICAgICAgICBtYXhQb3ZTaXplOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBQdmZDaGVja1N0YXRlbWVudDoge1xuICAgICAgICAgICAgYWNjZXB0OiAnYm9vbCcsXG4gICAgICAgICAgICBzdWJqZWN0OiAnVmFsaWRhdGlvbkNvZGVIYXNoJyxcbiAgICAgICAgICAgIHNlc3Npb25JbmRleDogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICB2YWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgUXVldWVkUGFyYXRocmVhZDoge1xuICAgICAgICAgICAgY2xhaW06ICdQYXJhdGhyZWFkRW50cnknLFxuICAgICAgICAgICAgY29yZU9mZnNldDogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgUmVsYXlCbG9ja051bWJlcjogJ3UzMicsXG4gICAgICAgIFJlbGF5Q2hhaW5CbG9ja051bWJlcjogJ1JlbGF5QmxvY2tOdW1iZXInLFxuICAgICAgICBSZWxheUhhc2g6ICdIYXNoJyxcbiAgICAgICAgUmVsYXlDaGFpbkhhc2g6ICdSZWxheUhhc2gnLFxuICAgICAgICBSZW1hcms6ICdbdTg7IDMyXScsXG4gICAgICAgIFJlcGxhY2VtZW50VGltZXM6IHtcbiAgICAgICAgICAgIGV4cGVjdGVkQXQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBhY3RpdmF0ZWRBdDogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBSZXRyaWFibGU6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgTmV2ZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBXaXRoUmV0cmllczogJ3UzMidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2NoZWR1bGVkQ29yZToge1xuICAgICAgICAgICAgcGFyYUlkOiAnUGFyYUlkJyxcbiAgICAgICAgICAgIGNvbGxhdG9yOiAnT3B0aW9uPENvbGxhdG9ySWQ+J1xuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsaW5nOiB7XG4gICAgICAgICAgICBfZW51bTogWydBbHdheXMnLCAnRHluYW1pYyddXG4gICAgICAgIH0sXG4gICAgICAgIFNjcmFwZWRPbkNoYWluVm90ZXM6IHtcbiAgICAgICAgICAgIHNlc3Npb246ICdTZXNzaW9uSW5kZXgnLFxuICAgICAgICAgICAgYmFja2luZ1ZhbGlkYXRvcnNQZXJDYW5kaWRhdGU6ICdWZWM8KENhbmRpZGF0ZVJlY2VpcHQsIFZlYzwoUGFyYVZhbGlkYXRvckluZGV4LCBWYWxpZGl0eUF0dGVzdGF0aW9uKT4pPicsXG4gICAgICAgICAgICBkaXNwdXRlczogJ011bHRpRGlzcHV0ZVN0YXRlbWVudFNldCdcbiAgICAgICAgfSxcbiAgICAgICAgU2Vzc2lvbkluZm86IHtcbiAgICAgICAgICAgIGFjdGl2ZVZhbGlkYXRvckluZGljZXM6ICdWZWM8UGFyYVZhbGlkYXRvckluZGV4PicsXG4gICAgICAgICAgICByYW5kb21TZWVkOiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgZGlzcHV0ZVBlcmlvZDogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICB2YWxpZGF0b3JzOiAnVmVjPFZhbGlkYXRvcklkPicsXG4gICAgICAgICAgICBkaXNjb3ZlcnlLZXlzOiAnVmVjPEF1dGhvcml0eURpc2NvdmVyeUlkPicsXG4gICAgICAgICAgICBhc3NpZ25tZW50S2V5czogJ1ZlYzxBc3NpZ25tZW50SWQ+JyxcbiAgICAgICAgICAgIHZhbGlkYXRvckdyb3VwczogJ1ZlYzxWZWM8VmFsaWRhdG9ySW5kZXg+PicsXG4gICAgICAgICAgICBuQ29yZXM6ICd1MzInLFxuICAgICAgICAgICAgemVyb3RoRGVsYXlUcmFuY2hlV2lkdGg6ICd1MzInLFxuICAgICAgICAgICAgcmVsYXlWcmZNb2R1bG9TYW1wbGVzOiAndTMyJyxcbiAgICAgICAgICAgIG5EZWxheVRyYW5jaGVzOiAndTMyJyxcbiAgICAgICAgICAgIG5vU2hvd1Nsb3RzOiAndTMyJyxcbiAgICAgICAgICAgIG5lZWRlZEFwcHJvdmFsczogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgT2xkVjFTZXNzaW9uSW5mbzoge1xuICAgICAgICAgICAgdmFsaWRhdG9yczogJ1ZlYzxWYWxpZGF0b3JJZD4nLFxuICAgICAgICAgICAgZGlzY292ZXJ5S2V5czogJ1ZlYzxBdXRob3JpdHlEaXNjb3ZlcnlJZD4nLFxuICAgICAgICAgICAgYXNzaWdubWVudEtleXM6ICdWZWM8QXNzaWdubWVudElkPicsXG4gICAgICAgICAgICB2YWxpZGF0b3JHcm91cHM6ICdWZWM8VmVjPFBhcmFWYWxpZGF0b3JJbmRleD4+JyxcbiAgICAgICAgICAgIG5Db3JlczogJ3UzMicsXG4gICAgICAgICAgICB6ZXJvdGhEZWxheVRyYW5jaGVXaWR0aDogJ3UzMicsXG4gICAgICAgICAgICByZWxheVZyZk1vZHVsb1NhbXBsZXM6ICd1MzInLFxuICAgICAgICAgICAgbkRlbGF5VHJhbmNoZXM6ICd1MzInLFxuICAgICAgICAgICAgbm9TaG93U2xvdHM6ICd1MzInLFxuICAgICAgICAgICAgbmVlZGVkQXBwcm92YWxzOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBTZXNzaW9uSW5mb1ZhbGlkYXRvckdyb3VwOiAnVmVjPFBhcmFWYWxpZGF0b3JJbmRleD4nLFxuICAgICAgICBTaWduZWRBdmFpbGFiaWxpdHlCaXRmaWVsZDoge1xuICAgICAgICAgICAgcGF5bG9hZDogJ0JpdFZlYycsXG4gICAgICAgICAgICB2YWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCcsXG4gICAgICAgICAgICBzaWduYXR1cmU6ICdWYWxpZGF0b3JTaWduYXR1cmUnXG4gICAgICAgIH0sXG4gICAgICAgIFNpZ25lZEF2YWlsYWJpbGl0eUJpdGZpZWxkczogJ1ZlYzxTaWduZWRBdmFpbGFiaWxpdHlCaXRmaWVsZD4nLFxuICAgICAgICBTaWduaW5nQ29udGV4dDoge1xuICAgICAgICAgICAgc2Vzc2lvbkluZGV4OiAnU2Vzc2lvbkluZGV4JyxcbiAgICAgICAgICAgIHBhcmVudEhhc2g6ICdIYXNoJ1xuICAgICAgICB9LFxuICAgICAgICBTbGFzaGluZ09mZmVuY2VLaW5kOiB7XG4gICAgICAgICAgICBfZW51bTogWydGb3JJbnZhbGlkJywgJ0FnYWluc3RWYWxpZCddXG4gICAgICAgIH0sXG4gICAgICAgIFN0YXRlbWVudDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBOZXZlcjogJ051bGwnLCAvLyBzdGFydHMgYXQgMVxuICAgICAgICAgICAgICAgIENhbmRpZGF0ZTogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIFZhbGlkOiAnSGFzaCcsXG4gICAgICAgICAgICAgICAgSW52YWxpZDogJ0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFRyYW5zaWVudFZhbGlkYXRpb25EYXRhOiB7XG4gICAgICAgICAgICBtYXhDb2RlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtYXhIZWFkRGF0YVNpemU6ICd1MzInLFxuICAgICAgICAgICAgYmFsYW5jZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgY29kZVVwZ3JhZGVBbGxvd2VkOiAnT3B0aW9uPEJsb2NrTnVtYmVyPicsXG4gICAgICAgICAgICBkbXFMZW5ndGg6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFVwZ3JhZGVHb0FoZWFkOiB7XG4gICAgICAgICAgICBfZW51bTogWydBYm9ydCcsICdHb0FoZWFkJ11cbiAgICAgICAgfSxcbiAgICAgICAgVXBncmFkZVJlc3RyaWN0aW9uOiB7XG4gICAgICAgICAgICBfZW51bTogWydQcmVzZW50J11cbiAgICAgICAgfSxcbiAgICAgICAgVXB3YXJkTWVzc2FnZTogJ0J5dGVzJyxcbiAgICAgICAgVmFsaWRhdGlvbkZ1bmN0aW9uUGFyYW1zOiB7XG4gICAgICAgICAgICBtYXhDb2RlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICByZWxheUNoYWluSGVpZ2h0OiAnUmVsYXlDaGFpbkJsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGNvZGVVcGdyYWRlQWxsb3dlZDogJ09wdGlvbjxSZWxheUNoYWluQmxvY2tOdW1iZXI+J1xuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0aW9uQ29kZTogJ0J5dGVzJyxcbiAgICAgICAgVmFsaWRhdGlvbkNvZGVIYXNoOiAnSGFzaCcsXG4gICAgICAgIFZhbGlkYXRpb25EYXRhOiB7XG4gICAgICAgICAgICBwZXJzaXN0ZWQ6ICdQZXJzaXN0ZWRWYWxpZGF0aW9uRGF0YScsXG4gICAgICAgICAgICB0cmFuc2llbnQ6ICdUcmFuc2llbnRWYWxpZGF0aW9uRGF0YSdcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdGlvbkRhdGFUeXBlOiB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRGF0YTogJ1ZhbGlkYXRpb25EYXRhJyxcbiAgICAgICAgICAgIHJlbGF5Q2hhaW5TdGF0ZTogJ1ZlYzxCeXRlcz4nXG4gICAgICAgIH0sXG4gICAgICAgIFZhbGlkYXRvclNpZ25hdHVyZTogJ1NpZ25hdHVyZScsXG4gICAgICAgIFZhbGlkaXR5QXR0ZXN0YXRpb246IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgTmV2ZXI6ICdOdWxsJywgLy8gc3RhcnRzIGF0IDFcbiAgICAgICAgICAgICAgICBJbXBsaWNpdDogJ1ZhbGlkYXRvclNpZ25hdHVyZScsXG4gICAgICAgICAgICAgICAgRXhwbGljaXQ6ICdWYWxpZGF0b3JTaWduYXR1cmUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIE1lc3NhZ2luZ1N0YXRlU25hcHNob3Q6IHtcbiAgICAgICAgICAgIHJlbGF5RGlzcGF0Y2hRdWV1ZVNpemU6ICcodTMyLCB1MzIpJyxcbiAgICAgICAgICAgIGVncmVzc0NoYW5uZWxzOiAnVmVjPE1lc3NhZ2luZ1N0YXRlU25hcHNob3RFZ3Jlc3NFbnRyeT4nXG4gICAgICAgIH0sXG4gICAgICAgIE1lc3NhZ2luZ1N0YXRlU25hcHNob3RFZ3Jlc3NFbnRyeTogJyhQYXJhSWQsIEFicmlkZ2VkSHJtcENoYW5uZWwpJyxcbiAgICAgICAgU3lzdGVtSW5oZXJlbnREYXRhOiAnUGFyYWNoYWluSW5oZXJlbnREYXRhJyxcbiAgICAgICAgVmVjSW5ib3VuZEhybXBNZXNzYWdlOiAnVmVjPEluYm91bmRIcm1wTWVzc2FnZT4nXG4gICAgfVxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIHNvcnQta2V5cyAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIEhybXBDaGFubmVsOiB7XG4gICAgICAgIG1heENhcGFjaXR5OiAndTMyJyxcbiAgICAgICAgbWF4VG90YWxTaXplOiAndTMyJyxcbiAgICAgICAgbWF4TWVzc2FnZVNpemU6ICd1MzInLFxuICAgICAgICBtc2dDb3VudDogJ3UzMicsXG4gICAgICAgIHRvdGFsU2l6ZTogJ3UzMicsXG4gICAgICAgIG1xY0hlYWQ6ICdPcHRpb248SGFzaD4nLFxuICAgICAgICBzZW5kZXJEZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgIHJlY2lwaWVudERlcG9zaXQ6ICdCYWxhbmNlJ1xuICAgIH0sXG4gICAgSHJtcENoYW5uZWxJZDoge1xuICAgICAgICBzZW5kZXI6ICd1MzInLFxuICAgICAgICByZWNlaXZlcjogJ3UzMidcbiAgICB9LFxuICAgIEhybXBPcGVuQ2hhbm5lbFJlcXVlc3Q6IHtcbiAgICAgICAgY29uZmlybWVkOiAnYm9vbCcsXG4gICAgICAgIGFnZTogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgIHNlbmRlckRlcG9zaXQ6ICdCYWxhbmNlJyxcbiAgICAgICAgbWF4TWVzc2FnZVNpemU6ICd1MzInLFxuICAgICAgICBtYXhDYXBhY2l0eTogJ3UzMicsXG4gICAgICAgIG1heFRvdGFsU2l6ZTogJ3UzMidcbiAgICB9XG59O1xuIiwiY29uc3QgUEhfVjFfVE9fVjIgPSB7XG4gICAgYXNzdW1lZF92YWxpZGF0aW9uX2RhdGE6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBwZXJzaXN0ZWQgdmFsaWRhdGlvbiBkYXRhIGZvciB0aGUgZ2l2ZW4gYFBhcmFJZGAgYWxvbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2YWxpZGF0aW9uIGNvZGUgaGFzaC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248KFBlcnNpc3RlZFZhbGlkYXRpb25EYXRhLCBWYWxpZGF0aW9uQ29kZUhhc2gpPidcbiAgICB9LFxuICAgIGF2YWlsYWJpbGl0eV9jb3Jlczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1lpZWxkcyBpbmZvcm1hdGlvbiBvbiBhbGwgYXZhaWxhYmlsaXR5IGNvcmVzIGFzIHJlbGV2YW50IHRvIHRoZSBjaGlsZCBibG9jay4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVmVjPENvcmVTdGF0ZT4nXG4gICAgfSxcbiAgICBjYW5kaWRhdGVfZXZlbnRzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IGEgdmVjdG9yIG9mIGV2ZW50cyBjb25jZXJuaW5nIGNhbmRpZGF0ZXMgdGhhdCBvY2N1cnJlZCB3aXRoaW4gYSBibG9jay4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVmVjPENhbmRpZGF0ZUV2ZW50PidcbiAgICB9LFxuICAgIGNhbmRpZGF0ZV9wZW5kaW5nX2F2YWlsYWJpbGl0eToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgcmVjZWlwdCBvZiBhIGNhbmRpZGF0ZSBwZW5kaW5nIGF2YWlsYWJpbGl0eS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPENvbW1pdHRlZENhbmRpZGF0ZVJlY2VpcHQ+J1xuICAgIH0sXG4gICAgY2hlY2tfdmFsaWRhdGlvbl9vdXRwdXRzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWxpZGF0aW9uIG91dHB1dHMgcGFzcyB0aGUgYWNjZXB0YW5jZSBjcml0ZXJpYS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3V0cHV0cycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0NhbmRpZGF0ZUNvbW1pdG1lbnRzJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICB9LFxuICAgIGRtcV9jb250ZW50czoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCBhbGwgdGhlIHBlbmRpbmcgaW5ib3VuZCBtZXNzYWdlcyBpbiB0aGUgZG93bndhcmQgbWVzc2FnZSBxdWV1ZSBmb3IgYSBwYXJhLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwYXJhSWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXJhSWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdWZWM8SW5ib3VuZERvd253YXJkTWVzc2FnZT4nXG4gICAgfSxcbiAgICBpbmJvdW5kX2hybXBfY2hhbm5lbHNfY29udGVudHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGNvbnRlbnRzIG9mIGFsbCBjaGFubmVscyBhZGRyZXNzZWQgdG8gdGhlIGdpdmVuIHJlY2lwaWVudC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPEluYm91bmRIcm1wTWVzc2FnZT4nXG4gICAgfSxcbiAgICBvbl9jaGFpbl92b3Rlczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1NjcmFwZSBkaXNwdXRlIHJlbGV2YW50IGZyb20gb24tY2hhaW4sIGJhY2tpbmcgdm90ZXMgYW5kIHJlc29sdmVkIGRpc3B1dGVzLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdPcHRpb248U2NyYXBlZE9uQ2hhaW5Wb3Rlcz4nXG4gICAgfSxcbiAgICBwZXJzaXN0ZWRfdmFsaWRhdGlvbl9kYXRhOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnWWllbGRzIHRoZSBwZXJzaXN0ZWQgdmFsaWRhdGlvbiBkYXRhIGZvciB0aGUgZ2l2ZW4gYFBhcmFJZGAgYWxvbmcgd2l0aCBhbiBhc3N1bXB0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgaWYgdGhlIHBhcmEgY3VycmVudGx5IG9jY3VwaWVzIGEgY29yZS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXNzdW1wdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09jY3VwaWVkQ29yZUFzc3VtcHRpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248UGVyc2lzdGVkVmFsaWRhdGlvbkRhdGE+J1xuICAgIH0sXG4gICAgc2Vzc2lvbl9pbmRleF9mb3JfY2hpbGQ6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzZXNzaW9uIGluZGV4IGV4cGVjdGVkIGF0IGEgY2hpbGQgb2YgdGhlIGJsb2NrLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdTZXNzaW9uSW5kZXgnXG4gICAgfSxcbiAgICB2YWxpZGF0aW9uX2NvZGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdGZXRjaCB0aGUgdmFsaWRhdGlvbiBjb2RlIHVzZWQgYnkgYSBwYXJhLCBtYWtpbmcgdGhlIGdpdmVuIGBPY2N1cGllZENvcmVBc3N1bXB0aW9uYC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXNzdW1wdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09jY3VwaWVkQ29yZUFzc3VtcHRpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248VmFsaWRhdGlvbkNvZGU+J1xuICAgIH0sXG4gICAgdmFsaWRhdGlvbl9jb2RlX2J5X2hhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIHZhbGlkYXRpb24gY29kZSBmcm9tIGl0cyBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmFsaWRhdGlvbkNvZGVIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPFZhbGlkYXRpb25Db2RlPidcbiAgICB9LFxuICAgIHZhbGlkYXRvcl9ncm91cHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSB2YWxpZGF0b3IgZ3JvdXBzIGFuZCByb3RhdGlvbiBpbmZvIGxvY2FsaXplZCBiYXNlZCBvbiB0aGUgaHlwb3RoZXRpY2FsIGNoaWxkIG9mIGEgYmxvY2sgd2hvc2Ugc3RhdGUgIHRoaXMgaXMgaW52b2tlZCBvbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICcoVmVjPFZlYzxQYXJhVmFsaWRhdG9ySW5kZXg+PiwgR3JvdXBSb3RhdGlvbkluZm8pJ1xuICAgIH0sXG4gICAgdmFsaWRhdG9yczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgY3VycmVudCB2YWxpZGF0b3JzLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8VmFsaWRhdG9ySWQ+J1xuICAgIH1cbn07XG5jb25zdCBQSF9WMl9UT19WMyA9IHtcbiAgICBwdmZzX3JlcXVpcmVfcHJlY2hlY2s6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGNvZGUgaGFzaGVzIG9mIFBWRnMgdGhhdCByZXF1aXJlIHByZS1jaGVja2luZyBieSB2YWxpZGF0b3JzIGluIHRoZSBhY3RpdmUgc2V0LicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8VmFsaWRhdGlvbkNvZGVIYXNoPidcbiAgICB9LFxuICAgIHNlc3Npb25faW5mbzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgc2Vzc2lvbiBpbmZvIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiwgaWYgc3RvcmVkLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1Nlc3Npb25JbmRleCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxTZXNzaW9uSW5mbz4nXG4gICAgfSxcbiAgICBzdWJtaXRfcHZmX2NoZWNrX3N0YXRlbWVudDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Ym1pdHMgYSBQVkYgcHJlLWNoZWNraW5nIHN0YXRlbWVudCBpbnRvIHRoZSB0cmFuc2FjdGlvbiBwb29sLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdzdG10JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHZmQ2hlY2tTdGF0ZW1lbnQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdzaWduYXR1cmUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWYWxpZGF0b3JTaWduYXR1cmUnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH0sXG4gICAgdmFsaWRhdGlvbl9jb2RlX2hhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdGZXRjaCB0aGUgaGFzaCBvZiB0aGUgdmFsaWRhdGlvbiBjb2RlIHVzZWQgYnkgYSBwYXJhLCBtYWtpbmcgdGhlIGdpdmVuIGBPY2N1cGllZENvcmVBc3N1bXB0aW9uYC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXNzdW1wdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09jY3VwaWVkQ29yZUFzc3VtcHRpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248VmFsaWRhdGlvbkNvZGVIYXNoPidcbiAgICB9XG59O1xuY29uc3QgUEhfVjMgPSB7XG4gICAgZGlzcHV0ZXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGFsbCBvbmNoYWluIGRpc3B1dGVzLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8KFNlc3Npb25JbmRleCwgQ2FuZGlkYXRlSGFzaCwgRGlzcHV0ZVN0YXRlKT4nXG4gICAgfVxufTtcbmNvbnN0IFBIX1Y0ID0ge1xuICAgIHNlc3Npb25fZXhlY3V0b3JfcGFyYW1zOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBleGVjdXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIHNlc3Npb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1Nlc3Npb25JbmRleCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxFeGVjdXRvclBhcmFtcz4nXG4gICAgfVxufTtcbmNvbnN0IFBIX1Y1ID0ge1xuICAgIGtleV9vd25lcnNoaXBfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGEgbWVya2xlIHByb29mIG9mIGEgdmFsaWRhdG9yIHNlc3Npb24ga2V5JyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbGlkYXRvcklkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmFsaWRhdG9ySWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248T3BhcXVlS2V5T3duZXJzaGlwUHJvb2Y+J1xuICAgIH0sXG4gICAgc3VibWl0X3JlcG9ydF9kaXNwdXRlX2xvc3Q6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJtaXQgYW4gdW5zaWduZWQgZXh0cmluc2ljIHRvIHNsYXNoIHZhbGlkYXRvcnMgd2hvIGxvc3QgYSBkaXNwdXRlIGFib3V0IGEgY2FuZGlkYXRlIG9mIGEgcGFzdCBzZXNzaW9uJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Rpc3B1dGVQcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Rpc3B1dGVQcm9vZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleU93bmVyc2hpcFByb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3BhcXVlS2V5T3duZXJzaGlwUHJvb2YnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248TnVsbD4nXG4gICAgfSxcbiAgICB1bmFwcGxpZWRfc2xhc2hlczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYSBsaXN0IG9mIHZhbGlkYXRvcnMgdGhhdCBsb3N0IGEgcGFzdCBzZXNzaW9uIGRpc3B1dGUgYW5kIG5lZWQgdG8gYmUgc2xhc2hlZCcsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8KFNlc3Npb25JbmRleCwgQ2FuZGlkYXRlSGFzaCwgUGVuZGluZ1NsYXNoZXMpPidcbiAgICB9XG59O1xuY29uc3QgUEhfVjYgPSB7XG4gICAgbWluaW11bV9iYWNraW5nX3ZvdGVzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBiYWNraW5nIHZvdGVzIGZvciBhIHBhcmFjaGFpbiBjYW5kaWRhdGUuIFRoaXMgaXMgYSBzdGFnaW5nIG1ldGhvZCEgRG8gbm90IHVzZSBvbiBwcm9kdWN0aW9uIHJ1bnRpbWVzIScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICd1MzInXG4gICAgfVxufTtcbmNvbnN0IFBIX1Y3ID0ge1xuICAgIGFzeW5jX2JhY2tpbmdfcGFyYW1zOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBjYW5kaWRhdGVcXCdzIGFjY2VwdGFuY2UgbGltaXRhdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBiYWNraW5nIGZvciBhIHJlbGF5IHBhcmVudCcsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdBc3luY0JhY2tpbmdQYXJhbXMnXG4gICAgfSxcbiAgICBwYXJhX2JhY2tpbmdfc3RhdGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzdGF0ZSBvZiBwYXJhY2hhaW4gYmFja2luZyBmb3IgYSBnaXZlbiBwYXJhJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BhcmFJZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BhcmFJZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxCYWNraW5nU3RhdGU+J1xuICAgIH1cbn07XG5jb25zdCBQSF9WOCA9IHtcbiAgICBkaXNhYmxlZF92YWxpZGF0b3JzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGRpc2FibGVkIHZhbGlkYXRvcnMgYXQgdGhlIGdpdmVuIGJsb2NrJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1ZhbGlkYXRvckluZGV4J1xuICAgIH1cbn07XG5jb25zdCBQSF9WOSA9IHtcbiAgICBub2RlX2ZlYXR1cmVzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IG5vZGUgZmVhdHVyZXMuIFRoaXMgaXMgYSBzdGFnaW5nIG1ldGhvZCEgRG8gbm90IHVzZSBvbiBwcm9kdWN0aW9uIHJ1bnRpbWVzIScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdOb2RlRmVhdHVyZXMnXG4gICAgfVxufTtcbmNvbnN0IFBIX1YxMCA9IHtcbiAgICBhcHByb3ZhbF92b3RpbmdfcGFyYW1zOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwcm92YWwgdm90aW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycycsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdBcHByb3ZhbFZvdGluZ1BhcmFtcydcbiAgICB9XG59O1xuY29uc3QgUEhfVjExID0ge1xuICAgIGNsYWltX3F1ZXVlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2xhaW0gcXVldWUnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnQlRyZWVNYXA8Q29yZUluZGV4LCBWZWM8dTMyPj4nXG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIFBhcmFjaGFpbkhvc3Q6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlBIX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YyX1RPX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y0LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y1LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y2LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y3LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y4LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y5LFxuICAgICAgICAgICAgICAgIC4uLlBIX1YxMCxcbiAgICAgICAgICAgICAgICAuLi5QSF9WMTFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uUEhfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjJfVE9fVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjQsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjUsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjYsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjcsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjgsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjksXG4gICAgICAgICAgICAgICAgLi4uUEhfVjEwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlBIX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YyX1RPX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y0LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y1LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y2LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y3LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y4LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uUEhfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjJfVE9fVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjQsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjUsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjYsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjcsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjhcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5QSF9WMV9UT19WMixcbiAgICAgICAgICAgICAgICAuLi5QSF9WMl9UT19WMyxcbiAgICAgICAgICAgICAgICAuLi5QSF9WMyxcbiAgICAgICAgICAgICAgICAuLi5QSF9WNCxcbiAgICAgICAgICAgICAgICAuLi5QSF9WNSxcbiAgICAgICAgICAgICAgICAuLi5QSF9WNixcbiAgICAgICAgICAgICAgICAuLi5QSF9WN1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlBIX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YyX1RPX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y0LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y1LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uUEhfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjJfVE9fVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjQsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5QSF9WMV9UT19WMixcbiAgICAgICAgICAgICAgICAuLi5QSF9WMl9UT19WMyxcbiAgICAgICAgICAgICAgICAuLi5QSF9WMyxcbiAgICAgICAgICAgICAgICAuLi5QSF9WNFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlBIX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YyX1RPX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uUEhfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjJfVE9fVjNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uX2luZm86IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIHNlc3Npb24gaW5mbyBmb3IgdGhlIGdpdmVuIHNlc3Npb24sIGlmIHN0b3JlZC4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTZXNzaW9uSW5kZXgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248T2xkVjFTZXNzaW9uSW5mbz4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5QSF9WMV9UT19WMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmNvbnN0IFNsb3RSYW5nZTEwID0ge1xuICAgIF9lbnVtOiBbJ1plcm9aZXJvJywgJ1plcm9PbmUnLCAnWmVyb1R3bycsICdaZXJvVGhyZWUnLCAnT25lT25lJywgJ09uZVR3bycsICdPbmVUaHJlZScsICdUd29Ud28nLCAnVHdvVGhyZWUnLCAnVGhyZWVUaHJlZSddXG59O1xuY29uc3QgU2xvdFJhbmdlID0ge1xuICAgIF9lbnVtOiBbJ1plcm9aZXJvJywgJ1plcm9PbmUnLCAnWmVyb1R3bycsICdaZXJvVGhyZWUnLCAnWmVyb0ZvdXInLCAnWmVyb0ZpdmUnLCAnWmVyb1NpeCcsICdaZXJvU2V2ZW4nLCAnT25lT25lJywgJ09uZVR3bycsICdPbmVUaHJlZScsICdPbmVGb3VyJywgJ09uZUZpdmUnLCAnT25lU2l4JywgJ09uZVNldmVuJywgJ1R3b1R3bycsICdUd29UaHJlZScsICdUd29Gb3VyJywgJ1R3b0ZpdmUnLCAnVHdvU2l4JywgJ1R3b1NldmVuJywgJ1RocmVlVGhyZWUnLCAnVGhyZWVGb3VyJywgJ1RocmVlRml2ZScsICdUaHJlZVNpeCcsICdUaHJlZVNldmVuJywgJ0ZvdXJGb3VyJywgJ0ZvdXJGaXZlJywgJ0ZvdXJTaXgnLCAnRm91clNldmVuJywgJ0ZpdmVGaXZlJywgJ0ZpdmVTaXgnLCAnRml2ZVNldmVuJywgJ1NpeFNpeCcsICdTaXhTZXZlbicsICdTZXZlblNldmVuJ11cbn07XG5jb25zdCBvbGRUeXBlcyA9IHtcbiAgICBCaWRkZXI6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIE5ldzogJ05ld0JpZGRlcicsXG4gICAgICAgICAgICBFeGlzdGluZzogJ1BhcmFJZCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgSW5jb21pbmdQYXJhY2hhaW46IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFVuc2V0OiAnTmV3QmlkZGVyJyxcbiAgICAgICAgICAgIEZpeGVkOiAnSW5jb21pbmdQYXJhY2hhaW5GaXhlZCcsXG4gICAgICAgICAgICBEZXBsb3k6ICdJbmNvbWluZ1BhcmFjaGFpbkRlcGxveSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgSW5jb21pbmdQYXJhY2hhaW5EZXBsb3k6IHtcbiAgICAgICAgY29kZTogJ1ZhbGlkYXRpb25Db2RlJyxcbiAgICAgICAgaW5pdGlhbEhlYWREYXRhOiAnSGVhZERhdGEnXG4gICAgfSxcbiAgICBJbmNvbWluZ1BhcmFjaGFpbkZpeGVkOiB7XG4gICAgICAgIGNvZGVIYXNoOiAnSGFzaCcsXG4gICAgICAgIGNvZGVTaXplOiAndTMyJyxcbiAgICAgICAgaW5pdGlhbEhlYWREYXRhOiAnSGVhZERhdGEnXG4gICAgfSxcbiAgICBOZXdCaWRkZXI6IHtcbiAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgc3ViOiAnU3ViSWQnXG4gICAgfSxcbiAgICBTdWJJZDogJ3UzMidcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgLi4ub2xkVHlwZXMsXG4gICAgQXVjdGlvbkluZGV4OiAndTMyJyxcbiAgICBMZWFzZVBlcmlvZDogJ0Jsb2NrTnVtYmVyJyxcbiAgICBMZWFzZVBlcmlvZE9mOiAnQmxvY2tOdW1iZXInLFxuICAgIFNsb3RSYW5nZTEwLFxuICAgIFNsb3RSYW5nZSxcbiAgICBXaW5uaW5nRGF0YTEwOiBgW1dpbm5pbmdEYXRhRW50cnk7ICR7U2xvdFJhbmdlMTAuX2VudW0ubGVuZ3RofV1gLFxuICAgIFdpbm5pbmdEYXRhOiBgW1dpbm5pbmdEYXRhRW50cnk7ICR7U2xvdFJhbmdlLl9lbnVtLmxlbmd0aH1dYCxcbiAgICBXaW5uaW5nRGF0YUVudHJ5OiAnT3B0aW9uPChBY2NvdW50SWQsIFBhcmFJZCwgQmFsYW5jZU9mKT4nLFxuICAgIFdpbm5lcnNEYXRhMTA6ICdWZWM8V2lubmVyc0RhdGFUdXBsZTEwPicsXG4gICAgV2lubmVyc0RhdGE6ICdWZWM8V2lubmVyc0RhdGFUdXBsZT4nLFxuICAgIFdpbm5lcnNEYXRhVHVwbGUxMDogJyhBY2NvdW50SWQsIFBhcmFJZCwgQmFsYW5jZU9mLCBTbG90UmFuZ2UxMCknLFxuICAgIFdpbm5lcnNEYXRhVHVwbGU6ICcoQWNjb3VudElkLCBQYXJhSWQsIEJhbGFuY2VPZiwgU2xvdFJhbmdlKSdcbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBGZWVEZXRhaWxzOiB7XG4gICAgICAgICAgICBpbmNsdXNpb25GZWU6ICdPcHRpb248SW5jbHVzaW9uRmVlPidcbiAgICAgICAgICAgIC8vIHNraXBwZWQgaW4gc2VyZGVcbiAgICAgICAgICAgIC8vIHRpcDogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIEluY2x1c2lvbkZlZToge1xuICAgICAgICAgICAgYmFzZUZlZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgbGVuRmVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBhZGp1c3RlZFdlaWdodEZlZTogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIFJ1bnRpbWVEaXNwYXRjaEluZm86IHtcbiAgICAgICAgICAgIHdlaWdodDogJ1dlaWdodCcsXG4gICAgICAgICAgICBjbGFzczogJ0Rpc3BhdGNoQ2xhc3MnLFxuICAgICAgICAgICAgcGFydGlhbEZlZTogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIFJ1bnRpbWVEaXNwYXRjaEluZm9WMToge1xuICAgICAgICAgICAgd2VpZ2h0OiAnV2VpZ2h0VjEnLFxuICAgICAgICAgICAgY2xhc3M6ICdEaXNwYXRjaENsYXNzJyxcbiAgICAgICAgICAgIHBhcnRpYWxGZWU6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBSdW50aW1lRGlzcGF0Y2hJbmZvVjI6IHtcbiAgICAgICAgICAgIHdlaWdodDogJ1dlaWdodFYyJyxcbiAgICAgICAgICAgIGNsYXNzOiAnRGlzcGF0Y2hDbGFzcycsXG4gICAgICAgICAgICBwYXJ0aWFsRmVlOiAnQmFsYW5jZSdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIHF1ZXJ5RmVlRGV0YWlsczoge1xuICAgICAgICAvLyBOT1RFOiBOb3QgZGVwcmVjYXRlZCAoeWV0KSBpbiBTdWJzdHJhdGUsIGJ1dCBpdCBpcyB0aGUgaW50ZW50IHRvIGRvIHNvXG4gICAgICAgIGRlcHJlY2F0ZWQ6ICdVc2UgYGFwaS5jYWxsLnRyYW5zYWN0aW9uUGF5bWVudEFwaS5xdWVyeUZlZURldGFpbHNgIGluc3RlYWQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1F1ZXJ5IHRoZSBkZXRhaWxlZCBmZWUgb2YgYSBnaXZlbiBlbmNvZGVkIGV4dHJpbnNpYycsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdleHRyaW5zaWMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0ZlZURldGFpbHMnXG4gICAgfSxcbiAgICBxdWVyeUluZm86IHtcbiAgICAgICAgLy8gTk9URTogTm90IGRlcHJlY2F0ZWQgKHlldCkgaW4gU3Vic3RyYXRlLCBidXQgaXQgaXMgdGhlIGludGVudCB0byBkbyBzb1xuICAgICAgICBkZXByZWNhdGVkOiAnVXNlIGBhcGkuY2FsbC50cmFuc2FjdGlvblBheW1lbnRBcGkucXVlcnlJbmZvYCBpbnN0ZWFkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIGZlZSBpbmZvcm1hdGlvbiBmb3IgYW4gZW5jb2RlZCBleHRyaW5zaWMnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXh0cmluc2ljJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIE5PVEU6IFN0dWNrIG9uIFYxIGZvcmV2ZXIgKGF0IGxlYXN0IGZvciB0aGUgdGltZSBiZWluZylcbiAgICAgICAgdHlwZTogJ1J1bnRpbWVEaXNwYXRjaEluZm9WMSdcbiAgICB9XG59O1xuIiwiY29uc3QgVjFfVE9fVjRfU0hBUkVEX1BBWSA9IHtcbiAgICBxdWVyeV9mZWVfZGV0YWlsczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSB0cmFuc2FjdGlvbiBmZWUgZGV0YWlscycsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd1eHQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFeHRyaW5zaWMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZW4nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd1MzInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdGZWVEZXRhaWxzJ1xuICAgIH1cbn07XG5jb25zdCBWMV9UT19WM19TSEFSRURfQ0FMTCA9IHtcbiAgICBxdWVyeV9jYWxsX2ZlZV9kZXRhaWxzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGNhbGwgZmVlIGRldGFpbHMnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2FsbCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0NhbGwnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZW4nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd1MzInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdGZWVEZXRhaWxzJ1xuICAgIH1cbn07XG5jb25zdCBWMl9UT19WNF9TSEFSRURfUEFZID0ge1xuICAgIHF1ZXJ5X2luZm86IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgdHJhbnNhY3Rpb24gaW5mbycsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd1eHQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFeHRyaW5zaWMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZW4nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd1MzInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSdW50aW1lRGlzcGF0Y2hJbmZvJ1xuICAgIH1cbn07XG5jb25zdCBWMl9WM19TSEFSRURfQ0FMTCA9IHtcbiAgICBxdWVyeV9jYWxsX2luZm86IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgY2FsbCBpbmZvJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NhbGwnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdDYWxsJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVuJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUnVudGltZURpc3BhdGNoSW5mbydcbiAgICB9XG59O1xuY29uc3QgVjNfU0hBUkVEX1BBWV9DQUxMID0ge1xuICAgIHF1ZXJ5X2xlbmd0aF90b19mZWU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSB0aGUgb3V0cHV0IG9mIHRoZSBjdXJyZW50IExlbmd0aFRvRmVlIGdpdmVuIHNvbWUgaW5wdXQnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVuZ3RoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICB9LFxuICAgIHF1ZXJ5X3dlaWdodF90b19mZWU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSB0aGUgb3V0cHV0IG9mIHRoZSBjdXJyZW50IFdlaWdodFRvRmVlIGdpdmVuIHNvbWUgaW5wdXQnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnd2VpZ2h0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnV2VpZ2h0J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgVHJhbnNhY3Rpb25QYXltZW50QXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFY0IGlzIGVxdWl2YWxlbnQgdG8gVjMgKFY0IGp1c3QgZHJvcHBlZCBhbGwgVjEgcmVmZXJlbmNlcylcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5WM19TSEFSRURfUEFZX0NBTEwsXG4gICAgICAgICAgICAgICAgLi4uVjJfVE9fVjRfU0hBUkVEX1BBWSxcbiAgICAgICAgICAgICAgICAuLi5WMV9UT19WNF9TSEFSRURfUEFZXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uVjNfU0hBUkVEX1BBWV9DQUxMLFxuICAgICAgICAgICAgICAgIC4uLlYyX1RPX1Y0X1NIQVJFRF9QQVksXG4gICAgICAgICAgICAgICAgLi4uVjFfVE9fVjRfU0hBUkVEX1BBWVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlYyX1RPX1Y0X1NIQVJFRF9QQVksXG4gICAgICAgICAgICAgICAgLi4uVjFfVE9fVjRfU0hBUkVEX1BBWVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIHF1ZXJ5X2luZm86IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgdHJhbnNhY3Rpb24gaW5mbycsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd1eHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdFeHRyaW5zaWMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdsZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd1MzInXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IF9TaG91bGRfIGJlIFYxIChhcyBwZXIgY3VycmVudCBTdWJzdHJhdGUpLCBob3dldmVyIHRoZSBpbnRlcmZhY2Ugd2FzXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQgbWlkLWZsaWdodCBiZXR3ZWVuIHZlcnNpb25zLiBTbyB3ZSBoYXZlIHNvbWUgb2YgZWFjaCBkZXBlbmRpbmcgb25cbiAgICAgICAgICAgICAgICAgICAgLy8gcnVudGltZS4gKFdlIGRvIGRldGVjdCB0aGUgd2VpZ2h0IHR5cGUsIHNvIGNvcnJlY3QpXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdSdW50aW1lRGlzcGF0Y2hJbmZvJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uVjFfVE9fVjRfU0hBUkVEX1BBWVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF0sXG4gICAgVHJhbnNhY3Rpb25QYXltZW50Q2FsbEFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uVjNfU0hBUkVEX1BBWV9DQUxMLFxuICAgICAgICAgICAgICAgIC4uLlYyX1YzX1NIQVJFRF9DQUxMLFxuICAgICAgICAgICAgICAgIC4uLlYxX1RPX1YzX1NIQVJFRF9DQUxMXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uVjJfVjNfU0hBUkVEX0NBTEwsXG4gICAgICAgICAgICAgICAgLi4uVjFfVE9fVjNfU0hBUkVEX0NBTExcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBDQUxMOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGNhbGwgaW5mbycsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjYWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ2FsbCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2xlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogQXMgcGVyIHRoZSBhYm92ZSBjb21tZW50LCB0aGUgYmVsb3cgaXMgY29ycmVjdCBhY2NvcmRpbmcgdG8gU3Vic3RyYXRlLCBidXRcbiAgICAgICAgICAgICAgICAgICAgLy8gX21heV8geWllbGQgZmFsbGJhY2sgZGVjb2Rpbmcgb24gc29tZSB2ZXJzaW9ucyBvZiB0aGUgcnVudGltZVxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUnVudGltZURpc3BhdGNoSW5mbydcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLlYxX1RPX1YzX1NIQVJFRF9DQUxMXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFwcHJvdmFsczogJ1tib29sOyA0XSdcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7fVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIERpZmZpY3VsdHlBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGRpZmZpY3VsdHk6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIHRhcmdldCBkaWZmaWN1bHR5IG9mIHRoZSBuZXh0IGJsb2NrLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgRGlmZmljdWx0eSBpbiB0aGUgb3JpZ2luYWwsIGhvd2V2ZXIgdGhpcyBpcyBjaGFpbi1zcGVjaWZpY1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdLFxuICAgIFRpbWVzdGFtcEFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQVBJIG5lY2Vzc2FyeSBmb3IgdGltZXN0YW1wLWJhc2VkIGRpZmZpY3VsdHkgYWRqdXN0bWVudCBhbGdvcml0aG1zLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdNb21lbnQnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBQcm94eURlZmluaXRpb246IHtcbiAgICAgICAgICAgIGRlbGVnYXRlOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHByb3h5VHlwZTogJ1Byb3h5VHlwZScsXG4gICAgICAgICAgICBkZWxheTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBQcm94eVR5cGU6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0FueScsICdOb25UcmFuc2ZlcicsICdHb3Zlcm5hbmNlJywgJ1N0YWtpbmcnXVxuICAgICAgICB9LFxuICAgICAgICBQcm94eUFubm91bmNlbWVudDoge1xuICAgICAgICAgICAgcmVhbDogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBjYWxsSGFzaDogJ0hhc2gnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgQWNjb3VudFN0YXR1czoge1xuICAgICAgICAgICAgdmFsaWRpdHk6ICdBY2NvdW50VmFsaWRpdHknLFxuICAgICAgICAgICAgZnJlZUJhbGFuY2U6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGxvY2tlZEJhbGFuY2U6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgdmF0OiAnUGVybWlsbCdcbiAgICAgICAgfSxcbiAgICAgICAgQWNjb3VudFZhbGlkaXR5OiB7XG4gICAgICAgICAgICBfZW51bTogWydJbnZhbGlkJywgJ0luaXRpYXRlZCcsICdQZW5kaW5nJywgJ1ZhbGlkTG93JywgJ1ZhbGlkSGlnaCcsICdDb21wbGV0ZWQnXVxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjdGl2ZVJlY292ZXJ5OiB7XG4gICAgICAgICAgICBjcmVhdGVkOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgZnJpZW5kczogJ1ZlYzxBY2NvdW50SWQ+J1xuICAgICAgICB9LFxuICAgICAgICBSZWNvdmVyeUNvbmZpZzoge1xuICAgICAgICAgICAgZGVsYXlQZXJpb2Q6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBmcmllbmRzOiAnVmVjPEFjY291bnRJZD4nLFxuICAgICAgICAgICAgdGhyZXNob2xkOiAndTE2J1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgUnBjTWV0aG9kczoge1xuICAgICAgICAgICAgdmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBtZXRob2RzOiAnVmVjPFRleHQ+J1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBycGMgPSB7XG4gICAgbWV0aG9kczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgbGlzdCBvZiBSUEMgbWV0aG9kcyB0aGF0IGFyZSBleHBvc2VkIGJ5IHRoZSBub2RlJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1JwY01ldGhvZHMnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuY29uc3QgbnVtYmVyVHlwZXMgPSB7XG4gICAgRml4ZWQ2NDogJ0ludDw2NCwgRml4ZWQ2ND4nLFxuICAgIEZpeGVkSTY0OiAnSW50PDY0LCBGaXhlZEk2ND4nLFxuICAgIEZpeGVkVTY0OiAnVUludDw2NCwgRml4ZWRVNjQ+JyxcbiAgICBGaXhlZDEyODogJ0ludDwxMjgsIEZpeGVkMTI4PicsXG4gICAgRml4ZWRJMTI4OiAnSW50PDEyOCwgRml4ZWRJMTI4PicsXG4gICAgRml4ZWRVMTI4OiAnVUludDwxMjgsIEZpeGVkVTEyOD4nLFxuICAgIEkzMkYzMjogJ0ludDw2NCwgSTMyRjMyPicsXG4gICAgVTMyRjMyOiAnVUludDw2NCwgVTMyRjMyPicsXG4gICAgUGVyVTE2OiAnVUludDwxNiwgUGVyVTE2PicsXG4gICAgUGVyYmlsbDogJ1VJbnQ8MzIsIFBlcmJpbGw+JyxcbiAgICBQZXJjZW50OiAnVUludDw4LCBQZXJjZW50PicsXG4gICAgUGVybWlsbDogJ1VJbnQ8MzIsIFBlcm1pbGw+JyxcbiAgICBQZXJxdWludGlsbDogJ1VJbnQ8NjQsIFBlcnF1aW50aWxsPidcbn07XG5leHBvcnQgY29uc3Qga25vd25PcmlnaW5zID0ge1xuICAgIC8vXG4gICAgLy8gKDEpIERlZmF1bHRzIGZyb20gU3Vic3RyYXRlXG4gICAgLy9cbiAgICBDb3VuY2lsOiAnQ29sbGVjdGl2ZU9yaWdpbicsXG4gICAgU3lzdGVtOiAnU3lzdGVtT3JpZ2luJyxcbiAgICBUZWNobmljYWxDb21taXR0ZWU6ICdDb2xsZWN0aXZlT3JpZ2luJyxcbiAgICAvL1xuICAgIC8vICgyKSBEZWZhdWx0cyBmcm9tIFBvbGthZG90XG4gICAgLy9cbiAgICBYY206ICdYY21PcmlnaW4nLFxuICAgIFhjbVBhbGxldDogJ1hjbU9yaWdpbicsXG4gICAgLy9cbiAgICAvLyAoMykgRGVmYXVsdHMgZnJvbSBBY2FsYVxuICAgIC8vXG4gICAgQXV0aG9yaXR5OiAnQXV0aG9yaXR5T3JpZ2luJyxcbiAgICBHZW5lcmFsQ291bmNpbDogJ0NvbGxlY3RpdmVPcmlnaW4nXG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5udW1iZXJUeXBlcyxcbiAgICAgICAgQWNjb3VudElkOiAnQWNjb3VudElkMzInLFxuICAgICAgICBBY2NvdW50SWQyMDogJ0dlbmVyaWNFdGhlcmV1bUFjY291bnRJZCcsXG4gICAgICAgIEFjY291bnRJZDMyOiAnR2VuZXJpY0FjY291bnRJZDMyJyxcbiAgICAgICAgQWNjb3VudElkMzM6ICdHZW5lcmljQWNjb3VudElkMzMnLFxuICAgICAgICBBY2NvdW50SWRPZjogJ0FjY291bnRJZCcsXG4gICAgICAgIEFjY291bnRJbmRleDogJ0dlbmVyaWNBY2NvdW50SW5kZXgnLFxuICAgICAgICBBZGRyZXNzOiAnTXVsdGlBZGRyZXNzJyxcbiAgICAgICAgQXNzZXRJZDogJ3UzMicsXG4gICAgICAgIEJhbGFuY2U6ICdVSW50PDEyOCwgQmFsYW5jZT4nLFxuICAgICAgICBCYWxhbmNlT2Y6ICdCYWxhbmNlJyxcbiAgICAgICAgQmxvY2s6ICdHZW5lcmljQmxvY2snLFxuICAgICAgICBCbG9ja051bWJlcjogJ3UzMicsXG4gICAgICAgIEJsb2NrTnVtYmVyRm9yOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICBCbG9ja051bWJlck9mOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICBDYWxsOiAnR2VuZXJpY0NhbGwnLFxuICAgICAgICBDYWxsSGFzaDogJ0hhc2gnLFxuICAgICAgICBDYWxsSGFzaE9mOiAnQ2FsbEhhc2gnLFxuICAgICAgICBDaGFuZ2VzVHJpZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIGRpZ2VzdEludGVydmFsOiAndTMyJyxcbiAgICAgICAgICAgIGRpZ2VzdExldmVsczogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgQ2hhbmdlc1RyaWVTaWduYWw6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgTmV3Q29uZmlndXJhdGlvbjogJ09wdGlvbjxDaGFuZ2VzVHJpZUNvbmZpZ3VyYXRpb24+J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDb25zZW5zdXNFbmdpbmVJZDogJ0dlbmVyaWNDb25zZW5zdXNFbmdpbmVJZCcsXG4gICAgICAgIENvZGVjSGFzaDogJ0hhc2gnLFxuICAgICAgICBDcmF0ZVZlcnNpb246IHtcbiAgICAgICAgICAgIG1ham9yOiAndTE2JyxcbiAgICAgICAgICAgIG1pbm9yOiAndTgnLFxuICAgICAgICAgICAgcGF0Y2g6ICd1OCdcbiAgICAgICAgfSxcbiAgICAgICAgRGlnZXN0OiB7XG4gICAgICAgICAgICBsb2dzOiAnVmVjPERpZ2VzdEl0ZW0+J1xuICAgICAgICB9LFxuICAgICAgICBEaWdlc3RJdGVtOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE90aGVyOiAnQnl0ZXMnLCAvLyAwXG4gICAgICAgICAgICAgICAgQXV0aG9yaXRpZXNDaGFuZ2U6ICdWZWM8QXV0aG9yaXR5SWQ+JywgLy8gMVxuICAgICAgICAgICAgICAgIENoYW5nZXNUcmllUm9vdDogJ0hhc2gnLCAvLyAyXG4gICAgICAgICAgICAgICAgU2VhbFYwOiAnU2VhbFYwJywgLy8gM1xuICAgICAgICAgICAgICAgIENvbnNlbnN1czogJ0NvbnNlbnN1cycsIC8vIDRcbiAgICAgICAgICAgICAgICBTZWFsOiAnU2VhbCcsIC8vIDVcbiAgICAgICAgICAgICAgICBQcmVSdW50aW1lOiAnUHJlUnVudGltZScsIC8vIDZcbiAgICAgICAgICAgICAgICBDaGFuZ2VzVHJpZVNpZ25hbDogJ0NoYW5nZXNUcmllU2lnbmFsJywgLy8gN1xuICAgICAgICAgICAgICAgIFJ1bnRpbWVFbnZpcm9ubWVudFVwZGF0ZWQ6ICdOdWxsJyAvLyA4XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEV4dHJpbnNpY3NXZWlnaHQ6IHtcbiAgICAgICAgICAgIG5vcm1hbDogJ1dlaWdodCcsXG4gICAgICAgICAgICBvcGVyYXRpb25hbDogJ1dlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgSDMyOiAnW3U4OyA0OyBIMzJdJyxcbiAgICAgICAgSDY0OiAnW3U4OyA4OyBINjRdJyxcbiAgICAgICAgSDEyODogJ1t1ODsgMTY7IEgxMjhdJyxcbiAgICAgICAgSDE2MDogJ1t1ODsgMjA7IEgxNjBdJyxcbiAgICAgICAgSDI1NjogJ1t1ODsgMzI7IEgyNTZdJyxcbiAgICAgICAgSDUxMjogJ1t1ODsgNjQ7IEg1MTJdJyxcbiAgICAgICAgSDEwMjQ6ICdbdTg7IDEyODsgSDEwMjRdJyxcbiAgICAgICAgSDIwNDg6ICdbdTg7IDI1NjsgSDIwNDhdJyxcbiAgICAgICAgSGFzaDogJ0gyNTYnLFxuICAgICAgICBIZWFkZXI6IHtcbiAgICAgICAgICAgIHBhcmVudEhhc2g6ICdIYXNoJyxcbiAgICAgICAgICAgIG51bWJlcjogJ0NvbXBhY3Q8QmxvY2tOdW1iZXI+JyxcbiAgICAgICAgICAgIHN0YXRlUm9vdDogJ0hhc2gnLFxuICAgICAgICAgICAgZXh0cmluc2ljc1Jvb3Q6ICdIYXNoJyxcbiAgICAgICAgICAgIGRpZ2VzdDogJ0RpZ2VzdCdcbiAgICAgICAgfSxcbiAgICAgICAgSGVhZGVyUGFydGlhbDoge1xuICAgICAgICAgICAgcGFyZW50SGFzaDogJ0hhc2gnLFxuICAgICAgICAgICAgLy8gc2luY2Ugd2Ugb25seSBwYXJzZSBKU09OIHdpdGggdGhpcywgaGF2aW5nIG5vbi1jb21wYWN0IHdvcmtzXG4gICAgICAgICAgICBudW1iZXI6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgSW5kaWNlc0xvb2t1cFNvdXJjZTogJ0dlbmVyaWNMb29rdXBTb3VyY2UnLFxuICAgICAgICBJbmRleDogJ3UzMicsXG4gICAgICAgIEp1c3RpZmljYXRpb246ICcoQ29uc2Vuc3VzRW5naW5lSWQsIEVuY29kZWRKdXN0aWZpY2F0aW9uKScsXG4gICAgICAgIEVuY29kZWRKdXN0aWZpY2F0aW9uOiAnQnl0ZXMnLFxuICAgICAgICBKdXN0aWZpY2F0aW9uczogJ1ZlYzxKdXN0aWZpY2F0aW9uPicsXG4gICAgICAgIEtleVZhbHVlOiAnKFN0b3JhZ2VLZXksIFN0b3JhZ2VEYXRhKScsXG4gICAgICAgIEtleVR5cGVJZDogJ3UzMicsXG4gICAgICAgIExvY2tJZGVudGlmaWVyOiAnW3U4OyA4XScsXG4gICAgICAgIExvb2t1cFNvdXJjZTogJ011bHRpQWRkcmVzcycsXG4gICAgICAgIExvb2t1cFRhcmdldDogJ0FjY291bnRJZCcsXG4gICAgICAgIE1vZHVsZUlkOiAnTG9ja0lkZW50aWZpZXInLFxuICAgICAgICBNdWx0aUFkZHJlc3M6ICdHZW5lcmljTXVsdGlBZGRyZXNzJyxcbiAgICAgICAgTXVsdGlTaWduZXI6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgRWQyNTUxOTogJ1t1ODsgMzJdJyxcbiAgICAgICAgICAgICAgICBTcjI1NTE5OiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgICAgIEVjZHNhOiAnW3U4OyAzM10nXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIE1vbWVudDogJ1VJbnQ8NjQsIE1vbWVudD4nLFxuICAgICAgICBPcGFxdWVDYWxsOiAnQnl0ZXMnLFxuICAgICAgICBPcmlnaW46ICdEb05vdENvbnN0cnVjdDxPcmlnaW4+JyxcbiAgICAgICAgT3JpZ2luQ2FsbGVyOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGR5bmFtaWNhbGx5IGJ1aWx0IGZyb20gdGhlIGFjdHVhbCBtb2R1bGVzLCBiYXNlZCBvbiBpbmRleFxuICAgICAgICAgICAgICAgIFN5c3RlbTogJ1N5c3RlbU9yaWdpbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUGFsbGV0SWQ6ICdMb2NrSWRlbnRpZmllcicsXG4gICAgICAgIFBhbGxldHNPcmlnaW46ICdPcmlnaW5DYWxsZXInLFxuICAgICAgICBQYWxsZXRWZXJzaW9uOiB7XG4gICAgICAgICAgICBtYWpvcjogJ3UxNicsXG4gICAgICAgICAgICBtaW5vcjogJ3U4JyxcbiAgICAgICAgICAgIHBhdGNoOiAndTgnXG4gICAgICAgIH0sXG4gICAgICAgIFBheXM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1llcycsICdObyddXG4gICAgICAgIH0sXG4gICAgICAgIFBoYW50b206ICdOdWxsJyxcbiAgICAgICAgUGhhbnRvbURhdGE6ICdOdWxsJyxcbiAgICAgICAgUmVsZWFzZXM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1YxJywgJ1YyJywgJ1YzJywgJ1Y0JywgJ1Y1JywgJ1Y2JywgJ1Y3JywgJ1Y4JywgJ1Y5JywgJ1YxMCddXG4gICAgICAgIH0sXG4gICAgICAgIFJ1bnRpbWVDYWxsOiAnQ2FsbCcsXG4gICAgICAgIFJ1bnRpbWVFdmVudDogJ0V2ZW50JyxcbiAgICAgICAgUnVudGltZURiV2VpZ2h0OiB7XG4gICAgICAgICAgICByZWFkOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHdyaXRlOiAnV2VpZ2h0J1xuICAgICAgICB9LFxuICAgICAgICBTaWduZWRCbG9jazogJ1NpZ25lZEJsb2NrV2l0aEp1c3RpZmljYXRpb25zJyxcbiAgICAgICAgU2lnbmVkQmxvY2tXaXRoSnVzdGlmaWNhdGlvbjoge1xuICAgICAgICAgICAgYmxvY2s6ICdCbG9jaycsXG4gICAgICAgICAgICBqdXN0aWZpY2F0aW9uOiAnT3B0aW9uPEVuY29kZWRKdXN0aWZpY2F0aW9uPidcbiAgICAgICAgfSxcbiAgICAgICAgU2lnbmVkQmxvY2tXaXRoSnVzdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgICAgIGJsb2NrOiAnQmxvY2snLFxuICAgICAgICAgICAganVzdGlmaWNhdGlvbnM6ICdPcHRpb248SnVzdGlmaWNhdGlvbnM+J1xuICAgICAgICB9LFxuICAgICAgICBTbG90OiAndTY0JyxcbiAgICAgICAgU2xvdER1cmF0aW9uOiAndTY0JyxcbiAgICAgICAgU3RvcmFnZURhdGE6ICdCeXRlcycsXG4gICAgICAgIFN0b3JhZ2VJbmZvOiB7XG4gICAgICAgICAgICBwYWxsZXROYW1lOiAnQnl0ZXMnLFxuICAgICAgICAgICAgc3RvcmFnZV9uYW1lOiAnQnl0ZXMnLFxuICAgICAgICAgICAgcHJlZml4OiAnQnl0ZXMnLFxuICAgICAgICAgICAgbWF4VmFsdWVzOiAnT3B0aW9uPHUzMj4nLFxuICAgICAgICAgICAgbWF4U2l6ZTogJ09wdGlvbjx1MzI+J1xuICAgICAgICB9LFxuICAgICAgICBTdG9yYWdlUHJvb2Y6IHtcbiAgICAgICAgICAgIHRyaWVOb2RlczogJ1ZlYzxCeXRlcz4nXG4gICAgICAgIH0sXG4gICAgICAgIFRyYW5zYWN0aW9uUHJpb3JpdHk6ICd1NjQnLFxuICAgICAgICBUcmFuc2FjdGlvbkxvbmdldml0eTogJ3U2NCcsXG4gICAgICAgIFRyYW5zYWN0aW9uVGFnOiAnQnl0ZXMnLFxuICAgICAgICBUcmFuc2FjdGlvbkluZm86IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIGRhdGFTaXplOiAnc2l6ZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaHVua1Jvb3Q6ICdIMjU2JyxcbiAgICAgICAgICAgIGNvbnRlbnRIYXNoOiAnSDI1NicsXG4gICAgICAgICAgICBkYXRhU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBibG9ja0NodW5rczogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgVHJhbnNhY3Rpb25TdG9yYWdlUHJvb2Y6IHtcbiAgICAgICAgICAgIGNodW5rOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBwcm9vZjogJ1ZlYzxWZWM8dTg+PidcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdG9ySWQ6ICdBY2NvdW50SWQnLFxuICAgICAgICBWYWxpZGF0b3JJZE9mOiAnVmFsaWRhdG9ySWQnLFxuICAgICAgICBXZWlnaHRWMDogJ3UzMicsXG4gICAgICAgIFdlaWdodFYxOiAndTY0JyxcbiAgICAgICAgV2VpZ2h0VjI6IHtcbiAgICAgICAgICAgIHJlZlRpbWU6ICdDb21wYWN0PHU2ND4nLFxuICAgICAgICAgICAgcHJvb2ZTaXplOiAnQ29tcGFjdDx1NjQ+J1xuICAgICAgICB9LFxuICAgICAgICBXZWlnaHQ6ICdXZWlnaHRWMicsXG4gICAgICAgIFdlaWdodE11bHRpcGxpZXI6ICdGaXhlZDY0JyxcbiAgICAgICAgLy8gZGlnZXN0XG4gICAgICAgIFByZVJ1bnRpbWU6ICcoQ29uc2Vuc3VzRW5naW5lSWQsIEJ5dGVzKScsXG4gICAgICAgIFNlYWxWMDogJyh1NjQsIFNpZ25hdHVyZSknLFxuICAgICAgICBTZWFsOiAnKENvbnNlbnN1c0VuZ2luZUlkLCBCeXRlcyknLFxuICAgICAgICBDb25zZW5zdXM6ICcoQ29uc2Vuc3VzRW5naW5lSWQsIEJ5dGVzKScsXG4gICAgICAgIC8vIFR5cGUgd2hlbiBjb3JlIGluaXRpYWxpemVfYmxvY2sgd2VudCBmcm9tIHY0IHRvIHY1XG4gICAgICAgIEV4dHJpbnNpY0luY2x1c2lvbk1vZGU6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0FsbEV4dHJpbnNpY3MnLCAnT25seUluaGVyZW50cyddXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiY29uc3QgQ09SRV9WMV9UT19WNCA9IHtcbiAgICBleGVjdXRlX2Jsb2NrOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0ZSB0aGUgZ2l2ZW4gYmxvY2suJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2snXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH1cbn07XG5jb25zdCBDT1JFX1YxX1RPX1YyID0ge1xuICAgIHZlcnNpb246IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIHRoZSBydW50aW1lLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdSdW50aW1lVmVyc2lvblByZTMnXG4gICAgfVxufTtcbmNvbnN0IENPUkVfVjJfVE9fVjQgPSB7XG4gICAgaW5pdGlhbGl6ZV9ibG9jazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgYSBibG9jayB3aXRoIHRoZSBnaXZlbiBoZWFkZXIuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hlYWRlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ051bGwnXG4gICAgfVxufTtcbmNvbnN0IENPUkVfVjRfVkVSU0lPTiA9IHtcbiAgICB2ZXJzaW9uOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgdmVyc2lvbiBvZiB0aGUgcnVudGltZS4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnUnVudGltZVZlcnNpb24nXG4gICAgfVxufTtcbmNvbnN0IENPUkVfVjRfVE9fVjUgPSB7XG4gICAgLi4uQ09SRV9WMV9UT19WNCxcbiAgICBpbml0aWFsaXplX2Jsb2NrOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSW5pdGlhbGl6ZSBhIGJsb2NrIHdpdGggdGhlIGdpdmVuIGhlYWRlci4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGVhZGVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXh0cmluc2ljSW5jbHVzaW9uTW9kZSdcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgQ29yZTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uQ09SRV9WNF9WRVJTSU9OLFxuICAgICAgICAgICAgICAgIC4uLkNPUkVfVjRfVE9fVjVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5DT1JFX1Y0X1ZFUlNJT04sXG4gICAgICAgICAgICAgICAgLi4uQ09SRV9WMV9UT19WNCxcbiAgICAgICAgICAgICAgICAuLi5DT1JFX1YyX1RPX1Y0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIHJ1bnRpbWUuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1J1bnRpbWVWZXJzaW9uUHJlNCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLkNPUkVfVjFfVE9fVjQsXG4gICAgICAgICAgICAgICAgLi4uQ09SRV9WMl9UT19WNFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLkNPUkVfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uQ09SRV9WMV9UT19WNCxcbiAgICAgICAgICAgICAgICAuLi5DT1JFX1YyX1RPX1Y0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGlzZV9ibG9jazoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgYSBibG9jayB3aXRoIHRoZSBnaXZlbiBoZWFkZXIuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2hlYWRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5DT1JFX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLkNPUkVfVjFfVE9fVjRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiaW1wb3J0IHsgdjAgfSBmcm9tICcuL3YwLmpzJztcbmltcG9ydCB7IHYxIH0gZnJvbSAnLi92MS5qcyc7XG4vKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIC4uLnYwLFxuICAgICAgICAuLi52MSxcbiAgICAgICAgLy8gbGF0ZXN0IG1hcHBpbmdzXG4gICAgICAgIFNpRmllbGQ6ICdTaTFGaWVsZCcsXG4gICAgICAgIFNpTG9va3VwVHlwZUlkOiAnU2kxTG9va3VwVHlwZUlkJyxcbiAgICAgICAgU2lQYXRoOiAnU2kxUGF0aCcsXG4gICAgICAgIFNpVHlwZTogJ1NpMVR5cGUnLFxuICAgICAgICBTaVR5cGVEZWY6ICdTaTFUeXBlRGVmJyxcbiAgICAgICAgU2lUeXBlRGVmQXJyYXk6ICdTaTFUeXBlRGVmQXJyYXknLFxuICAgICAgICBTaVR5cGVEZWZCaXRTZXF1ZW5jZTogJ1NpMVR5cGVEZWZCaXRTZXF1ZW5jZScsXG4gICAgICAgIFNpVHlwZURlZkNvbXBhY3Q6ICdTaTFUeXBlRGVmQ29tcGFjdCcsXG4gICAgICAgIFNpVHlwZURlZkNvbXBvc2l0ZTogJ1NpMVR5cGVEZWZDb21wb3NpdGUnLFxuICAgICAgICBTaVR5cGVEZWZQcmltaXRpdmU6ICdTaTFUeXBlRGVmUHJpbWl0aXZlJyxcbiAgICAgICAgU2lUeXBlRGVmU2VxdWVuY2U6ICdTaTFUeXBlRGVmU2VxdWVuY2UnLFxuICAgICAgICBTaVR5cGVEZWZUdXBsZTogJ1NpMVR5cGVEZWZUdXBsZScsXG4gICAgICAgIFNpVHlwZVBhcmFtZXRlcjogJ1NpMVR5cGVQYXJhbWV0ZXInLFxuICAgICAgICBTaVR5cGVEZWZWYXJpYW50OiAnU2kxVHlwZURlZlZhcmlhbnQnLFxuICAgICAgICBTaVZhcmlhbnQ6ICdTaTFWYXJpYW50J1xuICAgIH1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmV4cG9ydCBjb25zdCB2MCA9IHtcbiAgICBTaTBGaWVsZDoge1xuICAgICAgICBuYW1lOiAnT3B0aW9uPFRleHQ+JyxcbiAgICAgICAgdHlwZTogJ1NpMExvb2t1cFR5cGVJZCcsXG4gICAgICAgIHR5cGVOYW1lOiAnT3B0aW9uPFRleHQ+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFNpMExvb2t1cFR5cGVJZDogJ3UzMicsXG4gICAgU2kwUGF0aDogJ1ZlYzxUZXh0PicsXG4gICAgU2kwVHlwZToge1xuICAgICAgICBwYXRoOiAnU2kwUGF0aCcsXG4gICAgICAgIHBhcmFtczogJ1ZlYzxTaTBMb29rdXBUeXBlSWQ+JyxcbiAgICAgICAgZGVmOiAnU2kwVHlwZURlZidcbiAgICB9LFxuICAgIFNpMFR5cGVEZWY6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENvbXBvc2l0ZTogJ1NpMFR5cGVEZWZDb21wb3NpdGUnLFxuICAgICAgICAgICAgVmFyaWFudDogJ1NpMFR5cGVEZWZWYXJpYW50JyxcbiAgICAgICAgICAgIFNlcXVlbmNlOiAnU2kwVHlwZURlZlNlcXVlbmNlJyxcbiAgICAgICAgICAgIEFycmF5OiAnU2kwVHlwZURlZkFycmF5JyxcbiAgICAgICAgICAgIFR1cGxlOiAnU2kwVHlwZURlZlR1cGxlJyxcbiAgICAgICAgICAgIFByaW1pdGl2ZTogJ1NpMFR5cGVEZWZQcmltaXRpdmUnLFxuICAgICAgICAgICAgQ29tcGFjdDogJ1NpMFR5cGVEZWZDb21wYWN0JyxcbiAgICAgICAgICAgIFBoYW50b206ICdTaTBUeXBlRGVmUGhhbnRvbScsXG4gICAgICAgICAgICBCaXRTZXF1ZW5jZTogJ1NpMFR5cGVEZWZCaXRTZXF1ZW5jZSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgU2kwVHlwZURlZkFycmF5OiB7XG4gICAgICAgIGxlbjogJ3UzMicsXG4gICAgICAgIHR5cGU6ICdTaTBMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBTaTBUeXBlRGVmQml0U2VxdWVuY2U6IHtcbiAgICAgICAgYml0U3RvcmVUeXBlOiAnU2kwTG9va3VwVHlwZUlkJyxcbiAgICAgICAgYml0T3JkZXJUeXBlOiAnU2kwTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgU2kwVHlwZURlZkNvbXBhY3Q6IHtcbiAgICAgICAgdHlwZTogJ1NpMExvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFNpMFR5cGVEZWZDb21wb3NpdGU6IHtcbiAgICAgICAgZmllbGRzOiAnVmVjPFNpMEZpZWxkPidcbiAgICB9LFxuICAgIFNpMFR5cGVEZWZQaGFudG9tOiAnTnVsbCcsXG4gICAgU2kwVHlwZURlZlZhcmlhbnQ6IHtcbiAgICAgICAgdmFyaWFudHM6ICdWZWM8U2kwVmFyaWFudD4nXG4gICAgfSxcbiAgICBTaTBUeXBlRGVmUHJpbWl0aXZlOiB7XG4gICAgICAgIF9lbnVtOiBbJ0Jvb2wnLCAnQ2hhcicsICdTdHInLCAnVTgnLCAnVTE2JywgJ1UzMicsICdVNjQnLCAnVTEyOCcsICdVMjU2JywgJ0k4JywgJ0kxNicsICdJMzInLCAnSTY0JywgJ0kxMjgnLCAnSTI1NiddXG4gICAgfSxcbiAgICBTaTBUeXBlRGVmU2VxdWVuY2U6IHtcbiAgICAgICAgdHlwZTogJ1NpMExvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFNpMFR5cGVEZWZUdXBsZTogJ1ZlYzxTaTBMb29rdXBUeXBlSWQ+JyxcbiAgICBTaTBUeXBlUGFyYW1ldGVyOiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxTaTBMb29rdXBUeXBlSWQ+J1xuICAgIH0sXG4gICAgU2kwVmFyaWFudDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIGZpZWxkczogJ1ZlYzxTaTBGaWVsZD4nLFxuICAgICAgICBpbmRleDogJ09wdGlvbjx1OD4nLFxuICAgICAgICBkaXNjcmltaW5hbnQ6ICdPcHRpb248dTY0PicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfVxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIHNvcnQta2V5cyAqL1xuZXhwb3J0IGNvbnN0IFNpMVZhcmlhbnQgPSB7XG4gICAgbmFtZTogJ1RleHQnLFxuICAgIGZpZWxkczogJ1ZlYzxTaTFGaWVsZD4nLFxuICAgIGluZGV4OiAndTgnLFxuICAgIGRvY3M6ICdWZWM8VGV4dD4nXG59O1xuZXhwb3J0IGNvbnN0IHYxID0ge1xuICAgIFNpMUZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICdPcHRpb248VGV4dD4nLFxuICAgICAgICB0eXBlOiAnU2kxTG9va3VwVHlwZUlkJyxcbiAgICAgICAgdHlwZU5hbWU6ICdPcHRpb248VGV4dD4nLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgU2kxTG9va3VwVHlwZUlkOiAnQ29tcGFjdDx1MzI+JyxcbiAgICBTaTFQYXRoOiAnU2kwUGF0aCcsXG4gICAgU2kxVHlwZToge1xuICAgICAgICBwYXRoOiAnU2kxUGF0aCcsXG4gICAgICAgIHBhcmFtczogJ1ZlYzxTaTFUeXBlUGFyYW1ldGVyPicsXG4gICAgICAgIGRlZjogJ1NpMVR5cGVEZWYnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgU2kxVHlwZURlZjoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgQ29tcG9zaXRlOiAnU2kxVHlwZURlZkNvbXBvc2l0ZScsXG4gICAgICAgICAgICBWYXJpYW50OiAnU2kxVHlwZURlZlZhcmlhbnQnLFxuICAgICAgICAgICAgU2VxdWVuY2U6ICdTaTFUeXBlRGVmU2VxdWVuY2UnLFxuICAgICAgICAgICAgQXJyYXk6ICdTaTFUeXBlRGVmQXJyYXknLFxuICAgICAgICAgICAgVHVwbGU6ICdTaTFUeXBlRGVmVHVwbGUnLFxuICAgICAgICAgICAgUHJpbWl0aXZlOiAnU2kxVHlwZURlZlByaW1pdGl2ZScsXG4gICAgICAgICAgICBDb21wYWN0OiAnU2kxVHlwZURlZkNvbXBhY3QnLFxuICAgICAgICAgICAgQml0U2VxdWVuY2U6ICdTaTFUeXBlRGVmQml0U2VxdWVuY2UnLFxuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHByZS12MTQgbWV0YWRhdGFcbiAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkgKGFsd2F5cyBrZWVwIHRoaXMgYXMgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGVudW0pXG4gICAgICAgICAgICBIaXN0b3JpY01ldGFDb21wYXQ6ICdUeXBlJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBTaTFUeXBlRGVmQXJyYXk6IHtcbiAgICAgICAgbGVuOiAndTMyJyxcbiAgICAgICAgdHlwZTogJ1NpMUxvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFNpMVR5cGVEZWZCaXRTZXF1ZW5jZToge1xuICAgICAgICBiaXRTdG9yZVR5cGU6ICdTaTFMb29rdXBUeXBlSWQnLFxuICAgICAgICBiaXRPcmRlclR5cGU6ICdTaTFMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBTaTFUeXBlRGVmQ29tcGFjdDoge1xuICAgICAgICB0eXBlOiAnU2kxTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgU2kxVHlwZURlZkNvbXBvc2l0ZToge1xuICAgICAgICBmaWVsZHM6ICdWZWM8U2kxRmllbGQ+J1xuICAgIH0sXG4gICAgU2kxVHlwZURlZlByaW1pdGl2ZTogJ1NpMFR5cGVEZWZQcmltaXRpdmUnLFxuICAgIFNpMVR5cGVEZWZTZXF1ZW5jZToge1xuICAgICAgICB0eXBlOiAnU2kxTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgU2kxVHlwZURlZlR1cGxlOiAnVmVjPFNpMUxvb2t1cFR5cGVJZD4nLFxuICAgIFNpMVR5cGVQYXJhbWV0ZXI6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPFNpMUxvb2t1cFR5cGVJZD4nXG4gICAgfSxcbiAgICBTaTFUeXBlRGVmVmFyaWFudDoge1xuICAgICAgICB2YXJpYW50czogJ1ZlYzxTaTFWYXJpYW50PidcbiAgICB9LFxuICAgIFNpMVZhcmlhbnRcbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBQZXJpb2Q6ICcoQmxvY2tOdW1iZXIsIHUzMiknLFxuICAgICAgICBQcmlvcml0eTogJ3U4JyxcbiAgICAgICAgU2NoZWR1bGVQZXJpb2Q6ICdQZXJpb2QnLFxuICAgICAgICBTY2hlZHVsZVByaW9yaXR5OiAnUHJpb3JpdHknLFxuICAgICAgICBTY2hlZHVsZWQ6IHtcbiAgICAgICAgICAgIG1heWJlSWQ6ICdPcHRpb248Qnl0ZXM+JyxcbiAgICAgICAgICAgIHByaW9yaXR5OiAnU2NoZWR1bGVQcmlvcml0eScsXG4gICAgICAgICAgICBjYWxsOiAnQ2FsbCcsXG4gICAgICAgICAgICBtYXliZVBlcmlvZGljOiAnT3B0aW9uPFNjaGVkdWxlUGVyaW9kPicsXG4gICAgICAgICAgICBvcmlnaW46ICdQYWxsZXRzT3JpZ2luJ1xuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsZWRUbzI1NDoge1xuICAgICAgICAgICAgbWF5YmVJZDogJ09wdGlvbjxCeXRlcz4nLFxuICAgICAgICAgICAgcHJpb3JpdHk6ICdTY2hlZHVsZVByaW9yaXR5JyxcbiAgICAgICAgICAgIGNhbGw6ICdDYWxsJyxcbiAgICAgICAgICAgIG1heWJlUGVyaW9kaWM6ICdPcHRpb248U2NoZWR1bGVQZXJpb2Q+J1xuICAgICAgICB9LFxuICAgICAgICBUYXNrQWRkcmVzczogJyhCbG9ja051bWJlciwgdTMyKSdcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5jb25zdCBrZXlUeXBlcyA9IHtcbiAgICAvLyBrZXkgZm9yIGJlZWZ5XG4gICAgQmVlZnlLZXk6ICdbdTg7IDMzXScsXG4gICAgLy8gZGVmYXVsdCB0byBTdWJzdHJhdGUgbWFzdGVyIGRlZmF1bHRzLCA0IGtleXMgKHBvbGthZG90IG1hc3RlciwgNSBrZXlzKVxuICAgIEtleXM6ICdTZXNzaW9uS2V5czQnLFxuICAgIFNlc3Npb25LZXlzMTogJyhBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czI6ICcoQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czM6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCknLFxuICAgIFNlc3Npb25LZXlzNDogJyhBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czU6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czY6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCknLFxuICAgIFNlc3Npb25LZXlzNkI6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEJlZWZ5S2V5KScsXG4gICAgU2Vzc2lvbktleXM3OiAnKEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCknLFxuICAgIFNlc3Npb25LZXlzN0I6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQmVlZnlLZXkpJyxcbiAgICBTZXNzaW9uS2V5czg6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czhCOiAnKEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQmVlZnlLZXkpJyxcbiAgICBTZXNzaW9uS2V5czk6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCknLFxuICAgIFNlc3Npb25LZXlzOUI6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEJlZWZ5S2V5KScsXG4gICAgU2Vzc2lvbktleXMxMDogJyhBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czEwQjogJyhBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBCZWVmeUtleSknXG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5rZXlUeXBlcyxcbiAgICAgICAgRnVsbElkZW50aWZpY2F0aW9uOiAnRXhwb3N1cmUnLFxuICAgICAgICBJZGVudGlmaWNhdGlvblR1cGxlOiAnKFZhbGlkYXRvcklkLCBGdWxsSWRlbnRpZmljYXRpb24pJyxcbiAgICAgICAgTWVtYmVyc2hpcFByb29mOiB7XG4gICAgICAgICAgICBzZXNzaW9uOiAnU2Vzc2lvbkluZGV4JyxcbiAgICAgICAgICAgIHRyaWVOb2RlczogJ1ZlYzxCeXRlcz4nLFxuICAgICAgICAgICAgdmFsaWRhdG9yQ291bnQ6ICdWYWxpZGF0b3JDb3VudCdcbiAgICAgICAgfSxcbiAgICAgICAgU2Vzc2lvbkluZGV4OiAndTMyJyxcbiAgICAgICAgVmFsaWRhdG9yQ291bnQ6ICd1MzInXG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIFNlc3Npb25LZXlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBkZWNvZGVfc2Vzc2lvbl9rZXlzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGVjb2RlIHRoZSBnaXZlbiBwdWJsaWMgc2Vzc2lvbiBrZXlzLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VmVjPChCeXRlcywgS2V5VHlwZUlkKT4+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVfc2Vzc2lvbl9rZXlzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgYSBzZXQgb2Ygc2Vzc2lvbiBrZXlzIHdpdGggb3B0aW9uYWxseSB1c2luZyB0aGUgZ2l2ZW4gc2VlZC4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2VlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCeXRlcz4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEJpZDoge1xuICAgICAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGtpbmQ6ICdCaWRLaW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgQmlkS2luZDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBEZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgVm91Y2g6ICcoQWNjb3VudElkLCBCYWxhbmNlKSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYSBzb2NpZXR5LXNwZWNpZmljIEp1ZGdlbWVudCAobm90IHRoZSBzYW1lIGFzIGlkZW50aXR5IEp1ZGdlbWVudClcbiAgICAgICAgU29jaWV0eUp1ZGdlbWVudDoge1xuICAgICAgICAgICAgX2VudW06IFsnUmViaWQnLCAnUmVqZWN0JywgJ0FwcHJvdmUnXVxuICAgICAgICB9LFxuICAgICAgICAvLyBhIHNvY2lldHktc3BlY2lmaWMgVm90ZVxuICAgICAgICBTb2NpZXR5Vm90ZToge1xuICAgICAgICAgICAgX2VudW06IFsnU2tlcHRpYycsICdSZWplY3QnLCAnQXBwcm92ZSddXG4gICAgICAgIH0sXG4gICAgICAgIFN0cmlrZUNvdW50OiAndTMyJyxcbiAgICAgICAgVm91Y2hpbmdTdGF0dXM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1ZvdWNoaW5nJywgJ0Jhbm5lZCddXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5jb25zdCBkZXByZWNhdGVkID0ge1xuICAgIFBvaW50czogJ3UzMicsXG4gICAgRXJhUG9pbnRzOiB7XG4gICAgICAgIHRvdGFsOiAnUG9pbnRzJyxcbiAgICAgICAgaW5kaXZpZHVhbDogJ1ZlYzxQb2ludHM+J1xuICAgIH1cbn07XG5jb25zdCBwaHJhZ21lbiA9IHtcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIENvbXBhY3RBc3NpZ25tZW50c1dpdGgxNjoge1xuICAgICAgICB2b3RlczE6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczI6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgQ29tcGFjdFNjb3JlQ29tcGFjdCwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczM6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDJdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzNDogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgM10sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXM1OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyA0XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczY6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDVdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzNzogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgNl0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXM4OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyA3XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3Rlczk6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDhdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTA6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDldLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTE6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDEwXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczEyOiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxMV0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxMzogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMTJdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTQ6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDEzXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczE1OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxNF0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxNjogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMTVdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPidcbiAgICB9LFxuICAgIENvbXBhY3RBc3NpZ25tZW50c1dpdGgyNDoge1xuICAgICAgICB2b3RlczE6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczI6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgQ29tcGFjdFNjb3JlQ29tcGFjdCwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczM6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDJdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzNDogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgM10sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXM1OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyA0XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczY6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDVdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzNzogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgNl0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXM4OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyA3XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3Rlczk6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDhdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTA6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDldLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTE6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDEwXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczEyOiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxMV0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxMzogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMTJdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTQ6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDEzXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczE1OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxNF0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxNjogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMTVdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTc6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDE2XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczE4OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxN10sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxOTogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMThdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMjA6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDE5XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczIxOiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAyMF0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMyMjogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMjFdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMjM6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDIyXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczI0OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAyM10sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+J1xuICAgIH0sXG4gICAgQ29tcGFjdEFzc2lnbm1lbnRzVG8yNjU6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIENvbXBhY3RBc3NpZ25tZW50c1RvMjU3OiB7XG4gICAgICAgIHZvdGVzMTogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDBdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXMyOiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgMV0sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3RlczM6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyAyXSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzNDogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDNdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXM1OiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgNF0sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3RlczY6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyA1XSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzNzogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDZdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXM4OiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgN10sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3Rlczk6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyA4XSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzMTA6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyA5XSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzMTE6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyAxMF0sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3RlczEyOiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgMTFdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXMxMzogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDEyXSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzMTQ6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyAxM10sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3RlczE1OiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgMTRdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXMxNjogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDE1XSwgVmFsaWRhdG9ySW5kZXgpPidcbiAgICB9LFxuICAgIENvbXBhY3RTY29yZTogJyhWYWxpZGF0b3JJbmRleCwgT2ZmY2hhaW5BY2N1cmFjeSknLFxuICAgIENvbXBhY3RTY29yZUNvbXBhY3Q6ICcoVmFsaWRhdG9ySW5kZXhDb21wYWN0LCBPZmZjaGFpbkFjY3VyYWN5Q29tcGFjdCknLFxuICAgIEVsZWN0aW9uQ29tcHV0ZToge1xuICAgICAgICAvLyBpbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGUgbGFzdCBlbnRyeSB3YXMgXCJBdXRob3JpdHlJZFwiXG4gICAgICAgIC8vIChzaW5jZSBubyBkYXRhIGF0dGFjaGVkLCBhbmQgaXQgaXMgdmlhIFNDQUxFIGNhbiByZW5hbWUpXG4gICAgICAgIF9lbnVtOiBbJ09uQ2hhaW4nLCAnU2lnbmVkJywgJ1Vuc2lnbmVkJ11cbiAgICB9LFxuICAgIEVsZWN0aW9uUGhhc2U6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIE9mZjogbnVsbCxcbiAgICAgICAgICAgIFNpZ25lZDogbnVsbCxcbiAgICAgICAgICAgIFVuc2lnbmVkOiAnKGJvb2wsIEJsb2NrTnVtYmVyKScsXG4gICAgICAgICAgICBFbWVyZ2VuY3k6IG51bGxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRWxlY3Rpb25SZXN1bHQ6IHtcbiAgICAgICAgY29tcHV0ZTogJ0VsZWN0aW9uQ29tcHV0ZScsXG4gICAgICAgIHNsb3RTdGFrZTogJ0JhbGFuY2UnLFxuICAgICAgICBlbGVjdGVkU3Rhc2hlczogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgZXhwb3N1cmVzOiAnVmVjPChBY2NvdW50SWQsIEV4cG9zdXJlKT4nXG4gICAgfSxcbiAgICBFbGVjdGlvblNjb3JlOiAnW3UxMjg7IDNdJyxcbiAgICBFbGVjdGlvblNpemU6IHtcbiAgICAgICAgdmFsaWRhdG9yczogJ0NvbXBhY3Q8VmFsaWRhdG9ySW5kZXg+JyxcbiAgICAgICAgbm9taW5hdG9yczogJ0NvbXBhY3Q8Tm9taW5hdG9ySW5kZXg+J1xuICAgIH0sXG4gICAgRWxlY3Rpb25TdGF0dXM6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENsb3NlOiAnTnVsbCcsXG4gICAgICAgICAgICBPcGVuOiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEV4dGVuZGVkQmFsYW5jZTogJ3UxMjgnLFxuICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMTYnLFxuICAgIFJhd1NvbHV0aW9uV2l0aDE2OiB7XG4gICAgICAgIGNvbXBhY3Q6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgICAgICBzY29yZTogJ0VsZWN0aW9uU2NvcmUnLFxuICAgICAgICByb3VuZDogJ3UzMidcbiAgICB9LFxuICAgIFJhd1NvbHV0aW9uV2l0aDI0OiB7XG4gICAgICAgIGNvbXBhY3Q6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMjQnLFxuICAgICAgICBzY29yZTogJ0VsZWN0aW9uU2NvcmUnLFxuICAgICAgICByb3VuZDogJ3UzMidcbiAgICB9LFxuICAgIFJhd1NvbHV0aW9uVG8yNjU6ICdSYXdTb2x1dGlvbldpdGgxNicsXG4gICAgUmVhZHlTb2x1dGlvbjoge1xuICAgICAgICBzdXBwb3J0czogJ1NvbHV0aW9uU3VwcG9ydHMnLFxuICAgICAgICBzY29yZTogJ0VsZWN0aW9uU2NvcmUnLFxuICAgICAgICBjb21wdXRlOiAnRWxlY3Rpb25Db21wdXRlJ1xuICAgIH0sXG4gICAgUm91bmRTbmFwc2hvdDoge1xuICAgICAgICB2b3RlcnM6ICdWZWM8KEFjY291bnRJZCwgVm90ZVdlaWdodCwgVmVjPEFjY291bnRJZD4pPicsXG4gICAgICAgIHRhcmdldHM6ICdWZWM8QWNjb3VudElkPidcbiAgICB9LFxuICAgIFNlYXRIb2xkZXI6IHtcbiAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgc3Rha2U6ICdCYWxhbmNlJyxcbiAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnXG4gICAgfSxcbiAgICBTaWduZWRTdWJtaXNzaW9uOiB7XG4gICAgICAgIF9mYWxsYmFjazogJ1NpZ25lZFN1Ym1pc3Npb25UbzI3NicsXG4gICAgICAgIHdobzogJ0FjY291bnRJZCcsXG4gICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJyxcbiAgICAgICAgc29sdXRpb246ICdSYXdTb2x1dGlvbicsXG4gICAgICAgIHJld2FyZDogJ0JhbGFuY2UnXG4gICAgfSxcbiAgICBTaWduZWRTdWJtaXNzaW9uVG8yNzY6IHtcbiAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICBzb2x1dGlvbjogJ1Jhd1NvbHV0aW9uJ1xuICAgIH0sXG4gICAgU2lnbmVkU3VibWlzc2lvbk9mOiAnU2lnbmVkU3VibWlzc2lvbicsXG4gICAgU29sdXRpb25PclNuYXBzaG90U2l6ZToge1xuICAgICAgICB2b3RlcnM6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICB0YXJnZXRzOiAnQ29tcGFjdDx1MzI+J1xuICAgIH0sXG4gICAgU29sdXRpb25TdXBwb3J0OiB7XG4gICAgICAgIHRvdGFsOiAnRXh0ZW5kZWRCYWxhbmNlJyxcbiAgICAgICAgdm90ZXJzOiAnVmVjPChBY2NvdW50SWQsIEV4dGVuZGVkQmFsYW5jZSk+J1xuICAgIH0sXG4gICAgU29sdXRpb25TdXBwb3J0czogJ1ZlYzwoQWNjb3VudElkLCBTb2x1dGlvblN1cHBvcnQpPicsXG4gICAgU3VwcG9ydHM6ICdTb2x1dGlvblN1cHBvcnRzJyxcbiAgICBTdWJtaXNzaW9uSW5kaWNlc09mOiAnQlRyZWVNYXA8RWxlY3Rpb25TY29yZSwgdTMyPicsXG4gICAgVm90ZXI6IHtcbiAgICAgICAgdm90ZXM6ICdWZWM8QWNjb3VudElkPicsXG4gICAgICAgIHN0YWtlOiAnQmFsYW5jZScsXG4gICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJ1xuICAgIH0sXG4gICAgVm90ZVdlaWdodDogJ3U2NCdcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIC4uLmRlcHJlY2F0ZWQsXG4gICAgICAgIC4uLnBocmFnbWVuLFxuICAgICAgICBBY3RpdmVFcmFJbmZvOiB7XG4gICAgICAgICAgICBpbmRleDogJ0VyYUluZGV4JyxcbiAgICAgICAgICAgIHN0YXJ0OiAnT3B0aW9uPE1vbWVudD4nXG4gICAgICAgIH0sXG4gICAgICAgIEVyYUluZGV4OiAndTMyJyxcbiAgICAgICAgRXJhUmV3YXJkUG9pbnRzOiB7XG4gICAgICAgICAgICB0b3RhbDogJ1Jld2FyZFBvaW50JyxcbiAgICAgICAgICAgIGluZGl2aWR1YWw6ICdCVHJlZU1hcDxBY2NvdW50SWQsIFJld2FyZFBvaW50PidcbiAgICAgICAgfSxcbiAgICAgICAgRXJhUmV3YXJkczoge1xuICAgICAgICAgICAgdG90YWw6ICd1MzInLFxuICAgICAgICAgICAgcmV3YXJkczogJ1ZlYzx1MzI+J1xuICAgICAgICB9LFxuICAgICAgICBFeHBvc3VyZToge1xuICAgICAgICAgICAgdG90YWw6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIG93bjogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgb3RoZXJzOiAnVmVjPEluZGl2aWR1YWxFeHBvc3VyZT4nXG4gICAgICAgIH0sXG4gICAgICAgIEZvcmNpbmc6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAgICAgJ05vdEZvcmNpbmcnLFxuICAgICAgICAgICAgICAgICdGb3JjZU5ldycsXG4gICAgICAgICAgICAgICAgJ0ZvcmNlTm9uZScsXG4gICAgICAgICAgICAgICAgJ0ZvcmNlQWx3YXlzJ1xuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBJbmRpdmlkdWFsRXhwb3N1cmU6IHtcbiAgICAgICAgICAgIHdobzogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB2YWx1ZTogJ0NvbXBhY3Q8QmFsYW5jZT4nXG4gICAgICAgIH0sXG4gICAgICAgIEtleVR5cGU6ICdBY2NvdW50SWQnLFxuICAgICAgICBNb21lbnRPZjogJ01vbWVudCcsXG4gICAgICAgIE5vbWluYXRpb25zOiB7XG4gICAgICAgICAgICB0YXJnZXRzOiAnVmVjPEFjY291bnRJZD4nLFxuICAgICAgICAgICAgc3VibWl0dGVkSW46ICdFcmFJbmRleCcsXG4gICAgICAgICAgICBzdXBwcmVzc2VkOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgTm9taW5hdG9ySW5kZXg6ICd1MzInLFxuICAgICAgICBOb21pbmF0b3JJbmRleENvbXBhY3Q6ICdDb21wYWN0PE5vbWluYXRvckluZGV4PicsXG4gICAgICAgIE9mZmNoYWluQWNjdXJhY3k6ICdQZXJVMTYnLFxuICAgICAgICBPZmZjaGFpbkFjY3VyYWN5Q29tcGFjdDogJ0NvbXBhY3Q8T2ZmY2hhaW5BY2N1cmFjeT4nLFxuICAgICAgICBQaHJhZ21lblNjb3JlOiAnW3UxMjg7IDNdJyxcbiAgICAgICAgUG9pbnRzOiAndTMyJyxcbiAgICAgICAgUmV3YXJkRGVzdGluYXRpb246IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgU3Rha2VkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgU3Rhc2g6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDb250cm9sbGVyOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQWNjb3VudDogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICAgICAgTm9uZTogJ051bGwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFJld2FyZFBvaW50OiAndTMyJyxcbiAgICAgICAgU2xhc2hKb3VybmFsRW50cnk6IHtcbiAgICAgICAgICAgIHdobzogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBhbW91bnQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIG93blNsYXNoOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgU2xhc2hpbmdTcGFuc1RvMjA0OiB7XG4gICAgICAgICAgICBzcGFuSW5kZXg6ICdTcGFuSW5kZXgnLFxuICAgICAgICAgICAgbGFzdFN0YXJ0OiAnRXJhSW5kZXgnLFxuICAgICAgICAgICAgcHJpb3I6ICdWZWM8RXJhSW5kZXg+J1xuICAgICAgICB9LFxuICAgICAgICBTbGFzaGluZ1NwYW5zOiB7XG4gICAgICAgICAgICBzcGFuSW5kZXg6ICdTcGFuSW5kZXgnLFxuICAgICAgICAgICAgbGFzdFN0YXJ0OiAnRXJhSW5kZXgnLFxuICAgICAgICAgICAgbGFzdE5vbnplcm9TbGFzaDogJ0VyYUluZGV4JyxcbiAgICAgICAgICAgIHByaW9yOiAnVmVjPEVyYUluZGV4PidcbiAgICAgICAgfSxcbiAgICAgICAgU3BhbkluZGV4OiAndTMyJyxcbiAgICAgICAgU3BhblJlY29yZDoge1xuICAgICAgICAgICAgc2xhc2hlZDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgcGFpZE91dDogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIFN0YWtpbmdMZWRnZXJUbzIyMzoge1xuICAgICAgICAgICAgc3Rhc2g6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgdG90YWw6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIGFjdGl2ZTogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgdW5sb2NraW5nOiAnVmVjPFVubG9ja0NodW5rPidcbiAgICAgICAgfSxcbiAgICAgICAgU3Rha2luZ0xlZGdlclRvMjQwOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdTdGFraW5nTGVkZ2VyVG8yMjMnLFxuICAgICAgICAgICAgc3Rhc2g6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgdG90YWw6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIGFjdGl2ZTogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgdW5sb2NraW5nOiAnVmVjPFVubG9ja0NodW5rPicsXG4gICAgICAgICAgICBsYXN0UmV3YXJkOiAnT3B0aW9uPEVyYUluZGV4PidcbiAgICAgICAgfSxcbiAgICAgICAgU3Rha2luZ0xlZGdlcjoge1xuICAgICAgICAgICAgc3Rhc2g6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgdG90YWw6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIGFjdGl2ZTogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgdW5sb2NraW5nOiAnVmVjPFVubG9ja0NodW5rPicsXG4gICAgICAgICAgICBjbGFpbWVkUmV3YXJkczogJ1ZlYzxFcmFJbmRleD4nXG4gICAgICAgIH0sXG4gICAgICAgIFVuYXBwbGllZFNsYXNoT3RoZXI6ICcoQWNjb3VudElkLCBCYWxhbmNlKScsXG4gICAgICAgIFVuYXBwbGllZFNsYXNoOiB7XG4gICAgICAgICAgICB2YWxpZGF0b3I6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgb3duOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBvdGhlcnM6ICdWZWM8VW5hcHBsaWVkU2xhc2hPdGhlcj4nLFxuICAgICAgICAgICAgcmVwb3J0ZXJzOiAnVmVjPEFjY291bnRJZD4nLFxuICAgICAgICAgICAgcGF5b3V0OiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgVW5sb2NrQ2h1bms6IHtcbiAgICAgICAgICAgIHZhbHVlOiAnQ29tcGFjdDxCYWxhbmNlPicsXG4gICAgICAgICAgICBlcmE6ICdDb21wYWN0PEJsb2NrTnVtYmVyPidcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICd1MTYnLFxuICAgICAgICBWYWxpZGF0b3JJbmRleENvbXBhY3Q6ICdDb21wYWN0PFZhbGlkYXRvckluZGV4PicsXG4gICAgICAgIFZhbGlkYXRvclByZWZzOiAnVmFsaWRhdG9yUHJlZnNXaXRoQmxvY2tlZCcsXG4gICAgICAgIFZhbGlkYXRvclByZWZzV2l0aENvbW1pc3Npb246IHtcbiAgICAgICAgICAgIGNvbW1pc3Npb246ICdDb21wYWN0PFBlcmJpbGw+J1xuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0b3JQcmVmc1dpdGhCbG9ja2VkOiB7XG4gICAgICAgICAgICBjb21taXNzaW9uOiAnQ29tcGFjdDxQZXJiaWxsPicsXG4gICAgICAgICAgICBibG9ja2VkOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdG9yUHJlZnNUbzE5Njoge1xuICAgICAgICAgICAgdmFsaWRhdG9yUGF5bWVudDogJ0NvbXBhY3Q8QmFsYW5jZT4nXG4gICAgICAgIH0sXG4gICAgICAgIFZhbGlkYXRvclByZWZzVG8xNDU6IHtcbiAgICAgICAgICAgIHVuc3Rha2VUaHJlc2hvbGQ6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgdmFsaWRhdG9yUGF5bWVudDogJ0NvbXBhY3Q8QmFsYW5jZT4nXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgU3Rha2luZ0FwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgbm9taW5hdGlvbnNfcXVvdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBub21pbmF0aW9ucyBxdW90YSBmb3IgYSBub21pbmF0b3Igd2l0aCBhIGdpdmVuIGJhbGFuY2UuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICBBcGlJZDogJ1t1ODsgOF0nLFxuICAgICAgICBCbG9ja1RyYWNlOiB7XG4gICAgICAgICAgICBibG9ja0hhc2g6ICdUZXh0JyxcbiAgICAgICAgICAgIHBhcmVudEhhc2g6ICdUZXh0JyxcbiAgICAgICAgICAgIHRyYWNpbmdUYXJnZXRzOiAnVGV4dCcsXG4gICAgICAgICAgICBzdG9yYWdlS2V5czogJ1RleHQnLFxuICAgICAgICAgICAgc3BhbnM6ICdWZWM8QmxvY2tUcmFjZVNwYW4+JyxcbiAgICAgICAgICAgIGV2ZW50czogJ1ZlYzxCbG9ja1RyYWNlRXZlbnQ+J1xuICAgICAgICB9LFxuICAgICAgICBCbG9ja1RyYWNlRXZlbnQ6IHtcbiAgICAgICAgICAgIHRhcmdldDogJ1RleHQnLFxuICAgICAgICAgICAgZGF0YTogJ0Jsb2NrVHJhY2VFdmVudERhdGEnLFxuICAgICAgICAgICAgcGFyZW50SWQ6ICdPcHRpb248dTY0PidcbiAgICAgICAgfSxcbiAgICAgICAgQmxvY2tUcmFjZUV2ZW50RGF0YToge1xuICAgICAgICAgICAgc3RyaW5nVmFsdWVzOiAnSGFzaE1hcDxUZXh0LCBUZXh0PidcbiAgICAgICAgfSxcbiAgICAgICAgQmxvY2tUcmFjZVNwYW46IHtcbiAgICAgICAgICAgIGlkOiAndTY0JyxcbiAgICAgICAgICAgIHBhcmVudElkOiAnT3B0aW9uPHU2ND4nLFxuICAgICAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICAgICAgdGFyZ2V0OiAnVGV4dCcsXG4gICAgICAgICAgICB3YXNtOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgS2V5VmFsdWVPcHRpb246ICcoU3RvcmFnZUtleSwgT3B0aW9uPFN0b3JhZ2VEYXRhPiknLFxuICAgICAgICBNaWdyYXRpb25TdGF0dXNSZXN1bHQ6IHtcbiAgICAgICAgICAgIHRvcFJlbWFpbmluZ1RvTWlncmF0ZTogJ3U2NCcsXG4gICAgICAgICAgICBjaGlsZFJlbWFpbmluZ1RvTWlncmF0ZTogJ3U2NCdcbiAgICAgICAgfSxcbiAgICAgICAgUmVhZFByb29mOiB7XG4gICAgICAgICAgICBhdDogJ0hhc2gnLFxuICAgICAgICAgICAgcHJvb2Y6ICdWZWM8Qnl0ZXM+J1xuICAgICAgICB9LFxuICAgICAgICBSdW50aW1lVmVyc2lvbkFwaTogJyhBcGlJZCwgdTMyKScsXG4gICAgICAgIFJ1bnRpbWVWZXJzaW9uOiB7XG4gICAgICAgICAgICBzcGVjTmFtZTogJ1RleHQnLFxuICAgICAgICAgICAgaW1wbE5hbWU6ICdUZXh0JyxcbiAgICAgICAgICAgIGF1dGhvcmluZ1ZlcnNpb246ICd1MzInLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246ICd1MzInLFxuICAgICAgICAgICAgaW1wbFZlcnNpb246ICd1MzInLFxuICAgICAgICAgICAgYXBpczogJ1ZlYzxSdW50aW1lVmVyc2lvbkFwaT4nLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIHN0YXRlVmVyc2lvbjogJ3U4J1xuICAgICAgICB9LFxuICAgICAgICBSdW50aW1lVmVyc2lvblByZTQ6IHtcbiAgICAgICAgICAgIHNwZWNOYW1lOiAnVGV4dCcsXG4gICAgICAgICAgICBpbXBsTmFtZTogJ1RleHQnLFxuICAgICAgICAgICAgYXV0aG9yaW5nVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBpbXBsVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBhcGlzOiAnVmVjPFJ1bnRpbWVWZXJzaW9uQXBpPicsXG4gICAgICAgICAgICB0cmFuc2FjdGlvblZlcnNpb246ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFJ1bnRpbWVWZXJzaW9uUHJlMzoge1xuICAgICAgICAgICAgc3BlY05hbWU6ICdUZXh0JyxcbiAgICAgICAgICAgIGltcGxOYW1lOiAnVGV4dCcsXG4gICAgICAgICAgICBhdXRob3JpbmdWZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIGltcGxWZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIGFwaXM6ICdWZWM8UnVudGltZVZlcnNpb25BcGk+J1xuICAgICAgICB9LFxuICAgICAgICBSdW50aW1lVmVyc2lvblBhcnRpYWw6IHtcbiAgICAgICAgICAgIHNwZWNOYW1lOiAnVGV4dCcsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBhcGlzOiAnVmVjPFJ1bnRpbWVWZXJzaW9uQXBpPidcbiAgICAgICAgfSxcbiAgICAgICAgU3BlY1ZlcnNpb246ICd1MzInLFxuICAgICAgICBTdG9yYWdlQ2hhbmdlU2V0OiB7XG4gICAgICAgICAgICBibG9jazogJ0hhc2gnLFxuICAgICAgICAgICAgY2hhbmdlczogJ1ZlYzxLZXlWYWx1ZU9wdGlvbj4nXG4gICAgICAgIH0sXG4gICAgICAgIFRyYWNlQmxvY2tSZXNwb25zZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBUcmFjZUVycm9yOiAnVHJhY2VFcnJvcicsXG4gICAgICAgICAgICAgICAgQmxvY2tUcmFjZTogJ0Jsb2NrVHJhY2UnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFRyYWNlRXJyb3I6IHtcbiAgICAgICAgICAgIGVycm9yOiAnVGV4dCdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGNhbGw6IHtcbiAgICAgICAgYWxpYXM6IFsnc3RhdGVfY2FsbEF0J10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUGVyZm9ybSBhIGNhbGwgdG8gYSBidWlsdGluIG9uIHRoZSBjaGFpbicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtZXRob2QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdUZXh0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgfSxcbiAgICBnZXRDaGlsZEtleXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIGtleXMgd2l0aCBwcmVmaXggb2YgYSBzcGVjaWZpYyBjaGlsZCBzdG9yYWdlJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkU3RvcmFnZUtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZERlZmluaXRpb24nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGRUeXBlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxTdG9yYWdlS2V5PidcbiAgICB9LFxuICAgIGdldENoaWxkUmVhZFByb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBwcm9vZiBvZiBzdG9yYWdlIGZvciBjaGlsZCBrZXkgZW50cmllcyBhdCBhIHNwZWNpZmljIGJsb2NrIHN0YXRlLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZFN0b3JhZ2VLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcmVmaXhlZFN0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXlzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVhZFByb29mJ1xuICAgIH0sXG4gICAgZ2V0Q2hpbGRTdG9yYWdlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIHRoZSBjaGlsZCBzdG9yYWdlIGZvciBhIGtleScsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZFN0b3JhZ2VLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdTdG9yYWdlRGF0YSdcbiAgICB9LFxuICAgIGdldENoaWxkU3RvcmFnZUhhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIGNoaWxkIHN0b3JhZ2UgaGFzaCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZFN0b3JhZ2VLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgIH0sXG4gICAgZ2V0Q2hpbGRTdG9yYWdlU2l6ZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgY2hpbGQgc3RvcmFnZSBzaXplJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkU3RvcmFnZUtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZERlZmluaXRpb24nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGRUeXBlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ3U2NCdcbiAgICB9LFxuICAgIGdldEtleXM6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSBgYXBpLnJwYy5zdGF0ZS5nZXRLZXlzUGFnZWRgIHRvIHJldHJpZXZlIGtleXMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUga2V5cyB3aXRoIGEgY2VydGFpbiBwcmVmaXgnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxTdG9yYWdlS2V5PidcbiAgICB9LFxuICAgIGdldEtleXNQYWdlZDoge1xuICAgICAgICBhbGlhczogWydzdGF0ZV9nZXRLZXlzUGFnZWRBdCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGtleXMgd2l0aCBwcmVmaXggd2l0aCBwYWdpbmF0aW9uIHN1cHBvcnQuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjb3VudCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RhcnRLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgIH0sXG4gICAgZ2V0TWV0YWRhdGE6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBydW50aW1lIG1ldGFkYXRhJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ01ldGFkYXRhJ1xuICAgIH0sXG4gICAgZ2V0UGFpcnM6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSBgYXBpLnJwYy5zdGF0ZS5nZXRLZXlzUGFnZWRgIHRvIHJldHJpZXZlIGtleXMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGtleXMgd2l0aCBwcmVmaXgsIGxlYXZlIGVtcHR5IHRvIGdldCBhbGwgdGhlIGtleXMgKGRlcHJlY2F0ZWQ6IFVzZSBnZXRLZXlzUGFnZWQpJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwcmVmaXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPEtleVZhbHVlPidcbiAgICB9LFxuICAgIGdldFJlYWRQcm9vZjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgcHJvb2Ygb2Ygc3RvcmFnZSBlbnRyaWVzIGF0IGEgc3BlY2lmaWMgYmxvY2sgc3RhdGUnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5cycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxTdG9yYWdlS2V5PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1JlYWRQcm9vZidcbiAgICB9LFxuICAgIGdldFJ1bnRpbWVWZXJzaW9uOiB7XG4gICAgICAgIGFsaWFzOiBbJ2NoYWluX2dldFJ1bnRpbWVWZXJzaW9uJ10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBydW50aW1lIHZlcnNpb24nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUnVudGltZVZlcnNpb24nXG4gICAgfSxcbiAgICBnZXRTdG9yYWdlOiB7XG4gICAgICAgIGFsaWFzOiBbJ3N0YXRlX2dldFN0b3JhZ2VBdCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgc3RvcmFnZSBmb3IgYSBrZXknLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1N0b3JhZ2VEYXRhJ1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZUhhc2g6IHtcbiAgICAgICAgYWxpYXM6IFsnc3RhdGVfZ2V0U3RvcmFnZUhhc2hBdCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgc3RvcmFnZSBoYXNoJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZVNpemU6IHtcbiAgICAgICAgYWxpYXM6IFsnc3RhdGVfZ2V0U3RvcmFnZVNpemVBdCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgc3RvcmFnZSBzaXplJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICd1NjQnXG4gICAgfSxcbiAgICBxdWVyeVN0b3JhZ2U6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSBoaXN0b3JpY2FsIHN0b3JhZ2UgZW50cmllcyAoYnkga2V5KSBzdGFydGluZyBmcm9tIGEgc3RhcnQgYmxvY2snLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8U3RvcmFnZUtleT4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmcm9tQmxvY2snLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0b0Jsb2NrJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VDaGFuZ2VTZXQ+J1xuICAgIH0sXG4gICAgcXVlcnlTdG9yYWdlQXQ6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSBzdG9yYWdlIGVudHJpZXMgKGJ5IGtleSkgc3RhcnRpbmcgYXQgYmxvY2sgaGFzaCBnaXZlbiBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlcicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXlzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VDaGFuZ2VTZXQ+J1xuICAgIH0sXG4gICAgc3Vic2NyaWJlUnVudGltZVZlcnNpb246IHtcbiAgICAgICAgYWxpYXM6IFsnY2hhaW5fc3Vic2NyaWJlUnVudGltZVZlcnNpb24nLCAnY2hhaW5fdW5zdWJzY3JpYmVSdW50aW1lVmVyc2lvbiddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgcnVudGltZSB2ZXJzaW9uIHZpYSBzdWJzY3JpcHRpb24nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICBwdWJzdWI6IFtcbiAgICAgICAgICAgICdydW50aW1lVmVyc2lvbicsXG4gICAgICAgICAgICAnc3Vic2NyaWJlUnVudGltZVZlcnNpb24nLFxuICAgICAgICAgICAgJ3Vuc3Vic2NyaWJlUnVudGltZVZlcnNpb24nXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSdW50aW1lVmVyc2lvbidcbiAgICB9LFxuICAgIHN1YnNjcmliZVN0b3JhZ2U6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJzY3JpYmVzIHRvIHN0b3JhZ2UgY2hhbmdlcyBmb3IgdGhlIHByb3ZpZGVkIGtleXMnLFxuICAgICAgICAvLyBOT1RFIEp1c3QgbWFya2luZyBpdCBoZXJlIHRvIGZvbGxvdyB0aGUgbG9naWMgLSB0aGlzIGlzIHVuc2FmZSB3aGVuIG5vXG4gICAgICAgIC8vIGtleXMgYXJlIHByb3ZpZGVkIChpLmUuIHN1YnNjcmliaW5nIHRvIGFsbCksIGdlbmVyYWxseSB0aGlzIGlzIHVzZWRcbiAgICAgICAgLy8gZXh0ZW5zaXZlbHkgd2l0aCBub3JtYWwgc3Vic2NyaXB0aW9uc1xuICAgICAgICAvLyBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5cycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxTdG9yYWdlS2V5PidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcHVic3ViOiBbXG4gICAgICAgICAgICAnc3RvcmFnZScsXG4gICAgICAgICAgICAnc3Vic2NyaWJlU3RvcmFnZScsXG4gICAgICAgICAgICAndW5zdWJzY3JpYmVTdG9yYWdlJ1xuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnU3RvcmFnZUNoYW5nZVNldCdcbiAgICB9LFxuICAgIHRyYWNlQmxvY2s6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQcm92aWRlcyBhIHdheSB0byB0cmFjZSB0aGUgcmUtZXhlY3V0aW9uIG9mIGEgc2luZ2xlIGJsb2NrJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0YXJnZXRzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFRleHQ+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RvcmFnZUtleXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VGV4dD4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtZXRob2RzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFRleHQ+J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVHJhY2VCbG9ja1Jlc3BvbnNlJ1xuICAgIH0sXG4gICAgdHJpZU1pZ3JhdGlvblN0YXR1czoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0NoZWNrIGN1cnJlbnQgbWlncmF0aW9uIHN0YXRlJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdNaWdyYXRpb25TdGF0dXNSZXN1bHQnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBTdGF0ZW1lbnRTdG9yZVN0YXRlbWVudFNvdXJjZToge1xuICAgICAgICAgICAgX2VudW06IFsnQ2hhaW4nLCAnTmV0d29yaycsICdMb2NhbCddXG4gICAgICAgIH0sXG4gICAgICAgIFN0YXRlbWVudFN0b3JlVmFsaWRTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgIG1heENvdW50OiAndTMyJyxcbiAgICAgICAgICAgIG1heFNpemU6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFN0YXRlbWVudFN0b3JlSW52YWxpZFN0YXRlbWVudDoge1xuICAgICAgICAgICAgX2VudW06IFsnQmFkUHJvb2YnLCAnTm9Qcm9vZicsICdJbnRlcm5hbEVycm9yJ11cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBWYWxpZGF0ZVN0YXRlbWVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdmFsZGF0ZV9zdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdWYWxpZGF0ZSB0aGUgc3RhdGVtZW50LicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzb3VyY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTdGF0ZW1lbnRTdG9yZVN0YXRlbWVudFNvdXJjZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3N0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1NwU3RhdGVtZW50U3RvcmVTdGF0ZW1lbnQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdSZXN1bHQ8U3RhdGVtZW50U3RvcmVWYWxpZFN0YXRlbWVudCwgU3RhdGVtZW50U3RvcmVJbnZhbGlkU3RhdGVtZW50PidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIFdlaWdodFRvRmVlQ29lZmZpY2llbnQ6IHtcbiAgICAgICAgICAgIGNvZWZmSW50ZWdlcjogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgY29lZmZGcmFjOiAnUGVyYmlsbCcsXG4gICAgICAgICAgICBuZWdhdGl2ZTogJ2Jvb2wnLFxuICAgICAgICAgICAgZGVncmVlOiAndTgnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge31cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGdlblN5bmNTcGVjOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUganNvbi1zZXJpYWxpemVkIGNoYWluc3BlYyBydW5uaW5nIHRoZSBub2RlLCB3aXRoIGEgc3luYyBzdGF0ZS4nLFxuICAgICAgICBlbmRwb2ludDogJ3N5bmNfc3RhdGVfZ2VuU3luY1NwZWMnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncmF3JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0pzb24nXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjLmpzJztcbmltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjY291bnRJbmZvOiAnQWNjb3VudEluZm9XaXRoVHJpcGxlUmVmQ291bnQnLFxuICAgICAgICBBY2NvdW50SW5mb1dpdGhSZWZDb3VudFU4OiB7XG4gICAgICAgICAgICBub25jZTogJ0luZGV4JyxcbiAgICAgICAgICAgIHJlZmNvdW50OiAndTgnLFxuICAgICAgICAgICAgZGF0YTogJ0FjY291bnREYXRhJ1xuICAgICAgICB9LFxuICAgICAgICBBY2NvdW50SW5mb1dpdGhSZWZDb3VudDoge1xuICAgICAgICAgICAgX2ZhbGxiYWNrOiAnQWNjb3VudEluZm9XaXRoUmVmQ291bnRVOCcsXG4gICAgICAgICAgICBub25jZTogJ0luZGV4JyxcbiAgICAgICAgICAgIHJlZmNvdW50OiAnUmVmQ291bnQnLFxuICAgICAgICAgICAgZGF0YTogJ0FjY291bnREYXRhJ1xuICAgICAgICB9LFxuICAgICAgICBBY2NvdW50SW5mb1dpdGhEdWFsUmVmQ291bnQ6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ0FjY291bnRJbmZvV2l0aFJlZkNvdW50JyxcbiAgICAgICAgICAgIG5vbmNlOiAnSW5kZXgnLFxuICAgICAgICAgICAgY29uc3VtZXJzOiAnUmVmQ291bnQnLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiAnUmVmQ291bnQnLFxuICAgICAgICAgICAgZGF0YTogJ0FjY291bnREYXRhJ1xuICAgICAgICB9LFxuICAgICAgICAvLyBvcmlnaW5hbCBuYW1pbmdcbiAgICAgICAgQWNjb3VudEluZm9XaXRoUHJvdmlkZXJzOiAnQWNjb3VudEluZm9XaXRoRHVhbFJlZkNvdW50JyxcbiAgICAgICAgQWNjb3VudEluZm9XaXRoVHJpcGxlUmVmQ291bnQ6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ0FjY291bnRJbmZvV2l0aER1YWxSZWZDb3VudCcsXG4gICAgICAgICAgICBub25jZTogJ0luZGV4JyxcbiAgICAgICAgICAgIGNvbnN1bWVyczogJ1JlZkNvdW50JyxcbiAgICAgICAgICAgIHByb3ZpZGVyczogJ1JlZkNvdW50JyxcbiAgICAgICAgICAgIHN1ZmZpY2llbnRzOiAnUmVmQ291bnQnLFxuICAgICAgICAgICAgZGF0YTogJ0FjY291bnREYXRhJ1xuICAgICAgICB9LFxuICAgICAgICBBcHBseUV4dHJpbnNpY1Jlc3VsdDogJ1Jlc3VsdDxEaXNwYXRjaE91dGNvbWUsIFRyYW5zYWN0aW9uVmFsaWRpdHlFcnJvcj4nLFxuICAgICAgICBBcHBseUV4dHJpbnNpY1Jlc3VsdFByZTY6ICdSZXN1bHQ8RGlzcGF0Y2hPdXRjb21lUHJlNiwgVHJhbnNhY3Rpb25WYWxpZGl0eUVycm9yPicsXG4gICAgICAgIEFyaXRobWV0aWNFcnJvcjoge1xuICAgICAgICAgICAgX2VudW06IFtcbiAgICAgICAgICAgICAgICAnVW5kZXJmbG93JyxcbiAgICAgICAgICAgICAgICAnT3ZlcmZsb3cnLFxuICAgICAgICAgICAgICAgICdEaXZpc2lvbkJ5WmVybydcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgQmxvY2tMZW5ndGg6IHtcbiAgICAgICAgICAgIG1heDogJ1BlckRpc3BhdGNoQ2xhc3NVMzInXG4gICAgICAgIH0sXG4gICAgICAgIEJsb2NrV2VpZ2h0czoge1xuICAgICAgICAgICAgYmFzZUJsb2NrOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIG1heEJsb2NrOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHBlckNsYXNzOiAnUGVyRGlzcGF0Y2hDbGFzc1dlaWdodHNQZXJDbGFzcydcbiAgICAgICAgfSxcbiAgICAgICAgQ2hhaW5Qcm9wZXJ0aWVzOiAnR2VuZXJpY0NoYWluUHJvcGVydGllcycsXG4gICAgICAgIENoYWluVHlwZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBEZXZlbG9wbWVudDogJ051bGwnLFxuICAgICAgICAgICAgICAgIExvY2FsOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgTGl2ZTogJ051bGwnLFxuICAgICAgICAgICAgICAgIEN1c3RvbTogJ1RleHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENvbnN1bWVkV2VpZ2h0OiAnUGVyRGlzcGF0Y2hDbGFzc1dlaWdodCcsXG4gICAgICAgIERpZ2VzdE9mOiAnRGlnZXN0JyxcbiAgICAgICAgRGlzcGF0Y2hDbGFzczoge1xuICAgICAgICAgICAgX2VudW06IFsnTm9ybWFsJywgJ09wZXJhdGlvbmFsJywgJ01hbmRhdG9yeSddXG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoRXJyb3I6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgT3RoZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDYW5ub3RMb29rdXA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRPcmlnaW46ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlJyxcbiAgICAgICAgICAgICAgICBDb25zdW1lclJlbWFpbmluZzogJ051bGwnLFxuICAgICAgICAgICAgICAgIE5vUHJvdmlkZXJzOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgVG9vTWFueUNvbnN1bWVyczogJ051bGwnLFxuICAgICAgICAgICAgICAgIFRva2VuOiAnVG9rZW5FcnJvcicsXG4gICAgICAgICAgICAgICAgQXJpdGhtZXRpYzogJ0FyaXRobWV0aWNFcnJvcicsXG4gICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25hbDogJ1RyYW5zYWN0aW9uYWxFcnJvcicsXG4gICAgICAgICAgICAgICAgRXhoYXVzdGVkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQ29ycnVwdGlvbjogJ051bGwnLFxuICAgICAgICAgICAgICAgIFVuYXZhaWxhYmxlOiAnTnVsbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRGlzcGF0Y2hFcnJvclByZTY6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgT3RoZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDYW5ub3RMb29rdXA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRPcmlnaW46ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlUHJlNicsXG4gICAgICAgICAgICAgICAgQ29uc3VtZXJSZW1haW5pbmc6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBOb1Byb3ZpZGVyczogJ051bGwnLFxuICAgICAgICAgICAgICAgIFRvb01hbnlDb25zdW1lcnM6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBUb2tlbjogJ1Rva2VuRXJyb3InLFxuICAgICAgICAgICAgICAgIEFyaXRobWV0aWM6ICdBcml0aG1ldGljRXJyb3InLFxuICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uYWw6ICdUcmFuc2FjdGlvbmFsRXJyb3InXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoRXJyb3JQcmU2Rmlyc3Q6IHtcbiAgICAgICAgICAgIC8vIFRoZSBlbnVtIHdhcyBtb2RpZmllZCBtaWQtZmxpZ2h0LCBhZmZlY3RpbmcgYXNzZXQgY2hhaW5zIC1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9wdWxsLzEwMzgyL2ZpbGVzI2RpZmYtZTRlMDE2YjMzYTgyMjY4YjYyMDhkYzk3NGVlYTg0MWJhZDQ3NTk3ODY1YTc0OWZlZTJmOTM3ZWI2ZmRmNjdiNFI0OThcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgT3RoZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDYW5ub3RMb29rdXA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRPcmlnaW46ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlUHJlNicsXG4gICAgICAgICAgICAgICAgQ29uc3VtZXJSZW1haW5pbmc6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBOb1Byb3ZpZGVyczogJ051bGwnLFxuICAgICAgICAgICAgICAgIFRva2VuOiAnVG9rZW5FcnJvcicsXG4gICAgICAgICAgICAgICAgQXJpdGhtZXRpYzogJ0FyaXRobWV0aWNFcnJvcicsXG4gICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25hbDogJ1RyYW5zYWN0aW9uYWxFcnJvcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRGlzcGF0Y2hFcnJvck1vZHVsZVU4OiB7XG4gICAgICAgICAgICBpbmRleDogJ3U4JyxcbiAgICAgICAgICAgIGVycm9yOiAndTgnXG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoRXJyb3JNb2R1bGVVOGE6IHtcbiAgICAgICAgICAgIGluZGV4OiAndTgnLFxuICAgICAgICAgICAgZXJyb3I6ICdbdTg7IDRdJ1xuICAgICAgICB9LFxuICAgICAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4YScsXG4gICAgICAgIERpc3BhdGNoRXJyb3JNb2R1bGVQcmU2OiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICAgICAgRGlzcGF0Y2hFcnJvclRvMTk4OiB7XG4gICAgICAgICAgICBtb2R1bGU6ICdPcHRpb248dTg+JyxcbiAgICAgICAgICAgIGVycm9yOiAndTgnXG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoSW5mbzoge1xuICAgICAgICAgICAgd2VpZ2h0OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNsYXNzOiAnRGlzcGF0Y2hDbGFzcycsXG4gICAgICAgICAgICBwYXlzRmVlOiAnUGF5cydcbiAgICAgICAgfSxcbiAgICAgICAgRGlzcGF0Y2hJbmZvVG8xOTA6IHtcbiAgICAgICAgICAgIHdlaWdodDogJ1dlaWdodCcsXG4gICAgICAgICAgICBjbGFzczogJ0Rpc3BhdGNoQ2xhc3MnXG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoSW5mb1RvMjQ0OiB7XG4gICAgICAgICAgICB3ZWlnaHQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgY2xhc3M6ICdEaXNwYXRjaENsYXNzJyxcbiAgICAgICAgICAgIHBheXNGZWU6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBEaXNwYXRjaE91dGNvbWU6ICdSZXN1bHQ8KCksIERpc3BhdGNoRXJyb3I+JyxcbiAgICAgICAgRGlzcGF0Y2hPdXRjb21lUHJlNjogJ1Jlc3VsdDwoKSwgRGlzcGF0Y2hFcnJvclByZTY+JyxcbiAgICAgICAgRGlzcGF0Y2hSZXN1bHQ6ICdSZXN1bHQ8KCksIERpc3BhdGNoRXJyb3I+JyxcbiAgICAgICAgRGlzcGF0Y2hSZXN1bHRPZjogJ0Rpc3BhdGNoUmVzdWx0JyxcbiAgICAgICAgRGlzcGF0Y2hSZXN1bHRUbzE5ODogJ1Jlc3VsdDwoKSwgVGV4dD4nLFxuICAgICAgICBFdmVudDogJ0dlbmVyaWNFdmVudCcsXG4gICAgICAgIEV2ZW50SWQ6ICdbdTg7IDJdJyxcbiAgICAgICAgRXZlbnRJbmRleDogJ3UzMicsXG4gICAgICAgIEV2ZW50UmVjb3JkOiB7XG4gICAgICAgICAgICBwaGFzZTogJ1BoYXNlJyxcbiAgICAgICAgICAgIGV2ZW50OiAnRXZlbnQnLFxuICAgICAgICAgICAgdG9waWNzOiAnVmVjPEhhc2g+J1xuICAgICAgICB9LFxuICAgICAgICBIZWFsdGg6IHtcbiAgICAgICAgICAgIHBlZXJzOiAndTY0JyxcbiAgICAgICAgICAgIGlzU3luY2luZzogJ2Jvb2wnLFxuICAgICAgICAgICAgc2hvdWxkSGF2ZVBlZXJzOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgSW52YWxpZFRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIENhbGw6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBQYXltZW50OiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgRnV0dXJlOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgU3RhbGU6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRQcm9vZjogJ051bGwnLFxuICAgICAgICAgICAgICAgIEFuY2llbnRCaXJ0aEJsb2NrOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgRXhoYXVzdHNSZXNvdXJjZXM6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDdXN0b206ICd1OCcsXG4gICAgICAgICAgICAgICAgQmFkTWFuZGF0b3J5OiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgTWFuZGF0b3J5RGlzcGF0Y2g6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRTaWduZXI6ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBLZXk6ICdCeXRlcycsXG4gICAgICAgIExhc3RSdW50aW1lVXBncmFkZUluZm86IHtcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIHNwZWNOYW1lOiAnVGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAgTmV0d29ya1N0YXRlOiB7XG4gICAgICAgICAgICBwZWVySWQ6ICdUZXh0JyxcbiAgICAgICAgICAgIGxpc3RlbmVkQWRkcmVzc2VzOiAnVmVjPFRleHQ+JyxcbiAgICAgICAgICAgIGV4dGVybmFsQWRkcmVzc2VzOiAnVmVjPFRleHQ+JyxcbiAgICAgICAgICAgIGNvbm5lY3RlZFBlZXJzOiAnSGFzaE1hcDxUZXh0LCBQZWVyPicsXG4gICAgICAgICAgICBub3RDb25uZWN0ZWRQZWVyczogJ0hhc2hNYXA8VGV4dCwgTm90Q29ubmVjdGVkUGVlcj4nLFxuICAgICAgICAgICAgYXZlcmFnZURvd25sb2FkUGVyU2VjOiAndTY0JyxcbiAgICAgICAgICAgIGF2ZXJhZ2VVcGxvYWRQZXJTZWM6ICd1NjQnLFxuICAgICAgICAgICAgcGVlcnNldDogJ05ldHdvcmtTdGF0ZVBlZXJzZXQnXG4gICAgICAgIH0sXG4gICAgICAgIE5ldHdvcmtTdGF0ZVBlZXJzZXQ6IHtcbiAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZTogJ3U2NCcsXG4gICAgICAgICAgICBub2RlczogJ0hhc2hNYXA8VGV4dCwgTmV0d29ya1N0YXRlUGVlcnNldEluZm8+J1xuICAgICAgICB9LFxuICAgICAgICBOZXR3b3JrU3RhdGVQZWVyc2V0SW5mbzoge1xuICAgICAgICAgICAgY29ubmVjdGVkOiAnYm9vbCcsXG4gICAgICAgICAgICByZXB1dGF0aW9uOiAnaTMyJ1xuICAgICAgICB9LFxuICAgICAgICBOb2RlUm9sZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBGdWxsOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgTGlnaHRDbGllbnQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBBdXRob3JpdHk6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBVbmtub3duUm9sZTogJ3U4J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBOb3RDb25uZWN0ZWRQZWVyOiB7XG4gICAgICAgICAgICBrbm93bkFkZHJlc3NlczogJ1ZlYzxUZXh0PicsXG4gICAgICAgICAgICBsYXRlc3RQaW5nVGltZTogJ09wdGlvbjxQZWVyUGluZz4nLFxuICAgICAgICAgICAgdmVyc2lvblN0cmluZzogJ09wdGlvbjxUZXh0PidcbiAgICAgICAgfSxcbiAgICAgICAgUGVlcjoge1xuICAgICAgICAgICAgZW5hYmxlZDogJ2Jvb2wnLFxuICAgICAgICAgICAgZW5kcG9pbnQ6ICdQZWVyRW5kcG9pbnQnLFxuICAgICAgICAgICAga25vd25BZGRyZXNzZXM6ICdWZWM8VGV4dD4nLFxuICAgICAgICAgICAgbGF0ZXN0UGluZ1RpbWU6ICdQZWVyUGluZycsXG4gICAgICAgICAgICBvcGVuOiAnYm9vbCcsXG4gICAgICAgICAgICB2ZXJzaW9uU3RyaW5nOiAnVGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAgUGVlckVuZHBvaW50OiB7XG4gICAgICAgICAgICBsaXN0ZW5pbmc6ICdQZWVyRW5kcG9pbnRBZGRyJ1xuICAgICAgICB9LFxuICAgICAgICBQZWVyRW5kcG9pbnRBZGRyOiB7XG4gICAgICAgICAgICBfYWxpYXM6IHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkZHI6ICdsb2NhbF9hZGRyJyxcbiAgICAgICAgICAgICAgICBzZW5kQmFja0FkZHI6ICdzZW5kX2JhY2tfYWRkcidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2NhbEFkZHI6ICdUZXh0JyxcbiAgICAgICAgICAgIHNlbmRCYWNrQWRkcjogJ1RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIFBlZXJQaW5nOiB7XG4gICAgICAgICAgICBuYW5vczogJ3U2NCcsXG4gICAgICAgICAgICBzZWNzOiAndTY0J1xuICAgICAgICB9LFxuICAgICAgICBQZWVySW5mbzoge1xuICAgICAgICAgICAgcGVlcklkOiAnVGV4dCcsXG4gICAgICAgICAgICByb2xlczogJ1RleHQnLFxuICAgICAgICAgICAgcHJvdG9jb2xWZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIGJlc3RIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICBiZXN0TnVtYmVyOiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIFBlckRpc3BhdGNoQ2xhc3NVMzI6IHtcbiAgICAgICAgICAgIG5vcm1hbDogJ3UzMicsXG4gICAgICAgICAgICBvcGVyYXRpb25hbDogJ3UzMicsXG4gICAgICAgICAgICBtYW5kYXRvcnk6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFBlckRpc3BhdGNoQ2xhc3NXZWlnaHQ6IHtcbiAgICAgICAgICAgIG5vcm1hbDogJ1dlaWdodCcsXG4gICAgICAgICAgICBvcGVyYXRpb25hbDogJ1dlaWdodCcsXG4gICAgICAgICAgICBtYW5kYXRvcnk6ICdXZWlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIFBlckRpc3BhdGNoQ2xhc3NXZWlnaHRzUGVyQ2xhc3M6IHtcbiAgICAgICAgICAgIG5vcm1hbDogJ1dlaWdodFBlckNsYXNzJyxcbiAgICAgICAgICAgIG9wZXJhdGlvbmFsOiAnV2VpZ2h0UGVyQ2xhc3MnLFxuICAgICAgICAgICAgbWFuZGF0b3J5OiAnV2VpZ2h0UGVyQ2xhc3MnXG4gICAgICAgIH0sXG4gICAgICAgIFBoYXNlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIEFwcGx5RXh0cmluc2ljOiAndTMyJyxcbiAgICAgICAgICAgICAgICBGaW5hbGl6YXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbjogJ051bGwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFJhd09yaWdpbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBSb290OiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgU2lnbmVkOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgICAgICBOb25lOiAnTnVsbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUmVmQ291bnQ6ICd1MzInLFxuICAgICAgICBSZWZDb3VudFRvMjU5OiAndTgnLFxuICAgICAgICBTeW5jU3RhdGU6IHtcbiAgICAgICAgICAgIHN0YXJ0aW5nQmxvY2s6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBjdXJyZW50QmxvY2s6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBoaWdoZXN0QmxvY2s6ICdPcHRpb248QmxvY2tOdW1iZXI+J1xuICAgICAgICB9LFxuICAgICAgICBTeXN0ZW1PcmlnaW46ICdSYXdPcmlnaW4nLFxuICAgICAgICBUb2tlbkVycm9yOiB7XG4gICAgICAgICAgICBfZW51bTogW1xuICAgICAgICAgICAgICAgICdOb0Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnV291bGREaWUnLFxuICAgICAgICAgICAgICAgICdCZWxvd01pbmltdW0nLFxuICAgICAgICAgICAgICAgICdDYW5ub3RDcmVhdGUnLFxuICAgICAgICAgICAgICAgICdVbmtub3duQXNzZXQnLFxuICAgICAgICAgICAgICAgICdGcm96ZW4nLFxuICAgICAgICAgICAgICAgICdVbnN1cHBvcnRlZCcsXG4gICAgICAgICAgICAgICAgLy8gdGhlc2UgYXJlIGRyb3BwZWQsIGJ1dCBzdGlsbCBpbiBvbGRlciB2ZXJzaW9uc1xuICAgICAgICAgICAgICAgIC8vIChpZiB0aGlzIGFkanVzdHMsIHdpbGwgbmVlZCB0byB0YWtlIGEgcmUtbG9vaylcbiAgICAgICAgICAgICAgICAnVW5kZXJmbG93JyxcbiAgICAgICAgICAgICAgICAnT3ZlcmZsb3cnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFRyYW5zYWN0aW9uVmFsaWRpdHlFcnJvcjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBJbnZhbGlkOiAnSW52YWxpZFRyYW5zYWN0aW9uJyxcbiAgICAgICAgICAgICAgICBVbmtub3duOiAnVW5rbm93blRyYW5zYWN0aW9uJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBUcmFuc2FjdGlvbmFsRXJyb3I6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAgICAgJ0xpbWl0UmVhY2hlZCcsXG4gICAgICAgICAgICAgICAgJ05vTGF5ZXInXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFVua25vd25UcmFuc2FjdGlvbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBDYW5ub3RMb29rdXA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBOb1Vuc2lnbmVkVmFsaWRhdG9yOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQ3VzdG9tOiAndTgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFdlaWdodFBlckNsYXNzOiB7XG4gICAgICAgICAgICBiYXNlRXh0cmluc2ljOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIG1heEV4dHJpbnNpYzogJ09wdGlvbjxXZWlnaHQ+JyxcbiAgICAgICAgICAgIG1heFRvdGFsOiAnT3B0aW9uPFdlaWdodD4nLFxuICAgICAgICAgICAgcmVzZXJ2ZWQ6ICdPcHRpb248V2VpZ2h0PidcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGFjY291bnROZXh0SW5kZXg6IHtcbiAgICAgICAgYWxpYXM6IFsnYWNjb3VudF9uZXh0SW5kZXgnXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIG5leHQgYWNjb3VudEluZGV4IGFzIGF2YWlsYWJsZSBvbiB0aGUgbm9kZScsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhY2NvdW50SWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdJbmRleCdcbiAgICB9LFxuICAgIGFkZExvZ0ZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FkZHMgdGhlIHN1cHBsaWVkIGRpcmVjdGl2ZXMgdG8gdGhlIGN1cnJlbnQgbG9nIGZpbHRlcicsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGlyZWN0aXZlcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH0sXG4gICAgYWRkUmVzZXJ2ZWRQZWVyOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkcyBhIHJlc2VydmVkIHBlZXInLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BlZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdUZXh0J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVGV4dCdcbiAgICB9LFxuICAgIGNoYWluOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIHRoZSBjaGFpbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdUZXh0J1xuICAgIH0sXG4gICAgY2hhaW5UeXBlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIHRoZSBjaGFpbiB0eXBlJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0NoYWluVHlwZSdcbiAgICB9LFxuICAgIGRyeVJ1bjoge1xuICAgICAgICBhbGlhczogWydzeXN0ZW1fZHJ5UnVuQXQnXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdEcnkgcnVuIGFuIGV4dHJpbnNpYyBhdCBhIGdpdmVuIGJsb2NrJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdleHRyaW5zaWMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0FwcGx5RXh0cmluc2ljUmVzdWx0J1xuICAgIH0sXG4gICAgaGVhbHRoOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGhlYWx0aCBzdGF0dXMgb2YgdGhlIG5vZGUnLFxuICAgICAgICBub0Vycm9yTG9nOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnSGVhbHRoJ1xuICAgIH0sXG4gICAgbG9jYWxMaXN0ZW5BZGRyZXNzZXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgYWRkcmVzc2VzIGluY2x1ZGUgYSB0cmFpbGluZyAvcDJwLyB3aXRoIHRoZSBsb2NhbCBQZWVySWQsIGFuZCBhcmUgdGh1cyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gYWRkUmVzZXJ2ZWRQZWVyIG9yIGFzIGEgYm9vdG5vZGUgYWRkcmVzcyBmb3IgZXhhbXBsZScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBsb2NhbFBlZXJJZDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJhc2U1OC1lbmNvZGVkIFBlZXJJZCBvZiB0aGUgbm9kZScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdUZXh0J1xuICAgIH0sXG4gICAgbmFtZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgbm9kZSBuYW1lJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgfSxcbiAgICBuZXR3b3JrU3RhdGU6IHtcbiAgICAgICAgYWxpYXM6IFsnc3lzdGVtX3Vuc3RhYmxlX25ldHdvcmtTdGF0ZSddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgY3VycmVudCBzdGF0ZSBvZiB0aGUgbmV0d29yaycsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnTmV0d29ya1N0YXRlJ1xuICAgIH0sXG4gICAgbm9kZVJvbGVzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgcm9sZXMgdGhlIG5vZGUgaXMgcnVubmluZyBhcycsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8Tm9kZVJvbGU+J1xuICAgIH0sXG4gICAgcGVlcnM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBjdXJyZW50bHkgY29ubmVjdGVkIHBlZXJzJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8UGVlckluZm8+J1xuICAgIH0sXG4gICAgcHJvcGVydGllczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCBhIGN1c3RvbSBzZXQgb2YgcHJvcGVydGllcyBhcyBhIEpTT04gb2JqZWN0LCBkZWZpbmVkIGluIHRoZSBjaGFpbiBzcGVjJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0NoYWluUHJvcGVydGllcydcbiAgICB9LFxuICAgIHJlbW92ZVJlc2VydmVkUGVlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JlbW92ZSBhIHJlc2VydmVkIHBlZXInLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BlZXJJZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdUZXh0J1xuICAgIH0sXG4gICAgcmVzZXJ2ZWRQZWVyczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgcGVlcnMnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgcmVzZXRMb2dGaWx0ZXI6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXNldHMgdGhlIGxvZyBmaWx0ZXIgdG8gU3Vic3RyYXRlIGRlZmF1bHRzJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH0sXG4gICAgc3luY1N0YXRlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHN5bmNpbmcgb2YgdGhlIG5vZGUnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnU3luY1N0YXRlJ1xuICAgIH0sXG4gICAgdmVyc2lvbjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgdmVyc2lvbiBvZiB0aGUgbm9kZScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdUZXh0J1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBBY2NvdW50Tm9uY2VBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGFjY291bnRfbm9uY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgQVBJIHRvIHF1ZXJ5IGFjY291bnQgbm9uY2UgKGFrYSB0cmFuc2FjdGlvbiBpbmRleCknLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYWNjb3VudElkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSW5kZXgnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBCb3VudHk6IHtcbiAgICAgICAgICAgIHByb3Bvc2VyOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBmZWU6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGN1cmF0b3JEZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBib25kOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBzdGF0dXM6ICdCb3VudHlTdGF0dXMnXG4gICAgICAgIH0sXG4gICAgICAgIEJvdW50eUluZGV4OiAndTMyJyxcbiAgICAgICAgQm91bnR5U3RhdHVzOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFByb3Bvc2VkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQXBwcm92ZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBGdW5kZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDdXJhdG9yUHJvcG9zZWQ6ICdCb3VudHlTdGF0dXNDdXJhdG9yUHJvcG9zZWQnLFxuICAgICAgICAgICAgICAgIEFjdGl2ZTogJ0JvdW50eVN0YXR1c0FjdGl2ZScsXG4gICAgICAgICAgICAgICAgUGVuZGluZ1BheW91dDogJ0JvdW50eVN0YXR1c1BlbmRpbmdQYXlvdXQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEJvdW50eVN0YXR1c0FjdGl2ZToge1xuICAgICAgICAgICAgY3VyYXRvcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB1cGRhdGVEdWU6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQm91bnR5U3RhdHVzQ3VyYXRvclByb3Bvc2VkOiB7XG4gICAgICAgICAgICBjdXJhdG9yOiAnQWNjb3VudElkJ1xuICAgICAgICB9LFxuICAgICAgICBCb3VudHlTdGF0dXNQZW5kaW5nUGF5b3V0OiB7XG4gICAgICAgICAgICBjdXJhdG9yOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHVubG9ja0F0OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIE9wZW5UaXA6IHtcbiAgICAgICAgICAgIHJlYXNvbjogJ0hhc2gnLFxuICAgICAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGZpbmRlcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBjbG9zZXM6ICdPcHRpb248QmxvY2tOdW1iZXI+JyxcbiAgICAgICAgICAgIHRpcHM6ICdWZWM8T3BlblRpcFRpcD4nLFxuICAgICAgICAgICAgZmluZGVyc0ZlZTogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIE9wZW5UaXBUbzIyNToge1xuICAgICAgICAgICAgcmVhc29uOiAnSGFzaCcsXG4gICAgICAgICAgICB3aG86ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZmluZGVyOiAnT3B0aW9uPE9wZW5UaXBGaW5kZXJUbzIyNT4nLFxuICAgICAgICAgICAgY2xvc2VzOiAnT3B0aW9uPEJsb2NrTnVtYmVyPicsXG4gICAgICAgICAgICB0aXBzOiAnVmVjPE9wZW5UaXBUaXA+J1xuICAgICAgICB9LFxuICAgICAgICBPcGVuVGlwRmluZGVyVG8yMjU6ICcoQWNjb3VudElkLCBCYWxhbmNlKScsXG4gICAgICAgIE9wZW5UaXBUaXA6ICcoQWNjb3VudElkLCBCYWxhbmNlKScsXG4gICAgICAgIFRyZWFzdXJ5UHJvcG9zYWw6IHtcbiAgICAgICAgICAgIHByb3Bvc2VyOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBiZW5lZmljaWFyeTogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBib25kOiAnQmFsYW5jZSdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBNdWx0aXBsaWVyOiAnRml4ZWQxMjgnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBUcmFuc2FjdGlvblNvdXJjZToge1xuICAgICAgICAgICAgX2VudW06IFsnSW5CbG9jaycsICdMb2NhbCcsICdFeHRlcm5hbCddXG4gICAgICAgIH0sXG4gICAgICAgIFRyYW5zYWN0aW9uVmFsaWRpdHk6ICdSZXN1bHQ8VmFsaWRUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25WYWxpZGl0eUVycm9yPicsXG4gICAgICAgIFZhbGlkVHJhbnNhY3Rpb246IHtcbiAgICAgICAgICAgIHByaW9yaXR5OiAnVHJhbnNhY3Rpb25Qcmlvcml0eScsXG4gICAgICAgICAgICByZXF1aXJlczogJ1ZlYzxUcmFuc2FjdGlvblRhZz4nLFxuICAgICAgICAgICAgcHJvdmlkZXM6ICdWZWM8VHJhbnNhY3Rpb25UYWc+JyxcbiAgICAgICAgICAgIGxvbmdldml0eTogJ1RyYW5zYWN0aW9uTG9uZ2V2aXR5JyxcbiAgICAgICAgICAgIHByb3BhZ2F0ZTogJ2Jvb2wnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgVGFnZ2VkVHJhbnNhY3Rpb25RdWV1ZTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVfdHJhbnNhY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdWYWxpZGF0ZSB0aGUgdHJhbnNhY3Rpb24uJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NvdXJjZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RyYW5zYWN0aW9uU291cmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdFeHRyaW5zaWMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdibG9ja0hhc2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUcmFuc2FjdGlvblZhbGlkaXR5J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZV90cmFuc2FjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRlIHRoZSB0cmFuc2FjdGlvbi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVHJhbnNhY3Rpb25Tb3VyY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd0eCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RyYW5zYWN0aW9uVmFsaWRpdHknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlX3RyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVmFsaWRhdGUgdGhlIHRyYW5zYWN0aW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd0eCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RyYW5zYWN0aW9uVmFsaWRpdHknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBDbGFzc0lkOiAndTMyJyxcbiAgICAgICAgSW5zdGFuY2VJZDogJ3UzMicsXG4gICAgICAgIERlcG9zaXRCYWxhbmNlOiAnQmFsYW5jZScsXG4gICAgICAgIERlcG9zaXRCYWxhbmNlT2Y6ICdCYWxhbmNlJyxcbiAgICAgICAgQ2xhc3NEZXRhaWxzOiB7XG4gICAgICAgICAgICBvd25lcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBpc3N1ZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgYWRtaW46ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZnJlZXplcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB0b3RhbERlcG9zaXQ6ICdEZXBvc2l0QmFsYW5jZScsXG4gICAgICAgICAgICBmcmVlSG9sZGluZzogJ2Jvb2wnLFxuICAgICAgICAgICAgaW5zdGFuY2VzOiAndTMyJyxcbiAgICAgICAgICAgIGluc3RhbmNlTWV0YWRhdGFzOiAndTMyJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6ICd1MzInLFxuICAgICAgICAgICAgaXNGcm96ZW46ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBEZXN0cm95V2l0bmVzczoge1xuICAgICAgICAgICAgaW5zdGFuY2VzOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIGluc3RhbmNlTWV0YWRhdGFzOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgIH0sXG4gICAgICAgIEluc3RhbmNlRGV0YWlsczoge1xuICAgICAgICAgICAgb3duZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgYXBwcm92ZWQ6ICdPcHRpb248QWNjb3VudElkPicsXG4gICAgICAgICAgICBpc0Zyb3plbjogJ2Jvb2wnLFxuICAgICAgICAgICAgZGVwb3NpdDogJ0RlcG9zaXRCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBDbGFzc01ldGFkYXRhOiB7XG4gICAgICAgICAgICBkZXBvc2l0OiAnRGVwb3NpdEJhbGFuY2UnLFxuICAgICAgICAgICAgZGF0YTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgaXNGcm96ZW46ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBJbnN0YW5jZU1ldGFkYXRhOiB7XG4gICAgICAgICAgICBkZXBvc2l0OiAnRGVwb3NpdEJhbGFuY2UnLFxuICAgICAgICAgICAgZGF0YTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgaXNGcm96ZW46ICdib29sJ1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIE11bHRpc2lnOiB7XG4gICAgICAgICAgICB3aGVuOiAnVGltZXBvaW50JyxcbiAgICAgICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGRlcG9zaXRvcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBhcHByb3ZhbHM6ICdWZWM8QWNjb3VudElkPidcbiAgICAgICAgfSxcbiAgICAgICAgVGltZXBvaW50OiB7XG4gICAgICAgICAgICBoZWlnaHQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBpbmRleDogJ3UzMidcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBWZXN0aW5nSW5mbzoge1xuICAgICAgICAgICAgbG9ja2VkOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBwZXJCbG9jazogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgc3RhcnRpbmdCbG9jazogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IG1hcFhjbVR5cGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5pbXBvcnQgeyB2MCB9IGZyb20gJy4vdjAuanMnO1xuaW1wb3J0IHsgdjEgfSBmcm9tICcuL3YxLmpzJztcbmltcG9ydCB7IHYyIH0gZnJvbSAnLi92Mi5qcyc7XG5jb25zdCBYQ01fTEFURVNUID0gJ1YyJztcbmNvbnN0IHhjbSA9IHtcbiAgICBYY21PcmlnaW46IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFhjbTogJ011bHRpTG9jYXRpb24nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbXBNZXNzYWdlRm9ybWF0OiB7XG4gICAgICAgIF9lbnVtOiBbJ0NvbmNhdGVuYXRlZFZlcnNpb25lZFhjbScsICdDb25jYXRlbmF0ZWRFbmNvZGVkQmxvYicsICdTaWduYWxzJ11cbiAgICB9LFxuICAgIFhjbUFzc2V0SWQ6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENvbmNyZXRlOiAnTXVsdGlMb2NhdGlvbicsXG4gICAgICAgICAgICBBYnN0cmFjdDogJ0J5dGVzJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBJbmJvdW5kU3RhdHVzOiB7XG4gICAgICAgIF9lbnVtOiBbJ09rJywgJ1N1c3BlbmRlZCddXG4gICAgfSxcbiAgICBPdXRib3VuZFN0YXR1czoge1xuICAgICAgICBfZW51bTogWydPaycsICdTdXNwZW5kZWQnXVxuICAgIH0sXG4gICAgTXVsdGlBc3NldHM6ICdWZWM8TXVsdGlBc3NldD4nXG59O1xuY29uc3QgbG9jYXRpb24gPSB7XG4gICAgQm9keUlkOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBVbml0OiAnTnVsbCcsXG4gICAgICAgICAgICBOYW1lZDogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgSW5kZXg6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgRXhlY3V0aXZlOiAnTnVsbCcsXG4gICAgICAgICAgICBUZWNobmljYWw6ICdOdWxsJyxcbiAgICAgICAgICAgIExlZ2lzbGF0aXZlOiAnTnVsbCcsXG4gICAgICAgICAgICBKdWRpY2lhbDogJ051bGwnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEJvZHlQYXJ0OiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBWb2ljZTogJ051bGwnLFxuICAgICAgICAgICAgTWVtYmVyczogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBGcmFjdGlvbjoge1xuICAgICAgICAgICAgICAgIG5vbTogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgZGVub206ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQXRMZWFzdFByb3BvcnRpb246IHtcbiAgICAgICAgICAgICAgICBub206ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIGRlbm9tOiAnQ29tcGFjdDx1MzI+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE1vcmVUaGFuUHJvcG9ydGlvbjoge1xuICAgICAgICAgICAgICAgIG5vbTogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgZGVub206ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIEludGVyaW9yTXVsdGlMb2NhdGlvbjogJ0p1bmN0aW9ucycsXG4gICAgTmV0d29ya0lkOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBBbnk6ICdOdWxsJyxcbiAgICAgICAgICAgIE5hbWVkOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBQb2xrYWRvdDogJ051bGwnLFxuICAgICAgICAgICAgS3VzYW1hOiAnTnVsbCdcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5sb2NhdGlvbixcbiAgICAgICAgLi4ueGNtLFxuICAgICAgICAuLi52MCxcbiAgICAgICAgLi4udjEsXG4gICAgICAgIC4uLnYyLFxuICAgICAgICAuLi5tYXBYY21UeXBlcyhYQ01fTEFURVNUKSxcbiAgICAgICAgRG91YmxlRW5jb2RlZENhbGw6IHtcbiAgICAgICAgICAgIGVuY29kZWQ6ICdWZWM8dTg+J1xuICAgICAgICB9LFxuICAgICAgICBYY21PcmlnaW5LaW5kOiB7XG4gICAgICAgICAgICBfZW51bTogWydOYXRpdmUnLCAnU292ZXJlaWduQWNjb3VudCcsICdTdXBlcnVzZXInLCAnWGNtJ11cbiAgICAgICAgfSxcbiAgICAgICAgT3V0Y29tZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBDb21wbGV0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICAgICAgSW5jb21wbGV0ZTogJyhXZWlnaHQsIFhjbUVycm9yVjApJyxcbiAgICAgICAgICAgICAgICBFcnJvcjogJ1hjbUVycm9yVjAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFF1ZXJ5SWQ6ICd1NjQnLFxuICAgICAgICBRdWVyeVN0YXR1czoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBQZW5kaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmRlcjogJ1ZlcnNpb25lZE11bHRpTG9jYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBtYXliZU5vdGlmeTogJ09wdGlvbjwodTgsIHU4KT4nLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZWFkeToge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogJ1ZlcnNpb25lZFJlc3BvbnNlJyxcbiAgICAgICAgICAgICAgICAgICAgYXQ6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFF1ZXVlQ29uZmlnRGF0YToge1xuICAgICAgICAgICAgc3VzcGVuZFRocmVzaG9sZDogJ3UzMicsXG4gICAgICAgICAgICBkcm9wVGhyZXNob2xkOiAndTMyJyxcbiAgICAgICAgICAgIHJlc3VtZVRocmVzaG9sZDogJ3UzMicsXG4gICAgICAgICAgICB0aHJlc2hvbGRXZWlnaHQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgd2VpZ2h0UmVzdHJpY3REZWNheTogJ1dlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgVmVyc2lvbk1pZ3JhdGlvblN0YWdlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE1pZ3JhdGVTdXBwb3J0ZWRWZXJzaW9uOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgTWlncmF0ZVZlcnNpb25Ob3RpZmllcnM6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBOb3RpZnlDdXJyZW50VGFyZ2V0czogJ09wdGlvbjxCeXRlcz4nLFxuICAgICAgICAgICAgICAgIE1pZ3JhdGVBbmROb3RpZnlPbGRUYXJnZXRzOiAnTnVsbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgVmVyc2lvbmVkTXVsdGlBc3NldDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ011bHRpQXNzZXRWMCcsXG4gICAgICAgICAgICAgICAgVjE6ICdNdWx0aUFzc2V0VjEnLFxuICAgICAgICAgICAgICAgIFYyOiAnTXVsdGlBc3NldFYyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBWZXJzaW9uZWRNdWx0aUFzc2V0czoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICBWMTogJ011bHRpQXNzZXRzVjEnLFxuICAgICAgICAgICAgICAgIFYyOiAnTXVsdGlBc3NldHNWMidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgVmVyc2lvbmVkTXVsdGlMb2NhdGlvbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ011bHRpTG9jYXRpb25WMCcsXG4gICAgICAgICAgICAgICAgVjE6ICdNdWx0aUxvY2F0aW9uVjEnLFxuICAgICAgICAgICAgICAgIFYyOiAnTXVsdGlMb2NhdGlvblYyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBWZXJzaW9uZWRSZXNwb25zZToge1xuICAgICAgICAgICAgVjA6ICdSZXNwb25zZVYwJyxcbiAgICAgICAgICAgIFYxOiAnUmVzcG9uc2VWMScsXG4gICAgICAgICAgICBWMjogJ1Jlc3BvbnNlVjInXG4gICAgICAgIH0sXG4gICAgICAgIFZlcnNpb25lZFhjbToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ1hjbVYwJyxcbiAgICAgICAgICAgICAgICBWMTogJ1hjbVYxJyxcbiAgICAgICAgICAgICAgICBWMjogJ1hjbVYyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBYY21WZXJzaW9uOiAndTMyJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdjAgPSB7XG4gICAgRnVuZ2liaWxpdHlWMDogJ0Z1bmdpYmlsaXR5VjEnLFxuICAgIFdpbGRGdW5naWJpbGl0eVYwOiAnV2lsZEZ1bmdpYmlsaXR5VjEnLFxuICAgIEFzc2V0SW5zdGFuY2VWMDoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgVW5kZWZpbmVkOiAnTnVsbCcsXG4gICAgICAgICAgICBJbmRleDg6ICd1OCcsXG4gICAgICAgICAgICBJbmRleDE2OiAnQ29tcGFjdDx1MTY+JyxcbiAgICAgICAgICAgIEluZGV4MzI6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgSW5kZXg2NDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICBJbmRleDEyODogJ0NvbXBhY3Q8dTEyOD4nLFxuICAgICAgICAgICAgQXJyYXk0OiAnW3U4OyA0XScsXG4gICAgICAgICAgICBBcnJheTg6ICdbdTg7IDhdJyxcbiAgICAgICAgICAgIEFycmF5MTY6ICdbdTg7IDE2XScsXG4gICAgICAgICAgICBBcnJheTMyOiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgQmxvYjogJ1ZlYzx1OD4nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEp1bmN0aW9uVjA6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFBhcmVudDogJ051bGwnLFxuICAgICAgICAgICAgUGFyYWNoYWluOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIEFjY291bnRJZDMyOiB7XG4gICAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmtJZCcsXG4gICAgICAgICAgICAgICAgaWQ6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQWNjb3VudEluZGV4NjQ6IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29ya0lkJyxcbiAgICAgICAgICAgICAgICBpbmRleDogJ0NvbXBhY3Q8dTY0PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY2NvdW50S2V5MjA6IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29ya0lkJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdbdTg7IDIwXSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBQYWxsZXRJbnN0YW5jZTogJ3U4JyxcbiAgICAgICAgICAgIEdlbmVyYWxJbmRleDogJ0NvbXBhY3Q8dTEyOD4nLFxuICAgICAgICAgICAgR2VuZXJhbEtleTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgT25seUNoaWxkOiAnTnVsbCcsXG4gICAgICAgICAgICBQbHVyYWxpdHk6IHtcbiAgICAgICAgICAgICAgICBpZDogJ0JvZHlJZCcsXG4gICAgICAgICAgICAgICAgcGFydDogJ0JvZHlQYXJ0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBNdWx0aUFzc2V0VjA6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIE5vbmU6ICdOdWxsJyxcbiAgICAgICAgICAgIEFsbDogJ051bGwnLFxuICAgICAgICAgICAgQWxsRnVuZ2libGU6ICdOdWxsJyxcbiAgICAgICAgICAgIEFsbE5vbkZ1bmdpYmxlOiAnTnVsbCcsXG4gICAgICAgICAgICBBbGxBYnN0cmFjdEZ1bmdpYmxlOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBBbGxBYnN0cmFjdE5vbkZ1bmdpYmxlOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBBbGxDb25jcmV0ZUZ1bmdpYmxlOiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgIEFsbENvbmNyZXRlTm9uRnVuZ2libGU6ICdNdWx0aUxvY2F0aW9uVjAnLFxuICAgICAgICAgICAgQWJzdHJhY3RGdW5naWJsZToge1xuICAgICAgICAgICAgICAgIGlkOiAnVmVjPHU4PicsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2U6ICdDb21wYWN0PHUxMjg+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFic3RyYWN0Tm9uRnVuZ2libGU6IHtcbiAgICAgICAgICAgICAgICBjbGFzczogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiAnQXNzZXRJbnN0YW5jZVYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIENvbmNyZXRlRnVuZ2libGU6IHtcbiAgICAgICAgICAgICAgICBpZDogJ011bHRpTG9jYXRpb25WMCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnQ29tcGFjdDx1MTI4PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBDb25jcmV0ZU5vbkZ1bmdpYmxlOiB7XG4gICAgICAgICAgICAgICAgY2xhc3M6ICdNdWx0aUxvY2F0aW9uVjAnLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiAnQXNzZXRJbnN0YW5jZVYwJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBNdWx0aUxvY2F0aW9uVjA6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEhlcmU6ICdOdWxsJyxcbiAgICAgICAgICAgIFgxOiAnSnVuY3Rpb25WMCcsXG4gICAgICAgICAgICBYMjogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYMzogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYNDogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYNTogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYNjogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYNzogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYODogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgT3JpZ2luS2luZFYwOiB7XG4gICAgICAgIF9lbnVtOiBbJ05hdGl2ZScsICdTb3ZlcmVpZ25BY2NvdW50JywgJ1N1cGVydXNlcicsICdYY20nXVxuICAgIH0sXG4gICAgUmVzcG9uc2VWMDoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgQXNzZXRzOiAnVmVjPE11bHRpQXNzZXRWMD4nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbVYwOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnVmVjPE11bHRpQXNzZXRWMD4nLFxuICAgICAgICAgICAgICAgIGVmZmVjdHM6ICdWZWM8WGNtT3JkZXJWMD4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgUmVzZXJ2ZUFzc2V0RGVwb3NpdDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjA+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlY2VpdmVUZWxlcG9ydGVkQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdWZWM8TXVsdGlBc3NldFYwPicsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYwPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBRdWVyeVJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6ICdSZXNwb25zZVYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zZmVyQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdWZWM8TXVsdGlBc3NldFYwPicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2ZlclJlc2VydmVBc3NldDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjA+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zYWN0OiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luVHlwZTogJ1hjbU9yaWdpbktpbmQnLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVXZWlnaHRBdE1vc3Q6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGNhbGw6ICdEb3VibGVFbmNvZGVkQ2FsbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgICAgICBtYXhNZXNzYWdlU2l6ZTogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgbWF4Q2FwYWNpdHk6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSHJtcENoYW5uZWxBY2NlcHRlZDoge1xuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIcm1wQ2hhbm5lbENsb3Npbmc6IHtcbiAgICAgICAgICAgICAgICBpbml0aWF0b3I6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgcmVjaXBpZW50OiAnQ29tcGFjdDx1MzI+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlbGF5ZWRGcm9tOiB7XG4gICAgICAgICAgICAgICAgd2hvOiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnWGNtVjAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbUVycm9yVjA6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFVuZGVmaW5lZDogJ051bGwnLFxuICAgICAgICAgICAgT3ZlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaW1wbGVtZW50ZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZFhjbVZlcnNpb246ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZFhjbU1lc3NhZ2U6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZEVmZmVjdDogJ051bGwnLFxuICAgICAgICAgICAgRXNjYWxhdGlvbk9mUHJpdmlsZWdlOiAnTnVsbCcsXG4gICAgICAgICAgICBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgIFVudHJ1c3RlZFRlbGVwb3J0TG9jYXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQnVmZmVyT3ZlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgIFNlbmRGYWlsZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIENhbm5vdFJlYWNoRGVzdGluYXRpb246ICcoTXVsdGlMb2NhdGlvbiwgWGNtKScsXG4gICAgICAgICAgICBNdWx0aUxvY2F0aW9uRnVsbDogJ051bGwnLFxuICAgICAgICAgICAgRmFpbGVkVG9EZWNvZGU6ICdOdWxsJyxcbiAgICAgICAgICAgIEJhZE9yaWdpbjogJ051bGwnLFxuICAgICAgICAgICAgRXhjZWVkc01heE1lc3NhZ2VTaXplOiAnTnVsbCcsXG4gICAgICAgICAgICBGYWlsZWRUb1RyYW5zYWN0QXNzZXQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFdlaWdodExpbWl0UmVhY2hlZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBXaWxkY2FyZDogJ051bGwnLFxuICAgICAgICAgICAgVG9vTXVjaFdlaWdodFJlcXVpcmVkOiAnTnVsbCcsXG4gICAgICAgICAgICBOb3RIb2xkaW5nRmVlczogJ051bGwnLFxuICAgICAgICAgICAgV2VpZ2h0Tm90Q29tcHV0YWJsZTogJ051bGwnLFxuICAgICAgICAgICAgQmFycmllcjogJ051bGwnLFxuICAgICAgICAgICAgTm90V2l0aGRyYXdhYmxlOiAnTnVsbCcsXG4gICAgICAgICAgICBMb2NhdGlvbkNhbm5vdEhvbGQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFRvb0V4cGVuc2l2ZTogJ051bGwnLFxuICAgICAgICAgICAgQXNzZXROb3RGb3VuZDogJ051bGwnLFxuICAgICAgICAgICAgUmVjdXJzaW9uTGltaXRSZWFjaGVkOiAnTnVsbCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgWGNtT3JkZXJWMDoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgTnVsbDogJ051bGwnLFxuICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnVmVjPE11bHRpQXNzZXRWMD4nLFxuICAgICAgICAgICAgICAgIGRlc3Q6ICdNdWx0aUxvY2F0aW9uVjAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRGVwb3NpdFJlc2VydmVBc3NldDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjA+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEV4Y2hhbmdlQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBnaXZlOiAnVmVjPE11bHRpQXNzZXRWMD4nLFxuICAgICAgICAgICAgICAgIHJlY2VpdmU6ICdWZWM8TXVsdGlBc3NldFYwPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbml0aWF0ZVJlc2VydmVXaXRoZHJhdzoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICByZXNlcnZlOiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjA+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEluaXRpYXRlVGVsZXBvcnQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdWZWM8TXVsdGlBc3NldFYwPicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMCcsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYwPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBRdWVyeUhvbGRpbmc6IHtcbiAgICAgICAgICAgICAgICBxdWVyeUlkOiAnQ29tcGFjdDx1NjQ+JyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdWZWM8TXVsdGlBc3NldFYwPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICBmZWVzOiAnTXVsdGlBc3NldFYwJyxcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGRlYnQ6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGhhbHRPbkVycm9yOiAnYm9vbCcsXG4gICAgICAgICAgICAgICAgeGNtOiAnVmVjPFhjbVYwPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdjEgPSB7XG4gICAgQXNzZXRJbnN0YW5jZVYxOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBVbmRlZmluZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIEluZGV4OiAnQ29tcGFjdDx1MTI4PicsXG4gICAgICAgICAgICBBcnJheTQ6ICdbdTg7IDRdJyxcbiAgICAgICAgICAgIEFycmF5ODogJ1t1ODsgOF0nLFxuICAgICAgICAgICAgQXJyYXkxNjogJ1t1ODsgMTZdJyxcbiAgICAgICAgICAgIEFycmF5MzI6ICdbdTg7IDMyXScsXG4gICAgICAgICAgICBCbG9iOiAnQnl0ZXMnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEZ1bmdpYmlsaXR5VjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEZ1bmdpYmxlOiAnQ29tcGFjdDx1MTI4PicsXG4gICAgICAgICAgICBOb25GdW5naWJsZTogJ0Fzc2V0SW5zdGFuY2VWMSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgSnVuY3Rpb25WMToge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgUGFyYWNoYWluOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIEFjY291bnRJZDMyOiB7XG4gICAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmtJZCcsXG4gICAgICAgICAgICAgICAgaWQ6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQWNjb3VudEluZGV4NjQ6IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29ya0lkJyxcbiAgICAgICAgICAgICAgICBpbmRleDogJ0NvbXBhY3Q8dTY0PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY2NvdW50S2V5MjA6IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29ya0lkJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdbdTg7IDIwXSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBQYWxsZXRJbnN0YW5jZTogJ3U4JyxcbiAgICAgICAgICAgIEdlbmVyYWxJbmRleDogJ0NvbXBhY3Q8dTEyOD4nLFxuICAgICAgICAgICAgR2VuZXJhbEtleTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgT25seUNoaWxkOiAnTnVsbCcsXG4gICAgICAgICAgICBQbHVyYWxpdHk6IHtcbiAgICAgICAgICAgICAgICBpZDogJ0JvZHlJZCcsXG4gICAgICAgICAgICAgICAgcGFydDogJ0JvZHlQYXJ0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBKdW5jdGlvbnNWMToge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgSGVyZTogJ051bGwnLFxuICAgICAgICAgICAgWDE6ICdKdW5jdGlvblYxJyxcbiAgICAgICAgICAgIFgyOiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFgzOiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg0OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg1OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg2OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg3OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg4OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBNdWx0aUFzc2V0c1YxOiAnVmVjPE11bHRpQXNzZXRWMT4nLFxuICAgIE11bHRpQXNzZXRWMToge1xuICAgICAgICBpZDogJ1hjbUFzc2V0SWQnLFxuICAgICAgICBmdW5naWJpbGl0eTogJ0Z1bmdpYmlsaXR5VjEnXG4gICAgfSxcbiAgICBNdWx0aUFzc2V0RmlsdGVyVjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIERlZmluaXRlOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICBXaWxkOiAnV2lsZE11bHRpQXNzZXRWMSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgTXVsdGlMb2NhdGlvblYxOiB7XG4gICAgICAgIHBhcmVudHM6ICd1OCcsXG4gICAgICAgIGludGVyaW9yOiAnSnVuY3Rpb25zVjEnXG4gICAgfSxcbiAgICBPcmlnaW5LaW5kVjE6ICdPcmlnaW5LaW5kVjAnLFxuICAgIFJlc3BvbnNlVjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEFzc2V0czogJ011bHRpQXNzZXRzVjEnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFdpbGRGdW5naWJpbGl0eVYxOiB7XG4gICAgICAgIF9lbnVtOiBbJ0Z1bmdpYmxlJywgJ05vbkZ1bmdpYmxlJ11cbiAgICB9LFxuICAgIFdpbGRNdWx0aUFzc2V0VjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEFsbDogJ051bGwnLFxuICAgICAgICAgICAgQWxsT2Y6IHtcbiAgICAgICAgICAgICAgICBpZDogJ1hjbUFzc2V0SWQnLFxuICAgICAgICAgICAgICAgIGZ1bmdpYmlsaXR5OiAnV2lsZEZ1bmdpYmlsaXR5VjEnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbVYxOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXNlcnZlQXNzZXREZXBvc2l0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZWNlaXZlVGVsZXBvcnRlZEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBRdWVyeVJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6ICdSZXNwb25zZVYxJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zZmVyQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdNdWx0aUFzc2V0c1YxJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYxJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zZmVyUmVzZXJ2ZUFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2FjdDoge1xuICAgICAgICAgICAgICAgIG9yaWdpblR5cGU6ICdYY21PcmlnaW5LaW5kJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlV2VpZ2h0QXRNb3N0OiAndTY0JyxcbiAgICAgICAgICAgICAgICBjYWxsOiAnRG91YmxlRW5jb2RlZENhbGwnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSHJtcE5ld0NoYW5uZWxPcGVuUmVxdWVzdDoge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgbWF4TWVzc2FnZVNpemU6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIG1heENhcGFjaXR5OiAnQ29tcGFjdDx1MzI+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEhybXBDaGFubmVsQWNjZXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICByZWNpcGllbnQ6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSHJtcENoYW5uZWxDbG9zaW5nOiB7XG4gICAgICAgICAgICAgICAgaW5pdGlhdG9yOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZWxheWVkRnJvbToge1xuICAgICAgICAgICAgICAgIHdobzogJ011bHRpTG9jYXRpb25WMScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1hjbVYxJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBYY21FcnJvclYxOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBVbmRlZmluZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIE92ZXJmbG93OiAnTnVsbCcsXG4gICAgICAgICAgICBVbmltcGxlbWVudGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBVbmhhbmRsZWRYY21WZXJzaW9uOiAnTnVsbCcsXG4gICAgICAgICAgICBVbmhhbmRsZWRYY21NZXNzYWdlOiAnTnVsbCcsXG4gICAgICAgICAgICBVbmhhbmRsZWRFZmZlY3Q6ICdOdWxsJyxcbiAgICAgICAgICAgIEVzY2FsYXRpb25PZlByaXZpbGVnZTogJ051bGwnLFxuICAgICAgICAgICAgVW50cnVzdGVkUmVzZXJ2ZUxvY2F0aW9uOiAnTnVsbCcsXG4gICAgICAgICAgICBVbnRydXN0ZWRUZWxlcG9ydExvY2F0aW9uOiAnTnVsbCcsXG4gICAgICAgICAgICBEZXN0aW5hdGlvbkJ1ZmZlck92ZXJmbG93OiAnTnVsbCcsXG4gICAgICAgICAgICBTZW5kRmFpbGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBDYW5ub3RSZWFjaERlc3RpbmF0aW9uOiAnKE11bHRpTG9jYXRpb25WMSwgWGNtVjEpJyxcbiAgICAgICAgICAgIE11bHRpTG9jYXRpb25GdWxsOiAnTnVsbCcsXG4gICAgICAgICAgICBGYWlsZWRUb0RlY29kZTogJ051bGwnLFxuICAgICAgICAgICAgQmFkT3JpZ2luOiAnTnVsbCcsXG4gICAgICAgICAgICBFeGNlZWRzTWF4TWVzc2FnZVNpemU6ICdOdWxsJyxcbiAgICAgICAgICAgIEZhaWxlZFRvVHJhbnNhY3RBc3NldDogJ051bGwnLFxuICAgICAgICAgICAgV2VpZ2h0TGltaXRSZWFjaGVkOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIFdpbGRjYXJkOiAnTnVsbCcsXG4gICAgICAgICAgICBUb29NdWNoV2VpZ2h0UmVxdWlyZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIE5vdEhvbGRpbmdGZWVzOiAnTnVsbCcsXG4gICAgICAgICAgICBXZWlnaHROb3RDb21wdXRhYmxlOiAnTnVsbCcsXG4gICAgICAgICAgICBCYXJyaWVyOiAnTnVsbCcsXG4gICAgICAgICAgICBOb3RXaXRoZHJhd2FibGU6ICdOdWxsJyxcbiAgICAgICAgICAgIExvY2F0aW9uQ2Fubm90SG9sZDogJ051bGwnLFxuICAgICAgICAgICAgVG9vRXhwZW5zaXZlOiAnTnVsbCcsXG4gICAgICAgICAgICBBc3NldE5vdEZvdW5kOiAnTnVsbCcsXG4gICAgICAgICAgICBEZXN0aW5hdGlvblVuc3VwcG9ydGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBSZWN1cnNpb25MaW1pdFJlYWNoZWQ6ICdOdWxsJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBYY21PcmRlclYxOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBOb29wOiAnTnVsbCcsXG4gICAgICAgICAgICBEZXBvc2l0QXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdNdWx0aUFzc2V0RmlsdGVyVjEnLFxuICAgICAgICAgICAgICAgIG1heEFzc2V0czogJ3UzMicsXG4gICAgICAgICAgICAgICAgYmVuZWZpY2lhcnk6ICdNdWx0aUxvY2F0aW9uVjEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRGVwb3NpdFJlc2VydmVBc3NldDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ011bHRpQXNzZXRGaWx0ZXJWMScsXG4gICAgICAgICAgICAgICAgbWF4QXNzZXRzOiAndTMyJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYxJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjE+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEV4Y2hhbmdlQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBnaXZlOiAnTXVsdGlBc3NldEZpbHRlclYxJyxcbiAgICAgICAgICAgICAgICByZWNlaXZlOiAnTXVsdGlBc3NldHNWMSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbml0aWF0ZVJlc2VydmVXaXRoZHJhdzoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ011bHRpQXNzZXRGaWx0ZXJWMScsXG4gICAgICAgICAgICAgICAgcmVzZXJ2ZTogJ011bHRpTG9jYXRpb25WMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbml0aWF0ZVRlbGVwb3J0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYxJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYxJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjE+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFF1ZXJ5SG9sZGluZzoge1xuICAgICAgICAgICAgICAgIHF1ZXJ5SWQ6ICdDb21wYWN0PHU2ND4nLFxuICAgICAgICAgICAgICAgIGRlc3Q6ICdNdWx0aUxvY2F0aW9uVjEnLFxuICAgICAgICAgICAgICAgIGFzc2V0czogJ011bHRpQXNzZXRGaWx0ZXJWMSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICBmZWVzOiAnTXVsdGlBc3NldFYxJyxcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGRlYnQ6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGhhbHRPbkVycm9yOiAnYm9vbCcsXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnVmVjPFhjbVYxPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdjIgPSB7XG4gICAgQXNzZXRJbnN0YW5jZVYyOiAnQXNzZXRJbnN0YW5jZVYxJyxcbiAgICBGdW5naWJpbGl0eVYyOiAnRnVuZ2liaWxpdHlWMScsXG4gICAgSnVuY3Rpb25WMjogJ0p1bmN0aW9uVjEnLFxuICAgIEp1bmN0aW9uc1YyOiAnSnVuY3Rpb25zVjEnLFxuICAgIE11bHRpQXNzZXRzVjI6ICdNdWx0aUFzc2V0c1YxJyxcbiAgICBNdWx0aUFzc2V0VjI6ICdNdWx0aUFzc2V0VjEnLFxuICAgIE11bHRpQXNzZXRGaWx0ZXJWMjogJ011bHRpQXNzZXRGaWx0ZXJWMScsXG4gICAgTXVsdGlMb2NhdGlvblYyOiAnTXVsdGlMb2NhdGlvblYxJyxcbiAgICBPcmlnaW5LaW5kVjI6ICdPcmlnaW5LaW5kVjEnLFxuICAgIFdpbGRGdW5naWJpbGl0eVYyOiAnV2lsZEZ1bmdpYmlsaXR5VjEnLFxuICAgIFJlc3BvbnNlVjI6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIE51bGw6ICdOdWxsJyxcbiAgICAgICAgICAgIEFzc2V0czogJ011bHRpQXNzZXRzVjInLFxuICAgICAgICAgICAgRXhlY3V0aW9uUmVzdWx0OiAnUmVzcG9uc2VWMlJlc3VsdCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUmVzcG9uc2VWMkVycm9yOiAnKHUzMiwgWGNtRXJyb3JWMiknLFxuICAgIFJlc3BvbnNlVjJSZXN1bHQ6ICdSZXN1bHQ8TnVsbCwgUmVzcG9uc2VWMkVycm9yPicsXG4gICAgV2VpZ2h0TGltaXRWMjoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgVW5saW1pdGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBMaW1pdGVkOiAnQ29tcGFjdDx1NjQ+J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBJbnN0cnVjdGlvblYyOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiAnTXVsdGlBc3NldHNWMicsXG4gICAgICAgICAgICBSZXNlcnZlQXNzZXREZXBvc2l0ZWQ6ICdNdWx0aUFzc2V0c1YyJyxcbiAgICAgICAgICAgIFJlY2VpdmVUZWxlcG9ydGVkQXNzZXQ6ICdNdWx0aUFzc2V0c1YyJyxcbiAgICAgICAgICAgIFF1ZXJ5UmVzcG9uc2U6IHtcbiAgICAgICAgICAgICAgICBxdWVyeUlkOiAnQ29tcGFjdDx1NjQ+JyxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogJ1Jlc3BvbnNlVjInLFxuICAgICAgICAgICAgICAgIG1heFdlaWdodDogJ0NvbXBhY3Q8dTY0PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2ZlckFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMicsXG4gICAgICAgICAgICAgICAgYmVuZWZpY2lhcnk6ICdNdWx0aUxvY2F0aW9uVjInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVHJhbnNmZXJSZXNlcnZlQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdNdWx0aUFzc2V0c1YyJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYyJyxcbiAgICAgICAgICAgICAgICB4Y206ICdYY21WMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2FjdDoge1xuICAgICAgICAgICAgICAgIG9yaWdpblR5cGU6ICdPcmlnaW5LaW5kVjInLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVXZWlnaHRBdE1vc3Q6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGNhbGw6ICdEb3VibGVFbmNvZGVkQ2FsbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgICAgICBtYXhNZXNzYWdlU2l6ZTogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgbWF4Q2FwYWNpdHk6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSHJtcENoYW5uZWxBY2NlcHRlZDoge1xuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIcm1wQ2hhbm5lbENsb3Npbmc6IHtcbiAgICAgICAgICAgICAgICBpbml0aWF0b3I6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgcmVjaXBpZW50OiAnQ29tcGFjdDx1MzI+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIENsZWFyT3JpZ2luOiAnTnVsbCcsXG4gICAgICAgICAgICBEZXNjZW5kT3JpZ2luOiAnSW50ZXJpb3JNdWx0aUxvY2F0aW9uJyxcbiAgICAgICAgICAgIFJlcG9ydEVycm9yOiB7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMicsXG4gICAgICAgICAgICAgICAgbWF4UmVzcG9uc2VXZWlnaHQ6ICdDb21wYWN0PHU2ND4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYyJyxcbiAgICAgICAgICAgICAgICBtYXhBc3NldHM6ICd1MzInLFxuICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiAnTXVsdGlMb2NhdGlvblYyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIERlcG9zaXRSZXNlcnZlQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdNdWx0aUFzc2V0RmlsdGVyVjInLFxuICAgICAgICAgICAgICAgIG1heEFzc2V0czogJ3UzMicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMicsXG4gICAgICAgICAgICAgICAgeGNtOiAnWGNtVjInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRXhjaGFuZ2VBc3NldDoge1xuICAgICAgICAgICAgICAgIGdpdmU6ICdNdWx0aUFzc2V0RmlsdGVyVjInLFxuICAgICAgICAgICAgICAgIHJlY2VpdmU6ICdNdWx0aUFzc2V0c1YyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEluaXRpYXRlUmVzZXJ2ZVdpdGhkcmF3OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYyJyxcbiAgICAgICAgICAgICAgICByZXNlcnZlOiAnTXVsdGlMb2NhdGlvblYyJyxcbiAgICAgICAgICAgICAgICB4Y206ICdYY21WMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbml0aWF0ZVRlbGVwb3J0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYyJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYyJyxcbiAgICAgICAgICAgICAgICB4Y206ICdYY21WMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBRdWVyeUhvbGRpbmc6IHtcbiAgICAgICAgICAgICAgICBxdWVyeV9pZDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMicsXG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYyJyxcbiAgICAgICAgICAgICAgICBtYXhSZXNwb25zZV9XZWlnaHQ6ICdDb21wYWN0PHU2ND4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQnV5RXhlY3V0aW9uOiB7XG4gICAgICAgICAgICAgICAgZmVlczogJ011bHRpQXNzZXRWMicsXG4gICAgICAgICAgICAgICAgd2VpZ2h0TGltaXQ6ICdXZWlnaHRMaW1pdFYyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlZnVuZFN1cnBsdXM6ICdOdWxsJyxcbiAgICAgICAgICAgIFNldEVycm9ySGFuZGxlcjogJ1hjbVYyJyxcbiAgICAgICAgICAgIFNldEFwcGVuZGl4OiAnWGNtVjInLFxuICAgICAgICAgICAgQ2xlYXJFcnJvcjogJ051bGwnLFxuICAgICAgICAgICAgQ2xhaW1Bc3NldDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ011bHRpQXNzZXRzVjInLFxuICAgICAgICAgICAgICAgIHRpY2tldDogJ011bHRpTG9jYXRpb25WMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFwOiAndTY0J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBXaWxkTXVsdGlBc3NldFYyOiAnV2lsZE11bHRpQXNzZXRWMScsXG4gICAgWGNtVjI6ICdWZWM8SW5zdHJ1Y3Rpb25WMj4nLFxuICAgIFhjbUVycm9yVjI6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFVuZGVmaW5lZDogJ051bGwnLFxuICAgICAgICAgICAgT3ZlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaW1wbGVtZW50ZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZFhjbVZlcnNpb246ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZFhjbU1lc3NhZ2U6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZEVmZmVjdDogJ051bGwnLFxuICAgICAgICAgICAgRXNjYWxhdGlvbk9mUHJpdmlsZWdlOiAnTnVsbCcsXG4gICAgICAgICAgICBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgIFVudHJ1c3RlZFRlbGVwb3J0TG9jYXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQnVmZmVyT3ZlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgIE11bHRpTG9jYXRpb25GdWxsOiAnTnVsbCcsXG4gICAgICAgICAgICBNdWx0aUxvY2F0aW9uTm90SW52ZXJ0aWJsZTogJ051bGwnLFxuICAgICAgICAgICAgRmFpbGVkVG9EZWNvZGU6ICdOdWxsJyxcbiAgICAgICAgICAgIEJhZE9yaWdpbjogJ051bGwnLFxuICAgICAgICAgICAgRXhjZWVkc01heE1lc3NhZ2VTaXplOiAnTnVsbCcsXG4gICAgICAgICAgICBGYWlsZWRUb1RyYW5zYWN0QXNzZXQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFdlaWdodExpbWl0UmVhY2hlZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBXaWxkY2FyZDogJ051bGwnLFxuICAgICAgICAgICAgVG9vTXVjaFdlaWdodFJlcXVpcmVkOiAnTnVsbCcsXG4gICAgICAgICAgICBOb3RIb2xkaW5nRmVlczogJ051bGwnLFxuICAgICAgICAgICAgV2VpZ2h0Tm90Q29tcHV0YWJsZTogJ051bGwnLFxuICAgICAgICAgICAgQmFycmllcjogJ051bGwnLFxuICAgICAgICAgICAgTm90V2l0aGRyYXdhYmxlOiAnTnVsbCcsXG4gICAgICAgICAgICBMb2NhdGlvbkNhbm5vdEhvbGQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFRvb0V4cGVuc2l2ZTogJ051bGwnLFxuICAgICAgICAgICAgQXNzZXROb3RGb3VuZDogJ051bGwnLFxuICAgICAgICAgICAgRGVzdGluYXRpb25VbnN1cHBvcnRlZDogJ051bGwnLFxuICAgICAgICAgICAgUmVjdXJzaW9uTGltaXRSZWFjaGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBUcmFuc3BvcnQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFVucm91dGFibGU6ICdOdWxsJyxcbiAgICAgICAgICAgIFVua25vd25XZWlnaHRSZXF1aXJlZDogJ051bGwnLFxuICAgICAgICAgICAgVHJhcDogJ3U2NCcsXG4gICAgICAgICAgICBVbmtub3duQ2xhaW06ICdOdWxsJyxcbiAgICAgICAgICAgIEludmFsaWRMb2NhdGlvbjogJ051bGwnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbU9yZGVyVjI6ICdYY21PcmRlclYxJ1xufTtcbiIsImltcG9ydCB7IFUzMiB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5leHBvcnQgY29uc3QgTUFHSUNfTlVNQkVSID0gMHg2MTc0NjU2ZDsgLy8gYG1ldGFgLCByZXZlcnNlZCBmb3IgTGl0dGxlIEVuZGlhbiBlbmNvZGluZ1xuZXhwb3J0IGNsYXNzIE1hZ2ljTnVtYmVyIGV4dGVuZHMgVTMyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW1wdHkgJiYgIXRoaXMuZXEoTUFHSUNfTlVNQkVSKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYWdpY051bWJlciBtaXNtYXRjaDogZXhwZWN0ZWQgJHtyZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCd1MzInLCBbTUFHSUNfTlVNQkVSXSkudG9IZXgoKX0sIGZvdW5kICR7dGhpcy50b0hleCgpfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNTdHJpbmcsIGlzVThhLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IE1ldGFkYXRhVmVyc2lvbmVkIH0gZnJvbSAnLi9NZXRhZGF0YVZlcnNpb25lZC5qcyc7XG5jb25zdCBFTVBUWV9NRVRBREFUQSA9IG5ldyBVaW50OEFycmF5KFsweDZkLCAweDY1LCAweDc0LCAweDYxLCA5XSk7XG5jb25zdCBWRVJTSU9OX0lEWCA9IEVNUFRZX01FVEFEQVRBLmxlbmd0aCAtIDE7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVVOGEocmVnaXN0cnksIHU4YSkge1xuICAgIGlmICh1OGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBFTVBUWV9NRVRBREFUQTtcbiAgICB9XG4gICAgZWxzZSBpZiAodThhW1ZFUlNJT05fSURYXSA9PT0gOSkge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGYtaW5nIGhhY2sgYXMgYSBmb2xsb3ctdXAgdG8gYW5vdGhlciB1Z2x5IGhhY2tcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvbGthZG90LWpzL2FwaS9jb21taXQvYTkyMTE2OTBiZTZiNjhhZDZjNmRhZDc4NTJmMTY2NWNhZGNmYTViMlxuICAgICAgICAvLyB3aGVuIHdlIGZhaWwgb24gVjksIHRyeSB0byByZS1wYXJzZSBpdCBhcyB2MTAuLi5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWV0YWRhdGFWZXJzaW9uZWQocmVnaXN0cnksIHU4YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgdThhW1ZFUlNJT05fSURYXSA9IDEwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1OGE7XG59XG4vKipcbiAqIEBuYW1lIE1ldGFkYXRhXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSB2ZXJzaW9uZWQgcnVudGltZSBtZXRhZGF0YSBhcyBhIGRlY29kZWQgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBNZXRhZGF0YSBleHRlbmRzIE1ldGFkYXRhVmVyc2lvbmVkIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgLy8gY29uc3QgdGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGlzVThhKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgID8gZGVjb2RlVThhKHJlZ2lzdHJ5LCB1OGFUb1U4YSh2YWx1ZSkpXG4gICAgICAgICAgICA6IHZhbHVlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ01ldGFkYXRhJywgYCR7KHBlcmZvcm1hbmNlLm5vdygpIC0gdGltZVN0YXJ0KS50b0ZpeGVkKDIpfW1zYClcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdHJ1Y3QgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgZ2V0VW5pcVR5cGVzLCB0b0NhbGxzT25seSB9IGZyb20gJy4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyB0b1YxMCB9IGZyb20gJy4vdjkvdG9WMTAuanMnO1xuaW1wb3J0IHsgdG9WMTEgfSBmcm9tICcuL3YxMC90b1YxMS5qcyc7XG5pbXBvcnQgeyB0b1YxMiB9IGZyb20gJy4vdjExL3RvVjEyLmpzJztcbmltcG9ydCB7IHRvVjEzIH0gZnJvbSAnLi92MTIvdG9WMTMuanMnO1xuaW1wb3J0IHsgdG9WMTQgfSBmcm9tICcuL3YxMy90b1YxNC5qcyc7XG5pbXBvcnQgeyB0b1YxNSB9IGZyb20gJy4vdjE0L3RvVjE1LmpzJztcbmltcG9ydCB7IHRvTGF0ZXN0IH0gZnJvbSAnLi92MTUvdG9MYXRlc3QuanMnO1xuaW1wb3J0IHsgTWFnaWNOdW1iZXIgfSBmcm9tICcuL01hZ2ljTnVtYmVyLmpzJztcbmltcG9ydCB7IExBVEVTVF9WRVJTSU9OLCBUT19DQUxMU19WRVJTSU9OIH0gZnJvbSAnLi92ZXJzaW9ucy5qcyc7XG4vKipcbiAqIEBuYW1lIE1ldGFkYXRhVmVyc2lvbmVkXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSB2ZXJzaW9uZWQgcnVudGltZSBtZXRhZGF0YSBhcyBhIGRlY29kZWQgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBNZXRhZGF0YVZlcnNpb25lZCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX19pbnRlcm5hbF9fY29udmVydGVkID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAvLyBjb25zdCB0aW1lU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgbWFnaWNOdW1iZXI6IE1hZ2ljTnVtYmVyLFxuICAgICAgICAgICAgbWV0YWRhdGE6ICdNZXRhZGF0YUFsbCdcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnTWV0YWRhdGFWZXJzaW9uZWQnLCBgJHsocGVyZm9ybWFuY2Uubm93KCkgLSB0aW1lU3RhcnQpLnRvRml4ZWQoMil9bXNgKVxuICAgIH1cbiAgICBfX2ludGVybmFsX19hc3NlcnRWZXJzaW9uID0gKHZlcnNpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA+IHZlcnNpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgbWV0YWRhdGEgZnJvbSB2ZXJzaW9uICR7dGhpcy52ZXJzaW9ufSB0byAke3ZlcnNpb259YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmVyc2lvbiA9PT0gdmVyc2lvbjtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX2dldFZlcnNpb24gPSAodmVyc2lvbiwgZnJvbVByZXYpID0+IHtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09ICdsYXRlc3QnICYmIHRoaXMuX19pbnRlcm5hbF9fYXNzZXJ0VmVyc2lvbih2ZXJzaW9uKSkge1xuICAgICAgICAgICAgY29uc3QgYXNDdXJyID0gYGFzViR7dmVyc2lvbn1gO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEoKVthc0N1cnJdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX19jb252ZXJ0ZWQuaGFzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBhc1ByZXYgPSB2ZXJzaW9uID09PSAnbGF0ZXN0J1xuICAgICAgICAgICAgICAgID8gYGFzViR7TEFURVNUX1ZFUlNJT059YFxuICAgICAgICAgICAgICAgIDogYGFzViR7KHZlcnNpb24gLSAxKX1gO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jb252ZXJ0ZWQuc2V0KHZlcnNpb24sIGZyb21QcmV2KHRoaXMucmVnaXN0cnksIHRoaXNbYXNQcmV2XSwgdGhpcy52ZXJzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY29udmVydGVkLmdldCh2ZXJzaW9uKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiB0aGUgbWV0YWRhdGEgd3JhcHBlZFxuICAgICAqL1xuICAgIF9faW50ZXJuYWxfX21ldGFkYXRhID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRhZGF0YScpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHdyYXBwZWQgbWV0YWRhdGEgYXMgYSBsaW1pdGVkIGNhbGxzLW9ubHkgKGxhdGVzdCkgdmVyc2lvblxuICAgICAqL1xuICAgIGdldCBhc0NhbGxzT25seSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXRhZGF0YVZlcnNpb25lZCh0aGlzLnJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBtYWdpY051bWJlcjogdGhpcy5tYWdpY051bWJlcixcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ01ldGFkYXRhQWxsJywgW3RvQ2FsbHNPbmx5KHRoaXMucmVnaXN0cnksIHRoaXMuYXNMYXRlc3QpLCBUT19DQUxMU19WRVJTSU9OXSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVkIG1ldGFkYXRhIGFzIGEgVjkgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0IGFzVjkoKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXNzZXJ0VmVyc2lvbig5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEoKS5hc1Y5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlZCB2YWx1ZXMgYXMgYSBWMTAgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0IGFzVjEwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19nZXRWZXJzaW9uKDEwLCB0b1YxMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVkIHZhbHVlcyBhcyBhIFYxMSBvYmplY3RcbiAgICAgKi9cbiAgICBnZXQgYXNWMTEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2dldFZlcnNpb24oMTEsIHRvVjExKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHdyYXBwZWQgdmFsdWVzIGFzIGEgVjEyIG9iamVjdFxuICAgICAqL1xuICAgIGdldCBhc1YxMigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZ2V0VmVyc2lvbigxMiwgdG9WMTIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlZCB2YWx1ZXMgYXMgYSBWMTMgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0IGFzVjEzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19nZXRWZXJzaW9uKDEzLCB0b1YxMyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVkIHZhbHVlcyBhcyBhIFYxNCBvYmplY3RcbiAgICAgKi9cbiAgICBnZXQgYXNWMTQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2dldFZlcnNpb24oMTQsIHRvVjE0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHdyYXBwZWQgdmFsdWVzIGFzIGEgVjE0IG9iamVjdFxuICAgICAqL1xuICAgIGdldCBhc1YxNSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZ2V0VmVyc2lvbigxNSwgdG9WMTUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlZCB2YWx1ZXMgYXMgYSBsYXRlc3QgdmVyc2lvbiBvYmplY3RcbiAgICAgKi9cbiAgICBnZXQgYXNMYXRlc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2dldFZlcnNpb24oJ2xhdGVzdCcsIHRvTGF0ZXN0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBtYWdpY051bWJlciBmb3IgdGhlIE1ldGFkYXRhIChrbm93biBjb25zdGFudClcbiAgICAgKi9cbiAgICBnZXQgbWFnaWNOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ21hZ2ljTnVtYmVyJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiB0aGUgbWV0YWRhdGEgdmVyc2lvbiB0aGlzIHN0cnVjdHVyZSByZXByZXNlbnRzXG4gICAgICovXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhKCkuaW5kZXg7XG4gICAgfVxuICAgIGdldFVuaXFUeXBlcyh0aHJvd0Vycm9yKSB7XG4gICAgICAgIHJldHVybiBnZXRVbmlxVHlwZXModGhpcy5yZWdpc3RyeSwgdGhpcy5hc0xhdGVzdCwgdGhyb3dFcnJvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICAvLyBIQUNLKHkpOiBlbnN1cmUgdGhhdCB3ZSBhcHBseSB0aGUgYWxpYXNlcyBpZiB3ZSBoYXZlIG5vdCBkb25lIHNvIGFscmVhZHksIHRoaXMgaXNcbiAgICAgICAgLy8gbmVlZGVkIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IG92ZXJyaWRlcyAod2hpY2ggaXMgb25seSBhcHBsaWVkIGluIHRvTGF0ZXN0KVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgIHRoaXMuYXNMYXRlc3Q7XG4gICAgICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBzYW5pdGl6ZSwgU3RydWN0IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGdldFR5cGVEZWYsIFR5cGVEZWZJbmZvLCB3aXRoVHlwZVN0cmluZyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUnO1xuaW1wb3J0IHsgYXNzZXJ0VW5yZWFjaGFibGUsIGlzTnVtYmVyLCBpc1N0cmluZywgbG9nZ2VyLCBvYmplY3RTcHJlYWQsIHN0cmluZ0NhbWVsQ2FzZSwgc3RyaW5naWZ5LCBzdHJpbmdQYXNjYWxDYXNlIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuY29uc3QgbCA9IGxvZ2dlcignUG9ydGFibGVSZWdpc3RyeScpO1xuY29uc3QgVFlQRV9VTldSQVAgPSB7IHRvTnVtYmVyOiAoKSA9PiAtMSB9O1xuY29uc3QgUFJJTUlUSVZFX0FMSUFTID0ge1xuICAgIENoYXI6ICd1MzInLCAvLyBSdXN0IGNoYXIgaXMgNC1ieXRlc1xuICAgIFN0cjogJ1RleHQnXG59O1xuY29uc3QgUEFUSFNfQUxJQVMgPSBzcGxpdE5hbWVzcGFjZShbXG4gICAgLy8gZnVsbCBtYXRjaGluZyBvbiBleGFjdCBuYW1lcy4uLlxuICAgIC8vIHRoZXNlIGFyZSB3ZWxsLWtub3duIHR5cGVzIHdpdGggYWRkaXRpb25hbCBlbmNvZGluZ1xuICAgICdzcF9jb3JlOjpjcnlwdG86OkFjY291bnRJZDMyJyxcbiAgICAnc3BfcnVudGltZTo6Z2VuZXJpYzo6ZXJhOjpFcmEnLFxuICAgICdzcF9ydW50aW1lOjptdWx0aWFkZHJlc3M6Ok11bHRpQWRkcmVzcycsXG4gICAgLy8gZXRoZXJldW0gb3ZlcnJpZGVzIChGcm9udGllciwgTW9vbmJlYW0sIFBvbGthZG90IGNsYWltcylcbiAgICAnZnBfYWNjb3VudDo6QWNjb3VudElkMjAnLFxuICAgICdhY2NvdW50OjpBY2NvdW50SWQyMCcsXG4gICAgJ3BvbGthZG90X3J1bnRpbWVfY29tbW9uOjpjbGFpbXM6OkV0aGVyZXVtQWRkcmVzcycsXG4gICAgLy8gd2VpZ2h0cyAyIGlzIGEgc3RydWN0dXJlLCBob3dldmVyIGZvciAxLjUuIHdpdGggYSBzaW5nbGUgZmllbGQgaXRcbiAgICAvLyBzaG91bGQgYmUgZmxhdGVubmVkIChjYW4gYXBwZWFyIGluIENvbXBhY3Q8V2VpZ2h0PiBleHRyaW5zaWNzKVxuICAgICdmcmFtZV9zdXBwb3J0Ojp3ZWlnaHRzOjp3ZWlnaHRfdjI6OldlaWdodCcsXG4gICAgJ3NwX3dlaWdodHM6OndlaWdodF92Mjo6V2VpZ2h0JyxcbiAgICAvLyB3aWxkY2FyZCBtYXRjaGluZyBpbiBwbGFjZS4uLlxuICAgIC8vIHRoZXNlIGhhdmUgYSBzcGVjaWZpYyBlbmNvZGluZyBvciBsb2dpYywgdXNlIGEgd2lsZGNhcmQgZm9yIHtwYWxsZXQsIGRhcndpbmlhfV9kZW1vY3JhY3lcbiAgICAnKl9kZW1vY3JhY3k6OnZvdGU6OlZvdGUnLFxuICAgICcqX2NvbnZpY3Rpb25fdm90aW5nOjp2b3RlOjpWb3RlJyxcbiAgICAnKl9pZGVudGl0eTo6dHlwZXM6OkRhdGEnLFxuICAgIC8vIHRoZXNlIGFyZSBvcGFxdWUgVmVjPHU4PiB3cmFwcGVyc1xuICAgICdzcF9jb3JlOjpPcGFxdWVNZXRhZGF0YScsXG4gICAgJ3NwX2NvcmU6Ok9wYXF1ZVBlZXJJZCcsXG4gICAgJ3NwX2NvcmU6Om9mZmNoYWluOjpPcGFxdWVNdWx0aWFkZHInLFxuICAgIC8vIHNob3J0ZW4gc29tZSB3ZWxsLWtub3duIHR5cGVzXG4gICAgJ3ByaW1pdGl2ZV90eXBlczo6KicsXG4gICAgJ3NwX2FyaXRobWV0aWM6OnBlcl90aGluZ3M6OionLFxuICAgIC8vIHJ1bnRpbWVcbiAgICAnKl9ydW50aW1lOjpSdW50aW1lQ2FsbCcsXG4gICAgJypfcnVudGltZTo6UnVudGltZUV2ZW50JyxcbiAgICAvLyBpbmshXG4gICAgJ2luazo6ZW52Ojp0eXBlczo6KicsXG4gICAgJ2luazo6cHJpbWl0aXZlczo6dHlwZXM6OionLFxuICAgICdpbmtfZW52Ojp0eXBlczo6KicsXG4gICAgJ2lua19wcmltaXRpdmVzOjp0eXBlczo6KicsXG4gICAgLy8gbm9pclxuICAgICducF9ydW50aW1lOjphY2NvdW50bmFtZTo6QWNjb3VudE5hbWUnLFxuICAgICducF9ydW50aW1lOjp1bml2ZXJzYWxhZGRyZXNzOjpVbml2ZXJzYWxBZGRyZXNzJ1xuXSk7XG5jb25zdCBQQVRIU19TRVQgPSBzcGxpdE5hbWVzcGFjZShbXG4gICAgJ3BhbGxldF9pZGVudGl0eTo6dHlwZXM6OkJpdEZsYWdzJ1xuXSk7XG5jb25zdCBCSVRWRUNfTlNfTFNCID0gWydiaXR2ZWM6Om9yZGVyOjpMc2IwJywgJ0JpdE9yZGVyTHNiMCddO1xuY29uc3QgQklUVkVDX05TX01TQiA9IFsnYml0dmVjOjpvcmRlcjo6TXNiMCcsICdCaXRPcmRlck1zYjAnXTtcbmNvbnN0IEJJVFZFQ19OUyA9IFsuLi5CSVRWRUNfTlNfTFNCLCAuLi5CSVRWRUNfTlNfTVNCXTtcbmNvbnN0IFdSQVBQRVJTID0gWydCb3VuZGVkQlRyZWVNYXAnLCAnQm91bmRlZEJUcmVlU2V0JywgJ0JvdW5kZWRWZWMnLCAnQm94JywgJ0JUcmVlTWFwJywgJ0JUcmVlU2V0JywgJ0NvdycsICdPcHRpb24nLCAnUmFuZ2UnLCAnUmFuZ2VJbmNsdXNpdmUnLCAnUmVzdWx0JywgJ1dlYWtCb3VuZGVkVmVjJywgJ1dyYXBwZXJLZWVwT3BhcXVlJywgJ1dyYXBwZXJPcGFxdWUnXTtcbmNvbnN0IFJFU0VSVkVEID0gW1xuICAgIC8vIEpTIHJlc2VydmVkIHdvcmRzXG4gICAgJ2VudHJpZXMnLCAna2V5cycsICduZXcnLCAnc2l6ZScsXG4gICAgLy8gZXhwb3NlZCBieSBhbGwgQ29kZWMgb2JqZWN0c1xuICAgICdoYXNoJywgJ3JlZ2lzdHJ5J1xuXTtcbmNvbnN0IFBBVEhfUk1fSU5ERVhfMSA9IFsnZ2VuZXJpYycsICdtaXNjJywgJ3BhbGxldCcsICd0cmFpdHMnLCAndHlwZXMnXTtcbi8qKiBAaW50ZXJuYWwgQ29udmVydHMgYSBUZXh0W10gaW50byBzdHJpbmdbXSAodXNlZCBhcyBwYXJ0IG9mIGRlZmluaXRpb25zKSAqL1xuZnVuY3Rpb24gc2FuaXRpemVEb2NzKGRvY3MpIHtcbiAgICBjb25zdCBjb3VudCA9IGRvY3MubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdFtpXSA9IGRvY3NbaV0udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgU3BsaXQgYSBuYW1lc3BhY2Ugd2l0aCA6OiBpbnRvIGluZGl2aWR1YWwgcGFydHMgKi9cbmZ1bmN0aW9uIHNwbGl0TmFtZXNwYWNlKHZhbHVlcykge1xuICAgIGNvbnN0IGNvdW50ID0gdmFsdWVzLmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZXNbaV0uc3BsaXQoJzo6Jyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsIE1hdGNoIGEgbmFtZXNwYWNlIGJhc2VkIG9uIHBhcnRzIChhbG9uZ3NpZGUgd2lsZGNhcmRzKSAqL1xuZnVuY3Rpb24gbWF0Y2hQYXJ0cyhmaXJzdCwgc2Vjb25kKSB7XG4gICAgcmV0dXJuIGZpcnN0Lmxlbmd0aCA9PT0gc2Vjb25kLmxlbmd0aCAmJiBmaXJzdC5ldmVyeSgoYSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHNlY29uZFtpbmRleF0udG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKChhID09PSAnKicpIHx8IChhID09PSBiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuaW5jbHVkZXMoJyonKSAmJiBhLmluY2x1ZGVzKCdfJykgJiYgYi5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBsZXQgc3ViYSA9IGEuc3BsaXQoJ18nKTtcbiAgICAgICAgICAgIGxldCBzdWJiID0gYi5zcGxpdCgnXycpO1xuICAgICAgICAgICAgLy8gbWF0Y2ggaW5pdGlhbCAqJ3MgdG8gbXVsdGlwbGVzIGlmIHdlIGhhdmUgYSBtYXRjaCBmb3IgdGhlIG90aGVyXG4gICAgICAgICAgICBpZiAoc3ViYVswXSA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhPZiA9IHN1YmIuaW5kZXhPZihzdWJhWzFdKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViYSA9IHN1YmEuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmIgPSBzdWJiLnNsaWNlKGluZGV4T2YpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciAqIG1hdGNoZXMgYXQgdGhlIGVuZCwgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBpZiAoKHN1YmEubGVuZ3RoID09PSAyKSAmJiAoc3ViYVsxXSA9PT0gJyonKSAmJiAoc3ViYVswXSA9PT0gc3ViYlswXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXRjaFBhcnRzKHN1YmEsIHN1YmIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgY2hlY2sgaWYgdGhlIHBhdGggbWF0Y2hlcyB0aGUgUEFUSFNfQUxJQVMgKHdpdGggd2lsZGNhcmRzKSAqL1xuZnVuY3Rpb24gZ2V0QWxpYXNQYXRoKHsgZGVmLCBwYXRoIH0pIHtcbiAgICAvLyBzcGVjaWZpYyBsb2dpYyBmb3Igd2VpZ2h0cyAtIHdlIG92ZXJyaWRlIHdoZW4gbm9uLWNvbXBsZXggc3RydWN0XG4gICAgLy8gKGFzIGFwcGxpZWQgaW4gV2VpZ2h0IDEuNSB3aGVyZSB3ZSBhbHNvIGhhdmUgYENvbXBhY3Q8eyByZWZUaW1lOiB1NjQgfT4pXG4gICAgaWYgKFsnZnJhbWVfc3VwcG9ydDo6d2VpZ2h0czo6d2VpZ2h0X3YyOjpXZWlnaHQnLCAnc3Bfd2VpZ2h0czo6d2VpZ2h0X3YyOjpXZWlnaHQnXS5pbmNsdWRlcyhwYXRoLmpvaW4oJzo6JykpKSB7XG4gICAgICAgIHJldHVybiAhZGVmLmlzQ29tcG9zaXRlIHx8IGRlZi5hc0NvbXBvc2l0ZS5maWVsZHMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/ICdXZWlnaHRWMSdcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgLy8gVE9ETyBXZSBuZWVkIHRvIGhhbmRsZSBpbmshIEJhbGFuY2UgaW4gc29tZSB3YXlcbiAgICByZXR1cm4gcGF0aC5sZW5ndGggJiYgUEFUSFNfQUxJQVMuc29tZSgoYSkgPT4gbWF0Y2hQYXJ0cyhhLCBwYXRoKSlcbiAgICAgICAgPyBwYXRoW3BhdGgubGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxuICAgICAgICA6IG51bGw7XG59XG4vKiogQGludGVybmFsIENvbnZlcnRzIGEgdHlwZSBuYW1lIGludG8gYSBKUy1BUEkgY29tcGF0aWJsZSBuYW1lICovXG5mdW5jdGlvbiBleHRyYWN0TmFtZUZsYXQocG9ydGFibGUsIGxvb2t1cEluZGV4LCBwYXJhbXMsIHBhdGgsIGlzSW50ZXJuYWwgPSBmYWxzZSkge1xuICAgIGNvbnN0IGNvdW50ID0gcGF0aC5sZW5ndGg7XG4gICAgLy8gaWYgd2UgaGF2ZSBubyBwYXRoIG9yIGRldGVybWluZWQgYXMgYSB3cmFwcGVyLCB3ZSBqdXN0IHNraXAgaXRcbiAgICBpZiAoY291bnQgPT09IDAgfHwgV1JBUFBFUlMuaW5jbHVkZXMocGF0aFtjb3VudCAtIDFdLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjYW1lbHMgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGNvbnN0IGxvd2VycyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgLy8gaW5pdGlhbGx5IGp1c3QgY3JlYXRlIGFycmF5cyBvZiB0aGUgY2FtZWxDYXNlIGFuZCBsb3dlcmNhc2UgcGF0aFxuICAgIC8vIHBhcnRzIC0gd2Ugd2lsbCBjaGVjayB0aGVzZSB0byBleHRyYWN0IHRoZSBmaW5hbCB2YWx1ZXMuIFdoaWxlXG4gICAgLy8gd2UgaGF2ZSAyIGxvb3BzIGhlcmUsIHdlIGFsc28gZG9uJ3QgZG8gdGhlIHNhbWUgb3BlcmF0aW9uIHR3aWNlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGMgPSBzdHJpbmdQYXNjYWxDYXNlKGlzSW50ZXJuYWxcbiAgICAgICAgICAgID8gcGF0aFtpXS5yZXBsYWNlKCdwYWxsZXRfJywgJycpXG4gICAgICAgICAgICA6IHBhdGhbaV0pO1xuICAgICAgICBjb25zdCBsID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjYW1lbHNbaV0gPSBjO1xuICAgICAgICBsb3dlcnNbaV0gPSBsO1xuICAgIH1cbiAgICBsZXQgbmFtZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBsID0gbG93ZXJzW2ldO1xuICAgICAgICAvLyBSZW1vdmUgOjp7Z2VuZXJpYywgbWlzYywgcGFsbGV0LCB0cmFpdHMsIHR5cGVzfTo6XG4gICAgICAgIGlmIChpICE9PSAxIHx8ICFQQVRIX1JNX0lOREVYXzEuaW5jbHVkZXMobCkpIHtcbiAgICAgICAgICAgIC8vIHNwX3J1bnRpbWU6OmdlbmVyaWM6OmRpZ2VzdDo6RGlnZXN0IC0+IHNwX3J1bnRpbWU6OmdlbmVyaWM6OkRpZ2VzdFxuICAgICAgICAgICAgLy8gc3BfcnVudGltZTo6bXVsdGlhZGRyZXNzOjpNdWx0aUFkZHJlc3MgLT4gc3BfcnVudGltZTo6TXVsdGlBZGRyZXNzXG4gICAgICAgICAgICBpZiAobCAhPT0gbG93ZXJzW2kgKyAxXSkge1xuICAgICAgICAgICAgICAgIG5hbWUgKz0gY2FtZWxzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRvIG1hZ2ljIGZvciBSYXdPcmlnaW4gbG9va3VwLCBlLmcuIHBhbGxldF9jb2xsZWN0aXZlOjpSYXdPcmlnaW5cbiAgICBpZiAoY2FtZWxzWzFdID09PSAnUmF3T3JpZ2luJyAmJiBjb3VudCA9PT0gMiAmJiBwYXJhbXMubGVuZ3RoID09PSAyICYmIHBhcmFtc1sxXS50eXBlLmlzU29tZSkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZVR5cGUgPSBwb3J0YWJsZVtwYXJhbXNbMV0udHlwZS51bndyYXAoKS50b051bWJlcigpXTtcbiAgICAgICAgaWYgKGluc3RhbmNlVHlwZS50eXBlLnBhdGgubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBuYW1lID0gYCR7bmFtZX0ke2luc3RhbmNlVHlwZS50eXBlLnBhdGhbMV0udG9TdHJpbmcoKX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGxvb2t1cEluZGV4LCBuYW1lLCBwYXJhbXMgfTtcbn1cbi8qKiBAaW50ZXJuYWwgQWxpYXMgZm9yIGV4dHJhY3ROYW1lRmxhdCB3aXRoIFBvcnRhYmxlVHlwZSBhcyBhIGxhc3QgcGFyYW1ldGVyICovXG5mdW5jdGlvbiBleHRyYWN0TmFtZShwb3J0YWJsZSwgbG9va3VwSW5kZXgsIHsgdHlwZTogeyBwYXJhbXMsIHBhdGggfSB9KSB7XG4gICAgcmV0dXJuIGV4dHJhY3ROYW1lRmxhdChwb3J0YWJsZSwgbG9va3VwSW5kZXgsIHBhcmFtcywgcGF0aCk7XG59XG4vKiogQGludGVybmFsIENoZWNrIGZvciBkdXBlcyBmcm9tIGEgc3BlY2lmaWMgaW5kZXggb253YXJkcyAqL1xuZnVuY3Rpb24gbmV4dER1cGVNYXRjaGVzKG5hbWUsIHN0YXJ0QXQsIG5hbWVzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW25hbWVzW3N0YXJ0QXRdXTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRBdCArIDEsIGNvdW50ID0gbmFtZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB2ID0gbmFtZXNbaV07XG4gICAgICAgIGlmICh2Lm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsIENoZWNrcyB0byBzZWUgaWYgYSB0eXBlIGlzIGEgZnVsbCBkdXBsaWNhdGUgKHdpdGggYWxsIHBhcmFtcyBtYXRjaGluZykgKi9cbmZ1bmN0aW9uIHJld3JpdGVEdXBlcyhpbnB1dCwgcmV3cml0ZSkge1xuICAgIGNvbnN0IGNvdW50ID0gaW5wdXQubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBhID0gaW5wdXRbaV07XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBpbnB1dFtqXTtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBpbmRleGVzIGFyZSBub3QgdGhlIHNhbWUgYW5kIHRoZSBuYW1lcyBtYXRjaCwgd2UgaGF2ZSBhIGR1cGVcbiAgICAgICAgICAgIGlmIChhLmxvb2t1cEluZGV4ICE9PSBiLmxvb2t1cEluZGV4ICYmIGEubmFtZSA9PT0gYi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCBhbGwgdGhlIGFkanVzdGVkIHZhbHVlcyB0byB0aGUgcmV3aXRlIG1hcFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBwID0gaW5wdXRbaV07XG4gICAgICAgIHJld3JpdGVbcC5sb29rdXBJbmRleF0gPSBwLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqIEBpbnRlcm5hbCBGaW5kIGR1cGxpY2F0ZXMgYW5kIGFkanVzdCB0aGUgbmFtZXMgYmFzZWQgb24gcGFyYW1ldGVycyAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwZU5hbWVzKGxvb2t1cCwgcG9ydGFibGUsIG5hbWVzKSB7XG4gICAgY29uc3QgcmV3cml0ZSA9IHt9O1xuICAgIHJldHVybiBuYW1lc1xuICAgICAgICAubWFwKChvcmlnaW5hbCwgc3RhcnRBdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGxvb2t1cEluZGV4LCBuYW1lLCBwYXJhbXMgfSA9IG9yaWdpbmFsO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIC8vIHRoZSBuYW1lIGlzIGVtcHR5ICh0aGlzIGlzIG5vdCBleHBlY3RlZCwgYnV0IGhhdmUgYSBmYWlsc2FmZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJld3JpdGVbbG9va3VwSW5kZXhdKSB7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgcmV3cml0dGVuIHRoaXMgb25lLCB3ZSBjYW4gc2tpcCBpdFxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRob3NlIHdoZXJlIHRoZSBuYW1lIGlzIG1hdGNoaW5nIHN0YXJ0aW5nIGZyb20gdGhpcyBpbmRleFxuICAgICAgICBjb25zdCBhbGxTYW1lID0gbmV4dER1cGVNYXRjaGVzKG5hbWUsIHN0YXJ0QXQsIG5hbWVzKTtcbiAgICAgICAgLy8gd2Ugb25seSBoYXZlIG9uZSwgc28gYWxsIG9rXG4gICAgICAgIGlmIChhbGxTYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFyZSB0aGVyZSBwYXJhbSBkaWZmZXJlbmNlcyBiZXR3ZWVuIG1hdGNoaW5nIG5hbWVzXG4gICAgICAgIGNvbnN0IGFueURpZmYgPSBhbGxTYW1lLnNvbWUoKG8pID0+IHBhcmFtcy5sZW5ndGggIT09IG8ucGFyYW1zLmxlbmd0aCB8fFxuICAgICAgICAgICAgcGFyYW1zLnNvbWUoKHAsIGluZGV4KSA9PiAhcC5uYW1lLmVxKG8ucGFyYW1zW2luZGV4XS5uYW1lKSB8fFxuICAgICAgICAgICAgICAgIHAudHlwZS51bndyYXBPcihUWVBFX1VOV1JBUCkudG9OdW1iZXIoKSAhPT0gby5wYXJhbXNbaW5kZXhdLnR5cGUudW53cmFwT3IoVFlQRV9VTldSQVApLnRvTnVtYmVyKCkpKTtcbiAgICAgICAgLy8gZXZlcnl0aGluZyBtYXRjaGVzLCB3ZSBjYW4gY29tYmluZSB0aGVzZVxuICAgICAgICBpZiAoIWFueURpZmYpIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIFdlIHByb2JhYmx5IHdhbnQgdG8gYXR0YWNoIGFsbCB0aGUgaW5kZXhlcyB3aXRoIGRpZmZlcmVuY2VzLFxuICAgICAgICAvLyBub3QganVzdCB0aGUgZmlyc3RcbiAgICAgICAgLy8gZmluZCB0aGUgZmlyc3QgcGFyYW1ldGVyIHRoYXQgeWllbGRzIGRpZmZlcmVuY2VzXG4gICAgICAgIGNvbnN0IHBhcmFtSWR4ID0gcGFyYW1zLmZpbmRJbmRleCgoeyB0eXBlIH0sIGluZGV4KSA9PiBhbGxTYW1lLmV2ZXJ5KCh7IHBhcmFtcyB9LCBhSW5kZXgpID0+IHBhcmFtc1tpbmRleF0udHlwZS5pc1NvbWUgJiYgKGFJbmRleCA9PT0gMCB8fFxuICAgICAgICAgICAgIXBhcmFtc1tpbmRleF0udHlwZS5lcSh0eXBlKSkpKTtcbiAgICAgICAgLy8gTm8gcGFyYW0gZm91bmQgdGhhdCBpcyBkaWZmZXJlbnRcbiAgICAgICAgaWYgKHBhcmFtSWR4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNlZSBpZiB1c2luZyB0aGUgcGFyYW0gdHlwZSBoZWxwc1xuICAgICAgICBjb25zdCBzYW1lQ291bnQgPSBhbGxTYW1lLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWQgPSBuZXcgQXJyYXkoc2FtZUNvdW50KTtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIHRoYXQgaW5kZXggd2hlcmUgdGhlXG4gICAgICAgIC8vIGZpcnN0IHBhcmFtIHlpZWxkcyBkaWZmZXJlbmNlc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbWVDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB7IGxvb2t1cEluZGV4LCBuYW1lLCBwYXJhbXMgfSA9IGFsbFNhbWVbaV07XG4gICAgICAgICAgICBjb25zdCB7IGRlZiwgcGF0aCB9ID0gbG9va3VwLmdldFNpVHlwZShwYXJhbXNbcGFyYW1JZHhdLnR5cGUudW53cmFwKCkpO1xuICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IGEgcHJpbWl0aXZlIGFuZCBpdCBkb2Vzbid0IGhhdmUgYSBwYXRoLCB3ZSByZWFsbHkgY2Fubm90XG4gICAgICAgICAgICAvLyBkbyBhbnl0aGluZyBhdCB0aGlzIHBvaW50XG4gICAgICAgICAgICBpZiAoIWRlZi5pc1ByaW1pdGl2ZSAmJiAhcGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkanVzdGVkW2ldID0ge1xuICAgICAgICAgICAgICAgIGxvb2t1cEluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWU6IGRlZi5pc1ByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICAgICA/IGAke25hbWV9JHtkZWYuYXNQcmltaXRpdmUudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgIDogYCR7bmFtZX0ke3BhdGhbcGF0aC5sZW5ndGggLSAxXS50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSBhZGp1c3RlZCBuYW1lcyBoYXZlIG5vIGlzc3Vlc1xuICAgICAgICBpZiAocmV3cml0ZUR1cGVzKGFkanVzdGVkLCByZXdyaXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gVGhpcyBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIHNlY3Rpb24ganVzdCBhYm92ZS4uLlxuICAgICAgICAvLyAuLi4gd2UgY2VydGFpbmx5IG5lZWQgYSBiZXR0ZXIgc29sdXRpb24gaGVyZVxuICAgICAgICAvL1xuICAgICAgICAvLyBMYXN0LWRpdGNoIGVmZm9ydCB0byB1c2UgdGhlIGZ1bGwgdHlwZSBwYXRoIC0gdWdseVxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYWxsLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgdGhhdCBpbmRleCB3aGVyZSB0aGVcbiAgICAgICAgLy8gZmlyc3QgcGFyYW0geWllbGRzIGRpZmZlcmVuY2VzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtZUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbG9va3VwSW5kZXgsIG5hbWUsIHBhcmFtcyB9ID0gYWxsU2FtZVtpXTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGVmLCBwYXRoIH0gPSBsb29rdXAuZ2V0U2lUeXBlKHBhcmFtc1twYXJhbUlkeF0udHlwZS51bndyYXAoKSk7XG4gICAgICAgICAgICBjb25zdCBmbGF0ID0gZXh0cmFjdE5hbWVGbGF0KHBvcnRhYmxlLCBsb29rdXBJbmRleCwgcGFyYW1zLCBwYXRoLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChkZWYuaXNQcmltaXRpdmUgfHwgIWZsYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkanVzdGVkW2ldID0ge1xuICAgICAgICAgICAgICAgIGxvb2t1cEluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWU6IGAke25hbWV9JHtmbGF0Lm5hbWV9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgdGhlIGFkanVzdGVkIG5hbWVzIGhhdmUgbm8gaXNzdWVzXG4gICAgICAgIGlmIChyZXdyaXRlRHVwZXMoYWRqdXN0ZWQsIHJld3JpdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcigobikgPT4gISFuKVxuICAgICAgICAubWFwKCh7IGxvb2t1cEluZGV4LCBuYW1lLCBwYXJhbXMgfSkgPT4gKHtcbiAgICAgICAgbG9va3VwSW5kZXgsXG4gICAgICAgIG5hbWU6IHJld3JpdGVbbG9va3VwSW5kZXhdIHx8IG5hbWUsXG4gICAgICAgIHBhcmFtc1xuICAgIH0pKTtcbn1cbi8qKiBAaW50ZXJuYWwgRGV0ZWN0IG9uLWNoYWluIHR5cGVzIChBY2NvdW50SWQvU2lnbmF0dXJlKSBhcyBzZXQgYXMgdGhlIGRlZmF1bHQgKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyVHlwZXMobG9va3VwLCBsb29rdXBzLCBuYW1lcywgcGFyYW1zKSB7XG4gICAgLy8gUmVnaXN0ZXIgdGhlIHR5cGVzIHdlIGV4dHJhY3RlZFxuICAgIGxvb2t1cC5yZWdpc3RyeS5yZWdpc3Rlcihsb29rdXBzKTtcbiAgICAvLyBUcnkgYW5kIGV4dHJhY3QgdGhlIEFjY291bnRJZC9BZGRyZXNzL1NpZ25hdHVyZSB0eXBlIGZyb20gVW5jaGVja2VkRXh0cmluc2ljXG4gICAgaWYgKHBhcmFtcy5TcFJ1bnRpbWVVbmNoZWNrZWRFeHRyaW5zaWMpIHtcbiAgICAgICAgLy8gQWRkcmVzcywgQ2FsbCwgU2lnbmF0dXJlLCBFeHRyYVxuICAgICAgICBjb25zdCBbYWRkclBhcmFtLCAsIHNpZ1BhcmFtXSA9IHBhcmFtcy5TcFJ1bnRpbWVVbmNoZWNrZWRFeHRyaW5zaWM7XG4gICAgICAgIGNvbnN0IHNpQWRkcmVzcyA9IGxvb2t1cC5nZXRTaVR5cGUoYWRkclBhcmFtLnR5cGUudW53cmFwKCkpO1xuICAgICAgICBjb25zdCBzaVNpZ25hdHVyZSA9IGxvb2t1cC5nZXRTaVR5cGUoc2lnUGFyYW0udHlwZS51bndyYXAoKSk7XG4gICAgICAgIGNvbnN0IG5zU2lnbmF0dXJlID0gc2lTaWduYXR1cmUucGF0aC5qb2luKCc6OicpO1xuICAgICAgICBsZXQgbnNBY2NvdW50SWQgPSBzaUFkZHJlc3MucGF0aC5qb2luKCc6OicpO1xuICAgICAgICBjb25zdCBpc011bHRpQWRkcmVzcyA9IG5zQWNjb3VudElkID09PSAnc3BfcnVudGltZTo6bXVsdGlhZGRyZXNzOjpNdWx0aUFkZHJlc3MnO1xuICAgICAgICAvLyBXaXRoIG11bHRpYWRkcmVzcywgd2UgY2hlY2sgdGhlIGZpcnN0IHR5cGUgcGFyYW0gYWdhaW5cbiAgICAgICAgaWYgKGlzTXVsdGlBZGRyZXNzKSB7XG4gICAgICAgICAgICAvLyBBY2NvdW50SWQsIEFjY291bnRJbmRleFxuICAgICAgICAgICAgY29uc3QgW2lkUGFyYW1dID0gc2lBZGRyZXNzLnBhcmFtcztcbiAgICAgICAgICAgIG5zQWNjb3VudElkID0gbG9va3VwLmdldFNpVHlwZShpZFBhcmFtLnR5cGUudW53cmFwKCkpLnBhdGguam9pbignOjonKTtcbiAgICAgICAgfVxuICAgICAgICBsb29rdXAucmVnaXN0cnkucmVnaXN0ZXIoe1xuICAgICAgICAgICAgLy8ga25vd246IGFjY291bnQ6OkFjY291bnRJZDIwLCBmcF9hY2NvdW50OjpBY2NvdW50SWQyMCwgcHJpbWl0aXZlX3R5cGVzOjpIMTYwXG4gICAgICAgICAgICBBY2NvdW50SWQ6IG5zQWNjb3VudElkLmVuZHNXaXRoKCc6OkFjY291bnRJZDIwJykgfHwgbnNBY2NvdW50SWQuZW5kc1dpdGgoJzo6SDE2MCcpXG4gICAgICAgICAgICAgICAgPyAnQWNjb3VudElkMjAnXG4gICAgICAgICAgICAgICAgOiAnQWNjb3VudElkMzInLFxuICAgICAgICAgICAgQWRkcmVzczogaXNNdWx0aUFkZHJlc3NcbiAgICAgICAgICAgICAgICA/ICdNdWx0aUFkZHJlc3MnXG4gICAgICAgICAgICAgICAgOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIEV4dHJpbnNpY1NpZ25hdHVyZTogWydzcF9ydW50aW1lOjpNdWx0aVNpZ25hdHVyZSddLmluY2x1ZGVzKG5zU2lnbmF0dXJlKVxuICAgICAgICAgICAgICAgID8gJ011bHRpU2lnbmF0dXJlJ1xuICAgICAgICAgICAgICAgIDogbmFtZXNbc2lnUGFyYW0udHlwZS51bndyYXAoKS50b051bWJlcigpXSB8fCAnTXVsdGlTaWduYXR1cmUnXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQGludGVybmFsIEV4dHJhY3RzIGFsaWFzZXMgYmFzZWQgb24gd2hhdCB3ZSBrbm93IHRoZSBydW50aW1lIGNvbmZpZyBsb29rcyBsaWtlIGluIGFcbiAqIFN1YnN0cmF0ZSBjaGFpbi4gU3BlY2lmaWNhbGx5IHdlIHdhbnQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIENhbGwgYW5kIEV2ZW50IHBhcmFtc1xuICoqL1xuZnVuY3Rpb24gZXh0cmFjdEFsaWFzZXMocGFyYW1zLCBpc0NvbnRyYWN0KSB7XG4gICAgY29uc3QgaGFzUGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1zKS5zb21lKChrKSA9PiAhay5zdGFydHNXaXRoKCdQYWxsZXQnKSk7XG4gICAgY29uc3QgYWxpYXMgPSB7fTtcbiAgICBpZiAocGFyYW1zLlNwUnVudGltZVVuY2hlY2tlZEV4dHJpbnNpYykge1xuICAgICAgICAvLyBBZGRyZXNzLCBDYWxsLCBTaWduYXR1cmUsIEV4dHJhXG4gICAgICAgIGNvbnN0IFssIHsgdHlwZSB9XSA9IHBhcmFtcy5TcFJ1bnRpbWVVbmNoZWNrZWRFeHRyaW5zaWM7XG4gICAgICAgIGFsaWFzW3R5cGUudW53cmFwKCkudG9OdW1iZXIoKV0gPSAnQ2FsbCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhc1BhcmFtcyAmJiAhaXNDb250cmFjdCkge1xuICAgICAgICBsLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgcnVudGltZSBDYWxsIHR5cGUsIGNhbm5vdCBpbnNwZWN0IHNwX3J1bnRpbWU6OmdlbmVyaWM6OnVuY2hlY2tlZF9leHRyaW5zaWM6OlVuY2hlY2tlZEV4dHJpbnNpYycpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLkZyYW1lU3lzdGVtRXZlbnRSZWNvcmQpIHtcbiAgICAgICAgLy8gRXZlbnQsIFRvcGljXG4gICAgICAgIGNvbnN0IFt7IHR5cGUgfV0gPSBwYXJhbXMuRnJhbWVTeXN0ZW1FdmVudFJlY29yZDtcbiAgICAgICAgYWxpYXNbdHlwZS51bndyYXAoKS50b051bWJlcigpXSA9ICdFdmVudCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhc1BhcmFtcyAmJiAhaXNDb250cmFjdCkge1xuICAgICAgICBsLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgcnVudGltZSBFdmVudCB0eXBlLCBjYW5ub3QgaW5zcGVjdCBmcmFtZV9zeXN0ZW06OkV2ZW50UmVjb3JkJyk7XG4gICAgfVxuICAgIHJldHVybiBhbGlhcztcbn1cbi8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgYWxsIHRoZSBpbnRyZXJlc3RpbmcgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyByZWdpc3RyeSAqL1xuZnVuY3Rpb24gZXh0cmFjdFR5cGVJbmZvKGxvb2t1cCwgcG9ydGFibGUpIHtcbiAgICBjb25zdCBuYW1lSW5mbyA9IFtdO1xuICAgIGNvbnN0IHR5cGVzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gcG9ydGFibGUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB0eXBlID0gcG9ydGFibGVbaV07XG4gICAgICAgIGNvbnN0IGxvb2t1cEluZGV4ID0gdHlwZS5pZC50b051bWJlcigpO1xuICAgICAgICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0TmFtZShwb3J0YWJsZSwgbG9va3VwSW5kZXgsIHBvcnRhYmxlW2ldKTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZCkge1xuICAgICAgICAgICAgbmFtZUluZm8ucHVzaChleHRyYWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVzW2xvb2t1cEluZGV4XSA9IHR5cGU7XG4gICAgfVxuICAgIGNvbnN0IGxvb2t1cHMgPSB7fTtcbiAgICBjb25zdCBuYW1lcyA9IHt9O1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IGRlZHVwID0gcmVtb3ZlRHVwZU5hbWVzKGxvb2t1cCwgcG9ydGFibGUsIG5hbWVJbmZvKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBkZWR1cC5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgbG9va3VwSW5kZXgsIG5hbWUsIHBhcmFtczogcCB9ID0gZGVkdXBbaV07XG4gICAgICAgIG5hbWVzW2xvb2t1cEluZGV4XSA9IG5hbWU7XG4gICAgICAgIGxvb2t1cHNbbmFtZV0gPSBsb29rdXAucmVnaXN0cnkuY3JlYXRlTG9va3VwVHlwZShsb29rdXBJbmRleCk7XG4gICAgICAgIHBhcmFtc1tuYW1lXSA9IHA7XG4gICAgfVxuICAgIHJldHVybiB7IGxvb2t1cHMsIG5hbWVzLCBwYXJhbXMsIHR5cGVzIH07XG59XG5leHBvcnQgY2xhc3MgUG9ydGFibGVSZWdpc3RyeSBleHRlbmRzIFN0cnVjdCB7XG4gICAgX19pbnRlcm5hbF9fYWxpYXM7XG4gICAgX19pbnRlcm5hbF9fbG9va3VwcztcbiAgICBfX2ludGVybmFsX19uYW1lcztcbiAgICBfX2ludGVybmFsX19wYXJhbXM7XG4gICAgX19pbnRlcm5hbF9fdHlwZURlZnMgPSB7fTtcbiAgICBfX2ludGVybmFsX190eXBlcztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGlzQ29udHJhY3QpIHtcbiAgICAgICAgLy8gY29uc3QgdGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHtcbiAgICAgICAgICAgIHR5cGVzOiAnVmVjPFBvcnRhYmxlVHlwZT4nXG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgY29uc3QgeyBsb29rdXBzLCBuYW1lcywgcGFyYW1zLCB0eXBlcyB9ID0gZXh0cmFjdFR5cGVJbmZvKHRoaXMsIHRoaXMudHlwZXMpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2FsaWFzID0gZXh0cmFjdEFsaWFzZXMocGFyYW1zLCBpc0NvbnRyYWN0KTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19sb29rdXBzID0gbG9va3VwcztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19uYW1lcyA9IG5hbWVzO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3BhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlcyA9IHR5cGVzO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnUG9ydGFibGVSZWdpc3RyeScsIGAkeyhwZXJmb3JtYW5jZS5ub3coKSAtIHRpbWVTdGFydCkudG9GaXhlZCgyKX1tc2ApXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGFsbCB0aGUgYXZhaWxhYmxlIHR5cGUgbmFtZXMgZm9yIHRoaXMgY2hhaW5cbiAgICAgKiovXG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9faW50ZXJuYWxfX25hbWVzKS5zb3J0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGFsbCB0aGUgYXZhaWxhYmxlIHBhcmFtZXRlcml6ZWQgdHlwZXMgZm9yIHRoaXMgY2hhaW5cbiAgICAgKiovXG4gICAgZ2V0IHBhcmFtVHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3BhcmFtcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0eXBlcyBvZiB0aGUgcmVnaXN0cnlcbiAgICAgKi9cbiAgICBnZXQgdHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3R5cGVzJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlciBhbGwgYXZhaWxhYmxlIHR5cGVzIGludG8gdGhlIHJlZ2lzdHJ5IChnZW5lcmFsbHkgZm9yIGludGVybmFsIHVzYWdlKVxuICAgICAqL1xuICAgIHJlZ2lzdGVyKCkge1xuICAgICAgICByZWdpc3RlclR5cGVzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fbG9va3VwcywgdGhpcy5fX2ludGVybmFsX19uYW1lcywgdGhpcy5fX2ludGVybmFsX19wYXJhbXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbmFtZSBmb3IgYSBzcGVjaWZpYyBsb29rdXBcbiAgICAgKi9cbiAgICBnZXROYW1lKGxvb2t1cElkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX25hbWVzW3RoaXMuX19pbnRlcm5hbF9fZ2V0TG9va3VwSWQobG9va3VwSWQpXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZpbmRzIGEgc3BlY2lmaWMgdHlwZSBpbiB0aGUgcmVnaXN0cnlcbiAgICAgKi9cbiAgICBnZXRTaVR5cGUobG9va3VwSWQpIHtcbiAgICAgICAgLy8gTk9URSBjYXRjaC0yMiAtIHRoaXMgbWF5IGFscmVhZHkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3Rvciwgc29cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBhY3R1YWxseSBpbml0aWFsaXplZCBpdCBjb3JyZWN0bHlcbiAgICAgICAgY29uc3QgZm91bmQgPSAodGhpcy5fX2ludGVybmFsX190eXBlcyB8fCB0aGlzLnR5cGVzKVt0aGlzLl9faW50ZXJuYWxfX2dldExvb2t1cElkKGxvb2t1cElkKV07XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9ydGFibGVSZWdpc3RyeTogVW5hYmxlIHRvIGZpbmQgdHlwZSB3aXRoIGxvb2t1cElkICR7bG9va3VwSWQudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm91bmQudHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvb2t1cCB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgaW5kZXhcbiAgICAgKi9cbiAgICBnZXRUeXBlRGVmKGxvb2t1cElkKSB7XG4gICAgICAgIGNvbnN0IGxvb2t1cEluZGV4ID0gdGhpcy5fX2ludGVybmFsX19nZXRMb29rdXBJZChsb29rdXBJZCk7XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX190eXBlRGVmc1tsb29rdXBJbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb2t1cE5hbWUgPSB0aGlzLl9faW50ZXJuYWxfX25hbWVzW2xvb2t1cEluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0ge1xuICAgICAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLkRvTm90Q29uc3RydWN0LFxuICAgICAgICAgICAgICAgIGxvb2t1cEluZGV4LFxuICAgICAgICAgICAgICAgIGxvb2t1cE5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy5yZWdpc3RyeS5jcmVhdGVMb29rdXBUeXBlKGxvb2t1cEluZGV4KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFNldCBuYW1lZCBpdGVtcyBzaW5jZSB3ZSB3aWxsIGdldCBpbnRvIGNpcmN1bGFyIGxvb2t1cHMgYWxvbmcgdGhlIHdheVxuICAgICAgICAgICAgaWYgKGxvb2t1cE5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XSA9IGVtcHR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0KHRoaXMuZ2V0U2lUeXBlKGxvb2t1cElkKSwgbG9va3VwSW5kZXgpO1xuICAgICAgICAgICAgLy8gRm9yIG5vbi1uYW1lZCBpdGVtcywgd2Ugb25seSBzZXQgdGhpcyByaWdodCBhdCB0aGUgZW5kXG4gICAgICAgICAgICBpZiAoIWxvb2t1cE5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XSA9IGVtcHR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZXh0cmFjdGVkKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICdsb29rdXBOYW1lJyB8fCBleHRyYWN0ZWRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgYXJlIHNhZmUgc2luY2Ugd2UgYXJlIGxvb2tpbmcgdGhyb3VnaCB0aGUga2V5cyBhcyBzZXRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlRGVmc1tsb29rdXBJbmRleF1ba10gPSBleHRyYWN0ZWRba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBkb24ndCBzZXQgbG9va3VwTmFtZSBvbiBsb3dlci1sZXZlbCwgd2Ugd2FudCB0byBhbHdheXMgZGlyZWN0IHRvIHRoZSB0eXBlXG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkLmluZm8gPT09IFR5cGVEZWZJbmZvLlBsYWluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlRGVmc1tsb29rdXBJbmRleF0ubG9va3VwTmFtZVJvb3QgPSB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XS5sb29rdXBOYW1lO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XS5sb29rdXBOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvciBhIHNwZWNpZmljIGZpZWxkLCBwZXJmb3JtIGFkanVzdG1lbnRzIHRvIG5vdCBoYXZlIGJ1aWx0LWluIGNvbmZsaWN0c1xuICAgICAqL1xuICAgIHNhbml0aXplRmllbGQobmFtZSkge1xuICAgICAgICBsZXQgbmFtZUZpZWxkID0gbnVsbDtcbiAgICAgICAgbGV0IG5hbWVPcmlnID0gbnVsbDtcbiAgICAgICAgaWYgKG5hbWUuaXNTb21lKSB7XG4gICAgICAgICAgICBuYW1lRmllbGQgPSBzdHJpbmdDYW1lbENhc2UobmFtZS51bndyYXAoKSk7XG4gICAgICAgICAgICBpZiAobmFtZUZpZWxkLmluY2x1ZGVzKCcjJykpIHtcbiAgICAgICAgICAgICAgICBuYW1lT3JpZyA9IG5hbWVGaWVsZDtcbiAgICAgICAgICAgICAgICBuYW1lRmllbGQgPSBuYW1lT3JpZy5yZXBsYWNlKC8jL2csICdfJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChSRVNFUlZFRC5pbmNsdWRlcyhuYW1lRmllbGQpKSB7XG4gICAgICAgICAgICAgICAgbmFtZU9yaWcgPSBuYW1lRmllbGQ7XG4gICAgICAgICAgICAgICAgbmFtZUZpZWxkID0gYCR7bmFtZUZpZWxkfV9gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbmFtZUZpZWxkLCBuYW1lT3JpZ107XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgQ3JlYXRlcyBhIFR5cGVEZWYgYmFzZWQgb24gYW4gaW50ZXJuYWwgbG9va3VwSWQgKi9cbiAgICBfX2ludGVybmFsX19jcmVhdGVTaURlZihsb29rdXBJZCkge1xuICAgICAgICBjb25zdCB0eXBlRGVmID0gdGhpcy5nZXRUeXBlRGVmKGxvb2t1cElkKTtcbiAgICAgICAgY29uc3QgbG9va3VwSW5kZXggPSBsb29rdXBJZC50b051bWJlcigpO1xuICAgICAgICAvLyBTZXR1cCBmb3IgYSBsb29rdXAgb24gY29tcGxleCB0eXBlc1xuICAgICAgICByZXR1cm4gW1R5cGVEZWZJbmZvLkRvTm90Q29uc3RydWN0LCBUeXBlRGVmSW5mby5FbnVtLCBUeXBlRGVmSW5mby5TdHJ1Y3RdLmluY2x1ZGVzKHR5cGVEZWYuaW5mbykgJiYgdHlwZURlZi5sb29rdXBOYW1lXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBkb2NzOiB0eXBlRGVmLmRvY3MsXG4gICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uU2ksXG4gICAgICAgICAgICAgICAgbG9va3VwSW5kZXgsXG4gICAgICAgICAgICAgICAgbG9va3VwTmFtZTogdGhpcy5fX2ludGVybmFsX19uYW1lc1tsb29rdXBJbmRleF0sXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy5yZWdpc3RyeS5jcmVhdGVMb29rdXBUeXBlKGxvb2t1cElkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0eXBlRGVmO1xuICAgIH1cbiAgICAvKiogQGludGVybmFsIENvbnZlcnRzIGEgbG9va3VwSWQgaW5wdXQgdG8gdGhlIGFjdHVhbCBsb29rdXAgaW5kZXggKi9cbiAgICBfX2ludGVybmFsX19nZXRMb29rdXBJZChsb29rdXBJZCkge1xuICAgICAgICBpZiAoaXNTdHJpbmcobG9va3VwSWQpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVnaXN0cnkuaXNMb29rdXBUeXBlKGxvb2t1cElkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9ydGFibGVSZWdpc3RyeTogRXhwZWN0ZWQgYSBsb29rdXAgc3RyaW5nIHR5cGUsIGZvdW5kICR7bG9va3VwSWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobG9va3VwSWQucmVwbGFjZSgnTG9va3VwJywgJycpLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIobG9va3VwSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9va3VwSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvb2t1cElkLnRvTnVtYmVyKCk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgQ29udmVydHMgYSB0eXBlIGludG8gYSBUeXBlRGVmIGZvciBDb2RlYyB1c2FnZSAqL1xuICAgIF9faW50ZXJuYWxfX2V4dHJhY3QodHlwZSwgbG9va3VwSW5kZXgpIHtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlID0gdHlwZS5wYXRoLmpvaW4oJzo6Jyk7XG4gICAgICAgIGxldCB0eXBlRGVmO1xuICAgICAgICBjb25zdCBhbGlhc1R5cGUgPSB0aGlzLl9faW50ZXJuYWxfX2FsaWFzW2xvb2t1cEluZGV4XSB8fCBnZXRBbGlhc1BhdGgodHlwZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYWxpYXNUeXBlKSB7XG4gICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdEFsaWFzUGF0aChsb29rdXBJbmRleCwgYWxpYXNUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5kZWYudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdBcnJheSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlRGVmID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0QXJyYXkobG9va3VwSW5kZXgsIHR5cGUuZGVmLmFzQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JpdFNlcXVlbmNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVEZWYgPSB0aGlzLl9faW50ZXJuYWxfX2V4dHJhY3RCaXRTZXF1ZW5jZShsb29rdXBJbmRleCwgdHlwZS5kZWYuYXNCaXRTZXF1ZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29tcGFjdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlRGVmID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0Q29tcGFjdChsb29rdXBJbmRleCwgdHlwZS5kZWYuYXNDb21wYWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdDb21wb3NpdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdENvbXBvc2l0ZShsb29rdXBJbmRleCwgdHlwZSwgdHlwZS5kZWYuYXNDb21wb3NpdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0hpc3RvcmljTWV0YUNvbXBhdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlRGVmID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0SGlzdG9yaWMobG9va3VwSW5kZXgsIHR5cGUuZGVmLmFzSGlzdG9yaWNNZXRhQ29tcGF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdQcmltaXRpdmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdFByaW1pdGl2ZShsb29rdXBJbmRleCwgdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2VxdWVuY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdFNlcXVlbmNlKGxvb2t1cEluZGV4LCB0eXBlLmRlZi5hc1NlcXVlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdUdXBsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlRGVmID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0VHVwbGUobG9va3VwSW5kZXgsIHR5cGUuZGVmLmFzVHVwbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1ZhcmlhbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdFZhcmlhbnQobG9va3VwSW5kZXgsIHR5cGUsIHR5cGUuZGVmLmFzVmFyaWFudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogYXNzZXJ0VW5yZWFjaGFibGUodHlwZS5kZWYudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3J0YWJsZVJlZ2lzdHJ5OiAke2xvb2t1cEluZGV4fSR7bmFtZXNwYWNlID8gYCAoJHtuYW1lc3BhY2V9KWAgOiAnJ306IEVycm9yIGV4dHJhY3RpbmcgJHtzdHJpbmdpZnkodHlwZSl9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBkb2NzOiBzYW5pdGl6ZURvY3ModHlwZS5kb2NzKSxcbiAgICAgICAgICAgIG5hbWVzcGFjZVxuICAgICAgICB9LCB0eXBlRGVmKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBBcnJheSBpbnRvIFR5cGVEZWYuVmVjRml4ZWQgKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0QXJyYXkoXywgeyBsZW4sIHR5cGUgfSkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBsZW4udG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKGxlbmd0aCA+IDIwNDgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0IGZvciBbVHlwZTsgPGxlbmd0aD5dLCB3aGVyZSBsZW5ndGggPD0gMjA0OCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aXRoVHlwZVN0cmluZyh0aGlzLnJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5WZWNGaXhlZCxcbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIHN1YjogdGhpcy5fX2ludGVybmFsX19jcmVhdGVTaURlZih0eXBlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBCaXRTZXF1ZW5jZSBpbnRvIFR5cGVEZWYuUGxhaW4gKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0Qml0U2VxdWVuY2UoXywgeyBiaXRPcmRlclR5cGUsIGJpdFN0b3JlVHlwZSB9KSB7XG4gICAgICAgIC8vIFdpdGggdGhlIHYzIG9mIHNjYWxlLWluZm8gdGhpcyBzd2FwcGVkIGFyb3VuZCwgYnV0IG9idmlvdXNseSB0aGUgZGVjb2RlciBjYW5ub3QgZGV0ZXJtaW5lXG4gICAgICAgIC8vIHRoZSBvcmRlci4gV2l0aCB0aGF0IGluLW1pbmQsIHdlIGFwcGx5IGEgZGV0ZWN0aW9uIGZvciBMU2IwL01zYiBhbmQgc2V0IGFjY29yZGluZ2x5XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKGJpdE9yZGVyVHlwZSk7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKGJpdFN0b3JlVHlwZSk7XG4gICAgICAgIGNvbnN0IFtiaXRPcmRlciwgYml0U3RvcmVdID0gQklUVkVDX05TLmluY2x1ZGVzKGEubmFtZXNwYWNlIHx8ICcnKVxuICAgICAgICAgICAgPyBbYSwgYl1cbiAgICAgICAgICAgIDogW2IsIGFdO1xuICAgICAgICBpZiAoIWJpdE9yZGVyLm5hbWVzcGFjZSB8fCAhQklUVkVDX05TLmluY2x1ZGVzKGJpdE9yZGVyLm5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBiaXRPcmRlciBmb3VuZCBhcyAke2JpdE9yZGVyLm5hbWVzcGFjZSB8fCAnPHVua25vd24+J31gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiaXRTdG9yZS5pbmZvICE9PSBUeXBlRGVmSW5mby5QbGFpbiB8fCBiaXRTdG9yZS50eXBlICE9PSAndTgnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgdTggYml0U3RvcmUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCwgZm91bmQgJHtiaXRTdG9yZS50eXBlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzTHNiID0gQklUVkVDX05TX0xTQi5pbmNsdWRlcyhiaXRPcmRlci5uYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIWlzTHNiKSB7XG4gICAgICAgICAgICAvLyBUT0RPIFRvIHJlbW92ZSB0aGlzIGxpbWl0YXRpb24sIHdlIG5lZWQgdG8gcGFzcyBhbiBleHRyYSBpbmZvIGZsYWdcbiAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gdGhlIFR5cGVEZWYgKEhlcmUgd2UgY291bGQgcG90ZW50aWFsbHkgcmUtdXNlIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy8gbGlrZSBpbmRleCAoPz8/KSB0byBpbmRpY2F0ZSBhbmQgZW5zdXJlIHdlIHVzZSBpdCB0byBwYXNzIHRvIHRoZVxuICAgICAgICAgICAgLy8gQml0VmVjIGNvbnN0cnVjdG9yIC0gd2hpY2ggZG9lcyBoYW5kbGUgdGhpcyB0eXBlKVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcG9sa2Fkb3QtanMvYXBpL2lzc3Vlcy81NTg4XG4gICAgICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgTFNCIEJpdFZlYyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLCBmb3VuZCAke2JpdE9yZGVyLm5hbWVzcGFjZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgICAgICB0eXBlOiAnQml0VmVjJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKiogQGludGVybmFsIEV4dHJhY3RzIGEgU2NhbGVJbmZvIENvbXBhY3QgaW50byBUeXBlRGVmLkNvbXBhY3QgKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0Q29tcGFjdChfLCB7IHR5cGUgfSkge1xuICAgICAgICByZXR1cm4gd2l0aFR5cGVTdHJpbmcodGhpcy5yZWdpc3RyeSwge1xuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uQ29tcGFjdCxcbiAgICAgICAgICAgIHN1YjogdGhpcy5fX2ludGVybmFsX19jcmVhdGVTaURlZih0eXBlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBDb21wb3NpdGUgaW50byBUeXBlRGVmLntCVHJlZSosIFJhbmdlKiwgV3JhcHBlcip9ICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdENvbXBvc2l0ZShsb29rdXBJbmRleCwgeyBwYXJhbXMsIHBhdGggfSwgeyBmaWVsZHMgfSkge1xuICAgICAgICBpZiAocGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhGaXJzdCA9IHBhdGhbMF0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhMYXN0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAocGF0aC5sZW5ndGggPT09IDEgJiYgcGF0aEZpcnN0ID09PSAnQlRyZWVNYXAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCVHJlZU1hcCByZXF1aXJlcyAyIHBhcmFtZXRlcnMsIGZvdW5kICR7cGFyYW1zLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uQlRyZWVNYXAsXG4gICAgICAgICAgICAgICAgICAgIHN1YjogcGFyYW1zLm1hcCgoeyB0eXBlIH0pID0+IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYodHlwZS51bndyYXAoKSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoLmxlbmd0aCA9PT0gMSAmJiBwYXRoRmlyc3QgPT09ICdCVHJlZVNldCcpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJUcmVlU2V0IHJlcXVpcmVzIDEgcGFyYW1ldGVyLCBmb3VuZCAke3BhcmFtcy5sZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZVN0cmluZyh0aGlzLnJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLkJUcmVlU2V0LFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChbJ1JhbmdlJywgJ1JhbmdlSW5jbHVzaXZlJ10uaW5jbHVkZXMocGF0aEZpcnN0KSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmFuZ2UgcmVxdWlyZXMgMSBwYXJhbWV0ZXIsIGZvdW5kICR7cGFyYW1zLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogcGF0aEZpcnN0ID09PSAnUmFuZ2UnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFR5cGVEZWZJbmZvLlJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFR5cGVEZWZJbmZvLlJhbmdlSW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXRoRmlyc3RcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFsnV3JhcHBlcktlZXBPcGFxdWUnLCAnV3JhcHBlck9wYXF1ZSddLmluY2x1ZGVzKHBhdGhMYXN0KSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JhcHBlck9wYXF1ZSByZXF1aXJlcyAxIHBhcmFtZXRlciwgZm91bmQgJHtwYXJhbXMubGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aFR5cGVTdHJpbmcodGhpcy5yZWdpc3RyeSwge1xuICAgICAgICAgICAgICAgICAgICBpbmZvOiBwYXRoTGFzdCA9PT0gJ1dyYXBwZXJLZWVwT3BhcXVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBUeXBlRGVmSW5mby5XcmFwcGVyS2VlcE9wYXF1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBUeXBlRGVmSW5mby5XcmFwcGVyT3BhcXVlLFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXRoTGFzdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQQVRIU19TRVQuc29tZSgocCkgPT4gbWF0Y2hQYXJ0cyhwLCBwYXRoKSlcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19leHRyYWN0Q29tcG9zaXRlU2V0KGxvb2t1cEluZGV4LCBwYXJhbXMsIGZpZWxkcylcbiAgICAgICAgICAgIDogdGhpcy5fX2ludGVybmFsX19leHRyYWN0RmllbGRzKGxvb2t1cEluZGV4LCBmaWVsZHMpO1xuICAgIH1cbiAgICAvKiogQGludGVybmFsIEV4dHJhY3RzIGEgU2NhbGVJbmZvIENvbXBvc2l0ZVNldCBpbnRvIFR5cGVEZWYuU2V0ICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdENvbXBvc2l0ZVNldChfLCBwYXJhbXMsIGZpZWxkcykge1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMSB8fCBmaWVsZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldCBoYW5kbGluZyBleHBlY3RzIHBhcmFtL2ZpZWxkIGFzIHNpbmdsZSBlbnRyaWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLlNldCxcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5yZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKHRoaXMucmVnaXN0cnkuY3JlYXRlTG9va3VwVHlwZShmaWVsZHNbMF0udHlwZSksIFtdKS5iaXRMZW5ndGgoKSxcbiAgICAgICAgICAgIHN1YjogdGhpcy5nZXRTaVR5cGUocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpLmRlZi5hc1ZhcmlhbnQudmFyaWFudHMubWFwKCh7IGluZGV4LCBuYW1lIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGFuIGlzc3VlID4gMl41MyAtIDEgLi4uIGRvbid0IGhhdmUgdGhvc2UgKHlldClcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgudG9OdW1iZXIoKSxcbiAgICAgICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5QbGFpbixcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgU2NhbGVJbmZvIGVudW0vc3RydWN0IGZpZWxkcyBpbnRvIFR5cGVEZWYue1N0cnVjdCwgVHVwbGV9ICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdEZpZWxkcyhsb29rdXBJbmRleCwgZmllbGRzKSB7XG4gICAgICAgIGxldCBpc1N0cnVjdCA9IHRydWU7XG4gICAgICAgIGxldCBpc1R1cGxlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY291bnQgPSBmaWVsZHMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBmID0gMDsgZiA8IGNvdW50OyBmKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmllbGRzW2ZdO1xuICAgICAgICAgICAgaXNTdHJ1Y3QgPSBpc1N0cnVjdCAmJiBuYW1lLmlzU29tZTtcbiAgICAgICAgICAgIGlzVHVwbGUgPSBpc1R1cGxlICYmIG5hbWUuaXNOb25lO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNUdXBsZSAmJiAhaXNTdHJ1Y3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWVsZHMgdHlwZSBkZXRlY3RlZCwgZXhwZWN0ZWQgZWl0aGVyIFR1cGxlIChhbGwgdW5uYW1lZCkgb3IgU3RydWN0IChhbGwgbmFtZWQpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLk51bGwsXG4gICAgICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVHVwbGUgJiYgY291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVEZWYgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKGZpZWxkc1swXS50eXBlKTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RTcHJlYWQoe30sIHR5cGVEZWYsIGxvb2t1cEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBsb29rdXBJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbG9va3VwTmFtZTogdGhpcy5fX2ludGVybmFsX19uYW1lc1tsb29rdXBJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgIGxvb2t1cE5hbWVSb290OiB0eXBlRGVmLmxvb2t1cE5hbWVcbiAgICAgICAgICAgICAgICB9LCBmaWVsZHNbMF0udHlwZU5hbWUuaXNTb21lXG4gICAgICAgICAgICAgICAgPyB7IHR5cGVOYW1lOiBzYW5pdGl6ZShmaWVsZHNbMF0udHlwZU5hbWUudW53cmFwKCkpIH1cbiAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtzdWIsIGFsaWFzXSA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdEZpZWxkc0FsaWFzKGZpZWxkcyk7XG4gICAgICAgIHJldHVybiB3aXRoVHlwZVN0cmluZyh0aGlzLnJlZ2lzdHJ5LCBvYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaW5mbzogaXNUdXBsZSAvLyBUdXBsZSBjaGVjayBmaXJzdFxuICAgICAgICAgICAgICAgID8gVHlwZURlZkluZm8uVHVwbGVcbiAgICAgICAgICAgICAgICA6IFR5cGVEZWZJbmZvLlN0cnVjdCxcbiAgICAgICAgICAgIHN1YlxuICAgICAgICB9LCBhbGlhcy5zaXplXG4gICAgICAgICAgICA/IHsgYWxpYXMgfVxuICAgICAgICAgICAgOiBudWxsLCBsb29rdXBJbmRleCA9PT0gLTFcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgbG9va3VwSW5kZXgsXG4gICAgICAgICAgICAgICAgbG9va3VwTmFtZTogdGhpcy5fX2ludGVybmFsX19uYW1lc1tsb29rdXBJbmRleF1cbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBBcHBseSBmaWVsZCBhbGlhc3NlZCAod2l0aCBubyBKUyBjb25mbGljdHMpICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdEZpZWxkc0FsaWFzKGZpZWxkcykge1xuICAgICAgICBjb25zdCBhbGlhcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgY291bnQgPSBmaWVsZHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBzdWIgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZG9jcywgbmFtZSwgdHlwZSwgdHlwZU5hbWUgfSA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVEZWYgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKHR5cGUpO1xuICAgICAgICAgICAgaWYgKG5hbWUuaXNOb25lKSB7XG4gICAgICAgICAgICAgICAgc3ViW2ldID0gdHlwZURlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lRmllbGQsIG5hbWVPcmlnXSA9IHRoaXMuc2FuaXRpemVGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZUZpZWxkICYmIG5hbWVPcmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnNldChuYW1lRmllbGQsIG5hbWVPcmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViW2ldID0gb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgZG9jczogc2FuaXRpemVEb2NzKGRvY3MpLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lRmllbGRcbiAgICAgICAgICAgICAgICB9LCB0eXBlRGVmLCB0eXBlTmFtZS5pc1NvbWVcbiAgICAgICAgICAgICAgICAgICAgPyB7IHR5cGVOYW1lOiBzYW5pdGl6ZSh0eXBlTmFtZS51bndyYXAoKSkgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc3ViLCBhbGlhc107XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgYW4gaW50ZXJuYWwgSGlzdG9yaWMgKHByZSBWMTQpIHR5cGUgICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdEhpc3RvcmljKF8sIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogdHlwZS50b1N0cmluZygpLFxuICAgICAgICAgICAgaXNGcm9tU2k6IHRydWVcbiAgICAgICAgfSwgZ2V0VHlwZURlZih0eXBlKSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgYSBTY2FsZUluZm8gUHJpbWl0aXZlIGludG8gVHlwZURlZi5QbGFpbiAqL1xuICAgIF9faW50ZXJuYWxfX2V4dHJhY3RQcmltaXRpdmUoXywgdHlwZSkge1xuICAgICAgICBjb25zdCB0eXBlU3RyID0gdHlwZS5kZWYuYXNQcmltaXRpdmUudHlwZS50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgICAgICB0eXBlOiBQUklNSVRJVkVfQUxJQVNbdHlwZVN0cl0gfHwgdHlwZVN0ci50b0xvd2VyQ2FzZSgpXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgQXBwbGllcyBhbiBhbGlhcyBwYXRoIG9udG8gdGhlIFR5cGVEZWYgKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0QWxpYXNQYXRoKF8sIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLlBsYWluLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKiogQGludGVybmFsIEV4dHJhY3RzIGEgU2NhbGVJbmZvIFNlcXVlbmNlIGludG8gVHlwZURlZi5WZWMgKHdpdGggQnl0ZXMgc2hvcnRjdXQpICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdFNlcXVlbmNlKGxvb2t1cEluZGV4LCB7IHR5cGUgfSkge1xuICAgICAgICBjb25zdCBzdWIgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKHR5cGUpO1xuICAgICAgICBpZiAoc3ViLnR5cGUgPT09ICd1OCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2l0aFR5cGVTdHJpbmcodGhpcy5yZWdpc3RyeSwge1xuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uVmVjLFxuICAgICAgICAgICAgbG9va3VwSW5kZXgsXG4gICAgICAgICAgICBsb29rdXBOYW1lOiB0aGlzLl9faW50ZXJuYWxfX25hbWVzW2xvb2t1cEluZGV4XSxcbiAgICAgICAgICAgIHN1YlxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBUdXBsZSBpbnRvIFR5cGVEZWYuVHVwbGUgKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0VHVwbGUobG9va3VwSW5kZXgsIGlkcykge1xuICAgICAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5OdWxsLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmKGlkc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3ViID0gaWRzLm1hcCgodCkgPT4gdGhpcy5fX2ludGVybmFsX19jcmVhdGVTaURlZih0KSk7XG4gICAgICAgIHJldHVybiB3aXRoVHlwZVN0cmluZyh0aGlzLnJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5UdXBsZSxcbiAgICAgICAgICAgIGxvb2t1cEluZGV4LFxuICAgICAgICAgICAgbG9va3VwTmFtZTogdGhpcy5fX2ludGVybmFsX19uYW1lc1tsb29rdXBJbmRleF0sXG4gICAgICAgICAgICBzdWJcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgYSBTY2FsZUluZm8gVmFyaWFudCBpbnRvIFR5cGVEZWYue09wdGlvbiwgUmVzdWx0LCBFbnVtfSAqL1xuICAgIF9faW50ZXJuYWxfX2V4dHJhY3RWYXJpYW50KGxvb2t1cEluZGV4LCB7IHBhcmFtcywgcGF0aCB9LCB7IHZhcmlhbnRzIH0pIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsVmFyaWFudCA9IHBhdGhbMF0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsVmFyaWFudCA9PT0gJ09wdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbiByZXF1aXJlcyAxIHBhcmFtZXRlciwgZm91bmQgJHtwYXJhbXMubGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOT1RFIFRoaXMgaXMgb3B0LWluICh1bmhhbmRsZWQpLCBub3QgYnkgZGVmYXVsdFxuICAgICAgICAgICAgICAgIC8vIGlmIChzdWIudHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgICAgICAgICAgICAgLy8gICByZXR1cm4gd2l0aFR5cGVTdHJpbmcodGhpcy5yZWdpc3RyeSwge1xuICAgICAgICAgICAgICAgIC8vICAgICBpbmZvOiBUeXBlRGVmSW5mby5QbGFpbixcbiAgICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ09wdGlvbkJvb2wnXG4gICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uT3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzcGVjaWFsVmFyaWFudCA9PT0gJ1Jlc3VsdCcpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlc3VsdCByZXF1aXJlcyAyIHBhcmFtZXRlcnMsIGZvdW5kICR7cGFyYW1zLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHBhcmFtcy5tYXAoKHsgdHlwZSB9LCBpbmRleCkgPT4gb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFsnT2snLCAnRXJyb3InXVtpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5fX2ludGVybmFsX19jcmVhdGVTaURlZih0eXBlLnVud3JhcCgpKSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhcmlhbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5OdWxsLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19leHRyYWN0VmFyaWFudEVudW0obG9va3VwSW5kZXgsIHZhcmlhbnRzKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBWYXJpYW50IGludG8gVHlwZURlZi5FbnVtICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdFZhcmlhbnRFbnVtKGxvb2t1cEluZGV4LCB2YXJpYW50cykge1xuICAgICAgICBjb25zdCBzdWIgPSBbXTtcbiAgICAgICAgLy8gd2UgbWF5IGdldCBlbnRyaWVzIG91dCBvZiBvcmRlciwgYXJyYW5nZSB0aGVtIGZpcnN0IGJlZm9yZSBjcmVhdGluZyB3aXRoIGdhcHMgZmlsbGVkXG4gICAgICAgIC8vIE5PVEU6IFNpbmNlIHdlIG11dGF0ZSwgdXNlIGEgY29weSBvZiB0aGUgYXJyYXkgYXMgYW4gaW5wdXRcbiAgICAgICAgdmFyaWFudHNcbiAgICAgICAgICAgIC5zbGljZSgpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleC5jbXAoYi5pbmRleCkpXG4gICAgICAgICAgICAuZm9yRWFjaCgoeyBmaWVsZHMsIGluZGV4OiBibkluZGV4LCBuYW1lIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYm5JbmRleC50b051bWJlcigpO1xuICAgICAgICAgICAgd2hpbGUgKHN1Yi5sZW5ndGggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgc3ViLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpbmRleDogc3ViLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uTnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYF9fVW51c2VkJHtzdWIubGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3ViLnB1c2gob2JqZWN0U3ByZWFkKHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdEZpZWxkcygtMSwgZmllbGRzKSwge1xuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLkVudW0sXG4gICAgICAgICAgICBsb29rdXBJbmRleCxcbiAgICAgICAgICAgIGxvb2t1cE5hbWU6IHRoaXMuX19pbnRlcm5hbF9fbmFtZXNbbG9va3VwSW5kZXhdLFxuICAgICAgICAgICAgc3ViXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGFzc2VydFVucmVhY2hhYmxlIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gY29udmVydFR5cGUoa2V5KSB7XG4gICAgcmV0dXJuIChyZWdpc3RyeSwgeyB0eXBlIH0pID0+IHJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1NpMVR5cGVEZWYnLCB7XG4gICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLnRvTnVtYmVyKClcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY29udmVydEFycmF5KHJlZ2lzdHJ5LCB7IGxlbiwgdHlwZSB9KSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1NpMVR5cGVEZWYnLCB7XG4gICAgICAgIEFycmF5OiB7XG4gICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICB0eXBlOiB0eXBlLnRvTnVtYmVyKClcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY29udmVydEJpdFNlcXVlbmNlKHJlZ2lzdHJ5LCB7IGJpdE9yZGVyVHlwZSwgYml0U3RvcmVUeXBlIH0pIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZSgnU2kxVHlwZURlZicsIHtcbiAgICAgICAgQml0U2VxdWVuY2U6IHtcbiAgICAgICAgICAgIGJpdE9yZGVyVHlwZTogYml0T3JkZXJUeXBlLnRvTnVtYmVyKCksXG4gICAgICAgICAgICBiaXRTdG9yZVR5cGU6IGJpdFN0b3JlVHlwZS50b051bWJlcigpXG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmNvbnN0IGNvbnZlcnRDb21wYWN0ID0gY29udmVydFR5cGUoJ0NvbXBhY3QnKTtcbmZ1bmN0aW9uIGNvbnZlcnRDb21wb3NpdGUocmVnaXN0cnksIHsgZmllbGRzIH0pIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZSgnU2kxVHlwZURlZicsIHtcbiAgICAgICAgQ29tcG9zaXRlOiB7XG4gICAgICAgICAgICBmaWVsZHM6IGNvbnZlcnRGaWVsZHMocmVnaXN0cnksIGZpZWxkcylcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY29udmVydEZpZWxkcyhyZWdpc3RyeSwgZmllbGRzKSB7XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoKHsgZG9jcywgbmFtZSwgdHlwZSwgdHlwZU5hbWUgfSkgPT4gcmVnaXN0cnkuY3JlYXRlVHlwZSgnU2kxRmllbGQnLCB7XG4gICAgICAgIGRvY3MsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGU6IHR5cGUudG9OdW1iZXIoKSxcbiAgICAgICAgdHlwZU5hbWVcbiAgICB9KSk7XG59XG5mdW5jdGlvbiBjb252ZXJ0UGhhbnRvbShyZWdpc3RyeSwgcGF0aCkge1xuICAgIGNvbnNvbGUud2FybihgQ29udmVydGluZyBwaGFudG9tIHR5cGUgJHtwYXRoLm1hcCgocCkgPT4gcC50b1N0cmluZygpKS5qb2luKCc6OicpfSB0byBlbXB0eSB0dXBsZWApO1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlKCdTaTFUeXBlRGVmJywge1xuICAgICAgICBUdXBsZTogW11cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRQcmltaXRpdmUocmVnaXN0cnksIHByaW0pIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZSgnU2kxVHlwZURlZicsIHtcbiAgICAgICAgUHJpbWl0aXZlOiBwcmltLnRvU3RyaW5nKClcbiAgICB9KTtcbn1cbmNvbnN0IGNvbnZlcnRTZXF1ZW5jZSA9IGNvbnZlcnRUeXBlKCdTZXF1ZW5jZScpO1xuZnVuY3Rpb24gY29udmVydFR1cGxlKHJlZ2lzdHJ5LCB0eXBlcykge1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlKCdTaTFUeXBlRGVmJywge1xuICAgICAgICBUdXBsZTogdHlwZXMubWFwKCh0KSA9PiB0LnRvTnVtYmVyKCkpXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb252ZXJ0VmFyaWFudChyZWdpc3RyeSwgeyB2YXJpYW50cyB9KSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1NpMVR5cGVEZWYnLCB7XG4gICAgICAgIFZhcmlhbnQ6IHtcbiAgICAgICAgICAgIHZhcmlhbnRzOiB2YXJpYW50cy5tYXAoKHsgZGlzY3JpbWluYW50LCBkb2NzLCBmaWVsZHMsIG5hbWUgfSwgaW5kZXgpID0+IHJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1NpMVZhcmlhbnQnLCB7XG4gICAgICAgICAgICAgICAgZG9jcyxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IGNvbnZlcnRGaWVsZHMocmVnaXN0cnksIGZpZWxkcyksXG4gICAgICAgICAgICAgICAgaW5kZXg6IGRpc2NyaW1pbmFudC5pc1NvbWVcbiAgICAgICAgICAgICAgICAgICAgPyBkaXNjcmltaW5hbnQudW53cmFwKCkudG9OdW1iZXIoKVxuICAgICAgICAgICAgICAgICAgICA6IGluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb252ZXJ0RGVmKHJlZ2lzdHJ5LCB7IGRlZiwgcGF0aCB9KSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBzd2l0Y2ggKGRlZi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbnZlcnRBcnJheShyZWdpc3RyeSwgZGVmLmFzQXJyYXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0JpdFNlcXVlbmNlJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbnZlcnRCaXRTZXF1ZW5jZShyZWdpc3RyeSwgZGVmLmFzQml0U2VxdWVuY2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0NvbXBhY3QnOlxuICAgICAgICAgICAgcmVzdWx0ID0gY29udmVydENvbXBhY3QocmVnaXN0cnksIGRlZi5hc0NvbXBhY3QpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0NvbXBvc2l0ZSc6XG4gICAgICAgICAgICByZXN1bHQgPSBjb252ZXJ0Q29tcG9zaXRlKHJlZ2lzdHJ5LCBkZWYuYXNDb21wb3NpdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BoYW50b20nOlxuICAgICAgICAgICAgcmVzdWx0ID0gY29udmVydFBoYW50b20ocmVnaXN0cnksIHBhdGgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1ByaW1pdGl2ZSc6XG4gICAgICAgICAgICByZXN1bHQgPSBjb252ZXJ0UHJpbWl0aXZlKHJlZ2lzdHJ5LCBkZWYuYXNQcmltaXRpdmUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1NlcXVlbmNlJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbnZlcnRTZXF1ZW5jZShyZWdpc3RyeSwgZGVmLmFzU2VxdWVuY2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1R1cGxlJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbnZlcnRUdXBsZShyZWdpc3RyeSwgZGVmLmFzVHVwbGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1ZhcmlhbnQnOlxuICAgICAgICAgICAgcmVzdWx0ID0gY29udmVydFZhcmlhbnQocmVnaXN0cnksIGRlZi5hc1ZhcmlhbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IGFzc2VydFVucmVhY2hhYmxlKGRlZi50eXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b1YxKHJlZ2lzdHJ5LCB0eXBlcykge1xuICAgIHJldHVybiB0eXBlcy5tYXAoKHQsIGluZGV4KSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlKCdQb3J0YWJsZVR5cGUnLCB7XG4gICAgICAgIC8vIG9mZnNldHMgYXJlICsxIGZyb20gdjBcbiAgICAgICAgaWQ6IGluZGV4ICsgMSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgZGVmOiBjb252ZXJ0RGVmKHJlZ2lzdHJ5LCB0KSxcbiAgICAgICAgICAgIGRvY3M6IFtdLFxuICAgICAgICAgICAgcGFyYW1zOiB0LnBhcmFtcy5tYXAoKHApID0+IHJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1NpMVR5cGVQYXJhbWV0ZXInLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogcC50b051bWJlcigpXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBwYXRoOiB0LnBhdGgubWFwKChwKSA9PiBwLnRvU3RyaW5nKCkpXG4gICAgICAgIH1cbiAgICB9KSk7XG59XG4iLCJpbXBvcnQgeyBoZXhUb1U4YSwgbGF6eU1ldGhvZCwgbGF6eU1ldGhvZHMsIHN0cmluZ0NhbWVsQ2FzZSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG9iamVjdE5hbWVUb0NhbWVsIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVDb25zdGFudHMocmVnaXN0cnksIHsgcGFsbGV0cyB9LCBfdmVyc2lvbikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHBhbGxldHMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB7IGNvbnN0YW50cywgbmFtZSB9ID0gcGFsbGV0c1tpXTtcbiAgICAgICAgaWYgKCFjb25zdGFudHMuaXNFbXB0eSkge1xuICAgICAgICAgICAgbGF6eU1ldGhvZChyZXN1bHQsIHN0cmluZ0NhbWVsQ2FzZShuYW1lKSwgKCkgPT4gbGF6eU1ldGhvZHMoe30sIGNvbnN0YW50cywgKGNvbnN0YW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29kZWMgPSByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKHJlZ2lzdHJ5LmNyZWF0ZUxvb2t1cFR5cGUoY29uc3RhbnQudHlwZSksIFtoZXhUb1U4YShjb25zdGFudC52YWx1ZS50b0hleCgpKV0pO1xuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBjYXN0aW5nIGhlcmUgc2luY2Ugd2UgYXJlIGFzc2lnbmluZyB0byBhIHJlYWQtb25seSBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGNvZGVjLm1ldGEgPSBjb25zdGFudDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29kZWM7XG4gICAgICAgICAgICB9LCBvYmplY3ROYW1lVG9DYW1lbCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBpc0NvZGVjLCBpc1U4YSwgbGF6eU1ldGhvZCwgb2JqZWN0U3ByZWFkLCBzdHJpbmdDYW1lbENhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBsYXp5VmFyaWFudHMgfSBmcm9tICcuLi8uLi8uLi9jcmVhdGUvbGF6eS5qcyc7XG5pbXBvcnQgeyBvYmplY3ROYW1lVG9TdHJpbmcgfSBmcm9tICcuLi91dGlsLmpzJztcbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW50VG9NZXRhKGxvb2t1cCwgdmFyaWFudCkge1xuICAgIHJldHVybiBvYmplY3RTcHJlYWQoeyBhcmdzOiB2YXJpYW50LmZpZWxkcy5tYXAoKHsgdHlwZSB9KSA9PiBsb29rdXAuZ2V0VHlwZURlZih0eXBlKS50eXBlKSB9LCB2YXJpYW50KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZUVycm9ycyhyZWdpc3RyeSwgeyBsb29rdXAsIHBhbGxldHMgfSwgdmVyc2lvbikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHBhbGxldHMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB7IGVycm9ycywgaW5kZXgsIG5hbWUgfSA9IHBhbGxldHNbaV07XG4gICAgICAgIGlmIChlcnJvcnMuaXNTb21lKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSB2ZXJzaW9uID49IDEyID8gaW5kZXgudG9OdW1iZXIoKSA6IGk7XG4gICAgICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc3RyaW5nQ2FtZWxDYXNlKG5hbWUpLCAoKSA9PiBsYXp5VmFyaWFudHMobG9va3VwLCBlcnJvcnMudW53cmFwKCksIG9iamVjdE5hbWVUb1N0cmluZywgKHZhcmlhbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgLy8gV2Ugc3ByaW5rbGUgaW4gaXNDb2RlYyAmIGlzVThhIHRvIGVuc3VyZSB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSBjb3JyZWN0IG9iamVjdHNcbiAgICAgICAgICAgICAgICBpczogKGVycm9yTW9kKSA9PiBpc0NvZGVjKGVycm9yTW9kKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0NvZGVjKGVycm9yTW9kLmluZGV4KSAmJlxuICAgICAgICAgICAgICAgICAgICBlcnJvck1vZC5pbmRleC5lcShzZWN0aW9uSW5kZXgpICYmIChpc1U4YShlcnJvck1vZC5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvck1vZC5lcnJvclswXSA9PT0gdmFyaWFudC5pbmRleC50b051bWJlcigpXG4gICAgICAgICAgICAgICAgICAgIDogaXNDb2RlYyhlcnJvck1vZC5lcnJvcikgJiYgZXJyb3JNb2QuZXJyb3IuZXEodmFyaWFudC5pbmRleCkpLFxuICAgICAgICAgICAgICAgIG1ldGE6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0Vycm9yTWV0YWRhdGFMYXRlc3QnLCBbdmFyaWFudFRvTWV0YShsb29rdXAsIHZhcmlhbnQpXSlcbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IGlzQ29kZWMsIGlzVThhLCBsYXp5TWV0aG9kLCBzdHJpbmdDYW1lbENhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBsYXp5VmFyaWFudHMgfSBmcm9tICcuLi8uLi8uLi9jcmVhdGUvbGF6eS5qcyc7XG5pbXBvcnQgeyB2YXJpYW50VG9NZXRhIH0gZnJvbSAnLi4vZXJyb3JzL2luZGV4LmpzJztcbmltcG9ydCB7IG9iamVjdE5hbWVUb1N0cmluZyB9IGZyb20gJy4uL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckV2ZW50c1NvbWUoeyBldmVudHMgfSkge1xuICAgIHJldHVybiBldmVudHMuaXNTb21lO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlRXZlbnRzKHJlZ2lzdHJ5LCB7IGxvb2t1cCwgcGFsbGV0cyB9LCB2ZXJzaW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3QgZmlsdGVyZWQgPSBwYWxsZXRzLmZpbHRlcihmaWx0ZXJFdmVudHNTb21lKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBmaWx0ZXJlZC5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgZXZlbnRzLCBpbmRleCwgbmFtZSB9ID0gZmlsdGVyZWRbaV07XG4gICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHZlcnNpb24gPj0gMTIgPyBpbmRleC50b051bWJlcigpIDogaTtcbiAgICAgICAgbGF6eU1ldGhvZChyZXN1bHQsIHN0cmluZ0NhbWVsQ2FzZShuYW1lKSwgKCkgPT4gbGF6eVZhcmlhbnRzKGxvb2t1cCwgZXZlbnRzLnVud3JhcCgpLCBvYmplY3ROYW1lVG9TdHJpbmcsICh2YXJpYW50KSA9PiAoe1xuICAgICAgICAgICAgLy8gV2Ugc3ByaW5rbGUgaW4gaXNDb2RlYyAmIGlzVThhIHRvIGVuc3VyZSB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSBjb3JyZWN0IG9iamVjdHNcbiAgICAgICAgICAgIGlzOiAoZXZlbnRSZWNvcmQpID0+IGlzQ29kZWMoZXZlbnRSZWNvcmQpICYmXG4gICAgICAgICAgICAgICAgaXNVOGEoZXZlbnRSZWNvcmQuaW5kZXgpICYmXG4gICAgICAgICAgICAgICAgc2VjdGlvbkluZGV4ID09PSBldmVudFJlY29yZC5pbmRleFswXSAmJlxuICAgICAgICAgICAgICAgIHZhcmlhbnQuaW5kZXguZXEoZXZlbnRSZWNvcmQuaW5kZXhbMV0pLFxuICAgICAgICAgICAgbWV0YTogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnRXZlbnRNZXRhZGF0YUxhdGVzdCcsIFt2YXJpYW50VG9NZXRhKGxvb2t1cCwgdmFyaWFudCldKVxuICAgICAgICB9KSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgc3RyaW5nQ2FtZWxDYXNlIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gaXNUeCh0eCwgY2FsbEluZGV4KSB7XG4gICAgcmV0dXJuIHR4LmNhbGxJbmRleFswXSA9PT0gY2FsbEluZGV4WzBdICYmIHR4LmNhbGxJbmRleFsxXSA9PT0gY2FsbEluZGV4WzFdO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuY2hlY2tlZChyZWdpc3RyeSwgc2VjdGlvbiwgY2FsbEluZGV4LCBjYWxsTWV0YWRhdGEpIHtcbiAgICBjb25zdCBleHBlY3RlZEFyZ3MgPSBjYWxsTWV0YWRhdGEuZmllbGRzO1xuICAgIGNvbnN0IGZ1bmNOYW1lID0gc3RyaW5nQ2FtZWxDYXNlKGNhbGxNZXRhZGF0YS5uYW1lKTtcbiAgICBjb25zdCBleHRyaW5zaWNGbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChleHBlY3RlZEFyZ3MubGVuZ3RoICE9PSBhcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyaW5zaWMgJHtzZWN0aW9ufS4ke2Z1bmNOYW1lfSBleHBlY3RzICR7ZXhwZWN0ZWRBcmdzLmxlbmd0aH0gYXJndW1lbnRzLCBnb3QgJHthcmdzLmxlbmd0aH0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0NhbGwnLCBbeyBhcmdzLCBjYWxsSW5kZXggfSwgY2FsbE1ldGFkYXRhXSk7XG4gICAgfTtcbiAgICBleHRyaW5zaWNGbi5pcyA9ICh0eCkgPT4gaXNUeCh0eCwgY2FsbEluZGV4KTtcbiAgICBleHRyaW5zaWNGbi5jYWxsSW5kZXggPSBjYWxsSW5kZXg7XG4gICAgZXh0cmluc2ljRm4ubWV0YSA9IGNhbGxNZXRhZGF0YTtcbiAgICBleHRyaW5zaWNGbi5tZXRob2QgPSBmdW5jTmFtZTtcbiAgICBleHRyaW5zaWNGbi5zZWN0aW9uID0gc2VjdGlvbjtcbiAgICBleHRyaW5zaWNGbi50b0pTT04gPSAoKSA9PiBjYWxsTWV0YWRhdGEudG9KU09OKCk7XG4gICAgcmV0dXJuIGV4dHJpbnNpY0ZuO1xufVxuIiwiaW1wb3J0IHsgbGF6eU1ldGhvZCwgb2JqZWN0U3ByZWFkLCBzdHJpbmdDYW1lbENhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBsYXp5VmFyaWFudHMgfSBmcm9tICcuLi8uLi8uLi9jcmVhdGUvbGF6eS5qcyc7XG5pbXBvcnQgeyBnZXRTaU5hbWUgfSBmcm9tICcuLi8uLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IG9iamVjdE5hbWVUb0NhbWVsIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVVbmNoZWNrZWQgfSBmcm9tICcuL2NyZWF0ZVVuY2hlY2tlZC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQ2FsbHNTb21lKHsgY2FsbHMgfSkge1xuICAgIHJldHVybiBjYWxscy5pc1NvbWU7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FsbEZ1bmN0aW9uKHJlZ2lzdHJ5LCBsb29rdXAsIHZhcmlhbnQsIHNlY3Rpb25OYW1lLCBzZWN0aW9uSW5kZXgpIHtcbiAgICBjb25zdCB7IGZpZWxkcywgaW5kZXggfSA9IHZhcmlhbnQ7XG4gICAgY29uc3QgY291bnQgPSBmaWVsZHMubGVuZ3RoO1xuICAgIGNvbnN0IGFyZ3MgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB7IG5hbWUsIHR5cGUsIHR5cGVOYW1lIH0gPSBmaWVsZHNbaV07XG4gICAgICAgIGFyZ3NbaV0gPSBvYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nQ2FtZWxDYXNlKG5hbWUudW53cmFwT3IoYHBhcmFtJHtpfWApKSxcbiAgICAgICAgICAgIHR5cGU6IGdldFNpTmFtZShsb29rdXAsIHR5cGUpXG4gICAgICAgIH0sIHR5cGVOYW1lLmlzU29tZVxuICAgICAgICAgICAgPyB7IHR5cGVOYW1lOiB0eXBlTmFtZS51bndyYXAoKSB9XG4gICAgICAgICAgICA6IG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlVW5jaGVja2VkKHJlZ2lzdHJ5LCBzZWN0aW9uTmFtZSwgbmV3IFVpbnQ4QXJyYXkoW3NlY3Rpb25JbmRleCwgaW5kZXgudG9OdW1iZXIoKV0pLCByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdGdW5jdGlvbk1ldGFkYXRhTGF0ZXN0JywgW29iamVjdFNwcmVhZCh7IGFyZ3MgfSwgdmFyaWFudCldKSk7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVFeHRyaW5zaWNzKHJlZ2lzdHJ5LCB7IGxvb2t1cCwgcGFsbGV0cyB9LCB2ZXJzaW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3QgZmlsdGVyZWQgPSBwYWxsZXRzLmZpbHRlcihmaWx0ZXJDYWxsc1NvbWUpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGZpbHRlcmVkLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBjYWxscywgaW5kZXgsIG5hbWUgfSA9IGZpbHRlcmVkW2ldO1xuICAgICAgICBjb25zdCBzZWN0aW9uTmFtZSA9IHN0cmluZ0NhbWVsQ2FzZShuYW1lKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gdmVyc2lvbiA+PSAxMiA/IGluZGV4LnRvTnVtYmVyKCkgOiBpO1xuICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc2VjdGlvbk5hbWUsICgpID0+IGxhenlWYXJpYW50cyhsb29rdXAsIGNhbGxzLnVud3JhcCgpLCBvYmplY3ROYW1lVG9DYW1lbCwgKHZhcmlhbnQpID0+IGNyZWF0ZUNhbGxGdW5jdGlvbihyZWdpc3RyeSwgbG9va3VwLCB2YXJpYW50LCBzZWN0aW9uTmFtZSwgc2VjdGlvbkluZGV4KSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuLi9NZXRhZGF0YS5qcyc7XG5pbXBvcnQgeyBkZWNvcmF0ZUNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IGRlY29yYXRlRXJyb3JzIH0gZnJvbSAnLi9lcnJvcnMvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVjb3JhdGVFdmVudHMsIGZpbHRlckV2ZW50c1NvbWUgfSBmcm9tICcuL2V2ZW50cy9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZWNvcmF0ZUV4dHJpbnNpY3MsIGZpbHRlckNhbGxzU29tZSB9IGZyb20gJy4vZXh0cmluc2ljcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZWNvcmF0ZVN0b3JhZ2UgfSBmcm9tICcuL3N0b3JhZ2UvaW5kZXguanMnO1xuLyoqXG4gKiBFeHBhbmRzIHRoZSBtZXRhZGF0YSBieSBkZWNvcmF0aW9uIGludG8gY29uc3RzLCBxdWVyeSBhbmQgdHggc2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZE1ldGFkYXRhKHJlZ2lzdHJ5LCBtZXRhZGF0YSkge1xuICAgIGlmICghKG1ldGFkYXRhIGluc3RhbmNlb2YgTWV0YWRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gcGFzcyBhIHZhbGlkIE1ldGFkYXRhIGluc3RhbmNlIHRvIERlY29yYXRlZCcpO1xuICAgIH1cbiAgICBjb25zdCBsYXRlc3QgPSBtZXRhZGF0YS5hc0xhdGVzdDtcbiAgICBjb25zdCB2ZXJzaW9uID0gbWV0YWRhdGEudmVyc2lvbjtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb25zdHM6IGRlY29yYXRlQ29uc3RhbnRzKHJlZ2lzdHJ5LCBsYXRlc3QsIHZlcnNpb24pLFxuICAgICAgICBlcnJvcnM6IGRlY29yYXRlRXJyb3JzKHJlZ2lzdHJ5LCBsYXRlc3QsIHZlcnNpb24pLFxuICAgICAgICBldmVudHM6IGRlY29yYXRlRXZlbnRzKHJlZ2lzdHJ5LCBsYXRlc3QsIHZlcnNpb24pLFxuICAgICAgICBxdWVyeTogZGVjb3JhdGVTdG9yYWdlKHJlZ2lzdHJ5LCBsYXRlc3QsIHZlcnNpb24pLFxuICAgICAgICByZWdpc3RyeSxcbiAgICAgICAgdHg6IGRlY29yYXRlRXh0cmluc2ljcyhyZWdpc3RyeSwgbGF0ZXN0LCB2ZXJzaW9uKVxuICAgIH07XG59XG5leHBvcnQgeyBkZWNvcmF0ZUNvbnN0YW50cywgZGVjb3JhdGVFcnJvcnMsIGRlY29yYXRlRXZlbnRzLCBkZWNvcmF0ZUV4dHJpbnNpY3MsIGRlY29yYXRlU3RvcmFnZSwgZmlsdGVyQ2FsbHNTb21lLCBmaWx0ZXJFdmVudHNTb21lIH07XG4iLCJpbXBvcnQgeyBSYXcgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgY29tcGFjdEFkZExlbmd0aCwgY29tcGFjdFN0cmlwTGVuZ3RoLCBpc1VuZGVmaW5lZCwgb2JqZWN0U3ByZWFkLCBzdHJpbmdDYW1lbENhc2UsIHU4YUNvbmNhdCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyB4eGhhc2hBc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5pbXBvcnQgeyBnZXRTaU5hbWUgfSBmcm9tICcuLi8uLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEhhc2hlciB9IGZyb20gJy4vZ2V0SGFzaGVyLmpzJztcbmV4cG9ydCBjb25zdCBOT19SQVdfQVJHUyA9IHtcbiAgICBhcmdzOiBbXSxcbiAgICBoYXNoZXJzOiBbXSxcbiAgICBrZXlzOiBbXVxufTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGZpbHRlckRlZmluZWQoYSkge1xuICAgIHJldHVybiAhaXNVbmRlZmluZWQoYSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBhc3NlcnRBcmdzKHsgbWV0aG9kLCBzZWN0aW9uIH0sIHsgYXJncywga2V5cyB9KSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FsbCB0byAke3N0cmluZ0NhbWVsQ2FzZShzZWN0aW9uIHx8ICd1bmtub3duJyl9LiR7c3RyaW5nQ2FtZWxDYXNlKG1ldGhvZCB8fCAndW5rbm93bicpfSBuZWVkcyAke2tleXMubGVuZ3RofSBhcmd1bWVudHNgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJncy5maWx0ZXIoZmlsdGVyRGVmaW5lZCkubGVuZ3RoICE9PSBrZXlzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbGwgdG8gJHtzdHJpbmdDYW1lbENhc2Uoc2VjdGlvbiB8fCAndW5rbm93bicpfS4ke3N0cmluZ0NhbWVsQ2FzZShtZXRob2QgfHwgJ3Vua25vd24nKX0gbmVlZHMgJHtrZXlzLmxlbmd0aH0gYXJndW1lbnRzLCBmb3VuZCBbJHthcmdzLmpvaW4oJywgJyl9XWApO1xuICAgIH1cbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXlSYXdQYXJ0cyhyZWdpc3RyeSwgaXRlbUZuLCB7IGFyZ3MsIGhhc2hlcnMsIGtleXMgfSkge1xuICAgIGNvbnN0IGNvdW50ID0ga2V5cy5sZW5ndGg7XG4gICAgY29uc3QgZXh0cmEgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBleHRyYVtpXSA9IGdldEhhc2hlcihoYXNoZXJzW2ldKShyZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKHJlZ2lzdHJ5LmNyZWF0ZUxvb2t1cFR5cGUoa2V5c1tpXSksIFthcmdzW2ldXSkudG9VOGEoKSk7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAgIFtcbiAgICAgICAgICAgIHh4aGFzaEFzVThhKGl0ZW1Gbi5wcmVmaXgsIDEyOCksXG4gICAgICAgICAgICB4eGhhc2hBc1U4YShpdGVtRm4ubWV0aG9kLCAxMjgpXG4gICAgICAgIF0sXG4gICAgICAgIGV4dHJhXG4gICAgXTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXlJbnNwZWN0KHJlZ2lzdHJ5LCBpdGVtRm4sIGFyZ3MpIHtcbiAgICBhc3NlcnRBcmdzKGl0ZW1GbiwgYXJncyk7XG4gICAgY29uc3QgeyBtZXRhIH0gPSBpdGVtRm47XG4gICAgY29uc3QgW3ByZWZpeCwgZXh0cmFdID0gY3JlYXRlS2V5UmF3UGFydHMocmVnaXN0cnksIGl0ZW1GbiwgYXJncyk7XG4gICAgbGV0IHR5cGVzID0gW107XG4gICAgaWYgKG1ldGEudHlwZS5pc01hcCkge1xuICAgICAgICBjb25zdCB7IGhhc2hlcnMsIGtleSB9ID0gbWV0YS50eXBlLmFzTWFwO1xuICAgICAgICB0eXBlcyA9IGhhc2hlcnMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/IFtgJHtoYXNoZXJzWzBdLnR5cGV9KCR7Z2V0U2lOYW1lKHJlZ2lzdHJ5Lmxvb2t1cCwga2V5KX0pYF1cbiAgICAgICAgICAgIDogcmVnaXN0cnkubG9va3VwLmdldFNpVHlwZShrZXkpLmRlZi5hc1R1cGxlLm1hcCgoaywgaSkgPT4gYCR7aGFzaGVyc1tpXS50eXBlfSgke2dldFNpTmFtZShyZWdpc3RyeS5sb29rdXAsIGspfSlgKTtcbiAgICB9XG4gICAgY29uc3QgbmFtZXMgPSBbJ21vZHVsZScsICdtZXRob2QnXS5jb25jYXQoLi4uYXJncy5hcmdzLm1hcCgoXywgaSkgPT4gdHlwZXNbaV0pKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbm5lcjogcHJlZml4XG4gICAgICAgICAgICAuY29uY2F0KC4uLmV4dHJhKVxuICAgICAgICAgICAgLm1hcCgodiwgaSkgPT4gKHsgbmFtZTogbmFtZXNbaV0sIG91dGVyOiBbdl0gfSkpXG4gICAgfTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXlSYXcocmVnaXN0cnksIGl0ZW1GbiwgYXJncykge1xuICAgIGNvbnN0IFtwcmVmaXgsIGV4dHJhXSA9IGNyZWF0ZUtleVJhd1BhcnRzKHJlZ2lzdHJ5LCBpdGVtRm4sIGFyZ3MpO1xuICAgIHJldHVybiB1OGFDb25jYXQoLi4ucHJlZml4LCAuLi5leHRyYSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBjcmVhdGVLZXkocmVnaXN0cnksIGl0ZW1GbiwgYXJncykge1xuICAgIGFzc2VydEFyZ3MoaXRlbUZuLCBhcmdzKTtcbiAgICAvLyBhbHdheXMgYWRkIHRoZSBsZW5ndGggcHJlZml4ICh1bmRlcmx5aW5nIGl0IGlzIEJ5dGVzKVxuICAgIHJldHVybiBjb21wYWN0QWRkTGVuZ3RoKGNyZWF0ZUtleVJhdyhyZWdpc3RyeSwgaXRlbUZuLCBhcmdzKSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBjcmVhdGVTdG9yYWdlSW5zcGVjdChyZWdpc3RyeSwgaXRlbUZuLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyBtZXRhOiB7IHR5cGUgfSB9ID0gaXRlbUZuO1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAodHlwZS5pc1BsYWluKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5za2lwSGFzaGluZ1xuICAgICAgICAgICAgICAgID8geyBpbm5lcjogW10sIG5hbWU6ICd3ZWxsS25vd24nLCBvdXRlcjogW3U4YVRvVThhKG9wdGlvbnMua2V5KV0gfVxuICAgICAgICAgICAgICAgIDogY3JlYXRlS2V5SW5zcGVjdChyZWdpc3RyeSwgaXRlbUZuLCBOT19SQVdfQVJHUyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBoYXNoZXJzLCBrZXkgfSA9IHR5cGUuYXNNYXA7XG4gICAgICAgIHJldHVybiBoYXNoZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgPyBjcmVhdGVLZXlJbnNwZWN0KHJlZ2lzdHJ5LCBpdGVtRm4sIHsgYXJncywgaGFzaGVycywga2V5czogW2tleV0gfSlcbiAgICAgICAgICAgIDogY3JlYXRlS2V5SW5zcGVjdChyZWdpc3RyeSwgaXRlbUZuLCB7IGFyZ3MsIGhhc2hlcnMsIGtleXM6IHJlZ2lzdHJ5Lmxvb2t1cC5nZXRTaVR5cGUoa2V5KS5kZWYuYXNUdXBsZSB9KTtcbiAgICB9O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gY3JlYXRlU3RvcmFnZUZuKHJlZ2lzdHJ5LCBpdGVtRm4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG1ldGE6IHsgdHlwZSB9IH0gPSBpdGVtRm47XG4gICAgbGV0IGNhY2hlS2V5ID0gbnVsbDtcbiAgICAvLyBDYW4gb25seSBoYXZlIHplcm8gb3Igb25lIGFyZ3VtZW50OlxuICAgIC8vICAgLSBzdG9yYWdlLnN5c3RlbS5hY2NvdW50KGFkZHJlc3MpXG4gICAgLy8gICAtIHN0b3JhZ2UudGltZXN0YW1wLmJsb2NrUGVyaW9kKClcbiAgICAvLyBGb3IgaGlnaGVyLW1hcCBxdWVyaWVzIHRoZSBwYXJhbXMgYXJlIHBhc3NlZCBpbiBhcyBhbiB0dXBsZSwgW2tleTEsIGtleTJdXG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmICh0eXBlLmlzUGxhaW4pIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVLZXkpIHtcbiAgICAgICAgICAgICAgICBjYWNoZUtleSA9IG9wdGlvbnMuc2tpcEhhc2hpbmdcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0QWRkTGVuZ3RoKHU4YVRvVThhKG9wdGlvbnMua2V5KSlcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVLZXkocmVnaXN0cnksIGl0ZW1GbiwgTk9fUkFXX0FSR1MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlS2V5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgaGFzaGVycywga2V5IH0gPSB0eXBlLmFzTWFwO1xuICAgICAgICByZXR1cm4gaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgID8gY3JlYXRlS2V5KHJlZ2lzdHJ5LCBpdGVtRm4sIHsgYXJncywgaGFzaGVycywga2V5czogW2tleV0gfSlcbiAgICAgICAgICAgIDogY3JlYXRlS2V5KHJlZ2lzdHJ5LCBpdGVtRm4sIHsgYXJncywgaGFzaGVycywga2V5czogcmVnaXN0cnkubG9va3VwLmdldFNpVHlwZShrZXkpLmRlZi5hc1R1cGxlIH0pO1xuICAgIH07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBjcmVhdGVXaXRoTWV0YShyZWdpc3RyeSwgaXRlbUZuLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyBtZXRhLCBtZXRob2QsIHByZWZpeCwgc2VjdGlvbiB9ID0gaXRlbUZuO1xuICAgIGNvbnN0IHN0b3JhZ2VGbiA9IGNyZWF0ZVN0b3JhZ2VGbihyZWdpc3RyeSwgaXRlbUZuLCBvcHRpb25zKTtcbiAgICBzdG9yYWdlRm4uaW5zcGVjdCA9IGNyZWF0ZVN0b3JhZ2VJbnNwZWN0KHJlZ2lzdHJ5LCBpdGVtRm4sIG9wdGlvbnMpO1xuICAgIHN0b3JhZ2VGbi5tZXRhID0gbWV0YTtcbiAgICBzdG9yYWdlRm4ubWV0aG9kID0gc3RyaW5nQ2FtZWxDYXNlKG1ldGhvZCk7XG4gICAgc3RvcmFnZUZuLnByZWZpeCA9IHByZWZpeDtcbiAgICBzdG9yYWdlRm4uc2VjdGlvbiA9IHNlY3Rpb247XG4gICAgLy8gZXhwbGljaXRseSBhZGQgdGhlIGFjdHVhbCBtZXRob2QgaW4gdGhlIHRvSlNPTiwgdGhpcyBnZXRzIHVzZWQgdG8gZGV0ZXJtaW5lIGNhY2hpbmcgYW5kIHdpdGhvdXQgaXRcbiAgICAvLyBpbnN0YW5jZXMgKGUuZy4gY29sbGVjdGl2ZSkgd2lsbCBub3Qgd29yayBzaW5jZSBpdCBpcyBvbmx5IG1hdGNoZWQgb24gcGFyYW0gbWV0YVxuICAgIHN0b3JhZ2VGbi50b0pTT04gPSAoKSA9PiBvYmplY3RTcHJlYWQoeyBzdG9yYWdlOiB7IG1ldGhvZCwgcHJlZml4LCBzZWN0aW9uIH0gfSwgbWV0YS50b0pTT04oKSk7XG4gICAgcmV0dXJuIHN0b3JhZ2VGbjtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGV4dGVuZEhlYWRNZXRhKHJlZ2lzdHJ5LCB7IG1ldGE6IHsgZG9jcywgbmFtZSwgdHlwZSB9LCBzZWN0aW9uIH0sIHsgbWV0aG9kIH0sIGl0ZXJGbikge1xuICAgIC8vIG1ldGFkYXRhIHdpdGggYSBmYWxsYmFjayB2YWx1ZSB1c2luZyB0aGUgdHlwZSBvZiB0aGUga2V5LCB0aGUgbm9ybWFsXG4gICAgLy8gbWV0YSBmYWxsYmFjayBvbmx5IGFwcGxpZXMgdG8gYWN0dWFsIGVudHJ5IHZhbHVlcywgY3JlYXRlIG9uZSBmb3IgaGVhZFxuICAgIGNvbnN0IG1ldGEgPSByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTdG9yYWdlRW50cnlNZXRhZGF0YUxhdGVzdCcsIFt7XG4gICAgICAgICAgICBkb2NzLFxuICAgICAgICAgICAgZmFsbGJhY2s6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0J5dGVzJywgW10pLFxuICAgICAgICAgICAgbW9kaWZpZXI6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyTGF0ZXN0JywgWzFdKSwgLy8gcmVxdWlyZWRcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0eXBlOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTdG9yYWdlRW50cnlUeXBlTGF0ZXN0JywgW3R5cGUuYXNNYXAua2V5LCAwXSlcbiAgICAgICAgfV0pO1xuICAgIGl0ZXJGbi5tZXRhID0gbWV0YTtcbiAgICBjb25zdCBmbiA9ICguLi5hcmdzKSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTdG9yYWdlS2V5JywgW2l0ZXJGbiguLi5hcmdzKSwgeyBtZXRob2QsIHNlY3Rpb24gfV0pO1xuICAgIGZuLm1ldGEgPSBtZXRhO1xuICAgIHJldHVybiBmbjtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGV4dGVuZFByZWZpeGVkTWFwKHJlZ2lzdHJ5LCBpdGVtRm4sIHN0b3JhZ2VGbikge1xuICAgIGNvbnN0IHsgbWV0YTogeyB0eXBlIH0sIG1ldGhvZCwgc2VjdGlvbiB9ID0gaXRlbUZuO1xuICAgIHN0b3JhZ2VGbi5pdGVyS2V5ID0gZXh0ZW5kSGVhZE1ldGEocmVnaXN0cnksIGl0ZW1Gbiwgc3RvcmFnZUZuLCAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggJiYgKHR5cGUuaXNQbGFpbiB8fCAoYXJncy5sZW5ndGggPj0gdHlwZS5hc01hcC5oYXNoZXJzLmxlbmd0aCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEl0ZXJhdGlvbiBvZiAke3N0cmluZ0NhbWVsQ2FzZShzZWN0aW9uIHx8ICd1bmtub3duJyl9LiR7c3RyaW5nQ2FtZWxDYXNlKG1ldGhvZCB8fCAndW5rbm93bicpfSBuZWVkcyBhcmd1bWVudHMgdG8gYmUgYXQgbGVhc3Qgb25lIGxlc3MgdGhhbiB0aGUgZnVsbCBhcmd1bWVudHMsIGZvdW5kIFske2FyZ3Muam9pbignLCAnKX1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodHlwZS5pc01hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGFzaGVycywga2V5IH0gPSB0eXBlLmFzTWFwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXNWZWMgPSBoYXNoZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/IFtrZXldXG4gICAgICAgICAgICAgICAgICAgIDogcmVnaXN0cnkubG9va3VwLmdldFNpVHlwZShrZXkpLmRlZi5hc1R1cGxlO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmF3KHJlZ2lzdHJ5LCBjcmVhdGVLZXlSYXcocmVnaXN0cnksIGl0ZW1GbiwgeyBhcmdzLCBoYXNoZXJzOiBoYXNoZXJzLnNsaWNlKDAsIGFyZ3MubGVuZ3RoKSwga2V5czoga2V5c1ZlYy5zbGljZSgwLCBhcmdzLmxlbmd0aCkgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUmF3KHJlZ2lzdHJ5LCBjcmVhdGVLZXlSYXcocmVnaXN0cnksIGl0ZW1GbiwgTk9fUkFXX0FSR1MpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RvcmFnZUZuO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uKHJlZ2lzdHJ5LCBpdGVtRm4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG1ldGE6IHsgdHlwZSB9IH0gPSBpdGVtRm47XG4gICAgY29uc3Qgc3RvcmFnZUZuID0gY3JlYXRlV2l0aE1ldGEocmVnaXN0cnksIGl0ZW1Gbiwgb3B0aW9ucyk7XG4gICAgaWYgKHR5cGUuaXNNYXApIHtcbiAgICAgICAgZXh0ZW5kUHJlZml4ZWRNYXAocmVnaXN0cnksIGl0ZW1Gbiwgc3RvcmFnZUZuKTtcbiAgICB9XG4gICAgc3RvcmFnZUZuLmtleVByZWZpeCA9ICguLi5hcmdzKSA9PiAoc3RvcmFnZUZuLml0ZXJLZXkgJiYgc3RvcmFnZUZuLml0ZXJLZXkoLi4uYXJncykpIHx8XG4gICAgICAgIGNvbXBhY3RTdHJpcExlbmd0aChzdG9yYWdlRm4oKSlbMV07XG4gICAgcmV0dXJuIHN0b3JhZ2VGbjtcbn1cbiIsImltcG9ydCB7IHU4YUNvbmNhdCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBibGFrZTJBc1U4YSwgeHhoYXNoQXNVOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuY29uc3QgREVGQVVMVF9GTiA9IChkYXRhKSA9PiB4eGhhc2hBc1U4YShkYXRhLCAxMjgpO1xuY29uc3QgSEFTSEVSUyA9IHtcbiAgICBCbGFrZTJfMTI4OiAoZGF0YSkgPT4gLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgYmxha2UyQXNVOGEoZGF0YSwgMTI4KSxcbiAgICBCbGFrZTJfMTI4Q29uY2F0OiAoZGF0YSkgPT4gLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgdThhQ29uY2F0KGJsYWtlMkFzVThhKGRhdGEsIDEyOCksIHU4YVRvVThhKGRhdGEpKSxcbiAgICBCbGFrZTJfMjU2OiAoZGF0YSkgPT4gLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgYmxha2UyQXNVOGEoZGF0YSwgMjU2KSxcbiAgICBJZGVudGl0eTogKGRhdGEpID0+IHU4YVRvVThhKGRhdGEpLFxuICAgIFR3b3gxMjg6IChkYXRhKSA9PiB4eGhhc2hBc1U4YShkYXRhLCAxMjgpLFxuICAgIFR3b3gyNTY6IChkYXRhKSA9PiB4eGhhc2hBc1U4YShkYXRhLCAyNTYpLFxuICAgIFR3b3g2NENvbmNhdDogKGRhdGEpID0+IHU4YUNvbmNhdCh4eGhhc2hBc1U4YShkYXRhLCA2NCksIHU4YVRvVThhKGRhdGEpKVxufTtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIYXNoZXIoaGFzaGVyKSB7XG4gICAgcmV0dXJuIEhBU0hFUlNbaGFzaGVyLnR5cGVdIHx8IERFRkFVTFRfRk47XG59XG4iLCJpbXBvcnQgeyBzdWJzdHJhdGUgfSBmcm9tICcuL3N1YnN0cmF0ZS5qcyc7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmFnZShyZWdpc3RyeSkge1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB7fTtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc3Vic3RyYXRlKTtcbiAgICBmb3IgKGxldCBlID0gMCwgY291bnQgPSBlbnRyaWVzLmxlbmd0aDsgZSA8IGNvdW50OyBlKyspIHtcbiAgICAgICAgc3RvcmFnZVtlbnRyaWVzW2VdWzBdXSA9IGVudHJpZXNbZV1bMV0ocmVnaXN0cnkpO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJzdHJhdGU6IHN0b3JhZ2UgfTtcbn1cbiIsImltcG9ydCB7IGxhenlNZXRob2QsIGxhenlNZXRob2RzLCBzdHJpbmdDYW1lbENhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBvYmplY3ROYW1lVG9DYW1lbCB9IGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHsgY3JlYXRlRnVuY3Rpb24sIGNyZWF0ZUtleVJhdywgTk9fUkFXX0FSR1MgfSBmcm9tICcuL2NyZWF0ZUZ1bmN0aW9uLmpzJztcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tICcuL2dldFN0b3JhZ2UuanMnO1xuaW1wb3J0IHsgY3JlYXRlUnVudGltZUZ1bmN0aW9uIH0gZnJvbSAnLi91dGlsLmpzJztcbmNvbnN0IFZFUlNJT05fTkFNRSA9ICdwYWxsZXRWZXJzaW9uJztcbmNvbnN0IFZFUlNJT05fS0VZID0gJzpfX1NUT1JBR0VfVkVSU0lPTl9fOic7XG5jb25zdCBWRVJTSU9OX0RPQ1MgPSB7IGRvY3M6ICdSZXR1cm5zIHRoZSBjdXJyZW50IHBhbGxldCB2ZXJzaW9uIGZyb20gc3RvcmFnZScsIHR5cGU6ICd1MTYnIH07XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVTdG9yYWdlKHJlZ2lzdHJ5LCB7IHBhbGxldHMgfSwgX21ldGFWZXJzaW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RvcmFnZShyZWdpc3RyeSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gcGFsbGV0cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgc3RvcmFnZSB9ID0gcGFsbGV0c1tpXTtcbiAgICAgICAgaWYgKHN0b3JhZ2UuaXNTb21lKSB7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gc3RyaW5nQ2FtZWxDYXNlKG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgeyBpdGVtcywgcHJlZml4OiBfcHJlZml4IH0gPSBzdG9yYWdlLnVud3JhcCgpO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gX3ByZWZpeC50b1N0cmluZygpO1xuICAgICAgICAgICAgbGF6eU1ldGhvZChyZXN1bHQsIHNlY3Rpb24sICgpID0+IGxhenlNZXRob2RzKHtcbiAgICAgICAgICAgICAgICBwYWxsZXRWZXJzaW9uOiBjcmVhdGVSdW50aW1lRnVuY3Rpb24oeyBtZXRob2Q6IFZFUlNJT05fTkFNRSwgcHJlZml4LCBzZWN0aW9uIH0sIGNyZWF0ZUtleVJhdyhyZWdpc3RyeSwgeyBtZXRob2Q6IFZFUlNJT05fS0VZLCBwcmVmaXg6IG5hbWUudG9TdHJpbmcoKSB9LCBOT19SQVdfQVJHUyksIFZFUlNJT05fRE9DUykocmVnaXN0cnkpXG4gICAgICAgICAgICB9LCBpdGVtcywgKG1ldGEpID0+IGNyZWF0ZUZ1bmN0aW9uKHJlZ2lzdHJ5LCB7IG1ldGEsIG1ldGhvZDogbWV0YS5uYW1lLnRvU3RyaW5nKCksIHByZWZpeCwgc2VjdGlvbiB9LCB7fSksIG9iamVjdE5hbWVUb0NhbWVsKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZVJ1bnRpbWVGdW5jdGlvbiB9IGZyb20gJy4vdXRpbC5qcyc7XG5jb25zdCBwcmVmaXggPSAnU3Vic3RyYXRlJztcbmNvbnN0IHNlY3Rpb24gPSAnc3Vic3RyYXRlJztcbmZ1bmN0aW9uIGNyZWF0ZVN1YnN0cmF0ZUZuKG1ldGhvZCwga2V5LCBtZXRhKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJ1bnRpbWVGdW5jdGlvbih7IG1ldGhvZCwgcHJlZml4LCBzZWN0aW9uIH0sIGtleSwgbWV0YSk7XG59XG5leHBvcnQgY29uc3Qgc3Vic3RyYXRlID0ge1xuICAgIGNoYW5nZXNUcmllQ29uZmlnOiBjcmVhdGVTdWJzdHJhdGVGbignY2hhbmdlc1RyaWVDb25maWcnLCAnOmNoYW5nZXNfdHJpZScsIHtcbiAgICAgICAgZG9jczogJ0NoYW5nZXMgdHJpZSBjb25maWd1cmF0aW9uIGlzIHN0b3JlZCB1bmRlciB0aGlzIGtleS4nLFxuICAgICAgICB0eXBlOiAndTMyJ1xuICAgIH0pLFxuICAgIGNoaWxkU3RvcmFnZUtleVByZWZpeDogY3JlYXRlU3Vic3RyYXRlRm4oJ2NoaWxkU3RvcmFnZUtleVByZWZpeCcsICc6Y2hpbGRfc3RvcmFnZTonLCB7XG4gICAgICAgIGRvY3M6ICdQcmVmaXggb2YgY2hpbGQgc3RvcmFnZSBrZXlzLicsXG4gICAgICAgIHR5cGU6ICd1MzInXG4gICAgfSksXG4gICAgY29kZTogY3JlYXRlU3Vic3RyYXRlRm4oJ2NvZGUnLCAnOmNvZGUnLCB7XG4gICAgICAgIGRvY3M6ICdXYXNtIGNvZGUgb2YgdGhlIHJ1bnRpbWUuJyxcbiAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgIH0pLFxuICAgIGV4dHJpbnNpY0luZGV4OiBjcmVhdGVTdWJzdHJhdGVGbignZXh0cmluc2ljSW5kZXgnLCAnOmV4dHJpbnNpY19pbmRleCcsIHtcbiAgICAgICAgZG9jczogJ0N1cnJlbnQgZXh0cmluc2ljIGluZGV4ICh1MzIpIGlzIHN0b3JlZCB1bmRlciB0aGlzIGtleS4nLFxuICAgICAgICB0eXBlOiAndTMyJ1xuICAgIH0pLFxuICAgIGhlYXBQYWdlczogY3JlYXRlU3Vic3RyYXRlRm4oJ2hlYXBQYWdlcycsICc6aGVhcHBhZ2VzJywge1xuICAgICAgICBkb2NzOiAnTnVtYmVyIG9mIHdhc20gbGluZWFyIG1lbW9yeSBwYWdlcyByZXF1aXJlZCBmb3IgZXhlY3V0aW9uIG9mIHRoZSBydW50aW1lLicsXG4gICAgICAgIHR5cGU6ICd1NjQnXG4gICAgfSksXG4gICAgaW50cmFibG9ja0VudHJvcHk6IGNyZWF0ZVN1YnN0cmF0ZUZuKCdpbnRyYWJsb2NrRW50cm9weScsICc6aW50cmFibG9ja19lbnRyb3B5Jywge1xuICAgICAgICBkb2NzOiAnQ3VycmVudCBpbnRyYS1ibG9jayBlbnRyb3B5IChhIHVuaXZlcnNhbGx5IHVuaXF1ZSBgW3U4OyAzMl1gIHZhbHVlKSBpcyBzdG9yZWQgaGVyZS4nLFxuICAgICAgICB0eXBlOiAnW3U4OyAzMl0nXG4gICAgfSlcbn07XG4iLCJpbXBvcnQgeyBnZXRUeXBlRGVmIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5pbXBvcnQgeyBjcmVhdGVGdW5jdGlvbiB9IGZyb20gJy4vY3JlYXRlRnVuY3Rpb24uanMnO1xuZnVuY3Rpb24gZmluZFNpUHJpbWl0aXZlKHJlZ2lzdHJ5LCB0eXBlKSB7XG4gICAgY29uc3QgcHJpbSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gcmVnaXN0cnkubG9va3VwLnR5cGVzLmZpbmQoKHQpID0+ICh0LnR5cGUuZGVmLmlzUHJpbWl0aXZlICYmXG4gICAgICAgIHQudHlwZS5kZWYuYXNQcmltaXRpdmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSBwcmltKSB8fCAodC50eXBlLmRlZi5pc0hpc3RvcmljTWV0YUNvbXBhdCAmJlxuICAgICAgICB0LnR5cGUuZGVmLmFzSGlzdG9yaWNNZXRhQ29tcGF0LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gcHJpbSkpO1xufVxuZnVuY3Rpb24gZmluZFNpVHlwZShyZWdpc3RyeSwgdHlwZSkge1xuICAgIGxldCBwb3J0YWJsZSA9IGZpbmRTaVByaW1pdGl2ZShyZWdpc3RyeSwgdHlwZSk7XG4gICAgLy8gc29tZSB0eXBlcyBhcmUgZWl0aGVyIFNlcXVlbmNlIG9yIEFycmF5cywgY2F0ZXIgZm9yIHRoZXNlXG4gICAgLy8gc3BlY2lmaWNhbGx5ICh0aGVzZSBhbGwgY29tZSBmcm9tIHRoZSBiYXNlIHN1YnN0cmF0ZSBrbm93biBrZXlzKVxuICAgIGlmICghcG9ydGFibGUgJiYgKHR5cGUgPT09ICdCeXRlcycgfHwgdHlwZS5zdGFydHNXaXRoKCdbdTg7JykpKSB7XG4gICAgICAgIGNvbnN0IHU4ID0gZmluZFNpUHJpbWl0aXZlKHJlZ2lzdHJ5LCAndTgnKTtcbiAgICAgICAgaWYgKHU4KSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ0J5dGVzJykge1xuICAgICAgICAgICAgICAgIHBvcnRhYmxlID0gcmVnaXN0cnkubG9va3VwLnR5cGVzLmZpbmQoKHQpID0+ICh0LnR5cGUuZGVmLmlzU2VxdWVuY2UgJiZcbiAgICAgICAgICAgICAgICAgICAgdC50eXBlLmRlZi5hc1NlcXVlbmNlLnR5cGUuZXEodTguaWQpKSB8fCAodC50eXBlLmRlZi5pc0hpc3RvcmljTWV0YUNvbXBhdCAmJlxuICAgICAgICAgICAgICAgICAgICB0LnR5cGUuZGVmLmFzSGlzdG9yaWNNZXRhQ29tcGF0LmVxKHR5cGUpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZCA9IGdldFR5cGVEZWYodHlwZSk7XG4gICAgICAgICAgICAgICAgcG9ydGFibGUgPSByZWdpc3RyeS5sb29rdXAudHlwZXMuZmluZCgodCkgPT4gKHQudHlwZS5kZWYuaXNBcnJheSAmJlxuICAgICAgICAgICAgICAgICAgICB0LnR5cGUuZGVmLmFzQXJyYXkuZXEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVuOiB0ZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB1OC5pZFxuICAgICAgICAgICAgICAgICAgICB9KSkgfHwgKHQudHlwZS5kZWYuaXNIaXN0b3JpY01ldGFDb21wYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgdC50eXBlLmRlZi5hc0hpc3RvcmljTWV0YUNvbXBhdC5lcSh0eXBlKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghcG9ydGFibGUpIHtcbiAgICAgICAgLy8gTm90IGZhdGFsLCBob3dldmVyIGlmIHRoaXMgaGFwcGVucyB0aGUgc3RvcmFnZSBrZXkgdXNpbmcgdGhpc1xuICAgICAgICAvLyB0eXBlIHdpbGwgbm90IHJldHVybiB2YWxpZCB2YWx1ZXMsIHJhdGhlciBpdCB3aWxsIG1vc3QgcHJvYmFibHlcbiAgICAgICAgLy8gYmUgZGVjb2RlZCBpbmNvcnJlY3RseVxuICAgICAgICBjb25zb2xlLndhcm4oYFVuYWJsZSB0byBtYXAgJHt0eXBlfSB0byBhIGxvb2t1cCBpbmRleGApO1xuICAgIH1cbiAgICByZXR1cm4gcG9ydGFibGU7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUnVudGltZUZ1bmN0aW9uKHsgbWV0aG9kLCBwcmVmaXgsIHNlY3Rpb24gfSwga2V5LCB7IGRvY3MsIHR5cGUgfSkge1xuICAgIHJldHVybiAocmVnaXN0cnkpID0+IGNyZWF0ZUZ1bmN0aW9uKHJlZ2lzdHJ5LCB7XG4gICAgICAgIG1ldGE6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VFbnRyeU1ldGFkYXRhTGF0ZXN0JywgW3tcbiAgICAgICAgICAgICAgICBkb2NzOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdWZWM8VGV4dD4nLCBbW2RvY3NdXSksXG4gICAgICAgICAgICAgICAgbW9kaWZpZXI6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyTGF0ZXN0JywgWydSZXF1aXJlZCddKSxcbiAgICAgICAgICAgICAgICBuYW1lOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdUZXh0JywgW21ldGhvZF0pLFxuICAgICAgICAgICAgICAgIHRvSlNPTjogKCkgPT4ga2V5LFxuICAgICAgICAgICAgICAgIHR5cGU6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VFbnRyeVR5cGVMYXRlc3QnLCBbeyBQbGFpbjogZmluZFNpVHlwZShyZWdpc3RyeSwgdHlwZSk/LmlkIHx8IDAgfV0pXG4gICAgICAgICAgICB9XSksXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBzZWN0aW9uXG4gICAgfSwgeyBrZXksIHNraXBIYXNoaW5nOiB0cnVlIH0pO1xufVxuIiwiaW1wb3J0IHsgc3RyaW5nQ2FtZWxDYXNlIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gY29udmVydChmbikge1xuICAgIHJldHVybiAoeyBuYW1lIH0pID0+IGZuKG5hbWUpO1xufVxuZXhwb3J0IGNvbnN0IG9iamVjdE5hbWVUb0NhbWVsID0gLyojX19QVVJFX18qLyBjb252ZXJ0KHN0cmluZ0NhbWVsQ2FzZSk7XG5leHBvcnQgY29uc3Qgb2JqZWN0TmFtZVRvU3RyaW5nID0gLyojX19QVVJFX18qLyBjb252ZXJ0KChuKSA9PiBuLnRvU3RyaW5nKCkpO1xuIiwiZXhwb3J0IHsgZGVjb3JhdGVDb25zdGFudHMsIGRlY29yYXRlRXh0cmluc2ljcywgZGVjb3JhdGVTdG9yYWdlLCBleHBhbmRNZXRhZGF0YSB9IGZyb20gJy4vZGVjb3JhdGUvaW5kZXguanMnO1xuZXhwb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuL01ldGFkYXRhLmpzJztcbmV4cG9ydCB7IFBvcnRhYmxlUmVnaXN0cnkgfSBmcm9tICcuL1BvcnRhYmxlUmVnaXN0cnkvaW5kZXguanMnO1xuIiwiaW1wb3J0IHsgZ2V0VHlwZURlZiwgVHlwZURlZkluZm8gfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbmZ1bmN0aW9uIGV4dHJhY3RTdWJTaW5nbGUoXywgeyBzdWIgfSkge1xuICAgIGNvbnN0IHsgbG9va3VwTmFtZSwgdHlwZSB9ID0gc3ViO1xuICAgIHJldHVybiBleHRyYWN0VHlwZXMoW2xvb2t1cE5hbWUgfHwgdHlwZV0pO1xufVxuZnVuY3Rpb24gZXh0cmFjdFN1YkFycmF5KF8sIHsgc3ViIH0pIHtcbiAgICByZXR1cm4gZXh0cmFjdFR5cGVzKHN1Yi5tYXAoKHsgbG9va3VwTmFtZSwgdHlwZSB9KSA9PiBsb29rdXBOYW1lIHx8IHR5cGUpKTtcbn1cbmZ1bmN0aW9uIHVuaGFuZGxlZCh0eXBlLCB7IGluZm8gfSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkOiBVbmFibGUgdG8gY3JlYXRlIGFuZCB2YWxpZGF0ZSB0eXBlIGZyb20gJHt0eXBlfSAoaW5mbz0ke1R5cGVEZWZJbmZvW2luZm9dfSlgKTtcbn1cbmNvbnN0IG1hcHBpbmcgPSB7XG4gICAgW1R5cGVEZWZJbmZvLkJUcmVlTWFwXTogZXh0cmFjdFN1YkFycmF5LFxuICAgIFtUeXBlRGVmSW5mby5CVHJlZVNldF06IGV4dHJhY3RTdWJTaW5nbGUsXG4gICAgW1R5cGVEZWZJbmZvLkNvbXBhY3RdOiBleHRyYWN0U3ViU2luZ2xlLFxuICAgIFtUeXBlRGVmSW5mby5Eb05vdENvbnN0cnVjdF06IHVuaGFuZGxlZCxcbiAgICBbVHlwZURlZkluZm8uRW51bV06IGV4dHJhY3RTdWJBcnJheSxcbiAgICBbVHlwZURlZkluZm8uSGFzaE1hcF06IGV4dHJhY3RTdWJBcnJheSxcbiAgICBbVHlwZURlZkluZm8uSW50XTogdW5oYW5kbGVkLFxuICAgIFtUeXBlRGVmSW5mby5MaW5rYWdlXTogZXh0cmFjdFN1YlNpbmdsZSxcbiAgICBbVHlwZURlZkluZm8uTnVsbF06IHVuaGFuZGxlZCxcbiAgICBbVHlwZURlZkluZm8uT3B0aW9uXTogZXh0cmFjdFN1YlNpbmdsZSxcbiAgICBbVHlwZURlZkluZm8uUGxhaW5dOiAoXywgdHlwZURlZikgPT4gdHlwZURlZi5sb29rdXBOYW1lIHx8IHR5cGVEZWYudHlwZSxcbiAgICBbVHlwZURlZkluZm8uUmFuZ2VdOiBleHRyYWN0U3ViU2luZ2xlLFxuICAgIFtUeXBlRGVmSW5mby5SYW5nZUluY2x1c2l2ZV06IGV4dHJhY3RTdWJTaW5nbGUsXG4gICAgW1R5cGVEZWZJbmZvLlJlc3VsdF06IGV4dHJhY3RTdWJBcnJheSxcbiAgICBbVHlwZURlZkluZm8uU2V0XTogZXh0cmFjdFN1YkFycmF5LFxuICAgIFtUeXBlRGVmSW5mby5TaV06IHVuaGFuZGxlZCxcbiAgICBbVHlwZURlZkluZm8uU3RydWN0XTogZXh0cmFjdFN1YkFycmF5LFxuICAgIFtUeXBlRGVmSW5mby5UdXBsZV06IGV4dHJhY3RTdWJBcnJheSxcbiAgICBbVHlwZURlZkluZm8uVUludF06IHVuaGFuZGxlZCxcbiAgICBbVHlwZURlZkluZm8uVmVjXTogZXh0cmFjdFN1YlNpbmdsZSxcbiAgICBbVHlwZURlZkluZm8uVmVjRml4ZWRdOiBleHRyYWN0U3ViU2luZ2xlLFxuICAgIFtUeXBlRGVmSW5mby5XcmFwcGVyS2VlcE9wYXF1ZV06IGV4dHJhY3RTdWJTaW5nbGUsXG4gICAgW1R5cGVEZWZJbmZvLldyYXBwZXJPcGFxdWVdOiBleHRyYWN0U3ViU2luZ2xlXG59O1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUeXBlcyh0eXBlcykge1xuICAgIGNvbnN0IGNvdW50ID0gdHlwZXMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlc1tpXTtcbiAgICAgICAgY29uc3QgdHlwZURlZiA9IGdldFR5cGVEZWYodHlwZSk7XG4gICAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmdbdHlwZURlZi5pbmZvXSh0eXBlLCB0eXBlRGVmKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuVW5pcShsaXN0LCByZXN1bHQgPSBbXSkge1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGxpc3QubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGxpc3RbaV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICAgICAgZmxhdHRlblVuaXEoZW50cnksIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KHJlc3VsdCldO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGdldFNpTmFtZShsb29rdXAsIHR5cGUpIHtcbiAgICBjb25zdCB0eXBlRGVmID0gbG9va3VwLmdldFR5cGVEZWYodHlwZSk7XG4gICAgcmV0dXJuIHR5cGVEZWYubG9va3VwTmFtZSB8fCB0eXBlRGVmLnR5cGU7XG59XG4iLCJpbXBvcnQgeyBmbGF0dGVuVW5pcSB9IGZyb20gJy4vZmxhdHRlblVuaXEuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVUeXBlcyB9IGZyb20gJy4vdmFsaWRhdGVUeXBlcy5qcyc7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBleHRyYWN0VHlwZXMobG9va3VwLCB0eXBlcykge1xuICAgIHJldHVybiB0eXBlcy5tYXAoKHsgdHlwZSB9KSA9PiBsb29rdXAuZ2V0VHlwZURlZih0eXBlKS50eXBlKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGV4dHJhY3RGaWVsZFR5cGVzKGxvb2t1cCwgdHlwZSkge1xuICAgIHJldHVybiBsb29rdXAuZ2V0U2lUeXBlKHR5cGUpLmRlZi5hc1ZhcmlhbnQudmFyaWFudHMubWFwKCh7IGZpZWxkcyB9KSA9PiBleHRyYWN0VHlwZXMobG9va3VwLCBmaWVsZHMpKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGdldFBhbGxldE5hbWVzKHsgbG9va3VwLCBwYWxsZXRzIH0pIHtcbiAgICByZXR1cm4gcGFsbGV0cy5yZWR1Y2UoKGFsbCwgeyBjYWxscywgY29uc3RhbnRzLCBldmVudHMsIHN0b3JhZ2UgfSkgPT4ge1xuICAgICAgICBhbGwucHVzaChbZXh0cmFjdFR5cGVzKGxvb2t1cCwgY29uc3RhbnRzKV0pO1xuICAgICAgICBpZiAoY2FsbHMuaXNTb21lKSB7XG4gICAgICAgICAgICBhbGwucHVzaChleHRyYWN0RmllbGRUeXBlcyhsb29rdXAsIGNhbGxzLnVud3JhcCgpLnR5cGUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnRzLmlzU29tZSkge1xuICAgICAgICAgICAgYWxsLnB1c2goZXh0cmFjdEZpZWxkVHlwZXMobG9va3VwLCBldmVudHMudW53cmFwKCkudHlwZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9yYWdlLmlzU29tZSkge1xuICAgICAgICAgICAgYWxsLnB1c2goc3RvcmFnZS51bndyYXAoKS5pdGVtcy5tYXAoKHsgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUuaXNQbGFpbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2xvb2t1cC5nZXRUeXBlRGVmKHR5cGUuYXNQbGFpbikudHlwZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGFzaGVycywga2V5LCB2YWx1ZSB9ID0gdHlwZS5hc01hcDtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAuZ2V0VHlwZURlZih2YWx1ZSkudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cC5nZXRUeXBlRGVmKGtleSkudHlwZVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwLmdldFR5cGVEZWYodmFsdWUpLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5sb29rdXAuZ2V0U2lUeXBlKGtleSkuZGVmLmFzVHVwbGUubWFwKCh0KSA9PiBsb29rdXAuZ2V0VHlwZURlZih0KS50eXBlKVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGw7XG4gICAgfSwgW10pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXFUeXBlcyhyZWdpc3RyeSwgbWV0YSwgdGhyb3dFcnJvcikge1xuICAgIHJldHVybiB2YWxpZGF0ZVR5cGVzKHJlZ2lzdHJ5LCB0aHJvd0Vycm9yLCBmbGF0dGVuVW5pcShnZXRQYWxsZXROYW1lcyhtZXRhKSkpO1xufVxuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gdHJpbURvY3MoZG9jcykge1xuICAgIGNvbnN0IHN0cmluZ3MgPSBkb2NzLm1hcCgoZCkgPT4gZC50b1N0cmluZygpLnRyaW0oKSk7XG4gICAgY29uc3QgZmlyc3RFbXB0eSA9IHN0cmluZ3MuZmluZEluZGV4KChkKSA9PiAhZC5sZW5ndGgpO1xuICAgIHJldHVybiBmaXJzdEVtcHR5ID09PSAtMVxuICAgICAgICA/IHN0cmluZ3NcbiAgICAgICAgOiBzdHJpbmdzLnNsaWNlKDAsIGZpcnN0RW1wdHkpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2FsbHNPbmx5KHJlZ2lzdHJ5LCB7IGV4dHJpbnNpYywgbG9va3VwLCBwYWxsZXRzIH0pIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnTWV0YWRhdGFMYXRlc3QnLCBbe1xuICAgICAgICAgICAgZXh0cmluc2ljLFxuICAgICAgICAgICAgbG9va3VwOiB7XG4gICAgICAgICAgICAgICAgdHlwZXM6IGxvb2t1cC50eXBlcy5tYXAoKHsgaWQsIHR5cGUgfSkgPT4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnUG9ydGFibGVUeXBlJywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogb2JqZWN0U3ByZWFkKHt9LCB0eXBlLCB7IGRvY3M6IHRyaW1Eb2NzKHR5cGUuZG9jcykgfSlcbiAgICAgICAgICAgICAgICAgICAgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhbGxldHM6IHBhbGxldHMubWFwKCh7IGNhbGxzLCBpbmRleCwgbmFtZSB9KSA9PiAoe1xuICAgICAgICAgICAgICAgIGNhbGxzOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdPcHRpb248UGFsbGV0Q2FsbE1ldGFkYXRhTGF0ZXN0PicsIFtjYWxscy51bndyYXBPcihudWxsKV0pLFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XSkudG9KU09OKCk7XG59XG4iLCJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBleHRyYWN0VHlwZXMgfSBmcm9tICcuL2V4dHJhY3RUeXBlcy5qcyc7XG5pbXBvcnQgeyBmbGF0dGVuVW5pcSB9IGZyb20gJy4vZmxhdHRlblVuaXEuanMnO1xuY29uc3QgbCA9IGxvZ2dlcignbWV0YWRhdGEnKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVR5cGVzKHJlZ2lzdHJ5LCB0aHJvd0Vycm9yLCB0eXBlcykge1xuICAgIGNvbnN0IG1pc3NpbmcgPSBmbGF0dGVuVW5pcShleHRyYWN0VHlwZXModHlwZXMpKVxuICAgICAgICAuZmlsdGVyKCh0eXBlKSA9PiAhcmVnaXN0cnkuaGFzVHlwZSh0eXBlKSAmJlxuICAgICAgICAhcmVnaXN0cnkuaXNMb29rdXBUeXBlKHR5cGUpKVxuICAgICAgICAuc29ydCgpO1xuICAgIGlmIChtaXNzaW5nLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gYFVua25vd24gdHlwZXMgZm91bmQsIG5vIHR5cGVzIGZvciAke21pc3Npbmcuam9pbignLCAnKX1gO1xuICAgICAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbC53YXJuKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbn1cbiIsIi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1YxMShyZWdpc3RyeSwgeyBtb2R1bGVzIH0pIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnTWV0YWRhdGFWMTEnLCBbe1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBuZXcgaW4gVjExLCBwYXNzIFYwIGhlcmUgLSBzb21ldGhpbmcgbm9uLWV4aXN0aW5nLCB0ZWxsaW5nIHRoZSBBUEkgdG8gdXNlXG4gICAgICAgICAgICAvLyB0aGUgZmFsbGJhY2sgZm9yIHRoaXMgaW5mb3JtYXRpb24gKG9uLWNoYWluIGRldGVjdGlvbilcbiAgICAgICAgICAgIGV4dHJpbnNpYzoge1xuICAgICAgICAgICAgICAgIHNpZ25lZEV4dGVuc2lvbnM6IFtdLFxuICAgICAgICAgICAgICAgIHZlcnNpb246IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb2R1bGVzXG4gICAgICAgIH1dKTtcbn1cbiIsImltcG9ydCB7IG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKlxuICogQGludGVybmFsXG4gKiovXG5leHBvcnQgZnVuY3Rpb24gdG9WMTIocmVnaXN0cnksIHsgZXh0cmluc2ljLCBtb2R1bGVzIH0pIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnTWV0YWRhdGFWMTInLCBbe1xuICAgICAgICAgICAgZXh0cmluc2ljLFxuICAgICAgICAgICAgbW9kdWxlczogbW9kdWxlcy5tYXAoKG1vZCkgPT4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnTW9kdWxlTWV0YWRhdGFWMTInLCBbb2JqZWN0U3ByZWFkKHt9LCBtb2QsIHsgaW5kZXg6IDI1NSB9KV0pKVxuICAgICAgICB9XSk7XG59XG4iLCIvKipcbiAqIEBpbnRlcm5hbFxuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVjEzKHJlZ2lzdHJ5LCB2MTIpIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnTWV0YWRhdGFWMTMnLCBbdjEyXSk7XG59XG4iLCJpbXBvcnQgeyBzdHJpbmdDYW1lbENhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBnZXRBbGlhc1R5cGVzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hbGlhcy5qcyc7XG5pbXBvcnQgeyBrbm93bk9yaWdpbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3J1bnRpbWUvZGVmaW5pdGlvbnMuanMnO1xuY29uc3QgQk9YRVMgPSBbWyc8JywgJz4nXSwgWyc8JywgJywnXSwgWycsJywgJz4nXSwgWycoJywgJyknXSwgWycoJywgJywnXSwgWycsJywgJywnXSwgWycsJywgJyknXV07XG4vKipcbiAqIENyZWF0ZXMgYSBjb21wYXRpYmxlIHR5cGUgbWFwcGluZ1xuICogQGludGVybmFsXG4gKiovXG5mdW5jdGlvbiBjb21wYXRUeXBlKHNwZWNzLCBfdHlwZSkge1xuICAgIGNvbnN0IHR5cGUgPSBfdHlwZS50b1N0cmluZygpO1xuICAgIGNvbnN0IGluZGV4ID0gc3BlY3MuZmluZEluZGV4KCh7IGRlZiB9KSA9PiBkZWYuSGlzdG9yaWNNZXRhQ29tcGF0ID09PSB0eXBlKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIHNwZWNzLnB1c2goe1xuICAgICAgICBkZWY6IHtcbiAgICAgICAgICAgIEhpc3RvcmljTWV0YUNvbXBhdDogdHlwZVxuICAgICAgICB9XG4gICAgfSkgLSAxO1xufVxuZnVuY3Rpb24gY29tcGF0VHlwZXMoc3BlY3MsIC4uLnR5cGVzKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdHlwZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb21wYXRUeXBlKHNwZWNzLCB0eXBlc1tpXSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZVR1cGxlVHlwZShzcGVjcywgZW50cmllcykge1xuICAgIHJldHVybiBzcGVjcy5wdXNoKHtcbiAgICAgICAgZGVmOiB7XG4gICAgICAgICAgICBUdXBsZTogZW50cmllc1xuICAgICAgICB9XG4gICAgfSkgLSAxO1xufVxuZnVuY3Rpb24gbWFrZVZhcmlhbnRUeXBlKG1vZE5hbWUsIHZhcmlhbnRUeXBlLCBzcGVjcywgdmFyaWFudHMpIHtcbiAgICByZXR1cm4gc3BlY3MucHVzaCh7XG4gICAgICAgIGRlZjoge1xuICAgICAgICAgICAgVmFyaWFudDogeyB2YXJpYW50cyB9XG4gICAgICAgIH0sXG4gICAgICAgIHBhdGg6IFtgcGFsbGV0XyR7bW9kTmFtZS50b1N0cmluZygpfWAsICdwYWxsZXQnLCB2YXJpYW50VHlwZV1cbiAgICB9KSAtIDE7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICogZ2VuZXJhdGUgJiByZWdpc3RlciB0aGUgT3JpZ2luQ2FsbGVyIHR5cGVcbiAqKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyT3JpZ2luQ2FsbGVyKHJlZ2lzdHJ5LCBtb2R1bGVzLCBtZXRhVmVyc2lvbikge1xuICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKHtcbiAgICAgICAgT3JpZ2luQ2FsbGVyOiB7XG4gICAgICAgICAgICBfZW51bTogbW9kdWxlc1xuICAgICAgICAgICAgICAgIC5tYXAoKG1vZCwgaW5kZXgpID0+IFtcbiAgICAgICAgICAgICAgICBtb2QubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIG1ldGFWZXJzaW9uID49IDEyXG4gICAgICAgICAgICAgICAgICAgID8gbW9kLmluZGV4LnRvTnVtYmVyKClcbiAgICAgICAgICAgICAgICAgICAgOiBpbmRleFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgocmVzdWx0LCBbbmFtZSwgaW5kZXhdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbYEVtcHR5JHtpfWBdID0gJ051bGwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBrbm93bk9yaWdpbnNbbmFtZV0gfHwgJ051bGwnO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBGaW5kIGFuZCBhcHBseSB0aGUgY29ycmVjdCB0eXBlIG92ZXJyaWRlXG4gKiBAaW50ZXJuYWxcbiAqKi9cbmZ1bmN0aW9uIHNldFR5cGVPdmVycmlkZShzZWN0aW9uVHlwZXMsIHR5cGVzKSB7XG4gICAgdHlwZXMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBvdmVycmlkZSA9IE9iamVjdC5rZXlzKHNlY3Rpb25UeXBlcykuZmluZCgoYWxpYXNlZCkgPT4gdHlwZS5lcShhbGlhc2VkKSk7XG4gICAgICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgICAgICAgdHlwZS5zZXRPdmVycmlkZShzZWN0aW9uVHlwZXNbb3ZlcnJpZGVdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZJWE1FOiBOT1QgaGFwcHkgd2l0aCB0aGlzIGFwcHJvYWNoLCBidXQgZ2V0cyBvdmVyIHRoZSBpbml0aWFsIGh1bXAgY2FzZWQgYnkgKFZlYzxBbm5vdW5jZW1lbnQ+LEJhbGFuY2VPZilcbiAgICAgICAgICAgIGNvbnN0IG9yaWcgPSB0eXBlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBhbGlhcyA9IE9iamVjdFxuICAgICAgICAgICAgICAgIC5lbnRyaWVzKHNlY3Rpb25UeXBlcylcbiAgICAgICAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIFtzcmMsIGRzdF0pID0+IEJPWEVTLnJlZHVjZSgocmVzdWx0LCBbYSwgel0pID0+IHJlc3VsdC5yZXBsYWNlKGAke2F9JHtzcmN9JHt6fWAsIGAke2F9JHtkc3R9JHt6fWApLCByZXN1bHQpLCBvcmlnKTtcbiAgICAgICAgICAgIGlmIChvcmlnICE9PSBhbGlhcykge1xuICAgICAgICAgICAgICAgIHR5cGUuc2V0T3ZlcnJpZGUoYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEFwcGx5IG1vZHVsZS1zcGVjaWZpYyB0eXBlIG92ZXJyaWRlcyAoYWx3YXlzIGJlIGRvbmUgYXMgcGFydCBvZiB0b1YxNClcbiAqIEBpbnRlcm5hbFxuICoqL1xuZnVuY3Rpb24gY29udmVydENhbGxzKHNwZWNzLCByZWdpc3RyeSwgbW9kTmFtZSwgY2FsbHMsIHNlY3Rpb25UeXBlcykge1xuICAgIGNvbnN0IHZhcmlhbnRzID0gY2FsbHMubWFwKCh7IGFyZ3MsIGRvY3MsIG5hbWUgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgc2V0VHlwZU92ZXJyaWRlKHNlY3Rpb25UeXBlcywgYXJncy5tYXAoKHsgdHlwZSB9KSA9PiB0eXBlKSk7XG4gICAgICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTaVZhcmlhbnQnLCBbe1xuICAgICAgICAgICAgICAgIGRvY3MsXG4gICAgICAgICAgICAgICAgZmllbGRzOiBhcmdzLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1NpRmllbGQnLCBbeyBuYW1lLCB0eXBlOiBjb21wYXRUeXBlKHNwZWNzLCB0eXBlKSB9XSkpLFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIH1dKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnUGFsbGV0Q2FsbE1ldGFkYXRhVjE0JywgW3tcbiAgICAgICAgICAgIHR5cGU6IG1ha2VWYXJpYW50VHlwZShtb2ROYW1lLCAnQ2FsbCcsIHNwZWNzLCB2YXJpYW50cylcbiAgICAgICAgfV0pO1xufVxuLyoqXG4gKiBBcHBseSBtb2R1bGUtc3BlY2lmaWMgdHlwZSBvdmVycmlkZXMgKGFsd2F5cyBiZSBkb25lIGFzIHBhcnQgb2YgdG9WMTQpXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gY29udmVydENvbnN0YW50cyhzcGVjcywgcmVnaXN0cnksIGNvbnN0YW50cywgc2VjdGlvblR5cGVzKSB7XG4gICAgcmV0dXJuIGNvbnN0YW50cy5tYXAoKHsgZG9jcywgbmFtZSwgdHlwZSwgdmFsdWUgfSkgPT4ge1xuICAgICAgICBzZXRUeXBlT3ZlcnJpZGUoc2VjdGlvblR5cGVzLCBbdHlwZV0pO1xuICAgICAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnUGFsbGV0Q29uc3RhbnRNZXRhZGF0YVYxNCcsIFt7XG4gICAgICAgICAgICAgICAgZG9jcyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGNvbXBhdFR5cGUoc3BlY3MsIHR5cGUpLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9XSk7XG4gICAgfSk7XG59XG4vKipcbiAqIEFwcGx5IG1vZHVsZS1zcGVjaWZpYyB0eXBlIG92ZXJyaWRlcyAoYWx3YXlzIGJlIGRvbmUgYXMgcGFydCBvZiB0b1YxNClcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjb252ZXJ0RXJyb3JzKHNwZWNzLCByZWdpc3RyeSwgbW9kTmFtZSwgZXJyb3JzLCBfc2VjdGlvblR5cGVzKSB7XG4gICAgY29uc3QgdmFyaWFudHMgPSBlcnJvcnMubWFwKCh7IGRvY3MsIG5hbWUgfSwgaW5kZXgpID0+IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1NpVmFyaWFudCcsIFt7XG4gICAgICAgICAgICBkb2NzLFxuICAgICAgICAgICAgZmllbGRzOiBbXSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICB9XSkpO1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdQYWxsZXRFcnJvck1ldGFkYXRhVjE0JywgW3tcbiAgICAgICAgICAgIHR5cGU6IG1ha2VWYXJpYW50VHlwZShtb2ROYW1lLCAnRXJyb3InLCBzcGVjcywgdmFyaWFudHMpXG4gICAgICAgIH1dKTtcbn1cbi8qKlxuICogQXBwbHkgbW9kdWxlLXNwZWNpZmljIHR5cGUgb3ZlcnJpZGVzIChhbHdheXMgYmUgZG9uZSBhcyBwYXJ0IG9mIHRvVjE0KVxuICogQGludGVybmFsXG4gKiovXG5mdW5jdGlvbiBjb252ZXJ0RXZlbnRzKHNwZWNzLCByZWdpc3RyeSwgbW9kTmFtZSwgZXZlbnRzLCBzZWN0aW9uVHlwZXMpIHtcbiAgICBjb25zdCB2YXJpYW50cyA9IGV2ZW50cy5tYXAoKHsgYXJncywgZG9jcywgbmFtZSB9LCBpbmRleCkgPT4ge1xuICAgICAgICBzZXRUeXBlT3ZlcnJpZGUoc2VjdGlvblR5cGVzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1NpVmFyaWFudCcsIFt7XG4gICAgICAgICAgICAgICAgZG9jcyxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IGFyZ3MubWFwKCh0KSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTaUZpZWxkJywgW3sgdHlwZTogY29tcGF0VHlwZShzcGVjcywgdCkgfV0pKSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICB9XSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1BhbGxldEV2ZW50TWV0YWRhdGFWMTQnLCBbe1xuICAgICAgICAgICAgdHlwZTogbWFrZVZhcmlhbnRUeXBlKG1vZE5hbWUsICdFdmVudCcsIHNwZWNzLCB2YXJpYW50cylcbiAgICAgICAgfV0pO1xufVxuZnVuY3Rpb24gY3JlYXRlTWFwRW50cnkoc3BlY3MsIHJlZ2lzdHJ5LCBzZWN0aW9uVHlwZXMsIHsgaGFzaGVycywgaXNMaW5rZWQsIGlzT3B0aW9uYWwsIGtleXMsIHZhbHVlIH0pIHtcbiAgICBzZXRUeXBlT3ZlcnJpZGUoc2VjdGlvblR5cGVzLCBbdmFsdWUsIC4uLihBcnJheS5pc0FycmF5KGtleXMpID8ga2V5cyA6IFtrZXlzXSldKTtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU3RvcmFnZUVudHJ5VHlwZVYxNCcsIFt7XG4gICAgICAgICAgICBNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXJzLFxuICAgICAgICAgICAgICAgIGtleTogaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYXRUeXBlKHNwZWNzLCBrZXlzWzBdKVxuICAgICAgICAgICAgICAgICAgICA6IG1ha2VUdXBsZVR5cGUoc3BlY3MsIGtleXMubWFwKCh0KSA9PiBjb21wYXRUeXBlKHNwZWNzLCB0KSkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBpc0xpbmtlZFxuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgcHJldmlvdXMtZ2VuZXJhdGlvbiBsaW5rZWQtbWFwIHN1cHBvcnQsIHRoZSBhY3R1YWwgc3RvcmFnZSByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgYSBUdXBsZSB3aXRoIHRoZSB2YWx1ZSBhbmQgdGhlIExpbmthZ2UgKE9wdGlvbiBhcHBlYXJzIGluIHRlaCB2YWx1ZS1wYXJ0IG9ubHkpXG4gICAgICAgICAgICAgICAgICAgID8gY29tcGF0VHlwZShzcGVjcywgYCgke2lzT3B0aW9uYWwgPyBgT3B0aW9uPCR7dmFsdWUudG9TdHJpbmcoKX0+YCA6IHZhbHVlLnRvU3RyaW5nKCl9LCBMaW5rYWdlPCR7a2V5c1swXS50b1N0cmluZygpfT4pYClcbiAgICAgICAgICAgICAgICAgICAgOiBjb21wYXRUeXBlKHNwZWNzLCB2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfV0pO1xufVxuLyoqXG4gKiBBcHBseSBtb2R1bGUtc3BlY2lmaWMgc3RvcmFnZSB0eXBlIG92ZXJyaWRlcyAoYWx3YXlzIHBhcnQgb2YgdG9WMTQpXG4gKiBAaW50ZXJuYWxcbiAqKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdG9yYWdlKHNwZWNzLCByZWdpc3RyeSwgeyBpdGVtcywgcHJlZml4IH0sIHNlY3Rpb25UeXBlcykge1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdQYWxsZXRTdG9yYWdlTWV0YWRhdGFWMTQnLCBbe1xuICAgICAgICAgICAgaXRlbXM6IGl0ZW1zLm1hcCgoeyBkb2NzLCBmYWxsYmFjaywgbW9kaWZpZXIsIG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBlbnRyeVR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUuaXNQbGFpbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFpbiA9IHR5cGUuYXNQbGFpbjtcbiAgICAgICAgICAgICAgICAgICAgc2V0VHlwZU92ZXJyaWRlKHNlY3Rpb25UeXBlcywgW3BsYWluXSk7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5VHlwZSA9IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VFbnRyeVR5cGVWMTQnLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYWluOiBjb21wYXRUeXBlKHNwZWNzLCBwbGFpbilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZS5pc01hcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXAgPSB0eXBlLmFzTWFwO1xuICAgICAgICAgICAgICAgICAgICBlbnRyeVR5cGUgPSBjcmVhdGVNYXBFbnRyeShzcGVjcywgcmVnaXN0cnksIHNlY3Rpb25UeXBlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGVyczogW21hcC5oYXNoZXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMaW5rZWQ6IG1hcC5saW5rZWQuaXNUcnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPcHRpb25hbDogbW9kaWZpZXIuaXNPcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6IFttYXAua2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXAudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUuaXNEb3VibGVNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG0gPSB0eXBlLmFzRG91YmxlTWFwO1xuICAgICAgICAgICAgICAgICAgICBlbnRyeVR5cGUgPSBjcmVhdGVNYXBFbnRyeShzcGVjcywgcmVnaXN0cnksIHNlY3Rpb25UeXBlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGVyczogW2RtLmhhc2hlciwgZG0ua2V5Mkhhc2hlcl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xpbmtlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiBtb2RpZmllci5pc09wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogW2RtLmtleTEsIGRtLmtleTJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRtLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm0gPSB0eXBlLmFzTk1hcDtcbiAgICAgICAgICAgICAgICAgICAgZW50cnlUeXBlID0gY3JlYXRlTWFwRW50cnkoc3BlY3MsIHJlZ2lzdHJ5LCBzZWN0aW9uVHlwZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hlcnM6IG5tLmhhc2hlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xpbmtlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiBtb2RpZmllci5pc09wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogbm0ua2V5VmVjLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5tLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU3RvcmFnZUVudHJ5TWV0YWRhdGFWMTQnLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZW50cnlUeXBlXG4gICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcHJlZml4XG4gICAgICAgIH1dKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNvbnZlcnRFeHRyaW5zaWMocmVnaXN0cnksIHsgc2lnbmVkRXh0ZW5zaW9ucywgdmVyc2lvbiB9KSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V4dHJpbnNpY01ldGFkYXRhVjE0JywgW3tcbiAgICAgICAgICAgIHNpZ25lZEV4dGVuc2lvbnM6IHNpZ25lZEV4dGVuc2lvbnMubWFwKChpZGVudGlmaWVyKSA9PiAoe1xuICAgICAgICAgICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogMCAvLyB3ZSBkb24ndCBtYXAgdGhlIGZpZWxkcyBhdCBhbGxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIHR5cGU6IDAsIC8vIE1hcCB0byBleHRyaW5zaWMgbGlrZSBpbiB2MTQ/XG4gICAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH1dKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNyZWF0ZVBhbGxldChzcGVjcywgcmVnaXN0cnksIG1vZCwgeyBjYWxscywgY29uc3RhbnRzLCBlcnJvcnMsIGV2ZW50cywgc3RvcmFnZSB9KSB7XG4gICAgY29uc3Qgc2VjdGlvblR5cGVzID0gZ2V0QWxpYXNUeXBlcyhyZWdpc3RyeSwgc3RyaW5nQ2FtZWxDYXNlKG1vZC5uYW1lKSk7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1BhbGxldE1ldGFkYXRhVjE0JywgW3tcbiAgICAgICAgICAgIGNhbGxzOiBjYWxscyAmJiBjb252ZXJ0Q2FsbHMoc3BlY3MsIHJlZ2lzdHJ5LCBtb2QubmFtZSwgY2FsbHMsIHNlY3Rpb25UeXBlcyksXG4gICAgICAgICAgICBjb25zdGFudHM6IGNvbnZlcnRDb25zdGFudHMoc3BlY3MsIHJlZ2lzdHJ5LCBjb25zdGFudHMsIHNlY3Rpb25UeXBlcyksXG4gICAgICAgICAgICBlcnJvcnM6IGVycm9ycyAmJiBjb252ZXJ0RXJyb3JzKHNwZWNzLCByZWdpc3RyeSwgbW9kLm5hbWUsIGVycm9ycywgc2VjdGlvblR5cGVzKSxcbiAgICAgICAgICAgIGV2ZW50czogZXZlbnRzICYmIGNvbnZlcnRFdmVudHMoc3BlY3MsIHJlZ2lzdHJ5LCBtb2QubmFtZSwgZXZlbnRzLCBzZWN0aW9uVHlwZXMpLFxuICAgICAgICAgICAgaW5kZXg6IG1vZC5pbmRleCxcbiAgICAgICAgICAgIG5hbWU6IG1vZC5uYW1lLFxuICAgICAgICAgICAgc3RvcmFnZTogc3RvcmFnZSAmJiBjb252ZXJ0U3RvcmFnZShzcGVjcywgcmVnaXN0cnksIHN0b3JhZ2UsIHNlY3Rpb25UeXBlcylcbiAgICAgICAgfV0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IHRoZSBNZXRhZGF0YSB0byB2MTRcbiAqIEBpbnRlcm5hbFxuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVjE0KHJlZ2lzdHJ5LCB2MTMsIG1ldGFWZXJzaW9uKSB7XG4gICAgY29uc3Qgc3BlY3MgPSBbXTtcbiAgICAvLyBwb3NpdGlvbiAwIGFsd2F5cyBoYXMgTnVsbCwgYWRkaXRpb25hbGx5IGFkZCBpbnRlcm5hbCBkZWZhdWx0c1xuICAgIGNvbXBhdFR5cGVzKHNwZWNzLCAnTnVsbCcsICd1OCcsICd1MTYnLCAndTMyJywgJ3U2NCcpO1xuICAgIHJlZ2lzdGVyT3JpZ2luQ2FsbGVyKHJlZ2lzdHJ5LCB2MTMubW9kdWxlcywgbWV0YVZlcnNpb24pO1xuICAgIGNvbnN0IGV4dHJpbnNpYyA9IGNvbnZlcnRFeHRyaW5zaWMocmVnaXN0cnksIHYxMy5leHRyaW5zaWMpO1xuICAgIGNvbnN0IHBhbGxldHMgPSB2MTMubW9kdWxlcy5tYXAoKG1vZCkgPT4gY3JlYXRlUGFsbGV0KHNwZWNzLCByZWdpc3RyeSwgbW9kLCB7XG4gICAgICAgIGNhbGxzOiBtb2QuY2FsbHMudW53cmFwT3IobnVsbCksXG4gICAgICAgIGNvbnN0YW50czogbW9kLmNvbnN0YW50cyxcbiAgICAgICAgZXJyb3JzOiBtb2QuZXJyb3JzLmxlbmd0aCA/IG1vZC5lcnJvcnMgOiBudWxsLFxuICAgICAgICBldmVudHM6IG1vZC5ldmVudHMudW53cmFwT3IobnVsbCksXG4gICAgICAgIHN0b3JhZ2U6IG1vZC5zdG9yYWdlLnVud3JhcE9yKG51bGwpXG4gICAgfSkpO1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdNZXRhZGF0YVYxNCcsIFt7XG4gICAgICAgICAgICBleHRyaW5zaWMsXG4gICAgICAgICAgICBsb29rdXA6IHtcbiAgICAgICAgICAgICAgICB0eXBlczogc3BlY3MubWFwKCh0eXBlLCBpZCkgPT4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnUG9ydGFibGVUeXBlJywgW3sgaWQsIHR5cGUgfV0pKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhbGxldHNcbiAgICAgICAgfV0pO1xufVxuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqXG4gKiBDb252ZXJ0IHRoZSBNZXRhZGF0YSB0byB2MTVcbiAqIEBpbnRlcm5hbFxuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVjE1KHJlZ2lzdHJ5LCB2MTQsIF8pIHtcbiAgICAvLyBWMTUgaXMgbW9zdGx5IGVxdWl2YWxlbnQgdG8gdjE0IGhvd2V2ZXIgaXQgZG9lcyBhZGRcbiAgICAvL1xuICAgIC8vIDEuIFRoZSB0b3AtbGV2ZWwgYXBpcyBlbnRyeSAtIGl0IGlzIGFzc3VtZWQgdGhhdCBpbiB1c2FnZSB3ZSB3b3VsZFxuICAgIC8vICAgIGp1c3QgY2hlY2sgZm9yIGFsbC1lbXB0eSAobGlrZSB0aGlzIHdvdWxkIGNvbnN0cnVjdClcbiAgICAvLyAyLiBBIGRvY3MgcGFyYW0gb24gdGhlIHBhbGxldCBpdHNlbGZcbiAgICAvLyAzLiBBZGRpdGlvbmFsIGV4dHJpbnNpYyBwYXJhbWV0ZXJzXG4gICAgLy9cbiAgICAvLyBBIHN0cmFpZ2h0IGNvbnZlcnNpb24gd2l0aCBjcmVhdGVUeXBlVW5kYWZlIG1hZ2ljIGZpbGxzIGluIGRldGFpbHNcbiAgICAvLyBXZSBuZWVkIHRoZSBVbmNoZWNrZWRFeHRyaW5zaWMgdG8gZXh0cmFjdCB0aGUgdHlwZXMsIGF0IGxlYXN0IGZvciB2MTRcbiAgICAvLyB3aGljaCBkb2VzIGhhdmUgdGhlc2UgZGV0YWlscyBlbWJlZGRlZCAocHJldmlvdXMtZ2VuIHdvbid0IHBvcHVsYXRlKVxuICAgIGNvbnN0IHVuY2hlY2tlZCA9IHYxNC5sb29rdXAucGFyYW1UeXBlcy5TcFJ1bnRpbWVVbmNoZWNrZWRFeHRyaW5zaWM7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ01ldGFkYXRhVjE1JywgW1xuICAgICAgICBvYmplY3RTcHJlYWQoe30sIHYxNCwge1xuICAgICAgICAgICAgZXh0cmluc2ljOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdFeHRyaW5zaWNNZXRhZGF0YVYxNScsIFtcbiAgICAgICAgICAgICAgICBvYmplY3RTcHJlYWQoe30sIHYxNC5leHRyaW5zaWMsIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1R5cGU6IHVuY2hlY2tlZD8uWzBdLnR5cGUudW53cmFwT3IoMCksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlOiB1bmNoZWNrZWQ/LlsxXS50eXBlLnVud3JhcE9yKDApLFxuICAgICAgICAgICAgICAgICAgICBleHRyYVR5cGU6IHVuY2hlY2tlZD8uWzNdLnR5cGUudW53cmFwT3IoMCksXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZVR5cGU6IHVuY2hlY2tlZD8uWzJdLnR5cGUudW53cmFwT3IoMClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBvdXRlckVudW1zOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdPdXRlckVudW1zMTUnLCBbe1xuICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBXZSBuZWVkIHRvIGV4dHJhY3QgJiBhZGQgdGhlIGVycm9yVHlwZSBpbiBoZXJlXG4gICAgICAgICAgICAgICAgICAgIC8vICh0aGVzZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW4gZXNheSB3YXkgdG8gZGV0ZWN0ICYgZXh0cmFjdCBpdClcbiAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGU6IHVuY2hlY2tlZD8uWzFdLnR5cGUudW53cmFwT3IoMCksXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogdjE0Lmxvb2t1cC5wYXJhbVR5cGVzLkZyYW1lU3lzdGVtRXZlbnRSZWNvcmQ/LlswXS50eXBlLnVud3JhcE9yKDApXG4gICAgICAgICAgICAgICAgfV0pXG4gICAgICAgIH0pXG4gICAgXSk7XG59XG4iLCIvKipcbiAqIENvbnZlcnQgdGhlIE1ldGFkYXRhICh3aGljaCBpcyBhbiBhbGlhcykgdG8gbGF0ZXN0XG4gKiBAaW50ZXJuYWxcbiAqKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0xhdGVzdChfcmVnaXN0cnksIHYxNSwgX21ldGFWZXJzaW9uKSB7XG4gICAgcmV0dXJuIHYxNTtcbn1cbiIsImltcG9ydCB7IG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2VIYXNoZXIocmVnaXN0cnksIGhhc2hlcikge1xuICAgIC8vIEJsYWtlMl8xMjhfQ29uY2F0IGhhcyBiZWVuIGFkZGVkIGF0IGluZGV4IDIsIHNvIHdlIGluY3JlbWVudCBhbGwgdGhlXG4gICAgLy8gaW5kZXhlcyBncmVhdGVyIHRoYW4gMlxuICAgIGlmIChoYXNoZXIudG9OdW1iZXIoKSA+PSAyKSB7XG4gICAgICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTdG9yYWdlSGFzaGVyVjEwJywgW2hhc2hlci50b051bWJlcigpICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU3RvcmFnZUhhc2hlclYxMCcsIFtoYXNoZXJdKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2VUeXBlKHJlZ2lzdHJ5LCBlbnRyeVR5cGUpIHtcbiAgICBpZiAoZW50cnlUeXBlLmlzTWFwKSB7XG4gICAgICAgIHJldHVybiBbb2JqZWN0U3ByZWFkKHt9LCBlbnRyeVR5cGUuYXNNYXAsIHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6IGNyZWF0ZVN0b3JhZ2VIYXNoZXIocmVnaXN0cnksIGVudHJ5VHlwZS5hc01hcC5oYXNoZXIpXG4gICAgICAgICAgICB9KSwgMV07XG4gICAgfVxuICAgIGlmIChlbnRyeVR5cGUuaXNEb3VibGVNYXApIHtcbiAgICAgICAgcmV0dXJuIFtvYmplY3RTcHJlYWQoe30sIGVudHJ5VHlwZS5hc0RvdWJsZU1hcCwge1xuICAgICAgICAgICAgICAgIGhhc2hlcjogY3JlYXRlU3RvcmFnZUhhc2hlcihyZWdpc3RyeSwgZW50cnlUeXBlLmFzRG91YmxlTWFwLmhhc2hlciksXG4gICAgICAgICAgICAgICAga2V5Mkhhc2hlcjogY3JlYXRlU3RvcmFnZUhhc2hlcihyZWdpc3RyeSwgZW50cnlUeXBlLmFzRG91YmxlTWFwLmtleTJIYXNoZXIpXG4gICAgICAgICAgICB9KSwgMl07XG4gICAgfVxuICAgIHJldHVybiBbZW50cnlUeXBlLmFzUGxhaW4sIDBdO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gY29udmVydE1vZHVsZShyZWdpc3RyeSwgbW9kKSB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IG1vZC5zdG9yYWdlLnVud3JhcE9yKG51bGwpO1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdNb2R1bGVNZXRhZGF0YVYxMCcsIFtvYmplY3RTcHJlYWQoe30sIG1vZCwge1xuICAgICAgICAgICAgc3RvcmFnZTogc3RvcmFnZVxuICAgICAgICAgICAgICAgID8gb2JqZWN0U3ByZWFkKHt9LCBzdG9yYWdlLCB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBzdG9yYWdlLml0ZW1zLm1hcCgoaXRlbSkgPT4gb2JqZWN0U3ByZWFkKHt9LCBpdGVtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTdG9yYWdlRW50cnlUeXBlVjEwJywgY3JlYXRlU3RvcmFnZVR5cGUocmVnaXN0cnksIGl0ZW0udHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIH0pXSk7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gdG9WMTAocmVnaXN0cnksIHsgbW9kdWxlcyB9KSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ01ldGFkYXRhVjEwJywgW3tcbiAgICAgICAgICAgIG1vZHVsZXM6IG1vZHVsZXMubWFwKChtb2QpID0+IGNvbnZlcnRNb2R1bGUocmVnaXN0cnksIG1vZCkpXG4gICAgICAgIH1dKTtcbn1cbiIsImV4cG9ydCBjb25zdCBLTk9XTl9WRVJTSU9OUyA9IFsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5XTtcbmV4cG9ydCBjb25zdCBMQVRFU1RfVkVSU0lPTiA9IEtOT1dOX1ZFUlNJT05TWzBdO1xuZXhwb3J0IGNvbnN0IFRPX0NBTExTX1ZFUlNJT04gPSAxNDsgLy8gTEFURVNUX1ZFUlNJT047XG4iLCJpbXBvcnQgeyBwYWNrYWdlSW5mbyBhcyBjb2RlY0luZm8gfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMvcGFja2FnZUluZm8nO1xuaW1wb3J0IHsgcGFja2FnZUluZm8gYXMgY3JlYXRlSW5mbyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUvcGFja2FnZUluZm8nO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG5kZXRlY3RQYWNrYWdlKHBhY2thZ2VJbmZvLCBudWxsLCBbY29kZWNJbmZvLCBjcmVhdGVJbmZvXSk7XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QvdHlwZXMnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMS4yLjEnIH07XG4iLCJpbXBvcnQgeyBFbnVtIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzU3RyaW5nLCBpc1U4YSwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVEYXRhVThhKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGluZGljYXRvciA9IHZhbHVlWzBdO1xuICAgIGlmICghaW5kaWNhdG9yKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRpY2F0b3IgPj0gMSAmJiBpbmRpY2F0b3IgPD0gMzMpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaW5kaWNhdG9yIC0gMTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHZhbHVlLnN1YmFycmF5KDEsIGxlbmd0aCArIDEpO1xuICAgICAgICAvLyBpbiB0aGlzIGNhc2UsIHdlIGFyZSBwYXNzaW5nIGEgUmF3IGJhY2sgKHNpbmNlIHdlIGhhdmUgbm8gbGVuZ3RoKVxuICAgICAgICByZXR1cm4gW3JlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1JhdycsIFtkYXRhXSksIDFdO1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRpY2F0b3IgPj0gMzQgJiYgaW5kaWNhdG9yIDw9IDM3KSB7XG4gICAgICAgIHJldHVybiBbdmFsdWUuc3ViYXJyYXkoMSwgMzIgKyAxKSwgaW5kaWNhdG9yIC0gMzJdOyAvLyAzNCBiZWNvbWVzIDJcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGVjb2RlIERhdGEsIGludmFsaWQgaW5kaWNhdG9yIGJ5dGUgJHtpbmRpY2F0b3J9YCk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVEYXRhKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVEYXRhVThhKHJlZ2lzdHJ5LCB1OGFUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuICAgIC8vIGFzc3VtZSB3ZSBoYXZlIGFuIEVudW0gb3IgYW4gIG9iamVjdCBpbnB1dCwgaGFuZGxlIHRoaXMgdmlhIHRoZSBub3JtYWwgRW51bSBkZWNvZGluZ1xuICAgIHJldHVybiBbdmFsdWUsIHVuZGVmaW5lZF07XG59XG4vKipcbiAqIEBuYW1lIERhdGFcbiAqIEBkZXNjcmlwdGlvblxuICogQSBbW0RhdGFdXSBjb250YWluZXIgd2l0aCBub2RlLCByYXcgb3IgaGFzaGVkIGRhdGFcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGEgZXh0ZW5kcyBFbnVtIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHtcbiAgICAgICAgICAgIE5vbmU6ICdOdWxsJywgLy8gMFxuICAgICAgICAgICAgUmF3OiAnQnl0ZXMnLCAvLyAxXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgICAgICBCbGFrZVR3bzI1NjogJ0gyNTYnLCAvLyAyXG4gICAgICAgICAgICBTaGEyNTY6ICdIMjU2JywgLy8gM1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICAgICAgS2VjY2FrMjU2OiAnSDI1NicsIC8vIDRcbiAgICAgICAgICAgIFNoYVRocmVlMjU2OiAnSDI1NicgLy8gNVxuICAgICAgICB9LCAuLi5kZWNvZGVEYXRhKHJlZ2lzdHJ5LCB2YWx1ZSkpO1xuICAgICAgICBpZiAodGhpcy5pc1JhdyAmJiB0aGlzLmFzUmF3Lmxlbmd0aCA+IDMyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEuUmF3IHZhbHVlcyBhcmUgbGltaXRlZCB0byBhIG1heGltdW0gbGVuZ3RoIG9mIDMyIGJ5dGVzJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGFzQmxha2VUd28yNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICBnZXQgYXNLZWNjYWsyNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICBnZXQgYXNSYXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICBnZXQgYXNTaGEyNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICBnZXQgYXNTaGFUaHJlZTI1NigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuICAgIGdldCBpc0JsYWtlVHdvMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gMjtcbiAgICB9XG4gICAgZ2V0IGlzS2VjY2FrMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gNDtcbiAgICB9XG4gICAgZ2V0IGlzTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IDA7XG4gICAgfVxuICAgIGdldCBpc1JhdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IDE7XG4gICAgfVxuICAgIGdldCBpc1NoYTI1NigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IDM7XG4gICAgfVxuICAgIGdldCBpc1NoYVRocmVlMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gNTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBlbmNvZGVkIGxlbmd0aFxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1U4YSgpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5pbmRleCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gZG9uJ3QgYWRkIHRoZSBsZW5ndGgsIGp1c3QgdGhlIGRhdGFcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnZhbHVlLnRvVThhKHRydWUpO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oZGF0YS5sZW5ndGgsIDMyKTtcbiAgICAgICAgICAgIGNvbnN0IHU4YSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCArIDEpO1xuICAgICAgICAgICAgdThhLnNldChbbGVuZ3RoICsgMV0sIDApO1xuICAgICAgICAgICAgdThhLnNldChkYXRhLnN1YmFycmF5KDAsIGxlbmd0aCksIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHU4YTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugc2ltcGx5IGhhdmUgYSBoYXNoXG4gICAgICAgIGNvbnN0IHU4YSA9IG5ldyBVaW50OEFycmF5KDMzKTtcbiAgICAgICAgdThhLnNldChbdGhpcy5pbmRleCArIDMyXSwgMCk7XG4gICAgICAgIHU4YS5zZXQodGhpcy52YWx1ZS50b1U4YSgpLCAxKTtcbiAgICAgICAgcmV0dXJuIHU4YTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlcyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNVOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBnZXRTaU5hbWUgfSBmcm9tICcuLi9tZXRhZGF0YS91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IHVud3JhcFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5jb25zdCBIQVNIRVJfTUFQID0ge1xuICAgIC8vIG9wYXF1ZVxuICAgIEJsYWtlMl8xMjg6IFsxNiwgZmFsc2VdLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgIEJsYWtlMl8xMjhDb25jYXQ6IFsxNiwgdHJ1ZV0sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgQmxha2UyXzI1NjogWzMyLCBmYWxzZV0sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgSWRlbnRpdHk6IFswLCB0cnVlXSxcbiAgICBUd294MTI4OiBbMTYsIGZhbHNlXSxcbiAgICBUd294MjU2OiBbMzIsIGZhbHNlXSxcbiAgICBUd294NjRDb25jYXQ6IFs4LCB0cnVlXVxufTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVN0b3JhZ2VLZXkodmFsdWUpIHtcbiAgICBpZiAoaXNVOGEodmFsdWUpIHx8ICF2YWx1ZSB8fCBpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgLy8gbGV0IEJ5dGVzIGhhbmRsZSB0aGVzZSBpbnB1dHNcbiAgICAgICAgcmV0dXJuIHsga2V5OiB2YWx1ZSB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0b3JhZ2VLZXkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogdmFsdWUsXG4gICAgICAgICAgICBtZXRob2Q6IHZhbHVlLm1ldGhvZCxcbiAgICAgICAgICAgIHNlY3Rpb246IHZhbHVlLnNlY3Rpb25cbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogdmFsdWUoKSxcbiAgICAgICAgICAgIG1ldGhvZDogdmFsdWUubWV0aG9kLFxuICAgICAgICAgICAgc2VjdGlvbjogdmFsdWUuc2VjdGlvblxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBbZm4sIGFyZ3MgPSBbXV0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBmdW5jdGlvbiBpbnB1dCBmb3Iga2V5IGNvbnN0cnVjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmbi5tZXRhICYmIGZuLm1ldGEudHlwZS5pc01hcCkge1xuICAgICAgICAgICAgY29uc3QgbWFwID0gZm4ubWV0YS50eXBlLmFzTWFwO1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoICE9PSBtYXAuaGFzaGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGFycmF5IG9mICR7bWFwLmhhc2hlcnMubGVuZ3RofSB2YWx1ZXMgYXMgcGFyYW1zIHRvIGEgTWFwIHF1ZXJ5YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogZm4oLi4uYXJncyksXG4gICAgICAgICAgICBtZXRob2Q6IGZuLm1ldGhvZCxcbiAgICAgICAgICAgIHNlY3Rpb246IGZuLnNlY3Rpb25cbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY29udmVydCBpbnB1dCAke3ZhbHVlfSB0byBTdG9yYWdlS2V5YCk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVIYXNoZXJzKHJlZ2lzdHJ5LCB2YWx1ZSwgaGFzaGVycykge1xuICAgIC8vIHRoZSBzdG9yYWdlIGVudHJ5IGlzIHh4aGFzaEFzVThhKHByZWZpeCwgMTI4KSArIHh4aGFzaEFzVThhKG1ldGhvZCwgMTI4KSwgMjU2IGJpdHMgdG90YWxcbiAgICBsZXQgb2Zmc2V0ID0gMzI7XG4gICAgY29uc3QgY291bnQgPSBoYXNoZXJzLmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBbaGFzaGVyLCB0eXBlXSA9IGhhc2hlcnNbaV07XG4gICAgICAgIGNvbnN0IFtoYXNoTGVuLCBjYW5EZWNvZGVdID0gSEFTSEVSX01BUFtoYXNoZXIudHlwZV07XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBjYW5EZWNvZGVcbiAgICAgICAgICAgID8gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZShnZXRTaU5hbWUocmVnaXN0cnkubG9va3VwLCB0eXBlKSwgW3ZhbHVlLnN1YmFycmF5KG9mZnNldCArIGhhc2hMZW4pXSlcbiAgICAgICAgICAgIDogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnUmF3JywgW3ZhbHVlLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgaGFzaExlbildKTtcbiAgICAgICAgb2Zmc2V0ICs9IGhhc2hMZW4gKyAoY2FuRGVjb2RlID8gZGVjb2RlZC5lbmNvZGVkTGVuZ3RoIDogMCk7XG4gICAgICAgIHJlc3VsdFtpXSA9IGRlY29kZWQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVBcmdzRnJvbU1ldGEocmVnaXN0cnksIHZhbHVlLCBtZXRhKSB7XG4gICAgaWYgKCFtZXRhIHx8ICFtZXRhLnR5cGUuaXNNYXApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCB7IGhhc2hlcnMsIGtleSB9ID0gbWV0YS50eXBlLmFzTWFwO1xuICAgIGNvbnN0IGtleXMgPSBoYXNoZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICA/IFtrZXldXG4gICAgICAgIDogcmVnaXN0cnkubG9va3VwLmdldFNpVHlwZShrZXkpLmRlZi5hc1R1cGxlO1xuICAgIHJldHVybiBkZWNvZGVIYXNoZXJzKHJlZ2lzdHJ5LCB2YWx1ZSwgaGFzaGVycy5tYXAoKGgsIGkpID0+IFtoLCBrZXlzW2ldXSkpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0TWV0YSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0b3JhZ2VLZXkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1ldGE7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tZXRhO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBbZm5dID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBmbi5tZXRhO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0VHlwZShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdG9yYWdlS2V5KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5vdXRwdXRUeXBlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW53cmFwU3RvcmFnZVR5cGUocmVnaXN0cnksIHZhbHVlLm1ldGEudHlwZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IFtmbl0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKGZuLm1ldGEpIHtcbiAgICAgICAgICAgIHJldHVybiB1bndyYXBTdG9yYWdlVHlwZShyZWdpc3RyeSwgZm4ubWV0YS50eXBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB3ZSBoYXZlIG5vIHR5cGUgc2V0LCBkZWZhdWx0IHRvIFJhd1xuICAgIHJldHVybiAnUmF3Jztcbn1cbi8qKlxuICogQG5hbWUgU3RvcmFnZUtleVxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgc3RvcmFnZSBrZXkgKHR5cGljYWxseSBoYXNoZWQpIGluIHRoZSBzeXN0ZW0uIEl0IGNhbiBiZVxuICogY29uc3RydWN0ZWQgYnkgcGFzc2luZyBpbiBhIHJhdyBrZXkgb3IgYSBTdG9yYWdlRW50cnkgd2l0aCAob3B0aW9uYWwpIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JhZ2VLZXkgZXh0ZW5kcyBCeXRlcyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgIC8vIEB0cy1pZ25vcmUgVGhpcyBpcyBhc3NpZ25lZCB2aWEgdGhpcy5kZWNvZGVBcmdzRnJvbU1ldGEoKVxuICAgIF9faW50ZXJuYWxfX2FyZ3M7XG4gICAgX19pbnRlcm5hbF9fbWV0YTtcbiAgICBfX2ludGVybmFsX19vdXRwdXRUeXBlO1xuICAgIF9faW50ZXJuYWxfX21ldGhvZDtcbiAgICBfX2ludGVybmFsX19zZWN0aW9uO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSwgb3ZlcnJpZGUgPSB7fSkge1xuICAgICAgICBjb25zdCB7IGtleSwgbWV0aG9kLCBzZWN0aW9uIH0gPSBkZWNvZGVTdG9yYWdlS2V5KHZhbHVlKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGtleSk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fb3V0cHV0VHlwZSA9IGdldFR5cGUocmVnaXN0cnksIHZhbHVlKTtcbiAgICAgICAgLy8gZGVjb2RlIHRoZSBhcmdzIChhcyBhcHBsaWNhYmxlIGJhc2VkIG9uIHRoZSBrZXkgYW5kIHRoZSBoYXNoZXJzLCBhZnRlciBhbGwgaW5pdClcbiAgICAgICAgdGhpcy5zZXRNZXRhKGdldE1ldGEodmFsdWUpLCBvdmVycmlkZS5zZWN0aW9uIHx8IHNlY3Rpb24sIG92ZXJyaWRlLm1ldGhvZCB8fCBtZXRob2QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJuIHRoZSBkZWNvZGVkIGFyZ3VtZW50cyAoYXBwbGljYWJsZSB0byBtYXAgd2l0aCBkZWNvZGFibGUgdmFsdWVzKVxuICAgICAqL1xuICAgIGdldCBhcmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19hcmdzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIG1ldGFkYXRhIG9yIGB1bmRlZmluZWRgIHdoZW4gbm90IGF2YWlsYWJsZVxuICAgICAqL1xuICAgIGdldCBtZXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19tZXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGtleSBtZXRob2Qgb3IgYHVuZGVmaW5lZGAgd2hlbiBub3Qgc3BlY2lmaWVkXG4gICAgICovXG4gICAgZ2V0IG1ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fbWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIG91dHB1dCB0eXBlXG4gICAgICovXG4gICAgZ2V0IG91dHB1dFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX291dHB1dFR5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUga2V5IHNlY3Rpb24gb3IgYHVuZGVmaW5lZGAgd2hlbiBub3Qgc3BlY2lmaWVkXG4gICAgICovXG4gICAgZ2V0IHNlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3NlY3Rpb247XG4gICAgfVxuICAgIGlzKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5LnNlY3Rpb24gPT09IHRoaXMuc2VjdGlvbiAmJiBrZXkubWV0aG9kID09PSB0aGlzLm1ldGhvZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1ldGEgZm9yIHRoaXMga2V5XG4gICAgICovXG4gICAgc2V0TWV0YShtZXRhLCBzZWN0aW9uLCBtZXRob2QpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19tZXRhID0gbWV0YTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19tZXRob2QgPSBtZXRob2QgfHwgdGhpcy5fX2ludGVybmFsX19tZXRob2Q7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc2VjdGlvbiA9IHNlY3Rpb24gfHwgdGhpcy5fX2ludGVybmFsX19zZWN0aW9uO1xuICAgICAgICBpZiAobWV0YSkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19vdXRwdXRUeXBlID0gdW53cmFwU3RvcmFnZVR5cGUodGhpcy5yZWdpc3RyeSwgbWV0YS50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19hcmdzID0gZGVjb2RlQXJnc0Zyb21NZXRhKHRoaXMucmVnaXN0cnksIHRoaXMudG9VOGEodHJ1ZSksIG1ldGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZS4uLlxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgSHVtYW4gcmVwcmVzZW50YXRpb24gZm9yIHRoaXMgdHlwZVxuICAgICAqL1xuICAgIHRvSHVtYW4oX2lzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19hcmdzLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX2FyZ3MubWFwKChhKSA9PiBhLnRvSHVtYW4odW5kZWZpbmVkLCBkaXNhYmxlQXNjaWkpKVxuICAgICAgICAgICAgOiBzdXBlci50b0h1bWFuKHVuZGVmaW5lZCwgZGlzYWJsZUFzY2lpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHJhdyB0eXBlIGZvciB0aGlzXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ1N0b3JhZ2VLZXknO1xuICAgIH1cbn1cbiIsIi8qKlxuICogQHN1bW1hcnkgVHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSB1c2VkIGluIHRoZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IHsgQml0VmVjLCBCb29sLCBib29sLCBCeXRlcywgRjMyLCBmMzIsIEY2NCwgZjY0LCBJOCwgaTgsIEkxNiwgaTE2LCBJMzIsIGkzMiwgSTY0LCBpNjQsIEkxMjgsIGkxMjgsIEkyNTYsIGkyNTYsIElTaXplLCBpc2l6ZSwgTnVsbCwgT3B0aW9uQm9vbCwgVGV4dCwgVHlwZSwgVTgsIHU4LCBVMTYsIHUxNiwgVTMyLCB1MzIsIFU2NCwgdTY0LCBVMTI4LCB1MTI4LCBVMjU2LCB1MjU2LCBVU2l6ZSwgdXNpemUgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuZXhwb3J0IHsgRGF0YSB9IGZyb20gJy4vRGF0YS5qcyc7XG5leHBvcnQgeyBTdG9yYWdlS2V5IH0gZnJvbSAnLi9TdG9yYWdlS2V5LmpzJztcbiIsImltcG9ydCB7IGdldFNpTmFtZSB9IGZyb20gJy4uL21ldGFkYXRhL3V0aWwvaW5kZXguanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcFN0b3JhZ2VTaSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUuaXNQbGFpblxuICAgICAgICA/IHR5cGUuYXNQbGFpblxuICAgICAgICA6IHR5cGUuYXNNYXAudmFsdWU7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwU3RvcmFnZVR5cGUocmVnaXN0cnksIHR5cGUsIGlzT3B0aW9uYWwpIHtcbiAgICBjb25zdCBvdXRwdXRUeXBlID0gZ2V0U2lOYW1lKHJlZ2lzdHJ5Lmxvb2t1cCwgdW53cmFwU3RvcmFnZVNpKHR5cGUpKTtcbiAgICByZXR1cm4gaXNPcHRpb25hbFxuICAgICAgICA/IGBPcHRpb248JHtvdXRwdXRUeXBlfT5gXG4gICAgICAgIDogb3V0cHV0VHlwZTtcbn1cbiIsImltcG9ydCB7IHNzaGFzaCB9IGZyb20gJy4vc3NoYXNoLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0FkZHJlc3NDaGVja3N1bShkZWNvZGVkKSB7XG4gICAgY29uc3Qgc3M1OExlbmd0aCA9IChkZWNvZGVkWzBdICYgNjQpID8gMiA6IDE7XG4gICAgY29uc3Qgc3M1OERlY29kZWQgPSBzczU4TGVuZ3RoID09PSAxXG4gICAgICAgID8gZGVjb2RlZFswXVxuICAgICAgICA6ICgoZGVjb2RlZFswXSAmIDYzKSA8PCAyKSB8IChkZWNvZGVkWzFdID4+IDYpIHwgKChkZWNvZGVkWzFdICYgNjMpIDw8IDgpO1xuICAgIC8vIDMyLzMzIGJ5dGVzIHB1YmxpYyArIDIgYnl0ZXMgY2hlY2tzdW0gKyBwcmVmaXhcbiAgICBjb25zdCBpc1B1YmxpY0tleSA9IFszNCArIHNzNThMZW5ndGgsIDM1ICsgc3M1OExlbmd0aF0uaW5jbHVkZXMoZGVjb2RlZC5sZW5ndGgpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGRlY29kZWQubGVuZ3RoIC0gKGlzUHVibGljS2V5ID8gMiA6IDEpO1xuICAgIC8vIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgZG8gdGhlIGNoZWNrc3VtIGJ5dGUgY2hlY2tzXG4gICAgY29uc3QgaGFzaCA9IHNzaGFzaChkZWNvZGVkLnN1YmFycmF5KDAsIGxlbmd0aCkpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSAoZGVjb2RlZFswXSAmIDEyOCkgPT09IDAgJiYgIVs0NiwgNDddLmluY2x1ZGVzKGRlY29kZWRbMF0pICYmIChpc1B1YmxpY0tleVxuICAgICAgICA/IGRlY29kZWRbZGVjb2RlZC5sZW5ndGggLSAyXSA9PT0gaGFzaFswXSAmJiBkZWNvZGVkW2RlY29kZWQubGVuZ3RoIC0gMV0gPT09IGhhc2hbMV1cbiAgICAgICAgOiBkZWNvZGVkW2RlY29kZWQubGVuZ3RoIC0gMV0gPT09IGhhc2hbMF0pO1xuICAgIHJldHVybiBbaXNWYWxpZCwgbGVuZ3RoLCBzczU4TGVuZ3RoLCBzczU4RGVjb2RlZF07XG59XG4iLCJpbXBvcnQgeyBpc0hleCwgaXNVOGEsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgYmFzZTU4RGVjb2RlIH0gZnJvbSAnLi4vYmFzZTU4L2luZGV4LmpzJztcbmltcG9ydCB7IGNoZWNrQWRkcmVzc0NoZWNrc3VtIH0gZnJvbSAnLi9jaGVja3N1bS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUFkZHJlc3MoZW5jb2RlZCwgaWdub3JlQ2hlY2tzdW0sIHNzNThGb3JtYXQgPSAtMSkge1xuICAgIGlmICghZW5jb2RlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW1wdHkgYWRkcmVzcyBwYXNzZWQnKTtcbiAgICB9XG4gICAgaWYgKGlzVThhKGVuY29kZWQpIHx8IGlzSGV4KGVuY29kZWQpKSB7XG4gICAgICAgIHJldHVybiB1OGFUb1U4YShlbmNvZGVkKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGJhc2U1OERlY29kZShlbmNvZGVkKTtcbiAgICAgICAgaWYgKCFkZWZhdWx0cy5hbGxvd2VkRW5jb2RlZExlbmd0aHMuaW5jbHVkZXMoZGVjb2RlZC5sZW5ndGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVjb2RlZCBhZGRyZXNzIGxlbmd0aCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtpc1ZhbGlkLCBlbmRQb3MsIHNzNThMZW5ndGgsIHNzNThEZWNvZGVkXSA9IGNoZWNrQWRkcmVzc0NoZWNrc3VtKGRlY29kZWQpO1xuICAgICAgICBpZiAoIWlzVmFsaWQgJiYgIWlnbm9yZUNoZWNrc3VtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVjb2RlZCBhZGRyZXNzIGNoZWNrc3VtJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3M1OEZvcm1hdCAhPT0gLTEgJiYgc3M1OEZvcm1hdCAhPT0gc3M1OERlY29kZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgc3M1OEZvcm1hdCAke3NzNThGb3JtYXR9LCByZWNlaXZlZCAke3NzNThEZWNvZGVkfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNvZGVkLnNsaWNlKHNzNThMZW5ndGgsIGVuZFBvcyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERlY29kaW5nICR7ZW5jb2RlZH06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBhdmFpbGFibGVOZXR3b3JrcyB9IGZyb20gJy4uL25ldHdvcmtzLmpzJztcbmV4cG9ydCBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBhbGxvd2VkRGVjb2RlZExlbmd0aHM6IFsxLCAyLCA0LCA4LCAzMiwgMzNdLFxuICAgIC8vIHB1YmxpY0tleSBoYXMgcHJlZml4ICsgMiBjaGVja3N1bSBieXRlcywgc2hvcnQgb25seSBwcmVmaXggKyAxIGNoZWNrc3VtIGJ5dGVcbiAgICBhbGxvd2VkRW5jb2RlZExlbmd0aHM6IFszLCA0LCA2LCAxMCwgMzUsIDM2LCAzNywgMzhdLFxuICAgIGFsbG93ZWRQcmVmaXg6IGF2YWlsYWJsZU5ldHdvcmtzLm1hcCgoeyBwcmVmaXggfSkgPT4gcHJlZml4KSxcbiAgICBwcmVmaXg6IDQyXG59O1xuIiwiaW1wb3J0IHsgdThhQ29uY2F0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgYmFzZTU4RW5jb2RlIH0gZnJvbSAnLi4vYmFzZTU4L2luZGV4LmpzJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICcuL2RlY29kZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMuanMnO1xuaW1wb3J0IHsgc3NoYXNoIH0gZnJvbSAnLi9zc2hhc2guanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUFkZHJlc3Moa2V5LCBzczU4Rm9ybWF0ID0gZGVmYXVsdHMucHJlZml4KSB7XG4gICAgLy8gZGVjb2RlIGl0LCB0aGlzIG1lYW5zIHdlIGNhbiByZS1lbmNvZGUgYW4gYWRkcmVzc1xuICAgIGNvbnN0IHU4YSA9IGRlY29kZUFkZHJlc3Moa2V5KTtcbiAgICBpZiAoKHNzNThGb3JtYXQgPCAwKSB8fCAoc3M1OEZvcm1hdCA+IDE2MzgzKSB8fCBbNDYsIDQ3XS5pbmNsdWRlcyhzczU4Rm9ybWF0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ091dCBvZiByYW5nZSBzczU4Rm9ybWF0IHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICBlbHNlIGlmICghZGVmYXVsdHMuYWxsb3dlZERlY29kZWRMZW5ndGhzLmluY2x1ZGVzKHU4YS5sZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSB2YWxpZCBrZXkgdG8gY29udmVydCwgd2l0aCBsZW5ndGggJHtkZWZhdWx0cy5hbGxvd2VkRGVjb2RlZExlbmd0aHMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXQgPSB1OGFDb25jYXQoc3M1OEZvcm1hdCA8IDY0XG4gICAgICAgID8gW3NzNThGb3JtYXRdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgKChzczU4Rm9ybWF0ICYgMjUyKSA+PiAyKSB8IDY0LFxuICAgICAgICAgICAgKHNzNThGb3JtYXQgPj4gOCkgfCAoKHNzNThGb3JtYXQgJiAzKSA8PCA2KVxuICAgICAgICBdLCB1OGEpO1xuICAgIHJldHVybiBiYXNlNThFbmNvZGUodThhQ29uY2F0KGlucHV0LCBzc2hhc2goaW5wdXQpLnN1YmFycmF5KDAsIFszMiwgMzNdLmluY2x1ZGVzKHU4YS5sZW5ndGgpID8gMiA6IDEpKSk7XG59XG4iLCJpbXBvcnQgeyB2YWxpZGF0ZUFkZHJlc3MgfSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBpc0FkZHJlc3MoYWRkcmVzcywgaWdub3JlQ2hlY2tzdW0sIHNzNThGb3JtYXQpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MsIGlnbm9yZUNoZWNrc3VtLCBzczU4Rm9ybWF0KTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgc3RyaW5nVG9VOGEsIHU4YUNvbmNhdCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGJsYWtlMkFzVThhIH0gZnJvbSAnLi4vYmxha2UyL2FzVThhLmpzJztcbmNvbnN0IFNTNThfUFJFRklYID0gc3RyaW5nVG9VOGEoJ1NTNThQUkUnKTtcbmV4cG9ydCBmdW5jdGlvbiBzc2hhc2goa2V5KSB7XG4gICAgcmV0dXJuIGJsYWtlMkFzVThhKHU4YUNvbmNhdChTUzU4X1BSRUZJWCwga2V5KSwgNTEyKTtcbn1cbiIsImltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICcuL2RlY29kZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBZGRyZXNzKGVuY29kZWQsIGlnbm9yZUNoZWNrc3VtLCBzczU4Rm9ybWF0KSB7XG4gICAgcmV0dXJuICEhZGVjb2RlQWRkcmVzcyhlbmNvZGVkLCBpZ25vcmVDaGVja3N1bSwgc3M1OEZvcm1hdCk7XG59XG4iLCJpbXBvcnQgeyB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWNvZGUoeyBjb2RlciwgaXBmcyB9LCB2YWxpZGF0ZSkge1xuICAgIHJldHVybiAodmFsdWUsIGlwZnNDb21wYXQpID0+IHtcbiAgICAgICAgdmFsaWRhdGUodmFsdWUsIGlwZnNDb21wYXQpO1xuICAgICAgICByZXR1cm4gY29kZXIuZGVjb2RlKGlwZnMgJiYgaXBmc0NvbXBhdFxuICAgICAgICAgICAgPyB2YWx1ZS5zdWJzdHJpbmcoMSlcbiAgICAgICAgICAgIDogdmFsdWUpO1xuICAgIH07XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW5jb2RlKHsgY29kZXIsIGlwZnMgfSkge1xuICAgIHJldHVybiAodmFsdWUsIGlwZnNDb21wYXQpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0ID0gY29kZXIuZW5jb2RlKHU4YVRvVThhKHZhbHVlKSk7XG4gICAgICAgIHJldHVybiBpcGZzICYmIGlwZnNDb21wYXRcbiAgICAgICAgICAgID8gYCR7aXBmc30ke291dH1gXG4gICAgICAgICAgICA6IG91dDtcbiAgICB9O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlzKHZhbGlkYXRlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgaXBmc0NvbXBhdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHZhbHVlLCBpcGZzQ29tcGF0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZhbGlkYXRlKHsgY2hhcnMsIGlwZnMsIHR5cGUsIHdpdGhQYWRkaW5nIH0pIHtcbiAgICByZXR1cm4gKHZhbHVlLCBpcGZzQ29tcGF0KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7dHlwZX0gc3RyaW5nIGlucHV0YCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXBmcyAmJiBpcGZzQ29tcGF0ICYmICF2YWx1ZS5zdGFydHNXaXRoKGlwZnMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGlwZnMtY29tcGF0aWJsZSAke3R5cGV9IHRvIHN0YXJ0IHdpdGggJyR7aXBmc30nYCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IChpcGZzQ29tcGF0ID8gMSA6IDApLCBjb3VudCA9IHZhbHVlLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjaGFycy5pbmNsdWRlcyh2YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBhbGwgb2ssIGNoYXJhY3RlciBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod2l0aFBhZGRpbmcgJiYgdmFsdWVbaV0gPT09ICc9Jykge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSBjb3VudCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBjaGFyYWN0ZXIsIGV2ZXJ5dGhpbmcgb2tcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVbaSArIDFdID09PSAnPScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBvbmUgaXMgYWxzbyBwYWRkaW5nLCBzZXF1ZW5jZSBva1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkICR7dHlwZX0gcGFkZGluZyBzZXF1ZW5jZSBcIiR7dmFsdWVbaV19JHt2YWx1ZVtpICsgMV19XCIgYXQgaW5kZXggJHtpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke3R5cGV9IGNoYXJhY3RlciBcIiR7dmFsdWVbaV19XCIgKDB4JHt2YWx1ZS5jaGFyQ29kZUF0KGkpLnRvU3RyaW5nKDE2KX0pIGF0IGluZGV4ICR7aX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgYmFzZTU4IH0gZnJvbSAnQHNjdXJlL2Jhc2UnO1xuaW1wb3J0IHsgY3JlYXRlRGVjb2RlLCBjcmVhdGVFbmNvZGUsIGNyZWF0ZUlzLCBjcmVhdGVWYWxpZGF0ZSB9IGZyb20gJy4uL2Jhc2UzMi9oZWxwZXJzLmpzJztcbmNvbnN0IGNvbmZpZyA9IHtcbiAgICBjaGFyczogJzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXonLFxuICAgIGNvZGVyOiBiYXNlNTgsXG4gICAgaXBmczogJ3onLFxuICAgIHR5cGU6ICdiYXNlNTgnXG59O1xuLyoqXG4gKiBAbmFtZSBiYXNlNThWYWxpZGF0ZVxuICogQHN1bW1hcnkgVmFsaWRhdGVzIGEgYmFzZTU4IHZhbHVlLlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgc3VwcGxpZWQgdmFsdWUgaXMgdmFsaWQgYmFzZTU4LCB0aHJvd2luZyBleGNlcHRpb25zIGlmIG5vdFxuICovXG5leHBvcnQgY29uc3QgYmFzZTU4VmFsaWRhdGUgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZVZhbGlkYXRlKGNvbmZpZyk7XG4vKipcbiAqIEBuYW1lIGJhc2U1OERlY29kZVxuICogQHN1bW1hcnkgRGVjb2RlcyBhIGJhc2U1OCB2YWx1ZS5cbiAqIEBkZXNjcmlwdGlvblxuICogRnJvbSB0aGUgcHJvdmlkZWQgaW5wdXQsIGRlY29kZSB0aGUgYmFzZTU4IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhbiBgVWludDhBcnJheWAuXG4gKi9cbmV4cG9ydCBjb25zdCBiYXNlNThEZWNvZGUgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZURlY29kZShjb25maWcsIGJhc2U1OFZhbGlkYXRlKTtcbi8qKlxuKiBAbmFtZSBiYXNlNThFbmNvZGVcbiogQHN1bW1hcnkgQ3JlYXRlcyBhIGJhc2U1OCB2YWx1ZS5cbiogQGRlc2NyaXB0aW9uXG4qIEZyb20gdGhlIHByb3ZpZGVkIGlucHV0LCBjcmVhdGUgdGhlIGJhc2U1OCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBzdHJpbmcuXG4qL1xuZXhwb3J0IGNvbnN0IGJhc2U1OEVuY29kZSA9IC8qI19fUFVSRV9fKi8gY3JlYXRlRW5jb2RlKGNvbmZpZyk7XG4vKipcbiogQG5hbWUgaXNCYXNlNThcbiogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgaW5wdXQgaXMgaW4gYmFzZTU4LCByZXR1cm5pbmcgdHJ1ZS9mYWxzZVxuKi9cbmV4cG9ydCBjb25zdCBpc0Jhc2U1OCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlSXMoYmFzZTU4VmFsaWRhdGUpO1xuIiwiaW1wb3J0IHsgYmxha2UyYiBhcyBibGFrZTJiSnMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL2JsYWtlMmInO1xuaW1wb3J0IHsgaGFzQmlnSW50LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGJsYWtlMmIsIGlzUmVhZHkgfSBmcm9tICdAcG9sa2Fkb3Qvd2FzbS1jcnlwdG8nO1xuaW1wb3J0IHsgY3JlYXRlQXNIZXggfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbi8qKlxuICogQG5hbWUgYmxha2UyQXNVOGFcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBibGFrZTJiIHU4YSBmcm9tIHRoZSBpbnB1dC5cbiAqIEBkZXNjcmlwdGlvblxuICogRnJvbSBhIGBVaW50OEFycmF5YCBpbnB1dCwgY3JlYXRlIHRoZSBibGFrZTJiIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHU4YSB3aXRoIHRoZSBzcGVjaWZpZWQgYGJpdExlbmd0aGAuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGJsYWtlMkFzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbiAqXG4gKiBibGFrZTJBc1U4YSgnYWJjJyk7IC8vID0+IFsweGJhLCAweDgwLCAweGE1LCAweDNmLCAweDk4LCAweDFjLCAweDRkLCAweDBkXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibGFrZTJBc1U4YShkYXRhLCBiaXRMZW5ndGggPSAyNTYsIGtleSwgb25seUpzKSB7XG4gICAgY29uc3QgYnl0ZUxlbmd0aCA9IE1hdGguY2VpbChiaXRMZW5ndGggLyA4KTtcbiAgICBjb25zdCB1OGEgPSB1OGFUb1U4YShkYXRhKTtcbiAgICByZXR1cm4gIWhhc0JpZ0ludCB8fCAoIW9ubHlKcyAmJiBpc1JlYWR5KCkpXG4gICAgICAgID8gYmxha2UyYih1OGEsIHU4YVRvVThhKGtleSksIGJ5dGVMZW5ndGgpXG4gICAgICAgIDoga2V5XG4gICAgICAgICAgICA/IGJsYWtlMmJKcyh1OGEsIHsgZGtMZW46IGJ5dGVMZW5ndGgsIGtleSB9KVxuICAgICAgICAgICAgOiBibGFrZTJiSnModThhLCB7IGRrTGVuOiBieXRlTGVuZ3RoIH0pO1xufVxuLyoqXG4gKiBAbmFtZSBibGFrZTJBc0hleFxuICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBibGFrZTJiIGhleCBmcm9tIHRoZSBpbnB1dC5cbiAqL1xuZXhwb3J0IGNvbnN0IGJsYWtlMkFzSGV4ID0gLyojX19QVVJFX18qLyBjcmVhdGVBc0hleChibGFrZTJBc1U4YSk7XG4iLCJleHBvcnQgY29uc3QgQk5fQkVfT1BUUyA9IHsgaXNMZTogZmFsc2UgfTtcbmV4cG9ydCBjb25zdCBCTl9MRV9PUFRTID0geyBpc0xlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgQk5fTEVfMTZfT1BUUyA9IHsgYml0TGVuZ3RoOiAxNiwgaXNMZTogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IEJOX0JFXzMyX09QVFMgPSB7IGJpdExlbmd0aDogMzIsIGlzTGU6IGZhbHNlIH07XG5leHBvcnQgY29uc3QgQk5fTEVfMzJfT1BUUyA9IHsgYml0TGVuZ3RoOiAzMiwgaXNMZTogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IEJOX0JFXzI1Nl9PUFRTID0geyBiaXRMZW5ndGg6IDI1NiwgaXNMZTogZmFsc2UgfTtcbmV4cG9ydCBjb25zdCBCTl9MRV8yNTZfT1BUUyA9IHsgYml0TGVuZ3RoOiAyNTYsIGlzTGU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBCTl9MRV81MTJfT1BUUyA9IHsgYml0TGVuZ3RoOiA1MTIsIGlzTGU6IHRydWUgfTtcbiIsImltcG9ydCB7IGlzUmVhZHksIHdhaXRSZWFkeSB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWNyeXB0byc7XG5leHBvcnQgY29uc3QgY3J5cHRvSXNSZWFkeSA9IGlzUmVhZHk7XG5leHBvcnQgZnVuY3Rpb24gY3J5cHRvV2FpdFJlYWR5KCkge1xuICAgIHJldHVybiB3YWl0UmVhZHkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICghaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBpbml0aWFsaXplIEBwb2xrYWRvdC91dGlsLWNyeXB0bycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pXG4gICAgICAgIC5jYXRjaCgoKSA9PiBmYWxzZSk7XG59XG4iLCJpbXBvcnQgeyB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBrZWNjYWtBc1U4YSB9IGZyb20gJy4uL2tlY2Nhay9pbmRleC5qcyc7XG5pbXBvcnQgeyBzZWNwMjU2azFFeHBhbmQgfSBmcm9tICcuLi9zZWNwMjU2azEvaW5kZXguanMnO1xuZnVuY3Rpb24gZ2V0SDE2MCh1OGEpIHtcbiAgICBpZiAoWzMzLCA2NV0uaW5jbHVkZXModThhLmxlbmd0aCkpIHtcbiAgICAgICAgdThhID0ga2VjY2FrQXNVOGEoc2VjcDI1NmsxRXhwYW5kKHU4YSkpO1xuICAgIH1cbiAgICByZXR1cm4gdThhLnNsaWNlKC0yMCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXRoZXJldW1FbmNvZGUoYWRkcmVzc09yUHVibGljKSB7XG4gICAgaWYgKCFhZGRyZXNzT3JQdWJsaWMpIHtcbiAgICAgICAgcmV0dXJuICcweCc7XG4gICAgfVxuICAgIGNvbnN0IHU4YUFkZHJlc3MgPSB1OGFUb1U4YShhZGRyZXNzT3JQdWJsaWMpO1xuICAgIGlmICghWzIwLCAzMiwgMzMsIDY1XS5pbmNsdWRlcyh1OGFBZGRyZXNzLmxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFkZHJlc3Mgb3IgcHVibGljS2V5IHByb3ZpZGVkLCByZWNlaXZlZCAke3U4YUFkZHJlc3MubGVuZ3RofSBieXRlcyBpbnB1dGApO1xuICAgIH1cbiAgICBjb25zdCBhZGRyZXNzID0gdThhVG9IZXgoZ2V0SDE2MCh1OGFBZGRyZXNzKSwgLTEsIGZhbHNlKTtcbiAgICBjb25zdCBoYXNoID0gdThhVG9IZXgoa2VjY2FrQXNVOGEoYWRkcmVzcyksIC0xLCBmYWxzZSk7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDA7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9JHtwYXJzZUludChoYXNoW2ldLCAxNikgPiA3ID8gYWRkcmVzc1tpXS50b1VwcGVyQ2FzZSgpIDogYWRkcmVzc1tpXX1gO1xuICAgIH1cbiAgICByZXR1cm4gYDB4JHtyZXN1bHR9YDtcbn1cbiIsImltcG9ydCB7IGlzSGV4IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgaXNFdGhlcmV1bUNoZWNrc3VtIH0gZnJvbSAnLi9pc0NoZWNrc3VtLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBpc0V0aGVyZXVtQWRkcmVzcyhhZGRyZXNzKSB7XG4gICAgaWYgKCFhZGRyZXNzIHx8IGFkZHJlc3MubGVuZ3RoICE9PSA0MiB8fCAhaXNIZXgoYWRkcmVzcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICgvXigweCk/WzAtOWEtZl17NDB9JC8udGVzdChhZGRyZXNzKSB8fCAvXigweCk/WzAtOUEtRl17NDB9JC8udGVzdChhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzRXRoZXJldW1DaGVja3N1bShhZGRyZXNzKTtcbn1cbiIsImltcG9ydCB7IHU4YVRvSGV4IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsga2VjY2FrQXNVOGEgfSBmcm9tICcuLi9rZWNjYWsvaW5kZXguanMnO1xuZnVuY3Rpb24gaXNJbnZhbGlkQ2hhcihjaGFyLCBieXRlKSB7XG4gICAgcmV0dXJuIGNoYXIgIT09IChieXRlID4gN1xuICAgICAgICA/IGNoYXIudG9VcHBlckNhc2UoKVxuICAgICAgICA6IGNoYXIudG9Mb3dlckNhc2UoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFdGhlcmV1bUNoZWNrc3VtKF9hZGRyZXNzKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9IF9hZGRyZXNzLnJlcGxhY2UoJzB4JywgJycpO1xuICAgIGNvbnN0IGhhc2ggPSB1OGFUb0hleChrZWNjYWtBc1U4YShhZGRyZXNzLnRvTG93ZXJDYXNlKCkpLCAtMSwgZmFsc2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDA7IGkrKykge1xuICAgICAgICBpZiAoaXNJbnZhbGlkQ2hhcihhZGRyZXNzW2ldLCBwYXJzZUludChoYXNoW2ldLCAxNikpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQgeyBoYXNCaWdJbnQsIHU4YVRvSGV4LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGlzUmVhZHkgfSBmcm9tICdAcG9sa2Fkb3Qvd2FzbS1jcnlwdG8nO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFzSGV4KGZuKSB7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB1OGFUb0hleChmbiguLi5hcmdzKSk7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQml0SGFzaGVyKGJpdExlbmd0aCwgZm4pIHtcbiAgICByZXR1cm4gKGRhdGEsIG9ubHlKcykgPT4gZm4oZGF0YSwgYml0TGVuZ3RoLCBvbmx5SnMpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUR1YWxIYXNoZXIod2EsIGpzKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgYml0TGVuZ3RoID0gMjU2LCBvbmx5SnMpID0+IHtcbiAgICAgICAgY29uc3QgdThhID0gdThhVG9VOGEodmFsdWUpO1xuICAgICAgICByZXR1cm4gIWhhc0JpZ0ludCB8fCAoIW9ubHlKcyAmJiBpc1JlYWR5KCkpXG4gICAgICAgICAgICA/IHdhW2JpdExlbmd0aF0odThhKVxuICAgICAgICAgICAgOiBqc1tiaXRMZW5ndGhdKHU4YSk7XG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGtlY2Nha18yNTYgYXMga2VjY2FrMjU2SnMsIGtlY2Nha181MTIgYXMga2VjY2FrNTEySnMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3NoYTMnO1xuaW1wb3J0IHsga2VjY2FrMjU2LCBrZWNjYWs1MTIgfSBmcm9tICdAcG9sa2Fkb3Qvd2FzbS1jcnlwdG8nO1xuaW1wb3J0IHsgY3JlYXRlQXNIZXgsIGNyZWF0ZUJpdEhhc2hlciwgY3JlYXRlRHVhbEhhc2hlciB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuLyoqXG4gKiBAbmFtZSBrZWNjYWtBc1U4YVxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGtlY2NhayBVaW50OEFycmF5IGZyb20gdGhlIGlucHV0LlxuICogQGRlc2NyaXB0aW9uXG4gKiBGcm9tIGVpdGhlciBhIGBzdHJpbmdgIG9yIGEgYEJ1ZmZlcmAgaW5wdXQsIGNyZWF0ZSB0aGUga2VjY2FrIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIGBVaW50OEFycmF5YC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsga2VjY2FrQXNVOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuICpcbiAqIGtlY2Nha0FzVThhKCcxMjMnKTsgLy8gPT4gVWludDhBcnJheVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBrZWNjYWtBc1U4YSA9IC8qI19fUFVSRV9fKi8gY3JlYXRlRHVhbEhhc2hlcih7IDI1Njoga2VjY2FrMjU2LCA1MTI6IGtlY2NhazUxMiB9LCB7IDI1Njoga2VjY2FrMjU2SnMsIDUxMjoga2VjY2FrNTEySnMgfSk7XG4vKipcbiAqIEBuYW1lIGtlY2NhazI1NkFzVThhXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGtlY2NhazI1NiBVaW50OEFycmF5IGZyb20gdGhlIGlucHV0LlxuICovXG5leHBvcnQgY29uc3Qga2VjY2FrMjU2QXNVOGEgPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUJpdEhhc2hlcigyNTYsIGtlY2Nha0FzVThhKTtcbi8qKlxuICogQG5hbWUga2VjY2FrNTEyQXNVOGFcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEga2VjY2FrNTEyIFVpbnQ4QXJyYXkgZnJvbSB0aGUgaW5wdXQuXG4gKi9cbmV4cG9ydCBjb25zdCBrZWNjYWs1MTJBc1U4YSA9IC8qI19fUFVSRV9fKi8gY3JlYXRlQml0SGFzaGVyKDUxMiwga2VjY2FrQXNVOGEpO1xuLyoqXG4gKiBAbmFtZSBrZWNjYWtBc0hleFxuICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBrZWNjYWsgaGV4IHN0cmluZyBmcm9tIHRoZSBpbnB1dC5cbiAqL1xuZXhwb3J0IGNvbnN0IGtlY2Nha0FzSGV4ID0gLyojX19QVVJFX18qLyBjcmVhdGVBc0hleChrZWNjYWtBc1U4YSk7XG4iLCJpbXBvcnQgeyBzZWNwMjU2azEgfSBmcm9tICdAbm9ibGUvY3VydmVzL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBiblRvVThhLCBoYXNCaWdJbnQsIHU4YUNvbmNhdCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGlzUmVhZHksIHNlY3AyNTZrMUV4cGFuZCBhcyB3YXNtIH0gZnJvbSAnQHBvbGthZG90L3dhc20tY3J5cHRvJztcbmltcG9ydCB7IEJOX0JFXzI1Nl9PUFRTIH0gZnJvbSAnLi4vYm4uanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHNlY3AyNTZrMUV4cGFuZChwdWJsaWNLZXksIG9ubHlKcykge1xuICAgIGlmICghWzMzLCA2NV0uaW5jbHVkZXMocHVibGljS2V5Lmxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHB1YmxpY0tleSBwcm92aWRlZCwgcmVjZWl2ZWQgJHtwdWJsaWNLZXkubGVuZ3RofSBieXRlcyBpbnB1dGApO1xuICAgIH1cbiAgICBpZiAocHVibGljS2V5Lmxlbmd0aCA9PT0gNjUpIHtcbiAgICAgICAgcmV0dXJuIHB1YmxpY0tleS5zdWJhcnJheSgxKTtcbiAgICB9XG4gICAgaWYgKCFoYXNCaWdJbnQgfHwgKCFvbmx5SnMgJiYgaXNSZWFkeSgpKSkge1xuICAgICAgICByZXR1cm4gd2FzbShwdWJsaWNLZXkpLnN1YmFycmF5KDEpO1xuICAgIH1cbiAgICBjb25zdCB7IHB4LCBweSB9ID0gc2VjcDI1NmsxLlByb2plY3RpdmVQb2ludC5mcm9tSGV4KHB1YmxpY0tleSk7XG4gICAgcmV0dXJuIHU4YUNvbmNhdChiblRvVThhKHB4LCBCTl9CRV8yNTZfT1BUUyksIGJuVG9VOGEocHksIEJOX0JFXzI1Nl9PUFRTKSk7XG59XG4iLCJpbXBvcnQgeyBoYXNCaWdJbnQsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgaXNSZWFkeSwgdHdveCB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWNyeXB0byc7XG5pbXBvcnQgeyBjcmVhdGVBc0hleCB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgeHhoYXNoNjQgfSBmcm9tICcuL3h4aGFzaDY0LmpzJztcbi8qKlxuICogQG5hbWUgeHhoYXNoQXNVOGFcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSB4eGhhc2g2NCB1OGEgZnJvbSB0aGUgaW5wdXQuXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZyb20gZWl0aGVyIGEgYHN0cmluZ2AsIGBVaW50OEFycmF5YCBvciBhIGBCdWZmZXJgIGlucHV0LCBjcmVhdGUgdGhlIHh4aGFzaDY0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIGBVaW50OEFycmF5YCB3aXRoIHRoZSBzcGVjaWZpZWQgYGJpdExlbmd0aGAuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IHh4aGFzaEFzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbiAqXG4gKiB4eGhhc2hBc1U4YSgnYWJjJyk7IC8vID0+IDB4NDRiYzJjZjVhZDc3MDk5OVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4eGhhc2hBc1U4YShkYXRhLCBiaXRMZW5ndGggPSA2NCwgb25seUpzKSB7XG4gICAgY29uc3Qgcm91bmRzID0gTWF0aC5jZWlsKGJpdExlbmd0aCAvIDY0KTtcbiAgICBjb25zdCB1OGEgPSB1OGFUb1U4YShkYXRhKTtcbiAgICBpZiAoIWhhc0JpZ0ludCB8fCAoIW9ubHlKcyAmJiBpc1JlYWR5KCkpKSB7XG4gICAgICAgIHJldHVybiB0d294KHU4YSwgcm91bmRzKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkocm91bmRzICogOCk7XG4gICAgZm9yIChsZXQgc2VlZCA9IDA7IHNlZWQgPCByb3VuZHM7IHNlZWQrKykge1xuICAgICAgICByZXN1bHQuc2V0KHh4aGFzaDY0KHU4YSwgc2VlZCkucmV2ZXJzZSgpLCBzZWVkICogOCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEBuYW1lIHh4aGFzaEFzSGV4XG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHh4aGFzaDY0IGhleCBmcm9tIHRoZSBpbnB1dC5cbiAqL1xuZXhwb3J0IGNvbnN0IHh4aGFzaEFzSGV4ID0gLyojX19QVVJFX18qLyBjcmVhdGVBc0hleCh4eGhhc2hBc1U4YSk7XG4iLCJpbXBvcnQgeyBfMG4sIF8xbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IEJpZ0ludCB9IGZyb20gJ0Bwb2xrYWRvdC94LWJpZ2ludCc7XG5jb25zdCBQNjRfMSA9IEJpZ0ludCgnMTE0MDA3MTQ3ODUwNzQ2OTQ3OTEnKTtcbmNvbnN0IFA2NF8yID0gQmlnSW50KCcxNDAyOTQ2NzM2Njg5NzAxOTcyNycpO1xuY29uc3QgUDY0XzMgPSBCaWdJbnQoJzE2MDk1ODc5MjkzOTI4MzkxNjEnKTtcbmNvbnN0IFA2NF80ID0gQmlnSW50KCc5NjUwMDI5MjQyMjg3ODI4NTc5Jyk7XG5jb25zdCBQNjRfNSA9IEJpZ0ludCgnMjg3MDE3NzQ1MDAxMjYwMDI2MScpO1xuY29uc3QgVTY0ID0gQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKTtcbmNvbnN0IF83biA9IEJpZ0ludCg3KTtcbmNvbnN0IF8xMW4gPSBCaWdJbnQoMTEpO1xuY29uc3QgXzEybiA9IEJpZ0ludCgxMik7XG5jb25zdCBfMTZuID0gQmlnSW50KDE2KTtcbmNvbnN0IF8xOG4gPSBCaWdJbnQoMTgpO1xuY29uc3QgXzIzbiA9IEJpZ0ludCgyMyk7XG5jb25zdCBfMjduID0gQmlnSW50KDI3KTtcbmNvbnN0IF8yOW4gPSBCaWdJbnQoMjkpO1xuY29uc3QgXzMxbiA9IEJpZ0ludCgzMSk7XG5jb25zdCBfMzJuID0gQmlnSW50KDMyKTtcbmNvbnN0IF8zM24gPSBCaWdJbnQoMzMpO1xuY29uc3QgXzY0biA9IEJpZ0ludCg2NCk7XG5jb25zdCBfMjU2biA9IEJpZ0ludCgyNTYpO1xuZnVuY3Rpb24gcm90bChhLCBiKSB7XG4gICAgY29uc3QgYyA9IGEgJiBVNjQ7XG4gICAgcmV0dXJuICgoYyA8PCBiKSB8IChjID4+IChfNjRuIC0gYikpKSAmIFU2NDtcbn1cbmZ1bmN0aW9uIGZyb21VOGEodThhLCBwLCBjb3VudCkge1xuICAgIGNvbnN0IGJpZ2ludHMgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKywgb2Zmc2V0ICs9IDIpIHtcbiAgICAgICAgYmlnaW50c1tpXSA9IEJpZ0ludCh1OGFbcCArIG9mZnNldF0gfCAodThhW3AgKyAxICsgb2Zmc2V0XSA8PCA4KSk7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSBfMG47XG4gICAgZm9yIChsZXQgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCBfMTZuKSArIGJpZ2ludHNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBpbml0KHNlZWQsIGlucHV0KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgIHNlZWQsXG4gICAgICAgIHU4YTogbmV3IFVpbnQ4QXJyYXkoMzIpLFxuICAgICAgICB1OGFzaXplOiAwLFxuICAgICAgICB2MTogc2VlZCArIFA2NF8xICsgUDY0XzIsXG4gICAgICAgIHYyOiBzZWVkICsgUDY0XzIsXG4gICAgICAgIHYzOiBzZWVkLFxuICAgICAgICB2NDogc2VlZCAtIFA2NF8xXG4gICAgfTtcbiAgICBpZiAoaW5wdXQubGVuZ3RoIDwgMzIpIHtcbiAgICAgICAgc3RhdGUudThhLnNldChpbnB1dCk7XG4gICAgICAgIHN0YXRlLnU4YXNpemUgPSBpbnB1dC5sZW5ndGg7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbGltaXQgPSBpbnB1dC5sZW5ndGggLSAzMjtcbiAgICBsZXQgcCA9IDA7XG4gICAgaWYgKGxpbWl0ID49IDApIHtcbiAgICAgICAgY29uc3QgYWRqdXN0ViA9ICh2KSA9PiBQNjRfMSAqIHJvdGwodiArIFA2NF8yICogZnJvbVU4YShpbnB1dCwgcCwgNCksIF8zMW4pO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBzdGF0ZS52MSA9IGFkanVzdFYoc3RhdGUudjEpO1xuICAgICAgICAgICAgcCArPSA4O1xuICAgICAgICAgICAgc3RhdGUudjIgPSBhZGp1c3RWKHN0YXRlLnYyKTtcbiAgICAgICAgICAgIHAgKz0gODtcbiAgICAgICAgICAgIHN0YXRlLnYzID0gYWRqdXN0VihzdGF0ZS52Myk7XG4gICAgICAgICAgICBwICs9IDg7XG4gICAgICAgICAgICBzdGF0ZS52NCA9IGFkanVzdFYoc3RhdGUudjQpO1xuICAgICAgICAgICAgcCArPSA4O1xuICAgICAgICB9IHdoaWxlIChwIDw9IGxpbWl0KTtcbiAgICB9XG4gICAgaWYgKHAgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUudThhLnNldChpbnB1dC5zdWJhcnJheShwLCBpbnB1dC5sZW5ndGgpKTtcbiAgICAgICAgc3RhdGUudThhc2l6ZSA9IGlucHV0Lmxlbmd0aCAtIHA7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB4eGhhc2g2NChpbnB1dCwgaW5pdFNlZWQpIHtcbiAgICBjb25zdCB7IHNlZWQsIHU4YSwgdThhc2l6ZSwgdjEsIHYyLCB2MywgdjQgfSA9IGluaXQoQmlnSW50KGluaXRTZWVkKSwgaW5wdXQpO1xuICAgIGxldCBwID0gMDtcbiAgICBsZXQgaDY0ID0gVTY0ICYgKEJpZ0ludChpbnB1dC5sZW5ndGgpICsgKGlucHV0Lmxlbmd0aCA+PSAzMlxuICAgICAgICA/ICgoKCgoKCgoKHJvdGwodjEsIF8xbikgKyByb3RsKHYyLCBfN24pICsgcm90bCh2MywgXzEybikgKyByb3RsKHY0LCBfMThuKSkgXiAoUDY0XzEgKiByb3RsKHYxICogUDY0XzIsIF8zMW4pKSkgKiBQNjRfMSArIFA2NF80KSBeIChQNjRfMSAqIHJvdGwodjIgKiBQNjRfMiwgXzMxbikpKSAqIFA2NF8xICsgUDY0XzQpIF4gKFA2NF8xICogcm90bCh2MyAqIFA2NF8yLCBfMzFuKSkpICogUDY0XzEgKyBQNjRfNCkgXiAoUDY0XzEgKiByb3RsKHY0ICogUDY0XzIsIF8zMW4pKSkgKiBQNjRfMSArIFA2NF80KVxuICAgICAgICA6IChzZWVkICsgUDY0XzUpKSk7XG4gICAgd2hpbGUgKHAgPD0gKHU4YXNpemUgLSA4KSkge1xuICAgICAgICBoNjQgPSBVNjQgJiAoUDY0XzQgKyBQNjRfMSAqIHJvdGwoaDY0IF4gKFA2NF8xICogcm90bChQNjRfMiAqIGZyb21VOGEodThhLCBwLCA0KSwgXzMxbikpLCBfMjduKSk7XG4gICAgICAgIHAgKz0gODtcbiAgICB9XG4gICAgaWYgKChwICsgNCkgPD0gdThhc2l6ZSkge1xuICAgICAgICBoNjQgPSBVNjQgJiAoUDY0XzMgKyBQNjRfMiAqIHJvdGwoaDY0IF4gKFA2NF8xICogZnJvbVU4YSh1OGEsIHAsIDIpKSwgXzIzbikpO1xuICAgICAgICBwICs9IDQ7XG4gICAgfVxuICAgIHdoaWxlIChwIDwgdThhc2l6ZSkge1xuICAgICAgICBoNjQgPSBVNjQgJiAoUDY0XzEgKiByb3RsKGg2NCBeIChQNjRfNSAqIEJpZ0ludCh1OGFbcCsrXSkpLCBfMTFuKSk7XG4gICAgfVxuICAgIGg2NCA9IFU2NCAmIChQNjRfMiAqIChoNjQgXiAoaDY0ID4+IF8zM24pKSk7XG4gICAgaDY0ID0gVTY0ICYgKFA2NF8zICogKGg2NCBeIChoNjQgPj4gXzI5bikpKTtcbiAgICBoNjQgPSBVNjQgJiAoaDY0IF4gKGg2NCA+PiBfMzJuKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgZm9yIChsZXQgaSA9IDc7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHJlc3VsdFtpXSA9IE51bWJlcihoNjQgJSBfMjU2bik7XG4gICAgICAgIGg2NCA9IGg2NCAvIF8yNTZuO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiLyoqXG4gKiBAbmFtZSBhcnJheUNodW5rXG4gKiBAc3VtbWFyeSBTcGxpdCBUW10gaW50byBUW11bXSBiYXNlZCBvbiB0aGUgZGVmaW5kIHNpemVcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBhIHNldCBhbyBhcnJheXMgYmFzZWQgb24gdGhlIGNodW5rc2l6ZVxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBhcnJheUNodW5rIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGFycmF5Q2h1bmsoWzEsIDIsIDMsIDQsIDVdKTsgLy8gW1sxLCAyXSwgWzMsIDRdLCBbNV1dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5Q2h1bmsoYXJyYXksIGNodW5rU2l6ZSkge1xuICAgIGNvbnN0IG91dHB1dFNpemUgPSBNYXRoLmNlaWwoYXJyYXkubGVuZ3RoIC8gY2h1bmtTaXplKTtcbiAgICAvLyBzaG9ydGN1dCBmb3IgdGhlIHNpbmdsZS1zcGxpdCBjYXNlXG4gICAgaWYgKG91dHB1dFNpemUgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIFthcnJheV07XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IEFycmF5KG91dHB1dFNpemUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0U2l6ZTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGkgKiBjaHVua1NpemU7XG4gICAgICAgIG91dHB1dFtpXSA9IGFycmF5LnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgY2h1bmtTaXplKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbiIsIi8qKlxuICogQG5hbWUgYXJyYXlGbGF0dGVuXG4gKiBAc3VtbWFyeSBNZXJnZSBUW11bXSBpbnRvIFRbXVxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggYWxsIGFycmF5cyBtZXJnZWQgaW50byBvbmVcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgYXJyYXlGbGF0dGVuIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGFycmF5RmxhdHRlbihbWzEsIDJdLCBbMywgNF0sIFs1XV0pOyAvLyBbMSwgMiwgMywgNCwgNV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlGbGF0dGVuKGFycmF5cykge1xuICAgIGNvbnN0IG51bSA9IGFycmF5cy5sZW5ndGg7XG4gICAgLy8gc2hvcnRjdXRzIGZvciB0aGUgZW1wdHkgJiBzaW5nbGUtZW50cnkgY2FzZVxuICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5c1swXTtcbiAgICB9XG4gICAgLy8gcHJlLWFsbG9jYXRlIGJhc2VkIG9uIHRoZSBjb21iaW5lZCBzaXplXG4gICAgbGV0IHNpemUgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgc2l6ZSArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgbGV0IGkgPSAtMTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgIGNvbnN0IGEgPSBhcnJheXNbal07XG4gICAgICAgIC8vIGluc3RlYWQgb2YgcHVzaGluZywgd2UganVzdCBzZXQgdGhlIGVudHJpZXNcbiAgICAgICAgZm9yIChsZXQgZSA9IDAsIGNvdW50ID0gYS5sZW5ndGg7IGUgPCBjb3VudDsgZSsrKSB7XG4gICAgICAgICAgICBvdXRwdXRbKytpXSA9IGFbZV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzL2Z1bmN0aW9uLmpzJztcbi8qKlxuICogQG5hbWUgYXNzZXJ0XG4gKiBAc3VtbWFyeSBDaGVja3MgZm9yIGEgdmFsaWQgdGVzdCwgaWYgbm90IEVycm9yIGlzIHRocm93bi5cbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRoYXQgYHRlc3RgIGlzIGEgdHJ1dGh5IHZhbHVlLiBJZiB2YWx1ZSBpcyBmYWxzeSAoYG51bGxgLCBgdW5kZWZpbmVkYCwgYGZhbHNlYCwgLi4uKSwgaXQgdGhyb3dzIGFuIEVycm9yIHdpdGggdGhlIHN1cHBsaWVkIGBtZXNzYWdlYC4gV2hlbiBgdGVzdGAgcGFzc2VzLCBgdHJ1ZWAgaXMgcmV0dXJuZWQuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IHsgYXNzZXJ0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGFzc2VydCh0cnVlLCAnVHJ1ZSBzaG91bGQgYmUgdHJ1ZScpOyAvLyBwYXNzZXNcbiAqIGFzc2VydChmYWxzZSwgJ0ZhbHNlIHNob3VsZCBub3QgYmUgdHJ1ZScpOyAvLyBFcnJvciB0aHJvd25cbiAqIGFzc2VydChmYWxzZSwgKCkgPT4gJ21lc3NhZ2UnKTsgLy8gRXJyb3Igd2l0aCAnbWVzc2FnZSdcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICA/IG1lc3NhZ2UoKVxuICAgICAgICAgICAgOiBtZXNzYWdlKTtcbiAgICB9XG59XG4vKipcbiAqIEBuYW1lIGFzc2VydFJldHVyblxuICogQGRlc2NyaXB0aW9uIFJldHVybnMgd2hlbiB0aGUgdmFsdWUgaXMgbm90IHVuZGVmaW5lZC9udWxsLCBvdGhlcndpc2UgdGhyb3dzIGFzc2VydGlvbiBlcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UmV0dXJuKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgYXNzZXJ0KHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwsIG1lc3NhZ2UpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogQG5hbWUgYXNzZXJ0VW5yZWFjaGFibGVcbiAqIEBkZXNjcmlwdGlvbiBBbiBhc3NlcnRpb24gaGVscGVyIHRoYXQgZW5zdXJlcyBhbGwgY29kZXBhdGhzIGFyZSBmb2xsb3dlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBjb2RlcGF0aCBzaG91bGQgYmUgdW5yZWFjaGFibGUuIFVuaGFuZGxlZCBpbnB1dDogJHt4fWApO1xufVxuIiwiaW1wb3J0IHsgQmlnSW50IH0gZnJvbSAnQHBvbGthZG90L3gtYmlnaW50Jztcbi8qKlxuICogQG5hbWUgXzBuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDAuXG4gKi9cbmV4cG9ydCBjb25zdCBfMG4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCgwKTtcbi8qKlxuICogQG5hbWUgXzFuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDEuXG4gKi9cbmV4cG9ydCBjb25zdCBfMW4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCgxKTtcbi8qKlxuICogQG5hbWUgXzJuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDIuXG4gKi9cbmV4cG9ydCBjb25zdCBfMm4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCgyKTtcbi8qKlxuICogQG5hbWUgXzNuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDMuXG4gKi9cbmV4cG9ydCBjb25zdCBfM24gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCgzKTtcbi8qKlxuICogQG5hbWUgXzRuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDQuXG4gKi9cbmV4cG9ydCBjb25zdCBfNG4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCg0KTtcbi8qKlxuICogQG5hbWUgXzVuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDUuXG4gKi9cbmV4cG9ydCBjb25zdCBfNW4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCg1KTtcbi8qKlxuICogQG5hbWUgXzZuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDYuXG4gKi9cbmV4cG9ydCBjb25zdCBfNm4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCg2KTtcbi8qKlxuICogQG5hbWUgXzduXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDcuXG4gKi9cbmV4cG9ydCBjb25zdCBfN24gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCg3KTtcbi8qKlxuICogQG5hbWUgXzhuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDguXG4gKi9cbmV4cG9ydCBjb25zdCBfOG4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCg4KTtcbi8qKlxuICogQG5hbWUgXzluXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDkuXG4gKi9cbmV4cG9ydCBjb25zdCBfOW4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCg5KTtcbi8qKlxuICogQG5hbWUgXzEwblxuICogQHN1bW1hcnkgQmlnSW50IGNvbnN0YW50IGZvciAxMC5cbiAqL1xuZXhwb3J0IGNvbnN0IF8xMG4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCgxMCk7XG4vKipcbiAqIEBuYW1lIF8xMDBuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDEwMC5cbiAqL1xuZXhwb3J0IGNvbnN0IF8xMDBuID0gLyojX19QVVJFX18qLyBCaWdJbnQoMTAwKTtcbi8qKlxuICogQG5hbWUgXzEwMDBuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDEwMDAuXG4gKi9cbmV4cG9ydCBjb25zdCBfMTAwMG4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCgxMDAwKTtcbi8qKlxuICogQG5hbWUgXzFNblxuICogQHN1bW1hcnkgQmlnSW50IGNvbnN0YW50IGZvciAxLDAwMCwwMDAgKG1pbGxpb24pLlxuICovXG5leHBvcnQgY29uc3QgXzFNbiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDEwMDAwMDApO1xuLyoqXG4qIEBuYW1lIF8xQm5cbiogQHN1bW1hcnkgQmlnSW50IGNvbnN0YW50IGZvciAxLDAwMCwwMDAsMDAwIChiaWxsaW9uKS5cbiovXG5leHBvcnQgY29uc3QgXzFCbiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDEwMDAwMDAwMDApO1xuLyoqXG4qIEBuYW1lIF8xUW5cbiogQHN1bW1hcnkgQmlnSW50IGNvbnN0YW50IGZvciAxLDAwMCwwMDAsMDAwLDAwMCwwMDAsMDAwIChxdWl0aWxsaW9uKS5cbiovXG5leHBvcnQgY29uc3QgXzFRbiA9IF8xQm4gKiBfMUJuO1xuLyoqXG4qIEBuYW1lIF8ycG93NTNuXG4qIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgTUFYX1NBRkVfSU5URUdFUlxuKi9cbmV4cG9ydCBjb25zdCBfMnBvdzUzbiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbi8qKlxuICogQG5hbWUgX3NxcnQycG93NTNuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIE1hdGguc3FydChNQVhfU0FGRV9JTlRFR0VSKVxuICovXG5leHBvcnQgY29uc3QgX3NxcnQycG93NTNuID0gLyojX19QVVJFX18qLyBCaWdJbnQoOTQ5MDYyNjUpO1xuIiwiLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNtcChjbXApIHtcbiAgICByZXR1cm4gKC4uLml0ZW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIGFyZ3VtZW50cycpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBpdGVtc1swXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY21wKGl0ZW1zW2ldLCByZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlbXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgQk4gfSBmcm9tICcuL2JuLmpzJztcbi8qKlxuICogQG5hbWUgQk5fWkVST1xuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDAuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9aRVJPID0gLyojX19QVVJFX18qLyBuZXcgQk4oMCk7XG4vKipcbiAqIEBuYW1lIEJOX09ORVxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDEuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9PTkUgPSAvKiNfX1BVUkVfXyovIG5ldyBCTigxKTtcbi8qKlxuICogQG5hbWUgQk5fVFdPXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMi5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX1RXTyA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDIpO1xuLyoqXG4gKiBAbmFtZSBCTl9USFJFRVxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDMuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9USFJFRSA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDMpO1xuLyoqXG4gKiBAbmFtZSBCTl9GT1VSXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgNC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX0ZPVVIgPSAvKiNfX1BVUkVfXyovIG5ldyBCTig0KTtcbi8qKlxuICogQG5hbWUgQk5fRklWRVxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDUuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9GSVZFID0gLyojX19QVVJFX18qLyBuZXcgQk4oNSk7XG4vKipcbiAqIEBuYW1lIEJOX1NJWFxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDYuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9TSVggPSAvKiNfX1BVUkVfXyovIG5ldyBCTig2KTtcbi8qKlxuICogQG5hbWUgQk5fU0VWRU5cbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciA3LlxuICovXG5leHBvcnQgY29uc3QgQk5fU0VWRU4gPSAvKiNfX1BVUkVfXyovIG5ldyBCTig3KTtcbi8qKlxuICogQG5hbWUgQk5fRUlHSFRcbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciA4LlxuICovXG5leHBvcnQgY29uc3QgQk5fRUlHSFQgPSAvKiNfX1BVUkVfXyovIG5ldyBCTig4KTtcbi8qKlxuICogQG5hbWUgQk5fTklORVxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDkuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9OSU5FID0gLyojX19QVVJFX18qLyBuZXcgQk4oOSk7XG4vKipcbiAqIEBuYW1lIEJOX1RFTlxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDEwLlxuICovXG5leHBvcnQgY29uc3QgQk5fVEVOID0gLyojX19QVVJFX18qLyBuZXcgQk4oMTApO1xuLyoqXG4gKiBAbmFtZSBCTl9IVU5EUkVEXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMTAwLlxuICovXG5leHBvcnQgY29uc3QgQk5fSFVORFJFRCA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDEwMCk7XG4vKipcbiAqIEBuYW1lIEJOX1RIT1VTQU5EXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMSwwMDAuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9USE9VU0FORCA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDEwMDApO1xuLyoqXG4gKiBAbmFtZSBCTl9NSUxMSU9OXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMSwwMDAsMDAwLlxuICovXG5leHBvcnQgY29uc3QgQk5fTUlMTElPTiA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDEwMDAwMDApO1xuLyoqXG4gKiBAbmFtZSBCTl9CSUxMSU9OXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMSwwMDAsMDAwLDAwMC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX0JJTExJT04gPSAvKiNfX1BVUkVfXyovIG5ldyBCTigxMDAwMDAwMDAwKTtcbi8qKlxuICogQG5hbWUgQk5fUVVJTlRJTExcbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciAxLDAwMCwwMDAsMDAwLDAwMCwwMDAsMDAwLlxuICovXG5leHBvcnQgY29uc3QgQk5fUVVJTlRJTEwgPSBCTl9CSUxMSU9OLm11bChCTl9CSUxMSU9OKTtcbi8qKlxuICogQG5hbWUgQk5fTUFYX0lOVEVHRVJcbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciBNQVhfU0FGRV9JTlRFR0VSXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9NQVhfSU5URUdFUiA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcbi8qKlxuICogQG5hbWUgQk5fU1FSVF9NQVhfSU5URUdFUlxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIE1hdGguc3FydChNQVhfU0FGRV9JTlRFR0VSKVxuICovXG5leHBvcnQgY29uc3QgQk5fU1FSVF9NQVhfSU5URUdFUiA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDk0OTA2MjY1KTtcbiIsImltcG9ydCB7IGNyZWF0ZUNtcCB9IGZyb20gJy4uL2JpL2hlbHBlcnMuanMnO1xuLyoqXG4gKiBAbmFtZSBibk1heFxuICogQHN1bW1hcnkgRmluZHMgYW5kIHJldHVybnMgdGhlIGhpZ2hlc3QgdmFsdWUgaW4gYW4gYXJyYXkgb2YgQk5zLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgQk4gZnJvbSAnYm4uanMnO1xuICogaW1wb3J0IHsgYm5NYXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYm5NYXgoW25ldyBCTigxKSwgbmV3IEJOKDMpLCBuZXcgQk4oMildKS50b1N0cmluZygpOyAvLyA9PiAnMydcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgYm5NYXggPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUNtcCgoYSwgYikgPT4gYS5ndChiKSk7XG4vKipcbiAqIEBuYW1lIGJuTWluXG4gKiBAc3VtbWFyeSBGaW5kcyBhbmQgcmV0dXJucyB0aGUgc21hbGxlc3QgdmFsdWUgaW4gYW4gYXJyYXkgb2YgQk5zLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgQk4gZnJvbSAnYm4uanMnO1xuICogaW1wb3J0IHsgYm5NaW4gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYm5NaW4oW25ldyBCTigxKSwgbmV3IEJOKDMpLCBuZXcgQk4oMildKS50b1N0cmluZygpOyAvLyA9PiAnMSdcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgYm5NaW4gPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUNtcCgoYSwgYikgPT4gYS5sdChiKSk7XG4iLCJpbXBvcnQgeyBCTiB9IGZyb20gJy4vYm4uanMnO1xuaW1wb3J0IHsgQk5fTUFYX0lOVEVHRVIsIEJOX09ORSwgQk5fU1FSVF9NQVhfSU5URUdFUiB9IGZyb20gJy4vY29uc3RzLmpzJztcbmltcG9ydCB7IGJuVG9CbiB9IGZyb20gJy4vdG9Cbi5qcyc7XG4vKipcbiAqIEBuYW1lIGJuU3FydFxuICogQHN1bW1hcnkgQ2FsY3VsYXRlcyB0aGUgaW50ZWdlciBzcXVhcmUgcm9vdCBvZiBhIEJOXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBCTiBmcm9tICdibi5qcyc7XG4gKiBpbXBvcnQgeyBiblNxcnQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYm5TcXJ0KG5ldyBCTigxNikpLnRvU3RyaW5nKCk7IC8vID0+ICc0J1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiblNxcnQodmFsdWUpIHtcbiAgICBjb25zdCBuID0gYm5Ub0JuKHZhbHVlKTtcbiAgICBpZiAobi5pc05lZygpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3F1YXJlIHJvb3Qgb2YgbmVnYXRpdmUgbnVtYmVycyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUzNjgzOTk1L2phdmFzY3JpcHQtYmlnLWludGVnZXItc3F1YXJlLXJvb3QvXG4gICAgLy8gc2hvcnRjdXQgPD0gMl41MyAtIDEgdG8gdXNlIHRoZSBKUyB1dGlsc1xuICAgIGlmIChuLmx0ZShCTl9NQVhfSU5URUdFUikpIHtcbiAgICAgICAgLy8gfn4gTW9yZSBwZXJmb3JtYW50IHZlcnNpb24gb2YgTWF0aC5mbG9vclxuICAgICAgICByZXR1cm4gbmV3IEJOKH5+TWF0aC5zcXJ0KG4udG9OdW1iZXIoKSkpO1xuICAgIH1cbiAgICAvLyBVc2Ugc3FydChNQVhfU0FGRV9JTlRFR0VSKSBhcyBzdGFydGluZyBwb2ludC4gc2luY2Ugd2UgYWxyZWFkeSBrbm93IHRoZVxuICAgIC8vIG91dHB1dCB3aWxsIGJlIGxhcmdlciB0aGFuIHRoaXMsIHdlIGV4cGVjdCB0aGlzIHRvIGJlIGEgc2FmZSBzdGFydFxuICAgIGxldCB4MCA9IEJOX1NRUlRfTUFYX0lOVEVHRVIuY2xvbmUoKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCB4MSA9IG4uZGl2KHgwKS5pYWRkKHgwKS5pc2hybigxKTtcbiAgICAgICAgaWYgKHgwLmVxKHgxKSB8fCB4MC5lcSh4MS5zdWIoQk5fT05FKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB4MDtcbiAgICAgICAgfVxuICAgICAgICB4MCA9IHgxO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGhleFRvQm4gfSBmcm9tICcuLi9oZXgvdG9Cbi5qcyc7XG5pbXBvcnQgeyBpc0JpZ0ludCB9IGZyb20gJy4uL2lzL2JpZ0ludC5qcyc7XG5pbXBvcnQgeyBpc0hleCB9IGZyb20gJy4uL2lzL2hleC5qcyc7XG5pbXBvcnQgeyBpc1RvQmlnSW50IH0gZnJvbSAnLi4vaXMvdG9CaWdJbnQuanMnO1xuaW1wb3J0IHsgaXNUb0JuIH0gZnJvbSAnLi4vaXMvdG9Cbi5qcyc7XG5pbXBvcnQgeyBCTiB9IGZyb20gJy4vYm4uanMnO1xuLyoqXG4gKiBAbmFtZSBiblRvQm5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBCTiB2YWx1ZSBmcm9tIGEgQk4sIGJpZ2ludCwgc3RyaW5nIChiYXNlIDEwIG9yIGhleCkgb3IgbnVtYmVyIGlucHV0LlxuICogQGRlc2NyaXB0aW9uXG4gKiBgbnVsbGAgaW5wdXRzIHJldHVybnMgYSBgMHgwYCByZXN1bHQsIEJOIHZhbHVlcyByZXR1cm5zIHRoZSB2YWx1ZSwgbnVtYmVycyByZXR1cm5zIGEgQk4gcmVwcmVzZW50YXRpb24uXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBCTiBmcm9tICdibi5qcyc7XG4gKiBpbXBvcnQgeyBiblRvQm4gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYm5Ub0JuKDB4MTIzNCk7IC8vID0+IEJOKDB4MTIzNClcbiAqIGJuVG9CbihuZXcgQk4oMHgxMjM0KSk7IC8vID0+IEJOKDB4MTIzNClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYm5Ub0JuKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAgID8gQk4uaXNCTih2YWx1ZSlcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogaXNIZXgodmFsdWUpXG4gICAgICAgICAgICAgICAgPyBoZXhUb0JuKHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgOiBpc0JpZ0ludCh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgQk4odmFsdWUudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgOiBpc1RvQm4odmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlLnRvQm4oKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1RvQmlnSW50KHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IEJOKHZhbHVlLnRvQmlnSW50KCkudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBCTih2YWx1ZSlcbiAgICAgICAgOiBuZXcgQk4oMCk7XG59XG4iLCJpbXBvcnQgeyB1OGFUb0hleCB9IGZyb20gJy4uL3U4YS9pbmRleC5qcyc7XG5pbXBvcnQgeyBiblRvVThhIH0gZnJvbSAnLi90b1U4YS5qcyc7XG4vKipcbiAqIEBuYW1lIGJuVG9IZXhcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBoZXggdmFsdWUgZnJvbSBhIEJOLmpzIGJpZ251bWJlciBvYmplY3QuXG4gKiBAZGVzY3JpcHRpb25cbiAqIGBudWxsYCBpbnB1dHMgcmV0dXJucyBhIGAweGAgcmVzdWx0LCBCTiB2YWx1ZXMgcmV0dXJuIHRoZSBhY3R1YWwgdmFsdWUgYXMgYSBgMHhgIHByZWZpeGVkIGhleCB2YWx1ZS4gQW55dGhpbmcgdGhhdCBpcyBub3QgYSBCTiBvYmplY3QgdGhyb3dzIGFuIGVycm9yLiBXaXRoIGBiaXRMZW5ndGhgIHNldCwgaXQgZml4ZXMgdGhlIG51bWJlciB0byB0aGUgc3BlY2lmaWVkIGxlbmd0aC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IEJOIGZyb20gJ2JuLmpzJztcbiAqIGltcG9ydCB7IGJuVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYm5Ub0hleChuZXcgQk4oMHgxMjM0NTYpKTsgLy8gPT4gJzB4MTIzNDU2J1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiblRvSGV4KHZhbHVlLCB7IGJpdExlbmd0aCA9IC0xLCBpc0xlID0gZmFsc2UsIGlzTmVnYXRpdmUgPSBmYWxzZSB9ID0ge30pIHtcbiAgICByZXR1cm4gdThhVG9IZXgoYm5Ub1U4YSh2YWx1ZSwgeyBiaXRMZW5ndGgsIGlzTGUsIGlzTmVnYXRpdmUgfSkpO1xufVxuIiwiaW1wb3J0IHsgYm5Ub0JuIH0gZnJvbSAnLi90b0JuLmpzJztcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHsgYml0TGVuZ3RoOiAtMSwgaXNMZTogdHJ1ZSwgaXNOZWdhdGl2ZTogZmFsc2UgfTtcbi8qKlxuICogQG5hbWUgYm5Ub1U4YVxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIFVpbnQ4QXJyYXkgb2JqZWN0IGZyb20gYSBCTi5cbiAqIEBkZXNjcmlwdGlvblxuICogYG51bGxgL2B1bmRlZmluZWRgL2BOYU5gIGlucHV0cyByZXR1cm5zIGFuIGVtcHR5IGBVaW50OEFycmF5YCByZXN1bHQuIGBCTmAgaW5wdXQgdmFsdWVzIHJldHVybiB0aGUgYWN0dWFsIGJ5dGVzIHZhbHVlIGNvbnZlcnRlZCB0byBhIGBVaW50OEFycmF5YC4gT3B0aW9uYWxseSBjb252ZXJ0IHVzaW5nIGxpdHRsZS1lbmRpYW4gZm9ybWF0IGlmIGBpc0xFYCBpcyBzZXQuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGJuVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYm5Ub1U4YShuZXcgQk4oMHgxMjM0KSk7IC8vID0+IFsweDEyLCAweDM0XVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiblRvVThhKHZhbHVlLCB7IGJpdExlbmd0aCA9IC0xLCBpc0xlID0gdHJ1ZSwgaXNOZWdhdGl2ZSA9IGZhbHNlIH0gPSBERUZBVUxUX09QVFMpIHtcbiAgICBjb25zdCB2YWx1ZUJuID0gYm5Ub0JuKHZhbHVlKTtcbiAgICBjb25zdCBieXRlTGVuZ3RoID0gYml0TGVuZ3RoID09PSAtMVxuICAgICAgICA/IE1hdGguY2VpbCh2YWx1ZUJuLmJpdExlbmd0aCgpIC8gOClcbiAgICAgICAgOiBNYXRoLmNlaWwoKGJpdExlbmd0aCB8fCAwKSAvIDgpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGJpdExlbmd0aCA9PT0gLTFcbiAgICAgICAgICAgID8gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoYnl0ZUxlbmd0aCk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KGJ5dGVMZW5ndGgpO1xuICAgIGNvbnN0IGJuID0gaXNOZWdhdGl2ZVxuICAgICAgICA/IHZhbHVlQm4udG9Ud29zKGJ5dGVMZW5ndGggKiA4KVxuICAgICAgICA6IHZhbHVlQm47XG4gICAgb3V0cHV0LnNldChibi50b0FycmF5KGlzTGUgPyAnbGUnIDogJ2JlJywgYnl0ZUxlbmd0aCksIDApO1xuICAgIHJldHVybiBvdXRwdXQ7XG59XG4iLCJpbXBvcnQgeyB1OGFDb25jYXRTdHJpY3QgfSBmcm9tICcuLi91OGEvaW5kZXguanMnO1xuaW1wb3J0IHsgY29tcGFjdFRvVThhIH0gZnJvbSAnLi90b1U4YS5qcyc7XG4vKipcbiAqIEBuYW1lIGNvbXBhY3RBZGRMZW5ndGhcbiAqIEBkZXNjcmlwdGlvbiBBZGRzIGEgbGVuZ3RoIHByZWZpeCB0byB0aGUgaW5wdXQgdmFsdWVcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgY29tcGFjdEFkZExlbmd0aCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZyhjb21wYWN0QWRkTGVuZ3RoKG5ldyBVaW50OEFycmF5KFsweGRlLCAweGFkLCAweGJlLCAweGVmXSkpKTsgLy8gVWludDhBcnJheShbNCA8PCAyLCAweGRlLCAweGFkLCAweGJlLCAweGVmXSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFjdEFkZExlbmd0aChpbnB1dCkge1xuICAgIHJldHVybiB1OGFDb25jYXRTdHJpY3QoW1xuICAgICAgICBjb21wYWN0VG9VOGEoaW5wdXQubGVuZ3RoKSxcbiAgICAgICAgaW5wdXRcbiAgICBdKTtcbn1cbiIsImltcG9ydCB7IEJOIH0gZnJvbSAnLi4vYm4vaW5kZXguanMnO1xuaW1wb3J0IHsgdThhVG9CbiwgdThhVG9VOGEgfSBmcm9tICcuLi91OGEvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBjb21wYWN0RnJvbVU4YVxuICogQGRlc2NyaXB0aW9uIFJldHJpdmVzIHRoZSBvZmZzZXQgYW5kIGVuY29kZWQgbGVuZ3RoIGZyb20gYSBjb21wYWN0LXByZWZpeGVkIHZhbHVlXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGNvbXBhY3RGcm9tVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnN0IFtvZmZzZXQsIGxlbmd0aF0gPSBjb21wYWN0RnJvbVU4YShuZXcgVWludDhBcnJheShbMjU0LCAyNTUsIDMsIDBdKSk7XG4gKlxuICogY29uc29sZS5sb2coJ3ZhbHVlIG9mZnNldD0nLCBvZmZzZXQsICdsZW5ndGg9JywgbGVuZ3RoKTsgLy8gNCwgMHhmZmZmXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RGcm9tVThhKGlucHV0KSB7XG4gICAgY29uc3QgdThhID0gdThhVG9VOGEoaW5wdXQpO1xuICAgIC8vIFRoZSB1OGEgaXMgbWFudWFsbHkgY29udmVydGVkIGhlcmUgZm9yIDEsIDIgJiA0IGxlbmd0aHMsIGl0IGlzIDJ4IGZhc3RlclxuICAgIC8vIHRoYW4gZG9pbmcgYW4gYWRkaXRpb25hbCBjYWxsIHRvIHU4YVRvQm4gKGFzIHdpdGggdmFyaWFibGUgbGVuZ3RoKVxuICAgIHN3aXRjaCAodThhWzBdICYgMGIxMSkge1xuICAgICAgICBjYXNlIDBiMDA6XG4gICAgICAgICAgICByZXR1cm4gWzEsIG5ldyBCTih1OGFbMF0gPj4+IDIpXTtcbiAgICAgICAgY2FzZSAwYjAxOlxuICAgICAgICAgICAgcmV0dXJuIFsyLCBuZXcgQk4oKHU4YVswXSArICh1OGFbMV0gPDwgOCkpID4+PiAyKV07XG4gICAgICAgIGNhc2UgMGIxMDpcbiAgICAgICAgICAgIC8vIGZvciB0aGUgM3JkIGJ5dGUsIHdlIGRvbid0IDw8IDI0IC0gc2luY2UgSlMgY29udmVydHMgYWxsIGJpdHdpc2Ugb3BlcmF0b3JzIHRvXG4gICAgICAgICAgICAvLyAzMi1iaXQsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSB0b3AtbW9zdCBiaXQgaXMgc2V0IHRoaXMgeWllbGRzIGEgbmVnYXRpdmUgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBbNCwgbmV3IEJOKCh1OGFbMF0gKyAodThhWzFdIDw8IDgpICsgKHU4YVsyXSA8PCAxNikgKyAodThhWzNdICogMTY3NzcyMTYpKSA+Pj4gMildO1xuICAgICAgICAvLyAwYjExXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIC8vIGFkZCA1IHRvIHNoaWZ0ZWQgKDQgZm9yIGJhc2UgbGVuZ3RoLCAxIGZvciB0aGlzIGJ5dGUpXG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAodThhWzBdID4+PiAyKSArIDU7XG4gICAgICAgICAgICAvLyB3ZSB1bnJvbGwgdGhlIGxvb3BcbiAgICAgICAgICAgIHN3aXRjaCAob2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgc3RpbGwgY291bGQgYmUgNCBieXRlcyBkYXRhLCBzaW1pbGFyIHRvIDBiMTAgYWJvdmUgKHdpdGggb2Zmc2V0cylcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgM3JkIGJ5dGUsIHdlIGRvbid0IDw8IDI0IC0gc2luY2UgSlMgY29udmVydHMgYWxsIGJpdHdpc2Ugb3BlcmF0b3JzIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIDMyLWJpdCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHRvcC1tb3N0IGJpdCBpcyBzZXQgdGhpcyB5aWVsZHMgYSBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzUsIG5ldyBCTih1OGFbMV0gKyAodThhWzJdIDw8IDgpICsgKHU4YVszXSA8PCAxNikgKyAodThhWzRdICogMTY3NzcyMTYpKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzYsIG5ldyBCTih1OGFbMV0gKyAodThhWzJdIDw8IDgpICsgKHU4YVszXSA8PCAxNikgKyAoKHU4YVs0XSArICh1OGFbNV0gPDwgOCkpICogMTY3NzcyMTYpKV07XG4gICAgICAgICAgICAgICAgLy8gNiBieXRlcyBkYXRhIGlzIHRoZSBtYXhpbXVtLCA0OCBiaXRzICg1NiB3b3VsZCBvdmVyZmxvdylcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNywgbmV3IEJOKHU4YVsxXSArICh1OGFbMl0gPDwgOCkgKyAodThhWzNdIDw8IDE2KSArICgodThhWzRdICsgKHU4YVs1XSA8PCA4KSArICh1OGFbNl0gPDwgMTYpKSAqIDE2Nzc3MjE2KSldO1xuICAgICAgICAgICAgICAgIC8vIGZvciBhbnl0aGluZyBlbHNlLCB1c2UgdGhlIG5vbi11bnJvbGxlZCB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtvZmZzZXQsIHU4YVRvQm4odThhLnN1YmFycmF5KDEsIG9mZnNldCkpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgY29tcGFjdEZyb21VOGFMaW1cbiAqIEBkZXNjcmlwdGlvbiBBIGxpbWl0ZWQgdmVyc2lvbiBvZiBbW2NvbXBhY3RGcm9tVThhXV0sIGFjY2VwdGluZyBvbmx5IFVpbnQ4QXJyYXkgaW5wdXRzIGZvciB2YWx1ZXMgPD0gNDggYml0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFjdEZyb21VOGFMaW0odThhKSB7XG4gICAgLy8gVGhlIHU4YSBpcyBtYW51YWxseSBjb252ZXJ0ZWQgaGVyZSBmb3IgMSwgMiAmIDQgbGVuZ3RocywgaXQgaXMgMnggZmFzdGVyXG4gICAgLy8gdGhhbiBkb2luZyBhbiBhZGRpdGlvbmFsIGNhbGwgdG8gdThhVG9CbiAoYXMgd2l0aCB2YXJpYWJsZSBsZW5ndGgpXG4gICAgc3dpdGNoICh1OGFbMF0gJiAwYjExKSB7XG4gICAgICAgIGNhc2UgMGIwMDpcbiAgICAgICAgICAgIHJldHVybiBbMSwgdThhWzBdID4+PiAyXTtcbiAgICAgICAgY2FzZSAwYjAxOlxuICAgICAgICAgICAgcmV0dXJuIFsyLCAodThhWzBdICsgKHU4YVsxXSA8PCA4KSkgPj4+IDJdO1xuICAgICAgICBjYXNlIDBiMTA6XG4gICAgICAgICAgICAvLyBmb3IgdGhlIDNyZCBieXRlLCB3ZSBkb24ndCA8PCAyNCAtIHNpbmNlIEpTIGNvbnZlcnRzIGFsbCBiaXR3aXNlIG9wZXJhdG9ycyB0b1xuICAgICAgICAgICAgLy8gMzItYml0LCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgdG9wLW1vc3QgYml0IGlzIHNldCB0aGlzIHlpZWxkcyBhIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gWzQsICh1OGFbMF0gKyAodThhWzFdIDw8IDgpICsgKHU4YVsyXSA8PCAxNikgKyAodThhWzNdICogMTY3NzcyMTYpKSA+Pj4gMl07XG4gICAgICAgIC8vIDBiMTFcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgLy8gYWRkIDUgdG8gc2hpZnRlZCAoNCBmb3IgYmFzZSBsZW5ndGgsIDEgZm9yIHRoaXMgYnl0ZSlcbiAgICAgICAgICAgIC8vIHdlIHVucm9sbCB0aGUgbG9vcFxuICAgICAgICAgICAgc3dpdGNoICgodThhWzBdID4+PiAyKSArIDUpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBzdGlsbCBjb3VsZCBiZSA0IGJ5dGVzIGRhdGEsIHNpbWlsYXIgdG8gMGIxMCBhYm92ZSAod2l0aCBvZmZzZXRzKVxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs1LCB1OGFbMV0gKyAodThhWzJdIDw8IDgpICsgKHU4YVszXSA8PCAxNikgKyAodThhWzRdICogMTY3NzcyMTYpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNiwgdThhWzFdICsgKHU4YVsyXSA8PCA4KSArICh1OGFbM10gPDwgMTYpICsgKCh1OGFbNF0gKyAodThhWzVdIDw8IDgpKSAqIDE2Nzc3MjE2KV07XG4gICAgICAgICAgICAgICAgLy8gNiBieXRlcyBkYXRhIGlzIHRoZSBtYXhpbXVtLCA0OCBiaXRzICg1NiB3b3VsZCBvdmVyZmxvdylcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNywgdThhWzFdICsgKHU4YVsyXSA8PCA4KSArICh1OGFbM10gPDwgMTYpICsgKCh1OGFbNF0gKyAodThhWzVdIDw8IDgpICsgKHU4YVs2XSA8PCAxNikpICogMTY3NzcyMTYpXTtcbiAgICAgICAgICAgICAgICAvLyBmb3IgYW55dGhpbmcgZWxzZSwgd2UgYXJlIGFib3ZlIHRoZSBhY3R1YWwgTUFYX1NBRkVfSU5URUdFUiAtIGJhaWwgb3V0XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wYWN0IGlucHV0IGlzID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IGNvbXBhY3RGcm9tVThhIH0gZnJvbSAnLi9mcm9tVThhLmpzJztcbi8qKlxuICogQG5hbWUgY29tcGFjdFN0cmlwTGVuZ3RoXG4gKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyB0aGUgbGVuZ3RoIHByZWZpeCwgcmV0dXJuaW5nIGJvdGggdGhlIHRvdGFsIGxlbmd0aCAoaW5jbHVkaW5nIHRoZSB2YWx1ZSArIGNvbXBhY3QgZW5jb2RpbmcpIGFuZCB0aGUgZGVjb2RlZCB2YWx1ZSB3aXRoIHRoZSBjb3JyZWN0IGxlbmd0aFxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBjb21wYWN0U3RyaXBMZW5ndGggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coY29tcGFjdFN0cmlwTGVuZ3RoKG5ldyBVaW50OEFycmF5KFsyIDw8IDIsIDB4ZGUsIDB4YWRdKSkpOyAvLyBbMiwgVWludDhBcnJheVsweGRlLCAweGFkXV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFjdFN0cmlwTGVuZ3RoKGlucHV0KSB7XG4gICAgY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IGNvbXBhY3RGcm9tVThhKGlucHV0KTtcbiAgICBjb25zdCB0b3RhbCA9IG9mZnNldCArIGxlbmd0aC50b051bWJlcigpO1xuICAgIHJldHVybiBbXG4gICAgICAgIHRvdGFsLFxuICAgICAgICBpbnB1dC5zdWJhcnJheShvZmZzZXQsIHRvdGFsKVxuICAgIF07XG59XG4iLCJpbXBvcnQgeyBCTiwgQk5fT05FLCBCTl9UV08sIGJuVG9CbiwgYm5Ub1U4YSB9IGZyb20gJy4uL2JuL2luZGV4LmpzJztcbmltcG9ydCB7IHU4YUNvbmNhdFN0cmljdCB9IGZyb20gJy4uL3U4YS9pbmRleC5qcyc7XG5jb25zdCBNQVhfVTggPSBCTl9UV08ucG93KG5ldyBCTig4IC0gMikpLmlzdWIoQk5fT05FKTtcbmNvbnN0IE1BWF9VMTYgPSBCTl9UV08ucG93KG5ldyBCTigxNiAtIDIpKS5pc3ViKEJOX09ORSk7XG5jb25zdCBNQVhfVTMyID0gQk5fVFdPLnBvdyhuZXcgQk4oMzIgLSAyKSkuaXN1YihCTl9PTkUpO1xuY29uc3QgQkxfMTYgPSB7IGJpdExlbmd0aDogMTYgfTtcbmNvbnN0IEJMXzMyID0geyBiaXRMZW5ndGg6IDMyIH07XG4vKipcbiAqIEBuYW1lIGNvbXBhY3RUb1U4YVxuICogQGRlc2NyaXB0aW9uIEVuY29kZXMgYSBudW1iZXIgaW50byBhIGNvbXBhY3QgcmVwcmVzZW50YXRpb25cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgY29tcGFjdFRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnNvbGUubG9nKGNvbXBhY3RUb1U4YSg1MTEsIDMyKSk7IC8vIFVpbnQ4QXJyYXkoWzBiMTExMTExMDEsIDBiMDAwMDAxMTFdKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYWN0VG9VOGEodmFsdWUpIHtcbiAgICBjb25zdCBibiA9IGJuVG9Cbih2YWx1ZSk7XG4gICAgaWYgKGJuLmx0ZShNQVhfVTgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShbYm4udG9OdW1iZXIoKSA8PCAyXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGJuLmx0ZShNQVhfVTE2KSkge1xuICAgICAgICByZXR1cm4gYm5Ub1U4YShibi5zaGxuKDIpLmlhZGQoQk5fT05FKSwgQkxfMTYpO1xuICAgIH1cbiAgICBlbHNlIGlmIChibi5sdGUoTUFYX1UzMikpIHtcbiAgICAgICAgcmV0dXJuIGJuVG9VOGEoYm4uc2hsbigyKS5pYWRkKEJOX1RXTyksIEJMXzMyKTtcbiAgICB9XG4gICAgY29uc3QgdThhID0gYm5Ub1U4YShibik7XG4gICAgbGV0IGxlbmd0aCA9IHU4YS5sZW5ndGg7XG4gICAgLy8gYWRqdXN0IHRvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBieXRlc1xuICAgIHdoaWxlICh1OGFbbGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgICAgbGVuZ3RoLS07XG4gICAgfVxuICAgIGlmIChsZW5ndGggPCA0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsZW5ndGgsIHByZXZpb3VzIGNoZWNrcyBtYXRjaCBhbnl0aGluZyBsZXNzIHRoYW4gMl4zMCcpO1xuICAgIH1cbiAgICByZXR1cm4gdThhQ29uY2F0U3RyaWN0KFtcbiAgICAgICAgLy8gc3VidHJhY3QgNCBhcyBtaW5pbXVtIChhbHNvIGNhdGVyZWQgZm9yIGluIGRlY29kaW5nKVxuICAgICAgICBuZXcgVWludDhBcnJheShbKChsZW5ndGggLSA0KSA8PCAyKSArIDBiMTFdKSxcbiAgICAgICAgdThhLnN1YmFycmF5KDAsIGxlbmd0aClcbiAgICBdKTtcbn1cbiIsIi8qKlxuICogQG5hbWUgZmxvYXRUb1U4YVxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgZmxvYXQgaW50byBhIFU4YSByZXByZXNlbnRhdGlvbiAoV2hpbGUgd2UgZG9uJ3QgdXNlIEJFIGluIFNDQUxFXG4gKiB3ZSBzdGlsbCBhbGxvdyBmb3IgZWl0aGVyIHJlcHJlc2VudGF0aW9uLCBhbHRob3VnaCwgYXMgZWxzZXdoZXJlLCBpc0xlIGlzIGRlZmF1bHQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdFRvVThhKHZhbHVlID0gMC4wLCB7IGJpdExlbmd0aCA9IDMyLCBpc0xlID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBpZiAoYml0TGVuZ3RoICE9PSAzMiAmJiBiaXRMZW5ndGggIT09IDY0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiaXRMZW5ndGggcHJvdmlkZWQsIGV4cGVjdGVkIDMyIG9yIDY0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGJpdExlbmd0aCAvIDgpO1xuICAgIGNvbnN0IGR2ID0gbmV3IERhdGFWaWV3KHJlc3VsdC5idWZmZXIsIHJlc3VsdC5ieXRlT2Zmc2V0KTtcbiAgICBpZiAoYml0TGVuZ3RoID09PSAzMikge1xuICAgICAgICBkdi5zZXRGbG9hdDMyKDAsIE51bWJlcih2YWx1ZSksIGlzTGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZHYuc2V0RmxvYXQ2NCgwLCBOdW1iZXIodmFsdWUpLCBpc0xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IGJuVG9CbiB9IGZyb20gJy4uL2JuL3RvQm4uanMnO1xuaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSAnLi4vaXMvYm9vbGVhbi5qcyc7XG5pbXBvcnQgeyBmb3JtYXREZWNpbWFsIH0gZnJvbSAnLi9mb3JtYXREZWNpbWFsLmpzJztcbmltcG9ydCB7IGdldFNlcGFyYXRvciB9IGZyb20gJy4vZ2V0U2VwYXJhdG9yLmpzJztcbmltcG9ydCB7IGNhbGNTaSwgZmluZFNpLCBTSSwgU0lfTUlEIH0gZnJvbSAnLi9zaS5qcyc7XG5jb25zdCBERUZBVUxUX0RFQ0lNQUxTID0gMDtcbmNvbnN0IERFRkFVTFRfVU5JVCA9IFNJW1NJX01JRF0udGV4dDtcbmxldCBkZWZhdWx0RGVjaW1hbHMgPSBERUZBVUxUX0RFQ0lNQUxTO1xubGV0IGRlZmF1bHRVbml0ID0gREVGQVVMVF9VTklUO1xuZnVuY3Rpb24gX2Zvcm1hdEJhbGFuY2UoaW5wdXQsIHsgZGVjaW1hbHMgPSBkZWZhdWx0RGVjaW1hbHMsIGZvcmNlVW5pdCwgbG9jYWxlID0gJ2VuJywgd2l0aEFsbCA9IGZhbHNlLCB3aXRoU2kgPSB0cnVlLCB3aXRoU2lGdWxsID0gZmFsc2UsIHdpdGhVbml0ID0gdHJ1ZSwgd2l0aFplcm8gPSB0cnVlIH0gPSB7fSkge1xuICAgIC8vIHdlIG9ubHkgd29yayB3aXRoIHN0cmluZyBpbnB1dHMgaGVyZSAtIGNvbnZlcnQgYW55dGhpbmdcbiAgICAvLyBpbnRvIHRoZSBzdHJpbmctb25seSB2YWx1ZVxuICAgIGxldCB0ZXh0ID0gYm5Ub0JuKGlucHV0KS50b1N0cmluZygpO1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCB8fCB0ZXh0ID09PSAnMCcpIHtcbiAgICAgICAgcmV0dXJuICcwJztcbiAgICB9XG4gICAgLy8gc3RyaXAgdGhlIG5lZ2F0aXZlIHNpZ24gc28gd2UgY2FuIHdvcmsgd2l0aCBjbGVhbiBncm91cGluZ3MsIHJlLWFkZCB0aGlzIGluIHRoZVxuICAgIC8vIGVuZCB3aGVuIHdlIHJldHVybiB0aGUgcmVzdWx0IChmcm9tIGhlcmUgb24gd2Ugd29yayB3aXRoIHBvc2l0aXZlIG51bWJlcnMpXG4gICAgbGV0IHNpZ24gPSAnJztcbiAgICBpZiAodGV4dFswXS5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDEpO1xuICAgIH1cbiAgICAvLyBXZSBzdGFydCBhdCBtaWRwb2ludCAoOCkgbWludXMgMSAtIHRoaXMgbWVhbnMgdGhhdCB2YWx1ZXMgZGlzcGxheSBhc1xuICAgIC8vIDEyMy40NTY3IGluc3RlYWQgb2YgMC4xMjM0IGsgKHNvIHdlIGFsd2F5cyBoYXZlIHRoZSBtb3N0IHJlbGV2YW50KS5cbiAgICBjb25zdCBzaSA9IGNhbGNTaSh0ZXh0LCBkZWNpbWFscywgZm9yY2VVbml0KTtcbiAgICBjb25zdCBtaWQgPSB0ZXh0Lmxlbmd0aCAtIChkZWNpbWFscyArIHNpLnBvd2VyKTtcbiAgICBjb25zdCBwcmUgPSBtaWQgPD0gMCA/ICcwJyA6IHRleHQuc3Vic3RyaW5nKDAsIG1pZCk7XG4gICAgLy8gZ2V0IHRoZSBwb3N0IGZyb20gdGhlIG1pZHBvaW50IG9ud2FyZCBhbmQgdGhlbiBmaXJzdCBhZGQgbWF4IGRlY2ltYWxzXG4gICAgLy8gYmVmb3JlIHRyaW1taW5nIHRvIHRoZSBjb3JyZWN0IChjYWxjdWxhdGVkKSBhbW91bnQgb2YgZGVjaW1hbHMgYWdhaW5cbiAgICBsZXQgcG9zdCA9IHRleHRcbiAgICAgICAgLnBhZFN0YXJ0KG1pZCA8IDAgPyBkZWNpbWFscyA6IDEsICcwJylcbiAgICAgICAgLnN1YnN0cmluZyhtaWQgPCAwID8gMCA6IG1pZClcbiAgICAgICAgLnBhZEVuZCh3aXRoQWxsID8gTWF0aC5tYXgoZGVjaW1hbHMsIDQpIDogNCwgJzAnKVxuICAgICAgICAuc3Vic3RyaW5nKDAsIHdpdGhBbGwgPyBNYXRoLm1heCg0LCBkZWNpbWFscyArIHNpLnBvd2VyKSA6IDQpO1xuICAgIC8vIHJlbW92ZSBhbGwgdHJhaWxpbmcgMCdzIChpZiByZXF1aXJlZCB2aWEgZmxhZylcbiAgICBpZiAoIXdpdGhaZXJvKSB7XG4gICAgICAgIGxldCBlbmQgPSBwb3N0Lmxlbmd0aCAtIDE7XG4gICAgICAgIC8vIFRoaXMgbG9va3MgaW5lZmZpY2llbnQsIGhvd2V2ZXIgaXQgaXMgYmV0dGVyIHRvIGRvIHRoZSBjaGVja3MgYW5kXG4gICAgICAgIC8vIG9ubHkgbWFrZSBvbmUgZmluYWwgc2xpY2UgdGhhbiBpdCBpcyB0byBkbyBpdCBpbiBtdWx0aXBsZXNcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHBvc3RbZW5kXSA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgZW5kLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHBvc3RbZW5kXSA9PT0gJzAnKTtcbiAgICAgICAgcG9zdCA9IHBvc3Quc3Vic3RyaW5nKDAsIGVuZCArIDEpO1xuICAgIH1cbiAgICAvLyB0aGUgZGlzcGxheSB1bml0XG4gICAgY29uc3QgdW5pdCA9IGlzQm9vbGVhbih3aXRoVW5pdClcbiAgICAgICAgPyBTSVtTSV9NSURdLnRleHRcbiAgICAgICAgOiB3aXRoVW5pdDtcbiAgICAvLyBmb3JtYXQgdGhlIHVuaXRzIGZvciBkaXNwbGF5IGJhc2VkIG9uIHRoZSBmbGFnc1xuICAgIGNvbnN0IHVuaXRzID0gd2l0aFNpIHx8IHdpdGhTaUZ1bGxcbiAgICAgICAgPyBzaS52YWx1ZSA9PT0gJy0nXG4gICAgICAgICAgICA/IHdpdGhVbml0XG4gICAgICAgICAgICAgICAgPyBgICR7dW5pdH1gXG4gICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgOiBgICR7d2l0aFNpRnVsbCA/IGAke3NpLnRleHR9JHt3aXRoVW5pdCA/ICcgJyA6ICcnfWAgOiBzaS52YWx1ZX0ke3dpdGhVbml0ID8gdW5pdCA6ICcnfWBcbiAgICAgICAgOiAnJztcbiAgICBjb25zdCB7IGRlY2ltYWwsIHRob3VzYW5kIH0gPSBnZXRTZXBhcmF0b3IobG9jYWxlKTtcbiAgICByZXR1cm4gYCR7c2lnbn0ke2Zvcm1hdERlY2ltYWwocHJlLCB0aG91c2FuZCl9JHtwb3N0ICYmIGAke2RlY2ltYWx9JHtwb3N0fWB9JHt1bml0c31gO1xufVxuZXhwb3J0IGNvbnN0IGZvcm1hdEJhbGFuY2UgPSBfZm9ybWF0QmFsYW5jZTtcbmZvcm1hdEJhbGFuY2UuY2FsY1NpID0gKHRleHQsIGRlY2ltYWxzID0gZGVmYXVsdERlY2ltYWxzKSA9PiBjYWxjU2kodGV4dCwgZGVjaW1hbHMpO1xuZm9ybWF0QmFsYW5jZS5maW5kU2kgPSBmaW5kU2k7XG5mb3JtYXRCYWxhbmNlLmdldERlZmF1bHRzID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRlY2ltYWxzOiBkZWZhdWx0RGVjaW1hbHMsXG4gICAgICAgIHVuaXQ6IGRlZmF1bHRVbml0XG4gICAgfTtcbn07XG5mb3JtYXRCYWxhbmNlLmdldE9wdGlvbnMgPSAoZGVjaW1hbHMgPSBkZWZhdWx0RGVjaW1hbHMpID0+IHtcbiAgICByZXR1cm4gU0kuZmlsdGVyKCh7IHBvd2VyIH0pID0+IHBvd2VyIDwgMFxuICAgICAgICA/IChkZWNpbWFscyArIHBvd2VyKSA+PSAwXG4gICAgICAgIDogdHJ1ZSk7XG59O1xuZm9ybWF0QmFsYW5jZS5zZXREZWZhdWx0cyA9ICh7IGRlY2ltYWxzLCB1bml0IH0pID0+IHtcbiAgICBkZWZhdWx0RGVjaW1hbHMgPSAoQXJyYXkuaXNBcnJheShkZWNpbWFscylcbiAgICAgICAgPyBkZWNpbWFsc1swXVxuICAgICAgICA6IGRlY2ltYWxzKSA/PyBkZWZhdWx0RGVjaW1hbHM7XG4gICAgZGVmYXVsdFVuaXQgPSAoQXJyYXkuaXNBcnJheSh1bml0KVxuICAgICAgICA/IHVuaXRbMF1cbiAgICAgICAgOiB1bml0KSA/PyBkZWZhdWx0VW5pdDtcbiAgICBTSVtTSV9NSURdLnRleHQgPSBkZWZhdWx0VW5pdDtcbn07XG4iLCIvKiogQGludGVybmFsICovXG5mdW5jdGlvbiB6ZXJvUGFkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cbi8qKlxuICogQG5hbWUgZm9ybWF0RGF0ZVxuICogQGRlc2NyaXB0aW9uIEZvcm1hdHMgYSBkYXRlIGluIENDWVktTU0tREQgSEg6TU06U1MgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbW9udGggPSB6ZXJvUGFkKChkYXRlLmdldE1vbnRoKCkgKyAxKSk7XG4gICAgY29uc3QgZGF5ID0gemVyb1BhZChkYXRlLmdldERhdGUoKSk7XG4gICAgY29uc3QgaG91ciA9IHplcm9QYWQoZGF0ZS5nZXRIb3VycygpKTtcbiAgICBjb25zdCBtaW51dGUgPSB6ZXJvUGFkKGRhdGUuZ2V0TWludXRlcygpKTtcbiAgICBjb25zdCBzZWNvbmQgPSB6ZXJvUGFkKGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfWA7XG59XG4iLCJjb25zdCBOVU1CRVJfUkVHRVggPSBuZXcgUmVnRXhwKCcoXFxcXGQrPykoPz0oXFxcXGR7M30pKyg/IVxcXFxkKXwkKScsICdnJyk7XG4vKipcbiAqIEBuYW1lIGZvcm1hdERlY2ltYWxcbiAqIEBkZXNjcmlwdGlvbiBGb3JtYXRzIGEgbnVtYmVyIGludG8gc3RyaW5nIGZvcm1hdCB3aXRoIHRob3VzYW5kIHNlcGFyYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERlY2ltYWwodmFsdWUsIHNlcGFyYXRvciA9ICcsJykge1xuICAgIC8vIFdlIGNhbiBkbyB0aGlzIGJ5IGFkanVzdGluZyB0aGUgcmVneCwgaG93ZXZlciBmb3IgdGhlIHNha2Ugb2YgY2xhcml0eVxuICAgIC8vIHdlIHJhdGhlciBzdHJpcCBhbmQgcmUtYWRkIHRoZSBuZWdhdGl2ZSBzaWduIGluIHRoZSBvdXRwdXRcbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdmFsdWVbMF0uc3RhcnRzV2l0aCgnLScpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSBpc05lZ2F0aXZlXG4gICAgICAgID8gdmFsdWUuc3Vic3RyaW5nKDEpLm1hdGNoKE5VTUJFUl9SRUdFWClcbiAgICAgICAgOiB2YWx1ZS5tYXRjaChOVU1CRVJfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaGVkXG4gICAgICAgID8gYCR7aXNOZWdhdGl2ZSA/ICctJyA6ICcnfSR7bWF0Y2hlZC5qb2luKHNlcGFyYXRvcil9YFxuICAgICAgICA6IHZhbHVlO1xufVxuIiwiaW1wb3J0IHsgYm5Ub0JuIH0gZnJvbSAnLi4vYm4vdG9Cbi5qcyc7XG5pbXBvcnQgeyBmb3JtYXREZWNpbWFsIH0gZnJvbSAnLi9mb3JtYXREZWNpbWFsLmpzJztcbmltcG9ydCB7IGdldFNlcGFyYXRvciB9IGZyb20gJy4vZ2V0U2VwYXJhdG9yLmpzJztcbi8qKlxuICogQG5hbWUgZm9ybWF0TnVtYmVyXG4gKiBAZGVzY3JpcHRpb24gRm9ybWF0cyBhIG51bWJlciBpbnRvIHN0cmluZyBmb3JtYXQgd2l0aCB0aG91c2FuZCBzZXBhcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXIodmFsdWUsIHsgbG9jYWxlID0gJ2VuJyB9ID0ge30pIHtcbiAgICBjb25zdCB7IHRob3VzYW5kIH0gPSBnZXRTZXBhcmF0b3IobG9jYWxlKTtcbiAgICByZXR1cm4gZm9ybWF0RGVjaW1hbChiblRvQm4odmFsdWUpLnRvU3RyaW5nKCksIHRob3VzYW5kKTtcbn1cbiIsIi8qKlxuICogR2V0IHRoZSBkZWNpbWFsIGFuZCB0aG91c2FuZCBzZXBhcmF0b3Igb2YgYSBsb2NhbGVcbiAqIEBwYXJhbSBsb2NhbGVcbiAqIEByZXR1cm5zIHtkZWNpbWFsOiBzdHJpbmcsIHRob3VzYW5kOiBzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXBhcmF0b3IobG9jYWxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaW1hbDogKDAuMSkudG9Mb2NhbGVTdHJpbmcobG9jYWxlKS5zdWJzdHJpbmcoMSwgMiksXG4gICAgICAgIHRob3VzYW5kOiAoMTAwMCkudG9Mb2NhbGVTdHJpbmcobG9jYWxlKS5zdWJzdHJpbmcoMSwgMilcbiAgICB9O1xufVxuIiwiLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFNJX01JRCA9IDg7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgU0kgPSBbXG4gICAgeyBwb3dlcjogLTI0LCB0ZXh0OiAneW9jdG8nLCB2YWx1ZTogJ3knIH0sXG4gICAgeyBwb3dlcjogLTIxLCB0ZXh0OiAnemVwdG8nLCB2YWx1ZTogJ3onIH0sXG4gICAgeyBwb3dlcjogLTE4LCB0ZXh0OiAnYXR0bycsIHZhbHVlOiAnYScgfSxcbiAgICB7IHBvd2VyOiAtMTUsIHRleHQ6ICdmZW10bycsIHZhbHVlOiAnZicgfSxcbiAgICB7IHBvd2VyOiAtMTIsIHRleHQ6ICdwaWNvJywgdmFsdWU6ICdwJyB9LFxuICAgIHsgcG93ZXI6IC05LCB0ZXh0OiAnbmFubycsIHZhbHVlOiAnbicgfSxcbiAgICB7IHBvd2VyOiAtNiwgdGV4dDogJ21pY3JvJywgdmFsdWU6ICfCtScgfSxcbiAgICB7IHBvd2VyOiAtMywgdGV4dDogJ21pbGxpJywgdmFsdWU6ICdtJyB9LFxuICAgIHsgcG93ZXI6IDAsIHRleHQ6ICdVbml0JywgdmFsdWU6ICctJyB9LCAvLyBwb3NpdGlvbiA4XG4gICAgeyBwb3dlcjogMywgdGV4dDogJ0tpbG8nLCB2YWx1ZTogJ2snIH0sXG4gICAgeyBwb3dlcjogNiwgdGV4dDogJ01pbGwnLCB2YWx1ZTogJ00nIH0sIC8vIE1lZ2EsIE1cbiAgICB7IHBvd2VyOiA5LCB0ZXh0OiAnQmlsbCcsIHZhbHVlOiAnQicgfSwgLy8gR2lnYSwgR1xuICAgIHsgcG93ZXI6IDEyLCB0ZXh0OiAnVHJpbCcsIHZhbHVlOiAnVCcgfSwgLy8gVGVyYSwgVFxuICAgIHsgcG93ZXI6IDE1LCB0ZXh0OiAnUGV0YScsIHZhbHVlOiAnUCcgfSxcbiAgICB7IHBvd2VyOiAxOCwgdGV4dDogJ0V4YScsIHZhbHVlOiAnRScgfSxcbiAgICB7IHBvd2VyOiAyMSwgdGV4dDogJ1pldGEnLCB2YWx1ZTogJ1onIH0sXG4gICAgeyBwb3dlcjogMjQsIHRleHQ6ICdZb3R0YScsIHZhbHVlOiAnWScgfVxuXTtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2kodHlwZSkge1xuICAgIC8vIHVzZSBhIGxvb3AgaGVyZSwgYmV0dGVyIFJOIHN1cHBvcnQgKHdoaWNoIGRvZXNuJ3QgaGF2ZSBbXS5maW5kKVxuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IFNJLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgaWYgKFNJW2ldLnZhbHVlID09PSB0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gU0lbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFNJW1NJX01JRF07XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY1NpKHRleHQsIGRlY2ltYWxzLCBmb3JjZVVuaXQpIHtcbiAgICBpZiAoZm9yY2VVbml0KSB7XG4gICAgICAgIHJldHVybiBmaW5kU2koZm9yY2VVbml0KTtcbiAgICB9XG4gICAgY29uc3Qgc2lEZWZJbmRleCA9IChTSV9NSUQgLSAxKSArIE1hdGguY2VpbCgodGV4dC5sZW5ndGggLSBkZWNpbWFscykgLyAzKTtcbiAgICByZXR1cm4gU0lbc2lEZWZJbmRleF0gfHwgU0lbc2lEZWZJbmRleCA8IDAgPyAwIDogU0kubGVuZ3RoIC0gMV07XG59XG4iLCJpbXBvcnQgeyBCaWdJbnQgfSBmcm9tICdAcG9sa2Fkb3QveC1iaWdpbnQnO1xuaW1wb3J0IHsgeGdsb2JhbCB9IGZyb20gJ0Bwb2xrYWRvdC94LWdsb2JhbCc7XG4vKiogdHJ1ZSBpZiB0aGUgZW52aXJvbm1lbnQgaGFzIHByb3BlciBCaWdJbnQgc3VwcG9ydCAqL1xuZXhwb3J0IGNvbnN0IGhhc0JpZ0ludCA9IHR5cGVvZiBCaWdJbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIEJpZ0ludC5hc0ludE4gPT09ICdmdW5jdGlvbic7XG4vKiogdHJ1ZSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgQ0pTICovXG5leHBvcnQgY29uc3QgaGFzQ2pzID0gdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCc7XG4vKiogdHJ1ZSBpZiB0aGUgZW52aXJvbm1lbnQgaGFzIF9fZGlybmFtZSBhdmFpbGFibGUgKi9cbmV4cG9ydCBjb25zdCBoYXNEaXJuYW1lID0gdHlwZW9mIF9fZGlybmFtZSAhPT0gJ3VuZGVmaW5lZCc7XG4vKiogdHJ1ZSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgRVNNICovXG5leHBvcnQgY29uc3QgaGFzRXNtID0gIWhhc0Nqcztcbi8qKiB0cnVlIGlmIHRoZSBlbnZpcm9ubWVudCBoYXMgV2ViQXNzZW1ibHkgYXZhaWxhYmxlICovXG5leHBvcnQgY29uc3QgaGFzV2FzbSA9IHR5cGVvZiBXZWJBc3NlbWJseSAhPT0gJ3VuZGVmaW5lZCc7XG4vKiogdHJ1ZSBpZiB0aGUgZW52aXJvbm1lbnQgaGFzIHN1cHBvcnQgZm9yIEJ1ZmZlciAodHlwaWNhbGx5IE5vZGUuanMpICovXG5leHBvcnQgY29uc3QgaGFzQnVmZmVyID0gdHlwZW9mIHhnbG9iYWwuQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB4Z2xvYmFsLkJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJztcbi8qKiB0cnVlIGlmIHRoZSBlbnZpcm9ubWVudCBoYXMgcHJvY2VzcyBhdmFpbGFibGUgKHR5cGljYWxseSBOb2RlLmpzKSAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb2Nlc3MgPSB0eXBlb2YgeGdsb2JhbC5wcm9jZXNzID09PSAnb2JqZWN0JztcbiIsImltcG9ydCB7IFJFR0VYX0hFWF9OT1BSRUZJWCwgUkVHRVhfSEVYX1BSRUZJWEVEIH0gZnJvbSAnLi4vaXMvaGV4LmpzJztcbi8qKlxuICogQG5hbWUgaGV4U3RyaXBQcmVmaXhcbiAqIEBzdW1tYXJ5IFN0cmlwcyBhbnkgbGVhZGluZyBgMHhgIHByZWZpeC5cbiAqIEBkZXNjcmlwdGlvblxuICogVGVzdHMgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBgMHhgIHByZWZpeCwgYW5kIHJldHVybnMgdGhlIHZhbHVlIHdpdGhvdXQgdGhlIHByZWZpeC4gVW4tcHJlZml4ZWQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcy1pcy5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaGV4U3RyaXBQcmVmaXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coJ3N0cmlwcGVkJywgaGV4U3RyaXBQcmVmaXgoJzB4MTIzNCcpKTsgLy8gPT4gMTIzNFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZXhTdHJpcFByZWZpeCh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT09ICcweCcpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBlbHNlIGlmIChSRUdFWF9IRVhfUFJFRklYRUQudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoUkVHRVhfSEVYX05PUFJFRklYLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBoZXggdmFsdWUgdG8gY29udmVydCwgZm91bmQgJyR7dmFsdWV9J2ApO1xufVxuIiwiaW1wb3J0IHsgQk4gfSBmcm9tICcuLi9ibi9ibi5qcyc7XG5pbXBvcnQgeyBoZXhTdHJpcFByZWZpeCB9IGZyb20gJy4vc3RyaXBQcmVmaXguanMnO1xuLyoqXG4gKiBAbmFtZSBoZXhUb0JuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgQk4uanMgb2JqZWN0IGZyb20gYSBoZXggc3RyaW5nLlxuICogQGRlc2NyaXB0aW9uXG4gKiBgbnVsbGAgaW5wdXRzIHJldHVybnMgYSBgQk4oMClgIHJlc3VsdC4gSGV4IGlucHV0IHZhbHVlcyByZXR1cm4gdGhlIGFjdHVhbCB2YWx1ZSBjb252ZXJ0ZWQgdG8gYSBCTi4gQW55dGhpbmcgdGhhdCBpcyBub3QgYSBoZXggc3RyaW5nIChpbmNsdWRpbmcgdGhlIGAweGAgcHJlZml4KSB0aHJvd3MgYW4gZXJyb3IuXG4gKiBAcGFyYW0gX3ZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0gX29wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHdoaWxlIGNvbnZlcnRpbmdcbiAqIEBwYXJhbSBfb3B0aW9ucy5pc0xlIENvbnZlcnQgdXNpbmcgTGl0dGxlIEVuZGlhblxuICogQHBhcmFtIF9vcHRpb25zLmlzTmVnYXRpdmUgQ29udmVydCB1c2luZyB0d28ncyBjb21wbGVtZW50XG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGhleFRvQm4gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogaGV4VG9CbignMHgxMjM0ODAwMDFmJyk7IC8vID0+IEJOKDB4MTIzNDgwMDAxZilcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9Cbih2YWx1ZSwgeyBpc0xlID0gZmFsc2UsIGlzTmVnYXRpdmUgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnMHgnKSB7XG4gICAgICAgIHJldHVybiBuZXcgQk4oMCk7XG4gICAgfVxuICAgIGNvbnN0IHN0cmlwcGVkID0gaGV4U3RyaXBQcmVmaXgodmFsdWUpO1xuICAgIGNvbnN0IGJuID0gbmV3IEJOKHN0cmlwcGVkLCAxNiwgaXNMZSA/ICdsZScgOiAnYmUnKTtcbiAgICAvLyBmcm9tVHdvcyB0YWtlcyBhcyBwYXJhbWV0ZXIgdGhlIG51bWJlciBvZiBiaXRzLCB3aGljaCBpcyB0aGUgaGV4IGxlbmd0aFxuICAgIC8vIG11bHRpcGxpZWQgYnkgNCAoMiBieXRlcyBiZWluZyA4IGJpdHMpXG4gICAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICAgICAgPyBibi5mcm9tVHdvcyhzdHJpcHBlZC5sZW5ndGggKiA0KVxuICAgICAgICA6IGJuO1xufVxuIiwiY29uc3QgQ0hSID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuY29uc3QgVTggPSBuZXcgVWludDhBcnJheSgyNTYpO1xuY29uc3QgVTE2ID0gbmV3IFVpbnQ4QXJyYXkoMjU2ICogMjU2KTtcbmZvciAobGV0IGkgPSAwLCBjb3VudCA9IENIUi5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgVThbQ0hSW2ldLmNoYXJDb2RlQXQoMCkgfCAwXSA9IGkgfCAwO1xuICAgIGlmIChpID4gOSkge1xuICAgICAgICBVOFtDSFJbaV0udG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApIHwgMF0gPSBpIHwgMDtcbiAgICB9XG59XG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgY29uc3QgcyA9IGkgPDwgODtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDI1NjsgaisrKSB7XG4gICAgICAgIFUxNltzIHwgal0gPSAoVThbaV0gPDwgNCkgfCBVOFtqXTtcbiAgICB9XG59XG4vKipcbiAqIEBuYW1lIGhleFRvVThhXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgVWludDhBcnJheSBvYmplY3QgZnJvbSBhIGhleCBzdHJpbmcuXG4gKiBAZGVzY3JpcHRpb25cbiAqIGBudWxsYCBpbnB1dHMgcmV0dXJucyBhbiBlbXB0eSBgVWludDhBcnJheWAgcmVzdWx0LiBIZXggaW5wdXQgdmFsdWVzIHJldHVybiB0aGUgYWN0dWFsIGJ5dGVzIHZhbHVlIGNvbnZlcnRlZCB0byBhIFVpbnQ4QXJyYXkuIEFueXRoaW5nIHRoYXQgaXMgbm90IGEgaGV4IHN0cmluZyAoaW5jbHVkaW5nIHRoZSBgMHhgIHByZWZpeCkgdGhyb3dzIGFuIGVycm9yLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBoZXhUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBoZXhUb1U4YSgnMHg4MDAwMWYnKTsgLy8gVWludDhBcnJheShbMHg4MCwgMHgwMCwgMHgxZl0pXG4gKiBoZXhUb1U4YSgnMHg4MDAwMWYnLCAzMik7IC8vIFVpbnQ4QXJyYXkoWzB4MDAsIDB4ODAsIDB4MDAsIDB4MWZdKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb1U4YSh2YWx1ZSwgYml0TGVuZ3RoID0gLTEpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgpO1xuICAgIH1cbiAgICBsZXQgcyA9IHZhbHVlLnN0YXJ0c1dpdGgoJzB4JylcbiAgICAgICAgPyAyXG4gICAgICAgIDogMDtcbiAgICBjb25zdCBkZWNMZW5ndGggPSBNYXRoLmNlaWwoKHZhbHVlLmxlbmd0aCAtIHMpIC8gMik7XG4gICAgY29uc3QgZW5kTGVuZ3RoID0gTWF0aC5jZWlsKGJpdExlbmd0aCA9PT0gLTFcbiAgICAgICAgPyBkZWNMZW5ndGhcbiAgICAgICAgOiBiaXRMZW5ndGggLyA4KTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShlbmRMZW5ndGgpO1xuICAgIGNvbnN0IG9mZnNldCA9IGVuZExlbmd0aCA+IGRlY0xlbmd0aFxuICAgICAgICA/IGVuZExlbmd0aCAtIGRlY0xlbmd0aFxuICAgICAgICA6IDA7XG4gICAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA8IGVuZExlbmd0aDsgaSsrLCBzICs9IDIpIHtcbiAgICAgICAgLy8gVGhlIGJpZyBmYWN0b3IgaGVyZSBpcyBhY3R1YWxseSB0aGUgc3RyaW5nIGxvb2t1cHMuIElmIHdlIGRvXG4gICAgICAgIC8vIEhFWF9UT19VMTZbdmFsdWUuc3Vic3RyaW5nKCldIHdlIGdldCBhbiAxMHggc2xvd2Rvd24uIEluIHRoZVxuICAgICAgICAvLyBzYW1lIHZlaW4gdXNpbmcgY2hhckNvZGVBdCAoYXMgb3Bwb3NlZCB0byB2YWx1ZVtzXSBvciB2YWx1ZS5jaGFyQXQocykpIGlzXG4gICAgICAgIC8vIGFsc28gdGhlIGZhc3RlciBvcGVyYXRpb24gYnkgYXQgbGVhc3QgMnggd2l0aCB0aGUgY2hhcmFjdGVyIG1hcCBhYm92ZVxuICAgICAgICByZXN1bHRbaV0gPSBVMTZbKHZhbHVlLmNoYXJDb2RlQXQocykgPDwgOCkgfCB2YWx1ZS5jaGFyQ29kZUF0KHMgKyAxKV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyB1OGFUb1U4YSB9IGZyb20gJy4uL3U4YS90b1U4YS5qcyc7XG5pbXBvcnQgeyBpc0hleCB9IGZyb20gJy4vaGV4LmpzJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi9zdHJpbmcuanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gaXNBc2NpaVN0cihzdHIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBzdHIubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBiID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIGNoZWNrIGlzIGlubGluZWQgaGVyZSwgaXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIGEgY2FsbFxuICAgICAgICBpZiAoYiA8IDMyIHx8IGIgPiAxMjYpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGlzQXNjaWlCeXRlcyh1OGEpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSB1OGEubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBiID0gdThhW2ldIHwgMDtcbiAgICAgICAgLy8gY2hlY2sgaXMgaW5saW5lZCBoZXJlLCBpdCBpcyBmYXN0ZXIgdGhhbiBtYWtpbmcgYSBjYWxsXG4gICAgICAgIGlmIChiIDwgMzIgfHwgYiA+IDEyNikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBAbmFtZSBpc0FzY2lpXG4gKiBAc3VtbWFyeSBUZXN0cyBpZiB0aGUgaW5wdXQgaXMgcHJpbnRhYmxlIEFTQ0lJXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IHN0cmluZyBvciBVaW50OEFycmF5IGlzIHByaW50YWJsZSBBU0NJSSwgMzItMTI3ICsgZm9ybWF0dGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc2NpaSh2YWx1ZSkge1xuICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZSlcbiAgICAgICAgPyBpc0hleCh2YWx1ZSlcbiAgICAgICAgICAgID8gaXNBc2NpaUJ5dGVzKHU4YVRvVThhKHZhbHVlKSlcbiAgICAgICAgICAgIDogaXNBc2NpaVN0cih2YWx1ZSlcbiAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICAgPyBpc0FzY2lpQnl0ZXModmFsdWUpXG4gICAgICAgICAgICA6IGZhbHNlO1xufVxuIiwiLyoqXG4gKiBAbmFtZSBpc0JpZ0ludFxuICogQHN1bW1hcnkgVGVzdHMgZm9yIGEgYEJpZ0ludGAgb2JqZWN0IGluc3RhbmNlLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBpbnB1dCBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYEJpZ0ludGBcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNCaWdJbnQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coJ2lzQmlnSW50JywgaXNCaWdJbnQoMTIzXzQ1Nm4pKTsgLy8gPT4gdHJ1ZVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpZ0ludCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnO1xufVxuIiwiaW1wb3J0IHsgQk4gfSBmcm9tICcuLi9ibi9ibi5qcyc7XG4vKipcbiAqIEBuYW1lIGlzQm5cbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhIGBCTmAgb2JqZWN0IGluc3RhbmNlLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBpbnB1dCBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYEJOYCAoYm4uanMpLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgQk4gZnJvbSAnYm4uanMnO1xuICogaW1wb3J0IHsgaXNCbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZygnaXNCbicsIGlzQm4obmV3IEJOKDEpKSk7IC8vID0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCbih2YWx1ZSkge1xuICAgIHJldHVybiBCTi5pc0JOKHZhbHVlKTtcbn1cbiIsIi8qKlxuICogQG5hbWUgaXNCb29sZWFuXG4gKiBAc3VtbWFyeSBUZXN0cyBmb3IgYSBib29sZWFuIHZhbHVlLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIEphdmFTY3JpcHQgYm9vbGVhbi5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGlzQm9vbGVhbihmYWxzZSk7IC8vID0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xufVxuIiwiaW1wb3J0IHsgeGdsb2JhbCB9IGZyb20gJ0Bwb2xrYWRvdC94LWdsb2JhbCc7XG5pbXBvcnQgeyBoYXNCdWZmZXIgfSBmcm9tICcuLi9oYXMuanMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vZnVuY3Rpb24uanMnO1xuLyoqXG4gKiBAbmFtZSBpc0J1ZmZlclxuICogQHN1bW1hcnkgVGVzdHMgZm9yIGEgYEJ1ZmZlcmAgb2JqZWN0IGluc3RhbmNlLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBpbnB1dCBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYEJ1ZmZlcmAuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGlzQnVmZmVyIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnNvbGUubG9nKCdpc0J1ZmZlcicsIGlzQnVmZmVyKEJ1ZmZlci5mcm9tKFtdKSkpOyAvLyA9PiB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnVmZmVyKHZhbHVlKSB7XG4gICAgLy8gd2UgZG8gY2hlY2sgYSBmdW5jdGlvbiBmaXJzdCwgc2luY2UgaXQgaXMgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gaXNCdWZmZXIgaXRzZWxmXG4gICAgcmV0dXJuIGhhc0J1ZmZlciAmJiAhIXZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVhZERvdWJsZUxFKSAmJiB4Z2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSk7XG59XG4iLCJpbXBvcnQgeyBpc0NsYXNzIH0gZnJvbSAnLi9jbGFzcy5qcyc7XG4vKipcbiAqIEBuYW1lIGlzQ2hpbGRDbGFzc1xuICogQHN1bW1hcnkgVGVzdHMgaWYgdGhlIGNoaWxkIGV4dGVuZHMgdGhlIHBhcmVudCBDbGFzc1xuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBjaGlsZCBDbGFzcyBleHRlbmRzIHRoZSBwYXJlbnQgQ2xhc3NcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNDaGlsZENsYXNzIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnNvbGUubG9nKCdpc0NoaWxkQ2xhc3MnLCBpc0NoaWxkQ2xhc3MoQk4sIEJOKTsgLy8gPT4gdHJ1ZVxuICogY29uc29sZS5sb2coJ2lzQ2hpbGRDbGFzcycsIGlzQ2hpbGRDbGFzcyhCTiwgVWludDhBcnJheSk7IC8vID0+IGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hpbGRDbGFzcyhQYXJlbnQsIENoaWxkKSB7XG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzA5OTM0MzQvY2hlY2staWYtYS1jb25zdHJ1Y3Rvci1pbmhlcml0cy1hbm90aGVyLWluLWVzNi8zMDk5MzY2NFxuICAgIHJldHVybiBpc0NsYXNzKENoaWxkKSAmJiBpc0NsYXNzKFBhcmVudClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICA/IFBhcmVudCA9PT0gQ2hpbGQgfHwgUGFyZW50LmlzUHJvdG90eXBlT2YoQ2hpbGQpXG4gICAgICAgIDogZmFsc2U7XG59XG4iLCJpbXBvcnQgeyBpc09uRnVuY3Rpb24gfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuLyoqXG4gKiBAbmFtZSBpc0NsYXNzXG4gKiBUZXN0cyBpZiB0aGUgc3VwcGxpZWQgYXJndW1lbnQgaXMgYSBDbGFzc1xuICovXG5leHBvcnQgY29uc3QgaXNDbGFzcyA9IC8qI19fUFVSRV9fKi8gaXNPbkZ1bmN0aW9uKCdpc1Byb3RvdHlwZU9mJywgJ2hhc093blByb3BlcnR5Jyk7XG4iLCJpbXBvcnQgeyBpc09uT2JqZWN0IH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmNvbnN0IGNoZWNrQ29kZWMgPSAvKiNfX1BVUkVfXyovIGlzT25PYmplY3QoJ3RvSGV4JywgJ3RvSHVtYW4nLCAndG9VOGEnKTtcbmNvbnN0IGNoZWNrUmVnaXN0cnkgPSAvKiNfX1BVUkVfXyovIGlzT25PYmplY3QoJ2dldCcpO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29kZWModmFsdWUpIHtcbiAgICByZXR1cm4gY2hlY2tDb2RlYyh2YWx1ZSkgJiYgY2hlY2tSZWdpc3RyeSh2YWx1ZS5yZWdpc3RyeSk7XG59XG4iLCJpbXBvcnQgeyBpc09uT2JqZWN0IH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbi8qKlxuICogQG5hbWUgaXNDb21wYWN0XG4gKiBAc3VtbWFyeSBUZXN0cyBmb3IgU0NBTEUtQ29tcGFjdC1saWtlIG9iamVjdCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ29tcGFjdCA9IC8qI19fUFVSRV9fKi8gaXNPbk9iamVjdCgndG9CaWdJbnQnLCAndG9CbicsICd0b051bWJlcicsICd1bndyYXAnKTtcbiIsIi8qKlxuICogQG5hbWUgaXNGdW5jdGlvblxuICogQHN1bW1hcnkgVGVzdHMgZm9yIGEgYGZ1bmN0aW9uYC5cbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGlzRnVuY3Rpb24oKCkgPT4gZmFsc2UpOyAvLyA9PiB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vZnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuL29iamVjdC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gaXNPbiguLi5mbnMpIHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiAoaXNPYmplY3QodmFsdWUpIHx8IGlzRnVuY3Rpb24odmFsdWUpKSAmJlxuICAgICAgICBmbnMuZXZlcnkoKGYpID0+IGlzRnVuY3Rpb24odmFsdWVbZl0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09uRnVuY3Rpb24oLi4uZm5zKSB7XG4gICAgcmV0dXJuICh2YWx1ZSkgPT4gaXNGdW5jdGlvbih2YWx1ZSkgJiZcbiAgICAgICAgZm5zLmV2ZXJ5KChmKSA9PiBpc0Z1bmN0aW9uKHZhbHVlW2ZdKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbk9iamVjdCguLi5mbnMpIHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiBpc09iamVjdCh2YWx1ZSkgJiZcbiAgICAgICAgZm5zLmV2ZXJ5KChmKSA9PiBpc0Z1bmN0aW9uKHZhbHVlW2ZdKSk7XG59XG4iLCJleHBvcnQgY29uc3QgUkVHRVhfSEVYX1BSRUZJWEVEID0gL14weFtcXGRhLWZBLUZdKyQvO1xuZXhwb3J0IGNvbnN0IFJFR0VYX0hFWF9OT1BSRUZJWCA9IC9eW1xcZGEtZkEtRl0rJC87XG4vKipcbiAqIEBuYW1lIGlzSGV4XG4gKiBAc3VtbWFyeSBUZXN0cyBmb3IgYSBoZXggc3RyaW5nLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIGAweGAgcHJlZml4ZWQgaGV4IHN0cmluZy4gT3B0aW9uYWxseSAoYGJpdExlbmd0aGAgIT09IC0xKSBjaGVja3MgdG8gc2VlIGlmIHRoZSBiaXRMZW5ndGggaXMgY29ycmVjdC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNIZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogaXNIZXgoJzB4MTIzNCcpOyAvLyA9PiB0cnVlXG4gKiBpc0hleCgnMHgxMjM0JywgOCk7IC8vID0+IGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSGV4KHZhbHVlLCBiaXRMZW5ndGggPSAtMSwgaWdub3JlTGVuZ3RoKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICh2YWx1ZSA9PT0gJzB4JyB8fFxuICAgICAgICBSRUdFWF9IRVhfUFJFRklYRUQudGVzdCh2YWx1ZSkpKSAmJiAoYml0TGVuZ3RoID09PSAtMVxuICAgICAgICA/IChpZ25vcmVMZW5ndGggfHwgKHZhbHVlLmxlbmd0aCAlIDIgPT09IDApKVxuICAgICAgICA6ICh2YWx1ZS5sZW5ndGggPT09ICgyICsgTWF0aC5jZWlsKGJpdExlbmd0aCAvIDQpKSkpO1xufVxuIiwiLyoqXG4gKiBAbmFtZSBpc051bGxcbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhIGBudWxsYCB2YWx1ZXMuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGBudWxsYC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNOdWxsIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnNvbGUubG9nKCdpc051bGwnLCBpc051bGwobnVsbCkpOyAvLyA9PiB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cbiIsIi8qKlxuICogQG5hbWUgaXNOdW1iZXJcbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhIEphdmFTY3JpcHQgbnVtYmVyLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIHZhbGlkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coJ2lzTnVtYmVyJywgaXNOdW1iZXIoMTIzNCkpOyAvLyA9PiB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG4iLCIvKipcbiAqIEBuYW1lIGlzT2JqZWN0XG4gKiBAc3VtbWFyeSBUZXN0cyBmb3IgYW4gYG9iamVjdGAuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGlzT2JqZWN0KHt9KTsgLy8gPT4gdHJ1ZVxuICogaXNPYmplY3QoJ3NvbWV0aGluZycpOyAvLyA9PiBmYWxzZVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG59XG4iLCJpbXBvcnQgeyBpc09uT2JqZWN0IH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmV4cG9ydCBjb25zdCBpc1Byb21pc2UgPSAvKiNfX1BVUkVfXyovIGlzT25PYmplY3QoJ2NhdGNoJywgJ3RoZW4nKTtcbiIsIi8qKlxuICogQG5hbWUgaXNTdHJpbmdcbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhIHN0cmluZy5cbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYSBKYXZhU2NyaXB0IHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coJ2lzU3RyaW5nJywgaXNTdHJpbmcoJ3Rlc3QnKSk7IC8vID0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn1cbiIsImltcG9ydCB7IGlzT24gfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuZXhwb3J0IGNvbnN0IGlzVG9CaWdJbnQgPSAvKiNfX1BVUkVfXyovIGlzT24oJ3RvQmlnSW50Jyk7XG4iLCJpbXBvcnQgeyBpc09uIH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmV4cG9ydCBjb25zdCBpc1RvQm4gPSAvKiNfX1BVUkVfXyovIGlzT24oJ3RvQm4nKTtcbiIsIi8qKlxuICogQG5hbWUgaXNVOGFcbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhIGBVaW50OEFycmF5YCBvYmplY3QgaW5zdGFuY2UuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBgVWludDhBcnJheWAuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGlzVWludDhBcnJheSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZygnaXNVOGEnLCBpc1U4YShbXSkpOyAvLyA9PiBmYWxzZVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1U4YSh2YWx1ZSkge1xuICAgIC8vIGhlcmUgd2UgZGVmZXIgdGhlIGluc3RhbmNlb2YgY2hlY2sgd2hpY2ggaXMgYWN0dWFsbHkgc2xpZ2h0bHlcbiAgICAvLyBzbG93ZXIgdGhhbiBqdXN0IGNoZWNraW5nIHRoZSBjb25zdHJjdG9yIChkaXJlY3QgaW5zdGFuY2VzKVxuICAgIHJldHVybiAoKCh2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcikgPT09IFVpbnQ4QXJyYXkpIHx8XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSk7XG59XG4iLCIvKipcbiAqIEBuYW1lIGlzVW5kZWZpbmVkXG4gKiBAc3VtbWFyeSBUZXN0cyBmb3IgYSBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGB1bmRlZmluZWRgLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZygnaXNVbmRlZmluZWQnLCBpc1VuZGVmaW5lZCh2b2lkKDApKSk7IC8vID0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cbiIsImltcG9ydCB7IHU4YVRvVThhIH0gZnJvbSAnLi4vdThhL3RvVThhLmpzJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi9zdHJpbmcuanMnO1xuLyoqXG4gKiBAbmFtZSBpc1V0ZjhcbiAqIEBzdW1tYXJ5IFRlc3RzIGlmIHRoZSBpbnB1dCBpcyB2YWxpZCBVdGY4XG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IHN0cmluZyBvciBVaW50OEFycmF5IGlzIHZhbGlkIFV0ZjhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXRmOCh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdThhID0gdThhVG9VOGEodmFsdWUpO1xuICAgIGNvbnN0IGxlbiA9IHU4YS5sZW5ndGg7XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIGlmICh1OGFbaV0gPD0gMHg3RikgLyogMDAuLjdGICovIHtcbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1OGFbaV0gPj0gMHhDMiAmJiB1OGFbaV0gPD0gMHhERikgLyogQzIuLkRGIDgwLi5CRiAqLyB7XG4gICAgICAgICAgICBpZiAoaSArIDEgPCBsZW4pIC8qIEV4cGVjdCBhIDJuZCBieXRlICovIHtcbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAxXSA8IDB4ODAgfHwgdThhW2kgKyAxXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBiZXR3ZWVuIEMyIGFuZCBERiwgZXhwZWN0aW5nIGEgMm5kIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkZcIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIGJldHdlZW4gQzIgYW5kIERGLCBleHBlY3RpbmcgYSAybmQgYnl0ZS5cIjtcbiAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodThhW2ldID09PSAweEUwKSAvKiBFMCBBMC4uQkYgODAuLkJGICovIHtcbiAgICAgICAgICAgIGlmIChpICsgMiA8IGxlbikgLyogRXhwZWN0IGEgMm5kIGFuZCAzcmQgYnl0ZSAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMV0gPCAweEEwIHx8IHU4YVtpICsgMV0gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRTAsIGV4cGVjdGluZyBhIDJuZCBieXRlIGJldHdlZW4gQTAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAyXSA8IDB4ODAgfHwgdThhW2kgKyAyXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBFMCwgZXhwZWN0aW5nIGEgM25kIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBFMCwgZXhwZWN0aW5nIHR3byBmb2xsb3dpbmcgYnl0ZXMuXCI7XG4gICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHU4YVtpXSA+PSAweEUxICYmIHU4YVtpXSA8PSAweEVDKSAvKiBFMS4uRUMgODAuLkJGIDgwLi5CRiAqLyB7XG4gICAgICAgICAgICBpZiAoaSArIDIgPCBsZW4pIC8qIEV4cGVjdCBhIDJuZCBhbmQgM3JkIGJ5dGUgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDFdIDwgMHg4MCB8fCB1OGFbaSArIDFdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIGJldHdlZW4gRTEgYW5kIEVDLCBleHBlY3RpbmcgdGhlIDJuZCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAyXSA8IDB4ODAgfHwgdThhW2kgKyAyXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBiZXR3ZWVuIEUxIGFuZCBFQywgZXhwZWN0aW5nIHRoZSAzcmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIGJldHdlZW4gRTEgYW5kIEVDLCBleHBlY3RpbmcgdHdvIGZvbGxvd2luZyBieXRlcy5cIjtcbiAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodThhW2ldID09PSAweEVEKSAvKiBFRCA4MC4uOUYgODAuLkJGICovIHtcbiAgICAgICAgICAgIGlmIChpICsgMiA8IGxlbikgLyogRXhwZWN0IGEgMm5kIGFuZCAzcmQgYnl0ZSAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMV0gPCAweDgwIHx8IHU4YVtpICsgMV0gPiAweDlGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRUQsIGV4cGVjdGluZyAybmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCA5Ri5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMl0gPCAweDgwIHx8IHU4YVtpICsgMl0gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRUQsIGV4cGVjdGluZyAzcmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEVELCBleHBlY3RpbmcgdHdvIGZvbGxvd2luZyBieXRlcy5cIjtcbiAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodThhW2ldID49IDB4RUUgJiYgdThhW2ldIDw9IDB4RUYpIC8qIEVFLi5FRiA4MC4uQkYgODAuLkJGICovIHtcbiAgICAgICAgICAgIGlmIChpICsgMiA8IGxlbikgLyogRXhwZWN0IGEgMm5kIGFuZCAzcmQgYnl0ZSAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMV0gPCAweDgwIHx8IHU4YVtpICsgMV0gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgYmV0d2VlbiBFRSBhbmQgRUYsIGV4cGVjdGluZyAybmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMl0gPCAweDgwIHx8IHU4YVtpICsgMl0gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgYmV0d2VlbiBFRSBhbmQgRUYsIGV4cGVjdGluZyAzcmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIGJldHdlZW4gRUUgYW5kIEVGLCB0d28gZm9sbG93aW5nIGJ5dGVzLlwiO1xuICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1OGFbaV0gPT09IDB4RjApIC8qIEYwIDkwLi5CRiA4MC4uQkYgODAuLkJGICovIHtcbiAgICAgICAgICAgIGlmIChpICsgMyA8IGxlbikgLyogRXhwZWN0IGEgMm5kLCAzcmQgM3RoIGJ5dGUgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDFdIDwgMHg5MCB8fCB1OGFbaSArIDFdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEYwLCBleHBlY3RpbmcgMm5kIGJ5dGUgYmV0d2VlbiA5MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAyO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDJdIDwgMHg4MCB8fCB1OGFbaSArIDJdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEYwLCBleHBlY3RpbmcgM3JkIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDNdIDwgMHg4MCB8fCB1OGFbaSArIDNdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEYwLCBleHBlY3RpbmcgNHRoIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSA0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBGMCwgZXhwZWN0aW5nIHRocmVlIGZvbGxvd2luZyBieXRlcy5cIjtcbiAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodThhW2ldID49IDB4RjEgJiYgdThhW2ldIDw9IDB4RjMpIC8qIEYxLi5GMyA4MC4uQkYgODAuLkJGIDgwLi5CRiAqLyB7XG4gICAgICAgICAgICBpZiAoaSArIDMgPCBsZW4pIC8qIEV4cGVjdCBhIDJuZCwgM3JkIDN0aCBieXRlICovIHtcbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAxXSA8IDB4ODAgfHwgdThhW2kgKyAxXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBGMSwgRjIsIG9yIEYzLCBleHBlY3RpbmcgYSAybmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMl0gPCAweDgwIHx8IHU4YVtpICsgMl0gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRjEsIEYyLCBvciBGMywgZXhwZWN0aW5nIGEgM3JkIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDNdIDwgMHg4MCB8fCB1OGFbaSArIDNdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEYxLCBGMiwgb3IgRjMsIGV4cGVjdGluZyBhIDR0aCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gNDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRjEsIEYyLCBvciBGMywgZXhwZWN0aW5nIHRocmVlIGZvbGxvd2luZyBieXRlcy5cIjtcbiAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodThhW2ldID09PSAweEY0KSAvKiBGNCA4MC4uOEYgODAuLkJGIDgwLi5CRiAqLyB7XG4gICAgICAgICAgICBpZiAoaSArIDMgPCBsZW4pIC8qIEV4cGVjdCBhIDJuZCwgM3JkIDN0aCBieXRlICovIHtcbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAxXSA8IDB4ODAgfHwgdThhW2kgKyAxXSA+IDB4OEYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBGNCwgZXhwZWN0aW5nIDJuZCBieXRlIGJldHdlZW4gODAgYW5kIDhGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAyXSA8IDB4ODAgfHwgdThhW2kgKyAyXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBGNCwgZXhwZWN0aW5nIDNyZCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAzXSA8IDB4ODAgfHwgdThhW2kgKyAzXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBGNCwgZXhwZWN0aW5nIDR0aCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gNDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRjQsIGV4cGVjdGluZyB0aHJlZSBmb2xsb3dpbmcgYnl0ZXMuXCI7XG4gICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkV4cGVjdGluZyBieXRlcyBpbiB0aGUgZm9sbG93aW5nIHJhbmdlczogMDAuLjdGIEMyLi5GNC5cIjtcbiAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAxO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuIiwiLyoqXG4gKiBAbmFtZSBsYXp5TWV0aG9kXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZXMgYSBsYXp5LCBvbi1kZW1hbmQgZ2V0dGVyIGZvciB0aGUgc3BlY2lmaWMgdmFsdWUuIFVwb24gZ2V0IHRoZSB2YWx1ZSB3aWxsIGJlIGV2YWx1YXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhenlNZXRob2QocmVzdWx0LCBpdGVtLCBjcmVhdG9yLCBnZXROYW1lLCBpbmRleCA9IDApIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0TmFtZVxuICAgICAgICA/IGdldE5hbWUoaXRlbSwgaW5kZXgpXG4gICAgICAgIDogaXRlbS50b1N0cmluZygpO1xuICAgIGxldCB2YWx1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBuYW1lLCB7XG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIGZvciByZS1jb25maWd1cmF0aW9uIHdpdGggdGhlIGVtYmVkZGVkIGRlZmluZVByb3BlcnR5IGJlbG93XG4gICAgICAgIC8vIGFuZCBlbnN1cmVzIHRoYXQgb24gdGVzdGVkIGJyb3dzZXJzIGFuZCBOb2RlLCBpdCBfd2lsbF8gYmUgcmVkZWZpbmVkXG4gICAgICAgIC8vIGFuZCB0aHVzIHNob3J0LWNpcmN1aXRlZCBmb3IgZnV0dXJlIGFjY2Vzc1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIC8vIFVzZSBhIGZ1bmN0aW9uIGhlcmUsIHdlIGRvbid0IHdhbnQgdG8gY2FwdHVyZSB0aGUgb3V0ZXIgdGhpcywgaS5lLlxuICAgICAgICAvLyBkb24ndCB1c2UgYXJyb3cgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dCBzaW5jZSB3ZSBoYXZlIGEgdGhpcyBpbnNpZGVcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBfYWx3YXlzXyBiZSBmYWxzZSBhbmQgdW5uZWVkZWQsIHNpbmNlIHdlIG92ZXJyaWRlXG4gICAgICAgICAgICAvLyB3aXRoIGEgdmFsdWUgYmVsb3cgLi4uIGhvd2V2ZXIgd2UgZW5zdXJlIHdlIGFyZSBxdWlyZSB2aWdpbGFudCBhZ2FpbnN0XG4gICAgICAgICAgICAvLyBhbGwgZW52aXJvbm1lbnQgZmFpbHVyZXMsIHNvIHdlIGFyZSByYXRoZXIgYmUgc2FmZSB0aGFuIHNvcnJ5XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gY3JlYXRvcihpdGVtLCBpbmRleCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmUtZGVmaW5lIHRoZSBwcm9wZXJ0eSBhcyBhIHZhbHVlLCBuZXh0IHRpbWUgYXJvdW5kIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0dGVyIHdpbGwgb25seSByZXR1cm4gdGhlIGNvbXB1dGVkIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzLCBzaW5jZSB0aGlzIF9zaG91bGRfIG5vdCBoYXBwZW4gZHVlIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBcImNvbmZpZ3VyYWJsZVwiIHByb3BlcnR5IGFib3ZlLiBCdXQgaWYgaXQgZXZlciBkb2VzXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gaGVyZS1vbiB3ZSB3aWxsIGJlIHRoZSBjYWNoZWQgdmFsdWUgdGhlIG5leHQgdGltZVxuICAgICAgICAgICAgICAgICAgICAvLyBhcm91bmQgKHdpdGggYSB2ZXJ5IHNsaWdodCBkaXAgaW4gcGVyZm9ybWFuY2UpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEBuYW1lIGxhenlNZXRob2RzXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZXMgbGF6eSwgb24tZGVtYW5kIGdldHRlcnMgZm9yIHRoZSBzcGVjaWZpYyB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXp5TWV0aG9kcyhyZXN1bHQsIGl0ZW1zLCBjcmVhdG9yLCBnZXROYW1lKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gaXRlbXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgaXRlbXNbaV0sIGNyZWF0b3IsIGdldE5hbWUsIGkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgeGdsb2JhbCB9IGZyb20gJ0Bwb2xrYWRvdC94LWdsb2JhbCc7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi9mb3JtYXQvZm9ybWF0RGF0ZS5qcyc7XG5pbXBvcnQgeyBpc0JuIH0gZnJvbSAnLi9pcy9ibi5qcyc7XG5pbXBvcnQgeyBpc0J1ZmZlciB9IGZyb20gJy4vaXMvYnVmZmVyLmpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzL2Z1bmN0aW9uLmpzJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi9pcy9vYmplY3QuanMnO1xuaW1wb3J0IHsgaXNVOGEgfSBmcm9tICcuL2lzL3U4YS5qcyc7XG5pbXBvcnQgeyB1OGFUb0hleCB9IGZyb20gJy4vdThhL3RvSGV4LmpzJztcbmltcG9ydCB7IHU4YVRvVThhIH0gZnJvbSAnLi91OGEvdG9VOGEuanMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vbm9vcC5qcyc7XG5jb25zdCBsb2dUbyA9IHtcbiAgICBkZWJ1ZzogJ2xvZycsXG4gICAgZXJyb3I6ICdlcnJvcicsXG4gICAgbG9nOiAnbG9nJyxcbiAgICB3YXJuOiAnd2Fybidcbn07XG5mdW5jdGlvbiBmb3JtYXRPdGhlcih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAmJiBpc09iamVjdCh2YWx1ZSkgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICAgICAgICByZXN1bHRba10gPSBsb2dnZXJGb3JtYXQodik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2dlckZvcm1hdCh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGxvZ2dlckZvcm1hdCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQm4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1U4YSh2YWx1ZSkgfHwgaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh1OGFUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0T3RoZXIodmFsdWUpO1xufVxuZnVuY3Rpb24gZm9ybWF0V2l0aExlbmd0aChtYXhMZW5ndGgpIHtcbiAgICByZXR1cm4gKHYpID0+IHtcbiAgICAgICAgaWYgKG1heExlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByID0gYCR7dn1gO1xuICAgICAgICByZXR1cm4gci5sZW5ndGggPCBtYXhMZW5ndGhcbiAgICAgICAgICAgID8gdlxuICAgICAgICAgICAgOiBgJHtyLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpfSAuLi5gO1xuICAgIH07XG59XG5mdW5jdGlvbiBhcHBseShsb2csIHR5cGUsIHZhbHVlcywgbWF4U2l6ZSA9IC0xKSB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgaXNGdW5jdGlvbih2YWx1ZXNbMF0pKSB7XG4gICAgICAgIGNvbnN0IGZuUmVzdWx0ID0gdmFsdWVzWzBdKCk7XG4gICAgICAgIHJldHVybiBhcHBseShsb2csIHR5cGUsIEFycmF5LmlzQXJyYXkoZm5SZXN1bHQpID8gZm5SZXN1bHQgOiBbZm5SZXN1bHRdLCBtYXhTaXplKTtcbiAgICB9XG4gICAgY29uc29sZVtsb2dUb1tsb2ddXShmb3JtYXREYXRlKG5ldyBEYXRlKCkpLCB0eXBlLCAuLi52YWx1ZXNcbiAgICAgICAgLm1hcChsb2dnZXJGb3JtYXQpXG4gICAgICAgIC5tYXAoZm9ybWF0V2l0aExlbmd0aChtYXhTaXplKSkpO1xufVxuZnVuY3Rpb24gaXNEZWJ1Z09uKGUsIHR5cGUpIHtcbiAgICByZXR1cm4gISFlICYmIChlID09PSAnKicgfHxcbiAgICAgICAgdHlwZSA9PT0gZSB8fFxuICAgICAgICAoZS5lbmRzV2l0aCgnKicpICYmXG4gICAgICAgICAgICB0eXBlLnN0YXJ0c1dpdGgoZS5zbGljZSgwLCAtMSkpKSk7XG59XG5mdW5jdGlvbiBpc0RlYnVnT2ZmKGUsIHR5cGUpIHtcbiAgICByZXR1cm4gISFlICYmIChlLnN0YXJ0c1dpdGgoJy0nKSAmJlxuICAgICAgICAodHlwZSA9PT0gZS5zbGljZSgxKSB8fFxuICAgICAgICAgICAgKGUuZW5kc1dpdGgoJyonKSAmJlxuICAgICAgICAgICAgICAgIHR5cGUuc3RhcnRzV2l0aChlLnNsaWNlKDEsIC0xKSkpKSk7XG59XG5mdW5jdGlvbiBnZXREZWJ1Z0ZsYWcoZW52LCB0eXBlKSB7XG4gICAgbGV0IGZsYWcgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGUgb2YgZW52KSB7XG4gICAgICAgIGlmIChpc0RlYnVnT24oZSwgdHlwZSkpIHtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRGVidWdPZmYoZSwgdHlwZSkpIHtcbiAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxhZztcbn1cbmZ1bmN0aW9uIHBhcnNlRW52KHR5cGUpIHtcbiAgICBjb25zdCBtYXhTaXplID0gcGFyc2VJbnQoeGdsb2JhbC5wcm9jZXNzPy5lbnY/LlsnREVCVUdfTUFYJ10gfHwgJy0xJywgMTApO1xuICAgIHJldHVybiBbXG4gICAgICAgIGdldERlYnVnRmxhZygoeGdsb2JhbC5wcm9jZXNzPy5lbnY/LlsnREVCVUcnXSB8fCAnJykudG9Mb3dlckNhc2UoKS5zcGxpdCgnLCcpLCB0eXBlKSxcbiAgICAgICAgaXNOYU4obWF4U2l6ZSlcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogbWF4U2l6ZVxuICAgIF07XG59XG4vKipcbiAqIEBuYW1lIExvZ2dlclxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGNvbnNpc3RlbnQgbG9nIGludGVyZmFjZSBmb3IgbWVzc2FnZXNcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBhIGBMb2dnZXJgIHRoYXQgaGFzIGAubG9nYCwgYC5lcnJvcmAsIGAud2FybmAgYW5kIGAuZGVidWdgIChjb250cm9sbGVkIHdpdGggZW52aXJvbm1lbnQgYERFQlVHPXR5cGVBLHR5cGVCYCkgbWV0aG9kcy4gTG9nZ2luZyBpcyBkb25lIHdpdGggYSBjb25zaXN0ZW50IHByZWZpeCAodHlwZSBvZiBsb2dnZXIsIGRhdGUpIGZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgbWVzc2FnZSB1c2luZyB0aGUgdW5kZXJseWluZyBjb25zb2xlLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc3QgbCA9IGxvZ2dlcigndGVzdCcpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dnZXIob3JpZ2luKSB7XG4gICAgY29uc3QgdHlwZSA9IGAke29yaWdpbi50b1VwcGVyQ2FzZSgpfTpgLnBhZFN0YXJ0KDE2KTtcbiAgICBjb25zdCBbaXNEZWJ1ZywgbWF4U2l6ZV0gPSBwYXJzZUVudihvcmlnaW4udG9Mb3dlckNhc2UoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVidWc6IGlzRGVidWdcbiAgICAgICAgICAgID8gKC4uLnZhbHVlcykgPT4gYXBwbHkoJ2RlYnVnJywgdHlwZSwgdmFsdWVzLCBtYXhTaXplKVxuICAgICAgICAgICAgOiBub29wLFxuICAgICAgICBlcnJvcjogKC4uLnZhbHVlcykgPT4gYXBwbHkoJ2Vycm9yJywgdHlwZSwgdmFsdWVzKSxcbiAgICAgICAgbG9nOiAoLi4udmFsdWVzKSA9PiBhcHBseSgnbG9nJywgdHlwZSwgdmFsdWVzKSxcbiAgICAgICAgbm9vcCxcbiAgICAgICAgd2FybjogKC4uLnZhbHVlcykgPT4gYXBwbHkoJ3dhcm4nLCB0eXBlLCB2YWx1ZXMpXG4gICAgfTtcbn1cbiIsImltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcbmZ1bmN0aW9uIGRlZmF1bHRHZXRJZCgpIHtcbiAgICByZXR1cm4gJ25vbmUnO1xufVxuLyoqXG4gKiBAbmFtZSBtZW1vaXplXG4gKiBAZGVzY3JpcHRpb24gTWVtb21pemUgdGhlIGZ1bmN0aW9uIHdpdGggYSBzcGVjaWZpYyBpbnN0YW5jZUlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1vaXplKGZuLCB7IGdldEluc3RhbmNlSWQgPSBkZWZhdWx0R2V0SWQgfSA9IHt9KSB7XG4gICAgY29uc3QgY2FjaGUgPSB7fTtcbiAgICBjb25zdCBtZW1vaXplZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtcyA9IHN0cmluZ2lmeShhcmdzKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IGdldEluc3RhbmNlSWQoKTtcbiAgICAgICAgaWYgKCFjYWNoZVtpbnN0YW5jZUlkXSkge1xuICAgICAgICAgICAgY2FjaGVbaW5zdGFuY2VJZF0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FjaGVbaW5zdGFuY2VJZF1bc3RyaW5nUGFyYW1zXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjYWNoZVtpbnN0YW5jZUlkXVtzdHJpbmdQYXJhbXNdID0gZm4oLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlW2luc3RhbmNlSWRdW3N0cmluZ1BhcmFtc107XG4gICAgfTtcbiAgICBtZW1vaXplZC51bm1lbW9pemUgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCBzdHJpbmdQYXJhbXMgPSBzdHJpbmdpZnkoYXJncyk7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlSWQgPSBnZXRJbnN0YW5jZUlkKCk7XG4gICAgICAgIGlmIChjYWNoZVtpbnN0YW5jZUlkXT8uW3N0cmluZ1BhcmFtc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVsZXRlIGNhY2hlW2luc3RhbmNlSWRdW3N0cmluZ1BhcmFtc107XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBtZW1vaXplZDtcbn1cbiIsIi8qKlxuICogQG5hbWUgbmV4dFRpY2tcbiAqIEBkZXNjcmlwdGlvbiBEZWZlciB0aGUgb3BlcmF0aW9uIHRvIHRoZSBxdWV1ZSBmb3IgZXZhbHVhdGlvbiBvbiB0aGUgbmV4dCB0aWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0VGljayhvbkV4ZWMsIG9uRXJyb3IpIHtcbiAgICAvLyBXaGlsZSBQcm9taXNlLnJlc29sdmUoKS50aGVuKC4uLikgd291bGQgZGVmZXIgdG8gdGhlIG5leHRUaWNrLCB0aGlzXG4gICAgLy8gYWN0dWFsbHkgZG9lcyBub3QgcGxheSBhcyBuaWNlbHkgaW4gYnJvd3NlcnMgbGlrZSB0aGUgc2V0VGltZW91dCguLi4pXG4gICAgLy8gYXBwcm9hY2guIFNvIHRoZSBzYWZlciwgdGhvdWdoIGxlc3Mgb3B0aW1hbCBhcHByb2FjaCBpcyB0aGUgb25lIHRha2VuIGhlcmVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgICAgLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgb25FeGVjKCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sIDApO1xufVxuIiwiLyoqXG4gKiBBIHNoYXJhYmxlIGlkZW50aXR5IGZ1bmN0aW9uLiBSZXR1cm5zIHRoZSBpbnB1dCBhcy1pcyB3aXRoIG5vIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogQSBzaGFyYWJsZSBub29wIGZ1bmN0aW9uLiBBcyB0aGUgbmFtZSBzdWdnZXN0cywgZG9lcyBub3RoaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICAgIC8vIG5vb3Bcbn1cbiIsIi8qKlxuICogQG5hbWUgb2JqZWN0Q2xlYXJcbiAqIEBzdW1tYXJ5IFJlbW92ZXMgYWxsIHRoZSBrZXlzIGZyb20gdGhlIGlucHV0IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0Q2xlYXIodmFsdWUpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGtleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBkZWxldGUgdmFsdWVba2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbiIsIi8qKlxuICogQG5hbWUgb2JqZWN0UHJvcGVydHlcbiAqIEBzdW1tYXJ5IEFzc2lnbiBhIGdldCBwcm9wZXJ0eSBvbiB0aGUgaW5wdXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RQcm9wZXJ0eSh0aGF0LCBrZXksIGdldHRlciwgZ2V0TmFtZSwgaW5kZXggPSAwKSB7XG4gICAgY29uc3QgbmFtZSA9IGdldE5hbWVcbiAgICAgICAgPyBnZXROYW1lKGtleSwgaW5kZXgpXG4gICAgICAgIDoga2V5O1xuICAgIC8vIFRoZXJlIGFyZSAzIGFwcHJvYWNoZXMgaGVyZSAtXG4gICAgLy8gIC0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoYXQsIGtleSkgLSB0aGlzIG9ubHkgY2hlY2tzIHRoZSBjdXJyZW50IGNsYXNzLCBpLmVcbiAgICAvLyAgICB3aWxsIHJldHVpcm4gZmFsc2UgaWYgdGhlIHByb3BlcnR5IGlzIHNldCBpbiB0aGUgcGFyZW50IGNsYXNzXG4gICAgLy8gIC0gaXNVbmRlZmluZWQoLi4uKSAtIHRoaXMgbWF5IHlpZWxkIGEgZmFsc2UgcG9zaXRpdmUgd2hlbiB0aGUgcHJvcGVydHkgaXMgdGhlcmUsIGJ1dCBub3Qgc2V0LlxuICAgIC8vICAgIEFkZGl0aW9uYWxseSwgb24gcHJlLWRlZmluZWQgZ2V0dGVycyBpdCBtYXkgbWFrZSBhIGNhbGxcbiAgICAvLyAgLSBrZXkgaW4gdGhhdCAtIERvZXMgbm90IG5lZWQgdG8gYmUgY29tYmluZWQgd2l0aCBlaXRoZXIgb2YgdGhlIGFib3ZlIGFuZCBjaGVja3MgdGhlIGZ1bGwgY2hhaW5cbiAgICBpZiAoIShuYW1lIGluIHRoYXQpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBuYW1lLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgLy8gVW5saWtlIGluIGxhenksIHdlIGFsd2F5cyBjYWxsIGludG8gdGhlIHVwcGVyIGZ1bmN0aW9uLCBpLmUuIHRoaXMgbWV0aG9kXG4gICAgICAgICAgICAvLyBkb2VzIG5vdCBjYWNoZSBvbGQgdmFsdWVzIChpdCBpcyBleHBlY3RlZCB0byBiZSB1c2VkIGZvciBkeW5hbWljIHZhbHVlcylcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIoa2V5LCBpbmRleCwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgb2JqZWN0UHJvcGVydGllc1xuICogQHN1bW1hcnkgQXNzaWduIGdldCBwcm9wZXJ0aWVzIG9uIHRoZSBpbnB1dCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdFByb3BlcnRpZXModGhhdCwga2V5cywgZ2V0dGVyLCBnZXROYW1lKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0ga2V5cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIG9iamVjdFByb3BlcnR5KHRoYXQsIGtleXNbaV0sIGdldHRlciwgZ2V0TmFtZSwgaSk7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBAbmFtZSBvYmplY3RTcHJlYWRcbiAqIEBzdW1tYXJ5IENvbmNhdHMgYWxsIHNvdXJjZXMgaW50byB0aGUgZGVzdGluYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdFNwcmVhZChkZXN0LCAuLi5zb3VyY2VzKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gc291cmNlcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IHNvdXJjZXNbaV07XG4gICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3JjLmVudHJpZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzcmMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3Rba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVzdCwgc3JjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn1cbiIsImV4cG9ydCBjb25zdCBDQ19UT19VUCA9IG5ldyBBcnJheSgyNTYpO1xuZXhwb3J0IGNvbnN0IENDX1RPX0xPID0gbmV3IEFycmF5KDI1Nik7XG5mb3IgKGxldCBpID0gMCwgY291bnQgPSBDQ19UT19VUC5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgQ0NfVE9fTE9baV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLnRvTG93ZXJDYXNlKCk7XG4gICAgQ0NfVE9fVVBbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLnRvVXBwZXJDYXNlKCk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBmb3JtYXRBbGxDYXBzKHcpIHtcbiAgICByZXR1cm4gdy5zbGljZSgwLCB3Lmxlbmd0aCAtIDEpLnRvTG93ZXJDYXNlKCkgKyBDQ19UT19VUFt3LmNoYXJDb2RlQXQody5sZW5ndGggLSAxKV07XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yOTcwNjY3XG4gKlxuICogVGhpcyBpcyBub3QgYXMgb3B0aW1hbCBhcyB0aGUgb3JpZ2luYWwgU08gYW5zd2VyICh3ZSBzcGxpdCBpbnRvIHBlci13b3JkKSxcbiAqIGhvd2V2ZXIgaXQgZG9lcyBwYXNzIHRoZSB0ZXN0cyAod2hpY2ggdGhlIFNPIHZlcnNpb24gZG9lc24ndCkgYW5kIGlzIHN0aWxsXG4gKiBhIG1ham9yIGltcHJvdmVtZW50IG92ZXIgdGhlIG9yaWdpbmFsIGNhbWVsY2FzZSBucG0gcGFja2FnZSAtXG4gKlxuICogICBjYW1lbGNhc2U6IDIwLjg4IM68cy9vcFxuICogICAgICAgIHRoaXM6ICAxLjAwIM68cy9vcFxuICpcbiAqIENhdmVhdCBvZiB0aGlzOiBvbmx5IEFzY2lpLCBidXQgYWNjZXB0YWJsZSBmb3IgdGhlIGludGVuZGVkIHVzZWNhc2VcbiAqL1xuZnVuY3Rpb24gY29udmVydGVyKGZvcm1hdCkge1xuICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZVxuICAgICAgICAgICAgLy8gcmVwbGFjZSBhbGwgc2VwYXJhdG9ycyAoaW5jbHVkaW5nIGNvbnNlcXV0aXZlKSB3aXRoIHNwYWNlc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1stXy4sIF0rL2csICcgJylcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXNcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC8vIHNwbGl0IGludG8gd29yZHNcbiAgICAgICAgICAgIC5zcGxpdCgnICcpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHBhcnRzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgIC8vIGFwcGx5IHRoZSBmb3JtYXR0aW5nXG4gICAgICAgICAgICByZXN1bHQgKz0gZm9ybWF0KC9eW1xcZEEtWl0rJC8udGVzdCh3KVxuICAgICAgICAgICAgICAgIC8vIGFsbCBmdWxsIHVwcGVyY2FzZSArIGxldHRlcnMgYXJlIGNoYW5nZWQgdG8gbG93ZXJjYXNlXG4gICAgICAgICAgICAgICAgPyB3LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAvLyBhbGwgY29uc2VjdXRpdmUgY2FwaXRhbHMgKyBsZXR0ZXJzIGFyZSBjaGFuZ2VkIHRvIGxvd2VyY2FzZVxuICAgICAgICAgICAgICAgIC8vIGUuZy4gVVVJRDY0IC0+IHV1aWQ2NCwgd2hpbGUgcHJlc2VydmluZyBzcGxpdHMsIGVnLiBORlRPcmRlciAtPiBuZnRPcmRlclxuICAgICAgICAgICAgICAgIDogdy5yZXBsYWNlKC9eW1xcZEEtWl17Mix9W15hLXpdLywgZm9ybWF0QWxsQ2FwcyksIGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbn1cbi8qKlxuICogQG5hbWUgc3RyaW5nQ2FtZWxDYXNlXG4gKiBAc3VtbWFyeSBDb252ZXJ0IGEgZGFzaC9kb3QvdW5kZXJzY29yZS9zcGFjZSBzZXBhcmF0ZWQgQXNjaWkgc3RyaW5nL1N0cmluZyB0byBjYW1lbENhc2VcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ0NhbWVsQ2FzZSA9IC8qI19fUFVSRV9fKi8gY29udmVydGVyKCh3LCBpKSA9PiBcbihpID8gQ0NfVE9fVVBbdy5jaGFyQ29kZUF0KDApXSA6IENDX1RPX0xPW3cuY2hhckNvZGVBdCgwKV0pICsgdy5zbGljZSgxKSk7XG4vKipcbiAqIEBuYW1lIHN0cmluZ1Bhc2NhbENhc2VcbiAqIEBzdW1tYXJ5IENvbnZlcnQgYSBkYXNoL2RvdC91bmRlcnNjb3JlL3NwYWNlIHNlcGFyYXRlZCBBc2NpaSBzdHJpbmcvU3RyaW5nIHRvIFBhc2NhbENhc2VcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ1Bhc2NhbENhc2UgPSAvKiNfX1BVUkVfXyovIGNvbnZlcnRlcigodykgPT4gXG5DQ19UT19VUFt3LmNoYXJDb2RlQXQoMCldICsgdy5zbGljZSgxKSk7XG4iLCJpbXBvcnQgeyBDQ19UT19MTywgQ0NfVE9fVVAgfSBmcm9tICcuL2NhbWVsQ2FzZS5qcyc7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBjb252ZXJ0ZXIobWFwKSB7XG4gICAgcmV0dXJuICh2YWx1ZSkgPT4gdmFsdWVcbiAgICAgICAgPyBtYXBbdmFsdWUuY2hhckNvZGVBdCgwKV0gKyB2YWx1ZS5zbGljZSgxKVxuICAgICAgICA6ICcnO1xufVxuLyoqXG4gKiBAbmFtZSBzdHJpbmdMb3dlckZpcnN0XG4gKiBAc3VtbWFyeSBMb3dlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBhIHN0cmluZ1xuICogQGRlc2NyaXB0aW9uXG4gKiBMb3dlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBhIHN0cmluZ1xuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBzdHJpbmdMb3dlckZpcnN0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIHN0cmluZ0xvd2VyRmlyc3QoJ0FCQycpOyAvLyA9PiAnYUJDJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpbmdMb3dlckZpcnN0ID0gLyojX19QVVJFX18qLyBjb252ZXJ0ZXIoQ0NfVE9fTE8pO1xuLyoqXG4gKiBAbmFtZSBzdHJpbmdVcHBlckZpcnN0XG4gKiBAc3VtbWFyeSBVcHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBhIHN0cmluZ1xuICogQGRlc2NyaXB0aW9uXG4gKiBMb3dlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBhIHN0cmluZ1xuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBzdHJpbmdVcHBlckZpcnN0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIHN0cmluZ1VwcGVyRmlyc3QoJ2FiYycpOyAvLyA9PiAnQWJjJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBzdHJpbmdVcHBlckZpcnN0ID0gLyojX19QVVJFX18qLyBjb252ZXJ0ZXIoQ0NfVE9fVVApO1xuIiwiaW1wb3J0IHsgdThhVG9IZXggfSBmcm9tICcuLi91OGEvdG9IZXguanMnO1xuaW1wb3J0IHsgc3RyaW5nVG9VOGEgfSBmcm9tICcuL3RvVThhLmpzJztcbi8qKlxuICogQG5hbWUgc3RyaW5nVG9IZXhcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBoZXggc3RyaW5nIGZyb20gYSB1dGYtOCBzdHJpbmdcbiAqIEBkZXNjcmlwdGlvblxuICogU3RyaW5nIGlucHV0IHZhbHVlcyByZXR1cm4gdGhlIGFjdHVhbCBlbmNvZGVkIGhleCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgc3RyaW5nVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogc3RyaW5nVG9VOGEoJ2hlbGxvJyk7IC8vIDB4Njg2NTZjNmM2ZlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0hleCh2YWx1ZSkge1xuICAgIHJldHVybiB1OGFUb0hleChzdHJpbmdUb1U4YSh2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHsgVGV4dEVuY29kZXIgfSBmcm9tICdAcG9sa2Fkb3QveC10ZXh0ZW5jb2Rlcic7XG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4vKipcbiAqIEBuYW1lIHN0cmluZ1RvVThhXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgVWludDhBcnJheSBvYmplY3QgZnJvbSBhIHV0Zi04IHN0cmluZy5cbiAqIEBkZXNjcmlwdGlvblxuICogU3RyaW5nIGlucHV0IHZhbHVlcyByZXR1cm4gdGhlIGFjdHVhbCBlbmNvZGVkIGBVSW50OEFycmF5YC4gYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcyByZXR1cm5zIGFuIGVtcHR5IGVuY29kZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IHN0cmluZ1RvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIHN0cmluZ1RvVThhKCdoZWxsbycpOyAvLyBbMHg2OCwgMHg2NSwgMHg2YywgMHg2YywgMHg2Zl1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9VOGEodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyBlbmNvZGVyLmVuY29kZSh2YWx1ZS50b1N0cmluZygpKVxuICAgICAgICA6IG5ldyBVaW50OEFycmF5KCk7XG59XG4iLCJpbXBvcnQgeyBpc0JpZ0ludCB9IGZyb20gJy4vaXMvYmlnSW50LmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIHJlcGxhY2VyKF8sIHYpIHtcbiAgICByZXR1cm4gaXNCaWdJbnQodilcbiAgICAgICAgPyB2LnRvU3RyaW5nKClcbiAgICAgICAgOiB2O1xufVxuLyoqXG4gKiBAbmFtZSBzdHJpbmdpZnlcbiAqIEBzdW1tYXJ5IFBlcmZvcm1zIGEgSlNPTi5zdHJpbmdpZnksIHdpdGggQmlnSW50IGhhbmRsaW5nXG4gKiBAZGVzY3JpcHRpb24gQSB3cmFwcGVyIGZvciBKU09OLnN0cmluZ2lmeSB0aGF0IGhhbmRsZXMgQmlnSW50IHZhbHVlcyB0cmFuc3BhcmVudGx5LCBjb252ZXJ0aW5nIHRoZW0gdG8gc3RyaW5nLiBObyBkaWZmZXJlbmNlcyBmcm9tIHRoZSBuYXRpdmUgSlNPTi5zdHJpbmdpZnkgZnVuY3Rpb24gb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlLCBzcGFjZSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKTtcbn1cbiIsImltcG9ydCB7IHU4YVRvVThhIH0gZnJvbSAnLi90b1U4YS5qcyc7XG4vKipcbiAqIEBuYW1lIHU4YUNvbmNhdFxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGNvbmNhdGVuYXRlZCBVaW50OEFycmF5IGZyb20gdGhlIGlucHV0cy5cbiAqIEBkZXNjcmlwdGlvblxuICogQ29uY2F0ZW5hdGVzIHRoZSBpbnB1dCBhcnJheXMgaW50byBhIHNpbmdsZSBgVUludDhBcnJheWAuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IHsgdThhQ29uY2F0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIHU4YUNvbmNhdChcbiAqICAgbmV3IFVpbnQ4QXJyYXkoWzEsIDIsIDNdKSxcbiAqICAgbmV3IFVpbnQ4QXJyYXkoWzQsIDUsIDZdKVxuICogKTsgLy8gWzEsIDIsIDMsIDQsIDUsIDZdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHU4YUNvbmNhdCguLi5saXN0KSB7XG4gICAgY29uc3QgY291bnQgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCB1OGFzID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdThhc1tpXSA9IHU4YVRvVThhKGxpc3RbaV0pO1xuICAgICAgICBsZW5ndGggKz0gdThhc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB1OGFDb25jYXRTdHJpY3QodThhcywgbGVuZ3RoKTtcbn1cbi8qKlxuICogQG5hbWUgdThhQ29uY2F0U3RyaWN0XG4gKiBAZGVzY3JpcHRpb24gQSBzdHJpY3QgdmVyc2lvbiBvZiBbW3U4YUNvbmNhdF1dLCBhY2NlcHRpbmcgb25seSBVaW50OEFycmF5IGlucHV0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdThhQ29uY2F0U3RyaWN0KHU4YXMsIGxlbmd0aCA9IDApIHtcbiAgICBjb25zdCBjb3VudCA9IHU4YXMubGVuZ3RoO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgbGVuZ3RoICs9IHU4YXNbaV0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5zZXQodThhc1tpXSwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IHU4YXNbaV0ubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgdThhVG9VOGEgfSBmcm9tICcuL3RvVThhLmpzJztcbi8qKlxuICogQG5hbWUgdThhRXFcbiAqIEBzdW1tYXJ5IENvbXBhcmVzIHR3byBVaW50OEFycmF5cyBmb3IgZXF1YWxpdHkuXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZvciBgVUludDhBcnJheWAgKG9yIGhleCBzdHJpbmcpIGlucHV0IHZhbHVlcyB0cnVlIGlmIHRoZXJlIGlzIGEgbWF0Y2guXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IHU4YUVxIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIHU4YUVxKG5ldyBVaW50OEFycmF5KFsweDY4LCAweDY1XSksIG5ldyBVaW50OEFycmF5KFsweDY4LCAweDY1XSkpOyAvLyB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHU4YUVxKGEsIGIpIHtcbiAgICBjb25zdCB1OGFhID0gdThhVG9VOGEoYSk7XG4gICAgY29uc3QgdThhYiA9IHU4YVRvVThhKGIpO1xuICAgIGlmICh1OGFhLmxlbmd0aCA9PT0gdThhYi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZHZBID0gbmV3IERhdGFWaWV3KHU4YWEuYnVmZmVyLCB1OGFhLmJ5dGVPZmZzZXQpO1xuICAgICAgICBjb25zdCBkdkIgPSBuZXcgRGF0YVZpZXcodThhYi5idWZmZXIsIHU4YWIuYnl0ZU9mZnNldCk7XG4gICAgICAgIGNvbnN0IG1vZCA9ICh1OGFhLmxlbmd0aCAlIDQpIHwgMDtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKHU4YWEubGVuZ3RoIC0gbW9kKSB8IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgIGlmIChkdkEuZ2V0VWludDMyKGkpICE9PSBkdkIuZ2V0VWludDMyKGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBsZW5ndGgsIGNvdW50ID0gdThhYS5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodThhYVtpXSAhPT0gdThhYltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0IHsgQk4gfSBmcm9tICcuLi9ibi9ibi5qcyc7XG4vKipcbiAqIEBuYW1lIHU4YVRvQm5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBCTiBmcm9tIGEgVWludDhBcnJheSBvYmplY3QuXG4gKiBAZGVzY3JpcHRpb25cbiAqIGBVSW50OEFycmF5YCBpbnB1dCB2YWx1ZXMgcmV0dXJuIHRoZSBhY3R1YWwgQk4uIGBudWxsYCBvciBgdW5kZWZpbmVkYCB2YWx1ZXMgcmV0dXJucyBhbiBgMHgwYCB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydFxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHdoaWxlIGNvbnZlcnRpbmdcbiAqIEBwYXJhbSBvcHRpb25zLmlzTGUgQ29udmVydCB1c2luZyBMaXR0bGUgRW5kaWFuIChkZWZhdWx0KVxuICogQHBhcmFtIG9wdGlvbnMuaXNOZWdhdGl2ZSBDb252ZXJ0IHVzaW5nIHR3bydzIGNvbXBsZW1lbnRcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgdThhVG9CbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiB1OGFUb0hleChuZXcgVWludDhBcnJheShbMHg2OCwgMHg2NSwgMHg2YywgMHg2YywgMHhmXSkpOyAvLyAweDY4NjU2YzBmXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHU4YVRvQm4odmFsdWUsIHsgaXNMZSA9IHRydWUsIGlzTmVnYXRpdmUgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAvLyBzbGljZSArIHJldmVyc2UgaXMgZXhwZW5zaXZlLCBob3dldmVyIFNDQUxFIGlzIExFIGJ5IGRlZmF1bHQgc28gdGhpcyBpcyB0aGUgcGF0aFxuICAgIC8vIHdlIGFyZSBtb3N0IGludGVyZXN0ZWQgaW4gKHRoZSBCRSBpcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2YgYmVpbmcgY29tcHJlaGVuc2l2ZSlcbiAgICBpZiAoIWlzTGUpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgICB9XG4gICAgY29uc3QgY291bnQgPSB2YWx1ZS5sZW5ndGg7XG4gICAgLy8gc2hvcnRjdXQgZm9yIDw9IHU0OCB2YWx1ZXMgLSBpbiB0aGlzIGNhc2UgdGhlIG1hbnVhbCBjb252ZXJzaW9uXG4gICAgLy8gaGVyZSBzZWVtcyB0byBiZSBtb3JlIGVmZmljaWVudCB0aGFuIHBhc3NpbmcgdGhlIGZ1bGwgYXJyYXlcbiAgICBpZiAoaXNOZWdhdGl2ZSAmJiBjb3VudCAmJiAodmFsdWVbY291bnQgLSAxXSAmIDB4ODApKSB7XG4gICAgICAgIC8vIE1vc3QgY29tbW9uIGNhc2UgaXs4LCAxNiwgMzJ9IGRlZmF1bHQgTEUgU0NBTEUtZW5jb2RlZFxuICAgICAgICAvLyBGb3IgPD0gMzIsIHdlIGFsc28gb3B0aW1pemUgdGhlIHhvciB0byBhIHNpbmdsZSBvcFxuICAgICAgICBzd2l0Y2ggKGNvdW50KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCTigwKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJOKCgodmFsdWVbMF0gXiAyNTUpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCTigoKCh2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSkgXiA2NTUzNSkgKiAtMSkgLSAxKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJOKCgoKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSkgXiAxNjc3NzIxNSkgKiAtMSkgLSAxKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIDNyZCBieXRlLCB3ZSBkb24ndCA8PCAyNCAtIHNpbmNlIEpTIGNvbnZlcnRzIGFsbCBiaXR3aXNlIG9wZXJhdG9ycyB0b1xuICAgICAgICAgICAgICAgIC8vIDMyLWJpdCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHRvcC1tb3N0IGJpdCBpcyBzZXQgdGhpcyB5aWVsZHMgYSBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQk4oKCgodmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKHZhbHVlWzNdICogMTY3NzcyMTYpKSBeIDQyOTQ5NjcyOTUpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCTigoKCgodmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKHZhbHVlWzNdICogMTY3NzcyMTYpKSBeIDQyOTQ5NjcyOTUpICsgKCh2YWx1ZVs0XSBeIDB4ZmYpICogNDI5NDk2NzI5NikpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCTigoKCgodmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKHZhbHVlWzNdICogMTY3NzcyMTYpKSBeIDQyOTQ5NjcyOTUpICsgKCgodmFsdWVbNF0gKyAodmFsdWVbNV0gPDwgOCkpIF4gNjU1MzUpICogNDI5NDk2NzI5NikpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQk4odmFsdWUsICdsZScpLmZyb21Ud29zKGNvdW50ICogOCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTW9zdCBjb21tb24gY2FzZSAtIHV7OCwgMTYsIDMyfSBkZWZhdWx0IExFIFNDQUxFLWVuY29kZWRcbiAgICAvL1xuICAgIC8vIFRoZXJlIGFyZSBzb21lIHNsaWdodCBiZW5lZml0cyBpbiB1bnJvbGxpbmcgdGhpcyBzcGVjaWZpYyBsb29wLFxuICAgIC8vIGhvd2V2ZXIgaXQgY29tZXMgd2l0aCBkaW1pbmlzaGluZyByZXR1cm5zIHNpbmNlIGhlcmUgdGhlIGFjdHVhbFxuICAgIC8vIGBuZXcgQk5gIGRvZXMgc2VlbSB0byB0YWtlIHVwIHRoZSBidWxrIG9mIHRoZSB0aW1lXG4gICAgc3dpdGNoIChjb3VudCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJOKDApO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJOKHZhbHVlWzBdKTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCTih2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQk4odmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpKTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgLy8gZm9yIHRoZSAzcmQgYnl0ZSwgd2UgZG9uJ3QgPDwgMjQgLSBzaW5jZSBKUyBjb252ZXJ0cyBhbGwgYml0d2lzZSBvcGVyYXRvcnMgdG9cbiAgICAgICAgICAgIC8vIDMyLWJpdCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHRvcC1tb3N0IGJpdCBpcyBzZXQgdGhpcyB5aWVsZHMgYSBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCTih2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSArICh2YWx1ZVsyXSA8PCAxNikgKyAodmFsdWVbM10gKiAxNjc3NzIxNikpO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJOKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSArICgodmFsdWVbM10gKyAodmFsdWVbNF0gPDwgOCkpICogMTY3NzcyMTYpKTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCTih2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSArICh2YWx1ZVsyXSA8PCAxNikgKyAoKHZhbHVlWzNdICsgKHZhbHVlWzRdIDw8IDgpICsgKHZhbHVlWzVdIDw8IDE2KSkgKiAxNjc3NzIxNikpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCTih2YWx1ZSwgJ2xlJyk7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBAbmFtZSB1OGFUb0Zsb2F0XG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBVaW50OEFycmF5IHZhbHVlIGludG8gdGhlIGZsb2F0IChlaXRoZXIgMzIgb3IgNjQtYml0KVxuICogcmVwcmVzZW50YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFUb0Zsb2F0KHZhbHVlLCB7IGJpdExlbmd0aCA9IDMyLCBpc0xlID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBpZiAoYml0TGVuZ3RoICE9PSAzMiAmJiBiaXRMZW5ndGggIT09IDY0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiaXRMZW5ndGggcHJvdmlkZWQsIGV4cGVjdGVkIDMyIG9yIDY0Jyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA8IChiaXRMZW5ndGggLyA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW5wdXQgYnVmZmVyIHByb3ZpZGVkLCBleHBlY3RlZCBhdCBsZWFzdCAke2JpdExlbmd0aCAvIDh9IGJ5dGVzLCBmb3VuZCAke3ZhbHVlLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgZHYgPSBuZXcgRGF0YVZpZXcodmFsdWUuYnVmZmVyLCB2YWx1ZS5ieXRlT2Zmc2V0KTtcbiAgICByZXR1cm4gYml0TGVuZ3RoID09PSAzMlxuICAgICAgICA/IGR2LmdldEZsb2F0MzIoMCwgaXNMZSlcbiAgICAgICAgOiBkdi5nZXRGbG9hdDY0KDAsIGlzTGUpO1xufVxuIiwiY29uc3QgVTggPSBuZXcgQXJyYXkoMjU2KTtcbmNvbnN0IFUxNiA9IG5ldyBBcnJheSgyNTYgKiAyNTYpO1xuZm9yIChsZXQgbiA9IDA7IG4gPCAyNTY7IG4rKykge1xuICAgIFU4W25dID0gbi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbn1cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICBjb25zdCBzID0gaSA8PCA4O1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMjU2OyBqKyspIHtcbiAgICAgICAgVTE2W3MgfCBqXSA9IFU4W2ldICsgVThbal07XG4gICAgfVxufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gaGV4KHZhbHVlLCByZXN1bHQpIHtcbiAgICBjb25zdCBtb2QgPSAodmFsdWUubGVuZ3RoICUgMikgfCAwO1xuICAgIGNvbnN0IGxlbmd0aCA9ICh2YWx1ZS5sZW5ndGggLSBtb2QpIHwgMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHJlc3VsdCArPSBVMTZbKHZhbHVlW2ldIDw8IDgpIHwgdmFsdWVbaSArIDFdXTtcbiAgICB9XG4gICAgaWYgKG1vZCkge1xuICAgICAgICByZXN1bHQgKz0gVThbdmFsdWVbbGVuZ3RoXSB8IDBdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBAbmFtZSB1OGFUb0hleFxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGhleCBzdHJpbmcgZnJvbSBhIFVpbnQ4QXJyYXkgb2JqZWN0LlxuICogQGRlc2NyaXB0aW9uXG4gKiBgVUludDhBcnJheWAgaW5wdXQgdmFsdWVzIHJldHVybiB0aGUgYWN0dWFsIGhleCBzdHJpbmcuIGBudWxsYCBvciBgdW5kZWZpbmVkYCB2YWx1ZXMgcmV0dXJucyBhbiBgMHhgIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogdThhVG9IZXgobmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4NjUsIDB4NmMsIDB4NmMsIDB4Zl0pKTsgLy8gMHg2ODY1NmMwZlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFUb0hleCh2YWx1ZSwgYml0TGVuZ3RoID0gLTEsIGlzUHJlZml4ZWQgPSB0cnVlKSB7XG4gICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0IHNpbm1jZSB3ZSBzdXBwb3J0IGlzUHJlZml4ZWQgPSBmYWxzZS4uLi5cbiAgICBjb25zdCBlbXB0eSA9IGlzUHJlZml4ZWRcbiAgICAgICAgPyAnMHgnXG4gICAgICAgIDogJyc7XG4gICAgaWYgKCF2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYml0TGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gOCk7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtoZXgodmFsdWUuc3ViYXJyYXkoMCwgbGVuZ3RoIC8gMiksIGVtcHR5KX3igKYke2hleCh2YWx1ZS5zdWJhcnJheSh2YWx1ZS5sZW5ndGggLSBsZW5ndGggLyAyKSwgJycpfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhleCh2YWx1ZSwgZW1wdHkpO1xufVxuIiwiLyoqXG4gKiBAbmFtZSB1OGFUb051bWJlclxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIG51bWJlciBmcm9tIGEgVWludDhBcnJheSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFUb051bWJlcih2YWx1ZSwgeyBpc0xlID0gdHJ1ZSwgaXNOZWdhdGl2ZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIC8vIHNsaWNlICsgcmV2ZXJzZSBpcyBleHBlbnNpdmUsIGhvd2V2ZXIgU0NBTEUgaXMgTEUgYnkgZGVmYXVsdCBzbyB0aGlzIGlzIHRoZSBwYXRoXG4gICAgLy8gd2UgYXJlIG1vc3QgaW50ZXJlc3RlZCBpbiAodGhlIEJFIGlzIGFkZGVkIGZvciB0aGUgc2FrZSBvZiBiZWluZyBjb21wcmVoZW5zaXZlKVxuICAgIGlmICghaXNMZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBjb25zdCBjb3VudCA9IHZhbHVlLmxlbmd0aDtcbiAgICAvLyBXaGVuIHRoZSB2YWx1ZSBpcyBhIGl7OCwgMTYsIDI0LCAzMiwgNDAsIDQwfSB2YWx1ZXMgYW5kIHRoZSB0b3AtbW9zdCBiaXRcbiAgICAvLyBpbmRpY2F0ZXMgYSBzaWduZWQgdmFsdWUsIHdlIHVzZSBhIHR3bydzIGNvbXBsZW1lbnQgY29udmVyc2lvbi4gSWYgb25lIG9mIHRoZXNlXG4gICAgLy8gZmxhZ3MgYXJlIG5vdCBzZXQsIHdlIGp1c3QgZG8gYSBub3JtYWwgdW5zaWduZWQgY29udmVyc2lvbiAodGhlIHNhbWUgc2hvcnRjdXRcbiAgICAvLyBhcHBsaWVzIGluIGJvdGggdGhlIHU4YVRve0JpZ0ludCwgQm59IGNvbnZlcnNpb25zIGFzIHdlbGwpXG4gICAgaWYgKGlzTmVnYXRpdmUgJiYgY291bnQgJiYgKHZhbHVlW2NvdW50IC0gMV0gJiAweDgwKSkge1xuICAgICAgICBzd2l0Y2ggKGNvdW50KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoKHZhbHVlWzBdIF4gMjU1KSAqIC0xKSAtIDEpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiAoKCgodmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkpIF4gNjU1MzUpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoKCh2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSArICh2YWx1ZVsyXSA8PCAxNikpIF4gMTY3NzcyMTUpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgLy8gZm9yIHRoZSAzcmQgYnl0ZSwgd2UgZG9uJ3QgPDwgMjQgLSBzaW5jZSBKUyBjb252ZXJ0cyBhbGwgYml0d2lzZSBvcGVyYXRvcnMgdG9cbiAgICAgICAgICAgICAgICAvLyAzMi1iaXQsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSB0b3AtbW9zdCBiaXQgaXMgc2V0IHRoaXMgeWllbGRzIGEgbmVnYXRpdmUgdmFsdWVcbiAgICAgICAgICAgICAgICByZXR1cm4gKCgoKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSArICh2YWx1ZVszXSAqIDE2Nzc3MjE2KSkgXiA0Mjk0OTY3Mjk1KSAqIC0xKSAtIDEpO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHJldHVybiAoKCgoKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSArICh2YWx1ZVszXSAqIDE2Nzc3MjE2KSkgXiA0Mjk0OTY3Mjk1KSArICgodmFsdWVbNF0gXiAweGZmKSAqIDQyOTQ5NjcyOTYpKSAqIC0xKSAtIDEpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgIHJldHVybiAoKCgoKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSArICh2YWx1ZVszXSAqIDE2Nzc3MjE2KSkgXiA0Mjk0OTY3Mjk1KSArICgoKHZhbHVlWzRdICsgKHZhbHVlWzVdIDw8IDgpKSBeIDY1NTM1KSAqIDQyOTQ5NjcyOTYpKSAqIC0xKSAtIDEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG1vcmUgdGhhbiA0OC1iaXRzIGNhbm5vdCBiZSByZWxpYWJseSBjb252ZXJ0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKGNvdW50KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVbMF07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgLy8gZm9yIHRoZSAzcmQgYnl0ZSwgd2UgZG9uJ3QgPDwgMjQgLSBzaW5jZSBKUyBjb252ZXJ0cyBhbGwgYml0d2lzZSBvcGVyYXRvcnMgdG9cbiAgICAgICAgICAgIC8vIDMyLWJpdCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHRvcC1tb3N0IGJpdCBpcyBzZXQgdGhpcyB5aWVsZHMgYSBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSArICh2YWx1ZVszXSAqIDE2Nzc3MjE2KTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSArICgodmFsdWVbM10gKyAodmFsdWVbNF0gPDwgOCkpICogMTY3NzcyMTYpO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKCh2YWx1ZVszXSArICh2YWx1ZVs0XSA8PCA4KSArICh2YWx1ZVs1XSA8PCAxNikpICogMTY3NzcyMTYpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtb3JlIHRoYW4gNDgtYml0cyBjYW5ub3QgYmUgcmVsaWFibHkgY29udmVydGVkJyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgVGV4dERlY29kZXIgfSBmcm9tICdAcG9sa2Fkb3QveC10ZXh0ZGVjb2Rlcic7XG5jb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpO1xuLyoqXG4gKiBAbmFtZSB1OGFUb1N0cmluZ1xuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHV0Zi04IHN0cmluZyBmcm9tIGEgVWludDhBcnJheSBvYmplY3QuXG4gKiBAZGVzY3JpcHRpb25cbiAqIGBVSW50OEFycmF5YCBpbnB1dCB2YWx1ZXMgcmV0dXJuIHRoZSBhY3R1YWwgZGVjb2RlZCB1dGYtOCBzdHJpbmcuIGBudWxsYCBvciBgdW5kZWZpbmVkYCB2YWx1ZXMgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IHU4YVRvU3RyaW5nIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIHU4YVRvU3RyaW5nKG5ldyBVaW50OEFycmF5KFsweDY4LCAweDY1LCAweDZjLCAweDZjLCAweDZmXSkpOyAvLyBoZWxsb1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFUb1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgICA/IGRlY29kZXIuZGVjb2RlKHZhbHVlKVxuICAgICAgICA6ICcnO1xufVxuIiwiaW1wb3J0IHsgaGV4VG9VOGEgfSBmcm9tICcuLi9oZXgvdG9VOGEuanMnO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tICcuLi9pcy9idWZmZXIuanMnO1xuaW1wb3J0IHsgaXNIZXggfSBmcm9tICcuLi9pcy9oZXguanMnO1xuaW1wb3J0IHsgaXNVOGEgfSBmcm9tICcuLi9pcy91OGEuanMnO1xuaW1wb3J0IHsgc3RyaW5nVG9VOGEgfSBmcm9tICcuLi9zdHJpbmcvdG9VOGEuanMnO1xuLyoqXG4gKiBAbmFtZSB1OGFUb1U4YVxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIFVpbnQ4QXJyYXkgdmFsdWUgZnJvbSBhIFVpbnQ4QXJyYXksIEJ1ZmZlciwgc3RyaW5nIG9yIGhleCBpbnB1dC5cbiAqIEBkZXNjcmlwdGlvblxuICogYG51bGxgIG9yIGB1bmRlZmluZWRgIGlucHV0cyByZXR1cm5zIGEgYFtdYCByZXN1bHQsIFVpbnQ4QXJyYXkgdmFsdWVzIHJldHVybnMgdGhlIHZhbHVlLCBoZXggc3RyaW5ncyByZXR1cm5zIGEgVWludDhBcnJheSByZXByZXNlbnRhdGlvbi5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogdThhVG9VOGEobmV3IFVpbnQ4QXJyYXkoWzB4MTIsIDB4MzRdKTsgLy8gPT4gVWludDhBcnJheShbMHgxMiwgMHgzNF0pXG4gKiB1OGFUb1U4YSgweDEyMzQpOyAvLyA9PiBVaW50OEFycmF5KFsweDEyLCAweDM0XSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdThhVG9VOGEodmFsdWUpIHtcbiAgICByZXR1cm4gaXNVOGEodmFsdWUpXG4gICAgICAgIC8vIE5PVEUgaXNCdWZmZXIgbmVlZHMgdG8gZ28gaGVyZSBzaW5jZSBpdCBhY3R1YWxseSBleHRlbmRzXG4gICAgICAgIC8vIFVpbnQ4QXJyYXkgb24gTm9kZS5qcyBlbnZpcm9ubWVudHMsIHNvIGFsbCBCdWZmZXIgYXJlIFVpbnQ4QXJyYXksXG4gICAgICAgIC8vIGJ1dCBVaW50OEFycmF5IGlzIG5vdCBCdWZmZXJcbiAgICAgICAgPyBpc0J1ZmZlcih2YWx1ZSlcbiAgICAgICAgICAgID8gbmV3IFVpbnQ4QXJyYXkodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIDogaXNIZXgodmFsdWUpXG4gICAgICAgICAgICA/IGhleFRvVThhKHZhbHVlKVxuICAgICAgICAgICAgOiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gbmV3IFVpbnQ4QXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgOiBzdHJpbmdUb1U4YSh2YWx1ZSk7XG59XG4iLCJpbXBvcnQgeyB1OGFDb25jYXRTdHJpY3QgfSBmcm9tICcuL2NvbmNhdC5qcyc7XG5pbXBvcnQgeyB1OGFFcSB9IGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IHsgdThhVG9VOGEgfSBmcm9tICcuL3RvVThhLmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBVOEFfV1JBUF9FVEhFUkVVTSA9IC8qI19fUFVSRV9fKi8gdThhVG9VOGEoJ1xceDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XFxuJyk7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgVThBX1dSQVBfUFJFRklYID0gLyojX19QVVJFX18qLyB1OGFUb1U4YSgnPEJ5dGVzPicpO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFU4QV9XUkFQX1BPU1RGSVggPSAvKiNfX1BVUkVfXyovIHU4YVRvVThhKCc8L0J5dGVzPicpO1xuY29uc3QgV1JBUF9MRU4gPSBVOEFfV1JBUF9QUkVGSVgubGVuZ3RoICsgVThBX1dSQVBfUE9TVEZJWC5sZW5ndGg7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gdThhSXNXcmFwcGVkKHU4YSwgd2l0aEV0aGVyZXVtKSB7XG4gICAgcmV0dXJuICgodThhLmxlbmd0aCA+PSBXUkFQX0xFTiAmJlxuICAgICAgICB1OGFFcSh1OGEuc3ViYXJyYXkoMCwgVThBX1dSQVBfUFJFRklYLmxlbmd0aCksIFU4QV9XUkFQX1BSRUZJWCkgJiZcbiAgICAgICAgdThhRXEodThhLnNsaWNlKC1VOEFfV1JBUF9QT1NURklYLmxlbmd0aCksIFU4QV9XUkFQX1BPU1RGSVgpKSB8fFxuICAgICAgICAod2l0aEV0aGVyZXVtICYmXG4gICAgICAgICAgICB1OGEubGVuZ3RoID49IFU4QV9XUkFQX0VUSEVSRVVNLmxlbmd0aCAmJlxuICAgICAgICAgICAgdThhRXEodThhLnN1YmFycmF5KDAsIFU4QV9XUkFQX0VUSEVSRVVNLmxlbmd0aCksIFU4QV9XUkFQX0VUSEVSRVVNKSkpO1xufVxuLyoqXG4gKiBAbmFtZSB1OGFVbndyYXBCeXRlc1xuICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYWxsIDxCeXRlcz4uLi48L0J5dGVzPiB3cmFwcGVycyBmcm9tIHRoZSBzdXBwbGllZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdThhVW53cmFwQnl0ZXMoYnl0ZXMpIHtcbiAgICBjb25zdCB1OGEgPSB1OGFUb1U4YShieXRlcyk7XG4gICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB1bndyYXAgRXRoZXJldW0tc3R5bGUgd3JhcHNcbiAgICByZXR1cm4gdThhSXNXcmFwcGVkKHU4YSwgZmFsc2UpXG4gICAgICAgID8gdThhLnN1YmFycmF5KFU4QV9XUkFQX1BSRUZJWC5sZW5ndGgsIHU4YS5sZW5ndGggLSBVOEFfV1JBUF9QT1NURklYLmxlbmd0aClcbiAgICAgICAgOiB1OGE7XG59XG4vKipcbiAqIEBuYW1lIHU4YVdyYXBCeXRlc1xuICogQGRlc2NyaXB0aW9uXG4gKiBBZGRzIGEgPEJ5dGVzPi4uLjwvQnl0ZXM+IHdyYXBwZXIgdG8gdGhlIHN1cHBsaWVkIHZhbHVlLCBpZlxuICogLSBXZSBkb24ndCBhbHJlYWR5IGhhdmUgYSBCeXRlcyB3cmFwcGVyXG4gKiAtIFRoZSBtZXNzYWdlIGlzIG5vdCBhbiBFdGhlcmV1bS1zdHlsZSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFXcmFwQnl0ZXMoYnl0ZXMpIHtcbiAgICBjb25zdCB1OGEgPSB1OGFUb1U4YShieXRlcyk7XG4gICAgcmV0dXJuIHU4YUlzV3JhcHBlZCh1OGEsIHRydWUpXG4gICAgICAgID8gdThhXG4gICAgICAgIDogdThhQ29uY2F0U3RyaWN0KFtVOEFfV1JBUF9QUkVGSVgsIHU4YSwgVThBX1dSQVBfUE9TVEZJWF0pO1xufVxuIiwiaW1wb3J0IHsgeGdsb2JhbCB9IGZyb20gJ0Bwb2xrYWRvdC94LWdsb2JhbCc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pcy9mdW5jdGlvbi5qcyc7XG5jb25zdCBERURVUEUgPSAnRWl0aGVyIHJlbW92ZSBhbmQgZXhwbGljaXRseSBpbnN0YWxsIG1hdGNoaW5nIHZlcnNpb25zIG9yIGRlZHVwZSB1c2luZyB5b3VyIHBhY2thZ2UgbWFuYWdlci5cXG5UaGUgZm9sbG93aW5nIGNvbmZsaWN0aW5nIHBhY2thZ2VzIHdlcmUgZm91bmQ6JztcbmV4cG9ydCBjb25zdCBQT0xLQURPVEpTX0RJU0FCTEVfRVNNX0NKU19XQVJOSU5HX0ZMQUcgPSAnUE9MS0FET1RKU19ESVNBQkxFX0VTTV9DSlNfV0FSTklORyc7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBnZXRFbnRyeShuYW1lKSB7XG4gICAgY29uc3QgX2dsb2JhbCA9IHhnbG9iYWw7XG4gICAgaWYgKCFfZ2xvYmFsLl9fcG9sa2Fkb3Rqcykge1xuICAgICAgICBfZ2xvYmFsLl9fcG9sa2Fkb3RqcyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIV9nbG9iYWwuX19wb2xrYWRvdGpzW25hbWVdKSB7XG4gICAgICAgIF9nbG9iYWwuX19wb2xrYWRvdGpzW25hbWVdID0gW107XG4gICAgfVxuICAgIHJldHVybiBfZ2xvYmFsLl9fcG9sa2Fkb3Rqc1tuYW1lXTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGZvcm1hdERpc3BsYXkoYWxsLCBmbXQpIHtcbiAgICBsZXQgbWF4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBhbGwubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIGFsbFtpXS52ZXJzaW9uLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBhbGxcbiAgICAgICAgLm1hcCgoZCkgPT4gYFxcdCR7Zm10KGQudmVyc2lvbi5wYWRFbmQobWF4KSwgZCkuam9pbignXFx0Jyl9YClcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZm9ybWF0SW5mbyh2ZXJzaW9uLCB7IG5hbWUgfSkge1xuICAgIHJldHVybiBbXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIG5hbWVcbiAgICBdO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZm9ybWF0VmVyc2lvbih2ZXJzaW9uLCB7IHBhdGgsIHR5cGUgfSkge1xuICAgIGxldCBleHRyYWN0ZWQ7XG4gICAgaWYgKHBhdGggJiYgcGF0aC5sZW5ndGggPj0gNSkge1xuICAgICAgICBjb25zdCBubUluZGV4ID0gcGF0aC5pbmRleE9mKCdub2RlX21vZHVsZXMnKTtcbiAgICAgICAgZXh0cmFjdGVkID0gbm1JbmRleCA9PT0gLTFcbiAgICAgICAgICAgID8gcGF0aFxuICAgICAgICAgICAgOiBwYXRoLnN1YnN0cmluZyhubUluZGV4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGV4dHJhY3RlZCA9ICc8dW5rbm93bj4nO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBgJHtgJHt0eXBlIHx8ICcnfWAucGFkU3RhcnQoMyl9ICR7dmVyc2lvbn1gLFxuICAgICAgICBleHRyYWN0ZWRcbiAgICBdO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0UGF0aChpbmZvUGF0aCwgcGF0aE9yRm4pIHtcbiAgICBpZiAoaW5mb1BhdGgpIHtcbiAgICAgICAgcmV0dXJuIGluZm9QYXRoO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHBhdGhPckZuKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhPckZuKCkgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXRoT3JGbiB8fCAnJztcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIHdhcm4ocHJlLCBhbGwsIGZtdCkge1xuICAgIGNvbnNvbGUud2FybihgJHtwcmV9XFxuJHtERURVUEV9XFxuJHtmb3JtYXREaXNwbGF5KGFsbCwgZm10KX1gKTtcbn1cbi8qKlxuICogQG5hbWUgZGV0ZWN0UGFja2FnZVxuICogQHN1bW1hcnkgQ2hlY2tzIHRoYXQgYSBzcGVjaWZpYyBwYWNrYWdlIGlzIG9ubHkgaW1wb3J0ZWQgb25jZVxuICogQGRlc2NyaXB0aW9uIEEgYEBwb2xrYWRvdC8qYCB2ZXJzaW9uIGRldGVjdGlvbiB1dGlsaXR5LCBjaGVja2luZyBmb3Igb25lIG9jY3VycmVuY2Ugb2YgYSBwYWNrYWdlIGluIGFkZGl0aW9uIHRvIGNoZWNraW5nIGZvciBkZXBlbmRlbmN5IHZlcnNpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0UGFja2FnZSh7IG5hbWUsIHBhdGgsIHR5cGUsIHZlcnNpb24gfSwgcGF0aE9yRm4sIGRlcHMgPSBbXSkge1xuICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCdAcG9sa2Fkb3QnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFja2FnZSBkZXNjcmlwdG9yICR7bmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSBnZXRFbnRyeShuYW1lKTtcbiAgICBlbnRyeS5wdXNoKHsgcGF0aDogZ2V0UGF0aChwYXRoLCBwYXRoT3JGbiksIHR5cGUsIHZlcnNpb24gfSk7XG4gICAgLy8gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIGVudHJ5IGF0IERJRkZFUkVOVCB2ZXJzaW9uIHR5cGVzIHRoZW4gd2Fybi4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBlbnRyeSBhdCB0aGUgc2FtZVxuICAgIC8vIHZlcnNpb24gYW5kIEVTTS9DSlMgZHVhbCB3YXJuaW5ncyBhcmUgZGlzYWJsZWQsIHRoZW4gZG8gbm90IGRpc3BsYXkgd2FybmluZ3NcbiAgICBjb25zdCBlbnRyaWVzU2FtZVZlcnNpb24gPSBlbnRyeS5ldmVyeSgoZSkgPT4gZS52ZXJzaW9uID09PSB2ZXJzaW9uKTtcbiAgICBjb25zdCBlc21DanNXYXJuaW5nRGlzYWJsZWQgPSB4Z2xvYmFsLnByb2Nlc3M/LmVudj8uW1BPTEtBRE9USlNfRElTQUJMRV9FU01fQ0pTX1dBUk5JTkdfRkxBR10gPT09ICcxJztcbiAgICBjb25zdCBtdWx0aXBsZUVudHJpZXMgPSBlbnRyeS5sZW5ndGggIT09IDE7XG4gICAgY29uc3QgZGlzYWJsZVdhcm5pbmdzID0gZXNtQ2pzV2FybmluZ0Rpc2FibGVkICYmIGVudHJpZXNTYW1lVmVyc2lvbjtcbiAgICBpZiAobXVsdGlwbGVFbnRyaWVzICYmICFkaXNhYmxlV2FybmluZ3MpIHtcbiAgICAgICAgd2FybihgJHtuYW1lfSBoYXMgbXVsdGlwbGUgdmVyc2lvbnMsIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGluc3RhbGxlZC5gLCBlbnRyeSwgZm9ybWF0VmVyc2lvbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBtaXNtYXRjaGVzID0gZGVwcy5maWx0ZXIoKGQpID0+IGQgJiYgZC52ZXJzaW9uICE9PSB2ZXJzaW9uKTtcbiAgICAgICAgaWYgKG1pc21hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB3YXJuKGAke25hbWV9IHJlcXVpcmVzIGRpcmVjdCBkZXBlbmRlbmNpZXMgZXhhY3RseSBtYXRjaGluZyB2ZXJzaW9uICR7dmVyc2lvbn0uYCwgbWlzbWF0Y2hlcywgZm9ybWF0SW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBzdHJpbmdUb1U4YSwgdThhVG9TdHJpbmcgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBXYmcgfSBmcm9tICcuL3diZy5qcyc7XG4vKipcbiAqIEBuYW1lIEJyaWRnZVxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGEgYnJpZGdlIGJldHdlZW4gdGhlIEpTIGFuZCBXQVNNIGVudmlyb25tZW50cy5cbiAqXG4gKiBGb3IgYW55IGJyaWRnZSBpdCBpcyBwYXNzZWQgYW4gZnVuY3Rpb24gd2hpY2ggaXMgdGhlbiBjYWxsZWQgaW50ZXJuYWxseSBhdCB0aGVcbiAqIHRpbWUgb2YgaW5pdGlhbGl6YXRpb24uIFRoaXMgYWZmZWN0aXZlbHkgaW1wbGVtZW50cyB0aGUgbGF5ZXIgYmV0d2VlbiBXQVNNIGFuZFxuICogdGhlIG5hdGl2ZSBlbnZpcm9ubWVudCwgcHJvdmlkaW5nIGFsbCB0aGUgcGx1bWJpbmcgbmVlZGVkIGZvciB0aGUgV2JnIGNsYXNzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCcmlkZ2Uge1xuICAgIF9faW50ZXJuYWxfX2NyZWF0ZVdhc207XG4gICAgX19pbnRlcm5hbF9faGVhcDtcbiAgICBfX2ludGVybmFsX193Ymc7XG4gICAgX19pbnRlcm5hbF9fY2FjaGVnZXRJbnQzMjtcbiAgICBfX2ludGVybmFsX19jYWNoZWdldFVpbnQ4O1xuICAgIF9faW50ZXJuYWxfX2hlYXBOZXh0O1xuICAgIF9faW50ZXJuYWxfX3dhc207XG4gICAgX19pbnRlcm5hbF9fd2FzbUVycm9yO1xuICAgIF9faW50ZXJuYWxfX3dhc21Qcm9taXNlO1xuICAgIF9faW50ZXJuYWxfX3R5cGU7XG4gICAgY29uc3RydWN0b3IoY3JlYXRlV2FzbSkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVdhc20gPSBjcmVhdGVXYXNtO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0SW50MzIgPSBudWxsO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0VWludDggPSBudWxsO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYXAgPSBuZXcgQXJyYXkoMzIpXG4gICAgICAgICAgICAuZmlsbCh1bmRlZmluZWQpXG4gICAgICAgICAgICAuY29uY2F0KHVuZGVmaW5lZCwgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYXBOZXh0ID0gdGhpcy5fX2ludGVybmFsX19oZWFwLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlID0gJ25vbmUnO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc20gPSBudWxsO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc21FcnJvciA9IG51bGw7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2FzbVByb21pc2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3diZyA9IHsgLi4ubmV3IFdiZyh0aGlzKSB9O1xuICAgIH1cbiAgICAvKiogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGluaXQgZXJyb3IgKi9cbiAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3dhc21FcnJvcjtcbiAgICB9XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBpbml0IHR5cGUgKi9cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fdHlwZTtcbiAgICB9XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBjcmVhdGVkIHdhc20gaW50ZXJmYWNlICovXG4gICAgZ2V0IHdhc20oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3dhc207XG4gICAgfVxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGVyZm9ybXMgdGhlIHdhc20gaW5pdGlhbGl6YXRpb24gKi9cbiAgICBhc3luYyBpbml0KGNyZWF0ZVdhc20pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9faW50ZXJuYWxfX3dhc21Qcm9taXNlIHx8IGNyZWF0ZVdhc20pIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2FzbVByb21pc2UgPSAoY3JlYXRlV2FzbSB8fCB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVdhc20pKHRoaXMuX19pbnRlcm5hbF9fd2JnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGVycm9yLCB0eXBlLCB3YXNtIH0gPSBhd2FpdCB0aGlzLl9faW50ZXJuYWxfX3dhc21Qcm9taXNlO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc20gPSB3YXNtO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc21FcnJvciA9IGVycm9yO1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX193YXNtO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbiBvYmplY3QgZnJvbSB0aGUgaGVhcFxuICAgICAqL1xuICAgIGdldE9iamVjdChpZHgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faGVhcFtpZHhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSB0aGUgaGVhcFxuICAgICAqL1xuICAgIGRyb3BPYmplY3QoaWR4KSB7XG4gICAgICAgIGlmIChpZHggPCAzNikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhcFtpZHhdID0gdGhpcy5fX2ludGVybmFsX19oZWFwTmV4dDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19oZWFwTmV4dCA9IGlkeDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbmQgcmVtb3ZlcyBhbiBvYmplY3QgdG8gdGhlIGhlYXBcbiAgICAgKi9cbiAgICB0YWtlT2JqZWN0KGlkeCkge1xuICAgICAgICBjb25zdCByZXQgPSB0aGlzLmdldE9iamVjdChpZHgpO1xuICAgICAgICB0aGlzLmRyb3BPYmplY3QoaWR4KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIEFkZHMgYW4gb2JqZWN0IHRvIHRoZSBoZWFwXG4gICAgICovXG4gICAgYWRkT2JqZWN0KG9iaikge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19oZWFwTmV4dCA9PT0gdGhpcy5fX2ludGVybmFsX19oZWFwLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19oZWFwLnB1c2godGhpcy5fX2ludGVybmFsX19oZWFwLmxlbmd0aCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX19pbnRlcm5hbF9faGVhcE5leHQ7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhcE5leHQgPSB0aGlzLl9faW50ZXJuYWxfX2hlYXBbaWR4XTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19oZWFwW2lkeF0gPSBvYmo7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSBhbiBJbnQzMiBpbiB0aGUgV0FTTSBpbnRlcmZhY2VcbiAgICAgKi9cbiAgICBnZXRJbnQzMigpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fY2FjaGVnZXRJbnQzMiA9PT0gbnVsbCB8fCB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0SW50MzIuYnVmZmVyICE9PSB0aGlzLl9faW50ZXJuYWxfX3dhc20ubWVtb3J5LmJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jYWNoZWdldEludDMyID0gbmV3IEludDMyQXJyYXkodGhpcy5fX2ludGVybmFsX193YXNtLm1lbW9yeS5idWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0SW50MzI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSBhbiBVaW50OEFycmF5IGluIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIGdldFVpbnQ4KCkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19jYWNoZWdldFVpbnQ4ID09PSBudWxsIHx8IHRoaXMuX19pbnRlcm5hbF9fY2FjaGVnZXRVaW50OC5idWZmZXIgIT09IHRoaXMuX19pbnRlcm5hbF9fd2FzbS5tZW1vcnkuYnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0VWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLl9faW50ZXJuYWxfX3dhc20ubWVtb3J5LmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY2FjaGVnZXRVaW50ODtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbiBVaW50OEFycmF5IGluIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIGdldFU4YShwdHIsIGxlbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRVaW50OCgpLnN1YmFycmF5KHB0ciAvIDEsIHB0ciAvIDEgKyBsZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgc3RyaW5nIGluIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIGdldFN0cmluZyhwdHIsIGxlbikge1xuICAgICAgICByZXR1cm4gdThhVG9TdHJpbmcodGhpcy5nZXRVOGEocHRyLCBsZW4pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIEFsbG9jYXRlcyBhbiBVaW50OEFycmF5IGluIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIGFsbG9jVThhKGFyZykge1xuICAgICAgICBjb25zdCBwdHIgPSB0aGlzLl9faW50ZXJuYWxfX3dhc20uX193YmluZGdlbl9tYWxsb2MoYXJnLmxlbmd0aCAqIDEpO1xuICAgICAgICB0aGlzLmdldFVpbnQ4KCkuc2V0KGFyZywgcHRyIC8gMSk7XG4gICAgICAgIHJldHVybiBbcHRyLCBhcmcubGVuZ3RoXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIEFsbG9jYXRlcyBhIHN0cmluZyBpbiB0aGUgV0FTTSBpbnRlcmZhY2VcbiAgICAgKi9cbiAgICBhbGxvY1N0cmluZyhhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb2NVOGEoc3RyaW5nVG9VOGEoYXJnKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYW4gVWludDhBcnJheSBmcm9tIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIHJlc3VsdFU4YSgpIHtcbiAgICAgICAgY29uc3QgcjAgPSB0aGlzLmdldEludDMyKClbOCAvIDQgKyAwXTtcbiAgICAgICAgY29uc3QgcjEgPSB0aGlzLmdldEludDMyKClbOCAvIDQgKyAxXTtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5nZXRVOGEocjAsIHIxKS5zbGljZSgpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc20uX193YmluZGdlbl9mcmVlKHIwLCByMSAqIDEpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmUgYSBzdHJpbmcgZnJvbSB0aGUgV0FTTSBpbnRlcmZhY2VcbiAgICAgKi9cbiAgICByZXN1bHRTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb1N0cmluZyh0aGlzLnJlc3VsdFU4YSgpKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIEBuYW1lIGNyZWF0ZVdhc21GblxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGUgYSBXQVNNIChvciBBU00uanMpIGNyZWF0b3IgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBJdCB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlIGEgV0FTTSBpbnRlcmZhY2UgZmlyc3QgYW5kIGlmIHRoaXMgZmFpbHMgb3IgaXMgbm90IGF2YWlsYWJsZSBpblxuICogdGhlIGVudmlyb25tZW50LCB3aWxsIGZhbGxiYWNrIHRvIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGFuIEFTTS5qcyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXYXNtRm4ocm9vdCwgd2FzbUJ5dGVzLCBhc21Gbikge1xuICAgIHJldHVybiBhc3luYyAod2JnKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgICAgICAgd2FzbTogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCF3YXNtQnl0ZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gV2ViQXNzZW1ibHkgcHJvdmlkZWQgZm9yIGluaXRpYWxpemF0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgV2ViQXNzZW1ibHkgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViQXNzZW1ibHkgaXMgbm90IGF2YWlsYWJsZSBpbiB5b3VyIGVudmlyb25tZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh3YXNtQnl0ZXMsIHsgd2JnIH0pO1xuICAgICAgICAgICAgcmVzdWx0Lndhc20gPSBzb3VyY2UuaW5zdGFuY2UuZXhwb3J0cztcbiAgICAgICAgICAgIHJlc3VsdC50eXBlID0gJ3dhc20nO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHZhbGlkIHN1cHBsaWVkIGFzbS5qcywgcmV0dXJuIHRoYXRcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXNtRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQud2FzbSA9IGFzbUZuKHdiZyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSAnYXNtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvciA9IGBGQVRBTDogVW5hYmxlIHRvIGluaXRpYWxpemUgQHBvbGthZG90L3dhc20tJHtyb290fTo6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBnZXRSYW5kb21WYWx1ZXMgfSBmcm9tICdAcG9sa2Fkb3QveC1yYW5kb212YWx1ZXMnO1xuY29uc3QgREVGQVVMVF9DUllQVE8gPSB7IGdldFJhbmRvbVZhbHVlcyB9O1xuY29uc3QgREVGQVVMVF9TRUxGID0geyBjcnlwdG86IERFRkFVTFRfQ1JZUFRPIH07XG4vKipcbiAqIEBuYW1lIFdiZ1xuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGRlZmluZXMgdGhlIGludGVybmFsIGludGVyZmFjZXMgdGhhdCB3YXNtLWJpbmRnZW4gdXNlZCB0byBjb21tdW5pY2F0ZVxuICogd2l0aCB0aGUgaG9zdCBsYXllci4gTm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgdXNlciwgcmF0aGVyXG4gKiB0aGV5IGFyZSBjYWxsZWQgaW50ZXJuYWxseSBmcm9tIHRoZSBXQVNNIGNvZGUgaXRzZWxmLlxuICpcbiAqIFRoZSBpbnRlcmZhY2VzIGhlcmUgYXJlIGV4cG9zZWQgaW4gdGhlIGltcG9ydHMgb24gdGhlIGNyZWF0ZWQgV0FTTSBpbnRlcmZhY2VzLlxuICpcbiAqIEludGVybmFsbHkgdGhlIGltcGxlbWVudGF0aW9uIGRvZXMgYSB0aGluIGxheWVyIGludG8gdGhlIHN1cHBsaWVkIGJyaWRnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFdiZyB7XG4gICAgX19pbnRlcm5hbF9fYnJpZGdlO1xuICAgIGNvbnN0cnVjdG9yKGJyaWRnZSkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2JyaWRnZSA9IGJyaWRnZTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGFib3J0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Fib3J0Jyk7XG4gICAgfTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX193YmluZGdlbl9pc191bmRlZmluZWQgPSAoaWR4KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2JyaWRnZS5nZXRPYmplY3QoaWR4KSA9PT0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JpbmRnZW5fdGhyb3cgPSAocHRyLCBsZW4pID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuX19pbnRlcm5hbF9fYnJpZGdlLmdldFN0cmluZyhwdHIsIGxlbikpO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JnX3NlbGZfMWI3YTM5ZTNhOTJjOTQ5YyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYnJpZGdlLmFkZE9iamVjdChERUZBVUxUX1NFTEYpO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JnX3JlcXVpcmVfNjA0ODM3NDI4NTMyYTczMyA9IChwdHIsIGxlbikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZXF1aXJlICR7dGhpcy5fX2ludGVybmFsX19icmlkZ2UuZ2V0U3RyaW5nKHB0ciwgbGVuKX1gKTtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfX3diZ19jcnlwdG9fOTY4ZjE3NzIyODdlMmRmMCA9IChfaWR4KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2JyaWRnZS5hZGRPYmplY3QoREVGQVVMVF9DUllQVE8pO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JnX2dldFJhbmRvbVZhbHVlc19hM2QzNGI0ZmVlM2MyODY5ID0gKF9pZHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYnJpZGdlLmFkZE9iamVjdChERUZBVUxUX0NSWVBUTy5nZXRSYW5kb21WYWx1ZXMpO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JnX2dldFJhbmRvbVZhbHVlc19mNWUxNGFiN2FjOGU5OTVkID0gKF9hcmcwLCBwdHIsIGxlbikgPT4ge1xuICAgICAgICBERUZBVUxUX0NSWVBUTy5nZXRSYW5kb21WYWx1ZXModGhpcy5fX2ludGVybmFsX19icmlkZ2UuZ2V0VThhKHB0ciwgbGVuKSk7XG4gICAgfTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX193YmdfcmFuZG9tRmlsbFN5bmNfZDViZDJkNjU1ZmRmMjU2YSA9IChfaWR4LCBfcHRyLCBfbGVuKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmFuZG9tRmlsbHN5bmMgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICAvLyBnZXRPYmplY3QoaWR4KS5yYW5kb21GaWxsU3luYyhnZXRVOGEocHRyLCBsZW4pKTtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfX3diaW5kZ2VuX29iamVjdF9kcm9wX3JlZiA9IChpZHgpID0+IHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19icmlkZ2UudGFrZU9iamVjdChpZHgpO1xuICAgIH07XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3Qvd2FzbS1jcnlwdG8taW5pdCcsIHBhdGg6IChpbXBvcnQubWV0YSAmJiBpbXBvcnQubWV0YS51cmwpID8gbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLnN1YnN0cmluZygwLCBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpIDogJ2F1dG8nLCB0eXBlOiAnZXNtJywgdmVyc2lvbjogJzcuMy4yJyB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlV2FzbUZuIH0gZnJvbSAnQHBvbGthZG90L3dhc20tYnJpZGdlJztcbmltcG9ydCB7IHdhc21CeXRlcyB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtJztcbmV4cG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG4vKipcbiAqIEBuYW1lIGNyZWF0ZVdhc21cbiAqIEBkZXNjcmlwdGlvblxuICogQ3JlYXRlcyBhbiBpbnRlcmZhY2UgdXNpbmcgb25seSBXQVNNXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVXYXNtID0gLyojX19QVVJFX18qLyBjcmVhdGVXYXNtRm4oJ2NyeXB0bycsIHdhc21CeXRlcywgbnVsbCk7XG4iLCJpbXBvcnQgeyBiYXNlNjREZWNvZGUsIHVuemxpYlN5bmMgfSBmcm9tICdAcG9sa2Fkb3Qvd2FzbS11dGlsJztcbmltcG9ydCB7IGJ5dGVzLCBsZW5JbiwgbGVuT3V0IH0gZnJvbSAnLi9janMvYnl0ZXMuanMnO1xuZXhwb3J0IHsgcGFja2FnZUluZm8gfSBmcm9tICcuL3BhY2thZ2VJbmZvLmpzJztcbi8qKlxuICogQG5hbWUgd2FzbUJ5dGVzXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBkZWNvZGVkIFdBU00gaW50ZXJmYWNlIGFzIGV4cG9zZWQgYnkgdGhpcyBwYWNrYWdlLlxuICpcbiAqIFRoZSBidWlsZCBwcm9jZXNzIHdpbGwgb3V0cHV0IGludG8gY2pzLyogaW50byBhIGNvbXByZXNzZWQgYmFzZTY0IGZvcm1hdC5cbiAqIFVwb24gbG9hZGluZyB0aGUgZXhwb3NlZCBieXRlcyB3aWxsIGJlIGRlY29kZWQgYW5kIGRlY29tcHJlc3NlZCBmcm9tIHRoaXNcbiAqIHNwZWNpZmljIGZvcm1hdCBhbmQgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB3YXNtQnl0ZXMgPSAvKiNfX1BVUkVfXyovIHVuemxpYlN5bmMoYmFzZTY0RGVjb2RlKGJ5dGVzLCBuZXcgVWludDhBcnJheShsZW5JbikpLCBuZXcgVWludDhBcnJheShsZW5PdXQpKTtcbiIsImV4cG9ydCBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogJ0Bwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtJywgcGF0aDogKGltcG9ydC5tZXRhICYmIGltcG9ydC5tZXRhLnVybCkgPyBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUuc3Vic3RyaW5nKDAsIG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5sYXN0SW5kZXhPZignLycpICsgMSkgOiAnYXV0bycsIHR5cGU6ICdlc20nLCB2ZXJzaW9uOiAnNy4zLjInIH07XG4iLCJpbXBvcnQgeyBicmlkZ2UsIGluaXRCcmlkZ2UgfSBmcm9tICcuL2luaXQuanMnO1xuZXhwb3J0IHsgcGFja2FnZUluZm8gfSBmcm9tICcuL3BhY2thZ2VJbmZvLmpzJztcbmV4cG9ydCB7IGJyaWRnZSB9O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBjcmVhdGUgYW4gZXh0ZW5hbCBpbnRlcmZhY2UgZnVuY3Rpb24gZnJvbSB0aGUgc2lnbmF0dXJlLCBhbGwgdGhlIHdoaWxlIGNoZWNraW5nXG4gKiB0aGUgYWN0dWFsIGJyaWRnZSB3YXNtIGludGVyZmFjZSB0byBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIGl0XG4gKlxuICogICB3aXRoV2FzbSh3YXNtOiBXYXNtQ3J5cHRvSW5zdGFuY2UsIGE6IG51bWJlciwgYjogc3RyaW5nKSA9PiBVaW50OEFycmF5XG4gKlxuICogYW5kIGluIHRoaXMgY2FzZSBpdCB3aWxsIGNyZWF0ZSBhbiBpbnRlcmZhY2UgZnVuY3Rpb24gd2l0aCB0aGUgc2lnbmFydXJlXG4gKlxuICogICAoYTogbnVtYmVyLCBiOiBzdHJpbmcpID0+IFVpbnQ4QXJyYXlcbiAqL1xuZnVuY3Rpb24gd2l0aFdhc20oZm4pIHtcbiAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgICBpZiAoIWJyaWRnZS53YXNtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBXQVNNIGludGVyZmFjZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIEVuc3VyZSB0aGF0IHlvdSB3YWl0IGZvciB0aGUgaW5pdGlhbGl6YXRpb24gUHJvbWlzZSB3aXRoIHdhaXRSZWFkeSgpIGZyb20gQHBvbGthZG90L3dhc20tY3J5cHRvIChvciBjcnlwdG9XYWl0UmVhZHkoKSBmcm9tIEBwb2xrYWRvdC91dGlsLWNyeXB0bykgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIFdBU00tb25seSBpbnRlcmZhY2VzLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbihicmlkZ2Uud2FzbSwgLi4ucGFyYW1zKTtcbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IGJpcDM5R2VuZXJhdGUgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCB3b3JkcykgPT4ge1xuICAgIHdhc20uZXh0X2JpcDM5X2dlbmVyYXRlKDgsIHdvcmRzKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFN0cmluZygpO1xufSk7XG5leHBvcnQgY29uc3QgYmlwMzlUb0VudHJvcHkgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwaHJhc2UpID0+IHtcbiAgICB3YXNtLmV4dF9iaXAzOV90b19lbnRyb3B5KDgsIC4uLmJyaWRnZS5hbGxvY1N0cmluZyhwaHJhc2UpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgYmlwMzlUb01pbmlTZWNyZXQgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwaHJhc2UsIHBhc3N3b3JkKSA9PiB7XG4gICAgd2FzbS5leHRfYmlwMzlfdG9fbWluaV9zZWNyZXQoOCwgLi4uYnJpZGdlLmFsbG9jU3RyaW5nKHBocmFzZSksIC4uLmJyaWRnZS5hbGxvY1N0cmluZyhwYXNzd29yZCkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBiaXAzOVRvU2VlZCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHBocmFzZSwgcGFzc3dvcmQpID0+IHtcbiAgICB3YXNtLmV4dF9iaXAzOV90b19zZWVkKDgsIC4uLmJyaWRnZS5hbGxvY1N0cmluZyhwaHJhc2UpLCAuLi5icmlkZ2UuYWxsb2NTdHJpbmcocGFzc3dvcmQpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgYmlwMzlWYWxpZGF0ZSA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHBocmFzZSkgPT4ge1xuICAgIGNvbnN0IHJldCA9IHdhc20uZXh0X2JpcDM5X3ZhbGlkYXRlKC4uLmJyaWRnZS5hbGxvY1N0cmluZyhwaHJhc2UpKTtcbiAgICByZXR1cm4gcmV0ICE9PSAwO1xufSk7XG5leHBvcnQgY29uc3QgZWQyNTUxOUtleXBhaXJGcm9tU2VlZCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHNlZWQpID0+IHtcbiAgICB3YXNtLmV4dF9lZF9mcm9tX3NlZWQoOCwgLi4uYnJpZGdlLmFsbG9jVThhKHNlZWQpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgZWQyNTUxOVNpZ24gPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwdWJrZXksIHNlY2tleSwgbWVzc2FnZSkgPT4ge1xuICAgIHdhc20uZXh0X2VkX3NpZ24oOCwgLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSksIC4uLmJyaWRnZS5hbGxvY1U4YShzZWNrZXkpLCAuLi5icmlkZ2UuYWxsb2NVOGEobWVzc2FnZSkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBlZDI1NTE5VmVyaWZ5ID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgc2lnbmF0dXJlLCBtZXNzYWdlLCBwdWJrZXkpID0+IHtcbiAgICBjb25zdCByZXQgPSB3YXNtLmV4dF9lZF92ZXJpZnkoLi4uYnJpZGdlLmFsbG9jVThhKHNpZ25hdHVyZSksIC4uLmJyaWRnZS5hbGxvY1U4YShtZXNzYWdlKSwgLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSkpO1xuICAgIHJldHVybiByZXQgIT09IDA7XG59KTtcbmV4cG9ydCBjb25zdCBzZWNwMjU2azFGcm9tU2VlZCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHNlY2tleSkgPT4ge1xuICAgIHdhc20uZXh0X3NlY3BfZnJvbV9zZWVkKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShzZWNrZXkpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3Qgc2VjcDI1NmsxQ29tcHJlc3MgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwdWJrZXkpID0+IHtcbiAgICB3YXNtLmV4dF9zZWNwX3B1Yl9jb21wcmVzcyg4LCAuLi5icmlkZ2UuYWxsb2NVOGEocHVia2V5KSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNlY3AyNTZrMUV4cGFuZCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHB1YmtleSkgPT4ge1xuICAgIHdhc20uZXh0X3NlY3BfcHViX2V4cGFuZCg4LCAuLi5icmlkZ2UuYWxsb2NVOGEocHVia2V5KSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNlY3AyNTZrMVJlY292ZXIgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBtc2dIYXNoLCBzaWcsIHJlY292ZXJ5KSA9PiB7XG4gICAgd2FzbS5leHRfc2VjcF9yZWNvdmVyKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShtc2dIYXNoKSwgLi4uYnJpZGdlLmFsbG9jVThhKHNpZyksIHJlY292ZXJ5KTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3Qgc2VjcDI1NmsxU2lnbiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIG1zZ0hhc2gsIHNlY2tleSkgPT4ge1xuICAgIHdhc20uZXh0X3NlY3Bfc2lnbig4LCAuLi5icmlkZ2UuYWxsb2NVOGEobXNnSGFzaCksIC4uLmJyaWRnZS5hbGxvY1U4YShzZWNrZXkpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3Qgc3IyNTUxOURlcml2ZUtleXBhaXJIYXJkID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgcGFpciwgY2MpID0+IHtcbiAgICB3YXNtLmV4dF9zcl9kZXJpdmVfa2V5cGFpcl9oYXJkKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShwYWlyKSwgLi4uYnJpZGdlLmFsbG9jVThhKGNjKSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNyMjU1MTlEZXJpdmVLZXlwYWlyU29mdCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHBhaXIsIGNjKSA9PiB7XG4gICAgd2FzbS5leHRfc3JfZGVyaXZlX2tleXBhaXJfc29mdCg4LCAuLi5icmlkZ2UuYWxsb2NVOGEocGFpciksIC4uLmJyaWRnZS5hbGxvY1U4YShjYykpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBzcjI1NTE5RGVyaXZlUHVibGljU29mdCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHB1YmtleSwgY2MpID0+IHtcbiAgICB3YXNtLmV4dF9zcl9kZXJpdmVfcHVibGljX3NvZnQoOCwgLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSksIC4uLmJyaWRnZS5hbGxvY1U4YShjYykpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBzcjI1NTE5S2V5cGFpckZyb21TZWVkID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgc2VlZCkgPT4ge1xuICAgIHdhc20uZXh0X3NyX2Zyb21fc2VlZCg4LCAuLi5icmlkZ2UuYWxsb2NVOGEoc2VlZCkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBzcjI1NTE5U2lnbiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHB1YmtleSwgc2VjcmV0LCBtZXNzYWdlKSA9PiB7XG4gICAgd2FzbS5leHRfc3Jfc2lnbig4LCAuLi5icmlkZ2UuYWxsb2NVOGEocHVia2V5KSwgLi4uYnJpZGdlLmFsbG9jVThhKHNlY3JldCksIC4uLmJyaWRnZS5hbGxvY1U4YShtZXNzYWdlKSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNyMjU1MTlWZXJpZnkgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBzaWduYXR1cmUsIG1lc3NhZ2UsIHB1YmtleSkgPT4ge1xuICAgIGNvbnN0IHJldCA9IHdhc20uZXh0X3NyX3ZlcmlmeSguLi5icmlkZ2UuYWxsb2NVOGEoc2lnbmF0dXJlKSwgLi4uYnJpZGdlLmFsbG9jVThhKG1lc3NhZ2UpLCAuLi5icmlkZ2UuYWxsb2NVOGEocHVia2V5KSk7XG4gICAgcmV0dXJuIHJldCAhPT0gMDtcbn0pO1xuZXhwb3J0IGNvbnN0IHNyMjU1MTlBZ3JlZSA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHB1YmtleSwgc2VjcmV0KSA9PiB7XG4gICAgd2FzbS5leHRfc3JfYWdyZWUoOCwgLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSksIC4uLmJyaWRnZS5hbGxvY1U4YShzZWNyZXQpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgdnJmU2lnbiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHNlY3JldCwgY29udGV4dCwgbWVzc2FnZSwgZXh0cmEpID0+IHtcbiAgICB3YXNtLmV4dF92cmZfc2lnbig4LCAuLi5icmlkZ2UuYWxsb2NVOGEoc2VjcmV0KSwgLi4uYnJpZGdlLmFsbG9jVThhKGNvbnRleHQpLCAuLi5icmlkZ2UuYWxsb2NVOGEobWVzc2FnZSksIC4uLmJyaWRnZS5hbGxvY1U4YShleHRyYSkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCB2cmZWZXJpZnkgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwdWJrZXksIGNvbnRleHQsIG1lc3NhZ2UsIGV4dHJhLCBvdXRBbmRQcm9vZikgPT4ge1xuICAgIGNvbnN0IHJldCA9IHdhc20uZXh0X3ZyZl92ZXJpZnkoLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSksIC4uLmJyaWRnZS5hbGxvY1U4YShjb250ZXh0KSwgLi4uYnJpZGdlLmFsbG9jVThhKG1lc3NhZ2UpLCAuLi5icmlkZ2UuYWxsb2NVOGEoZXh0cmEpLCAuLi5icmlkZ2UuYWxsb2NVOGEob3V0QW5kUHJvb2YpKTtcbiAgICByZXR1cm4gcmV0ICE9PSAwO1xufSk7XG5leHBvcnQgY29uc3QgYmxha2UyYiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIGRhdGEsIGtleSwgc2l6ZSkgPT4ge1xuICAgIHdhc20uZXh0X2JsYWtlMmIoOCwgLi4uYnJpZGdlLmFsbG9jVThhKGRhdGEpLCAuLi5icmlkZ2UuYWxsb2NVOGEoa2V5KSwgc2l6ZSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IGhtYWNTaGEyNTYgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBrZXksIGRhdGEpID0+IHtcbiAgICB3YXNtLmV4dF9obWFjX3NoYTI1Nig4LCAuLi5icmlkZ2UuYWxsb2NVOGEoa2V5KSwgLi4uYnJpZGdlLmFsbG9jVThhKGRhdGEpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgaG1hY1NoYTUxMiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIGtleSwgZGF0YSkgPT4ge1xuICAgIHdhc20uZXh0X2htYWNfc2hhNTEyKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShrZXkpLCAuLi5icmlkZ2UuYWxsb2NVOGEoZGF0YSkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBrZWNjYWsyNTYgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBkYXRhKSA9PiB7XG4gICAgd2FzbS5leHRfa2VjY2FrMjU2KDgsIC4uLmJyaWRnZS5hbGxvY1U4YShkYXRhKSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IGtlY2NhazUxMiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIGRhdGEpID0+IHtcbiAgICB3YXNtLmV4dF9rZWNjYWs1MTIoOCwgLi4uYnJpZGdlLmFsbG9jVThhKGRhdGEpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgcGJrZGYyID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgZGF0YSwgc2FsdCwgcm91bmRzKSA9PiB7XG4gICAgd2FzbS5leHRfcGJrZGYyKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShkYXRhKSwgLi4uYnJpZGdlLmFsbG9jVThhKHNhbHQpLCByb3VuZHMpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBzY3J5cHQgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwYXNzd29yZCwgc2FsdCwgbG9nMm4sIHIsIHApID0+IHtcbiAgICB3YXNtLmV4dF9zY3J5cHQoOCwgLi4uYnJpZGdlLmFsbG9jVThhKHBhc3N3b3JkKSwgLi4uYnJpZGdlLmFsbG9jVThhKHNhbHQpLCBsb2cybiwgciwgcCk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNoYTI1NiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIGRhdGEpID0+IHtcbiAgICB3YXNtLmV4dF9zaGEyNTYoOCwgLi4uYnJpZGdlLmFsbG9jVThhKGRhdGEpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3Qgc2hhNTEyID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgZGF0YSkgPT4ge1xuICAgIHdhc20uZXh0X3NoYTUxMig4LCAuLi5icmlkZ2UuYWxsb2NVOGEoZGF0YSkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCB0d294ID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgZGF0YSwgcm91bmRzKSA9PiB7XG4gICAgd2FzbS5leHRfdHdveCg4LCAuLi5icmlkZ2UuYWxsb2NVOGEoZGF0YSksIHJvdW5kcyk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuICEhYnJpZGdlLndhc207XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdFJlYWR5KCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHdhc20gPSBhd2FpdCBpbml0QnJpZGdlKCk7XG4gICAgICAgIHJldHVybiAhIXdhc207XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJyaWRnZSB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWJyaWRnZSc7XG5pbXBvcnQgeyBjcmVhdGVXYXNtIH0gZnJvbSAnQHBvbGthZG90L3dhc20tY3J5cHRvLWluaXQnO1xuLyoqXG4gKiBAbmFtZSBicmlkZ2VcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIEpTIDwtPiBXQVNNIGJyaWRnZSB0aGF0IGlzIGluIG9wZXJhdGlvbi4gRm9yIHRoZSBzcGVjaWZpYyBwYWNrYWdlXG4gKiBpdCBpcyBhIGdsb2JhbCwgaS5lLiBhbGwgb3BlcmF0aW9ucyBoYXBwZW5zIG9uIHRoaXMgc3BlY2lmaWMgYnJpZGdlXG4gKi9cbmV4cG9ydCBjb25zdCBicmlkZ2UgPSBuZXcgQnJpZGdlKGNyZWF0ZVdhc20pO1xuLyoqXG4gKiBAbmFtZSBpbml0QnJpZGdlXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZXMgYSBuZXcgYnJpZGdlIGludGVyZmFjZSB3aXRoIHRoZSAob3B0aW9uYWwpIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0QnJpZGdlKGNyZWF0ZVdhc20pIHtcbiAgICByZXR1cm4gYnJpZGdlLmluaXQoY3JlYXRlV2FzbSk7XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3Qvd2FzbS1jcnlwdG8nLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICc3LjMuMicgfTtcbiIsImNvbnN0IENIUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbmNvbnN0IG1hcCA9IG5ldyBBcnJheSgyNTYpO1xuZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gQ0hSLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBtYXBbQ0hSLmNoYXJDb2RlQXQoaSldID0gaTtcbn1cbi8qKlxuICogQG5hbWUgYmFzZTY0RGVjb2RlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgYmFzZTY0IGRlY29kaW5nIGZ1bmN0aW9uIHRoYXQgb3BlcmF0ZXMgaW4gYWxsIGVudmlyb25tZW50cy4gVW5saWtlIGRlY29kaW5nXG4gKiBmcm9tIEJ1ZmZlciAoTm9kZS5qcyBvbmx5KSBvciBhdG9iIChicm93c2VyLW9ubHkpIHRoaXMgaW1wbGVtZW50YXRpb24gaXNcbiAqIHNsaWdodGx5IHNsb3dlciwgYnV0IGl0IGlzIHBsYXRmb3JtIGluZGVwZW5kZW50LlxuICpcbiAqIEZvciBvdXIgdXNhZ2UsIHNpbmNlIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBzdGF0aWMgZmluYWwgc2l6ZSwgc28gd2UgZGVjb2RlXG4gKiB0byBhIHNwZWNpZmllZCBvdXRwdXQgYnVmZmVyLiBUaGlzIGFsc28gbWVhbnMgd2UgaGF2ZSBhcHBsaWVkIGEgbnVtYmVyIG9mXG4gKiBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoaXMgLSBjaGVja2luZyBvdXRwdXQgcG9zaXRpb24gaW5zdGVhZCBvZiBjaGFycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NERlY29kZShkYXRhLCBvdXQpIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgbGV0IGJpdHMgPSAwO1xuICAgIGxldCBwb3MgPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGFzdCA9IG91dC5sZW5ndGggLSAxOyBwb3MgIT09IGxhc3Q7IGkrKykge1xuICAgICAgICAvLyBlYWNoIGNoYXJhY3RlciByZXByZXNlbnRzIDYgYml0c1xuICAgICAgICBieXRlID0gKGJ5dGUgPDwgNikgfCBtYXBbZGF0YS5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgLy8gZWFjaCBieXRlIG5lZWRzIHRvIGNvbnRhaW4gOCBiaXRzXG4gICAgICAgIGlmICgoYml0cyArPSA2KSA+PSA4KSB7XG4gICAgICAgICAgICBvdXRbKytwb3NdID0gKGJ5dGUgPj4+IChiaXRzIC09IDgpKSAmIDB4ZmY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbiIsImNvbnN0IHU4ID0gVWludDhBcnJheSwgdTE2ID0gVWludDE2QXJyYXksIHUzMiA9IFVpbnQzMkFycmF5O1xuY29uc3QgY2xpbSA9IG5ldyB1OChbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0pO1xuY29uc3QgZmxlYiA9IG5ldyB1OChbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgMCwgLyogdW51c2VkICovIDAsIDAsIC8qIGltcG9zc2libGUgKi8gMF0pO1xuY29uc3QgZmRlYiA9IG5ldyB1OChbMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCwgOSwgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTMsIDEzLCAvKiB1bnVzZWQgKi8gMCwgMF0pO1xuY29uc3QgZnJlYiA9IChlYiwgc3RhcnQpID0+IHtcbiAgICBjb25zdCBiID0gbmV3IHUxNigzMSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMTsgKytpKSB7XG4gICAgICAgIGJbaV0gPSBzdGFydCArPSAxIDw8IGViW2kgLSAxXTtcbiAgICB9XG4gICAgLy8gbnVtYmVycyBoZXJlIGFyZSBhdCBtYXggMTggYml0c1xuICAgIGNvbnN0IHIgPSBuZXcgdTMyKGJbMzBdKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDMwOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGJbaV07IGogPCBiW2kgKyAxXTsgKytqKSB7XG4gICAgICAgICAgICByW2pdID0gKChqIC0gYltpXSkgPDwgNSkgfCBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbYiwgcl07XG59O1xuY29uc3QgW2ZsLCByZXZmbF0gPSBmcmViKGZsZWIsIDIpO1xuZmxbMjhdID0gMjU4LCByZXZmbFsyNThdID0gMjg7XG5jb25zdCBbZmRdID0gZnJlYihmZGViLCAwKTtcbmNvbnN0IHJldiA9IG5ldyB1MTYoMzI3NjgpO1xuZm9yIChsZXQgaSA9IDA7IGkgPCAzMjc2ODsgKytpKSB7XG4gICAgLy8gcmV2ZXJzZSB0YWJsZSBhbGdvcml0aG0gZnJvbSBTT1xuICAgIGxldCB4ID0gKChpICYgMHhBQUFBKSA+Pj4gMSkgfCAoKGkgJiAweDU1NTUpIDw8IDEpO1xuICAgIHggPSAoKHggJiAweENDQ0MpID4+PiAyKSB8ICgoeCAmIDB4MzMzMykgPDwgMik7XG4gICAgeCA9ICgoeCAmIDB4RjBGMCkgPj4+IDQpIHwgKCh4ICYgMHgwRjBGKSA8PCA0KTtcbiAgICByZXZbaV0gPSAoKCh4ICYgMHhGRjAwKSA+Pj4gOCkgfCAoKHggJiAweDAwRkYpIDw8IDgpKSA+Pj4gMTtcbn1cbmNvbnN0IGhNYXAgPSAoKGNkLCBtYiwgcikgPT4ge1xuICAgIGNvbnN0IHMgPSBjZC5sZW5ndGg7XG4gICAgLy8gaW5kZXhcbiAgICBsZXQgaSA9IDA7XG4gICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+ICMgb2YgY29kZXMgd2l0aCBiaXQgbGVuZ3RoID0gaW5kZXhcbiAgICBjb25zdCBsID0gbmV3IHUxNihtYik7XG4gICAgLy8gbGVuZ3RoIG9mIGNkIG11c3QgYmUgMjg4ICh0b3RhbCAjIG9mIGNvZGVzKVxuICAgIGZvciAoOyBpIDwgczsgKytpKSB7XG4gICAgICAgIGlmIChjZFtpXSlcbiAgICAgICAgICAgICsrbFtjZFtpXSAtIDFdO1xuICAgIH1cbiAgICAvLyB1MTYgXCJtYXBcIjogaW5kZXggLT4gbWluaW11bSBjb2RlIGZvciBiaXQgbGVuZ3RoID0gaW5kZXhcbiAgICBjb25zdCBsZSA9IG5ldyB1MTYobWIpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBtYjsgKytpKSB7XG4gICAgICAgIGxlW2ldID0gKGxlW2kgLSAxXSArIGxbaSAtIDFdKSA8PCAxO1xuICAgIH1cbiAgICBsZXQgY287XG4gICAgaWYgKHIpIHtcbiAgICAgICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+IG51bWJlciBvZiBhY3R1YWwgYml0cywgc3ltYm9sIGZvciBjb2RlXG4gICAgICAgIGNvID0gbmV3IHUxNigxIDw8IG1iKTtcbiAgICAgICAgLy8gYml0cyB0byByZW1vdmUgZm9yIHJldmVyc2VyXG4gICAgICAgIGNvbnN0IHJ2YiA9IDE1IC0gbWI7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSAwIGxlbmd0aHNcbiAgICAgICAgICAgIGlmIChjZFtpXSkge1xuICAgICAgICAgICAgICAgIC8vIG51bSBlbmNvZGluZyBib3RoIHN5bWJvbCBhbmQgYml0cyByZWFkXG4gICAgICAgICAgICAgICAgY29uc3Qgc3YgPSAoaSA8PCA0KSB8IGNkW2ldO1xuICAgICAgICAgICAgICAgIC8vIGZyZWUgYml0c1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBtYiAtIGNkW2ldO1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHZhbHVlXG4gICAgICAgICAgICAgICAgbGV0IHYgPSBsZVtjZFtpXSAtIDFdKysgPDwgcjtcbiAgICAgICAgICAgICAgICAvLyBtIGlzIGVuZCB2YWx1ZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSA9IHYgfCAoKDEgPDwgcikgLSAxKTsgdiA8PSBtOyArK3YpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlcnkgMTYgYml0IHZhbHVlIHN0YXJ0aW5nIHdpdGggdGhlIGNvZGUgeWllbGRzIHRoZSBzYW1lIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICBjb1tyZXZbdl0gPj4gcnZiXSA9IHN2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY28gPSBuZXcgdTE2KHMpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgczsgKytpKSB7XG4gICAgICAgICAgICBpZiAoY2RbaV0pIHtcbiAgICAgICAgICAgICAgICBjb1tpXSA9IHJldltsZVtjZFtpXSAtIDFdKytdID4+ICgxNSAtIGNkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY287XG59KTtcbmNvbnN0IGZsdCA9IG5ldyB1OCgyODgpO1xuZm9yIChsZXQgaSA9IDA7IGkgPCAxNDQ7ICsraSlcbiAgICBmbHRbaV0gPSA4O1xuZm9yIChsZXQgaSA9IDE0NDsgaSA8IDI1NjsgKytpKVxuICAgIGZsdFtpXSA9IDk7XG5mb3IgKGxldCBpID0gMjU2OyBpIDwgMjgwOyArK2kpXG4gICAgZmx0W2ldID0gNztcbmZvciAobGV0IGkgPSAyODA7IGkgPCAyODg7ICsraSlcbiAgICBmbHRbaV0gPSA4O1xuY29uc3QgZmR0ID0gbmV3IHU4KDMyKTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMzI7ICsraSlcbiAgICBmZHRbaV0gPSA1O1xuY29uc3QgZmxybSA9IGhNYXAoZmx0LCA5LCAxKTtcbmNvbnN0IGZkcm0gPSBoTWFwKGZkdCwgNSwgMSk7XG5jb25zdCBiaXRzID0gKGQsIHAsIG0pID0+IHtcbiAgICBjb25zdCBvID0gcCA+Pj4gMztcbiAgICByZXR1cm4gKChkW29dIHwgKGRbbyArIDFdIDw8IDgpKSA+Pj4gKHAgJiA3KSkgJiBtO1xufTtcbmNvbnN0IGJpdHMxNiA9IChkLCBwKSA9PiB7XG4gICAgY29uc3QgbyA9IHAgPj4+IDM7XG4gICAgcmV0dXJuICgoZFtvXSB8IChkW28gKyAxXSA8PCA4KSB8IChkW28gKyAyXSA8PCAxNikpID4+PiAocCAmIDcpKTtcbn07XG5jb25zdCBzaGZ0ID0gKHApID0+IChwID4+PiAzKSArIChwICYgNyAmJiAxKTtcbmNvbnN0IHNsYyA9ICh2LCBzLCBlKSA9PiB7XG4gICAgaWYgKHMgPT0gbnVsbCB8fCBzIDwgMClcbiAgICAgICAgcyA9IDA7XG4gICAgaWYgKGUgPT0gbnVsbCB8fCBlID4gdi5sZW5ndGgpXG4gICAgICAgIGUgPSB2Lmxlbmd0aDtcbiAgICAvLyBjYW4ndCB1c2UgLmNvbnN0cnVjdG9yIGluIGNhc2UgdXNlci1zdXBwbGllZFxuICAgIGNvbnN0IG4gPSBuZXcgKHYgaW5zdGFuY2VvZiB1MTYgPyB1MTYgOiB2IGluc3RhbmNlb2YgdTMyID8gdTMyIDogdTgpKGUgLSBzKTtcbiAgICBuLnNldCh2LnN1YmFycmF5KHMsIGUpKTtcbiAgICByZXR1cm4gbjtcbn07XG5jb25zdCBtYXggPSAoYSkgPT4ge1xuICAgIGxldCBtID0gYVswXTtcbiAgICBmb3IgKGxldCBpID0gMSwgY291bnQgPSBhLmxlbmd0aDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgaWYgKGFbaV0gPiBtKVxuICAgICAgICAgICAgbSA9IGFbaV07XG4gICAgfVxuICAgIHJldHVybiBtO1xufTtcbmNvbnN0IGluZmx0ID0gKGRhdCwgYnVmLCBzdCkgPT4ge1xuICAgIGNvbnN0IG5vU3QgPSAhc3QgfHwgc3QuaTtcbiAgICBpZiAoIXN0KVxuICAgICAgICBzdCA9IHt9O1xuICAgIC8vIHNvdXJjZSBsZW5ndGhcbiAgICBjb25zdCBzbCA9IGRhdC5sZW5ndGg7XG4gICAgLy8gaGF2ZSB0byBlc3RpbWF0ZSBzaXplXG4gICAgY29uc3Qgbm9CdWYgPSAhYnVmIHx8ICFub1N0O1xuICAgIC8vIEFzc3VtZXMgcm91Z2hseSAzMyUgY29tcHJlc3Npb24gcmF0aW8gYXZlcmFnZVxuICAgIGlmICghYnVmKVxuICAgICAgICBidWYgPSBuZXcgdTgoc2wgKiAzKTtcbiAgICAvLyBlbnN1cmUgYnVmZmVyIGNhbiBmaXQgYXQgbGVhc3QgbCBlbGVtZW50c1xuICAgIGNvbnN0IGNidWYgPSAobCkgPT4ge1xuICAgICAgICBsZXQgYmwgPSBidWYubGVuZ3RoO1xuICAgICAgICAvLyBuZWVkIHRvIGluY3JlYXNlIHNpemUgdG8gZml0XG4gICAgICAgIGlmIChsID4gYmwpIHtcbiAgICAgICAgICAgIC8vIERvdWJsZSBvciBzZXQgdG8gbmVjZXNzYXJ5LCB3aGljaGV2ZXIgaXMgZ3JlYXRlclxuICAgICAgICAgICAgY29uc3QgbmJ1ZiA9IG5ldyB1OChNYXRoLm1heChibCA8PCAxLCBsKSk7XG4gICAgICAgICAgICBuYnVmLnNldChidWYpO1xuICAgICAgICAgICAgYnVmID0gbmJ1ZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gIGxhc3QgY2h1bmsgICAgICAgICBiaXRwb3MgICAgICAgICAgIGJ5dGVzXG4gICAgbGV0IGZpbmFsID0gc3QuZiB8fCAwLCBwb3MgPSBzdC5wIHx8IDAsIGJ0ID0gc3QuYiB8fCAwLCBsbSA9IHN0LmwsIGRtID0gc3QuZCwgbGJ0ID0gc3QubSwgZGJ0ID0gc3QubjtcbiAgICBpZiAoZmluYWwgJiYgIWxtKVxuICAgICAgICByZXR1cm4gYnVmO1xuICAgIC8vIHRvdGFsIGJpdHNcbiAgICBjb25zdCB0YnRzID0gc2wgPDwgMztcbiAgICBkbyB7XG4gICAgICAgIGlmICghbG0pIHtcbiAgICAgICAgICAgIC8vIEJGSU5BTCAtIHRoaXMgaXMgb25seSAxIHdoZW4gbGFzdCBjaHVuayBpcyBuZXh0XG4gICAgICAgICAgICBzdC5mID0gZmluYWwgPSBiaXRzKGRhdCwgcG9zLCAxKTtcbiAgICAgICAgICAgIC8vIHR5cGU6IDAgPSBubyBjb21wcmVzc2lvbiwgMSA9IGZpeGVkIGh1ZmZtYW4sIDIgPSBkeW5hbWljIGh1ZmZtYW5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBiaXRzKGRhdCwgcG9zICsgMSwgMyk7XG4gICAgICAgICAgICBwb3MgKz0gMztcbiAgICAgICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGdvIHRvIGVuZCBvZiBieXRlIGJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IHNoZnQocG9zKSArIDQsIGwgPSBkYXRbcyAtIDRdIHwgKGRhdFtzIC0gM10gPDwgOCksIHQgPSBzICsgbDtcbiAgICAgICAgICAgICAgICBpZiAodCA+IHNsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ3VuZXhwZWN0ZWQgRU9GJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBzaXplXG4gICAgICAgICAgICAgICAgaWYgKG5vQnVmKVxuICAgICAgICAgICAgICAgICAgICBjYnVmKGJ0ICsgbCk7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBvdmVyIHVuY29tcHJlc3NlZCBkYXRhXG4gICAgICAgICAgICAgICAgYnVmLnNldChkYXQuc3ViYXJyYXkocywgdCksIGJ0KTtcbiAgICAgICAgICAgICAgICAvLyBHZXQgbmV3IGJpdHBvcywgdXBkYXRlIGJ5dGUgY291bnRcbiAgICAgICAgICAgICAgICBzdC5iID0gYnQgKz0gbCwgc3QucCA9IHBvcyA9IHQgPDwgMztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMSlcbiAgICAgICAgICAgICAgICBsbSA9IGZscm0sIGRtID0gZmRybSwgbGJ0ID0gOSwgZGJ0ID0gNTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMikge1xuICAgICAgICAgICAgICAgIC8vICBsaXRlcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aHNcbiAgICAgICAgICAgICAgICBjb25zdCBoTGl0ID0gYml0cyhkYXQsIHBvcywgMzEpICsgMjU3LCBoY0xlbiA9IGJpdHMoZGF0LCBwb3MgKyAxMCwgMTUpICsgNDtcbiAgICAgICAgICAgICAgICBjb25zdCB0bCA9IGhMaXQgKyBiaXRzKGRhdCwgcG9zICsgNSwgMzEpICsgMTtcbiAgICAgICAgICAgICAgICBwb3MgKz0gMTQ7XG4gICAgICAgICAgICAgICAgLy8gbGVuZ3RoK2Rpc3RhbmNlIHRyZWVcbiAgICAgICAgICAgICAgICBjb25zdCBsZHQgPSBuZXcgdTgodGwpO1xuICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RoIHRyZWVcbiAgICAgICAgICAgICAgICBjb25zdCBjbHQgPSBuZXcgdTgoMTkpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGNMZW47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1c2UgaW5kZXggbWFwIHRvIGdldCByZWFsIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgY2x0W2NsaW1baV1dID0gYml0cyhkYXQsIHBvcyArIGkgKiAzLCA3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcG9zICs9IGhjTGVuICogMztcbiAgICAgICAgICAgICAgICAvLyBjb2RlIGxlbmd0aHMgYml0c1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYiA9IG1heChjbHQpLCBjbGJtc2sgPSAoMSA8PCBjbGIpIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vU3QgJiYgcG9zICsgdGwgKiAoY2xiICsgNykgPiB0YnRzKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAvLyBjb2RlIGxlbmd0aHMgbWFwXG4gICAgICAgICAgICAgICAgY29uc3QgY2xtID0gaE1hcChjbHQsIGNsYiwgMSk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bDspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGNsbVtiaXRzKGRhdCwgcG9zLCBjbGJtc2spXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYml0cyByZWFkXG4gICAgICAgICAgICAgICAgICAgIHBvcyArPSByICYgMTU7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN5bWJvbFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gciA+Pj4gNDtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29kZSBsZW5ndGggdG8gY29weVxuICAgICAgICAgICAgICAgICAgICBpZiAocyA8IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZHRbaSsrXSA9IHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgY29weSAgIGNvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYyA9IDAsIG4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDMgKyBiaXRzKGRhdCwgcG9zLCAzKSwgcG9zICs9IDIsIGMgPSBsZHRbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocyA9PSAxNylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMyArIGJpdHMoZGF0LCBwb3MsIDcpLCBwb3MgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMgPT0gMTgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDExICsgYml0cyhkYXQsIHBvcywgMTI3KSwgcG9zICs9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobi0tKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxkdFtpKytdID0gYztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICBsZW5ndGggdHJlZSAgICAgICAgICAgICAgICAgZGlzdGFuY2UgdHJlZVxuICAgICAgICAgICAgICAgIGNvbnN0IGx0ID0gbGR0LnN1YmFycmF5KDAsIGhMaXQpLCBkdCA9IGxkdC5zdWJhcnJheShoTGl0KTtcbiAgICAgICAgICAgICAgICAvLyBtYXggbGVuZ3RoIGJpdHNcbiAgICAgICAgICAgICAgICBsYnQgPSBtYXgobHQpO1xuICAgICAgICAgICAgICAgIC8vIG1heCBkaXN0IGJpdHNcbiAgICAgICAgICAgICAgICBkYnQgPSBtYXgoZHQpO1xuICAgICAgICAgICAgICAgIGxtID0gaE1hcChsdCwgbGJ0LCAxKTtcbiAgICAgICAgICAgICAgICBkbSA9IGhNYXAoZHQsIGRidCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgJ2ludmFsaWQgYmxvY2sgdHlwZSc7XG4gICAgICAgICAgICBpZiAocG9zID4gdGJ0cylcbiAgICAgICAgICAgICAgICB0aHJvdyAndW5leHBlY3RlZCBFT0YnO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIGNhbiBob2xkIHRoaXMgKyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBhZGRpdGlvblxuICAgICAgICAvLyBtYXhpbXVtIGNodW5rIHNpemUgKHByYWN0aWNhbGx5LCB0aGVvcmV0aWNhbGx5IGluZmluaXRlKSBpcyAyXjE3O1xuICAgICAgICBpZiAobm9CdWYpXG4gICAgICAgICAgICBjYnVmKGJ0ICsgMTMxMDcyKTtcbiAgICAgICAgY29uc3QgbG1zID0gKDEgPDwgbGJ0KSAtIDEsIGRtcyA9ICgxIDw8IGRidCkgLSAxO1xuICAgICAgICBjb25zdCBteGEgPSBsYnQgKyBkYnQgKyAxODtcbiAgICAgICAgd2hpbGUgKG5vU3QgfHwgcG9zICsgbXhhIDwgdGJ0cykge1xuICAgICAgICAgICAgLy8gYml0cyByZWFkLCBjb2RlXG4gICAgICAgICAgICBjb25zdCBjID0gbG1bYml0czE2KGRhdCwgcG9zKSAmIGxtc10sIHN5bSA9IGMgPj4+IDQ7XG4gICAgICAgICAgICBwb3MgKz0gYyAmIDE1O1xuICAgICAgICAgICAgaWYgKHBvcyA+IHRidHMpXG4gICAgICAgICAgICAgICAgdGhyb3cgJ3VuZXhwZWN0ZWQgRU9GJztcbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgICB0aHJvdyAnaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCc7XG4gICAgICAgICAgICBpZiAoc3ltIDwgMjU2KVxuICAgICAgICAgICAgICAgIGJ1ZltidCsrXSA9IHN5bTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHN5bSA9PSAyNTYpIHtcbiAgICAgICAgICAgICAgICBsbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBhZGQgPSBzeW0gLSAyNTQ7XG4gICAgICAgICAgICAgICAgLy8gbm8gZXh0cmEgYml0cyBuZWVkZWQgaWYgbGVzc1xuICAgICAgICAgICAgICAgIGlmIChzeW0gPiAyNjQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IHN5bSAtIDI1NywgYiA9IGZsZWJbaV07XG4gICAgICAgICAgICAgICAgICAgIGFkZCA9IGJpdHMoZGF0LCBwb3MsICgxIDw8IGIpIC0gMSkgKyBmbFtpXTtcbiAgICAgICAgICAgICAgICAgICAgcG9zICs9IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRpc3RcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZG1bYml0czE2KGRhdCwgcG9zKSAmIGRtc10sIGRzeW0gPSBkID4+PiA0O1xuICAgICAgICAgICAgICAgIGlmICghZClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ2ludmFsaWQgZGlzdGFuY2UnO1xuICAgICAgICAgICAgICAgIHBvcyArPSBkICYgMTU7XG4gICAgICAgICAgICAgICAgbGV0IGR0ID0gZmRbZHN5bV07XG4gICAgICAgICAgICAgICAgaWYgKGRzeW0gPiAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBmZGViW2RzeW1dO1xuICAgICAgICAgICAgICAgICAgICBkdCArPSBiaXRzMTYoZGF0LCBwb3MpICYgKCgxIDw8IGIpIC0gMSksIHBvcyArPSBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocG9zID4gdGJ0cylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ3VuZXhwZWN0ZWQgRU9GJztcbiAgICAgICAgICAgICAgICBpZiAobm9CdWYpXG4gICAgICAgICAgICAgICAgICAgIGNidWYoYnQgKyAxMzEwNzIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGJ0ICsgYWRkO1xuICAgICAgICAgICAgICAgIGZvciAoOyBidCA8IGVuZDsgYnQgKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICBidWZbYnRdID0gYnVmW2J0IC0gZHRdO1xuICAgICAgICAgICAgICAgICAgICBidWZbYnQgKyAxXSA9IGJ1ZltidCArIDEgLSBkdF07XG4gICAgICAgICAgICAgICAgICAgIGJ1ZltidCArIDJdID0gYnVmW2J0ICsgMiAtIGR0XTtcbiAgICAgICAgICAgICAgICAgICAgYnVmW2J0ICsgM10gPSBidWZbYnQgKyAzIC0gZHRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidCA9IGVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdC5sID0gbG0sIHN0LnAgPSBwb3MsIHN0LmIgPSBidDtcbiAgICAgICAgaWYgKGxtKVxuICAgICAgICAgICAgZmluYWwgPSAxLCBzdC5tID0gbGJ0LCBzdC5kID0gZG0sIHN0Lm4gPSBkYnQ7XG4gICAgfSB3aGlsZSAoIWZpbmFsKTtcbiAgICByZXR1cm4gYnQgPT0gYnVmLmxlbmd0aCA/IGJ1ZiA6IHNsYyhidWYsIDAsIGJ0KTtcbn07XG5jb25zdCB6bHYgPSAoZCkgPT4ge1xuICAgIGlmICgoZFswXSAmIDE1KSAhPSA4IHx8IChkWzBdID4+PiA0KSA+IDcgfHwgKChkWzBdIDw8IDggfCBkWzFdKSAlIDMxKSlcbiAgICAgICAgdGhyb3cgJ2ludmFsaWQgemxpYiBkYXRhJztcbiAgICBpZiAoZFsxXSAmIDMyKVxuICAgICAgICB0aHJvdyAnaW52YWxpZCB6bGliIGRhdGE6IHByZXNldCBkaWN0aW9uYXJpZXMgbm90IHN1cHBvcnRlZCc7XG59O1xuLyoqXG4gKiBFeHBhbmRzIFpsaWIgZGF0YVxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb21wcmVzc1xuICogQHBhcmFtIG91dCBXaGVyZSB0byB3cml0ZSB0aGUgZGF0YS4gU2F2ZXMgbWVtb3J5IGlmIHlvdSBrbm93IHRoZSBkZWNvbXByZXNzZWQgc2l6ZSBhbmQgcHJvdmlkZSBhbiBvdXRwdXQgYnVmZmVyIG9mIHRoYXQgbGVuZ3RoLlxuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnpsaWJTeW5jKGRhdGEsIG91dCkge1xuICAgIHJldHVybiBpbmZsdCgoemx2KGRhdGEpLCBkYXRhLnN1YmFycmF5KDIsIC00KSksIG91dCk7XG59XG4iLCJpbXBvcnQgeyBleHRyYWN0R2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmV4cG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIFRoZXJlIGFyZSBfc3RpbGxfIHNvbWUgb2xkZXIgZW52aXJvbm1lbnRzIChzcGVjaWZpY2FsbHkgUk4gPCAwLjcwKSwgdGhhdCBkb2VzXG4gKiBub3QgaGF2ZSBwcm9wZXIgQmlnSW50IHN1cHBvcnQgLSBhIG5vbi13b3JraW5nIGZhbGxiYWNrIGlzIHByb3ZpZGVkIGZvciB0aG9zZS5cbiAqXG4gKiBXZSBkZXRlY3QgYXZhaWxhYmlsaXR5IG9mIEJpZ0ludCB1cG9uIHVzYWdlLCBzbyB0aGlzIGlzIHB1cmVseSB0byBhbGxvdyBmdW5jdGlvbmFsXG4gKiBjb21waWxhdGlvbiAmIGJ1bmRsaW5nLiBTaW5jZSB3ZSBoYXZlIG9wZXJhdG9ycyBzdWNoIGFzICorLS8gdG9wLWxldmVsLCBhIG51bWJlci1pc2hcbiAqIHJlc3VsdCBpcyB1c2VkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRGYWxsYmFjaygpIHtcbiAgICByZXR1cm4gTnVtYmVyLk5hTjtcbn1cbmV4cG9ydCBjb25zdCBCaWdJbnQgPSAvKiNfX1BVUkVfXyovIGV4dHJhY3RHbG9iYWwoJ0JpZ0ludCcsIGludmFsaWRGYWxsYmFjayk7XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QveC1iaWdpbnQnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCJleHBvcnQgeyBwYWNrYWdlSW5mbyB9IGZyb20gJy4vcGFja2FnZUluZm8uanMnO1xuLyoqIEBpbnRlcm5hbCBMYXN0LXJlc29ydCBcInRoaXNcIiwgaWYgaXQgZ2V0cyBoZXJlIGl0IHByb2JhYmx5IHdvdWxkIGZhaWwgYW55d2F5ICovXG5mdW5jdGlvbiBldmFsdWF0ZVRoaXMoZm4pIHtcbiAgICByZXR1cm4gZm4oJ3JldHVybiB0aGlzJyk7XG59XG4vKipcbiAqIEEgY3Jvc3MtZW52aXJvbm1lbnQgaW1wbGVtZW50YXRpb24gZm9yIGdsb2JhbFRoaXNcbiAqL1xuZXhwb3J0IGNvbnN0IHhnbG9iYWwgPSAvKiNfX1BVUkVfXyovICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IGdsb2JhbFRoaXNcbiAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gZ2xvYmFsXG4gICAgICAgIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IHNlbGZcbiAgICAgICAgICAgIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICA/IHdpbmRvd1xuICAgICAgICAgICAgICAgIDogZXZhbHVhdGVUaGlzKEZ1bmN0aW9uKSk7XG4vKipcbiAqIEV4dHJhY3RzIGEga25vd24gZ2xvYmFsIGZyb20gdGhlIGVudmlyb25tZW50LCBhcHBseWluZyBhIGZhbGxiYWNrIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEdsb2JhbChuYW1lLCBmYWxsYmFjaykge1xuICAgIC8vIE5vdCBxdWl0ZSBzdXJlIHdoeSB0aGlzIGlzIGhlcmUgLSBzbnVjayBpbiB3aXRoIFRTIDQuNy4yIHdpdGggbm8gcmVhbCBpZGVhXG4gICAgLy8gKGFzIG9mIG5vdykgYXMgdG8gd2h5IHRoaXMgbG9va3MgbGlrZSBhbiBcImFueVwiIHdoZW4gd2UgZG8gY2FzdCBpdCB0byBhIFRcbiAgICAvL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiB0eXBlb2YgeGdsb2JhbFtuYW1lXSA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBmYWxsYmFja1xuICAgICAgICA6IHhnbG9iYWxbbmFtZV07XG59XG4vKipcbiAqIEV4cG9zZSBhIHZhbHVlIGFzIGEga25vd24gZ2xvYmFsLCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvc2VHbG9iYWwobmFtZSwgZmFsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIHhnbG9iYWxbbmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHhnbG9iYWxbbmFtZV0gPSBmYWxsYmFjaztcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QveC1nbG9iYWwnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCJpbXBvcnQgeyB4Z2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmV4cG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG5leHBvcnQgY29uc3QgY3J5cHRvID0geGdsb2JhbC5jcnlwdG87XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tVmFsdWVzKGFycikge1xuICAgIHJldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QveC1yYW5kb212YWx1ZXMnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCJpbXBvcnQgeyBleHRyYWN0R2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmltcG9ydCB7IFRleHREZWNvZGVyIGFzIEZhbGxiYWNrIH0gZnJvbSAnLi9mYWxsYmFjay5qcyc7XG5leHBvcnQgeyBwYWNrYWdlSW5mbyB9IGZyb20gJy4vcGFja2FnZUluZm8uanMnO1xuZXhwb3J0IGNvbnN0IFRleHREZWNvZGVyID0gLyojX19QVVJFX18qLyBleHRyYWN0R2xvYmFsKCdUZXh0RGVjb2RlcicsIEZhbGxiYWNrKTtcbiIsImV4cG9ydCBjbGFzcyBUZXh0RGVjb2RlciB7XG4gICAgX19lbmNvZGluZztcbiAgICBjb25zdHJ1Y3RvcihlbmNvZGluZykge1xuICAgICAgICB0aGlzLl9fZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICB9XG4gICAgZGVjb2RlKHZhbHVlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdmFsdWUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWVbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiAnQHBvbGthZG90L3gtdGV4dGRlY29kZXInLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCJpbXBvcnQgeyBleHRyYWN0R2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmltcG9ydCB7IFRleHRFbmNvZGVyIGFzIEZhbGxiYWNrIH0gZnJvbSAnLi9mYWxsYmFjay5qcyc7XG5leHBvcnQgeyBwYWNrYWdlSW5mbyB9IGZyb20gJy4vcGFja2FnZUluZm8uanMnO1xuZXhwb3J0IGNvbnN0IFRleHRFbmNvZGVyID0gLyojX19QVVJFX18qLyBleHRyYWN0R2xvYmFsKCdUZXh0RW5jb2RlcicsIEZhbGxiYWNrKTtcbiIsImV4cG9ydCBjbGFzcyBUZXh0RW5jb2RlciB7XG4gICAgZW5jb2RlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBjb25zdCB1OGEgPSBuZXcgVWludDhBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdThhW2ldID0gdmFsdWUuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdThhO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogJ0Bwb2xrYWRvdC94LXRleHRlbmNvZGVyJywgcGF0aDogKGltcG9ydC5tZXRhICYmIGltcG9ydC5tZXRhLnVybCkgPyBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUuc3Vic3RyaW5nKDAsIG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5sYXN0SW5kZXhPZignLycpICsgMSkgOiAnYXV0bycsIHR5cGU6ICdlc20nLCB2ZXJzaW9uOiAnMTIuNi4yJyB9O1xuIiwiaW1wb3J0IHsgeGdsb2JhbCB9IGZyb20gJ0Bwb2xrYWRvdC94LWdsb2JhbCc7XG5leHBvcnQgeyBwYWNrYWdlSW5mbyB9IGZyb20gJy4vcGFja2FnZUluZm8uanMnO1xuZXhwb3J0IGNvbnN0IFdlYlNvY2tldCA9IHhnbG9iYWwuV2ViU29ja2V0O1xuIiwiZXhwb3J0IGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiAnQHBvbGthZG90L3gtd3MnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCIvKiEgc2N1cmUtYmFzZSAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL1xuLy8gVXRpbGl0aWVzXG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROdW1iZXIobikge1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIobikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW50ZWdlcjogJHtufWApO1xufVxuZnVuY3Rpb24gaXNCeXRlcyhhKSB7XG4gICAgcmV0dXJuIChhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fFxuICAgICAgICAoYSAhPSBudWxsICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVaW50OEFycmF5JykpO1xufVxuLyoqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBjaGFpbiguLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSAoYSkgPT4gYTtcbiAgICAvLyBXcmFwIGNhbGwgaW4gY2xvc3VyZSBzbyBKSVQgY2FuIGlubGluZSBjYWxsc1xuICAgIGNvbnN0IHdyYXAgPSAoYSwgYikgPT4gKGMpID0+IGEoYihjKSk7XG4gICAgLy8gQ29uc3RydWN0IGNoYWluIG9mIGFyZ3NbLTFdLmVuY29kZShhcmdzWy0yXS5lbmNvZGUoWy4uLl0pKVxuICAgIGNvbnN0IGVuY29kZSA9IGFyZ3MubWFwKCh4KSA9PiB4LmVuY29kZSkucmVkdWNlUmlnaHQod3JhcCwgaWQpO1xuICAgIC8vIENvbnN0cnVjdCBjaGFpbiBvZiBhcmdzWzBdLmRlY29kZShhcmdzWzFdLmRlY29kZSguLi4pKVxuICAgIGNvbnN0IGRlY29kZSA9IGFyZ3MubWFwKCh4KSA9PiB4LmRlY29kZSkucmVkdWNlKHdyYXAsIGlkKTtcbiAgICByZXR1cm4geyBlbmNvZGUsIGRlY29kZSB9O1xufVxuLyoqXG4gKiBFbmNvZGVzIGludGVnZXIgcmFkaXggcmVwcmVzZW50YXRpb24gdG8gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyBhbHBoYWJldCBhbmQgYmFja1xuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gYWxwaGFiZXQoYWxwaGFiZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbmNvZGU6IChkaWdpdHMpID0+IHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkaWdpdHMpIHx8IChkaWdpdHMubGVuZ3RoICYmIHR5cGVvZiBkaWdpdHNbMF0gIT09ICdudW1iZXInKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FscGhhYmV0LmVuY29kZSBpbnB1dCBzaG91bGQgYmUgYW4gYXJyYXkgb2YgbnVtYmVycycpO1xuICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cy5tYXAoKGkpID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROdW1iZXIoaSk7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gYWxwaGFiZXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZ2l0IGluZGV4IG91dHNpZGUgYWxwaGFiZXQ6ICR7aX0gKGFscGhhYmV0OiAke2FscGhhYmV0Lmxlbmd0aH0pYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFscGhhYmV0W2ldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZTogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpIHx8IChpbnB1dC5sZW5ndGggJiYgdHlwZW9mIGlucHV0WzBdICE9PSAnc3RyaW5nJykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbHBoYWJldC5kZWNvZGUgaW5wdXQgc2hvdWxkIGJlIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5tYXAoKGxldHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGV0dGVyICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbHBoYWJldC5kZWNvZGU6IG5vdCBzdHJpbmcgZWxlbWVudD0ke2xldHRlcn1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFscGhhYmV0LmluZGV4T2YobGV0dGVyKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGV0dGVyOiBcIiR7bGV0dGVyfVwiLiBBbGxvd2VkOiAke2FscGhhYmV0fWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yID0gJycpIHtcbiAgICBpZiAodHlwZW9mIHNlcGFyYXRvciAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignam9pbiBzZXBhcmF0b3Igc2hvdWxkIGJlIHN0cmluZycpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZTogKGZyb20pID0+IHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShmcm9tKSB8fCAoZnJvbS5sZW5ndGggJiYgdHlwZW9mIGZyb21bMF0gIT09ICdzdHJpbmcnKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2pvaW4uZW5jb2RlIGlucHV0IHNob3VsZCBiZSBhcnJheSBvZiBzdHJpbmdzJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpIG9mIGZyb20pXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBqb2luLmVuY29kZTogbm9uLXN0cmluZyBpbnB1dD0ke2l9YCk7XG4gICAgICAgICAgICByZXR1cm4gZnJvbS5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZTogKHRvKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRvICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2pvaW4uZGVjb2RlIGlucHV0IHNob3VsZCBiZSBzdHJpbmcnKTtcbiAgICAgICAgICAgIHJldHVybiB0by5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIFBhZCBzdHJpbmdzIGFycmF5IHNvIGl0IGhhcyBpbnRlZ2VyIG51bWJlciBvZiBiaXRzXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBwYWRkaW5nKGJpdHMsIGNociA9ICc9Jykge1xuICAgIGFzc2VydE51bWJlcihiaXRzKTtcbiAgICBpZiAodHlwZW9mIGNociAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFkZGluZyBjaHIgc2hvdWxkIGJlIHN0cmluZycpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZShkYXRhKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgKGRhdGEubGVuZ3RoICYmIHR5cGVvZiBkYXRhWzBdICE9PSAnc3RyaW5nJykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYWRkaW5nLmVuY29kZSBpbnB1dCBzaG91bGQgYmUgYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSBvZiBkYXRhKVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFkZGluZy5lbmNvZGU6IG5vbi1zdHJpbmcgaW5wdXQ9JHtpfWApO1xuICAgICAgICAgICAgd2hpbGUgKChkYXRhLmxlbmd0aCAqIGJpdHMpICUgOClcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goY2hyKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9LFxuICAgICAgICBkZWNvZGUoaW5wdXQpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkgfHwgKGlucHV0Lmxlbmd0aCAmJiB0eXBlb2YgaW5wdXRbMF0gIT09ICdzdHJpbmcnKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhZGRpbmcuZW5jb2RlIGlucHV0IHNob3VsZCBiZSBhcnJheSBvZiBzdHJpbmdzJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpIG9mIGlucHV0KVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFkZGluZy5kZWNvZGU6IG5vbi1zdHJpbmcgaW5wdXQ9JHtpfWApO1xuICAgICAgICAgICAgbGV0IGVuZCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICgoZW5kICogYml0cykgJSA4KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYWRkaW5nOiBzdHJpbmcgc2hvdWxkIGhhdmUgd2hvbGUgbnVtYmVyIG9mIGJ5dGVzJyk7XG4gICAgICAgICAgICBmb3IgKDsgZW5kID4gMCAmJiBpbnB1dFtlbmQgLSAxXSA9PT0gY2hyOyBlbmQtLSkge1xuICAgICAgICAgICAgICAgIGlmICghKCgoZW5kIC0gMSkgKiBiaXRzKSAlIDgpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFkZGluZzogc3RyaW5nIGhhcyB0b28gbXVjaCBwYWRkaW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuc2xpY2UoMCwgZW5kKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLyoqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBub3JtYWxpemUoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vcm1hbGl6ZSBmbiBzaG91bGQgYmUgZnVuY3Rpb24nKTtcbiAgICByZXR1cm4geyBlbmNvZGU6IChmcm9tKSA9PiBmcm9tLCBkZWNvZGU6ICh0bykgPT4gZm4odG8pIH07XG59XG4vKipcbiAqIFNsb3c6IE8obl4yKSB0aW1lIGNvbXBsZXhpdHlcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSYWRpeChkYXRhLCBmcm9tLCB0bykge1xuICAgIC8vIGJhc2UgMSBpcyBpbXBvc3NpYmxlXG4gICAgaWYgKGZyb20gPCAyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDogd3JvbmcgZnJvbT0ke2Zyb219LCBiYXNlIGNhbm5vdCBiZSBsZXNzIHRoYW4gMmApO1xuICAgIGlmICh0byA8IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4OiB3cm9uZyB0bz0ke3RvfSwgYmFzZSBjYW5ub3QgYmUgbGVzcyB0aGFuIDJgKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29udmVydFJhZGl4OiBkYXRhIHNob3VsZCBiZSBhcnJheScpO1xuICAgIGlmICghZGF0YS5sZW5ndGgpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBjb25zdCBkaWdpdHMgPSBBcnJheS5mcm9tKGRhdGEpO1xuICAgIGRpZ2l0cy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgIGFzc2VydE51bWJlcihkKTtcbiAgICAgICAgaWYgKGQgPCAwIHx8IGQgPj0gZnJvbSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW50ZWdlcjogJHtkfWApO1xuICAgIH0pO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGxldCBjYXJyeSA9IDA7XG4gICAgICAgIGxldCBkb25lID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBvczsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGlnaXQgPSBkaWdpdHNbaV07XG4gICAgICAgICAgICBjb25zdCBkaWdpdEJhc2UgPSBmcm9tICogY2FycnkgKyBkaWdpdDtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoZGlnaXRCYXNlKSB8fFxuICAgICAgICAgICAgICAgIChmcm9tICogY2FycnkpIC8gZnJvbSAhPT0gY2FycnkgfHxcbiAgICAgICAgICAgICAgICBkaWdpdEJhc2UgLSBkaWdpdCAhPT0gZnJvbSAqIGNhcnJ5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb252ZXJ0UmFkaXg6IGNhcnJ5IG92ZXJmbG93Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXJyeSA9IGRpZ2l0QmFzZSAlIHRvO1xuICAgICAgICAgICAgY29uc3Qgcm91bmRlZCA9IE1hdGguZmxvb3IoZGlnaXRCYXNlIC8gdG8pO1xuICAgICAgICAgICAgZGlnaXRzW2ldID0gcm91bmRlZDtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIocm91bmRlZCkgfHwgcm91bmRlZCAqIHRvICsgY2FycnkgIT09IGRpZ2l0QmFzZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnZlcnRSYWRpeDogY2Fycnkgb3ZlcmZsb3cnKTtcbiAgICAgICAgICAgIGlmICghZG9uZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCFyb3VuZGVkKVxuICAgICAgICAgICAgICAgIHBvcyA9IGk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5wdXNoKGNhcnJ5KTtcbiAgICAgICAgaWYgKGRvbmUpXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAtIDEgJiYgZGF0YVtpXSA9PT0gMDsgaSsrKVxuICAgICAgICByZXMucHVzaCgwKTtcbiAgICByZXR1cm4gcmVzLnJldmVyc2UoKTtcbn1cbmNvbnN0IGdjZCA9IC8qIEBfX05PX1NJREVfRUZGRUNUU19fICovIChhLCBiKSA9PiAoIWIgPyBhIDogZ2NkKGIsIGEgJSBiKSk7XG5jb25zdCByYWRpeDJjYXJyeSA9IC8qQF9fTk9fU0lERV9FRkZFQ1RTX18gKi8gKGZyb20sIHRvKSA9PiBmcm9tICsgKHRvIC0gZ2NkKGZyb20sIHRvKSk7XG4vKipcbiAqIEltcGxlbWVudGVkIHdpdGggbnVtYmVycywgYmVjYXVzZSBCaWdJbnQgaXMgNXggc2xvd2VyXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBjb252ZXJ0UmFkaXgyKGRhdGEsIGZyb20sIHRvLCBwYWRkaW5nKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnZlcnRSYWRpeDI6IGRhdGEgc2hvdWxkIGJlIGFycmF5Jyk7XG4gICAgaWYgKGZyb20gPD0gMCB8fCBmcm9tID4gMzIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4Mjogd3JvbmcgZnJvbT0ke2Zyb219YCk7XG4gICAgaWYgKHRvIDw9IDAgfHwgdG8gPiAzMilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXgyOiB3cm9uZyB0bz0ke3RvfWApO1xuICAgIGlmIChyYWRpeDJjYXJyeShmcm9tLCB0bykgPiAzMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDI6IGNhcnJ5IG92ZXJmbG93IGZyb209JHtmcm9tfSB0bz0ke3RvfSBjYXJyeUJpdHM9JHtyYWRpeDJjYXJyeShmcm9tLCB0byl9YCk7XG4gICAgfVxuICAgIGxldCBjYXJyeSA9IDA7XG4gICAgbGV0IHBvcyA9IDA7IC8vIGJpdHdpc2UgcG9zaXRpb24gaW4gY3VycmVudCBlbGVtZW50XG4gICAgY29uc3QgbWFzayA9IDIgKiogdG8gLSAxO1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbiBvZiBkYXRhKSB7XG4gICAgICAgIGFzc2VydE51bWJlcihuKTtcbiAgICAgICAgaWYgKG4gPj0gMiAqKiBmcm9tKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXgyOiBpbnZhbGlkIGRhdGEgd29yZD0ke259IGZyb209JHtmcm9tfWApO1xuICAgICAgICBjYXJyeSA9IChjYXJyeSA8PCBmcm9tKSB8IG47XG4gICAgICAgIGlmIChwb3MgKyBmcm9tID4gMzIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDI6IGNhcnJ5IG92ZXJmbG93IHBvcz0ke3Bvc30gZnJvbT0ke2Zyb219YCk7XG4gICAgICAgIHBvcyArPSBmcm9tO1xuICAgICAgICBmb3IgKDsgcG9zID49IHRvOyBwb3MgLT0gdG8pXG4gICAgICAgICAgICByZXMucHVzaCgoKGNhcnJ5ID4+IChwb3MgLSB0bykpICYgbWFzaykgPj4+IDApO1xuICAgICAgICBjYXJyeSAmPSAyICoqIHBvcyAtIDE7IC8vIGNsZWFuIGNhcnJ5LCBvdGhlcndpc2UgaXQgd2lsbCBjYXVzZSBvdmVyZmxvd1xuICAgIH1cbiAgICBjYXJyeSA9IChjYXJyeSA8PCAodG8gLSBwb3MpKSAmIG1hc2s7XG4gICAgaWYgKCFwYWRkaW5nICYmIHBvcyA+PSBmcm9tKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4Y2VzcyBwYWRkaW5nJyk7XG4gICAgaWYgKCFwYWRkaW5nICYmIGNhcnJ5KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vbi16ZXJvIHBhZGRpbmc6ICR7Y2Fycnl9YCk7XG4gICAgaWYgKHBhZGRpbmcgJiYgcG9zID4gMClcbiAgICAgICAgcmVzLnB1c2goY2FycnkgPj4+IDApO1xuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIHJhZGl4KG51bSkge1xuICAgIGFzc2VydE51bWJlcihudW0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZTogKGJ5dGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzQnl0ZXMoYnl0ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXguZW5jb2RlIGlucHV0IHNob3VsZCBiZSBVaW50OEFycmF5Jyk7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydFJhZGl4KEFycmF5LmZyb20oYnl0ZXMpLCAyICoqIDgsIG51bSk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZTogKGRpZ2l0cykgPT4ge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRpZ2l0cykgfHwgKGRpZ2l0cy5sZW5ndGggJiYgdHlwZW9mIGRpZ2l0c1swXSAhPT0gJ251bWJlcicpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXguZGVjb2RlIGlucHV0IHNob3VsZCBiZSBhcnJheSBvZiBudW1iZXJzJyk7XG4gICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGNvbnZlcnRSYWRpeChkaWdpdHMsIG51bSwgMiAqKiA4KSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogSWYgYm90aCBiYXNlcyBhcmUgcG93ZXIgb2Ygc2FtZSBudW1iZXIgKGxpa2UgYDIqKjggPC0+IDIqKjY0YCksXG4gKiB0aGVyZSBpcyBhIGxpbmVhciBhbGdvcml0aG0uIEZvciBub3cgd2UgaGF2ZSBpbXBsZW1lbnRhdGlvbiBmb3IgcG93ZXItb2YtdHdvIGJhc2VzIG9ubHkuXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiByYWRpeDIoYml0cywgcmV2UGFkZGluZyA9IGZhbHNlKSB7XG4gICAgYXNzZXJ0TnVtYmVyKGJpdHMpO1xuICAgIGlmIChiaXRzIDw9IDAgfHwgYml0cyA+IDMyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JhZGl4MjogYml0cyBzaG91bGQgYmUgaW4gKDAuLjMyXScpO1xuICAgIGlmIChyYWRpeDJjYXJyeSg4LCBiaXRzKSA+IDMyIHx8IHJhZGl4MmNhcnJ5KGJpdHMsIDgpID4gMzIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXgyOiBjYXJyeSBvdmVyZmxvdycpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZTogKGJ5dGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzQnl0ZXMoYnl0ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXgyLmVuY29kZSBpbnB1dCBzaG91bGQgYmUgVWludDhBcnJheScpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRSYWRpeDIoQXJyYXkuZnJvbShieXRlcyksIDgsIGJpdHMsICFyZXZQYWRkaW5nKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVjb2RlOiAoZGlnaXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGlnaXRzKSB8fCAoZGlnaXRzLmxlbmd0aCAmJiB0eXBlb2YgZGlnaXRzWzBdICE9PSAnbnVtYmVyJykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyYWRpeDIuZGVjb2RlIGlucHV0IHNob3VsZCBiZSBhcnJheSBvZiBudW1iZXJzJyk7XG4gICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGNvbnZlcnRSYWRpeDIoZGlnaXRzLCBiaXRzLCA4LCByZXZQYWRkaW5nKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gdW5zYWZlV3JhcHBlcihmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zYWZlV3JhcHBlciBmbiBzaG91bGQgYmUgZnVuY3Rpb24nKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgfTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gY2hlY2tzdW0obGVuLCBmbikge1xuICAgIGFzc2VydE51bWJlcihsZW4pO1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2hlY2tzdW0gZm4gc2hvdWxkIGJlIGZ1bmN0aW9uJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5jb2RlKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghaXNCeXRlcyhkYXRhKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoZWNrc3VtLmVuY29kZTogaW5wdXQgc2hvdWxkIGJlIFVpbnQ4QXJyYXknKTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrc3VtID0gZm4oZGF0YSkuc2xpY2UoMCwgbGVuKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGRhdGEubGVuZ3RoICsgbGVuKTtcbiAgICAgICAgICAgIHJlcy5zZXQoZGF0YSk7XG4gICAgICAgICAgICByZXMuc2V0KGNoZWNrc3VtLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9LFxuICAgICAgICBkZWNvZGUoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFpc0J5dGVzKGRhdGEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hlY2tzdW0uZGVjb2RlOiBpbnB1dCBzaG91bGQgYmUgVWludDhBcnJheScpO1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGEuc2xpY2UoMCwgLWxlbik7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGVja3N1bSA9IGZuKHBheWxvYWQpLnNsaWNlKDAsIGxlbik7XG4gICAgICAgICAgICBjb25zdCBvbGRDaGVja3N1bSA9IGRhdGEuc2xpY2UoLWxlbik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgICAgIGlmIChuZXdDaGVja3N1bVtpXSAhPT0gb2xkQ2hlY2tzdW1baV0pXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIHByZXR0aWVyLWlnbm9yZVxuZXhwb3J0IGNvbnN0IHV0aWxzID0ge1xuICAgIGFscGhhYmV0LCBjaGFpbiwgY2hlY2tzdW0sIGNvbnZlcnRSYWRpeCwgY29udmVydFJhZGl4MiwgcmFkaXgsIHJhZGl4Miwgam9pbiwgcGFkZGluZyxcbn07XG4vLyBSRkMgNDY0OCBha2EgUkZDIDM1NDhcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNvbnN0IGJhc2UxNiA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNCksIGFscGhhYmV0KCcwMTIzNDU2Nzg5QUJDREVGJyksIGpvaW4oJycpKTtcbmV4cG9ydCBjb25zdCBiYXNlMzIgPSAvKiBAX19QVVJFX18gKi8gY2hhaW4ocmFkaXgyKDUpLCBhbHBoYWJldCgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnKSwgcGFkZGluZyg1KSwgam9pbignJykpO1xuZXhwb3J0IGNvbnN0IGJhc2UzMmhleCA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNSksIGFscGhhYmV0KCcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVicpLCBwYWRkaW5nKDUpLCBqb2luKCcnKSk7XG5leHBvcnQgY29uc3QgYmFzZTMyY3JvY2tmb3JkID0gLyogQF9fUFVSRV9fICovIGNoYWluKHJhZGl4Mig1KSwgYWxwaGFiZXQoJzAxMjM0NTY3ODlBQkNERUZHSEpLTU5QUVJTVFZXWFlaJyksIGpvaW4oJycpLCBub3JtYWxpemUoKHMpID0+IHMudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9PL2csICcwJykucmVwbGFjZSgvW0lMXS9nLCAnMScpKSk7XG5leHBvcnQgY29uc3QgYmFzZTY0ID0gLyogQF9fUFVSRV9fICovIGNoYWluKHJhZGl4Mig2KSwgYWxwaGFiZXQoJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nKSwgcGFkZGluZyg2KSwgam9pbignJykpO1xuZXhwb3J0IGNvbnN0IGJhc2U2NG5vcGFkID0gLyogQF9fUFVSRV9fICovIGNoYWluKHJhZGl4Mig2KSwgYWxwaGFiZXQoJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nKSwgam9pbignJykpO1xuZXhwb3J0IGNvbnN0IGJhc2U2NHVybCA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNiksIGFscGhhYmV0KCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJyksIHBhZGRpbmcoNiksIGpvaW4oJycpKTtcbmV4cG9ydCBjb25zdCBiYXNlNjR1cmxub3BhZCA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNiksIGFscGhhYmV0KCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJyksIGpvaW4oJycpKTtcbi8vIGJhc2U1OCBjb2RlXG4vLyAtLS0tLS0tLS0tLVxuY29uc3QgZ2VuQmFzZTU4ID0gKGFiYykgPT4gY2hhaW4ocmFkaXgoNTgpLCBhbHBoYWJldChhYmMpLCBqb2luKCcnKSk7XG5leHBvcnQgY29uc3QgYmFzZTU4ID0gLyogQF9fUFVSRV9fICovIGdlbkJhc2U1OCgnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eicpO1xuZXhwb3J0IGNvbnN0IGJhc2U1OGZsaWNrciA9IC8qIEBfX1BVUkVfXyAqLyBnZW5CYXNlNTgoJzEyMzQ1Njc4OWFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OUFFSU1RVVldYWVonKTtcbmV4cG9ydCBjb25zdCBiYXNlNTh4cnAgPSAvKiBAX19QVVJFX18gKi8gZ2VuQmFzZTU4KCdycHNobmFmMzl3QlVETkVHSEpLTE00UFFSU1Q3VldYWVoyYmNkZUNnNjVqa204b0ZxaTF0dXZBeHl6Jyk7XG4vLyB4bXIgdmVyIGlzIGRvbmUgaW4gOC1ieXRlIGJsb2NrcyAod2hpY2ggZXF1YWxzIDExIGNoYXJzIGluIGRlY29kaW5nKS4gTGFzdCAobm9uLWZ1bGwpIGJsb2NrIHBhZGRlZCB3aXRoICcxJyB0byBzaXplIGluIFhNUl9CTE9DS19MRU4uXG4vLyBCbG9jayBlbmNvZGluZyBzaWduaWZpY2FudGx5IHJlZHVjZXMgcXVhZHJhdGljIGNvbXBsZXhpdHkgb2YgYmFzZTU4LlxuLy8gRGF0YSBsZW4gKGluZGV4KSAtPiBlbmNvZGVkIGJsb2NrIGxlblxuY29uc3QgWE1SX0JMT0NLX0xFTiA9IFswLCAyLCAzLCA1LCA2LCA3LCA5LCAxMCwgMTFdO1xuZXhwb3J0IGNvbnN0IGJhc2U1OHhtciA9IHtcbiAgICBlbmNvZGUoZGF0YSkge1xuICAgICAgICBsZXQgcmVzID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gOCkge1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBkYXRhLnN1YmFycmF5KGksIGkgKyA4KTtcbiAgICAgICAgICAgIHJlcyArPSBiYXNlNTguZW5jb2RlKGJsb2NrKS5wYWRTdGFydChYTVJfQkxPQ0tfTEVOW2Jsb2NrLmxlbmd0aF0sICcxJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIGRlY29kZShzdHIpIHtcbiAgICAgICAgbGV0IHJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gc3RyLnNsaWNlKGksIGkgKyAxMSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0xlbiA9IFhNUl9CTE9DS19MRU4uaW5kZXhPZihzbGljZS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBiYXNlNTguZGVjb2RlKHNsaWNlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmxvY2subGVuZ3RoIC0gYmxvY2tMZW47IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChibG9ja1tqXSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYXNlNTh4bXI6IHdyb25nIHBhZGRpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoQXJyYXkuZnJvbShibG9jay5zbGljZShibG9jay5sZW5ndGggLSBibG9ja0xlbikpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKHJlcyk7XG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlQmFzZTU4Y2hlY2sgPSAvKiBAX19QVVJFX18gKi8gKHNoYTI1NikgPT4gY2hhaW4oY2hlY2tzdW0oNCwgKGRhdGEpID0+IHNoYTI1NihzaGEyNTYoZGF0YSkpKSwgYmFzZTU4KTtcbi8vIGxlZ2FjeSBleHBvcnQsIGJhZCBuYW1lXG5leHBvcnQgY29uc3QgYmFzZTU4Y2hlY2sgPSBjcmVhdGVCYXNlNThjaGVjaztcbmNvbnN0IEJFQ0hfQUxQSEFCRVQgPSAvKiBAX19QVVJFX18gKi8gY2hhaW4oYWxwaGFiZXQoJ3FwenJ5OXg4Z2YydHZkdzBzM2puNTRraGNlNm11YTdsJyksIGpvaW4oJycpKTtcbmNvbnN0IFBPTFlNT0RfR0VORVJBVE9SUyA9IFsweDNiNmE1N2IyLCAweDI2NTA4ZTZkLCAweDFlYTExOWZhLCAweDNkNDIzM2RkLCAweDJhMTQ2MmIzXTtcbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gYmVjaDMyUG9seW1vZChwcmUpIHtcbiAgICBjb25zdCBiID0gcHJlID4+IDI1O1xuICAgIGxldCBjaGsgPSAocHJlICYgMHgxZmZmZmZmKSA8PCA1O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgUE9MWU1PRF9HRU5FUkFUT1JTLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICgoKGIgPj4gaSkgJiAxKSA9PT0gMSlcbiAgICAgICAgICAgIGNoayBePSBQT0xZTU9EX0dFTkVSQVRPUlNbaV07XG4gICAgfVxuICAgIHJldHVybiBjaGs7XG59XG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIGJlY2hDaGVja3N1bShwcmVmaXgsIHdvcmRzLCBlbmNvZGluZ0NvbnN0ID0gMSkge1xuICAgIGNvbnN0IGxlbiA9IHByZWZpeC5sZW5ndGg7XG4gICAgbGV0IGNoayA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBjID0gcHJlZml4LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMzMgfHwgYyA+IDEyNilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcmVmaXggKCR7cHJlZml4fSlgKTtcbiAgICAgICAgY2hrID0gYmVjaDMyUG9seW1vZChjaGspIF4gKGMgPj4gNSk7XG4gICAgfVxuICAgIGNoayA9IGJlY2gzMlBvbHltb2QoY2hrKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoaykgXiAocHJlZml4LmNoYXJDb2RlQXQoaSkgJiAweDFmKTtcbiAgICBmb3IgKGxldCB2IG9mIHdvcmRzKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoaykgXiB2O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoayk7XG4gICAgY2hrIF49IGVuY29kaW5nQ29uc3Q7XG4gICAgcmV0dXJuIEJFQ0hfQUxQSEFCRVQuZW5jb2RlKGNvbnZlcnRSYWRpeDIoW2NoayAlIDIgKiogMzBdLCAzMCwgNSwgZmFsc2UpKTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gZ2VuQmVjaDMyKGVuY29kaW5nKSB7XG4gICAgY29uc3QgRU5DT0RJTkdfQ09OU1QgPSBlbmNvZGluZyA9PT0gJ2JlY2gzMicgPyAxIDogMHgyYmM4MzBhMztcbiAgICBjb25zdCBfd29yZHMgPSByYWRpeDIoNSk7XG4gICAgY29uc3QgZnJvbVdvcmRzID0gX3dvcmRzLmRlY29kZTtcbiAgICBjb25zdCB0b1dvcmRzID0gX3dvcmRzLmVuY29kZTtcbiAgICBjb25zdCBmcm9tV29yZHNVbnNhZmUgPSB1bnNhZmVXcmFwcGVyKGZyb21Xb3Jkcyk7XG4gICAgZnVuY3Rpb24gZW5jb2RlKHByZWZpeCwgd29yZHMsIGxpbWl0ID0gOTApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcmVmaXggIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiZWNoMzIuZW5jb2RlIHByZWZpeCBzaG91bGQgYmUgc3RyaW5nLCBub3QgJHt0eXBlb2YgcHJlZml4fWApO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkod29yZHMpIHx8ICh3b3Jkcy5sZW5ndGggJiYgdHlwZW9mIHdvcmRzWzBdICE9PSAnbnVtYmVyJykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJlY2gzMi5lbmNvZGUgd29yZHMgc2hvdWxkIGJlIGFycmF5IG9mIG51bWJlcnMsIG5vdCAke3R5cGVvZiB3b3Jkc31gKTtcbiAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHByZWZpeCBsZW5ndGggJHtwcmVmaXgubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBhY3R1YWxMZW5ndGggPSBwcmVmaXgubGVuZ3RoICsgNyArIHdvcmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpbWl0ICE9PSBmYWxzZSAmJiBhY3R1YWxMZW5ndGggPiBsaW1pdClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYExlbmd0aCAke2FjdHVhbExlbmd0aH0gZXhjZWVkcyBsaW1pdCAke2xpbWl0fWApO1xuICAgICAgICBjb25zdCBsb3dlcmVkID0gcHJlZml4LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHN1bSA9IGJlY2hDaGVja3N1bShsb3dlcmVkLCB3b3JkcywgRU5DT0RJTkdfQ09OU1QpO1xuICAgICAgICByZXR1cm4gYCR7bG93ZXJlZH0xJHtCRUNIX0FMUEhBQkVULmVuY29kZSh3b3Jkcyl9JHtzdW19YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVjb2RlKHN0ciwgbGltaXQgPSA5MCkge1xuICAgICAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJlY2gzMi5kZWNvZGUgaW5wdXQgc2hvdWxkIGJlIHN0cmluZywgbm90ICR7dHlwZW9mIHN0cn1gKTtcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPCA4IHx8IChsaW1pdCAhPT0gZmFsc2UgJiYgc3RyLmxlbmd0aCA+IGxpbWl0KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFdyb25nIHN0cmluZyBsZW5ndGg6ICR7c3RyLmxlbmd0aH0gKCR7c3RyfSkuIEV4cGVjdGVkICg4Li4ke2xpbWl0fSlgKTtcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbWl4ZWQgY2FzZVxuICAgICAgICBjb25zdCBsb3dlcmVkID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChzdHIgIT09IGxvd2VyZWQgJiYgc3RyICE9PSBzdHIudG9VcHBlckNhc2UoKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nIG11c3QgYmUgbG93ZXJjYXNlIG9yIHVwcGVyY2FzZWApO1xuICAgICAgICBjb25zdCBzZXBJbmRleCA9IGxvd2VyZWQubGFzdEluZGV4T2YoJzEnKTtcbiAgICAgICAgaWYgKHNlcEluZGV4ID09PSAwIHx8IHNlcEluZGV4ID09PSAtMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGV0dGVyIFwiMVwiIG11c3QgYmUgcHJlc2VudCBiZXR3ZWVuIHByZWZpeCBhbmQgZGF0YSBvbmx5YCk7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGxvd2VyZWQuc2xpY2UoMCwgc2VwSW5kZXgpO1xuICAgICAgICBjb25zdCBkYXRhID0gbG93ZXJlZC5zbGljZShzZXBJbmRleCArIDEpO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCA2KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIG11c3QgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzIGxvbmcnKTtcbiAgICAgICAgY29uc3Qgd29yZHMgPSBCRUNIX0FMUEhBQkVULmRlY29kZShkYXRhKS5zbGljZSgwLCAtNik7XG4gICAgICAgIGNvbnN0IHN1bSA9IGJlY2hDaGVja3N1bShwcmVmaXgsIHdvcmRzLCBFTkNPRElOR19DT05TVCk7XG4gICAgICAgIGlmICghZGF0YS5lbmRzV2l0aChzdW0pKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoZWNrc3VtIGluICR7c3RyfTogZXhwZWN0ZWQgXCIke3N1bX1cImApO1xuICAgICAgICByZXR1cm4geyBwcmVmaXgsIHdvcmRzIH07XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZVVuc2FmZSA9IHVuc2FmZVdyYXBwZXIoZGVjb2RlKTtcbiAgICBmdW5jdGlvbiBkZWNvZGVUb0J5dGVzKHN0cikge1xuICAgICAgICBjb25zdCB7IHByZWZpeCwgd29yZHMgfSA9IGRlY29kZShzdHIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHsgcHJlZml4LCB3b3JkcywgYnl0ZXM6IGZyb21Xb3Jkcyh3b3JkcykgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZW5jb2RlLCBkZWNvZGUsIGRlY29kZVRvQnl0ZXMsIGRlY29kZVVuc2FmZSwgZnJvbVdvcmRzLCBmcm9tV29yZHNVbnNhZmUsIHRvV29yZHMgfTtcbn1cbmV4cG9ydCBjb25zdCBiZWNoMzIgPSAvKiBAX19QVVJFX18gKi8gZ2VuQmVjaDMyKCdiZWNoMzInKTtcbmV4cG9ydCBjb25zdCBiZWNoMzJtID0gLyogQF9fUFVSRV9fICovIGdlbkJlY2gzMignYmVjaDMybScpO1xuZXhwb3J0IGNvbnN0IHV0ZjggPSB7XG4gICAgZW5jb2RlOiAoZGF0YSkgPT4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRhdGEpLFxuICAgIGRlY29kZTogKHN0cikgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0ciksXG59O1xuZXhwb3J0IGNvbnN0IGhleCA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNCksIGFscGhhYmV0KCcwMTIzNDU2Nzg5YWJjZGVmJyksIGpvaW4oJycpLCBub3JtYWxpemUoKHMpID0+IHtcbiAgICBpZiAodHlwZW9mIHMgIT09ICdzdHJpbmcnIHx8IHMubGVuZ3RoICUgMilcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaGV4LmRlY29kZTogZXhwZWN0ZWQgc3RyaW5nLCBnb3QgJHt0eXBlb2Ygc30gd2l0aCBsZW5ndGggJHtzLmxlbmd0aH1gKTtcbiAgICByZXR1cm4gcy50b0xvd2VyQ2FzZSgpO1xufSkpO1xuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBDT0RFUlMgPSB7XG4gICAgdXRmOCwgaGV4LCBiYXNlMTYsIGJhc2UzMiwgYmFzZTY0LCBiYXNlNjR1cmwsIGJhc2U1OCwgYmFzZTU4eG1yXG59O1xuY29uc3QgY29kZXJUeXBlRXJyb3IgPSAnSW52YWxpZCBlbmNvZGluZyB0eXBlLiBBdmFpbGFibGUgdHlwZXM6IHV0ZjgsIGhleCwgYmFzZTE2LCBiYXNlMzIsIGJhc2U2NCwgYmFzZTY0dXJsLCBiYXNlNTgsIGJhc2U1OHhtcic7XG5leHBvcnQgY29uc3QgYnl0ZXNUb1N0cmluZyA9ICh0eXBlLCBieXRlcykgPT4ge1xuICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycgfHwgIUNPREVSUy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjb2RlclR5cGVFcnJvcik7XG4gICAgaWYgKCFpc0J5dGVzKGJ5dGVzKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYnl0ZXNUb1N0cmluZygpIGV4cGVjdHMgVWludDhBcnJheScpO1xuICAgIHJldHVybiBDT0RFUlNbdHlwZV0uZW5jb2RlKGJ5dGVzKTtcbn07XG5leHBvcnQgY29uc3Qgc3RyID0gYnl0ZXNUb1N0cmluZzsgLy8gYXMgaW4gcHl0aG9uLCBidXQgZm9yIGJ5dGVzIG9ubHlcbmV4cG9ydCBjb25zdCBzdHJpbmdUb0J5dGVzID0gKHR5cGUsIHN0cikgPT4ge1xuICAgIGlmICghQ09ERVJTLmhhc093blByb3BlcnR5KHR5cGUpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNvZGVyVHlwZUVycm9yKTtcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZ1RvQnl0ZXMoKSBleHBlY3RzIHN0cmluZycpO1xuICAgIHJldHVybiBDT0RFUlNbdHlwZV0uZGVjb2RlKHN0cik7XG59O1xuZXhwb3J0IGNvbnN0IGJ5dGVzID0gc3RyaW5nVG9CeXRlcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8vIENvcHlyaWdodCAoQykgMjAyMS0yMDI0IFBhcml0eSBUZWNobm9sb2dpZXMgKFVLKSBMdGQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyBcdGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbmV4cG9ydCBkZWZhdWx0IFtcblx0e1xuXHRcdFwicHJlZml4XCI6IDAsXG5cdFx0XCJuZXR3b3JrXCI6IFwicG9sa2Fkb3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9sa2Fkb3QgUmVsYXkgQ2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJET1RcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BvbGthZG90Lm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMSxcblx0XHRcIm5ldHdvcmtcIjogXCJCYXJlU3IyNTUxOVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJCYXJlIDMyLWJpdCBTY2hub3JyL1Jpc3RyZXR0byAoUy9SIDI1NTE5KSBwdWJsaWMga2V5LlwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiU3IyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyLFxuXHRcdFwibmV0d29ya1wiOiBcImt1c2FtYVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLdXNhbWEgUmVsYXkgQ2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLU01cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2t1c2FtYS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDMsXG5cdFx0XCJuZXR3b3JrXCI6IFwiQmFyZUVkMjU1MTlcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQmFyZSAzMi1iaXQgRWQyNTUxOSBwdWJsaWMga2V5LlwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiRWQyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA0LFxuXHRcdFwibmV0d29ya1wiOiBcImthdGFsY2hhaW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS2F0YWwgQ2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW10sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1LFxuXHRcdFwibmV0d29ya1wiOiBcImFzdGFyXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkFzdGFyIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBU1RSXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hc3Rhci5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiYmlmcm9zdFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJCaWZyb3N0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQk5DXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9iaWZyb3N0LmZpbmFuY2UvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDcsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZWRnZXdhcmVcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRWRnZXdhcmVcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJFREdcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2VkZ2V3YS5yZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA4LFxuXHRcdFwibmV0d29ya1wiOiBcImthcnVyYVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLYXJ1cmFcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLQVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2thcnVyYS5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA5LFxuXHRcdFwibmV0d29ya1wiOiBcInJleW5vbGRzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkxhbWluYXIgUmV5bm9sZHMgQ2FuYXJ5XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUkVZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cDovL2xhbWluYXIubmV0d29yay9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiYWNhbGFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQWNhbGFcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBQ0FcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2FjYWxhLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExLFxuXHRcdFwibmV0d29ya1wiOiBcImxhbWluYXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTGFtaW5hclwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkxBTUlcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwOi8vbGFtaW5hci5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMixcblx0XHRcIm5ldHdvcmtcIjogXCJwb2x5bWVzaFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJQb2x5bWVzaFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBPTFlYXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0NlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BvbHltYXRoLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDEzLFxuXHRcdFwibmV0d29ya1wiOiBcImludGVncml0ZWVcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSW50ZWdyaXRlZVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlRFRVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2ludGVncml0ZWUubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxNCxcblx0XHRcIm5ldHdvcmtcIjogXCJ0b3RlbVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJUb3RlbVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlRPVEVNXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3RvdGVtYWNjb3VudGluZy5jb21cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTUsXG5cdFx0XCJuZXR3b3JrXCI6IFwic3luZXN0aGVzaWFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU3luZXN0aGVzaWFcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJTWU5cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3N5bmVzdGhlc2lhLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE2LFxuXHRcdFwibmV0d29ya1wiOiBcImt1bHVwdVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLdWx1cHVcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLTFBcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2t1bHVwdS5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxNyxcblx0XHRcIm5ldHdvcmtcIjogXCJkYXJrXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkRhcmsgTWFpbm5ldFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IG51bGxcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE4LFxuXHRcdFwibmV0d29ya1wiOiBcImRhcndpbmlhXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkRhcndpbmlhIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJSSU5HXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwic2VjcDI1NmsxXCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9kYXJ3aW5pYS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE5LFxuXHRcdFwibmV0d29ya1wiOiBcIndhdHJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiV2F0ciBQcm90b2NvbFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIldBVFJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy53YXRyLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyMCxcblx0XHRcIm5ldHdvcmtcIjogXCJzdGFmaVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJTdGFmaVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkZJU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vc3RhZmkuaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjEsXG5cdFx0XCJuZXR3b3JrXCI6IFwia2FybWFjaGFpblwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLYXJtYWNvaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLQ09JTlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDZcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9rYXJtYWNvLmluXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIyLFxuXHRcdFwibmV0d29ya1wiOiBcImRvY2stcG9zLW1haW5uZXRcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRG9jayBNYWlubmV0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRENLXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0NlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2RvY2suaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjMsXG5cdFx0XCJuZXR3b3JrXCI6IFwic2hpZnRcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU2hpZnROcmdcIixcblx0XHRcInN5bWJvbHNcIjogW10sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyNCxcblx0XHRcIm5ldHdvcmtcIjogXCJ6ZXJvXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlpFUk9cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJaRVJPXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly96ZXJvLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDI1LFxuXHRcdFwibmV0d29ya1wiOiBcInplcm8tYWxwaGF2aWxsZVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJaRVJPIEFscGhhdmlsbGVcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJaRVJPXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly96ZXJvLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDI2LFxuXHRcdFwibmV0d29ya1wiOiBcImp1cGl0ZXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSnVwaXRlclwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcImpET1RcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2p1cGl0ZXIucGF0cmFjdC5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyNyxcblx0XHRcIm5ldHdvcmtcIjogXCJrYWJvY2hhXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkthYm9jaGFcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLQUJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2thYm9jaGEubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyOCxcblx0XHRcIm5ldHdvcmtcIjogXCJzdWJzb2NpYWxcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU3Vic29jaWFsXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtdLFxuXHRcdFwiZGVjaW1hbHNcIjogW10sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogbnVsbFxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjksXG5cdFx0XCJuZXR3b3JrXCI6IFwiY29yZFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJDT1JEIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJESElcIixcblx0XHRcdFwiV0FZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTIsXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2NvcmQubmV0d29yay9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMzAsXG5cdFx0XCJuZXR3b3JrXCI6IFwicGhhbGFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUGhhbGEgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBIQVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcGhhbGEubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAzMSxcblx0XHRcIm5ldHdvcmtcIjogXCJsaXRlbnRyeVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJMaXRlbnRyeSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTElUXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9saXRlbnRyeS5jb20vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDMyLFxuXHRcdFwibmV0d29ya1wiOiBcInJvYm9ub21pY3NcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUm9ib25vbWljc1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlhSVFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDlcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9yb2Jvbm9taWNzLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMzMsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZGF0YWhpZ2h3YXlcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRGF0YUhpZ2h3YXlcIixcblx0XHRcInN5bWJvbHNcIjogW10sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAzNCxcblx0XHRcIm5ldHdvcmtcIjogXCJhcmVzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkFyZXMgUHJvdG9jb2xcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBUkVTXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly93d3cuYXJlc3Byb3RvY29sLmNvbS9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMzUsXG5cdFx0XCJuZXR3b3JrXCI6IFwidmxuXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlZhbGl1IExpcXVpZGl0eSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiVVNEdlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE1XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdmFsaXUuY29tL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAzNixcblx0XHRcIm5ldHdvcmtcIjogXCJjZW50cmlmdWdlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNlbnRyaWZ1Z2UgQ2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJDRkdcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2NlbnRyaWZ1Z2UuaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDM3LFxuXHRcdFwibmV0d29ya1wiOiBcIm5vZGxlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk5vZGxlIENoYWluXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTk9ETFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDExXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbm9kbGUuaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDM4LFxuXHRcdFwibmV0d29ya1wiOiBcImtpbHRcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS0lMVCBTcGlyaXRuZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLSUxUXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTVcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9raWx0LmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAzOSxcblx0XHRcIm5ldHdvcmtcIjogXCJtYXRoY2hhaW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTWF0aENoYWluIG1haW5uZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJNQVRIXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9tYXRod2FsbGV0Lm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA0MCxcblx0XHRcIm5ldHdvcmtcIjogXCJtYXRoY2hhaW4tdGVzdG5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJNYXRoQ2hhaW4gdGVzdG5ldFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk1BVEhcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL21hdGh3YWxsZXQub3JnXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQxLFxuXHRcdFwibmV0d29ya1wiOiBcInBvbGltZWNcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9saW1lYyBQcm90b2NvbFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBMTUNcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy5wb2xpbWVjLm9yZy9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNDIsXG5cdFx0XCJuZXR3b3JrXCI6IFwic3Vic3RyYXRlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlN1YnN0cmF0ZVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9zdWJzdHJhdGUuaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQzLFxuXHRcdFwibmV0d29ya1wiOiBcIkJhcmVTZWNwMjU2azFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQmFyZSAzMi1iaXQgRUNEU0EgU0VDUC0yNTZrMSBwdWJsaWMga2V5LlwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwic2VjcDI1NmsxXCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IG51bGxcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQ0LFxuXHRcdFwibmV0d29ya1wiOiBcImNoYWlueFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJDaGFpblhcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQQ1hcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQ4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vY2hhaW54Lm9yZy9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNDUsXG5cdFx0XCJuZXR3b3JrXCI6IFwidW5pYXJ0c1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJVbmlBcnRzIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJVQVJUXCIsXG5cdFx0XHRcIlVJTktcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMixcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdW5pYXJ0cy5tZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA0Nixcblx0XHRcIm5ldHdvcmtcIjogXCJyZXNlcnZlZDQ2XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlRoaXMgcHJlZml4IGlzIHJlc2VydmVkLlwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IG51bGwsXG5cdFx0XCJ3ZWJzaXRlXCI6IG51bGxcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQ3LFxuXHRcdFwibmV0d29ya1wiOiBcInJlc2VydmVkNDdcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGhpcyBwcmVmaXggaXMgcmVzZXJ2ZWQuXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtdLFxuXHRcdFwiZGVjaW1hbHNcIjogW10sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogbnVsbCxcblx0XHRcIndlYnNpdGVcIjogbnVsbFxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNDgsXG5cdFx0XCJuZXR3b3JrXCI6IFwibmVhdGNvaW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTmVhdGNvaW4gTWFpbm5ldFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk5FQVRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL25lYXRjb2luLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA0OSxcblx0XHRcIm5ldHdvcmtcIjogXCJwaWNhc3NvXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlBpY2Fzc29cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQSUNBXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9waWNhc3NvLmNvbXBvc2FibGUuZmluYW5jZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1MCxcblx0XHRcIm5ldHdvcmtcIjogXCJjb21wb3NhYmxlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNvbXBvc2FibGUgRmluYW5jZVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkxBWVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2NvbXBvc2FibGUuZmluYW5jZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1MSxcblx0XHRcIm5ldHdvcmtcIjogXCJvYWtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiT0FLIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJPQUtcIixcblx0XHRcdFwiVFVSXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTAsXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL29hay50ZWNoXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDUyLFxuXHRcdFwibmV0d29ya1wiOiBcIktJQ09cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS0lDT1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIktJQ09cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxNFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2RpY28uaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNTMsXG5cdFx0XCJuZXR3b3JrXCI6IFwiRElDT1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJESUNPXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRElDT1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE0XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZGljby5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1NCxcblx0XHRcIm5ldHdvcmtcIjogXCJjZXJlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNlcmUgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkNFUkVcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2NlcmUubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1NSxcblx0XHRcIm5ldHdvcmtcIjogXCJ4eG5ldHdvcmtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwieHggbmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlhYXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0OVxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3h4Lm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNTYsXG5cdFx0XCJuZXR3b3JrXCI6IFwicGVuZHVsdW1cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUGVuZHVsdW0gY2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQRU5cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BlbmR1bHVtY2hhaW4ub3JnL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1Nyxcblx0XHRcIm5ldHdvcmtcIjogXCJhbXBsaXR1ZGVcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQW1wbGl0dWRlIGNoYWluXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQU1QRVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcGVuZHVsdW1jaGFpbi5vcmcvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDU4LFxuXHRcdFwibmV0d29ya1wiOiBcImV0ZXJuYWwtY2l2aWxpemF0aW9uXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkV0ZXJuYWwgQ2l2aWxpemF0aW9uXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRUNDXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cDovL3d3dy55c2tuZnIuY24vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDYzLFxuXHRcdFwibmV0d29ya1wiOiBcImh5ZHJhZHhcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSHlkcmFEWFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkhEWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaHlkcmFkeC5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA2NSxcblx0XHRcIm5ldHdvcmtcIjogXCJhdmVudHVzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkF2ZW50dXMgTWFpbm5ldFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkFWVFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vYXZlbnR1cy5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA2Nixcblx0XHRcIm5ldHdvcmtcIjogXCJjcnVzdFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJDcnVzdCBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQ1JVXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9jcnVzdC5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDY3LFxuXHRcdFwibmV0d29ya1wiOiBcImdlbnNoaXJvXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkdlbnNoaXJvIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJHRU5TXCIsXG5cdFx0XHRcIkVRRFwiLFxuXHRcdFx0XCJMUFQwXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0OSxcblx0XHRcdDksXG5cdFx0XHQ5XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZ2Vuc2hpcm8uZXF1aWxpYnJpdW0uaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNjgsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZXF1aWxpYnJpdW1cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRXF1aWxpYnJpdW0gTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkVRXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0OVxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2VxdWlsaWJyaXVtLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDY5LFxuXHRcdFwibmV0d29ya1wiOiBcInNvcmFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU09SQSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiWE9SXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9zb3JhLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3MSxcblx0XHRcIm5ldHdvcmtcIjogXCJwM2RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiM0RQIG5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQM0RcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovLzNkcGFzcy5vcmdcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNzIsXG5cdFx0XCJuZXR3b3JrXCI6IFwicDNkdFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCIzRFAgdGVzdCBuZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUDNEdFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vM2RwYXNzLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3Myxcblx0XHRcIm5ldHdvcmtcIjogXCJ6ZWl0Z2Vpc3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiWmVpdGdlaXN0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiWlRHXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTBcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly96ZWl0Z2Vpc3QucG1cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNzcsXG5cdFx0XCJuZXR3b3JrXCI6IFwibWFudGFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTWFudGEgbmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk1BTlRBXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9tYW50YS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDc4LFxuXHRcdFwibmV0d29ya1wiOiBcImNhbGFtYXJpXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNhbGFtYXJpOiBNYW50YSBDYW5hcnkgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIktNQVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbWFudGEubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA4MSxcblx0XHRcIm5ldHdvcmtcIjogXCJzb3JhX2RvdF9wYXJhXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlNPUkEgUG9sa2Fkb3QgUGFyYWNoYWluXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiWE9SXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9zb3JhLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA4OCxcblx0XHRcIm5ldHdvcmtcIjogXCJwb2xrYWRleFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJQb2xrYWRleCBNYWlubmV0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUERFWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcG9sa2FkZXgudHJhZGVcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogODksXG5cdFx0XCJuZXR3b3JrXCI6IFwicG9sa2FkZXhwYXJhY2hhaW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9sa2FkZXggUGFyYWNoYWluXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUERFWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcG9sa2FkZXgudHJhZGVcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogOTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZnJlcXVlbmN5XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkZyZXF1ZW5jeVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkZSUUNZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0OFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy5mcmVxdWVuY3kueHl6XCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDkyLFxuXHRcdFwibmV0d29ya1wiOiBcImFubW9sXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkFubW9sIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBTk1MXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hbm1vbC5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA5Myxcblx0XHRcIm5ldHdvcmtcIjogXCJmcmFnbm92YVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJGcmFnbm92YSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTk9WQVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZnJhZ25vdmEuY29tXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDk4LFxuXHRcdFwibmV0d29ya1wiOiBcInBvbGthc21pdGhcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9sa2FTbWl0aCBDYW5hcnkgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBLU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcG9sa2Fmb3VuZHJ5LmNvbVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA5OSxcblx0XHRcIm5ldHdvcmtcIjogXCJwb2xrYWZvdW5kcnlcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9sa2FGb3VuZHJ5IE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQS0ZcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BvbGthZm91bmRyeS5jb21cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTAwLFxuXHRcdFwibmV0d29ya1wiOiBcImlidGlkYVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJBbm1vbCBOZXR3b3JrIElidGlkYSBDYW5hcnkgbmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIklBTk1MXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hbm1vbC5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMDEsXG5cdFx0XCJuZXR3b3JrXCI6IFwib3JpZ2ludHJhaWwtcGFyYWNoYWluXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk9yaWdpblRyYWlsIFBhcmFjaGFpblwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk9UUFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcGFyYWNoYWluLm9yaWdpbnRyYWlsLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMDUsXG5cdFx0XCJuZXR3b3JrXCI6IFwicG9udGVtLW5ldHdvcmtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9udGVtIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQT05UXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTBcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9wb250ZW0ubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiaGVpa29cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSGVpa29cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJIS09cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BhcmFsbGVsLmZpL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMTMsXG5cdFx0XCJuZXR3b3JrXCI6IFwiaW50ZWdyaXRlZS1pbmNvZ25pdG9cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSW50ZWdyaXRlZSBJbmNvZ25pdG9cIixcblx0XHRcInN5bWJvbHNcIjogW10sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaW50ZWdyaXRlZS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExNyxcblx0XHRcIm5ldHdvcmtcIjogXCJ0aW5rZXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGlua2VyXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiVE5LUlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaW52YXJjaC5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDEyNixcblx0XHRcIm5ldHdvcmtcIjogXCJqb3lzdHJlYW1cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSm95c3RyZWFtXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiSk9ZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTBcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly93d3cuam95c3RyZWFtLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjgsXG5cdFx0XCJuZXR3b3JrXCI6IFwiY2xvdmVyXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNsb3ZlciBGaW5hbmNlXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQ0xWXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9jbG92ZXIuZmluYW5jZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjksXG5cdFx0XCJuZXR3b3JrXCI6IFwiZG9yYWZhY3RvcnktcG9sa2Fkb3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRG9yYWZhY3RvcnkgUG9sa2Fkb3QgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkRPUkFcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2RvcmFmYWN0b3J5Lm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMzEsXG5cdFx0XCJuZXR3b3JrXCI6IFwibGl0bXVzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkxpdG11cyBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTElUXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9saXRlbnRyeS5jb20vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDEzNixcblx0XHRcIm5ldHdvcmtcIjogXCJhbHRhaXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQWx0YWlyXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQUlSXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9jZW50cmlmdWdlLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMzcsXG5cdFx0XCJuZXR3b3JrXCI6IFwidmFyYVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJWYXJhIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJWQVJBXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly92YXJhLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE3Mixcblx0XHRcIm5ldHdvcmtcIjogXCJwYXJhbGxlbFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJQYXJhbGxlbFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBBUkFcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BhcmFsbGVsLmZpL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyNTIsXG5cdFx0XCJuZXR3b3JrXCI6IFwic29jaWFsLW5ldHdvcmtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU29jaWFsIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJORVRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3NvY2lhbC5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDI1NSxcblx0XHRcIm5ldHdvcmtcIjogXCJxdWFydHpfbWFpbm5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJRVUFSVFogYnkgVU5JUVVFXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUVRaXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly91bmlxdWUubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyNjgsXG5cdFx0XCJuZXR3b3JrXCI6IFwicGlvbmVlcl9uZXR3b3JrXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlBpb25lZXIgTmV0d29yayBieSBCaXQuQ291bnRyeVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk5FRVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2JpdC5jb3VudHJ5XCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQyMCxcblx0XHRcIm5ldHdvcmtcIjogXCJzb3JhX2t1c2FtYV9wYXJhXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlNPUkEgS3VzYW1hIFBhcmFjaGFpblwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlhPUlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vc29yYS5vcmdcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNDQwLFxuXHRcdFwibmV0d29ya1wiOiBcImFsbGZlYXRfbmV0d29ya1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJBbGxmZWF0IE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBRlRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2FsbGZlYXQubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA2NjYsXG5cdFx0XCJuZXR3b3JrXCI6IFwibWV0YXF1aXR5X25ldHdvcmtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTWV0YXF1aXR5IE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJNUVRZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9tZXRhcXVpdHkueHl6L1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3NzcsXG5cdFx0XCJuZXR3b3JrXCI6IFwiY3VyaW9cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQ3VyaW9cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJDR1RcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BhcmFjaGFpbi5jYXBpdGFsZGV4LmV4Y2hhbmdlL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3ODksXG5cdFx0XCJuZXR3b3JrXCI6IFwiZ2Vla1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJHRUVLIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJHRUVLXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9nZWVrLmdsXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDk5NSxcblx0XHRcIm5ldHdvcmtcIjogXCJ0ZXJub2FcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGVybm9hXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQ0FQU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vd3d3LnRlcm5vYS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExMTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZWZpbml0eVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJFZmluaXR5XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRUZJXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9lZmluaXR5LmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjIxLFxuXHRcdFwibmV0d29ya1wiOiBcInBlYXFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUGVhcSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUEVBUVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIlNyMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy5wZWFxLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDEyMjIsXG5cdFx0XCJuZXR3b3JrXCI6IFwia3Jlc3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS3Jlc3QgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIktSRVNUXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiU3IyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vd3d3LnBlYXEubmV0d29yay9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTI4NCxcblx0XHRcIm5ldHdvcmtcIjogXCJtb29uYmVhbVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJNb29uYmVhbVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkdMTVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCJzZWNwMjU2azFcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL21vb25iZWFtLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTI4NSxcblx0XHRcIm5ldHdvcmtcIjogXCJtb29ucml2ZXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTW9vbnJpdmVyXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTU9WUlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcInNlY3AyNTZrMVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbW9vbmJlYW0ubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMzI4LFxuXHRcdFwibmV0d29ya1wiOiBcImFqdW5hXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkFqdW5hIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBSlVOXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hanVuYS5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMzM3LFxuXHRcdFwibmV0d29ya1wiOiBcImJhanVuXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkJhanVuIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJCQUpVXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hanVuYS5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxNTE2LFxuXHRcdFwibmV0d29ya1wiOiBcInNvY2lldGFsXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlNvY2lldGFsXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiU0NUTFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vd3d3LnNjdGwueHl6XCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE5ODUsXG5cdFx0XCJuZXR3b3JrXCI6IFwic2VhbHNcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU2VhbHMgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlNFQUxcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQ5XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vc2VhbHMuYXBwXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIwMDcsXG5cdFx0XCJuZXR3b3JrXCI6IFwia2FwZXhcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS2FwZXhcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLQVBFWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdG90ZW1hY2NvdW50aW5nLmNvbVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyMDA5LFxuXHRcdFwibmV0d29ya1wiOiBcImNsb3Vkd2Fsa19tYWlubmV0XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNsb3VkV2FsayBOZXR3b3JrIE1haW5uZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJDV05cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2V4cGxvcmVyLm1haW5uZXQuY2xvdWR3YWxrLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIwMjEsXG5cdFx0XCJuZXR3b3JrXCI6IFwibG9naW9uXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcImxvZ2lvbiBuZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTEdOVFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbG9naW9uLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjAzMixcblx0XHRcIm5ldHdvcmtcIjogXCJpbnRlcmxheVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJJbnRlcmxheVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIklOVFJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2ludGVybGF5LmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyMDkyLFxuXHRcdFwibmV0d29ya1wiOiBcImtpbnRzdWdpXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIktpbnRzdWdpXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiS0lOVFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaW50ZXJsYXkuaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIxMDYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiYml0Z3JlZW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQml0Z3JlZW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJCQkJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2JpdGdyZWVuLm9yZy9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjExMixcblx0XHRcIm5ldHdvcmtcIjogXCJjaGFpbmZsaXBcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQ2hhaW5mbGlwXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRkxJUFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vY2hhaW5mbGlwLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyMTk5LFxuXHRcdFwibmV0d29ya1wiOiBcIm1vb25zYW1hXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk1vb25zYW1hXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiU0FNQVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcInNlY3AyNTZrMVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbW9vbnNhbWEuY29tXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIyMDYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiSUNFXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIklDRSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiSUNZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9pY2VuZXR3b3JrLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIyMDcsXG5cdFx0XCJuZXR3b3JrXCI6IFwiU05PV1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJTTk9XOiBJQ0UgQ2FuYXJ5IE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJJQ1pcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2ljZW5ldHdvcmsuaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjI1NCxcblx0XHRcIm5ldHdvcmtcIjogXCJzdWJzcGFjZV90ZXN0bmV0XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlN1YnNwYWNlIHRlc3RuZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJ0U1NDXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9zdWJzcGFjZS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDMzMzMsXG5cdFx0XCJuZXR3b3JrXCI6IFwicGVlcnBsYXlzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlBlZXJwbGF5c1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBQWVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcInNlY3AyNTZrMVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vd3d3LnBlZXJwbGF5cy5jb20vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQ0NTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZzFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwixJ4xXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRzFcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZHVuaXRlci5vcmdcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNTIzNCxcblx0XHRcIm5ldHdvcmtcIjogXCJodW1hbm9kZVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJIdW1hbm9kZSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiSE1ORFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaHVtYW5vZGUuaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNTg0NSxcblx0XHRcIm5ldHdvcmtcIjogXCJ0YW5nbGVcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGFuZ2xlIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJUTlRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy50YW5nbGUudG9vbHMvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDYwOTQsXG5cdFx0XCJuZXR3b3JrXCI6IFwic3Vic3BhY2VcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU3Vic3BhY2VcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJTU0NcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3N1YnNwYWNlLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNzAwNyxcblx0XHRcIm5ldHdvcmtcIjogXCJ0aWRlZmlcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGlkZWZpXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiVERGWVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdGlkZWZpLmNvbVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3MDEzLFxuXHRcdFwibmV0d29ya1wiOiBcImdtXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkdNXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRlJFTlwiLFxuXHRcdFx0XCJHTVwiLFxuXHRcdFx0XCJHTlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyLFxuXHRcdFx0MCxcblx0XHRcdDBcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9nbW9yZGllLmNvbVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3MzA2LFxuXHRcdFwibmV0d29ya1wiOiBcImtyaWdhblwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLcmlnYW4gTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIktSR05cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQ5XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8va3JpZ2FuLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNzM5MSxcblx0XHRcIm5ldHdvcmtcIjogXCJ1bmlxdWVfbWFpbm5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJVbmlxdWUgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlVOUVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdW5pcXVlLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogODg2Nixcblx0XHRcIm5ldHdvcmtcIjogXCJnb2xkZW5fZ2F0ZVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJHb2xkZW4gR2F0ZVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkdHWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZ2d4Y2hhaW4uaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDg4ODMsXG5cdFx0XCJuZXR3b3JrXCI6IFwic2FwcGhpcmVfbWFpbm5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJTYXBwaGlyZSBieSBVbmlxdWVcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJRVFpcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3VuaXF1ZS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDg4ODYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZ29sZGVuX2dhdGVfc3lkbmV5XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkdvbGRlbiBHYXRlIFN5ZG5leVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkdHWFRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2dneGNoYWluLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA5MDcyLFxuXHRcdFwibmV0d29ya1wiOiBcImhhc2hlZFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJIYXNoZWQgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkhBU0hcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2hhc2hlZC5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDk4MDcsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZGVudG5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJERU5UTmV0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiREVOVFhcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy5kZW50bmV0LmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDk5MzUsXG5cdFx0XCJuZXR3b3JrXCI6IFwidDNyblwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJ0M3JuXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiVFJOXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly90M3JuLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMDA0MSxcblx0XHRcIm5ldHdvcmtcIjogXCJiYXNpbGlza1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJCYXNpbGlza1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkJTWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vYnN4LmZpXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExMzMwLFxuXHRcdFwibmV0d29ya1wiOiBcImNlc3MtdGVzdG5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJDRVNTIFRlc3RuZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJUQ0VTU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vY2Vzcy5jbG91ZFwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMTMzMSxcblx0XHRcIm5ldHdvcmtcIjogXCJjZXNzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNFU1NcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJDRVNTXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9jZXNzLmNsb3VkXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExNDg2LFxuXHRcdFwibmV0d29ya1wiOiBcImx1aG5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTHVobiBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTFVITlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbHVobi5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExODIwLFxuXHRcdFwibmV0d29ya1wiOiBcImNvbnRleHRmcmVlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkF1dG9tYXRhIENvbnRleHRGcmVlXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQ1RYXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hdGEubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjE1NSxcblx0XHRcIm5ldHdvcmtcIjogXCJpbXBhY3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSW1wYWN0IFByb3RvY29sIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJCU1RZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9pbXBhY3Rwcm90b2NvbC5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjE5MSxcblx0XHRcIm5ldHdvcmtcIjogXCJuZnRtYXJ0XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk5GVE1hcnRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJOTVRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL25mdG1hcnQuaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTMxMTYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiYml0dGVuc29yXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkJpdHRlbnNvclwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlRBT1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDlcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9iaXR0ZW5zb3IuY29tXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE0Njk3LFxuXHRcdFwibmV0d29ya1wiOiBcImdvcm9cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiR09STyBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiR09ST1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDlcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9nb3JvLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTQ5OTgsXG5cdFx0XCJuZXR3b3JrXCI6IFwibW9zYWljLWNoYWluXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk1vc2FpYyBDaGFpblwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk1PU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbW9zYWljY2hhaW4uaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjk5NzIsXG5cdFx0XCJuZXR3b3JrXCI6IFwibXl0aG9zXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk15dGhvc1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk1ZVEhcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCJzZWNwMjU2azFcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL215dGhvcy5mb3VuZGF0aW9uXCJcblx0fVxuXTtcbiIsImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9pbmRleC5qcydcblxuZXhwb3J0IHsgRXZlbnRFbWl0dGVyIH1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50RW1pdHRlclxuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZTtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKGVudi5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xuICAgICAgICBpZiAocmVjLmFzeW5jKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCJpbXBvcnQgeyB0b3B1cFRoZW5Jbml0aWF0aXZlQWRkTWVtYmVycywgdG9wdXBUaGVuSW5pdGlhdGl2ZVZvdGUgfSBmcm9tIFwiLi9pbml0aWF0aXZlc1wiO1xuaW1wb3J0IHsgdG9wdXBUaGVuQ3JlYXRlQ29tbXVuaXR5IH0gZnJvbSBcIi4vdG9wLXVwLXRoZW4tY3JlYXRlLWNvbW11bml0eVwiO1xuZXhwb3J0IHsgWGNtUHJvZ3JhbXNFeGVjdXRvciB9IGZyb20gXCIuL2V4ZWN1dG9yXCI7XG5leHBvcnQgZnVuY3Rpb24gZ2xvYmFsbHlJbmplY3RQcm9ncmFtcyhleGVjdXRvcikge1xuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IFt0b3B1cFRoZW5DcmVhdGVDb21tdW5pdHksIHRvcHVwVGhlbkluaXRpYXRpdmVBZGRNZW1iZXJzLCB0b3B1cFRoZW5Jbml0aWF0aXZlVm90ZV07XG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgICAgZ2xvYmFsVGhpc1tmbi5uYW1lXSA9ICguLi5wYXJhbXMpID0+IGV4ZWN1dG9yLmV4ZWN1dGUoZm4sIC4uLnBhcmFtcyk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtCQUErQixpQkFBaUI7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsK0JBQStCLGlCQUFpQjtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsV0FBVztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFdBQVc7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNB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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixjQUFjO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsOEJBQThCLG1DQUFtQztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEIsbUNBQW1DO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsOEJBQThCLG1DQUFtQztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixtQ0FBbUM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsUUFBUTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0JBQW9CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLFFBQVE7QUFDckM7QUFDQSw4QkFBOEIsUUFBUTtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELGVBQWUsYUFBYSxhQUFhO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGFBQWEsYUFBYTtBQUNwRCxnQ0FBZ0MsbUJBQW1CLGFBQWE7QUFDaEU7QUFDQTtBQUNBLDhCQUE4QixpQkFBaUIsYUFBYTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGdDQUFnQyxtQkFBbUIsYUFBYTtBQUNoRTtBQUNBO0FBQ0EsOEJBQThCLGlCQUFpQixhQUFhO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsbUJBQW1CO0FBQ2hDLGFBQWEsbUJBQW1CO0FBQ2hDLGFBQWEsb0JBQW9CO0FBQ2pDO0FBQ0EscUJBQXFCLGlCQUFpQixRQUFRLFdBQVcsR0FBRywwQkFBMEIsR0FBRyx5QkFBeUI7QUFDbEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE9BQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isc0NBQXNDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGFBQWEsV0FBVztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG9CQUFvQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxtQkFBbUI7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELGNBQWMsZUFBZTtBQUN6RixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxjQUFjLGdCQUFnQjtBQUMxRixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxjQUFjLGVBQWU7QUFDekYsS0FBSztBQUNMO0FBQ0E7QUFDQSxxRUFBcUUsRUFBRTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsUUFBUTtBQUN4RDtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCx5Q0FBeUMsdUJBQXVCO0FBQ2hFLDhIQUE4SDtBQUM5SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixnQ0FBZ0MsbUJBQW1CLGFBQWE7QUFDaEU7QUFDQTtBQUNBLDhCQUE4QixpQkFBaUIsYUFBYTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGdDQUFnQyxtQkFBbUIsYUFBYTtBQUNoRTtBQUNBO0FBQ0EsOEJBQThCLGlCQUFpQixhQUFhO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUJBQXVCLGFBQWE7QUFDOUQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsdUJBQXVCLGFBQWE7QUFDOUQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhLGFBQWE7QUFDcEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhLGFBQWE7QUFDcEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhLGFBQWE7QUFDcEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGlCQUFpQixhQUFhO0FBQ3hELGdDQUFnQyxtQkFBbUIsYUFBYTtBQUNoRTtBQUNBO0FBQ0EsOEJBQThCLGlCQUFpQixhQUFhO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsaUJBQWlCLGFBQWE7QUFDeEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0IsYUFBYTtBQUN2RCxnQ0FBZ0MsbUJBQW1CLGFBQWE7QUFDaEU7QUFDQTtBQUNBLDhCQUE4QixpQkFBaUIsYUFBYTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0IsYUFBYTtBQUN2RCxnQ0FBZ0MsbUJBQW1CLGFBQWE7QUFDaEU7QUFDQTtBQUNBLDhCQUE4QixpQkFBaUIsYUFBYTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGdCQUFnQixhQUFhO0FBQ3ZELGdDQUFnQyxtQkFBbUIsYUFBYTtBQUNoRTtBQUNBO0FBQ0EsOEJBQThCLGlCQUFpQixhQUFhO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGdCQUFnQixhQUFhO0FBQ3ZELGdDQUFnQyxtQkFBbUIsYUFBYTtBQUNoRTtBQUNBO0FBQ0EsOEJBQThCLGlCQUFpQixhQUFhO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsaUJBQWlCLGFBQWE7QUFDeEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhLGFBQWE7QUFDcEQsZ0NBQWdDLG1CQUFtQixhQUFhO0FBQ2hFO0FBQ0E7QUFDQSw4QkFBOEIsaUJBQWlCLGFBQWE7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixnQkFBZ0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLFVBQVU7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsbUJBQW1CO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixrREFBa0Q7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELG1CQUFtQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQiw2QkFBNkI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELG1CQUFtQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0RBQWdELEdBQUc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGFBQWEsYUFBYTtBQUNwRCxnQ0FBZ0MsbUJBQW1CLGFBQWE7QUFDaEU7QUFDQTtBQUNBLDhCQUE4QixpQkFBaUIsYUFBYTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ08sc0JBQXNCLDBDQUFJO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isd0RBQVcsT0FBTyxHQUFHLHdEQUFXLFNBQVM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLE1BQU07QUFDbkMsbUNBQW1DLHVCQUF1QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ25LTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ1JPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ3hDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1RzRDtBQUNtQztBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUN0UE87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ1RPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDMUZxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRUFBVztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUVBQVc7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzdETztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDUHFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRUFBVztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbkRxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUVBQVc7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRUFBVztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzRHFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtRUFBVztBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xIcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1FQUFXO0FBQzFCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUVBQVc7QUFDMUI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkRpRDtBQUNJO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7OztBQ0Y1QztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDMzVKTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDL3lHTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQzVFK0I7QUFDL0IsaUVBQWU7QUFDZixPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ1BLO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNuSUEsaUVBQWU7QUFDZixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDUEYsaUVBQWU7QUFDZixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3pCRixpRUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ042QjtBQUNRO0FBQ3ZDLGlFQUFlO0FBQ2YsT0FBTztBQUNQLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDeGFLO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDakxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlO0FBQ2YsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsRUFBRSxHQUFHLG1EQUFTLDJEQUFTLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQy9WdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDZCQUE2QjtBQUNoRDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixjQUFjO0FBQ2Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsY0FBYyxrQ0FBa0M7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ2xmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzVVQSxpRUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3pGRixpRUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7OztBQy9CcUM7QUFDdkMsaUVBQWU7QUFDZixXQUFXO0FBQ1gsV0FBVztBQUNYO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNMRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDZnVDO0FBQ3ZDLGlFQUFlO0FBQ2YsV0FBVztBQUNYLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNUSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDakNBLGlFQUFlO0FBQ2YsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ3pCcUM7QUFDdkMsaUVBQWU7QUFDZixXQUFXO0FBQ1gsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDUEs7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDdkJBLGlFQUFlO0FBQ2YsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyQjZCO0FBQ1E7QUFDdkMsaUVBQWU7QUFDZixPQUFPO0FBQ1AsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ2xJSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFD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Q3JFRjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDckNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxRDBDO0FBQ25DO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsZUFBZSxtREFBVTtBQUN6QjtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUN6RE87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDMUJPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6RGdEO0FBQ3pDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFdBQVcsd0RBQVU7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLHdEQUFVO0FBQ3JCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyx3REFBVTtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUMxRk87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUN6RE87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5RXVDO0FBQ3ZDLGlFQUFlO0FBQ2YsV0FBVztBQUNYLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsMEJBQTBCO0FBQzFCLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQzFCSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyQytCO0FBQ1E7QUFDdkMsaUVBQWU7QUFDZixPQUFPO0FBQ1AsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDbENLO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNB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QUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlO0FBQ2YsV0FBVztBQUNYLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdEQUFTO0FBQ3BCO0FBQ0EsV0FBVyxpREFBUztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQzdpQkY7QUFDQSxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDeEJGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQ3paQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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VDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDNU5GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQzFHNkI7QUFDQTtBQUM3QjtBQUNBLGlFQUFlO0FBQ2YsV0FBVztBQUNYO0FBQ0EsV0FBVyxzQ0FBRTtBQUNiLFdBQVcsc0NBQUU7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUN6QkY7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoRUE7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNoRUEsaUVBQWU7QUFDZixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0QnFDO0FBQ3ZDO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWU7QUFDZixXQUFXO0FBQ1gsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNyQ0s7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzVCQSxpRUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FDM0JxQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkUsbUVBQW1FO0FBQ25FLG1FQUFtRTtBQUNuRSxtRUFBbUU7QUFDbkUsbUVBQW1FO0FBQ25FLG1FQUFtRTtBQUNuRSxtRUFBbUU7QUFDbkUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkUsbUVBQW1FO0FBQ25FLG1FQUFtRTtBQUNuRSxtRUFBbUU7QUFDbkUsbUVBQW1FO0FBQ25FLG1FQUFtRTtBQUNuRSxtRUFBbUU7QUFDbkUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsS0FBSztBQUNMO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQscURBQXFEO0FBQ3JELHFEQUFxRDtBQUNyRCxxREFBcUQ7QUFDckQscURBQXFEO0FBQ3JELHFEQUFxRDtBQUNyRCxxREFBcUQ7QUFDckQscURBQXFEO0FBQ3JELHFEQUFxRDtBQUNyRCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsaUVBQWU7QUFDZixXQUFXO0FBQ1gsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztBQ3RTSztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEIrQjtBQUMvQixpRUFBZTtBQUNmLE9BQU87QUFDUDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNyRks7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUM3VEs7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNB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VDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7O0FDMUpLO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDeE5PO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDdk5PO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQzdKNEM7QUFDckMsaUNBQWlDO0FBQ2pDLDBCQUEwQixzREFB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ3BNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsT0FBTztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLDBDQUEwQyxXQUFXO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xENkM7QUFDTztBQUNsQjtBQUNRO0FBQ0k7QUFDSjtBQUNOO0FBQ007QUFDQTtBQUNUO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVEQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLGFBQWEsK0NBQUk7QUFDakI7QUFDQTtBQUNBLGFBQWEsaURBQUssV0FBVyx1REFBUTtBQUNyQyxlQUFlLHVEQUFRLENBQUMsdURBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCO0FBQ0E7QUFDQSxpQkFBaUIsMkJBQTJCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwyREFBVTtBQUN6QztBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUVBQVU7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsdURBQU87QUFDcEM7QUFDQSxzQkFBc0IsdURBQU87QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1Asb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsMENBQUk7QUFDbEI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNySDJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sdUJBQXVCLCtCQUErQixJQUFJO0FBQ2pFO0FBQ0E7QUFDQSw2QkFBNkIsd0RBQVM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsd0RBQVM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2QkE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSx5Q0FBeUMsV0FBVztBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AseUNBQXlDLFdBQVc7QUFDcEQ7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLDRDQUE0QyxXQUFXO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25CTztBQUNBO0FBQ1AseUNBQXlDLFdBQVc7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsV0FBVztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxHQUFHO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQOzs7Ozs7Ozs7Ozs7Ozs7OztBQzFEb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxtQkFBbUI7QUFDL0I7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNPLGlEQUFpRCxtREFBUTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG1CQUFtQjtBQUMvQjtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ08saURBQWlELG1EQUFROzs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDckI7QUFDRjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGNBQWM7QUFDMUI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNPO0FBQ1AsV0FBVyx1REFBUSxDQUFDLHNEQUFXO0FBQy9COzs7Ozs7Ozs7Ozs7Ozs7O0FDbEJzRDtBQUN0RCxvQkFBb0IsZ0VBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxjQUFjO0FBQzFCO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDcEIwQztBQUMxQztBQUNBO0FBQ0EsV0FBVyx1REFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2RzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFlBQVk7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0Isa0JBQWtCLG1EQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQzlDc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7QUFDTztBQUNQLGlCQUFpQixtREFBUTtBQUN6QixpQkFBaUIsbURBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELFdBQVc7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNPLDBCQUEwQixrQ0FBa0MsSUFBSTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsV0FBVztBQUN6QztBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0NBQUU7QUFDN0I7QUFDQSwyQkFBMkIsc0NBQUU7QUFDN0I7QUFDQSwyQkFBMkIsc0NBQUU7QUFDN0I7QUFDQSwyQkFBMkIsc0NBQUU7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHNDQUFFO0FBQzdCO0FBQ0EsMkJBQTJCLHNDQUFFO0FBQzdCO0FBQ0EsMkJBQTJCLHNDQUFFO0FBQzdCO0FBQ0EsMkJBQTJCLHNDQUFFO0FBQzdCO0FBQ0E7QUFDQSw0QkFBNEIsV0FBVztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsc0NBQUU7QUFDekI7QUFDQSx1QkFBdUIsc0NBQUU7QUFDekI7QUFDQSx1QkFBdUIsc0NBQUU7QUFDekI7QUFDQSx1QkFBdUIsc0NBQUU7QUFDekI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNDQUFFO0FBQ3pCO0FBQ0EsdUJBQXVCLHNDQUFFO0FBQ3pCO0FBQ0EsdUJBQXVCLHNDQUFFO0FBQ3pCO0FBQ0EsdUJBQXVCLHNDQUFFO0FBQ3pCO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sNkJBQTZCLDhCQUE4QixJQUFJO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEVBQTRFLGVBQWUsZUFBZSxhQUFhO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDaEJBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBDQUEwQyxHQUFHLG1EQUFtRDtBQUN0SDtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sOEJBQThCLGtDQUFrQyxJQUFJO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qix1QkFBdUI7QUFDcEQ7QUFDQTtBQUNBLGlDQUFpQyxZQUFZO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDekRzRDtBQUN0RCxvQkFBb0IsZ0VBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxjQUFjO0FBQzFCO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BCMkM7QUFDQTtBQUNOO0FBQ0E7QUFDWTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkI7QUFDQSwwQ0FBMEM7QUFDMUMscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDTztBQUNQLFdBQVcsaURBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsVUFBVSx1REFBUTtBQUNsQjtBQUNBO0FBQ0EsVUFBVSxpREFBSztBQUNmLGNBQWMsdURBQVE7QUFDdEI7QUFDQTtBQUNBLGtCQUFrQiw2REFBVztBQUM3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQzhDO0FBQ2Q7QUFDTTtBQUN0QztBQUNPLHdDQUF3QyxtREFBUTtBQUN2RDtBQUNPLHNDQUFzQyxtREFBUTtBQUNyRDtBQUNPLHVDQUF1QyxtREFBUTtBQUN0RDtBQUNBO0FBQ087QUFDUDtBQUNBLFFBQVEsNkNBQUs7QUFDYixRQUFRLDZDQUFLO0FBQ2I7QUFDQTtBQUNBLFlBQVksNkNBQUs7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsZ0JBQWdCLG1EQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsZ0JBQWdCLG1EQUFRO0FBQ3hCO0FBQ0E7QUFDQSxVQUFVLDJEQUFlO0FBQ3pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxQzBEO0FBQzNCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsT0FBTyx3Q0FBRztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDJEQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QiwyREFBVztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyREFBVztBQUMxQjtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsS0FBSztBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RSxLQUFLLEtBQUssY0FBYztBQUNyRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2QzJEO0FBQzNELHlCQUF5QixlQUFlO0FBQ3hDLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qyw0Q0FBNEM7QUFDekY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDNURPLHNCQUFzQiwyQ0FBMkMsS0FBOEIsWUFBWSw4R0FBZSxnQ0FBZ0MsOEdBQWUsbUNBQW1DLENBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBcEs7QUFDRTtBQUNSO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxpQ0FBaUMsbUVBQVksV0FBVyxpRUFBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSVDtBQUNUO0FBQ1A7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZ0NBQWdDLCtEQUFVLENBQUMsaUVBQVksQ0FBQyxnREFBSyxpQkFBaUIsZ0RBQUssbUJBQW1CLGlEQUFNOzs7Ozs7Ozs7Ozs7Ozs7QUNaNUcsc0JBQXNCLDJDQUEyQyxLQUE4QixZQUFZLDhHQUFlLGdDQUFnQyw4R0FBZSxtQ0FBbUMsQ0FBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ExSztBQUNBO0FBQzdCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw0Q0FBTTtBQUNuQjtBQUNBO0FBQ0Esa0JBQWtCLDRDQUFNO0FBQ3hCO0FBQ0E7QUFDTztBQUNQO0FBQ0EsV0FBVyw0Q0FBTTtBQUNqQixDQUFDO0FBQ007QUFDUCxvQ0FBb0MsNENBQU07QUFDMUMsV0FBVyw0Q0FBTTtBQUNqQixDQUFDO0FBQ007QUFDUCx3Q0FBd0MsNENBQU0seUJBQXlCLDRDQUFNO0FBQzdFLFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AsaUNBQWlDLDRDQUFNLHlCQUF5Qiw0Q0FBTTtBQUN0RSxXQUFXLDRDQUFNO0FBQ2pCLENBQUM7QUFDTTtBQUNQLDJDQUEyQyw0Q0FBTTtBQUNqRDtBQUNBLENBQUM7QUFDTTtBQUNQLGdDQUFnQyw0Q0FBTTtBQUN0QyxXQUFXLDRDQUFNO0FBQ2pCLENBQUM7QUFDTTtBQUNQLDJCQUEyQiw0Q0FBTSxzQkFBc0IsNENBQU0sc0JBQXNCLDRDQUFNO0FBQ3pGLFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1Asc0NBQXNDLDRDQUFNLHlCQUF5Qiw0Q0FBTSx1QkFBdUIsNENBQU07QUFDeEc7QUFDQSxDQUFDO0FBQ007QUFDUCxrQ0FBa0MsNENBQU07QUFDeEMsV0FBVyw0Q0FBTTtBQUNqQixDQUFDO0FBQ007QUFDUCxxQ0FBcUMsNENBQU07QUFDM0MsV0FBVyw0Q0FBTTtBQUNqQixDQUFDO0FBQ007QUFDUCxtQ0FBbUMsNENBQU07QUFDekMsV0FBVyw0Q0FBTTtBQUNqQixDQUFDO0FBQ007QUFDUCxnQ0FBZ0MsNENBQU0sdUJBQXVCLDRDQUFNO0FBQ25FLFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AsNkJBQTZCLDRDQUFNLHVCQUF1Qiw0Q0FBTTtBQUNoRSxXQUFXLDRDQUFNO0FBQ2pCLENBQUM7QUFDTTtBQUNQLDBDQUEwQyw0Q0FBTSxvQkFBb0IsNENBQU07QUFDMUUsV0FBVyw0Q0FBTTtBQUNqQixDQUFDO0FBQ007QUFDUCwwQ0FBMEMsNENBQU0sb0JBQW9CLDRDQUFNO0FBQzFFLFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AseUNBQXlDLDRDQUFNLHNCQUFzQiw0Q0FBTTtBQUMzRSxXQUFXLDRDQUFNO0FBQ2pCLENBQUM7QUFDTTtBQUNQLGdDQUFnQyw0Q0FBTTtBQUN0QyxXQUFXLDRDQUFNO0FBQ2pCLENBQUM7QUFDTTtBQUNQLDJCQUEyQiw0Q0FBTSxzQkFBc0IsNENBQU0sc0JBQXNCLDRDQUFNO0FBQ3pGLFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1Asc0NBQXNDLDRDQUFNLHlCQUF5Qiw0Q0FBTSx1QkFBdUIsNENBQU07QUFDeEc7QUFDQSxDQUFDO0FBQ007QUFDUCw0QkFBNEIsNENBQU0sc0JBQXNCLDRDQUFNO0FBQzlELFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AsNEJBQTRCLDRDQUFNLHNCQUFzQiw0Q0FBTSx1QkFBdUIsNENBQU0sdUJBQXVCLDRDQUFNO0FBQ3hILFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AsdUNBQXVDLDRDQUFNLHNCQUFzQiw0Q0FBTSx1QkFBdUIsNENBQU0sdUJBQXVCLDRDQUFNLHFCQUFxQiw0Q0FBTTtBQUM5SjtBQUNBLENBQUM7QUFDTTtBQUNQLDJCQUEyQiw0Q0FBTSxvQkFBb0IsNENBQU07QUFDM0QsV0FBVyw0Q0FBTTtBQUNqQixDQUFDO0FBQ007QUFDUCwrQkFBK0IsNENBQU0sbUJBQW1CLDRDQUFNO0FBQzlELFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AsK0JBQStCLDRDQUFNLG1CQUFtQiw0Q0FBTTtBQUM5RCxXQUFXLDRDQUFNO0FBQ2pCLENBQUM7QUFDTTtBQUNQLDZCQUE2Qiw0Q0FBTTtBQUNuQyxXQUFXLDRDQUFNO0FBQ2pCLENBQUM7QUFDTTtBQUNQLDZCQUE2Qiw0Q0FBTTtBQUNuQyxXQUFXLDRDQUFNO0FBQ2pCLENBQUM7QUFDTTtBQUNQLDBCQUEwQiw0Q0FBTSxvQkFBb0IsNENBQU07QUFDMUQsV0FBVyw0Q0FBTTtBQUNqQixDQUFDO0FBQ007QUFDUCwwQkFBMEIsNENBQU0sd0JBQXdCLDRDQUFNO0FBQzlELFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AsMEJBQTBCLDRDQUFNO0FBQ2hDLFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AsMEJBQTBCLDRDQUFNO0FBQ2hDLFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1Asd0JBQXdCLDRDQUFNO0FBQzlCLFdBQVcsNENBQU07QUFDakIsQ0FBQztBQUNNO0FBQ1AsYUFBYSw0Q0FBTTtBQUNuQjtBQUNPO0FBQ1A7QUFDQSwyQkFBMkIsb0RBQVU7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwSytDO0FBQ1M7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sbUJBQW1CLHlEQUFNLENBQUMsa0VBQVU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDaEJPLHNCQUFzQixzQ0FBc0MsS0FBOEIsWUFBWSx5R0FBZSxnQ0FBZ0MseUdBQWUsbUNBQW1DLENBQU07Ozs7Ozs7Ozs7Ozs7OztBQ0FwTjtBQUNBO0FBQ0Esb0NBQW9DLFdBQVc7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxjQUFjO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixRQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUIsMkJBQTJCLGNBQWM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsUUFBUTtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxXQUFXO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsV0FBVztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxPQUFPO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QWdFLFVBQVUsY0FBYyxTQUFTO0FBQ2pHO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLDJCQUEyQjtBQUMzQjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7Ozs7Ozs7Ozs7Ozs7O0FDeGRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtB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QzFDO0FBQ1A7QUFDQSxRQUFRLG1GQUF3QjtBQUNoQyxRQUFRLGtFQUF3QjtBQUNoQyxRQUFRLGlGQUF1QjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvYm4uanMvbGliL2JuLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvaGFzaC13YXNtL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL0JlaGF2aW9yU3ViamVjdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvT2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1NjaGVkdWxlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJqZWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmliZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3Vic2NyaXB0aW9uLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tU3Vic2NyaWJhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvaW5uZXJGcm9tLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb2YuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY2F0Y2hFcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0QWxsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3RVbnRpbENoYW5nZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmlyc3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VBbGwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9vYnNlcnZlT24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hSZXBsYXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW5JbnRlcm5hbHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3Vic2NyaWJlT24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVJdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcEFjdGlvbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNBY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hc2FwLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbnRlcnZhbFByb3ZpZGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvRW1wdHlFcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0ltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvVW5zdWJzY3JpcHRpb25FcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyclJlbW92ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2NyZWF0ZUVycm9yQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9jcmVhdGVPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9lcnJvckNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNBc3luY0l0ZXJhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0l0ZXJhYmxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1NjaGVkdWxlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2xpZnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbm9vcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3BpcGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9zcmMvY29tbW9uLnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL2V4ZWN1dG9yLnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL2luaXRpYXRpdmVzL2FkZC1tZW1iZXJzL2luZGV4LnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL2luaXRpYXRpdmVzL2luZGV4LnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL2luaXRpYXRpdmVzL3JlbW92ZS1tZW1iZXJzL2luZGV4LnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL2luaXRpYXRpdmVzL3RyZWFzdXJ5L2luZGV4LnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL3RvcC11cC10aGVuLWNyZWF0ZS1jb21tdW5pdHkvYWNxdWlyZS1tZW1iZXJzaGlwcy1pbnZpdGUtbWVtYmVycy50cyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL3NyYy90b3AtdXAtdGhlbi1jcmVhdGUtY29tbXVuaXR5L2NyZWF0ZS1jb21tdW5pdHkudHMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9zcmMvdG9wLXVwLXRoZW4tY3JlYXRlLWNvbW11bml0eS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL3NyYy90b3AtdXAtdGhlbi1jcmVhdGUtY29tbXVuaXR5L3NldC1pZGVudGl0eS50cyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL3NyYy90b3AtdXAtdGhlbi1jcmVhdGUtY29tbXVuaXR5L3RvcHVwLWFjY291bnRzLnRzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vc3JjL3RvcC11cC10aGVuLXZvdGUtaW5pdGlhdGl2ZS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL3NyYy91dGlscy9jb21tdW5pdHktYWNjb3VudC1pZHMudHMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvaWdub3JlZHwvaG9tZS9icmF5YW4vRG9jdW1lbnRzL3dvcmsvdmlydG8veGNtLXByb2dyYW1zL25vZGVfbW9kdWxlcy9ibi5qcy9saWJ8YnVmZmVyIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtL2Nqcy9ieXRlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9fc2hvcnR3X3V0aWxzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L2N1cnZlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9jdXJ2ZXMvZXNtL2Fic3RyYWN0L2hhc2gtdG8tY3VydmUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2N1cnZlcy9lc20vYWJzdHJhY3QvbW9kdWxhci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC91dGlscy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9hYnN0cmFjdC93ZWllcnN0cmFzcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvY3VydmVzL2VzbS9zZWNwMjU2azEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX2Fzc2VydC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9fYmxha2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vX21kLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bub2JsZS9oYXNoZXMvZXNtL191NjQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vYmxha2UyYi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9jcnlwdG8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vaG1hYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS9zaGEyNTYuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQG5vYmxlL2hhc2hlcy9lc20vc2hhMy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Abm9ibGUvaGFzaGVzL2VzbS91dGlscy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hY2NvdW50cy9hY2NvdW50SWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYWNjb3VudHMvZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYWNjb3VudHMvaWRBbmRJbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hY2NvdW50cy9pZFRvSW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYWNjb3VudHMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYWNjb3VudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYWNjb3VudHMvaW5kZXhUb0lkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2FjY291bnRzL2luZGV4ZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYWNjb3VudHMvaW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9hbGxpYW5jZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9iYWdzTGlzdC9nZXQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYmFnc0xpc3QvZ2V0RXhwYW5kZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYmFnc0xpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYmFnc0xpc3QvbGlzdE5vZGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2JhZ3NMaXN0L3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYmFsYW5jZXMvYWNjb3VudC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9iYWxhbmNlcy9hbGwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYmFsYW5jZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYmFsYW5jZXMvdm90aW5nQmFsYW5jZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYm91bnRpZXMvYm91bnRpZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYm91bnRpZXMvaGVscGVycy9maWx0ZXJCb3VudHlQcm9wb3NhbHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYm91bnRpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvYnVuZGxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NoYWluL2Jlc3ROdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vYmVzdE51bWJlckZpbmFsaXplZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jaGFpbi9iZXN0TnVtYmVyTGFnLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NoYWluL2dldEJsb2NrLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NoYWluL2dldEJsb2NrQnlOdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vZ2V0SGVhZGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NoYWluL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NoYWluL3N1YnNjcmliZUZpbmFsaXplZEJsb2Nrcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jaGFpbi9zdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jaGFpbi9zdWJzY3JpYmVOZXdCbG9ja3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vc3Vic2NyaWJlTmV3SGVhZHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY2hhaW4vdXRpbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jb2xsZWN0aXZlL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY29sbGVjdGl2ZS9tZW1iZXJzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NvbGxlY3RpdmUvcHJpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY29sbGVjdGl2ZS9wcm9wb3NhbHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY29udHJhY3RzL2ZlZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY29udHJhY3RzL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2NvdW5jaWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY291bmNpbC92b3Rlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jb3VuY2lsL3ZvdGVzT2YuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvY3Jvd2Rsb2FuL2NoaWxkS2V5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2Nyb3dkbG9hbi9jb250cmlidXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2Nyb3dkbG9hbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jcm93ZGxvYW4vb3duQ29udHJpYnV0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9jcm93ZGxvYW4vdXRpbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvZGlzcGF0Y2hRdWV1ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVtb2NyYWN5L2xvY2tzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2RlbW9jcmFjeS9uZXh0RXh0ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVtb2NyYWN5L3ByZWltYWdlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvcHJvcG9zYWxzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2RlbW9jcmFjeS9yZWZlcmVuZHVtSWRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2RlbW9jcmFjeS9yZWZlcmVuZHVtcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvcmVmZXJlbmR1bXNBY3RpdmUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVtb2NyYWN5L3JlZmVyZW5kdW1zRmluaXNoZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVtb2NyYWN5L3JlZmVyZW5kdW1zSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9kZW1vY3JhY3kvc3FydEVsZWN0b3JhdGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVtb2NyYWN5L3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvZGVyaXZlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL2VsZWN0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9lbGVjdGlvbnMvaW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9pbU9ubGluZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9pbU9ubGluZS9yZWNlaXZlZEhlYXJ0YmVhdHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvbWVtYmVyc2hpcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9wYXJhY2hhaW5zL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3BhcmFjaGFpbnMvaW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9wYXJhY2hhaW5zL292ZXJ2aWV3LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3BhcmFjaGFpbnMvdXRpbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zZXNzaW9uL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3Nlc3Npb24vaW5kZXhlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zZXNzaW9uL2luZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc2Vzc2lvbi9wcm9ncmVzcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zb2NpZXR5L2NhbmRpZGF0ZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc29jaWV0eS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zb2NpZXR5L2luZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc29jaWV0eS9tZW1iZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc29jaWV0eS9tZW1iZXJzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvYWNjb3VudC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL2NhY2hlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvY3VycmVudFBvaW50cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL2VsZWN0ZWRJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvZXJhc0V4cG9zdXJlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvZXJhc0hpc3RvcmljLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvZXJhc1BvaW50cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL2VyYXNQcmVmcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL2VyYXNSZXdhcmRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvZXJhc1NsYXNoZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL2tleXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9vdmVydmlldy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL293bkV4cG9zdXJlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvb3duU2xhc2hlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL3F1ZXJ5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvc3Rha2VyRXhwb3N1cmUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9zdGFrZXJQb2ludHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9zdGFrZXJQcmVmcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL3N0YWtlclJld2FyZHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy9zdGFrZXJTbGFzaGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvc3Rhc2hlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS9zdGFraW5nL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvc3Rha2luZy92YWxpZGF0b3JzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3N0YWtpbmcvd2FpdGluZ0luZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdGVjaG5pY2FsQ29tbWl0dGVlL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3RyZWFzdXJ5L2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3RyZWFzdXJ5L3Byb3Bvc2Fscy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS90eC9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHgvZXZlbnRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3R4L2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3R4L3NpZ25pbmdJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3R5cGUvSGVhZGVyRXh0ZW5kZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHlwZS9TaWduZWRCbG9ja0V4dGVuZGVkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3R5cGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdHlwZS91dGlsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3V0aWwvYmxvY2tOdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS1kZXJpdmUvdXRpbC9jYWNoZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS91dGlsL2NhY2hlSW1wbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpLWRlcml2ZS91dGlsL2ZpcnN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGktZGVyaXZlL3V0aWwvbGF6eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL2Jhc2UvRGVjb3JhdGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS9iYXNlL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL2Jhc2UvR2V0dGVycy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL2Jhc2UvSW5pdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL2Jhc2UvZmluZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL2Jhc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS9wYWNrYWdlSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3Byb21pc2UvQXBpLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvcHJvbWlzZS9Db21iaW5hdG9yLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvcHJvbWlzZS9kZWNvcmF0ZU1ldGhvZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3N1Ym1pdHRhYmxlL1Jlc3VsdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvYXBpL3N1Ym1pdHRhYmxlL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvc3VibWl0dGFibGUvY3JlYXRlU3VibWl0dGFibGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS91dGlsL2F1Z21lbnRPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS91dGlsL2RlY29yYXRlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9hcGkvdXRpbC9maWx0ZXJFdmVudHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS91dGlsL2lzS2V5cmluZ1BhaXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS91dGlsL2xvZ2dpbmcuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2FwaS91dGlsL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9leHRlbnNpb24tZGFwcC9idW5kbGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L2V4dGVuc2lvbi1kYXBwL3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9leHRlbnNpb24tZGFwcC91dGlsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9leHRlbnNpb24tZGFwcC93cmFwQnl0ZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L25ldHdvcmtzL2RlZmF1bHRzL2dlbmVzaXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L25ldHdvcmtzL2RlZmF1bHRzL2ljb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9uZXR3b3Jrcy9kZWZhdWx0cy9sZWRnZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L25ldHdvcmtzL2RlZmF1bHRzL3Rlc3RuZXRzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9uZXR3b3Jrcy9pbnRlcmZhY2VzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9ycGMtY29yZS9idW5kbGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1jb3JlL3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9ycGMtY29yZS91dGlsL2Ryci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvcnBjLWNvcmUvdXRpbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvcnBjLWNvcmUvdXRpbC9tZW1vLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9ycGMtY29yZS91dGlsL3JlZkNvdW50RGVsYXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1wcm92aWRlci9jb2Rlci9lcnJvci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvcnBjLXByb3ZpZGVyL2NvZGVyL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC9ycGMtcHJvdmlkZXIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1wcm92aWRlci9scnUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1wcm92aWRlci93cy9lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3JwYy1wcm92aWRlci93cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYWJzdHJhY3QvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Fic3RyYWN0L0Jhc2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Fic3RyYWN0L0ludC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYmFzZS9Db21wYWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL0RvTm90Q29uc3RydWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL0VudW0uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Jhc2UvSW50LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL051bGwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2Jhc2UvT3B0aW9uLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL1Jlc3VsdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYmFzZS9UdXBsZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYmFzZS9VSW50LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9iYXNlL1ZlYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvYmFzZS9WZWNGaXhlZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvZXh0ZW5kZWQvQlRyZWVNYXAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL0JUcmVlU2V0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9leHRlbmRlZC9CaXRWZWMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL0J5dGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9leHRlbmRlZC9IYXNoTWFwLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9leHRlbmRlZC9NYXAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL09wdGlvbkJvb2wuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL1JhbmdlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9leHRlbmRlZC9SYW5nZUluY2x1c2l2ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvZXh0ZW5kZWQvVHlwZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvZXh0ZW5kZWQvVThhRml4ZWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL2V4dGVuZGVkL1dyYXBwZXJLZWVwT3BhcXVlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9leHRlbmRlZC9XcmFwcGVyT3BhcXVlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9uYXRpdmUvQm9vbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvbmF0aXZlL0Zsb2F0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9uYXRpdmUvSnNvbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvbmF0aXZlL1Jhdy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvbmF0aXZlL1NldC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvbmF0aXZlL1N0cnVjdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvbmF0aXZlL1RleHQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3ByaW1pdGl2ZS9GMzIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3ByaW1pdGl2ZS9GNjQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3ByaW1pdGl2ZS9JMTI4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvSTE2LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvSTI1Ni5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL0kzMi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL0k2NC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL0k4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvSVNpemUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3ByaW1pdGl2ZS9VMTI4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvVTE2LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvVTI1Ni5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL1UzMi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL1U2NC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvcHJpbWl0aXZlL1U4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy9wcmltaXRpdmUvVVNpemUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3V0aWxzL2NvbXBhcmVBcnJheS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvY29tcGFyZU1hcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvY29tcGFyZVNldC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvZGVjb2RlVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jb2RlYy91dGlscy9zYW5pdGl6ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvc29ydFZhbHVlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY29kZWMvdXRpbHMvdG9Db25zdHJ1Y3RvcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3V0aWxzL3R5cGVzVG9NYXAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNvZGVjL3V0aWxzL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNyZWF0ZS9jcmVhdGUvY2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWNyZWF0ZS9jcmVhdGUvdHlwZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY3JlYXRlL3R5cGVzL3R5cGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUvdXRpbC9lbmNvZGVUeXBlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY3JlYXRlL3V0aWwvZ2V0VHlwZURlZi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMtY3JlYXRlL3V0aWwvdHlwZVNwbGl0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUvdXRpbC94Y20uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL2NoYWluL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL2NlbnRyaWZ1Z2UtY2hhaW4uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3NwZWMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3NwZWMva3VzYW1hLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL25vZGUtdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3NwZWMvbm9kZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vc3BlYy9wb2xrYWRvdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vc3BlYy9yb2NvY28uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3NwZWMvc2hlbGwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3NwZWMvc3RhdGVtaW5lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL3N0YXRlbWludC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vc3BlYy93ZXN0ZW5kLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi9zcGVjL3dlc3RtaW50LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi91cGdyYWRlcy9lMmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3VwZ3JhZGVzL2UyZS9rdXNhbWEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3VwZ3JhZGVzL2UyZS9wb2xrYWRvdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMta25vd24vdXBncmFkZXMvZTJlL3dlc3RlbmQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzLWtub3duL3VwZ3JhZGVzL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy1rbm93bi91dGlsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9jcmVhdGUvbGF6eS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvY3JlYXRlL3JlZ2lzdHJ5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9ldGhlcmV1bS9BY2NvdW50SWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V0aGVyZXVtL0xvb2t1cFNvdXJjZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXRoZXJldW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9FeHRyaW5zaWMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9FeHRyaW5zaWNFcmEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9FeHRyaW5zaWNQYXlsb2FkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvRXh0cmluc2ljUGF5bG9hZFVua25vd24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9FeHRyaW5zaWNVbmtub3duLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvU2lnbmVyUGF5bG9hZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXh0cmluc2ljL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXh0cmluc2ljL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvc2lnbmVkRXh0ZW5zaW9ucy9lbXB0eUNoZWNrLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvc2lnbmVkRXh0ZW5zaW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXh0cmluc2ljL3NpZ25lZEV4dGVuc2lvbnMvcG9sa2Fkb3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9zaWduZWRFeHRlbnNpb25zL3NoZWxsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvc2lnbmVkRXh0ZW5zaW9ucy9zdGF0ZW1pbnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy9zaWduZWRFeHRlbnNpb25zL3N1YnN0cmF0ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZXh0cmluc2ljL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy92NC9FeHRyaW5zaWMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2V4dHJpbnNpYy92NC9FeHRyaW5zaWNQYXlsb2FkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvdjQvRXh0cmluc2ljU2lnbmF0dXJlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvdjQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2dlbmVyaWMvQWNjb3VudElkLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9nZW5lcmljL0FjY291bnRJbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9CbG9jay5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9DYWxsLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9nZW5lcmljL0NoYWluUHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9Db25zZW5zdXNFbmdpbmVJZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9FdmVudC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvZ2VuZXJpYy9Mb29rdXBTb3VyY2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2dlbmVyaWMvTXVsdGlBZGRyZXNzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9nZW5lcmljL1ZvdGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2dlbmVyaWMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2luZGV4LnR5cGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2FsaWFzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2Fzc2V0Q29udmVyc2lvbi9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9hc3NldENvbnZlcnNpb24vcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9hc3NldHMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYXNzZXRzL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYXR0ZXN0YXRpb25zL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2F1cmEvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYXVyYS9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2F1dGhvci9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9hdXRob3IvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2F1dGhvcnNoaXAvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYmFiZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9iYWJlL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9iYWJlL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYmFsYW5jZXMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYmVlZnkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYmVlZnkvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2JlZWZ5L3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvYmVuY2htYXJrL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2JlbmNobWFyay9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2Jsb2NrYnVpbGRlci9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ibG9ja2J1aWxkZXIvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9icmlkZ2VzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2NoYWluL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2NoYWluL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jaGlsZHN0YXRlL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2NoaWxkc3RhdGUvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2NsYWltcy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jb2xsZWN0aXZlL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2NvbnNlbnN1cy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jb250cmFjdHMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvY29udHJhY3RzL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jb250cmFjdHMvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9jb250cmFjdHNBYmkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvY3Jvd2Rsb2FuL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2N1bXVsdXMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvY3VtdWx1cy9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2RlbW9jcmFjeS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9kZXYvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZGV2L3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9kaXNjb3ZlcnkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZGlzY292ZXJ5L3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZWxlY3Rpb25zL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2VuZ2luZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9lbmdpbmUvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2Vzc2VudGlhbHMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZXRoL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2V0aC9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZXRoL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZXZtL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2V4dHJpbnNpY3MvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZmluYWxpdHkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZmluYWxpdHkvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9mdW5naWJsZXMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZnVuZ2libGVzL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZ2VuZXJpY0Fzc2V0L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2dlbmVzaXNCdWlsZGVyL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2dlbmVzaXNCdWlsZGVyL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvZ2lsdC9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ncmFuZHBhL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2dyYW5kcGEvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2dyYW5kcGEvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9pZGVudGl0eS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9pbU9ubGluZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9qc29ucnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL2xvdHRlcnkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbWV0YWRhdGEvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbWV0YWRhdGEvaGFzaGVycy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9tZXRhZGF0YS9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21ldGFkYXRhL3YxMC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9tZXRhZGF0YS92MTEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbWV0YWRhdGEvdjEyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21ldGFkYXRhL3YxMy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9tZXRhZGF0YS92MTQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbWV0YWRhdGEvdjE1LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21ldGFkYXRhL3Y5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL21peG5ldC9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9taXhuZXQvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9tbXIvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbW1yL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9tbXIvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9uZnRzL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL25mdHMvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9uaW1idXMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbmltYnVzL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbm9tcG9vbHMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvbm9tcG9vbHMvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9vZmZjaGFpbi9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9vZmZjaGFpbi9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvb2ZmY2hhaW4vcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9vZmZlbmNlcy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9vcm1sT3JhY2xlL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL29ybWxPcmFjbGUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9vcm1sVG9rZW5zL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL29ybWxUb2tlbnMvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wYXJhY2hhaW5zL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3BhcmFjaGFpbnMvaHJtcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wYXJhY2hhaW5zL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcGFyYWNoYWlucy9zbG90cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wYXltZW50L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3BheW1lbnQvcnBjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3BheW1lbnQvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wb2xsL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3Bvdy9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wb3cvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wcm94eS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9wdXJjaGFzZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9yZWNvdmVyeS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ycGMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvcnBjL3JwYy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9ydW50aW1lL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3J1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zY2FsZUluZm8vZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc2NhbGVJbmZvL3YwLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3NjYWxlSW5mby92MS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zY2hlZHVsZXIvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc2Vzc2lvbi9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zZXNzaW9uL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc29jaWV0eS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zdGFraW5nL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N0YWtpbmcvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zdGF0ZS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy9zdGF0ZS9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc3RhdGVtZW50L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N0YXRlbWVudC9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N1cHBvcnQvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc3luY3N0YXRlL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N5bmNzdGF0ZS9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc3lzdGVtL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3N5c3RlbS9ycGMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvc3lzdGVtL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvdHJlYXN1cnkvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvdHhwYXltZW50L2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3R4cXVldWUvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvdHhxdWV1ZS9ydW50aW1lLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3VuaXF1ZXMvZGVmaW5pdGlvbnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMvdXRpbGl0eS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy92ZXN0aW5nL2RlZmluaXRpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3hjbS9kZWZpbml0aW9ucy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcy94Y20vdjAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMveGNtL3YxLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9pbnRlcmZhY2VzL3hjbS92Mi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvTWFnaWNOdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL01ldGFkYXRhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9NZXRhZGF0YVZlcnNpb25lZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvUG9ydGFibGVSZWdpc3RyeS9Qb3J0YWJsZVJlZ2lzdHJ5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9kZWNvcmF0ZS9jb25zdGFudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL2Vycm9ycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvZGVjb3JhdGUvZXZlbnRzL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9kZWNvcmF0ZS9leHRyaW5zaWNzL2NyZWF0ZVVuY2hlY2tlZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvZGVjb3JhdGUvZXh0cmluc2ljcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvZGVjb3JhdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3N0b3JhZ2UvY3JlYXRlRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3N0b3JhZ2UvZ2V0SGFzaGVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9kZWNvcmF0ZS9zdG9yYWdlL2dldFN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3N0b3JhZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3N0b3JhZ2Uvc3Vic3RyYXRlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS9kZWNvcmF0ZS9zdG9yYWdlL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL2RlY29yYXRlL3V0aWwuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3V0aWwvZXh0cmFjdFR5cGVzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS91dGlsL2ZsYXR0ZW5VbmlxLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS91dGlsL2dldFNpTmFtZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvdXRpbC9nZXRVbmlxVHlwZXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3V0aWwvdG9DYWxsc09ubHkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3V0aWwvdmFsaWRhdGVUeXBlcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvdjEwL3RvVjExLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS92MTEvdG9WMTIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3YxMi90b1YxMy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvdjEzL3RvVjE0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9tZXRhZGF0YS92MTQvdG9WMTUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3YxNS90b0xhdGVzdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvbWV0YWRhdGEvdjkvdG9WMTAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL21ldGFkYXRhL3ZlcnNpb25zLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC90eXBlcy9wcmltaXRpdmUvRGF0YS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvcHJpbWl0aXZlL1N0b3JhZ2VLZXkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3R5cGVzL3ByaW1pdGl2ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdHlwZXMvdXRpbC9zdG9yYWdlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9hZGRyZXNzL2NoZWNrc3VtLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9hZGRyZXNzL2RlY29kZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vYWRkcmVzcy9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vYWRkcmVzcy9lbmNvZGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2FkZHJlc3MvaXMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2FkZHJlc3Mvc3NoYXNoLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9hZGRyZXNzL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9iYXNlMzIvaGVscGVycy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vYmFzZTU4L2JzNTguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2JsYWtlMi9hc1U4YS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vYm4uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2NyeXB0by5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vZXRoZXJldW0vZW5jb2RlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by9ldGhlcmV1bS9pc0FkZHJlc3MuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2V0aGVyZXVtL2lzQ2hlY2tzdW0uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwtY3J5cHRvL2tlY2Nhay9hc1U4YS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8vc2VjcDI1NmsxL2V4cGFuZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC1jcnlwdG8veHhoYXNoL2FzVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsLWNyeXB0by94eGhhc2gveHhoYXNoNjQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYXJyYXkvY2h1bmsuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYXJyYXkvZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9hc3NlcnQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYmkvY29uc3RzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2JpL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYm4vY29uc3RzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2JuL21pbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9ibi9zcXJ0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2JuL3RvQm4uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYm4vdG9IZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvYm4vdG9VOGEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvY29tcGFjdC9hZGRMZW5ndGguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvY29tcGFjdC9mcm9tVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2NvbXBhY3Qvc3RyaXBMZW5ndGguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvY29tcGFjdC90b1U4YS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9mbG9hdC90b1U4YS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9mb3JtYXQvZm9ybWF0QmFsYW5jZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9mb3JtYXQvZm9ybWF0RGF0ZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9mb3JtYXQvZm9ybWF0RGVjaW1hbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9mb3JtYXQvZm9ybWF0TnVtYmVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2Zvcm1hdC9nZXRTZXBhcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvZm9ybWF0L3NpLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2hhcy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9oZXgvc3RyaXBQcmVmaXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaGV4L3RvQm4uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaGV4L3RvVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2FzY2lpLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2JpZ0ludC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9ibi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9ib29sZWFuLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2J1ZmZlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9jaGlsZENsYXNzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2NsYXNzLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2NvZGVjLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL2NvbXBhY3QuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvaGVscGVycy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9oZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvbnVsbC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvb2JqZWN0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvc3RyaW5nLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL3RvQmlnSW50LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL3RvQm4uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvaXMvdThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2lzL3VuZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9pcy91dGY4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL2xhenkuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvbG9nZ2VyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvbmV4dFRpY2suanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvbm9vcC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9vYmplY3QvY2xlYXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvb2JqZWN0L3Byb3BlcnR5LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL29iamVjdC9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvc3RyaW5nL2NhbWVsQ2FzZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9zdHJpbmcvbG93ZXJGaXJzdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC9zdHJpbmcvdG9IZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvc3RyaW5nL3RvVThhLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC91OGEvY29uY2F0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3U4YS9lcS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC91OGEvdG9Cbi5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC91OGEvdG9GbG9hdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC91OGEvdG9IZXguanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvdThhL3RvTnVtYmVyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC91dGlsL3U4YS90b1N0cmluZy5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QvdXRpbC91OGEvdG9VOGEuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3V0aWwvdThhL3dyYXAuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3dhc20tYnJpZGdlL2JyaWRnZS5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3Qvd2FzbS1icmlkZ2UvaW5pdC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3Qvd2FzbS1icmlkZ2Uvd2JnLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWNyeXB0by1pbml0L3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWNyeXB0by1pbml0L3dhc20uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3dhc20tY3J5cHRvLXdhc20vYnVuZGxlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtL3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLWNyeXB0by9idW5kbGUuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3dhc20tY3J5cHRvL2luaXQuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3dhc20tY3J5cHRvL3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLXV0aWwvYmFzZTY0LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC93YXNtLXV0aWwvZmZsYXRlLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC94LWJpZ2ludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC1iaWdpbnQvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtZ2xvYmFsL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC94LWdsb2JhbC9wYWNrYWdlSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC1yYW5kb212YWx1ZXMvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC1yYW5kb212YWx1ZXMvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtdGV4dGRlY29kZXIvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC10ZXh0ZGVjb2Rlci9mYWxsYmFjay5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC10ZXh0ZGVjb2Rlci9wYWNrYWdlSW5mby5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9AcG9sa2Fkb3QveC10ZXh0ZW5jb2Rlci9icm93c2VyLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC94LXRleHRlbmNvZGVyL2ZhbGxiYWNrLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC94LXRleHRlbmNvZGVyL3BhY2thZ2VJbmZvLmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL0Bwb2xrYWRvdC94LXdzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHBvbGthZG90L3gtd3MvcGFja2FnZUluZm8uanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9ub2RlX21vZHVsZXMvQHNjdXJlL2Jhc2UvbGliL2VzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy8uL25vZGVfbW9kdWxlcy9Ac3Vic3RyYXRlL3NzNTgtcmVnaXN0cnkvZXNtL2luZGV4LmpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdmlydG9uZXR3b3JrL3hjbS1wcm9ncmFtcy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0B2aXJ0b25ldHdvcmsveGNtLXByb2dyYW1zL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vQHZpcnRvbmV0d29yay94Y20tcHJvZ3JhbXMvLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFV0aWxzXG4gIGZ1bmN0aW9uIGFzc2VydCAodmFsLCBtc2cpIHtcbiAgICBpZiAoIXZhbCkgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xuICB9XG5cbiAgLy8gQ291bGQgdXNlIGBpbmhlcml0c2AgbW9kdWxlLCBidXQgZG9uJ3Qgd2FudCB0byBtb3ZlIGZyb20gc2luZ2xlIGZpbGVcbiAgLy8gYXJjaGl0ZWN0dXJlIHlldC5cbiAgZnVuY3Rpb24gaW5oZXJpdHMgKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yO1xuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGU7XG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKTtcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7XG4gIH1cblxuICAvLyBCTlxuXG4gIGZ1bmN0aW9uIEJOIChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmIChCTi5pc0JOKG51bWJlcikpIHtcbiAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuXG4gICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgdGhpcy53b3JkcyA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgLy8gUmVkdWN0aW9uIGNvbnRleHRcbiAgICB0aGlzLnJlZCA9IG51bGw7XG5cbiAgICBpZiAobnVtYmVyICE9PSBudWxsKSB7XG4gICAgICBpZiAoYmFzZSA9PT0gJ2xlJyB8fCBiYXNlID09PSAnYmUnKSB7XG4gICAgICAgIGVuZGlhbiA9IGJhc2U7XG4gICAgICAgIGJhc2UgPSAxMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5pdChudW1iZXIgfHwgMCwgYmFzZSB8fCAxMCwgZW5kaWFuIHx8ICdiZScpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJOO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydHMuQk4gPSBCTjtcbiAgfVxuXG4gIEJOLkJOID0gQk47XG4gIEJOLndvcmRTaXplID0gMjY7XG5cbiAgdmFyIEJ1ZmZlcjtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5CdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBCdWZmZXIgPSB3aW5kb3cuQnVmZmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gIH1cblxuICBCTi5pc0JOID0gZnVuY3Rpb24gaXNCTiAobnVtKSB7XG4gICAgaWYgKG51bSBpbnN0YW5jZW9mIEJOKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtICE9PSBudWxsICYmIHR5cGVvZiBudW0gPT09ICdvYmplY3QnICYmXG4gICAgICBudW0uY29uc3RydWN0b3Iud29yZFNpemUgPT09IEJOLndvcmRTaXplICYmIEFycmF5LmlzQXJyYXkobnVtLndvcmRzKTtcbiAgfTtcblxuICBCTi5tYXggPSBmdW5jdGlvbiBtYXggKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA+IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5taW4gPSBmdW5jdGlvbiBtaW4gKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA8IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0IChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXROdW1iZXIobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXRBcnJheShudW1iZXIsIGJhc2UsIGVuZGlhbik7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBiYXNlID0gMTY7XG4gICAgfVxuICAgIGFzc2VydChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KTtcblxuICAgIG51bWJlciA9IG51bWJlci50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICBzdGFydCsrO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0IDwgbnVtYmVyLmxlbmd0aCkge1xuICAgICAgaWYgKGJhc2UgPT09IDE2KSB7XG4gICAgICAgIHRoaXMuX3BhcnNlSGV4KG51bWJlciwgc3RhcnQsIGVuZGlhbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wYXJzZUJhc2UobnVtYmVyLCBiYXNlLCBzdGFydCk7XG4gICAgICAgIGlmIChlbmRpYW4gPT09ICdsZScpIHtcbiAgICAgICAgICB0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksIGJhc2UsIGVuZGlhbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0TnVtYmVyID0gZnVuY3Rpb24gX2luaXROdW1iZXIgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgbnVtYmVyID0gLW51bWJlcjtcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDB4NDAwMDAwMCkge1xuICAgICAgdGhpcy53b3JkcyA9IFtudW1iZXIgJiAweDNmZmZmZmZdO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgMHgxMDAwMDAwMDAwMDAwMCkge1xuICAgICAgdGhpcy53b3JkcyA9IFtcbiAgICAgICAgbnVtYmVyICYgMHgzZmZmZmZmLFxuICAgICAgICAobnVtYmVyIC8gMHg0MDAwMDAwKSAmIDB4M2ZmZmZmZlxuICAgICAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KG51bWJlciA8IDB4MjAwMDAwMDAwMDAwMDApOyAvLyAyIF4gNTMgKHVuc2FmZSlcbiAgICAgIHRoaXMud29yZHMgPSBbXG4gICAgICAgIG51bWJlciAmIDB4M2ZmZmZmZixcbiAgICAgICAgKG51bWJlciAvIDB4NDAwMDAwMCkgJiAweDNmZmZmZmYsXG4gICAgICAgIDFcbiAgICAgIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDM7XG4gICAgfVxuXG4gICAgaWYgKGVuZGlhbiAhPT0gJ2xlJykgcmV0dXJuO1xuXG4gICAgLy8gUmV2ZXJzZSB0aGUgYnl0ZXNcbiAgICB0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksIGJhc2UsIGVuZGlhbik7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0QXJyYXkgPSBmdW5jdGlvbiBfaW5pdEFycmF5IChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIC8vIFBlcmhhcHMgYSBVaW50OEFycmF5XG4gICAgYXNzZXJ0KHR5cGVvZiBudW1iZXIubGVuZ3RoID09PSAnbnVtYmVyJyk7XG4gICAgaWYgKG51bWJlci5sZW5ndGggPD0gMCkge1xuICAgICAgdGhpcy53b3JkcyA9IFswXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5jZWlsKG51bWJlci5sZW5ndGggLyAzKTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIHZhciBvZmYgPSAwO1xuICAgIGlmIChlbmRpYW4gPT09ICdiZScpIHtcbiAgICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSAxLCBqID0gMDsgaSA+PSAwOyBpIC09IDMpIHtcbiAgICAgICAgdyA9IG51bWJlcltpXSB8IChudW1iZXJbaSAtIDFdIDw8IDgpIHwgKG51bWJlcltpIC0gMl0gPDwgMTYpO1xuICAgICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICAgIHRoaXMud29yZHNbaiArIDFdID0gKHcgPj4+ICgyNiAtIG9mZikpICYgMHgzZmZmZmZmO1xuICAgICAgICBvZmYgKz0gMjQ7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmRpYW4gPT09ICdsZScpIHtcbiAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtYmVyLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgKyAxXSA8PCA4KSB8IChudW1iZXJbaSArIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBmdW5jdGlvbiBwYXJzZUhleDRCaXRzIChzdHJpbmcsIGluZGV4KSB7XG4gICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpbmRleCk7XG4gICAgLy8gJzAnIC0gJzknXG4gICAgaWYgKGMgPj0gNDggJiYgYyA8PSA1Nykge1xuICAgICAgcmV0dXJuIGMgLSA0ODtcbiAgICAvLyAnQScgLSAnRidcbiAgICB9IGVsc2UgaWYgKGMgPj0gNjUgJiYgYyA8PSA3MCkge1xuICAgICAgcmV0dXJuIGMgLSA1NTtcbiAgICAvLyAnYScgLSAnZidcbiAgICB9IGVsc2UgaWYgKGMgPj0gOTcgJiYgYyA8PSAxMDIpIHtcbiAgICAgIHJldHVybiBjIC0gODc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSwgJ0ludmFsaWQgY2hhcmFjdGVyIGluICcgKyBzdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSGV4Qnl0ZSAoc3RyaW5nLCBsb3dlckJvdW5kLCBpbmRleCkge1xuICAgIHZhciByID0gcGFyc2VIZXg0Qml0cyhzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoaW5kZXggLSAxID49IGxvd2VyQm91bmQpIHtcbiAgICAgIHIgfD0gcGFyc2VIZXg0Qml0cyhzdHJpbmcsIGluZGV4IC0gMSkgPDwgNDtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlSGV4ID0gZnVuY3Rpb24gX3BhcnNlSGV4IChudW1iZXIsIHN0YXJ0LCBlbmRpYW4pIHtcbiAgICAvLyBDcmVhdGUgcG9zc2libHkgYmlnZ2VyIGFycmF5IHRvIGVuc3VyZSB0aGF0IGl0IGZpdHMgdGhlIG51bWJlclxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5jZWlsKChudW1iZXIubGVuZ3RoIC0gc3RhcnQpIC8gNik7XG4gICAgdGhpcy53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICB9XG5cbiAgICAvLyAyNC1iaXRzIGNodW5rc1xuICAgIHZhciBvZmYgPSAwO1xuICAgIHZhciBqID0gMDtcblxuICAgIHZhciB3O1xuICAgIGlmIChlbmRpYW4gPT09ICdiZScpIHtcbiAgICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSAxOyBpID49IHN0YXJ0OyBpIC09IDIpIHtcbiAgICAgICAgdyA9IHBhcnNlSGV4Qnl0ZShudW1iZXIsIHN0YXJ0LCBpKSA8PCBvZmY7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gdyAmIDB4M2ZmZmZmZjtcbiAgICAgICAgaWYgKG9mZiA+PSAxOCkge1xuICAgICAgICAgIG9mZiAtPSAxODtcbiAgICAgICAgICBqICs9IDE7XG4gICAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSB3ID4+PiAyNjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmYgKz0gODtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFyc2VMZW5ndGggPSBudW1iZXIubGVuZ3RoIC0gc3RhcnQ7XG4gICAgICBmb3IgKGkgPSBwYXJzZUxlbmd0aCAlIDIgPT09IDAgPyBzdGFydCArIDEgOiBzdGFydDsgaSA8IG51bWJlci5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB3ID0gcGFyc2VIZXhCeXRlKG51bWJlciwgc3RhcnQsIGkpIDw8IG9mZjtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSB3ICYgMHgzZmZmZmZmO1xuICAgICAgICBpZiAob2ZmID49IDE4KSB7XG4gICAgICAgICAgb2ZmIC09IDE4O1xuICAgICAgICAgIGogKz0gMTtcbiAgICAgICAgICB0aGlzLndvcmRzW2pdIHw9IHcgPj4+IDI2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9mZiArPSA4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBmdW5jdGlvbiBwYXJzZUJhc2UgKHN0ciwgc3RhcnQsIGVuZCwgbXVsKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHZhciBiID0gMDtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oc3RyLmxlbmd0aCwgZW5kKTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKSAtIDQ4O1xuXG4gICAgICByICo9IG11bDtcblxuICAgICAgLy8gJ2EnXG4gICAgICBpZiAoYyA+PSA0OSkge1xuICAgICAgICBiID0gYyAtIDQ5ICsgMHhhO1xuXG4gICAgICAvLyAnQSdcbiAgICAgIH0gZWxzZSBpZiAoYyA+PSAxNykge1xuICAgICAgICBiID0gYyAtIDE3ICsgMHhhO1xuXG4gICAgICAvLyAnMCcgLSAnOSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGIgPSBjO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KGMgPj0gMCAmJiBiIDwgbXVsLCAnSW52YWxpZCBjaGFyYWN0ZXInKTtcbiAgICAgIHIgKz0gYjtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlQmFzZSA9IGZ1bmN0aW9uIF9wYXJzZUJhc2UgKG51bWJlciwgYmFzZSwgc3RhcnQpIHtcbiAgICAvLyBJbml0aWFsaXplIGFzIHplcm9cbiAgICB0aGlzLndvcmRzID0gWzBdO1xuICAgIHRoaXMubGVuZ3RoID0gMTtcblxuICAgIC8vIEZpbmQgbGVuZ3RoIG9mIGxpbWIgaW4gYmFzZVxuICAgIGZvciAodmFyIGxpbWJMZW4gPSAwLCBsaW1iUG93ID0gMTsgbGltYlBvdyA8PSAweDNmZmZmZmY7IGxpbWJQb3cgKj0gYmFzZSkge1xuICAgICAgbGltYkxlbisrO1xuICAgIH1cbiAgICBsaW1iTGVuLS07XG4gICAgbGltYlBvdyA9IChsaW1iUG93IC8gYmFzZSkgfCAwO1xuXG4gICAgdmFyIHRvdGFsID0gbnVtYmVyLmxlbmd0aCAtIHN0YXJ0O1xuICAgIHZhciBtb2QgPSB0b3RhbCAlIGxpbWJMZW47XG4gICAgdmFyIGVuZCA9IE1hdGgubWluKHRvdGFsLCB0b3RhbCAtIG1vZCkgKyBzdGFydDtcblxuICAgIHZhciB3b3JkID0gMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gbGltYkxlbikge1xuICAgICAgd29yZCA9IHBhcnNlQmFzZShudW1iZXIsIGksIGkgKyBsaW1iTGVuLCBiYXNlKTtcblxuICAgICAgdGhpcy5pbXVsbihsaW1iUG93KTtcbiAgICAgIGlmICh0aGlzLndvcmRzWzBdICsgd29yZCA8IDB4NDAwMDAwMCkge1xuICAgICAgICB0aGlzLndvcmRzWzBdICs9IHdvcmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pYWRkbih3b3JkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kICE9PSAwKSB7XG4gICAgICB2YXIgcG93ID0gMTtcbiAgICAgIHdvcmQgPSBwYXJzZUJhc2UobnVtYmVyLCBpLCBudW1iZXIubGVuZ3RoLCBiYXNlKTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG1vZDsgaSsrKSB7XG4gICAgICAgIHBvdyAqPSBiYXNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmltdWxuKHBvdyk7XG4gICAgICBpZiAodGhpcy53b3Jkc1swXSArIHdvcmQgPCAweDQwMDAwMDApIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSArPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faWFkZG4od29yZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKGRlc3QpIHtcbiAgICBkZXN0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlc3Qud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgIH1cbiAgICBkZXN0Lmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIGRlc3QubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIGRlc3QucmVkID0gdGhpcy5yZWQ7XG4gIH07XG5cbiAgZnVuY3Rpb24gbW92ZSAoZGVzdCwgc3JjKSB7XG4gICAgZGVzdC53b3JkcyA9IHNyYy53b3JkcztcbiAgICBkZXN0Lmxlbmd0aCA9IHNyYy5sZW5ndGg7XG4gICAgZGVzdC5uZWdhdGl2ZSA9IHNyYy5uZWdhdGl2ZTtcbiAgICBkZXN0LnJlZCA9IHNyYy5yZWQ7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX21vdmUgPSBmdW5jdGlvbiBfbW92ZSAoZGVzdCkge1xuICAgIG1vdmUoZGVzdCwgdGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgIHZhciByID0gbmV3IEJOKG51bGwpO1xuICAgIHRoaXMuY29weShyKTtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2V4cGFuZCA9IGZ1bmN0aW9uIF9leHBhbmQgKHNpemUpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBzaXplKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gUmVtb3ZlIGxlYWRpbmcgYDBgIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5fc3RyaXAgPSBmdW5jdGlvbiBzdHJpcCAoKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoID4gMSAmJiB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgIHRoaXMubGVuZ3RoLS07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fbm9ybVNpZ24gPSBmdW5jdGlvbiBfbm9ybVNpZ24gKCkge1xuICAgIC8vIC0wID0gMFxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gQ2hlY2sgU3ltYm9sLmZvciBiZWNhdXNlIG5vdCBldmVyeXdoZXJlIHdoZXJlIFN5bWJvbCBkZWZpbmVkXG4gIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wjQnJvd3Nlcl9jb21wYXRpYmlsaXR5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBCTi5wcm90b3R5cGVbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0gPSBpbnNwZWN0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEJOLnByb3RvdHlwZS5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgQk4ucHJvdG90eXBlLmluc3BlY3QgPSBpbnNwZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLnJlZCA/ICc8Qk4tUjogJyA6ICc8Qk46ICcpICsgdGhpcy50b1N0cmluZygxNikgKyAnPic7XG4gIH1cblxuICAvKlxuXG4gIHZhciB6ZXJvcyA9IFtdO1xuICB2YXIgZ3JvdXBTaXplcyA9IFtdO1xuICB2YXIgZ3JvdXBCYXNlcyA9IFtdO1xuXG4gIHZhciBzID0gJyc7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBCTi53b3JkU2l6ZSkge1xuICAgIHplcm9zW2ldID0gcztcbiAgICBzICs9ICcwJztcbiAgfVxuICBncm91cFNpemVzWzBdID0gMDtcbiAgZ3JvdXBTaXplc1sxXSA9IDA7XG4gIGdyb3VwQmFzZXNbMF0gPSAwO1xuICBncm91cEJhc2VzWzFdID0gMDtcbiAgdmFyIGJhc2UgPSAyIC0gMTtcbiAgd2hpbGUgKCsrYmFzZSA8IDM2ICsgMSkge1xuICAgIHZhciBncm91cFNpemUgPSAwO1xuICAgIHZhciBncm91cEJhc2UgPSAxO1xuICAgIHdoaWxlIChncm91cEJhc2UgPCAoMSA8PCBCTi53b3JkU2l6ZSkgLyBiYXNlKSB7XG4gICAgICBncm91cEJhc2UgKj0gYmFzZTtcbiAgICAgIGdyb3VwU2l6ZSArPSAxO1xuICAgIH1cbiAgICBncm91cFNpemVzW2Jhc2VdID0gZ3JvdXBTaXplO1xuICAgIGdyb3VwQmFzZXNbYmFzZV0gPSBncm91cEJhc2U7XG4gIH1cblxuICAqL1xuXG4gIHZhciB6ZXJvcyA9IFtcbiAgICAnJyxcbiAgICAnMCcsXG4gICAgJzAwJyxcbiAgICAnMDAwJyxcbiAgICAnMDAwMCcsXG4gICAgJzAwMDAwJyxcbiAgICAnMDAwMDAwJyxcbiAgICAnMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCdcbiAgXTtcblxuICB2YXIgZ3JvdXBTaXplcyA9IFtcbiAgICAwLCAwLFxuICAgIDI1LCAxNiwgMTIsIDExLCAxMCwgOSwgOCxcbiAgICA4LCA3LCA3LCA3LCA3LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDUsIDUsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1XG4gIF07XG5cbiAgdmFyIGdyb3VwQmFzZXMgPSBbXG4gICAgMCwgMCxcbiAgICAzMzU1NDQzMiwgNDMwNDY3MjEsIDE2Nzc3MjE2LCA0ODgyODEyNSwgNjA0NjYxNzYsIDQwMzUzNjA3LCAxNjc3NzIxNixcbiAgICA0MzA0NjcyMSwgMTAwMDAwMDAsIDE5NDg3MTcxLCAzNTgzMTgwOCwgNjI3NDg1MTcsIDc1Mjk1MzYsIDExMzkwNjI1LFxuICAgIDE2Nzc3MjE2LCAyNDEzNzU2OSwgMzQwMTIyMjQsIDQ3MDQ1ODgxLCA2NDAwMDAwMCwgNDA4NDEwMSwgNTE1MzYzMixcbiAgICA2NDM2MzQzLCA3OTYyNjI0LCA5NzY1NjI1LCAxMTg4MTM3NiwgMTQzNDg5MDcsIDE3MjEwMzY4LCAyMDUxMTE0OSxcbiAgICAyNDMwMDAwMCwgMjg2MjkxNTEsIDMzNTU0NDMyLCAzOTEzNTM5MywgNDU0MzU0MjQsIDUyNTIxODc1LCA2MDQ2NjE3NlxuICBdO1xuXG4gIEJOLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChiYXNlLCBwYWRkaW5nKSB7XG4gICAgYmFzZSA9IGJhc2UgfHwgMTA7XG4gICAgcGFkZGluZyA9IHBhZGRpbmcgfCAwIHx8IDE7XG5cbiAgICB2YXIgb3V0O1xuICAgIGlmIChiYXNlID09PSAxNiB8fCBiYXNlID09PSAnaGV4Jykge1xuICAgICAgb3V0ID0gJyc7XG4gICAgICB2YXIgb2ZmID0gMDtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHcgPSB0aGlzLndvcmRzW2ldO1xuICAgICAgICB2YXIgd29yZCA9ICgoKHcgPDwgb2ZmKSB8IGNhcnJ5KSAmIDB4ZmZmZmZmKS50b1N0cmluZygxNik7XG4gICAgICAgIGNhcnJ5ID0gKHcgPj4+ICgyNCAtIG9mZikpICYgMHhmZmZmZmY7XG4gICAgICAgIG9mZiArPSAyO1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FycnkgIT09IDAgfHwgaSAhPT0gdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgb3V0ID0gemVyb3NbNiAtIHdvcmQubGVuZ3RoXSArIHdvcmQgKyBvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ID0gd29yZCArIG91dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICAgIG91dCA9IGNhcnJ5LnRvU3RyaW5nKDE2KSArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KSB7XG4gICAgICAvLyB2YXIgZ3JvdXBTaXplID0gTWF0aC5mbG9vcihCTi53b3JkU2l6ZSAqIE1hdGguTE4yIC8gTWF0aC5sb2coYmFzZSkpO1xuICAgICAgdmFyIGdyb3VwU2l6ZSA9IGdyb3VwU2l6ZXNbYmFzZV07XG4gICAgICAvLyB2YXIgZ3JvdXBCYXNlID0gTWF0aC5wb3coYmFzZSwgZ3JvdXBTaXplKTtcbiAgICAgIHZhciBncm91cEJhc2UgPSBncm91cEJhc2VzW2Jhc2VdO1xuICAgICAgb3V0ID0gJyc7XG4gICAgICB2YXIgYyA9IHRoaXMuY2xvbmUoKTtcbiAgICAgIGMubmVnYXRpdmUgPSAwO1xuICAgICAgd2hpbGUgKCFjLmlzWmVybygpKSB7XG4gICAgICAgIHZhciByID0gYy5tb2Rybihncm91cEJhc2UpLnRvU3RyaW5nKGJhc2UpO1xuICAgICAgICBjID0gYy5pZGl2bihncm91cEJhc2UpO1xuXG4gICAgICAgIGlmICghYy5pc1plcm8oKSkge1xuICAgICAgICAgIG91dCA9IHplcm9zW2dyb3VwU2l6ZSAtIHIubGVuZ3RoXSArIHIgKyBvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ID0gciArIG91dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNaZXJvKCkpIHtcbiAgICAgICAgb3V0ID0gJzAnICsgb3V0O1xuICAgICAgfVxuICAgICAgd2hpbGUgKG91dC5sZW5ndGggJSBwYWRkaW5nICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICctJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGZhbHNlLCAnQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNicpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyICgpIHtcbiAgICB2YXIgcmV0ID0gdGhpcy53b3Jkc1swXTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHJldCArPSB0aGlzLndvcmRzWzFdICogMHg0MDAwMDAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPT09IDMgJiYgdGhpcy53b3Jkc1syXSA9PT0gMHgwMSkge1xuICAgICAgLy8gTk9URTogYXQgdGhpcyBzdGFnZSBpdCBpcyBrbm93biB0aGF0IHRoZSB0b3AgYml0IGlzIHNldFxuICAgICAgcmV0ICs9IDB4MTAwMDAwMDAwMDAwMDAgKyAodGhpcy53b3Jkc1sxXSAqIDB4NDAwMDAwMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxlbmd0aCA+IDIpIHtcbiAgICAgIGFzc2VydChmYWxzZSwgJ051bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cycpO1xuICAgIH1cbiAgICByZXR1cm4gKHRoaXMubmVnYXRpdmUgIT09IDApID8gLXJldCA6IHJldDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgICByZXR1cm4gdGhpcy50b1N0cmluZygxNiwgMik7XG4gIH07XG5cbiAgaWYgKEJ1ZmZlcikge1xuICAgIEJOLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uIHRvQnVmZmVyIChlbmRpYW4sIGxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQnVmZmVyLCBlbmRpYW4sIGxlbmd0aCk7XG4gICAgfTtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIGFsbG9jYXRlIChBcnJheVR5cGUsIHNpemUpIHtcbiAgICBpZiAoQXJyYXlUeXBlLmFsbG9jVW5zYWZlKSB7XG4gICAgICByZXR1cm4gQXJyYXlUeXBlLmFsbG9jVW5zYWZlKHNpemUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEFycmF5VHlwZShzaXplKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9BcnJheUxpa2UgPSBmdW5jdGlvbiB0b0FycmF5TGlrZSAoQXJyYXlUeXBlLCBlbmRpYW4sIGxlbmd0aCkge1xuICAgIHRoaXMuX3N0cmlwKCk7XG5cbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRoaXMuYnl0ZUxlbmd0aCgpO1xuICAgIHZhciByZXFMZW5ndGggPSBsZW5ndGggfHwgTWF0aC5tYXgoMSwgYnl0ZUxlbmd0aCk7XG4gICAgYXNzZXJ0KGJ5dGVMZW5ndGggPD0gcmVxTGVuZ3RoLCAnYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCcpO1xuICAgIGFzc2VydChyZXFMZW5ndGggPiAwLCAnUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwJyk7XG5cbiAgICB2YXIgcmVzID0gYWxsb2NhdGUoQXJyYXlUeXBlLCByZXFMZW5ndGgpO1xuICAgIHZhciBwb3N0Zml4ID0gZW5kaWFuID09PSAnbGUnID8gJ0xFJyA6ICdCRSc7XG4gICAgdGhpc1snX3RvQXJyYXlMaWtlJyArIHBvc3RmaXhdKHJlcywgYnl0ZUxlbmd0aCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEUgPSBmdW5jdGlvbiBfdG9BcnJheUxpa2VMRSAocmVzLCBieXRlTGVuZ3RoKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICB2YXIgY2FycnkgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIHNoaWZ0ID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3b3JkID0gKHRoaXMud29yZHNbaV0gPDwgc2hpZnQpIHwgY2Fycnk7XG5cbiAgICAgIHJlc1twb3NpdGlvbisrXSA9IHdvcmQgJiAweGZmO1xuICAgICAgaWYgKHBvc2l0aW9uIDwgcmVzLmxlbmd0aCkge1xuICAgICAgICByZXNbcG9zaXRpb24rK10gPSAod29yZCA+PiA4KSAmIDB4ZmY7XG4gICAgICB9XG4gICAgICBpZiAocG9zaXRpb24gPCByZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlc1twb3NpdGlvbisrXSA9ICh3b3JkID4+IDE2KSAmIDB4ZmY7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaGlmdCA9PT0gNikge1xuICAgICAgICBpZiAocG9zaXRpb24gPCByZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzW3Bvc2l0aW9uKytdID0gKHdvcmQgPj4gMjQpICYgMHhmZjtcbiAgICAgICAgfVxuICAgICAgICBjYXJyeSA9IDA7XG4gICAgICAgIHNoaWZ0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcnJ5ID0gd29yZCA+Pj4gMjQ7XG4gICAgICAgIHNoaWZ0ICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgcmVzLmxlbmd0aCkge1xuICAgICAgcmVzW3Bvc2l0aW9uKytdID0gY2Fycnk7XG5cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IHJlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzW3Bvc2l0aW9uKytdID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl90b0FycmF5TGlrZUJFID0gZnVuY3Rpb24gX3RvQXJyYXlMaWtlQkUgKHJlcywgYnl0ZUxlbmd0aCkge1xuICAgIHZhciBwb3NpdGlvbiA9IHJlcy5sZW5ndGggLSAxO1xuICAgIHZhciBjYXJyeSA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgc2hpZnQgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHdvcmQgPSAodGhpcy53b3Jkc1tpXSA8PCBzaGlmdCkgfCBjYXJyeTtcblxuICAgICAgcmVzW3Bvc2l0aW9uLS1dID0gd29yZCAmIDB4ZmY7XG4gICAgICBpZiAocG9zaXRpb24gPj0gMCkge1xuICAgICAgICByZXNbcG9zaXRpb24tLV0gPSAod29yZCA+PiA4KSAmIDB4ZmY7XG4gICAgICB9XG4gICAgICBpZiAocG9zaXRpb24gPj0gMCkge1xuICAgICAgICByZXNbcG9zaXRpb24tLV0gPSAod29yZCA+PiAxNikgJiAweGZmO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hpZnQgPT09IDYpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgICAgICByZXNbcG9zaXRpb24tLV0gPSAod29yZCA+PiAyNCkgJiAweGZmO1xuICAgICAgICB9XG4gICAgICAgIGNhcnJ5ID0gMDtcbiAgICAgICAgc2hpZnQgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FycnkgPSB3b3JkID4+PiAyNDtcbiAgICAgICAgc2hpZnQgKz0gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPj0gMCkge1xuICAgICAgcmVzW3Bvc2l0aW9uLS1dID0gY2Fycnk7XG5cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgIHJlc1twb3NpdGlvbi0tXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGlmIChNYXRoLmNsejMyKSB7XG4gICAgQk4ucHJvdG90eXBlLl9jb3VudEJpdHMgPSBmdW5jdGlvbiBfY291bnRCaXRzICh3KSB7XG4gICAgICByZXR1cm4gMzIgLSBNYXRoLmNsejMyKHcpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgQk4ucHJvdG90eXBlLl9jb3VudEJpdHMgPSBmdW5jdGlvbiBfY291bnRCaXRzICh3KSB7XG4gICAgICB2YXIgdCA9IHc7XG4gICAgICB2YXIgciA9IDA7XG4gICAgICBpZiAodCA+PSAweDEwMDApIHtcbiAgICAgICAgciArPSAxMztcbiAgICAgICAgdCA+Pj49IDEzO1xuICAgICAgfVxuICAgICAgaWYgKHQgPj0gMHg0MCkge1xuICAgICAgICByICs9IDc7XG4gICAgICAgIHQgPj4+PSA3O1xuICAgICAgfVxuICAgICAgaWYgKHQgPj0gMHg4KSB7XG4gICAgICAgIHIgKz0gNDtcbiAgICAgICAgdCA+Pj49IDQ7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDAyKSB7XG4gICAgICAgIHIgKz0gMjtcbiAgICAgICAgdCA+Pj49IDI7XG4gICAgICB9XG4gICAgICByZXR1cm4gciArIHQ7XG4gICAgfTtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5femVyb0JpdHMgPSBmdW5jdGlvbiBfemVyb0JpdHMgKHcpIHtcbiAgICAvLyBTaG9ydC1jdXRcbiAgICBpZiAodyA9PT0gMCkgcmV0dXJuIDI2O1xuXG4gICAgdmFyIHQgPSB3O1xuICAgIHZhciByID0gMDtcbiAgICBpZiAoKHQgJiAweDFmZmYpID09PSAwKSB7XG4gICAgICByICs9IDEzO1xuICAgICAgdCA+Pj49IDEzO1xuICAgIH1cbiAgICBpZiAoKHQgJiAweDdmKSA9PT0gMCkge1xuICAgICAgciArPSA3O1xuICAgICAgdCA+Pj49IDc7XG4gICAgfVxuICAgIGlmICgodCAmIDB4ZikgPT09IDApIHtcbiAgICAgIHIgKz0gNDtcbiAgICAgIHQgPj4+PSA0O1xuICAgIH1cbiAgICBpZiAoKHQgJiAweDMpID09PSAwKSB7XG4gICAgICByICs9IDI7XG4gICAgICB0ID4+Pj0gMjtcbiAgICB9XG4gICAgaWYgKCh0ICYgMHgxKSA9PT0gMCkge1xuICAgICAgcisrO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICAvLyBSZXR1cm4gbnVtYmVyIG9mIHVzZWQgYml0cyBpbiBhIEJOXG4gIEJOLnByb3RvdHlwZS5iaXRMZW5ndGggPSBmdW5jdGlvbiBiaXRMZW5ndGggKCkge1xuICAgIHZhciB3ID0gdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBoaSA9IHRoaXMuX2NvdW50Qml0cyh3KTtcbiAgICByZXR1cm4gKHRoaXMubGVuZ3RoIC0gMSkgKiAyNiArIGhpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRvQml0QXJyYXkgKG51bSkge1xuICAgIHZhciB3ID0gbmV3IEFycmF5KG51bS5iaXRMZW5ndGgoKSk7XG5cbiAgICBmb3IgKHZhciBiaXQgPSAwOyBiaXQgPCB3Lmxlbmd0aDsgYml0KyspIHtcbiAgICAgIHZhciBvZmYgPSAoYml0IC8gMjYpIHwgMDtcbiAgICAgIHZhciB3Yml0ID0gYml0ICUgMjY7XG5cbiAgICAgIHdbYml0XSA9IChudW0ud29yZHNbb2ZmXSA+Pj4gd2JpdCkgJiAweDAxO1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLy8gTnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0c1xuICBCTi5wcm90b3R5cGUuemVyb0JpdHMgPSBmdW5jdGlvbiB6ZXJvQml0cyAoKSB7XG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiAwO1xuXG4gICAgdmFyIHIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGIgPSB0aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ldKTtcbiAgICAgIHIgKz0gYjtcbiAgICAgIGlmIChiICE9PSAyNikgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ieXRlTGVuZ3RoID0gZnVuY3Rpb24gYnl0ZUxlbmd0aCAoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpIC8gOCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvVHdvcyA9IGZ1bmN0aW9uIHRvVHdvcyAod2lkdGgpIHtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWJzKCkuaW5vdG4od2lkdGgpLmlhZGRuKDEpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tVHdvcyA9IGZ1bmN0aW9uIGZyb21Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLnRlc3RuKHdpZHRoIC0gMSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdG4od2lkdGgpLmlhZGRuKDEpLmluZWcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiBpc05lZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmUgIT09IDA7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG5lZ2F0aXZlIGNsb25lIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5lZyA9IGZ1bmN0aW9uIGluZWcgKCkge1xuICAgIGlmICghdGhpcy5pc1plcm8oKSkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdW9yID0gZnVuY3Rpb24gaXVvciAobnVtKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgbnVtLmxlbmd0aCkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldIHwgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pb3IgPSBmdW5jdGlvbiBpb3IgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1b3IobnVtKTtcbiAgfTtcblxuICAvLyBPciBgbnVtYCB3aXRoIGB0aGlzYFxuICBCTi5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiBvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pb3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaW9yKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51b3IgPSBmdW5jdGlvbiB1b3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaXVvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdW9yKHRoaXMpO1xuICB9O1xuXG4gIC8vIEFuZCBgbnVtYCB3aXRoIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXVhbmQgPSBmdW5jdGlvbiBpdWFuZCAobnVtKSB7XG4gICAgLy8gYiA9IG1pbi1sZW5ndGgobnVtLCB0aGlzKVxuICAgIHZhciBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV0gJiBudW0ud29yZHNbaV07XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBiLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pYW5kID0gZnVuY3Rpb24gaWFuZCAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVhbmQobnVtKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhbmQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVhbmQgPSBmdW5jdGlvbiB1YW5kIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1YW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1YW5kKHRoaXMpO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXV4b3IgPSBmdW5jdGlvbiBpdXhvciAobnVtKSB7XG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhO1xuICAgIHZhciBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV0gXiBiLndvcmRzW2ldO1xuICAgIH1cblxuICAgIGlmICh0aGlzICE9PSBhKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5peG9yID0gZnVuY3Rpb24gaXhvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXV4b3IobnVtKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5peG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml4b3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnV4b3IgPSBmdW5jdGlvbiB1eG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1eG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1eG9yKHRoaXMpO1xuICB9O1xuXG4gIC8vIE5vdCBgYHRoaXNgYCB3aXRoIGBgd2lkdGhgYCBiaXR3aWR0aFxuICBCTi5wcm90b3R5cGUuaW5vdG4gPSBmdW5jdGlvbiBpbm90biAod2lkdGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyAmJiB3aWR0aCA+PSAwKTtcblxuICAgIHZhciBieXRlc05lZWRlZCA9IE1hdGguY2VpbCh3aWR0aCAvIDI2KSB8IDA7XG4gICAgdmFyIGJpdHNMZWZ0ID0gd2lkdGggJSAyNjtcblxuICAgIC8vIEV4dGVuZCB0aGUgYnVmZmVyIHdpdGggbGVhZGluZyB6ZXJvZXNcbiAgICB0aGlzLl9leHBhbmQoYnl0ZXNOZWVkZWQpO1xuXG4gICAgaWYgKGJpdHNMZWZ0ID4gMCkge1xuICAgICAgYnl0ZXNOZWVkZWQtLTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY29tcGxldGUgd29yZHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHJlc2lkdWVcbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gfnRoaXMud29yZHNbaV0gJiAoMHgzZmZmZmZmID4+ICgyNiAtIGJpdHNMZWZ0KSk7XG4gICAgfVxuXG4gICAgLy8gQW5kIHJlbW92ZSBsZWFkaW5nIHplcm9lc1xuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ub3RuID0gZnVuY3Rpb24gbm90biAod2lkdGgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHdpZHRoKTtcbiAgfTtcblxuICAvLyBTZXQgYGJpdGAgb2YgYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zZXRuID0gZnVuY3Rpb24gc2V0biAoYml0LCB2YWwpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicgJiYgYml0ID49IDApO1xuXG4gICAgdmFyIG9mZiA9IChiaXQgLyAyNikgfCAwO1xuICAgIHZhciB3Yml0ID0gYml0ICUgMjY7XG5cbiAgICB0aGlzLl9leHBhbmQob2ZmICsgMSk7XG5cbiAgICBpZiAodmFsKSB7XG4gICAgICB0aGlzLndvcmRzW29mZl0gPSB0aGlzLndvcmRzW29mZl0gfCAoMSA8PCB3Yml0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53b3Jkc1tvZmZdID0gdGhpcy53b3Jkc1tvZmZdICYgfigxIDw8IHdiaXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChudW0pIHtcbiAgICB2YXIgcjtcblxuICAgIC8vIG5lZ2F0aXZlICsgcG9zaXRpdmVcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgciA9IHRoaXMuaXN1YihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG5cbiAgICAvLyBwb3NpdGl2ZSArIG5lZ2F0aXZlXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBhLmxlbmd0aCA+IGIubGVuZ3RoXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gciA+Pj4gMjY7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGhdID0gY2Fycnk7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIC8vIENvcHkgdGhlIHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgfSBlbHNlIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gQWRkIGBudW1gIHRvIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChudW0pIHtcbiAgICB2YXIgcmVzO1xuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDAgJiYgdGhpcy5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHJlcyA9IHRoaXMuc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIGlmIChudW0ubmVnYXRpdmUgPT09IDAgJiYgdGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSBudW0uc3ViKHRoaXMpO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZChudW0pO1xuXG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhZGQodGhpcyk7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgYG51bWAgZnJvbSBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChudW0pIHtcbiAgICAvLyB0aGlzIC0gKC1udW0pID0gdGhpcyArIG51bVxuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICB2YXIgciA9IHRoaXMuaWFkZChudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiByLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gLXRoaXMgLSBudW0gPSAtKHRoaXMgKyBudW0pXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZChudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmVcbiAgICB2YXIgY21wID0gdGhpcy5jbXAobnVtKTtcblxuICAgIC8vIE9wdGltaXphdGlvbiAtIHplcm9pZnlcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gYSA+IGJcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoY21wID4gMCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApIC0gKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSByID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBjYXJyeSAhPT0gMCAmJiBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IChhLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIENvcHkgcmVzdCBvZiB0aGUgd29yZHNcbiAgICBpZiAoY2FycnkgPT09IDAgJiYgaSA8IGEubGVuZ3RoICYmIGEgIT09IHRoaXMpIHtcbiAgICAgIGZvciAoOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gYS53b3Jkc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpKTtcblxuICAgIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBgbnVtYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBzbWFsbE11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgdmFyIGxlbiA9IChzZWxmLmxlbmd0aCArIG51bS5sZW5ndGgpIHwgMDtcbiAgICBvdXQubGVuZ3RoID0gbGVuO1xuICAgIGxlbiA9IChsZW4gLSAxKSB8IDA7XG5cbiAgICAvLyBQZWVsIG9uZSBpdGVyYXRpb24gKGNvbXBpbGVyIGNhbid0IGRvIGl0LCBiZWNhdXNlIG9mIGNvZGUgY29tcGxleGl0eSlcbiAgICB2YXIgYSA9IHNlbGYud29yZHNbMF0gfCAwO1xuICAgIHZhciBiID0gbnVtLndvcmRzWzBdIHwgMDtcbiAgICB2YXIgciA9IGEgKiBiO1xuXG4gICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICB2YXIgY2FycnkgPSAociAvIDB4NDAwMDAwMCkgfCAwO1xuICAgIG91dC53b3Jkc1swXSA9IGxvO1xuXG4gICAgZm9yICh2YXIgayA9IDE7IGsgPCBsZW47IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBjYXJyeSA+Pj4gMjY7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IChrIC0gaikgfCAwO1xuICAgICAgICBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIGIgPSBudW0ud29yZHNbal0gfCAwO1xuICAgICAgICByID0gYSAqIGIgKyByd29yZDtcbiAgICAgICAgbmNhcnJ5ICs9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkIHwgMDtcbiAgICAgIGNhcnJ5ID0gbmNhcnJ5IHwgMDtcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICBvdXQud29yZHNba10gPSBjYXJyeSB8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0Ll9zdHJpcCgpO1xuICB9XG5cbiAgLy8gVE9ETyhpbmR1dG55KTogaXQgbWF5IGJlIHJlYXNvbmFibGUgdG8gb21pdCBpdCBmb3IgdXNlcnMgd2hvIGRvbid0IG5lZWRcbiAgLy8gdG8gd29yayB3aXRoIDI1Ni1iaXQgbnVtYmVycywgb3RoZXJ3aXNlIGl0IGdpdmVzIDIwJSBpbXByb3ZlbWVudCBmb3IgMjU2LWJpdFxuICAvLyBtdWx0aXBsaWNhdGlvbiAobGlrZSBlbGxpcHRpYyBzZWNwMjU2azEpLlxuICB2YXIgY29tYjEwTXVsVG8gPSBmdW5jdGlvbiBjb21iMTBNdWxUbyAoc2VsZiwgbnVtLCBvdXQpIHtcbiAgICB2YXIgYSA9IHNlbGYud29yZHM7XG4gICAgdmFyIGIgPSBudW0ud29yZHM7XG4gICAgdmFyIG8gPSBvdXQud29yZHM7XG4gICAgdmFyIGMgPSAwO1xuICAgIHZhciBsbztcbiAgICB2YXIgbWlkO1xuICAgIHZhciBoaTtcbiAgICB2YXIgYTAgPSBhWzBdIHwgMDtcbiAgICB2YXIgYWwwID0gYTAgJiAweDFmZmY7XG4gICAgdmFyIGFoMCA9IGEwID4+PiAxMztcbiAgICB2YXIgYTEgPSBhWzFdIHwgMDtcbiAgICB2YXIgYWwxID0gYTEgJiAweDFmZmY7XG4gICAgdmFyIGFoMSA9IGExID4+PiAxMztcbiAgICB2YXIgYTIgPSBhWzJdIHwgMDtcbiAgICB2YXIgYWwyID0gYTIgJiAweDFmZmY7XG4gICAgdmFyIGFoMiA9IGEyID4+PiAxMztcbiAgICB2YXIgYTMgPSBhWzNdIHwgMDtcbiAgICB2YXIgYWwzID0gYTMgJiAweDFmZmY7XG4gICAgdmFyIGFoMyA9IGEzID4+PiAxMztcbiAgICB2YXIgYTQgPSBhWzRdIHwgMDtcbiAgICB2YXIgYWw0ID0gYTQgJiAweDFmZmY7XG4gICAgdmFyIGFoNCA9IGE0ID4+PiAxMztcbiAgICB2YXIgYTUgPSBhWzVdIHwgMDtcbiAgICB2YXIgYWw1ID0gYTUgJiAweDFmZmY7XG4gICAgdmFyIGFoNSA9IGE1ID4+PiAxMztcbiAgICB2YXIgYTYgPSBhWzZdIHwgMDtcbiAgICB2YXIgYWw2ID0gYTYgJiAweDFmZmY7XG4gICAgdmFyIGFoNiA9IGE2ID4+PiAxMztcbiAgICB2YXIgYTcgPSBhWzddIHwgMDtcbiAgICB2YXIgYWw3ID0gYTcgJiAweDFmZmY7XG4gICAgdmFyIGFoNyA9IGE3ID4+PiAxMztcbiAgICB2YXIgYTggPSBhWzhdIHwgMDtcbiAgICB2YXIgYWw4ID0gYTggJiAweDFmZmY7XG4gICAgdmFyIGFoOCA9IGE4ID4+PiAxMztcbiAgICB2YXIgYTkgPSBhWzldIHwgMDtcbiAgICB2YXIgYWw5ID0gYTkgJiAweDFmZmY7XG4gICAgdmFyIGFoOSA9IGE5ID4+PiAxMztcbiAgICB2YXIgYjAgPSBiWzBdIHwgMDtcbiAgICB2YXIgYmwwID0gYjAgJiAweDFmZmY7XG4gICAgdmFyIGJoMCA9IGIwID4+PiAxMztcbiAgICB2YXIgYjEgPSBiWzFdIHwgMDtcbiAgICB2YXIgYmwxID0gYjEgJiAweDFmZmY7XG4gICAgdmFyIGJoMSA9IGIxID4+PiAxMztcbiAgICB2YXIgYjIgPSBiWzJdIHwgMDtcbiAgICB2YXIgYmwyID0gYjIgJiAweDFmZmY7XG4gICAgdmFyIGJoMiA9IGIyID4+PiAxMztcbiAgICB2YXIgYjMgPSBiWzNdIHwgMDtcbiAgICB2YXIgYmwzID0gYjMgJiAweDFmZmY7XG4gICAgdmFyIGJoMyA9IGIzID4+PiAxMztcbiAgICB2YXIgYjQgPSBiWzRdIHwgMDtcbiAgICB2YXIgYmw0ID0gYjQgJiAweDFmZmY7XG4gICAgdmFyIGJoNCA9IGI0ID4+PiAxMztcbiAgICB2YXIgYjUgPSBiWzVdIHwgMDtcbiAgICB2YXIgYmw1ID0gYjUgJiAweDFmZmY7XG4gICAgdmFyIGJoNSA9IGI1ID4+PiAxMztcbiAgICB2YXIgYjYgPSBiWzZdIHwgMDtcbiAgICB2YXIgYmw2ID0gYjYgJiAweDFmZmY7XG4gICAgdmFyIGJoNiA9IGI2ID4+PiAxMztcbiAgICB2YXIgYjcgPSBiWzddIHwgMDtcbiAgICB2YXIgYmw3ID0gYjcgJiAweDFmZmY7XG4gICAgdmFyIGJoNyA9IGI3ID4+PiAxMztcbiAgICB2YXIgYjggPSBiWzhdIHwgMDtcbiAgICB2YXIgYmw4ID0gYjggJiAweDFmZmY7XG4gICAgdmFyIGJoOCA9IGI4ID4+PiAxMztcbiAgICB2YXIgYjkgPSBiWzldIHwgMDtcbiAgICB2YXIgYmw5ID0gYjkgJiAweDFmZmY7XG4gICAgdmFyIGJoOSA9IGI5ID4+PiAxMztcblxuICAgIG91dC5uZWdhdGl2ZSA9IHNlbGYubmVnYXRpdmUgXiBudW0ubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IDE5O1xuICAgIC8qIGsgPSAwICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWwwLCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDAsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDAsIGJoMCk7XG4gICAgdmFyIHcwID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MCA+Pj4gMjYpKSB8IDA7XG4gICAgdzAgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWwxLCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDEsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDEsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgxKSkgfCAwO1xuICAgIHZhciB3MSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzEgPj4+IDI2KSkgfCAwO1xuICAgIHcxICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMiwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwyLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgyLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDIpKSB8IDA7XG4gICAgdmFyIHcyID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MiA+Pj4gMjYpKSB8IDA7XG4gICAgdzIgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAzICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWwzLCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDMsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDMsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDMpKSB8IDA7XG4gICAgdmFyIHczID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MyA+Pj4gMjYpKSB8IDA7XG4gICAgdzMgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA0ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw0LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDQsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDQsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg0KSkgfCAwO1xuICAgIHZhciB3NCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzQgPj4+IDI2KSkgfCAwO1xuICAgIHc0ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw1LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg1LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDUpKSB8IDA7XG4gICAgdmFyIHc1ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NSA+Pj4gMjYpKSB8IDA7XG4gICAgdzUgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA2ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw2LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDYsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDYsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDYpKSB8IDA7XG4gICAgdmFyIHc2ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NiA+Pj4gMjYpKSB8IDA7XG4gICAgdzYgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA3ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw3LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDcsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDcsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg3KSkgfCAwO1xuICAgIHZhciB3NyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzcgPj4+IDI2KSkgfCAwO1xuICAgIHc3ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gOCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw4LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg4LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDgpKSB8IDA7XG4gICAgdmFyIHc4ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3OCA+Pj4gMjYpKSB8IDA7XG4gICAgdzggJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA5ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDkpKSB8IDA7XG4gICAgdmFyIHc5ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3OSA+Pj4gMjYpKSB8IDA7XG4gICAgdzkgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxMCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwxKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDEpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDEpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDEpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxMCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzEwID4+PiAyNikpIHwgMDtcbiAgICB3MTAgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxMSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwyKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDIpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDIpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDIpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzExID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTEgPj4+IDI2KSkgfCAwO1xuICAgIHcxMSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEyICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDMpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMyk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMykpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMyk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxMiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzEyID4+PiAyNikpIHwgMDtcbiAgICB3MTIgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxMyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw0KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDQpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDQpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDQpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxMyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzEzID4+PiAyNikpIHwgMDtcbiAgICB3MTMgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxNCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw1KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDUpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDUpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDUpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE0ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTQgPj4+IDI2KSkgfCAwO1xuICAgIHcxNCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE1ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDYpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNik7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNikpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNik7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE1ID4+PiAyNikpIHwgMDtcbiAgICB3MTUgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxNiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw3KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDcpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDcpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDcpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE2ID4+PiAyNikpIHwgMDtcbiAgICB3MTYgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxNyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw4KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDgpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDgpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDgpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE3ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTcgPj4+IDI2KSkgfCAwO1xuICAgIHcxNyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE4ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDkpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoOSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsOSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoOSk7XG4gICAgdmFyIHcxOCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE4ID4+PiAyNikpIHwgMDtcbiAgICB3MTggJj0gMHgzZmZmZmZmO1xuICAgIG9bMF0gPSB3MDtcbiAgICBvWzFdID0gdzE7XG4gICAgb1syXSA9IHcyO1xuICAgIG9bM10gPSB3MztcbiAgICBvWzRdID0gdzQ7XG4gICAgb1s1XSA9IHc1O1xuICAgIG9bNl0gPSB3NjtcbiAgICBvWzddID0gdzc7XG4gICAgb1s4XSA9IHc4O1xuICAgIG9bOV0gPSB3OTtcbiAgICBvWzEwXSA9IHcxMDtcbiAgICBvWzExXSA9IHcxMTtcbiAgICBvWzEyXSA9IHcxMjtcbiAgICBvWzEzXSA9IHcxMztcbiAgICBvWzE0XSA9IHcxNDtcbiAgICBvWzE1XSA9IHcxNTtcbiAgICBvWzE2XSA9IHcxNjtcbiAgICBvWzE3XSA9IHcxNztcbiAgICBvWzE4XSA9IHcxODtcbiAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgb1sxOV0gPSBjO1xuICAgICAgb3V0Lmxlbmd0aCsrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9O1xuXG4gIC8vIFBvbHlmaWxsIGNvbWJcbiAgaWYgKCFNYXRoLmltdWwpIHtcbiAgICBjb21iMTBNdWxUbyA9IHNtYWxsTXVsVG87XG4gIH1cblxuICBmdW5jdGlvbiBiaWdNdWxUbyAoc2VsZiwgbnVtLCBvdXQpIHtcbiAgICBvdXQubmVnYXRpdmUgPSBudW0ubmVnYXRpdmUgXiBzZWxmLm5lZ2F0aXZlO1xuICAgIG91dC5sZW5ndGggPSBzZWxmLmxlbmd0aCArIG51bS5sZW5ndGg7XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIHZhciBobmNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG91dC5sZW5ndGggLSAxOyBrKyspIHtcbiAgICAgIC8vIFN1bSBhbGwgd29yZHMgd2l0aCB0aGUgc2FtZSBgaSArIGogPSBrYCBhbmQgYWNjdW11bGF0ZSBgbmNhcnJ5YCxcbiAgICAgIC8vIG5vdGUgdGhhdCBuY2FycnkgY291bGQgYmUgPj0gMHgzZmZmZmZmXG4gICAgICB2YXIgbmNhcnJ5ID0gaG5jYXJyeTtcbiAgICAgIGhuY2FycnkgPSAwO1xuICAgICAgdmFyIHJ3b3JkID0gY2FycnkgJiAweDNmZmZmZmY7XG4gICAgICB2YXIgbWF4SiA9IE1hdGgubWluKGssIG51bS5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGogPSBNYXRoLm1heCgwLCBrIC0gc2VsZi5sZW5ndGggKyAxKTsgaiA8PSBtYXhKOyBqKyspIHtcbiAgICAgICAgdmFyIGkgPSBrIC0gajtcbiAgICAgICAgdmFyIGEgPSBzZWxmLndvcmRzW2ldIHwgMDtcbiAgICAgICAgdmFyIGIgPSBudW0ud29yZHNbal0gfCAwO1xuICAgICAgICB2YXIgciA9IGEgKiBiO1xuXG4gICAgICAgIHZhciBsbyA9IHIgJiAweDNmZmZmZmY7XG4gICAgICAgIG5jYXJyeSA9IChuY2FycnkgKyAoKHIgLyAweDQwMDAwMDApIHwgMCkpIHwgMDtcbiAgICAgICAgbG8gPSAobG8gKyByd29yZCkgfCAwO1xuICAgICAgICByd29yZCA9IGxvICYgMHgzZmZmZmZmO1xuICAgICAgICBuY2FycnkgPSAobmNhcnJ5ICsgKGxvID4+PiAyNikpIHwgMDtcblxuICAgICAgICBobmNhcnJ5ICs9IG5jYXJyeSA+Pj4gMjY7XG4gICAgICAgIG5jYXJyeSAmPSAweDNmZmZmZmY7XG4gICAgICB9XG4gICAgICBvdXQud29yZHNba10gPSByd29yZDtcbiAgICAgIGNhcnJ5ID0gbmNhcnJ5O1xuICAgICAgbmNhcnJ5ID0gaG5jYXJyeTtcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICBvdXQud29yZHNba10gPSBjYXJyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0Lmxlbmd0aC0tO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQuX3N0cmlwKCk7XG4gIH1cblxuICBmdW5jdGlvbiBqdW1ib011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIC8vIFRlbXBvcmFyeSBkaXNhYmxlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvYm4uanMvaXNzdWVzLzIxMVxuICAgIC8vIHZhciBmZnRtID0gbmV3IEZGVE0oKTtcbiAgICAvLyByZXR1cm4gZmZ0bS5tdWxwKHNlbGYsIG51bSwgb3V0KTtcbiAgICByZXR1cm4gYmlnTXVsVG8oc2VsZiwgbnVtLCBvdXQpO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLm11bFRvID0gZnVuY3Rpb24gbXVsVG8gKG51bSwgb3V0KSB7XG4gICAgdmFyIHJlcztcbiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGggKyBudW0ubGVuZ3RoO1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMTAgJiYgbnVtLmxlbmd0aCA9PT0gMTApIHtcbiAgICAgIHJlcyA9IGNvbWIxME11bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgICB9IGVsc2UgaWYgKGxlbiA8IDYzKSB7XG4gICAgICByZXMgPSBzbWFsbE11bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgICB9IGVsc2UgaWYgKGxlbiA8IDEwMjQpIHtcbiAgICAgIHJlcyA9IGJpZ011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0ganVtYm9NdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBDb29sZXktVHVrZXkgYWxnb3JpdGhtIGZvciBGRlRcbiAgLy8gc2xpZ2h0bHkgcmV2aXNpdGVkIHRvIHJlbHkgb24gbG9vcGluZyBpbnN0ZWFkIG9mIHJlY3Vyc2lvblxuXG4gIGZ1bmN0aW9uIEZGVE0gKHgsIHkpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gIH1cblxuICBGRlRNLnByb3RvdHlwZS5tYWtlUkJUID0gZnVuY3Rpb24gbWFrZVJCVCAoTikge1xuICAgIHZhciB0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBsID0gQk4ucHJvdG90eXBlLl9jb3VudEJpdHMoTikgLSAxO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICB0W2ldID0gdGhpcy5yZXZCaW4oaSwgbCwgTik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJucyBiaW5hcnktcmV2ZXJzZWQgcmVwcmVzZW50YXRpb24gb2YgYHhgXG4gIEZGVE0ucHJvdG90eXBlLnJldkJpbiA9IGZ1bmN0aW9uIHJldkJpbiAoeCwgbCwgTikge1xuICAgIGlmICh4ID09PSAwIHx8IHggPT09IE4gLSAxKSByZXR1cm4geDtcblxuICAgIHZhciByYiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHJiIHw9ICh4ICYgMSkgPDwgKGwgLSBpIC0gMSk7XG4gICAgICB4ID4+PSAxO1xuICAgIH1cblxuICAgIHJldHVybiByYjtcbiAgfTtcblxuICAvLyBQZXJmb3JtcyBcInR3ZWVkbGluZ1wiIHBoYXNlLCB0aGVyZWZvcmUgJ2VtdWxhdGluZydcbiAgLy8gYmVoYXZpb3VyIG9mIHRoZSByZWN1cnNpdmUgYWxnb3JpdGhtXG4gIEZGVE0ucHJvdG90eXBlLnBlcm11dGUgPSBmdW5jdGlvbiBwZXJtdXRlIChyYnQsIHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHJ0d3NbaV0gPSByd3NbcmJ0W2ldXTtcbiAgICAgIGl0d3NbaV0gPSBpd3NbcmJ0W2ldXTtcbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gdHJhbnNmb3JtIChyd3MsIGl3cywgcnR3cywgaXR3cywgTiwgcmJ0KSB7XG4gICAgdGhpcy5wZXJtdXRlKHJidCwgcndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4pO1xuXG4gICAgZm9yICh2YXIgcyA9IDE7IHMgPCBOOyBzIDw8PSAxKSB7XG4gICAgICB2YXIgbCA9IHMgPDwgMTtcblxuICAgICAgdmFyIHJ0d2RmID0gTWF0aC5jb3MoMiAqIE1hdGguUEkgLyBsKTtcbiAgICAgIHZhciBpdHdkZiA9IE1hdGguc2luKDIgKiBNYXRoLlBJIC8gbCk7XG5cbiAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgTjsgcCArPSBsKSB7XG4gICAgICAgIHZhciBydHdkZl8gPSBydHdkZjtcbiAgICAgICAgdmFyIGl0d2RmXyA9IGl0d2RmO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgczsgaisrKSB7XG4gICAgICAgICAgdmFyIHJlID0gcnR3c1twICsgal07XG4gICAgICAgICAgdmFyIGllID0gaXR3c1twICsgal07XG5cbiAgICAgICAgICB2YXIgcm8gPSBydHdzW3AgKyBqICsgc107XG4gICAgICAgICAgdmFyIGlvID0gaXR3c1twICsgaiArIHNdO1xuXG4gICAgICAgICAgdmFyIHJ4ID0gcnR3ZGZfICogcm8gLSBpdHdkZl8gKiBpbztcblxuICAgICAgICAgIGlvID0gcnR3ZGZfICogaW8gKyBpdHdkZl8gKiBybztcbiAgICAgICAgICBybyA9IHJ4O1xuXG4gICAgICAgICAgcnR3c1twICsgal0gPSByZSArIHJvO1xuICAgICAgICAgIGl0d3NbcCArIGpdID0gaWUgKyBpbztcblxuICAgICAgICAgIHJ0d3NbcCArIGogKyBzXSA9IHJlIC0gcm87XG4gICAgICAgICAgaXR3c1twICsgaiArIHNdID0gaWUgLSBpbztcblxuICAgICAgICAgIC8qIGpzaGludCBtYXhkZXB0aCA6IGZhbHNlICovXG4gICAgICAgICAgaWYgKGogIT09IGwpIHtcbiAgICAgICAgICAgIHJ4ID0gcnR3ZGYgKiBydHdkZl8gLSBpdHdkZiAqIGl0d2RmXztcblxuICAgICAgICAgICAgaXR3ZGZfID0gcnR3ZGYgKiBpdHdkZl8gKyBpdHdkZiAqIHJ0d2RmXztcbiAgICAgICAgICAgIHJ0d2RmXyA9IHJ4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5ndWVzc0xlbjEzYiA9IGZ1bmN0aW9uIGd1ZXNzTGVuMTNiIChuLCBtKSB7XG4gICAgdmFyIE4gPSBNYXRoLm1heChtLCBuKSB8IDE7XG4gICAgdmFyIG9kZCA9IE4gJiAxO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKE4gPSBOIC8gMiB8IDA7IE47IE4gPSBOID4+PiAxKSB7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIDEgPDwgaSArIDEgKyBvZGQ7XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUuY29uanVnYXRlID0gZnVuY3Rpb24gY29uanVnYXRlIChyd3MsIGl3cywgTikge1xuICAgIGlmIChOIDw9IDEpIHJldHVybjtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTiAvIDI7IGkrKykge1xuICAgICAgdmFyIHQgPSByd3NbaV07XG5cbiAgICAgIHJ3c1tpXSA9IHJ3c1tOIC0gaSAtIDFdO1xuICAgICAgcndzW04gLSBpIC0gMV0gPSB0O1xuXG4gICAgICB0ID0gaXdzW2ldO1xuXG4gICAgICBpd3NbaV0gPSAtaXdzW04gLSBpIC0gMV07XG4gICAgICBpd3NbTiAtIGkgLSAxXSA9IC10O1xuICAgIH1cbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5ub3JtYWxpemUxM2IgPSBmdW5jdGlvbiBub3JtYWxpemUxM2IgKHdzLCBOKSB7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE4gLyAyOyBpKyspIHtcbiAgICAgIHZhciB3ID0gTWF0aC5yb3VuZCh3c1syICogaSArIDFdIC8gTikgKiAweDIwMDAgK1xuICAgICAgICBNYXRoLnJvdW5kKHdzWzIgKiBpXSAvIE4pICtcbiAgICAgICAgY2Fycnk7XG5cbiAgICAgIHdzW2ldID0gdyAmIDB4M2ZmZmZmZjtcblxuICAgICAgaWYgKHcgPCAweDQwMDAwMDApIHtcbiAgICAgICAgY2FycnkgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FycnkgPSB3IC8gMHg0MDAwMDAwIHwgMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd3M7XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUuY29udmVydDEzYiA9IGZ1bmN0aW9uIGNvbnZlcnQxM2IgKHdzLCBsZW4sIHJ3cywgTikge1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgY2FycnkgPSBjYXJyeSArICh3c1tpXSB8IDApO1xuXG4gICAgICByd3NbMiAqIGldID0gY2FycnkgJiAweDFmZmY7IGNhcnJ5ID0gY2FycnkgPj4+IDEzO1xuICAgICAgcndzWzIgKiBpICsgMV0gPSBjYXJyeSAmIDB4MWZmZjsgY2FycnkgPSBjYXJyeSA+Pj4gMTM7XG4gICAgfVxuXG4gICAgLy8gUGFkIHdpdGggemVyb2VzXG4gICAgZm9yIChpID0gMiAqIGxlbjsgaSA8IE47ICsraSkge1xuICAgICAgcndzW2ldID0gMDtcbiAgICB9XG5cbiAgICBhc3NlcnQoY2FycnkgPT09IDApO1xuICAgIGFzc2VydCgoY2FycnkgJiB+MHgxZmZmKSA9PT0gMCk7XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUuc3R1YiA9IGZ1bmN0aW9uIHN0dWIgKE4pIHtcbiAgICB2YXIgcGggPSBuZXcgQXJyYXkoTik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHBoW2ldID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGg7XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUubXVscCA9IGZ1bmN0aW9uIG11bHAgKHgsIHksIG91dCkge1xuICAgIHZhciBOID0gMiAqIHRoaXMuZ3Vlc3NMZW4xM2IoeC5sZW5ndGgsIHkubGVuZ3RoKTtcblxuICAgIHZhciByYnQgPSB0aGlzLm1ha2VSQlQoTik7XG5cbiAgICB2YXIgXyA9IHRoaXMuc3R1YihOKTtcblxuICAgIHZhciByd3MgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIHJ3c3QgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIGl3c3QgPSBuZXcgQXJyYXkoTik7XG5cbiAgICB2YXIgbnJ3cyA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbnJ3c3QgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIG5pd3N0ID0gbmV3IEFycmF5KE4pO1xuXG4gICAgdmFyIHJtd3MgPSBvdXQud29yZHM7XG4gICAgcm13cy5sZW5ndGggPSBOO1xuXG4gICAgdGhpcy5jb252ZXJ0MTNiKHgud29yZHMsIHgubGVuZ3RoLCByd3MsIE4pO1xuICAgIHRoaXMuY29udmVydDEzYih5LndvcmRzLCB5Lmxlbmd0aCwgbnJ3cywgTik7XG5cbiAgICB0aGlzLnRyYW5zZm9ybShyd3MsIF8sIHJ3c3QsIGl3c3QsIE4sIHJidCk7XG4gICAgdGhpcy50cmFuc2Zvcm0obnJ3cywgXywgbnJ3c3QsIG5pd3N0LCBOLCByYnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHZhciByeCA9IHJ3c3RbaV0gKiBucndzdFtpXSAtIGl3c3RbaV0gKiBuaXdzdFtpXTtcbiAgICAgIGl3c3RbaV0gPSByd3N0W2ldICogbml3c3RbaV0gKyBpd3N0W2ldICogbnJ3c3RbaV07XG4gICAgICByd3N0W2ldID0gcng7XG4gICAgfVxuXG4gICAgdGhpcy5jb25qdWdhdGUocndzdCwgaXdzdCwgTik7XG4gICAgdGhpcy50cmFuc2Zvcm0ocndzdCwgaXdzdCwgcm13cywgXywgTiwgcmJ0KTtcbiAgICB0aGlzLmNvbmp1Z2F0ZShybXdzLCBfLCBOKTtcbiAgICB0aGlzLm5vcm1hbGl6ZTEzYihybXdzLCBOKTtcblxuICAgIG91dC5uZWdhdGl2ZSA9IHgubmVnYXRpdmUgXiB5Lm5lZ2F0aXZlO1xuICAgIG91dC5sZW5ndGggPSB4Lmxlbmd0aCArIHkubGVuZ3RoO1xuICAgIHJldHVybiBvdXQuX3N0cmlwKCk7XG4gIH07XG5cbiAgLy8gTXVsdGlwbHkgYHRoaXNgIGJ5IGBudW1gXG4gIEJOLnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKG51bSkge1xuICAgIHZhciBvdXQgPSBuZXcgQk4obnVsbCk7XG4gICAgb3V0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRoaXMubXVsVG8obnVtLCBvdXQpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGVtcGxveWluZyBGRlRcbiAgQk4ucHJvdG90eXBlLm11bGYgPSBmdW5jdGlvbiBtdWxmIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBJbi1wbGFjZSBNdWx0aXBsaWNhdGlvblxuICBCTi5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkubXVsVG8obnVtLCB0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW11bG4gPSBmdW5jdGlvbiBpbXVsbiAobnVtKSB7XG4gICAgdmFyIGlzTmVnTnVtID0gbnVtIDwgMDtcbiAgICBpZiAoaXNOZWdOdW0pIG51bSA9IC1udW07XG5cbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuXG4gICAgLy8gQ2FycnlcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHcgPSAodGhpcy53b3Jkc1tpXSB8IDApICogbnVtO1xuICAgICAgdmFyIGxvID0gKHcgJiAweDNmZmZmZmYpICsgKGNhcnJ5ICYgMHgzZmZmZmZmKTtcbiAgICAgIGNhcnJ5ID4+PSAyNjtcbiAgICAgIGNhcnJ5ICs9ICh3IC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgICAvLyBOT1RFOiBsbyBpcyAyN2JpdCBtYXhpbXVtXG4gICAgICBjYXJyeSArPSBsbyA+Pj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2ldID0gbG8gJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gY2Fycnk7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIH1cblxuICAgIHJldHVybiBpc05lZ051bSA/IHRoaXMuaW5lZygpIDogdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubXVsbiA9IGZ1bmN0aW9uIG11bG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW11bG4obnVtKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKHRoaXMpO1xuICB9O1xuXG4gIC8vIGB0aGlzYCAqIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXNxciA9IGZ1bmN0aW9uIGlzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKTtcbiAgfTtcblxuICAvLyBNYXRoLnBvdyhgdGhpc2AsIGBudW1gKVxuICBCTi5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChudW0pIHtcbiAgICB2YXIgdyA9IHRvQml0QXJyYXkobnVtKTtcbiAgICBpZiAody5sZW5ndGggPT09IDApIHJldHVybiBuZXcgQk4oMSk7XG5cbiAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzXG4gICAgdmFyIHJlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3Lmxlbmd0aDsgaSsrLCByZXMgPSByZXMuc3FyKCkpIHtcbiAgICAgIGlmICh3W2ldICE9PSAwKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoKytpIDwgdy5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIHEgPSByZXMuc3FyKCk7IGkgPCB3Lmxlbmd0aDsgaSsrLCBxID0gcS5zcXIoKSkge1xuICAgICAgICBpZiAod1tpXSA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgcmVzID0gcmVzLm11bChxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnQgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1c2hsbiA9IGZ1bmN0aW9uIGl1c2hsbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcbiAgICB2YXIgY2FycnlNYXNrID0gKDB4M2ZmZmZmZiA+Pj4gKDI2IC0gcikpIDw8ICgyNiAtIHIpO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuZXdDYXJyeSA9IHRoaXMud29yZHNbaV0gJiBjYXJyeU1hc2s7XG4gICAgICAgIHZhciBjID0gKCh0aGlzLndvcmRzW2ldIHwgMCkgLSBuZXdDYXJyeSkgPDwgcjtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGMgfCBjYXJyeTtcbiAgICAgICAgY2FycnkgPSBuZXdDYXJyeSA+Pj4gKDI2IC0gcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXJyeSkge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gY2Fycnk7XG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMgIT09IDApIHtcbiAgICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgc10gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxlbmd0aCArPSBzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hsbiA9IGZ1bmN0aW9uIGlzaGxuIChiaXRzKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hsbihiaXRzKTtcbiAgfTtcblxuICAvLyBTaGlmdC1yaWdodCBpbi1wbGFjZVxuICAvLyBOT1RFOiBgaGludGAgaXMgYSBsb3dlc3QgYml0IGJlZm9yZSB0cmFpbGluZyB6ZXJvZXNcbiAgLy8gTk9URTogaWYgYGV4dGVuZGVkYCBpcyBwcmVzZW50IC0gaXQgd2lsbCBiZSBmaWxsZWQgd2l0aCBkZXN0cm95ZWQgYml0c1xuICBCTi5wcm90b3R5cGUuaXVzaHJuID0gZnVuY3Rpb24gaXVzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgaDtcbiAgICBpZiAoaGludCkge1xuICAgICAgaCA9IChoaW50IC0gKGhpbnQgJSAyNikpIC8gMjY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGggPSAwO1xuICAgIH1cblxuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gTWF0aC5taW4oKGJpdHMgLSByKSAvIDI2LCB0aGlzLmxlbmd0aCk7XG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgdmFyIG1hc2tlZFdvcmRzID0gZXh0ZW5kZWQ7XG5cbiAgICBoIC09IHM7XG4gICAgaCA9IE1hdGgubWF4KDAsIGgpO1xuXG4gICAgLy8gRXh0ZW5kZWQgbW9kZSwgY29weSBtYXNrZWQgcGFydFxuICAgIGlmIChtYXNrZWRXb3Jkcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgICAgbWFza2VkV29yZHMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuICAgICAgbWFza2VkV29yZHMubGVuZ3RoID0gcztcbiAgICB9XG5cbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgLy8gTm8tb3AsIHdlIHNob3VsZCBub3QgbW92ZSBhbnl0aGluZyBhdCBhbGxcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID4gcykge1xuICAgICAgdGhpcy5sZW5ndGggLT0gcztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2kgKyBzXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMCAmJiAoY2FycnkgIT09IDAgfHwgaSA+PSBoKTsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IChjYXJyeSA8PCAoMjYgLSByKSkgfCAod29yZCA+Pj4gcik7XG4gICAgICBjYXJyeSA9IHdvcmQgJiBtYXNrO1xuICAgIH1cblxuICAgIC8vIFB1c2ggY2FycmllZCBiaXRzIGFzIGEgbWFza1xuICAgIGlmIChtYXNrZWRXb3JkcyAmJiBjYXJyeSAhPT0gMCkge1xuICAgICAgbWFza2VkV29yZHMud29yZHNbbWFza2VkV29yZHMubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNocm4gPSBmdW5jdGlvbiBpc2hybiAoYml0cywgaGludCwgZXh0ZW5kZWQpIHtcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBpbXBsZW1lbnQgbWVcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVzaHJuKGJpdHMsIGhpbnQsIGV4dGVuZGVkKTtcbiAgfTtcblxuICAvLyBTaGlmdC1sZWZ0XG4gIEJOLnByb3RvdHlwZS5zaGxuID0gZnVuY3Rpb24gc2hsbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYml0cyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVzaGxuID0gZnVuY3Rpb24gdXNobG4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiaXRzKTtcbiAgfTtcblxuICAvLyBTaGlmdC1yaWdodFxuICBCTi5wcm90b3R5cGUuc2hybiA9IGZ1bmN0aW9uIHNocm4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGJpdHMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51c2hybiA9IGZ1bmN0aW9uIHVzaHJuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYml0cyk7XG4gIH07XG5cbiAgLy8gVGVzdCBpZiBuIGJpdCBpcyBzZXRcbiAgQk4ucHJvdG90eXBlLnRlc3RuID0gZnVuY3Rpb24gdGVzdG4gKGJpdCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyAmJiBiaXQgPj0gMCk7XG4gICAgdmFyIHIgPSBiaXQgJSAyNjtcbiAgICB2YXIgcyA9IChiaXQgLSByKSAvIDI2O1xuICAgIHZhciBxID0gMSA8PCByO1xuXG4gICAgLy8gRmFzdCBjYXNlOiBiaXQgaXMgbXVjaCBoaWdoZXIgdGhhbiBhbGwgZXhpc3Rpbmcgd29yZHNcbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgYml0IGFuZCByZXR1cm5cbiAgICB2YXIgdyA9IHRoaXMud29yZHNbc107XG5cbiAgICByZXR1cm4gISEodyAmIHEpO1xuICB9O1xuXG4gIC8vIFJldHVybiBvbmx5IGxvd2VycyBiaXRzIG9mIG51bWJlciAoaW4tcGxhY2UpXG4gIEJOLnByb3RvdHlwZS5pbWFza24gPSBmdW5jdGlvbiBpbWFza24gKGJpdHMpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdHMgPT09ICdudW1iZXInICYmIGJpdHMgPj0gMCk7XG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSAoYml0cyAtIHIpIC8gMjY7XG5cbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCwgJ2ltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycycpO1xuXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICBzKys7XG4gICAgfVxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5taW4ocywgdGhpcy5sZW5ndGgpO1xuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHZhciBtYXNrID0gMHgzZmZmZmZmIF4gKCgweDNmZmZmZmYgPj4+IHIpIDw8IHIpO1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCAtIDFdICY9IG1hc2s7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5tYXNrbiA9IGZ1bmN0aW9uIG1hc2tuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYml0cyk7XG4gIH07XG5cbiAgLy8gQWRkIHBsYWluIG51bWJlciBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlhZGRuID0gZnVuY3Rpb24gaWFkZG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlzdWJuKC1udW0pO1xuXG4gICAgLy8gUG9zc2libGUgc2lnbiBjaGFuZ2VcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmICh0aGlzLndvcmRzWzBdIHwgMCkgPD0gbnVtKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gPSBudW0gLSAodGhpcy53b3Jkc1swXSB8IDApO1xuICAgICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pc3VibihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aG91dCBjaGVja3NcbiAgICByZXR1cm4gdGhpcy5faWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2lhZGRuID0gZnVuY3Rpb24gX2lhZGRuIChudW0pIHtcbiAgICB0aGlzLndvcmRzWzBdICs9IG51bTtcblxuICAgIC8vIENhcnJ5XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAmJiB0aGlzLndvcmRzW2ldID49IDB4NDAwMDAwMDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldIC09IDB4NDAwMDAwMDtcbiAgICAgIGlmIChpID09PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0rKztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSArIDEpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgcGxhaW4gbnVtYmVyIGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pc3VibiA9IGZ1bmN0aW9uIGlzdWJuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pYWRkbigtbnVtKTtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZG4obnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53b3Jkc1swXSAtPSBudW07XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEgJiYgdGhpcy53b3Jkc1swXSA8IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAtdGhpcy53b3Jkc1swXTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYXJyeVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAmJiB0aGlzLndvcmRzW2ldIDwgMDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gKz0gMHg0MDAwMDAwO1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSAtPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5hZGRuID0gZnVuY3Rpb24gYWRkbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5zdWJuID0gZnVuY3Rpb24gc3VibiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pYWJzID0gZnVuY3Rpb24gaWFicyAoKSB7XG4gICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYWJzID0gZnVuY3Rpb24gYWJzICgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2lzaGxuc3VibXVsID0gZnVuY3Rpb24gX2lzaGxuc3VibXVsIChudW0sIG11bCwgc2hpZnQpIHtcbiAgICB2YXIgbGVuID0gbnVtLmxlbmd0aCArIHNoaWZ0O1xuICAgIHZhciBpO1xuXG4gICAgdGhpcy5fZXhwYW5kKGxlbik7XG5cbiAgICB2YXIgdztcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHcgPSAodGhpcy53b3Jkc1tpICsgc2hpZnRdIHwgMCkgKyBjYXJyeTtcbiAgICAgIHZhciByaWdodCA9IChudW0ud29yZHNbaV0gfCAwKSAqIG11bDtcbiAgICAgIHcgLT0gcmlnaHQgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9ICh3ID4+IDI2KSAtICgocmlnaHQgLyAweDQwMDAwMDApIHwgMCk7XG4gICAgICB0aGlzLndvcmRzW2kgKyBzaGlmdF0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICBmb3IgKDsgaSA8IHRoaXMubGVuZ3RoIC0gc2hpZnQ7IGkrKykge1xuICAgICAgdyA9ICh0aGlzLndvcmRzW2kgKyBzaGlmdF0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpICsgc2hpZnRdID0gdyAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICBpZiAoY2FycnkgPT09IDApIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuXG4gICAgLy8gU3VidHJhY3Rpb24gb3ZlcmZsb3dcbiAgICBhc3NlcnQoY2FycnkgPT09IC0xKTtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHcgPSAtKHRoaXMud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl93b3JkRGl2ID0gZnVuY3Rpb24gX3dvcmREaXYgKG51bSwgbW9kZSkge1xuICAgIHZhciBzaGlmdCA9IHRoaXMubGVuZ3RoIC0gbnVtLmxlbmd0aDtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtO1xuXG4gICAgLy8gTm9ybWFsaXplXG4gICAgdmFyIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgdmFyIGJoaUJpdHMgPSB0aGlzLl9jb3VudEJpdHMoYmhpKTtcbiAgICBzaGlmdCA9IDI2IC0gYmhpQml0cztcbiAgICBpZiAoc2hpZnQgIT09IDApIHtcbiAgICAgIGIgPSBiLnVzaGxuKHNoaWZ0KTtcbiAgICAgIGEuaXVzaGxuKHNoaWZ0KTtcbiAgICAgIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBxdW90aWVudFxuICAgIHZhciBtID0gYS5sZW5ndGggLSBiLmxlbmd0aDtcbiAgICB2YXIgcTtcblxuICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgcSA9IG5ldyBCTihudWxsKTtcbiAgICAgIHEubGVuZ3RoID0gbSArIDE7XG4gICAgICBxLndvcmRzID0gbmV3IEFycmF5KHEubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcS5sZW5ndGg7IGkrKykge1xuICAgICAgICBxLndvcmRzW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGlmZiA9IGEuY2xvbmUoKS5faXNobG5zdWJtdWwoYiwgMSwgbSk7XG4gICAgaWYgKGRpZmYubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIGEgPSBkaWZmO1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1ttXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IG0gLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgdmFyIHFqID0gKGEud29yZHNbYi5sZW5ndGggKyBqXSB8IDApICogMHg0MDAwMDAwICtcbiAgICAgICAgKGEud29yZHNbYi5sZW5ndGggKyBqIC0gMV0gfCAwKTtcblxuICAgICAgLy8gTk9URTogKHFqIC8gYmhpKSBpcyAoMHgzZmZmZmZmICogMHg0MDAwMDAwICsgMHgzZmZmZmZmKSAvIDB4MjAwMDAwMCBtYXhcbiAgICAgIC8vICgweDdmZmZmZmYpXG4gICAgICBxaiA9IE1hdGgubWluKChxaiAvIGJoaSkgfCAwLCAweDNmZmZmZmYpO1xuXG4gICAgICBhLl9pc2hsbnN1Ym11bChiLCBxaiwgaik7XG4gICAgICB3aGlsZSAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBxai0tO1xuICAgICAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgYS5faXNobG5zdWJtdWwoYiwgMSwgaik7XG4gICAgICAgIGlmICghYS5pc1plcm8oKSkge1xuICAgICAgICAgIGEubmVnYXRpdmUgXj0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1tqXSA9IHFqO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocSkge1xuICAgICAgcS5fc3RyaXAoKTtcbiAgICB9XG4gICAgYS5fc3RyaXAoKTtcblxuICAgIC8vIERlbm9ybWFsaXplXG4gICAgaWYgKG1vZGUgIT09ICdkaXYnICYmIHNoaWZ0ICE9PSAwKSB7XG4gICAgICBhLml1c2hybihzaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpdjogcSB8fCBudWxsLFxuICAgICAgbW9kOiBhXG4gICAgfTtcbiAgfTtcblxuICAvLyBOT1RFOiAxKSBgbW9kZWAgY2FuIGJlIHNldCB0byBgbW9kYCB0byByZXF1ZXN0IG1vZCBvbmx5LFxuICAvLyAgICAgICB0byBgZGl2YCB0byByZXF1ZXN0IGRpdiBvbmx5LCBvciBiZSBhYnNlbnQgdG9cbiAgLy8gICAgICAgcmVxdWVzdCBib3RoIGRpdiAmIG1vZFxuICAvLyAgICAgICAyKSBgcG9zaXRpdmVgIGlzIHRydWUgaWYgdW5zaWduZWQgbW9kIGlzIHJlcXVlc3RlZFxuICBCTi5wcm90b3R5cGUuZGl2bW9kID0gZnVuY3Rpb24gZGl2bW9kIChudW0sIG1vZGUsIHBvc2l0aXZlKSB7XG4gICAgYXNzZXJ0KCFudW0uaXNaZXJvKCkpO1xuXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogbmV3IEJOKDApLFxuICAgICAgICBtb2Q6IG5ldyBCTigwKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGl2LCBtb2QsIHJlcztcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSAhPT0gJ2RpdicpIHtcbiAgICAgICAgbW9kID0gcmVzLm1vZC5uZWcoKTtcbiAgICAgICAgaWYgKHBvc2l0aXZlICYmIG1vZC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICAgIG1vZC5pYWRkKG51bSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBkaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICAgIGRpdiA9IHJlcy5kaXYubmVnKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IHJlcy5tb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLm5lZ2F0aXZlICYgbnVtLm5lZ2F0aXZlKSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaXN1YihudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogcmVzLmRpdixcbiAgICAgICAgbW9kOiBtb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQm90aCBudW1iZXJzIGFyZSBwb3NpdGl2ZSBhdCB0aGlzIHBvaW50XG5cbiAgICAvLyBTdHJpcCBib3RoIG51bWJlcnMgdG8gYXBwcm94aW1hdGUgc2hpZnQgdmFsdWVcbiAgICBpZiAobnVtLmxlbmd0aCA+IHRoaXMubGVuZ3RoIHx8IHRoaXMuY21wKG51bSkgPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiB0aGlzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZlcnkgc2hvcnQgcmVkdWN0aW9uXG4gICAgaWYgKG51bS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChtb2RlID09PSAnZGl2Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgICAgbW9kOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlID09PSAnbW9kJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogbnVsbCxcbiAgICAgICAgICBtb2Q6IG5ldyBCTih0aGlzLm1vZHJuKG51bS53b3Jkc1swXSkpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgIG1vZDogbmV3IEJOKHRoaXMubW9kcm4obnVtLndvcmRzWzBdKSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3dvcmREaXYobnVtLCBtb2RlKTtcbiAgfTtcblxuICAvLyBGaW5kIGB0aGlzYCAvIGBudW1gXG4gIEJOLnByb3RvdHlwZS5kaXYgPSBmdW5jdGlvbiBkaXYgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdkaXYnLCBmYWxzZSkuZGl2O1xuICB9O1xuXG4gIC8vIEZpbmQgYHRoaXNgICUgYG51bWBcbiAgQk4ucHJvdG90eXBlLm1vZCA9IGZ1bmN0aW9uIG1vZCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ21vZCcsIGZhbHNlKS5tb2Q7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVtb2QgPSBmdW5jdGlvbiB1bW9kIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnbW9kJywgdHJ1ZSkubW9kO1xuICB9O1xuXG4gIC8vIEZpbmQgUm91bmQoYHRoaXNgIC8gYG51bWApXG4gIEJOLnByb3RvdHlwZS5kaXZSb3VuZCA9IGZ1bmN0aW9uIGRpdlJvdW5kIChudW0pIHtcbiAgICB2YXIgZG0gPSB0aGlzLmRpdm1vZChudW0pO1xuXG4gICAgLy8gRmFzdCBjYXNlIC0gZXhhY3QgZGl2aXNpb25cbiAgICBpZiAoZG0ubW9kLmlzWmVybygpKSByZXR1cm4gZG0uZGl2O1xuXG4gICAgdmFyIG1vZCA9IGRtLmRpdi5uZWdhdGl2ZSAhPT0gMCA/IGRtLm1vZC5pc3ViKG51bSkgOiBkbS5tb2Q7XG5cbiAgICB2YXIgaGFsZiA9IG51bS51c2hybigxKTtcbiAgICB2YXIgcjIgPSBudW0uYW5kbG4oMSk7XG4gICAgdmFyIGNtcCA9IG1vZC5jbXAoaGFsZik7XG5cbiAgICAvLyBSb3VuZCBkb3duXG4gICAgaWYgKGNtcCA8IDAgfHwgKHIyID09PSAxICYmIGNtcCA9PT0gMCkpIHJldHVybiBkbS5kaXY7XG5cbiAgICAvLyBSb3VuZCB1cFxuICAgIHJldHVybiBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5kaXYuaXN1Ym4oMSkgOiBkbS5kaXYuaWFkZG4oMSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm1vZHJuID0gZnVuY3Rpb24gbW9kcm4gKG51bSkge1xuICAgIHZhciBpc05lZ051bSA9IG51bSA8IDA7XG4gICAgaWYgKGlzTmVnTnVtKSBudW0gPSAtbnVtO1xuXG4gICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYpO1xuICAgIHZhciBwID0gKDEgPDwgMjYpICUgbnVtO1xuXG4gICAgdmFyIGFjYyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGFjYyA9IChwICogYWNjICsgKHRoaXMud29yZHNbaV0gfCAwKSkgJSBudW07XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzTmVnTnVtID8gLWFjYyA6IGFjYztcbiAgfTtcblxuICAvLyBXQVJOSU5HOiBERVBSRUNBVEVEXG4gIEJOLnByb3RvdHlwZS5tb2RuID0gZnVuY3Rpb24gbW9kbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kcm4obnVtKTtcbiAgfTtcblxuICAvLyBJbi1wbGFjZSBkaXZpc2lvbiBieSBudW1iZXJcbiAgQk4ucHJvdG90eXBlLmlkaXZuID0gZnVuY3Rpb24gaWRpdm4gKG51bSkge1xuICAgIHZhciBpc05lZ051bSA9IG51bSA8IDA7XG4gICAgaWYgKGlzTmVnTnVtKSBudW0gPSAtbnVtO1xuXG4gICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYpO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHcgPSAodGhpcy53b3Jkc1tpXSB8IDApICsgY2FycnkgKiAweDQwMDAwMDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKHcgLyBudW0pIHwgMDtcbiAgICAgIGNhcnJ5ID0gdyAlIG51bTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdHJpcCgpO1xuICAgIHJldHVybiBpc05lZ051bSA/IHRoaXMuaW5lZygpIDogdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZGl2biA9IGZ1bmN0aW9uIGRpdm4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWRpdm4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZWdjZCA9IGZ1bmN0aW9uIGVnY2QgKHApIHtcbiAgICBhc3NlcnQocC5uZWdhdGl2ZSA9PT0gMCk7XG4gICAgYXNzZXJ0KCFwLmlzWmVybygpKTtcblxuICAgIHZhciB4ID0gdGhpcztcbiAgICB2YXIgeSA9IHAuY2xvbmUoKTtcblxuICAgIGlmICh4Lm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB4ID0geC51bW9kKHApO1xuICAgIH0gZWxzZSB7XG4gICAgICB4ID0geC5jbG9uZSgpO1xuICAgIH1cblxuICAgIC8vIEEgKiB4ICsgQiAqIHkgPSB4XG4gICAgdmFyIEEgPSBuZXcgQk4oMSk7XG4gICAgdmFyIEIgPSBuZXcgQk4oMCk7XG5cbiAgICAvLyBDICogeCArIEQgKiB5ID0geVxuICAgIHZhciBDID0gbmV3IEJOKDApO1xuICAgIHZhciBEID0gbmV3IEJOKDEpO1xuXG4gICAgdmFyIGcgPSAwO1xuXG4gICAgd2hpbGUgKHguaXNFdmVuKCkgJiYgeS5pc0V2ZW4oKSkge1xuICAgICAgeC5pdXNocm4oMSk7XG4gICAgICB5Lml1c2hybigxKTtcbiAgICAgICsrZztcbiAgICB9XG5cbiAgICB2YXIgeXAgPSB5LmNsb25lKCk7XG4gICAgdmFyIHhwID0geC5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKCF4LmlzWmVybygpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaW0gPSAxOyAoeC53b3Jkc1swXSAmIGltKSA9PT0gMCAmJiBpIDwgMjY7ICsraSwgaW0gPDw9IDEpO1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIHguaXVzaHJuKGkpO1xuICAgICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICAgIGlmIChBLmlzT2RkKCkgfHwgQi5pc09kZCgpKSB7XG4gICAgICAgICAgICBBLmlhZGQoeXApO1xuICAgICAgICAgICAgQi5pc3ViKHhwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBBLml1c2hybigxKTtcbiAgICAgICAgICBCLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgam0gPSAxOyAoeS53b3Jkc1swXSAmIGptKSA9PT0gMCAmJiBqIDwgMjY7ICsraiwgam0gPDw9IDEpO1xuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIHkuaXVzaHJuKGopO1xuICAgICAgICB3aGlsZSAoai0tID4gMCkge1xuICAgICAgICAgIGlmIChDLmlzT2RkKCkgfHwgRC5pc09kZCgpKSB7XG4gICAgICAgICAgICBDLmlhZGQoeXApO1xuICAgICAgICAgICAgRC5pc3ViKHhwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBDLml1c2hybigxKTtcbiAgICAgICAgICBELml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoeC5jbXAoeSkgPj0gMCkge1xuICAgICAgICB4LmlzdWIoeSk7XG4gICAgICAgIEEuaXN1YihDKTtcbiAgICAgICAgQi5pc3ViKEQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeS5pc3ViKHgpO1xuICAgICAgICBDLmlzdWIoQSk7XG4gICAgICAgIEQuaXN1YihCKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYTogQyxcbiAgICAgIGI6IEQsXG4gICAgICBnY2Q6IHkuaXVzaGxuKGcpXG4gICAgfTtcbiAgfTtcblxuICAvLyBUaGlzIGlzIHJlZHVjZWQgaW5jYXJuYXRpb24gb2YgdGhlIGJpbmFyeSBFRUFcbiAgLy8gYWJvdmUsIGRlc2lnbmF0ZWQgdG8gaW52ZXJ0IG1lbWJlcnMgb2YgdGhlXG4gIC8vIF9wcmltZV8gZmllbGRzIEYocCkgYXQgYSBtYXhpbWFsIHNwZWVkXG4gIEJOLnByb3RvdHlwZS5faW52bXAgPSBmdW5jdGlvbiBfaW52bXAgKHApIHtcbiAgICBhc3NlcnQocC5uZWdhdGl2ZSA9PT0gMCk7XG4gICAgYXNzZXJ0KCFwLmlzWmVybygpKTtcblxuICAgIHZhciBhID0gdGhpcztcbiAgICB2YXIgYiA9IHAuY2xvbmUoKTtcblxuICAgIGlmIChhLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBhID0gYS51bW9kKHApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gYS5jbG9uZSgpO1xuICAgIH1cblxuICAgIHZhciB4MSA9IG5ldyBCTigxKTtcbiAgICB2YXIgeDIgPSBuZXcgQk4oMCk7XG5cbiAgICB2YXIgZGVsdGEgPSBiLmNsb25lKCk7XG5cbiAgICB3aGlsZSAoYS5jbXBuKDEpID4gMCAmJiBiLmNtcG4oMSkgPiAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaW0gPSAxOyAoYS53b3Jkc1swXSAmIGltKSA9PT0gMCAmJiBpIDwgMjY7ICsraSwgaW0gPDw9IDEpO1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIGEuaXVzaHJuKGkpO1xuICAgICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICAgIGlmICh4MS5pc09kZCgpKSB7XG4gICAgICAgICAgICB4MS5pYWRkKGRlbHRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB4MS5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGptID0gMTsgKGIud29yZHNbMF0gJiBqbSkgPT09IDAgJiYgaiA8IDI2OyArK2osIGptIDw8PSAxKTtcbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICBiLml1c2hybihqKTtcbiAgICAgICAgd2hpbGUgKGotLSA+IDApIHtcbiAgICAgICAgICBpZiAoeDIuaXNPZGQoKSkge1xuICAgICAgICAgICAgeDIuaWFkZChkZWx0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeDIuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhLmNtcChiKSA+PSAwKSB7XG4gICAgICAgIGEuaXN1YihiKTtcbiAgICAgICAgeDEuaXN1Yih4Mik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiLmlzdWIoYSk7XG4gICAgICAgIHgyLmlzdWIoeDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXM7XG4gICAgaWYgKGEuY21wbigxKSA9PT0gMCkge1xuICAgICAgcmVzID0geDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHgyO1xuICAgIH1cblxuICAgIGlmIChyZXMuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcy5pYWRkKHApO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmdjZCA9IGZ1bmN0aW9uIGdjZCAobnVtKSB7XG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiBudW0uYWJzKCk7XG4gICAgaWYgKG51bS5pc1plcm8oKSkgcmV0dXJuIHRoaXMuYWJzKCk7XG5cbiAgICB2YXIgYSA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgYiA9IG51bS5jbG9uZSgpO1xuICAgIGEubmVnYXRpdmUgPSAwO1xuICAgIGIubmVnYXRpdmUgPSAwO1xuXG4gICAgLy8gUmVtb3ZlIGNvbW1vbiBmYWN0b3Igb2YgdHdvXG4gICAgZm9yICh2YXIgc2hpZnQgPSAwOyBhLmlzRXZlbigpICYmIGIuaXNFdmVuKCk7IHNoaWZ0KyspIHtcbiAgICAgIGEuaXVzaHJuKDEpO1xuICAgICAgYi5pdXNocm4oMSk7XG4gICAgfVxuXG4gICAgZG8ge1xuICAgICAgd2hpbGUgKGEuaXNFdmVuKCkpIHtcbiAgICAgICAgYS5pdXNocm4oMSk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoYi5pc0V2ZW4oKSkge1xuICAgICAgICBiLml1c2hybigxKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHIgPSBhLmNtcChiKTtcbiAgICAgIGlmIChyIDwgMCkge1xuICAgICAgICAvLyBTd2FwIGBhYCBhbmQgYGJgIHRvIG1ha2UgYGFgIGFsd2F5cyBiaWdnZXIgdGhhbiBgYmBcbiAgICAgICAgdmFyIHQgPSBhO1xuICAgICAgICBhID0gYjtcbiAgICAgICAgYiA9IHQ7XG4gICAgICB9IGVsc2UgaWYgKHIgPT09IDAgfHwgYi5jbXBuKDEpID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBhLmlzdWIoYik7XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICByZXR1cm4gYi5pdXNobG4oc2hpZnQpO1xuICB9O1xuXG4gIC8vIEludmVydCBudW1iZXIgaW4gdGhlIGZpZWxkIEYobnVtKVxuICBCTi5wcm90b3R5cGUuaW52bSA9IGZ1bmN0aW9uIGludm0gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmVnY2QobnVtKS5hLnVtb2QobnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNFdmVuID0gZnVuY3Rpb24gaXNFdmVuICgpIHtcbiAgICByZXR1cm4gKHRoaXMud29yZHNbMF0gJiAxKSA9PT0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNPZGQgPSBmdW5jdGlvbiBpc09kZCAoKSB7XG4gICAgcmV0dXJuICh0aGlzLndvcmRzWzBdICYgMSkgPT09IDE7XG4gIH07XG5cbiAgLy8gQW5kIGZpcnN0IHdvcmQgYW5kIG51bVxuICBCTi5wcm90b3R5cGUuYW5kbG4gPSBmdW5jdGlvbiBhbmRsbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMud29yZHNbMF0gJiBudW07XG4gIH07XG5cbiAgLy8gSW5jcmVtZW50IGF0IHRoZSBiaXQgcG9zaXRpb24gaW4tbGluZVxuICBCTi5wcm90b3R5cGUuYmluY24gPSBmdW5jdGlvbiBiaW5jbiAoYml0KSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInKTtcbiAgICB2YXIgciA9IGJpdCAlIDI2O1xuICAgIHZhciBzID0gKGJpdCAtIHIpIC8gMjY7XG4gICAgdmFyIHEgPSAxIDw8IHI7XG5cbiAgICAvLyBGYXN0IGNhc2U6IGJpdCBpcyBtdWNoIGhpZ2hlciB0aGFuIGFsbCBleGlzdGluZyB3b3Jkc1xuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSB7XG4gICAgICB0aGlzLl9leHBhbmQocyArIDEpO1xuICAgICAgdGhpcy53b3Jkc1tzXSB8PSBxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIGJpdCBhbmQgcHJvcGFnYXRlLCBpZiBuZWVkZWRcbiAgICB2YXIgY2FycnkgPSBxO1xuICAgIGZvciAodmFyIGkgPSBzOyBjYXJyeSAhPT0gMCAmJiBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHcgPSB0aGlzLndvcmRzW2ldIHwgMDtcbiAgICAgIHcgKz0gY2Fycnk7XG4gICAgICBjYXJyeSA9IHcgPj4+IDI2O1xuICAgICAgdyAmPSAweDNmZmZmZmY7XG4gICAgICB0aGlzLndvcmRzW2ldID0gdztcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gY2Fycnk7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gaXNaZXJvICgpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDEgJiYgdGhpcy53b3Jkc1swXSA9PT0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuY21wbiA9IGZ1bmN0aW9uIGNtcG4gKG51bSkge1xuICAgIHZhciBuZWdhdGl2ZSA9IG51bSA8IDA7XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiAhbmVnYXRpdmUpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBuZWdhdGl2ZSkgcmV0dXJuIDE7XG5cbiAgICB0aGlzLl9zdHJpcCgpO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgbnVtID0gLW51bTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYsICdOdW1iZXIgaXMgdG9vIGJpZycpO1xuXG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbMF0gfCAwO1xuICAgICAgcmVzID0gdyA9PT0gbnVtID8gMCA6IHcgPCBudW0gPyAtMSA6IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gLXJlcyB8IDA7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBDb21wYXJlIHR3byBudW1iZXJzIGFuZCByZXR1cm46XG4gIC8vIDEgLSBpZiBgdGhpc2AgPiBgbnVtYFxuICAvLyAwIC0gaWYgYHRoaXNgID09IGBudW1gXG4gIC8vIC0xIC0gaWYgYHRoaXNgIDwgYG51bWBcbiAgQk4ucHJvdG90eXBlLmNtcCA9IGZ1bmN0aW9uIGNtcCAobnVtKSB7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbnVtLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gMTtcblxuICAgIHZhciByZXMgPSB0aGlzLnVjbXAobnVtKTtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gVW5zaWduZWQgY29tcGFyaXNvblxuICBCTi5wcm90b3R5cGUudWNtcCA9IGZ1bmN0aW9uIHVjbXAgKG51bSkge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQgYm90aCBudW1iZXJzIGhhdmUgdGhlIHNhbWUgc2lnblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxlbmd0aCA8IG51bS5sZW5ndGgpIHJldHVybiAtMTtcblxuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgYSA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdmFyIGIgPSBudW0ud29yZHNbaV0gfCAwO1xuXG4gICAgICBpZiAoYSA9PT0gYikgY29udGludWU7XG4gICAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmVzID0gLTE7XG4gICAgICB9IGVsc2UgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJlcyA9IDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RuID0gZnVuY3Rpb24gZ3RuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ID0gZnVuY3Rpb24gZ3QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGVuID0gZnVuY3Rpb24gZ3RlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ZSA9IGZ1bmN0aW9uIGd0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPj0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRuID0gZnVuY3Rpb24gbHRuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdCA9IGZ1bmN0aW9uIGx0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gLTE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZW4gPSBmdW5jdGlvbiBsdGVuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRlID0gZnVuY3Rpb24gbHRlIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA8PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lcW4gPSBmdW5jdGlvbiBlcW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA9PT0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IDA7XG4gIH07XG5cbiAgLy9cbiAgLy8gQSByZWR1Y2UgY29udGV4dCwgY291bGQgYmUgdXNpbmcgbW9udGdvbWVyeSBvciBzb21ldGhpbmcgYmV0dGVyLCBkZXBlbmRpbmdcbiAgLy8gb24gdGhlIGBtYCBpdHNlbGYuXG4gIC8vXG4gIEJOLnJlZCA9IGZ1bmN0aW9uIHJlZCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBSZWQobnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9SZWQgPSBmdW5jdGlvbiB0b1JlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgcmV0dXJuIGN0eC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGN0eCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21SZWQgPSBmdW5jdGlvbiBmcm9tUmVkICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fZm9yY2VSZWQgPSBmdW5jdGlvbiBfZm9yY2VSZWQgKGN0eCkge1xuICAgIHRoaXMucmVkID0gY3R4O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mb3JjZVJlZCA9IGZ1bmN0aW9uIGZvcmNlUmVkIChjdHgpIHtcbiAgICBhc3NlcnQoIXRoaXMucmVkLCAnQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRBZGQgPSBmdW5jdGlvbiByZWRBZGQgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElBZGQgPSBmdW5jdGlvbiByZWRJQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFN1YiA9IGZ1bmN0aW9uIHJlZFN1YiAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSVN1YiA9IGZ1bmN0aW9uIHJlZElTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmlzdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkU2hsID0gZnVuY3Rpb24gcmVkU2hsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNobCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRNdWwgPSBmdW5jdGlvbiByZWRNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5tdWwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSU11bCA9IGZ1bmN0aW9uIHJlZElNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNxciA9IGZ1bmN0aW9uIHJlZFNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXIodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTcXIgPSBmdW5jdGlvbiByZWRJU3FyICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3FyKHRoaXMpO1xuICB9O1xuXG4gIC8vIFNxdWFyZSByb290IG92ZXIgcFxuICBCTi5wcm90b3R5cGUucmVkU3FydCA9IGZ1bmN0aW9uIHJlZFNxcnQgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNxcnQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZEludm0gPSBmdW5jdGlvbiByZWRJbnZtICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbnZtKHRoaXMpO1xuICB9O1xuXG4gIC8vIFJldHVybiBuZWdhdGl2ZSBjbG9uZSBvZiBgdGhpc2AgJSBgcmVkIG1vZHVsb2BcbiAgQk4ucHJvdG90eXBlLnJlZE5lZyA9IGZ1bmN0aW9uIHJlZE5lZyAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5uZWcodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFBvdyA9IGZ1bmN0aW9uIHJlZFBvdyAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkICYmICFudW0ucmVkLCAncmVkUG93KG5vcm1hbE51bSknKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQucG93KHRoaXMsIG51bSk7XG4gIH07XG5cbiAgLy8gUHJpbWUgbnVtYmVycyB3aXRoIGVmZmljaWVudCByZWR1Y3Rpb25cbiAgdmFyIHByaW1lcyA9IHtcbiAgICBrMjU2OiBudWxsLFxuICAgIHAyMjQ6IG51bGwsXG4gICAgcDE5MjogbnVsbCxcbiAgICBwMjU1MTk6IG51bGxcbiAgfTtcblxuICAvLyBQc2V1ZG8tTWVyc2VubmUgcHJpbWVcbiAgZnVuY3Rpb24gTVByaW1lIChuYW1lLCBwKSB7XG4gICAgLy8gUCA9IDIgXiBOIC0gS1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wID0gbmV3IEJOKHAsIDE2KTtcbiAgICB0aGlzLm4gPSB0aGlzLnAuYml0TGVuZ3RoKCk7XG4gICAgdGhpcy5rID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKTtcblxuICAgIHRoaXMudG1wID0gdGhpcy5fdG1wKCk7XG4gIH1cblxuICBNUHJpbWUucHJvdG90eXBlLl90bXAgPSBmdW5jdGlvbiBfdG1wICgpIHtcbiAgICB2YXIgdG1wID0gbmV3IEJOKG51bGwpO1xuICAgIHRtcC53b3JkcyA9IG5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uIC8gMTMpKTtcbiAgICByZXR1cm4gdG1wO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuaXJlZHVjZSA9IGZ1bmN0aW9uIGlyZWR1Y2UgKG51bSkge1xuICAgIC8vIEFzc3VtZXMgdGhhdCBgbnVtYCBpcyBsZXNzIHRoYW4gYFBeMmBcbiAgICAvLyBudW0gPSBISSAqICgyIF4gTiAtIEspICsgSEkgKiBLICsgTE8gPSBISSAqIEsgKyBMTyAobW9kIFApXG4gICAgdmFyIHIgPSBudW07XG4gICAgdmFyIHJsZW47XG5cbiAgICBkbyB7XG4gICAgICB0aGlzLnNwbGl0KHIsIHRoaXMudG1wKTtcbiAgICAgIHIgPSB0aGlzLmltdWxLKHIpO1xuICAgICAgciA9IHIuaWFkZCh0aGlzLnRtcCk7XG4gICAgICBybGVuID0gci5iaXRMZW5ndGgoKTtcbiAgICB9IHdoaWxlIChybGVuID4gdGhpcy5uKTtcblxuICAgIHZhciBjbXAgPSBybGVuIDwgdGhpcy5uID8gLTEgOiByLnVjbXAodGhpcy5wKTtcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICByLndvcmRzWzBdID0gMDtcbiAgICAgIHIubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAgIHIuaXN1Yih0aGlzLnApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoci5zdHJpcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHIgaXMgYSBCTiB2NCBpbnN0YW5jZVxuICAgICAgICByLnN0cmlwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByIGlzIGEgQk4gdjUgaW5zdGFuY2VcbiAgICAgICAgci5fc3RyaXAoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gc3BsaXQgKGlucHV0LCBvdXQpIHtcbiAgICBpbnB1dC5pdXNocm4odGhpcy5uLCAwLCBvdXQpO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuaW11bEsgPSBmdW5jdGlvbiBpbXVsSyAobnVtKSB7XG4gICAgcmV0dXJuIG51bS5pbXVsKHRoaXMuayk7XG4gIH07XG5cbiAgZnVuY3Rpb24gSzI1NiAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ2syNTYnLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmJyk7XG4gIH1cbiAgaW5oZXJpdHMoSzI1NiwgTVByaW1lKTtcblxuICBLMjU2LnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0IChpbnB1dCwgb3V0cHV0KSB7XG4gICAgLy8gMjU2ID0gOSAqIDI2ICsgMjJcbiAgICB2YXIgbWFzayA9IDB4M2ZmZmZmO1xuXG4gICAgdmFyIG91dExlbiA9IE1hdGgubWluKGlucHV0Lmxlbmd0aCwgOSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdXRMZW47IGkrKykge1xuICAgICAgb3V0cHV0LndvcmRzW2ldID0gaW5wdXQud29yZHNbaV07XG4gICAgfVxuICAgIG91dHB1dC5sZW5ndGggPSBvdXRMZW47XG5cbiAgICBpZiAoaW5wdXQubGVuZ3RoIDw9IDkpIHtcbiAgICAgIGlucHV0LndvcmRzWzBdID0gMDtcbiAgICAgIGlucHV0Lmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2hpZnQgYnkgOSBsaW1ic1xuICAgIHZhciBwcmV2ID0gaW5wdXQud29yZHNbOV07XG4gICAgb3V0cHV0LndvcmRzW291dHB1dC5sZW5ndGgrK10gPSBwcmV2ICYgbWFzaztcblxuICAgIGZvciAoaSA9IDEwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuZXh0ID0gaW5wdXQud29yZHNbaV0gfCAwO1xuICAgICAgaW5wdXQud29yZHNbaSAtIDEwXSA9ICgobmV4dCAmIG1hc2spIDw8IDQpIHwgKHByZXYgPj4+IDIyKTtcbiAgICAgIHByZXYgPSBuZXh0O1xuICAgIH1cbiAgICBwcmV2ID4+Pj0gMjI7XG4gICAgaW5wdXQud29yZHNbaSAtIDEwXSA9IHByZXY7XG4gICAgaWYgKHByZXYgPT09IDAgJiYgaW5wdXQubGVuZ3RoID4gMTApIHtcbiAgICAgIGlucHV0Lmxlbmd0aCAtPSAxMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQubGVuZ3RoIC09IDk7XG4gICAgfVxuICB9O1xuXG4gIEsyNTYucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIC8vIEsgPSAweDEwMDAwMDNkMSA9IFsgMHg0MCwgMHgzZDEgXVxuICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoXSA9IDA7XG4gICAgbnVtLndvcmRzW251bS5sZW5ndGggKyAxXSA9IDA7XG4gICAgbnVtLmxlbmd0aCArPSAyO1xuXG4gICAgLy8gYm91bmRlZCBhdDogMHg0MCAqIDB4M2ZmZmZmZiArIDB4M2QwID0gMHgxMDAwMDAzOTBcbiAgICB2YXIgbG8gPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9IG51bS53b3Jkc1tpXSB8IDA7XG4gICAgICBsbyArPSB3ICogMHgzZDE7XG4gICAgICBudW0ud29yZHNbaV0gPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICAgIGxvID0gdyAqIDB4NDAgKyAoKGxvIC8gMHg0MDAwMDAwKSB8IDApO1xuICAgIH1cblxuICAgIC8vIEZhc3QgbGVuZ3RoIHJlZHVjdGlvblxuICAgIGlmIChudW0ud29yZHNbbnVtLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICBudW0ubGVuZ3RoLS07XG4gICAgICBpZiAobnVtLndvcmRzW251bS5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgICBudW0ubGVuZ3RoLS07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW07XG4gIH07XG5cbiAgZnVuY3Rpb24gUDIyNCAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ3AyMjQnLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDIyNCwgTVByaW1lKTtcblxuICBmdW5jdGlvbiBQMTkyICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAncDE5MicsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYnKTtcbiAgfVxuICBpbmhlcml0cyhQMTkyLCBNUHJpbWUpO1xuXG4gIGZ1bmN0aW9uIFAyNTUxOSAoKSB7XG4gICAgLy8gMiBeIDI1NSAtIDE5XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJzI1NTE5JyxcbiAgICAgICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDI1NTE5LCBNUHJpbWUpO1xuXG4gIFAyNTUxOS5wcm90b3R5cGUuaW11bEsgPSBmdW5jdGlvbiBpbXVsSyAobnVtKSB7XG4gICAgLy8gSyA9IDB4MTNcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGkgPSAobnVtLndvcmRzW2ldIHwgMCkgKiAweDEzICsgY2Fycnk7XG4gICAgICB2YXIgbG8gPSBoaSAmIDB4M2ZmZmZmZjtcbiAgICAgIGhpID4+Pj0gMjY7XG5cbiAgICAgIG51bS53b3Jkc1tpXSA9IGxvO1xuICAgICAgY2FycnkgPSBoaTtcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICBudW0ud29yZHNbbnVtLmxlbmd0aCsrXSA9IGNhcnJ5O1xuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9O1xuXG4gIC8vIEV4cG9ydGVkIG1vc3RseSBmb3IgdGVzdGluZyBwdXJwb3NlcywgdXNlIHBsYWluIG5hbWUgaW5zdGVhZFxuICBCTi5fcHJpbWUgPSBmdW5jdGlvbiBwcmltZSAobmFtZSkge1xuICAgIC8vIENhY2hlZCB2ZXJzaW9uIG9mIHByaW1lXG4gICAgaWYgKHByaW1lc1tuYW1lXSkgcmV0dXJuIHByaW1lc1tuYW1lXTtcblxuICAgIHZhciBwcmltZTtcbiAgICBpZiAobmFtZSA9PT0gJ2syNTYnKSB7XG4gICAgICBwcmltZSA9IG5ldyBLMjU2KCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDIyNCcpIHtcbiAgICAgIHByaW1lID0gbmV3IFAyMjQoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMTkyJykge1xuICAgICAgcHJpbWUgPSBuZXcgUDE5MigpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AyNTUxOScpIHtcbiAgICAgIHByaW1lID0gbmV3IFAyNTUxOSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcHJpbWUgJyArIG5hbWUpO1xuICAgIH1cbiAgICBwcmltZXNbbmFtZV0gPSBwcmltZTtcblxuICAgIHJldHVybiBwcmltZTtcbiAgfTtcblxuICAvL1xuICAvLyBCYXNlIHJlZHVjdGlvbiBlbmdpbmVcbiAgLy9cbiAgZnVuY3Rpb24gUmVkIChtKSB7XG4gICAgaWYgKHR5cGVvZiBtID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIHByaW1lID0gQk4uX3ByaW1lKG0pO1xuICAgICAgdGhpcy5tID0gcHJpbWUucDtcbiAgICAgIHRoaXMucHJpbWUgPSBwcmltZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KG0uZ3RuKDEpLCAnbW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxJyk7XG4gICAgICB0aGlzLm0gPSBtO1xuICAgICAgdGhpcy5wcmltZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgUmVkLnByb3RvdHlwZS5fdmVyaWZ5MSA9IGZ1bmN0aW9uIF92ZXJpZnkxIChhKSB7XG4gICAgYXNzZXJ0KGEubmVnYXRpdmUgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIGFzc2VydChhLnJlZCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLl92ZXJpZnkyID0gZnVuY3Rpb24gX3ZlcmlmeTIgKGEsIGIpIHtcbiAgICBhc3NlcnQoKGEubmVnYXRpdmUgfCBiLm5lZ2F0aXZlKSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgYXNzZXJ0KGEucmVkICYmIGEucmVkID09PSBiLnJlZCxcbiAgICAgICdyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbW9kID0gZnVuY3Rpb24gaW1vZCAoYSkge1xuICAgIGlmICh0aGlzLnByaW1lKSByZXR1cm4gdGhpcy5wcmltZS5pcmVkdWNlKGEpLl9mb3JjZVJlZCh0aGlzKTtcblxuICAgIG1vdmUoYSwgYS51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKTtcbiAgICByZXR1cm4gYTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyAoYSkge1xuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYS5jbG9uZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5hZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlhZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLnN1YihiKTtcbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZCh0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlzdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNobCA9IGZ1bmN0aW9uIHNobCAoYSwgbnVtKSB7XG4gICAgdGhpcy5fdmVyaWZ5MShhKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEudXNobG4obnVtKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLmltdWwoYikpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEubXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMuaW11bChhLCBhLmNsb25lKCkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FyID0gZnVuY3Rpb24gc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKGEsIGEpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciBtb2QzID0gdGhpcy5tLmFuZGxuKDMpO1xuICAgIGFzc2VydChtb2QzICUgMiA9PT0gMSk7XG5cbiAgICAvLyBGYXN0IGNhc2VcbiAgICBpZiAobW9kMyA9PT0gMykge1xuICAgICAgdmFyIHBvdyA9IHRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7XG4gICAgICByZXR1cm4gdGhpcy5wb3coYSwgcG93KTtcbiAgICB9XG5cbiAgICAvLyBUb25lbGxpLVNoYW5rcyBhbGdvcml0aG0gKFRvdGFsbHkgdW5vcHRpbWl6ZWQgYW5kIHNsb3cpXG4gICAgLy9cbiAgICAvLyBGaW5kIFEgYW5kIFMsIHRoYXQgUSAqIDIgXiBTID0gKFAgLSAxKVxuICAgIHZhciBxID0gdGhpcy5tLnN1Ym4oMSk7XG4gICAgdmFyIHMgPSAwO1xuICAgIHdoaWxlICghcS5pc1plcm8oKSAmJiBxLmFuZGxuKDEpID09PSAwKSB7XG4gICAgICBzKys7XG4gICAgICBxLml1c2hybigxKTtcbiAgICB9XG4gICAgYXNzZXJ0KCFxLmlzWmVybygpKTtcblxuICAgIHZhciBvbmUgPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgdmFyIG5PbmUgPSBvbmUucmVkTmVnKCk7XG5cbiAgICAvLyBGaW5kIHF1YWRyYXRpYyBub24tcmVzaWR1ZVxuICAgIC8vIE5PVEU6IE1heCBpcyBzdWNoIGJlY2F1c2Ugb2YgZ2VuZXJhbGl6ZWQgUmllbWFubiBoeXBvdGhlc2lzLlxuICAgIHZhciBscG93ID0gdGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpO1xuICAgIHZhciB6ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIHogPSBuZXcgQk4oMiAqIHogKiB6KS50b1JlZCh0aGlzKTtcblxuICAgIHdoaWxlICh0aGlzLnBvdyh6LCBscG93KS5jbXAobk9uZSkgIT09IDApIHtcbiAgICAgIHoucmVkSUFkZChuT25lKTtcbiAgICB9XG5cbiAgICB2YXIgYyA9IHRoaXMucG93KHosIHEpO1xuICAgIHZhciByID0gdGhpcy5wb3coYSwgcS5hZGRuKDEpLml1c2hybigxKSk7XG4gICAgdmFyIHQgPSB0aGlzLnBvdyhhLCBxKTtcbiAgICB2YXIgbSA9IHM7XG4gICAgd2hpbGUgKHQuY21wKG9uZSkgIT09IDApIHtcbiAgICAgIHZhciB0bXAgPSB0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IHRtcC5jbXAob25lKSAhPT0gMDsgaSsrKSB7XG4gICAgICAgIHRtcCA9IHRtcC5yZWRTcXIoKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChpIDwgbSk7XG4gICAgICB2YXIgYiA9IHRoaXMucG93KGMsIG5ldyBCTigxKS5pdXNobG4obSAtIGkgLSAxKSk7XG5cbiAgICAgIHIgPSByLnJlZE11bChiKTtcbiAgICAgIGMgPSBiLnJlZFNxcigpO1xuICAgICAgdCA9IHQucmVkTXVsKGMpO1xuICAgICAgbSA9IGk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIHZhciBpbnYgPSBhLl9pbnZtcCh0aGlzLm0pO1xuICAgIGlmIChpbnYubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGludi5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludikucmVkTmVnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmltb2QoaW52KTtcbiAgICB9XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3cgKGEsIG51bSkge1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgaWYgKG51bS5jbXBuKDEpID09PSAwKSByZXR1cm4gYS5jbG9uZSgpO1xuXG4gICAgdmFyIHdpbmRvd1NpemUgPSA0O1xuICAgIHZhciB3bmQgPSBuZXcgQXJyYXkoMSA8PCB3aW5kb3dTaXplKTtcbiAgICB3bmRbMF0gPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgd25kWzFdID0gYTtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IHduZC5sZW5ndGg7IGkrKykge1xuICAgICAgd25kW2ldID0gdGhpcy5tdWwod25kW2kgLSAxXSwgYSk7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHduZFswXTtcbiAgICB2YXIgY3VycmVudCA9IDA7XG4gICAgdmFyIGN1cnJlbnRMZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IG51bS5iaXRMZW5ndGgoKSAlIDI2O1xuICAgIGlmIChzdGFydCA9PT0gMCkge1xuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBudW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gbnVtLndvcmRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0IC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGJpdCA9ICh3b3JkID4+IGopICYgMTtcbiAgICAgICAgaWYgKHJlcyAhPT0gd25kWzBdKSB7XG4gICAgICAgICAgcmVzID0gdGhpcy5zcXIocmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXQgPT09IDAgJiYgY3VycmVudCA9PT0gMCkge1xuICAgICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudCA8PD0gMTtcbiAgICAgICAgY3VycmVudCB8PSBiaXQ7XG4gICAgICAgIGN1cnJlbnRMZW4rKztcbiAgICAgICAgaWYgKGN1cnJlbnRMZW4gIT09IHdpbmRvd1NpemUgJiYgKGkgIT09IDAgfHwgaiAhPT0gMCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHRoaXMubXVsKHJlcywgd25kW2N1cnJlbnRdKTtcbiAgICAgICAgY3VycmVudExlbiA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSAwO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICB2YXIgciA9IG51bS51bW9kKHRoaXMubSk7XG5cbiAgICByZXR1cm4gciA9PT0gbnVtID8gci5jbG9uZSgpIDogcjtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tID0gZnVuY3Rpb24gY29udmVydEZyb20gKG51bSkge1xuICAgIHZhciByZXMgPSBudW0uY2xvbmUoKTtcbiAgICByZXMucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vXG4gIC8vIE1vbnRnb21lcnkgbWV0aG9kIGVuZ2luZVxuICAvL1xuXG4gIEJOLm1vbnQgPSBmdW5jdGlvbiBtb250IChudW0pIHtcbiAgICByZXR1cm4gbmV3IE1vbnQobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBNb250IChtKSB7XG4gICAgUmVkLmNhbGwodGhpcywgbSk7XG5cbiAgICB0aGlzLnNoaWZ0ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIGlmICh0aGlzLnNoaWZ0ICUgMjYgIT09IDApIHtcbiAgICAgIHRoaXMuc2hpZnQgKz0gMjYgLSAodGhpcy5zaGlmdCAlIDI2KTtcbiAgICB9XG5cbiAgICB0aGlzLnIgPSBuZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpO1xuICAgIHRoaXMucjIgPSB0aGlzLmltb2QodGhpcy5yLnNxcigpKTtcbiAgICB0aGlzLnJpbnYgPSB0aGlzLnIuX2ludm1wKHRoaXMubSk7XG5cbiAgICB0aGlzLm1pbnYgPSB0aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSk7XG4gICAgdGhpcy5taW52ID0gdGhpcy5taW52LnVtb2QodGhpcy5yKTtcbiAgICB0aGlzLm1pbnYgPSB0aGlzLnIuc3ViKHRoaXMubWludik7XG4gIH1cbiAgaW5oZXJpdHMoTW9udCwgUmVkKTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0VG8gPSBmdW5jdGlvbiBjb252ZXJ0VG8gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmltb2QobnVtLnVzaGxuKHRoaXMuc2hpZnQpKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgciA9IHRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO1xuICAgIHIucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHtcbiAgICAgIGEud29yZHNbMF0gPSAwO1xuICAgICAgYS5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBhLmltdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG5cbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMCkuX2ZvcmNlUmVkKHRoaXMpO1xuXG4gICAgdmFyIHQgPSBhLm11bChiKTtcbiAgICB2YXIgYyA9IHQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pO1xuICAgIHZhciB1ID0gdC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KTtcbiAgICB2YXIgcmVzID0gdTtcbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChhKSB7XG4gICAgLy8gKEFSKV4tMSAqIFJeMiA9IChBXi0xICogUl4tMSkgKiBSXjIgPSBBXi0xICogUlxuICAgIHZhciByZXMgPSB0aGlzLmltb2QoYS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO1xuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xufSkodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbW9kdWxlLCB0aGlzKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBwcmVmaXggPSAnfic7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgdG8gY3JlYXRlIGEgc3RvcmFnZSBmb3Igb3VyIGBFRWAgb2JqZWN0cy5cbiAqIEFuIGBFdmVudHNgIGluc3RhbmNlIGlzIGEgcGxhaW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRXZlbnRzKCkge31cblxuLy9cbi8vIFdlIHRyeSB0byBub3QgaW5oZXJpdCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC4gSW4gc29tZSBlbmdpbmVzIGNyZWF0aW5nIGFuXG4vLyBpbnN0YW5jZSBpbiB0aGlzIHdheSBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGBPYmplY3QuY3JlYXRlKG51bGwpYCBkaXJlY3RseS5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBjaGFyYWN0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Rcbi8vIG92ZXJyaWRkZW4gb3IgdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy9cbmlmIChPYmplY3QuY3JlYXRlKSB7XG4gIEV2ZW50cy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vXG4gIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgYF9fcHJvdG9fX2AgcHJvcGVydHkgaXMgc3RpbGwgaW5oZXJpdGVkIGluXG4gIC8vIHNvbWUgb2xkIGJyb3dzZXJzIGxpa2UgQW5kcm9pZCA0LCBpUGhvbmUgNS4xLCBPcGVyYSAxMSBhbmQgU2FmYXJpIDUuXG4gIC8vXG4gIGlmICghbmV3IEV2ZW50cygpLl9fcHJvdG9fXykgcHJlZml4ID0gZmFsc2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29uY2U9ZmFsc2VdIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEVFKGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5vbmNlID0gb25jZSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IGVtaXR0ZXIsIG9uY2UpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0pIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gbGlzdGVuZXIsIGVtaXR0ZXIuX2V2ZW50c0NvdW50Kys7XG4gIGVsc2UgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XS5mbikgZW1pdHRlci5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBbZW1pdHRlci5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXTtcblxuICByZXR1cm4gZW1pdHRlcjtcbn1cblxuLyoqXG4gKiBDbGVhciBldmVudCBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZ0IFRoZSBFdmVudCBuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJFdmVudChlbWl0dGVyLCBldnQpIHtcbiAgaWYgKC0tZW1pdHRlci5fZXZlbnRzQ291bnQgPT09IDApIGVtaXR0ZXIuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgZWxzZSBkZWxldGUgZW1pdHRlci5fZXZlbnRzW2V2dF07XG59XG5cbi8qKlxuICogTWluaW1hbCBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UgdGhhdCBpcyBtb2xkZWQgYWdhaW5zdCB0aGUgTm9kZS5qc1xuICogYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkXG4gKiBsaXN0ZW5lcnMuXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICB2YXIgbmFtZXMgPSBbXVxuICAgICwgZXZlbnRzXG4gICAgLCBuYW1lO1xuXG4gIGlmICh0aGlzLl9ldmVudHNDb3VudCA9PT0gMCkgcmV0dXJuIG5hbWVzO1xuXG4gIGZvciAobmFtZSBpbiAoZXZlbnRzID0gdGhpcy5fZXZlbnRzKSkge1xuICAgIGlmIChoYXMuY2FsbChldmVudHMsIG5hbWUpKSBuYW1lcy5wdXNoKHByZWZpeCA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lKTtcbiAgfVxuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgcmV0dXJuIG5hbWVzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV2ZW50cykpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgaGFuZGxlcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWhhbmRsZXJzKSByZXR1cm4gW107XG4gIGlmIChoYW5kbGVycy5mbikgcmV0dXJuIFtoYW5kbGVycy5mbl07XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBoYW5kbGVyc1tpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIDA7XG4gIGlmIChsaXN0ZW5lcnMuZm4pIHJldHVybiAxO1xuICByZXR1cm4gbGlzdGVuZXJzLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQ2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBjYXNlIDQ6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIsIGEzKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFhcmdzKSBmb3IgKGogPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcbiAgaWYgKCFmbikge1xuICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKFxuICAgICAgbGlzdGVuZXJzLmZuID09PSBmbiAmJlxuICAgICAgKCFvbmNlIHx8IGxpc3RlbmVycy5vbmNlKSAmJlxuICAgICAgKCFjb250ZXh0IHx8IGxpc3RlbmVycy5jb250ZXh0ID09PSBjb250ZXh0KVxuICAgICkge1xuICAgICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZXZlbnRzID0gW10sIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuIHx8XG4gICAgICAgIChvbmNlICYmICFsaXN0ZW5lcnNbaV0ub25jZSkgfHxcbiAgICAgICAgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnRzLnB1c2gobGlzdGVuZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJlc2V0IHRoZSBhcnJheSwgb3IgcmVtb3ZlIGl0IGNvbXBsZXRlbHkgaWYgd2UgaGF2ZSBubyBtb3JlIGxpc3RlbmVycy5cbiAgICAvL1xuICAgIGlmIChldmVudHMubGVuZ3RoKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGV2ZW50cy5sZW5ndGggPT09IDEgPyBldmVudHNbMF0gOiBldmVudHM7XG4gICAgZWxzZSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IFtldmVudF0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQ7XG5cbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRzW2V2dF0pIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gQWxpYXMgbWV0aG9kcyBuYW1lcyBiZWNhdXNlIHBlb3BsZSByb2xsIGxpa2UgdGhhdC5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEFsbG93IGBFdmVudEVtaXR0ZXJgIHRvIGJlIGltcG9ydGVkIGFzIG1vZHVsZSBuYW1lc3BhY2UuXG4vL1xuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsIi8qIVxuICogaGFzaC13YXNtIChodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9oYXNoLXdhc20pXG4gKiAoYykgRGFuaSBCaXJvXG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbmNsYXNzIE11dGV4IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tdXRleCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBsb2NrKCkge1xuICAgICAgICBsZXQgYmVnaW4gPSAoKSA9PiB7IH07XG4gICAgICAgIHRoaXMubXV0ZXggPSB0aGlzLm11dGV4LnRoZW4oKCkgPT4gbmV3IFByb21pc2UoYmVnaW4pKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGJlZ2luID0gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGlzcGF0Y2goZm4pIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHVubG9jayA9IHlpZWxkIHRoaXMubG9jaygpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWllbGQgUHJvbWlzZS5yZXNvbHZlKGZuKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdW5sb2NrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xudmFyIF9hO1xuZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgcmV0dXJuIGdsb2JhbDtcbn1cbmNvbnN0IGdsb2JhbE9iamVjdCA9IGdldEdsb2JhbCgpO1xuY29uc3Qgbm9kZUJ1ZmZlciA9IChfYSA9IGdsb2JhbE9iamVjdC5CdWZmZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGw7XG5jb25zdCB0ZXh0RW5jb2RlciA9IGdsb2JhbE9iamVjdC5UZXh0RW5jb2RlciA/IG5ldyBnbG9iYWxPYmplY3QuVGV4dEVuY29kZXIoKSA6IG51bGw7XG5mdW5jdGlvbiBpbnRBcnJheVRvU3RyaW5nKGFyciwgbGVuKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYXJyLnN1YmFycmF5KDAsIGxlbikpO1xufVxuZnVuY3Rpb24gaGV4Q2hhckNvZGVzVG9JbnQoYSwgYikge1xuICAgIHJldHVybiAoKChhICYgMHhGKSArICgoYSA+PiA2KSB8ICgoYSA+PiAzKSAmIDB4OCkpKSA8PCA0KSB8ICgoYiAmIDB4RikgKyAoKGIgPj4gNikgfCAoKGIgPj4gMykgJiAweDgpKSk7XG59XG5mdW5jdGlvbiB3cml0ZUhleFRvVUludDgoYnVmLCBzdHIpIHtcbiAgICBjb25zdCBzaXplID0gc3RyLmxlbmd0aCA+PiAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaSA8PCAxO1xuICAgICAgICBidWZbaV0gPSBoZXhDaGFyQ29kZXNUb0ludChzdHIuY2hhckNvZGVBdChpbmRleCksIHN0ci5jaGFyQ29kZUF0KGluZGV4ICsgMSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhleFN0cmluZ0VxdWFsc1VJbnQ4KHN0ciwgYnVmKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggIT09IGJ1Zi5sZW5ndGggKiAyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3RySW5kZXggPSBpIDw8IDE7XG4gICAgICAgIGlmIChidWZbaV0gIT09IGhleENoYXJDb2Rlc1RvSW50KHN0ci5jaGFyQ29kZUF0KHN0ckluZGV4KSwgc3RyLmNoYXJDb2RlQXQoc3RySW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmNvbnN0IGFscGhhID0gJ2EnLmNoYXJDb2RlQXQoMCkgLSAxMDtcbmNvbnN0IGRpZ2l0ID0gJzAnLmNoYXJDb2RlQXQoMCk7XG5mdW5jdGlvbiBnZXREaWdlc3RIZXgodG1wQnVmZmVyLCBpbnB1dCwgaGFzaExlbmd0aCkge1xuICAgIGxldCBwID0gMDtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFzaExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBuaWJibGUgPSBpbnB1dFtpXSA+Pj4gNDtcbiAgICAgICAgdG1wQnVmZmVyW3ArK10gPSBuaWJibGUgPiA5ID8gbmliYmxlICsgYWxwaGEgOiBuaWJibGUgKyBkaWdpdDtcbiAgICAgICAgbmliYmxlID0gaW5wdXRbaV0gJiAweEY7XG4gICAgICAgIHRtcEJ1ZmZlcltwKytdID0gbmliYmxlID4gOSA/IG5pYmJsZSArIGFscGhhIDogbmliYmxlICsgZGlnaXQ7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tcGx1c3BsdXMgKi9cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB0bXBCdWZmZXIpO1xufVxuY29uc3QgZ2V0VUludDhCdWZmZXIgPSBub2RlQnVmZmVyICE9PSBudWxsXG4gICAgPyAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBidWYgPSBub2RlQnVmZmVyLmZyb20oZGF0YSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEgdHlwZSEnKTtcbiAgICB9XG4gICAgOiAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dEVuY29kZXIuZW5jb2RlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIHR5cGUhJyk7XG4gICAgfTtcbmNvbnN0IGJhc2U2NENoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuY29uc3QgYmFzZTY0TG9va3VwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgYmFzZTY0Q2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICBiYXNlNjRMb29rdXBbYmFzZTY0Q2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xufVxuZnVuY3Rpb24gZW5jb2RlQmFzZTY0KGRhdGEsIHBhZCA9IHRydWUpIHtcbiAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBleHRyYUJ5dGVzID0gbGVuICUgMztcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGNvbnN0IGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuMjsgaSArPSAzKSB7XG4gICAgICAgIGNvbnN0IHRtcCA9ICgoZGF0YVtpXSA8PCAxNikgJiAweEZGMDAwMClcbiAgICAgICAgICAgICsgKChkYXRhW2kgKyAxXSA8PCA4KSAmIDB4RkYwMClcbiAgICAgICAgICAgICsgKGRhdGFbaSArIDJdICYgMHhGRik7XG4gICAgICAgIGNvbnN0IHRyaXBsZXQgPSBiYXNlNjRDaGFycy5jaGFyQXQoKHRtcCA+PiAxOCkgJiAweDNGKVxuICAgICAgICAgICAgKyBiYXNlNjRDaGFycy5jaGFyQXQoKHRtcCA+PiAxMikgJiAweDNGKVxuICAgICAgICAgICAgKyBiYXNlNjRDaGFycy5jaGFyQXQoKHRtcCA+PiA2KSAmIDB4M0YpXG4gICAgICAgICAgICArIGJhc2U2NENoYXJzLmNoYXJBdCh0bXAgJiAweDNGKTtcbiAgICAgICAgcGFydHMucHVzaCh0cmlwbGV0KTtcbiAgICB9XG4gICAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICAgICAgY29uc3QgdG1wID0gZGF0YVtsZW4gLSAxXTtcbiAgICAgICAgY29uc3QgYSA9IGJhc2U2NENoYXJzLmNoYXJBdCh0bXAgPj4gMik7XG4gICAgICAgIGNvbnN0IGIgPSBiYXNlNjRDaGFycy5jaGFyQXQoKHRtcCA8PCA0KSAmIDB4M0YpO1xuICAgICAgICBwYXJ0cy5wdXNoKGAke2F9JHtifWApO1xuICAgICAgICBpZiAocGFkKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKCc9PScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICAgICAgY29uc3QgdG1wID0gKGRhdGFbbGVuIC0gMl0gPDwgOCkgKyBkYXRhW2xlbiAtIDFdO1xuICAgICAgICBjb25zdCBhID0gYmFzZTY0Q2hhcnMuY2hhckF0KHRtcCA+PiAxMCk7XG4gICAgICAgIGNvbnN0IGIgPSBiYXNlNjRDaGFycy5jaGFyQXQoKHRtcCA+PiA0KSAmIDB4M0YpO1xuICAgICAgICBjb25zdCBjID0gYmFzZTY0Q2hhcnMuY2hhckF0KCh0bXAgPDwgMikgJiAweDNGKTtcbiAgICAgICAgcGFydHMucHVzaChgJHthfSR7Yn0ke2N9YCk7XG4gICAgICAgIGlmIChwYWQpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goJz0nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG59XG5mdW5jdGlvbiBnZXREZWNvZGVCYXNlNjRMZW5ndGgoZGF0YSkge1xuICAgIGxldCBidWZmZXJMZW5ndGggPSBNYXRoLmZsb29yKGRhdGEubGVuZ3RoICogMC43NSk7XG4gICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgaWYgKGRhdGFbbGVuIC0gMV0gPT09ICc9Jykge1xuICAgICAgICBidWZmZXJMZW5ndGggLT0gMTtcbiAgICAgICAgaWYgKGRhdGFbbGVuIC0gMl0gPT09ICc9Jykge1xuICAgICAgICAgICAgYnVmZmVyTGVuZ3RoIC09IDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlckxlbmd0aDtcbn1cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NChkYXRhKSB7XG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gZ2V0RGVjb2RlQmFzZTY0TGVuZ3RoKGRhdGEpO1xuICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyTGVuZ3RoKTtcbiAgICBsZXQgcCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgICAgICBjb25zdCBlbmNvZGVkMSA9IGJhc2U2NExvb2t1cFtkYXRhLmNoYXJDb2RlQXQoaSldO1xuICAgICAgICBjb25zdCBlbmNvZGVkMiA9IGJhc2U2NExvb2t1cFtkYXRhLmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICAgICAgY29uc3QgZW5jb2RlZDMgPSBiYXNlNjRMb29rdXBbZGF0YS5jaGFyQ29kZUF0KGkgKyAyKV07XG4gICAgICAgIGNvbnN0IGVuY29kZWQ0ID0gYmFzZTY0TG9va3VwW2RhdGEuY2hhckNvZGVBdChpICsgMyldO1xuICAgICAgICBieXRlc1twXSA9IChlbmNvZGVkMSA8PCAyKSB8IChlbmNvZGVkMiA+PiA0KTtcbiAgICAgICAgcCArPSAxO1xuICAgICAgICBieXRlc1twXSA9ICgoZW5jb2RlZDIgJiAxNSkgPDwgNCkgfCAoZW5jb2RlZDMgPj4gMik7XG4gICAgICAgIHAgKz0gMTtcbiAgICAgICAgYnl0ZXNbcF0gPSAoKGVuY29kZWQzICYgMykgPDwgNikgfCAoZW5jb2RlZDQgJiA2Myk7XG4gICAgICAgIHAgKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzO1xufVxuXG5jb25zdCBNQVhfSEVBUCA9IDE2ICogMTAyNDtcbmNvbnN0IFdBU01fRlVOQ19IQVNIX0xFTkdUSCA9IDQ7XG5jb25zdCB3YXNtTXV0ZXggPSBuZXcgTXV0ZXgoKTtcbmNvbnN0IHdhc21Nb2R1bGVDYWNoZSA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIFdBU01JbnRlcmZhY2UoYmluYXJ5LCBoYXNoTGVuZ3RoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHdhc21JbnN0YW5jZSA9IG51bGw7XG4gICAgICAgIGxldCBtZW1vcnlWaWV3ID0gbnVsbDtcbiAgICAgICAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlb2YgV2ViQXNzZW1ibHkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYkFzc2VtYmx5IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudCEnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cml0ZU1lbW9yeSA9IChkYXRhLCBvZmZzZXQgPSAwKSA9PiB7XG4gICAgICAgICAgICBtZW1vcnlWaWV3LnNldChkYXRhLCBvZmZzZXQpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXRNZW1vcnkgPSAoKSA9PiBtZW1vcnlWaWV3O1xuICAgICAgICBjb25zdCBnZXRFeHBvcnRzID0gKCkgPT4gd2FzbUluc3RhbmNlLmV4cG9ydHM7XG4gICAgICAgIGNvbnN0IHNldE1lbW9yeVNpemUgPSAodG90YWxTaXplKSA9PiB7XG4gICAgICAgICAgICB3YXNtSW5zdGFuY2UuZXhwb3J0cy5IYXNoX1NldE1lbW9yeVNpemUodG90YWxTaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5T2Zmc2V0ID0gd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9HZXRCdWZmZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IG1lbW9yeUJ1ZmZlciA9IHdhc21JbnN0YW5jZS5leHBvcnRzLm1lbW9yeS5idWZmZXI7XG4gICAgICAgICAgICBtZW1vcnlWaWV3ID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5QnVmZmVyLCBhcnJheU9mZnNldCwgdG90YWxTaXplKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ2V0U3RhdGVTaXplID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyh3YXNtSW5zdGFuY2UuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlU2l6ZSA9IHZpZXcuZ2V0VWludDMyKHdhc21JbnN0YW5jZS5leHBvcnRzLlNUQVRFX1NJWkUsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlU2l6ZTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbG9hZFdBU01Qcm9taXNlID0gd2FzbU11dGV4LmRpc3BhdGNoKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghd2FzbU1vZHVsZUNhY2hlLmhhcyhiaW5hcnkubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc20gPSBkZWNvZGVCYXNlNjQoYmluYXJ5LmRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBXZWJBc3NlbWJseS5jb21waWxlKGFzbSk7XG4gICAgICAgICAgICAgICAgd2FzbU1vZHVsZUNhY2hlLnNldChiaW5hcnkubmFtZSwgcHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB5aWVsZCB3YXNtTW9kdWxlQ2FjaGUuZ2V0KGJpbmFyeS5uYW1lKTtcbiAgICAgICAgICAgIHdhc21JbnN0YW5jZSA9IHlpZWxkIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZHVsZSwge1xuICAgICAgICAgICAgLy8gZW52OiB7XG4gICAgICAgICAgICAvLyAgIGVtc2NyaXB0ZW5fbWVtY3B5X2JpZzogKGRlc3QsIHNyYywgbnVtKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgY29uc3QgbWVtb3J5QnVmZmVyID0gd2FzbUluc3RhbmNlLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcjtcbiAgICAgICAgICAgIC8vICAgICBjb25zdCBtZW1WaWV3ID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5QnVmZmVyLCAwKTtcbiAgICAgICAgICAgIC8vICAgICBtZW1WaWV3LnNldChtZW1WaWV3LnN1YmFycmF5KHNyYywgc3JjICsgbnVtKSwgZGVzdCk7XG4gICAgICAgICAgICAvLyAgIH0sXG4gICAgICAgICAgICAvLyAgIHByaW50X21lbW9yeTogKG9mZnNldCwgbGVuKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgY29uc3QgbWVtb3J5QnVmZmVyID0gd2FzbUluc3RhbmNlLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcjtcbiAgICAgICAgICAgIC8vICAgICBjb25zdCBtZW1WaWV3ID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5QnVmZmVyLCAwKTtcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZygncHJpbnRfaW50MzInLCBtZW1WaWV3LnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKSk7XG4gICAgICAgICAgICAvLyAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB3YXNtSW5zdGFuY2UuZXhwb3J0cy5fc3RhcnQoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBzZXR1cEludGVyZmFjZSA9ICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghd2FzbUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgbG9hZFdBU01Qcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXJyYXlPZmZzZXQgPSB3YXNtSW5zdGFuY2UuZXhwb3J0cy5IYXNoX0dldEJ1ZmZlcigpO1xuICAgICAgICAgICAgY29uc3QgbWVtb3J5QnVmZmVyID0gd2FzbUluc3RhbmNlLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcjtcbiAgICAgICAgICAgIG1lbW9yeVZpZXcgPSBuZXcgVWludDhBcnJheShtZW1vcnlCdWZmZXIsIGFycmF5T2Zmc2V0LCBNQVhfSEVBUCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpbml0ID0gKGJpdHMgPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICB3YXNtSW5zdGFuY2UuZXhwb3J0cy5IYXNoX0luaXQoYml0cyk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHVwZGF0ZVVJbnQ4QXJyYXkgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWQgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWQgPCBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gZGF0YS5zdWJhcnJheShyZWFkLCByZWFkICsgTUFYX0hFQVApO1xuICAgICAgICAgICAgICAgIHJlYWQgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgICAgIG1lbW9yeVZpZXcuc2V0KGNodW5rKTtcbiAgICAgICAgICAgICAgICB3YXNtSW5zdGFuY2UuZXhwb3J0cy5IYXNoX1VwZGF0ZShjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGUgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndXBkYXRlKCkgY2FsbGVkIGJlZm9yZSBpbml0KCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFVpbnQ4QnVmZmVyID0gZ2V0VUludDhCdWZmZXIoZGF0YSk7XG4gICAgICAgICAgICB1cGRhdGVVSW50OEFycmF5KFVpbnQ4QnVmZmVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGlnZXN0Q2hhcnMgPSBuZXcgVWludDhBcnJheShoYXNoTGVuZ3RoICogMik7XG4gICAgICAgIGNvbnN0IGRpZ2VzdCA9IChvdXRwdXRUeXBlLCBwYWRkaW5nID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0KCkgY2FsbGVkIGJlZm9yZSBpbml0KCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgICAgICB3YXNtSW5zdGFuY2UuZXhwb3J0cy5IYXNoX0ZpbmFsKHBhZGRpbmcpO1xuICAgICAgICAgICAgaWYgKG91dHB1dFR5cGUgPT09ICdiaW5hcnknKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIGRhdGEgaXMgY29waWVkIHRvIGFsbG93IEdDIG9mIHRoZSBvcmlnaW5hbCBtZW1vcnkgb2JqZWN0XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lbW9yeVZpZXcuc2xpY2UoMCwgaGFzaExlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGlnZXN0SGV4KGRpZ2VzdENoYXJzLCBtZW1vcnlWaWV3LCBoYXNoTGVuZ3RoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2F2ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NhdmUoKSBjYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgaW5pdCgpIGFuZCBiZWZvcmUgZGlnZXN0KCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0YXRlT2Zmc2V0ID0gd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9HZXRTdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVMZW5ndGggPSBnZXRTdGF0ZVNpemUoKTtcbiAgICAgICAgICAgIGNvbnN0IG1lbW9yeUJ1ZmZlciA9IHdhc21JbnN0YW5jZS5leHBvcnRzLm1lbW9yeS5idWZmZXI7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbFN0YXRlID0gbmV3IFVpbnQ4QXJyYXkobWVtb3J5QnVmZmVyLCBzdGF0ZU9mZnNldCwgc3RhdGVMZW5ndGgpO1xuICAgICAgICAgICAgLy8gcHJlZml4IGlzIDQgYnl0ZXMgZnJvbSBTSEExIGhhc2ggb2YgdGhlIFdBU00gYmluYXJ5XG4gICAgICAgICAgICAvLyBpdCBpcyB1c2VkIHRvIGRldGVjdCBpbmNvbXBhdGlibGUgaW50ZXJuYWwgc3RhdGVzIGJldHdlZW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIGhhc2gtd2FzbVxuICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRTdGF0ZSA9IG5ldyBVaW50OEFycmF5KFdBU01fRlVOQ19IQVNIX0xFTkdUSCArIHN0YXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIHdyaXRlSGV4VG9VSW50OChwcmVmaXhlZFN0YXRlLCBiaW5hcnkuaGFzaCk7XG4gICAgICAgICAgICBwcmVmaXhlZFN0YXRlLnNldChpbnRlcm5hbFN0YXRlLCBXQVNNX0ZVTkNfSEFTSF9MRU5HVEgpO1xuICAgICAgICAgICAgcmV0dXJuIHByZWZpeGVkU3RhdGU7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvYWQgPSAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGlmICghKHN0YXRlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xvYWQoKSBleHBlY3RzIGFuIFVpbnQ4QXJyYXkgZ2VuZXJhdGVkIGJ5IHNhdmUoKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RhdGVPZmZzZXQgPSB3YXNtSW5zdGFuY2UuZXhwb3J0cy5IYXNoX0dldFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUxlbmd0aCA9IGdldFN0YXRlU2l6ZSgpO1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmFsbExlbmd0aCA9IFdBU01fRlVOQ19IQVNIX0xFTkdUSCArIHN0YXRlTGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgbWVtb3J5QnVmZmVyID0gd2FzbUluc3RhbmNlLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcjtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5sZW5ndGggIT09IG92ZXJhbGxMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBzdGF0ZSBsZW5ndGggKGV4cGVjdGVkICR7b3ZlcmFsbExlbmd0aH0gYnl0ZXMsIGdvdCAke3N0YXRlLmxlbmd0aH0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhleFN0cmluZ0VxdWFsc1VJbnQ4KGJpbmFyeS5oYXNoLCBzdGF0ZS5zdWJhcnJheSgwLCBXQVNNX0ZVTkNfSEFTSF9MRU5HVEgpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBzdGF0ZSB3YXMgd3JpdHRlbiBieSBhbiBpbmNvbXBhdGlibGUgaGFzaCBpbXBsZW1lbnRhdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxTdGF0ZSA9IHN0YXRlLnN1YmFycmF5KFdBU01fRlVOQ19IQVNIX0xFTkdUSCk7XG4gICAgICAgICAgICBuZXcgVWludDhBcnJheShtZW1vcnlCdWZmZXIsIHN0YXRlT2Zmc2V0LCBzdGF0ZUxlbmd0aCkuc2V0KGludGVybmFsU3RhdGUpO1xuICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpc0RhdGFTaG9ydCA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gd29yc3QgY2FzZSBpcyA0IGJ5dGVzIC8gY2hhclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCA8IE1BWF9IRUFQIC8gNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhLmJ5dGVMZW5ndGggPCBNQVhfSEVBUDtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGNhblNpbXBsaWZ5ID0gaXNEYXRhU2hvcnQ7XG4gICAgICAgIHN3aXRjaCAoYmluYXJ5Lm5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FyZ29uMic6XG4gICAgICAgICAgICBjYXNlICdzY3J5cHQnOlxuICAgICAgICAgICAgICAgIGNhblNpbXBsaWZ5ID0gKCkgPT4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JsYWtlMmInOlxuICAgICAgICAgICAgY2FzZSAnYmxha2Uycyc6XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBrZXkgYXQgYmxha2UyIHRoZW4gY2Fubm90IHNpbXBsaWZ5XG4gICAgICAgICAgICAgICAgY2FuU2ltcGxpZnkgPSAoZGF0YSwgaW5pdFBhcmFtKSA9PiBpbml0UGFyYW0gPD0gNTEyICYmIGlzRGF0YVNob3J0KGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYmxha2UzJzpcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGtleSBhdCBibGFrZTMgdGhlbiBjYW5ub3Qgc2ltcGxpZnlcbiAgICAgICAgICAgICAgICBjYW5TaW1wbGlmeSA9IChkYXRhLCBpbml0UGFyYW0pID0+IGluaXRQYXJhbSA9PT0gMCAmJiBpc0RhdGFTaG9ydChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3h4aGFzaDY0JzogLy8gY2Fubm90IHNpbXBsaWZ5XG4gICAgICAgICAgICBjYXNlICd4eGhhc2gzJzpcbiAgICAgICAgICAgIGNhc2UgJ3h4aGFzaDEyOCc6XG4gICAgICAgICAgICAgICAgY2FuU2ltcGxpZnkgPSAoKSA9PiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBzaG9ydGhhbmQgZm9yIChpbml0ICsgdXBkYXRlICsgZGlnZXN0KSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZSA9IChkYXRhLCBpbml0UGFyYW0gPSBudWxsLCBkaWdlc3RQYXJhbSA9IG51bGwpID0+IHtcbiAgICAgICAgICAgIGlmICghY2FuU2ltcGxpZnkoZGF0YSwgaW5pdFBhcmFtKSkge1xuICAgICAgICAgICAgICAgIGluaXQoaW5pdFBhcmFtKTtcbiAgICAgICAgICAgICAgICB1cGRhdGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpZ2VzdCgnaGV4JywgZGlnZXN0UGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gZ2V0VUludDhCdWZmZXIoZGF0YSk7XG4gICAgICAgICAgICBtZW1vcnlWaWV3LnNldChidWZmZXIpO1xuICAgICAgICAgICAgd2FzbUluc3RhbmNlLmV4cG9ydHMuSGFzaF9DYWxjdWxhdGUoYnVmZmVyLmxlbmd0aCwgaW5pdFBhcmFtLCBkaWdlc3RQYXJhbSk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGlnZXN0SGV4KGRpZ2VzdENoYXJzLCBtZW1vcnlWaWV3LCBoYXNoTGVuZ3RoKTtcbiAgICAgICAgfTtcbiAgICAgICAgeWllbGQgc2V0dXBJbnRlcmZhY2UoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldE1lbW9yeSxcbiAgICAgICAgICAgIHdyaXRlTWVtb3J5LFxuICAgICAgICAgICAgZ2V0RXhwb3J0cyxcbiAgICAgICAgICAgIHNldE1lbW9yeVNpemUsXG4gICAgICAgICAgICBpbml0LFxuICAgICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgICAgZGlnZXN0LFxuICAgICAgICAgICAgc2F2ZSxcbiAgICAgICAgICAgIGxvYWQsXG4gICAgICAgICAgICBjYWxjdWxhdGUsXG4gICAgICAgICAgICBoYXNoTGVuZ3RoLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSRrID0gXCJhZGxlcjMyXCI7XG52YXIgZGF0YSRrID0gXCJBR0Z6YlFFQUFBQUJEQU5nQUFGL1lBQUFZQUYvQUFNSEJnQUJBZ0VBQWdVRUFRRUNBZ1lPQW44QlFZQ0pCUXQvQUVHQUNBc0hjQWdHYldWdGIzSjVBZ0FPU0dGemFGOUhaWFJDZFdabVpYSUFBQWxJWVhOb1gwbHVhWFFBQVF0SVlYTm9YMVZ3WkdGMFpRQUNDa2hoYzJoZlJtbHVZV3dBQXcxSVlYTm9YMGRsZEZOMFlYUmxBQVFPU0dGemFGOURZV3hqZFd4aGRHVUFCUXBUVkVGVVJWOVRTVnBGQXdFSzZ3a0dCUUJCZ0FrTENnQkJBRUVCTmdLRUNBdmpDQUVIZjBFQUtBS0VDQ0lCUWYvL0EzRWhBaUFCUVJCMklRTUNRQUpBSUFCQkFVY05BQ0FDUVFBdEFJQUphaUlCUVkrQWZHb2dBU0FCUWZEL0Ewc2JJZ0VnQTJvaUJFRVFkQ0lGUVlDQVBHb2dCU0FFUWZEL0Ewc2JJQUZ5SVFFTUFRc0NRQUpBQWtBQ1FBSkFJQUJCRUVrTkFFR0FDU0VHSUFCQnNDdEpEUUZCZ0FraEJnTkFRUUFoQlFOQUlBWWdCV29pQVNnQ0FDSUVRZjhCY1NBQ2FpSUNJQU5xSUFJZ0JFRUlka0gvQVhGcUlnSnFJQUlnQkVFUWRrSC9BWEZxSWdKcUlBSWdCRUVZZG1vaUFtb2dBaUFCUVFScUtBSUFJZ1JCL3dGeGFpSUNhaUFDSUFSQkNIWkIvd0Z4YWlJQ2FpQUNJQVJCRUhaQi93RnhhaUlDYWlBQ0lBUkJHSFpxSWdKcUlBSWdBVUVJYWlnQ0FDSUVRZjhCY1dvaUFtb2dBaUFFUVFoMlFmOEJjV29pQW1vZ0FpQUVRUkIyUWY4QmNXb2lBbW9nQWlBRVFSaDJhaUlFYWlBRUlBRkJER29vQWdBaUFVSC9BWEZxSWdScUlBUWdBVUVJZGtIL0FYRnFJZ1JxSUFRZ0FVRVFka0gvQVhGcUlnUnFJQVFnQVVFWWRtb2lBbW9oQXlBRlFSQnFJZ1ZCc0N0SERRQUxJQU5COGY4RGNDRURJQUpCOGY4RGNDRUNJQVpCc0N0cUlRWWdBRUhRVkdvaUFFR3ZLMHNOQUFzZ0FFVU5CQ0FBUVE5TERRRU1BZ3NDUUNBQVJRMEFBa0FDUUNBQVFRTnhJZ1VOQUVHQUNTRUJJQUFoQkF3QkN5QUFRWHh4SVFSQkFDRUJBMEFnQWlBQlFZQUphaTBBQUdvaUFpQURhaUVESUFVZ0FVRUJhaUlCUncwQUN5QUZRWUFKYWlFQkN5QUFRUVJKRFFBRFFDQUNJQUV0QUFCcUlnVWdBUzBBQVdvaUJpQUJMUUFDYWlJQUlBRkJBMm90QUFCcUlnSWdBQ0FHSUFVZ0EycHFhbW9oQXlBQlFRUnFJUUVnQkVGOGFpSUVEUUFMQ3lBQ1FZK0FmR29nQWlBQ1FmRC9BMHNiSUFOQjhmOERjRUVRZEhJaEFRd0VDd05BSUFZb0FnQWlBVUgvQVhFZ0Ftb2lCQ0FEYWlBRUlBRkJDSFpCL3dGeGFpSUVhaUFFSUFGQkVIWkIvd0Z4YWlJRWFpQUVJQUZCR0hacUlnUnFJQVFnQmtFRWFpZ0NBQ0lCUWY4QmNXb2lCR29nQkNBQlFRaDJRZjhCY1dvaUJHb2dCQ0FCUVJCMlFmOEJjV29pQkdvZ0JDQUJRUmgyYWlJRWFpQUVJQVpCQ0dvb0FnQWlBVUgvQVhGcUlnUnFJQVFnQVVFSWRrSC9BWEZxSWdScUlBUWdBVUVRZGtIL0FYRnFJZ1JxSUFRZ0FVRVlkbW9pQkdvZ0JDQUdRUXhxS0FJQUlnRkIvd0Z4YWlJRWFpQUVJQUZCQ0haQi93RnhhaUlFYWlBRUlBRkJFSFpCL3dGeGFpSUVhaUFFSUFGQkdIWnFJZ0pxSVFNZ0JrRVFhaUVHSUFCQmNHb2lBRUVQU3cwQUN5QUFSUTBCQ3lBQVFYOXFJUWNDUUNBQVFRTnhJZ1ZGRFFBZ0FFRjhjU0VBSUFVaEJDQUdJUUVEUUNBQ0lBRXRBQUJxSWdJZ0Eyb2hBeUFCUVFGcUlRRWdCRUYvYWlJRURRQUxJQVlnQldvaEJnc2dCMEVEU1EwQUEwQWdBaUFHTFFBQWFpSUJJQVl0QUFGcUlnUWdCaTBBQW1vaUJTQUdRUU5xTFFBQWFpSUNJQVVnQkNBQklBTnFhbXBxSVFNZ0JrRUVhaUVHSUFCQmZHb2lBQTBBQ3dzZ0EwSHgvd053SVFNZ0FrSHgvd053SVFJTElBSWdBMEVRZEhJaEFRdEJBQ0FCTmdLRUNBc3hBUUYvUVFCQkFDZ0NoQWdpQUVFWWRDQUFRWUQrQTNGQkNIUnlJQUJCQ0haQmdQNERjU0FBUVJoMmNuSTJBb0FKQ3dVQVFZUUlDenNBUVFCQkFUWUNoQWdnQUJBQ1FRQkJBQ2dDaEFnaUFFRVlkQ0FBUVlEK0EzRkJDSFJ5SUFCQkNIWkJnUDREY1NBQVFSaDJjbkkyQW9BSkN3c1ZBZ0JCZ0FnTEJBUUFBQUFBUVlRSUN3UUJBQUFBXCI7XG52YXIgaGFzaCRrID0gXCIwMmRkYmQxN1wiO1xudmFyIHdhc21Kc29uJGsgPSB7XG5cdG5hbWU6IG5hbWUkayxcblx0ZGF0YTogZGF0YSRrLFxuXHRoYXNoOiBoYXNoJGtcbn07XG5cbmZ1bmN0aW9uIGxvY2tlZENyZWF0ZShtdXRleCwgYmluYXJ5LCBoYXNoTGVuZ3RoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdW5sb2NrID0geWllbGQgbXV0ZXgubG9jaygpO1xuICAgICAgICBjb25zdCB3YXNtID0geWllbGQgV0FTTUludGVyZmFjZShiaW5hcnksIGhhc2hMZW5ndGgpO1xuICAgICAgICB1bmxvY2soKTtcbiAgICAgICAgcmV0dXJuIHdhc207XG4gICAgfSk7XG59XG5cbmNvbnN0IG11dGV4JGwgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkbCA9IG51bGw7XG4vKipcbiAqIENhbGN1bGF0ZXMgQWRsZXItMzIgaGFzaC4gVGhlIHJlc3VsdGluZyAzMi1iaXQgaGFzaCBpcyBzdG9yZWQgaW5cbiAqIG5ldHdvcmsgYnl0ZSBvcmRlciAoYmlnLWVuZGlhbikuXG4gKlxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYWRsZXIzMihkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSRsID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkbCwgd2FzbUpzb24kaywgNClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkbCA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGwuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSRsLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQWRsZXItMzIgaGFzaCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVBZGxlcjMyKCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJGssIDQpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KCk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogNCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJGogPSBcImJsYWtlMmJcIjtcbnZhciBkYXRhJGogPSBcIkFHRnpiUUVBQUFBQkVRUmdBQUYvWUFKL2Z3QmdBWDhBWUFBQUF3b0pBQUVDQXdFQ0FnQUJCUVFCQVFJQ0JnNENmd0ZCc0lzRkMzOEFRWUFJQ3dkd0NBWnRaVzF2Y25rQ0FBNUlZWE5vWDBkbGRFSjFabVpsY2dBQUNraGhjMmhmUm1sdVlXd0FBd2xJWVhOb1gwbHVhWFFBQlF0SVlYTm9YMVZ3WkdGMFpRQUdEVWhoYzJoZlIyVjBVM1JoZEdVQUJ3NUlZWE5vWDBOaGJHTjFiR0YwWlFBSUNsTlVRVlJGWDFOSldrVURBUXJUT0FrRkFFR0FDUXZyQWdJRmZ3RitBa0FnQVVFQlNBMEFBa0FDUUFKQVFZQUJRUUFvQXVDS0FTSUNheUlESUFGSURRQWdBU0VFREFFTFFRQkJBRFlDNElvQkFrQWdBa0gvQUVvTkFDQUNRZUNKQVdvaEJTQUFJUVJCQUNFR0EwQWdCU0FFTFFBQU9nQUFJQVJCQVdvaEJDQUZRUUZxSVFVZ0F5QUdRUUZxSWdaQi93RnhTZzBBQ3d0QkFFRUFLUVBBaVFFaUIwS0FBWHczQThDSkFVRUFRUUFwQThpSkFTQUhRdjkrVnExOE53UElpUUZCNElrQkVBSWdBQ0FEYWlFQUFrQWdBU0FEYXlJRVFZRUJTQTBBSUFJZ0FXb2hCUU5BUVFCQkFDa0R3SWtCSWdkQ2dBRjhOd1BBaVFGQkFFRUFLUVBJaVFFZ0IwTC9mbGF0ZkRjRHlJa0JJQUFRQWlBQVFZQUJhaUVBSUFWQmdIOXFJZ1ZCZ0FKTERRQUxJQVZCZ0g5cUlRUU1BUXNnQkVFQVRBMEJDMEVBSVFVRFFDQUZRUUFvQXVDS0FXcEI0SWtCYWlBQUlBVnFMUUFBT2dBQUlBUWdCVUVCYWlJRlFmOEJjVW9OQUFzTFFRQkJBQ2dDNElvQklBUnFOZ0xnaWdFTEM3OHVBU1IrUVFCQkFDa0QwSWtCUVFBcEE3Q0pBU0lCUVFBcEE1Q0pBWHdnQUNrRElDSUNmQ0lEaFVMcitvYmF2N1gyd1IrRlFpQ0pJZ1JDcS9EVDlLL3V2TGM4ZkNJRklBR0ZRaWlKSWdZZ0Ezd2dBQ2tES0NJQmZDSUhJQVNGUWpDSklnZ2dCWHdpQ1NBR2hVSUJpU0lLUVFBcEE4aUpBVUVBS1FPb2lRRWlCRUVBS1FPSWlRRjhJQUFwQXhBaUEzd2lCWVZDbjlqNTJjS1Iyb0tiZjRWQ0lJa2lDMEs3enFxbTJORHJzN3QvZkNJTUlBU0ZRaWlKSWcwZ0JYd2dBQ2tER0NJRWZDSU9mQ0FBS1FOUUlnVjhJZzlCQUNrRHdJa0JRUUFwQTZDSkFTSVFRUUFwQTRDSkFTSVJmQ0FBS1FNQUlnWjhJaEtGUXRHRm11LzZ6NVNIMFFDRlFpQ0pJaE5DaUpMem5mL00rWVRxQUh3aUZDQVFoVUlvaVNJVklCSjhJQUFwQXdnaUVId2lGaUFUaFVJd2lTSVhoVUlnaVNJWVFRQXBBOWlKQVVFQUtRTzRpUUVpRTBFQUtRT1lpUUY4SUFBcEF6QWlFbndpR1lWQytjTDRtNUdqcy9EYkFJVkNJSWtpR2tMeDdmVDRwYWY5cDZWL2ZDSWJJQk9GUWlpSklod2dHWHdnQUNrRE9DSVRmQ0laSUJxRlFqQ0pJaG9nRzN3aUczd2lIU0FLaFVJb2lTSWVJQTk4SUFBcEExZ2lDbndpRHlBWWhVSXdpU0lZSUIxOEloMGdEaUFMaFVJd2lTSU9JQXg4SWg4Z0RZVkNBWWtpRENBV2ZDQUFLUU5BSWd0OElnMGdHb1ZDSUlraUZpQUpmQ0lhSUF5RlFpaUpJaUFnRFh3Z0FDa0RTQ0lKZkNJaElCYUZRakNKSWhZZ0d5QWNoVUlCaVNJTUlBZDhJQUFwQTJBaUIzd2lEU0FPaFVJZ2lTSU9JQmNnRkh3aUZId2lGeUFNaFVJb2lTSWJJQTE4SUFBcEEyZ2lESHdpSENBT2hVSXdpU0lPSUJkOEloY2dHNFZDQVlraUd5QVpJQlFnRllWQ0FZa2lGSHdnQUNrRGNDSU5mQ0lWSUFpRlFpQ0pJaGtnSDN3aUh5QVVoVUlvaVNJVUlCVjhJQUFwQTNnaUNId2lGWHdnREh3aUlvVkNJSWtpSTN3aUpDQWJoVUlvaVNJYklDSjhJQko4SWlJZ0Z5QVlJQlVnR1lWQ01Ja2lGU0FmZkNJWklCU0ZRZ0dKSWhRZ0lYd2dEWHdpSDRWQ0lJa2lHSHdpRnlBVWhVSW9pU0lVSUI5OElBVjhJaDhnR0lWQ01Ja2lHQ0FYZkNJWElCU0ZRZ0dKSWhSOElBRjhJaUVnRmlBYWZDSVdJQlVnSFNBZWhVSUJpU0lhSUJ4OElBbDhJaHlGUWlDSkloVjhJaDBnR29WQ0tJa2lHaUFjZkNBSWZDSWNJQldGUWpDSkloV0ZRaUNKSWg0Z0dTQU9JQllnSUlWQ0FZa2lGaUFQZkNBQ2ZDSVBoVUlnaVNJT2ZDSVpJQmFGUWlpSkloWWdEM3dnQzN3aUR5QU9oVUl3aVNJT0lCbDhJaGw4SWlBZ0ZJVkNLSWtpRkNBaGZDQUVmQ0loSUI2RlFqQ0pJaDRnSUh3aUlDQWlJQ09GUWpDSklpSWdKSHdpSXlBYmhVSUJpU0liSUJ4OElBcDhJaHdnRG9WQ0lJa2lEaUFYZkNJWElCdUZRaWlKSWhzZ0hId2dFM3dpSENBT2hVSXdpU0lPSUJrZ0ZvVkNBWWtpRmlBZmZDQVFmQ0laSUNLRlFpQ0pJaDhnRlNBZGZDSVZmQ0lkSUJhRlFpaUpJaFlnR1h3Z0Izd2lHU0FmaFVJd2lTSWZJQjE4SWgwZ0ZvVkNBWWtpRmlBVklCcUZRZ0dKSWhVZ0Qzd2dCbndpRHlBWWhVSWdpU0lZSUNOOElob2dGWVZDS0lraUZTQVBmQ0FEZkNJUGZDQUhmQ0lpaFVJZ2lTSWpmQ0lrSUJhRlFpaUpJaFlnSW53Z0Jud2lJaUFqaFVJd2lTSWpJQ1I4SWlRZ0ZvVkNBWWtpRmlBT0lCZDhJZzRnRHlBWWhVSXdpU0lQSUNBZ0ZJVkNBWWtpRkNBWmZDQUtmQ0lYaFVJZ2lTSVlmQ0laSUJTRlFpaUpJaFFnRjN3Z0Mzd2lGM3dnQlh3aUlDQVBJQnA4SWc4Z0h5QU9JQnVGUWdHSklnNGdJWHdnQ0h3aUdvVkNJSWtpRzN3aUh5QU9oVUlvaVNJT0lCcDhJQXg4SWhvZ0c0VkNNSWtpRzRWQ0lJa2lJU0FkSUI0Z0R5QVZoVUlCaVNJUElCeDhJQUY4SWhXRlFpQ0pJaHg4SWgwZ0Q0VkNLSWtpRHlBVmZDQURmQ0lWSUJ5RlFqQ0pJaHdnSFh3aUhYd2lIaUFXaFVJb2lTSVdJQ0I4SUExOElpQWdJWVZDTUlraUlTQWVmQ0llSUJvZ0Z5QVloVUl3aVNJWElCbDhJaGdnRklWQ0FZa2lGSHdnQ1h3aUdTQWNoVUlnaVNJYUlDUjhJaHdnRklWQ0tJa2lGQ0FaZkNBQ2ZDSVpJQnFGUWpDSklob2dIU0FQaFVJQmlTSVBJQ0o4SUFSOEloMGdGNFZDSUlraUZ5QWJJQjk4SWh0OEloOGdENFZDS0lraUR5QWRmQ0FTZkNJZElCZUZRakNKSWhjZ0gzd2lIeUFQaFVJQmlTSVBJQnNnRG9WQ0FZa2lEaUFWZkNBVGZDSVZJQ09GUWlDSkloc2dHSHdpR0NBT2hVSW9pU0lPSUJWOElCQjhJaFY4SUF4OElpS0ZRaUNKSWlOOElpUWdENFZDS0lraUR5QWlmQ0FIZkNJaUlDT0ZRakNKSWlNZ0pId2lKQ0FQaFVJQmlTSVBJQm9nSEh3aUdpQVZJQnVGUWpDSkloVWdIaUFXaFVJQmlTSVdJQjE4SUFSOElodUZRaUNKSWh4OEloMGdGb1ZDS0lraUZpQWJmQ0FRZkNJYmZDQUJmQ0llSUJVZ0dId2lGU0FYSUJvZ0ZJVkNBWWtpRkNBZ2ZDQVRmQ0lZaFVJZ2lTSVhmQ0lhSUJTRlFpaUpJaFFnR0h3Z0NYd2lHQ0FYaFVJd2lTSVhoVUlnaVNJZ0lCOGdJU0FWSUE2RlFnR0pJZzRnR1h3Z0Nud2lGWVZDSUlraUdYd2lIeUFPaFVJb2lTSU9JQlY4SUExOEloVWdHWVZDTUlraUdTQWZmQ0lmZkNJaElBK0ZRaWlKSWc4Z0hud2dCWHdpSGlBZ2hVSXdpU0lnSUNGOElpRWdHeUFjaFVJd2lTSWJJQjE4SWh3Z0ZvVkNBWWtpRmlBWWZDQURmQ0lZSUJtRlFpQ0pJaGtnSkh3aUhTQVdoVUlvaVNJV0lCaDhJQko4SWhnZ0dZVkNNSWtpR1NBZklBNkZRZ0dKSWc0Z0lud2dBbndpSHlBYmhVSWdpU0liSUJjZ0dud2lGM3dpR2lBT2hVSW9pU0lPSUI5OElBWjhJaDhnRzRWQ01Ja2lHeUFhZkNJYUlBNkZRZ0dKSWc0Z0ZTQVhJQlNGUWdHSkloUjhJQWg4SWhVZ0k0VkNJSWtpRnlBY2ZDSWNJQlNGUWlpSkloUWdGWHdnQzN3aUZYd2dCWHdpSW9WQ0lJa2lJM3dpSkNBT2hVSW9pU0lPSUNKOElBaDhJaUlnR2lBZ0lCVWdGNFZDTUlraUZTQWNmQ0lYSUJTRlFnR0pJaFFnR0h3Z0NYd2lHSVZDSUlraUhId2lHaUFVaFVJb2lTSVVJQmg4SUFaOEloZ2dISVZDTUlraUhDQWFmQ0lhSUJTRlFnR0pJaFI4SUFSOElpQWdHU0FkZkNJWklCVWdJU0FQaFVJQmlTSVBJQjk4SUFOOEloMkZRaUNKSWhWOEloOGdENFZDS0lraUR5QWRmQ0FDZkNJZElCV0ZRakNKSWhXRlFpQ0pJaUVnRnlBYklCa2dGb1ZDQVlraUZpQWVmQ0FCZkNJWmhVSWdpU0liZkNJWElCYUZRaWlKSWhZZ0dYd2dFM3dpR1NBYmhVSXdpU0liSUJkOEloZDhJaDRnRklWQ0tJa2lGQ0FnZkNBTWZDSWdJQ0dGUWpDSklpRWdIbndpSGlBaUlDT0ZRakNKSWlJZ0pId2lJeUFPaFVJQmlTSU9JQjE4SUJKOEloMGdHNFZDSUlraUd5QWFmQ0lhSUE2RlFpaUpJZzRnSFh3Z0Mzd2lIU0FiaFVJd2lTSWJJQmNnRm9WQ0FZa2lGaUFZZkNBTmZDSVhJQ0tGUWlDSkloZ2dGU0FmZkNJVmZDSWZJQmFGUWlpSkloWWdGM3dnRUh3aUZ5QVloVUl3aVNJWUlCOThJaDhnRm9WQ0FZa2lGaUFWSUErRlFnR0pJZzhnR1h3Z0Nud2lGU0FjaFVJZ2lTSVpJQ044SWh3Z0Q0VkNLSWtpRHlBVmZDQUhmQ0lWZkNBU2ZDSWloVUlnaVNJamZDSWtJQmFGUWlpSkloWWdJbndnQlh3aUlpQWpoVUl3aVNJaklDUjhJaVFnRm9WQ0FZa2lGaUFiSUJwOElob2dGU0FaaFVJd2lTSVZJQjRnRklWQ0FZa2lGQ0FYZkNBRGZDSVhoVUlnaVNJWmZDSWJJQlNGUWlpSkloUWdGM3dnQjN3aUYzd2dBbndpSGlBVklCeDhJaFVnR0NBYUlBNkZRZ0dKSWc0Z0lId2dDM3dpR29WQ0lJa2lHSHdpSENBT2hVSW9pU0lPSUJwOElBUjhJaG9nR0lWQ01Ja2lHSVZDSUlraUlDQWZJQ0VnRlNBUGhVSUJpU0lQSUIxOElBWjhJaFdGUWlDSkloMThJaDhnRDRWQ0tJa2lEeUFWZkNBS2ZDSVZJQjJGUWpDSkloMGdIM3dpSDN3aUlTQVdoVUlvaVNJV0lCNThJQXg4SWg0Z0lJVkNNSWtpSUNBaGZDSWhJQm9nRnlBWmhVSXdpU0lYSUJ0OEloa2dGSVZDQVlraUZId2dFSHdpR2lBZGhVSWdpU0liSUNSOEloMGdGSVZDS0lraUZDQWFmQ0FKZkNJYUlCdUZRakNKSWhzZ0h5QVBoVUlCaVNJUElDSjhJQk44SWg4Z0Y0VkNJSWtpRnlBWUlCeDhJaGg4SWh3Z0Q0VkNLSWtpRHlBZmZDQUJmQ0lmSUJlRlFqQ0pJaGNnSEh3aUhDQVBoVUlCaVNJUElCZ2dEb1ZDQVlraURpQVZmQ0FJZkNJVklDT0ZRaUNKSWhnZ0dYd2lHU0FPaFVJb2lTSU9JQlY4SUExOEloVjhJQTE4SWlLRlFpQ0pJaU44SWlRZ0Q0VkNLSWtpRHlBaWZDQU1mQ0lpSUNPRlFqQ0pJaU1nSkh3aUpDQVBoVUlCaVNJUElCc2dIWHdpR3lBVklCaUZRakNKSWhVZ0lTQVdoVUlCaVNJV0lCOThJQkI4SWhpRlFpQ0pJaDE4SWg4Z0ZvVkNLSWtpRmlBWWZDQUlmQ0lZZkNBU2ZDSWhJQlVnR1h3aUZTQVhJQnNnRklWQ0FZa2lGQ0FlZkNBSGZDSVpoVUlnaVNJWGZDSWJJQlNGUWlpSkloUWdHWHdnQVh3aUdTQVhoVUl3aVNJWGhVSWdpU0llSUJ3Z0lDQVZJQTZGUWdHSklnNGdHbndnQW53aUZZVkNJSWtpR253aUhDQU9oVUlvaVNJT0lCVjhJQVY4SWhVZ0dvVkNNSWtpR2lBY2ZDSWNmQ0lnSUErRlFpaUpJZzhnSVh3Z0JId2lJU0FlaFVJd2lTSWVJQ0I4SWlBZ0dDQWRoVUl3aVNJWUlCOThJaDBnRm9WQ0FZa2lGaUFaZkNBR2ZDSVpJQnFGUWlDSklob2dKSHdpSHlBV2hVSW9pU0lXSUJsOElCTjhJaGtnR29WQ01Ja2lHaUFjSUE2RlFnR0pJZzRnSW53Z0NYd2lIQ0FZaFVJZ2lTSVlJQmNnRzN3aUYzd2lHeUFPaFVJb2lTSU9JQng4SUFOOElod2dHSVZDTUlraUdDQWJmQ0liSUE2RlFnR0pJZzRnRlNBWElCU0ZRZ0dKSWhSOElBdDhJaFVnSTRWQ0lJa2lGeUFkZkNJZElCU0ZRaWlKSWhRZ0ZYd2dDbndpRlh3Z0JId2lJb1ZDSUlraUkzd2lKQ0FPaFVJb2lTSU9JQ0o4SUFsOElpSWdHeUFlSUJVZ0Y0VkNNSWtpRlNBZGZDSVhJQlNGUWdHSkloUWdHWHdnREh3aUdZVkNJSWtpSFh3aUd5QVVoVUlvaVNJVUlCbDhJQXA4SWhrZ0hZVkNNSWtpSFNBYmZDSWJJQlNGUWdHSkloUjhJQU44SWg0Z0dpQWZmQ0lhSUJVZ0lDQVBoVUlCaVNJUElCeDhJQWQ4SWh5RlFpQ0pJaFY4SWg4Z0Q0VkNLSWtpRHlBY2ZDQVFmQ0ljSUJXRlFqQ0pJaFdGUWlDSklpQWdGeUFZSUJvZ0ZvVkNBWWtpRmlBaGZDQVRmQ0lhaFVJZ2lTSVlmQ0lYSUJhRlFpaUpJaFlnR253Z0RYd2lHaUFZaFVJd2lTSVlJQmQ4SWhkOElpRWdGSVZDS0lraUZDQWVmQ0FGZkNJZUlDQ0ZRakNKSWlBZ0lYd2lJU0FpSUNPRlFqQ0pJaUlnSkh3aUl5QU9oVUlCaVNJT0lCeDhJQXQ4SWh3Z0dJVkNJSWtpR0NBYmZDSWJJQTZGUWlpSklnNGdISHdnRW53aUhDQVloVUl3aVNJWUlCY2dGb1ZDQVlraUZpQVpmQ0FCZkNJWElDS0ZRaUNKSWhrZ0ZTQWZmQ0lWZkNJZklCYUZRaWlKSWhZZ0Yzd2dCbndpRnlBWmhVSXdpU0laSUI5OEloOGdGb1ZDQVlraUZpQVZJQStGUWdHSklnOGdHbndnQ0h3aUZTQWRoVUlnaVNJYUlDTjhJaDBnRDRWQ0tJa2lEeUFWZkNBQ2ZDSVZmQ0FOZkNJaWhVSWdpU0lqZkNJa0lCYUZRaWlKSWhZZ0lud2dDWHdpSWlBamhVSXdpU0lqSUNSOElpUWdGb1ZDQVlraUZpQVlJQnQ4SWhnZ0ZTQWFoVUl3aVNJVklDRWdGSVZDQVlraUZDQVhmQ0FTZkNJWGhVSWdpU0lhZkNJYklCU0ZRaWlKSWhRZ0Yzd2dDSHdpRjN3Z0Izd2lJU0FWSUIxOEloVWdHU0FZSUE2RlFnR0pJZzRnSG53Z0Jud2lHSVZDSUlraUdYd2lIU0FPaFVJb2lTSU9JQmg4SUF0OEloZ2dHWVZDTUlraUdZVkNJSWtpSGlBZklDQWdGU0FQaFVJQmlTSVBJQng4SUFwOEloV0ZRaUNKSWh4OEloOGdENFZDS0lraUR5QVZmQ0FFZkNJVklCeUZRakNKSWh3Z0gzd2lIM3dpSUNBV2hVSW9pU0lXSUNGOElBTjhJaUVnSG9WQ01Ja2lIaUFnZkNJZ0lCZ2dGeUFhaFVJd2lTSVhJQnQ4SWhvZ0ZJVkNBWWtpRkh3Z0JYd2lHQ0FjaFVJZ2lTSWJJQ1I4SWh3Z0ZJVkNLSWtpRkNBWWZDQUJmQ0lZSUJ1RlFqQ0pJaHNnSHlBUGhVSUJpU0lQSUNKOElBeDhJaDhnRjRWQ0lJa2lGeUFaSUIxOElobDhJaDBnRDRWQ0tJa2lEeUFmZkNBVGZDSWZJQmVGUWpDSkloY2dIWHdpSFNBUGhVSUJpU0lQSUJrZ0RvVkNBWWtpRGlBVmZDQVFmQ0lWSUNPRlFpQ0pJaGtnR253aUdpQU9oVUlvaVNJT0lCVjhJQUo4SWhWOElCTjhJaUtGUWlDSklpTjhJaVFnRDRWQ0tJa2lEeUFpZkNBU2ZDSWlJQ09GUWpDSklpTWdKSHdpSkNBUGhVSUJpU0lQSUJzZ0hId2lHeUFWSUJtRlFqQ0pJaFVnSUNBV2hVSUJpU0lXSUI5OElBdDhJaG1GUWlDSkloeDhJaDhnRm9WQ0tJa2lGaUFaZkNBQ2ZDSVpmQ0FKZkNJZ0lCVWdHbndpRlNBWElCc2dGSVZDQVlraUZDQWhmQ0FGZkNJYWhVSWdpU0lYZkNJYklCU0ZRaWlKSWhRZ0dud2dBM3dpR2lBWGhVSXdpU0lYaFVJZ2lTSWhJQjBnSGlBVklBNkZRZ0dKSWc0Z0dId2dFSHdpRllWQ0lJa2lHSHdpSFNBT2hVSW9pU0lPSUJWOElBRjhJaFVnR0lWQ01Ja2lHQ0FkZkNJZGZDSWVJQStGUWlpSklnOGdJSHdnRFh3aUlDQWhoVUl3aVNJaElCNThJaDRnR1NBY2hVSXdpU0laSUI5OElod2dGb1ZDQVlraUZpQWFmQ0FJZkNJYUlCaUZRaUNKSWhnZ0pId2lIeUFXaFVJb2lTSVdJQnA4SUFwOElob2dHSVZDTUlraUdDQWRJQTZGUWdHSklnNGdJbndnQkh3aUhTQVpoVUlnaVNJWklCY2dHM3dpRjN3aUd5QU9oVUlvaVNJT0lCMThJQWQ4SWgwZ0dZVkNNSWtpR1NBYmZDSWJJQTZGUWdHSklnNGdGU0FYSUJTRlFnR0pJaFI4SUF4OEloVWdJNFZDSUlraUZ5QWNmQ0ljSUJTRlFpaUpJaFFnRlh3Z0Jud2lGWHdnRW53aUlvVkNJSWtpSTN3aUpDQU9oVUlvaVNJT0lDSjhJQk44SWlJZ0d5QWhJQlVnRjRWQ01Ja2lGU0FjZkNJWElCU0ZRZ0dKSWhRZ0dud2dCbndpR29WQ0lJa2lISHdpR3lBVWhVSW9pU0lVSUJwOElCQjhJaG9nSElWQ01Ja2lIQ0FiZkNJYklCU0ZRZ0dKSWhSOElBMThJaUVnR0NBZmZDSVlJQlVnSGlBUGhVSUJpU0lQSUIxOElBSjhJaDJGUWlDSkloVjhJaDRnRDRWQ0tJa2lEeUFkZkNBQmZDSWRJQldGUWpDSkloV0ZRaUNKSWg4Z0Z5QVpJQmdnRm9WQ0FZa2lGaUFnZkNBRGZDSVloVUlnaVNJWmZDSVhJQmFGUWlpSkloWWdHSHdnQkh3aUdDQVpoVUl3aVNJWklCZDhJaGQ4SWlBZ0ZJVkNLSWtpRkNBaGZDQUlmQ0loSUIrRlFqQ0pJaDhnSUh3aUlDQWlJQ09GUWpDSklpSWdKSHdpSXlBT2hVSUJpU0lPSUIxOElBZDhJaDBnR1lWQ0lJa2lHU0FiZkNJYklBNkZRaWlKSWc0Z0hYd2dESHdpSFNBWmhVSXdpU0laSUJjZ0ZvVkNBWWtpRmlBYWZDQUxmQ0lYSUNLRlFpQ0pJaG9nRlNBZWZDSVZmQ0llSUJhRlFpaUpJaFlnRjN3Z0NYd2lGeUFhaFVJd2lTSWFJQjU4SWg0Z0ZvVkNBWWtpRmlBVklBK0ZRZ0dKSWc4Z0dId2dCWHdpRlNBY2hVSWdpU0lZSUNOOElod2dENFZDS0lraUR5QVZmQ0FLZkNJVmZDQUNmQ0lDaFVJZ2lTSWlmQ0lqSUJhRlFpaUpJaFlnQW53Z0Mzd2lBaUFpaFVJd2lTSUxJQ044SWlJZ0ZvVkNBWWtpRmlBWklCdDhJaGtnRlNBWWhVSXdpU0lWSUNBZ0ZJVkNBWWtpRkNBWGZDQU5mQ0lOaFVJZ2lTSVhmQ0lZSUJTRlFpaUpJaFFnRFh3Z0JYd2lCWHdnRUh3aUVDQVZJQng4SWcwZ0dpQVpJQTZGUWdHSklnNGdJWHdnREh3aURJVkNJSWtpRlh3aUdTQU9oVUlvaVNJT0lBeDhJQko4SWhJZ0ZZVkNNSWtpRElWQ0lJa2lGU0FlSUI4Z0RTQVBoVUlCaVNJTklCMThJQWw4SWdtRlFpQ0pJZzk4SWhvZ0RZVkNLSWtpRFNBSmZDQUlmQ0lKSUErRlFqQ0pJZ2dnR253aUQzd2lHaUFXaFVJb2lTSVdJQkI4SUFkOEloQWdFWVVnRENBWmZDSUhJQTZGUWdHSklnd2dDWHdnQ253aUNpQUxoVUlnaVNJTElBVWdGNFZDTUlraUJTQVlmQ0lKZkNJT0lBeUZRaWlKSWd3Z0Nud2dFM3dpRXlBTGhVSXdpU0lLSUE1OElndUZOd09BaVFGQkFDQURJQVlnRHlBTmhVSUJpU0lOSUFKOGZDSUNJQVdGUWlDSklnVWdCM3dpQmlBTmhVSW9pU0lISUFKOGZDSUNRUUFwQTRpSkFZVWdCQ0FCSUJJZ0NTQVVoVUlCaVNJRGZId2lBU0FJaFVJZ2lTSVNJQ0o4SWdrZ0E0VkNLSWtpQXlBQmZId2lBU0FTaFVJd2lTSUVJQWw4SWhLRk53T0lpUUZCQUNBVFFRQXBBNUNKQVlVZ0VDQVZoVUl3aVNJUUlCcDhJaE9GTndPUWlRRkJBQ0FCUVFBcEE1aUpBWVVnQWlBRmhVSXdpU0lDSUFaOElnR0ZOd09ZaVFGQkFDQVNJQU9GUWdHSlFRQXBBNkNKQVlVZ0FvVTNBNkNKQVVFQUlCTWdGb1ZDQVlsQkFDa0RxSWtCaFNBS2hUY0RxSWtCUVFBZ0FTQUhoVUlCaVVFQUtRT3dpUUdGSUFTRk53T3dpUUZCQUNBTElBeUZRZ0dKUVFBcEE3aUpBWVVnRUlVM0E3aUpBUXZkQWdVQmZ3RitBWDhCZmdKL0l3QkJ3QUJySWdBa0FBSkFRUUFwQTlDSkFVSUFVZzBBUVFCQkFDa0R3SWtCSWdGQkFDZ0M0SW9CSWdLc2ZDSUROd1BBaVFGQkFFRUFLUVBJaVFFZ0F5QUJWSzE4TndQSWlRRUNRRUVBTFFEb2lnRkZEUUJCQUVKL053UFlpUUVMUVFCQ2Z6Y0QwSWtCQWtBZ0FrSC9BRW9OQUVFQUlRUURRQ0FDSUFScVFlQ0pBV3BCQURvQUFDQUVRUUZxSWdSQmdBRkJBQ2dDNElvQklnSnJTQTBBQ3d0QjRJa0JFQUlnQUVFQUtRT0FpUUUzQXdBZ0FFRUFLUU9JaVFFM0F3Z2dBRUVBS1FPUWlRRTNBeEFnQUVFQUtRT1lpUUUzQXhnZ0FFRUFLUU9naVFFM0F5QWdBRUVBS1FPb2lRRTNBeWdnQUVFQUtRT3dpUUUzQXpBZ0FFRUFLUU80aVFFM0F6aEJBQ2dDNUlvQklnVkJBVWdOQUVFQUlRUkJBQ0VDQTBBZ0JFR0FDV29nQUNBRWFpMEFBRG9BQUNBRVFRRnFJUVFnQlNBQ1FRRnFJZ0pCL3dGeFNnMEFDd3NnQUVIQUFHb2tBQXY5QXdNQmZ3RitBWDhqQUVHQUFXc2lBaVFBUVFCQmdRSTdBZktLQVVFQUlBRTZBUEdLQVVFQUlBQTZBUENLQVVHUWZpRUFBMEFnQUVHQWl3RnFRZ0EzQUFBZ0FFSDRpZ0ZxUWdBM0FBQWdBRUh3aWdGcVFnQTNBQUFnQUVFWWFpSUFEUUFMUVFBaEFFRUFRUUFwQS9DS0FTSURRb2lTODUzL3pQbUU2Z0NGTndPQWlRRkJBRUVBS1FQNGlnRkN1ODZxcHRqUTY3TzdmNFUzQTRpSkFVRUFRUUFwQTRDTEFVS3I4TlAwcis2OHR6eUZOd09RaVFGQkFFRUFLUU9JaXdGQzhlMzArS1duL2FlbGY0VTNBNWlKQVVFQVFRQXBBNUNMQVVMUmhacnYrcytVaDlFQWhUY0RvSWtCUVFCQkFDa0RtSXNCUXAvWStkbkNrZHFDbTMrRk53T29pUUZCQUVFQUtRT2dpd0ZDNi9xRzJyKzE5c0VmaFRjRHNJa0JRUUJCQUNrRHFJc0JRdm5DK0p1Um83UHcyd0NGTndPNGlRRkJBQ0FEcDBIL0FYRTJBdVNLQVFKQUlBRkJBVWdOQUNBQ1FnQTNBM2dnQWtJQU53TndJQUpDQURjRGFDQUNRZ0EzQTJBZ0FrSUFOd05ZSUFKQ0FEY0RVQ0FDUWdBM0EwZ2dBa0lBTndOQUlBSkNBRGNET0NBQ1FnQTNBekFnQWtJQU53TW9JQUpDQURjRElDQUNRZ0EzQXhnZ0FrSUFOd01RSUFKQ0FEY0RDQ0FDUWdBM0F3QkJBQ0VFQTBBZ0FpQUFhaUFBUVlBSmFpMEFBRG9BQUNBQVFRRnFJUUFnQkVFQmFpSUVRZjhCY1NBQlNBMEFDeUFDUVlBQkVBRUxJQUpCZ0FGcUpBQUxFZ0FnQUVFRGRrSC9QM0VnQUVFUWRoQUVDd2tBUVlBSklBQVFBUXNHQUVHQWlRRUxHd0FnQVVFRGRrSC9QM0VnQVVFUWRoQUVRWUFKSUFBUUFSQURDd3NMQVFCQmdBZ0xCUEFBQUFBPVwiO1xudmFyIGhhc2gkaiA9IFwiNjU2ZTBmNjZcIjtcbnZhciB3YXNtSnNvbiRqID0ge1xuXHRuYW1lOiBuYW1lJGosXG5cdGRhdGE6IGRhdGEkaixcblx0aGFzaDogaGFzaCRqXG59O1xuXG5jb25zdCBtdXRleCRrID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGsgPSBudWxsO1xuZnVuY3Rpb24gdmFsaWRhdGVCaXRzJDQoYml0cykge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihiaXRzKSB8fCBiaXRzIDwgOCB8fCBiaXRzID4gNTEyIHx8IGJpdHMgJSA4ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgdmFyaWFudCEgVmFsaWQgdmFsdWVzOiA4LCAxNiwgLi4uLCA1MTInKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRJbml0UGFyYW0kMShvdXRwdXRCaXRzLCBrZXlCaXRzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICByZXR1cm4gb3V0cHV0Qml0cyB8IChrZXlCaXRzIDw8IDE2KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBCTEFLRTJiIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMsIHdoaWNoIGhhcyB0byBiZSBhIG51bWJlclxuICogICAgICAgICAgICAgZGl2aXNpYmxlIGJ5IDgsIGJldHdlZW4gOCBhbmQgNTEyLiBEZWZhdWx0cyB0byA1MTIuXG4gKiBAcGFyYW0ga2V5IE9wdGlvbmFsIGtleSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSkuIE1heGltdW0gbGVuZ3RoIGlzIDY0IGJ5dGVzLlxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBibGFrZTJiKGRhdGEsIGJpdHMgPSA1MTIsIGtleSA9IG51bGwpIHtcbiAgICBpZiAodmFsaWRhdGVCaXRzJDQoYml0cykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlQml0cyQ0KGJpdHMpKTtcbiAgICB9XG4gICAgbGV0IGtleUJ1ZmZlciA9IG51bGw7XG4gICAgbGV0IGluaXRQYXJhbSA9IGJpdHM7XG4gICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICBrZXlCdWZmZXIgPSBnZXRVSW50OEJ1ZmZlcihrZXkpO1xuICAgICAgICBpZiAoa2V5QnVmZmVyLmxlbmd0aCA+IDY0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdNYXgga2V5IGxlbmd0aCBpcyA2NCBieXRlcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0UGFyYW0gPSBnZXRJbml0UGFyYW0kMShiaXRzLCBrZXlCdWZmZXIubGVuZ3RoKTtcbiAgICB9XG4gICAgY29uc3QgaGFzaExlbmd0aCA9IGJpdHMgLyA4O1xuICAgIGlmICh3YXNtQ2FjaGUkayA9PT0gbnVsbCB8fCB3YXNtQ2FjaGUkay5oYXNoTGVuZ3RoICE9PSBoYXNoTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkaywgd2FzbUpzb24kaiwgaGFzaExlbmd0aClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkayA9IHdhc207XG4gICAgICAgICAgICBpZiAoaW5pdFBhcmFtID4gNTEyKSB7XG4gICAgICAgICAgICAgICAgd2FzbUNhY2hlJGsud3JpdGVNZW1vcnkoa2V5QnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkay5jYWxjdWxhdGUoZGF0YSwgaW5pdFBhcmFtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmIChpbml0UGFyYW0gPiA1MTIpIHtcbiAgICAgICAgICAgIHdhc21DYWNoZSRrLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSRrLmNhbGN1bGF0ZShkYXRhLCBpbml0UGFyYW0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBCTEFLRTJiIGhhc2ggaW5zdGFuY2VcbiAqIEBwYXJhbSBiaXRzIE51bWJlciBvZiBvdXRwdXQgYml0cywgd2hpY2ggaGFzIHRvIGJlIGEgbnVtYmVyXG4gKiAgICAgICAgICAgICBkaXZpc2libGUgYnkgOCwgYmV0d2VlbiA4IGFuZCA1MTIuIERlZmF1bHRzIHRvIDUxMi5cbiAqIEBwYXJhbSBrZXkgT3B0aW9uYWwga2V5IChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KS4gTWF4aW11bSBsZW5ndGggaXMgNjQgYnl0ZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJMQUtFMmIoYml0cyA9IDUxMiwga2V5ID0gbnVsbCkge1xuICAgIGlmICh2YWxpZGF0ZUJpdHMkNChiaXRzKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVCaXRzJDQoYml0cykpO1xuICAgIH1cbiAgICBsZXQga2V5QnVmZmVyID0gbnVsbDtcbiAgICBsZXQgaW5pdFBhcmFtID0gYml0cztcbiAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGtleUJ1ZmZlciA9IGdldFVJbnQ4QnVmZmVyKGtleSk7XG4gICAgICAgIGlmIChrZXlCdWZmZXIubGVuZ3RoID4gNjQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ01heCBrZXkgbGVuZ3RoIGlzIDY0IGJ5dGVzJykpO1xuICAgICAgICB9XG4gICAgICAgIGluaXRQYXJhbSA9IGdldEluaXRQYXJhbSQxKGJpdHMsIGtleUJ1ZmZlci5sZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRTaXplID0gYml0cyAvIDg7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kaiwgb3V0cHV0U2l6ZSkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICBpZiAoaW5pdFBhcmFtID4gNTEyKSB7XG4gICAgICAgICAgICB3YXNtLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgd2FzbS5pbml0KGluaXRQYXJhbSk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6IGluaXRQYXJhbSA+IDUxMlxuICAgICAgICAgICAgICAgID8gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3YXNtLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIHdhc20uaW5pdChpbml0UGFyYW0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2FzbS5pbml0KGluaXRQYXJhbSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiAxMjgsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiBvdXRwdXRTaXplLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSRpID0gXCJhcmdvbjJcIjtcbnZhciBkYXRhJGkgPSBcIkFHRnpiUUVBQUFBQktRVmdBWDhCZjJBQUFYOWdFSDkvZjM5L2YzOS9mMzkvZjM5L2YzOEFZQVIvZjM5L0FHQUNmMzhBQXdZRkFBRUNBd1FGQmdFQkFvQ0FBZ1lJQVg4QlFaQ29CQXNIUVFRR2JXVnRiM0o1QWdBU1NHRnphRjlUWlhSTlpXMXZjbmxUYVhwbEFBQU9TR0Z6YUY5SFpYUkNkV1ptWlhJQUFRNUlZWE5vWDBOaGJHTjFiR0YwWlFBRUN2a3lCVmdCQW45QkFDRUJBa0JCQUNnQ2lBZ2lBaUFBUmcwQUFrQWdBQ0FDYXlJQVFSQjJJQUJCZ0lCOGNTQUFTV29pQUVBQVFYOUhEUUJCL3dIQUR3dEJBQ0VCUVFCQkFDa0RpQWdnQUVFUWRLMThOd09JQ0FzZ0FjQUxjQUVDZndKQVFRQW9Bb0FJSWdBTkFFRUFQd0JCRUhRaUFEWUNnQWhCQUNnQ2lBZ2lBVUdBZ0NCR0RRQUNRRUdBZ0NBZ0FXc2lBRUVRZGlBQVFZQ0FmSEVnQUVscUlnQkFBRUYvUncwQVFRQVBDMEVBUVFBcEE0Z0lJQUJCRUhTdGZEY0RpQWhCQUNnQ2dBZ2hBQXNnQUF2Y0RnRUNmaUFBSUFRcEF3QWlFQ0FBS1FNQUloRjhJQkZDQVlaQy92Ly8veCtESUJCQy8vLy8vdytEZm53aUVEY0RBQ0FNSUJBZ0RDa0RBSVZDSUlraUVEY0RBQ0FJSUJBZ0NDa0RBQ0lSZkNBUlFnR0dRdjcvLy84Zmd5QVFRdi8vLy84UGczNThJaEEzQXdBZ0JDQVFJQVFwQXdDRlFpaUpJaEEzQXdBZ0FDQVFJQUFwQXdBaUVYd2dFRUwvLy8vL0Q0TWdFVUlCaGtMKy8vLy9INE4rZkNJUU53TUFJQXdnRUNBTUtRTUFoVUl3aVNJUU53TUFJQWdnRUNBSUtRTUFJaEY4SUJCQy8vLy8vdytESUJGQ0FZWkMvdi8vL3grRGZud2lFRGNEQUNBRUlCQWdCQ2tEQUlWQ0FZazNBd0FnQVNBRktRTUFJaEFnQVNrREFDSVJmQ0FSUWdHR1F2Ny8vLzhmZ3lBUVF2Ly8vLzhQZzM1OEloQTNBd0FnRFNBUUlBMHBBd0NGUWlDSkloQTNBd0FnQ1NBUUlBa3BBd0FpRVh3Z0VVSUJoa0wrLy8vL0g0TWdFRUwvLy8vL0Q0TitmQ0lRTndNQUlBVWdFQ0FGS1FNQWhVSW9pU0lRTndNQUlBRWdFQ0FCS1FNQUloRjhJQkJDLy8vLy93K0RJQkZDQVlaQy92Ly8veCtEZm53aUVEY0RBQ0FOSUJBZ0RTa0RBSVZDTUlraUVEY0RBQ0FKSUJBZ0NTa0RBQ0lSZkNBUVF2Ly8vLzhQZ3lBUlFnR0dRdjcvLy84ZmczNThJaEEzQXdBZ0JTQVFJQVVwQXdDRlFnR0pOd01BSUFJZ0Jpa0RBQ0lRSUFJcEF3QWlFWHdnRVVJQmhrTCsvLy8vSDRNZ0VFTC8vLy8vRDROK2ZDSVFOd01BSUE0Z0VDQU9LUU1BaFVJZ2lTSVFOd01BSUFvZ0VDQUtLUU1BSWhGOElCRkNBWVpDL3YvLy94K0RJQkJDLy8vLy93K0RmbndpRURjREFDQUdJQkFnQmlrREFJVkNLSWtpRURjREFDQUNJQkFnQWlrREFDSVJmQ0FRUXYvLy8vOFBneUFSUWdHR1F2Ny8vLzhmZzM1OEloQTNBd0FnRGlBUUlBNHBBd0NGUWpDSkloQTNBd0FnQ2lBUUlBb3BBd0FpRVh3Z0VFTC8vLy8vRDRNZ0VVSUJoa0wrLy8vL0g0TitmQ0lRTndNQUlBWWdFQ0FHS1FNQWhVSUJpVGNEQUNBRElBY3BBd0FpRUNBREtRTUFJaEY4SUJGQ0FZWkMvdi8vL3grRElCQkMvLy8vL3crRGZud2lFRGNEQUNBUElCQWdEeWtEQUlWQ0lJa2lFRGNEQUNBTElCQWdDeWtEQUNJUmZDQVJRZ0dHUXY3Ly8vOGZneUFRUXYvLy8vOFBnMzU4SWhBM0F3QWdCeUFRSUFjcEF3Q0ZRaWlKSWhBM0F3QWdBeUFRSUFNcEF3QWlFWHdnRUVMLy8vLy9ENE1nRVVJQmhrTCsvLy8vSDROK2ZDSVFOd01BSUE4Z0VDQVBLUU1BaFVJd2lTSVFOd01BSUFzZ0VDQUxLUU1BSWhGOElCQkMvLy8vL3crRElCRkNBWVpDL3YvLy94K0RmbndpRURjREFDQUhJQkFnQnlrREFJVkNBWWszQXdBZ0FDQUZLUU1BSWhBZ0FDa0RBQ0lSZkNBUlFnR0dRdjcvLy84Zmd5QVFRdi8vLy84UGczNThJaEEzQXdBZ0R5QVFJQThwQXdDRlFpQ0pJaEEzQXdBZ0NpQVFJQW9wQXdBaUVYd2dFVUlCaGtMKy8vLy9INE1nRUVMLy8vLy9ENE4rZkNJUU53TUFJQVVnRUNBRktRTUFoVUlvaVNJUU53TUFJQUFnRUNBQUtRTUFJaEY4SUJCQy8vLy8vdytESUJGQ0FZWkMvdi8vL3grRGZud2lFRGNEQUNBUElCQWdEeWtEQUlWQ01Ja2lFRGNEQUNBS0lCQWdDaWtEQUNJUmZDQVFRdi8vLy84UGd5QVJRZ0dHUXY3Ly8vOGZnMzU4SWhBM0F3QWdCU0FRSUFVcEF3Q0ZRZ0dKTndNQUlBRWdCaWtEQUNJUUlBRXBBd0FpRVh3Z0VVSUJoa0wrLy8vL0g0TWdFRUwvLy8vL0Q0TitmQ0lRTndNQUlBd2dFQ0FNS1FNQWhVSWdpU0lRTndNQUlBc2dFQ0FMS1FNQUloRjhJQkZDQVlaQy92Ly8veCtESUJCQy8vLy8vdytEZm53aUVEY0RBQ0FHSUJBZ0Jpa0RBSVZDS0lraUVEY0RBQ0FCSUJBZ0FTa0RBQ0lSZkNBUVF2Ly8vLzhQZ3lBUlFnR0dRdjcvLy84ZmczNThJaEEzQXdBZ0RDQVFJQXdwQXdDRlFqQ0pJaEEzQXdBZ0N5QVFJQXNwQXdBaUVYd2dFRUwvLy8vL0Q0TWdFVUlCaGtMKy8vLy9INE4rZkNJUU53TUFJQVlnRUNBR0tRTUFoVUlCaVRjREFDQUNJQWNwQXdBaUVDQUNLUU1BSWhGOElCRkNBWVpDL3YvLy94K0RJQkJDLy8vLy93K0RmbndpRURjREFDQU5JQkFnRFNrREFJVkNJSWtpRURjREFDQUlJQkFnQ0NrREFDSVJmQ0FSUWdHR1F2Ny8vLzhmZ3lBUVF2Ly8vLzhQZzM1OEloQTNBd0FnQnlBUUlBY3BBd0NGUWlpSkloQTNBd0FnQWlBUUlBSXBBd0FpRVh3Z0VFTC8vLy8vRDRNZ0VVSUJoa0wrLy8vL0g0TitmQ0lRTndNQUlBMGdFQ0FOS1FNQWhVSXdpU0lRTndNQUlBZ2dFQ0FJS1FNQUloRjhJQkJDLy8vLy93K0RJQkZDQVlaQy92Ly8veCtEZm53aUVEY0RBQ0FISUJBZ0J5a0RBSVZDQVlrM0F3QWdBeUFFS1FNQUloQWdBeWtEQUNJUmZDQVJRZ0dHUXY3Ly8vOGZneUFRUXYvLy8vOFBnMzU4SWhBM0F3QWdEaUFRSUE0cEF3Q0ZRaUNKSWhBM0F3QWdDU0FRSUFrcEF3QWlFWHdnRVVJQmhrTCsvLy8vSDRNZ0VFTC8vLy8vRDROK2ZDSVFOd01BSUFRZ0VDQUVLUU1BaFVJb2lTSVFOd01BSUFNZ0VDQURLUU1BSWhGOElCQkMvLy8vL3crRElCRkNBWVpDL3YvLy94K0RmbndpRURjREFDQU9JQkFnRGlrREFJVkNNSWtpRURjREFDQUpJQkFnQ1NrREFDSVJmQ0FRUXYvLy8vOFBneUFSUWdHR1F2Ny8vLzhmZzM1OEloQTNBd0FnQkNBUUlBUXBBd0NGUWdHSk53TUFDOThhQVFOL1FRQWhCRUVBSUFJcEF3QWdBU2tEQUlVM0E1QUlRUUFnQWlrRENDQUJLUU1JaFRjRG1BaEJBQ0FDS1FNUUlBRXBBeENGTndPZ0NFRUFJQUlwQXhnZ0FTa0RHSVUzQTZnSVFRQWdBaWtESUNBQktRTWdoVGNEc0FoQkFDQUNLUU1vSUFFcEF5aUZOd080Q0VFQUlBSXBBekFnQVNrRE1JVTNBOEFJUVFBZ0Fpa0RPQ0FCS1FNNGhUY0R5QWhCQUNBQ0tRTkFJQUVwQTBDRk53UFFDRUVBSUFJcEEwZ2dBU2tEU0lVM0E5Z0lRUUFnQWlrRFVDQUJLUU5RaFRjRDRBaEJBQ0FDS1FOWUlBRXBBMWlGTndQb0NFRUFJQUlwQTJBZ0FTa0RZSVUzQS9BSVFRQWdBaWtEYUNBQktRTm9oVGNEK0FoQkFDQUNLUU53SUFFcEEzQ0ZOd09BQ1VFQUlBSXBBM2dnQVNrRGVJVTNBNGdKUVFBZ0Fpa0RnQUVnQVNrRGdBR0ZOd09RQ1VFQUlBSXBBNGdCSUFFcEE0Z0JoVGNEbUFsQkFDQUNLUU9RQVNBQktRT1FBWVUzQTZBSlFRQWdBaWtEbUFFZ0FTa0RtQUdGTndPb0NVRUFJQUlwQTZBQklBRXBBNkFCaFRjRHNBbEJBQ0FDS1FPb0FTQUJLUU9vQVlVM0E3Z0pRUUFnQWlrRHNBRWdBU2tEc0FHRk53UEFDVUVBSUFJcEE3Z0JJQUVwQTdnQmhUY0R5QWxCQUNBQ0tRUEFBU0FCS1FQQUFZVTNBOUFKUVFBZ0Fpa0R5QUVnQVNrRHlBR0ZOd1BZQ1VFQUlBSXBBOUFCSUFFcEE5QUJoVGNENEFsQkFDQUNLUVBZQVNBQktRUFlBWVUzQStnSlFRQWdBaWtENEFFZ0FTa0Q0QUdGTndQd0NVRUFJQUlwQStnQklBRXBBK2dCaFRjRCtBbEJBQ0FDS1FQd0FTQUJLUVB3QVlVM0E0QUtRUUFnQWlrRCtBRWdBU2tEK0FHRk53T0lDa0VBSUFJcEE0QUNJQUVwQTRBQ2hUY0RrQXBCQUNBQ0tRT0lBaUFCS1FPSUFvVTNBNWdLUVFBZ0Fpa0RrQUlnQVNrRGtBS0ZOd09nQ2tFQUlBSXBBNWdDSUFFcEE1Z0NoVGNEcUFwQkFDQUNLUU9nQWlBQktRT2dBb1UzQTdBS1FRQWdBaWtEcUFJZ0FTa0RxQUtGTndPNENrRUFJQUlwQTdBQ0lBRXBBN0FDaFRjRHdBcEJBQ0FDS1FPNEFpQUJLUU80QW9VM0E4Z0tRUUFnQWlrRHdBSWdBU2tEd0FLRk53UFFDa0VBSUFJcEE4Z0NJQUVwQThnQ2hUY0QyQXBCQUNBQ0tRUFFBaUFCS1FQUUFvVTNBK0FLUVFBZ0Fpa0QyQUlnQVNrRDJBS0ZOd1BvQ2tFQUlBSXBBK0FDSUFFcEErQUNoVGNEOEFwQkFDQUNLUVBvQWlBQktRUG9Bb1UzQS9nS1FRQWdBaWtEOEFJZ0FTa0Q4QUtGTndPQUMwRUFJQUlwQS9nQ0lBRXBBL2dDaFRjRGlBdEJBQ0FDS1FPQUF5QUJLUU9BQTRVM0E1QUxRUUFnQWlrRGlBTWdBU2tEaUFPRk53T1lDMEVBSUFJcEE1QURJQUVwQTVBRGhUY0RvQXRCQUNBQ0tRT1lBeUFCS1FPWUE0VTNBNmdMUVFBZ0Fpa0RvQU1nQVNrRG9BT0ZOd093QzBFQUlBSXBBNmdESUFFcEE2Z0RoVGNEdUF0QkFDQUNLUU93QXlBQktRT3dBNFUzQThBTFFRQWdBaWtEdUFNZ0FTa0R1QU9GTndQSUMwRUFJQUlwQThBRElBRXBBOEFEaFRjRDBBdEJBQ0FDS1FQSUF5QUJLUVBJQTRVM0E5Z0xRUUFnQWlrRDBBTWdBU2tEMEFPRk53UGdDMEVBSUFJcEE5Z0RJQUVwQTlnRGhUY0Q2QXRCQUNBQ0tRUGdBeUFCS1FQZ0E0VTNBL0FMUVFBZ0Fpa0Q2QU1nQVNrRDZBT0ZOd1A0QzBFQUlBSXBBL0FESUFFcEEvQURoVGNEZ0F4QkFDQUNLUVA0QXlBQktRUDRBNFUzQTRnTVFRQWdBaWtEZ0FRZ0FTa0RnQVNGTndPUURFRUFJQUlwQTRnRUlBRXBBNGdFaFRjRG1BeEJBQ0FDS1FPUUJDQUJLUU9RQklVM0E2QU1RUUFnQWlrRG1BUWdBU2tEbUFTRk53T29ERUVBSUFJcEE2QUVJQUVwQTZBRWhUY0RzQXhCQUNBQ0tRT29CQ0FCS1FPb0JJVTNBN2dNUVFBZ0Fpa0RzQVFnQVNrRHNBU0ZOd1BBREVFQUlBSXBBN2dFSUFFcEE3Z0VoVGNEeUF4QkFDQUNLUVBBQkNBQktRUEFCSVUzQTlBTVFRQWdBaWtEeUFRZ0FTa0R5QVNGTndQWURFRUFJQUlwQTlBRUlBRXBBOUFFaFRjRDRBeEJBQ0FDS1FQWUJDQUJLUVBZQklVM0ErZ01RUUFnQWlrRDRBUWdBU2tENEFTRk53UHdERUVBSUFJcEErZ0VJQUVwQStnRWhUY0QrQXhCQUNBQ0tRUHdCQ0FCS1FQd0JJVTNBNEFOUVFBZ0Fpa0QrQVFnQVNrRCtBU0ZOd09JRFVFQUlBSXBBNEFGSUFFcEE0QUZoVGNEa0ExQkFDQUNLUU9JQlNBQktRT0lCWVUzQTVnTlFRQWdBaWtEa0FVZ0FTa0RrQVdGTndPZ0RVRUFJQUlwQTVnRklBRXBBNWdGaFRjRHFBMUJBQ0FDS1FPZ0JTQUJLUU9nQllVM0E3QU5RUUFnQWlrRHFBVWdBU2tEcUFXRk53TzREVUVBSUFJcEE3QUZJQUVwQTdBRmhUY0R3QTFCQUNBQ0tRTzRCU0FCS1FPNEJZVTNBOGdOUVFBZ0Fpa0R3QVVnQVNrRHdBV0ZOd1BRRFVFQUlBSXBBOGdGSUFFcEE4Z0ZoVGNEMkExQkFDQUNLUVBRQlNBQktRUFFCWVUzQStBTlFRQWdBaWtEMkFVZ0FTa0QyQVdGTndQb0RVRUFJQUlwQStBRklBRXBBK0FGaFRjRDhBMUJBQ0FDS1FQb0JTQUJLUVBvQllVM0EvZ05RUUFnQWlrRDhBVWdBU2tEOEFXRk53T0FEa0VBSUFJcEEvZ0ZJQUVwQS9nRmhUY0RpQTVCQUNBQ0tRT0FCaUFCS1FPQUJvVTNBNUFPUVFBZ0Fpa0RpQVlnQVNrRGlBYUZOd09ZRGtFQUlBSXBBNUFHSUFFcEE1QUdoVGNEb0E1QkFDQUNLUU9ZQmlBQktRT1lCb1UzQTZnT1FRQWdBaWtEb0FZZ0FTa0RvQWFGTndPd0RrRUFJQUlwQTZnR0lBRXBBNmdHaFRjRHVBNUJBQ0FDS1FPd0JpQUJLUU93Qm9VM0E4QU9RUUFnQWlrRHVBWWdBU2tEdUFhRk53UElEa0VBSUFJcEE4QUdJQUVwQThBR2hUY0QwQTVCQUNBQ0tRUElCaUFCS1FQSUJvVTNBOWdPUVFBZ0Fpa0QwQVlnQVNrRDBBYUZOd1BnRGtFQUlBSXBBOWdHSUFFcEE5Z0doVGNENkE1QkFDQUNLUVBnQmlBQktRUGdCb1UzQS9BT1FRQWdBaWtENkFZZ0FTa0Q2QWFGTndQNERrRUFJQUlwQS9BR0lBRXBBL0FHaFRjRGdBOUJBQ0FDS1FQNEJpQUJLUVA0Qm9VM0E0Z1BRUUFnQWlrRGdBY2dBU2tEZ0FlRk53T1FEMEVBSUFJcEE0Z0hJQUVwQTRnSGhUY0RtQTlCQUNBQ0tRT1FCeUFCS1FPUUI0VTNBNkFQUVFBZ0Fpa0RtQWNnQVNrRG1BZUZOd09vRDBFQUlBSXBBNkFISUFFcEE2QUhoVGNEc0E5QkFDQUNLUU9vQnlBQktRT29CNFUzQTdnUFFRQWdBaWtEc0FjZ0FTa0RzQWVGTndQQUQwRUFJQUlwQTdnSElBRXBBN2dIaFRjRHlBOUJBQ0FDS1FQQUJ5QUJLUVBBQjRVM0E5QVBRUUFnQWlrRHlBY2dBU2tEeUFlRk53UFlEMEVBSUFJcEE5QUhJQUVwQTlBSGhUY0Q0QTlCQUNBQ0tRUFlCeUFCS1FQWUI0VTNBK2dQUVFBZ0Fpa0Q0QWNnQVNrRDRBZUZOd1B3RDBFQUlBSXBBK2dISUFFcEErZ0hoVGNEK0E5QkFDQUNLUVB3QnlBQktRUHdCNFUzQTRBUVFRQWdBaWtEK0FjZ0FTa0QrQWVGTndPSUVFR1FDRUdZQ0VHZ0NFR29DRUd3Q0VHNENFSEFDRUhJQ0VIUUNFSFlDRUhnQ0VIb0NFSHdDRUg0Q0VHQUNVR0lDUkFDUVpBSlFaZ0pRYUFKUWFnSlFiQUpRYmdKUWNBSlFjZ0pRZEFKUWRnSlFlQUpRZWdKUWZBSlFmZ0pRWUFLUVlnS0VBSkJrQXBCbUFwQm9BcEJxQXBCc0FwQnVBcEJ3QXBCeUFwQjBBcEIyQXBCNEFwQjZBcEI4QXBCK0FwQmdBdEJpQXNRQWtHUUMwR1lDMEdnQzBHb0MwR3dDMEc0QzBIQUMwSElDMEhRQzBIWUMwSGdDMEhvQzBId0MwSDRDMEdBREVHSURCQUNRWkFNUVpnTVFhQU1RYWdNUWJBTVFiZ01RY0FNUWNnTVFkQU1RZGdNUWVBTVFlZ01RZkFNUWZnTVFZQU5RWWdORUFKQmtBMUJtQTFCb0ExQnFBMUJzQTFCdUExQndBMUJ5QTFCMEExQjJBMUI0QTFCNkExQjhBMUIrQTFCZ0E1QmlBNFFBa0dRRGtHWURrR2dEa0dvRGtHd0RrRzREa0hBRGtISURrSFFEa0hZRGtIZ0RrSG9Ea0h3RGtINERrR0FEMEdJRHhBQ1FaQVBRWmdQUWFBUFFhZ1BRYkFQUWJnUFFjQVBRY2dQUWRBUFFkZ1BRZUFQUWVnUFFmQVBRZmdQUVlBUVFZZ1FFQUpCa0FoQm1BaEJrQWxCbUFsQmtBcEJtQXBCa0F0Qm1BdEJrQXhCbUF4QmtBMUJtQTFCa0E1Qm1BNUJrQTlCbUE4UUFrR2dDRUdvQ0VHZ0NVR29DVUdnQ2tHb0NrR2dDMEdvQzBHZ0RFR29ERUdnRFVHb0RVR2dEa0dvRGtHZ0QwR29EeEFDUWJBSVFiZ0lRYkFKUWJnSlFiQUtRYmdLUWJBTFFiZ0xRYkFNUWJnTVFiQU5RYmdOUWJBT1FiZ09RYkFQUWJnUEVBSkJ3QWhCeUFoQndBbEJ5QWxCd0FwQnlBcEJ3QXRCeUF0QndBeEJ5QXhCd0ExQnlBMUJ3QTVCeUE1QndBOUJ5QThRQWtIUUNFSFlDRUhRQ1VIWUNVSFFDa0hZQ2tIUUMwSFlDMEhRREVIWURFSFFEVUhZRFVIUURrSFlEa0hRRDBIWUR4QUNRZUFJUWVnSVFlQUpRZWdKUWVBS1FlZ0tRZUFMUWVnTFFlQU1RZWdNUWVBTlFlZ05RZUFPUWVnT1FlQVBRZWdQRUFKQjhBaEIrQWhCOEFsQitBbEI4QXBCK0FwQjhBdEIrQXRCOEF4QitBeEI4QTFCK0ExQjhBNUIrQTVCOEE5QitBOFFBa0dBQ1VHSUNVR0FDa0dJQ2tHQUMwR0lDMEdBREVHSURFR0FEVUdJRFVHQURrR0lEa0dBRDBHSUQwR0FFRUdJRUJBQ0FrQUNRQ0FEUlEwQUEwQWdBQ0FFYWlJRElBSWdCR29pQlNrREFDQUJJQVJxSWdZcEF3Q0ZJQVJCa0FocUtRTUFoU0FES1FNQWhUY0RBQ0FEUVFocUlnTWdCVUVJYWlrREFDQUdRUWhxS1FNQWhTQUVRWmdJYWlrREFJVWdBeWtEQUlVM0F3QWdCRUVRYWlJRVFZQUlSdzBBREFJTEMwRUFJUVFEUUNBQUlBUnFJZ01nQWlBRWFpSUZLUU1BSUFFZ0JHb2lCaWtEQUlVZ0JFR1FDR29wQXdDRk53TUFJQU5CQ0dvZ0JVRUlhaWtEQUNBR1FRaHFLUU1BaFNBRVFaZ0lhaWtEQUlVM0F3QWdCRUVRYWlJRVFZQUlSdzBBQ3dzTDdRY01CWDhCZmdSL0FuNENmd0YrQTM4QmZnWi9BWDREZndGK0FrQkJBQ2dDZ0FnaUFpQUJRUXAwYWlJREtBSUlJQUZIRFFBZ0F5Z0NEQ0VFSUFNb0FnQWhCVUVBSUFNb0FoUWlCcTAzQTdnUVFRQWdCSzBpQnpjRHNCQkJBQ0FGSUFFZ0JVRUNkRzRpQ0d3aUNVRUNkSzAzQTZnUUFrQUNRQUpBQWtBZ0JFVU5BRUYvSVFvZ0JVVU5BU0FJUVFOc0lRc2dDRUVDZENJRXJTRU1JQVd0SVEwZ0JrRUNSaUVPSUFaQmYycEJBa2toRDBJQUlSQURRRUVBSUJBM0E1QVFJQTRnRUZBaUVYRWhFaUFRcHlFVFFnQWhGRUVBSVFFRFFFRUFJQlEzQTZBUUlBWkJBVVlnRWlBVVFnSlVjWEloRlNBUUlCU0VVQ0lESUE5eElSWkJmeUFCUVFGcVFRTnhJQWhzUVg5cUlCRWJJUmNnQVNBVGNpRVlJQUVnQ0d3aEdTQURRUUYwSVJwQ0FDRWJBMEJCQUVJQU53UEFFRUVBSUJzM0E1Z1FJQm9oQVFKQUlCWkZEUUJCQUVJQk53UEFFRUdRR0VHUUVFR1FJRUVBRUFOQmtCaEJrQmhCa0NCQkFCQURRUUloQVFzQ1FDQUJJQWhQRFFBZ0JDQWJweUljYkNBWmFpQUJhaUVEQTBBZ0EwRUFJQVJCQUNBVVVDSWRHeUFCRzJwQmYyb2hIZ0pBQWtBZ0ZRMEFRUUFvQW9BSUlnSWdIa0VLZENJZWFpRUtEQUVMQWtBZ0FVSC9BSEVpQWcwQVFRQkJBQ2tEd0JCQ0FYdzNBOEFRUVpBWVFaQVFRWkFnUVFBUUEwR1FHRUdRR0VHUUlFRUFFQU1MSUI1QkNuUWhIaUFDUVFOMFFaQVlhaUVLUVFBb0FvQUlJUUlMSUFJZ0EwRUtkR29nQWlBZWFpQUNJQW9wQXdBaUgwSWdpS2NnQlhBZ0hDQVlHeUllSUFSc0lBRWdBVUVBSUJzZ0hxMVJJaDRiSWdvZ0hSc2dHV29nQ2lBTGFpQVJHeUFCUlNBZWNtc2lIU0FYYXEwZ0gwTC8vLy8vRDRNaUh5QWZma0lnaUNBZHJYNUNJSWg5SUF5Q3AycEJDblJxUVFFUUF5QURRUUZxSVFNZ0NDQUJRUUZxSWdGSERRQUxDeUFiUWdGOEloc2dEVklOQUFzZ0ZFSUJmQ0lVcHlFQklCUkNCRklOQUFzZ0VFSUJmQ0lRSUFkU0RRQUxDeUFKUVF4MFFZQjRhaUVaUVFBb0FvQUlJUUlnQlVGL2FpSUtSUTBDREFFTFFRQkNBemNEb0JCQkFDQUVRWDlxclRjRGtCQkJnSGdoR1FzZ0FpQVphaUVkSUFoQkRIUWhDRUVBSVI0RFFDQUlJQjVCQVdvaUhteEJnSGhxSVFSQkFDRUJBMEFnSFNBQmFpSURJQU1wQXdBZ0FpQUVJQUZxYWlrREFJVTNBd0FnQTBFSWFpSURJQU1wQXdBZ0FpQUVJQUZCQ0hKcWFpa0RBSVUzQXdBZ0FVRUlhaUVESUFGQkVHb2hBU0FEUWZnSFNRMEFDeUFlSUFwSERRQUxDeUFDSUJscUlSMUJlQ0VCQTBBZ0FpQUJhaUlEUVFocUlCMGdBV29pQkVFSWFpa0RBRGNEQUNBRFFSQnFJQVJCRUdvcEF3QTNBd0FnQTBFWWFpQUVRUmhxS1FNQU53TUFJQU5CSUdvZ0JFRWdhaWtEQURjREFDQUJRU0JxSWdGQitBZEpEUUFMQ3dzPVwiO1xudmFyIGhhc2gkaSA9IFwiN2FiMTRjOTFcIjtcbnZhciB3YXNtSnNvbiRpID0ge1xuXHRuYW1lOiBuYW1lJGksXG5cdGRhdGE6IGRhdGEkaSxcblx0aGFzaDogaGFzaCRpXG59O1xuXG5mdW5jdGlvbiBlbmNvZGVSZXN1bHQoc2FsdCwgb3B0aW9ucywgcmVzKSB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IFtcbiAgICAgICAgYG09JHtvcHRpb25zLm1lbW9yeVNpemV9YCxcbiAgICAgICAgYHQ9JHtvcHRpb25zLml0ZXJhdGlvbnN9YCxcbiAgICAgICAgYHA9JHtvcHRpb25zLnBhcmFsbGVsaXNtfWAsXG4gICAgXS5qb2luKCcsJyk7XG4gICAgcmV0dXJuIGAkYXJnb24yJHtvcHRpb25zLmhhc2hUeXBlfSR2PTE5JCR7cGFyYW1ldGVyc30kJHtlbmNvZGVCYXNlNjQoc2FsdCwgZmFsc2UpfSQke2VuY29kZUJhc2U2NChyZXMsIGZhbHNlKX1gO1xufVxuY29uc3QgdWludDMyVmlldyA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoNCkpO1xuZnVuY3Rpb24gaW50MzJMRSh4KSB7XG4gICAgdWludDMyVmlldy5zZXRJbnQzMigwLCB4LCB0cnVlKTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodWludDMyVmlldy5idWZmZXIpO1xufVxuZnVuY3Rpb24gaGFzaEZ1bmMoYmxha2U1MTIsIGJ1ZiwgbGVuKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKGxlbiA8PSA2NCkge1xuICAgICAgICAgICAgY29uc3QgYmxha2UgPSB5aWVsZCBjcmVhdGVCTEFLRTJiKGxlbiAqIDgpO1xuICAgICAgICAgICAgYmxha2UudXBkYXRlKGludDMyTEUobGVuKSk7XG4gICAgICAgICAgICBibGFrZS51cGRhdGUoYnVmKTtcbiAgICAgICAgICAgIHJldHVybiBibGFrZS5kaWdlc3QoJ2JpbmFyeScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBNYXRoLmNlaWwobGVuIC8gMzIpIC0gMjtcbiAgICAgICAgY29uc3QgcmV0ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICAgICAgYmxha2U1MTIuaW5pdCgpO1xuICAgICAgICBibGFrZTUxMi51cGRhdGUoaW50MzJMRShsZW4pKTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKGJ1Zik7XG4gICAgICAgIGxldCB2cCA9IGJsYWtlNTEyLmRpZ2VzdCgnYmluYXJ5Jyk7XG4gICAgICAgIHJldC5zZXQodnAuc3ViYXJyYXkoMCwgMzIpLCAwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByOyBpKyspIHtcbiAgICAgICAgICAgIGJsYWtlNTEyLmluaXQoKTtcbiAgICAgICAgICAgIGJsYWtlNTEyLnVwZGF0ZSh2cCk7XG4gICAgICAgICAgICB2cCA9IGJsYWtlNTEyLmRpZ2VzdCgnYmluYXJ5Jyk7XG4gICAgICAgICAgICByZXQuc2V0KHZwLnN1YmFycmF5KDAsIDMyKSwgaSAqIDMyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJ0aWFsQnl0ZXNOZWVkZWQgPSBsZW4gLSAzMiAqIHI7XG4gICAgICAgIGxldCBibGFrZVNtYWxsO1xuICAgICAgICBpZiAocGFydGlhbEJ5dGVzTmVlZGVkID09PSA2NCkge1xuICAgICAgICAgICAgYmxha2VTbWFsbCA9IGJsYWtlNTEyO1xuICAgICAgICAgICAgYmxha2VTbWFsbC5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBibGFrZVNtYWxsID0geWllbGQgY3JlYXRlQkxBS0UyYihwYXJ0aWFsQnl0ZXNOZWVkZWQgKiA4KTtcbiAgICAgICAgfVxuICAgICAgICBibGFrZVNtYWxsLnVwZGF0ZSh2cCk7XG4gICAgICAgIHZwID0gYmxha2VTbWFsbC5kaWdlc3QoJ2JpbmFyeScpO1xuICAgICAgICByZXQuc2V0KHZwLnN1YmFycmF5KDAsIHBhcnRpYWxCeXRlc05lZWRlZCksIHIgKiAzMik7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRIYXNoVHlwZSh0eXBlKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2UgJ2knOlxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICB9XG59XG5mdW5jdGlvbiBhcmdvbjJJbnRlcm5hbChvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyYWxsZWxpc20sIGl0ZXJhdGlvbnMsIGhhc2hMZW5ndGggfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkID0gZ2V0VUludDhCdWZmZXIob3B0aW9ucy5wYXNzd29yZCk7XG4gICAgICAgIGNvbnN0IHNhbHQgPSBnZXRVSW50OEJ1ZmZlcihvcHRpb25zLnNhbHQpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gMHgxMztcbiAgICAgICAgY29uc3QgaGFzaFR5cGUgPSBnZXRIYXNoVHlwZShvcHRpb25zLmhhc2hUeXBlKTtcbiAgICAgICAgY29uc3QgeyBtZW1vcnlTaXplIH0gPSBvcHRpb25zOyAvLyBpbiBLQlxuICAgICAgICBjb25zdCBzZWNyZXQgPSBnZXRVSW50OEJ1ZmZlcigoX2EgPSBvcHRpb25zLnNlY3JldCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJycpO1xuICAgICAgICBjb25zdCBbYXJnb24ySW50ZXJmYWNlLCBibGFrZTUxMl0gPSB5aWVsZCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJGksIDEwMjQpLFxuICAgICAgICAgICAgY3JlYXRlQkxBS0UyYig1MTIpLFxuICAgICAgICBdKTtcbiAgICAgICAgLy8gbGFzdCBibG9jayBpcyBmb3Igc3RvcmluZyB0aGUgaW5pdCB2ZWN0b3JcbiAgICAgICAgYXJnb24ySW50ZXJmYWNlLnNldE1lbW9yeVNpemUobWVtb3J5U2l6ZSAqIDEwMjQgKyAxMDI0KTtcbiAgICAgICAgY29uc3QgaW5pdFZlY3RvciA9IG5ldyBVaW50OEFycmF5KDI0KTtcbiAgICAgICAgY29uc3QgaW5pdFZlY3RvclZpZXcgPSBuZXcgRGF0YVZpZXcoaW5pdFZlY3Rvci5idWZmZXIpO1xuICAgICAgICBpbml0VmVjdG9yVmlldy5zZXRJbnQzMigwLCBwYXJhbGxlbGlzbSwgdHJ1ZSk7XG4gICAgICAgIGluaXRWZWN0b3JWaWV3LnNldEludDMyKDQsIGhhc2hMZW5ndGgsIHRydWUpO1xuICAgICAgICBpbml0VmVjdG9yVmlldy5zZXRJbnQzMig4LCBtZW1vcnlTaXplLCB0cnVlKTtcbiAgICAgICAgaW5pdFZlY3RvclZpZXcuc2V0SW50MzIoMTIsIGl0ZXJhdGlvbnMsIHRydWUpO1xuICAgICAgICBpbml0VmVjdG9yVmlldy5zZXRJbnQzMigxNiwgdmVyc2lvbiwgdHJ1ZSk7XG4gICAgICAgIGluaXRWZWN0b3JWaWV3LnNldEludDMyKDIwLCBoYXNoVHlwZSwgdHJ1ZSk7XG4gICAgICAgIGFyZ29uMkludGVyZmFjZS53cml0ZU1lbW9yeShpbml0VmVjdG9yLCBtZW1vcnlTaXplICogMTAyNCk7XG4gICAgICAgIGJsYWtlNTEyLmluaXQoKTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKGluaXRWZWN0b3IpO1xuICAgICAgICBibGFrZTUxMi51cGRhdGUoaW50MzJMRShwYXNzd29yZC5sZW5ndGgpKTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKHBhc3N3b3JkKTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKGludDMyTEUoc2FsdC5sZW5ndGgpKTtcbiAgICAgICAgYmxha2U1MTIudXBkYXRlKHNhbHQpO1xuICAgICAgICBibGFrZTUxMi51cGRhdGUoaW50MzJMRShzZWNyZXQubGVuZ3RoKSk7XG4gICAgICAgIGJsYWtlNTEyLnVwZGF0ZShzZWNyZXQpO1xuICAgICAgICBibGFrZTUxMi51cGRhdGUoaW50MzJMRSgwKSk7IC8vIGFzc29jaWF0ZWREYXRhIGxlbmd0aCArIGFzc29jaWF0ZWREYXRhXG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gTWF0aC5mbG9vcihtZW1vcnlTaXplIC8gKHBhcmFsbGVsaXNtICogNCkpOyAvLyBsZW5ndGggb2YgZWFjaCBsYW5lXG4gICAgICAgIGNvbnN0IGxhbmVzID0gc2VnbWVudHMgKiA0O1xuICAgICAgICBjb25zdCBwYXJhbSA9IG5ldyBVaW50OEFycmF5KDcyKTtcbiAgICAgICAgY29uc3QgSDAgPSBibGFrZTUxMi5kaWdlc3QoJ2JpbmFyeScpO1xuICAgICAgICBwYXJhbS5zZXQoSDApO1xuICAgICAgICBmb3IgKGxldCBsYW5lID0gMDsgbGFuZSA8IHBhcmFsbGVsaXNtOyBsYW5lKyspIHtcbiAgICAgICAgICAgIHBhcmFtLnNldChpbnQzMkxFKDApLCA2NCk7XG4gICAgICAgICAgICBwYXJhbS5zZXQoaW50MzJMRShsYW5lKSwgNjgpO1xuICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gbGFuZSAqIGxhbmVzO1xuICAgICAgICAgICAgbGV0IGNodW5rID0geWllbGQgaGFzaEZ1bmMoYmxha2U1MTIsIHBhcmFtLCAxMDI0KTtcbiAgICAgICAgICAgIGFyZ29uMkludGVyZmFjZS53cml0ZU1lbW9yeShjaHVuaywgcG9zaXRpb24gKiAxMDI0KTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgICAgICBwYXJhbS5zZXQoaW50MzJMRSgxKSwgNjQpO1xuICAgICAgICAgICAgY2h1bmsgPSB5aWVsZCBoYXNoRnVuYyhibGFrZTUxMiwgcGFyYW0sIDEwMjQpO1xuICAgICAgICAgICAgYXJnb24ySW50ZXJmYWNlLndyaXRlTWVtb3J5KGNodW5rLCBwb3NpdGlvbiAqIDEwMjQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEMgPSBuZXcgVWludDhBcnJheSgxMDI0KTtcbiAgICAgICAgd3JpdGVIZXhUb1VJbnQ4KEMsIGFyZ29uMkludGVyZmFjZS5jYWxjdWxhdGUobmV3IFVpbnQ4QXJyYXkoW10pLCBtZW1vcnlTaXplKSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGhhc2hGdW5jKGJsYWtlNTEyLCBDLCBoYXNoTGVuZ3RoKTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0VHlwZSA9PT0gJ2hleCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2VzdENoYXJzID0gbmV3IFVpbnQ4QXJyYXkoaGFzaExlbmd0aCAqIDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdldERpZ2VzdEhleChkaWdlc3RDaGFycywgcmVzLCBoYXNoTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRUeXBlID09PSAnZW5jb2RlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoc2FsdCwgb3B0aW9ucywgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gYmluYXJ5IGZvcm1hdFxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xufVxuY29uc3QgdmFsaWRhdGVPcHRpb25zJDMgPSAob3B0aW9ucykgPT4ge1xuICAgIHZhciBfYTtcbiAgICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvcHRpb25zIHBhcmFtZXRlci4gSXQgcmVxdWlyZXMgYW4gb2JqZWN0LicpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXNzd29yZCBtdXN0IGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICBvcHRpb25zLnBhc3N3b3JkID0gZ2V0VUludDhCdWZmZXIob3B0aW9ucy5wYXNzd29yZCk7XG4gICAgaWYgKG9wdGlvbnMucGFzc3dvcmQubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3N3b3JkIG11c3QgYmUgc3BlY2lmaWVkJyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5zYWx0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2FsdCBtdXN0IGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICBvcHRpb25zLnNhbHQgPSBnZXRVSW50OEJ1ZmZlcihvcHRpb25zLnNhbHQpO1xuICAgIGlmIChvcHRpb25zLnNhbHQubGVuZ3RoIDwgOCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhbHQgc2hvdWxkIGJlIGF0IGxlYXN0IDggYnl0ZXMgbG9uZycpO1xuICAgIH1cbiAgICBvcHRpb25zLnNlY3JldCA9IGdldFVJbnQ4QnVmZmVyKChfYSA9IG9wdGlvbnMuc2VjcmV0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMuaXRlcmF0aW9ucykgfHwgb3B0aW9ucy5pdGVyYXRpb25zIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0ZXJhdGlvbnMgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLnBhcmFsbGVsaXNtKSB8fCBvcHRpb25zLnBhcmFsbGVsaXNtIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFsbGVsaXNtIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5oYXNoTGVuZ3RoKSB8fCBvcHRpb25zLmhhc2hMZW5ndGggPCA0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaCBsZW5ndGggc2hvdWxkIGJlIGF0IGxlYXN0IDQgYnl0ZXMuJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLm1lbW9yeVNpemUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWVtb3J5IHNpemUgc2hvdWxkIGJlIHNwZWNpZmllZC4nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubWVtb3J5U2l6ZSA8IDggKiBvcHRpb25zLnBhcmFsbGVsaXNtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWVtb3J5IHNpemUgc2hvdWxkIGJlIGF0IGxlYXN0IDggKiBwYXJhbGxlbGlzbS4nKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub3V0cHV0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wdGlvbnMub3V0cHV0VHlwZSA9ICdoZXgnO1xuICAgIH1cbiAgICBpZiAoIVsnaGV4JywgJ2JpbmFyeScsICdlbmNvZGVkJ10uaW5jbHVkZXMob3B0aW9ucy5vdXRwdXRUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3VwcG9ydGVkIG91dHB1dCB0eXBlICR7b3B0aW9ucy5vdXRwdXRUeXBlfS4gVmFsaWQgdmFsdWVzOiBbJ2hleCcsICdiaW5hcnknLCAnZW5jb2RlZCddYCk7XG4gICAgfVxufTtcbi8qKlxuICogQ2FsY3VsYXRlcyBoYXNoIHVzaW5nIHRoZSBhcmdvbjJpIHBhc3N3b3JkLWhhc2hpbmcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2hcbiAqL1xuZnVuY3Rpb24gYXJnb24yaShvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFsaWRhdGVPcHRpb25zJDMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBhcmdvbjJJbnRlcm5hbChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGhhc2hUeXBlOiAnaScgfSkpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIGhhc2ggdXNpbmcgdGhlIGFyZ29uMmlkIHBhc3N3b3JkLWhhc2hpbmcgZnVuY3Rpb25cbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2hcbiAqL1xuZnVuY3Rpb24gYXJnb24yaWQob3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhbGlkYXRlT3B0aW9ucyQzKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gYXJnb24ySW50ZXJuYWwoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBoYXNoVHlwZTogJ2lkJyB9KSk7XG4gICAgfSk7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgaGFzaCB1c2luZyB0aGUgYXJnb24yZCBwYXNzd29yZC1oYXNoaW5nIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoXG4gKi9cbmZ1bmN0aW9uIGFyZ29uMmQob3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhbGlkYXRlT3B0aW9ucyQzKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gYXJnb24ySW50ZXJuYWwoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBoYXNoVHlwZTogJ2QnIH0pKTtcbiAgICB9KTtcbn1cbmNvbnN0IGdldEhhc2hQYXJhbWV0ZXJzID0gKHBhc3N3b3JkLCBlbmNvZGVkLCBzZWNyZXQpID0+IHtcbiAgICBjb25zdCByZWdleCA9IC9eXFwkYXJnb24yKGlkfGl8ZClcXCR2PShbMC05XSspXFwkKCg/OlttdHBdPVswLTldKywpezJ9W210cF09WzAtOV0rKVxcJChbQS1aYS16MC05Ky9dKylcXCQoW0EtWmEtejAtOSsvXSspJC87XG4gICAgY29uc3QgbWF0Y2ggPSBlbmNvZGVkLm1hdGNoKHJlZ2V4KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoYXNoJyk7XG4gICAgfVxuICAgIGNvbnN0IFssIGhhc2hUeXBlLCB2ZXJzaW9uLCBwYXJhbWV0ZXJzLCBzYWx0LCBoYXNoXSA9IG1hdGNoO1xuICAgIGlmICh2ZXJzaW9uICE9PSAnMTknKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdmVyc2lvbjogJHt2ZXJzaW9ufWApO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0ge307XG4gICAgY29uc3QgcGFyYW1NYXAgPSB7IG06ICdtZW1vcnlTaXplJywgcDogJ3BhcmFsbGVsaXNtJywgdDogJ2l0ZXJhdGlvbnMnIH07XG4gICAgcGFyYW1ldGVycy5zcGxpdCgnLCcpLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgY29uc3QgW24sIHZdID0geC5zcGxpdCgnPScpO1xuICAgICAgICBwYXJzZWRQYXJhbWV0ZXJzW3BhcmFtTWFwW25dXSA9IHBhcnNlSW50KHYsIDEwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJzZWRQYXJhbWV0ZXJzKSwgeyBwYXNzd29yZCxcbiAgICAgICAgc2VjcmV0LCBoYXNoVHlwZTogaGFzaFR5cGUsIHNhbHQ6IGRlY29kZUJhc2U2NChzYWx0KSwgaGFzaExlbmd0aDogZ2V0RGVjb2RlQmFzZTY0TGVuZ3RoKGhhc2gpLCBvdXRwdXRUeXBlOiAnZW5jb2RlZCcgfSk7XG59O1xuY29uc3QgdmFsaWRhdGVWZXJpZnlPcHRpb25zJDEgPSAob3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9wdGlvbnMgcGFyYW1ldGVyLiBJdCByZXF1aXJlcyBhbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmhhc2ggPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb3B0aW9ucy5oYXNoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhc2ggc2hvdWxkIGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbn07XG4vKipcbiAqIFZlcmlmaWVzIHBhc3N3b3JkIHVzaW5nIHRoZSBhcmdvbjIgcGFzc3dvcmQtaGFzaGluZyBmdW5jdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZW5jb2RlZCBoYXNoIG1hdGNoZXMgdGhlIHBhc3N3b3JkXG4gKi9cbmZ1bmN0aW9uIGFyZ29uMlZlcmlmeShvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFsaWRhdGVWZXJpZnlPcHRpb25zJDEob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGdldEhhc2hQYXJhbWV0ZXJzKG9wdGlvbnMucGFzc3dvcmQsIG9wdGlvbnMuaGFzaCwgb3B0aW9ucy5zZWNyZXQpO1xuICAgICAgICB2YWxpZGF0ZU9wdGlvbnMkMyhwYXJhbXMpO1xuICAgICAgICBjb25zdCBoYXNoU3RhcnQgPSBvcHRpb25zLmhhc2gubGFzdEluZGV4T2YoJyQnKSArIDE7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIGFyZ29uMkludGVybmFsKHBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQuc3Vic3RyaW5nKGhhc2hTdGFydCkgPT09IG9wdGlvbnMuaGFzaC5zdWJzdHJpbmcoaGFzaFN0YXJ0KTtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkaCA9IFwiYmxha2Uyc1wiO1xudmFyIGRhdGEkaCA9IFwiQUdGemJRRUFBQUFCRVFSZ0FBRi9ZQUovZndCZ0FYOEFZQUFBQXdrSUFBRUNBd0lDQUFFRkJBRUJBZ0lHRGdKL0FVR2dpZ1VMZndCQmdBZ0xCM0FJQm0xbGJXOXllUUlBRGtoaGMyaGZSMlYwUW5WbVptVnlBQUFLU0dGemFGOUdhVzVoYkFBRENVaGhjMmhmU1c1cGRBQUVDMGhoYzJoZlZYQmtZWFJsQUFVTlNHRnphRjlIWlhSVGRHRjBaUUFHRGtoaGMyaGZRMkZzWTNWc1lYUmxBQWNLVTFSQlZFVmZVMGxhUlFNQkNyMHlDQVVBUVlBSkM2VUZBUVovQWtBZ0FVRUJTQTBBQWtBQ1FBSkFRY0FBUVFBb0F2Q0pBU0lDYXlJRElBRklEUUFnQVNFRERBRUxRUUJCQURZQzhJa0JBa0FnQWtIQUFFWU5BQ0FDUWJDSkFXb2hCQUpBQWtBZ0EwRUhjU0lGRFFBZ0FDRUdJQU1oQnd3QkN5QUZJUWNnQUNFR0EwQWdCQ0FHTFFBQU9nQUFJQVJCQVdvaEJDQUdRUUZxSVFZZ0IwRi9haUlIRFFBTFFjQUFJQUlnQldwcklRY0xJQUpCUjJwQkIwa05BQU5BSUFRZ0JpMEFBRG9BQUNBRUlBWXRBQUU2QUFFZ0JDQUdMUUFDT2dBQ0lBUWdCaTBBQXpvQUF5QUVJQVl0QUFRNkFBUWdCQ0FHTFFBRk9nQUZJQVFnQmkwQUJqb0FCaUFFSUFZdEFBYzZBQWNnQkVFSWFpRUVJQVpCQ0dvaEJpQUhRWGhxSWdjTkFBc0xRUUFoQkVFQVFRQW9BcUNKQVNJR1FjQUFhallDb0lrQlFRQkJBQ2dDcElrQklBWkJ2MzlMYWpZQ3BJa0JRYkNKQVJBQ0lBQWdBMm9oQUFKQUlBRWdBMnNpQTBIQkFFZ05BQ0FDSUFGcUlRUURRRUVBUVFBb0FxQ0pBU0lHUWNBQWFqWUNvSWtCUVFCQkFDZ0NwSWtCSUFaQnYzOUxhallDcElrQklBQVFBaUFBUWNBQWFpRUFJQVJCUUdvaUJFR0FBVXNOQUFzZ0JFRkFhaUVEUVFBb0F2Q0pBU0VDREFFTFFRQW9BdkNKQVNFQ0lBTkZEUUVMSUFOQmYyb2hBU0FDUWJDSkFXb2hCQUpBQWtBZ0EwRUhjU0lHRFFBZ0F5RUhEQUVMSUFOQmVIRWhCd05BSUFRZ0FDMEFBRG9BQUNBRVFRRnFJUVFnQUVFQmFpRUFJQVpCZjJvaUJnMEFDd3NDUUNBQlFRZEpEUUFEUUNBRUlBQXRBQUE2QUFBZ0JDQUFMUUFCT2dBQklBUWdBQzBBQWpvQUFpQUVJQUF0QUFNNkFBTWdCQ0FBTFFBRU9nQUVJQVFnQUMwQUJUb0FCU0FFSUFBdEFBWTZBQVlnQkNBQUxRQUhPZ0FISUFSQkNHb2hCQ0FBUVFocUlRQWdCMEY0YWlJSERRQUxDMEVBS0FMd2lRRWhBaUFESVFRTFFRQWdBaUFFYWpZQzhJa0JDd3VYSndvQmZnRi9BbjRDZndGK0IzOERmZ1ovQVg0U2YwRUFRUUFwQTVpSkFTSUJweUlDUVFBcEE0aUpBU0lEcDJvZ0FDa0RFQ0lFcHlJRmFpSUdRUUFwQTZpSkFVS3JzNC84a2FPejhOc0FoU0lIcDNOQkVIY2lDRUh5NXJ2akEyb2lDU0FDYzBFVWR5SUtJQVpxSUFSQ0lJaW5JZ0pxSWdzZ0NITkJHSGNpRENBSmFpSU5JQXB6UVJsM0lnNUJBQ2tEa0lrQklnUkNJSWluSWdoQkFDa0RnSWtCSWc5Q0lJaW5haUFBS1FNSUloQ25JZ1pxSWdsQkFDa0RvSWtCUXYra3VZakZrZHFDbTMrRkloRkNJSWluYzBFUWR5SVNRWVhkbnR0N2FpSVRJQWh6UVJSM0loUWdDV29nRUVJZ2lLY2lDR29pRldvZ0FDa0RLQ0lRcHlJSmFpSVdJQVNuSWhjZ0Q2ZHFJQUFwQXdBaUdLY2lDbW9pR1NBUnAzTkJFSGNpR2tIbnpLZlFCbW9pR3lBWGMwRVVkeUljSUJscUlCaENJSWluSWhkcUloMGdHbk5CR0hjaUhuTkJFSGNpSHlBQlFpQ0lweUlhSUFOQ0lJaW5haUFBS1FNWUlnR25JaGxxSWlBZ0IwSWdpS2R6UVJCM0lpRkJ1dXEvcW5wcUlpSWdHbk5CRkhjaUl5QWdhaUFCUWlDSXB5SWFhaUlnSUNGelFSaDNJaUVnSW1vaUltb2lKQ0FPYzBFVWR5SWxJQlpxSUJCQ0lJaW5JZzVxSWhZZ0gzTkJHSGNpSHlBa2FpSWtJQlVnRW5OQkdIY2lGU0FUYWlJbUlCUnpRUmwzSWhNZ0hXb2dBQ2tESUNJQnB5SVNhaUlVSUNGelFSQjNJaDBnRFdvaUlTQVRjMEVVZHlJbklCUnFJQUZDSUlpbklnMXFJaFFnSFhOQkdIY2lIU0FpSUNOelFSbDNJaE1nQzJvZ0FDa0RNQ0lCcHlJTGFpSWlJQlZ6UVJCM0loVWdIaUFiYWlJYmFpSWVJQk56UVJSM0lpTWdJbW9nQVVJZ2lLY2lFMm9pSWlBVmMwRVlkeUlWSUI1cUloNGdJM05CR1hjaUl5QWdJQnNnSEhOQkdYY2lHMm9nQUNrRE9DSUJweUlBYWlJY0lBeHpRUkIzSWlBZ0ptb2lKaUFiYzBFVWR5SWJJQnhxSUFGQ0lJaW5JZ3hxSWh4cUlCTnFJaWh6UVJCM0lpbHFJaW9nSTNOQkZIY2lJeUFvYWlBWmFpSW9JQjRnSHlBY0lDQnpRUmgzSWh3Z0ptb2lJQ0FiYzBFWmR5SWJJQlJxSUFCcUloUnpRUkIzSWg5cUloNGdHM05CRkhjaUd5QVVhaUFKYWlJVUlCOXpRUmgzSWg4Z0htb2lIaUFiYzBFWmR5SWJhaUFDYWlJbUlCMGdJV29pSFNBY0lDUWdKWE5CR1hjaUlTQWlhaUFOYWlJaWMwRVFkeUljYWlJa0lDRnpRUlIzSWlFZ0ltb2dER29pSWlBY2MwRVlkeUljYzBFUWR5SWxJQ0FnRlNBZElDZHpRUmwzSWgwZ0Ztb2dCV29pRm5OQkVIY2lGV29pSUNBZGMwRVVkeUlkSUJacUlCSnFJaFlnRlhOQkdIY2lGU0FnYWlJZ2FpSW5JQnR6UVJSM0loc2dKbW9nQ0dvaUppQWxjMEVZZHlJbElDZHFJaWNnS0NBcGMwRVlkeUlvSUNwcUlpa2dJM05CR1hjaUl5QWlhaUFPYWlJaUlCVnpRUkIzSWhVZ0htb2lIaUFqYzBFVWR5SWpJQ0pxSUJwcUlpSWdGWE5CR0hjaUZTQWdJQjF6UVJsM0loMGdGR29nRjJvaUZDQW9jMEVRZHlJZ0lCd2dKR29pSEdvaUpDQWRjMEVVZHlJZElCUnFJQXRxSWhRZ0lITkJHSGNpSUNBa2FpSWtJQjF6UVJsM0loMGdIQ0FoYzBFWmR5SWNJQlpxSUFwcUloWWdIM05CRUhjaUh5QXBhaUloSUJ4elFSUjNJaHdnRm1vZ0Jtb2lGbW9nQzJvaUtITkJFSGNpS1dvaUtpQWRjMEVVZHlJZElDaHFJQXBxSWlnZ0tYTkJHSGNpS1NBcWFpSXFJQjF6UVJsM0loMGdGU0FlYWlJVklCWWdIM05CR0hjaUZpQW5JQnR6UVJsM0loc2dGR29nRG1vaUZITkJFSGNpSG1vaUh5QWJjMEVVZHlJYklCUnFJQkpxSWhScUlBbHFJaWNnRmlBaGFpSVdJQ0FnRlNBamMwRVpkeUlWSUNacUlBeHFJaUZ6UVJCM0lpQnFJaU1nRlhOQkZIY2lGU0FoYWlBVGFpSWhJQ0J6UVJoM0lpQnpRUkIzSWlZZ0pDQWxJQllnSEhOQkdYY2lGaUFpYWlBQ2FpSWNjMEVRZHlJaWFpSWtJQlp6UVJSM0loWWdIR29nQm1vaUhDQWljMEVZZHlJaUlDUnFJaVJxSWlVZ0hYTkJGSGNpSFNBbmFpQUFhaUluSUNaelFSaDNJaVlnSldvaUpTQWhJQlFnSG5OQkdIY2lGQ0FmYWlJZUlCdHpRUmwzSWh0cUlBMXFJaDhnSW5OQkVIY2lJU0FxYWlJaUlCdHpRUlIzSWhzZ0gyb2dCV29pSHlBaGMwRVlkeUloSUNRZ0ZuTkJHWGNpRmlBb2FpQUlhaUlrSUJSelFSQjNJaFFnSUNBamFpSWdhaUlqSUJaelFSUjNJaFlnSkdvZ0dXb2lKQ0FVYzBFWWR5SVVJQ05xSWlNZ0ZuTkJHWGNpRmlBZ0lCVnpRUmwzSWhVZ0hHb2dHbW9pSENBcGMwRVFkeUlnSUI1cUloNGdGWE5CRkhjaUZTQWNhaUFYYWlJY2FpQVRhaUlvYzBFUWR5SXBhaUlxSUJaelFSUjNJaFlnS0dvZ0Myb2lLQ0FwYzBFWWR5SXBJQ3BxSWlvZ0ZuTkJHWGNpRmlBaElDSnFJaUVnSENBZ2MwRVlkeUljSUNVZ0hYTkJHWGNpSFNBa2FpQUlhaUlnYzBFUWR5SWlhaUlrSUIxelFSUjNJaDBnSUdvZ0Yyb2lJR29nQW1vaUpTQWNJQjVxSWh3Z0ZDQWhJQnR6UVJsM0loc2dKMm9nR21vaUhuTkJFSGNpRkdvaUlTQWJjMEVVZHlJYklCNXFJQTFxSWg0Z0ZITkJHSGNpRkhOQkVIY2lKeUFqSUNZZ0hDQVZjMEVaZHlJVklCOXFJQTVxSWh4elFSQjNJaDlxSWlNZ0ZYTkJGSGNpRlNBY2FpQUFhaUljSUI5elFSaDNJaDhnSTJvaUkyb2lKaUFXYzBFVWR5SVdJQ1ZxSUFscUlpVWdKM05CR0hjaUp5QW1haUltSUNBZ0luTkJHSGNpSUNBa2FpSWlJQjF6UVJsM0loMGdIbW9nQm1vaUhpQWZjMEVRZHlJZklDcHFJaVFnSFhOQkZIY2lIU0FlYWlBWmFpSWVJQjl6UVJoM0loOGdJeUFWYzBFWmR5SVZJQ2hxSUFWcUlpTWdJSE5CRUhjaUlDQVVJQ0ZxSWhScUlpRWdGWE5CRkhjaUZTQWphaUFLYWlJaklDQnpRUmgzSWlBZ0lXb2lJU0FWYzBFWmR5SVZJQndnRkNBYmMwRVpkeUlVYWlBTWFpSWJJQ2x6UVJCM0lod2dJbW9pSWlBVWMwRVVkeUlVSUJ0cUlCSnFJaHRxSUFscUlpaHpRUkIzSWlscUlpb2dGWE5CRkhjaUZTQW9haUFNYWlJb0lDRWdKeUFiSUJ4elFSaDNJaHNnSW1vaUhDQVVjMEVaZHlJVUlCNXFJQTFxSWg1elFSQjNJaUpxSWlFZ0ZITkJGSGNpRkNBZWFpQUthaUllSUNKelFSaDNJaUlnSVdvaUlTQVVjMEVaZHlJVWFpQUlhaUluSUI4Z0pHb2lIeUFiSUNZZ0ZuTkJHWGNpRmlBamFpQUdhaUlqYzBFUWR5SWJhaUlrSUJaelFSUjNJaFlnSTJvZ0JXb2lJeUFiYzBFWWR5SWJjMEVRZHlJbUlCd2dJQ0FmSUIxelFSbDNJaDBnSldvZ0Ftb2lIM05CRUhjaUlHb2lIQ0FkYzBFVWR5SWRJQjlxSUJwcUloOGdJSE5CR0hjaUlDQWNhaUljYWlJbElCUnpRUlIzSWhRZ0oyb2dFMm9pSnlBbWMwRVlkeUltSUNWcUlpVWdLQ0FwYzBFWWR5SW9JQ3BxSWlrZ0ZYTkJHWGNpRlNBamFpQVphaUlqSUNCelFSQjNJaUFnSVdvaUlTQVZjMEVVZHlJVklDTnFJQkpxSWlNZ0lITkJHSGNpSUNBY0lCMXpRUmwzSWh3Z0htb2dBR29pSFNBb2MwRVFkeUllSUJzZ0pHb2lHMm9pSkNBY2MwRVVkeUljSUIxcUlCZHFJaDBnSG5OQkdIY2lIaUFrYWlJa0lCeHpRUmwzSWh3Z0d5QVdjMEVaZHlJV0lCOXFJQTVxSWhzZ0luTkJFSGNpSHlBcGFpSWlJQlp6UVJSM0loWWdHMm9nQzJvaUcyb2dHV29pS0hOQkVIY2lLV29pS2lBY2MwRVVkeUljSUNocUlBbHFJaWdnS1hOQkdIY2lLU0FxYWlJcUlCeHpRUmwzSWh3Z0lDQWhhaUlnSUJzZ0gzTkJHSGNpR3lBbElCUnpRUmwzSWhRZ0hXb2dCbW9pSFhOQkVIY2lIMm9pSVNBVWMwRVVkeUlVSUIxcUlBdHFJaDFxSUFWcUlpVWdHeUFpYWlJYklCNGdJQ0FWYzBFWmR5SVZJQ2RxSUJKcUlpQnpRUkIzSWg1cUlpSWdGWE5CRkhjaUZTQWdhaUFJYWlJZ0lCNXpRUmgzSWg1elFSQjNJaWNnSkNBbUlCc2dGbk5CR1hjaUZpQWphaUFLYWlJYmMwRVFkeUlqYWlJa0lCWnpRUlIzSWhZZ0cyb2dEbW9pR3lBamMwRVlkeUlqSUNScUlpUnFJaVlnSEhOQkZIY2lIQ0FsYWlBVGFpSWxJQ2R6UVJoM0lpY2dKbW9pSmlBZ0lCMGdIM05CR0hjaUhTQWhhaUlmSUJSelFSbDNJaFJxSUJkcUlpQWdJM05CRUhjaUlTQXFhaUlqSUJSelFSUjNJaFFnSUdvZ0RXb2lJQ0FoYzBFWWR5SWhJQ1FnRm5OQkdYY2lGaUFvYWlBYWFpSWtJQjF6UVJCM0loMGdIaUFpYWlJZWFpSWlJQlp6UVJSM0loWWdKR29nQW1vaUpDQWRjMEVZZHlJZElDSnFJaUlnRm5OQkdYY2lGaUFlSUJWelFSbDNJaFVnRzJvZ0RHb2lHeUFwYzBFUWR5SWVJQjlxSWg4Z0ZYTkJGSGNpRlNBYmFpQUFhaUliYWlBQWFpSW9jMEVRZHlJcGFpSXFJQlp6UVJSM0loWWdLR29nRTJvaUtDQXBjMEVZZHlJcElDcHFJaW9nRm5OQkdYY2lGaUFoSUNOcUlpRWdHeUFlYzBFWWR5SWJJQ1lnSEhOQkdYY2lIQ0FrYWlBWGFpSWVjMEVRZHlJamFpSWtJQnh6UVJSM0lod2dIbW9nREdvaUhtb2dHV29pSmlBYklCOXFJaHNnSFNBaElCUnpRUmwzSWhRZ0pXb2dDMm9pSDNOQkVIY2lIV29pSVNBVWMwRVVkeUlVSUI5cUlBSnFJaDhnSFhOQkdIY2lIWE5CRUhjaUpTQWlJQ2NnR3lBVmMwRVpkeUlWSUNCcUlBVnFJaHR6UVJCM0lpQnFJaUlnRlhOQkZIY2lGU0FiYWlBSmFpSWJJQ0J6UVJoM0lpQWdJbW9pSW1vaUp5QVdjMEVVZHlJV0lDWnFJQWhxSWlZZ0pYTkJHSGNpSlNBbmFpSW5JQjRnSTNOQkdIY2lIaUFrYWlJaklCeHpRUmwzSWh3Z0gyb2dDbW9pSHlBZ2MwRVFkeUlnSUNwcUlpUWdISE5CRkhjaUhDQWZhaUFhYWlJZklDQnpRUmgzSWlBZ0lpQVZjMEVaZHlJVklDaHFJQTFxSWlJZ0huTkJFSGNpSGlBZElDRnFJaDFxSWlFZ0ZYTkJGSGNpRlNBaWFpQUdhaUlpSUI1elFSaDNJaDRnSVdvaUlTQVZjMEVaZHlJVklCc2dIU0FVYzBFWmR5SVVhaUFTYWlJYklDbHpRUkIzSWgwZ0kyb2lJeUFVYzBFVWR5SVVJQnRxSUE1cUlodHFJQWhxSWloelFSQjNJaWxxSWlvZ0ZYTkJGSGNpRlNBb2FpQU5haUlvSUNFZ0pTQWJJQjF6UVJoM0loc2dJMm9pSFNBVWMwRVpkeUlVSUI5cUlCTnFJaDl6UVJCM0lpTnFJaUVnRkhOQkZIY2lGQ0FmYWlBT2FpSWZJQ056UVJoM0lpTWdJV29pSVNBVWMwRVpkeUlVYWlBR2FpSWxJQ0FnSkdvaUlDQWJJQ2NnRm5OQkdYY2lGaUFpYWlBTGFpSWljMEVRZHlJYmFpSWtJQlp6UVJSM0loWWdJbW9nRjJvaUlpQWJjMEVZZHlJYmMwRVFkeUluSUIwZ0hpQWdJQnh6UVJsM0lod2dKbW9nR21vaUlITkJFSGNpSG1vaUhTQWNjMEVVZHlJY0lDQnFJQUJxSWlBZ0huTkJHSGNpSGlBZGFpSWRhaUltSUJSelFSUjNJaFFnSldvZ0NXb2lKU0FuYzBFWWR5SW5JQ1pxSWlZZ0tDQXBjMEVZZHlJb0lDcHFJaWtnRlhOQkdYY2lGU0FpYWlBU2FpSWlJQjV6UVJCM0loNGdJV29pSVNBVmMwRVVkeUlWSUNKcUlCbHFJaUlnSG5OQkdIY2lIaUFkSUJ4elFSbDNJaHdnSDJvZ0Ftb2lIU0FvYzBFUWR5SWZJQnNnSkdvaUcyb2lKQ0FjYzBFVWR5SWNJQjFxSUFwcUloMGdIM05CR0hjaUh5QWthaUlrSUJ4elFSbDNJaHdnR3lBV2MwRVpkeUlXSUNCcUlBeHFJaHNnSTNOQkVIY2lJQ0FwYWlJaklCWnpRUlIzSWhZZ0cyb2dCV29pRzJvZ0FHb2lLSE5CRUhjaUtXb2lLaUFjYzBFVWR5SWNJQ2hxSUExcUlpZ2dLWE5CR0hjaUtTQXFhaUlxSUJ4elFSbDNJaHdnSGlBaGFpSWVJQnNnSUhOQkdIY2lHeUFtSUJSelFSbDNJaFFnSFdvZ0dXb2lIWE5CRUhjaUlHb2lJU0FVYzBFVWR5SVVJQjFxSUF4cUloMXFJQXRxSWlZZ0d5QWphaUliSUI4Z0hpQVZjMEVaZHlJVklDVnFJQXBxSWg1elFSQjNJaDlxSWlNZ0ZYTkJGSGNpRlNBZWFpQVNhaUllSUI5elFSaDNJaDl6UVJCM0lpVWdKQ0FuSUJzZ0ZuTkJHWGNpRmlBaWFpQU9haUliYzBFUWR5SWlhaUlrSUJaelFSUjNJaFlnRzJvZ0NHb2lHeUFpYzBFWWR5SWlJQ1JxSWlScUlpY2dISE5CRkhjaUhDQW1haUFHYWlJbUlDVnpRUmgzSWlVZ0oyb2lKeUFlSUIwZ0lITkJHSGNpSFNBaGFpSWdJQlJ6UVJsM0loUnFJQWxxSWg0Z0luTkJFSGNpSVNBcWFpSWlJQlJ6UVJSM0loUWdIbW9nQW1vaUhpQWhjMEVZZHlJaElDUWdGbk5CR1hjaUZpQW9haUFUYWlJa0lCMXpRUkIzSWgwZ0h5QWphaUlmYWlJaklCWnpRUlIzSWhZZ0pHb2dHbW9pSkNBZGMwRVlkeUlkSUNOcUlpTWdGbk5CR1hjaUZpQWZJQlZ6UVJsM0loVWdHMm9nRjJvaUd5QXBjMEVRZHlJZklDQnFJaUFnRlhOQkZIY2lGU0FiYWlBRmFpSWJhaUFhYWlJYWMwRVFkeUlvYWlJcElCWnpRUlIzSWhZZ0dtb2dHV29pR1NBb2MwRVlkeUlhSUNscUlpZ2dGbk5CR1hjaUZpQWhJQ0pxSWlFZ0d5QWZjMEVZZHlJYklDY2dISE5CR1hjaUhDQWthaUFTYWlJU2MwRVFkeUlmYWlJaUlCeHpRUlIzSWh3Z0Vtb2dCV29pQldvZ0RXb2lFaUFiSUNCcUlnMGdIU0FoSUJSelFSbDNJaFFnSm1vZ0NXb2lDWE5CRUhjaUcyb2lIU0FVYzBFVWR5SVVJQWxxSUFacUlnWWdHM05CR0hjaUNYTkJFSGNpR3lBaklDVWdEU0FWYzBFWmR5SU5JQjVxSUJkcUloZHpRUkIzSWhWcUloNGdEWE5CRkhjaURTQVhhaUFDYWlJQ0lCVnpRUmgzSWhjZ0htb2lGV29pSGlBV2MwRVVkeUlXSUJKcUlBQnFJaEt0UWlDR0lBVWdIM05CR0hjaUJTQWlhaUlBSUJ4elFSbDNJaHdnQm1vZ0RHb2lCaUFYYzBFUWR5SVhJQ2hxSWd3Z0hITkJGSGNpSENBR2FpQU9haUlHcllRZ0Q0VWdBaUFKSUIxcUlna2dGSE5CR1hjaURtb2dFMm9pQWlBYWMwRVFkeUlhSUFCcUloTWdEbk5CRkhjaURpQUNhaUFLYWlJQ0lCcHpRUmgzSWdvZ0Uyb2lHcTFDSUlZZ0ZTQU5jMEVaZHlJTklCbHFJQWhxSWdnZ0JYTkJFSGNpQlNBSmFpSUpJQTF6UVJSM0loa2dDR29nQzJvaUNDQUZjMEVZZHlJRklBbHFJZ210aElVM0E0Q0pBVUVBSUFNZ0FxMUNJSVlnQ0syRWhTQVNJQnR6UVJoM0lnSWdIbW9pQ0sxQ0lJWWdCaUFYYzBFWWR5SUdJQXhxSWhldGhJVTNBNGlKQVVFQUlBUWdGeUFjYzBFWmQ2MUNJSVlnR2lBT2MwRVpkNjJFaFNBRnJVSWdoaUFDcllTRk53T1FpUUZCQUNBSklCbHpRUmwzclVJZ2hpQUlJQlp6UVJsM3JZUkJBQ2tEbUlrQmhTQUdyVUlnaGlBS3JZU0ZOd09ZaVFFTG5RSUJCSDhqQUVFZ2F5SUFKQUFDUUVFQUtBS29pUUVOQUVFQVFRQW9BcUNKQVNJQlFRQW9BdkNKQVNJQ2FpSUROZ0tnaVFGQkFFRUFLQUtraVFFZ0F5QUJTV28yQXFTSkFRSkFRUUF0QVBpSkFVVU5BRUVBUVg4MkFxeUpBUXRCQUVGL05nS29pUUVDUUNBQ1FUOUtEUUJCQUNFQkEwQWdBaUFCYWtHd2lRRnFRUUE2QUFBZ0FVRUJhaUlCUWNBQVFRQW9BdkNKQVNJQ2EwZ05BQXNMUWJDSkFSQUNJQUJCQUNrRGdJa0JOd01BSUFCQkFDa0RpSWtCTndNSUlBQkJBQ2tEa0lrQk53TVFJQUJCQUNrRG1Ja0JOd01ZUVFBb0F2U0pBU0lEUVFGSURRQkJBQ0VCUVFBaEFnTkFJQUZCZ0FscUlBQWdBV290QUFBNkFBQWdBVUVCYWlFQklBTWdBa0VCYWlJQ1FmOEJjVW9OQUFzTElBQkJJR29rQUF1MEF3RUVmeU1BUWNBQWF5SUJKQUJCQUVHQkFqc0Jnb29CUVFBZ0FFRVFkaUlDT2dDQmlnRkJBQ0FBUVFOMk9nQ0FpZ0ZCQUNFREFrQURRQ0FEUVlDSkFXcEJBRFlDQUNBRFFmZ0FSZzBCSUFOQmhJa0Jha0VBTmdJQUlBTkJDR29oQXd3QUN3dEJBQ0VEUVFCQkFDZ0NnSW9CSWdSQjU4eW4wQVp6TmdLQWlRRkJBRUVBS0FLRWlnRkJoZDJlMjN0ek5nS0VpUUZCQUVFQUtBS0lpZ0ZCOHVhNzR3TnpOZ0tJaVFGQkFFRUFLQUtNaWdGQnV1cS9xbnB6TmdLTWlRRkJBRUVBS0FLUWlnRkIvNlM1aUFWek5nS1FpUUZCQUVFQUtBS1VpZ0ZCak5HVjJIbHpOZ0tVaVFGQkFFRUFLQUtZaWdGQnE3T1AvQUZ6TmdLWWlRRkJBQ0FFUWY4QmNUWUM5SWtCUVFCQkFDZ0NuSW9CUVptYWc5OEZjellDbklrQkFrQWdBRUdBZ0FSSkRRQWdBVUU0YWtJQU53TUFJQUZCTUdwQ0FEY0RBQ0FCUVNocVFnQTNBd0FnQVVFZ2FrSUFOd01BSUFGQkdHcENBRGNEQUNBQlFSQnFRZ0EzQXdBZ0FVSUFOd01JSUFGQ0FEY0RBRUVBSVFBRFFDQUJJQU5xSUFOQmdBbHFMUUFBT2dBQUlBTkJBV29oQXlBQ0lBQkJBV29pQUVIL0FYRkxEUUFMSUFGQndBQVFBUXNnQVVIQUFHb2tBQXNKQUVHQUNTQUFFQUVMQmdCQmdJa0JDdzhBSUFFUUJFR0FDU0FBRUFFUUF3c0xDd0VBUVlBSUN3UjhBQUFBXCI7XG52YXIgaGFzaCRoID0gXCJjNWM3NDZkNFwiO1xudmFyIHdhc21Kc29uJGggPSB7XG5cdG5hbWU6IG5hbWUkaCxcblx0ZGF0YTogZGF0YSRoLFxuXHRoYXNoOiBoYXNoJGhcbn07XG5cbmNvbnN0IG11dGV4JGogPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkaiA9IG51bGw7XG5mdW5jdGlvbiB2YWxpZGF0ZUJpdHMkMyhiaXRzKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJpdHMpIHx8IGJpdHMgPCA4IHx8IGJpdHMgPiAyNTYgfHwgYml0cyAlIDggIT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCB2YXJpYW50ISBWYWxpZCB2YWx1ZXM6IDgsIDE2LCAuLi4sIDI1NicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEluaXRQYXJhbShvdXRwdXRCaXRzLCBrZXlCaXRzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICByZXR1cm4gb3V0cHV0Qml0cyB8IChrZXlCaXRzIDw8IDE2KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBCTEFLRTJzIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMsIHdoaWNoIGhhcyB0byBiZSBhIG51bWJlclxuICogICAgICAgICAgICAgZGl2aXNpYmxlIGJ5IDgsIGJldHdlZW4gOCBhbmQgMjU2LiBEZWZhdWx0cyB0byAyNTYuXG4gKiBAcGFyYW0ga2V5IE9wdGlvbmFsIGtleSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSkuIE1heGltdW0gbGVuZ3RoIGlzIDMyIGJ5dGVzLlxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBibGFrZTJzKGRhdGEsIGJpdHMgPSAyNTYsIGtleSA9IG51bGwpIHtcbiAgICBpZiAodmFsaWRhdGVCaXRzJDMoYml0cykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlQml0cyQzKGJpdHMpKTtcbiAgICB9XG4gICAgbGV0IGtleUJ1ZmZlciA9IG51bGw7XG4gICAgbGV0IGluaXRQYXJhbSA9IGJpdHM7XG4gICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICBrZXlCdWZmZXIgPSBnZXRVSW50OEJ1ZmZlcihrZXkpO1xuICAgICAgICBpZiAoa2V5QnVmZmVyLmxlbmd0aCA+IDMyKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdNYXgga2V5IGxlbmd0aCBpcyAzMiBieXRlcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0UGFyYW0gPSBnZXRJbml0UGFyYW0oYml0cywga2V5QnVmZmVyLmxlbmd0aCk7XG4gICAgfVxuICAgIGNvbnN0IGhhc2hMZW5ndGggPSBiaXRzIC8gODtcbiAgICBpZiAod2FzbUNhY2hlJGogPT09IG51bGwgfHwgd2FzbUNhY2hlJGouaGFzaExlbmd0aCAhPT0gaGFzaExlbmd0aCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JGosIHdhc21Kc29uJGgsIGhhc2hMZW5ndGgpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGogPSB3YXNtO1xuICAgICAgICAgICAgaWYgKGluaXRQYXJhbSA+IDUxMikge1xuICAgICAgICAgICAgICAgIHdhc21DYWNoZSRqLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGouY2FsY3VsYXRlKGRhdGEsIGluaXRQYXJhbSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAoaW5pdFBhcmFtID4gNTEyKSB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkai53cml0ZU1lbW9yeShrZXlCdWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkai5jYWxjdWxhdGUoZGF0YSwgaW5pdFBhcmFtKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQkxBS0UycyBoYXNoIGluc3RhbmNlXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMsIHdoaWNoIGhhcyB0byBiZSBhIG51bWJlclxuICogICAgICAgICAgICAgZGl2aXNpYmxlIGJ5IDgsIGJldHdlZW4gOCBhbmQgMjU2LiBEZWZhdWx0cyB0byAyNTYuXG4gKiBAcGFyYW0ga2V5IE9wdGlvbmFsIGtleSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSkuIE1heGltdW0gbGVuZ3RoIGlzIDMyIGJ5dGVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCTEFLRTJzKGJpdHMgPSAyNTYsIGtleSA9IG51bGwpIHtcbiAgICBpZiAodmFsaWRhdGVCaXRzJDMoYml0cykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlQml0cyQzKGJpdHMpKTtcbiAgICB9XG4gICAgbGV0IGtleUJ1ZmZlciA9IG51bGw7XG4gICAgbGV0IGluaXRQYXJhbSA9IGJpdHM7XG4gICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICBrZXlCdWZmZXIgPSBnZXRVSW50OEJ1ZmZlcihrZXkpO1xuICAgICAgICBpZiAoa2V5QnVmZmVyLmxlbmd0aCA+IDMyKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdNYXgga2V5IGxlbmd0aCBpcyAzMiBieXRlcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0UGFyYW0gPSBnZXRJbml0UGFyYW0oYml0cywga2V5QnVmZmVyLmxlbmd0aCk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dFNpemUgPSBiaXRzIC8gODtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRoLCBvdXRwdXRTaXplKS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIGlmIChpbml0UGFyYW0gPiA1MTIpIHtcbiAgICAgICAgICAgIHdhc20ud3JpdGVNZW1vcnkoa2V5QnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICB3YXNtLmluaXQoaW5pdFBhcmFtKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogaW5pdFBhcmFtID4gNTEyXG4gICAgICAgICAgICAgICAgPyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdhc20ud3JpdGVNZW1vcnkoa2V5QnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgd2FzbS5pbml0KGluaXRQYXJhbSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3YXNtLmluaXQoaW5pdFBhcmFtKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDY0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogb3V0cHV0U2l6ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkZyA9IFwiYmxha2UzXCI7XG52YXIgZGF0YSRnID0gXCJBR0Z6YlFFQUFBQUJNUWRnQUFGL1lBbC9mMzkrZjM5L2YzOEFZQVovZjM5L2ZuOEFZQUYvQUdBRGYzOS9BR0FCZmdCZ0JYOS9mbjkvQVg4RERnMEFBUUlEQkFVR0F3TURBd0FFQlFRQkFRSUNCZzRDZndGQmdKZ0ZDMzhBUVlBSUN3ZHdDQVp0WlcxdmNua0NBQTVJWVhOb1gwZGxkRUoxWm1abGNnQUFDVWhoYzJoZlNXNXBkQUFJQzBoaGMyaGZWWEJrWVhSbEFBa0tTR0Z6YUY5R2FXNWhiQUFLRFVoaGMyaGZSMlYwVTNSaGRHVUFDdzVJWVhOb1gwTmhiR04xYkdGMFpRQU1DbE5VUVZSRlgxTkpXa1VEQVFxY1d3MEZBRUdBQ1F1akF3UUNmd0YrQVg4RWZpTUFRZUFBYXlJSkpBQUNRQ0FCUlEwQUlBY2dCWEloQ2lBRVFRQkhyU0VMSUFkQkFDQUNRUUZHR3lBR2NpQUZjaUVNQTBBZ0FDZ0NBQ0VISUFsQkFDa0RnSWtCTndNQUlBbEJBQ2tEaUlrQk53TUlJQWxCQUNrRGtJa0JOd01RSUFsQkFDa0RtSWtCTndNWUlBbEJJR29nQ1NBSFFjQUFJQU1nREJBQ0lBa2dDU2tEUUNBSktRTWdoU0lOTndNQUlBa2dDU2tEU0NBSktRTW9oU0lPTndNSUlBa2dDU2tEVUNBSktRTXdoU0lQTndNUUlBa2dDU2tEV0NBSktRTTRoU0lRTndNWUlBZEJ3QUJxSVFjZ0FpRUVBa0FEUUNBRklRWUNRQUpBSUFSQmYyb2lCQTRDQXdBQkN5QUtJUVlMSUFsQklHb2dDU0FIUWNBQUlBTWdCaEFDSUFrZ0NTa0RRQ0FKS1FNZ2hTSU5Od01BSUFrZ0NTa0RTQ0FKS1FNb2hTSU9Od01JSUFrZ0NTa0RVQ0FKS1FNd2hTSVBOd01RSUFrZ0NTa0RXQ0FKS1FNNGhTSVFOd01ZSUFkQndBQnFJUWNNQUFzTElBZ2dFRGNER0NBSUlBODNBeEFnQ0NBT053TUlJQWdnRFRjREFDQUlRU0JxSVFnZ0FFRUVhaUVBSUFNZ0Mzd2hBeUFCUVg5cUlnRU5BQXNMSUFsQjRBQnFKQUFMaEJ3Q0RINGZmeUFDS1FNZ0lRWWdBaWtET0NFSElBSXBBekFoQ0NBQ0tRTUFJUWtnQWlrREtDRUtJQUlwQXhBaEN5QUNLUU1JSVF3Z0Fpa0RHQ0VOSUFBZ0FTa0RBQ0lPTndNQUlBQWdBU2tEQ0NJUE53TUlJQUFnQVNrREVDSVFOd01RSUFBZ0QwSWdpS2NnRGFjaUFtb2dBU2tER0NJUlFpQ0lweUlTYWlJVElBMUNJSWluSWdGcUlCTWdCWE5CRUhRZ0UwRVFkbklpRkVHNjZyK3FlbW9pRlNBU2MwRVVkeUlXYWlJWElBNm5JQW1uSWhOcUlCQ25JaEpxSWhnZ0NVSWdpS2NpQldvZ0dDQUVwM05CRUhjaUdFSG56S2ZRQm1vaUdTQVNjMEVVZHlJU2FpSWFJQmh6UVJoM0loc2dHV29pSENBU2MwRVpkeUlkYWlBSHB5SVNhaUllSUFkQ0lJaW5JaGhxSUI0Z0Q2Y2dDNmNpR1dvZ0VhY2lIMm9pSUNBTFFpQ0lweUloYWlBZ0lBTnpRUkIwSUNCQkVIWnlJaUJCOHVhNzR3TnFJaUlnSDNOQkZIY2lIMm9pSXlBZ2MwRVlkeUlrYzBFUWR5SWVJQTVDSUlpbklBeW5JaUJxSUJCQ0lJaW5JaVZxSWlZZ0RFSWdpS2NpQTJvZ0ppQUVRaUNJcDNOQkVIY2lKa0dGM1o3YmUyb2lKeUFsYzBFVWR5SWxhaUlvSUNaelFSaDNJaVlnSjJvaUoyb2lLU0FkYzBFVWR5SWRhaUlxSUJscUlCY2dGSE5CR0hjaUt5QVZhaUlzSUJaelFSbDNJaFlnSTJvZ0NLY2lGR29pRnlBSVFpQ0lweUlWYWlBWElDWnpRUkIzSWhjZ0hHb2lIQ0FXYzBFVWR5SVdhaUlqSUJkelFSaDNJaVlnSEdvaUxTQVdjMEVaZHlJdWFpSWNJQlZxSUNjZ0pYTkJHWGNpSlNBYWFpQUdweUlXYWlJYUlBWkNJSWluSWhkcUlCb2dLM05CRUhjaUdpQWtJQ0pxSWlKcUlpUWdKWE5CRkhjaUpXb2lKeUFhYzBFWWR5SXJJQnh6UVJCM0lpOGdJaUFmYzBFWmR5SWZJQ2hxSUFxbklocHFJaUlnQ2tJZ2lLY2lIR29nSWlBYmMwRVFkeUliSUN4cUlpSWdIM05CRkhjaUgyb2lLQ0FiYzBFWWR5SWJJQ0pxSWlKcUlpd2dMbk5CRkhjaUxtb2lNQ0FuSUNCcUlDb2dIbk5CR0hjaUhpQXBhaUluSUIxelFSbDNJaDFxSWlrZ0Ftb2dHeUFwYzBFUWR5SWJJQzFxSWlrZ0hYTkJGSGNpSFdvaUtpQWJjMEVZZHlJYklDbHFJaWtnSFhOQkdYY2lIV29nR0dvaUxTQVdhaUF0SUNNZ0FXb2dJaUFmYzBFWmR5SWZhaUlpSUJOcUlCNGdJbk5CRUhjaUhpQXJJQ1JxSWlKcUlpTWdIM05CRkhjaUgyb2lKQ0FlYzBFWWR5SWVjMEVRZHlJcklDZ2dBMm9nSWlBbGMwRVpkeUlpYWlJbElCcHFJQ1lnSlhOQkVIY2lKU0FuYWlJbUlDSnpRUlIzSWlKcUlpY2dKWE5CR0hjaUpTQW1haUltYWlJb0lCMXpRUlIzSWgxcUlpMGdBV29nTUNBdmMwRVlkeUl2SUN4cUlpd2dMbk5CR1hjaUxpQWthaUFYYWlJa0lCSnFJQ1FnSlhOQkVIY2lKQ0FwYWlJbElDNXpRUlIzSWlscUlpNGdKSE5CR0hjaUpDQWxhaUlsSUNselFSbDNJaWxxSWpBZ0Vtb2dKaUFpYzBFWmR5SWlJQ3BxSUFWcUlpWWdIR29nSmlBdmMwRVFkeUltSUI0Z0kyb2lIbW9pSXlBaWMwRVVkeUlpYWlJcUlDWnpRUmgzSWlZZ01ITkJFSGNpTHlBZUlCOXpRUmwzSWg0Z0oyb2dGR29pSHlBaGFpQWZJQnR6UVJCM0loc2dMR29pSHlBZWMwRVVkeUllYWlJbklCdHpRUmgzSWhzZ0gyb2lIMm9pTENBcGMwRVVkeUlwYWlJd0lDb2dBMm9nTFNBcmMwRVlkeUlxSUNocUlpZ2dIWE5CR1hjaUhXb2lLeUFaYWlBYklDdHpRUkIzSWhzZ0pXb2lKU0FkYzBFVWR5SWRhaUlySUJ0elFSaDNJaHNnSldvaUpTQWRjMEVaZHlJZGFpQVdhaUl0SUFWcUlDMGdMaUFWYWlBZklCNXpRUmwzSWg1cUloOGdJR29nS2lBZmMwRVFkeUlmSUNZZ0kyb2lJMm9pSmlBZWMwRVVkeUllYWlJcUlCOXpRUmgzSWg5elFSQjNJaTBnSnlBYWFpQWpJQ0p6UVJsM0lpSnFJaU1nRkdvZ0pDQWpjMEVRZHlJaklDaHFJaVFnSW5OQkZIY2lJbW9pSnlBamMwRVlkeUlqSUNScUlpUnFJaWdnSFhOQkZIY2lIV29pTGlBVmFpQXdJQzl6UVJoM0lpOGdMR29pTENBcGMwRVpkeUlwSUNwcUlCeHFJaW9nR0dvZ0tpQWpjMEVRZHlJaklDVnFJaVVnS1hOQkZIY2lLV29pS2lBamMwRVlkeUlqSUNWcUlpVWdLWE5CR1hjaUtXb2lNQ0FZYWlBa0lDSnpRUmwzSWlJZ0syb2dBbW9pSkNBaGFpQWtJQzl6UVJCM0lpUWdIeUFtYWlJZmFpSW1JQ0p6UVJSM0lpSnFJaXNnSkhOQkdIY2lKQ0F3YzBFUWR5SXZJQjhnSG5OQkdYY2lIaUFuYWlBWGFpSWZJQk5xSUI4Z0czTkJFSGNpR3lBc2FpSWZJQjV6UVJSM0loNXFJaWNnRzNOQkdIY2lHeUFmYWlJZmFpSXNJQ2x6UVJSM0lpbHFJakFnS3lBYWFpQXVJQzF6UVJoM0lpc2dLR29pS0NBZGMwRVpkeUlkYWlJdElBRnFJQnNnTFhOQkVIY2lHeUFsYWlJbElCMXpRUlIzSWgxcUlpMGdHM05CR0hjaUd5QWxhaUlsSUIxelFSbDNJaDFxSUFWcUlpNGdBbW9nTGlBcUlCSnFJQjhnSG5OQkdYY2lIbW9pSHlBRGFpQXJJQjl6UVJCM0loOGdKQ0FtYWlJa2FpSW1JQjV6UVJSM0loNXFJaW9nSDNOQkdIY2lIM05CRUhjaUt5QW5JQlJxSUNRZ0luTkJHWGNpSW1vaUpDQVhhaUFqSUNSelFSQjNJaU1nS0dvaUpDQWljMEVVZHlJaWFpSW5JQ056UVJoM0lpTWdKR29pSkdvaUtDQWRjMEVVZHlJZGFpSXVJQkpxSURBZ0wzTkJHSGNpTHlBc2FpSXNJQ2x6UVJsM0lpa2dLbW9nSVdvaUtpQVdhaUFxSUNOelFSQjNJaU1nSldvaUpTQXBjMEVVZHlJcGFpSXFJQ056UVJoM0lpTWdKV29pSlNBcGMwRVpkeUlwYWlJd0lCWnFJQ1FnSW5OQkdYY2lJaUF0YWlBWmFpSWtJQk5xSUNRZ0wzTkJFSGNpSkNBZklDWnFJaDlxSWlZZ0luTkJGSGNpSW1vaUxTQWtjMEVZZHlJa0lEQnpRUkIzSWk4Z0h5QWVjMEVaZHlJZUlDZHFJQnhxSWg4Z0lHb2dIeUFiYzBFUWR5SWJJQ3hxSWg4Z0huTkJGSGNpSG1vaUp5QWJjMEVZZHlJYklCOXFJaDlxSWl3Z0tYTkJGSGNpS1dvaU1DQXZjMEVZZHlJdklDeHFJaXdnS1hOQkdYY2lLU0FxSUJocUlCOGdIbk5CR1hjaUhtb2lIeUFhYWlBdUlDdHpRUmgzSWlvZ0gzTkJFSGNpSHlBa0lDWnFJaVJxSWlZZ0huTkJGSGNpSG1vaUsyb2dFMm9pTGlBRmFpQXVJQ2NnRjJvZ0pDQWljMEVaZHlJaWFpSWtJQnhxSUNNZ0pITkJFSGNpSXlBcUlDaHFJaVJxSWljZ0luTkJGSGNpSW1vaUtDQWpjMEVZZHlJamMwRVFkeUlxSUMwZ0ZHb2dKQ0FkYzBFWmR5SWRhaUlrSUJWcUlCc2dKSE5CRUhjaUd5QWxhaUlrSUIxelFSUjNJaDFxSWlVZ0czTkJHSGNpR3lBa2FpSWthaUl0SUNselFSUjNJaWxxSWk0Z0Ztb2dLeUFmYzBFWWR5SWZJQ1pxSWlZZ0huTkJHWGNpSGlBb2FpQWhhaUlvSUFOcUlDZ2dHM05CRUhjaUd5QXNhaUlvSUI1elFSUjNJaDVxSWlzZ0czTkJHSGNpR3lBb2FpSW9JQjV6UVJsM0loNXFJaXdnRkdvZ01DQWtJQjF6UVJsM0loMXFJQUpxSWlRZ0dXb2dKQ0FmYzBFUWR5SWZJQ01nSjJvaUkyb2lKQ0FkYzBFVWR5SWRhaUluSUI5elFSaDNJaDhnTEhOQkVIY2lMQ0FqSUNKelFSbDNJaUlnSldvZ0FXb2lJeUFnYWlBaklDOXpRUkIzSWlNZ0ptb2lKU0FpYzBFVWR5SWlhaUltSUNOelFSaDNJaU1nSldvaUpXb2lMeUFlYzBFVWR5SWVhaUl3SUN4elFSaDNJaXdnTDJvaUx5QWVjMEVaZHlJZUlDc2dIR29nSlNBaWMwRVpkeUlpYWlJbElDRnFJQzRnS25OQkdIY2lLaUFsYzBFUWR5SWxJQjhnSkdvaUgyb2lKQ0FpYzBFVWR5SWlhaUlyYWlBVGFpSXVJQnBxSUM0Z0ppQVhhaUFmSUIxelFSbDNJaDFxSWg4Z0Vtb2dHeUFmYzBFUWR5SWJJQ29nTFdvaUgyb2lKaUFkYzBFVWR5SWRhaUlxSUJ0elFSaDNJaHR6UVJCM0lpMGdKeUFZYWlBZklDbHpRUmwzSWg5cUlpY2dCV29nSXlBbmMwRVFkeUlqSUNocUlpY2dIM05CRkhjaUgyb2lLQ0FqYzBFWWR5SWpJQ2RxSWlkcUlpa2dIbk5CRkhjaUhtb2lMaUFoYWlBcklDVnpRUmgzSWlFZ0pHb2lKQ0FpYzBFWmR5SWlJQ3BxSUJWcUlpVWdBMm9nSlNBamMwRVFkeUlqSUM5cUlpVWdJbk5CRkhjaUltb2lLaUFqYzBFWWR5SWpJQ1ZxSWlVZ0luTkJHWGNpSW1vaUt5QVRhaUFuSUI5elFSbDNJaE1nTUdvZ0lHb2lIeUFDYWlBZklDRnpRUkIzSWlFZ0d5QW1haUliYWlJZklCTnpRUlIzSWhOcUlpWWdJWE5CR0hjaUlTQXJjMEVRZHlJbklDZ2dHeUFkYzBFWmR5SWJhaUFaYWlJZElBRnFJQjBnTEhOQkVIY2lIU0FrYWlJa0lCdHpRUlIzSWh0cUlpZ2dIWE5CR0hjaUhTQWthaUlrYWlJcklDSnpRUlIzSWlKcUlpd2dKM05CR0hjaUp5QXJhaUlySUNKelFSbDNJaUlnS2lBY2FpQWtJQnR6UVJsM0loeHFJaHNnR0dvZ0xpQXRjMEVZZHlJWUlCdHpRUkIzSWhzZ0lTQWZhaUloYWlJZklCeHpRUlIzSWh4cUlpUnFJQkpxSWhJZ0dtb2dFaUFvSUJacUlDRWdFM05CR1hjaUUyb2lJU0FDYWlBaklDRnpRUkIzSWdJZ0dDQXBhaUlZYWlJaElCTnpRUlIzSWhOcUloWWdBbk5CR0hjaUFuTkJFSGNpRWlBbUlBVnFJQmdnSG5OQkdYY2lCV29pR0NBWGFpQWRJQmh6UVJCM0loZ2dKV29pRnlBRmMwRVVkeUlGYWlJYUlCaHpRUmgzSWhnZ0Yyb2lGMm9pSFNBaWMwRVVkeUllYWlJaU5nSUFJQUFnRnlBRmMwRVpkeUlGSUN4cUlDQnFJaUFnRkdvZ0lDQWtJQnR6UVJoM0loUnpRUkIzSWlBZ0FpQWhhaUlDYWlJaElBVnpRUlIzSWdWcUloY2dJSE5CR0hjaUlEWUNNQ0FBSUJZZ0ZDQWZhaUlVSUJ4elFSbDNJaHhxSUFGcUlnRWdGV29nQVNBWWMwRVFkeUlCSUN0cUloZ2dISE5CRkhjaUZXb2lGaUFCYzBFWWR5SUJJQmhxSWhnZ0ZYTkJHWGMyQWhBZ0FDQVhOZ0lFSUFBZ0FpQVRjMEVaZHlJQ0lCcHFJQU5xSWhNZ0dXb2dFeUFuYzBFUWR5SVRJQlJxSWhrZ0FuTkJGSGNpQW1vaUF5QVRjMEVZZHlJVE5nSTBJQUFnSWlBU2MwRVlkeUlTSUIxcUloUWdIbk5CR1hjMkFoUWdBQ0FUSUJscUloTTJBaUFnQUNBWU5nSWtJQUFnQXpZQ0NDQUFJQUUyQWpnZ0FDQWdJQ0ZxSWdFZ0JYTkJHWGMyQWhnZ0FDQVVOZ0lvSUFBZ0ZqWUNEQ0FBSUJJMkFqd2dBQ0FUSUFKelFSbDNOZ0ljSUFBZ0FUWUNMQXVsRWdzRGZ3UitBbjhCZmdGL0JINERmd0YrQW44QmZnUi9Jd0JCMEFKcklnRWtBQUpBSUFCRkRRQUNRQUpBUVFBdEFJbUtBVUVHZEVFQUxRQ0lpZ0ZxSWdJTkFFR0FDU0VEREFFTFFhQ0pBVUdBQ1VHQUNDQUNheUlDSUFBZ0FpQUFTUnNpQWhBRUlBQWdBbXNpQUVVTkFTQUJRYUFCYWtFQUtRUFFpUUUzQXdBZ0FVR29BV3BCQUNrRDJJa0JOd01BSUFGQkFDa0RvSWtCSWdRM0EzQWdBVUVBS1FPb2lRRWlCVGNEZUNBQlFRQXBBN0NKQVNJR053T0FBU0FCUVFBcEE3aUpBU0lITndPSUFTQUJRUUFwQThpSkFUY0RtQUZCQUMwQWlvb0JJUWhCQUMwQWlZb0JJUWxCQUNrRHdJa0JJUXBCQUMwQWlJb0JJUXNnQVVHd0FXcEJBQ2tENElrQk53TUFJQUZCdUFGcVFRQXBBK2lKQVRjREFDQUJRY0FCYWtFQUtRUHdpUUUzQXdBZ0FVSElBV3BCQUNrRCtJa0JOd01BSUFGQjBBRnFRUUFwQTRDS0FUY0RBQ0FCSUFzNkFOZ0JJQUVnQ2pjRGtBRWdBU0FJSUFsRmNrRUNjaUlJT2dEWkFTQUJJQWMzQS9nQklBRWdCamNEOEFFZ0FTQUZOd1BvQVNBQklBUTNBK0FCSUFFZ0FVSGdBV29nQVVHWUFXb2dDeUFLSUFoQi93RnhFQUlnQVNrRElDRUVJQUVwQXdBaEJTQUJLUU1vSVFZZ0FTa0RDQ0VISUFFcEF6QWhEQ0FCS1FNUUlRMGdBU2tET0NFT0lBRXBBeGdoRHlBS0VBVkJBRUlBTndPQWlnRkJBRUlBTndQNGlRRkJBRUlBTndQd2lRRkJBRUlBTndQb2lRRkJBRUlBTndQZ2lRRkJBRUlBTndQWWlRRkJBRUlBTndQUWlRRkJBRUlBTndQSWlRRkJBRUVBS1FPQWlRRTNBNkNKQVVFQVFRQXBBNGlKQVRjRHFJa0JRUUJCQUNrRGtJa0JOd093aVFGQkFFRUFLUU9ZaVFFM0E3aUpBVUVBUVFBdEFKQ0tBU0lMUVFGcU9nQ1FpZ0ZCQUVFQUtRUEFpUUZDQVh3M0E4Q0pBU0FMUVFWMElndEJxWW9CYWlBT0lBK0ZOd01BSUF0Qm9Zb0JhaUFNSUEyRk53TUFJQXRCbVlvQmFpQUdJQWVGTndNQUlBdEJrWW9CYWlBRUlBV0ZOd01BUVFCQkFEc0JpSW9CSUFKQmdBbHFJUU1MQWtBZ0FFR0JDRWtOQUNBQlFkUUNhaUVRUVFBcEE4Q0pBU0VFSUFGQktHb2hFUU5BSUFSQ0NvWWhDa0lCSUFCQkFYS3RlVUkvaFlhbklRSURRQ0FDSWhKQkFYWWhBaUFLSUJKQmYycXRnMElBVWcwQUN5QVNRUXAyclNFVEFrQUNRQ0FTUVlBSVN3MEFJQUZCQURzQjJBRWdBVUlBTndQUUFTQUJRZ0EzQThnQklBRkNBRGNEd0FFZ0FVSUFOd080QVNBQlFnQTNBN0FCSUFGQ0FEY0RxQUVnQVVJQU53T2dBU0FCUWdBM0E1Z0JJQUZCQUNrRGdJa0JOd053SUFGQkFDa0RpSWtCTndONElBRkJBQ2tEa0lrQk53T0FBU0FCUVFBdEFJcUtBVG9BMmdFZ0FVRUFLUU9ZaVFFM0E0Z0JJQUVnQkRjRGtBRWdBVUh3QUdvZ0F5QVNFQVFnQVNBQktRTndJZ1EzQXdBZ0FTQUJLUU40SWdVM0F3Z2dBU0FCS1FPQUFTSUdOd01RSUFFZ0FTa0RpQUVpQnpjREdDQUJJQUVwQTVnQk53TW9JQUVnQVNrRG9BRTNBekFnQVNBQktRT29BVGNET0NBQkxRRGFBU0VDSUFFdEFOa0JJUXNnQVNrRGtBRWhDaUFCSUFFdEFOZ0JJZ2c2QUdnZ0FTQUtOd01nSUFFZ0FTa0RzQUUzQTBBZ0FTQUJLUU80QVRjRFNDQUJJQUVwQThBQk53TlFJQUVnQVNrRHlBRTNBMWdnQVNBQktRUFFBVGNEWUNBQklBSWdDMFZ5UVFKeUlnSTZBR2tnQVNBSE53TzRBaUFCSUFZM0E3QUNJQUVnQlRjRHFBSWdBU0FFTndPZ0FpQUJRZUFCYWlBQlFhQUNhaUFSSUFnZ0NpQUNRZjhCY1JBQ0lBRXBBNEFDSVFRZ0FTa0Q0QUVoQlNBQktRT0lBaUVHSUFFcEErZ0JJUWNnQVNrRGtBSWhEQ0FCS1FQd0FTRU5JQUVwQTVnQ0lRNGdBU2tEK0FFaER5QUtFQVZCQUVFQUxRQ1FpZ0VpQWtFQmFqb0FrSW9CSUFKQkJYUWlBa0dwaWdGcUlBNGdENFUzQXdBZ0FrR2hpZ0ZxSUF3Z0RZVTNBd0FnQWtHWmlnRnFJQVlnQjRVM0F3QWdBa0dSaWdGcUlBUWdCWVUzQXdBTUFRc0NRQUpBSUFNZ0VpQUVRUUF0QUlxS0FTSUNJQUVRQmlJVVFRSkxEUUFnQVNrREdDRUtJQUVwQXhBaEJDQUJLUU1JSVFVZ0FTa0RBQ0VHREFFTElBSkJCSEloRlVFQUtRT1lpUUVoRFVFQUtRT1FpUUVoRGtFQUtRT0lpUUVoRDBFQUtRT0FpUUVoRmdOQUlCUkJmbW9pRjBFQmRpSVlRUUZxSWhsQkEzRWhDRUVBSVFrQ1FDQVhRUVpKRFFBZ0dVRjhjU0VhUVFBaENTQUJJUUlnRUNFTEEwQWdDeUFDUWNBQmFqWUNBQ0FMUVh4cUlBSkJnQUZxTmdJQUlBdEJlR29nQWtIQUFHbzJBZ0FnQzBGMGFpQUNOZ0lBSUFKQmdBSnFJUUlnQzBFUWFpRUxJQm9nQ1VFRWFpSUpSdzBBQ3dzQ1FDQUlSUTBBSUFFZ0NVRUdkR29oQWlBQlFjZ0NhaUFKUVFKMGFpRUxBMEFnQ3lBQ05nSUFJQUpCd0FCcUlRSWdDMEVFYWlFTElBaEJmMm9pQ0EwQUN3c2dBVUhJQW1vaEN5QUJRYUFDYWlFQ0lCa2hDQU5BSUFzb0FnQWhDU0FCSUEwM0EvZ0JJQUVnRGpjRDhBRWdBU0FQTndQb0FTQUJJQlkzQStBQklBRkI4QUJxSUFGQjRBRnFJQWxCd0FCQ0FDQVZFQUlnQVNrRGtBRWhDaUFCS1FOd0lRUWdBU2tEbUFFaEJTQUJLUU40SVFZZ0FTa0RvQUVoQnlBQktRT0FBU0VNSUFKQkdHb2dBU2tEcUFFZ0FTa0RpQUdGTndNQUlBSkJFR29nQnlBTWhUY0RBQ0FDUVFocUlBVWdCb1UzQXdBZ0FpQUtJQVNGTndNQUlBSkJJR29oQWlBTFFRUnFJUXNnQ0VGL2FpSUlEUUFMQWtBQ1FDQVhRWDV4UVFKcUlCUkpEUUFnR1NFVURBRUxJQUZCb0FKcUlCbEJCWFJxSWdJZ0FTQVpRUVowYWlJTEtRTUFOd01BSUFJZ0N5a0RDRGNEQ0NBQ0lBc3BBeEEzQXhBZ0FpQUxLUU1ZTndNWUlCaEJBbW9oRkFzZ0FTQUJLUU9nQWlJR053TUFJQUVnQVNrRHFBSWlCVGNEQ0NBQklBRXBBN0FDSWdRM0F4QWdBU0FCS1FPNEFpSUtOd01ZSUJSQkFrc05BQXNMSUFFcEF5QWhCeUFCS1FNb0lRd2dBU2tETUNFTklBRXBBemdoRGtFQUtRUEFpUUVRQlVFQVFRQXRBSkNLQVNJQ1FRRnFPZ0NRaWdFZ0FrRUZkQ0lDUWFtS0FXb2dDamNEQUNBQ1FhR0tBV29nQkRjREFDQUNRWm1LQVdvZ0JUY0RBQ0FDUVpHS0FXb2dCamNEQUVFQUtRUEFpUUVnRTBJQmlId1FCVUVBUVFBdEFKQ0tBU0lDUVFGcU9nQ1FpZ0VnQWtFRmRDSUNRYW1LQVdvZ0RqY0RBQ0FDUWFHS0FXb2dEVGNEQUNBQ1FabUtBV29nRERjREFDQUNRWkdLQVdvZ0J6Y0RBQXRCQUVFQUtRUEFpUUVnRTN3aUJEY0R3SWtCSUFNZ0Vtb2hBeUFBSUJKcklnQkJnQWhMRFFBTElBQkZEUUVMUWFDSkFTQURJQUFRQkVFQUtRUEFpUUVRQlFzZ0FVSFFBbW9rQUF1R0J3SUpmd0YrSXdCQndBQnJJZ01rQUFKQUFrQWdBQzBBYUNJRVJRMEFBa0JCd0FBZ0JHc2lCU0FDSUFVZ0Fra2JJZ1pGRFFBZ0JrRURjU0VIUVFBaEJRSkFJQVpCQkVrTkFDQUFJQVJxSVFnZ0JrRjhjU0VKUVFBaEJRTkFJQWdnQldvaUNrRW9haUFCSUFWcUlnc3RBQUE2QUFBZ0NrRXBhaUFMUVFGcUxRQUFPZ0FBSUFwQkttb2dDMEVDYWkwQUFEb0FBQ0FLUVN0cUlBdEJBMm90QUFBNkFBQWdDU0FGUVFScUlnVkhEUUFMQ3dKQUlBZEZEUUFnQVNBRmFpRUtJQVVnQkdvZ0FHcEJLR29oQlFOQUlBVWdDaTBBQURvQUFDQUtRUUZxSVFvZ0JVRUJhaUVGSUFkQmYyb2lCdzBBQ3dzZ0FDMEFhQ0VFQ3lBQUlBUWdCbW9pQnpvQWFDQUJJQVpxSVFFQ1FDQUNJQVpySWdJTkFFRUFJUUlNQWdzZ0F5QUFJQUJCS0dwQndBQWdBQ2tESUNBQUxRQnFJQUJCNlFCcUlnVXRBQUFpQ2tWeUVBSWdBQ0FES1FNZ0lBTXBBd0NGTndNQUlBQWdBeWtES0NBREtRTUloVGNEQ0NBQUlBTXBBekFnQXlrREVJVTNBeEFnQUNBREtRTTRJQU1wQXhpRk53TVlJQUJCQURvQWFDQUZJQXBCQVdvNkFBQWdBRUhnQUdwQ0FEY0RBQ0FBUWRnQWFrSUFOd01BSUFCQjBBQnFRZ0EzQXdBZ0FFSElBR3BDQURjREFDQUFRY0FBYWtJQU53TUFJQUJCT0dwQ0FEY0RBQ0FBUVRCcVFnQTNBd0FnQUVJQU53TW9DMEVBSVFjZ0FrSEJBRWtOQUNBQVFla0FhaUlLTFFBQUlRVWdBQzBBYWlFTElBQXBBeUFoREFOQUlBTWdBQ0FCUWNBQUlBd2dDeUFGUWY4QmNVVnlRZjhCY1JBQ0lBQWdBeWtESUNBREtRTUFoVGNEQUNBQUlBTXBBeWdnQXlrRENJVTNBd2dnQUNBREtRTXdJQU1wQXhDRk53TVFJQUFnQXlrRE9DQURLUU1ZaFRjREdDQUtJQVZCQVdvaUJUb0FBQ0FCUWNBQWFpRUJJQUpCUUdvaUFrSEFBRXNOQUFzTEFrQkJ3QUFnQjBIL0FYRWlCbXNpQlNBQ0lBVWdBa2tiSWdsRkRRQWdDVUVEY1NFTFFRQWhCUUpBSUFsQkJFa05BQ0FBSUFacUlRY2dDVUg4QUhFaENFRUFJUVVEUUNBSElBVnFJZ0pCS0dvZ0FTQUZhaUlLTFFBQU9nQUFJQUpCS1dvZ0NrRUJhaTBBQURvQUFDQUNRU3BxSUFwQkFtb3RBQUE2QUFBZ0FrRXJhaUFLUVFOcUxRQUFPZ0FBSUFnZ0JVRUVhaUlGUncwQUN3c0NRQ0FMUlEwQUlBRWdCV29oQVNBRklBWnFJQUJxUVNocUlRVURRQ0FGSUFFdEFBQTZBQUFnQVVFQmFpRUJJQVZCQVdvaEJTQUxRWDlxSWdzTkFBc0xJQUF0QUdnaEJ3c2dBQ0FISUFscU9nQm9JQU5Cd0FCcUpBQUwzZ01FQlg4RGZnVi9CbjRqQUVIUUFXc2lBU1FBQWtBZ0FIdW5JZ0pCQUMwQWtJb0JJZ05QRFFCQkFDMEFpb29CUVFSeUlRUWdBVUVvYWlFRlFRQXBBNWlKQVNFQVFRQXBBNUNKQVNFR1FRQXBBNGlKQVNFSFFRQXBBNENKQVNFSUlBTWhDUU5BSUFFZ0FEY0RHQ0FCSUFZM0F4QWdBU0FITndNSUlBRWdDRGNEQUNBQklBTkJCWFFpQTBIUmlRRnFJZ29wQXdBM0F5Z2dBU0FEUWRtSkFXb2lDeWtEQURjRE1DQUJJQU5CNFlrQmFpSU1LUU1BTndNNElBRWdBMEhwaVFGcUlnMHBBd0EzQTBBZ0FTQURRZkdKQVdvcEF3QTNBMGdnQVNBRFFmbUpBV29wQXdBM0ExQWdBU0FEUVlHS0FXb3BBd0EzQTFnZ0EwR0ppZ0ZxS1FNQUlRNGdBVUhBQURvQWFDQUJJQTQzQTJBZ0FVSUFOd01nSUFFZ0JEb0FhU0FCSUFBM0E0Z0JJQUVnQmpjRGdBRWdBU0FITndONElBRWdDRGNEY0NBQlFaQUJhaUFCUWZBQWFpQUZRY0FBUWdBZ0JFSC9BWEVRQWlBQktRT3dBU0VPSUFFcEE1QUJJUThnQVNrRHVBRWhFQ0FCS1FPWUFTRVJJQUVwQThBQklSSWdBU2tEb0FFaEV5QU5JQUVwQThnQklBRXBBNmdCaFRjREFDQU1JQklnRTRVM0F3QWdDeUFRSUJHRk53TUFJQW9nRGlBUGhUY0RBQ0FKUVg5cUlnbEIvd0Z4SWdNZ0Frc05BQXRCQUNBSk9nQ1FpZ0VMSUFGQjBBRnFKQUFMd3drQ0NuOEZmaU1BUWVBQ2F5SUZKQUFDUUFKQUlBRkJnQWhMRFFBZ0JTQUFOZ0w4QVNBRlFmd0JhaUFCUVlBSVJpSUdRUkFnQWtFQklBTkJBVUVDSUFRUUFTQUdRUXAwSWdjZ0FVOE5BU0FGUWVBQWFpSUdRZ0EzQXdBZ0JVSFlBR29pQ0VJQU53TUFJQVZCMEFCcUlnbENBRGNEQUNBRlFjZ0FhaUlLUWdBM0F3QWdCVUhBQUdvaUMwSUFOd01BSUFWQk9Hb2lERUlBTndNQUlBVkJNR29pRFVJQU53TUFJQVVnQXpvQWFpQUZRZ0EzQXlnZ0JVRUFPd0ZvSUFWQkFDa0RnSWtCTndNQUlBVkJBQ2tEaUlrQk53TUlJQVZCQUNrRGtJa0JOd01RSUFWQkFDa0RtSWtCTndNWUlBVWdBVUdBQ0VZaURxMGdBbnczQXlBZ0JTQUFJQWRxUVFBZ0FTQU9HeEFFSUFWQmlBRnFRVEJxSUEwcEF3QTNBd0FnQlVHSUFXcEJPR29nRENrREFEY0RBQ0FGSUFVcEF3QWlEemNEaUFFZ0JTQUZLUU1JSWhBM0E1QUJJQVVnQlNrREVDSVJOd09ZQVNBRklBVXBBeGdpRWpjRG9BRWdCU0FGS1FNb053T3dBU0FGTFFCcUlRQWdCUzBBYVNFSElBVXBBeUFoQWlBRkxRQm9JUUVnQlVHSUFXcEJ3QUJxSUFzcEF3QTNBd0FnQlVHSUFXcEJ5QUJxSUFvcEF3QTNBd0FnQlVHSUFXcEIwQUJxSUFrcEF3QTNBd0FnQlVHSUFXcEIyQUJxSUFncEF3QTNBd0FnQlVHSUFXcEI0QUJxSUFZcEF3QTNBd0FnQlNBQk9nRHdBU0FGSUFJM0E2Z0JJQVVnQUNBSFJYSkJBbklpQURvQThRRWdCU0FTTndPWUFpQUZJQkUzQTVBQ0lBVWdFRGNEaUFJZ0JTQVBOd09BQWlBRlFhQUNhaUFGUVlBQ2FpQUZRYkFCYWlBQklBSWdBRUgvQVhFUUFpQUZLUVBBQWlFQ0lBVXBBNkFDSVE4Z0JTa0R5QUloRUNBRktRT29BaUVSSUFVcEE5QUNJUklnQlNrRHNBSWhFeUFFSUE1QkJYUnFJZ0VnQlNrRDJBSWdCU2tEdUFLRk53TVlJQUVnRWlBVGhUY0RFQ0FCSUJBZ0VZVTNBd2dnQVNBQ0lBK0ZOd01BUVFKQkFTQU9HeUVHREFFTElBQkNBU0FCUVg5cVFRcDJRUUZ5clhsQ1A0V0dJZytuUVFwMElnNGdBaUFESUFVUUJpRUhJQUFnRG1vZ0FTQU9heUFQUXYvLy93R0RJQUo4SUFNZ0JVSEFBRUVnSUE1QmdBaExHMm9RQmlFQkFrQWdCMEVCUncwQUlBUWdCU2tEQURjREFDQUVJQVVwQXdnM0F3Z2dCQ0FGS1FNUU53TVFJQVFnQlNrREdEY0RHQ0FFSUFVcEF5QTNBeUFnQkNBRktRTW9Od01vSUFRZ0JTa0RNRGNETUNBRUlBVXBBemczQXpoQkFpRUdEQUVMUVFBaEJrRUFJUUFDUUNBQklBZHFJZ2xCQWtrTkFDQUpRWDVxSWdwQkFYWkJBV29pQmtFRGNTRU9RUUFoQndKQUlBcEJCa2tOQUNBR1FYeHhJUWdnQlVHVUFXb2hBVUVBSVFjZ0JTRUFBMEFnQVNBQVFjQUJhallDQUNBQlFYeHFJQUJCZ0FGcU5nSUFJQUZCZUdvZ0FFSEFBR28yQWdBZ0FVRjBhaUFBTmdJQUlBQkJnQUpxSVFBZ0FVRVFhaUVCSUFnZ0IwRUVhaUlIUncwQUN3c2dDa0YrY1NFSUFrQWdEa1VOQUNBRklBZEJCblJxSVFFZ0JVR0lBV29nQjBFQ2RHb2hBQU5BSUFBZ0FUWUNBQ0FCUWNBQWFpRUJJQUJCQkdvaEFDQU9RWDlxSWc0TkFBc0xJQWhCQW1vaEFBc2dCVUdJQVdvZ0JrRUJRZ0JCQUNBRFFRUnlRUUJCQUNBRUVBRWdBQ0FKVHcwQUlBUWdCa0VGZEdvaUFTQUZJQVpCQm5ScUlnQXBBd0EzQXdBZ0FTQUFLUU1JTndNSUlBRWdBQ2tERURjREVDQUJJQUFwQXhnM0F4Z2dCa0VCYWlFR0N5QUZRZUFDYWlRQUlBWUxyUkFJQW44RWZnRi9BWDRFZndSK0JIOEVmaU1BUWZBQmF5SUJKQUFDUUNBQVJRMEFBa0JCQUMwQWtJb0JJZ0lOQUNBQlFUQnFRUUFwQTlDSkFUY0RBQ0FCUVRocVFRQXBBOWlKQVRjREFDQUJRUUFwQTZDSkFTSUROd01BSUFGQkFDa0RxSWtCSWdRM0F3Z2dBVUVBS1FPd2lRRWlCVGNERUNBQlFRQXBBN2lKQVNJR053TVlJQUZCQUNrRHlJa0JOd01vUVFBdEFJcUtBU0VDUVFBdEFJbUtBU0VIUVFBcEE4Q0pBU0VJUVFBdEFJaUtBU0VKSUFGQndBQnFRUUFwQStDSkFUY0RBQ0FCUWNnQWFrRUFLUVBvaVFFM0F3QWdBVUhRQUdwQkFDa0Q4SWtCTndNQUlBRkIyQUJxUVFBcEEvaUpBVGNEQUNBQlFlQUFha0VBS1FPQWlnRTNBd0FnQVNBSk9nQm9JQUVnQ0RjRElDQUJJQUlnQjBWeUlnSkJBbkk2QUdrZ0FVRW9haUVLUWdBaENFR0FDU0VMSUFKQkNuSkIvd0Z4SVF3RFFDQUJRYkFCYWlBQklBb2dDVUgvQVhFZ0NDQU1FQUlnQVNBQktRUFFBU0lOSUFFcEE3QUJoVGNEY0NBQklBRXBBOWdCSWc0Z0FTa0R1QUdGTndONElBRWdBU2tENEFFaUR5QUJLUVBBQVlVM0E0QUJJQUVnQVNrRDZBRWlFQ0FHaFRjRHFBRWdBU0FQSUFXRk53T2dBU0FCSUE0Z0JJVTNBNWdCSUFFZ0RTQURoVGNEa0FFZ0FTQVFJQUVwQThnQmhUY0RpQUVnQUVIQUFDQUFRY0FBU1JzaUVVRi9haUVTQWtBQ1FDQVJRUWR4SWhNTkFDQUJRZkFBYWlFQ0lBc2hCeUFSSVJRTUFRc2dFVUg0QUhFaEZDQUJRZkFBYWlFQ0lBc2hCd05BSUFjZ0FpMEFBRG9BQUNBSFFRRnFJUWNnQWtFQmFpRUNJQk5CZjJvaUV3MEFDd3NDUUNBU1FRZEpEUUFEUUNBSElBSXBBQUEzQUFBZ0IwRUlhaUVISUFKQkNHb2hBaUFVUVhocUloUU5BQXNMSUFoQ0FYd2hDQ0FMSUJGcUlRc2dBQ0FSYXlJQURRQU1BZ3NMQWtBQ1FBSkFRUUF0QUltS0FTSUhRUVowUVFCQkFDMEFpSW9CSWhGclJnMEFJQUVnRVRvQWFDQUJRUUFwQTRDS0FUY0RZQ0FCUVFBcEEvaUpBVGNEV0NBQlFRQXBBL0NKQVRjRFVDQUJRUUFwQStpSkFUY0RTQ0FCUVFBcEErQ0pBVGNEUUNBQlFRQXBBOWlKQVRjRE9DQUJRUUFwQTlDSkFUY0RNQ0FCUVFBcEE4aUpBVGNES0NBQlFRQXBBOENKQVNJSU53TWdJQUZCQUNrRHVJa0JJZ00zQXhnZ0FVRUFLUU93aVFFaUJEY0RFQ0FCUVFBcEE2aUpBU0lGTndNSUlBRkJBQ2tEb0lrQklnWTNBd0FnQVVFQUxRQ0tpZ0VpRXlBSFJYSkJBbklpQ3pvQWFTQVRRUVJ5SVJOQkFDa0RtSWtCSVExQkFDa0RrSWtCSVE1QkFDa0RpSWtCSVE5QkFDa0RnSWtCSVJBTUFRdEJ3QUFoRVNBQlFjQUFPZ0JvUWdBaENDQUJRZ0EzQXlBZ0FVRUFLUU9ZaVFFaURUY0RHQ0FCUVFBcEE1Q0pBU0lPTndNUUlBRkJBQ2tEaUlrQklnODNBd2dnQVVFQUtRT0FpUUVpRURjREFDQUJRUUF0QUlxS0FVRUVjaUlUT2dCcElBRWdBa0YrYWlJQ1FRVjBJZ2RCeVlvQmFpa0RBRGNEWUNBQklBZEJ3WW9CYWlrREFEY0RXQ0FCSUFkQnVZb0JhaWtEQURjRFVDQUJJQWRCc1lvQmFpa0RBRGNEU0NBQklBZEJxWW9CYWlrREFEY0RRQ0FCSUFkQm9Zb0JhaWtEQURjRE9DQUJJQWRCbVlvQmFpa0RBRGNETUNBQklBZEJrWW9CYWlrREFEY0RLQ0FUSVFzZ0VDRUdJQThoQlNBT0lRUWdEU0VESUFKRkRRRUxJQUpCZjJvaUIwRUZkQ0lVUVpHS0FXb3BBd0FoRlNBVVFabUtBV29wQXdBaEZpQVVRYUdLQVdvcEF3QWhGeUFVUWFtS0FXb3BBd0FoR0NBQklBTTNBNGdCSUFFZ0JEY0RnQUVnQVNBRk53TjRJQUVnQmpjRGNDQUJRYkFCYWlBQlFmQUFhaUFCUVNocUloUWdFU0FJSUF0Qi93RnhFQUlnQVNBVE9nQnBJQUZCd0FBNkFHZ2dBU0FZTndOQUlBRWdGemNET0NBQklCWTNBekFnQVNBVk53TW9JQUZDQURjRElDQUJJQTAzQXhnZ0FTQU9Od01RSUFFZ0R6Y0RDQ0FCSUJBM0F3QWdBU0FCS1FQb0FTQUJLUVBJQVlVM0EyQWdBU0FCS1FQZ0FTQUJLUVBBQVlVM0ExZ2dBU0FCS1FQWUFTQUJLUU80QVlVM0ExQWdBU0FCS1FQUUFTQUJLUU93QVlVM0EwZ2dCMFVOQUNBQ1FRVjBRZW1KQVdvaEFpQVRRZjhCY1NFUkEwQWdBa0ZvYWlrREFDRUlJQUpCY0dvcEF3QWhBeUFDUVhocUtRTUFJUVFnQWlrREFDRUZJQUVnRFRjRGlBRWdBU0FPTndPQUFTQUJJQTgzQTNnZ0FTQVFOd053SUFGQnNBRnFJQUZCOEFCcUlCUkJ3QUJDQUNBUkVBSWdBU0FUT2dCcElBRkJ3QUE2QUdnZ0FTQUZOd05BSUFFZ0JEY0RPQ0FCSUFNM0F6QWdBU0FJTndNb0lBRkNBRGNESUNBQklBMDNBeGdnQVNBT053TVFJQUVnRHpjRENDQUJJQkEzQXdBZ0FTQUJLUVBvQVNBQktRUElBWVUzQTJBZ0FTQUJLUVBnQVNBQktRUEFBWVUzQTFnZ0FTQUJLUVBZQVNBQktRTzRBWVUzQTFBZ0FTQUJLUVBRQVNBQktRT3dBWVUzQTBnZ0FrRmdhaUVDSUFkQmYyb2lCdzBBQ3dzZ0FVRW9haUVKUWdBaENFR0FDU0VMSUJOQkNISkIvd0Z4SVFvRFFDQUJRYkFCYWlBQklBbEJ3QUFnQ0NBS0VBSWdBU0FCS1FQUUFTSURJQUVwQTdBQmhUY0RjQ0FCSUFFcEE5Z0JJZ1FnQVNrRHVBR0ZOd040SUFFZ0FTa0Q0QUVpQlNBQktRUEFBWVUzQTRBQklBRWdEU0FCS1FQb0FTSUdoVGNEcUFFZ0FTQU9JQVdGTndPZ0FTQUJJQThnQklVM0E1Z0JJQUVnRUNBRGhUY0RrQUVnQVNBR0lBRXBBOGdCaFRjRGlBRWdBRUhBQUNBQVFjQUFTUnNpRVVGL2FpRVNBa0FDUUNBUlFRZHhJaE1OQUNBQlFmQUFhaUVDSUFzaEJ5QVJJUlFNQVFzZ0VVSDRBSEVoRkNBQlFmQUFhaUVDSUFzaEJ3TkFJQWNnQWkwQUFEb0FBQ0FIUVFGcUlRY2dBa0VCYWlFQ0lCTkJmMm9pRXcwQUN3c0NRQ0FTUVFkSkRRQURRQ0FISUFJcEFBQTNBQUFnQjBFSWFpRUhJQUpCQ0dvaEFpQVVRWGhxSWhRTkFBc0xJQWhDQVh3aENDQUxJQkZxSVFzZ0FDQVJheUlBRFFBTEN5QUJRZkFCYWlRQUM2TUNBUVIrQWtBQ1FDQUFRU0JHRFFCQ3E3T1AvSkdqcy9EYkFDRUJRditrdVlqRmtkcUNtMzhoQWtMeTVydmpvNmY5cDZWL0lRTkM1OHluME5iUTY3TzdmeUVFUVFBaEFBd0JDMEVBS1FPWUNTRUJRUUFwQTVBSklRSkJBQ2tEaUFraEEwRUFLUU9BQ1NFRVFSQWhBQXRCQUNBQU9nQ0tpZ0ZCQUVJQU53T0FpZ0ZCQUVJQU53UDRpUUZCQUVJQU53UHdpUUZCQUVJQU53UG9pUUZCQUVJQU53UGdpUUZCQUVJQU53UFlpUUZCQUVJQU53UFFpUUZCQUVJQU53UElpUUZCQUVJQU53UEFpUUZCQUNBQk53TzRpUUZCQUNBQ053T3dpUUZCQUNBRE53T29pUUZCQUNBRU53T2dpUUZCQUNBQk53T1lpUUZCQUNBQ053T1FpUUZCQUNBRE53T0lpUUZCQUNBRU53T0FpUUZCQUVFQU9nQ1FpZ0ZCQUVFQU93R0lpZ0VMQmdBZ0FCQURDd1lBSUFBUUJ3c0dBRUdBaVFFTHF3SUJCSDRDUUFKQUlBRkJJRVlOQUVLcnM0LzhrYU96OE5zQUlRTkMvNlM1aU1XUjJvS2JmeUVFUXZMbXUrT2pwLzJucFg4aEJVTG56S2ZRMXREcnM3dC9JUVpCQUNFQkRBRUxRUUFwQTVnSklRTkJBQ2tEa0FraEJFRUFLUU9JQ1NFRlFRQXBBNEFKSVFaQkVDRUJDMEVBSUFFNkFJcUtBVUVBUWdBM0E0Q0tBVUVBUWdBM0EvaUpBVUVBUWdBM0EvQ0pBVUVBUWdBM0EraUpBVUVBUWdBM0ErQ0pBVUVBUWdBM0E5aUpBVUVBUWdBM0E5Q0pBVUVBUWdBM0E4aUpBVUVBUWdBM0E4Q0pBVUVBSUFNM0E3aUpBVUVBSUFRM0E3Q0pBVUVBSUFVM0E2aUpBVUVBSUFZM0E2Q0pBVUVBSUFNM0E1aUpBVUVBSUFRM0E1Q0pBVUVBSUFVM0E0aUpBVUVBSUFZM0E0Q0pBVUVBUVFBNkFKQ0tBVUVBUVFBN0FZaUtBU0FBRUFNZ0FoQUhDd3NMQVFCQmdBZ0xCSGdIQUFBPVwiO1xudmFyIGhhc2gkZyA9IFwiNTQwZThiOGVcIjtcbnZhciB3YXNtSnNvbiRnID0ge1xuXHRuYW1lOiBuYW1lJGcsXG5cdGRhdGE6IGRhdGEkZyxcblx0aGFzaDogaGFzaCRnXG59O1xuXG5jb25zdCBtdXRleCRpID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGkgPSBudWxsO1xuZnVuY3Rpb24gdmFsaWRhdGVCaXRzJDIoYml0cykge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihiaXRzKSB8fCBiaXRzIDwgOCB8fCBiaXRzICUgOCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHZhcmlhbnQhIFZhbGlkIHZhbHVlczogOCwgMTYsIC4uLicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBCTEFLRTMgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEBwYXJhbSBiaXRzIE51bWJlciBvZiBvdXRwdXQgYml0cywgd2hpY2ggaGFzIHRvIGJlIGEgbnVtYmVyXG4gKiAgICAgICAgICAgICBkaXZpc2libGUgYnkgOC4gRGVmYXVsdHMgdG8gMjU2LlxuICogQHBhcmFtIGtleSBPcHRpb25hbCBrZXkgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpLiBMZW5ndGggc2hvdWxkIGJlIDMyIGJ5dGVzLlxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBibGFrZTMoZGF0YSwgYml0cyA9IDI1Niwga2V5ID0gbnVsbCkge1xuICAgIGlmICh2YWxpZGF0ZUJpdHMkMihiaXRzKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVCaXRzJDIoYml0cykpO1xuICAgIH1cbiAgICBsZXQga2V5QnVmZmVyID0gbnVsbDtcbiAgICBsZXQgaW5pdFBhcmFtID0gMDsgLy8ga2V5IGlzIGVtcHR5IGJ5IGRlZmF1bHRcbiAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGtleUJ1ZmZlciA9IGdldFVJbnQ4QnVmZmVyKGtleSk7XG4gICAgICAgIGlmIChrZXlCdWZmZXIubGVuZ3RoICE9PSAzMikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignS2V5IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgMzIgYnl0ZXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdFBhcmFtID0gMzI7XG4gICAgfVxuICAgIGNvbnN0IGhhc2hMZW5ndGggPSBiaXRzIC8gODtcbiAgICBjb25zdCBkaWdlc3RQYXJhbSA9IGhhc2hMZW5ndGg7XG4gICAgaWYgKHdhc21DYWNoZSRpID09PSBudWxsIHx8IHdhc21DYWNoZSRpLmhhc2hMZW5ndGggIT09IGhhc2hMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCRpLCB3YXNtSnNvbiRnLCBoYXNoTGVuZ3RoKVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSRpID0gd2FzbTtcbiAgICAgICAgICAgIGlmIChpbml0UGFyYW0gPT09IDMyKSB7XG4gICAgICAgICAgICAgICAgd2FzbUNhY2hlJGkud3JpdGVNZW1vcnkoa2V5QnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkaS5jYWxjdWxhdGUoZGF0YSwgaW5pdFBhcmFtLCBkaWdlc3RQYXJhbSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAoaW5pdFBhcmFtID09PSAzMikge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGkud3JpdGVNZW1vcnkoa2V5QnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJGkuY2FsY3VsYXRlKGRhdGEsIGluaXRQYXJhbSwgZGlnZXN0UGFyYW0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBCTEFLRTMgaGFzaCBpbnN0YW5jZVxuICogQHBhcmFtIGJpdHMgTnVtYmVyIG9mIG91dHB1dCBiaXRzLCB3aGljaCBoYXMgdG8gYmUgYSBudW1iZXJcbiAqICAgICAgICAgICAgIGRpdmlzaWJsZSBieSA4LiBEZWZhdWx0cyB0byAyNTYuXG4gKiBAcGFyYW0ga2V5IE9wdGlvbmFsIGtleSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSkuIExlbmd0aCBzaG91bGQgYmUgMzIgYnl0ZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJMQUtFMyhiaXRzID0gMjU2LCBrZXkgPSBudWxsKSB7XG4gICAgaWYgKHZhbGlkYXRlQml0cyQyKGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZUJpdHMkMihiaXRzKSk7XG4gICAgfVxuICAgIGxldCBrZXlCdWZmZXIgPSBudWxsO1xuICAgIGxldCBpbml0UGFyYW0gPSAwOyAvLyBrZXkgaXMgZW1wdHkgYnkgZGVmYXVsdFxuICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAga2V5QnVmZmVyID0gZ2V0VUludDhCdWZmZXIoa2V5KTtcbiAgICAgICAgaWYgKGtleUJ1ZmZlci5sZW5ndGggIT09IDMyKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdLZXkgbGVuZ3RoIG11c3QgYmUgZXhhY3RseSAzMiBieXRlcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0UGFyYW0gPSAzMjtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0U2l6ZSA9IGJpdHMgLyA4O1xuICAgIGNvbnN0IGRpZ2VzdFBhcmFtID0gb3V0cHV0U2l6ZTtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRnLCBvdXRwdXRTaXplKS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIGlmIChpbml0UGFyYW0gPT09IDMyKSB7XG4gICAgICAgICAgICB3YXNtLndyaXRlTWVtb3J5KGtleUJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgd2FzbS5pbml0KGluaXRQYXJhbSk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6IGluaXRQYXJhbSA9PT0gMzJcbiAgICAgICAgICAgICAgICA/ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2FzbS53cml0ZU1lbW9yeShrZXlCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB3YXNtLmluaXQoaW5pdFBhcmFtKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdhc20uaW5pdChpbml0UGFyYW0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSwgZGlnZXN0UGFyYW0pLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDY0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogb3V0cHV0U2l6ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkZiA9IFwiY3JjMzJcIjtcbnZhciBkYXRhJGYgPSBcIkFHRnpiUUVBQUFBQkVRUmdBQUYvWUFGL0FHQUFBR0FDZjM4QUF3Z0hBQUVCQVFJQUF3VUVBUUVDQWdZT0FuOEJRWkRKQlF0L0FFR0FDQXNIY0FnR2JXVnRiM0o1QWdBT1NHRnphRjlIWlhSQ2RXWm1aWElBQUFsSVlYTm9YMGx1YVhRQUFndElZWE5vWDFWd1pHRjBaUUFEQ2toaGMyaGZSbWx1WVd3QUJBMUlZWE5vWDBkbGRGTjBZWFJsQUFVT1NHRnphRjlEWVd4amRXeGhkR1VBQmdwVFZFRlVSVjlUU1ZwRkF3RUtrZ2dIQlFCQmdBa0x3d01CQTM5QmdJa0JJUUZCQUNFQ0EwQWdBVUVBUVFCQkFFRUFRUUJCQUVFQVFRQWdBa0VCY1dzZ0FIRWdBa0VCZG5NaUEwRUJjV3NnQUhFZ0EwRUJkbk1pQTBFQmNXc2dBSEVnQTBFQmRuTWlBMEVCY1dzZ0FIRWdBMEVCZG5NaUEwRUJjV3NnQUhFZ0EwRUJkbk1pQTBFQmNXc2dBSEVnQTBFQmRuTWlBMEVCY1dzZ0FIRWdBMEVCZG5NaUEwRUJjV3NnQUhFZ0EwRUJkbk0yQWdBZ0FVRUVhaUVCSUFKQkFXb2lBa0dBQWtjTkFBdEJBQ0VBQTBBZ0FFR0VrUUZxSUFCQmhJa0JhaWdDQUNJQ1FmOEJjVUVDZEVHQWlRRnFLQUlBSUFKQkNIWnpJZ0kyQWdBZ0FFR0VtUUZxSUFKQi93RnhRUUowUVlDSkFXb29BZ0FnQWtFSWRuTWlBallDQUNBQVFZU2hBV29nQWtIL0FYRkJBblJCZ0lrQmFpZ0NBQ0FDUVFoMmN5SUNOZ0lBSUFCQmhLa0JhaUFDUWY4QmNVRUNkRUdBaVFGcUtBSUFJQUpCQ0haeklnSTJBZ0FnQUVHRXNRRnFJQUpCL3dGeFFRSjBRWUNKQVdvb0FnQWdBa0VJZG5NaUFqWUNBQ0FBUVlTNUFXb2dBa0gvQVhGQkFuUkJnSWtCYWlnQ0FDQUNRUWgyY3lJQ05nSUFJQUJCaE1FQmFpQUNRZjhCY1VFQ2RFR0FpUUZxS0FJQUlBSkJDSFp6TmdJQUlBQkJCR29pQUVIOEIwY05BQXNMSndBQ1FFRUFLQUtBeVFFZ0FFWU5BQ0FBRUFGQkFDQUFOZ0tBeVFFTFFRQkJBRFlDaE1rQkM0Z0RBUU4vUVFBb0FvVEpBVUYvY3lFQlFZQUpJUUlDUUNBQVFRaEpEUUJCZ0FraEFnTkFJQUpCQkdvb0FnQWlBMEVPZGtIOEIzRkJnSkVCYWlnQ0FDQURRUloyUWZ3SGNVR0FpUUZxS0FJQWN5QURRUVoyUWZ3SGNVR0FtUUZxS0FJQWN5QURRZjhCY1VFQ2RFR0FvUUZxS0FJQWN5QUNLQUlBSUFGeklnRkJGblpCL0FkeFFZQ3BBV29vQWdCeklBRkJEblpCL0FkeFFZQ3hBV29vQWdCeklBRkJCblpCL0FkeFFZQzVBV29vQWdCeklBRkIvd0Z4UVFKMFFZREJBV29vQWdCeklRRWdBa0VJYWlFQ0lBQkJlR29pQUVFSFN3MEFDd3NDUUNBQVJRMEFBa0FDUUNBQVFRRnhEUUFnQUNFRERBRUxJQUZCL3dGeElBSXRBQUJ6UVFKMFFZQ0pBV29vQWdBZ0FVRUlkbk1oQVNBQ1FRRnFJUUlnQUVGL2FpRURDeUFBUVFGR0RRQURRQ0FCUWY4QmNTQUNMUUFBYzBFQ2RFR0FpUUZxS0FJQUlBRkJDSFp6SWdGQi93RnhJQUpCQVdvdEFBQnpRUUowUVlDSkFXb29BZ0FnQVVFSWRuTWhBU0FDUVFKcUlRSWdBMEYrYWlJRERRQUxDMEVBSUFGQmYzTTJBb1RKQVFzeUFRRi9RUUJCQUNnQ2hNa0JJZ0JCR0hRZ0FFR0EvZ054UVFoMGNpQUFRUWgyUVlEK0EzRWdBRUVZZG5KeU5nS0FDUXNHQUVHRXlRRUxXUUFDUUVFQUtBS0F5UUVnQVVZTkFDQUJFQUZCQUNBQk5nS0F5UUVMUVFCQkFEWUNoTWtCSUFBUUEwRUFRUUFvQW9USkFTSUJRUmgwSUFGQmdQNERjVUVJZEhJZ0FVRUlka0dBL2dOeElBRkJHSFp5Y2pZQ2dBa0xDd3NCQUVHQUNBc0VCQUFBQUE9PVwiO1xudmFyIGhhc2gkZiA9IFwiZDJlYmE1ODdcIjtcbnZhciB3YXNtSnNvbiRmID0ge1xuXHRuYW1lOiBuYW1lJGYsXG5cdGRhdGE6IGRhdGEkZixcblx0aGFzaDogaGFzaCRmXG59O1xuXG5jb25zdCBtdXRleCRoID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGggPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIENSQy0zMiBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjcmMzMihkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSRoID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkaCwgd2FzbUpzb24kZiwgNClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkaCA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGguY2FsY3VsYXRlKGRhdGEsIDB4RURCODgzMjApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSRoLmNhbGN1bGF0ZShkYXRhLCAweEVEQjg4MzIwKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQ1JDLTMyIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ1JDMzIoKSB7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kZiwgNCkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoMHhFREI4ODMyMCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KDB4RURCODgzMjApOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDQsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiA0LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG5jb25zdCBtdXRleCRnID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGcgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIENSQy0zMkMgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY3JjMzJjKGRhdGEpIHtcbiAgICBpZiAod2FzbUNhY2hlJGcgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCRnLCB3YXNtSnNvbiRmLCA0KVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSRnID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkZy5jYWxjdWxhdGUoZGF0YSwgMHg4MkY2M0I3OCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJGcuY2FsY3VsYXRlKGRhdGEsIDB4ODJGNjNCNzgpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBDUkMtMzJDIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ1JDMzJDKCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJGYsIDQpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KDB4ODJGNjNCNzgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgweDgyRjYzQjc4KTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogNCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkZSA9IFwibWQ0XCI7XG52YXIgZGF0YSRlID0gXCJBR0Z6YlFFQUFBQUJFZ1JnQUFGL1lBQUFZQUYvQUdBQ2YzOEJmd01JQndBQkFnTUJBQUlGQkFFQkFnSUdEZ0ovQVVHZ2lnVUxmd0JCZ0FnTEIzQUlCbTFsYlc5eWVRSUFEa2hoYzJoZlIyVjBRblZtWm1WeUFBQUpTR0Z6YUY5SmJtbDBBQUVMU0dGemFGOVZjR1JoZEdVQUFncElZWE5vWDBacGJtRnNBQVFOU0dGemFGOUhaWFJUZEdGMFpRQUZEa2hoYzJoZlEyRnNZM1ZzWVhSbEFBWUtVMVJCVkVWZlUwbGFSUU1CQ3U0VUJ3VUFRWUFKQ3kwQVFRQkMvcm5yeGVtT2xaa1FOd0tRaVFGQkFFS0J4cFM2bHZIcTVtODNBb2lKQVVFQVFnQTNBb0NKQVF1K0JRRUhmMEVBUVFBb0FvQ0pBU0lCSUFCcVFmLy8vLzhCY1NJQ05nS0FpUUZCQUVFQUtBS0VpUUVnQWlBQlNXb2dBRUVkZG1vMkFvU0pBUUpBQWtBQ1FBSkFBa0FDUUNBQlFUOXhJZ01OQUVHQUNTRUVEQUVMUWNBQUlBTnJJZ1VnQUVzTkFTQUZRUU54SVFaQkFDRUJBa0FnQTBFL2MwRURTUTBBSUFOQmdJa0JhaUVFSUFWQi9BQnhJUWRCQUNFQkEwQWdCQ0FCYWlJQ1FSaHFJQUZCZ0FscUxRQUFPZ0FBSUFKQkdXb2dBVUdCQ1dvdEFBQTZBQUFnQWtFYWFpQUJRWUlKYWkwQUFEb0FBQ0FDUVJ0cUlBRkJnd2xxTFFBQU9nQUFJQWNnQVVFRWFpSUJSdzBBQ3dzQ1FDQUdSUTBBSUFOQm1Ja0JhaUVDQTBBZ0FpQUJhaUFCUVlBSmFpMEFBRG9BQUNBQlFRRnFJUUVnQmtGL2FpSUdEUUFMQzBHWWlRRkJ3QUFRQXhvZ0FDQUZheUVBSUFWQmdBbHFJUVFMSUFCQndBQlBEUUVnQUNFQ0RBSUxJQUJGRFFJZ0FFRURjU0VHUVFBaEFRSkFJQUJCQkVrTkFDQURRWUNKQVdvaEJDQUFRWHh4SVFCQkFDRUJBMEFnQkNBQmFpSUNRUmhxSUFGQmdBbHFMUUFBT2dBQUlBSkJHV29nQVVHQkNXb3RBQUE2QUFBZ0FrRWFhaUFCUVlJSmFpMEFBRG9BQUNBQ1FSdHFJQUZCZ3dscUxRQUFPZ0FBSUFBZ0FVRUVhaUlCUncwQUN3c2dCa1VOQWlBRFFaaUpBV29oQWdOQUlBSWdBV29nQVVHQUNXb3RBQUE2QUFBZ0FVRUJhaUVCSUFaQmYyb2lCZzBBREFNTEN5QUFRVDl4SVFJZ0JDQUFRVUJ4RUFNaEJBc2dBa1VOQUNBQ1FRTnhJUVpCQUNFQkFrQWdBa0VFU1EwQUlBSkJQSEVoQUVFQUlRRURRQ0FCUVppSkFXb2dCQ0FCYWlJQ0xRQUFPZ0FBSUFGQm1Za0JhaUFDUVFGcUxRQUFPZ0FBSUFGQm1va0JhaUFDUVFKcUxRQUFPZ0FBSUFGQm00a0JhaUFDUVFOcUxRQUFPZ0FBSUFBZ0FVRUVhaUlCUncwQUN3c2dCa1VOQUFOQUlBRkJtSWtCYWlBRUlBRnFMUUFBT2dBQUlBRkJBV29oQVNBR1FYOXFJZ1lOQUFzTEMrc0tBUmQvUVFBb0FwU0pBU0VDUVFBb0FwQ0pBU0VEUVFBb0FveUpBU0VFUVFBb0FvaUpBU0VGQTBBZ0FDZ0NIQ0lHSUFBb0FoUWlCeUFBS0FJWUlnZ2dBQ2dDRUNJSklBQW9BaXdpQ2lBQUtBSW9JZ3NnQUNnQ0pDSU1JQUFvQWlBaURTQUxJQWdnQUNnQ0NDSU9JQU5xSUFBb0FnUWlEeUFDYWlBRUlBTWdBbk54SUFKeklBVnFJQUFvQWdBaUVHcEJBM2NpRVNBRUlBTnpjU0FEYzJwQkIzY2lFaUFSSUFSemNTQUVjMnBCQzNjaUUyb2dFaUFIYWlBSklCRnFJQUFvQWd3aUZDQUVhaUFUSUJJZ0VYTnhJQkZ6YWtFVGR5SVJJQk1nRW5OeElCSnpha0VEZHlJU0lCRWdFM054SUJOemFrRUhkeUlUSUJJZ0VYTnhJQkZ6YWtFTGR5SVZhaUFUSUF4cUlCSWdEV29nRVNBR2FpQVZJQk1nRW5OeElCSnpha0VUZHlJUklCVWdFM054SUJOemFrRURkeUlTSUJFZ0ZYTnhJQlZ6YWtFSGR5SVRJQklnRVhOeElCRnpha0VMZHlJVklBQW9BamdpRm1vZ0V5QUFLQUkwSWhkcUlCSWdBQ2dDTUNJWWFpQVJJQXBxSUJVZ0V5QVNjM0VnRW5OcVFSTjNJaElnRlNBVGMzRWdFM05xUVFOM0loTWdFaUFWYzNFZ0ZYTnFRUWQzSWhVZ0V5QVNjM0VnRW5OcVFRdDNJaEZxSUFrZ0ZXb2dFQ0FUYWlBU0lBQW9BandpQ1dvZ0VTQVZJQk56Y1NBVGMycEJFM2NpRWlBUklCVnljU0FSSUJWeGNtcEJtZk9KMUFWcVFRTjNJaE1nRWlBUmNuRWdFaUFSY1hKcVFabnppZFFGYWtFRmR5SVJJQk1nRW5KeElCTWdFbkZ5YWtHWjg0blVCV3BCQ1hjaUZXb2dCeUFSYWlBUElCTnFJQmdnRW1vZ0ZTQVJJQk55Y1NBUklCTnhjbXBCbWZPSjFBVnFRUTEzSWhJZ0ZTQVJjbkVnRlNBUmNYSnFRWm56aWRRRmFrRURkeUlSSUJJZ0ZYSnhJQklnRlhGeWFrR1o4NG5VQldwQkJYY2lFeUFSSUJKeWNTQVJJQkp4Y21wQm1mT0oxQVZxUVFsM0loVnFJQWdnRTJvZ0RpQVJhaUFYSUJKcUlCVWdFeUFSY25FZ0V5QVJjWEpxUVpuemlkUUZha0VOZHlJUklCVWdFM0p4SUJVZ0UzRnlha0daODRuVUJXcEJBM2NpRWlBUklCVnljU0FSSUJWeGNtcEJtZk9KMUFWcVFRVjNJaE1nRWlBUmNuRWdFaUFSY1hKcVFabnppZFFGYWtFSmR5SVZhaUFHSUJOcUlCUWdFbW9nRmlBUmFpQVZJQk1nRW5KeElCTWdFbkZ5YWtHWjg0blVCV3BCRFhjaUVTQVZJQk55Y1NBVklCTnhjbXBCbWZPSjFBVnFRUU4zSWhJZ0VTQVZjbkVnRVNBVmNYSnFRWm56aWRRRmFrRUZkeUlUSUJJZ0VYSnhJQklnRVhGeWFrR1o4NG5VQldwQkNYY2lGV29nRUNBU2FpQUpJQkZxSUJVZ0V5QVNjbkVnRXlBU2NYSnFRWm56aWRRRmFrRU5keUlHSUJWekloSWdFM05xUWFIWDUvWUdha0VEZHlJUklBWnpJQTBnRTJvZ0VpQVJjMnBCb2RmbjlnWnFRUWwzSWhKemFrR2gxK2YyQm1wQkMzY2lFMm9nRGlBUmFpQVRJQkp6SUJnZ0Jtb2dFaUFSY3lBVGMycEJvZGZuOWdacVFROTNJaEZ6YWtHaDErZjJCbXBCQTNjaUZTQVJjeUFMSUJKcUlCRWdFM01nRlhOcVFhSFg1L1lHYWtFSmR5SVNjMnBCb2RmbjlnWnFRUXQzSWhOcUlBOGdGV29nRXlBU2N5QVdJQkZxSUJJZ0ZYTWdFM05xUWFIWDUvWUdha0VQZHlJUmMycEJvZGZuOWdacVFRTjNJaFVnRVhNZ0RDQVNhaUFSSUJOeklCVnpha0doMStmMkJtcEJDWGNpRW5OcVFhSFg1L1lHYWtFTGR5SVRhaUFVSUJWcUlCTWdFbk1nRnlBUmFpQVNJQlZ6SUJOemFrR2gxK2YyQm1wQkQzY2lFWE5xUWFIWDUvWUdha0VEZHlJVklCRnpJQW9nRW1vZ0VTQVRjeUFWYzJwQm9kZm45Z1pxUVFsM0loSnpha0doMStmMkJtcEJDM2NpRXlBRGFpRURJQWtnRVdvZ0VpQVZjeUFUYzJwQm9kZm45Z1pxUVE5M0lBUnFJUVFnRWlBQ2FpRUNJQlVnQldvaEJTQUFRY0FBYWlFQUlBRkJRR29pQVEwQUMwRUFJQUkyQXBTSkFVRUFJQU0yQXBDSkFVRUFJQVEyQW95SkFVRUFJQVUyQW9pSkFTQUFDODhEQVFSL1FRQW9Bb0NKQVVFL2NTSUFRWmlKQVdwQmdBRTZBQUFnQUVFQmFpRUJBa0FDUUFKQUFrQWdBRUUvY3lJQ1FRZExEUUFnQWtVTkFTQUJRWmlKQVdwQkFEb0FBQ0FDUVFGR0RRRWdBRUdhaVFGcVFRQTZBQUFnQWtFQ1JnMEJJQUJCbTRrQmFrRUFPZ0FBSUFKQkEwWU5BU0FBUVp5SkFXcEJBRG9BQUNBQ1FRUkdEUUVnQUVHZGlRRnFRUUE2QUFBZ0FrRUZSZzBCSUFCQm5va0Jha0VBT2dBQUlBSkJCa1lOQVNBQVFaK0pBV3BCQURvQUFBd0JDeUFDUVFoR0RRSkJOaUFBYXlFREFrQWdBa0VEY1NJQURRQWdBeUVDREFJTFFRQWdBR3NoQWtFQUlRQURRQ0FBUWMrSkFXcEJBRG9BQUNBQ0lBQkJmMm9pQUVjTkFBc2dBeUFBYWlFQ0RBRUxRWmlKQVVIQUFCQURHa0VBSVFGQk55RURRVGNoQWdzZ0EwRURTUTBBSUFGQmdJa0JhaUVBUVg4aEFRTkFJQUFnQW1wQkZXcEJBRFlBQUNBQVFYeHFJUUFnQWlBQlFRUnFJZ0ZIRFFBTEMwRUFRUUFvQW9TSkFUWUMxSWtCUVFCQkFDZ0NnSWtCSWdCQkZYWTZBTk9KQVVFQUlBQkJEWFk2QU5LSkFVRUFJQUJCQlhZNkFOR0pBVUVBSUFCQkEzUWlBRG9BMElrQlFRQWdBRFlDZ0lrQlFaaUpBVUhBQUJBREdrRUFRUUFwQW9pSkFUY0RnQWxCQUVFQUtRS1FpUUUzQTRnSkN3WUFRWUNKQVFzekFFRUFRdjY1NjhYcGpwV1pFRGNDa0lrQlFRQkNnY2FVdXBieDZ1WnZOd0tJaVFGQkFFSUFOd0tBaVFFZ0FCQUNFQVFMQ3dzQkFFR0FDQXNFbUFBQUFBPT1cIjtcbnZhciBoYXNoJGUgPSBcIjc0OTA5YzI0XCI7XG52YXIgd2FzbUpzb24kZSA9IHtcblx0bmFtZTogbmFtZSRlLFxuXHRkYXRhOiBkYXRhJGUsXG5cdGhhc2g6IGhhc2gkZVxufTtcblxuY29uc3QgbXV0ZXgkZiA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSRmID0gbnVsbDtcbi8qKlxuICogQ2FsY3VsYXRlcyBNRDQgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbWQ0KGRhdGEpIHtcbiAgICBpZiAod2FzbUNhY2hlJGYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCRmLCB3YXNtSnNvbiRlLCAxNilcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkZiA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGYuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSRmLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgTUQ0IGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTUQ0KCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJGUsIDE2KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDY0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogMTYsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJGQgPSBcIm1kNVwiO1xudmFyIGRhdGEkZCA9IFwiQUdGemJRRUFBQUFCRWdSZ0FBRi9ZQUFBWUFGL0FHQUNmMzhCZndNSUJ3QUJBZ01CQUFJRkJBRUJBZ0lHRGdKL0FVR2dpZ1VMZndCQmdBZ0xCM0FJQm0xbGJXOXllUUlBRGtoaGMyaGZSMlYwUW5WbVptVnlBQUFKU0dGemFGOUpibWwwQUFFTFNHRnphRjlWY0dSaGRHVUFBZ3BJWVhOb1gwWnBibUZzQUFRTlNHRnphRjlIWlhSVGRHRjBaUUFGRGtoaGMyaGZRMkZzWTNWc1lYUmxBQVlLVTFSQlZFVmZVMGxhUlFNQkNvb2FCd1VBUVlBSkN5MEFRUUJDL3JucnhlbU9sWmtRTndLUWlRRkJBRUtCeHBTNmx2SHE1bTgzQW9pSkFVRUFRZ0EzQW9DSkFRdStCUUVIZjBFQVFRQW9Bb0NKQVNJQklBQnFRZi8vLy84QmNTSUNOZ0tBaVFGQkFFRUFLQUtFaVFFZ0FpQUJTV29nQUVFZGRtbzJBb1NKQVFKQUFrQUNRQUpBQWtBQ1FDQUJRVDl4SWdNTkFFR0FDU0VFREFFTFFjQUFJQU5ySWdVZ0FFc05BU0FGUVFOeElRWkJBQ0VCQWtBZ0EwRS9jMEVEU1EwQUlBTkJnSWtCYWlFRUlBVkIvQUJ4SVFkQkFDRUJBMEFnQkNBQmFpSUNRUmhxSUFGQmdBbHFMUUFBT2dBQUlBSkJHV29nQVVHQkNXb3RBQUE2QUFBZ0FrRWFhaUFCUVlJSmFpMEFBRG9BQUNBQ1FSdHFJQUZCZ3dscUxRQUFPZ0FBSUFjZ0FVRUVhaUlCUncwQUN3c0NRQ0FHUlEwQUlBTkJtSWtCYWlFQ0EwQWdBaUFCYWlBQlFZQUphaTBBQURvQUFDQUJRUUZxSVFFZ0JrRi9haUlHRFFBTEMwR1lpUUZCd0FBUUF4b2dBQ0FGYXlFQUlBVkJnQWxxSVFRTElBQkJ3QUJQRFFFZ0FDRUNEQUlMSUFCRkRRSWdBRUVEY1NFR1FRQWhBUUpBSUFCQkJFa05BQ0FEUVlDSkFXb2hCQ0FBUVh4eElRQkJBQ0VCQTBBZ0JDQUJhaUlDUVJocUlBRkJnQWxxTFFBQU9nQUFJQUpCR1dvZ0FVR0JDV290QUFBNkFBQWdBa0VhYWlBQlFZSUphaTBBQURvQUFDQUNRUnRxSUFGQmd3bHFMUUFBT2dBQUlBQWdBVUVFYWlJQlJ3MEFDd3NnQmtVTkFpQURRWmlKQVdvaEFnTkFJQUlnQVdvZ0FVR0FDV290QUFBNkFBQWdBVUVCYWlFQklBWkJmMm9pQmcwQURBTUxDeUFBUVQ5eElRSWdCQ0FBUVVCeEVBTWhCQXNnQWtVTkFDQUNRUU54SVFaQkFDRUJBa0FnQWtFRVNRMEFJQUpCUEhFaEFFRUFJUUVEUUNBQlFaaUpBV29nQkNBQmFpSUNMUUFBT2dBQUlBRkJtWWtCYWlBQ1FRRnFMUUFBT2dBQUlBRkJtb2tCYWlBQ1FRSnFMUUFBT2dBQUlBRkJtNGtCYWlBQ1FRTnFMUUFBT2dBQUlBQWdBVUVFYWlJQlJ3MEFDd3NnQmtVTkFBTkFJQUZCbUlrQmFpQUVJQUZxTFFBQU9nQUFJQUZCQVdvaEFTQUdRWDlxSWdZTkFBc0xDNGNRQVJsL1FRQW9BcFNKQVNFQ1FRQW9BcENKQVNFRFFRQW9Bb3lKQVNFRVFRQW9Bb2lKQVNFRkEwQWdBQ2dDQ0NJR0lBQW9BaGdpQnlBQUtBSW9JZ2dnQUNnQ09DSUpJQUFvQWp3aUNpQUFLQUlNSWdzZ0FDZ0NIQ0lNSUFBb0Fpd2lEU0FNSUFzZ0NpQU5JQWtnQ0NBSElBTWdCbW9nQWlBQUtBSUVJZzVxSUFVZ0JDQUNJQU56Y1NBQ2Myb2dBQ2dDQUNJUGFrSDR5S3E3ZldwQkIzY2dCR29pRUNBRUlBTnpjU0FEYzJwQjF1NmV4bjVxUVF4M0lCQnFJaEVnRUNBRWMzRWdCSE5xUWR2aGdhRUNha0VSZHlBUmFpSVNhaUFBS0FJVUloTWdFV29nQUNnQ0VDSVVJQkJxSUFRZ0Myb2dFaUFSSUJCemNTQVFjMnBCN3AzM2pYeHFRUlozSUJKcUloQWdFaUFSYzNFZ0VYTnFRYStmOEt0L2FrRUhkeUFRYWlJUklCQWdFbk54SUJKemFrR3FqSis4QkdwQkRIY2dFV29pRWlBUklCQnpjU0FRYzJwQms0ekJ3WHBxUVJGM0lCSnFJaFZxSUFBb0FpUWlGaUFTYWlBQUtBSWdJaGNnRVdvZ0RDQVFhaUFWSUJJZ0VYTnhJQkZ6YWtHQnFwcHFha0VXZHlBVmFpSVFJQlVnRW5OeElCSnpha0hZc1lMTUJtcEJCM2NnRUdvaUVTQVFJQlZ6Y1NBVmMycEJyKytUMm5ocVFReDNJQkZxSWhJZ0VTQVFjM0VnRUhOcVFiRzNmV3BCRVhjZ0Vtb2lGV29nQUNnQ05DSVlJQkpxSUFBb0FqQWlHU0FSYWlBTklCQnFJQlVnRWlBUmMzRWdFWE5xUWI2djg4cDRha0VXZHlBVmFpSVFJQlVnRW5OeElCSnpha0dpb3NEY0JtcEJCM2NnRUdvaUVTQVFJQlZ6Y1NBVmMycEJrK1BoYkdwQkRIY2dFV29pRlNBUklCQnpjU0FRYzJwQmpvZmxzM3BxUVJGM0lCVnFJaEpxSUFjZ0ZXb2dEaUFSYWlBS0lCQnFJQklnRlNBUmMzRWdFWE5xUWFHUTBNMEVha0VXZHlBU2FpSVFJQkp6SUJWeElCSnpha0hpeXZpd2YycEJCWGNnRUdvaUVTQVFjeUFTY1NBUWMycEJ3T2FDZ254cVFRbDNJQkZxSWhJZ0VYTWdFSEVnRVhOcVFkRzArYklDYWtFT2R5QVNhaUlWYWlBSUlCSnFJQk1nRVdvZ0R5QVFhaUFWSUJKeklCRnhJQkp6YWtHcWo5dk5mbXBCRkhjZ0ZXb2lFQ0FWY3lBU2NTQVZjMnBCM2FDOHNYMXFRUVYzSUJCcUloRWdFSE1nRlhFZ0VITnFRZE9va0JKcVFRbDNJQkZxSWhJZ0VYTWdFSEVnRVhOcVFZSE5oOFY5YWtFT2R5QVNhaUlWYWlBSklCSnFJQllnRVdvZ0ZDQVFhaUFWSUJKeklCRnhJQkp6YWtISTk4KytmbXBCRkhjZ0ZXb2lFQ0FWY3lBU2NTQVZjMnBCNXB1SGp3SnFRUVYzSUJCcUloRWdFSE1nRlhFZ0VITnFRZGFQM0psOGFrRUpkeUFSYWlJU0lCRnpJQkJ4SUJGemFrR0htOVNtZjJwQkRuY2dFbW9pRldvZ0JpQVNhaUFZSUJGcUlCY2dFR29nRlNBU2N5QVJjU0FTYzJwQjdhbm9xZ1JxUVJSM0lCVnFJaEFnRlhNZ0VuRWdGWE5xUVlYU2o4OTZha0VGZHlBUWFpSVJJQkJ6SUJWeElCQnpha0g0eDc1bmFrRUpkeUFSYWlJU0lCRnpJQkJ4SUJGemFrSFpoYnk3Qm1wQkRuY2dFbW9pRldvZ0Z5QVNhaUFUSUJGcUlCa2dFR29nRlNBU2N5QVJjU0FTYzJwQmlwbXA2WGhxUVJSM0lCVnFJaEFnRlhNaUZTQVNjMnBCd3ZKb2FrRUVkeUFRYWlJUklCVnpha0dCN2NlN2VHcEJDM2NnRVdvaUVpQVJjeUlhSUJCemFrR2l3dlhzQm1wQkVIY2dFbW9pRldvZ0ZDQVNhaUFPSUJGcUlBa2dFR29nRlNBYWMycEJqUENVYjJwQkYzY2dGV29pRUNBVmN5SVZJQkp6YWtIRTFQdWxlbXBCQkhjZ0VHb2lFU0FWYzJwQnFaLzczZ1JxUVF0M0lCRnFJaElnRVhNaUNTQVFjMnBCNEpidHRYOXFRUkIzSUJKcUloVnFJQThnRW1vZ0dDQVJhaUFJSUJCcUlCVWdDWE5xUWZENC92Vjdha0VYZHlBVmFpSVFJQlZ6SWhVZ0VuTnFRY2I5N2NRQ2FrRUVkeUFRYWlJUklCVnpha0g2ejRUVmZtcEJDM2NnRVdvaUVpQVJjeUlJSUJCemFrR0Y0YnluZldwQkVIY2dFbW9pRldvZ0dTQVNhaUFXSUJGcUlBY2dFR29nRlNBSWMycEJoYnFnSkdwQkYzY2dGV29pRVNBVmN5SVFJQkp6YWtHNW9OUE9mV3BCQkhjZ0VXb2lFaUFRYzJwQjViUHV0bjVxUVF0M0lCSnFJaFVnRW5NaUJ5QVJjMnBCK1BtSi9RRnFRUkIzSUJWcUloQnFJQXdnRldvZ0R5QVNhaUFHSUJGcUlCQWdCM05xUWVXc3NhVjhha0VYZHlBUWFpSVJJQlZCZjNOeUlCQnpha0hFeEtTaGYycEJCbmNnRVdvaUVpQVFRWDl6Y2lBUmMycEJsLytybVFScVFRcDNJQkpxSWhBZ0VVRi9jM0lnRW5OcVFhZkgwTng2YWtFUGR5QVFhaUlWYWlBTElCQnFJQmtnRW1vZ0V5QVJhaUFWSUJKQmYzTnlJQkJ6YWtHNXdNNWtha0VWZHlBVmFpSVJJQkJCZjNOeUlCVnpha0hEcysycUJtcEJCbmNnRVdvaUVDQVZRWDl6Y2lBUmMycEJrcG16K0hocVFRcDNJQkJxSWhJZ0VVRi9jM0lnRUhOcVFmM292MzlxUVE5M0lCSnFJaFZxSUFvZ0Vtb2dGeUFRYWlBT0lCRnFJQlVnRUVGL2MzSWdFbk5xUWRHN2theDRha0VWZHlBVmFpSVFJQkpCZjNOeUlCVnpha0hQL0tIOUJtcEJCbmNnRUdvaUVTQVZRWDl6Y2lBUWMycEI0TTJ6Y1dwQkNuY2dFV29pRWlBUVFYOXpjaUFSYzJwQmxJYUZtSHBxUVE5M0lCSnFJaFZxSUEwZ0Vtb2dGQ0FSYWlBWUlCQnFJQlVnRVVGL2MzSWdFbk5xUWFHam9QQUVha0VWZHlBVmFpSVFJQkpCZjNOeUlCVnpha0dDL2MyNmYycEJCbmNnRUdvaUVTQVZRWDl6Y2lBUWMycEJ0ZVRyNlh0cVFRcDNJQkZxSWhJZ0VFRi9jM0lnRVhOcVFidWwzOVlDYWtFUGR5QVNhaUlWSUFScUlCWWdFR29nRlNBUlFYOXpjaUFTYzJwQmthZWIzSDVxUVJWM2FpRUVJQlVnQTJvaEF5QVNJQUpxSVFJZ0VTQUZhaUVGSUFCQndBQnFJUUFnQVVGQWFpSUJEUUFMUVFBZ0FqWUNsSWtCUVFBZ0F6WUNrSWtCUVFBZ0JEWUNqSWtCUVFBZ0JUWUNpSWtCSUFBTHp3TUJCSDlCQUNnQ2dJa0JRVDl4SWdCQm1Ja0Jha0dBQVRvQUFDQUFRUUZxSVFFQ1FBSkFBa0FDUUNBQVFUOXpJZ0pCQjBzTkFDQUNSUTBCSUFGQm1Ja0Jha0VBT2dBQUlBSkJBVVlOQVNBQVFacUpBV3BCQURvQUFDQUNRUUpHRFFFZ0FFR2JpUUZxUVFBNkFBQWdBa0VEUmcwQklBQkJuSWtCYWtFQU9nQUFJQUpCQkVZTkFTQUFRWjJKQVdwQkFEb0FBQ0FDUVFWR0RRRWdBRUdlaVFGcVFRQTZBQUFnQWtFR1JnMEJJQUJCbjRrQmFrRUFPZ0FBREFFTElBSkJDRVlOQWtFMklBQnJJUU1DUUNBQ1FRTnhJZ0FOQUNBRElRSU1BZ3RCQUNBQWF5RUNRUUFoQUFOQUlBQkJ6NGtCYWtFQU9nQUFJQUlnQUVGL2FpSUFSdzBBQ3lBRElBQnFJUUlNQVF0Qm1Ja0JRY0FBRUFNYVFRQWhBVUUzSVFOQk55RUNDeUFEUVFOSkRRQWdBVUdBaVFGcUlRQkJmeUVCQTBBZ0FDQUNha0VWYWtFQU5nQUFJQUJCZkdvaEFDQUNJQUZCQkdvaUFVY05BQXNMUVFCQkFDZ0NoSWtCTmdMVWlRRkJBRUVBS0FLQWlRRWlBRUVWZGpvQTA0a0JRUUFnQUVFTmRqb0Ewb2tCUVFBZ0FFRUZkam9BMFlrQlFRQWdBRUVEZENJQU9nRFFpUUZCQUNBQU5nS0FpUUZCbUlrQlFjQUFFQU1hUVFCQkFDa0NpSWtCTndPQUNVRUFRUUFwQXBDSkFUY0RpQWtMQmdCQmdJa0JDek1BUVFCQy9ybnJ4ZW1PbFprUU53S1FpUUZCQUVLQnhwUzZsdkhxNW04M0FvaUpBVUVBUWdBM0FvQ0pBU0FBRUFJUUJBc0xDd0VBUVlBSUN3U1lBQUFBXCI7XG52YXIgaGFzaCRkID0gXCI0MmZhNGQyOVwiO1xudmFyIHdhc21Kc29uJGQgPSB7XG5cdG5hbWU6IG5hbWUkZCxcblx0ZGF0YTogZGF0YSRkLFxuXHRoYXNoOiBoYXNoJGRcbn07XG5cbmNvbnN0IG11dGV4JGUgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkZSA9IG51bGw7XG4vKipcbiAqIENhbGN1bGF0ZXMgTUQ1IGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIG1kNShkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSRlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkZSwgd2FzbUpzb24kZCwgMTYpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGUgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRlLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkZS5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IE1ENSBoYXNoIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1ENSgpIHtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRkLCAxNikudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDE2LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSRjID0gXCJzaGExXCI7XG52YXIgZGF0YSRjID0gXCJBR0Z6YlFFQUFBQUJFUVJnQUFGL1lBRi9BR0FBQUdBQ2YzOEFBd2tJQUFFQ0F3RUNBQUVGQkFFQkFnSUdEZ0ovQVVIZ2lRVUxmd0JCZ0FnTEIzQUlCbTFsYlc5eWVRSUFEa2hoYzJoZlIyVjBRblZtWm1WeUFBQUpTR0Z6YUY5SmJtbDBBQUlMU0dGemFGOVZjR1JoZEdVQUJBcElZWE5vWDBacGJtRnNBQVVOU0dGemFGOUhaWFJUZEdGMFpRQUdEa2hoYzJoZlEyRnNZM1ZzWVhSbEFBY0tVMVJCVkVWZlUwbGFSUU1CQ3BvcUNBVUFRWUFKQzY4aUNnRitBbjhCZmdGL0FYNERmd0YrQVg4QmZrZC9RUUFnQUNrREVDSUJRaUNJcHlJQ1FSaDBJQUpCZ1A0RGNVRUlkSElnQVVJb2lLZEJnUDREY1NBQlFqaUlwM0p5SWdNZ0FDa0RDQ0lFUWlDSXB5SUNRUmgwSUFKQmdQNERjVUVJZEhJZ0JFSW9pS2RCZ1A0RGNTQUVRamlJcDNKeUlnVnpJQUFwQXlnaUJrSWdpS2NpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQVpDS0lpblFZRCtBM0VnQmtJNGlLZHljaUlIY3lBRXB5SUNRUmgwSUFKQmdQNERjVUVJZEhJZ0FrRUlka0dBL2dOeElBSkJHSFp5Y2lJSUlBQXBBd0FpQktjaUFrRVlkQ0FDUVlEK0EzRkJDSFJ5SUFKQkNIWkJnUDREY1NBQ1FSaDJjbklpQ1hNZ0FDa0RJQ0lLcHlJQ1FSaDBJQUpCZ1A0RGNVRUlkSElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUlMY3lBQUtRTXdJZ3hDSUlpbklnSkJHSFFnQWtHQS9nTnhRUWgwY2lBTVFpaUlwMEdBL2dOeElBeENPSWluY25JaUFuTkJBWGNpRFhOQkFYY2lEaUFGSUFSQ0lJaW5JZzlCR0hRZ0QwR0EvZ054UVFoMGNpQUVRaWlJcDBHQS9nTnhJQVJDT0lpbmNuSWlFSE1nQ2tJZ2lLY2lEMEVZZENBUFFZRCtBM0ZCQ0hSeUlBcENLSWluUVlEK0EzRWdDa0k0aUtkeWNpSVJjeUFBS1FNNElnU25JZzlCR0hRZ0QwR0EvZ054UVFoMGNpQVBRUWgyUVlEK0EzRWdEMEVZZG5KeUlnOXpRUUYzSWhKeklBY2dFWE1nRW5NZ0N5QUFLUU1ZSWdxbklnQkJHSFFnQUVHQS9nTnhRUWgwY2lBQVFRaDJRWUQrQTNFZ0FFRVlkbkp5SWhOeklBOXpJQTV6UVFGM0lnQnpRUUYzSWhSeklBMGdEM01nQUhNZ0FpQUhjeUFPY3lBR3B5SVZRUmgwSUJWQmdQNERjVUVJZEhJZ0ZVRUlka0dBL2dOeElCVkJHSFp5Y2lJV0lBdHpJQTF6SUFwQ0lJaW5JaFZCR0hRZ0ZVR0EvZ054UVFoMGNpQUtRaWlJcDBHQS9nTnhJQXBDT0lpbmNuSWlGeUFEY3lBQ2N5QUJweUlWUVJoMElCVkJnUDREY1VFSWRISWdGVUVJZGtHQS9nTnhJQlZCR0haeWNpSVlJQWh6SUJaeklBUkNJSWluSWhWQkdIUWdGVUdBL2dOeFFRaDBjaUFFUWlpSXAwR0EvZ054SUFSQ09JaW5jbklpRlhOQkFYY2lHWE5CQVhjaUduTkJBWGNpRzNOQkFYY2lISE5CQVhjaUhYTkJBWGNpSGlBU0lCVnpJQkVnRjNNZ0ZYTWdFeUFZY3lBTXB5SWZRUmgwSUI5QmdQNERjVUVJZEhJZ0gwRUlka0dBL2dOeElCOUJHSFp5Y2lJZ2N5QVNjMEVCZHlJZmMwRUJkeUloY3lBUElDQnpJQjl6SUJSelFRRjNJaUp6UVFGM0lpTnpJQlFnSVhNZ0kzTWdBQ0FmY3lBaWN5QWVjMEVCZHlJa2MwRUJkeUlsY3lBZElDSnpJQ1J6SUJ3Z0ZITWdIbk1nR3lBQWN5QWRjeUFhSUE1eklCeHpJQmtnRFhNZ0czTWdGU0FDY3lBYWN5QWdJQlp6SUJseklDRnpRUUYzSWlaelFRRjNJaWR6UVFGM0lpaHpRUUYzSWlselFRRjNJaXB6UVFGM0lpdHpRUUYzSWl4elFRRjNJaTBnSXlBbmN5QWhJQnB6SUNkeklCOGdHWE1nSm5NZ0kzTkJBWGNpTG5OQkFYY2lMM01nSWlBbWN5QXVjeUFsYzBFQmR5SXdjMEVCZHlJeGN5QWxJQzl6SURGeklDUWdMbk1nTUhNZ0xYTkJBWGNpTW5OQkFYY2lNM01nTENBd2N5QXljeUFySUNWeklDMXpJQ29nSkhNZ0xITWdLU0FlY3lBcmN5QW9JQjF6SUNweklDY2dISE1nS1hNZ0ppQWJjeUFvY3lBdmMwRUJkeUkwYzBFQmR5STFjMEVCZHlJMmMwRUJkeUkzYzBFQmR5STRjMEVCZHlJNWMwRUJkeUk2YzBFQmR5STdJREVnTlhNZ0x5QXBjeUExY3lBdUlDaHpJRFJ6SURGelFRRjNJanh6UVFGM0lqMXpJREFnTkhNZ1BITWdNM05CQVhjaVBuTkJBWGNpUDNNZ015QTljeUEvY3lBeUlEeHpJRDV6SUR0elFRRjNJa0J6UVFGM0lrRnpJRG9nUG5NZ1FITWdPU0F6Y3lBN2N5QTRJREp6SURweklEY2dMWE1nT1hNZ05pQXNjeUE0Y3lBMUlDdHpJRGR6SURRZ0tuTWdObk1nUFhOQkFYY2lRbk5CQVhjaVEzTkJBWGNpUkhOQkFYY2lSWE5CQVhjaVJuTkJBWGNpUjNOQkFYY2lTSE5CQVhjaVNTQStJRUp6SUR3Z05uTWdRbk1nUDNOQkFYY2lTbk1nUVhOQkFYY2lTeUE5SURkeklFTnpJRXB6UVFGM0lrd2dSQ0E1SURJZ01TQTBJQ2tnSFNBVUlCOGdGU0FXUVFBb0FvQ0pBU0pOUVFWM1FRQW9BcENKQVNKT2FpQUpha0VBS0FLTWlRRWlUMEVBS0FLSWlRRWlDWE5CQUNnQ2hJa0JJbEJ4SUU5emFrR1o4NG5VQldvaVVVRWVkeUpTSUFOcUlGQkJIbmNpQXlBRmFpQlBJQU1nQ1hNZ1RYRWdDWE5xSUJCcUlGRkJCWGRxUVpuemlkUUZhaUlRSUZJZ1RVRWVkeUlGYzNFZ0JYTnFJQWtnQ0dvZ1VTQURJQVZ6Y1NBRGMyb2dFRUVGZDJwQm1mT0oxQVZxSWxGQkJYZHFRWm56aWRRRmFpSlRJRkZCSG5jaUF5QVFRUjUzSWdoemNTQUljMm9nQlNBWWFpQlJJQWdnVW5OeElGSnphaUJUUVFWM2FrR1o4NG5VQldvaUJVRUZkMnBCbWZPSjFBVnFJaGhCSG5jaVVtb2dVMEVlZHlJV0lBdHFJQWdnRTJvZ0JTQVdJQU56Y1NBRGMyb2dHRUVGZDJwQm1mT0oxQVZxSWdnZ1VpQUZRUjUzSWd0emNTQUxjMm9nQXlBWGFpQVlJQXNnRm5OeElCWnphaUFJUVFWM2FrR1o4NG5VQldvaUJVRUZkMnBCbWZPSjFBVnFJaE1nQlVFZWR5SVdJQWhCSG5jaUEzTnhJQU56YWlBTElCRnFJQVVnQXlCU2MzRWdVbk5xSUJOQkJYZHFRWm56aWRRRmFpSVJRUVYzYWtHWjg0blVCV29pVWtFZWR5SUxhaUFDSUJOQkhuY2lGV29nQnlBRGFpQVJJQlVnRm5OeElCWnphaUJTUVFWM2FrR1o4NG5VQldvaUJ5QUxJQkZCSG5jaUFuTnhJQUp6YWlBZ0lCWnFJRklnQWlBVmMzRWdGWE5xSUFkQkJYZHFRWm56aWRRRmFpSVJRUVYzYWtHWjg0blVCV29pRmlBUlFSNTNJaFVnQjBFZWR5SUhjM0VnQjNOcUlBOGdBbW9nRVNBSElBdHpjU0FMYzJvZ0ZrRUZkMnBCbWZPSjFBVnFJZ3RCQlhkcVFabnppZFFGYWlJUlFSNTNJZ0pxSUJJZ0ZXb2dFU0FMUVI1M0lnOGdGa0VlZHlJU2MzRWdFbk5xSUEwZ0Iyb2dDeUFTSUJWemNTQVZjMm9nRVVFRmQycEJtZk9KMUFWcUlnMUJCWGRxUVpuemlkUUZhaUlWUVI1M0loOGdEVUVlZHlJSGN5QVpJQkpxSUEwZ0FpQVBjM0VnRDNOcUlCVkJCWGRxUVpuemlkUUZhaUlOYzJvZ0RpQVBhaUFWSUFjZ0FuTnhJQUp6YWlBTlFRVjNha0daODRuVUJXb2lBa0VGZDJwQm9kZm45Z1pxSWc1QkhuY2lEMm9nQUNBZmFpQUNRUjUzSWdBZ0RVRWVkeUlOY3lBT2Myb2dHaUFIYWlBTklCOXpJQUp6YWlBT1FRVjNha0doMStmMkJtb2lBa0VGZDJwQm9kZm45Z1pxSWc1QkhuY2lFaUFDUVI1M0loUnpJQ0VnRFdvZ0R5QUFjeUFDYzJvZ0RrRUZkMnBCb2RmbjlnWnFJZ0p6YWlBYklBQnFJQlFnRDNNZ0RuTnFJQUpCQlhkcVFhSFg1L1lHYWlJQVFRVjNha0doMStmMkJtb2lEVUVlZHlJT2FpQWNJQkpxSUFCQkhuY2lEeUFDUVI1M0lnSnpJQTF6YWlBbUlCUnFJQUlnRW5NZ0FITnFJQTFCQlhkcVFhSFg1L1lHYWlJQVFRVjNha0doMStmMkJtb2lEVUVlZHlJU0lBQkJIbmNpRkhNZ0lpQUNhaUFPSUE5eklBQnphaUFOUVFWM2FrR2gxK2YyQm1vaUFITnFJQ2NnRDJvZ0ZDQU9jeUFOYzJvZ0FFRUZkMnBCb2RmbjlnWnFJZ0pCQlhkcVFhSFg1L1lHYWlJTlFSNTNJZzVxSUNnZ0Vtb2dBa0VlZHlJUElBQkJIbmNpQUhNZ0RYTnFJQ01nRkdvZ0FDQVNjeUFDYzJvZ0RVRUZkMnBCb2RmbjlnWnFJZ0pCQlhkcVFhSFg1L1lHYWlJTlFSNTNJaElnQWtFZWR5SVVjeUFlSUFCcUlBNGdEM01nQW5OcUlBMUJCWGRxUWFIWDUvWUdhaUlBYzJvZ0xpQVBhaUFVSUE1eklBMXphaUFBUVFWM2FrR2gxK2YyQm1vaUFrRUZkMnBCb2RmbjlnWnFJZzFCSG5jaURtb2dLaUFBUVI1M0lnQnFJQTRnQWtFZWR5SVBjeUFrSUJScUlBQWdFbk1nQW5OcUlBMUJCWGRxUWFIWDUvWUdhaUlVYzJvZ0x5QVNhaUFQSUFCeklBMXphaUFVUVFWM2FrR2gxK2YyQm1vaURVRUZkMnBCb2RmbjlnWnFJZ0FnRFVFZWR5SUNjaUFVUVI1M0loSnhJQUFnQW5GeWFpQWxJQTlxSUJJZ0RuTWdEWE5xSUFCQkJYZHFRYUhYNS9ZR2FpSU5RUVYzYWtIYytlNzRlR29pRGtFZWR5SVBhaUExSUFCQkhuY2lBR29nS3lBU2FpQU5JQUJ5SUFKeElBMGdBSEZ5YWlBT1FRVjNha0hjK2U3NGVHb2lFaUFQY2lBTlFSNTNJZzF4SUJJZ0QzRnlhaUF3SUFKcUlBNGdEWElnQUhFZ0RpQU5jWEpxSUJKQkJYZHFRZHo1N3ZoNGFpSUFRUVYzYWtIYytlNzRlR29pQWlBQVFSNTNJZzV5SUJKQkhuY2lFbkVnQWlBT2NYSnFJQ3dnRFdvZ0FDQVNjaUFQY1NBQUlCSnhjbW9nQWtFRmQycEIzUG51K0hocUlnQkJCWGRxUWR6NTd2aDRhaUlOUVI1M0lnOXFJRHdnQWtFZWR5SUNhaUEySUJKcUlBQWdBbklnRG5FZ0FDQUNjWEpxSUExQkJYZHFRZHo1N3ZoNGFpSVNJQTl5SUFCQkhuY2lBSEVnRWlBUGNYSnFJQzBnRG1vZ0RTQUFjaUFDY1NBTklBQnhjbW9nRWtFRmQycEIzUG51K0hocUlnSkJCWGRxUWR6NTd2aDRhaUlOSUFKQkhuY2lEbklnRWtFZWR5SVNjU0FOSUE1eGNtb2dOeUFBYWlBQ0lCSnlJQTl4SUFJZ0VuRnlhaUFOUVFWM2FrSGMrZTc0ZUdvaUFFRUZkMnBCM1BudStIaHFJZ0pCSG5jaUQyb2dNeUFOUVI1M0lnMXFJRDBnRW1vZ0FDQU5jaUFPY1NBQUlBMXhjbW9nQWtFRmQycEIzUG51K0hocUloSWdEM0lnQUVFZWR5SUFjU0FTSUE5eGNtb2dPQ0FPYWlBQ0lBQnlJQTF4SUFJZ0FIRnlhaUFTUVFWM2FrSGMrZTc0ZUdvaUFrRUZkMnBCM1BudStIaHFJZzBnQWtFZWR5SU9jaUFTUVI1M0loSnhJQTBnRG5GeWFpQkNJQUJxSUFJZ0VuSWdEM0VnQWlBU2NYSnFJQTFCQlhkcVFkejU3dmg0YWlJQVFRVjNha0hjK2U3NGVHb2lBa0VlZHlJUGFpQkRJQTVxSUFJZ0FFRWVkeUlVY2lBTlFSNTNJZzF4SUFJZ0ZIRnlhaUErSUJKcUlBQWdEWElnRG5FZ0FDQU5jWEpxSUFKQkJYZHFRZHo1N3ZoNGFpSUFRUVYzYWtIYytlNzRlR29pQWtFZWR5SVNJQUJCSG5jaURuTWdPaUFOYWlBQUlBOXlJQlJ4SUFBZ0QzRnlhaUFDUVFWM2FrSGMrZTc0ZUdvaUFITnFJRDhnRkdvZ0FpQU9jaUFQY1NBQ0lBNXhjbW9nQUVFRmQycEIzUG51K0hocUlnSkJCWGRxUWRhRGk5TjhhaUlOUVI1M0lnOXFJRW9nRW1vZ0FrRWVkeUlVSUFCQkhuY2lBSE1nRFhOcUlEc2dEbW9nQUNBU2N5QUNjMm9nRFVFRmQycEIxb09MMDN4cUlnSkJCWGRxUWRhRGk5TjhhaUlOUVI1M0lnNGdBa0VlZHlJU2N5QkZJQUJxSUE4Z0ZITWdBbk5xSUExQkJYZHFRZGFEaTlOOGFpSUFjMm9nUUNBVWFpQVNJQTl6SUExemFpQUFRUVYzYWtIV2c0dlRmR29pQWtFRmQycEIxb09MMDN4cUlnMUJIbmNpRDJvZ1FTQU9haUFDUVI1M0loUWdBRUVlZHlJQWN5QU5jMm9nUmlBU2FpQUFJQTV6SUFKemFpQU5RUVYzYWtIV2c0dlRmR29pQWtFRmQycEIxb09MMDN4cUlnMUJIbmNpRGlBQ1FSNTNJaEp6SUVJZ09ITWdSSE1nVEhOQkFYY2lGU0FBYWlBUElCUnpJQUp6YWlBTlFRVjNha0hXZzR2VGZHb2lBSE5xSUVjZ0ZHb2dFaUFQY3lBTmMyb2dBRUVGZDJwQjFvT0wwM3hxSWdKQkJYZHFRZGFEaTlOOGFpSU5RUjUzSWc5cUlFZ2dEbW9nQWtFZWR5SVVJQUJCSG5jaUFITWdEWE5xSUVNZ09YTWdSWE1nRlhOQkFYY2lHU0FTYWlBQUlBNXpJQUp6YWlBTlFRVjNha0hXZzR2VGZHb2lBa0VGZDJwQjFvT0wwM3hxSWcxQkhuY2lEaUFDUVI1M0loSnpJRDhnUTNNZ1RITWdTM05CQVhjaUdpQUFhaUFQSUJSeklBSnphaUFOUVFWM2FrSFdnNHZUZkdvaUFITnFJRVFnT25NZ1JuTWdHWE5CQVhjaUd5QVVhaUFTSUE5eklBMXphaUFBUVFWM2FrSFdnNHZUZkdvaUFrRUZkMnBCMW9PTDAzeHFJZzFCSG5jaUR5Qk9hallDa0lrQlFRQWdUeUJLSUVSeklCVnpJQnB6UVFGM0loUWdFbW9nQUVFZWR5SUFJQTV6SUFKemFpQU5RUVYzYWtIV2c0dlRmR29pRWtFZWR5SVZhallDaklrQlFRQWdDU0JGSUR0eklFZHpJQnR6UVFGM0lBNXFJQUpCSG5jaUFpQUFjeUFOYzJvZ0VrRUZkMnBCMW9PTDAzeHFJZzFCSG5kcU5nS0lpUUZCQUNCUUlFQWdTbk1nUzNNZ1NYTkJBWGNnQUdvZ0R5QUNjeUFTYzJvZ0RVRUZkMnBCMW9PTDAzeHFJZ0JxTmdLRWlRRkJBQ0JOSUV3Z1JYTWdHWE1nRkhOQkFYZHFJQUpxSUJVZ0QzTWdEWE5xSUFCQkJYZHFRZGFEaTlOOGFqWUNnSWtCQ3pvQVFRQkMvcm5yeGVtT2xaa1FOd0tJaVFGQkFFS0J4cFM2bHZIcTVtODNBb0NKQVVFQVF2RER5NTRNTndLUWlRRkJBRUVBTmdLWWlRRUxxQU1CQ0g5QkFDRUNRUUJCQUNnQ2xJa0JJZ01nQVVFRGRHb2lCRFlDbElrQlFRQkJBQ2dDbUlrQklBUWdBMGxxSUFGQkhYWnFOZ0tZaVFFQ1FDQURRUU4yUVQ5eElnVWdBV3BCd0FCSkRRQkJ3QUFnQldzaUFrRURjU0VHUVFBaEF3SkFJQVZCUDNOQkEwa05BQ0FGUVlDSkFXb2hCeUFDUWZ3QWNTRUlRUUFoQXdOQUlBY2dBMm9pQkVFY2FpQUFJQU5xSWdrdEFBQTZBQUFnQkVFZGFpQUpRUUZxTFFBQU9nQUFJQVJCSG1vZ0NVRUNhaTBBQURvQUFDQUVRUjlxSUFsQkEyb3RBQUE2QUFBZ0NDQURRUVJxSWdOSERRQUxDd0pBSUFaRkRRQWdBQ0FEYWlFRUlBTWdCV3BCbklrQmFpRURBMEFnQXlBRUxRQUFPZ0FBSUFSQkFXb2hCQ0FEUVFGcUlRTWdCa0YvYWlJR0RRQUxDMEdjaVFFUUFTQUZRZjhBY3lFRFFRQWhCU0FESUFGUERRQURRQ0FBSUFKcUVBRWdBa0gvQUdvaEF5QUNRY0FBYWlJRUlRSWdBeUFCU1EwQUN5QUVJUUlMQWtBZ0FTQUNSZzBBSUFFZ0Ftc2hDU0FBSUFKcUlRSWdCVUdjaVFGcUlRTkJBQ0VFQTBBZ0F5QUNMUUFBT2dBQUlBSkJBV29oQWlBRFFRRnFJUU1nQ1NBRVFRRnFJZ1JCL3dGeFN3MEFDd3NMQ1FCQmdBa2dBQkFEQzZZREFRSi9Jd0JCRUdzaUFDUUFJQUJCZ0FFNkFBY2dBRUVBS0FLWWlRRWlBVUVZZENBQlFZRCtBM0ZCQ0hSeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JMkFBZ2dBRUVBS0FLVWlRRWlBVUVZZENBQlFZRCtBM0ZCQ0hSeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JMkFBd2dBRUVIYWtFQkVBTUNRRUVBS0FLVWlRRkIrQU54UWNBRFJnMEFBMEFnQUVFQU9nQUhJQUJCQjJwQkFSQURRUUFvQXBTSkFVSDRBM0ZCd0FOSERRQUxDeUFBUVFocVFRZ1FBMEVBUVFBb0FvQ0pBU0lCUVJoMElBRkJnUDREY1VFSWRISWdBVUVJZGtHQS9nTnhJQUZCR0haeWNqWUNnQWxCQUVFQUtBS0VpUUVpQVVFWWRDQUJRWUQrQTNGQkNIUnlJQUZCQ0haQmdQNERjU0FCUVJoMmNuSTJBb1FKUVFCQkFDZ0NpSWtCSWdGQkdIUWdBVUdBL2dOeFFRaDBjaUFCUVFoMlFZRCtBM0VnQVVFWWRuSnlOZ0tJQ1VFQVFRQW9Bb3lKQVNJQlFSaDBJQUZCZ1A0RGNVRUlkSElnQVVFSWRrR0EvZ054SUFGQkdIWnljallDakFsQkFFRUFLQUtRaVFFaUFVRVlkQ0FCUVlEK0EzRkJDSFJ5SUFGQkNIWkJnUDREY1NBQlFSaDJjbkkyQXBBSklBQkJFR29rQUFzR0FFR0FpUUVMUXdCQkFFTCt1ZXZGNlk2Vm1SQTNBb2lKQVVFQVFvSEdsTHFXOGVybWJ6Y0NnSWtCUVFCQzhNUExuZ3czQXBDSkFVRUFRUUEyQXBpSkFVR0FDU0FBRUFNUUJRc0xDd0VBUVlBSUN3UmNBQUFBXCI7XG52YXIgaGFzaCRjID0gXCI2YjUzMGMyNFwiO1xudmFyIHdhc21Kc29uJGMgPSB7XG5cdG5hbWU6IG5hbWUkYyxcblx0ZGF0YTogZGF0YSRjLFxuXHRoYXNoOiBoYXNoJGNcbn07XG5cbmNvbnN0IG11dGV4JGQgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkZCA9IG51bGw7XG4vKipcbiAqIENhbGN1bGF0ZXMgU0hBLTEgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc2hhMShkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSRkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkZCwgd2FzbUpzb24kYywgMjApXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGQgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRkLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkZC5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFNIQS0xIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU0hBMSgpIHtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRjLCAyMCkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDIwLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSRiID0gXCJzaGEzXCI7XG52YXIgZGF0YSRiID0gXCJBR0Z6YlFFQUFBQUJGQVJnQUFGL1lBRi9BR0FDZjM4QVlBTi9mMzhBQXdnSEFBRUJBZ0VBQXdVRUFRRUNBZ1lPQW44QlFaQ05CUXQvQUVHQUNBc0hjQWdHYldWdGIzSjVBZ0FPU0dGemFGOUhaWFJDZFdabVpYSUFBQWxJWVhOb1gwbHVhWFFBQVF0SVlYTm9YMVZ3WkdGMFpRQUNDa2hoYzJoZlJtbHVZV3dBQkExSVlYTm9YMGRsZEZOMFlYUmxBQVVPU0dGemFGOURZV3hqZFd4aGRHVUFCZ3BUVkVGVVJWOVRTVnBGQXdFS3FCd0hCUUJCZ0FvTDF3TUFRUUJDQURjRGdJMEJRUUJDQURjRCtJd0JRUUJDQURjRDhJd0JRUUJDQURjRDZJd0JRUUJDQURjRDRJd0JRUUJDQURjRDJJd0JRUUJDQURjRDBJd0JRUUJDQURjRHlJd0JRUUJDQURjRHdJd0JRUUJDQURjRHVJd0JRUUJDQURjRHNJd0JRUUJDQURjRHFJd0JRUUJDQURjRG9Jd0JRUUJDQURjRG1Jd0JRUUJDQURjRGtJd0JRUUJDQURjRGlJd0JRUUJDQURjRGdJd0JRUUJDQURjRCtJc0JRUUJDQURjRDhJc0JRUUJDQURjRDZJc0JRUUJDQURjRDRJc0JRUUJDQURjRDJJc0JRUUJDQURjRDBJc0JRUUJDQURjRHlJc0JRUUJDQURjRHdJc0JRUUJDQURjRHVJc0JRUUJDQURjRHNJc0JRUUJDQURjRHFJc0JRUUJDQURjRG9Jc0JRUUJDQURjRG1Jc0JRUUJDQURjRGtJc0JRUUJDQURjRGlJc0JRUUJDQURjRGdJc0JRUUJDQURjRCtJb0JRUUJDQURjRDhJb0JRUUJDQURjRDZJb0JRUUJDQURjRDRJb0JRUUJDQURjRDJJb0JRUUJDQURjRDBJb0JRUUJDQURjRHlJb0JRUUJDQURjRHdJb0JRUUJDQURjRHVJb0JRUUJDQURjRHNJb0JRUUJDQURjRHFJb0JRUUJDQURjRG9Jb0JRUUJDQURjRG1Jb0JRUUJDQURjRGtJb0JRUUJDQURjRGlJb0JRUUJDQURjRGdJb0JRUUJCd0F3Z0FFRUJkR3RCQTNZMkFveU5BVUVBUVFBMkFvaU5BUXVNQXdFSWZ3SkFRUUFvQW9pTkFTSUJRUUJJRFFCQkFDQUJJQUJxUVFBb0FveU5BU0lDY0RZQ2lJMEJBa0FDUUNBQkRRQkJnQW9oQXd3QkN3SkFJQUlnQVdzaUJDQUFJQVFnQUVrYklnTkZEUUFnQTBFRGNTRUZRUUFoQmdKQUlBTkJCRWtOQUNBQlFZQ0tBV29oQnlBRFFYeHhJUWhCQUNFR0EwQWdCeUFHYWlJRFFjZ0JhaUFHUVlBS2FpMEFBRG9BQUNBRFFja0JhaUFHUVlFS2FpMEFBRG9BQUNBRFFjb0JhaUFHUVlJS2FpMEFBRG9BQUNBRFFjc0JhaUFHUVlNS2FpMEFBRG9BQUNBSUlBWkJCR29pQmtjTkFBc0xJQVZGRFFBZ0FVSElpd0ZxSVFNRFFDQURJQVpxSUFaQmdBcHFMUUFBT2dBQUlBWkJBV29oQmlBRlFYOXFJZ1VOQUFzTElBUWdBRXNOQVVISWl3RWdBaEFESUFBZ0JHc2hBQ0FFUVlBS2FpRURDd0pBSUFBZ0Fra05BQU5BSUFNZ0FoQURJQU1nQW1vaEF5QUFJQUpySWdBZ0FrOE5BQXNMSUFCRkRRQkJBQ0VDUWNnQklRWURRQ0FHUVlDS0FXb2dBeUFHYWtHNGZtb3RBQUE2QUFBZ0JrRUJhaUVHSUFBZ0FrRUJhaUlDUWY4QmNVc05BQXNMQytRTEFTMStJQUFwQTBBaEFrRUFLUVBBaWdFaEF5QUFLUU00SVFSQkFDa0R1SW9CSVFVZ0FDa0RNQ0VHUVFBcEE3Q0tBU0VISUFBcEF5Z2hDRUVBS1FPb2lnRWhDU0FBS1FNZ0lRcEJBQ2tEb0lvQklRc2dBQ2tER0NFTVFRQXBBNWlLQVNFTklBQXBBeEFoRGtFQUtRT1FpZ0VoRHlBQUtRTUlJUkJCQUNrRGlJb0JJUkVnQUNrREFDRVNRUUFwQTRDS0FTRVRRUUFwQThpS0FTRVVBa0FDUUNBQlFjZ0FTdzBBUVFBcEE5Q0tBU0VWUVFBcEErQ0tBU0VXUVFBcEE5aUtBU0VYREFFTFFRQXBBK0NLQVNBQUtRTmdoU0VXUVFBcEE5aUtBU0FBS1FOWWhTRVhRUUFwQTlDS0FTQUFLUU5RaFNFVklCUWdBQ2tEU0lVaEZDQUJRZWtBU1EwQVFRQkJBQ2tENklvQklBQXBBMmlGTndQb2lnRkJBRUVBS1FQd2lnRWdBQ2tEY0lVM0EvQ0tBVUVBUVFBcEEvaUtBU0FBS1FONGhUY0QrSW9CUVFCQkFDa0RnSXNCSUFBcEE0QUJoVGNEZ0lzQklBRkJpUUZKRFFCQkFFRUFLUU9JaXdFZ0FDa0RpQUdGTndPSWl3RUxJQU1nQW9VaEdDQUZJQVNGSVJrZ0J5QUdoU0VISUFrZ0NJVWhDQ0FMSUFxRklSb2dEU0FNaFNFSklBOGdEb1VoQ2lBUklCQ0ZJUXNnRXlBU2hTRU1RUUFwQTdpTEFTRVNRUUFwQTVDTEFTRVRRUUFwQStpS0FTRWJRUUFwQTZDTEFTRWNRUUFwQS9pS0FTRU5RUUFwQTdDTEFTRWRRUUFwQTRpTEFTRU9RUUFwQThDTEFTRVBRUUFwQTVpTEFTRWVRUUFwQS9DS0FTRVFRUUFwQTZpTEFTRVJRUUFwQTRDTEFTRWZRY0IrSVFBRFFDQWFJQWNnQzRVZ0Y0VWdINFVnRVlWQ0FZbUZJQlNGSUJDRklCNkZJQStGSVFJZ0RDQVpJQXFGSUJhRklBNkZJQjJGUWdHSmhTQUloU0FWaFNBTmhTQWNoU0lESUFlRklTQWdDU0FJSUF5RklCV0ZJQTJGSUJ5RlFnR0poU0FZaFNBYmhTQVRoU0FTaFNJRUlBK0ZJU0VnR0NBS0lCUWdHb1VnRUlVZ0hvVWdENFZDQVltRklCbUZJQmFGSUE2RklCMkZJZ1dGUWplSklpSWdDeUFZSUFtRklCdUZJQk9GSUJLRlFnR0poU0FIaFNBWGhTQWZoU0FSaFNJR0lBcUZRajZKSWlOQ2Y0V0RJQU1nRVlWQ0Fva2lKSVVoRHlBTklBS0ZRaW1KSWlVZ0JDQVFoVUluaVNJbVFuK0ZneUFpaFNFUklCSWdCWVZDT0lraUVpQUdJQTZGUWcrSklpZENmNFdESUFNZ0Y0VkNDb2tpS0lVaERpQUVJQnFGUWh1Sklpa2dLQ0FJSUFLRlFpU0pJaXBDZjRXRGhTRU5JQVlnR1lWQ0Jva2lLeUFESUF1RlFnR0pJaXhDZjRXRElCd2dBb1ZDRW9raUxZVWhFQ0FySUFRZ0hvVkNDSWtpTGlBYklBV0ZRaG1KSWh0Q2Y0V0RoU0VYSUFZZ0hZVkNQWWtpR1NBRUlCU0ZRaFNKSWdRZ0NTQUZoVUljaVNJSVFuK0ZnNFVoRkNBSUlCbENmNFdESUFNZ0g0VkNMWWtpQTRVaEdDQVpJQU5DZjRXRElCVWdBb1ZDQTRraUNZVWhHU0FFSUFNZ0NVSi9oWU9GSVFjZ0NTQUVRbitGZ3lBSWhTRUlJQXdnQW9VaUFpQWhRZzZKSWdOQ2Y0V0RJQk1nQllWQ0ZZa2lCSVVoQ1NBR0lCYUZRaXVKSWdVZ0F5QUVRbitGZzRVaENpQUVJQVZDZjRXRElDQkNMSWtpQklVaEN5QUFRZEFKYWlrREFDQUZJQVJDZjRXRGhTQUNoU0VNSUNjZ0tFSi9oWU1nS29VaUJTRWZJQU1nQkNBQ1FuK0ZnNFVpQWlFYUlDb2dLVUovaFlNZ0VvVWlBeUVlSUMwZ0xrSi9oWU1nRzRVaUJDRVdJQ1lnSkNBbFFuK0ZnNFVpQmlFZElCc2dLMEovaFlNZ0xJVWlLQ0VWSUNNZ0ppQWlRbitGZzRVaUlpRWNJQzRnTENBdFFuK0ZnNFVpSmlFYklDY2dLU0FTUW4rRmc0VWlKeUVUSUNNZ0pFSi9oWU1nSllVaUl5RVNJQUJCQ0dvaUFBMEFDMEVBSUJFM0E2aUxBVUVBSUFVM0E0Q0xBVUVBSUJjM0E5aUtBVUVBSUFjM0E3Q0tBVUVBSUFzM0E0aUtBVUVBSUE4M0E4Q0xBVUVBSUFNM0E1aUxBVUVBSUJBM0EvQ0tBVUVBSUJRM0E4aUtBVUVBSUFJM0E2Q0tBVUVBSUFZM0E3Q0xBVUVBSUE0M0E0aUxBVUVBSUFRM0ErQ0tBVUVBSUJrM0E3aUtBVUVBSUFvM0E1Q0tBVUVBSUNJM0E2Q0xBVUVBSUEwM0EvaUtBVUVBSUNnM0E5Q0tBVUVBSUFnM0E2aUtBVUVBSUF3M0E0Q0tBVUVBSUNNM0E3aUxBVUVBSUNjM0E1Q0xBVUVBSUNZM0EraUtBVUVBSUJnM0E4Q0tBVUVBSUFrM0E1aUtBUXY0QWdFRmYwSGtBRUVBS0FLTWpRRWlBVUVCZG1zaEFnSkFRUUFvQW9pTkFTSURRUUJJRFFBZ0FTRUVBa0FnQVNBRFJnMEFJQU5CeUlzQmFpRUZRUUFoQXdOQUlBVWdBMnBCQURvQUFDQURRUUZxSWdNZ0FVRUFLQUtJalFFaUJHdEpEUUFMQ3lBRVFjaUxBV29pQXlBRExRQUFJQUJ5T2dBQUlBRkJ4NHNCYWlJRElBTXRBQUJCZ0FGeU9nQUFRY2lMQVNBQkVBTkJBRUdBZ0lDQWVEWUNpSTBCQ3dKQUlBSkJCRWtOQUNBQ1FRSjJJZ05CQTNFaEJVRUFJUVFDUUNBRFFYOXFRUU5KRFFBZ0EwSDgvLy8vQTNFaEFVRUFJUU5CQUNFRUEwQWdBMEdBQ21vZ0EwR0FpZ0ZxS0FJQU5nSUFJQU5CaEFwcUlBTkJoSW9CYWlnQ0FEWUNBQ0FEUVlnS2FpQURRWWlLQVdvb0FnQTJBZ0FnQTBHTUNtb2dBMEdNaWdGcUtBSUFOZ0lBSUFOQkVHb2hBeUFCSUFSQkJHb2lCRWNOQUFzTElBVkZEUUFnQlVFQ2RDRUJJQVJCQW5RaEF3TkFJQU5CZ0FwcUlBTkJnSW9CYWlnQ0FEWUNBQ0FEUVFScUlRTWdBVUY4YWlJQkRRQUxDd3NHQUVHQWlnRUwwUVlCQTM5QkFFSUFOd09BalFGQkFFSUFOd1A0akFGQkFFSUFOd1B3akFGQkFFSUFOd1BvakFGQkFFSUFOd1BnakFGQkFFSUFOd1BZakFGQkFFSUFOd1BRakFGQkFFSUFOd1BJakFGQkFFSUFOd1BBakFGQkFFSUFOd080akFGQkFFSUFOd093akFGQkFFSUFOd09vakFGQkFFSUFOd09nakFGQkFFSUFOd09ZakFGQkFFSUFOd09RakFGQkFFSUFOd09JakFGQkFFSUFOd09BakFGQkFFSUFOd1A0aXdGQkFFSUFOd1B3aXdGQkFFSUFOd1BvaXdGQkFFSUFOd1BnaXdGQkFFSUFOd1BZaXdGQkFFSUFOd1BRaXdGQkFFSUFOd1BJaXdGQkFFSUFOd1BBaXdGQkFFSUFOd080aXdGQkFFSUFOd093aXdGQkFFSUFOd09vaXdGQkFFSUFOd09naXdGQkFFSUFOd09ZaXdGQkFFSUFOd09RaXdGQkFFSUFOd09JaXdGQkFFSUFOd09BaXdGQkFFSUFOd1A0aWdGQkFFSUFOd1B3aWdGQkFFSUFOd1BvaWdGQkFFSUFOd1BnaWdGQkFFSUFOd1BZaWdGQkFFSUFOd1BRaWdGQkFFSUFOd1BJaWdGQkFFSUFOd1BBaWdGQkFFSUFOd080aWdGQkFFSUFOd093aWdGQkFFSUFOd09vaWdGQkFFSUFOd09naWdGQkFFSUFOd09ZaWdGQkFFSUFOd09RaWdGQkFFSUFOd09JaWdGQkFFSUFOd09BaWdGQkFFSEFEQ0FCUVFGMGEwRURkallDakkwQlFRQkJBRFlDaUkwQklBQVFBa0hrQUVFQUtBS01qUUVpQUVFQmRtc2hBd0pBUVFBb0FvaU5BU0lCUVFCSURRQWdBQ0VFQWtBZ0FDQUJSZzBBSUFGQnlJc0JhaUVGUVFBaEFRTkFJQVVnQVdwQkFEb0FBQ0FCUVFGcUlnRWdBRUVBS0FLSWpRRWlCR3RKRFFBTEN5QUVRY2lMQVdvaUFTQUJMUUFBSUFKeU9nQUFJQUJCeDRzQmFpSUJJQUV0QUFCQmdBRnlPZ0FBUWNpTEFTQUFFQU5CQUVHQWdJQ0FlRFlDaUkwQkN3SkFJQU5CQkVrTkFDQURRUUoySWdGQkEzRWhCVUVBSVFRQ1FDQUJRWDlxUVFOSkRRQWdBVUg4Ly8vL0EzRWhBRUVBSVFGQkFDRUVBMEFnQVVHQUNtb2dBVUdBaWdGcUtBSUFOZ0lBSUFGQmhBcHFJQUZCaElvQmFpZ0NBRFlDQUNBQlFZZ0thaUFCUVlpS0FXb29BZ0EyQWdBZ0FVR01DbW9nQVVHTWlnRnFLQUlBTmdJQUlBRkJFR29oQVNBQUlBUkJCR29pQkVjTkFBc0xJQVZGRFFBZ0JVRUNkQ0VBSUFSQkFuUWhBUU5BSUFGQmdBcHFJQUZCZ0lvQmFpZ0NBRFlDQUNBQlFRUnFJUUVnQUVGOGFpSUFEUUFMQ3dzTDJBRUJBRUdBQ0F2UUFaQUJBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUlLQUFBQUFBQUFBaW9BQUFBQUFBSUFBZ0FDQUFBQUFnSXVBQUFBQUFBQUFBUUFBZ0FBQUFBQ0JnQUNBQUFBQWdBbUFBQUFBQUFDQWlnQUFBQUFBQUFDSUFBQUFBQUFBQUFtQUFJQUFBQUFBQ2dBQWdBQUFBQUNMZ0FDQUFBQUFBSXNBQUFBQUFBQ0FpWUFBQUFBQUFJQURnQUFBQUFBQWdBS0FBQUFBQUFDQWdBQUFBQUFBQUlBS2dBQUFBQUFBQUFvQUFJQUFBQUNBZ1lBQWdBQUFBSUNBZ0FBQUFBQUFnQUVBQUlBQUFBQUFDSUFBZ0FBQUFJQT1cIjtcbnZhciBoYXNoJGIgPSBcImYyZjZmNWIyXCI7XG52YXIgd2FzbUpzb24kYiA9IHtcblx0bmFtZTogbmFtZSRiLFxuXHRkYXRhOiBkYXRhJGIsXG5cdGhhc2g6IGhhc2gkYlxufTtcblxuY29uc3QgbXV0ZXgkYyA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSRjID0gbnVsbDtcbmZ1bmN0aW9uIHZhbGlkYXRlQml0cyQxKGJpdHMpIHtcbiAgICBpZiAoIVsyMjQsIDI1NiwgMzg0LCA1MTJdLmluY2x1ZGVzKGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgdmFyaWFudCEgVmFsaWQgdmFsdWVzOiAyMjQsIDI1NiwgMzg0LCA1MTInKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgU0hBLTMgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEBwYXJhbSBiaXRzIE51bWJlciBvZiBvdXRwdXQgYml0cy4gVmFsaWQgdmFsdWVzOiAyMjQsIDI1NiwgMzg0LCA1MTJcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc2hhMyhkYXRhLCBiaXRzID0gNTEyKSB7XG4gICAgaWYgKHZhbGlkYXRlQml0cyQxKGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZUJpdHMkMShiaXRzKSk7XG4gICAgfVxuICAgIGNvbnN0IGhhc2hMZW5ndGggPSBiaXRzIC8gODtcbiAgICBpZiAod2FzbUNhY2hlJGMgPT09IG51bGwgfHwgd2FzbUNhY2hlJGMuaGFzaExlbmd0aCAhPT0gaGFzaExlbmd0aCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JGMsIHdhc21Kc29uJGIsIGhhc2hMZW5ndGgpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJGMgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSRjLmNhbGN1bGF0ZShkYXRhLCBiaXRzLCAweDA2KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkYy5jYWxjdWxhdGUoZGF0YSwgYml0cywgMHgwNik7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFNIQS0zIGhhc2ggaW5zdGFuY2VcbiAqIEBwYXJhbSBiaXRzIE51bWJlciBvZiBvdXRwdXQgYml0cy4gVmFsaWQgdmFsdWVzOiAyMjQsIDI1NiwgMzg0LCA1MTJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU0hBMyhiaXRzID0gNTEyKSB7XG4gICAgaWYgKHZhbGlkYXRlQml0cyQxKGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZUJpdHMkMShiaXRzKSk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dFNpemUgPSBiaXRzIC8gODtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRiLCBvdXRwdXRTaXplKS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdChiaXRzKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoYml0cyk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSwgMHgwNiksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogMjAwIC0gMiAqIG91dHB1dFNpemUsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiBvdXRwdXRTaXplLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG5jb25zdCBtdXRleCRiID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJGIgPSBudWxsO1xuZnVuY3Rpb24gdmFsaWRhdGVCaXRzKGJpdHMpIHtcbiAgICBpZiAoIVsyMjQsIDI1NiwgMzg0LCA1MTJdLmluY2x1ZGVzKGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgdmFyaWFudCEgVmFsaWQgdmFsdWVzOiAyMjQsIDI1NiwgMzg0LCA1MTInKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgS2VjY2FrIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gYml0cyBOdW1iZXIgb2Ygb3V0cHV0IGJpdHMuIFZhbGlkIHZhbHVlczogMjI0LCAyNTYsIDM4NCwgNTEyXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGtlY2NhayhkYXRhLCBiaXRzID0gNTEyKSB7XG4gICAgaWYgKHZhbGlkYXRlQml0cyhiaXRzKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVCaXRzKGJpdHMpKTtcbiAgICB9XG4gICAgY29uc3QgaGFzaExlbmd0aCA9IGJpdHMgLyA4O1xuICAgIGlmICh3YXNtQ2FjaGUkYiA9PT0gbnVsbCB8fCB3YXNtQ2FjaGUkYi5oYXNoTGVuZ3RoICE9PSBoYXNoTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkYiwgd2FzbUpzb24kYiwgaGFzaExlbmd0aClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkYiA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGIuY2FsY3VsYXRlKGRhdGEsIGJpdHMsIDB4MDEpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSRiLmNhbGN1bGF0ZShkYXRhLCBiaXRzLCAweDAxKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgS2VjY2FrIGhhc2ggaW5zdGFuY2VcbiAqIEBwYXJhbSBiaXRzIE51bWJlciBvZiBvdXRwdXQgYml0cy4gVmFsaWQgdmFsdWVzOiAyMjQsIDI1NiwgMzg0LCA1MTJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlS2VjY2FrKGJpdHMgPSA1MTIpIHtcbiAgICBpZiAodmFsaWRhdGVCaXRzKGJpdHMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZUJpdHMoYml0cykpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRTaXplID0gYml0cyAvIDg7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kYiwgb3V0cHV0U2l6ZSkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoYml0cyk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KGJpdHMpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUsIDB4MDEpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDIwMCAtIDIgKiBvdXRwdXRTaXplLFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogb3V0cHV0U2l6ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkYSA9IFwic2hhMjU2XCI7XG52YXIgZGF0YSRhID0gXCJBR0Z6YlFFQUFBQUJFUVJnQUFGL1lBRi9BR0FBQUdBQ2YzOEFBd2dIQUFFQkFRSUFBd1VFQVFFQ0FnWU9BbjhCUWZDSkJRdC9BRUdBQ0FzSGNBZ0diV1Z0YjNKNUFnQU9TR0Z6YUY5SFpYUkNkV1ptWlhJQUFBbElZWE5vWDBsdWFYUUFBUXRJWVhOb1gxVndaR0YwWlFBQ0NraGhjMmhmUm1sdVlXd0FCQTFJWVhOb1gwZGxkRk4wWVhSbEFBVU9TR0Z6YUY5RFlXeGpkV3hoZEdVQUJncFRWRUZVUlY5VFNWcEZBd0VLb0VvSEJRQkJnQWtMblFFQVFRQkNBRGNEd0lrQlFRQkJIRUVnSUFCQjRBRkdJZ0FiTmdMb2lRRkJBRUtubithbnh2U1QvYjUvUXF1emoveVJvN1B3MndBZ0FCczNBK0NKQVVFQVFyR1dnUDZmb29XczZBQkMvNlM1aU1XUjJvS2JmeUFBR3pjRDJJa0JRUUJDbDdyRGc1T25sb2QzUXZMbXUrT2pwLzJucFg4Z0FCczNBOUNKQVVFQVF0aTlsb2o4b0xXK05rTG56S2ZRMXREcnM3dC9JQUFiTndQSWlRRUw3d0lDQVg0R2YwRUFRUUFwQThDSkFTSUJJQUN0ZkRjRHdJa0JBa0FDUUFKQUlBR25RVDl4SWdJTkFFR0FDU0VEREFFTEFrQkJ3QUFnQW1zaUJDQUFJQVFnQUVrYklnTkZEUUFnQTBFRGNTRUZJQUpCZ0lrQmFpRUdRUUFoQWdKQUlBTkJCRWtOQUNBRFFmd0FjU0VIUVFBaEFnTkFJQVlnQW1vaUF5QUNRWUFKYWkwQUFEb0FBQ0FEUVFGcUlBSkJnUWxxTFFBQU9nQUFJQU5CQW1vZ0FrR0NDV290QUFBNkFBQWdBMEVEYWlBQ1FZTUphaTBBQURvQUFDQUhJQUpCQkdvaUFrY05BQXNMSUFWRkRRQURRQ0FHSUFKcUlBSkJnQWxxTFFBQU9nQUFJQUpCQVdvaEFpQUZRWDlxSWdVTkFBc0xJQVFnQUVzTkFVR0FpUUVRQXlBQUlBUnJJUUFnQkVHQUNXb2hBd3NDUUNBQVFjQUFTUTBBQTBBZ0F4QURJQU5Cd0FCcUlRTWdBRUZBYWlJQVFUOUxEUUFMQ3lBQVJRMEFRUUFoQWtFQUlRVURRQ0FDUVlDSkFXb2dBeUFDYWkwQUFEb0FBQ0FDUVFGcUlRSWdBQ0FGUVFGcUlnVkIvd0Z4U3cwQUN3c0xvejRCUlg5QkFDQUFLQUk4SWdGQkdIUWdBVUdBL2dOeFFRaDBjaUFCUVFoMlFZRCtBM0VnQVVFWWRuSnlJZ0ZCR1hjZ0FVRU9kM01nQVVFRGRuTWdBQ2dDT0NJQ1FSaDBJQUpCZ1A0RGNVRUlkSElnQWtFSWRrR0EvZ054SUFKQkdIWnljaUlDYWlBQUtBSWdJZ05CR0hRZ0EwR0EvZ054UVFoMGNpQURRUWgyUVlEK0EzRWdBMEVZZG5KeUlnUkJHWGNnQkVFT2QzTWdCRUVEZG5NZ0FDZ0NIQ0lEUVJoMElBTkJnUDREY1VFSWRISWdBMEVJZGtHQS9nTnhJQU5CR0haeWNpSUZhaUFBS0FJRUlnTkJHSFFnQTBHQS9nTnhRUWgwY2lBRFFRaDJRWUQrQTNFZ0EwRVlkbkp5SWdaQkdYY2dCa0VPZDNNZ0JrRURkbk1nQUNnQ0FDSURRUmgwSUFOQmdQNERjVUVJZEhJZ0EwRUlka0dBL2dOeElBTkJHSFp5Y2lJSGFpQUFLQUlrSWdOQkdIUWdBMEdBL2dOeFFRaDBjaUFEUVFoMlFZRCtBM0VnQTBFWWRuSnlJZ2hxSUFKQkQzY2dBa0VOZDNNZ0FrRUtkbk5xSWdOcUlBQW9BaGdpQ1VFWWRDQUpRWUQrQTNGQkNIUnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWlDa0VaZHlBS1FRNTNjeUFLUVFOMmN5QUFLQUlVSWdsQkdIUWdDVUdBL2dOeFFRaDBjaUFKUVFoMlFZRCtBM0VnQ1VFWWRuSnlJZ3RxSUFKcUlBQW9BaEFpQ1VFWWRDQUpRWUQrQTNGQkNIUnlJQWxCQ0haQmdQNERjU0FKUVJoMmNuSWlERUVaZHlBTVFRNTNjeUFNUVFOMmN5QUFLQUlNSWdsQkdIUWdDVUdBL2dOeFFRaDBjaUFKUVFoMlFZRCtBM0VnQ1VFWWRuSnlJZzFxSUFBb0FqQWlDVUVZZENBSlFZRCtBM0ZCQ0hSeUlBbEJDSFpCZ1A0RGNTQUpRUmgyY25JaURtb2dBQ2dDQ0NJSlFSaDBJQWxCZ1A0RGNVRUlkSElnQ1VFSWRrR0EvZ054SUFsQkdIWnljaUlQUVJsM0lBOUJEbmR6SUE5QkEzWnpJQVpxSUFBb0FpZ2lDVUVZZENBSlFZRCtBM0ZCQ0hSeUlBbEJDSFpCZ1A0RGNTQUpRUmgyY25JaUVHb2dBVUVQZHlBQlFRMTNjeUFCUVFwMmMyb2lDVUVQZHlBSlFRMTNjeUFKUVFwMmMyb2lFVUVQZHlBUlFRMTNjeUFSUVFwMmMyb2lFa0VQZHlBU1FRMTNjeUFTUVFwMmMyb2lFMm9nQUNnQ05DSVVRUmgwSUJSQmdQNERjVUVJZEhJZ0ZFRUlka0dBL2dOeElCUkJHSFp5Y2lJVlFSbDNJQlZCRG5keklCVkJBM1p6SUE1cUlCSnFJQUFvQWl3aUFFRVlkQ0FBUVlEK0EzRkJDSFJ5SUFCQkNIWkJnUDREY1NBQVFSaDJjbklpRmtFWmR5QVdRUTUzY3lBV1FRTjJjeUFRYWlBUmFpQUlRUmwzSUFoQkRuZHpJQWhCQTNaeklBUnFJQWxxSUFWQkdYY2dCVUVPZDNNZ0JVRURkbk1nQ21vZ0FXb2dDMEVaZHlBTFFRNTNjeUFMUVFOMmN5QU1haUFWYWlBTlFSbDNJQTFCRG5keklBMUJBM1p6SUE5cUlCWnFJQU5CRDNjZ0EwRU5kM01nQTBFS2RuTnFJaFJCRDNjZ0ZFRU5kM01nRkVFS2RuTnFJaGRCRDNjZ0YwRU5kM01nRjBFS2RuTnFJaGhCRDNjZ0dFRU5kM01nR0VFS2RuTnFJaGxCRDNjZ0dVRU5kM01nR1VFS2RuTnFJaHBCRDNjZ0drRU5kM01nR2tFS2RuTnFJaHRCRDNjZ0cwRU5kM01nRzBFS2RuTnFJaHhCR1hjZ0hFRU9kM01nSEVFRGRuTWdBa0VaZHlBQ1FRNTNjeUFDUVFOMmN5QVZhaUFZYWlBT1FSbDNJQTVCRG5keklBNUJBM1p6SUJacUlCZHFJQkJCR1hjZ0VFRU9kM01nRUVFRGRuTWdDR29nRkdvZ0UwRVBkeUFUUVExM2N5QVRRUXAyYzJvaUhVRVBkeUFkUVExM2N5QWRRUXAyYzJvaUhrRVBkeUFlUVExM2N5QWVRUXAyYzJvaUgyb2dFMEVaZHlBVFFRNTNjeUFUUVFOMmN5QVlhaUFEUVJsM0lBTkJEbmR6SUFOQkEzWnpJQUZxSUJscUlCOUJEM2NnSDBFTmQzTWdIMEVLZG5OcUlpQnFJQkpCR1hjZ0VrRU9kM01nRWtFRGRuTWdGMm9nSDJvZ0VVRVpkeUFSUVE1M2N5QVJRUU4yY3lBVWFpQWVhaUFKUVJsM0lBbEJEbmR6SUFsQkEzWnpJQU5xSUIxcUlCeEJEM2NnSEVFTmQzTWdIRUVLZG5OcUlpRkJEM2NnSVVFTmQzTWdJVUVLZG5OcUlpSkJEM2NnSWtFTmQzTWdJa0VLZG5OcUlpTkJEM2NnSTBFTmQzTWdJMEVLZG5OcUlpUnFJQnRCR1hjZ0cwRU9kM01nRzBFRGRuTWdIbW9nSTJvZ0drRVpkeUFhUVE1M2N5QWFRUU4yY3lBZGFpQWlhaUFaUVJsM0lCbEJEbmR6SUJsQkEzWnpJQk5xSUNGcUlCaEJHWGNnR0VFT2QzTWdHRUVEZG5NZ0Vtb2dIR29nRjBFWmR5QVhRUTUzY3lBWFFRTjJjeUFSYWlBYmFpQVVRUmwzSUJSQkRuZHpJQlJCQTNaeklBbHFJQnBxSUNCQkQzY2dJRUVOZDNNZ0lFRUtkbk5xSWlWQkQzY2dKVUVOZDNNZ0pVRUtkbk5xSWlaQkQzY2dKa0VOZDNNZ0prRUtkbk5xSWlkQkQzY2dKMEVOZDNNZ0owRUtkbk5xSWloQkQzY2dLRUVOZDNNZ0tFRUtkbk5xSWlsQkQzY2dLVUVOZDNNZ0tVRUtkbk5xSWlwQkQzY2dLa0VOZDNNZ0trRUtkbk5xSWl0QkdYY2dLMEVPZDNNZ0swRURkbk1nSDBFWmR5QWZRUTUzY3lBZlFRTjJjeUFiYWlBbmFpQWVRUmwzSUI1QkRuZHpJQjVCQTNaeklCcHFJQ1pxSUIxQkdYY2dIVUVPZDNNZ0hVRURkbk1nR1dvZ0pXb2dKRUVQZHlBa1FRMTNjeUFrUVFwMmMyb2lMRUVQZHlBc1FRMTNjeUFzUVFwMmMyb2lMVUVQZHlBdFFRMTNjeUF0UVFwMmMyb2lMbW9nSkVFWmR5QWtRUTUzY3lBa1FRTjJjeUFuYWlBZ1FSbDNJQ0JCRG5keklDQkJBM1p6SUJ4cUlDaHFJQzVCRDNjZ0xrRU5kM01nTGtFS2RuTnFJaTlxSUNOQkdYY2dJMEVPZDNNZ0kwRURkbk1nSm1vZ0xtb2dJa0VaZHlBaVFRNTNjeUFpUVFOMmN5QWxhaUF0YWlBaFFSbDNJQ0ZCRG5keklDRkJBM1p6SUNCcUlDeHFJQ3RCRDNjZ0swRU5kM01nSzBFS2RuTnFJakJCRDNjZ01FRU5kM01nTUVFS2RuTnFJakZCRDNjZ01VRU5kM01nTVVFS2RuTnFJakpCRDNjZ01rRU5kM01nTWtFS2RuTnFJak5xSUNwQkdYY2dLa0VPZDNNZ0trRURkbk1nTFdvZ01tb2dLVUVaZHlBcFFRNTNjeUFwUVFOMmN5QXNhaUF4YWlBb1FSbDNJQ2hCRG5keklDaEJBM1p6SUNScUlEQnFJQ2RCR1hjZ0owRU9kM01nSjBFRGRuTWdJMm9nSzJvZ0prRVpkeUFtUVE1M2N5QW1RUU4yY3lBaWFpQXFhaUFsUVJsM0lDVkJEbmR6SUNWQkEzWnpJQ0ZxSUNscUlDOUJEM2NnTDBFTmQzTWdMMEVLZG5OcUlqUkJEM2NnTkVFTmQzTWdORUVLZG5OcUlqVkJEM2NnTlVFTmQzTWdOVUVLZG5OcUlqWkJEM2NnTmtFTmQzTWdOa0VLZG5OcUlqZEJEM2NnTjBFTmQzTWdOMEVLZG5OcUlqaEJEM2NnT0VFTmQzTWdPRUVLZG5OcUlqbEJEM2NnT1VFTmQzTWdPVUVLZG5OcUlqb2dPQ0EwSUM0Z0xDQWhJQnNnR1NBRElBNGdCRUVBS0FMWWlRRWlPMEVhZHlBN1FSVjNjeUE3UVFkM2MwRUFLQUxraVFFaVBHcEJBQ2dDNElrQklqMUJBQ2dDM0lrQklqNXpJRHR4SUQxemFpQUhha0dZMzZpVUJHb2lCMEVBS0FMVWlRRWlQMm9pQUNBTWFpQTdJQTFxSUQ0Z0Qyb2dQU0FHYWlBQUlENGdPM054SUQ1emFpQUFRUnAzSUFCQkZYZHpJQUJCQjNkemFrR1JpZDJKQjJvaVFFRUFLQUxRaVFFaVFXb2lEQ0FBSUR0emNTQTdjMm9nREVFYWR5QU1RUlYzY3lBTVFRZDNjMnBCei9lRHJudHFJa0pCQUNnQ3pJa0JJa05xSWcwZ0RDQUFjM0VnQUhOcUlBMUJHbmNnRFVFVmQzTWdEVUVIZDNOcVFhVzMxODErYWlKRVFRQW9Bc2lKQVNJQWFpSVBJQTBnREhOeElBeHphaUFQUVJwM0lBOUJGWGR6SUE5QkIzZHpha0hiaE52S0Eyb2lSU0JCSUVNZ0FITnhJRU1nQUhGeklBQkJIbmNnQUVFVGQzTWdBRUVLZDNOcUlBZHFJZ1pxSWdkcUlBVWdEMm9nQ2lBTmFpQUxJQXhxSUFjZ0R5QU5jM0VnRFhOcUlBZEJHbmNnQjBFVmQzTWdCMEVIZDNOcVFmR2p4TThGYWlJS0lBWWdBSE1nUTNFZ0JpQUFjWE1nQmtFZWR5QUdRUk4zY3lBR1FRcDNjMm9nUUdvaURHb2lCQ0FISUE5emNTQVBjMm9nQkVFYWR5QUVRUlYzY3lBRVFRZDNjMnBCcElYK2tYbHFJZ3NnRENBR2N5QUFjU0FNSUFaeGN5QU1RUjUzSUF4QkUzZHpJQXhCQ25kemFpQkNhaUlOYWlJUElBUWdCM054SUFkemFpQVBRUnAzSUE5QkZYZHpJQTlCQjNkemFrSFZ2ZkhZZW1vaVFDQU5JQXh6SUFaeElBMGdESEZ6SUExQkhuY2dEVUVUZDNNZ0RVRUtkM05xSUVScUlnWnFJZ2NnRHlBRWMzRWdCSE5xSUFkQkduY2dCMEVWZDNNZ0IwRUhkM05xUVpqVm5zQjlhaUpDSUFZZ0RYTWdESEVnQmlBTmNYTWdCa0VlZHlBR1FSTjNjeUFHUVFwM2Myb2dSV29pREdvaUJXb2dGaUFIYWlBUUlBOXFJQWdnQkdvZ0JTQUhJQTl6Y1NBUGMyb2dCVUVhZHlBRlFSVjNjeUFGUVFkM2MycEJnYmFObEFGcUlnZ2dEQ0FHY3lBTmNTQU1JQVp4Y3lBTVFSNTNJQXhCRTNkeklBeEJDbmR6YWlBS2FpSU5haUlQSUFVZ0IzTnhJQWR6YWlBUFFScDNJQTlCRlhkeklBOUJCM2R6YWtHK2k4YWhBbW9pRGlBTklBeHpJQVp4SUEwZ0RIRnpJQTFCSG5jZ0RVRVRkM01nRFVFS2QzTnFJQXRxSWdacUlnY2dEeUFGYzNFZ0JYTnFJQWRCR25jZ0IwRVZkM01nQjBFSGQzTnFRY1A3c2FnRmFpSVFJQVlnRFhNZ0RIRWdCaUFOY1hNZ0JrRWVkeUFHUVJOM2N5QUdRUXAzYzJvZ1FHb2lER29pQkNBSElBOXpjU0FQYzJvZ0JFRWFkeUFFUVJWM2N5QUVRUWQzYzJwQjlMcjVsUWRxSWhZZ0RDQUdjeUFOY1NBTUlBWnhjeUFNUVI1M0lBeEJFM2R6SUF4QkNuZHphaUJDYWlJTmFpSUZhaUFCSUFScUlBSWdCMm9nRlNBUGFpQUZJQVFnQjNOeElBZHphaUFGUVJwM0lBVkJGWGR6SUFWQkIzZHpha0grNC9xR2VHb2lCeUFOSUF4eklBWnhJQTBnREhGeklBMUJIbmNnRFVFVGQzTWdEVUVLZDNOcUlBaHFJZ0ZxSWdZZ0JTQUVjM0VnQkhOcUlBWkJHbmNnQmtFVmQzTWdCa0VIZDNOcVFhZU44TjU1YWlJRUlBRWdEWE1nREhFZ0FTQU5jWE1nQVVFZWR5QUJRUk4zY3lBQlFRcDNjMm9nRG1vaUFtb2lEQ0FHSUFWemNTQUZjMm9nREVFYWR5QU1RUlYzY3lBTVFRZDNjMnBCOU9MdmpIeHFJZ1VnQWlBQmN5QU5jU0FDSUFGeGN5QUNRUjUzSUFKQkUzZHpJQUpCQ25kemFpQVFhaUlEYWlJTklBd2dCbk54SUFaemFpQU5RUnAzSUExQkZYZHpJQTFCQjNkemFrSEIwKzJrZm1vaUNDQURJQUp6SUFGeElBTWdBbkZ6SUFOQkhuY2dBMEVUZDNNZ0EwRUtkM05xSUJacUlnRnFJZzhnRjJvZ0VTQU5haUFVSUF4cUlBa2dCbW9nRHlBTklBeHpjU0FNYzJvZ0QwRWFkeUFQUVJWM2N5QVBRUWQzYzJwQmhvLzUvWDVxSWdZZ0FTQURjeUFDY1NBQklBTnhjeUFCUVI1M0lBRkJFM2R6SUFGQkNuZHphaUFIYWlJQ2FpSUpJQThnRFhOeElBMXphaUFKUVJwM0lBbEJGWGR6SUFsQkIzZHpha0hHdTRiK0FHb2lEQ0FDSUFGeklBTnhJQUlnQVhGeklBSkJIbmNnQWtFVGQzTWdBa0VLZDNOcUlBUnFJZ05xSWhFZ0NTQVBjM0VnRDNOcUlCRkJHbmNnRVVFVmQzTWdFVUVIZDNOcVFjekRzcUFDYWlJTklBTWdBbk1nQVhFZ0F5QUNjWE1nQTBFZWR5QURRUk4zY3lBRFFRcDNjMm9nQldvaUFXb2lGQ0FSSUFsemNTQUpjMm9nRkVFYWR5QVVRUlYzY3lBVVFRZDNjMnBCNzlpazd3SnFJZzhnQVNBRGN5QUNjU0FCSUFOeGN5QUJRUjUzSUFGQkUzZHpJQUZCQ25kemFpQUlhaUlDYWlJWGFpQVRJQlJxSUJnZ0VXb2dFaUFKYWlBWElCUWdFWE54SUJGemFpQVhRUnAzSUJkQkZYZHpJQmRCQjNkemFrR3FpZExUQkdvaUdDQUNJQUZ6SUFOeElBSWdBWEZ6SUFKQkhuY2dBa0VUZDNNZ0FrRUtkM05xSUFacUlnTnFJZ2tnRnlBVWMzRWdGSE5xSUFsQkduY2dDVUVWZDNNZ0NVRUhkM05xUWR6VHd1VUZhaUlVSUFNZ0FuTWdBWEVnQXlBQ2NYTWdBMEVlZHlBRFFSTjNjeUFEUVFwM2Myb2dER29pQVdvaUVTQUpJQmR6Y1NBWGMyb2dFVUVhZHlBUlFSVjNjeUFSUVFkM2MycEIycEhtdHdkcUloY2dBU0FEY3lBQ2NTQUJJQU54Y3lBQlFSNTNJQUZCRTNkeklBRkJDbmR6YWlBTmFpSUNhaUlTSUJFZ0NYTnhJQWx6YWlBU1FScDNJQkpCRlhkeklCSkJCM2R6YWtIU292bkJlV29pR1NBQ0lBRnpJQU54SUFJZ0FYRnpJQUpCSG5jZ0FrRVRkM01nQWtFS2QzTnFJQTlxSWdOcUloTnFJQjRnRW1vZ0dpQVJhaUFkSUFscUlCTWdFaUFSYzNFZ0VYTnFJQk5CR25jZ0UwRVZkM01nRTBFSGQzTnFRZTJNeDhGNmFpSWFJQU1nQW5NZ0FYRWdBeUFDY1hNZ0EwRWVkeUFEUVJOM2N5QURRUXAzYzJvZ0dHb2lBV29pQ1NBVElCSnpjU0FTYzJvZ0NVRWFkeUFKUVJWM2N5QUpRUWQzYzJwQnlNK01nSHRxSWhnZ0FTQURjeUFDY1NBQklBTnhjeUFCUVI1M0lBRkJFM2R6SUFGQkNuZHphaUFVYWlJQ2FpSVJJQWtnRTNOeElCTnphaUFSUVJwM0lCRkJGWGR6SUJGQkIzZHpha0hILytYNmUyb2lGQ0FDSUFGeklBTnhJQUlnQVhGeklBSkJIbmNnQWtFVGQzTWdBa0VLZDNOcUlCZHFJZ05xSWhJZ0VTQUpjM0VnQ1hOcUlCSkJHbmNnRWtFVmQzTWdFa0VIZDNOcVFmT1hnTGQ4YWlJWElBTWdBbk1nQVhFZ0F5QUNjWE1nQTBFZWR5QURRUk4zY3lBRFFRcDNjMm9nR1dvaUFXb2lFMm9nSUNBU2FpQWNJQkZxSUI4Z0NXb2dFeUFTSUJGemNTQVJjMm9nRTBFYWR5QVRRUlYzY3lBVFFRZDNjMnBCeDZLZXJYMXFJaGtnQVNBRGN5QUNjU0FCSUFOeGN5QUJRUjUzSUFGQkUzZHpJQUZCQ25kemFpQWFhaUlDYWlJSklCTWdFbk54SUJKemFpQUpRUnAzSUFsQkZYZHpJQWxCQjNkemFrSFJ4cWsyYWlJYUlBSWdBWE1nQTNFZ0FpQUJjWE1nQWtFZWR5QUNRUk4zY3lBQ1FRcDNjMm9nR0dvaUEyb2lFU0FKSUJOemNTQVRjMm9nRVVFYWR5QVJRUlYzY3lBUlFRZDNjMnBCNTlLa29RRnFJaGdnQXlBQ2N5QUJjU0FESUFKeGN5QURRUjUzSUFOQkUzZHpJQU5CQ25kemFpQVVhaUlCYWlJU0lCRWdDWE54SUFsemFpQVNRUnAzSUJKQkZYZHpJQkpCQjNkemFrR0ZsZHk5QW1vaUZDQUJJQU56SUFKeElBRWdBM0Z6SUFGQkhuY2dBVUVUZDNNZ0FVRUtkM05xSUJkcUlnSnFJaE1nSTJvZ0ppQVNhaUFpSUJGcUlDVWdDV29nRXlBU0lCRnpjU0FSYzJvZ0UwRWFkeUFUUVJWM2N5QVRRUWQzYzJwQnVNTHM4QUpxSWhjZ0FpQUJjeUFEY1NBQ0lBRnhjeUFDUVI1M0lBSkJFM2R6SUFKQkNuZHphaUFaYWlJRGFpSUpJQk1nRW5OeElCSnphaUFKUVJwM0lBbEJGWGR6SUFsQkIzZHpha0g4MjdIcEJHb2lHU0FESUFKeklBRnhJQU1nQW5GeklBTkJIbmNnQTBFVGQzTWdBMEVLZDNOcUlCcHFJZ0ZxSWhFZ0NTQVRjM0VnRTNOcUlCRkJHbmNnRVVFVmQzTWdFVUVIZDNOcVFaT2E0SmtGYWlJYUlBRWdBM01nQW5FZ0FTQURjWE1nQVVFZWR5QUJRUk4zY3lBQlFRcDNjMm9nR0dvaUFtb2lFaUFSSUFsemNTQUpjMm9nRWtFYWR5QVNRUlYzY3lBU1FRZDNjMnBCMU9hcHFBWnFJaGdnQWlBQmN5QURjU0FDSUFGeGN5QUNRUjUzSUFKQkUzZHpJQUpCQ25kemFpQVVhaUlEYWlJVGFpQW9JQkpxSUNRZ0VXb2dKeUFKYWlBVElCSWdFWE54SUJGemFpQVRRUnAzSUJOQkZYZHpJQk5CQjNkemFrRzdsYWl6QjJvaUZDQURJQUp6SUFGeElBTWdBbkZ6SUFOQkhuY2dBMEVUZDNNZ0EwRUtkM05xSUJkcUlnRnFJZ2tnRXlBU2MzRWdFbk5xSUFsQkduY2dDVUVWZDNNZ0NVRUhkM05xUWE2U2k0NTRhaUlYSUFFZ0EzTWdBbkVnQVNBRGNYTWdBVUVlZHlBQlFSTjNjeUFCUVFwM2Myb2dHV29pQW1vaUVTQUpJQk56Y1NBVGMyb2dFVUVhZHlBUlFSVjNjeUFSUVFkM2MycEJoZG5JazNscUloa2dBaUFCY3lBRGNTQUNJQUZ4Y3lBQ1FSNTNJQUpCRTNkeklBSkJDbmR6YWlBYWFpSURhaUlTSUJFZ0NYTnhJQWx6YWlBU1FScDNJQkpCRlhkeklCSkJCM2R6YWtHaDBmK1ZlbW9pR2lBRElBSnpJQUZ4SUFNZ0FuRnpJQU5CSG5jZ0EwRVRkM01nQTBFS2QzTnFJQmhxSWdGcUloTnFJQ29nRW1vZ0xTQVJhaUFwSUFscUlCTWdFaUFSYzNFZ0VYTnFJQk5CR25jZ0UwRVZkM01nRTBFSGQzTnFRY3ZNNmNCNmFpSVlJQUVnQTNNZ0FuRWdBU0FEY1hNZ0FVRWVkeUFCUVJOM2N5QUJRUXAzYzJvZ0ZHb2lBbW9pQ1NBVElCSnpjU0FTYzJvZ0NVRWFkeUFKUVJWM2N5QUpRUWQzYzJwQjhKYXVrbnhxSWhRZ0FpQUJjeUFEY1NBQ0lBRnhjeUFDUVI1M0lBSkJFM2R6SUFKQkNuZHphaUFYYWlJRGFpSVJJQWtnRTNOeElCTnphaUFSUVJwM0lCRkJGWGR6SUJGQkIzZHpha0dqbzdHN2ZHb2lGeUFESUFKeklBRnhJQU1nQW5GeklBTkJIbmNnQTBFVGQzTWdBMEVLZDNOcUlCbHFJZ0ZxSWhJZ0VTQUpjM0VnQ1hOcUlCSkJHbmNnRWtFVmQzTWdFa0VIZDNOcVFablF5NHg5YWlJWklBRWdBM01nQW5FZ0FTQURjWE1nQVVFZWR5QUJRUk4zY3lBQlFRcDNjMm9nR21vaUFtb2lFMm9nTUNBU2FpQXZJQkZxSUNzZ0NXb2dFeUFTSUJGemNTQVJjMm9nRTBFYWR5QVRRUlYzY3lBVFFRZDNjMnBCcEl6a3RIMXFJaG9nQWlBQmN5QURjU0FDSUFGeGN5QUNRUjUzSUFKQkUzZHpJQUpCQ25kemFpQVlhaUlEYWlJSklCTWdFbk54SUJKemFpQUpRUnAzSUFsQkZYZHpJQWxCQjNkemFrR0Y2N2lnZjJvaUdDQURJQUp6SUFGeElBTWdBbkZ6SUFOQkhuY2dBMEVUZDNNZ0EwRUtkM05xSUJScUlnRnFJaEVnQ1NBVGMzRWdFM05xSUJGQkduY2dFVUVWZDNNZ0VVRUhkM05xUWZEQXFvTUJhaUlVSUFFZ0EzTWdBbkVnQVNBRGNYTWdBVUVlZHlBQlFSTjNjeUFCUVFwM2Myb2dGMm9pQW1vaUVpQVJJQWx6Y1NBSmMyb2dFa0VhZHlBU1FSVjNjeUFTUVFkM2MycEJsb0tUelFGcUloY2dBaUFCY3lBRGNTQUNJQUZ4Y3lBQ1FSNTNJQUpCRTNkeklBSkJDbmR6YWlBWmFpSURhaUlUSURacUlESWdFbW9nTlNBUmFpQXhJQWxxSUJNZ0VpQVJjM0VnRVhOcUlCTkJHbmNnRTBFVmQzTWdFMEVIZDNOcVFZalkzZkVCYWlJWklBTWdBbk1nQVhFZ0F5QUNjWE1nQTBFZWR5QURRUk4zY3lBRFFRcDNjMm9nR21vaUFXb2lDU0FUSUJKemNTQVNjMm9nQ1VFYWR5QUpRUlYzY3lBSlFRZDNjMnBCek82aHVnSnFJaG9nQVNBRGN5QUNjU0FCSUFOeGN5QUJRUjUzSUFGQkUzZHpJQUZCQ25kemFpQVlhaUlDYWlJUklBa2dFM054SUJOemFpQVJRUnAzSUJGQkZYZHpJQkZCQjNkemFrRzErY0tsQTJvaUdDQUNJQUZ6SUFOeElBSWdBWEZ6SUFKQkhuY2dBa0VUZDNNZ0FrRUtkM05xSUJScUlnTnFJaElnRVNBSmMzRWdDWE5xSUJKQkduY2dFa0VWZDNNZ0VrRUhkM05xUWJPWjhNZ0RhaUlVSUFNZ0FuTWdBWEVnQXlBQ2NYTWdBMEVlZHlBRFFSTjNjeUFEUVFwM2Myb2dGMm9pQVdvaUUyb2dMRUVaZHlBc1FRNTNjeUFzUVFOMmN5QW9haUEwYWlBelFROTNJRE5CRFhkeklETkJDblp6YWlJWElCSnFJRGNnRVdvZ015QUphaUFUSUJJZ0VYTnhJQkZ6YWlBVFFScDNJQk5CRlhkeklCTkJCM2R6YWtISzFPTDJCR29pR3lBQklBTnpJQUp4SUFFZ0EzRnpJQUZCSG5jZ0FVRVRkM01nQVVFS2QzTnFJQmxxSWdKcUlna2dFeUFTYzNFZ0VuTnFJQWxCR25jZ0NVRVZkM01nQ1VFSGQzTnFRYytVODl3RmFpSVpJQUlnQVhNZ0EzRWdBaUFCY1hNZ0FrRWVkeUFDUVJOM2N5QUNRUXAzYzJvZ0dtb2lBMm9pRVNBSklCTnpjU0FUYzJvZ0VVRWFkeUFSUVJWM2N5QVJRUWQzYzJwQjg5KzV3UVpxSWhvZ0F5QUNjeUFCY1NBRElBSnhjeUFEUVI1M0lBTkJFM2R6SUFOQkNuZHphaUFZYWlJQmFpSVNJQkVnQ1hOeElBbHphaUFTUVJwM0lCSkJGWGR6SUJKQkIzZHpha0h1aGI2a0Iyb2lIQ0FCSUFOeklBSnhJQUVnQTNGeklBRkJIbmNnQVVFVGQzTWdBVUVLZDNOcUlCUnFJZ0pxSWhOcUlDNUJHWGNnTGtFT2QzTWdMa0VEZG5NZ0ttb2dObW9nTFVFWmR5QXRRUTUzY3lBdFFRTjJjeUFwYWlBMWFpQVhRUTkzSUJkQkRYZHpJQmRCQ25aemFpSVVRUTkzSUJSQkRYZHpJQlJCQ25aemFpSVlJQkpxSURrZ0VXb2dGQ0FKYWlBVElCSWdFWE54SUJGemFpQVRRUnAzSUJOQkZYZHpJQk5CQjNkemFrSHZ4cFhGQjJvaUNTQUNJQUZ6SUFOeElBSWdBWEZ6SUFKQkhuY2dBa0VUZDNNZ0FrRUtkM05xSUJ0cUlnTnFJaEVnRXlBU2MzRWdFbk5xSUJGQkduY2dFVUVWZDNNZ0VVRUhkM05xUVpUd29hWjRhaUliSUFNZ0FuTWdBWEVnQXlBQ2NYTWdBMEVlZHlBRFFSTjNjeUFEUVFwM2Myb2dHV29pQVdvaUVpQVJJQk56Y1NBVGMyb2dFa0VhZHlBU1FSVjNjeUFTUVFkM2MycEJpSVNjNW5ocUloa2dBU0FEY3lBQ2NTQUJJQU54Y3lBQlFSNTNJQUZCRTNkeklBRkJDbmR6YWlBYWFpSUNhaUlUSUJJZ0VYTnhJQkZ6YWlBVFFScDNJQk5CRlhkeklCTkJCM2R6YWtINi8vdUZlV29pR2lBQ0lBRnpJQU54SUFJZ0FYRnpJQUpCSG5jZ0FrRVRkM01nQWtFS2QzTnFJQnhxSWdOcUloUWdQR28yQXVTSkFVRUFJRDhnQXlBQ2N5QUJjU0FESUFKeGN5QURRUjUzSUFOQkUzZHpJQU5CQ25kemFpQUphaUlCSUFOeklBSnhJQUVnQTNGeklBRkJIbmNnQVVFVGQzTWdBVUVLZDNOcUlCdHFJZ0lnQVhNZ0EzRWdBaUFCY1hNZ0FrRWVkeUFDUVJOM2N5QUNRUXAzYzJvZ0dXb2lBeUFDY3lBQmNTQURJQUp4Y3lBRFFSNTNJQU5CRTNkeklBTkJDbmR6YWlBYWFpSUphallDMUlrQlFRQWdQU0F2UVJsM0lDOUJEbmR6SUM5QkEzWnpJQ3RxSURkcUlCaEJEM2NnR0VFTmQzTWdHRUVLZG5OcUloZ2dFV29nRkNBVElCSnpjU0FTYzJvZ0ZFRWFkeUFVUVJWM2N5QVVRUWQzYzJwQjY5bkJvbnBxSWhrZ0FXb2lFV28yQXVDSkFVRUFJRUVnQ1NBRGN5QUNjU0FKSUFOeGN5QUpRUjUzSUFsQkUzZHpJQWxCQ25kemFpQVphaUlCYWpZQzBJa0JRUUFnUGlBd1FSbDNJREJCRG5keklEQkJBM1p6SUM5cUlCZHFJRHBCRDNjZ09rRU5kM01nT2tFS2RuTnFJQkpxSUJFZ0ZDQVRjM0VnRTNOcUlCRkJHbmNnRVVFVmQzTWdFVUVIZDNOcVFmZkg1dmQ3YWlJWElBSnFJaEpxTmdMY2lRRkJBQ0JESUFFZ0NYTWdBM0VnQVNBSmNYTWdBVUVlZHlBQlFSTjNjeUFCUVFwM2Myb2dGMm9pQW1vMkFzeUpBVUVBSURzZ05FRVpkeUEwUVE1M2N5QTBRUU4yY3lBd2FpQTRhaUFZUVE5M0lCaEJEWGR6SUJoQkNuWnphaUFUYWlBU0lCRWdGSE54SUJSemFpQVNRUnAzSUJKQkZYZHpJQkpCQjNkemFrSHk4Y1d6ZkdvaUVTQURhbW8yQXRpSkFVRUFJQUFnQWlBQmN5QUpjU0FDSUFGeGN5QUNRUjUzSUFKQkUzZHpJQUpCQ25kemFpQVJhbW8yQXNpSkFRdTJCZ0lFZndGK1FRQW9Bc0NKQVNJQVFRSjJRUTl4SWdGQkFuUkJnSWtCYWlJQ0lBSW9BZ0JCZnlBQVFRTjBJZ0IwUVg5emNVR0FBU0FBZEhNMkFnQUNRQUpBQWtBZ0FVRU9TUTBBQWtBZ0FVRU9SdzBBUVFCQkFEWUN2SWtCQzBHQWlRRVFBMEVBSVFNTUFRc2dBVUVOUmcwQklBRkJBV29oQXdzZ0F5RUFBa0JCQmlBRGEwRUhjU0lDUlEwQUlBTkJBblJCZ0lrQmFpRUJJQU1oQUFOQUlBRkJBRFlDQUNBQlFRUnFJUUVnQUVFQmFpRUFJQUpCZjJvaUFnMEFDd3NnQTBGNWFrRUhTUTBBSUFCQkFuUWhBUU5BSUFGQm1Ja0Jha0lBTndJQUlBRkJrSWtCYWtJQU53SUFJQUZCaUlrQmFrSUFOd0lBSUFGQmdJa0Jha0lBTndJQUlBRkJJR29pQVVFNFJ3MEFDd3RCQUNFQlFRQkJBQ2tEd0lrQklnU25JZ0JCRzNRZ0FFRUxkRUdBZ1B3SGNYSWdBRUVGZGtHQS9nTnhJQUJCQTNSQkdIWnljallDdklrQlFRQWdCRUlkaUtjaUFFRVlkQ0FBUVlEK0EzRkJDSFJ5SUFCQkNIWkJnUDREY1NBQVFSaDJjbkkyQXJpSkFVR0FpUUVRQTBFQVFRQW9BdVNKQVNJQVFSaDBJQUJCZ1A0RGNVRUlkSElnQUVFSWRrR0EvZ054SUFCQkdIWnljallDNUlrQlFRQkJBQ2dDNElrQklnQkJHSFFnQUVHQS9nTnhRUWgwY2lBQVFRaDJRWUQrQTNFZ0FFRVlkbkp5TmdMZ2lRRkJBRUVBS0FMY2lRRWlBRUVZZENBQVFZRCtBM0ZCQ0hSeUlBQkJDSFpCZ1A0RGNTQUFRUmgyY25JMkF0eUpBVUVBUVFBb0F0aUpBU0lBUVJoMElBQkJnUDREY1VFSWRISWdBRUVJZGtHQS9nTnhJQUJCR0haeWNqWUMySWtCUVFCQkFDZ0MxSWtCSWdCQkdIUWdBRUdBL2dOeFFRaDBjaUFBUVFoMlFZRCtBM0VnQUVFWWRuSnlOZ0xVaVFGQkFFRUFLQUxRaVFFaUFFRVlkQ0FBUVlEK0EzRkJDSFJ5SUFCQkNIWkJnUDREY1NBQVFSaDJjbkkyQXRDSkFVRUFRUUFvQXN5SkFTSUFRUmgwSUFCQmdQNERjVUVJZEhJZ0FFRUlka0dBL2dOeElBQkJHSFp5Y2pZQ3pJa0JRUUJCQUNnQ3lJa0JJZ0JCR0hRZ0FFR0EvZ054UVFoMGNpQUFRUWgyUVlEK0EzRWdBRUVZZG5KeU5nTElpUUVDUUVFQUtBTG9pUUVpQWtVTkFFRUFJUUFEUUNBQlFZQUphaUFCUWNpSkFXb3RBQUE2QUFBZ0FVRUJhaUVCSUFJZ0FFRUJhaUlBUWY4QmNVc05BQXNMQ3dZQVFZQ0pBUXVqQVFCQkFFSUFOd1BBaVFGQkFFRWNRU0FnQVVIZ0FVWWlBUnMyQXVpSkFVRUFRcWVmNXFmRzlKUDl2bjlDcTdPUC9KR2pzL0RiQUNBQkd6Y0Q0SWtCUVFCQ3NaYUEvcCtpaGF6b0FFTC9wTG1JeFpIYWdwdC9JQUViTndQWWlRRkJBRUtYdXNPRGs2ZVdoM2RDOHVhNzQ2T24vYWVsZnlBQkd6Y0QwSWtCUVFCQzJMMldpUHlndGI0MlF1Zk1wOURXME91enUzOGdBUnMzQThpSkFTQUFFQUlRQkFzTEN3RUFRWUFJQ3dSd0FBQUFcIjtcbnZhciBoYXNoJGEgPSBcIjY0ZjA2Njc0XCI7XG52YXIgd2FzbUpzb24kYSA9IHtcblx0bmFtZTogbmFtZSRhLFxuXHRkYXRhOiBkYXRhJGEsXG5cdGhhc2g6IGhhc2gkYVxufTtcblxuY29uc3QgbXV0ZXgkYSA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSRhID0gbnVsbDtcbi8qKlxuICogQ2FsY3VsYXRlcyBTSEEtMiAoU0hBLTIyNCkgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gc2hhMjI0KGRhdGEpIHtcbiAgICBpZiAod2FzbUNhY2hlJGEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCRhLCB3YXNtSnNvbiRhLCAyOClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkYSA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlJGEuY2FsY3VsYXRlKGRhdGEsIDIyNCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJGEuY2FsY3VsYXRlKGRhdGEsIDIyNCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFNIQS0yIChTSEEtMjI0KSBoYXNoIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNIQTIyNCgpIHtcbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiRhLCAyOCkudGhlbigod2FzbSkgPT4ge1xuICAgICAgICB3YXNtLmluaXQoMjI0KTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoMjI0KTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGRhdGEpID0+IHsgd2FzbS51cGRhdGUoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBkaWdlc3Q6IChvdXRwdXRUeXBlKSA9PiB3YXNtLmRpZ2VzdChvdXRwdXRUeXBlKSxcbiAgICAgICAgICAgIHNhdmU6ICgpID0+IHdhc20uc2F2ZSgpLFxuICAgICAgICAgICAgbG9hZDogKGRhdGEpID0+IHsgd2FzbS5sb2FkKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgYmxvY2tTaXplOiA2NCxcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDI4LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG5jb25zdCBtdXRleCQ5ID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJDkgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIFNIQS0yIChTSEEtMjU2KSBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzaGEyNTYoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkOSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JDksIHdhc21Kc29uJGEsIDMyKVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSQ5ID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkOS5jYWxjdWxhdGUoZGF0YSwgMjU2KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkOS5jYWxjdWxhdGUoZGF0YSwgMjU2KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU0hBLTIgKFNIQS0yNTYpIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU0hBMjU2KCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJGEsIDMyKS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCgyNTYpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgyNTYpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDY0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogMzIsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJDkgPSBcInNoYTUxMlwiO1xudmFyIGRhdGEkOSA9IFwiQUdGemJRRUFBQUFCRVFSZ0FBRi9ZQUYvQUdBQUFHQUNmMzhBQXdnSEFBRUJBUUlBQXdVRUFRRUNBZ1lPQW44QlFkQ0tCUXQvQUVHQUNBc0hjQWdHYldWdGIzSjVBZ0FPU0dGemFGOUhaWFJDZFdabVpYSUFBQWxJWVhOb1gwbHVhWFFBQVF0SVlYTm9YMVZ3WkdGMFpRQUNDa2hoYzJoZlJtbHVZV3dBQkExSVlYTm9YMGRsZEZOMFlYUmxBQVVPU0dGemFGOURZV3hqZFd4aGRHVUFCZ3BUVkVGVVJWOVRTVnBGQXdFS21XZ0hCUUJCZ0FrTG13SUFRUUJDQURjRGdJb0JRUUJCTUVIQUFDQUFRWUFEUmlJQUd6WUN5SW9CUVFCQ3BKL3A5OXVEMHRySEFFTDV3dmlia2FPejhOc0FJQUFiTndQQWlnRkJBRUtubithbjFzR0xobHRDNi9xRzJyKzE5c0VmSUFBYk53TzRpZ0ZCQUVLUnF1REM5dENTMm81L1FwL1krZG5Da2RxQ20zOGdBQnMzQTdDS0FVRUFRckdXZ1A3L3pNbVo1d0JDMFlXYTcvclBsSWZSQUNBQUd6Y0RxSW9CUVFCQ3ViSzV1SStiKzVjVlF2SHQ5UGlscC8ybnBYOGdBQnMzQTZDS0FVRUFRcGU2dzRPanE4Q3NrWDlDcS9EVDlLL3V2TGM4SUFBYk53T1lpZ0ZCQUVLSHF2T3pvNldLemVJQVFydk9xcWJZME91enUzOGdBQnMzQTVDS0FVRUFRdGk5bG9qY3ErZmRTMEtJa3ZPZC84ejVoT29BSUFBYk53T0lpZ0VMOGdJQ0FYNEdmMEVBUVFBcEE0Q0tBU0lCSUFDdGZEY0RnSW9CQWtBQ1FBSkFJQUduUWY4QWNTSUNEUUJCZ0FraEF3d0JDd0pBUVlBQklBSnJJZ1FnQUNBRUlBQkpHeUlEUlEwQUlBTkJBM0VoQlNBQ1FZQ0pBV29oQmtFQUlRSUNRQ0FEUVFSSkRRQWdBMEg4QVhFaEIwRUFJUUlEUUNBR0lBSnFJZ01nQWtHQUNXb3RBQUE2QUFBZ0EwRUJhaUFDUVlFSmFpMEFBRG9BQUNBRFFRSnFJQUpCZ2dscUxRQUFPZ0FBSUFOQkEyb2dBa0dEQ1dvdEFBQTZBQUFnQnlBQ1FRUnFJZ0pIRFFBTEN5QUZSUTBBQTBBZ0JpQUNhaUFDUVlBSmFpMEFBRG9BQUNBQ1FRRnFJUUlnQlVGL2FpSUZEUUFMQ3lBRUlBQkxEUUZCZ0lrQkVBTWdBQ0FFYXlFQUlBUkJnQWxxSVFNTEFrQWdBRUdBQVVrTkFBTkFJQU1RQXlBRFFZQUJhaUVESUFCQmdIOXFJZ0JCL3dCTERRQUxDeUFBUlEwQVFRQWhBa0VBSVFVRFFDQUNRWUNKQVdvZ0F5QUNhaTBBQURvQUFDQUNRUUZxSVFJZ0FDQUZRUUZxSWdWQi93RnhTdzBBQ3dzTDNGWUJWbjVCQUNBQUtRTUlJZ0ZDT0lZZ0FVS0EvZ09EUWlpR2hDQUJRb0NBL0FlRFFoaUdJQUZDZ0lDQStBK0RRZ2lHaElRZ0FVSUlpRUtBZ0lENEQ0TWdBVUlZaUVLQWdQd0hnNFFnQVVJb2lFS0EvZ09ESUFGQ09JaUVoSVFpQWtJL2lTQUNRamlKaFNBQ1FnZUloU0FBS1FNQUlnRkNPSVlnQVVLQS9nT0RRaWlHaENBQlFvQ0EvQWVEUWhpR0lBRkNnSUNBK0ErRFFnaUdoSVFnQVVJSWlFS0FnSUQ0RDRNZ0FVSVlpRUtBZ1B3SGc0UWdBVUlvaUVLQS9nT0RJQUZDT0lpRWhJUWlBM3dnQUNrRFNDSUJRamlHSUFGQ2dQNERnMElvaG9RZ0FVS0FnUHdIZzBJWWhpQUJRb0NBZ1BnUGcwSUlob1NFSUFGQ0NJaENnSUNBK0ErRElBRkNHSWhDZ0lEOEI0T0VJQUZDS0loQ2dQNERneUFCUWppSWhJU0VJZ1I4SUFBcEEzQWlBVUk0aGlBQlFvRCtBNE5DS0lhRUlBRkNnSUQ4QjROQ0dJWWdBVUtBZ0lENEQ0TkNDSWFFaENBQlFnaUlRb0NBZ1BnUGd5QUJRaGlJUW9DQS9BZURoQ0FCUWlpSVFvRCtBNE1nQVVJNGlJU0VoQ0lGUWkySklBVkNBNG1GSUFWQ0JvaUZmQ0lHUWorSklBWkNPSW1GSUFaQ0I0aUZJQUFwQTNnaUFVSTRoaUFCUW9EK0E0TkNLSWFFSUFGQ2dJRDhCNE5DR0lZZ0FVS0FnSUQ0RDROQ0NJYUVoQ0FCUWdpSVFvQ0FnUGdQZ3lBQlFoaUlRb0NBL0FlRGhDQUJRaWlJUW9EK0E0TWdBVUk0aUlTRWhDSUhmQ0FFUWorSklBUkNPSW1GSUFSQ0I0aUZJQUFwQTBBaUFVSTRoaUFCUW9EK0E0TkNLSWFFSUFGQ2dJRDhCNE5DR0lZZ0FVS0FnSUQ0RDROQ0NJYUVoQ0FCUWdpSVFvQ0FnUGdQZ3lBQlFoaUlRb0NBL0FlRGhDQUJRaWlJUW9EK0E0TWdBVUk0aUlTRWhDSUlmQ0FBS1FNUUlnRkNPSVlnQVVLQS9nT0RRaWlHaENBQlFvQ0EvQWVEUWhpR0lBRkNnSUNBK0ErRFFnaUdoSVFnQVVJSWlFS0FnSUQ0RDRNZ0FVSVlpRUtBZ1B3SGc0UWdBVUlvaUVLQS9nT0RJQUZDT0lpRWhJUWlDVUkvaVNBSlFqaUpoU0FKUWdlSWhTQUNmQ0FBS1FOUUlnRkNPSVlnQVVLQS9nT0RRaWlHaENBQlFvQ0EvQWVEUWhpR0lBRkNnSUNBK0ErRFFnaUdoSVFnQVVJSWlFS0FnSUQ0RDRNZ0FVSVlpRUtBZ1B3SGc0UWdBVUlvaUVLQS9nT0RJQUZDT0lpRWhJUWlDbndnQjBJdGlTQUhRZ09KaFNBSFFnYUloWHdpQzN3Z0FDa0RPQ0lCUWppR0lBRkNnUDREZzBJb2hvUWdBVUtBZ1B3SGcwSVloaUFCUW9DQWdQZ1BnMElJaG9TRUlBRkNDSWhDZ0lDQStBK0RJQUZDR0loQ2dJRDhCNE9FSUFGQ0tJaENnUDREZ3lBQlFqaUloSVNFSWd4Q1A0a2dERUk0aVlVZ0RFSUhpSVVnQUNrRE1DSUJRamlHSUFGQ2dQNERnMElvaG9RZ0FVS0FnUHdIZzBJWWhpQUJRb0NBZ1BnUGcwSUlob1NFSUFGQ0NJaENnSUNBK0ErRElBRkNHSWhDZ0lEOEI0T0VJQUZDS0loQ2dQNERneUFCUWppSWhJU0VJZzE4SUFkOElBQXBBeWdpQVVJNGhpQUJRb0QrQTROQ0tJYUVJQUZDZ0lEOEI0TkNHSVlnQVVLQWdJRDRENE5DQ0lhRWhDQUJRZ2lJUW9DQWdQZ1BneUFCUWhpSVFvQ0EvQWVEaENBQlFpaUlRb0QrQTRNZ0FVSTRpSVNFaENJT1FqK0pJQTVDT0ltRklBNUNCNGlGSUFBcEF5QWlBVUk0aGlBQlFvRCtBNE5DS0lhRUlBRkNnSUQ4QjROQ0dJWWdBVUtBZ0lENEQ0TkNDSWFFaENBQlFnaUlRb0NBZ1BnUGd5QUJRaGlJUW9DQS9BZURoQ0FCUWlpSVFvRCtBNE1nQVVJNGlJU0VoQ0lQZkNBQUtRTm9JZ0ZDT0lZZ0FVS0EvZ09EUWlpR2hDQUJRb0NBL0FlRFFoaUdJQUZDZ0lDQStBK0RRZ2lHaElRZ0FVSUlpRUtBZ0lENEQ0TWdBVUlZaUVLQWdQd0hnNFFnQVVJb2lFS0EvZ09ESUFGQ09JaUVoSVFpRUh3Z0FDa0RHQ0lCUWppR0lBRkNnUDREZzBJb2hvUWdBVUtBZ1B3SGcwSVloaUFCUW9DQWdQZ1BnMElJaG9TRUlBRkNDSWhDZ0lDQStBK0RJQUZDR0loQ2dJRDhCNE9FSUFGQ0tJaENnUDREZ3lBQlFqaUloSVNFSWhGQ1A0a2dFVUk0aVlVZ0VVSUhpSVVnQ1h3Z0FDa0RXQ0lCUWppR0lBRkNnUDREZzBJb2hvUWdBVUtBZ1B3SGcwSVloaUFCUW9DQWdQZ1BnMElJaG9TRUlBRkNDSWhDZ0lDQStBK0RJQUZDR0loQ2dJRDhCNE9FSUFGQ0tJaENnUDREZ3lBQlFqaUloSVNFSWhKOElBWkNMWWtnQmtJRGlZVWdCa0lHaUlWOEloTkNMWWtnRTBJRGlZVWdFMElHaUlWOEloUkNMWWtnRkVJRGlZVWdGRUlHaUlWOEloVkNMWWtnRlVJRGlZVWdGVUlHaUlWOEloWjhJQVZDUDRrZ0JVSTRpWVVnQlVJSGlJVWdFSHdnRlh3Z0FDa0RZQ0lCUWppR0lBRkNnUDREZzBJb2hvUWdBVUtBZ1B3SGcwSVloaUFCUW9DQWdQZ1BnMElJaG9TRUlBRkNDSWhDZ0lDQStBK0RJQUZDR0loQ2dJRDhCNE9FSUFGQ0tJaENnUDREZ3lBQlFqaUloSVNFSWhkQ1A0a2dGMEk0aVlVZ0YwSUhpSVVnRW53Z0ZId2dDa0kvaVNBS1FqaUpoU0FLUWdlSWhTQUVmQ0FUZkNBSVFqK0pJQWhDT0ltRklBaENCNGlGSUF4OElBWjhJQTFDUDRrZ0RVSTRpWVVnRFVJSGlJVWdEbndnQlh3Z0QwSS9pU0FQUWppSmhTQVBRZ2VJaFNBUmZDQVhmQ0FMUWkySklBdENBNG1GSUF0Q0JvaUZmQ0lZUWkySklCaENBNG1GSUJoQ0JvaUZmQ0laUWkySklCbENBNG1GSUJsQ0JvaUZmQ0lhUWkySklCcENBNG1GSUJwQ0JvaUZmQ0liUWkySklCdENBNG1GSUJ0Q0JvaUZmQ0ljUWkySklCeENBNG1GSUJ4Q0JvaUZmQ0lkUWkySklCMUNBNG1GSUIxQ0JvaUZmQ0llUWorSklCNUNPSW1GSUI1Q0I0aUZJQWRDUDRrZ0IwSTRpWVVnQjBJSGlJVWdCWHdnR253Z0VFSS9pU0FRUWppSmhTQVFRZ2VJaFNBWGZDQVpmQ0FTUWorSklCSkNPSW1GSUJKQ0I0aUZJQXA4SUJoOElCWkNMWWtnRmtJRGlZVWdGa0lHaUlWOEloOUNMWWtnSDBJRGlZVWdIMElHaUlWOElpQkNMWWtnSUVJRGlZVWdJRUlHaUlWOElpRjhJQlpDUDRrZ0ZrSTRpWVVnRmtJSGlJVWdHbndnQzBJL2lTQUxRamlKaFNBTFFnZUloU0FHZkNBYmZDQWhRaTJKSUNGQ0E0bUZJQ0ZDQm9pRmZDSWlmQ0FWUWorSklCVkNPSW1GSUJWQ0I0aUZJQmw4SUNGOElCUkNQNGtnRkVJNGlZVWdGRUlIaUlVZ0dId2dJSHdnRTBJL2lTQVRRamlKaFNBVFFnZUloU0FMZkNBZmZDQWVRaTJKSUI1Q0E0bUZJQjVDQm9pRmZDSWpRaTJKSUNOQ0E0bUZJQ05DQm9pRmZDSWtRaTJKSUNSQ0E0bUZJQ1JDQm9pRmZDSWxRaTJKSUNWQ0E0bUZJQ1ZDQm9pRmZDSW1mQ0FkUWorSklCMUNPSW1GSUIxQ0I0aUZJQ0I4SUNWOElCeENQNGtnSEVJNGlZVWdIRUlIaUlVZ0gzd2dKSHdnRzBJL2lTQWJRamlKaFNBYlFnZUloU0FXZkNBamZDQWFRaitKSUJwQ09JbUZJQnBDQjRpRklCVjhJQjU4SUJsQ1A0a2dHVUk0aVlVZ0dVSUhpSVVnRkh3Z0hYd2dHRUkvaVNBWVFqaUpoU0FZUWdlSWhTQVRmQ0FjZkNBaVFpMkpJQ0pDQTRtRklDSkNCb2lGZkNJblFpMkpJQ2RDQTRtRklDZENCb2lGZkNJb1FpMkpJQ2hDQTRtRklDaENCb2lGZkNJcFFpMkpJQ2xDQTRtRklDbENCb2lGZkNJcVFpMkpJQ3BDQTRtRklDcENCb2lGZkNJclFpMkpJQ3RDQTRtRklDdENCb2lGZkNJc1FpMkpJQ3hDQTRtRklDeENCb2lGZkNJdFFqK0pJQzFDT0ltRklDMUNCNGlGSUNGQ1A0a2dJVUk0aVlVZ0lVSUhpSVVnSFh3Z0tYd2dJRUkvaVNBZ1FqaUpoU0FnUWdlSWhTQWNmQ0FvZkNBZlFqK0pJQjlDT0ltRklCOUNCNGlGSUJ0OElDZDhJQ1pDTFlrZ0prSURpWVVnSmtJR2lJVjhJaTVDTFlrZ0xrSURpWVVnTGtJR2lJVjhJaTlDTFlrZ0wwSURpWVVnTDBJR2lJVjhJakI4SUNaQ1A0a2dKa0k0aVlVZ0prSUhpSVVnS1h3Z0lrSS9pU0FpUWppSmhTQWlRZ2VJaFNBZWZDQXFmQ0F3UWkySklEQkNBNG1GSURCQ0JvaUZmQ0l4ZkNBbFFqK0pJQ1ZDT0ltRklDVkNCNGlGSUNoOElEQjhJQ1JDUDRrZ0pFSTRpWVVnSkVJSGlJVWdKM3dnTDN3Z0kwSS9pU0FqUWppSmhTQWpRZ2VJaFNBaWZDQXVmQ0F0UWkySklDMUNBNG1GSUMxQ0JvaUZmQ0l5UWkySklESkNBNG1GSURKQ0JvaUZmQ0l6UWkySklETkNBNG1GSUROQ0JvaUZmQ0kwUWkySklEUkNBNG1GSURSQ0JvaUZmQ0kxZkNBc1FqK0pJQ3hDT0ltRklDeENCNGlGSUM5OElEUjhJQ3RDUDRrZ0swSTRpWVVnSzBJSGlJVWdMbndnTTN3Z0trSS9pU0FxUWppSmhTQXFRZ2VJaFNBbWZDQXlmQ0FwUWorSklDbENPSW1GSUNsQ0I0aUZJQ1Y4SUMxOElDaENQNGtnS0VJNGlZVWdLRUlIaUlVZ0pId2dMSHdnSjBJL2lTQW5RamlKaFNBblFnZUloU0FqZkNBcmZDQXhRaTJKSURGQ0E0bUZJREZDQm9pRmZDSTJRaTJKSURaQ0E0bUZJRFpDQm9pRmZDSTNRaTJKSURkQ0E0bUZJRGRDQm9pRmZDSTRRaTJKSURoQ0E0bUZJRGhDQm9pRmZDSTVRaTJKSURsQ0E0bUZJRGxDQm9pRmZDSTZRaTJKSURwQ0E0bUZJRHBDQm9pRmZDSTdRaTJKSUR0Q0E0bUZJRHRDQm9pRmZDSThRaitKSUR4Q09JbUZJRHhDQjRpRklEQkNQNGtnTUVJNGlZVWdNRUlIaUlVZ0xId2dPSHdnTDBJL2lTQXZRamlKaFNBdlFnZUloU0FyZkNBM2ZDQXVRaitKSUM1Q09JbUZJQzVDQjRpRklDcDhJRFo4SURWQ0xZa2dOVUlEaVlVZ05VSUdpSVY4SWoxQ0xZa2dQVUlEaVlVZ1BVSUdpSVY4SWo1Q0xZa2dQa0lEaVlVZ1BrSUdpSVY4SWo5OElEVkNQNGtnTlVJNGlZVWdOVUlIaUlVZ09Id2dNVUkvaVNBeFFqaUpoU0F4UWdlSWhTQXRmQ0E1ZkNBL1FpMkpJRDlDQTRtRklEOUNCb2lGZkNKQWZDQTBRaitKSURSQ09JbUZJRFJDQjRpRklEZDhJRDk4SUROQ1A0a2dNMEk0aVlVZ00wSUhpSVVnTm53Z1Bud2dNa0kvaVNBeVFqaUpoU0F5UWdlSWhTQXhmQ0E5ZkNBOFFpMkpJRHhDQTRtRklEeENCb2lGZkNKQlFpMkpJRUZDQTRtRklFRkNCb2lGZkNKQ1FpMkpJRUpDQTRtRklFSkNCb2lGZkNKRFFpMkpJRU5DQTRtRklFTkNCb2lGZkNKRWZDQTdRaitKSUR0Q09JbUZJRHRDQjRpRklENThJRU44SURwQ1A0a2dPa0k0aVlVZ09rSUhpSVVnUFh3Z1Fud2dPVUkvaVNBNVFqaUpoU0E1UWdlSWhTQTFmQ0JCZkNBNFFqK0pJRGhDT0ltRklEaENCNGlGSURSOElEeDhJRGRDUDRrZ04wSTRpWVVnTjBJSGlJVWdNM3dnTzN3Z05rSS9pU0EyUWppSmhTQTJRZ2VJaFNBeWZDQTZmQ0JBUWkySklFQkNBNG1GSUVCQ0JvaUZmQ0pGUWkySklFVkNBNG1GSUVWQ0JvaUZmQ0pHUWkySklFWkNBNG1GSUVaQ0JvaUZmQ0pIUWkySklFZENBNG1GSUVkQ0JvaUZmQ0pJUWkySklFaENBNG1GSUVoQ0JvaUZmQ0pKUWkySklFbENBNG1GSUVsQ0JvaUZmQ0pLUWkySklFcENBNG1GSUVwQ0JvaUZmQ0pMSUVrZ1JTQS9JRDBnTWlBc0lDb2dJaUFnSUJZZ0JpQVhJQWhCQUNrRHFJb0JJa3hDTW9rZ1RFSXVpWVVnVEVJWGlZVkJBQ2tEd0lvQklrMThRUUFwQTdpS0FTSk9RUUFwQTdDS0FTSlBoU0JNZ3lCT2hYd2dBM3hDb3R5aXVZM3ppOFhDQUh3aUEwRUFLUU9naWdFaVVId2lBU0FQZkNCTUlCRjhJRThnQ1h3Z1RpQUNmQ0FCSUU4Z1RJV0RJRStGZkNBQlFqS0pJQUZDTG9tRklBRkNGNG1GZkVMTnk3MmZrcExSbS9FQWZDSlJRUUFwQTVpS0FTSlNmQ0lKSUFFZ1RJV0RJRXlGZkNBSlFqS0pJQWxDTG9tRklBbENGNG1GZkVLdjlyVGkvdm0rNExWL2ZDSlRRUUFwQTVDS0FTSlVmQ0lQSUFrZ0FZV0RJQUdGZkNBUFFqS0pJQTlDTG9tRklBOUNGNG1GZkVLOHQ2ZU0yUFQyMm1sOElsVkJBQ2tEaUlvQklnRjhJaEVnRHlBSmhZTWdDWVY4SUJGQ01va2dFVUl1aVlVZ0VVSVhpWVY4UXJqcW9wcS95N0NyT1h3aVZpQlNJRlFnQVlXRElGUWdBWU9GSUFGQ0pJa2dBVUllaVlVZ0FVSVppWVY4SUFOOElnSjhJZ044SUF3Z0VYd2dEU0FQZkNBT0lBbDhJQU1nRVNBUGhZTWdENFY4SUFOQ01va2dBMEl1aVlVZ0EwSVhpWVY4UXBtZ2w3Q2J2c1Q0MlFCOElnMGdBaUFCaFNCVWd5QUNJQUdEaFNBQ1FpU0pJQUpDSG9tRklBSkNHWW1GZkNCUmZDSUpmQ0lJSUFNZ0VZV0RJQkdGZkNBSVFqS0pJQWhDTG9tRklBaENGNG1GZkVLYm4rWDR5dFRnbjVKL2ZDSU9JQWtnQW9VZ0FZTWdDU0FDZzRVZ0NVSWtpU0FKUWg2SmhTQUpRaG1KaFh3Z1Uzd2lEM3dpRVNBSUlBT0ZneUFEaFh3Z0VVSXlpU0FSUWk2SmhTQVJRaGVKaFh4Q21JSzIwOTNhbDQ2cmYzd2lVU0FQSUFtRklBS0RJQThnQ1lPRklBOUNKSWtnRDBJZWlZVWdEMElaaVlWOElGVjhJZ0o4SWdNZ0VTQUloWU1nQ0lWOElBTkNNb2tnQTBJdWlZVWdBMElYaVlWOFFzS0VqSmlLMCtxRFdId2lVeUFDSUErRklBbURJQUlnRDRPRklBSkNKSWtnQWtJZWlZVWdBa0laaVlWOElGWjhJZ2w4SWd4OElCSWdBM3dnQ2lBUmZDQUVJQWg4SUF3Z0F5QVJoWU1nRVlWOElBeENNb2tnREVJdWlZVWdERUlYaVlWOFFyN2Z3YXVVNE5iQkVud2lCQ0FKSUFLRklBK0RJQWtnQW9PRklBbENKSWtnQ1VJZWlZVWdDVUlaaVlWOElBMThJZzk4SWhFZ0RDQURoWU1nQTRWOElCRkNNb2tnRVVJdWlZVWdFVUlYaVlWOFFvemxrdmZrdCtHWUpId2lDaUFQSUFtRklBS0RJQThnQ1lPRklBOUNKSWtnRDBJZWlZVWdEMElaaVlWOElBNThJZ0o4SWdNZ0VTQU1oWU1nRElWOElBTkNNb2tnQTBJdWlZVWdBMElYaVlWOFF1THAvcSs5dUorRzFRQjhJaElnQWlBUGhTQUpneUFDSUErRGhTQUNRaVNKSUFKQ0hvbUZJQUpDR1ltRmZDQlJmQ0lKZkNJSUlBTWdFWVdESUJHRmZDQUlRaktKSUFoQ0xvbUZJQWhDRjRtRmZFTHZrdTZUejY2WDMvSUFmQ0lYSUFrZ0FvVWdENE1nQ1NBQ2c0VWdDVUlraVNBSlFoNkpoU0FKUWhtSmhYd2dVM3dpRDN3aURId2dCeUFJZkNBRklBTjhJQkFnRVh3Z0RDQUlJQU9GZ3lBRGhYd2dERUl5aVNBTVFpNkpoU0FNUWhlSmhYeENzYTNhMk9PL3JPK0FmM3dpQXlBUElBbUZJQUtESUE4Z0NZT0ZJQTlDSklrZ0QwSWVpWVVnRDBJWmlZVjhJQVI4SWdWOElnSWdEQ0FJaFlNZ0NJVjhJQUpDTW9rZ0FrSXVpWVVnQWtJWGlZVjhRcldrbks3eTFJSHVtMzk4SWdnZ0JTQVBoU0FKZ3lBRklBK0RoU0FGUWlTSklBVkNIb21GSUFWQ0dZbUZmQ0FLZkNJR2ZDSUpJQUlnRElXRElBeUZmQ0FKUWpLSklBbENMb21GSUFsQ0Y0bUZmRUtVemFUN3pLNzh6VUY4SWd3Z0JpQUZoU0FQZ3lBR0lBV0RoU0FHUWlTSklBWkNIb21GSUFaQ0dZbUZmQ0FTZkNJSGZDSVBJQWtnQW9XRElBS0ZmQ0FQUWpLSklBOUNMb21GSUE5Q0Y0bUZmRUxTbGNYM21iamF6V1I4SWdRZ0J5QUdoU0FGZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FYZkNJRmZDSVJJQlI4SUJnZ0Qzd2dFeUFKZkNBTElBSjhJQkVnRHlBSmhZTWdDWVY4SUJGQ01va2dFVUl1aVlVZ0VVSVhpWVY4UXVQTHZNTGo4SkhmYjN3aUFpQUZJQWVGSUFhRElBVWdCNE9GSUFWQ0pJa2dCVUllaVlVZ0JVSVppWVY4SUFOOElnWjhJZ3NnRVNBUGhZTWdENFY4SUF0Q01va2dDMEl1aVlVZ0MwSVhpWVY4UXJXcnM5em91T2ZnRDN3aUNTQUdJQVdGSUFlRElBWWdCWU9GSUFaQ0pJa2dCa0llaVlVZ0JrSVppWVY4SUFoOElnZDhJaE1nQ3lBUmhZTWdFWVY4SUJOQ01va2dFMEl1aVlVZ0UwSVhpWVY4UXVXNHNyM0h1YWlHSkh3aUR5QUhJQWFGSUFXRElBY2dCb09GSUFkQ0pJa2dCMEllaVlVZ0IwSVppWVY4SUF4OElnVjhJaFFnRXlBTGhZTWdDNFY4SUJSQ01va2dGRUl1aVlVZ0ZFSVhpWVY4UXZXRXJNbjFqY3YwTFh3aUVTQUZJQWVGSUFhRElBVWdCNE9GSUFWQ0pJa2dCVUllaVlVZ0JVSVppWVY4SUFSOElnWjhJaGg4SUJvZ0ZId2dGU0FUZkNBWklBdDhJQmdnRkNBVGhZTWdFNFY4SUJoQ01va2dHRUl1aVlVZ0dFSVhpWVY4UW9QSm0vV21sYUc2eWdCOEloWWdCaUFGaFNBSGd5QUdJQVdEaFNBR1FpU0pJQVpDSG9tRklBWkNHWW1GZkNBQ2ZDSUhmQ0lMSUJnZ0ZJV0RJQlNGZkNBTFFqS0pJQXRDTG9tRklBdENGNG1GZkVMVTk0ZnF5N3VxMk53QWZDSVpJQWNnQm9VZ0JZTWdCeUFHZzRVZ0IwSWtpU0FIUWg2SmhTQUhRaG1KaFh3Z0NYd2lCWHdpRXlBTElCaUZneUFZaFh3Z0UwSXlpU0FUUWk2SmhTQVRRaGVKaFh4Q3RhZkZtS2liNHZ6MkFId2lHQ0FGSUFlRklBYURJQVVnQjRPRklBVkNKSWtnQlVJZWlZVWdCVUlaaVlWOElBOThJZ1o4SWhRZ0V5QUxoWU1nQzRWOElCUkNNb2tnRkVJdWlZVWdGRUlYaVlWOFFxdS9tL091cXBTZm1IOThJaG9nQmlBRmhTQUhneUFHSUFXRGhTQUdRaVNKSUFaQ0hvbUZJQVpDR1ltRmZDQVJmQ0lIZkNJVmZDQWNJQlI4SUI4Z0Uzd2dHeUFMZkNBVklCUWdFNFdESUJPRmZDQVZRaktKSUJWQ0xvbUZJQlZDRjRtRmZFS1E1TkR0MHMzeG1LaC9mQ0liSUFjZ0JvVWdCWU1nQnlBR2c0VWdCMElraVNBSFFoNkpoU0FIUWhtSmhYd2dGbndpQlh3aUN5QVZJQlNGZ3lBVWhYd2dDMEl5aVNBTFFpNkpoU0FMUWhlSmhYeEN2OExzeDRuNXlZR3dmM3dpRmlBRklBZUZJQWFESUFVZ0I0T0ZJQVZDSklrZ0JVSWVpWVVnQlVJWmlZVjhJQmw4SWdaOEloTWdDeUFWaFlNZ0ZZVjhJQk5DTW9rZ0UwSXVpWVVnRTBJWGlZVjhRdVNkdlBmNytOK3N2Mzk4SWhrZ0JpQUZoU0FIZ3lBR0lBV0RoU0FHUWlTSklBWkNIb21GSUFaQ0dZbUZmQ0FZZkNJSGZDSVVJQk1nQzRXRElBdUZmQ0FVUWpLSklCUkNMb21GSUJSQ0Y0bUZmRUxDbjZMdHMvNkM4RVo4SWhnZ0J5QUdoU0FGZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FhZkNJRmZDSVZmQ0FlSUJSOElDRWdFM3dnSFNBTGZDQVZJQlFnRTRXRElCT0ZmQ0FWUWpLSklCVkNMb21GSUJWQ0Y0bUZmRUtsenFxWSthamswMVY4SWhvZ0JTQUhoU0FHZ3lBRklBZURoU0FGUWlTSklBVkNIb21GSUFWQ0dZbUZmQ0FiZkNJR2ZDSUxJQlVnRklXRElCU0ZmQ0FMUWpLSklBdENMb21GSUF0Q0Y0bUZmRUx2aEk2QW51cVk1UVo4SWhzZ0JpQUZoU0FIZ3lBR0lBV0RoU0FHUWlTSklBWkNIb21GSUFaQ0dZbUZmQ0FXZkNJSGZDSVRJQXNnRllXRElCV0ZmQ0FUUWpLSklCTkNMb21GSUJOQ0Y0bUZmRUx3M0xuUThLektsQlI4SWhZZ0J5QUdoU0FGZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FaZkNJRmZDSVVJQk1nQzRXRElBdUZmQ0FVUWpLSklCUkNMb21GSUJSQ0Y0bUZmRUw4MzhpMjFOREMyeWQ4SWhrZ0JTQUhoU0FHZ3lBRklBZURoU0FGUWlTSklBVkNIb21GSUFWQ0dZbUZmQ0FZZkNJR2ZDSVZJQ2g4SUNRZ0ZId2dKeUFUZkNBaklBdDhJQlVnRkNBVGhZTWdFNFY4SUJWQ01va2dGVUl1aVlVZ0ZVSVhpWVY4UXFhU20rR0ZwOGlOTG53aUdDQUdJQVdGSUFlRElBWWdCWU9GSUFaQ0pJa2dCa0llaVlVZ0JrSVppWVY4SUJwOElnZDhJZ3NnRlNBVWhZTWdGSVY4SUF0Q01va2dDMEl1aVlVZ0MwSVhpWVY4UXUzVmtOYkZ2NXVXelFCOElob2dCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBYmZDSUZmQ0lUSUFzZ0ZZV0RJQldGZkNBVFFqS0pJQk5DTG9tRklCTkNGNG1GZkVMZjU5YnN1YUtEbk5NQWZDSWJJQVVnQjRVZ0JvTWdCU0FIZzRVZ0JVSWtpU0FGUWg2SmhTQUZRaG1KaFh3Z0Zud2lCbndpRkNBVElBdUZneUFMaFh3Z0ZFSXlpU0FVUWk2SmhTQVVRaGVKaFh4QzNzZTkzY2pxbklYbEFId2lGaUFHSUFXRklBZURJQVlnQllPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElCbDhJZ2Q4SWhWOElDWWdGSHdnS1NBVGZDQWxJQXQ4SUJVZ0ZDQVRoWU1nRTRWOElCVkNNb2tnRlVJdWlZVWdGVUlYaVlWOFFxamwzdU96MTRLMTlnQjhJaGtnQnlBR2hTQUZneUFISUFhRGhTQUhRaVNKSUFkQ0hvbUZJQWRDR1ltRmZDQVlmQ0lGZkNJTElCVWdGSVdESUJTRmZDQUxRaktKSUF0Q0xvbUZJQXRDRjRtRmZFTG0zYmEvNUtXeTRZRi9mQ0lZSUFVZ0I0VWdCb01nQlNBSGc0VWdCVUlraVNBRlFoNkpoU0FGUWhtSmhYd2dHbndpQm53aUV5QUxJQldGZ3lBVmhYd2dFMEl5aVNBVFFpNkpoU0FUUWhlSmhYeEN1K3FJcE5HUWk3bVNmM3dpR2lBR0lBV0ZJQWVESUFZZ0JZT0ZJQVpDSklrZ0JrSWVpWVVnQmtJWmlZVjhJQnQ4SWdkOEloUWdFeUFMaFlNZ0M0VjhJQlJDTW9rZ0ZFSXVpWVVnRkVJWGlZVjhRdVNHeE9lVWxQcmZvbjk4SWhzZ0J5QUdoU0FGZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FXZkNJRmZDSVZmQ0F2SUJSOElDc2dFM3dnTGlBTGZDQVZJQlFnRTRXRElCT0ZmQ0FWUWpLSklCVkNMb21GSUJWQ0Y0bUZmRUtCNElqaXU4bVpqYWgvZkNJV0lBVWdCNFVnQm9NZ0JTQUhnNFVnQlVJa2lTQUZRaDZKaFNBRlFobUpoWHdnR1h3aUJud2lDeUFWSUJTRmd5QVVoWHdnQzBJeWlTQUxRaTZKaFNBTFFoZUpoWHhDa2EvaWg0M3U0cVZDZkNJWklBWWdCWVVnQjRNZ0JpQUZnNFVnQmtJa2lTQUdRaDZKaFNBR1FobUpoWHdnR0h3aUIzd2lFeUFMSUJXRmd5QVZoWHdnRTBJeWlTQVRRaTZKaFNBVFFoZUpoWHhDc1B6U3NyQzBsTFpIZkNJWUlBY2dCb1VnQllNZ0J5QUdnNFVnQjBJa2lTQUhRaDZKaFNBSFFobUpoWHdnR253aUJYd2lGQ0FUSUF1Rmd5QUxoWHdnRkVJeWlTQVVRaTZKaFNBVVFoZUpoWHhDbUtTOXQ1MkR1c2xSZkNJYUlBVWdCNFVnQm9NZ0JTQUhnNFVnQlVJa2lTQUZRaDZKaFNBRlFobUpoWHdnRzN3aUJud2lGWHdnTVNBVWZDQXRJQk44SURBZ0Mzd2dGU0FVSUJPRmd5QVRoWHdnRlVJeWlTQVZRaTZKaFNBVlFoZUpoWHhDa05LV3E4WEV3Y3hXZkNJYklBWWdCWVVnQjRNZ0JpQUZnNFVnQmtJa2lTQUdRaDZKaFNBR1FobUpoWHdnRm53aUIzd2lDeUFWSUJTRmd5QVVoWHdnQzBJeWlTQUxRaTZKaFNBTFFoZUpoWHhDcXNERXU5V3dqWWQwZkNJV0lBY2dCb1VnQllNZ0J5QUdnNFVnQjBJa2lTQUhRaDZKaFNBSFFobUpoWHdnR1h3aUJYd2lFeUFMSUJXRmd5QVZoWHdnRTBJeWlTQVRRaTZKaFNBVFFoZUpoWHhDdUtQdmxZT09xTFVRZkNJWklBVWdCNFVnQm9NZ0JTQUhnNFVnQlVJa2lTQUZRaDZKaFNBRlFobUpoWHdnR0h3aUJud2lGQ0FUSUF1Rmd5QUxoWHdnRkVJeWlTQVVRaTZKaFNBVVFoZUpoWHhDeUtITHh1dWlzTklaZkNJWUlBWWdCWVVnQjRNZ0JpQUZnNFVnQmtJa2lTQUdRaDZKaFNBR1FobUpoWHdnR253aUIzd2lGU0EwZkNBM0lCUjhJRE1nRTN3Z05pQUxmQ0FWSUJRZ0U0V0RJQk9GZkNBVlFqS0pJQlZDTG9tRklCVkNGNG1GZkVMVDFvYUtoWUhibXg1OElob2dCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBYmZDSUZmQ0lMSUJVZ0ZJV0RJQlNGZkNBTFFqS0pJQXRDTG9tRklBdENGNG1GZkVLWjE3djh6ZW1kcENkOEloc2dCU0FIaFNBR2d5QUZJQWVEaFNBRlFpU0pJQVZDSG9tRklBVkNHWW1GZkNBV2ZDSUdmQ0lUSUFzZ0ZZV0RJQldGZkNBVFFqS0pJQk5DTG9tRklCTkNGNG1GZkVLb2tlMk0zcGF2MkRSOEloWWdCaUFGaFNBSGd5QUdJQVdEaFNBR1FpU0pJQVpDSG9tRklBWkNHWW1GZkNBWmZDSUhmQ0lVSUJNZ0M0V0RJQXVGZkNBVVFqS0pJQlJDTG9tRklCUkNGNG1GZkVManRLV3V2SmFEampsOEloa2dCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBWWZDSUZmQ0lWZkNBNUlCUjhJRFVnRTN3Z09DQUxmQ0FWSUJRZ0U0V0RJQk9GZkNBVlFqS0pJQlZDTG9tRklCVkNGNG1GZkVMTGxZYWFyc21xN000QWZDSVlJQVVnQjRVZ0JvTWdCU0FIZzRVZ0JVSWtpU0FGUWg2SmhTQUZRaG1KaFh3Z0dud2lCbndpQ3lBVklCU0ZneUFVaFh3Z0MwSXlpU0FMUWk2SmhTQUxRaGVKaFh4Qzg4YVB1L2ZKc3M3YkFId2lHaUFHSUFXRklBZURJQVlnQllPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElCdDhJZ2Q4SWhNZ0N5QVZoWU1nRllWOElCTkNNb2tnRTBJdWlZVWdFMElYaVlWOFFxUHh5clc5L3B1WDZBQjhJaHNnQnlBR2hTQUZneUFISUFhRGhTQUhRaVNKSUFkQ0hvbUZJQWRDR1ltRmZDQVdmQ0lGZkNJVUlCTWdDNFdESUF1RmZDQVVRaktKSUJSQ0xvbUZJQlJDRjRtRmZFTDg1Yjd2NWQzZ3gvUUFmQ0lXSUFVZ0I0VWdCb01nQlNBSGc0VWdCVUlraVNBRlFoNkpoU0FGUWhtSmhYd2dHWHdpQm53aUZYd2dPeUFVZkNBK0lCTjhJRG9nQzN3Z0ZTQVVJQk9GZ3lBVGhYd2dGVUl5aVNBVlFpNkpoU0FWUWhlSmhYeEM0TjdjbVBUdDJOTDRBSHdpR1NBR0lBV0ZJQWVESUFZZ0JZT0ZJQVpDSklrZ0JrSWVpWVVnQmtJWmlZVjhJQmg4SWdkOElnc2dGU0FVaFlNZ0ZJVjhJQXRDTW9rZ0MwSXVpWVVnQzBJWGlZVjhRdkxXd28vS2dwN2toSDk4SWhnZ0J5QUdoU0FGZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FhZkNJRmZDSVRJQXNnRllXRElCV0ZmQ0FUUWpLSklCTkNMb21GSUJOQ0Y0bUZmRUxzODVEVGdjSEE0NHgvZkNJYUlBVWdCNFVnQm9NZ0JTQUhnNFVnQlVJa2lTQUZRaDZKaFNBRlFobUpoWHdnRzN3aUJud2lGQ0FUSUF1Rmd5QUxoWHdnRkVJeWlTQVVRaTZKaFNBVVFoZUpoWHhDcUx5TW02TC92OStRZjN3aUd5QUdJQVdGSUFlRElBWWdCWU9GSUFaQ0pJa2dCa0llaVlVZ0JrSVppWVY4SUJaOElnZDhJaFY4SUVFZ0ZId2dRQ0FUZkNBOElBdDhJQlVnRkNBVGhZTWdFNFY4SUJWQ01va2dGVUl1aVlVZ0ZVSVhpWVY4UXVuN2l2UzluWnVvcEg5OEloWWdCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBWmZDSUZmQ0lMSUJVZ0ZJV0RJQlNGZkNBTFFqS0pJQXRDTG9tRklBdENGNG1GZkVLVjhwbVcrLzdvL0w1L2ZDSVpJQVVnQjRVZ0JvTWdCU0FIZzRVZ0JVSWtpU0FGUWg2SmhTQUZRaG1KaFh3Z0dId2lCbndpRXlBTElCV0ZneUFWaFh3Z0UwSXlpU0FUUWk2SmhTQVRRaGVKaFh4Q3E2YkptNjZlM3JoR2ZDSVlJQVlnQllVZ0I0TWdCaUFGZzRVZ0JrSWtpU0FHUWg2SmhTQUdRaG1KaFh3Z0dud2lCM3dpRkNBVElBdUZneUFMaFh3Z0ZFSXlpU0FVUWk2SmhTQVVRaGVKaFh4Q25NT1owZTdaejVOS2ZDSWFJQWNnQm9VZ0JZTWdCeUFHZzRVZ0IwSWtpU0FIUWg2SmhTQUhRaG1KaFh3Z0czd2lCWHdpRlNCSGZDQkRJQlI4SUVZZ0Uzd2dRaUFMZkNBVklCUWdFNFdESUJPRmZDQVZRaktKSUJWQ0xvbUZJQlZDRjRtRmZFS0hoSU9POHBpdXcxRjhJaHNnQlNBSGhTQUdneUFGSUFlRGhTQUZRaVNKSUFWQ0hvbUZJQVZDR1ltRmZDQVdmQ0lHZkNJTElCVWdGSVdESUJTRmZDQUxRaktKSUF0Q0xvbUZJQXRDRjRtRmZFS2Uxb1B2N0xxZjdXcDhJaFlnQmlBRmhTQUhneUFHSUFXRGhTQUdRaVNKSUFaQ0hvbUZJQVpDR1ltRmZDQVpmQ0lIZkNJVElBc2dGWVdESUJXRmZDQVRRaktKSUJOQ0xvbUZJQk5DRjRtRmZFTDRvcnZ6L3UvVHZuVjhJaGtnQnlBR2hTQUZneUFISUFhRGhTQUhRaVNKSUFkQ0hvbUZJQWRDR1ltRmZDQVlmQ0lGZkNJVUlCTWdDNFdESUF1RmZDQVVRaktKSUJSQ0xvbUZJQlJDRjRtRmZFSzYzOTJRcC9XWitBWjhJaHdnQlNBSGhTQUdneUFGSUFlRGhTQUZRaVNKSUFWQ0hvbUZJQVZDR1ltRmZDQWFmQ0lHZkNJVmZDQTlRaitKSUQxQ09JbUZJRDFDQjRpRklEbDhJRVY4SUVSQ0xZa2dSRUlEaVlVZ1JFSUdpSVY4SWhnZ0ZId2dTQ0FUZkNCRUlBdDhJQlVnRkNBVGhZTWdFNFY4SUJWQ01va2dGVUl1aVlVZ0ZVSVhpWVY4UXFheG9wYmF1Tit4Q253aUdpQUdJQVdGSUFlRElBWWdCWU9GSUFaQ0pJa2dCa0llaVlVZ0JrSVppWVY4SUJ0OElnZDhJZ3NnRlNBVWhZTWdGSVY4SUF0Q01va2dDMEl1aVlVZ0MwSVhpWVY4UXE2YjVQZkxnT2FmRVh3aUd5QUhJQWFGSUFXRElBY2dCb09GSUFkQ0pJa2dCMEllaVlVZ0IwSVppWVY4SUJaOElnVjhJaE1nQ3lBVmhZTWdGWVY4SUJOQ01va2dFMEl1aVlVZ0UwSVhpWVY4UXB1TzhaalI1c0s0RzN3aUhTQUZJQWVGSUFhRElBVWdCNE9GSUFWQ0pJa2dCVUllaVlVZ0JVSVppWVY4SUJsOElnWjhJaFFnRXlBTGhZTWdDNFY4SUJSQ01va2dGRUl1aVlVZ0ZFSVhpWVY4UW9UN2taalMvdDN0S0h3aUhpQUdJQVdGSUFlRElBWWdCWU9GSUFaQ0pJa2dCa0llaVlVZ0JrSVppWVY4SUJ4OElnZDhJaFY4SUQ5Q1A0a2dQMEk0aVlVZ1AwSUhpSVVnTzN3Z1Izd2dQa0kvaVNBK1FqaUpoU0ErUWdlSWhTQTZmQ0JHZkNBWVFpMkpJQmhDQTRtRklCaENCb2lGZkNJV1FpMkpJQlpDQTRtRklCWkNCb2lGZkNJWklCUjhJRW9nRTN3Z0ZpQUxmQ0FWSUJRZ0U0V0RJQk9GZkNBVlFqS0pJQlZDTG9tRklCVkNGNG1GZkVLVHlaeUd0TytxNVRKOElnc2dCeUFHaFNBRmd5QUhJQWFEaFNBSFFpU0pJQWRDSG9tRklBZENHWW1GZkNBYWZDSUZmQ0lUSUJVZ0ZJV0RJQlNGZkNBVFFqS0pJQk5DTG9tRklCTkNGNG1GZkVLOC9hYXVvY0d2enp4OElob2dCU0FIaFNBR2d5QUZJQWVEaFNBRlFpU0pJQVZDSG9tRklBVkNHWW1GZkNBYmZDSUdmQ0lVSUJNZ0ZZV0RJQldGZkNBVVFqS0pJQlJDTG9tRklCUkNGNG1GZkVMTW1zRGd5ZmpaanNNQWZDSWJJQVlnQllVZ0I0TWdCaUFGZzRVZ0JrSWtpU0FHUWg2SmhTQUdRaG1KaFh3Z0hYd2lCM3dpRlNBVUlCT0ZneUFUaFh3Z0ZVSXlpU0FWUWk2SmhTQVZRaGVKaFh4Q3RvWDUyZXlYOWVMTUFId2lIQ0FISUFhRklBV0RJQWNnQm9PRklBZENKSWtnQjBJZWlZVWdCMElaaVlWOElCNThJZ1Y4SWhZZ1RYdzNBOENLQVVFQUlGQWdCU0FIaFNBR2d5QUZJQWVEaFNBRlFpU0pJQVZDSG9tRklBVkNHWW1GZkNBTGZDSUdJQVdGSUFlRElBWWdCWU9GSUFaQ0pJa2dCa0llaVlVZ0JrSVppWVY4SUJwOElnY2dCb1VnQllNZ0J5QUdnNFVnQjBJa2lTQUhRaDZKaFNBSFFobUpoWHdnRzN3aUJTQUhoU0FHZ3lBRklBZURoU0FGUWlTSklBVkNIb21GSUFWQ0dZbUZmQ0FjZkNJTGZEY0RvSW9CUVFBZ1RpQkFRaitKSUVCQ09JbUZJRUJDQjRpRklEeDhJRWg4SUJsQ0xZa2dHVUlEaVlVZ0dVSUdpSVY4SWhrZ0Uzd2dGaUFWSUJTRmd5QVVoWHdnRmtJeWlTQVdRaTZKaFNBV1FoZUpoWHhDcXZ5VjQ4K3p5ci9aQUh3aUdpQUdmQ0lUZkRjRHVJb0JRUUFnVWlBTElBV0ZJQWVESUFzZ0JZT0ZJQXRDSklrZ0MwSWVpWVVnQzBJWmlZVjhJQnA4SWdaOE53T1lpZ0ZCQUNCUElFRkNQNGtnUVVJNGlZVWdRVUlIaUlVZ1FId2dHSHdnUzBJdGlTQkxRZ09KaFNCTFFnYUloWHdnRkh3Z0V5QVdJQldGZ3lBVmhYd2dFMEl5aVNBVFFpNkpoU0FUUWhlSmhYeEM3UFhiMXJQMTIrWGZBSHdpR0NBSGZDSVVmRGNEc0lvQlFRQWdWQ0FHSUF1RklBV0RJQVlnQzRPRklBWkNKSWtnQmtJZWlZVWdCa0laaVlWOElCaDhJZ2Q4TndPUWlnRkJBQ0JNSUVWQ1A0a2dSVUk0aVlVZ1JVSUhpSVVnUVh3Z1NYd2dHVUl0aVNBWlFnT0poU0FaUWdhSWhYd2dGWHdnRkNBVElCYUZneUFXaFh3Z0ZFSXlpU0FVUWk2SmhTQVVRaGVKaFh4Q2w3Q2Qwc1N4aHFMc0FId2lFeUFGZkh3M0E2aUtBVUVBSUFFZ0J5QUdoU0FMZ3lBSElBYURoU0FIUWlTSklBZENIb21GSUFkQ0dZbUZmQ0FUZkh3M0E0aUtBUXYzQ1FJQmZnUi9RUUFwQTRDS0FTSUFwMEVEZGtFUGNTSUJRUU4wUVlDSkFXb2lBaUFDS1FNQVFuOGdBRUlEaGlJQWhrSi9oWU5DZ0FFZ0FJYUZOd01BSUFGQkFXb2hBd0pBSUFGQkRra05BQUpBSUFOQkQwY05BRUVBUWdBM0EvaUpBUXRCZ0lrQkVBTkJBQ0VEQ3lBRElRSUNRRUVISUFOclFRZHhJZ1JGRFFBZ0EwRURkRUdBaVFGcUlRRWdBeUVDQTBBZ0FVSUFOd01BSUFGQkNHb2hBU0FDUVFGcUlRSWdCRUYvYWlJRURRQUxDd0pBSUFOQmVHcEJCMGtOQUNBQ1FRTjBJUUVEUUNBQlFiaUpBV3BDQURjREFDQUJRYkNKQVdwQ0FEY0RBQ0FCUWFpSkFXcENBRGNEQUNBQlFhQ0pBV3BDQURjREFDQUJRWmlKQVdwQ0FEY0RBQ0FCUVpDSkFXcENBRGNEQUNBQlFZaUpBV3BDQURjREFDQUJRWUNKQVdwQ0FEY0RBQ0FCUWNBQWFpSUJRZmdBUncwQUN3dEJBQ0VCUVFCQkFDa0RnSW9CSWdCQ080WWdBRUlyaGtLQWdJQ0FnSURBL3dDRGhDQUFRaHVHUW9DQWdJQ0E0RCtESUFCQ0M0WkNnSUNBZ1BBZmc0U0VJQUJDQlloQ2dJQ0ErQStESUFCQ0ZZaENnSUQ4QjRPRUlBQkNKWWhDZ1A0RGd5QUFRZ09HUWppSWhJU0VOd1A0aVFGQmdJa0JFQU5CQUVFQUtRUEFpZ0VpQUVJNGhpQUFRb0QrQTROQ0tJYUVJQUJDZ0lEOEI0TkNHSVlnQUVLQWdJRDRENE5DQ0lhRWhDQUFRZ2lJUW9DQWdQZ1BneUFBUWhpSVFvQ0EvQWVEaENBQVFpaUlRb0QrQTRNZ0FFSTRpSVNFaERjRHdJb0JRUUJCQUNrRHVJb0JJZ0JDT0lZZ0FFS0EvZ09EUWlpR2hDQUFRb0NBL0FlRFFoaUdJQUJDZ0lDQStBK0RRZ2lHaElRZ0FFSUlpRUtBZ0lENEQ0TWdBRUlZaUVLQWdQd0hnNFFnQUVJb2lFS0EvZ09ESUFCQ09JaUVoSVEzQTdpS0FVRUFRUUFwQTdDS0FTSUFRamlHSUFCQ2dQNERnMElvaG9RZ0FFS0FnUHdIZzBJWWhpQUFRb0NBZ1BnUGcwSUlob1NFSUFCQ0NJaENnSUNBK0ErRElBQkNHSWhDZ0lEOEI0T0VJQUJDS0loQ2dQNERneUFBUWppSWhJU0VOd093aWdGQkFFRUFLUU9vaWdFaUFFSTRoaUFBUW9EK0E0TkNLSWFFSUFCQ2dJRDhCNE5DR0lZZ0FFS0FnSUQ0RDROQ0NJYUVoQ0FBUWdpSVFvQ0FnUGdQZ3lBQVFoaUlRb0NBL0FlRGhDQUFRaWlJUW9EK0E0TWdBRUk0aUlTRWhEY0RxSW9CUVFCQkFDa0RvSW9CSWdCQ09JWWdBRUtBL2dPRFFpaUdoQ0FBUW9DQS9BZURRaGlHSUFCQ2dJQ0ErQStEUWdpR2hJUWdBRUlJaUVLQWdJRDRENE1nQUVJWWlFS0FnUHdIZzRRZ0FFSW9pRUtBL2dPRElBQkNPSWlFaElRM0E2Q0tBVUVBUVFBcEE1aUtBU0lBUWppR0lBQkNnUDREZzBJb2hvUWdBRUtBZ1B3SGcwSVloaUFBUW9DQWdQZ1BnMElJaG9TRUlBQkNDSWhDZ0lDQStBK0RJQUJDR0loQ2dJRDhCNE9FSUFCQ0tJaENnUDREZ3lBQVFqaUloSVNFTndPWWlnRkJBRUVBS1FPUWlnRWlBRUk0aGlBQVFvRCtBNE5DS0lhRUlBQkNnSUQ4QjROQ0dJWWdBRUtBZ0lENEQ0TkNDSWFFaENBQVFnaUlRb0NBZ1BnUGd5QUFRaGlJUW9DQS9BZURoQ0FBUWlpSVFvRCtBNE1nQUVJNGlJU0VoRGNEa0lvQlFRQkJBQ2tEaUlvQklnQkNPSVlnQUVLQS9nT0RRaWlHaENBQVFvQ0EvQWVEUWhpR0lBQkNnSUNBK0ErRFFnaUdoSVFnQUVJSWlFS0FnSUQ0RDRNZ0FFSVlpRUtBZ1B3SGc0UWdBRUlvaUVLQS9nT0RJQUJDT0lpRWhJUTNBNGlLQVFKQVFRQW9Bc2lLQVNJRVJRMEFRUUFoQWdOQUlBRkJnQWxxSUFGQmlJb0JhaTBBQURvQUFDQUJRUUZxSVFFZ0JDQUNRUUZxSWdKQi93RnhTdzBBQ3dzTEJnQkJnSWtCQzZFQ0FFRUFRZ0EzQTRDS0FVRUFRVEJCd0FBZ0FVR0FBMFlpQVJzMkFzaUtBVUVBUXFTZjZmZmJnOUxheHdCQytjTDRtNUdqcy9EYkFDQUJHemNEd0lvQlFRQkNwNS9tcDliQmk0WmJRdXY2aHRxL3RmYkJIeUFCR3pjRHVJb0JRUUJDa2FyZ3d2YlFrdHFPZjBLZjJQblp3cEhhZ3B0L0lBRWJOd093aWdGQkFFS3hsb0QrLzh6Sm1lY0FRdEdGbXUvNno1U0gwUUFnQVJzM0E2aUtBVUVBUXJteXViaVBtL3VYRlVMeDdmVDRwYWY5cDZWL0lBRWJOd09naWdGQkFFS1h1c09EbzZ2QXJKRi9RcXZ3MC9TdjdyeTNQQ0FCR3pjRG1Jb0JRUUJDaDZyenM2T2xpczNpQUVLN3pxcW0yTkRyczd0L0lBRWJOd09RaWdGQkFFTFl2WmFJM0t2bjNVdENpSkx6bmYvTStZVHFBQ0FCR3pjRGlJb0JJQUFRQWhBRUN3c0xBUUJCZ0FnTEJOQUFBQUE9XCI7XG52YXIgaGFzaCQ5ID0gXCJjZGQ1N2Y2YVwiO1xudmFyIHdhc21Kc29uJDkgPSB7XG5cdG5hbWU6IG5hbWUkOSxcblx0ZGF0YTogZGF0YSQ5LFxuXHRoYXNoOiBoYXNoJDlcbn07XG5cbmNvbnN0IG11dGV4JDggPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkOCA9IG51bGw7XG4vKipcbiAqIENhbGN1bGF0ZXMgU0hBLTIgKFNIQS0zODQpIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNoYTM4NChkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSQ4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkOCwgd2FzbUpzb24kOSwgNDgpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJDggPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSQ4LmNhbGN1bGF0ZShkYXRhLCAzODQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSQ4LmNhbGN1bGF0ZShkYXRhLCAzODQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTSEEtMiAoU0hBLTM4NCkgaGFzaCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVTSEEzODQoKSB7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kOSwgNDgpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KDM4NCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KDM4NCk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogMTI4LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogNDgsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbmNvbnN0IG11dGV4JDcgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkNyA9IG51bGw7XG4vKipcbiAqIENhbGN1bGF0ZXMgU0hBLTIgKFNIQS01MTIpIGhhc2hcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHNoYTUxMihkYXRhKSB7XG4gICAgaWYgKHdhc21DYWNoZSQ3ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkNywgd2FzbUpzb24kOSwgNjQpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJDcgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSQ3LmNhbGN1bGF0ZShkYXRhLCA1MTIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSQ3LmNhbGN1bGF0ZShkYXRhLCA1MTIpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTSEEtMiAoU0hBLTUxMikgaGFzaCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVTSEE1MTIoKSB7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kOSwgNjQpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KDUxMik7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KDUxMik7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogMTI4LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogNjQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJDggPSBcInh4aGFzaDMyXCI7XG52YXIgZGF0YSQ4ID0gXCJBR0Z6YlFFQUFBQUJFUVJnQUFGL1lBRi9BR0FBQUdBQ2YzOEFBd2NHQUFFQkFnQURCUVFCQVFJQ0JnNENmd0ZCc0lrRkMzOEFRWUFJQ3dkd0NBWnRaVzF2Y25rQ0FBNUlZWE5vWDBkbGRFSjFabVpsY2dBQUNVaGhjMmhmU1c1cGRBQUJDMGhoYzJoZlZYQmtZWFJsQUFJS1NHRnphRjlHYVc1aGJBQUREVWhoYzJoZlIyVjBVM1JoZEdVQUJBNUlZWE5vWDBOaGJHTjFiR0YwWlFBRkNsTlVRVlJGWDFOSldrVURBUXF4RUFZRkFFR0FDUXROQUVFQVFnQTNBNmlKQVVFQUlBQTJBb2lKQVVFQUlBQkJ6NHlpamdacU5nS01pUUZCQUNBQVFmZVVyNjk0YWpZQ2hJa0JRUUFnQUVHb2lJMmhBbW8yQW9DSkFVRUFRUUEyQXFDSkFRdTRDQUVIZndKQUlBQkZEUUJCQUVFQUtRT29pUUVnQUsxOE53T29pUUVDUUVFQUtBS2dpUUVpQVNBQWFrRVBTdzBBQWtBQ1FDQUFRUU54SWdJTkFFR0FDU0VESUFBaEJBd0JDeUFBUVh4eElRUkJnQWtoQXdOQVFRQkJBQ2dDb0lrQklnVkJBV28yQXFDSkFTQUZRWkNKQVdvZ0F5MEFBRG9BQUNBRFFRRnFJUU1nQWtGL2FpSUNEUUFMQ3lBQVFRUkpEUUVEUUVFQVFRQW9BcUNKQVNJQ1FRRnFOZ0tnaVFFZ0FrR1FpUUZxSUFNdEFBQTZBQUFnQTBFQmFpMEFBQ0VDUVFCQkFDZ0NvSWtCSWdWQkFXbzJBcUNKQVNBRlFaQ0pBV29nQWpvQUFDQURRUUpxTFFBQUlRSkJBRUVBS0FLZ2lRRWlCVUVCYWpZQ29Ja0JJQVZCa0lrQmFpQUNPZ0FBSUFOQkEyb3RBQUFoQWtFQVFRQW9BcUNKQVNJRlFRRnFOZ0tnaVFFZ0JVR1FpUUZxSUFJNkFBQWdBMEVFYWlFRElBUkJmR29pQkEwQURBSUxDeUFBUWZBSWFpRUdBa0FDUUNBQkRRQkJBQ2dDaklrQklRSkJBQ2dDaUlrQklRVkJBQ2dDaElrQklRUkJBQ2dDZ0lrQklRRkJnQWtoQXd3QkMwR0FDU0VEQWtBZ0FVRVBTdzBBUVlBSklRTUNRQUpBUVFBZ0FXdEJBM0VpQkEwQUlBRWhCUXdCQ3lBQklRSURRRUVBSUFKQkFXb2lCVFlDb0lrQklBSkJrSWtCYWlBRExRQUFPZ0FBSUFOQkFXb2hBeUFGSVFJZ0JFRi9haUlFRFFBTEN5QUJRWE5xUVFOSkRRQkJBQ0VFQTBBZ0F5QUVhaUlCTFFBQUlRZEJBQ0FGSUFScUlnSkJBV28yQXFDSkFTQUNRWkNKQVdvZ0J6b0FBQ0FCUVFGcUxRQUFJUWRCQUNBQ1FRSnFOZ0tnaVFFZ0FrR1JpUUZxSUFjNkFBQWdBVUVDYWkwQUFDRUhRUUFnQWtFRGFqWUNvSWtCSUFKQmtva0JhaUFIT2dBQUlBRkJBMm90QUFBaEFVRUFJQUpCQkdvMkFxQ0pBU0FDUVpPSkFXb2dBVG9BQUNBRklBUkJCR29pQkdwQkVFY05BQXNnQXlBRWFpRURDMEVBUVFBb0FwQ0pBVUgzbEsrdmVHeEJBQ2dDZ0lrQmFrRU5kMEd4ODkzeGVXd2lBVFlDZ0lrQlFRQkJBQ2dDbElrQlFmZVVyNjk0YkVFQUtBS0VpUUZxUVExM1FiSHozZkY1YkNJRU5nS0VpUUZCQUVFQUtBS1lpUUZCOTVTdnIzaHNRUUFvQW9pSkFXcEJEWGRCc2ZQZDhYbHNJZ1UyQW9pSkFVRUFRUUFvQXB5SkFVSDNsSyt2ZUd4QkFDZ0NqSWtCYWtFTmQwR3g4OTN4ZVd3aUFqWUNqSWtCQ3lBQVFZQUphaUVBQWtBZ0F5QUdTdzBBQTBBZ0F5Z0NBRUgzbEsrdmVHd2dBV3BCRFhkQnNmUGQ4WGxzSVFFZ0EwRU1haWdDQUVIM2xLK3ZlR3dnQW1wQkRYZEJzZlBkOFhsc0lRSWdBMEVJYWlnQ0FFSDNsSyt2ZUd3Z0JXcEJEWGRCc2ZQZDhYbHNJUVVnQTBFRWFpZ0NBRUgzbEsrdmVHd2dCR3BCRFhkQnNmUGQ4WGxzSVFRZ0EwRVFhaUlESUFaTkRRQUxDMEVBSUFJMkFveUpBVUVBSUFVMkFvaUpBVUVBSUFRMkFvU0pBVUVBSUFFMkFvQ0pBVUVBSUFBZ0EyczJBcUNKQVNBQUlBTkdEUUJCQUNFQ0EwQWdBa0dRaVFGcUlBTWdBbW90QUFBNkFBQWdBa0VCYWlJQ1FRQW9BcUNKQVVrTkFBc0xDNlFEQWdGK0JuOUJBQ2tEcUlrQklnQ25JUUVDUUFKQUlBQkNFRlFOQUVFQUtBS0VpUUZCQjNkQkFDZ0NnSWtCUVFGM2FrRUFLQUtJaVFGQkRIZHFRUUFvQW95SkFVRVNkMm9oQWd3QkMwRUFLQUtJaVFGQnNjL1pzZ0ZxSVFJTElBSWdBV29oQWtHUWlRRWhBd0pBUVFBb0FxQ0pBU0lFUVpDSkFXb2lCVUdVaVFGSkRRQkJrSWtCSVFFRFFDQUJLQUlBUWIzY3lwVjhiQ0FDYWtFUmQwR3YxdE8rQW13aEFpQUJRUWhxSVFZZ0FVRUVhaUlESVFFZ0JpQUZUUTBBQ3dzQ1FDQURJQVZHRFFBZ0JFR1BpUUZxSVFZQ1FBSkFJQVFnQTJ0QkFYRU5BQ0FESVFFTUFRc2dBMEVCYWlFQklBTXRBQUJCc2MvWnNnRnNJQUpxUVF0M1FiSHozZkY1YkNFQ0N5QUdJQU5HRFFBRFFDQUJRUUZxTFFBQVFiSFAyYklCYkNBQkxRQUFRYkhQMmJJQmJDQUNha0VMZDBHeDg5M3hlV3hxUVF0M1FiSHozZkY1YkNFQ0lBRkJBbW9pQVNBRlJ3MEFDd3RCQUNBQ1FROTJJQUp6UWZlVXI2OTRiQ0lCUVExMklBRnpRYjNjeXBWOGJDSUJRUkIySUFGeklnSkJHSFFnQWtHQS9nTnhRUWgwY2lBQlFRaDJRWUQrQTNFZ0FVRVlkbkp5clRjRGdBa0xCZ0JCZ0lrQkMvTURBZ0YrQkg5QkFFSUFOd09vaVFGQkFDQUJOZ0tJaVFGQkFDQUJRYytNb280R2FqWUNqSWtCUVFBZ0FVSDNsSyt2ZUdvMkFvU0pBVUVBSUFGQnFJaU5vUUpxTmdLQWlRRkJBRUVBTmdLZ2lRRWdBQkFDUVFBcEE2aUpBU0lDcHlFQkFrQUNRQ0FDUWhCVURRQkJBQ2dDaElrQlFRZDNRUUFvQW9DSkFVRUJkMnBCQUNnQ2lJa0JRUXgzYWtFQUtBS01pUUZCRW5kcUlRQU1BUXRCQUNnQ2lJa0JRYkhQMmJJQmFpRUFDeUFBSUFGcUlRQkJrSWtCSVFNQ1FFRUFLQUtnaVFFaUJFR1FpUUZxSWdWQmxJa0JTUTBBUVpDSkFTRUJBMEFnQVNnQ0FFRzkzTXFWZkd3Z0FHcEJFWGRCcjliVHZnSnNJUUFnQVVFSWFpRUdJQUZCQkdvaUF5RUJJQVlnQlUwTkFBc0xBa0FnQXlBRlJnMEFJQVJCajRrQmFpRUdBa0FDUUNBRUlBTnJRUUZ4RFFBZ0F5RUJEQUVMSUFOQkFXb2hBU0FETFFBQVFiSFAyYklCYkNBQWFrRUxkMEd4ODkzeGVXd2hBQXNnQmlBRFJnMEFBMEFnQVVFQmFpMEFBRUd4ejlteUFXd2dBUzBBQUVHeHo5bXlBV3dnQUdwQkMzZEJzZlBkOFhsc2FrRUxkMEd4ODkzeGVXd2hBQ0FCUVFKcUlnRWdCVWNOQUFzTFFRQWdBRUVQZGlBQWMwSDNsSyt2ZUd3aUFVRU5kaUFCYzBHOTNNcVZmR3dpQVVFUWRpQUJjeUlBUVJoMElBQkJnUDREY1VFSWRISWdBVUVJZGtHQS9nTnhJQUZCR0haeWNxMDNBNEFKQ3dzTEFRQkJnQWdMQkRBQUFBQT1cIjtcbnZhciBoYXNoJDggPSBcIjllM2EwMGNkXCI7XG52YXIgd2FzbUpzb24kOCA9IHtcblx0bmFtZTogbmFtZSQ4LFxuXHRkYXRhOiBkYXRhJDgsXG5cdGhhc2g6IGhhc2gkOFxufTtcblxuY29uc3QgbXV0ZXgkNiA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSQ2ID0gbnVsbDtcbmZ1bmN0aW9uIHZhbGlkYXRlU2VlZCQzKHNlZWQpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2VlZCkgfHwgc2VlZCA8IDAgfHwgc2VlZCA+IDB4RkZGRkZGRkYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignU2VlZCBtdXN0IGJlIGEgdmFsaWQgMzItYml0IGxvbmcgdW5zaWduZWQgaW50ZWdlci4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgeHhIYXNoMzIgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEBwYXJhbSBzZWVkIE51bWJlciB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gKGRlZmF1bHRzIHRvIDApXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHh4aGFzaDMyKGRhdGEsIHNlZWQgPSAwKSB7XG4gICAgaWYgKHZhbGlkYXRlU2VlZCQzKHNlZWQpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQkMyhzZWVkKSk7XG4gICAgfVxuICAgIGlmICh3YXNtQ2FjaGUkNiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JDYsIHdhc21Kc29uJDgsIDQpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJDYgPSB3YXNtO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSQ2LmNhbGN1bGF0ZShkYXRhLCBzZWVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkNi5jYWxjdWxhdGUoZGF0YSwgc2VlZCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHh4SGFzaDMyIGhhc2ggaW5zdGFuY2VcbiAqIEBwYXJhbSBkYXRhIElucHV0IGRhdGEgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKiBAcGFyYW0gc2VlZCBOdW1iZXIgdXNlZCB0byBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICovXG5mdW5jdGlvbiBjcmVhdGVYWEhhc2gzMihzZWVkID0gMCkge1xuICAgIGlmICh2YWxpZGF0ZVNlZWQkMyhzZWVkKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVTZWVkJDMoc2VlZCkpO1xuICAgIH1cbiAgICByZXR1cm4gV0FTTUludGVyZmFjZSh3YXNtSnNvbiQ4LCA0KS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdChzZWVkKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgaW5pdDogKCkgPT4geyB3YXNtLmluaXQoc2VlZCk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogMTYsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiA0LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSQ3ID0gXCJ4eGhhc2g2NFwiO1xudmFyIGRhdGEkNyA9IFwiQUdGemJRRUFBQUFCREFOZ0FBRi9ZQUFBWUFGL0FBTUhCZ0FCQWdFQUFRVUVBUUVDQWdZT0FuOEJRZENKQlF0L0FFR0FDQXNIY0FnR2JXVnRiM0o1QWdBT1NHRnphRjlIWlhSQ2RXWm1aWElBQUFsSVlYTm9YMGx1YVhRQUFRdElZWE5vWDFWd1pHRjBaUUFDQ2toaGMyaGZSbWx1WVd3QUF3MUlZWE5vWDBkbGRGTjBZWFJsQUFRT1NHRnphRjlEWVd4amRXeGhkR1VBQlFwVFZFRlVSVjlUU1ZwRkF3RUs5QThHQlFCQmdBa0xZd0VCZmtFQVFnQTNBOGlKQVVFQVFRQXBBNEFKSWdBM0E1Q0pBVUVBSUFCQytlclEwT2ZKb2VUaEFIdzNBNWlKQVVFQUlBQkN6OWJUdnRMSHE5bENmRGNEaUlrQlFRQWdBRUxXNjRMdTZ2Mko5ZUFBZkRjRGdJa0JRUUJCQURZQ3dJa0JDNzBJQXdWL0JINENmd0pBSUFCRkRRQkJBRUVBS1FQSWlRRWdBSzE4TndQSWlRRUNRRUVBS0FMQWlRRWlBU0FBYWtFZlN3MEFBa0FDUUNBQVFRTnhJZ0lOQUVHQUNTRURJQUFoQVF3QkN5QUFRWHh4SVFGQmdBa2hBd05BUVFCQkFDZ0N3SWtCSWdSQkFXbzJBc0NKQVNBRVFhQ0pBV29nQXkwQUFEb0FBQ0FEUVFGcUlRTWdBa0YvYWlJQ0RRQUxDeUFBUVFSSkRRRURRRUVBUVFBb0FzQ0pBU0lDUVFGcU5nTEFpUUVnQWtHZ2lRRnFJQU10QUFBNkFBQWdBMEVCYWkwQUFDRUNRUUJCQUNnQ3dJa0JJZ1JCQVdvMkFzQ0pBU0FFUWFDSkFXb2dBam9BQUNBRFFRSnFMUUFBSVFKQkFFRUFLQUxBaVFFaUJFRUJhallDd0lrQklBUkJvSWtCYWlBQ09nQUFJQU5CQTJvdEFBQWhBa0VBUVFBb0FzQ0pBU0lFUVFGcU5nTEFpUUVnQkVHZ2lRRnFJQUk2QUFBZ0EwRUVhaUVESUFGQmZHb2lBUTBBREFJTEN5QUFRZUFJYWlFRkFrQUNRQ0FCRFFCQkFDa0RtSWtCSVFaQkFDa0RrSWtCSVFkQkFDa0RpSWtCSVFoQkFDa0RnSWtCSVFsQmdBa2hBd3dCQzBHQUNTRURBa0FnQVVFZlN3MEFRWUFKSVFNQ1FBSkFRUUFnQVd0QkEzRWlCQTBBSUFFaEFnd0JDeUFCSVFJRFFDQUNRYUNKQVdvZ0F5MEFBRG9BQUNBQ1FRRnFJUUlnQTBFQmFpRURJQVJCZjJvaUJBMEFDd3NnQVVGamFrRURTUTBBUVNBZ0Ftc2hDa0VBSVFRRFFDQUNJQVJxSWdGQm9Ja0JhaUFESUFScUlnc3RBQUE2QUFBZ0FVR2hpUUZxSUF0QkFXb3RBQUE2QUFBZ0FVR2lpUUZxSUF0QkFtb3RBQUE2QUFBZ0FVR2ppUUZxSUF0QkEyb3RBQUE2QUFBZ0NpQUVRUVJxSWdSSERRQUxJQU1nQkdvaEF3dEJBRUVBS1FPZ2lRRkN6OWJUdnRMSHE5bENma0VBS1FPQWlRRjhRaCtKUW9lVnI2K1l0dDZibm45K0lnazNBNENKQVVFQVFRQXBBNmlKQVVMUDF0Tyswc2VyMlVKK1FRQXBBNGlKQVh4Q0g0bENoNVd2cjVpMjNwdWVmMzRpQ0RjRGlJa0JRUUJCQUNrRHNJa0JRcy9XMDc3U3g2dlpRbjVCQUNrRGtJa0JmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZpSUhOd09RaVFGQkFFRUFLUU80aVFGQ3o5YlR2dExIcTlsQ2ZrRUFLUU9ZaVFGOFFoK0pRb2VWcjYrWXR0NmJubjkrSWdZM0E1aUpBUXNnQUVHQUNXb2hBZ0pBSUFNZ0JVc05BQU5BSUFNcEF3QkN6OWJUdnRMSHE5bENmaUFKZkVJZmlVS0hsYSt2bUxiZW01NS9maUVKSUFOQkdHb3BBd0JDejliVHZ0TEhxOWxDZmlBR2ZFSWZpVUtIbGErdm1MYmVtNTUvZmlFR0lBTkJFR29wQXdCQ3o5YlR2dExIcTlsQ2ZpQUhmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZpRUhJQU5CQ0dvcEF3QkN6OWJUdnRMSHE5bENmaUFJZkVJZmlVS0hsYSt2bUxiZW01NS9maUVJSUFOQklHb2lBeUFGVFEwQUN3dEJBQ0FHTndPWWlRRkJBQ0FITndPUWlRRkJBQ0FJTndPSWlRRkJBQ0FKTndPQWlRRkJBQ0FDSUFOck5nTEFpUUVnQWlBRFJnMEFRUUFoQWdOQUlBSkJvSWtCYWlBRElBSnFMUUFBT2dBQUlBSkJBV29pQWtFQUtBTEFpUUZKRFFBTEN3dStCZ0lGZmdWL0FrQUNRRUVBS1FQSWlRRWlBRUlnVkEwQVFRQXBBNGlKQVNJQlFnZUpRUUFwQTRDSkFTSUNRZ0dKZkVFQUtRT1FpUUVpQTBJTWlYeEJBQ2tEbUlrQklnUkNFb2w4SUFKQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUM0OXpLbGZ6Tzh2V0ZmM3dnQVVMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrTGozTXFWL003eTlZVi9mQ0FEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1F1UGN5cFg4enZMMWhYOThJQVJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1QzQ5ektsZnpPOHZXRmYzd2hBUXdCQzBFQUtRT1FpUUZDeGMvWnN2SGx1dW9uZkNFQkN5QUJJQUI4SVFCQm9Ja0JJUVVDUUVFQUtBTEFpUUVpQmtHZ2lRRnFJZ2RCcUlrQlNRMEFRYUNKQVNFSUEwQWdDQ2tEQUVMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkrSUFDRlFodUpRb2VWcjYrWXR0NmJubjkrUXVQY3lwWDh6dkwxaFg5OElRQWdDRUVRYWlFSklBaEJDR29pQlNFSUlBa2dCMDBOQUFzTEFrQUNRQ0FGUVFScUlna2dCMDBOQUNBRklRa01BUXNnQlRVQ0FFS0hsYSt2bUxiZW01NS9maUFBaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoQUFzQ1FDQUpJQWRHRFFBZ0JrR2ZpUUZxSVFVQ1FBSkFJQVlnQ1d0QkFYRU5BQ0FKSVFnTUFRc2dDVUVCYWlFSUlBa3hBQUJDeGMvWnN2SGx1dW9uZmlBQWhVSUxpVUtIbGErdm1MYmVtNTUvZmlFQUN5QUZJQWxHRFFBRFFDQUlRUUZxTVFBQVFzWFAyYkx4NWJycUozNGdDREVBQUVMRno5bXk4ZVc2NmlkK0lBQ0ZRZ3VKUW9lVnI2K1l0dDZibm45K2hVSUxpVUtIbGErdm1MYmVtNTUvZmlFQUlBaEJBbW9pQ0NBSFJ3MEFDd3RCQUNBQVFpR0lJQUNGUXMvVzA3N1N4NnZaUW40aUFFSWRpQ0FBaFVMNTg5M3htZmFacXhaK0lnQkNJSWdnQUlVaUFVSTRoaUFCUW9EK0E0TkNLSWFFSUFGQ2dJRDhCNE5DR0lZZ0FVS0FnSUQ0RDROQ0NJYUVoQ0FBUWdpSVFvQ0FnUGdQZ3lBQVFoaUlRb0NBL0FlRGhDQUFRaWlJUW9EK0E0TWdBRUk0aUlTRWhEY0RnQWtMQmdCQmdJa0JDd0lBQ3dzTEFRQkJnQWdMQkZBQUFBQT1cIjtcbnZhciBoYXNoJDcgPSBcImRjNjFiNGU3XCI7XG52YXIgd2FzbUpzb24kNyA9IHtcblx0bmFtZTogbmFtZSQ3LFxuXHRkYXRhOiBkYXRhJDcsXG5cdGhhc2g6IGhhc2gkN1xufTtcblxuY29uc3QgbXV0ZXgkNSA9IG5ldyBNdXRleCgpO1xubGV0IHdhc21DYWNoZSQ1ID0gbnVsbDtcbmNvbnN0IHNlZWRCdWZmZXIkMiA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbmZ1bmN0aW9uIHZhbGlkYXRlU2VlZCQyKHNlZWQpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2VlZCkgfHwgc2VlZCA8IDAgfHwgc2VlZCA+IDB4RkZGRkZGRkYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignU2VlZCBtdXN0IGJlIGdpdmVuIGFzIHR3byB2YWxpZCAzMi1iaXQgbG9uZyB1bnNpZ25lZCBpbnRlZ2VycyAobG8gKyBoaWdoKS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiB3cml0ZVNlZWQkMihhcnIsIGxvdywgaGlnaCkge1xuICAgIC8vIHdyaXRlIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IERhdGFWaWV3KGFycik7XG4gICAgYnVmZmVyLnNldFVpbnQzMigwLCBsb3csIHRydWUpO1xuICAgIGJ1ZmZlci5zZXRVaW50MzIoNCwgaGlnaCwgdHJ1ZSk7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgeHhIYXNoNjQgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEBwYXJhbSBzZWVkTG93IExvd2VyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqIEBwYXJhbSBzZWVkSGlnaCBIaWdoZXIgMzIgYml0cyBvZiB0aGUgbnVtYmVyIHVzZWQgdG9cbiAqICBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiB4eGhhc2g2NChkYXRhLCBzZWVkTG93ID0gMCwgc2VlZEhpZ2ggPSAwKSB7XG4gICAgaWYgKHZhbGlkYXRlU2VlZCQyKHNlZWRMb3cpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQkMihzZWVkTG93KSk7XG4gICAgfVxuICAgIGlmICh2YWxpZGF0ZVNlZWQkMihzZWVkSGlnaCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZCQyKHNlZWRIaWdoKSk7XG4gICAgfVxuICAgIGlmICh3YXNtQ2FjaGUkNSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JDUsIHdhc21Kc29uJDcsIDgpXG4gICAgICAgICAgICAudGhlbigod2FzbSkgPT4ge1xuICAgICAgICAgICAgd2FzbUNhY2hlJDUgPSB3YXNtO1xuICAgICAgICAgICAgd3JpdGVTZWVkJDIoc2VlZEJ1ZmZlciQyLCBzZWVkTG93LCBzZWVkSGlnaCk7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkNS53cml0ZU1lbW9yeShuZXcgVWludDhBcnJheShzZWVkQnVmZmVyJDIpKTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkNS5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3cml0ZVNlZWQkMihzZWVkQnVmZmVyJDIsIHNlZWRMb3csIHNlZWRIaWdoKTtcbiAgICAgICAgd2FzbUNhY2hlJDUud3JpdGVNZW1vcnkobmV3IFVpbnQ4QXJyYXkoc2VlZEJ1ZmZlciQyKSk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUkNS5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHh4SGFzaDY0IGhhc2ggaW5zdGFuY2VcbiAqIEBwYXJhbSBzZWVkTG93IExvd2VyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqIEBwYXJhbSBzZWVkSGlnaCBIaWdoZXIgMzIgYml0cyBvZiB0aGUgbnVtYmVyIHVzZWQgdG9cbiAqICBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICovXG5mdW5jdGlvbiBjcmVhdGVYWEhhc2g2NChzZWVkTG93ID0gMCwgc2VlZEhpZ2ggPSAwKSB7XG4gICAgaWYgKHZhbGlkYXRlU2VlZCQyKHNlZWRMb3cpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQkMihzZWVkTG93KSk7XG4gICAgfVxuICAgIGlmICh2YWxpZGF0ZVNlZWQkMihzZWVkSGlnaCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZCQyKHNlZWRIaWdoKSk7XG4gICAgfVxuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDcsIDgpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgICAgIHdyaXRlU2VlZCQyKGluc3RhbmNlQnVmZmVyLCBzZWVkTG93LCBzZWVkSGlnaCk7XG4gICAgICAgIHdhc20ud3JpdGVNZW1vcnkobmV3IFVpbnQ4QXJyYXkoaW5zdGFuY2VCdWZmZXIpKTtcbiAgICAgICAgd2FzbS5pbml0KCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB3YXNtLndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KGluc3RhbmNlQnVmZmVyKSk7XG4gICAgICAgICAgICAgICAgd2FzbS5pbml0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogMzIsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiA4LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSQ2ID0gXCJ4eGhhc2gzXCI7XG52YXIgZGF0YSQ2ID0gXCJBR0Z6YlFFQUFBQUJOQWhnQUFGL1lBUi9mMzkvQUdBSGYzOS9mMzkvZndCZ0JIOStmbjRCZm1BRWYzOS9mZ0YrWUFOL2YzNEJmbUFBQUdBQmZ3QUREZzBBQVFJREJBVUZCUVlIQmdBR0JRUUJBUUlDQmc0Q2Z3RkJ3STRGQzM4QVFjQUpDd2R3Q0FadFpXMXZjbmtDQUE1SVlYTm9YMGRsZEVKMVptWmxjZ0FBQ1VoaGMyaGZTVzVwZEFBSUMwaGhjMmhmVlhCa1lYUmxBQWtLU0dGemFGOUdhVzVoYkFBS0RVaGhjMmhmUjJWMFUzUmhkR1VBQ3c1SVlYTm9YME5oYkdOMWJHRjBaUUFNQ2xOVVFWUkZYMU5KV2tVREFRck5RZzBGQUVHQUNndnZBd0VRZmdKQUlBTkZEUUFnQVVFNGFpRUJJQUpCT0dvaEFpQUFLUU13SVFRZ0FDa0RPQ0VGSUFBcEF5QWhCaUFBS1FNb0lRY2dBQ2tERUNFSUlBQXBBeGdoQ1NBQUtRTUFJUW9nQUNrRENDRUxBMEFnQnlBQlFXaHFLUU1BSWd4OElBSkJjR29wQXdBZ0FVRndhaWtEQUNJTmhTSUhRaUNJSUFkQy8vLy8vdytEZm53aEJ5QUpJQUZCV0dvcEF3QWlEbndnQWtGZ2Fpa0RBQ0FCUVdCcUtRTUFJZytGSWdsQ0lJZ2dDVUwvLy8vL0Q0TitmQ0VKSUFzZ0FVRklhaWtEQUNJUWZDQUNRVkJxS1FNQUlBRkJVR29wQXdBaUVZVWlDMElnaUNBTFF2Ly8vLzhQZzM1OElRc2dBa0Y0YWlrREFDQUJRWGhxS1FNQUloS0ZJaE5DSUlnZ0UwTC8vLy8vRDROK0lBUjhJQUVwQXdBaUUzd2hCQ0FDUVdocUtRTUFJQXlGSWd4Q0lJZ2dERUwvLy8vL0Q0TitJQVo4SUExOElRWWdBa0ZZYWlrREFDQU9oU0lNUWlDSUlBeEMvLy8vL3crRGZpQUlmQ0FQZkNFSUlBSkJTR29wQXdBZ0VJVWlERUlnaUNBTVF2Ly8vLzhQZzM0Z0Nud2dFWHdoQ2lBRklCSjhJQUlwQXdBZ0U0VWlCVUlnaUNBRlF2Ly8vLzhQZzM1OElRVWdBVUhBQUdvaEFTQUNRUWhxSVFJZ0EwRi9haUlERFFBTElBQWdDVGNER0NBQUlBbzNBd0FnQUNBTE53TUlJQUFnQnpjREtDQUFJQWczQXhBZ0FDQUZOd000SUFBZ0JqY0RJQ0FBSUFRM0F6QUxDOTRDQWdGL0FYNENRQ0FDSUFFb0FnQWlCMnNpQWlBRVN3MEFJQUFnQXlBRklBZEJBM1JxSUFJUUFTQUFJQVVnQm1vaUJ5a0RBQ0FBS1FNQUlnaENMNGlGSUFpRlFySHozZkVKZmpjREFDQUFJQWNwQXdnZ0FDa0RDQ0lJUWkrSWhTQUloVUt4ODkzeENYNDNBd2dnQUNBSEtRTVFJQUFwQXhBaUNFSXZpSVVnQ0lWQ3NmUGQ4UWwrTndNUUlBQWdCeWtER0NBQUtRTVlJZ2hDTDRpRklBaUZRckh6M2ZFSmZqY0RHQ0FBSUFjcEF5QWdBQ2tESUNJSVFpK0loU0FJaFVLeDg5M3hDWDQzQXlBZ0FDQUhLUU1vSUFBcEF5Z2lDRUl2aUlVZ0NJVkNzZlBkOFFsK053TW9JQUFnQnlrRE1DQUFLUU13SWdoQ0w0aUZJQWlGUXJIejNmRUpmamNETUNBQUlBY3BBemdnQUNrRE9DSUlRaStJaFNBSWhVS3g4OTN4Q1g0M0F6Z2dBQ0FESUFKQkJuUnFJQVVnQkNBQ2F5SUhFQUVnQVNBSE5nSUFEd3NnQUNBRElBVWdCMEVEZEdvZ0JCQUJJQUVnQnlBRWFqWUNBQXVGQVFFQmZ5QUNJQUdGSUFPbklnUkJHSFFnQkVHQS9nTnhRUWgwY2lBRVFRaDJRWUQrQTNFZ0JFRVlkbkp5clVJZ2hpQURoWDFCQURVQ2dJd0JRaUNHSUFCQi9Jc0JhalVDQUlTRklnTkNNWWtnQTBJWWlZVWdBNFZDcGI3ajlOR01oOW1mZjM0aUEwSWppQ0FBclh3Z0E0VkNwYjdqOU5HTWg5bWZmMzRpQTBJY2lDQURoUXRuQUNBQ0lBRnpyU0FEZkNJRFFpR0lRUUF0QUlDTUFVRVFkQ0FBUVFoMGNpQUFRUUYyUVlDTUFXb3RBQUJCR0hSeUlBQkIvNHNCYWkwQUFIS3RoU0FEaFVMUDF0Tyswc2VyMlVKK0lnTkNIWWdnQTRWQytmUGQ4Wm4ybWFzV2ZpSURRaUNJSUFPRkM0a0RBUVIrQWtBZ0FFRUpTUTBBUVFBcEE0Q01BU0FCS1FNZ0lBRXBBeGlGSUFKOGhTSURRamlHSUFOQ2dQNERnMElvaG9RZ0EwS0FnUHdIZzBJWWhpQURRb0NBZ1BnUGcwSUlob1NFSUFOQ0NJaENnSUNBK0ErRElBTkNHSWhDZ0lEOEI0T0VJQU5DS0loQ2dQNERneUFEUWppSWhJU0VJQUN0ZkNBQVFmaUxBV29wQXdBZ0FTa0RNQ0FCS1FNb2hTQUNmWVVpQW53Z0FrTC8vLy8vRDRNaUJDQURRaUNJSWdWK0lnWkMvLy8vL3crRElBSkNJSWdpQWlBRFF2Ly8vLzhQZ3lJRGZud2dCQ0FEZmlJRFFpQ0lmQ0lFUWlDR0lBTkMvLy8vL3crRGhDQUdRaUNJSUFJZ0JYNThJQVJDSUloOGhYd2lBMElsaUNBRGhVTDU4OTN4bWZLWnF4WitJZ05DSUlnZ0E0VVBDd0pBSUFCQkJFa05BQ0FBSUFGQkNHb3BBd0FnQVVFUWFpa0RBQ0FDRUFNUEN3SkFJQUJGRFFBZ0FDQUJLQUlBSUFGQkJHb29BZ0FnQWhBRUR3c2dBU2tET0NBQktRTkFoU0FDaFNJRFFpR0lJQU9GUXMvVzA3N1N4NnZaUW40aUEwSWRpQ0FEaFVMNTg5M3htZmFacXhaK0lnTkNJSWdnQTRVTDNnZ0JCbjRnQUsxQ2g1V3ZyNWkyM3B1ZWYzNGhBd0pBSUFCQklVa05BQUpBSUFCQndRQkpEUUFDUUNBQVFlRUFTUTBBSUFFcEEyZ2dBbjFCQUNrRHVJd0JoU0lFUXYvLy8vOFBneUlGSUFFcEEyQWdBbnhCQUNrRHNJd0JoU0lHUWlDSUlnZCtJZ2hDLy8vLy93K0RJQVJDSUlnaUJDQUdRdi8vLy84UGd5SUdmbndnQlNBR2ZpSUZRaUNJZkNJR1FpQ0dJQVZDLy8vLy93K0RoQ0FJUWlDSUlBUWdCMzU4SUFaQ0lJaDhoU0FEZkNBQktRTjRJQUo5SUFCQnlJc0JhaWtEQUlVaUEwTC8vLy8vRDRNaUJDQUJLUU53SUFKOElBQkJ3SXNCYWlrREFJVWlCVUlnaUNJR2ZpSUhRdi8vLy84UGd5QURRaUNJSWdNZ0JVTC8vLy8vRDRNaUJYNThJQVFnQlg0aUJFSWdpSHdpQlVJZ2hpQUVRdi8vLy84UGc0UWdCMElnaUNBRElBWitmQ0FGUWlDSWZJVjhJUU1MSUFFcEEwZ2dBbjFCQUNrRHFJd0JoU0lFUXYvLy8vOFBneUlGSUFFcEEwQWdBbnhCQUNrRG9Jd0JoU0lHUWlDSUlnZCtJZ2hDLy8vLy93K0RJQVJDSUlnaUJDQUdRdi8vLy84UGd5SUdmbndnQlNBR2ZpSUZRaUNJZkNJR1FpQ0dJQVZDLy8vLy93K0RoQ0FJUWlDSUlBUWdCMzU4SUFaQ0lJaDhoU0FEZkNBQktRTllJQUo5SUFCQjJJc0JhaWtEQUlVaUEwTC8vLy8vRDRNaUJDQUJLUU5RSUFKOElBQkIwSXNCYWlrREFJVWlCVUlnaUNJR2ZpSUhRdi8vLy84UGd5QURRaUNJSWdNZ0JVTC8vLy8vRDRNaUJYNThJQVFnQlg0aUJFSWdpSHdpQlVJZ2hpQUVRdi8vLy84UGc0UWdCMElnaUNBRElBWitmQ0FGUWlDSWZJVjhJUU1MSUFFcEF5Z2dBbjFCQUNrRG1Jd0JoU0lFUXYvLy8vOFBneUlGSUFFcEF5QWdBbnhCQUNrRGtJd0JoU0lHUWlDSUlnZCtJZ2hDLy8vLy93K0RJQVJDSUlnaUJDQUdRdi8vLy84UGd5SUdmbndnQlNBR2ZpSUZRaUNJZkNJR1FpQ0dJQVZDLy8vLy93K0RoQ0FJUWlDSUlBUWdCMzU4SUFaQ0lJaDhoU0FEZkNBQktRTTRJQUo5SUFCQjZJc0JhaWtEQUlVaUEwTC8vLy8vRDRNaUJDQUJLUU13SUFKOElBQkI0SXNCYWlrREFJVWlCVUlnaUNJR2ZpSUhRdi8vLy84UGd5QURRaUNJSWdNZ0JVTC8vLy8vRDRNaUJYNThJQVFnQlg0aUJFSWdpSHdpQlVJZ2hpQUVRdi8vLy84UGc0UWdCMElnaUNBRElBWitmQ0FGUWlDSWZJVjhJUU1MSUFFcEF3Z2dBbjFCQUNrRGlJd0JoU0lFUXYvLy8vOFBneUlGSUFFcEF3QWdBbnhCQUNrRGdJd0JoU0lHUWlDSUlnZCtJZ2hDLy8vLy93K0RJQVJDSUlnaUJDQUdRdi8vLy84UGd5SUdmbndnQlNBR2ZpSUZRaUNJZkNJR1FpQ0dJQVZDLy8vLy93K0RoQ0FJUWlDSUlBUWdCMzU4SUFaQ0lJaDhoU0FEZkNBQktRTVlJQUo5SUFCQitJc0JhaWtEQUlVaUEwTC8vLy8vRDRNaUJDQUJLUU1RSUFKOElBQkI4SXNCYWlrREFJVWlBa0lnaUNJRmZpSUdRdi8vLy84UGd5QURRaUNJSWdNZ0FrTC8vLy8vRDRNaUFuNThJQVFnQW40aUFrSWdpSHdpQkVJZ2hpQUNRdi8vLy84UGc0UWdCa0lnaUNBRElBVitmQ0FFUWlDSWZJVjhJZ0pDSllnZ0FvVkMrZlBkOFpueW1hc1dmaUlDUWlDSUlBS0ZDL3dLQkFGL0JYNENmd0YrUVFBaEF5QUJLUU40SUFKOVFRQXBBL2lNQVlVaUJFTC8vLy8vRDRNaUJTQUJLUU53SUFKOFFRQXBBL0NNQVlVaUJrSWdpQ0lIZmlJSVF2Ly8vLzhQZ3lBRVFpQ0lJZ1FnQmtMLy8vLy9ENE1pQm41OElBVWdCbjRpQlVJZ2lId2lCa0lnaGlBRlF2Ly8vLzhQZzRRZ0NFSWdpQ0FFSUFkK2ZDQUdRaUNJZklVZ0FTa0RhQ0FDZlVFQUtRUG9qQUdGSWdSQy8vLy8vdytESWdVZ0FTa0RZQ0FDZkVFQUtRUGdqQUdGSWdaQ0lJZ2lCMzRpQ0VMLy8vLy9ENE1nQkVJZ2lDSUVJQVpDLy8vLy93K0RJZ1orZkNBRklBWitJZ1ZDSUloOElnWkNJSVlnQlVMLy8vLy9ENE9FSUFoQ0lJZ2dCQ0FIZm53Z0JrSWdpSHlGSUFFcEExZ2dBbjFCQUNrRDJJd0JoU0lFUXYvLy8vOFBneUlGSUFFcEExQWdBbnhCQUNrRDBJd0JoU0lHUWlDSUlnZCtJZ2hDLy8vLy93K0RJQVJDSUlnaUJDQUdRdi8vLy84UGd5SUdmbndnQlNBR2ZpSUZRaUNJZkNJR1FpQ0dJQVZDLy8vLy93K0RoQ0FJUWlDSUlBUWdCMzU4SUFaQ0lJaDhoU0FCS1FOSUlBSjlRUUFwQThpTUFZVWlCRUwvLy8vL0Q0TWlCU0FCS1FOQUlBSjhRUUFwQThDTUFZVWlCa0lnaUNJSGZpSUlRdi8vLy84UGd5QUVRaUNJSWdRZ0JrTC8vLy8vRDRNaUJuNThJQVVnQm40aUJVSWdpSHdpQmtJZ2hpQUZRdi8vLy84UGc0UWdDRUlnaUNBRUlBZCtmQ0FHUWlDSWZJVWdBU2tET0NBQ2ZVRUFLUU80akFHRklnUkMvLy8vL3crRElnVWdBU2tETUNBQ2ZFRUFLUU93akFHRklnWkNJSWdpQjM0aUNFTC8vLy8vRDRNZ0JFSWdpQ0lFSUFaQy8vLy8vdytESWdaK2ZDQUZJQVorSWdWQ0lJaDhJZ1pDSUlZZ0JVTC8vLy8vRDRPRUlBaENJSWdnQkNBSGZud2dCa0lnaUh5RklBRXBBeWdnQW4xQkFDa0RxSXdCaFNJRVF2Ly8vLzhQZ3lJRklBRXBBeUFnQW54QkFDa0RvSXdCaFNJR1FpQ0lJZ2QrSWdoQy8vLy8vdytESUFSQ0lJZ2lCQ0FHUXYvLy8vOFBneUlHZm53Z0JTQUdmaUlGUWlDSWZDSUdRaUNHSUFWQy8vLy8vdytEaENBSVFpQ0lJQVFnQjM1OElBWkNJSWg4aFNBQktRTVlJQUo5UVFBcEE1aU1BWVVpQkVMLy8vLy9ENE1pQlNBQktRTVFJQUo4UVFBcEE1Q01BWVVpQmtJZ2lDSUhmaUlJUXYvLy8vOFBneUFFUWlDSUlnUWdCa0wvLy8vL0Q0TWlCbjU4SUFVZ0JuNGlCVUlnaUh3aUJrSWdoaUFGUXYvLy8vOFBnNFFnQ0VJZ2lDQUVJQWQrZkNBR1FpQ0lmSVVnQVNrRENDQUNmVUVBS1FPSWpBR0ZJZ1JDLy8vLy93K0RJZ1VnQVNrREFDQUNmRUVBS1FPQWpBR0ZJZ1pDSUlnaUIzNGlDRUwvLy8vL0Q0TWdCRUlnaUNJRUlBWkMvLy8vL3crRElnWitmQ0FGSUFaK0lnVkNJSWg4SWdaQ0lJWWdCVUwvLy8vL0Q0T0VJQWhDSUlnZ0JDQUhmbndnQmtJZ2lIeUZJQUN0UW9lVnI2K1l0dDZibm45K2ZIeDhmSHg4Zkh3aUJFSWxpQ0FFaFVMNTg5M3htZktacXhaK0lnUkNJSWdnQklVaEJBSkFJQUJCa0FGSURRQWdBRUVFZGtGNGFpRUpBMEFnQVNBRGFpSUtRUXRxS1FNQUlBSjlJQU5CaUkwQmFpa0RBSVVpQlVMLy8vLy9ENE1pQmlBS1FRTnFLUU1BSUFKOElBTkJnSTBCYWlrREFJVWlCMElnaUNJSWZpSUxRdi8vLy84UGd5QUZRaUNJSWdVZ0IwTC8vLy8vRDRNaUIzNThJQVlnQjM0aUJrSWdpSHdpQjBJZ2hpQUdRdi8vLy84UGc0UWdDMElnaUNBRklBaCtmQ0FIUWlDSWZJVWdCSHdoQkNBRFFSQnFJUU1nQ1VGL2FpSUpEUUFMQ3lBQktRTi9JQUo5SUFCQitJc0JhaWtEQUlVaUJVTC8vLy8vRDRNaUJpQUJLUU4zSUFKOElBQkI4SXNCYWlrREFJVWlBa0lnaUNJSGZpSUlRdi8vLy84UGd5QUZRaUNJSWdVZ0FrTC8vLy8vRDRNaUFuNThJQVlnQW40aUFrSWdpSHdpQmtJZ2hpQUNRdi8vLy84UGc0UWdDRUlnaUNBRklBZCtmQ0FHUWlDSWZJVWdCSHdpQWtJbGlDQUNoVUw1ODkzeG1mS1pxeForSWdKQ0lJZ2dBb1VMM3dVQ0FYNEJmd0pBQWtCQkFDa0RnQW9pQUZCRkRRQkJnQWdoQVVJQUlRQU1BUXNDUUVFQUtRT2dqZ0VnQUZJTkFFRUFJUUVNQVF0QkFDRUJRUUJDcjYvdjE3ejNrcUQrQUNBQWZUY0QrSXNCUVFBZ0FFTEZsdXY1Mk5LRmdpaDhOd1B3aXdGQkFFS1A4ZU9OclkvMG1FNGdBSDAzQStpTEFVRUFJQUJDcTZ6NHhkWHYwZEI4ZkRjRDRJc0JRUUJDMDYzVXNwS0Z0YlNlZnlBQWZUY0QySXNCUVFBZ0FFS1htdlNPOVphODdja0FmRGNEMElzQlFRQkN4WU9DL2EvL3hMRnJJQUI5TndQSWl3RkJBQ0FBUXVxTHM1M0k1dlQxUTN3M0E4Q0xBVUVBUXNpLytzdWNtOTY1NUFBZ0FIMDNBN2lMQVVFQUlBQkNpcU9CMzlTWjdhd3hmRGNEc0lzQlFRQkMrYm52dmZ6NHdxY2RJQUI5TndPb2l3RkJBQ0FBUXFqMTIvdXpuS2VhUDN3M0E2Q0xBVUVBUXJpeXZMZVUxYmZXV0NBQWZUY0RtSXNCUVFBZ0FFTHh5S0c2cWJURC9NNEFmRGNEa0lzQlFRQkNpS0dYMjdqamxKZWpmeUFBZlRjRGlJc0JRUUFnQUVLODBNamFtL0t3Z0V0OE53T0Fpd0ZCQUVMZzY4QzBudENPazh3QUlBQjlOd1A0aWdGQkFDQUFRcmlSbUtMMy9wQ1Nqbjk4TndQd2lnRkJBRUtDdGNIdXgvbS91U0VnQUgwM0EraUtBVUVBSUFCQ3kvT1o5OFNaOFBMNEFIdzNBK0NLQVVFQVF2S0FrYVg2OXV5ekh5QUFmVGNEMklvQlFRQWdBRUxlcWJmTHZwRGt5MXQ4TndQUWlnRkJBRUw4Z29UazhyN0kxaHdnQUgwM0E4aUtBVUVBSUFCQ3VQMnp5N09FNmFXK2YzdzNBOENLQVF0QkFFSUFOd09RamdGQkFFSUFOd09JamdGQkFFSUFOd09BamdGQkFFSzkzTXFWRERjRGdJb0JRUUJDaDVXdnI1aTIzcHVlZnpjRGlJb0JRUUJDejliVHZ0TEhxOWxDTndPUWlnRkJBRUw1ODkzeG1mYVpxeFkzQTVpS0FVRUFRdVBjeXBYOHp2TDFoWDgzQTZDS0FVRUFRdmVVcjY4SU53T29pZ0ZCQUVMRno5bXk4ZVc2NmljM0E3Q0tBVUVBUXJIejNmRUpOd080aWdGQkFDQUFOd09namdGQkFDQUJOZ0t3amdGQkFFS1FnSUNBZ0JBM0E1aU9BUXVDQ2dFSWYwRUFRUUFwQTVDT0FTQUFyWHczQTVDT0FRSkFBa0FDUUVFQUtBS0FqZ0VpQVNBQWFpSUNRWUFDU3cwQUlBRkJnSXdCYWlFRFFZQUtJUVFDUUNBQVFRaFBEUUFnQUNFQkRBSUxBa0FDUUNBQVFYaHFJZ1ZCQTNaQkFXcEJCM0VpQmcwQVFZQUtJUVFnQUNFQkRBRUxJQVpCQTNRaEFVR0FDaUVFQTBBZ0F5QUVLUU1BTndNQUlBTkJDR29oQXlBRVFRaHFJUVFnQmtGL2FpSUdEUUFMSUFBZ0FXc2hBUXNnQlVFNFNRMEJBMEFnQXlBRUtRTUFOd01BSUFOQkNHb2dCRUVJYWlrREFEY0RBQ0FEUVJCcUlBUkJFR29wQXdBM0F3QWdBMEVZYWlBRVFSaHFLUU1BTndNQUlBTkJJR29nQkVFZ2Fpa0RBRGNEQUNBRFFTaHFJQVJCS0dvcEF3QTNBd0FnQTBFd2FpQUVRVEJxS1FNQU53TUFJQU5CT0dvZ0JFRTRhaWtEQURjREFDQURRY0FBYWlFRElBUkJ3QUJxSVFRZ0FVRkFhaUlCUVFkTERRQU1BZ3NMUVlBS0lRUWdBRUdBQ21vaEJVRUFLQUt3amdFaUEwSEFpZ0VnQXhzaEJnSkFJQUZGRFFBZ0FVR0FqQUZxSVFOQmdBb2hCQUpBQWtCQmdBSWdBV3NpQjBFSVR3MEFJQWNoQUF3QkN3SkFBa0JCK0FFZ0FXc2lDRUVEZGtFQmFrRUhjU0lDRFFCQmdBb2hCQ0FISVFBTUFRdEJnQW9oQkNBQ1FRTjBJZ0FoQWdOQUlBTWdCQ2tEQURjREFDQURRUWhxSVFNZ0JFRUlhaUVFSUFKQmVHb2lBZzBBQzBHQUFpQUJJQUJxYXlFQUN5QUlRVGhKRFFBRFFDQURJQVFwQXdBM0F3QWdBMEVJYWlBRVFRaHFLUU1BTndNQUlBTkJFR29nQkVFUWFpa0RBRGNEQUNBRFFSaHFJQVJCR0dvcEF3QTNBd0FnQTBFZ2FpQUVRU0JxS1FNQU53TUFJQU5CS0dvZ0JFRW9haWtEQURjREFDQURRVEJxSUFSQk1Hb3BBd0EzQXdBZ0EwRTRhaUFFUVRocUtRTUFOd01BSUFOQndBQnFJUU1nQkVIQUFHb2hCQ0FBUVVCcUlnQkJCMHNOQUFzTEFrQWdBRVVOQUFKQUFrQWdBRUVIY1NJQ0RRQWdBQ0VCREFFTElBQkJlSEVoQVFOQUlBTWdCQzBBQURvQUFDQURRUUZxSVFNZ0JFRUJhaUVFSUFKQmYyb2lBZzBBQ3dzZ0FFRUlTUTBBQTBBZ0F5QUVLUUFBTndBQUlBTkJDR29oQXlBRVFRaHFJUVFnQVVGNGFpSUJEUUFMQzBHQWlnRkJpSTRCUVFBb0FwaU9BVUdBakFGQkJDQUdRUUFvQXB5T0FSQUNRUUJCQURZQ2dJNEJJQWRCZ0FwcUlRUUxBa0FnQkVHQUFtb2dCVThOQUNBRlFZQithaUVEQTBCQmdJb0JRWWlPQVVFQUtBS1lqZ0VnQkVFRUlBWkJBQ2dDbkk0QkVBSWdCRUdBQW1vaUJDQURTUTBBQzBFQUlBUkJRR29wQXdBM0E4Q05BVUVBSUFSQlNHb3BBd0EzQThpTkFVRUFJQVJCVUdvcEF3QTNBOUNOQVVFQUlBUkJXR29wQXdBM0E5aU5BVUVBSUFSQllHb3BBd0EzQStDTkFVRUFJQVJCYUdvcEF3QTNBK2lOQVVFQUlBUkJjR29wQXdBM0EvQ05BVUVBSUFSQmVHb3BBd0EzQS9pTkFRdEJnSXdCSVFNQ1FBSkFJQVVnQkdzaUFrRUlUdzBBSUFJaEJnd0JDMEdBakFFaEF5QUNJUVlEUUNBRElBUXBBd0EzQXdBZ0EwRUlhaUVESUFSQkNHb2hCQ0FHUVhocUlnWkJCMHNOQUFzTElBWkZEUUVEUUNBRElBUXRBQUE2QUFBZ0EwRUJhaUVESUFSQkFXb2hCQ0FHUVg5cUlnWU5BQXdDQ3dzZ0FVVU5BQUpBQWtBZ0FVRUhjU0lHRFFBZ0FTRUNEQUVMSUFGQmVIRWhBZ05BSUFNZ0JDMEFBRG9BQUNBRFFRRnFJUU1nQkVFQmFpRUVJQVpCZjJvaUJnMEFDd3NDUUNBQlFRaEpEUUFEUUNBRElBUXBBQUEzQUFBZ0EwRUlhaUVESUFSQkNHb2hCQ0FDUVhocUlnSU5BQXNMUVFBb0FvQ09BU0FBYWlFQ0MwRUFJQUkyQW9DT0FRdXNFd1VFZndKK0FYOFZmZ1YvSXdBaUFDRUJJQUJCZ0FGclFVQnhJZ0lrQUVFQUtBS3dqZ0VpQUVIQWlnRWdBQnNoQXdKQUFrQkJBQ2tEa0k0QklnUkM4UUZVRFFBZ0FrRUFLUU9BaWdFM0F3QWdBa0VBS1FPSWlnRTNBd2dnQWtFQUtRT1FpZ0UzQXhBZ0FrRUFLUU9ZaWdFM0F4Z2dBa0VBS1FPZ2lnRTNBeUFnQWtFQUtRT29pZ0UzQXlnZ0FrRUFLUU93aWdFaUJEY0RNQ0FDUVFBcEE3aUtBU0lGTndNNEFrQUNRRUVBS0FLQWpnRWlCa0hBQUVrTkFDQUNRUUFvQW9pT0FUWUNRQ0FDSUFKQndBQnFRUUFvQXBpT0FVR0FqQUVnQmtGL2FrRUdkaUFEUVFBb0FweU9BU0lBRUFJZ0F5QUFhaUlBUVhscUtRTUFJUWNnQUVFSmFpa0RBQ0VJSUFCQkdXb3BBd0FoQ1NBR1FjQ0xBV29wQXdBaEJDQUFRUUZxS1FNQUlRb2dCa0hJaXdGcUtRTUFJUVVnQmtIUWl3RnFLUU1BSVFzZ0FFRVJhaWtEQUNFTUlBWkIySXNCYWlrREFDRU5JQVpCNElzQmFpa0RBQ0VPSUFCQklXb3BBd0FoRHlBR1FlaUxBV29wQXdBaEVDQUFRU2xxS1FNQUlSRWdBaWtEQUNFU0lBSXBBeEFoRXlBQ0tRTWdJUlFnQWlrRENDRVZJQUlwQXhnaEZpQUNLUU1vSVJjZ0Fpa0RNQ0VZSUFJZ0Fpa0RPQ0FHUWZDTEFXb3BBd0FpR1h3Z0FFRXhhaWtEQUNBR1FmaUxBV29wQXdBaUdvVWlHMElnaUNBYlF2Ly8vLzhQZzM1OE53TTRJQUlnR2lBWUlCRWdHWVVpRVVJZ2lDQVJRdi8vLy84UGczNThmRGNETUNBWElBNThJQThnRUlVaUQwSWdpQ0FQUXYvLy8vOFBnMzU4SVE4Z0ZpQUxmQ0FNSUEyRklneENJSWdnREVMLy8vLy9ENE4rZkNFTUlCVWdCSHdnQ2lBRmhTSUtRaUNJSUFwQy8vLy8vdytEZm53aENpQVFJQlFnQ1NBT2hTSU9RaUNJSUE1Qy8vLy8vdytEZm54OElSQWdEU0FUSUFnZ0M0VWlDMElnaUNBTFF2Ly8vLzhQZzM1OGZDRUlJQVVnRWlBSElBU0ZJZ1JDSUlnZ0JFTC8vLy8vRDROK2ZId2hCd3dCQ3lBR1FjQ05BV29oSEVIQUFDQUdheUVkSUFKQndBQnFJUUFDUUFKQUFrQWdCa0U0VFEwQUlCMGhIZ3dCQ3dKQUFrQkJPQ0FHYXlJZlFRTjJRUUZxUVFkeEloNE5BQ0FDUWNBQWFpRUFJQjBoSGd3QkN5QUNRY0FBYWlFQUlCNUJBM1FpSUNFZUEwQWdBQ0FjS1FNQU53TUFJQUJCQ0dvaEFDQWNRUWhxSVJ3Z0hrRjRhaUllRFFBTFFjQUFJQVlnSUdwcklSNExBa0FnSDBFNFNRMEFBMEFnQUNBY0tRTUFOd01BSUFCQkNHb2dIRUVJYWlrREFEY0RBQ0FBUVJCcUlCeEJFR29wQXdBM0F3QWdBRUVZYWlBY1FSaHFLUU1BTndNQUlBQkJJR29nSEVFZ2Fpa0RBRGNEQUNBQVFTaHFJQnhCS0dvcEF3QTNBd0FnQUVFd2FpQWNRVEJxS1FNQU53TUFJQUJCT0dvZ0hFRTRhaWtEQURjREFDQUFRY0FBYWlFQUlCeEJ3QUJxSVJ3Z0hrRkFhaUllUVFkTERRQUxDeUFlUlEwQkN5QWVRWDlxSVNBQ1FDQWVRUWR4SWg5RkRRQWdIa0Y0Y1NFZUEwQWdBQ0FjTFFBQU9nQUFJQUJCQVdvaEFDQWNRUUZxSVJ3Z0gwRi9haUlmRFFBTEN5QWdRUWRKRFFBRFFDQUFJQndwQUFBM0FBQWdBRUVJYWlFQUlCeEJDR29oSENBZVFYaHFJaDROQUFzTElBSkJ3QUJxSUIxcUlSeEJnSXdCSVFBQ1FBSkFBa0FnQmtFSVNRMEFBa0FnQmtFNGFrRURka0VCYWtFSGNTSWVEUUFNQWdzZ0hrRURkQ0VmUVlDTUFTRUFBMEFnSENBQUtRTUFOd01BSUJ4QkNHb2hIQ0FBUVFocUlRQWdIa0YvYWlJZURRQUxJQVlnSDJzaEJnc2dCa1VOQVFKQUlBWkJCM0VpSHcwQUlBWWhIZ3dCQ3lBR1FYaHhJUjREUUNBY0lBQXRBQUE2QUFBZ0hFRUJhaUVjSUFCQkFXb2hBQ0FmUVg5cUloOE5BQXNMSUFaQkNFa05BQU5BSUJ3Z0FDa0FBRGNBQUNBY1FRaHFJUndnQUVFSWFpRUFJQjVCZUdvaUhnMEFDd3NnQTBFQUtBS2NqZ0ZxSWdCQmVXb3BBd0FoQ1NBQVFRbHFLUU1BSVJFZ0FFRVphaWtEQUNFU0lBQkJBV29wQXdBaENpQUFRUkZxS1FNQUlRd2dBRUVoYWlrREFDRVBJQUJCS1dvcEF3QWhFeUFDS1FNQUlSUWdBaWtERUNFVklBSXBBeUFoRmlBQ0tRTUlJUmNnQWlrRFFDRUxJQUlwQTBnaERTQUNLUU1ZSVJnZ0Fpa0RVQ0VPSUFJcEExZ2hDQ0FDS1FNb0lSa2dBaWtEWUNFUUlBSXBBMmdoQnlBQ0lBVWdBaWtEY0NJYWZDQUFRVEZxS1FNQUlBSXBBM2dpQllVaUcwSWdpQ0FiUXYvLy8vOFBnMzU4TndNNElBSWdCU0FUSUJxRkloTkNJSWdnRTBMLy8vLy9ENE4rSUFSOGZEY0RNQ0FaSUJCOElBOGdCNFVpQkVJZ2lDQUVRdi8vLy84UGczNThJUThnR0NBT2ZDQU1JQWlGSWdSQ0lJZ2dCRUwvLy8vL0Q0TitmQ0VNSUJjZ0Mzd2dDaUFOaFNJRVFpQ0lJQVJDLy8vLy93K0RmbndoQ2lBSElCWWdFaUFRaFNJRVFpQ0lJQVJDLy8vLy93K0Rmbng4SVJBZ0NDQVZJQkVnRG9VaUJFSWdpQ0FFUXYvLy8vOFBnMzU4ZkNFSUlBMGdGQ0FKSUF1RklnUkNJSWdnQkVMLy8vLy9ENE4rZkh3aEJ3c2dBeWtEUXlBQ0tRTTRoU0lFUXYvLy8vOFBneUlGSUFNcEF6c2dBaWtETUlVaUMwSWdpQ0lOZmlJT1F2Ly8vLzhQZ3lBRVFpQ0lJZ1FnQzBMLy8vLy9ENE1pQzM1OElBVWdDMzRpQlVJZ2lId2lDMElnaGlBRlF2Ly8vLzhQZzRRZ0RrSWdpQ0FFSUExK2ZDQUxRaUNJZklVZ0F5a0RNeUFQaFNJRVF2Ly8vLzhQZ3lJRklBTXBBeXNnRUlVaUMwSWdpQ0lOZmlJT1F2Ly8vLzhQZ3lBRVFpQ0lJZ1FnQzBMLy8vLy9ENE1pQzM1OElBVWdDMzRpQlVJZ2lId2lDMElnaGlBRlF2Ly8vLzhQZzRRZ0RrSWdpQ0FFSUExK2ZDQUxRaUNJZklVZ0F5a0RJeUFNaFNJRVF2Ly8vLzhQZ3lJRklBTXBBeHNnQ0lVaUMwSWdpQ0lOZmlJT1F2Ly8vLzhQZ3lBRVFpQ0lJZ1FnQzBMLy8vLy9ENE1pQzM1OElBVWdDMzRpQlVJZ2lId2lDMElnaGlBRlF2Ly8vLzhQZzRRZ0RrSWdpQ0FFSUExK2ZDQUxRaUNJZklVZ0F5a0RFeUFLaFNJRVF2Ly8vLzhQZ3lJRklBTXBBd3NnQjRVaUMwSWdpQ0lOZmlJT1F2Ly8vLzhQZ3lBRVFpQ0lJZ1FnQzBMLy8vLy9ENE1pQzM1OElBVWdDMzRpQlVJZ2lId2lDMElnaGlBRlF2Ly8vLzhQZzRRZ0RrSWdpQ0FFSUExK2ZDQUxRaUNJZklWQkFDa0RrSTRCUW9lVnI2K1l0dDZibm45K2ZIeDhmQ0lFUWlXSUlBU0ZRdm56M2ZHWjhwbXJGbjRpQkVJZ2lDQUVoU0VFREFFTElBU25JUUFDUUVFQUtRT2dqZ0VpQkZBTkFBSkFJQUJCRUVzTkFDQUFRWUFJSUFRUUJTRUVEQUlMQWtBZ0FFR0FBVXNOQUNBQVFZQUlJQVFRQmlFRURBSUxJQUJCZ0FnZ0JCQUhJUVFNQVFzQ1FDQUFRUkJMRFFBZ0FDQURRZ0FRQlNFRURBRUxBa0FnQUVHQUFVc05BQ0FBSUFOQ0FCQUdJUVFNQVFzZ0FDQURRZ0FRQnlFRUMwRUFJQVJDT0lZZ0JFS0EvZ09EUWlpR2hDQUVRb0NBL0FlRFFoaUdJQVJDZ0lDQStBK0RRZ2lHaElRZ0JFSUlpRUtBZ0lENEQ0TWdCRUlZaUVLQWdQd0hnNFFnQkVJb2lFS0EvZ09ESUFSQ09JaUVoSVEzQTRBS0lBRWtBQXNHQUVHQWlnRUxBZ0FMQzh3QkFRQkJnQWdMeEFHNC9tdzVJNlJMdm53QmdTejNJYTBjM3RSdDZZT1FsOXR5UUtTa3Q3Tm5IOHQ1NWs3TXdPVjRnbHJRZmN6L2NpRzRDRVowOTBNa2p1QTFrT2FCT2laTVBDaFN1NUhEQU11STBHV0xHMU11bzNGa1NKZWlEZmxPT0JudlJxbmVyTmlvK25ZLzQ1dzBQL25jdThmSEMwOGRpbEhnUzgyMFdUSEluMzdKMlhoelpPckZySU0wMCt2RHhZR2cvL29UWStzWERkMVJ0L0RhU2RNV1ZTWXAxR2llS3hhK1dIMUhvZnlQK0xqUmV0QXh6a1hMT28rVkZnUW9yOWY3eXJ0TFFINUFBZ0FBXCI7XG52YXIgaGFzaCQ2ID0gXCIwZGNhOTJkMVwiO1xudmFyIHdhc21Kc29uJDYgPSB7XG5cdG5hbWU6IG5hbWUkNixcblx0ZGF0YTogZGF0YSQ2LFxuXHRoYXNoOiBoYXNoJDZcbn07XG5cbmNvbnN0IG11dGV4JDQgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkNCA9IG51bGw7XG5jb25zdCBzZWVkQnVmZmVyJDEgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG5mdW5jdGlvbiB2YWxpZGF0ZVNlZWQkMShzZWVkKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNlZWQpIHx8IHNlZWQgPCAwIHx8IHNlZWQgPiAweEZGRkZGRkZGKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1NlZWQgbXVzdCBiZSBnaXZlbiBhcyB0d28gdmFsaWQgMzItYml0IGxvbmcgdW5zaWduZWQgaW50ZWdlcnMgKGxvICsgaGlnaCkuJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gd3JpdGVTZWVkJDEoYXJyLCBsb3csIGhpZ2gpIHtcbiAgICAvLyB3cml0ZSBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdFxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBEYXRhVmlldyhhcnIpO1xuICAgIGJ1ZmZlci5zZXRVaW50MzIoMCwgbG93LCB0cnVlKTtcbiAgICBidWZmZXIuc2V0VWludDMyKDQsIGhpZ2gsIHRydWUpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHh4SGFzaDMgaGFzaFxuICogQHBhcmFtIGRhdGEgSW5wdXQgZGF0YSAoc3RyaW5nLCBCdWZmZXIgb3IgVHlwZWRBcnJheSlcbiAqIEBwYXJhbSBzZWVkTG93IExvd2VyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqIEBwYXJhbSBzZWVkSGlnaCBIaWdoZXIgMzIgYml0cyBvZiB0aGUgbnVtYmVyIHVzZWQgdG9cbiAqICBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiB4eGhhc2gzKGRhdGEsIHNlZWRMb3cgPSAwLCBzZWVkSGlnaCA9IDApIHtcbiAgICBpZiAodmFsaWRhdGVTZWVkJDEoc2VlZExvdykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZCQxKHNlZWRMb3cpKTtcbiAgICB9XG4gICAgaWYgKHZhbGlkYXRlU2VlZCQxKHNlZWRIaWdoKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVTZWVkJDEoc2VlZEhpZ2gpKTtcbiAgICB9XG4gICAgaWYgKHdhc21DYWNoZSQ0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsb2NrZWRDcmVhdGUobXV0ZXgkNCwgd2FzbUpzb24kNiwgOClcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkNCA9IHdhc207XG4gICAgICAgICAgICB3cml0ZVNlZWQkMShzZWVkQnVmZmVyJDEsIHNlZWRMb3csIHNlZWRIaWdoKTtcbiAgICAgICAgICAgIHdhc21DYWNoZSQ0LndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KHNlZWRCdWZmZXIkMSkpO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSQ0LmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdyaXRlU2VlZCQxKHNlZWRCdWZmZXIkMSwgc2VlZExvdywgc2VlZEhpZ2gpO1xuICAgICAgICB3YXNtQ2FjaGUkNC53cml0ZU1lbW9yeShuZXcgVWludDhBcnJheShzZWVkQnVmZmVyJDEpKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSQ0LmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgeHhIYXNoMyBoYXNoIGluc3RhbmNlXG4gKiBAcGFyYW0gc2VlZExvdyBMb3dlciAzMiBiaXRzIG9mIHRoZSBudW1iZXIgdXNlZCB0b1xuICogIGluaXRpYWxpemUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gKGRlZmF1bHRzIHRvIDApXG4gKiBAcGFyYW0gc2VlZEhpZ2ggSGlnaGVyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqL1xuZnVuY3Rpb24gY3JlYXRlWFhIYXNoMyhzZWVkTG93ID0gMCwgc2VlZEhpZ2ggPSAwKSB7XG4gICAgaWYgKHZhbGlkYXRlU2VlZCQxKHNlZWRMb3cpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQkMShzZWVkTG93KSk7XG4gICAgfVxuICAgIGlmICh2YWxpZGF0ZVNlZWQkMShzZWVkSGlnaCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZCQxKHNlZWRIaWdoKSk7XG4gICAgfVxuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDYsIDgpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgICAgIHdyaXRlU2VlZCQxKGluc3RhbmNlQnVmZmVyLCBzZWVkTG93LCBzZWVkSGlnaCk7XG4gICAgICAgIHdhc20ud3JpdGVNZW1vcnkobmV3IFVpbnQ4QXJyYXkoaW5zdGFuY2VCdWZmZXIpKTtcbiAgICAgICAgd2FzbS5pbml0KCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB3YXNtLndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KGluc3RhbmNlQnVmZmVyKSk7XG4gICAgICAgICAgICAgICAgd2FzbS5pbml0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogNTEyLFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogOCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUkNSA9IFwieHhoYXNoMTI4XCI7XG52YXIgZGF0YSQ1ID0gXCJBR0Z6YlFFQUFBQUJLd2RnQUFGL1lBUi9mMzkvQUdBSGYzOS9mMzkvZndCZ0EzOS9mZ0YrWUFSL2YzOStBR0FBQUdBQmZ3QUREUXdBQVFJREJBUUVCUVlGQUFVRkJBRUJBZ0lHRGdKL0FVSEFqZ1VMZndCQndBa0xCM0FJQm0xbGJXOXllUUlBRGtoaGMyaGZSMlYwUW5WbVptVnlBQUFKU0dGemFGOUpibWwwQUFjTFNHRnphRjlWY0dSaGRHVUFDQXBJWVhOb1gwWnBibUZzQUFrTlNHRnphRjlIWlhSVGRHRjBaUUFLRGtoaGMyaGZRMkZzWTNWc1lYUmxBQXNLVTFSQlZFVmZVMGxhUlFNQkN1eE5EQVVBUVlBS0MrOERBUkIrQWtBZ0EwVU5BQ0FCUVRocUlRRWdBa0U0YWlFQ0lBQXBBekFoQkNBQUtRTTRJUVVnQUNrRElDRUdJQUFwQXlnaEJ5QUFLUU1RSVFnZ0FDa0RHQ0VKSUFBcEF3QWhDaUFBS1FNSUlRc0RRQ0FISUFGQmFHb3BBd0FpREh3Z0FrRndhaWtEQUNBQlFYQnFLUU1BSWcyRklnZENJSWdnQjBMLy8vLy9ENE4rZkNFSElBa2dBVUZZYWlrREFDSU9mQ0FDUVdCcUtRTUFJQUZCWUdvcEF3QWlENFVpQ1VJZ2lDQUpRdi8vLy84UGczNThJUWtnQ3lBQlFVaHFLUU1BSWhCOElBSkJVR29wQXdBZ0FVRlFhaWtEQUNJUmhTSUxRaUNJSUF0Qy8vLy8vdytEZm53aEN5QUNRWGhxS1FNQUlBRkJlR29wQXdBaUVvVWlFMElnaUNBVFF2Ly8vLzhQZzM0Z0JId2dBU2tEQUNJVGZDRUVJQUpCYUdvcEF3QWdESVVpREVJZ2lDQU1Rdi8vLy84UGczNGdCbndnRFh3aEJpQUNRVmhxS1FNQUlBNkZJZ3hDSUlnZ0RFTC8vLy8vRDROK0lBaDhJQTk4SVFnZ0FrRklhaWtEQUNBUWhTSU1RaUNJSUF4Qy8vLy8vdytEZmlBS2ZDQVJmQ0VLSUFVZ0Vud2dBaWtEQUNBVGhTSUZRaUNJSUFWQy8vLy8vdytEZm53aEJTQUJRY0FBYWlFQklBSkJDR29oQWlBRFFYOXFJZ01OQUFzZ0FDQUpOd01ZSUFBZ0NqY0RBQ0FBSUFzM0F3Z2dBQ0FITndNb0lBQWdDRGNERUNBQUlBVTNBemdnQUNBR053TWdJQUFnQkRjRE1Bc0wzZ0lDQVg4QmZnSkFJQUlnQVNnQ0FDSUhheUlDSUFSTERRQWdBQ0FESUFVZ0IwRURkR29nQWhBQklBQWdCU0FHYWlJSEtRTUFJQUFwQXdBaUNFSXZpSVVnQ0lWQ3NmUGQ4UWwrTndNQUlBQWdCeWtEQ0NBQUtRTUlJZ2hDTDRpRklBaUZRckh6M2ZFSmZqY0RDQ0FBSUFjcEF4QWdBQ2tERUNJSVFpK0loU0FJaFVLeDg5M3hDWDQzQXhBZ0FDQUhLUU1ZSUFBcEF4Z2lDRUl2aUlVZ0NJVkNzZlBkOFFsK053TVlJQUFnQnlrRElDQUFLUU1nSWdoQ0w0aUZJQWlGUXJIejNmRUpmamNESUNBQUlBY3BBeWdnQUNrREtDSUlRaStJaFNBSWhVS3g4OTN4Q1g0M0F5Z2dBQ0FIS1FNd0lBQXBBekFpQ0VJdmlJVWdDSVZDc2ZQZDhRbCtOd013SUFBZ0J5a0RPQ0FBS1FNNElnaENMNGlGSUFpRlFySHozZkVKZmpjRE9DQUFJQU1nQWtFR2RHb2dCU0FFSUFKcklnY1FBU0FCSUFjMkFnQVBDeUFBSUFNZ0JTQUhRUU4wYWlBRUVBRWdBU0FISUFScU5nSUFDKzBEQVFWK0lBRXBBemdnQUNrRE9JVWlBMEwvLy8vL0Q0TWlCQ0FCS1FNd0lBQXBBekNGSWdWQ0lJZ2lCbjRpQjBMLy8vLy9ENE1nQTBJZ2lDSURJQVZDLy8vLy93K0RJZ1YrZkNBRUlBVitJZ1JDSUloOElnVkNJSVlnQkVMLy8vLy9ENE9FSUFkQ0lJZ2dBeUFHZm53Z0JVSWdpSHlGSUFFcEF5Z2dBQ2tES0lVaUEwTC8vLy8vRDRNaUJDQUJLUU1nSUFBcEF5Q0ZJZ1ZDSUlnaUJuNGlCMEwvLy8vL0Q0TWdBMElnaUNJRElBVkMvLy8vL3crRElnVitmQ0FFSUFWK0lnUkNJSWg4SWdWQ0lJWWdCRUwvLy8vL0Q0T0VJQWRDSUlnZ0F5QUdmbndnQlVJZ2lIeUZJQUVwQXhnZ0FDa0RHSVVpQTBMLy8vLy9ENE1pQkNBQktRTVFJQUFwQXhDRklnVkNJSWdpQm40aUIwTC8vLy8vRDRNZ0EwSWdpQ0lESUFWQy8vLy8vdytESWdWK2ZDQUVJQVYrSWdSQ0lJaDhJZ1ZDSUlZZ0JFTC8vLy8vRDRPRUlBZENJSWdnQXlBR2Zud2dCVUlnaUh5RklBRXBBd2dnQUNrRENJVWlBMEwvLy8vL0Q0TWlCQ0FCS1FNQUlBQXBBd0NGSWdWQ0lJZ2lCbjRpQjBMLy8vLy9ENE1nQTBJZ2lDSURJQVZDLy8vLy93K0RJZ1YrZkNBRUlBVitJZ1JDSUloOElnVkNJSVlnQkVMLy8vLy9ENE9FSUFkQ0lJZ2dBeUFHZm53Z0JVSWdpSHlGSUFKOGZIeDhJZ0pDSllnZ0FvVkMrZlBkOFpueW1hc1dmaUlDUWlDSUlBS0ZDN29JQWdWK0EzOENRQ0FCUVFsSkRRQWdBQ0FCUWZpTEFXb3BBd0FpQkNBQ0tRTTRJQUlwQXpDRklBTjhoU0lGUXYvLy8vOFBnMEwzbEsrdkNINGdCVUtBZ0lDQWNJTjhRUUFwQTRDTUFTQUNLUU1vSUFJcEF5Q0ZJQU45aFNBRWhTSURRaUNJSWdSQ3NmUGQ4UWwrZkNBRVFvZVZyNjhJZmlJRVFpQ0lmQ0FFUXYvLy8vOFBneUFEUXYvLy8vOFBneUlEUXJIejNmRUpmbndnQTBLSGxhK3ZDSDRpQkVJZ2lId2lCVUlnaUh3aUEwSTRoaUFEUW9EK0E0TkNLSWFFSUFOQ2dJRDhCNE5DR0lZZ0EwS0FnSUQ0RDROQ0NJYUVoQ0FEUWdpSVFvQ0FnUGdQZ3lBRFFoaUlRb0NBL0FlRGhDQURRaWlJUW9EK0E0TWdBMEk0aUlTRWhDQUVRdi8vLy84UGd5QUJRWDlxclVJMmhvUWdCVUlnaG55RklnUkNJSWdpQlVMUDF0TytBbjRpQmtMLy8vLy9ENE1nQkVMLy8vLy9ENE1pQkVLOTNNcVZESDU4SUFSQ3o5YlR2Z0orSWdSQ0lJaDhJZ2RDSUlZaUNFSWxpQ0FJSUFSQy8vLy8vdytEaElWQytmUGQ4Wm55bWFzV2ZpSUVRaUNJSUFTRk53TUFJQUFnQlVLOTNNcVZESDRnQTBMUDF0Tyswc2VyMlVKK2ZDQUdRaUNJZkNBSFFpQ0lmQ0lEUWlXSUlBT0ZRdm56M2ZHWjhwbXJGbjRpQTBJZ2lDQURoVGNEQ0E4TEFrQWdBVUVFU1EwQUlBQWdBaWtER0NBQ0tRTVFoU0FEcHlJQ1FSaDBJQUpCZ1A0RGNVRUlkSElnQWtFSWRrR0EvZ054SUFKQkdIWnljcTFDSUlZZ0E0VjhJQUZCL0lzQmFqVUNBRUlnaGtFQU5RS0FqQUdFaFNJRFFpQ0lJZ1FnQVVFQ2RFR0hsYSt2ZUdxdElnVitJZ1pDSUlnZ0JFS3g4OTN4Q1g1OElBWkMvLy8vL3crRElBTkMvLy8vL3crRElnTkNzZlBkOFFsK2ZDQURJQVYrSWdOQ0lJaDhJZ1JDSUloOElBUkNJSVlnQTBMLy8vLy9ENE9FSWdSQ0FZWjhJZ05DSllnZ0E0VkMrZlBkOFpueW1hc1dmaUlGUWlDSUlBV0ZOd01JSUFBZ0EwSURpQ0FFaFNJRFFpT0lJQU9GUXFXKzQvVFJqSWZabjM5K0lnTkNISWdnQTRVM0F3QVBDd0pBSUFGRkRRQWdBQ0FDS0FJRUlBSW9BZ0J6clNBRGZDSUVRaUdJUVFBdEFJQ01BVUVRZENBQlFRaDBjaUlKSUFGQkFYWkJnSXdCYWkwQUFFRVlkSElpQ2lBQlFmK0xBV290QUFBaUFYSWlDNjJGSUFTRlFzL1cwNzdTeDZ2WlFuNGlCRUlkaUNBRWhVTDU4OTN4bWZhWnF4WitJZ1JDSUlnZ0JJVTNBd0FnQUNBQ0tBSU1JQUlvQWdoenJTQURmU0lEUWlHSUlBRkJHSFFnQzBHQS9nTnhRUWgwY2lBSlFRaDJRWUQrQTNFZ0NrRVlkbkp5UVExM3JZVWdBNFZDejliVHZ0TEhxOWxDZmlJRFFoMklJQU9GUXZuejNmR1o5cG1yRm40aUEwSWdpQ0FEaFRjRENBOExJQUFnQWlrRFVDQUNLUU5ZaFNBRGhTSUVRaUdJSUFTRlFzL1cwNzdTeDZ2WlFuNGlCRUlkaUNBRWhVTDU4OTN4bWZhWnF4WitJZ1JDSUlnZ0JJVTNBd2dnQUNBQ0tRTkFJQUlwQTBpRklBT0ZJZ05DSVlnZ0E0VkN6OWJUdnRMSHE5bENmaUlEUWgySUlBT0ZRdm56M2ZHWjlwbXJGbjRpQTBJZ2lDQURoVGNEQUF2RENnRUtmaUFCclNJRVFvZVZyNitZdHQ2Ym5uOStJUVVDUUFKQUlBRkJJVThOQUVJQUlRWU1BUXRDQUNFSEFrQWdBVUhCQUVrTkFFSUFJUWNDUUNBQlFlRUFTUTBBSUFKQitBQnFLUU1BSUFOOUlBRkJ5SXNCYWlrREFDSUloU0lIUXYvLy8vOFBneUlKSUFJcEEzQWdBM3dnQVVIQWl3RnFLUU1BSWdxRklndENJSWdpREg0aURVSWdpQ0FIUWlDSUlnY2dESDU4SUExQy8vLy8vdytESUFjZ0MwTC8vLy8vRDRNaUMzNThJQWtnQzM0aUIwSWdpSHdpQ1VJZ2lIeEJBQ2tEdUl3QklndEJBQ2tEc0l3QklneDhoU0FKUWlDR0lBZEMvLy8vL3crRGhJVWhCeUFDUWVnQWFpa0RBQ0FEZlNBTGhTSUpRdi8vLy84UGd5SUxJQUlwQTJBZ0Ezd2dESVVpREVJZ2lDSU5maUlHUXYvLy8vOFBneUFKUWlDSUlna2dERUwvLy8vL0Q0TWlESDU4SUFzZ0RINGlDMElnaUh3aURFSWdoaUFMUXYvLy8vOFBnNFFnQmtJZ2lDQUpJQTErZkNBTVFpQ0lmSVVnQlh3Z0NDQUtmSVVoQlFzZ0FrSFlBR29wQXdBZ0EzMGdBVUhZaXdGcUtRTUFJZ2lGSWdsQy8vLy8vdytESWdvZ0Fpa0RVQ0FEZkNBQlFkQ0xBV29wQXdBaUM0VWlERUlnaUNJTmZpSUdRdi8vLy84UGd5QUpRaUNJSWdrZ0RFTC8vLy8vRDRNaURINThJQW9nREg0aUNrSWdpSHdpREVJZ2hpQUtRdi8vLy84UGc0UWdCa0lnaUNBSklBMStmQ0FNUWlDSWZJVWdCM3hCQUNrRHFJd0JJZ2xCQUNrRG9Jd0JJZ3A4aFNFSElBSkJ5QUJxS1FNQUlBTjlJQW1GSWdsQy8vLy8vdytESWd3Z0Fpa0RRQ0FEZkNBS2hTSUtRaUNJSWcxK0lnWkMvLy8vL3crRElBbENJSWdpQ1NBS1F2Ly8vLzhQZ3lJS2Zud2dEQ0FLZmlJS1FpQ0lmQ0lNUWlDR0lBcEMvLy8vL3crRGhDQUdRaUNJSUFrZ0RYNThJQXhDSUloOGhTQUZmQ0FJSUF0OGhTRUZDeUFDUVRocUtRTUFJQU45SUFGQjZJc0JhaWtEQUNJSWhTSUpRdi8vLy84UGd5SUtJQUlwQXpBZ0Ezd2dBVUhnaXdGcUtRTUFJZ3VGSWd4Q0lJZ2lEWDRpQmtMLy8vLy9ENE1nQ1VJZ2lDSUpJQXhDLy8vLy93K0RJZ3grZkNBS0lBeCtJZ3BDSUloOElneENJSVlnQ2tMLy8vLy9ENE9FSUFaQ0lJZ2dDU0FOZm53Z0RFSWdpSHlGSUFkOFFRQXBBNWlNQVNJSFFRQXBBNUNNQVNJSmZJVWhCaUFDUVNocUtRTUFJQU45SUFlRklnZEMvLy8vL3crRElnb2dBaWtESUNBRGZDQUpoU0lKUWlDSUlneCtJZzFDLy8vLy93K0RJQWRDSUlnaUJ5QUpRdi8vLy84UGd5SUpmbndnQ2lBSmZpSUpRaUNJZkNJS1FpQ0dJQWxDLy8vLy93K0RoQ0FOUWlDSUlBY2dESDU4SUFwQ0lJaDhoU0FGZkNBSUlBdDhoU0VGQ3lBQUlBSkJHR29wQXdBZ0EzMGdBVUg0aXdGcUtRTUFJZ2VGSWdoQy8vLy8vdytESWdrZ0Fpa0RFQ0FEZkNBQlFmQ0xBV29wQXdBaUNvVWlDMElnaUNJTWZpSU5Rdi8vLy84UGd5QUlRaUNJSWdnZ0MwTC8vLy8vRDRNaUMzNThJQWtnQzM0aUNVSWdpSHdpQzBJZ2hpQUpRdi8vLy84UGc0UWdEVUlnaUNBSUlBeCtmQ0FMUWlDSWZJVWdCbnhCQUNrRGlJd0JJZ2hCQUNrRGdJd0JJZ2w4aFNJTElBSkJDR29wQXdBZ0EzMGdDSVVpQ0VMLy8vLy9ENE1pRENBQ0tRTUFJQU44SUFtRklnbENJSWdpRFg0aUJrTC8vLy8vRDRNZ0NFSWdpQ0lJSUFsQy8vLy8vdytESWdsK2ZDQU1JQWwrSWdsQ0lJaDhJZ3hDSUlZZ0NVTC8vLy8vRDRPRUlBWkNJSWdnQ0NBTmZud2dERUlnaUh5RklBVjhJQWNnQ255RklnVjhJZ2RDSllnZ0I0VkMrZlBkOFpueW1hc1dmaUlIUWlDSUlBZUZOd01BSUFCQ0FDQUZRb2VWcjYrWXR0NmJubjkrSUFRZ0EzMUN6OWJUdnRMSHE5bENmbndnQzBMajNNcVYvTTd5OVlWL2Zud2lBMElsaUNBRGhVTDU4OTN4bWZLWnF4WitJZ05DSUlnZ0E0VjlOd01JQzZFUEF3Ri9GSDRDZjBFQUlRUWdBa0g0QUdvcEF3QWdBMzFCQUNrRCtJd0JJZ1dGSWdaQy8vLy8vdytESWdjZ0Fpa0RjQ0FEZkVFQUtRUHdqQUVpQ0lVaUNVSWdpQ0lLZmlJTFF2Ly8vLzhQZ3lBR1FpQ0lJZ1lnQ1VMLy8vLy9ENE1pQ1g1OElBY2dDWDRpQjBJZ2lId2lDVUlnaGlBSFF2Ly8vLzhQZzRRZ0MwSWdpQ0FHSUFwK2ZDQUpRaUNJZklVZ0FrSFlBR29wQXdBZ0EzMUJBQ2tEMkl3QklnZUZJZ1pDLy8vLy93K0RJZ2tnQWlrRFVDQURmRUVBS1FQUWpBRWlDb1VpQzBJZ2lDSU1maUlOUXYvLy8vOFBneUFHUWlDSUlnWWdDMEwvLy8vL0Q0TWlDMzU4SUFrZ0MzNGlDVUlnaUh3aUMwSWdoaUFKUXYvLy8vOFBnNFFnRFVJZ2lDQUdJQXgrZkNBTFFpQ0lmSVVnQWtFNGFpa0RBQ0FEZlVFQUtRTzRqQUVpQ1lVaUJrTC8vLy8vRDRNaUN5QUNLUU13SUFOOFFRQXBBN0NNQVNJTWhTSU5RaUNJSWc1K0lnOUMvLy8vL3crRElBWkNJSWdpQmlBTlF2Ly8vLzhQZ3lJTmZud2dDeUFOZmlJTFFpQ0lmQ0lOUWlDR0lBdEMvLy8vL3crRGhDQVBRaUNJSUFZZ0RuNThJQTFDSUloOGhTQUNRUmhxS1FNQUlBTjlRUUFwQTVpTUFTSUxoU0lHUXYvLy8vOFBneUlOSUFJcEF4QWdBM3hCQUNrRGtJd0JJZzZGSWc5Q0lJZ2lFSDRpRVVMLy8vLy9ENE1nQmtJZ2lDSUdJQTlDLy8vLy93K0RJZzkrZkNBTklBOStJZzFDSUloOElnOUNJSVlnRFVMLy8vLy9ENE9FSUJGQ0lJZ2dCaUFRZm53Z0QwSWdpSHlGUVFBcEE0aU1BU0lOUVFBcEE0Q01BU0lQZklWOFFRQXBBNmlNQVNJUVFRQXBBNkNNQVNJUmZJVjhRUUFwQThpTUFTSVNRUUFwQThDTUFTSVRmSVY4UVFBcEEraU1BU0lVUVFBcEErQ01BU0lWZklVaUJrSWxpQ0FHaFVMNTg5M3htZktacXhaK0lnWkNJSWdnQm9VaEJpQUNRZWdBYWlrREFDQURmU0FVaFNJVVF2Ly8vLzhQZ3lJV0lBSXBBMkFnQTN3Z0ZZVWlGVUlnaUNJWGZpSVlRdi8vLy84UGd5QVVRaUNJSWhRZ0ZVTC8vLy8vRDRNaUZYNThJQllnRlg0aUZVSWdpSHdpRmtJZ2hpQVZRdi8vLy84UGc0UWdHRUlnaUNBVUlCZCtmQ0FXUWlDSWZJVWdBa0hJQUdvcEF3QWdBMzBnRW9VaUVrTC8vLy8vRDRNaUZDQUNLUU5BSUFOOElCT0ZJaE5DSUlnaUZYNGlGa0wvLy8vL0Q0TWdFa0lnaUNJU0lCTkMvLy8vL3crREloTitmQ0FVSUJOK0loTkNJSWg4SWhSQ0lJWWdFMEwvLy8vL0Q0T0VJQlpDSUlnZ0VpQVZmbndnRkVJZ2lIeUZJQUpCS0dvcEF3QWdBMzBnRUlVaUVFTC8vLy8vRDRNaUVpQUNLUU1nSUFOOElCR0ZJaEZDSUlnaUUzNGlGRUwvLy8vL0Q0TWdFRUlnaUNJUUlCRkMvLy8vL3crREloRitmQ0FTSUJGK0loRkNJSWg4SWhKQ0lJWWdFVUwvLy8vL0Q0T0VJQlJDSUlnZ0VDQVRmbndnRWtJZ2lIeUZJQUpCQ0dvcEF3QWdBMzBnRFlVaURVTC8vLy8vRDRNaUVDQUNLUU1BSUFOOElBK0ZJZzlDSUlnaUVYNGlFa0wvLy8vL0Q0TWdEVUlnaUNJTklBOUMvLy8vL3crRElnOStmQ0FRSUE5K0lnOUNJSWg4SWhCQ0lJWWdEMEwvLy8vL0Q0T0VJQkpDSUlnZ0RTQVJmbndnRUVJZ2lIeUZJQUd0SWc5Q2g1V3ZyNWkyM3B1ZWYzNThJQXNnRG55RmZDQUpJQXg4aFh3Z0J5QUtmSVY4SUFVZ0NIeUZJZ1ZDSllnZ0JZVkMrZlBkOFpueW1hc1dmaUlGUWlDSUlBV0ZJUVVDUUNBQlFhQUJTQTBBSUFGQkJYWkJmR29oR1FOQUlBSWdCR29pR2tFYmFpa0RBQ0FEZlNBRVFaaU5BV29wQXdBaUI0VWlDRUwvLy8vL0Q0TWlDU0FhUVJOcUtRTUFJQU44SUFSQmtJMEJhaWtEQUNJS2hTSUxRaUNJSWd4K0lnMUMvLy8vL3crRElBaENJSWdpQ0NBTFF2Ly8vLzhQZ3lJTGZud2dDU0FMZmlJSlFpQ0lmQ0lMUWlDR0lBbEMvLy8vL3crRGhDQU5RaUNJSUFnZ0RINThJQXRDSUloOGhTQUdmQ0FFUVlpTkFXb3BBd0FpQ0NBRVFZQ05BV29wQXdBaUNYeUZJUVlnR2tFTGFpa0RBQ0FEZlNBSWhTSUlRdi8vLy84UGd5SUxJQnBCQTJvcEF3QWdBM3dnQ1lVaUNVSWdpQ0lNZmlJTlF2Ly8vLzhQZ3lBSVFpQ0lJZ2dnQ1VMLy8vLy9ENE1pQ1g1OElBc2dDWDRpQ1VJZ2lId2lDMElnaGlBSlF2Ly8vLzhQZzRRZ0RVSWdpQ0FJSUF4K2ZDQUxRaUNJZklVZ0JYd2dCeUFLZklVaEJTQUVRU0JxSVFRZ0dVRi9haUlaRFFBTEN5QUFJQUpCL3dCcUtRTUFJQU44SUFGQjZJc0JhaWtEQUNJSGhTSUlRdi8vLy84UGd5SUpJQUlwQTNjZ0EzMGdBVUhnaXdGcUtRTUFJZ3FGSWd0Q0lJZ2lESDRpRFVMLy8vLy9ENE1nQ0VJZ2lDSUlJQXRDLy8vLy93K0RJZ3QrZkNBSklBdCtJZ2xDSUloOElndENJSVlnQ1VMLy8vLy9ENE9FSUExQ0lJZ2dDQ0FNZm53Z0MwSWdpSHlGSUFaOElBRkIrSXNCYWlrREFDSUdJQUZCOElzQmFpa0RBQ0lJZklVaUNTQUNRZThBYWlrREFDQURmQ0FHaFNJR1F2Ly8vLzhQZ3lJTElBSXBBMmNnQTMwZ0NJVWlDRUlnaUNJTWZpSU5Rdi8vLy84UGd5QUdRaUNJSWdZZ0NFTC8vLy8vRDRNaUNINThJQXNnQ0g0aUNFSWdpSHdpQzBJZ2hpQUlRdi8vLy84UGc0UWdEVUlnaUNBR0lBeCtmQ0FMUWlDSWZJVWdCWHdnQnlBS2ZJVWlCbndpQlVJbGlDQUZoVUw1ODkzeG1mS1pxeForSWdWQ0lJZ2dCWVUzQXdBZ0FFSUFJQVpDaDVXdnI1aTIzcHVlZjM0Z0R5QURmVUxQMXRPKzBzZXIyVUorZkNBSlF1UGN5cFg4enZMMWhYOStmQ0lEUWlXSUlBT0ZRdm56M2ZHWjhwbXJGbjRpQTBJZ2lDQURoWDAzQXdnTDN3VUNBWDRCZndKQUFrQkJBQ2tEZ0FvaUFGQkZEUUJCZ0FnaEFVSUFJUUFNQVFzQ1FFRUFLUU9namdFZ0FGSU5BRUVBSVFFTUFRdEJBQ0VCUVFCQ3I2L3YxN3oza3FEK0FDQUFmVGNEK0lzQlFRQWdBRUxGbHV2NTJOS0ZnaWg4TndQd2l3RkJBRUtQOGVPTnJZLzBtRTRnQUgwM0EraUxBVUVBSUFCQ3E2ejR4ZFh2MGRCOGZEY0Q0SXNCUVFCQzA2M1VzcEtGdGJTZWZ5QUFmVGNEMklzQlFRQWdBRUtYbXZTTzlaYTg3Y2tBZkRjRDBJc0JRUUJDeFlPQy9hLy94TEZySUFCOU53UElpd0ZCQUNBQVF1cUxzNTNJNXZUMVEzdzNBOENMQVVFQVFzaS8rc3VjbTk2NTVBQWdBSDAzQTdpTEFVRUFJQUJDaXFPQjM5U1o3YXd4ZkRjRHNJc0JRUUJDK2JudnZmejR3cWNkSUFCOU53T29pd0ZCQUNBQVFxajEyL3V6bktlYVAzdzNBNkNMQVVFQVFyaXl2TGVVMWJmV1dDQUFmVGNEbUlzQlFRQWdBRUx4eUtHNnFiVEQvTTRBZkRjRGtJc0JRUUJDaUtHWDI3ampsSmVqZnlBQWZUY0RpSXNCUVFBZ0FFSzgwTWphbS9Ld2dFdDhOd09BaXdGQkFFTGc2OEMwbnRDT2s4d0FJQUI5TndQNGlnRkJBQ0FBUXJpUm1LTDMvcENTam45OE53UHdpZ0ZCQUVLQ3RjSHV4L20vdVNFZ0FIMDNBK2lLQVVFQUlBQkN5L09aOThTWjhQTDRBSHczQStDS0FVRUFRdktBa2FYNjl1eXpIeUFBZlRjRDJJb0JRUUFnQUVMZXFiZkx2cERreTF0OE53UFFpZ0ZCQUVMOGdvVGs4cjdJMWh3Z0FIMDNBOGlLQVVFQUlBQkN1UDJ6eTdPRTZhVytmM3czQThDS0FRdEJBRUlBTndPUWpnRkJBRUlBTndPSWpnRkJBRUlBTndPQWpnRkJBRUs5M01xVkREY0RnSW9CUVFCQ2g1V3ZyNWkyM3B1ZWZ6Y0RpSW9CUVFCQ3o5YlR2dExIcTlsQ053T1FpZ0ZCQUVMNTg5M3htZmFacXhZM0E1aUtBVUVBUXVQY3lwWDh6dkwxaFg4M0E2Q0tBVUVBUXZlVXI2OElOd09vaWdGQkFFTEZ6OW15OGVXNjZpYzNBN0NLQVVFQVFySHozZkVKTndPNGlnRkJBQ0FBTndPZ2pnRkJBQ0FCTmdLd2pnRkJBRUtRZ0lDQWdCQTNBNWlPQVF1Q0NnRUlmMEVBUVFBcEE1Q09BU0FBclh3M0E1Q09BUUpBQWtBQ1FFRUFLQUtBamdFaUFTQUFhaUlDUVlBQ1N3MEFJQUZCZ0l3QmFpRURRWUFLSVFRQ1FDQUFRUWhQRFFBZ0FDRUJEQUlMQWtBQ1FDQUFRWGhxSWdWQkEzWkJBV3BCQjNFaUJnMEFRWUFLSVFRZ0FDRUJEQUVMSUFaQkEzUWhBVUdBQ2lFRUEwQWdBeUFFS1FNQU53TUFJQU5CQ0dvaEF5QUVRUWhxSVFRZ0JrRi9haUlHRFFBTElBQWdBV3NoQVFzZ0JVRTRTUTBCQTBBZ0F5QUVLUU1BTndNQUlBTkJDR29nQkVFSWFpa0RBRGNEQUNBRFFSQnFJQVJCRUdvcEF3QTNBd0FnQTBFWWFpQUVRUmhxS1FNQU53TUFJQU5CSUdvZ0JFRWdhaWtEQURjREFDQURRU2hxSUFSQktHb3BBd0EzQXdBZ0EwRXdhaUFFUVRCcUtRTUFOd01BSUFOQk9Hb2dCRUU0YWlrREFEY0RBQ0FEUWNBQWFpRURJQVJCd0FCcUlRUWdBVUZBYWlJQlFRZExEUUFNQWdzTFFZQUtJUVFnQUVHQUNtb2hCVUVBS0FLd2pnRWlBMEhBaWdFZ0F4c2hCZ0pBSUFGRkRRQWdBVUdBakFGcUlRTkJnQW9oQkFKQUFrQkJnQUlnQVdzaUIwRUlUdzBBSUFjaEFBd0JDd0pBQWtCQitBRWdBV3NpQ0VFRGRrRUJha0VIY1NJQ0RRQkJnQW9oQkNBSElRQU1BUXRCZ0FvaEJDQUNRUU4wSWdBaEFnTkFJQU1nQkNrREFEY0RBQ0FEUVFocUlRTWdCRUVJYWlFRUlBSkJlR29pQWcwQUMwR0FBaUFCSUFCcWF5RUFDeUFJUVRoSkRRQURRQ0FESUFRcEF3QTNBd0FnQTBFSWFpQUVRUWhxS1FNQU53TUFJQU5CRUdvZ0JFRVFhaWtEQURjREFDQURRUmhxSUFSQkdHb3BBd0EzQXdBZ0EwRWdhaUFFUVNCcUtRTUFOd01BSUFOQktHb2dCRUVvYWlrREFEY0RBQ0FEUVRCcUlBUkJNR29wQXdBM0F3QWdBMEU0YWlBRVFUaHFLUU1BTndNQUlBTkJ3QUJxSVFNZ0JFSEFBR29oQkNBQVFVQnFJZ0JCQjBzTkFBc0xBa0FnQUVVTkFBSkFBa0FnQUVFSGNTSUNEUUFnQUNFQkRBRUxJQUJCZUhFaEFRTkFJQU1nQkMwQUFEb0FBQ0FEUVFGcUlRTWdCRUVCYWlFRUlBSkJmMm9pQWcwQUN3c2dBRUVJU1EwQUEwQWdBeUFFS1FBQU53QUFJQU5CQ0dvaEF5QUVRUWhxSVFRZ0FVRjRhaUlCRFFBTEMwR0FpZ0ZCaUk0QlFRQW9BcGlPQVVHQWpBRkJCQ0FHUVFBb0FweU9BUkFDUVFCQkFEWUNnSTRCSUFkQmdBcHFJUVFMQWtBZ0JFR0FBbW9nQlU4TkFDQUZRWUIrYWlFREEwQkJnSW9CUVlpT0FVRUFLQUtZamdFZ0JFRUVJQVpCQUNnQ25JNEJFQUlnQkVHQUFtb2lCQ0FEU1EwQUMwRUFJQVJCUUdvcEF3QTNBOENOQVVFQUlBUkJTR29wQXdBM0E4aU5BVUVBSUFSQlVHb3BBd0EzQTlDTkFVRUFJQVJCV0dvcEF3QTNBOWlOQVVFQUlBUkJZR29wQXdBM0ErQ05BVUVBSUFSQmFHb3BBd0EzQStpTkFVRUFJQVJCY0dvcEF3QTNBL0NOQVVFQUlBUkJlR29wQXdBM0EvaU5BUXRCZ0l3QklRTUNRQUpBSUFVZ0JHc2lBa0VJVHcwQUlBSWhCZ3dCQzBHQWpBRWhBeUFDSVFZRFFDQURJQVFwQXdBM0F3QWdBMEVJYWlFRElBUkJDR29oQkNBR1FYaHFJZ1pCQjBzTkFBc0xJQVpGRFFFRFFDQURJQVF0QUFBNkFBQWdBMEVCYWlFRElBUkJBV29oQkNBR1FYOXFJZ1lOQUF3Q0N3c2dBVVVOQUFKQUFrQWdBVUVIY1NJR0RRQWdBU0VDREFFTElBRkJlSEVoQWdOQUlBTWdCQzBBQURvQUFDQURRUUZxSVFNZ0JFRUJhaUVFSUFaQmYyb2lCZzBBQ3dzQ1FDQUJRUWhKRFFBRFFDQURJQVFwQUFBM0FBQWdBMEVJYWlFRElBUkJDR29oQkNBQ1FYaHFJZ0lOQUFzTFFRQW9Bb0NPQVNBQWFpRUNDMEVBSUFJMkFvQ09BUXVRRVFZRWZ3SitBWDhEZmdWL0FuNGpBQ0lBSVFFZ0FFR0FBV3RCUUhFaUFpUUFRUUFvQXJDT0FTSUFRY0NLQVNBQUd5RURBa0FDUUVFQUtRT1FqZ0VpQkVMeEFWUU5BQ0FDUVFBcEE0Q0tBVGNEQUNBQ1FRQXBBNGlLQVRjRENDQUNRUUFwQTVDS0FUY0RFQ0FDUVFBcEE1aUtBVGNER0NBQ1FRQXBBNkNLQVRjRElDQUNRUUFwQTZpS0FUY0RLQ0FDUVFBcEE3Q0tBU0lFTndNd0lBSkJBQ2tEdUlvQklnVTNBemdDUUFKQVFRQW9Bb0NPQVNJR1FjQUFTUTBBSUFKQkFDZ0NpSTRCTmdKQUlBSWdBa0hBQUdwQkFDZ0NtSTRCUVlDTUFTQUdRWDlxUVFaMklBTkJBQ2dDbkk0QklnQVFBaUFDSUFJcEF3Z2dCa0hBaXdGcUtRTUFJZ1I4SUFNZ0FHb2lBRUVCYWlrREFDQUdRY2lMQVdvcEF3QWlCWVVpQjBJZ2lDQUhRdi8vLy84UGczNThOd01JSUFJZ0Fpa0RHQ0FHUWRDTEFXb3BBd0FpQjN3Z0FFRVJhaWtEQUNBR1FkaUxBV29wQXdBaUNJVWlDVUlnaUNBSlF2Ly8vLzhQZzM1OE53TVlJQUlnQlNBRUlBQkJlV29wQXdDRklnUkNJSWdnQkVMLy8vLy9ENE4rSUFJcEF3QjhmRGNEQUNBQ0lBZ2dCeUFBUVFscUtRTUFoU0lFUWlDSUlBUkMvLy8vL3crRGZpQUNLUU1RZkh3M0F4QWdBRUVaYWlrREFDRUVJQUlwQXlBaEJTQUNJQUlwQXlnZ0JrSGdpd0ZxS1FNQUlnZDhJQUJCSVdvcEF3QWdCa0hvaXdGcUtRTUFJZ2lGSWdsQ0lJZ2dDVUwvLy8vL0Q0TitmRGNES0NBQ0lBZ2dCU0FFSUFlRklnUkNJSWdnQkVMLy8vLy9ENE4rZkh3M0F5QWdBaUFDS1FNNElBWkI4SXNCYWlrREFDSUVmQ0FBUVRGcUtRTUFJQVpCK0lzQmFpa0RBQ0lGaFNJSFFpQ0lJQWRDLy8vLy93K0RmbnczQXpnZ0FpQUZJQVFnQUVFcGFpa0RBSVVpQkVJZ2lDQUVRdi8vLy84UGczNGdBaWtETUh4OE53TXdEQUVMSUFaQndJMEJhaUVLUWNBQUlBWnJJUXNnQWtIQUFHb2hBQUpBQWtBQ1FDQUdRVGhORFFBZ0N5RU1EQUVMQWtBQ1FFRTRJQVpySWcxQkEzWkJBV3BCQjNFaURBMEFJQUpCd0FCcUlRQWdDeUVNREFFTElBSkJ3QUJxSVFBZ0RFRURkQ0lPSVF3RFFDQUFJQW9wQXdBM0F3QWdBRUVJYWlFQUlBcEJDR29oQ2lBTVFYaHFJZ3dOQUF0QndBQWdCaUFPYW1zaERBc0NRQ0FOUVRoSkRRQURRQ0FBSUFvcEF3QTNBd0FnQUVFSWFpQUtRUWhxS1FNQU53TUFJQUJCRUdvZ0NrRVFhaWtEQURjREFDQUFRUmhxSUFwQkdHb3BBd0EzQXdBZ0FFRWdhaUFLUVNCcUtRTUFOd01BSUFCQktHb2dDa0VvYWlrREFEY0RBQ0FBUVRCcUlBcEJNR29wQXdBM0F3QWdBRUU0YWlBS1FUaHFLUU1BTndNQUlBQkJ3QUJxSVFBZ0NrSEFBR29oQ2lBTVFVQnFJZ3hCQjBzTkFBc0xJQXhGRFFFTElBeEJmMm9oRGdKQUlBeEJCM0VpRFVVTkFDQU1RWGh4SVF3RFFDQUFJQW90QUFBNkFBQWdBRUVCYWlFQUlBcEJBV29oQ2lBTlFYOXFJZzBOQUFzTElBNUJCMGtOQUFOQUlBQWdDaWtBQURjQUFDQUFRUWhxSVFBZ0NrRUlhaUVLSUF4QmVHb2lEQTBBQ3dzZ0FrSEFBR29nQzJvaENrR0FqQUVoQUFKQUFrQUNRQ0FHUVFoSkRRQUNRQ0FHUVRocVFRTjJRUUZxUVFkeElnd05BQXdDQ3lBTVFRTjBJUTFCZ0l3QklRQURRQ0FLSUFBcEF3QTNBd0FnQ2tFSWFpRUtJQUJCQ0dvaEFDQU1RWDlxSWd3TkFBc2dCaUFOYXlFR0N5QUdSUTBCQWtBZ0JrRUhjU0lORFFBZ0JpRU1EQUVMSUFaQmVIRWhEQU5BSUFvZ0FDMEFBRG9BQUNBS1FRRnFJUW9nQUVFQmFpRUFJQTFCZjJvaURRMEFDd3NnQmtFSVNRMEFBMEFnQ2lBQUtRQUFOd0FBSUFwQkNHb2hDaUFBUVFocUlRQWdERUY0YWlJTURRQUxDeUFDSUFJcEF3Z2dBaWtEUUNJSGZDQURRUUFvQXB5T0FXb2lBRUVCYWlrREFDQUNLUU5JSWdpRklnbENJSWdnQ1VMLy8vLy9ENE4rZkRjRENDQUNJQUlwQXhnZ0Fpa0RVQ0lKZkNBQVFSRnFLUU1BSUFJcEExZ2lENFVpRUVJZ2lDQVFRdi8vLy84UGczNThOd01ZSUFJZ0NDQUhJQUJCZVdvcEF3Q0ZJZ2RDSUlnZ0IwTC8vLy8vRDROK0lBSXBBd0I4ZkRjREFDQUNJQThnQ1NBQVFRbHFLUU1BaFNJSFFpQ0lJQWRDLy8vLy93K0RmaUFDS1FNUWZIdzNBeEFnQUVFWmFpa0RBQ0VISUFJcEF5QWhDQ0FDSUFJcEF5Z2dBaWtEWUNJSmZDQUFRU0ZxS1FNQUlBSXBBMmdpRDRVaUVFSWdpQ0FRUXYvLy8vOFBnMzU4TndNb0lBSWdEeUFJSUFjZ0NZVWlCMElnaUNBSFF2Ly8vLzhQZzM1OGZEY0RJQ0FDSUFVZ0Fpa0RjQ0lIZkNBQVFURnFLUU1BSUFJcEEzZ2lCWVVpQ0VJZ2lDQUlRdi8vLy84UGczNThOd000SUFJZ0JTQUhJQUJCS1dvcEF3Q0ZJZ2RDSUlnZ0IwTC8vLy8vRDROK0lBUjhmRGNETUFzZ0FpQUNJQU5CQzJwQkFDa0RrSTRCSWdSQ2g1V3ZyNWkyM3B1ZWYzNFFBemNEUUNBQ0lBSWdBMEVBS0FLY2pnRnFRWFZxSUFSQ3o5YlR2dExIcTlsQ2ZrSi9oUkFETndOSURBRUxJQVNuSVFBQ1FFRUFLUU9namdFaUJGQU5BQUpBSUFCQkVFc05BQ0FDUWNBQWFpQUFRWUFJSUFRUUJBd0NDd0pBSUFCQmdBRkxEUUFnQWtIQUFHb2dBRUdBQ0NBRUVBVU1BZ3NnQWtIQUFHb2dBRUdBQ0NBRUVBWU1BUXNDUUNBQVFSQkxEUUFnQWtIQUFHb2dBQ0FEUWdBUUJBd0JDd0pBSUFCQmdBRkxEUUFnQWtIQUFHb2dBQ0FEUWdBUUJRd0JDeUFDUWNBQWFpQUFJQU5DQUJBR0MwRUFJQUlwQTNBM0E3Z0tRUUFnQWlrRFlEY0RxQXBCQUNBQ0tRTlFOd09ZQ2tFQUlBSkIrQUJxS1FNQU53UEFDa0VBSUFKQjZBQnFLUU1BTndPd0NrRUFJQUpCMkFCcUtRTUFOd09nQ2tFQUlBSXBBMGdpQkVJNGhpQUVRb0QrQTROQ0tJYUVJQVJDZ0lEOEI0TkNHSVlnQkVLQWdJRDRENE5DQ0lhRWhDQUVRZ2lJUW9DQWdQZ1BneUFFUWhpSVFvQ0EvQWVEaENBRVFpaUlRb0QrQTRNZ0JFSTRpSVNFaENJRU53T0FDa0VBSUFRM0E1QUtRUUFnQWlrRFFDSUVRamlHSUFSQ2dQNERnMElvaG9RZ0JFS0FnUHdIZzBJWWhpQUVRb0NBZ1BnUGcwSUlob1NFSUFSQ0NJaENnSUNBK0ErRElBUkNHSWhDZ0lEOEI0T0VJQVJDS0loQ2dQNERneUFFUWppSWhJU0VOd09JQ2lBQkpBQUxCZ0JCZ0lvQkN3SUFDd3ZNQVFFQVFZQUlDOFFCdVA1c09TT2tTNzU4QVlFczl5R3RITjdVYmVtRGtKZmJja0NrcExlelp4L0xlZVpPek1EbGVJSmEwSDNNLzNJaHVBaEdkUGRESkk3Z05aRG1nVG9tVER3b1VydVJ3d0RMaU5CbGl4dFRMcU54WkVpWG9nMzVUamdaNzBhcDNxellxUHAyUCtPY05ELzUzTHZIeHd0UEhZcFI0RXZOdEZreHlKOSt5ZGw0YzJUcXhheUROTlBydzhXQm9QLzZFMlByRnczZFViZncya25URmxVbUtkUm9uaXNXdmxoOVI2SDhqL2k0MFhyUU1jNUZ5enFQbFJZRUtLL1grOHE3UzBCK1FBSUFBQT09XCI7XG52YXIgaGFzaCQ1ID0gXCIxZjY4MmQ5MVwiO1xudmFyIHdhc21Kc29uJDUgPSB7XG5cdG5hbWU6IG5hbWUkNSxcblx0ZGF0YTogZGF0YSQ1LFxuXHRoYXNoOiBoYXNoJDVcbn07XG5cbmNvbnN0IG11dGV4JDMgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkMyA9IG51bGw7XG5jb25zdCBzZWVkQnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuZnVuY3Rpb24gdmFsaWRhdGVTZWVkKHNlZWQpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2VlZCkgfHwgc2VlZCA8IDAgfHwgc2VlZCA+IDB4RkZGRkZGRkYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignU2VlZCBtdXN0IGJlIGdpdmVuIGFzIHR3byB2YWxpZCAzMi1iaXQgbG9uZyB1bnNpZ25lZCBpbnRlZ2VycyAobG8gKyBoaWdoKS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiB3cml0ZVNlZWQoYXJyLCBsb3csIGhpZ2gpIHtcbiAgICAvLyB3cml0ZSBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdFxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBEYXRhVmlldyhhcnIpO1xuICAgIGJ1ZmZlci5zZXRVaW50MzIoMCwgbG93LCB0cnVlKTtcbiAgICBidWZmZXIuc2V0VWludDMyKDQsIGhpZ2gsIHRydWUpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHh4SGFzaDEyOCBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHBhcmFtIHNlZWRMb3cgTG93ZXIgMzIgYml0cyBvZiB0aGUgbnVtYmVyIHVzZWQgdG9cbiAqICBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICogQHBhcmFtIHNlZWRIaWdoIEhpZ2hlciAzMiBiaXRzIG9mIHRoZSBudW1iZXIgdXNlZCB0b1xuICogIGluaXRpYWxpemUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gKGRlZmF1bHRzIHRvIDApXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHh4aGFzaDEyOChkYXRhLCBzZWVkTG93ID0gMCwgc2VlZEhpZ2ggPSAwKSB7XG4gICAgaWYgKHZhbGlkYXRlU2VlZChzZWVkTG93KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsaWRhdGVTZWVkKHNlZWRMb3cpKTtcbiAgICB9XG4gICAgaWYgKHZhbGlkYXRlU2VlZChzZWVkSGlnaCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZChzZWVkSGlnaCkpO1xuICAgIH1cbiAgICBpZiAod2FzbUNhY2hlJDMgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCQzLCB3YXNtSnNvbiQ1LCAxNilcbiAgICAgICAgICAgIC50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgICAgICB3YXNtQ2FjaGUkMyA9IHdhc207XG4gICAgICAgICAgICB3cml0ZVNlZWQoc2VlZEJ1ZmZlciwgc2VlZExvdywgc2VlZEhpZ2gpO1xuICAgICAgICAgICAgd2FzbUNhY2hlJDMud3JpdGVNZW1vcnkobmV3IFVpbnQ4QXJyYXkoc2VlZEJ1ZmZlcikpO1xuICAgICAgICAgICAgcmV0dXJuIHdhc21DYWNoZSQzLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdyaXRlU2VlZChzZWVkQnVmZmVyLCBzZWVkTG93LCBzZWVkSGlnaCk7XG4gICAgICAgIHdhc21DYWNoZSQzLndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KHNlZWRCdWZmZXIpKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IHdhc21DYWNoZSQzLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgeHhIYXNoMTI4IGhhc2ggaW5zdGFuY2VcbiAqIEBwYXJhbSBzZWVkTG93IExvd2VyIDMyIGJpdHMgb2YgdGhlIG51bWJlciB1c2VkIHRvXG4gKiAgaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSAoZGVmYXVsdHMgdG8gMClcbiAqIEBwYXJhbSBzZWVkSGlnaCBIaWdoZXIgMzIgYml0cyBvZiB0aGUgbnVtYmVyIHVzZWQgdG9cbiAqICBpbml0aWFsaXplIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYWxnb3JpdGhtIChkZWZhdWx0cyB0byAwKVxuICovXG5mdW5jdGlvbiBjcmVhdGVYWEhhc2gxMjgoc2VlZExvdyA9IDAsIHNlZWRIaWdoID0gMCkge1xuICAgIGlmICh2YWxpZGF0ZVNlZWQoc2VlZExvdykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbGlkYXRlU2VlZChzZWVkTG93KSk7XG4gICAgfVxuICAgIGlmICh2YWxpZGF0ZVNlZWQoc2VlZEhpZ2gpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxpZGF0ZVNlZWQoc2VlZEhpZ2gpKTtcbiAgICB9XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kNSwgMTYpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgICAgIHdyaXRlU2VlZChpbnN0YW5jZUJ1ZmZlciwgc2VlZExvdywgc2VlZEhpZ2gpO1xuICAgICAgICB3YXNtLndyaXRlTWVtb3J5KG5ldyBVaW50OEFycmF5KGluc3RhbmNlQnVmZmVyKSk7XG4gICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2FzbS53cml0ZU1lbW9yeShuZXcgVWludDhBcnJheShpbnN0YW5jZUJ1ZmZlcikpO1xuICAgICAgICAgICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDUxMixcbiAgICAgICAgICAgIGRpZ2VzdFNpemU6IDE2LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xufVxuXG52YXIgbmFtZSQ0ID0gXCJyaXBlbWQxNjBcIjtcbnZhciBkYXRhJDQgPSBcIkFHRnpiUUVBQUFBQkVRUmdBQUYvWUFBQVlBRi9BR0FDZjM4QUF3a0lBQUVDQXdJQkFBSUZCQUVCQWdJR0RnSi9BVUhnaVFVTGZ3QkJnQWdMQjRNQkNRWnRaVzF2Y25rQ0FBNUlZWE5vWDBkbGRFSjFabVpsY2dBQUNVaGhjMmhmU1c1cGRBQUJFSEpwY0dWdFpERTJNRjkxY0dSaGRHVUFBd3RJWVhOb1gxVndaR0YwWlFBRUNraGhjMmhmUm1sdVlXd0FCUTFJWVhOb1gwZGxkRk4wWVhSbEFBWU9TR0Z6YUY5RFlXeGpkV3hoZEdVQUJ3cFRWRUZVUlY5VFNWcEZBd0VLenpJSUJRQkJnQWtMT2dCQkFFSHd3OHVlZkRZQ21Ja0JRUUJDL3JucnhlbU9sWmtRTndLUWlRRkJBRUtCeHBTNmx2SHE1bTgzQW9pSkFVRUFRZ0EzQW9DSkFRdVBMQUVoZjBFQUlBQW9BaVFpQVNBQUtBSUFJZ0lnQUNnQ0VDSURJQUlnQUNnQ0xDSUVJQUFvQWd3aUJTQUFLQUlFSWdZZ0FDZ0NQQ0lISUFJZ0FDZ0NNQ0lJSUFjZ0FDZ0NDQ0lKUVFBb0FvaUpBU0lLUVFBb0FwQ0pBU0lMUVFBb0FwU0pBU0lNUVg5emNrRUFLQUtNaVFFaURYTnFJQUFvQWhRaURtcEI1cGVLaFFWcVFRaDNRUUFvQXBpSkFTSVBhaUlRUVFwM0loRnFJQUVnRFVFS2R5SVNhaUFDSUF0QkNuY2lFMm9nRENBQUtBSWNJaFJxSUE4Z0FDZ0NPQ0lWYWlBUUlBMGdFMEYvYzNKemFrSG1sNHFGQldwQkNYY2dER29pRmlBUUlCSkJmM055YzJwQjVwZUtoUVZxUVFsM0lCTnFJaEFnRmlBUlFYOXpjbk5xUWVhWGlvVUZha0VMZHlBU2FpSVhJQkFnRmtFS2R5SVdRWDl6Y25OcVFlYVhpb1VGYWtFTmR5QVJhaUlZSUJjZ0VFRUtkeUlaUVg5emNuTnFRZWFYaW9VRmFrRVBkeUFXYWlJYVFRcDNJaHRxSUFBb0FoZ2lFQ0FZUVFwM0loeHFJQUFvQWpRaUVTQVhRUXAzSWhkcUlBTWdHV29nQkNBV2FpQWFJQmdnRjBGL2MzSnpha0htbDRxRkJXcEJEM2NnR1dvaUZpQWFJQnhCZjNOeWMycEI1cGVLaFFWcVFRVjNJQmRxSWhjZ0ZpQWJRWDl6Y25OcVFlYVhpb1VGYWtFSGR5QWNhaUlZSUJjZ0ZrRUtkeUlaUVg5emNuTnFRZWFYaW9VRmFrRUhkeUFiYWlJYUlCZ2dGMEVLZHlJWFFYOXpjbk5xUWVhWGlvVUZha0VJZHlBWmFpSWJRUXAzSWh4cUlBVWdHa0VLZHlJZGFpQUFLQUlvSWhZZ0dFRUtkeUlZYWlBR0lCZHFJQUFvQWlBaUFDQVphaUFiSUJvZ0dFRi9jM0p6YWtIbWw0cUZCV3BCQzNjZ0Yyb2lGeUFiSUIxQmYzTnljMnBCNXBlS2hRVnFRUTUzSUJocUloZ2dGeUFjUVg5emNuTnFRZWFYaW9VRmFrRU9keUFkYWlJWklCZ2dGMEVLZHlJYVFYOXpjbk5xUWVhWGlvVUZha0VNZHlBY2FpSWJJQmtnR0VFS2R5SWNRWDl6Y25OcVFlYVhpb1VGYWtFR2R5QWFhaUlkUVFwM0loZHFJQVVnR1VFS2R5SVlhaUFRSUJwcUlCc2dHRUYvYzNGcUlCMGdHSEZxUWFTaXQrSUZha0VKZHlBY2FpSWFJQmRCZjNOeGFpQUVJQnhxSUIwZ0cwRUtkeUlaUVg5emNXb2dHaUFaY1dwQnBLSzM0Z1ZxUVExM0lCaHFJaHNnRjNGcVFhU2l0K0lGYWtFUGR5QVphaUljSUJ0QkNuY2lHRUYvYzNGcUlCUWdHV29nR3lBYVFRcDNJaGxCZjNOeGFpQWNJQmx4YWtHa29yZmlCV3BCQjNjZ0Yyb2lHeUFZY1dwQnBLSzM0Z1ZxUVF4M0lCbHFJaDFCQ25jaUYyb2dGaUFjUVFwM0locHFJQkVnR1dvZ0d5QWFRWDl6Y1dvZ0hTQWFjV3BCcEtLMzRnVnFRUWgzSUJocUlod2dGMEYvYzNGcUlBNGdHR29nSFNBYlFRcDNJaGhCZjNOeGFpQWNJQmh4YWtHa29yZmlCV3BCQ1hjZ0dtb2lHaUFYY1dwQnBLSzM0Z1ZxUVF0M0lCaHFJaHNnR2tFS2R5SVpRWDl6Y1dvZ0ZTQVlhaUFhSUJ4QkNuY2lHRUYvYzNGcUlCc2dHSEZxUWFTaXQrSUZha0VIZHlBWGFpSWNJQmx4YWtHa29yZmlCV3BCQjNjZ0dHb2lIVUVLZHlJWGFpQURJQnRCQ25jaUdtb2dBQ0FZYWlBY0lCcEJmM054YWlBZElCcHhha0drb3JmaUJXcEJESGNnR1dvaUd5QVhRWDl6Y1dvZ0NDQVphaUFkSUJ4QkNuY2lHRUYvYzNGcUlCc2dHSEZxUWFTaXQrSUZha0VIZHlBYWFpSWFJQmR4YWtHa29yZmlCV3BCQm5jZ0dHb2lIQ0FhUVFwM0lobEJmM054YWlBQklCaHFJQm9nRzBFS2R5SVlRWDl6Y1dvZ0hDQVljV3BCcEtLMzRnVnFRUTkzSUJkcUlob2dHWEZxUWFTaXQrSUZha0VOZHlBWWFpSWJRUXAzSWgxcUlBWWdHa0VLZHlJZWFpQU9JQnhCQ25jaUYyb2dCeUFaYWlBSklCaHFJQm9nRjBGL2MzRnFJQnNnRjNGcVFhU2l0K0lGYWtFTGR5QVphaUlZSUJ0QmYzTnlJQjV6YWtIei9jRHJCbXBCQ1hjZ0Yyb2lGeUFZUVg5emNpQWRjMnBCOC8zQTZ3WnFRUWQzSUI1cUloa2dGMEYvYzNJZ0dFRUtkeUlZYzJwQjgvM0E2d1pxUVE5M0lCMXFJaG9nR1VGL2MzSWdGMEVLZHlJWGMycEI4LzNBNndacVFRdDNJQmhxSWh0QkNuY2lIR29nQVNBYVFRcDNJaDFxSUJBZ0dVRUtkeUlaYWlBVklCZHFJQlFnR0dvZ0d5QWFRWDl6Y2lBWmMycEI4LzNBNndacVFRaDNJQmRxSWhjZ0cwRi9jM0lnSFhOcVFmUDl3T3NHYWtFR2R5QVphaUlZSUJkQmYzTnlJQnh6YWtIei9jRHJCbXBCQm5jZ0hXb2lHU0FZUVg5emNpQVhRUXAzSWhkemFrSHovY0RyQm1wQkRuY2dIR29pR2lBWlFYOXpjaUFZUVFwM0loaHpha0h6L2NEckJtcEJESGNnRjJvaUcwRUtkeUljYWlBV0lCcEJDbmNpSFdvZ0NTQVpRUXAzSWhscUlBZ2dHR29nQUNBWGFpQWJJQnBCZjNOeUlCbHpha0h6L2NEckJtcEJEWGNnR0dvaUZ5QWJRWDl6Y2lBZGMycEI4LzNBNndacVFRVjNJQmxxSWhnZ0YwRi9jM0lnSEhOcVFmUDl3T3NHYWtFT2R5QWRhaUlaSUJoQmYzTnlJQmRCQ25jaUYzTnFRZlA5d09zR2FrRU5keUFjYWlJYUlCbEJmM055SUJoQkNuY2lHSE5xUWZQOXdPc0dha0VOZHlBWGFpSWJRUXAzSWh4cUlCRWdHR29nQXlBWGFpQWJJQnBCZjNOeUlCbEJDbmNpR1hOcVFmUDl3T3NHYWtFSGR5QVlhaUlZSUJ0QmYzTnlJQnBCQ25jaUduTnFRZlA5d09zR2FrRUZkeUFaYWlJWFFRcDNJaHNnRUNBYWFpQVlRUXAzSWgwZ0FDQVphaUFjSUJkQmYzTnhhaUFYSUJoeGFrSHA3YlhUQjJwQkQzY2dHbW9pR0VGL2MzRnFJQmdnRjNGcVFlbnR0ZE1IYWtFRmR5QWNhaUlYUVg5emNXb2dGeUFZY1dwQjZlMjEwd2RxUVFoM0lCMXFJaGxCQ25jaUdtb2dCU0FiYWlBWFFRcDNJaHdnQmlBZGFpQVlRUXAzSWgwZ0dVRi9jM0ZxSUJrZ0YzRnFRZW50dGRNSGFrRUxkeUFiYWlJWFFYOXpjV29nRnlBWmNXcEI2ZTIxMHdkcVFRNTNJQjFxSWhoQkNuY2lHeUFISUJ4cUlCZEJDbmNpSGlBRUlCMXFJQm9nR0VGL2MzRnFJQmdnRjNGcVFlbnR0ZE1IYWtFT2R5QWNhaUlYUVg5emNXb2dGeUFZY1dwQjZlMjEwd2RxUVFaM0lCcHFJaGhCZjNOeGFpQVlJQmR4YWtIcDdiWFRCMnBCRG5jZ0htb2lHVUVLZHlJYWFpQUlJQnRxSUJoQkNuY2lIQ0FPSUI1cUlCZEJDbmNpSFNBWlFYOXpjV29nR1NBWWNXcEI2ZTIxMHdkcVFRWjNJQnRxSWhkQmYzTnhhaUFYSUJseGFrSHA3YlhUQjJwQkNYY2dIV29pR0VFS2R5SWJJQkVnSEdvZ0YwRUtkeUllSUFrZ0hXb2dHaUFZUVg5emNXb2dHQ0FYY1dwQjZlMjEwd2RxUVF4M0lCeHFJaGRCZjNOeGFpQVhJQmh4YWtIcDdiWFRCMnBCQ1hjZ0dtb2lHRUYvYzNGcUlCZ2dGM0ZxUWVudHRkTUhha0VNZHlBZWFpSVpRUXAzSWhvZ0Iyb2dGU0FYUVFwM0loeHFJQm9nRmlBYmFpQVlRUXAzSWgwZ0ZDQWVhaUFjSUJsQmYzTnhhaUFaSUJoeGFrSHA3YlhUQjJwQkJYY2dHMm9pRjBGL2MzRnFJQmNnR1hGcVFlbnR0ZE1IYWtFUGR5QWNhaUlZUVg5emNXb2dHQ0FYY1dwQjZlMjEwd2RxUVFoM0lCMXFJaGtnR0VFS2R5SWJjeUFkSUFocUlCZ2dGMEVLZHlJWGN5QVpjMnBCQ0hjZ0dtb2lHSE5xUVFWM0lCZHFJaHBCQ25jaUhDQUFhaUFaUVFwM0loa2dCbW9nRnlBV2FpQVlJQmx6SUJwemFrRU1keUFiYWlJWElCeHpJQnNnQTJvZ0dpQVlRUXAzSWhoeklCZHpha0VKZHlBWmFpSVpjMnBCREhjZ0dHb2lHaUFaUVFwM0lodHpJQmdnRG1vZ0dTQVhRUXAzSWhkeklCcHpha0VGZHlBY2FpSVljMnBCRG5jZ0Yyb2lHVUVLZHlJY0lCVnFJQnBCQ25jaUdpQUphaUFYSUJScUlCZ2dHbk1nR1hOcVFRWjNJQnRxSWhjZ0hITWdHeUFRYWlBWklCaEJDbmNpR0hNZ0YzTnFRUWgzSUJwcUlobHpha0VOZHlBWWFpSWFJQmxCQ25jaUczTWdHQ0FSYWlBWklCZEJDbmNpR0hNZ0duTnFRUVozSUJ4cUlobHpha0VGZHlBWWFpSWNRUXAzSWgwZ0RHb2dCQ0FXSUE0Z0RpQVJJQllnRGlBVUlBRWdBQ0FCSUJBZ0ZDQUVJQkFnQmlBUGFpQVRJQTF6SUFzZ0RYTWdESE1nQ21vZ0FtcEJDM2NnRDJvaUYzTnFRUTUzSUF4cUloNUJDbmNpSDJvZ0F5QVNhaUFKSUF4cUlCY2dFbk1nSG5OcVFROTNJQk5xSWd3Z0gzTWdCU0FUYWlBZUlCZEJDbmNpRTNNZ0RITnFRUXgzSUJKcUloSnpha0VGZHlBVGFpSVhJQkpCQ25jaUhuTWdFeUFPYWlBU0lBeEJDbmNpREhNZ0YzTnFRUWgzSUI5cUloSnpha0VIZHlBTWFpSVRRUXAzSWg5cUlBRWdGMEVLZHlJWGFpQU1JQlJxSUJJZ0YzTWdFM05xUVFsM0lCNXFJZ3dnSDNNZ0hpQUFhaUFUSUJKQkNuY2lFbk1nREhOcVFRdDNJQmRxSWhOemFrRU5keUFTYWlJWElCTkJDbmNpSG5NZ0VpQVdhaUFUSUF4QkNuY2lESE1nRjNOcVFRNTNJQjlxSWhKemFrRVBkeUFNYWlJVFFRcDNJaDlxSUI0Z0VXb2dFeUFTUVFwM0lpQnpJQXdnQ0dvZ0VpQVhRUXAzSWd4eklCTnpha0VHZHlBZWFpSVNjMnBCQjNjZ0RHb2lFMEVLZHlJWElDQWdCMm9nRXlBU1FRcDNJaDV6SUF3Z0ZXb2dFaUFmY3lBVGMycEJDWGNnSUdvaUUzTnFRUWgzSUI5cUlneEJmM054YWlBTUlCTnhha0daODRuVUJXcEJCM2NnSG1vaUVrRUtkeUlmYWlBUklCZHFJQXhCQ25jaUlDQURJQjVxSUJOQkNuY2lFeUFTUVg5emNXb2dFaUFNY1dwQm1mT0oxQVZxUVFaM0lCZHFJZ3hCZjNOeGFpQU1JQkp4YWtHWjg0blVCV3BCQ0hjZ0Uyb2lFa0VLZHlJWElCWWdJR29nREVFS2R5SWVJQVlnRTJvZ0h5QVNRWDl6Y1dvZ0VpQU1jV3BCbWZPSjFBVnFRUTEzSUNCcUlneEJmM054YWlBTUlCSnhha0daODRuVUJXcEJDM2NnSDJvaUVrRi9jM0ZxSUJJZ0RIRnFRWm56aWRRRmFrRUpkeUFlYWlJVFFRcDNJaDlxSUFVZ0Yyb2dFa0VLZHlJZ0lBY2dIbW9nREVFS2R5SWVJQk5CZjNOeGFpQVRJQkp4YWtHWjg0blVCV3BCQjNjZ0Yyb2lERUYvYzNGcUlBd2dFM0ZxUVpuemlkUUZha0VQZHlBZWFpSVNRUXAzSWhjZ0FpQWdhaUFNUVFwM0lpRWdDQ0FlYWlBZklCSkJmM054YWlBU0lBeHhha0daODRuVUJXcEJCM2NnSUdvaURFRi9jM0ZxSUF3Z0VuRnFRWm56aWRRRmFrRU1keUFmYWlJU1FYOXpjV29nRWlBTWNXcEJtZk9KMUFWcVFROTNJQ0ZxSWhOQkNuY2lIbW9nQ1NBWGFpQVNRUXAzSWg4Z0RpQWhhaUFNUVFwM0lpQWdFMEYvYzNGcUlCTWdFbkZxUVpuemlkUUZha0VKZHlBWGFpSU1RWDl6Y1dvZ0RDQVRjV3BCbWZPSjFBVnFRUXQzSUNCcUloSkJDbmNpRXlBRUlCOXFJQXhCQ25jaUZ5QVZJQ0JxSUI0Z0VrRi9jM0ZxSUJJZ0RIRnFRWm56aWRRRmFrRUhkeUFmYWlJTVFYOXpjV29nRENBU2NXcEJtZk9KMUFWcVFRMTNJQjVxSWhKQmYzTWlJSEZxSUJJZ0RIRnFRWm56aWRRRmFrRU1keUFYYWlJZVFRcDNJaDlxSUFNZ0VrRUtkeUlTYWlBVklBeEJDbmNpREdvZ0ZpQVRhaUFGSUJkcUlCNGdJSElnREhOcVFhSFg1L1lHYWtFTGR5QVRhaUlUSUI1QmYzTnlJQkp6YWtHaDErZjJCbXBCRFhjZ0RHb2lEQ0FUUVg5emNpQWZjMnBCb2RmbjlnWnFRUVozSUJKcUloSWdERUYvYzNJZ0UwRUtkeUlUYzJwQm9kZm45Z1pxUVFkM0lCOXFJaGNnRWtGL2MzSWdERUVLZHlJTWMycEJvZGZuOWdacVFRNTNJQk5xSWg1QkNuY2lIMm9nQ1NBWFFRcDNJaUJxSUFZZ0VrRUtkeUlTYWlBQUlBeHFJQWNnRTJvZ0hpQVhRWDl6Y2lBU2MycEJvZGZuOWdacVFRbDNJQXhxSWd3Z0hrRi9jM0lnSUhOcVFhSFg1L1lHYWtFTmR5QVNhaUlTSUF4QmYzTnlJQjl6YWtHaDErZjJCbXBCRDNjZ0lHb2lFeUFTUVg5emNpQU1RUXAzSWd4emFrR2gxK2YyQm1wQkRuY2dIMm9pRnlBVFFYOXpjaUFTUVFwM0loSnpha0doMStmMkJtcEJDSGNnREdvaUhrRUtkeUlmYWlBRUlCZEJDbmNpSUdvZ0VTQVRRUXAzSWhOcUlCQWdFbW9nQWlBTWFpQWVJQmRCZjNOeUlCTnpha0doMStmMkJtcEJEWGNnRW1vaURDQWVRWDl6Y2lBZ2MycEJvZGZuOWdacVFRWjNJQk5xSWhJZ0RFRi9jM0lnSDNOcVFhSFg1L1lHYWtFRmR5QWdhaUlUSUJKQmYzTnlJQXhCQ25jaUYzTnFRYUhYNS9ZR2FrRU1keUFmYWlJZUlCTkJmM055SUJKQkNuY2lFbk5xUWFIWDUvWUdha0VIZHlBWGFpSWZRUXAzSWd4cUlBRWdFMEVLZHlJVGFpQUlJQmRxSUI4Z0hrRi9jM0lnRTNOcVFhSFg1L1lHYWtFRmR5QVNhaUlYSUF4QmYzTnhhaUFHSUJKcUlCOGdIa0VLZHlJU1FYOXpjV29nRnlBU2NXcEIzUG51K0hocVFRdDNJQk5xSWg0Z0RIRnFRZHo1N3ZoNGFrRU1keUFTYWlJZklCNUJDbmNpRTBGL2MzRnFJQVFnRW1vZ0hpQVhRUXAzSWhKQmYzTnhhaUFmSUJKeGFrSGMrZTc0ZUdwQkRuY2dER29pSGlBVGNXcEIzUG51K0hocVFROTNJQkpxSWlCQkNuY2lER29nQ0NBZlFRcDNJaGRxSUFJZ0Vtb2dIaUFYUVg5emNXb2dJQ0FYY1dwQjNQbnUrSGhxUVE1M0lCTnFJaDhnREVGL2MzRnFJQUFnRTJvZ0lDQWVRUXAzSWhKQmYzTnhhaUFmSUJKeGFrSGMrZTc0ZUdwQkQzY2dGMm9pRnlBTWNXcEIzUG51K0hocVFRbDNJQkpxSWg0Z0YwRUtkeUlUUVg5emNXb2dBeUFTYWlBWElCOUJDbmNpRWtGL2MzRnFJQjRnRW5GcVFkejU3dmg0YWtFSWR5QU1haUlmSUJOeGFrSGMrZTc0ZUdwQkNYY2dFbW9pSUVFS2R5SU1haUFISUI1QkNuY2lGMm9nQlNBU2FpQWZJQmRCZjNOeGFpQWdJQmR4YWtIYytlNzRlR3BCRG5jZ0Uyb2lIaUFNUVg5emNXb2dGQ0FUYWlBZ0lCOUJDbmNpRWtGL2MzRnFJQjRnRW5GcVFkejU3dmg0YWtFRmR5QVhhaUlYSUF4eGFrSGMrZTc0ZUdwQkJuY2dFbW9pSHlBWFFRcDNJaE5CZjNOeGFpQVZJQkpxSUJjZ0hrRUtkeUlTUVg5emNXb2dIeUFTY1dwQjNQbnUrSGhxUVFoM0lBeHFJaGNnRTNGcVFkejU3dmg0YWtFR2R5QVNhaUllUVFwM0lpQnFJQUlnRjBFS2R5SU9haUFESUI5QkNuY2lER29nQ1NBVGFpQWVJQTVCZjNOeGFpQVFJQkpxSUJjZ0RFRi9jM0ZxSUI0Z0RIRnFRZHo1N3ZoNGFrRUZkeUFUYWlJRElBNXhha0hjK2U3NGVHcEJESGNnREdvaURDQURJQ0JCZjNOeWMycEJ6dnJQeW5wcVFRbDNJQTVxSWc0Z0RDQURRUXAzSWdOQmYzTnljMnBCenZyUHlucHFRUTkzSUNCcUloSWdEaUFNUVFwM0lneEJmM055YzJwQnp2clB5bnBxUVFWM0lBTnFJaE5CQ25jaUYyb2dDU0FTUVFwM0loWnFJQWdnRGtFS2R5SUphaUFVSUF4cUlBRWdBMm9nRXlBU0lBbEJmM055YzJwQnp2clB5bnBxUVF0M0lBeHFJZ01nRXlBV1FYOXpjbk5xUWM3Nno4cDZha0VHZHlBSmFpSUlJQU1nRjBGL2MzSnpha0hPK3MvS2VtcEJDSGNnRm1vaUNTQUlJQU5CQ25jaUEwRi9jM0p6YWtITytzL0tlbXBCRFhjZ0Yyb2lEaUFKSUFoQkNuY2lDRUYvYzNKemFrSE8rcy9LZW1wQkRIY2dBMm9pRkVFS2R5SVdhaUFBSUE1QkNuY2lER29nQlNBSlFRcDNJZ0JxSUFZZ0NHb2dGU0FEYWlBVUlBNGdBRUYvYzNKemFrSE8rcy9LZW1wQkJYY2dDR29pQXlBVUlBeEJmM055YzJwQnp2clB5bnBxUVF4M0lBQnFJZ0FnQXlBV1FYOXpjbk5xUWM3Nno4cDZha0VOZHlBTWFpSUdJQUFnQTBFS2R5SURRWDl6Y25OcVFjNzZ6OHA2YWtFT2R5QVdhaUlJSUFZZ0FFRUtkeUlBUVg5emNuTnFRYzc2ejhwNmFrRUxkeUFEYWlJSlFRcDNJaFZxTmdLUWlRRkJBQ0FMSUJnZ0Ftb2dHU0FhUVFwM0lnSnpJQnh6YWtFUGR5QWJhaUlPUVFwM0loWnFJQkFnQTJvZ0NTQUlJQVpCQ25jaUEwRi9jM0p6YWtITytzL0tlbXBCQ0hjZ0FHb2lCa0VLZDJvMkFveUpBVUVBSUEwZ0d5QUZhaUFjSUJsQkNuY2lCWE1nRG5OcVFRMTNJQUpxSWhSQkNuZHFJQWNnQUdvZ0JpQUpJQWhCQ25jaUFFRi9jM0p6YWtITytzL0tlbXBCQlhjZ0Eyb2lCMm8yQW9pSkFVRUFJQUFnQ21vZ0FpQUJhaUFPSUIxeklCUnpha0VMZHlBRmFpSUJhaUFSSUFOcUlBY2dCaUFWUVg5emNuTnFRYzc2ejhwNmFrRUdkMm8yQXBpSkFVRUFJQUFnRDJvZ0hXb2dCU0FFYWlBVUlCWnpJQUZ6YWtFTGQybzJBcFNKQVF1aUF3RUlmd0pBSUFGRkRRQkJBQ0VDUVFCQkFDZ0NnSWtCSWdNZ0FXb2lCRFlDZ0lrQklBTkJQM0VoQlFKQUlBUWdBMDhOQUVFQVFRQW9Bb1NKQVVFQmFqWUNoSWtCQ3dKQUlBVkZEUUFDUUVIQUFDQUZheUlHSUFGTkRRQWdCU0VDREFFTElBWkJBM0VoQjBFQUlRTUNRQ0FGUVQ5elFRTkpEUUFnQlVHQWlRRnFJUWdnQmtIOEFIRWhDVUVBSVFNRFFDQUlJQU5xSWdKQkhHb2dBQ0FEYWlJRUxRQUFPZ0FBSUFKQkhXb2dCRUVCYWkwQUFEb0FBQ0FDUVI1cUlBUkJBbW90QUFBNkFBQWdBa0VmYWlBRVFRTnFMUUFBT2dBQUlBa2dBMEVFYWlJRFJ3MEFDd3NDUUNBSFJRMEFJQUFnQTJvaEFpQURJQVZxUVp5SkFXb2hBd05BSUFNZ0FpMEFBRG9BQUNBQ1FRRnFJUUlnQTBFQmFpRURJQWRCZjJvaUJ3MEFDd3RCbklrQkVBSWdBU0FHYXlFQklBQWdCbW9oQUVFQUlRSUxBa0FnQVVIQUFFa05BQU5BSUFBUUFpQUFRY0FBYWlFQUlBRkJRR29pQVVFL1N3MEFDd3NnQVVVTkFDQUNRWnlKQVdvaEEwRUFJUUlEUUNBRElBQXRBQUE2QUFBZ0FFRUJhaUVBSUFOQkFXb2hBeUFCSUFKQkFXb2lBa0gvQVhGTERRQUxDd3NKQUVHQUNTQUFFQU1MZ2dFQkFuOGpBRUVRYXlJQUpBQWdBRUVBS0FLQWlRRWlBVUVEZERZQ0NDQUFRUUFvQW9TSkFVRURkQ0FCUVIxMmNqWUNERUdRQ0VFNFFmZ0FJQUZCUDNFaUFVRTRTUnNnQVdzUUF5QUFRUWhxUVFnUUEwRUFRUUFvQW9pSkFUWUNnQWxCQUVFQUtRS01pUUUzQW9RSlFRQkJBQ2tDbElrQk53S01DU0FBUVJCcUpBQUxCZ0JCZ0lrQkM4RUJBUUYvSXdCQkVHc2lBU1FBUVFCQjhNUExubncyQXBpSkFVRUFRdjY1NjhYcGpwV1pFRGNDa0lrQlFRQkNnY2FVdXBieDZ1WnZOd0tJaVFGQkFFSUFOd0tBaVFGQmdBa2dBQkFESUFGQkFDZ0NnSWtCSWdCQkEzUTJBZ2dnQVVFQUtBS0VpUUZCQTNRZ0FFRWRkbkkyQWd4QmtBaEJPRUg0QUNBQVFUOXhJZ0JCT0VrYklBQnJFQU1nQVVFSWFrRUlFQU5CQUVFQUtBS0lpUUUyQW9BSlFRQkJBQ2tDaklrQk53S0VDVUVBUVFBcEFwU0pBVGNDakFrZ0FVRVFhaVFBQ3d0WEFRQkJnQWdMVUZ3QUFBQUFBQUFBQUFBQUFBQUFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXCI7XG52YXIgaGFzaCQ0ID0gXCJjMDg5YTdjYVwiO1xudmFyIHdhc21Kc29uJDQgPSB7XG5cdG5hbWU6IG5hbWUkNCxcblx0ZGF0YTogZGF0YSQ0LFxuXHRoYXNoOiBoYXNoJDRcbn07XG5cbmNvbnN0IG11dGV4JDIgPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUkMiA9IG51bGw7XG4vKipcbiAqIENhbGN1bGF0ZXMgUklQRU1ELTE2MCBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiByaXBlbWQxNjAoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkMiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JDIsIHdhc21Kc29uJDQsIDIwKVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSQyID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkMi5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJDIuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBSSVBFTUQtMTYwIGhhc2ggaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUklQRU1EMTYwKCkge1xuICAgIHJldHVybiBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDQsIDIwKS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDY0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogMjAsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUtleUJ1ZmZlcihoYXNoZXIsIGtleSkge1xuICAgIGNvbnN0IHsgYmxvY2tTaXplIH0gPSBoYXNoZXI7XG4gICAgY29uc3QgYnVmID0gZ2V0VUludDhCdWZmZXIoa2V5KTtcbiAgICBpZiAoYnVmLmxlbmd0aCA+IGJsb2NrU2l6ZSkge1xuICAgICAgICBoYXNoZXIudXBkYXRlKGJ1Zik7XG4gICAgICAgIGNvbnN0IHVpbnRBcnIgPSBoYXNoZXIuZGlnZXN0KCdiaW5hcnknKTtcbiAgICAgICAgaGFzaGVyLmluaXQoKTtcbiAgICAgICAgcmV0dXJuIHVpbnRBcnI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVIbWFjKGhhc2hlciwga2V5KSB7XG4gICAgaGFzaGVyLmluaXQoKTtcbiAgICBjb25zdCB7IGJsb2NrU2l6ZSB9ID0gaGFzaGVyO1xuICAgIGNvbnN0IGtleUJ1ZiA9IGNhbGN1bGF0ZUtleUJ1ZmZlcihoYXNoZXIsIGtleSk7XG4gICAgY29uc3Qga2V5QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tTaXplKTtcbiAgICBrZXlCdWZmZXIuc2V0KGtleUJ1Zik7XG4gICAgY29uc3Qgb3BhZCA9IG5ldyBVaW50OEFycmF5KGJsb2NrU2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuICAgICAgICBjb25zdCB2ID0ga2V5QnVmZmVyW2ldO1xuICAgICAgICBvcGFkW2ldID0gdiBeIDB4NUM7XG4gICAgICAgIGtleUJ1ZmZlcltpXSA9IHYgXiAweDM2O1xuICAgIH1cbiAgICBoYXNoZXIudXBkYXRlKGtleUJ1ZmZlcik7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgICBpbml0OiAoKSA9PiB7XG4gICAgICAgICAgICBoYXNoZXIuaW5pdCgpO1xuICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShrZXlCdWZmZXIpO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sXG4gICAgICAgIGRpZ2VzdDogKChvdXRwdXRUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1aW50QXJyID0gaGFzaGVyLmRpZ2VzdCgnYmluYXJ5Jyk7XG4gICAgICAgICAgICBoYXNoZXIuaW5pdCgpO1xuICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShvcGFkKTtcbiAgICAgICAgICAgIGhhc2hlci51cGRhdGUodWludEFycik7XG4gICAgICAgICAgICByZXR1cm4gaGFzaGVyLmRpZ2VzdChvdXRwdXRUeXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNhdmU6ICgpID0+IHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2F2ZSgpIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9hZDogKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2FkKCkgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICB9LFxuICAgICAgICBibG9ja1NpemU6IGhhc2hlci5ibG9ja1NpemUsXG4gICAgICAgIGRpZ2VzdFNpemU6IGhhc2hlci5kaWdlc3RTaXplLFxuICAgIH07XG4gICAgcmV0dXJuIG9iajtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBITUFDIGhhc2hcbiAqIEBwYXJhbSBoYXNoIEhhc2ggYWxnb3JpdGhtIHRvIHVzZS4gSXQgaGFzIHRvIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiBsaWtlIGNyZWF0ZVNIQTEoKVxuICogQHBhcmFtIGtleSBLZXkgKHN0cmluZywgQnVmZmVyIG9yIFR5cGVkQXJyYXkpXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhNQUMoaGFzaCwga2V5KSB7XG4gICAgaWYgKCFoYXNoIHx8ICFoYXNoLnRoZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhhc2ggZnVuY3Rpb24gaXMgcHJvdmlkZWQhIFVzYWdlOiBjcmVhdGVITUFDKGNyZWF0ZU1ENSgpLCBcImtleVwiKS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2gudGhlbigoaGFzaGVyKSA9PiBjYWxjdWxhdGVIbWFjKGhhc2hlciwga2V5KSk7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVBCS0RGMihkaWdlc3QsIHNhbHQsIGl0ZXJhdGlvbnMsIGhhc2hMZW5ndGgsIG91dHB1dFR5cGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBESyA9IG5ldyBVaW50OEFycmF5KGhhc2hMZW5ndGgpO1xuICAgICAgICBjb25zdCBibG9jazEgPSBuZXcgVWludDhBcnJheShzYWx0Lmxlbmd0aCArIDQpO1xuICAgICAgICBjb25zdCBibG9jazFWaWV3ID0gbmV3IERhdGFWaWV3KGJsb2NrMS5idWZmZXIpO1xuICAgICAgICBjb25zdCBzYWx0QnVmZmVyID0gZ2V0VUludDhCdWZmZXIoc2FsdCk7XG4gICAgICAgIGNvbnN0IHNhbHRVSW50QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoc2FsdEJ1ZmZlci5idWZmZXIsIHNhbHRCdWZmZXIuYnl0ZU9mZnNldCwgc2FsdEJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICBibG9jazEuc2V0KHNhbHRVSW50QnVmZmVyKTtcbiAgICAgICAgbGV0IGRlc3RQb3MgPSAwO1xuICAgICAgICBjb25zdCBoTGVuID0gZGlnZXN0LmRpZ2VzdFNpemU7XG4gICAgICAgIGNvbnN0IGwgPSBNYXRoLmNlaWwoaGFzaExlbmd0aCAvIGhMZW4pO1xuICAgICAgICBsZXQgVCA9IG51bGw7XG4gICAgICAgIGxldCBVID0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbDsgaSsrKSB7XG4gICAgICAgICAgICBibG9jazFWaWV3LnNldFVpbnQzMihzYWx0Lmxlbmd0aCwgaSk7XG4gICAgICAgICAgICBkaWdlc3QuaW5pdCgpO1xuICAgICAgICAgICAgZGlnZXN0LnVwZGF0ZShibG9jazEpO1xuICAgICAgICAgICAgVCA9IGRpZ2VzdC5kaWdlc3QoJ2JpbmFyeScpO1xuICAgICAgICAgICAgVSA9IFQuc2xpY2UoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgaXRlcmF0aW9uczsgaisrKSB7XG4gICAgICAgICAgICAgICAgZGlnZXN0LmluaXQoKTtcbiAgICAgICAgICAgICAgICBkaWdlc3QudXBkYXRlKFUpO1xuICAgICAgICAgICAgICAgIFUgPSBkaWdlc3QuZGlnZXN0KCdiaW5hcnknKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGhMZW47IGsrKykge1xuICAgICAgICAgICAgICAgICAgICBUW2tdIF49IFVba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgREsuc2V0KFQuc3ViYXJyYXkoMCwgaGFzaExlbmd0aCAtIGRlc3RQb3MpLCBkZXN0UG9zKTtcbiAgICAgICAgICAgIGRlc3RQb3MgKz0gaExlbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3V0cHV0VHlwZSA9PT0gJ2JpbmFyeScpIHtcbiAgICAgICAgICAgIHJldHVybiBESztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWdlc3RDaGFycyA9IG5ldyBVaW50OEFycmF5KGhhc2hMZW5ndGggKiAyKTtcbiAgICAgICAgcmV0dXJuIGdldERpZ2VzdEhleChkaWdlc3RDaGFycywgREssIGhhc2hMZW5ndGgpO1xuICAgIH0pO1xufVxuY29uc3QgdmFsaWRhdGVPcHRpb25zJDIgPSAob3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9wdGlvbnMgcGFyYW1ldGVyLiBJdCByZXF1aXJlcyBhbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5oYXNoRnVuY3Rpb24gfHwgIW9wdGlvbnMuaGFzaEZ1bmN0aW9uLnRoZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhhc2ggZnVuY3Rpb24gaXMgcHJvdmlkZWQhIFVzYWdlOiBwYmtkZjIoXCJwYXNzd29yZFwiLCBcInNhbHRcIiwgMTAwMCwgMzIsIGNyZWF0ZVNIQTEoKSkuJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLml0ZXJhdGlvbnMpIHx8IG9wdGlvbnMuaXRlcmF0aW9ucyA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdGVyYXRpb25zIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5oYXNoTGVuZ3RoKSB8fCBvcHRpb25zLmhhc2hMZW5ndGggPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaCBsZW5ndGggc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm91dHB1dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLm91dHB1dFR5cGUgPSAnaGV4JztcbiAgICB9XG4gICAgaWYgKCFbJ2hleCcsICdiaW5hcnknXS5pbmNsdWRlcyhvcHRpb25zLm91dHB1dFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdXBwb3J0ZWQgb3V0cHV0IHR5cGUgJHtvcHRpb25zLm91dHB1dFR5cGV9LiBWYWxpZCB2YWx1ZXM6IFsnaGV4JywgJ2JpbmFyeSddYCk7XG4gICAgfVxufTtcbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IFBCS0RGMiBoYXNoIGZvciB0aGUgc3VwcGxpZWQgcGFzc3dvcmRcbiAqL1xuZnVuY3Rpb24gcGJrZGYyKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB2YWxpZGF0ZU9wdGlvbnMkMihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaG1hYyA9IHlpZWxkIGNyZWF0ZUhNQUMob3B0aW9ucy5oYXNoRnVuY3Rpb24sIG9wdGlvbnMucGFzc3dvcmQpO1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlUEJLREYyKGhtYWMsIG9wdGlvbnMuc2FsdCwgb3B0aW9ucy5pdGVyYXRpb25zLCBvcHRpb25zLmhhc2hMZW5ndGgsIG9wdGlvbnMub3V0cHV0VHlwZSk7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJDMgPSBcInNjcnlwdFwiO1xudmFyIGRhdGEkMyA9IFwiQUdGemJRRUFBQUFCR3dWZ0FYOEJmMkFBQVg5Z0JIOS9mMzhBWUFGL0FHQURmMzkvQUFNR0JRQUJBZ01FQlFZQkFRS0FnQUlHQ0FGL0FVR1FpQVFMQnprRUJtMWxiVzl5ZVFJQUVraGhjMmhmVTJWMFRXVnRiM0o1VTJsNlpRQUFEa2hoYzJoZlIyVjBRblZtWm1WeUFBRUdjMk55ZVhCMEFBUUt4eVlGV0FFQ2YwRUFJUUVDUUVFQUtBS0lDQ0lDSUFCR0RRQUNRQ0FBSUFKcklnQkJFSFlnQUVHQWdIeHhJQUJKYWlJQVFBQkJmMGNOQUVIL0FjQVBDMEVBSVFGQkFFRUFLUU9JQ0NBQVFSQjByWHczQTRnSUN5QUJ3QXR3QVFKL0FrQkJBQ2dDZ0FnaUFBMEFRUUEvQUVFUWRDSUFOZ0tBQ0VFQUtBS0lDQ0lCUVlDQUlFWU5BQUpBUVlDQUlDQUJheUlBUVJCMklBQkJnSUI4Y1NBQVNXb2lBRUFBUVg5SERRQkJBQThMUVFCQkFDa0RpQWdnQUVFUWRLMThOd09JQ0VFQUtBS0FDQ0VBQ3lBQUM2c0ZBUU4vSUFJZ0EwRUhkQ0FBYWtGQWFpSUVLUU1BTndNQUlBSWdCQ2tEQ0RjRENDQUNJQVFwQXhBM0F4QWdBaUFFS1FNWU53TVlJQUlnQkNrRElEY0RJQ0FDSUFRcEF5ZzNBeWdnQWlBRUtRTXdOd013SUFJZ0JDa0RPRGNET0FKQUlBTkZEUUFnQTBFQmRDRUZJQUJCK0FCcUlRUWdBMEVHZENFR1FRQWhBQU5BSUFJZ0Fpa0RBQ0FFUVloL2Fpa0RBSVUzQXdBZ0FpQUNLUU1JSUFSQmtIOXFLUU1BaFRjRENDQUNJQUlwQXhBZ0JFR1lmMm9wQXdDRk53TVFJQUlnQWlrREdDQUVRYUIvYWlrREFJVTNBeGdnQWlBQ0tRTWdJQVJCcUg5cUtRTUFoVGNESUNBQ0lBSXBBeWdnQkVHd2Yyb3BBd0NGTndNb0lBSWdBaWtETUNBRVFiaC9haWtEQUlVM0F6QWdBaUFDS1FNNElBUkJRR29wQXdDRk53TTRJQUlRQXlBQklBSXBBd0EzQXdBZ0FVRUlhaUFDS1FNSU53TUFJQUZCRUdvZ0Fpa0RFRGNEQUNBQlFSaHFJQUlwQXhnM0F3QWdBVUVnYWlBQ0tRTWdOd01BSUFGQktHb2dBaWtES0RjREFDQUJRVEJxSUFJcEF6QTNBd0FnQVVFNGFpQUNLUU00TndNQUlBSWdBaWtEQUNBRVFVaHFLUU1BaFRjREFDQUNJQUlwQXdnZ0JFRlFhaWtEQUlVM0F3Z2dBaUFDS1FNUUlBUkJXR29wQXdDRk53TVFJQUlnQWlrREdDQUVRV0JxS1FNQWhUY0RHQ0FDSUFJcEF5QWdCRUZvYWlrREFJVTNBeUFnQWlBQ0tRTW9JQVJCY0dvcEF3Q0ZOd01vSUFJZ0Fpa0RNQ0FFUVhocUtRTUFoVGNETUNBQ0lBSXBBemdnQkNrREFJVTNBemdnQWhBRElBRWdCbW9pQXlBQ0tRTUFOd01BSUFOQkNHb2dBaWtEQ0RjREFDQURRUkJxSUFJcEF4QTNBd0FnQTBFWWFpQUNLUU1ZTndNQUlBTkJJR29nQWlrRElEY0RBQ0FEUVNocUlBSXBBeWczQXdBZ0EwRXdhaUFDS1FNd053TUFJQU5CT0dvZ0Fpa0RPRGNEQUNBRVFZQUJhaUVFSUFGQndBQnFJUUVnQUVFQ2FpSUFJQVZKRFFBTEN3dTZEUWdCZmdGL0FYNEJmd0YrQVg4QmZoSi9JQUFnQUNnQ0JDQUFLUU1vSWdGQ0lJaW5JZ0lnQUNrRE9DSURRaUNJcHlJRWFrRUhkeUFBS1FNSUlnVkNJSWluY3lJR0lBUnFRUWwzSUFBcEF4Z2lCMElnaUtkeklnZ2dCbXBCRFhjZ0FuTWlDU0FIcHlJS0lBR25JZ3RxUVFkM0lBT25jeUlDSUF0cVFRbDNJQVduY3lJTUlBSnFRUTEzSUFweklnMGdER3BCRW5jZ0MzTWlEaUFBS1FNQUlnRkNJSWluSWc4Z0FDa0RFQ0lEUWlDSXB5SVFha0VIZHlBQUtRTWdJZ1ZDSUlpbmN5SUxha0VIZDNNaUNpQUpJQWhxUVJKM0lBUnpJaEVnQW1wQkIzY2dBQ2tETUNJSHB5SUpJQUduSWhKcVFRZDNJQU9uY3lJRUlCSnFRUWwzSUFXbmN5SVRJQVJxUVExM0lBbHpJaFJ6SWdrZ0VXcEJDWGNnQ3lBUWFrRUpkeUFIUWlDSXAzTWlGWE1pRmlBSmFrRU5keUFDY3lJWElCWnFRUkozSUJGekloRnFRUWQzSUFZZ0ZDQVRha0VTZHlBU2N5SVNha0VIZHlBVklBdHFRUTEzSUE5ekloUnpJZ0lnRW1wQkNYY2dESE1pRHlBQ2FrRU5keUFHY3lJWWN5SUdJQkZxUVFsM0lBZ2dEU0FVSUJWcVFSSjNJQkJ6SWhBZ0JHcEJCM2R6SWd3Z0VHcEJDWGR6SWdoekloVWdCbXBCRFhjZ0NuTWlGQ0FNSUFvZ0RtcEJDWGNnRTNNaUV5QUtha0VOZHlBTGN5SVpJQk5xUVJKM0lBNXpJZ3BxUVFkM0lCZHpJZ3NnQ21wQkNYY2dEM01pRGlBTGFrRU5keUFNY3lJWElBNXFRUkozSUFweklnMGdBaUFJSUF4cVFRMTNJQVJ6SWd3Z0NHcEJFbmNnRUhNaUNHcEJCM2NnR1hNaUNtcEJCM2R6SWdRZ0ZDQVZha0VTZHlBUmN5SVFJQXRxUVFkM0lBa2dHQ0FQYWtFU2R5QVNjeUlSYWtFSGR5QU1jeUlNSUJGcVFRbDNJQk56SWhJZ0RHcEJEWGNnQ1hNaUQzTWlDU0FRYWtFSmR5QUtJQWhxUVFsM0lCWnpJaE56SWhZZ0NXcEJEWGNnQzNNaUZDQVdha0VTZHlBUWN5SVFha0VIZHlBR0lBOGdFbXBCRW5jZ0VYTWlFV3BCQjNjZ0V5QUtha0VOZHlBQ2N5SUxjeUlDSUJGcVFRbDNJQTV6SWc0Z0FtcEJEWGNnQm5NaUdITWlCaUFRYWtFSmR5QVZJQmNnQ3lBVGFrRVNkeUFJY3lJSUlBeHFRUWQzY3lJTElBaHFRUWwzY3lJVGN5SVZJQVpxUVExM0lBUnpJaGNnQ3lBRUlBMXFRUWwzSUJKekloSWdCR3BCRFhjZ0NuTWlHU0FTYWtFU2R5QU5jeUlFYWtFSGR5QVVjeUlLSUFScVFRbDNJQTV6SWc4Z0NtcEJEWGNnQzNNaUZDQVBha0VTZHlBRWN5SU5JQUlnRXlBTGFrRU5keUFNY3lJTUlCTnFRUkozSUFoeklnaHFRUWQzSUJseklndHFRUWQzY3lJRUlCY2dGV3BCRW5jZ0VITWlFQ0FLYWtFSGR5QUpJQmdnRG1wQkVuY2dFWE1pRG1wQkIzY2dESE1pRENBT2FrRUpkeUFTY3lJUklBeHFRUTEzSUFsekloZHpJZ2tnRUdwQkNYY2dDeUFJYWtFSmR5QVdjeUlTY3lJVElBbHFRUTEzSUFwekloZ2dFMnBCRW5jZ0VITWlFR3BCQjNjZ0JpQVhJQkZxUVJKM0lBNXpJZ3BxUVFkM0lCSWdDMnBCRFhjZ0FuTWlGM01pQWlBS2FrRUpkeUFQY3lJT0lBSnFRUTEzSUFaekloWnpJZ1lnQ1NBV0lBNXFRUkozSUFwekloWnFRUWQzSUJVZ0ZDQVhJQkpxUVJKM0lBaHpJZ2dnREdwQkIzZHpJZ29nQ0dwQkNYZHpJaElnQ21wQkRYY2dESE1pRDNNaURDQVdha0VKZHlBRUlBMXFRUWwzSUJGekloRnpJaFVnREdwQkRYY2dDWE1pRkNBVmFrRVNkeUFXY3lJSmFrRUhkeUFDSUE4Z0VtcEJFbmNnQ0hNaUNHcEJCM2NnRVNBRWFrRU5keUFMY3lJUGN5SUxJQWhxUVFsM0lCTnpJaE1nQzJwQkRYY2dBbk1pRjNNaUZtbzJBZ1FnQUNBQUtBSUlJQllnQ1dwQkNYY2dDaUFQSUJGcVFSSjNJQTF6SWhGcVFRZDNJQmh6SWdJZ0VXcEJDWGNnRG5NaURuTWlEMm8yQWdnZ0FDQUFLQUlNSUE4Z0ZtcEJEWGNnQm5NaURXbzJBZ3dnQUNBQUtBSVFJQVlnRUdwQkNYY2dFbk1pRWlBT0lBSnFRUTEzSUFwekloZ2dGeUFUYWtFU2R5QUljeUlLSUF4cVFRZDNjeUlJSUFwcVFRbDNjeUlXSUFocVFRMTNJQXh6SWd4cU5nSVFJQUFnQUNnQ0FDQU5JQTlxUVJKM0lBbHphallDQUNBQUlBQW9BaFFnRENBV2FrRVNkeUFLYzJvMkFoUWdBQ0FBS0FJWUlBaHFOZ0lZSUFBZ0FDZ0NIQ0FXYWpZQ0hDQUFJQUFvQWlBZ0VpQUdha0VOZHlBRWN5SUpJQmdnRG1wQkVuY2dFWE1pQmlBTGFrRUhkM01pQ2lBR2FrRUpkeUFWY3lJRWFqWUNJQ0FBSUFBb0FpUWdCQ0FLYWtFTmR5QUxjeUlMYWpZQ0pDQUFJQUFvQWlnZ0N5QUVha0VTZHlBR2MybzJBaWdnQUNBQUtBSXNJQXBxTmdJc0lBQWdBQ2dDTUNBSklCSnFRUkozSUJCeklnWWdBbXBCQjNjZ0ZITWlDMm8yQWpBZ0FDQUFLQUkwSUFzZ0JtcEJDWGNnRTNNaUNtbzJBalFnQUNBQUtBSTRJQW9nQzJwQkRYY2dBbk1pQW1vMkFqZ2dBQ0FBS0FJOElBSWdDbXBCRW5jZ0JuTnFOZ0k4QzVFU0F3NS9BWDRPZndKQUlBSkZEUUFnQUVFSGRDSURRVUJxSWdSQkFDZ0NnQWdpQlNBRElBSnNJZ1pxSUFNZ0FXeHFJZ2NnQTJvaUNHb2hDU0FBSUFKQkIzUWlDaUFCUVFkMGFpSUxiQ0VNSUFBZ0MwR0FBV3BzSVEwZ0FFRUZkQ0lMUVFFZ0MwRUJTeHNpQzBGZ2NTRU9JQXRCQVhFaER5QUhRVUJxSVJBZ0FhMUNmM3doRVNBRUlBZHFJUklnQnlBQVFRaDBJaE5xSVJRZ0FDQUtRWUFCYW13aEZTQUxRWDlxUVFOSklSWkJBQ0VYUVFBaEdBTkFRUUFvQW9BSUloa2dBeUFZYkdvaEdnSkFJQUJGRFFCQkFDRWJBa0FnRmcwQUlCa2dGMm9oSEVFQUlRdEJBQ0ViQTBBZ0J5QUxhaUlFSUJ3Z0Myb2lIU2dDQURZQ0FDQUVRUVJxSUIxQkJHb29BZ0EyQWdBZ0JFRUlhaUFkUVFocUtBSUFOZ0lBSUFSQkRHb2dIVUVNYWlnQ0FEWUNBQ0FMUVJCcUlRc2dEaUFiUVFScUlodEhEUUFMQ3lBUFJRMEFJQWNnRzBFQ2RDSUxhaUFhSUF0cUtBSUFOZ0lBQ3dKQUlBRkZEUUJCQUNFZUlCVWhIQ0FHSVI4RFFDQUZJUjBnQUNFYkFrQUNRQ0FBRFFBZ0ZDQVFLUU1BTndNQUlCUWdFQ2tEQ0RjRENDQVVJQkFwQXhBM0F4QWdGQ0FRS1FNWU53TVlJQlFnRUNrRElEY0RJQ0FVSUJBcEF5ZzNBeWdnRkNBUUtRTXdOd013SUJRZ0VDa0RPRGNET0F3QkN3TkFJQjBnSDJvaUN5QWRJQXhxSWdRcEF3QTNBd0FnQzBFSWFpQUVRUWhxS1FNQU53TUFJQXRCRUdvZ0JFRVFhaWtEQURjREFDQUxRUmhxSUFSQkdHb3BBd0EzQXdBZ0MwRWdhaUFFUVNCcUtRTUFOd01BSUF0QktHb2dCRUVvYWlrREFEY0RBQ0FMUVRCcUlBUkJNR29wQXdBM0F3QWdDMEU0YWlBRVFUaHFLUU1BTndNQUlBdEJ3QUJxSUFSQndBQnFLUU1BTndNQUlBdEJ5QUJxSUFSQnlBQnFLUU1BTndNQUlBdEIwQUJxSUFSQjBBQnFLUU1BTndNQUlBdEIyQUJxSUFSQjJBQnFLUU1BTndNQUlBdEI0QUJxSUFSQjRBQnFLUU1BTndNQUlBdEI2QUJxSUFSQjZBQnFLUU1BTndNQUlBdEI4QUJxSUFSQjhBQnFLUU1BTndNQUlBdEIrQUJxSUFSQitBQnFLUU1BTndNQUlCMUJnQUZxSVIwZ0cwRi9haUliRFFBTElBY2dDQ0FVSUFBUUFpQUZJUjBnQUNFYkEwQWdIU0FjYWlJTElCMGdEV29pQkNrREFEY0RBQ0FMUVFocUlBUkJDR29wQXdBM0F3QWdDMEVRYWlBRVFSQnFLUU1BTndNQUlBdEJHR29nQkVFWWFpa0RBRGNEQUNBTFFTQnFJQVJCSUdvcEF3QTNBd0FnQzBFb2FpQUVRU2hxS1FNQU53TUFJQXRCTUdvZ0JFRXdhaWtEQURjREFDQUxRVGhxSUFSQk9Hb3BBd0EzQXdBZ0MwSEFBR29nQkVIQUFHb3BBd0EzQXdBZ0MwSElBR29nQkVISUFHb3BBd0EzQXdBZ0MwSFFBR29nQkVIUUFHb3BBd0EzQXdBZ0MwSFlBR29nQkVIWUFHb3BBd0EzQXdBZ0MwSGdBR29nQkVIZ0FHb3BBd0EzQXdBZ0MwSG9BR29nQkVIb0FHb3BBd0EzQXdBZ0MwSHdBR29nQkVId0FHb3BBd0EzQXdBZ0MwSDRBR29nQkVINEFHb3BBd0EzQXdBZ0hVR0FBV29oSFNBYlFYOXFJaHNOQUFzTElBZ2dCeUFVSUFBUUFpQWNJQk5xSVJ3Z0h5QVRhaUVmSUI1QkFtb2lIaUFCU1EwQUMwRUFJUjREUUFKQUFrQWdBQTBBSUJRZ0VDa0RBRGNEQUNBVUlCQXBBd2czQXdnZ0ZDQVFLUU1RTndNUUlCUWdFQ2tER0RjREdDQVVJQkFwQXlBM0F5QWdGQ0FRS1FNb053TW9JQlFnRUNrRE1EY0RNQ0FVSUJBcEF6ZzNBemdNQVFzZ0FDQUtJQklwQWdBZ0VZT25RUWQwYW13aEh5QUZJUjBnQUNFYkEwQWdIU0FNYWlJTElBc3BBd0FnSFNBZmFpSUVLUU1BaFRjREFDQUxRUWhxSWh3Z0hDa0RBQ0FFUVFocUtRTUFoVGNEQUNBTFFSQnFJaHdnSENrREFDQUVRUkJxS1FNQWhUY0RBQ0FMUVJocUlod2dIQ2tEQUNBRVFSaHFLUU1BaFRjREFDQUxRU0JxSWh3Z0hDa0RBQ0FFUVNCcUtRTUFoVGNEQUNBTFFTaHFJaHdnSENrREFDQUVRU2hxS1FNQWhUY0RBQ0FMUVRCcUlod2dIQ2tEQUNBRVFUQnFLUU1BaFRjREFDQUxRVGhxSWh3Z0hDa0RBQ0FFUVRocUtRTUFoVGNEQUNBTFFjQUFhaUljSUJ3cEF3QWdCRUhBQUdvcEF3Q0ZOd01BSUF0QnlBQnFJaHdnSENrREFDQUVRY2dBYWlrREFJVTNBd0FnQzBIUUFHb2lIQ0FjS1FNQUlBUkIwQUJxS1FNQWhUY0RBQ0FMUWRnQWFpSWNJQndwQXdBZ0JFSFlBR29wQXdDRk53TUFJQXRCNEFCcUlod2dIQ2tEQUNBRVFlQUFhaWtEQUlVM0F3QWdDMEhvQUdvaUhDQWNLUU1BSUFSQjZBQnFLUU1BaFRjREFDQUxRZkFBYWlJY0lCd3BBd0FnQkVId0FHb3BBd0NGTndNQUlBdEIrQUJxSWdzZ0N5a0RBQ0FFUWZnQWFpa0RBSVUzQXdBZ0hVR0FBV29oSFNBYlFYOXFJaHNOQUFzZ0J5QUlJQlFnQUJBQ0lBQWdDaUFKS1FJQUlCR0RwMEVIZEdwc0lSOGdCU0VkSUFBaEd3TkFJQjBnRFdvaUN5QUxLUU1BSUIwZ0gyb2lCQ2tEQUlVM0F3QWdDMEVJYWlJY0lCd3BBd0FnQkVFSWFpa0RBSVUzQXdBZ0MwRVFhaUljSUJ3cEF3QWdCRUVRYWlrREFJVTNBd0FnQzBFWWFpSWNJQndwQXdBZ0JFRVlhaWtEQUlVM0F3QWdDMEVnYWlJY0lCd3BBd0FnQkVFZ2Fpa0RBSVUzQXdBZ0MwRW9haUljSUJ3cEF3QWdCRUVvYWlrREFJVTNBd0FnQzBFd2FpSWNJQndwQXdBZ0JFRXdhaWtEQUlVM0F3QWdDMEU0YWlJY0lCd3BBd0FnQkVFNGFpa0RBSVUzQXdBZ0MwSEFBR29pSENBY0tRTUFJQVJCd0FCcUtRTUFoVGNEQUNBTFFjZ0FhaUljSUJ3cEF3QWdCRUhJQUdvcEF3Q0ZOd01BSUF0QjBBQnFJaHdnSENrREFDQUVRZEFBYWlrREFJVTNBd0FnQzBIWUFHb2lIQ0FjS1FNQUlBUkIyQUJxS1FNQWhUY0RBQ0FMUWVBQWFpSWNJQndwQXdBZ0JFSGdBR29wQXdDRk53TUFJQXRCNkFCcUlod2dIQ2tEQUNBRVFlZ0FhaWtEQUlVM0F3QWdDMEh3QUdvaUhDQWNLUU1BSUFSQjhBQnFLUU1BaFRjREFDQUxRZmdBYWlJTElBc3BBd0FnQkVINEFHb3BBd0NGTndNQUlCMUJnQUZxSVIwZ0cwRi9haUliRFFBTEN5QUlJQWNnRkNBQUVBSWdIa0VDYWlJZUlBRkpEUUFMQ3dKQUlBQkZEUUJCQUNFYkFrQWdGZzBBSUJrZ0Yyb2hIRUVBSVF0QkFDRWJBMEFnSENBTGFpSUVJQWNnQzJvaUhTZ0NBRFlDQUNBRVFRUnFJQjFCQkdvb0FnQTJBZ0FnQkVFSWFpQWRRUWhxS0FJQU5nSUFJQVJCREdvZ0hVRU1haWdDQURZQ0FDQUxRUkJxSVFzZ0RpQWJRUVJxSWh0SERRQUxDeUFQUlEwQUlCb2dHMEVDZENJTGFpQUhJQXRxS0FJQU5nSUFDeUFYSUFOcUlSY2dHRUVCYWlJWUlBSkhEUUFMQ3dzPVwiO1xudmFyIGhhc2gkMyA9IFwiYzUxYjhiZjdcIjtcbnZhciB3YXNtSnNvbiQzID0ge1xuXHRuYW1lOiBuYW1lJDMsXG5cdGRhdGE6IGRhdGEkMyxcblx0aGFzaDogaGFzaCQzXG59O1xuXG5mdW5jdGlvbiBzY3J5cHRJbnRlcm5hbChvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgeyBjb3N0RmFjdG9yLCBibG9ja1NpemUsIHBhcmFsbGVsaXNtLCBoYXNoTGVuZ3RoLCB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgU0hBMjU2SGFzaGVyID0gY3JlYXRlU0hBMjU2KCk7XG4gICAgICAgIGNvbnN0IGJsb2NrRGF0YSA9IHlpZWxkIHBia2RmMih7XG4gICAgICAgICAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZCxcbiAgICAgICAgICAgIHNhbHQ6IG9wdGlvbnMuc2FsdCxcbiAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDEsXG4gICAgICAgICAgICBoYXNoTGVuZ3RoOiAxMjggKiBibG9ja1NpemUgKiBwYXJhbGxlbGlzbSxcbiAgICAgICAgICAgIGhhc2hGdW5jdGlvbjogU0hBMjU2SGFzaGVyLFxuICAgICAgICAgICAgb3V0cHV0VHlwZTogJ2JpbmFyeScsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzY3J5cHRJbnRlcmZhY2UgPSB5aWVsZCBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDMsIDApO1xuICAgICAgICAvLyBsYXN0IGJsb2NrIGlzIGZvciBzdG9yaW5nIHRoZSB0ZW1wb3JhcnkgdmVjdG9yc1xuICAgICAgICBjb25zdCBWU2l6ZSA9IDEyOCAqIGJsb2NrU2l6ZSAqIGNvc3RGYWN0b3I7XG4gICAgICAgIGNvbnN0IFhZU2l6ZSA9IDI1NiAqIGJsb2NrU2l6ZTtcbiAgICAgICAgc2NyeXB0SW50ZXJmYWNlLnNldE1lbW9yeVNpemUoYmxvY2tEYXRhLmxlbmd0aCArIFZTaXplICsgWFlTaXplKTtcbiAgICAgICAgc2NyeXB0SW50ZXJmYWNlLndyaXRlTWVtb3J5KGJsb2NrRGF0YSwgMCk7XG4gICAgICAgIC8vIG1peCBibG9ja3NcbiAgICAgICAgc2NyeXB0SW50ZXJmYWNlLmdldEV4cG9ydHMoKS5zY3J5cHQoYmxvY2tTaXplLCBjb3N0RmFjdG9yLCBwYXJhbGxlbGlzbSk7XG4gICAgICAgIGNvbnN0IGV4cGVuc2l2ZVNhbHQgPSBzY3J5cHRJbnRlcmZhY2VcbiAgICAgICAgICAgIC5nZXRNZW1vcnkoKVxuICAgICAgICAgICAgLnN1YmFycmF5KDAsIDEyOCAqIGJsb2NrU2l6ZSAqIHBhcmFsbGVsaXNtKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RGF0YSA9IHlpZWxkIHBia2RmMih7XG4gICAgICAgICAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZCxcbiAgICAgICAgICAgIHNhbHQ6IGV4cGVuc2l2ZVNhbHQsXG4gICAgICAgICAgICBpdGVyYXRpb25zOiAxLFxuICAgICAgICAgICAgaGFzaExlbmd0aCxcbiAgICAgICAgICAgIGhhc2hGdW5jdGlvbjogU0hBMjU2SGFzaGVyLFxuICAgICAgICAgICAgb3V0cHV0VHlwZTogJ2JpbmFyeScsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRUeXBlID09PSAnaGV4Jykge1xuICAgICAgICAgICAgY29uc3QgZGlnZXN0Q2hhcnMgPSBuZXcgVWludDhBcnJheShoYXNoTGVuZ3RoICogMik7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGlnZXN0SGV4KGRpZ2VzdENoYXJzLCBvdXRwdXREYXRhLCBoYXNoTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gYmluYXJ5IGZvcm1hdFxuICAgICAgICByZXR1cm4gb3V0cHV0RGF0YTtcbiAgICB9KTtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG5jb25zdCBpc1Bvd2VyT2ZUd28gPSAodikgPT4gdiAmJiAhKHYgJiAodiAtIDEpKTtcbmNvbnN0IHZhbGlkYXRlT3B0aW9ucyQxID0gKG9wdGlvbnMpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvcHRpb25zIHBhcmFtZXRlci4gSXQgcmVxdWlyZXMgYW4gb2JqZWN0LicpO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5ibG9ja1NpemUpIHx8IG9wdGlvbnMuYmxvY2tTaXplIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jsb2NrIHNpemUgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmNvc3RGYWN0b3IpXG4gICAgICAgIHx8IG9wdGlvbnMuY29zdEZhY3RvciA8IDJcbiAgICAgICAgfHwgIWlzUG93ZXJPZlR3byhvcHRpb25zLmNvc3RGYWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29zdCBmYWN0b3Igc2hvdWxkIGJlIGEgcG93ZXIgb2YgMiwgZ3JlYXRlciB0aGFuIDEnKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFyYWxsZWxpc20pIHx8IG9wdGlvbnMucGFyYWxsZWxpc20gPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYWxsZWxpc20gc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmhhc2hMZW5ndGgpIHx8IG9wdGlvbnMuaGFzaExlbmd0aCA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXNoIGxlbmd0aCBzaG91bGQgYmUgYSBwb3NpdGl2ZSBudW1iZXIuJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm91dHB1dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLm91dHB1dFR5cGUgPSAnaGV4JztcbiAgICB9XG4gICAgaWYgKCFbJ2hleCcsICdiaW5hcnknXS5pbmNsdWRlcyhvcHRpb25zLm91dHB1dFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdXBwb3J0ZWQgb3V0cHV0IHR5cGUgJHtvcHRpb25zLm91dHB1dFR5cGV9LiBWYWxpZCB2YWx1ZXM6IFsnaGV4JywgJ2JpbmFyeSddYCk7XG4gICAgfVxufTtcbi8qKlxuICogQ2FsY3VsYXRlcyBoYXNoIHVzaW5nIHRoZSBzY3J5cHQgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb25cbiAqIEByZXR1cm5zIENvbXB1dGVkIGhhc2ggYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgb3IgYXNcbiAqICAgICAgICAgIFVpbnQ4QXJyYXkgZGVwZW5kaW5nIG9uIHRoZSBvdXRwdXRUeXBlIG9wdGlvblxuICovXG5mdW5jdGlvbiBzY3J5cHQob3B0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhbGlkYXRlT3B0aW9ucyQxKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gc2NyeXB0SW50ZXJuYWwob3B0aW9ucyk7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJDIgPSBcImJjcnlwdFwiO1xudmFyIGRhdGEkMiA9IFwiQUdGemJRRUFBQUFCRndSZ0FBRi9ZQVIvZjM5L0FHQURmMzkvQUdBQmZ3Ri9Bd1VFQUFFQ0F3VUVBUUVDQWdZSUFYOEJRWkNyQlFzSE5BUUdiV1Z0YjNKNUFnQU9TR0Z6YUY5SFpYUkNkV1ptWlhJQUFBWmlZM0o1Y0hRQUFnMWlZM0o1Y0hSZmRtVnlhV1o1QUFNSytHQUVCUUJCZ0NzTDNsa0VGSDhCZmdoL0FYNGpBRUh3QUdzaEJDQUNRUUE2QUFJZ0FrR3E0QUE3QUFBQ1FDQUJMUUFBUVNwSERRQWdBUzBBQVVFd1J3MEFJQUpCTVRvQUFRc0NRQ0FCTEFBRklBRXNBQVJCQ214cVFmQjdhaUlGUVFSSkRRQWdBUzBBQjBGZ2FpSUdRZDhBU3cwQUlBWkJrQWxxTFFBQUlnWkJQMHNOQUNBQkxRQUlRV0JxSWdkQjN3QkxEUUFnQjBHUUNXb3RBQUFpQjBFL1N3MEFJQVFnQjBFRWRpQUdRUUowY2pvQUNDQUJMUUFKUVdCcUlnWkIzd0JMRFFBZ0JrR1FDV290QUFBaUJrRS9TdzBBSUFRZ0JrRUNkaUFIUVFSMGNqb0FDU0FCTFFBS1FXQnFJZ2RCM3dCTERRQWdCMEdRQ1dvdEFBQWlCMEUvU3cwQUlBUWdCeUFHUVFaMGNqb0FDaUFCTFFBTFFXQnFJZ1pCM3dCTERRQWdCa0dRQ1dvdEFBQWlCa0UvU3cwQUlBRXRBQXhCWUdvaUIwSGZBRXNOQUNBSFFaQUphaTBBQUNJSFFUOUxEUUFnQkNBSFFRUjJJQVpCQW5SeU9nQUxJQUV0QUExQllHb2lCa0hmQUVzTkFDQUdRWkFKYWkwQUFDSUdRVDlMRFFBZ0JDQUdRUUoySUFkQkJIUnlPZ0FNSUFFdEFBNUJZR29pQjBIZkFFc05BQ0FIUVpBSmFpMEFBQ0lIUVQ5TERRQWdCQ0FISUFaQkJuUnlPZ0FOSUFFdEFBOUJZR29pQmtIZkFFc05BQ0FHUVpBSmFpMEFBQ0lHUVQ5TERRQWdBUzBBRUVGZ2FpSUhRZDhBU3cwQUlBZEJrQWxxTFFBQUlnZEJQMHNOQUNBRUlBZEJCSFlnQmtFQ2RISTZBQTRnQVMwQUVVRmdhaUlHUWQ4QVN3MEFJQVpCa0FscUxRQUFJZ1pCUDBzTkFDQUVJQVpCQW5ZZ0IwRUVkSEk2QUE4Z0FTMEFFa0ZnYWlJSFFkOEFTdzBBSUFkQmtBbHFMUUFBSWdkQlAwc05BQ0FFSUFjZ0JrRUdkSEk2QUJBZ0FTMEFFMEZnYWlJR1FkOEFTdzBBSUFaQmtBbHFMUUFBSWdaQlAwc05BQ0FCTFFBVVFXQnFJZ2RCM3dCTERRQWdCMEdRQ1dvdEFBQWlCMEUvU3cwQUlBUWdCMEVFZGlBR1FRSjBjam9BRVNBQkxRQVZRV0JxSWdaQjN3QkxEUUFnQmtHUUNXb3RBQUFpQmtFL1N3MEFJQVFnQmtFQ2RpQUhRUVIwY2pvQUVpQUJMUUFXUVdCcUlnZEIzd0JMRFFBZ0IwR1FDV290QUFBaUIwRS9TdzBBSUFRZ0J5QUdRUVowY2pvQUV5QUJMUUFYUVdCcUlnWkIzd0JMRFFBZ0JrR1FDV290QUFBaUJrRS9TdzBBSUFFdEFCaEJZR29pQjBIZkFFc05BQ0FIUVpBSmFpMEFBQ0lIUVQ5TERRQWdCQ0FIUVFSMklBWkJBblJ5T2dBVUlBRXRBQmxCWUdvaUJrSGZBRXNOQUNBR1FaQUphaTBBQUNJR1FUOUxEUUFnQkNBR1FRSjJJQWRCQkhSeU9nQVZJQUV0QUJwQllHb2lCMEhmQUVzTkFDQUhRWkFKYWkwQUFDSUhRVDlMRFFBZ0JDQUhJQVpCQm5SeU9nQVdJQUV0QUJ0QllHb2lCa0hmQUVzTkFDQUdRWkFKYWkwQUFDSUdRVDlMRFFBZ0FTMEFIRUZnYWlJSFFkOEFTdzBBSUFkQmtBbHFMUUFBSWdkQlAwc05BRUVCSUFWMElRZ2dCQ0FIUVFSMklBWkJBblJ5T2dBWElBUWdCQ2dDQ0NJRlFSaDBJQVZCZ1A0RGNVRUlkSElnQlVFSWRrR0EvZ054SUFWQkdIWnljaUlKTmdJSUlBUWdCQ2dDRENJRlFSaDBJQVZCZ1A0RGNVRUlkSElnQlVFSWRrR0EvZ054SUFWQkdIWnljaUlLTmdJTUlBUWdCQ2dDRUNJRlFSaDBJQVZCZ1A0RGNVRUlkSElnQlVFSWRrR0EvZ054SUFWQkdIWnljaUlMTmdJUUlBUWdCQ2dDRkNJRlFSaDBJQVZCZ1A0RGNVRUlkSElnQlVFSWRrR0EvZ054SUFWQkdIWnljaUlNTmdJVUlBUkI2QUJxSUFFdEFBSkJud2RxTFFBQUlnMUJBWEZCQW5ScUlRNUJBQ0VHUVFBaEQwRUFJUkFnQUNFRkEwQWdCRUlBTndKb0lBVXRBQUFoQnlBRVFRQTJBbXdnQkNBSE5nSm9JQVFnQlN3QUFDSVJOZ0pzSUFVdEFBQWhFaUFFSUFkQkNIUWlCellDYUNBRUlBY2dCVUVCYWlBQUlCSWJJZ1V0QUFCeUlnYzJBbWdnQkNBUlFRaDBJaEUyQW13Z0JDQVJJQVVzQUFBaUVuSWlFVFlDYkNBRkxRQUFJUk1nQkNBSFFRaDBJZ2MyQW1nZ0JDQUhJQVZCQVdvZ0FDQVRHeUlGTFFBQWNpSUhOZ0pvSUFRZ0VVRUlkQ0lSTmdKc0lBUWdFU0FGTEFBQUloTnlJaEUyQW13Z0JTMEFBQ0VVSUFRZ0IwRUlkQ0lITmdKb0lBUWdCeUFGUVFGcUlBQWdGQnNpQlMwQUFISWlCellDYUNBRUlCRkJDSFFpRVRZQ2JDQUVJQkVnQlN3QUFDSVVjaUlSTmdKc0lBVXRBQUFoRlNBRVFTQnFJQVpxSUE0b0FnQWlGallDQUNBR1FmQXBhaUlYSUJZZ0Z5Z0NBSE0yQWdBZ0VTQUhjeUFQY2lFUElBVkJBV29nQUNBVkd5RUZJQlFnRXlBU2NuSkJnQUZ4SUJCeUlSQWdCa0VFYWlJR1FjZ0FSdzBBQzBFQVFRQW9BdkFwSUJCQkNYUWdEVUVQZEhGQmdJQUVJQTlCLy84RGNTQVBRUkIyY210eGN6WUM4Q2xDQUNFWVFYNGhCa0h3S1NFSEEwQkJBQ2dDckNwQkFDZ0NxQ3BCQUNnQ3BDcEJBQ2dDb0NwQkFDZ0NuQ3BCQUNnQ21DcEJBQ2dDbENwQkFDZ0NrQ3BCQUNnQ2pDcEJBQ2dDaUNwQkFDZ0NoQ3BCQUNnQ2dDcEJBQ2dDL0NsQkFDZ0MrQ2xCQUNnQzlDa2dCRUVJYWlBR1FRSnFJZ1pCQW5GQkFuUnFLUU1BSUJpRkloaENJSWluYzBFQUtBTHdLU0FZcDNNaUFFRVdka0g4QjNGQjhBbHFLQUlBSUFCQkRuWkIvQWR4UWZBUmFpZ0NBR29nQUVFR2RrSDhCM0ZCOEJscUtBSUFjeUFBUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBQnpJZ0JCRm5aQi9BZHhRZkFKYWlnQ0FDQUFRUTUyUWZ3SGNVSHdFV29vQWdCcUlBQkJCblpCL0FkeFFmQVphaWdDQUhNZ0FFSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBQWN5SUFRUloyUWZ3SGNVSHdDV29vQWdBZ0FFRU9ka0g4QjNGQjhCRnFLQUlBYWlBQVFRWjJRZndIY1VId0dXb29BZ0J6SUFCQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQUhNaUFFRVdka0g4QjNGQjhBbHFLQUlBSUFCQkRuWkIvQWR4UWZBUmFpZ0NBR29nQUVFR2RrSDhCM0ZCOEJscUtBSUFjeUFBUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQUJ6SWdCQkZuWkIvQWR4UWZBSmFpZ0NBQ0FBUVE1MlFmd0hjVUh3RVdvb0FnQnFJQUJCQm5aQi9BZHhRZkFaYWlnQ0FITWdBRUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCWE1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUFjeUlBUVJaMlFmd0hjVUh3Q1dvb0FnQWdBRUVPZGtIOEIzRkI4QkZxS0FJQWFpQUFRUVoyUWZ3SGNVSHdHV29vQWdCeklBQkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0FITWlBRUVXZGtIOEIzRkI4QWxxS0FJQUlBQkJEblpCL0FkeFFmQVJhaWdDQUdvZ0FFRUdka0g4QjNGQjhCbHFLQUlBY3lBQVFmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFCeklnQkJGblpCL0FkeFFmQUphaWdDQUNBQVFRNTJRZndIY1VId0VXb29BZ0JxSUFCQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQUVIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVSC9BWEZCQW5SQjhDRnFLQUlBSVE4Z0JVRUdka0g4QjNGQjhCbHFLQUlBSVJBZ0JVRVdka0g4QjNGQjhBbHFLQUlBSVJFZ0JVRU9ka0g4QjNGQjhCRnFLQUlBSVJKQkFDZ0NzQ29oRTBFQVFRQW9BclFxSUFWek5nS0Fxd0ZCQUNBVElBOGdFQ0FSSUJKcWMycHpJQUJ6TmdLRXF3RWdCMEVBS1FPQXF3RWlHRGNDQUNBSFFRaHFJUWNnQmtFUVNRMEFDeUFZUWlDSXB5RUZJQmluSVFaQjhBa2hBQU5BUVFBb0Fxd3FRUUFvQXFncVFRQW9BcVFxUVFBb0FxQXFRUUFvQXB3cVFRQW9BcGdxUVFBb0FwUXFRUUFvQXBBcVFRQW9Bb3dxUVFBb0FvZ3FRUUFvQW9RcVFRQW9Bb0FxUVFBb0F2d3BRUUFvQXZncElBVkJBQ2dDOUNseklBWkJBQ2dDOENseklBdHpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0RITWlCa0VXZGtIOEIzRkI4QWxxS0FJQUlBWkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JrRUdka0g4QjNGQjhCbHFLQUlBY3lBR1FmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFaeklnWkJGblpCL0FkeFFmQUphaWdDQUNBR1FRNTJRZndIY1VId0VXb29BZ0JxSUFaQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQmtIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFHY3lJR1FSWjJRZndIY1VId0NXb29BZ0FnQmtFT2RrSDhCM0ZCOEJGcUtBSUFhaUFHUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVpCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCbk1pQmtFV2RrSDhCM0ZCOEFscUtBSUFJQVpCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCa0VHZGtIOEIzRkI4QmxxS0FJQWN5QUdRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBWnpJZ1pCRm5aQi9BZHhRZkFKYWlnQ0FDQUdRUTUyUWZ3SGNVSHdFV29vQWdCcUlBWkJCblpCL0FkeFFmQVphaWdDQUhNZ0JrSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBR2N5SUdRUloyUWZ3SGNVSHdDV29vQWdBZ0JrRU9ka0g4QjNGQjhCRnFLQUlBYWlBR1FRWjJRZndIY1VId0dXb29BZ0J6SUFaQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQm5NaUJrRVdka0g4QjNGQjhBbHFLQUlBSUFaQkRuWkIvQWR4UWZBUmFpZ0NBR29nQmtFR2RrSDhCM0ZCOEJscUtBSUFjeUFHUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVp6SWdaQi93RnhRUUowUWZBaGFpZ0NBQ0VISUFaQkJuWkIvQWR4UWZBWmFpZ0NBQ0VQSUFaQkZuWkIvQWR4UWZBSmFpZ0NBQ0VRSUFaQkRuWkIvQWR4UWZBUmFpZ0NBQ0VSUVFBb0FyQXFJUklnQUVFQUtBSzBLaUFHY3lJR05nSUFJQUJCQkdvZ0VpQUhJQThnRUNBUmFuTnFjeUFGY3lJSE5nSUFRUUFvQXF3cVFRQW9BcWdxUVFBb0FxUXFRUUFvQXFBcVFRQW9BcHdxUVFBb0FwZ3FRUUFvQXBRcVFRQW9BcEFxUVFBb0Fvd3FRUUFvQW9ncVFRQW9Bb1FxUVFBb0FvQXFRUUFvQXZ3cFFRQW9BdmdwUVFBb0F2UXBJQWxCQUNnQzhDbHpJQVp6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdDbk1nQjNNaUJrRVdka0g4QjNGQjhBbHFLQUlBSUFaQkRuWkIvQWR4UWZBUmFpZ0NBR29nQmtFR2RrSDhCM0ZCOEJscUtBSUFjeUFHUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVp6SWdaQkZuWkIvQWR4UWZBSmFpZ0NBQ0FHUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVpCQm5aQi9BZHhRZkFaYWlnQ0FITWdCa0gvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCWE1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUdjeUlHUVJaMlFmd0hjVUh3Q1dvb0FnQWdCa0VPZGtIOEIzRkI4QkZxS0FJQWFpQUdRUVoyUWZ3SGNVSHdHV29vQWdCeklBWkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JuTWlCa0VXZGtIOEIzRkI4QWxxS0FJQUlBWkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JrRUdka0g4QjNGQjhCbHFLQUlBY3lBR1FmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFaeklnWkJGblpCL0FkeFFmQUphaWdDQUNBR1FRNTJRZndIY1VId0VXb29BZ0JxSUFaQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQmtIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFHY3lJR1FSWjJRZndIY1VId0NXb29BZ0FnQmtFT2RrSDhCM0ZCOEJGcUtBSUFhaUFHUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVpCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCbk1pQmtFV2RrSDhCM0ZCOEFscUtBSUFJQVpCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCa0VHZGtIOEIzRkI4QmxxS0FJQWN5QUdRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBWnpJZ1pCL3dGeFFRSjBRZkFoYWlnQ0FDRUhJQVpCQm5aQi9BZHhRZkFaYWlnQ0FDRVBJQVpCRm5aQi9BZHhRZkFKYWlnQ0FDRVFJQVpCRG5aQi9BZHhRZkFSYWlnQ0FDRVJRUUFvQXJBcUlSSWdBRUVJYWtFQUtBSzBLaUFHY3lJR05nSUFJQUJCREdvZ0VpQUhJQThnRUNBUmFuTnFjeUFGY3lJRk5nSUFJQUJCRUdvaUFFSHNLVWtOQUF0QkFDQUZOZ0tFcXdGQkFDQUdOZ0tBcXdFZ0JDZ0NaQ0VVSUFRb0FtQWhGU0FFS0FKY0lSWWdCQ2dDV0NFWElBUW9BbFFoQ1NBRUtBSlFJUW9nQkNnQ1RDRUxJQVFvQWtnaERDQUVLQUpFSVE0Z0JDZ0NRQ0VOSUFRb0Fqd2hHU0FFS0FJNElSb2dCQ2dDTkNFYklBUW9BakFoSENBRUtBSXNJUjBnQkNnQ0tDRWVJQVFvQWlRaEh5QUVLQUlnSVNBZ0JDa0RFQ0VoSUFRcEF3Z2hHQU5BUVFCQkFDZ0M4Q2tnSUhNMkF2QXBRUUJCQUNnQzlDa2dIM00yQXZRcFFRQkJBQ2dDK0NrZ0huTTJBdmdwUVFCQkFDZ0MvQ2tnSFhNMkF2d3BRUUJCQUNnQ2dDb2dISE0yQW9BcVFRQkJBQ2dDaENvZ0czTTJBb1FxUVFCQkFDZ0NpQ29nR25NMkFvZ3FRUUJCQUNnQ2pDb2dHWE0yQW93cVFRQkJBQ2dDa0NvZ0RYTTJBcEFxUVFCQkFDZ0NsQ29nRG5NMkFwUXFRUUJCQUNnQ21Db2dESE0yQXBncVFRQkJBQ2dDbkNvZ0MzTTJBcHdxUVFCQkFDZ0NvQ29nQ25NMkFxQXFRUUJCQUNnQ3BDb2dDWE0yQXFRcVFRQkJBQ2dDcUNvZ0YzTTJBcWdxUVFCQkFDZ0NyQ29nRm5NMkFxd3FRUUJCQUNnQ3NDb2dGWE0yQXJBcVFRQkJBQ2dDdENvZ0ZITTJBclFxUVFFaEV3TkFRUUFoQUVFQVFnQTNBNENyQVVId0tTRUdRUUFoQlFOQVFRQW9BcXdxUVFBb0FxZ3FRUUFvQXFRcVFRQW9BcUFxUVFBb0Fwd3FRUUFvQXBncVFRQW9BcFFxUVFBb0FwQXFRUUFvQW93cVFRQW9Bb2dxUVFBb0FvUXFRUUFvQW9BcVFRQW9BdndwUVFBb0F2Z3BRUUFvQXZRcElBQnpRUUFvQXZBcElBVnpJZ0JCRm5aQi9BZHhRZkFKYWlnQ0FDQUFRUTUyUWZ3SGNVSHdFV29vQWdCcUlBQkJCblpCL0FkeFFmQVphaWdDQUhNZ0FFSC9BWEZCQW5SQjhDRnFLQUlBYW5NaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFBY3lJQVFSWjJRZndIY1VId0NXb29BZ0FnQUVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFBUVFaMlFmd0hjVUh3R1dvb0FnQnpJQUJCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdBSE1pQUVFV2RrSDhCM0ZCOEFscUtBSUFJQUJCRG5aQi9BZHhRZkFSYWlnQ0FHb2dBRUVHZGtIOEIzRkI4QmxxS0FJQWN5QUFRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBQnpJZ0JCRm5aQi9BZHhRZkFKYWlnQ0FDQUFRUTUyUWZ3SGNVSHdFV29vQWdCcUlBQkJCblpCL0FkeFFmQVphaWdDQUhNZ0FFSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBQWN5SUFRUloyUWZ3SGNVSHdDV29vQWdBZ0FFRU9ka0g4QjNGQjhCRnFLQUlBYWlBQVFRWjJRZndIY1VId0dXb29BZ0J6SUFCQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQUhNaUFFRVdka0g4QjNGQjhBbHFLQUlBSUFCQkRuWkIvQWR4UWZBUmFpZ0NBR29nQUVFR2RrSDhCM0ZCOEJscUtBSUFjeUFBUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQUJ6SWdCQkZuWkIvQWR4UWZBSmFpZ0NBQ0FBUVE1MlFmd0hjVUh3RVdvb0FnQnFJQUJCQm5aQi9BZHhRZkFaYWlnQ0FITWdBRUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCWE1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUFjeUlBUVJaMlFmd0hjVUh3Q1dvb0FnQWdBRUVPZGtIOEIzRkI4QkZxS0FJQWFpQUFRUVoyUWZ3SGNVSHdHV29vQWdCeklBQkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCL3dGeFFRSjBRZkFoYWlnQ0FDRUhJQVZCQm5aQi9BZHhRZkFaYWlnQ0FDRVBJQVZCRm5aQi9BZHhRZkFKYWlnQ0FDRVFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FDRVJRUUFvQXJBcUlSSWdCa0VBS0FLMEtpQUZjeUlGTmdJQUlBWkJCR29nRWlBSElBOGdFQ0FSYW5OcWN5QUFjeUlBTmdJQUlBWkJDR29pQmtHNEtra05BQXRCOEFraEJnTkFRUUFvQXF3cVFRQW9BcWdxUVFBb0FxUXFRUUFvQXFBcVFRQW9BcHdxUVFBb0FwZ3FRUUFvQXBRcVFRQW9BcEFxUVFBb0Fvd3FRUUFvQW9ncVFRQW9Bb1FxUVFBb0FvQXFRUUFvQXZ3cFFRQW9BdmdwUVFBb0F2UXBJQUJ6UVFBb0F2QXBJQVZ6SWdCQkZuWkIvQWR4UWZBSmFpZ0NBQ0FBUVE1MlFmd0hjVUh3RVdvb0FnQnFJQUJCQm5aQi9BZHhRZkFaYWlnQ0FITWdBRUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBQWN5SUFRUloyUWZ3SGNVSHdDV29vQWdBZ0FFRU9ka0g4QjNGQjhCRnFLQUlBYWlBQVFRWjJRZndIY1VId0dXb29BZ0J6SUFCQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQUhNaUFFRVdka0g4QjNGQjhBbHFLQUlBSUFCQkRuWkIvQWR4UWZBUmFpZ0NBR29nQUVFR2RrSDhCM0ZCOEJscUtBSUFjeUFBUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQUJ6SWdCQkZuWkIvQWR4UWZBSmFpZ0NBQ0FBUVE1MlFmd0hjVUh3RVdvb0FnQnFJQUJCQm5aQi9BZHhRZkFaYWlnQ0FITWdBRUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdCWE1pQlVFV2RrSDhCM0ZCOEFscUtBSUFJQVZCRG5aQi9BZHhRZkFSYWlnQ0FHb2dCVUVHZGtIOEIzRkI4QmxxS0FJQWN5QUZRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUFjeUlBUVJaMlFmd0hjVUh3Q1dvb0FnQWdBRUVPZGtIOEIzRkI4QkZxS0FJQWFpQUFRUVoyUWZ3SGNVSHdHV29vQWdCeklBQkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBVnpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0FITWlBRUVXZGtIOEIzRkI4QWxxS0FJQUlBQkJEblpCL0FkeFFmQVJhaWdDQUdvZ0FFRUdka0g4QjNGQjhCbHFLQUlBY3lBQVFmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFCeklnQkJGblpCL0FkeFFmQUphaWdDQUNBQVFRNTJRZndIY1VId0VXb29BZ0JxSUFCQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQUVIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFBY3lJQVFSWjJRZndIY1VId0NXb29BZ0FnQUVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFBUVFaMlFmd0hjVUh3R1dvb0FnQnpJQUJCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQi93RnhRUUowUWZBaGFpZ0NBQ0VISUFWQkJuWkIvQWR4UWZBWmFpZ0NBQ0VQSUFWQkZuWkIvQWR4UWZBSmFpZ0NBQ0VRSUFWQkRuWkIvQWR4UWZBUmFpZ0NBQ0VSUVFBb0FyQXFJUklnQmtFQUtBSzBLaUFGY3lJRk5nSUFJQVpCQkdvZ0VpQUhJQThnRUNBUmFuTnFjeUFBY3lJQU5nSUFJQVpCQ0dvaUJrSHNLVWtOQUF0QkFDQUFOZ0tFcXdGQkFDQUZOZ0tBcXdFQ1FDQVRRUUZ4UlEwQVFRQWhFMEVBUVFBcEF2QXBJQmlGTndMd0tVRUFRUUFwQXZncElDR0ZOd0w0S1VFQVFRQXBBb0FxSUJpRk53S0FLa0VBUVFBcEFvZ3FJQ0dGTndLSUtrRUFRUUFwQXBBcUlCaUZOd0tRS2tFQVFRQXBBcGdxSUNHRk53S1lLa0VBUVFBcEFxQXFJQmlGTndLZ0trRUFRUUFwQXFncUlDR0ZOd0tvS2tFQVFRQXBBckFxSUJpRk53S3dLZ3dCQ3dzZ0NFRi9haUlJRFFBTFFRQW9BclFxSVE5QkFDZ0NzQ29oRUVFQUtBS3NLaUVSUVFBb0FxZ3FJUkpCQUNnQ3BDb2hFMEVBS0FLZ0tpRUlRUUFvQXB3cUlSUkJBQ2dDbUNvaEZVRUFLQUtVS2lFV1FRQW9BcEFxSVJkQkFDZ0NqQ29oQ1VFQUtBS0lLaUVLUVFBb0FvUXFJUXRCQUNnQ2dDb2hERUVBS0FMOEtTRU9RUUFvQXZncElRMUJBQ2dDOUNraEdVRUFLQUx3S1NFYVFRQWhHd05BSUJ0QkFuUWlIRUdnQ0dvcEF3QWlHS2NoQUNBWVFpQ0lweUVHUVVBaEJ3TkFJQkFnRVNBU0lCTWdDQ0FVSUJVZ0ZpQVhJQWtnQ2lBTElBd2dEaUFOSUFZZ0dYTWdBQ0FhY3lJQVFSWjJRZndIY1VId0NXb29BZ0FnQUVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFBUVFaMlFmd0hjVUh3R1dvb0FnQnpJQUJCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJZ1ZCRm5aQi9BZHhRZkFKYWlnQ0FDQUZRUTUyUWZ3SGNVSHdFV29vQWdCcUlBVkJCblpCL0FkeFFmQVphaWdDQUhNZ0JVSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0FITWlBRUVXZGtIOEIzRkI4QWxxS0FJQUlBQkJEblpCL0FkeFFmQVJhaWdDQUdvZ0FFRUdka0g4QjNGQjhCbHFLQUlBY3lBQVFmOEJjVUVDZEVId0lXb29BZ0JxY3lBRmN5SUZRUloyUWZ3SGNVSHdDV29vQWdBZ0JVRU9ka0g4QjNGQjhCRnFLQUlBYWlBRlFRWjJRZndIY1VId0dXb29BZ0J6SUFWQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFCeklnQkJGblpCL0FkeFFmQUphaWdDQUNBQVFRNTJRZndIY1VId0VXb29BZ0JxSUFCQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQUVIL0FYRkJBblJCOENGcUtBSUFhbk1nQlhNaUJVRVdka0g4QjNGQjhBbHFLQUlBSUFWQkRuWkIvQWR4UWZBUmFpZ0NBR29nQlVFR2RrSDhCM0ZCOEJscUtBSUFjeUFGUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFBY3lJQVFSWjJRZndIY1VId0NXb29BZ0FnQUVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFBUVFaMlFmd0hjVUh3R1dvb0FnQnpJQUJCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQVZ6SWdWQkZuWkIvQWR4UWZBSmFpZ0NBQ0FGUVE1MlFmd0hjVUh3RVdvb0FnQnFJQVZCQm5aQi9BZHhRZkFaYWlnQ0FITWdCVUgvQVhGQkFuUkI4Q0ZxS0FJQWFuTWdBSE1pQUVFV2RrSDhCM0ZCOEFscUtBSUFJQUJCRG5aQi9BZHhRZkFSYWlnQ0FHb2dBRUVHZGtIOEIzRkI4QmxxS0FJQWN5QUFRZjhCY1VFQ2RFSHdJV29vQWdCcWN5QUZjeUlGUVJaMlFmd0hjVUh3Q1dvb0FnQWdCVUVPZGtIOEIzRkI4QkZxS0FJQWFpQUZRUVoyUWZ3SGNVSHdHV29vQWdCeklBVkIvd0Z4UVFKMFFmQWhhaWdDQUdweklBQnpJZ0JCRm5aQi9BZHhRZkFKYWlnQ0FDQUFRUTUyUWZ3SGNVSHdFV29vQWdCcUlBQkJCblpCL0FkeFFmQVphaWdDQUhNZ0FFSC9BWEZCQW5SQjhDRnFLQUlBYW5NZ0JYTWlCVUVXZGtIOEIzRkI4QWxxS0FJQUlBVkJEblpCL0FkeFFmQVJhaWdDQUdvZ0JVRUdka0g4QjNGQjhCbHFLQUlBY3lBRlFmOEJjVUVDZEVId0lXb29BZ0JxY3lBQWN5SUFRUloyUWZ3SGNVSHdDV29vQWdBZ0FFRU9ka0g4QjNGQjhCRnFLQUlBYWlBQVFRWjJRZndIY1VId0dXb29BZ0J6SUFCQi93RnhRUUowUWZBaGFpZ0NBR3B6SUFWeklnVkJGblpCL0FkeFFmQUphaWdDQUNBRlFRNTJRZndIY1VId0VXb29BZ0JxSUFWQkJuWkIvQWR4UWZBWmFpZ0NBSE1nQlVIL0FYRkJBblJCOENGcUtBSUFhbk1nQUhNaUFFRVdka0g4QjNGQjhBbHFLQUlBSUFCQkRuWkIvQWR4UWZBUmFpZ0NBR29nQUVFR2RrSDhCM0ZCOEJscUtBSUFjeUFBUWY4QmNVRUNkRUh3SVdvb0FnQnFjeUFGY3lJRlFSWjJRZndIY1VId0NXb29BZ0FnQlVFT2RrSDhCM0ZCOEJGcUtBSUFhaUFGUVFaMlFmd0hjVUh3R1dvb0FnQnpJQVZCL3dGeFFRSjBRZkFoYWlnQ0FHcHpJQUJ6SVFZZ0JTQVBjeUVBSUFkQkFXb2lCdzBBQzBFQUlBWTJBb1NyQVVFQUlBQTJBb0NyQVNBRVFRaHFJQnhxUVFBcEE0Q3JBVGNEQUNBYlFRUkpJUUFnRzBFQ2FpRWJJQUFOQUFzZ0FpQUJLQUlBTmdJQUlBSWdBU2dDQkRZQ0JDQUNJQUVvQWdnMkFnZ2dBaUFCS0FJTU5nSU1JQUlnQVNnQ0VEWUNFQ0FDSUFFb0FoUTJBaFFnQWlBQktBSVlOZ0lZSUFJZ0FTd0FIRUh3Q0dvdEFBQkJNSEZCd0FocUxRQUFPZ0FjSUFRZ0JDZ0NDQ0lCUVJoMElBRkJnUDREY1VFSWRISWdBVUVJZGtHQS9nTnhJQUZCR0haeWNpSUhOZ0lJSUFRZ0JDZ0NEQ0lCUVJoMElBRkJnUDREY1VFSWRISWdBVUVJZGtHQS9nTnhJQUZCR0haeWNpSUJOZ0lNSUFRZ0JDZ0NFQ0lBUVJoMElBQkJnUDREY1VFSWRISWdBRUVJZGtHQS9nTnhJQUJCR0haeWNpSUFOZ0lRSUFRZ0JDZ0NGQ0lGUVJoMElBVkJnUDREY1VFSWRISWdCVUVJZGtHQS9nTnhJQVZCR0haeWNpSUZOZ0lVSUFRZ0JDZ0NHQ0lHUVJoMElBWkJnUDREY1VFSWRISWdCa0VJZGtHQS9nTnhJQVpCR0haeWNpSUdOZ0lZSUFRZ0JDZ0NIQ0lQUVJoMElBOUJnUDREY1VFSWRISWdEMEVJZGtHQS9nTnhJQTlCR0haeWNpSVBOZ0ljQWtBQ1FDQUREUUFnQWlBRUtRTUlOd01BSUFJZ0JDa0RFRGNEQ0NBQ0lBUXBBeGczQXhBTUFRc2dBaUFQUVQ5eFFjQUlhaTBBQURvQU9DQUNJQVZCR25aQndBaHFMUUFBT2dBeElBSWdBRUUvY1VIQUNHb3RBQUE2QUNnZ0FpQUhRUnAyUWNBSWFpMEFBRG9BSVNBQ0lBUXRBQWdpQkVFQ2RrSEFDR290QUFBNkFCMGdBaUFQUVE1MlFUeHhRY0FJYWkwQUFEb0FPeUFDSUE5QkNuWkJQM0ZCd0FocUxRQUFPZ0E1SUFJZ0JrRVNka0UvY1VIQUNHb3RBQUE2QURVZ0FpQUdRUWgyUVQ5eFFjQUlhaTBBQURvQU5DQUNJQVZCRUhaQlAzRkJ3QWhxTFFBQU9nQXdJQUlnQlVIOEFYRkJBblpCd0FocUxRQUFPZ0F0SUFJZ0FFRVlka0UvY1VIQUNHb3RBQUE2QUN3Z0FpQUFRUXAyUVQ5eFFjQUlhaTBBQURvQUtTQUNJQUZCRW5aQlAzRkJ3QWhxTFFBQU9nQWxJQUlnQVVFSWRrRS9jVUhBQ0dvdEFBQTZBQ1FnQWlBSFFSQjJRVDl4UWNBSWFpMEFBRG9BSUNBQ0lBOUJGSFpCRDNFZ0QwRUVka0V3Y1hKQndBaHFMUUFBT2dBNklBSWdEMEVHZGtFRGNTQUdRUloyUVR4eGNrSEFDR290QUFBNkFEY2dBaUFHUVF4MlFUQnhJQVpCSEhaeVFjQUlhaTBBQURvQU5pQUNJQVpCQW5SQlBIRWdCa0VPZGtFRGNYSkJ3QWhxTFFBQU9nQXpJQUlnQmtId0FYRkJCSFlnQlVFVWRrRXdjWEpCd0FocUxRQUFPZ0F5SUFJZ0JVRVdka0VEY1NBRlFRWjJRVHh4Y2tIQUNHb3RBQUE2QUM4Z0FpQUZRUVIwUVRCeElBVkJESFpCRDNGeVFjQUlhaTBBQURvQUxpQUNJQUJCRG5aQlBIRWdBRUVlZG5KQndBaHFMUUFBT2dBcklBSWdBRUVVZGtFUGNTQUFRUVIyUVRCeGNrSEFDR290QUFBNkFDb2dBaUFBUVFaMlFRTnhJQUZCRm5aQlBIRnlRY0FJYWkwQUFEb0FKeUFDSUFGQkRIWkJNSEVnQVVFY2RuSkJ3QWhxTFFBQU9nQW1JQUlnQVVFQ2RFRThjU0FCUVE1MlFRTnhja0hBQ0dvdEFBQTZBQ01nQWlBQlFmQUJjVUVFZGlBSFFSUjJRVEJ4Y2tIQUNHb3RBQUE2QUNJZ0FpQUhRUloyUVFOeElBZEJCblpCUEhGeVFjQUlhaTBBQURvQUh5QUNJQVJCQkhSQk1IRWdCMEVNZGtFUGNYSkJ3QWhxTFFBQU9nQWVDeUFDUVFBNkFEd0xDNFlHQVFaL0l3QkI0QUJySWdNa0FFRUFJUVFnQUVHUUsycEJBRG9BQUNBRFFTUTZBRVlnQXlBQlFRcHVJZ0JCTUdvNkFFUWdBMEdrNUlTakFqWUNRQ0FESUFCQjlnRnNJQUZxUVRCeU9nQkZJQU5CQUMwQWdDc2lBVUVDZGtIQUNHb3RBQUE2QUVjZ0EwRUFMUUNDS3lJQVFUOXhRY0FJYWkwQUFEb0FTaUFEUVFBdEFJTXJJZ1ZCQW5aQndBaHFMUUFBT2dCTElBTkJBQzBBaFNzaUJrRS9jVUhBQ0dvdEFBQTZBRTRnQTBFQUxRQ0JLeUlIUVFSMklBRkJCSFJCTUhGeVFjQUlhaTBBQURvQVNDQURJQUJCQm5ZZ0IwRUNkRUU4Y1hKQndBaHFMUUFBT2dCSklBTkJBQzBBaENzaUFVRUVkaUFGUVFSMFFUQnhja0hBQ0dvdEFBQTZBRXdnQXlBR1FRWjJJQUZCQW5SQlBIRnlRY0FJYWkwQUFEb0FUU0FEUVFBdEFJWXJJZ0ZCQW5aQndBaHFMUUFBT2dCUElBTkJBQzBBaUNzaUFFRS9jVUhBQ0dvdEFBQTZBRklnQTBFQUxRQ0pLeUlGUVFKMlFjQUlhaTBBQURvQVV5QURRUUF0QUlzcklnWkJQM0ZCd0FocUxRQUFPZ0JXSUFOQkFDMEFqQ3NpQjBFQ2RrSEFDR290QUFBNkFGY2dBMEVBTFFDSEt5SUlRUVIySUFGQkJIUkJNSEZ5UWNBSWFpMEFBRG9BVUNBRElBQkJCbllnQ0VFQ2RFRThjWEpCd0FocUxRQUFPZ0JSSUFOQkFDMEFpaXNpQVVFRWRpQUZRUVIwUVRCeGNrSEFDR290QUFBNkFGUWdBeUFHUVFaMklBRkJBblJCUEhGeVFjQUlhaTBBQURvQVZTQURRUUF0QUkwcklnRkJCSFlnQjBFRWRFRXdjWEpCd0FocUxRQUFPZ0JZSUFOQkFEb0FYU0FEUVFBdEFJNHJJZ0JCUDNGQndBaHFMUUFBT2dCYUlBTkJBQzBBanlzaUJVRUNka0hBQ0dvdEFBQTZBRnNnQXlBQVFRWjJJQUZCQW5SQlBIRnlRY0FJYWkwQUFEb0FXU0FESUFWQkJIUkJNSEZCd0FocUxRQUFPZ0JjUVpBcklBTkJ3QUJxSUFNZ0FoQUJBMEFnQkVHQUsyb2dBeUFFYWlJQkxRQUFPZ0FBSUFSQmdTdHFJQUZCQVdvdEFBQTZBQUFnQkVHQ0syb2dBVUVDYWkwQUFEb0FBQ0FFUVlNcmFpQUJRUU5xTFFBQU9nQUFJQVJCaEN0cUlBRkJCR290QUFBNkFBQWdCRUVGYWlJRVFUeEhEUUFMSUFOQjRBQnFKQUFMaHdFQ0FYOElmaU1BUWNBQWF5SUJKQUFnQUVHOEsycEJBRG9BQUVHOEswR0FLeUFCUVFFUUFVRUFLUU9rS3lFQ0lBRXBBeVFoQTBFQUtRT2NLeUVFSUFFcEF4d2hCVUVBS1FPc0t5RUdJQUVwQXl3aEIwRUFLUU8wS3lFSUlBRXBBelFoQ1NBQlFjQUFhaVFBSUFVZ0JGSWdBeUFDVW1vZ0J5QUdVbXBCZjBFQUlBa2dDRkliUmdzTHh5SUNBRUdBQ0F2d0FRSUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFRQUFBQUFBQUFBYUhCeVQwSnVZV1ZzYjJobFUzSmxaRVI1Y21OMFluVnZBQUFBQUFBQUFBQXVMMEZDUTBSRlJrZElTVXBMVEUxT1QxQlJVbE5VVlZaWFdGbGFZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYb3dNVEl6TkRVMk56ZzVBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFRRUJBUUVCQVFFQkFRRUJBQUFFMk56ZzVPanM4UFQ0L1FFQkFRRUJBUUFJREJBVUdCd2dKQ2dzTURRNFBFQkVTRXhRVkZoY1lHUm9iUUVCQVFFQkFIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVkFRRUJBUUFCQjhBa0x5Q0NtQ3pIUnJMWGZtTnR5L1MrMzN4clE3YS9odUpaK0ptcEZrSHk2bVg4czhVZVpvU1QzYkpHejR2SUJDQmI4am9YWUlHbGphVTVYY2FQK1dLUitQWlAwajNTVkRWaTJqbkpZell0eDdrb1ZnaDJrVkh1MVdWckNPZFV3bkJOZzhpb2pzTkhGOElWZ0tCaDVRY3J2T051NHNOeDVqZzRZT21DTERwNXNQb29lc01GM0ZkY25Tekc5MmkrdmVHQmNZRlh6SlZYbWxLdFZxbUtZU0ZkQUZPaGpham5LVmJZUXF5bzBYTXkwenVoQkVhK0dWS0dUNlhKOEVSVHVzeXE4YjJOZHhha3I5akVZZEJZK1hNNGVrNGViTTdyV3IxelBKR3lCVXpKNmQ0YVZLSmhJanp1dnVVdHJHK2kveEpNaEtHYk1DZGhoa2FraCsyQ3NmRWd5Z094ZFhWMkU3N0YxaGVrQ0l5YmNpQnRsNjRFK2lTUEZySmJUODI5dER6bEM5SU9DUkFzdUJDQ0VwRXJ3eUdsZW14K2VRbWpHSVpwczZmWmhuQXhuOElqVHE5S2dVV3BvTDFUWUtLY1BscU16VWF0c0MrOXU1RHQ2RTFEd083cVlLdnQrSFdYeG9YWUJyemsrV2NwbWlBNURnaG1HN295MG4yOUZ3NldFZmI1ZWl6dllkVy9nY3lEQmhaOUVHa0NtYXNGV1lxclRUZ1ozUHpaeTMvNGJQUUtiUWlUWDBEZElFZ3JRMCtvUDI1dkE4VW5KY2xNSGV4dVpnTmg1MUNYMzN1ajJHbEQrNHp0TWViYTk0R3lYdWdiQUJMWlBxY0hFWUo5QXdwNWNYbU1rYWhtdmIvdG90Vk5zUHV1eU9STnY3Rkk3SDFIOGJTeVZNSnRFUllITUNiMWVyd1RRNDc3OVNqUGVCeWdQWnJOTExobFhxTXZBRDNUSVJUbGZDOUxiKzlPNXZjQjVWUW95WUJyR0FLSFdlWElzUVA0bG4yZk1veC83K09tbGp2Z2lNdHZmRm5VOEZXdGgvY2dlVUMrclVnV3QrclU5TW1DSEkvMUllekZUZ3Q4QVBydFhYSjZnakcvS0xsYUhHdHRwRjkvMnFFTFZ3LzkrS01ZeVo2eHpWVStNc0NkYmFjaFl5cnRkby8vaG9CSHd1Smc5K2hDNGd5SDliTFg4U2x2VDBTMTU1Rk9hWlVYNHRyeEpqdEtRbC90TDJ2TGQ0VE4reTZSQkUvdGk2TWJrenRyS0lPOEJUSGMyL3A1KzBMUWY4U3ROMnR1Vm1KR1FybkdPcmVxZzFaTnIwTkdPME9BbHg2OHZXenlPdDVSMWp2dmk5bzlrS3hMeUVyaUlpQnp3RFpDZ1hxMVBITU9QYUpIeHo5R3R3YWl6R0NJdkwzY1hEcjcrTFhYcW9SOENpdy9Nb09Yb2RHKzExdk9zR0puaWljN2dUNmkwdCtBVC9ZRTd4SHpacUszU1pxSmZGZ1YzbFlBVWM4eVRkeFFhSVdVZ3JlYUcrclYzOVVKVXg4ODFuZnNNcjgzcm9JaytlOU1iUWRaSmZoNnVMUTRsQUY2emNTQzdBR2dpcitDNFY1czJaQ1FldVFud0haRmpWYXFtMzFtSlE4RjRmMU5hMmFKYmZTREZ1ZVVDZGdNbWc2blBsV0pvR2NnUlFVcHpUc290UjdOS3FSUjdVZ0JSR3hVcFU1by9Wdy9XNU1hYnZIYWtZQ3NBZE9hQnRXKzZDQi9wRzFkcjdKYnlGZGtOS2lGbFk3YTIrYm5uTGdVMC8yUldoY1ZkTGJCVG9ZK2ZxWmxIdWdocUI0VnU2WEI2UzBRcHM3VXVDWFhiSXlZWnhMQ21icTE5MzZkSnVHRHVuR2F5N1k5eGpLcnMveGVhYVd4U1pGYmhuckhDcFFJMkdTbE1DWFZBRTFtZ1Bqb1k1SnFZVkQ5bG5VSmIxdVNQYTlZLzk1a0huTktoOVREbzcrWTRMVTNCWFNYd2hpRGRUQ2JyY0lURzZZSmpYc3dlQWo5cmFBbko3N28rRkJpWFBLRndhbXVFTlg5b2h1S2dVZ1ZUbkxjM0IxQ3FISVFIUGx5dTNuL3NSSDJPdVBJV1Z6ZmFPckFOREZEd0JCOGM4UCt6QUFJYTlReXVzblMxUEZoNmd5VzlJUW5jK1JPUjBmWXZxWHh6UnpLVUFVZjFJb0hsNVRyYzJzSTNOSGExeUtmZDg1cEdZVVNwRGdQUUR6N0h5T3hCSG5Xa21jMDQ0aThPNmp1aHU0QXlNYk0rR0RpTFZFNEl1VzFQQXcxQ2I3OEVDdmFRRXJnc2VYeVhKSEt3ZVZhdmlhKzhIM2VhM2hBSWs5a1Nyb3V6TGovUDNCOXlFbFVrY1dzdTV0MGFVSWZOaEo4WVIxaDZGOW9JZEx5YW43eU1mVXZwT3V4NjdQb2RoZHRtUXdsajBzTmt4RWNZSE84STJSVXlOenREM1JhNndpUkRUYUVTVWNSbEtnSUFsRkRkNURvVG52amZjVlZPTVJEV2Q2eUJteGtSWC9GV05RUnJ4NlBYT3hnUlBBbWxKRm50NW8veSt2dnhseXkvdXA1dVBCVWVjRVhqaHJGdjZlb0tYZzZHc3lvK1doem5IM2Y2QmoxT3VkeGxLUThkNTVuV2lUNkFKY2htVW5qSlRDNXFzeENjdWc0VnhuanE0cFJUUFB5bDlDMEtIcWRPOS9JOUt4MDJEeVk1R1dCNXdoa0lweU5TdGhJVDkyNytyZXRtSDhQcWxVVzg0NFBJZTZiUk4zK3hLUCtNQWUvZE1zT2xXbXkraFNGWVpRS1lxMmdQcGM3dU81VXYyNjE5N3lxRUwyNWJLTFloRlhCaEJ5bDFSOTNzRUJXZllUQ296Qk9XdldIckh2NDBBODlqQTZxUVhITzFPYUp3VEF1ZW50VVUzcXJMdkliTTdxY3NZbUNyWEt1Y2JvVHpzcThlaTJUSzhMMFp1V2tqb0ZDN1dtVXlXbWhBczdRcVBOWHBuakgzdUNIQUdRdFVtNW1nWDRkK21mZVZxSDA5WXBxSU4vaDNMZU9YWDVQdEVZRVNhQllwaURVTzFoL214NkhmM3BhWnVsaDRwWVQxVjJOeUlodi93NE9ibGtiQ0d1c0tzODFVTUM1VDVFalpqeWd4dkczdjh1dFk2di9HTkdIdEtQNXpQSHp1MlJSS1hlTzNaT2dVWFJCQzRCTStJTGJpN2tYcXE2cWpGVTlzMjlCUHkvcEM5RUxIdGJ0cTd4MDdUMlVGSWMxQm5ua2UyTWROaFlacVIwdmtVR0tCUGZLaFlzOUdKbzFib0lPSS9LTzJ4OEhESkJWL2tuVExhUXVLaEVlRnNwSldBTDliQ1oxSUdhMTBzV0lVQUE2Q0l5cU5RbGpxOVZVTVB2U3RIV0Z3UHlPUzhISXpRWDZUamZIc1g5YmJPeUpzV1RmZWZHQjA3c3VuOG9WQWJqSjN6b1NBQjZhZVVQZ1pWZGp2NkRXWDJXR3FwMm1wd2dZTXhmeXJCRnJjeWd1QUxucEVub1EwUmNNRlo5WDl5WjRlRHRQYmM5dk5pRlVRZWRwZlowQkRaK05sTk1URjJEZytjWjc0S0QwZy8yM3g1eUUrRlVvOXNJOHJuK1BtOTYyRDIyaGFQZW4zUUlHVUhDWk05alFwYVpUM0lCVkI5OVFDZGk1cjlMeG9BS0xVY1NRSTFHcjBJRE8zMUxkRHIyRUFVQzcyT1I1R1JTU1hkRThoRkVDSWk3OGQvSlZOcjVHMWx0UGQ5SEJGTDZCbTdBbTh2NFdYdlFQUWJheC9CSVhMTWJNbjY1WkJPZjFWNWtjbDJwb0t5cXNsZUZBbzlDa0VVOXFHTEFyN2JiYnBZaFRjYUFCcFNOZWt3QTVvN28yaEo2TCtQMCtNcllmb0J1Q010YmJXOUhwOEhzNnE3RjgzMDVtamVNNUNLbXRBTlo3K0lMbUY4OW1yMXpudWkwNFNPL2Y2eVIxV0dHMUxNV2FqSnJLWDQrcDArbTQ2TWtOYjNmZm5RV2o3SUhqS1R2VUsrNWV6L3Rpc1ZrQkZKNVZJdWpvNlUxV0hqWU1ndDZsci9rdVZsdEM4WjZoVldKb1ZvV01wcWN3ejIrR1pWa29xcHZrbE1UOGNmdlJlZkRFcGtBTG8rUDF3THljRVhCVzdnT01zS0FWSUZjR1ZJbTNHNUQ4VHdVamNoZy9IN3NuNUJ3OGZCRUdrZVVkQUYyNklYZXRSWHpMUndKdlZqOEc4OG1RMUVVRTBlSHNsWUp3cVlLUG8rTjhiYkdNZndyUVNEcDR5NFFMUlQyYXZGWUhSeXVDVkkydmhrajR6WWdza095SzV2dTRPb3JLRm1RMjY1b3dNY3Q0bzk2SXRSWGdTMFAyVXQ1VmlDSDFrOFBYTTUyK2pTVlQ2U0gySEovMmR3eDZOUHZOQlkwY0tkUDh1bWF0dWJ6bzMvZmowWU53U3FQamQ2NkZNNFJ1WkRXdHUyeEJWZThZM0xHZHRPOVJsSndUbzBOekhEU254by84QXpKSVBPYlVMN1E5cCs1OTdacHg5Mjg0THo1R2dvMTRWMllndkU3c2tyVnRSdjNtVWUrdldPM2F6TGprM2VWa1J6SmZpSm9BdE1TNzBwNjFDYURzcmFzYk1USFVTSFBFdWVEZENFbXJuVVpLMzVydWhCbEJqKzBzWUVHc2ErdTNLRWRpOUpUM0p3K0hpV1JaQ1JJWVRFZ3B1N0F6Wkt1cXIxVTVucjJSZnFJYmFpT20vdnY3RDVHUlhnTHlkaHNEMzhQaDdlR0JOWUFOZ1JvUDkwYkFmT1BZRXJrVjN6UHcyMXpOclFvTnhxeDd3aDBHQXNGOWVBRHkrVjZCM0pLN292WmxDUmxWaExsaS9qL1JZVHFMOTNmSTQ3M1Qwd3IySmg4UDVabE4wanJQSVZmSjF0TG5aL0VaaEp1dDZoTjhkaTNrT2FvVGlsVitSamxsdVJuQlh0Q0NSVmRXTVRONEN5ZUdzQzduUUJZSzdTR0tvRVo2cGRIVzJHWCszQ2R5cDRLRUpMV1l6UmpMRUFoOWE2SXkrOEFrbG9KbEtFUDV1SFIwOXVScmZwS1VMRC9LR29XbnhhQ2lEMnJmYy9nWTVWNXZPNHFGU2Y4MVBBVjRSVVBxREJxZkV0UUtnSjlEbURTZU0rSnBCaGo5M0JreGd3N1VHcUdFb2VoZnc0SWIxd0twWVlBQmlmZHd3MTU3bUVXUHFPQ09VM2NKVE5CYkN3bGJ1eTd2ZXRyeVFvWDM4NjNZZFdjNEo1QVZ2aUFGOFN6MEtjamtrZkpKOFgzTGpocm1kVFhLMFc4RWEvTGllMDNoVlZPMjFwZndJMDN3OTJNUVByVTFlNzFBZStPWmhzZGtVaGFJOEUxRnM1OGZWYjhSTzRWYk92eW8yTjhqRzNUUXltdGNTZ21PU2p2b09aK0FBWUVBM3pqazZ6L1g2MHpkM3dxc2JMY1Zhbm1ld1hFSTNvMDlBSjRMVHZwdThtWjJPRWRVVmN3Ky9maHd0MW52RUFNZHJHNHkzUlpDaEliNnhickswYmpacUw2dElWM2x1bEx6U2RxUEd5TUpKWmU3NEQxTjkzbzFHSFFwejFjWk4wRXpidXprcFVFYTZxZWdtbGF3RTQxNis4Tlg2b1pwUkxXcmlqTzlqSXU2R21yakNpY0QyTGlSRHFnTWVwYVRROHB5NlljQ0RUV3JwbTFBVjVZL1dXMlM2K2FJbUtPRTZPcWVHbGFsTDZXSlY3OVB2TDhmYTkxTDNhVzhFUDFrSytuY1ZxZVNBQVlhd2g2M21DWnVUNVQ0N1d2MlE2WmZYTko3WnQvQXNVWXNyQWpxczFaWjlwbjBCMWo3UDBTZ3RmWHpQSlo4Zm03anlyWEswMWxwTTlZaGFjYXdwNE9hbEdlRDlyTEJIbS9xVDdZM0UwK2pNVnpzb0tXYlYrQ2d1RTNtUkFWOTRWV0IxN1VRT2x2ZU1YdFBqMUcwRkZicHQ5SWdsWWFFRHZmQmtCUldlNjhPaVY1QTg3Qm9ubHlvSE9xbWJiVDhiOVNGakh2dG1uUFVaODl3bUtOa3pkZlg5VmJHQ05GWUR1enk2aWhGM1VTajQyUXJDWjFITXExK1NyY3hSRitoTmp0d3dPR0pZblRlUitTQ1R3cEI2NnM1N1B2dGt6aUZSTXI1UGQzN2p0cWhHUFNuRGFWUGVTSURtRTJRUUNLNmlKTEp0M2YwdGhXbG1JUWNKQ2thYXM5M0FSV1RQM214WXJzZ2dITjMzdmx0QWpWZ2Jmd0hTekx2anRHdCthcUxkUmY5Wk9rUUtOVDdWemJTOHFNN3FjcnVFWlBxdUVtYU5SMjg4djJQa205S2VYUzlVRzNmQ3JuQmpUdmFORFE1MFZ4TmI1M0VXY3ZoZGZWT3ZDTXRBUU16aXRFNXFSdEkwaEs4VkFTZ0VzT0VkT3BpVnRKKzRCa2lnYnM2Q096OXZncXNnTlVzZEdnSDRKM0luc1dBVllkdy9rK2NyZVRxN3ZTVkZOT0U1aUtCTGVjNVJ0OGt5TDhtNkg2Qit5QnpnOXRISHZNTVJBYy9IcXVpaFNZZVFHcHE5VDlUTDN0clFPTm9LMVNyRE9RTm5OcEhHZkRINWpVOHJzZUMzV1o3M09ydjFRLzhaMWZLY1Jka25MQ0tYdnlyODVoVngvSkVQSlJXVW0yR1Q1ZnJybkxiT1dXU293dEdvdWhKZUI4RzJER29GNDJWUTBoQkNwQVBMRG03czREdmJtQmErb0poTVpPbDRNaktWSDUvZmt0UGdLelNnMHg3eWNZbEJkQW9iakRTalN5Qnh2c1hZTW5iRGpaODEzeTR2bVp0SGJ3dm1IZkhqRDFUYVRPV1IyTm9lejNsaXptOStQczFtc1JnV0JSMHMvY1hTajRTWkl2djJWL01qOVNOMk1xWXhOYWlUQXMzTVZtS0I4S3kxNjNWYWx6WVdic3h6MG9pU1lwYmUwRW01Z1J1UVVFd1VWc1p4dmNmRzVnb1VlaklHME9GRm1udnl3LzFUcXNrQUQ2aGk0cjhsdS9iU3ZUVUZhUkp4SWdJRXNuelB5N1lybkhiTndENFJVOVBqUUJaZ3ZhczQ4SzFISlp3Z09McDJ6a2IzeGFHdmQyQmdkU0JPL3N1RjJJM29pckQ1cW5wK3F2bE1YTUpJR1l5Syt3TGthc01CK2VIcjFtbjQxSkNnM2x5bUxTVUpQNS9tQ01JeVlVNjNXK0ozenVQZmoxZm1jc002aUdvL0pOTUlvNFV1aWhrVFJITndBeUk0Q2FUUU1aOHBtUG91Q0lsc1R1em1JU2hGZHhQUU9NOW1WTDVzRE9rMHR5bXN3TjFRZk1tMTFZUS9Gd2xIdGRuVkZwSWIrM21KXCI7XG52YXIgaGFzaCQyID0gXCI0OTdiODliMlwiO1xudmFyIHdhc21Kc29uJDIgPSB7XG5cdG5hbWU6IG5hbWUkMixcblx0ZGF0YTogZGF0YSQyLFxuXHRoYXNoOiBoYXNoJDJcbn07XG5cbmZ1bmN0aW9uIGJjcnlwdEludGVybmFsKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB7IGNvc3RGYWN0b3IsIHBhc3N3b3JkLCBzYWx0IH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBiY3J5cHRJbnRlcmZhY2UgPSB5aWVsZCBXQVNNSW50ZXJmYWNlKHdhc21Kc29uJDIsIDApO1xuICAgICAgICBiY3J5cHRJbnRlcmZhY2Uud3JpdGVNZW1vcnkoZ2V0VUludDhCdWZmZXIoc2FsdCksIDApO1xuICAgICAgICBjb25zdCBwYXNzd29yZEJ1ZmZlciA9IGdldFVJbnQ4QnVmZmVyKHBhc3N3b3JkKTtcbiAgICAgICAgYmNyeXB0SW50ZXJmYWNlLndyaXRlTWVtb3J5KHBhc3N3b3JkQnVmZmVyLCAxNik7XG4gICAgICAgIGNvbnN0IHNob3VsZEVuY29kZSA9IG9wdGlvbnMub3V0cHV0VHlwZSA9PT0gJ2VuY29kZWQnID8gMSA6IDA7XG4gICAgICAgIGJjcnlwdEludGVyZmFjZS5nZXRFeHBvcnRzKCkuYmNyeXB0KHBhc3N3b3JkQnVmZmVyLmxlbmd0aCwgY29zdEZhY3Rvciwgc2hvdWxkRW5jb2RlKTtcbiAgICAgICAgY29uc3QgbWVtb3J5ID0gYmNyeXB0SW50ZXJmYWNlLmdldE1lbW9yeSgpO1xuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRUeXBlID09PSAnZW5jb2RlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRBcnJheVRvU3RyaW5nKG1lbW9yeSwgNjApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dFR5cGUgPT09ICdoZXgnKSB7XG4gICAgICAgICAgICBjb25zdCBkaWdlc3RDaGFycyA9IG5ldyBVaW50OEFycmF5KDI0ICogMik7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGlnZXN0SGV4KGRpZ2VzdENoYXJzLCBtZW1vcnksIDI0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gYmluYXJ5IGZvcm1hdFxuICAgICAgICAvLyB0aGUgZGF0YSBpcyBjb3BpZWQgdG8gYWxsb3cgR0Mgb2YgdGhlIG9yaWdpbmFsIG1lbW9yeSBidWZmZXJcbiAgICAgICAgcmV0dXJuIG1lbW9yeS5zbGljZSgwLCAyNCk7XG4gICAgfSk7XG59XG5jb25zdCB2YWxpZGF0ZU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9wdGlvbnMgcGFyYW1ldGVyLiBJdCByZXF1aXJlcyBhbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmNvc3RGYWN0b3IpIHx8IG9wdGlvbnMuY29zdEZhY3RvciA8IDQgfHwgb3B0aW9ucy5jb3N0RmFjdG9yID4gMzEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3N0IGZhY3RvciBzaG91bGQgYmUgYSBudW1iZXIgYmV0d2VlbiA0IGFuZCAzMScpO1xuICAgIH1cbiAgICBvcHRpb25zLnBhc3N3b3JkID0gZ2V0VUludDhCdWZmZXIob3B0aW9ucy5wYXNzd29yZCk7XG4gICAgaWYgKG9wdGlvbnMucGFzc3dvcmQubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3N3b3JkIHNob3VsZCBiZSBhdCBsZWFzdCAxIGJ5dGUgbG9uZycpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wYXNzd29yZC5sZW5ndGggPiA3Mikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bhc3N3b3JkIHNob3VsZCBiZSBhdCBtb3N0IDcyIGJ5dGVzIGxvbmcnKTtcbiAgICB9XG4gICAgb3B0aW9ucy5zYWx0ID0gZ2V0VUludDhCdWZmZXIob3B0aW9ucy5zYWx0KTtcbiAgICBpZiAob3B0aW9ucy5zYWx0Lmxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTYWx0IHNob3VsZCBiZSAxNiBieXRlcyBsb25nJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm91dHB1dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLm91dHB1dFR5cGUgPSAnZW5jb2RlZCc7XG4gICAgfVxuICAgIGlmICghWydoZXgnLCAnYmluYXJ5JywgJ2VuY29kZWQnXS5pbmNsdWRlcyhvcHRpb25zLm91dHB1dFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zdXBwb3J0ZWQgb3V0cHV0IHR5cGUgJHtvcHRpb25zLm91dHB1dFR5cGV9LiBWYWxpZCB2YWx1ZXM6IFsnaGV4JywgJ2JpbmFyeScsICdlbmNvZGVkJ11gKTtcbiAgICB9XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIGhhc2ggdXNpbmcgdGhlIGJjcnlwdCBwYXNzd29yZC1oYXNoaW5nIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBDb21wdXRlZCBoYXNoXG4gKi9cbmZ1bmN0aW9uIGJjcnlwdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gYmNyeXB0SW50ZXJuYWwob3B0aW9ucyk7XG4gICAgfSk7XG59XG5jb25zdCB2YWxpZGF0ZUhhc2hDaGFyYWN0ZXJzID0gKGhhc2gpID0+IHtcbiAgICBpZiAoIS9eXFwkMltheHliXVxcJFswLTNdWzAtOV1cXCRbLi9BLVphLXowLTldezUzfSQvLnRlc3QoaGFzaCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaGFzaFs0XSA9PT0gJzAnICYmIHBhcnNlSW50KGhhc2hbNV0sIDEwKSA8IDQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaGFzaFs0XSA9PT0gJzMnICYmIHBhcnNlSW50KGhhc2hbNV0sIDEwKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5jb25zdCB2YWxpZGF0ZVZlcmlmeU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9wdGlvbnMgcGFyYW1ldGVyLiBJdCByZXF1aXJlcyBhbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmhhc2ggPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb3B0aW9ucy5oYXNoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhc2ggc2hvdWxkIGJlIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5oYXNoLmxlbmd0aCAhPT0gNjApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXNoIHNob3VsZCBiZSA2MCBieXRlcyBsb25nJyk7XG4gICAgfVxuICAgIGlmICghdmFsaWRhdGVIYXNoQ2hhcmFjdGVycyhvcHRpb25zLmhhc2gpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoYXNoJyk7XG4gICAgfVxuICAgIG9wdGlvbnMucGFzc3dvcmQgPSBnZXRVSW50OEJ1ZmZlcihvcHRpb25zLnBhc3N3b3JkKTtcbiAgICBpZiAob3B0aW9ucy5wYXNzd29yZC5sZW5ndGggPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFzc3dvcmQgc2hvdWxkIGJlIGF0IGxlYXN0IDEgYnl0ZSBsb25nJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnBhc3N3b3JkLmxlbmd0aCA+IDcyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFzc3dvcmQgc2hvdWxkIGJlIGF0IG1vc3QgNzIgYnl0ZXMgbG9uZycpO1xuICAgIH1cbn07XG4vKipcbiAqIFZlcmlmaWVzIHBhc3N3b3JkIHVzaW5nIGJjcnlwdCBwYXNzd29yZC1oYXNoaW5nIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbmNvZGVkIGhhc2ggbWF0Y2hlcyB0aGUgcGFzc3dvcmRcbiAqL1xuZnVuY3Rpb24gYmNyeXB0VmVyaWZ5KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB2YWxpZGF0ZVZlcmlmeU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGFzaCwgcGFzc3dvcmQgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJjcnlwdEludGVyZmFjZSA9IHlpZWxkIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kMiwgMCk7XG4gICAgICAgIGJjcnlwdEludGVyZmFjZS53cml0ZU1lbW9yeShnZXRVSW50OEJ1ZmZlcihoYXNoKSwgMCk7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkQnVmZmVyID0gZ2V0VUludDhCdWZmZXIocGFzc3dvcmQpO1xuICAgICAgICBiY3J5cHRJbnRlcmZhY2Uud3JpdGVNZW1vcnkocGFzc3dvcmRCdWZmZXIsIDYwKTtcbiAgICAgICAgcmV0dXJuICEhYmNyeXB0SW50ZXJmYWNlLmdldEV4cG9ydHMoKS5iY3J5cHRfdmVyaWZ5KHBhc3N3b3JkQnVmZmVyLmxlbmd0aCk7XG4gICAgfSk7XG59XG5cbnZhciBuYW1lJDEgPSBcIndoaXJscG9vbFwiO1xudmFyIGRhdGEkMSA9IFwiQUdGemJRRUFBQUFCRVFSZ0FBRi9ZQUYvQUdBQ2YzOEFZQUFBQXdrSUFBRUNBd0VEQUFFRkJBRUJBZ0lHRGdKL0FVSFFtd1VMZndCQmdBZ0xCM0FJQm0xbGJXOXllUUlBRGtoaGMyaGZSMlYwUW5WbVptVnlBQUFKU0dGemFGOUpibWwwQUFNTFNHRnphRjlWY0dSaGRHVUFCQXBJWVhOb1gwWnBibUZzQUFVTlNHRnphRjlIWlhSVGRHRjBaUUFHRGtoaGMyaGZRMkZzWTNWc1lYUmxBQWNLVTFSQlZFVmZVMGxhUlFNQkN1d2JDQVVBUVlBWkM4d0dBUWwrSUFBcEF3QWhBVUVBUVFBcEE0Q2JBU0lDTndQQW1RRWdBQ2tER0NFRElBQXBBeEFoQkNBQUtRTUlJUVZCQUVFQUtRT1ltd0VpQmpjRDJKa0JRUUJCQUNrRGtKc0JJZ2MzQTlDWkFVRUFRUUFwQTRpYkFTSUlOd1BJbVFGQkFDQUJJQUtGTndPQW1nRkJBQ0FGSUFpRk53T0ltZ0ZCQUNBRUlBZUZOd09RbWdGQkFDQURJQWFGTndPWW1nRWdBQ2tESUNFRFFRQkJBQ2tEb0pzQklnRTNBK0NaQVVFQUlBTWdBWVUzQTZDYUFTQUFLUU1vSVFSQkFFRUFLUU9vbXdFaUF6Y0Q2SmtCUVFBZ0JDQURoVGNEcUpvQklBQXBBekFoQlVFQVFRQXBBN0NiQVNJRU53UHdtUUZCQUNBRklBU0ZOd093bWdFZ0FDa0RPQ0VKUVFCQkFDa0R1SnNCSWdVM0EvaVpBVUVBSUFrZ0JZVTNBN2lhQVVFQVFwakdtTWIra082QXp3QTNBNENaQVVIQW1RRkJnSmtCRUFKQmdKb0JRY0NaQVJBQ1FRQkN0c3pLcnAvdjI4alNBRGNEZ0prQlFjQ1pBVUdBbVFFUUFrR0FtZ0ZCd0prQkVBSkJBRUxnK083MHVKVER2VFUzQTRDWkFVSEFtUUZCZ0prQkVBSkJnSm9CUWNDWkFSQUNRUUJDbmNEZmx1emxrdi9YQURjRGdKa0JRY0NaQVVHQW1RRVFBa0dBbWdGQndKa0JFQUpCQUVLVjd0MnAvcE84cFZvM0E0Q1pBVUhBbVFGQmdKa0JFQUpCZ0pvQlFjQ1pBUkFDUVFCQzJKS24wWkNXNkxXRmZ6Y0RnSmtCUWNDWkFVR0FtUUVRQWtHQW1nRkJ3SmtCRUFKQkFFSzl1OEdndjluUGd1Y0FOd09BbVFGQndKa0JRWUNaQVJBQ1FZQ2FBVUhBbVFFUUFrRUFRdVRQaE5yNHROL0tXRGNEZ0prQlFjQ1pBVUdBbVFFUUFrR0FtZ0ZCd0prQkVBSkJBRUw3M2ZPejF2dkZvNTUvTndPQW1RRkJ3SmtCUVlDWkFSQUNRWUNhQVVIQW1RRVFBa0VBUXNyYi9MM1ExZGJCTXpjRGdKa0JRY0NaQVVHQW1RRVFBa0dBbWdGQndKa0JFQUpCQUNBQ1FRQXBBNENhQVNBQUtRTUFoWVUzQTRDYkFVRUFJQWhCQUNrRGlKb0JJQUFwQXdpRmhUY0RpSnNCUVFBZ0IwRUFLUU9RbWdFZ0FDa0RFSVdGTndPUW13RkJBQ0FHUVFBcEE1aWFBU0FBS1FNWWhZVTNBNWliQVVFQUlBRkJBQ2tEb0pvQklBQXBBeUNGaFRjRG9Kc0JRUUFnQTBFQUtRT29tZ0VnQUNrREtJV0ZOd09vbXdGQkFDQUVRUUFwQTdDYUFTQUFLUU13aFlVM0E3Q2JBVUVBSUFWQkFDa0R1Sm9CSUFBcEF6aUZoVGNEdUpzQkM0WU1DZ0YrQVg4QmZnRi9BWDRCZndGK0FYOEVmZ04vSUFBZ0FDa0RBQ0lDcHlJRFFmOEJjVUVEZEVHUUNHb3BBd0JDT0lrZ0FDa0RPQ0lFcHlJRlFRVjJRZmdQY1VHUUNHb3BBd0NGUWppSklBQXBBekFpQnFjaUIwRU5ka0g0RDNGQmtBaHFLUU1BaFVJNGlTQUFLUU1vSWdpbklnbEJGWFpCK0E5eFFaQUlhaWtEQUlWQ09Ja2dBQ2tESUNJS1FpQ0lwMEgvQVhGQkEzUkJrQWhxS1FNQWhVSTRpU0FBS1FNWUlndENLSWluUWY4QmNVRURkRUdRQ0dvcEF3Q0ZRamlKSUFBcEF4QWlERUl3aUtkQi93RnhRUU4wUVpBSWFpa0RBSVZDT0lrZ0FDa0RDQ0lOUWppSXAwRURkRUdRQ0dvcEF3Q0ZRamlKSUFFcEF3Q0ZOd01BSUFBZ0RhY2lEa0gvQVhGQkEzUkJrQWhxS1FNQVFqaUpJQU5CQlhaQitBOXhRWkFJYWlrREFJVkNPSWtnQlVFTmRrSDREM0ZCa0FocUtRTUFoVUk0aVNBSFFSVjJRZmdQY1VHUUNHb3BBd0NGUWppSklBaENJSWluUWY4QmNVRURkRUdRQ0dvcEF3Q0ZRamlKSUFwQ0tJaW5RZjhCY1VFRGRFR1FDR29wQXdDRlFqaUpJQXRDTUlpblFmOEJjVUVEZEVHUUNHb3BBd0NGUWppSklBeENPSWluUVFOMFFaQUlhaWtEQUlWQ09Ja2dBU2tEQ0lVM0F3Z2dBQ0FNcHlJUFFmOEJjVUVEZEVHUUNHb3BBd0JDT0lrZ0RrRUZka0g0RDNGQmtBaHFLUU1BaFVJNGlTQURRUTEyUWZnUGNVR1FDR29wQXdDRlFqaUpJQVZCRlhaQitBOXhRWkFJYWlrREFJVkNPSWtnQmtJZ2lLZEIvd0Z4UVFOMFFaQUlhaWtEQUlWQ09Ja2dDRUlvaUtkQi93RnhRUU4wUVpBSWFpa0RBSVZDT0lrZ0NrSXdpS2RCL3dGeFFRTjBRWkFJYWlrREFJVkNPSWtnQzBJNGlLZEJBM1JCa0FocUtRTUFoVUk0aVNBQktRTVFoVGNERUNBQUlBdW5JaEJCL3dGeFFRTjBRWkFJYWlrREFFSTRpU0FQUVFWMlFmZ1BjVUdRQ0dvcEF3Q0ZRamlKSUE1QkRYWkIrQTl4UVpBSWFpa0RBSVZDT0lrZ0EwRVZka0g0RDNGQmtBaHFLUU1BaFVJNGlTQUVRaUNJcDBIL0FYRkJBM1JCa0FocUtRTUFoVUk0aVNBR1FpaUlwMEgvQVhGQkEzUkJrQWhxS1FNQWhVSTRpU0FJUWpDSXAwSC9BWEZCQTNSQmtBaHFLUU1BaFVJNGlTQUtRamlJcDBFRGRFR1FDR29wQXdDRlFqaUpJQUVwQXhpRk53TVlJQUFnQ3FjaUEwSC9BWEZCQTNSQmtBaHFLUU1BUWppSklCQkJCWFpCK0E5eFFaQUlhaWtEQUlWQ09Ja2dEMEVOZGtINEQzRkJrQWhxS1FNQWhVSTRpU0FPUVJWMlFmZ1BjVUdRQ0dvcEF3Q0ZRamlKSUFKQ0lJaW5RZjhCY1VFRGRFR1FDR29wQXdDRlFqaUpJQVJDS0lpblFmOEJjVUVEZEVHUUNHb3BBd0NGUWppSklBWkNNSWluUWY4QmNVRURkRUdRQ0dvcEF3Q0ZRamlKSUFoQ09JaW5RUU4wUVpBSWFpa0RBSVZDT0lrZ0FTa0RJSVUzQXlBZ0FDQUpRZjhCY1VFRGRFR1FDR29wQXdCQ09Ja2dBMEVGZGtINEQzRkJrQWhxS1FNQWhVSTRpU0FRUVExMlFmZ1BjVUdRQ0dvcEF3Q0ZRamlKSUE5QkZYWkIrQTl4UVpBSWFpa0RBSVZDT0lrZ0RVSWdpS2RCL3dGeFFRTjBRWkFJYWlrREFJVkNPSWtnQWtJb2lLZEIvd0Z4UVFOMFFaQUlhaWtEQUlWQ09Ja2dCRUl3aUtkQi93RnhRUU4wUVpBSWFpa0RBSVZDT0lrZ0JrSTRpS2RCQTNSQmtBaHFLUU1BaFVJNGlTQUJLUU1vaFRjREtDQUFJQWRCL3dGeFFRTjBRWkFJYWlrREFFSTRpU0FKUVFWMlFmZ1BjVUdRQ0dvcEF3Q0ZRamlKSUFOQkRYWkIrQTl4UVpBSWFpa0RBSVZDT0lrZ0VFRVZka0g0RDNGQmtBaHFLUU1BaFVJNGlTQU1RaUNJcDBIL0FYRkJBM1JCa0FocUtRTUFoVUk0aVNBTlFpaUlwMEgvQVhGQkEzUkJrQWhxS1FNQWhVSTRpU0FDUWpDSXAwSC9BWEZCQTNSQmtBaHFLUU1BaFVJNGlTQUVRamlJcDBFRGRFR1FDR29wQXdDRlFqaUpJQUVwQXpDRk53TXdJQUFnQlVIL0FYRkJBM1JCa0FocUtRTUFRamlKSUFkQkJYWkIrQTl4UVpBSWFpa0RBSVZDT0lrZ0NVRU5ka0g0RDNGQmtBaHFLUU1BaFVJNGlTQURRUlYyUWZnUGNVR1FDR29wQXdDRlFqaUpJQXRDSUlpblFmOEJjVUVEZEVHUUNHb3BBd0NGUWppSklBeENLSWluUWY4QmNVRURkRUdRQ0dvcEF3Q0ZRamlKSUExQ01JaW5RZjhCY1VFRGRFR1FDR29wQXdDRlFqaUpJQUpDT0lpblFRTjBRWkFJYWlrREFJVkNPSWtnQVNrRE9JVTNBemdMWEFCQkFFSUFOd1BJbXdGQkFFSUFOd080bXdGQkFFSUFOd093bXdGQkFFSUFOd09vbXdGQkFFSUFOd09nbXdGQkFFSUFOd09ZbXdGQkFFSUFOd09RbXdGQkFFSUFOd09JbXdGQkFFSUFOd09BbXdGQkFFRUFOZ0xBbXdFTHhRTUJDSDlCQUNFQlFRQkJBQ2tEeUpzQklBQ3RmRGNEeUpzQkFrQkJBQ2dDd0pzQklnSkZEUUJCQUNFQkFrQWdBaUFBYWlJRFFjQUFJQU5Cd0FCSkd5SUVJQUpCL3dGeElnVk5EUUFnQkNBRmF5SUJRUU54SVFaQkFDRUhBa0FnQkNBRlFYOXpha0VEU1EwQUlBRkJmSEVoQ0VFQUlRY0RRQ0FGSUFkcUlnSkJ3Sm9CYWlBSFFZQVphaTBBQURvQUFDQUNRY0dhQVdvZ0IwR0JHV290QUFBNkFBQWdBa0hDbWdGcUlBZEJnaGxxTFFBQU9nQUFJQUpCdzVvQmFpQUhRWU1aYWkwQUFEb0FBQ0FJSUFkQkJHb2lCMGNOQUFzZ0JTQUhhaUlGSVFJTElBWkZEUUFnQjBHQUdXb2hCeUFDUWY4QmNVRUJhaUVDQTBBZ0JVSEFtZ0ZxSUFjdEFBQTZBQUFnQjBFQmFpRUhJQUlpQlVFQmFpRUNJQVVoQlNBR1FYOXFJZ1lOQUFzTEFrQWdBMEUvVFEwQVFjQ2FBUkFCUVFBaEJBdEJBQ0FFTmdMQW13RUxBa0FnQUNBQmF5SUhRY0FBU1EwQUEwQWdBVUdBR1dvUUFTQUJRY0FBYWlFQklBZEJRR29pQjBFL1N3MEFDd3NDUUNBQklBQkdEUUJCQUNBSE5nTEFtd0VnQjBVTkFFRUFJUWRCQUNFQ0EwQWdCMEhBbWdGcUlBY2dBV3BCZ0JscUxRQUFPZ0FBUVFBb0FzQ2JBU0FDUVFGcUlnSkIvd0Z4SWdkTERRQUxDd3YvQXdJRWZ3RitJd0JCd0FCcklnQWtBQ0FBUVRocVFnQTNBd0FnQUVFd2FrSUFOd01BSUFCQktHcENBRGNEQUNBQVFTQnFRZ0EzQXdBZ0FFRVlha0lBTndNQUlBQkJFR3BDQURjREFDQUFRZ0EzQXdnZ0FFSUFOd01BUVFBaEFRSkFBa0JCQUNnQ3dKc0JJZ0pGRFFCQkFDRURBMEFnQUNBQmFpQUJRY0NhQVdvdEFBQTZBQUFnQVVFQmFpRUJJQUlnQTBFQmFpSURRZjhCY1VzTkFBdEJBQ0FDUVFGcU5nTEFtd0VnQUNBQ2FrR0FBVG9BQUNBQ1FXQnhRU0JIRFFFZ0FCQUJJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQXdCQzBFQVFRRTJBc0NiQVNBQVFZQUJPZ0FBQzBFQUtRUEltd0VoQkVFQVFnQTNBOGliQVNBQVFRQTZBRFlnQUVFQU5nRXlJQUJDQURjQktpQUFRUUE2QUNrZ0FFSUFOd0FoSUFCQkFEb0FJQ0FBSUFSQ0JZZzhBRDRnQUNBRVFnMklQQUE5SUFBZ0JFSVZpRHdBUENBQUlBUkNIWWc4QURzZ0FDQUVRaVdJUEFBNklBQWdCRUl0aUR3QU9TQUFJQVJDTllnOEFEZ2dBQ0FFUWoySVBBQTNJQUFnQktkQkEzUTZBRDhnQUJBQlFRQkJBQ2tEZ0pzQk53T0FHVUVBUVFBcEE0aWJBVGNEaUJsQkFFRUFLUU9RbXdFM0E1QVpRUUJCQUNrRG1Kc0JOd09ZR1VFQVFRQXBBNkNiQVRjRG9CbEJBRUVBS1FPb213RTNBNmdaUVFCQkFDa0RzSnNCTndPd0dVRUFRUUFwQTdpYkFUY0R1QmtnQUVIQUFHb2tBQXNHQUVIQW1nRUxZZ0JCQUVJQU53UEltd0ZCQUVJQU53TzRtd0ZCQUVJQU53T3dtd0ZCQUVJQU53T29td0ZCQUVJQU53T2dtd0ZCQUVJQU53T1ltd0ZCQUVJQU53T1Ftd0ZCQUVJQU53T0ltd0ZCQUVJQU53T0Ftd0ZCQUVFQU5nTEFtd0VnQUJBRUVBVUxDNWdRQVFCQmdBZ0xrQkNRQUFBQUFBQUFBQUFBQUFBQUFBQUFHQmhnR01CNE1OZ2pJNHdqQmE5R0pzYkdQOForK1pHNDZPaUg2Qk52emZ1SGh5YUhUS0VUeTdpNDJyaXBZbTBSQVFFRUFRZ0ZBZ2xQVHlGUFFtNmVEVFkyMkRhdDdteWJwcWFpcGxrRVVmL1MwbS9TM3IyNURQWDE4L1g3QnZjT2VYbjVlZStBOHBadmI2RnZYODdlTUpHUmZwSDg3ejl0VWxKVlVxb0hwUGhnWUoxZ0ovM0FSN3k4eXJ5SmRtVTFtNXRXbTZ6Tkt6ZU9qZ0tPQkl3QmlxT2p0cU54RlZ2U0RBd3dER0E4R0d4N2UvRjcvNHIyaERVMTFEVzE0V3FBSFIxMEhlaHBPdlhnNEtmZ1UwZmRzOWZYZTlmMnJMTWh3c0l2d2w3dG1ad3VMcmd1YlpaY1EwdExNVXRpZXBZcC92N2YvcU1oNFYxWFYwRlhnaGF1MVJVVlZCV29RU3E5ZDNmQmQ1KzI3dWczTjl3M3BldHVrdVhscytWN1Z0ZWVuNTlHbjR6Wkl4UHc4T2Z3MHhmOUkwcEtOVXBxZjVRZzJ0cFAycDZWcVVSWVdIMVkraVd3b3NuSkE4a0d5by9QS1Nta0tWV05VbndLQ2lnS1VDSVVXckd4L3JIaFQzOVFvS0M2b0drYVhjbHJhN0ZyZjlyV0ZJV0ZMb1ZjcXhmWnZiM092WUZ6Wnp4ZFhXbGQwalM2anhBUVFCQ0FVQ0NROVBUMzlQTUQ5UWZMeXd2TEZzQ0wzVDQrK0Q3dHhuelRCUVVVQlNnUkNpMW5aNEZuSCtiT2VPVGt0K1J6VTlXWEp5ZWNKeVc3VGdKQlFSbEJNbGlDYzR1TEZvc3NuUXVucDZlbXAxRUJVL1o5ZmVsOXo1VDZzcFdWYnBYYyt6ZEoyTmhIMkk2ZnJWYjcrOHY3aXpEcmNPN3VuKzRqY2NITmZIenRmTWVSK0x0bVpvVm1GK1BNY2QzZFU5Mm1qcWQ3RnhkY0Y3aExMcTlIUndGSEFrYU9SWjZlUXA2RTNDRWF5c29QeWg3RmlkUXRMYlF0ZFpsYVdMKy94citSZVdNdUJ3Y2NCemdiRGordHJZNnRBU05IckZwYWRWcnFMN1N3ZzRNMmcyeTFHKzh6TTh3emhmOW10bU5qa1dNLzhzWmNBZ0lJQWhBS0JCS3FxcEtxT1RoSmszRngyWEd2cU9MZXlNZ0h5QTdQamNZWkdXUVp5SDB5MFVsSk9VbHljSkk3MmRsRDJZYWFyMS95OHUveXd4MzVNZVBqcStOTFNOdW9XMXR4VytJcXRybUlpQnFJTkpJTnZKcWFVcHFreUNrK0ppYVlKaTIrVEFzeU1zZ3lqZnBrdjdDdytyRHBTbjFaNmVtRDZSdHF6L0lQRHp3UGVETWVkOVhWYzlYbXByY3pnSUE2Z0hTNkhmUyt2c0srbVh4aEo4M05FODBtM29mck5EVFFOTDNrYUlsSVNEMUllbldRTXYvLzIvK3JKT05VZW5yMWV2ZVA5STJRa0hxUTlPbzlaRjlmWVYvQ1ByNmRJQ0NBSUIyZ1FEMW9hTDFvWjlYUUR4b2FhQnJRY2pUS3JxNkNyaGtzUWJlMHRPcTB5VjUxZlZSVVRWU2FHYWpPazVOMmsremxPMzhpSW9naURhcEVMMlJraldRSDZjaGo4ZkhqOGRzUy95cHpjOUZ6djZMbXpCSVNTQktRV2lTQ1FFQWRRRHBkZ0hvSUNDQUlRQ2dRU01QREs4Tlc2SnVWN095WDdETjd4ZC9iMjB2YmxwQ3JUYUdodnFGaEgxL0FqWTBPalJ5REI1RTlQZlE5OWNsNnlKZVhacGZNOFROYkFBQUFBQUFBQUFEUHp4dlBOdFNEK1NzcnJDdEZoMVp1ZG5iRmRwZXo3T0dDZ2pLQ1pMQVo1dGJXZjliK3FiRW9HeHRzRzloM05zTzF0ZTYxd1Z0M2RLK3ZocThSS1VPK2FtcTFhbmZmMUIxUVVGMVF1ZzJnNmtWRkNVVVNUSXBYOC9Qcjg4c1kremd3TU1Bd25mQmdyZS92bSs4cmRNUEVQei84UCtYRGZ0cFZWVWxWa2h5cXg2S2lzcUo1RUZuYjZ1cVA2Z05seWVsbFpZbGxEK3pLYXJxNjBycTVhR2tETHkrOEwyV1RYa3JBd0NmQVR1ZWRqdDdlWDk2K2dhRmdIQnh3SE9Cc09QejkvZFA5dXk3blJrMU5LVTFTWkpvZmtwSnlrdVRnT1haMWRjbDFqN3pxK2dZR0dBWXdIZ3cyaW9vU2lpU1lDYTZ5c3ZLeStVQjVTK2JtditaaldkR0ZEZzQ0RG5BMkhINGZIM3dmK0dNKzUySmlsV0kzOThSVjFOUjMxTzZqdFRxb3FKcW9LVEpOZ1phV1lwYkU5REZTK2ZuRCtaczY3MkxGeFRQRlp2YVhveVVsbENVMXNVb1FXVmw1V2ZJZ3NxdUVoQ3FFVks0VjBISnkxWEszcCtURk9UbmtPZFhkY3V4TVRDMU1XbUdZRmw1ZVpWN0tPN3lVZUhqOWVPZUY4Sjg0T09BNDNkaHc1WXlNQ293VWhnV1kwZEZqMGNheXZ4ZWxwYTZsUVF0WDVPTGlyK0pEVGRtaFlXR1pZUy80d2s2enMvYXo4VVY3UWlFaGhDRVZwVUkwbkp4S25KVFdKUWdlSG5nZThHWTg3a05ERVVNaVVvWmh4OGM3eDNiOGs3SDgvTmY4c3l2bFR3UUVFQVFnRkFna1VWRlpVYklJb3VPWm1WNlp2TWN2SlcxdHFXMVB4Tm9pRFEwMERXZzVHbVg2K3MvNmd6WHBlZC9mVzkrMmhLTnBmbjdsZnRlYi9La2tKSkFrUGJSSUdUczc3RHZGMTNiK3E2dVdxekU5UzVyT3poL09QdEdCOEJFUlJCR0lWU0taajQ4R2p3eUpBNE5PVGlWT1NtdWNCTGUzNXJmUlVYTm02K3VMNnd0Z3krQThQUEE4L2N4NHdZR0JQb0Y4dngvOWxKUnFsTlQrTlVEMzkvdjM2d3p6SExtNTNybWhaMjhZRXhOTUU1aGZKb3NzTExBc2ZaeFlVZFBUYTlQV3VMc0Y1K2U3NTJ0YzA0eHVicVZ1Vjh2Y09jVEVOOFJ1ODVXcUF3TU1BeGdQQmh0V1ZrVldpaE9zM0VSRURVUWFTWWhlZjMvaGY5K2UvcUNwcVo2cElUZFBpQ29xcUNwTmdsUm51N3ZXdTdGdGF3ckJ3U1BCUnVLZmgxTlRVVk9pQXFieDNOeFgzSzZMcFhJTEN5d0xXQ2NXVTUyZFRwMmMweWNCYkd5dGJFZkIyQ3N4TWNReGxmVmlwSFIwelhTSHVlano5dmIvOXVNSjhSVkdSZ1ZHQ2tPTVRLeXNpcXdKSmtXbGlZa2VpVHlYRDdVVUZGQVVvRVFvdE9IaG8rRmJRdCs2RmhaWUZyQk9MS1k2T3VnNnpkSjA5MmxwdVdsdjBOSUdDUWtrQ1VndEVrRndjTjF3cDYzZzE3YTI0cmJaVkhGdjBOQm4wTTYzdlI3dDdaUHRPMzdIMXN6TUY4d3UyNFhpUWtJVlFpcFhoR2lZbUZxWXRNSXRMS1NrcXFSSkRsWHRLQ2lnS0YySVVIVmNYRzFjMmpHNGh2ajR4L2lUUCsxcmhvWWloa1NrRWNJPVwiO1xudmFyIGhhc2gkMSA9IFwiZGJhMTIwMTlcIjtcbnZhciB3YXNtSnNvbiQxID0ge1xuXHRuYW1lOiBuYW1lJDEsXG5cdGRhdGE6IGRhdGEkMSxcblx0aGFzaDogaGFzaCQxXG59O1xuXG5jb25zdCBtdXRleCQxID0gbmV3IE11dGV4KCk7XG5sZXQgd2FzbUNhY2hlJDEgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIFdoaXJscG9vbCBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiB3aGlybHBvb2woZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUkMSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9ja2VkQ3JlYXRlKG11dGV4JDEsIHdhc21Kc29uJDEsIDY0KVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSQxID0gd2FzbTtcbiAgICAgICAgICAgIHJldHVybiB3YXNtQ2FjaGUkMS5jYWxjdWxhdGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBoYXNoID0gd2FzbUNhY2hlJDEuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBXaGlybHBvb2wgaGFzaCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVXaGlybHBvb2woKSB7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24kMSwgNjQpLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgd2FzbS5pbml0KCk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGluaXQ6ICgpID0+IHsgd2FzbS5pbml0KCk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICB1cGRhdGU6IChkYXRhKSA9PiB7IHdhc20udXBkYXRlKGRhdGEpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgZGlnZXN0OiAob3V0cHV0VHlwZSkgPT4gd2FzbS5kaWdlc3Qob3V0cHV0VHlwZSksXG4gICAgICAgICAgICBzYXZlOiAoKSA9PiB3YXNtLnNhdmUoKSxcbiAgICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7IHdhc20ubG9hZChkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGJsb2NrU2l6ZTogNjQsXG4gICAgICAgICAgICBkaWdlc3RTaXplOiA2NCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbn1cblxudmFyIG5hbWUgPSBcInNtM1wiO1xudmFyIGRhdGEgPSBcIkFHRnpiUUVBQUFBQkRBTmdBQUYvWUFBQVlBRi9BQU1JQndBQkFnSUJBQUlGQkFFQkFnSUdEZ0ovQVVId2lRVUxmd0JCZ0FnTEIzQUlCbTFsYlc5eWVRSUFEa2hoYzJoZlIyVjBRblZtWm1WeUFBQUpTR0Z6YUY5SmJtbDBBQUVMU0dGemFGOVZjR1JoZEdVQUFncElZWE5vWDBacGJtRnNBQVFOU0dGemFGOUhaWFJUZEdGMFpRQUZEa2hoYzJoZlEyRnNZM1ZzWVhSbEFBWUtVMVJCVkVWZlUwbGFSUU1CQ3RvZEJ3VUFRWUFKQzFFQVFRQkN6ZHkzbk83SncvMndmemNDb0lrQlFRQkN2T0c4eTZxVnpwZ1dOd0tZaVFGQkFFTFhoWkc1Z2NDQnhWbzNBcENKQVVFQVF1K3NnSnlYMTZ5S3lRQTNBb2lKQVVFQVFnQTNBb0NKQVF2dkF3RUlmd0pBSUFCRkRRQkJBQ0VCUVFCQkFDZ0NnSWtCSWdJZ0FHb2lBellDZ0lrQklBSkJQM0VoQkFKQUlBTWdBazhOQUVFQVFRQW9Bb1NKQVVFQmFqWUNoSWtCQzBHQUNTRUNBa0FnQkVVTkFBSkFRY0FBSUFScklnVWdBRTBOQUNBRUlRRU1BUXNnQkVFL2N5RUdJQVJCcUlrQmFpRUNRWUFKSVFNQ1FBSkFJQVZCQjNFaUJ3MEFJQVVoQ0F3QkN5QUhJUWdEUUNBQ0lBTXRBQUE2QUFBZ0FrRUJhaUVDSUFOQkFXb2hBeUFJUVg5cUlnZ05BQXRCd0FBZ0J5QUVhbXNoQ0FzQ1FDQUdRUWRKRFFBRFFDQUNJQU1wQUFBM0FBQWdBa0VJYWlFQ0lBTkJDR29oQXlBSVFYaHFJZ2dOQUFzTFFhaUpBUkFESUFWQmdBbHFJUUlnQUNBRmF5RUFDd0pBSUFCQndBQkpEUUFEUUNBQ0VBTWdBa0hBQUdvaEFpQUFRVUJxSWdCQlAwc05BQXNMSUFCRkRRQWdBVUdvaVFGcUlRTUNRQUpBSUFCQkIzRWlDQTBBSUFBaEJBd0JDeUFBUVRoeElRUURRQ0FESUFJdEFBQTZBQUFnQTBFQmFpRURJQUpCQVdvaEFpQUlRWDlxSWdnTkFBc0xJQUJCQ0VrTkFBTkFJQU1nQWkwQUFEb0FBQ0FESUFJdEFBRTZBQUVnQXlBQ0xRQUNPZ0FDSUFNZ0FpMEFBem9BQXlBRElBSXRBQVE2QUFRZ0F5QUNMUUFGT2dBRklBTWdBaTBBQmpvQUJpQURJQUl0QUFjNkFBY2dBMEVJYWlFRElBSkJDR29oQWlBRVFYaHFJZ1FOQUFzTEMrd0xBUmwvSXdCQmtBSnJJZ0VrQUNBQklBQW9BaGdpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlBellDR0NBQklBQW9BaFFpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlCRFlDRkNBQklBQW9BZ2dpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlCVFlDQ0NBQklBQW9BaEFpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlCallDRUNBQklBQW9BaUFpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlCellDSUNBQklBQW9BZ1FpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlDRFlDQkNBQklBQW9BZ3dpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlDVFlDRENBQklBQW9BaHdpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlDallDSENBQklBQW9BZ0FpQWtFWWRDQUNRWUQrQTNGQkNIUnlJQUpCQ0haQmdQNERjU0FDUVJoMmNuSWlDellDQUNBQUtBSWtJUUlnQVNBQUtBSTBJZ3hCR0hRZ0RFR0EvZ054UVFoMGNpQU1RUWgyUVlEK0EzRWdERUVZZG5KeUlnMDJBalFnQVNBQUtBSW9JZ3hCR0hRZ0RFR0EvZ054UVFoMGNpQU1RUWgyUVlEK0EzRWdERUVZZG5KeUlnNDJBaWdnQVNBTElBMUJEM2R6SUFweklneEJGM2NnREVFUGQzTWdDVUVIZDNNZ0RuTWdESE1pQ2pZQ1FDQUJJQUFvQWpnaURFRVlkQ0FNUVlEK0EzRkJDSFJ5SUF4QkNIWkJnUDREY1NBTVFSaDJjbklpQ3pZQ09DQUJJQUFvQWl3aURFRVlkQ0FNUVlEK0EzRkJDSFJ5SUF4QkNIWkJnUDREY1NBTVFSaDJjbklpRHpZQ0xDQUJJQWdnQzBFUGQzTWdCM01pREVFWGR5QU1RUTkzY3lBR1FRZDNjeUFQY3lBTWN6WUNSQ0FCSUFBb0Fqd2lERUVZZENBTVFZRCtBM0ZCQ0hSeUlBeEJDSFpCZ1A0RGNTQU1RUmgyY25JaUREWUNQQ0FCSUFKQkdIUWdBa0dBL2dOeFFRaDBjaUFDUVFoMlFZRCtBM0VnQWtFWWRuSnlJZ0kyQWlRZ0FTQUFLQUl3SWdCQkdIUWdBRUdBL2dOeFFRaDBjaUFBUVFoMlFZRCtBM0VnQUVFWWRuSnlJZ1kyQWpBZ0FTQUZJQXhCRDNkeklBSnpJZ0JCRjNjZ0FFRVBkM01nQkVFSGQzTWdCbk1nQUhNMkFrZ2dBU0FPSUFwQkQzZHpJQWx6SWdCQkYzY2dBRUVQZDNNZ0EwRUhkM01nRFhNZ0FITTJBa3hCQUNFR1FTQWhCeUFCSVF4QkFDZ0NpSWtCSWhBaENVRUFLQUtraVFFaUVTRVBRUUFvQXFDSkFTSVNJUTFCQUNnQ25Ja0JJaE1oQ0VFQUtBS1lpUUVpRkNFT1FRQW9BcFNKQVNJVklSWkJBQ2dDa0lrQkloY2hBMEVBS0FLTWlRRWlHQ0VMQTBBZ0NDQU9JZ0p6SUEwaUJITWdEMm9nQ1NJQVFReDNJZzBnQW1wQm1ZcXh6Z2NnQjNaQm1ZcXh6Z2NnQm5SeWFrRUhkeUlQYWlBTUtBSUFJaGxxSWdsQkVYY2dDVUVKZDNNZ0NYTWhEaUFESWdVZ0MzTWdBSE1nRm1vZ0R5QU5jMm9nREVFUWFpZ0NBQ0FaYzJvaENTQU1RUVJxSVF3Z0IwRi9haUVISUFoQkUzY2hEU0FMUVFsM0lRTWdCQ0VQSUFJaENDQUZJUllnQUNFTElBWkJBV29pQmtFUVJ3MEFDMEVBSVFaQkVDRUhBMEFnQVNBR2FpSU1RZEFBYWlBTVFUaHFLQUlBSUF4QkxHb29BZ0FnREVFUWFpZ0NBSE1nREVIRUFHb29BZ0FpRmtFUGQzTWlDRUVYZDNNZ0NFRVBkM01nREVFY2FpZ0NBRUVIZDNNZ0NITWlHVFlDQUNBTklnOGdEaUlNUVg5emNTQUNJQXh4Y2lBRWFpQUpJZ2hCREhjaURTQU1ha0dLdTU3VUJ5QUhkMnBCQjNjaUJHb2dDbW9pQ1VFUmR5QUpRUWwzY3lBSmN5RU9JQWdnQXlJTElBQnljU0FMSUFCeGNpQUZhaUFFSUExemFpQVpJQXB6YWlFSklBWkJCR29oQmlBQ1FSTjNJUTBnQUVFSmR5RURJQlloQ2lBUElRUWdEQ0VDSUFzaEJTQUlJUUFnQjBFQmFpSUhRY0FBUncwQUMwRUFJQThnRVhNMkFxU0pBVUVBSUEwZ0VuTTJBcUNKQVVFQUlBd2dFM00yQXB5SkFVRUFJQTRnRkhNMkFwaUpBVUVBSUFzZ0ZYTTJBcFNKQVVFQUlBTWdGM00yQXBDSkFVRUFJQWdnR0hNMkFveUpBVUVBSUFrZ0VITTJBb2lKQVNBQlFaQUNhaVFBQzRJTEFRcC9Jd0JCRUdzaUFDUUFJQUJCQUNnQ2dJa0JJZ0ZCRzNRZ0FVRUxkRUdBZ1B3SGNYSWdBVUVGZGtHQS9nTnhJQUZCQTNSQkdIWnljallDRENBQVFRQW9Bb1NKQVNJQ1FRTjBJZ01nQVVFZGRuSWlCRUVZZENBRVFZRCtBM0ZCQ0hSeUlBSkJCWFpCZ1A0RGNTQURRUmgyY25JMkFnZ0NRRUU0UWZnQUlBRkJQM0VpQlVFNFNSc2dCV3NpQTBVTkFFRUFJQU1nQVdvaUFUWUNnSWtCQWtBZ0FTQURUdzBBUVFBZ0FrRUJhallDaElrQkMwR1FDQ0VCUVFBaEJnSkFJQVZGRFFBQ1FDQURRY0FBSUFWcklnZFBEUUFnQlNFR0RBRUxJQVZCUDNNaENDQUZRYWlKQVdvaEFVR1FDQ0VDQWtBQ1FDQUhRUWR4SWdrTkFDQUhJUVFNQVFzZ0NTRUVBMEFnQVNBQ0xRQUFPZ0FBSUFGQkFXb2hBU0FDUVFGcUlRSWdCRUYvYWlJRURRQUxRY0FBSUFrZ0JXcHJJUVFMQWtBZ0NFRUhTUTBBQTBBZ0FTQUNLUUFBTndBQUlBRkJDR29oQVNBQ1FRaHFJUUlnQkVGNGFpSUVEUUFMQzBHb2lRRVFBeUFIUVpBSWFpRUJJQU1nQjJzaEF3c0NRQ0FEUWNBQVNRMEFBMEFnQVJBRElBRkJ3QUJxSVFFZ0EwRkFhaUlEUVQ5TERRQUxDeUFEUlEwQUlBWkJxSWtCYWlFQ0FrQUNRQ0FEUVFkeElnUU5BQ0FESVFVTUFRc2dBMEU0Y1NFRkEwQWdBaUFCTFFBQU9nQUFJQUpCQVdvaEFpQUJRUUZxSVFFZ0JFRi9haUlFRFFBTEN5QURRUWhKRFFBRFFDQUNJQUV0QUFBNkFBQWdBaUFCTFFBQk9nQUJJQUlnQVMwQUFqb0FBaUFDSUFFdEFBTTZBQU1nQWlBQkxRQUVPZ0FFSUFJZ0FTMEFCVG9BQlNBQ0lBRXRBQVk2QUFZZ0FpQUJMUUFIT2dBSElBSkJDR29oQWlBQlFRaHFJUUVnQlVGNGFpSUZEUUFMQzBFQVFRQW9Bb0NKQVNJQ1FRaHFOZ0tBaVFFZ0FrRS9jU0VCQWtBZ0FrRjRTUTBBUVFCQkFDZ0NoSWtCUVFGcU5nS0VpUUVMQWtBQ1FBSkFBa0FnQVEwQVFRQWhBUXdCQ3lBQlFUaEpEUUFnQVVHb2lRRnFJQUF0QUFnNkFBQUNRQ0FCUVQ5R0RRQWdBVUdwaVFGcUlBQXRBQWs2QUFBZ0FVRStSZzBBSUFGQnFva0JhaUFBTFFBS09nQUFJQUZCUFVZTkFDQUJRYXVKQVdvZ0FDMEFDem9BQUNBQlFUeEdEUUFnQVVHc2lRRnFJQUF0QUF3NkFBQWdBVUU3UmcwQUlBRkJyWWtCYWlBQUxRQU5PZ0FBSUFGQk9rWU5BQ0FCUWE2SkFXb2dBQzBBRGpvQUFDQUJRVGxHRFFBZ0FVR3ZpUUZxSUFBdEFBODZBQUJCcUlrQkVBTU1Bd3RCcUlrQkVBTWdBa0VIY1NJRVJRMENJQUZCUjJvaEJTQUFRUWhxUWNBQUlBRnJhaUVDSUFGQlNHb2hCa0dvaVFFaEFTQUVJUU1EUUNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBaUFEUVg5cUlnTU5BQXNnQlVFSFNRMENJQVlnQkdzaEF3d0JDeUFCUWFpSkFXb2hBVUVJSVFNZ0FFRUlhaUVDQ3dOQUlBRWdBaWtBQURjQUFDQUJRUWhxSVFFZ0FrRUlhaUVDSUFOQmVHb2lBdzBBQ3d0QkFFRUFLQUtJaVFFaUFVRVlkQ0FCUVlEK0EzRkJDSFJ5SUFGQkNIWkJnUDREY1NBQlFSaDJjbkkyQW9BSlFRQkJBQ2dDaklrQklnRkJHSFFnQVVHQS9nTnhRUWgwY2lBQlFRaDJRWUQrQTNFZ0FVRVlkbkp5TmdLRUNVRUFRUUFvQXBDSkFTSUJRUmgwSUFGQmdQNERjVUVJZEhJZ0FVRUlka0dBL2dOeElBRkJHSFp5Y2pZQ2lBbEJBRUVBS0FLVWlRRWlBVUVZZENBQlFZRCtBM0ZCQ0hSeUlBRkJDSFpCZ1A0RGNTQUJRUmgyY25JMkFvd0pRUUJCQUNnQ21Ja0JJZ0ZCR0hRZ0FVR0EvZ054UVFoMGNpQUJRUWgyUVlEK0EzRWdBVUVZZG5KeU5nS1FDVUVBUVFBb0FweUpBU0lCUVJoMElBRkJnUDREY1VFSWRISWdBVUVJZGtHQS9nTnhJQUZCR0haeWNqWUNsQWxCQUVFQUtBS2dpUUVpQVVFWWRDQUJRWUQrQTNGQkNIUnlJQUZCQ0haQmdQNERjU0FCUVJoMmNuSTJBcGdKUVFCQkFDZ0NwSWtCSWdGQkdIUWdBVUdBL2dOeFFRaDBjaUFCUVFoMlFZRCtBM0VnQVVFWWRuSnlOZ0tjQ1NBQVFSQnFKQUFMQmdCQmdJa0JDNVVDQVFSL1FRQkN6ZHkzbk83SncvMndmemNDb0lrQlFRQkN2T0c4eTZxVnpwZ1dOd0tZaVFGQkFFTFhoWkc1Z2NDQnhWbzNBcENKQVVFQVF1K3NnSnlYMTZ5S3lRQTNBb2lKQVVFQVFnQTNBb0NKQVFKQUlBQkZEUUJCQUNBQU5nS0FpUUZCZ0FraEFRSkFJQUJCd0FCSkRRQkJnQWtoQVFOQUlBRVFBeUFCUWNBQWFpRUJJQUJCUUdvaUFFRS9TdzBBQ3lBQVJRMEJDeUFBUVg5cUlRSUNRQUpBSUFCQkIzRWlBdzBBUWFpSkFTRUVEQUVMSUFCQmVIRWhBRUdvaVFFaEJBTkFJQVFnQVMwQUFEb0FBQ0FFUVFGcUlRUWdBVUVCYWlFQklBTkJmMm9pQXcwQUN3c2dBa0VIU1EwQUEwQWdCQ0FCS1FBQU53QUFJQVJCQ0dvaEJDQUJRUWhxSVFFZ0FFRjRhaUlBRFFBTEN4QUVDd3RSQWdCQmdBZ0xCR2dBQUFBQVFaQUlDMENBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBXCI7XG52YXIgaGFzaCA9IFwiNTY1MTU3MTJcIjtcbnZhciB3YXNtSnNvbiA9IHtcblx0bmFtZTogbmFtZSxcblx0ZGF0YTogZGF0YSxcblx0aGFzaDogaGFzaFxufTtcblxuY29uc3QgbXV0ZXggPSBuZXcgTXV0ZXgoKTtcbmxldCB3YXNtQ2FjaGUgPSBudWxsO1xuLyoqXG4gKiBDYWxjdWxhdGVzIFNNMyBoYXNoXG4gKiBAcGFyYW0gZGF0YSBJbnB1dCBkYXRhIChzdHJpbmcsIEJ1ZmZlciBvciBUeXBlZEFycmF5KVxuICogQHJldHVybnMgQ29tcHV0ZWQgaGFzaCBhcyBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICovXG5mdW5jdGlvbiBzbTMoZGF0YSkge1xuICAgIGlmICh3YXNtQ2FjaGUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxvY2tlZENyZWF0ZShtdXRleCwgd2FzbUpzb24sIDMyKVxuICAgICAgICAgICAgLnRoZW4oKHdhc20pID0+IHtcbiAgICAgICAgICAgIHdhc21DYWNoZSA9IHdhc207XG4gICAgICAgICAgICByZXR1cm4gd2FzbUNhY2hlLmNhbGN1bGF0ZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB3YXNtQ2FjaGUuY2FsY3VsYXRlKGRhdGEpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTTTMgaGFzaCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVTTTMoKSB7XG4gICAgcmV0dXJuIFdBU01JbnRlcmZhY2Uod2FzbUpzb24sIDMyKS50aGVuKCh3YXNtKSA9PiB7XG4gICAgICAgIHdhc20uaW5pdCgpO1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBpbml0OiAoKSA9PiB7IHdhc20uaW5pdCgpOyByZXR1cm4gb2JqOyB9LFxuICAgICAgICAgICAgdXBkYXRlOiAoZGF0YSkgPT4geyB3YXNtLnVwZGF0ZShkYXRhKTsgcmV0dXJuIG9iajsgfSxcbiAgICAgICAgICAgIGRpZ2VzdDogKG91dHB1dFR5cGUpID0+IHdhc20uZGlnZXN0KG91dHB1dFR5cGUpLFxuICAgICAgICAgICAgc2F2ZTogKCkgPT4gd2FzbS5zYXZlKCksXG4gICAgICAgICAgICBsb2FkOiAoZGF0YSkgPT4geyB3YXNtLmxvYWQoZGF0YSk7IHJldHVybiBvYmo7IH0sXG4gICAgICAgICAgICBibG9ja1NpemU6IDY0LFxuICAgICAgICAgICAgZGlnZXN0U2l6ZTogMzIsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG59XG5cbmV4cG9ydCB7IGFkbGVyMzIsIGFyZ29uMlZlcmlmeSwgYXJnb24yZCwgYXJnb24yaSwgYXJnb24yaWQsIGJjcnlwdCwgYmNyeXB0VmVyaWZ5LCBibGFrZTJiLCBibGFrZTJzLCBibGFrZTMsIGNyYzMyLCBjcmMzMmMsIGNyZWF0ZUFkbGVyMzIsIGNyZWF0ZUJMQUtFMmIsIGNyZWF0ZUJMQUtFMnMsIGNyZWF0ZUJMQUtFMywgY3JlYXRlQ1JDMzIsIGNyZWF0ZUNSQzMyQywgY3JlYXRlSE1BQywgY3JlYXRlS2VjY2FrLCBjcmVhdGVNRDQsIGNyZWF0ZU1ENSwgY3JlYXRlUklQRU1EMTYwLCBjcmVhdGVTSEExLCBjcmVhdGVTSEEyMjQsIGNyZWF0ZVNIQTI1NiwgY3JlYXRlU0hBMywgY3JlYXRlU0hBMzg0LCBjcmVhdGVTSEE1MTIsIGNyZWF0ZVNNMywgY3JlYXRlV2hpcmxwb29sLCBjcmVhdGVYWEhhc2gxMjgsIGNyZWF0ZVhYSGFzaDMsIGNyZWF0ZVhYSGFzaDMyLCBjcmVhdGVYWEhhc2g2NCwga2VjY2FrLCBtZDQsIG1kNSwgcGJrZGYyLCByaXBlbWQxNjAsIHNjcnlwdCwgc2hhMSwgc2hhMjI0LCBzaGEyNTYsIHNoYTMsIHNoYTM4NCwgc2hhNTEyLCBzbTMsIHdoaXJscG9vbCwgeHhoYXNoMTI4LCB4eGhhc2gzLCB4eGhhc2gzMiwgeHhoYXNoNjQgfTtcbiIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4vU3ViamVjdCc7XG52YXIgQmVoYXZpb3JTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQmVoYXZpb3JTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJlaGF2aW9yU3ViamVjdChfdmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuX3ZhbHVlID0gX3ZhbHVlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCZWhhdmlvclN1YmplY3QucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9zdXBlci5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgICAgICAhc3Vic2NyaXB0aW9uLmNsb3NlZCAmJiBzdWJzY3JpYmVyLm5leHQodGhpcy5fdmFsdWUpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgX3ZhbHVlID0gX2EuX3ZhbHVlO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHRocm93bkVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9O1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCAodGhpcy5fdmFsdWUgPSB2YWx1ZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIEJlaGF2aW9yU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuZXhwb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CZWhhdmlvclN1YmplY3QuanMubWFwIiwiZXhwb3J0IHZhciBDT01QTEVURV9OT1RJRklDQVRJT04gPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdDJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpOyB9KSgpO1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTm90aWZpY2F0aW9uKGVycm9yKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbignRScsIHVuZGVmaW5lZCwgZXJyb3IpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5leHROb3RpZmljYXRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdOJywgdmFsdWUsIHVuZGVmaW5lZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm90aWZpY2F0aW9uKGtpbmQsIHZhbHVlLCBlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMubWFwIiwiaW1wb3J0IHsgU2FmZVN1YnNjcmliZXIsIFN1YnNjcmliZXIgfSBmcm9tICcuL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgaXNTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBvYnNlcnZhYmxlIGFzIFN5bWJvbF9vYnNlcnZhYmxlIH0gZnJvbSAnLi9zeW1ib2wvb2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBwaXBlRnJvbUFycmF5IH0gZnJvbSAnLi91dGlsL3BpcGUnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IGVycm9yQ29udGV4dCB9IGZyb20gJy4vdXRpbC9lcnJvckNvbnRleHQnO1xudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtTeW1ib2xfb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmV4cG9ydCB7IE9ic2VydmFibGUgfTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9ic2VydmFibGUuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCB7IGRhdGVUaW1lc3RhbXBQcm92aWRlciB9IGZyb20gJy4vc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlcic7XG52YXIgUmVwbGF5U3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJlcGxheVN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmVwbGF5U3ViamVjdChfYnVmZmVyU2l6ZSwgX3dpbmRvd1RpbWUsIF90aW1lc3RhbXBQcm92aWRlcikge1xuICAgICAgICBpZiAoX2J1ZmZlclNpemUgPT09IHZvaWQgMCkgeyBfYnVmZmVyU2l6ZSA9IEluZmluaXR5OyB9XG4gICAgICAgIGlmIChfd2luZG93VGltZSA9PT0gdm9pZCAwKSB7IF93aW5kb3dUaW1lID0gSW5maW5pdHk7IH1cbiAgICAgICAgaWYgKF90aW1lc3RhbXBQcm92aWRlciA9PT0gdm9pZCAwKSB7IF90aW1lc3RhbXBQcm92aWRlciA9IGRhdGVUaW1lc3RhbXBQcm92aWRlcjsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IF9idWZmZXJTaXplO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IF93aW5kb3dUaW1lO1xuICAgICAgICBfdGhpcy5fdGltZXN0YW1wUHJvdmlkZXIgPSBfdGltZXN0YW1wUHJvdmlkZXI7XG4gICAgICAgIF90aGlzLl9idWZmZXIgPSBbXTtcbiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7XG4gICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfd2luZG93VGltZSA9PT0gSW5maW5pdHk7XG4gICAgICAgIF90aGlzLl9idWZmZXJTaXplID0gTWF0aC5tYXgoMSwgX2J1ZmZlclNpemUpO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IE1hdGgubWF4KDEsIF93aW5kb3dUaW1lKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgX2J1ZmZlciA9IF9hLl9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYS5faW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYS5fdGltZXN0YW1wUHJvdmlkZXIsIF93aW5kb3dUaW1lID0gX2EuX3dpbmRvd1RpbWU7XG4gICAgICAgIGlmICghaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBfYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgIV9pbmZpbml0ZVRpbWVXaW5kb3cgJiYgX2J1ZmZlci5wdXNoKF90aW1lc3RhbXBQcm92aWRlci5ub3coKSArIF93aW5kb3dUaW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmltQnVmZmVyKCk7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIFJlcGxheVN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2EuX2luZmluaXRlVGltZVdpbmRvdywgX2J1ZmZlciA9IF9hLl9idWZmZXI7XG4gICAgICAgIHZhciBjb3B5ID0gX2J1ZmZlci5zbGljZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcHkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSArPSBfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjb3B5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUuX3RyaW1CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9idWZmZXJTaXplID0gX2EuX2J1ZmZlclNpemUsIF90aW1lc3RhbXBQcm92aWRlciA9IF9hLl90aW1lc3RhbXBQcm92aWRlciwgX2J1ZmZlciA9IF9hLl9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYS5faW5maW5pdGVUaW1lV2luZG93O1xuICAgICAgICB2YXIgYWRqdXN0ZWRCdWZmZXJTaXplID0gKF9pbmZpbml0ZVRpbWVXaW5kb3cgPyAxIDogMikgKiBfYnVmZmVyU2l6ZTtcbiAgICAgICAgX2J1ZmZlclNpemUgPCBJbmZpbml0eSAmJiBhZGp1c3RlZEJ1ZmZlclNpemUgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyLnNwbGljZSgwLCBfYnVmZmVyLmxlbmd0aCAtIGFkanVzdGVkQnVmZmVyU2l6ZSk7XG4gICAgICAgIGlmICghX2luZmluaXRlVGltZVdpbmRvdykge1xuICAgICAgICAgICAgdmFyIG5vdyA9IF90aW1lc3RhbXBQcm92aWRlci5ub3coKTtcbiAgICAgICAgICAgIHZhciBsYXN0ID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlcltpXSA8PSBub3c7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIGxhc3QgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdCAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0ICsgMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSZXBsYXlTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5leHBvcnQgeyBSZXBsYXlTdWJqZWN0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZXBsYXlTdWJqZWN0LmpzLm1hcCIsImltcG9ydCB7IGRhdGVUaW1lc3RhbXBQcm92aWRlciB9IGZyb20gJy4vc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlcic7XG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuZXhwb3J0IHsgU2NoZWR1bGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY2hlZHVsZXIuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzLCBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIEVNUFRZX1NVQlNDUklQVElPTiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yIH0gZnJvbSAnLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4vdXRpbC9hcnJSZW1vdmUnO1xuaW1wb3J0IHsgZXJyb3JDb250ZXh0IH0gZnJvbSAnLi91dGlsL2Vycm9yQ29udGV4dCc7XG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xuZXhwb3J0IHsgU3ViamVjdCB9O1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcbmV4cG9ydCB7IEFub255bW91c1N1YmplY3QgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YmplY3QuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgaXNTdWJzY3JpcHRpb24sIFN1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHJlcG9ydFVuaGFuZGxlZEVycm9yIH0gZnJvbSAnLi91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWwvbm9vcCc7XG5pbXBvcnQgeyBuZXh0Tm90aWZpY2F0aW9uLCBlcnJvck5vdGlmaWNhdGlvbiwgQ09NUExFVEVfTk9USUZJQ0FUSU9OIH0gZnJvbSAnLi9Ob3RpZmljYXRpb25GYWN0b3JpZXMnO1xuaW1wb3J0IHsgdGltZW91dFByb3ZpZGVyIH0gZnJvbSAnLi9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyJztcbmltcG9ydCB7IGNhcHR1cmVFcnJvciB9IGZyb20gJy4vdXRpbC9lcnJvckNvbnRleHQnO1xudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihuZXh0Tm90aWZpY2F0aW9uKHZhbHVlKSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihlcnJvck5vdGlmaWNhdGlvbihlcnIpLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24oQ09NUExFVEVfTk9USUZJQ0FUSU9OLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5leHBvcnQgeyBTdWJzY3JpYmVyIH07XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzE7XG4gICAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5leHBvcnQgeyBTYWZlU3Vic2NyaWJlciB9O1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHtcbiAgICAgICAgY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbmZ1bmN0aW9uIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIG9uU3RvcHBlZE5vdGlmaWNhdGlvbiA9IGNvbmZpZy5vblN0b3BwZWROb3RpZmljYXRpb247XG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uICYmIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpOyB9KTtcbn1cbmV4cG9ydCB2YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3Vic2NyaWJlci5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXksIF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgVW5zdWJzY3JpcHRpb25FcnJvciB9IGZyb20gJy4vdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4vdXRpbC9hcnJSZW1vdmUnO1xudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbmV4cG9ydCB7IFN1YnNjcmlwdGlvbiB9O1xuZXhwb3J0IHZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5leHBvcnQgZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpcHRpb24uanMubWFwIiwiZXhwb3J0IHZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlnLmpzLm1hcCIsImltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuL3V0aWwvRW1wdHlFcnJvcic7XG5pbXBvcnQgeyBTYWZlU3Vic2NyaWJlciB9IGZyb20gJy4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICB2YXIgaGFzQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb25maWcuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpcnN0VmFsdWVGcm9tLmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHJlZkNvdW50IGFzIGhpZ2hlck9yZGVyUmVmQ291bnQgfSBmcm9tICcuLi9vcGVyYXRvcnMvcmVmQ291bnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBoYXNMaWZ0IH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbnZhciBDb25uZWN0YWJsZU9ic2VydmFibGUgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDb25uZWN0YWJsZU9ic2VydmFibGUsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgc3ViamVjdEZhY3RvcnkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICBfdGhpcy5zdWJqZWN0RmFjdG9yeSA9IHN1YmplY3RGYWN0b3J5O1xuICAgICAgICBfdGhpcy5fc3ViamVjdCA9IG51bGw7XG4gICAgICAgIF90aGlzLl9yZWZDb3VudCA9IDA7XG4gICAgICAgIF90aGlzLl9jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgX3RoaXMubGlmdCA9IHNvdXJjZS5saWZ0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSB0aGlzLl9zdWJqZWN0O1xuICAgICAgICBpZiAoIXN1YmplY3QgfHwgc3ViamVjdC5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YmplY3QgPSB0aGlzLnN1YmplY3RGYWN0b3J5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmplY3Q7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLl90ZWFyZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcmVmQ291bnQgPSAwO1xuICAgICAgICB2YXIgX2Nvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uO1xuICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgIF9jb25uZWN0aW9uID09PSBudWxsIHx8IF9jb25uZWN0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29ubmVjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb247XG4gICAgICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IHRoaXMuX2Nvbm5lY3Rpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB2YXIgc3ViamVjdF8xID0gdGhpcy5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICBjb25uZWN0aW9uLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YmplY3RfMSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3RlYXJkb3duKCk7XG4gICAgICAgICAgICAgICAgc3ViamVjdF8xLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuX3RlYXJkb3duKCk7XG4gICAgICAgICAgICAgICAgc3ViamVjdF8xLmVycm9yKGVycik7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fdGVhcmRvd24oKTsgfSkpKTtcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLnJlZkNvdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaGlnaGVyT3JkZXJSZWZDb3VudCgpKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZSkpO1xuZXhwb3J0IHsgQ29ubmVjdGFibGVPYnNlcnZhYmxlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db25uZWN0YWJsZU9ic2VydmFibGUuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgYXJnc0FyZ0FycmF5T3JPYmplY3QgfSBmcm9tICcuLi91dGlsL2FyZ3NBcmdBcnJheU9yT2JqZWN0JztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuL2Zyb20nO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmltcG9ydCB7IG1hcE9uZU9yTWFueUFyZ3MgfSBmcm9tICcuLi91dGlsL21hcE9uZU9yTWFueUFyZ3MnO1xuaW1wb3J0IHsgcG9wUmVzdWx0U2VsZWN0b3IsIHBvcFNjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5pbXBvcnQgeyBjcmVhdGVPYmplY3QgfSBmcm9tICcuLi91dGlsL2NyZWF0ZU9iamVjdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuLi9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTGF0ZXN0KCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpO1xuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuICAgIHZhciBfYSA9IGFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpLCBvYnNlcnZhYmxlcyA9IF9hLmFyZ3MsIGtleXMgPSBfYS5rZXlzO1xuICAgIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZyb20oW10sIHNjaGVkdWxlcik7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBuZXcgT2JzZXJ2YWJsZShjb21iaW5lTGF0ZXN0SW5pdChvYnNlcnZhYmxlcywgc2NoZWR1bGVyLCBrZXlzXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZXMpIHsgcmV0dXJuIGNyZWF0ZU9iamVjdChrZXlzLCB2YWx1ZXMpOyB9XG4gICAgICAgIDpcbiAgICAgICAgICAgIGlkZW50aXR5KSk7XG4gICAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yID8gcmVzdWx0LnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpIDogcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3RJbml0KG9ic2VydmFibGVzLCBzY2hlZHVsZXIsIHZhbHVlVHJhbnNmb3JtKSB7XG4gICAgaWYgKHZhbHVlVHJhbnNmb3JtID09PSB2b2lkIDApIHsgdmFsdWVUcmFuc2Zvcm0gPSBpZGVudGl0eTsgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBtYXliZVNjaGVkdWxlKHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG9ic2VydmFibGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIHZhciBhY3RpdmUgPSBsZW5ndGg7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nRmlyc3RWYWx1ZXMgPSBsZW5ndGg7XG4gICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGZyb20ob2JzZXJ2YWJsZXNbaV0sIHNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoYXNGaXJzdFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0ZpcnN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNGaXJzdFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdGaXJzdFZhbHVlcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdGaXJzdFZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZVRyYW5zZm9ybSh2YWx1ZXMuc2xpY2UoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS0tYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSwgc3Vic2NyaWJlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1YnNjcmliZXIpO1xuICAgIH07XG59XG5mdW5jdGlvbiBtYXliZVNjaGVkdWxlKHNjaGVkdWxlciwgZXhlY3V0ZSwgc3Vic2NyaXB0aW9uKSB7XG4gICAgaWYgKHNjaGVkdWxlcikge1xuICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIGV4ZWN1dGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXhlY3V0ZSgpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVMYXRlc3QuanMubWFwIiwiaW1wb3J0IHsgY29uY2F0QWxsIH0gZnJvbSAnLi4vb3BlcmF0b3JzL2NvbmNhdEFsbCc7XG5pbXBvcnQgeyBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4vZnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gY29uY2F0QWxsKCkoZnJvbShhcmdzLCBwb3BTY2hlZHVsZXIoYXJncykpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5leHBvcnQgdmFyIEVNUFRZID0gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSk7XG5leHBvcnQgZnVuY3Rpb24gZW1wdHkoc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlciA/IGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikgOiBFTVBUWTtcbn1cbmZ1bmN0aW9uIGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSk7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW1wdHkuanMubWFwIiwiaW1wb3J0IHsgc2NoZWR1bGVkIH0gZnJvbSAnLi4vc2NoZWR1bGVkL3NjaGVkdWxlZCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuL2lubmVyRnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gZnJvbShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlciA/IHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSA6IGlubmVyRnJvbShpbnB1dCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tLmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmV4cG9ydCBmdW5jdGlvbiBmcm9tU3Vic2NyaWJhYmxlKHN1YnNjcmliYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJhYmxlLnN1YnNjcmliZShzdWJzY3JpYmVyKTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tU3Vic2NyaWJhYmxlLmpzLm1hcCIsImltcG9ydCB7IF9fYXN5bmNWYWx1ZXMsIF9fYXdhaXRlciwgX19nZW5lcmF0b3IsIF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBpc0FycmF5TGlrZSB9IGZyb20gJy4uL3V0aWwvaXNBcnJheUxpa2UnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vdXRpbC9pc1Byb21pc2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNJbnRlcm9wT2JzZXJ2YWJsZSB9IGZyb20gJy4uL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0FzeW5jSXRlcmFibGUgfSBmcm9tICcuLi91dGlsL2lzQXN5bmNJdGVyYWJsZSc7XG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciB9IGZyb20gJy4uL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvcic7XG5pbXBvcnQgeyBpc0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0l0ZXJhYmxlJztcbmltcG9ydCB7IGlzUmVhZGFibGVTdHJlYW1MaWtlLCByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIH0gZnJvbSAnLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IHJlcG9ydFVuaGFuZGxlZEVycm9yIH0gZnJvbSAnLi4vdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvcic7XG5pbXBvcnQgeyBvYnNlcnZhYmxlIGFzIFN5bWJvbF9vYnNlcnZhYmxlIH0gZnJvbSAnLi4vc3ltYm9sL29ic2VydmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW1N5bWJvbF9vYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5uZXJGcm9tLmpzLm1hcCIsImltcG9ydCB7IHBvcFNjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICByZXR1cm4gZnJvbShhcmdzLCBzY2hlZHVsZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2YuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgT3BlcmF0b3JTdWJzY3JpYmVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PcGVyYXRvclN1YnNjcmliZXIuanMubWFwIiwiaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5leHBvcnQgZnVuY3Rpb24gY2F0Y2hFcnJvcihzZWxlY3Rvcikge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgdmFyIHN5bmNVbnN1YiA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFuZGxlZFJlc3VsdDtcbiAgICAgICAgaW5uZXJTdWIgPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgaGFuZGxlZFJlc3VsdCA9IGlubmVyRnJvbShzZWxlY3RvcihlcnIsIGNhdGNoRXJyb3Ioc2VsZWN0b3IpKHNvdXJjZSkpKTtcbiAgICAgICAgICAgIGlmIChpbm5lclN1Yikge1xuICAgICAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgIGhhbmRsZWRSZXN1bHQuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3luY1Vuc3ViID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAoc3luY1Vuc3ViKSB7XG4gICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgaGFuZGxlZFJlc3VsdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhdGNoRXJyb3IuanMubWFwIiwiaW1wb3J0IHsgbWVyZ2VBbGwgfSBmcm9tICcuL21lcmdlQWxsJztcbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRBbGwoKSB7XG4gICAgcmV0dXJuIG1lcmdlQWxsKDEpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0QWxsLmpzLm1hcCIsImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgZnJvbVN1YnNjcmliYWJsZSB9IGZyb20gJy4uL29ic2VydmFibGUvZnJvbVN1YnNjcmliYWJsZSc7XG52YXIgREVGQVVMVF9DT05GSUcgPSB7XG4gICAgY29ubmVjdG9yOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3ViamVjdCgpOyB9LFxufTtcbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0KHNlbGVjdG9yLCBjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHsgY29uZmlnID0gREVGQVVMVF9DT05GSUc7IH1cbiAgICB2YXIgY29ubmVjdG9yID0gY29uZmlnLmNvbm5lY3RvcjtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gY29ubmVjdG9yKCk7XG4gICAgICAgIGlubmVyRnJvbShzZWxlY3Rvcihmcm9tU3Vic2NyaWJhYmxlKHN1YmplY3QpKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBzdWJzY3JpYmVyLmFkZChzb3VyY2Uuc3Vic2NyaWJlKHN1YmplY3QpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbm5lY3QuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRJZkVtcHR5LmpzLm1hcCIsImltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBkaXN0aW5jdFVudGlsQ2hhbmdlZChjb21wYXJhdG9yLCBrZXlTZWxlY3Rvcikge1xuICAgIGlmIChrZXlTZWxlY3RvciA9PT0gdm9pZCAwKSB7IGtleVNlbGVjdG9yID0gaWRlbnRpdHk7IH1cbiAgICBjb21wYXJhdG9yID0gY29tcGFyYXRvciAhPT0gbnVsbCAmJiBjb21wYXJhdG9yICE9PSB2b2lkIDAgPyBjb21wYXJhdG9yIDogZGVmYXVsdENvbXBhcmU7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcHJldmlvdXNLZXk7XG4gICAgICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlTZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmlyc3QgfHwgIWNvbXBhcmF0b3IocHJldmlvdXNLZXksIGN1cnJlbnRLZXkpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0tleSA9IGN1cnJlbnRLZXk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3RVbnRpbENoYW5nZWQuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTsgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsdGVyLmpzLm1hcCIsImltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJy4vdGFrZSc7XG5pbXBvcnQgeyBkZWZhdWx0SWZFbXB0eSB9IGZyb20gJy4vZGVmYXVsdElmRW1wdHknO1xuaW1wb3J0IHsgdGhyb3dJZkVtcHR5IH0gZnJvbSAnLi90aHJvd0lmRW1wdHknO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChwcmVkaWNhdGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBoYXNEZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5waXBlKHByZWRpY2F0ZSA/IGZpbHRlcihmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gcHJlZGljYXRlKHYsIGksIHNvdXJjZSk7IH0pIDogaWRlbnRpdHksIHRha2UoMSksIGhhc0RlZmF1bHRWYWx1ZSA/IGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkgOiB0aHJvd0lmRW1wdHkoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEVtcHR5RXJyb3IoKTsgfSkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maXJzdC5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBtYXAocHJvamVjdCwgdGhpc0FyZykge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocHJvamVjdC5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCsrKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hcC5qcy5tYXAiLCJpbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJy4vbWVyZ2VNYXAnO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFsbChjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICByZXR1cm4gbWVyZ2VNYXAoaWRlbnRpdHksIGNvbmN1cnJlbnQpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VBbGwuanMubWFwIiwiaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgcHJvamVjdCwgY29uY3VycmVudCwgb25CZWZvcmVOZXh0LCBleHBhbmQsIGlubmVyU3ViU2NoZWR1bGVyLCBhZGRpdGlvbmFsRmluYWxpemVyKSB7XG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgIHZhciBhY3RpdmUgPSAwO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICB2YXIgY2hlY2tDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzQ29tcGxldGUgJiYgIWJ1ZmZlci5sZW5ndGggJiYgIWFjdGl2ZSkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgb3V0ZXJOZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiAoYWN0aXZlIDwgY29uY3VycmVudCA/IGRvSW5uZXJTdWIodmFsdWUpIDogYnVmZmVyLnB1c2godmFsdWUpKTsgfTtcbiAgICB2YXIgZG9Jbm5lclN1YiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBleHBhbmQgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgYWN0aXZlKys7XG4gICAgICAgIHZhciBpbm5lckNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIGlubmVyRnJvbShwcm9qZWN0KHZhbHVlLCBpbmRleCsrKSkuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoaW5uZXJWYWx1ZSkge1xuICAgICAgICAgICAgb25CZWZvcmVOZXh0ID09PSBudWxsIHx8IG9uQmVmb3JlTmV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CZWZvcmVOZXh0KGlubmVyVmFsdWUpO1xuICAgICAgICAgICAgaWYgKGV4cGFuZCkge1xuICAgICAgICAgICAgICAgIG91dGVyTmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChpbm5lclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaW5uZXJDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGlubmVyQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmUtLTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyZWRWYWx1ZSA9IGJ1ZmZlci5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyU3ViU2NoZWR1bGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIGlubmVyU3ViU2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvSW5uZXJTdWIoYnVmZmVyZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoICYmIGFjdGl2ZSA8IGNvbmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sb29wXzEoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH07XG4gICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3V0ZXJOZXh0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgfSkpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IG51bGwgfHwgYWRkaXRpb25hbEZpbmFsaXplciA9PT0gdm9pZCAwID8gdm9pZCAwIDogYWRkaXRpb25hbEZpbmFsaXplcigpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZUludGVybmFscy5qcy5tYXAiLCJpbXBvcnQgeyBtYXAgfSBmcm9tICcuL21hcCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IG1lcmdlSW50ZXJuYWxzIH0gZnJvbSAnLi9tZXJnZUludGVybmFscyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsgY29uY3VycmVudCA9IEluZmluaXR5OyB9XG4gICAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBtZXJnZU1hcChmdW5jdGlvbiAoYSwgaSkgeyByZXR1cm4gbWFwKGZ1bmN0aW9uIChiLCBpaSkgeyByZXR1cm4gcmVzdWx0U2VsZWN0b3IoYSwgYiwgaSwgaWkpOyB9KShpbm5lckZyb20ocHJvamVjdChhLCBpKSkpOyB9LCBjb25jdXJyZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHsgcmV0dXJuIG1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgcHJvamVjdCwgY29uY3VycmVudCk7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VNYXAuanMubWFwIiwiaW1wb3J0IHsgQ29ubmVjdGFibGVPYnNlcnZhYmxlIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAnLi9jb25uZWN0JztcbmV4cG9ydCBmdW5jdGlvbiBtdWx0aWNhc3Qoc3ViamVjdE9yU3ViamVjdEZhY3RvcnksIHNlbGVjdG9yKSB7XG4gICAgdmFyIHN1YmplY3RGYWN0b3J5ID0gaXNGdW5jdGlvbihzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSkgPyBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmplY3RPclN1YmplY3RGYWN0b3J5OyB9O1xuICAgIGlmIChpc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gY29ubmVjdChzZWxlY3Rvciwge1xuICAgICAgICAgICAgY29ubmVjdG9yOiBzdWJqZWN0RmFjdG9yeSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgc3ViamVjdEZhY3RvcnkpOyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGljYXN0LmpzLm1hcCIsImltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7IH0sIGRlbGF5KTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9LCBkZWxheSk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSwgZGVsYXkpOyB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYnNlcnZlT24uanMubWFwIiwiaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJy4uL1JlcGxheVN1YmplY3QnO1xuaW1wb3J0IHsgbXVsdGljYXN0IH0gZnJvbSAnLi9tdWx0aWNhc3QnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaFJlcGxheShidWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzZWxlY3Rvck9yU2NoZWR1bGVyLCB0aW1lc3RhbXBQcm92aWRlcikge1xuICAgIGlmIChzZWxlY3Rvck9yU2NoZWR1bGVyICYmICFpc0Z1bmN0aW9uKHNlbGVjdG9yT3JTY2hlZHVsZXIpKSB7XG4gICAgICAgIHRpbWVzdGFtcFByb3ZpZGVyID0gc2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdG9yID0gaXNGdW5jdGlvbihzZWxlY3Rvck9yU2NoZWR1bGVyKSA/IHNlbGVjdG9yT3JTY2hlZHVsZXIgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG11bHRpY2FzdChuZXcgUmVwbGF5U3ViamVjdChidWZmZXJTaXplLCB3aW5kb3dUaW1lLCB0aW1lc3RhbXBQcm92aWRlciksIHNlbGVjdG9yKShzb3VyY2UpOyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaFJlcGxheS5qcy5tYXAiLCJpbXBvcnQgeyBzY2FuSW50ZXJuYWxzIH0gZnJvbSAnLi9zY2FuSW50ZXJuYWxzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZShhY2N1bXVsYXRvciwgc2VlZCkge1xuICAgIHJldHVybiBvcGVyYXRlKHNjYW5JbnRlcm5hbHMoYWNjdW11bGF0b3IsIHNlZWQsIGFyZ3VtZW50cy5sZW5ndGggPj0gMiwgZmFsc2UsIHRydWUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHVjZS5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiByZWZDb3VudCgpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgc291cmNlLl9yZWZDb3VudCsrO1xuICAgICAgICB2YXIgcmVmQ291bnRlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuX3JlZkNvdW50IDw9IDAgfHwgMCA8IC0tc291cmNlLl9yZWZDb3VudCkge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaGFyZWRDb25uZWN0aW9uID0gc291cmNlLl9jb25uZWN0aW9uO1xuICAgICAgICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uO1xuICAgICAgICAgICAgY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoc2hhcmVkQ29ubmVjdGlvbiAmJiAoIWNvbm4gfHwgc2hhcmVkQ29ubmVjdGlvbiA9PT0gY29ubikpIHtcbiAgICAgICAgICAgICAgICBzaGFyZWRDb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHJlZkNvdW50ZXIpO1xuICAgICAgICBpZiAoIXJlZkNvdW50ZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gc291cmNlLmNvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmQ291bnQuanMubWFwIiwiaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHNjYW5JbnRlcm5hbHMoYWNjdW11bGF0b3IsIHNlZWQsIGhhc1NlZWQsIGVtaXRPbk5leHQsIGVtaXRCZWZvcmVDb21wbGV0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNTdGF0ZSA9IGhhc1NlZWQ7XG4gICAgICAgIHZhciBzdGF0ZSA9IHNlZWQ7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGkgPSBpbmRleCsrO1xuICAgICAgICAgICAgc3RhdGUgPSBoYXNTdGF0ZVxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlLCBpKVxuICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgKChoYXNTdGF0ZSA9IHRydWUpLCB2YWx1ZSk7XG4gICAgICAgICAgICBlbWl0T25OZXh0ICYmIHN1YnNjcmliZXIubmV4dChzdGF0ZSk7XG4gICAgICAgIH0sIGVtaXRCZWZvcmVDb21wbGV0ZSAmJlxuICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBoYXNTdGF0ZSAmJiBzdWJzY3JpYmVyLm5leHQoc3RhdGUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pKSk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjYW5JbnRlcm5hbHMuanMubWFwIiwiaW1wb3J0IHsgY29uY2F0IH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9jb25jYXQnO1xuaW1wb3J0IHsgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0V2l0aCgpIHtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFsdWVzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBwb3BTY2hlZHVsZXIodmFsdWVzKTtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIChzY2hlZHVsZXIgPyBjb25jYXQodmFsdWVzLCBzb3VyY2UsIHNjaGVkdWxlcikgOiBjb25jYXQodmFsdWVzLCBzb3VyY2UpKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFydFdpdGguanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlT24oc2NoZWR1bGVyLCBkZWxheSkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgc3Vic2NyaWJlci5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7IH0sIGRlbGF5KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY3JpYmVPbi5qcy5tYXAiLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbm5lclN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgY2hlY2tDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzQ29tcGxldGUgJiYgIWlubmVyU3Vic2NyaWJlciAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaW5uZXJTdWJzY3JpYmVyID09PSBudWxsIHx8IGlubmVyU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5uZXJTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB2YXIgaW5uZXJJbmRleCA9IDA7XG4gICAgICAgICAgICB2YXIgb3V0ZXJJbmRleCA9IGluZGV4Kys7XG4gICAgICAgICAgICBpbm5lckZyb20ocHJvamVjdCh2YWx1ZSwgb3V0ZXJJbmRleCkpLnN1YnNjcmliZSgoaW5uZXJTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChpbm5lclZhbHVlKSB7IHJldHVybiBzdWJzY3JpYmVyLm5leHQocmVzdWx0U2VsZWN0b3IgPyByZXN1bHRTZWxlY3Rvcih2YWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCsrKSA6IGlubmVyVmFsdWUpOyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpdGNoTWFwLmpzLm1hcCIsImltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9lbXB0eSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiB0YWtlKGNvdW50KSB7XG4gICAgcmV0dXJuIGNvdW50IDw9IDBcbiAgICAgICAgP1xuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gRU1QVFk7IH1cbiAgICAgICAgOiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICgrK3NlZW4gPD0gY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDw9IHNlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlLmpzLm1hcCIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuZXhwb3J0IGZ1bmN0aW9uIHRhcChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgdmFyIHRhcE9ic2VydmVyID0gaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgZXJyb3IgfHwgY29tcGxldGVcbiAgICAgICAgP1xuICAgICAgICAgICAgeyBuZXh0OiBvYnNlcnZlck9yTmV4dCwgZXJyb3I6IGVycm9yLCBjb21wbGV0ZTogY29tcGxldGUgfVxuICAgICAgICA6IG9ic2VydmVyT3JOZXh0O1xuICAgIHJldHVybiB0YXBPYnNlcnZlclxuICAgICAgICA/IG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgKF9hID0gdGFwT2JzZXJ2ZXIuc3Vic2NyaWJlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlcik7XG4gICAgICAgICAgICB2YXIgaXNVbnN1YiA9IHRydWU7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgKF9hID0gdGFwT2JzZXJ2ZXIubmV4dCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpc1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgKF9hID0gdGFwT2JzZXJ2ZXIuY29tcGxldGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGlzVW5zdWIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAoX2EgPSB0YXBPYnNlcnZlci5lcnJvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIsIGVycik7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gdGFwT2JzZXJ2ZXIudW5zdWJzY3JpYmUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKF9iID0gdGFwT2JzZXJ2ZXIuZmluYWxpemUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKHRhcE9ic2VydmVyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSlcbiAgICAgICAgOlxuICAgICAgICAgICAgaWRlbnRpdHk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YXAuanMubWFwIiwiaW1wb3J0IHsgRW1wdHlFcnJvciB9IGZyb20gJy4uL3V0aWwvRW1wdHlFcnJvcic7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmRW1wdHkoZXJyb3JGYWN0b3J5KSB7XG4gICAgaWYgKGVycm9yRmFjdG9yeSA9PT0gdm9pZCAwKSB7IGVycm9yRmFjdG9yeSA9IGRlZmF1bHRFcnJvckZhY3Rvcnk7IH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIChoYXNWYWx1ZSA/IHN1YnNjcmliZXIuY29tcGxldGUoKSA6IHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpKTsgfSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9yRmFjdG9yeSgpIHtcbiAgICByZXR1cm4gbmV3IEVtcHR5RXJyb3IoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm93SWZFbXB0eS5qcy5tYXAiLCJpbXBvcnQgeyByZWR1Y2UgfSBmcm9tICcuL3JlZHVjZSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbnZhciBhcnJSZWR1Y2VyID0gZnVuY3Rpb24gKGFyciwgdmFsdWUpIHsgcmV0dXJuIChhcnIucHVzaCh2YWx1ZSksIGFycik7IH07XG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJlZHVjZShhcnJSZWR1Y2VyLCBbXSkoc291cmNlKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b0FycmF5LmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5wdXRbaSsrXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlQXJyYXkuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgZXhlY3V0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vdXRpbC9leGVjdXRlU2NoZWR1bGUnO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0ZXJhYmxlIGNhbm5vdCBiZSBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpbnB1dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdGVyYXRvci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDAsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpdGVyYXRvciBhcyBTeW1ib2xfaXRlcmF0b3IgfSBmcm9tICcuLi9zeW1ib2wvaXRlcmF0b3InO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpdGVyYXRvcjtcbiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBpbnB1dFtTeW1ib2xfaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgICAgICB2YXIgZG9uZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBpdGVyYXRvci5uZXh0KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBpc0Z1bmN0aW9uKGl0ZXJhdG9yID09PSBudWxsIHx8IGl0ZXJhdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpdGVyYXRvci5yZXR1cm4pICYmIGl0ZXJhdG9yLnJldHVybigpOyB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVJdGVyYWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICcuLi9vcGVyYXRvcnMvb2JzZXJ2ZU9uJztcbmltcG9ydCB7IHN1YnNjcmliZU9uIH0gZnJvbSAnLi4vb3BlcmF0b3JzL3N1YnNjcmliZU9uJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVPYnNlcnZhYmxlLmpzLm1hcCIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG9ic2VydmVPbiB9IGZyb20gJy4uL29wZXJhdG9ycy9vYnNlcnZlT24nO1xuaW1wb3J0IHsgc3Vic2NyaWJlT24gfSBmcm9tICcuLi9vcGVyYXRvcnMvc3Vic2NyaWJlT24nO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlUHJvbWlzZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIGlubmVyRnJvbShpbnB1dCkucGlwZShzdWJzY3JpYmVPbihzY2hlZHVsZXIpLCBvYnNlcnZlT24oc2NoZWR1bGVyKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZVByb21pc2UuanMubWFwIiwiaW1wb3J0IHsgc2NoZWR1bGVBc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi9zY2hlZHVsZUFzeW5jSXRlcmFibGUnO1xuaW1wb3J0IHsgcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciB9IGZyb20gJy4uL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UnO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IoaW5wdXQpLCBzY2hlZHVsZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UuanMubWFwIiwiaW1wb3J0IHsgc2NoZWR1bGVPYnNlcnZhYmxlIH0gZnJvbSAnLi9zY2hlZHVsZU9ic2VydmFibGUnO1xuaW1wb3J0IHsgc2NoZWR1bGVQcm9taXNlIH0gZnJvbSAnLi9zY2hlZHVsZVByb21pc2UnO1xuaW1wb3J0IHsgc2NoZWR1bGVBcnJheSB9IGZyb20gJy4vc2NoZWR1bGVBcnJheSc7XG5pbXBvcnQgeyBzY2hlZHVsZUl0ZXJhYmxlIH0gZnJvbSAnLi9zY2hlZHVsZUl0ZXJhYmxlJztcbmltcG9ydCB7IHNjaGVkdWxlQXN5bmNJdGVyYWJsZSB9IGZyb20gJy4vc2NoZWR1bGVBc3luY0l0ZXJhYmxlJztcbmltcG9ydCB7IGlzSW50ZXJvcE9ic2VydmFibGUgfSBmcm9tICcuLi91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vdXRpbC9pc1Byb21pc2UnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UgfSBmcm9tICcuLi91dGlsL2lzQXJyYXlMaWtlJztcbmltcG9ydCB7IGlzSXRlcmFibGUgfSBmcm9tICcuLi91dGlsL2lzSXRlcmFibGUnO1xuaW1wb3J0IHsgaXNBc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0FzeW5jSXRlcmFibGUnO1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IgfSBmcm9tICcuLi91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3InO1xuaW1wb3J0IHsgaXNSZWFkYWJsZVN0cmVhbUxpa2UgfSBmcm9tICcuLi91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlJztcbmltcG9ydCB7IHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlIH0gZnJvbSAnLi9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVkKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVkLmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5leHBvcnQgeyBBY3Rpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFjdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBpbW1lZGlhdGVQcm92aWRlciB9IGZyb20gJy4vaW1tZWRpYXRlUHJvdmlkZXInO1xudmFyIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzYXBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc2FwQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGltbWVkaWF0ZVByb3ZpZGVyLnNldEltbWVkaWF0ZShzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHVuZGVmaW5lZCkpKTtcbiAgICB9O1xuICAgIEFzYXBBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsID8gZGVsYXkgPiAwIDogdGhpcy5kZWxheSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgIGlmIChpZCAhPSBudWxsICYmICgoX2EgPSBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCkgIT09IGlkKSB7XG4gICAgICAgICAgICBpbW1lZGlhdGVQcm92aWRlci5jbGVhckltbWVkaWF0ZShpZCk7XG4gICAgICAgICAgICBpZiAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHJldHVybiBBc2FwQWN0aW9uO1xufShBc3luY0FjdGlvbikpO1xuZXhwb3J0IHsgQXNhcEFjdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXNhcEFjdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi9Bc3luY1NjaGVkdWxlcic7XG52YXIgQXNhcFNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzYXBTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXNhcFNjaGVkdWxlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBc2FwU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdmFyIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgYWN0aW9uID0gYWN0aW9uIHx8IGFjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXNhcFNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydCB7IEFzYXBTY2hlZHVsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzYXBTY2hlZHVsZXIuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuL0FjdGlvbic7XG5pbXBvcnQgeyBpbnRlcnZhbFByb3ZpZGVyIH0gZnJvbSAnLi9pbnRlcnZhbFByb3ZpZGVyJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4uL3V0aWwvYXJyUmVtb3ZlJztcbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5leHBvcnQgeyBBc3luY0FjdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNBY3Rpb24uanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTY2hlZHVsZXIgfSBmcm9tICcuLi9TY2hlZHVsZXInO1xudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuZXhwb3J0IHsgQXN5bmNTY2hlZHVsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jU2NoZWR1bGVyLmpzLm1hcCIsImltcG9ydCB7IEFzYXBBY3Rpb24gfSBmcm9tICcuL0FzYXBBY3Rpb24nO1xuaW1wb3J0IHsgQXNhcFNjaGVkdWxlciB9IGZyb20gJy4vQXNhcFNjaGVkdWxlcic7XG5leHBvcnQgdmFyIGFzYXBTY2hlZHVsZXIgPSBuZXcgQXNhcFNjaGVkdWxlcihBc2FwQWN0aW9uKTtcbmV4cG9ydCB2YXIgYXNhcCA9IGFzYXBTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc2FwLmpzLm1hcCIsImV4cG9ydCB2YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKGRhdGVUaW1lc3RhbXBQcm92aWRlci5kZWxlZ2F0ZSB8fCBEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgSW1tZWRpYXRlIH0gZnJvbSAnLi4vdXRpbC9JbW1lZGlhdGUnO1xudmFyIHNldEltbWVkaWF0ZSA9IEltbWVkaWF0ZS5zZXRJbW1lZGlhdGUsIGNsZWFySW1tZWRpYXRlID0gSW1tZWRpYXRlLmNsZWFySW1tZWRpYXRlO1xuZXhwb3J0IHZhciBpbW1lZGlhdGVQcm92aWRlciA9IHtcbiAgICBzZXRJbW1lZGlhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbW1lZGlhdGVQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnNldEltbWVkaWF0ZSkgfHwgc2V0SW1tZWRpYXRlKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbW1lZGlhdGU6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckltbWVkaWF0ZSkgfHwgY2xlYXJJbW1lZGlhdGUpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltbWVkaWF0ZVByb3ZpZGVyLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuZXhwb3J0IHZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbnRlcnZhbFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnNldEludGVydmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuc2V0SW50ZXJ2YWwuYXBwbHkoZGVsZWdhdGUsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGludGVydmFsUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhckludGVydmFsKSB8fCBjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcnZhbFByb3ZpZGVyLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuZXhwb3J0IHZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnNldFRpbWVvdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRUaW1lb3V0LmFwcGx5KGRlbGVnYXRlLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVvdXRQcm92aWRlci5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxuZXhwb3J0IHZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVyYXRvci5qcy5tYXAiLCJleHBvcnQgdmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JzZXJ2YWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBjcmVhdGVFcnJvckNsYXNzIH0gZnJvbSAnLi9jcmVhdGVFcnJvckNsYXNzJztcbmV4cG9ydCB2YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FbXB0eUVycm9yLmpzLm1hcCIsInZhciBuZXh0SGFuZGxlID0gMTtcbnZhciByZXNvbHZlZDtcbnZhciBhY3RpdmVIYW5kbGVzID0ge307XG5mdW5jdGlvbiBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlKSB7XG4gICAgaWYgKGhhbmRsZSBpbiBhY3RpdmVIYW5kbGVzKSB7XG4gICAgICAgIGRlbGV0ZSBhY3RpdmVIYW5kbGVzW2hhbmRsZV07XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgdmFyIEltbWVkaWF0ZSA9IHtcbiAgICBzZXRJbW1lZGlhdGU6IGZ1bmN0aW9uIChjYikge1xuICAgICAgICB2YXIgaGFuZGxlID0gbmV4dEhhbmRsZSsrO1xuICAgICAgICBhY3RpdmVIYW5kbGVzW2hhbmRsZV0gPSB0cnVlO1xuICAgICAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgICAgICByZXNvbHZlZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmVkLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSkgJiYgY2IoKTsgfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgfSxcbiAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlKTtcbiAgICB9LFxufTtcbmV4cG9ydCB2YXIgVGVzdFRvb2xzID0ge1xuICAgIHBlbmRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW1tZWRpYXRlLmpzLm1hcCIsImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuZXhwb3J0IHZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzLm1hcCIsImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuZXhwb3J0IHZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VbnN1YnNjcmlwdGlvbkVycm9yLmpzLm1hcCIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgaXNTY2hlZHVsZXIgfSBmcm9tICcuL2lzU2NoZWR1bGVyJztcbmZ1bmN0aW9uIGxhc3QoYXJyKSB7XG4gICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG59XG5leHBvcnQgZnVuY3Rpb24gcG9wUmVzdWx0U2VsZWN0b3IoYXJncykge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwb3BTY2hlZHVsZXIoYXJncykge1xuICAgIHJldHVybiBpc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gcG9wTnVtYmVyKGFyZ3MsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgbGFzdChhcmdzKSA9PT0gJ251bWJlcicgPyBhcmdzLnBvcCgpIDogZGVmYXVsdFZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXJncy5qcy5tYXAiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgZ2V0S2V5cyA9IE9iamVjdC5rZXlzO1xuZXhwb3J0IGZ1bmN0aW9uIGFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIGZpcnN0XzEgPSBhcmdzWzBdO1xuICAgICAgICBpZiAoaXNBcnJheShmaXJzdF8xKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgYXJnczogZmlyc3RfMSwga2V5czogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BPSk8oZmlyc3RfMSkpIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0S2V5cyhmaXJzdF8xKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYXJnczoga2V5cy5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZmlyc3RfMVtrZXldOyB9KSxcbiAgICAgICAgICAgICAgICBrZXlzOiBrZXlzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBhcmdzOiBhcmdzLCBrZXlzOiBudWxsIH07XG59XG5mdW5jdGlvbiBpc1BPSk8ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBnZXRQcm90b3R5cGVPZihvYmopID09PSBvYmplY3RQcm90bztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyZ3NBcmdBcnJheU9yT2JqZWN0LmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnJSZW1vdmUuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZUVycm9yQ2xhc3MuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9iamVjdChrZXlzLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5LCBpKSB7IHJldHVybiAoKHJlc3VsdFtrZXldID0gdmFsdWVzW2ldKSwgcmVzdWx0KTsgfSwge30pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlT2JqZWN0LmpzLm1hcCIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG52YXIgY29udGV4dCA9IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAgaWYgKGNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKSB7XG4gICAgICAgIHZhciBpc1Jvb3QgPSAhY29udGV4dDtcbiAgICAgICAgaWYgKGlzUm9vdCkge1xuICAgICAgICAgICAgY29udGV4dCA9IHsgZXJyb3JUaHJvd246IGZhbHNlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGNiKCk7XG4gICAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IGNvbnRleHQsIGVycm9yVGhyb3duID0gX2EuZXJyb3JUaHJvd24sIGVycm9yID0gX2EuZXJyb3I7XG4gICAgICAgICAgICBjb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlRXJyb3IoZXJyKSB7XG4gICAgaWYgKGNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nICYmIGNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dC5lcnJvclRocm93biA9IHRydWU7XG4gICAgICAgIGNvbnRleHQuZXJyb3IgPSBlcnI7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3JDb250ZXh0LmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGVjdXRlU2NoZWR1bGUuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlkZW50aXR5LmpzLm1hcCIsImV4cG9ydCB2YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0FycmF5TGlrZS5qcy5tYXAiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0FzeW5jSXRlcmFibGUuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNGdW5jdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBvYnNlcnZhYmxlIGFzIFN5bWJvbF9vYnNlcnZhYmxlIH0gZnJvbSAnLi4vc3ltYm9sL29ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W1N5bWJvbF9vYnNlcnZhYmxlXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0ludGVyb3BPYnNlcnZhYmxlLmpzLm1hcCIsImltcG9ydCB7IGl0ZXJhdG9yIGFzIFN5bWJvbF9pdGVyYXRvciB9IGZyb20gJy4uL3N5bWJvbC9pdGVyYXRvcic7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W1N5bWJvbF9pdGVyYXRvcl0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNJdGVyYWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4vaXNGdW5jdGlvblwiO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgeyBfX2FzeW5jR2VuZXJhdG9yLCBfX2F3YWl0LCBfX2dlbmVyYXRvciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0cnVlKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUmVhZGFibGVTdHJlYW1MaWtlLmpzLm1hcCIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZWR1bGVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUuc2NoZWR1bGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNTY2hlZHVsZXIuanMubWFwIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5leHBvcnQgZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1saWZ0LmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSBcIi4uL29wZXJhdG9ycy9tYXBcIjtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikge1xuICAgIHJldHVybiBtYXAoZnVuY3Rpb24gKGFyZ3MpIHsgcmV0dXJuIGNhbGxPckFwcGx5KGZuLCBhcmdzKTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXBPbmVPck1hbnlBcmdzLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBub29wKCkgeyB9XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub29wLmpzLm1hcCIsImltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gcGlwZSgpIHtcbiAgICB2YXIgZm5zID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgZm5zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBwaXBlRnJvbUFycmF5KGZucyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBpcGUuanMubWFwIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRQcm92aWRlciB9IGZyb20gJy4uL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9uVW5oYW5kbGVkRXJyb3IgPSBjb25maWcub25VbmhhbmRsZWRFcnJvcjtcbiAgICAgICAgaWYgKG9uVW5oYW5kbGVkRXJyb3IpIHtcbiAgICAgICAgICAgIG9uVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVwb3J0VW5oYW5kbGVkRXJyb3IuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvd1Vub2JzZXJ2YWJsZUVycm9yLmpzLm1hcCIsImltcG9ydCB7IHU4YVRvSGV4LCBoZXhUb1U4YSB9IGZyb20gXCJAcG9sa2Fkb3QvdXRpbFwiO1xuaW1wb3J0IHsgaXNBZGRyZXNzLCBkZWNvZGVBZGRyZXNzIH0gZnJvbSBcIkBwb2xrYWRvdC91dGlsLWNyeXB0b1wiO1xuZnVuY3Rpb24gbWFrZVByZSh0ZW1wbGF0ZSwgLi4ucGFyYW1zKSB7XG4gICAgbGV0IHN0cmluZ3MgPSBzdHJ1Y3R1cmVkQ2xvbmUodGVtcGxhdGUucmF3KTtcbiAgICBsZXQgcHJlID0gXCJcIjtcbiAgICB3aGlsZSAoc3RyaW5ncy5sZW5ndGggKyBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgcGFyYW0gPSBwYXJhbXMuc2hpZnQoKSA/PyBcIlwiO1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSBcIm9iamVjdFwiICYmIHBhcmFtLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyYW0gPSB1OGFUb0hleChwYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gXCJzdHJpbmdcIiAmJiBpc0FkZHJlc3MocGFyYW0pKSB7XG4gICAgICAgICAgICBwYXJhbSA9IHU4YVRvSGV4KGRlY29kZUFkZHJlc3MocGFyYW0pKTtcbiAgICAgICAgfVxuICAgICAgICBwcmUgPSBgJHtwcmV9JHtzdHJpbmdzLnNoaWZ0KCl9JHtwYXJhbX1gO1xuICAgIH1cbiAgICByZXR1cm4gcHJlO1xufVxuZnVuY3Rpb24gcGFyc2VQbHVyYWxpdHkoaW5uZXIpIHtcbiAgICBjb25zdCB7IGJvZHksIGJvZHlJZCwgcGFydCwgcGFydElkIH0gPSAvKD88Ym9keT4oPzxib2R5SWQ+XFx3KikoPzpcXCguKlxcKSk/KSwoPzxwYXJ0Pig/PHBhcnRJZD5cXHcqKSg/OlxcKC4qXFwpKT8pLy5leGVjKGlubmVyKS5ncm91cHM7XG4gICAgbGV0IHBsdXJhbGl0eUlkO1xuICAgIHN3aXRjaCAoYm9keUlkKSB7XG4gICAgICAgIGNhc2UgXCJVbml0XCI6XG4gICAgICAgIGNhc2UgXCJFeGVjdXRpdmVcIjpcbiAgICAgICAgY2FzZSBcIlRlY2huaWNhbFwiOlxuICAgICAgICBjYXNlIFwiTGVnaXNsYXRpdmVcIjpcbiAgICAgICAgY2FzZSBcIkp1ZGljaWFsXCI6XG4gICAgICAgIGNhc2UgXCJEZWZlbnNlXCI6XG4gICAgICAgICAgICBwbHVyYWxpdHlJZCA9IGJvZHlJZDtcbiAgICAgICAgY2FzZSBcIk1vbmlrZXJcIjpcbiAgICAgICAgICAgIGxldCB7IG1vbmlrZXIgfSA9IC9Nb25pa2VyXFwoKD88bW9uaWtlcj4weFxcdyopXFwpLy5leGVjKGJvZHkpLmdyb3VwcztcbiAgICAgICAgICAgIHBsdXJhbGl0eUlkID0ge1xuICAgICAgICAgICAgICAgIE1vbmlrZXI6IGhleFRvVThhKG1vbmlrZXIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiSW5kZXhcIjpcbiAgICAgICAgICAgIGxldCB7IGluZGV4IH0gPSAvSW5kZXhcXCgoPzxpbmRleD5cXGQqKVxcKS8uZXhlYyhib2R5KS5ncm91cHM7XG4gICAgICAgICAgICBwbHVyYWxpdHlJZCA9IHtcbiAgICAgICAgICAgICAgICBJbmRleDogTnVtYmVyKGluZGV4KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgbGV0IHBsdXJhbGl0eVBhcnQ7XG4gICAgc3dpdGNoIChwYXJ0SWQpIHtcbiAgICAgICAgY2FzZSBcIlZvaWNlXCI6XG4gICAgICAgICAgICBwbHVyYWxpdHlQYXJ0ID0gXCJWb2ljZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJNZW1iZXJzXCI6XG4gICAgICAgICAgICBsZXQgeyBtZW1iZXJzIH0gPSAvTWVtYmVyc1xcKCg/PG1lbWJlcnM+XFxkKilcXCkvLmV4ZWMocGFydCkuZ3JvdXBzO1xuICAgICAgICAgICAgcGx1cmFsaXR5SWQgPSB7XG4gICAgICAgICAgICAgICAgTWVtYmVyczogeyBjb3VudDogTnVtYmVyKG1lbWJlcnMpIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGcmFjdGlvblwiOiB7XG4gICAgICAgICAgICBsZXQgeyBub20sIGRlbm9tIH0gPSAvRnJhY3Rpb25cXCgoPzxub20+XFxkKiksXFxzPyg/PGRlbm9tPlxcZCopXFwpLy5leGVjKHBhcnQpXG4gICAgICAgICAgICAgICAgLmdyb3VwcztcbiAgICAgICAgICAgIHBsdXJhbGl0eVBhcnQgPSB7XG4gICAgICAgICAgICAgICAgRnJhY3Rpb246IHsgbm9tOiBOdW1iZXIobm9tKSwgZGVub206IE51bWJlcihkZW5vbSkgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiQXRMZWFzdFByb3BvcnRpb25cIjoge1xuICAgICAgICAgICAgbGV0IHsgbm9tLCBkZW5vbSB9ID0gL0F0TGVhc3RQcm9wb3J0aW9uXFwoKD88bm9tPlxcZCopLFxccz8oPzxkZW5vbT5cXGQqKVxcKS8uZXhlYyhwYXJ0KS5ncm91cHM7XG4gICAgICAgICAgICBwbHVyYWxpdHlQYXJ0ID0ge1xuICAgICAgICAgICAgICAgIEF0TGVhc3RQcm9wb3J0aW9uOiB7IG5vbTogTnVtYmVyKG5vbSksIGRlbm9tOiBOdW1iZXIoZGVub20pIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIk1vcmVUaGFuUHJvcG9ydGlvblwiOiB7XG4gICAgICAgICAgICBsZXQgeyBub20sIGRlbm9tIH0gPSAvTW9yZVRoYW5Qcm9wb3J0aW9uXFwoKD88bm9tPlxcZCopLFxccz8oPzxkZW5vbT5cXGQqKVxcKS8uZXhlYyhwYXJ0KS5ncm91cHM7XG4gICAgICAgICAgICBwbHVyYWxpdHlQYXJ0ID0ge1xuICAgICAgICAgICAgICAgIE1vcmVUaGFuUHJvcG9ydGlvbjogeyBub206IE51bWJlcihub20pLCBkZW5vbTogTnVtYmVyKGRlbm9tKSB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwbHVyYWxpdHlJZCxcbiAgICAgICAgcGFydDogcGx1cmFsaXR5UGFydCxcbiAgICB9O1xufVxuZnVuY3Rpb24gbWFrZUludGVyaW9yKHNlZ21lbnRzKSB7XG4gICAgY29uc3QganVuY3Rpb25zID0gc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiB7XG4gICAgICAgIGxldCB7IHR5cGUsIGlubmVyIH0gPSAvKD88dHlwZT5cXHcqKSg/OlxcKCg/PGlubmVyPi4qKVxcKSk/Ly5leGVjKHNlZ21lbnQpXG4gICAgICAgICAgICAuZ3JvdXBzO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJIZXJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiSGVyZVwiO1xuICAgICAgICAgICAgY2FzZSBcIlBhcmFjaGFpblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFBhcmFjaGFpbjogTnVtYmVyKGlubmVyKSB9O1xuICAgICAgICAgICAgY2FzZSBcIkFjY291bnRJZDMyXCI6XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codHlwZSwgaW5uZXIpO1xuICAgICAgICAgICAgICAgIGxldCB7IG5ldHdvcmsgPSBudWxsLCBpZCB9ID0gLyg/PG5ldHdvcms+XFx3KiwpPyg/PGlkPjB4LiopLy5leGVjKGlubmVyKVxuICAgICAgICAgICAgICAgICAgICAuZ3JvdXBzO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIEFjY291bnRJZDMyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGhleFRvVThhKGlkKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2FzZSBcIlBsdXJhbGl0eVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFBsdXJhbGl0eTogcGFyc2VQbHVyYWxpdHkoaW5uZXIpIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ganVuY3Rpb25zLmxlbmd0aCA9PT0gMSAmJiBqdW5jdGlvbnNbMF0gPT09IFwiSGVyZVwiXG4gICAgICAgID8gXCJIZXJlXCJcbiAgICAgICAgOiB7XG4gICAgICAgICAgICBbYFgke2p1bmN0aW9ucy5sZW5ndGh9YF06IGp1bmN0aW9ucyxcbiAgICAgICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmlvcih0ZW1wbGF0ZSwgLi4ucGFyYW1zKSB7XG4gICAgY29uc3QgcHJlID0gbWFrZVByZSh0ZW1wbGF0ZSwgLi4ucGFyYW1zKTtcbiAgICByZXR1cm4gbWFrZUludGVyaW9yKHByZS5zcGxpdChcIi9cIikpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uKHRlbXBsYXRlLCAuLi5wYXJhbXMpIHtcbiAgICBjb25zdCBwcmUgPSBtYWtlUHJlKHRlbXBsYXRlLCAuLi5wYXJhbXMpO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcHJlLnNwbGl0KFwiL1wiKTtcbiAgICBsZXQgcGFyZW50cyA9IDA7XG4gICAgd2hpbGUgKHNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBoZWFkID0gc2VnbWVudHMuc2hpZnQoKTtcbiAgICAgICAgaWYgKGhlYWQgPT0gXCIuLlwiKSB7XG4gICAgICAgICAgICBwYXJlbnRzICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGVhZCA9PT0gXCIuXCIpIHtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoaGVhZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJlbnRzLFxuICAgICAgICBpbnRlcmlvcjogbWFrZUludGVyaW9yKHNlZ21lbnRzKSxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VBY2NvdW50SWQzMihpZCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIEFjY291bnRJZDMyOiB7XG4gICAgICAgICAgICBuZXR3b3JrOiBudWxsLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmdW5naWJsZUFzc2V0KGlkLCBhbW91bnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgZnVuOiB7IEZ1bmdpYmxlOiBhbW91bnQgfSxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNyZXRlSWRmdW5naWJsZUFzc2V0KGlkLCBhbW91bnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogeyBDb25jcmV0ZTogaWQgfSxcbiAgICAgICAgZnVuOiB7IEZ1bmdpYmxlOiBhbW91bnQgfSxcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgV3NQcm92aWRlciB9IGZyb20gXCJAcG9sa2Fkb3QvYXBpXCI7XG5pbXBvcnQgeyB3ZWIzRW5hYmxlLCB3ZWIzRnJvbUFkZHJlc3MgfSBmcm9tIFwiQHBvbGthZG90L2V4dGVuc2lvbi1kYXBwXCI7XG5leHBvcnQgY2xhc3MgWGNtUHJvZ3JhbXNFeGVjdXRvciB7XG4gICAgcHJvdmlkZXJzID0ge307XG4gICAgYWRkcmVzcztcbiAgICBzaWduZXI7XG4gICAgY29uc3RydWN0b3IocHJvdmlkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW5kcG9pbnRdIG9mIE9iamVjdC5lbnRyaWVzKHByb3ZpZGVycykpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzW2tleV0gPSBuZXcgV3NQcm92aWRlcihlbmRwb2ludCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgaW5pdGlhbGl6ZShhcHBOYW1lKSB7XG4gICAgICAgIGF3YWl0IHdlYjNFbmFibGUoYXBwTmFtZSk7XG4gICAgfVxuICAgIGFzeW5jIHNldFNpZ25lcihhZGRyZXNzKSB7XG4gICAgICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgIHRoaXMuc2lnbmVyID0gKGF3YWl0IHdlYjNGcm9tQWRkcmVzcyhhZGRyZXNzKSkuc2lnbmVyO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKGZuLCAuLi5wYXJhbXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFkZHJlc3MgfHwgIXRoaXMuc2lnbmVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZHJlc3MgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuKHRoaXMucHJvdmlkZXJzLCB0aGlzLmFkZHJlc3MsIHRoaXMuc2lnbmVyLCAuLi5wYXJhbXMpO1xuICAgIH1cbn1cbiIsImltcG9ydCBcIkBwb2xrYWRvdC9hcGktYXVnbWVudC9rdXNhbWFcIjtcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWF0aXZlQWRkTWVtYmVycyhrcmVpdm9BcGksIG1lbWJlcnNoaXBBY2NvdW50c0FkZCA9IFtdKSB7XG4gICAgcmV0dXJuIG1lbWJlcnNoaXBBY2NvdW50c0FkZC5tYXAoKGFjY291bnQpID0+IGtyZWl2b0FwaS50eC5jb21tdW5pdGllcy5hZGRNZW1iZXIoe1xuICAgICAgICBJZDogYWNjb3VudCxcbiAgICB9KSk7XG4gICAgLy8gcmV0dXJuIGtyZWl2b0FwaS50eC51dGlsaXR5LmJhdGNoQWxsKFtcbiAgICAvLyAgICAgLi4uYWRkTWVtYmVycywgLi4ucmVtb3ZlTWVtYmVyc1xuICAgIC8vIF0pLm1ldGhvZC50b0hleCgpO1xuICAgIC8vIGNvbnN0IGluaXRpYXRpdmVBZGRNZW1iZXJzID0ga3JlaXZvQXBpLnR4LmNvbW11bml0eVJlZmVyZW5kYS5zdWJtaXQoXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICAgIENvbW11bml0aWVzOiB7XG4gICAgLy8gICAgICAgICAgICAgY29tbXVuaXR5SWRcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgSW5saW5lOiBpbmxpbmVQcm9wb3NhbFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgICBBZnRlcjogMFxuICAgIC8vICAgICB9XG4gICAgLy8gKTtcbiAgICAvLyBjb25zdCBpbml0aWF0aXZlUHJlaW1hZ2VNZXRhZGF0YSA9IGtyZWl2b0FwaS50eC5wcmVpbWFnZS5ub3RlUHJlaW1hZ2UoXG4gICAgLy8gICAgIHJvb21JZFxuICAgIC8vICk7XG4gICAgLy8gY29uc3QgaW5pdGlhdGl2ZVJlZmVyZW5kYU1ldGFkYXRhID0ga3JlaXZvQXBpLnR4LmNvbW11bml0eVJlZmVyZW5kYS5zZXRNZXRhZGF0YShcbiAgICAvLyAgICAgaW5pdGlhdGl2ZUlkLFxuICAgIC8vICAgICBtYXliZUhhc2hcbiAgICAvLyApO1xuICAgIC8vIGNvbnN0IGluaXRpYXRpdmVQbGFjZURlY2lzaW9uRGVwb3NpdCA9IGtyZWl2b0FwaS50eC5jb21tdW5pdHlSZWZlcmVuZGEucGxhY2VEZWNpc2lvbkRlcG9zaXQoXG4gICAgLy8gICAgIGluaXRpYXRpdmVJZFxuICAgIC8vICk7XG4gICAgLy8gcmV0dXJuIGtyZWl2b0FwaS50eC51dGlsaXR5XG4gICAgLy8gICAgIC5iYXRjaEFsbChbaW5pdGlhdGl2ZUFkZE1lbWJlcnMsIGluaXRpYXRpdmVQcmVpbWFnZU1ldGFkYXRhLCBpbml0aWF0aXZlUmVmZXJlbmRhTWV0YWRhdGEsIGluaXRpYXRpdmVQbGFjZURlY2lzaW9uRGVwb3NpdF0pXG4gICAgLy8gICAgIC5zaWduQW5kU2VuZChhZGRyZXNzLCB7IHNpZ25lciB9LCAoKSA9PiBjb25zb2xlLmxvZyhcInNpZ25cIikpO1xufVxuIiwiaW1wb3J0IFwiQHBvbGthZG90L2FwaS1hdWdtZW50L2t1c2FtYVwiO1xuaW1wb3J0IHsgQXBpUHJvbWlzZSB9IGZyb20gXCJAcG9sa2Fkb3QvYXBpXCI7XG5pbXBvcnQgeyBibGFrZTJBc0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5pbXBvcnQgeyBpbml0aWF0aXZlUmVtb3ZlTWVtYmVycyB9IGZyb20gXCIuL3JlbW92ZS1tZW1iZXJzXCI7XG5pbXBvcnQgeyBpbml0aWF0aXZlQWRkTWVtYmVycyB9IGZyb20gXCIuL2FkZC1tZW1iZXJzXCI7XG5pbXBvcnQgeyBpbml0aWF0aXZlVHJlYXN1cnlSZXF1ZXN0IH0gZnJvbSBcIi4vdHJlYXN1cnlcIjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b3B1cFRoZW5Jbml0aWF0aXZlU2V0dXAoXG4vLyBJbmplY3RlZCBwYXJhbWV0ZXJzXG5wcm92aWRlcnMsIGFkZHJlc3MsIHNpZ25lciwgXG4vLyBQcm92aWRlZFxuY29tbXVuaXR5SWQsIGluaXRpYXRpdmVJZCwgcm9vbUlkLCB0aXRsZSwgbWVtYmVyc2hpcEFjY291bnRzQWRkID0gW10sIG1lbWJlcnNoaXBBY2NvdW50c1JlbW92ZSA9IFtdLCBwZXJpb2RzVHJlYXN1cnlSZXF1ZXN0ID0gW10pIHtcbiAgICBjb25zdCBrcmVpdm9BcGkgPSBhd2FpdCBBcGlQcm9taXNlLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcnMua3JlaXZvLFxuICAgIH0pO1xuICAgIGNvbnN0IGt1c2FtYUFwaSA9IGF3YWl0IEFwaVByb21pc2UuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXI6IHByb3ZpZGVycy5rdXNhbWEsXG4gICAgfSk7XG4gICAgbGV0IGNhbGxzT25CYXRjaCA9IFtdO1xuICAgIGxldCBwcm9wb3NhbDtcbiAgICBjb25zb2xlLmxvZyh7IHBlcmlvZHNUcmVhc3VyeVJlcXVlc3QgfSk7XG4gICAgbGV0IGFkZE1lbWJlcnMgPSAobWVtYmVyc2hpcEFjY291bnRzQWRkLmxlbmd0aCA+IDApID8gaW5pdGlhdGl2ZUFkZE1lbWJlcnMoa3JlaXZvQXBpLCBtZW1iZXJzaGlwQWNjb3VudHNBZGQpIDogW107XG4gICAgbGV0IHJlbW92ZU1lbWJlcnMgPSAobWVtYmVyc2hpcEFjY291bnRzUmVtb3ZlLmxlbmd0aCA+IDApID8gaW5pdGlhdGl2ZVJlbW92ZU1lbWJlcnMoa3JlaXZvQXBpLCBtZW1iZXJzaGlwQWNjb3VudHNSZW1vdmUpIDogW107XG4gICAgbGV0IHRyZWFzdXJ5ID0gKHBlcmlvZHNUcmVhc3VyeVJlcXVlc3QubGVuZ3RoID4gMCkgPyBpbml0aWF0aXZlVHJlYXN1cnlSZXF1ZXN0KGtyZWl2b0FwaSwga3VzYW1hQXBpLCBjb21tdW5pdHlJZCwgcGVyaW9kc1RyZWFzdXJ5UmVxdWVzdCwgdGl0bGUpIDogeyBjYWxsczogW10sIGlubGluZTogW10gfTtcbiAgICBjYWxsc09uQmF0Y2ggPSBbLi4udHJlYXN1cnkuY2FsbHNdO1xuICAgIGNvbnN0IGlubGluZVByb3Bvc2FsID0ga3JlaXZvQXBpLnR4LnV0aWxpdHkuYmF0Y2hBbGwoW1xuICAgICAgICAuLi5hZGRNZW1iZXJzLCAuLi5yZW1vdmVNZW1iZXJzLCAuLi50cmVhc3VyeS5pbmxpbmVcbiAgICBdKS5tZXRob2QudG9IZXgoKTtcbiAgICBjb25zb2xlLmxvZyh7IGlubGluZVByb3Bvc2FsIH0pO1xuICAgIGlmICgoaW5saW5lUHJvcG9zYWwubGVuZ3RoIC0gMikgLyAyID4gMTI4KSB7XG4gICAgICAgIGNvbnN0IHByZWltYWdlQ2FsbEluaXRpYXRpdmUgPSBrcmVpdm9BcGkudHgucHJlaW1hZ2Uubm90ZVByZWltYWdlKGlubGluZVByb3Bvc2FsKTtcbiAgICAgICAgY2FsbHNPbkJhdGNoLnB1c2gocHJlaW1hZ2VDYWxsSW5pdGlhdGl2ZSk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBibGFrZTJBc0hleChwcmVpbWFnZUNhbGxJbml0aWF0aXZlLnRvSlNPTigpKTtcbiAgICAgICAgcHJvcG9zYWwgPSB7XG4gICAgICAgICAgICBMb29rdXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoLFxuICAgICAgICAgICAgICAgIGxlbjogKGlubGluZVByb3Bvc2FsLmxlbmd0aCAtIDIpIC8gMlxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcHJvcG9zYWwgPSB7XG4gICAgICAgICAgICBJbmxpbmU6IGlubGluZVByb3Bvc2FsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGluaXRpYXRpdmVTdWJtaXQgPSBrcmVpdm9BcGkudHguY29tbXVuaXR5UmVmZXJlbmRhLnN1Ym1pdCh7XG4gICAgICAgIENvbW11bml0aWVzOiB7XG4gICAgICAgICAgICBjb21tdW5pdHlJZFxuICAgICAgICB9XG4gICAgfSwgcHJvcG9zYWwsIHtcbiAgICAgICAgQWZ0ZXI6IDBcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyh7IGluaXRpYXRpdmVTdWJtaXQ6IGluaXRpYXRpdmVTdWJtaXQubWV0aG9kLnRvSGV4KCkgfSk7XG4gICAgY29uc3QgaW5pdGlhdGl2ZVByZWltYWdlTWV0YWRhdGEgPSBrcmVpdm9BcGkudHgucHJlaW1hZ2Uubm90ZVByZWltYWdlKHJvb21JZCk7XG4gICAgY29uc3QgbWF5YmVIYXNoID0gYmxha2UyQXNIZXgocm9vbUlkKTtcbiAgICBjb25zdCBpbml0aWF0aXZlUmVmZXJlbmRhTWV0YWRhdGEgPSBrcmVpdm9BcGkudHguY29tbXVuaXR5UmVmZXJlbmRhLnNldE1ldGFkYXRhKGluaXRpYXRpdmVJZCwgbWF5YmVIYXNoKTtcbiAgICBjb25zdCBpbml0aWF0aXZlUGxhY2VEZWNpc2lvbkRlcG9zaXQgPSBrcmVpdm9BcGkudHguY29tbXVuaXR5UmVmZXJlbmRhLnBsYWNlRGVjaXNpb25EZXBvc2l0KGluaXRpYXRpdmVJZCk7XG4gICAgcmV0dXJuIGtyZWl2b0FwaS50eC51dGlsaXR5XG4gICAgICAgIC5iYXRjaEFsbChbXG4gICAgICAgIC4uLmNhbGxzT25CYXRjaCxcbiAgICAgICAgaW5pdGlhdGl2ZVN1Ym1pdCxcbiAgICAgICAgaW5pdGlhdGl2ZVByZWltYWdlTWV0YWRhdGEsXG4gICAgICAgIGluaXRpYXRpdmVSZWZlcmVuZGFNZXRhZGF0YSxcbiAgICAgICAgaW5pdGlhdGl2ZVBsYWNlRGVjaXNpb25EZXBvc2l0XG4gICAgXSlcbiAgICAgICAgLnNpZ25BbmRTZW5kKGFkZHJlc3MsIHsgc2lnbmVyIH0sICgpID0+IGNvbnNvbGUubG9nKFwic2lnblwiKSk7XG59XG4iLCJpbXBvcnQgXCJAcG9sa2Fkb3QvYXBpLWF1Z21lbnQva3VzYW1hXCI7XG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhdGl2ZVJlbW92ZU1lbWJlcnMoa3JlaXZvQXBpLCBtZW1iZXJzaGlwQWNjb3VudHNSZW1vdmUgPSBbXSkge1xuICAgIHJldHVybiBtZW1iZXJzaGlwQWNjb3VudHNSZW1vdmUubWFwKChhY2NvdW50KSA9PiBrcmVpdm9BcGkudHguY29tbXVuaXRpZXMucmVtb3ZlTWVtYmVyKHtcbiAgICAgICAgSWQ6IGFjY291bnQuYWNjb3VudElkLFxuICAgIH0sIGFjY291bnQubWVtYmVyc2hpcElkKSk7XG59XG4iLCJpbXBvcnQgXCJAcG9sa2Fkb3QvYXBpLWF1Z21lbnQva3VzYW1hXCI7XG5pbXBvcnQgeyBsb2NhdGlvbiwgZnVuZ2libGVBc3NldCB9IGZyb20gXCIuLi8uLi9jb21tb25cIjtcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWF0aXZlVHJlYXN1cnlSZXF1ZXN0KGtyZWl2b0FwaSwga3VzYW1hQXBpLCBjb21tdW5pdHlJZCwgcGVyaW9kcyA9IFtdLCB0aXRsZSkge1xuICAgIGxldCBjYWxsc09uQmF0Y2ggPSBbXTtcbiAgICBsZXQgcHJvcG9zYWw7XG4gICAgY29uc3QgcmVtYXJrU3BlbmRLdXNhbWEgPSBrdXNhbWFBcGkudHguc3lzdGVtLnJlbWFyayh0aXRsZSk7XG4gICAgLy8gUGFydCAxOiBLdXNhbWEgVHJlYXN1cnkgYmF0Y2hcbiAgICBjb25zdCB0cmVhc3VyeVNwZW5kS3VzYW1hID0gcGVyaW9kcy5tYXAoKHBlcmlvZCwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIGt1c2FtYUFwaS50eC50cmVhc3VyeS5zcGVuZCh7XG4gICAgICAgICAgICBWNDoge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudHM6IDAsXG4gICAgICAgICAgICAgICAgICAgIGludGVyaW9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBYMTogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWNoYWluOiAxMDAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXNzZXRJZDoge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzOiAxLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcmlvcjogXCJIZXJlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHBlcmlvZC5hbW91bnQsIHtcbiAgICAgICAgICAgIFY0OiB7XG4gICAgICAgICAgICAgICAgcGFyZW50czogMSxcbiAgICAgICAgICAgICAgICBpbnRlcmlvcjoge1xuICAgICAgICAgICAgICAgICAgICBYMjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFjaGFpbjogMjI4MVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbHVyYWxpdHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4OiBjb21tdW5pdHlJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OiBcIlZvaWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHBlcmlvZC5ibG9ja3MpO1xuICAgIH0pO1xuICAgIGNvbnN0IGlubGluZUNhbGxLdXNhbWEgPSBrdXNhbWFBcGkudHgudXRpbGl0eS5iYXRjaChbXG4gICAgICAgIHJlbWFya1NwZW5kS3VzYW1hLCAuLi50cmVhc3VyeVNwZW5kS3VzYW1hXG4gICAgXSkubWV0aG9kLnRvSGV4KCk7XG4gICAgY29uc29sZS5sb2coeyBpbmxpbmVDYWxsS3VzYW1hIH0pO1xuICAgIC8vIGlmIChpbmxpbmVDYWxsS3VzYW1hLmxlbmd0aCA+IDEyOCkge1xuICAgIC8vICAgICBjb25zdCBwcmVpbWFnZUNhbGxLdXNhbWEgPSBrcmVpdm9BcGkudHgucHJlaW1hZ2Uubm90ZVByZWltYWdlKFxuICAgIC8vICAgICAgICAgaW5saW5lQ2FsbEt1c2FtYVxuICAgIC8vICAgICApO1xuICAgIC8vICAgICBjYWxsc09uQmF0Y2gucHVzaChwcmVpbWFnZUNhbGxLdXNhbWEpO1xuICAgIC8vICAgICBjb25zdCBoYXNoID0gYmxha2UyQXNIZXgoaW5saW5lQ2FsbEt1c2FtYSk7XG4gICAgLy8gICAgIHByb3Bvc2FsID0ge1xuICAgIC8vICAgICAgICAgTG9va3VwOiB7XG4gICAgLy8gICAgICAgICAgICAgaGFzaCxcbiAgICAvLyAgICAgICAgICAgICBsZW46IChpbmxpbmVDYWxsS3VzYW1hLmxlbmd0aCAtIDIpIC8gMlxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfSBlbHNlIHtcbiAgICBwcm9wb3NhbCA9IHtcbiAgICAgICAgSW5saW5lOiBpbmxpbmVDYWxsS3VzYW1hXG4gICAgfTtcbiAgICAvLyB9XG4gICAgY29uc3QgcmVmZXJlbmRhU3VibWl0S3VzYW1hID0ga3VzYW1hQXBpLnR4LnJlZmVyZW5kYS5zdWJtaXQoe1xuICAgICAgICBPcmlnaW5zOiBcIkJpZ1NwZW5kZXJcIlxuICAgIH0sIHByb3Bvc2FsLCB7XG4gICAgICAgIEF0OiAwXG4gICAgfSkubWV0aG9kLnRvSGV4KCk7XG4gICAgY29uc29sZS5sb2coeyByZWZlcmVuZGFTdWJtaXRLdXNhbWEgfSk7XG4gICAgY29uc3QgaW5pdGlhdGl2ZVRyZWFzdXJ5UmVxdWVzdCA9IGtyZWl2b0FwaS50eC5wb2xrYWRvdFhjbS5zZW5kKHtcbiAgICAgICAgVjQ6IGxvY2F0aW9uIGAuLi9IZXJlYFxuICAgIH0sIHtcbiAgICAgICAgVjQ6IFtcbiAgICAgICAgICAgIC8vIFBhcnQgMDogV2l0aGRyYXcgQXNzZXRcbiAgICAgICAgICAgIGt1c2FtYUFwaS5jcmVhdGVUeXBlKFwiU3RhZ2luZ1hjbVY0SW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICAgICAgICAgIFdpdGhkcmF3QXNzZXQ6IFtmdW5naWJsZUFzc2V0KGxvY2F0aW9uIGAuL0hlcmVgLCAxXzAwMF8wMDBfMDAwXzAwMCldLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBQYXJ0IDE6IEJ1eSBFeGVjdXRpb25cbiAgICAgICAgICAgIGt1c2FtYUFwaS5jcmVhdGVUeXBlKFwiU3RhZ2luZ1hjbVY0SW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICAgICAgICAgIEJ1eUV4ZWN1dGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBmZWVzOiBmdW5naWJsZUFzc2V0KGxvY2F0aW9uIGAuL0hlcmVgLCAxXzAwMF8wMDBfMDAwXzAwMCksXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodExpbWl0OiBcIlVubGltaXRlZFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gUGFydCAyOiBUcmFuc2FjdFxuICAgICAgICAgICAga3VzYW1hQXBpLmNyZWF0ZVR5cGUoXCJTdGFnaW5nWGNtVjRJbnN0cnVjdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgVHJhbnNhY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luS2luZDogXCJTb3ZlcmVpZ25BY2NvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVXZWlnaHRBdE1vc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlRpbWU6IDM4MjAxMzAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb29mU2l6ZTogNDI0MjhcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZDogcmVmZXJlbmRhU3VibWl0S3VzYW1hXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIFBhcnQgMzogRXhwZWN0IFRyYW5zYWN0IFN0YXR1c1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEV4cGVjdFRyYW5zYWN0U3RhdHVzOiBcIlN1Y2Nlc3NcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFBhcnQgNDogUmVmdW5kIFN1cnBsdXNcbiAgICAgICAgICAgIFwiUmVmdW5kU3VycGx1c1wiLFxuICAgICAgICAgICAgLy8gUGFydCA1OiBEZXBvc2l0IEFzc2V0XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2V0czogXCJEZWZpbml0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBiZW5lZmljaWFyeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyaW9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWDI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWNoYWluOiAyMjgxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsdXJhbGl0eToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4OiBjb21tdW5pdHlJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydDogXCJWb2ljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyh7IGluaXRpYXRpdmVUcmVhc3VyeVJlcXVlc3Q6IGluaXRpYXRpdmVUcmVhc3VyeVJlcXVlc3QubWV0aG9kLnRvSGV4KCkgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FsbHM6IFsuLi5jYWxsc09uQmF0Y2hdLFxuICAgICAgICBpbmxpbmU6IFtpbml0aWF0aXZlVHJlYXN1cnlSZXF1ZXN0XVxuICAgIH07XG59XG4iLCIvLyBXYXJuaW5nOiAobm90IHZlcnkpIGJlc3QgZWZmb3J0IGhlcmUuXG4vLyBUaGlzIHNjcmlwdCByZWFkcyBzb21lIG1lbWJlcnNoaXBzIGluIHNhbGUgZnJvbSB0aGUgc3RvcmFnZSwgdGhlbiBidXlzIGFuZCBhc3NpZ25kLlxuLy8gVGhpcyBmYWlscyBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCBtZW1iZXJzaGlwcy4gSG93ZXZlciwgd2UgY2FuJ3Qgc3RpbGwgcHJvcGFnYXRlIHN1Y2ggZXJyb3JzLlxuaW1wb3J0IFwiQHBvbGthZG90L2FwaS1hdWdtZW50L3N1YnN0cmF0ZVwiO1xuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZU1lbWJlcnNoaXBzKGFwaSwgbWVtYmVyc2hpcEFjY291bnRzKSB7XG4gICAgY29uc3QgaXRlbXNGb3JTYWxlID0gYXdhaXQgYXBpLnF1ZXJ5LmNvbW11bml0eU1lbWJlcnNoaXBzLml0ZW1QcmljZU9mLmVudHJpZXNQYWdlZCh7XG4gICAgICAgIGFyZ3M6IFswXSxcbiAgICAgICAgcGFnZVNpemU6IG1lbWJlcnNoaXBBY2NvdW50cy5sZW5ndGgsXG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZW1zRm9yU2FsZS5tYXAoKFtrZXksIHZhbHVlXSwgaSkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtS2V5ID0ga2V5LnRvSHVtYW4oKVsxXTtcbiAgICAgICAgY29uc3QgcHJlSXRlbSA9IGtleS50b0h1bWFuKClbMV0ucmVwbGFjZUFsbCgvXFxEL2csIFwiXCIpO1xuICAgICAgICBjb25zdCBpdGVtID0gTnVtYmVyKHByZUl0ZW0pO1xuICAgICAgICBjb25zb2xlLmxvZyhpdGVtS2V5LCBwcmVJdGVtLCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBwcmljZTogdmFsdWVcbiAgICAgICAgICAgICAgICAudW53cmFwKClbMF1cbiAgICAgICAgICAgICAgICAudG9OdW1iZXIoKSxcbiAgICAgICAgICAgIGFjY291bnRUb0Fzc2lnbjogbWVtYmVyc2hpcEFjY291bnRzW2ldLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjcXVpcmVNZW1iZXJzaGlwc0FuZEFkZE1lbWJlcnMoa3VzYW1hQXBpLCBrcmVpdm9BcGksIG1lbWJlcnNoaXBBY2NvdW50cykge1xuICAgIGNvbnN0IG1lbWJlcnNoaXBzVG9BY3F1aXJlID0gYXdhaXQgcHJlcGFyZU1lbWJlcnNoaXBzKGtyZWl2b0FwaSwgbWVtYmVyc2hpcEFjY291bnRzKTtcbiAgICBjb25zdCB7IG1ldGhvZCB9ID0ga3JlaXZvQXBpLnR4LmNvbW11bml0aWVzLmRpc3BhdGNoQXNBY2NvdW50KGtyZWl2b0FwaS50eC51dGlsaXR5LmJhdGNoKG1lbWJlcnNoaXBzVG9BY3F1aXJlLmZsYXRNYXAoKG0pID0+IFtcbiAgICAgICAga3JlaXZvQXBpLnR4LmNvbW11bml0eU1lbWJlcnNoaXBzLmJ1eUl0ZW0oMCwgbS5pdGVtLCBtLnByaWNlKSxcbiAgICAgICAga3JlaXZvQXBpLnR4LmNvbW11bml0aWVzLmFkZE1lbWJlcihtLmFjY291bnRUb0Fzc2lnbiksXG4gICAgXSkpKTtcbiAgICBjb25zdCBkaXNwYXRjaEluZm8gPSBhd2FpdCBrcmVpdm9BcGkuY2FsbC50cmFuc2FjdGlvblBheW1lbnRDYWxsQXBpLnF1ZXJ5Q2FsbEluZm8obWV0aG9kLCBtZXRob2QudG9VOGEoKS5sZW5ndGgpO1xuICAgIHJldHVybiBrdXNhbWFBcGkuY3JlYXRlVHlwZShcIlN0YWdpbmdYY21WNEluc3RydWN0aW9uXCIsIHtcbiAgICAgICAgVHJhbnNhY3Q6IHtcbiAgICAgICAgICAgIG9yaWdpbktpbmQ6IFwiU292ZXJlaWduQWNjb3VudFwiLFxuICAgICAgICAgICAgcmVxdWlyZVdlaWdodEF0TW9zdDogZGlzcGF0Y2hJbmZvLndlaWdodCxcbiAgICAgICAgICAgIGNhbGw6IHtcbiAgICAgICAgICAgICAgICBlbmNvZGVkOiBtZXRob2QudG9IZXgoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBkZWNvZGVBZGRyZXNzIH0gZnJvbSBcIkBwb2xrYWRvdC91dGlsLWNyeXB0b1wiO1xuZnVuY3Rpb24gZ2V0RGVjaXNpb25NZXRob2QoZGVjaXNpb25NZXRob2QpIHtcbiAgICBsZXQgZW5jb2RlZERlY2lzaW9uTWV0aG9kID0ge1xuICAgICAgICBNZW1iZXJzaGlwOiBudWxsLFxuICAgIH07XG4gICAgc3dpdGNoIChkZWNpc2lvbk1ldGhvZD8udHlwZSkge1xuICAgICAgICBjYXNlIFwiUmFua1wiOlxuICAgICAgICAgICAgZW5jb2RlZERlY2lzaW9uTWV0aG9kID0ge1xuICAgICAgICAgICAgICAgIFJhbms6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJOYXRpdmVUb2tlblwiOlxuICAgICAgICAgICAgZW5jb2RlZERlY2lzaW9uTWV0aG9kID0ge1xuICAgICAgICAgICAgICAgIE5hdGl2ZVRva2VuOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ29tbXVuaXR5QXNzZXRcIjpcbiAgICAgICAgICAgIGVuY29kZWREZWNpc2lvbk1ldGhvZCA9IHtcbiAgICAgICAgICAgICAgICBDb21tdW5pdHlBc3NldDogW2RlY2lzaW9uTWV0aG9kLmlkLCBkZWNpc2lvbk1ldGhvZC5taW5Wb3RlXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGVuY29kZWREZWNpc2lvbk1ldGhvZDtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDb21tdW5pdHlUcmFuc2FjdChrdXNhbWFBcGksIGtyZWl2b0FwaSwgc2lnbmVyQWRkcmVzcywgY29tbXVuaXR5SWQsIG5hbWUsIGRlY2lzaW9uTWV0aG9kKSB7XG4gICAgY29uc3QgZW5jb2RlZERlY2lzaW9uTWV0aG9kID0gZ2V0RGVjaXNpb25NZXRob2QoZGVjaXNpb25NZXRob2QpO1xuICAgIC8vIFBhcnQgMjogQ3JlYXRlIENvbW11bml0eSwgdGhlbiBzZXQgaWRlbnRpdGllc1xuICAgIGNvbnN0IGNyZWF0ZUNvbW11bml0eSA9IGtyZWl2b0FwaS50eC5jb21tdW5pdGllc01hbmFnZXIucmVnaXN0ZXIoY29tbXVuaXR5SWQsIG5hbWUsIHtcbiAgICAgICAgSWQ6IGRlY29kZUFkZHJlc3Moc2lnbmVyQWRkcmVzcyksXG4gICAgfSwgZW5jb2RlZERlY2lzaW9uTWV0aG9kLCBudWxsKTtcbiAgICBjb25zdCBjcmVhdGVDb21tdW5pdHlEaXNwYXRjaEluZm8gPSBhd2FpdCBrcmVpdm9BcGkuY2FsbC50cmFuc2FjdGlvblBheW1lbnRDYWxsQXBpLnF1ZXJ5Q2FsbEluZm8oY3JlYXRlQ29tbXVuaXR5Lm1ldGhvZCwgY3JlYXRlQ29tbXVuaXR5Lm1ldGhvZC50b1U4YSgpLmxlbmd0aCk7XG4gICAgcmV0dXJuIGt1c2FtYUFwaS5jcmVhdGVUeXBlKFwiU3RhZ2luZ1hjbVY0SW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICBUcmFuc2FjdDoge1xuICAgICAgICAgICAgb3JpZ2luS2luZDogXCJTb3ZlcmVpZ25BY2NvdW50XCIsXG4gICAgICAgICAgICByZXF1aXJlV2VpZ2h0QXRNb3N0OiBjcmVhdGVDb21tdW5pdHlEaXNwYXRjaEluZm8ud2VpZ2h0LFxuICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgIGVuY29kZWQ6IGNyZWF0ZUNvbW11bml0eS5tZXRob2QudG9IZXgoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4iLCJpbXBvcnQgXCJAcG9sa2Fkb3QvYXBpLWF1Z21lbnQva3VzYW1hXCI7XG5pbXBvcnQgeyBBcGlQcm9taXNlIH0gZnJvbSBcIkBwb2xrYWRvdC9hcGlcIjtcbmltcG9ydCB7IGxvY2F0aW9uLCBmdW5naWJsZUFzc2V0IH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0IHsgdG9wdXBDb21tdW5pdHlBY2NvdW50SW5LcmVpdm8sIHRvcHVwQ29tbXVuaXR5QWNjb3VudEluUGVvcGxlLCB0b3B1cFNpZ25lckFjY291bnRJbktyZWl2bywgfSBmcm9tIFwiLi90b3B1cC1hY2NvdW50c1wiO1xuaW1wb3J0IHsgY3JlYXRlQ29tbXVuaXR5VHJhbnNhY3QgfSBmcm9tIFwiLi9jcmVhdGUtY29tbXVuaXR5XCI7XG5pbXBvcnQgeyBzZXRJZGVudGl0eVRoZW5BZGRTdWJzU2VuZFRyYW5zYWN0IH0gZnJvbSBcIi4vc2V0LWlkZW50aXR5XCI7XG5pbXBvcnQgeyBhY3F1aXJlTWVtYmVyc2hpcHNBbmRBZGRNZW1iZXJzIH0gZnJvbSBcIi4vYWNxdWlyZS1tZW1iZXJzaGlwcy1pbnZpdGUtbWVtYmVyc1wiO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvcHVwVGhlbkNyZWF0ZUNvbW11bml0eShcbi8vIEluamVjdGVkIHBhcmFtZXRlcnNcbnByb3ZpZGVycywgYWRkcmVzcywgc2lnbmVyLCBcbi8vIFByb3ZpZGVkXG5jb21tdW5pdHlJZCwgbmFtZSwgZGVjaXNpb25NZXRob2QgPSB7IHR5cGU6IFwiTWVtYmVyc2hpcFwiIH0sIGlkZW50aXR5LCBtZW1iZXJzaGlwQWNjb3VudHMgPSBbXSwgdG9wdXAgPSB7XG4gICAgc2lnbmVySW5LcmVpdm86IDAuNTFlMTIsXG4gICAgY29tbXVuaXR5QWNjb3VudEluS3JlaXZvOiAxZTkgKyAwLjNlMTIgKiBtZW1iZXJzaGlwQWNjb3VudHMubGVuZ3RoLFxuICAgIGNvbW11bml0eUFjY291bnRJblBlb3BsZTogaWRlbnRpdHkgPyAwLjExZTEyIDogMCxcbn0pIHtcbiAgICBjb25zdCBrdXNhbWFBcGkgPSBhd2FpdCBBcGlQcm9taXNlLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyOiBwcm92aWRlcnMua3VzYW1hLFxuICAgIH0pO1xuICAgIGNvbnN0IGtyZWl2b0FwaSA9IGF3YWl0IEFwaVByb21pc2UuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXI6IHByb3ZpZGVycy5rcmVpdm8sXG4gICAgfSk7XG4gICAgY29uc3QgcGVvcGxlQXBpID0gYXdhaXQgQXBpUHJvbWlzZS5jcmVhdGUoe1xuICAgICAgICBwcm92aWRlcjogcHJvdmlkZXJzLmt1c2FtYVBlb3BsZSxcbiAgICB9KTtcbiAgICAvLyBQYXJ0IDE6IFRyYW5zZmVyIGFzc2V0c1xuICAgIGNvbnN0IHRyYW5zZmVyQXNzZXRzRXhlY3V0aW9uID0ga3VzYW1hQXBpLnR4LnhjbVBhbGxldC5leGVjdXRlKHtcbiAgICAgICAgVjQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiBbXG4gICAgICAgICAgICAgICAgICAgIGZ1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4vSGVyZWAsIHRvcHVwLnNpZ25lckluS3JlaXZvICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcHVwLmNvbW11bml0eUFjY291bnRJbktyZWl2byArXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3B1cC5jb21tdW5pdHlBY2NvdW50SW5QZW9wbGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgNWU4KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZmVlczogZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi9IZXJlYCwgNWU4KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLih0b3B1cC5zaWduZXJJbktyZWl2b1xuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0b3B1cFNpZ25lckFjY291bnRJbktyZWl2byhrdXNhbWFBcGksIGFkZHJlc3MsIHRvcHVwLnNpZ25lckluS3JlaXZvKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAuLi4odG9wdXAuY29tbXVuaXR5QWNjb3VudEluS3JlaXZvXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRvcHVwQ29tbXVuaXR5QWNjb3VudEluS3JlaXZvKGt1c2FtYUFwaSwgY29tbXVuaXR5SWQsIHRvcHVwLmNvbW11bml0eUFjY291bnRJbktyZWl2byksXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgLi4uKHRvcHVwLmNvbW11bml0eUFjY291bnRJblBlb3BsZVxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0b3B1cENvbW11bml0eUFjY291bnRJblBlb3BsZShrdXNhbWFBcGksIGNvbW11bml0eUlkLCB0b3B1cC5jb21tdW5pdHlBY2NvdW50SW5QZW9wbGUpLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBSZWZ1bmRTdXJwbHVzOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBEZXBvc2l0QXNzZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBXaWxkOiBcIkFsbFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiZW5lZmljaWFyeTogbG9jYXRpb24gYC4vQWNjb3VudElkMzIoJHthZGRyZXNzfSlgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH0sIHtcbiAgICAgICAgcmVmVGltZToga3VzYW1hQXBpLmNyZWF0ZVR5cGUoXCJDb21wYWN0PHU2ND5cIiwgMWUxMCksXG4gICAgICAgIHByb29mU2l6ZToga3VzYW1hQXBpLmNyZWF0ZVR5cGUoXCJDb21wYWN0PHU2ND5cIiwgMWU4KSxcbiAgICB9KTtcbiAgICAvLyBQYXJ0IDI6IENyZWF0ZSBDb21tdW5pdHkgYW5kIFNldCBJZGVudGl0aWVzXG4gICAgY29uc3QgY3JlYXRlQ29tbXVuaXR5U2VuZCA9IGt1c2FtYUFwaS50eC54Y21QYWxsZXQuc2VuZCh7XG4gICAgICAgIFY0OiBsb2NhdGlvbiBgLi9QYXJhY2hhaW4oMjI4MSlgLFxuICAgIH0sIHtcbiAgICAgICAgVjQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiBbZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi4vSGVyZWAsIDllOSldLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZmVlczogZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi4vSGVyZWAsIDllOSksXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodExpbWl0OiBcIlVubGltaXRlZFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQ29tbXVuaXR5VHJhbnNhY3Qoa3VzYW1hQXBpLCBrcmVpdm9BcGksIGFkZHJlc3MsIGNvbW11bml0eUlkLCBuYW1lLCBkZWNpc2lvbk1ldGhvZCksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRXhwZWN0VHJhbnNhY3RTdGF0dXM6IFwiU3VjY2Vzc1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLihtZW1iZXJzaGlwQWNjb3VudHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhY3F1aXJlTWVtYmVyc2hpcHNBbmRBZGRNZW1iZXJzKGt1c2FtYUFwaSwga3JlaXZvQXBpLCBtZW1iZXJzaGlwQWNjb3VudHMpLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBlY3RUcmFuc2FjdFN0YXR1czogXCJTdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgLi4uKGlkZW50aXR5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0SWRlbnRpdHlUaGVuQWRkU3Vic1NlbmRUcmFuc2FjdChrdXNhbWFBcGksIGtyZWl2b0FwaSwgcGVvcGxlQXBpLCBjb21tdW5pdHlJZCwgaWRlbnRpdHkpLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBlY3RUcmFuc2FjdFN0YXR1czogXCJTdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgXCJSZWZ1bmRTdXJwbHVzXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2V0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgV2lsZDogXCJBbGxcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmVuZWZpY2lhcnk6IGxvY2F0aW9uIGAuL0FjY291bnRJZDMyKCR7YWRkcmVzc30pYCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9KTtcbiAgICByZXR1cm4ga3VzYW1hQXBpLnR4LnV0aWxpdHlcbiAgICAgICAgLmJhdGNoKFt0cmFuc2ZlckFzc2V0c0V4ZWN1dGlvbiwgY3JlYXRlQ29tbXVuaXR5U2VuZF0pXG4gICAgICAgIC5zaWduQW5kU2VuZChhZGRyZXNzLCB7IHNpZ25lciB9LCAoKSA9PiBjb25zb2xlLmxvZyhcInNpZ25cIikpO1xufVxuIiwiaW1wb3J0IFwiQHBvbGthZG90L2FwaS1hdWdtZW50L2t1c2FtYVwiO1xuaW1wb3J0IHsgY29tbXVuaXR5QWNjb3VudEluS3JlaXZvLCBzb3ZlcmVpZ25BY2NvdW50Rm9yQ29tbXVuaXR5SW5SZWxheSwgfSBmcm9tIFwiLi4vdXRpbHMvY29tbXVuaXR5LWFjY291bnQtaWRzXCI7XG5pbXBvcnQgeyBjb25jcmV0ZUlkZnVuZ2libGVBc3NldCwgbG9jYXRpb24gfSBmcm9tIFwiLi4vY29tbW9uXCI7XG5mdW5jdGlvbiBlbmNvZGVhYmxlSWRlbnRpdHkoaWRlbnRpdHkpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaWRlbnRpdHkpLnJlZHVjZSgobywgW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAuLi5vLFxuICAgICAgICBba2V5XTogdmFsdWUgIT09IHVuZGVmaW5lZCB8fCB2YWx1ZSAhPT0gbnVsbCA/IHsgUmF3OiB2YWx1ZSB9IDogXCJOb25lXCIsXG4gICAgfSksIHt9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHNldElkZW50aXR5VHJhbnNhY3Qoa3JlaXZvQXBpLCBwZW9wbGVBcGksIGlkZW50aXR5KSB7XG4gICAgY29uc3QgeyBtZXRob2QgfSA9IHBlb3BsZUFwaS50eC5pZGVudGl0eS5zZXRJZGVudGl0eShlbmNvZGVhYmxlSWRlbnRpdHkoaWRlbnRpdHkpKTtcbiAgICBjb25zdCBkaXNwYXRjaEluZm8gPSBhd2FpdCBwZW9wbGVBcGkuY2FsbC50cmFuc2FjdGlvblBheW1lbnRDYWxsQXBpLnF1ZXJ5Q2FsbEluZm8obWV0aG9kLnRvVThhKCksIG1ldGhvZC50b1U4YSgpLmxlbmd0aCk7XG4gICAgcmV0dXJuIGtyZWl2b0FwaS5jcmVhdGVUeXBlKFwiWGNtVjNJbnN0cnVjdGlvblwiLCB7XG4gICAgICAgIFRyYW5zYWN0OiB7XG4gICAgICAgICAgICBvcmlnaW5LaW5kOiBcIlNvdmVyZWlnbkFjY291bnRcIixcbiAgICAgICAgICAgIHJlcXVpcmVXZWlnaHRBdE1vc3Q6IGRpc3BhdGNoSW5mby53ZWlnaHQsXG4gICAgICAgICAgICBjYWxsOiB7XG4gICAgICAgICAgICAgICAgZW5jb2RlZDogbWV0aG9kLnRvSGV4KCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24gYWRkU3ViVHJhbnNhY3Qoa3JlaXZvQXBpLCBwZW9wbGVBcGksIHN1YiwgbmFtZSkge1xuICAgIGNvbnN0IHsgbWV0aG9kIH0gPSBwZW9wbGVBcGkudHguaWRlbnRpdHkuYWRkU3ViKHN1YiwgeyBSYXc6IG5hbWUgfSk7XG4gICAgY29uc3QgZGlzcGF0Y2hJbmZvID0gYXdhaXQgcGVvcGxlQXBpLmNhbGwudHJhbnNhY3Rpb25QYXltZW50Q2FsbEFwaS5xdWVyeUNhbGxJbmZvKG1ldGhvZC50b1U4YSgpLCBtZXRob2QudG9VOGEoKS5sZW5ndGgpO1xuICAgIHJldHVybiBrcmVpdm9BcGkuY3JlYXRlVHlwZShcIlhjbVYzSW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICBUcmFuc2FjdDoge1xuICAgICAgICAgICAgb3JpZ2luS2luZDogXCJTb3ZlcmVpZ25BY2NvdW50XCIsXG4gICAgICAgICAgICByZXF1aXJlV2VpZ2h0QXRNb3N0OiBkaXNwYXRjaEluZm8ud2VpZ2h0LFxuICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgIGVuY29kZWQ6IG1ldGhvZC50b0hleCgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRJZGVudGl0eVRoZW5BZGRTdWJzU2VuZFRyYW5zYWN0KGt1c2FtYUFwaSwga3JlaXZvQXBpLCBwZW9wbGVBcGksIGNvbW11bml0eUlkLCBpZGVudGl0eSkge1xuICAgIGNvbnN0IHJlbGF5Q29tbXVuaXR5QWNjb3VudCA9IGF3YWl0IHNvdmVyZWlnbkFjY291bnRGb3JDb21tdW5pdHlJblJlbGF5KGtyZWl2b0FwaSwgY29tbXVuaXR5SWQpO1xuICAgIGNvbnN0IGxvY2FsQ29tbXVuaXR5QWNjb3VudCA9IGF3YWl0IGNvbW11bml0eUFjY291bnRJbktyZWl2byhrcmVpdm9BcGksIGNvbW11bml0eUlkKTtcbiAgICBjb25zdCB7IG1ldGhvZCB9ID0ga3JlaXZvQXBpLnR4LmNvbW11bml0aWVzLmRpc3BhdGNoQXNBY2NvdW50KGtyZWl2b0FwaS50eC5wb2xrYWRvdFhjbS5zZW5kKHtcbiAgICAgICAgVjM6IGtyZWl2b0FwaS5jcmVhdGVUeXBlKFwiU3RhZ2luZ1hjbVYzTXVsdGlMb2NhdGlvblwiLCB7XG4gICAgICAgICAgICBwYXJlbnRzOiAxLFxuICAgICAgICAgICAgaW50ZXJpb3I6IHsgWDE6IHsgUGFyYWNoYWluOiAxMDA0IH0gfSxcbiAgICAgICAgfSksXG4gICAgfSwge1xuICAgICAgICBWMzogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFdpdGhkcmF3QXNzZXQ6IFtjb25jcmV0ZUlkZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi4vSGVyZWAsIDFlOSldLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZmVlczogY29uY3JldGVJZGZ1bmdpYmxlQXNzZXQobG9jYXRpb24gYC4uL0hlcmVgLCAxZTkpLFxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRMaW1pdDogXCJVbmxpbWl0ZWRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF3YWl0IHNldElkZW50aXR5VHJhbnNhY3Qoa3JlaXZvQXBpLCBwZW9wbGVBcGksIGlkZW50aXR5KSxcbiAgICAgICAgICAgIHsgRXhwZWN0VHJhbnNhY3RTdGF0dXM6IFwiU3VjY2Vzc1wiIH0sXG4gICAgICAgICAgICBhd2FpdCBhZGRTdWJUcmFuc2FjdChrcmVpdm9BcGksIHBlb3BsZUFwaSwgcmVsYXlDb21tdW5pdHlBY2NvdW50LCBcIlNvdmVyZWlnbiBBY2NvdW50IGluIEt1c2FtYVwiKSxcbiAgICAgICAgICAgIHsgRXhwZWN0VHJhbnNhY3RTdGF0dXM6IFwiU3VjY2Vzc1wiIH0sXG4gICAgICAgICAgICBhd2FpdCBhZGRTdWJUcmFuc2FjdChrcmVpdm9BcGksIHBlb3BsZUFwaSwgbG9jYWxDb21tdW5pdHlBY2NvdW50LCBcIkNvbW11bml0eSBBY2NvdW50IGluIEtyZWl2b1wiKSxcbiAgICAgICAgICAgIHsgRXhwZWN0VHJhbnNhY3RTdGF0dXM6IFwiU3VjY2Vzc1wiIH0sXG4gICAgICAgICAgICBcIlJlZnVuZFN1cnBsdXNcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBEZXBvc2l0QXNzZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXRzOiB7IFdpbGQ6IFwiQWxsXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgYmVuZWZpY2lhcnk6IGxvY2F0aW9uIGAuLi9QYXJhY2hhaW4oMjI4MSkvUGx1cmFsaXR5KEluZGV4KCR7Y29tbXVuaXR5SWR9KSxWb2ljZSlgLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH0pKTtcbiAgICBjb25zdCBkaXNwYXRjaEluZm8gPSBhd2FpdCBrcmVpdm9BcGkuY2FsbC50cmFuc2FjdGlvblBheW1lbnRDYWxsQXBpLnF1ZXJ5Q2FsbEluZm8obWV0aG9kLnRvVThhKCksIG1ldGhvZC50b1U4YSgpLmxlbmd0aCk7XG4gICAgcmV0dXJuIGt1c2FtYUFwaS5jcmVhdGVUeXBlKFwiU3RhZ2luZ1hjbVY0SW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICBUcmFuc2FjdDoge1xuICAgICAgICAgICAgb3JpZ2luS2luZDogXCJTb3ZlcmVpZ25BY2NvdW50XCIsXG4gICAgICAgICAgICByZXF1aXJlV2VpZ2h0QXRNb3N0OiBkaXNwYXRjaEluZm8ud2VpZ2h0LFxuICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgIGVuY29kZWQ6IG1ldGhvZC50b0hleCgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGxvY2F0aW9uLCBmdW5naWJsZUFzc2V0IH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0IHsgc292ZXJlaWduQWNjb3VudEZvckNvbW11bml0eUluU2libGluZyB9IGZyb20gXCIuLi91dGlscy9jb21tdW5pdHktYWNjb3VudC1pZHNcIjtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b3B1cFNpZ25lckFjY291bnRJbktyZWl2byhhcGksIHNpZ25lckFkZHJlc3MsIGFtb3VudCkge1xuICAgIC8vIDFhLiBUcmFuc2ZlcnMgYW1vdW50IHRvIHNpZ25lciBhZGRyZXNzIGluIEtyZWl2by5cbiAgICAvLyBUaGlzIGlzIHRvIGNvdmVyIGNyZWF0aW5nIHRoZSBjb21tdW5pdHksIGFuZCBmZWVzLlxuICAgIGNvbnN0IHRyYW5zZmVyVG9LcmVpdm8gPSB7XG4gICAgICAgIFRyYW5zZmVyUmVzZXJ2ZUFzc2V0OiB7XG4gICAgICAgICAgICBhc3NldHM6IFtmdW5naWJsZUFzc2V0KGxvY2F0aW9uIGAuL0hlcmVgLCBhbW91bnQpXSxcbiAgICAgICAgICAgIGRlc3Q6IGxvY2F0aW9uIGAuL1BhcmFjaGFpbigyMjgxKWAsXG4gICAgICAgICAgICB4Y206IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIEJ1eUV4ZWN1dGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlczogZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi4vSGVyZWAsIGFtb3VudCksXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRMaW1pdDogXCJVbmxpbWl0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWxkOiBcIkFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiBsb2NhdGlvbiBgLi9BY2NvdW50SWQzMigke3NpZ25lckFkZHJlc3N9KWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gYXBpLmNyZWF0ZVR5cGUoXCJTdGFnaW5nWGNtVjRJbnN0cnVjdGlvblwiLCB0cmFuc2ZlclRvS3JlaXZvKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b3B1cENvbW11bml0eUFjY291bnRJbktyZWl2byhhcGksIGNvbW11bml0eUlkLCBhbW91bnQpIHtcbiAgICAvLyAxYi4gVHJhbnNmZXIgYW1vdW50IHRvIENvbW11bml0eSBpbiBLcmVpdm8uXG4gICAgLy8gVGhpcyBpcyB0byBzdXBwb3J0IGJ1eWluZyBtZW1iZXJzaGlwcy5cbiAgICBjb25zdCB0cmFuc2ZlclRvS3JlaXZvID0gYXBpLmNyZWF0ZVR5cGUoXCJTdGFnaW5nWGNtVjRJbnN0cnVjdGlvblwiLCB7XG4gICAgICAgIFRyYW5zZmVyUmVzZXJ2ZUFzc2V0OiB7XG4gICAgICAgICAgICBhc3NldHM6IFtmdW5naWJsZUFzc2V0KGxvY2F0aW9uIGAuL0hlcmVgLCBhbW91bnQpXSxcbiAgICAgICAgICAgIGRlc3Q6IGxvY2F0aW9uIGAuL1BhcmFjaGFpbigyMjgxKWAsXG4gICAgICAgICAgICB4Y206IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIEJ1eUV4ZWN1dGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlczogZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi4vSGVyZWAsIGFtb3VudCksXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRMaW1pdDogXCJVbmxpbWl0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWxkOiBcIkFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiBsb2NhdGlvbiBgLi9QbHVyYWxpdHkoSW5kZXgoJHtjb21tdW5pdHlJZH0pLFZvaWNlKWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRyYW5zZmVyVG9LcmVpdm87XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9wdXBDb21tdW5pdHlBY2NvdW50SW5QZW9wbGUoYXBpLCBjb21tdW5pdHlJZCwgYW1vdW50KSB7XG4gICAgLy8gMWMuIFRyYW5zZmVyIGFtb3VudCB0byBQZW9wbGUgQ2hhaW4uXG4gICAgLy8gVGhpcyBpcyB0byBzdXBwb3J0IHRoZSBzZXR0aW5nIG9mIGlkZW50aXRpZXNcbiAgICBjb25zdCB0ZWxlcG9ydFRvUGVvcGxlID0gYXBpLmNyZWF0ZVR5cGUoXCJTdGFnaW5nWGNtVjRJbnN0cnVjdGlvblwiLCB7XG4gICAgICAgIEluaXRpYXRlVGVsZXBvcnQ6IHtcbiAgICAgICAgICAgIGFzc2V0czoge1xuICAgICAgICAgICAgICAgIERlZmluaXRlOiBbZnVuZ2libGVBc3NldChsb2NhdGlvbiBgLi9IZXJlYCwgYW1vdW50KV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdDogbG9jYXRpb24gYC4vUGFyYWNoYWluKDEwMDQpYCxcbiAgICAgICAgICAgIHhjbTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgQnV5RXhlY3V0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVzOiBmdW5naWJsZUFzc2V0KGxvY2F0aW9uIGAuLi9IZXJlYCwgYW1vdW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodExpbWl0OiBcIlVubGltaXRlZFwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBEZXBvc2l0QXNzZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2V0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbGQ6IFwiQWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVuZWZpY2lhcnk6IGxvY2F0aW9uIGAuL0FjY291bnRJZDMyKCR7YXdhaXQgc292ZXJlaWduQWNjb3VudEZvckNvbW11bml0eUluU2libGluZyhhcGksIGNvbW11bml0eUlkKX0pYCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGVsZXBvcnRUb1Blb3BsZTtcbn1cbiIsImltcG9ydCBcIkBwb2xrYWRvdC9hcGktYXVnbWVudC9rdXNhbWFcIjtcbmltcG9ydCB7IEFwaVByb21pc2UgfSBmcm9tIFwiQHBvbGthZG90L2FwaVwiO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvcHVwVGhlbkluaXRpYXRpdmVWb3RlKFxuLy8gSW5qZWN0ZWQgcGFyYW1ldGVyc1xucHJvdmlkZXJzLCBhZGRyZXNzLCBzaWduZXIsIFxuLy8gUHJvdmlkZWRcbm1lbWJlcnNoaXBJZCwgcG9sbEluZGV4LCB2b3RlKSB7XG4gICAgY29uc3Qga3JlaXZvQXBpID0gYXdhaXQgQXBpUHJvbWlzZS5jcmVhdGUoe1xuICAgICAgICBwcm92aWRlcjogcHJvdmlkZXJzLmtyZWl2byxcbiAgICB9KTtcbiAgICByZXR1cm4ga3JlaXZvQXBpLnR4LmNvbW11bml0aWVzLnZvdGUobWVtYmVyc2hpcElkLCBwb2xsSW5kZXgsIHtcbiAgICAgICAgU3RhbmRhcmQ6IHZvdGVcbiAgICB9KS5zaWduQW5kU2VuZChhZGRyZXNzLCB7IHNpZ25lciB9LCAoKSA9PiBjb25zb2xlLmxvZyhcInNpZ24gdm90ZVwiKSk7XG59XG4iLCJpbXBvcnQgeyBlbmNvZGVBZGRyZXNzIH0gZnJvbSBcIkBwb2xrYWRvdC91dGlsLWNyeXB0b1wiO1xuaW1wb3J0IHsgY3JlYXRlQkxBS0UyYiB9IGZyb20gXCJoYXNoLXdhc21cIjtcbmZ1bmN0aW9uIHJlZ2lzdGVyVHlwZXMoYXBpKSB7XG4gICAgYXBpLnJlZ2lzdGVyVHlwZXMoe1xuICAgICAgICBIYXNoZWREZXNjcmlwdG9yOiBcIlZlYzx1OD5cIixcbiAgICAgICAgXCJGYW1pbHlEZXNjcmlwdG9yPENoaWxkPlwiOiBcIihbdTg7IDEwXSwgQ29tcGFjdDx1MzI+LCBWZWM8dTg+KVwiLFxuICAgICAgICBcIkZhbWlseURlc2NyaXB0b3I8U2libGluZz5cIjogXCIoW3U4OyAxMl0sIENvbXBhY3Q8dTMyPiwgVmVjPHU4PilcIixcbiAgICAgICAgQm9keURlc2NyaXB0b3I6IFwiKFt1ODsgNF0sIFhjbVYzSnVuY3Rpb25Cb2R5SWQsIFhjbVYzSnVuY3Rpb25Cb2R5UGFydClcIixcbiAgICAgICAgQ29tbXVuaXR5QWNjb3VudDogXCIoW3U4OyAxMl0sIHUxNiwgW3U4OyAxOF0pXCIsXG4gICAgfSk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tbXVuaXR5QWNjb3VudEluS3JlaXZvKGFwaSwgY29tbXVuaXR5SWQsIGZvcm1hdCA9IFwic3M1OFwiKSB7XG4gICAgcmVnaXN0ZXJUeXBlcyhhcGkpO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBhcGkuY3JlYXRlVHlwZShcIkNvbW11bml0eUFjY291bnRcIiwgW1xuICAgICAgICBcIm1vZGxrdi9jbXR5c1wiLFxuICAgICAgICBjb21tdW5pdHlJZCxcbiAgICAgICAgQXJyYXkoMTgpLmZpbGwoMCksXG4gICAgXSk7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSBcInNzNThcIjpcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKGFkZHJlc3MudG9VOGEoKSwgMik7XG4gICAgICAgIGNhc2UgXCJ1OGFcIjpcbiAgICAgICAgICAgIHJldHVybiBhZGRyZXNzLnRvVThhKCk7XG4gICAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNvdmVyZWlnbkFjY291bnRGb3JDb21tdW5pdHlJblJlbGF5KGFwaSwgY29tbXVuaXR5SWQsIGZvcm1hdCA9IFwic3M1OFwiKSB7XG4gICAgcmVnaXN0ZXJUeXBlcyhhcGkpO1xuICAgIC8vICgwLCBYMShQbHVyYWxpdHkgeyBpZCwgcGFydCB9KSlcbiAgICBjb25zdCBpbnRlcmlvciA9IGFwaS5jcmVhdGVUeXBlKFwiQm9keURlc2NyaXB0b3JcIiwgW1xuICAgICAgICBcIkJvZHlcIiwgLy8gQm9keVxuICAgICAgICB7XG4gICAgICAgICAgICBJbmRleDogY29tbXVuaXR5SWQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFZvaWNlOiBudWxsLFxuICAgICAgICB9LFxuICAgIF0pO1xuICAgIC8vICgwLCBYMShQYXJhY2hhaW4oMjI4MSkpKVxuICAgIGNvbnN0IGZhbWlseSA9IGFwaS5jcmVhdGVUeXBlKFwiRmFtaWx5RGVzY3JpcHRvcjxDaGlsZD5cIiwgW1xuICAgICAgICBcIkNoaWxkQ2hhaW5cIixcbiAgICAgICAgMjI4MSxcbiAgICAgICAgYXBpLmNyZWF0ZVR5cGUoXCJWZWM8dTg+XCIsIFsuLi5pbnRlcmlvci50b1U4YSgpXSksXG4gICAgXSk7XG4gICAgbGV0IGhhc2hlciA9IGF3YWl0IGNyZWF0ZUJMQUtFMmIoMjU2KTtcbiAgICBoYXNoZXIudXBkYXRlKGZhbWlseS50b1U4YSgpKTtcbiAgICBjb25zdCBoYXNoID0gaGFzaGVyLmRpZ2VzdChcImJpbmFyeVwiKTtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlIFwic3M1OFwiOlxuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUFkZHJlc3MoaGFzaCwgMik7XG4gICAgICAgIGNhc2UgXCJ1OGFcIjpcbiAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzb3ZlcmVpZ25BY2NvdW50Rm9yQ29tbXVuaXR5SW5TaWJsaW5nKGFwaSwgY29tbXVuaXR5SWQsIGZvcm1hdCA9IFwic3M1OFwiKSB7XG4gICAgcmVnaXN0ZXJUeXBlcyhhcGkpO1xuICAgIC8vICgwLCBYMShQbHVyYWxpdHkgeyBpZCwgcGFydCB9KSlcbiAgICBjb25zdCBpbnRlcmlvciA9IGFwaS5jcmVhdGVUeXBlKFwiQm9keURlc2NyaXB0b3JcIiwgW1xuICAgICAgICBcIkJvZHlcIiwgLy8gQm9keVxuICAgICAgICB7XG4gICAgICAgICAgICBJbmRleDogY29tbXVuaXR5SWQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFZvaWNlOiBudWxsLFxuICAgICAgICB9LFxuICAgIF0pO1xuICAgIC8vICgxLCBYMShQYXJhY2hhaW4oMjI4MSkpKVxuICAgIGNvbnN0IGZhbWlseSA9IGFwaS5jcmVhdGVUeXBlKFwiRmFtaWx5RGVzY3JpcHRvcjxTaWJsaW5nPlwiLCBbXG4gICAgICAgIFwiU2libGluZ0NoYWluXCIsXG4gICAgICAgIDIyODEsXG4gICAgICAgIGFwaS5jcmVhdGVUeXBlKFwiVmVjPHU4PlwiLCBbLi4uaW50ZXJpb3IudG9VOGEoKV0pLFxuICAgIF0pO1xuICAgIGxldCBoYXNoZXIgPSBhd2FpdCBjcmVhdGVCTEFLRTJiKDI1Nik7XG4gICAgaGFzaGVyLnVwZGF0ZShmYW1pbHkudG9VOGEoKSk7XG4gICAgY29uc3QgaGFzaCA9IGhhc2hlci5kaWdlc3QoXCJiaW5hcnlcIik7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSBcInNzNThcIjpcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVBZGRyZXNzKGhhc2gsIDIpO1xuICAgICAgICBjYXNlIFwidThhXCI6XG4gICAgICAgICAgICByZXR1cm4gaGFzaDtcbiAgICB9XG59XG4iLCIvKiAoaWdub3JlZCkgKi8iLCIvLyBDb3B5cmlnaHQgMjAxOS0yMDIzIEBwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtIGF1dGhvcnMgJiBjb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8vIEdlbmVyYXRlZCBhcyBwYXJ0IG9mIHRoZSBidWlsZCwgZG8gbm90IGVkaXRcblxuZXhwb3J0cy5sZW5JbiA9IDE3MTAwODtcblxuZXhwb3J0cy5sZW5PdXQgPSAzMzk0Njg7XG5cbmV4cG9ydHMuYnl0ZXMgPSAnZU5xa3ZRbVlYVmQxNTN2dXVWUFZ2VFhjbXFUU2ZPcEt0bVZic2thWEpNdll1Z1UyVHVqM21pOHZMMSsrOS9YM1pObVN3U1hqb1N4c2VKOWlGMWd5NG9VRWhaaEVCUElpR2hMVUVBVXhCVGtoSUlpVFZoTjNFTU1EQWFZUmdRUjNRa0RCZE1lQWcvdjNYMnVmYzRjYU5DRFpPdnVzcy9mYWE2Mjk5dHBycnozY2FOZURyOGxGVVpUN3g5eUsyK05ISDQxdXp6K3FmM1A4ejJ2dVVYdm5rZE0vQmRKOEtPckJzMlJQRWhIZndndXBzcWV5akdsQngvTEk3WkZWOG9oWDhBai9rdXdPWlZTcWtxVlZwS3Y1SVVVc3FoNEp4RDFpaEQ1aUdSL3hQOElRa25vcDJvc3pSblc1UjZMNFEzRlgvdUU3WHJWdzU4Nkg3N2o3M3QydjJuUHZ6cnNmM1BuYWUzZnZ1ZXZ1ZS9mc2pvcjZ1cmpsNjMxM1RPNjVjOS9PM1ZQMzNiOXphczlkVWF3TVM1VGhWVHNmM0hQUFhUczMzTEZsMTZadGV6YnQycmJ4em0yYnQ5MFpkU3ZITXM5eDU5VHI3OTkzMzg1dDQxdnYyckJseThhTlc3ZnMyYmo3cnZWZXpaV2U1MVY3OXYzU3JudDMzL2VhWDlsMXoydjNQTGh6MTZiZG16YmZzZm11UFhzMjNibHg2L2cyejd6Y00wL3RlZUMxZDAvdDJUbStmdlBXVFZzMmI5eDYvYWFOdTdaczJoVGw1OEY0MS9WN05temVCWjEzYnQyemJkdjF1Nk9jTWw4Uk1Gck9XKysrNTU3LzQvWDMzcmx6OS9WMzdONjRlL3o2NisvYWZkZkc2OGQza2ZlaitRL25jNE5EMFhDVXk1VXF1YWhjaVhPNWZCVGw0MEpjTGhXcnBSendxTnBWS3BlNnlpUEZYQ0VxNS9MbFhGY1VsYU9vaW9ibDRxNG9GK1VLUFpUSjV5dFY4aXRWNk1uRjVWeFVpSExGYUVHdUREUmZXRGhhMFpPM1BOQlNGRk11S3VlakdEU0NVVEpYakVHWjZ5NUVYYmw4VVhBSWlDS2wrTWovK1ZJcGpoWkZmQzRCam5NbC9oYXBMODRWUWFBQzBlTFkva1RGL29pUFViUkVLS0VsenZHM0o1K3Y1Y1ZmdmlzcXFMNm9VQ3FDTnRjUFFibW9WNTBHekhFWm9uaVBDdmx1YUl5RUoxb3Fwa3ZGY2ttY2xpRThONUNqYksxWTZoMlF4R0NCejZxSEY3Z3FVU0hGb21WeG5DL0V1ZTdlN2pnR3hpZjRNUnB6UmFUUW5TZFY0di84Y3NSTCtYeVVMNUFCMVBwai9aZ0tLVlBzNit2TEZ4RllvWmk3UC9lS1Y4QnlORlRxcHZzMXBxZFBSZFh5Vzh2WGxGNno1elgzVGIwK2pnYjN2Rzdmemp2dXZuL1ROblRtM2oxVHUvYnRpVjQ2M0FTaXVudnUzWWZxdno3NjNkeG9HL3cxZDk5N054M2d6cWs5KzZMYkI5bytQYmlIampUY2d2dWhYZmZjdlZ1NGY2a200SjdkTysrYXV1ODFudSt4WERYQUhyejdWZmRHSzN2RDIwTjdwdTYrNi9YUmdIMjk0NTVkZS9kc3ZDTzZ0bDl2cjM3TnJqdDNQdmpxWGFobnRMWU5jdjJHamRIQm5LSFl1K2ZPTzNmdFZaYUhXOTZWNFIyNWlnRDMzN0VYRFk5KzM5OGV0SjRhYmZBWHgvMWI0WlBqL2FOY2w5NzJQWHpmNjZMVkkvWmh6NTMzNzd6L3RYZnN2UE8rMTl3L3RlZkJCNlAzNUliYVB1eDUzZjMwcnVoSXpvUmg0Q2JuLzdjSnc0QlRlKzY4RDRhajdVYXFnVXdhNnhmYis5VE8zVWpqb1QwdzhmcjdkOTA5dGZQVnU2WjJSK056Zkh6d3ZydjJSY21pOW85UWM4L2R5RWpmYnZLS3AxcG8rUlVUTXlDcjlob25ZeXB0aEpHZThMN3JWVk43OWtUYjdQV2hxYnM4ZDZVdmZRM1plMVpPdmZiQmZlSUNLZTdkc1BPaDlUczM3OXlBbE83ZHA1eW9qSFRoVUx4cTNteTc5enlJNXIwKyt2MTQvYXo1c05pN1hudlB2cDBZcmoydjJuWFB6anQzM1hQUEhidnUzTHZ6cm51akQrYXZtN2ZNbnFtcCs2WTZTcXhvTWZxN2R1ODJSZDZuci9mZmR6Y1VUVVYva085dnlYS1hKSEV3UDlBQ2VnMzQ3cnN6T2gwUHRnQmgxcURmaTRkYm9IdGVkeS9ZNzV2YUUvMXV2dnV0R0tWR3J2cUxKL09IOHgvSS80L2M3K1dQNUw4ZUg4ay9tZi90L1AvelF1N0ovTmZpMzR5ZnpOLzd5aWZ5Si9JZndoamZ1dlBKL0VOUDhuM3piK1orelBkMzV2ODQvMjg4dC81ZkovSWZJY2Z2a08vSi9ISCtmekwvWjVSYyttVCt6M2s4bnZ1RDNBbXNlWnJoRy9HYktQUlU3dU5BbnN4L08vZXgvSi9tcHo2WS8yQys4dlVqbFEvbm43c3BkOXVqU1pSRXErUGI2NVVrbmh5UGIwK2lSakk1ZGt0U2Fkejh3RmdsdnlPSkc2ZWlwTEszZnZNdjNGTFlrVlNTV3lhVFhISno3YzdGWHZCWDY1WEc2RDZ5ZCszRC9MeFFmbUJLNlljYTB6L0xQMEJxOUtHcHFYcGVHZi9EUldRc05CWTluQlFhZlE4L3lMLzVoeDZjVk1HWFhVUkJpRmtkSnhlUmNWUVpWMTFFeGo2UjBtZWs5QmtwazBtKzBmOHcvL1FDeWpjcWdPcEZZYnZ4SXJDTktPT09pOGk0UU5VdXNHb1hoR29wdWZraVNtNVN4cTBYa1hHenF0aHNWV3gySWVldGtsZGVSTmwxeXJqbUlqTDJLT1A2aThoWUVUVVZvNmJTWlBpMmVra2xTeTBsU1llU2ZGTEo5Y3E0K2lJeTlxcUtYcXVpVjFVa2ZWUlNVR01XckRFTDNwZ2xRVW9HS1Rta0xFalpJR1dIZEFuU1paQXVoM1FidmI5Y3I0cU1hZ3NacEFNWmZCSVoxNHVNNjQyTTY0Mk1kWk5KbDVYK2R4ZFJlb05LYjdEU0c2ejArc21rUEprc0ZuaXhnUmNiZU1Ga1VwcE1SZ1FlTWZDSWdUZkQ4V1N5U2VCTkJ0NWs0TXBrY3YxazBpTndqNEY3RE53N21XeVlUSXBpdG1qTUZwM1pxaUJWZzFRZDBpOUl2MEg2SFRJZ3lJQkJCaHd5Sk1pUVFZWWNNaXpJc0VHR0hiSlFrSVVHV2VpUVJTSnFrUkcxeUlqS0M1QTNRTjRBVUQ0d21hd1RlSjJCMXhrWXl2c25rL1VDcnpmd2VnTXZua3lxazBtMzZ1bTJlcnE5bmlXQ0xESElFb2NzRldTcFFaWTZaSm1FQWI2aTRTc2FQc1E1Tkprc1U5NWxsbmVaNTEwT1lySjJXOVp1eXpxQXZuVUoyR1hBTGdOQ0kyakxBcGNOWERZd05DNmxDUVV1R2JoazRPSmtzbVFTUVZEYklxdHRrZGUyUXBBVkJsbmhrRVNReENDSlE4WUVHVFBJbUVQcWswaVpHaFphRFF1dEJtb2RtNlE1QUE4YmVOakExSnJBcWNCREJoNHlNR3EvQXZFTFBHRGdBUU9qejRzUXY4RDlCdTQzTUlxNkVQRUxYRFZ3MWNBbzZ2QmtzbHprTFRmeWxqdDVLd1ZaYVpDVkRsa2x5Q3FEckhMSUZZSmNZWkFySEhLbElGY2E1RXFIWENYSVZRYTV5aUdyQlZsdGtOVU91VnBFWFcxRVhXMUVMUk5nbVFHV0dRREtyNkJSQkY1cTRLVUdodkpWTklyQVN3eTh4TURveE1ySnBLNTY2bFpQM2V1NVJwQnJESEtOUTY0VjVGcURYT3VRTlJJRytKWWJ2dVdHRDNGZU9abXNVZDQxbG5lTjUxMExZckxXTFd2ZHNsNkJtbzBKT0diQU1RTkNJMmdUZ1JNREp3YUd4bXRwUW9GWEdIaUZnWmRQSnRkTUlnaHF1OXBxdTlwcnUwNlE2d3h5blVQR0JSazN5TGhEdGdpeXhTQmJITEoxRWlsVHcycXJZYlhWUUsxYkpta093RmNaK0NvRFUrczRuQXA4cFlHdk5EQ0tlaDNpRi9nS0ExOWhZQlQxYXNRdjhDb0Ryekl3aXJvYThRdTgwc0FyRFl5aVhqV1pyQlY1YTQyOHRVN2VSa0UyR21TalE3WUpzczBnMnh4eWd5QTNHT1FHaDJ3WFpMdEJ0anZrUmtGdU5NaU5EdGtoeUE2RDdIQklJN2t4dVNIWm1LeEpya25Ha2hYSndtUW82VStLeWJwa0FUNlZlU1ZMNnkvWG8xWWZiU3grT0JsdGpGQjZ0RkYrMkwyZzBmcUVIc1AxbHdCOUlKbGdvR3djK2VheEp3cVQ5VUY5NktuZk5sbkhuUGNrbzVOSmIvS1N5YVF2bVpnMDNDOTU4QUgrSnkyOEZjTmJNYnlOMzNyek45NWNucXkvVkFpNjZyZE9NbXhUZ095alpPOVI5aDdMM3VQWlAzVG9oYzhYOXRaZnB1eUYrazJUOVY2eTk1QzlRdlplWmUrMTdMMmUvZXVuajMwNHQ3ZitDOG9lUVZ1OUJuVzlaTzhoZTAzWmE1YTlGcklmK1Bwbjg1UDFYMHh1QmV0TlUyQk5iaktQWWJtb0hqS3FLNUxHNEdTOUQ2N0JrWXlJVjhhMm5tUVRjTkkxMFBjcWo5QVBHdnBCUi84djczbnFjOFZKM0tSSzBqY0ZaajFCM3lmMGZZYSt6OUcvRkRGTTRySFZra0dRMVlDTUNObUlJUnR4Wk0vODVBM2ZMKzJ0YjZaaWtGVmd5WkQxQ0ZtUElldHhaQzlEU0dKOE1Ca0IyZUNzakgvZ003LzV2dUplV2dIcFFKQ1E5WUtzVjhoNkRWbXZJL3NGWjF4OGcyeGtWamFmZmYrM1BoV3JqWHBGV1EvU21JUE5YelEyY1JjR05XTFc1RStNYUpCYzBNTDRBcUZmWU9nWE9QbzMvT2x2UEpHYnhOODJ4bnZuWm54VHh2aUNPUm4vNUsvLzlidmpTWnpLQ3pHK09XTmN5QmJNeXZoZi92UkR4MmpmOVJkay9HTGE5MGQvOXVPMzB6RTJYSkJOYjEra1dKQXU1dEZOOE9LWUxHaHA4WmxTZk9PN0R2NjR2QmVHTHNUNDRzazZYYUtQbGhIamF2RStJZXN6WkgyTzdLcy9mT3U3MGNVUmFnY1pqUE1FV1Y3SThvYU0yWXFRclp1c1l5M2dKSlBpekM3K2x0OC8vRngrYjMwQlNBckdPRStRRllTc1lNandsb1ZzUGJNZkdRRFFnYXh2VmdQd3FUOSsyOWN4QUlzUlRoR0NIdEFUWkVVaEt4b3kvRW9oMjJCczFuQ0g1SHBXa3g0OElMeDBSRG1md2ZqSitjZmZDUG8rYUFSOVFiUUsvVXpHTVJnd1htb3hEeVVoS3hteWtpUDc2ejkvL0dlUnBHT01GK2RtZk1RWUwwT2drRWw5eWtKV05tUmxSL2IwWDM3NEtJcmRlMEhHRnhqalZaQ1ZRVllDVWhXeXFpR3JPcklmbkgzdkQwQld1eUNiS0F0czRsZDJ5NHNzeXprdXlTUHJKMTBGZlprOC9VTGZiK2o3SGYzNzMveUZMMUpzNElLTTB3Tmh2RVR6OUlPc09xc1VuL25pWi82ZVROVUxNazRQaEhGSlVjajZaNVhpMTM3ckh6NU9KK3kvSU9QMFFEam9hcEZpbDVCMUdiSXVSL1luMzNqOGsvU1NvUXV5V1RNMjhXKzc1QktYNWVlVjVBVjNrKzRLVXV3VyttNUQzKzNvZi91NWs1L0VoZzlma1BFQlk1eDJTYnBCMWpXckZFK2VlTzVGeGxrMXlmeU1WNDF4U1ZISXVtZVY0cFBUdjNjUVpOVUxNdDV2ak04dnhkOTQ5c1hUbUlmK0M3STVaR3lhRlBFcHkzSmpTNXJ2ekMvRko3L3hyUzh3ZUttUjVtZDhPUFRvK2FUNCtiLytUK05NTlMvSU55MFNPdlRjUXZ6dUY5Nzdib2E5Z1F2eVRZdkE5L3hDUFBqMlovNkNEcTBXbVo5TFdnUXVUWWk0OFdYNXR5VjU3dk1MOGVSbnZuY2U5T28yOHpOT0cxbUhuaytJTDN6OVEvOGRHb1l1eURndEVqcjAzRkw4N2Q4Nzl3NXFWSlBNenpoTmNzRU8vYVYvK0UvSFNoZGp0MmlTdEVNemt5cHJUbEhTakc1K0tmNzUyNDk5Qk9OellVdEdJMTJ3UTMvaG4zLzBMNHozRjdaa05Na0ZPL1JQLytqajM3c29TMGFUWExCRGYvTlBwdi94RXV5V1NaRTVWbG56dUpLbVZmTkw4V01mK1oxUGdmNWlMZG44VWp6ODN6Ly96eGlmaTdWazgwdnhHOC84N1ZPWFlNbm1sK0ozUC9qUjV5N0JicGtVbWRlV2s3V1NJbFBaK2FYNHpIUHYvQnZRWDZ3cG0xK0tQMzNpUDM4elVwTmNuQ21iWDRyblQ3My9NZXppeFpxeSthWDRPMi84N2Y4S3NvczFYQ1pGWWdubFpKdWtTUGhnZmlrZU92dU5md0g5eFpxeSthWDQ5UGZmL1djWTJZczFaZk5MOFdNLy9zd2ZVdVBGbXJMNXBmaVJkNXcvYlQ3bHhSa3VwSGlOQWliWFdNRGtHZ3VZWUNZM1RpWmJGY1RZYWtHTXJTSFlLMit5bkd5WHVJbnR6Qy91ejM3cDcvNG5uQys4U0pzM3Y3Zy85OFJ6ejhENXhkcTgrY1g5M0RlZi9EUWp4OFhhdlBuRi9mMkRuM3d2NDhTaWk3UndpSHVOeEwzR3hMM0d4STA5dllGd25NRFhHdmhhQTJOY1VleVpBZmFaUWZnQmI1Y2RhaGZGdU9kdGx4Lzg5ZHYvQ29KTEZ4VGx3aURLWnJ2TUZPWDMzdnJmdnNyQXR2Q2lyV2c1YTVlWm9ueitwOTkrQjhndTJvck95K2JqMHdkK3dpaDVZWnU1eU5pc0ppOW45WE1wYTVxM1haQVhkS2VUcG5hU1RYYWROYlVUNGthc0EzVjd6Y1puQ2FwWVMwc21LTFpXR3JMV05HU3RhUWdEQjMxeDVvTExnQUx1MVphR216bXBmUHNmZmZJYkRNd3k4TlJBL0pHb1d6RXBHUTg4YlJrTjRrcEdITXRoNHB2TWVUSjNrZmtsa0xpV1VEQUVYV2NFWGVjcmlVdytHeUtuWWVRMGpCeFhUdWFrYzNiSU41OTh4eUdtS0JvZ3dEOE0vcHRnRjJKTVdpSm1wZzZRdVVEbUFwbXZJM3dMSVJ1TmtJMU95STJ6eUVXTEZ0SkFFYUxwNjB3Ti9NM2YvTE9uY1FyS2lHQjBFdXcxc0ZlODRVcFp3ODFVSVlrd1N1TGs1cjFqc1JiSEo4ZHlqV2lzMHBPclZwTzR1V2dlczJoZXJmN2VkZkUxajVSWWRtOGNaalJhazBSWDU3ZGlQbmlzcHg5RmpaTkExMTZkaitwWDhIS0VsK3YwY3ZYKy9mV2wrNU9sRXovK3pQUHYvSzMzZk9UODE2T0RFOG1iNjBzbjN2cTJYMy9UMTg2KzhlelhvbDhqMG5MRndZblZiNjZQN0s4dlM1WWVuRmovWnZyNTR2MnNlbzhjbk1pOXVWNVhOYXZycVBuVitVU0w1bzBUVkxCT0ZWeVpyTkZqRmZXTTdJZFlDdnpUVHg3LzJxYys5ajgvdmNKcVdqN3hnZk5mL05FSHYvK0pqOSs0djU0a1YxcEZTL1pyY2YvcS9PMzFIQVhIbEh5MXl0Y0pjcE1lOVJwcjlaVlVkVXpzcW82cmVEbkV5M3E5WEVPNUZmdVRGUk4vY1BiSFgvM01iMzN0amU5ODFLcGJNZkZYSC9yL3YvcStEejd4OUZNd1ZrNnVzdm9LKzltbkFEMHcxbVhadW9XL3kydU82aXZBZkJUTUcvU3lXckRwWFAxYWFsaXdYeStuY3NtQ2d4T2ZQL2g3UC9qSjU1NTQwK2RkZ2dzbURyM3R1ZDkvOGVrZkgvakhhRDhyK3F1dG9uZy8wUnN5VTFFMUtRTGZYKyt6RHozN2ljU0E2emJoekNmTExVcytTZmJUNjVhWWtKZlEzbVI0WlgwNUZWdnlWK3ZKL21RSmtmaEtVclU2Ui9mWHlRdTJ5bjdRanhxT3dRUmg5aWNWeHhGS3ZvNnNsR1J2UmxLMEQ4VmttZUQzazBOdHpOZDhzc3h3THBNNXBEbjJTMzBOT1c5a04rU3haVEZWTmpTRUNJVm1SMzBaYUFxSnNWSklTcGFybEF5QUpoVjNyNkNtUjJEbXZ3SDdNTFFmeXdwVDNVbk52blluZlFnbzZUSGtQWFNmRWZBV2s0WDdaVXdDMW41QnlKRUtNY1VyNmFZbEpZRkYrNG42bVJNWVNLMml3cUp5bVZQWmJmanlpS1FNcjN3d2xOMzc2M0VDMVdvTnkxQ1ZQQXdEUVVWa3U1L1JaL2wrQVpOQnkxQVd6ZVNnY0srSUwxdGhFeUwvT2FHRElvaCtWMG1HN1d0RnNobEloZ3p2RUNTc0FHK2NyTnd2YWdKVzQ0Y2Nya1ZER1Y2RDB4Q1VCRDdzaFlZaHA5ZGdYVVE3bHhxMnVqNmdCMm1MbWR3TFlzWWIxVDZLR012U1N4WkVZcExxUzhiQTBKM2tKQ2xjb003MlJFaDlIZTFKKy9HQkhNTVNQTEc5b1BNMFJZOEVCZDVCeUJrMXl1alpjZGFleGc4NW5NL0I5dmJNK095SEpBcXBQVk1xYzhtUVVVbTNCeGk2aEZxVzNxQU9QbGQ3bWdqQVVJRFB4Tm9UalNoNE01dmtvZG1WQVNFMTJ4T1UvT2Z0aVE0T2lZdmUwSjVFaEtXS0tEVjRCNkN6Ym55aXR4M3Q2V29QUDR5dGM3UW5RbGQ3TnFsazZjT29YQ3dxclpuQlY0Qm4rRVR5enFlMUoxU0RrbjludEtkc1NEZmEyOWFlMEh5QjlrUnZoMVZ2VllyWWJFOGFGN3o5MENuNXhjTGIwWjdrY0Q3NzUyalBJVFZiek9wbGs4b0JrMXEzR3ZxeTIzT1JTUW83ZEdudGlkNE9xU04xdEdkVGI3MUgwZTg3MnJORmIrZHFUOFRYM3A3OTFndUMxbDFtZTY0MFNhRmZsOWFlNk8yd1NuVzBaMU52cFNmcXBaM3QyYUszYzdVbjdMUzM1NkJKclZ2MjRMTGIwelVmVmJtMDlrUnZUY0U2MnJOVGI2MnJ0YlZuaTk3TzFaNE1WKzN0NlhyYkpYdHcyZTJwY1NWby9xVzBwOWxiV3F1alBadDZxM0U1akFTWFptK0h2Rk8zdG1jL21pTXE2UVdYM1o3UzJ5N0ovVExzTFFUTmFXL1Y3OVZMTDhQZTJtRFVibTgxK2dVcmNwbnRLVStqVzZndnc5NVM3NXoyVm5pREhicFVlMnQrUXJ1OTlWSGVuTC9MYXM4Y3JvOGtoZHd2dzk2aUJYUGFXMmxhME50THRiZm1KN1RiVy9XQ0xuWGN5MjVQK1dmQmtsMnl2Y1V3em1sdjNVK2d4Uy9kM3BwejBXNXYxUXZDS0grWi9WUCtkcERVSmR0YlNzMXBiOTN2czZId1V1MnRLVUc3dlhVclFpKzQ3UGIwa2NrOHgwdTJ0eWpZblBiVy9YZ2JDaS9WM3BwdzJ1MnRqd28ycTdyTTlsUS82bElQdnd4N2k3YlBhVytsSjdLNmwyRnZUVy9iN2EyOGptQkZMcXM5M1E1MXk4UmRocjFGd2VhMHQ3S1FZVnk1Vkh0cnprVzd2WlVkNmxaRFgzWjd1cVRnOHpMc0xmWE9hVy9sWndVLy9sTHRyUW1uM2Q2NkZUR3Y3VEw3cCt4RnR5ektaZGhiQkQrbnZmVnh4ZlQyVXUydCtRbnQ5dGE5Y1BUbnN0dFQ5cUpMRnVVeTdDMTJZVTU3NjM2OHVhcVhhbS9OK2VlUjBUbUs1c29TRmZZYjBOdHpOR3RQSjVVMGRzWlE4aThaMEtsTVZndmdWTHFmMzI5QWx6d2JCUGZYU1ZJWUxKZzVLN3dnS1FFbFhtUWZpS3pVeE1YQ3JFVVhTanBKMEZ6RnBxVnJOQTA3Mnd6cmlQaFpvTVpJSTFkRUlDbkhkOEdkSStCVkQxTVlNVUFXb2JYeXJSYkxkaStpdnNXR2JSSDhFbVJieUFkRFNIcFpzc2dROHErcHozS0NPZ3NOeDBLVVFISmlYRnBJYXhMU0k4TkNoZlJJVXBqRUVtVTFMcFlySDlyaTBSaUZuNUpWQnpGa2l4Um56VW1TUnRVU3MwRDAzRVhhVlJsb2lrTzBiSEZDd0lrWTdWaEsyNUtVTmtvQjNaTG5hSlhINDlLZXNncU0xeDdreTNTT2VQZEtqZmhXMHdqeFFPa2lmWFlFNmoxVXUxQXk0enZJVi9JcG81MHFSNUtyQ2M0dVQ1TFF2a1ViVVRFRnVXU3hJc2FVenZHdVJxRTBMTlZWYVpTc0owUGQwT1FvUVlZVnlUWCtaUzBzWG5FUXVhMFNTZ090MGRhQWd5Z2REQWJRT3NwZmVSQWFWMmFnRGRDNytxQlg2NkRxRDlmRnhVZEhIMWtaTmM0djIxdnZYaFd4bW5PTVRjMktuYjh2cHBtNlY4ZC9YS25ueHVPUFZ2enRXS1VlajhjbmVHc2NKU085T012NDNrbzlQeDUvSW1ROFdxa1h4dU9UeW5pRWpJUWxzNHp2cXRTTDQvRlRJZU9SU3IwMEhwOVN4c05rcEhkbkdaK28xTXZqOGRNaDQrRkt2V3M4UHEyTVo4aklyTFQyK3FSN2JYU21VdGdSVlZVUFMzNjlqYWh4THFxOU03Y1l3UE1BUXZaR2JxcWU0MlNkenRHUmswMW4xYVJTKzNzcWFweGwzNTUvR3N1eDVmbmZQdkdYVWFPdjloZEtQMzNzczFGRG1wR3Z2VXRabjJVUmlTM2JqVE81Z0llZGpqRmJPVS83dTZqNThNZ04wZDhOS2IwdWQySmtlKzRjVWN2R3IvOEZPQ3UwVXRIeG5HUlRveFpneTdYdkUxd2tRNHJ3a0RhZzB0MHF0YnVCNTZqM0ZxQ24yV0plcWIyZ2tvZTBTc2lhekNrckFNcFF0Tko0RTJlUkc5MjF0MkZ1R29lVkxxb3hSeWRyYjVIUlJSZ0RySm9jVWlYSmVQd1dQVTh2WVUySDNPKzBrdFQxU1N3d0RmcUw0cFJ2dk5WdTQvdDcvWHNzVERMYlJTUHEwTkptanVQS1VmWWNsY2JiOWNabzFEZzVZTFZYR2g4VmhPV3h4ck9zL2xrdVNLTjhtVytmTUZwci84WGtDMHdyUnJuYTd6b3BCM0pBejNOdXBmdnEvS0hGOWI2SmFPS2YvK3VibnZ6eTczNmhQQkhWVHFqTU5HdHZnbi90OUI5OCsydGYvbjR1aFo4Q1RxbkRpK3Y5czVRNkhFcTk4N05mK2VyUFhud3hnNThCcnZ5ZDJBNnpxQWEySTR2cnRWbXdIUTNZWHZRL0dmeGN3TlpaeTFHd0NVOW5MZWU4bHFPTDZ3T3oxSEtpclpaOENqNGZLdW1zL0VTb3BMUHk4OENGdnJQeUV5elhVZm14T2NTc2phMHpLejhWS3Vtc2ZCcGtxcVN6OGxQQVoydXRNMjE0TXZTSEE1cE85R2NDbWhtQ2JjdWZvVGtYc25laU9kOEdiMlozaFR0ZlFuWGUrY0xuMy9haGovN24rSkdzOEdNdW4vZDk1YnQvK08walRRWW9JL2diL3VaamYvdXZmL1dUVXNhdzR6cFZ4bVBnT2MwSVZsUGlER1AzQUlNcHlYTWxyZS8wVDJ3K3hQdlFMeDlYUnloTnNxU21YbXNKcmFoTjlEeCtBRzltVm9KTXd6c0lPaHdJK3ZGZmZESEttaGlZOG5ZU09lMUVuaWt6TXFyUFFPU2dKWEFBUml3QnRhTktuQ0N4eUJncU1jQkI5bUtSalJ2d0t5TDd0SlBOZ2cydlRJTU1lTmFCdFdUWVdEdGREcXdkc3NSKy9pUUxRS0lFeTZ2RzVjQ3NYRnJQNitEeWFPQ29sY3Z6SE41VDNrNHV6d0dYdU12NEp1cGxjSW1oSmdHWDFqam5TQ3d3Q0Z6aXBhQUNPRW1ZU3RxdHhFRkRaZ2NyeE83eVpJVnhkaWhsZHhHY2pTYUxESGpTZ1NQSnFMMGU4VmRPSi9oclYzaGRZc0k0bXdyalNDWU1FOGpTVkNDSkMyUndWb0dZa2VnUXlJbkFmS3RBemdCVDNrNkJISFdCbkMrelhxeTJSU0RXMmllUWc3WDJlUkxXMmlkd3o1ZWdUbXNlbHk4aUFJTGg1Q1U2UTJLRkNhL0lxakQrZGwwU0drdnF4dTZ6eGNEdVl0aE50ZVI1Qnk1SUZ0b3J1MHIxU2p6UGk3aUVocEpoLzVxK0x2T09rUXJzV0p2QUVGbVNpbXhzUHBFTnpTS3lVMEU4clNJN0RFeDVaL1NVQUcvSmE3MmhpNVYzcVVtcVN0TUl6RlRwRkltRnFLZ2taNXAwQ29HWi9oMG1rWmkyRlhFM2tkd1ZrdHlxNUFybk81WGNDdmhPRmU2c0E1Y215MTNWL0hWSnNwUlhmR0FIZGhzd1ZjZm5YWDZwT3A1TVgxZWFPSjlQeFhteVhmLzZKb1pObUNUSFVya3VjYm4yTmFXNWhUSForVC9jN1dweEJ2N05jcHlCYlk3OEdOdW1TdE53dTBnTGlkUzdMRW04TXpqOXpDWGNldmlycTBtcUhhZWRuVlE3RHFXdmRUY216ZzV3U3dTUys1dlVMekhxelhyQzFPWkRuUXdjRGd5YzYvWU9meFM2KzlFRzBUMnNkYktXbm4zSTZYTlJwaDM2ckJQRUdvNFJkTVJmZ1djRUlRVW5KNWc1TkhNT1lvNkltQ0hxOW01NEhscHEwQ0M3MlcvZGdaVUY3d1ZwTGNjc0Flb0JxeU1aOUJyNjU2cmhxR3JvUzJwZzRWQ2JxNERqR25JRUdvWDI3OCtLYjhFZGtKaVh5VmZMTjg0YytIUlUrekJ1S1U2NnUyYTVlVjJ6ZUE3WERQZzhybGtvTmNNMUF6NnJhOFoxQ3ZPNFpnSGJETmNzWUp2aFFZQnRWdGZNYTVuTE5XdXJwZW1haFVwbXVHYWhraG11R2ZCWlhUTU92OC9qbWxGcU50Y3NWRExETlFQWnJLNFo4Rmxkc3pZOFRkY3NvSm5obWdVME13VGJsci9wYTRYc00xeXpObmd6dXl2YytkeWx1R2FVbWRVMWMxeW40bUN5aWVxNGE4YU1QSFhOY2pOZHMxenFtbG5pc2x5elFGQ2Jhd1pzVnRmTWlUd1RCOWZNUW94S0VLUncxd3hxM1RVajRhNVpiamJYek1udWNNMGNtTGxtY1dwTkxmSHp1bWFCb3piWExKckROUU11Y2NmQk5iTkFvaEp3NmE0WkNYZk40TklzOWYycFo1YWJ6VE5MdVczenpCeVllV2IrbW5sbStYYlBMSlhGa1V3V1A2ZG54b0hmR1k0WmJNL21tSEh3U0VvZUI3OE1hYmhmaGhEY0x5UGhmaG1SemphL2JIMXd5MTRadkxMYlozUEtvdG1jTWdkbVRwa0xKM1BLWERpWlU1YStCcWNzbGRXeE5sbjlYRTdaanIwemZETE9xODdpa3MzcWp1V0RPNWFxenpSeWNuZU1SSnM3dGlONFk4Ull6UmxMWnZIRlZzL21pcm04VWxkczYyeWVXS0hkRTNPaFpaNVkraG84c1ZTR0o5djE3Wkk5c1VMd3hHRGRQVEU0YnZQRTJIWFo2WWlOdHZ0aHpscUhIK2JNWkg1WStocjhNR2NHdUNWK0RqK3NFUHd3cUo3TEQydjFhRE0zek9uSjNEQi9CWjdSYy9sdUdLVE00WWFsdFJ5enhNL25oam11ZWQyd1E3aGhPRjh0YnBoQ1pTUm9BTTdPNW11N0NabDkxV3l2am40MlRpMFZUc1Yra1loQlRyWkFEaHZrUkF2a2hFSE90RUJPR3VSc0MrU1VRYzQxSWVhWUxFVUI2VVpLbnlaOWJCbTBwZUhXU3Uwckl1bDV6cGNUdHd4aFZqYmdUK2YxdFVnSTBGT2xyRVNQU2xScmp5dE1lTlF1RVRxL3FFbkJNWU04M3dJNVlaRHB4VTJhWWtzZFVWVDRNSWZiWVdxa21mMlFRVTYzUUtZTmNxb0pFU01uUjdia254ZUdvL2IxWEV2K1l3WjV0Z1Z5d2lEbjJ6R2NCY09SSG9rUkFpdFo5UGtRNGVoenhKVnJuNmZsVnNkdnFTQVFub2Nxbk9NbmRuMG5tOW9ocnpKWmU2c0VjQ3BObkV3VEo5TEV1V2c4bmdaL1FvRCtCU2hOQ00wYnhkUEV4eXUxMzRsWjFaRHhxemlONTVkTnJvcXFIMXNaWC9Qb01zWDhwOWw2SHhQenR4dm9ybTc4NkxOditHcHByTlQ0OE5jTy9VMTVyTHZ4L2ROdmVFZCtiRkhqNzg5Lyt0ZExZNE9OeXRob1NGZkN0OFVoNzVKUWRpaDhyNGJ2UzhQM1plSDdjUGplRTc0dkQ5OVhoTy9jMmlZRHZIMnNBVTFtZE9zM2prMGsyeWNZODI4ZGV5a0pSc0tYajcyTUJOYnRObTdOdTdHK3BuN2QyRWJmOUw1bDdDV1VNMXRXM3pwMlU3S2x2bm5zK21Sci9lYXhIYjVkZmNQWU5qS1krYWlQajkyUWJLaXZIVnVYak5mWGoyM2k0cjFSVGc1c1lwMWwwL3U0NXVrNDltWFRSSEtJOU1qeGllVHhBOG5HZzNVRE5Hb1BNeXp2OEc5bGZhT0VnS3VTSFVDdU9INGd6ZGp6TU9GMUl2Mkd3QkFMdElJcm80NGZTRllkVDFZYTRqUjNsOUJ5VUNoRENZQUJ5REFtMEZOb3kxMEdFZWVUNndVUnFnczkxbEYzajRhbmRVN1pjcWY2bG9OMUE0akFrZVI2LzVaWUZlc00ySnRjRDZSTFZIdEdTR1NiZlVCZ2lBWFMxU1hRMFV0MWdRN1BEWkVqb2lORENhQ1hFeWpDbUVCUFBzMXRKT3NXQXFkcjVEZ1M4RTlHbEFzd1E5UUZWUUtCcU0vWjcybkxMWXAwUHNaRlcxQnVTVnNOZHlEcDZzUnRra3dtTFM4NWVVMjRYZUg0Z2ZyMVNEWER2RkVrV3A2eUM5RW8xcFVSWmNtVkZ1RWR3WGhEMEhwSW8xVVUwZ3NXb0F6REZVRzZORjhRaExkSG01QWgxNFZNZlFhaTlYdklmVVZUTlRJaHIrVFNoUllSWDRHSW9YOUhBbW1aaUFQTnh3K01iVW8ycGk4cTRHd2RRTmZYTStTdnA3MlhIV2ZvWHUvYU1PejhYSGV3YmdDUlhVNXU5bS9HS3lWY1UyNU9OY1V6R2hPY21USUVobGdneHFpZ0thYkpXVzZvWm0yK0JXV3Jwa0JQeW9iblJ0VEw3TFlPRWJxV0ZiRzExRjA5anIrMTFpbGI2bFMvN0dEZEFDSndPTm5zM3haWUZXc04ySmRzQnRJdnFqMGpKTElJR3hBWVlvRllLUnlEamo2cUMzUjRib2pFNVdsQkNhQlBSem5CbUVCUE1jMXRKT3U4cU5NMTNOUU9JOG9GbUNIcWh5cUJRRlJ6OXF0dHVVVVJkOUFGMGVhVlc5Sld3eDFJK2p0eG15UVh1SDZRazFmMkRFZy9OaVBWRFBOMW1YNXpsaXdWY3BXN3ZXUkVscXBGZUVjd29ZZWlXWDF0b3BCZXFEdDYvM1RwMG54QkVONGViVUtHWEJjeTlhWDlzK3I5TTFXTlRNZ2NEbkg2WGNSZGlCajZiMWIvekVUYzFPLzF5WFdaZnB2a1hiL1g0b0RmUUdzdk9jN1U1QWJYaFNIblpzM0IrcHFVaTBKeWszOHpUcE0xUVU5dWNqMUpia2l6R2hPcytCb0tVSk1SRUF1alFWTlNpK3k1b1pwMTRoYWtyWm9DUlNrYm5odFJzMlZCNmdLcGxXUWJkVmVPNDRGdmM4b1dPOVV2cGRWU3FvZVNsL2kzTWF1QTFnUllTMTRDWklBYXRxVlpJUkhQUGFBQU5Sa0JjUnRZblZ3MXFrdlZJYVY2U0hSa1NBRVFIWENjVUxTd1ZYbUV4UUZneWJURFRZMkpNRU0wa0dCTkFZSG9TbWUvMHBaYkZPblFwb3UycU55U3RwcnVRRExRaWRza09lYjZRVTVleHpnempYNjhCS2syTVdmNm5jL1VnMXJxWmtRV3EwVjRSekNoaDZKWnRiWW1rV2FvTzNyL2RLMmcrWUlndkVWYVZHT2grcWNMT1I5VWc5YXZlUCtjUlRYb2tFM0ZZR29qK2psMjJSUnhxaGpvTnpmWFpmcHRkTHQrYjhQRkc2ZTl1NC9yL0wxclE4bTVtV2poSXA5czlXL0dhZUNrbG13Tm1qTGV4Z1NIYXcwRnFKMko3a3hUVW91Y01jRmgyeGFrclpvQ1JaMXNhTU9YMUFWU3VmSE1LR1Ztdk1FcFcrUlVOMXIwZXpEWjR0L3FMZnA5WmJJRnlGWFVzS0ZGdjFmckVMR2hBTG5yTjJ4Y1E2NHJtUkYyNnZlZzZNaVFBcmlTbzk2R0U0cFd0K2szV0J3QWxrdzdqR1NuRUVTdUh4c01VRThScVVIYWNrUFJ0Wnd6RDZKZHFQeVN0cHJ1UUZKdkV1bTVvYW1lNmdjNVRiQlhTVCsySU5YazJqUnZwdC9GcG40UGNwT2pqTWlpb044SUp2UlFOT3ZLVHYxR1FRMUcvM1N0b1BsRVA5eDZpN1NveG1yMVR4ZHlNYWdHclQvby9YTVcxYUJETmhWandPbmZxdjZaaXJoRnY4ZGREenIxZTRPOGhpNVBYNmNCeUFiTEF6ajhXTnQrVDY5Unh6VWpjNEFaQWFJYzhEUUh0dE1tWS9xQWQzMkZwemZLVVRPbjhnRHpoZEZHYnUvWWFBOC9lS0NMdHI5RCtHM0VqaEpiQUhLRko1OGh1ZHlUWHlJNTdFbUY2cFo1OG1tU1N6MzVGTWtoVHhLd1d1SXB6a0l2OWdQS1BlUHhyL0tvanNlMzZZamhlTHhWK3luSDQ4MDh1c2ZqOVRxUU1SNnY0VEU0SHErbXFHS21telJiaXkxSXZONlRpZ0hmWU1sa0hUTktkbWNsYTVsdzY3bHRTLzUxUE1hMzVPL25zV0ZML3RWaWh2dzd2S2hpM3pkN1V1SHVteHpMOVZ2eVoxVjY4NWI4YVQxZnNpVi9Vcyt0VzRnaTg5ekNGSjZuTFo1c0RPU1F2QzZRUTNLTkk3b0ZjbUtlTDRNY1BWL0tsRmtJSnJZUW91ZloySkovTm1lVE1xNmtIT1BVdFI1MmYyWmhqQU8zM0lJNVpsZUo5NHd0c2JzNHg0YnMwczJ4cWwzUU9iWlV6RkRiallHWlpsSkxTQ0dwdFplcmZWWW53TlU4OFFRaUpva0VidVJOM2hTdjRuWDlUZXp6akpQYmJvclBRbW5qR1VyZFpoL0Z4OHR2aWs4TCtqVFFsMmZRVzIrS1R3cjZDYUMzWmxCRWYwelFIOFdURTlQNkUyOHhPSlB3WndXZlpoYitQUW1EMzRmUUZlL25ZdzZuajJxQ1NRVGc1VXd5WSthMm5IZXZtekE0WHR6b01lbHdEaDh1bE9JQ2drYkJVc3ZKVEZEVmNvZHNPblB0MlpndWgyeFhrNDExQ1dYTGhXd3JxZDZ6RVNNSzJWWUptMmNyaFd4WDZQcHVTN0g5TVdSRFRJb1JLMXQzeU5acllUZWx0SXZMczlrdDg5SFlnaVNuUnk0cDZjRzJMejBJUlNpSURaNTRzaVpwNmJiNDZKWmVTNjFxMUY1T2l1aWh6L3NueHlOZHVkRGowUURlZE9QQmNvOFI4S1lyQjVaNTVJQTN0VGpiNFZveGoyYVlsNmFZT1lBY3NISWNOR0JrSTFyQTFzME5oWTZKa0hJcnBscUdhVGpGdEpRcHVHTXFNT280cGlxVFNjZFV3ajkwVE94ZmFzWFVsV0hxU1RHdDRDb3h4MVFtS3VDWVZuR25oR1BpcUx4aEdvVW1XU2hkWmFDVnZWVlJmN1ZhamFwL1BoYjNQUnBiMkdiVjNucUZzRTFGZ1ZxVjFIN0pTbExSdmVZRWhIN1owN2RwMStZcnlZUmQwamE5Tk0vTDZ2M2o4WC93OUk1NlRRYXFRdlRhdHZXbGVXNnNENHpIdXoyOXRZNXB1cDA4TEY5d0wwdVdaM01kdTNlUHA5ZlhNWkt2Smc5NmpYNWtlZFpvUXlqMzBTdTlXdnRHNzlmZVNhNm13eVRVM3BkckpHT0sva2xQaUF3bXRZL0Y4WTZPdjQrcTZDcVVPcUhqTkQ3TlZrRUNVOTBFbUQ2clpFL2pDOUVZdnhhQXRKUXZHWk5RL21QdlpDTzZBVWxXR3RIMjNGR3V6SlcrRU9PeUdwUnZLZGg2aVVHYTVxeUxwUHFWeGhjc1V6eTVOZ3FGZjhnOTFHeGp6QUJKWVh2dWpLNFVvQWpKODl3ZGNYMkUxV3FzbU53UVJUYSs2RnJoaU5DWkhsV3pZVkcvT3ZQcWFHaXNUNCtGTUJ5dGpmSlYrbTYrOGMzb0ZicXNRanRlNnF4N3luaFZ0QVd3M3BXK3NJbWdYZ2d2ZXB6cEFrZ2NzTjZiNWlBV1dHZHgxRi9ZdWx0bkdTVExmaFRKdTRvbms5aWVUQURETGdCMlgwcmx1YlYvOHVySVNuSDFEdm5EaXd3Q1Z0VmZTanhsdjhHbDVRRUhjaWVBeHNYdzFzdWJWa1g4clpJc2NucUp4VVlNUmtiTEllNXNMUWM3VGRpWHQ2N3M3WGt1Zml5a2IwbEZlMGtZUkliNWNwUTdTaXVOODhPVHRkNzRVUWJ1eXRyb2FHOGo5L0plRmZ0YnJwK0FxYlhSZTNxOTNkaFdadnRLajNOTFpWZEtUT090UUtVS0g5WGRsWUphM28vaTBXaC82aW1ndEV0bzZNcTY2TjI5MjNOUEsweGR1VHI2dzE1MmdZTlJlMVYxOXl6MmpSM1FhTzdhNkwyOUdEeG55OXFsalRWcm5GYjI4TGF0alZxWlBFcHN0cFBKZGdiZnh2Sjd4dDVDQkpheTlLSUpMR1hsZSt4aXpsaG92Rit0M3NuUVlWaE5HVktkaWJQeTdJQmxnZC90dVdPMXdKYTZ4QWNocVRlcjRCaHZXZHVKOU9reXJTcVovakYzc09lYmxhMUdPT1B4c2FGR2puN1ppSWtvMHhsTTE4NHNJclROcm1xR0lMTURqY0pVNDZtd2ZmbXpCcVFYWmp6OHRVSG9oaG5rTXdhQnR3eWlWWE1qTFpQenh3MEM2U25oWXUzTTZQWWNqbzZsenkvY25uc3FwSS9WdHVlNHBNUmJBcW5nOUxEZDJUREFWRmJMLzJjUUdpS0RzTDdzYlpyVisxYUQwQ2Fad0Y3QU9sdTd0SXJtR0ZiemFLajljSDU3N2wyaDl2UERkdFRBOGp5TDlYMGRQZ003b1c4eE55SjUrZFJVcjdvK1cxMElqV2ovT2YwNTdBQWZ2U242SjdYV0Q5Z3dNWXFUY3FOWEpZRmF4Vi9nbzJvN1RmT2VVWm9ONmw4TXNLZUFmY25Ta3JabC83SmVpK1BSZC9Yc0c0KytyV2ZQZVBSTlBhdmowZGYxN0I2UHZ1TEZhQklyOXNPQThSUVl6eXRkdWlGNlRtUzlBRm5XVHBJVWZsS2w4UmhiNkt5ZG1pM0VDbEp1Uy93ajVYK3JmYVVOV3FWMk5EY2UvYnJHaXJmWlY5cWpSYmVSSWJxdHI3L04xNEkzMEhzc0k0MlNOY2U3RE9JYkE1eVFKd1RSQmdKLy9hQmxvTld5VnY2QUlLdmoxMmxjTm9XdHh5M0hBL0FXL1hnQTU0bTByWjllajVFcFpMdjU0UnJ6d3VHdGNEd0FXdGRHbisyNklmb0pOc05hcEd0Nzd2bFM4M2pBWURMZ2VMUVplamdac3NNQk1nbHRTSS9SdGJ0WTU3c2J4Qm9RYlNoVW9jSWtCdjUxSXZqOGNDTjNLejRIUXdzVFBEM1ZSVTFmVFcxUzNYSGNuSmhZYlFjbU1HRWprOW5BMGt3ZWF5YVBOcE9zbjFIeXRKKzFxRXprdHVSUGpmanpDTS9HV1dMaEhKY2lkVVNISFdxTW5JM3p6Q2hOalRrMjBRMExncDNCeThUVkNXL0hDTGRwRFYvNWkyd3kreFNUSjQ0VmZDcWVxajJXYjd5WWUwQ015V0tMY2lGSEdoazNKN2dXM0ZqT0lCeFJnUWkwd1l6cldUd1ArVlFJSVB0bnNaR0l3SU44NDVaekZFeDYvQndGQTBRMW5HU1FFc2prYTN1UzlVZjlTek1YYXFzQzA0eWhuSW1JMDFNVFhWN3VrSTV3aEIyRVlZZ3dDUHRKbTBNRUhnZi8ya0t3UTQ2UXA5QWNoR0hJQU5rUURmOEd5QVp3dHlVRjdEdGpqWThPK2NNU3JBOHY1NnFUVERGZE5xZFlqeTFtYndoZ3V0REkxYjVsRGtKWHZjaVBUeG1rOFozUGZOWitUNEFmMUVxaUpmemtYay9KdkswZTdKTXNSWHhDVGxFWHY1OGpEKytqb3d6UVhZMFg4M0p0aW1QZEdnSTBLM0MvTDI3azl0R0hwTTZGVnl3aDFiV1BwSGFKUFpERXQ5S1ZhSE1tVGIrd1JJOUhIcWk5TitjZTRKbEZqSVoyc1JjdlgxcWs0ME5XcTdVcHhGRzVxazZLNWdrR29JODVYMW8wMXRYSVFVR3hpbVBtaDI2K0VJdW9McVprWFdGS0ZucTM2eWlMRWh4STJjVkgxa1h4WjIxT0ozMkpKNDBoVlFHckowZEIwaTAzODRib2M0dU1tblA5elBlKzVKUjlqdGxDZk5iVFNIODhsdk5vVWpDbHIzMEFhNCtUczJnaTkwdUkraTJQbmJMWmxPYUtYVDFGVlRGTnE0VDJpT3F4dFFlUU9kc0RvVHJyWEZnNFhhbnh1d3VORTVnS1FEYjVWa0RDM2FwUnhya2FXZTVGTU5NVmh1ZmNXRGVpU0dtalI3WFMxa3VUSk4yM1VudHVyS0MyUlN5NFhHVzFiM2tzRDdtUkM1MStwMC83V0RJcjg3Zm5GNWJ3ZTA0NG1ZM2NLNVljbjVpdVBGSWZmWjhOVUs5czVOWHFlSnZXekpWN21BNTBMYW5uYUcwZi9VSmJZOGNHbkV5bHZ6ZGdzdUVYTG8zYjh3Tnk5ZzJjMTBsUkpxTnFWb1ZYZFAwZUF0Q09BaTJFYTBvS3hiUWN2NXhwZnlIMkdXUDFCVWJyT0F3RzN6SElBUmJ3QXdRSnhEOGEzb0lDcVFBV2drMEoxampVaHlILzNDSVJvQ2pPV2JVOUo5TytwQ2Q2Y1dZUllvcnN4OXV1bHZwcE11ZlNyZjFRR0VTbDZUSjVUMGsvUnJmRVR3VlQyR0tManl6S1RPM2hadkpRTXpuZFRCNXJKazgwa3llYnlWTlpVZ2I2S0pUcStmeW9OY2o3MENVbXFBMzZIVHdWTWJPVFkyelBpTWNLcUVYaEZ1d3RkbUN2dVlRYWZGeDlIMDN3N0JKMWdLTDFwRzR4WEZRKzJVdHlCRlU2RmZmQWNBR2tyK2pOUzMvV1JCSHp1ZWdYZmVxRDBuaStvM0g2cWZidjBUbnZrRHJVbkd2a0hzSk0zZE8wWEU2RWl1WnJEMHE0b1B2ZnpWZHVSU2NGWXlUZkMwYU5HMkFWQTAyc28vc2FvNitkRi9jK2ZpZWdxVUY3WVZYR0NaTVFORW5TUmhMUHhTSE4yQ1gvVWRMNW9QcmlLUkkvVk1KemhkcVpzR2UxK2ZBYzJSazZqV2hSMjBtNktEMUpCNGFDalQ5UmVwS08xdThOSTlJcEc5cGJSNWFUQm1tT0xDS3FaVlJKaDRoakxEekpNa0YwMUhJS3p3WmhnZ3FIOG5TOENLVTNXMVNXK2l2RkRrNXRQb0gyTkVIbzFCTk0vanpCbk5BVDA2dUlYeVJkMVc4TngyVS9aM3FVTzBMWmM0SWk1TlpFS3hyUmJiUWJjVWFOb0dxVGRCeUxkVGFBb1J0dGFJSTB6cXJsc3ZFUTM5aFNoK1JvTU4xNUg3b2JQWEFEVHdXNmNONWl5YVZlMWw3MVdQdDF0Uy9vV0xIZVBXTVROUm0xSjMzRzdtZG11OEFwZGFKWVowbzlveFNiUTYxVSsyWm41c0hBbGI4VEc1dE1oZTFrc1Y2ZEJac2lmY0xXdmhmYXdrcUdyYk1XdG1FbXd0TlpDN3MxVmN1cFlyMW5sbHJZWU5oU1M5aFpqWGhDSloyVnMwL1JLdW1zbk8yTWlkQjNWczZ1UjFWK2VnNHh5Mk9hV1RuN0I2MlN6c3JaWm1pVmRGYk9ic1JaVzR2dGZpMTRNdlJzQnpRMG5lalpOVGhyODdHZnJ5Vi9ob2I5ZnJPMkQ1MXJOb2txSW9za25zK2hPck50ZXpYNXRHMTdoU0p0OTU2eHlSV0dIZGZwV0xjV2NPQ0NqVkFNSTJ3eFkydVVma1NLNUxNNVhRTlEwY1pWWm01c0tveDFQRU9iQ2kxazczdlZCOUt0bzdNUlpCcmVRUkM3cEkyZzVnNWJtbGh6M1ZtSTFLeFlOTVhzUCtCNXhDNzFWRUwzVGxnQ2Fqa1BUUWNnTVd3TTVWakNndXdSa2UyYk9XM1JRbVR6VXplOGNqV0ZBVm5VRUpBYkU0MDExZ0tjTlJZbTBoMmVBK2tHMllYT1pjK3NYRnJQNitCU1VYRngxTW9sTzZKTmx6cTVWR2hjNG83WlRpdDdBcGQ5bG9CTGE1eG5kVzJuUWVDU1MwTzRWbFJiY05Wc09iYmVjaStEN2N6bkJnTmpqSVVlNTFZYlRIMkh0UzNXK001OGJkZTNkU0c5Y24yRnYvcDJXelo5bUN4WUluRlpzRjdUdW5kNFljZUc0ZDVaNVdFMm9rTWVCSVRGZXFzNHNPN1dKenJGUWN4WFNoNno3MXdOYTRjb2xFQUkxdFRQMng1c1FYd1B0bTNwWFNqQVZtMUU1dm1yMm9yTjg5WHNYT2FpaG1VU3psTGJpNHdHKzE3a1h0c2xtK29INjJHK3UzL1FYajI0d0pxOURqVlF4SVhEM2d2L21yNk9lcGRJWmNXeVVmdGVkZCtpM0R6cE1MdTBaaDR3c1lpb2lhWlZYRGhBTTgrYzJESkIrOGtQL3RJTDh1eDJrbjZrS25RSVdaa0tuU1l4aUdwS2FLWkN0MmtYTjArN3hZTG5hdllCSWpSdHRHZUZRZHU1WTBMMUxqUHQ3MCsxakZIYU4zVnJEN1ZXSzV1Ny9YMVBOem9YdGlBSEZlU2NVS3NLY3B6SVg1ZWJIRm1hY0RteUV0ZXFjOTNOUGQvWlVZbHdRS2E3ZFF2MDh6Wm1ZeEswNFZ0R0E5Yk5XSnkxN2RaVjQ5Z1V5STlVMnJHTVVkdFpyM0IyY3dlNGg2Q3pneHlwVWhBT2FWVUtUaXY1cTA0czhEV2xuaGw4Yzc5NnBVbDcyQ011Y3dsTHRvTzdqZnhwNGpiVzF3dmV3NC9aVGNrOVJqVW5oOXI2TWk1TUpzZTBCM1BzeWR0SU84bnB1UDRLdkxsZnZacnVWM2V6aGo3T1Fjc2gwYUl6SU43em5vY1ViUWFXbmF4WUp5QzA1THFmMW9JNzZmdlZlM3k3ZWEvWFVKbXJoc09xZ1p0N3dGSzFYZXUwdngrRzlPTUpTQzdkcjI3RmlRRXByc1c1WThJaFdGS2V1V3pYT3JNOU5xcHI1L3FoL0MyNGZ4Q0V3aGUzUlBKRG1ZWFpJZ0FSdDZpQkYxN01YamlxWC9JWFpxTE13VmgrVUpRTzJaVzByZmt2aCtMWVhjeHBYTXc4Ym1mZTRtKzRsWEwvOGpvN2k2Y2Ird3R1SVpQR1hPMUxlcEZEbEJjSjllSU1qeVZ2VHBuZzdhNEdLSEExS0hXNFdLZHp6eWdseDFDbDJqMkx2SGxaeXQrSlRZNEwySTRVdFJJMEE1dWNVMkZyZHp6eTVoZ0tXMmN0Y3FlRXA3TVcrVFhVd29GamxwaG0xQ0lIdVZsTGNHTWdMVlRTV2JrY1ExWFNXYm1jTGFIdnJGeGVFcFhqZjg4bVp2blp6VnF5eXVYaXFwTE95dVVZcXBMT3l1V2l6ZFphY3J5YmVETDBjbUtGcGhPOUhNUFptaytlZFROL2hrYnU2R3p0STE5NEZvbktNVVFTSjJOVVo3WXh4dVRUTnNaQVVXaWM5Z0dGS2h6WG9ieCtGTWE5RVU3cXVtT29YOUlnaVdQSXJWTWxqUkRNSmVtOStkUXg1RHhHNmhqS3V0RHRaL2RVVGNNN0NKSkhLb0thUXhtdEJVeDVPNG1VWXdnaE9BbURwdVVReVgwemJ2VFp4eTAzVUdaVDlKUGdsL2ZrSWVKVlFiYU1INE8zckxodXZUR3ltZi95eWsxQkJneU9JYjh6WUt5NVJWZnZienFHYnQvZ2NzaTU3SnFWUyt0NUhWeksvUlZIclZ6S01WVGVUaTdsSVVuY09rK3FKb0ZMN2hQWDZDNkRMT2JzZm5jSkFDNzVHVVZ6RFBrVkduTU1SM1FSdW9ZZFhkRmxqQVhIa0l2SzdlU1JCZzY0U3IxRkdYYU9Bb1hUcU9Za0k0dHdEc3NNZmo0ZHBQT2RqdUZRaDZQY1Bhczh6RVoweUVQT3IzaHZsWWZjSCtYdGxBZWVvZG80eHJ0VDQ5dE1SUzFyVG82a1lDTzlQcG1UVXd4RFBvQlh5OW5oaWJQRFBXaTYwSitUYTNpTGtvNmZBb05WSC9XN2t3RllUUlVrZUliOEZLbTlCcmU1bXZTNjdIejhZeDNMWmVmUzRhNTU3eFB1R1NMM1RzOHc4Nk5INXhQWHpObFRYbjYwSk5NcUxVWEdaaEVXam1IN0JJUzdsalNuMEMvZGFONFhWRWlPb2FuUXN5UzQyODlrWmlxRU4yMXFwMnZZOUZ5dEE4TnlacEdabjB2TUI4ZVFLK1JnT05XeTREMXhiNSs5Qm9kN01Kd1Rsak9GV0gyd1QzVXdlQ3VwRGdiUHNNZjhUUm9tbFdNNjZReFNMRGE5cTlGVW9EcURoMENMcmM3R1dYYU9tMWJrWFJrMGUzUnJvV3Y5MEQ3M3NRRFFZV29zR2NpRjRycE1vOFU5d3dIenZQTEJ5M1hsU0hVaU9FR3BUZ1RIa0d2dWpQZ3dXMEFzTGNRajVvejBjTFRQbkxHaXUwcHQxSjhMMUo4dWVBL1haSkJWQnlPYUxmMXRmZGtkUXhkajFvUERtVUk3Ylk0TS9SV1pOeDNEY3VvWUJyZXRleTVhbmhVdG1qdUVqb2Y4OUZNcnNwUDhjQkhWOGFPdlZrdHdsaEZPcUFXQ3phK1ROMGNOcGJscU9LOGFpa2taTElUOERWZVlSYmd2amVSU3g5Q0ttOSt2U0YvcURMTE5CR2NRUHMySk96QVk1OXlKTzZFZnl6RW5Mb1R0SW8yS3hQdElzQ09tNlJacGdpQkxsV1JRZVJMazYxSjhSU05VMHlFamIwMVd2cGxYVHB5eWdhRHA3RkNZWFRHdGhlVURhczZsUHQ1U2tmc1VRdEIwTWxRdXd5Yi9ER3lqaWprMHNjbmZCRnVpbVhjVG16eEFvYyt3eVRjUnRxWW42c0d0Sm5vNWs2QlBKSkVtZXZrb3dwd2hrdGNuek0zaEdJQVF0Ymx5d3BGaGx1TWlIRmtSZVRncUFwNm1sNmNpYlo2WGlwQ3I2VU1wUjFaRURxQUE1R3J6Z3dpUUZYNXVQMGp1aUJsS040OGFmTHRTUDRpMTV1QUg2ZjVJR1VSdUVXMzNnN0lBV1o5YnBQS3NCRUg5ckI1Q3B4OGtwMHg1NS9DRGpzUmgxRGZiWUdOa2NCWGtHSmlkVjRBc2VFYTZnaFJENTNkUXVPRUlvejYvOGdRWExNKzEra0ZjSk90OWV1Wndab2VKVyszdXhZLzc4dXpFVWFjZk5OdTRMeC9CN0xiYmI3ay81cExLTi9XeHkwSm13ZHN6UzQ0ZlpKNEFmaEJ6L1JBTzVNcjVWajhJQzJuelQ3ZVR3UlZNeC9JdzB1UGZ1aXljZVg2S3hXVGg3ay9tSEdaRGtodnpab1JpZG5kOFpweDIxb0ZkN3QvTTBHM21Cb1dSWE9Fd2xzM0RlR0JEZk9vWDJhMjY1aWJMSFdvWjBnbVFtVHYwYXAzWGtCZGk5M29vK0pHTjExejYyekt3QkRmSVEyQ1p6NWlOZ0M0TmZxYkh2NmF2UHVLRTJHTHFIclc0UWRsVklNRnJuRjFhczNuUjhoRGJnOGptQjgzbVJPdkh5MmI2UVljS3VraTN4WVBXc0dvcTVONWt3ZVJwS29UUGFHcUhIMlMrNDJyY1Q0U202QjZuZ0JRL1N2MmdrZ1VWVXkwTC91UmdtK3ZnMGFUTWtlYUdaRmMrRjFtcWk4RnBjRjFrNDZPN1Fha2NmUWh2YzRBNi9jb1FsVzhiV2xuVU10WlBLc0prRGtVd0ZuS2JXWEJ1YXBCK1BZbEJXRTRkbHgyM3VFRWVjc3BjUE5lT1ZDbUMxNVlwUmZxcU1Hbm1GcVUrY3lDNDBQU0RRbEJLNW5KV3o0QU5XVWIrMllMM2NQbXIvSmFVVWQwTHRhMTkyZjBnRjEvYWc0T1B5ZUdoVnE4aWRWV01CUGRSTXJNMnQ1ZHlSTFRJYjNRanErbEdGeVRJVG5KTk05VnhGN2UzV2VZSHBXM200Y3pneG1ELzU2amhxUHRCWFdhT2ZZb2RmR1ozMXBCY2h4OTBqSjNBSG9ocVh1ZWdnQlZlMElsK3ZLQ0Y4b0xPY1VLL2dCZFVzRk1RNWdYMU1IemUvQ2JzZ3Axb0wwRVpiMTNxS0FXN0NNcjhvVjVjUThBajdpOXhGNEhlaXA1SmQxS1pJMVRqUmd6QWk3UXB4ajlwTzVPNU9RTTBMNTkwUzBVb3BmTVd2ZTVzTExBYUg2TXoyR245aFliN01TbW5xZWRxK2lVaHZPazh3dVo1VG5QOVIvYW53bnJ4NXNkK0RZWG9WeUhyMFJrUFphOUlaenk2a29ISDVDcUR0TWpUOEIzTzB3MTRudGZBM29HdkR3MEF3eExib0c1WWRJc1hDeXIrWTNYdEZlaGFMSllUM0VVRXZUNVYvWk5keTBYRVBFT2pxNjhHc0JyNHpBYlF0U3FVNGFtcmVOaFRKQTBLZDR5UThDdGQxTnAyWVJQNllBNjNaM0tUd1kraDJXdTRiYWdRN24weEs5QTFjZE9iVURXMXgwVE1xZkNKbTZSbnBWODV2cCtWZUZCeXF3MG5xUDFTSlBlNTJWcVk0dkVyZWJ4dWJyVENOYkM3NkQxVHVGdkdOTE1RN21naDRmZjJXTjNkVmpkWEJxdm1RYStaeHY5bDZtWVZIcDNndUk3OFlqWlY2WGNHZFlaSGIyNS82a092MU80UEJLajd6cGloRHhGaFVBT0h4dERsYU14Qmh4SURpRUZ4UVVQQ20vWXladmNHMlc0cnZEVy84MGh1RGNMT2JzUVpZMXVVM05wbTAvdnVobElIQkVXbVJqVi9GVzhVT29hQzV1UERxT1habm1SZEtIUWE4cXJSdVRqZEFUbzlwVVl2SjU3RGJnRmpDNHZmRU9aaEptVG5ZeXJTRE5UUmFCSWhVU21Kc09RaVpMZVpSR2dNYzJlWllkRVZYaWtXdjBOTStwQmlLUVlzUldHaFZjelVPQmFiQkRPQkNjTFcwYTdBQ291aTFxV0NodHVIS2pKWHR3ZzhjQ21ZLzlSZXFoUEJZVUtzUnQwWmZiY3I3djE3dUJxc20rL2RFbnRtN2t6SS9EUVJmTFpEYUg0cUR2YXB6RUE2Mk5LMWRKb3RXQ1dkZDY2ME5JRE92QVZiTkVLcFVFQm4zb0laWXYwcmF3cHUrekloNmhvd0Jnelg1MVNJZm1tVm1Xc0prVTNJRWlMdDRrMkI5Z2RtRHdjc3VqSXR4Ukt1QTBQZFVpemVKOWpqSlN5MGl6ZUZZYkdtWURvWW1rTFhtZ1dtMnB0Q3h3cXBvTDBwYnRmd0hRaVNKZ1VQTG0ySisrVWZocHFrSWlIT05YdEQxR1kwUkUycW9RVkpkR0FoTGdZMDlUZ3huT0RwbFllQUl3ZXcxNEVjRCtJS0luS0dUSnpHd2VraGszOFhuMHhVdlZGNzIzaGpwMVNQM0llTU5ZU25IMVdGQUx0L2pHV3dOc0ZwWGFmbEhpUWpkaFR5Z1NmNmVYUzdpNnVubzgyQWNqTlhiMGNoYlJTVjIySjdZeEVPdjlmZzNxOUp6Ty9pUW9WTmNtbEQ4a2VZKzRSNUN6OGdpdHg4N0ErM1gzV1pTNEtIWnpqOHlpKzZTWXJEVkNyZzZFMXgwTUE2b1ZWOWMzOWNlclJnSTNabGI3M0VpRjJTSU1QWkxBeWVIV0xTU1U5TGN4Uk94ejExOENZOW0yWHdwWFcyRTI3Mk5NcWxBNkk2ajVPZXpUTDRzTTVVM2VqcG1uYmNibVU1cktpZGtmR2piSG5URlVxY0cxbE1rdE1nTnpkV3ZNSmVNT0tseG1jaUxjUFozbmJPWkd6UHNRY3JQZkpVdDIzemRoZ0tlOXI0TWpiUklHeTNVajU3ZklrV1hoM2w3YUNnd2lUc1U1dHNiS3R0YXVTcVkxMStXb3R0WGZpZWJCWWxDNDVqZWhpcHBCQkVuZG1BditEYXBXZVdjUHR4ei95a2tkWjEvWWdTclBYb2lKS2RzTE96ZEw0enJON2pCai95WFdGMVRtem9FSkpkNmNOcm4yRmtZQ0xkSDlEcU5rb3JWYklRaHBVbytWV1hucHVNSjQwalVjaVR5RWZ0dnluQmJyT1VZUGFpWmJSblNUM3cwVXZhU0RrdDhlcGNsbHI4RDlsZnFOMW4rcVZlYlNDMEhXakhoWklyNlcyejNiTnZ3T0dUNnBkckg0SmI5VUd1eTZyOW4wbHBiU1RSNlJwNDZJMG0yUXg2NTJMYWx5VlBIZGl5TDlSQnRxOFVHdVdIMkJOZis3QWpNTHpLelp2bTM4NFFrMDhIeWZ3YUtTbEFFUXBrQnhVSWVBZG5PU2xtdno3T1dkR3B4cnRzZjJLcDhTTXI1bE1BYllvdE5iNW5FTC92ekNIZk1ZaTc2d2JSTXUyUndwYjRHUzMxbGdNdWFlWW5sTktHWVRqS2FSdXQ4VGp4WnAyaFpUK2lrTDNyRGFmb0dpOGpoV1pMRkR2MjF2NDBadWV2WkdBYmpkRmMrK0xmL3NTVXhiWk5WL2tSNkVPZi9qVG5Vc21VRkcrUUpKUFNPdFIyT3lmZnNLeUcxNVhiVG5pODFPdDNiVzdjbUFsS041ZG90M1NwOFJaZU9BWmdMd25WY3VLNjFIakMrS1VobkI5VCtpNDBQbmVMdFJEakZ0ajlPT3h0SEhmeXZsSU1SeEpLalc5RmsyTnNmeFFMS21wbkhIT04vdi9OK294KzF5SnFMRXdQclpRYS84VUF2Z2ZTQUo4MmdPK0F0UDRwYmQ4U1BZbDNwcjJQTHFGL1JYL2EwT2pLL3hTTnlaa2poeGthNndhNUc2SVh0VnhvNkxnSTNiWFZHYTF4Rm8yTndXamRLWFp6dXlLS1VsamoxdWhXVWt1Tno3ZEFSQ3Z3SmtTbkNEOWRObXBCWEphZ3FxWjZ2MnRyODRZMUs2M2RuaUlEdkJuWnRwdlRNV2VVZy9OSkR0RlpGeFJiSlozUHgySTBtV3Y4czNHYkhRbHozZEV2Z2xReGVCeDZveWg3eG9OYXZGOXZMV0w0TjBVa3dpNkVVdU9nZnRNOGUzc0xiN1lGTlhBSEZWdWkvNkZTNmt6S29RNmJhMnoydHY4SXV3Nmk5T1c3dk5nT0JuWktqRWNmVksyRjhlZ0RUQXRySDFmUFNjOW11Tm5RcjUxOFdlSHlZRnBxNzNIclFwRFlrN2dwdGFQNmhhOEkxeTFzZmpjYWNyWDM2MGZTdFZzV2ZTOU9jbENsYWF2K1gzM1EyZHYzeHIwTURkcXF6WG1BOGRnNFY5UFQrY3p1Y0xoSW5jdTdBaG1la2Mza2ViYmdaZWd4L05hTElWWVpZNzJ0REk5bjJFWmUxZEIzRnNOT2IxRTVyQlFHcC9ZNWtHQVdIblJrTkk3Qk5KNzE1aFl6eWJBWGZkcHFPNHRMK0RMK1hCMmU1eXAyVWpxcUh1bGw4cnpJZnRLR3liTXZJZWdJdE53MUJaOXRScHpGeXVWRDIyUllnWGFiRVdiaGE4MTRiVEt0b0xZdENYRG8xaitGZVhKa2F3a1czK2VlVy8ra2E2SXR0czlWcno1ZDVoYlRVSmR2OFRpWFo2S1hoUTRJZFIzK2llNFF5SEw1RGJuTmNMNU10d2pQQ05Qa1J1Um01R2hHTHlJeklqU1BGV2xaMVpyejJzS0FpTGFRVFplaUVCWTQ2YWhmSHF2S1p2VnJPaVNDc3ZybHI0dWdySDdONzBSUVZyL2lFQ0lvcmQvMm5NUWUvNVRqYm9FNzNjMXFnYnB6dGhkVVcybDB4N0dlRnJJbm9ibStCVDQxMjdaZ0htNmxMVzZlc3R0TlNUQnRXYW9ucnFPRiswK2xrWFRkajJ3QkJsMkVhdnN0UjIwbm5DMjBlTGpKQTZoaEp1NTdDbXoxeUY5MWthZ3ROM2hFS0hVRS9ZOXRsYktOQkNEMk9mMmdyVVBhcWxCemE1MUZoWDJ2bWdmbXdxMnYvT1NwdmFhM3Z0cnVObHVrOHRwOE10SVNLdlFOVnMyNGZlSHhpZk5CaWFMSGFNMzFoeWI2SHp1QU5uMytUZFBUTkpmNzR4WmZNWEhjcnBoNlM4REtnbHkrYmJIWjFKb2dxKzJ6cGxZd1JtMmZOYlZtZUdyN3BxcUZ0czlValVtR0dreWJZL1drS2EzaHp0QXUrdDJ2NXI0NFcvN3hLTFZIS1VOWXd1OTZ0VFUzbDBVNnEydGRmclc3VzhOT3RaYWJWVHQ2a3dtQWFiY3BIdmRGbTdweFE3TE9QcnY4ZmZwZ1N4YSsvR05iNExUNjBMa0ZEdTJ5T1duYnVxQmlCMjFyWGdyVFNZTE52dUdYcHpjRnBzbTVKSmdKakhtQ3VvVmlPOUpmQkdhL1I0a01NaFZ5U1N3SW9Wa1BoL2dxVXhvS25lWEMyWmI0NUd4aW1ZNDlYRDVOaFJhM1U2RE93am44L0pydUZHMXRLWjlSOFV1WFJrQUlXdGdDVUVwQTBNL1cvWkxacEUzaW82NHdrN0Z3cTYrK2hXdWtiZkhPWjFsKzcyMUxuTlVDcHpPcEp3cVNMRzdpbDh5WWkyYTd4YlhvNHRGalh4MEtGMVQ3SW9tdEczdTlIamxvajJoYkZGa3I2NTB4WGswN1U4dDk4Mk9CRmExajJFelJRalNkeTkzN05VbTAyRHFUeFBmMXhQbEhoMjF4TzF5OGFzY2hzaU5mdHFmV0p4ZDJHaU5OWXQ1RFVnOWRNYU1weHpra1FWdU5EYlRGNC9vdDRqbFdzK2d3NFFTTlFGemVZZ0U4Zm1sVFdUenlxV3RibEtVeThlallRbzV2NVJ1Vlc0bGxUSEJxY3FLTGc0SGJkZHlMOEY1cERHVWY2d0dtTTRJRm5mR3lEcEN6c0t2SGZ2a1J3YVQ0YXpTQ3p1ejJQVllmZml5cDdxY3NRWDU5QU9UaER1QTkreWR5ajNNbEJvSEc5Qk5ybTBUYUhpUEFvVS9vbmYxSzRLK05zY0Exa1R2RXhOVVBuL21OS0FsM1F1ajZub1M3Qjg3b3lkeE9GL2NrM1J3L1RzK1grSjFCZmtkUXJzYWVXTE5TSVFyT0dhYVc2SlBmYXhUQ0czTEJMRkpzWVVxLy9TZ0UyTmlLNWlFb3YvMklRNUNDNmhmZFFsNzdJUXkwTHdSWFNnNlZleUZtUTNncllOQ0l5bjJINUEzWlpCTjBtSlo3K0IwZ015dHNJNWlpSmpaNUFzSVd3dWUxUUdYQU5wSmlrNVVTTnNJaGdUYXR2aW0rNlZIWmxEYUxFZkhMcFI2bjZ3KzBhZmlYU1U2eDRUc0oyU0JuM08wZCt5NWNJWllYTWxrb2lCOEg5WGlkUmZEcy9oOWg2ZzJZRE0yQWgvZk1RL0pibW1WOWVONk9FdkJnR0xlekxFZHoyampzMXNuT3VSQ0N0ZDNoc28vc0hEZC9vc2R5YU5XVWVFeFltN05EVkw3Sk9RM004am4yMHlEa1FpY3RxcXkxSHp1aDQza3pBd1Fxd2p6WUxpdWkyRlhZTU5ObHBzUk9pZ1QwYVJHaVFTcWlzQzlGcWlyaVMxbWNQN1lpSWNEbk42YzBROFhhWkdCRktpcmk2MTZjTkRUQzNIenB1SUFYWUMyQUFzcE9oNGZyOVM0Ti9UQ29udmY3Sm5TOEl4UHFDZTBaNENsSHlzVEtHR2hidy9YTEZpWlh4bWZiVzY5WTlJaXE5KzFmZGpqTWEwNEQwbXlaTkNJVk4wTUlpcnI1aGtRN1VPZDUzVW15ZllYR1Y4MkxLSWdYZG1tV3c2bWQ4Qk1NZHF6SWk5UzhTTDhYMFpwSDJOYmdleGp0R0U2b0paVmV2eGNaOUNLS2tVdHVKajF2VmgrdWRBYkRDN0Nla1VxUCswcGFZb21ZemRibEJFeGt0ZldWalJldHIveGthdXRyclMzd2lrSHRhWDFsYTFYckswNllEaUhycWlKZDdJU1pJcktBWWE0OVlCTXdpOHJZV1JVR2l1bmVYT1ZSblpXczdhMFhHU2FLMm0wUWZwS1RCU3ZkejhUTTYyV2UzcW9Zb0U3ZXl2SHlYK00wK0diRkNmK2RwOWZycHpodkk0LzZ2R2FTcjFDSjFmRXIyWDNQUVY5dFlORmRlRHI1ckdDcWJld282aDY4Rk1JMi9QaVhkY1djaFViZXd1UlU0UlRDSVVYRmFiNm5SYnFpT2dTWHlTaTFlckpSOCt2TkNVeU94MXhZSnd6NTFhd0tDL1RIVEQ2SjZHaGV5RUN5aGQ4REJmanNQeXJ5YzRTa1hvcWdPbFl4dm1UMWl2b04wZHJ6T1Q5anJPTUVIRHpYM0xuWU9GQmlCRFZVMmtPbTJ5d2MvZ0t4cmdCL1N6TUx2OWpHZlVjaHl4Tk5PRCtXeDJsMWh6UEt4aHhGTHphZTlqUDVkbUdMb05ydHhnbm5HNktqeEpja1A1WVIrTUpQbUJJbjRnQzR5VUczd0dsVlVYRk5za25qNlpSMmNzRmtpNjJuejZZWDZYaFUzRzdkeS91ZGFzeHpuU1Q5RHF2Rm9Rd1gxeWV4bkRodXNsSWRFcFR1RjVKY1QrQU9xQVJ6Yi90OWgxQ1JvaS9aRzFTZjBiWVRYdmtGVldJTEhHc1dqL3hXM2xqTXlPNFNyaVBYNmVtbklsMGVvdmlEVGtHL0xaY2VkODdWZm9icDFqL3dmRDhPQW8rak9ZM20zR3VUbzJ2eGZKMWg5ZXVtY3FZQmhMNjUvSXBIb3JQaUZoaUpGZUdBZklYWGFseEVDQm5jbkZ4eXFINHRWaWJGZmh5Z2NacDdLK1I0MjYzNHZQWk4xcjZhMCtuaHhodHkvOTYwd2JGUVZEOU5tbE1NeEN1eE14OHBsbjU1QWk4aDlwZzNYK2VVY1lqM3JXeisyUzczMFdrUkhnKzZmbENaNTJpQmhsNHNlUVJzMUhNcklURVJtU0hGYTZDQUtDSTlBeUhlZzc1bUgxcHdPdjkyVHVYZE9xYnVISk0wUHVINlJNRitRNEJiRzdqL3JHclhOdGh0Q1FwZ2NRMk0vdEhGQ3d5OUNxelpDZjY4TFZHWmJsUFRYdUI0VkpQeXFIUUxaaW9zcTZEMlRZV0s4S1JOak1MTmpiYWNsTmNGSWZ2UWpCZktEMHdwL1ZCaittZjVCM1N6MmtOVFUrUHhkMUJKbVJDNlhNRWJRRXpvNWlJbjE3Z3dwbjVLTUFrQ3l1blZBbW8xWFIzVktlRDB4Z0VPLzZPbkpocnNwcmVVWWZNZlV5QXVLZVhGNTZsSkNNNUxFSlo0VVpJaS9zdS9HV0VzYWdYQ2FOb09rc0J5VVJTNUdTY1pXN0thbFBlT1ZjZEs5a0xmazlGUVQyVTl4MHhhbi9kY2RhbmF2MG1Sc1dxZVlBbUkzM2dJZDdQUlMwWk56M0dvU0MvVmNrM29STU9Rd0lOaEhFMzJ6bUM4T0JhZHl2OE40OWFQM2hjVkhOZFR0c0lvd1pTWTdjQmVtKzBncWxud1g0akFndUJWU3orUDFrSVE3ZTk3NGtHL2JQRFV6N2VleGIyQTJYb1dONjNPdXA2MW9HVTlhNkhXczlCczNaT0JkbHBzM0c1b2FlUzVhK1JmV1IzZ3ZyL3VzZjdHOUJ0SjFocFhqQTJreXdKZmlEV3FORmUzbUI3WXFoSThCT21teTBxNm1OU1dsUXJOKy80SXZsb3NtRkxSbXVqbStpQlhTbEJyUVRlY0NIL1VXRFdwdlEvcm9vUjBYY1VhdFgxVDJwamhGd0J5K1YrQit3RHRqdE5vdTkxakdtMnhPMDZqVFg0VjREcS9DdkJhRENXUHF6Q1VyTkN0eENnV2RERWdLNnE2SnBCMVVGMGF5QnFxcmhCa1k1c3VGR1FEREpjR1dxU2NOVHhxekc0bE5MSzVqVkRyQ1lOYUFJQ25zSmJ3ZDhTWHk2ME1sbzNCYzFvckRDTDdoODRzM1RkRTM3WkFOS3NCZWc2TlJ6L1ZzekllL2FzRnljZWo1L1RrUHJBZjZOazdIdjJUbmx6UDlWMDl2UXJNQVZ0WVZKV2VqZHBEL0NLMm92UDYvV0lpdFlTZ3N3V0ZFMXBRUU02eFhhd1RxQWIrOGJJVFZGb1hmYXpzbU5aRkh5TDB2emI2U0RrSW51VUNXMEt3QmNtbnkzYmxEOU1XL2NDc2tvcEdQK1ZKSVNhSTdsZXJsaHFmOENRVEUvM3NwVjFlS3BrSStVZTV2Vkc1M3liRDdlVFVCelB4c0pwMHJzaGRZd3BmbTR6ZnBobGkrRHpvT3BobWJ2eEhIVmhVZTdVV1AweGJIVGJONTFLNk9JaUk5QTV1cXV4bUV3clhzVHgrd1AzR0ZjeWFqMCtzMXJXU2RwTmVRSmxXbDZHalhBWHQrVis4blEyMFhXVjU1OC9YdmVmYzNIdVRuWkNRWUZMWjl4ZzFLR2ljVXBLeFZMTFA4b09VVXBtT1k1bDIxaHJydUZaWkNhdUxmQXppVENBQmNqSFgyaG83T21MOVFrVkJBWW1LQ3BXVzhHR0xyWlk0T2pVS09xRzFsYkhWeGhacm9Gcm05LzgvNzk1bm41dWI2RGl1Z1pWNzluNzMzdTkrMzNlL0g4LzdQUC9uLzB6U2RhYm9OOU4wbWlZOVprSTlWdy9SNmxTRkVQVXdibkw2dTFMWXFWNVZRZC9nRlBLdVVxNXpDcFdiWC9NM3BxTGZNUEh6VGZoK293eFVZNjhIMUlHdXZ3bzd4bTdGN1BlU3ZMYzkydXJqMm9OSC9uY28vK2Z6MU04M2RmcEp2NDZYMWwvM1JpNjZwYkNSL0xmMHFuMmt2VVhIcXpZMGJ0RXZoaFBQSTB2UGFieGZ2OWs1amZmb2Q4azVqWGZvRi80NkFvbkwza08xbmZ2dnhTbDE5aWtUNEhqeFVHWHRMdjZNUXpxOUR2OUVmQmh4ZUQrSGRIMGQzaU4xUVJ4K1dwQzRPUHlVTkExeGlNcFVCRE5paHE1c2Z2b0VqUnB6WENNeHh4VnZROEtFYXd6U040OExHM0dEaHd6N0YxMVFTMmlReDFIb3N4b2ZabFI4TmZXWW14a1dlTXBVNUhFcjBCMlFUMU9oazRMNDJXYlg0cTI2UENrNk16WVVPbGEzUmlFVmRESWZVWW9hQkRWSUJHYkhiQVFEUEQyOHVNUFhSQW1qT1BRWW43RHljc2xpbGlvRjErMWFYenBmbXhQYmtNd1g4eExodEU1c3FVRXUxWjVHeTh6bkpsc3JkamR0cTRHbkowSVJuZTBCcVlwdDJzcjBMNHJva0hEQ3pWNVdUUGpERWhseUpucG1lRytaQXZnNVB5YnE1WW5PT04wamRxaXhEUEFDZDJ5YTBaNkNneGZEYkx4QzhxT3BEbUQzdVR4N1ZNdUNXQWsydEM4S0tSenFidTBGWGlPZWI3NlhTTGZZOVlnTGQ5VldSdG5FekpnRVovVnVjbnhOZjB4eUZxdG9leWRTMERWWW9hMWp5ZjZ5aGFtN0pMUTFRMUovWEc3UHVsSGtvK3lWdGtyMEZQa2pkclNkNnBpYXdkdkVqckJNZ3AxTmdpVS9XNlhSRTV1UnhKR3dNb09Bc1ZTU3R5K2Nia3pLZkZZK1ovTjVVOFJkS0FKai9qaDVCaGRna1ZPaFRmU0w4SWRCOGVNbHdZUDNrUG81dTgvbnVKekNObFBibjhtcXlNODZiMTJRRVRyTStGU0MxMUM5M2xZeTlwMklUWHFOZUtCRnI4WTdhVzV0RGNRZDFTbDJxNGF3WGZMMHk3ZERPTlZtNThtT0dudG1vdU9DSGxuRWxtS3lSc01XVk55c0hWdDVleVdZT1ZQcDlJY0NPdFJvakJmUzNZNTZmdEhtMWY3c2lDRnFFSUU0cTZwYXZFSWt5ZTZoMUVuT295ZXVhMTBpR0FEZldNaVcwSkcxcy9lNkFwY0lic0R2cXl4VlVuR1JGcDBER1J1dkRRNTRpWStTbFNCbVo4YzlrMm5MQU5YV05HUnFxVTlZcU56cWg3VUpWT2RRNjJuek1GbE1iVlcvd3pZQXcxdC9qSStzYTV0aEE5VlQ2SkhkMnJwbVA2d3RGeUxkMEVpNlliSllvMmNGZmQ1eXdYUXZpTEo0MUZ2TmpoU3Jvem1vSm1UQ0RicXh0WFdteDIvZXUxQi9WSWVsRityTGRQS2wrckl3T0NLTmRsaGFUWFhCY1FPTlVuejhQa3hXdW9qdFR1bEN3Slh0dTByYVluZDhiei9OMmMzR213TE1UTGt0RUtUenlhMUJMeWRzbTY2eHZmdFBhZ0c2TlNUaGZPWFlkbzFkS0swN2haS2NyMDJhdW5KLzJySzdqaFp6dExrL3RacmoxSWtBZStkVHE4bGxzWFk1cTZPM2tGMXN2ZHE4RURtWmQrbE4yampsblpmclJucWtsQ3JhcTJoVG9LTG9aM3B6Zi9IcWxMUGthVnBVQWZtbVgrN3FxRWhRVTNNVTJ4Y1daYjZQMmxpMzBWbTJGbGRzczlaSDNZdTkvWVUwYnVwSXRGOVQybCtVSUJxWkRqQ0FkbFZ0MG9HNlhLTlBraTBQcWRjd2Y4RDJwMTBBM1ZrZFRadVFpdXNPQlg2OGYwS2RUbUhnK0xJYURrME5PazNjOGp4VkRMazBSNklmUkU1T1E0QmI0MmxOell6YktjMjlucEpmdWpwWUJRbGxvTjBIYXF0L25td3RpdG44QUFYQjh0N2FWSHpnVTM4cVVtTE5rZTNpUms2eWZ5VjlVQzI5dUpsRFQvaytTdG9QY2FmYmxqaTJGSFpIM1MwTlJxTjRKMGVsUFlwMkw5N2ljL1NoblBBRnBWYk05dEIvWld3cVptTHpKR05RWkd2UUdYWkpXNUF3ellqUzBCTkc4UWphSjdndUcrSWczNjN4Z2JsUHU0V3ZLYjJSSFRYOTRtNTIzWEZqZGw5clpwcHpOaEFhVnUzeSthYTJHUnJESG1KeFYzT0dlV3BTbmFQNE85Qk9KcHR0Ty9TRWdVWGhOOFM2b2tQRm0vQzBFVGlBZEFONGxsUitMNEdRWCtwUW9TZTZjUWhlSWwzZktHVlR3T0lLSUh0WGlLSmJGT3hSUWsxQzlFdXRZVnpXZGt6bVIrc21YN1FGVXZVUWhFMnpxUFdqL3I4Wi9MYlJmNmpZcTJhNkNib1VsMGhhNzVWR1I1ZXFwcG9YYVZsbVRCWWNmbDRSZlMyYzVTWVlKR3d4cEJ2TVhxRVZ5NVBiYXdpK2duVE95SHFSZUNhOUt1aU5TVU53YnAvdXpYYjgzSGpmMlgyVUI2WW8xeUxPRDlsUExkRlMzOTBDaTJCeHorNWZtbDZzSVUwRURoRisrQUxCRWtOUEF6MWdFMUYxVE55VzFuZEp2bWlEbjlSTXQ2ZkpNSGthaElnY1pqNXMwK2wxWDJmemF0NUFObWZuazk1M2VMZFBTNzZ3OFNMOVd0WHBKWGhlUFp2WkswaVVudEJMT2Nkbk5WNm5WZTZzeGhVdjBZWExoRGxiMTlyWjc3eDBtOUtWNWV2MHFCWnN0VGlCZDJKdHA2T2dqZlF2MU5IK2l0ZXJCMG9oWjQ4Ymt5VkR0TThCTnpnRHJRdlJBVXRsTEpsNnFQeDJhbzgwam42T3E5bjNsU1ozdjlMeExucVRsWUVsZmJKaGx6WWVLeHlKVldySzdpMDRjbXJrZWdzWks1Y25aVWxxRENFRUZKVzg2R3g5ZnJOUnJJQUU5UEljRUJiRlZaeVB5VkJFdXNQQ2NGVDBOaytMZEIxU3dNdXp1d3dpRVhOL2IyZmN6OGtxemQydE5IZGIvWTBZWW03UkxjWGtiMlh3ZXFlT0dTdmUyV3lTTkZTc0dGeFhVcUo2eUtocDdERlZWV3lWc0tYcjgrbWJwRlhTZDlwQUdmUWFOWVBpWFlpQ050Mkx3T2hHcFFvSVJoZFNhbzh4ZlNaOWNna0VWaGNnREd3dHV0djYxSnFrN0xkYjZ0KzBnVHVmUG8yR0k5THlMbWtHTkNrZFpYZWd0N0NlYVNGZ2dva1NxNmwvMkpycW1BTkhQcU1iZkRYdVJlaU5Za1lGQmJOTXZTUTllWUxzTFR0TDdqcWIzQXpHTW1Nc0wxSUc2Tk9rR1VvOWVqeTdTbTFPSjJZTXhEcXpkeEd3cXlXYS9QZVhzS3VBU0ZXWXE4ckRUd3A5STZNRWxFanUyNmRjVlVka0dWSWxPN09oV1pOY0ZaeHFpSDR5R2t0dTIwWjFUZXM2cEZwRHlJcUJYUEo0dHAxeGlhNVhQc2VhVjBlOHVDVUkxbDJmYlU4bG9YcWp6TFVxVFBVSzJZWDE5aXBQUnkrdjV5bjdzMTVTWllwZ3JKZFVPQkVwYy9XU0trL1pqL1dTS2s4WmJaVlE1V2tiZGoxUHdiNzBraXBUQ2U1MTdJbjlRT3A1eXRJejR2NHVXN1plVXVVcGs3bGVVdVVwS0pkZVVtWEs3cjZHOVhJSHRMa3hnQ1AyRnpoYVFrb0FIUm5VSW1pSjBWbVlkZTNoaXQyU1VSWFFMeU85NUF4a25CSW1USU5RTUswWTM0VjkyTTZ4c2x6YThWTVdTK1BIaENqS0JqOHJjcGh3ZWswd21kS2hNV0dwQWhaU0FibW1rajloOHZaSUNLQVNaaldZRGtNeHVRYVFwSFF2VGlndVZDMCtUVFptOUx0MUlCTWlXc0JheXJ5VC9YRWs4OHFFMkRZcXhnMkliNDZyQkRUSnJRRlV5WTBoSnlpM2hvQndjcHFVZjJGSmUxTmhXcnB4R2lWa2NBYXdMSG16Sk1mR1pIZE51Smg2a2ZqK1B5dW9TNmRlTGtGZFBMM0hoOFVxNys4Wi9rOEpaZWNQS2hDZk5oS3l1NWFNR2duVFZqWmRzaWlYVFZlNnN5VG1pZVNHbEVTNmtZSjFGaWdZeWxjdGl6d2FqVkdoeHNwV1NmQzlzbFVTMGdlTlVOeThNSnB2K0RxbUNnWis5Y0o1YjlkY1dSbDUyMENBZUFTSWo2QmhRRUlSZ2IrNHBEa2x5KzJlQjZaTDB5MVRMRkNkc2NFdEgzL1REOTc4L284ZmZWaUdRU1U4ZGVOZCt6N3o1cTllODQ3ZG1FV1Y4QTkvOCttL2V2OU5QN3pwQXlTZ1hCc2JmUE56TngzNmkwTi8rL0ZQazdCSDhqM0RGZXZsZGJjaURaK1hDYTJOUmZkYUFNYmoyUnhFNllUVFlXNzY2Si9DeWR4bTA1OURyZ2FxS0psOEppU3dXSCtxTFlEb3NMWDlGYlZ4bDkyV2wrYnVKREx1OTI2UkRKN2R6ckxSekI0UVQ3VVhGcGlBcFFyUit2TGdnVDhWdU1nUnd4RDF1YiswWUVwM3BSeUplOVhaNWljcEcrOUoxbG1YdE5qek1WNWdjemNDUDBuRnpiVUUxNFlOTmtuWnJ5dEJOYlpOTkh1NnZERFpUaDVTak90ckVONHdBZWptMG5oT2JwenJoK1UvcFJ3bUphQlRZOFdSMnZGanRlT2p3MlBCcWc2UnRVRTBLbFVqT3pQWng5SHJPWGgzM0NOakYvTUpDcnkxUm01cDdaZUpVdFpUOFVOYmVBMWkrWmhqTzhVa0twR3dZOG9ESWhtdGxrZzcwNG16dU5mR1lSUVYyYmUxTStQTGhYbEpJcUhUT3NXTExHZXpUWDIzWlNJOVJBMnlEWk9XVjhWWG42eDdiUkVzUnBPckFrbnczUkFBSWVkcnExb3NtZXhSS0pXTytRTEF2OWpxUkJGN1ZBS1J1eHNTRTYvdVpYc0VZckIyYWJmS2drT2gyMXNDaEVhQ2NoQ3d1M0VwaTAyMkRBV0J0REE5VGFHS2FPSzNvektxYkdjcEoyMHRpc1AzMjl4Ynl5SkRyK3ZaVEZzU09qVzZIRFErWE96dUpCcHArRmMwTHRVczZhZDRoZmNPYkxsazBMZnNwMWVqek5DMk5vTHAwYW9XUmVNOWhHWlhzZlZxTktEZ2FLU3prVnFPWnNrd0E4bXlGM2E5MGJyRkkrR2hFMjJuYjkrTlpqczRwamQzTmR0Sm8rT1A2NGMxZ2lWRlpYUGErRlNOb2NaSm9peWo2T3FPaGxINkdKaHUvWFZxNFFyOFB2UTF3MC9rcUd1SStlUlAxM2hEQUxkY0tPVWNxQlBlUm5iU2wrMUIxdGFXaHBkTExUU1pZc0dIcC9uR05CemtMMWdlclN1UDlKUG5FNHhSeEtTUU9LVWdSSWRVam12ckFSR3lhdVBhUGE0Q05ub1BYQ0tveWxSa3d2S1FsVGtPVXllWHFxN0VQL0tnK0NSWFZUZm5WUkhsdUtOWGE4ckpYbTJ2dnZBSTdVOG13ZDRlaTNZMzdVK1ZTWUpmSUQvTGV6WDhRdU5HbGdkNXI2UFQvcStzWSsyTW5aVDlRdWxTajkzQlRvbEZNUHQxdEpXaWx3bm5XZjBsd3BBZGJmWDN6dVplL3J0b2UvWjUrUmwyczJ0UWIyWmZWMXkwbEJzaW90WlNodld2cXA4d3FZWXplRjlDVDdqcDl5RnFUMjdhL1drZlNwUlN0dG0zMEE5RnpSSHVxaStEak85ZlVEYkprWm41c1p0eENpQWgrM2lUbVo5VzBRdjB5SVRhUTYrSUV6cW5YdUtUZUZORUJJdXBqYStZZlQ5eERMRFFHWUd4cDdYTi9KMTBQZXV6NlE3SHltV0tHK3NUUFhOeWZaNUhWS3ZtNWVFaDlheG01ZktRRVYvaWhBVDRaUGVSblJ0dWRYdUl3ZGVTbjdCdDRSNWNPdU1GYVRvdEY4Y0Y1bFBGbjB6WHMzTzE3MEV2ZkhuUjNFWkFCcFl4UldpZ0ZnOU15MURSbXZ5cmlYSnJjNmhWNG5hUmdyMUpxWFkzWGNDcjJuSU1RYVhlaFBTVW5JaXI3R1F5UklCNkN5UlpPL0UwQlZvMG9JN3RFMkszRXpaVTJlclppb0pjMjVvYUMxVEFWQ1dvVisvVWJxQkVQRklrSU1wdEE2d0ZWSjczQ3UwQ3RFK29jdGVlcUxiM0NCVTRuby9YRFRjVHRwMGczeHQ0aU9CdmtPWkZ3WXd0dWRIYlFia0RHTTRwR0tmaG01c0N5QmcrOFFtaGFLcWpiaUxLVFhJN2VsVkQrMEp3cStFVGg5U1YzWGhzU0N4U3dqcVpTUUs3V1VyQmlSMDlDZlZEcEdpZFZDM3hRTFhuZVZwMFQrQnA0YjF1SUZRbHRJKzZXZ1FBdWJZaERDeXZXclQ2UE5ydjZRT1d6YW5kbkNHY3dRUE5sb0I5VUpKOEEwdFpJVkZMNTRXU0I4VmVBUDY0Si9jQ01JN1VIMGdiRFJvcHRYRTRSVGowd1pBYmxQbkdHWTVVVGJPRGRxN3FhRlhuMS9aWWhHeFZYU1YvMUxiSE5oTUZBVXg0VzVkbzBBcnNPWFFFc0R1R29mVFJvWVFIcmtUeWhhc0UxdFU5eS93UzFnQjRyeEs3a2ZUbFM0Qm95U3hSZnZSMnJhSWozaDhDa1Fkd3hjK25mVVJ5ZW5BaDVhZEFvUERqdlJXc3d3RGJQWUJIZHVpdEVLUmR3Q1BjTVV0dkJiVkpEVmRiMG1KUVFIMU9nNHlIL2hVVjdVWHBuRkNDVmUyY29HMWdRc0J5SnRJQyszeUZjNExjRk1JNXdVVDZUT2p2bTJoTjdGNW14RTgxeVRIRWFzNEp6R25scXN0NEtRK1pabXJPQ1lyOXE1bGFzWC9OeU5Zc0pRRE5JSlU0UU0rZFdWU016WXpqZkhBcVl0MkxadERNejZCU21EbGwwQ1FPYnNRRm1BS2hFWE1LVGd1a0wyVmVQM1dBZHY0MlBIVDIvcGYrNUpWWUNKZmtrOWRoaXdWWGZoMEFDTDd5VFdpZm1QeFg1SlA3WnJSTW5UcG8vRnZPZ1doZE5XaGRhUTY3NlN2N0s2KzZhckJiZ0RsZW5KOTZaZi9VbXlRd0tveFE1L3pWVzIvYmQrMEF6QzdLbVh6SmxUT255VnZuU3FEQ3kzblJKSVVDcGNNcUlpMkpZZkRNZ3ExZGc5NjF1NjY2TXVXWkg1L2RFckxqUVdVQzFjak1TbEZDTExrcVAyMFgxWVdmOHFwODJTN0FLK2d1cnNwWDdwcFprYndkQ0Fyb2FNK25wRFVkWjNWSGZWN3FZSUVSZmlSR1lJeXk4SGJRVkZJeCtDVGZobVhEWlNLNUQ2d3V2UklTWEY5VGV2SVFXQ00xU1FYL1g1NHZENTRnV05rVGVIOVR6T0pNODRzTmpxL055K1ZrQkZyYUM0QnZaUGFhVGpkV2syNDUxSEgwY1BlUWhLNCtvMTBxaW5qKy9lSnFXYlFBc3ZEaFYxYThDeGdKVmxSRURxQ3U5TFdSY2lUNGlTeThwRFVpbUY3K3RNbzdnZkJraXZ2cE9kcU9DNkxwV0YzTlJ2Q2NVdmMxMWNSTFlhbjJhVHIzcXRRZ084STJlRjQ1am83Q1FwSVc4OGtjempIajdGSGtqUEpjeUswdFFQTXg5Y0NpWGh2NElQRE5MVUdiaGJxcUhMaWhyU3BuNUpYbGJiaEF4cTUrVE9KOHlQQmh6ZTdJWEtydEtBMUtPTWdZbzJacURob0VvUjgwcEM2eXF3OWVMVzdjQ1cwZ0lzS1JwYy9GZTdtVURPbktldkZGc2dtckg4bWpaL3hXQmhMSGUwRXJrYkpxbHNYd1Yrd1VibHVrMW5HOVVtcDFmUkNlZTlGMXNHV1lxbDBLeU9yQ3F2SkNKMjJ3M0tIdHloVzRlRFllTVdFZ2tEQkgzYldvTlIwR3hqeTBLdzRqRGlqUGNha0ZLWk5ZS2lQelpORm42bG1qdlZkL1NyakM2YVZ0eTZpQ1VDOFAxQ1VhSXdUSUpMZG1NbVFaQm0wZEFnR2taZ253TFhzWXZzemVicUY2Nk0yTWo1akVTSnBpeXoreGRmSFlXS3ZkYm5wUDJYK3BqRzJObHhyRkVNWWxXMFRZQkNDN3Z0NU1CbngrR2NiMWg4cVN5OUpPd3diN2ZxNkNBcy9yVFJiL3dOdlIzaGZmMGErVjhKTTdDWDRzK29TY2N1VlNHeWpRV0c0Y05FV01YYm1pMVRVdno5bkF0SXJXenVKTFR4NzBGcFNIKzRzRUswRVBaNWl5TWF5eERaZHhPbWVMSExLeDFxem1aZ0dXNEE2UlhhR2wxOTQzUmh1UTVMMW1jYmpNZFFWU013K1dwa1BnanJJY1lIdFhtUllYdVVKNUxSNHBoOFNvYlRPTFpJK3UwbFpjenR2dXgvT2RQeGVzVmkvTUYyMFZWS2MwTTRZMVVvdnB5enBnZ29oSE40M3ZCUGQvNlovSkFwMldJMjhKKzlDZzgwOGl5Zk5ldFQ1QUNKdTQ5dlJlN3UveCt1OWhwMzFPOGJCK0RqYUxkM3lmMzArMnMwdW11emFudURYU1h2K3h2K2ZhdXVMT28vd1FUZXp3UC9CN2V5dTdCSzJhN2tYSnI1b1VSejYvU0YvOHJ1OHN3cml6ZVR1SHJQT2t2L3VvMDkvM3JzbXR4ZUxOMjNYaDBTOXovSjVWbXpsODkrTWMvdVdrNy8rekQwNXRMVDd4OEhPNXlVcVFvOWR1M0R3ZFpwdnR2MW0wTGkrNk80aWZ4MytIR250QnZ2cTduZWphSk5iYk5oMnM3VDRUckJuYXpuRE9qSGNUTXovaDNtUjNFcGkzeGZ3cXZRdkNBdGdmMlhqRHB0b05tMnBYTmxVSDErdlpwcnJwZkV5WDB0Ym9McFFZdW91ZmwwMDcvamFpVEdWNTVZWHhtUFpyVzhzZWpoYUVFWWJaMUdCTHRtMDEyM0p6NitKMnU5VlFENjVTcTdMcTZsaWowMnkxQVpZdDhiejZwbGZoblZQOFVNWnFxcXNJaUZXNm15TlhhL3h6ZWJuK21DK3YxK1h2bFpmNW1xT1hEN294SHltdk13alhGMThXQm1tSlErWHR2THhZZ2hsUFVDTDBMUm9YVXZDTVpwRXBoM2lZSzBxNTdGb09tbGY2TGpZUTZUSXRLck96bEhQSjdNemgwT3djZlJpek04YnhEZ1dOUXZGWjFjSXR6eGJTM1U3NlUydVc4RFFUQmpwN0UrVGF3MEpRTk5FNjY2cU9WTk1IMGZldVg5dmdTenlQWS9sODVzL0wxdzhGdmVleEpzMDhMM2JKMnFjcGNMbDBKTElhc3BDSGgrbjU0V0hLSEtTZk80bkhvZC85Q3JQSnIyei8vR3dxZlZOTkdYZWdHVDZxKzVyQ1JpTTdJUGp3czVFMXo1NnJqSDd4d1NwNHVzUjhSRHQrTDJhcDQyZTlJcXZMYVJWd3RWWXZCYWFETTFiVERTTEdEREJIbkl0bWlNVXVqOVkxZEsvbkZYZiswZjJObVJlVXRkUUVLZGRSYkxKSTdSdmFWL0R6Tk9IOEd2bnFEZTExQ3ZNZnlnYmNTSWtCalVob0FZc2xkMFA3WW41WVNOZnpRMFJ6QmUxZkZ0cHVTV1ZJWXcxSmFhL2laOFdHOWtiQjZaTlpKeFRrK2JoRk40YlZodllsL0NDNXFTeTRyMHBpaDROSUNvZmNablIra2U4dTR3ZHN5dmthbnhMUTF3dTV2SlpwVFYrcC8zeEpLM0traE1rMFh6UExmMGdka2wxWTFQSVZQcDhhTk9kbUNTYzBNVHRvemZWUFY3MmViOUo1bzU3WW51ZVo3eFBtQnc5ejhlbjdISjBDenoxOWRuREdYRCtQcHhDY3NQL1k1TnZObC9vdUpDUGZOems3ZVBaY2Z5YnVNM2Q5Y3c3aEFCRnA2ZXhndzF5Lzd5dHl0TlNGaWRuKzJPemdSWFBCMkxRcS81bFpjYUxOenB5VnMrSU5kczllbTU4K1MwZnI1M2srbzlOWnVzRks3aG9zbXVzL1F5aU8yY0hHdWY1YXNqdGxkckJrcnYvTXVBa1hSbnlQQjZ2bitzL0tuMEdEVVBpMWMvMW54MFU0MXBTd2JNNWNueXRtQitOei9YVkFyTW0xT2RjL0kyNENLNjBjZW5QOTUxQkpYblBhWFArNUx0QzZXZm9lM3JHemcxK1lNeG9ybXgwc241TStUYmV0bVdPdjZCd3lHcEVzejVxenVOK01STkVIOHU3Mm5BaVYyQm82Y1lXYTBYbTNaaVczU3JTTUt5S3VKTk1WZXRFYUh1UXRadzBXVjY4UVovdnkyY0Z6NTJTRksxOEJnN0JlS2ZaRG41K1d2OEJ5dGI2V1UyWm4xdVF2a0F6M2dqU204N1g1cy9ObnhkMkN5L25sZVh1V1Fad2o4WjRlVjlyNXMvSzF2dkxNV1liekdld2FkZktjV1FZMThhVjhNalBMV0g0dTdmdWNlR1k1R1Q4emYwYWNuSnJQNUgzZk5qM0xRSDF1dnM0blo4ek95RVF3T2ZtOWJyT3RpZWhJSjNBQ1VyNUpiNnlsang0dWFJU3NWcExYQmZKREkyOEwxRVhTd0g0Y3V4QUFjTlBUeWkrTE8wV1YwK0VtMDV1a3ArV0hGMmtpUHNFZlVUcDZsa0NoM3NUVVpGeGJYT1VsNUpLV2ZKMHJQK2ZsNThYb0hudlloWjduNnNqek9oOTlYamI2OUR3UzEvem5wZU90UDYvemVKNzYrWGx6MmNmejhGdk5mNTZySTgvclBKNG5Kejh2WFV4Ni90VGpuK2ZxeVBNNmorZkp5YytMZkQ4OWYrYnh6M04xNUhtZHgvUGs1T2VONW9qbkR5TWl6cytBeXlNWjZEd3lJQ3RuSUNEU2lRc2c5WDc5ZVoyUEZzQzc0aE4rUU5uYjZzL3JmUFFEQ3B5WG5sOTUvUE5jSFhsZTU3VUdMTVovdkVjNHI3NjVyMGxWVW5ad09UVXlJRXkwYWpMd0t3ZDNQL3JVVS9mZ0lZSUdCKzY2Z0RNYWIzSGw0QWV4NTlTbGcrbVNpVmd1R2JuMFlMb0VPUVZyK3NpbFErblNPdE95VjVlYVhEb2NGSU9PRHBEOU9YeG5EWVpmdG8rcUdSS0YxRTBRYnllcXV0blZDQ3FXa3p2YXZMMjFod1RTUkhqL2Z4VXFMQ0FNaFFyTEdBZ1ZGaTVlRmJMRnhwQXRoa0tGQlFXRUNzc2FGNGRzc1Q1a2kxN0lGa09od2pMRzhVTEZ3YXRtbmlkeGdtK3BsVGQvMml6clp0N1QrcXZabVlXSnRZTEZyMXAvVjg2eTRPTEtQcHQzMkRQUE10SFdGazlXdmtWYU5saWhuNjR0RzZ0THZtUTJiL0pNck1SZVM3MlNucTRJSit5eTgxTm5XY1h5UlZxNXRhaVdTNnFuWksyZXAydHY1d3ZURkUzTCtJeWlaWHFoOW9Tc05kR0wxWEdyS3F2Y2NGV1ZDWFM0cWs3bnErdXI2bWxpemF4V1ZWWWxyNnBhMFgvY1ZmVlU0V1IrOUtxNjR2aFZGV1FyelQ1dlZWMWVYMVZSakN5OHFrN3p5UlpZVlpFbVRyNnFybUx0UEhiUC9VbG5OYksyUGs5cjY4a1cxUm1XMWFmLzZFWDE2U0h5NUgySkRiVkY5WlQ2b3JvQzJjZ0xkSjRmdjZpS1Nid1ViaEZSVHlqY0l2aGF1RVZRdFhDTGtDdmhGaGxYd2kweXJvUmJCRlFMdHdpNUZtNFJjaVhjSXVQK2FPRVc2Zm4vU3JoRkd2aGdyN2xjMHNDQkNqQ0RnRnZuT2toK3BqN094WFd3THRRM2RhNkROZUk2T0R1T3Nja0pTV25PQkxsRHZkQWtDWjFOM2cyaFJ4SlZ2Z0RUaXVndlUrUVI0c1hUeDdJMzIzSXBnczdpQS9pV0ZzdmxxTlZNM2xYSlgwc09WbVNDN0NHUVMzaFlZYmEwcUFJdHdYZ0pJU1ZYMGdCc0ZVZHJhWWRKd3hHK2VHeVlKajNZRVJyeGtQQXMrM0d1WWhnRXJJZDdlOWtuN1ErUGEvd1NlZmR6V2FiRzVLcExLdTRLeFVGU3BhQ00xSnRKWFNvdllQbHBWYW1QVGVIRXFLdWtEdmtCanBCNmluSWl0YlFDVTBoU3BTQzdudFRTY081aUh1RGo3dGRjeC9GK2pnK3BIZmVCbVZoUjJteUpTQTQzZkVraFFUNHJTMXlOcUJORUtVVzJ0RjFaQkhraFM0NHJYNjRQUkdTYTRXdUxSNEFIQlViVnJ4Vko2SDRjRlZTVktweTV2a2dpS0xWcGo0YXF6dWhNaE9YWFJFVTF5WGtWd2ZsMXRpb1FTeFJJQ1ByRGNscThTOTljSlRvNnRhWEFSYWxvWllYZUF4NWwyR1FFUzY4TTV0U0ZzNUVtY3ZtbTVhS1JVakVWcEtQRitmTDZuWWZReFZJU3BxQmlQN24wTW0zTlZsWTFPcldxellyNlUwZDVTb1VXVGFhbXpQQ0JaN09QeTUrVTUzSEtONlJMTDYyS2VZaXpyRHA3a0xNbDlVejNUekpNQlVucFpYOXR4M1R3dzRLWldQR3FkeVQzUTVsNkltMDgrMDJyU0xFWTFMelQvU1Byd3hFZUZTNG51NDRWUm45RVRSSSs2ZUVDU05mam15S0MyRlBxQWYweXJKRldySHdkbisrVWZrQm0rTW12ZDV0UDg2NUJTbTdtaVdaeG50MWhrbHY2bG1KVG9nUUkwbTNVR1p4Sm40RWtjdm5NYWl0M3pkQ3FKMlNrQ2Fway80RXdBZWR0UFlhVEFZLzlpKzZTcXRwbkpxOWRoVjRRcEJhTHpiclczWkluK0wyMWlmY1R2NStUWncrL2owaFM0UmQ1WTBxL2h5VnY4SXNrZzA1bVhldEJVV1R3K3lWcFFQaDlRRW9PZm0rVTZNSHZIVTI3ZlFOQnNOOTNDK0VHeDI4UWJ4SnkrRVZFRVFmWGNtT3VhUDd1YS9OVGR6Q3dPWng0Ylg3S0RpdzBCTU56K3VJZHpEUVRUbCt5QXlNUWZBblRyODJYN3NDeUF6YmZ0MHp1UUhMaGtGc1c3UkFKdW04WjI4RmNBL1pwMld2ejhSMUdLZ0Z4NHU0Vk8vcVFPM1JmdTRQcHhRL3RZTzdnWGZISWl2eVU5SWk5RGRqME85K3BIWDBHRTdkMGR5QVBjY2d0MHp0RURlODhLWms4RTNUbjAvUmFYc0M5eTNaQUdMakU5M1ozMEdDbm9kNDR6VmQ2Vk5icDJRNkVENnBFSGorajdKZ2x5bHFRSFhlNitsR0wzZzRhOVduNUdwOU03QUNPU0VWNWtOZGdncTJLcVR4NDBJMFNCWjNZSVM0eVNlM0xneWdEeHplbUQ2M3hrRHF3MWdLdE5Wd0ViN0p6K0ZiOFp1ZndEZm5GWDR1NHNwMGNZb01IOUl2TkFUNFpRTEwwZXYxQ2hDRFlrT1llVmxHMGRWQ2o2aGRmRmRabnhzRTU5Q2taYmMraHIvRTdlUTU5alFrQ3IxTXAyZTExbXVDRkNlWVVYVnJUbk5hbTdGTWxyZjZZWFdIZCs5WkU1MU5ITnd4S2c4VFB4TzBNNGFKOVlUN05IM203Y1o2dEUwZkpGbnMxNDBPbTNZcm8xbzJPVzFtTTdTdzJiV016c0JLcGYydStlcHVOT2lLZGlNeW1pdlBrcXNpUjhJZ3VuZ1lTZDIrWldZbE9sUC9rbUNzZ1REQk9IT3MySnpXKzErT2ZvZUV0dnRpMXBlSy9VZ2tuOTJBcExXWDAwWTljZVZqbjVVcHFlM1FZWEtUTFg4QmRUVjVjdWdPVG1iajBNMGp3L0tBUlFldlJTSWZETVVZZHV4d25EMkptaFRHWkQrUjdMTmFiY0ROT2wreG9iSmRqRkxJWHF1a29SWEtvMUtSc0RGWXF0L1BVWkxjZUEwOWt4MjRtbnBhYkNlcGtzSWI2eENWVERZNU5VZGZrQkcwbVhabWRCTGdadjJEMU9hMHBaOFhueThmbE1HTzgxUEtwcnRQT2xxTlcxQ2pSeE1TenFnN0ZwT2htWGREVHFvYXZTWEV2ajlGK1Z3NkpkczNzOHhsbFo3UEhNSHZBZkpFK2dOQmtaR0xuWGxOdzZ5ZmNTTWlQalo4ZEd1bUNsTlhlOVMzNTdpYVBOVE9xaE5Oa1FqMmUxWURJWGtXVTFMVVd5OXc2MjdReE1zaG1XZXc1REN5aFVkejQ1WWJNRGpnRjBSR3pPL3pPVlgwaG5YVzBScllxcWJaUmloT2h3cEczNUh2MGRuMjd6bGFybUlCV0puL1A4a1ZuOG50bWZLWFBkWDZyMk5QZm9nZmk5TEppelc4VmowWktvMWh6V1orY0pmdWRLVFREVGM5UXVvd1BmbFZMSjVnYWhpY1lGbjY4MmpBaVc4WGR0LzF4by9qNm11S1JoLzVFdnhsam56cGxoak53c0R6c0hQYjhMS3RPVDAxVm53b3p4MDlhSjViaWtUb2RWNDNxcEIxdXBUWUxwcWJXUzM5RVUzdVVoVkZCT1BMMXluRzlUQk85eWZlVytrQUIwVWtSMUxqY0FRQmJORzNZZWxMRmt4b3lQNmxwWDNCdUhIdGZzSkY3NUluTWhGYmU0MzNCaStQWSt3SUJnK1ZDcVkzQlpvN2hXK3MzZzI2N0sxUUxjeWRrMmh4Q0J5YWY5ZUNQNmtiTXBPenprb2Z1RWphdWVBSmtUdEIrZDR0N25YSTFmZ2hsaXFnanVzWHJheW5pZ084bXFtR0pOZDFnaWszQjFpSkZ3U0s3aVJQVktWUys4ZDNXaGdZeEF0d1ErOWwyZ1lIc0ZtOHlXWlg4aVVVSGNsU0lvVzB2YkJpc01GYWN0NDNKZHZzTEd3K3BrcWxxSXFYb3FXcGFUdHBpUXFyWFRvVGl5R0RpQ1dlOFpqZTZCVWhETHlHQ2NMTjFDVzBTOXpQdUl5ZEtqSkt1bnFrYkxwcTF5anpZcFZMbWVraThFWkJ5OENIQUpPaDlhRW5XTlg1YkV5bVYrYWJzekxTTDg3bXBZaW1oN1p6eUhvSnFCYXQ3VjV4dC9JVTZ2a3I1a0ZPSU9sKzErMGVkUXVqM0t1Vk9wL3l2WVlwYStVM3NhNG1pNytNSG9YQi9yK1RkbkxFcHQ0amlJMWFMVXJnM0VGWEFUMEJGQWh2S3JTcXBkTFo4Q0hjWnZGaWkwcXJqVnhESzlhZGJmTXljWDNJZHJ4Ni9GU2FUQTRMdnMwK05SNURpN0dxTVBFMXZYYTZQcThIUDJmTzU4K2ZsMUM1K2VGb2J3aDRUaUNtekpqRTQ1RHdUSDZiMXdzWjVkSCsvTlBpZnVvbUdvNXRrY08wWnBFdW5vNGdkRUQyS2lBRUZub21SRWNJM2ZjM0NONzFVdHFmSjMrK0dXOHNOSzBxUU9QYzNpN0hzTnlMK2tkVDEyVyt3UVFDRjhaVDhuZm1ENGxOb0RERnJzYVUydmo4ZTB5ZlZqR1pzU2VoRkVlRUVHdWlaWlV2NStTWXh4RXRHVUxUU1ZuYU5oUEo5U0gybG9aSW9ONHNyOURlTVlPWGh3ZUhobmNQREk4UER4NGFIUjRlSHg2cERBZGdPSTNucjl3Qy94VEVJTlJ5bGlsOFY2QkMvU1BqRi9tVXkvcElMNnpqQ1ZYRW41N3IvUWM2UjRJdkhsb1kvQUxCa2FNdGMraXdCR3FJdDJyS1lpK1ByRnkzS1FiOFY5MlkzYUhqSzhwMjlYQkpGY1hDcE9sazBSYlA0RjVuRUwwZkF1M1JMaWhGUXZrRTVqR1U3b21FYnYrdzJyK2NxQmd3RXJESnJOZWxvMXF0MkZxdis4MGt6MytsUG9tOCtXdmd5SCs0RmdFOEYvSUFWSmFtOHh4cVhGc2NJZGJlRkk1UFllYTYrMnVBV2x6WVZaN1MwVVNTOTUveXlPczUwZ1F6NXlpWkhDSDhValpjb2xZS3NVT1pUaE9tbjR5c1dDN0dxT0JXbnd4SkNvQkFxaURPMHA1UkhaM3NnWUlBOENCbzhuZDFzT2dhd1dtbVFSWFpxRS96L0lyTkQzQ0xsZ1c4UjJ3VzNBR0lpTzE4K0prS01FZ3VwU25NWkh1STRsK29uK2M5WUpLYVhwQmFBMEZocmYyQzlZdkZNdmVoMk4rOEtqYzIzOVVDblR3Z1VkUU15UmNRN01MeWNnajRyV1dDQzdsdmhXKy81NFFmLzVXTWZlZXkvSDZ6Q2NBcE83bmk1RHR4NS9QWEVWejU0NEo2dnpiNzFyeDY4K1RQVkZVR1lnN1Zmb1QyUGZ6STUwaTd3cEFDS0VRWlhnWE9QZnpJQmhoZDRVaUJGUFhQOEZTRWJEVjhEUG04N2laRGsySURsOStmUXYzS29LWWxxRlZna0xqZ29XODAvc2lRQ0JpMHJ0NkNBckFQU3JjNkZYTmM1K1FuUUdPR0xrOHYvUEw1NlI3cEw4UXdVeGE4OFZ3aUVkTTdtTDQ3UklEcTcwajlTMWh3aHZvY1U1YklNSmVmUWpoNU9wMFpFeHpsTTJuUWdrTDRSNW5paGxnWGJHT1RyZ1pNWFNLb0ViQXBBdjlBaklFQVgvdjdpZDE3d2d0eEs1T2hpYjE1NWZkcS9xbVRZbjBpT213R0UxRmVwbkRFZC9DLzV3YXBLUG5Ga0J3aUI5YVErbXRvNmViSFNTZXJsbFRydmxmM21hamtmNkFHcklzSXZHYXAydFJCaDFTS29vV2hvWHNFeW8xdEdhcEQ3OFZmcUFvMm9DSTliYmx1d2wxWTA5SXVvWTFJOUx0QWFBb2M2Q2dNTTZETHlCYTdUek5CQ2pvZk9uZUxLL1lFZGZ5MG9BWG9EQ2lveS9OQzVxM0tKT2wvRnA5OXdRWHIyUmdiOW1wRHBXN0tIN1BDSjdaT0o0U1BkY21MWVUwME1SZ3FUZWZKYUdZbVNFRFFQeVFkRitQM2hIVEdqREI5TXlINC9TQUFPOWFMQXJDY0hjTGwxbzlYV1o5Y2tJTkRzdlB3MDZ3eGZNM1EvSDNuTk1JeEY2UVZpL0wxOWtLdjRpd0s2cTVIS2dlVXZya0hyb2ViUkd0RUhOSFdJTDJCZVNUUVhEUXRZbFVSVDBMQ0FRL2FCa1FLU1YxbkE1SXpob0FDYWQ5SjMwaWRQY3d1ZnpDVlZhNVhCRndYL1Y4aUJ1ck04NHp0Y3EwdmZlRTBmS0dreDR5YWZrRlNGcXF3UjNpYlZvQ3FxQ1dTcUd0U0ttaVlxTkdFcXFnbXkzTEVpTW9NOEJleCtYc1VsVkwrTEZpNG5KenRicDZva1Z3ajdNMmgwcDlvd2hGMmJNaTRMTXdIYWF3VkQwRjYzcWtOVldpYVRZUjJxd3NZY0cyNzJJd1YwMDFSVHlMQ0FDWVplTDJBQ25CUGViOWpXWUxoZE9ybUd5RVJtNTZSVXBPcmxvKzJpQ1NYZUdrTzQvdFpBY2RkZUdyejJZVmVyWnpNYzI4NE9tL3JHOEJ0bHZINUE0OVhoSVk0R2ZWSUViMGpSVngzS0lSUE5tVXpXeU8yeVNzc2xOTVpTemQ5bVNQTXdKdUtMS3ZxK2lSdElHQ1dxR0hWRGl1R2d6S3F3L2xveDZrSDh5L2hBMVEwQ3BOV3oxQXlpTEtzZ0tSclU4bjJxRWpRbjZKSHFwWFNKT2kxRjNROHFocHp1SHNac1NpVW9IN2VUbFBrVDZHUkk3ZGNGYVFGZndOOVkvaVBwbTlzYnp3UVVFVWJBc1MxVEdDSDUwM0RWSVdJWWlsNitMb3U0UkZxT2RNMmhpRFMzbVpFQ2NnUkh0cUdIWTlXL0x1SVNhZUtaRm4zRWRJb0dsQVkvZ1NFV0ppRGdTY1dveFJzbjhVTk1KdklKZTBjcFBuazExVVZJbHFHRVVGSW1LQXRDV3lpTGxNZUU4b2hvdjR0U1ZQZHFNQWY5UmZUWW9VQ2tQQWg5VWN0alhIbEUzeTE1TGRLc0ZmVC94OU5jS0EvQ1l0VHlFTFdFMWkzTEc4SEFVUGIvWUgrb1pLWlNPbEFlblZvZTRtT292QzNtOFRHd0o2dWMwVW95QmxuMWEzY29QT1B3REg3YjJwbjB0QXcwdTRMYnNDMXVDY2FzbHRTMDVHTEkxdkxzdmJBWFQ0YnB3eE90M3U2ZTVlMWtpcklOS2ltczVINkw4cTB6NUk1ZkowRk42aXIwc3VmR01jdzNVbGZaVlpjQmZCdm1uZkhiZ0YwNDFpdktab3hOMmhSWU8yd2RLVWg0YnNSTjZGY2kvb3A5VHVLSGtXWmJhcm1ORFlZbjJsY1dlZjhBbk5QRjgzVTJlT0piaHc1OTg3UHYvY2FqNGxXUlBWNkpILzNRcmZmZWR1ZVhQdmdMUk9hV3RWOXBmL0czMTN6bld6K2MrOTRSYnNSaWY3RVcyczVWV0FMWVhyRk5Yend6YlFvNTZVajBZMndUR3BYQlEzL3h4VC82SDM5eXkxY0c4R2pzR3B3K04zajlXMisvL2ZwUGZ2MGQ3OTU5RlpZWWQ1YlIyd2dKTSs4MmliMk9WVmkvYmZxNDI2Q0RpU0IvOWR1V0hIY2JrNEZJem1JRGhaRWxhZzBRVmUyVDZoczF0UG9RNDI4emU5eEdqRFU1d1E2WmpXUTFVWHhPYlRITnZXOFA3L1A1RUdCdkdlODBia3ZkOVBTTHRSTm1HaHA4NXFHdmZPeTdmLzBIMzNyMkxtM0ZIZkozYXRDZDA5SEZ1R2MyNXh5bSt4SThYYWZpOERMQ2JDempjRW10THZNcU1scy9HYnpyL1ovNDFyVWYvWjAzUE5tNEVnZWJuK0NoN0NkNTZKU2Y0Q0dBdm9QbXJoUUNnSDM4VEtqVlpJYVNqbFhNVm1nQlpSYVkzaFdHMDB4SUdqT2VlMzB6RjJRUU5Uclk0b25MSUxqUDZwR1Vla0hJWE1yeklHOTN6dTNJR1hVMU9mOGNPYy9MYStWYy9WMVAvT1BYdnZ2MmYzcjdMYWVxbUNJaWpaeEtPbys4SGRZTHUrU0ozQUpTOEdGSGNINlQ4L3A1MlNVSE00U3ZtYTI5aXpYa1oxaERab2Z2VkZLdUpFMFpJbVJ3NkdiVWJvZkRhMGU4RFZMd1JleG5jVGNrZ2pQekdxQkNaL3liODMybzVTUGRNNXROaFdHRk96RGVtZ3dQcS8yUWNJWVhhRVN5YlNvb0x2NkRuRWpaTzhnYkRud3FjT0lIVEdRR2oxMzJQMzJFc1UyT0xGZzV4b2NlbzhORDFMWjFqMUVVei9ZWWxkTWFPbDV6T09pVkU0cWpDNmFCSkNJQ0tVNkZYNHcrQlI5REVxVnJTdnFVdHZRcFpJelJpazFZUENlc0MxRTRDYlNiSXQ1bTk3bjg1alplRlBlSTZGZ3NPaDNVUFBnQ215Y2JZZFd4ZWszeGdQYUhCeUhuYVozVk9JUWZvdEFOM0NXM3FjUFlqcE56Mmo2d09sTkNyL2grd200N3V3T2tLZ2k3TWtmY2k1czVpTElLQ3lUZXBDbXVzZ1dsNVJUSVY4QitQUzBqZWk5YkphcEQrZHE0TnNQR2RjcSt5YUVMN3ZEdzJLSjYyeDVWdzZuR3FiSjhOUjBkSmRCSGZMTXlzL0llU2xWVzZoaFU0MzZvY3VCMVdBNCtRNW53b0JNb1dkVU9hQkFsM0hHR3QrNDB6ckdLTDZQYTNoL1VBeDRaM09WN2huOVFteXNhc1d4NlNaTWZNcTNNWWxWQzRJQ3JtSzR4RXdUbXpaclV3S2tFVjMrcmVDaVJnVHhlbVduc2ttZzEzcmNqelVDYjFobU52MjVwQWhkUVRhU0xpamc5dlFGdkM0V0x0WkN0aDJXaTlmTEdDWmpXWUQzWlB5bHg0TkZ4bUpkUzNPOEZyRmZ3STh0T2RYWWNyNU9kYWtGYmxtTjZKMXNXZHFvRmJWbk1rWlV0QzJGQ3RpekFhNHFSVGxkOW5hd09kQ3BiZHNUMGpybmlpRmRyazFHZ1g5K2ViUEE4ZjZCbkl3dThvcHI5RWxPN1VMeUc4TUtQYkxPSGpVYnhmUG1vSTU5eXBlSTJqNWQyYXR6bWlEN3p1YzJqbk5hVHBvY1UyM2ZJYlc0cjFvZDdjSnZiQkFPM09jRUREc3NFazdqTkdROFZ0N25FdHNpbVUrTTJadzRMYm5NS0JEZ1pIbk1hbWNBa3psQTJHbGk0T0M3MkdEblZLVzZLdTV2Wkg4a28xY3ArVVRZbnJtbWkwMHlaZU5IYmtST1U1Uzcra0JHZE5nQnBJZjF4TDR4WklBZUZZOEtZMVFyN0MyaEFxNklKeWxOWitFQURHcmRGM0o2aDFjOXpIa2E0WVpyc0x6ZWdHcUxFSFZVWkE1YUcxdEIwS0lQSU1BTXA3cXV6WTdLeEYvdUl1VnltRUFWWUxWNUxlYjFUM2xiRlpmWUxEVU9VbncvSGV4QjhqM0pjdkNjQ0xLZ2U4KzFURkV0NEwreU5Hc0ZpZzJsaWREeVA5dmhkVmVkazVxYzdoWHhqSk55aFgzcitBZld5WVR5U212VkpWUEdUUDlERzJNRkk5b3lWd1VqRXZ4S0R6SUZEWHF4QjlrdHh2RW1EN0h3VDBKZUR6T25uYXBDOUlvNDNhcEJkbE9qWVFaSTVKTkFGV3JYZ3VEZXhGMFF5TWpJNWV2ZmdpZnVPdmFQa2Jrc2MvNE8vZmZLNnI5N3ppWCs2MXc1V0JKMGc2VDJIbi9qS2ZZblJ6VkhtU2Z2QzdPLy8vWk1QdmVYMVgwaVB3amd4K082M0h6LzJnVVQwcGpTc2hZTmJqbjd4OGR1L2MvZW56azN4OGtuNjlKOS8rSU9IRS8xYmlqY1BreHhqZ1FoVC9tVUhkZHVnZDkzc1lOL3ZmZit0VDMzdWliM2ZhaUFlM0FDS1JTdUhneTQ0VnE4NHJhbktRR3l0UjB4WUxGWittMlAxMmZ4bjgyb0p2VFROZW9mVGtMVmY5Z3ZIRWN0NGJWdnhsc1JDTDhaM1gxaG44cTM2QzhRWnBEMDNXaVcrNksvZGxyMDVncWZJTGRXaW5BTkJhRHQxUkQ2TXlmNzNsTm51NVNQaDNJQm5Oeko1QUR2T1Raa3I1bFByL1hyT1ZjdXpNbEZGWkpxUGo1WUNKekM5d1J4TUpKVEkwaDQ0OFVXeEp1bWpwcWZZU3U3bVJRNUJyZERpRldxVTcrdVVQYldVQjUxQ3NPMHFSY051WEhqV0t1V29VMUlnZktkb01GYkI4bE93OHZaUnJQaUFIUjEwSVYwNXdpazR3WTVEYmNzaFJDMEx6TGdFZUtaTmgyUHdDT1pKeTBRNEcvbEtPT3BPQk9TSjRhbkFPNG9WbzIxTEdTeEkvSFVwL2tLS0VPUk1vV3Rpa2p1bnBVK3ZFWGxVZDhwZUdDT1Iwckl6TXR2U1dQQy91cVg5Z1J4YlIzTTRJeVY2VGs4OXArdzJPTVlQdTQxVFhMc0FDdjBZM1NZaFJ4cVRkM2RibmQwZEU1TWtpakxUNk9PSkwxVEpGWUdKT3FjbDBMdE5kTUJxMUhuRitXMjVoSERvTUk0Rmw1UUVUV0R4MG1HbEZPbEZ5a05VWHo3MEFOSEdRUCtVZ2t3WWxHWGFsaVp1c29xRFRKdExId1dObEFtb0FpREdUSGNGaTRhY3dsaHA5QUdBbDJqWkNzaEFhUTdNdnFhbFJZNWU0dXFTRmtCdVdMNWVFaG5HTGZLdWtwUk05WFNmakJ2ajRUQUVYUXFMbW1oQ1IzeURERllVTzVrdkh1Tml6Yy9IQ0VRUm1QbmludmJJeFNQcElsK1F2L3RHTHo2V0xqSUppVEp0ZUZFK1FqQy9pQU1OSklCWjBJanJvOThETFVGbWNjVnB5WUR1MHZpK0cwWUxiUFNqU29ONWRPU1ZobGVxSkJDb2pWd3dmbEtsSUFMc3FQTlR1Z0RWWm0ra2dFSmdTa2VaZlZqemd4bmk0bEFBaXpZOFllWmFDRXJtUUJvSUtQaUVwMDN4aXlWV09YL0ljUGR5ZGxBSEtpV21WWG1PbWFYUmwvd1J6ZXNuMHF6MGRuMW5pMnZ1RHBHWFhCMkR6bEplNWhtUmJJS0ZqN3h4ZWxRWGJlTlU1VVJST1NvdDNNUWFRREc0b1BLVGFJOUlsekhJRE4yaDlNS3FxZFV3NjYrVWVycFR0Wm5TTnBJbXZWUTliUk5wdE5OSTJ2bWtJU1ZWeldxbEIya1hlVkYraXpDRThxV1UxOWQ0YXp6RkJKZ29IVHlZcnVvT0hnUTVBK3BaT204d2xQT0lmMVozOEZpdTlUbzVnV1FLdFNnbkVNbW5yWXplS0lBNTA4MVhkYVFZa0JPUmlKQnBNcHdBeFNON2VaVlBzZE1Pd3Z6Mk1Kd0hKcks3MXpDOGxBM1BlbmJNUGloMGpsNWloOHFValdKWU5iUHpxa2lDK1VnZ1FWMk5RSUprTUl6N3g4dmlqbHJxU1FJSjFxSVRWb0VFRloveXVBeXhzcDRra0tDRWJKYlI3Q2JZWCtNWnNHNmN1SjZ5dTk2UVhHRGNrSnFVRThDZm9hdkthd09WYm1GSWpqTnlVWHBzajNpYTJhZFYzYjBtUy9rUy9peGxGSXczT3VXUldzcGJuUEtOWVVwRTRiUjI0bUM0Wm53dVhmeUI0R3RzdzNuUEE5SGNPWGF2QTNMMkduNkFHMHo2eWllSTVsWlVtdXhtWTlDR24xb1NzVzlnUDV0WFBncFRpY1ZGWDRxNXNpUFIxMEJTQ2dRY0xMWjZ4bUxTaldvSnJnQkxlVW9ZdWpIazVTK3JzMlpqRnRDM3BCQ2crMjE2cmx3Wmt2UEZnWW1rWjdtNjJ4cUxSZTFJTEdvUmxRaFdudEZGcEZ6aHlyWGtUdmVpdHFjYXRtTHFaWnhwMm9oWnAxcjd2REw4WkV2ZnlNdnM1OFFzSjIySXBpeTlsTTdvQW9pV2N2NHlKdVpBUlFEVXZlTHlXV0FaUTQxZUxtTzZiMlFaQS9IaWhXVmtWVEJtZm1TTnE3dXIvdlRYT0swU1d1Tk90SHhwMlpLaTBxWHhmZGVQRnRqT0FiSEdUWTI4OHFlMHZxbUFXdCtrMGlpWE1RV1dMSmN4MDExcUdSdXVXellzSlBMVG5yK2V2cXBXSDZsRjRudXlsRmdjZE0reGtjMUxrWmFUOUlHc3dvbitadVhiY0ptYXYwS05MYlE2ZGNyVnFWZXRUUFNSNDFhbWRhd2tXRTFHVnB5ZmNMVUtSYjFYcStIS2RNUXIwNk5qemE0eGpheExzYWRrYTlidmF2cVhhRXNyc1o0ZzFET0pMb3JFMkVqSEpFTzROdGFUOEpOeTBEdlVJR2s5cWEwb3pzaFpDcGp2RlNWZVkyVkF5dWdHSnJ5R1Z4UmhCVkZiT0JTV21KdTlHMVVvVjY4b0RoY1o4N3hmSjR5K0hTWEtWSEVlejNUTEZVV1o4ZDZnSVk0VnhabmljSkF5aElMcHVBd1YycjFLcldVWTFlZDlQYTBnQ2xTbUNuT1lRbXpHT2pFK2dEZ0VrNnozcUtCakVYWndhZEhTQXFwWnhqajFRemNYK3lZSGFNUzBhU1p5aFNHV1RsNjdJdmErbWNMME9lNlZ3b2w0OCtBZEUwNVM5cWhnaHVVQUdpSDdtM2JrSTFFMnJBcVVmVmJCMUNhOFNGRml6aHlJeSsydkNUMkZzalhlY2JzU1VqeGJ4UnBSUE50SHBBWWsxZzg3TUsrRVVYbjE1RlJQZlJiZU5hbXMzUlFvZ0p2VkY5MnZsUmJWN25uKzZDeE94UDFNRjdFVjZ0L20xUW8zS1VWTzNCZzRldmt1ZTdtdmhJVDRBcWJVRW1WU0ZReFhIcis0T2hrQ1hKRldEVU0reWFlVExuN3RNdmpTdW1WTWpoTUxYNVhuTElLVlBHY1hFcjdPTFlVdkllMjFlWmZWNzJWOVIrUVdHTm51SE9LY0ZhdDBjWHIyczQ3VzY5V2drNWt3L2ZzT0t2NjJTaVByb0xVU1V5cDlMSjZxVGhFZGE1bmlnRWZGRjJvcG1wbkdpcS9VVXNUUk1GWThPa3hoeVczc3djR1lzRGs2L0N5SEhwWmlnRHVyOFNCZFNKR014b281Ky9pRmFUeUs5R2FuVUxBcVJaRjhYUGl5MkFwSWlTN0J6cE92MnRDNFduV1QvdHJsR0M3MVRxR3NROTljcDRUZHYvSyszT1RWd2lISEVZR0hWdU04K3gySHV4WUpOUHVRZSszTFdCeStMMEpsV2RBVkpYcEVGSWIyL3hEODBkNWJpNldZV0lvVEZpbmtJU0tYcDkrN0hYYnBabkdIZzhJbzlVQnpxUUxTaEFxbTR5aGNIem5aTFhMNEtiNTUyOGx1a1hLbitOMlQzV0k5K1NGNm9xYmJDUW1oVTlVdWVxcmFXUlBnclR4S0ZtNFpDcVVPajFOcElzdWo4azdRSUhFblRzY0VNWUJJVDZZdkRRVDVkUGFDWFZ1V25idGIvU1V2RVhtMlZTbFl5eUhmdGsxUWpxc1BpaEZOdG5pSE1RQmJJNjR6TTNNb2RnL1c5NldMQkZ5MzhuR2NyT1Q0Z3JPV0EweGxtaU84VmRCbE1XNHpqOW4xcTVtOVR3UHVyVnIxK01OdGx1RmEyYjhQaEhDeGw1WDdWM01YV3hQY0lTdmhPZGpMd1U0bUk5Y0QzQWg1S1hndE5jcWU2ZFZUZGNnK3FrMEZLcFNMKzhzR0cvY2hMR21LNDN3VEJ1VTZBU1d6RU5pUHdUZ3dEN0Z5TGh1OGtHQVg5UnNPeGcwZDMzQStONXc3NzRZNzR3YVlOMDhSOCtiSU5Wd1pQTWVqZ2pvQVAzcDJpandMc2lmTk8wNVZueG10SXdKeE4wdDJOVlBkNEw1cnZuTDE1Ny93dHY5OXoyN0JpY1NtdlF6a3gwMjRwKzNlSWRXNTRHQzdmMlViN3l4ZjlWVGpGZHV0SHViT2Q5M3c1ai84eEo4L2ZNdlhHdUE0dDIyUForckpyOFNVd2VUdVVQdURHKzc5dTROLzg5aWZQZjRmWDdtTmdGT3JhUnk5bElQbHZqNjdpeHdiY010MnN5ZGJxL3NyemRqWkhYejY0UHVlL05ZN1AvWGxQMGczci9MTFliM1lCUllJMWkwaC9KYmx1aHZGRlJaaTMwVGRSY2VpbTA2RnhXSVZRSmRsQXZLQURJdDdzMUN5cnhKcnlQSmRjSGVkQ3NabW1RQkNJRnAxdzZyVUd5WTlpSGE0QzB4Uk1KZHUrelQ5UXRZMTZmMmkzMHRsbDQ1Q1hlVWZEYVhENnZqVE9XeDF6WmV3VjZialkwdFFtby8xRnF2OUpJL0cyK2gzZXdTTGdRbmQvZTZRWktYY3d1UmlyVE9MTFEwdzJiTzhLdW9lRXlMaDRCVkJOVUx5K1p6MVk0SlJVSjA3eEhtYStKU2dSN01OQk5JR0FhOUx4Zy9GcmVoUEpsSW9McDg3T0t2QlN1bEp0bkV2Ykd3U2V5Unpxekd0WURUTVBtQXVvNWd5VzVvd2JaT3MzTUROOHZsR1l1bWxhSU5hcnQ2b0lKVE1TWnVZSTVndmQrZU84dmQ2ellUdGNnN0RxUzNOWWRWVStiQW11UlBjb1BXd2VPSWtOL1JVSlNGTjBsclZNOEJ1YU9uc2hXbS9NblRLcnMraFBNbTVVMGY0akt0Rkl1TDRHWTFjenVRNld5WUorNnpHSmxrblJYY2I3SytFM3laZ2FoenhIYUQrMEV3SXVRY2NCK0wya0dEVTAwVHk2bURDN1dXdkZtdFBqKyszRnNuQ2JidU9oZ3VsaVUybzBjYWhTeEV4a1lQcmUrTXRzNlpPMkcveDBEcFo0OUZMU3pxTGE5a2Z4d1ZId1ZRa1dLeUorQ3pGbnRwcWxtYWlaQTJ6MFpBNXdGRzlFcUxCQ3llQ0p2dkJSTmNxc3FWNXJBR094Nk90OW8zalpWUkt3YUQ1emhHS3BKU0NRUFd2YS8ySFBxN1hyNG5qaS91NGFiK0tteVJuSkRISUYxNGhVZW5TT0w1SVl0QWw1c0lrYXUxMkJvcElIWm0yWDhhclpWZy8vUUtUZVNwTXlXM0VrcWZSZHQ1MmxmZ3NHZWpkT09LcHZIdXBIbnlxZlVFOHh2MmRuUy8za3owSkljUHUyN01nNUtnblRKMlhBbTFvU3F2QlVMY1B1UXYxUzNZLzkrSDVmWHpVMlZRUzd0UUtlVVRzN1BuK3FJS3B3d1JiUG82TE9kdHJQL05pZTZ2N2NGTWZsM1oybU82c2ZKUzRGenNCRzJyZmNLNDkzSDI0c1k4YlBBS2VrUXEraWUyT3kvVU4vVktPSXlLSTRxVjI5Y0o1bldaenIrOEpmU3BKbjF5SUx1em5aVzlpWVRXZkJlYUpWTVRIOVV1UmpvcE55eU9FNXFtZVhjY3V3WEY1ejkzcWNMU2J0SnpqaGFiZDFFdndjMWIzbHRuWS9OVzRwL1BJV3R6Y0hmeVJJUUZUZ0pKeXVidVBiUlBiL3FXRXVCVmk0Vkk3czJ1QXlKVENueldpUXhROWhGZ1JwWGlhU1RHSVk0L0VIV2NLSEFKN3ExazQyU3VZQjVYN2ZJUG93a1dEb3FENGZOMFlRdm9zVWdqL1VPT1FBUllIaUk5eFVETzdrcjFvTnZnUmppNXBNbnNTWHpWR2FNM3lRRGJXSzJneCt1dk9hTWpMWWtaSUNxbGVHaVVFYlJIeVdLUGtwdkhtWW9sbkVDc0x4Y0QvM25JS0U3Q2FBU3BaMHFFK1Ntc3dFRVhDV3dxaXVNZzRRUEEvQmdKR2FHbHZWYmFuUEt6WDdMZVZqVU5TbWZKVVhveCtSTnM1L2t6QTNTdXVqdUh6ck4yMTUvMDBCM0x0ajAxMmNYZUVrQzFhekZIRjBYdkFIT2lQZWNqUWRjUTAwcjQwNGdFVmo4Y2xlbGxuVS9aQlBOL04zTkVoZDRpQlpRRWQzeWxYUHQwaWxXQ0UxZ2xuZEd1bFJVaU9zejNRSE9uMXMzKzA1WklJT3dLVTBOOENYeDBZdy9KZGVjY0VEYnhGbVJ2UkZrZ3hXbEtnbUZWYnNrZGtQK054NTFMR3NoUWd2NVA5bStBVVVmMVRGaEZYaWdJYlp1YjdFVXVsME54YW5MNk5uaTlLYWZSU0Rzc01PN0tzZ0dhZmN6T2JTenBvMnU0Q1UvYTZTM09DVlk0VHJGaXUzNmFoWm5iaEpYMVpGZnVMNWFvL0RvRjJ2bmkxdXBGTWwvd0FqZFF5aWlVdlN1cXFCblp2NFhxcVlpZXFKMHU0OXEvRnJYeEh4eFlyN2lpUEVweTErc1Q2ZFlRanZjbkNQdnc4UUpmbWZmYXRGbG9hR1VRcm9SWXA2QzlOdjBCMEV0Z2d5Z0REempGZWYyZVpaai8xS0cyQmlNTkFjV2VQc2dxeVl5TGRXNlEyc3BMSFBObGJoU0FVNWsvOENmcVJGWEtKaWFpTFhkc0UzbGMwVXZudjhhMG96N2ErQWxoWmF6R21SMDJXemJoSTdydzFWejlFWlJCNHlrU2pUK0ZyUmU2dXNHcHMvc2xEK1NtNGE0ZGIwTU9CWVpSR1VNR3lpMVhiOE1NbE0zd250NGxnSXNrN1NWc0NyNE5VYzdCdnlxNHdzVFBDbVRKdlhLN05oblQ4VmRCbnY4a2xkK0I0VmNYdktiTmlFbFZGblZXNU90ZWZod2hqbTRhVjJZdk5QR05GaFpvb0txK2MxU2hvZzJncWp6b2FaclBWbUxVMkVWbEVqWnViSEZQVDJBcXNPT2xWMC9BS1JiaUtObEdQKy9IYVJOQUdOVWVQaUxUUkhCUGVleVdjcHlxcHQ2ZFc0U1hNLy9XRzBDUXkwZ2J6SDZvM2hTUHdtbmJkWFVaamhZTW9RdWtsSHJxZXN0Yk93bkh1cmNwaUNNVXowZjd1UXJVSHkvYWZmSGlzT2ExWkhRRTMvTDgyeWxIWnJQbG02ZEIwSVhhUUJERFhqcFlHbFUySnRwd3FIdjgyU3c5K2lZbWczbVNPck1hNHJBemVJSXBycVdRZHJ2ZE1NM283aHExOWFXVFBjd3hjNG92MGlUU2Y2TnNGMTFZdkNsWjNLZTR1a0YrTWNUZEl5ZUR2SGZiTXdYcTNGQnNNUFpwSUVmTFJhU0RzaFZJVmRvRmR5RXJVV3RLMjRqQ2JIbDh3Q0pzVHRIN0JJOS92Z0pLSWtta3VkSlRwVlo1RStlRFNoN0lDNmgxaWs2LzZWOUtleG1jbGlKc1dvL0h5TG8yYjRmZWdQSEpkbnlpdXZtWnY3MUk5RWdQMWdxQlVaMU9oVmFBQkZ4R2JVN1pQdW0zck5sYmRqdmNGWENETzNnN080OEwyWWc4SFYwZ3pKZmsvUlpkVyt5RERPQlMwbWIwWktWWDVYQXRzZXhRdjZHcXNKZ1RUSkZxVmVKcVI2NmpMYmdRc01heU4va28rSjRyMlpsSDg2M2l0WHVPdjROanBEcGFQOXZNUGJXK21xWTNYc09pQkdFSTA1d2lxdkM3bzA5RlJtZUhGdWlKSGFuZExUZlliMlp1a3RxZ0NxbGVkU2VaRlJUSnBFQkxCd2RLMWhscTNSWDRxc1hCR2Z1UGFSQkVqaW5NUUtGcG82Y3RMSmovWkNjYWdBNERDQXFuc1lJZUhyeTBodjFwclNtQXMwbk41aUZ4Znc4aHVEUGp4ZWxtS0hXc1NQTE9oc1BiRXVQT2FlMmtjRUxsbUw0dnRqZ0tFOUtjQ3hodjhzYmoxOEZLamZrV2JBU1FQMkxIaHdPQ0ZtWnlFTWU0R2N0bEVJc284NWVaYkl5K3BpL0NOVGE4VFV2amZDWGQ4VkRZbnh3YVRxVk1SNGlxSUxrbHlOR3p5QUpaZ1lZamYyaGFNR0lBemtpN0huNUZ5Q0NOcU9xWVM2QkVvaDZJNDZ6WEMzUjBvaXk3VUNaSnB1TFE3K0pNSmFOMGFvdW1yQWE0N0tyRnltd2prdENaZ3FYand4WGNDQnRnS2tUdzhSSWRlYS9qSHhKVXBRSnBxSlpwbDVOVjRNK2p2OHBFYmhvZlhqenlOZmRWUDd4TUhTak1hVUZ6UFZjUVErSHRMSGdCOVFmZ0lnR1FMeERSNTkxaHozSWFmM3Y4dnhrazU4OVFaSnpIcFZJeVQxSkJPTzJTY0hGK0ljUktFbXZmZHh3S3lHV3B3MG5UdGFDME5sSnIyM01Wand6VHB2NDhBbGhQaXJMaS9KRGtVaFNVaWpVRzF3Y3BZWTFNc1VXbkJwampFeFZVY2g4N3JhT1NWY2lFUDRZQkw5a2RaUUpKbkVqbHdrdnlUN0x1MFJ3YWdKL1c0WUFuRXBDU0xEMUdRMnVkMVhLYnFBYi92TC9VQVZERnhjK0FFRk5BbnFkczVHL0kwM3N6WmtLZnhRWUV5aG5TSUNwSTVwTHNVMm1Da2ZpSlNGVFVzeHdkVlY4WHFCSU1yVWs0WmZkclpMenQ4NTBrb0VNR3QxaWdRMjBFRWMwSWVSQWt0WmpJeWZtQmpxZEpBQVRKUG93SHdnZDc3SGdGcUt1UUFxM29kQjVkQ05WckVLdE9PaDZRQnR6ZHZ1YWRDekpPYWhtVFhsNjFlS2JJUE83eDB4YXdlVm4xUnNUdXN0bEVCVWxPUklFb0RvZEhzSHVkTXVhQTd0V2JKem1zeWFURlpMR1RYOTBYME9BNXhQZCt1NzR2WTlVV3hjSnhkM3hmUk16a0c5WHk3dmk4S2ZiaVFYWjlFMi9VZFh4c2pKTCsyNnpzS3VYelB3aDArQ0NybTIvVjljU0c3dmk4c1pOZjNoWVhzK3I2d2tGM2ZqcFpoekxldjdJbnQrdllGdFpPejdQcXk0dHM3Tmp5aHBhdHppdTM2OFNuTkJsWFo5elhqK2dQNVkrdjZjZkN6SDh1dVg2SE9CQk13Y0NuWjlkdER1NzRZeFczWGJ3L3Q5WEt0dFYxL05DM3MrcU5wWWRldjB2eDFSdTM2ZUNiYnJuL3ZXTFBwRU56eTdaUldkNVJBTURhS2k4Y0lKdE1aczF6K0Rlblp3cVZEYzY2VWYxcGFnSXEzaWpzZXVOZDBTZG9YV2hrZk1hVmk2R1I3V3VKSk8za09iL3hST1NBOWllKzh4VndEUjF6Skt5aFZRMlRNcEtDN0grRFFrVkJiZzNia2ZPait5Smt3VDVvK2pudUJZNDI1TE42RWE2YlIwVHFPRUhySzE2TVVPSGtGYmsydk9XRUZhUHV5QWdxZFhWV0FNSDZtT0JTMEM1T0dUcHlETmdjNldSTlhvdEpyNDhyWktrRlYwK0lIdzhQSGgwM3hkOFBVV2dNOU1teWc3Z2JhZzR6dVU4bFZWMjdCU0xSQUExRUYrUXJvOEd5T3JxaGE2RElmaVVudmtxcjlvaVdYYzNTeGp4UStUTTNQVkUwemVGdDdzb1o4L042VE42U2VSNTZrQzMrMUUxMzRFRnVjbjdxRVltZWhDRjhHNVdLWVRteVozc2ptb1BRUlFrSnc0SXd2aE5uYjZ3K0xCbjgvVzB1QjVvMi84Qy9WaFkxL2JWc2pGMEhMc0JJTEw1YmhxVnU2SlZreno5KzdLdG8yUklmSXA1WUNMWjdlTlV4UnpoOFZTWnROQ25yQldZMER3ZzQrSUJLaW1nK1RJaEtMT016Q0Y5SjRaRmF0OThMdytJVlZpakQ2TGxSZEN0Z0hSaDhIbUZSK3lSQ0FHc0xqeVRXek5DYVlZVHQ3U1VLYXltL0lJc0VRY0NnbkdXTW1ERGpjRDY5Y0JUaEV4aDBGSENJSGpnSU9rWGNyRElMUXZualZIQzlBZ0R6RTlHcko0VmI5MGkzYytFTmQ3MUIrZ0FlYXZuVU5rZXAydDIwT0FmZ1U4b000bTJQL0NMUkJkS2JXK01ucGJYQ2pJbGROUmVCLzZ2WVFibDV4RFpKY1UzbWFadlhCU0k0bFNSOSt4SmVQdW83Njhrbm1sVWJ3T0c4K1VKUXNIZkwwek42UnVDY2thRlFQMG4xRkcxbWR5d3NvN0dNcFh2aFpqZCtIb284MVBXOC92M2s5RkgwSy9NcmhPem4weW41VzQ5M2NBRm1FM29nTlNWRXVHcmNUaVZTWDNqR0dGb3J6OXlpc0lyODNqWUZWOGtPZndqelRnR0x4MlZJUmJXZzR6TUNHaHF3QTVLYnQ5ZmlHQnV0VWNjeThlTUtCbEVVODZoVGhRTW9VNk9MbCtUWk1VVkhBZ1J5eEk1K1k0N016dE8rOW5uMjhZLzNiZ2E5ZDNFaUhRRE9GbTVaSlhKeDJhNlFoMzd2Nlo3VGVPU1pDRThRTnV5d3lFY2Ezb253Nm91eG9ldFAzbFRhR1hoVWZUUUhQSlhtODBkbCtpZUhYTHQ0cFNkbTlmdDRmQ1JYaUdGY09wUlhRbjAwZk5XNndVMlpKR1o3MHEySW1NUzdwdmFlM3NwQmhiMGhvRU1NeDZnNWRhL3Q0V1o0Wngza0F2dTNuVW5mb1dxTlo3ZXc0WGlVcjFQcVkxbkRyUmpXTU5wRi84alBDMEEyb3JzUXBDWUlndUU2SlUxTGtRa1cxczJtM1BiTW8zS01pOUcyQzNaQXFhQ3U4d3RDbkp2dXhZdVlMYUJNRUVOUnZTdFpBUzhlRzNOaElQRm5hZ05GNjJBYXN6SmZvOHZVeU1pOTRHUXBudEZ6Rkg1endCanNaaUY1UVlCZVFJMkpiRGxMbkpXckZNbW03a1ZuR1Rtb1M4WkdON3V4R3NhQ0g3Y3ZlNEdtYXNhVllUdVhWdWQzRks3dCtza3hYeHZwa3VhNk05Y215WFJycmFmaE12bDhOakhGb1hsTmJtajdSaHZ2TVVRVFBhbHd2R1J4WWk5MjQxT3psSWlUVWtEN0ZtN3l2R0pkUGI0SmdCUnhHY0VJeGtzUW9RdnNnYUt2OHBvWnBRRmthZDZJbHVDSzhBZjJXMUdIcDdHR2dmYS82UXFyQ2VQRWhMWVhWbVVCY3NxMzdUSlpxT1dFSkgzUEZoc2JiZGJpSUpIVW9mWGE2bWd6QkxLTitnd0JjZm1GL1NXWEdyUUc0ZUVacWJiazFvYi9DNWlhYldHS28vdUlKc0ZnVnpPcEVZQzBMSVNlRGFsWDk3MTBudVVINzE0Qm9WNU00cUJGdERCMUx0MHJTVGtOQ1N6V055OHN6WXRxVzU5S0lEQ2RzZVlWR0JOeDBMdjlyVTVQNHlOTXhHcTlOWW9JTnAyN3dXUnJSWnAweGpZNTVsaEQ5OSs3ZEsrZHlEakh5c21YUUh4eXIyV1NVVjlJcUU2eW1yMDZlc2EzczE0WEJiR0Vyb0wyZGhqb1ZMenFDVWJkYnV6RVVoZzBHZ3dGMGszd3dxU2k5RUlQbFlaa2svcGhQVnI1eXVpVXRFd3Bnb2pYa0szOE5FcGxpdDdnZ3hHTHBmSXQ5QWtKcFowSlI3SlNyQXFERDM1WTlYVjNmanR4SG1jR3VWMjMvRDNYbkFxekhlWmYzNzNhdTM1RzBzbVZMdHBUbzA2bkJNclhCQVNjMnRzSFpNOFNKa3dFTVliaDBZQ1l6RFlXUlRKc2pDY2VkMnBZY0NWc3VNRkVIMHZFd0thZzBnd08xaVVPNEdDWU5haFBBU2QwUVFnQ0hjWWlTT0xFVERGR2JGSlNyKy95ZS8vL2QzZStjWThjSlNVdkhZNTI5ZlB2dXU3dnZ2dnUvUFAvbmtZMGlDaVAvTW9KVzZyY2pXQXJwbEEycVBpekFONVVtbGtYRlo4cWlBamNGRHdlakFvTkxkT3JNVUw0TEtJTE1DejRDRnhKS09UQkl3Vy9wZ2dwMG9wWXZNSVJNUVh0SjgwNnJGdzhtRjRBZDI3NE9Ob1podngzVTJQbnJBR1BDMUdtcjhHTFMrVjJ6aTVGa29OaE9Mc1kyMWdDNEdIT2J1OHQ3WXg1eVBsSmZaMUdzdHhqSURDRFMyMlVDZloxU1JvUmI5TVpiR0pleVFlYmxJM3VUUkY3dkZzOVgrZ3FKT3JCNXFGRHBaOFg2TTltc0VJbG1kTkZvUlZyenhPWklsVVF3ZVlLQXkySjk5cmZVeTUvQnFWMnM3L250V0phRWRQMGcyNDNEcXgrSlJheDBvUWVrV1E0b1Q1eEo5WVA4WGp2a05hdnpaQ1lXMlVWYzJoVDNSQVgxejB6MXd5OFlIRWNCUk9hc3hzaFd0aXhMYk9CbmhEbmszVHkrR1pJcS9YZk9TM2FhK0gzclMzWWF3Q1MrQmxrc0lDWVZ0MUI4WEJocXd2NjYxRUJCSXMycmF6dDVmZ1IzVHA4TDJrRU5udGdzSUFtNDlwOFRUcHIzV093cyt0bHpJOFhzdkhkOWNuUGNBRWVQZEZXYTd2ZFhyd0dZSVhrSER1UjZOdVB3eDJrRUpsQTNDSFhxR1dYNndhMlFpNjZQWE13K2Q4WG5VbGYyYkl2eEtROUhIVjdpd1FnZXdjdTNxTm5tSmdNejNNMG82enl2VzlaSkpRbGpDQ0lDYTdQeFhUOHZaQUp0L1c0RFczWVQyRSsvUERRczlNODJONng3SlRrV21qYUprWjRzSUhtdW1rUDFHbTRtY0NYSW5RNWpTM1czVWhnNmNyOE8zRVJjUVZla2R2Y252WDlKWjJPZFh4UWdzUHJFeGZrbTl1dDcyc1dUelNKL2psK3N2M3BQajF6TVJ4TDhPRGRMTjhuSlBaMWVKbm1yOWpDRGdjNWNCS0pkN05yNnhGRCtWVC9DR0VQY1J4TjAzblhaYkJyMmhwUG9yM2p2NktTNVpvcVowOXV6S2ZwNTl1dWJ6ajNTTEpvNjVPdmo3M3YwTjhPc3AzTlI5dVVUdWFnTTRLbGNGTmpzSVMzV0R5eGozWjcrK24zMWx1cUgvZWcxckhnVFk0dlFrVGlEdzhtbUhNcm5NcFNGQlZCRVN6T3Y4Q3F5eWtUU1lGaUozbWU0aFowVVZ6NEV3SUFDWU55Z3ZGa2E5QnIvaXg2MU02YlcxenZ5VXFPbmpvMzJrOGZkckdHbHpadWpwWDc5eG91bGd3NlVjVDhFd293RzM4b290bXIySGo1WUQzNmlzMWYzb2dsa0tWcjhub3NWZVhvUGo2OEpVV25ySTJ4OVpPM1cwMnc5dlhickUyeDlvck5WVjZXZ0kxdlBYS3k3b2YvY0cxM3dwVHkxNFdTckwrdnBMbW53akpmRTNuOWNsMlRlQlU5ZERGRmgxSm9oeTVSbVBYdGY5U2F1T2dhVnZ0cUlhdlNBaDhsNnhJcENsVVVKM3ZZMllMTkltR1N5WDlvays2cXpEc3EwZStJV0NPT2lQZi9QTGovbXd1b2I0L3JPamV2akZWbDNmU05aSkd1dWoxVGN4dGZIbm45YzE2ZTVTVUFRT1U2Slp4Rjg1eFpjRWdOMy9lckhMelhSYW1GdmZQYUZaV3RLR1BRRlI4NCs4aGlENm9nOTFUaWFyTXAvb2dIRm9ZbG4yWngzQUp0KytDKzduR1AyU2xNSHVkQVdRQzYwQlpBTFRRR2srUFJjS0tuYjd1QmVFRGU1VmpITHVPM00wMWtSTm1CRmJJbHVWNC9wVzJEenVyWDJqUnZTd0FaSXEwK01TM1BFeWlNc1Z2aWdMcnJGMGtITlhSQVdNYW1ZN09GcS9jWThON0doL252RGJzVkxGZXdNOVo2RzU0RUlrLzRJN2xqdlVjcUpkaU5FQklOSC9OMGpzYUprZDFDZUxxZ2thQWVwTFlmcEM5T0R3MFFxSFhJVS9lSFJZTzd3VE9GY0NZdElSaWZTaURFSkswM2JUYmNLSjg2bVlxejY5cDFsVUZKYmJCU1VFNVlqdnFWT1pwZDh1dFBZa2RlT2o3Vm1CZWVpNDBaN0MwZWpHTVozVWNtb3AzWmJ0WHhHeXFNa0xKekpKT2VrSVJsNWNuSlMwYi9JME05V2lpVHdheEozNUE0YXJGNm0zVjArSEtrUXhsWHBkWFIwU0ovMVRKL2F6VW4rTFU4bWhsV0FCRm9WWXQ4aGliNGVlV28zVkdGb2lVcEJBM2xUOFhBaFlLclRJVkdxNlE0UlVtd1A5Y1RYRW1jMEVvT3NqZDdmNkZnUk1qYm1BQllrT3gyVTQ3SVNTYlpJdXZoTW5SeWF1UmhzdHJLRHpGdVh3WUVkN3MzcDZSMGFkOEExdE9PUk5SazNkc2kwSlNFM3pURmhkTFNUU3R3SjNSNWRVMkZiZE01Zm8rbnNhREM0M1NJdndwYzZZdUtBSUVtT2Z2MCtvMzdNWjZ0WEdoZEZ0eGVLRC9qUmlEZThZTEFyQXp0SExCREUzeHVNSTlWdVFSUm5xLytBNVkrRnkwc2JBQzM5SmlDak5KV0lVQ1NrRmVNZ1ZLQzdKdzRhRG9KdkVMUUxxQlplV21oaWRNait1Z0tHMXB3ZzJQTjhLTHZoWDBIY0tvNWNpdEJHdjM2WThiS3k5MDRML2g4NWN1cXBuclJBVjY2Njg1aiszWkZiVDEvSHR2bFlPN1A3NkRGMnpoOW45ZXdXZHUxZytmTnpSOW0rVjh0ZkZMbXBHamt1enpiaXc4UzhCMnZPTXZCWkJsTm5HVXlmUmF2TldmVEQ1aXhxS3MraVJzcFoyZ3VQdTZxYzQ2TUEvY1U0K0NjRElSYUl0TXpmc0ZQZ09oNGVRR0N3cHJyejhZU2k0RlJoWjhKNjRVRFR3N1hkL21yMk9OV2tnZ3dSdENhNDV0L1F5SXR3OXlrUkduNU40QjRrTlZxOFJ4U0JHZTlSOGdVS1JMUjREMzBPNU5DMGVJL0NjVGFGOTRESnNPVTVVK3BGVkh2Nk56SUNrWHJ4Rm9YYVc4eUR0MlJlb2VReFRpcGxjdEtBRC92WUZwY3p6OWtndEVXSlY4dDE2S1JEaUZjclY5RFpRcnhhQ1pEcEJNa3BKVWdVc0RhSVFSN1NTN2x5R0JlZERmNkRxRTRMOVJBOCs0OVJCQ29ReFZSK0JBWWxYbnBJSDVSS01aOTFRN1FBOCszYUJNcnBsckZob2NtY0tCcWZLUk1GNU9udUJpa1MxY1E1UmZLT1RKR28xRzNqRk1rcFUvcjkrVWlNUTY0WU9TMHp4TjgrWG0xU2hYeG9sd0IvZXJyUzFRYnJFZE0xMDlsVktlMVN0UGtrTFJuekZFRXZuZTcxekZQK2hMNWdJTlUyamJDcGVZcVFOSU1MdnpJNERmVWV3cUlrTUFjempmNTRwakVEbEhIZjg4eFJUZVBPdk9jK0ppajlIb2l0L2lpZkVoT1Uwc2lxRHB1ZU9tWTlkY3hPdllpejB5K2lWcHNYVVQ5c1hrUTFsUytpR2lrdll0dWZ1TkQ0ZWxOaHFhYy9PckJINGZLR1BJV1BuMjlENEFmcGErVWlJRW9jVEdZUzN4RUhFblg0UlpGUFFQMk5Ed2NaWkdNTkxhQ21SOVJzY1BwQlYxczI2Tk0xdUphdzlFU2dSczFneWwyUXY5QU1KaDB6SG9rTzdzanVHYnVmN0M1OGxCbnB0czRwR2UrVWtHOVFQVzdJc3FYUG91c3lPR011K3JXUmFpejBxMjN5ZUloSFJlVHBzdDV6OEFHQXBzcUVac3d2eHJEYUJIVEJjYXNsYVJ4cXlyVzBZYWxKcUJENG5DenVkMW5VdG1XOS9DNVVVRTVQaVJDcVVjbnUxZHUvVTlhb1hzbEQ5UzhkT1RKYTNTbllKWit3R3lpcXI4ZUhmTUdTNWRNamtabnVXQWpKQjFVTG9QTm1hSktld3MwQ0thdXR3YUg2SG9FVnVRczZWUEtBeGxzTGdxcTV6V0RWZUdJV0VCUkN1U2kvY1gyNnY1ZjFkcjJvUUt1cE4xZ2VYTC9LZHNDaXovRUY2eTRUVVJGRU84N05jQjdkd0d4SlBvY3NQdjBWS1RCWTZ2akt2TDcwNTd5YkRad25rTUxvVWpnNXlMM0hYTTFZR1JVRmVNWlRWMEF4NmVvZXlTUXEwOXEyb3BPZHB5UFBlOWxPMkFvbWM0Szkrd21ZM0ZmMWdZRUlabXArSXdjcG4rVGNCRERzZ2U2VkltNEtNRm93cnhNWlNnRTg4T2FxSEhMcVRRS3B1bGFsSWZlUEtYeEthUitva09Ya2t5djdsVkYvM2lERlNBN0l2cnBMWHlCeHl6TDBlOG1iS1NRMFg5KzUrbk5tVTFDOXdydXNZbjlaNzUxSTArcXZLaUZBQ2xPMEVtSjNGTzNzb1BBNldoQitUME9KSVN0dmpYamZuRWJuOHVaR3FVeWNuSitGRTNKOGRlOHovTlhtcy9xRWNESHNwdFNFNUp3Z1Y4Z3k2ejJ2amtFMnBQaXR3amlLZGNjcXJCSC9TNWdwcWtCOVdpa3JOYWRZVk4xVmpGZ0YwMEhaT2FZcEdvVFBvcCtwdjU4QnJLNi9aMGNKLzQ4clFYTnRoMUxQeVNqNmxFUHMyeHE5dUtmcHVxUHV1dURQRVhRSFFFdkJTWEJ6NG1TVkZkRlN5RjVwYTh0MWdYT2tVWDFoZWhVbjFTK3lSVGxQSVY4S3JhWlJBTTBhMklPR3BOTUVtOFQ2Z0N5YytlOUNLSlBiME0zaEttUWpxMEhkSUF0L0p5T3FCZ05GMWFRRDQ1Y0E0MGZWaHdGWm1SSlVWb1crVlErTityTzNndzFEeVdBb0Jud0k4K21FdWovRm1uL3VyWER4WTE2TGxiOGx6UjlBbXI4OEtEc3IwZjYzTzZIdkY0bC8yYmxEQWtIdFR2UUJwQkxnbmNQTzlqbHZuMk03ZlJuZHVqeTgxaE13eHV5MVpxNFlxdnp4V2xQdFl1eGVLMDA3bGlvdGViTFZ0K2JhbmwwNzJoN1ErNi9URnI4aW9zVytWdmw5bHM3VEVtTnJ0TEpKUy9EMGoxWm10QVRWQ2xvQWlQME1WcjVCVzh5UHRMS3NwYTFldWxCTDBQc1BWczdSMGhZdkxXcHBzNWNHV2xLUmhNNSsrZkdWT1hRRm1vdFRUNFozSHJ1Mkp3MVczemxFZUlZckYrc0FSQU9HSzd1MXROMUwyN1YwdnBlMmFPazhMODFwYVp1UGJCdWNJYXN5V3Juc3VGcFZMVVpjc29TSEJpc1g2ZGZQOWE5M2FlazVYdHFtcFYxZVd0TFNUaStOdEdTTWM2ZFYwUlhlcWFmM3piUjY3cG96RGxZdTFSRzc0OWc3ZGRnMzhhc0w1UEVISDg2SndNMEZrTE5mbmFJaVJGL2x2WFpUZy94ejRNbElJQ2liMHJVS3lYalZaZE5wLzBWTXZ1a1lhM1VDYkZ3dlM2VTNTTjZna3VjUlZtSHJUeXVoK2dOQXRlWG1HNUZnL0JRbXFvdUFiVFVJaHdYZVMvLytCZmFYQWNxQnF0S0xGVEFzWTdpRTNESzFTWFViWjFYQm5ydExNWm1SWUlWVzR5b2JZMVNENkV1emQvRGovcGhVK3lqOTNqdDRoZGxNeUFCcVJwYWp2WGR3VTkxN2NZSnBYMm5oUEZlNVhsanJLMTUyaDFrOWZObk9NWFZHVkJLT1g3VS9MRnhmZ0tJTzBFd1RLcGZyNkhnRTlaOHFrZVp6RzJZSzFIL3V0NmpKNGk0dnVXT09YZFNQZmtLK1FwK2E2ckN1SVh3bk51RmNxaExoV1hQa3M4RHdlbFZLdEJyY0NNV3pwcElzZ1FqMVhSOWxLdXdYRWlOdjd1cDNSQnRYWlU5bFBGR0NhZ09tcVd4cXpoTDNucDYvempqUmdoOUhya1h6MHR0Ry9abXB5aU5OMVlNRG10K2QvaDUxWlowbm84Mmp2clNjWGVFMFhLV2VFMWV5TEErclgwQS9QWVdQSmJqTUFMbGV0Wmd1T0xwYWdBWmxBNGtrNEtMZkt0NkNYZndnekRjVjgvMDBSVjR1cGNHdXUweFRRN05EbjJtMXJiRnJIMzZIQmF3SDF5L1B1TTVUclptVjBBWXEwUmZLSC9UbGxLVzByM29jUXh1M3FQcHo2aURVckVnSkxvM0tKV05WTFBPQmJyUWNGM2QxQnBqWTRNVUhRazRpSVNPdVhRVitLMS9sRTRhd1hyU3Yrbmlta3pSbHVtQzFsaFhrSmtiK3FhNzRDcFFMY0VHSlpKRngxeGROeWZ1NHRaNDNWVThkWldoeEMxbFNzWnp1dXRJLzBZUG9vTXZqb21JdHBQRmxqSkdsMDNYaU8xZ2l4ZkJLRjNPSmo5NVBhOWp2OVpXeThWM0JNOXFWTndRYjNEY2tGQng4WHlTZ0x0aVVla3dES3JMSjY5VDkvN2lLY0pQaU5RZUZQKzVSM2pQKzJMQS9zdjF6UVpFdW83eUF5R0RpajJEVEdWVWZRdzg5M3FRamkrRk0xS2YxblRhS1NUL0puM01ZMWxoSHJVRnVhLzZlT0J2QUszdGNjYkFrSXcrQ1Z0SjlnSUpiOFZQdFVSS1ZZTnZIY0YxTlg3dSs4VTVyYWtqRzVKSEY3TzJZdWVsTlBERGFVYTlUeEZTN3RqZEVzaWZieFh2YXhSUHQ0b1BiUVNVOUZKUUE1cVI5UUhsODE4RnN4MXJtamo4K3JsVGtUOThkNVRoWWYzdGU4T0c4M2lmRzBVT3VUdk43UU1NUHU0N29XYXlVRzlIUHU2TEx4RW5nY2NSbERqREIxSVZNQ3p2a1lFVlNoclRQR2tlZXZNRDhvS09vVUR3VEFYL0QrVHpqeGZoVkdlREpZMlhsMG4wcmIvMll5NFBsTlZ6VEIvSWNPL2NxSzJGdjluRkxqRGxDSUhhcWZaVkpuM2kxRFlwNWh5SXNaYUJGZVRRZXFweEtWZVJWSDdLZWRyVThTckZ0alB5UXo5Q3JocDlpem9oRVF6bGhDb0xlYU1TeWdRbldjTVhjWUtOTXNQVjZlTE9nQ1VzU2R1ODdtK3RvQlFYY1ZUQTBMUzlTRUc0TmIySUNNNEtxNlpkemRvRndxWllIRk11aXJhdXdTS1I4bUpLMTY1Qm94eHl4dlVISlZNVFk2NUhLSHBHZjE2S2p3T0xBdVo2c0twT2M1T1UxY1J3aUFidHplVlAxQnZ1UnIwalJkWDBNM1UrV1hobE9WTjZtSHcrLzlKVjdGTEZBSDJPaGVxOTlQSFBacHhiQ2FEODBEVUcrWmlQZUZZaXVwZFROclI4TDJKUEtDalE5N2RSY0ZaSkx4QWJVclhCNy9KV0NRNDFoOFZmREpPZmJYRlFWeE9wdk5yVWZSZmRBbFJ2UytVSU1DWFovbFo5cHQvSUVGRU43RnBQN05sWWdaTStDNlNLVWV5RSt2a0JvaEg5MHMrVFlvVDRMdDU2cmVKa2FnMGV4VTBOTFN5N0RKTStvZ2lmRnQzU0YxUWY5dlF2QmE1Z2NnSjBSRkJCZXJna0thRG1EQXRwbFNybjdNRlZuNi9za2w2RUpCVGRjVitRaUNycU9MeWR5VU1wNHExOUZZVWt2alFPcU9JZU1KQXBRRzZLL0tFS05lbUM3ME1rS045WTdKa285eDZuVldzTG8rczZscXlLUTV4eVhnUk9oeXlCZHBGL3JzZWlYVFo5b01mcEU5R202TnhGOW1Pck1WQys2VmRxcUE1Vlh5bUlPaFdDbTI4enovZUlnQktWUFVjaGRhamZKSUdaT3lOL2JsamxVMVgvWk1XUE9pcGFLaFgwajVUTzAvb3JMQjdFOVRkdmxVa1JzS05Yb3BqakxYSlF6bmpGM2JnaS9pTXJJQ2krZXVZbFZTUkt0bkpWZzdoSmtKbTVLdklRdWtFU2hKWWdFcWI2aCtqTFNONUpVelpNNm1VVU9McjhQSmxKZGNEV3A5eXVZS2w4N3lrdGR2TGxVbjQ1RjY2cnI3d0p2cVNvNjFid0tONGxGZUFHQkdDL1l5N1oyaks4LzlXT2F1NkRTcTVTdkdlVXVudVVLZWZZUjkvL1lTRG8vVVVXbUoxQlE0QWJKbXRoUC9xamloNVRsaXVRdktuMEpmUm5wWi95T1lZQ1MxZ0szYlZtdlBmRjhqQmhjM2tySWJWaGZ3RlBjRXN2U1laYWlzcGVsdGlYSHpaamp5ZFlHeUMwbHJvUjRTN01zZmtWbFVHU0xVYUFQUURoNjg2cTNEUTYxRkpsWFUyWXc3cVBRUDZ6ZjVtY3hyRC9JVXdCZzJQZTNVMnVjVmNTQnk0dXR6b3d0QmRFTExvL3BlSjVhMk85M2lpbE9sUXkwOTdnL2FWU0d3UjBJK0VjelVMK2xzdktTK0xIaTRuUzkwZ2NSNTJNanhJOXhKT0NRTmZwVjY4WlhXUkw3Nk1kaEZFaGczeEFBaEhCRTJOdEJuQ29OYmpScVdSUFlGVUJyeGpQVlIwWEJYUzZtR21PVDg3dU1iK1Z1UG9VcXh1SHlQcVZRQTdSWFFHdmtpK1N0cTM1N2NDR3Y0Mk5wWkIzcHZJVTJVOEJFZzlxMmthSmVOZFhUTXVpenBMcW5KMVdXTG0rV0tHeHVESlRDT2N3ZkFUdWxWQi96ckVQVTZHMEkrUk11UUV0K2JmSzdtRXZrYVlVOHZIbHlGRWpIbjFGZ2h2S3plSy9BeFZPTFZ0YjFpS095TFRCaHc2US80ZU1hRTdxZElKdVJCSGlHbURONkxVNmx4UjE3SStSWm54STEwME1QSzhabmZnbE1tdGR5dkxQMXJvTVQ3Mk1VRnBjd3J4TS9ibG50TXBHNzVwaUw1bmF1di9DcGk4WW1ORGl4dWVUckl1ajVEK21TMHRGNjF4OGZLZ1VXbWw2TkRqQ0ZGTExVd29tNlFpdXhkSGxXTHcxbGE0WDVveE5qYWRsOGI2a2QrQlU4QVU2UFkyaTlrU2lCSm9sSHhOdmpTUVRQVzlxWnhmTW14UVlhM0s4NmFGTlAydjM2Mm5oOUJXakxPbG8zTFovWnhaSEt5cEJ1aGRrcElkdXVoUGxvZjRnZGF2bnhPTG5MSlh4cWRwQzdTOGVZYkVxODBNaDFLaGttd1pwN3VaMThGdm9kMXpvNmxIS2pjVHJtazQ5YTRVMEZBbm14Mk1EYlhWSmc2Y3hRczlESjM5ZmZNNG83QUgxak9KK1B4bjVlSkRrVmRDdDk2RkNPamtvTUxOVlNiQk4zM0xrTXVzMm9jZFZ1Qm9ZZEs0aG5VdUdaVzI4aTF2VWk4RkVkcnZHNTJ3ZXJ1aDRxS3AzZXNXcTBCb3o4TWIvbmhiYkREelZkY3NjaXdLSzc0QzNqNWJJbUlVSWlQSXZMNlhGTmRCa3MxL0tNU1kzTWE4R2ROY1hGOGh3M1FzNm93d2RvL1loeUl2a2ZGQ0xYaFlYSklKc3h1RlBpNGVYUlc0Y3E1T3FOSTMzbW1rS2RmVVk1Z0dCYnUwN3NMNXpjSkVNR3NZZHpQblZlKzlwVDU4Vnh4WGpaNVR2aXVzV1Z5ZDJocm93RGF4L0FqNk02YXQvZW9Sc0dPOVVRZnBiTkRrc0hoNlFnaVVZQWJYWXdJT3lWNGlUT3c1d01idldydVRaYzczSmhMbzV3WVlFMjNxRGdVM3hvNVNXYmlaRWpaYldMVWRLM3hpUk43WVdRTk5CQWRGV040Y1M5OFhzeG1tT3FFMUpTOFNweUFtUk5IT3N5a3BTVUR2QXltM05CVmMyVDFoTU0vaTZldEtoem1JUWcwOWcvbWRlOEM1eDRNaThMZjVXYUMzT0pBSnJRWlFCWjB3OUpRbHJaaGQwTHE0b3drT29sRnBPSlRiMWtRYWJqL0h4d01UcGhyM0VUaEU4bW9lTGMyaEc5d2x0UVYwRERrY1BrU2xaM2FrekNRbVlLR3dVM0pqTnFWaVBKZVhsdjREeXlReUtiZXJ0YVV6aWp0T2JmaytEbkREUm5GRkZ3anVEcWFKamQ1ajY3T2YxQVRLR3VXOElVOVFXWTh3VktiSjJUUjU0bjROenE2c3pvTUlSY3BtUFJEZDJweXdTZTJxOGVEcHVaTStvUk42MW54VnlJWDdvUU42aTA5SENTQ0d4dS9IdkRJc2o0UVBPUjFndzZ4Q0N5cFZiZGhCa1VhUGswaDJRdHU1ejcyeHErRVZrNVRYd08xbjdEdHpyYjRoTmkyRlhEQTZHSTNqMld4Z3ZvejcxaHYzaEZOUnAvTDNCYW1qY2lkWFc1M2tDTVBRWk5mUkk3dVpIZGt5a2ZhdFZ4S3NIeVFoQS9WbTMyeXlydGRFWnN2K2dXeXFSck5pbFNZUTZVNmU0OUlscG5haFcwK0tBV3RaVit5VTZUQTVxbkQvYlhNT3BjNUJORUpNcm5GcklJQlVPMVZzZ2laRk5valNxVDVpenk0SDNSUzFFQnFLdjFacVFydzZyK3FORmhEZ2hGYVpIdXR6Kzhmek1zSWcrbm1waTZ2M1FCRC9UYnFHbkZ3TzZJUGpGWENJbW5HU1R3VExhWENwaG1KRDFSVUNlcjk5ODVtVHRtMklSVFplbWxoZ2xqeFhmcFhHZThmMDYxRmk1dmhoQjRVZmtETWFka1FGcXNpY29kZEgvb21tZHlRQXNyU3lnNVg5RVdiYkNic0QwcTZXcDlCNExUZTZkM095Qk1GbXBoNVNLTzNqVzltK0xwdVpYTE9iQ2EzdU1DYTFYdnFOMTVYUms0Z3U1dTEyUXJLcTN1YnFQZFM2ZDNFNm9XWGR5RUl5ZlR1d2k5VTJYbDRXN0RyejRGMjQ1cTU0cW5hVW9lTXpHK0VlNGFDanFiUFppR0lybkVrbnVsNnlCVEFRdnBzWUNjK09QWktLNzg1VENxdGxYU3NJWjNvR0VkVUp4N1NKeDdvSmpwZEoyNHZFTHF4RUZDM3lmV0xVOHI2K3JFQmJSSndvQm5PdjdudjhUeG5taWdKclB5TGkxRjhxVWMvK2tuNDNpRmtURDJOaXFibnhpNnh4S3Q2QjNNcG9NSzRPbWJmdVFyYjlvVFpUUWRYd09xNy9Na3lRQndxVUlyY2JwQm5PNE5YKzdwNENKUVk4MVp1ZE1VZFl5L21PbDR3UmZ0TEF1OElSdGY5SktFdFBiL21OQUh1bFNDSHdxL0tSY3RhT1RxWkk3QSs1encyUHFOaXNraWhzMVUwU1BZU0tiQWJKVGVzajVDWm1PWmtHRHlxbVZHUXE2MkRwaTlXZlFLR0EvcWlZcldDTXZKNmc0RFZIWlpwQUMyTFl0U2pqc0V0YVV5WERyc2tNdzBvbHdXa2F0ZWcxL2xpdElRbFp1cDNpVmtIOEdHbmNDS2JWaU5zZkkwWk9CS2hSVGREVTk2WVdnTDlBZUFaRlkzcGpLdVV3YUorTnJNRitLd3BhdXJCTWdPb0lBMkhsTDdCb2V0Q1ZqT1pzQlN0MDN4U3EzNUU2bDJsT1BVS3JGS2JLZ3dyYkdoQUlZWmtzbFdiZ2YwZ295RHFKRDFkdUtCL2luZEFxSU9JODk3VVIycHpCd2Q5d3BTT05sdFk4NnFJSk5ybGNWRWgwZExVbGZwSEtXS0E4ZVVXQUduZVhZa2s5b09KeFhzbStxV0VoblZmWWw0c29NbTRrbGpmZjBEanVsYTd3Y2hYRWcxQ2VESFFONDltZnN4Y1ZrQ1VETHI1R0Q4bG95SHh0d1MxSk9BRTIxeTY4NUdLMWg1bUN5TWVJTWNlM1pXakFDN0tLb0psSkdObXhqZkFKdzBkYlNncytSVlJJMHByaWZrYm5acUx1dFZadHVNQzVJQmlHMjFRM1ZVbE4zTTFrdnlyTU9ieGMrWkQ0ZVczSUl2TjExYWdlYXN2T0hudGZlbXFHcGk4R3VkUCtIUGFHejVoWkR4N1hWWkMrYXpVNjFWS1NnTEE3K244ZWQyWkZwb0hVdExwNEtLMlR5TWMzb0FEOWgxY3d3cnJNYUlZZGwrVk85am16a2E5Vk96d1NyN1NoSE5UYXRDSXVHT01lSzIyZzl6QWt6RFZmOXJ1QVlqNjc3NlhKdm5ZdlRyNjFXS1FsZ2doekZsYUVTOWF4aEVZM28zc3I1WGdmMS9haGhYNVBadytaZjFzbEZTTjd2UHZwNnQwZm95SXlIRm54Y0VsL1VJVTVYTVZVeURLSU5WNzlabzFrM0ZDY0JDaDhZeG5peTEzb1NuZnc2S1BtMG1Db2llc1NlOWNCNXM4RnJkSU5sYWxoZk11WW1ST3I5S0JhdGFFVSt4S29xcXQxbnZGZCtMamx0R2hwZktxSjV5SG8zSERjOER6QXo4VDNVbi9MUDJXSjlkMzRLakV2ZEZpVXpOWjhyYkFtZ2lQNmwzczIwa1JDRFdkbmFlekpzNzZ6SU5rdWxQMHo4SDh0MC91eFhDQ3RHOFVobU8yUUExOGxUUkgvL2NVRklxZlVGcmFIMEJGMHQxSHBPRi9ZcDkybldwbHJmdWg0RWQvSjQrdmRod21pWTlPUVB5Z1FFTkw5bWdPVmtObnI0aFFtYlM1aFdjMnlmcjd2aEsvK2lOcnBFQlRnWHFtRmxyL0xLZG1wRmxSRk1NTUNmbEdGNTFHUitiL2RJcDZFeStpQUNrUnBMS1QwZ2NXVWRJRnVrNFRxZnIyY1o4UGxoU0NrZHRmS2VWZ0VSYWVrRGZoN21KQytrZ21FMHlhOEw3Uy9wSHR3ODNaMzZpMksybXdXMlRjL1M2elc2YWcvVEl5TTVkTEdWVEhqUXU5aXd0eVUraUpaQmVUVXZ5c0FWdGRtT3pteUxKTkRBOHpuMDBjay9WZk5xbnNhSUdPVVVrRG5WSWhrRElNNFVHOS9oTmc1Z1Z6eWl1RlR3TWNCZ0NPRmFVMzNYTkN2Vm96ZlNOc1MyVTc3ek5Jb3I0SnBFYmNBQ0lTaFdDL2Z6K0IxTnlrMms0cVIvRk9seGRITnFLY2xzUWVPUEFTRGdveVJCNUFVNmtiNUYzNHYzOS9nQTJrV0pYRHRHaDUwaHRUbW5HcVYyY0xkTUNTQmZwVnhpWjVxR2tZM1JlbitVRDFkRmtkNXpOK0w2R0VCc3pubEp5RHhxNmthT1JIeWd6NXZWREladU5objhneU9NeTRCSm9lSC9YVW8weHZuRTR5d29KNFdjR0U4bHZvS1FicEx5OWEvcXdtd1h5dGswWWJHc1NCa0p0ZjVQNU5vYjFOM0tOanFJdmorTG9iNGdFajVsVnZXVXl1S1lQZ2tMSGpLN3BLNnh5U1crTzJmMlMzaGEvVUwzdHBDRXY2dzJoYXFuLzJLblczYncwZ012MFpLL3VmWE0wQWlYdDdOVzlieUZGY21YdnhVSFljbDBRdGx3WmJEQjdyK21EU01CUHY3cjNnbENiTi91SnBUYS9xeUZSNjR2bHo4SEp3dkpuZzB3UEQ3U3FkTVJnK2VOWDR2YXo2TGVqa2ZvQ0tDS1B5clVKTjgzSmI5UE5YSEQ5Z0p3WEIxaW5Mam9GdmZHRGNpQUN5OWZiSVFpWHFpWFdsSko4MWFwSWlOVnptdXByZkJyU3V6ck4vTmY0TkdENVNFUjlqVStET1NnbzVxRDZZOXRVTnFKTWJEUCtuVUY4Nlk5QTJWM1NtWXlNb0pLRjRyTXdxVHF6NlRraU1wVzh6c0VVeTJ3RXVDbFNpRXd4N1BFUGcveVYwZVBzb3ZPZEk3RUVYSnkwcmVHc09yTVlITGIxb3ZkWjVibzVEaUZpanR2bWZWU0VNQy9GY2FKTHRRcDlIQWZkYTNzYzlLNGM5ODNlRjVwbDVUajRiam5mWXozdmhCckxrNTJucWprZlFvU1RIMXVic3FuNmswNnJKcVQvbkNOeE9ERTQxQ3NDUVQxL29OZmFyamQ3Z0lqYTRtVUZsS2dGQWxnQktJcTN3MHBBUzRHcEd1QUlSTk1yNENpdHZzY0tVTW9ZbEZvQlRZa1o0eFVBbGVCS3ZRS21NdVNjejkvM0xmM2Vpc1pHYkFmOENVd1RxS3g3REZBVVJMOTdESDdVZStneHNGS3YwT01Zb1ZxaHg0QlFXUWxnS3BCYzl4aWdwbGZvTVRoUnI5Qmo0S05lb2NlZ1NyMUNqd0diZW9VZU16NzczOUtmemU1cUk5MjlJSDdTYzNmOVJYaitZQlRnVVcrbXIyQkt2VUpmZ1pwNmhiNkNRR1ZGaU5IeG00ZDlTM2pKbm4wV3hJcmdidXBQL0lHZ3p0dUx4eDFHbDgwSGRyNmZuU0s0bU5wcE9zUisvZnZzcTZvbklxNlhqajgrL1IrekE4ZFJ3Q094YTRsZHNmcVJaQjNVRCtvL1pUZGZpT05hcUg2ayttQ1JQZGhSL3lhN3NGeTZwM1BFb2wvL2hkclo4SFNQczROcTBvMVBkNFEyK1dUSDZaTHhrRDMzbEk1MGpxR1VjYW4reFEyTzJlVTl2N0xCTVZBUUx0WDNUUi9EWlFVNFowZjlWbm9va1lidVplR01ZTGlDczVqeEorVjVRdnpxbitkcThqdkd3bk5XcWxqWXBjblJDenNWUS9QQ2haby92WENCQnBJaWRzZVdmVmZNTUg5QlBicjVmdmI1WFdCaHUyS0ZYamhmNFRrdm5MZXlLeGEyS1JEb2hYTlhMbFVycWhqenEvYzhEWHY5czdWMFJXOUlMR3dwWGRsY3VyS3BkR1dwZEVYSks3OUxRbHlXcm94TFZ4WkxWeFpLVi9UNnhNSmM2Y3FzdTZKRW9GK1c1Mm5PMEQrajBoV0IwR09CcWtRdjlFdFg5UDdvUUpHdmdUY2RDUnQvdEFrMWZxK3c4RWx0ODcwSEZIMTYwOW1ubnZxa3RuL2ZnZkVqZ3hLK2o4aVJrK3JIcU1hQ2dEYVNYU2JVU3VRQjFwVEJGY1U4TUZKTXNJc1N4TTVBdXB3K29TbFdlaTgzWUdNb2VwbjZzSHpCQU4wdGFsbit0WlQzUmR5dUw1VUNNQ1JxVUdSdlBQVWovWmZhWW1mdW5yMVprQnFCbDVjNGpkYXZXMTNlZFAveDVjMzN5ajAxYlJyVlRIcDBVeUtVbU9YQ1FWQkZiTDc5d1VzMUJnbXh5b09ldmZuRm85dUJRSkFjVXBzRWx6YnRWOWg2OHpGUnhveFhEdE0xY29iMlpXZGV1dlArTzFjTy85VFJlOEUveWZ0U05HMVZYNUhCSWNuczNkU21qWWlzT0J4aXovamZFVndmY0dlVjdsUmRaeUxtNUNtT1FxZG1KbFVlRURUcENhRmxIOXBVY2ZWRElnYXR2NkF3NldSQjVWKzFERVY1V0ZOK29ZdnJWWnhNeUVnMjhkVFcraStRUlZpekF6d1FoY0JLaWdWd2JxRTUyMWwrRHJocTNRbFUvMlVtaktzMWo4K0FkWHpVb1Z1dTBKeVEyME1NQytjSGIyRDJrb0ZZVnVRZFhZSmlBMzhxVkYvZ0ZKaVF6ZFNTdkdZQTBOYk5WaG5yWkpIeENxNFpRVnNBdUtUREJ0VVZwdjJVWVJ1WDRuVnFJaU5CeVVXRTdOZmw5ZWZpV3JXY2VVZEtwdXlIVzRJVXVraHFYUjN2K05Tb3YyQjNEUHhDWW5hbmZJdWxqbThoSHowd0JMRDZ5RjZBNy9teTNsNVgwUXFqS3N1SUY2VGxGc1dtTnZWVC9hM3RKZ3dvZnY2OERnWGtKYjFMeUZXc1JTQW94QVVqVzlqNjhqelhNcklaQWtBbGVsSUhFN0ZKdGh4enBZa0xPTGpTRkJmclVQRmxPMkJMdWxxYkcvNmFtb1JReU54b2Q1NlhFbVZpR3ExcUpWS1RxbWRBc005cEl0eENKWEZnd0lJQUhubEpNNFJDb3hpQ00zQlJDUDBJa1lhKzFZcm92b2lQbVFZSDdFb092YVcwRWY3NWpKSmE5Q2k1b3NyTFRld2pHa1Y2M1RRSERkVWpRS1NTUDFNTVdXc2xmeVpQMVRDS2trRnptdnpHNE1HMmpDZWwyZUF0TUk1Rlo4SDZuc0JmaE92RVVnT1VLTmwzZTA2anRaNlRDcmIwaGJ0ck9GaUlHVmF4VVNHSUtUU3hpQkFUMWpIRG53Z2NHRzFQK1VuVTRmWHE0N0VzUm9vL1pYU2lFcU5KanZwQmgyd1NIRTRVeXY2ZWkzMGpEaytFM0RwQnY0YnRibnRxaDZpMC9wNndKeVV6N2ZRTkJyazdmUnNSN0xneXIwYUFuendicTdHZjc1UHFEcjBHV1JzVVpwaGZUbjhsdHVFb3FtRzJjbzVEcFIwNEFGUm12NnNEOGFJMWFicE1na0FnWlg0dk9xQVk2UUlCcno2WEdEOUYxVWo3OVhBZFg4YldXYXoreURPNFI0ZXRIamR0T3BrbE1XanBXVUdqNnR3ME1XbzRscTFGVXhSS3dFQkRMRHNVTENkem5WK1RPbnRwNUxWbDlpRVVuQVcvcnQwR0VpMyt0SGFMa3NDcStGVmUwbnEraWwrMldwQ01EN25sSGIxZERURnI5aXA3OHdGQVFSVG9XTU9OZWh0Ty9FcnRWeUVTajBWci9GejhML3FPcW5DeFF2VFB2Qkk2MEhFUWF0WXRtTWpyU2lZRzBwVGdCQ1lZaVdhWEx3bVJnRG1LYkV6ZlZmM3NCaFMvWkFodUlXQ0VscHRUSEsreVlINnBYTStyZDNaeS9OWkJFUWZReTFETURYR3dhb0lDOUdUam9pWGREZk9qdzh2cjBkb1M5NUx0QVBNVjNMekl5bEhYTzd2Q1BIU2RzdERLOVBhUDZ3dWtQN2NwZ3Jod3I5UFdnWFFURXo3L0NPa0c5ZDd0bG1sSzRiTFptMjFGeU1vUWhweTRZZWJGOUFKaWY0enVQeDV5UG93cWd4ckxYdVZPd3B3ZzZ1NGV1UGlTSTQ2Skx1M29aUEZXdW5UMFJwK21zVkxnbjFEbmRCUTQ0UEgzN2R3ZkJmZGlxYU5zZGZ6UDdoZEttZmpMejRhVjI0YVZXSGt1RG1EampPNndGMlZuVko5ek8zM3BqTzZ3STVYTzZBNDdVbzAvaWlOVi9ORjBSdlZ0OTBsc0VZZVgyVGlqNFZuYUdTMmVwWjNSNGxrMkRpZ25zUU5hUE12aWdLYjNXVytKazloaXJqZkhTZEw3blBkSjdJREtsL0ZKR2dlVWt6UU9LQ2RwSEZCT1VoelE5RDVsWExldTUxZlQzWHpIUURsWHE2bVI3R0VpSzJwaG9nclRiRXllTTZ2MVo3ODdlUVF5bWhpejB4U0RnUFNUUWpJTUs1RWhJZENUSmNNVXBnamFRaUY0WExmUFRDQnJXTlZlRWdxak5zeVNZYkk4b2lKcU5zOHAzVUIvT0NZTEtSa20xWjBweWJBa0FRamNPeWN4aXI0NTNqWHBMcmZvU29aMUQwckpNTW9VT0U1L0VONGwrUk1WUFpKZmk4dGVveG5XdWV6ZStQU2dMMXM4QzRRSCtVZ0FlYWdxTjhlT3VoNmpIVnFWVWhwS2hXNlVuL0xFb3Z5VXh4WGxwenlyZktRS0VqdDh3WU9QcWxVR1ExU3RNa0NpYXBWQkUxV3JqS1dvV21XSVJWR3doU2Q4U2tabkZBVXphS01vbUxFY1JjRTV2aWxoNXBTOENETStwY3RKZkVwZW01a210RFBqVS9LU3pmaVVVUnRjNnBDRi9NdDNkdFRVSVkrYU9tUjVoVm1IbklXeWw1ZHlXclZGMGE3WForWGpwWjZRR0JjaUN5SEJtVUJvalFpSVZWSXJVWktBYjR1M0pVNUxBd3orZlAvRUpKdUc4Z2c1VkwzZkpiZnlrU0F2OFA0Rzc2WFBxZW8wNGd5QlFYVWxSSDBjR1p2cTJ4cGlqVUFNd1ZsaHc0M2RRNGZmTlMyM2hSdlUxQVNRdnQzYUFiUmthMnFIbkM2WVdRTmJhZFNWcUc1UTl1bTZCaW1TYUxhMm94R3pRZmJxZjdRNHFxOVVpODVXc09aMFJTVFlsUlV4VC9pblNWZll4NU1aYXpxNCtuVFJla1Q5a1JWOTdRVkNZQW1RU2E5K0lyZXBzZ1Z0U0VORERHYVU1UkkybUp4L1BjSjduZU91bmlMUjVGaEpHOHVxSDR1VDZBd3MxWWV4SFdrdGNyWXFxSFIyc0ZJQ3B6N3k5dWpQNTlPTkdIa3BNSTJrZC9yWEwwdFRYbSt0WUFCM0tjeDhpenh3QmM1a1ZneVZhdmoxb1RzaEdWSXRVZ3VnQUUvOHlBVG1zaHFjOEdVN2FYbjlWZmxtZENyN0dJTEp3aGVNcXQ4VVVoOFFicUtDblZUd01mVVgza1ZjcVpweC9wamZibFNRNVN2VS9haWZSTk9UKytZdGJveGNzU1lYRW8zc3RRMHQxdVFHWGgrS3JZSVd4NytBT3lyWHlCdllpOVVRaU1aeU5QallhbTY4MFpYMHhuK21HWXYzcVNIZnlkSTd2VUZwbWJqbW0yS2d6cFlvdm12NXdLRVNVM1dFeXU4NlRETXVtalozaEFhaXMxR2E2UVZoYkVRbUZWUy9PYzFhMTVQNzNCMWtZcHk2ZzE2TU0zZlFqZXFFS2dDYWJsbkJRSjVLczhFU0JvcmdOOTBFbXBjZGhsekMyMGxDRzAvaWtoQmZtZnlxdGl6RVcyU3R0cVVoM3FLY1FWTWVvcXMvMmI5U1BPOUpRRFArTDVrc0RUU0NrVzk5dVR5YVExMm9wb0kxQlk3d2c0WDFsaXV4S1p3VGZ5eGhvblVDRHdZN3Bnb2pnWmd5NUdpWVBGY1ErY204anRXcTFFVWJpVXhnNC9xR01aYk4zUmYwS2E0TzFIc1lEMkRIb1hySFQyS2R2eVJTNDlkTGtGYTdxRTBUNEZJMWRTSU1vblphaHhneUxpbEM0RlNrUmZvSGNWbXp1aXlRQUxEUjRWQkl0aEFnQVBZMU5uZWpnNXNkeGNJc05TRTR3Y0hXTXRra3lGYVVDRGVwZisxWjVVMTYyeUNDM3cvTWxlQkdVZVFMeG81UmZWUytoQlROS09YWlYxRnk0NXl5SHFHMkNGRFNlQis4SXZxbGNwdmVycTJJbjVsTFJJOVpORnN4TWtRaTdDMzZTRFJiNEJUUlkyNjMrREVyc0NwZUViV1dDZ3ppRTZuK0NtLzBJU2RuQnRYejJjZ1h3a3hmcGJHelVuRFFPOVRaY3NaYllQcnFOQS9UMXhNNHYvcUl1UGtuWnJQNXZBRnVYdHBMVkUvb3pvdjhpem50OC9nM0lpclJCY3d4L042UTdpRnZkVEErdXliM25ZUkRwUHdiNFJETkEwMjB4R0FtMFZjcUJrU3FmcUNRNEU2QlZPclhFQlhaK0loU3lxNWYzZmUwN1dwU2xmc2tqMGlCOWlhNnMrRXZSMVp5SDBERC9JZjNQYzJQSXY3SVo5OHh0dmk4KzhVZGljVVJFUXBiWGphVWJIZlpmckhWcFp6aU1ia3E5ZnNKR0sxck85UVBrR05nc0JtekwyMzZqTnRKVmxQZ1ZueEZmVG0wUkZXR1VwTS9oTFRxaE9LSFdZYzE1UjVlamorRWVIYTlKNFF0bkgvWGJjVmUrQ0hkV3dNcHduM1dVeEtpd2svcFBSbkM4d2VaU01xa0tmSGEwU3hWR3hTQXRVVmhiYUZZcDNyc0dlckQvTWRnNzBQMTdwOWtZTWt1T0dqMjlxaGZYeUFXYmY1OHd4eVNFYUN0L3pJWFF0YUdPVFRZcVFYTHdud21OOVZzWmc0U3VJVXJnWmk0czk1VmQrVytyQWE2S0J3NG5PN3Fyd2RzOXF2dE1ySlM4RDgrTlNnbVNnbnc0NVBPRTc2K1gxd3h0NkxHUXBoOC92dU56TUpmWFlHYU16Ulprd05Uei96R0VMNXQyQzZ4RVlUWUlTYUkwSzN1QnVWZ2R1RjdFSi9KZTJFUDVIQkdaSTRrakI3eXJKUW9GYzBWSU50S0FiZ0tYeDIzT1NGTElwa2dqT2dReStNTS9KbHlwd0lUUmlMYUhHQm1PdGVoUGxVNDArbU1xN3VPM2NOK1JHY3dYelhoV3Q5VjFsR0FXMjJzK3FieWV4ZWJLU3FieEl3VzdZMmE0UGZrZCtsSVU1eW1qeWlGa0RvNDBJZWY4Y3l0TG9ySnlWSGlzK1RmZFk1UDR3TTZiT0dEdE9WTXYzcDdoQkJUeWhhcC8zNzFhWGRwVnhiWW1PbkROY3hwb09xbXVnR1NGM0U4a0thaWRkc2NMNHA2SDYvS3FJREtIZWxuQTRyVi9DS0ZSWFFwdXJFc3VWNE41b3dtT28rUXoyb1VRc1J3dnlHQUhKZW1VQzdTcjJDOGV0V1R6Q0ppbThjeEFlSW5ZTkZ1MXdQRUpVZDF0VHNjUjR3NFFnTzVhUGwvS2o5VjYvTzA2NERvemlDKys2LzFPVklwNzlvOHJIZStuWjFyczZhR2tIdjNiN0diZ3VET2JqaEVqR3cxaDgvVmNzUThNeE04YkJLcnpxald4M1IwOWErcS94b2NpZEhpRzJoeFRWYjRLMm5SU0VtM2VJYUEzcmF2c0VYRkJLTE5CblN1T3VENjU4dHBta3pyWHpZVFFaYmZBZmpVS0prUGtLdkN5RUVQSGN2SjdSS2Z1RUIzR2xXYXVhbWpmd3NjbTl3VS9ESG1ZdTJramloT1VFY2pVZU42S29PNk9mb09IUWhoVFBlQVVCSFEyV0Z0Y0NUYlRIMGtuU2dSYkpKTytSNUUwa2t4bGNTY1o5SkpmK2NSb0NicFpCTXJrMDdCSmtQU0NhQ1Y0NFdxanlCSnlsdEVqU0VWbkg0anM4Y2lVSEtaVzhrdHRUVnRnbC9hVmJjcndKdWRpYVczS0l1ZDZHZEE1aGRuOVd4djViWHY3djJnY2UrOWV6VkxmYVFuTm5WajFVZjFnaDFSa2FmdFp3SmFPZkh1M2hGUnZaMTU4K0hiYjcxWHR4eXpWSmlWZjZsd2IvOVFmWmZ1Mmo1aDFhNXhnYzFndjJ5LzF4KytDUkpoLzI3Tkx4U2lLZXpSWnE2VVlhWFRkOW9VTCtFekhRMDNvcmtWNjhYdjhzdlB4T2N1RThDZS9ubXlLblovY1BrK3pUbUJXZ2pLMkhLMXRjVEo5bGN2VHcyVjhmc0cvVVVIZmxhdXV3dWVDY3dPRndkUjlLaFkwQXpiUjBkdi9hbEovN2FJbzFMVkJGRHA2SzJUUGx0VmNmUHRkK2tMcG4vNWdTRGlMZzVxZjNDclNvcGluNkJBUklJMHdOcDlTK3pUT09Wa0pNeWJIVDZ6UGw1d3hiV2lNT0tTVzZNNXc4ZFgrS3VtbUlrZktkVk9ueHF5czFTVDRhY0xDZ0JQL1hTNHdVOGRDcDJNajA2V3Z1UlBIZE4wcWovM2ExaVBmMjhRUlQ1a09VSzRqTHhEUnhaSmNRZHZhTUxvczFnYzNiaTdsYXE2Z1hmTFdYVWo3OEtiZU9sRzg1am5nVDhJQjRTWFhpVWVqc002eWhSSTNSTUZLMUduWFJVL0dRZmJ0R3RxQVpXQXFkZVVsZUVOSlJNOFB1WFF6ZHE3REVtZ1VzUG40clJvSm5oM0Q4amZHRmYvcG9UN3BWSHZkTGV0ZytyMVVkR2U0WGNMY3BHZkgzKzJINjh4Y04wT3A1TlovQk1YaHYyRnRIalNuWWNpZU9SNThka041VTNSZFc2TnZydHN3TFJMT2c3Z2NjcWtzQlgzQkNlTDZ3bU5UYllDbm5QeU5JcTg1amdkeWFKUm5BazBIZW1Zc0JCVDZOeW91cVptREJJb0Rvcm5xaFVkYUd4YnNTSjl4bVRHVjVyU3lOdXZ3cldYcTIwdS8vL0d0V2V3SWE3eTZXNUU5OXJweDVwci8rVU02SFF0WkkwcTI4ZVJKSmFzSGlSK3RvVG5uODRTMWlkeG5TVU0rNVIzZkFsRG1JLzlzekdFUmREY01ZUlA5Y0lRRnA5OTJNR1NEWmd5Z3hXSUxtYXdiQStaQk05c0Jhc1h1cWhTMWpObEJiOHVIYS9DdnVnWW0yMjNKTTJ0SytOWGRDajFHWlQvM0ROMFJZVi9xRkJKeEdyOURkOVhYeTY2UkhWcWkzSnM5ZUlOc2lENGFJU1FEbmQ3eTh1d2NwU0hpN1N5dzFqKytDdHk4UkdqQU9xZkNrc0NWRVB3VHIrOHFVL1o0R3hYUHV1VFBkT1prcXI2NWZRcGFBUi9MV1ByWnhxNE9qbk1EcVJFcWRXd1BRdzRWOVNTY1M0ZExwQVpEL2VUWWswVUZ1aDVhNXA5d2NDbXN2Z1M5TFhKck9keDZHTEtDb3cvOHgwRmVrbDlZeE1xUHN0eHlQeGhYVVRZblpTcVhpbUZNbjhpWU9MSmJHNlVlRmI0V2FqNnJBSnhTVnhPZFcvRFhlN2E1RUpmWGpRSVRZNW5FTG1ZeTJGS1MrVU9VM0JJdVlQU2hMVklDRXQydkc0dzZFZnlGL1VVeDFoTVJtN29Qdm5rUW05cm9iSmt0eVVEMzhqMjgwZjFMREhkSjZTZmxEV1FmbDRkOHRZUVlKdmp4OUYwbnFDL055RkJ5dFRnendSdXI0djZXVjZJVm9sUitpRExudm4zenUzblQvV3J5MjM4S1FGK1NhalZyMU9qZlcvd1Z4U1dqT1RMMEt1M1VLUm9JMXdOajI1aDNiNC92YUV5KzhEMVNYNGtlU0NucFdvRlVXa3VxUUR3UE9HdGs2cUZhRVZGNy9rWVNCTmhoVmtweXhIWnJjbis2eFV6a214dnc3VkVYOUE3OU1vbHJjaXQxNS9YaXR4Ni9WdVRkNjZzNCs1ZTF0c2Q1ZWdwMmVpNzgwN3VqaFJlVTZ2Mzh3YS9yTDFCU1FuRWlteFgzV0crelBHK01pbU43NWx5SHNzOFJQajNxUjdWUko3MVhFODE0aFp5Ry80d1FDWEVxeUtRYm1pSktTL1VkYlhkQk9kSTJPRlVVUXNuNkFTemF5UU1qS1VIRTZDdm0rTHhtNzIyZExNQzRsckRGUU0yME96ZVZIdnE2eDZ4eFd2bjNLeFkrMFpITkEyMlRaZ0ZzTnVFMUUzaW9GTnVvaDZNQmYwby9wM3lFcS90eE1ZQXVQUlc3bmpOc2VNblRwNFNIU3IzazZTUEF2Y0V5S1ozRUNoYnMyViszWmE5eE1pODVHQ2FseHhNQzZJTVUveDRZcXYrUFpsQUVpaDhTRTVMUkZFQkNqd3lwc1VJZmo4Y2tkanVEMldXYmJDMS90Q1hkYmcvcGN3bGpvNk5QNUljcnluV0ZGV2ZVYVZWa3Ryd3F6Q3AxQVBYS3BOY2V6VFNQWnMxemx3WnFtOXFBdFY2bVlRN0xMLzNJY0d6eUErSUUyRzFWazVBcEx1WVJxVDlMdlJPSEZoRmlUSjNaRDU0YnlOWnJHK09jMG5zMWNxRENzeFgzOEZMOHI3NE9YU2xKWXZvTWtSNzVPcTJ6a2lLM2RTRTV1bGhBcEtEcHRiVjgzVjk4Z1RMZDI3ellOQ1RRZUYra1lrbjFkV3N4RHRFOVcyQVUrc25JdmxtU3AwNU9KK3FUMUorYUovY3hvV2JLRytNU1l3eC81SytzbkFFV1dyUVNkb1MxallsYkR3aXMwdmVEYmhYcytuZDRpSWkwUlpUSTNOSjZrOFhsSnJJbmdnTVFBTnZpSnJ5VVpETEVxNitza2Zkdkw5dGhTTlR5RTNpRmRxd0lhK2pOWHd1ZC80ejBNdEJtUmxWKzlmMEtUUStwNUY3MEN6NFQ2NVVUajNJbTl0WnNJaHNEY2EvRUhHVnBQR3N4N0lwVmlUcGYvL3k3RzJVaDBYNXF2a0hLOWNXOTErTUxGekxMeXlIY1ZFeGd1eTQ1eG1iaUVXRFl3WVJnbEFhOGFadHJoY0FiZ1g4MStpSTJaWHhuWGFmVnA1Ly9GNitENG9zT2hXc0pnRnhtSjRIMHMxa3pUVVdWR1huTG5Sd3NGaG44c05TenNORngwUFZEcmNubUF4ZzlwaTcwM1ZaY3l2elhGZ0FCTkhkdUhYUGJQTFdPditsYjU1QlJqekx1OXRQR3htSWZuM0hBT25vSTRPRzZpZGlQOEVpTmJQdlVyMHh2MzhZeWJtUTMwdXRIQ3hwVnlHOWxvSlV1bndEZmJ4QldIWVJXMHNsT1NpaG91dURLQ2xWUFhnVzlBN2M3QXVsbHF1aHE4Ulo4Z3A1akdURmNudVU3M3hzbkQ3UzZrcHV2N29MZEtqTHNRMjNORHhEUmdqdWdOMWRpV0ZjR0tSUXhLZlRmdjVrK2xjbjVWOTFxT3l5NUNxVjRwcXFxOVFXNjFjWE96bThONVBEN0hGMkdGeWRLTlNMQmRDcVdZVldXQ2tIdFljVXBWb0FCWnRTTFI0NmRWNHR4d2hrU3ZIaktONEN3WWZiR0RqWTlCK3ozWEM1c3VZMEhLcnNXdkJieWszVDVLdG5iOHRZejU2NTE2K2haZzVNQTcyUHpJWFhML2RJL05pSE1KV1hSelVVbFE5QmVyMUx1WG1IMFRSYUpvbVNOd0lWS296Z0RGQnJKRVNUb1lySFlWQ0RocjlUTWN5U0U3MHVoT0tnbGJaVllJVVNUNm1PVXl2c3lQc0UvYmRlL2hRWERSVWR2N0xWMzhsQzkxTjkxQ25aNGhpTmpSSFVMSEVCSDVHcmhTbXlWaXFTd3QxajlXS0p4ckFmL3VXcDRsdm40N1pzTExBS2U5VTQydVYybHdMUExBNDJqMmNBYjlQSFZpVEY5YWx4ODR2L0xIU0J6VU1PTGxTbDBUd1BNbDFrNjBnVUZ4akgyV2ZIYzdBUDMyRXV6V2NiakozclIwRGpSWXNjQ1RCTVh1V1JMV1dFbjk3RUVQOFlFUmc1TGtGL0RUb3NkalZNMmVTc3lnQStSVUM3cFZsOXduZXlKVkE4UVl0dDBzenRXSGtRbTFtcXJDWTFiRUJHWXRDMkJWaG9ydlYzaTdObWNSeVh5ekYwU1duS2czbDZ3ZzFtUmp4cEh1b1pDTFdkV0dzSXRUdGRIcjhocDdqbTJUNHJCNUJTZ1hEYmJnaXlROU4vTnY2U0pnUXpmelliTE8vWUVtSUZOYWs5dzJaTHZKTnlISnN0ZmlWNXNGMnMrMGx6VWdYaG9CWk44RVJrb09NWlJnN0o5cll6eFM0OTBFc2RGY1RGK1NNbS8rUGg5TDB5Zk1CWGJBU0NqN0Z4ejBERk1LN3IxblRBdHpRY09relhzaVNMTTViOEo3bW5ySExFV2FlSXAvU1N1RWdBd0Q4d3NoaytUNk1POFJTVHRVRVpEY3R6S2dDMEFpSHdMNFhxa2dtaktzdUtlMVhnZE9pbDV0YlNTeG1OVG9CNWJrTjZLUUszS28za3dEWE1VanVlaVpUcFp6SmVlMEpFMGw4VFZQcVA4ckc0Q3RZR3U1MFNNaXZ5YndGcE15SUEwSjVTN0dKZU5pRENPMFFpcjNWbUlGRXNXeGl0akJJTG4va1B4TG81Uk5ZTG16RkNVR0JTLzY4TlpMaEtnSXc0VjkvV0twdWRNTzN5Ri9yeE5oV0txdmhzNkxRa0lsek1mT2xHdEUwUC9CRXVJNnd5WW1UNFVqeEtsMjVBMjFUOWNwTFRETU1TSTdIRUoyVk5XdEZ1NHJxenY3NDV1eXFZTGlyZC9ESTYwYkE0Q2NOakR5N1FoSG54VVB2YXRlRmJpUlZnR3RiNjBWKzFzYTlYUkNzZjZLNzhWWGZsZzkyVjA5MlZEM1ZYUHB3cmZWWSswbDE1clB1emozWld3dXkrWTdaNng4RGY4OVViNnRHaDZuK0hDVzYyZUNIKzJIK0JZSWp2QzBOY0psZldNd2t4K2tubTFVZHpGU1hOcG9WQUhadTNFTzRiLzhpVjdENDZzSCswR0E4aTRKR0VVdjVBcVhxbGxNZ2tPWVRyUEJJNDJKVS9FYmF4dXYxV1JaaXVRRTZvZlQyeExVZ1BSZjdJZTNuek83a1cvUWFvWUZIWmNZVStQNkJkYzhZMXYxc2VhRjliZHZrOTdUSGZJdzZlenUrR0s3K2VKWmpmdjNxL01EWlNJVktzTGpwSkg5c3p1OERDcCt0dUphaTdmcXYxVjladGpXMlNPV3I2cjlJN3BqcUZ1Z3lFanFsTG9GTnozWVA4K0dKK3liTkd3MmJUS3pSdHo2Q2pveERPVldLVkpJK3FGUmprNWZRa3I3d1dkeDQ2SUxOYzh6VzA4cndIK2pTK1dVL3FTb0VzaVdRb3JPcno4RkdmcjZobkN2Qk00Qit4dVpmTmVNbnNuZmFjUWNpRnVoNWI3TkFCTmlSL3ZkYk5YMitXL3lKejRhaG1HN28wRldxSmNQSUo2d1k1K1dJM29VMi9obTlQVzUxQVNpb0xwMTJOb1lXc2tFa1MwZ0lPbWdSTHJoVmlkbWEvSUQvQXJrNHVBbGcvZzdyRlpWZ3NRck95b2p1MEhaUG9qNktVc0ZVTGZPSCtadDBCOERiRVJ2cnQ4bHk2clBmZDVsQ3Y1dzRKN0xFN0xQeVlTb3VnTFE4eDVGSmF6R1E5dE1jalFqajVTY0pTUk1ZQWxIOEJrL0NTUjVCWUFtaUpvTFhZb3pDb3J6NVkvKzZuUHZBLy8vVk53VSttc3QyQWpCVG9CeHB3QURJTHNDVkVYb0MyS0cyY3VSSHYzN0E1UGk0bVA0c0lBb09kQ2dzUU1kMGZ5MUFiYTFVZ3VMSWxVQUlPRXo3U2wvdkJTY2gyR0l3Z05ydjZ3bGVyaGZOZWZWRC96cjM2b05MVjlycUZoYUwyYzE2YnhZcDMwSlkxQkZyTGdoZ1l3aDhwRHJNS3k2dldNTWZiRUpKeWRYbnhJSkhoMVlNVTRyeGEvNXlydGtWdVFkdDhxL0VOb2ZoUkNsNkljMWp2RDY0ZUpKdXBqc3k2STdQdXlQSXdZcEo2ZW1wbTRHWUdOTU8xVHhZT3JrNFdkUmcvRW5xbVgycW85R2puUFR5bHNnZmltemVKY2FnbzNFeEVMQjI0ZEx1Wm8xTVFTMTlyenlwc2c0RXR1U1JaVU1XMDd4NjRNbmc2NE01WGxXdjgxaW5malArYlBwVVMzK0ErTFdTcVVVTEpMbWlYekpUS1d1d2lSTWd1T1hqeFlwVDByZXF3K2FOU2JmN01xaWJZb1JkTHFBWWtmRHorU0QvTXBJejZyZ25XQmxGdzRzSUkzSW9VT0FLMzFNQjhtWUhid0E0UllDMm9uNmVQd0s0TjBYNEZVZDV4ZFVXQjZEeWVyK3hKelR2RVM1NDF1SEVOWkhFZFZsRTNYS05uSFZaUlpxaXhpc1F6Q2t3UnY3RkJLWWFBQkVIV0ZxY0lLREh5dGlVQ1lITlZNdHQya3RhQUVyMVpqVXlERWo4K0htdytQRmVJWndPbW9OTzNDT1Rvam90T3hPZ1Z1R2xtd2VyTjRBSE1YZFRockEvZEVNZnl4RUt2TDZ1aWxra1ZJRVhOYTFmdlAzNnZrbi9RVExiZm15TXU5dU8wRXJwd0xvQTUxL3pBcXExVktPYXYrNUpFUUxhZGY3ektqSnpmRjRNb3JJNHZZL2NzNGVFVElWTkJhWGhxUCtLRUwwZ1BYUmF5dG9EWDl1MGFWeDl3cGc0MzJCTHB6a0pMTEpWNjZmako1dmhKNUxMTlNDd3RqaFJUWC9BUlpNSWxtRksrTnZxKzNUTmNQai84TzZXc25aVmpaYmdzRE5VbFVvblFScVFpdkRKYzNzcmZCOWo0UUc1OFlMaXNkdUVwMXNZSGMrT0R3K1Z6K1h1S2pSSllpclQ5MG1SejU3eVV4Vjh5ZkloZnNNaUt5b25Zd1NZV1dWSE5NenZZeENJclQzalRhVGF4eUFvNVVLVGdVWVl2eUFJSmluQVBHOVg0eWJtM0xXK0wrdm1pL2o0NTU3Ymw4NkFSN216YWVwczBQdkJ1MjAzYmIxcytSK0p6MmxUVTRTZm4zN1o4Ym9oNG9QR2ZpbUZiUW1kZkN2aVJHbFZ2dE1TeUhGeThabTNBMWRXeS9OOUxoc2ZaZ0NlczVWZnh6d2syYUlubFcveHMySENMVkhMZlRabnJQSDlDejB1am9uc3Y1eDNTSTV0QldibFhvRlBWeWc2dllEdG9aZUtWZE9MM2VnVnJqQWMxbkp5clU4RXd4a01aVHM3UkdoQTRuc2R3c2xWcnB1UFFveGhPenRPYTdwbWZ3bkN5VFdzM1FxTk84RWNWakMvU0svQS9wQVlyeVJndkZPR3dMUjdSQUlSVVRoaGpVbHRHK3RrTVA5T2cxT3FDQnNtQ2ZucE91V2JWT055aWE5YU1XZjJTeGxIN0JLeDdvQ2M2TlhUYlo4YnQxZTd6cGdieDFPNFQyajA5bktkMjM2UGQwd083SFVtY1VydW5odmdpcjU0NC9uZ3EvdlRsWHQzbGZBY20yVnhzOGF1UzU0OHRmcU95dzdIRkwxNWVZV3pSUlM3NlZ1Vkk0NkwxZTRaYWVYVTVTSTJ5cWJ5NHRLd3pzNm04dHB4ZTNXTlRlV25wbzU0OW03UzRFSHptaS9Xd3VrTVRHMWUzSUN0T0R3Rk5NZjJCZEphbnc4T2JsNlpQV1Y2cVQveVdYSzJ5Q3BuZ1NCWDNzdncxcE9IZjBseFhhUmJkSjRMSktUQ1ZKc2JxRHRoRW91TDdiOHMzN2N1S2p6bVBxR2toWW1TL1FyeUoybmY2Y0NZNUhsRFhtS25FbS9kTXdJWVRMYkRCQTNqYTd0Zm5hc3BMQUk2MkVjakJSSG5xbVlueTFGdlRQYXdET1VUWSswTlRoa28zTDYwTCtkMHdHUDcvempTUC96emR3d2VhUjJyS0Vxc3IvNDJaTUd4STZGOGN0MGF0eWtLT055WWRwYld6RFdhWnFlNzJmWXhnZUJ5ajZhWEVsaHVBV05tZ1JtNnh0Z0Z2cUh3cm9YMzI1amY5MUNDY3lCQlBjY3diRHRxS21KR0llc25zRkFmbFBhb1Z3bjN5WjVWUUs1S09lVjBGV1lBNHBKTGc4M2dsc2hDUWpNeE1xVmhUSFlseEN1ZHpBVUt5Q2dTQkltdXM5Zy9wVnVyZ1cxWTNEUXE0Q2dGcmt4OEgxVy9RV1BUM3JiSXhLYkZabDdmRkZoZlJxOEJFQnRsaGZBcDZzcjgwV3VScVhJVzBaQ0ErMVdMeVNNekFuVW9jM0FCT3NtKzFQblRUdnViNTNadWNXMjNjWTAzRXhNTENKV0lTTVpHSUs0ejg3d3p4aEJJZUFSZkw3MXNWWXNVM2RCbFRCRlRmMC81Y2taQk85RVd0ZHlNaGVWSWtsVHMvU3FodHV5SGpOSjB0Q2JHTlFNZjBEZ2MzT3NldWk1QWtrTllYMVFaSndOSSttWE9YQVBORmNMaEVxMHRCRVY1NVdackc2aGhHMWtIcU9LNk5Ha1NCNS9DS0pXb0hHMS9Ld29xSi9RM1ppMkxYZWpUYjk5SlhsckRibzFFUTBwbHZjYVZrTkt1QnB6dlVLcWU5K2hQckRzMEtUdUtXVmpTVjkrSFlLd1Z3ejVKNXRXVkhlaGtiQ3psU0pCNnVMVVFuSlRkeFJiTkJzK2JnVWxzZmV3ZmY1L1NDNStOSFRWOVN1RWdjQ1BBNGRsSXQ4eEJLZkVCRDBqQ1pobXlyK1V0aFozVjhQS1ZTWlpxWEtkcEJacWRkZEtFZnp3dHRhYUNlM1NmSnZYak1CVDRTNlcxb29MQ05sQ25wSDJqb2gyd3B5WnNSRTE3Zys0Z1BQeWs0ZkZENnVBVHZTU09xQjc1dWZjQlVVN0V1QVRPaWdianE4akdpb2FCcGxXQmpmcFZRbDNvNjhxRVA1NVRXZWlmL0VIamlRNzZNeE9rcVBGZmN0UTRBRVJFN1ZDNERnSWpRcG42VDZNT05ra3plUDMyTnBBMXNhS2xuYjAxNG9ZMmI1SlJwcjlGV3lQaG5CNVlQTTNibnlZZ21rOXBuTVNyanp4UVFDSnRQYTZYNnU0RitlMHBQSTNUb0QwdW8wNnZFOUkzNDFjdjZ2WXFMell6OWU0ZmVGU1JyVjJSd3pFYzl1NEVtOHh2SUk2QWZ0WEtIb3FYaWgwcFhIb3BSZUw0aTZqcGZPcVltV0pMZzhOZ0x3ZGxhOUpWNVl5UEtyYUppRmIvVGhiek0zSVBVVWxUVDg5ODdlZVQrT29tWFJCOUQ1eWs3M0NRcTJHcDVTVWJKUzJJUzVnNHRoNHdXbFZncldhUGZJYVF3K1c0RjRQdzFEWklTL1M2T044R0hFKzNFNWhSL0xiWHB3MVhZd1BWVVY4VUtkTURzUHYxRDBUckZ5eHVSaEt6cFEyLzhtemw2aWNNNkhySjM4RUtYV0pvdHdXaXpJU2d3TDNzaSszQ0JpOEZ1TFVBWWY3by9NRXlNdXlIMUt6bjJjUlZ0azdMcDF2N1lVRzhtdXNsTFJCb0FZTmlFRzlVL056MVBkSlEwQkcxRTRQWFB5dlNpZVRSQ0crMDhLanJzWmg3MWNzNmpzNTRBSTZQbjdkdkk2RjBheTlMN1lsYWJ0VkpSKzlhRmRER2h2RGtSUEJIL2FONHdtTlNvbk9BTm15dHZtR01WZXNObWMrcUVEWXFVbkJJRUpBOFZ5bU1tVmFJeVhqTURnVjJrRVlxMzl3OEhjeERNaDhZNXFXZFJXRmhmellJYUF3eFhSZTZQREpBRy9FNUV1VWorNFkrb0NLZjNBMUVmL0pDK1VTaU5pUGh2NWNqZ05yc29taVFxdE1hU1h5Nm1LV3pFQnZOTUpLVmducTJUczlBQlFFZWlXR2l5ZnhGcUpRWkx0S3BLOUw1UlZ2S0UzVExETVpVSVNpWm5ua2lsUmJIMWRma0ZkVWtBTVVjM1ZhcWtlU3hxcmQ4aFhHb0tMandVaTVaeFEwTHQ0VmkzVGtNY2l5Zms5S2ZDbVhHbDNHaGRhRGpQdXArZ0ZDTEg0U3lrY3NTNmlla293S0VuVko4NGZoejRFaUVDZkZXYXc0a0F6VW5oSVJLMFFRc25lWm1iTlEvb0I5YXJzNFdyY3I4Y2hlVGJMY2pScjMvMUQvV1ZtVEdIN0h5V1drNmxWa0crYVJCOW1wL3hNZ0hSMVhMMUk3NEIzU3dwU3NTR2tHSEdZNHFHUmdjNkFiRHVSenNQMDQ0OENSS21iM1U3OWZ2WkZIWm8vZGhVMDgzWmY1MmZrRlhWVCtJb1JhV2RKLzBnRVRqSDluK0hlU0ZueHdMMHRaNkNiMkl6WVFZVTB2UU5rRGM0R3lDYWh0eUh0K1B2em00Snp5UEcydWZtajZ6MGNpQWJjc0NkSDhNblpxR2FBejdrVEQvRDYvWFNvZkxiRVA0WjFlZVFxRHJUVThKUFhQRE5ZYXBIR283SHZ6ZmxZVkRKWVRoYnlHdUdHSTBMUEVrdlVHbG44bTJRYnRMMGFOVTlrTWpXQkIzcTJYMnJaL3RyUUVXbXFhRlFvK0U1cFpCSzVHY0NZMkVzcXRWb0FxSVgvbWlvMFVUS1c4VW42aGRNT09CcXBFYVRYc09EYVF3RHByVjdSRkxrRnBkd0c4eVVzS01NQ28rcTF6R1RqcXIzOHRTT3YwV2ZOMFZTTkFuK2FlQU5tTDZZNzhTMDZ6b1kvYVVWRExxQlZ6UUJ4RXR1V05XTklTbWVXM2lMeTZKZTc0eURCMm9vb0RLWm1ETkdjL3pmOGxVb25BRmZGWHNQSXRuVzRudFRBSzlnakxTcHMyZTlwVE1RaitULzRlMUxvT01xcnJUVnJWMHR5VzJ3all4TmFDdjhFMmNoNFdRYmtrTW02ZjRKQ1NFenlTUk1obk4renB4b2FWbU5KYlhjVWh1Ylk4QUcyekVKR0VGWURJYkJrSUFkd01SQUlHWXpZamRiRUlRRUUyTVF1OWxGZ0dEQW1QLzd2bHYxK25XcmJRekpqSDMwWHIrbDZsWGRxcnAxNjlhOTN5MFdkR2JZTHFvVHFrMmVIaS9JMmFTQ3FkQmJCcGpqaEtaNGk4TnVvZ0Z5Vk93K1Z1d1d1VVZVTWRBNUd0Yk1JTG5JNU52eXNsVmdRWWQraXFKZVptNFU5ajR0UWJGUzFyYWxTSEJQTkNhN0NJdUU3Z092VzQ0d3pvTzNMdlJFZ1g4RDRSZGxMb0pTMzBKbGlITWx0dDFjVExUWWdyTCt5dUNFc21oUUcweXNac0FiNXhKU1JWaEpIMTFSQ0NqWXFpQnNMa01WeWdMQlFoVWFQN0pRaFJ5SHNoRVVVQnFlMHRnUTFXTlVSck1iZE5rNDUrUTZGd0NTOHoyREo5YVJCOHZXMXB1R1V3emI0QWovMFNWb3c5SWlBV0ZjWTVKeHdUWEhaR2hLSElvSXZSUHAyQ0IyZGs4NkhxZVBNdW40OXhFNDNjanlhaWh3VVlLWllQSzhSZmpneFRpb012TmNrQjU4ZGFPTEQ2dkdKTnFiOVVHb2dqQzRlTmpieDMzMXF6WW96ZGpBQVI1MFpmSmh1eVVnS3kzMjdvdVlPNDZpeURyL0dKajJWZXNYTEJFWUk3TVFMRmJlUW1EeVlUOFBwMndKWXI4S2NrSHdXZXF2VW9OZ284b0JxL3FZdFpoRXpNSWR5M1FaNU9NWFBNcWRqZnJuQWtjR2JqN1owLzJDcDFqVHVYcytsaDIzMy95OVNmNmVnTVlVNU5NeFNvUWF4dWdreGVrVXhySWJiaEtNMTlDN3VEMUMrdzBaWElLOE9UeTlITFoxMXd2a2pEWis2bi93bzNJS0JJQTFCV0ViYlIyOTJJSm9nbzcwbURhNE1Cb1YrT0NhUkhJajcwWjRUVkRzSXZGVTk1RGVNSXE2S1JJL0FEc0htY3VVMS9zVXREU1IxQWp2THNGOEJYVWxiY25vMVYzQUY0ZkxQMjB1eklXN1ZMK3kySFJNNHl4dmRKOWhBVTJuRkxwZjBDMUJjeU5ibk1XWUFPanBEQU9iYXRyZnVPZ1p0VXRDT3FaY0xMYmM5WmwxazcwbnB6YnVaWklFSWVHNEZPSFVhZGxwRWdJTUtCdk1HTnJiZFdvVllMSE9lYmtPRnFBY0hpZFk0NWdWS2RiM2R0dGRtMWVYWGFRaU1LNlJSblF5Q1h3aGpSQUNycTFTV0dIZ29YU1lDMmNybWhMb1IrN0R2OEVDeUVlOFl4dUM5eW84bkxBaUUwQnF3N1k2MjNNYStEUDhEbWhTWXBHWUpSMGNSU1R0Um1qNnhJN3BnMHUycnFCdnhyd2RSVUlzR2h2cmNGNHcrRVc1d2grYkduUFVwNzdQVVJkZTdnSUlvclZrK0lYSzFKZVcwZTFjQUloRjc1b3pmcGwzcVd3cmVkZjgvc3U4YXhDTFJlK2FIZWV4cVpIM1M5NFZXZ2wrcHZZRXNuc2hqYUJzTG84RTBHSnlqTnEvNGtHS3NGckxnK1ZXQ0J3Rmt3Y25GM0pBQkJhbU5PU2ltOW8waVhVUmpGVTBUVUp0UVhjeWJnOFpQZ29oN0duZlVSbi9FM1BibHlJTzRWRm8rRUhNWStZTVFEb2dXempObTcwT3N4M1RVdGVnTzI0MEkwczB5U3BPT1VMRzFVcXZGU3B1WnlJbEx4Ky9nLzFOK2diSmR0blFYcVIzSnNRVHhOTTVncEJWa0VON1NNMmtCT0dxdVhKK2RadnhWQmdJZ2RuQ3JSdmdXZFZjSmNaY05VSFEyK0N5c3JjdjdOOURGdlNiSElvMlNSV0VUSVFVMjFqVE9GNnYvb0dNQkxWQUlVUUVjZHZNTlhvRXVoYjVHU3Y4Yy9KaFhLS2c2cGdFTDlHY281RGtYRWJBcXloK3NRTEhnL1pPWkxVc1NoTVkzc1F6bGtCditEUTJXWUcyWnh2TE0yTmdpMWFBYm03eUkxcnpKMnRwKzRQT2lHNmxUZ25RaDdEbHIzbzJFbkMrUFh3dGRWSS9XYnNBM011NnFteUpDWUpRMmNMMFdLcmhIU2hIOUk2aW1sdDhIcVpUYW54dndlcWpFSzVuYnpRNjVtbU9SRFQ3VEtKL3NjM3ArZUhhM0N6YVo4b2Z6REF4TlJqRUgwa09SSWMxZEdMbzQwUE1OT1FoNHRwYVBvODQ2T1VGNmtBY1VJV3hib21xZ0lIaGRxbWRwZnNGam5UQ3dqMStDVmo1aHZjdjJYSFZGVnZQR2taeXJNVlRZRWZ4ZDZOWW5YcVZQYmUwOGFhQ2phR3FTSExIelZ1V25QbjB4alYzTUFrSzYwTXdZYnNiTHpMMkp1bHFyL1A5cUg5TjlCWFo3S0VCRngrL1pBR3duZlZDQzJYa01LeVE2NVZZNzdBRE9oOVI5VWtpREdIdXRkNklXVlc5a2FJYTE5eXVOM0w3eEcvQ2NKOU8xb1hXR1FGeEpOVnJvVHRhSGtwaFVCKzJBQTU2STFOWWY2VHNvdjVvd2dKQUtsWVdKSHZvdU13MXlZWTFMZlFFZUNpaDFLMEloVDJnOEtSb0dqYlBZZE1JWUZOWS94V0hJc1Z2QkpDSGtFT3pKclNxTHJUZjV5Y0VSWHhta1dnYjVCeTRPUFkxWE5ZVnRBaFV3RVdUdDUwQXNaRkJEaEp4dUh4SGsvZmJkWUFweUhjZTRiMVkvRzZ1anhsbTAyT21Rc2NpalkxV0FSQ0czVysvZmZJVWt6VUxmeDk0ZzVUWURJMWVISWdlRWNFRnd6VDVDK2ZSbkdBNmx2aGNMNjlqYzlKOFBqMTZjYzVCQWl5TUJJNG9Kc3o1Q1BBV3VUZmdja1FVZFA0MEpuRUpTb3o5SUNmTEpONkFmRGwyMDIxaTFFNFNjSXRSYjV1bExVOGdKV3FEOFV5QVdsa29nQUxqZEg1L3NsTkUwRnFwTWFqODRhUmo2eVowTzdtYlZjUWg1NXRwcHBDWmJZR2c2UDNDbUxVTlZ0cFJ1MW81eHo1QXlkSThIMURDcTRHbFJ4RWc2bEhGekdyNjlJSldRa0tUMlRwR1ZsTTlJa2NwbEFIc2lIcGdHV0lod2lteHhiUVJ5ZDFQaFZzRjlpbzF4QVl1Z2ZiQjBrM2VjMUl2cVQ5YWdtNm9IOWpQN1BPSnFKa2E0bjNadUh2OVZXeVIzN2dJM09WY05HazBveURMMkl4YXhIb3dPTFlWNit6YVNpM3UyZ2wrUXdZOUpvMlpzVCtIU08wV2tOelBNSW13Z0FVY0ZDR3dBaTR0Z2pucGN3dkRpa0RWSkl0d3UvVUdLNEtYM1lVWDhSR0xjQ29taGVNd0xjaG9CeDZseVBHU3E1YjhIRkdkS2UrYnpldkEydVBZdElqY3FXQ2h4SXM2Nmd0MFpEdkt2UUREdjdXSkduc0ovWUFNVU9HcEVEcUJEV3Fnd0dRelpzTXJ3MEM1aDRwaHVCNmo5WFZGN0FwdnpSR3NKVStHNnBOUVVKSEhCR0JCUldnRjZFVERyK1NMRE1hWXZOWnZJejJIeTdQY0N5aGdaWEk1THJqL0dRRmFKNkdpYVF5d2o0YzBBQjZEazhKQkpXaVJGTkFSSm1aVnlYT1JMQW45YVh5eDhMQ0ZZWnE4bURjWkt6Tkt4Z1JyREsxd3dGd0pwMENQVy9PRnBsWU9DeDE2RkIweVRmQ1pjSTZ1ckloVVlPK0ZZd2d5bnpIMENHQjJOWUw0QzM2eVFtd25MNUEzQjdjQk5ETGtMT0tDRnRIZjB6UU4wbkZCSFFBd01RYkcwS0NtVGsxKzIvSVhKY005eTlpQjVxWG9vUllVQ05NSHVvVW1LUnZVcGxXQjhTMjJUc1hIYkErQ09rRFlSTlFSSUxaNnRYWnIwQ2RaUTIzOHVrQzhRdUtVMlRSenhBQnp1WGpvRThmb3lCMCt3RlpWLzRsNEdJdGRVcGhISFNCRk9KQ2FpanRoZG5ORFJVMU5wS1ltV2xOVGlaMnhKY01BbStZVzJkS0ZzQ2ZGWkpQODJUQi9nS3pMRnRMVkdGNGNpK0gzSzlzVHhOLzBuc0tHRG9IV01FeTN5RnE2a2tQRWNtRkNrMk53alhmTGJPbXZpQWJxWmJtejFMZ2ttbGxtWUcwbEt4b1NBemZncG8rV2dEdStPYzNRQUIzdjFrc20wS3BRaml6UUtuRmhSV3k2eGNSNTRmZ3RCck56YWlVaDlhM2JBR1pQT1RzY3k2d1ZpZ1U0YXV2RHlZcnZ4TzZ3SlZXd25OSGkrdGpDMGhjdUl1RkhMY2RpaWd5V1VjSEN1ZVN0ZVBDV1dTdVVmNnN1ZUVzNFlxRzMvSHBKeS8zZ0xVbTJidEVVZWx1THBtT2t1M1BvUHFCS013M1RwOG93dlhMdWdPMDhtbm05VFdIalg1Q05rOGt1aU81QTgzZytSZC9WVTVPVUt2bWdVZy9RQy9TZ0tuWnkwZnJDdVFNcFhyY0Z2Uk1PVkxTSFVaUzViYkF3emkwUnpKSWxpd0NJWFk2clVWRFRldG1ERlVoNWo1aGpwanBNQW13TVlFdFNraGQwNDc2ZkxYWHRLVWlvRHlJblFsWVdGZDM2WVFrVUVrdE00Qld5cXU3V0xhRzZndmRaVGJhZjNZOEg5OWxBYkgyNzN4TGNaL01xZjNndWFWV08vS3R3UHhHYkd4QzhNam1CUkdzUzBScEFOTzRXU2xZMW9RQlBvM29LSHdJK3BaYk1ucEpHSldrTGFvSHhLZVhFWDdMWWM3N3pYR3pDdU1raStONGpyZXpkQ3QvRFgxUWlZcDE1dDB3VmFKS0dEa1RUTTlLMEdVU1B3NTRBY1RTbHc5WHIraEYvM1JBbzkyZCtHazdpRkFWSjVSZDB6QUZqOE00aVpMdkpOeDN3UGZmaTQ1Y0F4ME5ocjJSeE5Yc3U5NGxSYXdwTVRxN2hkb3lXVDl4OHBWS2xjcHFRRGlDcVVxeG54ZUp2Z0Z1NWJCT3lMby9BKzF1czBxVm5ZVEE1MCs0Z3RDV2lxTnFjTmVqY1lLcTl4cVBpTjFob2x1ajMvem42ZlNkRFJuaDB2SmhXUGJ5RFkzQUh0a0FLV2Vydm1NNUlqV2dLVmk5aGFPWHE5em5tRnlGMC9UMFlXTHNKdUJXZ1lCM3pJVi8reDJOOUJaOCsxc0lWT0ZNSnQyT0E1bWRDYXY0VlQxK3RqYTNTT2VvTWVBdURYdE94WmcxTFJ1WmdrcGk5eHUwSHVaWHhIYUlKNHI0TkZRTjA0ZDRCUWlkNnpuQjVheVg1QXJzQUZaU3dLeGFNSmNMN0Z0YkNIT0xTa1ZieXJsLzR1cnN3MitOZEY0Z1Y3bUs2aTgwRTNoWFBwNGJPN21LamlIY1RzU0d2d1EyYjcwWEdtKzloK0RrMXJQTmRkTXBYWjlBWGNsY09wb0ZBK1JxQjhoWHBuUW9ZekVnNjJNaE9kTEJMbkpaQURCTDBXSXNTM0J6b0NWQWdxYXNkcThSNlAzVjdvQkhBUXlwTnFDNmh0aVJnbkJoenFFZVIwZ1J2Rmpob3NkS0F4SXJZdG8wbWZtck51TFNWbGd0S09HZUVOYVBLbHJYY1RZUGVJb2g4VitWeHpyRm1jVGpuUXJBRkM3aVJjUU8weWpRN0F5S1ZLeEtVbWZRNXErSEFCdEE3dW5rYlFPY0VGVmo5Q1VMZGtFYVlGYmRkYmYxTmNKMFRpbVF3eVZ4Y1NWR1l0WStidHd0MytyUmhKSGxUT3lFVUR2a0VlM29TNDgwU05OYUtBQjk2TXM1U3lYbkgyM3d1ZWQvTmV5dlVsR0pxcGhUamJJb0dNY2o0RnJNNlpZZXJnUys4OHlsTlRWSHM2aDJ1QjFXbFBySE1kVi9Fc25GaHJiMFQ3U1ErTWhYdlozeEFiRDJLcGhyNFNGQzczQjlZR3ZSUEExNk5uZUZMVmx5a2hKVXpLQm1SY1Vxc1NLc1JKUlZGbWNMOFdXQVUwRDROcndCMGZzYjRjZVZGK2Zoa09EQTUvWXd2TG9xSEozUXowcE1hQWdXZ3RMRzhudzhNQmxoYURxZk4yenRRNW1uRmd2dFUyTVd2NG5LR0xxZGN2Sk94R3hpRlhKZmNXV053WnlvOXJwVG5Cck96d1FmSWpiT1NLT0dDQTVDdW1qNGM4TVMwWGVIV0txNVc1V1FyaDBIcFFoUmtJaFI1Qjd6WmxqOUZNUmVkaHBxelg2L2JVL2N4VUd6M0hXRlY0Qjdtb1VLY3piYVBCeEtDN2RCV3Z4ekRRbDVsc3JERlVvNzJPeVZiK1A5bEcyM1FWMWFtdm5rU0k1NmZ0QVRIMm1WTENMaTcvMGs0Vk9KT1Rhb0dkN3k5TUY2TTZNVUlYd1FUSVZCdUxkK3UxZHUxN3UyNldOOXU2SXdrOFpRb2hNTEtJS2Zra2E3enFPUlhkNkZZaW1YLzRaOTdiRmVLcktCNm1KN0xmODhVR2NMYzB2ZThlS0h2bVFJRDN6UG52dDJ2M2ovdWMvL2IxZHZsNTdqczlET2NUYmpSWW9TQkVwYWoyYm1NMWJtZjM4bzlDNmEyblZpcis3VWttS1hlY0xJQWdBUTRGV25NMW5DU2thcGdULzNpQnFFbUppa1ZLSm5pTjBaQVlkWG5tWEZsMFQxYklvWnVhSnBBWU1Yd1BaYUpvY3pDOXhLeEJWcEJBbE9PS3lzRVBDNjdPbmVpbXkzR3RhN2dRdnRLTHJRRGRVc0Jma01QRjlwQ2Zmd3FuREVCL0NyODFJTHFXcmg5eVZNTUhjL3NCazdHUmZ5TGpGeGV1SjBjY3FJQk9vT3c4U3hZQzljNG1zZHArY2UzRGRtUDhWbGxFV0Q3cVlyZHF2YWtEa1htRGZHRm10c05NYW9pTnE5NGQ4SmNnNXdSbDhGcElLaWZUSGtDWkRvaDJzbmNnYlk5dUM0L2U4djRRZnRDYmxIdVRMeWNRVUplYXBJa1RFZmpkemxORlduQVpSZVdLWGRoRjBTR0kyREpoQnJoOU8vNnYwS3hGTlp6clVBYnhDNGxOMDdtSkM4UmkrS1NUWUdLbklPdjg0OWxkVE9zQlV3WW1RQm9FQXZwazhQVk9FSnVJdEFZWFdHUzhibmZvb1hlOGRSN1J4VC9FeFp2M3M3VGJSQ3lBeTljQ0l0anYxTEhmbmhoTTV0U1Mrd2NGOVlaYmhxd3QzVTZLbFl4aUtncTlFU1VFWmFhSWVuUEJmVHdPSFNLc3pOTy9KUHc1L014T2ZHR25iMG9lZk1XTFJoaDdTVW9PWGJySFFyU1F5d0Y2amhGcmZqLzgraHpVb1ZyVGFkbmZML3lrUGduMElNZE5KMkM0aVZyRDZObWFoQzZ6am5menRHMFNVWkJCc3V1N0xTdlNxajNDTUJiL1RWb0NOZFZ5eDd2aHNMUTZGMjVVSUV2YVBOWXhheVI5bmYvaXAvQ1RnbzUxWDRIKzQzeTZFRGpOY2pUMDV5OVhIU2JLRzVRMjJrbWUrdHA1WGNHYlU2MlJJcWxJRFI4QTBSU2VDRHlLVjZKeGkrbFNPNGlBUmgwbjNLRXdSMWZXVVNZYStqVVhOQ1FSQjMxQXdnbFl0eGFCbTNKUlZXTVA2QkFXQlNaa1VCYjY4U0twZld0ZkZyYzFPQWNlSnlXVUU1UjZIZ3doOWZXTkQ0OUxYNk9WRUp1RzlBNHZzSzZRbFQ3Y3J5RFl5YmVpcjVLVGE3enJhbU1ueTZoS0w2REcySDYzQ3o3bktFWE9UMUFDT3VOYnI2R3hpWTNONCtzVnlJZE9keDJDVWRESjBCS2xEVHE1U0VSN0Q4dEdPWVhUOExoODVCa29xbTljS3hiUUZNQ1hFRW1oVnhVejBWVHJWUHlZYjhhY2hBRVhLemRLQkR0Ujlub0U1S05wcDZFbCtuK1doRTdyaURVMlV6S3BzTWtHWWR5MzIxcEdTd2xTNDE5TDZrbm5GSWp1Y25mY0RxTjVHajRCcFFaeWEzaEcxcm4yMHpzd0RSaldXODQ1YmRjbkVKRmdqNDFMd1c5Q2o3b1RLWVF1OGNLNUpaYXdWNWMyRmdxd0xkeENoUFRIV1QrdDFidm9TK3QvUi8rVXJjdEIyeGxhMGhoZmptZ21QM0V0aUppbUswSUZBZGE4WjRud2NJak1IWHh6NkJTQkRNamJwZ0E0UXdzeEpiQXNWOVhRMlZTcmQwTDJBRnJMbmdIQTBHR2xvWmJRWUNzRXBDM0F2Q2JnN1NBeWFWaG52cmxBbmdLZkpReGM4QTVtUzRCeE1JSW14dlBzNWIxYUR3MnVtb0VpaURmY29VWUlJRmxZZ3lMakhtcHl1UG9mYStMaFJGZElUS1ZMcGZaSlFLVTZYTElMaEc3WHBjcjdISUZpOE5QRWhnd1dMelUrUHk5QTc0dUVNME1Gd2ZZeFlHNkFCYXNRaWpxUWt1dFQxZCtWeGZmbFhzS3NoR3VuY3hOWUZwRVF4T1lGdEdXQkM0SXRNZ0NtSXJtUVZUUys4bENWbUpsQlpKTnRrcEhWckpWeTd3R0hwVEFJamcyY0hXWHA3OHJoajNzRGg3dUsxQUFWMkI3K05PaWg2NENCN2lIUnhROWRGV2Q2UjcrOE5qQXRSOFBnVU5DWXNuaERZV1BwdDYxaEFpL0R3TEFKNksvY084TDhKUFF2ZTd3UFVUTDVyMmZodThSSlFIM0FNT1VPdmVoRHo2NGdQZHE3UjVpdFRsQ0dCUkpMSFlpTmhxZHlVcXBQeW1OVXhxeGtCOE5ORjk4eTlieVFUUnJLUWVFS0dLV2FrVDlLd3crd1AyWjNtS0hleDRuOWwrZ3JtT1ViY3JCT1JQMzRGRm4wZ2MxVW5kZXRyT29mblRub3UrWTQ1TUZuSmNDOWtzQkQ4WjdwTkpDSXY2MlE4Q3VpMkVtNHJieExrUTllWVVXVnZ3ZlY4cnIxM2ZjRnlMNGd2ZGdvWVpkSWN5NExXQ2ZjQjlneG5oMVl3UWdQYVo3Q3Q1T1ZoVUtzNXA0UHJoY3pZMEJoSGZtOXUvR2lQZ2JMaURhN1ZxWURXSk9mOXlhL1VSdWRJU08xWkpBZnJVUnh1T0dkSDBZRVhRQVBLd1luMXdYbW9VOXpNaWRhS0U0b2RoWGtCN25PM0JTeDBySHNwMGRyQUlrcTVxMWtPeisvN1cxR2xLUWNHd0V0aVZRNFlrMTFCSUNqVmNlNW5Mc2NqaFVGalBFNFlBSGVYQ3JtczVrNVAyeFhqSE5GaXkxUmhESlNrV3p0UU4yWW9sVDdub2w5bTdONEJ0N3Q3SXY0OTR0NU5Ya0RVakZyZHk3ZWNaTzdxMDhReEgrTzV4amlnOGFYb0Q5QjFzR1ZJZE96aU15eWJtUjkrclZwWVVReGtqRERzMHdTU1JkRkowUnc4eWZVWEljRGZsTnBBUE5qdExpeGR0ek8xc2xTaityMGR4VEFVajNkWXNFTHpCZzJQMEh1MW5nT1NXdTlPYk1QNEQ2dzZFZThtUFlvUjcrUjJoeFAzV2FSc3VNd2t5bEN4V3UrUzQ3cTJ5b2NOMDF0M1pzdXFPbHppcnNWNXU3MHZlOXQ5SS9JdHVSMThabCsxKzIyaThJU0lFbTFMU3lxUU9YV3ZUemFpenlIVStxVG4yZGNjS3JDb3JYZzVhQ2pVWTl6ME81VXY4aW1PL1k0YzZKMFptd2M0TEdJaUQrQW9lSlROYy9qc0g1WVVXazBQYmFSeUVFcW85d0o2NytmMzllaU5Ybzh2bzM3VEhMZWFhYXZsWWN0WWNoS3JiM0RqWDFLTlVFUG1JNHQ2NWNFSCt0TElzMFJCTFBaWjZwS1FQNjYyREtpVlAvYkZOUGFLSnBTVTNYWFV3NG9la2xrWXBiRXlLQ3ZHUzdRNE1xQi83NUN1emwzZXlGR2hqVWxnYXNWbHZiWjFmbmNlaDQ0RUt5Z2tXWklaQ21Ib2RPL29rUFBwaGdIUW9UcWN4aFU5TGk4N1lKckhWNFlMMkVSY1VGeTZtTEZseVl6dHdscVZCT0NkeE94TDRYTElyQ2NhVWc5MGlSUktHR1FvS1dYeFFTMUlkNGt5S1hxQ2JoVHV1ZS85Qm1uK011WmpXRjBBWVJCaXZsTUhGUTd0cnE0eDR2ZjFSakMxbmNJV2FHVHJERER0azFjYVVYNjR4R2p5T1RrVUhwajJ6UEtaSTY3dkNjaWVZd2JVamRNSHpSdXkrZTkvdEhyai8rOEJ5NEI4Rk9RdmQrTWdjRkpFaEg2dmgvbjRNcGdITEU4QW1QTHJyL3diTmZ1UG40bndCVk1JZnhSR3Q5WjI5bFJoRlN6aUhJL0NxaW5YTmhhUWFiNGwwZWNCQjI1QTZsY0xaekNuY2xKK09QZlVmV1RZRkpFcTFZekphTENDVzJNZ2RENXhDVkl0K0JqSGl6SkUxNG9OaWhzY000RXpHR3IzbGpjUTdIQ1pSVEdHb3dVZy9NYndTV2s5NXh0bTJFQWpxVzYrQUpEeXVDc0JXd1RnVWdZaTF5VGJROFNpejNKNE1JanhWeFFLcWI1dXJRd25yVVIxNVZRR2RoMjB2cklNYnUrcERoYWxMU0xQZ215bmtZT2YxcnlYYUYzNEZ3dXc5eVZneVdJQkZleTUvd3FEaHdvaFRSSnNKZmZxRjZzT1ZHQlpMbEprOTB3Wml4dndLdlNFdE1kRi82SDV1M1RnV3dpbHdvYitrMGdNMEFpKythVUVCT0MzSHlUN2JTeHRncUNIeTBmVDBnK0hWZ29Edm1EcXN3d0w0SmhMdkliQVdoSnZySG9Xc0Y1Z09MUVFUNEZmQzAyM0FGeFFIclEweUJRMkFUaUljRWhhemxoaXZlQ2paY0dTTTg2bDdBZm15aURydXI4RElQbTdxYmNocXFLcjFGWExxQ3FidUF5a3doOHVOZ2N3bzYyT1NJZ3kwb0JFUFJIbnd5UmxzaFBiVllRRGRDVDRCNEtCNDBXSmJNMHFtcVUvdzRESXpzUlFscFV5bWVNU1Nwa0JtZ0pNUFBuV3gzUXBoRWoyYTBGZlB5YzkzRGJMRGRYcHhhQTM1WWl2U2dDS1p5bGtSdllkZW5jQ2FkcTVmQXpQUldKWFJUVTZBR0dyZnFEVVBKV0dOcnJXd0FvUEp6K3crdjZ2bTJramtDQkJ2Tml0Z1UybWdPdEI5aHhOakNSblBzMzh4S1FxWllDaXJ1WFBoa24yTUd5SFRscHFOeFZPUFplQ2F0V1RXb1MrSjZrRjhZY0pWeExkS1dpZ1cyaGhNSnlXUmtQQWZwRG5LY09XZHlxNTRtSDJHeDhVZEJ3RDA1WTRUM1RPaC9FZDRub2U5RnVQdlJ6OEo1VmJnUTVnbnRoSHk3V09JeVdnVXhmN3dVWUE3bm1rSGp3Rkl4N0hmZlRLVDhSODdsVEVXV0w4N2xudjhESTg4V2puS0NHNWhPQmpnT25BRVgwK09IUUFmc2FJdXBNaDFwOEl4T2tlNDV3SnVoTktLSk84UEJ4UW43Wm9IeU9aaGplQlRjSGNaZHZGZUhxS1lWQ1NTeXUwUDJicHdRRElWM2dkcUc4S0pRbGZvYlFNTmk0bmhyVXpqeEtrdmNRaUNHMEllUW1Ma2hBL2NOM0dDNklMZFJ5NjJGTUEyRjNCQmwzNndGZ09SUXlHMEVpWmw5a051WXl3MmZjS1hBRFdZVVpEOW0yZFBzSUpUOUtDUFVoVE1DZUwxeVJtYXUxcmpCaklLYzE5RmJPWnp6T3J6QlBJSWt3eTRKOG5GMXhRMG1DZklBWkw2UzRDMVhJZmRHa0dUTTNjQmJMZ21hbG1DWE5hakF5dTBQbm43bDcrNktIaGR5dHB3TVQ1cFhWai95L01WUFF3SGxjMFVhM2w5MDd6Vi9lUHVPZHd1TllYa04xOEkxaVZDS3RRc0FLVW13eHhxRXQ2VkRHckFkYTFycHhVUjRxeHB4Y25peFkyOVFBdU0yL1FCWFo4U0R4WXlXVzY1QVU4b1VhTWdWNkoyYi9vanB5cEVQOS9odWFTRVhXaUdIYWdGanlrS2lPRkJpb3BBb3JhQVRoMUJhbUFnQzRSQS9tbFVoRkRyUlVGTHNqVmJzaGtRakxtT0p4cC93NWlhN0NmQmdYVzZzZFZWYnBoOEw4QTl0UXhPS0Q2dmxYbVZxdWNyVktGekxNVVRUNUx1bHRSekZmZGFGY05Lc0FXb3BwTWhWcUtWQUpFZnh3MUFnVVV1MTBsZzFXNGtrS1ZmZFpiNjZ6YmhzVGt6UXpmVjJjMEppb2k1WDJHVThNZEdJWWJWdlNzUjF1U0lnQmlZQ0k4WkhJRWhMR1lLc2M1VVBFMlFFOS9odUtVRldHVUZHNnF6WngwQ1F2ZEZuUGdlaFlwcklnQnZ3bTBlcmd6QXcrOGNyK0tHZXNRNkVVWWNZd1E5MWlOSHFNaFRhV2wybVEyeXptN0hFSkwyenhpaTBaMktTbm00MWt1eVIyRk9YYSt5eU5yR0hFVXgwWWpjcUlsaVlaTFZHc2xoWmtrMHRRN0poUjU0d3lZWndqKytPR3ludWZ1aGRkWTk2aUdTa0dMWjBOR0JHZmVkYWh4OTdvb3VTcU9wYnc3NUxEZUVIL0xTUWlKU0xsVkJ1alNkU3VHOXRzcHNURW5IcmFuWVpUK3lqeTIxR3F1bUpmVVNxOVhZNUxUSGRDR21VMnpzeERaZE5pYjJ0TzNweWJuUGtSUE5QRWhrRHVpcldBdWxhWTNRdGlzK3lCaFZRTGV0UkJWWU85VmUzR01LUFpuUkVWbHNqYVNGcUMrelNSQU9LYXQwQmpXbmxiM1FkWWFOZFdrZnc3Yi9lU2pqUnRmOVd1NngzdzJsWnZTdi9HdjF3Ulo0UzFFR21YNjdzRmkrbXBBTHJYQVZHWEFPT290eU42QTBzZHdPSzI2UisyMlFmSzlja0s2d0VkWWtKVmx4Zm9JMUJnVUFGSzA2NXdqU0ZDN09laFptS2J4c3h4MUFXRUV4Zk41TFZlNWJxdjdMVmZRVWw1amVLdnRCa1g2Z1BmMkdZWDZoTjFDT1hXdGZSdGxsZVU4TVpNRG5IRTNRYUcrbEt5QmhNb0RGYzhiSFA0c3ppRlA1SUxkdkFlVDUxdzBYMzN2UDRmVy9DV2RBeEZ6emwvUXZ1ZjNmdDY5czJGVVlRTkw4RURXNmcwREl1RlV5bWxHcnh5eGR1ZnV5KzF5QjdPNTZPKzN5L05MY1J5MjJvZ2FMTXVOeXdqRk51SDl6NjVuVXZuLzkyTU9KSFhXNmxYd0VNT09XRWNWOVpSZmRsYkRjMVVEUWE5eFVBK2VrcjV6NDV0dmswUUFyN29ybVBsSDU4bmZ0STZjZUJCa0lSWk56SEVROUlYS0k4bVJHOVNWOHArVGljcS9TUjBvL0RyRU1mS2YzNEtPNlhheTBnZlNpZmt1eWhMRlEycGRtUHVHekdaZS9lTDhsbTJMMCtqa1R1ZnNucndPZ3dsT1dQSXBjaFRUbTVERFlTNnJ5Vkpnd0EyZHJKWlpHQ1hCWVpMNWNKSlNTSUJmWng1REtBTG8rVHl4aTZyS3hjWm9VY2k5b0VEZGh5SjVkVnVta0d1TkxHYjFmaGg2YmhkU2owdUdsNHZSVzdSQzZ6bTE0dVcyYldyRDZJMmQ4cGx4SDdlWnhjaHMzZ2NuS1p6QUFJTk85RVpOUlNVK2N3YWltNWJCVVFZelYzRHFHV2FxVitMNWFWcXkzc2FNYUxaUVl0SFlobEFOZ3BFc3VzOGw0czJ5WVNCS0haL2dGaUdlMStTc1V5aExBdUo1VXhPRFBCK1oxUWhpcEQvMFg4ZnllVkRZRWFrc3JHOEdNZko2K3BXL3pVZFladnViN3d3ekxFd1dxMmpFUm1ONzFFWmlEYmdVUzJwcXBJSXR0b3RQSVMyVlpQS3d0MTl3K1J5R0QrVkNxUVFYdFNSaDRySjRzaHBJS21jZ0RHMnlCWkNEcXBRNDNpUjVFc2RvRHJSZ0NNa0NTR3BlODRRUXdCWmNkTitoYjVOcEREZ0RsV2tNTzgrTFhOcU9iRnJ4VjJhZUlYUnFUdmNFNE84MFFFNWxTNHd4V2tzZDJUdzhZcVRYUVlRbWN4OFJ4VkxwTERBS1pSS29ZcDJGSWdoU25XYm9rUXR0VUs3NFd3WlhicGhiQTFubk1nSE1iZkpZUU5NMlNQZ2gzc1hBZ3orYTlFTExieWVCbHNteThQSW5qOHZUTFlPdEN2dkF5MjBUNnFhQ0ovcnd5MjN2TGFoUXltK04weWN3bkVyNUVHN2lGVG05MHBKM3Zxc3I2cHpYN3FFVjJVWUtIV1k2ZmJieFNFQStiQ2t6b0FpWE1Pejl5dUtDQjZtVFdlaTljK20zQkkycm5IRjY4eCtFS0x3T2ZRQ1FWaTVBeGEveFBsU0Y1dW51Unk3Rm5uM2M0WmJveUkxTkxKR3VDMnFVby9YZEhpOStBcUFNaHJPMndWVU5UWkRwd1F1V05meDlaRmNsOEhyM084bE5TR29DME1RTnBJVnM0RkhyNzJ6V0FwUURpUlFYT01pQjFTN0lYQitucnNFT2VuVG1BbUdQQkM3U2ZVRzlrdkdPZ01uU0VkOUkvYldQRHgveXhFbnV3UXFVSTNMS3ZRSG9weitOUXVDbUNoM2E0SkZaZGhleW52bWhIMnl0Q0daYW5oSVMydmhJNENrNkxZZHlNRWU1VURsOVN6c0lRS05MTlJYQVJxV1Y0VVhMRndFU2hrZVpHSWZVdG9Sb0s1cEdrV0E5b0d1elhlakF0b2VieXJxTElLZWV1TUlLRnNiM0gxR1IvVy8wTDFvTEpoL2JYL1Y5QloweVNVU25tTEVvVi84d2lySDBPZkN4VGhORldPSmk5SGZFTnRwckhodHNPSDJMYnJTdlhmMzlyMWJwTHN5WUNkR1VCZlRoTmtNS0F2dlQvTE41RUJlNWxVOGJTQmN4MktXeHFvcE5saHU0MWxaNTJDamdLYkRTS0RWYzVHVDZYOXZNQ1o1ZUVHYkE0RWNqSXNEZG4xMkJrUm1HQVV3WjNCd3ViMDk1Z1Vwc0h4ZjBma0JEcTVCZzYwMnZNeW94VVp5VHRBUmZPWnJCbWtZZVVKN0x0eDJKeXh0NEVNUmZ2UkpKRUNaeElKVmdDRkRBOHE0Mk92WWk5QXNVczUvZzEyRFcxS2FNY1Q4SW5HVVJpb0xMUUx3ZkJWeGJzUTJyZjl4a2NiY3hwcVR3VkQ3VUJydzBJOGJucUhoSzBheEJJcmljOUlMdmlESUxEMVFkcHNjc0hHc2RWRVMyeWhWSVlDaW5PZlNMQVhJUllvVy9XRG5MVk8vSTZRbTVTL0RNYWp2eEVZQXV0RzdLQ2lHR2hFaXBvaHBDaGFtM01IemVQTFcyUVJwRHlCK1BLT2FmNWZNczJaYURwc2pxbW8rTDJ6K1BqaUVDekFzbHVJT0IvMCs2ODVZeHczYUV1SHNsMWIrUkZyUER5R1Z3YWJuVUZ6R1VqYmhCTUphK0ovMWg2SGlSRnlPdHp3V3V1UHc5eklaL2pkQU1lYUdqZ1FRc3hRdUZqTXhseFhvS2ZBN0RCUmVSekV3UVRlSVhyMTRXdnhIbVk1T1BKeEt4TCtiN1NSMFU2ZFRlK081MXZZV1pIbUFEY2Frek5EUEovU2pNYVIzNVZpajNCamlBbkcyWG03bUduT2xZM3pHTnJRN2VJQlFWamJoN2F6WGdWNGJPOTJtWWk0L1hNRDlWQS9UNVhFdXROZTNzblB3U1BtNUhqeThwZHY1emwrbzdhc0RFN0tmZ0hrSVBENU9ERElvdUNKNkxZMGJ4SlFkSkNRRzVtaHZjdlBCMVVyV0lBSDRlQ1ErZ3J0M1BPSkt2WlpXUTZnUmk3Y29PREp5S0tLakFJTW0zNFhaYnA2bDJYNldqQUJtRGUvaStvZHYxT1hzSHl5WUJhaENRQnFDekY5cG5TR2FPRHVjZmtYZ1dFU0E1WURkRVdsNTNHUitMMnlPN1BmOTBRK0xPWG02RTVUZnFGNGxEcjhzUGgvQm00NndFZ0w0TDl5MzQ1OTVzUDdocmV0K0lwbERYc0J3VWxxTnpWd1R0SE9QNDJTNGtuSHNTSzJDZis1SUpVelFFUE1VWmtzOEMzOHhJMkxBeGVHTHpyaG9keHM3U1BMQjhPY1RkY1MrMm94V0VjUnJMQU1UbHlyR2c1SDRGNzhXUWdZdEZLeE1LUUFza21CTm9qa0RZdTB4ZDVkMjhMMVJHUC9YT1lUV0dYajg4QmszTVUzdmtJMktaUWY3bEt2aDgwdGl2VmJ6SDZ5TVd5a1c5Snd4WnpreUNLaUNERndVTldjYVRuUW9DU2tPNlB0VXk1QkpIajIxeXJFaXFjQXdsaGRMc0Q1bDR1SHJGbUQ3a3lROVlQMEMyS24ycE1uNW50MHRUTm9kQ0YzNWNNNEc1NVAwRmZ4cmcwMjRCSVF0azRPYTFYQ0hxOUlIbnNveEJlTFI4RkhIRzVzUjJ0MERqWm5IMXJVVllTeVZ0cFBaTnFEak9nVjdMaVNHY01WSWowUzVMNHE5bm53Y3c5bFZoU1IwM1gzUzVIUlZ3VFc0bGhza2JVZXNqbUo5R2JRRzIyVkt5aHdoRGZkdnZsblhUQ2FBSHpMK2RJVW14VkNaNGQzUDQzTWFhZ0xNSFJEZHF0dzlrbzBlaXJxUjlhN1BZUzlyVUFNMDc4ZzZsRE90bVVKeEowWWlMN2JNN1lhdzR0MEFoaE5SUHA0NkljN2x6QkQva25pTmZtWG9JcFFnM0wyS2JHbjY2Sk5BWFZqZnExVUIzblZTWjNPejQzM2FlYlcySXBJN1ZneUEwVEsyM2xVWUNJRktoc2pSbFRPVGRiMjRLSU8xaDBJYWpvM1VVSDBlcXpKK1ZnbUM0RFBnY1dJbUxkM1NhejRUaE5zMm9pZU9KaXM3Y1A0bkFVTXo2TzB6SlBwbWcvOUlBTTAyVVVUYUpIWkhVb1VzaC9rNURacE5ubFE1eHlLNEF3QzNnWTNQU3BHa1lWVzZDNmNBTnpiNXNKK1RoYTV4TXYvWU1mNzc5WG15UEdJaWNDbVE1MXFrL0piVnl6ZFNpNzJ6RnJld0Q4Qnp2b2xBbmhoNmNaWEU0aEk3bXlNMUFYNHJTYmFseStFcDZXWm9PQnpSRUJUekpKbWRSNjQzYkFMTkhPTTNodHRuYkFhMFgwUlVRdGhESytMd0U2cVlmWkFvbTVPRWxPY3VLNFRzNnZ4K0M2VVdHQ0xaTVl1MzJxaWQwMmdVT29jbnJURWx0TTlsdHNPQU5HWmtpQ29vdDVJTkJpY0pKUVJ5TkNRVjZ0bTQ2TjBTWVlSc04wTGZVUldQc3pLWlNSOFIzNk56UVJ5bVAwNVFqRmlHcWxETUJ1RkxtRjVoUVVLOFk5dVUxV0hUb3UxVnF4Tk5SN1hPb0VZY1dRZ2lRbUFpdU0zS2RRUm1jemlrNWcvcWtVa3NjbUtoVkl6VXc0RnBDMGd0UlAxL0N5RGpSak9KcnVCOVVDTVlhQy9zREEwQURtWjRDRUtpZ01Va0xXSk9vcHRBbVV3bEdURmttRlBPb3JPTUxRQ1E2WE5WaHU5aHpGTVpKNHJjL2tLb2hEU1F0NHdMMkdNcHZBTUVHSm85RmlhMW9XcG9lT2xOUkt4SXh5Nm1yV0ViRlNGdnpaQmpOeGRHVmk1M25ERXhUY1Q1TGx3dXdOd3VCZ0lMV3BCeTlXdGlNWW1FTDVxMEJHTXBKRVIzbVZrUlJ0K3htTkxOaUt1QjlPZ1oydGlZS2V6dnNZMlFuOHM5Q2JFTXlsMEl5UW9ORG1qdmxXZ1dvcVVMWnpic2xLOVhDSnQ3WW5DaXlXVDhjTGl5MW1XRlJseWVrSDAvd1JjVzhLZ0pBZjVhU2h1TUNnalZnMm1acDd5Smoyei9id2ZjcDJCSEdLZXFvanRaMXlhODdhTDlVNTR3T0tnWkdMbG1oN2dqMWxZOGp0Unc1ejJKUXZWeFQ3cHMvT1I0OHZrTnJOMFZnNFF4TGc4aWk4UFptSjBDNlBZV3JHR3l4RUdpdXVyZjJ1dDROSTlFdStQblJsVnpKRWdKcE42TVNHR09Fa2Zta01ST0RlM0tzeTZuRVhvbzNVb05UMXo0SytySUFOUkJNWVAxdG5tSFlJZmNQMk9XUXdkd2hEQlZaNkp0ZXAxenZCQ0ZKTk00MEE0OE1zQ0o3QWRWSGVMRjRDWnkvRllNMURUcURtV09FVVdJcElYNFJLZ2Npb0QzRmdZR0RHS1ltanhad0hPUVF4N3k2a0VPRGxvVFFnT1dNRjRQWnlvUG96Q1ArTVVKd29IelRVemFDN3ZVSXBsbFRYWHAwemhDQjhEcVBUb3dzTWozVHdybk9PMGVTREU5dDE1ejFXM25Xa3I5TENab3kzVVMxZmpuM0xlUzBLQkNvQUJUWWpTY2t4REZ4R3JLSUFzSXRDb2pFZnBQaGg4MGxRVGJxUUVNbllrL25QTnJBSDhweVFzRWlIazA4alh2cWZlL2x6QlplMmZpdDh4MXdzQzBpTnkrM1kyb251TmxQcWJpNHI5dWhCZGc3b3B1azNGZDFndUNoeHI1YU1XaHcyYU05SmtxcEFKNXJURmNQd041Q0puK0JuMGNFb3JoV2hCY1l2UUorMUhJUlJDY0krR241SjhJU1NxZ3g0UG5WVUJaOHZXTXd3d0lSUm1CbEhEaTM3VWEraVlNMWxWRXp5ejVCV09sNEdOUkFVZHZ4YWJybXJTaDRkOGp3RnAwUnB6SUQrQUg2RmZTTUczd1BtZ0FSQXdDZ0I5bWdKclFSVTcxQ0h5L2hTNjRjdXVQblg3YWIrNmVtd3oyQ3FXTTZrUGZuM2RzanRPKzhzSks0Ly9ad1pvUy8zMXVSdWUvdFhxOTFkZmpHdE1rNm5uNzFzOTh1ZVJsNjYrQWRkb1NPWjBCbng5RUZmM0poQlVzb2FBQjAxV1BDOGFBK21UYjNvRFpucjhiWE94NmVEenhQc3crT1dUMkZTNVRVR0pMdmJDTHZIcktORUl2eDNibHhxYnJTNEw2ZmZuVkIwZmZ3M2kxZ0FXZmJIWUp4elZRRmwrM3hZTUN4dDZRRlYyMm4zS1BhNGJST1B3NmRTaU1lVGRwdGhsOWlKU29oYlloWnZrM3lxbzBFUzlveGFaRDU5Z1BJcXUwRFhISHpmdmRqdGp3c0dQMkQ0MnJsOE5CR2dFSU5NRjBaRXROVDZ5czlSN2w0MVV1bmp4NGgreXFPcUg3T3I4UlhCaElydE5ZWmJjOW83RXY2czNGTkFoMWxLR0lvaTRFSXZ0WVNOZnJRaFo1aW0wM21TSDgyYXVjVWdUL3psZVZNWW9LeHhOUTJXMTI0SjZMcm9kUi83V0ZXM1pGSnNjY0V2VW5yQ0lHS2tUWXBPWUdsdUl0aUhBZDhjaW9iVFN0bG9adWIwUE5yQ2NudGpMSzJPM0laRHI4Vm9tMFdIZVVFNjJRWmxMLzVNSVlocFNnVWNSMzd1SUVvTEQ0V3RJTndmTTl3SmFkYi9HSzNiUkVVak5CVmRoQ0NRWFRrYTdLRDYyakt6TmhidnR0d1Q2TFlZcDlwekZqODUxc0diZm1xMm9hWUdGL0VFWXgxcGtTTGVxNTR5dmxsdzR6SkVEZ3hvaEJWY2dkQ2oxUzN5eTJKd0NFTDBGS0F4N0o0YzVjQkFsR1I5T3JnLzlYc2lvaUVLS0ZRSGtlSjdjcUdpTnBqZzJqMzk5U0pLUzBDTEZGRUJvZG9PTEtjUkRUM0JJYkVLaE04VGZSMDlvVmxnWXJqMHE0dlFORFQxR3hFWmQyL3BhbU9pNlJqcERnRUY2WFQ5cTRRcHhqazBNTFRWdExQNTNwVkF0ellmSEFMZE5BNGNXbFZvYy9qd09lRmV1Q0M2c2wvazFVZUZPbGhyaTU4TGZsU2MrMmFhNHN3M3gvV3o4RVlEYVpFY1FKNkVsVWdpL1dDMVAxQUNXZDRsbTlPbG01NjlkUG5QRENEK2RaS0FZNHVnVXhqa0ZVTlVPMXdrV3lHSVFRM1UzVGZLOFlwZWdlUFIxM1dueFZmQkdUU3ZhZGtlQjQzK0l0bFp6azlDSVhUMGJpcHdOd3N6ekVRbXRGTGFtUjNTVThwa3JSQllleHBjU3I5Z0JDcFVyQSt0SkRTZVVCZzJvMldwMUZ4dUViOXdJVFN3dzc0M1BzLytJaytCeUU3UWdzVDM1emw2R3JiL2xKWFhLbUlnRFlWNXlzNzB4MDk1WWhCaDNmR01LT3VkdHpoMGx1WjA5Vjh5WUNiL0NlVUpDNlBOMTBXWUVjM0xUc2R4cFhWd3pGMnU4dGQ0RGhEUE91d2NJVDEzaDRMOHJrMnRyTEFKSFpCQUQ1YllLSVlYWEIwamhrZEM3a2VRVk5SYkFnekVSN3NPN0xqWXZaNUc1aWZwRHByVTJjOGlJVmNTbkdPUVJnNTFRbm11VWFvQmR0akZZR1hDdFE2SFlGdWFBWklXeVh2b0Z0NURWdXBIOE45Rk11YUpXQ1F4K1MvSXJkeTdyNGs5S3RjaTRsUVk4WUJBRWZQV3JRQ0lSdk8vQnZJSFlpeFkwaFJzZ2lBNkpHTzRRYXZmRHA5UlBxdXlwUENpRHA3NmZHNlRTOTdrSk9ETjZzSVEvN3FNZyttZ3JncVVUanIvSncvSEw5ME1SaWpFUVFJZUhKWFkzYXM4WWVwcUdRNXV3bXdIZEFlRkx1RldMUVB5RDNOUnI0T3FWRVJzSStnUVViMEhaQW9jSVcwbTVKa0p0WU5uWUlwdys5ZjlxZ0NaTlBOUWVVQUhoMWhnWUYxVGlBdlBnRkpQTzhSZzZTNEc4UzBTbmduMjJWckZjMDBHWHhMQmNXTVF0bXpFeFVZM0ZSZzF5SVZ3dUM4VWM0OFEzbmdFd0h5NStJY25CUm1PaTF1Vm9HcGVNTVcra3U2TFlUcGN2SC9NVmFnek1LRnAvSTdRTlExUXczRTAxOG84ZkpPbDBBaitUbVBndmlrUEhOVHlDRnlVajhMT3RNLzNMSVUwTjNLVmh0dXhOUHJLQksyK29kT1FPZkZwanBhd3BVMG9HVFZRcG1aM3pkTktzcTlhdFVpbHdzcEtaaHREQzV6SXdwNGlGQmJ4Zy9obFVVL3BHa2hpckZ1S2tNQzhjUkdVa0lUUU5qSXJnM1FkemcvaUY1Q3RhY2RmQ2hxUWUxd29Rd3ZsSFFZRXRkNFNURXdrWnowTjh6VEJHdUU5Wlo2R1RxV2Yra2p5MGVNT0ZHYkU5U2p6UmRnemYvUkxOQ1hVRGVpTjFUSFEzQXpBeUQ5cEcyN3lCdG85M2hUTnlBQ2xGTFlMaWwzdFZBb0NNSEJFMDUrRTJZQ3QxeDYyTXhPTytISHZrTTlHRWp3UkxIalRCT1RkeHVpSjNVTXc2d2hiNFlPUk9MeERTOTdVZ3lDWmxVZUJ1MXNKakZyL25KaGZ1QVBBdUhzM05DWGFYcnJGdXdUdUJYMm5pcVFyS0lKemlVS0xoTkFuSUtCTStqUTJnVnMwME16QUF1UjBrTUlHcUdaTnRTdDJMUGUvVFVaaC9kT05YSzhGRW9MLzVLdEFnUVNpemp3RG5BWnArb3VtcjBYN25kOHpwR2taMTJ0V0RTSVNtbXB3ODdhUXRKMEgzdUZkeXhSTnJ6c0NFZExLbW1oL09nR1RLS09aUUZNeU1Ib0h1aU5PUjZJSDZTSTk5aEYvR1J6cnRJeXpBUkN0QTNBcUFGVFlMME1JQ0tMWmZZbEp5ODhZMVYyR05zM2Z5eW1YYkg2eWFIWHl1eVQ1WGI1L0RpT0hudFA4MEhVT0RLN3daZTJwYW5qRlZjL0dNS2ZZNUZnV2ZZMUh3T1JZRm45czFMYXdvVTVPdi8rcjJCK0NaTUNXNWVmSG1lN0FpOTBXWmJrWFJCSDhFTWRaWWxKb1BxVG5pbGZGemNKdms1NkFwNHVlbUZ6NjNSL0t5VzVldnJwNmQyRFA1Mkx1TFhxM1puWnAvemhwaHBqWENmdFlJQ1RVQ1BzZWk0SE1zQ2o3SG91Qnp1MVB6ZUhMUnRhZWNnV1hFeE9UV1M1KzhPVm9vaXFwOHVGWDVDRmFaUmNGc3RzdWFZMDdpNTFBaWZnNGw0dWRRSXYrNWx1UnQ3MTBKejR6RXRPU0dYOXg1SVlJQ2x0UmNtNXRIek1BdUN6OEhOUFdaMFlPTUhBY2FPYjVzVFhJQXFjTFBzU2o0SEl1Q3o3RW8rQnlMMG14RndWWVppNEs5czVLYVQwK2VjTjZTZDJwblExZjQ1dlh2bkZsYktNcE9hNDRzK1Rsa3ljOGh5NDlROC9ya3llY1B2VkU1RzlQam8zODk5Y0pRbTZ2S2gxdVZqN0FxSHprRGFEQUpDRmpNY3JKbHViZGxPWWxaTXNNcDhkdklIZFVQZWlCQkhNbGV6NHR1WEJ6QnZzK0xUbHdjemtianhVOXhnZlVicElIV1Q2QllzQ2VJMzhrOGRrWEdmYXdRcURvTGdhcXpFS2c2MkFpRUJXTkVCNE10V1MyeElnRXJJWWRPdmp1MjlBUXFNQ0JsdE82VnZQbnkwemRIQ25VVzR5bzNyUEE1RmdXZlkxSHdPUllGbjl2cHNBSjFQSW4zVHQ1MzIxWDBtcGlVdlBPR3BUdXd6UE9mVTN5Nk1wMHJNY1d5bkdwWjdtbFo3dUZKUE5GSXJBN25TYXhPNkVtc2p1bEpEQzdzU1N6OUU4aVRtQ1FDejR6MmswWE5qQTRhLzU1SGpqMHp1b0RVS3o5NlVhdWQ5bUcwbHEveFhzbExUM3JvajVpODkwNit0dW5YcjRXR2t5T3cyT1FSeGlhUEZHWjAyVDZNTFBrNWZIdzhOVUlFbnBMOHkyblAvUjRUeEtUa1kzKzg5ZG5xd3VmVWdvZmJXRG5DeUgwa3liMkxTWUFaeG96QUpLK21kVWRqVWxqOXlwR1pSQlk5SGFYVjZRcVVuaElpc3pyOW9ESEplVFpaTENDdlpOMVliOVNOOVViZFFtUUdGVmhJVUlHRlJJT3drR2lRQXIvKzVSdnJONEJmeDVOWGJGbTZJVFIyd1g1WmIxRzdpTXpJa3A5RGx2d2NzdVRua09WNE1xTU0vQndJVldDUzF5MDhkd20yeGFZbDE2OTc0NFBReExoVE1qczJENmJQTE1HYW1TVllzNUdaWTlBb3JYN251N0w2b3UvSzZwKytLNHVwRkFqY2twZ1dFRmhkZnRCNDhUenJYd3ZFaTRzSmpGcXh4cWpWN2hCNHorUjFXNTU4S0VwZWZNcldEelpXanB1RnhqUEhYUkc0TE04cTRzWFBQL1RyQ3pIcE5TUWZ2UE0zWC8zd2JpeE5VaUxSRk5ZSElhcStVWGR2STYzNjJrZGl4Q1N0NThFa3JUclRvTTF2ODZ3ekxXRFhLczhVSFgvK01OSk9oUkxwWlRwL1RVNHVPZk94bTBJczRuK0V0Qk9Udnp4MzlCeE04Tk9UMnpkZitVSklodHhwMzhYRXhpd3gyekZMekcvTUVvelpxQnMzNnFxamZUZ1Axa0EwNm5LR201aVlialBjeDZPZ1pqZ05tWU9kWWljaU50VTZJM25EbVd1dUJpUFU3RFlsK2ZCenY0RVRibEJWa2ZSd0kra1JKQ21ydXUrSFVIWmZLd1pLeW1LZ3BDd0dTbHJnOWU5ZDh2dVhhMlpqS2Z2UUsyKytYcnNiWEFGY2wxbGlQdHNGODFVLzg1UlYzL09VVlgvMGxCVi9LUFRidmJBY0t6KzFxYmZiMUlZcXNicW9FcXVMS3JHNnFOTHU5TnVXNURWWG4zVXplTzdleVNldVdQaGlkYUc2WWs2SEcyOHZtc3gzUmQzaW1SUVU0ZWRBbjhMVXR1V3hQOXdPOFd4U2N1aUZCMThKY2FBUDQ3bVlTc3J4M01sRzNSbGg2bXJFZWVxcVgzbnE3bUpHSzJhNFlpekdjSXRuY2xTSjFVV1Zkb2U2MDVLUHZiSHlYakhjNTMvN3V6ZENZcitLRlZCWHcyNjNaelJIQ2tkZERPZ0N3eDBidnZSRU1kejN6cmpyaVlyZG9DNG1rTkFraVlrdG1DU0xaelIxdHcrZjBYYkJkdFdmQm8zN0Jtd1hBOEhQYUtoVmlNQ28xZTZ4M1dXYnRyeU9HazlQbm5YQ0wrOW41RkJYWTFFMmtNelVKWTVrTDk0bGdkSEkvQnhLVkNxbittWGNOZS9jZWpIMmt5Y203M3Yxd3V0RFhING5CUDZReVV6ZDdNUFpyZGhGZ2Fwd0JneW9LazQ4YU4xcG5ySENCWnBkVUJWV0UxVUpDV0tveXU1UXRUbDV6OE5QL1EzeTdqN0pxODhaZ3gvZC95eFZKeWZmZU9LNld3Q1FzVmZ5Z1RQZWVHeDM1RjAzbVlISmxwdk15ckZjOVR0UFhmVkZUMTFOSElYSmJISmlMNXZNUGg0Rk5abHBUQlNXYTFxb3ZYYm5tWGY0cWF3cStlcVNEYjhPcllYZHNsejg2UWpqN1VkS250NFZYZDI4NDRqZ0ZxNmhwZmVVNUxiM25qNEhTKzlKeVpkUGZmelIwRlRtNU9saTdnTnllV2FMT2F3Y3M1MXVkRlV2ODNSVnovTjBWVy8wZEZYdktNOXNpNmN5OWZVRlpMMnNFcXVMS3JHNnFGSm82UThlTlo3N2hlVDUrdVNabDJ6WWdxbXNBZkNqaTkvZERYVVBzeHpQZXB3dy9XRXFuU25KNWN1dnYwOVQyVW5yejFrV0xCK090QkNTUjloMjB1SFlpSnNndGFPS290MHkyb2xSQTZsNGVST2dhc1ZGblN6T0oyRGM0NkpSRVE4bjRFUFVVT0lpamd0WWxFRVZoNHRKdUpEU3NnVVhMYmlRV25NNkxzQW5uSC9kaForTkpvUkU2QlNyclZTc1RuQ0sxZVRDWnU2S0t2cExvRnVGUGFOMlUvVHNxTlpQSmo1SnFLaXB4UDZjQ3FSSkg2UHJBOENMNDRhaEdTOWNPSXF3SVZOVGRTNGMwNzRuTHViRHVtV0NPcDdBUnkzOHZiMVdpV2JpOXc3RTNrZW15N0RwWG15eVEvVm8wMUdKVm4yVnB3VGNpWEdxZ3c4eFRqUGhRWXhUSEJvVm5BNW8zWmVuRml3V2NEcXdGZE0vM0dlYm9kKy82TEdMcmp2bGpWL2NjV3ZGZ3ZqelZKU01JbE04SEd1Q095bk8yNXJnWmpvVmdnRGNYekhjSVMwQzRxRVp5S2IzMzN2VEJhZWYvdURLMTMzQ0VVczQyZ1RmRVp5M05zSEZzd2w5M3lmR3ZhRm11UEkvZU5LOTV5OWFlc3NGOTFRY2F3bUhMZUZJRTV4RWNkN1VCTzlldVdhNnhMaTNvaGsrS0xkdjNQVEc2bCtjZFBFVWwyNmRwUnR1Z2dNc3podWI0QmtMMTlVZ0xlNnRhb2FyL3ZvWEx6cjM1bnZYWGZZMVY5QlZsbTZkcStGNjFoQmRJa2lMZTJ1YUFRaHh6cXF6MTYzY2NQdTJSMzBOaHl6aEtsZkROYjZHUGpFemJXN2RJL1hzNkxrL3UrYXlDMFpmOFRWY2FBbUhYQTFYaEd2SXhDeEZjK3UwMU5iMzc3Nzhvb3UzdnY2d1R6Z0dVeTYybEt2aXNqSlZIRzZHWC9xRzk5NTQvcTNMejl6K0taZHUxTktOTmJwR2JCeGZ4WTNOclpOU0c1NjQ1Ykl6UnY5OHl4NitEUzNkYUtOcnc4YnhOUnhwYnAyWU92blowOTkrNXZkUHJ0alBwUnUyZENPd2hsWVROakwrUVhFRk56VzM3cGw2Nm9VZHY3MXAvUVZMLytSSnVzNFNEamU2Tm14VUJRdUpXWmhtQUJHOGR2cXJ2M3pnaXJPZitLdFB1TW9TcnVOK0g4blhDQzhCSzZVbFp1bWJnY2oyd0VNWHJ6NXYrSTlESDNpU0RsbkNWYTZLYTFoRmJrTDd4Q1JiTTF5SDc5Mzg5SU9uWExianRHZUNSclNFUTY2T0szd2RmV0xTdVJtR3ZDOWZ0WG54MVErZWVOVy8rRGFNQWZzZk0raGswSStzcUNuK2lKb0l0MnR3Y3dwbUJFd28rR3FzRmRNQk1vbTFOdHNySTNpRnJlK0lzNndSYUFDK2Z2eHFjK3FLRjY5Zjl0eGRGMTgxelE4bFN6RVNNNnBzaW9rcWhWU1RVK2YvN3JhYnpqdjExVlZ4UDRnc3hYQU11MnBzZ0pqQzNCZFNrWTR4ZUhWZmM5blZqMjFkLy96b0JFOS9TN2N1WnRSWWp5aDMydDczYWRsd01mQ1haOWRmZGROZDE2MVo2bnZLRU5MVm9kSjdvSGtiOFY2dFZYVWhiay9EelJiNmZvdk1zVlpNZWlCenJMWEJYaGtEVmcwYkxtYlVXQk9EN3o5TDZML2FrSHByOGVWM3YzWEt2Vy91NzFtWnBSaHJNR3BzYXhBMUNxbW1wRTY4ZStWYmw1eDU0ZlgzQkV6TWtvdzJHRG0yQXB2RlZjbVNzUmxRNWRURGIvL3N4WHR2dUhUVFl6N2hzQ1VjYVRDZjNVMUFsQW5SQTRJRDJoRWxUbDJ6K280VmExWSt0ZjF2d1FoQXdrbW9Od2ZtWkg3RmFyc0t0L2ZFemIzUWFxTG11b1pXR1dLdGIyaWRhSzhNMlNlSEc0QjV3S1pyQUFhQ2JKZmRaeWVtL2pUOHpNa1AvdW1sMGVlRFBteEpnS29qaWdEM3Bnb2ZMeVJyU1kydC9PM3BhNjlhL3Z3akFRc0NpQjRMN3lnQ2VCL0wzU2RqVXpRQUF1S1dtMzY1L205THI5M3hnRTlJZkQ1U3Y5NG9zbzFJVXI1b1RNeTJSTkZUNXoxMTI3TEZQMXYxeDJHZmtEaCtqYWg0RXlnT0lRalNxYXBMUkVCTy9zMkVLeEN0NjFzaFRJSFc5YTF1VEJGRmtLMVhEMHF3OWVxQk5oQ21TRk5xdytpVzArOWI5UDZwWDNQZklsUWhpVnZ2MkVnOUNMSW52dTVUN1pYYWZPV2ZubC82eU1yTFArUDVoNlZZVlcvMFdGUHY2T0ZUc1NYcXdRWmVXN3g4NFgrL3VPTFpHdGZPeEVBazZSMDVWb1RKd2JSc1NaUTdOZmJZZFNOamw5OXp4aVNYanFpTWsxRnB3TG1nbCt3SkEzVmpIN2lOMFNNMnFlWWZxM1Bzb3k1Z0h6UUpFb1NaT3RDeVVtbzBwN1kvc2ZIYWgwZHUzZndwMzRrdEJYRGpqSDNVZ1JyeEVEVW1weTQ1ZmVXVFMxWnZQT1h6dnZkYWltSFlScW5tREN6S3ZIMHF0Z0pnK1ZLdi9Hbm96M2ZjdlBLcyt3UCtiUW5YeWJFUWhDZEFyaThZRTdNWjY4QS9ubmorenk5ZmQ5R0o1LzB4bUlTUmNBcXFEY0VQZmFUQVFIQ2JRM1FpU0tYR0J4cWdNWkM2Z0lGd05VSHdPekFPdGh3QU80dm8wWkI2L0s2YnRteDg4YndsendiQ2tDVVpxM1VjcEJZRTJTTkVrQ21wTmM4Ky92VFZqNXh3VFRDZUNlakp3dGM2RGxMcktPS1RzU1hxd0VIT3ZlanU0WlYvdWYrL2R3UmlrQ1VjcVhVY3BEWkVFU1ptVTZMb3FUdk9mSHZ6RmErOWVXY2dYUkRlay95RFZnOWhEc0lORWNKckJCeWsxbkdRMm9DRDJDZUJZV2tjcExhRUloTlQ1NzF6dzRxWFhscXlha3ZBUVN3SkVDV05nNUFpazBJVWFVbDljTUhiNTk5KzdYTi9MWEFRckZSWmVFZVJaWjRpUGhuYm9oWWM1TFdSODdmOTliVHovL0lOejBBc0hkQTZqWUVRcWJIQVFFU1FWU2g1YXVURXRmYy9jTzlMZHgvbytRZFh4bHdsbFBBUDNNYndDZkdQR3NjL2FnTCtZVjhFYnFmeGo1cHgvR1ByNWxzM1ByWDlqbXMvNy9tSHBWaFg0L2hIelRqK01iYjJoWWV2djJIRDFaLzIvTU5TcktweC9BTllwT1A0UnczNHg1OXZ2dUgyU3gvNDY3YVlKN3lsRzNMVVdCR21odWNmS0hkcS9hOWVPL1BFNVd1dWlYditBYVYzT2Y2QjI4WDhvOXJ4aitxQWYrQVZ0bHVONHgrbDFHaE9iYnp3M2p0ZnVtamRRMU05LzdBVUk5V09mOERPcVlSLy9QSFBTMysrWk5IbWxaL3cvTU5TREZjNy9sRmRobjlVZzMrYzg4Z04yKzkvNGZ4ZmUwNUZoRXZTdmRxeER5SXRscktQYXJDUE5hZTljdkxqWi8xMjA1Yzk5NkF4UlJudWdkdkYzS1BhY1kvcWdIdlFGa21ZanNZOXFzZHhqNmQvZC9FVk41NTE0bksvemlEMEdnbExIMU1TbGxBTHhjemozak9Ybm52RjNaZSsvSWVBZVZpUzBTckhQS3JLTUk5cU1JODM3anoxaHJmdnZ1b1Btd1B4d3hLT3dIMUxsSzhxd3p4UTh0U3ZYci9ubXB0MnJEeDdheUIrSUdFNTVvSGJ4Y3lqeWpHUHFvQjUyQ2VCN1dQTW8yb2M4OWorN0liWG50MHlldGViL21NRXFTTnhIVVZXa0NMRnpHUDA4Y2RXdlBuS3BvZTIrU1FFcEdQaEhVV1dlWXFFbVVjVm1NZnkzOXcwZHMzN1Q2NThMeEEvTENHQWs0eDdFRUNwbEh1ZzZLa3pUbjd0OGgwYmJqN3ZqVUQ4UU1KeTdBTzNpOWxIcFdNZmxRSDdzRStPVmpyMlVUbU9mV3k2N1kxbnRpd2NYdldhL3hqaC9FamRTc2MvS3NmeGo3TVh2L1dMVzU5NjVwSE53UUxHa2dBTnl4aElaUmtHVWdrRzh0SXB6NzJ3ZU5IWko5NFNzRzVMT09Rb3NpSk1FYzlCVVBUVW54Njk5cGtIbjd6d0xpOGphWmV1REFmQjdXSU9Fa1Y5U2Vwb3dFSHdDaHVQV0h4c3ZFcXdtR0lPOHN5TnoxMXgyaVhyWHY2S253UXRCVURTaklORVFROTJUSitxTWZYT2U5dGZQK1g1QjIvMEhKaGdsU3g1MUxqVVJ0Z3FLMitmaWcwUnhXcitxZDlzSC9ybEhhT25UL2FVdDNUQUhEUU9BdXhCVktlUWxnMFp4WnA4MlpiYlQxNDBkUGt0RFo3OFNGZmdJTk5nQm1nY0JMZUxPVWpVY1pCbzZ4Nk9nMER0em9ZakhCNGJMb3FWSjN3U2c2L3VrYnIraVMxRHE5ODZaNXVYR1ltTFNNTEN1RmlFWmJRR0V0eW5tcEs2NU1xTHp2ckwraWV1YlBBTXhGSUE0UkRhUk5ROEFvb0RlaXRJeFZZQWhWSlhySHptN1hzWFBuZkJSTTgvTE4wSUFFcEU5d2lvV1FVcStMUnNSYUV6TG45OXhZUFAzYnArbW1jZlNHZnNvdzQ5cUFibXNNWStjTnZZeHg3VTJRdTlVS3UyOVJGUERRSUpzdDBpUmczRWtHSUpDMS9kSTdYNHZkTldQTFJqeXlzelBmZXdGRU9PR2lzaVRvdmlVOFZTdjd6N3ZLVy9lKzNTWjcvb21RZThGMWx5OS9GbHBKOVhnVEFWV3dFVVN0MzQvaVZYWEhqTGJ4ODR5TlBkMHZVYk1lWnAyVmhJeVRaRXFWUDNuVHM4ZXZlMlI1ZmZGbkJ2WWdHS2M2QnAySW1zcG5ETk1NYXhoelhBRDZIandPbUlWamY1d0g0Vmx6ODFWVTAzTkRVTUZ4SjhNSFh0a25jZWZmbnN0NTY2ejM4R2R0VjQ4UUNqMjRGT1ErUFRURWhkdXYzTXB4KzQrcDZiQTdVVmZRYW9IaFRWWm9aVVR3cEx3cWgxTDcrMStjOVh2N1g1MlNkY0VvdEZJWnExak5jNGZTdDE5cnJ6SDdyOXlxVVh2ZXplSjh5TFNsK0hIWlZXdkRsRHdldGFrYzRpMWJXaS92c29MRjByY21Lb2dCYjhxazk4UWtFRldsSHk2UUtNYWNVWDltWWdBZnhxU2t5MWtBUlF4RkpGUzhQWU9QU1BORUZITkxJWUxqOUpyOXBQVnNoTlFCYXlQYnB0dXRyZ040eGllOXdyOEJQcGlkV1oyOG4zL0wxSS9GT0ZIUEtoVlBsQ3F1QzIvT3ZzTjk3K1JRUld5TjZkYVVWbDZHSzV2V1VYMDJQMUxEeTkwZUQrSWhXeWtEN29vcXZZTk9ZMml5QklNZmhjNldYem5xbGlJSzdHaXRURDF6MjY3TlhmdlBxWC9YaHgxaStXUG5uSmIzOSsreHhlL096aFRlYzkrdnc5SS9XeGFzNnZUQkhCQVRsVnduZVBmN0VUcm1yb3BlMDlJb2M5dlRqeWt4OGQ4dDIyZ2U2RHYvL3RmLzloTHB2dG1wdnIrbm8zRC8yeiszUFp1Wm0rV1JVSDhQSkgzNWoxWHprOTlLY0J2WkJHQmovSUQvYm5CNU9KSDJVR0JuUHB3Y0ZzNHNjZDNYM1pYQzZCaDRtc25pWnk2ZjVjZWlEZE41anVUTFFOSk5vU1gvcmkvdTN6QjlPaFZCM1pYcjR6Z0RmNnM1bSt3Ui9tMjNzeUhZZWw1NWZMdWw4UEU3UFQ4ejlPMWovT3pPcHJHOHpuMHNuRVY3K2NLSG5aZjJMQXYrUnVCRzk4OStERER1YmYvbjNadm81MFIzZGJwbS8vam14bjJzcTBQOHFrcHdNZGJUMXRPZjNVTzN4bElOMkJMSUpYdXR0eW5TRG4vbjI5Ky9mUHJvTi9PUCtCYWdQNWRueXJiVEJkaitzcTk5Y2cvM0dnTGVDdktYUy9HWDhUOEJkeDZlUHVIVDZqejNuNE92eDdEL2Y4NFVpODRobjN0eWV1SitGdk12Nm00Syt0dmEydk05dlgwTmFlNmNrTXpzZTVKNDBER3BYSHVmeE55dk9VemJYemhHSjM2RHFmNjhRcFA0QjNPanBBZTU0eW5YcTVveU9idDdNOTdzNmttUlVlNDVETkR3eG1PdkJqVGo2VDQ5MWNWb241L21DR1pla1l6T1o0Wkl2eW5HL3JhV2pyYk92SEc1M0lvYk16dzVjN08rMTU1MUhJRUtmZURJLzVIaDdudHFIaGVNN3dsTTVsMi9uRnJxNjJEREx1NnNxeTZGMjVOcFpuRmxvT1I3dzJTMldmbFV2amQzZTZEYzh5dmZoRGlreXVQNXZEczh3QXFZTkd4LzJlOWp5UEhkbnVMRXJYaytiem5rd2FlZlh3dWljTll2YjBaSS9Hc1RmTEF2WmsrNWk0djdzTnh4enk1d3NEV1J3RzAvaEd6OUZ0ODFHYlhuU0tQQzU3MjQ3QjRNUTVhMGZSc3hma1JMSDYybnJtTThlK2ptNFNxcThEbitYbExPYlRONHRsN0p1VlEvWjltVjZTcm0rMmJ2VWhFNUtqcjA4RTdjc09kaXZCd05FNkRhYjcrbEMwdnNITW5EemZtcGRKczBQMDRhKy9qYlhyei9aa1ovR3FQOTJHQlAzOXpMVmZYQUxuWEFaNTVqcTZlVkQ3b29vOE1NL2NMT1pJcXVWNldZRmNMOHVkNjBWbU9SU0tkM0lzUHM5cDFpeVh5ekRUWEk3MDQ3ZHpnK2t1ZFpIY0lFWXBUMGRuYzdNYjJnYjQxNS9tazRHQk5qVSt1SUNPZW05Z0lOK0xqQVlHdTN0UmpzSHVudlFnTGdlektNcmdZRnNIVWcraTNpakE0R0JtTU4vSlo2NkQ1MTFuekhleVgrVm5xWk9wRmZLREludCtFRzJYSDh6MzRxVzU2Wnk2ME54c1Ixc25icy9Oc21zZDNUWWI5NDRHRVhoRVpZOU9EMlJabktPNzhpRFcwYlB4Q0svTnl3dzB0TGUxejhlaG96dmRnN3p4QTU5dWIrdEVudTF0cy9EWG93Nk5NeDd3UmZTeDlyYmU5bXdXcHo3ODU2a1B6ZGlPbHNGZnVvY3Y1ZFMzY2NZMVRoaUtPS0JwY0p3TkdyV2pybWpDOWpRK3l5TmVUYU5DU0pudWFPUEF4Wm5GYlUrbnUzREFxT0h2V2N3eTNZMHE4NVFCN2RyVDZQZTZaSGZIRVZtbjBUZDVUSGVCZXUxczAvWTBDTXU4UVhDVU1UMTRkQnFEcFQwOVA4c3NNaDN6TzFnV2tLMDlBNnExSytPTTliajJETWlFd3lDeXpGanlIcllkam1neEhGbElVRWlWNmtGajQ1aHU0M015Q1BCczV0V1R6ZW80Z0NiZ1dSWHNRYi9FZ1JubUI1QjdsZzJDSTNMSVlueTJaOUdwMjdPOTdUaGc4T0tRUjM3WkxMTE9ja3kzZzVHd05Oa2N4eXBPN0svdFpHZnRXY3dqK0k0TnVmYnNQUHdoUDNRdEZSS3NCM1ZIbjhmWGN1aWtQSktDWkFzOHBvL2hSWVoxekdYVUMzSVpOa0l1TTZ1YnlmVzVYQWE5dnoyWEJiZnR5ZkRIYkJJMGwrMVQ0aXcvbjdNeGp2UFJmS1E2NXR2SjQ5dnpuYXhnSHBrand6eFlZdy82VWo3VGcrL25lMURoZkE4eXo0T1A4WEZmcDVLQXdzZ01qSjhmeXVmSWIzQWlJVWlYL0VDbVR3VFBEekJuYTZqOGZCMlBPYWFobzYwZGZUbk5NeXFQSTdMc0lIY2Z3RW4zMGU2WVVudDQ2TVdoRjRPS3AzNGNtQUJzajhjT2RHYWNVSG9jTVVQemxHWEt2cmx0ektvUFBRcW5mdmVCL3N5ZzB2VVBrdVlkR0IvNFEwdnkxTW5EckN5UC9hZ25UdUNhT1BJbnVnY08zVHhrK3ZqS0FBY0xUbVNlSGVnaCtBUE5adkdNdm81amVsWld5VFdxTUlMWVZEYVFjQlF6NldBamQ2UXgxYUw5VUk4MDMwLzNrbnQzcFBzR1NBbjh6dXN1dWdLK2cybEZ4WVo4Z1lKM3Q2RlJjT3p0VjI3ZDRwazRaWkd3R3pVRXFYRkd1L0RFNzNhem5KakxRTUx1TkhvVGpoQlJlT3JpUWRYdDV1akVGSTJleVR6WnozQkVQOEN4dHcvVEdHWVpUcU00WlpVV1BReE1wS003MzhGNUJlYytacHpQSVhWbUZ1bWJ3VVNDZVFzL2NoelVIWm5CekRITW13SkdSMll1eGxSSEQrZFdIRkV3VEtlWkxqem9hVHVhQi80aUw4SVJEQjVIOEZhY09CWndGS2w2TWwwb1kwOEc0eEpIRmFZbnc1eXllb2x0Z25HT0QvZWcrL09ZUjJYQW01aHBubW55N0ZNWThTSllUMTd0bHlVWHhKSEV5SUxMUWdLaVFJZERWeGNrZ2c2eUFoeVFSeGFEQWpNRXptRFZPSElHQUtORXIrWnI0RVU0Z0ZueWpWNldMZHNyWWtCRTVXU0tyTm1xUEhkaWp1RzVLNE9wRVdlSUhoZysrTkZuK2ZjTlFKN2lKL29HY3hBeWNJYkF6cFlnQjhLQnR6QVo4NDErWnB4amp5R1h4b0VmQk45WFBxb1MrQkh2NVZWTHpHTnMrbXllY3poT09WSUxMRkhWRThHejg3T1lLVHZJc0hqaytNZXBDem5sMmxCWXNDN2Q0QUNoSElzVXViYWo4ZmxjMnpISUdKMlhMNlU1ZCtLVVpoNXBOQzlaR2dkYUxrTXlnWUdoSFhMb0hxQlNMc3ZmNUowNHFwUmdXbWkzWEw0anczcmw4aHozdVh5R1JjM2xlelc2YzJDdmZKT01yWU0xeWtFdzR0djVkanlGT0FEcEhtZmtuTzgzNXQ2UnoyVlFVWjRobTZBb2VUZkM4am1PVFdTa29ZVytBZjdaa1NjTk5ETjFnakYzUWlyRDJNS3BId2UyQkk1a2dwM293aGpSblNSSHB3YSticUxEZGFJL2QzSWtkNll4M1NKQm1td2JKOGdKdk1Mb2IrZTdhWXJPUEtFLzY0ekcxT3NrSldyY21kWmJYZUFTdk9peXR6QnNPdE1TV0R2VEhEazRRbTdpaTcyY1duQWl0Y0N0U1VHSzVwU0pjT2Fia3Vsd292U0RVM1lBVFlVekJnd1hPaGlwNkhvVXdyQ21RUk9CbkZ6Y0tBblhUVHpONXFHZmpBbG45RkFtQVMzNXBVRjJ2RTRNM1I2MEtzN2tIeml4UzNWbUlHS2pkK0NNTnpOa0ZDaEFwZzJ0QjdtZXovRWRQa0UvNmNSQVozVXlzOFRFY2U0akQrbk05S1I3SWM5MWd0SG9jVjhXc2g5L3FNUGp4TU9BaWZMNFlWMGFQNHlVR2JaU1pnQzBRVU5rc0s3aElNT1BmcEVRSkxLbUpTV1p6MXkxVEdadU5xZTd4NkIvZDJhMVJNRUowaVU2VVNkWVRpZllBZy85a0lsdzdtV253c3BLclpqRnhNbFVXR1hpcUFNTGtzVjZraWRTV1dNTHgxbm9mVGl4ZGhoZEhCazRINDBEUjVTdGVEckJML2x1aGg5RXgwTTc1TUQrY0ZCR3BEakdCdzc0SkhnMERtQ1VuWG4yR0hSKzlsUEtzcDFpZXpqaUxjaWhYUTJkODhHMThiMDArbmlPUjVRTmdqNGtTUno3ZUVEZkFBVXp1b01jY01BdlRBczRtS0NHYzE4V1VuMmFJb3NHZnhvbElBblNYSFRoY3Rhc2hyUmttSFJHa2ttNnB4MGlVN3FIVFlENUVHcytscUFuUFF2ckVKNUZYcHl4YXJJZmN5Rzg4OVVNTSswQkZUR0EyakJSNEVTSkRTZXdMTjVOY3hwTTkyWTE4YVo3KzN2UVAzSEtjckdETTZxTnBRbnBqeE02RFljQi9pUXg0cHdsUjRUNHlzcWdqN0Z1ZmFnQmMrNmJSU2FBRThkZ3VnOEYwOTJqbUg5ZkQwZFlHaXV0V2FCVkh5cWpFN3NHNTNjd0k2b3hVQUFNUmJ0QUk2WDdORTV3MlkvZWlNNldua01aQTBlMEttVWcvTEUwT1QwRGkxU05JR3NpbjF3ZXEyS00wRFlteHdvSXVXSDlveEtoSDVORytCd0ZwL1FnWm5oVWpiMVpqemtOWTBSQzVzS3hCejBuUFU5MG1BZnVScXJNMDVvZUo1TXk4RU1rbjRmNWtzV1lwNlY5ZWw1YVBCTG5YQWQ1VFhwZU55UWVadE9kZ2F5T004WXFqN3FuRzJnUk5QRThUSWFnK0R5dDNYQVNPZVpoQ0dMWTRNenhnWlA2ZTNxZWxtZzRrUmJ6OFdBK3VDaTZUVmNiWldTY1VCOGN3TzduNDR6U1laMlAzb0lqZWl3RTJ4NGVrR0VYRndvNHNBZmp4R21nQzVJRy9qcDRvMitRSGJxTDY5UXVjSEpTdVF2eUUvNUFQeHpaWDNIS2NESGJwYlZtRnhaNm1MNXdtWllpQ1djSTJXUmxYV24wYUNZREI4SmZKdys4d25xY045Z0NYV2loekZ5OXc1SFlKVUduQzdOa0Y3Z3Rma0hKb1NKa01EcitQM0Z2R1ZmVjA3WU5uN3VEVXBSVUNRTXg2QTREUlFGRlFVeFVSS1FiYWNSQUVCTlVNREFRRzBVRUZRc0ZFMEZNeEc3RnhrQ3dFOTVqRnYvcnV2L1A4K0Y5UHQ3NjIrZXc5MTVyMXF4Wk0yY2M1ekd6SVlPNStsbHZRcUNGb1J4c0FFUEFhbUFSRG1jVElOanNSY0cwSEJ3TDloRzdvVkRtcGdkQkYzS0hjOSt4OS9HY3h4NFVtaXdQaWtDZ0NjRzZDREVVRG9oZ054L0JiaEVGdTQ4SWJ1YWlpSUZnUVJJazlBc2tkd2czdFlJaUVoRERRWEkxb0NPaW9iZUNvQ2h4RldqSklPWkdCVVd6TzhLa1lNK1FoV1VRcUl5YlhpektaQzJOeHZUbEN0UVB6Y0cwRjBxb05VZ3ViQTZDcThEVnhYbHhRUnlNRUlRNEM3Qk9NTmRMVUtKTVlob3hIWUkvV0lzUVJySGptQnBrWDdJV3daMWxYek12Q1JJMkc1SzVxMEh3TmZBUmN6dUNFdkEySVFwMk13aHVMamZjbUpNZWhPZ2ZIUnpNNHZSNEZCaTZ3WWpVazFOWXdUbjN3YXdOd2ZCeTRSY3pyWUdDaTRGUXNoZ0tCUnhiVm5CNkxoanhDMTdzYUl3cENEYmlndUZQc0RjSTZnQlFjWU1LWlNqNkV3VzdPczdFN2FKSVlBTWdHTDNITlNxRTNWQndLRk9id2N4ZUJJY0dNNDBPcmNVR1NIQW9ERTRRZXh1TCtwamhDRVl3elFRYm1paFlGUmdHdUVvRXMzK1FrVEdZUXNFUjBYQUZJT0VkUWJKYmpHRDJDeklKQWpNam1BMk00T2dBK0FRNG1UM3BZUGFJSWRqcG1DNFJFWDRvQWRyZ3d1d1o0bmFaZlVadnNNNkhiekNEQ2RZS0xrcUdaTGNReXpRY0pLc1VzVEp6QTJEZTJhVmc1TmxSR0hVUUNGNGcyYWZSOExMWk1mQnhtVVRyNEN6aUMweFBISm5BdFE1REZaVWk2R1dmdzhWQXYrQkpCNmRFeWtNUXBNWkR3cmxCMEJVRUVRbUx3Z3B1dUVFbkJrREV3TzFHdklYQW54WHNrMWdNTXNoRU5vWlo4TVhoSkNHQWVpQm1jWWV3Q0I4aUFxb0pCV3dpWkNLcVlUWXpCT014cE4wK0FnaENRQTRaaWFHRklnWWlDcTlZZkJpS3pzWGZPQTRDMmcwZUI0NUJSNGF3K1I0Q1hjc2VURWowREdCS0laaWg4RDBBVXVLeTBSZ0FFS0hNSzBYSm5sa0lDMWhDZ0c2d1QvQ2NRcGdoQXI2RitobWNnUnZqVENGR1Uzc2d6UTJyRURoeTdFLzRYQ0djYnhXQ3NDcUVqZE9RQkhpZVRETExpb0pWZ0ptSlNJQ1ZESlJFZ1FxQUlYQUhzQWdVa24wU3g2Qm9lVWdLUXp6a3pCTU1aU0FZbnBBZkV6Q1k4SFpEMlZud0FsbVF3KzRjTDdnS1hNa3BNdUNkYUVRb29HQTJnMEx4ekppL2pKTHBENHhnWnVGUXNLR0lna011VVNZdzQ0RElLb1FKenJ3eE1CLzlncUxkL1laK0RVeG1NcFR6WnZBSFUza29ZT3R3QjZGUnpIcXdBdE9aSzZPaGMwUGhHN0RtUnVHcFlUQkJKY2N6bnpjMEtvelpQQlJNaDRSR01jUVhCZk5rSVRGc3Vacmdna015aUp3ZEU4ZkNMUlR0SjdLd2tCV2MwVVNKNThLcUJaN0p2c1g0WktNUGYwUkRjQ01SQmJOU0tEaExId3FWSndlV3pmb2JIZ2YwUEQ0RFVnb1pINGgyUStPbnlNUGFvYW93UHpaalVMQVhVSnd3REYxbU9GRkdNUmtCSFI4V21JVGhFQlk5QXkvTTJERG1WSVJoY0xCQnhkeWlNSVl5UWJLSEdzWmk3ekFNQmZRTWlsQjBJNHB3Q0xRekhLNEdFT0ZvZVRpYjB4QXhFRENPbU1Kc0VJY3pFQ0Fjb3dNdlZuYzRNM3NRd1hDM1VlTDVoNk9mOFFLbWdkUFpMVVBBZVVDUkZDb1BqNElSQzQ4S2hkb0xSeitqcWloTWdBam9HN3h3QTVCb0RkUWdjMFpScEVEZ1RtQVNZeUNpMEErNEMwQVc4ZkN3b1NDNU4wd1pRT0t1STFqY3h5UkdPenN6MFErQ1ZRK2xCaEhIakFrQ0RPNTRoQkRBT0xqTEJQb0ZNWUg1Qm9sbnczeGdwcjhqQXFHek1ialpDNE1Ha2htdWlNQlF6b3VFWTR4SEdOSCtVVlF3ZEFtS09JaG9oSFhzTTZDYzdIc09nMk1RQ21wQWlBVUIxd0txRTJVc2MxTXdYTGtaQWtTRkU3Z2twMzBpR0FiTEFTd1FyT0VzeW9oZzdrZ0VzZ040QXB5ZkN5ZWNtUjRXYzBKdzZnMXVBU2R3WURSeVJlenFnTVJ4ZGRiZmlCRmc3VmdlQklNR0JXNHVtdlVsc0FtbXF6bWNCb0taWnM2b3dHVm5weUtHd1pjSndaemZEYlNGZVVjUkNWSHNkcmp3UHlJaG1jMmtpQlE0ZzNIeVNKWnV3bXlKUkVPZ0RYQkJ5Q2lNWkVSazdCUDRERnhzRnVrWGhxY2R5WjV3SkpRN0xzUTBGMTdzS2l4OFpyTUNKZUJCU003blJza2M4MGcvNWlCSFF1KzNGMmdDSk1QRlViUmZPcFpOSFJTeENIYlplOFRLRUt4eFhKOWd5bk1uNFcrbUVmQUg5eTRXYmhpSzlpT1NReVBoN1NBTmhQTXhWakJTVWVBUzBFZHNCS0RFRlZoeWt1RmZ5S3F3ZWhCeStVRkdzRWdJQlR1QTZ5MFViRW96SjRPN0QvZ0tFTEh3ZXR2REpFZzhaRWp1SUpnd0NJVFA3QXVtOHlGRFlCb2lZWGZZSFdQeWNZTUVmalJ1QzZxWHF4UGpCTzFnTXhLaXZlMkl5M0h0VUVCcDdDellkTzVzenFvd1lJSmRqRTFhaUhqdU1iRGJEMDJHcVlEa0prRWs4bmJzSEFRK2FFVTA0QUNjZ3JtT0Y5T1NtQU9oTEJwRXlkUURpdmJlaFVPSFc0aG1yZUl3TVVoV1NXd1VDMzZSak1NSWhtNUVhTWo4cTM4aVJCUmNUYkJPM09qZzhnT1JiQlJDaEVJeVNDb1NPRG43TW9FMUNnRkFhQXdHTXBKeTNJM2hCSGJUY0h3NTdCMS9zQTVoYWkwU2ZpSnJSZ3FBalNCV2NNTTlNZ1d0alBKamt3ZUJOeE14MEdVb3VDeENGRVpLQ2lUWHVQWTB0VHlLNWQyQURZWkRvSmVpb0JrUVFiRFBvVTJoKzZQK0NhcWpFQzRqam9CRjRiNUVDOWo0eDR2TG1VVUZKaUNRaWtESkxIZFVZRkljUkRLK1orcTUvY2xHUmJPaEhSWE5Jam9FOUJqVHJJeG1UeCtQbE0wVkZLejF6SkFpajhqRjBTZzVnZGtYekVxdU9uUWdPeGlOU1dDd0xxN1hQbitqT01pUmdhelJTTlRBcDB5QjRPd2lMaDJLa1FmdEFVaU9LN25iaUo3QlBaZm9HWWtjZklla0I1d1BHRXRNQ1FiR3NEcWpFYlhMZ2RheUYzdUxaNFVtUkFjeEE4RENqdWh3dUQzTUQ0SUh4R3FNU0FHTzdpL0gvZUdxek8xbE9SNE1LWFI0TkFKNTdnMmVMeHdpZkFDWTFROFNRNXQ5SGNPNUVORXgzTlBCR0dNcUMvbHhWaEhVQVZPRTdhZ1NKQUkwUEd5RU02eWxMUHhneHdEUVluRmJkQ3pETmVSd3FUaWtvSDFBSXZmT2VSY28yOTh4VndBRlovV2pXY0NJVHNWSjdPa3hqeGt2OWxkeUNpeUVQSm9iWFBMb1dleGVPSGNuQnZZTVR5ZUdUV2NPckl0QmlJS2JSUkVKQVQzSEpKNFNKSG9Ea210RkRQeHRKZ0g5c21NNXJCUkZPQlBJS3JFQzR6T0dLYlVZVHB0QmNvSzdRNVFNc1ViQjRBZVViRGJGTVBzVzQ1ZkN6VjNra0ZrajhQeHdkMXhDR1FKdURuc0RxNFJlWWQyT0Z6eGxYQWNSTTU1Z0RPd2J1NWRBRHZYR0s0aU5HSlRzRWFKZ1JvOGxjbUtZUThza3BubE1DSWVleElTa1lENmk4MklRRXVIVFVIL3VidUd1c1ZFV0V3b2tGaktZdlFKWkxjeTdoR0IzeW13ZlM3Z3dDRFltRk80eFlKcDRkbmZNMFlDY05RdGQyTjZuY0JQWTVWa09rdFhPZVZZY3JJaG1jNjJJNEtDeEdHYlRtTVQxWU1QWUo5Rnd2Q0J3TXVPdlFNTERZSko5eGF3MENxaFdDTlRGa1ArWWFMaXQzQ0hJaUxNR013RDNuei9pUXRsOHhCK3NIbmpDdU4xL1RHd01HeldzUHdHdHM3dmhRdllZbHZEbUxvR0FpeldTNGZhc1gyT0JON092R1ZiTWZjeFJRVkRHc3lwaW9UKzR0KzJuc3RFSkNhUEh2dVB1QVVnNzdBcjNsbnN5QUNpNURvbEZPZ2lTS1JuY05JdlUyQ2dDdkpYQTFSVE5vQWtVSEV5TWtsTUxLS0dpdWEramc1akU0K2FxWnBFa2F5UytiRDhNVGdSSGJXTHQ0UWc3S0VBWmdWSkNqNkhqRWhCTHRidjhNZkJGbWNxTjRkeUltQVE4YnlZUjFNVWtzR25NSGRKK0J3bGdnTFMvNVNSTUpKdVZNY2hyc3A1T1FVdmhYRERZamgyTkVsbThTRmFDdHhDTGtrRTk2QUVZSGp4M1puNlltQVhCYmdrUkw5TWNlQXJJNlVTeGtuMkdBekgzOElRaFE2TWgwVGd1SUc1L1NORGcwRTI0Ymd3RWF6NUxKc1BzdE9zaVJNdG9EMXc4OWlkM0NXNVNzeVF6cXlBSnIxbFFNZTBzRkM3VHlPSWNkdkZBNWdsRGNwbGd3T2tzdEVBUnlEUW1TamI4VVRBQ0RRb3VNNExSd3A0YkJndG5oRkN5NEFjRm0vT3g0QXR3MVNKTVo5OEZjNE0yTnBCN3BxQWwrQ1V6eWMwTmxDeDg1N2dMc1FESzJLMEN4dVhNQmY1Z25nVUtacEdoak5qb1JRRXJ4Mm1tV0NnR2RtY1lxZEJ3S0poM2hJS2JsU2daOXN5UUlCWXdZUmo3STlSaG81bUxVdkVIYzJaUklHVGhEby9ETk9NYUZNZEFQalM4L1RUd2tiaGFvVEhZcFZqd3dzckU5dTZEazhBYXcyRlRzU0d3N2VpRDBCbnN4WkxOM0NUaGxEdzNVZHFUK3NEeDJmVTVrOHRNQWs1a3d4VFRocjNuK0RWY2poOURrUGtQYlBwd2t0MDc4N01oV01PalFUWmdrcmthbUV6TTljUms0WUFjYnJKQWhNT0Q0YndTVEJmMkZ4Y2VZNm9nWW1rbjRFQnluekNIT3hZTUFYWUpGZ2pIUWtYRk1uY0g0QWw3TVJwTGJBSnpIK0xRQUx5WWJVSEJSZDl4Zm9naTR0aEFqWU9OWVYrRCtoVEZpbllaendTN1RoenpkeURZSFVMbnN5T1Jtb0p6aHpJYXlDdEtOcVFnT1M4MGpoa09obTB6OUJKL01lc0FnWWNDeWJuTGNRaGoyTHNRREJoV01BMFp4MmhSckJZQTAwanlvSGtZdGx6aUhIOWc4aUt0QldBT2tzV2FMTWNGSkIwRmtBemtpZGlMT2ZZc1pjVE9ZRThlMFRmVHdlMFVQMVp3Y3hwbHU0NklZejRaUkRoRU1HZmo0TzZ4WVk0Q3JXRWpHRU1mS3BURnZDandJRGhTSTlkR09PQ0JhQ0ZjSFRaUTR0Q2I3WFZ6QVJZS1JNQnhUTi9LNDBLNFdBQUZnalZJRHNSQnlUb0RHQklUN0dvTWNvQW5oTDVrNkRFSzdtam0wMENpcmhCdUZNVXhkSWhKOWpIRFlDSFpsMnk2UUNad2FSbjh3Ym8vQkxxZGZjZEdSRndJSEdIV3NCRGNOb3dORzdXd3JxaUtEZTY0VUFTcmtHeFljN2xDNExSY2Q3QjRBUUx6RzVLN1BvSUdwZzlRY2tPQnkyNURzdG93cnlFNWJ3YVdMWUVOMkRnRUNISE1kc1NGYzI4NWJBQUZ4a3M0czllUU9DZWNwZi9pd3BtdUI4U0JwNGtBSG9LQkNaQ2M1b2pqTENva2EyMTd4SXVDSFJYTjNEUVU3QVBXc1J5T0hRZVBGNVhCdE9GanRCZ25SVEtNQTVJUkRPS0FDT1BHb2xnTUE0bkxBR05BM3pPM055NmF2WWUzeXE0YXpXV3lVZURvYVBoZGNmQk5JYmdlZ0Y4YXloMkRSakhaVGhqQkg2enZFZTR3aHdZakVUM0RiQVRHTTh3c0pEc2ZYRElJTmpJWjF2bVBGa1BCbWdZWEVIOXo5aHVTdzU5UXdtdUUxWVRqemFoejdaOXhneGV1Ri9jM3F3c2hCSGNTMTFPd0pxeHhNUXdXZ0dTbmg3S1FFVGxUVGpMM210T2FiR2pEUDJFSGNJMkQ0d0hCaUYrUURQcEV3VDFmR0ZuRVlWeTdZQjRaMzRtRlpSeFREZEVnMDhzb0FrSmhSVkd5M296bk5BR0NBRGFUNDVuZFk0bGFWQWpZRnRmZ05Cb2txbzNuN2l5ZUpWd2dXUVhzMFROWUxCb0ZOMHpqdWVFQzJBWXRpZWVlQjlMOWpBQ0NrblYwUEtkQU9CZ1ZrajBDanEyTE5DQ2pDTFBaRDQrZDlRWGNYSzRPekFxR2FBRjc1eGl3S0xrMnQrT2dpT1NZVEdnUGNGQXlkeFVGVTZaeENlM2tXWlM0T2h3Vk51eHhNdXZ1Qk1hbWdXU1lQa3J1SkE2R2pvTXl4Z3UrSUNTak84WWxNQ2NJa2dXa0tKamhSTWw2TnlHV3k0K2haUDBIUHdZbWhmdWpYZkhqajBRRVgrQWVjWms0bEZ5Y0ZaZjBqMlpKNG5vNmlZMWltRFowWmhMejFTSFpWWk00dFpMRVprNFMxNWRKbkVzY2h6Z1ROYWNnSll0ZVJKVEZ1QlJ4S2NoVlFuS1BwUDBKTXdJbVZ3VGpoUkVFcklGMUhvcHdDSGpkOFF6MHgvTmw2UlVrNTlnSE9CMFNaSlpvRk1taGNqeHNYQkVTbGJMUnk0STl2Rmdnd1FpdDRGcWdZSCtqN2ZHc0grTlpyQnVQc0F1MU1ZUWVqaEg2Q2hMbmhRU3lKODVjSmU0VDlpZTdMVWhVQTMzSUZFVjhDR01WUURLUENBVTZLWjdoM1V4eXlvV05NTlplcGx5UUxPUStnZW1MQjVyRy9jMnVGb3BIQi9RQUw0YU13L1l4OEJVTVZOWWJuRkZIUk12Y1FaUU1xNGVFbmNYSlVOVHgwZWdONXN6Rlk5S3g2M0MwUHpaODRlZWphQ2NoY3NNWWd1VXFVWEFxamh2VUVOQUxETUxFQzc0eEpGTzlHT3FzRzRHUk1QNHFTdFNPWVFKcmpEdUh1OEJPaEpualdzYTVPQ2k0TmtDVnhBUGlaYVJaZENnWExVS3kwSnVWREg1RGdRRUZHUlhIUmpYK3dMVTU1aEFrZ3djNFhtaTdjOFVtRnhNWW1KaGc3S29jOVlTRng2eDJwTEM0R2pEZ0lGZzEwWWpyV01FeEtUQUx1Y1BZUGNOcFlWL0F3MmQ5QklJUUo5bXRzeWZNNkVIeG1GQk14LzR6U1pGaTlHT0NoY0x3OEJpZ3hEbDZFTnhqQWNUTkhuZ1NSaE8rU1dKcUVSTGZKM0c5a29SZVMyR2pOUVc5aW9ZbkJPUDZxQmtLRGZrdTFNMnVnWUpqQXlQZTRONjFFMVBhaHcxa05BUkhVVWZCY0lvRUpCQllOQUpQay9PcFVUSnFOb3A0Sm5BdUhoSEFjeGlhS0pRY3hncjhDak1wQVVSVjVqSW1BUDluYjJNNE5ETWhCaUVWSGxBQ0ltTldQUlEyQk5NY0NjanRvVTRrSi9FSlV4VHRqaGZ6NERuS09RU2pMS1BnQ0JML1ZJNHJNY2NuMFE4T1dUd3JFcUN1RTVFd0NJUmtkZ3lTOGVCUm9PdkF5V2N2bG50T0JKYzhGcktkaWdYYUpqdWIrZHFKWUJTenJzR3dTRVNENFBBd1RJZkZtVXlYb1dSVkIySWhBZ1FEQTFrWHNHZUlrcjBCOVNFQ0JTWTd1MVlvMStlSkRPcG16UXYxYjc4YVFsczJ5MW1BR0EwSnJ4MVVDQ1MvMmFFQS83Z1NWcGhWZ0x3ejdoTWxkMTZjSHhQb2U4ajJ6OW04U0dRRUlUa2pmdU52amlqSmtiK1JhV0c4VkZZeUJqcEhmVXFFZTQzcWsvNFJhSGNTS0FvUTBIZE0zekxCNEpBazFsN0d5V0ZqaGRPNkVDeVlSb25lZzRoaEFqVW1jUW1JSk9ZZk0yTUMzY3p5aWlqWW8rVTBOUVRyRkJTYzBrZ0tuSUZYZXpnTUhRN1ZFWUNTOGFzeHZybWNGempxdURnNlA0bkxYa0d5UDlua2hHUTFNVTBKd1pyR1hFa0lMZ0pQWXZvT2dsMmZaUk9TV0FBSmdUUFFsM2d4dHhVRis0WmRuS0VxRUF5N1FzSGRCZ3V6TUp0WUdJdUMrNXRWMXM1UlNJb0dkcHJFNGhwSWJzWWtzWHdsQks3QTdBMEhia0t3eTNMdUVTUnJETk0zU1FoVzhTVkxqTEY3NGhRWkpPdEJ6b0NuTUpXV3d2b3JoZVZkaytRcDBRbnN4YjdpSEtsWklIYjRRU0w5eWtGcnMyQi85TUNPWlJDMFA5YlIrRmgxSUxhK3h3MGtaSXo4WVl5eEdaUGl6dVZtdFA2MWxrY2JyeTcvZXM5ZS81d3pFVGZSZnNJL0gyQmxGUE4yLy9YMVAzOE9aVnhldUFJelFtTXM3T3p0T1NxUXZmMHdWb3hrT2NyMm8vUVl1d2lOMEd2UEVPa0JZNGpUZ3g3NWI3UDFtTUxTSS9xQ3RtdXd0VWZXN2VWL3ptK0hhdldpZy9SWS84YnBoVWJwdFlOcDlucGtpV043L090WXFFdldWbnhETkIzZnNYVkgvL21PbmYwL0p4UE54dmRzN2RGL3Z1ZW95YmlkZkh6TzFpK3hPNDB6dDJ3dnpMakN6TGE5c0dvdnpMbnJkUDNYV3FkdWVPbmdwWXNYdHBYVTAwdVY5NWZycGVyTk1aUWI5amROTmpVMU5UTTFON1V3dFRTMU1yVTJ0VEcxTmJVek16VXpNek0zc3pDek5MTXlzemF6TWJNMXN6TTNOVGN6TnplM01MYzB0ekszTnJjeHR6VzNzekMxTUxNd3Q3Q3dzTFN3c3JDMnNMR3d0YkN6TkxVMHN6UzN0TEMwdExTeXRMYTBzYlMxdExNeXRUS3pNcmV5c0xLMHNyS3l0ckt4c3JXeXN6YTFOck0ydDdhd3RyUzJzcmEydHJHMnRiYXpNYlV4c3pHM3NiQ3h0TEd5c2JheHNiRzFzYk0xdFRXek5iZTFzTFcwdGJLMXRyV3h0YlcxczBNVDdYQjVPMVJ0aDlQczhCR1dDdjdQdU5ISHF6dGU3RGtRVHlBU2ljVjhpVmdxa1hXVWQxWFFVdFJXNnFDc3BDTHNJRkJWN1NSVDUya0lOWGxhQW0xSkYxNVh2cTY2bnFDZndBaS9RVzhxTU9PYjgzYnhpL2g3aE1YU1gvemZvci84VmtHYnJDUTVaVm4yTnRPSms1WmxyZXo2U0ZsbHBQdnZQOFltZzZiNitENWJrTDA4Sjdmb3dQR0s2cG9MRngrL2VObEd3bzZxZmN3c2Jld2RCcmlOOEZtd0hGOGVPbDVSYy9GcTNZdVgrSUZCWmU1YmU0ZGh3OTFHVEFzSVhKQ3pjZE9GcTNWS0hmdmdJN2VKVTZaTzh3MEl6TTRwd2luVkY1NjhlTm1zMUhHWVcwQmcyb0t5eXBPbmJ0MXBic25JWExhajhPU3A2dk5YNis0L2NGMTM0a3JOMVRxMzBSNFR2YWY1TGxtKzRzQ1JvNmZPMUp5LzAxRmRZOHJVYjk5YjI5SWlaejUrb3F3YkZkMjFtKytjdWFYNzVsVlVxbXZvNkE1M0dlMHhhZkxVYVhQbkhhNitlZXRoYzh2WDJMZ1Y4UWxyRFl4TmR1MDdldXA4M1owbkd3Ym5yVE5kb1h2OTV0VzIwUjZUcDBpa0toMTZtelI5aklxMkdUQm95TENWT1dPREUyb3ZYS3UvZSs5MWF4dnArWFpQZnlKTWQ1WjJFWW83enQrcm5GWXMwcFhON3lMUWt2S0VKa0pMb1VUQWs0Z2xIZVdlS3FxUzhSS0JzS3RjSnBBS0pBSytRTUIrb2xhZ0lPWXBxNGxHUzdwSUprcjRZblVsVCtGUWdaR0FKK3dvVmxHMEYzYnI1YXNYS1F6cmxWWXJTdDh2MEJhbi94VjRTOVJsbXJMT2lwMFZ3OFJ5c2JiWVc5SlBORnplWDZnbzVBbk1GUG9MdGNVS2dyUzkrTXJFYkpRZ2JZZlVVYUFpY0pUWVN2dUowdHM2YWtwTk9ob0o5RlgwVmRLeWhPbDVXZ3BxaTFlTFRFUU9FcjZ5cGl6dFpQZDR4YlRiMm9xaXREWlIyaFBGVDVzRU5yTDVVenVubFV2VExvbmttZzRDdWRoV09seXFLSTVYMEJGTUZuckwwakkwdThyVlplN0N0S1hpNGgyS0drS3pyY0w1OXcwa2lpSlJXbUdIK1Y4bFBMMitZbnliTFV3N0tlZ2lVRkVpTVkrSG0rT0xKQksrVkNyankwVUtmR1ZoQjE1SHZxcW9VOGZPUERXK0JsOUxxYXVvbTdRbkwwd1l6dDhucU9UWDhldjVOeFZ2eVc3ejcvRHY4NTZLR3ZpdmhXLzRUWHJOd2g5OERGU2VZbStIZ2FNOVZoUVViRTVkdG1ydHRyTGpDdytJSlRMckFRTW5mTDVXTCt5c2FXMHpZZUs4UGFYN1RsZzlWVjIwWkhuQmYwY2lHNGlqUFFJQ3B4NDUycVdyUkNwWDZLeGhiV2UvdStqdVBabk55cHpkRXJuRHdLRFFGYm5SdnFlYVBrNmU4ZVZQMjRhTnhpYTlEY2R2MnJKMSs0NWR1MHVPVjU0VEt5aXFkYk1mTkd4TTRhN0xWN1pJdExTNzl4bzQ2UFg3ajIzVk5VSzlIcjBNREMxczdWMUh1SHVPSFQrQkRicnAvb0ZCNFhISmMrWXQzYkZuMy83VDEwcjNSVVd2bXRZOVZTUVFHZ21DQkR3VDQ3VDBiZ0l6bGE3Q25qSWRVVCtSczFDNWI5b2VjVTloVDZHaDFGSmg5TkQ1TmpKMXVWVFRZWmlkd0Y4cU0xVVg2UXU2aUhpRGJZVWpSU1pDdVVRbUdhelhXNmdvc3hiWWk3UWxRa1dKcDV1TmhaS0Z4RmdxbjIvZ05kcFEybGRkMjZCclp3M1phRnpBV1VsTEloZTdTbnZMRWhRR09mVVZPNGprNGpGaW5xaURRSlMyYklhT3ExU2VWaml0K3pBRnVWaXBrNzFZYnQxZnFKRjJ6REZncktLclRENThXQmRYNlZnbHQvbVM0Zkp1QWhjM0c0R3lWQzYyazhqblcydWxIZVdwbUN0bGJBeEtVRWc3dDlUZFgybUJ5WXI2ZEpldHg5THRKSDJGVThVRzh1RnlRMUduOVAxVEFrY0s3U1FkQjdNeGtQZER1dUIyWDltMjEvTXRqQVFkaGRMNVdVdUU0U0lsZ1V6U0lYZTZpeXplTWUyYlBFNGFvelk4YlVObnhZa3lyYlJGODEwRW1VTlUxQlo0NnFZMTlFdTdaU1RRRnZMbkQ5YnRhQy9pTFhpYTlyMlB1MUF1NUdkMGRIWWZrSGJXVWN3VGpoZDFzZVRQVis0dkRGQ2NJRThydGUybTFGOG93N2dYcDIzSXVJdWJWaExFSzNwTE1JdFVGSVcydUJsRGFmZlI4OGNwcWdsRUFvbXNtMEJCSkpiTHhWSm8xYlJMdmVRTHhFelhDb2d5c0pZK1J6U2RmRHB0SVZVTlBWMUZ2ZW02SC90djZkZlhWSzkvZE9IVC92emQwNDEwZms4M3BsWTk2NEsyNmRaL2VRM1dQTG0rVFUrbEJwdGlaVDg3RTgydGRxWmRHMXcrNitpN040YzFlSGhFNjN0dXF0enFTWFYrWXdMcnQ0NmgrL3BlOUxSaHJHbUQzL2pTWjFzblhIdlRNRUdQb2lZMjg5b21VZ3hKeUlqSDQvSHhuK2VxWUtyV2dSY0lKY0xITHlmMzRPbDBtYUpnTDVQeE5JVThHZWFjcUovQVVkcFhrNmRuZ3hPRVVpZ0xpWnpmaldmUFRoZEtjWWljcjgzajgrMHdPWVY4S0NlZURsK0FuNVRGZXhFTzRIWG1xMlBxNG1qVUxlVkpCSEsrRHM4QjV5cmlURU5VajFyUlVUeWhoSy9BMWNxYWhJdnkyZnV1ZkR1MDd6OVg2Y1p6NVFsNXFKd241WTNoOFNXSzBoazh2a3hCUElMZkJmWHhlRGJLUEZ4UnBNRHJLZU1GQ1hsaU5JcXZ4UmNLT2dpVjhLZVlwOEpEdnd1NjhYWHdmekNmSjVIeStBb3lIbFFtTDRIZm5aY29FUEpsUExIZ0FUb0JyWld3R3ZsU3NaelBNOVUxRTVyaXZZaG5LRlBFSGdnNFFHQ0xMM0dpd0Y3SzU2OFQ0SmN5SmV5Q0FuN05ZT0pWNGVmMnMzblk0bFljaWgrZjVHSHJDRTgrckN2YXJzVVg4Zkw0MnFwS1BBT3Bsb0t4d0JUM3h1ZjM1ZzFGei9QeFcyUlNuZ25QQXJYeStTTGNkMSsrbE5mRXVvMkhoZHNkT25RZzFQS010MFpFQXR5bDBGQWc1TzFFL2NSZnIyQW1UT1ZacS9UQlhjb0ZacWhSd2hzZzZDbmlTUWZpWnlBdFpSak5QRjhCNjBneGJ3dFBJRlhqZXBYSFUrY3BTd1NpS2ltN0VRM1dvM2hPN0NnZS94M2FKVWJaaFQ5ZXlqNEpZMzJCYndNRmVLQWlrdkg0WC9FOE1CcDRLM0UxSVU5UGJpam1ucEtZTHpCR1o1TUVuY0h6VWtkRFVNc3NNUzZBL3NaSVk1Zmk0VDVnTjRnM1NEaUcvVzNNMXlEY3MxQWtsZklsT3NMVjJNNWJhQzdsS2ZQVVJUd1YxTlNScTBXRUVjc2JJQ1JKcElTbXB6VVRwVEVIRUQ5QlQ2YlRlVHpUbVh5WlNKVVh3Tk5tZmFYUURmMk1uMHZrbHJ0L2VLVWZmTUpWaFNhL0NONTcrTGlBdXJ5MGV0Zldwa0xzVjNyL1cySngvUFprNzA0WFJ3bm9SSlNhZytGdUh2VTV6WnUrN2JXSUtoeTMrTmZZU2FqdHlMT3Ixbm9pOG00cE0xaTlVVXl6SHZWTjlQUVVrRmVhNExSem5ZQ1NVZ2FmejRvVFUxdGs5YWJJd1h6YXYwVjVSTzh1WXRxa3VlTFB6bHZ3YVJWUDVFLzdLS0VDOTdUQ05aa1M2dlpINkdwZXpxZTNnMzNTOXZ3bHNyc3gwZGoxSFo4bVZjYnovU1JFYmJVRC9CVEdvTDVmVTFmV0xwUlE0aG5mMVdka1F2TDRzN1dtV0V0Q0M4UmxLK2RWOGVoSjAvaUxsOE9KQnZaYjFsZlNCMTB5Nm9Qem5za2lzakt3cUJLc0ZaRmh5b2g5RHBGOEtzb0xqU3BFZDUwTjJtZXpESisvNTI0YzkvWC9LTHNZcDdwdCtTYWg2L3Z5NU5FWlBMSk5QUG5ONVk2RTFnWE1MWkJNRUpKbCthY3VxeElGNUZEdjFSaDRYVWFiQzArcW5mZFhJbUZpeUtYQWt5S2Fwei9nZk5OREFXMHduZDNGQ1pzVmZManhkYXEyUDUvbUIxNUpNWG1yUkQ4ZmR5YW5yd3ZPa0VKVEJSL09lNnhEMXRlYVZZcjByVmZWL0psUHBIVEVmYUNDd2xjcG1ibnZ5RnhsTHFLUkE3YmYrRGxiU2dOekJ0OFIyUkZ0aTd1dFlYZ2NNY0dyTDcwTkIvTEpVdnZzMCtzV1BKcS9vcy9QNng1Q0N0a3pheEdHQnFYY1dqVnBUWXFRdGdSdk5BMVNFbEhUeTVOS1JqZjVWTk84NUloR2k1aE04NXJjZCs4WDBZdnhNeTkwNkNhbURtR3kybndSK3B1M08zdjZMRVZTM24yc0lXQ3JoQUt2LzlueFJwZEhsL2Q0MkpSWFNzaGoxTWN2azAxRTFDSDc1N3JCWmlJNk1UNWhVazR4bjViY3ZhWTBhSldZMWd4eHIxZzRWRWhabmpQTUlpOEpxR1piYkhrSTduOWp2NWF3OUcwaTBxdllLWFd1NU5PUWNWc2V2VXVXVW5jbks5VURiWExxdi9CcmRsT0NBdWxHZGE2YnVscE94Mis3N0toSzU5R25qOVl2QS9CcmltTnBuRzU2TG8rbUxrOHVhUG5KcDhNSEJyN2VOWTVIbWVsOTU3YzhFRkJlM3FEakdyOHdIbXp6RCtWL0UxTjI1a0dseVJqZkZRZlh2aXEyRjlLcDdhTlhYNXNxcHhtanRNdmpKa2pvNXVuNlhzYzhaZFRKcWM4OTIwRXlxczNJTFR6cEo2UUQrdVo3TnZTWDBLanY4YzVKd1h6S1RDdHIzQjlBZEtHM3c5ZlJ6UUl5ZTNuOTFvZmJQTnAyc0p4WEd5a2cwMm1yYnU1NlNqUkg2ZkxWbzQ5NTFQK1IzdWlpc1VRL3Q5UWMrRjBrb2E3K3V3dVhCb3NwOE9EZHhUWnZSWlF5WlAzdDIxM2s5T3lGbHZmcnZSSzZVMko3bzJDa0FnV2tiUkxNMVJkVDVGd0w2WTdIWWhLbnoxQTlNMHRFY2NMbmdaZGN4SFNoUkhlbktCOC9pYjV2Mk1wVGI0UjArK2t3KytlZFJhVFN1bXlLNDFnSlhlZzhOM1Y4aG9paysvWDFOQndsOUxodjJ0SUYyQVhqMjh0em91RlBaZlFyT0svTHRkTWlXbVk3WlBOaWpPZTd3M3VWVHU0dEpOZWhDOTM0VXlUVXp5Q21RNE94aUs1TS9qMnVGRC9DZUhpUC9iWDZVd0thdW9tLzd2QlNIalV1bWY2M3VyK0FSQnRYVC9VMEVOTDFXWXFMTmNPRWRQL3lZczN1TzRUMFpHdy9yMENNKzhoNXRLMzdXU2w5U0hxdzhlZ0VCYnFpMnFyelJrZEljMlNTRTBWNk1vcXlmRC8zcnlXZlZwMmFaKzdBazVCUzJJY1BVUmkvK3o1WGJBczh6S2Z4V3Q1THJvN2xFeit4UGozWmdDaDV1M0djMWxhaWlMN0xqN2M0aUduRGs1V1hWMjhXayt1ZmpVbjFaa0xLMjNJLytuZ2V4dm5idWs2Q3kySmF2eU43UWFmdE1wTDEwQm95OWhLVTU5L0hqOWV1RWRCajFYazUzWFhFcEZDWE5YemhGUUhOUDYzZGZXeW1rS0xrbzBjT3Z5QW1nVkJ6d1hGZkNZbXk5VzlPZFJDUyt1RnJHMDBTK1hUdzBxUGZyMnQ0ZE9MWjNpcVpOL3A1b0ZFZVQxOUlvMG83cU43dUtLS29UY3ByUGlhS2FkS25KVSsxeTJXVXJybW11NXVqbUd6TU40NjYxU0tuQlE5RzVmYTZvVXlMSHVzNXV5NFVFSC8rRVoreTIzdzZIV2U0OXBDbm1GWjM2djIzcTFSSTZUMWJYODNUbHRDNDJ0cWQ1UmozeXlNSHY3dzBTRUpqdnRTWldqN0c1alZaZTRPUGpjTTg5ZzRjR1JFdnBINGJhaUlkVXlVVTlldnN3SllQUXFwOW0zcG44aHRGdXBlNnZHemJBd2sxZWp6dnR2T0NpRnc2eGdmVURoZlJTZ1BaK2lkYk1SOXVmN21RZFJHdWdjT1ZDL1BDQlRUdFFaNWxrQmFmZ3BWYlV1cGFvRi9tOXBOZmNoUlNXRkxia3lXZVJJdVgzV2hZOEloSDNhVTFnbUZwUWpvMGIzdi9hd1dLbEpHODV2Qlp0Q01qYVA1eTIzTG9rZkNqNDg0ZFVTUlI0SmlsZG1PVktLSGUydjQ2QXU1SWw1bzRpNzlDNm51dFNhZVBNbjZiTnRhNHp0aEVUQyt5TTljOW5TbWhKenJEa3E5L2hUNklXMjl4d0ZSQ0NhSHY5TWF0RlZPZCtzNVQyNlVDbXR3VzB1M0RUaEZsS0t1MTlsVlZJak4rUmRDRmZkQno2WTRaeWVkNHRLTHpueXE3WkJuOVdEWm55YVVSUXZLTzg1cFUvVlJFVSsvc2k1dGlKNkNZWXk5MjdJdEZPMVFLekR0M0Y5UGZWaXZlRVFCTUdTTTdUZXNjUW5TNUtsMjI4QVdQMXQvcDVQc2I3K2VPYzdZeHZBRDlIL1o0OHpsUEh2WHE2Q0piODBsQWRXWVhEelgxa1ZEbHFZVEQzZlBGcFBxc2NxSTBSNUhXVlNSc09WeW1UQ0c3SCtZN0x1U1JUR055SCtVa0FYWDZxMmN6K1M2UnVIaW1iaHZhNC9zMEp5bHlLZXphc1MwdUkyTWtwRkdzM1poZXlxY3I0blZEYm1Oem9yZDNWNmlOVHhQVCtKSnpiZWQ3U2Foc2ZWMjlHdlRQNHZ4Q3AzRjZjaG83OHNxY0lhNUNxajZ4OUUxT3ZZeDBMaVhsWGw0dG9kUHJyblg5M28vSTlIckU1ZUpOUWlvVC9iUUlsQXRwUjdueDNvOXh1RzZtNzR4eFY0UTAxblB2V1lOellwb21HM2wxV3FHSWpvUi9Xamo0SEZGbXNsYkltaUVTcXYxelpHSUduSTZtZ1VtMnZZT2xGT08zT2VXVWw0UjZXRHkvWDNoSVRBL3IzNjRkZmxoQzE3UXpHNzlIU2NseXhLVDBpczF3TUdmMVdqRmhscEJ5U25Sa2kwZnhxT2ZWQTVwVE92TXBjbFBROWx4N0hyMmNNL0YwVi9TSDEvcGxGZUtMQWxvcHVGVTlINXYydkUrVFdLcGFDV25mdGgrUDFwNUZmKzNxZk8rbm1vaHVqZS9lbG1NbW9ZOG5kcHlkaXAreHZicXM0NStKandSMGZxV2wzU2JvVTZkZXVoWEcwT3ViMm5vY1ZYdEROSFRjTS9WREMvbjA1bVM5YmVzSm9xUjRPcCs3bStqTjloUFdQVC9BMzhqNVJILzdBdnZaL25oKzNFbWlWUWZLYm5vMUNzakUxTkFvRWVlcFRubnVLTE9XMHRWR3I0UlJSeFRJZDRGQzYxTWRDYjBNdlRCZHZFbE05NHFHYitsbW9rQW52aHBmN2JkY1JFdWpzNzYveVJKVG1WL3VjNE1tK0R0MUNqdmxBd1NrRVQyZ2IzU0loTUptZTBjV3FvcG9UTUxPbUEzVGlkeUhPeTQ5RFQzV1lOZFVxenNXZW5QRFVsOVRQeEdkTE0xOW41MEhORzdiN05LU1VDbU5VK25UbzFGSFJ1RTUyVXVjTVA1dldnMnNMcFZMNmRicC9hOE5ML1BwUmNUU2Q5TXgzd3VUem1iMkVRcnAzWTNocVlIV1lwcGQvYWwwcXluUm51djJGUGVkUjRrcVovb0hpSWdLLy9ULzRlcEExR2RvVXdkSCtHZUJnOCtlYVZUZ1UySGMycDUzRndtbzcremNoN3RQS3RGSDVjQmJ5MCtJcUdId2xVSEtINlZVM094blVld0p2VG1OLzJ6RUMyQ0d3dDU1cVQvaFA3MC9IV3NaSXFMWlZ3OFlMMTdNbzduaVlkVUJlZEJ6SFg1c3l6RG5VMzJQdVQvM0pXRmVWbFJtcnlrbnVsM3lKbThLd0xlRW1OOEgxM3FJS0NnM3FJL3drNGkrT3JtVjdsc2hwVVdKNzg1bCtNaG9tTlBGQXBzNkdjVlhlT1czM29HOTBEbWdYck5QUkIrN3IzZy9BdVBMK0Y0djlZS0RBb3BiN0hsenlnOFIrYno1YlJleVhFTGhtZVUyMzQwRUpCN2RNaVFEL1p6Z2RHZEo4bG9CZWU3OExkSFM1OUZpc2xwaG9DSWhGOSswQXhuRHhIU3RmOGErTHYzbHBIN25acGZUNWpKYVBtVlgxWmYzUWxwY1VqZnN4bWtKamYvOE1FWVB2NjhlOEtKN2Z0dERDZld5ZURyOS9nZ1JiVWo4dVB6ZVZENWxiUlJFdkVTL0w3Vkl6aHFwaTNuUnIxTDlUMzh4N2JtWHB2cDFObzhtRitsTks2MFEwUHM5TTF3U2xQZzA3S2pEK2VncUNkV1BqTXM3WHlnazVUVUhsL1pFLzU0ZnVQUENPRE5sK3VBWS9hS2xYRTVEdng2ek90QXFwTkpWSmJuMXNHL2ZyNmdXR284V1VuR0cydm92TVdJNnRITFIvYVhMQk9UemM4eVQvQkZFNVd0di9mYS9KNklSTC9lR2JEVGkwL3BxNjhYTGk0UzA5VjMvZzZWdVJHWXBmeElVNWtqSkxlSDRDL2RvSHJtZEhIVDZ4VjRSNWF2MVBhTThWMDVCS21NMW10WklhRzdyUTMvSE9XSnEwcTR0YVlhL0dEZ3ozYjE1Z0lpYVRROVpUR25sMDR4c3hXbEJYVVUwLzhSN0wva1UrTk12L3F3UlB4VFJIR0ZDdGVFeEFiMWNhRERtc3dPZnhqMTBPNlYxUlV3THEvWUY2dnZCZnhmTTJLNnR3YU05dS9WMkd3ZklTV1dRV1dyRlp4azk3eE52M3dWNmNIdStodGRLT1B6WDlqV3ZDanhEWkJnL05lVmNJUE1IZmNZTTdvcm5yWEJvZ0FyMHp0YUpxMjQ4aDE0OHNtdjFkWXRpQVIzODRIMDg1WnlRb3MxSGFTcFZDY254NCtVTHVSMmdqN3VKNHZmZUZWREp0YUZmajhobHRPSyt5dDdQMTVUbytjdTRYdDAraW1oV3A2TlQ3RFVVS1NzblFERElpeWgxcVgvazEwVmk2blJ0YWU1YUNaOHNQSGFLRnR3UTBVVCtnUDFxYjRtVzZ2OXNOb3NTMFE5K3cySmZmeEdWN3d5OVYzMkpUN01zbDEzNGJTR2k1enM2VDVqd1IwVEwxNjFNZXRVQS9lSDJZc095NXpJYU8wRnk2TGVybUdLdkRMN2JraTJud0p1eWVIZDk5Tk9zeUhOS0UrSFhQY3Zwc2hsK1ZQR1FRWnBIcklXMGJyN0hucjJlSWhwM3J2TzVqcjNGRktNUktJNkgzUTg4dS9DVGM3MlE1dWMyTlMrTzU1Rmk0dFFIRVFVOEtuOGZON2dJOGNXUDYwTS8rMStWVXJhMXpwemQ4T3NhQzNpVkg0Wko2ZG8xd3c4YjhwUkoyMk4xcHFSRVNDODIxcXJLVHNGdVpuMitXQUo3Mi8vcXdiVm5wdkVwbGVmUk5qNVJRbjRyT2srOXNnY2I0R1dZVlZsaTNCMjRKalI2QlQrV0Z4eHJzUTMrVEdpZWtYQkRBWDd0WldXM1M4MzdCUFRKc3ZxTHdsQXhPY2Q2dnFnSzRGTk03bmF0emU2WVg1WHJ2eStBbjdMK2hQbjNuNWZsTkcyd252Mjc4MmluNmIwOWgvL0MvOGh5ZURWeGw1QW05TXpMWGIyY1Q5ZmRvOSs4N3NDakYxOEZ0d3RnSDM4czVRblZkVVNrMlgzRXd5Ym9qV3NMVmkwcjZpS2lWV3NWNW82ZlNyUmYrZXlTL1JVWXB3VUt2NTJlaUNtNllkR0hSUjJVeUhUWDVxa1ArREthcnJtZ3VYVUpuNkxuWHRBMXU4b2ozUWVIQnczaWkybmRuemNKZVlja05NenpWRWxNaVlEV3RTYWZHZGNncGxNYmJyZGErL1BvL2M4K3g0S2FoYlJxU2tSQlc2T1FqcGVOckZ5U3hhT0xhL29Hbk5vbnBtTzdPLzJNOFZTaWluNTdDL3dDSmVRZC82V1hWN0VDdVV3cDd2d2hBc0Y1K1FkSFdYOFpuYm4rZFliaVk2TERIbkYxdkxWQyt0YnNuMTUxR1A1NzVPR3ZBMmNJU2JDbVMrYklCOWlQVHF0Y3Vtb2UvRHpkR1ZON2RCWlM0bVR0TDc2NjhKZVA3WWtMUmh4dEZaU2ZzdHRlUUFVUmFuOFdJLzRMYWQ0eHlzbGZRRytYSHJrWEJyOWphS2w2cDVrM2hEUXB1NnZpRlZVNWZab3FQYUh6VlVJTlg1OEgvK3JQbzdDYnoxc1UwM2kwdTluWHoyYW9pUFNYRjN5cXNVRGNlVjV6WG9kYlFwcW12Zk9HeHdqbzZ3cFg0WlV2UXRKUkc1cDVZNmFZT212bEpDYzk0TkVSN1poSG9TNHlDanB5cU1VdUErUGsrZEtSK3NWQ2F0Mi81YVBjVjA3MUdsdDI5eStWVVBUWjhObDJYZ0k2bWRwOXl5eU01MlcrYjg5a3ZZS2YwVzJXL2NCV01mV051ajdybnJhQVpoelRrMzFBY3V6dmtiRU96eGZ4eUwvenJKVjlKb2tvZDlkVDEwOU9ZdW9lWkYrdCs0RkhSa2F5cm9WRHhEU3Z2dU5yR3kwRjBuZTY4bUhrUTBWNlBHQ1o0dVlKY3RvNmEyZkFiUUg4N0U5TFJpMXY1RkZlNngvMTBnNndRd3BYWXp0cThDbmQrdFNIbkRFaU9yM3NrM1cvQXlLeVVTdGF5Znkrb2Q0bi83ejZLU2FWdDYvZW10anpTYXpMVzVNMVUwaTZHNmFGaUVNRjFDMzVyb2ZqU1NFdFdmb25iT1lRT1NVNm5ucnhKVUpHMDh5L3IvcUt1SDVLbXJEdTRYZ0J1UmFFbHQ5VlF2dXpWN3l6SHk0aGk5TTVVWm5UWVMrZUxxZCtkVVFqWGFTOU8rSzZEeEljTDQxYUo2S2tuM1VYVzk4S0tmWGUzRW5pSUI1Tk9UYzUvMjZaaEY1TTdwNDZhWUdJcXVZV0JxbWNFWkY4eVEvejJQVWl5aXpwWkx5d1ZrNm5HdHQyRGV1TC9sczM4bmp2YVZJcW5HalM0cjlkUUxFMWN6S1RnZ1EwN0k3bm95aWVtTVlKRlhkOFNKSlF4em5sSzNLZzkwWXRuS3d6cDFCTVQ4OTNHRklOL09YSThiV0RpcmVJS01GbDhYNHIrRDg3QTBZTitmeERRdnNXdXBaSlhQbms3MUhwdS9pdUFoM3NNWDdnR2pVZURiaXVXWFFIOWxEWmJNdWw4YTlocjBhbjlMVHVJNmI3ZnZVNk9oK0lxcUxMVlQ0dkp3cFdhSnM3Zm9hQXJNenpSYnN1SW9kbXFwM29CYnpCdDlPVng5Y0IyWVhacmc4S3pJRmRFYy9xTVZPVFJ3ZGptdnBHd04rcE9uWlovL05IQmRyWThYdmZIZkNiL2o0TE1aNmNKYUpGMzB4TW0rNEp5RzNIVkJXZnJXTDZkWFNUTjM4NzRwS0h6ajlFR0VmNU40NWJpZUhmeit2elI2bk5sazh1eDUzU25sUkk2TmJ1VTdLV0JoR2Q2VmhnNjR3NHQzaFZqTDgrOUZxWEsvbDVjK0RIWExFYUhLazNWVVM5RWgrdkxQa2xJV2Uvcm5ZTDRWOE8zeXcxRHU0RDNLTDB3K1ZGcXNvVTA5VGRMdndLeHNzQTUzTHYrZkNIakRlL3Z3Y2NLYkpPM3B3S2YxWThYWDYxLzFURVVmRlhsdjFKNXRQNWR4YTNWOFBPU2g1Ly96SzhUa1J1emd2MmVWb2l2dkRRL05VSC91N2k0aHd2dnhEWXAzZnV0OGJZd3I5NUdWRnl5bHRFdXhZZjJ2ZGlpWUN5aWxaTytEVUVPSW10bGNsQUx4RmQvN2h6WEw2TVI1Wk5uejdMRVI5cmQ3NHo2Q1BpK0NYbnZSV2JHc1UwZXNuT29BZnc3eDdmdkpZYWhYallkNnpqM0VNUklscTdZTUJOVTMzb280SDFzNXd2UzJpLzkvaHZXWVlBS1JmZmErNXpSRTR0K2xjYjlzeVcwN3Z6bno2K001YlI5bk85djVzMFNxbkhNTi9hR09pcmpZWjU4dXBhRVhsOWMrbmw2U09oMGwvK08zdmVCOXpvbi9MT1dpNmdnS0x4aDNtRE1COFRiVi91UkgrNlptdjE5d091NGw2WU51ektPT2lqUTNWdUJYdUVOS05ZZlp5NmpaQVdsdng5OUJ2ajM3Nnk1ZXBhOUZlcitNamNlSUdZTG1jcFZoNStJS1daeDFveUc2T0Z0R0hrSzJ0RGJOaHAwSC8wcmx3ZHhQLzNCOS9LdVNLaDdidHl6SWZvOE9qUjJkaUh3OThLYU5lVFo0c3pBWCsyam4zMGJzc2cySVBYK1d0dXpPVFQrNUVtRWl2WUVmTXZjeTd1WDB4ME9xSzFkWnl5aEJUVHk3WjNUZUJUUXBQOTdCVzNoZlNyNHlLUHYyNks5T0dyUEdiOGVjUUplOGJOdGhpRytIakh6OGphT2duWkQzbmdGemxjU0NQZVhUdi9yWkpIRFIzOHh1Mi9KYUcxb3ZOMzF0cExxRlAwd09tKzhFOStQaStlSmxoRUZHYlpRNkZzQXVhMS9jZ0pVMHVCQjNyekJlNGxQSExhR0RNeWV3VndyWThlSzVkcXlFbndOQzV0bTVrQzVXUnJPUlh5NURRbE8yYmd3bGRFQjA2Tk85SjVQZEhSdGIyZEV1dDVwQkkvY0oya1NrQXRTK2ZyMU1HUDYrZTk5WmxETitqYmR4bWFFOTFGdENkcVgzOHpqSXVvZ2gyVmZWZUo2S211dGFJY2RuclZ0eWZTbDc2S2xGNDJzL2tNeHNHSXdicWQxanlXVVVsVC9Lb2VXM2lrdHl4R1Jlc1YvS2VQYmczNlVVS3Ewek82U3ZBWGhSa1daeTgvNDVGSHFmMzR1NnZCcDFEcXNka1VjVXRTZWZCZTgxTEVCNzJkN3E1NHk2T2xpOThjTmdBK2NEZFY5ZmorbmRDUEh0YnJIcnVMNmJWSHhKSDBZOG8wVFhyc2FaVW1ueUt1UFJ2NGZwd3luUzEyekZrcmtCSi9TT2ZMd1hreThnelFsYnk0RFh2MFl1RGJLc1FoOTU5L3VUSndKd0RwNjNOVHptb2kvanowTWszN0hKOUdWbTlhL2xSRlRFZTN5S3BheXNSVVdYR3Bvd00yU1A2d2E5TENpVjk0MUxVMktiVnlGWENTckNzaHU0TVZ5TUQ2WG9tV0MzREh6cFByUjhDUDYvRjc2cmNCSXdWMG8ycUQ5K0YzeWpUZVpkRFJZY0JWYkh6ODRpUUhlSFF6ZHM1YkpLTG8yYWFsRDM4ampoeDk4VnJGVmZqM0o3eW5tOTZ2Ump0Y1QxMyt1QmR4NTlIMUVaTngvZUFRdm9YbWNPQXdSWWtkUzY1S3FQdXJVVFZTSFFVYW90ZzNkK1krRlhxM3Q2dSs2Mm40aThwVE5rYkJMN3oyd3NOR3ZWeENHUzRUUWg2Z2Y1NEVUVXEvWWc4K3hVVjM5eFVWaUlPYkw3dzh0WnRQZHpxZnV4Tm5MS0RMZ3pvS3ozU1JrSmM4ZkxSV0M0Kyt0TVNNV1RtWFIrL3NyNjQ2ZjRDb2VlM1Y1MkZmeFZSNDZOdkNodTE4K3JqYllGK0FqaUxOV1M5cXZXOHBJL1B6SDQ1dGk1ZlNudHcvYXlzcjVSU1hxNVAxWVMzUnJ1Skw5ODhDcnlnWk5YZmpRK0NzWWZVYmE2NHNFOVBCZmExRnZkdkUxTWRmMTI4Z25zTjhvMXE3RHNEanE2K2V2ck8vbkVmWDdma3h1NE9FdE9CWjVKVEovU1JVWmJQZGNEajBRdmJyNlYrQ0krQW54SVk4ZnJsU0VYZ1Q3N29Wc25ldi94Yk9tdXlLZmFaZmgzeUlSN3huTUhmTnN6bDRYZ2J4ejVNSWNWVnAvbUhEMW9NWTMzbEs2bHUxeGJSY2RmeTgxS1ZDS254UlZyMy91SmlNVEI2WjZxY0w2RkR5dDJQZXdQR3ltd1NpcXpWSW1Xd2NudmhLUTBKOTZ2MGRoY0NiRGxwY1Urd0QvSWIzY0Z6TW9oc3lzczJ3T1h6Mmg1U1dHUHJuSDNpQy9NS1lBdGRlbVFLeW1ESXIxUFUrN042UjJLUlBOMkUvRE83VnozcU4rRy9xZzAvZFRQbjB2TnBoTzdMamxDNUlHSFFZK04zVUpGNU01Uy9nd2IzT2o5TzVMS1Q4QnZ2d3V3MEt5RUh1MGpERi9DMllwZmpDNDVxVVd1c2F1bGNoVFdPMDNhYTdCL3l0NWY1REU0Sk9DMm5lWE4wTFN4UWxOR2ZkdFkwZkN2bTBaZXlkRjdOaWVkUTU0ZXJmejhhd1p3UG5mTmRJSTdvVTZUcFFDZm9tMFNWMVZoN3lGcnU2dkw0NXpZdEhRUlBxRjJVQnQrNFRLdzI2NVNLbDRSYzAzNVZOZ045VWVDUmloeTMwa2VuTlBmMFFaMjUydTNsR3VWUklwdnB6RDA5ZUl5Uy83U2NMYXVFM3RKYWNDaXo3d3FjRmlmWjhmVTBCclJnV3IzRm9qb1IyelRtNWJlTWw1R1gySDFmSjUrRzZlN1ZVMjREalhCaDUzWGNpNG51eiszNldYZWJ4YUtGaGhHQkF1SXdzbkQ3bnozNklPTHZiTy81N2tZd3V4TzE5ZnN0QVJvN09nODZsQTVmeXVpcXczS2dscEFzSHVqNkw4QkRRZ3V5eW0vbXdDOXRPcUZlRWRCSlFVVW1uRGNkZ3I4OGxHTVNvd2w2V25HNDB6QVllOE5yNVZOc0JWUW1sbHR6STcxN0xvNHI1SjZTNWg0aWlKVXJ5MzRodjVwMiszKzJHa1RJZDZsSGNZenBma2F3dlh6Z3d2YWVjUEkzdUI4aGZLSkJUcktIUndZZDhPbXF3Ym45dXVaaDh2cnkzbTc0ZE9QbGMyZTJxbFlnL2RJMVRteWJ5YUhQTXhVM0d3QUZieS9MYVhpY0xhTWl5MWVOYXk0V1VuSHFuUkdXeWhINlBuOW94Q2ZtRkllNlpML1h2U1NuWXc3cm10NUtFM3Jma2x4OXpsWktCNGRFRExkQmoxNDJXNURSOGtkSmx5akJYdzNpWk1mN0hsLzN3RTdyOTFxOTZmb1JIZTArcTUvZUdmL1ZFbzVpL0VmYjhnN25UZTFYRXdVbmxSeWYwN0FMY3VIN1JXSjJ6SWpLNTZEYXJDdjN5cUtEU2VHaVpnQjdlUFQ4L2I0bVVudkF6elY0cnlTaTRaT1ZKVGRpL0xnZlVPdDZmTHFVc2M5Tk9mLzBVeU5zNDYraFo0TlJKUjNOTmJNVVNlaGhnODJVU1gwTGZoQnZhYWhCZlB5anJxenUxR3ZIMGVyWEErWXJ3K3phODJmckRHUGpQMUdlcUhkOWduaXNjMmp0cEtKLzZwK1pPWGdBYysvSVlyZjUzeEVya3M2MVZwSHRDa1M3di9uakhEdmhjanpHVER1K1pJS081UGM4dlhRKzdzZjlHOUpNU05RbHRlMzc3blRic1lGRXRiMllYNUpOQ2k2MktGK0U1NXR6ZjhrYmZUMEJYQnZwVUcwcHduMStDK2w0QnpxT1VPY1hCQW9uTFkyRisyOXV5ZVhRcnFEbENpcmgvOXEwVGg5S21pMm12MmZDOEdsUEUzWisrdm1vdUUxTGFodTd6dHNHUGFPbThjcXN2ODZlMVJHODF4eURPS2RjeitqR2NhTmlZOHhjZFJ3amd4NXpWU3JBWDBadWF4V01yUUVSeitCcjdPc29KNzdlcWJvbzdSdlI4a01IUXJwUDRWTnl3dW5XaUlWSGNndmt0b3hjS3FWdjVOUVg3M1NMYXFwVzVzRWVTQXBVNGFGMy9QVTVLODBkdHRva3psRkhGdHp1bGdnZzVIZHpnbjJjTy9JWC9aS2EyRWdBeEhkMTZ4K2JGSXVwMnJ0ZDA0eU1TT2o2cTZuVEpMajVkbmROMWtza3NNVldWR1ZtSk1HOTd6WHJidk5JQWVPZUFuUkd1c0x2ZEN0YUVqbGtHdlhBNWRPTGtXdUR1OHdLUE40NEFUdjlyNDRNdDBIZDlGYXBmS3QrWFVuMWxULzc3aVlxa3BPbnpaQnppZU4xdFdmYWIyb2pHYWQ2Y2M4Nk9UenUwMXhTdldpQWdIWnVWbFoxQlFGdTYwbUJGSyt6dmdPakp1OEtRWjduY05QbU5ReWY0TVJzcnF4LzFCQTd6eDdJNkZqaE4zcHI0cHpSVWdSWXVYSmVtR0t0SWVROW41eGowNE5PbDhiL2Q1TW9pMHBvWHBhQzRCSEdaMFpUdGptWElGL1cwV2Rkcm9vU3NEZCtyN3A2Q09QVGNScTMwelJKU1BySXUrd25td3ptZk8zK1BEdVpSN3R3YmZGOXNnSzk4ZWJtNjZuVStmZE9jdVZkdFBPektFcDNRMElsQ0tobGFPT1hoQURIcEIwZjJzQUcrK1R0T2YwaGlnWXo2U3UzdkRITlVwaHBSZUl6S2V6NDlNSnBpS1hvdW9QeXdPSiswRThncjd0TDVtamtSZVlydnBSMTVaOFIwaG1mU0kxNkJSM2U5VjB4ZnJjNm5SWnRYYkQzL1hVRGxOcjNPanJIbGtack5GTVBhc1FMNnNyM1hwbCszUlhTeGNIdFo2MlJGV25ENE11L2taNkpEQjljZmlRVnVwZkE3MEVDd1hJRTJ6VjdzOUNzZWNYbEUxSXRNSndrOWNMM284cUlYOE85ZFJacnJ2NGpvMSs5ZnB4eFBJQTVQK0M1OERmdjBTMmZKNC92dyszdHAvWDQ0RFBxaHJ0SFJlWnl0aURxZjJhdWRzaDQ0MjhWUkU1V2hOMlVqZTZ3ZUZDVW1pVzc2MEJERTJZcys2T2Q1ZFpTUTI5MzFPN2ZaUyttQlkvNnY2Y2ZsNURqR2Nvc3Q0cFgzSitQc243d1JVZHE2UWV0eWdWZlVwSFdkdUJyeGFaZEovZnkvQUwrN0VIQkR2NnNiOVBNaFo3Y2RpSGVhUWpSOFlrSEFmUHArOGF6aTF6enlIWGx1dmF0SWdoL1FCUWIyRHo4UnQvRi92QWRzekgyV1BMMEQ5ZjduYzZTOENYQTJBZklucHlpOXdBQnpLeXN6dTVpUS85bWNYdzgwYWoyMkVGK1BiUktobHhDamh5MzhjWlFlbHYwSGd0RUtlaXJiSUJXck9nNmgzc0dzSG13bW5oS254N1plMEpzUnFBZmVzeDViY1BnUEQ5WmVUdzhyZS85RGlnVko5UC8zWDM4OVkvcURlam0rcVY4SGptOXFpUExmNzExUjh2LzFmZ1JLUmw2WXdEanFiTU1nTU5UMTJKNSszQjhnYnV0aGR3UTBpUzE1REEwTW9BVTRudlhIZjF2TS9XQUJ4N2R0YnlXK2MxL05kdlBIK01HeDdEY0RUcUJrWE5taGJBdmtlRDBROC9YYWY0NUFEM3pwRUQyMk41UVJDTDk2b1BYVEd4ekxPS0wvSE1zMkYyMy90UVM5WVd6blJ6Qjd1VFhuMUhsR0I0NC82eG1MN2IzWllzS2g3ZjNhVGtybTZNVmMxLzdyUGR1NHd0Y1A1L1QvRnk4VlAzTkI3UTMzOVRQK3Y3alAzQW1nNVhQZnp1RGVnZS9QdmZQbitpdUZxM2NJNjRELzZ6cnRoNDNsN25JNDI0VWludnZLazdYZCtiLzNoQzdtUG03ZnRwVGJvTUd3ajE1b0hHNGIzN1BkbXdJY3VPNXlidC93a3p2NG56VVV2bXpEWHlLVGY3VVpxUWp3bE52M1VPUysvbGU5WnZpT2NiN1pjZVo0UmNmNWNsUnNpMytkYjRuWCtQYmE5YmhMZ2JtYzVkK0IrejBIajdILy9ZaDI0RFAyK3c5c0ZmZFl0cUlVVk9yMkZkMy9vV0czYi82R3BRdDYyQWdGSzNMWlBiSEgrYysyVWlCZkI4VEZCNERmYjYrSE5TVFlaNERORXl3VitxY2F4cUgvei9kUjBmLzZVSzk5d2FBZU5pekNXa3c4R2d6UVNJeWRLS3hRanJMWHc0NjZXTDVsaklxOHVGTW1ZQVV2RzV0eGVtelpDdHR6RUdQbzN5ZXdQVTZNMjgvNlA0N3ljdlp5R3Uxc2ovYXkxWExjMnRuMmVZQVZLQ0RxLzg4Qi83VCtuLzFWTUgreFlpck9YbStvNTNqVWgzVlNlbXh6b29nVXIvZ0lsOENvOWthaG1WZys4YytaNkw3MlQ0ZUMvTTROcFAvajYvODhEWFNHdlgxbzlEKzhlVHk0cUdoN3ZRQkdlMGVqMmhkNTQ2ZEcycmRWU0F6VUExVTlBY3RhMlRJbTdvSnNUUmcwRWx1YTlwOG44ZDg3YWI5N2pvUERBeGVKTjMzc09DK1BJY01Tell4TmpjMUhCV0xQdnlnOTlnWVZHY1VGeHZ6enN4NWs5YTl4WS8xL3ZiZjU1N05EZ1IzSUZpVmNIVUtZUmtpSmtTTWJOMUhCdUc4MG0vMmN5bi8xcUJIcktyMzJ2VGJScGUwcmw3bmZWSUVTK3VlSFVlTDZzemZjUWxDbWpaalc4Um8rMU5iVXdwek4zZjh0UHMrZG1ZNnIvcnhXcEtGbFIxcWQ2dmlVcUQxSDNuV1NoSnJOUjQwMVFweDFmZEV2LzlNclJiVDcxcUVoMDNmeWFHeDlnZHJsSlR3U2xqcnVlWXo4L2QzREhUMmE5L0FwTno5b3NqZndkdDlaRzNjZVJCdzdUL3JSK3lEeUwvdEVEODd0L2lvazBaQnJrdDNIUk9UNXR0T1VmZUJ2L0cveGlEYkwvaXcvQnI5U1diUnJ4NmtWWXVxU3QybU5XMThoL1MwWXJ2MFMrTUVrSGZNT2pjaW5uOUlNRWNsRktNM0g2MTRHdnRycjE0WExUdlA1bFBGcTVoZS9VWHlhN0h6K2kwVUtuMlJ0aWVjYWZ5T3VHR204TG53ZjBjdms0Mk5VUzhCL21OMzBvUlIrODFpcmI1ZXUvWlQ4ci9HWHpHYXFKYjFyd3M4WFNWclV0TUJybTVBZmNUOC9TRVlSbGcvTVQwOER6dG8vckdJaThpZzdzdWFrSGdIcDFxTFBhK2RmQytCblJ2dThIQTJjZDJXYzhRS2ZJVUxTZUtGOUxnRDV4SmtqMy9LRHpZVjAySFM2alNVTVpsclZUMVhSUjZJRnZjWjhLZ0lQNUhaelVjNXkrRzMvVzd5cDJRTWZDWU84VmNocW1VaDV6QjlsVXJ4Y2xxMFlqTHk5eGRYMWQvUGd0M2NSSjA3TGtkSTl5OXpQSDRCampuUFVMYmFHZjNYLzY2U21GZUJMMnR6ZTBtbHRBL3d0dlU0aitFVUMwczdaZHVIZVZ4NzkrUE5yZFFyOHV1cnNaeGQzMzRVL3FpZ3JPd0IvL3R6N3M5VVNFRmk3NVp2NEt6OFMwcjJkM1EzcXI4cnAzaEFYdjhac0dkMDQvQ0M2S0IvOENOcHcwK1lSZUJSajlyaU5RMzZtMk1mbFduS0RnRlR6dHFxNklGOVo4a1ZsNFZuRXMyWURtbThuS29HMzhFS3NyK0dNUExQUmgzMWo0SkpNOXZpdzhZK2xpQ3k5NnV3bTN4VlJ3QnZWbWFHS0dDZm5KMlZzd2ZoYzNlQXFkUVplMnUvcjdwbEhYUkR2M0FnMVB3NytSSnJuMStNL0hhVDAyUGZrbk43bkJKVHJmbk9mRmVMa2dRbnJCNnNqajlyalJUUXRFaUlPdUgzeW9oL3djR0hRcE11R2FOZXo4eXVNR2YreHp1L0VyZTNJRDcvNnBqUEZVeDM0NGlUTGhYZUNNTzlNSnRka0RsRWkzZmdmbDJkTUU1SHp5Z04reDhJVnlWWnZwc2hTVFViMktaYSt4ejFrWkNrOWs3OTVoNFJxdWk5TjdnU2UxaFM3VDFFajIwUjBTdkp0OG5MRUFWWHZkMVltSU85eTgzdG1xRHJ5SkJ0ZXk4a091T2VzbndFcDdzaDdESmp5czBIRG1rZlZnM1pmN2VQS281M3ZaNDQyVVpDUVk4Q2Y1WjBOd1l1WnNsNHdNRUZLUWNIRlpiNm5sT2kyMWJES0tsOHBuVjN6S0c5QnFvRGV0QjI2N2FZbUp0djZBMGJia1BjcDJHOHNya09jT09uN3k1bjVmL24wNlBFK3IxTGdVSGt2dElKMmJRSi9hdnoxY1dMZ1BqZWRwbDNYU2dlUHFpWWhQakVPL0pQQW5wMHZyUUUrc0xldzcxMitsRHhkS3pOYWhrQnZpdVZkUFlBRFNtUnhJdTlUNEgyVTFBLyt1NTVQMzE4S056d0diOEc3NitYalRjQVI1WDErSE5nS0hHbkZnYW9KYjM4RE41M2kxTkNTTEtFdlp6N0dUL29PM0p5dk5UaDBLWjlHUFF3dnN1a0hYbXBoY0owK25QajZhU1pKZXNGQzZuN2IrL05wY3pGNVBkdmVUMWJHcHpTRGpyTjd6VkNtVzdNM0QwamdTV20xMXlhNVFwT0VlbDkwZi9jYk9Nc20vNEgydWdzazVPdGNaZm9XZWRuMFRxOTMwUzhCV1Q0WXNOYW9CNCt5SlFxdmN5Y0lTSGRXVXVlTExueTY5dWROK1BnSHdPR0V2NTc1OWtPY3B4TmRZakJiZ1Y2a2RwOHBBMS9QZmFPUmtrbXNrT3lmanRZYkRyNGV3Z1RIUnJSNzFQTS9hOC85QnErMmRFNzR5UVRrRTE1ZHpWVGJMcVEyVXp0K0k0eXA2dSsxMFVmZHdJOHJMU3dWZnVQVHV4NnJWajIwRVpOTHRuQmp5VjhCZlo4c3ZMa2Z2QnUrVG5PSDkzOFE1NC91ZVc0VDRzcVRMbWU2cE9hS3lVNjYxekxUVkVxREJ3a0NyTUc3SzI0TnlrbnFKQ1JublZhM1F1UUZsMXorV0dvRlhQNzRwMFd1UTl0NDVHeWszSDMrVDZJeGpwcTd0RmNLcWZtSGR0YTRvenhTbjI4OU5ndjkwVGpBOW5VQUZnYXVtRDFwLzIvZzVmVUdSeGVWZHhIU3hweWcyZDd1Q2xTbHN2NklKK3hPZlBmY1RlL3dITFFYQnN6OGdIeEJVVTNNMDVtN3BYUnkrTkI0NXpuQWJYY0g3RHlTenFmd0hnay8wc0NqODFRYzF1M2tiekU5K0tPYUZmc08rY0VsbFNQWEgrYlJkTEg3N3RTUkVpb3Z2ZEtTREQybzJISjd2eGk4RjUrUVR4VFhKQ0ROQkowRkxpbHltdnZtL3VLNC9ncjBwa3ZlalJMa2VWdVVUVEk4TmFXMCtIZi9zTmszSlhUMDlweUNGK1A1ZEx6Z2xyOStGdkNkU2RSWEYvajFoZEpMN2pxTVQ1RFNKMUVOY2ZIVDI4M0xPMS9qMCs5RnI3UDdJdDk2L1dmOE5GRVRuenBKemI3WkRoYURWMzFqVWgzbTBlU0VGeHZtbUVob3hCK1ZVSjJaS3FTbU5NVnFXN29TSFR5UythYnVvWlFhMzk0ODNwb3NwOTdObGluZmNvVjAwM0Q4L0d1UEphUWFwRDNHRC9QU1dlMnhwekY0cVE5dXZkdHEwaWFnSUx0Vldib2hmTEpTWDZVdkFsN2h0ZEIwUkV1OG1GYTZGaTNPUHdFNzNHaHliVlFISWUwTWt6MFFqNVpSai8ydmx1VHJ5K2ordG9VM2kzRWQzVFhUYzhzR3krbkNSOWZKVTlTbDFIZEl6NDdUVHZGcFF1bUU0TTdJYzV1K1diVGgzZ2dlL1UzYkgzZ1JlWWV2ditUNy9XdmhyNFF0MkJLL0EzR0J6cnFQTzZFM1hwMGE2VmdLLzZOL1J1ZDlsbE9GNEc5dm5ITWtCL3lmdzVxYlp4NlVrZldOakN5emNjQkg4bktPYWlEZk5YMmpkTUgrWVlqMEJNRS9EaTFCSG1qam9iU3V3RHQ2RGMrWk0vY1crdmxsb0g3c2FRRjVQTld5UGZaU1JOOTN6MzdQZnl5Z2o3bnY3STA2OEdtNHZlS3Q3c2hQamw2U3VXcTNNZnlPeitOUEZZQVBlbW50amdyZnplRGRUc3pYeVpvaG91THViNlFIa09mVnR1NVR1c0lIZlBQVW92cmFFaW5GQTJqVkRwUFN6Ym9wU3p0c0VLSi81eXpQMGhCVGdtQm1uR1V6ajlaTkgrSG5odnhTNGFtSEMwZE1CNjhsUUdQMnpYcU1iK013TXluczFqRFBDOE1lSE9TVG9tbjJmQS93RStLZmJYNnpSSWE4NXZ1M21jdDZLOUtWWjZtQjN1QVBSUythRkZwdm9rSW1DZ2Fpc2tZNVRZcFJXWFBNVklYbVhUYXkvd3ZjMHR4TjlYZlJhdUJIYWhmVGxpTTREVFYvNzFqZldVTEJGNi9WRDBTdzcxVTllcEVWZUZOOWpyVmtDei96cU1kR0RZYzdXQ2lpTUdmN3k5Ulg0TUZtbUk2TFI5NnZiOHByTlgzNHNVZE5qMVVjQXg1a1lLNjF6QWQrMW9TYk9pdEdxd01YRi9jNE1LZENSR2ZkeXd6WDFQUHBzNGxwZVJEeUttTksvdDZyaFYvWTIyYksxSVBBZitTMmtyUmQ4R2RQenJoWUU0ejhUdjh6UG4xN0lBKzBhSCtuMDkzR1MraUt3LzZPaXFINHpiNFZ0d29mRG9ZOUdKb3NuSmlGUFBXT09FUFB1enpLdi9sNHJrNkFoR1orZGIvMTRUMlA5cCtkNERYb05KOUdYNjN6a2pRUk5mNVduLzhJT09TN05wVk93ZUFCVEYyVFdaNE92dTViL3lMZjYzNDhtck5qYkdxQ3BvVDBUVlNXTldpSlNmait6SXNudjhGRHFOQ3BYWGRIUk9IM0hpd2J2aDc4QzYyaXNGY0RsRWg3bzdmMkQvQnBjcDMwVCt6K3JrQmFGcW83Um5VRGJucnUxYm1HVlhLcWE3My9aVGptMi9idmozK3RXQTA3Vy9uNTd4WGtMM3Q5YUYzUmlEeXp5TTVsZzM0djhPbFV4K1NPN0NTbUQrSkQvVmJEbjM3MjZQU3djNGhjdHQ4NTEvMHVlR2JtelM3blJFZEVaTmY4dXJtbVZVYXpYZnFIVmw0Rkg3ZElLMnhka3BTVWx5VnQzZk5XVE1YVjdoOU53Q05lTXZ1Y25uZWFpUHJuL1p6cEFqOXk4T25OVDA3QWo1dGZsa3VFUE0rN3BXOGZKbzdnMCtEenA1K1VkVWZldGlITlV1dU5oSTQ1RGQxeWI1Q0FLdldXQnZ2WGdoZXhkRXlaQkh3Tlh0M2FuVjJIS3BLd2M5cnMrMnBTT3RSaFJmUkdSeW1wRDE3VlBkUlNTaE5lMkpsOVJoNVRVL05KeElwdUFsSWYyWGxreEE4ZWJScDRwenhoSGZoWXU5cnVOZitHM2IxODVPSXNNZmlPbXdUUzhIbDgydk9FMGt6QUUrNVZQV05MTHZKVUdwTWtPVytQUTMvMlhMajdVcDZBWHFkMHF2MWRKU0sreWJSZWxkRFhuZ3ZYVC9pK1habWNaais5T2ErUGpMcm85T2NmQWkrNHpOdTdlWlVwanpScmpFMnNUaUNQOFhieHh1UUVvbU91YnpVNklzNTRGU1F4M3dSK3l5NFQrekVMa1VkVjZkS3czaDU1NjhpeTIzWEtzTDhyc2h1c1FoeEVOSE85L3BLdFpzQW5ZeE0yMlpzZzczRnViQ01CbjE5aUV0M3hDZkxVaTU4K1RUd0xmSE5EUUp2VzJyMHk0SGdldjRkRmkybGI2N0VtMjh1d3F3OWlZZ01rUEtwVmluL2JBcjdaRTRmeW11Q09BZ3JwTU5KcmlDMzBTcXZwcGh2SXgxemI0cVEvRlBGVXI3UGxvMXVSbjE3VzdPUS9WQlh4aG9HUjluTTMyTmtEaGZObWRRS09PRGNwdDNTK01uaysvRkY5cWp1ZlZtWnJiTy9yaGZ6Ymt0R0xIZ0QvdHVpeTRIZWFrWmp5ZnZWdWpob0lIcXZGMmdMSExlRER2cFQxT0ltOHJxMmJYK2hZQUM2TFJOdEtYc0x1ODMrR2I2N3R3cU1IdFZvQjhRaDRoM3A1cXJ6MkZkTGN6bXRxOWR6azVPTysydSs5Qkh6aDB4cFB2WHBMYUZianRrZEh1OHZBcjN2d1RRdnhRNWFDNHRwQzlLdGJseGZWRGZCcm5iWkhqaGtFL1Zmd2V2ZGZRUmlQN0pUdFo5UWJJcTZTYnVjNXcwK1d6UjkvN0dZVStDQ0x0M3hyZ1orbjN5TjZhclMva0c0bzNNNVZ3M3k5VloyWnV2bUlFcjN6bktCaE5FdEdtODZjaWh3SWYwbjVaSnh0dDRFUytpSHZjdXZiVHZCczl5b1ZUZ0FQeitEOTB0UUU2TkVUYWI1ZkJxQS9DOWR1emhxVUxLWXJCY203TFBsODhpcExubmtFZk1yN3l2M3ZiNGYrdkJIVDlmU3dsZUEvZE9pbGxucVFoN3pkMkI0aDRCRTgvYkkzWkRyNEhKZmpaLzNaSUFHL0pVQWhNQS96WmYzby9MM0Y0RjFkS1NzYnl3Y1A1Y2l2UlhlbjdPRFI3RE9SRWxmdzhuWjMzRU5waUdmalpkSUw3N2NLNmZRSi84Vlo0RCtaZWc0ZlViZGZRRWF6dnBhV1k5RjRTYS9HSkhFSmVJREQ3Z1E3SVUrUUhqWjk2U1hrN1krYkpaMzhoVjhmOWJUb1dEVVdmSXo1U3RMV1FPUlh0bmJoQmQyckZ0QzNtbThQQnNQUHI5MjhLUXZ1RFdXRnA0ekxSRjZ0RjYySk9Wa3VJRmxob2RHU1cySXlHNkVsSFZDSmNkT3cyVlRKVmt4S1RlWDlIZThJNmNqcDR5WHB5SXVkZEgvMHFEaEtRRnA3eldmMDNnSDhmSzd6ZzlnelVwcTc2NmlvK29lQU9neWE5M1BpYmpIOHVua1RUdjlSSkszUjZRV0swQ08vRnNRczdZOThVVWpSYnNmdnFVSUtOalJJeklGOXVkb2h6WVBoMTQvVjM4N1dnTC8xOS9EaFlSdnVnUmUzdnFkSGNBOFJkVExRTlBqMWcyaGRsbkJkM0FvUWl0VnVlaGlBajNzMVZkWmFQRUtCek8xN0NmNDRLTktub3ptdDV6ZnlTWDNFZ2hkK3U2UTByU3BXZGNaVVpjcC85dnFCQnVLY3I2dmowdU9HaWVpUjU3ZkNwa0R3WnM1bngzdnF3YTlhUER6T2FDWjRINnZNcnY0QVArYmxiSTN5bnNBenJneTJWUG9WQnorKzRLWWlGbFhTVmExaVdtY0NudXZmcUEyUE5zdHBrS0ZoMGVvYTVFMUh2bWk2QXIrMWFtcVp4Qnk4blN4djIxSGE0QWRjK2xFd2NDbjdiZUM5ejZSN3hxSERkNjBZbEF2LzBXVFNqb0k5c2VDbHVkeU9jQnJFb3l6M0MrdjNBQjl4YnNNV0R0OHcvbmhacnFOREpYUzd5Ylh4TC9MbEorSjNldWhMd2RjU1hCdGJvU2Fuczd2N3B4Um9ZTjRNcmcxckJOL2lpSDNGczFVOTVIUnhvZnZTaEYwS05MTDE5a0ExeEkrRDEvMG83ZEZYUXZtaDY3MU9nbStxM3FQVHg1ZmdVeHovVmFPOEZ2ZVI2Rm02Nmx0SHhPTVhWKzg1aGJ6Sm92TEUxU25ncDZTNERsZVZRWC9QZS94RDdTLzBtWUxYbmFhK284RGozSFgyZWlEYU1maXRyZGVVR0RtdGRmQXBpNGxReFBQZk1VK3pVb0hteGZwSDNzRDZrUm5UQzcvOStBVjc5bmkzMFpJS1ByMTZkcjc1SnU3bjk0L08zcC9OQmFSNGR1RmJOZGpsM1NVOTd5K094RHE2dmtIZHhldWd6eWRyVmI0RDMrYTN1TEhyWFU4aERZb3Y3YnIyTHVicjhUbFpWY2puK0I5cTJIWG9ob1ErbHp4N1BISUJlQWorYTN1WFhCSlNncGRlNGRZaldCY1JlUzJuOXh2WWM4ZWlpN0VEK1BSbFQwangwV1lSRGZNL2ZyUFhZenhQM1R0YmVxN2trWFlIMzQ2QnZqeVM1blVPWGdtKzViNmRsK3J2YXZGSW90ZDY5VGZXSTYxZWVmWnp0WThpbGFZYzF2TWFwa0JMeERyK1oyTHdXOVFibGYxUGg4c3A2MHFrMXBXZjRBY1loaHVFZ1ovdjgrUlpYT2tHMk5NRFdtVjNsWVNrOUZoajJHK3NjMGxJZldNMUxrOUVJVGFwWVF3bk1QZDNONW1jSWFUcFRrTjlUV0YvU3llTTVqM0N1cjR0aTRaS0gyRytwbDJlSHF5NUFQbDJpN0dCRTRZeVhxZTFmNGlKbEV5SGZocytycnNTS1dpNTduYjBWaUFOb1VGa2YvQVVWMWRvdUs1VTVkUFhjZVdQdFJCL3o3ay8vZWxONEJXSzNXNHJuNENlM0xWaHdiUU55Tk1QS2ZQV3JkZ3JKa1gvc1M0ZnNaNnd5S2h2bitId3QyNXZ5elpkRndjOHFHZU0zRjBaZWZrN3FkdjMzY2YxbHd4OEdMNVprVjdlZi8rd3JaVkhWYm5qVnArTnhUeThPVzJvWVRid0xNUDFXaDVpNkxHaFgwK3FZSjJCWS9hdGpFZDdjTnliZDdPOE1lNU9tbDY1UGV3ODdFVHlrL0ZKcy9tMGZkNHFpNUFrSG8zWGRGWWZNMWhFbGFJc3QwemdWNTcrcDFTODFKUXA5SDc4cWNaajRKbDIxSk5tdE9LWHNoLzM5dnNlSjZQOW9WZkdHcWpnZmhzVU5pOEduMVltR2JNNkxCcjhEWFdLZGYwa29aeTZobm9kbHQvY0huUE9HRHpZVE1VemUyd3ZJSWMwTStWREFPeDU1RFROTXdkTzRybXFURjg1RHZ4T2w3VnFnM3EzWUwyVHdxN3hkNVpKU2ZwcTZtTDdBcXhmbTl4bGNTWit6ZG5INDBaSUF2d20zNGR6MTU5WktxQ09PaytYenY3RG85ZHY0c2FQZ3Y5NzNlMXJoZU5GRVExMXFuNnZoK2QvSkxNazlpWG1oOE9CTWJzMHdMTzluSFlnNWdaNG1OcGY2bnVsMklDdklKMCtZY0pvOEdoYkw5MzdBMzc4OHFjT0hRNTVDK2xSWDZOQkl6ZUk2TjN5aWxwTGpEZlpDTytUanNqTFBuWlBUMXJYQ2h4SlVhbnE2WFhnYlRPRFF2SytDbWk5M1pHNWsvWVFhZFhrSGo3L0hIcmJXUlNSQTc2UVE4NXhlVDE0ZncvcTVoKytNZ3dZOHdyNzhVK2ZpNmlzVFVkNEVQZ1B0VWsrQzhCUC8rQjhUMm1TQVBNcE1IZk85MnhGYW5RNytId3o3cTlobnp4enlWc3BoY1lVanptZ3JraVpXV1VhdDVGUDk1czg1N1h4YS9EOVJtbTB4UmFCSjFZVDUrLy9EUGhTV2ZLS0xyZkJnN1krMC9qeER0RXRlY0NTcnNYZ3dlcCtLVTMzRlpIU0I0M1BFME5oNzN2SDc5dVd3Nk0zeXNNOWh2WlRwdDgzZnAydWdYK3E0cDY2S2lSRFRGTVdkZWp6QSt2QmhvbWVQbmh0SXllenpvN1ZJNkUvejk2cjhGRUd6ekp2YW1uKzcxcndQbzgyVEoySytYRDVzT2VMcDgrQTd4N2lCWDhBSG1CQTIrWTFJQzg2ZGtqVzRqL2dlWjVaS2xsL0hNOVZyZVBHMEY5WXQxYmw2ZURTMVpGUHJ0MmVkUXQrRGJ4bXE4djRYd1lDdXJmUDkrd29aU1Zhdk9JODZGaFM2blprck4xRytGZkhManNhZmhrUC9zaDByZC9CajRBcnR1N2JLbkVCLzZ0ZnZuRm5yQnRMMC96aHFubWVhS0Zqajd2M1JvSVhNNmwxK2NRM1lqcnNGQk01QmVzdzFPWmFmcjZOOVFBK1dpdlcvUUZlMXhDNGZhREdOK0JzdzBwLzNoK21UUFl6SHZqYklONyt1Vmp1K1hPWkFsM1FuWE9tN3IyRWRETFNKWVlYTWY3dUhKaGpBUjdYN3pXMkh5T3hqczlsN3A3N2YxZnhFRis5c1hHOHdLZGZHZFdHMmtNRmxISjMyWDAzMkkrdVoyWU4zbjBJOFhQenUvVy93YmV0NmZIaXlHSDRVYmNldFR6eDFBRi9OMkcwZWVJQThJYWMxb3h6QmM5Z1d2OHZSWCtCZDcwYkw1MVFnVGpJdGFUVFhGV3NHM2svZWFYd1lJMkl6bTljdkR3OFFVQkx6RWJrSkNMT3JEOGgybjdnaVpENjZNNFh0V0c5aS9FOVI4TVpIOFRVNFBWK3FKb1A4T0NUSGF3MDRZZEV6RElkeWdNZnN2anpza01yd1ArZHRlTE02SGZ3ODZiMWFmUHBhQzBqd1UxZDU5bTJNdXBzVkRMTk5raUM5VjdpWlI1WTd6YkRJZjFiTXZCZ2FkeU5KUXZCSXhhWGExeWR1VVVNL24zZW9ucndFWThucHRjMjdKTlFTRW50L0UvZEVHZjMzSEZDalB6MWg1WTlCbDAwQkZUdnNyVHM3bEVsT20xWjBMbnBMUFRYbncwenZtSWRRWkhiSDgrM2lPdDZPbHNVZGdadlpiZjdoTHlWNE4zMXN1cFJPWG9CK0pWTmY0Y09nNTkwdlV2Ym50N2dUVXJyNGx6LzZ2UEp5Vi9OM2tPUFR3RTdBZ2M3WWQ1bTFIMXdVQVFQVEs4d0ttWXV4a1hQWTlIZWU3TEJKOGx6ci9XQnYxOXdkckRwbXpsQ2VpMEpMSHU4UkViclhSNytlblVUK3ZiTmxua1pXVXAwUG4vbjFDQ3NMN2ludEZydGZDQ1AxblRkYXUrYmpQaDN3Zk03NjFKRnRLRGtjdlFqdGs1ejVaKzFtU0hnRS9rSmJvWmhISDZNVGRydERUOXJ4MG5zcTR0MTZoUEQrZy82anZtd3dITDJueWlzdjRtMGZtK1h2QTUrNnJ5Nk5icndTeXBmVkM1UEtGV2dyL2VQbG5nRGI2M1k0bXQ2d29OUGRWc1RMcS9EdWp1TEJIbjNoaXpnRW1jYU9zekNldDZBVS9WcGU4SGpPTmp2VUk0YmVQYXhROWRQbVk3NU9tbkQxSm5QemNTMElyYnVZMTBqL09pcnJvYnFyZkNYRHN6Mk1jckUvSDg1OWFTS0V2Q0QxT2ZEbjIzRitzMWJiYUltYlNXNmwyUXRkRDhrSisyMXF4czhzTTdwVW1PUlhTbHc3dTgvRFE3WGd2ZmZyVEU0elExMlZlTkN0UE9tWkNFdFB6cGFVcnhJU0VPZlowMXp1TUdqNFYzZWJYWWF5S01kcjN3bTZNYnlhVVBGcHlZdlJURjFqQ3lkZmJaYWdZUlJhM0pXaHluUXptNmRMaHp2S2FPcC9mUWVmOGU2dU1DTjJUMlRnS2UwTFB2clVMa0Vmb2JUOXJDQjROZTdscDY1dlIwOHViQkpDZ2FMOE56K1hGYXR1b0M4d1pRdFp3ZU9oRjh3UnMyeGVSdlcwYVVXK2czWEFBL2Y5dE9TYlpYUTY5RjU5aWZHQXo4OHVyY2xUeE54VmJrazlXaC84TksvaENZTmtJSjNLTGxxNUdMWVQ0bkd6STRiWXdNZTMxaHBmZCtCaUlPS3JVdHFIb0luYy92RXJjSFBDdUhIdFA3NDQzRldRdXFWcmwwdll6MUprZGFocUJ0OElYbHQ2WnoxRFh4T3UvcXpVM29obnhHbWFYYnpOZkJmOVpKZGQ0M0E1Nk81SDhybllMMkd2WmZKdGFiSjRBMnR2cGF6cGpQbVJjd1o0YWRZTVkwTm05OXBZVDhGVW40ZnZkbHpOWGhoZTgwdTNnWFArdGV4OHJoSTRNa0hmejVkZnduK21xdWRkYzJ2cHhqSFYxeGZuUHdPdTZ4eXY0TktnNUFhOVlxUFJTQVBkUzNpcmNjZnRIdUgxWG0xWEEwaDZWOEpOenhtb1V5cjh4OGNQM2hSbVg2ZWVETFhkclNFN3Frc3JlNDBGUEZ2enhrVGR1c3FVTjhQRCsrOEJsOTNlY2ZsY2IrUW4rblg1Q3RuOXZXbVZ2T21HT0FKNjYrWWpyREVlczB2M2EyTmgwVHdxZm13S0V3TXZreGhtbkNGOHpNaHJXbCs4UFNLTStLbjlYM055a1ppbjRXcFA3NzJWVVRlY2ZFbjk4M2dvNmxlM0hvNEN2cTAvdkxIYmM3THdNOXIzYnp2ZXIyVXFvSWZtMnVBOTIrbDNpZTBDdXR2UGE5L2N2MDhFSFp4NjlacFNFZlE0b2FaYjU2M0V0YnR6akRmaWpqYndXcWZlODkrV0JmMzlLeTdPRnhNTjA1Z3p4QzB6eXh6WnNvVnhJOGxSeFlsVjllQU4rUjlSL2RUc1JLbExCeXJlaE4yY294Wjc1a0thUW8wZmY0Qnl3OEJXSWZRYmFQUnZsZ0pUUm05ekhuaFRlZ1J6ZXhIazY3eWFabWpaL0JtNkJIK3F2Q1BUNEYzYjNobG91VitEK3M2UXJkMTkzSVIwY0h5aFp1U2tTOThHUHI3UkJYeU80TWtmbisyWkNNT3MxY01hVWxEM3U3bUgwZWY3WEw2L3VqOGxaY2k4T0wySnFjdEJ2L1pOdHhzNUI3d3hzSnErcjAwOU1GNnhrdGpCRHJLNE9uckhvZzNBWDlOOFBpT291b21BUjJZVU5ia0F4eTdmTGFCVmpiNGF6OS9IeTU2Q056MjJkYitVL2RYOE1oaXpmSUVOY1NKOTQrR3lmMHN3V2Y2V3AvME9sQk9PK3gwM0wrMlNHbVlnZGVhTHMxWUQvdDQwNE83V0FkOU9lOTQxcUp4WXF5citaWjlmcm1BdW9kdFAxbnFpUFVUdnFOZjFyekRlalBsQVN1eDJRa3BZUlczQ1hESnJhK21pa1F2MEsvbU82MUc4RVcwNmRQOWNTdS9JYzVlTmt1cEc5cDlxYURNSnhaNXlzeG8wVVpGNUZYdnR2MDYxUXErb3R2WFVZMFZJeFJKeit6NW5Rcll2ZlU5VEw4bXdENU83RGs2NHdCYlYxeVJYS1ZWaW5YTXQrNU5TeDBHT3lnYWtLeUU2d3EwajdiOUFROVZSME5OYUcwdG9zQmtpY3pDakUrVit5eUhPby9CT3RzSk5wbFYrL20wc0cvZm81Y1FyNjVWYmZWMG42WkVpbFVmT3oxQ3Z1YkR5N1NxbXRNeTJqWGo5L051eUQ5OWx1YmNYb0g5RDJxTERydzF3YnBXaGUzSFZteURYN3h1YzVlTFJ5TVJGMnJHdUUxQ1hCbSs2YkRjQS9QMnJIK0l2eG55TnZ1SHpDMThLZWVCeDZyYlhERUwxL2Q0ZFd4WEd2SkxiNlg2eG9nVDB4TEdxaWlseXNob3dZWFQvak93enNGdTJOeDByRmV5dnpQMGdSTDBTbzlES2ZhbjlCUnA0L1VucTlVNmdUZnFsZDNZdTFCQWZoTXluUVlqSDdvZ1kvTzFCUGhMUnRuTHBwZkJMcmowbTlJMUVIbjQzaDFpL0hzc0JCNWVvM1gyTnRaSFA1NjBzRzBBOG9sMXA0dmFycU9mSm82K29UOFI2OURFaXJNU1RUN0RYa1dkZjF0OEMrc2JHNFFOalYwVjZjR1pjU2ZWd0w4OFVYdWhuODVrckQrMjJmKzVGdXRqMWtVVVJVOUVYang2MGZQRllkQ0xkZE9QWGUyQjlRUWoxcHRyTGZMaFU1VENCSWZieDdCKzhHWnRaMFB3blQvc2tEODdpWHpNKzJUVmhSK3lSYlRtd3RranU2Y0k2RlNtMmJLZDRQMmZxT2h4WlR6OGtSOFpycWUxM21QZHRObmh0WVh3cjZkV0IzMWFaUVBlbzhPRm9zWElqejNvMVdPNzhrYWlhYlBQekN5ZERUL2JOZk94WFJ0d2pPcVBWVTBEUmZUWG1OKzQrUmZXY2M3djFQODhjTkFmdWlkMEVoQy8xcm00T2ZnanoveGRSZFhOQmZuNWlkZE9mNytDZGJrZnNwTzd2RWE4czFqUllVVU0xbGV1T3VoNDBnTDg5Q0hrbDVPOFRraXhQSjk1bXpZaG4xcmd3RnNGdi83aVJUdmY4ck5FM3FNMkZwbjZnT2VYMXpqMXRET1BQczZ6WEtvQS9mczkzcWVsNDMzb2lkYlRXbnV4VGpoeTMrc1BjY2pMUnYzMEdkM0FsOVBJd3dNcitXK2hYNjBXbHlVc0J0KzIwWDVNRm5EQ05yVXRtdGFZdnpKTG02RUJHSi83dWp0NHJzRStDVStldmUyaWgvdVlGZGZtTmdsNTlWOFNsOEM0MTN3NjA4TTk3OHNKUG5oZzEydVBIUlNTWVdWUjJac3cyS2VwNmgzU3hmRHpyczJ3Y0Q0Z3BQSjhyNjZOd0EzcVlrL1ZySE9YMC9xN1Zhc0R3UjkyK0hWbmV5ZXNmd3ZhdDl6Sk5rWkdzM1NqanB3L2luV2M5ejVtYnNVNnNoL2pPOHlzL0FWOHJ0VTZlVFB5Z29WR0NjTy9wSU1YNFc2dWR5T1ZSelhya2pzdXdYNGRDazViY2tmQi85aFZuYXh5RC9QYThIN2x1YTNvSC9QUUU2R3U4M0Y5bngwNVZVZXh6djJJMVY1MXJOOFBrelYyZTQ3MWNxUE01QWVMQ3BYSVJhZ2JmUTNySzkzc0ZYN0VZSitINUEyMUEwZUFCejdIYm43SkcreGJFUkRkOWNTa2Fna05HTDcyUms4MTVJKzFDNXpESnlGUCtXSEV5cm53MTVjN2RsdDR2UUg4MTMxYnBvNUFQdUJrdEZQZkx0alBZVUtFbVVKWVZ5VjYwT1ZPd2M0RUplcjJYbGViai9XZHkrZEZqZW05Um9GdUQ5MGxsd0NmeitqNDZGSkFPSStHdmpOUEhUa0krMk5ZcGU4czFvS2ZYL0x3MUJyZ2dQa2JmTFNOMEM2VElaa0tlaHRnbHgvTjNITUs2K2oySlB1K0JWMlhqTklMdHFWZ1BlVVR5ME5lblE0RGp6TG9laTBWNjgrMjFFNTN1R09KL04vUTFidnZQMVdneEcxbEk4ZjBsNUpHMzlOdWM1ZGpYZHViYU1zMXlFTU10MW9SWWJxRTZOdGlrL0ROZHhIWFBMMHd5aGI4aUdGSFdwYmRSNTVIRmhsV2RCdjVyVkVtVFI1dVZjai9oaS9MWHdleW5hdmFXajFzNmdqZTcwWnI5UW5nNFVmdlhWajhYcEVPMEoxTXFsR2d4ajlLRFFQMXBSU3A0M2JINXB1Yzl0VGQ3eE9xanJ6a043UHdkT0FYYzBhRUJvOEgvNlg3eXdQZnY0QzN1VzVDWmE4RzhFOU9wbjdUSHI1UlNHdnQrODlVdy80Z1NvcVRQZ1p2RU5PZnVwaVB0cU5FOUd4MjFMWDBGZ21wSk9ndmp4MkpmQkd2Uzk1S2ZML2R2K2pUWVBoekp3dFY5ellxeU9pY2s3bndNdlQxK3hCZWNjQnk4R2VpZDVlZjJNYW5QcUZHNFE2V3lEYzBadTBSQWw5dEhGcFZPd0xydHBNbXp2S29DQmZSaWg2elo1am1Jazk0cDcrcWRnbjRCTTg5bzNaaVBlcWR2bWExOVZpM3BQeW15NEVKMk05aHdQN1V1WjFuS05LVFV3UGp0V0NmRHZVTjhmNERQK1o4YmRiejRqd3BwZHRsS3o3SDgvMmJQbnplSWZoVFhSK2VMODhCbnByeDh1ZktYZlBBVTcxYlgxTUR2SGVIMGM2NWl5N3dhSW5mN294VTVLdDJLcG01N2JPQS9SQjJWWjhQM3NHYms1WWpHcEt3cnVuT3FCTW5yNHBwcy9tUUYyY0dLOURBb3ZvMmx4NENlbHJSdjljUzVQOWsrMWVNTkVVL3loMTIrZTFGdnJIcnlaT1duOFE0LzkybFhZSkR5SnM3Ylc2ZWp2eHQ4dCsxVGJ1d1hxZ21xczhvSzhRbDU5VWRDcjlpWDVmT2luVUhGYkJ2eU9TYWk1a0hnWmRZcVY5OHVnNStZZFA0bzRkKzdwSFNKK2ZTd3puaGZLbzlNQ3M3RGZ2cDdEY2RIeHk2Qyt2cjE0MDIvRjBobzg4Vy9XeVhpc0NmeUZIWExFcEEzTHcwL05nVjJNZnI4KzlmY0lsRFhtenl2WHNEOTRqSUwvRGUrVWJrMWZaZUZqZFBRbnpodHJkL1JRVncrdmZ1NjlQTnNkNXF6WnVYbmVkdVFkNTVSOUs1SzVNVUtPMEZ2M1h4WlFVS2UvN2w2QjZzMHh1N2Z2aUZyTUZTK2puaWJ1bDNPZkRvbjByckxxa0s2V0dmcHJ2WjJHL0xaMkxXdHlmQVFkMCtmcnZ1ZzYzRU90M0lxVG9PdnN6TEtkL1VlQmpIRjBaWjYvZnZDVDB6dlRCZ3lsRXhaWjdtOHh5eG45NkowbkF6YmVTQmxwMzVmRzlEaVp6ZWJyQ3dWWWNkY05qdEhlZ1FJeUxWMjZKUm0zOHBVRC94eGNkdSt5WDBKNmI4eVZ6Z2o0WUhrbTQzaFlxQXYrMS9hQ1BEL21CdmsvTUZ3RUh0ZSt0OHlRWmZPc1BaMldvV2NNbjFxZGVQL3NWNi9oZjZ0N3NsSXY1YjRzYzNkVFFIZnRTbjh2SUFtWmhHQ2haTVB3ay9LalZiL3AxWGh6eGZjTTA0N1VOU3VqKytZdjFJNEFndVI5WXBhajVIL0JUek5ETnpnNEJhL1ExZXoxWUh6Mm5JZy9lZHdTc3ZqL241VUI5NmMxYjZnaTA2YzVDbjJXKzQ5ZlVSMkVXZmhJNEo0TEVIaWxhZFhaQUp1K0VVZlQ4VmVkblVlNC9XTjRKdmM3QjA1TE9IcmxnZklIcS9adUpSUGwySXZGKzk0NVFDZGJNcENLemRJNk1OMFpVcFA4M2tkRTYzeWVyTVVPQWxuN1RXZDkwS0hQSzR6MWwzQytBYmRFamovaHFzNDFtMThHZ2o1bG5ONTc2WFI0Si90UERkOW83bmRNVjAydmpNaG5yWXhhZkM4cG9IaUZOeUYrMHZPcFVDL1R6azFyYTBEekpLbnRiM2ZDdDRCRWJwZlcrT3dUNUFiOHh1SDNsM1dFWWlGKzhESGg5bDlFWEo5UDRZRUExanUwN29keGg4ajVVdk8vQnpzZjQ2YzIxeVFTTFd6V3E0aHN3N0QwTGkrMVQxS2ErbWlhbklzMXpyUG5EaVBnR0JnUXVoajkwM1JIdmJGVXZvMUpZZHVVM0FYWnJ1N0pBUHE0US9yT0NRVlBoRkVldnRsUlc2OUJTVDJxcHVIdmxLaXZRbC9mbnJyV0RDMXBsb0xsMkpkVWpyamgvdDFBYzhxcXJNcXVRNjhEdUtpcWM5NG9NSE4raUs2c3pSMkZDdTJ2N24yMkRrTzh6a2t5N3VuUTQ4L0ZQTkxWL2tTNHZmbjFXYjF4WHJsTWNZN0h5UGZYL2Vocnlhbm1pSCtqL2xUdGdGZmZBeEtHSnVRWmtDcmI5Zk9ha1E2OGEwTy8yU2RRVWZKMTl4MExESFdPOGRraHduYVhvQy9PN21ydS92TzRycFc4Q0ppTG5nNjYybzFvOW8yZy85Nk5QOFZ3bnJjcWU1MUcyYUFEK29ZbDE4NzZsWTM3K2t5dWNlRm54U00rMzIrSVI1SEJlZVovcDFuNXk4RjV4Mm5Yd1g2Mm1HV0s5OXQxWkNCa2ZPZVRZcGlHbHdSa1NyS0EwNHVOa3U3ZDlqd2U4WFo3ei9KY0c2YUsrQnRkT3dMOWJmQmFLVkV6WUROL3FUbTN2VFdVU0xGM3BaYmo0T3ZOam9rTXEyQlh4cWpZNjUxejhRNCtqVm81TFV2MkpTLzJ6YXg4VVkraVN4N3cycmJ3cjBseDd2Zlg5SlNsWkZiNTA2T2dsbzlhWFBRM1M2WXYxNEt6Vy9ScDdXUXpvL0x3djc0bDN2K1hCckNPS1czWU9yNWNtbmdCdVB2WE4xTHVKUis3aXpiNjRYaWVqbDl3ZUMreUw0UDZWSDF5L3N6cU1MNGF2S2V2U0YvbjRWdHZNRXh1UGdwenFpMVNBMUQ4N2JKNmxZQmIzNzYrYjdJNjlsTk9UM2RMVlUyTDBqdnBjdGcvc2czL0dvMTk5NXFZcFVabnFqcWdmMGZXSDk5T2RTN0Q5bkhGdjcrU244WTVzam1rZnVMU1FxUHZubWZBcjRMS3FQcEpYNTRERzJ4WXk5T3dEcmNmZHFHYmFLa2YvNm9KWmJMSDRBKy9EV1N1NkZmZlNHbnc3WEh4eU52Tzg5bFkwVHR5blFzdmR6Qnh2ZytTdDRIQjV4SC82ZmF1U1JLczlGQ2pSaSs2WEtRcXcvMW82eEVFcXdYNWp5b3ArVGxtTWZtY3Ywd0svV1JrQk4xeEltWGtOOTJpKzdyeDRNSG1vdm82c253NEdqZEJXWTdFcEQzdi80NTExcEhRWUtTV2d4cDcvT0RLTFB6US8ycndVdjR1dHQ4M3dUUnhVNk1YZHMvZkk5WXZwaXEza2hGM0V3djhQRkpTK1JMOHZPOEU2L2pIMWRQcStaOHZrRzVrdVBvcUZuazhHYktPdlNjNVU1OGdyMkovS200M1pwWk5FUTZScms1elh1bm4vWk1SeDVBSTlMSjVjaEx2VHBLaDhwd3ZxZlMyY3lrZ2JBL3psdnVPbXkwQVdLODlPQmRTL0IreWlJakYvWE5RcjR3YjQxTVFvWWorTWQzd1NrWWQxZHc2eHRQaCszWVYrZlRjWlA5eUsrZmRNYzJPaU5SUmtXTXJVYkFjQUw3K3E4K2JUVGkwOUtiNEk4RFJDZjcvVEx6bEVwUkp5Zzh2bjdTR2ZzOStUNG9VZ0orSkhEZ2hNeFo2QTNKbHk3ZGRyemlqSWRTM2tkTnYwbzFpMDlDdTkrQXZ2Uy9OUzFHNnNEL2wyNVJweFNGdUtQdHVoZkFTL2VpMm5MOUIyVmc1RjNWc3orTFMrQy9qUlUzVnFwalR6bTVyMlcwMDdEamgwOE03N2xaUzh4clRXUGpXYnh4OVdQSXQ0NjdPOWkzVFJOM1c4VzRzS0hveHFHd2M4Y3N1Tmt2MkxncVFabXZUNE4vaVNqeGFQTkNoNVhJVCszNDgrT25jQXIvN3hZU091eFBueU1XMmVIa1ZoTThqWnNiZElTckFQN3U5a3VTbU01N01xcVE5T212b0QvWWFmemVhRVpqNHdybnN3N0NIOWRmNkR2cHFIdzYwZUZ6VzJkanY3ck5tUGo0by9BenhwdmlBWVpZMytpblAyUFZQUDlwVlEyNjhwS29hWXlwUTdQUzgvNUxLQzk4elZPaGlCK1d2UFVhNHpXTFBBWXp4bm5WeU9PTUFwTUtXZ0cvclhRNkZQM0Y5dkZ0Q3dpdzJFNTlzVXlMem52bTRKOVNXcDlDMno1NEoySUV4WlZ0bmhEYnlvNkthOFh3cThxYmIxMkIzRk5zL20xakZhc2krdFQvL0ZOdHJ1VWxQUmZpV2NEYndqdFBHK0ZEZkk4UzY2WFh2WEN2aVdUWm14WU10MUlUcXUzeFlpT3FXRjlXcThpYVFOd0w5bUZzYXJmUHNJL2lERlMvb2poY2U1WDN0SHQyQTl2YmYyVm1OUEE2MXpjeHg1WWdYeFozMThaODkwSSthWEhQYzU1Zy8rUmtsUXVHYlVTZklUQlAxMkRrR2RZT0hEUjFwMVlCMTB4VHZ2Y0N3bjA4ZTJSRGdxSW4yUDN2ZHNyaDc3T3p6bis2Q2JzeS9vSmgzTWE3MG9vNHJ5aml4bjJhN2h0OXNwc0xkWXJQenJ6ZTZnKzVzbVdOZHVtNUdOZk5iSHZ5Ri9EVTlET01aT0xxM3NpLzNaalU3TEZCT2kvQjdhZjdrTVBiSGJZZENiaWhwVDh1dCtKY2NhNEtTM1NqQm1RQ1I1TTdkbFJBN0Z1N1dXRFJHMDcxaTI5czdENit2d1luNnJGdTN2ZlFmNTZ1OXJWMnZHdy84cDk1QklQN0hmaVpITjM0WWpyeU9kY3Zkbm1taWlrVFFVWk9Xdms0SjFvelA5OEMzNkg4aG5WMEhQOXNlOWI2WVZ1Qm9ndnhuUmFFN0ZzZ0F6cmkxZk01UUgzTy9kemJNRjQyTXUzVVl1SDg4b1VhVkNmbnRORzlaTlNSVXJGWWkwZDVDOHFEdzQzd2J4eFNrMi91dnM3MW9mTTFGQ2ZoUDBiRXN1K1RoVWhQL0FwdTk3dzBuZ2VyVmJmbXE5VWhYeUxXWEZ2WmRqZEkyNnpScytROHVuR3l3MXBFWWovblVJSG5KTkQvK3owbm5EUEhmdGEvRFJNT0tnMFZZVXNjdnYvcmNUK1dHZnZDcXc5OWVXMCtJQ1M3cFYzWW9ydk9HZmtPOFF2VXoyZWhQaGhmZi9TK21pTmxGTkU4bThlR3NIWXorZGFnNExkVCt4Yk5LRGYzUHd4Mk45aXZuVG45U3JvdVFFV3k1MmR1aUJ2c2lSdTVKTURFc3I2K2tPaWlYM2pYaTZ6bjU4TDNtWHMrT3lxZGZlQjJ3NGZOLzZlanBTTXJIeDZybHNvcHA3YnlnNCsvUVIvb1d2L2JXSFZXTE5WMW1MM0h2dmZpRnZPZjVWZmdOMWRFZmpwS3A3L0xFM052cG5BYlJKL2J6ajhJQVk0Zm02ZGdpcmlwVVdEWi9wc3d6cm01dnR4NTc1Z0hiYlJmTGVXWGVCNzlGNGdEKzBsVWFGZktjMk45c2l2OTYzeGM4NTlCUDE3MTdOMHNsaEdQMStlSy9nQXZwRjd5SFR4ZGVRSFFsTHRZdnJsZ1cvLzg4WWtPK0NPaDBmWFZ5NWF4YWVKU25wUGVpSFBuRG0wMGYzbkhheTNmUjl6aG9Bdk45LzlMQkNCUjNTMUpXQzVGdUtTRHhlckgxbzZ5MGgzZHREbWxlZmxsSEJZZDFNRzFqa21WbHdFZHF0SWN3MU81QmxnUDZqS1pPMTdUOEZmVmZ4MFdWVytIamlXZ1c3RFdTZnNRMkN4ODlmVkoxaHI0WlliVm1BdG9ZQ1FkWjErWTMrZ3ZaMitsL2NEdnZReDcxUHlCK3hqK2JGYlVPK1lVUGlYNHg1a2lJZnc2TnJreTJlaWdSdHVDc3E1Vld1dVJPWVJ1MGVsN0pQQnprYmViWHdxSlVrMzlVTVpHRTk1OVp0NjZtQ2Z0eFVUOURRdklaNjhhYnA0NWdIZ0E2L3lRdWYveGY1ZlN6MVBuZlNIbitEUlQxeWdpdnpSWDlVcFRnWXZnUy9tOXY2N0JUejFvenRqdnBVczQ1SG5yUm52V3VDUERNcjZPdWY1WVdWU3FsbG85eG41OUZkdnAyYVVleWpTOXBuTHp6eGVMNlhOL1FxUFIrK1UwYVFCWndNN1lOOGlsV1VXSzFVUkYrakhHeGZNaFI1WmNsTkRieWIyalZvU00yeENJZTduL1lWTlV6MkJneTd5ZXI3d1l6enlMMnRPTzkvRGZrNTYvZTdZdVdOL3pVbjVLZGF1d1B2U3JpM3pDZnVOdUdHUzFPMzVVaVZTM1plYU53cjdWRDUwaXZkK0MxN3NsT1VQRnowRVRucXM0ZURrNGNDSFhBemY5MjRGSDBQczBmemdGZmFQVERUdjhpZExJS0JVZi9zTGFjaGpkR3g0RXBXQlBJcFMvMVFyL2trKy9iaFpPNm5wb1poeS9icE5Nc2Z6L3R2THhYa0M5bkZjVkh0Y1NxK3czbHR6dHUzVUFYTGFaZkcxeGFjQWVFOXpkY3ZQVjNJeXNmL211V083QXMxUm5XSHhBMzdEbHdQcCsrd3dQNHJuZkRJMlg0dzh5ZFp0dGpaNXdJVzB1dWNNdy80V3ZZZmIzVFdEUG15aGJhdXZweExWeEQrams0SFE0OVpIV3Q3QTM5eGdiM2V2RnZud3pCdmRpdnNVWUwxdytQbURtY0JidkYwLzJkU0JEL0t6ZGZuWnZxbEs1T0Z0M25XSFRJbTBXdHY2Q255RU5QcHh4TVlYMk5TNFpiWjVwVC9XalQ1cUNYV2ZodjJHYm0xTnFUbmZrMCtOdlg0V1BnUVBxVHpwbFg4RzRvTzYzeTk2L1lJK0h6MVlsbmdHOXJmalVuTisyeFNpRjZyVlNvKzJ5RWpsaXUrcDFWTHdSdk1IOGR5d0h2UzhsY3R4bGE4eTBucjZlSGJ2Uk9BeVR5LzJpRUg4V0dQd2JyM1ZaQjQ1OWh1akh3dmN2YkduMVA0UzlNS09iWU11bHdOUDlqWDE2RkdKUE81andabUt0RzFZbis4VGFyMGJmRGp0cFY1Tys2NGhudXB0c01nSnZIaWpOVWM2dlhGUm9PT09YYzhHSUYrL08vN0tBemZzMTdVeGZwWEtiY1MzaXZLTDVhTTJ5V25UZ3lVYWlsTGc1YnQwUHM1R1BKU1d0aWxSQ2V2OUJZWE83bk44c1U1Njh0a0JXOFNZSDJNdExQWWhmclNxY1BUYkFOd2tjVVBENlNkWUJ4eFFYZFpQQi95elMxNGRkdG9DLzF4eStwSHZ4M3JrRSs0ZmUvZjJKT0x5dlZzVWJreVMwb3JTdzI5ekVjOWZINzAvdkt0UWdWYmRDZ251QmR6ZUkzV0k5d0xna1R5SmY2SXQvSUNYYjBVM2s3SGZ3MUxwUSsxSCtjaHZORXk0OXhONnJmVk1ZTW1yZzFpZlgzQTBWb2IxUHZ0ODNIdGtZNzg0dDhIemIxY0EzL1JzbVhmYmQ0TVM5Ylc2OW5aZEVlS0VmVHQ4TDJSSUtjcUE5K2ZCTDJYRWR5cmJQZ25sRlB5aEpjUU0rejhQSEpIOFdnbjRlWkt3TFBrUzl2TkkxemVPMmdiKzc2N2NtT29zN0hPV3N2K2Q2UURZRzc1V3pjNjlFd1UwdnVmdDZwakRlRzZhT2dWbEtnTEs2VDM3Z01wRXpJdWU1UXJqaStCMzl0Q1dmMElldDJsamp6czl3ZE9zVWsrb2NyUUVqK0ZwdDUvVlR0Qmpha2Y2endNdjZNbWlVYWMzQUJjNjhmTE9zalhJTTVpckxmWC9Bai9NMUhUbnRDT0lsL1pFUEI3Y0IvdFdkUmtXYkR4RkNIL3J6OERoRXV5M2toUFZHcjRNKzRnKytYUHJneDd5cUJVZHZnaEh3NThLMjNMdDlBZG5yRzhmZFhmaHVCZks5TVhmOXBMeGFQQm11NWw3Qkk2UzBvaGZNektLOVJEUDNidmlNaFQ5NmIvQXQyUWQ5SHlyd3FWbExkajNML0hNNzRFNzd5Rk9QWHppa1RyMmhhb3IzbGx4cUI1Mll1eE8xNlhYaGJSZVFUaGxPZXg5emhLL1R6dXcvODNJdmpiN2NoQ0g1VG0zR3BvcXczOEo4N2lZYWlBSDMyVEkyU2JzazYwOHNIdG5mK3hUdE1iM2dDOGZ2TmZWclRNendyT3hUK1M5NzY3T3dNL1RoaVMzQnNHdW16MjZjczRUdk1IYmJUdWt6bGhNKzhqeVFXazZlRDQrdGxjdjFDR1BxVE5seC9vS1ErelA4dXJoaTByc0Z4YXRzT2xjbEI5d21sY3pGdmo4bEZHMWQ4N0dnU1hZZDNYVWxvUWRHK0hYcVUxbzZpL0V2aEc5ZWo2YmpMemI4NXRqRDB4RDN1UkMwY1pybjNjTGFQazdvVklvOGxPblo0NnN2d0o3NExSM28zTUs4cXNlcnZyRDgrRVhaNGVyZlFydElLWjlIUndtR3J3anVscDBZZkJyOE1MVTlpcFAvSmFNZlpyczhpMCtPV01mdTRnMVIxMndUdnZhZU4xV2MxY0ZtakhEWjlvUXJFKzZldXloWlNsdzNjMTcxYlJEWnd0SmNiQlAxRlBvblFNRGY5enJqdlV5aFlHcmJZWWhYbzE2ZktlbFVJeDlUU1IrNTA2M0NPbnV5OThQRDJCOVZ1OU9xZkthdldqL3VCenBCc1NWNGhFVm5XOCtBQjc3b01WTnVrcUZQbDRNMmxHTmZVODJ2dk1ZMXhQNHhrYmVSNzJ4MzZUWWMvTjZWYnd1aTBlazJlV0lFOFk0aWVxU3dhT2VIVy9jMnd6Ny9OVlAzVHRpV2xmZ3YwLy9YanlBNTdyUzNqVHNQUGFGMjlqbUdEb2ErNkgrWFRqeFpuL29mZE9xeDZtVjRDVXN1WjQ4YUFYV2szVDhjVkJtdUZxSk5wNzlrV1FPUGxOd2E3WER6dzVTT3JBM2NMNGIxb2NZeS9PbFBaRlBpUk8rcmdWOWdEcjE2RmE4QUhsZGh6WGZQaWljQWU2bEx4aDB6QTc4dUswZGM1NkRQemJMSkVkWkZmdHBEQzNkRy9EbEVvOG0razFzakJzTFh1NlUybFZma084anA4UUYxOCtCbjdCWGZLcTFGUlU2cGMvNkRkd204TzlybCtXSDRHZDBHMVZOOEs5REptLzBuZ1NjK3Q0dHA4cUV2OUNUUGtXNmYrN3hxZU54NVUrOTc0UEhvV1ZxZkF5OGx4OVRoeStiRDd5cFhOYldiZVVRN0N1UlVlUGpqZjN1L2ordXpnSXU2dVpwNEhzbzBvcUNMWFozaXkxMmQzZDNvR0luZG5lTDNkMkszWVdvaU5pbkl1S0oySXFLL1g3bmZ2dDc1UDAveitlOFpXOXpkbloyZG1aMlpzTGREZ0V0UnVJdk5lZU9GTWVSQzZjWlBLdjFaZVQvSFl0WHZqTUNQYk5IcGNOSGZtSHZ1S3JEcVltbEx1TmZ3WEhPbmptTjBITWVYeGdRMmpXSmVoNlFadWdpN0hXOXZpNUp2WnA5T21aS1ZBbEg3RzdmVE1qaUZjeDdrYUo5eDZXL3dEMWh2bmVUSkZNNTF5WWNLdGUxQnUxRUw0cHdkWS9DdjhLKzR3Tjl3WSs5M1J0ZWFZaGR4ZWhNSlpzRXBFSVBkbUJtNElZK3ppckxrTzByUCtIL3IrYnNHdzZ4YzVFYk4zZ3pjQ2wrekhLSDdKcFo1Q2p2eGxKRjdrbkwvUzNiN0k3N1J2RWVqemhUd2RQaFE4SmluL1FjK2hoNjZML1JyUi8yb2Q3enN5eHRoVi9IM2JZZU14NWlIOW51VzhDS0NZUHhDK0JRZWxlWkp1Z1BvcFAzaVh6c29vYTZMYngxaXZjc1BhNGNYZUI2eFVYVnJSOXhzT2VsSkNyTmhSSFZoenhFdnVsNXFraGQ1R1lkM2kvTHQ1UDNrODBYRE51VHJuVWlWVzdpaFVsVDhGL3BQbUg0eUN6WVAvVjZHZjR5Ty82azgyNTkvUDRROWtTWGJoYzlITEVHUFg5ODA0N3A4Sk53Y01pK05PVmZZS2RmTzNQVFFSWGMxSVVMNis3Y2c5OUoydTVyM25PWGVUL1lNdnZVRmRqWDk3dXk2bWpSVlk1cTU3YXM3WjNRMHcwc2xqenpBdnhFOUYvaXUva0I5dDFld1ExYWxEenJwRlkyWEs4aU5pWlJHWlkyOXh6aHAxUmJwLzVUN2pSRGYxVFA5amtmZmxYdWptNDc0ejUrRjZzWEx0MHFZcG1yT2pLdi9MVS90SE0zdm54c01INWtScVJzdENUcFBQeVpWRXJudFk1NzBDZHJpY1ArK0hrWnVQamJ4T3Vyc2NjYzU1YWgraVA4bmhVUDNGWVp1OThSVjBMWExLakZmWFRlNGxRZjEvS3VyUGkrZXczWUY3dmVPbWNJamJRb3IweTc0ay95dm1UT3lXdWVpWGluY1hkeTFMQTQ3TU91OUMzNlp2NWJkL1ZyUTZJaFRlNG1WUkhUU2crOWpYK1BHeTFMRHBpRVhyVEszZUsxcW1EMzAyaDcrNnJySTNndk9PRGxEUDh3L0ZoZFBuKzRCdWY2Z3djYjF3OUYzbks1NEhxZml0eEQrd3hlWDNvOGRqbER5dFdOSE5zWnY3Y3ZhMnllaDUzKzBlWEZCdTJSZThHY1hUdFBRd2VkWm5xT21ZKytOdG5qelgxVFYzRldFMzN5ejAxNUIvbnM2NWFycXg1eVZUVk9sWC9kR2I5bEw5MVNIN3czMzBFOTIvcTBSOGd0N05lV2ZlbzBubmN2WXpvUFhGMGYrL2MvUWRiZTRkN3M3d0hyMHZkQ2o3Q3ovNGZjYVpBYi8vcjd3ZWt0ZHVXUHo5MkxtbzFoOFhHbkx2R1g3cnVxUVM2VDEvWEpuVlRkcmpwcHIvVVY4cExPeFpyMjN1YWlxaGUxNWVyNjBFT3RycDUyVWZzUytNdWFFUnM4Q3IzNndKVTNwM1ZEN3BhMXo2UHdxL3VRNng3OGUra2wvbWxDc3U1OE11MFNkaFNKL3A0ZmdwM1k4YlRSRlRyQ3IxWFBjS2w1VmZUWG4wYjgyWkVIdStDdjE1TU9QSTJmMTk3VGMwMis2TXg1VSt5aUxUYS91K3FWTHlaTGVsL3VqWlA5Qmkxa1AvV3M4SEwyRHVURVdVNUczSGlQM1B5VVIwTVhqbDMxZFBLdTdNUHhqK1Uzcm5aUVovUUcwN1plY3FtR2M0aXEzUXZ1NjQxZDQvM3hkY2F0RDFWcWRmTDBIOC9Dejc4SjJkdm1FM2FzWG1kUGpYN3dGZnZQaGFOL0xyM2hydExsVHQ1Nllta1gxV3ordzVIemVFL1l6TVh4eENiTzNiZDlPMFhINzhVL1ZIQ3lReGV3ZjFsbXNRNWVBai96STluRWozdnhGMUxKK2pQZlZldzNTclFldjdLS0MvZXd3SEhOYW5LZnpsOW1YZnA2TTdBWC9lNDJvL2hRcGQ1WDNYZnQ2Q3YwcWFmMnRidERQSXlUUmI3VnFJOC8wWjFKYzlWb2o3LzUyVStITjgwS0gzNzc1bnkvaU83NHBjbmM0dWRjOU5URG5xN0xNZzc3bzJwSmp2MU5pbjFNa1czTEt2VkdUbC9xODRINm50aEJlYzg2OGFrS2RpR1hCMC9kdFJjNTU4cWV4OXUrVzhNNzhLbXAyM1pIYnJqd1lwLzZJM2x2ODJqdWpmaHU0RzJMWlJmVGVjSTMvbHl6NlhqWkI3em5yVmhxNlhEMDRHK091SmNxUmh3QmxldnIwTnpZTFV6dDYzTWQ4MDAxWkdoQThuUWZuTlM4d0hXYlBFcGdENUlqNnNoTTVJMmhkd09udk9NOVZmQ0kySU43S1YvWjJUZFpWdXp0ZDBaV1BqWVUrTmllUmwwYWdCL2ZUVW1IMVpvZWhUeDdsUGUwMVl5LzhQc3UvVE8yZDFQOS8yNVo0WWsrZWw3T0JpODJmSVd2N1JUVUpneDcwTVdwNXUwVi8rMjV4aDN4TExVSmYrNkI0VnN5b2dlOE0relN4dlBRMDlqaVRyZVhuNFUraHE2NGxoVTZsOG9oVVROWEVPRm44alZwUDhKdnordVRQT3pISjk2UEhDNTd4T2VCdTdxUUlyREpoQTRlNm5IS1pibGFvKy83SG5SOTd4SDBWUFVYZlZxY0ZqdmhwdlYzTC9MRExuUHB0TGUvWGVHSEJ6WWMweWtGOFFWV0xpbVI3RGI2d1BlRGF0V3V5YjEzOUpqWU5XRy9IRlRlOE5WOVVpeHh3RTk2WHN0QTdQMnpOYXQzZVFGeW51bVZPNFpNRjd1bEQ5VmFueUp3eCtiZGIyWWVRSjkyL0pQZm8rcS8zWlR2alVQSHAwV3dyejZzOWlrd3hrVUY1VTZ6dEJieXRSMlhvM3ZNZ0c5OXZxZE8weFB3cFROZWRDaGlBVStIakdveGV5cHkwdDRWS2pxbDJRUC9uTjJqY2l6K1hSZjlqWnVwbGptb2pFc2VEWnlQMzV1Mmw4cDk5YzdxcEE3bktSdDNGRDdvd0laM1JXSnJ1U2puVkMyOWhuRWZXTmErZE1jUjdPc202NXBkcVkwY2IrRm1weWFWeHZHZTVmQ252amJvZVpPZzNkMHJJeTg5MmlSbXpPdG9SNVVoZGN0WmNjZ2R0anN1bmxPVWU4V0tDejZUSm9CblR0bDhwaTk1ZzMxSHdVOS91M3gyVUtWM1I1WEdiRjNsUEQ0dDlndnhISzRNR2ZkeVFXSGU1NlM5WDZrMC9nRzhwZ1EyS09qRis1QkdZNTRzWlh4MzUwMXQrd1E3dUJ5djJ6UU5SbC8zOU0rU21WM0RPVC8zK3V5YWhsK0NleU50R3liaTFLUDBVZmRUbDMyUTk3cDRkdStMUDc1K2w2NWxycnNlK2NxVTZQZXYxaWRXQXp0UFdwS2lQVDVUcXVYUGZnVi9ua2RLbFBWTXdyMmhhT2JQdGNkbTQzMUtrd1BwS3VkRTdwTER0OTBuN09oYTF3b3FjSUIzancyWEZocVdnL004MitteUUydmNTNkpxM2J1VDZqN3ltMlVsejE1VlFlZ2ZWdFVzTW9kNzk2RW96N0dUMFpzUDh0NmVLcVlzNzczcjdMcmRGYjltZnc4TXpjeHhvQW80M3ppYWFxeWJDcTR3dVVXaGFlaGRNNFh0WEIzdXBGSytQTlNxTjIrV3YyN3J0TGdnZXJjTXd4ZXZlc2E1V3E1YWhzNmhLUktwMFU0UGJUdXI0WWY1VmREN2ZQT1ZHbnFpU3ZHeDZIV3V0ZDkwT0k1ejQwYlp3Y2YzdnNaZmtHTm14OTdvRzNwbGpvcCtpejdSWWZOSDEyM2dwK3Y5L1cyeWYzWlR2L3AvenZ6dGhiUHFlNmJqemRDamJpckhpTS9abm1OWGYzYm9oUHlCM1lobmtkRzI0bGRjSXBXOXdJL1hUaWNTcWJVUmJROVZQWUlkVFpZVys1c1FGK0IyaWxYMTU3SytEenA3NXQxL0twSGFlblZDMlNUb05kOHVQZHR1QS80VzM1ZmZsTVNkZDE2cHJ1MDdWNVQ3NzRUQU95UHpiM1JYZjFhUEdOc2R2NS9yR2w0SmFGL1FXUzJmVXIvVEkvU01oWHRNM2pnd05YcVByZlhDUTFtWE5DTSsvRDZPdkxsM3VhbFRTdUFQdHNMM1lVL2ZJa2NiZUxCVTcyYUg0TjhpNmozTGpueXIrYVVsQWRWNEoxUHQrdUdiZmJBLzhzNitOK1lXOXF6RnR1UmE1ZlFMT2Z6RktlNVZaMkxmWERZa2FBRjB1ZURUdXRHZjhPZTNiL09vNUVVbkpWVmxkK2R6VCszSGU0ZENwNmZ2NWIxcjZkaml2OXVnUi8zU2ZrSGQrWWtjVkxuNmtYL0g4ZDU0Mlo0M281dG50NmlEZ3krNFRzSHUrZStXS2FPekVzZGtXTlZ6cDFOd2Jnd3B2SFh3SnRiVi8wcjNQSjE0QjZObUp5NzU0eGY2N0FQSGl3M2tuakMwK2NhdGxlc2dINWk4b2tIL1dIZTFkbmpNdXhZRFhOVVRqN3pEcjdwanY3RGR2M0I5K01DU3c1b1dtWVA5MUxJQ1ZmYWRYbzFkOTlJZXc3WWpaOTczZm1yek84UTlXZHlwVVB1NXZPT3ZscWo2cXZuSXlYT2wyeFY1RG1jMUd4NDlxSklXZStTUTdYM1hWOEhldnV2Vjc4M256MHFzd2xaa25KMkwrRWVXazF2bXZNRHV6bjE4SHUrRkJWelVrdERYVlk3eGJuRjQvT0ltajNsZk95aThSTHBpVHkwcTZiZmF2OS9BejFYcHVkVEhGWGxZZzFhbGJpOGZCaC9ZY1c3VEdzUitxdlp4ZUxNYjQ5Q1Q1dlYyeCt4WXJTamhuZTM3UVl2YTEzM1p4c0xFelJpUjArMVZ2cXJjZzhZc3VuOGJPWHp1ek0zT052dkplNVh2elgzU0lvOW81Skp5K2lyZTdWNnJVYURBeVJ6WUpaVjlPZjdNYUVkMUxkT2dJWjdzcDZJZnR3dzZoRDE4ejNrRmRoYmpYbHpNZjJQaDcrajVkaVZkSDdlekFYeGxwYVBydjZFMys5eHlTODZMK044WkdscjVReXYwblRrZUQ2MTFiaC96Nkx5dmJYY2ZOOVg4b245MDh5bXVLbC9IVFpFM0c3dXJFNC91cjQ0SFRwL256RjQwRi8rS08wS3kzVDVMZktkRy9YTnVpK0IrNzlXazA0V2RPTFI2T214NDE3WEloeU0rTEV3V2l2M2t2T1R2YzlhQVA0dFA4V1htSGQ0ZEJ5YytjTy9JVGQ3VnZwKys5QnoyUFExUFpIa2VpMzZneFBGZGxjN253QjQzWC9TNlovQjl0NHRmdUJhQlA5by9RMVlHOTBYKzFEenB2RGF6aXlWU1RkSTFHVk9VZHhScjB0L3AxSGEvUlEyWmR5QnI5VHJvUjlhNGhxWkVEdjMwY05EUjVQQWZ2dVZlZVFjUkgyUDV4WTNqcDJNZnVXQnlqb0Z6OGRmeGJuUFRCbFYzdTZxekYzK09MTTA5OG1mODU0bkRQTkRyVExuUW9jZDJWK1UxZEhYQkpQZGRWUFBWeVE3VjVaNit3TkwxM0Mzc3BzTEg5VjFWL294U1p6MjdwN3dPdkh1UFg1VjlOM1pvclVmUDJ6WVovbjVQM1RkWlNrRWYxcGZwdWZFMjkvMzN2NU5PdmNRN2pSenZaOXdJNXB4NDBpMkxhK3dnVjlVL3JNTDdFWUZKVk1hZGY4NGNqWEpYeDdxa2Q4dnp6azJOTGpOK1lHZjhiTzUzLy9hK0NYNU1HbDlNdWpzcmRsVFpjeFhjVmg0K0lzM0pyTzRoK0IyK2NTZnhwQm5JV1VvVTZ6WHhFUHhOdmVDbnA0ZHlIalJZMi96bVl0NWZONjUzcDFhakV0aWJkNHM0MlJsOTJwZjIzL1k5Uk42eTZlZ3A5N3RSek90UHU5VG5jam1xVEYvbTVwdXgya1B0NjR5QUVMM2YrS2ZEYitkR1g3VjUxcEk0UCt3ZFBQbzk2dFBMS2JINithdlEvb0hoME9FaTQ0cDBxSWM5WnNpREhrMWY4UHVYS1VXNnNXRS9GckM5bVFhL09iRFdwSkw5NEROWGpXMTY0UVIyaDc4UE5SMjhlalp5N0xQOTNJWmd2M0YxcHlYanRNN3dJUmFmei8zZ2ozeFdXRmVkNUozS1ZVdS9YR3gvMWQ1aHp2ejc4SGV2bzFadmVZZmVKcmlleTZROFYzbWZzV0h4NmJtY2kwOEh0ZnlURVQxcjd4eHBzazNsM1YzSFZsMENYd2VoQjcyOGNPaG45Qit4YWN2ZXlvQWNzVW1pTnFzNzc4RlBRc3kwdFIrUlV4WFkraTdvRis5emFtOG9WRzdLZEE5Vjh2N1dkWnMvYy80TVNEV2dFZlF1M1pVVy9iNmczdzd4cmU2YkZidlBocTU3UG1aQzM1bXFmK05FU2JDYmRSdGZ2bDFwNUJXL25wd3FueG45UzdNTnpXMnpzQy9MbitaRTkrTDROZlo2RWY0a0dmNUJ5dGNJN3BtUk9DQ0xQNDlZR3BxZmQ0TE5KdXhPL0FwK1krSG42cnVKVDlFeVE0bEpEVHU1NHg4MXhhZDB4RmR4Q3pvd1BTMzJDcXNIRExEMnlvazhyT0tzL2NXeG0xcCt4cUZ5bG0xS0ZWeDdkUGNaN1AwWDNGdmM2OHg2L0Noa2FMSHZHdmZtL2VOL2xIVENMK3ltdHRQRDEzS3VuTGFFcmo0OEI3K1Vud3ZNdjNMUVEzbDhPamR6SEg0QTl1d0pTZldDT0UyNW52cFdtb2tmODQyZDI1VTdnZU91ak01MWsvMTU0S1R5ZityaGZRYzlsY3V0ak82aE51U3pNUS9mK2hBbndTRTg1S01yNzYvYWRRdGJOUi8vbjNYUHBoblRDM25DeHZYSDUxM0JQaStrc3VQQ3lMcjRoWEg3L0xzWmRqM2ZwMGE4dUlTZXJwVzFqdGV6T3J4SEdWRFV2MVVsN0hLeUQ1NnhvQlo2azdOSmZuOUJ2L2E3U2thSGZUdlFpeWEvOStNRS9oWktqVXRjN2l6djZmcXR6VjJ1UG54R3dYVHZ1bXpCbjBhOTlpZi8xc0Z1ZEVHTlk1dExjRDdHckhybDA1NTROVGM5M3ZRN1BKLzRHRjBmaHMycGpWMW1mNWRxdjk2QXY5TU9MbnozMWtQTk9kRW8zZGtEeEIvd2Q1dlpCL3F5cFdqczVmTFFqNHhlZ3grZG0ydFJ6MXZNemRUdE9mcVViUjBjbXplSERreDJuMTBNUHZiazRIVExzeURYOG04NTE4K0dVNmtQcTNmT09ZdDgvZHpzNWFzajhlTThmRy9CclJHRmliZDFla1hmYXVEclRnL1BsSm54MDNqdHorSkt6N0NuN3VveTh1N2lYZENSYTJwc0JmeUU1cWo1L1ZsaDVFVXVsZnIwWG95K0lQSlFmSUUveUtOdDg1TnZmSTZkeERETHh5WmJzQmZwMHNVbHFzSXY3aDA5K2gwdENYM2MxOUtwOXh2ODRidGtjWGc2RlRsT3Vvd0x6dGFIbnRZbG1sUG5UczRxdVAyZmtNZlprWU1XclI1NUJ6OFVzeXN2bURlVGM3M0htU2VIVXZSelUrdURzNWRkZ1Q0NXlDMTEzQ0g4ZmI1dTkrekpHZWhNdFlEUDNXeThSeG1mSy9uRktyY1NxUmJWVW82WXovNnZWOW5QYVM3MnV1VVh0RGpRSDc5REF3SWV0VitKZm5EQ3NjbkRHNzNIbnJKUW04SS84Wi95T01XOS9TbUFZMVIwZzZVQnlHODNQRjh5TWg3NHJ6bmdscWZuQ0VkbDNkMXlWbjMwVkplbUZYY2VPOFJKelR6eE11OGwzcVVFWUlqaWo3eWxqUGVPdVVld1Y3UTh5K3hhaGJpQnovOU04MW5OdTkwbDlXN1VPSTYrcWxURXBHTXY4YXV3L1Z5NzUxV0kxNUptYVlWY2JmTTZxL296OXorOWl0MSsya2QzNHVONFB6TFhvZS9TcWF4SHd3TDNBMytpbnovL1lNeTBidDNaRDN0N3V3N0Z6MzNmQ3RrdjI1Qm5EZnRWM2YvNVV1SkJ0ZXhoR2NTNS9lQzUwN2FMeUUvTCt2YVpkWlY0SjliUTlqbTQ5cXRXSzdMNmRzTVBzc2Y1NzltV1llOS9iT3FYbmg4eThTN3FldnEwcnRnOVoxK2RPV2dBZUhkcWUyaUhqTVBkNFBPS0pGNUozSVVZcjBNYlNrUGZ1M3VtLzVLTmQ0bm5IeVMrR2NkN3dwRXIxN1oyNGYxZnZlSGxTMFZ5ajBpYloweWJkWGVSazJ5cTNuQkxPdUtyM1Q2WGNjajhKT3BDbGg0N2ZKRmZUM3kyTTJ6TFFPSzhWSDJXdVRIeGt3Skw1ODVia3ZjZlRaZVV1RDk2aUt1YTY3RnY1SFg4UWdTa0hucHpKZTlrM1k1TnZiSzlBUEY4SHJiYkdYY0V2M25MRXVkL3lIbmEwWkptZXcvc0xiYjA5NzU4NGp4eWxqd3hpVi96dnV6UDJnRVpZemZ4WHJKdmxiWmRXTitadHlLMnhtSDNGcEszNkpadCtLbmVVZlhCaHRjUkxpcmEramxsTXVTUjJZZVhUT3FQZmpCYitSMExzaTdnL0kxSjJ2TW82M0R4a2w4aGQ3dzZCZ3djL0hRTjc3bGVqa2t4YnBBMy9rK0RzNDNKeFRrdzBydGd1cWhGNkljOFhqeWVqTC9vdVBLMWluODd5ejJzNTVTdWozaW4vR2JPM01SamVLL1haK09wdnZkZzNMUG1HSjR4TmZyRlRLTWY1dXlIUGRQUkZaZlQrMkJYMExQUm1tcVoxemlyOFBKbmVnVVQ3MmJSQS9jM2ZmRXI0ZHJvU0tJVjJOTVB2RGIvOFMzMEpqVm1IQnpmZ3ZlU3d4cjNyRmdNdjZ1ZFhRNFhXNG8vaU9UZGNvNU95WDArNU9QQytFckUyWnYwOWFmelJ1eTNQTDRGKzJhRW4weCtKWFdIRXVQY1ZPdkE0azFpc0Z1WUV4MytlQWYwNEVXMVRLZGlpU2YzOW5yeEFoWHcvL0ZuejRPeG9ZUmMvVFRnMWQ1WnlOZWpCalZLbm9INGREbDZuYzRRZ2Y2M1lRUFBYNTdZRzY3SzNyL1l4V1RZbVJUNFdibzc3OTJIajdvMU1KNTdVT0x4WS91TVFKQzdMdG5wbG1kekFiZWpqWFpmbU91cWJqOEtQejI5UDN4ZHQ2RnJzejV6VitjY2kyZmVGNEkvNmxTcmFrekFYODM2RWNzS1ZpYiswUGsvVjZxM3dsNWxXTDc1QlEvZ1YzZFQ1SnExOVloL0VqYzJiT3A3L1BZUGVYQ3hZMWI0ZDJ1bTFDVjdZcDk5UEtMU3gwWFE4NlpwbWllK2dOL2pCVTB5RjNqZ0FGMzZHQmw5R1A5VFI3bzEzcldVOTl1L3BuaXRmZlRhUlpYdGZjQzlFUDU3K2xaKy9lWGlXK3hKYzI4OHNmNHMvZ2NLSGI5Y21QdjJ1Wm1IMHNjU3Y2RlQyeWRkV25CL0MvazR0R3k3cEJiVlk4N0RKbmZ4Ynpzajc1VUtpL0UzTThwL3k5emMrSmtLOUZsNHZrTnArTTlPWGhlcnQwRk8vbnpjak1mMVBGUjQya3Qrb2ZqZG1sZHZaK2R1WmR6Vi9aTmJkbTU2NzY2eVpQbTgrOHhaRDdWdVhJTWlwNkZ2dVZQT1dIMXJQbks1RHRPOWZtQ3ZNMzlUN09NNXEvQkRiaTM1WXhUK29lWStHdkhqQlA2Qm5uVXYrYm9PNytRU1p3MzBXUUMvZjZObzJmS1QwSi92dUQ5MVlTZjRqWWsvMnl5ck90WkZaUW5OZWFsb2ZRK0YyVU1odnlXOHo4eWU3cTRmY2QwcUgzdXhZekwrZmdwdXFOcGsrMWZld1NSUDFuTWk4bzN0MmI0R2xxaUwvYysxSVMzRkQ5N25VZnZtZS9BdWZQK25UcStMWVI4WlhpL3ZxNHBwc1MrTmE3aHBNZkxPOHRQS0hCMkF2RHRwMmM0ckc1ZUF6azRzR0hVaUZmeEtoZURDaEs5Vk8vZUVIY3VMWDZycDZXL1gvNHBkcG11clJtc0xMdlZRYWU3YzJuV1ArREVaczBWbGkrZGRWOVNZOXYzdk5zTE9QTjUvK1huc1VUYTAzUnpZQnYxTDh1RnpyWm54di9MRDhtWGJkT3diYS9mcEhlN0pPKzVXKzVkNFJMNTFWSjhkVzExOTlZMjRZY3NibHloZjFWbjV2bXM5WnN4S04vVzZlS0VWamZEUE5QeG05bHFWMEYvVjhxNzlwdUFpN211RkExdWN3TjlSM1RlQngwdnducTljelU3cGUwQVg4OXdMOWE3Tyt2cmFGdXhhaU4zM2dsclpkcWVGWGg5cUVGNWpGWEtHcjMzM1RxdEtYSjBVdFFldDNnNGVCcjMzYnJKNUxmcVZFUm5LWFUrWFZMMFlNZlZJOVptTzZ0UElVenRYbEhSVHR3TUtCK3gxNFY3NjVIQnBhelA4ZmVYNi9tMGM4cW5EbXk1NS84QXVmblJZdjBjbnNXTjJ2alhpN0U3ODRwMnJNU1ZMZjg3cHcyMW1ueHVOZkN6YjBDK25YeEVQck16MFRObjM0emRtVUk5eUdadGluN0RlZGFEVEJ0N0hYWjBZY0xuQ1FCY1Y4dVBPSUVma21JRi9zOWIvM041VlRVM3UzV0NSNE51TnpZdU9jNjR0cloxb1RYdmVKNnc4TVhscGtwellJemFZZkxrK2RtUWhOVGM0YkVCZWxIVGo1YUcvdUVjVXJObG1lVjdpdGx6T3E1d3U4ODdJTDNYWW9pN0VhVWo5UGwzdWplanpSN3J1N3pVUC9VWFhSNWNQemZwQi9LdXRlWmZaMGlSVDZkS2xpMSs4MmszOTZOdjE4eUxrdDZXSHppaGNIbi93SGxuOU8vc0JueHhodldabVovL242dDB0MVFuME03bDdSTjM5aTUxbWhTMWxQTThoejNkYzNUSlJ6aEhvWDFzdFdQYUlPQzdPQlhhVmszdnY0R1BmR2xyd2oxRWw4bmZaYnc2OGo4clE2RkRrUTNmVkxJTDdNM1loNDdPOHZ1WHNSOXpaM1N1VGhZTFhyemEyRzNRU1BMNVVyY1c0SGJ3UDZlSVRIditCOTlYNVlwMDNua0x1a2FyZjlJV1B1UCtlMmRRK2ZDbjN2WjB0TzNxTzR2MUpyM2R1NGZINEcyOXY2WGFFWnhIcTZ1alJ4WXIyNUozUzVsVm4zL0JlWWRxUDBWc2FjYzRkOGdqeGp3dHlWZmVYT2ZkM080eGMwL2IzY1dMOGU3UTkzZW5TVy96WGVmUnEyNnNjOFVYVDNQUm9mQVg3b2FPTEF1cnM0UjZjSSt2Nk9iWFJYMWRKM2ZGZTYyeklBWVpNZC9LNGhuMmZlNU1LUmJCdmQ5bVVmZjV4N204Zms3ZnVGa1ljNGlSUDNmUGRRSTlxODYvejRDbnhZaUpPVjF0YTBaZUJuYitRYXpkeXM0b1ZlL3R0eEMvOGpkMituWEx3M24zRDVGa1h5blRsWGhaY0l0Y3MvSTRNdXgrWHJRUjg1S3AzTTk4bTVydjZ6L3ViSXVFTFBLNzUxNndQZkZwMDY3ZXZKdmU4ejB0S0RPdUVucjlNdTF3ZDZ2RStyVjRqajhBVHlGTm5ldzBhdkd1VnV3cnd2UDNpQ1hadFVZL0d0ZCtFdmRDNi9xbm5ManZtcUZxL2VleTBqVGdHQTd6aWNtNGtYbkhtSTBtUy9FTGY5ekNveFBvUGFZZ0w4MlpBOUF2OE5ieWRjL05SUEg2Z3JJRmhGWXJ3anExeTZubmRONkJmSHh1eU1mOVVkL3dkckZhTHhtTlhlYnBJN1lQSlVkTzEzZUxhdXhkMlJDR1ZkN1Z3NVYzemxkOUpqcXg0NGFKQ1QvZVBjTWEvVE1QY0JXWXN3NzdhdmUrbGluMngvL2xaNDlqWlk5anJ6MGswNUdJSjd2ZGVRUmNIbmtUdVV5SW0xWU9hNkRzTFpqdTVwd2x5QjRlT1lSbVA4ejY1eko2Tk5YWWpUenYzb0xqYmFCenp6aWk1di9FdS9BZkYzTXg2SVF6LzU1c0d0c3Axa1BoSDVYZGxPTEg0b1pzYU1yak4zMGE4YzlzODcxcmJFdHdEVTJXTXZuaUpkOFBqdDl2ZTlVRFBPdTladmpTcmtHK1A2RFcyK1FQMHF2MXlyS2ljckMvdnV1WlhtRmRsRVhLWHg5OHYxZWJjYnJJZ0trVXQ3SGphaGZlczBQVWdlcEZqT2VOaWVSOGI0K0cvNFNqMitUOXJibGNkUm1Qbm1TaGs4ckQ1Ym1yWndzdjd0N1YyVnQrNmZiMzhpWE4yelovdUR6MnhReGh6OTZCMUFuNDlDd3hKbmZRUGVvYTVlNjlsZkFKL05UOTJYODBseE9OSk8ycnU1S3JjMjg2MHpsTzdQUEwvaUoyTjIyN2hmdXpwa1hWOFZmWnhreFRmVTliQVh2N1NNZHVGOGVmUUZ3L3RkR0RETGpkVnYyemJGQzhLOGY1alorMTY5NU83cU1lak45MTBoYitzc3Z2cnp0ejR5eG96ci9uY0hjemowNTAwS2ZZUjEvZlJ3V3laSStFTHV4VnFlN3JVU3ZnUTI0NHgwZEROczErcnY2eUd2OFFwMVM4M1Nkb1NmcmRpajhUcm9NKzNTM3FsTGM0OXQ5S1V6NW51QnJtb3Jla1BYcmpFTzgzK0piZTRmOE9PTjZPbDc4ZXR4RlU2bW1pOVV3dmtxRi9INWZ6NkJQL2w1WVk1QjA3dUQxMis5dmhpQ1BnVHQ4WTFEUGRFeXJIZDlUKy9yeU4vZnZ1MXlRemVnVGZQNFYzd0dQWkNMaTVuSnpueWpzb0htNEhNMkI5RTF3eGZrZ1kvRTJVZmhxMmJUN3d6VjhlemwwOGp0enkxcmVEMSt2V1RxZ0duWm43YU41WTRMM1YrdFY2SWY2amQ2ZFA4VG8yZXIxL2cwUHpEWG5DdVQ2KzBKQTMzemVVQlR5Ymx4ZC9EMlM0TjdyMUZYMS9lUFYrdFM3emJMYmp3ZEtWZjJHbTZGY3YwTVlaMzhmM1AxZXZWbi92RXJOenpEdVZGL2hCOHEraHVGK0tFUmg5c0had3h4azFsM0YxdTQwNzRyTUZkR3Q5ekpHN2RzVjJYdXA5KzVxeU9qcm9mUFNvYy85QUgyMlhMaFQxR3FRS2JrL2JIYnJ0MFRQK3d1ajNnVTlUNkhHMDUxOGRPeXovaUZYTC9aaWQyMUJ2RSthU2NldzRmemYzN3NhMzQ0NmU4YjUrMnU4VE1wc2pMaWorL3U2NE81NnhiNGVkYmNxTEh1Zmp6MSs0enhHK1kwRzFpcG5YdlhOWEVxV055clorTVBVbncxbXNiOENzMjVYNVV2c3I0T3preGZZbmZzOExFYWQyMnhha3M4dHBIeVE5V0tZNityL1AwaUdJVE91RDNNMjVQNHJuNFRVblJaY1Z2Si94VnJBd3ZkZmsyL043M3BJdUhkK2JkMDR5YlUySTNETVp1TU9qbmpxaEk0dG9WaS9YTml4MUhtaitmODJSMzQ1MU1wem8xVDg5MFZXZXVaTHJUaWpqcmFXbzh1YnVXZlZ6bnlJQUtaYkJYdTlOZ1dnY3Y5QWFUMHM5eVRZV2NlSFJmcndGdHNaT3ErNlRVK2tlOHk2MjY0L1NORXlQd2I5R3JYc1Z0dThIL05DMFBCT0Z2dm45ZzVKZjc2SjEvRlh4MHZOaGsvSnNzU3JGa3FUZjI1bE5TbGV5UG42YU1xMjQzM2pIY1hYMTgvdTNkZWU2aE9WV21jN2VKaDc2dGdPdW5VZmh6ZURKbzBxL1R4UEU1c09GQW94SElTMXZkYXJ6Z052cmZpRGVxMVhQOE1VMFp0dlIwRHVKR05GbGJJbFZiN05KVHJFKytjU3Aycy82TzllOUVJU2NQNkZEeHdEMzBGYWZIVHF2NEJQOVBoMHQzT3BrZHU5dk5tNFlkbW9jOVNjck9TU3EzSG90Y3QrU3lxalBYRWRkM1FNWW5qZG0vcis4WGpNd0gzZkR0a09yS1ZPSzEzUDBXazM0WC92Vzd4eFZwc0lyM0VWVkd4TlVLeEQ5bG5nYjVucGNsTHZUZDRpbi9UR2dKWGc4b3R5Z1AreU5sbTZhRC9JdWpSM3A1NzBhZnJHN3F5ZlMzZGIyd2kyMWY2VWFWZU82TmR5ZU9HTklPK2MzMTBPS1Z2K0NQNitDakdlVnJEOGRQY2I1WjcwN2hiMmxBNTdsdC9rempYVWpSR3JWcjRvZGpRWUVtbDJwakI1QnNjdE9wNlpFWFh1bmsvZlFCZEdCZzBaZFRsNkIvUHBQTy9jcXFVT0tRUlV6eDdvSGZqY0dCN2ROMUdJQi94cWZmdjl5K2sxVFo3dldjNjRhZHhPWWh6WDI5a2FPKzl5bC9xQVBuek9nRjB3dHVHQXM5M3ZxbDUyYnNGNndSNjNha3hGNXg2TU5ENTV0ZzF4TTQ4bmF4ck1oeFR1NGJPcjRiL2luK2VoYTJCUklQSmFCa3pOUjR2bzlXMmJ6Mk52WTY0UXZkdTk3UDRLenlKYnNYc3ZjSThvNnFnZHZxVFhGVDZkc1YyRjBLdVUzeTh1djhieEl2NXMzOE5NZldFYzhtc2t6Rm4vUFI5eldPclJNNEtoMzY3S3I5dTYwazNseXhaNXZmSnNHZldqS25scm1LNDJkdHlKbWdhcEhMc0lzYTNYZFhlK1FDN1g5SDlNMEkzeDIyZjNuM0ZMekhmRm0rNC9yazcvRFhVL2Z5bDNQWUR6djNUSnMzTFhRdnh1Sy9kMkFUZDlYQlZyMndLM2IvdnFzM1ZrK0hQNXF0RnpvMWUreUszOFhWVDk0ZTVMMUxoN1RwMXB6bTNhM2JpUGoyczVHZlBUcjRLNmY0eHp6L3ZOYXpZOWcxRjM2MTBYS1g5OGFOazQ1STlCTjdTNS9kUTVLMUgrK3NjcmxPYVJYYTFWMjljOXQ3NUVWTjdyMXozdzlaZ24rWUVrM3JGbjlPUEtGQ2lXdVdPb3ZlOGt6UnlrUDh3b2pmMW10SzRZTlo0TCtDZmxhYWc3NHIvOW9obDNaQ0I5NVYyWFQ4S0hFa1Z6ZkpYYkFWL3E3TDNMKytZMEk5OUpqUEI1MmRRMXlmNnQrUFpHbU1YN1k4STcrVnlSbmhxUGJ1bnA3MWNVWGlyQjBkKzYwcmVKUy9rdS9FOFBUWWo1VDIzWlFIZjduOUZvYWxDY3FUV05XYTRUZlJEejNybmQxWkxxZkp5L3ZXcFJPT05kckhlOXZMZFo2OFI0L3g1ZDcrSEZiaVFiMUw3N3k1SlA0SnpyK1lPcTBJOG9ObmJkTFY2b2ZmeWNoVGw3dGxnMStzY01DNVVKTFNibXJmelJhMno4U1o2dEdxLzVkdkk1T3FPWGRYajd2N3lGMFZPOUsyV1diODZZN0xNckNhMHkvMlRlOThLOFBYd3QrOGVCdzZIRC9NUHg2bmQ2ekh2YXYrcUF1SmsvT2VyMjcrNU0wdWVoSHY4c2ozUkkySU8rZWNaWVhQVytLQzdEbFh0bGhXL05WMlhSdTNyQXArYjNLbnJWUEJCYnVORkltdWpCMTd3MFZOblB2dDVKQVgrQWQrNjVaMlpLYWt4R2Z2KzNaWFBPZjB5UnNWSHVCMzhPYlh5R29mc0lOYWR6Tm44Y1BzLy92SmJtY3FjOVNpT20vbzJhUVNmamRYN0QveXV6eCtrSHVXYTl3Y3dxazZ2TXN5b2pINjRiR0JGYTc5NHI1UmZ2YWJRVSt3c3h5VUswNTlqc1dPckc2SmFZMnFlYWdkMThyWERyR2l2M2g5T3N6N3RwdHFrZTkyNzEvSVFVKzhYT0ZjYlRKeG5zNnVmVFgzdVVXTktoVVZXWjEzeTVPM3VqYlBnQitIM0dsN25NNk5QZG1XeFkzZXAwTmY5dnJReWM2RlBxRS9MTnc0dUNmK0NFLysvbmxsVVRIZS9jMCtiUW5udmRhU2x5T2JuNHpqSGR5UjFBdXZ0RVl2TXYxMzVyTEUwMDNacTZqeko2SVhUTnpRcG5YUWUxZTFxOEg3Z0JYSVpVNDM5dTRVZ2IzS2U1Zll4Ry80ZTlJcmxlc2Evc3JMSGZ0eW9RcnZhYTRIclA3eGxYZnVUNXZmakY2TS8rZ29sMHRsdTJLWE9Uem1RZDZ6dFlnRDRsNDZwT1VXN3NQV1RqNHo4V2U5OHBaN3pvYlk5ZDgvV0tyK0R2ak9lOTVOQjhkaVg3YXF5emdIWCt5L0YyZXYvc0FUUDM3TkE5VDJQYnd2VDc4aE5uY203T3pDT3FqWWdVTXQ2a2lGT3RsM1l6Y1QrdXh2aTBMNDY3TU1kaDVjbURoM3hZTXNjUzJRRjJiZmxLbWdNLzZSZXFjb3NYa1c5aFZKSDVSdlg0ajNncGN2K3RkZVFmemQ3TCtHYjkrRUh4azFhazNaUXN0ZDFQbzlGL1lteG0vcThHTjdpMDVEbi9GbTlNYzFkWURmNVk2UmhjY2hyd3E3NHRGMDBrUkg0b0Jkc0ZiaDNYTys0TGdrTzZ2amQyb3cwVjJ4VTAweFkxQ0dqTmliUEMrMHNOY2E5T3UvYjJVSXEwZzg4YzlKaDFab1dUbVpPcEtxYUl1eitNMnBQZkRlNzVyY3h4TTk4NXJSSVI3OTRkKzcrelB6N3JYcXhhWFY2K0RmT3k3KzI5OW4yQ3MrKzlhaTV6UHV3WGUrdEMzdWpSMXVvVU9PQTJlanIwbVNjZkxxYS9BdEx4YW5xWEdCZUkzUlhjdmZ1TTU5dFc2ZHR0WDZvYitxcytGUDBlYThCeitYWTltRWZmUHdXNTZqYUtQYkw1M1ZyaDFIbnVjNzY2STJCV1VjUG13cTk5SjJ0V0tYenZkUTl4KzArNWFQOTQyelR4Vi9uUi83c2N2dGk0ZGU1ZjYxY1ZuUDc3T1I0dzVaRmJjckMrOExkN2QrRVoyMkkzNUtNN2Y3ZExFQitvMjNxeGIyYm83OEpETFZ5eTc0SmZXdmw4bTZCem5hdzMyaE43UGpYL3JzNFVIamQ3UndWUzREZXVSd1NvRy9oRG4xdzlLc2RWZDk3Mng2Vnc1L28vbnVWUnMvMllLL293SWhrUy93V3hVN3MzRGFJOWhkSHlxYTNxUDJBT3lLUzQ0LzhRNTZmMmwyZmRkYnZEdUxLOW1qNVBJcnJIUGI3N0hIMmQ4ektzN3J1TGNmNzNTNnA1amVzcU9ES3ZSaTZLVnljNGpQdEczeGd4RWRYZFUrNXhGWlJpT0hiZFhObG1pb0ZmMUFkcmQxVDU4NHE4Ui9PMDdjakQrYkNqT2ZsQXZGRCtuZnJzbHEzT0hkMi9UU2kyZWZSZjZlMGhaOUxvdzRaWGtiNXd1K2d4LzJ5MlBLQjhmZFJ0MTY4VkhkY2Roemx4clI2MkhqeE1TSkhyWTkzelhpb2dYa1ByeW5KSFk0bGZZdnlsd09mL29qUzR6TE0vbWNzNHE2Tzc1NUFmeXVkV251ZE1jTCtWdjVmQ2s3TlVZZWZMTGNqMk9QMEF2Y21aYmpZaEhzTHRyMjdPcFhCaitXL1phc21MOEd2dUZoa2FMcFNrSi9neTMxMWFUR1NWUkhuMWRsbS9BZVpzMVcxZGVDSHd2SERGNTVUeEFuM3Z2NGtsenJnVzlBaGFvL08zNU9vbUpqTXcrS1JsNll4djNqcGsrLzhFODhjZmFCY2UrSXczQ3gvWTN2OEdWdERuU0ttanpRVVczelQ5cTBLZjYyNHA4bnFoU0l2K2M2WjJvWDZjazZ6K2xkMWU4YStvU0JlZi9tN0lYL2w2OEhsa1FWK1VRYytlcFhXbXpBVDgzYUUxZUxKY0UvMGRQQnYrSlA1TWJ2NU9LL1NaNGNkRk1ia3gvTHRkR1Z1S2Y5SHA0dVFuODl4ajg5VjRaM3JkMXpQUHBib2xaaTFiOXY2bjRXK0xiZFgxSWwyNHZjSUcrbDViT1A4TDdrN2NoSnY3c1IvM05VNC9Idm1zQzN0ajZ3NzNvYi9IeDFMN2Urb2h2djNGMG56UFIxZ3Q5djkyRFY4WlhJZlRvTlhqTm5OL1lvUlI4NmRQb0duekF6Wkh6ZTBjazlWQW1YZG9lN3AzTlhQUEwwRGp6bW9zN2xMTks3RXZLbm9XTUdwVWxML0lpa2MycTV4YjdBanN1N2FKTERHd2pUdUdaV3lnNzRjVzI2dkxMN3oxNFc1Zm51ellPM3lGOGQwa3grbllyM0hiNFgyelpMelRvMW1QR2lkQ2JzNHE0TnNQWGI5QlM1VENzbmwybjRWVmxZZS9LMSs3ZXh6OXpuL3lxT2VaNjk5clp4VmZ6SUxYVE4xbW9JK3pUVGhwbFBNcURmS3Q4NklPTFRSZ2MxWTMxRTVWVmpsYnJlMm4vaUdlNzFsWllPdVRnQk9jeXVlUStXRnF2b3FGTFdpN2xjR3IvOWthWEhacjJBZlBIVHdrM3JIcURuV1RUSi9XM3kzeTRxc2tXdXR3ZDRyMy94N053WDRsZDBSNnJxVnp5eG4rdTZKL2ZUTGZDWG02ODVCYWZzazBqZCs1TnU5UXppVFdXYTJ6Ri9FUFlSUndLdnpYbU1QL0NJc1pOcU50aXYxT1hZOUkxT1lhZTFzczNxQjNpOFVwYjY4NWYwNGp3ZWYzUGNqUS9jNXdPYjFnaTRTVHk4eWR0dkR0K0JIOXdqVGR2M3ovSWNPOTNEZzB0UHdPL1dwR25SazJxMWRGVWxmMVl1dkNLNXN3cnBzWFI0M1VqOE1BZmZ6SjIrQis4ekx6NWJQeFo1dDU5ZjFmZmJ4Uy9FMDY1blQ5NU9wTWFrUGhjVGhKK0x1UHhwanFYQWptWHAwQlZuWjhBUFBSZ1V1djhIY3RITVR6TE9kZWFlODM3TzUrdzdPN2dwaHgxTE83WEZiOTJXUWh2UDFjRitzMnJnUWMvcmw5blhKV3JHSGlIZWJPcitXejJUWTQvZnIzcUh3LzN4RjVINVJvZHNtek5BZjQ4dm4vRUxmN3ZPODQ5ZUNzQWZiL3lBSXN1emNGNi8rcnp0WTlOMnhGN0tkVExzSXZyQVhYZkNneWV4YnF1WDVQQjhEbDRrNjV5a1MxTHdzcU90eHRJdnhIZExHL0ZtN2hRLzRGMTJ3YXoybnVCRG12SVJNeHpkMU0rRkw2Wit3WjY1UU1rYlcrb2c1enpTSStlaDcvQlZyaDhpYTdhR1Q1cTlZcmgzSS9SbFlWMkd2dmpOZnF1UjVGeEVOZnhSajA2V3VtY0Y0cjdmYlgveHVjUVpMZituL285YS9OMi9lOFU5dGVEM2VoNlA4TXVESEtyYzMzYVppdkErSWZ4bnB1K3JLeWRWVWZtOS9uZ1FwL1R1OXo0WnErUDNjMkxCdlhIdmtQL2RURFdyYXdQcys0bzJPcFkzZGh6eTBrcVhmUHJ6UG43dGpkU3hNOUJ6SkR0Uk1iNEtkbG5ObXA2K2tBai9BY3ZHenQ4MmN3YnZ1anJkdC9qOHdJNXIwZE5iYWlkMmhMbE9XckljSTk3SmhhUFRwcmRJcHNhc2ladCsraE42cTFkemJ0M0FicjNvc2xaakZoRW5iVjdhalhuL1ZFK2sycVFkTWI0dTlobTVqbzM2R2JxYzkyWmJMcFZ0UGhqL1VFRmVYWnlKQjNaMzdRT25nNXhudlJvc0NNayt4MUUxNy9yeWVIWE85YTdCbGlNNThadFdNY2U2K1ZmUXV4ZDZNdWYyYS95Uk9PNSsvT05LUCtML2xWcnJOeWFEcXhyejQ4QytQdkR4bGd6ei9lb2lsL3grY2xLMU9PSUZQcGx6S1ZNai9LVjlML0cyVEg3ZXc2ZS9QYkR4SHV3bVZpNWNNTzQ3OFNCU24rMjNlQnJ2UVMrdit0NWVjWTZGRnRrL2FENXhlL01PZTkzcE1mSHZMb2RiZG56ZjRheGV1SGFaNm9BODROSGJOb2xEQ3JxcG0wVTdsS3d5emtOOU9kM3E4RGIyNFlMeW54dkc4QzdoeTllaks1SmpIL3lxaTYzZkFPeFFMejFKZGUzdUZ1TEtmSXc5OFlyM2k4MmFUbHYwQ3ZuUWhGMUJEdy9oNzNmSUs4OUxmVm9oTDF6enlNTjlLM1NxYnRzS0Q2QWJuNTYvRE8rSUhNZmZkMmdqVC94WmJnOS9FM2xoRlBxY3dWNlpGdUczdEhCK2RmVXE5aDJmYTBZVjY0R2NZUHJ6T3MrT1lIOVllL2pYaHg3b0dSc092NVFwRnY5ajh6OCtQdVNDZitmUWo5VmJaY1ArcWVPcFFzZUQ4Si9UdVczTnU1dWdRMmV5dmVxK0NMK2ZqMzlkS3J3SGYwZ0htKzVNcytJN2RoVHZPaTNac014TlJWMnZsTEVZY3NmTmFaOWNTSGtkUDJscjBnUkY1WFZScnBFQlF5dHZTYVRPQm94dFVBaC9ZQ25MekNxeWtQbTh6Smh2WjNyODlGYjBYYkMrTm5FdGIxbzhNbDBqTG15eE8xOVdWeWUrK2VrYXBhYjU0cGN2Wmw2WkYzbnhTM0ZzenVJLzNwd2JjNjR0UE4zK0QvTG1sOWRtUE15SlA2ZXhQOWRQZE9iY3ZWbDV1UDhpL1BVTTZ2aDlNUDRQOCsrb2x2dHBBZXg0aHhiOTNRQy9jZFVicDBzekcvdTh6SzlIM05tTXZWMk5LUzl5L2wzSVBYZVpZODgveEFmTWNuaDA5QkRpKzZVTnZiTnBiM3ZpQUt4YWNNQUZQd0kxK2x5NXRwTCszNTJiZjdnamZvbWNianovZFl3NDhYM0hlNmRxZnQxZFRkM24zMmxtUzNjVjZCbjJ2QmwyS3gyOFVpK3ZqRjg5L3c4ajE5NGsvbkxWL2dlcjc0Q3ZmdHAzWTltSzJHK21leEZWZVNiK2V4dFVkWEszc1orMis2eXZNbTAzZGpJcDNlWm53VzVvck4vbXhlbndMOXR6eTliRTgzaC8wSGRxMmJSWFZSTFZiWmpIalBUZzc3bzVCOFl0R09HbTBrVStHakVVLzNHdlprK3YxREVPUHpNM0NrMnNoanhvY0gvM2NkZlJoN1I1SHZQMEovalc1a1dTOW1sNU4zQ2pUbUJNcWRMSVdlTkc1VWsxa1BpelM1TjRyRzZOWHJEcWxuVGY0SHMzN0poeDdRUDYwZlkrMCt2UElON1IrajVocWNmV0pENTJ0d0tKOHZKdS9Xbk5oV2R5b3k4L1YrbkcvajZqWEZVdm4rbWZ2bTFHNzUwc3VkTlU0bFhzTDdBdDFkUUI2Q1VLRDBtLy9UcDZxNXlIV3A3QzNxdnhoQmQzVjhMSDFIcS9vdmRzM2plc0c1RGxTQS9veFlTajU1djhKVTVrN2lVUFBUY25kVkN0bXY3YWxRNTk5Wmo0YXc1WHdqaXY2elo3ZXhxNzBjNlYzL2M0VFB3TjY5akpPWXRnSDExcDRiQ1p6NEtTcW5MeGkyLzJXOEQ3aW54SlUrVEF2M2JLSHgvN3ZVSk9HL3I5YzhNKzZFc0tIZDU3dGkxNi9Xc2psdTNQamY2eWZPc1U0WE81RndYM0RxZ3pHMyt1N2xrY0trN24vWjluaTkwSGx2QmVOaVI3bzdHcDBNdFVmSFk4eGhmNzMyYnpDaTFxY3dmNTBmeFRpNzJEME5QOVRKZTlQdStBMTQrWVh6RWNPRjZJT2Zyb0IrZG5UZmMvK1JyREwyNXIvWDZpQ3dydHVFTlRoMlpEcnZiRnNWamUwOWpoTGV0MlAzczc2TktmamxsMjFlRTh6bnVycFU5aTlJTWplMFp2RGltRW5WVG8xRnlEaVFOVEtjbTQwWlV6dXFndXN6cjR0aXFKbitrK1F4L0VJazlWT2ZzVys0cWZtQzhyeGx5Y1Riems0UTFPcFQ2RmZVV2RRdkd6RnFBSFREN0F0V016M2tIZWZmMCthQ3puUm9hbGZYZFV3eDcxMWNzdS9YTWo1OW1WYmNhUlR0Z3pXS29kMnJtYysxSDN0MDcrODlGamhxeHY4amgzZXV3Slk2ZDJpQ0VlakYvN3JlSFB1Uzl1N252MXg5UlR5TCtkLzJRdUdlYWl1dTZkdEtNdC92MzNUcDR3ckFMK3lxcEU1aWppaTkrZzhsbjdIOXJBK2Q1ZzBvQlN4OUFiTlgxeGNQMTE3RWtxeFNmYmtLOHk4Njh5cXZ0TDNwbFU2UEN3V1dyc3JPY2NibnphSDc5Qnp3Yk5ybmFhOTZnckR5MTV1U1NadTFxL2FzQ3FiOFJqSFJaeXFzY08vQ1pYZVYxeGJLKzkyTWNYY210WGgvdFZ3NmF0UEY4UjNiRDlRTWVCanNTVjdKaXNTVlovL0wrOWQ5bjRvYmpJblRkMGZsb2JmMklQRHM4OCtEYlNVU1U2ODNOamJmd1VaTi9adG41OXp2Zjlmc1hqU29YQ0oreStjZlVqL08yYjFydDJab0MrdHVnN01Hd1c3d0VxcDEwMDJBcy9ZNHMvRHZwV25YZWFEWXBlYnRzYS9XVHkydG52ckNXT2hOZFV2eDU3OFhPMCsyMnpXV1BnZHhMNWVnYU54ODc2U3UrSFVTbVFZN1krVnQ2MVBISGwzZU0yejd5S2ZQUnkvdzJKeEUvajZQZGZqeVlYdVZOc3dVYWY4WVBmTTIrdjBzdTZ1S29ramhPTHIrZGRhMFNpSk80TGlDKzl2MnVHVmUrYkVYOHo2ZE12RStFTGN5NWJQRDBIY1R6dVhrODB0UXYrZmh3blR4K2VDcm05Ly9vVk4yL3dYdEQ1NU9DeXgveDVGelRsMmJjaDN0elg4MDIvbWg3NVF1dlF2eXQzMUhkUXFYMjluc1FOd1Q3MndNT3lEL0NUbkNQaTlLYWQrRW51dURSRGhzYjRKYnYrUGRlTjhkREQyL21udVZWTGxsVDltcEM2VDZMR3ZLY09ITHAzTVlFVDl6c3UrSjZCdUdZSDM3VHYzNVAzVFhWVCtUOWRYcDc5Y2VaRmx2UHQ4UXRRS2E3VWMrVExXd3BVREp4RFpMZ3k3bk1LNVNKK3lzUDJMMTcxT3dNOTY5WHZieVg0d1IvalNybE1TOC85cSs2dHRwMTV0MzhyZGNFY2UvRC9sTy8yeS9nbHlDT2lMbFRZY0hja2ZqcHZKN2RlSko1YWRMWmx6Ynl4SDk4WHRhN2hEZTQvajg3OVdlZUxYdkpsMng4ZTNZaWpsbkxSeDYycHNHTWFudUxsZ0tzZXZGT3RZSnVVQ3o1K2ZzZjF0ME9RODZ3NC9uajZUL3kxbHhyNzRFNEo3SnozNTM4ZlVCSjcxYm1QbSt5c2dkL1p2TWszdmEyQjMvSFJYNjVPcUlkZnJjWjNOL2RjZ0YzQnQwTGpldmJEajgzYUJ6bnJOMEIrNzlkMFVYbllLblY3U3F2ZnBYbnY4WFNscFVZVy9JenNEd3A3MlIzL3VJOFRoUzl1ZzExVTAvWEZOelNFenlnNXF1bWdhc1RWSGVhVkliQWxlb1gwcVVOTFhicnRycUtLandrb2pCNzYzcFlmeHhhc2NGT2xidlk2OUpaNDdtdnpXemN0Z3M1dDltd2YwQXIvYjBOcXFncGZPTStIN3htVGZ6TnhiK3JuV21qejR2M1F4Z1A5UjZhSG5xU2NNNmJYRGVKWURkbWJOMDl3ZHdjVjFMYjcycExjazNwNVpvNUp6Ymtjc2lGL3U4QjV6bXJ0Y3UvWEh5czZxelRQRzM3b1dOcFZlYWE2MnF0a0tRK1ZxMktoekRHOFV4aWYrbkRCTlhXUkIvajd0Sm1IdlAxV2JFRDRGZXlLaCsvb09hNC8vdFJhTkU2NllnZnZZamJOSE5kYzRreE5LRmM1N3lqODRSVzRNUExGUGVTMVUrZjJhRjBIUFdxRTA5cjFuYmU3cTM0RnZ2b214VjVqUW8zUXVkUHc3LzAzL2FlSitkZzNYd3ZlRDA5bWRWVjlmOVV1M1FkOVpHakpyM1hTTDZTZmJFWERPbUwvbW1ObTRLVmNRa2RlenQ1eUFyNjJma0RhNUpPd28zTmNHQjNUOFNKKzlEYTllTjhBdSt5bld6cGVqT0o4K05qcndMUDArTk1kVlBuYTk0VW5uTEgzRy96b08zWWtGNTRkaXkyeDMxV2xiWlpuNm1uMEZIZGVMdlY4QTMvK2JzWWk1M3JFTmM3NGRYYVZVdGhMOXZEUDFIRXk3K3FiM0xNZE84Rzc3d0k1aXljL1RMOHp4dmRiZjQvNzhxZFR1ODRkb1AzRzQ5NnNIbzBlczkvaFo2K1BJdGVhK21uKzlhcllTMDVNTkxqelF2eDBsd3lxMW1qRWJ5ZjFzbGFCUm5VYklsKzlXSGJzMjZuWW1WMnVaZG1Ibm5kSWdPL2NHdkNORldiMGVMQVV2ZEhub1ZlYkI0N0dIaXJyOUdiMVhqc28xN05uYlM2WG1kKzc3bE43ODM2aDc0TjFJN2J6SG1adm9aVjNGcUFIY3dwU2xmS2psN3ZSK2Urcm5yd1AvLzRwMlBVTzc3ZWpYNHpLdmlQWVJVMk8zbS9iLzhCRCtYcXRxTEhwaDd2eW56djRwQmQrNDNjVlBsdkhGZjVwOFpTRkk5ZGg1OUx2ZWZFZk9jV2VJelJqd1Z2WWgyeDRQVGIrTTNaZnRRK25mREVFTytvUEdaMGE5OEt1TTBuVEpaWDdjWjlZczJaWmtrNjhxNDl5TFZjaTR3cUxPbmx5eVozcmc1QkxwcHIyMUFlOWluZGdnN3M1RTd1b0J4dTIzVytBWCtyZU9lZVZQb2tmZ3ZPT1A0NTFISkpZYlNnVXVzT0tIbVBDbEpzMzVzT2ZkcHhWWjl0QTRpT2N6NXhoWDNYODVSMDhVSHhoUStMamJQZmZuZDhUUFdXMXVQUjNQSWozbm1YWm5rTGQ0WHQrVE0zWE9nLyt1dzdFTG96cTFOaERYZXUyY2tqT3JzNnFSdS9rdTd2aHYvTEVpMk9KczhFWDdscDhLOWh0S1ByMnUyTy9URnVKZmZ1R3hHbFB3MmZtYjFEL2VpM2VYVDl3U1R1c0lPTUxiM3k4UXNyNitPY0x0RjFQalIxVnJtbWV4WGR4anp2Y3JPM0Zvdm13bTZ1eHNFTXE3STkzRmp2eHFnNzA5TXluZ2QyNjlYSlhGU29QdU5FSlAyZHJjNlcvVittN20rcDFhL0NxajVOZGxOWFdlVlFRY3VqOVo0YVg2Y3E3L0ZHckc1eXBocitidGo4S3o3NUx2UEhzaGVaVStJcjlTb0VGSDlMa3g5OVlubFZYV3I5QUxtQVorTWI3SUg1VTVyazNIaTN2Z1o2OUg3WXlJM0xRWTlHVGpueGgzZXZrRDUwZTd1Mm02cDM0R05Xd3VLdjZ2S0JRNllYWG5kWG9Qb3Q2dTVkeVVVdC90L1lwaHoxYnNSeVpwbG5SdXlTNU9MVHJKK1NNUzcwRHdwMndaenp3dS8vSkM5eVgxblZKZm04RTgrcDk0TmZiQi9INE5TNTkyaHFESGFucjV4bkZHMkFQT0Ryb1kvMUJ2SitOOGpyeGZoTnhaTnl6M3FnY1hkZEZYVXVWWTh0NC9ENFA3UjdzRVQ4SVAzMk5IMllxeHJsNFpmN1FpQ0xZanc3TTNObmlocDZyOTdyNFExMCs0djg0SWwzeFBiMko4MVQ0Zm9rbHk0REROVndLanVTZFkzektNMjh6SmxhMUo3L1BOWnM0SGQ4WFZtLzVITG4vRnBjRExZYlhKbjVndlZ1VEQ4SHZQc3R5NEhsWWRHSlZhV2Y0ODB6bzkyZHZlemY4Sy9ZQnUvNzBtREtaKy9hc3VyYnpCYkRuUzFZbVltMTc1TEhmUXUrTjhjSnUwbmZGa1dPaWIrdTllWHJWTEhueGo1ZXZXRkFoM3FtVjdsRDI3blQwaFVzcXZobnhIYm4yMXFPRFVzWVFYNngycjA3dHh1RnZaR0NYRFpZZm5FZmxleStjbFJUL0tabXZIMjVaRmp1UzhUbGYzcjZQWHFoejNqV1BTcTNGcjByNHZyUk5pWnI4dC95aXJJZDVuOTR5WGNEWDVjVGQvMW4wVTFSYUIvakg3MXNXN01adlFNaSt6OTRsaVNmNVljS3BveWYvb0FmMVhyQzRKbnFFSkxrbStNWTJJVjdHbFp2WlIrTlgyalZ1ZDVyMXlDVVdXVVpWU0V3OGxKZXYzamRMejMzdlo4RGFTNk80eDRZMmU1NGhHbi8xUTc1VnZGVUMvOTRWdmx6NVVSTzd2ZDRsWWk0RklCZFovOGdweVhEc29ROVhPRHkyRFBiZlUyWnQzL2w4QWZmbkVqTXF2TUorYk9sVmg5K2VNOUZIWnd6ZWVZNzc3WWl5TjViTndrNXJaOE42ZjFMakwzQkxsbzlEdjZDUHlEZm8xOTd2NkJVdTUvWll1UWo3czV6dlU3ZXpjVjladWlRKzkxYjhnZ3o5bWppaitQdXB0dTZUM3hYNC80RytFM2FPeFI0MFhjdSs1N2NTTS9ibnRzcmVRNGlyWmluOVoxNTM1TjJ0VDdRdTVJVzlZZTQ3UlJ0TnhCOVppeGtINTlRaGp0K1JyOThTMzhFTzRIZjM4Szh2a2JkUEc1em9mVWY4b0UxSjRmTm0ybFFYdFdkT2pReFZwK0ludEdteDNySDRHNzdUOVBXQjRSUFJEeTJhdTJVNy9zYnJiUmtTNDhBN2xkSDdlbmhOUnA3OTNLbGxnWDBFYWw1UzRMbmZQT3c2aWppNDVFdkN1NXU1UjE1MlQwMWNoRGUrNjVvbEk0N0FqUG41TXk0aG5sN0dpdGsrVitWYzdYckdZZlVhN0orWDlzejU0a1Z2M3NQT3ZQM3c3RnppNDUxOEVIc0R1Y1RhNDdiNFNONUhsSzNmNmRkVDNwMUdsbTJ6dzRlNEdSOEtaYmthd1h1TFIvc3EzdWlEZnQvejNMM1BTYkV2VERVMWNPMFgvRE1GbHo0M0t4NDl3NlA0dm9XRDhITXp0MkViajZHTDJXZTVISDYvNW0vSDVHL3lUZ2gyVnRkTzVBeS9lY3RkblJ4WTY4ZitsTWpicW4xcGw1L2ZsM2JabnZqWmFlSVk5VjMrZHhIOG1tcFpvWE1qOXZXcHFwRVgxL0RPS2MrMXQxVis4RTR5Sk8vdkxyTTRuenI5ZnBybitrWGl3dTZwK2ZwTVFmVFJSNzdQWDRqZGRLRDd6ZFVPdkpNK3V0ZXovWGI4dWRYTjBXeGlKSExTMmVlZWoybjVtamhweDhlc09jNjk1MlJBM3RZaDZIT0xWWGhiOEFENjQzTXg1ZmJPSU43Y0NjL2dGUjY4bDVqMUt2djZydHo3dmM5dnZuOEgrOVVxZHhhUEtsb1RQNkVibndkMjUveDNyMzkrbC9kVTNqSE55Wk4wQU84R24xeE9VUzByZnMxL0RkbFdlY1p4Ti9VdWRaK0RkOUJYdlBBdmtuVWJjZy9ia2VjVkJ6Ymh2VldmY2I5TDRNZWtZUEdMdGZZUUY2OUZvdFpQMjJKZjIvSDQzeTIrV2ZCWFdMMzZyVy80YVF1dE91TmpPL1FPM1N0ZnFSekdlK1VoMXJsNW43KzNLTjhVdTErMngyNnVhRXhZNElJOXZIZjNTWnY4Ty9wM3dnbjdkK28xeUM5ejZaSTZLbm5qWHNSdjdoWkFkT2NtWFhyMkh6Qm9rTVFUbGpMK2d3WUVEQ2dna2JxYkVMdTlWLzhlT255NFJISXZZSytyS3hRZ1J6TEwrUGVSTDByYS8ycHMvN2VMVXVVVHhEMG1aSlRpZVlIcVlYUHBQWGwzaitPRFB2Y3ZWK1pMZzAzakdpZHROS3VuNDhvZER5Wm1TbnM5c28zejFST2ZwVXpaTFNHVHBGeSsrRVYvcE96SGtqNGRwUHl0Q2JaZFVpZFQzd3I1cEY2ZmszNC9wZTZJTEdPOXBINmV6T0o5VGRuanRzdC9FL0E5S1AvTk1MN0gyLy9uZTZiT3A1dzlGYWp6WFhRNWpoYjdmNFRNc3Y5SHZ2MFhMTG5zMzlRM3ZvMmZ4MC9YOVJMcGJ3ZjlyYnNaNzZvVHV2NTRzejlkWUx3NURtZWREMlZTMlIxdVlWL1QxaUU1Y2ZEd3NLTUdTRXgzdFpLVU9YYjg3TmgvUzZFbTJ1TkhHN011WW85aTM4Z2VUNXFvMWZZU0Z0cnpVRW50SzhFckFudkVjeS84dEN0MVgvbTlPWE5ldVZWTVRpRXV2anBBTlZOV2RlemZiY25GQVo0OTdMc0pXaFE3TkZmU0hpNWUwbHpvbEYvd1dacmhycHJHWGxsK0VFdHJuTGRRT1JtUnJqSEhJWVVQQy92NERMeVEvNUx5dHlPamxaajdpSmJzLzBsY2RSbU96TVp2eVRrYVJtbnJiaS9pUTVCOUhJd1FxaDMxc0wwd1pzcjJFWGpxSnIzc1U1YXcrcjQwbmRLZUIrdElnMUtQeDQvMmorUVJlVmIvaXNtd1BTVTlDUEQ5WnAybjA3K1dwSVRFTXY3TFJqOEdLSEZmYkI4KzF3RDczTm52ZkF0QXM2aFUvMDNMalZZdzJMWURXY1pvd0U1QUlTUHh0TGNqWUNJNHRVcHVCd3pITnJtdTloRVRLc3IrcjlSSkN1Z1FsV3Z3WVF4RlBXTXM1bnJJUjJab3BxUWY0eit6SEtUUVBpWmpyUkNFNjNMeXR5eUpRRmRLeXNmRmppNENrMlRLYjlsRjRBQUZOS3I1YlpjL3hlTytmZXdDS1FPYVJydlNxL3lXUnVjSXhHVmRVT1RaeTNycGxvMFI0dWJ0anpTM0JnYkIrTS9iRGlmcHpLaHZyb3ZVTnBEYlJHZjUzVmgxRXdZRzNHVkdBaDlqYk5LZi9FWkFRVDEzUk5iVWRiYlhFNGdhdnh1cithOFBHYUdncGZ3cStjYnFHYXR0ak40QWgvbXYvQ2N3Tk9BdGN6UjZOZHN6MWwzK2NyWFhkN2ZQN0YvdkFrM3B3MWczd2hUWjJ6UG1JTC81YmIwQ25MZ0hTd0g1UVRhZE5DQWRHWTBZSUpVOEE5VFNqZEdZUVFNQTlnZHBCQ1dhL0dqTXgvaVdmNlVBNXVqMitVcHpSaG16Q1dsVVJpVlFNdW9ZY0RGeFQ0Wmhkc2FqYnZ0Z1FKYm9xM1JJdERRQnRYUW0veG9kbVJVVGtZZTBLUUVvVElEWTBXTnpDQTFjdEJqTGFReEhCbUtVd2ZyUG5qYTN2MHpNSEpJTTFDaG5wSTNOWk1CSStqTVdUVnFUbEd3R0UzTC9rTUNzLzcrQU1uNHp3V1J1SStQZmhHQXcrcE1aR2dqbU56NlUyYnoya2Q5TTFQMVhSMW95NlRWMnhmWWFNaWRqREFiTWlPT3BrY1JZSG1Pa2tyTFY1ZzBGL3JGczJmOG8yK3NDeWpaNnMrcFRDN3N1YkVldGtRNFcyOHZNeXBhVDM5NXVWVGI4M2xqeERXTDdzRm5acW9SYmJLKzNxcUhCU1pVMU9KMnk3VTJuWExhblY5WUNmL0MxZ2IrUTZ0NlcrLzYzTExZN1BzcnlQSU9hRkpCTTJmcWxWMC9Rd2RwNEoyakRsNndOdTdzVXhPcTM1dnVqbkVxbXNFUVdMS3hzdkpHMkRhR3RNOGt0dHJ5UkZodHZWcTJ6UFpYdGpZK3k0Wi9jMXRSRjJWNHh6dC9PYWlUeFJteDl2U3pXby9SL250OTMwVi9zVnZVRWZic3RCMjdoVG0xWE5nZmFlYlZWV1ovemQzUUJGWU9QTzZlUTVCYnJ2UXpLZWp2R1lpM2phckZoTDJuRGQzMU1TOW9udGt3c2R2T1o4VDFqZThlY1gvaW81UGd4c0tXbGZ1RStGc3ZuM2hhbkU0emhvWTk2eGIya1R4M21YeFgrTVJkdklmQ0Rab3Z6VVZiaWM5cUlsV25iem5nOElpMFRSakgzL3VtVjdhT1B1ai9nbGlXUXVNYVducmNzMXJzeEZodTJCemJpeDlzaU15Z2IvaUJzRHhrWGN1a1UrTVIzcWVldWJNVG10V1Z5NWg3TU9QOFdVRlpzSld6UDZBTWZPclpud0tIYUs0c1ZlM3dic2Q1Y3NQKzNmU2lnb3JlbFVTN2hxWlhOeHZqeG1XZDc3cU1lNWdXMjRJRzFCR1d4ZjdMeFpzK0dIeHBiZkFibE1pbVpzdUlUMjRaK3lZb05zZzI1bU5PWmxCWWIxTnY2bVBFZ1Y3VVJJOElXVGIvRTlyUzVSRm8rVkNOdkRYaVFPdEppdmNNOGJnSC9NWnZSRXpEbjNsNFdXelI5LytTZE9EcFlLKzhNYk5nZXh1QlgyVmJybFNYMWFlYkFtM1liZG1vMmZHN1lpSjl0bThLNDRwbFBWMng2cTN0YVhMRVpkNm5zYmJIbS82T3M2S21keXRFditrb2JiMzF0VWJTTlROSG1BSDdrK0tPeTRYZkw5aFFZNGNmUWhnMnl6VVk3MktLNkZHZnRyekt1UzN3T2dpUHR2WlJMdnRRVzZ5aGdqdzdCUmtBT1d4L0dpbjJlTFJ2ajhaSjFvQjNrQjFac1V1OTNaeTc0Z3JjTkFxK2ZzRDRwNk84YmJUZUM2SjV3WmIyb2t6M1NZbm5BSHFuNXloSUNuMjFMTGpqcm8yS1IxVnBqTWl0TFhHK0xiVHJ0Vkg5bHNWa3BONUY1eHJHT3lCYXRlWmdiUGlCZi9mSlJQdGptMmZDN1ppTTJ0ZzIvNUxZcHR5eVdpQXpLZVFYcjVrTS9QUmtuOWoyMkp6N0s2Y0EyWlNVR3ZoWC92N1pXeEJZcWh4enVISE4vbjEvWnZqSCt0clRORzM5YkgzQU9XM2ZyRWVaK25BOStvWnpLNFJNU2YwaTJHb3lIaTU2Vk4reTJiT3h2Yk1Oc1VjenRDSHZtSHYzZ3U4eUNuWlB0WFFIbGtnUjRZOU5rWFUrOVFwUzlERHlKN1diakhtWjdUUG9EdjMra0x2WUp0a0ZlRnN1bjNoYnJiL0wzMHRaN2NPWVlmYjhGUDh1d2o1R1oyQlE0Z3k0Z3RoUHA0ZWxVeWhPMGt3UzQvYUZPS0IvMDhiYVhmRi94VVM2bFBaV1REZmlqRzdMaHQ4S1dCeGtyOTNsclh0STVxVE9VdHJHbnRtVWsvWlk2enhuTFlNb2pDN05sWWF5NXlmOElucDVncnVWb0l3QTQ0bC9ZK3A2MWlBTzMwZlZaODdJT3ZKbTM4WjdVWm1XODJIbmFpdmF4V091QkErbkpIMGI5UkpFV2x4QVBaY1cyTGZZNlpmN1NGL2RjR3o1U2JDOEtLQXR2MzJ6dHZOaFRhVldQMGttVkMzZDkyMjBaRDcrVjVMZUI5UHVJUHBGSjJEQm90MTZDQnR6T3JLd2QrTnViTWFMN3RQMEJoc1dnTWRIZ0dqYllQdWpwTFIvQm4ybmdUM3JLK0xxeTEvZ05lKytSVjZCOXlPbHRrUVZVWnVSc05tUWZ0Z0xZMlEwQ3Q1RlQyWkR4MkNLQkJiNk5iRDlvVjdFWDRBT3M1eGdUOXJuV3Q3U1RPcDJ5eFBDTmYxbGJabUJWZ2pxNVdKdWJsUGtpNjhxYVl3TnJJMzZlRmQ5ejFqRG9KYlpwVnU3RjFwcjhoaDJvbGRnc3RyT3NzMnVreGFrNCtIYVh0a1lBcjhmVW13cXVmOHl2UXNKbzZ4TmoyTTlhdVZOM1BQUGhMWTZWK0FuMys1TkcvMjdGOTV6TDJ4MnFhVFBnOXA1eGorUU1xSmpCWXVNTnB2VVZPTTJiUDAvaVM5dHVNZDZkMU1rRVBINnlGNDZrc3RoNGoydmJRUjUydnNsNDQyODl1RjFaWGdEckFZeWpFdlRFRzFwSTdIYmJYOW9aVGJtY2ZEK2xuWi9zUTN6Z3ZlcU1QWGdCOWxsbXlpUmpQL2U0WlhIcHlGZ3R3S3dEYXpxQWVRMU1yeVlNWWo2OGxiTDlaaTVwZ0JQdkJteWpOaXVuODk3c2VmSzZzOFlqRTFsc3lHZXR1WURuTGNid2tIbWQ0M2NmOEtmSk5wV3hQblJwSEdVZjBUL3ZmbXo0RUxFTjNhd3NIMWpudTVtVlN6SE9wc0JiRmkvZVN0bXd3M1E1RFIxZTY2aXlZaU5teTh5Y0p6QUczalhhM3RKR0ZHMGQ5YlRZUHJEdkUvUGJkOXBFUjJ3Tlo1M3dxV1o3eWJsMzBWSGRMNTJNK3l6MXFyTG5ud0hiYTZ6SEczQ2xHN0M0eHg2ckIwM0FGNEFOK1pJdEZ6aEhQRWhiT0czeEhzckdXMjZYZXRBNlloVlkwOUlHUHNHczJjbEhKbXN0bXhiWWtQN3NvekpnODJJdHhlOW5PZU1HQXIrS3FTeE9nNWtMTWQ1dFZjTXQxcktVUXkvUXB5WjQrNWoxU0JscHlaNmNQbTJNSlpveStJaTNFVi9jU2d6U0NXT1NxVDYxS1plVlB2QUpaaHVWVGswWVNkdHJnRW1zNENXZkErREhoYTBxT2w5aDVjYTdiTnRuNEdHbGpmM2c0c3NDS2tzajRCVkp1UmRibGNXV1FhWEhaNHF0WkIrTERSdEtXekpYaTBzWnptMzB1clpVckNOMm90WWYxTDFQK2EvZ3hEdldEZDJ0WmZVSml4ZHZuM3I0SmxYUnlNcWorckczOG0yREJvRWorSXEzOWdVdkxNRDlBdlh1UWhQUWo5cGlvWmZGVXl2cmZlRDNpblo2d0orMG91MmtsTHZIMzY4cGkveHh3bWptNDBuZU8vN2V5dmp4YVdjYkFyNzZDdzlGSDI5WUoyZCtMODZZaWQ5bGZadFp0V25PM3FnTTM1V04vS20zTE43RXE3ZUVRME93RjdNNU1vL1N3R29rYldBdmJ5TUdxQzBEZVRNNFIxNkRWMStCeTVjQ0toTzJvN1l6UGlvbWYySGxjamlWNVZWYjlzY24ra1FuWXowRVRIY3dKK3ducmVnTU1xYWhiRjkrajAxaHNRMVBCTC9DbklhbFU1blEyN2hVcFJ4K0cyMHhqUE1EODRyZ0xSeDZjWmQ2N0FIZTVjUWlnN1RWNFBjbzV1ZlBtUkJMR2E5SVN3ZytrMjBIR0V1SlBoYVhjWjRXcTYrVGNucVZ3bUlwRFcwYkI0MGVKN2pEdVh5QmZjeTdYQnMrUG15RGFiTXUzOWpiMjVDMVdmRzdPUFFvK0lGL0lodHZzMjNZQlZzSkltSjVDVDJmQUU0WEFXYWZCSy9oR2JDcHM3a0RoNDNDbXptcnV6Y1l6MlRLdkpJOVVJQnpISmhHa1A0T25lNUZmaTlpVUY2RmZwZGd6cnd2c1ExbmI3NWczc0hibGRXRE1lTEQzdVZ6ZXBXQk4ySzJFZW1VODNMb0JuWTF0b0xzOXhIcy9WNnM5MjhMdE41SFJSWXFySjZVVHFzczk1bjdML0F6Nng5d2tYUnE2bWFCSGx4M1ZkYk1zdGZBSFdLZjI0alBZTTFOTzNjbzg0d1ArbmNiYnh1c0o2RkZ3Mmg3RVhQNHd2elJoMW0vMDhaRnh2MFIrQk9md2ZhWnY5MEV4eGdMOGVSc1lyUHhJSU95UkFHVFcvQm5kL2s5akhuZzQ5dUduMEViUGtPY1N2RjNHUGlESHk4Yk1ub2JjbVZybW5UNFhQaEpHK3o3TS9BWitjSEZHUHhWbDJNTjhGTm1HOG80M3JOSGNnaFBTUDg3YU9zMHNMRXhycG5DNy9OdHphQ2NqbmxhUmw1ampRTEF4d2ptOG9CN3dFUDZDb0ZtbDRJUFdFMCtmcU5jcnJzcDZ4dCtKMWFkTlNMR2t2NEQ5YkdUdGg0R0Y5Q3JXTWVBRDlkZFZDcmVwTmxHazllR3NkUitaWm5wS05JaTduS0pjQWF1VGxsQ0xGNzZIalpCblZIZDdha0dhcjdLcWdyWkJTVU9TTHlxMlc5QXhmUUZPUWVYYVJ5NHFnNy9YY1Rsdm9WSENvUXhTcUhDNDc4ZFdxeFQzaTZOUWdxcEJUYm1MUkEvSy9hZWNLQ3JDdXRyTjdZQzNNSXFVNjRmSlFodGJ4ZUFpYUFHcXpZdE5wR1VLYk15eEV3ZDlFMnVsTDFIdVduV0pKQTM3N2p0dDFTcDFVUWhkdGM5NTJCR21WUkJ5aGgzT1hCTTMrdU1teWlPMC9WZFVXNzh5ZWt0SGYrS09BV1BjZmI4RXRSQmpVOVBPTXZWOThNTS9KcFQzdzJKZUdXWHJja29qWHRvT21vWU1nUXBJVUtPTlBZYnAzRlB4U08xcXM5M0xuNlJkbVYxRE1HZmVjWG5MUkI5eTd5TmRjcEIyaENQVk9ZZUxlSVZBemFPaU1LNHdjZS80czdMUS9wc1ZCUjVDT3lqL1hKTHFDVjluVGVFR1poYTJDVlF2RDFDbkdsY2loUFRuRFBOQytCRW1pZUFsZ25LUjhBcmNyZGl5czhhU3hjVExUSmNBWWh4a1RZWHhCQU9sUDN2T2k4VFQyeWZsa3lGQUlIL2lSVGtWK25GR2JtbVNNRGMrRjAraGpqU1FEYVJiRlMwaXdzdzVmeFBXR0RLMnRJcHY1alhqQVg5aXlGRWs1Lzlma2xXT3dQNGhvUklCQTY0NExUTEFBMjVrY2hNQ0pKcmwvV1pra0lCcFRFbitWM216dk5pZThPeWFOSk8wWCtpaGFnM2RETEFHSklwbWpNRmFVYUR4RGdFWUc1MndCbFRSa3VqSjI1SUdnUkREQUdRSWNJei9zdHZINUpnREs5MDdVSks2ZHlIUlVwQ3QyL3AxdUtLYUVrU00wa1pzRWlxa1YyQUlLdHNERUc2Tldid1Q5ekJVWlZBNkNPZGV6Q00xTG9HQnVGMEpQQTJrY3lRVXYrclk4Z3JwVzJSOFJIb1Vxc2NrRDdOZU0rWVZsbFNhSEdKaUljTXdCaHlQM1ByRy9JMjQyLzVYVmJka01hYThqZVpGYTRQLzVQaitwQmp5ZzhGcDAwSm92eUd5c3NPVEk1UmUxdEdLeWFHaUtUVi9FdGFkRk4rZXo4d3lnNDhQZEpDTm1sUzZBWXhiLzhUT3ByREU3UXhWMWVRWDlaU0dqVGtVNFljVGZhcDBkby8xTVRPZTlsSHVwbU14WXlIZmJNWm9tQlREUGlQNHZ3VDZ4cmdsdTBoSlZML0ovc1NIWUtCcEVTWDBuSXZrL0tLWE0wVVBqdlp4eW8wMWxRWUdPT1ZaZkRiK29uUmNNMDBvV0lTYm9HWkNTdjVscjNoOForNlFNcEpqckZqQkZrTklac3hkRzl3dzJqRkZMNlpZT041Z3ZJTCtpeW9DaVEyU3dLWHh3YTVORmZJSUowbVVST1NaMUFLQXc5a2pXV3l4aGorNGJhalBWY29tY2k1RFl3d3B1aGlwMkl5U2xNeTdJRno4VGdaZzZoS0pJRVp2cWtwK04vbE1EYXVJZHlWV1FoNWRyWHJPMFIzSUQwSVZzdklqSTFwNkJGTXFmbS94UlJFZ0FSdC9TTDlRaWIyU3dLM21QODBCNFlnMFJSRkd2MmFMWmpDWlFQV3BxRFMrQmpMYWtxNFpYYUdBTlZBT2ptc1RObTFVZDRRbVBvZC9Nb0FpRDlveWxQL2JVTkRaRzRPUVJvV0FCaTRiUkQ5ZjNKWlUxSXI1QmtxTk9PYlVGZ0QvWTExTlk1azQxZ1RXaUI2SDFNd0szTXgxc25FUDJPZUFsL1prMFpKQXlNRTF3eHM4L3Nnbld5em1LTDJmeFFyNFVSTWpaUkJvWTNmemFQV2dJY3B5alVwNFA4WGZtT0lxZ1hVcHE3RHdBSlRzMk1TQkVPOGIrSzZTVmtFRTR3dFpoL3grdStNT0tVVU1mNHpLTDhoQi9jN0l6K3VaRHJHTVlzbDAzKzhoeHcyMHJHQVV0RE5PTGhOOVlkc1VmTzROTGFnOFRjeXFmK1VBckpseldVMzVkWC85QlN1K3BReEplWUpKZTZHUE41bzArL2RENzFkNGlYUnpWRGdtTDhhTlkxdEs3K1lPZ1VqMXlBcEJ1Z050REJPUEZPbDg2L3N2OFV4MUI5K3RwOTBsc2hPcG41Smt0ZGVKcEV4U1kwcGdUZEdZUnpmeHJiL054K3BZK2hyekNVMHljYy9kREVXMkMvMkY5ME1GTUpxVWorVE1UWG9oK2lpVExDWWUxVTZGTjJpMFlIUmxFR01SY05wcEEwTSs2ZlgrcWNuTTdnTHYramZBbUJHOEVNU3VLUDl4elFZbTFEK0Vqcm5GL1NIQXZkWUM2RTE1aDZRZG1TbkdhTXcrcERqNVorbTdKOHF4RGdZREVwbWpEZ2hrMkpRRGdONG91azBTcGlnTmxnU2FWTlExZXo1MytMOVU5dVk1TU1nR01Zb3pGYitJWlpaeXRReFFoai8vQlcxcHRHWlRPbmZjSXhobXdzaUtVUDNaaHdCL3hyOWR3WUN6eHZqTHlnM1I2R0p3TTRxZitCVDF0aXVCdkFOekRRSmlURlpnenlZeDQyNVVLSzROWmdYdjgyQk5JUnh2bXdoQXlyR25qZUxHeHZZWU1HTitScW4yeithdzJqZVNDTkV5RTJvNHpJSnRFRXVUU3FRVUt0bEhLeW1OUWRiOHVBRW1vRjgrSjJTaEYzSFord0FjeC9MSVAvcHRQNzFZK3JGakYwSXJNWlBwQUZNY1A2cDFjeDFNUmdLQWJmZllTbGtiTXB6a3VSSlZrTHRxVG1kZitUQjVPcU5jOWxVSFpwTGFETEEvN1RrQnJ6TUxXNjBCSGUyZnhLZFlYcGd6dHRFSjRQeitYY1FtQXBodzdiQlJGYVQ3cGhZWk9TWld5V2hldFdnQzBZWnYvMlROV3pQU0dMUFZ2d24vVnNsazFvWlBabjZRSlBDSmx3N0U0ZU5MV2NlS2dsdFF2N1J5OFNxTHFZdXpsaUlWZVBTaVJCYzhRaGRvVWhSS0F1VkE3Y3luSW9waEVtcXFad2tmRGNZcWRUcEJuaFlFU00rUHRBRzlaRUlueG5ZMXloNUZJOGs3ZmxTSHlXVHdpbWF2VDBwOThDZkd6S2dRR0dqTGdtVStPNG10MDYrN1NZWmZCL21kWjdaTmcvYjdHV2t2TFJydHJPWXdtbnhjbmtNVDBZRXdWRUk4VlVJWHZGSDhQZUxDVXAxRXBpUmg0Sks4WWpKWG44Y1l4UkxHakZwa0RiYnQ2UThaWWZJZnRaOUlSaFZHUmtqRGx2LzYwdSs1VGVFOWNxck4zM1Q0Uk5lTnVGMDBqNWVsSUVLd2JKOUh0S3U1RjNBdzRGZnYzL3prRHl6VFVrTFhLb1JaUUZIMnYvOTNSY3ZmeGJNaXVZdytLUlRqWEhKZUxZTTR4RUxuajViSUtUb2dKQUNnWlU2d0lENjZ2Vkl6Vmg2U1RPa1MxUC9JaFpZTEpGQ09LK084Mkx4T2FpQ2drYWx4NHR0Y3lKQUh1T1ZaUlNlTTZSOW1WTUEzeWhQRkVFei9vTVpvTExQWFdEVkhLRUpBV0grRy9zQmpTZUQ5Rmh1anlWNkxjWlhYdDN4cWd3ZVlXU3Rudkl4OFVEbWRvU1hucmZ3VXY2ZU1YZ3k5bEhVUXpGbWh5c0tHdnRZcStreEM1N0o5MSs4WDc0Y2pTWGpJcUl1ME83U1Jrck5HbTZNRTRHcWZYekJSTTdmd3dkSGd2YS9VOE12b1V4RGNtUzBLM001RGs2RTRFa2NwNW4yK2E0RlBqajJ0ODlWY0U1d1ErcGl6S2RhM3JJb2hPb0t4YmVhcXVmWlZYK2JNSkN5T0thMXcxVGtOekxXbENXVUNpTEtheEZ3aXFXMzV3bCttREJid0R3NjR6VlY4TS9FRVp5S1FkbU0vU1hsZXhFMWxZQ0M5dkg4WWJ3UHUySjFEaTdpRE16ZVp4N1dPYUQ1di8xcDRzMHhQZVp3eEY0eXpvYXNyNnl0dERrVFFIU2pYOWtQTW5kcEI3UzAvL2FBYUNFWWJ2N1hqc3hGMXR0Y0U4bm5BWTY5ck9DcDFKVjJCZWVLYWpqamNNQytkK1UzMlFjWUNhZ2lSRDJRdllCQTJpNXZFempYQjFudmFwaWRBbGQrTUJlUk5nbGRxUVZPMXREdFpDWmlXMk1XcHlKaXBoSjhWckhIWlkwRVprMHdkZnZPL1A5Z29sY1JCRTNDWUM3VHpoK2l1TmJUNHhRY2tubWF0RUxtdFlBeEhlRXpoL1U1VlozMjlUemYwazVqRml1Y2pEVFFnUmc5dmd5T3h2aUZwcVNuN1h4NnJpMzBubGhCbmRmMEwzOUxuMHVJL2k3NGhtRGNQazZCa1FtL3FnQmU4RWJxMVFkM2h3RjhnYmxKWDI5VklESU9iTWM5UGppdnRPY1B3c3V3d051a29ZMVlCSm1YNE1WRm5YOE5EOUVDUDJtM1AwaTFsSDFlaVUzZml6MGlheWJ6QTgzdHNPY3htY0tnUVNWaW5ySjNCRDZ5THdRWDVSc250SGJZUzN0UzdqemVkVXlhTEdWcjUzWlFINkU5V2NHak05QytPbnJmK3pUbGxSWmo3Y0w1c1Fxa3NiSStialJXQXk4dUZmZ0kzcHJuUThoZ1BNeXdENlZkR1pQQUpoaWF3QU1IZTFyR1l1NVhFejVTVDlhdm1ENVhnaGpYVUwwWEJhL3NaNGYrVzlaYnloL1hZeXVHQmFPMFkvWXZPQzFybGFFMGVBNkFCa0wwWkoya2phTjYvNkRJVk1NWjRCeDRwQ1RNZFh4YncweFE2dnV6RDBONFZTSTB4Tng3c2hibU9ycjVPS2hwMEQrWm4vUWpjN3dKdlNNQWhzSllRazNtQlRqQmx4VEtYQlZQdWRiZ3oyQzlsM0t6RDRWK21lZEVIUHVqQXZSQzZLdEpJMlh0WmF5eWZtYjdnL1RjNVl5Uk1RN1E1Uk9lM3dJL2t3NUwyNGQ2T0tnSVh2MmVteVhyeDFqWUE2Y3pHV1ZsN05LT09VY1RmbVk3b2V6aFZDRDlidGF4YWtNaUZXaFlQeU1xc2xsSHlyS2Q3ZU4xeEZwWnpuNXBNemQ0a3hzYVhsbnY2OTRyT0djMXJaTzZVcVlMOCs2SS9hdXNpK3c5bkNmWVlUZU0vZ2hjcUpyenlRMWRiQVpBT0JMdE9GNGNBbFNGZGdSUGd6RTFiZ3dPWHREakVwakttTzR6UHNFWGdYVVoxbjhRYXlGemxqNWRLSmVMRGZJUzNzR2ZqaVZDbzdtdWxZS2drZlNQVVpBZHhqTFd3ZURPWk9pVHdFck9XNkgxTWc0Y3VkdHBoNXlic2o3cEtGY1RRTWcrTnZHbE9VUnFKdkNiRDYwNUQrNG41SlBvM2w0dkdoNWdEN0NDemJDUDF6eVRaYXhDWTB3Y01QZlFEL1pld2o1a25WSXppS0pzNXVMUUxtZm81d3g0QXRFRENLNUlXZWxQMWxaZ3RrRFRIbWNpdlhlRmRnZ3NwUStacjdTWHE3VkJGNFFXWElRSGtmV1VQdnlnZVRKWG1Yc0ZZSGFKRytNNVBnSVhnUlBWN0wvdDBHdFJtdllGajJWZGc4Qi9SMml4R0JuTEhBOXBQSzRKUGw2R1B1OWFiT0N3ekZuYUU3b3E1NWVjK1R5VXNyZi9NUjh2QnFGbmVkbEUzakEvSm8rWkNIN1ZoYjI5WUlNeFZuUC95ejZXOCtoK29GTHRXSmZxNEJsT2x2NmpEZkpiQlY3RDl1SHNsTE5JWUhBRG1pcTBWR0M5RU5yRFl5LzdHdC9BTzJvdDZLRzBMK1Z3Sm1rZjAxc084cC9RK1A2MGdXTXplMTRQOW96UU5wa25qNDN0NDBuSVd3b3NMMENvemJHYWU2MGNMK2VrbnN4ZHZnWFhwTDFhZU5vdUFYN0llU0I1V1VIQUlNNENRZkJSR281Q3o0V09Yd2J2VFg3WENWaGQ1VE9OOFFqdkk3aUdVejA3RHR3QUowMGFpSEdiZlQrYVBKSHdLRkpHNEM3Zkc0RDFFSERYUEora3pFdWk4d3Z2SUhDS3BvKzE3Q2UyckgzT0puL2JIcHI2aVVVMDZiejBENnRrN3ljM3J5WExBNFBhZUJPUTlaYnlnajkybmdjK2RTYWJ2WVVlMzFGZWdPemxRNkJYKysvRG1IOGx6dlpEZk13NXlKNlV2b1crU2orQzZ3TFg1elMraWN6UHJOMDd6a3FjbGR2blpKNnAwcS9KdzB2YnhUbXJPN0R1OXhub0Urb2RnUGFZNnpTYnZYS2NLQ0xDeHdwK0QrV2wxbVorRjM3SXhGdHozOHBla3ZYT0JtMlNNMUg2RkJvcFkydkVKcEw5akRMMlA5aElIVi91UUtNVDNNZE1XQXR1ZEdMeEJZZk1NVXVlMURYNzJ3OHNNQlpSL2ZCU0kzWGxkNU9teWUrZGFWdnVEcktuemZsSUdZTEIyZkc3SG5QcnhWeG1zc2R6d0FzSjNVbklGd3JleWQ2WC9rNlU0OFdOeGtYenZCaXVZZElLWUVTeEYzWUpYNkRuSXJSZDlsbzZjTFloZUh6VUxNc1BMWFE2STNEdnd4d3pnTDlWMllBSjUvK09Gd29KNzVNeTduRE9NQm1iOEpKclFMd2N1aStocVRLdTV0d2p6UHVBSDhUTXJHL0NUdkJGNnY0QzExYnh4dzVlWDQ2bmd0U1J0Y29KdkI0eXBscEUyZi9GbU9QWUwzTCtDRDNxeU9STitBamVDSnpOdldPZVA5TFBFK2gwT1QydTF1RFRDczZnemlENVZqYmpWbzN6SldvWS9JYkFWZmFvL1c3SHZuYm16aVJqbGpMbmFNZUVzL3h0M2xlK1Fqc2xYOFlReWh4TDg3bkdtTTB4eUhqa1RpampsTFVYM0pPeWdvZkNjOTBCejgzN1RYUE5Md3Raa1RHVTdJc1hhNDB2TWxacGE3TmVxK1lnZWlhQWNSV2NFVHcyK1JTaDdjbmhmNFJPQ1d5M2NxQUpiT1MzMFF1TWZHbFA5b24wWVo2RjByYWMxZmJ6dkFIZUdEazNURHBveWdvRVBuSzNrcktWNkZmNGVmdjlMUUZjVEI3SXhCSFpMK1lkM01SM3VRY0pQQjR4dGp2Z3F1Q20zTWRrYkNZTmtMTkF5Z2kvSVBYVHd3Y200WjYyRDA4ZEM0Z2U0Z2xnRnVoNzEzbk9RUm1ydENIM0Vha241N2lNMTl5ZmdvOEVJYlRES1FjNjU0SjhVb05QWGVFM1RSNUsrajNNL3V0TzlKeU01UjNVSXhhaW5vYTM0SVhRZGsvMlppOXcxYVJYZ2pleXBvS1gwbllYOXB6UVA0SHg3REtJa2RjNzJNOEZLU1ByS3VOWUFteDc2elVTSE9DeHQzMy95enJLMzBQWWY5VUJyc0JGMnBUNWY0WDJKMk15TTJuY3BCMlMzMDZQVC9haHRDMXpLS041UFJtVHpGMWdLZC83T1h2SDhxa0IzN3VWdlNCNEllWFB3cE42Z0xjZXVsNGF4aGNDb1puQ0JwUDFOdnZLQjh5aktaZVl2WjRWR2JiQVJNWlhsSDNlbi9OeEdHdGt3dHN1eTJCUWVVSDBBZkJkditDSmhKOFJuSXRpSGVWOGwvSEtXU1RyWmQ1WnBKOVF6bkxaSDlMT096d3lteklsbVkvOXJnbnVtZVh2YU40N0o0MC8wM0E4dzVvMjVGeWJDcXhxYXQ2L0puTVVlQXJ0U0hqSEUzeWNETjh5bHc3VE03OVVrLy9SVzV3bzJOdkRhTlpPZDJYc010WmVJUEJWN3N1eG5Nbm0vVUZvZ0xSbDBrenp2bWZpdnZTMW43UEt2S1BhN3cyOFloVWFKbVhrdmlKOU5RQ3g3ckZQQlNkTmVMUUZYamk2c3YvOUVseFB3bDNjRzgvdmNsYkxtRVJ1STN1OU5nQWFvdkZoQlR6ak9rMVA1RDVxUHcvaEZ5b3dBSE5za2lmdEMzemxIQlE2WlBicHlJUk4yY1ZKYU9ZV1h0cmU0TTRwdUN4OXBlVjhXWU9YLzdua0NYOWwwbHRaZjJuM0dISTBHM2N6VXg1Z3dubzV3RFZwa0xRdHVDbmY1cHBJbVZUNjNtK2VGMUpYYUtqc3Y1M2NOV1IvaWR3c1BRU3JORGduN1ltbmEvTU1tTUplTWRjTzQyNzdtRXo2ZUFUY0djRjhFcll0ZlI1bklYcGhTdFFPUE4yTjEwanBRM0JPY0VGd1dXQXMvUi9reGZKN0RlUGQ0Tnh5OXJHc3FjeDlCZlVMc2NsZlFPak5zVWkreUFnRkp2SXQ5TFNlcGtNN3dNbE5uaGFGd1pkS1R6c1Q5VG1WVmQrUnpmM2NSUGZueU42VmU0TFFPVS9HS1gxSSswS0h6WE5GWkNNeWJsRHR2L0diNHpCcHNEbm5HL0ROSnU4VHBtbXAwQ2haWHh3cUdYSmo2UE55WU55ZlBTVmpFamdMWGtoL3NtNENlMmw3RVhnZzkyd01lKzIvbStleXlEZ0ZSNFZQbFRVM2VVSlRQcDJRdjZyUFpXbUtoa0cwTnhaZ3Z2OTRPS216MVlRUHhLTUhlMEx3V3RxVXRaSCtFdkxHMHQ0MXptOVQxbUMvRTdEMkRod01zbThFTnVaOVR1QXNNalRoM1RhQU84SkRTeHZoeUFMeTQ0bFBjRlQrVG5oV1N2dm12VUxtLzRCekl6ME5KNlROZHA0eEFlNU5sdnNhZDc1VGZBaVFZS2RMc25aeU42dEp3VlRjelFwcG1Vc2hJaXliZE0rK0RzaDFiL0xCa0Y3ZDFQaUFVMGcxRFRpVXAyL1pIK1o2MjNsTllQY080dm9HV0xsb3VwNkV4WGpCdmpidnlnS3poREl4R1c4SXRGZGdMdU1OeDV2dTFsUjRmRTRnSXhLNkxPM3Zaci80d09pRmNONk5BVDhrRXFHTXV4OHdmZ2lkRWJ5U1B0NHdOdk9lTEgwSUxBVWZicE52Z1Y2RjYvbVo5RnpLUEdYY1hGWHQ0elBuYmQ1RHBTems3ejk1dGF6L1J3MlBYc3h2QUh1a0o0Z2hjSkExTUdXMEltTVNQaHZqY0JVTC9lN0YyRTE1OWhObjdwOFF0amxNN2pNMFpUWDNDeE11MGtZUDl2eG84RUxnSnYyZDF2MFYxdnRZemdBcHQwUGpwNnlQbkVsUHRkNURZQ2w3VDhaK25mUGxCNStFOTA0VFZySitRaVBrKzZ6dXc3eUR6dVFNRlh3ejZZbDhQd2MvSHhLSjM2VFRVazc0UmVubkFPWGxiSkg5K29RQ0ppOGhZNW12eDFtQk8zbENXWjJkUG5QK3lKNDI5MFZIK0Y0NXQyVXRFdEtQWkFDL1R6KzhXdWd4MldDRVpIOUlHemk5dGZkMWhrVm9CbzJUY1VoYjB2Y0VHalBsS1ZMUFBCL00vWktDTTNHQ0h0OFhjRW40V1ZNMkptVmtYV1hOb3BqUURuMis3V2QrK1RUK2lUemtMaCs1WTBwNUF0OFljbjNOUndvUEtOL2g0QjlPRk95L21maHQzci9sZDRHTEtmc3g3MTRtZjNwSXhnVSttUG9EeVRQcGJCeDRKVHlobEc4RW9qcXdGOVl4TGg2K3FkdlFIbk1kYXNJekxkZTBmNTllNjRMSW9FWnk4RWlmQW4rQ2ROclh0VWh5aThyRlIyaUZuRUh2MlhQbHVVc0w3eVAxWXNDREFnbm9vWXo3dGo3LzZONitkbGYwT3BqMHhKU0ZDTXl0dXF4SnF3cmk5UUl5WUUrSDZkOEVybmY0ZklDbXR0SDl5cDFiMnR0RFJmTThsZlpHY1BhYmF5NTlsZFAwWjZXZXIreHBvV1ByOVRxbllPeGZhU09oL1BrMWlHL3lRSUp2enZ3dTl3YjV6WlRmMnU4SG5MWG12SVErcFNOQ1RGZjJWeDI5dHAzMFdFWGViY284cGIyS25HZGJmUEV5cXVFajlGUGFGTjJvSFg2Y3I1bkFmZlBlSTIwTHZSQmFuUmg1eVZOb1JHTE9lNkdIVWwvd1ZHQXY3ZG5QV3ZCckkyT09wNDJFY21DN3ZsSGpEVTRrN1dlQWlUdlN2NXpmVWc2SG1QYThvZkNDTzRoaWRKOXY4MzdiRTd3cXlSM29ySzV2M3Jua3JKV3orengwWncweXRHcDQxVFhQT0pPUGwvb3labG1iTVpTN0IxSS80ZXkrcjJuV2ZUMy9wZERCUFJwdnpidXUwRkRwUStacnlzTUZQN3R6N2dsZktQbS9rQk84NDV3VHZPSHhwNTJubFBuY0JBN3BXY0FybkJXUGRGOEo5LzQxWkFteXY0US9Tcm5JMkZzeURya255Tzg5MlhNaUx4QVlWd2QzV3ZBeDV5MHdIYVp4YVhRckI3V0xQZ1RHc2xkT2E3ejl4SmtTb1htY01teWtjSTBYYWZDNEkzTVJlSWhjVG1DTXMwbzcveWw4Z3N6UnBIdDJubDNETTRyOW54ZjVoTkJpYzEwYUF0akUwRjAvNE42YnVRcHRsTjkrc1ZjUDZ2R2Q1UGVaNE0xdXVSY2xvQzF2b2NYeXhsL0tDeHdFbGdJRG1RUE9ldXg3OEFEalhrMmY4cnZnU2xuK2xqNkUvc2haSkdzaDlGL3F5SjZ3NDRxcGw4RnpXVWZvaEhqdWtqRkxmZk91WXVKbEh1U0JVNGhjWXQ0RHBMN1FCR25meEFFZUtQM0hsMGk5N3d6R0RmbU55Uk9LMXhHWjV5THVzTk1aWHhJV2tPWDRqejlMS0JPUTlBWThyY2k1S3Z4ODF3UjNXVG0zeG1Fb1liOXY2WDMzRGpqSy9wWHh5TjFUY0tFWUxrOEVqdEplQmpaeEJMb2ladzNycSt4aGs5N0tmSHN5U0dsTDlyTHNhMms3b2J5aW81WTltVEtJbWdsMFhxYWRoQ2xQTnV2SUdzbHZKczhyWTVjeVB0Qm82VXRrYmpjaHd1czVMMFVmYUo2akp0NExyeW5ySlRoZGdjOW04ODdHdmRmazZ6K2g4OW1sWVNPd3ROOEpFdWdwNU84RjdJOGc3dURya04yWS9JRE1VK1RIMGs5VDFtRVFEWTVsRTlWblFqSTJnYkhBUitxdkJTL3FVbEhHSS9QWkQ1RTFlU2VSVGFkaGplWHNsSFlYNlgwa05NL0VOUm1MTDNTa0VqemRJODYycG96bkczdXVPSFJMZmpkNUQ1T20yK1ZpR3I0Mnphdkkzdi9PM2pCcFN6YmFrM3lUTnpMNVNPRVpwVDJoNlRJZWx0a08xMHZjeVJXUlROS0M2eGF4TDJFT1c4RHBZTHg3M21DdzdjRFZpWEpJb3UrcXoxeHJ3V1RpQ01wT3AvWkNyNGN4WmtkOVZvRytxak5qU2NLNkNVMjM2ekNCWFJ4MTVDN0RRMDQ3SFJWZTVDNndFeDJ5ek12Y0p3S3pqK0JBVitSRkJNZTMwMm5UemtMbWNvYXhtblRmTGsvWE9Cd0ZZdTZpWDFrZktkc1dndHNTUFZJYnhtek9YL2FOMEVXcEozUVdSd0FxZ0hHWjkzcWhKOXRvWXdQcjdRay84b2V6UVBnaFU0OXQ0cDZwT3hMNktPM0ora2kvMG9iZ2tPRFBPQ1lwYTNZR3ZpMGVaQTlETjNzRVBWRnQ5bG8xOEUzb3JKdzVzemxQaGNlU3MzVWwvWmFDQmdwdXlab210SnN3ejJvWjQyTHU0Zjd3Nnh6Wi8ra05UTnNYbVl0ZGp3V1FjSFpyenhkKzM3U1hNWGxCVThZbjlNR0VQUTk1MVNSK0ZGb283UTZiVGJRaFBZWkNWQllZeURoSFFROEhheHg4d3RxTGpGWHlUZDZsS3ZyM1ZCckhSakpXb1JreVY1TnVtbmVtcDlnVENRN0tldjBHWnhQYVM4bnZvN21MQ1d6a2J6ay83VFpZckZjZFpQemY0U1VrVCtxRys2TTdJLzg5ZTAzMnJheUgvZDJVcHVzbXIybnFFcVZ0azJkeUFONG53YmRkd05PMExlbVBFRURRWFdCZzAyZUl5ZHRMbXpkWVA5SHZ0dUJqNm1La1haTVBsbnVXd0VIb2xmUWxORmZ3L2hnYlFtaVpqR2VlMWdHWjZ5WGp1OHp2MWNFcEhsMnE3cHB1M2VQOEh3UnhFUm9xOFBSbE1XWDlSSlpSUmE5QlB1amtkYzFUU1R2aldaTnpGREw1YytsUGNFVDZtYWRwa1BBdDByNzBML1RNM0NQbWZWM21LN2lCNDNyNy9lQTU1L1pWNENSeU11RkJ6RFVST2phSENmWmtYTXZJNkVhbkJTa3JlcTlqZkpad3pwanJidGQ5NlBvaGxCVVk0b2pmdm1la0w4RWYrWmE5SWUxLzBHUGNDVDJzekFhek1xOEs4QWRsdWUvaitOZStMaWFQS0hNVkhKTzJaTjBzckdjaDl2NStEYU9NN09YOXlONFNudDAvd00wcmFaSFphOWdJdlpKK016R2Y2Z251a2VhWm5aMU9Sb0ZZejhGTDRYRms3a0ovcEU1bDZJVjVQblZqSVZ5eEFTdEJ3d1RNVWpoQXNNdWZCRGY2d09NTHp5eDFaRy9aY1YzM2NSVGUyS1R6b3hsck5qMzJ4endObE85VXpMMm92dE80YVhwcjNwTk5IWjZzZFFxSXNDbUx0ZXRFS1lURFRIdi9kOUNOakFSZkZnTkwwMWJSdkN1Yk9vbUVjbzJqMmw3dEdvUHVRVFE2MlJjQ3ErUzYvNU1hVGx1dzA1QW9ZaUkvRk5taHVSZWtuWHZnWmlYVzhBOW5TaHBrVlh0MG5hemtpMTdVZnI2Qkt5ZjVtUFp0ajRBbndUcnNZK3JMeE1vQjA5U3NTeUw0dlpQZ21wZitUZTVTc3Q0Qi9DMjQ4NFAxS1F1dk40WHp3OXo3QVp4UlVVeTJNeGxDRjJUOGlUUnNEekN1dXBwM0tMelNRWjJDdGdrdXlYcVlNalRwUjNTRWdyZXpHWWZZV0FqdUpaUjFtUFpvTXZZR2VuNlh3YjlXT3YwZC9CdlBlVFNjdmZGYjU5M244S2lnNFNnOGkrekRSOXFHSkNHdC9JRWNwU0ozdlcvVWJVLy9GY0JiNStvT0toWVpVemJNaXhQcVZrMGJ2ajVjUkU5enZtWmxjVWZLcG9EUS9nYW5UQnE3amZZSWZxSHU4YWtuTWhvQUkvTVZHbE5QdzBiNEZsa2JnYVBBN0M2dzJRZC9JRENYdjJYL0M4OHpUbXcyMFgxY1psK2NZNDNsN2l3d3k4cjhUZHlXc2NuY0JHNlQ2VXNDamNwZDRiS1c2K1ZtWDVTRmZnZUNaei9RL3doL0tPc3E1NnVjcDRJWEFwOW5ZdStBclZZTFB1N1lWSmh6djgwOWZRcHQvSmlKVEVxdnV5OW5yK0MyekNrUTNKRTJwQzJ4RVRCMWM5Sm1DRENWZTd2TTZROFZQQm4zZC9hYW5FMnl4ei9wOVRyQkhkN0VDZnM1b1grM0FKQjhUSFNCaHRzVStqWDFHd0tIOXN5M2pjWXhPUzlrUEthdVgvbzB6Mi9CSDd2K1V1aXMzcE1mTlM4bjQrNmsyMDlJcSsxeUEzMnV0d2QrMFd4UXVTZktlR1YrMHBmY2pRVXZaUjFsdmkyd0UvcklPajNqYkRtZzViZGQyQitUbWJQQVc4cktQaGI5elVIazY0SXowbjVuZmhTWlZrTDVrK0NuS2JNMzdYVE1jVFZoZjkvWGF5NHdsekxYSWU3Qy84cmN6ZnVRek5QVU94UUU2Skh3d1NJVHh5R0Ntcy9DbUx5c0tUZVc5Zzl5M3RmUXZIOFZ6b090N0FOcHo3eHJtdmFNY3I0SlRCdHArRGZUc0RIdGhWOERQUE91WTlJL2MveFhkRm01bzBzYmg0a0tmVkI0SGVpUEJkaVorbU81WHdzZTFNSjJ5VHh6WlU1bCtXTWl1aDdoaGFTY2VUNEluTWF6R0VKL2hjL3JEeUo5MGZ5Ny9MMktQYll0Z1MyRnpHTnZBaHR6VS9ZcGExa1UrblZJajlPOHY1aHlPTE9zNElIZ3owdVJmK2w3cHVDdTdOM2MrbndmQWtCTU9aM1V4OUd6blo2YXZIRjVGajZVK3NtQWRXcGR4N1NsL1FMeGNvQ3hFUjVZNnEvUzQ3bkpXdGFBU0pnOGtzQlZaSE1DaXlDOUh0UDUzZVFiSlg4MXNDMlR4RUY5NXU1bTZtYlhhM21LMkF0S3U2SGdwTXcxb1c0bW9kNDg0Zm0xRDNvaVpRV3VNaGNaM3piMlNCZzgzS1VFY0JOWWRvUVgzMHFraUNjYUZ6MkE3V0RnSW5SRFlER1ZBVldCL295aXZpbmZrdkZsNHF3eWRXVmo5THFaOGsvQjI5bkF6UHhieHBuUW5pT0xocVdwNnpSNTA0VHloUmpPdkliUTY0dDBhc3BONWpGb09UTUUvaWJObDdaVDZ2YXlzWWNTSTUrZnlaMmpEN2dWeW5rL0g1MjZLYytxeGJ3eXdyekltc3RkT3dsLy84THRxY2tMQ0p6TWNjZ1l6UHVIak1uVUZ3MkRIcHJ5Qy9sTjdCOEZibG1nZDFrMDMrUExQWFk0ZENXVkhwZU1XZmFTYTJGZW91bXpMeisyQ1dKL1lMZXBkSE5RV1NEZ1I1QmhTRG54ZnVyTUdrbi93dk82d0s4TERaSStaVjFrWFUyNXkyL29tZ2xuR1djZ2ZKQjVSc3NjVEo1STlzSmJkRFFSNEdkQ0d3d3Bjd2pHN29qR0M3YXpmYTFNZloyTVQyaXAwR3pwVzc3VEE3TkxBTzJCeHV0bm5FRzMyRnc3Z1hlTXppTklueDNYVFYyR2VTZVErdVlkZng5amlVYnZLMmN5d1RqK096ZGxyQldnVVkzMG1HVHVzajRiYWQ4Wjc5VFpFOGt6Yy9BaTNnRllHT2thNEdCKzB2TENwaUQzcCtLazdTOXFzRFdzcE11VTR3RitWVjJtS3hsMWRib05udEtiNmpMZHZuTTMxT255dE5OV3QxT0d2bnJxL0RhTXRhK3V1NGN5QWFSRmRPSk9lcEl1bjRwMjV1bnlCRDVWaTNUNUtES0NkRG9QLzJ6VTZWQStPM1c2TzNNOHFPdVdwczFnblQrUzhaL1I3ZmNsUDFTbjN6UCsrN3I4RGNacDFXbC94aENwMDhscElGcTNrNXIyMytqOHhlTHRXNmNES0IrbjA5dm9LMTYzLzBaNGg4UkczV0swNzA1YXloUWh3NU8wZlR6VXphRHoyOU5tWnAxK1NUdlpkZDFCcFBQcnREZGpMcTdMZEdVdXZyb2RITTZwcWpvZlIvcXFwaTVmbC9ZYjZ2d2NzbDQ2WFVqV1M2ZmpaYjEwK2NIZ1hsZWRUa20vZlhYN2hTay9YSmNQSVQxYXA4dFNkN3d1czU3MExOS3lwbC9wSzBpWE9VZitXbDNtTW5EWXFmTlBNTis5T2wxUjFrNm5qMUkzV0tjSE00WVRlanlyS0VNOFZYdCtZOHBjMGVrTzVJZnFkRWZ3UGt5WHIwVmY5M1Urd1pLVVZlY0hNZjVvblorSGYySjBmaGRaVTUxL2hycHhPcjFRMXRTRUNWRlNjT3R0ejYveWsvVWxMZmwzR1krN3ptOUlPNTQ2dllPK3ZIWGFnYnBwZEZvZTMyWFFkUkdQcSt3NnZWWFdtclRBcWl0cFg1MWVSSnRWZGQxMHdMT216bi9OL20ycTZ3NW03bTExK2g3bHUrcnk1UmxEVDUyT0pOMVhwLzJabzc5T1A0RTNDdEIxdDlIK2FOMStJZHFacHN1NFVuZVdUcGVTZmFyVGxXbG5rVTZQWVF6TGREc2ZHUDlhM1U0dzZaMDZ2eS9wZ3pvZFF2c25kTjFSdEhsR3AzOER6d3M2M1ovMnIraDBhdEtoT2wyVzhtRTZUVkE1YkppTnZvNXhCNDAwWWNKY1luUzZOWGVJRHpyOVJOWlVsLzlLbTRtVEdPM2twazFublE2anJqdHBLVDlFMWxIbjUrQ2ZORHEvSU8xa0ppM3Q0QmhkNWRkbE9pTWZLNnp6cDdORzVYUjVmOUpWZFRvRDdkZlZaV3FEU3kxMWZuYmE3R2ltaFg3cU5wMWs3WFM2aGF5ZFRudFFQa0NYcnkxcnA5djhUdmxwdWt3ZFdUdWRia1Q1ZWJvTVR0eFZrSzVia3Z5Tk9uMVlvbURvOG5HVTJhdno1OUZ2c000ZlJaa1RPcDJhOUJtZG5pTjIzN3I4WS9vTjFma05xQnVtMHlzWVp3UnBvUlVuZ0ZXMExuOFRtZE1ibmM0aWRGV1hmeUhycGZQWDBKZTUzdzlSUmpucDg0SjBZcDNlUTNsbjBuYmFTTnFidExHT0RpcURMck9mTVdUV1piTEt2dE5sWWtrWDEvbHhwQ3VaZFdYZjZYUUVEVFRVNldMZ1ZVdWRkcGExMDNXSFFFdjc2dndGekQxQTk1dWVNc04xUG01ejFYaWQva0daYWJwTVNmQmhsczV2d2J3VzZmemNsRm1tMDdWcEowaVhxY2MrMnFqekNiaWx0dXI4ZU9ydTFmblBxSHRRcC8zZ3BZSjFtWmZrbjlINUJETlNGM1QrV29Henp0OG1lMDJuVDlKWGhFNi9KdisrVHE4bjM2clRRMGxINnZSZ29iYzZYWmt4eCtqMkplREJCNTNlQ216ak5kd1dBcmZFemtiK0E5cHhKeTExcnpNZVQ1MXVLV3VxeTRUSm11cjh1WEtHNm5SaitzMnUwLzNJejYzVE5ZRnRmbDAzQlhNdnJ2TVJGU3RmblgrQS9FbzZ2ejNyVzFYblQ2RGZ1am85bi9hYjZqS2xLZDlTcDZkUnBxMHVFeXgwV09jVDBGSDFKRzJuMjdKbmRmb0I3WXpYWmE0S0w2VHIxbWRlczNSK05kcVpwOU5KS0xOSTEvV2d6RnFkSHdvUHZWSFhqYWJNVHAwK0wyZXJMcE5MK0NKZDE0VitMK2o4YTN5dTZQS05LQk9tMDh1cGUxK1hxU0pucU01UFJyL1I1bnhwSjBhblc1SC9ScWVIay85QnArY3czemhkMTRXTVh6cWRoUHpFTGtZNm8vQklwTzE3azN4UDBqTE9tNlF6NkRLZXdoZnBkRTNac3pyOVdOWlIxL1dSYzlPc0srZW16dC9LMkdycTlCREsxOVhwSDhJajZYUmR6cSttdXMxNmxHK3I4ODlUcHFOT1h5Qy9xMDVMMUplZU9yMkIvTDQ2UFltMHYwN1hRZjRVb050c0ovUlpqMjBIWmFicE1oOFp6eXlkUGl2MFdaY0pwdDhnblMvRWNxMXU1eWxsdHVveWsyanpJR21ocGNYaHNTL29Nak5rLytxNnd6bDN3blIrRnVyZTErbUI1RWZxOUU4NUszWDZCSEQ0b05PSjRGdmlkVHVPbFBtbCs0MFdHdXRxbEZuUCtEMUoyOTNueUZtcDArdUFUeHFkN2lNOGp5NS9FcHFmbmJTMDA0dnloWFdaNU1MZjZ2UmcydlRWNlc3a2w5UHA2M3dxNlhaS1VLYW16bmVnbmJvNlhaUnhOdFR0TnhmK1ZxZmo1VHpWWlM3S2VhclRsNW1Mdnk0elZ2aGJuVjhmV2pGZTk1Vk16bE9kbncxNTB5eWRIeXI4ajg0dktQUlpwenZKblVXWEdjVDROK3A4TDhhelZmZTFoRFlQNm53Q3cvNjM5emVUSDZ6ekEwU2VxTnU1SS9SWjE5M0ptTU4wT29CMXRPb3lqMmcvV3FjSFV2ZU5UcThtUDQ2MDRFa2Ywb25kakxyVGhLNlNscjQyTW41dm5hN0pHTkxvOUZ1NXArajBNYUd4T24yVGRyS1RsdlpmaVY4MW5TNHNkMG1kbmtxNkhHbnB0NmVza2E1Ymg3NGE2dlFtb2FVNlhaN3h0TlRwZzhMVDZuYU9VcWFyemk5Sm16MzErUC9LL0hXWkZPRHFhRjNtdU54TmRINW0yV3M2UDVEeHo5THBLcHlEODh4eDB2NHluVzhUdmtqbjc1RTd0RTczRmI1SWx4bERlcTlPcCtUSGc3cE1YWERtaEU3UEVocHJ3aFA2ZkVYblR4WmVTT2VQa1BOVXA2ZkszdFJsQnRKK3BNNG5xTDJLMXZuNWhjYnEvQU55WjlIcGk4QXFUcGZ4bEgycTAxTW9rOWhkM3l2NXg1bTA1SytUUGF2elcxUEdXNmR2VURlTkxwTTNHN0RUK1YzcE43dE9GMk5ldVhYYWwvejhPajJJTmd2cmRFUEJBZDJPRyt0U1R1ZjdBSjlLT3ArZ3FVUkpOZEtCUW9kMW1TamFhYXJUSjRGSlM3TWQ0YTkwdWd6dDlOVHB6ckovZGJvZGRZZnJ1dldaMTJpZHppcjRRTm91WjJBOHMzUitNOHJQMCttNXpHV1JUbjhtdlV5bkIxQTNTTmNkSjdSWDkzV0x1bnQxbVRWeXp1cjBCLzRKMW1VMml2eEIxNjFMZnFqTzMweCtoTTYvS211dDZ5NlEvVXZhN2lXVWZQT08wMFg0WVYzR2tYUzhUcytpMzE4NkhjWjRsSWUrdzhxNjYzUi82SU16YWVuM0V1MTc2dlJlV1d1ZFhpUVJrSFc2SXYzbTFuVTlhVE8vVHI5blVJVjFtWWNpZjlEcHJzSXY2VExWK0tlcXptOUdPM1YxL2dtaHlUci9NR05ycWZNN0NyK2s4M3ZUVGxlZEg0SnV1NmZPZnkxM0o1MG1JS1VhcnRNN3dmbnhPbDFMOXJpdWkybTdtcVh6N3doOTF2azVTSnQ4YVZwd1lKbk9qeEZhcmN1L0JWWWJkYnFDeUN0MG1SdXkzM1Y2aXRCdG5iNG1QSlV1bjVhTU16cjlRbmdxblNhNG5RclQ2Vk1pbDlCMXM0bmNTYWZYQ3MrczB6YnlvM1g2LzlnNkY3aXJwcTJONys2cFY2VUxTUWdoWFVoQ2lOTkxDSFdFVUlSSzdyY1FraERpaEZDRTNFTUlSY2kxRUVKVVJGRVVvcENFa0UrKzAzRys1ei9uTTlxTDMxZS90ZDluanozbWZZd3h4eHh6cnJWcU15ODdiUlhGNVZhYlBnZDVNTDVKL0d1Tk4wVDNoWkdydHN6UjlYTGE3Y1RmUURpdEFkRjM0eW5ZZWVNalZNL201aCtNcjJWOEVUcHVuc3ZSY2VNV3JKWE1jNjN5Nld6Nmhmcm9zcDZ1T2RyMGp0TFo3cVkzVVAvM012MXM0bEhHTHpKZm0rZHoxV2VnY1QzeG4ybWVnZUlmWkh3WmF5dmpiOFUveFB4L2lqN2M5QS8xTWNMMFN1SlUwUzdoc08wVDhLdEZSKzl1WUQzbHREY3hYNXQrTzdFcDA3L1h4M1RuYzZqNllhWndXcit3VmpMUHZkaDI0K25ZZHZPL2loeWFQcHYxa2ZFQzBWY1lYeUU1WEJWdHgzODJQazc4c2Y1NlNQenJ6SzhYZWN0SnlUdzlSYTh0REgwNy9Hcmo4NUFCNDIxWlE1bi9kY2JkK0hEeHR6VFBxL0xUV2duVExyMlFyZFRSdUo3NHU1aWZKNngxTS82T09kMXArekNuUjFucXc5NU91ek5ySXROYnNpWnkybzZpRHpMOUZQWHpZR085Mkw4MHhEeURzZUhHRGRCMzgxelBuRzY4RFAvWlpZMWlqV3oreWV5UE9QN1RsdkUxLzR1cTgwVGp1MVRuU2NZcjBBMm52Umg3Ymx5U0hNNHd6OEhFcVl5UFYxL05NczkwTFc3bkdldkY1cVZGeG04eDd1WS9UZXZjNWFaUFU5cFZ4dlgxNHhyakUxWC9kY2J6bVUvZHJ1ZnczeHBrK216R1Y1ZzgyK0RMR1Q4cTNOajRHdllSTGVjbmlON1U5SVdNdS9NNUFsOU9tUHczVWJudGpXdmhlNXQvdUhBWDQ0UFZWMTJOYjBUZTFzZUNKQSttajJLZFpid0I5dDlsTldHOWJQcTdyTE9NaDhtZTl6UFBINktmYW5vVmpkZVp4algxTWNnOHJ4SkxjVDA3c1hZMi9XN1d6dVpmSWZwbzAzOFQvempqZHFyRGVQUHczT01KcGk4bVZ1azhYMWU1TDVobnFmUnh1bm51VVo0emhiRUpUNnFzQmVaNVVQUkZwbjlBck1QNVhLaXhYdU8weTlCWjg4L2hub21OTXIyWGNHMWgrRzlnRFNXYzlsK0lONXJuV21KVzV0bVZPSWJwOVZqL212OWZySnVNNjZqK25ZMDNZK3lNOVZMMVVsZW4vWkdZaHZQc3kwc29UZiszOHVsbi9tWFlYTk9ycUE1bkdsK3M4UnBzUEZqNUR6UC9sZGhlNDd0RUgyRmNvVDRjYWY0TDBGUGpBMVRQY2ViWm1yMEQ0NWVVLzNqenpGV2ZURFM5TjJlOVRLK0IzMlg2MDlobjQwbmluMjU4bVhobUdMZGo3TnplVS9ERFRSOUZURktZc2JzVW0yejZoWXlqeTFvai90V21iNmUyckRIOVV2VFVlQlorVjBQUDZmamJ3dW5Say9qYnBsK25zaG9MVTFZajVsbnp0RkhhdHVaNWszbldlRXZXeGNibmk2ZVRzVjVtWE9yc3RPUFFSOU43b0lQR0g0bS91M0ViZkd6akkvQ3hqY2ZoWXp1ZjY4VGZ6L1RUQ3ZGNWJjT1dCb3BPdnkxVC9RY1pOeVNtWWZ3Mk50bHBLOVUvbzV4bkErVXoxdlFuV1djWkR4ZjlidU92UkI5di9BUHpzdE51eDVyTDlQZXd5YVp2cVk4WGpHOW1mTTF6RXZ0RXhpOHBuMW5tR2MrOGJIbzF4dHAxUGtHMmQ2bDVYbEhhaUNWV01oZWIveW54cnpMUHB1d05tWDQ4ZnJqeGI4THJqQnVqMTQxeS9zUFlueFltN1I3TXVhYi96dDZCNlI4UW54UW1iVk9sYld2NjBiSWJIWTI3TWRiR0U5UW5YYzEvTlB0OXBsL05QUkxHYTZRanZZMUhNNmJtUDVENGxmSEY3QTBaZjY2UE0xMjMxb3JERHpGOU9Yb2RkVk9kaHp2UDc0bFhtLzRsUHBYcEsxbERtYTdqdmFWeHB1dkZycVh4eG1maFU3bXNMVVdmYW5wbjloU2M5aEQyRkl4L0lPNWgvcFdzYzh3L2l2T3B4aFg0eitidnBZL2xwbS9EMkRudDNjU1poZEc3WWRqYnhsNExzeVlTaHFlU2VLUHBQK0FMQ1NkL2pEV1I4Ym42YUd1ZWpmR0JuYllGZnEvcGM5a3ZNRzZpdEQyZGRsZjhJdU1weERxTWQyY2VOTzVBdk5INExvM0ZRT2R6bHVwenB1bUhNUSthM29WNTBIaFg5aFNNRjRvKzBuWDdtdjEwMDdmVHN4bnVOdTZoUENjNHo3M1VoeE9OT3hKRGR0b2IyUGN4ZlE1alpGeVRNVEllaDk0WlZ4RTk0dFgvbEJ6T2NsbTNFYk15N2tkczJmd0RDbnZCYjdBbU1sMmgwOUpTODcrTEhUYStXbmkxOFowcWE2MzVUeUMyYlBydjdPczFjVDd5MldvYlZ5aHRoVEE4UDZPcnh0M1pSekRQcHVyL0ZzWXZZWi9OMDRFNTEvZ0J4dDM0RE9aWjh6Y3YyUCt0V0JlYnZvUjFzVEQ5K1RSMjJQUi9JZy9HT3lBUHhuVlpCNW4vZUo2UDRiS0dFT3N3ZlMvRnI0YVpmZ0ZySE9QbXdxT01yMFFmbmVmKzJGN2o4NWxuamZkVW5jY2J6eVhlNWJRZllYdE5QNFc5Sk9ONktuZXFlZVl6UjVpK0czdEp4dTJJZlJrZmdoMTJuUTlpVFdUNnRZVjkvNG5zSlptK3VmQVM0MnI0ek1iYnErM0xYVzRuOGF3eS9XN2lZT3ZIVHZiWitDUDJEVjN1ZnNqRHhwbCtOZnU4eHNPRUs0eGZZbzQyMW9PVFM0MkZLZXNsWk1QMHRkaHQwNjhUYm1WOHJOcllYcGl5ZXVJem0vOGliSUo1emxROXU1bitGVEpuK3JYS3A1ZnhZUEgwTlU4ZjVkblA5SVhJZ1BFZzFrcm1xWlJNRGpiOVl0Vi9tT25QNDRNWkwxWWJSeGkzVk94NnBQbEw3T09iZm80K3hwcCtPL0V1NGZTdVltVEFQRWNSQXpIZWdoaUk4V1A0WGNaUHNpNTJQbTFWdDVudWs1UFJmZU5xNGw5aS9oT0pmUm12Sk81aHZCRnhEK2Z6alBCcTR4Mnc0Y1pUZURuSUp0N0haNzllR1BvNjFqN0NhZjBvbnFibTJZTTlRZE0vWkg0eWYxZlZzNzN4TFB4bjg2eGdISTEzVWY1ZG5NOXV4TEZOWDhXNnhta2ZJNDVoK3U2TW8vSDJ5cWVmOGFYNkdHaitRWnl4TWU3R210YzhGMnFzaDVqZVMvVGhwajhnZjJDRTZiWFFjZU1OaUhHWlp6Zmlsc1pQc1A1MW5mV3l1ZEpFMDZ1d3huSGF6ZGcvTXM4TzZLOTU5R0RxMGt6emJNRVpHOU9QSnlacDNKWlloSEZENGh2bS80Z3pWS2J2d1Y2aGNTUDJDbzMzWlY1MnVienJhSzNUYnNTZWZsUDNGVHByL0FUenRUQXllYURvVFUxdnpud3RURDViaU5CS09PM1BvbyttOStFTXVlbjFSTzlxK3ExSzI5UDAxdGhlNTZsYlBVcDlUZitFbUtUcGpWaVRHdXZvYWVsTTg4em1qTHZ4RXZhUHpOT08vU09YcFNQb3BWSEdPMktIemZNTmUzekdOM0pXeW0yc1NXelo5QkhZU2VPcHpNWEdzNW1Malk4ajl1ZzZmS04yelRJK0c3MHpic2VjYS83ZkpXTkxUTCtJOVk3cE04V3p3cGloV0dXZXUvRjdUYS9Obkd1OERML1grQ3Y4M2sxekczOWdyaFVtN1U3WVV1TWZpRGtZTDJCUFFUaWRsZEo5NjYxTS8wYjA5cVpmclhWRVI5TVBacDQxL1dMT1pyaXNYbXBMZC9NY0s1NWU1dmxWWmZVMi9XbldzNlpmd3ZyQzg4aFE0WUhtNllzK09zL0J4SjFNNzRoUFpieFllS1I1SGlGbUtNeDRiU2dmWTRMenY1OHpHT2FmSy85dGl2RWh5djhGNHdvbG1tRThoZjFmeDRYYUZmWjNGbkwyeVhuK203TTB4a05ZdHhwdm9nd1dPSi9ubGY4UzEyMFc5c3YwalF1eDVhK1UvMnFuM1ZaendScnpmSW52NUxRbnNXNXRsdW10MklzM2ZwNzlBdUhrRXhJdkVxYnR2eEIvRU03bmNDU2ZqbStNNUl5ejAvYkJGekxQVmNKZGpmZkJUM2Fla3puUFp2N2p4ZFBYUE05aVA0Mi9KUlpobnRNWkwrTmJPVlBxK254S3pNSDhsK0FETy8vRzJFblRYMFVIalVkako1M1BZOFNDekgrRjdPMFUwMzltVDliOE8zTXUwZlNobkt0MGY1NU1QTkE4SFJrNzR6WHMrNWgvTW10UDEzTS85bnBjMWxYNE1PWS9FVjB6dnA3NXp2eGZNQzZiWmY3cXhQQ0ZVd3hOZXpkTmhaTnZyekZ0WWR4QUg2Mk1IeWFlWVA3TkpLc2RqWWNVempDY29QTURuY3kvaUhpUmVSN2lETERML1V4bkJYc2F6Mk4vMXZ5RHViL0IvQzlnSjQydlljMWlQQWJmMWZ5ZlVyYnhTSHdWOHh3bVBNSjRBR3RNNHpyeU9VZVpmemxub2t5dnlUZ2FuOG80dW03WHNNWVVwdCsySWtibk9QbUJqS1A1UHhIUGRPZTVsTEV6dlI5aloveUQ4cHpqUFA5RHY1aS9QVHBsbmduQ3k0M3ZWejRyakp1aXk4YkhxVzlYTyswSHhBMU1uNGI5Tko2TFA5TTgvSGFOdFhDS05lSGJDRk9IYjRnSG1xY3VlL0htT1F2ZnhuZys5MnVZNXdUbVFhZmRsejBhODJ5Si9UVFBFbzFwTitOL2M3Yk4vSmV4TjJmNkFQd1c0ejgwN21jYVA2RThCenZQMnprbmJEd05YOVQ0RTJJOTVuOUY4WmFSenY4UXpZOWpUUi9LV1JIUEl4OHpKenB0UGVKQ3htL1MxK2IvREwvVTlCdnhTNDJQWUs0MGZvZXhOcTVRZmFZYlYxV2Z6SEFkNmtzWDVwaitsdExPTXo2ZU02VXU2OVhpMldEbVRkUG5zeTl2ZkI3K2pQR1R4QWFOUHhEL091UGQ4V2Myei9uY2h2ejQzSGdQOUZyMEZFc2tGbUc4RFh0ejVsL05HUXpqK3NTQmhkUDVNYzVCR2YvSXVzaHBYMWU1WFl4L3c3ODBIazBzd3ZrTVVUNjlURi9GL0dkOEdqRWk4NHpqekl6eHM5aGJsM1VrODZQNXgrS2ptcWVlQ0NOTWY1SjV6ZlNQOVRIYWFiOVMvOXh0bnFzNUcyT2VxOUZaWVhUMkZjYk85Sm5ZVzZkOWc3UGZwbmRGTjUzUEtkaFY4M3lPLzJtZWgvQS9qVmV5cGpEL0w4eURwcS9qYkl6cFI2dndkY1lic3BiZnd1c0Y4ZGMyYnN2OTlNS1V0UmxqWkhwUGZGSFRIMU9lcllUVEc2Y2tZNTNNTTRMendNTHAvQ2Z6b09udGxiYWI2UmV5cGpBK201aTg4ZGZFaGN3L2liUDZway9DeHBwK3ZPek1JTk5uYVE5OWlIRlBWV1M0OGFmQ0k0MC9ZMy9FK0RqUnh4a3ZZaTNnT01hVnhBZWMvL2ZpbVdDZUtTSk1NdjZRZFlUYlBvbm5HWmkrRkYvVTlJYm9sT21iRWVkeG5vY3hYc2FkV09PYmYwazZSKzRZRno2bmVWcmhxNWorVDNScVM1K1JaaC9LZUluNm9VSVlucDNaVHpGOVhZcXhlbDFKbk1mME8rVi90alQ5YWVsT1crT0wySnZ3ZnV2citEbm1iNlg2ZERKZVFPelMvUFBVUDEyTmQ5VDkxOTJOajJlTmJ6eVZ0YUhUTm1WTWpUOVd1UVBOY3lybkNVM2ZrdjF1NHcwNE95cE0vK3pDK3NMOFIrSG5HRmRqWFcvK2VhS1BOZjk0MWhmR25aVjJrdm1YVXlmanIxbFRPTzBObkYweHZiMzRaeG0vTGJtYVo3eUUrMmpNM3hmYmFIcHRZckRHVDZqZlZwbG5KR3Q1MTJHYTBxNHp2VHR6WDR0TTMxdHpmWVZ3V25kb1hCb2JmNnA1cXJueEpPbFJTK01XN0pzSXAvTVBuQ2MwcnM2ZXFmUGNXdlF1cHUvT0d0RDB1NVEyN3FrWktkelRQUDlndkp6L0tjeUQ1bCtIUFRUUEF1eWg2YityTFVOTW4wVE0zUGdQOU03NURGRC9qRFRXcXd0TG80MC9WbjNHR2IvTWZPZTBxNG5OR3UvUHVTUHp2TWQrcVBkYkh4V091TUZsK3BoaW5uWHNXUnRYWlgvRStXeFBYTTc0RFhUVDlZZHhnZm4vUWZ6TlBGc1NmelBlajNXaThVM0VZODIvRzJlNWpmOFFYbXY4QUF2SXJUTC9aUFRVdUNHK2pmSGpuRXQzL3orT255TTZObk4zYktrdytjeVFUOXZTK0JOaTc4TFVlVGhuZlUydnhaa0U0emVKc3puLy9weEJNdjZPdWMrNEs4ODdNWDhuOU5IMFhWbHJHTCt1Y2dlYXB4WDduc2Jub29QR1o3RGVOLyt2bk9VMkhzUWFKUEpCdHN6ZkEzdnIrditCdjJwNmU4YmEvSzhxN1VUakhWVzNTY2FmU242bW1QOVB4dGQ0RGZmT21PY0x6Z0NiM2srKzFoeVhkUWJ4R2RPN0ZlS2x6NG0rMUR3bm82Zk9wdzR4ZHZPZnl2a2kwNmZqcjBiZFpCTktXM3V1SVQ1ai9DM25USVRUMlVoc3IvRjl6SlhHbjZrdHpjMS9PbXRKNFdRVFZMZjI1bW1xajQ3bVdVVXN6blJlemRiRjlGK1lONDNQUTMvTnN4SDZhM3AzMlkyK3h1Tlk3N3VzaTJWREJwbmVGLzExMm1ib3IvRmU3SG1aWjRiczNrampZemczYUo3M3RNWWZhL3AvOFYxTm44Lyt0ZW5uY3M3RTlEZVMvZkw4SzdtZGFseVZjcTBMeHlwbU5kMzBtemxmWkh3Uzl6QzYvbXVZcDAxZnlSenEvQmVpcDhiZFdVZmJQdXlFempydG9lcXJOZVlaeGR4cTNJZnpoTWF0MGQ5dHJKdmM2eXVjZkV0aTVxYXZVaDgyTVAxV3pwYVl2Z2gvMWZnNTVsbmpMOWxQRVU3bkRSaHIwMzlUUDNSMFBodXoxMm04SjJ0UDR3TTVQMlo4TSt0dXA3MkIySjF4TTMzME5VOExZbmVtZjhlWllkTnJGKzZsT3FFUXMvMUFkUmhrbmhQWVV6T2VqNjB4UGcwYmJ0eVZmUzduMzVVMXFmSDlyRW1ONTNHMjBQeDNFWGNTVG0vUmswODQxVHhuRURNeDNwdzFxZnVITjdQT2N0b1RwY3Z6VFA4Tm0reTF3eVBFZkV4L25iV244NW5OL2FwUkgzVForWnlqOFZwci9DRG5SVnY2RER6M1R4bjN4WTh5UHByOU11RjBMd25uRm94L0VXNHVuTzUxNVo1aTh6ZlZqMjNOYzVMNnFxT3hIa0ZTNm13OHJIQWU0QzdHMS9RTjlOSGQrQTcyeFp6bkI1d2ZNMzBIemdBYjF5SE9ZSjVmMkY4eC9TaldwS1ovamw0YmI2QzJEelBQdHV5Sm1QNHBNVDIzcFhFaExyUVA5VFRQTzV3ZGN0cE4yTXMyL3BNMXZ2dTVMZXNYNTFPZGVjMXBEeWZ1Wi9wQnFzTk1wOTJHdUpEeCsvakd4bDJWenhMejc4VTlxcVp2cjQvVnh2T1paOWYzbFQ2M2RmeVFlMnFFVTN5QXMyR21kMkZ2eTdncTV4RE1NNEJ4RkU1bml0alBNdjFnMmN6MnhvOW9yZEhKZUhQaVFzN25HTWJPOUgyWlowMS9RdVBlMC9Rak9WdGkzRTgvOWpOK2pYbkYrRVB1WjNUYUxkZ0hNZDZMc1ROK1J2a01jejAzWlAzaXRKZHpiNVI1dGlhK1p6eVRlekdNdjhRbUcrdXhBYVh4VHF1a3BZbkc3eE5ETU04ampKM3g3c3l6NXBuTVBHdjZGT0lNdmtkamhuUnpwdXMybFhNbTV0bEQ5VnpndEU5b2psaGkzSkUxanJHU2xsWVpiNHROZHRwZTZLLzMwQjhUWG12Nk85aG40L3JvNzNhZUwvQ3ZqSi9DdnpJZUlCem44MXV6YmhVOWpUV3hYT1BoK05MQ2FZK2VzNzVPdTFJZjdVMi9qMzB4MDhlci9wMU52NU56UjZZdllpNTJuaTJJTFpobkFjL1pNLzZZTTczR2ZRdTZWZzFmMnZRQnlJRHozRngyY29qeGZzeVB4dGNUY3pCK0JGMDJyaUgra2NZZjR2ZDY3WFk3c1FqVGE0dG50UEVUN0k4YmQyWHZ3SDAxSGZreC9YVDJ5bzBuY203UWVDNCttL0dXbXBzbXV2N1hzM2RqK2tiSWtuRk43cnMwejAvRW9FeS9Rend6amZjaTltaDhJUEVOODlkbG5SWDMwN0dIYnA0cTdKc2J0Mll1TVA4ZHlKaHhKWHZsNXZtYTlaZnAvU1Y4YXoxZXZiSC8yM3VQR1BreFBxY3dsODJYUDF3aGVqckxpZzBSVG5GNzRwRG1YNmlQbHFaZndUbFM4Ky9MdVRYelhNMCtqdkZzNHBEbTJZbXo0cWF2WTQvVitFbjhPdU56dWMvVWNZRFJ5SmpMK2d6N0V2bHdiNGp4R1BiS25YWXFmcnY1MitPcldIOVB4bTgzei9lY0QvUzl4cThWenBLZHc1bFYrd24zSUcvbTM1TXpiOFpOdWEvRStERFdkNjdENGF6dlhPNXMrWkFUalBYWXpOSVU4N1REemhnL3lMcmJ1TFBLbXVVOFg4SDNNLzRQZHNhNFMrSDg4MGFxd3dMVFAyYS96M2cxZSs3R3g3RG5idHljK0pqeDN2aUhMbmNvWngxTi80TDRtT25YNGYrYjNoUC9zSlhQaytpanVuRGFTMlVkSjV6aVk1enQ4WjcreCt6Rm16NkV2VCtudlp5elZjWS9zYjV6UGlkeHhzYjhlclZmcVl2cDNianZ6L3ovNVpra3BqZlRSeS9qR2RnWDQ4WHNHUm0veDdPRklyN0hIcTdwQTNuMnNzdHFJMXNkY2VZRDJKdHdXVFh3dXh5cjc4TjVHNmY5bWZQRzV1bkMrczcwM3V6Rm0vNE5aeXBNZjRMejU2WmZJTnM3MGZRbTlKWHByeEZQTS8wajdKSHhQR1F5ZUNSanMweS9rSDE1MHpmbDNpTFR6OFhPT0ZaMkgzNkY2UGlmelZuclJidndEODIvSFhPTjZaTzRsOFQ4MStGTDdHQ2ZpaGkxY0RvcndwZ2FYNCtmYjU2Tk9UdG4vRDNqYTN3VzhXcnpOeXpvNWxPY2NUWFBmdGdLNDliWUN1T3ZXT003N1crY2V6UStqbjE4NFhRR2xYTlR4aVY4ZnZPY3d6MjV6cWN6Y1g3djJkM0RYR1A2eDl3N1pqeUljNjFPdTVhMXZPa2I0aXVhZm9Ec3pHampWL0FQWGU0dDNPUGd2WXdaNnBNSlR0dGQrM1FUelgrMDhwOWkvbmQ1MzVqcHcxanJHVzlkdU5meVYzVGY5RGFNci9FcVlqWE92enByZWROZmxNKzJ3bmdwOFJtWFZVSE16ZnpkZUJ0K2E4ZTQ1TFBWTm42TCt3aUVVN25jRTJyY2xyMG44enhhOEpIMkZtNWhua0hZZi9OMDVmbEN4Z3RVejQ3bXVRZGZ3bGl2NXlwMU5zOEYzSzl0K3NIb3VQSFBuRkVYcHY3OThTZk5mNmYwdEoveEo1eVBNcTZxajBIR0xkVnZRNXgyTy9HUGNKN1ZlYmVIZVhaV3pHUzA4YW5FZTgyekQzNmo4VVdzNWMxVHlWa2EwOC9oTEkzcHkra1QwLy9CT1Ezam56aUxibndoUHFUeFc4VGlqRy9uWGtXdi9hZnAvcEZaem5OajlObzhkN0RINGJZc1VIMldtcWNENno3ekhDSVpXMlc2WGlGVldtTmNvWTkxeG50aXE5dFl0cFZQaFhGdnhsbzRuWDNpakkxeEw5Ynl4aVdWMWNLNHVlYWFsc1pkcEF1dG5NOXA3RGthdjEzb3o0dUkxNW4rSGpFYzQ0NmNWM2MraHpMdkc2K1UvUFEwVHd2VzZhYXY0YXlzY1J2T3lBbW5lQTR4YzlQUFpFMWh2QVh6dnZQcEtzSXc0Ni9aYXpiUFJPeWUvWXF4clBITk01LzdGSngvUi94QTgxZGlvK3dQekNKbWEvcGQrSVRHWTRuWk9wK3JoS2NZdjhiZWxubjZzZDQzdlJtMjNmUi9zODlsUEl0NytZMlAwL2pPTS8vUHNvZUxqRjltVGpmUFVHTHZwbC9NdnFUeHUvU2RjU1B1UXpIL3pwemJhWnZwdzFuN0N5Yy9VUDFmWWZvU1BWdTJzZkYveGRQY1BEdHBqNk9GNmJ1eVQrU3pIeFh5ZFZ1WmZnUitvREI5K0NKckI5UDdzWFp3UGs5eFBzR3g1UldzSTh4L00zRUE4NnpsUEkvVFBreWMxdlRheEhtTTV4T2ZOejZkTSszbTc0RU1PTS9idUk5TW1IbHRtcDRYTk5vOHYrUHJPdTJiakxWeFhkYjc1bW1vZGswMGZvVjRyUEcvaU9HWS8wTDJtbzNiU0M5bW1PZHg1akw3UWdzNUUrdjYzQ3YrQmViZkE1L051SmIwYTRueGovZ2V4bE5VN25MbmVTdnp1T25Mc1BOUk45bVF0Y2J2bzdmdHZKWlgvcldGVTV4SEhWQmgranZvdnVsTjJZczMvaFRkTjc0SzNUY2VVM2ltemIyY1BUQzltdkpzNVR3cldEOGFYeWg2SitOcmVRZWk3Mm45Z25OQlRsc0wrMi84UERGODQyT3gvMDU3SS9KZytpWGNSMng4U21IdGZJQjQrcHErRlRFSHB6MmdjTzlEZGNuMnFhWmZpaDlpL2g2ODY5MzBEWGllZ09tYmkyZTRNV0h2RWVicHpMMFB3b3pqVUo1L1pmcmg2SUw1OTFDQ0NhWmZ5Ymw2WVdSdk8vYTFUZStwdERPTnowYmZuZllZbm1sbStpYXF6NktnTSs4Ynp5ZjJhL3duc21IK2s1QU4wN3RJYmxlYjNsQWZhNDE3MEpnZHZXNGloaStjbnQxSDNGNDQzUU5PM043NElPVEJlRlA4RStPbmVNYWc4VGI0ZThiOXVYL2NlQmpuK294UFpHL09aWFhqYkszcnNIL0IzMzZQZWNIOEwzSWZrL0dCckFlTkgrTStKbU1DT25IZjYyam1DOU5IRUFNM1BwWDV3bVU5VC96UTlEazhuOUQwRGRoVE0zMEpQcUh4SW54Qzg1d2wrUmxodkV5RE9jcTREL3V0eHRXNHY4bHBiK0ZaUGNaakN6cGJSeDhUekg4aSsrbkdYVGhmYmY3RHNDM0d0MkZiakgva25JRHZjNm5KZmFtbTk4S0hkRDZuYzI3UTlCbWNCWFdmNzZWeFgyS2VwWnk3TnM5dTJuZFlZZnBzelRXcmphZXpSMkNlMDRsQkdXL1BQT3MrUDVLQTJrN2U5eVFlWmJ3MzUxdUV5ZWQvT0U5b3JGZS9sWm9hWDRFUGFmN3V1dkdqcGVrdklEK205OGV2TUgwZzg2L3ByN0EzWlB3RDhVbmpYWWhQbXI4Szk2S2FmaWhubkV3ZmlweVlQb3Q5WHROL0pFNWxYSXQxb3ZHdHhKYk5mejE3QktiZmd0dzZ4aktDZUlKNTNpZFdZRnlQV0lGeExhVWQ1YlQvSzUwZGEveDA0ZnpxWXVZZzgrL0ozcjF3aWh1d1orMzdFQS9DLzNUYXM4US8xZnlQSURQR3k3aDMxVHd2NFhPYTNvUTV5SGt1Wmc0eXZhOXM0Q0x6THhYUFV1UFRpQStZLzFqdVV6YjlPdDRuNk9mTWRDZzg2M0lMZkU3ei9FbDhxYjN2SzBRZWhKUHVzTll3L1QxaVNxWVBVSjJiRzQ5bGYxQVltL2tyTVFIVDUzR2V6V2xmWmg0eFhzS3ptTTJqNlYzUGRmSzVDMkxVOXRsR3NEOW9laVBPZXh2L3duTm1uRTh6N284ejdsOTRsdGROM0V2dTV5T3RZQy9KUEVQVWI0T2NUMWZzaHVuUG9pOCs1MUNER0did2M2N1kvTWNWbnYvWldybzUwdlRuT2N0aC92L2x2TEhwSnlqL3UwMWZpMzlpK3Ruc1FRZ3pSdDhTUXpDZVNoekFlRERQVVhUYVRpcHJudE91eHA4MC9nLytobms2RUVzMC9YSGhWYzduem9JZFBrajVyRFhQaDhTRmRvN25hOGtPR0crdCtHRnQ0WFFXbXVka21uNVVJWDQ0Qnhrd3ovN3NUUWhUVmszdWtUVC9JZHFiYUd1ZVJlaUM2WmR4SnNmNFMrWm04M3lHSFhBK2M5Rjkwdy9YZVBVMlBvcDd6NDNuRk96Yk1UeWp3UFNqaVNFNC8wWDZHT3c4WitKUEdrL1JSOXdiKzQ3eUhPVzA5YmkveHJpS2JQWGR6dWMvNkxYeGNHSUZ4ZzhYbmpmN0d1Y0JUSjlKWE1iNTFPZFptc2FmTXkrWTV3aDB5dmZ0L2tRczBYVjdrUHM0ekhNdFo4aU5sN0JQNFh4T0prWmsvcGFzSzgzelBtdDJ4dzNPWTgvQy9CdHd2NVY1SHVSY3EzRjF6bWlaWnd3eTBNSHhkcDVGSTV6V0k4U1JqTS9GeHpEUFB4aDM0WFEra3pQTTVqbUtOWUo1bm1OdjBmUS91Ty9lOCtCVHJDK2N0aFpueTQybm9lL212NWYxby9QcHAvcjBNLzBBeHRyNHY0Vjl2UjA0VTJkNmM4NjRPdTBPck9Yam5sLzJwMXpXUmV4UG1iOHE1eDZOUyt3cE9PMEQySGJqWnBLSDhjYkhxS3dKNW4rYnNUYStISDhnNm94dE4yN0QvVmJSTG54STQyT1o5ODJ6SXpFRTR5T0pJYmllSDZxZVM4MS9EL0VpNDdFOHU4LzgvK1RaSStidnpIN1RMbzZETWI4YlYzSTIwdmhVN25jV1RucW50alEySHNSNUQrUHZXQytZZnlraFpOTWZZbjRYeHM0L2pFOW9QQWs3WS81LzRWZkhYbzgrZWprdGhMN0d1L0RjU1Bza3I3RTJkTm9mc2VmR2IzT0cyZnpWOURIWStDTE9MWnRuUG50TXh2dkl2bzB3VHkvMmtremZpWE1neG5xTWVtbXNlZW9TT3pKOUdIdEd4aFBRY2VNM2lROEkwN2R6ZUplcjErWVBzYmRvbnYvQkIzS2VYMHBXWnhoL3hka3RwNTNKZlZqbS81UnpQcWJ2alQvbVBlZzYzR3RnK2dLZTYrdjdRZnB5THQxNS9zNjlCdVk1by9Bc3BnL1FYK09yZVBaSXgzak9zOFpYT08zUHNwOWlmQlZyQk9PZmlOMElrLzlOUERmTTlLT0k4NXZlbmJXQWNOcUhVbjI2bVA0YiswSG0vNFM1MjNqbmdvL3hJMmU2VEwrVHRZRHhrZmgxeG8ybFgzMk42OUF1eThaQnJBVmNWbHZpQnViWm56aVM4VGpzbSsxd00rNWZNSDlyNW5mejdNT2NidHhPUHc1M1c2NWdiV2o4SWZGaDQ2MDRCK0o4Rm5LTzNXa25FeU15ejg0OFI4NDhuN0kvYUo2K1BFZk85Ry9SYTlPcmM0K0RjUi8xNFNMejlPWWVhdU4zZWFhQmVXcHJQYmpLOU1tME1kckNQYk9tZDBMZmQvVTRvdS9HUCtLL0NhZllEbWU5VE45Qno0dHJiTnkvY005cFQrTEc1dS9OWEcrZUF6Z0xaUHFPeUlQeHBzaURjUnZ1aGZHZWJBWFBrWFBhSmV3YkNxYzVuYldBWTNmajhmUE5NNXoxa1hsVzRkc2JmOG02enp6UGNYYmErQmFlYXlHTWJGK0Q3cHYrZ216RkNOZm5NbVV3S3VqczlaaitEckppZkEzUHZqWSt1bkJPNExqQ3ZaUHR1VWZNUEx0dzlzQjVOc1NITjE2c2lyeGduaG5jYTI5NmRYeDQ0MmJzRnh1dkZQOGM4ei9Ccy9YOGZOMzlaTnNYbUw2RytkMzlzQTMrdk9rZjQvOFpQOHQ1UCtkNUNYRkM0OW1TcTlKdVBnUEdzOFdFMDNQdHVCZEpPSjExNFoyZjV2a0EzVGR1eWhraDg5aGM0MjNvdlVKejlQcUNaU1c5RGlJOWlLZUdndGJWU2h2NUNacThVWVZmTHRYek9DYS9WYXA3ZjlVNmVzTHg1cVVyU2cyUzFXNklSdXNkQ0ZWTFcrdmJVSDF2bE41Y1FpcTlxREtkMy9oSThsYzc0WnA2NDVCZUU2R3ltNVJxcThVajlmYWdUVXA2bVZaNnJsd3QwWnVXdHRQb0o5a3NiYUNjVTFRMi9WNnJ0RzFwei9UMkg5NU1RVWZzTDFxRnl0bTJkTHR5cnBXNE5renZ4ZGxIM3pVRDYxMFZtNGhDTGV2cGYvNTkwOUptdWtqL1NKNjNpT3VrblJYRllzUzFVWDZEUktMVEQ0MUtkWldxaXJheXF1VTVUNm5vODB1RXRGUXZ0VTNjdzB0Nm5RU3ZYZFQ3SmlvZm1LS2UwalBtTzdQL0pmWU4wd3Q5TkZ5cTVNYXBvazNUNTdaTXZTa0ptV3NxUzRKUDEvTUNsRDNTYnhSQlJlcG53Vk51c2h2cFgwdFJ3STFTQlNySFBhVkN2NmhHdy9LUXRWZXEvSzJLVUs1OFdwQUpiWi9vRGRNdjJ5UXV6V3pwRytYcjVaS3EzNDdLdmFsd0J3bEJQWjdRbEVPeDZTK2RXU1YxTWk4cnlwMlZ2MUViR1JDWFZTdmxtSTc4aVl2YWsrNGdjVlVSWlRQOTJrS29SdDRRVmZmekY0NXRzMG5LVDkxTnc5Ylk3VHBLZVRmSk4raW1uQnVub2FlY3RPQVZxcS8yMUhROW9OTFRkZFdQT1NkeUJ6VlI2UnVKYnd0eHgyRFhTaS9LeWI4MzFraVJYeFg5clNFQkNaR2dmN0lvcFFOdENXMmwvdXlmTnp4RmJhWnY5VkxycXFoTmpGQVdtRngrOC9TSlhLUTNtU1N1V2hvSitqeVBHNXdWcVorYmFRd1pwVHFKdnJGNE5pNVZYdm1zeG5rSE1xdVNaRHRyRmpwU1Y1UXE2ZjN6Wk1CbkhmMnZuRXFDSjZ0UlNLNWlEYVdoZTZ1bnl0R05aSzlIa3FUMG1TYzNyMHFTLy9wNS9hUXVZMEFySkpaVjlmYVpUWlFLL1VDWDZIUit5NDJzcG1wdWtmSnRveHkyU29OUVhWeVVVS08wdWI3WDAyY01JS21xNm45RkVvVEdlWDUyTFpKdmFKWFlMTDE1dDE2TzNaaE9LN01nN3EzOEtUdEZ0Vkk5eUMyM2h2Wkc5MGQvNVVIZVVuK3hJSFIrTmZjS2VlUzJaOEdqVEZTVk9tUlIwVHljWndwejBmY29WWVAxSXJKaGZqS1dPT2habEE5eDNGUjVaSFVtSGJYYWNYMmRzWDI1cmxsWXE1VXFmM3hCNC9adGxmYUpKNVEzMXpzTFhuVnhiNnEyTTJyVWpGN2tYM3RSeVIrTytycHlYeloyK2pxcWE0WEswNk1zVTkzQ0JsWlR1VFgxUzBQOWhuWE91ZEczV1NocmFGVG8yOXBDdEpiZjZNczh1cm1NVU44R0Z2a1dxWGJZMXpBUE9jL2d3bHhVU1gyamQxUXZmVW50NVVsZWJtWTI2TldsTVdnbWcxU2V0bEpBSWpVY0xnWXBDMi9teVNZNjNSU2V4S0txTlRaUEoxclNtajkvejhOTmg2b1MzMHhMblY0dERWUzJYVFdTSU5YMGtPYUc4MnRWNlhuYWNIRnUyZGFWVlNjM2wzeHpKNGR3TU5SWjVLbGw3anpVQUkzUEFzNTBnNkF5Vkhub2NzZWlmRGtYWmhMNnBxYnlyNnFVS1FBdFd2V2tXQ2hHV0J6c0M0TEs3MHorV1Zpb2Z3UDlYdm41eTJydjdQUXVNUVp6czJSRTZLRXNsUFZTSHRTTVljL3R5dU9TQnppR05TdEViZ0dxenBEV2RKL1YxdDlxU1loaWRPcFlMSXJpa01XTnoyeldhb2duVkRiYlRPWWl4REtYZ3Jya1hNSmtrUys5SGQvNWkxb3d5OUxtUEhNeTF6Qis5VlBxK2trME4weTByRnE1ekd3aWE2Znh5ZU9lQlJaWnlEMkQwUXVsekxOQUxqSFhMc3RJV1E2eUt4SEtXeDdKcGtuVjg5eUZPbUNFd29pUlA2VWpwZGswOFoxK3paTER2N3JyelZsVzBuS3ZNb1paZmtQQm1SWHpiOURRaWp5cklYLzhRbG5JZVpiOW5LSW8wY1hSeWlPYlRUZTltUCtSa3lhY3AxK1hURjIwa2FxVU93bmxqVzZnMlNGQVpZVkEvSnRJMkxLNmxEdU5HWVlLWnB1ZmhiZWE4c2hpa2pzaVc2RGNCZEFxbjM1RHhZK3BVc09PVE02VHZCRkZuREZvMmFibWN1ZzZaa3BTeDZCV3R4TFNWTlF6bDBRMzVlNUNzTElibEhQT3RydEI2Z3JzWXN4ZmRmUHpkdEwveWdVelZiTWpRcUt3VURIaDV2NFArU3ZidUd5M2NtZGxLeFVqa21VZmpVOTJhOHFieXZvZG5obGphMGVCbEpHN2g3eXp6NFFFVTI3a3cvZWl4YXErWGdKSms2VXFTeEJkbEcxWmNPYjhtOGlEakdtTWJxSm1JZE5vTVIyTE1HUTl5Nm1SNnNpRndTOVBRMWtLODJma2w2MHRBeHdTbmUwVmd3V3VwaW1ZMzlHZ25BN1hoNVI1a0NzOExNV1dSaXRqRXN5V0hJN2N4K1haSmdRd1cvOHQ3YTJTcG9sRk9ic2hsSW9vSTI2SUJ6WTR6eFI1VkdsbjF2L2NVK1VwTTVkT1htVTlycnptSFkyb05ubGlaVk5YdzFvMmlkbGZ5aDJkalI2R0tRdFE3b0E4QURFSmhlcVhtMXVqVkxtS0lyVG5tZldZdXZ0ZCttNXRsakZHS0dlYTFUaGIvT2pOTE9wSVYzWkJRcTFRamhnTHRXYlJ1eXFLV3luV0c4b1liS3hFdGdKbGpjOGVMQk5CYmhWWlZ0NDdXMWtvdWhOV3Q5aVBaZmtybW85R1Vqa1NQY281TFBzTFpiVXZvMmhmVkNubXFXeHdRaDZ6R2NndVVRcHVteCtqUW9PaWU1SHRYQlBrSXErU3NJdGhGTEpVUnVOemszUFAwOWpLYSthcXhndTU4OGdtcmRqWFVaZGlhMWtYbEdmUXNtWXpucm1OMFU2NkZxc1RkT2FWc0E5WWpXaDVOb0xsTW5MdjVTVkRPRy9wOXFoVUkrcVdKU2htd2l3aDRiVFNPc1EwQzE3bHl2ZlVQbDVDWTlHcS9CUENIYndxTWJHRnNRbjF6MHBOdzFIcVBDaGx2elJQWk9sOU9tbkFZenFrRXJHd3l6NTQ1bzBoeW81TWJnWk5BR0VLa2JwY2czSlRXU2FIQTVoakVyR1VMWXRJL3NjeWp2enlQTUhBa2lwemxEdTFSbkp3OG9JMEJJSGFrQzY0RzY4M1ZtWERtamxqYXZpckxzVU1sZnNoUkN6M1RYbnRrS2NZeXNJK2hGOFBGODRhS2h6OUZTV1N1bkw4aHhxaEE3TWFsdTF2TEJmcEJMbzlwQ3drUHJ5RkxGK2hQUnJ3WDhqdU93V2RxQXllWnRGN2lXNlBXU3NzYTY3WWhuL3hTUDQ2QjVJbUQxSTBtWWJsR2FSc3kvRjZ5b1l4ODJTQksvcmtSUzNMeGpmVHNuZFhkbDNDbWRFdDhuOVpBR1diQkg4T0V1WGN3dW5JQTRZOXlQa2p5dmp5b2EzWkNtZmZFLyt3UEQ4VTF4Ri94V0g1Y20vbU1uSktPUjdMUDFLUFQrYU85Ny80Mll4QUh0Vnk2cnpTaXVWamVTWU1IeVRidnFocG9MQXB4VjdKZWgrTDZaQ2NtUGV6cnh2ZWI5RzJSSTlXM3JsUXRmNm9Ta3hkWlN0VlZMcEloUUNIYWNoOVc3YWZaWVZsSFZDMlRKRzZYTWZNbjgxSnJDNnpxNW5Wb25ZS0ExQlNqRVpvQlQxWlZ0bnl1akNYUi9RcmJIa3VzZkovRjZsMWVwQnR0Z3RraWFpVVZhdTRPbzlnVm5HQ1F5U0xUa29XV3hTa3VGREwxR3ptODNLbWNzMG5LdmdaK2NkaE0ySktqYXBuazU3TGprN09KV1NMUzM2NVBCcVdQZlR5c09lRlFYbnF5VGF0Ykt2QzFRb0JLaytlWmJjdmZpdUtHTDlWVGxtc3VqK2t5VEdueWNPWHVhTGZzcE9ZMVovT0Q0OGlwOGpsbGllOTNJY0VHTXJDa3gzdnFHY0lmOWpjY3EzRGJPU3h5WXY0b3Vtby9IeUphc3ZabHZXZEdRMnRYTWRQOTh0Zmo0bXdtSGw1Q010RmgwMkxWV0hXa25KWUs5dTY3TU5sL1EyTnpJTVF2bjVaVzZQYUlmZmx1c1N2NGEyWE82YmNEZGlPTE85NU1ORHI2R2k0eXNLWE94RmRMN3Q5MURyMHZPeDVsOWNwTWJXR0hTMVA4MFVQS01yT2E5Z1c2M3N4eERkbWdTeTJNUXNVZTdab3RmSWNsRmRsWmF0YStmQlNqWlFPUVlTdVpjTlkrUXJrSGFKSEl0OGNBOEp6am1rN3Qwa2ovZ3NKUHVIT2lQWFRjRm04aWUrWEZaeGM4L2lWbGJJWTY0Z1pwR2pCaXdvVDM3SlFoaU5ROW5LTDY2c1EvcndtekxJUURsTlpmc29qRndxVDFUMU1SUFFwTTNUWnZ1Y3hqWVZJS0Z2Wi9vWi9HQ3FWNTYyaXh4cGx4V2lFaEpYWHkyRThOVklMbG1WMXk1MWZ0bWJZUEg3NjJwMGZ5dlRYVUYweEZscTBFK1hxNXY5bEExK2NmbU1TaU1xWEY0NGhHQ0ZjeFNWK2xpYW91VU56RjRVYTVQSXlSM1JkMlFzTTJ4ZExzMWp4RlJXMitDMFBkSEc0V0JlV2wrcGw1U3IvajM3Q3pjOTFDTWVpNklWbWhjOXIwOVRieTc5UmIxLzVSbkxwb3hOaTliaWwzc3V1dDltWFdtbVVEdFExUVV5YksyaTV1L0QrdXRycFl0TlJiN2t2ZlNpc045S1h6bVFibDFzYzJkNFg3U0JkWXhTTlBzcjdaN3lTZmhmUkR0YlZTOWRIdXZpdGlUYTFTSyszL3FmWDhjZEZmdnVLNTErNlNMOHpSK3pZUGpmK1dxL3ZmMXl2Ylg5YWsvMFAyb0tacmRmY1J4NkQwdFprZmgzOVBlek9LNC9CSFAxazEwNTRaMTI4YXA5WDJFOFR6ek5LeTZ2NktXZXMzZ2xQR1lPVjd4NzBqZjdTQjJOR3B6Y0hwYTBiNmtYN3lKZS91N2hPcnlndk5qNm42eSs3Zyt4VWJhKzl6dkg2VHQ5UmZyVHRZbjBmSi9xTHFqdjkxZGI5ZWlKN2F2NStnUDlTeGxXNkdtcy80SFB4YjNDSzBuT3JEVHZOSEIzd1JYK1NsbnF6TC9lK2VCL1JSYnRvSysxaVM0SFgvRU9qRDZHOXdDc1JqczIwWWIweVRWMlMrb3kyc2NQMXFQSzloT01PbG9IV3V0Z3gvVkkvUHU3WDZjL1M5YXN1ZmgrbGZ1ek9NU0NPZWJMRlRIN1Nrd3QxMFRlYnE2T0dYS2xqYkdrcktlZHhPaHZHYnU5RWZXOGoyZUNpRHJTSFBHcXI3V3hlYStoTEQ0dHZLbTF4R3NZcDlSdkhYajB1OUE5MWpYNDhtZTFndCtGQnBhMnFNVDFFUWorQVkyV012Mmp0SmNnYnFQN1FrQlBhK1l6NER1YlluYjdRYjhqWXYvU1hzV2JRcTR6VGRyL3I4cGw0dStydjlwYjFwMFN2MEo0Nk1rS2RTRjlWN1RydGRvMFY4c2h0UWFZekJqcEpzMzRNWnZENkJnMzJmZnJMZHpXLzFJbGI2c1FUNDQ1dUhXVDlRb2JvY3piSTZYKyswMWIwVHRtWDNsVy9vZ05CZTAzNTBqOThwLy80eS9XSTZJczlydDk3YkFkeXk2SGJSRjhPMVhXbTZxR3VTbU5NLzFVbzNhbWlzY1gvb3hUeUxYMy9WWWFDY2JqQThoZDVwRHBwSUtIVkVCKzdBTlFOR2FZTzZEc3kvcUk2bTNIcXIrc1hYWXdoRjcvdmFUMko5cEF2WTMrMDVQbG44ZDZsZkp0WUI4NVNXZlJycEVjWDZTdjZmeWg5cG5xK2NhL0tkSDcwRjJOUG4xOVNHQ2Rra1VNT1lhdTZPZjNadGp2MEozVkJGanJZZnFGTGxQM29LTW1TNnZNTng2OHRsL0R1eS9GT2pxeUpqdXl2czE3eHR6RTZyMDZtSGZBeDVtT2NyKzRrUy9tK3lWRVc3TEY0N3RSRkdkUnhGYmZHU09ld1A4akM5NzBWNDFXanFTdjJpUDZqRHVSRGZycVR0blNhTHAzWUxKM3R2TWZwZHlWTC9YQ2h4alRraFhUSTAzdTZ2dVB4MHR5aXFYcDhJVjJnVGZCdzNBSTdpSjBQK1ExN2dhM0FubjNrdmtCZmpyQnRpWG1HT2lFNzFPTkpIdHZMWHB2SzJGY1g4aDU4L05WVE12UktlWldodnlGSHRKRjVpYjU5V21td3ZkaDY2a0hlMUkyOE95amo0b1VkM3NtOHlCZmwxbFo2YlR1V1hwQStJbnNjSzluVCtlZ2tjY3JuVU0rTHpFVzd1WS9xYXV5V2ljRG0rS1BLNkdUeHpwYXdoMzEvVGRldE1qWU5QUmRTSnZXa2I5N1FoUjAvVm9JNFhJUDJrc3AvbS9sTTF6dkNCNDBwMnpQNjRRU08rTUdqaTdHRlR2MCtFQi8xWTl5Wm83RzdYRHFoWDJwMG4zVFQ0NCtNWTEvZ3ZVLzBTY2k3NnNWRm0va2RmWHdWdlpiOW91ekpTdnVBWlJWYlFUNzBkOHpWMk8yZHhJZHM4bHZvTXIvZm8zejZDYmZqVml6SjZaVzZRaStvZTlTSGVaVjZ2NlU4SnV2Nld0ZEtsOWxhZW8xZFJUZkpYM2Q5cEx5ZnRSMm1YL3FyQU9xUGpVVTJrVEhzSGVtZ3B6bGMzK2RZRGtsSC8wL1E5YVF1Zkl4cGx0blhkTkczNU1NOGdLdzhLeHJqaWN4aEo5RlQ2czdGbkVWK01kNmtHNmk2UGF1Mmg1eGhHOXVJanN6d081aS8yQnF1alcwUHFFZTBHeHMvWER5TUtUSittL0tqUFBncGkzYlRGNXRwbmczYlNKdDFCMmxxVXpmTDBlUGFqTHBmMXlUSjJCbnF5MmcvVitLblBjcjdJVjNVcjFQZjNHZU1DLzI1aStZMitqMzhzeTNWR0d3Qjh5WHpJMzRKZFF6L1RLWjV2YTBKT1JndmZlaWl2QS9YZGFRNkJSdE1YOTdDcTFZc0IrZ2J0dUpCdDU4NUNmMUZYMmd6Y3dWODVJMnZGbmsvWnY2bFBIcFRobmcydmdhdmR3czc3ZmtBWHZKWUpnWEdWdUduOEZ0SEtTTy8wWi93TTlmRzlSUitrTXA1bmx2RWRTSHIxSk81RTVzTC95SGNqb0VjU01jMzRiWnAwWml6NlplWitrN2V0TDJucnYwS2MvRFB4K1c4TGo4KzF3T2JBQyt5UDB2OU1sczhpMnp2YVJQNnBkUDQ2K2QzYkQ5dEppM3pXTktKZ2t5anEzdktsaUg3WFRYSTZBOTZFZmIwVkk1K3luRkVIcEFUeGo3bVp2Smt2aUZQN0ROeWdKeHNiMTgzMmtDZHNXbllNT3JKT0lRZU1YNzBBMlA0SExZTWZkSVY4eThYWThSZmZHMyszaUcrSDJSM1J0aGU2ZlJtcWdQekhkZkR1cEJEeG9FNjRWK2hjOURDeDBJL3FWUHlML1RiRG5KVzd0RzhqT3pnNjhadno5eVFiVG0ralU1MnI5Y2g3TVJUUFA3V2RhTGVwQTFmUlU5UlQ3SVhjOXFpTzVXWDZrMmU1SStzVW5kMGxycjM1ekVMNGgvTjQ4cUdTUS92MER5amlRVDlPTnJ0dkYvMWd4Zk0zQnl5emZneWQvTzlPSC9yTkhEcEpGMlBtdzhkUWQ1aUhrT2Y2UzlrZ0RrY20wWmYwWlpLTlJyZkplUTk3Q3JyRHZKNlNiUS81UERRVDloay9qS2ZZc2Zld0VaWUI1Q3pzSmQxTkFjeWhwRm5COWtJNUFkZmhqNmtuN2lvKzBUN3V1UjduTkw5UTVlMjVFc2JhdzJLWGNTbkNsdEtmck9VcG9FYUZ1c0ZMdHJKWEUyOUdVUHFIYkpBZWVFNzhCMmRpSHFHblppaVBNTyt0YkU5VGVzSGpSWGp6RzhIU3FtYVNIYW1XSVlQMWhveGZNVGx5b002ZExkOXZVTlgrSXNEMUxpSFZUY3dOaEc1aUxtSitZQjJoejFGWHFnN2ZZYzhVWWVrWi8rUGphWjlZZE9DaG8ybnJhRkh2M0JMa09VMFpJbjhvMTlJeS96S1BKUG1Vc2todjhkdjRYOFJXV0FlV28yOTlOcUFlbU8vS0N2czJXRzZzTDh4RDVNUGJXUmRoVzNRVTZSS2plUzBqRkYrZjhyZTBYL1lvdERGSzJTZlRuU2ZZNmRDZnFsYkx3MHNkYU5zL0cvcVJ4blVnN1VidWgxemZheXhXV3QyVmJyb1ovbzRmRlV1K2dQN1NUOVRCanBER1Y5NDNzV080YnVHci9PcXJ2clduYkFGc2Q1TWRsS0tRVDM0dnAxaytBS3RMN2JYM3lYYU00MXkrVHRmNVdKZitZNU5DeHVJdldVOHBxc1BtRU9SWmE2SXBkenQ5UnQ4OUZHYWoxMGVZNkZUOWFVK3RnMnNCMmdMOWNZK1FEdE8vUXVOdHVGcllwUDVuYlQwR2I1OTBBZkpIb1lON1NGNTdxQXIxclRZdE12bEJ6QStkVlVuNUlaNWsrL1kvZkJGNloraS9XZnhHSDNQSEl4TW5LdTZoVDlMT3licCsvVnEvelBDaTdXMllINGhIL3hYMnNEWTA0WnplZnlWZUhkbEx2TTFnTDcwZklDK0VXTmdQWFdFQklUMTFIUHFUT2FNUjEybjBEbnFIZktiYkYvQjV0SmVmTHJUOWYxTjdLWEhJdVp1OEJMNXNhU2p2TERieE5WaS9ZbnNNVzR4ZHhDem9WOWpub3M1bGpnS2FZYW9iVGVJeGpvajlQT253dGgwVjJUdlZHNER6RjI2M2w4SmZ4TTZQa2pVQmJ1VDVtNzF3eHlsMzBYMldIZVhsbnBLRjV2THpzS0Rqc0x6bHRZT0M2VUlrK24vdi9uNStMbVJKekVaOFAwYS83bllQOWs1K3JHUjdjWFZ5aCs5UTE5dmxpS0dqaU03TCt2M1dCZlNOc2FpTTM2aDFpQTdTMS9HWUFNc0UyZklkc0hML0lMYzl0RGlnSDVoZkZqUDQxTlFIMlE4eGl6cWNZZm0xckF4akxWYzJkSzFrbHZHTVBuTHlxKzkraUw4WjhhSHRjMC8xTGlKa3IySWMwd3J4QnRtRldLVXNWYU5kUXRqcXJjdHJ2ZWRzTXVrdTlmclYyaGhhNmgzR2hQTks4eHp5TUFCOWt1UVlmb0plMG1iQmtvWEdRdDBLK1paNUNER216bVN2dHhESFJKMUlUMWxVZ2ZLdzBlblBPUWk5WmtFSjlaZVNlWXRlNnh4U0l2TThoY2ZuUFUrWmQ0dVoxNTNOSlh1VlozbzQxMTRCYnJIRmYrWU5VQW42ZGlteXF1MUhNcjZrcTltc2czN3lPNWM0MWhWeEUraW5SRUhZMzFEK2VqcVNHVjRuZGNzMUdHQWZNQ0k0WVJ0b2QxMWxULzZmYlR5UUwvUmU4YWE5ditxb0haUlp5NlJUTVU2NWhDVmdjK0JUeGJqeXRoOG96bUplQ01YN2Z1bjdWVFlxdWhiNXRNWUkrSW1JUXUwaFRwQUo2NzN3Ti9pM01YWUZmM01tcU9GTW1mZGhHK0ZQYUFlOU9manVsdUhlQU1YOWFHUGlFZlRSNndEOE9tWmowSS93d1pHUElWOHdvK0krU3JpNnRpem00azFPbjY3ZnY2eXpJV1BUZDRoZDJIN2FUdC9VeDlmb1RpNC9YNXMzMkhxNDYvdmxpL205WEg0QU1nU0YrbmlMNzl6UmY4ancvUTVOcGgxQVhYQmRsQ1hrNVR2YnBLcFdHTlRoemMwOWxIM21BL3hRNWszcWN0RzhndlJ3OURyWXZ3bytSUE9POG9uem9KdUg4NGR2YzVycWV6QU4xcERocjR6dG1IL3NBdmdUV1EvenltMEkvSkg1dmw5Z2VhRzUyNHIrNi9KeC9iZms2VlBWL0VJWXdYY2FIdVBtSVBjSm5qTzBIaXdUNEdOb0IwTjFMY25pb1plM20vZERCbkhCakRmaG85RWZMYVg4bWVOZ2kvRUhJb2M0aHN3dDRldWhNeVFmL2lPMUxXZTdERXlGenFMbnh2eWRxWDBIQnZOK3FpRitGYUlSdndCZXhWeXNwVUNRNnNsMzhnSFplTC9NOC9NVkwzdVZ6cjZFNzVhR3F0WXg5Tm5UK2t2K3k3VUFWdUZuc2I4RWZhQ2d4L3dIcW4yelZGZG92K3BlL1FGOVF3WnBHM2t4UndXY3lvNkJCOTl5RHFBZWxNbnlxRmU0UWRRRi9KSGovaTduWDN5UTlpbkVmTm5tcE93UDZGbjhFUjk0THRTY3RUYlBsakUyeHBxSGtJbTZiOFJ1cUp2bys1dmlhYmxZZWxXNWxLTi8yWGVUOEh2SU0rTGJzMlljbGk3MDYva3oxNFIrY2NjUUg3WWlmQmoyWU9DRHpsSXNWRDNiY3dqdEtldDdBUHRHYTl5c1ZIc0o5MHVmYnRHQ1Q2UVQvdU8rRzdVOVlYN0pud1laQno1UVpZRHg5cUZlV2lVcm1YWFp2bW12RmpiOWxFNTRiKzhLbWNsZlB2VWh4cGIyb0xOb3M3b04rdU5RNjByRVJPaGJjUmxhQ2Y3VnRpRGlIUEVlTkJ1OGdrZmdiVU42OGF3VC9RRlBLekg0ZUd1UEw0VEQrZjdXYXJyZVlxdmhlK1hZa25TNGJDWHlXOVdmWWVMMXVNYTZaWG1kc3JGem9VL0UzYVkrWUx4MmUzeVBCZkUzbW40aDhrUGxEK1FZbEwrSHJHV3NHdmt6WGpoTnpKZXpPM0lkNHdGYVpublVxeXI0QXNRWDQwK1FJWnZ0czV5NmVrMDYrVVluNHI1alRnRGU2UmhHeWlYdmNDd2liUWo1SUI2Ull3VkhYcUlXNFFMdjFNKzdhVjg1anhpVmFPbHc0d3hOamRpTjNmZFZJNFpoaTM4V3ZOelN4NGRxN0x4MC9CSllnMmVZakd5TmROa2JDTEdSYjhSNDcxV0JiR21pOWh1cEVQUGtZZm9kNjdrUzZ2TXZocEhZc0x3SWxmZkd2L2Irb052QzI4ZHhRUmlMeTNXdmRTMXF1amhrNFl2Z2J6Ry9CVytvSjU2VlJxaksyS1k3ZkNkUEg0UlczcWVRMjZPOVNEN2pObnVsZzE4MVBCQlE5NnYxcHowbWVUNkNlbFNIM1Z3K01QRWdVakR2aFZwcmxPL1UxZmlmV0d2OExsaXJxSit0VFZSUHVqeGpQbWlpM1dLTnZTWFhTakdLMDVUdjYyUW5VSkcrUjcrRk5kRDduZGsvdzhKSVcyaFg2THVFWitQUGYvaWZrL0U1N0hwbDdIdnB6SllkNlc5WU5zOTJvWVBHbk0wUGloWVQwWllQOFlSWTJITThEUE9VeDlnNCtKc0FuNHM5bTZFWk9hY1I3SU1jZlVraHV4NWtMcFFEK1FwMXQvVXM3RUNiK2NYWW9mWWNPdzdQUFFyZlRSYUV6Ryt4bVBVeWVrWUQrcUFuY0VPRkdQT3g2cGN4bzlid3ZURXlkS2hxaHorSW5QcUpScm5pRzNRZDJ0bGQvYm1kVzN5eTVqanNJV3h6cUpmc1N1WFlDZllXOVJtWGNndDlVZWZZLzZoYmRpTEZLUEZCcmp1akxkVWNMM3R4TFpqQzJsSGFxZkhMNTI5NEhFaFhoZnpuVDRQdVk3WUV2R3lXSE5QbFR6RXVCRy9ESXdPZ1BGL3NLTlJEK3FOZjA4K05YbGNzQzc2Y2FyOWNlb1JzVmYycDhualJmbGg1RUc3UzljcGh1SDZrMS9FQWlKV2htMksrVEgwYWdmNzdmeEd1Ylc4RHh1Mm04VjR4TStpbmFkNW5WN052MkZIbWtsSFZxcHZJbmFIUHNTK1VlZ2RNZWVZcjdHUnpPLzRkYkdPSEt4OHc4OGZKUnd4T2NhQThtSU9PWXN6TWJhdGJ4WGlqOHdMajZyK2U2a3U4RkkrN1dMdm1yMXcydFJIYVcvMm1ScnF4dm1maUQ4Vlk0ZC9seDN5RHArUlBWcjBESDc2Sk9ZM3h1WmcrWTJ4N3gvbkdlQkJab3QrTFh2azlBUDZWdlNSd3ViUU42K29ubk5WY05nTXlzUGZqUE1SUDZtZEwya01ocXBTM2IySGlUMFAvNEh2ZFhUVjFjRy90MlZiNzVEUHByYzZyYmNaeUVWeFg0TzluRGdMaEszNnk1NXlZVzJMSFVRM2lCbGpQMW9wM2hDNnlUNE9lWVc5b08yMGhkZzZlaDN6SzJYVDc4aHVyR05pbjRTMmNwMHR2NFRmNkk5b0UrMmozOEpHOGR0dGFsZXM4eUplRXZ1V1lZZWJxbzYwR1ptQmQ2WHNTYXlWeUtNZWo4Ym1YSkw2dkNpYjJGQms2Tyt4NmZPMXA5VkFhKzdrajZndFlRdGlyUlJ6T1BSTE5XY1Z6NGRSeDJmbEMwU3Nnb3R4WUM1Z0RHSy9PdmFzdWVndlBaa3I2UlU0eFFDcEgrdGt5eDR4UU1hSWRsUVY1dXpXaVpJZitwMExXeHcyR0hrdXhySGpMRWIwM3dmU1pmeUxDOVFmVDB0K3p0VTFYTmV0K3M2YUk5WTlDOFgvcy8wSGZQWTBEeFYrZjBpK05iS0N2b3kxMzRCOUhDeVpqWmcwOFQ3bU9QeGdiR3o0d2hQMFEzTzFnVEZIdnhpN0taSy9XSWN6RnZneDVBRlBySDNDaHZCM0ovSEhYZ3l5VGQyeEVSMUZSeitLOG84TzF0WDFpaVplMm9QTlNQRkEvQktQRTNXai9zekQrYmthbVFmWml2bCtkOGxhN0h0em9TTzBqell3ZHVIcm51djVKZGFBRTNROVUranI5d3A3aERFdW5FSGpuTUZwMnF2QkxsRnYxczJ4TnR4UVYvaitmMThMMHZkMTdDOVJic3dGMUNuaU9PaENmUWxFekRmVWk3Nmt2b3R0MzlQNjJHdjdCZXJjTmQ3ZlpjeEQ5N2hxU2NDZ0UxT0p1WS85c09TUHlxOGRKVU1Xc1p2L1QrZjQ3WHpKMnprOG10UHljYVh3Uk8xSE5uUThKdUk4ektYZ1FiYnQxSkUrS09aVmhYTXNxa3VYa1hsdTVYZlN3VXY4bFBRUkgwYWVsbm92SXVZR1BSbXk5S0g2SVBaRG9CVjltK2FhaXlQV1hsemJwRDZ6ZkNBRFZYVldJT0loeFA3bzg3Q2ZzU2NUYTl1WGRaMmdObTB2djQyOE9kZEszc3dqZk9kY1R2UnR4SEwwMXI5VUgvUTk0Z29oUDJHWDAvck5NbG5zSitZNDlrTGpIQlk2Z3IyTmVmQnFaYkxUWFZxRDJIOG4zNkVhZjJLeHp4ZmkxS3hCc1djeHQ5Skc4b3cyeHB4QW1idXJmWHd2eG1qRHRpZjc2bk52NE1YcThNRHNrY1grR2ZMeGQzbVA4NXg2YWxTS3Q4RFBlR08vOFpFbzR5dDE2SXNhNS9QVWhsaHpIZjU0MXJPemRNVjhGWHNiNkFGKzNlN2lJUi9xU0QvaEN6Rkh4Ymd4aG5IR2p2WkdmL0liOW81NFhxemRvTEhma1B4S3g5ait2dS9KczNQNG5iM3RXT2R5MWlSaVhzd0xiOXUrUmh3aC9JYmlHZGR0dlRmQ0dFYytIS0l1cmtzNDY2UzNweVFaSVg1eW1OYnpwTUdIQ1AzR2ZzU2FtdXNMNmVUeGltbUg3VTI2cEw0Tkg1VCt1MC9qZktQMlFoZ0xmQWZHalhHL3p2bGorOVA4VVlqQklLL3NUK01IMzY0OE5FeWx2bzU3MCtiaWZpYm5SZWhyN0FSNmlhMFBuMDFQTjB3NmwvclNkalhXb3VIZlJubk1yY2dCYzJ0cVorSGNLLzBWZmhwcmhTUHRaNGZ0RDNrbkw3MWRwdlNaMXd2VUtlU1dNM1lwVnFCMVp2aVFFVlBCRnQyaTlWUlZqUk5sN1c5N0hldjRHdHJEb1Izd3p1S2NnODlNOE5zU3ppNElveVBVQmYzZVM0WVZ1YVJmOEMzQ2o4S3VSTHptUDVxajJlTU8zeXBpcDlTSnMwcG5xTCtMWnhPNGluNEV1aGRyRSt3bitVQVBIK0FUMVlteGlUMGUxZ0Z4ZmpMbUN0SWVJN3VDM3AxaHZRcy9kSVhzYXNqMUNoVzJXQXMyZkkzSS96YnRpWjJyamJDWUI3R04rQVdjSFUvN2ZPN1h1ZHJ2ZlZyWHhlcVRLOVNtZEJhK3NOY1c1MFVaZi9vTzNjSk9vT01kVkxlUXVYU21Rcnl4YnhNeElQWkhRcDRpRGhCclFjcUV6cnlEL01jNXdtS2NBenNUZXhQUlY3UW41S21IOWpIamJGRHNOWVZQTjFkanVGVmhucUdleE5MRGZ6OWZnVmY0MEl2cjVaL01scTdHK3BuMmRGYjdxRlA0ckpFUFpjUWN4Ky8vVjlpWHdIazlmbTFQZXpHWWFsSUlVNUpwbjJyYXR5bXRoRll0MnFabWFxcXBwbWFtWFFzdFU2S2thRlZSYVpOcFk2UVVpaENTa0F5aUVFSUlJYnpYOWV1Ni8rLzFQSi9uZlIrZno0elRtZk05OTduM2M1OXo3bk16emkrTVk4WUdFSjRDKzJmUUY0YkRSa2lmZTdDWFJmUWFuUXRjUjJOc1R5ZzcyRkpqMmJjY09QaGJXSFBaeDV6RElXNkNmbGpLR0d4YzdEZktjSTQrQkh5N1JyWTk5aVYxL1BXYWsrei9HM0dlNERyUkdYVXZnN2tUZkRYaC9CYk95WXd2SnM4dU9NdHhMTXlCRFlKckFjYzU5emlXenpVdCtINjVWb1d6Sk9XbExaSzZPZGNmWkJpT21nYTdOcy9ZN1Bjdk1MYkRHc215MmI1c3EzQys5dk5EME5HNEIzTWNCLzlJc0x2eSs2c3c3cGtXTCtpSXdSYkZ1c3dCbm5zTmJROGNkMXp6K2VNNi95bnBZL1NsOENmME8yMWl3Uy9JdlozN1ZlaGo0cWh6YzU5bG5lZzNPb294TUJtTGM0ZzdZRGR5M0FUN0V2MDJRUThuRC9ZSjk1YlMrT0JtakwxbzlNMUNESzZ3VDRiNHZubFlJOE84dWcxMm9JQ25UNGpqaUdPTGV5ajc2VVBvUXV5bitiam9FV0thdzN3TWJScnN6dXdieXNaNFhQTGhlckdaVDdGcW5JWTQzUEE5NVdaOXdsaTVFY3JMZUZ5cWlLUjVQRllnYXJMZzFYaDdmaHJnU0NwMXZKT1hJM3d2ck9mekJJLzVHell6d0pGMHplOFhpRm9oL0JmZ3MxcndWajRuSWZoUkRJUU40bmt0NkhPRmovcWdRTlJPd2YraTNEelJmUHN2N2wwSXZ3MDhEd2krRjIxOVNQQko4RGtzZUNSeWZSNFJmQmJsSHBOc242TGNrNExIWVhDY0Jjd0xXTytCWjVENUlmdDJNZVM1S1BqNFA1Y01WNUduMzhDemNJQmg3QzRPbUh4T2duODV3SkhVYjJqUE9ORnNnZnlWQkM4SEhDLzRMdEJVRi93bVpFZ1EzQjZ5SlFxZUM1NE54Yk1wMmo5SitBMW8vOWFDZDBPMjlvSzdnWDlId1ErQlp5ZkJNYWhYTjhFN0FQY1VmQ2RvK2dpZWhqWWNJSGdueWtvSk5KQXpUZkFpMEtRTHJvU0Jud0U0a29vZjVVNFcvbDk4TzAxd0hReXdHWUsvZ1p3NWdwOEF6M21DWDhDM0N3U1BoRHlMQkUvQkdGaWl1Zyt3Y290Z3ZLMFcvaDdJc0VId3ZTZzNWelFaMW9iVE9hNEUzNGYyekJQOVpjRHZGLzRaRzUrVklOc0I0VnVBenlIQnQ2TE5RMXU5akxvY0Z2dytlQjVST3d6aEV4WEN0N1h4dndheW5SUitFdmdmVmtyVmUxSDMwNkZOd1BPTTRLZFE5N09TY3diNG5CZitHdUF2Q0w4VTdjQ2crc2pUaENnM0dqQnBlb0pQak9BZjBENnhndXYvakdTaGdnZURaM25CTDRBbURqQjUzdmxUZ2FoNDhXeUFjWklvbWdVWTV3MUZNeGN5SndrL0Z2MHlYcy9UREFPK3RmQkpuTE5LZVYwSlBOdUw1OGQ4N2xCOEVsQnVIK0hmQXA4d2JyZWhyZExFcHpMYUtsMXdZNDQzMFJlMThma08ybit5ZVBZR3pRekJENkZONXVuYmU5QW1Dd1EvYTJ0T0U3VGhvbEIzbS90TFFMOUM5TjhhL1NEQXE0WHZpSExYQXVaMTB5OUFueWQ4UzlRM2pMZWlrSCtQOE85QXR2MlNmekRhODdEd3BmbWNnV1JZZ1g0NUxueFRqTThBeDZIdjhnVS9BSjRuQmJmSEduaGEzNzRQL21lRnZ3bDh6Z251Z0RGelhqVHZnZWFpOEYzUlIyRzlyYzREMmJQcVg2NXBnbDhGZll6Z2ViUTdBbzZzRlpDdHZPRFJrRDlPY0NiNnBaTGdFaWczWHQ5K0NEaEI4QWpJMWxBMFdhaExlTDdxUy9CcEt2dzJsSnNrK3RYb28vYUEyVzZyTVFlN2llWktHM3Nid0wrbjZKK0FEQU5Fa3d3K0tZSTc0OXMwd1ljZ2YxaExiK1RhSXZ3YzRETUVQd0krV1lJZnh6bzJYdkI5NERrNXlJOHhNRTJ5TFFKTndEK050cDBudUJIR3d3TEJ2VkRmUllJWGdNOFN3Vlc0QndsdUMveHF3YTlDdHJDRzl3Rk5XQU4zUWJhMW9pa0puaHNFN3dTOFJmQjByb2VDSzJCczd4VGNEbkJZWjI2Rm5HRnRHUVg1ODBUek84YnpIdFZyRS9nY0V2NWVybDJDSjl0NE9NczFVUFFmb3czemhjL2xXQlY4RmNvOUxmZ0gwSjhSZlVIVTk3emdvNmhqV0pNWGdROGRxNUdubENCRFljRkxRVjljOExPZ2lSWThIenhqQUVkMEJ0Q1hFejRYUE1PKzFoZDFMQy84UjZDUEE4eHlONkNkcXd2L1BzWi9HR014cGxkczVSZ1cvd3JZRnhycTI5NFluNjBGMzhBOVYzeGk4VzJZSXpQUnp0MkVmd24wUFVWL0ZQS25DRDhHL05QRS8yL0lIOWFIUmFEUEVIMDY4Sk5GMzV4akR6QjFqNG5nRStiQ0ZNaTJRRFRQZ1ZuUTVYcEN0dENlZjJLdUxSTFBIZWpyc083MUIzNjFhQ2JZbnRJYjdiWlcrSTNnczBId1JOdmpEdkFwS1BHOG0yTkpOSWZRbm9HbUhPajNDSitPc2JGZmNMYnhUTFA1K3lIcWRVRDRtbGdERHdsKzNjYkRMSXpEdzRKVE1NZVBDQzRLL0RIQlE5RzJ4eVhibnphbkxvTU1wMFZ6Ry9kZnRmOHd3T2VFZnhreS9HZjhveS9PaTA4R0R6UjVsK0JSR0pQUmdDUFBKcUx1c1lBak9pM2FzSnp3cFRBRzRvUnZaR3ZndjdhblhJYzVVa2swUDNEOTFMZS9nVStDeW5vUjN3YmRaajdrcjZSVS95WFJQazMxN1gyUUlVbndBTFJWYThIOXFDc0tyc09jK09Kek0rVHZLUDZGVUZaUHdXVkFFL2JCWjFCdWlyNTlEWDBhOXJqdnVWOEwzd1J0bFM2NE1XTnRCTSt5ZVRFRTM0YTVlUWp5WjRubUk5Q0VkZkpkM2x0V3VkK2dIY2FySGQ2Q25OTWtXemZ1Ny9yMlU4NFg4WHdVL0JlSVpoTG13Z3JCQzNqdUVKOEhBT2NLenVaWlEvQnd3UHNGYjBEZGc0NzNESGdlRXArYjBNN0hWTzVFOU9seHdZc0I1d3ZlZ25GeVV2U3ZvS3l6NHZrejF6clJGQWYrQW1ETzM1YmdXZno1Uy9RMU1ZWmpBVWZXVExSSk9jRS80WTloclJqUHRUZk1JN1I1bU9NUG9rM0tpLzV5Nm5YaStRRm9xZ3VmaWZHV0lQaDE0RU03SjBDZVJORS9BdjVKb21sbS9iS01PcDd3RlZCV2U4R1YwVzRkQVVlZVBVV2ZkaE4rRVdUb0tYZ1orUGNSelI3UXB3anVpTEdhTHBvYnFPTUJwdnYvQVQ0cEpYeDE5R05vazltUWVaN2dITW9tT0kxN3ErRDdNYzduNlhtdkZhaHZhSi91NkpjbHFtTWI3TXZoTEhtVWE3WGFJWjU2bldSN0RQWGRJcDdwa0NGWGNEM3dDWHZCb3hoN080Vi9EakxrQ2Y0RWRkd2pQZzBoendIaHg5aThlNCs2aDhiRHF5ajNFR2dpT2Q0QUh4ZjhIZHJrakw3OUZYek9TdjY3SWNNRndSMXRYZjBGUE1QK05RSGp0dkJ1UFV1Szlvd0JITkZ2MGI5aERlUlQ2YkdpZWQvT3VUZEMvampnSTA4aGNDMFNuSVQrU2hDZkxhQlBGTndkK0lhQzk0TytxZWhmd0hnT2RkeUxlclVXZmpENnNhUG9LNkZ0Zzk1MWhQa3ZoRDhLK202U3JSVDZhNERnQnVBWjlyc2VxRXM2OEpGOGtPQXpXVFM5d1Qrc09WL3k3Q21lTS9rY2htaEdVLzhVdmhENHI1QnNwVUcvVnZqTjZOOGdUeUdlTi9YdGgzYk9IWXYyM3ltYWZKNHh4V2NuMXhQQkhUQ1d3cnE5SG53T2lYNDkyMUJqYnd2d2g0Vy9EdjBZeHZrTitQYUk4RjhCUGliNE5hNC9namRSUnhUL0g3Z1dDVC9PemxOSEljOUp5Zk9wNmM4Yk1UYk9pSDZTcmZPM1lGMDZLL3hvcy9OTVFwdWZFLzREMVBlODJxUU45OFFYOU55ZTdXVjkwTTdSd0VmR1AvaUhjc3ZiMmJZZXlvb1J6YWZvdTFqQjQ3QVlsQU1jZWNJRGRZa1Qva251ZllKN1FiWjRsWnZJOWhTK0l0b2hyQnNGVU4rd3BpMEZuNGFpNld0bjg0V1FKNHpKZGhnUG9mMy9NSDNwT0dScnFtKzM4Qnl0Y2ZzV3lnMzFyV3g3Ym5XMGVaTGt2dzM0c0E3L0FqNmgzSzl0cnRYRUdHaXZ1bXpqK05lMzNUQy9RbC9QUVZseGVOYWYrSGJvaXo2aUdjenpqbVRiemoxUlQ5UWRNZG5lcGoxSE5QbG9uM1RCZDZDL3doeUpSVitFYyt0TXJDRVpvSWs4WlFnRDhUVFJmNEZ2WndpdWhmTmpqbVFZQVprWFNQN0xJTU1LMGV4QXVhc0Zud0hQc043ZWgzTFhDcjhlUERjSUxnUStXOFJuQytqekJHY0FQcUN5bnVRZUxmb0hPRWNFWjlpWjlDcTB5VEhKUHgxd3FOY0t5SFphOUt2eDdSbkI4NEFQWSs4SzRNOEszZzk4NlBmWk9QU2Zrd3duR1BDcWRhYW42Wjk3dUQ1TDV0RmNoL2RJcjBCL1JRditndllad0JIZEVnRWhZVDhxUlZzaThKUjVKV2ppUmRNYy9JTSswQi80NnVKekY1UFlxOXhvNEJPQlo3blAwRmFqYjR1YWJlME5qTGZXK25ZVWNqRjBGTTNuS0xlVDhHWE0xcHBoWjhBT3RCK0tmaFh4NHJrT1BQdm8yOUlvTjBVMFhTRlBtdkFmMlA2eUhlTS96SkdMUE9Pb3ZtMTVWbEpadC9LTUkzeEZqaXZWNjArVXRVSTg0L0Z0MEE5L3NYUFRXTzdqb2ltSThieEY4bHhqOXNCajRKTXJta05jdHdXL1FWdU55cnFjWTB6ZnZvYXlqZ2gva0d1czhQbWN5Nkdkc1FlZEZzMXluaU9FTDg2emcvaFBRcmtYQmQrTThWQjRyNTVMQm4wMDRNalk0M2tXTU90K0RIMFJKM3h2ak8xS2d0dWozSEErZlFIMDhlTHpFT1NmcCtjVUY2Tk5Fa1NmZzNHWUtKcU8zS01GUDJabmtGTjJEcjBEYTA1cmZUc2I4N2U5NE9YVTl3Q3pqcG1nNlNuOGVMUkpIOEVuamVacnlCL1cwckZZendlbzNCZDVGZ3ZqRm5VSmRmd0VmczAwMGZSRnVSbkNEemRiZlNXVUZlQWl0T2VJZndjN3g3MERtbkJ1dlp4bkRmSDVtV05HYlhzVnZnMzY4Qy80Tm96dHF6bE9najRESFNsSDhueHR1c1JSVkc2QmVGWkNYWUl1dWhjMGk0U3ZSaDFEOEYvb294VnFrNm0wMndqL0dmb2wySC9hWTk4SnVseDFqTDFnVjZ5QmNSVnNJOW1nM3lJK0ZURzI4OFRuTlQ2dEtEa25RWjZ3VmhRM1crS3prT0dBYUNaZzdBVWQ1b3paLzJ0eFhJbG5Oc285SXZvbTFEZUVyMkRqcWd6R1c3N2E4M3V1bWNKUDVmalh0MCtabnRNWFpRWGZTanprdnlENnAwd1BhWVErdXFodk4wR2V3aTlLRHdkTmNjR2YyZm5vWnA2dnc3ekFlaGhzSUxtMFkyQWZqS1FBdEQyeElObzVHbndpejVtaFRXSUJVLzdYQUZjQ3pMYmR6cnRmd1I0TCtqRFgvcUQ5V2VQa0MvT1IzVzdqL0RYUUJOdkZzMmlmQkpWVkRuQkRsUldEdGcxMnAvcW9ZOWc3TG9NTTdTWERNYlJiOE4wTTRObEtkYjhHMzRhNmY4bHpsdkEzMGZZZWZDdW1neldoajBuMDYrbkxFSDBuMDhHdW96MUs5QmsyWm1yWit0QWE5UjJndXF6Qk9FeVRuUG0wbDRybkwyWi92cDYrUmVFZk1GMjBpY2wyTldRTzUvY1p0T2VMZjNYYTg4VS9pdnFuOElNaGY5REpCNklkbG9qbVY1UWJ4dFZ5K25SVTdvZlVLd1QzdFcvLzVONnF1bjhNZUl0b0NwaTl0Q1hhUHplTU4vb0N3cHlpblYveVBBVCtlMEsvQUE1enFyUFY5emVlQlVUL09OcWtvNTdZeXdQUE1OL2Y1VGdYL0JiUGc2TC9qUDRtamJlRCtEWThzOTRNOEJHVld3NDB4d1F2TUZ2eFFaUGhHOXNmZTVoL1o2elowUEpRWU5ETnJrYWJoMzEyc1owZm14blBHdXc3dFhsanRFblE3WE5BZjF6eTNBNTh2dXJ5T2RyNWRHaG5uZ0dEdnhJeW5CRitGZGZrNEMvam1WZmZ2c0E5VkgzOU10b3RuS2NTR0h5M1Qrc3RiYlphQjZJaFcySGhFMEZUWEhBbjdoM3EzNmN3aHFPQko4ODA4OTgxeGJnS2ZmRTViWmlxN3pMem5UVXd2OUwxdEZXcUhVYUFmem1WOVRmUG9XcTNqK2czRWY0ejZxaUNFOUNlWVI5cHlQVUhlSzRQTjlsWlBodjdiR0tneDFocUNKaHQwaDMwU1lJLzRSNGsraFRxODZyTDA1Qy92ZXBZRWpJRW1odDV2bEJaazh5blVKWGpFNEdmRWR1WDJlMkhtNzFpTXRvbnpMWFRQSmVGZFFQZnBrak9IcUJKVTdtNzhHMW9uNjdveHl6aHZ3QSs3TE1uQUFjZDlXSElPVTE4UnBrTWpiRmZ6QkErRzdwRWp1bytpdXVEZUM2enVWK1c1M3JodjZRTlVQUjUzQnNFdjJKOWxBaytlYUovSC9LRTgyTTNzelVkNFI2cWI5OEdUVmkzYjdmemRUWFFIQVlOYlZuRElNTnAwVCtEdGpvcitSZUEvcHp3OHlCRFdJZC9vczFaY0RyUEVaTG5lclJuMEYwUDQ5dkMrK1dQQUJ3dCtCLzNmZkFjRFh4RTMwYS9sQlBjMVd4b3Mra1RFYjQrZFNlMVd4SGFENEZudWUrWnJyaVlaMlRKME5Oa2ZzZnN3RDl4SEVxR0F1aXY2cEx0S004bUt1dFB4amFJLzFrN0M2eTBOV0UzenluNjlnTG9PNHArbjgyTDhjRDNGSDRueGttSytKZEZ1V21DbDlLUExMaUluZSt1TXo5Q0tzb05hOEpGMm5NMFZvZWJ2akdVWjJISnN3YmxqaGU4em15a0sxRFdOSlhWRWYwK1F6VFAweWNvZkFycXRVQXlIMGVickJEK1Z0dGZubUtjZzJnRzh5d3NPTmI4V2M5VGI1U2N0K1Bic0hlUEE4ODhsYnVCdGliVjhTTDZkNy93ZXlEbklaVzdIM3pDdWwzRDdBQUhxQWVLcHBqcEQwbW9WN0I3ekFmL0VEdTBoZnVMNkplRDV4SEpYSm5yditBbnNQK2VFYzNqNXUrYmczRjROcFNGY1g1T2NIL3o0NXcwZjlrNHlIOWVOTHNCWHhEOE5IM2NndFBNbjk2T3dVNHZTY2NBWEZqd2h4YXpOTlhhc0Q3OWpLQ2h6T3RNZDcyT1ozYmd1V2FlQTF4SmZQNHdIKzUrODdWTm9JNEJHcmI1OWRRREFUT3Q5R3VvUzFnSHNqbTJSZFBBMXRpVmtET000WmR3QnVrbWVhNEgvUURCVzgwSGR4TDgweVZQQll1VE9RMTg4RC8ranJHWG9iSWFNcTViOU0xUVZ2Qlp4MEcyb0pOOGJuYk9JN2JPdnd6K2t5WERidEFIbjkxUGpCTVR6em84aHdhWk1hNldDSitOL2xvaGVBZnFzbHJ5UE1UMVdmQlZtQys1b3JtUE5uYkJ4VENXOGtSVEJQVDd4ZjlSeUg5WU5CdDVUaGQrS2ZENXdyL0pHREI5RzJ0bjV4eTB5Um5oK1ZiME9kR3ZOdC9LQ296YnNOWjF0cjErSTNVenJTZUg2VS9YdDllZ1g0Sk5leC9vTHdnZmc3cTMxdFBQajBPZWl5cTNKV2lDVDNBUWRSN3h6RUViRm41WnZsMnpweTJuanFlK0tFVGRSalIvNEc1RnRPREtrQ2Z3N01tMVR1dFlOOVFsUmpUalVQZFl3SlRoVDhnd282cjBRTFJoZWVEWmh1MnQvVDhIWWRqMzY0Ti9hSWV6cHNlbW9jM2p4YjhrNW05MXdUVmdKMHdRenhuNDFWVGxWa1NmdGhhK0ptT0J3dm9ER1RvSm53eTRqK0E0dEZzYVlNYmViR0xzbWZoL1RYdVJlSGExdUk1Tlp1c2V5UE83Nk0vYTJlZFRyRmRCWjM0SWJUSlBmTGJ4aVh6UmR6ZS93RjdHYjRpbU4yMmJvcW1MdGcwNlRCV3psZDBFbXJXaUtZVDFiWU8rcllaOUtsZjRrZlNyQ3Y4TGJaWENqK0c2TFh3MHo1NXE1M3pZU1E0SlA1cm5kTUU5MFA1aEhKYTFNK2tEWnN2NjIvYnhqcER0dU1ycWFIYk8yb0R6aGM4RS81UGkzNDR4ZThFbnhWZ085Y3RLK2dKRTA4ZjhZck5ScjR2QWM4MzhFLzBZL1VySnlCdWJnMm5yQXh6eFhhS1BncjVYRi9pd3ByMW0rbndmN3ZXZ0ovOHIwRDREQUVmV1ovQk1GL3dIOE1GSEdjczlXdlF0NlRzV1RRV0w4NmxuK2tZNnYxVlo5OXRaZUlicDByZHhiSWpuSjFpVEY0bm5Fc3FzdWp5T01iQldjRFRhTGV5YjZUeUhDaitPZTdyNG5LRHRTMjNlMXZyM081UzFVelJiekJaMG5yNUZsWHVNKzd0NGZtSnJMNTVFKzQ5dXN3dnRjMWowT2ZRdENrN2hXVXpmVHFLdlUyTmpJZVFKWjZ1R0dCdG5STE9BdXF2ZzJzQ2ZFOXdGZFR3UG1QMmJnTEVhN0psMU1MWUxIOURlQkVSeHdXa1c2OXZXNGxYeUdFY0Jtb2pld3Y0VG5JVTFKTmdXZnJSNTNRTDA1VUhEdW5UQUdoTDZOQU5qTzloVmZzR3ZlUEc1bXpFOGdyKzJlTFBWMUkxeHFTWmlFNlplS3BwdXRnLytReitPOE8xbzA5TzNuekRHUTc2QUxveFZrenhsYUxkUmZSK2lIVXo5OGczWG1SQUhndjIzcDJoU0dZZWp0V1UxZmVYaXN3STgwd1MvaUQ3S0VuMXR4a1ZJbnB0UjkybWl1UTNmemdQTWM4ZFhacE5KdzVnTTQrb0xmQlRhZnhwdHBPSlpFKzBXempLdEljOEc0ZXVBZjlEVG5yT3p5UVdMRXhzUE9iZElobDlkWjBCOWcxK3lFODlXb2psUG02SGE0UXpIZytaSUhQbzNyTWtQZ3VhQVpHaUFidytwdmhld3h4MFIvZ0Q2NHBqZ3F6Q1dqZ3UraUp5TytZSnpHWStoY21kYi9GdUd4VVVQcC80cCtwa285d0w4YTVINjhveW1jcmVqclM2STVnSEd1b1J6TVcyVjRsL1BZbVkrb0E1NVVIWnAvSW9HSE5sVHpDWjVCOW8yVnZoaEZvZVFaM3ZUQ2RPN0xrS2U4cUpQWnJ5bCtEK0dPUkwyNVNmcHJ4Zk5LWXlIQk1GZHpTYlp3K1JQaFB3TlJYTVBaQWkydTYwV0UxdkQ0dUh6MGU5Skt2ZFp4b1FJSGdxWnczbDVGdHF6dmZBanpIYTlrUDc2RUl1T3NkRVJOR3kza1JZditpc1F3Wjl5Z2JaTjhjbWpmMEZ3QTY3LytuYS8yZHM3bzc3cHdITXRPZ2llazFXdktzRFBFSDBmaThkWWp2R3pRRHlQUXA3UTV0bW1lNXpHdDR2RXB5NzIzQldDLytiWlFXMjRDTit1RmY5cDRKa3JucDl3cm9sK0RmZDA0ZWZSeHlSNEJlK3ppZVl2VzhNbmNkMFd6MlNMemJ1SmEzZ29pMnU0K0RURVdBcnIzaHpxdE9KWkVOK2VFMXpTYk01VnNUNkhtTlV4ZG5icmo3NjdJSjUzMEphdXRwckRjYTV5NjRHbStLczZoNEltV3ZCanRCTUsvc0I4anMraVRXS0Y3NFZ4RmZyclZvdmJMd24rNVVCRE9XK2tQVi8wdTlDMmxRQkhmTUVvSzBINFBJczdta3I3bVBBTmVPZEg5QmZRUitFczFvbitMTkc4Ym4wM2hmWnRqZTA5OUw5TGhycEFkQkxjQm0zVlV6eWIwemFvZGZWQm0xUFgwZllsL3ArRFo0aHAvQW50RUhTYkpYYS81cWpaOW90U3B4WC9UTlEzUytVV0JwOXdoaDNJOFN5YVdNaVpBNWpqL0dYcW9xS3ZibmNsM2dDZllDdW95N2d2d2NQUWhrSEgreDN5QlAycUo5cG50ZVIvZzJjSDdVZDV0QlVML3B5Mk5kSFVnVHdiVk83TnRDdXF2cWNzSHY0NTlHbXVaSDRQTkNFbWVRUGFMWncxSnBrdjRHYnczeVArNnlEL2ZuMjd3L1RZV295VEVYNHA1NEprNkdzMnd5emE0b1JmaDdxSGM5RFAxRmYxN1YzVWI0VWZUTnV5OEJWNHFRc1hrQWtuMEphcmNrdVpyYktPeFM5dDUvZ0hmZVNzeXZFdmVDUGpUd1NYdEhGU2x2NTk0SGwrV1lsTGZkVkZrMlErMExVYzU4SmZqM21kS0huMlFjNGt3WFVzSHZoYTBIUVVmaHZhcmFmZzVoeVQ0dk0xN2VyaTM5emljR1pEempUUmpLU05XbjJYWXpHUUg1cnZ2Z3QxM1hBM3dleWlEVEZIMHNWbkxNWlNodUJHOUwwS1hzSjlSM3p5R01jbC9JMW1reHlHY3NQK01vbGpKc1FpWXQ2Rk5lb3Vzd212UUgwbnE3NXJVVmFPZU43QWUwYUNaMEhtNENPclpIYkxjV1p6ZXg5OXQwRDBMYm5taStmenJHUFFuV2kza2Q1YkVtMitXalM1NEIvaTRuNDNXK2dPMEljOSttT2VnMEpNQmNvTmZiM1Uxc01GdGw2OVpHZWljUmFQZlpQRkxLMnpNMW9jNU5raWVhb0RuNmU2N0dHY2orcDR3UGpQNGxuNDZrdHo1R203dTFFWE1vZisvWnA3bHZqY3pwaHR3Vy9oN0hOQVplV2dyNDhJZnhEdGRnd3dlWDdIR0FuaEgwYmRUNHIrYXNZdmFZNTNzL1BPaitaWGZadnRyRyt2Qk05emdMbldiVEJiWEtMWjkrNm5QU1RFalpoZnVEeGtZRkw2aUYrVlo0M1ExNmhMWWVIWG9xemlndmR5TGdzZVpyYmZhaGF6K3FuRis5WEVmSXdCZlNTdUdHMVZUdDkyUVRzSHZmZEp1OXQxT2VwU0hqU1JHRG1MNWJqTTQrSXdqK0xGWndCOXJCcExMYzIvTTVyeFB5cTNJdSs3Q2I3R3hsSUJucStscjE0TitxYWdZUnUrWlA2amZlakhqdnAySk9PbE5UNmZwNjg1dEFuM0JzbmNsTEU5d28reWVPOVlzNzNQdFJqMVhhVFhYdFBRMm1vNjQ5REVKNGJ4eVJvRCt5QmJ1bWp1NURpVVBFM1JobG1pZjhYMnJJRzhkNk95VXVsckZzMmp0RTlLNXEvTnJ2c2N4NFAwcTRuUUU0SXQ2SDBRaHZXNURmczNuRis0ejRwbkNhNG5na2VZblh3WGRVamh2N1Y3amlmTmI0dXBHYlZJOVZxTmZsOGgrbCtwMTRXMnRYUHJuUmIvZjlMMjNQc1orNkYrL0FsamFZKytUVVU3SEJMUHV6R0dnMjZ6MG54aGxjRHpzR1RvQnZpWTRFRmNRL1R0QnA2VnhQTTcyaVRWZCtWUmdiUENQMkR4aHoxb2U5ZTM1U3lHWkliRk9uN0plQ2VWOVNqbjNldmFGMHcvYjIvNjZzZDJ2bGpNKzJpZ2o4VFJvYzNEWGRjeHRNTURUL3BsNEZsZVBKdnhYZzlnN3EyNUZsZFpFUFZLRlAxM2RqN2RiWEY2czhDL3FmZ01OeC8wNDR5akUvNW16TTNXZ3BmU3J5clp6cUNzYnVKL0hkcXFqL0JGekljNHhOYnR0Nm52aWI0QVk1ekVzd1g0WkFsZmtYZk54T2M0NkhNQXM5OUxXUXg1UGVDWGlHWVQ2TmVLejNrYlYzZEEvaER2dlp0MnFCQWZnanFHTzkyRmFKdlN0ODliYk9xREdGZGJoSjl2ODY0czVrNnU1SHpRNGk1MjBmY2tmQjBnOWd1K212NG04VmxPVzczZ3Fidzdwbm8xQlQ3Y2xiNFg4cDhVelNMUW5GWWRxNXR2YmdyZ2NEZHpuNTBCditkK0lmcFk5TVZGd2JWNXorSU5uUk41VjFyejkxWHpDYTdpZXd5Z29jd2YyVDcrQS9qSDZ0dDZXQ2ZEM1lkSDZIOEo5NlRzem5VbitrUUUzMkcrNzV2TmpsR0o5empFOHgzNkZqVm5xNW1kOWhtT2JkSHN3RWVockFmTUIxcUFzUVNTK1cyTDlmMkM5bVNWTzVFeDBxQmhPd3cxbTJjRDhFOFUvL1pvbjRhaXVZYzJYcFhWRC9WdExmelBGaU0zQ3Q5MjByZHpPYmFGNzhHNEF0RWZwczRjeGdZRUhDRDZub3hWbHN4ckxlWndOdkFoVGkrRytxVG9Yd1RQRE5FdnBlMUwvQjgxZjhFRmkzdDVIWElHL2JBNll3YkVKeHRKT25QRVp5empOd1JmVHoxZjlGTlIzOUNQaGRHMlMxVFdNTWFVQ3I3VDRzd2ZRRHZuaXMvclpsY2ZZbWV1a25ZZS9NSHNPZk1ZZTZ5eDFJZG5xQUR6RHAxa3JtRm4xUis1NWt1R1huYm1lb2gzbENSREErcGorblkrNUF5eFREL1lQYXlUdkVjZ21qRzBtNG5uTnZhWFpMNEZOT0g4dmd6ajU3Um9CcHR1T1kxelRlV1d0eGl0ZWlnMzVHZTRoakYrS3F1cTJaWS9zWHQvMitrTEU1L3RqRzE0OHhLY1l1ZmxhWXlkQmo2eUg1a3RPdDd1ajZ6RW1Jd1J6ZmNXSXpFYWRRbjdlQmJHUUN4b0lqWnc4QWwzU0svR1doRW5mSDNJVXgxdzVINDNhY1J6cVBsMDZ2T2VsT1RjYTNyVVgrYXo2RUdic0hpV29kOG54SXBRRHhIOEsyaTZnWVpyNElmb3g2RHp2OGs1b205UDBXY2hHYzV5amdoK2tMR3NvaW5NZURuQk56QmVXanhUNldNVnZnMzNnbkFPdFJpd1pSYXJYTlRPZ0RzWUY2YzZ2bS94WXlrOER3WmR5K3pHTXhpZkp0bTJZTzdrQ1I1dmR5V2VzZGpVMXhtekt2NXRvTGNjRVAwcjNDOEVGMmRmaDNNMGRTcmg3eklmeldMNmZGWEhZMll6MldqOTlTVGFJVjgwQmMzV2VyMmQ3N0xOZmp2SDdEWWYwUFliYkdJV1E3Nk85Z1RKdjluT2t1K1pIYStGN1M5djJ0MldzaFpIZHgzalErcXBUMmx6RnM5VTVueVF6SVdNL21ITGIxQUtkUSt4aFlNNDVwSFFMbUxmc0RQUktveXJHT0dmUkR1WEJ4eUpRN003dG5jeWxrL2p0aUJ6bUlobUVHUFM5RzFUNEJPRVg0aDFKdGdlRjFLL0VrMFJ6S01rd0pUbk1QN1lYdkF3czVNbmNZMFZueE9tN3lWZ3JRajIySkdjRitMNU51UVB2cGd1ZHZkekFHZ0dpT1ltbEpzdStCeG94Z3YrR1BBTWxmVzByY1BMMFE0NXdoZm1mUi9KZVIxanFwRTBMdUpUNEwxQzBTVFQ3eU40Qm1OdkFITitEYlR4WDRWbjhDQ3p4UXAyUjFsNStyYXZ4WDNkaVBHMlIvaTZ0cWNVWUx5bytOU2x2U3ZVa1hHVm9pOWplVUw2MjVxekNYTG1pK1ptc3lHOFNOMWVmQWJhL1pjY2xIditHdGs4TGE1Z2hKMS9LK0xiczJxZmx1eDNyYjJiZWFkVlpZMHdYVGZCN0R3N1VmY0xvcW1FdHIwb3VEL2tqM3BMZmk3ekNkWkhHNFo5WjdMZHVYNmN2bVBSbjZMdlFEUzlJRTg1NENQOVFwK2c0T2RzL0s4M1cxbER6alhKZWNqc0Q4L1RUeFo4Yzd6SHJUVm5JczhSNEJtSmdVZGJ4WXQvanQzRExXajNtQWJ4YktKdkQ2Q3M2a0UyaTVHWUNmcWdUN2FnYnFtNVg0ZitHdERUZnpjRjM3Ylh0NGVwWTRTWUU3TUR2SXBmSGRVbUQ2TXVZWThZd1QxQ1ovK3VhUCtlNG5NYjZ0VkhjQWZJUDBEMUdzOVlUY0hYV2w2Z3lhNkgyeG0vTC9kY2xidVdaMjNCc3dIbkNHNUIvVnp0L0JibmtjcDlGdlVOZk5KdHJlNlBNUkI4VDQvd1hDTStkMUh2RWp6T2JEdVgyeDJCdVhhV3Y1YitGNVYxQldoMnFsNlZ6ZjV3bTluODMyR2VGdEV2TkgycG85MGxlWlJ4OWFKNTFQTERUS1NQVXZ6dlljeW40STZnRDJlaVpOUGZydVg5Y2ZIWlplMHdtZjUzemJYMmpNY1F6WHZjczhSekk4OUJndTlGVzRWMXJKYlpRcS9pWHFsdnB6Q1dTWEIveG1ibzI0SjIxMkNIMlVZbVc4NktKODIyODZiRi80OEMvNHZpZWNidUhUOWs4ZGlYMFg2T2hML3NyOVptMjhuaStWRnRzdG5PT0ZVNFIwVHpHT2NPa2xsR2JCMTJ2NjhPODlVRS9tWWYzZ3g4Tk1xS3JIVjJyM09BblJOZnh2eU5BUTNyM3RoMG0rSm1iOWxIbTd4b1VtenQrc1R1eU45cHVZQit0cHdERFJpckp2dzN0RCtvN2kvYW1mU00zUnRpMHJqcW9ybldiRndyTVU4YnFpNVAwMFluZTBncDVuWVFmakRqRVBUdEdsdHZYemU3d1kyV3UrWm1PNXNYTjV0elpjWWNpczg5ekVraXVEanFFdlQyTnA1bkEvUXBhcDh5OUxFQzVocFYyMnd5MjZsL2lxWW40eEFFdjJDNWFCcmJPVEVMOUl0RU01VjMrZ1MzTS9vTHdLOFZmZ0RhY0l2YTRYT3owUzJ5dmw1SUc2ejZxeGw5VC9xMmlxMERIUmpycUhtMzJYVFVkdHozMVE3UGd2NkE0RDJXWTIweDcweHBQNTFvL3FCbk9kZFVyemNZVzZoN1JsZGluUXowWGVqTGtKeXZXQTZ4NzVnRFNtVVZ0RHh2Wld5T1IzTlBWOTFuUXY2VGdxdmFuZVZKMkNOT2k4OFV4dWNFR3U2aGFvZGxrRCtzUldOUTdrWFJGTEs0MDk3MEZ3aStrM2U2MzdtazU1eWdid3R3WkkrMit2YWhuMHY0aWhiM3RkemlFK0lZbHk2YUlyUnBDTDZhdGd2QWxHMGFiWjZDWDdMMmVZbzZwK2huZ0NaUk5JbTJINzFrNC93TnlOeFVOTGRDbHdqcjIwNjBUMnZnMlQ2dkEvNlBUZGp1MnM4SHZwTytuVUdma2NxdHhKZ2N0Y001aTFGcFJ6MVdmYlNXc1QzaTM1bHgwZUt6a0hmRUJIOW04M2VGbmJtU0xLZFpFc1poanZnVTQ3NHBHVEs1SjRwUE9kb3JndCtaY1RXNmc5WUozNjRXL1FERzlnZ3VhdnJiRzd4N0tQd3B0UDhXd2Q5QzVuQ0grcHpsVnJyWC9MeXpRWjhyK2hlWUZ5N2t3cksrT0daK3RNMldJeUlENDNhbnZwMUttVlhIb21aMy9ZdnpEdmppakx1d0dLMlpnRStITVlNNm5oRjh5UHpkSDF0ODF5anF4bXFyU2RSUkJSZEczUy9xMjkvc1hMK1J1dWdSM2NHbkxWUjFIODdZV3VBajlHYmYyMHBkRkhqS1A4WnlDZjVtT1RxZTRWcWtiNThILzVCcjdnTnJuL04yWCtNYml4bCtqWHFzNU1sbmpFZTQ2MlQydE1NOGw0bG1tc1V0LzRLeXFrdTJKb3huQTB3N3htclR0VExzdnN4T251c1V0MW5EN0pPN3diT2o1SytDTmc5bnZaNGM4K0xmd1BKajlPWWRjTW1UYTdGVjliQ3ZoWDMyS2RDSFdPalI5bTBqdThON1A5YW80QWVzU2h1SXlycmFkTFo2bGgveVU5aGVNa1R6dU9rMnEzaVhVUGgzekM3YWpENGQ0WXZSeHFVNjNvSzFZb253TFJsckpQbnZZZjRyMGN6bDNCRmN5bUpsbDlwY2Z0ZmlPZzVCemkxcWt5WW9kNmY0L3dzNzgzN2hIN1dZbWNjWnp5bitIWGhYVVhYcFovRS90ekFQbTJqbThRNmc0THNaQ3llNG1OMXJXTVQ4VnlxckJlKzVDRCtFNTBISlU0SjJTT21mYTAxUGVNL3EwZ2p5QlAydHZObTNIOE02Y0ZaOEhtYStVL1h2ZVBxR0pNOU8ydmNrdzFNV2d6ZUx1UkhldmJTdTFqY2Q0R2JhbHBFUU9SSXp3TmdoMEVUODRNd2ZCWmhsM1FMNlNvQWpiV2o3MFdiVXE3cG9XdEdtTFhnbTg4K0lmcm5aWnRzd2prajRuMUd2WU52c2FQNnM5Y3dMSno3ZkF4L202WEhUSVIraDdvcWs1Wkg5a2JtQThJaExaRjNsblZueHI0QXhsaVkrSFhqUFJmUHhndVg0ZXNOczEyK1lmZnQ1S3plRC9sRHhmSUErVUxWUEsrN2RRZGV5K0t2ZGRzNmRhUE82TCtPaXhhZUwyWWNuZzJlT2VGYXkreXd2TVA1WjlIUHQvdjY5MU9YVWo2OHl2MGZJaFlpK1dLdjYvZ1NhWFBGc2JMbklsdEJQSVpwVnRMZHIvRXloWFV2NFVUeGJDWDdCOUxFdmVTZGRQQ3ZhR2J3Zll3K0VyMmRubGxjWUZ5VDVXekZ1WDNLZXRwaWxzdlFqUzRhSG1TdEpkZHdNT2M5SWhxL052dmN4ejFiaXVRZHo1S0xLTFVHbjcxSGQwMlFzcU9BLzdQNzdQcnNydllxMmE5QkU3TEZvLzdCUFpYTmM2ZHM0M3NzUWZMbWRyMnN4SDQ2K3JXais5NXJtVHkvTS9NT2kyV1o2ZXlmYXVvR1A1TERsZmlGNEN1ZUx5bnFSODBINHY1a2pUbno2bzl3K2d0dnpYaEpnam9HU2pDbFMvNzdPdkY3NmRvSHRDNzh6VjJTNDI4SVlIbjI3eWU3VVBHZytqb25VMjFWV05mTzcvUXpHNGJ4UWpyNTQwYlJqREE5ZzduMnBqS2NLc1oxMkI3T2I2WEtwM1BmMTdlUDBzMHZtaXB6THdvKzJXTEpoZG4rdG1lR1g4ajYxMXM4dWpOVlhHeVphTHJMcDFIUEV2NERKTTVUMkpaWFYyM1RtVFhaT3FjQTFYelRYVXNmVCtqQ1d1VzVVMWdDVW15LytHeXhtYWJ6bFFIak43aGRrV1E3TVhyUnBpOCtOa1BPYzRBbU1DMVc1VDloY0c4THp2dWJDdDd4UExUbm5jZ3lMZmp4cDhMQSsrZFRtZXhCcW4xbDJKbHJIT1FLYWlNK09kWVJOTXJLZldteEFsTFhoNWJ6M0twNlRPVWNBczY5akdTZXZ2ZXdPMURmY3VSN050aFg5VXVyMjBtZGVzWHZsaTNuV2tBeWxHWGNIbVBqcHBwdDF4N3FkSlB3bTFLV2o2TitrUGhPK05admhNTWJTQ0QvUGN2VGRBM3hQNFI4MTNTbmViTE9wbGhzNTNlNkF2QU9kcDQ5a2FNVTROTFZKR2U0dndyZTIvS1hQUWM0c2xmV2MrWDBPMkRsclBBNzA0OVUrUDBET2FlSnpsOTJIZXByK1g5RVh0THVaNjlHRzgwUmZHMjBWZExubmJhM3VZZmJKWXFZRDFHZU1zZHEyRW4wbE9rZVVNRjIwaU5sTFg3RzR6VU4yOWs5ZzNJdmdYSHdVenQwdjJSaEloRDZ3Uk8zd09mTUFDRTZqMzAzeVhHMXhCVU10Yjloc3kzM1JCMk5ndGVwN3U5bXlodE5HSVo1Tk1QNkRiV3FyMlQzMmNFMEw4VXMyanlaWTdGWVA1aVpTWHpUbStpT2VmNkJOOXFqY1NuWXZxWkRaeXE2aDcwejB0NkFmRHd1K2lUNHk4YXhxTnJTeDhJY2VGOCtoekVrdStsSGM3MFJmbXZZRTRZc1puMVZtTitoaWNTbmo2Rk1RVFZmbUNoRC9PeXpuMGpPZ0NlZSs4MWh6aWgrN1JETVgvR01GTDdkWXhOTFdqNDlZZnNYV3RMbUpmcTNsVXBocU1jTnR6VmF6eHVLdjZsdHVxNmFtcS9jQ1RYWHdqUGdacVpzQkp2NUh5TnhRK05kcFp4QitxcTM1amRHR1lhM0lOSDM3R3Q1emxKemx6YjdYd2V3OGMrenVmRzJzYVoxRTM1QjJlNVY3TCtPNkFYT3YvSWozZVNYRFZzYlRpdVpGaTcvNmpPY2c4Wm5JT0NMUjkrTmVLZm9NM0tsWkpIaSsyWk9mWjJ5NTZGdUQvMnJSWUJwRnJSVitrTDFmMEpiMzJsVFdhb3NUZUpTUGFhaGV3NnlQMmpOZml2cTBqdVZTT0VuL2p2cXJMMjBGNHBtSXNSVE8remRZVEZkbENIUkFzcDJnRFZQd1VQcVV4Yk1DZFVXTnBUWm96eENYV0I5d3lEdjNNK2VMeXZvTi9JK3JuUit5ZkpLajdDNzhOenczcWF3UDhlMVp3WFhCODF5QXdTZWNVNW96YjR6cXRadG5UT21sblhqV1U3M0swZzhyT1Q5Q093VDljSjdGQkQ1bXNXUkZtZU5kZlZIRmRNc21uSGVxeXhEQXhkKy9WSmQ3TEhmVDdjd3BCM3pFTHMxOHlGb1RudUVZQlQ1aXZ3SytLUjRRaWRoaExLWWltV2RxZlR1YWZtMjFTVW16emRheXNkR2FkK0ZGWDk1OFlRdHBQNWZPdkppNnFNck5zbmo0cjh3VzlCUmtUaFNmdGRSWEFiT08zNW9kdFlEdFRlOVF4NUFNOGJ4L3JXK25RLzdpdFMrVmRkeHNRZVBCdjcxb1pqSVhpdUFZNXNkVEcrNDFQMHN2M2tXU3pKd1lhWUo3OEc2eStxS3MrVm1xbVorckg4L1UydS82V1c3cSs3Z09TNGVwQUo0Wmt1RVI1azVSZlhOdC9UeG8rUWNXMmwzdk8zZ25XaktYdHB3dDh5eGZXUm5HeGtoLys1dTVLU1QvUm9zNWVSODBTMExmTVVaQzhKdWdYeTM2eGVibnFteTJzdjZvWTRndDcyNTNiM2RSLzljNjNKNzNEY1Z6RytzdWZmVWY2RGxieFA4WDJ2QlZsMmNzUnZFRzgzUDliR2ZTUHZUTjZkdkpGa055UDgrU3dsZmtHekVxZHdQbTJuRzE3UUdlU1RWUFcxSHZsUy8xT0hQb3FkeFZqSWtTZlQvNjlBV1hadHhhWGVVRU14OWlRK2FtRU0xMTVwdSswdTdaYldLODZ3ZXl5VkNuRlR5QitpUmc4cG5KV0Q3aGI3TThkWDh4dndyd0VUbjVacnZvNXpGSGtPQ3Q5Q21MNWhHdXNlSVRqM1dwcCtERkZnT3ptZmRIUlA4YTh5d3ByK0FIak5rVHp4U01xeERmZUQ5OUFkSnpGakd1VmQ5K2IvY2diclk3bFlQUS9sbWlhY3k0UHZFY1NGdTA5TDAvN1I1ck9zZXo1TndLK2VjSjNtUXgrZDNOYi9Vcjc5bHBiS3ptL1gydDh4dTQ5bXA5VHFNZk5zUk8yL2k1bTduRnhQOFJmaXM1ZjdXNDJiOHNOMnd1ODFkSS9vL3dLMWZ3SFhaMnVJMzVLNFRQdDdpVXFveTNEUGszS0xQS2JXYnI2amMyNXZmemJxQm9uclMzbVNxQ0p0Z3RWekRuc0dSTzQzc3JhdjkxbUkvSGhhL01lN2ppOHp4OXpkSnZPMXRNMUJFN2M0M2tmcWR2eTZCL3p3citpbmsrTmIvaWVkOVErRnZNUi84VDl5blYvU0RuZ3VBMDQxL1o5dG43OEcxaFBNb2IwWmVZRDFOd2FZc2ZlNXIzS1lSL2h2c2o0RWp1UjdQdnJXWDhqTmEzdmJ5dnFqMWxvOW1GcW5NUEVzK3Z6TTdjalhkZTFHN0Y3VDdVQko0QlJaOUwyd0xLalp4L0xYYmlvTzNGWDlyZGxwL05QdFBQNGlFbldHNnVJL1J6cVM0cE5rZGlMRi85VTh4NXF6bXltM2Y2Sk1PUE5qY25jTzZyZlc2M08yaVRPZmVGMzhqNEVIMTcxdmJCb294amx3eTE3VjJoR3J4TEx2b3U3SGZSN0dlTXJ1Q1Jsb08zczczL2ttL25tbzMwa1luUEljYTY2OXNpbkJlQ2Mrd08vdHZNSnlQOEl1enZpL1R0Ulh1ajRUZkdLNFk4N1pBLzJHUmVoTXhMUlArbHhiaWVZNDQ3dGNNYXdCc0U3N08ydWhyMTJnazgvZDBQYys4UXpUMjBxMHVlRzlHbklSNjdyUG1TVHREZUtKcGxQRS9wMnptc3U4Ymt1OHhsSk5tV21DK2dvZmxyZXRwNTVESGV2ZFZacktENUUxdHpEUWx2QkZqY1JUZmVaNWNNZmZodTFIRzl1d1Nha1BNdEd2V0tCcDU3YXpIT0tjQ3M3MmNXODNrcnh5VHdFYitxNVUxdHkzdTFtaVBMYnNBNEZNMVNxMHNzN2NDeTdiOXI5OFJibVQ1NWhjVTFyVUt1NmRiZ0U0bXZaZ3l0Wk83RVhFYUNPMk9mSFNDYXVoYmpjWXZaRm1hYXpYdzV4a3l3RmF5aS9xOXY3K2JkdlJDclpqYm4yb3cvMVBtaUx2VTYwVmMxRy9qYk5sOXFXZDc3bFdZM2FHSyttUGxvdHpCT3B2UHRBL0ZzeEJ5UzZxL2RHQ2RCN3kzSU9RVWEyclV1dDF3aXpUQWZaK2piQkxPcFRxZjlYK09xTC9QemlENGFiM0RuaUg0cjU1RmdQbklZOU9UcFpnOGNZUDZtQVR3ZmFmOWRacm5ObndDZkJlSlR3YzZ0TytsVEUzNGdmZGJxcjZZV2oxR2RNVjBhYjlVc3Y4US9uR3VpVDRScyt3VS9ZV2YyMnBhcjdYZk9SOUZVNTNsTlkrKzg2YmRqbVpOV1k3aWk1ZVN2Z1hKUGlqNkZlVTRrODFmZ0greXVMZmlXaXRidFZxWkRicldjRlh3OE03UmhEZDR4Q2JZWHV5OVRrdStBcUw2UDhUNlVaUDRhZlIzR0NSK3RMSTRIWmlOMkdPYWtGZHdLYTFld1I1VzI5L3NhV0Q3a1RPcUhvSS9jdGJIM3NBWlNWeFNmZHl5Mk00Vm5aK0hub081SmdDUHJKSE5lQlgrVzVmd3N5M2VPeEw4eFk0Y0FzeTc5bUpkSmZES3BiK2dzY3dYdjk0bG5LZVlsRS8xK3J2UGkweC8xblNGNElPL1dpYjZ3dmRmVHc5YTlNbWpiOGZJSkZ1QzdXdnAyT2Uwa3dxZWE3YkVvWStwa2YydEIyYVQ3SlZxc2FTdmFOeVIvTE44TlVSem1EYnp2SDZQekhXT1FWTmF0dE85SnpoNjAvYW92M3JYOXZiWGw2WnBsOFJJbjdJNW5VZHZqa2kyM3huYXpvWFZnSEtQSytvdTVFQ1ZEWjhzek05L2l3Ri9FV0Fwci9tRzdOM0hRN3JZM3RKeG1PNW1iUXZ5M012ODVZSzR6djFPM1ZILzlZLzdIU2RRUEpVTzAyYUtyOEswVytYRXU1MWxTY0RITEtYcVQ1UnVweG5nR3RmbEhnTU1iT2svd1hDRCtVMDJINzJTMmduTm05NXRtYjNIbW1kLzJQZDdsaE8rVk5EczQxdFV2OTZGOUxxaGVReG5YY1VMckE4WmhOT0JJWGxuRzFRaS9uY3VqWkh2RXp1eExMRGE3TzNNSGFWMWF3N2dtZmR1UWMxYmo4RW53RExhZyt1WXp1aC90SEtkeUU4MHZ1ZGpHMjN4cmh4enpWWjAxVzJWVjJrekU1M3ZUMi8vaFhxbHpkQUp5cnpVVXpVajY5UVNQdy9yV1NUTDM0NzB0d09UNXZkMTMrOWplREtwS25WRGYxclMzdXVieG5ySytIVTc3cDNqK1pQZkYvc0JIZ2Y0VHV4djdMTS9kYXR0WEdMY3NQaXZ0WHVveGk3ZE1wbDFGL005YjdzRjdlVGJVdDRYTlQ5ckRjakVkb1AwenlNbjc0S3JMSE9abUJ4eTVoMmp4RDAzTU43Zkc4a0ovYWU4alhFT2RVOSsrWmV0UGNaNmR0YWZVUjFsN0pITTF5Qi9XZ1FXTUt4WitHMjJWZ3RkYlROVDN2SU92L1hjYzl2RkRrcm1XbmZ0T28wTEg5TzFtNXNRUXpUbXpWeWZ5ZnBQcXRkZnkrKzAxUDJ3NlkvdkY1ekR2MTJpOC9jMTNpSVF2WWI3T0p4bjdvYksyOEUwcndiTk1WM3lWZDM0L1Z2eWU1Zks2emZ3c2Q5dDlyajc0dGpqb0k3WUx5Qk9qYnlkelRBcmYwdXhPSmV5TW5NazVLUHJuelovU2dUNENmZnNHYzRJSlhtbjV0VFpZL3ZrbkxFNTRPbVB5UlQrQjdSbjQyTDJQY3RndmtsVHVMYWJqSFRYYnhVSzM3MW5jYjJXTG5lNXJPUUZ5bVk5T1BMTk5OeDVsWjZ0UCtKYW82SzlsYmhEWlZWYlN6cU52dDl0NTlqTG1DWkg4TjBMbWJxSlpaTDdtSFl3SEJwNXRjci9sTTZuQUdHRGd1VWZFTU81YWV1K1ZxRXVJTTNuYS9OUUxiUytiejN0cTRua2IzOWdOOWpUemo3ZXpYQjlKb0praDJXNm5QaWI4aithWDNNYzNQZFZINnptdnhiK1h4VCtQc0hpemx4Z1BvTHJIVStjWHp6UGdHZWJJR3N2VmNOcHk3YlpremxMSnc4Zk1WNnNkbXZPK2dQQ05MQjU3REgxMndnOHhHKzhObGhkaU5lODBTZWE3VGMvWkMzeVFyVEcrRGI2aFhuYVg1MnFMZDNxVU1XTXFhd1h2K0t1Tzl6SW52T0NIYWVjUnpXM01VYW56NW50OEx5L2tuR2RlRjUzWGh0Z1phckxaZTUremZFMVY3ZTdrVlhiM3JaQ2RLUmJ3ZlNMUmw2TytyZnIydDN0YmMvZ2V0L0I3N1J6eGs5M2h1dHZzV2ltUU9kaXJrKzIrYlIrYk8rMVE5L0JXeFRLZWYxWDNWdVp2L2NQeXNsNEQrb3VTWVFIa0xKNnY5d0V0UmpxWk5pamhiMEk3bHhQY21mTVJjR1NkWkV3bVlQTHB5YndCYXBNTGR1ZTNOV01NUkYvWTNuYVpqcllLTVRNcnpWWTVBV3Qrb25oZWFibFloL0ZzSWo1ZCtNNWFPTU9pWGlGKzRDNmVCNFgva1haRnJlR2x1YmJnVys1WnNaQy9tK3F5Z25aQzhXeUFkZ2pqc0pUbGNEaUZYNkZlMlphM2RnWGtEMzNSamJGQTRNTTVjaTM2TjhTRDliZjdib01ZcDZHeVZqQlhwMlNZWkhlT3luRlBsNXh2MGQ2cmNrK0FjSUhvbDFrdXByR2dXYUsyYXNHODM5SmhTdGc5MElGbVQrdk5jNmo0WERRZDR3bStieFgyUHZnZ1FuenNkTHZMZjRMN3ZuZ3VaLzVEbGR1RmMxLzErbzczdFlYZmJ2dGRTWXUvR3NaemRQQmxXRHpNdFdqelE1SnRsdG44WSswZHRIV00rNEt2SVJJN1FmK1h5bDF1T2JXYVltd0UyL2djZS9QbFllWUFFZi9qNXJ0ODArSVB1d0FPT1FvRzJKdTh4M2lHMGpnc1l2TjlJTzJvMnUreThHMisrTjlwTW45amJkaUpQa2ZKWEk5bjhEQWVMRy9KamN3OW9qWThiWGVVaGxHZkYvOTc3S3dkYmVlSVduUlVmeUw3RlhNcEE0NzRPL2kydGVESnRIY0JqdHc3WUU1dndjOVFyd1pNTzFnS2ZiTGExNTdoKy92aTJjbmlPbXFESnNpMjErNE96N0czTUhyVHQ2aHYxNEUrNU5CN2wyZHFsVHZGM3NMWXdUZXZSYjhIOVEzNzdBdU1IUkwrS2RQUDY4TVcwVWY0eDdqR3FvNGxHUWNvL2s4ekZrZzA3MWtzK2wxMkQrSXE3dGVpYjR2MkQyTnlBK2NqOEp5UEs3RCtMQkNmKzNoUFFYQnJ2dFVZOUJ6enNkNWl1U1dmdGx4a0QvRmVyYjVOczVqa2VtWW5UTEkzeTVaVFY1ZHNwZXhkenJFOE53bi9JczlIZ2x2UnBxUjIrTnplV0tsbTc1ZTFwWjFmTXJSRSt3VDVDMW44MjJ1b1M0aWJuV0ordDM0V3MxVFIvRWV2TXNaUDVkN0tuQXppZjR6alJEU2ZNTitnZkJBTlVKZGpvbGx2NisxUTJyWEVaekRmRnhQOGtkM0gyY2o0SEgxYmxQY2RSUE9GM2U4WWEzcmFDNVpITjRzMjRVOWxVK1ZaV1BBWm5vVUJSOVlUMkhWN0lsOWZSQjd1RVpMNWNlWWpCUTN4WDluNjloSnRHcUpaWjdGYnI5cGJhY2RRU09HYkxuMTduNTFubDFpK3dUOFk0eTMrcFRrZkFYTSt2bWJ4bjNHMDg4am05aW4zTmNsY2grTmZaK28xbkhmQ0QrYWFwcnIzMll3K0ZmNUt1eWYxZ01YbGJ1ZWRJTFZKZi9xcHRUZU5vZzlSMzdZMFc4ZFR2QWVuK2o1aE1kak5PYS9sQzE1aTl6aWFNbjVBL0NmeURwSGdlV1pqNldRNnhqSHVhNG90djliaXVndWFiV0dOM2FjWXpQZnJKV2QxK3Y1Q2psbXpVOVV3UFNxTjc2aXF6ZisxK0kwcldTL2dPZmVIOEQ2TDVIek83ckVtTXQrWDlwMGlwb3VlQTJISWUvQWkzN2dYLzlhV0YrSXAray9GOHpEdlNvaW1KdmRROVh0LzVpMVJYYkpvRHc5M0VDeW1jUi92ejRwbUtQUC9DeDRKbmlmRmM2aTk5WE9GNWZLcXl6MUk5QzN3NjZ6bzM0WU9jRjZ5RGFMZFhuVzVqYllkbFR1R09UMCtVMXR4N29ReFFEOG04UHgyRWUzOE9tdWZzN05oYmVxV29pbGhPbllCNms3Q1gydHgrK09zdmxkWXZ0KzM3UzdET295QmVNbnpNdWNPWVBaZEFjalRGSERrbnBUNUpvcmJQajdlMXA5Yk9LY2tRenQ3SC9ZbTJsMkZYOGs4ejRJdjJwMnN5K3hObjhlWTgwcmxYbVArdFFSN3cvRWEranRBdzc1ZWFYRk56ZTNlMy8wV2UvT3d4YjJNNFowRjFmY2ZpMUhQdDN2SGJlMnQvQThnVzVndm4vQytxbVJMc2xqb3J6ak9oYzgzL0tmbXk3NFA3UlowKy8zbWQrakNzYWUxYnFmZEpXbklleTdpT2NkaVdWdGFQcHlSZkM5QWRXbkRPMGVDZnpRL1l5UG9Ob3R1VnR3cGJlemhmVnZ6ajlUQnQxdjBiUUwyNVREMysvSU5kTW5RSDJ0Z25taSs1Tmt6K0dMcy9aZXl6TXNxK2xsMmhoM0lXQ3pCQyt6dS9HeUwxVHpIOTVJME5ocHlqOU5aTWc3dGNFUThsOUFPTEJrcTJWdVpmU0ZidnZETGJQeDNwYjFVMzQ2MFhMS2RtSDllNWE1aXJJSyt2Yy84OGdVdEgzVXQzaXZYM0wrZWZtcXR6OTNNRnpBTHNwMFZuNnNzcjJ4VDVqN1NuT3B1ZnQ3MVp1ZWZpTEtpVGlvT2xqR3VnRW4vSnY1WVR2anJhSnNTUG9sdnhBQ08rRlBzZmtlTzVWVzQyK0lISHJHOEh6TnRUcjFzOFZlYjBZL0JIbktCYzE5bEZXUU9OTUFSR3o3bnNzcGR5M04wQmRtQkdSK2xkNStub0UzNlNPYmY3YjVTYjlReFJkOE9ZZDVYOFh6Yzd2SWN0ak5GTXUrcWl6N0s5T2Qveko3V3krN3pmbW55UDJsK3dMYThWeXQ1YnFmOVJ6eVhtZzEydXZrSVRsayt0ejYwZ1VqT1hSYWYwOC91VS9leFhLbFA4RndwL3JXWnMxMzhIN2R6K2lsYkd5L2EralBCNGlIeklleGF5WHllWjBiMVJTbDd4K2ROOUV1ZXloMk45dHdqT1IrZzMwSGYva3I3ZzhiaEJNWjdpNlk1WTEwa1p6cnQ2cUlmUzcxYStQMzJ6c3RleHZEbzIyS1c4MkVyOVVuaEgrSjgxTGNqR0FQMnVjNG05dTdZTDJqL3dzQ1RaalBmbHhITlp1WXYwajNOT3NESENqK0t1WHhWM3gyTVk1SHVXdHBzZ0ZzdFpuc3VmVXpDMzRYMkx3Yys1RG1HYzBmd1FkUFBoOWs5MEpubUUxbHZOdDRNeXljMkVmV0tsMnkxSVZ1d2FUeG91a0VNODZ1cmpuVk4vbWw4KzE3ZmJ1ZjhFazBKNWdtVWJLM3NEWnBzNWlyUnZPamxlZEo0SjFjMjdmNld5K0psMm5qREcxdm1tNzZWZHlSVjd2VzJwOWV3czg5a3Z0dGJUV09EK1dCRlA5YnlES3hpL0kvd0RmZ2VqWHlDZDFQUGwvdzFhUHNGVEh0T0ZjdXozYzN1ZmZmaXVVYjdTM1hHT1l2L05YYmUzMFU3ajNndTVGbFNiWFdVOTVqVWQvZnlucGZrMmNYMVNIM1J3M0llcG5GZmxvLzRjOGFzaW1jV3ZsMmliOHZ5YlRYQWtmV1pZeXprbXVOYkc1TG5Cb3VWM2NiNUtIbWlMTGR3YSthRkVQNUt5MVc0ay9HbG9WeXpFNWFqYjBYNjJHekxyWlJydG9zdkdMZWdiMHZ6L1d1OUF6WFQzcGFhelRzRmt1RlRleSt5SFcxOUlhYUZzUWZpczhEeUJ4NWt2S1ZvL3FBZFJ2SjN3NWc4RTJET2E4RS9XaXp1U0w2VjlvVnlCa0x2bmFmMy9kdWJQYnd5MTFYUnpEWGI3RWJHcndKUCtyNm1tOVUxTy94ajlMM3FEYXdidUphS3ZnbHpqb25uTTR5WkYzNHU5MlhBck9OWjVxVVhUWFd6UjMxbCtWVWU0VHRjV3NkaVRCOW95eGc1ZlR1ZmNhcHEyeWRNRDd6ZmJDQXo3STd6ZFBQOVRhVmJJK1RWaElCSmtpMkwrV0FsODFUR0dlb2NVWmR2VUlwK05YMnlrbUdReFdZMHN2emJQVTJISE1GWUR2RWZZbmRoeXFPdEJvalBuOWEvZmUyZHRXWW9OK2lUM2MydVhveDM2aVhuRzd5VEpUN2JMTi92Rkl5QkxPRVhXNzZqaG1hdlhzeHpwV2h1c1Z3ZkF4bkRHZUliR2U4aCtkKzMrd3ZqTEg3c1k0dWRTR1JjbHRyaEw3TWgxTEk4RzQ5d1Q1UTgwK3o4T3hsdjZJZXoyREs3UzNLSDVWVjdCWDBVMnFReTMweVJ6Zjlldm1Fa21jdmJPNXM5NllkU0hhKzBHT1BobG5lOWxzVzR4dGk5bTdVOEM2c3VOMWhzNmtIZVlSZk5tNEREZkc5RUhVYjk4cDNGaDQrenZUdktZb2NhMEo4bCtnZjVScTNhT2RWaWUvcHhQWlMrUGRqYTVERFBGS3JYK3lncjdIZnI3YnhXZ25kNXhMK0I1VU4raWJuSUpIOVBpOGU0MStJcUcxZ3VsOHVZRTBBeVBNbTdQT0taeHZnMHlWREhjdVgxZzg1L1NQaG8zRTA3RERnU0oyWTJ5V1QwVWI3cXU0UjVzUVRQb1Q5YWNBdmV5eGI4RmU4WHE1MXIyVGwzRStWVVBGZ2o1bEVQc1RmbTMyL1B1MWNhMisrWXpsbmI3bVp1WW40RDFXdUV2ZGs2Z3JHYXA3VC9XdHZlelhoTDRIbk83ZUE1dTB4Zi9jajg3QXY1Qmdyb0kyOVNRTTR3QjMrenU0VDMyQjNubCtsalVybW43ZjMwTStianlLRXRRcmJmWkhzVHBBeGtTTVMza1ZoTjN0dlYyV2VQK1o2YTgzMGYrVkMrNVQwNHlaWnVlL0VXNmg2UzRSZTdWL1d2N1UzanFiT3ByRlZjRzBWZmsvWnR3YU9aZTBmOG4wTTdCTjI3bk5rSm0xanNZblBMeDNLdjlXTU51ek0xd2ZKQTVqRldUV1VsTS9ZeXZLTnErKzlFODBuVm9QMU45TjlBNXFUd0xwdmxTZWh2OXNrUlpvdExwSDFEL1Q0TU11ZW83anZ3cnRBQ3dkZmJQZG5SOXJic1lzYXFxZHdkbGxOMGdOMXhleFlNVm9obU52M1U0bGtlMzI0QXpIblVsN2tPUkxPYnNTV2kyVWRmc01yS001dmUvWkR6Z0dnbTI3dVorNW1IUkh6K1lCNXY5ZEY0MmoyRW4yTit0d2xjeDBRVHd6TzE1UG1aYTVyd0Qxdk1mR0dMVlZ0bDU2eG12S2V2OWFRZTc0eWZWdTRJaTRmOHhuejZleGhMQ1pySXVzRTgrY0pQdEp4THZlM3Q0OGRZUjgycHJwWnJkTDc1THg2eE9NeTc3VDJMQXN6Ykkza2VOaC9mRldiYjZZVDVHeSthS3l5bXR3WFBOV0djbUUzalhZc2xUa0pkRXZFdDlmQ2x0djZVc0hGeUhkcXp2ZXJiQkxwcko4QVJ2ZEh1RlBUZ1hCUE5VTWdRZEo0UnRPTUpYOHBzWmQydEhXYlFOb0wzNnlOcnIvaytodEVPb0c5ZjV4eFJ1ZE5BbnlFNDNuSjA5d0o5bHRyaGZzYkRhODJmWm5rRnY3UDNGT3BienQ0aHZEY3FucTNScHlIZXVLRzlZL1dYdlhmOHJiMkYvWVA1eDErMU0yTkh4dnlvRGRlWkRhUXUxb0VacXRjOGUvdmdQZWJia2UvMUZOOHAwN2xzbnEwREQ5TEhyYmw4eE00VWhXeXNuclFjVU52c2JIS2FieWdMUDliZWZ4bkxXRm5WUFpWblE5RU1ZanliNU54c2VUSjNXYXpDWVByYTlPMTFwdWY4WmpGSTJ4anJJcHFhZGpkdE5Ob2gwTHhnZHNpTFhHZlVqeS9SM3Fodi83STFjRHgxQnRIczRZL2dDeFp2WE0vRytSN1B5d0U1RDZsZTlkQ2VRU2ZQWmZ1SVR3M0d0d2d1YlhhWWV5d1dheERmMWRJYzMyVjMzQjVBdmM1cEgvbVFaOTV3Zjl6aWpoNm1YMEQxR2s0ZFEvS3NaMS9vVGx5OG5iOGU1SjBPMFIreU1aWmpmdkF5WnZ2ZFluTTJ5MnhpNXkxK3NvRDVRODh3cGtYODV6S3ZqczdzdjFFUENXdUw1VkZzWmI2L3Zid3pvamNyQzlNbStlV2w5V1FKMThid0pnTFA4c0JIMnA5bEtWN3JETzB0d1BQYnQ2ZzdDZTVLZlVQME1lYlRPV1YzdFQ2M0hEdkZ6Ry9ZbVc4UTZOczFQTjhKTGdYNkVPZjVGWFVNbGZVaDQxY0ZSNXR0LzN2bVlBYys4blkvYzU1SXA3cUR0cXhDaXQwMW4vZ0J6bG54T2NYNnl2YVN4UHROR2orcEZpdFNuSDQ2OGI5SWU3dmtYR1IzQTU5a3JodmhFNm1QcWU0ejdhMmx5MHovTEd0ajdFMzZyV3JJNXNiemwvaDh4bmM5MVA1VHVFNUs1clVXcTNZLzM1MFgvV25HcmdTWWVVVmtTMjlDUDc3S2VwZCtSdlhSQjl6M2hSOXZPVU9XMmQyaTMrbXpVM3htQnZVV3lkRFJiRWN6TEVmZmgzWkhQb2Q1QmlUUFkzYVd6T0E5RWVGNzhpeXNkMWh1WjF4QnlGOWtaOG1udVhhSlBwWnJsT0JPakFXVlBNUHBRMVFmSmRLSEtQZ28vZnVpdjVXNUFvUnZaV2U2SlB3NklqNzc2SThRek1kN1RncCttMzQ5amF1ZklQTVo4YWxORzZENG4rQzVRL1Izc2gvVmQzTnQ3K2dLZkpoZmNieVhMZnFQTEJkNkM4YnRoSndrdGlaTTR2djFYMG4zZzV5aDNFSm1FNnRnOFNkbGFFdlJYRHRndnFmSjlvWnNjOHNMbEdSemFnTnROU3ByTjg4c2dDTnpoSFhSbllzNDlIdXNhSjduRzQ2QUkyZFlzNlU4eDdnYWZWdk85dG5ITFlad2pKMlA1akdIbS9oTVk1NUp3QkhmSldSb0wvZ0g4ME50WXN5cTZGKzFlOFFqemJiVHlPS0JxekEyV3pJM1l4eXA0RXpPYThsNXVlWHVxTS94S2QwcERUSmtxYXcvelYvd0xQaE1FNThKcHAvdk5qbWZObnZ5MWJ6L29ySWVwUDlSOERIR0c2aE5pdGpadkxpZHJSNHp2L3kvdEFOSW52c3NSL0duRm1OZnlNN3ZoVzM5YWNSNXJXOFgyWDJmUVl4aFUxdWxtODNuVmF0dlUvRFpJcG16bVhORDY4TUU1dFdScm5VUGRRenhIOGljcTVKbmplVnVpcmZjbU9NWUU2WHgzOW4wNXdGODYxOWxQV1EybnpiMlp0bXpkai9yRUg0ZEVuMEt6eWFTWVpXMVlXUEx5NUZwOXR2ZXBndTlRanVlZFBzVWk5bm93cnN3NGwvVjRycVAyOTJCYy9ZMjRudjA2U2dlb0NiV2s5UDZkcXpGOFQ1dSttMGpPNk5sTVpkNGVIY0RjLytNeHRVQ3UvdHpGM1BnYTYrY2JIYmFJWGJuNnhVL3Y5RHZvN0Y2aGNWd3RzRjRPQ2Q4RWNZMmhQZUNMUjdtVVZ1VGM4MlBNSkcyYnRYckNPZU81R3pGWElXS1hYbllmTVN6TEg5bUh2VVdmYnVBYzdPRTVpbmp2cVRESHdTaThOZTZEOGg0Q2NGdDdONzBhT29Wd0VkaVY4d0gxOFhtWXgzbUxRRk5KQmFGZmgvQk04MHZVOExteUVuVFoyYUJ2cnJvdDFvdXJNYk13U2g3NEdDTExSbEN2VWowVzJ4dlBjODNqa05jdE1uMnNlZjA0MWtQMzNLdHU4enkyVjVtZWV3SE1TZFBlTWVFYjVPcHJOK3Ryek1ZWTZZMnllT2JxaXAzbXIwTFA5dml3VmJnVGRKTzRoTnRzUmxIR0dzcVgxSXhhNThaZG8vcFd0NGh3cmUwYnd5MHUyUE56SWF3MDg1M2Jaa3JRLzNZanJxTnloMWc3eFRmWmZiYmtyUW5xMDJtTXg1WWNMejVhb2ZUM3E3NnpqZmRJTWJ1aHo0SStZUGZyVFA2THJ6UjBOWE9OYkcwUzBoM09tdm4wSnNaTXl5WmQ5cDVyUlJ6QzJzUDNjWDdYNnJMTFl3L2xEd1AybHZ3K1Z6bnd4bkhZaEdyMkwybmEybWZVUjFYYzI4SWRoNTd5Nit6dllsendQU0VEK3hjK2F6RlB3d3krOFp6OUVOSnR0bFc5MjBXbTVGc3ZvOHhrUG1ZNkQ5Zy9KNzRwMWx1aERsOEswZG5rMS90emdMcndQK1NCUE9uSmRjSDZtUTh4K3Z2a1hXSVk0TmpndTFIV3ozM1M4WUMwNTk0S1ZVUnI4dEc4SFJYOGY5TU1kV005cGpVbUtnRS9GeUxuNzlTWXFLK3dNOE8vQ3pFVHpwK211Q25ESDUrSFJRVGxZZWZ3cEgvQ2hRb1hEaXE1WkxOYjBSZFhxS0RKTGt0cW1VdUVXdUtCRXlIa1dPVDA0ZW14QTFPVHg2U0dUVW9hM3hjaFdaeFk3SXpzekpUQjJYVXFWZC9lTzMrWXhQNkovYXYzWC9RcUpGWnFlT3orbzhjMVQ5alRPcWdVU015b2pKVDB3ZkhaYVZtWnNVTlRoNmFucG9TMVhiVW1MaXN0S0daY1puSkl6TFNVNnRmK2tmOXVqVUdUc2hLamN2TUdqTjA1SkM0Y1VQVDArTUdwc1psWjZhbXhDVm54ZzBkbVpHZEZaZVNuSlVjRlI4Ukk2NXlYTmMydDNaQzZiZlg3dCsyWTh0MlhmdDM2OVdwVGY4N1duYTl2VXBjczJiLzgxOXZ2ZXVPVGwzYWRPM2E0YTQ3SWRpZzRha1RXSlU3dTNmc0dKV1JQZEQvT1NvN2l5V0dmMTRxLzcvK01UMTE1SDh3bVVPSE9Ed3lPU3Q3VE9wL01HZ0tOTjkvL2JwKzRuOWxidjhla1Rra0xUa3pyVzZkLzhhZ2ViTzRoTGpLbGVNdS9hdHBzN2k2VWY5akw2UU9HcEdkbnZXZnpoaWEyWDlnOXREMHJQaks2TG9hemNOZnM4WlgrZjkrUGlSMTVQL0NJa0pCTmhYK1J6NkRVL25keE5ReG8rSXJEMG10MFJ5RVZmOXZ5NkV5OGYvUHJtelZvWnYzVlpXNEZuRjE2MmJITlk2clh5KzdDa2JvcGYvYVI3VzhrSXVSV3FCQVZNdlYyd0JVT0RkMy9KdTdmeWhlclVqVmt4bno2L3g1UTZlREJ5cHNHbGR0M2NjN2l6N3g3ZkJUcmFaRnRaeTJIWVIzTGlsNzRlcDdwaGVNV3JYNHdTL3l0MThSZFhGNXdXS1h6NzR5cWsrVm9yMFA3cjQ4S3YrUEtZTmZuTUFVYkRGL3pUOVNMT3JBMHBiZDArWVdqdHBaOXU4TnhVdGVHYlYvMzEwbnVyZU5qbnF5OHJnVGpTSEhTWEpONkphR0FUd29PVDE1VE56Z01Nckh4K0ZYOXNqaEkwZU5HeW01a1RUaDMzLy8rZmZmZjZOYWJ0eUI3MklpRjZ6Z1ozbmpSSTB2Zm52dGxtTGdSM3pzRDd0ZnJ6Vm16UlZSQlZ0ZnpMNThjWUdvbXpxM1FWVnpkdUp2U1MxYjFqOHlyMS9CcUw5ZktEVDMvTEFyby9LMzdnYkxxNkxBRnYrRi8yT3hpZEFkYmZIRHRJcDdsMlcrVVBXN1MzOUEyZStTVHptVi9kS2Q0ell0amZvNThkSmxMNjVITFJmc1V0dm1FWWg1NWZTK3l6Wk83VFlxUHVmS0FoOU11ZlYwVk12anhLOHZVUDN1YmMwMnZKWDY0WWpFckdJSEw0dWZ5NXI1ZjdWelAyNnpMTzZSTTFQZk9ETTZkdTZtWm1XK203SHc5SUwwTTI4TlAvWlVoYU96RWtaUFBUQjM2ODdSWlY0dCt1dktMY1ZMVlR6dzN3b2FzL2VtNnlZL1d2Q3o4WU9ueDMxYnNXYXAzaW1sY2dxV3I3enVaRUtmL1IyZkh0VDFod0tMUjhlbmw0Z3EzV2RwejFxZGkwVjFPTGZpbThURTZLaHZKN1QrcXVob2JKMnAxWVo5TXhIMWVZNzFLUnZWY2tNRUtCZlZjZytCMHBIblNOVXpoTThzS2hVMXVFVEdtRkVwMllOU3gyUVdpQVk0S0RVVEt4R1dxRUxSM1FkbWo4ektqaHVVbmp4eVNNbmFpVFVUYWliVXFKMGRRZGF1V2J2b3VPUjB6SWFpQ1RWck42cVpFRDB1T1hORWpZRkRSNlpncnBSS3FGbW5ab05HY2ZHTkJpYWtKQ1lNYXBCY0phcmlWVm5KWTRha1ptR3lSSmFNekFMVnJocVJuWlU4TUQyMXhwRDBVUU9UMHpQL0Q2VWhCV0k9JztcbiIsIi8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9cbmltcG9ydCB7IGhtYWMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL2htYWMnO1xuaW1wb3J0IHsgY29uY2F0Qnl0ZXMsIHJhbmRvbUJ5dGVzIH0gZnJvbSAnQG5vYmxlL2hhc2hlcy91dGlscyc7XG5pbXBvcnQgeyB3ZWllcnN0cmFzcyB9IGZyb20gJy4vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMnO1xuLy8gY29ubmVjdHMgbm9ibGUtY3VydmVzIHRvIG5vYmxlLWhhc2hlc1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhhc2goaGFzaCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGhhc2gsXG4gICAgICAgIGhtYWM6IChrZXksIC4uLm1zZ3MpID0+IGhtYWMoaGFzaCwga2V5LCBjb25jYXRCeXRlcyguLi5tc2dzKSksXG4gICAgICAgIHJhbmRvbUJ5dGVzLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VydmUoY3VydmVEZWYsIGRlZkhhc2gpIHtcbiAgICBjb25zdCBjcmVhdGUgPSAoaGFzaCkgPT4gd2VpZXJzdHJhc3MoeyAuLi5jdXJ2ZURlZiwgLi4uZ2V0SGFzaChoYXNoKSB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLmNyZWF0ZShkZWZIYXNoKSwgY3JlYXRlIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X3Nob3J0d191dGlscy5qcy5tYXAiLCIvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovXG4vLyBBYmVsaWFuIGdyb3VwIHV0aWxpdGllc1xuaW1wb3J0IHsgdmFsaWRhdGVGaWVsZCwgbkxlbmd0aCB9IGZyb20gJy4vbW9kdWxhci5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gJy4vdXRpbHMuanMnO1xuY29uc3QgXzBuID0gQmlnSW50KDApO1xuY29uc3QgXzFuID0gQmlnSW50KDEpO1xuLy8gRWxsaXB0aWMgY3VydmUgbXVsdGlwbGljYXRpb24gb2YgUG9pbnQgYnkgc2NhbGFyLiBGcmFnaWxlLlxuLy8gU2NhbGFycyBzaG91bGQgYWx3YXlzIGJlIGxlc3MgdGhhbiBjdXJ2ZSBvcmRlcjogdGhpcyBzaG91bGQgYmUgY2hlY2tlZCBpbnNpZGUgb2YgYSBjdXJ2ZSBpdHNlbGYuXG4vLyBDcmVhdGVzIHByZWNvbXB1dGF0aW9uIHRhYmxlcyBmb3IgZmFzdCBtdWx0aXBsaWNhdGlvbjpcbi8vIC0gcHJpdmF0ZSBzY2FsYXIgaXMgc3BsaXQgYnkgZml4ZWQgc2l6ZSB3aW5kb3dzIG9mIFcgYml0c1xuLy8gLSBldmVyeSB3aW5kb3cgcG9pbnQgaXMgY29sbGVjdGVkIGZyb20gd2luZG93J3MgdGFibGUgJiBhZGRlZCB0byBhY2N1bXVsYXRvclxuLy8gLSBzaW5jZSB3aW5kb3dzIGFyZSBkaWZmZXJlbnQsIHNhbWUgcG9pbnQgaW5zaWRlIHRhYmxlcyB3b24ndCBiZSBhY2Nlc3NlZCBtb3JlIHRoYW4gb25jZSBwZXIgY2FsY1xuLy8gLSBlYWNoIG11bHRpcGxpY2F0aW9uIGlzICdNYXRoLmNlaWwoQ1VSVkVfT1JERVIgLyDwnZGKKSArIDEnIHBvaW50IGFkZGl0aW9ucyAoZml4ZWQgZm9yIGFueSBzY2FsYXIpXG4vLyAtICsxIHdpbmRvdyBpcyBuZWNjZXNzYXJ5IGZvciB3TkFGXG4vLyAtIHdOQUYgcmVkdWNlcyB0YWJsZSBzaXplOiAyeCBsZXNzIG1lbW9yeSArIDJ4IGZhc3RlciBnZW5lcmF0aW9uLCBidXQgMTAlIHNsb3dlciBtdWx0aXBsaWNhdGlvblxuLy8gVE9ETzogUmVzZWFyY2ggcmV0dXJuaW5nIDJkIEpTIGFycmF5IG9mIHdpbmRvd3MsIGluc3RlYWQgb2YgYSBzaW5nbGUgd2luZG93LiBUaGlzIHdvdWxkIGFsbG93XG4vLyB3aW5kb3dzIHRvIGJlIGluIGRpZmZlcmVudCBtZW1vcnkgbG9jYXRpb25zXG5leHBvcnQgZnVuY3Rpb24gd05BRihjLCBiaXRzKSB7XG4gICAgY29uc3QgY29uc3RUaW1lTmVnYXRlID0gKGNvbmRpdGlvbiwgaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBuZWcgPSBpdGVtLm5lZ2F0ZSgpO1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gbmVnIDogaXRlbTtcbiAgICB9O1xuICAgIGNvbnN0IG9wdHMgPSAoVykgPT4ge1xuICAgICAgICBjb25zdCB3aW5kb3dzID0gTWF0aC5jZWlsKGJpdHMgLyBXKSArIDE7IC8vICsxLCBiZWNhdXNlXG4gICAgICAgIGNvbnN0IHdpbmRvd1NpemUgPSAyICoqIChXIC0gMSk7IC8vIC0xIGJlY2F1c2Ugd2Ugc2tpcCB6ZXJvXG4gICAgICAgIHJldHVybiB7IHdpbmRvd3MsIHdpbmRvd1NpemUgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbnN0VGltZU5lZ2F0ZSxcbiAgICAgICAgLy8gbm9uLWNvbnN0IHRpbWUgbXVsdGlwbGljYXRpb24gbGFkZGVyXG4gICAgICAgIHVuc2FmZUxhZGRlcihlbG0sIG4pIHtcbiAgICAgICAgICAgIGxldCBwID0gYy5aRVJPO1xuICAgICAgICAgICAgbGV0IGQgPSBlbG07XG4gICAgICAgICAgICB3aGlsZSAobiA+IF8wbikge1xuICAgICAgICAgICAgICAgIGlmIChuICYgXzFuKVxuICAgICAgICAgICAgICAgICAgICBwID0gcC5hZGQoZCk7XG4gICAgICAgICAgICAgICAgZCA9IGQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgbiA+Pj0gXzFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgd05BRiBwcmVjb21wdXRhdGlvbiB3aW5kb3cuIFVzZWQgZm9yIGNhY2hpbmcuXG4gICAgICAgICAqIERlZmF1bHQgd2luZG93IHNpemUgaXMgc2V0IGJ5IGB1dGlscy5wcmVjb21wdXRlKClgIGFuZCBpcyBlcXVhbCB0byA4LlxuICAgICAgICAgKiBOdW1iZXIgb2YgcHJlY29tcHV0ZWQgcG9pbnRzIGRlcGVuZHMgb24gdGhlIGN1cnZlIHNpemU6XG4gICAgICAgICAqIDJeKPCdkYriiJIxKSAqIChNYXRoLmNlaWwo8J2RmyAvIPCdkYopICsgMSksIHdoZXJlOlxuICAgICAgICAgKiAtIPCdkYogaXMgdGhlIHdpbmRvdyBzaXplXG4gICAgICAgICAqIC0g8J2RmyBpcyB0aGUgYml0bGVuZ3RoIG9mIHRoZSBjdXJ2ZSBvcmRlci5cbiAgICAgICAgICogRm9yIGEgMjU2LWJpdCBjdXJ2ZSBhbmQgd2luZG93IHNpemUgOCwgdGhlIG51bWJlciBvZiBwcmVjb21wdXRlZCBwb2ludHMgaXMgMTI4ICogMzMgPSA0MjI0LlxuICAgICAgICAgKiBAcmV0dXJucyBwcmVjb21wdXRlZCBwb2ludCB0YWJsZXMgZmxhdHRlbmVkIHRvIGEgc2luZ2xlIGFycmF5XG4gICAgICAgICAqL1xuICAgICAgICBwcmVjb21wdXRlV2luZG93KGVsbSwgVykge1xuICAgICAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgICAgICBsZXQgcCA9IGVsbTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gcDtcbiAgICAgICAgICAgIGZvciAobGV0IHdpbmRvdyA9IDA7IHdpbmRvdyA8IHdpbmRvd3M7IHdpbmRvdysrKSB7XG4gICAgICAgICAgICAgICAgYmFzZSA9IHA7XG4gICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goYmFzZSk7XG4gICAgICAgICAgICAgICAgLy8gPTEsIGJlY2F1c2Ugd2Ugc2tpcCB6ZXJvXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB3aW5kb3dTaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UuYWRkKHApO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChiYXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcCA9IGJhc2UuZG91YmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogSW1wbGVtZW50cyBlYyBtdWx0aXBsaWNhdGlvbiB1c2luZyBwcmVjb21wdXRlZCB0YWJsZXMgYW5kIHctYXJ5IG5vbi1hZGphY2VudCBmb3JtLlxuICAgICAgICAgKiBAcGFyYW0gVyB3aW5kb3cgc2l6ZVxuICAgICAgICAgKiBAcGFyYW0gcHJlY29tcHV0ZXMgcHJlY29tcHV0ZWQgdGFibGVzXG4gICAgICAgICAqIEBwYXJhbSBuIHNjYWxhciAod2UgZG9uJ3QgY2hlY2sgaGVyZSwgYnV0IHNob3VsZCBiZSBsZXNzIHRoYW4gY3VydmUgb3JkZXIpXG4gICAgICAgICAqIEByZXR1cm5zIHJlYWwgYW5kIGZha2UgKGZvciBjb25zdC10aW1lKSBwb2ludHNcbiAgICAgICAgICovXG4gICAgICAgIHdOQUYoVywgcHJlY29tcHV0ZXMsIG4pIHtcbiAgICAgICAgICAgIC8vIFRPRE86IG1heWJlIGNoZWNrIHRoYXQgc2NhbGFyIGlzIGxlc3MgdGhhbiBncm91cCBvcmRlcj8gd05BRiBiZWhhdmlvdXMgaXMgdW5kZWZpbmVkIG90aGVyd2lzZVxuICAgICAgICAgICAgLy8gQnV0IG5lZWQgdG8gY2FyZWZ1bGx5IHJlbW92ZSBvdGhlciBjaGVja3MgYmVmb3JlIHdOQUYuIE9SREVSID09IGJpdHMgaGVyZVxuICAgICAgICAgICAgY29uc3QgeyB3aW5kb3dzLCB3aW5kb3dTaXplIH0gPSBvcHRzKFcpO1xuICAgICAgICAgICAgbGV0IHAgPSBjLlpFUk87XG4gICAgICAgICAgICBsZXQgZiA9IGMuQkFTRTtcbiAgICAgICAgICAgIGNvbnN0IG1hc2sgPSBCaWdJbnQoMiAqKiBXIC0gMSk7IC8vIENyZWF0ZSBtYXNrIHdpdGggVyBvbmVzOiAwYjExMTEgZm9yIFc9NCBldGMuXG4gICAgICAgICAgICBjb25zdCBtYXhOdW1iZXIgPSAyICoqIFc7XG4gICAgICAgICAgICBjb25zdCBzaGlmdEJ5ID0gQmlnSW50KFcpO1xuICAgICAgICAgICAgZm9yIChsZXQgd2luZG93ID0gMDsgd2luZG93IDwgd2luZG93czsgd2luZG93KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB3aW5kb3cgKiB3aW5kb3dTaXplO1xuICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgVyBiaXRzLlxuICAgICAgICAgICAgICAgIGxldCB3Yml0cyA9IE51bWJlcihuICYgbWFzayk7XG4gICAgICAgICAgICAgICAgLy8gU2hpZnQgbnVtYmVyIGJ5IFcgYml0cy5cbiAgICAgICAgICAgICAgICBuID4+PSBzaGlmdEJ5O1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBiaXRzIGFyZSBiaWdnZXIgdGhhbiBtYXggc2l6ZSwgd2UnbGwgc3BsaXQgdGhvc2UuXG4gICAgICAgICAgICAgICAgLy8gKzIyNCA9PiAyNTYgLSAzMlxuICAgICAgICAgICAgICAgIGlmICh3Yml0cyA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2JpdHMgLT0gbWF4TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBuICs9IF8xbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBmaXJzdCB3cml0dGVuIHdpdGggYXNzdW1wdGlvbiB0aGF0ICdmJyBhbmQgJ3AnIHdpbGwgbmV2ZXIgYmUgaW5maW5pdHkgcG9pbnQ6XG4gICAgICAgICAgICAgICAgLy8gc2luY2UgZWFjaCBhZGRpdGlvbiBpcyBtdWx0aXBsaWVkIGJ5IDIgKiogVywgaXQgY2Fubm90IGNhbmNlbCBlYWNoIG90aGVyLiBIb3dldmVyLFxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5lZ2F0ZSBub3c6IGl0IGlzIHBvc3NpYmxlIHRoYXQgbmVnYXRlZCBlbGVtZW50IGZyb20gbG93IHZhbHVlXG4gICAgICAgICAgICAgICAgLy8gd291bGQgYmUgdGhlIHNhbWUgYXMgaGlnaCBlbGVtZW50LCB3aGljaCB3aWxsIGNyZWF0ZSBjYXJyeSBpbnRvIG5leHQgd2luZG93LlxuICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IG9idmlvdXMgaG93IHRoaXMgY2FuIGZhaWwsIGJ1dCBzdGlsbCB3b3J0aCBpbnZlc3RpZ2F0aW5nIGxhdGVyLlxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9udG8gWmVybyBwb2ludC5cbiAgICAgICAgICAgICAgICAvLyBBZGQgcmFuZG9tIHBvaW50IGluc2lkZSBjdXJyZW50IHdpbmRvdyB0byBmLlxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldDEgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0MiA9IG9mZnNldCArIE1hdGguYWJzKHdiaXRzKSAtIDE7IC8vIC0xIGJlY2F1c2Ugd2Ugc2tpcCB6ZXJvXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZDEgPSB3aW5kb3cgJSAyICE9PSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmQyID0gd2JpdHMgPCAwO1xuICAgICAgICAgICAgICAgIGlmICh3Yml0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBmb3IgY29uc3QtdGltZSBnZXRQdWJsaWNLZXlcbiAgICAgICAgICAgICAgICAgICAgZiA9IGYuYWRkKGNvbnN0VGltZU5lZ2F0ZShjb25kMSwgcHJlY29tcHV0ZXNbb2Zmc2V0MV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBwLmFkZChjb25zdFRpbWVOZWdhdGUoY29uZDIsIHByZWNvbXB1dGVzW29mZnNldDJdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSklULWNvbXBpbGVyIHNob3VsZCBub3QgZWxpbWluYXRlIGYgaGVyZSwgc2luY2UgaXQgd2lsbCBsYXRlciBiZSB1c2VkIGluIG5vcm1hbGl6ZVooKVxuICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgdmFyaWFibGUgaXMgc3RpbGwgdW51c2VkLCB0aGVyZSBhcmUgc29tZSBjaGVja3Mgd2hpY2ggd2lsbFxuICAgICAgICAgICAgLy8gdGhyb3cgYW4gZXhjZXB0aW9uLCBzbyBjb21waWxlciBuZWVkcyB0byBwcm92ZSB0aGV5IHdvbid0IGhhcHBlbiwgd2hpY2ggaXMgaGFyZC5cbiAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgYSB3YXkgdG8gRiBiZSBpbmZpbml0eS1wb2ludCBldmVuIGlmIHAgaXMgbm90LFxuICAgICAgICAgICAgLy8gd2hpY2ggbWFrZXMgaXQgbGVzcyBjb25zdC10aW1lOiBhcm91bmQgMSBiaWdpbnQgbXVsdGlwbHkuXG4gICAgICAgICAgICByZXR1cm4geyBwLCBmIH07XG4gICAgICAgIH0sXG4gICAgICAgIHdOQUZDYWNoZWQoUCwgcHJlY29tcHV0ZXNNYXAsIG4sIHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgVyA9IFAuX1dJTkRPV19TSVpFIHx8IDE7XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgcHJlY29tcHV0ZXMgb24gYSBmaXJzdCBydW4sIHJldXNlIHRoZW0gYWZ0ZXJcbiAgICAgICAgICAgIGxldCBjb21wID0gcHJlY29tcHV0ZXNNYXAuZ2V0KFApO1xuICAgICAgICAgICAgaWYgKCFjb21wKSB7XG4gICAgICAgICAgICAgICAgY29tcCA9IHRoaXMucHJlY29tcHV0ZVdpbmRvdyhQLCBXKTtcbiAgICAgICAgICAgICAgICBpZiAoVyAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVjb21wdXRlc01hcC5zZXQoUCwgdHJhbnNmb3JtKGNvbXApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53TkFGKFcsIGNvbXAsIG4pO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCYXNpYyhjdXJ2ZSkge1xuICAgIHZhbGlkYXRlRmllbGQoY3VydmUuRnApO1xuICAgIHZhbGlkYXRlT2JqZWN0KGN1cnZlLCB7XG4gICAgICAgIG46ICdiaWdpbnQnLFxuICAgICAgICBoOiAnYmlnaW50JyxcbiAgICAgICAgR3g6ICdmaWVsZCcsXG4gICAgICAgIEd5OiAnZmllbGQnLFxuICAgIH0sIHtcbiAgICAgICAgbkJpdExlbmd0aDogJ2lzU2FmZUludGVnZXInLFxuICAgICAgICBuQnl0ZUxlbmd0aDogJ2lzU2FmZUludGVnZXInLFxuICAgIH0pO1xuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgLi4ubkxlbmd0aChjdXJ2ZS5uLCBjdXJ2ZS5uQml0TGVuZ3RoKSxcbiAgICAgICAgLi4uY3VydmUsXG4gICAgICAgIC4uLnsgcDogY3VydmUuRnAuT1JERVIgfSxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWN1cnZlLmpzLm1hcCIsImltcG9ydCB7IG1vZCB9IGZyb20gJy4vbW9kdWxhci5qcyc7XG5pbXBvcnQgeyBieXRlc1RvTnVtYmVyQkUsIGFieXRlcywgY29uY2F0Qnl0ZXMsIHV0ZjhUb0J5dGVzLCB2YWxpZGF0ZU9iamVjdCB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gT2N0ZXQgU3RyZWFtIHRvIEludGVnZXIuIFwic3BlY1wiIGltcGxlbWVudGF0aW9uIG9mIG9zMmlwIGlzIDIuNXggc2xvd2VyIHZzIGJ5dGVzVG9OdW1iZXJCRS5cbmNvbnN0IG9zMmlwID0gYnl0ZXNUb051bWJlckJFO1xuLy8gSW50ZWdlciB0byBPY3RldCBTdHJlYW0gKG51bWJlclRvQnl0ZXNCRSlcbmZ1bmN0aW9uIGkyb3NwKHZhbHVlLCBsZW5ndGgpIHtcbiAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IDEgPDwgKDggKiBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIEkyT1NQIGNhbGw6IHZhbHVlPSR7dmFsdWV9IGxlbmd0aD0ke2xlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KS5maWxsKDApO1xuICAgIGZvciAobGV0IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICByZXNbaV0gPSB2YWx1ZSAmIDB4ZmY7XG4gICAgICAgIHZhbHVlID4+Pj0gODtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlcyk7XG59XG5mdW5jdGlvbiBzdHJ4b3IoYSwgYikge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KGEubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyW2ldID0gYVtpXSBeIGJbaV07XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59XG5mdW5jdGlvbiBhbnVtKGl0ZW0pIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGl0ZW0pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ251bWJlciBleHBlY3RlZCcpO1xufVxuLy8gUHJvZHVjZXMgYSB1bmlmb3JtbHkgcmFuZG9tIGJ5dGUgc3RyaW5nIHVzaW5nIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9uIEggdGhhdCBvdXRwdXRzIGIgYml0c1xuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkzODAjc2VjdGlvbi01LjMuMVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuSW5CeXRlcywgSCkge1xuICAgIGFieXRlcyhtc2cpO1xuICAgIGFieXRlcyhEU1QpO1xuICAgIGFudW0obGVuSW5CeXRlcyk7XG4gICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkzODAjc2VjdGlvbi01LjMuM1xuICAgIGlmIChEU1QubGVuZ3RoID4gMjU1KVxuICAgICAgICBEU1QgPSBIKGNvbmNhdEJ5dGVzKHV0ZjhUb0J5dGVzKCdIMkMtT1ZFUlNJWkUtRFNULScpLCBEU1QpKTtcbiAgICBjb25zdCB7IG91dHB1dExlbjogYl9pbl9ieXRlcywgYmxvY2tMZW46IHJfaW5fYnl0ZXMgfSA9IEg7XG4gICAgY29uc3QgZWxsID0gTWF0aC5jZWlsKGxlbkluQnl0ZXMgLyBiX2luX2J5dGVzKTtcbiAgICBpZiAoZWxsID4gMjU1KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgeG1kIGxlbmd0aCcpO1xuICAgIGNvbnN0IERTVF9wcmltZSA9IGNvbmNhdEJ5dGVzKERTVCwgaTJvc3AoRFNULmxlbmd0aCwgMSkpO1xuICAgIGNvbnN0IFpfcGFkID0gaTJvc3AoMCwgcl9pbl9ieXRlcyk7XG4gICAgY29uc3QgbF9pX2Jfc3RyID0gaTJvc3AobGVuSW5CeXRlcywgMik7IC8vIGxlbl9pbl9ieXRlc19zdHJcbiAgICBjb25zdCBiID0gbmV3IEFycmF5KGVsbCk7XG4gICAgY29uc3QgYl8wID0gSChjb25jYXRCeXRlcyhaX3BhZCwgbXNnLCBsX2lfYl9zdHIsIGkyb3NwKDAsIDEpLCBEU1RfcHJpbWUpKTtcbiAgICBiWzBdID0gSChjb25jYXRCeXRlcyhiXzAsIGkyb3NwKDEsIDEpLCBEU1RfcHJpbWUpKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBlbGw7IGkrKykge1xuICAgICAgICBjb25zdCBhcmdzID0gW3N0cnhvcihiXzAsIGJbaSAtIDFdKSwgaTJvc3AoaSArIDEsIDEpLCBEU1RfcHJpbWVdO1xuICAgICAgICBiW2ldID0gSChjb25jYXRCeXRlcyguLi5hcmdzKSk7XG4gICAgfVxuICAgIGNvbnN0IHBzZXVkb19yYW5kb21fYnl0ZXMgPSBjb25jYXRCeXRlcyguLi5iKTtcbiAgICByZXR1cm4gcHNldWRvX3JhbmRvbV9ieXRlcy5zbGljZSgwLCBsZW5JbkJ5dGVzKTtcbn1cbi8vIFByb2R1Y2VzIGEgdW5pZm9ybWx5IHJhbmRvbSBieXRlIHN0cmluZyB1c2luZyBhbiBleHRlbmRhYmxlLW91dHB1dCBmdW5jdGlvbiAoWE9GKSBILlxuLy8gMS4gVGhlIGNvbGxpc2lvbiByZXNpc3RhbmNlIG9mIEggTVVTVCBiZSBhdCBsZWFzdCBrIGJpdHMuXG4vLyAyLiBIIE1VU1QgYmUgYW4gWE9GIHRoYXQgaGFzIGJlZW4gcHJvdmVkIGluZGlmZmVyZW50aWFibGUgZnJvbVxuLy8gICAgYSByYW5kb20gb3JhY2xlIHVuZGVyIGEgcmVhc29uYWJsZSBjcnlwdG9ncmFwaGljIGFzc3VtcHRpb24uXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTUuMy4yXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kX21lc3NhZ2VfeG9mKG1zZywgRFNULCBsZW5JbkJ5dGVzLCBrLCBIKSB7XG4gICAgYWJ5dGVzKG1zZyk7XG4gICAgYWJ5dGVzKERTVCk7XG4gICAgYW51bShsZW5JbkJ5dGVzKTtcbiAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTUuMy4zXG4gICAgLy8gRFNUID0gSCgnSDJDLU9WRVJTSVpFLURTVC0nIHx8IGFfdmVyeV9sb25nX0RTVCwgTWF0aC5jZWlsKChsZW5JbkJ5dGVzICogaykgLyA4KSk7XG4gICAgaWYgKERTVC5sZW5ndGggPiAyNTUpIHtcbiAgICAgICAgY29uc3QgZGtMZW4gPSBNYXRoLmNlaWwoKDIgKiBrKSAvIDgpO1xuICAgICAgICBEU1QgPSBILmNyZWF0ZSh7IGRrTGVuIH0pLnVwZGF0ZSh1dGY4VG9CeXRlcygnSDJDLU9WRVJTSVpFLURTVC0nKSkudXBkYXRlKERTVCkuZGlnZXN0KCk7XG4gICAgfVxuICAgIGlmIChsZW5JbkJ5dGVzID4gNjU1MzUgfHwgRFNULmxlbmd0aCA+IDI1NSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBhbmRfbWVzc2FnZV94b2Y6IGludmFsaWQgbGVuSW5CeXRlcycpO1xuICAgIHJldHVybiAoSC5jcmVhdGUoeyBka0xlbjogbGVuSW5CeXRlcyB9KVxuICAgICAgICAudXBkYXRlKG1zZylcbiAgICAgICAgLnVwZGF0ZShpMm9zcChsZW5JbkJ5dGVzLCAyKSlcbiAgICAgICAgLy8gMi4gRFNUX3ByaW1lID0gRFNUIHx8IEkyT1NQKGxlbihEU1QpLCAxKVxuICAgICAgICAudXBkYXRlKERTVClcbiAgICAgICAgLnVwZGF0ZShpMm9zcChEU1QubGVuZ3RoLCAxKSlcbiAgICAgICAgLmRpZ2VzdCgpKTtcbn1cbi8qKlxuICogSGFzaGVzIGFyYml0cmFyeS1sZW5ndGggYnl0ZSBzdHJpbmdzIHRvIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBlbGVtZW50cyBvZiBhIGZpbml0ZSBmaWVsZCBGXG4gKiBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTUuMlxuICogQHBhcmFtIG1zZyBhIGJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UgdG8gaGFzaFxuICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgRiB0byBvdXRwdXRcbiAqIEBwYXJhbSBvcHRpb25zIGB7RFNUOiBzdHJpbmcsIHA6IGJpZ2ludCwgbTogbnVtYmVyLCBrOiBudW1iZXIsIGV4cGFuZDogJ3htZCcgfCAneG9mJywgaGFzaDogSH1gLCBzZWUgYWJvdmVcbiAqIEByZXR1cm5zIFt1XzAsIC4uLiwgdV8oY291bnQgLSAxKV0sIGEgbGlzdCBvZiBmaWVsZCBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hfdG9fZmllbGQobXNnLCBjb3VudCwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsIHtcbiAgICAgICAgRFNUOiAnc3RyaW5nT3JVaW50OEFycmF5JyxcbiAgICAgICAgcDogJ2JpZ2ludCcsXG4gICAgICAgIG06ICdpc1NhZmVJbnRlZ2VyJyxcbiAgICAgICAgazogJ2lzU2FmZUludGVnZXInLFxuICAgICAgICBoYXNoOiAnaGFzaCcsXG4gICAgfSk7XG4gICAgY29uc3QgeyBwLCBrLCBtLCBoYXNoLCBleHBhbmQsIERTVDogX0RTVCB9ID0gb3B0aW9ucztcbiAgICBhYnl0ZXMobXNnKTtcbiAgICBhbnVtKGNvdW50KTtcbiAgICBjb25zdCBEU1QgPSB0eXBlb2YgX0RTVCA9PT0gJ3N0cmluZycgPyB1dGY4VG9CeXRlcyhfRFNUKSA6IF9EU1Q7XG4gICAgY29uc3QgbG9nMnAgPSBwLnRvU3RyaW5nKDIpLmxlbmd0aDtcbiAgICBjb25zdCBMID0gTWF0aC5jZWlsKChsb2cycCArIGspIC8gOCk7IC8vIHNlY3Rpb24gNS4xIG9mIGlldGYgZHJhZnQgbGluayBhYm92ZVxuICAgIGNvbnN0IGxlbl9pbl9ieXRlcyA9IGNvdW50ICogbSAqIEw7XG4gICAgbGV0IHByYjsgLy8gcHNldWRvX3JhbmRvbV9ieXRlc1xuICAgIGlmIChleHBhbmQgPT09ICd4bWQnKSB7XG4gICAgICAgIHByYiA9IGV4cGFuZF9tZXNzYWdlX3htZChtc2csIERTVCwgbGVuX2luX2J5dGVzLCBoYXNoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXhwYW5kID09PSAneG9mJykge1xuICAgICAgICBwcmIgPSBleHBhbmRfbWVzc2FnZV94b2YobXNnLCBEU1QsIGxlbl9pbl9ieXRlcywgaywgaGFzaCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV4cGFuZCA9PT0gJ19pbnRlcm5hbF9wYXNzJykge1xuICAgICAgICAvLyBmb3IgaW50ZXJuYWwgdGVzdHMgb25seVxuICAgICAgICBwcmIgPSBtc2c7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGFuZCBtdXN0IGJlIFwieG1kXCIgb3IgXCJ4b2ZcIicpO1xuICAgIH1cbiAgICBjb25zdCB1ID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgZSA9IG5ldyBBcnJheShtKTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVsbV9vZmZzZXQgPSBMICogKGogKyBpICogbSk7XG4gICAgICAgICAgICBjb25zdCB0diA9IHByYi5zdWJhcnJheShlbG1fb2Zmc2V0LCBlbG1fb2Zmc2V0ICsgTCk7XG4gICAgICAgICAgICBlW2pdID0gbW9kKG9zMmlwKHR2KSwgcCk7XG4gICAgICAgIH1cbiAgICAgICAgdVtpXSA9IGU7XG4gICAgfVxuICAgIHJldHVybiB1O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzb2dlbnlNYXAoZmllbGQsIG1hcCkge1xuICAgIC8vIE1ha2Ugc2FtZSBvcmRlciBhcyBpbiBzcGVjXG4gICAgY29uc3QgQ09FRkYgPSBtYXAubWFwKChpKSA9PiBBcnJheS5mcm9tKGkpLnJldmVyc2UoKSk7XG4gICAgcmV0dXJuICh4LCB5KSA9PiB7XG4gICAgICAgIGNvbnN0IFt4TnVtLCB4RGVuLCB5TnVtLCB5RGVuXSA9IENPRUZGLm1hcCgodmFsKSA9PiB2YWwucmVkdWNlKChhY2MsIGkpID0+IGZpZWxkLmFkZChmaWVsZC5tdWwoYWNjLCB4KSwgaSkpKTtcbiAgICAgICAgeCA9IGZpZWxkLmRpdih4TnVtLCB4RGVuKTsgLy8geE51bSAvIHhEZW5cbiAgICAgICAgeSA9IGZpZWxkLm11bCh5LCBmaWVsZC5kaXYoeU51bSwgeURlbikpOyAvLyB5ICogKHlOdW0gLyB5RGV2KVxuICAgICAgICByZXR1cm4geyB4LCB5IH07XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIYXNoZXIoUG9pbnQsIG1hcFRvQ3VydmUsIGRlZikge1xuICAgIGlmICh0eXBlb2YgbWFwVG9DdXJ2ZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXBUb0N1cnZlKCkgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLy8gRW5jb2RlcyBieXRlIHN0cmluZyB0byBlbGxpcHRpYyBjdXJ2ZS5cbiAgICAgICAgLy8gaGFzaF90b19jdXJ2ZSBmcm9tIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MzgwI3NlY3Rpb24tM1xuICAgICAgICBoYXNoVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHUgPSBoYXNoX3RvX2ZpZWxkKG1zZywgMiwgeyAuLi5kZWYsIERTVDogZGVmLkRTVCwgLi4ub3B0aW9ucyB9KTtcbiAgICAgICAgICAgIGNvbnN0IHUwID0gUG9pbnQuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMF0pKTtcbiAgICAgICAgICAgIGNvbnN0IHUxID0gUG9pbnQuZnJvbUFmZmluZShtYXBUb0N1cnZlKHVbMV0pKTtcbiAgICAgICAgICAgIGNvbnN0IFAgPSB1MC5hZGQodTEpLmNsZWFyQ29mYWN0b3IoKTtcbiAgICAgICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiBQO1xuICAgICAgICB9LFxuICAgICAgICAvLyBFbmNvZGVzIGJ5dGUgc3RyaW5nIHRvIGVsbGlwdGljIGN1cnZlLlxuICAgICAgICAvLyBlbmNvZGVfdG9fY3VydmUgZnJvbSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTM4MCNzZWN0aW9uLTNcbiAgICAgICAgZW5jb2RlVG9DdXJ2ZShtc2csIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHUgPSBoYXNoX3RvX2ZpZWxkKG1zZywgMSwgeyAuLi5kZWYsIERTVDogZGVmLmVuY29kZURTVCwgLi4ub3B0aW9ucyB9KTtcbiAgICAgICAgICAgIGNvbnN0IFAgPSBQb2ludC5mcm9tQWZmaW5lKG1hcFRvQ3VydmUodVswXSkpLmNsZWFyQ29mYWN0b3IoKTtcbiAgICAgICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiBQO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXNoLXRvLWN1cnZlLmpzLm1hcCIsIi8qISBub2JsZS1jdXJ2ZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9cbi8vIFV0aWxpdGllcyBmb3IgbW9kdWxhciBhcml0aG1ldGljcyBhbmQgZmluaXRlIGZpZWxkc1xuaW1wb3J0IHsgYml0TWFzaywgbnVtYmVyVG9CeXRlc0JFLCBudW1iZXJUb0J5dGVzTEUsIGJ5dGVzVG9OdW1iZXJCRSwgYnl0ZXNUb051bWJlckxFLCBlbnN1cmVCeXRlcywgdmFsaWRhdGVPYmplY3QsIH0gZnJvbSAnLi91dGlscy5qcyc7XG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IF8wbiA9IEJpZ0ludCgwKSwgXzFuID0gQmlnSW50KDEpLCBfMm4gPSBCaWdJbnQoMiksIF8zbiA9IEJpZ0ludCgzKTtcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgXzRuID0gQmlnSW50KDQpLCBfNW4gPSBCaWdJbnQoNSksIF84biA9IEJpZ0ludCg4KTtcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgXzluID0gQmlnSW50KDkpLCBfMTZuID0gQmlnSW50KDE2KTtcbi8vIENhbGN1bGF0ZXMgYSBtb2R1bG8gYlxuZXhwb3J0IGZ1bmN0aW9uIG1vZChhLCBiKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYSAlIGI7XG4gICAgcmV0dXJuIHJlc3VsdCA+PSBfMG4gPyByZXN1bHQgOiBiICsgcmVzdWx0O1xufVxuLyoqXG4gKiBFZmZpY2llbnRseSByYWlzZSBudW0gdG8gcG93ZXIgYW5kIGRvIG1vZHVsYXIgZGl2aXNpb24uXG4gKiBVbnNhZmUgaW4gc29tZSBjb250ZXh0czogdXNlcyBsYWRkZXIsIHNvIGNhbiBleHBvc2UgYmlnaW50IGJpdHMuXG4gKiBAZXhhbXBsZVxuICogcG93KDJuLCA2biwgMTFuKSAvLyA2NG4gJSAxMW4gPT0gOW5cbiAqL1xuLy8gVE9ETzogdXNlIGZpZWxkIHZlcnNpb24gJiYgcmVtb3ZlXG5leHBvcnQgZnVuY3Rpb24gcG93KG51bSwgcG93ZXIsIG1vZHVsbykge1xuICAgIGlmIChtb2R1bG8gPD0gXzBuIHx8IHBvd2VyIDwgXzBuKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBvd2VyL21vZHVsbyA+IDAnKTtcbiAgICBpZiAobW9kdWxvID09PSBfMW4pXG4gICAgICAgIHJldHVybiBfMG47XG4gICAgbGV0IHJlcyA9IF8xbjtcbiAgICB3aGlsZSAocG93ZXIgPiBfMG4pIHtcbiAgICAgICAgaWYgKHBvd2VyICYgXzFuKVxuICAgICAgICAgICAgcmVzID0gKHJlcyAqIG51bSkgJSBtb2R1bG87XG4gICAgICAgIG51bSA9IChudW0gKiBudW0pICUgbW9kdWxvO1xuICAgICAgICBwb3dlciA+Pj0gXzFuO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLy8gRG9lcyB4IF4gKDIgXiBwb3dlcikgbW9kIHAuIHBvdzIoMzAsIDQpID09IDMwIF4gKDIgXiA0KVxuZXhwb3J0IGZ1bmN0aW9uIHBvdzIoeCwgcG93ZXIsIG1vZHVsbykge1xuICAgIGxldCByZXMgPSB4O1xuICAgIHdoaWxlIChwb3dlci0tID4gXzBuKSB7XG4gICAgICAgIHJlcyAqPSByZXM7XG4gICAgICAgIHJlcyAlPSBtb2R1bG87XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vLyBJbnZlcnNlcyBudW1iZXIgb3ZlciBtb2R1bG9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQobnVtYmVyLCBtb2R1bG8pIHtcbiAgICBpZiAobnVtYmVyID09PSBfMG4gfHwgbW9kdWxvIDw9IF8wbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmVydDogZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcnMsIGdvdCBuPSR7bnVtYmVyfSBtb2Q9JHttb2R1bG99YCk7XG4gICAgfVxuICAgIC8vIEV1Y2xpZGVhbiBHQ0QgaHR0cHM6Ly9icmlsbGlhbnQub3JnL3dpa2kvZXh0ZW5kZWQtZXVjbGlkZWFuLWFsZ29yaXRobS9cbiAgICAvLyBGZXJtYXQncyBsaXR0bGUgdGhlb3JlbSBcIkNULWxpa2VcIiB2ZXJzaW9uIGludihuKSA9IG5eKG0tMikgbW9kIG0gaXMgMzB4IHNsb3dlci5cbiAgICBsZXQgYSA9IG1vZChudW1iZXIsIG1vZHVsbyk7XG4gICAgbGV0IGIgPSBtb2R1bG87XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IHggPSBfMG4sIHkgPSBfMW4sIHUgPSBfMW4sIHYgPSBfMG47XG4gICAgd2hpbGUgKGEgIT09IF8wbikge1xuICAgICAgICAvLyBKSVQgYXBwbGllcyBvcHRpbWl6YXRpb24gaWYgdGhvc2UgdHdvIGxpbmVzIGZvbGxvdyBlYWNoIG90aGVyXG4gICAgICAgIGNvbnN0IHEgPSBiIC8gYTtcbiAgICAgICAgY29uc3QgciA9IGIgJSBhO1xuICAgICAgICBjb25zdCBtID0geCAtIHUgKiBxO1xuICAgICAgICBjb25zdCBuID0geSAtIHYgKiBxO1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgYiA9IGEsIGEgPSByLCB4ID0gdSwgeSA9IHYsIHUgPSBtLCB2ID0gbjtcbiAgICB9XG4gICAgY29uc3QgZ2NkID0gYjtcbiAgICBpZiAoZ2NkICE9PSBfMW4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52ZXJ0OiBkb2VzIG5vdCBleGlzdCcpO1xuICAgIHJldHVybiBtb2QoeCwgbW9kdWxvKTtcbn1cbi8qKlxuICogVG9uZWxsaS1TaGFua3Mgc3F1YXJlIHJvb3Qgc2VhcmNoIGFsZ29yaXRobS5cbiAqIDEuIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTIvNjg1LnBkZiAocGFnZSAxMilcbiAqIDIuIFNxdWFyZSBSb290cyBmcm9tIDE7IDI0LCA1MSwgMTAgdG8gRGFuIFNoYW5rc1xuICogV2lsbCBzdGFydCBhbiBpbmZpbml0ZSBsb29wIGlmIGZpZWxkIG9yZGVyIFAgaXMgbm90IHByaW1lLlxuICogQHBhcmFtIFAgZmllbGQgb3JkZXJcbiAqIEByZXR1cm5zIGZ1bmN0aW9uIHRoYXQgdGFrZXMgZmllbGQgRnAgKGNyZWF0ZWQgZnJvbSBQKSBhbmQgbnVtYmVyIG5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvbmVsbGlTaGFua3MoUCkge1xuICAgIC8vIExlZ2VuZHJlIGNvbnN0YW50OiB1c2VkIHRvIGNhbGN1bGF0ZSBMZWdlbmRyZSBzeW1ib2wgKGEgfCBwKSxcbiAgICAvLyB3aGljaCBkZW5vdGVzIHRoZSB2YWx1ZSBvZiBhXigocC0xKS8yKSAobW9kIHApLlxuICAgIC8vIChhIHwgcCkg4omhIDEgICAgaWYgYSBpcyBhIHNxdWFyZSAobW9kIHApXG4gICAgLy8gKGEgfCBwKSDiiaEgLTEgICBpZiBhIGlzIG5vdCBhIHNxdWFyZSAobW9kIHApXG4gICAgLy8gKGEgfCBwKSDiiaEgMCAgICBpZiBhIOKJoSAwIChtb2QgcClcbiAgICBjb25zdCBsZWdlbmRyZUMgPSAoUCAtIF8xbikgLyBfMm47XG4gICAgbGV0IFEsIFMsIFo7XG4gICAgLy8gU3RlcCAxOiBCeSBmYWN0b3Jpbmcgb3V0IHBvd2VycyBvZiAyIGZyb20gcCAtIDEsXG4gICAgLy8gZmluZCBxIGFuZCBzIHN1Y2ggdGhhdCBwIC0gMSA9IHEqKDJecykgd2l0aCBxIG9kZFxuICAgIGZvciAoUSA9IFAgLSBfMW4sIFMgPSAwOyBRICUgXzJuID09PSBfMG47IFEgLz0gXzJuLCBTKyspXG4gICAgICAgIDtcbiAgICAvLyBTdGVwIDI6IFNlbGVjdCBhIG5vbi1zcXVhcmUgeiBzdWNoIHRoYXQgKHogfCBwKSDiiaEgLTEgYW5kIHNldCBjIOKJoSB6cVxuICAgIGZvciAoWiA9IF8ybjsgWiA8IFAgJiYgcG93KFosIGxlZ2VuZHJlQywgUCkgIT09IFAgLSBfMW47IForKylcbiAgICAgICAgO1xuICAgIC8vIEZhc3QtcGF0aFxuICAgIGlmIChTID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuKSAvIF80bjtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlGYXN0KEZwLCBuKSB7XG4gICAgICAgICAgICBjb25zdCByb290ID0gRnAucG93KG4sIHAxZGl2NCk7XG4gICAgICAgICAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdCksIG4pKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QnKTtcbiAgICAgICAgICAgIHJldHVybiByb290O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBTbG93LXBhdGhcbiAgICBjb25zdCBRMWRpdjIgPSAoUSArIF8xbikgLyBfMm47XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHRvbmVsbGlTbG93KEZwLCBuKSB7XG4gICAgICAgIC8vIFN0ZXAgMDogQ2hlY2sgdGhhdCBuIGlzIGluZGVlZCBhIHNxdWFyZTogKG4gfCBwKSBzaG91bGQgbm90IGJlIOKJoSAtMVxuICAgICAgICBpZiAoRnAucG93KG4sIGxlZ2VuZHJlQykgPT09IEZwLm5lZyhGcC5PTkUpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCcpO1xuICAgICAgICBsZXQgciA9IFM7XG4gICAgICAgIC8vIFRPRE86IHdpbGwgZmFpbCBhdCBGcDIvZXRjXG4gICAgICAgIGxldCBnID0gRnAucG93KEZwLm11bChGcC5PTkUsIFopLCBRKTsgLy8gd2lsbCB1cGRhdGUgYm90aCB4IGFuZCBiXG4gICAgICAgIGxldCB4ID0gRnAucG93KG4sIFExZGl2Mik7IC8vIGZpcnN0IGd1ZXNzIGF0IHRoZSBzcXVhcmUgcm9vdFxuICAgICAgICBsZXQgYiA9IEZwLnBvdyhuLCBRKTsgLy8gZmlyc3QgZ3Vlc3MgYXQgdGhlIGZ1ZGdlIGZhY3RvclxuICAgICAgICB3aGlsZSAoIUZwLmVxbChiLCBGcC5PTkUpKSB7XG4gICAgICAgICAgICBpZiAoRnAuZXFsKGIsIEZwLlpFUk8pKVxuICAgICAgICAgICAgICAgIHJldHVybiBGcC5aRVJPOyAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ub25lbGxpJUUyJTgwJTkzU2hhbmtzX2FsZ29yaXRobSAoNC4gSWYgdCA9IDAsIHJldHVybiByID0gMClcbiAgICAgICAgICAgIC8vIEZpbmQgbSBzdWNoIGJeKDJebSk9PTFcbiAgICAgICAgICAgIGxldCBtID0gMTtcbiAgICAgICAgICAgIGZvciAobGV0IHQyID0gRnAuc3FyKGIpOyBtIDwgcjsgbSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKEZwLmVxbCh0MiwgRnAuT05FKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgdDIgPSBGcC5zcXIodDIpOyAvLyB0MiAqPSB0MlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTk9URTogci1tLTEgY2FuIGJlIGJpZ2dlciB0aGFuIDMyLCBuZWVkIHRvIGNvbnZlcnQgdG8gYmlnaW50IGJlZm9yZSBzaGlmdCwgb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgb3ZlcmZsb3dcbiAgICAgICAgICAgIGNvbnN0IGdlID0gRnAucG93KGcsIF8xbiA8PCBCaWdJbnQociAtIG0gLSAxKSk7IC8vIGdlID0gMl4oci1tLTEpXG4gICAgICAgICAgICBnID0gRnAuc3FyKGdlKTsgLy8gZyA9IGdlICogZ2VcbiAgICAgICAgICAgIHggPSBGcC5tdWwoeCwgZ2UpOyAvLyB4ICo9IGdlXG4gICAgICAgICAgICBiID0gRnAubXVsKGIsIGcpOyAvLyBiICo9IGdcbiAgICAgICAgICAgIHIgPSBtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gRnBTcXJ0KFApIHtcbiAgICAvLyBOT1RFOiBkaWZmZXJlbnQgYWxnb3JpdGhtcyBjYW4gZ2l2ZSBkaWZmZXJlbnQgcm9vdHMsIGl0IGlzIHVwIHRvIHVzZXIgdG8gZGVjaWRlIHdoaWNoIG9uZSB0aGV5IHdhbnQuXG4gICAgLy8gRm9yIGV4YW1wbGUgdGhlcmUgaXMgRnBTcXJ0T2RkL0ZwU3FydEV2ZW4gdG8gY2hvaWNlIHJvb3QgYmFzZWQgb24gb2RkbmVzcyAodXNlZCBmb3IgaGFzaC10by1jdXJ2ZSkuXG4gICAgLy8gUCDiiaEgMyAobW9kIDQpXG4gICAgLy8g4oiabiA9IG5eKChQKzEpLzQpXG4gICAgaWYgKFAgJSBfNG4gPT09IF8zbikge1xuICAgICAgICAvLyBOb3QgYWxsIHJvb3RzIHBvc3NpYmxlIVxuICAgICAgICAvLyBjb25zdCBPUkRFUiA9XG4gICAgICAgIC8vICAgMHgxYTAxMTFlYTM5N2ZlNjlhNGIxYmE3YjY0MzRiYWNkNzY0Nzc0Yjg0ZjM4NTEyYmY2NzMwZDJhMGY2YjBmNjI0MWVhYmZmZmViMTUzZmZmZmI5ZmVmZmZmZmZmZmFhYWJuO1xuICAgICAgICAvLyBjb25zdCBOVU0gPSA3MjA1NzU5NDAzNzkyNzgxNm47XG4gICAgICAgIGNvbnN0IHAxZGl2NCA9IChQICsgXzFuKSAvIF80bjtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNxcnQzbW9kNChGcCwgbikge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IEZwLnBvdyhuLCBwMWRpdjQpO1xuICAgICAgICAgICAgLy8gVGhyb3cgaWYgcm9vdCoqMiAhPSBuXG4gICAgICAgICAgICBpZiAoIUZwLmVxbChGcC5zcXIocm9vdCksIG4pKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QnKTtcbiAgICAgICAgICAgIHJldHVybiByb290O1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBBdGtpbiBhbGdvcml0aG0gZm9yIHEg4omhIDUgKG1vZCA4KSwgaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxMi82ODUucGRmIChwYWdlIDEwKVxuICAgIGlmIChQICUgXzhuID09PSBfNW4pIHtcbiAgICAgICAgY29uc3QgYzEgPSAoUCAtIF81bikgLyBfOG47XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBzcXJ0NW1vZDgoRnAsIG4pIHtcbiAgICAgICAgICAgIGNvbnN0IG4yID0gRnAubXVsKG4sIF8ybik7XG4gICAgICAgICAgICBjb25zdCB2ID0gRnAucG93KG4yLCBjMSk7XG4gICAgICAgICAgICBjb25zdCBudiA9IEZwLm11bChuLCB2KTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBGcC5tdWwoRnAubXVsKG52LCBfMm4pLCB2KTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBGcC5tdWwobnYsIEZwLnN1YihpLCBGcC5PTkUpKTtcbiAgICAgICAgICAgIGlmICghRnAuZXFsKEZwLnNxcihyb290KSwgbikpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBzcXVhcmUgcm9vdCcpO1xuICAgICAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFAg4omhIDkgKG1vZCAxNilcbiAgICBpZiAoUCAlIF8xNm4gPT09IF85bikge1xuICAgICAgICAvLyBOT1RFOiB0b25lbGxpIGlzIHRvbyBzbG93IGZvciBibHMtRnAyIGNhbGN1bGF0aW9ucyBldmVuIG9uIHN0YXJ0XG4gICAgICAgIC8vIE1lYW5zIHdlIGNhbm5vdCB1c2Ugc3FydCBmb3IgY29uc3RhbnRzIGF0IGFsbCFcbiAgICAgICAgLy9cbiAgICAgICAgLy8gY29uc3QgYzEgPSBGcC5zcXJ0KEZwLm5lZ2F0ZShGcC5PTkUpKTsgLy8gIDEuIGMxID0gc3FydCgtMSkgaW4gRiwgaS5lLiwgKGMxXjIpID09IC0xIGluIEZcbiAgICAgICAgLy8gY29uc3QgYzIgPSBGcC5zcXJ0KGMxKTsgICAgICAgICAgICAgICAgLy8gIDIuIGMyID0gc3FydChjMSkgaW4gRiwgaS5lLiwgKGMyXjIpID09IGMxIGluIEZcbiAgICAgICAgLy8gY29uc3QgYzMgPSBGcC5zcXJ0KEZwLm5lZ2F0ZShjMSkpOyAgICAgLy8gIDMuIGMzID0gc3FydCgtYzEpIGluIEYsIGkuZS4sIChjM14yKSA9PSAtYzEgaW4gRlxuICAgICAgICAvLyBjb25zdCBjNCA9IChQICsgXzduKSAvIF8xNm47ICAgICAgICAgICAvLyAgNC4gYzQgPSAocSArIDcpIC8gMTYgICAgICAgICMgSW50ZWdlciBhcml0aG1ldGljXG4gICAgICAgIC8vIHNxcnQgPSAoeCkgPT4ge1xuICAgICAgICAvLyAgIGxldCB0djEgPSBGcC5wb3coeCwgYzQpOyAgICAgICAgICAgICAvLyAgMS4gdHYxID0geF5jNFxuICAgICAgICAvLyAgIGxldCB0djIgPSBGcC5tdWwoYzEsIHR2MSk7ICAgICAgICAgICAvLyAgMi4gdHYyID0gYzEgKiB0djFcbiAgICAgICAgLy8gICBjb25zdCB0djMgPSBGcC5tdWwoYzIsIHR2MSk7ICAgICAgICAgLy8gIDMuIHR2MyA9IGMyICogdHYxXG4gICAgICAgIC8vICAgbGV0IHR2NCA9IEZwLm11bChjMywgdHYxKTsgICAgICAgICAgIC8vICA0LiB0djQgPSBjMyAqIHR2MVxuICAgICAgICAvLyAgIGNvbnN0IGUxID0gRnAuZXF1YWxzKEZwLnNxdWFyZSh0djIpLCB4KTsgLy8gIDUuICBlMSA9ICh0djJeMikgPT0geFxuICAgICAgICAvLyAgIGNvbnN0IGUyID0gRnAuZXF1YWxzKEZwLnNxdWFyZSh0djMpLCB4KTsgLy8gIDYuICBlMiA9ICh0djNeMikgPT0geFxuICAgICAgICAvLyAgIHR2MSA9IEZwLmNtb3YodHYxLCB0djIsIGUxKTsgLy8gIDcuIHR2MSA9IENNT1YodHYxLCB0djIsIGUxKSAgIyBTZWxlY3QgdHYyIGlmICh0djJeMikgPT0geFxuICAgICAgICAvLyAgIHR2MiA9IEZwLmNtb3YodHY0LCB0djMsIGUyKTsgLy8gIDguIHR2MiA9IENNT1YodHY0LCB0djMsIGUyKSAgIyBTZWxlY3QgdHYzIGlmICh0djNeMikgPT0geFxuICAgICAgICAvLyAgIGNvbnN0IGUzID0gRnAuZXF1YWxzKEZwLnNxdWFyZSh0djIpLCB4KTsgLy8gIDkuICBlMyA9ICh0djJeMikgPT0geFxuICAgICAgICAvLyAgIHJldHVybiBGcC5jbW92KHR2MSwgdHYyLCBlMyk7IC8vICAxMC4gIHogPSBDTU9WKHR2MSwgdHYyLCBlMykgICMgU2VsZWN0IHRoZSBzcXJ0IGZyb20gdHYxIGFuZCB0djJcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICAvLyBPdGhlciBjYXNlczogVG9uZWxsaS1TaGFua3MgYWxnb3JpdGhtXG4gICAgcmV0dXJuIHRvbmVsbGlTaGFua3MoUCk7XG59XG4vLyBMaXR0bGUtZW5kaWFuIGNoZWNrIGZvciBmaXJzdCBMRSBiaXQgKGxhc3QgQkUgYml0KTtcbmV4cG9ydCBjb25zdCBpc05lZ2F0aXZlTEUgPSAobnVtLCBtb2R1bG8pID0+IChtb2QobnVtLCBtb2R1bG8pICYgXzFuKSA9PT0gXzFuO1xuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBGSUVMRF9GSUVMRFMgPSBbXG4gICAgJ2NyZWF0ZScsICdpc1ZhbGlkJywgJ2lzMCcsICduZWcnLCAnaW52JywgJ3NxcnQnLCAnc3FyJyxcbiAgICAnZXFsJywgJ2FkZCcsICdzdWInLCAnbXVsJywgJ3BvdycsICdkaXYnLFxuICAgICdhZGROJywgJ3N1Yk4nLCAnbXVsTicsICdzcXJOJ1xuXTtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpZWxkKGZpZWxkKSB7XG4gICAgY29uc3QgaW5pdGlhbCA9IHtcbiAgICAgICAgT1JERVI6ICdiaWdpbnQnLFxuICAgICAgICBNQVNLOiAnYmlnaW50JyxcbiAgICAgICAgQllURVM6ICdpc1NhZmVJbnRlZ2VyJyxcbiAgICAgICAgQklUUzogJ2lzU2FmZUludGVnZXInLFxuICAgIH07XG4gICAgY29uc3Qgb3B0cyA9IEZJRUxEX0ZJRUxEUy5yZWR1Y2UoKG1hcCwgdmFsKSA9PiB7XG4gICAgICAgIG1hcFt2YWxdID0gJ2Z1bmN0aW9uJztcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCBpbml0aWFsKTtcbiAgICByZXR1cm4gdmFsaWRhdGVPYmplY3QoZmllbGQsIG9wdHMpO1xufVxuLy8gR2VuZXJpYyBmaWVsZCBmdW5jdGlvbnNcbi8qKlxuICogU2FtZSBhcyBgcG93YCBidXQgZm9yIEZwOiBub24tY29uc3RhbnQtdGltZS5cbiAqIFVuc2FmZSBpbiBzb21lIGNvbnRleHRzOiB1c2VzIGxhZGRlciwgc28gY2FuIGV4cG9zZSBiaWdpbnQgYml0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEZwUG93KGYsIG51bSwgcG93ZXIpIHtcbiAgICAvLyBTaG91bGQgaGF2ZSBzYW1lIHNwZWVkIGFzIHBvdyBmb3IgYmlnaW50c1xuICAgIC8vIFRPRE86IGJlbmNobWFyayFcbiAgICBpZiAocG93ZXIgPCBfMG4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcG93ZXIgPiAwJyk7XG4gICAgaWYgKHBvd2VyID09PSBfMG4pXG4gICAgICAgIHJldHVybiBmLk9ORTtcbiAgICBpZiAocG93ZXIgPT09IF8xbilcbiAgICAgICAgcmV0dXJuIG51bTtcbiAgICBsZXQgcCA9IGYuT05FO1xuICAgIGxldCBkID0gbnVtO1xuICAgIHdoaWxlIChwb3dlciA+IF8wbikge1xuICAgICAgICBpZiAocG93ZXIgJiBfMW4pXG4gICAgICAgICAgICBwID0gZi5tdWwocCwgZCk7XG4gICAgICAgIGQgPSBmLnNxcihkKTtcbiAgICAgICAgcG93ZXIgPj49IF8xbjtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG4vKipcbiAqIEVmZmljaWVudGx5IGludmVydCBhbiBhcnJheSBvZiBGaWVsZCBlbGVtZW50cy5cbiAqIGBpbnYoMClgIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgIGhlcmU6IG1ha2Ugc3VyZSB0byB0aHJvdyBhbiBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEZwSW52ZXJ0QmF0Y2goZiwgbnVtcykge1xuICAgIGNvbnN0IHRtcCA9IG5ldyBBcnJheShudW1zLmxlbmd0aCk7XG4gICAgLy8gV2FsayBmcm9tIGZpcnN0IHRvIGxhc3QsIG11bHRpcGx5IHRoZW0gYnkgZWFjaCBvdGhlciBNT0QgcFxuICAgIGNvbnN0IGxhc3RNdWx0aXBsaWVkID0gbnVtcy5yZWR1Y2UoKGFjYywgbnVtLCBpKSA9PiB7XG4gICAgICAgIGlmIChmLmlzMChudW0pKVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgdG1wW2ldID0gYWNjO1xuICAgICAgICByZXR1cm4gZi5tdWwoYWNjLCBudW0pO1xuICAgIH0sIGYuT05FKTtcbiAgICAvLyBJbnZlcnQgbGFzdCBlbGVtZW50XG4gICAgY29uc3QgaW52ZXJ0ZWQgPSBmLmludihsYXN0TXVsdGlwbGllZCk7XG4gICAgLy8gV2FsayBmcm9tIGxhc3QgdG8gZmlyc3QsIG11bHRpcGx5IHRoZW0gYnkgaW52ZXJ0ZWQgZWFjaCBvdGhlciBNT0QgcFxuICAgIG51bXMucmVkdWNlUmlnaHQoKGFjYywgbnVtLCBpKSA9PiB7XG4gICAgICAgIGlmIChmLmlzMChudW0pKVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgdG1wW2ldID0gZi5tdWwoYWNjLCB0bXBbaV0pO1xuICAgICAgICByZXR1cm4gZi5tdWwoYWNjLCBudW0pO1xuICAgIH0sIGludmVydGVkKTtcbiAgICByZXR1cm4gdG1wO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZwRGl2KGYsIGxocywgcmhzKSB7XG4gICAgcmV0dXJuIGYubXVsKGxocywgdHlwZW9mIHJocyA9PT0gJ2JpZ2ludCcgPyBpbnZlcnQocmhzLCBmLk9SREVSKSA6IGYuaW52KHJocykpO1xufVxuLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIFRydWUgd2hlbmV2ZXIgdGhlIHZhbHVlIHggaXMgYSBzcXVhcmUgaW4gdGhlIGZpZWxkIEYuXG5leHBvcnQgZnVuY3Rpb24gRnBJc1NxdWFyZShmKSB7XG4gICAgY29uc3QgbGVnZW5kcmVDb25zdCA9IChmLk9SREVSIC0gXzFuKSAvIF8ybjsgLy8gSW50ZWdlciBhcml0aG1ldGljXG4gICAgcmV0dXJuICh4KSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBmLnBvdyh4LCBsZWdlbmRyZUNvbnN0KTtcbiAgICAgICAgcmV0dXJuIGYuZXFsKHAsIGYuWkVSTykgfHwgZi5lcWwocCwgZi5PTkUpO1xuICAgIH07XG59XG4vLyBDVVJWRS5uIGxlbmd0aHNcbmV4cG9ydCBmdW5jdGlvbiBuTGVuZ3RoKG4sIG5CaXRMZW5ndGgpIHtcbiAgICAvLyBCaXQgc2l6ZSwgYnl0ZSBzaXplIG9mIENVUlZFLm5cbiAgICBjb25zdCBfbkJpdExlbmd0aCA9IG5CaXRMZW5ndGggIT09IHVuZGVmaW5lZCA/IG5CaXRMZW5ndGggOiBuLnRvU3RyaW5nKDIpLmxlbmd0aDtcbiAgICBjb25zdCBuQnl0ZUxlbmd0aCA9IE1hdGguY2VpbChfbkJpdExlbmd0aCAvIDgpO1xuICAgIHJldHVybiB7IG5CaXRMZW5ndGg6IF9uQml0TGVuZ3RoLCBuQnl0ZUxlbmd0aCB9O1xufVxuLyoqXG4gKiBJbml0aWFsaXplcyBhIGZpbml0ZSBmaWVsZCBvdmVyIHByaW1lLiAqKk5vbi1wcmltZXMgYXJlIG5vdCBzdXBwb3J0ZWQuKipcbiAqIERvIG5vdCBpbml0IGluIGxvb3A6IHNsb3cuIFZlcnkgZnJhZ2lsZTogYWx3YXlzIHJ1biBhIGJlbmNobWFyayBvbiBhIGNoYW5nZS5cbiAqIE1ham9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnM6XG4gKiAqIGEpIGRlbm9ybWFsaXplZCBvcGVyYXRpb25zIGxpa2UgbXVsTiBpbnN0ZWFkIG9mIG11bFxuICogKiBiKSBzYW1lIG9iamVjdCBzaGFwZTogbmV2ZXIgYWRkIG9yIHJlbW92ZSBrZXlzXG4gKiAqIGMpIE9iamVjdC5mcmVlemVcbiAqIEBwYXJhbSBPUkRFUiBwcmltZSBwb3NpdGl2ZSBiaWdpbnRcbiAqIEBwYXJhbSBiaXRMZW4gaG93IG1hbnkgYml0cyB0aGUgZmllbGQgY29uc3VtZXNcbiAqIEBwYXJhbSBpc0xFIChkZWY6IGZhbHNlKSBpZiBlbmNvZGluZyAvIGRlY29kaW5nIHNob3VsZCBiZSBpbiBsaXR0bGUtZW5kaWFuXG4gKiBAcGFyYW0gcmVkZWYgb3B0aW9uYWwgZmFzdGVyIHJlZGVmaW5pdGlvbnMgb2Ygc3FydCBhbmQgb3RoZXIgbWV0aG9kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gRmllbGQoT1JERVIsIGJpdExlbiwgaXNMRSA9IGZhbHNlLCByZWRlZiA9IHt9KSB7XG4gICAgaWYgKE9SREVSIDw9IF8wbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBGaWVsZCBPUkRFUiA+IDAsIGdvdCAke09SREVSfWApO1xuICAgIGNvbnN0IHsgbkJpdExlbmd0aDogQklUUywgbkJ5dGVMZW5ndGg6IEJZVEVTIH0gPSBuTGVuZ3RoKE9SREVSLCBiaXRMZW4pO1xuICAgIGlmIChCWVRFUyA+IDIwNDgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGQgbGVuZ3RocyBvdmVyIDIwNDggYnl0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICBjb25zdCBzcXJ0UCA9IEZwU3FydChPUkRFUik7XG4gICAgY29uc3QgZiA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBPUkRFUixcbiAgICAgICAgQklUUyxcbiAgICAgICAgQllURVMsXG4gICAgICAgIE1BU0s6IGJpdE1hc2soQklUUyksXG4gICAgICAgIFpFUk86IF8wbixcbiAgICAgICAgT05FOiBfMW4sXG4gICAgICAgIGNyZWF0ZTogKG51bSkgPT4gbW9kKG51bSwgT1JERVIpLFxuICAgICAgICBpc1ZhbGlkOiAobnVtKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ2JpZ2ludCcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZpZWxkIGVsZW1lbnQ6IGV4cGVjdGVkIGJpZ2ludCwgZ290ICR7dHlwZW9mIG51bX1gKTtcbiAgICAgICAgICAgIHJldHVybiBfMG4gPD0gbnVtICYmIG51bSA8IE9SREVSOyAvLyAwIGlzIHZhbGlkIGVsZW1lbnQsIGJ1dCBpdCdzIG5vdCBpbnZlcnRpYmxlXG4gICAgICAgIH0sXG4gICAgICAgIGlzMDogKG51bSkgPT4gbnVtID09PSBfMG4sXG4gICAgICAgIGlzT2RkOiAobnVtKSA9PiAobnVtICYgXzFuKSA9PT0gXzFuLFxuICAgICAgICBuZWc6IChudW0pID0+IG1vZCgtbnVtLCBPUkRFUiksXG4gICAgICAgIGVxbDogKGxocywgcmhzKSA9PiBsaHMgPT09IHJocyxcbiAgICAgICAgc3FyOiAobnVtKSA9PiBtb2QobnVtICogbnVtLCBPUkRFUiksXG4gICAgICAgIGFkZDogKGxocywgcmhzKSA9PiBtb2QobGhzICsgcmhzLCBPUkRFUiksXG4gICAgICAgIHN1YjogKGxocywgcmhzKSA9PiBtb2QobGhzIC0gcmhzLCBPUkRFUiksXG4gICAgICAgIG11bDogKGxocywgcmhzKSA9PiBtb2QobGhzICogcmhzLCBPUkRFUiksXG4gICAgICAgIHBvdzogKG51bSwgcG93ZXIpID0+IEZwUG93KGYsIG51bSwgcG93ZXIpLFxuICAgICAgICBkaXY6IChsaHMsIHJocykgPT4gbW9kKGxocyAqIGludmVydChyaHMsIE9SREVSKSwgT1JERVIpLFxuICAgICAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgZG9lc24ndCBub3JtYWxpemVcbiAgICAgICAgc3FyTjogKG51bSkgPT4gbnVtICogbnVtLFxuICAgICAgICBhZGROOiAobGhzLCByaHMpID0+IGxocyArIHJocyxcbiAgICAgICAgc3ViTjogKGxocywgcmhzKSA9PiBsaHMgLSByaHMsXG4gICAgICAgIG11bE46IChsaHMsIHJocykgPT4gbGhzICogcmhzLFxuICAgICAgICBpbnY6IChudW0pID0+IGludmVydChudW0sIE9SREVSKSxcbiAgICAgICAgc3FydDogcmVkZWYuc3FydCB8fCAoKG4pID0+IHNxcnRQKGYsIG4pKSxcbiAgICAgICAgaW52ZXJ0QmF0Y2g6IChsc3QpID0+IEZwSW52ZXJ0QmF0Y2goZiwgbHN0KSxcbiAgICAgICAgLy8gVE9ETzogZG8gd2UgcmVhbGx5IG5lZWQgY29uc3RhbnQgY21vdj9cbiAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBjb25zdC10aW1lIGJpZ2ludHMgYW55d2F5LCBzbyBwcm9iYWJseSB3aWxsIGJlIG5vdCB2ZXJ5IHVzZWZ1bFxuICAgICAgICBjbW92OiAoYSwgYiwgYykgPT4gKGMgPyBiIDogYSksXG4gICAgICAgIHRvQnl0ZXM6IChudW0pID0+IChpc0xFID8gbnVtYmVyVG9CeXRlc0xFKG51bSwgQllURVMpIDogbnVtYmVyVG9CeXRlc0JFKG51bSwgQllURVMpKSxcbiAgICAgICAgZnJvbUJ5dGVzOiAoYnl0ZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChieXRlcy5sZW5ndGggIT09IEJZVEVTKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnAuZnJvbUJ5dGVzOiBleHBlY3RlZCAke0JZVEVTfSwgZ290ICR7Ynl0ZXMubGVuZ3RofWApO1xuICAgICAgICAgICAgcmV0dXJuIGlzTEUgPyBieXRlc1RvTnVtYmVyTEUoYnl0ZXMpIDogYnl0ZXNUb051bWJlckJFKGJ5dGVzKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBGcFNxcnRPZGQoRnAsIGVsbSkge1xuICAgIGlmICghRnAuaXNPZGQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmllbGQgZG9lc24ndCBoYXZlIGlzT2RkYCk7XG4gICAgY29uc3Qgcm9vdCA9IEZwLnNxcnQoZWxtKTtcbiAgICByZXR1cm4gRnAuaXNPZGQocm9vdCkgPyByb290IDogRnAubmVnKHJvb3QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZwU3FydEV2ZW4oRnAsIGVsbSkge1xuICAgIGlmICghRnAuaXNPZGQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmllbGQgZG9lc24ndCBoYXZlIGlzT2RkYCk7XG4gICAgY29uc3Qgcm9vdCA9IEZwLnNxcnQoZWxtKTtcbiAgICByZXR1cm4gRnAuaXNPZGQocm9vdCkgPyBGcC5uZWcocm9vdCkgOiByb290O1xufVxuLyoqXG4gKiBcIkNvbnN0YW50LXRpbWVcIiBwcml2YXRlIGtleSBnZW5lcmF0aW9uIHV0aWxpdHkuXG4gKiBTYW1lIGFzIG1hcEtleVRvRmllbGQsIGJ1dCBhY2NlcHRzIGxlc3MgYnl0ZXMgKDQwIGluc3RlYWQgb2YgNDggZm9yIDMyLWJ5dGUgZmllbGQpLlxuICogV2hpY2ggbWFrZXMgaXQgc2xpZ2h0bHkgbW9yZSBiaWFzZWQsIGxlc3Mgc2VjdXJlLlxuICogQGRlcHJlY2F0ZWQgdXNlIG1hcEtleVRvRmllbGQgaW5zdGVhZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaFRvUHJpdmF0ZVNjYWxhcihoYXNoLCBncm91cE9yZGVyLCBpc0xFID0gZmFsc2UpIHtcbiAgICBoYXNoID0gZW5zdXJlQnl0ZXMoJ3ByaXZhdGVIYXNoJywgaGFzaCk7XG4gICAgY29uc3QgaGFzaExlbiA9IGhhc2gubGVuZ3RoO1xuICAgIGNvbnN0IG1pbkxlbiA9IG5MZW5ndGgoZ3JvdXBPcmRlcikubkJ5dGVMZW5ndGggKyA4O1xuICAgIGlmIChtaW5MZW4gPCAyNCB8fCBoYXNoTGVuIDwgbWluTGVuIHx8IGhhc2hMZW4gPiAxMDI0KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGhhc2hUb1ByaXZhdGVTY2FsYXI6IGV4cGVjdGVkICR7bWluTGVufS0xMDI0IGJ5dGVzIG9mIGlucHV0LCBnb3QgJHtoYXNoTGVufWApO1xuICAgIGNvbnN0IG51bSA9IGlzTEUgPyBieXRlc1RvTnVtYmVyTEUoaGFzaCkgOiBieXRlc1RvTnVtYmVyQkUoaGFzaCk7XG4gICAgcmV0dXJuIG1vZChudW0sIGdyb3VwT3JkZXIgLSBfMW4pICsgXzFuO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRvdGFsIG51bWJlciBvZiBieXRlcyBjb25zdW1lZCBieSB0aGUgZmllbGQgZWxlbWVudC5cbiAqIEZvciBleGFtcGxlLCAzMiBieXRlcyBmb3IgdXN1YWwgMjU2LWJpdCB3ZWllcnN0cmFzcyBjdXJ2ZS5cbiAqIEBwYXJhbSBmaWVsZE9yZGVyIG51bWJlciBvZiBmaWVsZCBlbGVtZW50cywgdXN1YWxseSBDVVJWRS5uXG4gKiBAcmV0dXJucyBieXRlIGxlbmd0aCBvZiBmaWVsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRCeXRlc0xlbmd0aChmaWVsZE9yZGVyKSB7XG4gICAgaWYgKHR5cGVvZiBmaWVsZE9yZGVyICE9PSAnYmlnaW50JylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWVsZCBvcmRlciBtdXN0IGJlIGJpZ2ludCcpO1xuICAgIGNvbnN0IGJpdExlbmd0aCA9IGZpZWxkT3JkZXIudG9TdHJpbmcoMikubGVuZ3RoO1xuICAgIHJldHVybiBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gOCk7XG59XG4vKipcbiAqIFJldHVybnMgbWluaW1hbCBhbW91bnQgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlZHVjZWRcbiAqIGJ5IGZpZWxkIG9yZGVyLlxuICogU2hvdWxkIGJlIDJeLTEyOCBmb3IgMTI4LWJpdCBjdXJ2ZSBzdWNoIGFzIFAyNTYuXG4gKiBAcGFyYW0gZmllbGRPcmRlciBudW1iZXIgb2YgZmllbGQgZWxlbWVudHMsIHVzdWFsbHkgQ1VSVkUublxuICogQHJldHVybnMgYnl0ZSBsZW5ndGggb2YgdGFyZ2V0IGhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcikge1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldEZpZWxkQnl0ZXNMZW5ndGgoZmllbGRPcmRlcik7XG4gICAgcmV0dXJuIGxlbmd0aCArIE1hdGguY2VpbChsZW5ndGggLyAyKTtcbn1cbi8qKlxuICogXCJDb25zdGFudC10aW1lXCIgcHJpdmF0ZSBrZXkgZ2VuZXJhdGlvbiB1dGlsaXR5LlxuICogQ2FuIHRha2UgKG4gKyBuLzIpIG9yIG1vcmUgYnl0ZXMgb2YgdW5pZm9ybSBpbnB1dCBlLmcuIGZyb20gQ1NQUk5HIG9yIEtERlxuICogYW5kIGNvbnZlcnQgdGhlbSBpbnRvIHByaXZhdGUgc2NhbGFyLCB3aXRoIHRoZSBtb2R1bG8gYmlhcyBiZWluZyBuZWdsaWdpYmxlLlxuICogTmVlZHMgYXQgbGVhc3QgNDggYnl0ZXMgb2YgaW5wdXQgZm9yIDMyLWJ5dGUgcHJpdmF0ZSBrZXkuXG4gKiBodHRwczovL3Jlc2VhcmNoLmt1ZGVsc2tpc2VjdXJpdHkuY29tLzIwMjAvMDcvMjgvdGhlLWRlZmluaXRpdmUtZ3VpZGUtdG8tbW9kdWxvLWJpYXMtYW5kLWhvdy10by1hdm9pZC1pdC9cbiAqIEZJUFMgMTg2LTUsIEEuMiBodHRwczovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2RldGFpbC9maXBzLzE4Ni81L2ZpbmFsXG4gKiBSRkMgOTM4MCwgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkzODAjc2VjdGlvbi01XG4gKiBAcGFyYW0gaGFzaCBoYXNoIG91dHB1dCBmcm9tIFNIQTMgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gZ3JvdXBPcmRlciBzaXplIG9mIHN1Ymdyb3VwIC0gKGUuZy4gc2VjcDI1NmsxLkNVUlZFLm4pXG4gKiBAcGFyYW0gaXNMRSBpbnRlcnByZXQgaGFzaCBieXRlcyBhcyBMRSBudW1cbiAqIEByZXR1cm5zIHZhbGlkIHByaXZhdGUgc2NhbGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBIYXNoVG9GaWVsZChrZXksIGZpZWxkT3JkZXIsIGlzTEUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxlbiA9IGtleS5sZW5ndGg7XG4gICAgY29uc3QgZmllbGRMZW4gPSBnZXRGaWVsZEJ5dGVzTGVuZ3RoKGZpZWxkT3JkZXIpO1xuICAgIGNvbnN0IG1pbkxlbiA9IGdldE1pbkhhc2hMZW5ndGgoZmllbGRPcmRlcik7XG4gICAgLy8gTm8gc21hbGwgbnVtYmVyczogbmVlZCB0byB1bmRlcnN0YW5kIGJpYXMgc3RvcnkuIE5vIGh1Z2UgbnVtYmVyczogZWFzaWVyIHRvIGRldGVjdCBKUyB0aW1pbmdzLlxuICAgIGlmIChsZW4gPCAxNiB8fCBsZW4gPCBtaW5MZW4gfHwgbGVuID4gMTAyNClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke21pbkxlbn0tMTAyNCBieXRlcyBvZiBpbnB1dCwgZ290ICR7bGVufWApO1xuICAgIGNvbnN0IG51bSA9IGlzTEUgPyBieXRlc1RvTnVtYmVyQkUoa2V5KSA6IGJ5dGVzVG9OdW1iZXJMRShrZXkpO1xuICAgIC8vIGBtb2QoeCwgMTEpYCBjYW4gc29tZXRpbWVzIHByb2R1Y2UgMC4gYG1vZCh4LCAxMCkgKyAxYCBpcyB0aGUgc2FtZSwgYnV0IG5vIDBcbiAgICBjb25zdCByZWR1Y2VkID0gbW9kKG51bSwgZmllbGRPcmRlciAtIF8xbikgKyBfMW47XG4gICAgcmV0dXJuIGlzTEUgPyBudW1iZXJUb0J5dGVzTEUocmVkdWNlZCwgZmllbGRMZW4pIDogbnVtYmVyVG9CeXRlc0JFKHJlZHVjZWQsIGZpZWxkTGVuKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1vZHVsYXIuanMubWFwIiwiLyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL1xuLy8gMTAwIGxpbmVzIG9mIGNvZGUgaW4gdGhlIGZpbGUgYXJlIGR1cGxpY2F0ZWQgZnJvbSBub2JsZS1oYXNoZXMgKHV0aWxzKS5cbi8vIFRoaXMgaXMgT0s6IGBhYnN0cmFjdGAgZGlyZWN0b3J5IGRvZXMgbm90IHVzZSBub2JsZS1oYXNoZXMuXG4vLyBVc2VyIG1heSBvcHQtaW4gaW50byB1c2luZyBkaWZmZXJlbnQgaGFzaGluZyBsaWJyYXJ5LiBUaGlzIHdheSwgbm9ibGUtaGFzaGVzXG4vLyB3b24ndCBiZSBpbmNsdWRlZCBpbnRvIHRoZWlyIGJ1bmRsZS5cbmNvbnN0IF8wbiA9IEJpZ0ludCgwKTtcbmNvbnN0IF8xbiA9IEJpZ0ludCgxKTtcbmNvbnN0IF8ybiA9IEJpZ0ludCgyKTtcbmV4cG9ydCBmdW5jdGlvbiBpc0J5dGVzKGEpIHtcbiAgICByZXR1cm4gKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8XG4gICAgICAgIChhICE9IG51bGwgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmIGEuY29uc3RydWN0b3IubmFtZSA9PT0gJ1VpbnQ4QXJyYXknKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWJ5dGVzKGl0ZW0pIHtcbiAgICBpZiAoIWlzQnl0ZXMoaXRlbSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVWludDhBcnJheSBleHBlY3RlZCcpO1xufVxuLy8gQXJyYXkgd2hlcmUgaW5kZXggMHhmMCAoMjQwKSBpcyBtYXBwZWQgdG8gc3RyaW5nICdmMCdcbmNvbnN0IGhleGVzID0gLyogQF9fUFVSRV9fICovIEFycmF5LmZyb20oeyBsZW5ndGg6IDI1NiB9LCAoXywgaSkgPT4gaS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSk7XG4vKipcbiAqIEBleGFtcGxlIGJ5dGVzVG9IZXgoVWludDhBcnJheS5mcm9tKFsweGNhLCAweGZlLCAweDAxLCAweDIzXSkpIC8vICdjYWZlMDEyMydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9IZXgoYnl0ZXMpIHtcbiAgICBhYnl0ZXMoYnl0ZXMpO1xuICAgIC8vIHByZS1jYWNoaW5nIGltcHJvdmVzIHRoZSBzcGVlZCA2eFxuICAgIGxldCBoZXggPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGhleCArPSBoZXhlc1tieXRlc1tpXV07XG4gICAgfVxuICAgIHJldHVybiBoZXg7XG59XG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9IZXhVbnBhZGRlZChudW0pIHtcbiAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpO1xuICAgIHJldHVybiBoZXgubGVuZ3RoICYgMSA/IGAwJHtoZXh9YCA6IGhleDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb051bWJlcihoZXgpIHtcbiAgICBpZiAodHlwZW9mIGhleCAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290ICcgKyB0eXBlb2YgaGV4KTtcbiAgICAvLyBCaWcgRW5kaWFuXG4gICAgcmV0dXJuIEJpZ0ludChoZXggPT09ICcnID8gJzAnIDogYDB4JHtoZXh9YCk7XG59XG4vLyBXZSB1c2Ugb3B0aW1pemVkIHRlY2huaXF1ZSB0byBjb252ZXJ0IGhleCBzdHJpbmcgdG8gYnl0ZSBhcnJheVxuY29uc3QgYXNjaWlzID0geyBfMDogNDgsIF85OiA1NywgX0E6IDY1LCBfRjogNzAsIF9hOiA5NywgX2Y6IDEwMiB9O1xuZnVuY3Rpb24gYXNjaWlUb0Jhc2UxNihjaGFyKSB7XG4gICAgaWYgKGNoYXIgPj0gYXNjaWlzLl8wICYmIGNoYXIgPD0gYXNjaWlzLl85KVxuICAgICAgICByZXR1cm4gY2hhciAtIGFzY2lpcy5fMDtcbiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX0EgJiYgY2hhciA8PSBhc2NpaXMuX0YpXG4gICAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fQSAtIDEwKTtcbiAgICBpZiAoY2hhciA+PSBhc2NpaXMuX2EgJiYgY2hhciA8PSBhc2NpaXMuX2YpXG4gICAgICAgIHJldHVybiBjaGFyIC0gKGFzY2lpcy5fYSAtIDEwKTtcbiAgICByZXR1cm47XG59XG4vKipcbiAqIEBleGFtcGxlIGhleFRvQnl0ZXMoJ2NhZmUwMTIzJykgLy8gVWludDhBcnJheS5mcm9tKFsweGNhLCAweGZlLCAweDAxLCAweDIzXSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvQnl0ZXMoaGV4KSB7XG4gICAgaWYgKHR5cGVvZiBoZXggIT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCAnICsgdHlwZW9mIGhleCk7XG4gICAgY29uc3QgaGwgPSBoZXgubGVuZ3RoO1xuICAgIGNvbnN0IGFsID0gaGwgLyAyO1xuICAgIGlmIChobCAlIDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFkZGVkIGhleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCB1bnBhZGRlZCBoZXggb2YgbGVuZ3RoICcgKyBobCk7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShhbCk7XG4gICAgZm9yIChsZXQgYWkgPSAwLCBoaSA9IDA7IGFpIDwgYWw7IGFpKyssIGhpICs9IDIpIHtcbiAgICAgICAgY29uc3QgbjEgPSBhc2NpaVRvQmFzZTE2KGhleC5jaGFyQ29kZUF0KGhpKSk7XG4gICAgICAgIGNvbnN0IG4yID0gYXNjaWlUb0Jhc2UxNihoZXguY2hhckNvZGVBdChoaSArIDEpKTtcbiAgICAgICAgaWYgKG4xID09PSB1bmRlZmluZWQgfHwgbjIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IGhleFtoaV0gKyBoZXhbaGkgKyAxXTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGV4IHN0cmluZyBleHBlY3RlZCwgZ290IG5vbi1oZXggY2hhcmFjdGVyIFwiJyArIGNoYXIgKyAnXCIgYXQgaW5kZXggJyArIGhpKTtcbiAgICAgICAgfVxuICAgICAgICBhcnJheVthaV0gPSBuMSAqIDE2ICsgbjI7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cbi8vIEJFOiBCaWcgRW5kaWFuLCBMRTogTGl0dGxlIEVuZGlhblxuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9OdW1iZXJCRShieXRlcykge1xuICAgIHJldHVybiBoZXhUb051bWJlcihieXRlc1RvSGV4KGJ5dGVzKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYnl0ZXNUb051bWJlckxFKGJ5dGVzKSB7XG4gICAgYWJ5dGVzKGJ5dGVzKTtcbiAgICByZXR1cm4gaGV4VG9OdW1iZXIoYnl0ZXNUb0hleChVaW50OEFycmF5LmZyb20oYnl0ZXMpLnJldmVyc2UoKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlclRvQnl0ZXNCRShuLCBsZW4pIHtcbiAgICByZXR1cm4gaGV4VG9CeXRlcyhuLnRvU3RyaW5nKDE2KS5wYWRTdGFydChsZW4gKiAyLCAnMCcpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJUb0J5dGVzTEUobiwgbGVuKSB7XG4gICAgcmV0dXJuIG51bWJlclRvQnl0ZXNCRShuLCBsZW4pLnJldmVyc2UoKTtcbn1cbi8vIFVucGFkZGVkLCByYXJlbHkgdXNlZFxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlclRvVmFyQnl0ZXNCRShuKSB7XG4gICAgcmV0dXJuIGhleFRvQnl0ZXMobnVtYmVyVG9IZXhVbnBhZGRlZChuKSk7XG59XG4vKipcbiAqIFRha2VzIGhleCBzdHJpbmcgb3IgVWludDhBcnJheSwgY29udmVydHMgdG8gVWludDhBcnJheS5cbiAqIFZhbGlkYXRlcyBvdXRwdXQgbGVuZ3RoLlxuICogV2lsbCB0aHJvdyBlcnJvciBmb3Igb3RoZXIgdHlwZXMuXG4gKiBAcGFyYW0gdGl0bGUgZGVzY3JpcHRpdmUgdGl0bGUgZm9yIGFuIGVycm9yIGUuZy4gJ3ByaXZhdGUga2V5J1xuICogQHBhcmFtIGhleCBoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXlcbiAqIEBwYXJhbSBleHBlY3RlZExlbmd0aCBvcHRpb25hbCwgd2lsbCBjb21wYXJlIHRvIHJlc3VsdCBhcnJheSdzIGxlbmd0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUJ5dGVzKHRpdGxlLCBoZXgsIGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgbGV0IHJlcztcbiAgICBpZiAodHlwZW9mIGhleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcyA9IGhleFRvQnl0ZXMoaGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RpdGxlfSBtdXN0IGJlIHZhbGlkIGhleCBzdHJpbmcsIGdvdCBcIiR7aGV4fVwiLiBDYXVzZTogJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQnl0ZXMoaGV4KSkge1xuICAgICAgICAvLyBVaW50OEFycmF5LmZyb20oKSBpbnN0ZWFkIG9mIGhhc2guc2xpY2UoKSBiZWNhdXNlIG5vZGUuanMgQnVmZmVyXG4gICAgICAgIC8vIGlzIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXksIGFuZCBpdHMgc2xpY2UoKSBjcmVhdGVzICoqbXV0YWJsZSoqIGNvcHlcbiAgICAgICAgcmVzID0gVWludDhBcnJheS5mcm9tKGhleCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGl0bGV9IG11c3QgYmUgaGV4IHN0cmluZyBvciBVaW50OEFycmF5YCk7XG4gICAgfVxuICAgIGNvbnN0IGxlbiA9IHJlcy5sZW5ndGg7XG4gICAgaWYgKHR5cGVvZiBleHBlY3RlZExlbmd0aCA9PT0gJ251bWJlcicgJiYgbGVuICE9PSBleHBlY3RlZExlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RpdGxlfSBleHBlY3RlZCAke2V4cGVjdGVkTGVuZ3RofSBieXRlcywgZ290ICR7bGVufWApO1xuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIENvcGllcyBzZXZlcmFsIFVpbnQ4QXJyYXlzIGludG8gb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0Qnl0ZXMoLi4uYXJyYXlzKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tpXTtcbiAgICAgICAgYWJ5dGVzKGEpO1xuICAgICAgICBzdW0gKz0gYS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHN1bSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIHBhZCA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tpXTtcbiAgICAgICAgcmVzLnNldChhLCBwYWQpO1xuICAgICAgICBwYWQgKz0gYS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vLyBDb21wYXJlcyAyIHU4YS1zIGluIGtpbmRhIGNvbnN0YW50IHRpbWVcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbEJ5dGVzKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0IGRpZmYgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKylcbiAgICAgICAgZGlmZiB8PSBhW2ldIF4gYltpXTtcbiAgICByZXR1cm4gZGlmZiA9PT0gMDtcbn1cbi8qKlxuICogQGV4YW1wbGUgdXRmOFRvQnl0ZXMoJ2FiYycpIC8vIG5ldyBVaW50OEFycmF5KFs5NywgOTgsIDk5XSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cikge1xuICAgIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1dGY4VG9CeXRlcyBleHBlY3RlZCBzdHJpbmcsIGdvdCAke3R5cGVvZiBzdHJ9YCk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpKTsgLy8gaHR0cHM6Ly9idWd6aWwubGEvMTY4MTgwOVxufVxuLy8gQml0IG9wZXJhdGlvbnNcbi8qKlxuICogQ2FsY3VsYXRlcyBhbW91bnQgb2YgYml0cyBpbiBhIGJpZ2ludC5cbiAqIFNhbWUgYXMgYG4udG9TdHJpbmcoMikubGVuZ3RoYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYml0TGVuKG4pIHtcbiAgICBsZXQgbGVuO1xuICAgIGZvciAobGVuID0gMDsgbiA+IF8wbjsgbiA+Pj0gXzFuLCBsZW4gKz0gMSlcbiAgICAgICAgO1xuICAgIHJldHVybiBsZW47XG59XG4vKipcbiAqIEdldHMgc2luZ2xlIGJpdCBhdCBwb3NpdGlvbi5cbiAqIE5PVEU6IGZpcnN0IGJpdCBwb3NpdGlvbiBpcyAwIChzYW1lIGFzIGFycmF5cylcbiAqIFNhbWUgYXMgYCEhK0FycmF5LmZyb20obi50b1N0cmluZygyKSkucmV2ZXJzZSgpW3Bvc11gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaXRHZXQobiwgcG9zKSB7XG4gICAgcmV0dXJuIChuID4+IEJpZ0ludChwb3MpKSAmIF8xbjtcbn1cbi8qKlxuICogU2V0cyBzaW5nbGUgYml0IGF0IHBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYml0U2V0KG4sIHBvcywgdmFsdWUpIHtcbiAgICByZXR1cm4gbiB8ICgodmFsdWUgPyBfMW4gOiBfMG4pIDw8IEJpZ0ludChwb3MpKTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIG1hc2sgZm9yIE4gYml0cy4gTm90IHVzaW5nICoqIG9wZXJhdG9yIHdpdGggYmlnaW50cyBiZWNhdXNlIG9mIG9sZCBlbmdpbmVzLlxuICogU2FtZSBhcyBCaWdJbnQoYDBiJHtBcnJheShpKS5maWxsKCcxJykuam9pbignJyl9YClcbiAqL1xuZXhwb3J0IGNvbnN0IGJpdE1hc2sgPSAobikgPT4gKF8ybiA8PCBCaWdJbnQobiAtIDEpKSAtIF8xbjtcbi8vIERSQkdcbmNvbnN0IHU4biA9IChkYXRhKSA9PiBuZXcgVWludDhBcnJheShkYXRhKTsgLy8gY3JlYXRlcyBVaW50OEFycmF5XG5jb25zdCB1OGZyID0gKGFycikgPT4gVWludDhBcnJheS5mcm9tKGFycik7IC8vIGFub3RoZXIgc2hvcnRjdXRcbi8qKlxuICogTWluaW1hbCBITUFDLURSQkcgZnJvbSBOSVNUIDgwMC05MCBmb3IgUkZDNjk3OSBzaWdzLlxuICogQHJldHVybnMgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgRFJCRyB1bnRpbCAybmQgYXJnIHJldHVybnMgc29tZXRoaW5nIG1lYW5pbmdmdWxcbiAqIEBleGFtcGxlXG4gKiAgIGNvbnN0IGRyYmcgPSBjcmVhdGVIbWFjRFJCRzxLZXk+KDMyLCAzMiwgaG1hYyk7XG4gKiAgIGRyYmcoc2VlZCwgYnl0ZXNUb0tleSk7IC8vIGJ5dGVzVG9LZXkgbXVzdCByZXR1cm4gS2V5IG9yIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG1hY0RyYmcoaGFzaExlbiwgcUJ5dGVMZW4sIGhtYWNGbikge1xuICAgIGlmICh0eXBlb2YgaGFzaExlbiAhPT0gJ251bWJlcicgfHwgaGFzaExlbiA8IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaExlbiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgaWYgKHR5cGVvZiBxQnl0ZUxlbiAhPT0gJ251bWJlcicgfHwgcUJ5dGVMZW4gPCAyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3FCeXRlTGVuIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICBpZiAodHlwZW9mIGhtYWNGbiAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdobWFjRm4gbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgLy8gU3RlcCBCLCBTdGVwIEM6IHNldCBoYXNoTGVuIHRvIDgqY2VpbChobGVuLzgpXG4gICAgbGV0IHYgPSB1OG4oaGFzaExlbik7IC8vIE1pbmltYWwgbm9uLWZ1bGwtc3BlYyBITUFDLURSQkcgZnJvbSBOSVNUIDgwMC05MCBmb3IgUkZDNjk3OSBzaWdzLlxuICAgIGxldCBrID0gdThuKGhhc2hMZW4pOyAvLyBTdGVwcyBCIGFuZCBDIG9mIFJGQzY5NzkgMy4yOiBzZXQgaGFzaExlbiwgaW4gb3VyIGNhc2UgYWx3YXlzIHNhbWVcbiAgICBsZXQgaSA9IDA7IC8vIEl0ZXJhdGlvbnMgY291bnRlciwgd2lsbCB0aHJvdyB3aGVuIG92ZXIgMTAwMFxuICAgIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgICAgICB2LmZpbGwoMSk7XG4gICAgICAgIGsuZmlsbCgwKTtcbiAgICAgICAgaSA9IDA7XG4gICAgfTtcbiAgICBjb25zdCBoID0gKC4uLmIpID0+IGhtYWNGbihrLCB2LCAuLi5iKTsgLy8gaG1hYyhrKSh2LCAuLi52YWx1ZXMpXG4gICAgY29uc3QgcmVzZWVkID0gKHNlZWQgPSB1OG4oKSkgPT4ge1xuICAgICAgICAvLyBITUFDLURSQkcgcmVzZWVkKCkgZnVuY3Rpb24uIFN0ZXBzIEQtR1xuICAgICAgICBrID0gaCh1OGZyKFsweDAwXSksIHNlZWQpOyAvLyBrID0gaG1hYyhrIHx8IHYgfHwgMHgwMCB8fCBzZWVkKVxuICAgICAgICB2ID0gaCgpOyAvLyB2ID0gaG1hYyhrIHx8IHYpXG4gICAgICAgIGlmIChzZWVkLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgayA9IGgodThmcihbMHgwMV0pLCBzZWVkKTsgLy8gayA9IGhtYWMoayB8fCB2IHx8IDB4MDEgfHwgc2VlZClcbiAgICAgICAgdiA9IGgoKTsgLy8gdiA9IGhtYWMoayB8fCB2KVxuICAgIH07XG4gICAgY29uc3QgZ2VuID0gKCkgPT4ge1xuICAgICAgICAvLyBITUFDLURSQkcgZ2VuZXJhdGUoKSBmdW5jdGlvblxuICAgICAgICBpZiAoaSsrID49IDEwMDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RyYmc6IHRyaWVkIDEwMDAgdmFsdWVzJyk7XG4gICAgICAgIGxldCBsZW4gPSAwO1xuICAgICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgICAgd2hpbGUgKGxlbiA8IHFCeXRlTGVuKSB7XG4gICAgICAgICAgICB2ID0gaCgpO1xuICAgICAgICAgICAgY29uc3Qgc2wgPSB2LnNsaWNlKCk7XG4gICAgICAgICAgICBvdXQucHVzaChzbCk7XG4gICAgICAgICAgICBsZW4gKz0gdi5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmNhdEJ5dGVzKC4uLm91dCk7XG4gICAgfTtcbiAgICBjb25zdCBnZW5VbnRpbCA9IChzZWVkLCBwcmVkKSA9PiB7XG4gICAgICAgIHJlc2V0KCk7XG4gICAgICAgIHJlc2VlZChzZWVkKTsgLy8gU3RlcHMgRC1HXG4gICAgICAgIGxldCByZXMgPSB1bmRlZmluZWQ7IC8vIFN0ZXAgSDogZ3JpbmQgdW50aWwgayBpcyBpbiBbMS4ubi0xXVxuICAgICAgICB3aGlsZSAoIShyZXMgPSBwcmVkKGdlbigpKSkpXG4gICAgICAgICAgICByZXNlZWQoKTtcbiAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIHJldHVybiBnZW5VbnRpbDtcbn1cbi8vIFZhbGlkYXRpbmcgY3VydmVzIGFuZCBmaWVsZHNcbmNvbnN0IHZhbGlkYXRvckZucyA9IHtcbiAgICBiaWdpbnQ6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdiaWdpbnQnLFxuICAgIGZ1bmN0aW9uOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nLFxuICAgIGJvb2xlYW46ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyxcbiAgICBzdHJpbmc6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnLFxuICAgIHN0cmluZ09yVWludDhBcnJheTogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgaXNCeXRlcyh2YWwpLFxuICAgIGlzU2FmZUludGVnZXI6ICh2YWwpID0+IE51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbCksXG4gICAgYXJyYXk6ICh2YWwpID0+IEFycmF5LmlzQXJyYXkodmFsKSxcbiAgICBmaWVsZDogKHZhbCwgb2JqZWN0KSA9PiBvYmplY3QuRnAuaXNWYWxpZCh2YWwpLFxuICAgIGhhc2g6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIodmFsLm91dHB1dExlbiksXG59O1xuLy8gdHlwZSBSZWNvcmQ8SyBleHRlbmRzIHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgVD4gPSB7IFtQIGluIEtdOiBUOyB9XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVPYmplY3Qob2JqZWN0LCB2YWxpZGF0b3JzLCBvcHRWYWxpZGF0b3JzID0ge30pIHtcbiAgICBjb25zdCBjaGVja0ZpZWxkID0gKGZpZWxkTmFtZSwgdHlwZSwgaXNPcHRpb25hbCkgPT4ge1xuICAgICAgICBjb25zdCBjaGVja1ZhbCA9IHZhbGlkYXRvckZuc1t0eXBlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja1ZhbCAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0b3IgXCIke3R5cGV9XCIsIGV4cGVjdGVkIGZ1bmN0aW9uYCk7XG4gICAgICAgIGNvbnN0IHZhbCA9IG9iamVjdFtmaWVsZE5hbWVdO1xuICAgICAgICBpZiAoaXNPcHRpb25hbCAmJiB2YWwgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFjaGVja1ZhbCh2YWwsIG9iamVjdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbSAke1N0cmluZyhmaWVsZE5hbWUpfT0ke3ZhbH0gKCR7dHlwZW9mIHZhbH0pLCBleHBlY3RlZCAke3R5cGV9YCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZvciAoY29uc3QgW2ZpZWxkTmFtZSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXModmFsaWRhdG9ycykpXG4gICAgICAgIGNoZWNrRmllbGQoZmllbGROYW1lLCB0eXBlLCBmYWxzZSk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhvcHRWYWxpZGF0b3JzKSlcbiAgICAgICAgY2hlY2tGaWVsZChmaWVsZE5hbWUsIHR5cGUsIHRydWUpO1xuICAgIHJldHVybiBvYmplY3Q7XG59XG4vLyB2YWxpZGF0ZSB0eXBlIHRlc3RzXG4vLyBjb25zdCBvOiB7IGE6IG51bWJlcjsgYjogbnVtYmVyOyBjOiBudW1iZXIgfSA9IHsgYTogMSwgYjogNSwgYzogNiB9O1xuLy8gY29uc3QgejAgPSB2YWxpZGF0ZU9iamVjdChvLCB7IGE6ICdpc1NhZmVJbnRlZ2VyJyB9LCB7IGM6ICdiaWdpbnQnIH0pOyAvLyBPayFcbi8vIC8vIFNob3VsZCBmYWlsIHR5cGUtY2hlY2tcbi8vIGNvbnN0IHoxID0gdmFsaWRhdGVPYmplY3QobywgeyBhOiAndG1wJyB9LCB7IGM6ICd6eicgfSk7XG4vLyBjb25zdCB6MiA9IHZhbGlkYXRlT2JqZWN0KG8sIHsgYTogJ2lzU2FmZUludGVnZXInIH0sIHsgYzogJ3p6JyB9KTtcbi8vIGNvbnN0IHozID0gdmFsaWRhdGVPYmplY3QobywgeyB0ZXN0OiAnYm9vbGVhbicsIHo6ICdidWcnIH0pO1xuLy8gY29uc3QgejQgPSB2YWxpZGF0ZU9iamVjdChvLCB7IGE6ICdib29sZWFuJywgejogJ2J1ZycgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLCIvKiEgbm9ibGUtY3VydmVzIC0gTUlUIExpY2Vuc2UgKGMpIDIwMjIgUGF1bCBNaWxsZXIgKHBhdWxtaWxsci5jb20pICovXG4vLyBTaG9ydCBXZWllcnN0cmFzcyBjdXJ2ZS4gVGhlIGZvcm11bGEgaXM6IHnCsiA9IHjCsyArIGF4ICsgYlxuaW1wb3J0ICogYXMgbW9kIGZyb20gJy4vbW9kdWxhci5qcyc7XG5pbXBvcnQgKiBhcyB1dCBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7IGVuc3VyZUJ5dGVzIH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgeyB3TkFGLCB2YWxpZGF0ZUJhc2ljIH0gZnJvbSAnLi9jdXJ2ZS5qcyc7XG5mdW5jdGlvbiB2YWxpZGF0ZVBvaW50T3B0cyhjdXJ2ZSkge1xuICAgIGNvbnN0IG9wdHMgPSB2YWxpZGF0ZUJhc2ljKGN1cnZlKTtcbiAgICB1dC52YWxpZGF0ZU9iamVjdChvcHRzLCB7XG4gICAgICAgIGE6ICdmaWVsZCcsXG4gICAgICAgIGI6ICdmaWVsZCcsXG4gICAgfSwge1xuICAgICAgICBhbGxvd2VkUHJpdmF0ZUtleUxlbmd0aHM6ICdhcnJheScsXG4gICAgICAgIHdyYXBQcml2YXRlS2V5OiAnYm9vbGVhbicsXG4gICAgICAgIGlzVG9yc2lvbkZyZWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGNsZWFyQ29mYWN0b3I6ICdmdW5jdGlvbicsXG4gICAgICAgIGFsbG93SW5maW5pdHlQb2ludDogJ2Jvb2xlYW4nLFxuICAgICAgICBmcm9tQnl0ZXM6ICdmdW5jdGlvbicsXG4gICAgICAgIHRvQnl0ZXM6ICdmdW5jdGlvbicsXG4gICAgfSk7XG4gICAgY29uc3QgeyBlbmRvLCBGcCwgYSB9ID0gb3B0cztcbiAgICBpZiAoZW5kbykge1xuICAgICAgICBpZiAoIUZwLmVxbChhLCBGcC5aRVJPKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmRvbW9ycGhpc20gY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgS29ibGl0eiBjdXJ2ZXMgdGhhdCBoYXZlIGE9MCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5kbyAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgIHR5cGVvZiBlbmRvLmJldGEgIT09ICdiaWdpbnQnIHx8XG4gICAgICAgICAgICB0eXBlb2YgZW5kby5zcGxpdFNjYWxhciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlbmRvbW9ycGhpc20gd2l0aCBiZXRhOiBiaWdpbnQgYW5kIHNwbGl0U2NhbGFyOiBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ub3B0cyB9KTtcbn1cbi8vIEFTTi4xIERFUiBlbmNvZGluZyB1dGlsaXRpZXNcbmNvbnN0IHsgYnl0ZXNUb051bWJlckJFOiBiMm4sIGhleFRvQnl0ZXM6IGgyYiB9ID0gdXQ7XG5leHBvcnQgY29uc3QgREVSID0ge1xuICAgIC8vIGFzbi4xIERFUiBlbmNvZGluZyB1dGlsc1xuICAgIEVycjogY2xhc3MgREVSRXJyIGV4dGVuZHMgRXJyb3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcihtID0gJycpIHtcbiAgICAgICAgICAgIHN1cGVyKG0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBfcGFyc2VJbnQoZGF0YSkge1xuICAgICAgICBjb25zdCB7IEVycjogRSB9ID0gREVSO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCAyIHx8IGRhdGFbMF0gIT09IDB4MDIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRSgnSW52YWxpZCBzaWduYXR1cmUgaW50ZWdlciB0YWcnKTtcbiAgICAgICAgY29uc3QgbGVuID0gZGF0YVsxXTtcbiAgICAgICAgY29uc3QgcmVzID0gZGF0YS5zdWJhcnJheSgyLCBsZW4gKyAyKTtcbiAgICAgICAgaWYgKCFsZW4gfHwgcmVzLmxlbmd0aCAhPT0gbGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEUoJ0ludmFsaWQgc2lnbmF0dXJlIGludGVnZXI6IHdyb25nIGxlbmd0aCcpO1xuICAgICAgICAvLyBodHRwczovL2NyeXB0by5zdGFja2V4Y2hhbmdlLmNvbS9hLzU3NzM0IExlZnRtb3N0IGJpdCBvZiBmaXJzdCBieXRlIGlzICduZWdhdGl2ZScgZmxhZyxcbiAgICAgICAgLy8gc2luY2Ugd2UgYWx3YXlzIHVzZSBwb3NpdGl2ZSBpbnRlZ2VycyBoZXJlLiBJdCBtdXN0IGFsd2F5cyBiZSBlbXB0eTpcbiAgICAgICAgLy8gLSBhZGQgemVybyBieXRlIGlmIGV4aXN0c1xuICAgICAgICAvLyAtIGlmIG5leHQgYnl0ZSBkb2Vzbid0IGhhdmUgYSBmbGFnLCBsZWFkaW5nIHplcm8gaXMgbm90IGFsbG93ZWQgKG1pbmltYWwgZW5jb2RpbmcpXG4gICAgICAgIGlmIChyZXNbMF0gJiAwYjEwMDAwMDAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEUoJ0ludmFsaWQgc2lnbmF0dXJlIGludGVnZXI6IG5lZ2F0aXZlJyk7XG4gICAgICAgIGlmIChyZXNbMF0gPT09IDB4MDAgJiYgIShyZXNbMV0gJiAwYjEwMDAwMDAwKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFKCdJbnZhbGlkIHNpZ25hdHVyZSBpbnRlZ2VyOiB1bm5lY2Vzc2FyeSBsZWFkaW5nIHplcm8nKTtcbiAgICAgICAgcmV0dXJuIHsgZDogYjJuKHJlcyksIGw6IGRhdGEuc3ViYXJyYXkobGVuICsgMikgfTsgLy8gZCBpcyBkYXRhLCBsIGlzIGxlZnRcbiAgICB9LFxuICAgIHRvU2lnKGhleCkge1xuICAgICAgICAvLyBwYXJzZSBERVIgc2lnbmF0dXJlXG4gICAgICAgIGNvbnN0IHsgRXJyOiBFIH0gPSBERVI7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgaGV4ID09PSAnc3RyaW5nJyA/IGgyYihoZXgpIDogaGV4O1xuICAgICAgICB1dC5hYnl0ZXMoZGF0YSk7XG4gICAgICAgIGxldCBsID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGlmIChsIDwgMiB8fCBkYXRhWzBdICE9IDB4MzApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRSgnSW52YWxpZCBzaWduYXR1cmUgdGFnJyk7XG4gICAgICAgIGlmIChkYXRhWzFdICE9PSBsIC0gMilcbiAgICAgICAgICAgIHRocm93IG5ldyBFKCdJbnZhbGlkIHNpZ25hdHVyZTogaW5jb3JyZWN0IGxlbmd0aCcpO1xuICAgICAgICBjb25zdCB7IGQ6IHIsIGw6IHNCeXRlcyB9ID0gREVSLl9wYXJzZUludChkYXRhLnN1YmFycmF5KDIpKTtcbiAgICAgICAgY29uc3QgeyBkOiBzLCBsOiByQnl0ZXNMZWZ0IH0gPSBERVIuX3BhcnNlSW50KHNCeXRlcyk7XG4gICAgICAgIGlmIChyQnl0ZXNMZWZ0Lmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFKCdJbnZhbGlkIHNpZ25hdHVyZTogbGVmdCBieXRlcyBhZnRlciBwYXJzaW5nJyk7XG4gICAgICAgIHJldHVybiB7IHIsIHMgfTtcbiAgICB9LFxuICAgIGhleEZyb21TaWcoc2lnKSB7XG4gICAgICAgIC8vIEFkZCBsZWFkaW5nIHplcm8gaWYgZmlyc3QgYnl0ZSBoYXMgbmVnYXRpdmUgYml0IGVuYWJsZWQuIE1vcmUgZGV0YWlscyBpbiAnX3BhcnNlSW50J1xuICAgICAgICBjb25zdCBzbGljZSA9IChzKSA9PiAoTnVtYmVyLnBhcnNlSW50KHNbMF0sIDE2KSAmIDBiMTAwMCA/ICcwMCcgKyBzIDogcyk7XG4gICAgICAgIGNvbnN0IGggPSAobnVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgcmV0dXJuIGhleC5sZW5ndGggJiAxID8gYDAke2hleH1gIDogaGV4O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzID0gc2xpY2UoaChzaWcucykpO1xuICAgICAgICBjb25zdCByID0gc2xpY2UoaChzaWcucikpO1xuICAgICAgICBjb25zdCBzaGwgPSBzLmxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IHJobCA9IHIubGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3Qgc2wgPSBoKHNobCk7XG4gICAgICAgIGNvbnN0IHJsID0gaChyaGwpO1xuICAgICAgICByZXR1cm4gYDMwJHtoKHJobCArIHNobCArIDQpfTAyJHtybH0ke3J9MDIke3NsfSR7c31gO1xuICAgIH0sXG59O1xuLy8gQmUgZnJpZW5kbHkgdG8gYmFkIEVDTUFTY3JpcHQgcGFyc2VycyBieSBub3QgdXNpbmcgYmlnaW50IGxpdGVyYWxzXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IF8wbiA9IEJpZ0ludCgwKSwgXzFuID0gQmlnSW50KDEpLCBfMm4gPSBCaWdJbnQoMiksIF8zbiA9IEJpZ0ludCgzKSwgXzRuID0gQmlnSW50KDQpO1xuZXhwb3J0IGZ1bmN0aW9uIHdlaWVyc3RyYXNzUG9pbnRzKG9wdHMpIHtcbiAgICBjb25zdCBDVVJWRSA9IHZhbGlkYXRlUG9pbnRPcHRzKG9wdHMpO1xuICAgIGNvbnN0IHsgRnAgfSA9IENVUlZFOyAvLyBBbGwgY3VydmVzIGhhcyBzYW1lIGZpZWxkIC8gZ3JvdXAgbGVuZ3RoIGFzIGZvciBub3csIGJ1dCB0aGV5IGNhbiBkaWZmZXJcbiAgICBjb25zdCB0b0J5dGVzID0gQ1VSVkUudG9CeXRlcyB8fFxuICAgICAgICAoKF9jLCBwb2ludCwgX2lzQ29tcHJlc3NlZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IHBvaW50LnRvQWZmaW5lKCk7XG4gICAgICAgICAgICByZXR1cm4gdXQuY29uY2F0Qnl0ZXMoVWludDhBcnJheS5mcm9tKFsweDA0XSksIEZwLnRvQnl0ZXMoYS54KSwgRnAudG9CeXRlcyhhLnkpKTtcbiAgICAgICAgfSk7XG4gICAgY29uc3QgZnJvbUJ5dGVzID0gQ1VSVkUuZnJvbUJ5dGVzIHx8XG4gICAgICAgICgoYnl0ZXMpID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnN0IGhlYWQgPSBieXRlc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHRhaWwgPSBieXRlcy5zdWJhcnJheSgxKTtcbiAgICAgICAgICAgIC8vIGlmIChoZWFkICE9PSAweDA0KSB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgbm9uLWNvbXByZXNzZWQgZW5jb2RpbmcgaXMgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICBjb25zdCB4ID0gRnAuZnJvbUJ5dGVzKHRhaWwuc3ViYXJyYXkoMCwgRnAuQllURVMpKTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBGcC5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcC5CWVRFUywgMiAqIEZwLkJZVEVTKSk7XG4gICAgICAgICAgICByZXR1cm4geyB4LCB5IH07XG4gICAgICAgIH0pO1xuICAgIC8qKlxuICAgICAqIHnCsiA9IHjCsyArIGF4ICsgYjogU2hvcnQgd2VpZXJzdHJhc3MgY3VydmUgZm9ybXVsYVxuICAgICAqIEByZXR1cm5zIHnCslxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdlaWVyc3RyYXNzRXF1YXRpb24oeCkge1xuICAgICAgICBjb25zdCB7IGEsIGIgfSA9IENVUlZFO1xuICAgICAgICBjb25zdCB4MiA9IEZwLnNxcih4KTsgLy8geCAqIHhcbiAgICAgICAgY29uc3QgeDMgPSBGcC5tdWwoeDIsIHgpOyAvLyB4MiAqIHhcbiAgICAgICAgcmV0dXJuIEZwLmFkZChGcC5hZGQoeDMsIEZwLm11bCh4LCBhKSksIGIpOyAvLyB4MyArIGEgKiB4ICsgYlxuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB3aGV0aGVyIHRoZSBwYXNzZWQgY3VydmUgcGFyYW1zIGFyZSB2YWxpZC5cbiAgICAvLyBXZSBjaGVjayBpZiBjdXJ2ZSBlcXVhdGlvbiB3b3JrcyBmb3IgZ2VuZXJhdG9yIHBvaW50LlxuICAgIC8vIGBhc3NlcnRWYWxpZGl0eSgpYCB3b24ndCB3b3JrOiBgaXNUb3JzaW9uRnJlZSgpYCBpcyBub3QgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQgaW4gYmxzMTItMzgxLlxuICAgIC8vIFByb2plY3RpdmVQb2ludCBjbGFzcyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LlxuICAgIGlmICghRnAuZXFsKEZwLnNxcihDVVJWRS5HeSksIHdlaWVyc3RyYXNzRXF1YXRpb24oQ1VSVkUuR3gpKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgZ2VuZXJhdG9yIHBvaW50OiBlcXVhdGlvbiBsZWZ0ICE9IHJpZ2h0Jyk7XG4gICAgLy8gVmFsaWQgZ3JvdXAgZWxlbWVudHMgcmVzaWRlIGluIHJhbmdlIDEuLm4tMVxuICAgIGZ1bmN0aW9uIGlzV2l0aGluQ3VydmVPcmRlcihudW0pIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBudW0gPT09ICdiaWdpbnQnICYmIF8wbiA8IG51bSAmJiBudW0gPCBDVVJWRS5uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3NlcnRHRShudW0pIHtcbiAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIobnVtKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdmFsaWQgYmlnaW50OiAwIDwgYmlnaW50IDwgY3VydmUubicpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZXMgaWYgcHJpdiBrZXkgaXMgdmFsaWQgYW5kIGNvbnZlcnRzIGl0IHRvIGJpZ2ludC5cbiAgICAvLyBTdXBwb3J0cyBvcHRpb25zIGFsbG93ZWRQcml2YXRlS2V5TGVuZ3RocyBhbmQgd3JhcFByaXZhdGVLZXkuXG4gICAgZnVuY3Rpb24gbm9ybVByaXZhdGVLZXlUb1NjYWxhcihrZXkpIHtcbiAgICAgICAgY29uc3QgeyBhbGxvd2VkUHJpdmF0ZUtleUxlbmd0aHM6IGxlbmd0aHMsIG5CeXRlTGVuZ3RoLCB3cmFwUHJpdmF0ZUtleSwgbiB9ID0gQ1VSVkU7XG4gICAgICAgIGlmIChsZW5ndGhzICYmIHR5cGVvZiBrZXkgIT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICBpZiAodXQuaXNCeXRlcyhrZXkpKVxuICAgICAgICAgICAgICAgIGtleSA9IHV0LmJ5dGVzVG9IZXgoa2V5KTtcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byBoZXggc3RyaW5nLCBwYWQuIEUuZy4gUDUyMSB3b3VsZCBub3JtIDEzMC0xMzIgY2hhciBoZXggdG8gMTMyLWNoYXIgYnl0ZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJyB8fCAhbGVuZ3Rocy5pbmNsdWRlcyhrZXkubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgICAgICAgICBrZXkgPSBrZXkucGFkU3RhcnQobkJ5dGVMZW5ndGggKiAyLCAnMCcpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBudW07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBudW0gPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBrZXkgPT09ICdiaWdpbnQnXG4gICAgICAgICAgICAgICAgICAgID8ga2V5XG4gICAgICAgICAgICAgICAgICAgIDogdXQuYnl0ZXNUb051bWJlckJFKGVuc3VyZUJ5dGVzKCdwcml2YXRlIGtleScsIGtleSwgbkJ5dGVMZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJpdmF0ZSBrZXkgbXVzdCBiZSAke25CeXRlTGVuZ3RofSBieXRlcywgaGV4IG9yIGJpZ2ludCwgbm90ICR7dHlwZW9mIGtleX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcFByaXZhdGVLZXkpXG4gICAgICAgICAgICBudW0gPSBtb2QubW9kKG51bSwgbik7IC8vIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGVuYWJsZWQgZm9yIEJMU1xuICAgICAgICBhc3NlcnRHRShudW0pOyAvLyBudW0gaW4gcmFuZ2UgWzEuLk4tMV1cbiAgICAgICAgcmV0dXJuIG51bTtcbiAgICB9XG4gICAgY29uc3QgcG9pbnRQcmVjb21wdXRlcyA9IG5ldyBNYXAoKTtcbiAgICBmdW5jdGlvbiBhc3NlcnRQcmpQb2ludChvdGhlcikge1xuICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFBvaW50KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdGl2ZVBvaW50IGV4cGVjdGVkJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2plY3RpdmUgUG9pbnQgd29ya3MgaW4gM2QgLyBwcm9qZWN0aXZlIChob21vZ2VuZW91cykgY29vcmRpbmF0ZXM6ICh4LCB5LCB6KSDiiIsgKHg9eC96LCB5PXkveilcbiAgICAgKiBEZWZhdWx0IFBvaW50IHdvcmtzIGluIDJkIC8gYWZmaW5lIGNvb3JkaW5hdGVzOiAoeCwgeSlcbiAgICAgKiBXZSdyZSBkb2luZyBjYWxjdWxhdGlvbnMgaW4gcHJvamVjdGl2ZSwgYmVjYXVzZSBpdHMgb3BlcmF0aW9ucyBkb24ndCByZXF1aXJlIGNvc3RseSBpbnZlcnNpb24uXG4gICAgICovXG4gICAgY2xhc3MgUG9pbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihweCwgcHksIHB6KSB7XG4gICAgICAgICAgICB0aGlzLnB4ID0gcHg7XG4gICAgICAgICAgICB0aGlzLnB5ID0gcHk7XG4gICAgICAgICAgICB0aGlzLnB6ID0gcHo7XG4gICAgICAgICAgICBpZiAocHggPT0gbnVsbCB8fCAhRnAuaXNWYWxpZChweCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd4IHJlcXVpcmVkJyk7XG4gICAgICAgICAgICBpZiAocHkgPT0gbnVsbCB8fCAhRnAuaXNWYWxpZChweSkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd5IHJlcXVpcmVkJyk7XG4gICAgICAgICAgICBpZiAocHogPT0gbnVsbCB8fCAhRnAuaXNWYWxpZChweikpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd6IHJlcXVpcmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9lcyBub3QgdmFsaWRhdGUgaWYgdGhlIHBvaW50IGlzIG9uLWN1cnZlLlxuICAgICAgICAvLyBVc2UgZnJvbUhleCBpbnN0ZWFkLCBvciBjYWxsIGFzc2VydFZhbGlkaXR5KCkgbGF0ZXIuXG4gICAgICAgIHN0YXRpYyBmcm9tQWZmaW5lKHApIHtcbiAgICAgICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gcCB8fCB7fTtcbiAgICAgICAgICAgIGlmICghcCB8fCAhRnAuaXNWYWxpZCh4KSB8fCAhRnAuaXNWYWxpZCh5KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYWZmaW5lIHBvaW50Jyk7XG4gICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFBvaW50KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvamVjdGl2ZSBwb2ludCBub3QgYWxsb3dlZCcpO1xuICAgICAgICAgICAgY29uc3QgaXMwID0gKGkpID0+IEZwLmVxbChpLCBGcC5aRVJPKTtcbiAgICAgICAgICAgIC8vIGZyb21BZmZpbmUoeDowLCB5OjApIHdvdWxkIHByb2R1Y2UgKHg6MCwgeTowLCB6OjEpLCBidXQgd2UgbmVlZCAoeDowLCB5OjEsIHo6MClcbiAgICAgICAgICAgIGlmIChpczAoeCkgJiYgaXMwKHkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBQb2ludC5aRVJPO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh4LCB5LCBGcC5PTkUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB4KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS54O1xuICAgICAgICB9XG4gICAgICAgIGdldCB5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9BZmZpbmUoKS55O1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYWtlcyBhIGJ1bmNoIG9mIFByb2plY3RpdmUgUG9pbnRzIGJ1dCBleGVjdXRlcyBvbmx5IG9uZVxuICAgICAgICAgKiBpbnZlcnNpb24gb24gYWxsIG9mIHRoZW0uIEludmVyc2lvbiBpcyB2ZXJ5IHNsb3cgb3BlcmF0aW9uLFxuICAgICAgICAgKiBzbyB0aGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIG1hc3NpdmVseS5cbiAgICAgICAgICogT3B0aW1pemF0aW9uOiBjb252ZXJ0cyBhIGxpc3Qgb2YgcHJvamVjdGl2ZSBwb2ludHMgdG8gYSBsaXN0IG9mIGlkZW50aWNhbCBwb2ludHMgd2l0aCBaPTEuXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aWMgbm9ybWFsaXplWihwb2ludHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvSW52ID0gRnAuaW52ZXJ0QmF0Y2gocG9pbnRzLm1hcCgocCkgPT4gcC5weikpO1xuICAgICAgICAgICAgcmV0dXJuIHBvaW50cy5tYXAoKHAsIGkpID0+IHAudG9BZmZpbmUodG9JbnZbaV0pKS5tYXAoUG9pbnQuZnJvbUFmZmluZSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnZlcnRzIGhhc2ggc3RyaW5nIG9yIFVpbnQ4QXJyYXkgdG8gUG9pbnQuXG4gICAgICAgICAqIEBwYXJhbSBoZXggc2hvcnQvbG9uZyBFQ0RTQSBoZXhcbiAgICAgICAgICovXG4gICAgICAgIHN0YXRpYyBmcm9tSGV4KGhleCkge1xuICAgICAgICAgICAgY29uc3QgUCA9IFBvaW50LmZyb21BZmZpbmUoZnJvbUJ5dGVzKGVuc3VyZUJ5dGVzKCdwb2ludEhleCcsIGhleCkpKTtcbiAgICAgICAgICAgIFAuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiBQO1xuICAgICAgICB9XG4gICAgICAgIC8vIE11bHRpcGxpZXMgZ2VuZXJhdG9yIHBvaW50IGJ5IHByaXZhdGVLZXkuXG4gICAgICAgIHN0YXRpYyBmcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gUG9pbnQuQkFTRS5tdWx0aXBseShub3JtUHJpdmF0ZUtleVRvU2NhbGFyKHByaXZhdGVLZXkpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBcIlByaXZhdGUgbWV0aG9kXCIsIGRvbid0IHVzZSBpdCBkaXJlY3RseVxuICAgICAgICBfc2V0V2luZG93U2l6ZSh3aW5kb3dTaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9XSU5ET1dfU0laRSA9IHdpbmRvd1NpemU7XG4gICAgICAgICAgICBwb2ludFByZWNvbXB1dGVzLmRlbGV0ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBIHBvaW50IG9uIGN1cnZlIGlzIHZhbGlkIGlmIGl0IGNvbmZvcm1zIHRvIGVxdWF0aW9uLlxuICAgICAgICBhc3NlcnRWYWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzMCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gKDAsIDEsIDApIGFrYSBaRVJPIGlzIGludmFsaWQgaW4gbW9zdCBjb250ZXh0cy5cbiAgICAgICAgICAgICAgICAvLyBJbiBCTFMsIFpFUk8gY2FuIGJlIHNlcmlhbGl6ZWQsIHNvIHdlIGFsbG93IGl0LlxuICAgICAgICAgICAgICAgIC8vICgwLCAwLCAwKSBpcyB3cm9uZyByZXByZXNlbnRhdGlvbiBvZiBaRVJPIGFuZCBpcyBhbHdheXMgaW52YWxpZC5cbiAgICAgICAgICAgICAgICBpZiAoQ1VSVkUuYWxsb3dJbmZpbml0eVBvaW50ICYmICFGcC5pczAodGhpcy5weSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwb2ludDogWkVSTycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU29tZSAzcmQtcGFydHkgdGVzdCB2ZWN0b3JzIHJlcXVpcmUgZGlmZmVyZW50IHdvcmRpbmcgYmV0d2VlbiBoZXJlICYgYGZyb21Db21wcmVzc2VkSGV4YFxuICAgICAgICAgICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB4LCB5IGFyZSB2YWxpZCBmaWVsZCBlbGVtZW50c1xuICAgICAgICAgICAgaWYgKCFGcC5pc1ZhbGlkKHgpIHx8ICFGcC5pc1ZhbGlkKHkpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHBvaW50OiB4IG9yIHkgbm90IEZFJyk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gRnAuc3FyKHkpOyAvLyB5wrJcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsgLy8geMKzICsgYXggKyBiXG4gICAgICAgICAgICBpZiAoIUZwLmVxbChsZWZ0LCByaWdodCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgcG9pbnQ6IGVxdWF0aW9uIGxlZnQgIT0gcmlnaHQnKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1RvcnNpb25GcmVlKCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgcG9pbnQ6IG5vdCBpbiBwcmltZS1vcmRlciBzdWJncm91cCcpO1xuICAgICAgICB9XG4gICAgICAgIGhhc0V2ZW5ZKCkge1xuICAgICAgICAgICAgY29uc3QgeyB5IH0gPSB0aGlzLnRvQWZmaW5lKCk7XG4gICAgICAgICAgICBpZiAoRnAuaXNPZGQpXG4gICAgICAgICAgICAgICAgcmV0dXJuICFGcC5pc09kZCh5KTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIGRvZXNuJ3Qgc3VwcG9ydCBpc09kZFwiKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcGFyZSBvbmUgcG9pbnQgdG8gYW5vdGhlci5cbiAgICAgICAgICovXG4gICAgICAgIGVxdWFscyhvdGhlcikge1xuICAgICAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDEsIHB5OiBZMSwgcHo6IFoxIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDIsIHB5OiBZMiwgcHo6IFoyIH0gPSBvdGhlcjtcbiAgICAgICAgICAgIGNvbnN0IFUxID0gRnAuZXFsKEZwLm11bChYMSwgWjIpLCBGcC5tdWwoWDIsIFoxKSk7XG4gICAgICAgICAgICBjb25zdCBVMiA9IEZwLmVxbChGcC5tdWwoWTEsIFoyKSwgRnAubXVsKFkyLCBaMSkpO1xuICAgICAgICAgICAgcmV0dXJuIFUxICYmIFUyO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGbGlwcyBwb2ludCB0byBvbmUgY29ycmVzcG9uZGluZyB0byAoeCwgLXkpIGluIEFmZmluZSBjb29yZGluYXRlcy5cbiAgICAgICAgICovXG4gICAgICAgIG5lZ2F0ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy5weCwgRnAubmVnKHRoaXMucHkpLCB0aGlzLnB6KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW5lcy1Db3N0ZWxsby1CYXRpbmEgZXhjZXB0aW9uLWZyZWUgZG91YmxpbmcgZm9ybXVsYS5cbiAgICAgICAgLy8gVGhlcmUgaXMgMzAlIGZhc3RlciBKYWNvYmlhbiBmb3JtdWxhLCBidXQgaXQgaXMgbm90IGNvbXBsZXRlLlxuICAgICAgICAvLyBodHRwczovL2VwcmludC5pYWNyLm9yZy8yMDE1LzEwNjAsIGFsZ29yaXRobSAzXG4gICAgICAgIC8vIENvc3Q6IDhNICsgM1MgKyAzKmEgKyAyKmIzICsgMTVhZGQuXG4gICAgICAgIGRvdWJsZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gQ1VSVkU7XG4gICAgICAgICAgICBjb25zdCBiMyA9IEZwLm11bChiLCBfM24pO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDEsIHB5OiBZMSwgcHo6IFoxIH0gPSB0aGlzO1xuICAgICAgICAgICAgbGV0IFgzID0gRnAuWkVSTywgWTMgPSBGcC5aRVJPLCBaMyA9IEZwLlpFUk87IC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAgICAgbGV0IHQwID0gRnAubXVsKFgxLCBYMSk7IC8vIHN0ZXAgMVxuICAgICAgICAgICAgbGV0IHQxID0gRnAubXVsKFkxLCBZMSk7XG4gICAgICAgICAgICBsZXQgdDIgPSBGcC5tdWwoWjEsIFoxKTtcbiAgICAgICAgICAgIGxldCB0MyA9IEZwLm11bChYMSwgWTEpO1xuICAgICAgICAgICAgdDMgPSBGcC5hZGQodDMsIHQzKTsgLy8gc3RlcCA1XG4gICAgICAgICAgICBaMyA9IEZwLm11bChYMSwgWjEpO1xuICAgICAgICAgICAgWjMgPSBGcC5hZGQoWjMsIFozKTtcbiAgICAgICAgICAgIFgzID0gRnAubXVsKGEsIFozKTtcbiAgICAgICAgICAgIFkzID0gRnAubXVsKGIzLCB0Mik7XG4gICAgICAgICAgICBZMyA9IEZwLmFkZChYMywgWTMpOyAvLyBzdGVwIDEwXG4gICAgICAgICAgICBYMyA9IEZwLnN1Yih0MSwgWTMpO1xuICAgICAgICAgICAgWTMgPSBGcC5hZGQodDEsIFkzKTtcbiAgICAgICAgICAgIFkzID0gRnAubXVsKFgzLCBZMyk7XG4gICAgICAgICAgICBYMyA9IEZwLm11bCh0MywgWDMpO1xuICAgICAgICAgICAgWjMgPSBGcC5tdWwoYjMsIFozKTsgLy8gc3RlcCAxNVxuICAgICAgICAgICAgdDIgPSBGcC5tdWwoYSwgdDIpO1xuICAgICAgICAgICAgdDMgPSBGcC5zdWIodDAsIHQyKTtcbiAgICAgICAgICAgIHQzID0gRnAubXVsKGEsIHQzKTtcbiAgICAgICAgICAgIHQzID0gRnAuYWRkKHQzLCBaMyk7XG4gICAgICAgICAgICBaMyA9IEZwLmFkZCh0MCwgdDApOyAvLyBzdGVwIDIwXG4gICAgICAgICAgICB0MCA9IEZwLmFkZChaMywgdDApO1xuICAgICAgICAgICAgdDAgPSBGcC5hZGQodDAsIHQyKTtcbiAgICAgICAgICAgIHQwID0gRnAubXVsKHQwLCB0Myk7XG4gICAgICAgICAgICBZMyA9IEZwLmFkZChZMywgdDApO1xuICAgICAgICAgICAgdDIgPSBGcC5tdWwoWTEsIFoxKTsgLy8gc3RlcCAyNVxuICAgICAgICAgICAgdDIgPSBGcC5hZGQodDIsIHQyKTtcbiAgICAgICAgICAgIHQwID0gRnAubXVsKHQyLCB0Myk7XG4gICAgICAgICAgICBYMyA9IEZwLnN1YihYMywgdDApO1xuICAgICAgICAgICAgWjMgPSBGcC5tdWwodDIsIHQxKTtcbiAgICAgICAgICAgIFozID0gRnAuYWRkKFozLCBaMyk7IC8vIHN0ZXAgMzBcbiAgICAgICAgICAgIFozID0gRnAuYWRkKFozLCBaMyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50KFgzLCBZMywgWjMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlbmVzLUNvc3RlbGxvLUJhdGluYSBleGNlcHRpb24tZnJlZSBhZGRpdGlvbiBmb3JtdWxhLlxuICAgICAgICAvLyBUaGVyZSBpcyAzMCUgZmFzdGVyIEphY29iaWFuIGZvcm11bGEsIGJ1dCBpdCBpcyBub3QgY29tcGxldGUuXG4gICAgICAgIC8vIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTUvMTA2MCwgYWxnb3JpdGhtIDFcbiAgICAgICAgLy8gQ29zdDogMTJNICsgMFMgKyAzKmEgKyAzKmIzICsgMjNhZGQuXG4gICAgICAgIGFkZChvdGhlcikge1xuICAgICAgICAgICAgYXNzZXJ0UHJqUG9pbnQob3RoZXIpO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDEsIHB5OiBZMSwgcHo6IFoxIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgeyBweDogWDIsIHB5OiBZMiwgcHo6IFoyIH0gPSBvdGhlcjtcbiAgICAgICAgICAgIGxldCBYMyA9IEZwLlpFUk8sIFkzID0gRnAuWkVSTywgWjMgPSBGcC5aRVJPOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGEgPSBDVVJWRS5hO1xuICAgICAgICAgICAgY29uc3QgYjMgPSBGcC5tdWwoQ1VSVkUuYiwgXzNuKTtcbiAgICAgICAgICAgIGxldCB0MCA9IEZwLm11bChYMSwgWDIpOyAvLyBzdGVwIDFcbiAgICAgICAgICAgIGxldCB0MSA9IEZwLm11bChZMSwgWTIpO1xuICAgICAgICAgICAgbGV0IHQyID0gRnAubXVsKFoxLCBaMik7XG4gICAgICAgICAgICBsZXQgdDMgPSBGcC5hZGQoWDEsIFkxKTtcbiAgICAgICAgICAgIGxldCB0NCA9IEZwLmFkZChYMiwgWTIpOyAvLyBzdGVwIDVcbiAgICAgICAgICAgIHQzID0gRnAubXVsKHQzLCB0NCk7XG4gICAgICAgICAgICB0NCA9IEZwLmFkZCh0MCwgdDEpO1xuICAgICAgICAgICAgdDMgPSBGcC5zdWIodDMsIHQ0KTtcbiAgICAgICAgICAgIHQ0ID0gRnAuYWRkKFgxLCBaMSk7XG4gICAgICAgICAgICBsZXQgdDUgPSBGcC5hZGQoWDIsIFoyKTsgLy8gc3RlcCAxMFxuICAgICAgICAgICAgdDQgPSBGcC5tdWwodDQsIHQ1KTtcbiAgICAgICAgICAgIHQ1ID0gRnAuYWRkKHQwLCB0Mik7XG4gICAgICAgICAgICB0NCA9IEZwLnN1Yih0NCwgdDUpO1xuICAgICAgICAgICAgdDUgPSBGcC5hZGQoWTEsIFoxKTtcbiAgICAgICAgICAgIFgzID0gRnAuYWRkKFkyLCBaMik7IC8vIHN0ZXAgMTVcbiAgICAgICAgICAgIHQ1ID0gRnAubXVsKHQ1LCBYMyk7XG4gICAgICAgICAgICBYMyA9IEZwLmFkZCh0MSwgdDIpO1xuICAgICAgICAgICAgdDUgPSBGcC5zdWIodDUsIFgzKTtcbiAgICAgICAgICAgIFozID0gRnAubXVsKGEsIHQ0KTtcbiAgICAgICAgICAgIFgzID0gRnAubXVsKGIzLCB0Mik7IC8vIHN0ZXAgMjBcbiAgICAgICAgICAgIFozID0gRnAuYWRkKFgzLCBaMyk7XG4gICAgICAgICAgICBYMyA9IEZwLnN1Yih0MSwgWjMpO1xuICAgICAgICAgICAgWjMgPSBGcC5hZGQodDEsIFozKTtcbiAgICAgICAgICAgIFkzID0gRnAubXVsKFgzLCBaMyk7XG4gICAgICAgICAgICB0MSA9IEZwLmFkZCh0MCwgdDApOyAvLyBzdGVwIDI1XG4gICAgICAgICAgICB0MSA9IEZwLmFkZCh0MSwgdDApO1xuICAgICAgICAgICAgdDIgPSBGcC5tdWwoYSwgdDIpO1xuICAgICAgICAgICAgdDQgPSBGcC5tdWwoYjMsIHQ0KTtcbiAgICAgICAgICAgIHQxID0gRnAuYWRkKHQxLCB0Mik7XG4gICAgICAgICAgICB0MiA9IEZwLnN1Yih0MCwgdDIpOyAvLyBzdGVwIDMwXG4gICAgICAgICAgICB0MiA9IEZwLm11bChhLCB0Mik7XG4gICAgICAgICAgICB0NCA9IEZwLmFkZCh0NCwgdDIpO1xuICAgICAgICAgICAgdDAgPSBGcC5tdWwodDEsIHQ0KTtcbiAgICAgICAgICAgIFkzID0gRnAuYWRkKFkzLCB0MCk7XG4gICAgICAgICAgICB0MCA9IEZwLm11bCh0NSwgdDQpOyAvLyBzdGVwIDM1XG4gICAgICAgICAgICBYMyA9IEZwLm11bCh0MywgWDMpO1xuICAgICAgICAgICAgWDMgPSBGcC5zdWIoWDMsIHQwKTtcbiAgICAgICAgICAgIHQwID0gRnAubXVsKHQzLCB0MSk7XG4gICAgICAgICAgICBaMyA9IEZwLm11bCh0NSwgWjMpO1xuICAgICAgICAgICAgWjMgPSBGcC5hZGQoWjMsIHQwKTsgLy8gc3RlcCA0MFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludChYMywgWTMsIFozKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJ0cmFjdChvdGhlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKG90aGVyLm5lZ2F0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpczAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHMoUG9pbnQuWkVSTyk7XG4gICAgICAgIH1cbiAgICAgICAgd05BRihuKSB7XG4gICAgICAgICAgICByZXR1cm4gd25hZi53TkFGQ2FjaGVkKHRoaXMsIHBvaW50UHJlY29tcHV0ZXMsIG4sIChjb21wKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9JbnYgPSBGcC5pbnZlcnRCYXRjaChjb21wLm1hcCgocCkgPT4gcC5weikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wLm1hcCgocCwgaSkgPT4gcC50b0FmZmluZSh0b0ludltpXSkpLm1hcChQb2ludC5mcm9tQWZmaW5lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOb24tY29uc3RhbnQtdGltZSBtdWx0aXBsaWNhdGlvbi4gVXNlcyBkb3VibGUtYW5kLWFkZCBhbGdvcml0aG0uXG4gICAgICAgICAqIEl0J3MgZmFzdGVyLCBidXQgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHlvdSBkb24ndCBjYXJlIGFib3V0XG4gICAgICAgICAqIGFuIGV4cG9zZWQgcHJpdmF0ZSBrZXkgZS5nLiBzaWcgdmVyaWZpY2F0aW9uLCB3aGljaCB3b3JrcyBvdmVyICpwdWJsaWMqIGtleXMuXG4gICAgICAgICAqL1xuICAgICAgICBtdWx0aXBseVVuc2FmZShuKSB7XG4gICAgICAgICAgICBjb25zdCBJID0gUG9pbnQuWkVSTztcbiAgICAgICAgICAgIGlmIChuID09PSBfMG4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIEk7XG4gICAgICAgICAgICBhc3NlcnRHRShuKTsgLy8gV2lsbCB0aHJvdyBvbiAwXG4gICAgICAgICAgICBpZiAobiA9PT0gXzFuKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgY29uc3QgeyBlbmRvIH0gPSBDVVJWRTtcbiAgICAgICAgICAgIGlmICghZW5kbylcbiAgICAgICAgICAgICAgICByZXR1cm4gd25hZi51bnNhZmVMYWRkZXIodGhpcywgbik7XG4gICAgICAgICAgICAvLyBBcHBseSBlbmRvbW9ycGhpc21cbiAgICAgICAgICAgIGxldCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pO1xuICAgICAgICAgICAgbGV0IGsxcCA9IEk7XG4gICAgICAgICAgICBsZXQgazJwID0gSTtcbiAgICAgICAgICAgIGxldCBkID0gdGhpcztcbiAgICAgICAgICAgIHdoaWxlIChrMSA+IF8wbiB8fCBrMiA+IF8wbikge1xuICAgICAgICAgICAgICAgIGlmIChrMSAmIF8xbilcbiAgICAgICAgICAgICAgICAgICAgazFwID0gazFwLmFkZChkKTtcbiAgICAgICAgICAgICAgICBpZiAoazIgJiBfMW4pXG4gICAgICAgICAgICAgICAgICAgIGsycCA9IGsycC5hZGQoZCk7XG4gICAgICAgICAgICAgICAgZCA9IGQuZG91YmxlKCk7XG4gICAgICAgICAgICAgICAgazEgPj49IF8xbjtcbiAgICAgICAgICAgICAgICBrMiA+Pj0gXzFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGsxbmVnKVxuICAgICAgICAgICAgICAgIGsxcCA9IGsxcC5uZWdhdGUoKTtcbiAgICAgICAgICAgIGlmIChrMm5lZylcbiAgICAgICAgICAgICAgICBrMnAgPSBrMnAubmVnYXRlKCk7XG4gICAgICAgICAgICBrMnAgPSBuZXcgUG9pbnQoRnAubXVsKGsycC5weCwgZW5kby5iZXRhKSwgazJwLnB5LCBrMnAucHopO1xuICAgICAgICAgICAgcmV0dXJuIGsxcC5hZGQoazJwKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RhbnQgdGltZSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgICAgICogVXNlcyB3TkFGIG1ldGhvZC4gV2luZG93ZWQgbWV0aG9kIG1heSBiZSAxMCUgZmFzdGVyLFxuICAgICAgICAgKiBidXQgdGFrZXMgMnggbG9uZ2VyIHRvIGdlbmVyYXRlIGFuZCBjb25zdW1lcyAyeCBtZW1vcnkuXG4gICAgICAgICAqIFVzZXMgcHJlY29tcHV0ZXMgd2hlbiBhdmFpbGFibGUuXG4gICAgICAgICAqIFVzZXMgZW5kb21vcnBoaXNtIGZvciBLb2JsaXR6IGN1cnZlcy5cbiAgICAgICAgICogQHBhcmFtIHNjYWxhciBieSB3aGljaCB0aGUgcG9pbnQgd291bGQgYmUgbXVsdGlwbGllZFxuICAgICAgICAgKiBAcmV0dXJucyBOZXcgcG9pbnRcbiAgICAgICAgICovXG4gICAgICAgIG11bHRpcGx5KHNjYWxhcikge1xuICAgICAgICAgICAgYXNzZXJ0R0Uoc2NhbGFyKTtcbiAgICAgICAgICAgIGxldCBuID0gc2NhbGFyO1xuICAgICAgICAgICAgbGV0IHBvaW50LCBmYWtlOyAvLyBGYWtlIHBvaW50IGlzIHVzZWQgdG8gY29uc3QtdGltZSBtdWx0XG4gICAgICAgICAgICBjb25zdCB7IGVuZG8gfSA9IENVUlZFO1xuICAgICAgICAgICAgaWYgKGVuZG8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGsxbmVnLCBrMSwgazJuZWcsIGsyIH0gPSBlbmRvLnNwbGl0U2NhbGFyKG4pO1xuICAgICAgICAgICAgICAgIGxldCB7IHA6IGsxcCwgZjogZjFwIH0gPSB0aGlzLndOQUYoazEpO1xuICAgICAgICAgICAgICAgIGxldCB7IHA6IGsycCwgZjogZjJwIH0gPSB0aGlzLndOQUYoazIpO1xuICAgICAgICAgICAgICAgIGsxcCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsxbmVnLCBrMXApO1xuICAgICAgICAgICAgICAgIGsycCA9IHduYWYuY29uc3RUaW1lTmVnYXRlKGsybmVnLCBrMnApO1xuICAgICAgICAgICAgICAgIGsycCA9IG5ldyBQb2ludChGcC5tdWwoazJwLnB4LCBlbmRvLmJldGEpLCBrMnAucHksIGsycC5weik7XG4gICAgICAgICAgICAgICAgcG9pbnQgPSBrMXAuYWRkKGsycCk7XG4gICAgICAgICAgICAgICAgZmFrZSA9IGYxcC5hZGQoZjJwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcCwgZiB9ID0gdGhpcy53TkFGKG4pO1xuICAgICAgICAgICAgICAgIHBvaW50ID0gcDtcbiAgICAgICAgICAgICAgICBmYWtlID0gZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBgemAgZm9yIGJvdGggcG9pbnRzLCBidXQgcmV0dXJuIG9ubHkgcmVhbCBvbmVcbiAgICAgICAgICAgIHJldHVybiBQb2ludC5ub3JtYWxpemVaKFtwb2ludCwgZmFrZV0pWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFZmZpY2llbnRseSBjYWxjdWxhdGUgYGFQICsgYlFgLiBVbnNhZmUsIGNhbiBleHBvc2UgcHJpdmF0ZSBrZXksIGlmIHVzZWQgaW5jb3JyZWN0bHkuXG4gICAgICAgICAqIE5vdCB1c2luZyBTdHJhdXNzLVNoYW1pciB0cmljazogcHJlY29tcHV0YXRpb24gdGFibGVzIGFyZSBmYXN0ZXIuXG4gICAgICAgICAqIFRoZSB0cmljayBjb3VsZCBiZSB1c2VmdWwgaWYgYm90aCBQIGFuZCBRIGFyZSBub3QgRyAobm90IGluIG91ciBjYXNlKS5cbiAgICAgICAgICogQHJldHVybnMgbm9uLXplcm8gYWZmaW5lIHBvaW50XG4gICAgICAgICAqL1xuICAgICAgICBtdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKSB7XG4gICAgICAgICAgICBjb25zdCBHID0gUG9pbnQuQkFTRTsgLy8gTm8gU3RyYXVzcy1TaGFtaXIgdHJpY2s6IHdlIGhhdmUgMTAlIGZhc3RlciBHIHByZWNvbXB1dGVzXG4gICAgICAgICAgICBjb25zdCBtdWwgPSAoUCwgYSAvLyBTZWxlY3QgZmFzdGVyIG11bHRpcGx5KCkgbWV0aG9kXG4gICAgICAgICAgICApID0+IChhID09PSBfMG4gfHwgYSA9PT0gXzFuIHx8ICFQLmVxdWFscyhHKSA/IFAubXVsdGlwbHlVbnNhZmUoYSkgOiBQLm11bHRpcGx5KGEpKTtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IG11bCh0aGlzLCBhKS5hZGQobXVsKFEsIGIpKTtcbiAgICAgICAgICAgIHJldHVybiBzdW0uaXMwKCkgPyB1bmRlZmluZWQgOiBzdW07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29udmVydHMgUHJvamVjdGl2ZSBwb2ludCB0byBhZmZpbmUgKHgsIHkpIGNvb3JkaW5hdGVzLlxuICAgICAgICAvLyBDYW4gYWNjZXB0IHByZWNvbXB1dGVkIFpeLTEgLSBmb3IgZXhhbXBsZSwgZnJvbSBpbnZlcnRCYXRjaC5cbiAgICAgICAgLy8gKHgsIHksIHopIOKIiyAoeD14L3osIHk9eS96KVxuICAgICAgICB0b0FmZmluZShpeikge1xuICAgICAgICAgICAgY29uc3QgeyBweDogeCwgcHk6IHksIHB6OiB6IH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgaXMwID0gdGhpcy5pczAoKTtcbiAgICAgICAgICAgIC8vIElmIGludlogd2FzIDAsIHdlIHJldHVybiB6ZXJvIHBvaW50LiBIb3dldmVyIHdlIHN0aWxsIHdhbnQgdG8gZXhlY3V0ZVxuICAgICAgICAgICAgLy8gYWxsIG9wZXJhdGlvbnMsIHNvIHdlIHJlcGxhY2UgaW52WiB3aXRoIGEgcmFuZG9tIG51bWJlciwgMS5cbiAgICAgICAgICAgIGlmIChpeiA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGl6ID0gaXMwID8gRnAuT05FIDogRnAuaW52KHopO1xuICAgICAgICAgICAgY29uc3QgYXggPSBGcC5tdWwoeCwgaXopO1xuICAgICAgICAgICAgY29uc3QgYXkgPSBGcC5tdWwoeSwgaXopO1xuICAgICAgICAgICAgY29uc3QgenogPSBGcC5tdWwoeiwgaXopO1xuICAgICAgICAgICAgaWYgKGlzMClcbiAgICAgICAgICAgICAgICByZXR1cm4geyB4OiBGcC5aRVJPLCB5OiBGcC5aRVJPIH07XG4gICAgICAgICAgICBpZiAoIUZwLmVxbCh6eiwgRnAuT05FKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludlogd2FzIGludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiB7IHg6IGF4LCB5OiBheSB9O1xuICAgICAgICB9XG4gICAgICAgIGlzVG9yc2lvbkZyZWUoKSB7XG4gICAgICAgICAgICBjb25zdCB7IGg6IGNvZmFjdG9yLCBpc1RvcnNpb25GcmVlIH0gPSBDVVJWRTtcbiAgICAgICAgICAgIGlmIChjb2ZhY3RvciA9PT0gXzFuKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBObyBzdWJncm91cHMsIGFsd2F5cyB0b3JzaW9uLWZyZWVcbiAgICAgICAgICAgIGlmIChpc1RvcnNpb25GcmVlKVxuICAgICAgICAgICAgICAgIHJldHVybiBpc1RvcnNpb25GcmVlKFBvaW50LCB0aGlzKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaXNUb3JzaW9uRnJlZSgpIGhhcyBub3QgYmVlbiBkZWNsYXJlZCBmb3IgdGhlIGVsbGlwdGljIGN1cnZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJDb2ZhY3RvcigpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaDogY29mYWN0b3IsIGNsZWFyQ29mYWN0b3IgfSA9IENVUlZFO1xuICAgICAgICAgICAgaWYgKGNvZmFjdG9yID09PSBfMW4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7IC8vIEZhc3QtcGF0aFxuICAgICAgICAgICAgaWYgKGNsZWFyQ29mYWN0b3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFyQ29mYWN0b3IoUG9pbnQsIHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbHlVbnNhZmUoQ1VSVkUuaCk7XG4gICAgICAgIH1cbiAgICAgICAgdG9SYXdCeXRlcyhpc0NvbXByZXNzZWQgPSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICByZXR1cm4gdG9CeXRlcyhQb2ludCwgdGhpcywgaXNDb21wcmVzc2VkKTtcbiAgICAgICAgfVxuICAgICAgICB0b0hleChpc0NvbXByZXNzZWQgPSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdXQuYnl0ZXNUb0hleCh0aGlzLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUG9pbnQuQkFTRSA9IG5ldyBQb2ludChDVVJWRS5HeCwgQ1VSVkUuR3ksIEZwLk9ORSk7XG4gICAgUG9pbnQuWkVSTyA9IG5ldyBQb2ludChGcC5aRVJPLCBGcC5PTkUsIEZwLlpFUk8pO1xuICAgIGNvbnN0IF9iaXRzID0gQ1VSVkUubkJpdExlbmd0aDtcbiAgICBjb25zdCB3bmFmID0gd05BRihQb2ludCwgQ1VSVkUuZW5kbyA/IE1hdGguY2VpbChfYml0cyAvIDIpIDogX2JpdHMpO1xuICAgIC8vIFZhbGlkYXRlIGlmIGdlbmVyYXRvciBwb2ludCBpcyBvbiBjdXJ2ZVxuICAgIHJldHVybiB7XG4gICAgICAgIENVUlZFLFxuICAgICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50LFxuICAgICAgICBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLFxuICAgICAgICB3ZWllcnN0cmFzc0VxdWF0aW9uLFxuICAgICAgICBpc1dpdGhpbkN1cnZlT3JkZXIsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0cyhjdXJ2ZSkge1xuICAgIGNvbnN0IG9wdHMgPSB2YWxpZGF0ZUJhc2ljKGN1cnZlKTtcbiAgICB1dC52YWxpZGF0ZU9iamVjdChvcHRzLCB7XG4gICAgICAgIGhhc2g6ICdoYXNoJyxcbiAgICAgICAgaG1hYzogJ2Z1bmN0aW9uJyxcbiAgICAgICAgcmFuZG9tQnl0ZXM6ICdmdW5jdGlvbicsXG4gICAgfSwge1xuICAgICAgICBiaXRzMmludDogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYml0czJpbnRfbW9kTjogJ2Z1bmN0aW9uJyxcbiAgICAgICAgbG93UzogJ2Jvb2xlYW4nLFxuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgbG93UzogdHJ1ZSwgLi4ub3B0cyB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWllcnN0cmFzcyhjdXJ2ZURlZikge1xuICAgIGNvbnN0IENVUlZFID0gdmFsaWRhdGVPcHRzKGN1cnZlRGVmKTtcbiAgICBjb25zdCB7IEZwLCBuOiBDVVJWRV9PUkRFUiB9ID0gQ1VSVkU7XG4gICAgY29uc3QgY29tcHJlc3NlZExlbiA9IEZwLkJZVEVTICsgMTsgLy8gZS5nLiAzMyBmb3IgMzJcbiAgICBjb25zdCB1bmNvbXByZXNzZWRMZW4gPSAyICogRnAuQllURVMgKyAxOyAvLyBlLmcuIDY1IGZvciAzMlxuICAgIGZ1bmN0aW9uIGlzVmFsaWRGaWVsZEVsZW1lbnQobnVtKSB7XG4gICAgICAgIHJldHVybiBfMG4gPCBudW0gJiYgbnVtIDwgRnAuT1JERVI7IC8vIDAgaXMgYmFubmVkIHNpbmNlIGl0J3Mgbm90IGludmVydGlibGUgRkVcbiAgICB9XG4gICAgZnVuY3Rpb24gbW9kTihhKSB7XG4gICAgICAgIHJldHVybiBtb2QubW9kKGEsIENVUlZFX09SREVSKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW52TihhKSB7XG4gICAgICAgIHJldHVybiBtb2QuaW52ZXJ0KGEsIENVUlZFX09SREVSKTtcbiAgICB9XG4gICAgY29uc3QgeyBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50LCBub3JtUHJpdmF0ZUtleVRvU2NhbGFyLCB3ZWllcnN0cmFzc0VxdWF0aW9uLCBpc1dpdGhpbkN1cnZlT3JkZXIsIH0gPSB3ZWllcnN0cmFzc1BvaW50cyh7XG4gICAgICAgIC4uLkNVUlZFLFxuICAgICAgICB0b0J5dGVzKF9jLCBwb2ludCwgaXNDb21wcmVzc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gcG9pbnQudG9BZmZpbmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBGcC50b0J5dGVzKGEueCk7XG4gICAgICAgICAgICBjb25zdCBjYXQgPSB1dC5jb25jYXRCeXRlcztcbiAgICAgICAgICAgIGlmIChpc0NvbXByZXNzZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2F0KFVpbnQ4QXJyYXkuZnJvbShbcG9pbnQuaGFzRXZlblkoKSA/IDB4MDIgOiAweDAzXSksIHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhdChVaW50OEFycmF5LmZyb20oWzB4MDRdKSwgeCwgRnAudG9CeXRlcyhhLnkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnJvbUJ5dGVzKGJ5dGVzKSB7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBoZWFkID0gYnl0ZXNbMF07XG4gICAgICAgICAgICBjb25zdCB0YWlsID0gYnl0ZXMuc3ViYXJyYXkoMSk7XG4gICAgICAgICAgICAvLyB0aGlzLmFzc2VydFZhbGlkaXR5KCkgaXMgZG9uZSBpbnNpZGUgb2YgZnJvbUhleFxuICAgICAgICAgICAgaWYgKGxlbiA9PT0gY29tcHJlc3NlZExlbiAmJiAoaGVhZCA9PT0gMHgwMiB8fCBoZWFkID09PSAweDAzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSB1dC5ieXRlc1RvTnVtYmVyQkUodGFpbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRmllbGRFbGVtZW50KHgpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBvbiBjdXJ2ZScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkyID0gd2VpZXJzdHJhc3NFcXVhdGlvbih4KTsgLy8gecKyID0geMKzICsgYXggKyBiXG4gICAgICAgICAgICAgICAgbGV0IHk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgeSA9IEZwLnNxcnQoeTIpOyAvLyB5ID0gecKyIF4gKHArMSkvNFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoc3FydEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHNxcnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gJzogJyArIHNxcnRFcnJvci5tZXNzYWdlIDogJyc7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IG9uIGN1cnZlJyArIHN1ZmZpeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzWU9kZCA9ICh5ICYgXzFuKSA9PT0gXzFuO1xuICAgICAgICAgICAgICAgIC8vIEVDRFNBXG4gICAgICAgICAgICAgICAgY29uc3QgaXNIZWFkT2RkID0gKGhlYWQgJiAxKSA9PT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaXNIZWFkT2RkICE9PSBpc1lPZGQpXG4gICAgICAgICAgICAgICAgICAgIHkgPSBGcC5uZWcoeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgeCwgeSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobGVuID09PSB1bmNvbXByZXNzZWRMZW4gJiYgaGVhZCA9PT0gMHgwNCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBGcC5mcm9tQnl0ZXModGFpbC5zdWJhcnJheSgwLCBGcC5CWVRFUykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBGcC5mcm9tQnl0ZXModGFpbC5zdWJhcnJheShGcC5CWVRFUywgMiAqIEZwLkJZVEVTKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgeCwgeSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb2ludCBvZiBsZW5ndGggJHtsZW59IHdhcyBpbnZhbGlkLiBFeHBlY3RlZCAke2NvbXByZXNzZWRMZW59IGNvbXByZXNzZWQgYnl0ZXMgb3IgJHt1bmNvbXByZXNzZWRMZW59IHVuY29tcHJlc3NlZCBieXRlc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IG51bVRvTkJ5dGVTdHIgPSAobnVtKSA9PiB1dC5ieXRlc1RvSGV4KHV0Lm51bWJlclRvQnl0ZXNCRShudW0sIENVUlZFLm5CeXRlTGVuZ3RoKSk7XG4gICAgZnVuY3Rpb24gaXNCaWdnZXJUaGFuSGFsZk9yZGVyKG51bWJlcikge1xuICAgICAgICBjb25zdCBIQUxGID0gQ1VSVkVfT1JERVIgPj4gXzFuO1xuICAgICAgICByZXR1cm4gbnVtYmVyID4gSEFMRjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplUyhzKSB7XG4gICAgICAgIHJldHVybiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIocykgPyBtb2ROKC1zKSA6IHM7XG4gICAgfVxuICAgIC8vIHNsaWNlIGJ5dGVzIG51bVxuICAgIGNvbnN0IHNsY051bSA9IChiLCBmcm9tLCB0bykgPT4gdXQuYnl0ZXNUb051bWJlckJFKGIuc2xpY2UoZnJvbSwgdG8pKTtcbiAgICAvKipcbiAgICAgKiBFQ0RTQSBzaWduYXR1cmUgd2l0aCBpdHMgKHIsIHMpIHByb3BlcnRpZXMuIFN1cHBvcnRzIERFUiAmIGNvbXBhY3QgcmVwcmVzZW50YXRpb25zLlxuICAgICAqL1xuICAgIGNsYXNzIFNpZ25hdHVyZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHIsIHMsIHJlY292ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnIgPSByO1xuICAgICAgICAgICAgdGhpcy5zID0gcztcbiAgICAgICAgICAgIHRoaXMucmVjb3ZlcnkgPSByZWNvdmVyeTtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYWlyIChieXRlcyBvZiByLCBieXRlcyBvZiBzKVxuICAgICAgICBzdGF0aWMgZnJvbUNvbXBhY3QoaGV4KSB7XG4gICAgICAgICAgICBjb25zdCBsID0gQ1VSVkUubkJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBoZXggPSBlbnN1cmVCeXRlcygnY29tcGFjdFNpZ25hdHVyZScsIGhleCwgbCAqIDIpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoc2xjTnVtKGhleCwgMCwgbCksIHNsY051bShoZXgsIGwsIDIgKiBsKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gREVSIGVuY29kZWQgRUNEU0Egc2lnbmF0dXJlXG4gICAgICAgIC8vIGh0dHBzOi8vYml0Y29pbi5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvNTc2NDQvd2hhdC1hcmUtdGhlLXBhcnRzLW9mLWEtYml0Y29pbi10cmFuc2FjdGlvbi1pbnB1dC1zY3JpcHRcbiAgICAgICAgc3RhdGljIGZyb21ERVIoaGV4KSB7XG4gICAgICAgICAgICBjb25zdCB7IHIsIHMgfSA9IERFUi50b1NpZyhlbnN1cmVCeXRlcygnREVSJywgaGV4KSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShyLCBzKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRWYWxpZGl0eSgpIHtcbiAgICAgICAgICAgIC8vIGNhbiB1c2UgYXNzZXJ0R0UgaGVyZVxuICAgICAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIodGhpcy5yKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3IgbXVzdCBiZSAwIDwgciA8IENVUlZFLm4nKTtcbiAgICAgICAgICAgIGlmICghaXNXaXRoaW5DdXJ2ZU9yZGVyKHRoaXMucykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzIG11c3QgYmUgMCA8IHMgPCBDVVJWRS5uJyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkUmVjb3ZlcnlCaXQocmVjb3ZlcnkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMuciwgdGhpcy5zLCByZWNvdmVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVjb3ZlclB1YmxpY0tleShtc2dIYXNoKSB7XG4gICAgICAgICAgICBjb25zdCB7IHIsIHMsIHJlY292ZXJ5OiByZWMgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBoID0gYml0czJpbnRfbW9kTihlbnN1cmVCeXRlcygnbXNnSGFzaCcsIG1zZ0hhc2gpKTsgLy8gVHJ1bmNhdGUgaGFzaFxuICAgICAgICAgICAgaWYgKHJlYyA9PSBudWxsIHx8ICFbMCwgMSwgMiwgM10uaW5jbHVkZXMocmVjKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlY292ZXJ5IGlkIGludmFsaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGogPSByZWMgPT09IDIgfHwgcmVjID09PSAzID8gciArIENVUlZFLm4gOiByO1xuICAgICAgICAgICAgaWYgKHJhZGogPj0gRnAuT1JERVIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWNvdmVyeSBpZCAyIG9yIDMgaW52YWxpZCcpO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gKHJlYyAmIDEpID09PSAwID8gJzAyJyA6ICcwMyc7XG4gICAgICAgICAgICBjb25zdCBSID0gUG9pbnQuZnJvbUhleChwcmVmaXggKyBudW1Ub05CeXRlU3RyKHJhZGopKTtcbiAgICAgICAgICAgIGNvbnN0IGlyID0gaW52TihyYWRqKTsgLy8gcl4tMVxuICAgICAgICAgICAgY29uc3QgdTEgPSBtb2ROKC1oICogaXIpOyAvLyAtaHJeLTFcbiAgICAgICAgICAgIGNvbnN0IHUyID0gbW9kTihzICogaXIpOyAvLyBzcl4tMVxuICAgICAgICAgICAgY29uc3QgUSA9IFBvaW50LkJBU0UubXVsdGlwbHlBbmRBZGRVbnNhZmUoUiwgdTEsIHUyKTsgLy8gKHNyXi0xKVItKGhyXi0xKUcgPSAtKGhyXi0xKUcgKyAoc3JeLTEpXG4gICAgICAgICAgICBpZiAoIVEpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2ludCBhdCBpbmZpbmlmeScpOyAvLyB1bnNhZmUgaXMgZmluZTogbm8gcHJpdiBkYXRhIGxlYWtlZFxuICAgICAgICAgICAgUS5hc3NlcnRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgcmV0dXJuIFE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2lnbmF0dXJlcyBzaG91bGQgYmUgbG93LXMsIHRvIHByZXZlbnQgbWFsbGVhYmlsaXR5LlxuICAgICAgICBoYXNIaWdoUygpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0JpZ2dlclRoYW5IYWxmT3JkZXIodGhpcy5zKTtcbiAgICAgICAgfVxuICAgICAgICBub3JtYWxpemVTKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzSGlnaFMoKSA/IG5ldyBTaWduYXR1cmUodGhpcy5yLCBtb2ROKC10aGlzLnMpLCB0aGlzLnJlY292ZXJ5KSA6IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gREVSLWVuY29kZWRcbiAgICAgICAgdG9ERVJSYXdCeXRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiB1dC5oZXhUb0J5dGVzKHRoaXMudG9ERVJIZXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9ERVJIZXgoKSB7XG4gICAgICAgICAgICByZXR1cm4gREVSLmhleEZyb21TaWcoeyByOiB0aGlzLnIsIHM6IHRoaXMucyB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYWRkZWQgYnl0ZXMgb2YgciwgdGhlbiBwYWRkZWQgYnl0ZXMgb2Ygc1xuICAgICAgICB0b0NvbXBhY3RSYXdCeXRlcygpIHtcbiAgICAgICAgICAgIHJldHVybiB1dC5oZXhUb0J5dGVzKHRoaXMudG9Db21wYWN0SGV4KCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvQ29tcGFjdEhleCgpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1Ub05CeXRlU3RyKHRoaXMucikgKyBudW1Ub05CeXRlU3RyKHRoaXMucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdXRpbHMgPSB7XG4gICAgICAgIGlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9ybVByaXZhdGVLZXlUb1NjYWxhcjogbm9ybVByaXZhdGVLZXlUb1NjYWxhcixcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb2R1Y2VzIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSBwcml2YXRlIGtleSBmcm9tIHJhbmRvbSBvZiBzaXplXG4gICAgICAgICAqIChncm91cExlbiArIGNlaWwoZ3JvdXBMZW4gLyAyKSkgd2l0aCBtb2R1bG8gYmlhcyBiZWluZyBuZWdsaWdpYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gbW9kLmdldE1pbkhhc2hMZW5ndGgoQ1VSVkUubik7XG4gICAgICAgICAgICByZXR1cm4gbW9kLm1hcEhhc2hUb0ZpZWxkKENVUlZFLnJhbmRvbUJ5dGVzKGxlbmd0aCksIENVUlZFLm4pO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBwcmVjb21wdXRlIHRhYmxlIGZvciBhbiBhcmJpdHJhcnkgRUMgcG9pbnQuIE1ha2VzIHBvaW50IFwiY2FjaGVkXCIuXG4gICAgICAgICAqIEFsbG93cyB0byBtYXNzaXZlbHkgc3BlZWQtdXAgYHBvaW50Lm11bHRpcGx5KHNjYWxhcilgLlxuICAgICAgICAgKiBAcmV0dXJucyBjYWNoZWQgcG9pbnRcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogY29uc3QgZmFzdCA9IHV0aWxzLnByZWNvbXB1dGUoOCwgUHJvamVjdGl2ZVBvaW50LmZyb21IZXgoc29tZW9uZXNQdWJLZXkpKTtcbiAgICAgICAgICogZmFzdC5tdWx0aXBseShwcml2S2V5KTsgLy8gbXVjaCBmYXN0ZXIgRUNESCBub3dcbiAgICAgICAgICovXG4gICAgICAgIHByZWNvbXB1dGUod2luZG93U2l6ZSA9IDgsIHBvaW50ID0gUG9pbnQuQkFTRSkge1xuICAgICAgICAgICAgcG9pbnQuX3NldFdpbmRvd1NpemUod2luZG93U2l6ZSk7XG4gICAgICAgICAgICBwb2ludC5tdWx0aXBseShCaWdJbnQoMykpOyAvLyAzIGlzIGFyYml0cmFyeSwganVzdCBuZWVkIGFueSBudW1iZXIgaGVyZVxuICAgICAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgICAgICB9LFxuICAgIH07XG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgcHVibGljIGtleSBmb3IgYSBwcml2YXRlIGtleS4gQ2hlY2tzIGZvciB2YWxpZGl0eSBvZiB0aGUgcHJpdmF0ZSBrZXkuXG4gICAgICogQHBhcmFtIHByaXZhdGVLZXkgcHJpdmF0ZSBrZXlcbiAgICAgKiBAcGFyYW0gaXNDb21wcmVzc2VkIHdoZXRoZXIgdG8gcmV0dXJuIGNvbXBhY3QgKGRlZmF1bHQpLCBvciBmdWxsIGtleVxuICAgICAqIEByZXR1cm5zIFB1YmxpYyBrZXksIGZ1bGwgd2hlbiBpc0NvbXByZXNzZWQ9ZmFsc2U7IHNob3J0IHdoZW4gaXNDb21wcmVzc2VkPXRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQdWJsaWNLZXkocHJpdmF0ZUtleSwgaXNDb21wcmVzc2VkID0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQuZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSkudG9SYXdCeXRlcyhpc0NvbXByZXNzZWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBRdWljayBhbmQgZGlydHkgY2hlY2sgZm9yIGl0ZW0gYmVpbmcgcHVibGljIGtleS4gRG9lcyBub3QgdmFsaWRhdGUgaGV4LCBvciBiZWluZyBvbi1jdXJ2ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1Byb2JQdWIoaXRlbSkge1xuICAgICAgICBjb25zdCBhcnIgPSB1dC5pc0J5dGVzKGl0ZW0pO1xuICAgICAgICBjb25zdCBzdHIgPSB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZyc7XG4gICAgICAgIGNvbnN0IGxlbiA9IChhcnIgfHwgc3RyKSAmJiBpdGVtLmxlbmd0aDtcbiAgICAgICAgaWYgKGFycilcbiAgICAgICAgICAgIHJldHVybiBsZW4gPT09IGNvbXByZXNzZWRMZW4gfHwgbGVuID09PSB1bmNvbXByZXNzZWRMZW47XG4gICAgICAgIGlmIChzdHIpXG4gICAgICAgICAgICByZXR1cm4gbGVuID09PSAyICogY29tcHJlc3NlZExlbiB8fCBsZW4gPT09IDIgKiB1bmNvbXByZXNzZWRMZW47XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUG9pbnQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFQ0RIIChFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUgSGVsbG1hbikuXG4gICAgICogQ29tcHV0ZXMgc2hhcmVkIHB1YmxpYyBrZXkgZnJvbSBwcml2YXRlIGtleSBhbmQgcHVibGljIGtleS5cbiAgICAgKiBDaGVja3M6IDEpIHByaXZhdGUga2V5IHZhbGlkaXR5IDIpIHNoYXJlZCBrZXkgaXMgb24tY3VydmUuXG4gICAgICogRG9lcyBOT1QgaGFzaCB0aGUgcmVzdWx0LlxuICAgICAqIEBwYXJhbSBwcml2YXRlQSBwcml2YXRlIGtleVxuICAgICAqIEBwYXJhbSBwdWJsaWNCIGRpZmZlcmVudCBwdWJsaWMga2V5XG4gICAgICogQHBhcmFtIGlzQ29tcHJlc3NlZCB3aGV0aGVyIHRvIHJldHVybiBjb21wYWN0IChkZWZhdWx0KSwgb3IgZnVsbCBrZXlcbiAgICAgKiBAcmV0dXJucyBzaGFyZWQgcHVibGljIGtleVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFNoYXJlZFNlY3JldChwcml2YXRlQSwgcHVibGljQiwgaXNDb21wcmVzc2VkID0gdHJ1ZSkge1xuICAgICAgICBpZiAoaXNQcm9iUHViKHByaXZhdGVBKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3QgYXJnIG11c3QgYmUgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgaWYgKCFpc1Byb2JQdWIocHVibGljQikpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY29uZCBhcmcgbXVzdCBiZSBwdWJsaWMga2V5Jyk7XG4gICAgICAgIGNvbnN0IGIgPSBQb2ludC5mcm9tSGV4KHB1YmxpY0IpOyAvLyBjaGVjayBmb3IgYmVpbmcgb24tY3VydmVcbiAgICAgICAgcmV0dXJuIGIubXVsdGlwbHkobm9ybVByaXZhdGVLZXlUb1NjYWxhcihwcml2YXRlQSkpLnRvUmF3Qnl0ZXMoaXNDb21wcmVzc2VkKTtcbiAgICB9XG4gICAgLy8gUkZDNjk3OTogZW5zdXJlIEVDRFNBIG1zZyBpcyBYIGJ5dGVzIGFuZCA8IE4uIFJGQyBzdWdnZXN0cyBvcHRpb25hbCB0cnVuY2F0aW5nIHZpYSBiaXRzMm9jdGV0cy5cbiAgICAvLyBGSVBTIDE4Ni00IDQuNiBzdWdnZXN0cyB0aGUgbGVmdG1vc3QgbWluKG5CaXRMZW4sIG91dExlbikgYml0cywgd2hpY2ggbWF0Y2hlcyBiaXRzMmludC5cbiAgICAvLyBiaXRzMmludCBjYW4gcHJvZHVjZSByZXM+Tiwgd2UgY2FuIGRvIG1vZChyZXMsIE4pIHNpbmNlIHRoZSBiaXRMZW4gaXMgdGhlIHNhbWUuXG4gICAgLy8gaW50Mm9jdGV0cyBjYW4ndCBiZSB1c2VkOyBwYWRzIHNtYWxsIG1zZ3Mgd2l0aCAwOiB1bmFjY2VwdGF0YmxlIGZvciB0cnVuYyBhcyBwZXIgUkZDIHZlY3RvcnNcbiAgICBjb25zdCBiaXRzMmludCA9IENVUlZFLmJpdHMyaW50IHx8XG4gICAgICAgIGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICAgICAgLy8gRm9yIGN1cnZlcyB3aXRoIG5CaXRMZW5ndGggJSA4ICE9PSAwOiBiaXRzMm9jdGV0cyhiaXRzMm9jdGV0cyhtKSkgIT09IGJpdHMyb2N0ZXRzKG0pXG4gICAgICAgICAgICAvLyBmb3Igc29tZSBjYXNlcywgc2luY2UgYnl0ZXMubGVuZ3RoICogOCBpcyBub3QgYWN0dWFsIGJpdExlbmd0aC5cbiAgICAgICAgICAgIGNvbnN0IG51bSA9IHV0LmJ5dGVzVG9OdW1iZXJCRShieXRlcyk7IC8vIGNoZWNrIGZvciA9PSB1OCBkb25lIGhlcmVcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gYnl0ZXMubGVuZ3RoICogOCAtIENVUlZFLm5CaXRMZW5ndGg7IC8vIHRydW5jYXRlIHRvIG5CaXRMZW5ndGggbGVmdG1vc3QgYml0c1xuICAgICAgICAgICAgcmV0dXJuIGRlbHRhID4gMCA/IG51bSA+PiBCaWdJbnQoZGVsdGEpIDogbnVtO1xuICAgICAgICB9O1xuICAgIGNvbnN0IGJpdHMyaW50X21vZE4gPSBDVVJWRS5iaXRzMmludF9tb2ROIHx8XG4gICAgICAgIGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG1vZE4oYml0czJpbnQoYnl0ZXMpKTsgLy8gY2FuJ3QgdXNlIGJ5dGVzVG9OdW1iZXJCRSBoZXJlXG4gICAgICAgIH07XG4gICAgLy8gTk9URTogcGFkcyBvdXRwdXQgd2l0aCB6ZXJvIGFzIHBlciBzcGVjXG4gICAgY29uc3QgT1JERVJfTUFTSyA9IHV0LmJpdE1hc2soQ1VSVkUubkJpdExlbmd0aCk7XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdG8gYnl0ZXMuIENoZWNrcyBpZiBudW0gaW4gYFswLi5PUkRFUl9NQVNLLTFdYCBlLmcuOiBgWzAuLjJeMjU2LTFdYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnQyb2N0ZXRzKG51bSkge1xuICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ2JpZ2ludCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpZ2ludCBleHBlY3RlZCcpO1xuICAgICAgICBpZiAoIShfMG4gPD0gbnVtICYmIG51bSA8IE9SREVSX01BU0spKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaWdpbnQgZXhwZWN0ZWQgPCAyXiR7Q1VSVkUubkJpdExlbmd0aH1gKTtcbiAgICAgICAgLy8gd29ya3Mgd2l0aCBvcmRlciwgY2FuIGhhdmUgZGlmZmVyZW50IHNpemUgdGhhbiBudW1Ub0ZpZWxkIVxuICAgICAgICByZXR1cm4gdXQubnVtYmVyVG9CeXRlc0JFKG51bSwgQ1VSVkUubkJ5dGVMZW5ndGgpO1xuICAgIH1cbiAgICAvLyBTdGVwcyBBLCBEIG9mIFJGQzY5NzkgMy4yXG4gICAgLy8gQ3JlYXRlcyBSRkM2OTc5IHNlZWQ7IGNvbnZlcnRzIG1zZy9wcml2S2V5IHRvIG51bWJlcnMuXG4gICAgLy8gVXNlZCBvbmx5IGluIHNpZ24sIG5vdCBpbiB2ZXJpZnkuXG4gICAgLy8gTk9URTogd2UgY2Fubm90IGFzc3VtZSBoZXJlIHRoYXQgbXNnSGFzaCBoYXMgc2FtZSBhbW91bnQgb2YgYnl0ZXMgYXMgY3VydmUgb3JkZXIsIHRoaXMgd2lsbCBiZSB3cm9uZyBhdCBsZWFzdCBmb3IgUDUyMS5cbiAgICAvLyBBbHNvIGl0IGNhbiBiZSBiaWdnZXIgZm9yIFAyMjQgKyBTSEEyNTZcbiAgICBmdW5jdGlvbiBwcmVwU2lnKG1zZ0hhc2gsIHByaXZhdGVLZXksIG9wdHMgPSBkZWZhdWx0U2lnT3B0cykge1xuICAgICAgICBpZiAoWydyZWNvdmVyZWQnLCAnY2Fub25pY2FsJ10uc29tZSgoaykgPT4gayBpbiBvcHRzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbigpIGxlZ2FjeSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgY29uc3QgeyBoYXNoLCByYW5kb21CeXRlcyB9ID0gQ1VSVkU7XG4gICAgICAgIGxldCB7IGxvd1MsIHByZWhhc2gsIGV4dHJhRW50cm9weTogZW50IH0gPSBvcHRzOyAvLyBnZW5lcmF0ZXMgbG93LXMgc2lncyBieSBkZWZhdWx0XG4gICAgICAgIGlmIChsb3dTID09IG51bGwpXG4gICAgICAgICAgICBsb3dTID0gdHJ1ZTsgLy8gUkZDNjk3OSAzLjI6IHdlIHNraXAgc3RlcCBBLCBiZWNhdXNlIHdlIGFscmVhZHkgcHJvdmlkZSBoYXNoXG4gICAgICAgIG1zZ0hhc2ggPSBlbnN1cmVCeXRlcygnbXNnSGFzaCcsIG1zZ0hhc2gpO1xuICAgICAgICBpZiAocHJlaGFzaClcbiAgICAgICAgICAgIG1zZ0hhc2ggPSBlbnN1cmVCeXRlcygncHJlaGFzaGVkIG1zZ0hhc2gnLCBoYXNoKG1zZ0hhc2gpKTtcbiAgICAgICAgLy8gV2UgY2FuJ3QgbGF0ZXIgY2FsbCBiaXRzMm9jdGV0cywgc2luY2UgbmVzdGVkIGJpdHMyaW50IGlzIGJyb2tlbiBmb3IgY3VydmVzXG4gICAgICAgIC8vIHdpdGggbkJpdExlbmd0aCAlIDggIT09IDAuIEJlY2F1c2Ugb2YgdGhhdCwgd2UgdW53cmFwIGl0IGhlcmUgYXMgaW50Mm9jdGV0cyBjYWxsLlxuICAgICAgICAvLyBjb25zdCBiaXRzMm9jdGV0cyA9IChiaXRzKSA9PiBpbnQyb2N0ZXRzKGJpdHMyaW50X21vZE4oYml0cykpXG4gICAgICAgIGNvbnN0IGgxaW50ID0gYml0czJpbnRfbW9kTihtc2dIYXNoKTtcbiAgICAgICAgY29uc3QgZCA9IG5vcm1Qcml2YXRlS2V5VG9TY2FsYXIocHJpdmF0ZUtleSk7IC8vIHZhbGlkYXRlIHByaXZhdGUga2V5LCBjb252ZXJ0IHRvIGJpZ2ludFxuICAgICAgICBjb25zdCBzZWVkQXJncyA9IFtpbnQyb2N0ZXRzKGQpLCBpbnQyb2N0ZXRzKGgxaW50KV07XG4gICAgICAgIC8vIGV4dHJhRW50cm9weS4gUkZDNjk3OSAzLjY6IGFkZGl0aW9uYWwgaycgKG9wdGlvbmFsKS5cbiAgICAgICAgaWYgKGVudCAhPSBudWxsICYmIGVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIEsgPSBITUFDX0soViB8fCAweDAwIHx8IGludDJvY3RldHMoeCkgfHwgYml0czJvY3RldHMoaDEpIHx8IGsnKVxuICAgICAgICAgICAgY29uc3QgZSA9IGVudCA9PT0gdHJ1ZSA/IHJhbmRvbUJ5dGVzKEZwLkJZVEVTKSA6IGVudDsgLy8gZ2VuZXJhdGUgcmFuZG9tIGJ5dGVzIE9SIHBhc3MgYXMtaXNcbiAgICAgICAgICAgIHNlZWRBcmdzLnB1c2goZW5zdXJlQnl0ZXMoJ2V4dHJhRW50cm9weScsIGUpKTsgLy8gY2hlY2sgZm9yIGJlaW5nIGJ5dGVzXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlZCA9IHV0LmNvbmNhdEJ5dGVzKC4uLnNlZWRBcmdzKTsgLy8gU3RlcCBEIG9mIFJGQzY5NzkgMy4yXG4gICAgICAgIGNvbnN0IG0gPSBoMWludDsgLy8gTk9URTogbm8gbmVlZCB0byBjYWxsIGJpdHMyaW50IHNlY29uZCB0aW1lIGhlcmUsIGl0IGlzIGluc2lkZSB0cnVuY2F0ZUhhc2ghXG4gICAgICAgIC8vIENvbnZlcnRzIHNpZ25hdHVyZSBwYXJhbXMgaW50byBwb2ludCB3IHIvcywgY2hlY2tzIHJlc3VsdCBmb3IgdmFsaWRpdHkuXG4gICAgICAgIGZ1bmN0aW9uIGsyc2lnKGtCeXRlcykge1xuICAgICAgICAgICAgLy8gUkZDIDY5NzkgU2VjdGlvbiAzLjIsIHN0ZXAgMzogayA9IGJpdHMyaW50KFQpXG4gICAgICAgICAgICBjb25zdCBrID0gYml0czJpbnQoa0J5dGVzKTsgLy8gQ2Fubm90IHVzZSBmaWVsZHMgbWV0aG9kcywgc2luY2UgaXQgaXMgZ3JvdXAgZWxlbWVudFxuICAgICAgICAgICAgaWYgKCFpc1dpdGhpbkN1cnZlT3JkZXIoaykpXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBJbXBvcnRhbnQ6IGFsbCBtb2QoKSBjYWxscyBoZXJlIG11c3QgYmUgZG9uZSBvdmVyIE5cbiAgICAgICAgICAgIGNvbnN0IGlrID0gaW52TihrKTsgLy8ga14tMSBtb2QgblxuICAgICAgICAgICAgY29uc3QgcSA9IFBvaW50LkJBU0UubXVsdGlwbHkoaykudG9BZmZpbmUoKTsgLy8gcSA9IEdrXG4gICAgICAgICAgICBjb25zdCByID0gbW9kTihxLngpOyAvLyByID0gcS54IG1vZCBuXG4gICAgICAgICAgICBpZiAociA9PT0gXzBuKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8vIENhbiB1c2Ugc2NhbGFyIGJsaW5kaW5nIGJeLTEoYm0gKyBiZHIpIHdoZXJlIGIg4oiIIFsxLHHiiJIxXSBhY2NvcmRpbmcgdG9cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vdGNoZXMuaWFjci5vcmcvaW5kZXgucGhwL1RDSEVTL2FydGljbGUvdmlldy83MzM3LzY1MDkuIFdlJ3ZlIGRlY2lkZWQgYWdhaW5zdCBpdDpcbiAgICAgICAgICAgIC8vIGEpIGRlcGVuZGVuY3kgb24gQ1NQUk5HIGIpIDE1JSBzbG93ZG93biBjKSBkb2Vzbid0IHJlYWxseSBoZWxwIHNpbmNlIGJpZ2ludHMgYXJlIG5vdCBDVFxuICAgICAgICAgICAgY29uc3QgcyA9IG1vZE4oaWsgKiBtb2ROKG0gKyByICogZCkpOyAvLyBOb3QgdXNpbmcgYmxpbmRpbmcgaGVyZVxuICAgICAgICAgICAgaWYgKHMgPT09IF8wbilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBsZXQgcmVjb3ZlcnkgPSAocS54ID09PSByID8gMCA6IDIpIHwgTnVtYmVyKHEueSAmIF8xbik7IC8vIHJlY292ZXJ5IGJpdCAoMiBvciAzLCB3aGVuIHEueCA+IG4pXG4gICAgICAgICAgICBsZXQgbm9ybVMgPSBzO1xuICAgICAgICAgICAgaWYgKGxvd1MgJiYgaXNCaWdnZXJUaGFuSGFsZk9yZGVyKHMpKSB7XG4gICAgICAgICAgICAgICAgbm9ybVMgPSBub3JtYWxpemVTKHMpOyAvLyBpZiBsb3dTIHdhcyBwYXNzZWQsIGVuc3VyZSBzIGlzIGFsd2F5c1xuICAgICAgICAgICAgICAgIHJlY292ZXJ5IF49IDE7IC8vIC8vIGluIHRoZSBib3R0b20gaGFsZiBvZiBOXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShyLCBub3JtUywgcmVjb3ZlcnkpOyAvLyB1c2Ugbm9ybVMsIG5vdCBzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc2VlZCwgazJzaWcgfTtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFNpZ09wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07XG4gICAgY29uc3QgZGVmYXVsdFZlck9wdHMgPSB7IGxvd1M6IENVUlZFLmxvd1MsIHByZWhhc2g6IGZhbHNlIH07XG4gICAgLyoqXG4gICAgICogU2lnbnMgbWVzc2FnZSBoYXNoIHdpdGggYSBwcml2YXRlIGtleS5cbiAgICAgKiBgYGBcbiAgICAgKiBzaWduKG0sIGQsIGspIHdoZXJlXG4gICAgICogICAoeCwgeSkgPSBHIMOXIGtcbiAgICAgKiAgIHIgPSB4IG1vZCBuXG4gICAgICogICBzID0gKG0gKyBkcikvayBtb2QgblxuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBtc2dIYXNoIE5PVCBtZXNzYWdlLiBtc2cgbmVlZHMgdG8gYmUgaGFzaGVkIHRvIGBtc2dIYXNoYCwgb3IgdXNlIGBwcmVoYXNoYC5cbiAgICAgKiBAcGFyYW0gcHJpdktleSBwcml2YXRlIGtleVxuICAgICAqIEBwYXJhbSBvcHRzIGxvd1MgZm9yIG5vbi1tYWxsZWFibGUgc2lncy4gZXh0cmFFbnRyb3B5IGZvciBtaXhpbmcgcmFuZG9tbmVzcyBpbnRvIGsuIHByZWhhc2ggd2lsbCBoYXNoIGZpcnN0IGFyZy5cbiAgICAgKiBAcmV0dXJucyBzaWduYXR1cmUgd2l0aCByZWNvdmVyeSBwYXJhbVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNpZ24obXNnSGFzaCwgcHJpdktleSwgb3B0cyA9IGRlZmF1bHRTaWdPcHRzKSB7XG4gICAgICAgIGNvbnN0IHsgc2VlZCwgazJzaWcgfSA9IHByZXBTaWcobXNnSGFzaCwgcHJpdktleSwgb3B0cyk7IC8vIFN0ZXBzIEEsIEQgb2YgUkZDNjk3OSAzLjIuXG4gICAgICAgIGNvbnN0IEMgPSBDVVJWRTtcbiAgICAgICAgY29uc3QgZHJiZyA9IHV0LmNyZWF0ZUhtYWNEcmJnKEMuaGFzaC5vdXRwdXRMZW4sIEMubkJ5dGVMZW5ndGgsIEMuaG1hYyk7XG4gICAgICAgIHJldHVybiBkcmJnKHNlZWQsIGsyc2lnKTsgLy8gU3RlcHMgQiwgQywgRCwgRSwgRiwgR1xuICAgIH1cbiAgICAvLyBFbmFibGUgcHJlY29tcHV0ZXMuIFNsb3dzIGRvd24gZmlyc3QgcHVibGljS2V5IGNvbXB1dGF0aW9uIGJ5IDIwbXMuXG4gICAgUG9pbnQuQkFTRS5fc2V0V2luZG93U2l6ZSg4KTtcbiAgICAvLyB1dGlscy5wcmVjb21wdXRlKDgsIFByb2plY3RpdmVQb2ludC5CQVNFKVxuICAgIC8qKlxuICAgICAqIFZlcmlmaWVzIGEgc2lnbmF0dXJlIGFnYWluc3QgbWVzc2FnZSBoYXNoIGFuZCBwdWJsaWMga2V5LlxuICAgICAqIFJlamVjdHMgbG93UyBzaWduYXR1cmVzIGJ5IGRlZmF1bHQ6IHRvIG92ZXJyaWRlLFxuICAgICAqIHNwZWNpZnkgb3B0aW9uIGB7bG93UzogZmFsc2V9YC4gSW1wbGVtZW50cyBzZWN0aW9uIDQuMS40IGZyb20gaHR0cHM6Ly93d3cuc2VjZy5vcmcvc2VjMS12Mi5wZGY6XG4gICAgICpcbiAgICAgKiBgYGBcbiAgICAgKiB2ZXJpZnkociwgcywgaCwgUCkgd2hlcmVcbiAgICAgKiAgIFUxID0gaHNeLTEgbW9kIG5cbiAgICAgKiAgIFUyID0gcnNeLTEgbW9kIG5cbiAgICAgKiAgIFIgPSBVMeKLhUcgLSBVMuKLhVBcbiAgICAgKiAgIG1vZChSLngsIG4pID09IHJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2ZXJpZnkoc2lnbmF0dXJlLCBtc2dIYXNoLCBwdWJsaWNLZXksIG9wdHMgPSBkZWZhdWx0VmVyT3B0cykge1xuICAgICAgICBjb25zdCBzZyA9IHNpZ25hdHVyZTtcbiAgICAgICAgbXNnSGFzaCA9IGVuc3VyZUJ5dGVzKCdtc2dIYXNoJywgbXNnSGFzaCk7XG4gICAgICAgIHB1YmxpY0tleSA9IGVuc3VyZUJ5dGVzKCdwdWJsaWNLZXknLCBwdWJsaWNLZXkpO1xuICAgICAgICBpZiAoJ3N0cmljdCcgaW4gb3B0cylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5zdHJpY3Qgd2FzIHJlbmFtZWQgdG8gbG93UycpO1xuICAgICAgICBjb25zdCB7IGxvd1MsIHByZWhhc2ggfSA9IG9wdHM7XG4gICAgICAgIGxldCBfc2lnID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgUDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2cgPT09ICdzdHJpbmcnIHx8IHV0LmlzQnl0ZXMoc2cpKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lnbmF0dXJlIGNhbiBiZSByZXByZXNlbnRlZCBpbiAyIHdheXM6IGNvbXBhY3QgKDIqbkJ5dGVMZW5ndGgpICYgREVSICh2YXJpYWJsZS1sZW5ndGgpLlxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIERFUiBjYW4gYWxzbyBiZSAyKm5CeXRlTGVuZ3RoIGJ5dGVzLCB3ZSBjaGVjayBmb3IgaXQgZmlyc3QuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tREVSKHNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGRlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRlckVycm9yIGluc3RhbmNlb2YgREVSLkVycikpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgX3NpZyA9IFNpZ25hdHVyZS5mcm9tQ29tcGFjdChzZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNnID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygc2cuciA9PT0gJ2JpZ2ludCcgJiYgdHlwZW9mIHNnLnMgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyByLCBzIH0gPSBzZztcbiAgICAgICAgICAgICAgICBfc2lnID0gbmV3IFNpZ25hdHVyZShyLCBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUEFSU0UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFAgPSBQb2ludC5mcm9tSGV4KHB1YmxpY0tleSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSA9PT0gJ1BBUlNFJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZSBtdXN0IGJlIFNpZ25hdHVyZSBpbnN0YW5jZSwgVWludDhBcnJheSBvciBoZXggc3RyaW5nYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd1MgJiYgX3NpZy5oYXNIaWdoUygpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocHJlaGFzaClcbiAgICAgICAgICAgIG1zZ0hhc2ggPSBDVVJWRS5oYXNoKG1zZ0hhc2gpO1xuICAgICAgICBjb25zdCB7IHIsIHMgfSA9IF9zaWc7XG4gICAgICAgIGNvbnN0IGggPSBiaXRzMmludF9tb2ROKG1zZ0hhc2gpOyAvLyBDYW5ub3QgdXNlIGZpZWxkcyBtZXRob2RzLCBzaW5jZSBpdCBpcyBncm91cCBlbGVtZW50XG4gICAgICAgIGNvbnN0IGlzID0gaW52TihzKTsgLy8gc14tMVxuICAgICAgICBjb25zdCB1MSA9IG1vZE4oaCAqIGlzKTsgLy8gdTEgPSBoc14tMSBtb2QgblxuICAgICAgICBjb25zdCB1MiA9IG1vZE4ociAqIGlzKTsgLy8gdTIgPSByc14tMSBtb2QgblxuICAgICAgICBjb25zdCBSID0gUG9pbnQuQkFTRS5tdWx0aXBseUFuZEFkZFVuc2FmZShQLCB1MSwgdTIpPy50b0FmZmluZSgpOyAvLyBSID0gdTHii4VHICsgdTLii4VQXG4gICAgICAgIGlmICghUilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgdiA9IG1vZE4oUi54KTtcbiAgICAgICAgcmV0dXJuIHYgPT09IHI7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIENVUlZFLFxuICAgICAgICBnZXRQdWJsaWNLZXksXG4gICAgICAgIGdldFNoYXJlZFNlY3JldCxcbiAgICAgICAgc2lnbixcbiAgICAgICAgdmVyaWZ5LFxuICAgICAgICBQcm9qZWN0aXZlUG9pbnQ6IFBvaW50LFxuICAgICAgICBTaWduYXR1cmUsXG4gICAgICAgIHV0aWxzLFxuICAgIH07XG59XG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGFsbHVlIGFuZCB2YW4gZGUgV29lc3Rpam5lIG1ldGhvZCBmb3IgYW55IHdlaWVyc3RyYXNzIGN1cnZlLlxuICogVE9ETzogY2hlY2sgaWYgdGhlcmUgaXMgYSB3YXkgdG8gbWVyZ2UgdGhpcyB3aXRoIHV2UmF0aW8gaW4gRWR3YXJkczsgbW92ZSB0byBtb2R1bGFyLlxuICogYiA9IFRydWUgYW5kIHkgPSBzcXJ0KHUgLyB2KSBpZiAodSAvIHYpIGlzIHNxdWFyZSBpbiBGLCBhbmRcbiAqIGIgPSBGYWxzZSBhbmQgeSA9IHNxcnQoWiAqICh1IC8gdikpIG90aGVyd2lzZS5cbiAqIEBwYXJhbSBGcFxuICogQHBhcmFtIFpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTV1VGcFNxcnRSYXRpbyhGcCwgWikge1xuICAgIC8vIEdlbmVyaWMgaW1wbGVtZW50YXRpb25cbiAgICBjb25zdCBxID0gRnAuT1JERVI7XG4gICAgbGV0IGwgPSBfMG47XG4gICAgZm9yIChsZXQgbyA9IHEgLSBfMW47IG8gJSBfMm4gPT09IF8wbjsgbyAvPSBfMm4pXG4gICAgICAgIGwgKz0gXzFuO1xuICAgIGNvbnN0IGMxID0gbDsgLy8gMS4gYzEsIHRoZSBsYXJnZXN0IGludGVnZXIgc3VjaCB0aGF0IDJeYzEgZGl2aWRlcyBxIC0gMS5cbiAgICAvLyBXZSBuZWVkIDJuICoqIGMxIGFuZCAybiAqKiAoYzEtMSkuIFdlIGNhbid0IHVzZSAqKjsgYnV0IHdlIGNhbiB1c2UgPDwuXG4gICAgLy8gMm4gKiogYzEgPT0gMm4gPDwgKGMxLTEpXG4gICAgY29uc3QgXzJuX3Bvd19jMV8xID0gXzJuIDw8IChjMSAtIF8xbiAtIF8xbik7XG4gICAgY29uc3QgXzJuX3Bvd19jMSA9IF8ybl9wb3dfYzFfMSAqIF8ybjtcbiAgICBjb25zdCBjMiA9IChxIC0gXzFuKSAvIF8ybl9wb3dfYzE7IC8vIDIuIGMyID0gKHEgLSAxKSAvICgyXmMxKSAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICBjb25zdCBjMyA9IChjMiAtIF8xbikgLyBfMm47IC8vIDMuIGMzID0gKGMyIC0gMSkgLyAyICAgICAgICAgICAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICBjb25zdCBjNCA9IF8ybl9wb3dfYzEgLSBfMW47IC8vIDQuIGM0ID0gMl5jMSAtIDEgICAgICAgICAgICAgICAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICBjb25zdCBjNSA9IF8ybl9wb3dfYzFfMTsgLy8gNS4gYzUgPSAyXihjMSAtIDEpICAgICAgICAgICAgICAgICAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICBjb25zdCBjNiA9IEZwLnBvdyhaLCBjMik7IC8vIDYuIGM2ID0gWl5jMlxuICAgIGNvbnN0IGM3ID0gRnAucG93KFosIChjMiArIF8xbikgLyBfMm4pOyAvLyA3LiBjNyA9IFpeKChjMiArIDEpIC8gMilcbiAgICBsZXQgc3FydFJhdGlvID0gKHUsIHYpID0+IHtcbiAgICAgICAgbGV0IHR2MSA9IGM2OyAvLyAxLiB0djEgPSBjNlxuICAgICAgICBsZXQgdHYyID0gRnAucG93KHYsIGM0KTsgLy8gMi4gdHYyID0gdl5jNFxuICAgICAgICBsZXQgdHYzID0gRnAuc3FyKHR2Mik7IC8vIDMuIHR2MyA9IHR2Ml4yXG4gICAgICAgIHR2MyA9IEZwLm11bCh0djMsIHYpOyAvLyA0LiB0djMgPSB0djMgKiB2XG4gICAgICAgIGxldCB0djUgPSBGcC5tdWwodSwgdHYzKTsgLy8gNS4gdHY1ID0gdSAqIHR2M1xuICAgICAgICB0djUgPSBGcC5wb3codHY1LCBjMyk7IC8vIDYuIHR2NSA9IHR2NV5jM1xuICAgICAgICB0djUgPSBGcC5tdWwodHY1LCB0djIpOyAvLyA3LiB0djUgPSB0djUgKiB0djJcbiAgICAgICAgdHYyID0gRnAubXVsKHR2NSwgdik7IC8vIDguIHR2MiA9IHR2NSAqIHZcbiAgICAgICAgdHYzID0gRnAubXVsKHR2NSwgdSk7IC8vIDkuIHR2MyA9IHR2NSAqIHVcbiAgICAgICAgbGV0IHR2NCA9IEZwLm11bCh0djMsIHR2Mik7IC8vIDEwLiB0djQgPSB0djMgKiB0djJcbiAgICAgICAgdHY1ID0gRnAucG93KHR2NCwgYzUpOyAvLyAxMS4gdHY1ID0gdHY0XmM1XG4gICAgICAgIGxldCBpc1FSID0gRnAuZXFsKHR2NSwgRnAuT05FKTsgLy8gMTIuIGlzUVIgPSB0djUgPT0gMVxuICAgICAgICB0djIgPSBGcC5tdWwodHYzLCBjNyk7IC8vIDEzLiB0djIgPSB0djMgKiBjN1xuICAgICAgICB0djUgPSBGcC5tdWwodHY0LCB0djEpOyAvLyAxNC4gdHY1ID0gdHY0ICogdHYxXG4gICAgICAgIHR2MyA9IEZwLmNtb3YodHYyLCB0djMsIGlzUVIpOyAvLyAxNS4gdHYzID0gQ01PVih0djIsIHR2MywgaXNRUilcbiAgICAgICAgdHY0ID0gRnAuY21vdih0djUsIHR2NCwgaXNRUik7IC8vIDE2LiB0djQgPSBDTU9WKHR2NSwgdHY0LCBpc1FSKVxuICAgICAgICAvLyAxNy4gZm9yIGkgaW4gKGMxLCBjMSAtIDEsIC4uLiwgMik6XG4gICAgICAgIGZvciAobGV0IGkgPSBjMTsgaSA+IF8xbjsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgdHY1ID0gaSAtIF8ybjsgLy8gMTguICAgIHR2NSA9IGkgLSAyXG4gICAgICAgICAgICB0djUgPSBfMm4gPDwgKHR2NSAtIF8xbik7IC8vIDE5LiAgICB0djUgPSAyXnR2NVxuICAgICAgICAgICAgbGV0IHR2djUgPSBGcC5wb3codHY0LCB0djUpOyAvLyAyMC4gICAgdHY1ID0gdHY0XnR2NVxuICAgICAgICAgICAgY29uc3QgZTEgPSBGcC5lcWwodHZ2NSwgRnAuT05FKTsgLy8gMjEuICAgIGUxID0gdHY1ID09IDFcbiAgICAgICAgICAgIHR2MiA9IEZwLm11bCh0djMsIHR2MSk7IC8vIDIyLiAgICB0djIgPSB0djMgKiB0djFcbiAgICAgICAgICAgIHR2MSA9IEZwLm11bCh0djEsIHR2MSk7IC8vIDIzLiAgICB0djEgPSB0djEgKiB0djFcbiAgICAgICAgICAgIHR2djUgPSBGcC5tdWwodHY0LCB0djEpOyAvLyAyNC4gICAgdHY1ID0gdHY0ICogdHYxXG4gICAgICAgICAgICB0djMgPSBGcC5jbW92KHR2MiwgdHYzLCBlMSk7IC8vIDI1LiAgICB0djMgPSBDTU9WKHR2MiwgdHYzLCBlMSlcbiAgICAgICAgICAgIHR2NCA9IEZwLmNtb3YodHZ2NSwgdHY0LCBlMSk7IC8vIDI2LiAgICB0djQgPSBDTU9WKHR2NSwgdHY0LCBlMSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBpc1FSLCB2YWx1ZTogdHYzIH07XG4gICAgfTtcbiAgICBpZiAoRnAuT1JERVIgJSBfNG4gPT09IF8zbikge1xuICAgICAgICAvLyBzcXJ0X3JhdGlvXzNtb2Q0KHUsIHYpXG4gICAgICAgIGNvbnN0IGMxID0gKEZwLk9SREVSIC0gXzNuKSAvIF80bjsgLy8gMS4gYzEgPSAocSAtIDMpIC8gNCAgICAgIyBJbnRlZ2VyIGFyaXRobWV0aWNcbiAgICAgICAgY29uc3QgYzIgPSBGcC5zcXJ0KEZwLm5lZyhaKSk7IC8vIDIuIGMyID0gc3FydCgtWilcbiAgICAgICAgc3FydFJhdGlvID0gKHUsIHYpID0+IHtcbiAgICAgICAgICAgIGxldCB0djEgPSBGcC5zcXIodik7IC8vIDEuIHR2MSA9IHZeMlxuICAgICAgICAgICAgY29uc3QgdHYyID0gRnAubXVsKHUsIHYpOyAvLyAyLiB0djIgPSB1ICogdlxuICAgICAgICAgICAgdHYxID0gRnAubXVsKHR2MSwgdHYyKTsgLy8gMy4gdHYxID0gdHYxICogdHYyXG4gICAgICAgICAgICBsZXQgeTEgPSBGcC5wb3codHYxLCBjMSk7IC8vIDQuIHkxID0gdHYxXmMxXG4gICAgICAgICAgICB5MSA9IEZwLm11bCh5MSwgdHYyKTsgLy8gNS4geTEgPSB5MSAqIHR2MlxuICAgICAgICAgICAgY29uc3QgeTIgPSBGcC5tdWwoeTEsIGMyKTsgLy8gNi4geTIgPSB5MSAqIGMyXG4gICAgICAgICAgICBjb25zdCB0djMgPSBGcC5tdWwoRnAuc3FyKHkxKSwgdik7IC8vIDcuIHR2MyA9IHkxXjI7IDguIHR2MyA9IHR2MyAqIHZcbiAgICAgICAgICAgIGNvbnN0IGlzUVIgPSBGcC5lcWwodHYzLCB1KTsgLy8gOS4gaXNRUiA9IHR2MyA9PSB1XG4gICAgICAgICAgICBsZXQgeSA9IEZwLmNtb3YoeTIsIHkxLCBpc1FSKTsgLy8gMTAuIHkgPSBDTU9WKHkyLCB5MSwgaXNRUilcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGlzUVIsIHZhbHVlOiB5IH07IC8vIDExLiByZXR1cm4gKGlzUVIsIHkpIGlzUVIgPyB5IDogeSpjMlxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBObyBjdXJ2ZXMgdXNlcyB0aGF0XG4gICAgLy8gaWYgKEZwLk9SREVSICUgXzhuID09PSBfNW4pIC8vIHNxcnRfcmF0aW9fNW1vZDhcbiAgICByZXR1cm4gc3FydFJhdGlvO1xufVxuLyoqXG4gKiBTaW1wbGlmaWVkIFNoYWxsdWUtdmFuIGRlIFdvZXN0aWpuZS1VbGFzIE1ldGhvZFxuICogaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkzODAjc2VjdGlvbi02LjYuMlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwgb3B0cykge1xuICAgIG1vZC52YWxpZGF0ZUZpZWxkKEZwKTtcbiAgICBpZiAoIUZwLmlzVmFsaWQob3B0cy5BKSB8fCAhRnAuaXNWYWxpZChvcHRzLkIpIHx8ICFGcC5pc1ZhbGlkKG9wdHMuWikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWFwVG9DdXJ2ZVNpbXBsZVNXVTogaW52YWxpZCBvcHRzJyk7XG4gICAgY29uc3Qgc3FydFJhdGlvID0gU1dVRnBTcXJ0UmF0aW8oRnAsIG9wdHMuWik7XG4gICAgaWYgKCFGcC5pc09kZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGcC5pc09kZCBpcyBub3QgaW1wbGVtZW50ZWQhJyk7XG4gICAgLy8gSW5wdXQ6IHUsIGFuIGVsZW1lbnQgb2YgRi5cbiAgICAvLyBPdXRwdXQ6ICh4LCB5KSwgYSBwb2ludCBvbiBFLlxuICAgIHJldHVybiAodSkgPT4ge1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgbGV0IHR2MSwgdHYyLCB0djMsIHR2NCwgdHY1LCB0djYsIHgsIHk7XG4gICAgICAgIHR2MSA9IEZwLnNxcih1KTsgLy8gMS4gIHR2MSA9IHVeMlxuICAgICAgICB0djEgPSBGcC5tdWwodHYxLCBvcHRzLlopOyAvLyAyLiAgdHYxID0gWiAqIHR2MVxuICAgICAgICB0djIgPSBGcC5zcXIodHYxKTsgLy8gMy4gIHR2MiA9IHR2MV4yXG4gICAgICAgIHR2MiA9IEZwLmFkZCh0djIsIHR2MSk7IC8vIDQuICB0djIgPSB0djIgKyB0djFcbiAgICAgICAgdHYzID0gRnAuYWRkKHR2MiwgRnAuT05FKTsgLy8gNS4gIHR2MyA9IHR2MiArIDFcbiAgICAgICAgdHYzID0gRnAubXVsKHR2Mywgb3B0cy5CKTsgLy8gNi4gIHR2MyA9IEIgKiB0djNcbiAgICAgICAgdHY0ID0gRnAuY21vdihvcHRzLlosIEZwLm5lZyh0djIpLCAhRnAuZXFsKHR2MiwgRnAuWkVSTykpOyAvLyA3LiAgdHY0ID0gQ01PVihaLCAtdHYyLCB0djIgIT0gMClcbiAgICAgICAgdHY0ID0gRnAubXVsKHR2NCwgb3B0cy5BKTsgLy8gOC4gIHR2NCA9IEEgKiB0djRcbiAgICAgICAgdHYyID0gRnAuc3FyKHR2Myk7IC8vIDkuICB0djIgPSB0djNeMlxuICAgICAgICB0djYgPSBGcC5zcXIodHY0KTsgLy8gMTAuIHR2NiA9IHR2NF4yXG4gICAgICAgIHR2NSA9IEZwLm11bCh0djYsIG9wdHMuQSk7IC8vIDExLiB0djUgPSBBICogdHY2XG4gICAgICAgIHR2MiA9IEZwLmFkZCh0djIsIHR2NSk7IC8vIDEyLiB0djIgPSB0djIgKyB0djVcbiAgICAgICAgdHYyID0gRnAubXVsKHR2MiwgdHYzKTsgLy8gMTMuIHR2MiA9IHR2MiAqIHR2M1xuICAgICAgICB0djYgPSBGcC5tdWwodHY2LCB0djQpOyAvLyAxNC4gdHY2ID0gdHY2ICogdHY0XG4gICAgICAgIHR2NSA9IEZwLm11bCh0djYsIG9wdHMuQik7IC8vIDE1LiB0djUgPSBCICogdHY2XG4gICAgICAgIHR2MiA9IEZwLmFkZCh0djIsIHR2NSk7IC8vIDE2LiB0djIgPSB0djIgKyB0djVcbiAgICAgICAgeCA9IEZwLm11bCh0djEsIHR2Myk7IC8vIDE3LiAgIHggPSB0djEgKiB0djNcbiAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCB2YWx1ZSB9ID0gc3FydFJhdGlvKHR2MiwgdHY2KTsgLy8gMTguIChpc19neDFfc3F1YXJlLCB5MSkgPSBzcXJ0X3JhdGlvKHR2MiwgdHY2KVxuICAgICAgICB5ID0gRnAubXVsKHR2MSwgdSk7IC8vIDE5LiAgIHkgPSB0djEgKiB1ICAtPiBaICogdV4zICogeTFcbiAgICAgICAgeSA9IEZwLm11bCh5LCB2YWx1ZSk7IC8vIDIwLiAgIHkgPSB5ICogeTFcbiAgICAgICAgeCA9IEZwLmNtb3YoeCwgdHYzLCBpc1ZhbGlkKTsgLy8gMjEuICAgeCA9IENNT1YoeCwgdHYzLCBpc19neDFfc3F1YXJlKVxuICAgICAgICB5ID0gRnAuY21vdih5LCB2YWx1ZSwgaXNWYWxpZCk7IC8vIDIyLiAgIHkgPSBDTU9WKHksIHkxLCBpc19neDFfc3F1YXJlKVxuICAgICAgICBjb25zdCBlMSA9IEZwLmlzT2RkKHUpID09PSBGcC5pc09kZCh5KTsgLy8gMjMuICBlMSA9IHNnbjAodSkgPT0gc2duMCh5KVxuICAgICAgICB5ID0gRnAuY21vdihGcC5uZWcoeSksIHksIGUxKTsgLy8gMjQuICAgeSA9IENNT1YoLXksIHksIGUxKVxuICAgICAgICB4ID0gRnAuZGl2KHgsIHR2NCk7IC8vIDI1LiAgIHggPSB4IC8gdHY0XG4gICAgICAgIHJldHVybiB7IHgsIHkgfTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2VpZXJzdHJhc3MuanMubWFwIiwiLyohIG5vYmxlLWN1cnZlcyAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL1xuaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGEyNTYnO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7IEZpZWxkLCBtb2QsIHBvdzIgfSBmcm9tICcuL2Fic3RyYWN0L21vZHVsYXIuanMnO1xuaW1wb3J0IHsgbWFwVG9DdXJ2ZVNpbXBsZVNXVSB9IGZyb20gJy4vYWJzdHJhY3Qvd2VpZXJzdHJhc3MuanMnO1xuaW1wb3J0IHsgYnl0ZXNUb051bWJlckJFLCBjb25jYXRCeXRlcywgZW5zdXJlQnl0ZXMsIG51bWJlclRvQnl0ZXNCRSB9IGZyb20gJy4vYWJzdHJhY3QvdXRpbHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaGVyLCBpc29nZW55TWFwIH0gZnJvbSAnLi9hYnN0cmFjdC9oYXNoLXRvLWN1cnZlLmpzJztcbmltcG9ydCB7IGNyZWF0ZUN1cnZlIH0gZnJvbSAnLi9fc2hvcnR3X3V0aWxzLmpzJztcbmNvbnN0IHNlY3AyNTZrMVAgPSBCaWdJbnQoJzB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmMyZicpO1xuY29uc3Qgc2VjcDI1NmsxTiA9IEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxJyk7XG5jb25zdCBfMW4gPSBCaWdJbnQoMSk7XG5jb25zdCBfMm4gPSBCaWdJbnQoMik7XG5jb25zdCBkaXZOZWFyZXN0ID0gKGEsIGIpID0+IChhICsgYiAvIF8ybikgLyBiO1xuLyoqXG4gKiDiiJpuID0gbl4oKHArMSkvNCkgZm9yIGZpZWxkcyBwID0gMyBtb2QgNC4gV2UgdW53cmFwIHRoZSBsb29wIGFuZCBtdWx0aXBseSBiaXQtYnktYml0LlxuICogKFArMW4vNG4pLnRvU3RyaW5nKDIpIHdvdWxkIHByb2R1Y2UgYml0cyBbMjIzeCAxLCAwLCAyMnggMSwgNHggMCwgMTEsIDAwXVxuICovXG5mdW5jdGlvbiBzcXJ0TW9kKHkpIHtcbiAgICBjb25zdCBQID0gc2VjcDI1NmsxUDtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBfM24gPSBCaWdJbnQoMyksIF82biA9IEJpZ0ludCg2KSwgXzExbiA9IEJpZ0ludCgxMSksIF8yMm4gPSBCaWdJbnQoMjIpO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGNvbnN0IF8yM24gPSBCaWdJbnQoMjMpLCBfNDRuID0gQmlnSW50KDQ0KSwgXzg4biA9IEJpZ0ludCg4OCk7XG4gICAgY29uc3QgYjIgPSAoeSAqIHkgKiB5KSAlIFA7IC8vIHheMywgMTFcbiAgICBjb25zdCBiMyA9IChiMiAqIGIyICogeSkgJSBQOyAvLyB4XjdcbiAgICBjb25zdCBiNiA9IChwb3cyKGIzLCBfM24sIFApICogYjMpICUgUDtcbiAgICBjb25zdCBiOSA9IChwb3cyKGI2LCBfM24sIFApICogYjMpICUgUDtcbiAgICBjb25zdCBiMTEgPSAocG93MihiOSwgXzJuLCBQKSAqIGIyKSAlIFA7XG4gICAgY29uc3QgYjIyID0gKHBvdzIoYjExLCBfMTFuLCBQKSAqIGIxMSkgJSBQO1xuICAgIGNvbnN0IGI0NCA9IChwb3cyKGIyMiwgXzIybiwgUCkgKiBiMjIpICUgUDtcbiAgICBjb25zdCBiODggPSAocG93MihiNDQsIF80NG4sIFApICogYjQ0KSAlIFA7XG4gICAgY29uc3QgYjE3NiA9IChwb3cyKGI4OCwgXzg4biwgUCkgKiBiODgpICUgUDtcbiAgICBjb25zdCBiMjIwID0gKHBvdzIoYjE3NiwgXzQ0biwgUCkgKiBiNDQpICUgUDtcbiAgICBjb25zdCBiMjIzID0gKHBvdzIoYjIyMCwgXzNuLCBQKSAqIGIzKSAlIFA7XG4gICAgY29uc3QgdDEgPSAocG93MihiMjIzLCBfMjNuLCBQKSAqIGIyMikgJSBQO1xuICAgIGNvbnN0IHQyID0gKHBvdzIodDEsIF82biwgUCkgKiBiMikgJSBQO1xuICAgIGNvbnN0IHJvb3QgPSBwb3cyKHQyLCBfMm4sIFApO1xuICAgIGlmICghRnAuZXFsKEZwLnNxcihyb290KSwgeSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgc3F1YXJlIHJvb3QnKTtcbiAgICByZXR1cm4gcm9vdDtcbn1cbmNvbnN0IEZwID0gRmllbGQoc2VjcDI1NmsxUCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgc3FydDogc3FydE1vZCB9KTtcbmV4cG9ydCBjb25zdCBzZWNwMjU2azEgPSBjcmVhdGVDdXJ2ZSh7XG4gICAgYTogQmlnSW50KDApLCAvLyBlcXVhdGlvbiBwYXJhbXM6IGEsIGJcbiAgICBiOiBCaWdJbnQoNyksIC8vIFNlZW0gdG8gYmUgcmlnaWQ6IGJpdGNvaW50YWxrLm9yZy9pbmRleC5waHA/dG9waWM9Mjg5Nzk1Lm1zZzMxODM5NzUjbXNnMzE4Mzk3NVxuICAgIEZwLCAvLyBGaWVsZCdzIHByaW1lOiAybioqMjU2biAtIDJuKiozMm4gLSAybioqOW4gLSAybioqOG4gLSAybioqN24gLSAybioqNm4gLSAybioqNG4gLSAxblxuICAgIG46IHNlY3AyNTZrMU4sIC8vIEN1cnZlIG9yZGVyLCB0b3RhbCBjb3VudCBvZiB2YWxpZCBwb2ludHMgaW4gdGhlIGZpZWxkXG4gICAgLy8gQmFzZSBwb2ludCAoeCwgeSkgYWthIGdlbmVyYXRvciBwb2ludFxuICAgIEd4OiBCaWdJbnQoJzU1MDY2MjYzMDIyMjc3MzQzNjY5NTc4NzE4ODk1MTY4NTM0MzI2MjUwNjAzNDUzNzc3NTk0MTc1NTAwMTg3MzYwMzg5MTE2NzI5MjQwJyksXG4gICAgR3k6IEJpZ0ludCgnMzI2NzA1MTAwMjA3NTg4MTY5NzgwODMwODUxMzA1MDcwNDMxODQ0NzEyNzMzODA2NTkyNDMyNzU5Mzg5MDQzMzU3NTczMzc0ODI0MjQnKSxcbiAgICBoOiBCaWdJbnQoMSksIC8vIENvZmFjdG9yXG4gICAgbG93UzogdHJ1ZSwgLy8gQWxsb3cgb25seSBsb3ctUyBzaWduYXR1cmVzIGJ5IGRlZmF1bHQgaW4gc2lnbigpIGFuZCB2ZXJpZnkoKVxuICAgIC8qKlxuICAgICAqIHNlY3AyNTZrMSBiZWxvbmdzIHRvIEtvYmxpdHogY3VydmVzOiBpdCBoYXMgZWZmaWNpZW50bHkgY29tcHV0YWJsZSBlbmRvbW9ycGhpc20uXG4gICAgICogRW5kb21vcnBoaXNtIHVzZXMgMnggbGVzcyBSQU0sIHNwZWVkcyB1cCBwcmVjb21wdXRhdGlvbiBieSAyeCBhbmQgRUNESCAvIGtleSByZWNvdmVyeSBieSAyMCUuXG4gICAgICogRm9yIHByZWNvbXB1dGVkIHdOQUYgaXQgdHJhZGVzIG9mZiAxLzIgaW5pdCB0aW1lICYgMS8zIHJhbSBmb3IgMjAlIHBlcmYgaGl0LlxuICAgICAqIEV4cGxhbmF0aW9uOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsbWlsbHIvZWI2NzA4MDY3OTNlODRkZjYyOGE3YzQzNGE4NzMwNjZcbiAgICAgKi9cbiAgICBlbmRvOiB7XG4gICAgICAgIGJldGE6IEJpZ0ludCgnMHg3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlJyksXG4gICAgICAgIHNwbGl0U2NhbGFyOiAoaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbiA9IHNlY3AyNTZrMU47XG4gICAgICAgICAgICBjb25zdCBhMSA9IEJpZ0ludCgnMHgzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNScpO1xuICAgICAgICAgICAgY29uc3QgYjEgPSAtXzFuICogQmlnSW50KCcweGU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzJyk7XG4gICAgICAgICAgICBjb25zdCBhMiA9IEJpZ0ludCgnMHgxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgnKTtcbiAgICAgICAgICAgIGNvbnN0IGIyID0gYTE7XG4gICAgICAgICAgICBjb25zdCBQT1dfMl8xMjggPSBCaWdJbnQoJzB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7IC8vICgybioqMTI4bikudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICBjb25zdCBjMSA9IGRpdk5lYXJlc3QoYjIgKiBrLCBuKTtcbiAgICAgICAgICAgIGNvbnN0IGMyID0gZGl2TmVhcmVzdCgtYjEgKiBrLCBuKTtcbiAgICAgICAgICAgIGxldCBrMSA9IG1vZChrIC0gYzEgKiBhMSAtIGMyICogYTIsIG4pO1xuICAgICAgICAgICAgbGV0IGsyID0gbW9kKC1jMSAqIGIxIC0gYzIgKiBiMiwgbik7XG4gICAgICAgICAgICBjb25zdCBrMW5lZyA9IGsxID4gUE9XXzJfMTI4O1xuICAgICAgICAgICAgY29uc3QgazJuZWcgPSBrMiA+IFBPV18yXzEyODtcbiAgICAgICAgICAgIGlmIChrMW5lZylcbiAgICAgICAgICAgICAgICBrMSA9IG4gLSBrMTtcbiAgICAgICAgICAgIGlmIChrMm5lZylcbiAgICAgICAgICAgICAgICBrMiA9IG4gLSBrMjtcbiAgICAgICAgICAgIGlmIChrMSA+IFBPV18yXzEyOCB8fCBrMiA+IFBPV18yXzEyOCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3BsaXRTY2FsYXI6IEVuZG9tb3JwaGlzbSBmYWlsZWQsIGs9JyArIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgazFuZWcsIGsxLCBrMm5lZywgazIgfTtcbiAgICAgICAgfSxcbiAgICB9LFxufSwgc2hhMjU2KTtcbi8vIFNjaG5vcnIgc2lnbmF0dXJlcyBhcmUgc3VwZXJpb3IgdG8gRUNEU0EgZnJvbSBhYm92ZS4gQmVsb3cgaXMgU2Nobm9yci1zcGVjaWZpYyBCSVAwMzQwIGNvZGUuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzQwLm1lZGlhd2lraVxuY29uc3QgXzBuID0gQmlnSW50KDApO1xuY29uc3QgZmUgPSAoeCkgPT4gdHlwZW9mIHggPT09ICdiaWdpbnQnICYmIF8wbiA8IHggJiYgeCA8IHNlY3AyNTZrMVA7XG5jb25zdCBnZSA9ICh4KSA9PiB0eXBlb2YgeCA9PT0gJ2JpZ2ludCcgJiYgXzBuIDwgeCAmJiB4IDwgc2VjcDI1NmsxTjtcbi8qKiBBbiBvYmplY3QgbWFwcGluZyB0YWdzIHRvIHRoZWlyIHRhZ2dlZCBoYXNoIHByZWZpeCBvZiBbU0hBMjU2KHRhZykgfCBTSEEyNTYodGFnKV0gKi9cbmNvbnN0IFRBR0dFRF9IQVNIX1BSRUZJWEVTID0ge307XG5mdW5jdGlvbiB0YWdnZWRIYXNoKHRhZywgLi4ubWVzc2FnZXMpIHtcbiAgICBsZXQgdGFnUCA9IFRBR0dFRF9IQVNIX1BSRUZJWEVTW3RhZ107XG4gICAgaWYgKHRhZ1AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0YWdIID0gc2hhMjU2KFVpbnQ4QXJyYXkuZnJvbSh0YWcsIChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpKTtcbiAgICAgICAgdGFnUCA9IGNvbmNhdEJ5dGVzKHRhZ0gsIHRhZ0gpO1xuICAgICAgICBUQUdHRURfSEFTSF9QUkVGSVhFU1t0YWddID0gdGFnUDtcbiAgICB9XG4gICAgcmV0dXJuIHNoYTI1Nihjb25jYXRCeXRlcyh0YWdQLCAuLi5tZXNzYWdlcykpO1xufVxuLy8gRUNEU0EgY29tcGFjdCBwb2ludHMgYXJlIDMzLWJ5dGUuIFNjaG5vcnIgaXMgMzI6IHdlIHN0cmlwIGZpcnN0IGJ5dGUgMHgwMiBvciAweDAzXG5jb25zdCBwb2ludFRvQnl0ZXMgPSAocG9pbnQpID0+IHBvaW50LnRvUmF3Qnl0ZXModHJ1ZSkuc2xpY2UoMSk7XG5jb25zdCBudW1UbzMyYiA9IChuKSA9PiBudW1iZXJUb0J5dGVzQkUobiwgMzIpO1xuY29uc3QgbW9kUCA9ICh4KSA9PiBtb2QoeCwgc2VjcDI1NmsxUCk7XG5jb25zdCBtb2ROID0gKHgpID0+IG1vZCh4LCBzZWNwMjU2azFOKTtcbmNvbnN0IFBvaW50ID0gc2VjcDI1NmsxLlByb2plY3RpdmVQb2ludDtcbmNvbnN0IEdtdWxBZGQgPSAoUSwgYSwgYikgPT4gUG9pbnQuQkFTRS5tdWx0aXBseUFuZEFkZFVuc2FmZShRLCBhLCBiKTtcbi8vIENhbGN1bGF0ZSBwb2ludCwgc2NhbGFyIGFuZCBieXRlc1xuZnVuY3Rpb24gc2Nobm9yckdldEV4dFB1YktleShwcml2KSB7XG4gICAgbGV0IGRfID0gc2VjcDI1NmsxLnV0aWxzLm5vcm1Qcml2YXRlS2V5VG9TY2FsYXIocHJpdik7IC8vIHNhbWUgbWV0aG9kIGV4ZWN1dGVkIGluIGZyb21Qcml2YXRlS2V5XG4gICAgbGV0IHAgPSBQb2ludC5mcm9tUHJpdmF0ZUtleShkXyk7IC8vIFAgPSBkJ+KLhUc7IDAgPCBkJyA8IG4gY2hlY2sgaXMgZG9uZSBpbnNpZGVcbiAgICBjb25zdCBzY2FsYXIgPSBwLmhhc0V2ZW5ZKCkgPyBkXyA6IG1vZE4oLWRfKTtcbiAgICByZXR1cm4geyBzY2FsYXI6IHNjYWxhciwgYnl0ZXM6IHBvaW50VG9CeXRlcyhwKSB9O1xufVxuLyoqXG4gKiBsaWZ0X3ggZnJvbSBCSVAzNDAuIENvbnZlcnQgMzItYnl0ZSB4IGNvb3JkaW5hdGUgdG8gZWxsaXB0aWMgY3VydmUgcG9pbnQuXG4gKiBAcmV0dXJucyB2YWxpZCBwb2ludCBjaGVja2VkIGZvciBiZWluZyBvbi1jdXJ2ZVxuICovXG5mdW5jdGlvbiBsaWZ0X3goeCkge1xuICAgIGlmICghZmUoeCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHg6IG5lZWQgMCA8IHggPCBwJyk7IC8vIEZhaWwgaWYgeCDiiaUgcC5cbiAgICBjb25zdCB4eCA9IG1vZFAoeCAqIHgpO1xuICAgIGNvbnN0IGMgPSBtb2RQKHh4ICogeCArIEJpZ0ludCg3KSk7IC8vIExldCBjID0geMKzICsgNyBtb2QgcC5cbiAgICBsZXQgeSA9IHNxcnRNb2QoYyk7IC8vIExldCB5ID0gY14ocCsxKS80IG1vZCBwLlxuICAgIGlmICh5ICUgXzJuICE9PSBfMG4pXG4gICAgICAgIHkgPSBtb2RQKC15KTsgLy8gUmV0dXJuIHRoZSB1bmlxdWUgcG9pbnQgUCBzdWNoIHRoYXQgeChQKSA9IHggYW5kXG4gICAgY29uc3QgcCA9IG5ldyBQb2ludCh4LCB5LCBfMW4pOyAvLyB5KFApID0geSBpZiB5IG1vZCAyID0gMCBvciB5KFApID0gcC15IG90aGVyd2lzZS5cbiAgICBwLmFzc2VydFZhbGlkaXR5KCk7XG4gICAgcmV0dXJuIHA7XG59XG4vKipcbiAqIENyZWF0ZSB0YWdnZWQgaGFzaCwgY29udmVydCBpdCB0byBiaWdpbnQsIHJlZHVjZSBtb2R1bG8tbi5cbiAqL1xuZnVuY3Rpb24gY2hhbGxlbmdlKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gbW9kTihieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgnQklQMDM0MC9jaGFsbGVuZ2UnLCAuLi5hcmdzKSkpO1xufVxuLyoqXG4gKiBTY2hub3JyIHB1YmxpYyBrZXkgaXMganVzdCBgeGAgY29vcmRpbmF0ZSBvZiBQb2ludCBhcyBwZXIgQklQMzQwLlxuICovXG5mdW5jdGlvbiBzY2hub3JyR2V0UHVibGljS2V5KHByaXZhdGVLZXkpIHtcbiAgICByZXR1cm4gc2Nobm9yckdldEV4dFB1YktleShwcml2YXRlS2V5KS5ieXRlczsgLy8gZCc9aW50KHNrKS4gRmFpbCBpZiBkJz0wIG9yIGQn4omlbi4gUmV0IGJ5dGVzKGQn4ouFRylcbn1cbi8qKlxuICogQ3JlYXRlcyBTY2hub3JyIHNpZ25hdHVyZSBhcyBwZXIgQklQMzQwLiBWZXJpZmllcyBpdHNlbGYgYmVmb3JlIHJldHVybmluZyBhbnl0aGluZy5cbiAqIGF1eFJhbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdCB0aGUgc29sZSBzb3VyY2Ugb2YgayBnZW5lcmF0aW9uOiBiYWQgQ1NQUk5HIHdvbid0IGJlIGRhbmdlcm91cy5cbiAqL1xuZnVuY3Rpb24gc2Nobm9yclNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgYXV4UmFuZCA9IHJhbmRvbUJ5dGVzKDMyKSkge1xuICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGNvbnN0IHsgYnl0ZXM6IHB4LCBzY2FsYXI6IGQgfSA9IHNjaG5vcnJHZXRFeHRQdWJLZXkocHJpdmF0ZUtleSk7IC8vIGNoZWNrcyBmb3IgaXNXaXRoaW5DdXJ2ZU9yZGVyXG4gICAgY29uc3QgYSA9IGVuc3VyZUJ5dGVzKCdhdXhSYW5kJywgYXV4UmFuZCwgMzIpOyAvLyBBdXhpbGlhcnkgcmFuZG9tIGRhdGEgYTogYSAzMi1ieXRlIGFycmF5XG4gICAgY29uc3QgdCA9IG51bVRvMzJiKGQgXiBieXRlc1RvTnVtYmVyQkUodGFnZ2VkSGFzaCgnQklQMDM0MC9hdXgnLCBhKSkpOyAvLyBMZXQgdCBiZSB0aGUgYnl0ZS13aXNlIHhvciBvZiBieXRlcyhkKSBhbmQgaGFzaC9hdXgoYSlcbiAgICBjb25zdCByYW5kID0gdGFnZ2VkSGFzaCgnQklQMDM0MC9ub25jZScsIHQsIHB4LCBtKTsgLy8gTGV0IHJhbmQgPSBoYXNoL25vbmNlKHQgfHwgYnl0ZXMoUCkgfHwgbSlcbiAgICBjb25zdCBrXyA9IG1vZE4oYnl0ZXNUb051bWJlckJFKHJhbmQpKTsgLy8gTGV0IGsnID0gaW50KHJhbmQpIG1vZCBuXG4gICAgaWYgKGtfID09PSBfMG4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbiBmYWlsZWQ6IGsgaXMgemVybycpOyAvLyBGYWlsIGlmIGsnID0gMC5cbiAgICBjb25zdCB7IGJ5dGVzOiByeCwgc2NhbGFyOiBrIH0gPSBzY2hub3JyR2V0RXh0UHViS2V5KGtfKTsgLy8gTGV0IFIgPSBrJ+KLhUcuXG4gICAgY29uc3QgZSA9IGNoYWxsZW5nZShyeCwgcHgsIG0pOyAvLyBMZXQgZSA9IGludChoYXNoL2NoYWxsZW5nZShieXRlcyhSKSB8fCBieXRlcyhQKSB8fCBtKSkgbW9kIG4uXG4gICAgY29uc3Qgc2lnID0gbmV3IFVpbnQ4QXJyYXkoNjQpOyAvLyBMZXQgc2lnID0gYnl0ZXMoUikgfHwgYnl0ZXMoKGsgKyBlZCkgbW9kIG4pLlxuICAgIHNpZy5zZXQocngsIDApO1xuICAgIHNpZy5zZXQobnVtVG8zMmIobW9kTihrICsgZSAqIGQpKSwgMzIpO1xuICAgIC8vIElmIFZlcmlmeShieXRlcyhQKSwgbSwgc2lnKSAoc2VlIGJlbG93KSByZXR1cm5zIGZhaWx1cmUsIGFib3J0XG4gICAgaWYgKCFzY2hub3JyVmVyaWZ5KHNpZywgbSwgcHgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NpZ246IEludmFsaWQgc2lnbmF0dXJlIHByb2R1Y2VkJyk7XG4gICAgcmV0dXJuIHNpZztcbn1cbi8qKlxuICogVmVyaWZpZXMgU2Nobm9yciBzaWduYXR1cmUuXG4gKiBXaWxsIHN3YWxsb3cgZXJyb3JzICYgcmV0dXJuIGZhbHNlIGV4Y2VwdCBmb3IgaW5pdGlhbCB0eXBlIHZhbGlkYXRpb24gb2YgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBzY2hub3JyVmVyaWZ5KHNpZ25hdHVyZSwgbWVzc2FnZSwgcHVibGljS2V5KSB7XG4gICAgY29uc3Qgc2lnID0gZW5zdXJlQnl0ZXMoJ3NpZ25hdHVyZScsIHNpZ25hdHVyZSwgNjQpO1xuICAgIGNvbnN0IG0gPSBlbnN1cmVCeXRlcygnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGNvbnN0IHB1YiA9IGVuc3VyZUJ5dGVzKCdwdWJsaWNLZXknLCBwdWJsaWNLZXksIDMyKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBQID0gbGlmdF94KGJ5dGVzVG9OdW1iZXJCRShwdWIpKTsgLy8gUCA9IGxpZnRfeChpbnQocGspKTsgZmFpbCBpZiB0aGF0IGZhaWxzXG4gICAgICAgIGNvbnN0IHIgPSBieXRlc1RvTnVtYmVyQkUoc2lnLnN1YmFycmF5KDAsIDMyKSk7IC8vIExldCByID0gaW50KHNpZ1swOjMyXSk7IGZhaWwgaWYgciDiiaUgcC5cbiAgICAgICAgaWYgKCFmZShyKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcyA9IGJ5dGVzVG9OdW1iZXJCRShzaWcuc3ViYXJyYXkoMzIsIDY0KSk7IC8vIExldCBzID0gaW50KHNpZ1szMjo2NF0pOyBmYWlsIGlmIHMg4omlIG4uXG4gICAgICAgIGlmICghZ2UocykpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGUgPSBjaGFsbGVuZ2UobnVtVG8zMmIociksIHBvaW50VG9CeXRlcyhQKSwgbSk7IC8vIGludChjaGFsbGVuZ2UoYnl0ZXMocil8fGJ5dGVzKFApfHxtKSklblxuICAgICAgICBjb25zdCBSID0gR211bEFkZChQLCBzLCBtb2ROKC1lKSk7IC8vIFIgPSBz4ouFRyAtIGXii4VQXG4gICAgICAgIGlmICghUiB8fCAhUi5oYXNFdmVuWSgpIHx8IFIudG9BZmZpbmUoKS54ICE9PSByKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyAtZVAgPT0gKG4tZSlQXG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBGYWlsIGlmIGlzX2luZmluaXRlKFIpIC8gbm90IGhhc19ldmVuX3koUikgLyB4KFIpIOKJoCByLlxuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBzY2hub3JyID0gLyogQF9fUFVSRV9fICovICgoKSA9PiAoe1xuICAgIGdldFB1YmxpY0tleTogc2Nobm9yckdldFB1YmxpY0tleSxcbiAgICBzaWduOiBzY2hub3JyU2lnbixcbiAgICB2ZXJpZnk6IHNjaG5vcnJWZXJpZnksXG4gICAgdXRpbHM6IHtcbiAgICAgICAgcmFuZG9tUHJpdmF0ZUtleTogc2VjcDI1NmsxLnV0aWxzLnJhbmRvbVByaXZhdGVLZXksXG4gICAgICAgIGxpZnRfeCxcbiAgICAgICAgcG9pbnRUb0J5dGVzLFxuICAgICAgICBudW1iZXJUb0J5dGVzQkUsXG4gICAgICAgIGJ5dGVzVG9OdW1iZXJCRSxcbiAgICAgICAgdGFnZ2VkSGFzaCxcbiAgICAgICAgbW9kLFxuICAgIH0sXG59KSkoKTtcbmNvbnN0IGlzb01hcCA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaXNvZ2VueU1hcChGcCwgW1xuICAgIC8vIHhOdW1cbiAgICBbXG4gICAgICAgICcweDhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhlMzhkYWFhYWE4YzcnLFxuICAgICAgICAnMHg3ZDNkNGM4MGJjMzIxZDViOWYzMTVjZWE3ZmQ0NGM1ZDU5NWQyZmMwYmY2M2I5MmRmZmYxMDQ0ZjE3YzY1ODEnLFxuICAgICAgICAnMHg1MzRjMzI4ZDIzZjIzNGU2ZTJhNDEzZGVjYTI1Y2FlY2U0NTA2MTQ0MDM3YzQwMzE0ZWNiZDBiNTNkOWRkMjYyJyxcbiAgICAgICAgJzB4OGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGUzOGRhYWFhYTg4YycsXG4gICAgXSxcbiAgICAvLyB4RGVuXG4gICAgW1xuICAgICAgICAnMHhkMzU3NzExOTNkOTQ5MThhOWNhMzRjY2JiN2I2NDBkZDg2Y2Q0MDk1NDJmODQ4N2Q5ZmU2Yjc0NTc4MWViNDliJyxcbiAgICAgICAgJzB4ZWRhZGM2ZjY0MzgzZGMxZGY3YzRiMmQ1MWI1NDIyNTQwNmQzNmI2NDFmNWU0MWJiYzUyYTU2NjEyYThjNmQxNCcsXG4gICAgICAgICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLCAvLyBMQVNUIDFcbiAgICBdLFxuICAgIC8vIHlOdW1cbiAgICBbXG4gICAgICAgICcweDRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiZGExMmY2ODRiOGUzOGUyM2MnLFxuICAgICAgICAnMHhjNzVlMGMzMmQ1Y2I3YzBmYTlkMGE1NGIxMmEwYTZkNTY0N2FiMDQ2ZDY4NmRhNmZkZmZjOTBmYzIwMWQ3MWEzJyxcbiAgICAgICAgJzB4MjlhNjE5NDY5MWY5MWE3MzcxNTIwOWVmNjUxMmU1NzY3MjI4MzBhMjAxYmUyMDE4YTc2NWU4NWE5ZWNlZTkzMScsXG4gICAgICAgICcweDJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmNjg0YmRhMTJmMzhlMzhkODQnLFxuICAgIF0sXG4gICAgLy8geURlblxuICAgIFtcbiAgICAgICAgJzB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZjkzYicsXG4gICAgICAgICcweDdhMDY1MzRiYjhiZGI0OWZkNWU5ZTY2MzI3MjJjMjk4OTQ2N2MxYmZjOGU4ZDk3OGRmYjQyNWQyNjg1YzI1NzMnLFxuICAgICAgICAnMHg2NDg0YWE3MTY1NDVjYTJjZjNhNzBjM2ZhOGZlMzM3ZTBhM2QyMTE2MmYwZDYyOTlhN2JmODE5MmJmZDJhNzZmJyxcbiAgICAgICAgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsIC8vIExBU1QgMVxuICAgIF0sXG5dLm1hcCgoaSkgPT4gaS5tYXAoKGopID0+IEJpZ0ludChqKSkpKSkoKTtcbmNvbnN0IG1hcFNXVSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gbWFwVG9DdXJ2ZVNpbXBsZVNXVShGcCwge1xuICAgIEE6IEJpZ0ludCgnMHgzZjg3MzFhYmRkNjYxYWRjYTA4YTU1NThmMGY1ZDI3MmU5NTNkMzYzY2I2ZjBlNWQ0MDU0NDdjMDFhNDQ0NTMzJyksXG4gICAgQjogQmlnSW50KCcxNzcxJyksXG4gICAgWjogRnAuY3JlYXRlKEJpZ0ludCgnLTExJykpLFxufSkpKCk7XG5jb25zdCBodGYgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGNyZWF0ZUhhc2hlcihzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LCAoc2NhbGFycykgPT4ge1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gbWFwU1dVKEZwLmNyZWF0ZShzY2FsYXJzWzBdKSk7XG4gICAgcmV0dXJuIGlzb01hcCh4LCB5KTtcbn0sIHtcbiAgICBEU1Q6ICdzZWNwMjU2azFfWE1EOlNIQS0yNTZfU1NXVV9ST18nLFxuICAgIGVuY29kZURTVDogJ3NlY3AyNTZrMV9YTUQ6U0hBLTI1Nl9TU1dVX05VXycsXG4gICAgcDogRnAuT1JERVIsXG4gICAgbTogMSxcbiAgICBrOiAxMjgsXG4gICAgZXhwYW5kOiAneG1kJyxcbiAgICBoYXNoOiBzaGEyNTYsXG59KSkoKTtcbmV4cG9ydCBjb25zdCBoYXNoVG9DdXJ2ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gaHRmLmhhc2hUb0N1cnZlKSgpO1xuZXhwb3J0IGNvbnN0IGVuY29kZVRvQ3VydmUgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IGh0Zi5lbmNvZGVUb0N1cnZlKSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VjcDI1NmsxLmpzLm1hcCIsImZ1bmN0aW9uIG51bWJlcihuKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuKSB8fCBuIDwgMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBub3QgJHtufWApO1xufVxuZnVuY3Rpb24gYm9vbChiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSAnYm9vbGVhbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYm9vbGVhbiBleHBlY3RlZCwgbm90ICR7Yn1gKTtcbn1cbi8vIGNvcGllZCBmcm9tIHV0aWxzXG5leHBvcnQgZnVuY3Rpb24gaXNCeXRlcyhhKSB7XG4gICAgcmV0dXJuIChhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fFxuICAgICAgICAoYSAhPSBudWxsICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVaW50OEFycmF5JykpO1xufVxuZnVuY3Rpb24gYnl0ZXMoYiwgLi4ubGVuZ3Rocykge1xuICAgIGlmICghaXNCeXRlcyhiKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVaW50OEFycmF5IGV4cGVjdGVkJyk7XG4gICAgaWYgKGxlbmd0aHMubGVuZ3RoID4gMCAmJiAhbGVuZ3Rocy5pbmNsdWRlcyhiLmxlbmd0aCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggJHtsZW5ndGhzfSwgbm90IG9mIGxlbmd0aD0ke2IubGVuZ3RofWApO1xufVxuZnVuY3Rpb24gaGFzaChoKSB7XG4gICAgaWYgKHR5cGVvZiBoICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBoLmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXNoIHNob3VsZCBiZSB3cmFwcGVkIGJ5IHV0aWxzLndyYXBDb25zdHJ1Y3RvcicpO1xuICAgIG51bWJlcihoLm91dHB1dExlbik7XG4gICAgbnVtYmVyKGguYmxvY2tMZW4pO1xufVxuZnVuY3Rpb24gZXhpc3RzKGluc3RhbmNlLCBjaGVja0ZpbmlzaGVkID0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5kZXN0cm95ZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWQnKTtcbiAgICBpZiAoY2hlY2tGaW5pc2hlZCAmJiBpbnN0YW5jZS5maW5pc2hlZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXNoI2RpZ2VzdCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkJyk7XG59XG5mdW5jdGlvbiBvdXRwdXQob3V0LCBpbnN0YW5jZSkge1xuICAgIGJ5dGVzKG91dCk7XG4gICAgY29uc3QgbWluID0gaW5zdGFuY2Uub3V0cHV0TGVuO1xuICAgIGlmIChvdXQubGVuZ3RoIDwgbWluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlnZXN0SW50bygpIGV4cGVjdHMgb3V0cHV0IGJ1ZmZlciBvZiBsZW5ndGggYXQgbGVhc3QgJHttaW59YCk7XG4gICAgfVxufVxuZXhwb3J0IHsgbnVtYmVyLCBib29sLCBieXRlcywgaGFzaCwgZXhpc3RzLCBvdXRwdXQgfTtcbmNvbnN0IGFzc2VydCA9IHsgbnVtYmVyLCBib29sLCBieXRlcywgaGFzaCwgZXhpc3RzLCBvdXRwdXQgfTtcbmV4cG9ydCBkZWZhdWx0IGFzc2VydDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV9hc3NlcnQuanMubWFwIiwiaW1wb3J0IHsgbnVtYmVyLCBleGlzdHMsIG91dHB1dCB9IGZyb20gJy4vX2Fzc2VydC5qcyc7XG5pbXBvcnQgeyBIYXNoLCB0b0J5dGVzLCB1MzIsIGlzTEUsIGJ5dGVTd2FwMzIsIGJ5dGVTd2FwSWZCRSB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gQmxha2UgaXMgYmFzZWQgb24gQ2hhQ2hhIHBlcm11dGF0aW9uLlxuLy8gRm9yIEJMQUtFMmIsIHRoZSB0d28gZXh0cmEgcGVybXV0YXRpb25zIGZvciByb3VuZHMgMTAgYW5kIDExIGFyZSBTSUdNQVsxMC4uMTFdID0gU0lHTUFbMC4uMV0uXG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydCBjb25zdCBTSUdNQSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDhBcnJheShbXG4gICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcbiAgICAxNCwgMTAsIDQsIDgsIDksIDE1LCAxMywgNiwgMSwgMTIsIDAsIDIsIDExLCA3LCA1LCAzLFxuICAgIDExLCA4LCAxMiwgMCwgNSwgMiwgMTUsIDEzLCAxMCwgMTQsIDMsIDYsIDcsIDEsIDksIDQsXG4gICAgNywgOSwgMywgMSwgMTMsIDEyLCAxMSwgMTQsIDIsIDYsIDUsIDEwLCA0LCAwLCAxNSwgOCxcbiAgICA5LCAwLCA1LCA3LCAyLCA0LCAxMCwgMTUsIDE0LCAxLCAxMSwgMTIsIDYsIDgsIDMsIDEzLFxuICAgIDIsIDEyLCA2LCAxMCwgMCwgMTEsIDgsIDMsIDQsIDEzLCA3LCA1LCAxNSwgMTQsIDEsIDksXG4gICAgMTIsIDUsIDEsIDE1LCAxNCwgMTMsIDQsIDEwLCAwLCA3LCA2LCAzLCA5LCAyLCA4LCAxMSxcbiAgICAxMywgMTEsIDcsIDE0LCAxMiwgMSwgMywgOSwgNSwgMCwgMTUsIDQsIDgsIDYsIDIsIDEwLFxuICAgIDYsIDE1LCAxNCwgOSwgMTEsIDMsIDAsIDgsIDEyLCAyLCAxMywgNywgMSwgNCwgMTAsIDUsXG4gICAgMTAsIDIsIDgsIDQsIDcsIDYsIDEsIDUsIDE1LCAxMSwgOSwgMTQsIDMsIDEyLCAxMywgMCxcbiAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICAgIDE0LCAxMCwgNCwgOCwgOSwgMTUsIDEzLCA2LCAxLCAxMiwgMCwgMiwgMTEsIDcsIDUsIDMsXG5dKTtcbmV4cG9ydCBjbGFzcyBCTEFLRSBleHRlbmRzIEhhc2gge1xuICAgIGNvbnN0cnVjdG9yKGJsb2NrTGVuLCBvdXRwdXRMZW4sIG9wdHMgPSB7fSwga2V5TGVuLCBzYWx0TGVuLCBwZXJzTGVuKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjtcbiAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgICAgIG51bWJlcihibG9ja0xlbik7XG4gICAgICAgIG51bWJlcihvdXRwdXRMZW4pO1xuICAgICAgICBudW1iZXIoa2V5TGVuKTtcbiAgICAgICAgaWYgKG91dHB1dExlbiA8IDAgfHwgb3V0cHV0TGVuID4ga2V5TGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdXRwdXRMZW4gYmlnZ2VyIHRoYW4ga2V5TGVuJyk7XG4gICAgICAgIGlmIChvcHRzLmtleSAhPT0gdW5kZWZpbmVkICYmIChvcHRzLmtleS5sZW5ndGggPCAxIHx8IG9wdHMua2V5Lmxlbmd0aCA+IGtleUxlbikpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleSBtdXN0IGJlIHVwIDEuLiR7a2V5TGVufSBieXRlIGxvbmcgb3IgdW5kZWZpbmVkYCk7XG4gICAgICAgIGlmIChvcHRzLnNhbHQgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnNhbHQubGVuZ3RoICE9PSBzYWx0TGVuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzYWx0IG11c3QgYmUgJHtzYWx0TGVufSBieXRlIGxvbmcgb3IgdW5kZWZpbmVkYCk7XG4gICAgICAgIGlmIChvcHRzLnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkICYmIG9wdHMucGVyc29uYWxpemF0aW9uLmxlbmd0aCAhPT0gcGVyc0xlbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcGVyc29uYWxpemF0aW9uIG11c3QgYmUgJHtwZXJzTGVufSBieXRlIGxvbmcgb3IgdW5kZWZpbmVkYCk7XG4gICAgICAgIHRoaXMuYnVmZmVyMzIgPSB1MzIoKHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYmxvY2tMZW4pKSk7XG4gICAgfVxuICAgIHVwZGF0ZShkYXRhKSB7XG4gICAgICAgIGV4aXN0cyh0aGlzKTtcbiAgICAgICAgLy8gTWFpbiBkaWZmZXJlbmNlIHdpdGggb3RoZXIgaGFzaGVzOiB0aGVyZSBpcyBmbGFnIGZvciBsYXN0IGJsb2NrLFxuICAgICAgICAvLyBzbyB3ZSBjYW5ub3QgcHJvY2VzcyBjdXJyZW50IGJsb2NrIGJlZm9yZSB3ZSBrbm93IHRoYXQgdGhlcmVcbiAgICAgICAgLy8gaXMgdGhlIG5leHQgb25lLiBUaGlzIHNpZ25pZmljYW50bHkgY29tcGxpY2F0ZXMgbG9naWMgYW5kIHJlZHVjZXMgYWJpbGl0eVxuICAgICAgICAvLyB0byBkbyB6ZXJvLWNvcHkgcHJvY2Vzc2luZ1xuICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXIsIGJ1ZmZlcjMyIH0gPSB0aGlzO1xuICAgICAgICBkYXRhID0gdG9CeXRlcyhkYXRhKTtcbiAgICAgICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGRhdGEuYnl0ZU9mZnNldDtcbiAgICAgICAgY29uc3QgYnVmID0gZGF0YS5idWZmZXI7XG4gICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjspIHtcbiAgICAgICAgICAgIC8vIElmIGJ1ZmZlciBpcyBmdWxsIGFuZCB3ZSBzdGlsbCBoYXZlIGlucHV0IChkb24ndCBwcm9jZXNzIGxhc3QgYmxvY2ssIHNhbWUgYXMgYmxha2UycylcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA9PT0gYmxvY2tMZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTEUpXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVTd2FwMzIoYnVmZmVyMzIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHJlc3MoYnVmZmVyMzIsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTEUpXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVTd2FwMzIoYnVmZmVyMzIpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpO1xuICAgICAgICAgICAgY29uc3QgZGF0YU9mZnNldCA9IG9mZnNldCArIHBvcztcbiAgICAgICAgICAgIC8vIGZ1bGwgYmxvY2sgJiYgYWxpZ25lZCB0byA0IGJ5dGVzICYmIG5vdCBsYXN0IGluIGlucHV0XG4gICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4gJiYgIShkYXRhT2Zmc2V0ICUgNCkgJiYgcG9zICsgdGFrZSA8IGxlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEzMiA9IG5ldyBVaW50MzJBcnJheShidWYsIGRhdGFPZmZzZXQsIE1hdGguZmxvb3IoKGxlbiAtIHBvcykgLyA0KSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0xFKVxuICAgICAgICAgICAgICAgICAgICBieXRlU3dhcDMyKGRhdGEzMik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcG9zMzIgPSAwOyBwb3MgKyBibG9ja0xlbiA8IGxlbjsgcG9zMzIgKz0gYnVmZmVyMzIubGVuZ3RoLCBwb3MgKz0gYmxvY2tMZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gYmxvY2tMZW47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHJlc3MoZGF0YTMyLCBwb3MzMiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWlzTEUpXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVTd2FwMzIoZGF0YTMyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlci5zZXQoZGF0YS5zdWJhcnJheShwb3MsIHBvcyArIHRha2UpLCB0aGlzLnBvcyk7XG4gICAgICAgICAgICB0aGlzLnBvcyArPSB0YWtlO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggKz0gdGFrZTtcbiAgICAgICAgICAgIHBvcyArPSB0YWtlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkaWdlc3RJbnRvKG91dCkge1xuICAgICAgICBleGlzdHModGhpcyk7XG4gICAgICAgIG91dHB1dChvdXQsIHRoaXMpO1xuICAgICAgICBjb25zdCB7IHBvcywgYnVmZmVyMzIgfSA9IHRoaXM7XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAvLyBQYWRkaW5nXG4gICAgICAgIHRoaXMuYnVmZmVyLnN1YmFycmF5KHBvcykuZmlsbCgwKTtcbiAgICAgICAgaWYgKCFpc0xFKVxuICAgICAgICAgICAgYnl0ZVN3YXAzMihidWZmZXIzMik7XG4gICAgICAgIHRoaXMuY29tcHJlc3MoYnVmZmVyMzIsIDAsIHRydWUpO1xuICAgICAgICBpZiAoIWlzTEUpXG4gICAgICAgICAgICBieXRlU3dhcDMyKGJ1ZmZlcjMyKTtcbiAgICAgICAgY29uc3Qgb3V0MzIgPSB1MzIob3V0KTtcbiAgICAgICAgdGhpcy5nZXQoKS5mb3JFYWNoKCh2LCBpKSA9PiAob3V0MzJbaV0gPSBieXRlU3dhcElmQkUodikpKTtcbiAgICB9XG4gICAgZGlnZXN0KCkge1xuICAgICAgICBjb25zdCB7IGJ1ZmZlciwgb3V0cHV0TGVuIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLmRpZ2VzdEludG8oYnVmZmVyKTtcbiAgICAgICAgY29uc3QgcmVzID0gYnVmZmVyLnNsaWNlKDAsIG91dHB1dExlbik7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBfY2xvbmVJbnRvKHRvKSB7XG4gICAgICAgIGNvbnN0IHsgYnVmZmVyLCBsZW5ndGgsIGZpbmlzaGVkLCBkZXN0cm95ZWQsIG91dHB1dExlbiwgcG9zIH0gPSB0aGlzO1xuICAgICAgICB0byB8fCAodG8gPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih7IGRrTGVuOiBvdXRwdXRMZW4gfSkpO1xuICAgICAgICB0by5zZXQoLi4udGhpcy5nZXQoKSk7XG4gICAgICAgIHRvLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICAgICAgdG8uZGVzdHJveWVkID0gZGVzdHJveWVkO1xuICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRvLmJ1ZmZlci5zZXQoYnVmZmVyKTtcbiAgICAgICAgdG8ucG9zID0gcG9zO1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2JsYWtlLmpzLm1hcCIsImltcG9ydCB7IGV4aXN0cywgb3V0cHV0IH0gZnJvbSAnLi9fYXNzZXJ0LmpzJztcbmltcG9ydCB7IEhhc2gsIGNyZWF0ZVZpZXcsIHRvQnl0ZXMgfSBmcm9tICcuL3V0aWxzLmpzJztcbi8vIFBvbHlmaWxsIGZvciBTYWZhcmkgMTRcbmZ1bmN0aW9uIHNldEJpZ1VpbnQ2NCh2aWV3LCBieXRlT2Zmc2V0LCB2YWx1ZSwgaXNMRSkge1xuICAgIGlmICh0eXBlb2Ygdmlldy5zZXRCaWdVaW50NjQgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB2aWV3LnNldEJpZ1VpbnQ2NChieXRlT2Zmc2V0LCB2YWx1ZSwgaXNMRSk7XG4gICAgY29uc3QgXzMybiA9IEJpZ0ludCgzMik7XG4gICAgY29uc3QgX3UzMl9tYXggPSBCaWdJbnQoMHhmZmZmZmZmZik7XG4gICAgY29uc3Qgd2ggPSBOdW1iZXIoKHZhbHVlID4+IF8zMm4pICYgX3UzMl9tYXgpO1xuICAgIGNvbnN0IHdsID0gTnVtYmVyKHZhbHVlICYgX3UzMl9tYXgpO1xuICAgIGNvbnN0IGggPSBpc0xFID8gNCA6IDA7XG4gICAgY29uc3QgbCA9IGlzTEUgPyAwIDogNDtcbiAgICB2aWV3LnNldFVpbnQzMihieXRlT2Zmc2V0ICsgaCwgd2gsIGlzTEUpO1xuICAgIHZpZXcuc2V0VWludDMyKGJ5dGVPZmZzZXQgKyBsLCB3bCwgaXNMRSk7XG59XG4vLyBDaG9pY2U6IGEgPyBiIDogY1xuZXhwb3J0IGNvbnN0IENoaSA9IChhLCBiLCBjKSA9PiAoYSAmIGIpIF4gKH5hICYgYyk7XG4vLyBNYWpvcml0eSBmdW5jdGlvbiwgdHJ1ZSBpZiBhbnkgdHdvIGlucHVzdCBpcyB0cnVlXG5leHBvcnQgY29uc3QgTWFqID0gKGEsIGIsIGMpID0+IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcbi8qKlxuICogTWVya2xlLURhbWdhcmQgaGFzaCBjb25zdHJ1Y3Rpb24gYmFzZSBjbGFzcy5cbiAqIENvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIE1ENSwgUklQRU1ELCBTSEExLCBTSEEyLlxuICovXG5leHBvcnQgY2xhc3MgSGFzaE1EIGV4dGVuZHMgSGFzaCB7XG4gICAgY29uc3RydWN0b3IoYmxvY2tMZW4sIG91dHB1dExlbiwgcGFkT2Zmc2V0LCBpc0xFKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYmxvY2tMZW4gPSBibG9ja0xlbjtcbiAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRoaXMucGFkT2Zmc2V0ID0gcGFkT2Zmc2V0O1xuICAgICAgICB0aGlzLmlzTEUgPSBpc0xFO1xuICAgICAgICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGJsb2NrTGVuKTtcbiAgICAgICAgdGhpcy52aWV3ID0gY3JlYXRlVmlldyh0aGlzLmJ1ZmZlcik7XG4gICAgfVxuICAgIHVwZGF0ZShkYXRhKSB7XG4gICAgICAgIGV4aXN0cyh0aGlzKTtcbiAgICAgICAgY29uc3QgeyB2aWV3LCBidWZmZXIsIGJsb2NrTGVuIH0gPSB0aGlzO1xuICAgICAgICBkYXRhID0gdG9CeXRlcyhkYXRhKTtcbiAgICAgICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IHBvcyA9IDA7IHBvcyA8IGxlbjspIHtcbiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zLCBsZW4gLSBwb3MpO1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoOiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBibG9jayBpbiBpbnB1dCwgY2FzdCBpdCB0byB2aWV3IGFuZCBwcm9jZXNzXG4gICAgICAgICAgICBpZiAodGFrZSA9PT0gYmxvY2tMZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IGNyZWF0ZVZpZXcoZGF0YSk7XG4gICAgICAgICAgICAgICAgZm9yICg7IGJsb2NrTGVuIDw9IGxlbiAtIHBvczsgcG9zICs9IGJsb2NrTGVuKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoZGF0YVZpZXcsIHBvcyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIuc2V0KGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyB0YWtlKSwgdGhpcy5wb3MpO1xuICAgICAgICAgICAgdGhpcy5wb3MgKz0gdGFrZTtcbiAgICAgICAgICAgIHBvcyArPSB0YWtlO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbikge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHRoaXMucm91bmRDbGVhbigpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGlnZXN0SW50byhvdXQpIHtcbiAgICAgICAgZXhpc3RzKHRoaXMpO1xuICAgICAgICBvdXRwdXQob3V0LCB0aGlzKTtcbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7XG4gICAgICAgIC8vIFBhZGRpbmdcbiAgICAgICAgLy8gV2UgY2FuIGF2b2lkIGFsbG9jYXRpb24gb2YgYnVmZmVyIGZvciBwYWRkaW5nIGNvbXBsZXRlbHkgaWYgaXRcbiAgICAgICAgLy8gd2FzIHByZXZpb3VzbHkgbm90IGFsbG9jYXRlZCBoZXJlLiBCdXQgaXQgd29uJ3QgY2hhbmdlIHBlcmZvcm1hbmNlLlxuICAgICAgICBjb25zdCB7IGJ1ZmZlciwgdmlldywgYmxvY2tMZW4sIGlzTEUgfSA9IHRoaXM7XG4gICAgICAgIGxldCB7IHBvcyB9ID0gdGhpcztcbiAgICAgICAgLy8gYXBwZW5kIHRoZSBiaXQgJzEnIHRvIHRoZSBtZXNzYWdlXG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSAwYjEwMDAwMDAwO1xuICAgICAgICB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MpLmZpbGwoMCk7XG4gICAgICAgIC8vIHdlIGhhdmUgbGVzcyB0aGFuIHBhZE9mZnNldCBsZWZ0IGluIGJ1ZmZlciwgc28gd2UgY2Fubm90IHB1dCBsZW5ndGggaW5cbiAgICAgICAgLy8gY3VycmVudCBibG9jaywgbmVlZCBwcm9jZXNzIGl0IGFuZCBwYWQgYWdhaW5cbiAgICAgICAgaWYgKHRoaXMucGFkT2Zmc2V0ID4gYmxvY2tMZW4gLSBwb3MpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzcyh2aWV3LCAwKTtcbiAgICAgICAgICAgIHBvcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGFkIHVudGlsIGZ1bGwgYmxvY2sgYnl0ZSB3aXRoIHplcm9zXG4gICAgICAgIGZvciAobGV0IGkgPSBwb3M7IGkgPCBibG9ja0xlbjsgaSsrKVxuICAgICAgICAgICAgYnVmZmVyW2ldID0gMDtcbiAgICAgICAgLy8gTm90ZTogc2hhNTEyIHJlcXVpcmVzIGxlbmd0aCB0byBiZSAxMjhiaXQgaW50ZWdlciwgYnV0IGxlbmd0aCBpbiBKUyB3aWxsIG92ZXJmbG93IGJlZm9yZSB0aGF0XG4gICAgICAgIC8vIFlvdSBuZWVkIHRvIHdyaXRlIGFyb3VuZCAyIGV4YWJ5dGVzICh1NjRfbWF4IC8gOCAvICgxMDI0Kio2KSkgZm9yIHRoaXMgdG8gaGFwcGVuLlxuICAgICAgICAvLyBTbyB3ZSBqdXN0IHdyaXRlIGxvd2VzdCA2NCBiaXRzIG9mIHRoYXQgdmFsdWUuXG4gICAgICAgIHNldEJpZ1VpbnQ2NCh2aWV3LCBibG9ja0xlbiAtIDgsIEJpZ0ludCh0aGlzLmxlbmd0aCAqIDgpLCBpc0xFKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzKHZpZXcsIDApO1xuICAgICAgICBjb25zdCBvdmlldyA9IGNyZWF0ZVZpZXcob3V0KTtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5vdXRwdXRMZW47XG4gICAgICAgIC8vIE5PVEU6IHdlIGRvIGRpdmlzaW9uIGJ5IDQgbGF0ZXIsIHdoaWNoIHNob3VsZCBiZSBmdXNlZCBpbiBzaW5nbGUgb3Agd2l0aCBtb2R1bG8gYnkgSklUXG4gICAgICAgIGlmIChsZW4gJSA0KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdfc2hhMjogb3V0cHV0TGVuIHNob3VsZCBiZSBhbGlnbmVkIHRvIDMyYml0Jyk7XG4gICAgICAgIGNvbnN0IG91dExlbiA9IGxlbiAvIDQ7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgaWYgKG91dExlbiA+IHN0YXRlLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignX3NoYTI6IG91dHB1dExlbiBiaWdnZXIgdGhhbiBzdGF0ZScpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dExlbjsgaSsrKVxuICAgICAgICAgICAgb3ZpZXcuc2V0VWludDMyKDQgKiBpLCBzdGF0ZVtpXSwgaXNMRSk7XG4gICAgfVxuICAgIGRpZ2VzdCgpIHtcbiAgICAgICAgY29uc3QgeyBidWZmZXIsIG91dHB1dExlbiB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5kaWdlc3RJbnRvKGJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IHJlcyA9IGJ1ZmZlci5zbGljZSgwLCBvdXRwdXRMZW4pO1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgX2Nsb25lSW50byh0bykge1xuICAgICAgICB0byB8fCAodG8gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpKTtcbiAgICAgICAgdG8uc2V0KC4uLnRoaXMuZ2V0KCkpO1xuICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBidWZmZXIsIGxlbmd0aCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgcG9zIH0gPSB0aGlzO1xuICAgICAgICB0by5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIHRvLnBvcyA9IHBvcztcbiAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICAgICAgdG8uZGVzdHJveWVkID0gZGVzdHJveWVkO1xuICAgICAgICBpZiAobGVuZ3RoICUgYmxvY2tMZW4pXG4gICAgICAgICAgICB0by5idWZmZXIuc2V0KGJ1ZmZlcik7XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fbWQuanMubWFwIiwiY29uc3QgVTMyX01BU0s2NCA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMiAqKiAzMiAtIDEpO1xuY29uc3QgXzMybiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMzIpO1xuLy8gV2UgYXJlIG5vdCB1c2luZyBCaWdVaW50NjRBcnJheSwgYmVjYXVzZSB0aGV5IGFyZSBleHRyZW1lbHkgc2xvdyBhcyBwZXIgMjAyMlxuZnVuY3Rpb24gZnJvbUJpZyhuLCBsZSA9IGZhbHNlKSB7XG4gICAgaWYgKGxlKVxuICAgICAgICByZXR1cm4geyBoOiBOdW1iZXIobiAmIFUzMl9NQVNLNjQpLCBsOiBOdW1iZXIoKG4gPj4gXzMybikgJiBVMzJfTUFTSzY0KSB9O1xuICAgIHJldHVybiB7IGg6IE51bWJlcigobiA+PiBfMzJuKSAmIFUzMl9NQVNLNjQpIHwgMCwgbDogTnVtYmVyKG4gJiBVMzJfTUFTSzY0KSB8IDAgfTtcbn1cbmZ1bmN0aW9uIHNwbGl0KGxzdCwgbGUgPSBmYWxzZSkge1xuICAgIGxldCBBaCA9IG5ldyBVaW50MzJBcnJheShsc3QubGVuZ3RoKTtcbiAgICBsZXQgQWwgPSBuZXcgVWludDMyQXJyYXkobHN0Lmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBoLCBsIH0gPSBmcm9tQmlnKGxzdFtpXSwgbGUpO1xuICAgICAgICBbQWhbaV0sIEFsW2ldXSA9IFtoLCBsXTtcbiAgICB9XG4gICAgcmV0dXJuIFtBaCwgQWxdO1xufVxuY29uc3QgdG9CaWcgPSAoaCwgbCkgPT4gKEJpZ0ludChoID4+PiAwKSA8PCBfMzJuKSB8IEJpZ0ludChsID4+PiAwKTtcbi8vIGZvciBTaGlmdCBpbiBbMCwgMzIpXG5jb25zdCBzaHJTSCA9IChoLCBfbCwgcykgPT4gaCA+Pj4gcztcbmNvbnN0IHNoclNMID0gKGgsIGwsIHMpID0+IChoIDw8ICgzMiAtIHMpKSB8IChsID4+PiBzKTtcbi8vIFJpZ2h0IHJvdGF0ZSBmb3IgU2hpZnQgaW4gWzEsIDMyKVxuY29uc3Qgcm90clNIID0gKGgsIGwsIHMpID0+IChoID4+PiBzKSB8IChsIDw8ICgzMiAtIHMpKTtcbmNvbnN0IHJvdHJTTCA9IChoLCBsLCBzKSA9PiAoaCA8PCAoMzIgLSBzKSkgfCAobCA+Pj4gcyk7XG4vLyBSaWdodCByb3RhdGUgZm9yIFNoaWZ0IGluICgzMiwgNjQpLCBOT1RFOiAzMiBpcyBzcGVjaWFsIGNhc2UuXG5jb25zdCByb3RyQkggPSAoaCwgbCwgcykgPT4gKGggPDwgKDY0IC0gcykpIHwgKGwgPj4+IChzIC0gMzIpKTtcbmNvbnN0IHJvdHJCTCA9IChoLCBsLCBzKSA9PiAoaCA+Pj4gKHMgLSAzMikpIHwgKGwgPDwgKDY0IC0gcykpO1xuLy8gUmlnaHQgcm90YXRlIGZvciBzaGlmdD09PTMyIChqdXN0IHN3YXBzIGwmaClcbmNvbnN0IHJvdHIzMkggPSAoX2gsIGwpID0+IGw7XG5jb25zdCByb3RyMzJMID0gKGgsIF9sKSA9PiBoO1xuLy8gTGVmdCByb3RhdGUgZm9yIFNoaWZ0IGluIFsxLCAzMilcbmNvbnN0IHJvdGxTSCA9IChoLCBsLCBzKSA9PiAoaCA8PCBzKSB8IChsID4+PiAoMzIgLSBzKSk7XG5jb25zdCByb3RsU0wgPSAoaCwgbCwgcykgPT4gKGwgPDwgcykgfCAoaCA+Pj4gKDMyIC0gcykpO1xuLy8gTGVmdCByb3RhdGUgZm9yIFNoaWZ0IGluICgzMiwgNjQpLCBOT1RFOiAzMiBpcyBzcGVjaWFsIGNhc2UuXG5jb25zdCByb3RsQkggPSAoaCwgbCwgcykgPT4gKGwgPDwgKHMgLSAzMikpIHwgKGggPj4+ICg2NCAtIHMpKTtcbmNvbnN0IHJvdGxCTCA9IChoLCBsLCBzKSA9PiAoaCA8PCAocyAtIDMyKSkgfCAobCA+Pj4gKDY0IC0gcykpO1xuLy8gSlMgdXNlcyAzMi1iaXQgc2lnbmVkIGludGVnZXJzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMgd2hpY2ggbWVhbnMgd2UgY2Fubm90XG4vLyBzaW1wbGUgdGFrZSBjYXJyeSBvdXQgb2YgbG93IGJpdCBzdW0gYnkgc2hpZnQsIHdlIG5lZWQgdG8gdXNlIGRpdmlzaW9uLlxuZnVuY3Rpb24gYWRkKEFoLCBBbCwgQmgsIEJsKSB7XG4gICAgY29uc3QgbCA9IChBbCA+Pj4gMCkgKyAoQmwgPj4+IDApO1xuICAgIHJldHVybiB7IGg6IChBaCArIEJoICsgKChsIC8gMiAqKiAzMikgfCAwKSkgfCAwLCBsOiBsIHwgMCB9O1xufVxuLy8gQWRkaXRpb24gd2l0aCBtb3JlIHRoYW4gMiBlbGVtZW50c1xuY29uc3QgYWRkM0wgPSAoQWwsIEJsLCBDbCkgPT4gKEFsID4+PiAwKSArIChCbCA+Pj4gMCkgKyAoQ2wgPj4+IDApO1xuY29uc3QgYWRkM0ggPSAobG93LCBBaCwgQmgsIENoKSA9PiAoQWggKyBCaCArIENoICsgKChsb3cgLyAyICoqIDMyKSB8IDApKSB8IDA7XG5jb25zdCBhZGQ0TCA9IChBbCwgQmwsIENsLCBEbCkgPT4gKEFsID4+PiAwKSArIChCbCA+Pj4gMCkgKyAoQ2wgPj4+IDApICsgKERsID4+PiAwKTtcbmNvbnN0IGFkZDRIID0gKGxvdywgQWgsIEJoLCBDaCwgRGgpID0+IChBaCArIEJoICsgQ2ggKyBEaCArICgobG93IC8gMiAqKiAzMikgfCAwKSkgfCAwO1xuY29uc3QgYWRkNUwgPSAoQWwsIEJsLCBDbCwgRGwsIEVsKSA9PiAoQWwgPj4+IDApICsgKEJsID4+PiAwKSArIChDbCA+Pj4gMCkgKyAoRGwgPj4+IDApICsgKEVsID4+PiAwKTtcbmNvbnN0IGFkZDVIID0gKGxvdywgQWgsIEJoLCBDaCwgRGgsIEVoKSA9PiAoQWggKyBCaCArIENoICsgRGggKyBFaCArICgobG93IC8gMiAqKiAzMikgfCAwKSkgfCAwO1xuLy8gcHJldHRpZXItaWdub3JlXG5leHBvcnQgeyBmcm9tQmlnLCBzcGxpdCwgdG9CaWcsIHNoclNILCBzaHJTTCwgcm90clNILCByb3RyU0wsIHJvdHJCSCwgcm90ckJMLCByb3RyMzJILCByb3RyMzJMLCByb3RsU0gsIHJvdGxTTCwgcm90bEJILCByb3RsQkwsIGFkZCwgYWRkM0wsIGFkZDNILCBhZGQ0TCwgYWRkNEgsIGFkZDVILCBhZGQ1TCwgfTtcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgdTY0ID0ge1xuICAgIGZyb21CaWcsIHNwbGl0LCB0b0JpZyxcbiAgICBzaHJTSCwgc2hyU0wsXG4gICAgcm90clNILCByb3RyU0wsIHJvdHJCSCwgcm90ckJMLFxuICAgIHJvdHIzMkgsIHJvdHIzMkwsXG4gICAgcm90bFNILCByb3RsU0wsIHJvdGxCSCwgcm90bEJMLFxuICAgIGFkZCwgYWRkM0wsIGFkZDNILCBhZGQ0TCwgYWRkNEgsIGFkZDVILCBhZGQ1TCxcbn07XG5leHBvcnQgZGVmYXVsdCB1NjQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fdTY0LmpzLm1hcCIsImltcG9ydCB7IEJMQUtFLCBTSUdNQSB9IGZyb20gJy4vX2JsYWtlLmpzJztcbmltcG9ydCB1NjQgZnJvbSAnLi9fdTY0LmpzJztcbmltcG9ydCB7IHRvQnl0ZXMsIHUzMiwgd3JhcENvbnN0cnVjdG9yV2l0aE9wdHMsIGJ5dGVTd2FwSWZCRSB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gU2FtZSBhcyBTSEEtNTEyIGJ1dCBMRVxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBCMkJfSVYgPSAvKiBAX19QVVJFX18gKi8gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweGYzYmNjOTA4LCAweDZhMDllNjY3LCAweDg0Y2FhNzNiLCAweGJiNjdhZTg1LCAweGZlOTRmODJiLCAweDNjNmVmMzcyLCAweDVmMWQzNmYxLCAweGE1NGZmNTNhLFxuICAgIDB4YWRlNjgyZDEsIDB4NTEwZTUyN2YsIDB4MmIzZTZjMWYsIDB4OWIwNTY4OGMsIDB4ZmI0MWJkNmIsIDB4MWY4M2Q5YWIsIDB4MTM3ZTIxNzksIDB4NWJlMGNkMTlcbl0pO1xuLy8gVGVtcG9yYXJ5IGJ1ZmZlclxuY29uc3QgQkJVRiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoMzIpO1xuLy8gTWl4aW5nIGZ1bmN0aW9uIEcgc3BsaXR0ZWQgaW4gdHdvIGhhbGZzXG5mdW5jdGlvbiBHMWIoYSwgYiwgYywgZCwgbXNnLCB4KSB7XG4gICAgLy8gTk9URTogViBpcyBMRSBoZXJlXG4gICAgY29uc3QgWGwgPSBtc2dbeF0sIFhoID0gbXNnW3ggKyAxXTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IEFsID0gQkJVRlsyICogYV0sIEFoID0gQkJVRlsyICogYSArIDFdOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBsZXQgQmwgPSBCQlVGWzIgKiBiXSwgQmggPSBCQlVGWzIgKiBiICsgMV07IC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGxldCBDbCA9IEJCVUZbMiAqIGNdLCBDaCA9IEJCVUZbMiAqIGMgKyAxXTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IERsID0gQkJVRlsyICogZF0sIERoID0gQkJVRlsyICogZCArIDFdOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAvLyB2W2FdID0gKHZbYV0gKyB2W2JdICsgeCkgfCAwO1xuICAgIGxldCBsbCA9IHU2NC5hZGQzTChBbCwgQmwsIFhsKTtcbiAgICBBaCA9IHU2NC5hZGQzSChsbCwgQWgsIEJoLCBYaCk7XG4gICAgQWwgPSBsbCB8IDA7XG4gICAgLy8gdltkXSA9IHJvdHIodltkXSBeIHZbYV0sIDMyKVxuICAgICh7IERoLCBEbCB9ID0geyBEaDogRGggXiBBaCwgRGw6IERsIF4gQWwgfSk7XG4gICAgKHsgRGgsIERsIH0gPSB7IERoOiB1NjQucm90cjMySChEaCwgRGwpLCBEbDogdTY0LnJvdHIzMkwoRGgsIERsKSB9KTtcbiAgICAvLyB2W2NdID0gKHZbY10gKyB2W2RdKSB8IDA7XG4gICAgKHsgaDogQ2gsIGw6IENsIH0gPSB1NjQuYWRkKENoLCBDbCwgRGgsIERsKSk7XG4gICAgLy8gdltiXSA9IHJvdHIodltiXSBeIHZbY10sIDI0KVxuICAgICh7IEJoLCBCbCB9ID0geyBCaDogQmggXiBDaCwgQmw6IEJsIF4gQ2wgfSk7XG4gICAgKHsgQmgsIEJsIH0gPSB7IEJoOiB1NjQucm90clNIKEJoLCBCbCwgMjQpLCBCbDogdTY0LnJvdHJTTChCaCwgQmwsIDI0KSB9KTtcbiAgICAoQkJVRlsyICogYV0gPSBBbCksIChCQlVGWzIgKiBhICsgMV0gPSBBaCk7XG4gICAgKEJCVUZbMiAqIGJdID0gQmwpLCAoQkJVRlsyICogYiArIDFdID0gQmgpO1xuICAgIChCQlVGWzIgKiBjXSA9IENsKSwgKEJCVUZbMiAqIGMgKyAxXSA9IENoKTtcbiAgICAoQkJVRlsyICogZF0gPSBEbCksIChCQlVGWzIgKiBkICsgMV0gPSBEaCk7XG59XG5mdW5jdGlvbiBHMmIoYSwgYiwgYywgZCwgbXNnLCB4KSB7XG4gICAgLy8gTk9URTogViBpcyBMRSBoZXJlXG4gICAgY29uc3QgWGwgPSBtc2dbeF0sIFhoID0gbXNnW3ggKyAxXTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IEFsID0gQkJVRlsyICogYV0sIEFoID0gQkJVRlsyICogYSArIDFdOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBsZXQgQmwgPSBCQlVGWzIgKiBiXSwgQmggPSBCQlVGWzIgKiBiICsgMV07IC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGxldCBDbCA9IEJCVUZbMiAqIGNdLCBDaCA9IEJCVUZbMiAqIGMgKyAxXTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgbGV0IERsID0gQkJVRlsyICogZF0sIERoID0gQkJVRlsyICogZCArIDFdOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAvLyB2W2FdID0gKHZbYV0gKyB2W2JdICsgeCkgfCAwO1xuICAgIGxldCBsbCA9IHU2NC5hZGQzTChBbCwgQmwsIFhsKTtcbiAgICBBaCA9IHU2NC5hZGQzSChsbCwgQWgsIEJoLCBYaCk7XG4gICAgQWwgPSBsbCB8IDA7XG4gICAgLy8gdltkXSA9IHJvdHIodltkXSBeIHZbYV0sIDE2KVxuICAgICh7IERoLCBEbCB9ID0geyBEaDogRGggXiBBaCwgRGw6IERsIF4gQWwgfSk7XG4gICAgKHsgRGgsIERsIH0gPSB7IERoOiB1NjQucm90clNIKERoLCBEbCwgMTYpLCBEbDogdTY0LnJvdHJTTChEaCwgRGwsIDE2KSB9KTtcbiAgICAvLyB2W2NdID0gKHZbY10gKyB2W2RdKSB8IDA7XG4gICAgKHsgaDogQ2gsIGw6IENsIH0gPSB1NjQuYWRkKENoLCBDbCwgRGgsIERsKSk7XG4gICAgLy8gdltiXSA9IHJvdHIodltiXSBeIHZbY10sIDYzKVxuICAgICh7IEJoLCBCbCB9ID0geyBCaDogQmggXiBDaCwgQmw6IEJsIF4gQ2wgfSk7XG4gICAgKHsgQmgsIEJsIH0gPSB7IEJoOiB1NjQucm90ckJIKEJoLCBCbCwgNjMpLCBCbDogdTY0LnJvdHJCTChCaCwgQmwsIDYzKSB9KTtcbiAgICAoQkJVRlsyICogYV0gPSBBbCksIChCQlVGWzIgKiBhICsgMV0gPSBBaCk7XG4gICAgKEJCVUZbMiAqIGJdID0gQmwpLCAoQkJVRlsyICogYiArIDFdID0gQmgpO1xuICAgIChCQlVGWzIgKiBjXSA9IENsKSwgKEJCVUZbMiAqIGMgKyAxXSA9IENoKTtcbiAgICAoQkJVRlsyICogZF0gPSBEbCksIChCQlVGWzIgKiBkICsgMV0gPSBEaCk7XG59XG5jbGFzcyBCTEFLRTJiIGV4dGVuZHMgQkxBS0Uge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgICAgICBzdXBlcigxMjgsIG9wdHMuZGtMZW4gPT09IHVuZGVmaW5lZCA/IDY0IDogb3B0cy5ka0xlbiwgb3B0cywgNjQsIDE2LCAxNik7XG4gICAgICAgIC8vIFNhbWUgYXMgU0hBLTUxMiwgYnV0IExFXG4gICAgICAgIHRoaXMudjBsID0gQjJCX0lWWzBdIHwgMDtcbiAgICAgICAgdGhpcy52MGggPSBCMkJfSVZbMV0gfCAwO1xuICAgICAgICB0aGlzLnYxbCA9IEIyQl9JVlsyXSB8IDA7XG4gICAgICAgIHRoaXMudjFoID0gQjJCX0lWWzNdIHwgMDtcbiAgICAgICAgdGhpcy52MmwgPSBCMkJfSVZbNF0gfCAwO1xuICAgICAgICB0aGlzLnYyaCA9IEIyQl9JVls1XSB8IDA7XG4gICAgICAgIHRoaXMudjNsID0gQjJCX0lWWzZdIHwgMDtcbiAgICAgICAgdGhpcy52M2ggPSBCMkJfSVZbN10gfCAwO1xuICAgICAgICB0aGlzLnY0bCA9IEIyQl9JVls4XSB8IDA7XG4gICAgICAgIHRoaXMudjRoID0gQjJCX0lWWzldIHwgMDtcbiAgICAgICAgdGhpcy52NWwgPSBCMkJfSVZbMTBdIHwgMDtcbiAgICAgICAgdGhpcy52NWggPSBCMkJfSVZbMTFdIHwgMDtcbiAgICAgICAgdGhpcy52NmwgPSBCMkJfSVZbMTJdIHwgMDtcbiAgICAgICAgdGhpcy52NmggPSBCMkJfSVZbMTNdIHwgMDtcbiAgICAgICAgdGhpcy52N2wgPSBCMkJfSVZbMTRdIHwgMDtcbiAgICAgICAgdGhpcy52N2ggPSBCMkJfSVZbMTVdIHwgMDtcbiAgICAgICAgY29uc3Qga2V5TGVuZ3RoID0gb3B0cy5rZXkgPyBvcHRzLmtleS5sZW5ndGggOiAwO1xuICAgICAgICB0aGlzLnYwbCBePSB0aGlzLm91dHB1dExlbiB8IChrZXlMZW5ndGggPDwgOCkgfCAoMHgwMSA8PCAxNikgfCAoMHgwMSA8PCAyNCk7XG4gICAgICAgIGlmIChvcHRzLnNhbHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNhbHQgPSB1MzIodG9CeXRlcyhvcHRzLnNhbHQpKTtcbiAgICAgICAgICAgIHRoaXMudjRsIF49IGJ5dGVTd2FwSWZCRShzYWx0WzBdKTtcbiAgICAgICAgICAgIHRoaXMudjRoIF49IGJ5dGVTd2FwSWZCRShzYWx0WzFdKTtcbiAgICAgICAgICAgIHRoaXMudjVsIF49IGJ5dGVTd2FwSWZCRShzYWx0WzJdKTtcbiAgICAgICAgICAgIHRoaXMudjVoIF49IGJ5dGVTd2FwSWZCRShzYWx0WzNdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5wZXJzb25hbGl6YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBlcnMgPSB1MzIodG9CeXRlcyhvcHRzLnBlcnNvbmFsaXphdGlvbikpO1xuICAgICAgICAgICAgdGhpcy52NmwgXj0gYnl0ZVN3YXBJZkJFKHBlcnNbMF0pO1xuICAgICAgICAgICAgdGhpcy52NmggXj0gYnl0ZVN3YXBJZkJFKHBlcnNbMV0pO1xuICAgICAgICAgICAgdGhpcy52N2wgXj0gYnl0ZVN3YXBJZkJFKHBlcnNbMl0pO1xuICAgICAgICAgICAgdGhpcy52N2ggXj0gYnl0ZVN3YXBJZkJFKHBlcnNbM10pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmtleSkge1xuICAgICAgICAgICAgLy8gUGFkIHRvIGJsb2NrTGVuIGFuZCB1cGRhdGVcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW4pO1xuICAgICAgICAgICAgdG1wLnNldCh0b0J5dGVzKG9wdHMua2V5KSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0bXApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIGdldCgpIHtcbiAgICAgICAgbGV0IHsgdjBsLCB2MGgsIHYxbCwgdjFoLCB2MmwsIHYyaCwgdjNsLCB2M2gsIHY0bCwgdjRoLCB2NWwsIHY1aCwgdjZsLCB2NmgsIHY3bCwgdjdoIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW3YwbCwgdjBoLCB2MWwsIHYxaCwgdjJsLCB2MmgsIHYzbCwgdjNoLCB2NGwsIHY0aCwgdjVsLCB2NWgsIHY2bCwgdjZoLCB2N2wsIHY3aF07XG4gICAgfVxuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHNldCh2MGwsIHYwaCwgdjFsLCB2MWgsIHYybCwgdjJoLCB2M2wsIHYzaCwgdjRsLCB2NGgsIHY1bCwgdjVoLCB2NmwsIHY2aCwgdjdsLCB2N2gpIHtcbiAgICAgICAgdGhpcy52MGwgPSB2MGwgfCAwO1xuICAgICAgICB0aGlzLnYwaCA9IHYwaCB8IDA7XG4gICAgICAgIHRoaXMudjFsID0gdjFsIHwgMDtcbiAgICAgICAgdGhpcy52MWggPSB2MWggfCAwO1xuICAgICAgICB0aGlzLnYybCA9IHYybCB8IDA7XG4gICAgICAgIHRoaXMudjJoID0gdjJoIHwgMDtcbiAgICAgICAgdGhpcy52M2wgPSB2M2wgfCAwO1xuICAgICAgICB0aGlzLnYzaCA9IHYzaCB8IDA7XG4gICAgICAgIHRoaXMudjRsID0gdjRsIHwgMDtcbiAgICAgICAgdGhpcy52NGggPSB2NGggfCAwO1xuICAgICAgICB0aGlzLnY1bCA9IHY1bCB8IDA7XG4gICAgICAgIHRoaXMudjVoID0gdjVoIHwgMDtcbiAgICAgICAgdGhpcy52NmwgPSB2NmwgfCAwO1xuICAgICAgICB0aGlzLnY2aCA9IHY2aCB8IDA7XG4gICAgICAgIHRoaXMudjdsID0gdjdsIHwgMDtcbiAgICAgICAgdGhpcy52N2ggPSB2N2ggfCAwO1xuICAgIH1cbiAgICBjb21wcmVzcyhtc2csIG9mZnNldCwgaXNMYXN0KSB7XG4gICAgICAgIHRoaXMuZ2V0KCkuZm9yRWFjaCgodiwgaSkgPT4gKEJCVUZbaV0gPSB2KSk7IC8vIEZpcnN0IGhhbGYgZnJvbSBzdGF0ZS5cbiAgICAgICAgQkJVRi5zZXQoQjJCX0lWLCAxNik7IC8vIFNlY29uZCBoYWxmIGZyb20gSVYuXG4gICAgICAgIGxldCB7IGgsIGwgfSA9IHU2NC5mcm9tQmlnKEJpZ0ludCh0aGlzLmxlbmd0aCkpO1xuICAgICAgICBCQlVGWzI0XSA9IEIyQl9JVls4XSBeIGw7IC8vIExvdyB3b3JkIG9mIHRoZSBvZmZzZXQuXG4gICAgICAgIEJCVUZbMjVdID0gQjJCX0lWWzldIF4gaDsgLy8gSGlnaCB3b3JkLlxuICAgICAgICAvLyBJbnZlcnQgYWxsIGJpdHMgZm9yIGxhc3QgYmxvY2tcbiAgICAgICAgaWYgKGlzTGFzdCkge1xuICAgICAgICAgICAgQkJVRlsyOF0gPSB+QkJVRlsyOF07XG4gICAgICAgICAgICBCQlVGWzI5XSA9IH5CQlVGWzI5XTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgIGNvbnN0IHMgPSBTSUdNQTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBHMWIoMCwgNCwgOCwgMTIsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMmIoMCwgNCwgOCwgMTIsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMWIoMSwgNSwgOSwgMTMsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMmIoMSwgNSwgOSwgMTMsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMWIoMiwgNiwgMTAsIDE0LCBtc2csIG9mZnNldCArIDIgKiBzW2orK10pO1xuICAgICAgICAgICAgRzJiKDIsIDYsIDEwLCAxNCwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcxYigzLCA3LCAxMSwgMTUsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMmIoMywgNywgMTEsIDE1LCBtc2csIG9mZnNldCArIDIgKiBzW2orK10pO1xuICAgICAgICAgICAgRzFiKDAsIDUsIDEwLCAxNSwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcyYigwLCA1LCAxMCwgMTUsIG1zZywgb2Zmc2V0ICsgMiAqIHNbaisrXSk7XG4gICAgICAgICAgICBHMWIoMSwgNiwgMTEsIDEyLCBtc2csIG9mZnNldCArIDIgKiBzW2orK10pO1xuICAgICAgICAgICAgRzJiKDEsIDYsIDExLCAxMiwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcxYigyLCA3LCA4LCAxMywgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcyYigyLCA3LCA4LCAxMywgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcxYigzLCA0LCA5LCAxNCwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgICAgIEcyYigzLCA0LCA5LCAxNCwgbXNnLCBvZmZzZXQgKyAyICogc1tqKytdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnYwbCBePSBCQlVGWzBdIF4gQkJVRlsxNl07XG4gICAgICAgIHRoaXMudjBoIF49IEJCVUZbMV0gXiBCQlVGWzE3XTtcbiAgICAgICAgdGhpcy52MWwgXj0gQkJVRlsyXSBeIEJCVUZbMThdO1xuICAgICAgICB0aGlzLnYxaCBePSBCQlVGWzNdIF4gQkJVRlsxOV07XG4gICAgICAgIHRoaXMudjJsIF49IEJCVUZbNF0gXiBCQlVGWzIwXTtcbiAgICAgICAgdGhpcy52MmggXj0gQkJVRls1XSBeIEJCVUZbMjFdO1xuICAgICAgICB0aGlzLnYzbCBePSBCQlVGWzZdIF4gQkJVRlsyMl07XG4gICAgICAgIHRoaXMudjNoIF49IEJCVUZbN10gXiBCQlVGWzIzXTtcbiAgICAgICAgdGhpcy52NGwgXj0gQkJVRls4XSBeIEJCVUZbMjRdO1xuICAgICAgICB0aGlzLnY0aCBePSBCQlVGWzldIF4gQkJVRlsyNV07XG4gICAgICAgIHRoaXMudjVsIF49IEJCVUZbMTBdIF4gQkJVRlsyNl07XG4gICAgICAgIHRoaXMudjVoIF49IEJCVUZbMTFdIF4gQkJVRlsyN107XG4gICAgICAgIHRoaXMudjZsIF49IEJCVUZbMTJdIF4gQkJVRlsyOF07XG4gICAgICAgIHRoaXMudjZoIF49IEJCVUZbMTNdIF4gQkJVRlsyOV07XG4gICAgICAgIHRoaXMudjdsIF49IEJCVUZbMTRdIF4gQkJVRlszMF07XG4gICAgICAgIHRoaXMudjdoIF49IEJCVUZbMTVdIF4gQkJVRlszMV07XG4gICAgICAgIEJCVUYuZmlsbCgwKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1ZmZlcjMyLmZpbGwoMCk7XG4gICAgICAgIHRoaXMuc2V0KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApO1xuICAgIH1cbn1cbi8qKlxuICogQkxBS0UyYiAtIG9wdGltaXplZCBmb3IgNjQtYml0IHBsYXRmb3Jtcy4gSlMgZG9lc24ndCBoYXZlIHVpbnQ2NCwgc28gaXQncyBzbG93ZXIgdGhhbiBCTEFLRTJzLlxuICogQHBhcmFtIG1zZyAtIG1lc3NhZ2UgdGhhdCB3b3VsZCBiZSBoYXNoZWRcbiAqIEBwYXJhbSBvcHRzIC0gZGtMZW4sIGtleSwgc2FsdCwgcGVyc29uYWxpemF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBibGFrZTJiID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcldpdGhPcHRzKChvcHRzKSA9PiBuZXcgQkxBS0UyYihvcHRzKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ibGFrZTJiLmpzLm1hcCIsImV4cG9ydCBjb25zdCBjcnlwdG8gPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcgJiYgJ2NyeXB0bycgaW4gZ2xvYmFsVGhpcyA/IGdsb2JhbFRoaXMuY3J5cHRvIDogdW5kZWZpbmVkO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3J5cHRvLmpzLm1hcCIsImltcG9ydCB7IGhhc2ggYXMgYXNzZXJ0SGFzaCwgYnl0ZXMgYXMgYXNzZXJ0Qnl0ZXMsIGV4aXN0cyBhcyBhc3NlcnRFeGlzdHMgfSBmcm9tICcuL19hc3NlcnQuanMnO1xuaW1wb3J0IHsgSGFzaCwgdG9CeXRlcyB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gSE1BQyAoUkZDIDIxMDQpXG5leHBvcnQgY2xhc3MgSE1BQyBleHRlbmRzIEhhc2gge1xuICAgIGNvbnN0cnVjdG9yKGhhc2gsIF9rZXkpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICBhc3NlcnRIYXNoKGhhc2gpO1xuICAgICAgICBjb25zdCBrZXkgPSB0b0J5dGVzKF9rZXkpO1xuICAgICAgICB0aGlzLmlIYXNoID0gaGFzaC5jcmVhdGUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlIYXNoLnVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgaW5zdGFuY2Ugb2YgY2xhc3Mgd2hpY2ggZXh0ZW5kcyB1dGlscy5IYXNoJyk7XG4gICAgICAgIHRoaXMuYmxvY2tMZW4gPSB0aGlzLmlIYXNoLmJsb2NrTGVuO1xuICAgICAgICB0aGlzLm91dHB1dExlbiA9IHRoaXMuaUhhc2gub3V0cHV0TGVuO1xuICAgICAgICBjb25zdCBibG9ja0xlbiA9IHRoaXMuYmxvY2tMZW47XG4gICAgICAgIGNvbnN0IHBhZCA9IG5ldyBVaW50OEFycmF5KGJsb2NrTGVuKTtcbiAgICAgICAgLy8gYmxvY2tMZW4gY2FuIGJlIGJpZ2dlciB0aGFuIG91dHB1dExlblxuICAgICAgICBwYWQuc2V0KGtleS5sZW5ndGggPiBibG9ja0xlbiA/IGhhc2guY3JlYXRlKCkudXBkYXRlKGtleSkuZGlnZXN0KCkgOiBrZXkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHBhZFtpXSBePSAweDM2O1xuICAgICAgICB0aGlzLmlIYXNoLnVwZGF0ZShwYWQpO1xuICAgICAgICAvLyBCeSBkb2luZyB1cGRhdGUgKHByb2Nlc3Npbmcgb2YgZmlyc3QgYmxvY2spIG9mIG91dGVyIGhhc2ggaGVyZSB3ZSBjYW4gcmUtdXNlIGl0IGJldHdlZW4gbXVsdGlwbGUgY2FsbHMgdmlhIGNsb25lXG4gICAgICAgIHRoaXMub0hhc2ggPSBoYXNoLmNyZWF0ZSgpO1xuICAgICAgICAvLyBVbmRvIGludGVybmFsIFhPUiAmJiBhcHBseSBvdXRlciBYT1JcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBwYWRbaV0gXj0gMHgzNiBeIDB4NWM7XG4gICAgICAgIHRoaXMub0hhc2gudXBkYXRlKHBhZCk7XG4gICAgICAgIHBhZC5maWxsKDApO1xuICAgIH1cbiAgICB1cGRhdGUoYnVmKSB7XG4gICAgICAgIGFzc2VydEV4aXN0cyh0aGlzKTtcbiAgICAgICAgdGhpcy5pSGFzaC51cGRhdGUoYnVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRpZ2VzdEludG8ob3V0KSB7XG4gICAgICAgIGFzc2VydEV4aXN0cyh0aGlzKTtcbiAgICAgICAgYXNzZXJ0Qnl0ZXMob3V0LCB0aGlzLm91dHB1dExlbik7XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlIYXNoLmRpZ2VzdEludG8ob3V0KTtcbiAgICAgICAgdGhpcy5vSGFzaC51cGRhdGUob3V0KTtcbiAgICAgICAgdGhpcy5vSGFzaC5kaWdlc3RJbnRvKG91dCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICBkaWdlc3QoKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IG5ldyBVaW50OEFycmF5KHRoaXMub0hhc2gub3V0cHV0TGVuKTtcbiAgICAgICAgdGhpcy5kaWdlc3RJbnRvKG91dCk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIF9jbG9uZUludG8odG8pIHtcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBpbnN0YW5jZSB3aXRob3V0IGNhbGxpbmcgY29uc3RydWN0b3Igc2luY2Uga2V5IGFscmVhZHkgaW4gc3RhdGUgYW5kIHdlIGRvbid0IGtub3cgaXQuXG4gICAgICAgIHRvIHx8ICh0byA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCB7fSkpO1xuICAgICAgICBjb25zdCB7IG9IYXNoLCBpSGFzaCwgZmluaXNoZWQsIGRlc3Ryb3llZCwgYmxvY2tMZW4sIG91dHB1dExlbiB9ID0gdGhpcztcbiAgICAgICAgdG8gPSB0bztcbiAgICAgICAgdG8uZmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICAgICAgdG8uZGVzdHJveWVkID0gZGVzdHJveWVkO1xuICAgICAgICB0by5ibG9ja0xlbiA9IGJsb2NrTGVuO1xuICAgICAgICB0by5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRvLm9IYXNoID0gb0hhc2guX2Nsb25lSW50byh0by5vSGFzaCk7XG4gICAgICAgIHRvLmlIYXNoID0gaUhhc2guX2Nsb25lSW50byh0by5pSGFzaCk7XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9IYXNoLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pSGFzaC5kZXN0cm95KCk7XG4gICAgfVxufVxuLyoqXG4gKiBITUFDOiBSRkMyMTA0IG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZS5cbiAqIEBwYXJhbSBoYXNoIC0gZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSB1c2VkIGUuZy4gc2hhMjU2XG4gKiBAcGFyYW0ga2V5IC0gbWVzc2FnZSBrZXlcbiAqIEBwYXJhbSBtZXNzYWdlIC0gbWVzc2FnZSBkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBobWFjID0gKGhhc2gsIGtleSwgbWVzc2FnZSkgPT4gbmV3IEhNQUMoaGFzaCwga2V5KS51cGRhdGUobWVzc2FnZSkuZGlnZXN0KCk7XG5obWFjLmNyZWF0ZSA9IChoYXNoLCBrZXkpID0+IG5ldyBITUFDKGhhc2gsIGtleSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1obWFjLmpzLm1hcCIsImltcG9ydCB7IEhhc2hNRCwgQ2hpLCBNYWogfSBmcm9tICcuL19tZC5qcyc7XG5pbXBvcnQgeyByb3RyLCB3cmFwQ29uc3RydWN0b3IgfSBmcm9tICcuL3V0aWxzLmpzJztcbi8vIFNIQTItMjU2IG5lZWQgdG8gdHJ5IDJeMTI4IGhhc2hlcyB0byBleGVjdXRlIGJpcnRoZGF5IGF0dGFjay5cbi8vIEJUQyBuZXR3b3JrIGlzIGRvaW5nIDJeNjcgaGFzaGVzL3NlYyBhcyBwZXIgZWFybHkgMjAyMy5cbi8vIFJvdW5kIGNvbnN0YW50czpcbi8vIGZpcnN0IDMyIGJpdHMgb2YgdGhlIGZyYWN0aW9uYWwgcGFydHMgb2YgdGhlIGN1YmUgcm9vdHMgb2YgdGhlIGZpcnN0IDY0IHByaW1lcyAyLi4zMTEpXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFNIQTI1Nl9LID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheShbXG4gICAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgICAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLCAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LFxuICAgIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsXG4gICAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgICAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLCAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LFxuICAgIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsXG4gICAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgICAweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4LCAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyXG5dKTtcbi8vIEluaXRpYWwgc3RhdGU6XG4vLyBmaXJzdCAzMiBiaXRzIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnRzIG9mIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlIGZpcnN0IDggcHJpbWVzIDIuLjE5XG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFNIQTI1Nl9JViA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4NmEwOWU2NjcsIDB4YmI2N2FlODUsIDB4M2M2ZWYzNzIsIDB4YTU0ZmY1M2EsIDB4NTEwZTUyN2YsIDB4OWIwNTY4OGMsIDB4MWY4M2Q5YWIsIDB4NWJlMGNkMTlcbl0pO1xuLy8gVGVtcG9yYXJ5IGJ1ZmZlciwgbm90IHVzZWQgdG8gc3RvcmUgYW55dGhpbmcgYmV0d2VlbiBydW5zXG4vLyBOYW1lZCB0aGlzIHdheSBiZWNhdXNlIGl0IG1hdGNoZXMgc3BlY2lmaWNhdGlvbi5cbmNvbnN0IFNIQTI1Nl9XID0gLyogQF9fUFVSRV9fICovIG5ldyBVaW50MzJBcnJheSg2NCk7XG5jbGFzcyBTSEEyNTYgZXh0ZW5kcyBIYXNoTUQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcig2NCwgMzIsIDgsIGZhbHNlKTtcbiAgICAgICAgLy8gV2UgY2Fubm90IHVzZSBhcnJheSBoZXJlIHNpbmNlIGFycmF5IGFsbG93cyBpbmRleGluZyBieSB2YXJpYWJsZVxuICAgICAgICAvLyB3aGljaCBtZWFucyBvcHRpbWl6ZXIvY29tcGlsZXIgY2Fubm90IHVzZSByZWdpc3RlcnMuXG4gICAgICAgIHRoaXMuQSA9IFNIQTI1Nl9JVlswXSB8IDA7XG4gICAgICAgIHRoaXMuQiA9IFNIQTI1Nl9JVlsxXSB8IDA7XG4gICAgICAgIHRoaXMuQyA9IFNIQTI1Nl9JVlsyXSB8IDA7XG4gICAgICAgIHRoaXMuRCA9IFNIQTI1Nl9JVlszXSB8IDA7XG4gICAgICAgIHRoaXMuRSA9IFNIQTI1Nl9JVls0XSB8IDA7XG4gICAgICAgIHRoaXMuRiA9IFNIQTI1Nl9JVls1XSB8IDA7XG4gICAgICAgIHRoaXMuRyA9IFNIQTI1Nl9JVls2XSB8IDA7XG4gICAgICAgIHRoaXMuSCA9IFNIQTI1Nl9JVls3XSB8IDA7XG4gICAgfVxuICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBBLCBCLCBDLCBELCBFLCBGLCBHLCBIIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW0EsIEIsIEMsIEQsIEUsIEYsIEcsIEhdO1xuICAgIH1cbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICBzZXQoQSwgQiwgQywgRCwgRSwgRiwgRywgSCkge1xuICAgICAgICB0aGlzLkEgPSBBIHwgMDtcbiAgICAgICAgdGhpcy5CID0gQiB8IDA7XG4gICAgICAgIHRoaXMuQyA9IEMgfCAwO1xuICAgICAgICB0aGlzLkQgPSBEIHwgMDtcbiAgICAgICAgdGhpcy5FID0gRSB8IDA7XG4gICAgICAgIHRoaXMuRiA9IEYgfCAwO1xuICAgICAgICB0aGlzLkcgPSBHIHwgMDtcbiAgICAgICAgdGhpcy5IID0gSCB8IDA7XG4gICAgfVxuICAgIHByb2Nlc3Modmlldywgb2Zmc2V0KSB7XG4gICAgICAgIC8vIEV4dGVuZCB0aGUgZmlyc3QgMTYgd29yZHMgaW50byB0aGUgcmVtYWluaW5nIDQ4IHdvcmRzIHdbMTYuLjYzXSBvZiB0aGUgbWVzc2FnZSBzY2hlZHVsZSBhcnJheVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyssIG9mZnNldCArPSA0KVxuICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSB2aWV3LmdldFVpbnQzMihvZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE2OyBpIDwgNjQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgVzE1ID0gU0hBMjU2X1dbaSAtIDE1XTtcbiAgICAgICAgICAgIGNvbnN0IFcyID0gU0hBMjU2X1dbaSAtIDJdO1xuICAgICAgICAgICAgY29uc3QgczAgPSByb3RyKFcxNSwgNykgXiByb3RyKFcxNSwgMTgpIF4gKFcxNSA+Pj4gMyk7XG4gICAgICAgICAgICBjb25zdCBzMSA9IHJvdHIoVzIsIDE3KSBeIHJvdHIoVzIsIDE5KSBeIChXMiA+Pj4gMTApO1xuICAgICAgICAgICAgU0hBMjU2X1dbaV0gPSAoczEgKyBTSEEyNTZfV1tpIC0gN10gKyBzMCArIFNIQTI1Nl9XW2kgLSAxNl0pIHwgMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDb21wcmVzc2lvbiBmdW5jdGlvbiBtYWluIGxvb3AsIDY0IHJvdW5kc1xuICAgICAgICBsZXQgeyBBLCBCLCBDLCBELCBFLCBGLCBHLCBIIH0gPSB0aGlzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ21hMSA9IHJvdHIoRSwgNikgXiByb3RyKEUsIDExKSBeIHJvdHIoRSwgMjUpO1xuICAgICAgICAgICAgY29uc3QgVDEgPSAoSCArIHNpZ21hMSArIENoaShFLCBGLCBHKSArIFNIQTI1Nl9LW2ldICsgU0hBMjU2X1dbaV0pIHwgMDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ21hMCA9IHJvdHIoQSwgMikgXiByb3RyKEEsIDEzKSBeIHJvdHIoQSwgMjIpO1xuICAgICAgICAgICAgY29uc3QgVDIgPSAoc2lnbWEwICsgTWFqKEEsIEIsIEMpKSB8IDA7XG4gICAgICAgICAgICBIID0gRztcbiAgICAgICAgICAgIEcgPSBGO1xuICAgICAgICAgICAgRiA9IEU7XG4gICAgICAgICAgICBFID0gKEQgKyBUMSkgfCAwO1xuICAgICAgICAgICAgRCA9IEM7XG4gICAgICAgICAgICBDID0gQjtcbiAgICAgICAgICAgIEIgPSBBO1xuICAgICAgICAgICAgQSA9IChUMSArIFQyKSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIHRoZSBjb21wcmVzc2VkIGNodW5rIHRvIHRoZSBjdXJyZW50IGhhc2ggdmFsdWVcbiAgICAgICAgQSA9IChBICsgdGhpcy5BKSB8IDA7XG4gICAgICAgIEIgPSAoQiArIHRoaXMuQikgfCAwO1xuICAgICAgICBDID0gKEMgKyB0aGlzLkMpIHwgMDtcbiAgICAgICAgRCA9IChEICsgdGhpcy5EKSB8IDA7XG4gICAgICAgIEUgPSAoRSArIHRoaXMuRSkgfCAwO1xuICAgICAgICBGID0gKEYgKyB0aGlzLkYpIHwgMDtcbiAgICAgICAgRyA9IChHICsgdGhpcy5HKSB8IDA7XG4gICAgICAgIEggPSAoSCArIHRoaXMuSCkgfCAwO1xuICAgICAgICB0aGlzLnNldChBLCBCLCBDLCBELCBFLCBGLCBHLCBIKTtcbiAgICB9XG4gICAgcm91bmRDbGVhbigpIHtcbiAgICAgICAgU0hBMjU2X1cuZmlsbCgwKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zZXQoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7XG4gICAgICAgIHRoaXMuYnVmZmVyLmZpbGwoMCk7XG4gICAgfVxufVxuLy8gQ29uc3RhbnRzIGZyb20gaHR0cHM6Ly9udmxwdWJzLm5pc3QuZ292L25pc3RwdWJzL0ZJUFMvTklTVC5GSVBTLjE4MC00LnBkZlxuY2xhc3MgU0hBMjI0IGV4dGVuZHMgU0hBMjU2IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5BID0gMHhjMTA1OWVkOCB8IDA7XG4gICAgICAgIHRoaXMuQiA9IDB4MzY3Y2Q1MDcgfCAwO1xuICAgICAgICB0aGlzLkMgPSAweDMwNzBkZDE3IHwgMDtcbiAgICAgICAgdGhpcy5EID0gMHhmNzBlNTkzOSB8IDA7XG4gICAgICAgIHRoaXMuRSA9IDB4ZmZjMDBiMzEgfCAwO1xuICAgICAgICB0aGlzLkYgPSAweDY4NTgxNTExIHwgMDtcbiAgICAgICAgdGhpcy5HID0gMHg2NGY5OGZhNyB8IDA7XG4gICAgICAgIHRoaXMuSCA9IDB4YmVmYTRmYTQgfCAwO1xuICAgICAgICB0aGlzLm91dHB1dExlbiA9IDI4O1xuICAgIH1cbn1cbi8qKlxuICogU0hBMi0yNTYgaGFzaCBmdW5jdGlvblxuICogQHBhcmFtIG1lc3NhZ2UgLSBkYXRhIHRoYXQgd291bGQgYmUgaGFzaGVkXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEyNTYgPSAvKiBAX19QVVJFX18gKi8gd3JhcENvbnN0cnVjdG9yKCgpID0+IG5ldyBTSEEyNTYoKSk7XG5leHBvcnQgY29uc3Qgc2hhMjI0ID0gLyogQF9fUFVSRV9fICovIHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgU0hBMjI0KCkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhMjU2LmpzLm1hcCIsImltcG9ydCB7IGJ5dGVzLCBleGlzdHMsIG51bWJlciwgb3V0cHV0IH0gZnJvbSAnLi9fYXNzZXJ0LmpzJztcbmltcG9ydCB7IHJvdGxCSCwgcm90bEJMLCByb3RsU0gsIHJvdGxTTCwgc3BsaXQgfSBmcm9tICcuL191NjQuanMnO1xuaW1wb3J0IHsgSGFzaCwgdTMyLCB0b0J5dGVzLCB3cmFwQ29uc3RydWN0b3IsIHdyYXBYT0ZDb25zdHJ1Y3RvcldpdGhPcHRzLCBpc0xFLCBieXRlU3dhcDMyLCB9IGZyb20gJy4vdXRpbHMuanMnO1xuLy8gU0hBMyAoa2VjY2FrKSBpcyBiYXNlZCBvbiBhIG5ldyBkZXNpZ246IGJhc2ljYWxseSwgdGhlIGludGVybmFsIHN0YXRlIGlzIGJpZ2dlciB0aGFuIG91dHB1dCBzaXplLlxuLy8gSXQncyBjYWxsZWQgYSBzcG9uZ2UgZnVuY3Rpb24uXG4vLyBWYXJpb3VzIHBlciByb3VuZCBjb25zdGFudHMgY2FsY3VsYXRpb25zXG5jb25zdCBTSEEzX1BJID0gW107XG5jb25zdCBTSEEzX1JPVEwgPSBbXTtcbmNvbnN0IF9TSEEzX0lPVEEgPSBbXTtcbmNvbnN0IF8wbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMCk7XG5jb25zdCBfMW4gPSAvKiBAX19QVVJFX18gKi8gQmlnSW50KDEpO1xuY29uc3QgXzJuID0gLyogQF9fUFVSRV9fICovIEJpZ0ludCgyKTtcbmNvbnN0IF83biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoNyk7XG5jb25zdCBfMjU2biA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMjU2KTtcbmNvbnN0IF8weDcxbiA9IC8qIEBfX1BVUkVfXyAqLyBCaWdJbnQoMHg3MSk7XG5mb3IgKGxldCByb3VuZCA9IDAsIFIgPSBfMW4sIHggPSAxLCB5ID0gMDsgcm91bmQgPCAyNDsgcm91bmQrKykge1xuICAgIC8vIFBpXG4gICAgW3gsIHldID0gW3ksICgyICogeCArIDMgKiB5KSAlIDVdO1xuICAgIFNIQTNfUEkucHVzaCgyICogKDUgKiB5ICsgeCkpO1xuICAgIC8vIFJvdGF0aW9uYWxcbiAgICBTSEEzX1JPVEwucHVzaCgoKChyb3VuZCArIDEpICogKHJvdW5kICsgMikpIC8gMikgJSA2NCk7XG4gICAgLy8gSW90YVxuICAgIGxldCB0ID0gXzBuO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgNzsgaisrKSB7XG4gICAgICAgIFIgPSAoKFIgPDwgXzFuKSBeICgoUiA+PiBfN24pICogXzB4NzFuKSkgJSBfMjU2bjtcbiAgICAgICAgaWYgKFIgJiBfMm4pXG4gICAgICAgICAgICB0IF49IF8xbiA8PCAoKF8xbiA8PCAvKiBAX19QVVJFX18gKi8gQmlnSW50KGopKSAtIF8xbik7XG4gICAgfVxuICAgIF9TSEEzX0lPVEEucHVzaCh0KTtcbn1cbmNvbnN0IFtTSEEzX0lPVEFfSCwgU0hBM19JT1RBX0xdID0gLyogQF9fUFVSRV9fICovIHNwbGl0KF9TSEEzX0lPVEEsIHRydWUpO1xuLy8gTGVmdCByb3RhdGlvbiAod2l0aG91dCAwLCAzMiwgNjQpXG5jb25zdCByb3RsSCA9IChoLCBsLCBzKSA9PiAocyA+IDMyID8gcm90bEJIKGgsIGwsIHMpIDogcm90bFNIKGgsIGwsIHMpKTtcbmNvbnN0IHJvdGxMID0gKGgsIGwsIHMpID0+IChzID4gMzIgPyByb3RsQkwoaCwgbCwgcykgOiByb3RsU0woaCwgbCwgcykpO1xuLy8gU2FtZSBhcyBrZWNjYWtmMTYwMCwgYnV0IGFsbG93cyB0byBza2lwIHNvbWUgcm91bmRzXG5leHBvcnQgZnVuY3Rpb24ga2VjY2FrUChzLCByb3VuZHMgPSAyNCkge1xuICAgIGNvbnN0IEIgPSBuZXcgVWludDMyQXJyYXkoNSAqIDIpO1xuICAgIC8vIE5PVEU6IGFsbCBpbmRpY2VzIGFyZSB4MiBzaW5jZSB3ZSBzdG9yZSBzdGF0ZSBhcyB1MzIgaW5zdGVhZCBvZiB1NjQgKGJpZ2ludHMgdG8gc2xvdyBpbiBqcylcbiAgICBmb3IgKGxldCByb3VuZCA9IDI0IC0gcm91bmRzOyByb3VuZCA8IDI0OyByb3VuZCsrKSB7XG4gICAgICAgIC8vIFRoZXRhIM64XG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgMTA7IHgrKylcbiAgICAgICAgICAgIEJbeF0gPSBzW3hdIF4gc1t4ICsgMTBdIF4gc1t4ICsgMjBdIF4gc1t4ICsgMzBdIF4gc1t4ICsgNDBdO1xuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4ICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeDEgPSAoeCArIDgpICUgMTA7XG4gICAgICAgICAgICBjb25zdCBpZHgwID0gKHggKyAyKSAlIDEwO1xuICAgICAgICAgICAgY29uc3QgQjAgPSBCW2lkeDBdO1xuICAgICAgICAgICAgY29uc3QgQjEgPSBCW2lkeDAgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IFRoID0gcm90bEgoQjAsIEIxLCAxKSBeIEJbaWR4MV07XG4gICAgICAgICAgICBjb25zdCBUbCA9IHJvdGxMKEIwLCBCMSwgMSkgXiBCW2lkeDEgKyAxXTtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgNTA7IHkgKz0gMTApIHtcbiAgICAgICAgICAgICAgICBzW3ggKyB5XSBePSBUaDtcbiAgICAgICAgICAgICAgICBzW3ggKyB5ICsgMV0gXj0gVGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmhvICjPgSkgYW5kIFBpICjPgClcbiAgICAgICAgbGV0IGN1ckggPSBzWzJdO1xuICAgICAgICBsZXQgY3VyTCA9IHNbM107XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMjQ7IHQrKykge1xuICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSBTSEEzX1JPVExbdF07XG4gICAgICAgICAgICBjb25zdCBUaCA9IHJvdGxIKGN1ckgsIGN1ckwsIHNoaWZ0KTtcbiAgICAgICAgICAgIGNvbnN0IFRsID0gcm90bEwoY3VySCwgY3VyTCwgc2hpZnQpO1xuICAgICAgICAgICAgY29uc3QgUEkgPSBTSEEzX1BJW3RdO1xuICAgICAgICAgICAgY3VySCA9IHNbUEldO1xuICAgICAgICAgICAgY3VyTCA9IHNbUEkgKyAxXTtcbiAgICAgICAgICAgIHNbUEldID0gVGg7XG4gICAgICAgICAgICBzW1BJICsgMV0gPSBUbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGkgKM+HKVxuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IDUwOyB5ICs9IDEwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IDEwOyB4KyspXG4gICAgICAgICAgICAgICAgQlt4XSA9IHNbeSArIHhdO1xuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCAxMDsgeCsrKVxuICAgICAgICAgICAgICAgIHNbeSArIHhdIF49IH5CWyh4ICsgMikgJSAxMF0gJiBCWyh4ICsgNCkgJSAxMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW90YSAozrkpXG4gICAgICAgIHNbMF0gXj0gU0hBM19JT1RBX0hbcm91bmRdO1xuICAgICAgICBzWzFdIF49IFNIQTNfSU9UQV9MW3JvdW5kXTtcbiAgICB9XG4gICAgQi5maWxsKDApO1xufVxuZXhwb3J0IGNsYXNzIEtlY2NhayBleHRlbmRzIEhhc2gge1xuICAgIC8vIE5PVEU6IHdlIGFjY2VwdCBhcmd1bWVudHMgaW4gYnl0ZXMgaW5zdGVhZCBvZiBiaXRzIGhlcmUuXG4gICAgY29uc3RydWN0b3IoYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCBlbmFibGVYT0YgPSBmYWxzZSwgcm91bmRzID0gMjQpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5ibG9ja0xlbiA9IGJsb2NrTGVuO1xuICAgICAgICB0aGlzLnN1ZmZpeCA9IHN1ZmZpeDtcbiAgICAgICAgdGhpcy5vdXRwdXRMZW4gPSBvdXRwdXRMZW47XG4gICAgICAgIHRoaXMuZW5hYmxlWE9GID0gZW5hYmxlWE9GO1xuICAgICAgICB0aGlzLnJvdW5kcyA9IHJvdW5kcztcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICB0aGlzLnBvc091dCA9IDA7XG4gICAgICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gQ2FuIGJlIHBhc3NlZCBmcm9tIHVzZXIgYXMgZGtMZW5cbiAgICAgICAgbnVtYmVyKG91dHB1dExlbik7XG4gICAgICAgIC8vIDE2MDAgPSA1eDUgbWF0cml4IG9mIDY0Yml0LiAgMTYwMCBiaXRzID09PSAyMDAgYnl0ZXNcbiAgICAgICAgaWYgKDAgPj0gdGhpcy5ibG9ja0xlbiB8fCB0aGlzLmJsb2NrTGVuID49IDIwMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2hhMyBzdXBwb3J0cyBvbmx5IGtlY2Nhay1mMTYwMCBmdW5jdGlvbicpO1xuICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMjAwKTtcbiAgICAgICAgdGhpcy5zdGF0ZTMyID0gdTMyKHRoaXMuc3RhdGUpO1xuICAgIH1cbiAgICBrZWNjYWsoKSB7XG4gICAgICAgIGlmICghaXNMRSlcbiAgICAgICAgICAgIGJ5dGVTd2FwMzIodGhpcy5zdGF0ZTMyKTtcbiAgICAgICAga2VjY2FrUCh0aGlzLnN0YXRlMzIsIHRoaXMucm91bmRzKTtcbiAgICAgICAgaWYgKCFpc0xFKVxuICAgICAgICAgICAgYnl0ZVN3YXAzMih0aGlzLnN0YXRlMzIpO1xuICAgICAgICB0aGlzLnBvc091dCA9IDA7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICB9XG4gICAgdXBkYXRlKGRhdGEpIHtcbiAgICAgICAgZXhpc3RzKHRoaXMpO1xuICAgICAgICBjb25zdCB7IGJsb2NrTGVuLCBzdGF0ZSB9ID0gdGhpcztcbiAgICAgICAgZGF0YSA9IHRvQnl0ZXMoZGF0YSk7XG4gICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBwb3MgPSAwOyBwb3MgPCBsZW47KSB7XG4gICAgICAgICAgICBjb25zdCB0YWtlID0gTWF0aC5taW4oYmxvY2tMZW4gLSB0aGlzLnBvcywgbGVuIC0gcG9zKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFrZTsgaSsrKVxuICAgICAgICAgICAgICAgIHN0YXRlW3RoaXMucG9zKytdIF49IGRhdGFbcG9zKytdO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBibG9ja0xlbilcbiAgICAgICAgICAgICAgICB0aGlzLmtlY2NhaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmaW5pc2goKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbmlzaGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgc3VmZml4LCBwb3MsIGJsb2NrTGVuIH0gPSB0aGlzO1xuICAgICAgICAvLyBEbyB0aGUgcGFkZGluZ1xuICAgICAgICBzdGF0ZVtwb3NdIF49IHN1ZmZpeDtcbiAgICAgICAgaWYgKChzdWZmaXggJiAweDgwKSAhPT0gMCAmJiBwb3MgPT09IGJsb2NrTGVuIC0gMSlcbiAgICAgICAgICAgIHRoaXMua2VjY2FrKCk7XG4gICAgICAgIHN0YXRlW2Jsb2NrTGVuIC0gMV0gXj0gMHg4MDtcbiAgICAgICAgdGhpcy5rZWNjYWsoKTtcbiAgICB9XG4gICAgd3JpdGVJbnRvKG91dCkge1xuICAgICAgICBleGlzdHModGhpcywgZmFsc2UpO1xuICAgICAgICBieXRlcyhvdXQpO1xuICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICBjb25zdCBidWZmZXJPdXQgPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCB7IGJsb2NrTGVuIH0gPSB0aGlzO1xuICAgICAgICBmb3IgKGxldCBwb3MgPSAwLCBsZW4gPSBvdXQubGVuZ3RoOyBwb3MgPCBsZW47KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3NPdXQgPj0gYmxvY2tMZW4pXG4gICAgICAgICAgICAgICAgdGhpcy5rZWNjYWsoKTtcbiAgICAgICAgICAgIGNvbnN0IHRha2UgPSBNYXRoLm1pbihibG9ja0xlbiAtIHRoaXMucG9zT3V0LCBsZW4gLSBwb3MpO1xuICAgICAgICAgICAgb3V0LnNldChidWZmZXJPdXQuc3ViYXJyYXkodGhpcy5wb3NPdXQsIHRoaXMucG9zT3V0ICsgdGFrZSksIHBvcyk7XG4gICAgICAgICAgICB0aGlzLnBvc091dCArPSB0YWtlO1xuICAgICAgICAgICAgcG9zICs9IHRha2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgeG9mSW50byhvdXQpIHtcbiAgICAgICAgLy8gU2hhMy9LZWNjYWsgdXNhZ2Ugd2l0aCBYT0YgaXMgcHJvYmFibHkgbWlzdGFrZSwgb25seSBTSEFLRSBpbnN0YW5jZXMgY2FuIGRvIFhPRlxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlWE9GKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdYT0YgaXMgbm90IHBvc3NpYmxlIGZvciB0aGlzIGluc3RhbmNlJyk7XG4gICAgICAgIHJldHVybiB0aGlzLndyaXRlSW50byhvdXQpO1xuICAgIH1cbiAgICB4b2YoYnl0ZXMpIHtcbiAgICAgICAgbnVtYmVyKGJ5dGVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMueG9mSW50byhuZXcgVWludDhBcnJheShieXRlcykpO1xuICAgIH1cbiAgICBkaWdlc3RJbnRvKG91dCkge1xuICAgICAgICBvdXRwdXQob3V0LCB0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuZmluaXNoZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZ2VzdCgpIHdhcyBhbHJlYWR5IGNhbGxlZCcpO1xuICAgICAgICB0aGlzLndyaXRlSW50byhvdXQpO1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgZGlnZXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaWdlc3RJbnRvKG5ldyBVaW50OEFycmF5KHRoaXMub3V0cHV0TGVuKSk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGF0ZS5maWxsKDApO1xuICAgIH1cbiAgICBfY2xvbmVJbnRvKHRvKSB7XG4gICAgICAgIGNvbnN0IHsgYmxvY2tMZW4sIHN1ZmZpeCwgb3V0cHV0TGVuLCByb3VuZHMsIGVuYWJsZVhPRiB9ID0gdGhpcztcbiAgICAgICAgdG8gfHwgKHRvID0gbmV3IEtlY2NhayhibG9ja0xlbiwgc3VmZml4LCBvdXRwdXRMZW4sIGVuYWJsZVhPRiwgcm91bmRzKSk7XG4gICAgICAgIHRvLnN0YXRlMzIuc2V0KHRoaXMuc3RhdGUzMik7XG4gICAgICAgIHRvLnBvcyA9IHRoaXMucG9zO1xuICAgICAgICB0by5wb3NPdXQgPSB0aGlzLnBvc091dDtcbiAgICAgICAgdG8uZmluaXNoZWQgPSB0aGlzLmZpbmlzaGVkO1xuICAgICAgICB0by5yb3VuZHMgPSByb3VuZHM7XG4gICAgICAgIC8vIFN1ZmZpeCBjYW4gY2hhbmdlIGluIGNTSEFLRVxuICAgICAgICB0by5zdWZmaXggPSBzdWZmaXg7XG4gICAgICAgIHRvLm91dHB1dExlbiA9IG91dHB1dExlbjtcbiAgICAgICAgdG8uZW5hYmxlWE9GID0gZW5hYmxlWE9GO1xuICAgICAgICB0by5kZXN0cm95ZWQgPSB0aGlzLmRlc3Ryb3llZDtcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cbn1cbmNvbnN0IGdlbiA9IChzdWZmaXgsIGJsb2NrTGVuLCBvdXRwdXRMZW4pID0+IHdyYXBDb25zdHJ1Y3RvcigoKSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG91dHB1dExlbikpO1xuZXhwb3J0IGNvbnN0IHNoYTNfMjI0ID0gLyogQF9fUFVSRV9fICovIGdlbigweDA2LCAxNDQsIDIyNCAvIDgpO1xuLyoqXG4gKiBTSEEzLTI1NiBoYXNoIGZ1bmN0aW9uXG4gKiBAcGFyYW0gbWVzc2FnZSAtIHRoYXQgd291bGQgYmUgaGFzaGVkXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEzXzI1NiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oMHgwNiwgMTM2LCAyNTYgLyA4KTtcbmV4cG9ydCBjb25zdCBzaGEzXzM4NCA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oMHgwNiwgMTA0LCAzODQgLyA4KTtcbmV4cG9ydCBjb25zdCBzaGEzXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oMHgwNiwgNzIsIDUxMiAvIDgpO1xuZXhwb3J0IGNvbnN0IGtlY2Nha18yMjQgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDB4MDEsIDE0NCwgMjI0IC8gOCk7XG4vKipcbiAqIGtlY2Nhay0yNTYgaGFzaCBmdW5jdGlvbi4gRGlmZmVyZW50IGZyb20gU0hBMy0yNTYuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIHRoYXQgd291bGQgYmUgaGFzaGVkXG4gKi9cbmV4cG9ydCBjb25zdCBrZWNjYWtfMjU2ID0gLyogQF9fUFVSRV9fICovIGdlbigweDAxLCAxMzYsIDI1NiAvIDgpO1xuZXhwb3J0IGNvbnN0IGtlY2Nha18zODQgPSAvKiBAX19QVVJFX18gKi8gZ2VuKDB4MDEsIDEwNCwgMzg0IC8gOCk7XG5leHBvcnQgY29uc3Qga2VjY2FrXzUxMiA9IC8qIEBfX1BVUkVfXyAqLyBnZW4oMHgwMSwgNzIsIDUxMiAvIDgpO1xuY29uc3QgZ2VuU2hha2UgPSAoc3VmZml4LCBibG9ja0xlbiwgb3V0cHV0TGVuKSA9PiB3cmFwWE9GQ29uc3RydWN0b3JXaXRoT3B0cygob3B0cyA9IHt9KSA9PiBuZXcgS2VjY2FrKGJsb2NrTGVuLCBzdWZmaXgsIG9wdHMuZGtMZW4gPT09IHVuZGVmaW5lZCA/IG91dHB1dExlbiA6IG9wdHMuZGtMZW4sIHRydWUpKTtcbmV4cG9ydCBjb25zdCBzaGFrZTEyOCA9IC8qIEBfX1BVUkVfXyAqLyBnZW5TaGFrZSgweDFmLCAxNjgsIDEyOCAvIDgpO1xuZXhwb3J0IGNvbnN0IHNoYWtlMjU2ID0gLyogQF9fUFVSRV9fICovIGdlblNoYWtlKDB4MWYsIDEzNiwgMjU2IC8gOCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGEzLmpzLm1hcCIsIi8qISBub2JsZS1oYXNoZXMgLSBNSVQgTGljZW5zZSAoYykgMjAyMiBQYXVsIE1pbGxlciAocGF1bG1pbGxyLmNvbSkgKi9cbi8vIFdlIHVzZSBXZWJDcnlwdG8gYWthIGdsb2JhbFRoaXMuY3J5cHRvLCB3aGljaCBleGlzdHMgaW4gYnJvd3NlcnMgYW5kIG5vZGUuanMgMTYrLlxuLy8gbm9kZS5qcyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gdjE5IGRvbid0IGRlY2xhcmUgaXQgaW4gZ2xvYmFsIHNjb3BlLlxuLy8gRm9yIG5vZGUuanMsIHBhY2thZ2UuanNvbiNleHBvcnRzIGZpZWxkIG1hcHBpbmcgcmV3cml0ZXMgaW1wb3J0XG4vLyBmcm9tIGBjcnlwdG9gIHRvIGBjcnlwdG9Ob2RlYCwgd2hpY2ggaW1wb3J0cyBuYXRpdmUgbW9kdWxlLlxuLy8gTWFrZXMgdGhlIHV0aWxzIHVuLWltcG9ydGFibGUgaW4gYnJvd3NlcnMgd2l0aG91dCBhIGJ1bmRsZXIuXG4vLyBPbmNlIG5vZGUuanMgMTggaXMgZGVwcmVjYXRlZCAoMjAyNS0wNC0zMCksIHdlIGNhbiBqdXN0IGRyb3AgdGhlIGltcG9ydC5cbmltcG9ydCB7IGNyeXB0byB9IGZyb20gJ0Bub2JsZS9oYXNoZXMvY3J5cHRvJztcbmltcG9ydCB7IGJ5dGVzIGFzIGFieXRlcyB9IGZyb20gJy4vX2Fzc2VydC5qcyc7XG4vLyBleHBvcnQgeyBpc0J5dGVzIH0gZnJvbSAnLi9fYXNzZXJ0LmpzJztcbi8vIFdlIGNhbid0IHJldXNlIGlzQnl0ZXMgZnJvbSBfYXNzZXJ0LCBiZWNhdXNlIHNvbWVob3cgdGhpcyBjYXVzZXMgaHVnZSBwZXJmIGlzc3Vlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnl0ZXMoYSkge1xuICAgIHJldHVybiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHxcbiAgICAgICAgKGEgIT0gbnVsbCAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgYS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVWludDhBcnJheScpKTtcbn1cbi8vIENhc3QgYXJyYXkgdG8gZGlmZmVyZW50IHR5cGVcbmV4cG9ydCBjb25zdCB1OCA9IChhcnIpID0+IG5ldyBVaW50OEFycmF5KGFyci5idWZmZXIsIGFyci5ieXRlT2Zmc2V0LCBhcnIuYnl0ZUxlbmd0aCk7XG5leHBvcnQgY29uc3QgdTMyID0gKGFycikgPT4gbmV3IFVpbnQzMkFycmF5KGFyci5idWZmZXIsIGFyci5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGFyci5ieXRlTGVuZ3RoIC8gNCkpO1xuLy8gQ2FzdCBhcnJheSB0byB2aWV3XG5leHBvcnQgY29uc3QgY3JlYXRlVmlldyA9IChhcnIpID0+IG5ldyBEYXRhVmlldyhhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgYXJyLmJ5dGVMZW5ndGgpO1xuLy8gVGhlIHJvdGF0ZSByaWdodCAoY2lyY3VsYXIgcmlnaHQgc2hpZnQpIG9wZXJhdGlvbiBmb3IgdWludDMyXG5leHBvcnQgY29uc3Qgcm90ciA9ICh3b3JkLCBzaGlmdCkgPT4gKHdvcmQgPDwgKDMyIC0gc2hpZnQpKSB8ICh3b3JkID4+PiBzaGlmdCk7XG4vLyBUaGUgcm90YXRlIGxlZnQgKGNpcmN1bGFyIGxlZnQgc2hpZnQpIG9wZXJhdGlvbiBmb3IgdWludDMyXG5leHBvcnQgY29uc3Qgcm90bCA9ICh3b3JkLCBzaGlmdCkgPT4gKHdvcmQgPDwgc2hpZnQpIHwgKCh3b3JkID4+PiAoMzIgLSBzaGlmdCkpID4+PiAwKTtcbmV4cG9ydCBjb25zdCBpc0xFID0gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQzMkFycmF5KFsweDExMjIzMzQ0XSkuYnVmZmVyKVswXSA9PT0gMHg0NDtcbi8vIFRoZSBieXRlIHN3YXAgb3BlcmF0aW9uIGZvciB1aW50MzJcbmV4cG9ydCBjb25zdCBieXRlU3dhcCA9ICh3b3JkKSA9PiAoKHdvcmQgPDwgMjQpICYgMHhmZjAwMDAwMCkgfFxuICAgICgod29yZCA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgKCh3b3JkID4+PiA4KSAmIDB4ZmYwMCkgfFxuICAgICgod29yZCA+Pj4gMjQpICYgMHhmZik7XG4vLyBDb25kaXRpb25hbGx5IGJ5dGUgc3dhcCBpZiBvbiBhIGJpZy1lbmRpYW4gcGxhdGZvcm1cbmV4cG9ydCBjb25zdCBieXRlU3dhcElmQkUgPSBpc0xFID8gKG4pID0+IG4gOiAobikgPT4gYnl0ZVN3YXAobik7XG4vLyBJbiBwbGFjZSBieXRlIHN3YXAgZm9yIFVpbnQzMkFycmF5XG5leHBvcnQgZnVuY3Rpb24gYnl0ZVN3YXAzMihhcnIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnJbaV0gPSBieXRlU3dhcChhcnJbaV0pO1xuICAgIH1cbn1cbi8vIEFycmF5IHdoZXJlIGluZGV4IDB4ZjAgKDI0MCkgaXMgbWFwcGVkIHRvIHN0cmluZyAnZjAnXG5jb25zdCBoZXhlcyA9IC8qIEBfX1BVUkVfXyAqLyBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSwgKF8sIGkpID0+IGkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpO1xuLyoqXG4gKiBAZXhhbXBsZSBieXRlc1RvSGV4KFVpbnQ4QXJyYXkuZnJvbShbMHhjYSwgMHhmZSwgMHgwMSwgMHgyM10pKSAvLyAnY2FmZTAxMjMnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlc1RvSGV4KGJ5dGVzKSB7XG4gICAgYWJ5dGVzKGJ5dGVzKTtcbiAgICAvLyBwcmUtY2FjaGluZyBpbXByb3ZlcyB0aGUgc3BlZWQgNnhcbiAgICBsZXQgaGV4ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBoZXggKz0gaGV4ZXNbYnl0ZXNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gaGV4O1xufVxuLy8gV2UgdXNlIG9wdGltaXplZCB0ZWNobmlxdWUgdG8gY29udmVydCBoZXggc3RyaW5nIHRvIGJ5dGUgYXJyYXlcbmNvbnN0IGFzY2lpcyA9IHsgXzA6IDQ4LCBfOTogNTcsIF9BOiA2NSwgX0Y6IDcwLCBfYTogOTcsIF9mOiAxMDIgfTtcbmZ1bmN0aW9uIGFzY2lpVG9CYXNlMTYoY2hhcikge1xuICAgIGlmIChjaGFyID49IGFzY2lpcy5fMCAmJiBjaGFyIDw9IGFzY2lpcy5fOSlcbiAgICAgICAgcmV0dXJuIGNoYXIgLSBhc2NpaXMuXzA7XG4gICAgaWYgKGNoYXIgPj0gYXNjaWlzLl9BICYmIGNoYXIgPD0gYXNjaWlzLl9GKVxuICAgICAgICByZXR1cm4gY2hhciAtIChhc2NpaXMuX0EgLSAxMCk7XG4gICAgaWYgKGNoYXIgPj0gYXNjaWlzLl9hICYmIGNoYXIgPD0gYXNjaWlzLl9mKVxuICAgICAgICByZXR1cm4gY2hhciAtIChhc2NpaXMuX2EgLSAxMCk7XG4gICAgcmV0dXJuO1xufVxuLyoqXG4gKiBAZXhhbXBsZSBoZXhUb0J5dGVzKCdjYWZlMDEyMycpIC8vIFVpbnQ4QXJyYXkuZnJvbShbMHhjYSwgMHhmZSwgMHgwMSwgMHgyM10pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb0J5dGVzKGhleCkge1xuICAgIGlmICh0eXBlb2YgaGV4ICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgJyArIHR5cGVvZiBoZXgpO1xuICAgIGNvbnN0IGhsID0gaGV4Lmxlbmd0aDtcbiAgICBjb25zdCBhbCA9IGhsIC8gMjtcbiAgICBpZiAoaGwgJSAyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhZGRlZCBoZXggc3RyaW5nIGV4cGVjdGVkLCBnb3QgdW5wYWRkZWQgaGV4IG9mIGxlbmd0aCAnICsgaGwpO1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWwpO1xuICAgIGZvciAobGV0IGFpID0gMCwgaGkgPSAwOyBhaSA8IGFsOyBhaSsrLCBoaSArPSAyKSB7XG4gICAgICAgIGNvbnN0IG4xID0gYXNjaWlUb0Jhc2UxNihoZXguY2hhckNvZGVBdChoaSkpO1xuICAgICAgICBjb25zdCBuMiA9IGFzY2lpVG9CYXNlMTYoaGV4LmNoYXJDb2RlQXQoaGkgKyAxKSk7XG4gICAgICAgIGlmIChuMSA9PT0gdW5kZWZpbmVkIHx8IG4yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBoZXhbaGldICsgaGV4W2hpICsgMV07XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hleCBzdHJpbmcgZXhwZWN0ZWQsIGdvdCBub24taGV4IGNoYXJhY3RlciBcIicgKyBjaGFyICsgJ1wiIGF0IGluZGV4ICcgKyBoaSk7XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXlbYWldID0gbjEgKiAxNiArIG4yO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG59XG4vLyBUaGVyZSBpcyBubyBzZXRJbW1lZGlhdGUgaW4gYnJvd3NlciBhbmQgc2V0VGltZW91dCBpcyBzbG93LlxuLy8gY2FsbCBvZiBhc3luYyBmbiB3aWxsIHJldHVybiBQcm9taXNlLCB3aGljaCB3aWxsIGJlIGZ1bGxmaWxlZCBvbmx5IG9uXG4vLyBuZXh0IHNjaGVkdWxlciBxdWV1ZSBwcm9jZXNzaW5nIHN0ZXAgYW5kIHRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQuXG5leHBvcnQgY29uc3QgbmV4dFRpY2sgPSBhc3luYyAoKSA9PiB7IH07XG4vLyBSZXR1cm5zIGNvbnRyb2wgdG8gdGhyZWFkIGVhY2ggJ3RpY2snIG1zIHRvIGF2b2lkIGJsb2NraW5nXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNMb29wKGl0ZXJzLCB0aWNrLCBjYikge1xuICAgIGxldCB0cyA9IERhdGUubm93KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyczsgaSsrKSB7XG4gICAgICAgIGNiKGkpO1xuICAgICAgICAvLyBEYXRlLm5vdygpIGlzIG5vdCBtb25vdG9uaWMsIHNvIGluIGNhc2UgaWYgY2xvY2sgZ29lcyBiYWNrd2FyZHMgd2UgcmV0dXJuIHJldHVybiBjb250cm9sIHRvb1xuICAgICAgICBjb25zdCBkaWZmID0gRGF0ZS5ub3coKSAtIHRzO1xuICAgICAgICBpZiAoZGlmZiA+PSAwICYmIGRpZmYgPCB0aWNrKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGF3YWl0IG5leHRUaWNrKCk7XG4gICAgICAgIHRzICs9IGRpZmY7XG4gICAgfVxufVxuLyoqXG4gKiBAZXhhbXBsZSB1dGY4VG9CeXRlcygnYWJjJykgLy8gbmV3IFVpbnQ4QXJyYXkoWzk3LCA5OCwgOTldKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHV0ZjhUb0J5dGVzIGV4cGVjdGVkIHN0cmluZywgZ290ICR7dHlwZW9mIHN0cn1gKTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cikpOyAvLyBodHRwczovL2J1Z3ppbC5sYS8xNjgxODA5XG59XG4vKipcbiAqIE5vcm1hbGl6ZXMgKG5vbi1oZXgpIHN0cmluZyBvciBVaW50OEFycmF5IHRvIFVpbnQ4QXJyYXkuXG4gKiBXYXJuaW5nOiB3aGVuIFVpbnQ4QXJyYXkgaXMgcGFzc2VkLCBpdCB3b3VsZCBOT1QgZ2V0IGNvcGllZC5cbiAqIEtlZXAgaW4gbWluZCBmb3IgZnV0dXJlIG11dGFibGUgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQnl0ZXMoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpXG4gICAgICAgIGRhdGEgPSB1dGY4VG9CeXRlcyhkYXRhKTtcbiAgICBhYnl0ZXMoZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG59XG4vKipcbiAqIENvcGllcyBzZXZlcmFsIFVpbnQ4QXJyYXlzIGludG8gb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0Qnl0ZXMoLi4uYXJyYXlzKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tpXTtcbiAgICAgICAgYWJ5dGVzKGEpO1xuICAgICAgICBzdW0gKz0gYS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHN1bSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIHBhZCA9IDA7IGkgPCBhcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tpXTtcbiAgICAgICAgcmVzLnNldChhLCBwYWQpO1xuICAgICAgICBwYWQgKz0gYS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG4vLyBGb3IgcnVudGltZSBjaGVjayBpZiBjbGFzcyBpbXBsZW1lbnRzIGludGVyZmFjZVxuZXhwb3J0IGNsYXNzIEhhc2gge1xuICAgIC8vIFNhZmUgdmVyc2lvbiB0aGF0IGNsb25lcyBpbnRlcm5hbCBzdGF0ZVxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xvbmVJbnRvKCk7XG4gICAgfVxufVxuY29uc3QgdG9TdHIgPSB7fS50b1N0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBjaGVja09wdHMoZGVmYXVsdHMsIG9wdHMpIHtcbiAgICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkICYmIHRvU3RyLmNhbGwob3B0cykgIT09ICdbb2JqZWN0IE9iamVjdF0nKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCBvciB1bmRlZmluZWQnKTtcbiAgICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRzLCBvcHRzKTtcbiAgICByZXR1cm4gbWVyZ2VkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBDb25zdHJ1Y3RvcihoYXNoQ29ucykge1xuICAgIGNvbnN0IGhhc2hDID0gKG1zZykgPT4gaGFzaENvbnMoKS51cGRhdGUodG9CeXRlcyhtc2cpKS5kaWdlc3QoKTtcbiAgICBjb25zdCB0bXAgPSBoYXNoQ29ucygpO1xuICAgIGhhc2hDLm91dHB1dExlbiA9IHRtcC5vdXRwdXRMZW47XG4gICAgaGFzaEMuYmxvY2tMZW4gPSB0bXAuYmxvY2tMZW47XG4gICAgaGFzaEMuY3JlYXRlID0gKCkgPT4gaGFzaENvbnMoKTtcbiAgICByZXR1cm4gaGFzaEM7XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcENvbnN0cnVjdG9yV2l0aE9wdHMoaGFzaENvbnMpIHtcbiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzKG1zZykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTtcbiAgICBoYXNoQy5vdXRwdXRMZW4gPSB0bXAub3V0cHV0TGVuO1xuICAgIGhhc2hDLmJsb2NrTGVuID0gdG1wLmJsb2NrTGVuO1xuICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTtcbiAgICByZXR1cm4gaGFzaEM7XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcFhPRkNvbnN0cnVjdG9yV2l0aE9wdHMoaGFzaENvbnMpIHtcbiAgICBjb25zdCBoYXNoQyA9IChtc2csIG9wdHMpID0+IGhhc2hDb25zKG9wdHMpLnVwZGF0ZSh0b0J5dGVzKG1zZykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IHRtcCA9IGhhc2hDb25zKHt9KTtcbiAgICBoYXNoQy5vdXRwdXRMZW4gPSB0bXAub3V0cHV0TGVuO1xuICAgIGhhc2hDLmJsb2NrTGVuID0gdG1wLmJsb2NrTGVuO1xuICAgIGhhc2hDLmNyZWF0ZSA9IChvcHRzKSA9PiBoYXNoQ29ucyhvcHRzKTtcbiAgICByZXR1cm4gaGFzaEM7XG59XG4vKipcbiAqIFNlY3VyZSBQUk5HLiBVc2VzIGBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzYCwgd2hpY2ggZGVmZXJzIHRvIE9TLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tQnl0ZXMoYnl0ZXNMZW5ndGggPSAzMikge1xuICAgIGlmIChjcnlwdG8gJiYgdHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoYnl0ZXNMZW5ndGgpKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIG11c3QgYmUgZGVmaW5lZCcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwiaW1wb3J0IHsgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXNzZXJ0UmV0dXJuLCBpc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBhY2NvdW50SWRcbiAqIEBwYXJhbSB7KEFkZHJlc3MgfCBBY2NvdW50SWQgfCBBY2NvdW50SW5kZXggfCBzdHJpbmcgfCBudWxsKX0gYWRkcmVzcyAtIEFuIGFjY291bnRzIGFkZHJlc3MgaW4gdmFyaW91cyBmb3JtYXRzLlxuICogQGRlc2NyaXB0aW9uICBBbiBbW0FjY291bnRJZF1dXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY2NvdW50SWQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGlzVThhKGFkZHJlc3MpXG4gICAgICAgICAgICA/IGFkZHJlc3NcbiAgICAgICAgICAgIDogZGVjb2RlQWRkcmVzcygoYWRkcmVzcyB8fCAnJykudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmIChkZWNvZGVkLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudElkJywgZGVjb2RlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjY291bnRJbmRleCA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdBY2NvdW50SW5kZXgnLCBkZWNvZGVkKTtcbiAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuYWNjb3VudHMuaW5kZXhUb0lkKGFjY291bnRJbmRleC50b1N0cmluZygpKS5waXBlKG1hcCgoYSkgPT4gYXNzZXJ0UmV0dXJuKGEsICdVbmFibGUgdG8gcmV0cmlldmUgYWNjb3VudElkJykpKTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5mdW5jdGlvbiBwYXJzZUZsYWdzKGFkZHJlc3MsIFtlbGVjdGlvbnNNZW1iZXJzLCBjb3VuY2lsTWVtYmVycywgdGVjaG5pY2FsQ29tbWl0dGVlTWVtYmVycywgc29jaWV0eU1lbWJlcnMsIHN1ZG9LZXldKSB7XG4gICAgY29uc3QgYWRkclN0ciA9IGFkZHJlc3M/LnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaXNJbmNsdWRlZCA9IChpZCkgPT4gaWQudG9TdHJpbmcoKSA9PT0gYWRkclN0cjtcbiAgICByZXR1cm4ge1xuICAgICAgICBpc0NvdW5jaWw6IChlbGVjdGlvbnNNZW1iZXJzPy5tYXAoKHIpID0+IEFycmF5LmlzQXJyYXkocikgPyByWzBdIDogci53aG8pIHx8IGNvdW5jaWxNZW1iZXJzIHx8IFtdKS5zb21lKGlzSW5jbHVkZWQpLFxuICAgICAgICBpc1NvY2lldHk6IChzb2NpZXR5TWVtYmVycyB8fCBbXSkuc29tZShpc0luY2x1ZGVkKSxcbiAgICAgICAgaXNTdWRvOiBzdWRvS2V5Py50b1N0cmluZygpID09PSBhZGRyU3RyLFxuICAgICAgICBpc1RlY2hDb21taXR0ZWU6ICh0ZWNobmljYWxDb21taXR0ZWVNZW1iZXJzIHx8IFtdKS5zb21lKGlzSW5jbHVkZWQpXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfZmxhZ3MoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW3VuZGVmaW5lZCwgW10sIFtdLCBbXSwgdW5kZWZpbmVkXTtcbiAgICAgICAgY29uc3QgY2FsbHMgPSBbXG4gICAgICAgICAgICAoYXBpLnF1ZXJ5LmVsZWN0aW9ucyB8fCBhcGkucXVlcnlbJ3BocmFnbWVuRWxlY3Rpb24nXSB8fCBhcGkucXVlcnlbJ2VsZWN0aW9uc1BocmFnbWVuJ10pPy5tZW1iZXJzLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LmNvdW5jaWw/Lm1lbWJlcnMsXG4gICAgICAgICAgICBhcGkucXVlcnkudGVjaG5pY2FsQ29tbWl0dGVlPy5tZW1iZXJzLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHk/Lm1lbWJlcnMsXG4gICAgICAgICAgICBhcGkucXVlcnkuc3Vkbz8ua2V5XG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gY2FsbHMuZmlsdGVyKChjKSA9PiBjKTtcbiAgICAgICAgaWYgKCFmaWx0ZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihyZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpLnF1ZXJ5TXVsdGkoZmlsdGVyZWQpLnBpcGUobWFwKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHRJbmRleCA9IC0xO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gY2FsbHMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gdmFsdWVzWysrcmVzdWx0SW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vKipcbiAqIEBuYW1lIGluZm9cbiAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGFjY291bnQgbWVtYmVyc2hpcCBmbGFnc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhZ3MoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IGFwaS5kZXJpdmUuYWNjb3VudHMuX2ZsYWdzKCkucGlwZShtYXAoKHIpID0+IHBhcnNlRmxhZ3MoYWRkcmVzcywgcikpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBpZEFuZEluZGV4XG4gKiBAcGFyYW0geyhBZGRyZXNzIHwgQWNjb3VudElkIHwgQWNjb3VudEluZGV4IHwgVWludDhBcnJheSB8IHN0cmluZyB8IG51bGwpfSBhZGRyZXNzIC0gQW4gYWNjb3VudHMgYWRkcmVzcyBpbiB2YXJpb3VzIGZvcm1hdHMuXG4gKiBAZGVzY3JpcHRpb24gIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIFtbQWNjb3VudElkXV0gYW5kIFtbQWNjb3VudEluZGV4XV0gYXMgb3B0aW9uYWwgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBhcGkuZGVyaXZlLmFjY291bnRzLmlkQW5kSW5kZXgoJ0Y3SHMnLCAoW2lkLCBpeF0pID0+IHtcbiAqICAgY29uc29sZS5sb2coYEFjY291bnRJZCAjJHtpZH0gd2l0aCBjb3JyZXNwb25kaW5nIEFjY291bnRJbmRleCAke2l4fWApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkQW5kSW5kZXgoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHllcywgdGhpcyBjYW4gZmFpbCwgZG9uJ3QgY2FyZSB0b28gbXVjaCwgY2F0Y2ggd2lsbCBjYXRjaCBpdFxuICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGlzVThhKGFkZHJlc3MpXG4gICAgICAgICAgICAgICAgPyBhZGRyZXNzXG4gICAgICAgICAgICAgICAgOiBkZWNvZGVBZGRyZXNzKChhZGRyZXNzIHx8ICcnKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGlmIChkZWNvZGVkLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50SWQgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudElkJywgZGVjb2RlZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuYWNjb3VudHMuaWRUb0luZGV4KGFjY291bnRJZCkucGlwZShtYXAoKGFjY291bnRJbmRleCkgPT4gW2FjY291bnRJZCwgYWNjb3VudEluZGV4XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWNjb3VudEluZGV4ID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0FjY291bnRJbmRleCcsIGRlY29kZWQpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuYWNjb3VudHMuaW5kZXhUb0lkKGFjY291bnRJbmRleC50b1N0cmluZygpKS5waXBlKG1hcCgoYWNjb3VudElkKSA9PiBbYWNjb3VudElkLCBhY2NvdW50SW5kZXhdKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFt1bmRlZmluZWQsIHVuZGVmaW5lZF0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgaWRUb0luZGV4XG4gKiBAcGFyYW0geyggQWNjb3VudElkIHwgc3RyaW5nICl9IGFjY291bnRJZCAtIEFuIGFjY291bnRzIElkIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBBY2NvdW50SW5kZXguXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IEFMSUNFID0gJzVHcnd2YUVGNXpYYjI2Rno5cmNRcERXUzU3Q3RFUkhwTmVoWENQY05vSEdLdXRRWSc7XG4gKiBhcGkuZGVyaXZlLmFjY291bnRzLmlkVG9JbmRleChBTElDRSwgKGFjY291bnRJbmRleCkgPT4ge1xuICogICBjb25zb2xlLmxvZyhgVGhlIEFjY291bnRJbmRleCBvZiAke0FMSUNFfSBpcyAke2FjY291bnRJbmRleH1gKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZFRvSW5kZXgoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCkgPT4gYXBpLmRlcml2ZS5hY2NvdW50cy5pbmRleGVzKCkucGlwZShtYXAoKGluZGV4ZXMpID0+IGluZGV4ZXNbYWNjb3VudElkLnRvU3RyaW5nKCldKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0hleCwgdThhVG9TdHJpbmcgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IFVOREVGX0hFWCA9IHsgdG9IZXg6ICgpID0+IHVuZGVmaW5lZCB9O1xuZnVuY3Rpb24gZGF0YUFzU3RyaW5nKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhLmlzUmF3XG4gICAgICAgID8gdThhVG9TdHJpbmcoZGF0YS5hc1Jhdy50b1U4YSh0cnVlKSlcbiAgICAgICAgOiBkYXRhLmlzTm9uZVxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogZGF0YS50b0hleCgpO1xufVxuZnVuY3Rpb24gZXh0cmFjdE90aGVyKGFkZGl0aW9uYWwpIHtcbiAgICByZXR1cm4gYWRkaXRpb25hbC5yZWR1Y2UoKG90aGVyLCBbX2tleSwgX3ZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBkYXRhQXNTdHJpbmcoX2tleSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YUFzU3RyaW5nKF92YWx1ZSk7XG4gICAgICAgIGlmIChrZXkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIG90aGVyW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3RoZXI7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gaWRlbnRpdHlDb21wYXQoaWRlbnRpdHlPZk9wdCkge1xuICAgIGNvbnN0IGlkZW50aXR5ID0gaWRlbnRpdHlPZk9wdC51bndyYXAoKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShpZGVudGl0eSlcbiAgICAgICAgPyBpZGVudGl0eVswXVxuICAgICAgICA6IGlkZW50aXR5O1xufVxuZnVuY3Rpb24gZXh0cmFjdElkZW50aXR5KGlkZW50aXR5T2ZPcHQsIHN1cGVyT2YpIHtcbiAgICBpZiAoIWlkZW50aXR5T2ZPcHQ/LmlzU29tZSkge1xuICAgICAgICByZXR1cm4geyBqdWRnZW1lbnRzOiBbXSB9O1xuICAgIH1cbiAgICBjb25zdCB7IGluZm8sIGp1ZGdlbWVudHMgfSA9IGlkZW50aXR5Q29tcGF0KGlkZW50aXR5T2ZPcHQpO1xuICAgIGNvbnN0IHRvcERpc3BsYXkgPSBkYXRhQXNTdHJpbmcoaW5mby5kaXNwbGF5KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBkaXNjb3JkOiBkYXRhQXNTdHJpbmcoaW5mby5kaXNjb3JkKSxcbiAgICAgICAgZGlzcGxheTogKHN1cGVyT2YgJiYgZGF0YUFzU3RyaW5nKHN1cGVyT2ZbMV0pKSB8fCB0b3BEaXNwbGF5LFxuICAgICAgICBkaXNwbGF5UGFyZW50OiBzdXBlck9mICYmIHRvcERpc3BsYXksXG4gICAgICAgIGVtYWlsOiBkYXRhQXNTdHJpbmcoaW5mby5lbWFpbCksXG4gICAgICAgIGdpdGh1YjogZGF0YUFzU3RyaW5nKGluZm8uZ2l0aHViKSxcbiAgICAgICAgaW1hZ2U6IGRhdGFBc1N0cmluZyhpbmZvLmltYWdlKSxcbiAgICAgICAganVkZ2VtZW50cyxcbiAgICAgICAgbGVnYWw6IGRhdGFBc1N0cmluZyhpbmZvLmxlZ2FsKSxcbiAgICAgICAgbWF0cml4OiBkYXRhQXNTdHJpbmcoaW5mby5tYXRyaXgpLFxuICAgICAgICBvdGhlcjogaW5mby5hZGRpdGlvbmFsID8gZXh0cmFjdE90aGVyKGluZm8uYWRkaXRpb25hbCkgOiB7fSxcbiAgICAgICAgcGFyZW50OiBzdXBlck9mPy5bMF0sXG4gICAgICAgIHBncDogaW5mby5wZ3BGaW5nZXJwcmludC51bndyYXBPcihVTkRFRl9IRVgpLnRvSGV4KCksXG4gICAgICAgIHJpb3Q6IGRhdGFBc1N0cmluZyhpbmZvLnJpb3QpLFxuICAgICAgICB0d2l0dGVyOiBkYXRhQXNTdHJpbmcoaW5mby50d2l0dGVyKSxcbiAgICAgICAgd2ViOiBkYXRhQXNTdHJpbmcoaW5mby53ZWIpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudChhcGksIGlkZW50aXR5T2ZPcHQsIHN1cGVyT2ZPcHQpIHtcbiAgICBpZiAoaWRlbnRpdHlPZk9wdD8uaXNTb21lKSB7XG4gICAgICAgIC8vIHRoaXMgaWRlbnRpdHkgaGFzIHNvbWV0aGluZyBzZXRcbiAgICAgICAgcmV0dXJuIG9mKFtpZGVudGl0eU9mT3B0LCB1bmRlZmluZWRdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3VwZXJPZk9wdD8uaXNTb21lKSB7XG4gICAgICAgIGNvbnN0IHN1cGVyT2YgPSBzdXBlck9mT3B0LnVud3JhcCgpO1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBhcGkuZGVyaXZlLmFjY291bnRzLl9pZGVudGl0eShzdXBlck9mWzBdKS5waXBlKG1hcCgoW2luZm9dKSA9PiBpbmZvKSksXG4gICAgICAgICAgICBvZihzdXBlck9mKVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgLy8gbm90aGluZyBvZiB2YWx1ZSByZXR1cm5lZFxuICAgIHJldHVybiBvZihbdW5kZWZpbmVkLCB1bmRlZmluZWRdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfaWRlbnRpdHkoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCkgPT4gYWNjb3VudElkICYmIGFwaS5xdWVyeS5pZGVudGl0eT8uaWRlbnRpdHlPZlxuICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgYXBpLnF1ZXJ5LmlkZW50aXR5LmlkZW50aXR5T2YoYWNjb3VudElkKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeS5pZGVudGl0eS5zdXBlck9mKGFjY291bnRJZClcbiAgICAgICAgXSlcbiAgICAgICAgOiBvZihbdW5kZWZpbmVkLCB1bmRlZmluZWRdKSk7XG59XG4vKipcbiAqIEBuYW1lIGlkZW50aXR5XG4gKiBAZGVzY3JpcHRpb24gUmV0dXJucyBpZGVudGl0eSBpbmZvIGZvciBhbiBhY2NvdW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkKSA9PiBhcGkuZGVyaXZlLmFjY291bnRzLl9pZGVudGl0eShhY2NvdW50SWQpLnBpcGUoc3dpdGNoTWFwKChbaWRlbnRpdHlPZk9wdCwgc3VwZXJPZk9wdF0pID0+IGdldFBhcmVudChhcGksIGlkZW50aXR5T2ZPcHQsIHN1cGVyT2ZPcHQpKSwgbWFwKChbaWRlbnRpdHlPZk9wdCwgc3VwZXJPZl0pID0+IGV4dHJhY3RJZGVudGl0eShpZGVudGl0eU9mT3B0LCBzdXBlck9mKSkpKTtcbn1cbmV4cG9ydCBjb25zdCBoYXNJZGVudGl0eSA9IC8qI19fUFVSRV9fKi8gZmlyc3RNZW1vKChhcGksIGFjY291bnRJZCkgPT4gYXBpLmRlcml2ZS5hY2NvdW50cy5oYXNJZGVudGl0eU11bHRpKFthY2NvdW50SWRdKSk7XG5leHBvcnQgZnVuY3Rpb24gaGFzSWRlbnRpdHlNdWx0aShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkcykgPT4gYXBpLnF1ZXJ5LmlkZW50aXR5Py5pZGVudGl0eU9mXG4gICAgICAgID8gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBhcGkucXVlcnkuaWRlbnRpdHkuaWRlbnRpdHlPZi5tdWx0aShhY2NvdW50SWRzKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeS5pZGVudGl0eS5zdXBlck9mLm11bHRpKGFjY291bnRJZHMpXG4gICAgICAgIF0pLnBpcGUobWFwKChbaWRlbnRpdGllcywgc3VwZXJzXSkgPT4gaWRlbnRpdGllcy5tYXAoKGlkZW50aXR5T2ZPcHQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdXBlck9mT3B0ID0gc3VwZXJzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc3VwZXJPZk9wdCAmJiBzdXBlck9mT3B0LmlzU29tZVxuICAgICAgICAgICAgICAgID8gc3VwZXJPZk9wdC51bndyYXAoKVswXS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZGlzcGxheTtcbiAgICAgICAgICAgIGlmIChpZGVudGl0eU9mT3B0ICYmIGlkZW50aXR5T2ZPcHQuaXNTb21lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhQXNTdHJpbmcoaWRlbnRpdHlDb21wYXQoaWRlbnRpdHlPZk9wdCkuaW5mby5kaXNwbGF5KTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIWlzSGV4KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgZGlzcGxheSwgaGFzSWRlbnRpdHk6ICEhKGRpc3BsYXkgfHwgcGFyZW50SWQpLCBwYXJlbnRJZCB9O1xuICAgICAgICB9KSkpXG4gICAgICAgIDogb2YoYWNjb3VudElkcy5tYXAoKCkgPT4gKHsgaGFzSWRlbnRpdHk6IGZhbHNlIH0pKSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50SWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lkQW5kSW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lkVG9JbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZGV4ZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmRleFRvSWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmZvLmpzJztcbiIsImltcG9ydCB7IG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgaW5kZXhUb0lkXG4gKiBAcGFyYW0geyggQWNjb3VudEluZGV4IHwgc3RyaW5nICl9IGFjY291bnRJbmRleCAtIEFuIGFjY291bnRzIGluZGV4IGluIGRpZmZlcmVudCBmb3JtYXRzLlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBBY2NvdW50SWQuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGFwaS5kZXJpdmUuYWNjb3VudHMuaW5kZXhUb0lkKCdGN0hzJywgKGFjY291bnRJZCkgPT4ge1xuICogICBjb25zb2xlLmxvZyhgVGhlIEFjY291bnRJZCBvZiBGN0hzIGlzICR7YWNjb3VudElkfWApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4VG9JZChpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudEluZGV4KSA9PiBhcGkucXVlcnkuaW5kaWNlc1xuICAgICAgICA/IGFwaS5xdWVyeS5pbmRpY2VzLmFjY291bnRzKGFjY291bnRJbmRleCkucGlwZShtYXAoKG9wdFJlc3VsdCkgPT4gb3B0UmVzdWx0LnVud3JhcE9yKFtdKVswXSkpXG4gICAgICAgIDogb2YodW5kZWZpbmVkKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmxldCBpbmRpY2VzQ2FjaGUgPSBudWxsO1xuZnVuY3Rpb24gcXVlcnlBY2NvdW50cyhhcGkpIHtcbiAgICByZXR1cm4gYXBpLnF1ZXJ5LmluZGljZXMuYWNjb3VudHMuZW50cmllcygpLnBpcGUobWFwKChlbnRyaWVzKSA9PiBlbnRyaWVzLnJlZHVjZSgoaW5kZXhlcywgW2tleSwgaWRPcHRdKSA9PiB7XG4gICAgICAgIGlmIChpZE9wdC5pc1NvbWUpIHtcbiAgICAgICAgICAgIGluZGV4ZXNbaWRPcHQudW53cmFwKClbMF0udG9TdHJpbmcoKV0gPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudEluZGV4Jywga2V5LmFyZ3NbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleGVzO1xuICAgIH0sIHt9KSkpO1xufVxuLyoqXG4gKiBAbmFtZSBpbmRleGVzXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFsbCB0aGUgaW5kZXhlcyBvbiB0aGUgc3lzdGVtLlxuICogQGRlc2NyaXB0aW9uIFRoaXMgaXMgYW4gdW53aWVsZGx5IHF1ZXJ5IHNpbmNlIGl0IGxvb3BzIHRocm91Z2hcbiAqIGFsbCBvZiB0aGUgZW51bXNldHMgYW5kIHJldHVybnMgYWxsIG9mIHRoZSB2YWx1ZXMgZm91bmQuIFRoaXMgY291bGQgYmUgdXAgdG8gMzJrIGRlcGVuZGluZ1xuICogb24gdGhlIG51bWJlciBvZiBhY3RpdmUgYWNjb3VudHMgaW4gdGhlIHN5c3RlbVxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBhcGkuZGVyaXZlLmFjY291bnRzLmluZGV4ZXMoKGluZGV4ZXMpID0+IHtcbiAqICAgY29uc29sZS5sb2coJ0FsbCBleGlzdGluZyBBY2NvdW50SW5kZXhlcycsIGluZGV4ZXMpO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4ZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gaW5kaWNlc0NhY2hlXG4gICAgICAgID8gb2YoaW5kaWNlc0NhY2hlKVxuICAgICAgICA6IChhcGkucXVlcnkuaW5kaWNlc1xuICAgICAgICAgICAgPyBxdWVyeUFjY291bnRzKGFwaSkucGlwZShzdGFydFdpdGgoe30pKVxuICAgICAgICAgICAgOiBvZih7fSkpLnBpcGUobWFwKChpbmRpY2VzKSA9PiB7XG4gICAgICAgICAgICBpbmRpY2VzQ2FjaGUgPSBpbmRpY2VzO1xuICAgICAgICAgICAgcmV0dXJuIGluZGljZXM7XG4gICAgICAgIH0pKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHU4YVRvU3RyaW5nIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gcmV0cmlldmVOaWNrKGFwaSwgYWNjb3VudElkKSB7XG4gICAgcmV0dXJuIChhY2NvdW50SWQgJiYgYXBpLnF1ZXJ5WyduaWNrcyddPy5bJ25hbWVPZiddXG4gICAgICAgID8gYXBpLnF1ZXJ5WyduaWNrcyddWyduYW1lT2YnXShhY2NvdW50SWQpXG4gICAgICAgIDogb2YodW5kZWZpbmVkKSkucGlwZShtYXAoKG5hbWVPZikgPT4gbmFtZU9mPy5pc1NvbWVcbiAgICAgICAgPyB1OGFUb1N0cmluZyhuYW1lT2YudW53cmFwKClbMF0pLnN1YnN0cmluZygwLCBhcGkuY29uc3RzWyduaWNrcyddWydtYXhMZW5ndGgnXS50b051bWJlcigpKVxuICAgICAgICA6IHVuZGVmaW5lZCkpO1xufVxuLyoqXG4gKiBAbmFtZSBpbmZvXG4gKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhdXguIGluZm8gd2l0aCByZWdhcmRzIHRvIGFuIGFjY291bnQsIGN1cnJlbnQgdGhhdCBpbmNsdWRlcyB0aGUgYWNjb3VudElkLCBhY2NvdW50SW5kZXggYW5kIG5pY2tuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhZGRyZXNzKSA9PiBhcGkuZGVyaXZlLmFjY291bnRzLmlkQW5kSW5kZXgoYWRkcmVzcykucGlwZShzd2l0Y2hNYXAoKFthY2NvdW50SWQsIGFjY291bnRJbmRleF0pID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZih7IGFjY291bnRJZCwgYWNjb3VudEluZGV4IH0pLFxuICAgICAgICBhcGkuZGVyaXZlLmFjY291bnRzLmlkZW50aXR5KGFjY291bnRJZCksXG4gICAgICAgIHJldHJpZXZlTmljayhhcGksIGFjY291bnRJZClcbiAgICBdKSksIG1hcCgoW3sgYWNjb3VudElkLCBhY2NvdW50SW5kZXggfSwgaWRlbnRpdHksIG5pY2tuYW1lXSkgPT4gKHtcbiAgICAgICAgYWNjb3VudElkLCBhY2NvdW50SW5kZXgsIGlkZW50aXR5LCBuaWNrbmFtZVxuICAgIH0pKSkpO1xufVxuIiwiaW1wb3J0IHsgaGFzUHJvcG9zYWxzIGFzIGNvbGxlY3RpdmVIYXNQcm9wb3NhbHMsIG1lbWJlcnMgYXMgY29sbGVjdGl2ZU1lbWJlcnMsIHByaW1lIGFzIGNvbGxlY3RpdmVQcmltZSwgcHJvcG9zYWwgYXMgY29sbGVjdGl2ZVByb3Bvc2FsLCBwcm9wb3NhbENvdW50IGFzIGNvbGxlY3RpdmVQcm9wb3NhbENvdW50LCBwcm9wb3NhbEhhc2hlcyBhcyBjb2xsZWN0aXZlUHJvcG9zYWxIYXNoZXMsIHByb3Bvc2FscyBhcyBjb2xsZWN0aXZlUHJvcG9zYWxzIH0gZnJvbSAnLi4vY29sbGVjdGl2ZS9pbmRleC5qcyc7XG5leHBvcnQgY29uc3QgbWVtYmVycyA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZU1lbWJlcnMoJ2FsbGlhbmNlTW90aW9uJyk7XG5leHBvcnQgY29uc3QgaGFzUHJvcG9zYWxzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlSGFzUHJvcG9zYWxzKCdhbGxpYW5jZU1vdGlvbicpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FsID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWwoJ2FsbGlhbmNlTW90aW9uJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxDb3VudCA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByb3Bvc2FsQ291bnQoJ2FsbGlhbmNlTW90aW9uJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxIYXNoZXMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcygnYWxsaWFuY2VNb3Rpb24nKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbHMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbHMoJ2FsbGlhbmNlTW90aW9uJyk7XG5leHBvcnQgY29uc3QgcHJpbWUgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcmltZSgnYWxsaWFuY2VNb3Rpb24nKTtcbiIsImltcG9ydCB7IG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQk5fWkVSTywgYm5Ub0JuLCBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRRdWVyeUludGVyZmFjZSB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBvcmRlckJhZ3MoaWRzLCBiYWdzKSB7XG4gICAgY29uc3Qgc29ydGVkID0gaWRzXG4gICAgICAgIC5tYXAoKGlkLCBpbmRleCkgPT4gKHtcbiAgICAgICAgYmFnOiBiYWdzW2luZGV4XS51bndyYXBPcihudWxsKSxcbiAgICAgICAgaWQsXG4gICAgICAgIGtleTogaWQudG9TdHJpbmcoKVxuICAgIH0pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5pZC5jbXAoYS5pZCkpO1xuICAgIGNvbnN0IG1heCA9IHNvcnRlZC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBzb3J0ZWQubWFwKChlbnRyeSwgaW5kZXgpID0+IG9iamVjdFNwcmVhZChlbnRyeSwge1xuICAgICAgICBiYWdMb3dlcjogaW5kZXggPT09IG1heFxuICAgICAgICAgICAgPyBCTl9aRVJPXG4gICAgICAgICAgICA6IHNvcnRlZFtpbmRleCArIDFdLmlkLFxuICAgICAgICBiYWdVcHBlcjogZW50cnkuaWQsXG4gICAgICAgIGluZGV4XG4gICAgfSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9nZXRJZHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgY29uc3QgcXVlcnkgPSBnZXRRdWVyeUludGVyZmFjZShhcGkpO1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChfaWRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IF9pZHMubWFwKChpZCkgPT4gYm5Ub0JuKGlkKSk7XG4gICAgICAgIHJldHVybiBpZHMubGVuZ3RoXG4gICAgICAgICAgICA/IHF1ZXJ5Lmxpc3RCYWdzLm11bHRpKGlkcykucGlwZShtYXAoKGJhZ3MpID0+IG9yZGVyQmFncyhpZHMsIGJhZ3MpKSlcbiAgICAgICAgICAgIDogb2YoW10pO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFsbChpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICBjb25zdCBxdWVyeSA9IGdldFF1ZXJ5SW50ZXJmYWNlKGFwaSk7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gcXVlcnkubGlzdEJhZ3Mua2V5cygpLnBpcGUoc3dpdGNoTWFwKChrZXlzKSA9PiBhcGkuZGVyaXZlLmJhZ3NMaXN0Ll9nZXRJZHMoa2V5cy5tYXAoKHsgYXJnczogW2lkXSB9KSA9PiBpZCkpKSwgbWFwKChsaXN0KSA9PiBsaXN0LmZpbHRlcigoeyBiYWcgfSkgPT4gYmFnKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGlkKSA9PiBhcGkuZGVyaXZlLmJhZ3NMaXN0Ll9nZXRJZHMoW2JuVG9CbihpZCldKS5waXBlKG1hcCgoYmFncykgPT4gYmFnc1swXSkpKTtcbn1cbiIsImltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChiYWcpID0+IGFwaS5kZXJpdmUuYmFnc0xpc3QubGlzdE5vZGVzKGJhZy5iYWcpLnBpcGUobWFwKChub2RlcykgPT4gb2JqZWN0U3ByZWFkKHsgbm9kZXMgfSwgYmFnKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHBhbmRlZChpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoaWQpID0+IGFwaS5kZXJpdmUuYmFnc0xpc3QuZ2V0KGlkKS5waXBlKHN3aXRjaE1hcCgoYmFnKSA9PiBhcGkuZGVyaXZlLmJhZ3NMaXN0LmV4cGFuZChiYWcpKSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9nZXQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRFeHBhbmRlZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpc3ROb2Rlcy5qcyc7XG4iLCJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwLCB0b0FycmF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBuZXh0VGljayB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldFF1ZXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi91dGlsLmpzJztcbmZ1bmN0aW9uIHRyYXZlcnNlTGlua3MoYXBpLCBoZWFkKSB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoaGVhZCk7XG4gICAgY29uc3QgcXVlcnkgPSBnZXRRdWVyeUludGVyZmFjZShhcGkpO1xuICAgIHJldHVybiBzdWJqZWN0LnBpcGUoc3dpdGNoTWFwKChhY2NvdW50KSA9PiBxdWVyeS5saXN0Tm9kZXMoYWNjb3VudCkpLCB0YXAoKG5vZGUpID0+IHtcbiAgICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgbm9kZS5pc1NvbWUgJiYgbm9kZS52YWx1ZS5uZXh0LmlzU29tZVxuICAgICAgICAgICAgICAgID8gc3ViamVjdC5uZXh0KG5vZGUudW53cmFwKCkubmV4dC51bndyYXAoKSlcbiAgICAgICAgICAgICAgICA6IHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgfSksIHRvQXJyYXkoKSwgLy8gdG9BcnJheSBzaW5jZSB3ZSB3YW50IHRvIHN0YXJ0U3ViamVjdCB0byBiZSBjb21wbGV0ZWRcbiAgICBtYXAoKGFsbCkgPT4gYWxsLm1hcCgobykgPT4gby51bndyYXAoKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsaXN0Tm9kZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGJhZykgPT4gYmFnICYmIGJhZy5oZWFkLmlzU29tZVxuICAgICAgICA/IHRyYXZlcnNlTGlua3MoYXBpLCBiYWcuaGVhZC51bndyYXAoKSlcbiAgICAgICAgOiBvZihbXSkpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5SW50ZXJmYWNlKGFwaSkge1xuICAgIHJldHVybiAoXG4gICAgLy8gbGF0ZXN0IHN1YnN0cmF0ZSAmIHBvbGthZG90XG4gICAgYXBpLnF1ZXJ5LnZvdGVyTGlzdCB8fFxuICAgICAgICAvLyBwcmV2aW91cyBzdWJzdHJhdGVcbiAgICAgICAgYXBpLnF1ZXJ5Wyd2b3RlckJhZ3NMaXN0J10gfHxcbiAgICAgICAgYXBpLnF1ZXJ5WydiYWdzTGlzdCddKTtcbn1cbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gemVyb0JhbGFuY2UoYXBpKSB7XG4gICAgcmV0dXJuIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyk7XG59XG5mdW5jdGlvbiBnZXRCYWxhbmNlKGFwaSwgW2ZyZWVCYWxhbmNlLCByZXNlcnZlZEJhbGFuY2UsIGZyb3plbkZlZSwgZnJvemVuTWlzY10pIHtcbiAgICBjb25zdCB2b3RpbmdCYWxhbmNlID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnLCBmcmVlQmFsYW5jZS50b0JuKCkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZyZWVCYWxhbmNlLFxuICAgICAgICBmcm96ZW5GZWUsXG4gICAgICAgIGZyb3plbk1pc2MsXG4gICAgICAgIHJlc2VydmVkQmFsYW5jZSxcbiAgICAgICAgdm90aW5nQmFsYW5jZVxuICAgIH07XG59XG5mdW5jdGlvbiBjYWxjQmFsYW5jZXMoYXBpLCBbYWNjb3VudElkLCBbYWNjb3VudE5vbmNlLCBbcHJpbWFyeSwgLi4uYWRkaXRpb25hbF1dXSkge1xuICAgIHJldHVybiBvYmplY3RTcHJlYWQoe1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIGFjY291bnROb25jZSxcbiAgICAgICAgYWRkaXRpb25hbDogYWRkaXRpb25hbC5tYXAoKGIpID0+IGdldEJhbGFuY2UoYXBpLCBiKSlcbiAgICB9LCBnZXRCYWxhbmNlKGFwaSwgcHJpbWFyeSkpO1xufVxuZnVuY3Rpb24gcXVlcnlCYWxhbmNlc0ZyZWUoYXBpLCBhY2NvdW50SWQpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIGFwaS5xdWVyeS5iYWxhbmNlc1snZnJlZUJhbGFuY2UnXShhY2NvdW50SWQpLFxuICAgICAgICBhcGkucXVlcnkuYmFsYW5jZXNbJ3Jlc2VydmVkQmFsYW5jZSddKGFjY291bnRJZCksXG4gICAgICAgIGFwaS5xdWVyeS5zeXN0ZW1bJ2FjY291bnROb25jZSddKGFjY291bnRJZClcbiAgICBdKS5waXBlKG1hcCgoW2ZyZWVCYWxhbmNlLCByZXNlcnZlZEJhbGFuY2UsIGFjY291bnROb25jZV0pID0+IFtcbiAgICAgICAgYWNjb3VudE5vbmNlLFxuICAgICAgICBbW2ZyZWVCYWxhbmNlLCByZXNlcnZlZEJhbGFuY2UsIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSldXVxuICAgIF0pKTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5Tm9uY2VPbmx5KGFwaSwgYWNjb3VudElkKSB7XG4gICAgY29uc3QgZmlsbCA9IChub25jZSkgPT4gW1xuICAgICAgICBub25jZSxcbiAgICAgICAgW1t6ZXJvQmFsYW5jZShhcGkpLCB6ZXJvQmFsYW5jZShhcGkpLCB6ZXJvQmFsYW5jZShhcGkpLCB6ZXJvQmFsYW5jZShhcGkpXV1cbiAgICBdO1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudClcbiAgICAgICAgPyBhcGkucXVlcnkuc3lzdGVtLmFjY291bnQoYWNjb3VudElkKS5waXBlKG1hcCgoeyBub25jZSB9KSA9PiBmaWxsKG5vbmNlKSkpXG4gICAgICAgIDogaXNGdW5jdGlvbihhcGkucXVlcnkuc3lzdGVtWydhY2NvdW50Tm9uY2UnXSlcbiAgICAgICAgICAgID8gYXBpLnF1ZXJ5LnN5c3RlbVsnYWNjb3VudE5vbmNlJ10oYWNjb3VudElkKS5waXBlKG1hcCgobm9uY2UpID0+IGZpbGwobm9uY2UpKSlcbiAgICAgICAgICAgIDogb2YoZmlsbChhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnSW5kZXgnKSkpO1xufVxuZnVuY3Rpb24gcXVlcnlCYWxhbmNlc0FjY291bnQoYXBpLCBhY2NvdW50SWQsIG1vZHVsZXMgPSBbJ2JhbGFuY2VzJ10pIHtcbiAgICBjb25zdCBiYWxhbmNlcyA9IG1vZHVsZXNcbiAgICAgICAgLm1hcCgobSkgPT4gYXBpLmRlcml2ZVttXT8uY3VzdG9tQWNjb3VudCB8fCBhcGkucXVlcnlbbV0/LmFjY291bnQpXG4gICAgICAgIC5maWx0ZXIoKHEpID0+IGlzRnVuY3Rpb24ocSkpO1xuICAgIGNvbnN0IGV4dHJhY3QgPSAobm9uY2UsIGRhdGEpID0+IFtcbiAgICAgICAgbm9uY2UsXG4gICAgICAgIGRhdGEubWFwKCh7IGZlZUZyb3plbiwgZnJlZSwgbWlzY0Zyb3plbiwgcmVzZXJ2ZWQgfSkgPT4gW2ZyZWUsIHJlc2VydmVkLCBmZWVGcm96ZW4sIG1pc2NGcm96ZW5dKVxuICAgIF07XG4gICAgLy8gTk9URSB0aGlzIGlzIGZvciB0aGUgZmlyc3QgY2FzZSB3aGVyZSB3ZSBkbyBoYXZlIGluc3RhbmNlcyBzcGVjaWZpZWRcbiAgICByZXR1cm4gYmFsYW5jZXMubGVuZ3RoXG4gICAgICAgID8gaXNGdW5jdGlvbihhcGkucXVlcnkuc3lzdGVtLmFjY291bnQpXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudChhY2NvdW50SWQpLFxuICAgICAgICAgICAgICAgIC4uLmJhbGFuY2VzLm1hcCgoYykgPT4gYyhhY2NvdW50SWQpKVxuICAgICAgICAgICAgXSkucGlwZShtYXAoKFt7IG5vbmNlIH0sIC4uLmJhbGFuY2VzXSkgPT4gZXh0cmFjdChub25jZSwgYmFsYW5jZXMpKSlcbiAgICAgICAgICAgIDogY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LnN5c3RlbVsnYWNjb3VudE5vbmNlJ10oYWNjb3VudElkKSxcbiAgICAgICAgICAgICAgICAuLi5iYWxhbmNlcy5tYXAoKGMpID0+IGMoYWNjb3VudElkKSlcbiAgICAgICAgICAgIF0pLnBpcGUobWFwKChbbm9uY2UsIC4uLmJhbGFuY2VzXSkgPT4gZXh0cmFjdChub25jZSwgYmFsYW5jZXMpKSlcbiAgICAgICAgOiBxdWVyeU5vbmNlT25seShhcGksIGFjY291bnRJZCk7XG59XG5mdW5jdGlvbiBxdWVyeVN5c3RlbUFjY291bnQoYXBpLCBhY2NvdW50SWQpIHtcbiAgICAvLyBBY2NvdW50SW5mbyBpcyBjdXJyZW50LCBzdXBwb3J0IG9sZCwgZWcuIEVkZ2V3YXJlXG4gICAgcmV0dXJuIGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudChhY2NvdW50SWQpLnBpcGUobWFwKChpbmZvT3JUdXBsZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gaW5mb09yVHVwbGUubm9uY2VcbiAgICAgICAgICAgID8gaW5mb09yVHVwbGUuZGF0YVxuICAgICAgICAgICAgOiBpbmZvT3JUdXBsZVsxXTtcbiAgICAgICAgY29uc3Qgbm9uY2UgPSBpbmZvT3JUdXBsZS5ub25jZSB8fCBpbmZvT3JUdXBsZVswXTtcbiAgICAgICAgaWYgKCFkYXRhIHx8IGRhdGEuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub25jZSxcbiAgICAgICAgICAgICAgICBbW3plcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSldXVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGZlZUZyb3plbiwgZnJlZSwgbWlzY0Zyb3plbiwgcmVzZXJ2ZWQgfSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBub25jZSxcbiAgICAgICAgICAgIFtbZnJlZSwgcmVzZXJ2ZWQsIGZlZUZyb3plbiwgbWlzY0Zyb3plbl1dXG4gICAgICAgIF07XG4gICAgfSkpO1xufVxuLyoqXG4gKiBAbmFtZSBhY2NvdW50XG4gKiBAcGFyYW0geyggQWNjb3VudEluZGV4IHwgQWNjb3VudElkIHwgQWRkcmVzcyB8IHN0cmluZyApfSBhZGRyZXNzIC0gQW4gYWNjb3VudHMgSWQgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB2YXJpb3VzIGJhbGFuY2UgcXVlcmllc1xuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBBTElDRSA9ICdGN0hzJztcbiAqXG4gKiBhcGkuZGVyaXZlLmJhbGFuY2VzLmFsbChBTElDRSwgKHsgYWNjb3VudElkLCBsb2NrZWRCYWxhbmNlIH0pID0+IHtcbiAqICAgY29uc29sZS5sb2coYFRoZSBhY2NvdW50ICR7YWNjb3VudElkfSBoYXMgYSBsb2NrZWQgYmFsYW5jZSAke2xvY2tlZEJhbGFuY2V9IHVuaXRzLmApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY291bnQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgY29uc3QgYmFsYW5jZUluc3RhbmNlcyA9IGFwaS5yZWdpc3RyeS5nZXRNb2R1bGVJbnN0YW5jZXMoYXBpLnJ1bnRpbWVWZXJzaW9uLnNwZWNOYW1lLCAnYmFsYW5jZXMnKTtcbiAgICBjb25zdCBub25EZWZhdWx0QmFsYW5jZXMgPSBiYWxhbmNlSW5zdGFuY2VzICYmIGJhbGFuY2VJbnN0YW5jZXNbMF0gIT09ICdiYWxhbmNlcyc7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IGFwaS5kZXJpdmUuYWNjb3VudHMuYWNjb3VudElkKGFkZHJlc3MpLnBpcGUoc3dpdGNoTWFwKChhY2NvdW50SWQpID0+IChhY2NvdW50SWRcbiAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKGFjY291bnRJZCksXG4gICAgICAgICAgICBub25EZWZhdWx0QmFsYW5jZXNcbiAgICAgICAgICAgICAgICA/IHF1ZXJ5QmFsYW5jZXNBY2NvdW50KGFwaSwgYWNjb3VudElkLCBiYWxhbmNlSW5zdGFuY2VzKVxuICAgICAgICAgICAgICAgIDogaXNGdW5jdGlvbihhcGkucXVlcnkuc3lzdGVtPy5hY2NvdW50KVxuICAgICAgICAgICAgICAgICAgICA/IHF1ZXJ5U3lzdGVtQWNjb3VudChhcGksIGFjY291bnRJZClcbiAgICAgICAgICAgICAgICAgICAgOiBpc0Z1bmN0aW9uKGFwaS5xdWVyeS5iYWxhbmNlcz8uYWNjb3VudClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcXVlcnlCYWxhbmNlc0FjY291bnQoYXBpLCBhY2NvdW50SWQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlzRnVuY3Rpb24oYXBpLnF1ZXJ5LmJhbGFuY2VzPy5bJ2ZyZWVCYWxhbmNlJ10pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBxdWVyeUJhbGFuY2VzRnJlZShhcGksIGFjY291bnRJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHF1ZXJ5Tm9uY2VPbmx5KGFwaSwgYWNjb3VudElkKVxuICAgICAgICBdKVxuICAgICAgICA6IG9mKFthcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudElkJyksIFtcbiAgICAgICAgICAgICAgICBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnSW5kZXgnKSxcbiAgICAgICAgICAgICAgICBbW3plcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSksIHplcm9CYWxhbmNlKGFwaSldXVxuICAgICAgICAgICAgXV0pKSksIG1hcCgocmVzdWx0KSA9PiBjYWxjQmFsYW5jZXMoYXBpLCByZXN1bHQpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCTiwgQk5fWkVSTywgYm5NYXgsIGJuTWluLCBpc0Z1bmN0aW9uLCBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5jb25zdCBWRVNUSU5HX0lEID0gJzB4NzY2NTczNzQ2OTZlNjcyMCc7XG5mdW5jdGlvbiBjYWxjTG9ja2VkKGFwaSwgYmVzdE51bWJlciwgbG9ja3MpIHtcbiAgICBsZXQgbG9ja2VkQmFsYW5jZSA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyk7XG4gICAgbGV0IGxvY2tlZEJyZWFrZG93biA9IFtdO1xuICAgIGxldCB2ZXN0aW5nTG9ja2VkID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKTtcbiAgICBsZXQgYWxsTG9ja2VkID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobG9ja3MpKSB7XG4gICAgICAgIC8vIG9ubHkgZ2V0IHRoZSBsb2NrcyB0aGF0IGFyZSB2YWxpZCB1bnRpbCBwYXNzZWQgdGhlIGN1cnJlbnQgYmxvY2tcbiAgICAgICAgbG9ja2VkQnJlYWtkb3duID0gbG9ja3MuZmlsdGVyKCh7IHVudGlsIH0pID0+ICF1bnRpbCB8fCAoYmVzdE51bWJlciAmJiB1bnRpbC5ndChiZXN0TnVtYmVyKSkpO1xuICAgICAgICBhbGxMb2NrZWQgPSBsb2NrZWRCcmVha2Rvd24uc29tZSgoeyBhbW91bnQgfSkgPT4gYW1vdW50ICYmIGFtb3VudC5pc01heCgpKTtcbiAgICAgICAgdmVzdGluZ0xvY2tlZCA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJywgbG9ja2VkQnJlYWtkb3duLmZpbHRlcigoeyBpZCB9KSA9PiBpZC5lcShWRVNUSU5HX0lEKSkucmVkdWNlKChyZXN1bHQsIHsgYW1vdW50IH0pID0+IHJlc3VsdC5pYWRkKGFtb3VudCksIG5ldyBCTigwKSkpO1xuICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gb2YgdGhlIGxvY2tzIGFjY29yZGluZyB0byBodHRwczovL2dpdGh1Yi5jb20vcGFyaXR5dGVjaC9zdWJzdHJhdGUvYmxvYi9tYXN0ZXIvc3JtbC9iYWxhbmNlcy9zcmMvbGliLnJzI0w2OTlcbiAgICAgICAgY29uc3Qgbm90QWxsID0gbG9ja2VkQnJlYWtkb3duLmZpbHRlcigoeyBhbW91bnQgfSkgPT4gYW1vdW50ICYmICFhbW91bnQuaXNNYXgoKSk7XG4gICAgICAgIGlmIChub3RBbGwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsb2NrZWRCYWxhbmNlID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnLCBibk1heCguLi5ub3RBbGwubWFwKCh7IGFtb3VudCB9KSA9PiBhbW91bnQpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYWxsTG9ja2VkLCBsb2NrZWRCYWxhbmNlLCBsb2NrZWRCcmVha2Rvd24sIHZlc3RpbmdMb2NrZWQgfTtcbn1cbmZ1bmN0aW9uIGNhbGNTaGFyZWQoYXBpLCBiZXN0TnVtYmVyLCBkYXRhLCBsb2Nrcykge1xuICAgIGNvbnN0IHsgYWxsTG9ja2VkLCBsb2NrZWRCYWxhbmNlLCBsb2NrZWRCcmVha2Rvd24sIHZlc3RpbmdMb2NrZWQgfSA9IGNhbGNMb2NrZWQoYXBpLCBiZXN0TnVtYmVyLCBsb2Nrcyk7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7fSwgZGF0YSwge1xuICAgICAgICBhdmFpbGFibGVCYWxhbmNlOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScsIGFsbExvY2tlZCA/IDAgOiBibk1heChuZXcgQk4oMCksIGRhdGE/LmZyZWVCYWxhbmNlID8gZGF0YS5mcmVlQmFsYW5jZS5zdWIobG9ja2VkQmFsYW5jZSkgOiBuZXcgQk4oMCkpKSxcbiAgICAgICAgbG9ja2VkQmFsYW5jZSxcbiAgICAgICAgbG9ja2VkQnJlYWtkb3duLFxuICAgICAgICB2ZXN0aW5nTG9ja2VkXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjYWxjVmVzdGluZyhiZXN0TnVtYmVyLCBzaGFyZWQsIF92ZXN0aW5nKSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSB2ZXN0aW5nIGJhbGFuY2VzLFxuICAgIC8vICAtIG9mZnNldCA9IGJhbGFuY2UgbG9ja2VkIGF0IHN0YXJ0aW5nQmxvY2tcbiAgICAvLyAgLSBwZXJCbG9jayBpcyB0aGUgdW5sb2NrIGFtb3VudFxuICAgIGNvbnN0IHZlc3RpbmcgPSBfdmVzdGluZyB8fCBbXTtcbiAgICBjb25zdCBpc1Zlc3RpbmcgPSAhc2hhcmVkLnZlc3RpbmdMb2NrZWQuaXNaZXJvKCk7XG4gICAgY29uc3QgdmVzdGVkQmFsYW5jZXMgPSB2ZXN0aW5nLm1hcCgoeyBsb2NrZWQsIHBlckJsb2NrLCBzdGFydGluZ0Jsb2NrIH0pID0+IGJlc3ROdW1iZXIuZ3Qoc3RhcnRpbmdCbG9jaylcbiAgICAgICAgPyBibk1pbihsb2NrZWQsIHBlckJsb2NrLm11bChiZXN0TnVtYmVyLnN1YihzdGFydGluZ0Jsb2NrKSkpXG4gICAgICAgIDogQk5fWkVSTyk7XG4gICAgY29uc3QgdmVzdGVkQmFsYW5jZSA9IHZlc3RlZEJhbGFuY2VzLnJlZHVjZSgoYWxsLCB2YWx1ZSkgPT4gYWxsLmlhZGQodmFsdWUpLCBuZXcgQk4oMCkpO1xuICAgIGNvbnN0IHZlc3RpbmdUb3RhbCA9IHZlc3RpbmcucmVkdWNlKChhbGwsIHsgbG9ja2VkIH0pID0+IGFsbC5pYWRkKGxvY2tlZCksIG5ldyBCTigwKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNWZXN0aW5nLFxuICAgICAgICB2ZXN0ZWRCYWxhbmNlLFxuICAgICAgICB2ZXN0ZWRDbGFpbWFibGU6IGlzVmVzdGluZ1xuICAgICAgICAgICAgPyBzaGFyZWQudmVzdGluZ0xvY2tlZC5zdWIodmVzdGluZ1RvdGFsLnN1Yih2ZXN0ZWRCYWxhbmNlKSlcbiAgICAgICAgICAgIDogQk5fWkVSTyxcbiAgICAgICAgdmVzdGluZzogdmVzdGluZ1xuICAgICAgICAgICAgLm1hcCgoeyBsb2NrZWQsIHBlckJsb2NrLCBzdGFydGluZ0Jsb2NrIH0sIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgZW5kQmxvY2s6IGxvY2tlZC5kaXYocGVyQmxvY2spLmlhZGQoc3RhcnRpbmdCbG9jayksXG4gICAgICAgICAgICBsb2NrZWQsXG4gICAgICAgICAgICBwZXJCbG9jayxcbiAgICAgICAgICAgIHN0YXJ0aW5nQmxvY2ssXG4gICAgICAgICAgICB2ZXN0ZWQ6IHZlc3RlZEJhbGFuY2VzW2luZGV4XVxuICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbG9ja2VkIH0pID0+ICFsb2NrZWQuaXNaZXJvKCkpLFxuICAgICAgICB2ZXN0aW5nVG90YWxcbiAgICB9O1xufVxuZnVuY3Rpb24gY2FsY0JhbGFuY2VzKGFwaSwgcmVzdWx0KSB7XG4gICAgY29uc3QgW2RhdGEsIFt2ZXN0aW5nLCBhbGxMb2NrcywgbmFtZWRSZXNlcnZlc10sIGJlc3ROdW1iZXJdID0gcmVzdWx0O1xuICAgIGNvbnN0IHNoYXJlZCA9IGNhbGNTaGFyZWQoYXBpLCBiZXN0TnVtYmVyLCBkYXRhLCBhbGxMb2Nrc1swXSk7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZChzaGFyZWQsIGNhbGNWZXN0aW5nKGJlc3ROdW1iZXIsIHNoYXJlZCwgdmVzdGluZyksIHtcbiAgICAgICAgYWNjb3VudElkOiBkYXRhLmFjY291bnRJZCxcbiAgICAgICAgYWNjb3VudE5vbmNlOiBkYXRhLmFjY291bnROb25jZSxcbiAgICAgICAgYWRkaXRpb25hbDogYWxsTG9ja3NcbiAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgLm1hcCgobCwgaW5kZXgpID0+IGNhbGNTaGFyZWQoYXBpLCBiZXN0TnVtYmVyLCBkYXRhLmFkZGl0aW9uYWxbaW5kZXhdLCBsKSksXG4gICAgICAgIG5hbWVkUmVzZXJ2ZXNcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5T2xkKGFwaSwgYWNjb3VudElkKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucXVlcnkuYmFsYW5jZXMubG9ja3MoYWNjb3VudElkKSxcbiAgICAgICAgYXBpLnF1ZXJ5LmJhbGFuY2VzWyd2ZXN0aW5nJ10oYWNjb3VudElkKVxuICAgIF0pLnBpcGUobWFwKChbbG9ja3MsIG9wdFZlc3RpbmddKSA9PiB7XG4gICAgICAgIGxldCB2ZXN0aW5nTmV3ID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdFZlc3RpbmcuaXNTb21lKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogbG9ja2VkLCBwZXJCbG9jaywgc3RhcnRpbmdCbG9jayB9ID0gb3B0VmVzdGluZy51bndyYXAoKTtcbiAgICAgICAgICAgIHZlc3RpbmdOZXcgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVmVzdGluZ0luZm8nLCB7IGxvY2tlZCwgcGVyQmxvY2ssIHN0YXJ0aW5nQmxvY2sgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHZlc3RpbmdOZXdcbiAgICAgICAgICAgICAgICA/IFt2ZXN0aW5nTmV3XVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIFtsb2Nrc10sXG4gICAgICAgICAgICBbXVxuICAgICAgICBdO1xuICAgIH0pKTtcbn1cbmNvbnN0IGlzTm9uTnVsbGFibGUgPSAobnVsbGFibGUpID0+ICEhbnVsbGFibGU7XG5mdW5jdGlvbiBjcmVhdGVDYWxscyhjYWxscykge1xuICAgIHJldHVybiBbXG4gICAgICAgIGNhbGxzLm1hcCgoYykgPT4gIWMpLFxuICAgICAgICBjYWxscy5maWx0ZXIoaXNOb25OdWxsYWJsZSlcbiAgICBdO1xufVxuZnVuY3Rpb24gcXVlcnlDdXJyZW50KGFwaSwgYWNjb3VudElkLCBiYWxhbmNlSW5zdGFuY2VzID0gWydiYWxhbmNlcyddKSB7XG4gICAgY29uc3QgW2xvY2tFbXB0eSwgbG9ja1F1ZXJpZXNdID0gY3JlYXRlQ2FsbHMoYmFsYW5jZUluc3RhbmNlcy5tYXAoKG0pID0+IGFwaS5kZXJpdmVbbV0/LmN1c3RvbUxvY2tzIHx8IGFwaS5xdWVyeVttXT8ubG9ja3MpKTtcbiAgICBjb25zdCBbcmVzZXJ2ZUVtcHR5LCByZXNlcnZlUXVlcmllc10gPSBjcmVhdGVDYWxscyhiYWxhbmNlSW5zdGFuY2VzLm1hcCgobSkgPT4gYXBpLnF1ZXJ5W21dPy5yZXNlcnZlcykpO1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLnF1ZXJ5LnZlc3Rpbmc/LnZlc3RpbmdcbiAgICAgICAgICAgID8gYXBpLnF1ZXJ5LnZlc3RpbmcudmVzdGluZyhhY2NvdW50SWQpXG4gICAgICAgICAgICA6IG9mKGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdPcHRpb248VmVzdGluZ0luZm8+JykpLFxuICAgICAgICBsb2NrUXVlcmllcy5sZW5ndGhcbiAgICAgICAgICAgID8gY29tYmluZUxhdGVzdChsb2NrUXVlcmllcy5tYXAoKGMpID0+IGMoYWNjb3VudElkKSkpXG4gICAgICAgICAgICA6IG9mKFtdKSxcbiAgICAgICAgcmVzZXJ2ZVF1ZXJpZXMubGVuZ3RoXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QocmVzZXJ2ZVF1ZXJpZXMubWFwKChjKSA9PiBjKGFjY291bnRJZCkpKVxuICAgICAgICAgICAgOiBvZihbXSlcbiAgICBdKS5waXBlKG1hcCgoW29wdCwgbG9ja3MsIHJlc2VydmVzXSkgPT4ge1xuICAgICAgICBsZXQgb2Zmc2V0TG9jayA9IC0xO1xuICAgICAgICBsZXQgb2Zmc2V0UmVzZXJ2ZSA9IC0xO1xuICAgICAgICBjb25zdCB2ZXN0aW5nID0gb3B0LnVud3JhcE9yKG51bGwpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdmVzdGluZ1xuICAgICAgICAgICAgICAgID8gQXJyYXkuaXNBcnJheSh2ZXN0aW5nKVxuICAgICAgICAgICAgICAgICAgICA/IHZlc3RpbmdcbiAgICAgICAgICAgICAgICAgICAgOiBbdmVzdGluZ11cbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBsb2NrRW1wdHkubWFwKChlKSA9PiBlID8gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1ZlYzxCYWxhbmNlTG9jaz4nKSA6IGxvY2tzWysrb2Zmc2V0TG9ja10pLFxuICAgICAgICAgICAgcmVzZXJ2ZUVtcHR5Lm1hcCgoZSkgPT4gZSA/IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdWZWM8UGFsbGV0QmFsYW5jZXNSZXNlcnZlRGF0YT4nKSA6IHJlc2VydmVzWysrb2Zmc2V0UmVzZXJ2ZV0pXG4gICAgICAgIF07XG4gICAgfSkpO1xufVxuLyoqXG4gKiBAbmFtZSBhbGxcbiAqIEBwYXJhbSB7KCBBY2NvdW50SW5kZXggfCBBY2NvdW50SWQgfCBBZGRyZXNzIHwgc3RyaW5nICl9IGFkZHJlc3MgLSBBbiBhY2NvdW50cyBJZCBpbiBkaWZmZXJlbnQgZm9ybWF0cy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHZhcmlvdXMgYmFsYW5jZSBxdWVyaWVzXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IEFMSUNFID0gJ0Y3SHMnO1xuICpcbiAqIGFwaS5kZXJpdmUuYmFsYW5jZXMuYWxsKEFMSUNFLCAoeyBhY2NvdW50SWQsIGxvY2tlZEJhbGFuY2UgfSkgPT4ge1xuICogICBjb25zb2xlLmxvZyhgVGhlIGFjY291bnQgJHthY2NvdW50SWR9IGhhcyBhIGxvY2tlZCBiYWxhbmNlICR7bG9ja2VkQmFsYW5jZX0gdW5pdHMuYCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIGNvbnN0IGJhbGFuY2VJbnN0YW5jZXMgPSBhcGkucmVnaXN0cnkuZ2V0TW9kdWxlSW5zdGFuY2VzKGFwaS5ydW50aW1lVmVyc2lvbi5zcGVjTmFtZSwgJ2JhbGFuY2VzJyk7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3MpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkuZGVyaXZlLmJhbGFuY2VzLmFjY291bnQoYWRkcmVzcyksXG4gICAgICAgIGlzRnVuY3Rpb24oYXBpLnF1ZXJ5LnN5c3RlbT8uYWNjb3VudCkgfHwgaXNGdW5jdGlvbihhcGkucXVlcnkuYmFsYW5jZXM/LmFjY291bnQpXG4gICAgICAgICAgICA/IHF1ZXJ5Q3VycmVudChhcGksIGFkZHJlc3MsIGJhbGFuY2VJbnN0YW5jZXMpXG4gICAgICAgICAgICA6IHF1ZXJ5T2xkKGFwaSwgYWRkcmVzcylcbiAgICBdKS5waXBlKHN3aXRjaE1hcCgoW2FjY291bnQsIGxvY2tzXSkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9mKGFjY291bnQpLFxuICAgICAgICBvZihsb2NrcyksXG4gICAgICAgIGFwaS5kZXJpdmUuY2hhaW4uYmVzdE51bWJlcigpXG4gICAgXSkpLCBtYXAoKHJlc3VsdCkgPT4gY2FsY0JhbGFuY2VzKGFwaSwgcmVzdWx0KSkpKTtcbn1cbiIsImltcG9ydCB7IGFsbCB9IGZyb20gJy4vYWxsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZvdGluZ0JhbGFuY2VzLmpzJztcbmNvbnN0IHZvdGluZ0JhbGFuY2UgPSBhbGw7XG5leHBvcnQgeyBhbGwsIHZvdGluZ0JhbGFuY2UgfTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gdm90aW5nQmFsYW5jZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFkZHJlc3NlcykgPT4gIWFkZHJlc3Nlcz8ubGVuZ3RoXG4gICAgICAgID8gb2YoW10pXG4gICAgICAgIDogY29tYmluZUxhdGVzdChhZGRyZXNzZXMubWFwKChhY2NvdW50SWQpID0+IGFwaS5kZXJpdmUuYmFsYW5jZXMuYWNjb3VudChhY2NvdW50SWQpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJCb3VudGllc1Byb3Bvc2FscyB9IGZyb20gJy4vaGVscGVycy9maWx0ZXJCb3VudHlQcm9wb3NhbHMuanMnO1xuZnVuY3Rpb24gcGFyc2VSZXN1bHQoW21heWJlQm91bnRpZXMsIG1heWJlRGVzY3JpcHRpb25zLCBpZHMsIGJvdW50eVByb3Bvc2Fsc10pIHtcbiAgICBjb25zdCBib3VudGllcyA9IFtdO1xuICAgIG1heWJlQm91bnRpZXMuZm9yRWFjaCgoYm91bnR5LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoYm91bnR5LmlzU29tZSkge1xuICAgICAgICAgICAgYm91bnRpZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgYm91bnR5OiBib3VudHkudW53cmFwKCksXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG1heWJlRGVzY3JpcHRpb25zW2luZGV4XS51bndyYXBPckRlZmF1bHQoKS50b1V0ZjgoKSxcbiAgICAgICAgICAgICAgICBpbmRleDogaWRzW2luZGV4XSxcbiAgICAgICAgICAgICAgICBwcm9wb3NhbHM6IGJvdW50eVByb3Bvc2Fscy5maWx0ZXIoKGJvdW50eVByb3Bvc2FsKSA9PiBib3VudHlQcm9wb3NhbC5wcm9wb3NhbCAmJiBpZHNbaW5kZXhdLmVxKGJvdW50eVByb3Bvc2FsLnByb3Bvc2FsLmFyZ3NbMF0pKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYm91bnRpZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gYm91bnRpZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgY29uc3QgYm91bnR5QmFzZSA9IGFwaS5xdWVyeS5ib3VudGllcyB8fCBhcGkucXVlcnkudHJlYXN1cnk7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYm91bnR5QmFzZS5ib3VudGllc1xuICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgYm91bnR5QmFzZS5ib3VudHlDb3VudCgpLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LmNvdW5jaWxcbiAgICAgICAgICAgICAgICA/IGFwaS5xdWVyeS5jb3VuY2lsLnByb3Bvc2FsQ291bnQoKVxuICAgICAgICAgICAgICAgIDogb2YoMClcbiAgICAgICAgXSkucGlwZShzd2l0Y2hNYXAoKCkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBib3VudHlCYXNlLmJvdW50aWVzLmtleXMoKSxcbiAgICAgICAgICAgIGFwaS5kZXJpdmUuY291bmNpbFxuICAgICAgICAgICAgICAgID8gYXBpLmRlcml2ZS5jb3VuY2lsLnByb3Bvc2FscygpXG4gICAgICAgICAgICAgICAgOiBvZihbXSlcbiAgICAgICAgXSkpLCBzd2l0Y2hNYXAoKFtrZXlzLCBwcm9wb3NhbHNdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZHMgPSBrZXlzLm1hcCgoeyBhcmdzOiBbaWRdIH0pID0+IGlkKTtcbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICBib3VudHlCYXNlLmJvdW50aWVzLm11bHRpKGlkcyksXG4gICAgICAgICAgICAgICAgYm91bnR5QmFzZS5ib3VudHlEZXNjcmlwdGlvbnMubXVsdGkoaWRzKSxcbiAgICAgICAgICAgICAgICBvZihpZHMpLFxuICAgICAgICAgICAgICAgIG9mKGZpbHRlckJvdW50aWVzUHJvcG9zYWxzKGFwaSwgcHJvcG9zYWxzKSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9KSwgbWFwKHBhcnNlUmVzdWx0KSlcbiAgICAgICAgOiBvZihwYXJzZVJlc3VsdChbW10sIFtdLCBbXSwgW11dKSkpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckJvdW50aWVzUHJvcG9zYWxzKGFwaSwgYWxsUHJvcG9zYWxzKSB7XG4gICAgY29uc3QgYm91bnR5VHhCYXNlID0gYXBpLnR4LmJvdW50aWVzID8gYXBpLnR4LmJvdW50aWVzIDogYXBpLnR4LnRyZWFzdXJ5O1xuICAgIGNvbnN0IGJvdW50eVByb3Bvc2FsQ2FsbHMgPSBbYm91bnR5VHhCYXNlLmFwcHJvdmVCb3VudHksIGJvdW50eVR4QmFzZS5jbG9zZUJvdW50eSwgYm91bnR5VHhCYXNlLnByb3Bvc2VDdXJhdG9yLCBib3VudHlUeEJhc2UudW5hc3NpZ25DdXJhdG9yXTtcbiAgICByZXR1cm4gYWxsUHJvcG9zYWxzLmZpbHRlcigocHJvcG9zYWwpID0+IGJvdW50eVByb3Bvc2FsQ2FsbHMuZmluZCgoYm91bnR5Q2FsbCkgPT4gcHJvcG9zYWwucHJvcG9zYWwgJiYgYm91bnR5Q2FsbC5pcyhwcm9wb3NhbC5wcm9wb3NhbCkpKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vYm91bnRpZXMuanMnO1xuIiwiaW1wb3J0IHsgbGF6eURlcml2ZVNlY3Rpb24gfSBmcm9tICcuL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVyaXZlIH0gZnJvbSAnLi9kZXJpdmUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXJpdmUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlL2luZGV4LmpzJztcbmV4cG9ydCB7IGxhenlEZXJpdmVTZWN0aW9uIH07XG5jb25zdCBjaGVja3MgPSB7XG4gICAgYWxsaWFuY2VNb3Rpb246IHtcbiAgICAgICAgaW5zdGFuY2VzOiBbJ2FsbGlhbmNlTW90aW9uJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdXG4gICAgfSxcbiAgICBiYWdzTGlzdDoge1xuICAgICAgICBpbnN0YW5jZXM6IFsndm90ZXJCYWdzTGlzdCcsICd2b3Rlckxpc3QnLCAnYmFnc0xpc3QnXSxcbiAgICAgICAgbWV0aG9kczogW10sXG4gICAgICAgIHdpdGhEZXRlY3Q6IHRydWVcbiAgICB9LFxuICAgIGNvbnRyYWN0czoge1xuICAgICAgICBpbnN0YW5jZXM6IFsnY29udHJhY3RzJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdXG4gICAgfSxcbiAgICBjb3VuY2lsOiB7XG4gICAgICAgIGluc3RhbmNlczogWydjb3VuY2lsJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdLFxuICAgICAgICB3aXRoRGV0ZWN0OiB0cnVlXG4gICAgfSxcbiAgICBjcm93ZGxvYW46IHtcbiAgICAgICAgaW5zdGFuY2VzOiBbJ2Nyb3dkbG9hbiddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH0sXG4gICAgZGVtb2NyYWN5OiB7XG4gICAgICAgIGluc3RhbmNlczogWydkZW1vY3JhY3knXSxcbiAgICAgICAgbWV0aG9kczogW11cbiAgICB9LFxuICAgIGVsZWN0aW9uczoge1xuICAgICAgICBpbnN0YW5jZXM6IFsncGhyYWdtZW5FbGVjdGlvbicsICdlbGVjdGlvbnNQaHJhZ21lbicsICdlbGVjdGlvbnMnLCAnY291bmNpbCddLFxuICAgICAgICBtZXRob2RzOiBbXSxcbiAgICAgICAgd2l0aERldGVjdDogdHJ1ZVxuICAgIH0sXG4gICAgaW1PbmxpbmU6IHtcbiAgICAgICAgaW5zdGFuY2VzOiBbJ2ltT25saW5lJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdXG4gICAgfSxcbiAgICBtZW1iZXJzaGlwOiB7XG4gICAgICAgIGluc3RhbmNlczogWydtZW1iZXJzaGlwJ10sXG4gICAgICAgIG1ldGhvZHM6IFtdXG4gICAgfSxcbiAgICBwYXJhY2hhaW5zOiB7XG4gICAgICAgIGluc3RhbmNlczogWydwYXJhY2hhaW5zJywgJ3JlZ2lzdHJhciddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH0sXG4gICAgc2Vzc2lvbjoge1xuICAgICAgICBpbnN0YW5jZXM6IFsnc2Vzc2lvbiddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH0sXG4gICAgc29jaWV0eToge1xuICAgICAgICBpbnN0YW5jZXM6IFsnc29jaWV0eSddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH0sXG4gICAgc3Rha2luZzoge1xuICAgICAgICBpbnN0YW5jZXM6IFsnc3Rha2luZyddLFxuICAgICAgICBtZXRob2RzOiBbJ2VyYXNSZXdhcmRQb2ludHMnXVxuICAgIH0sXG4gICAgdGVjaG5pY2FsQ29tbWl0dGVlOiB7XG4gICAgICAgIGluc3RhbmNlczogWyd0ZWNobmljYWxDb21taXR0ZWUnXSxcbiAgICAgICAgbWV0aG9kczogW10sXG4gICAgICAgIHdpdGhEZXRlY3Q6IHRydWVcbiAgICB9LFxuICAgIHRyZWFzdXJ5OiB7XG4gICAgICAgIGluc3RhbmNlczogWyd0cmVhc3VyeSddLFxuICAgICAgICBtZXRob2RzOiBbXVxuICAgIH1cbn07XG5mdW5jdGlvbiBnZXRNb2R1bGVJbnN0YW5jZXMoYXBpLCBzcGVjTmFtZSwgbW9kdWxlTmFtZSkge1xuICAgIHJldHVybiBhcGkucmVnaXN0cnkuZ2V0TW9kdWxlSW5zdGFuY2VzKHNwZWNOYW1lLCBtb2R1bGVOYW1lKSB8fCBbXTtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCB3aWxsIGluamVjdCBgYXBpYCBpbnRvIGFsbCB0aGUgZnVuY3Rpb25zIGluc2lkZVxuICogYGFsbFNlY3Rpb25zYCwgYW5kIGtlZXAgdGhlIG9iamVjdCBhcmNoaXRlY3R1cmUgb2YgYGFsbFNlY3Rpb25zYC5cbiAqL1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gaW5qZWN0RnVuY3Rpb25zKGluc3RhbmNlSWQsIGFwaSwgZGVyaXZlcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoZGVyaXZlcyk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFwaS5xdWVyeSk7XG4gICAgY29uc3Qgc3BlY05hbWUgPSBhcGkucnVudGltZVZlcnNpb24uc3BlY05hbWU7XG4gICAgY29uc3QgZmlsdGVyS2V5cyA9IChxKSA9PiBrZXlzLmluY2x1ZGVzKHEpO1xuICAgIGNvbnN0IGZpbHRlckluc3RhbmNlcyA9IChxKSA9PiBnZXRNb2R1bGVJbnN0YW5jZXMoYXBpLCBzcGVjTmFtZSwgcSkuc29tZShmaWx0ZXJLZXlzKTtcbiAgICBjb25zdCBmaWx0ZXJNZXRob2RzID0gKGFsbCkgPT4gKG0pID0+IGFsbC5zb21lKChxKSA9PiBrZXlzLmluY2x1ZGVzKHEpICYmIGFwaS5xdWVyeVtxXVttXSk7XG4gICAgY29uc3QgZ2V0S2V5cyA9IChzKSA9PiBPYmplY3Qua2V5cyhkZXJpdmVzW3NdKTtcbiAgICBjb25zdCBjcmVhdG9yID0gKHMsIG0pID0+IGRlcml2ZXNbc11bbV0oaW5zdGFuY2VJZCwgYXBpKTtcbiAgICBjb25zdCBpc0luY2x1ZGVkID0gKGMpID0+ICghY2hlY2tzW2NdIHx8ICgoY2hlY2tzW2NdLmluc3RhbmNlcy5zb21lKGZpbHRlcktleXMpICYmICghY2hlY2tzW2NdLm1ldGhvZHMubGVuZ3RoIHx8XG4gICAgICAgIGNoZWNrc1tjXS5tZXRob2RzLmV2ZXJ5KGZpbHRlck1ldGhvZHMoY2hlY2tzW2NdLmluc3RhbmNlcykpKSkgfHxcbiAgICAgICAgKGNoZWNrc1tjXS53aXRoRGV0ZWN0ICYmXG4gICAgICAgICAgICBjaGVja3NbY10uaW5zdGFuY2VzLnNvbWUoZmlsdGVySW5zdGFuY2VzKSkpKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBuYW1lcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgaXNJbmNsdWRlZChuYW1lKSAmJlxuICAgICAgICAgICAgbGF6eURlcml2ZVNlY3Rpb24ocmVzdWx0LCBuYW1lLCBnZXRLZXlzLCBjcmVhdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVEZXJpdmVzKGluc3RhbmNlSWQsIGFwaSwgY3VzdG9tID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbmplY3RGdW5jdGlvbnMoaW5zdGFuY2VJZCwgYXBpLCBkZXJpdmUpLFxuICAgICAgICAuLi5pbmplY3RGdW5jdGlvbnMoaW5zdGFuY2VJZCwgYXBpLCBjdXN0b20pXG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUJsb2NrTnVtYmVyRGVyaXZlIH0gZnJvbSAnLi91dGlsLmpzJztcbi8qKlxuICogQG5hbWUgYmVzdE51bWJlclxuICogQHJldHVybnMgVGhlIGxhdGVzdCBibG9jayBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGFwaS5kZXJpdmUuY2hhaW4uYmVzdE51bWJlcigoYmxvY2tOdW1iZXIpID0+IHtcbiAqICAgY29uc29sZS5sb2coYHRoZSBjdXJyZW50IGJlc3QgYmxvY2sgaXMgIyR7YmxvY2tOdW1iZXJ9YCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgYmVzdE51bWJlciA9IC8qI19fUFVSRV9fKi8gY3JlYXRlQmxvY2tOdW1iZXJEZXJpdmUoKGFwaSkgPT4gYXBpLnJwYy5jaGFpbi5zdWJzY3JpYmVOZXdIZWFkcygpKTtcbiIsImltcG9ydCB7IGNyZWF0ZUJsb2NrTnVtYmVyRGVyaXZlIH0gZnJvbSAnLi91dGlsLmpzJztcbi8qKlxuICogQG5hbWUgYmVzdE51bWJlckZpbmFsaXplZFxuICogQHJldHVybnMgQSBCbG9ja051bWJlclxuICogQGRlc2NyaXB0aW9uIEdldCB0aGUgbGF0ZXN0IGZpbmFsaXplZCBibG9jayBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGFwaS5kZXJpdmUuY2hhaW4uYmVzdE51bWJlckZpbmFsaXplZCgoYmxvY2tOdW1iZXIpID0+IHtcbiAqICAgY29uc29sZS5sb2coYHRoZSBjdXJyZW50IGZpbmFsaXplZCBibG9jayBpcyAjJHtibG9ja051bWJlcn1gKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBiZXN0TnVtYmVyRmluYWxpemVkID0gLyojX19QVVJFX18qLyBjcmVhdGVCbG9ja051bWJlckRlcml2ZSgoYXBpKSA9PiBhcGkucnBjLmNoYWluLnN1YnNjcmliZUZpbmFsaXplZEhlYWRzKCkpO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIGJlc3ROdW1iZXJMYWdcbiAqIEByZXR1cm5zIEEgbnVtYmVyIG9mIGJsb2Nrc1xuICogQGRlc2NyaXB0aW9uIENhbGN1bGF0ZXMgdGhlIGxhZyBiZXR3ZWVuIGZpbmFsaXplZCBoZWFkIGFuZCBiZXN0IGhlYWRcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogYXBpLmRlcml2ZS5jaGFpbi5iZXN0TnVtYmVyTGFnKChsYWcpID0+IHtcbiAqICAgY29uc29sZS5sb2coYGZpbmFsaXplZCBpcyAke2xhZ30gYmxvY2tzIGJlaGluZCBoZWFkYCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmVzdE51bWJlckxhZyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5jaGFpbi5iZXN0TnVtYmVyKCksXG4gICAgICAgIGFwaS5kZXJpdmUuY2hhaW4uYmVzdE51bWJlckZpbmFsaXplZCgpXG4gICAgXSkucGlwZShtYXAoKFtiZXN0TnVtYmVyLCBiZXN0TnVtYmVyRmluYWxpemVkXSkgPT4gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0Jsb2NrTnVtYmVyJywgYmVzdE51bWJlci5zdWIoYmVzdE51bWJlckZpbmFsaXplZCkpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjcmVhdGVTaWduZWRCbG9ja0V4dGVuZGVkIH0gZnJvbSAnLi4vdHlwZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRBdXRob3JEZXRhaWxzIH0gZnJvbSAnLi91dGlsLmpzJztcbi8qKlxuICogQG5hbWUgZ2V0QmxvY2tcbiAqIEBwYXJhbSB7KCBVaW50OEFycmF5IHwgc3RyaW5nICl9IGhhc2ggLSBBIGJsb2NrIGhhc2ggYXMgVTggYXJyYXkgb3Igc3RyaW5nLlxuICogQGRlc2NyaXB0aW9uIEdldCBhIHNwZWNpZmljIGJsb2NrIChlLmcuIHJwYy5jaGFpbi5nZXRCbG9jaykgYW5kIGV4dGVuZCBpdCB3aXRoIHRoZSBhdXRob3JcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgeyBhdXRob3IsIGJsb2NrIH0gPSBhd2FpdCBhcGkuZGVyaXZlLmNoYWluLmdldEJsb2NrKCcweDEyMy4uLjQ1NicpO1xuICpcbiAqIGNvbnNvbGUubG9nKGBibG9jayAjJHtibG9jay5oZWFkZXIubnVtYmVyfSB3YXMgYXV0aG9yZWQgYnkgJHthdXRob3J9YCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJsb2NrKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChibG9ja0hhc2gpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucnBjLmNoYWluLmdldEJsb2NrKGJsb2NrSGFzaCksXG4gICAgICAgIGFwaS5xdWVyeUF0KGJsb2NrSGFzaClcbiAgICBdKS5waXBlKHN3aXRjaE1hcCgoW3NpZ25lZEJsb2NrLCBxdWVyeUF0XSkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9mKHNpZ25lZEJsb2NrKSxcbiAgICAgICAgcXVlcnlBdC5zeXN0ZW0uZXZlbnRzKCksXG4gICAgICAgIGdldEF1dGhvckRldGFpbHMoYXBpLCBzaWduZWRCbG9jay5ibG9jay5oZWFkZXIsIGJsb2NrSGFzaClcbiAgICBdKSksIG1hcCgoW3NpZ25lZEJsb2NrLCBldmVudHMsIFssIHZhbGlkYXRvcnMsIGF1dGhvcl1dKSA9PiBjcmVhdGVTaWduZWRCbG9ja0V4dGVuZGVkKGV2ZW50cy5yZWdpc3RyeSwgc2lnbmVkQmxvY2ssIGV2ZW50cywgdmFsaWRhdG9ycywgYXV0aG9yKSkpKTtcbn1cbiIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJsb2NrQnlOdW1iZXIoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGJsb2NrTnVtYmVyKSA9PiBhcGkucnBjLmNoYWluLmdldEJsb2NrSGFzaChibG9ja051bWJlcikucGlwZShzd2l0Y2hNYXAoKGgpID0+IGFwaS5kZXJpdmUuY2hhaW4uZ2V0QmxvY2soaCkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlSGVhZGVyRXh0ZW5kZWQgfSBmcm9tICcuLi90eXBlL2luZGV4LmpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEF1dGhvckRldGFpbHMgfSBmcm9tICcuL3V0aWwuanMnO1xuLyoqXG4gKiBAbmFtZSBnZXRIZWFkZXJcbiAqIEBwYXJhbSB7KCBVaW50OEFycmF5IHwgc3RyaW5nICl9IGhhc2ggLSBBIGJsb2NrIGhhc2ggYXMgVTggYXJyYXkgb3Igc3RyaW5nLlxuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgYmxvY2sgaGVhZGVyIGFuZCB0aGUgYmxvY2sgYXV0aG9yXG4gKiBAZGVzY3JpcHRpb24gR2V0IGEgc3BlY2lmaWMgYmxvY2sgaGVhZGVyIGFuZCBleHRlbmQgaXQgd2l0aCB0aGUgYXV0aG9yXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IHsgYXV0aG9yLCBudW1iZXIgfSA9IGF3YWl0IGFwaS5kZXJpdmUuY2hhaW4uZ2V0SGVhZGVyKCcweDEyMy4uLjQ1NicpO1xuICpcbiAqIGNvbnNvbGUubG9nKGBibG9jayAjJHtudW1iZXJ9IHdhcyBhdXRob3JlZCBieSAke2F1dGhvcn1gKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChibG9ja0hhc2gpID0+IGFwaS5ycGMuY2hhaW4uZ2V0SGVhZGVyKGJsb2NrSGFzaCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4gZ2V0QXV0aG9yRGV0YWlscyhhcGksIGhlYWRlciwgYmxvY2tIYXNoKSksIG1hcCgoW2hlYWRlciwgdmFsaWRhdG9ycywgYXV0aG9yXSkgPT4gY3JlYXRlSGVhZGVyRXh0ZW5kZWQoKHZhbGlkYXRvcnMgfHwgaGVhZGVyKS5yZWdpc3RyeSwgaGVhZGVyLCB2YWxpZGF0b3JzLCBhdXRob3IpKSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9iZXN0TnVtYmVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYmVzdE51bWJlckZpbmFsaXplZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Jlc3ROdW1iZXJMYWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRCbG9jay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dldEJsb2NrQnlOdW1iZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRIZWFkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpYmVGaW5hbGl6ZWRCbG9ja3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N1YnNjcmliZU5ld0Jsb2Nrcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N1YnNjcmliZU5ld0hlYWRzLmpzJztcbiIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBzdWJzY3JpYmVGaW5hbGl6ZWRCbG9ja3NcbiAqIEByZXR1cm5zIFRoZSBmaW5hbGl6ZWQgYmxvY2sgJiBldmVudHMgZm9yIHRoYXQgYmxvY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZUZpbmFsaXplZEJsb2NrcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkuZGVyaXZlLmNoYWluLnN1YnNjcmliZUZpbmFsaXplZEhlYWRzKCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4gYXBpLmRlcml2ZS5jaGFpbi5nZXRCbG9jayhoZWFkZXIuY3JlYXRlZEF0SGFzaCB8fCBoZWFkZXIuaGFzaCkpKSk7XG59XG4iLCJpbXBvcnQgeyBmcm9tLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG4vKipcbiAqIFJldHVybnMgYSBoZWFkZXIgcmFuZ2UgZnJvbSBzdGFydEhhc2ggdG8gdG8gKG5vdCBpbmNsdWRpbmcpIGVuZEhhc2gsIGkuZS4gbGFzdEJsb2NrLnBhcmVudEhhc2ggPT09IGVuZEhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9nZXRIZWFkZXJSYW5nZShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoc3RhcnRIYXNoLCBlbmRIYXNoLCBwcmV2ID0gW10pID0+IGFwaS5ycGMuY2hhaW4uZ2V0SGVhZGVyKHN0YXJ0SGFzaCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4gaGVhZGVyLnBhcmVudEhhc2guZXEoZW5kSGFzaClcbiAgICAgICAgPyBvZihbaGVhZGVyLCAuLi5wcmV2XSlcbiAgICAgICAgOiBhcGkuZGVyaXZlLmNoYWluLl9nZXRIZWFkZXJSYW5nZShoZWFkZXIucGFyZW50SGFzaCwgZW5kSGFzaCwgW2hlYWRlciwgLi4ucHJldl0pKSkpO1xufVxuLyoqXG4gKiBAbmFtZSBzdWJzY3JpYmVGaW5hbGl6ZWRIZWFkc1xuICogQGRlc2NyaXB0aW9uIEFuIG9ic2VydmFibGUgb2YgdGhlIGZpbmFsaXplZCBibG9jayBoZWFkZXJzLiBVbmxpa2UgdGhlIGJhc2VcbiAqIGNoYWluLnN1YnNjcmliZUZpbmFsaXplZEhlYWRzIHRoaXMgZG9lcyBub3Qgc2tpcCBhbnkgaGVhZGVycy4gU2luY2UgZmluYWxpemF0aW9uXG4gKiBtYXkgc2tpcCBzcGVjaWZpYyBibG9ja3MgKGZpbmFsaXphdGlvbiBoYXBwZW5zIGluIHRlcm1zIG9mIGNoYWlucyksIHRoaXMgdmVyc2lvblxuICogb2YgdGhlIGRlcml2ZSB0cmFja3MgbWlzc2luZyBoZWFkZXJzIChzaW5jZSBsYXN0ICByZXRyaWV2ZWQpIGFuZCBwcm92aWRlcyB0aGVtXG4gKiB0byB0aGUgY2FsbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiB7XG4gICAgICAgIGxldCBwcmV2SGFzaCA9IG51bGw7XG4gICAgICAgIHJldHVybiBhcGkucnBjLmNoYWluLnN1YnNjcmliZUZpbmFsaXplZEhlYWRzKCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW5kSGFzaCA9IHByZXZIYXNoO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRIYXNoID0gaGVhZGVyLnBhcmVudEhhc2g7XG4gICAgICAgICAgICBwcmV2SGFzaCA9IGhlYWRlci5jcmVhdGVkQXRIYXNoID0gaGVhZGVyLmhhc2g7XG4gICAgICAgICAgICByZXR1cm4gZW5kSGFzaCA9PT0gbnVsbCB8fCBzdGFydEhhc2guZXEoZW5kSGFzaClcbiAgICAgICAgICAgICAgICA/IG9mKGhlYWRlcilcbiAgICAgICAgICAgICAgICA6IGFwaS5kZXJpdmUuY2hhaW4uX2dldEhlYWRlclJhbmdlKHN0YXJ0SGFzaCwgZW5kSGFzaCwgW2hlYWRlcl0pLnBpcGUoc3dpdGNoTWFwKChoZWFkZXJzKSA9PiBmcm9tKGhlYWRlcnMpKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBzdWJzY3JpYmVOZXdCbG9ja3NcbiAqIEByZXR1cm5zIFRoZSBsYXRlc3QgYmxvY2sgJiBldmVudHMgZm9yIHRoYXQgYmxvY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZU5ld0Jsb2NrcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkuZGVyaXZlLmNoYWluLnN1YnNjcmliZU5ld0hlYWRzKCkucGlwZShzd2l0Y2hNYXAoKGhlYWRlcikgPT4gYXBpLmRlcml2ZS5jaGFpbi5nZXRCbG9jayhoZWFkZXIuY3JlYXRlZEF0SGFzaCB8fCBoZWFkZXIuaGFzaCkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlSGVhZGVyRXh0ZW5kZWQgfSBmcm9tICcuLi90eXBlL2luZGV4LmpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEF1dGhvckRldGFpbHMgfSBmcm9tICcuL3V0aWwuanMnO1xuLyoqXG4gKiBAbmFtZSBzdWJzY3JpYmVOZXdIZWFkc1xuICogQHJldHVybnMgQSBoZWFkZXIgd2l0aCB0aGUgY3VycmVudCBoZWFkZXIgKGluY2x1ZGluZyBleHRyYWN0ZWQgYXV0aG9yKVxuICogQGRlc2NyaXB0aW9uIEFuIG9ic2VydmFibGUgb2YgdGhlIGN1cnJlbnQgYmxvY2sgaGVhZGVyIGFuZCBpdCdzIGF1dGhvclxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBhcGkuZGVyaXZlLmNoYWluLnN1YnNjcmliZU5ld0hlYWRzKChoZWFkZXIpID0+IHtcbiAqICAgY29uc29sZS5sb2coYGJsb2NrICMke2hlYWRlci5udW1iZXJ9IHdhcyBhdXRob3JlZCBieSAke2hlYWRlci5hdXRob3J9YCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlTmV3SGVhZHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLnJwYy5jaGFpbi5zdWJzY3JpYmVOZXdIZWFkcygpLnBpcGUoc3dpdGNoTWFwKChoZWFkZXIpID0+IGdldEF1dGhvckRldGFpbHMoYXBpLCBoZWFkZXIpKSwgbWFwKChbaGVhZGVyLCB2YWxpZGF0b3JzLCBhdXRob3JdKSA9PiB7XG4gICAgICAgIGhlYWRlci5jcmVhdGVkQXRIYXNoID0gaGVhZGVyLmhhc2g7XG4gICAgICAgIHJldHVybiBjcmVhdGVIZWFkZXJFeHRlbmRlZChoZWFkZXIucmVnaXN0cnksIGhlYWRlciwgdmFsaWRhdG9ycywgYXV0aG9yKTtcbiAgICB9KSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBtZXJnZU1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbywgdW53cmFwQmxvY2tOdW1iZXIgfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja051bWJlckRlcml2ZShmbikge1xuICAgIHJldHVybiAoaW5zdGFuY2VJZCwgYXBpKSA9PiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGZuKGFwaSkucGlwZShtYXAodW53cmFwQmxvY2tOdW1iZXIpKSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBnZXRBdXRob3JEZXRhaWxzV2l0aEF0KGhlYWRlciwgcXVlcnlBdCkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBxdWVyeUF0LnNlc3Npb24/LnZhbGlkYXRvcnNcbiAgICAgICAgPyBxdWVyeUF0LnNlc3Npb24udmFsaWRhdG9ycygpXG4gICAgICAgIDogb2YobnVsbCk7XG4gICAgLy8gbmltYnVzIGNvbnNlbnN1cyBzdG9yZXMgdGhlIHNlc3Npb24ga2V5IG9mIHRoZSBibG9jayBhdXRob3IgaW4gaGVhZGVyIGxvZ3NcbiAgICBjb25zdCB7IGxvZ3M6IFtsb2ddIH0gPSBoZWFkZXIuZGlnZXN0O1xuICAgIGNvbnN0IGxvZ2dlZEF1dGhvciA9IChsb2cgJiYgKChsb2cuaXNDb25zZW5zdXMgJiYgbG9nLmFzQ29uc2Vuc3VzWzBdLmlzTmltYnVzICYmIGxvZy5hc0NvbnNlbnN1c1sxXSkgfHxcbiAgICAgICAgKGxvZy5pc1ByZVJ1bnRpbWUgJiYgbG9nLmFzUHJlUnVudGltZVswXS5pc05pbWJ1cyAmJiBsb2cuYXNQcmVSdW50aW1lWzFdKSkpO1xuICAgIGlmIChsb2dnZWRBdXRob3IpIHtcbiAgICAgICAgLy8gdXNlIHRoZSBhdXRob3IgbWFwcGluZyBwYWxsZXQsIGlmIGF2YWlsYWJsZSAoaWU6IG1vb25iZWFtLCBtb29ucml2ZXIpLCB0byBtYXAgc2Vzc2lvbiAobmltYnVzKSBrZXkgdG8gYXV0aG9yIChjb2xsYXRvci92YWxpZGF0b3IpIGtleVxuICAgICAgICBpZiAocXVlcnlBdFsnYXV0aG9yTWFwcGluZyddPy5bJ21hcHBpbmdXaXRoRGVwb3NpdCddKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgb2YoaGVhZGVyKSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICAgICAgICAgIHF1ZXJ5QXRbJ2F1dGhvck1hcHBpbmcnXVsnbWFwcGluZ1dpdGhEZXBvc2l0J10obG9nZ2VkQXV0aG9yKS5waXBlKG1hcCgobykgPT4gby51bndyYXBPcih7IGFjY291bnQ6IG51bGwgfSkuYWNjb3VudCkpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc2Vzc2lvbiBhbmQgcGFyYWNoYWluIHN0YWtpbmcgcGFsbGV0cywgaWYgYXZhaWxhYmxlIChpZTogbWFudGEsIGNhbGFtYXJpKSwgdG8gbWFwIHNlc3Npb24gKG5pbWJ1cykga2V5IHRvIGF1dGhvciAoY29sbGF0b3IpIGtleVxuICAgICAgICBpZiAocXVlcnlBdFsncGFyYWNoYWluU3Rha2luZyddPy5bJ3NlbGVjdGVkQ2FuZGlkYXRlcyddICYmIHF1ZXJ5QXQuc2Vzc2lvbj8ubmV4dEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ2dlZEhleCA9IGxvZ2dlZEF1dGhvci50b0hleCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIG9mKGhlYWRlciksXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgICAgICAgICBxdWVyeUF0WydwYXJhY2hhaW5TdGFraW5nJ11bJ3NlbGVjdGVkQ2FuZGlkYXRlcyddKCkucGlwZShtZXJnZU1hcCgoc2VsZWN0ZWRDYW5kaWRhdGVzKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICAgICAgb2Yoc2VsZWN0ZWRDYW5kaWRhdGVzKSxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlBdC5zZXNzaW9uLm5leHRLZXlzLm11bHRpKHNlbGVjdGVkQ2FuZGlkYXRlcykucGlwZShtYXAoKG5leHRLZXlzKSA9PiBuZXh0S2V5cy5maW5kSW5kZXgoKG8pID0+IG8udW53cmFwT3JEZWZhdWx0KCkubmltYnVzLnRvSGV4KCkgPT09IGxvZ2dlZEhleCkpKVxuICAgICAgICAgICAgICAgIF0pKSwgbWFwKChbc2VsZWN0ZWRDYW5kaWRhdGVzLCBpbmRleF0pID0+IGluZGV4ID09PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZENhbmRpZGF0ZXNbaW5kZXhdKSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vcm1hbCBvcGVyYXRpb24sIG5vbi1tYXBwaW5nXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZihoZWFkZXIpLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBvZihudWxsKVxuICAgIF0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhvckRldGFpbHMoYXBpLCBoZWFkZXIsIGJsb2NrSGFzaCkge1xuICAgIC8vIEZvciBvbi1jaGFpbiBzdGF0ZSwgd2UgbmVlZCB0byByZXRyaWV2ZSBpdCBhcyBwZXIgdGhlIHN0YXJ0XG4gICAgLy8gb2YgdGhlIGJsb2NrIGJlaW5nIGNvbnN0cnVjdGVkLCBpLmUuIHNlc3Npb24gdmFsaWRhdG9ycyB3b3VsZFxuICAgIC8vIGJlIGF0IHRoZSBwb2ludCBvZiB0aGUgYmxvY2sgY29uc3RydWN0aW9uLCBub3Qgd2hlbiBhbGwgb3BlcmF0aW9uc1xuICAgIC8vIGhhcyBiZWVuIHN1cHBsaWVkLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciBmb3IgdGhlIGZpcnN0IGJsb2NrIChubyBwYXJlbnRIYXNoIGF2YWlsYWJsZSksIHdlIHdvdWxkXG4gICAgLy8ganVzdCB1c2UgdGhlIGFzLWlzXG4gICAgcmV0dXJuIGFwaS5xdWVyeUF0KGhlYWRlci5wYXJlbnRIYXNoLmlzRW1wdHlcbiAgICAgICAgPyBibG9ja0hhc2ggfHwgaGVhZGVyLmhhc2hcbiAgICAgICAgOiBoZWFkZXIucGFyZW50SGFzaCkucGlwZShzd2l0Y2hNYXAoKHF1ZXJ5QXQpID0+IGdldEF1dGhvckRldGFpbHNXaXRoQXQoaGVhZGVyLCBxdWVyeUF0KSkpO1xufVxuIiwiaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoYXBpLCBzZWN0aW9uKSB7XG4gICAgY29uc3QgaW5zdGFuY2VzID0gYXBpLnJlZ2lzdHJ5LmdldE1vZHVsZUluc3RhbmNlcyhhcGkucnVudGltZVZlcnNpb24uc3BlY05hbWUsIHNlY3Rpb24pO1xuICAgIGNvbnN0IG5hbWUgPSBpbnN0YW5jZXM/Lmxlbmd0aFxuICAgICAgICA/IGluc3RhbmNlc1swXVxuICAgICAgICA6IHNlY3Rpb247XG4gICAgcmV0dXJuIGFwaS5xdWVyeVtuYW1lXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2VjdGlvbihzZWN0aW9uLCBmbikge1xuICAgIHJldHVybiAoaW5zdGFuY2VJZCwgYXBpKSA9PiBtZW1vKGluc3RhbmNlSWQsIGZuKGdldEluc3RhbmNlKGFwaSwgc2VjdGlvbiksIGFwaSwgaW5zdGFuY2VJZCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxNZXRob2QobWV0aG9kLCBlbXB0eSkge1xuICAgIHJldHVybiAoc2VjdGlvbikgPT4gd2l0aFNlY3Rpb24oc2VjdGlvbiwgKHF1ZXJ5KSA9PiAoKSA9PiBpc0Z1bmN0aW9uKHF1ZXJ5Py5bbWV0aG9kXSlcbiAgICAgICAgPyBxdWVyeVttZXRob2RdKClcbiAgICAgICAgOiBvZihlbXB0eSkpO1xufVxuIiwiaW1wb3J0IHsgY2FsbE1ldGhvZCB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5leHBvcnQgY29uc3QgbWVtYmVycyA9IC8qI19fUFVSRV9fKi8gY2FsbE1ldGhvZCgnbWVtYmVycycsIFtdKTtcbiIsImltcG9ydCB7IG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyB3aXRoU2VjdGlvbiB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcHJpbWUoc2VjdGlvbikge1xuICAgIHJldHVybiB3aXRoU2VjdGlvbihzZWN0aW9uLCAocXVlcnkpID0+ICgpID0+IGlzRnVuY3Rpb24ocXVlcnk/LnByaW1lKVxuICAgICAgICA/IHF1ZXJ5LnByaW1lKCkucGlwZShtYXAoKG8pID0+IG8udW53cmFwT3IobnVsbCkpKVxuICAgICAgICA6IG9mKG51bGwpKTtcbn1cbiIsImltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGZpcnN0T2JzZXJ2YWJsZSB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgY2FsbE1ldGhvZCwgd2l0aFNlY3Rpb24gfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuZnVuY3Rpb24gcGFyc2UoYXBpLCBbaGFzaGVzLCBwcm9wb3NhbHMsIHZvdGVzXSkge1xuICAgIHJldHVybiBwcm9wb3NhbHMubWFwKChvLCBpbmRleCkgPT4gKHtcbiAgICAgICAgaGFzaDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0hhc2gnLCBoYXNoZXNbaW5kZXhdKSxcbiAgICAgICAgcHJvcG9zYWw6IG8gJiYgby5pc1NvbWVcbiAgICAgICAgICAgID8gby51bndyYXAoKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB2b3Rlczogdm90ZXNbaW5kZXhdLnVud3JhcE9yKG51bGwpXG4gICAgfSkpO1xufVxuZnVuY3Rpb24gX3Byb3Bvc2Fsc0Zyb20oYXBpLCBxdWVyeSwgaGFzaGVzKSB7XG4gICAgcmV0dXJuIChpc0Z1bmN0aW9uKHF1ZXJ5Py5wcm9wb3NhbHMpICYmIGhhc2hlcy5sZW5ndGhcbiAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKGhhc2hlcyksXG4gICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBzaW1wbHkgYmUgYXBpLnF1ZXJ5W3NlY3Rpb25dLnByb3Bvc2FsT2YubXVsdGk8T3B0aW9uPFByb3Bvc2FsPj4oaGFzaGVzKSxcbiAgICAgICAgICAgIC8vIGhvd2V2ZXIgd2UgaGF2ZSBoYWQgY2FzZXMgb24gRWRnZXdhcmUgd2hlcmUgdGhlIGluZGljZXMgaGF2ZSBtb3ZlZCBhcm91bmQgYWZ0ZXIgYW5cbiAgICAgICAgICAgIC8vIHVwZ3JhZGUsIHdoaWNoIHJlc3VsdHMgaW4gaW52YWxpZCBvbi1jaGFpbiBkYXRhXG4gICAgICAgICAgICBxdWVyeS5wcm9wb3NhbE9mLm11bHRpKGhhc2hlcykucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKGhhc2hlcy5tYXAoKCkgPT4gbnVsbCkpKSksXG4gICAgICAgICAgICBxdWVyeS52b3RpbmcubXVsdGkoaGFzaGVzKVxuICAgICAgICBdKVxuICAgICAgICA6IG9mKFtbXSwgW10sIFtdXSkpLnBpcGUobWFwKChyKSA9PiBwYXJzZShhcGksIHIpKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcG9zYWxzKHNlY3Rpb24pIHtcbiAgICByZXR1cm4gd2l0aFNlY3Rpb24oc2VjdGlvbiwgKHF1ZXJ5KSA9PiAoKSA9PiBvZihpc0Z1bmN0aW9uKHF1ZXJ5Py5wcm9wb3NhbHMpKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvcG9zYWxzKHNlY3Rpb24pIHtcbiAgICByZXR1cm4gd2l0aFNlY3Rpb24oc2VjdGlvbiwgKHF1ZXJ5LCBhcGkpID0+ICgpID0+IGFwaS5kZXJpdmVbc2VjdGlvbl0ucHJvcG9zYWxIYXNoZXMoKS5waXBlKHN3aXRjaE1hcCgoYWxsKSA9PiBfcHJvcG9zYWxzRnJvbShhcGksIHF1ZXJ5LCBhbGwpKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByb3Bvc2FsKHNlY3Rpb24pIHtcbiAgICByZXR1cm4gd2l0aFNlY3Rpb24oc2VjdGlvbiwgKHF1ZXJ5LCBhcGkpID0+IChoYXNoKSA9PiBpc0Z1bmN0aW9uKHF1ZXJ5Py5wcm9wb3NhbHMpXG4gICAgICAgID8gZmlyc3RPYnNlcnZhYmxlKF9wcm9wb3NhbHNGcm9tKGFwaSwgcXVlcnksIFtoYXNoXSkpXG4gICAgICAgIDogb2YobnVsbCkpO1xufVxuZXhwb3J0IGNvbnN0IHByb3Bvc2FsQ291bnQgPSAvKiNfX1BVUkVfXyovIGNhbGxNZXRob2QoJ3Byb3Bvc2FsQ291bnQnLCBudWxsKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbEhhc2hlcyA9IC8qI19fUFVSRV9fKi8gY2FsbE1ldGhvZCgncHJvcG9zYWxzJywgW10pO1xuIiwiaW1wb3J0IHsgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gcXVlcnlDb25zdGFudHMoYXBpKSB7XG4gICAgcmV0dXJuIG9mKFtcbiAgICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgICBhcGkuY29uc3RzLmNvbnRyYWN0c1snY2FsbEJhc2VGZWUnXSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScpLFxuICAgICAgICBhcGkuY29uc3RzLmNvbnRyYWN0c1snY29udHJhY3RGZWUnXSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScpLFxuICAgICAgICBhcGkuY29uc3RzLmNvbnRyYWN0c1snY3JlYXRpb25GZWUnXSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScpLFxuICAgICAgICBhcGkuY29uc3RzLmNvbnRyYWN0c1sndHJhbnNhY3Rpb25CYXNlRmVlJ10gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSxcbiAgICAgICAgYXBpLmNvbnN0cy5jb250cmFjdHNbJ3RyYW5zYWN0aW9uQnl0ZUZlZSddIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyksXG4gICAgICAgIGFwaS5jb25zdHMuY29udHJhY3RzWyd0cmFuc2ZlckZlZSddIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyksXG4gICAgICAgIC8vIGN1cnJlbnRcbiAgICAgICAgYXBpLmNvbnN0cy5jb250cmFjdHNbJ3JlbnRCeXRlRmVlJ10gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSxcbiAgICAgICAgYXBpLmNvbnN0cy5jb250cmFjdHNbJ3JlbnREZXBvc2l0T2Zmc2V0J10gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSxcbiAgICAgICAgYXBpLmNvbnN0cy5jb250cmFjdHNbJ3N1cmNoYXJnZVJld2FyZCddIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyksXG4gICAgICAgIGFwaS5jb25zdHMuY29udHJhY3RzWyd0b21ic3RvbmVEZXBvc2l0J10gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKVxuICAgIF0pO1xufVxuLyoqXG4gKiBAbmFtZSBmZWVzXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY29tYmluZWQgcmVzdWx0cyBvZiB0aGUgcXVlcmllcyBmb3JcbiAqIGFsbCByZWxldmFudCBjb250cmFjdCBmZWVzIGFzIGRlY2xhcmVkIGluIHRoZSBzdWJzdHJhdGUgY2hhaW4gc3BlYy5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogYXBpLmRlcml2ZS5jb250cmFjdHMuZmVlcygoW2NyZWF0aW9uRmVlLCB0cmFuc2ZlckZlZV0pID0+IHtcbiAqICAgY29uc29sZS5sb2coYFRoZSBmZWUgZm9yIGNyZWF0aW5nIGEgbmV3IGNvbnRyYWN0IG9uIHRoaXMgY2hhaW4gaXMgJHtjcmVhdGlvbkZlZX0gdW5pdHMuIFRoZSBmZWUgcmVxdWlyZWQgdG8gY2FsbCB0aGlzIGNvbnRyYWN0IGlzICR7dHJhbnNmZXJGZWV9IHVuaXRzLmApO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZlZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gcXVlcnlDb25zdGFudHMoYXBpKS5waXBlKG1hcCgoW2NhbGxCYXNlRmVlLCBjb250cmFjdEZlZSwgY3JlYXRpb25GZWUsIHRyYW5zYWN0aW9uQmFzZUZlZSwgdHJhbnNhY3Rpb25CeXRlRmVlLCB0cmFuc2ZlckZlZSwgcmVudEJ5dGVGZWUsIHJlbnREZXBvc2l0T2Zmc2V0LCBzdXJjaGFyZ2VSZXdhcmQsIHRvbWJzdG9uZURlcG9zaXRdKSA9PiAoe1xuICAgICAgICAgICAgY2FsbEJhc2VGZWUsXG4gICAgICAgICAgICBjb250cmFjdEZlZSxcbiAgICAgICAgICAgIGNyZWF0aW9uRmVlLFxuICAgICAgICAgICAgcmVudEJ5dGVGZWUsXG4gICAgICAgICAgICByZW50RGVwb3NpdE9mZnNldCxcbiAgICAgICAgICAgIHN1cmNoYXJnZVJld2FyZCxcbiAgICAgICAgICAgIHRvbWJzdG9uZURlcG9zaXQsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkJhc2VGZWUsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkJ5dGVGZWUsXG4gICAgICAgICAgICB0cmFuc2ZlckZlZVxuICAgICAgICB9KSkpO1xuICAgIH0pO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9mZWVzLmpzJztcbiIsImltcG9ydCB7IGhhc1Byb3Bvc2FscyBhcyBjb2xsZWN0aXZlSGFzUHJvcG9zYWxzLCBtZW1iZXJzIGFzIGNvbGxlY3RpdmVNZW1iZXJzLCBwcmltZSBhcyBjb2xsZWN0aXZlUHJpbWUsIHByb3Bvc2FsIGFzIGNvbGxlY3RpdmVQcm9wb3NhbCwgcHJvcG9zYWxDb3VudCBhcyBjb2xsZWN0aXZlUHJvcG9zYWxDb3VudCwgcHJvcG9zYWxIYXNoZXMgYXMgY29sbGVjdGl2ZVByb3Bvc2FsSGFzaGVzLCBwcm9wb3NhbHMgYXMgY29sbGVjdGl2ZVByb3Bvc2FscyB9IGZyb20gJy4uL2NvbGxlY3RpdmUvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi92b3Rlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZvdGVzT2YuanMnO1xuZXhwb3J0IGNvbnN0IG1lbWJlcnMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVNZW1iZXJzKCdjb3VuY2lsJyk7XG5leHBvcnQgY29uc3QgaGFzUHJvcG9zYWxzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlSGFzUHJvcG9zYWxzKCdjb3VuY2lsJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWwgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbCgnY291bmNpbCcpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FsQ291bnQgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbENvdW50KCdjb3VuY2lsJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxIYXNoZXMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcygnY291bmNpbCcpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FscyA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByb3Bvc2FscygnY291bmNpbCcpO1xuZXhwb3J0IGNvbnN0IHByaW1lID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJpbWUoJ2NvdW5jaWwnKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIGlzVm90ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZnVuY3Rpb24gcmV0cmlldmVTdGFrZU9mKGVsZWN0aW9ucykge1xuICAgIHJldHVybiBlbGVjdGlvbnNbJ3N0YWtlT2YnXS5lbnRyaWVzKCkucGlwZShtYXAoKGVudHJpZXMpID0+IGVudHJpZXMubWFwKChbeyBhcmdzOiBbYWNjb3VudElkXSB9LCBzdGFrZV0pID0+IFthY2NvdW50SWQsIHN0YWtlXSkpKTtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlVm90ZU9mKGVsZWN0aW9ucykge1xuICAgIHJldHVybiBlbGVjdGlvbnNbJ3ZvdGVzT2YnXS5lbnRyaWVzKCkucGlwZShtYXAoKGVudHJpZXMpID0+IGVudHJpZXMubWFwKChbeyBhcmdzOiBbYWNjb3VudElkXSB9LCB2b3Rlc10pID0+IFthY2NvdW50SWQsIHZvdGVzXSkpKTtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlUHJldihhcGksIGVsZWN0aW9ucykge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgcmV0cmlldmVTdGFrZU9mKGVsZWN0aW9ucyksXG4gICAgICAgIHJldHJpZXZlVm90ZU9mKGVsZWN0aW9ucylcbiAgICBdKS5waXBlKG1hcCgoW3N0YWtlcywgdm90ZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICB2b3Rlcy5mb3JFYWNoKChbdm90ZXIsIHZvdGVzXSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW3ZvdGVyLCB7IHN0YWtlOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScpLCB2b3RlcyB9XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdGFrZXMuZm9yRWFjaCgoW3N0YWtlciwgc3Rha2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHJlc3VsdC5maW5kKChbdm90ZXJdKSA9PiB2b3Rlci5lcShzdGFrZXIpKTtcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5WzFdLnN0YWtlID0gc3Rha2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChbc3Rha2VyLCB7IHN0YWtlLCB2b3RlczogW10gfV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSk7XG59XG5mdW5jdGlvbiByZXRyaWV2ZUN1cnJlbnQoZWxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIGVsZWN0aW9ucy52b3RpbmcuZW50cmllcygpLnBpcGUobWFwKChlbnRyaWVzKSA9PiBlbnRyaWVzLm1hcCgoW3sgYXJnczogW2FjY291bnRJZF0gfSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgaXNWb3Rlcih2YWx1ZSlcbiAgICAgICAgICAgID8geyBzdGFrZTogdmFsdWUuc3Rha2UsIHZvdGVzOiB2YWx1ZS52b3RlcyB9XG4gICAgICAgICAgICA6IHsgc3Rha2U6IHZhbHVlWzBdLCB2b3RlczogdmFsdWVbMV0gfVxuICAgIF0pKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdm90ZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgY29uc3QgZWxlY3Rpb25zID0gYXBpLnF1ZXJ5LmVsZWN0aW9ucyB8fCBhcGkucXVlcnlbJ3BocmFnbWVuRWxlY3Rpb24nXSB8fCBhcGkucXVlcnlbJ2VsZWN0aW9uc1BocmFnbWVuJ107XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gZWxlY3Rpb25zXG4gICAgICAgID8gZWxlY3Rpb25zWydzdGFrZU9mJ11cbiAgICAgICAgICAgID8gcmV0cmlldmVQcmV2KGFwaSwgZWxlY3Rpb25zKVxuICAgICAgICAgICAgOiByZXRyaWV2ZUN1cnJlbnQoZWxlY3Rpb25zKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCBmdW5jdGlvbiB2b3Rlc09mKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWQpID0+IGFwaS5kZXJpdmUuY291bmNpbC52b3RlcygpLnBpcGUobWFwKCh2b3RlcykgPT4gKHZvdGVzLmZpbmQoKFtmcm9tXSkgPT4gZnJvbS5lcShhY2NvdW50SWQpKSB8fFxuICAgICAgICBbbnVsbCwgeyBzdGFrZTogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSwgdm90ZXM6IFtdIH1dKVsxXSkpKTtcbn1cbiIsImltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdThhQ29uY2F0LCB1OGFUb0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGJsYWtlMkFzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIGNyZWF0ZUNoaWxkS2V5KGluZm8pIHtcbiAgICByZXR1cm4gdThhVG9IZXgodThhQ29uY2F0KCc6Y2hpbGRfc3RvcmFnZTpkZWZhdWx0OicsIGJsYWtlMkFzVThhKHU4YUNvbmNhdCgnY3Jvd2Rsb2FuJywgKGluZm8uZnVuZEluZGV4IHx8IGluZm8udHJpZUluZGV4KS50b1U4YSgpKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZEtleShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAocGFyYUlkKSA9PiBhcGkucXVlcnlbJ2Nyb3dkbG9hbiddWydmdW5kcyddKHBhcmFJZCkucGlwZShtYXAoKG9wdEluZm8pID0+IG9wdEluZm8uaXNTb21lXG4gICAgICAgID8gY3JlYXRlQ2hpbGRLZXkob3B0SW5mby51bndyYXAoKSlcbiAgICAgICAgOiBudWxsKSkpO1xufVxuIiwiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgbWFwLCBvZiwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXJyYXlGbGF0dGVuLCBpc0Z1bmN0aW9uLCBuZXh0VGljayB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGV4dHJhY3RDb250cmlidXRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5jb25zdCBQQUdFX1NJWkVfSyA9IDEwMDA7IC8vIGxpbWl0IGFsaWduZWQgd2l0aCB0aGUgMWsgb24gdGhlIG5vZGUgKHRyaWUgbG9va3VwcyBhcmUgaGVhdnkpXG5mdW5jdGlvbiBfZ2V0VXBkYXRlcyhhcGksIHBhcmFJZCkge1xuICAgIGxldCBhZGRlZCA9IFtdO1xuICAgIGxldCByZW1vdmVkID0gW107XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5zeXN0ZW0uZXZlbnRzKCkucGlwZShzd2l0Y2hNYXAoKGV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gZXh0cmFjdENvbnRyaWJ1dGVkKHBhcmFJZCwgZXZlbnRzKTtcbiAgICAgICAgaWYgKGNoYW5nZXMuYWRkZWQubGVuZ3RoIHx8IGNoYW5nZXMucmVtb3ZlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZGVkID0gYWRkZWQuY29uY2F0KC4uLmNoYW5nZXMuYWRkZWQpO1xuICAgICAgICAgICAgcmVtb3ZlZCA9IHJlbW92ZWQuY29uY2F0KC4uLmNoYW5nZXMucmVtb3ZlZCk7XG4gICAgICAgICAgICByZXR1cm4gb2YoeyBhZGRlZCwgYWRkZWREZWx0YTogY2hhbmdlcy5hZGRlZCwgYmxvY2tIYXNoOiBldmVudHMuY3JlYXRlZEF0SGFzaD8udG9IZXgoKSB8fCAnLScsIHJlbW92ZWQsIHJlbW92ZWREZWx0YTogY2hhbmdlcy5yZW1vdmVkIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSwgc3RhcnRXaXRoKHsgYWRkZWQsIGFkZGVkRGVsdGE6IFtdLCBibG9ja0hhc2g6ICctJywgcmVtb3ZlZCwgcmVtb3ZlZERlbHRhOiBbXSB9KSk7XG59XG5mdW5jdGlvbiBfZXZlbnRUcmlnZ2VyQWxsKGFwaSwgcGFyYUlkKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5zeXN0ZW0uZXZlbnRzKCkucGlwZShzd2l0Y2hNYXAoKGV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGV2ZW50cy5maWx0ZXIoKHsgZXZlbnQ6IHsgZGF0YTogW2V2ZW50UGFyYUlkXSwgbWV0aG9kLCBzZWN0aW9uIH0gfSkgPT4gc2VjdGlvbiA9PT0gJ2Nyb3dkbG9hbicgJiZcbiAgICAgICAgICAgIFsnQWxsUmVmdW5kZWQnLCAnRGlzc29sdmVkJywgJ1BhcnRpYWxseVJlZnVuZGVkJ10uaW5jbHVkZXMobWV0aG9kKSAmJlxuICAgICAgICAgICAgZXZlbnRQYXJhSWQuZXEocGFyYUlkKSk7XG4gICAgICAgIHJldHVybiBpdGVtcy5sZW5ndGhcbiAgICAgICAgICAgID8gb2YoZXZlbnRzLmNyZWF0ZWRBdEhhc2g/LnRvSGV4KCkgfHwgJy0nKVxuICAgICAgICAgICAgOiBFTVBUWTtcbiAgICB9KSwgc3RhcnRXaXRoKCctJykpO1xufVxuZnVuY3Rpb24gX2dldEtleXNQYWdlZChhcGksIGNoaWxkS2V5KSB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcbiAgICByZXR1cm4gc3ViamVjdC5waXBlKHN3aXRjaE1hcCgoc3RhcnRLZXkpID0+IGFwaS5ycGMuY2hpbGRzdGF0ZS5nZXRLZXlzUGFnZWQoY2hpbGRLZXksICcweCcsIFBBR0VfU0laRV9LLCBzdGFydEtleSkpLCB0YXAoKGtleXMpID0+IHtcbiAgICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAga2V5cy5sZW5ndGggPT09IFBBR0VfU0laRV9LXG4gICAgICAgICAgICAgICAgPyBzdWJqZWN0Lm5leHQoa2V5c1tQQUdFX1NJWkVfSyAtIDFdLnRvSGV4KCkpXG4gICAgICAgICAgICAgICAgOiBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pLCB0b0FycmF5KCksIC8vIHRvQXJyYXkgc2luY2Ugd2Ugd2FudCB0byBzdGFydFN1YmplY3QgdG8gYmUgY29tcGxldGVkXG4gICAgbWFwKChrZXlBcnIpID0+IGFycmF5RmxhdHRlbihrZXlBcnIpKSk7XG59XG5mdW5jdGlvbiBfZ2V0QWxsKGFwaSwgcGFyYUlkLCBjaGlsZEtleSkge1xuICAgIHJldHVybiBfZXZlbnRUcmlnZ2VyQWxsKGFwaSwgcGFyYUlkKS5waXBlKHN3aXRjaE1hcCgoKSA9PiBpc0Z1bmN0aW9uKGFwaS5ycGMuY2hpbGRzdGF0ZS5nZXRLZXlzUGFnZWQpXG4gICAgICAgID8gX2dldEtleXNQYWdlZChhcGksIGNoaWxkS2V5KVxuICAgICAgICA6IGFwaS5ycGMuY2hpbGRzdGF0ZS5nZXRLZXlzKGNoaWxkS2V5LCAnMHgnKSksIG1hcCgoa2V5cykgPT4ga2V5cy5tYXAoKGspID0+IGsudG9IZXgoKSkpKTtcbn1cbmZ1bmN0aW9uIF9jb250cmlidXRpb25zKGFwaSwgcGFyYUlkLCBjaGlsZEtleSkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgX2dldEFsbChhcGksIHBhcmFJZCwgY2hpbGRLZXkpLFxuICAgICAgICBfZ2V0VXBkYXRlcyhhcGksIHBhcmFJZClcbiAgICBdKS5waXBlKG1hcCgoW2tleXMsIHsgYWRkZWQsIGJsb2NrSGFzaCwgcmVtb3ZlZCB9XSkgPT4ge1xuICAgICAgICBjb25zdCBjb250cmlidXRvcnNNYXAgPSB7fTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICBjb250cmlidXRvcnNNYXBba10gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgYWRkZWQuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgY29udHJpYnV0b3JzTWFwW2tdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbW92ZWQuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGNvbnRyaWJ1dG9yc01hcFtrXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBibG9ja0hhc2gsXG4gICAgICAgICAgICBjb250cmlidXRvcnNIZXg6IE9iamVjdC5rZXlzKGNvbnRyaWJ1dG9yc01hcClcbiAgICAgICAgfTtcbiAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29udHJpYnV0aW9ucyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAocGFyYUlkKSA9PiBhcGkuZGVyaXZlLmNyb3dkbG9hbi5jaGlsZEtleShwYXJhSWQpLnBpcGUoc3dpdGNoTWFwKChjaGlsZEtleSkgPT4gY2hpbGRLZXlcbiAgICAgICAgPyBfY29udHJpYnV0aW9ucyhhcGksIHBhcmFJZCwgY2hpbGRLZXkpXG4gICAgICAgIDogb2YoeyBibG9ja0hhc2g6ICctJywgY29udHJpYnV0b3JzSGV4OiBbXSB9KSkpKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY2hpbGRLZXkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3duQ29udHJpYnV0aW9ucy5qcyc7XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgbWFwLCBvZiwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGV4dHJhY3RDb250cmlidXRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBfZ2V0VmFsdWVzKGFwaSwgY2hpbGRLZXksIGtleXMpIHtcbiAgICAvLyBXZSBhY3R1YWxseSB3b3VsZCBsb3ZlIHRvIHVzZSBtdWx0aS1rZXlzIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9pc3N1ZXMvOTIwM1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGtleXMubWFwKChrKSA9PiBhcGkucnBjLmNoaWxkc3RhdGUuZ2V0U3RvcmFnZShjaGlsZEtleSwgaykpKS5waXBlKG1hcCgodmFsdWVzKSA9PiB2YWx1ZXNcbiAgICAgICAgLm1hcCgodikgPT4gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ09wdGlvbjxTdG9yYWdlRGF0YT4nLCB2KSlcbiAgICAgICAgLm1hcCgobykgPT4gby5pc1NvbWVcbiAgICAgICAgPyBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScsIG8udW53cmFwKCkpXG4gICAgICAgIDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKSlcbiAgICAgICAgLnJlZHVjZSgoYWxsLCBiLCBpbmRleCkgPT4gb2JqZWN0U3ByZWFkKGFsbCwgeyBba2V5c1tpbmRleF1dOiBiIH0pLCB7fSkpKTtcbn1cbmZ1bmN0aW9uIF93YXRjaE93bkNoYW5nZXMoYXBpLCBwYXJhSWQsIGNoaWxka2V5LCBrZXlzKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5zeXN0ZW0uZXZlbnRzKCkucGlwZShzd2l0Y2hNYXAoKGV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gZXh0cmFjdENvbnRyaWJ1dGVkKHBhcmFJZCwgZXZlbnRzKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBrZXlzLmZpbHRlcigoaykgPT4gY2hhbmdlcy5hZGRlZC5pbmNsdWRlcyhrKSB8fFxuICAgICAgICAgICAgY2hhbmdlcy5yZW1vdmVkLmluY2x1ZGVzKGspKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkLmxlbmd0aFxuICAgICAgICAgICAgPyBfZ2V0VmFsdWVzKGFwaSwgY2hpbGRrZXksIGZpbHRlcmVkKVxuICAgICAgICAgICAgOiBFTVBUWTtcbiAgICB9KSwgc3RhcnRXaXRoKHt9KSk7XG59XG5mdW5jdGlvbiBfY29udHJpYnV0aW9ucyhhcGksIHBhcmFJZCwgY2hpbGRLZXksIGtleXMpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIF9nZXRWYWx1ZXMoYXBpLCBjaGlsZEtleSwga2V5cyksXG4gICAgICAgIF93YXRjaE93bkNoYW5nZXMoYXBpLCBwYXJhSWQsIGNoaWxkS2V5LCBrZXlzKVxuICAgIF0pLnBpcGUobWFwKChbYWxsLCBsYXRlc3RdKSA9PiBvYmplY3RTcHJlYWQoe30sIGFsbCwgbGF0ZXN0KSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG93bkNvbnRyaWJ1dGlvbnMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKHBhcmFJZCwga2V5cykgPT4gYXBpLmRlcml2ZS5jcm93ZGxvYW4uY2hpbGRLZXkocGFyYUlkKS5waXBlKHN3aXRjaE1hcCgoY2hpbGRLZXkpID0+IGNoaWxkS2V5ICYmIGtleXMubGVuZ3RoXG4gICAgICAgID8gX2NvbnRyaWJ1dGlvbnMoYXBpLCBwYXJhSWQsIGNoaWxkS2V5LCBrZXlzKVxuICAgICAgICA6IG9mKHt9KSkpKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q29udHJpYnV0ZWQocGFyYUlkLCBldmVudHMpIHtcbiAgICBjb25zdCBhZGRlZCA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWQgPSBbXTtcbiAgICByZXR1cm4gZXZlbnRzXG4gICAgICAgIC5maWx0ZXIoKHsgZXZlbnQ6IHsgZGF0YTogWywgZXZlbnRQYXJhSWRdLCBtZXRob2QsIHNlY3Rpb24gfSB9KSA9PiBzZWN0aW9uID09PSAnY3Jvd2Rsb2FuJyAmJlxuICAgICAgICBbJ0NvbnRyaWJ1dGVkJywgJ1dpdGhkcmV3J10uaW5jbHVkZXMobWV0aG9kKSAmJlxuICAgICAgICBldmVudFBhcmFJZC5lcShwYXJhSWQpKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIHsgZXZlbnQ6IHsgZGF0YTogW2FjY291bnRJZF0sIG1ldGhvZCB9IH0pID0+IHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NvbnRyaWJ1dGVkJykge1xuICAgICAgICAgICAgcmVzdWx0LmFkZGVkLnB1c2goYWNjb3VudElkLnRvSGV4KCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnJlbW92ZWQucHVzaChhY2NvdW50SWQudG9IZXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7IGFkZGVkLCBibG9ja0hhc2g6IGV2ZW50cy5jcmVhdGVkQXRIYXNoPy50b0hleCgpIHx8ICctJywgcmVtb3ZlZCB9KTtcbn1cbiIsImltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW51bSB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBvYmplY3RTcHJlYWQsIHN0cmluZ1RvSGV4IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0SW1hZ2VIYXNoQm91bmRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5jb25zdCBERU1PQ1JBQ1lfSUQgPSBzdHJpbmdUb0hleCgnZGVtb2NyYWMnKTtcbmZ1bmN0aW9uIGlzTWF5YmVIYXNoZWRPckJvdW5kZWQoY2FsbCkge1xuICAgIC8vIGNoZWNrIGZvciBlbnVtXG4gICAgcmV0dXJuIGNhbGwgaW5zdGFuY2VvZiBFbnVtO1xufVxuZnVuY3Rpb24gaXNCb3VuZGVkKGNhbGwpIHtcbiAgICAvLyBjaGVjayBmb3IgdHlwZVxuICAgIHJldHVybiBjYWxsLmlzSW5saW5lIHx8IGNhbGwuaXNMZWdhY3kgfHwgY2FsbC5pc0xvb2t1cDtcbn1cbmZ1bmN0aW9uIHF1ZXJ5UXVldWUoYXBpKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5kZW1vY3JhY3lbJ2Rpc3BhdGNoUXVldWUnXSgpLnBpcGUoc3dpdGNoTWFwKChkaXNwYXRjaGVzKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2YoZGlzcGF0Y2hlcyksXG4gICAgICAgIGFwaS5kZXJpdmUuZGVtb2NyYWN5LnByZWltYWdlcyhkaXNwYXRjaGVzLm1hcCgoWywgaGFzaF0pID0+IGhhc2gpKVxuICAgIF0pKSwgbWFwKChbZGlzcGF0Y2hlcywgaW1hZ2VzXSkgPT4gZGlzcGF0Y2hlcy5tYXAoKFthdCwgaW1hZ2VIYXNoLCBpbmRleF0sIGRpc3BhdGNoSW5kZXgpID0+ICh7XG4gICAgICAgIGF0LFxuICAgICAgICBpbWFnZTogaW1hZ2VzW2Rpc3BhdGNoSW5kZXhdLFxuICAgICAgICBpbWFnZUhhc2g6IGdldEltYWdlSGFzaEJvdW5kZWQoaW1hZ2VIYXNoKSxcbiAgICAgICAgaW5kZXhcbiAgICB9KSkpKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlckVudHJpZXMoYXBpKSB7XG4gICAgLy8gV2UgZG9uJ3QgZ2V0IGVudHJpZXMsIGJ1dCByYXRoZXIgd2UgZ2V0IHRoZSBrZXlzICh0cmlnZ2VyZWQgdmlhIGZpbmlzaGVkIHJlZmVyZW5kdW1zKSBhbmRcbiAgICAvLyB0aGUgc3Vic2NyaWJlIHRvIHRob3NlIGtleXMgLSB0aGlzIG1lYW5zIHdlIHBpY2t1cCB3aGVuIHRoZSBzY2hlZHVsZXJzIGFjdHVhbGx5IGV4ZWN1dGVzXG4gICAgLy8gYXQgYSBibG9jaywgdGhlIGVudHJ5IGZvciB0aGF0IGJsb2NrIHdpbGwgYmVjb21lIGVtcHR5XG4gICAgcmV0dXJuIGFwaS5kZXJpdmUuZGVtb2NyYWN5LnJlZmVyZW5kdW1zRmluaXNoZWQoKS5waXBlKHN3aXRjaE1hcCgoKSA9PiBhcGkucXVlcnkuc2NoZWR1bGVyLmFnZW5kYS5rZXlzKCkpLCBzd2l0Y2hNYXAoKGtleXMpID0+IHtcbiAgICAgICAgY29uc3QgYmxvY2tOdW1iZXJzID0ga2V5cy5tYXAoKHsgYXJnczogW2Jsb2NrTnVtYmVyXSB9KSA9PiBibG9ja051bWJlcik7XG4gICAgICAgIHJldHVybiBibG9ja051bWJlcnMubGVuZ3RoXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIG9mKGJsb2NrTnVtYmVycyksXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgc2ltcGx5IGJlIGFwaS5xdWVyeS5zY2hlZHVsZXIuYWdlbmRhLm11bHRpLFxuICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIgd2UgaGF2ZSBoYWQgY2FzZXMgb24gRGFyd2luaWEgd2hlcmUgdGhlIGluZGljZXMgaGF2ZSBtb3ZlZCBhcm91bmQgYWZ0ZXIgYW5cbiAgICAgICAgICAgICAgICAvLyB1cGdyYWRlLCB3aGljaCByZXN1bHRzIGluIGludmFsaWQgb24tY2hhaW4gZGF0YVxuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5zY2hlZHVsZXIuYWdlbmRhLm11bHRpKGJsb2NrTnVtYmVycykucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKGJsb2NrTnVtYmVycy5tYXAoKCkgPT4gW10pKSkpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBvZihbW10sIFtdXSk7XG4gICAgfSkpO1xufVxuZnVuY3Rpb24gcXVlcnlTY2hlZHVsZXIoYXBpKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlckVudHJpZXMoYXBpKS5waXBlKHN3aXRjaE1hcCgoW2Jsb2NrTnVtYmVycywgYWdlbmRhc10pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGJsb2NrTnVtYmVycy5mb3JFYWNoKChhdCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIChhZ2VuZGFzW2luZGV4XSB8fCBbXSkuZmlsdGVyKChvKSA9PiBvLmlzU29tZSkuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVkdWxlZCA9IG8udW53cmFwKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVkdWxlZC5tYXliZUlkLmlzU29tZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHNjaGVkdWxlZC5tYXliZUlkLnVud3JhcCgpLnRvSGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZC5zdGFydHNXaXRoKERFTU9DUkFDWV9JRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlSGFzaCA9IGlzTWF5YmVIYXNoZWRPckJvdW5kZWQoc2NoZWR1bGVkLmNhbGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpc0JvdW5kZWQoc2NoZWR1bGVkLmNhbGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0SW1hZ2VIYXNoQm91bmRlZChzY2hlZHVsZWQuY2FsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzY2hlZHVsZWQuY2FsbC5pc0hhc2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2NoZWR1bGVkLmNhbGwuYXNIYXNoLnRvSGV4KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2NoZWR1bGVkLmNhbGwuYXNWYWx1ZS5hcmdzWzBdLnRvSGV4KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNjaGVkdWxlZC5jYWxsLmFyZ3NbMF0udG9IZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgYXQsIGltYWdlSGFzaCwgaW5kZXg6IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCcodTY0LCBSZWZlcmVuZHVtSW5kZXgpJywgaWQpWzFdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBvZihyZXN1bHQpLFxuICAgICAgICAgICAgcmVzdWx0Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYXBpLmRlcml2ZS5kZW1vY3JhY3kucHJlaW1hZ2VzKHJlc3VsdC5tYXAoKHsgaW1hZ2VIYXNoIH0pID0+IGltYWdlSGFzaCkpXG4gICAgICAgICAgICAgICAgOiBvZihbXSlcbiAgICAgICAgXSk7XG4gICAgfSksIG1hcCgoW2luZm9zLCBpbWFnZXNdKSA9PiBpbmZvcy5tYXAoKGluZm8sIGluZGV4KSA9PiBvYmplY3RTcHJlYWQoeyBpbWFnZTogaW1hZ2VzW2luZGV4XSB9LCBpbmZvKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaFF1ZXVlKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGlzRnVuY3Rpb24oYXBpLnF1ZXJ5LnNjaGVkdWxlcj8uYWdlbmRhKVxuICAgICAgICA/IHF1ZXJ5U2NoZWR1bGVyKGFwaSlcbiAgICAgICAgOiBhcGkucXVlcnkuZGVtb2NyYWN5WydkaXNwYXRjaFF1ZXVlJ11cbiAgICAgICAgICAgID8gcXVlcnlRdWV1ZShhcGkpXG4gICAgICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL2Rpc3BhdGNoUXVldWUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2Nrcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL25leHRFeHRlcm5hbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ByZWltYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3Bvc2Fscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5kdW1JZHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWZlcmVuZHVtcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5kdW1zQWN0aXZlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmZXJlbmR1bXNGaW5pc2hlZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5kdW1zSW5mby5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NxcnRFbGVjdG9yYXRlLmpzJztcbiIsImltcG9ydCB7IG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQk5fWkVSTywgaXNVbmRlZmluZWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5jb25zdCBMT0NLVVBTID0gWzAsIDEsIDIsIDQsIDgsIDE2LCAzMl07XG5mdW5jdGlvbiBwYXJzZUVuZChhcGksIHZvdGUsIHsgYXBwcm92ZWQsIGVuZCB9KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgZW5kLFxuICAgICAgICAoYXBwcm92ZWQuaXNUcnVlICYmIHZvdGUuaXNBeWUpIHx8IChhcHByb3ZlZC5pc0ZhbHNlICYmIHZvdGUuaXNOYXkpXG4gICAgICAgICAgICA/IGVuZC5hZGQoKGFwaS5jb25zdHMuZGVtb2NyYWN5LnZvdGVMb2NraW5nUGVyaW9kIHx8XG4gICAgICAgICAgICAgICAgYXBpLmNvbnN0cy5kZW1vY3JhY3kuZW5hY3RtZW50UGVyaW9kKS5tdWxuKExPQ0tVUFNbdm90ZS5jb252aWN0aW9uLmluZGV4XSkpXG4gICAgICAgICAgICA6IEJOX1pFUk9cbiAgICBdO1xufVxuZnVuY3Rpb24gcGFyc2VMb2NrKGFwaSwgW3JlZmVyZW5kdW1JZCwgYWNjb3VudFZvdGVdLCByZWZlcmVuZHVtKSB7XG4gICAgY29uc3QgeyBiYWxhbmNlLCB2b3RlIH0gPSBhY2NvdW50Vm90ZS5hc1N0YW5kYXJkO1xuICAgIGNvbnN0IFtyZWZlcmVuZHVtRW5kLCB1bmxvY2tBdF0gPSByZWZlcmVuZHVtLmlzRmluaXNoZWRcbiAgICAgICAgPyBwYXJzZUVuZChhcGksIHZvdGUsIHJlZmVyZW5kdW0uYXNGaW5pc2hlZClcbiAgICAgICAgOiBbQk5fWkVSTywgQk5fWkVST107XG4gICAgcmV0dXJuIHsgYmFsYW5jZSwgaXNEZWxlZ2F0ZWQ6IGZhbHNlLCBpc0ZpbmlzaGVkOiByZWZlcmVuZHVtLmlzRmluaXNoZWQsIHJlZmVyZW5kdW1FbmQsIHJlZmVyZW5kdW1JZCwgdW5sb2NrQXQsIHZvdGUgfTtcbn1cbmZ1bmN0aW9uIGRlbGVnYXRlTG9ja3MoYXBpLCB7IGJhbGFuY2UsIGNvbnZpY3Rpb24sIHRhcmdldCB9KSB7XG4gICAgcmV0dXJuIGFwaS5kZXJpdmUuZGVtb2NyYWN5LmxvY2tzKHRhcmdldCkucGlwZShtYXAoKGF2YWlsYWJsZSkgPT4gYXZhaWxhYmxlLm1hcCgoeyBpc0ZpbmlzaGVkLCByZWZlcmVuZHVtRW5kLCByZWZlcmVuZHVtSWQsIHVubG9ja0F0LCB2b3RlIH0pID0+ICh7XG4gICAgICAgIGJhbGFuY2UsXG4gICAgICAgIGlzRGVsZWdhdGVkOiB0cnVlLFxuICAgICAgICBpc0ZpbmlzaGVkLFxuICAgICAgICByZWZlcmVuZHVtRW5kLFxuICAgICAgICByZWZlcmVuZHVtSWQsXG4gICAgICAgIHVubG9ja0F0OiB1bmxvY2tBdC5pc1plcm8oKVxuICAgICAgICAgICAgPyB1bmxvY2tBdFxuICAgICAgICAgICAgOiByZWZlcmVuZHVtRW5kLmFkZCgoYXBpLmNvbnN0cy5kZW1vY3JhY3kudm90ZUxvY2tpbmdQZXJpb2QgfHxcbiAgICAgICAgICAgICAgICBhcGkuY29uc3RzLmRlbW9jcmFjeS5lbmFjdG1lbnRQZXJpb2QpLm11bG4oTE9DS1VQU1tjb252aWN0aW9uLmluZGV4XSkpLFxuICAgICAgICB2b3RlOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVm90ZScsIHsgYXllOiB2b3RlLmlzQXllLCBjb252aWN0aW9uIH0pXG4gICAgfSkpKSk7XG59XG5mdW5jdGlvbiBkaXJlY3RMb2NrcyhhcGksIHsgdm90ZXMgfSkge1xuICAgIGlmICghdm90ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfVxuICAgIHJldHVybiBhcGkucXVlcnkuZGVtb2NyYWN5LnJlZmVyZW5kdW1JbmZvT2YubXVsdGkodm90ZXMubWFwKChbcmVmZXJlbmR1bUlkXSkgPT4gcmVmZXJlbmR1bUlkKSkucGlwZShtYXAoKHJlZmVyZW5kdW1zKSA9PiB2b3Rlc1xuICAgICAgICAubWFwKCh2b3RlLCBpbmRleCkgPT4gW3ZvdGUsIHJlZmVyZW5kdW1zW2luZGV4XS51bndyYXBPcihudWxsKV0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbVsxXSAmJiBpc1VuZGVmaW5lZChpdGVtWzFdLmVuZCkgJiYgaXRlbVswXVsxXS5pc1N0YW5kYXJkKVxuICAgICAgICAubWFwKChbZGlyZWN0Vm90ZSwgcmVmZXJlbmR1bV0pID0+IHBhcnNlTG9jayhhcGksIGRpcmVjdFZvdGUsIHJlZmVyZW5kdW0pKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxvY2tzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWQpID0+IGFwaS5xdWVyeS5kZW1vY3JhY3kudm90aW5nT2ZcbiAgICAgICAgPyBhcGkucXVlcnkuZGVtb2NyYWN5LnZvdGluZ09mKGFjY291bnRJZCkucGlwZShzd2l0Y2hNYXAoKHZvdGluZykgPT4gdm90aW5nLmlzRGlyZWN0XG4gICAgICAgICAgICA/IGRpcmVjdExvY2tzKGFwaSwgdm90aW5nLmFzRGlyZWN0KVxuICAgICAgICAgICAgOiB2b3RpbmcuaXNEZWxlZ2F0aW5nXG4gICAgICAgICAgICAgICAgPyBkZWxlZ2F0ZUxvY2tzKGFwaSwgdm90aW5nLmFzRGVsZWdhdGluZylcbiAgICAgICAgICAgICAgICA6IG9mKFtdKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbiIsImltcG9ydCB7IG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0SW1hZ2VIYXNoQm91bmRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiB3aXRoSW1hZ2UoYXBpLCBuZXh0T3B0KSB7XG4gICAgaWYgKG5leHRPcHQuaXNOb25lKSB7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9XG4gICAgY29uc3QgW2hhc2gsIHRocmVzaG9sZF0gPSBuZXh0T3B0LnVud3JhcCgpO1xuICAgIHJldHVybiBhcGkuZGVyaXZlLmRlbW9jcmFjeS5wcmVpbWFnZShoYXNoKS5waXBlKG1hcCgoaW1hZ2UpID0+ICh7XG4gICAgICAgIGltYWdlLFxuICAgICAgICBpbWFnZUhhc2g6IGdldEltYWdlSGFzaEJvdW5kZWQoaGFzaCksXG4gICAgICAgIHRocmVzaG9sZFxuICAgIH0pKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbmV4dEV4dGVybmFsKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS5kZW1vY3JhY3k/Lm5leHRFeHRlcm5hbFxuICAgICAgICA/IGFwaS5xdWVyeS5kZW1vY3JhY3kubmV4dEV4dGVybmFsKCkucGlwZShzd2l0Y2hNYXAoKG5leHRPcHQpID0+IHdpdGhJbWFnZShhcGksIG5leHRPcHQpKSlcbiAgICAgICAgOiBvZihudWxsKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJOX1pFUk8sIGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEltYWdlSGFzaEJvdW5kZWQgfSBmcm9tICcuL3V0aWwuanMnO1xuZnVuY3Rpb24gZ2V0VW5yZXF1ZXN0ZWRUaWNrZXQoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cy50aWNrZXQgfHwgc3RhdHVzLmRlcG9zaXQ7XG59XG5mdW5jdGlvbiBnZXRSZXF1ZXN0ZWRUaWNrZXQoc3RhdHVzKSB7XG4gICAgcmV0dXJuIChzdGF0dXMubWF5YmVUaWNrZXQgfHwgc3RhdHVzLmRlcG9zaXQpLnVud3JhcE9yRGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gaXNEZW1vY3JhY3lQcmVpbWFnZShhcGksIGltYWdlT3B0KSB7XG4gICAgcmV0dXJuICEhaW1hZ2VPcHQgJiYgIWFwaS5xdWVyeS5kZW1vY3JhY3lbJ2Rpc3BhdGNoUXVldWUnXTtcbn1cbmZ1bmN0aW9uIGNvbnN0cnVjdFByb3Bvc2FsKGFwaSwgW2J5dGVzLCBwcm9wb3NlciwgYmFsYW5jZSwgYXRdKSB7XG4gICAgbGV0IHByb3Bvc2FsO1xuICAgIHRyeSB7XG4gICAgICAgIHByb3Bvc2FsID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0NhbGwnLCBieXRlcy50b1U4YSh0cnVlKSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXQsIGJhbGFuY2UsIHByb3Bvc2FsLCBwcm9wb3NlciB9O1xufVxuZnVuY3Rpb24gcGFyc2VEZW1vY3JhY3koYXBpLCBpbWFnZU9wdCkge1xuICAgIGlmIChpbWFnZU9wdC5pc05vbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNEZW1vY3JhY3lQcmVpbWFnZShhcGksIGltYWdlT3B0KSkge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBpbWFnZU9wdC51bndyYXAoKTtcbiAgICAgICAgaWYgKHN0YXR1cy5pc01pc3NpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRhdGEsIGRlcG9zaXQsIHByb3ZpZGVyLCBzaW5jZSB9ID0gc3RhdHVzLmFzQXZhaWxhYmxlO1xuICAgICAgICByZXR1cm4gY29uc3RydWN0UHJvcG9zYWwoYXBpLCBbZGF0YSwgcHJvdmlkZXIsIGRlcG9zaXQsIHNpbmNlXSk7XG4gICAgfVxuICAgIHJldHVybiBjb25zdHJ1Y3RQcm9wb3NhbChhcGksIGltYWdlT3B0LnVud3JhcCgpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlSW1hZ2UoYXBpLCBbcHJvcG9zYWxIYXNoLCBzdGF0dXMsIGJ5dGVzXSkge1xuICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IFtwcm9wb3NlciwgYmFsYW5jZV0gPSBzdGF0dXMuaXNVbnJlcXVlc3RlZFxuICAgICAgICA/IGdldFVucmVxdWVzdGVkVGlja2V0KHN0YXR1cy5hc1VucmVxdWVzdGVkKVxuICAgICAgICA6IGdldFJlcXVlc3RlZFRpY2tldChzdGF0dXMuYXNSZXF1ZXN0ZWQpO1xuICAgIGxldCBwcm9wb3NhbDtcbiAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb3Bvc2FsID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0NhbGwnLCBieXRlcy50b1U4YSh0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBhdDogQk5fWkVSTywgYmFsYW5jZSwgcHJvcG9zYWwsIHByb3Bvc2FsSGFzaCwgcHJvcG9zZXIgfTtcbn1cbmZ1bmN0aW9uIGdldERlbW9jcmFjeUltYWdlcyhhcGksIGJvdW5kZWQpIHtcbiAgICBjb25zdCBoYXNoZXMgPSBib3VuZGVkLm1hcCgoYikgPT4gZ2V0SW1hZ2VIYXNoQm91bmRlZChiKSk7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5kZW1vY3JhY3lbJ3ByZWltYWdlcyddLm11bHRpKGhhc2hlcykucGlwZShtYXAoKGltYWdlcykgPT4gaW1hZ2VzLm1hcCgoaW1hZ2VPcHQpID0+IHBhcnNlRGVtb2NyYWN5KGFwaSwgaW1hZ2VPcHQpKSkpO1xufVxuZnVuY3Rpb24gZ2V0SW1hZ2VzKGFwaSwgYm91bmRlZCkge1xuICAgIGNvbnN0IGhhc2hlcyA9IGJvdW5kZWQubWFwKChiKSA9PiBnZXRJbWFnZUhhc2hCb3VuZGVkKGIpKTtcbiAgICBjb25zdCBieXRlc1R5cGUgPSBhcGkucmVnaXN0cnkubG9va3VwLmdldFR5cGVEZWYoYXBpLnF1ZXJ5LnByZWltYWdlLnByZWltYWdlRm9yLmNyZWF0b3IubWV0YS50eXBlLmFzTWFwLmtleSkudHlwZTtcbiAgICByZXR1cm4gYXBpLnF1ZXJ5LnByZWltYWdlLnN0YXR1c0Zvci5tdWx0aShoYXNoZXMpLnBpcGUoc3dpdGNoTWFwKChvcHRTdGF0dXMpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzZXMgPSBvcHRTdGF0dXMubWFwKChvKSA9PiBvLnVud3JhcE9yKG51bGwpKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IHN0YXR1c2VzXG4gICAgICAgICAgICAubWFwKChzLCBpKSA9PiBzXG4gICAgICAgICAgICA/IGJ5dGVzVHlwZSA9PT0gJ0gyNTYnXG4gICAgICAgICAgICAgICAgLy8gZmlyc3QgZ2VuZXJhdGlvblxuICAgICAgICAgICAgICAgID8gaGFzaGVzW2ldXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCBnZW5lcmF0aW9uIChIMjU2LHUzMilcbiAgICAgICAgICAgICAgICA6IHMuaXNSZXF1ZXN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyBbaGFzaGVzW2ldLCBzLmFzUmVxdWVzdGVkLmxlbi51bndyYXBPcigwKV1cbiAgICAgICAgICAgICAgICAgICAgOiBbaGFzaGVzW2ldLCBzLmFzVW5yZXF1ZXN0ZWQubGVuXVxuICAgICAgICAgICAgOiBudWxsKVxuICAgICAgICAgICAgLmZpbHRlcigocCkgPT4gISFwKTtcbiAgICAgICAgcmV0dXJuIGFwaS5xdWVyeS5wcmVpbWFnZS5wcmVpbWFnZUZvci5tdWx0aShrZXlzKS5waXBlKG1hcCgob3B0Qnl0ZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBwdHIgPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXNlc1xuICAgICAgICAgICAgICAgIC5tYXAoKHMsIGkpID0+IHNcbiAgICAgICAgICAgICAgICA/IFtoYXNoZXNbaV0sIHMsIG9wdEJ5dGVzWysrcHRyXS51bndyYXBPcihudWxsKV1cbiAgICAgICAgICAgICAgICA6IFtoYXNoZXNbaV0sIG51bGwsIG51bGxdKVxuICAgICAgICAgICAgICAgIC5tYXAoKHYpID0+IHBhcnNlSW1hZ2UoYXBpLCB2KSk7XG4gICAgICAgIH0pKTtcbiAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJlaW1hZ2VzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChoYXNoZXMpID0+IGhhc2hlcy5sZW5ndGhcbiAgICAgICAgPyBpc0Z1bmN0aW9uKGFwaS5xdWVyeS5kZW1vY3JhY3lbJ3ByZWltYWdlcyddKVxuICAgICAgICAgICAgPyBnZXREZW1vY3JhY3lJbWFnZXMoYXBpLCBoYXNoZXMpXG4gICAgICAgICAgICA6IGlzRnVuY3Rpb24oYXBpLnF1ZXJ5LnByZWltYWdlLnByZWltYWdlRm9yKVxuICAgICAgICAgICAgICAgID8gZ2V0SW1hZ2VzKGFwaSwgaGFzaGVzKVxuICAgICAgICAgICAgICAgIDogb2YoW10pXG4gICAgICAgIDogb2YoW10pKTtcbn1cbmV4cG9ydCBjb25zdCBwcmVpbWFnZSA9IC8qI19fUFVSRV9fKi8gZmlyc3RNZW1vKChhcGksIGhhc2gpID0+IGFwaS5kZXJpdmUuZGVtb2NyYWN5LnByZWltYWdlcyhbaGFzaF0pKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0SW1hZ2VIYXNoQm91bmRlZCB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBpc05ld0RlcG9zaXRvcnMoZGVwb3NpdG9ycykge1xuICAgIC8vIERldGVjdCBiYWxhbmNlLi4uXG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oZGVwb3NpdG9yc1sxXS5tdWwpO1xufVxuZnVuY3Rpb24gcGFyc2UoW3Byb3Bvc2FscywgaW1hZ2VzLCBvcHREZXBvc2l0b3JzXSkge1xuICAgIHJldHVybiBwcm9wb3NhbHNcbiAgICAgICAgLmZpbHRlcigoWywgLCBwcm9wb3Nlcl0sIGluZGV4KSA9PiAhIShvcHREZXBvc2l0b3JzW2luZGV4XT8uaXNTb21lKSAmJiAhcHJvcG9zZXIuaXNFbXB0eSlcbiAgICAgICAgLm1hcCgoW2luZGV4LCBoYXNoLCBwcm9wb3Nlcl0sIHByb3Bvc2FsSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVwb3NpdG9ycyA9IG9wdERlcG9zaXRvcnNbcHJvcG9zYWxJbmRleF0udW53cmFwKCk7XG4gICAgICAgIHJldHVybiBvYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaW1hZ2U6IGltYWdlc1twcm9wb3NhbEluZGV4XSxcbiAgICAgICAgICAgIGltYWdlSGFzaDogZ2V0SW1hZ2VIYXNoQm91bmRlZChoYXNoKSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgcHJvcG9zZXJcbiAgICAgICAgfSwgaXNOZXdEZXBvc2l0b3JzKGRlcG9zaXRvcnMpXG4gICAgICAgICAgICA/IHsgYmFsYW5jZTogZGVwb3NpdG9yc1sxXSwgc2Vjb25kczogZGVwb3NpdG9yc1swXSB9XG4gICAgICAgICAgICA6IHsgYmFsYW5jZTogZGVwb3NpdG9yc1swXSwgc2Vjb25kczogZGVwb3NpdG9yc1sxXSB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcm9wb3NhbHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gaXNGdW5jdGlvbihhcGkucXVlcnkuZGVtb2NyYWN5Py5wdWJsaWNQcm9wcylcbiAgICAgICAgPyBhcGkucXVlcnkuZGVtb2NyYWN5LnB1YmxpY1Byb3BzKCkucGlwZShzd2l0Y2hNYXAoKHByb3Bvc2FscykgPT4gcHJvcG9zYWxzLmxlbmd0aFxuICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICBvZihwcm9wb3NhbHMpLFxuICAgICAgICAgICAgICAgIGFwaS5kZXJpdmUuZGVtb2NyYWN5LnByZWltYWdlcyhwcm9wb3NhbHMubWFwKChbLCBoYXNoXSkgPT4gaGFzaCkpLFxuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5kZW1vY3JhY3kuZGVwb3NpdE9mLm11bHRpKHByb3Bvc2Fscy5tYXAoKFtpbmRleF0pID0+IGluZGV4KSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IG9mKFtbXSwgW10sIFtdXSkpLCBtYXAocGFyc2UpKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmR1bUlkcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkucXVlcnkuZGVtb2NyYWN5Py5sb3dlc3RVbmJha2VkXG4gICAgICAgID8gYXBpLnF1ZXJ5TXVsdGkoW1xuICAgICAgICAgICAgYXBpLnF1ZXJ5LmRlbW9jcmFjeS5sb3dlc3RVbmJha2VkLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LmRlbW9jcmFjeS5yZWZlcmVuZHVtQ291bnRcbiAgICAgICAgXSkucGlwZShtYXAoKFtmaXJzdCwgdG90YWxdKSA9PiB0b3RhbC5ndChmaXJzdClcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgICAgID8gWy4uLkFycmF5KHRvdGFsLnN1YihmaXJzdCkudG9OdW1iZXIoKSldLm1hcCgoXywgaSkgPT4gZmlyc3QuYWRkbihpKSlcbiAgICAgICAgICAgIDogW10pKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuZHVtcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkuZGVyaXZlLmRlbW9jcmFjeS5yZWZlcmVuZHVtc0FjdGl2ZSgpLnBpcGUoc3dpdGNoTWFwKChyZWZlcmVuZHVtcykgPT4gcmVmZXJlbmR1bXMubGVuZ3RoXG4gICAgICAgID8gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBvZihyZWZlcmVuZHVtcyksXG4gICAgICAgICAgICBhcGkuZGVyaXZlLmRlbW9jcmFjeS5fcmVmZXJlbmR1bXNWb3RlcyhyZWZlcmVuZHVtcylcbiAgICAgICAgXSlcbiAgICAgICAgOiBvZihbW10sIFtdXSkpLCBtYXAoKFtyZWZlcmVuZHVtcywgdm90ZXNdKSA9PiByZWZlcmVuZHVtcy5tYXAoKHJlZmVyZW5kdW0sIGluZGV4KSA9PiBvYmplY3RTcHJlYWQoe30sIHJlZmVyZW5kdW0sIHZvdGVzW2luZGV4XSkpKSkpO1xufVxuIiwiaW1wb3J0IHsgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5kdW1zQWN0aXZlKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5kZXJpdmUuZGVtb2NyYWN5LnJlZmVyZW5kdW1JZHMoKS5waXBlKHN3aXRjaE1hcCgoaWRzKSA9PiBpZHMubGVuZ3RoXG4gICAgICAgID8gYXBpLmRlcml2ZS5kZW1vY3JhY3kucmVmZXJlbmR1bXNJbmZvKGlkcylcbiAgICAgICAgOiBvZihbXSkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5kdW1zRmluaXNoZWQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLmRlcml2ZS5kZW1vY3JhY3kucmVmZXJlbmR1bUlkcygpLnBpcGUoc3dpdGNoTWFwKChpZHMpID0+IGFwaS5xdWVyeS5kZW1vY3JhY3kucmVmZXJlbmR1bUluZm9PZi5tdWx0aShpZHMpKSwgbWFwKChpbmZvcykgPT4gaW5mb3NcbiAgICAgICAgLm1hcCgobykgPT4gby51bndyYXBPcihudWxsKSlcbiAgICAgICAgLmZpbHRlcigoaW5mbykgPT4gISFpbmZvICYmIGluZm8uaXNGaW5pc2hlZClcbiAgICAgICAgLm1hcCgoaW5mbykgPT4gaW5mby5hc0ZpbmlzaGVkKSkpKTtcbn1cbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgY2FsY1ZvdGVzLCBnZXRJbWFnZUhhc2gsIGdldFN0YXR1cyB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiB2b3Rlc1ByZXYoYXBpLCByZWZlcmVuZHVtSWQpIHtcbiAgICByZXR1cm4gYXBpLnF1ZXJ5LmRlbW9jcmFjeVsndm90ZXJzRm9yJ10ocmVmZXJlbmR1bUlkKS5waXBlKHN3aXRjaE1hcCgodm90ZXJzRm9yKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2Yodm90ZXJzRm9yKSxcbiAgICAgICAgdm90ZXJzRm9yLmxlbmd0aFxuICAgICAgICAgICAgPyBhcGkucXVlcnkuZGVtb2NyYWN5Wyd2b3RlT2YnXS5tdWx0aSh2b3RlcnNGb3IubWFwKChhY2NvdW50SWQpID0+IFtyZWZlcmVuZHVtSWQsIGFjY291bnRJZF0pKVxuICAgICAgICAgICAgOiBvZihbXSksXG4gICAgICAgIGFwaS5kZXJpdmUuYmFsYW5jZXMudm90aW5nQmFsYW5jZXModm90ZXJzRm9yKVxuICAgIF0pKSwgbWFwKChbdm90ZXJzRm9yLCB2b3RlcywgYmFsYW5jZXNdKSA9PiB2b3RlcnNGb3IubWFwKChhY2NvdW50SWQsIGluZGV4KSA9PiAoe1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIGJhbGFuY2U6IGJhbGFuY2VzW2luZGV4XS52b3RpbmdCYWxhbmNlIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyksXG4gICAgICAgIGlzRGVsZWdhdGluZzogZmFsc2UsXG4gICAgICAgIHZvdGU6IHZvdGVzW2luZGV4XSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVm90ZScpXG4gICAgfSkpKSk7XG59XG5mdW5jdGlvbiBleHRyYWN0Vm90ZXMobWFwcGVkLCByZWZlcmVuZHVtSWQpIHtcbiAgICByZXR1cm4gbWFwcGVkXG4gICAgICAgIC5maWx0ZXIoKFssIHZvdGluZ10pID0+IHZvdGluZy5pc0RpcmVjdClcbiAgICAgICAgLm1hcCgoW2FjY291bnRJZCwgdm90aW5nXSkgPT4gW1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIHZvdGluZy5hc0RpcmVjdC52b3Rlcy5maWx0ZXIoKFtpZHhdKSA9PiBpZHguZXEocmVmZXJlbmR1bUlkKSlcbiAgICBdKVxuICAgICAgICAuZmlsdGVyKChbLCBkaXJlY3RWb3Rlc10pID0+ICEhZGlyZWN0Vm90ZXMubGVuZ3RoKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIFthY2NvdW50SWQsIHZvdGVzXSkgPT4gXG4gICAgLy8gRklYTUUgV2UgYXJlIGlnbm9yaW5nIHNwbGl0IHZvdGVzXG4gICAgdm90ZXMucmVkdWNlKChyZXN1bHQsIFssIHZvdGVdKSA9PiB7XG4gICAgICAgIGlmICh2b3RlLmlzU3RhbmRhcmQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICAgICAgYWNjb3VudElkLFxuICAgICAgICAgICAgICAgIGlzRGVsZWdhdGluZzogZmFsc2VcbiAgICAgICAgICAgIH0sIHZvdGUuYXNTdGFuZGFyZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgcmVzdWx0KSwgW10pO1xufVxuZnVuY3Rpb24gdm90ZXNDdXJyKGFwaSwgcmVmZXJlbmR1bUlkKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeS5kZW1vY3JhY3kudm90aW5nT2YuZW50cmllcygpLnBpcGUobWFwKChhbGxWb3RpbmcpID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gYWxsVm90aW5nLm1hcCgoW3sgYXJnczogW2FjY291bnRJZF0gfSwgdm90aW5nXSkgPT4gW2FjY291bnRJZCwgdm90aW5nXSk7XG4gICAgICAgIGNvbnN0IHZvdGVzID0gZXh0cmFjdFZvdGVzKG1hcHBlZCwgcmVmZXJlbmR1bUlkKTtcbiAgICAgICAgY29uc3QgZGVsZWdhdGlvbnMgPSBtYXBwZWRcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIHZvdGluZ10pID0+IHZvdGluZy5pc0RlbGVnYXRpbmcpXG4gICAgICAgICAgICAubWFwKChbYWNjb3VudElkLCB2b3RpbmddKSA9PiBbYWNjb3VudElkLCB2b3RpbmcuYXNEZWxlZ2F0aW5nXSk7XG4gICAgICAgIC8vIGFkZCBkZWxlZ2F0aW9uc1xuICAgICAgICBkZWxlZ2F0aW9ucy5mb3JFYWNoKChbYWNjb3VudElkLCB7IGJhbGFuY2UsIGNvbnZpY3Rpb24sIHRhcmdldCB9XSkgPT4ge1xuICAgICAgICAgICAgLy8gQXJlIHdlIGRlbGVnYXRpbmcgdG8gYSBkZWxlZ2F0b3JcbiAgICAgICAgICAgIGNvbnN0IHRvRGVsZWdhdG9yID0gZGVsZWdhdGlvbnMuZmluZCgoW2FjY291bnRJZF0pID0+IGFjY291bnRJZC5lcSh0YXJnZXQpKTtcbiAgICAgICAgICAgIGNvbnN0IHRvID0gdm90ZXMuZmluZCgoeyBhY2NvdW50SWQgfSkgPT4gYWNjb3VudElkLmVxKHRvRGVsZWdhdG9yID8gdG9EZWxlZ2F0b3JbMF0gOiB0YXJnZXQpKTtcbiAgICAgICAgICAgIC8vIHRoaXMgZGVsZWdhdGlvbiBoYXMgYSB0YXJnZXRcbiAgICAgICAgICAgIGlmICh0bykge1xuICAgICAgICAgICAgICAgIHZvdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgICAgICAgICAgICAgIGJhbGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGlzRGVsZWdhdGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdm90ZTogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1ZvdGUnLCB7IGF5ZTogdG8udm90ZS5pc0F5ZSwgY29udmljdGlvbiB9KVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZvdGVzO1xuICAgIH0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfcmVmZXJlbmR1bVZvdGVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChyZWZlcmVuZHVtKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5kZW1vY3JhY3kuc3FydEVsZWN0b3JhdGUoKSxcbiAgICAgICAgaXNGdW5jdGlvbihhcGkucXVlcnkuZGVtb2NyYWN5LnZvdGluZ09mKVxuICAgICAgICAgICAgPyB2b3Rlc0N1cnIoYXBpLCByZWZlcmVuZHVtLmluZGV4KVxuICAgICAgICAgICAgOiB2b3Rlc1ByZXYoYXBpLCByZWZlcmVuZHVtLmluZGV4KVxuICAgIF0pLnBpcGUobWFwKChbc3FydEVsZWN0b3JhdGUsIHZvdGVzXSkgPT4gY2FsY1ZvdGVzKHNxcnRFbGVjdG9yYXRlLCByZWZlcmVuZHVtLCB2b3RlcykpKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3JlZmVyZW5kdW1zVm90ZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKHJlZmVyZW5kdW1zKSA9PiByZWZlcmVuZHVtcy5sZW5ndGhcbiAgICAgICAgPyBjb21iaW5lTGF0ZXN0KHJlZmVyZW5kdW1zLm1hcCgocmVmZXJlbmR1bSkgPT4gYXBpLmRlcml2ZS5kZW1vY3JhY3kuX3JlZmVyZW5kdW1Wb3RlcyhyZWZlcmVuZHVtKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfcmVmZXJlbmR1bUluZm8oaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGluZGV4LCBpbmZvKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGdldFN0YXR1cyhpbmZvKTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c1xuICAgICAgICAgICAgPyBhcGkuZGVyaXZlLmRlbW9jcmFjeS5wcmVpbWFnZShzdGF0dXMucHJvcG9zYWwgfHxcbiAgICAgICAgICAgICAgICBzdGF0dXMucHJvcG9zYWxIYXNoKS5waXBlKG1hcCgoaW1hZ2UpID0+ICh7XG4gICAgICAgICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgICAgICAgaW1hZ2VIYXNoOiBnZXRJbWFnZUhhc2goc3RhdHVzKSxcbiAgICAgICAgICAgICAgICBpbmRleDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1JlZmVyZW5kdW1JbmRleCcsIGluZGV4KSxcbiAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIH0pKSlcbiAgICAgICAgICAgIDogb2YobnVsbCk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmR1bXNJbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChpZHMpID0+IGlkcy5sZW5ndGhcbiAgICAgICAgPyBhcGkucXVlcnkuZGVtb2NyYWN5LnJlZmVyZW5kdW1JbmZvT2YubXVsdGkoaWRzKS5waXBlKHN3aXRjaE1hcCgoaW5mb3MpID0+IGNvbWJpbmVMYXRlc3QoaWRzLm1hcCgoaWQsIGluZGV4KSA9PiBhcGkuZGVyaXZlLmRlbW9jcmFjeS5fcmVmZXJlbmR1bUluZm8oaWQsIGluZm9zW2luZGV4XSkpKSksIG1hcCgoaW5mb3MpID0+IGluZm9zLmZpbHRlcigocikgPT4gISFyKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbiIsImltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYm5TcXJ0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHNxcnRFbGVjdG9yYXRlKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS5iYWxhbmNlcy50b3RhbElzc3VhbmNlKCkucGlwZShtYXAoYm5TcXJ0KSkpO1xufVxuIiwiaW1wb3J0IHsgQk4sIGJuU3FydCwgaXNIZXgsIGlzU3RyaW5nLCBpc1U4YSwgb2JqZWN0U3ByZWFkLCBzdHJpbmdUb0hleCwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5mdW5jdGlvbiBpc09sZEluZm8oaW5mbykge1xuICAgIHJldHVybiAhIWluZm8ucHJvcG9zYWxIYXNoO1xufVxuZnVuY3Rpb24gaXNDdXJyZW50U3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiAhIXN0YXR1cy50YWxseTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlUmF0aW9uYWxzKG4xLCBkMSwgbjIsIGQyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgcTEgPSBuMS5kaXYoZDEpO1xuICAgICAgICBjb25zdCBxMiA9IG4yLmRpdihkMik7XG4gICAgICAgIGlmIChxMS5sdChxMikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHEyLmx0KHExKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIxID0gbjEubW9kKGQxKTtcbiAgICAgICAgY29uc3QgcjIgPSBuMi5tb2QoZDIpO1xuICAgICAgICBpZiAocjIuaXNaZXJvKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyMS5pc1plcm8oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbjEgPSBkMjtcbiAgICAgICAgbjIgPSBkMTtcbiAgICAgICAgZDEgPSByMjtcbiAgICAgICAgZDIgPSByMTtcbiAgICB9XG59XG5mdW5jdGlvbiBjYWxjUGFzc2luZ090aGVyKHRocmVzaG9sZCwgc3FydEVsZWN0b3JhdGUsIHsgdm90ZWRBeWUsIHZvdGVkTmF5LCB2b3RlZFRvdGFsIH0pIHtcbiAgICBjb25zdCBzcXJ0Vm90ZXJzID0gYm5TcXJ0KHZvdGVkVG90YWwpO1xuICAgIHJldHVybiBzcXJ0Vm90ZXJzLmlzWmVybygpXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB0aHJlc2hvbGQuaXNTdXBlck1ham9yaXR5QXBwcm92ZVxuICAgICAgICAgICAgPyBjb21wYXJlUmF0aW9uYWxzKHZvdGVkTmF5LCBzcXJ0Vm90ZXJzLCB2b3RlZEF5ZSwgc3FydEVsZWN0b3JhdGUpXG4gICAgICAgICAgICA6IGNvbXBhcmVSYXRpb25hbHModm90ZWROYXksIHNxcnRFbGVjdG9yYXRlLCB2b3RlZEF5ZSwgc3FydFZvdGVycyk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY1Bhc3NpbmcodGhyZXNob2xkLCBzcXJ0RWxlY3RvcmF0ZSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdGhyZXNob2xkLmlzU2ltcGxlTWFqb3JpdHlcbiAgICAgICAgPyBzdGF0ZS52b3RlZEF5ZS5ndChzdGF0ZS52b3RlZE5heSlcbiAgICAgICAgOiBjYWxjUGFzc2luZ090aGVyKHRocmVzaG9sZCwgc3FydEVsZWN0b3JhdGUsIHN0YXRlKTtcbn1cbmZ1bmN0aW9uIGNhbGNWb3Rlc1ByZXYodm90ZXNGb3IpIHtcbiAgICByZXR1cm4gdm90ZXNGb3IucmVkdWNlKChzdGF0ZSwgZGVyaXZlZCkgPT4ge1xuICAgICAgICBjb25zdCB7IGJhbGFuY2UsIHZvdGUgfSA9IGRlcml2ZWQ7XG4gICAgICAgIGNvbnN0IGlzRGVmYXVsdCA9IHZvdGUuY29udmljdGlvbi5pbmRleCA9PT0gMDtcbiAgICAgICAgY29uc3QgY291bnRlZCA9IGJhbGFuY2VcbiAgICAgICAgICAgIC5tdWxuKGlzRGVmYXVsdCA/IDEgOiB2b3RlLmNvbnZpY3Rpb24uaW5kZXgpXG4gICAgICAgICAgICAuZGl2bihpc0RlZmF1bHQgPyAxMCA6IDEpO1xuICAgICAgICBpZiAodm90ZS5pc0F5ZSkge1xuICAgICAgICAgICAgc3RhdGUuYWxsQXllLnB1c2goZGVyaXZlZCk7XG4gICAgICAgICAgICBzdGF0ZS52b3RlQ291bnRBeWUrKztcbiAgICAgICAgICAgIHN0YXRlLnZvdGVkQXllLmlhZGQoY291bnRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5hbGxOYXkucHVzaChkZXJpdmVkKTtcbiAgICAgICAgICAgIHN0YXRlLnZvdGVDb3VudE5heSsrO1xuICAgICAgICAgICAgc3RhdGUudm90ZWROYXkuaWFkZChjb3VudGVkKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS52b3RlQ291bnQrKztcbiAgICAgICAgc3RhdGUudm90ZWRUb3RhbC5pYWRkKGNvdW50ZWQpO1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSwgeyBhbGxBeWU6IFtdLCBhbGxOYXk6IFtdLCB2b3RlQ291bnQ6IDAsIHZvdGVDb3VudEF5ZTogMCwgdm90ZUNvdW50TmF5OiAwLCB2b3RlZEF5ZTogbmV3IEJOKDApLCB2b3RlZE5heTogbmV3IEJOKDApLCB2b3RlZFRvdGFsOiBuZXcgQk4oMCkgfSk7XG59XG5mdW5jdGlvbiBjYWxjVm90ZXNDdXJyZW50KHRhbGx5LCB2b3Rlcykge1xuICAgIGNvbnN0IGFsbEF5ZSA9IFtdO1xuICAgIGNvbnN0IGFsbE5heSA9IFtdO1xuICAgIHZvdGVzLmZvckVhY2goKGRlcml2ZWQpID0+IHtcbiAgICAgICAgaWYgKGRlcml2ZWQudm90ZS5pc0F5ZSkge1xuICAgICAgICAgICAgYWxsQXllLnB1c2goZGVyaXZlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhbGxOYXkucHVzaChkZXJpdmVkKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFsbEF5ZSxcbiAgICAgICAgYWxsTmF5LFxuICAgICAgICB2b3RlQ291bnQ6IGFsbEF5ZS5sZW5ndGggKyBhbGxOYXkubGVuZ3RoLFxuICAgICAgICB2b3RlQ291bnRBeWU6IGFsbEF5ZS5sZW5ndGgsXG4gICAgICAgIHZvdGVDb3VudE5heTogYWxsTmF5Lmxlbmd0aCxcbiAgICAgICAgdm90ZWRBeWU6IHRhbGx5LmF5ZXMsXG4gICAgICAgIHZvdGVkTmF5OiB0YWxseS5uYXlzLFxuICAgICAgICB2b3RlZFRvdGFsOiB0YWxseS50dXJub3V0XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxjVm90ZXMoc3FydEVsZWN0b3JhdGUsIHJlZmVyZW5kdW0sIHZvdGVzKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBpc0N1cnJlbnRTdGF0dXMocmVmZXJlbmR1bS5zdGF0dXMpXG4gICAgICAgID8gY2FsY1ZvdGVzQ3VycmVudChyZWZlcmVuZHVtLnN0YXR1cy50YWxseSwgdm90ZXMpXG4gICAgICAgIDogY2FsY1ZvdGVzUHJldih2b3Rlcyk7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXNzaW5nOiBjYWxjUGFzc2luZyhyZWZlcmVuZHVtLnN0YXR1cy50aHJlc2hvbGQsIHNxcnRFbGVjdG9yYXRlLCBzdGF0ZSksXG4gICAgICAgIHZvdGVzXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzKGluZm8pIHtcbiAgICBpZiAoaW5mby5pc05vbmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVud3JhcHBlZCA9IGluZm8udW53cmFwKCk7XG4gICAgcmV0dXJuIGlzT2xkSW5mbyh1bndyYXBwZWQpXG4gICAgICAgID8gdW53cmFwcGVkXG4gICAgICAgIDogdW53cmFwcGVkLmlzT25nb2luZ1xuICAgICAgICAgICAgPyB1bndyYXBwZWQuYXNPbmdvaW5nXG4gICAgICAgICAgICAvLyBkb25lLCB3ZSBkb24ndCBpbmNsdWRlIGl0IGhlcmUuLi4gb25seSBjdXJyZW50bHkgYWN0aXZlXG4gICAgICAgICAgICA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VIYXNoQm91bmRlZChoYXNoKSB7XG4gICAgcmV0dXJuIGhhc2guaXNMZWdhY3lcbiAgICAgICAgPyBoYXNoLmFzTGVnYWN5Lmhhc2hfLnRvSGV4KClcbiAgICAgICAgOiBoYXNoLmlzTG9va3VwXG4gICAgICAgICAgICA/IGhhc2guYXNMb29rdXAuaGFzaF8udG9IZXgoKVxuICAgICAgICAgICAgLy8gZm9yIGlubGluZSwgdXNlIHRoZSBhY3R1YWwgQnl0ZXMgaGFzaFxuICAgICAgICAgICAgOiBoYXNoLmlzSW5saW5lXG4gICAgICAgICAgICAgICAgPyBoYXNoLmFzSW5saW5lLmhhc2gudG9IZXgoKVxuICAgICAgICAgICAgICAgIDogaXNTdHJpbmcoaGFzaClcbiAgICAgICAgICAgICAgICAgICAgPyBpc0hleChoYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBoYXNoXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHN0cmluZ1RvSGV4KGhhc2gpXG4gICAgICAgICAgICAgICAgICAgIDogaXNVOGEoaGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdThhVG9IZXgoaGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzaC50b0hleCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlSGFzaChzdGF0dXMpIHtcbiAgICByZXR1cm4gZ2V0SW1hZ2VIYXNoQm91bmRlZChzdGF0dXMucHJvcG9zYWwgfHxcbiAgICAgICAgc3RhdHVzLnByb3Bvc2FsSGFzaCk7XG59XG4iLCJpbXBvcnQgKiBhcyBhY2NvdW50cyBmcm9tICcuL2FjY291bnRzL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIGFsbGlhbmNlIGZyb20gJy4vYWxsaWFuY2UvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgYmFnc0xpc3QgZnJvbSAnLi9iYWdzTGlzdC9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBiYWxhbmNlcyBmcm9tICcuL2JhbGFuY2VzL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIGJvdW50aWVzIGZyb20gJy4vYm91bnRpZXMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgY2hhaW4gZnJvbSAnLi9jaGFpbi9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBjb250cmFjdHMgZnJvbSAnLi9jb250cmFjdHMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgY291bmNpbCBmcm9tICcuL2NvdW5jaWwvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgY3Jvd2Rsb2FuIGZyb20gJy4vY3Jvd2Rsb2FuL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIGRlbW9jcmFjeSBmcm9tICcuL2RlbW9jcmFjeS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBlbGVjdGlvbnMgZnJvbSAnLi9lbGVjdGlvbnMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgaW1PbmxpbmUgZnJvbSAnLi9pbU9ubGluZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBtZW1iZXJzaGlwIGZyb20gJy4vbWVtYmVyc2hpcC9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBwYXJhY2hhaW5zIGZyb20gJy4vcGFyYWNoYWlucy9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBzZXNzaW9uIGZyb20gJy4vc2Vzc2lvbi9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBzb2NpZXR5IGZyb20gJy4vc29jaWV0eS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBzdGFraW5nIGZyb20gJy4vc3Rha2luZy9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB0ZWNobmljYWxDb21taXR0ZWUgZnJvbSAnLi90ZWNobmljYWxDb21taXR0ZWUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgdHJlYXN1cnkgZnJvbSAnLi90cmVhc3VyeS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB0eCBmcm9tICcuL3R4L2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCBkZXJpdmUgPSB7IGFjY291bnRzLCBhbGxpYW5jZSwgYmFnc0xpc3QsIGJhbGFuY2VzLCBib3VudGllcywgY2hhaW4sIGNvbnRyYWN0cywgY291bmNpbCwgY3Jvd2Rsb2FuLCBkZW1vY3JhY3ksIGVsZWN0aW9ucywgaW1PbmxpbmUsIG1lbWJlcnNoaXAsIHBhcmFjaGFpbnMsIHNlc3Npb24sIHNvY2lldHksIHN0YWtpbmcsIHRlY2huaWNhbENvbW1pdHRlZSwgdHJlYXN1cnksIHR4IH07XG4iLCJleHBvcnQgKiBmcm9tICcuL2luZm8uanMnO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gaXNTZWF0SG9sZGVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQ2FuZGlkYXRlVHVwbGUodmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBnZXRBY2NvdW50VHVwbGUodmFsdWUpIHtcbiAgICByZXR1cm4gaXNTZWF0SG9sZGVyKHZhbHVlKVxuICAgICAgICA/IFt2YWx1ZS53aG8sIHZhbHVlLnN0YWtlXVxuICAgICAgICA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0Q2FuZGlkYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzQ2FuZGlkYXRlVHVwbGUodmFsdWUpXG4gICAgICAgID8gdmFsdWVbMF1cbiAgICAgICAgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNvcnRBY2NvdW50cyhbLCBiYWxhbmNlQV0sIFssIGJhbGFuY2VCXSkge1xuICAgIHJldHVybiBiYWxhbmNlQi5jbXAoYmFsYW5jZUEpO1xufVxuZnVuY3Rpb24gZ2V0Q29uc3RhbnRzKGFwaSwgZWxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIGVsZWN0aW9uc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGNhbmRpZGFjeUJvbmQ6IGFwaS5jb25zdHNbZWxlY3Rpb25zXS5jYW5kaWRhY3lCb25kLFxuICAgICAgICAgICAgZGVzaXJlZFJ1bm5lcnNVcDogYXBpLmNvbnN0c1tlbGVjdGlvbnNdLmRlc2lyZWRSdW5uZXJzVXAsXG4gICAgICAgICAgICBkZXNpcmVkU2VhdHM6IGFwaS5jb25zdHNbZWxlY3Rpb25zXS5kZXNpcmVkTWVtYmVycyxcbiAgICAgICAgICAgIHRlcm1EdXJhdGlvbjogYXBpLmNvbnN0c1tlbGVjdGlvbnNdLnRlcm1EdXJhdGlvbixcbiAgICAgICAgICAgIHZvdGluZ0JvbmQ6IGFwaS5jb25zdHNbZWxlY3Rpb25zXVsndm90aW5nQm9uZCddLFxuICAgICAgICAgICAgdm90aW5nQm9uZEJhc2U6IGFwaS5jb25zdHNbZWxlY3Rpb25zXS52b3RpbmdCb25kQmFzZSxcbiAgICAgICAgICAgIHZvdGluZ0JvbmRGYWN0b3I6IGFwaS5jb25zdHNbZWxlY3Rpb25zXS52b3RpbmdCb25kRmFjdG9yXG4gICAgICAgIH1cbiAgICAgICAgOiB7fTtcbn1cbmZ1bmN0aW9uIGdldE1vZHVsZXMoYXBpKSB7XG4gICAgY29uc3QgW2NvdW5jaWxdID0gYXBpLnJlZ2lzdHJ5LmdldE1vZHVsZUluc3RhbmNlcyhhcGkucnVudGltZVZlcnNpb24uc3BlY05hbWUsICdjb3VuY2lsJykgfHwgWydjb3VuY2lsJ107XG4gICAgY29uc3QgZWxlY3Rpb25zID0gYXBpLnF1ZXJ5WydwaHJhZ21lbkVsZWN0aW9uJ11cbiAgICAgICAgPyAncGhyYWdtZW5FbGVjdGlvbidcbiAgICAgICAgOiBhcGkucXVlcnlbJ2VsZWN0aW9uc1BocmFnbWVuJ11cbiAgICAgICAgICAgID8gJ2VsZWN0aW9uc1BocmFnbWVuJ1xuICAgICAgICAgICAgOiBhcGkucXVlcnkuZWxlY3Rpb25zXG4gICAgICAgICAgICAgICAgPyAnZWxlY3Rpb25zJ1xuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAvLyBJbiBzb21lIGNhc2VzIGNvdW5jaWwgaGVyZSBjYW4gcmVmZXIgdG8gYGdlbmVyYWxDb3VuY2lsYCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgY2hhaW4gc3BlY2lmaWMgb3ZlcnJpZGUgaXMuXG4gICAgLy8gVGhlcmVmb3JlLCB3ZSBjaGVjayB0byBzZWUgaWYgaXQgZXhpc3RzIGluIHRoZSBxdWVyeSBmaWVsZC4gSWYgaXQgZG9lcyBub3Qgd2UgZGVmYXVsdCB0byBgY291bmNpbGAuXG4gICAgY29uc3QgcmVzb2x2ZWRDb3VuY2lsID0gYXBpLnF1ZXJ5W2NvdW5jaWxdID8gY291bmNpbCA6ICdjb3VuY2lsJztcbiAgICByZXR1cm4gW3Jlc29sdmVkQ291bmNpbCwgZWxlY3Rpb25zXTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5QWxsKGFwaSwgY291bmNpbCwgZWxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeU11bHRpKFtcbiAgICAgICAgYXBpLnF1ZXJ5W2NvdW5jaWxdLm1lbWJlcnMsXG4gICAgICAgIGFwaS5xdWVyeVtlbGVjdGlvbnNdLmNhbmRpZGF0ZXMsXG4gICAgICAgIGFwaS5xdWVyeVtlbGVjdGlvbnNdLm1lbWJlcnMsXG4gICAgICAgIGFwaS5xdWVyeVtlbGVjdGlvbnNdLnJ1bm5lcnNVcFxuICAgIF0pO1xufVxuZnVuY3Rpb24gcXVlcnlDb3VuY2lsKGFwaSwgY291bmNpbCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLnF1ZXJ5W2NvdW5jaWxdLm1lbWJlcnMoKSxcbiAgICAgICAgb2YoW10pLFxuICAgICAgICBvZihbXSksXG4gICAgICAgIG9mKFtdKVxuICAgIF0pO1xufVxuLyoqXG4gKiBAbmFtZSBpbmZvXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY29tYmluZWQgcmVzdWx0cyBvZiB0aGUgc3RvcmFnZSBxdWVyaWVzIGZvclxuICogYWxsIHJlbGV2YW50IGVsZWN0aW9uIG1vZHVsZSBwcm9wZXJ0aWVzLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBhcGkuZGVyaXZlLmVsZWN0aW9ucy5pbmZvKCh7IG1lbWJlcnMsIGNhbmRpZGF0ZXMgfSkgPT4ge1xuICogICBjb25zb2xlLmxvZyhgVGhlcmUgYXJlIGN1cnJlbnRseSAke21lbWJlcnMubGVuZ3RofSBjb3VuY2lsIG1lbWJlcnMgYW5kICR7Y2FuZGlkYXRlcy5sZW5ndGh9IHByb3NwZWN0aXZlIGNvdW5jaWwgY2FuZGlkYXRlcy5gKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IHtcbiAgICAgICAgY29uc3QgW2NvdW5jaWwsIGVsZWN0aW9uc10gPSBnZXRNb2R1bGVzKGFwaSk7XG4gICAgICAgIHJldHVybiAoZWxlY3Rpb25zXG4gICAgICAgICAgICA/IHF1ZXJ5QWxsKGFwaSwgY291bmNpbCwgZWxlY3Rpb25zKVxuICAgICAgICAgICAgOiBxdWVyeUNvdW5jaWwoYXBpLCBjb3VuY2lsKSkucGlwZShtYXAoKFtjb3VuY2lsTWVtYmVycywgY2FuZGlkYXRlcywgbWVtYmVycywgcnVubmVyc1VwXSkgPT4gb2JqZWN0U3ByZWFkKHt9LCBnZXRDb25zdGFudHMoYXBpLCBlbGVjdGlvbnMpLCB7XG4gICAgICAgICAgICBjYW5kaWRhdGVDb3VudDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ3UzMicsIGNhbmRpZGF0ZXMubGVuZ3RoKSxcbiAgICAgICAgICAgIGNhbmRpZGF0ZXM6IGNhbmRpZGF0ZXMubWFwKGdldENhbmRpZGF0ZSksXG4gICAgICAgICAgICBtZW1iZXJzOiBtZW1iZXJzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gbWVtYmVycy5tYXAoZ2V0QWNjb3VudFR1cGxlKS5zb3J0KHNvcnRBY2NvdW50cylcbiAgICAgICAgICAgICAgICA6IGNvdW5jaWxNZW1iZXJzLm1hcCgoYSkgPT4gW2EsIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJyldKSxcbiAgICAgICAgICAgIHJ1bm5lcnNVcDogcnVubmVyc1VwLm1hcChnZXRBY2NvdW50VHVwbGUpLnNvcnQoc29ydEFjY291bnRzKVxuICAgICAgICB9KSkpO1xuICAgIH0pO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9yZWNlaXZlZEhlYXJ0YmVhdHMuanMnO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCTl9aRVJPIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gbWFwUmVzdWx0KFtyZXN1bHQsIHZhbGlkYXRvcnMsIGhlYXJ0YmVhdHMsIG51bUJsb2Nrc10pIHtcbiAgICB2YWxpZGF0b3JzLmZvckVhY2goKHZhbGlkYXRvciwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ySWQgPSB2YWxpZGF0b3IudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgYmxvY2tDb3VudCA9IG51bUJsb2Nrc1tpbmRleF07XG4gICAgICAgIGNvbnN0IGhhc01lc3NhZ2UgPSAhaGVhcnRiZWF0c1tpbmRleF0uaXNFbXB0eTtcbiAgICAgICAgY29uc3QgcHJldiA9IHJlc3VsdFt2YWxpZGF0b3JJZF07XG4gICAgICAgIGlmICghcHJldiB8fCBwcmV2Lmhhc01lc3NhZ2UgIT09IGhhc01lc3NhZ2UgfHwgIXByZXYuYmxvY2tDb3VudC5lcShibG9ja0NvdW50KSkge1xuICAgICAgICAgICAgcmVzdWx0W3ZhbGlkYXRvcklkXSA9IHtcbiAgICAgICAgICAgICAgICBibG9ja0NvdW50LFxuICAgICAgICAgICAgICAgIGhhc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgaXNPbmxpbmU6IGhhc01lc3NhZ2UgfHwgYmxvY2tDb3VudC5ndChCTl9aRVJPKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXR1cm4gYSBib29sZWFuIGFycmF5IGluZGljYXRpbmcgd2hldGhlciB0aGUgcGFzc2VkIGFjY291bnRzIGhhZCByZWNlaXZlZCBoZWFydGJlYXRzIGluIHRoZSBjdXJyZW50IHNlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY2VpdmVkSGVhcnRiZWF0cyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkucXVlcnkuaW1PbmxpbmU/LnJlY2VpdmVkSGVhcnRiZWF0c1xuICAgICAgICA/IGFwaS5kZXJpdmUuc3Rha2luZy5vdmVydmlldygpLnBpcGUoc3dpdGNoTWFwKCh7IGN1cnJlbnRJbmRleCwgdmFsaWRhdG9ycyB9KSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKHt9KSxcbiAgICAgICAgICAgIG9mKHZhbGlkYXRvcnMpLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5LmltT25saW5lLnJlY2VpdmVkSGVhcnRiZWF0cy5tdWx0aSh2YWxpZGF0b3JzLm1hcCgoX2FkZHJlc3MsIGluZGV4KSA9PiBbY3VycmVudEluZGV4LCBpbmRleF0pKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeS5pbU9ubGluZS5hdXRob3JlZEJsb2Nrcy5tdWx0aSh2YWxpZGF0b3JzLm1hcCgoYWRkcmVzcykgPT4gW2N1cnJlbnRJbmRleCwgYWRkcmVzc10pKVxuICAgICAgICBdKSksIG1hcChtYXBSZXN1bHQpKVxuICAgICAgICA6IG9mKHt9KSk7XG59XG4iLCJpbXBvcnQgeyBoYXNQcm9wb3NhbHMgYXMgY29sbGVjdGl2ZUhhc1Byb3Bvc2FscywgbWVtYmVycyBhcyBjb2xsZWN0aXZlTWVtYmVycywgcHJpbWUgYXMgY29sbGVjdGl2ZVByaW1lLCBwcm9wb3NhbCBhcyBjb2xsZWN0aXZlUHJvcG9zYWwsIHByb3Bvc2FsQ291bnQgYXMgY29sbGVjdGl2ZVByb3Bvc2FsQ291bnQsIHByb3Bvc2FsSGFzaGVzIGFzIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcywgcHJvcG9zYWxzIGFzIGNvbGxlY3RpdmVQcm9wb3NhbHMgfSBmcm9tICcuLi9jb2xsZWN0aXZlL2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCBtZW1iZXJzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlTWVtYmVycygnbWVtYmVyc2hpcCcpO1xuZXhwb3J0IGNvbnN0IGhhc1Byb3Bvc2FscyA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZUhhc1Byb3Bvc2FscygnbWVtYmVyc2hpcCcpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FsID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWwoJ21lbWJlcnNoaXAnKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbENvdW50ID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWxDb3VudCgnbWVtYmVyc2hpcCcpO1xuZXhwb3J0IGNvbnN0IHByb3Bvc2FsSGFzaGVzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWxIYXNoZXMoJ21lbWJlcnNoaXAnKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbHMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbHMoJ21lbWJlcnNoaXAnKTtcbmV4cG9ydCBjb25zdCBwcmltZSA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByaW1lKCdtZW1iZXJzaGlwJyk7XG4iLCJleHBvcnQgKiBmcm9tICcuL2luZm8uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vdmVydmlldy5qcyc7XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBkaWRVcGRhdGVUb0Jvb2wgfSBmcm9tICcuL3V0aWwuanMnO1xuZnVuY3Rpb24gcGFyc2VBY3RpdmUoaWQsIGFjdGl2ZSkge1xuICAgIGNvbnN0IGZvdW5kID0gYWN0aXZlLmZpbmQoKFtwYXJhSWRdKSA9PiBwYXJhSWQgPT09IGlkKTtcbiAgICBpZiAoZm91bmQgJiYgZm91bmRbMV0uaXNTb21lKSB7XG4gICAgICAgIGNvbnN0IFtjb2xsYXRvcklkLCByZXRyaWFibGVdID0gZm91bmRbMV0udW53cmFwKCk7XG4gICAgICAgIHJldHVybiBvYmplY3RTcHJlYWQoeyBjb2xsYXRvcklkIH0sIHJldHJpYWJsZS5pc1dpdGhSZXRyaWVzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBpc1JldHJpYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXRyaWVzOiByZXRyaWFibGUuYXNXaXRoUmV0cmllcy50b051bWJlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBpc1JldHJpYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmV0cmllczogMFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gcGFyc2VDb2xsYXRvcnMoaWQsIGNvbGxhdG9yUXVldWUpIHtcbiAgICByZXR1cm4gY29sbGF0b3JRdWV1ZS5tYXAoKHF1ZXVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gcXVldWUuZmluZCgoW3BhcmFJZF0pID0+IHBhcmFJZCA9PT0gaWQpO1xuICAgICAgICByZXR1cm4gZm91bmQgPyBmb3VuZFsxXSA6IG51bGw7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBwYXJzZShpZCwgW2FjdGl2ZSwgcmV0cnlRdWV1ZSwgc2VsZWN0ZWRUaHJlYWRzLCBkaWRVcGRhdGUsIGluZm8sIHBlbmRpbmdTd2FwLCBoZWFkcywgcmVsYXlEaXNwYXRjaFF1ZXVlXSkge1xuICAgIGlmIChpbmZvLmlzTm9uZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aXZlOiBwYXJzZUFjdGl2ZShpZCwgYWN0aXZlKSxcbiAgICAgICAgZGlkVXBkYXRlOiBkaWRVcGRhdGVUb0Jvb2woZGlkVXBkYXRlLCBpZCksXG4gICAgICAgIGhlYWRzLFxuICAgICAgICBpZCxcbiAgICAgICAgaW5mbzogb2JqZWN0U3ByZWFkKHsgaWQgfSwgaW5mby51bndyYXAoKSksXG4gICAgICAgIHBlbmRpbmdTd2FwSWQ6IHBlbmRpbmdTd2FwLnVud3JhcE9yKG51bGwpLFxuICAgICAgICByZWxheURpc3BhdGNoUXVldWUsXG4gICAgICAgIHJldHJ5Q29sbGF0b3JzOiBwYXJzZUNvbGxhdG9ycyhpZCwgcmV0cnlRdWV1ZSksXG4gICAgICAgIHNlbGVjdGVkQ29sbGF0b3JzOiBwYXJzZUNvbGxhdG9ycyhpZCwgc2VsZWN0ZWRUaHJlYWRzKVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gaW5mbyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoaWQpID0+IGFwaS5xdWVyeVsncmVnaXN0cmFyJ10gJiYgYXBpLnF1ZXJ5WydwYXJhY2hhaW5zJ11cbiAgICAgICAgPyBhcGkucXVlcnlNdWx0aShbXG4gICAgICAgICAgICBhcGkucXVlcnlbJ3JlZ2lzdHJhciddWydhY3RpdmUnXSxcbiAgICAgICAgICAgIGFwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3JldHJ5UXVldWUnXSxcbiAgICAgICAgICAgIGFwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3NlbGVjdGVkVGhyZWFkcyddLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5WydwYXJhY2hhaW5zJ11bJ2RpZFVwZGF0ZSddLFxuICAgICAgICAgICAgW2FwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3BhcmFzJ10sIGlkXSxcbiAgICAgICAgICAgIFthcGkucXVlcnlbJ3JlZ2lzdHJhciddWydwZW5kaW5nU3dhcCddLCBpZF0sXG4gICAgICAgICAgICBbYXBpLnF1ZXJ5WydwYXJhY2hhaW5zJ11bJ2hlYWRzJ10sIGlkXSxcbiAgICAgICAgICAgIFthcGkucXVlcnlbJ3BhcmFjaGFpbnMnXVsncmVsYXlEaXNwYXRjaFF1ZXVlJ10sIGlkXVxuICAgICAgICBdKVxuICAgICAgICAgICAgLnBpcGUobWFwKChyZXN1bHQpID0+IHBhcnNlKGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdQYXJhSWQnLCBpZCksIHJlc3VsdCkpKVxuICAgICAgICA6IG9mKG51bGwpKTtcbn1cbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZGlkVXBkYXRlVG9Cb29sIH0gZnJvbSAnLi91dGlsLmpzJztcbmZ1bmN0aW9uIHBhcnNlKFtpZHMsIGRpZFVwZGF0ZSwgcmVsYXlEaXNwYXRjaFF1ZXVlU2l6ZXMsIGluZm9zLCBwZW5kaW5nU3dhcHNdKSB7XG4gICAgcmV0dXJuIGlkcy5tYXAoKGlkLCBpbmRleCkgPT4gKHtcbiAgICAgICAgZGlkVXBkYXRlOiBkaWRVcGRhdGVUb0Jvb2woZGlkVXBkYXRlLCBpZCksXG4gICAgICAgIGlkLFxuICAgICAgICBpbmZvOiBvYmplY3RTcHJlYWQoeyBpZCB9LCBpbmZvc1tpbmRleF0udW53cmFwT3IobnVsbCkpLFxuICAgICAgICBwZW5kaW5nU3dhcElkOiBwZW5kaW5nU3dhcHNbaW5kZXhdLnVud3JhcE9yKG51bGwpLFxuICAgICAgICByZWxheURpc3BhdGNoUXVldWVTaXplOiByZWxheURpc3BhdGNoUXVldWVTaXplc1tpbmRleF1bMF0udG9OdW1iZXIoKVxuICAgIH0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvdmVydmlldyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBhcGkucXVlcnlbJ3JlZ2lzdHJhciddPy5bJ3BhcmFjaGFpbnMnXSAmJiBhcGkucXVlcnlbJ3BhcmFjaGFpbnMnXVxuICAgICAgICA/IGFwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3BhcmFjaGFpbnMnXSgpLnBpcGUoc3dpdGNoTWFwKChwYXJhSWRzKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIG9mKHBhcmFJZHMpLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5WydwYXJhY2hhaW5zJ11bJ2RpZFVwZGF0ZSddKCksXG4gICAgICAgICAgICBhcGkucXVlcnlbJ3BhcmFjaGFpbnMnXVsncmVsYXlEaXNwYXRjaFF1ZXVlU2l6ZSddLm11bHRpKHBhcmFJZHMpLFxuICAgICAgICAgICAgYXBpLnF1ZXJ5WydyZWdpc3RyYXInXVsncGFyYXMnXS5tdWx0aShwYXJhSWRzKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeVsncmVnaXN0cmFyJ11bJ3BlbmRpbmdTd2FwJ10ubXVsdGkocGFyYUlkcylcbiAgICAgICAgXSkpLCBtYXAocGFyc2UpKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGlkVXBkYXRlVG9Cb29sKGRpZFVwZGF0ZSwgaWQpIHtcbiAgICByZXR1cm4gZGlkVXBkYXRlLmlzU29tZVxuICAgICAgICA/IGRpZFVwZGF0ZS51bndyYXAoKS5zb21lKChwYXJhSWQpID0+IHBhcmFJZC5lcShpZCkpXG4gICAgICAgIDogZmFsc2U7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL2luZGV4ZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmZvLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZ3Jlc3MuanMnO1xuIiwiaW1wb3J0IHsgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gcGFyc2UoW2N1cnJlbnRJbmRleCwgYWN0aXZlRXJhLCBhY3RpdmVFcmFTdGFydCwgY3VycmVudEVyYSwgdmFsaWRhdG9yQ291bnRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aXZlRXJhLFxuICAgICAgICBhY3RpdmVFcmFTdGFydCxcbiAgICAgICAgY3VycmVudEVyYSxcbiAgICAgICAgY3VycmVudEluZGV4LFxuICAgICAgICB2YWxpZGF0b3JDb3VudFxuICAgIH07XG59XG5mdW5jdGlvbiBxdWVyeVN0YWtpbmcoYXBpKSB7XG4gICAgcmV0dXJuIGFwaS5xdWVyeU11bHRpKFtcbiAgICAgICAgYXBpLnF1ZXJ5LnNlc3Npb24uY3VycmVudEluZGV4LFxuICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5hY3RpdmVFcmEsXG4gICAgICAgIGFwaS5xdWVyeS5zdGFraW5nLmN1cnJlbnRFcmEsXG4gICAgICAgIGFwaS5xdWVyeS5zdGFraW5nLnZhbGlkYXRvckNvdW50XG4gICAgXSkucGlwZShtYXAoKFtjdXJyZW50SW5kZXgsIGFjdGl2ZU9wdCwgY3VycmVudEVyYSwgdmFsaWRhdG9yQ291bnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIHN0YXJ0IH0gPSBhY3RpdmVPcHQudW53cmFwT3JEZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBwYXJzZShbXG4gICAgICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgY3VycmVudEVyYS51bndyYXBPckRlZmF1bHQoKSxcbiAgICAgICAgICAgIHZhbGlkYXRvckNvdW50XG4gICAgICAgIF0pO1xuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5U2Vzc2lvbihhcGkpIHtcbiAgICByZXR1cm4gYXBpLnF1ZXJ5LnNlc3Npb24uY3VycmVudEluZGV4KCkucGlwZShtYXAoKGN1cnJlbnRJbmRleCkgPT4gcGFyc2UoW1xuICAgICAgICBjdXJyZW50SW5kZXgsXG4gICAgICAgIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdFcmFJbmRleCcpLFxuICAgICAgICBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnT3B0aW9uPE1vbWVudD4nKSxcbiAgICAgICAgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0VyYUluZGV4JyksXG4gICAgICAgIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCd1MzInKVxuICAgIF0pKSk7XG59XG5mdW5jdGlvbiBlbXB0eShhcGkpIHtcbiAgICByZXR1cm4gb2YocGFyc2UoW1xuICAgICAgICBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnU2Vzc2lvbkluZGV4JywgMSksXG4gICAgICAgIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdFcmFJbmRleCcpLFxuICAgICAgICBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnT3B0aW9uPE1vbWVudD4nKSxcbiAgICAgICAgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0VyYUluZGV4JyksXG4gICAgICAgIGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCd1MzInKVxuICAgIF0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmRleGVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS5zZXNzaW9uXG4gICAgICAgID8gYXBpLnF1ZXJ5LnN0YWtpbmdcbiAgICAgICAgICAgID8gcXVlcnlTdGFraW5nKGFwaSlcbiAgICAgICAgICAgIDogcXVlcnlTZXNzaW9uKGFwaSlcbiAgICAgICAgOiBlbXB0eShhcGkpKTtcbn1cbiIsImltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCB0aGUgc2Vzc2lvbiBhbmQgZXJhIHF1ZXJ5IGFuZCBjYWxjdWxhdGVzIHNwZWNpZmljIHZhbHVlcyBvbiBpdCBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXNzaW9uIGFuZCBlcmFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5kZXJpdmUuc2Vzc2lvbi5pbmRleGVzKCkucGlwZShtYXAoKGluZGV4ZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkxlbmd0aCA9IGFwaS5jb25zdHM/LmJhYmU/LmVwb2NoRHVyYXRpb24gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ3U2NCcsIDEpO1xuICAgICAgICBjb25zdCBzZXNzaW9uc1BlckVyYSA9IGFwaS5jb25zdHM/LnN0YWtpbmc/LnNlc3Npb25zUGVyRXJhIHx8IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdTZXNzaW9uSW5kZXgnLCAxKTtcbiAgICAgICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBlcmFMZW5ndGg6IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCbG9ja051bWJlcicsIHNlc3Npb25zUGVyRXJhLm11bChzZXNzaW9uTGVuZ3RoKSksXG4gICAgICAgICAgICBpc0Vwb2NoOiAhIWFwaS5xdWVyeS5iYWJlLFxuICAgICAgICAgICAgc2Vzc2lvbkxlbmd0aCxcbiAgICAgICAgICAgIHNlc3Npb25zUGVyRXJhXG4gICAgICAgIH0sIGluZGV4ZXMpO1xuICAgIH0pKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIHdpdGhQcm9ncmVzc0ZpZWxkKGZpZWxkKSB7XG4gICAgcmV0dXJuIChpbnN0YW5jZUlkLCBhcGkpID0+IG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLmRlcml2ZS5zZXNzaW9uLnByb2dyZXNzKCkucGlwZShtYXAoKGluZm8pID0+IGluZm9bZmllbGRdKSkpO1xufVxuZnVuY3Rpb24gY3JlYXRlRGVyaXZlKGFwaSwgaW5mbywgW2N1cnJlbnRTbG90LCBlcG9jaEluZGV4LCBlcG9jaE9yR2VuZXNpc1N0YXJ0U2xvdCwgYWN0aXZlRXJhU3RhcnRTZXNzaW9uSW5kZXhdKSB7XG4gICAgY29uc3QgZXBvY2hTdGFydFNsb3QgPSBlcG9jaEluZGV4Lm11bChpbmZvLnNlc3Npb25MZW5ndGgpLmlhZGQoZXBvY2hPckdlbmVzaXNTdGFydFNsb3QpO1xuICAgIGNvbnN0IHNlc3Npb25Qcm9ncmVzcyA9IGN1cnJlbnRTbG90LnN1YihlcG9jaFN0YXJ0U2xvdCk7XG4gICAgY29uc3QgZXJhUHJvZ3Jlc3MgPSBpbmZvLmN1cnJlbnRJbmRleC5zdWIoYWN0aXZlRXJhU3RhcnRTZXNzaW9uSW5kZXgpLmltdWwoaW5mby5zZXNzaW9uTGVuZ3RoKS5pYWRkKHNlc3Npb25Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7XG4gICAgICAgIGVyYVByb2dyZXNzOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmxvY2tOdW1iZXInLCBlcmFQcm9ncmVzcyksXG4gICAgICAgIHNlc3Npb25Qcm9ncmVzczogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0Jsb2NrTnVtYmVyJywgc2Vzc2lvblByb2dyZXNzKVxuICAgIH0sIGluZm8pO1xufVxuZnVuY3Rpb24gcXVlcnlBdXJhKGFwaSkge1xuICAgIHJldHVybiBhcGkuZGVyaXZlLnNlc3Npb24uaW5mbygpLnBpcGUobWFwKChpbmZvKSA9PiBvYmplY3RTcHJlYWQoe1xuICAgICAgICBlcmFQcm9ncmVzczogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0Jsb2NrTnVtYmVyJyksXG4gICAgICAgIHNlc3Npb25Qcm9ncmVzczogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0Jsb2NrTnVtYmVyJylcbiAgICB9LCBpbmZvKSkpO1xufVxuZnVuY3Rpb24gcXVlcnlCYWJlKGFwaSkge1xuICAgIHJldHVybiBhcGkuZGVyaXZlLnNlc3Npb24uaW5mbygpLnBpcGUoc3dpdGNoTWFwKChpbmZvKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2YoaW5mbyksXG4gICAgICAgIC8vIHdlIG1heSBoYXZlIG5vIHN0YWtpbmcsIGJ1dCBoYXZlIGJhYmUgKHBlcm1pc3Npb25lZClcbiAgICAgICAgYXBpLnF1ZXJ5LnN0YWtpbmc/LmVyYXNTdGFydFNlc3Npb25JbmRleFxuICAgICAgICAgICAgPyBhcGkucXVlcnlNdWx0aShbXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LmJhYmUuY3VycmVudFNsb3QsXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LmJhYmUuZXBvY2hJbmRleCxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuYmFiZS5nZW5lc2lzU2xvdCxcbiAgICAgICAgICAgICAgICBbYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YXJ0U2Vzc2lvbkluZGV4LCBpbmZvLmFjdGl2ZUVyYV1cbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IGFwaS5xdWVyeU11bHRpKFtcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuYmFiZS5jdXJyZW50U2xvdCxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuYmFiZS5lcG9jaEluZGV4LFxuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5iYWJlLmdlbmVzaXNTbG90XG4gICAgICAgICAgICBdKVxuICAgIF0pKSwgbWFwKChbaW5mbywgW2N1cnJlbnRTbG90LCBlcG9jaEluZGV4LCBnZW5lc2lzU2xvdCwgb3B0U3RhcnRJbmRleF1dKSA9PiBbXG4gICAgICAgIGluZm8sIFtjdXJyZW50U2xvdCwgZXBvY2hJbmRleCwgZ2VuZXNpc1Nsb3QsIG9wdFN0YXJ0SW5kZXggJiYgb3B0U3RhcnRJbmRleC5pc1NvbWUgPyBvcHRTdGFydEluZGV4LnVud3JhcCgpIDogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1Nlc3Npb25JbmRleCcsIDEpXVxuICAgIF0pKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwgdGhlIHNlc3Npb24gYW5kIGVyYSBxdWVyeSBhbmQgY2FsY3VsYXRlcyBzcGVjaWZpYyB2YWx1ZXMgb24gaXQgYXMgdGhlIGxlbmd0aCBvZiB0aGUgc2Vzc2lvbiBhbmQgZXJhc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3MoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLnF1ZXJ5LmJhYmVcbiAgICAgICAgPyBxdWVyeUJhYmUoYXBpKS5waXBlKG1hcCgoW2luZm8sIHNsb3RzXSkgPT4gY3JlYXRlRGVyaXZlKGFwaSwgaW5mbywgc2xvdHMpKSlcbiAgICAgICAgOiBxdWVyeUF1cmEoYXBpKSk7XG59XG5leHBvcnQgY29uc3QgZXJhTGVuZ3RoID0gLyojX19QVVJFX18qLyB3aXRoUHJvZ3Jlc3NGaWVsZCgnZXJhTGVuZ3RoJyk7XG5leHBvcnQgY29uc3QgZXJhUHJvZ3Jlc3MgPSAvKiNfX1BVUkVfXyovIHdpdGhQcm9ncmVzc0ZpZWxkKCdlcmFQcm9ncmVzcycpO1xuZXhwb3J0IGNvbnN0IHNlc3Npb25Qcm9ncmVzcyA9IC8qI19fUFVSRV9fKi8gd2l0aFByb2dyZXNzRmllbGQoJ3Nlc3Npb25Qcm9ncmVzcycpO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5mdW5jdGlvbiBnZXRQcmV2KGFwaSkge1xuICAgIHJldHVybiBhcGkucXVlcnkuc29jaWV0eS5jYW5kaWRhdGVzKCkucGlwZShzd2l0Y2hNYXAoKGNhbmRpZGF0ZXMpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZihjYW5kaWRhdGVzKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHlbJ3N1c3BlbmRlZENhbmRpZGF0ZXMnXS5tdWx0aShjYW5kaWRhdGVzLm1hcCgoeyB3aG8gfSkgPT4gd2hvKSlcbiAgICBdKSksIG1hcCgoW2NhbmRpZGF0ZXMsIHN1c3BlbmRlZF0pID0+IGNhbmRpZGF0ZXMubWFwKCh7IGtpbmQsIHZhbHVlLCB3aG8gfSwgaW5kZXgpID0+ICh7XG4gICAgICAgIGFjY291bnRJZDogd2hvLFxuICAgICAgICBpc1N1c3BlbmRlZDogc3VzcGVuZGVkW2luZGV4XS5pc1NvbWUsXG4gICAgICAgIGtpbmQsXG4gICAgICAgIHZhbHVlXG4gICAgfSkpKSk7XG59XG5mdW5jdGlvbiBnZXRDdXJyKGFwaSkge1xuICAgIHJldHVybiBhcGkucXVlcnkuc29jaWV0eS5jYW5kaWRhdGVzLmVudHJpZXMoKS5waXBlKG1hcCgoZW50cmllcykgPT4gZW50cmllc1xuICAgICAgICAuZmlsdGVyKChbLCBvcHRdKSA9PiBvcHQuaXNTb21lKVxuICAgICAgICAubWFwKChbeyBhcmdzOiBbYWNjb3VudElkXSB9LCBvcHRdKSA9PiBbYWNjb3VudElkLCBvcHQudW53cmFwKCldKVxuICAgICAgICAvLyBGSVhNRSBXZSBhcmUgbWlzc2luZyB0aGUgbmV3IGZpZWxkcyBmcm9tIHRoZSBjYW5kaWRhdGUgcmVjb3JkXG4gICAgICAgIC5tYXAoKFthY2NvdW50SWQsIHsgYmlkLCBraW5kIH1dKSA9PiAoe1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIGlzU3VzcGVuZGVkOiBmYWxzZSxcbiAgICAgICAga2luZCxcbiAgICAgICAgdmFsdWU6IGJpZFxuICAgIH0pKSkpO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBjYW5kaWRhdGUgaW5mbyBmb3IgYSBzb2NpZXR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5kaWRhdGVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS5zb2NpZXR5WydzdXNwZW5kZWRDYW5kaWRhdGVzJ10gJiYgYXBpLnF1ZXJ5LnNvY2lldHkuY2FuZGlkYXRlcy5jcmVhdG9yLm1ldGEudHlwZS5pc1BsYWluXG4gICAgICAgID8gZ2V0UHJldihhcGkpXG4gICAgICAgIDogZ2V0Q3VycihhcGkpKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY2FuZGlkYXRlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZm8uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW1iZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW1iZXJzLmpzJztcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldCB0aGUgb3ZlcmFsbCBpbmZvIGZvciBhIHNvY2lldHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZm8oaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIGFwaS5xdWVyeS5zb2NpZXR5LmJpZHMoKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHlbJ2RlZmVuZGVyJ11cbiAgICAgICAgICAgID8gYXBpLnF1ZXJ5LnNvY2lldHlbJ2RlZmVuZGVyJ10oKVxuICAgICAgICAgICAgOiBvZih1bmRlZmluZWQpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5mb3VuZGVyKCksXG4gICAgICAgIGFwaS5xdWVyeS5zb2NpZXR5LmhlYWQoKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHlbJ21heE1lbWJlcnMnXVxuICAgICAgICAgICAgPyBhcGkucXVlcnkuc29jaWV0eVsnbWF4TWVtYmVycyddKClcbiAgICAgICAgICAgIDogb2YodW5kZWZpbmVkKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHkucG90KClcbiAgICBdKS5waXBlKG1hcCgoW2JpZHMsIGRlZmVuZGVyLCBmb3VuZGVyLCBoZWFkLCBtYXhNZW1iZXJzLCBwb3RdKSA9PiAoe1xuICAgICAgICBiaWRzLFxuICAgICAgICBkZWZlbmRlcjogZGVmZW5kZXI/LnVud3JhcE9yKHVuZGVmaW5lZCksXG4gICAgICAgIGZvdW5kZXI6IGZvdW5kZXIudW53cmFwT3IodW5kZWZpbmVkKSxcbiAgICAgICAgaGFzRGVmZW5kZXI6IChkZWZlbmRlcj8uaXNTb21lICYmIGhlYWQuaXNTb21lICYmICFoZWFkLmVxKGRlZmVuZGVyKSkgfHwgZmFsc2UsXG4gICAgICAgIGhlYWQ6IGhlYWQudW53cmFwT3IodW5kZWZpbmVkKSxcbiAgICAgICAgbWF4TWVtYmVycyxcbiAgICAgICAgcG90XG4gICAgfSkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldCB0aGUgbWVtYmVyIGluZm8gZm9yIGEgc29jaWV0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWQpID0+IGFwaS5kZXJpdmUuc29jaWV0eS5fbWVtYmVycyhbYWNjb3VudElkXSkucGlwZShtYXAoKFtyZXN1bHRdKSA9PiByZXN1bHQpKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIF9tZW1iZXJzUHJldihhcGksIGFjY291bnRJZHMpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9mKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5wYXlvdXRzLm11bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eVsnc3RyaWtlcyddLm11bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5kZWZlbmRlclZvdGVzLm11bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5zdXNwZW5kZWRNZW1iZXJzLm11bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eVsndm91Y2hpbmcnXS5tdWx0aShhY2NvdW50SWRzKVxuICAgIF0pLnBpcGUobWFwKChbYWNjb3VudElkcywgcGF5b3V0cywgc3RyaWtlcywgZGVmZW5kZXJWb3Rlcywgc3VzcGVuZGVkLCB2b3VjaGluZ10pID0+IGFjY291bnRJZHMubWFwKChhY2NvdW50SWQsIGluZGV4KSA9PiAoe1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIGlzRGVmZW5kZXJWb3RlcjogZGVmZW5kZXJWb3Rlc1tpbmRleF0uaXNTb21lLFxuICAgICAgICBpc1N1c3BlbmRlZDogc3VzcGVuZGVkW2luZGV4XS5pc1RydWUsXG4gICAgICAgIHBheW91dHM6IHBheW91dHNbaW5kZXhdLFxuICAgICAgICBzdHJpa2VzOiBzdHJpa2VzW2luZGV4XSxcbiAgICAgICAgdm90ZTogZGVmZW5kZXJWb3Rlc1tpbmRleF0udW53cmFwT3IodW5kZWZpbmVkKSxcbiAgICAgICAgdm91Y2hpbmc6IHZvdWNoaW5nW2luZGV4XS51bndyYXBPcih1bmRlZmluZWQpXG4gICAgfSkpKSk7XG59XG5mdW5jdGlvbiBfbWVtYmVyc0N1cnIoYXBpLCBhY2NvdW50SWRzKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZihhY2NvdW50SWRzKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHkubWVtYmVycy5tdWx0aShhY2NvdW50SWRzKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHkucGF5b3V0cy5tdWx0aShhY2NvdW50SWRzKSxcbiAgICAgICAgYXBpLnF1ZXJ5LnNvY2lldHkuY2hhbGxlbmdlUm91bmRDb3VudCgpLnBpcGUoc3dpdGNoTWFwKChyb3VuZCkgPT4gYXBpLnF1ZXJ5LnNvY2lldHkuZGVmZW5kZXJWb3Rlcy5tdWx0aShhY2NvdW50SWRzLm1hcCgoYWNjb3VudElkKSA9PiBbcm91bmQsIGFjY291bnRJZF0pKSkpLFxuICAgICAgICBhcGkucXVlcnkuc29jaWV0eS5zdXNwZW5kZWRNZW1iZXJzLm11bHRpKGFjY291bnRJZHMpXG4gICAgXSkucGlwZShtYXAoKFthY2NvdW50SWRzLCBtZW1iZXJzLCBwYXlvdXRzLCBkZWZlbmRlclZvdGVzLCBzdXNwZW5kZWRNZW1iZXJzXSkgPT4gYWNjb3VudElkc1xuICAgICAgICAubWFwKChhY2NvdW50SWQsIGluZGV4KSA9PiBtZW1iZXJzW2luZGV4XS5pc1NvbWVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgICAgICBpc0RlZmVuZGVyVm90ZXI6IGRlZmVuZGVyVm90ZXNbaW5kZXhdLmlzU29tZSxcbiAgICAgICAgICAgIGlzU3VzcGVuZGVkOiBzdXNwZW5kZWRNZW1iZXJzW2luZGV4XS5pc1NvbWUsXG4gICAgICAgICAgICBtZW1iZXI6IG1lbWJlcnNbaW5kZXhdLnVud3JhcCgpLFxuICAgICAgICAgICAgcGF5b3V0czogcGF5b3V0c1tpbmRleF0ucGF5b3V0c1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbClcbiAgICAgICAgLmZpbHRlcigobSkgPT4gISFtKVxuICAgICAgICAubWFwKCh7IGFjY291bnRJZCwgaXNEZWZlbmRlclZvdGVyLCBpc1N1c3BlbmRlZCwgbWVtYmVyLCBwYXlvdXRzIH0pID0+ICh7XG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgaXNEZWZlbmRlclZvdGVyLFxuICAgICAgICBpc1N1c3BlbmRlZCxcbiAgICAgICAgcGF5b3V0cyxcbiAgICAgICAgc3RyaWtlczogbWVtYmVyLnN0cmlrZXMsXG4gICAgICAgIHZvdWNoaW5nOiBtZW1iZXIudm91Y2hpbmcudW53cmFwT3IodW5kZWZpbmVkKVxuICAgIH0pKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9tZW1iZXJzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWRzKSA9PiBhcGkucXVlcnkuc29jaWV0eS5tZW1iZXJzLmNyZWF0b3IubWV0YS50eXBlLmlzTWFwXG4gICAgICAgID8gX21lbWJlcnNDdXJyKGFwaSwgYWNjb3VudElkcylcbiAgICAgICAgOiBfbWVtYmVyc1ByZXYoYXBpLCBhY2NvdW50SWRzKSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIG1lbWJlciBpbmZvIGZvciBhIHNvY2lldHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlcnMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLnF1ZXJ5LnNvY2lldHkubWVtYmVycy5jcmVhdG9yLm1ldGEudHlwZS5pc01hcFxuICAgICAgICA/IGFwaS5xdWVyeS5zb2NpZXR5Lm1lbWJlcnMua2V5cygpLnBpcGUoc3dpdGNoTWFwKChrZXlzKSA9PiBhcGkuZGVyaXZlLnNvY2lldHkuX21lbWJlcnMoa2V5cy5tYXAoKHsgYXJnczogW2FjY291bnRJZF0gfSkgPT4gYWNjb3VudElkKSkpKVxuICAgICAgICA6IGFwaS5xdWVyeS5zb2NpZXR5Lm1lbWJlcnMoKS5waXBlKHN3aXRjaE1hcCgobWVtYmVycykgPT4gYXBpLmRlcml2ZS5zb2NpZXR5Ll9tZW1iZXJzKG1lbWJlcnMpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJOLCBCTl9aRVJPLCBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IFFVRVJZX09QVFMgPSB7XG4gICAgd2l0aERlc3RpbmF0aW9uOiB0cnVlLFxuICAgIHdpdGhMZWRnZXI6IHRydWUsXG4gICAgd2l0aE5vbWluYXRpb25zOiB0cnVlLFxuICAgIHdpdGhQcmVmczogdHJ1ZVxufTtcbmZ1bmN0aW9uIGdyb3VwQnlFcmEobGlzdCkge1xuICAgIHJldHVybiBsaXN0LnJlZHVjZSgobWFwLCB7IGVyYSwgdmFsdWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBlcmEudG9TdHJpbmcoKTtcbiAgICAgICAgbWFwW2tleV0gPSAobWFwW2tleV0gfHwgQk5fWkVSTykuYWRkKHZhbHVlLnVud3JhcCgpKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCB7fSk7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVVbmxvY2tpbmcoYXBpLCBzdGFraW5nTGVkZ2VyLCBzZXNzaW9uSW5mbykge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBPYmplY3RcbiAgICAgICAgLmVudHJpZXMoZ3JvdXBCeUVyYSgoc3Rha2luZ0xlZGdlcj8udW5sb2NraW5nIHx8IFtdKS5maWx0ZXIoKHsgZXJhIH0pID0+IGVyYS51bndyYXAoKS5ndChzZXNzaW9uSW5mby5hY3RpdmVFcmEpKSkpXG4gICAgICAgIC5tYXAoKFtlcmFTdHJpbmcsIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgcmVtYWluaW5nRXJhczogbmV3IEJOKGVyYVN0cmluZykuaXN1YihzZXNzaW9uSW5mby5hY3RpdmVFcmEpLFxuICAgICAgICB2YWx1ZTogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnLCB2YWx1ZSlcbiAgICB9KSk7XG4gICAgcmV0dXJuIHJlc3VsdHMubGVuZ3RoXG4gICAgICAgID8gcmVzdWx0c1xuICAgICAgICA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlZGVlbWFibGVTdW0oYXBpLCBzdGFraW5nTGVkZ2VyLCBzZXNzaW9uSW5mbykge1xuICAgIHJldHVybiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScsIChzdGFraW5nTGVkZ2VyPy51bmxvY2tpbmcgfHwgW10pLnJlZHVjZSgodG90YWwsIHsgZXJhLCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIC8vIGFsaWducyB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9ibG9iL2ZkZmRjNzNmOWU2NGRjNDc5MzRiNzJlYjlhZjNlMTk4OWU0YmE2OTkvZnJhbWUvc3Rha2luZy9zcmMvcGFsbGV0L21vZC5ycyNMOTczLUw5NzVcbiAgICAgICAgLy8gKGVuc3VyZSBjdXJyZW50RXJhID49IGVyYSBwYXNzZWQsIGFzIHBlciBodHRwczovL2dpdGh1Yi5jb20vcGFyaXR5dGVjaC9zdWJzdHJhdGUvYmxvYi9mZGZkYzczZjllNjRkYzQ3OTM0YjcyZWI5YWYzZTE5ODllNGJhNjk5L2ZyYW1lL3N0YWtpbmcvc3JjL2xpYi5ycyNMNDc3LUw0OTQpXG4gICAgICAgIC8vIE5PVEU6IFByZXZpb3VzbHkgd2UgdXNlZCBhY3RpdmVFcmEgPj0gZXJhLCB3aGljaCBpcyBpbmNvcnJlY3QgZm9yIHRoZSBsYXN0IHNlc3Npb25cbiAgICAgICAgcmV0dXJuIGVyYS51bndyYXAoKS5ndChzZXNzaW9uSW5mby5jdXJyZW50RXJhKVxuICAgICAgICAgICAgPyB0b3RhbFxuICAgICAgICAgICAgOiB0b3RhbC5pYWRkKHZhbHVlLnVud3JhcCgpKTtcbiAgICB9LCBuZXcgQk4oMCkpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlUmVzdWx0KGFwaSwgc2Vzc2lvbkluZm8sIGtleXMsIHF1ZXJ5KSB7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7fSwga2V5cywgcXVlcnksIHtcbiAgICAgICAgcmVkZWVtYWJsZTogcmVkZWVtYWJsZVN1bShhcGksIHF1ZXJ5LnN0YWtpbmdMZWRnZXIsIHNlc3Npb25JbmZvKSxcbiAgICAgICAgdW5sb2NraW5nOiBjYWxjdWxhdGVVbmxvY2tpbmcoYXBpLCBxdWVyeS5zdGFraW5nTGVkZ2VyLCBzZXNzaW9uSW5mbylcbiAgICB9KTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZyb20gYSBsaXN0IG9mIHN0YXNoZXMsIGZpbGwgaW4gYWxsIHRoZSByZWxldmFudCBzdGFraW5nIGRldGFpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY291bnRzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWRzLCBvcHRzID0gUVVFUllfT1BUUykgPT4gYXBpLmRlcml2ZS5zZXNzaW9uLmluZm8oKS5waXBlKHN3aXRjaE1hcCgoc2Vzc2lvbkluZm8pID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcua2V5c011bHRpKGFjY291bnRJZHMpLFxuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcucXVlcnlNdWx0aShhY2NvdW50SWRzLCBvcHRzKVxuICAgIF0pLnBpcGUobWFwKChba2V5cywgcXVlcmllc10pID0+IHF1ZXJpZXMubWFwKChxLCBpbmRleCkgPT4gcGFyc2VSZXN1bHQoYXBpLCBzZXNzaW9uSW5mbywga2V5c1tpbmRleF0sIHEpKSkpKSkpO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRnJvbSBhIHN0YXNoLCByZXRyaWV2ZSB0aGUgY29udHJvbGxlcklkIGFuZCBmaWxsIGluIGFsbCB0aGUgcmVsZXZhbnQgc3Rha2luZyBkZXRhaWxzXG4gKi9cbmV4cG9ydCBjb25zdCBhY2NvdW50ID0gLyojX19QVVJFX18qLyBmaXJzdE1lbW8oKGFwaSwgYWNjb3VudElkLCBvcHRzKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuYWNjb3VudHMoW2FjY291bnRJZF0sIG9wdHMpKTtcbiIsImltcG9ydCB7IGRlcml2ZUNhY2hlIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJhQ2FjaGUoQ0FDSEVfS0VZLCBlcmEsIHdpdGhBY3RpdmUpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke0NBQ0hFX0tFWX0tJHtlcmEudG9TdHJpbmcoKX1gO1xuICAgIHJldHVybiBbXG4gICAgICAgIGNhY2hlS2V5LFxuICAgICAgICB3aXRoQWN0aXZlXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBkZXJpdmVDYWNoZS5nZXQoY2FjaGVLZXkpXG4gICAgXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcmFNdWx0aUNhY2hlKENBQ0hFX0tFWSwgZXJhcywgd2l0aEFjdGl2ZSkge1xuICAgIGNvbnN0IGNhY2hlZCA9IHdpdGhBY3RpdmVcbiAgICAgICAgPyBbXVxuICAgICAgICA6IGVyYXNcbiAgICAgICAgICAgIC5tYXAoKGUpID0+IGRlcml2ZUNhY2hlLmdldChgJHtDQUNIRV9LRVl9LSR7ZS50b1N0cmluZygpfWApKVxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gISF2KTtcbiAgICByZXR1cm4gY2FjaGVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldEVyYUNhY2hlKGNhY2hlS2V5LCB3aXRoQWN0aXZlLCB2YWx1ZSkge1xuICAgICF3aXRoQWN0aXZlICYmIGRlcml2ZUNhY2hlLnNldChjYWNoZUtleSwgdmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcmFNdWx0aUNhY2hlKENBQ0hFX0tFWSwgd2l0aEFjdGl2ZSwgdmFsdWVzKSB7XG4gICAgIXdpdGhBY3RpdmUgJiYgdmFsdWVzLmZvckVhY2goKHYpID0+IGRlcml2ZUNhY2hlLnNldChgJHtDQUNIRV9LRVl9LSR7di5lcmEudG9TdHJpbmcoKX1gLCB2KSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJDYWNoZWRFcmFzKGVyYXMsIGNhY2hlZCwgcXVlcnkpIHtcbiAgICByZXR1cm4gZXJhc1xuICAgICAgICAubWFwKChlKSA9PiBjYWNoZWQuZmluZCgoeyBlcmEgfSkgPT4gZS5lcShlcmEpKSB8fFxuICAgICAgICBxdWVyeS5maW5kKCh7IGVyYSB9KSA9PiBlLmVxKGVyYSkpKVxuICAgICAgICAuZmlsdGVyKChlKSA9PiAhIWUpO1xufVxuIiwiaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSB0aGUgc3Rha2luZyBvdmVydmlldywgaW5jbHVkaW5nIGVsZWN0ZWQgYW5kIHBvaW50cyBlYXJuZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRQb2ludHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gYXBpLmRlcml2ZS5zZXNzaW9uLmluZGV4ZXMoKS5waXBlKHN3aXRjaE1hcCgoeyBhY3RpdmVFcmEgfSkgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1Jld2FyZFBvaW50cyhhY3RpdmVFcmEpKSkpO1xufVxuIiwiaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGFycmF5RmxhdHRlbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IERFRkFVTFRfRkxBR1MgPSB7IHdpdGhDb250cm9sbGVyOiB0cnVlLCB3aXRoRXhwb3N1cmU6IHRydWUsIHdpdGhQcmVmczogdHJ1ZSB9O1xuZnVuY3Rpb24gY29tYmluZUFjY291bnRzKG5leHRFbGVjdGVkLCB2YWxpZGF0b3JzKSB7XG4gICAgcmV0dXJuIGFycmF5RmxhdHRlbihbbmV4dEVsZWN0ZWQsIHZhbGlkYXRvcnMuZmlsdGVyKCh2KSA9PiAhbmV4dEVsZWN0ZWQuZmluZCgobikgPT4gbi5lcSh2KSkpXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZWxlY3RlZEluZm8oaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGZsYWdzID0gREVGQVVMVF9GTEFHUywgcGFnZSA9IDApID0+IGFwaS5kZXJpdmUuc3Rha2luZy52YWxpZGF0b3JzKCkucGlwZShzd2l0Y2hNYXAoKHsgbmV4dEVsZWN0ZWQsIHZhbGlkYXRvcnMgfSkgPT4gYXBpLmRlcml2ZS5zdGFraW5nLnF1ZXJ5TXVsdGkoY29tYmluZUFjY291bnRzKG5leHRFbGVjdGVkLCB2YWxpZGF0b3JzKSwgZmxhZ3MsIHBhZ2UpLnBpcGUobWFwKChpbmZvKSA9PiAoe1xuICAgICAgICBpbmZvLFxuICAgICAgICBuZXh0RWxlY3RlZCxcbiAgICAgICAgdmFsaWRhdG9yc1xuICAgIH0pKSkpKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRFcmFDYWNoZSwgc2V0RXJhQ2FjaGUgfSBmcm9tICcuL2NhY2hlLmpzJztcbmltcG9ydCB7IGNvbWJpbmVFcmFzLCBlcmFzSGlzdG9yaWNBcHBseSwgc2luZ2xlRXJhIH0gZnJvbSAnLi91dGlsLmpzJztcbmNvbnN0IENBQ0hFX0tFWSA9ICdlcmFFeHBvc3VyZSc7XG5mdW5jdGlvbiBtYXBTdGFrZXJzQ2xpcHBlZChlcmEsIHN0YWtlcnMpIHtcbiAgICBjb25zdCBub21pbmF0b3JzID0ge307XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuICAgIHN0YWtlcnMuZm9yRWFjaCgoW2tleSwgZXhwb3N1cmVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcklkID0ga2V5LmFyZ3NbMV0udG9TdHJpbmcoKTtcbiAgICAgICAgdmFsaWRhdG9yc1t2YWxpZGF0b3JJZF0gPSBleHBvc3VyZTtcbiAgICAgICAgZXhwb3N1cmUub3RoZXJzLmZvckVhY2goKHsgd2hvIH0sIHZhbGlkYXRvckluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub21pbmF0b3JJZCA9IHdoby50b1N0cmluZygpO1xuICAgICAgICAgICAgbm9taW5hdG9yc1tub21pbmF0b3JJZF0gPSBub21pbmF0b3JzW25vbWluYXRvcklkXSB8fCBbXTtcbiAgICAgICAgICAgIG5vbWluYXRvcnNbbm9taW5hdG9ySWRdLnB1c2goeyB2YWxpZGF0b3JJZCwgdmFsaWRhdG9ySW5kZXggfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGVyYSwgbm9taW5hdG9ycywgdmFsaWRhdG9ycyB9O1xufVxuZnVuY3Rpb24gbWFwU3Rha2Vyc1BhZ2VkKGVyYSwgc3Rha2Vycykge1xuICAgIGNvbnN0IG5vbWluYXRvcnMgPSB7fTtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0ge307XG4gICAgc3Rha2Vycy5mb3JFYWNoKChba2V5LCBleHBvc3VyZU9wdF0pID0+IHtcbiAgICAgICAgaWYgKGV4cG9zdXJlT3B0LmlzU29tZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ySWQgPSBrZXkuYXJnc1sxXS50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgZXhwb3N1cmUgPSBleHBvc3VyZU9wdC51bndyYXAoKTtcbiAgICAgICAgICAgIHZhbGlkYXRvcnNbdmFsaWRhdG9ySWRdID0gZXhwb3N1cmU7XG4gICAgICAgICAgICBleHBvc3VyZS5vdGhlcnMuZm9yRWFjaCgoeyB3aG8gfSwgdmFsaWRhdG9ySW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub21pbmF0b3JJZCA9IHdoby50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG5vbWluYXRvcnNbbm9taW5hdG9ySWRdID0gbm9taW5hdG9yc1tub21pbmF0b3JJZF0gfHwgW107XG4gICAgICAgICAgICAgICAgbm9taW5hdG9yc1tub21pbmF0b3JJZF0ucHVzaCh7IHZhbGlkYXRvcklkLCB2YWxpZGF0b3JJbmRleCB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgZXJhLCBub21pbmF0b3JzLCB2YWxpZGF0b3JzIH07XG59XG4vKipcbiAqIGVyYXNTdGFrZXJzQ2xpcHBlZCB3aWxsIGJlIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkIHdpdGggZXJhc1N0YWtlcnNQYWdlZC4gVGhlcmVmb3JlIHN1cHBvcnQgaXMgZ2l2ZW4gZm9yIGJvdGhcbiAqIHN0b3JhZ2UgcXVlcmllcyB1bnRpbCBlcmFzU3Rha2Vyc0NsaXBwZWQgaGFzIGJlZW4gY29tcGxldGVseSBvdXQgb2YgdXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX2VyYUV4cG9zdXJlKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChlcmEsIHdpdGhBY3RpdmUgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCBbY2FjaGVLZXksIGNhY2hlZF0gPSBnZXRFcmFDYWNoZShDQUNIRV9LRVksIGVyYSwgd2l0aEFjdGl2ZSk7XG4gICAgICAgIHJldHVybiBjYWNoZWRcbiAgICAgICAgICAgID8gb2YoY2FjaGVkKVxuICAgICAgICAgICAgOiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc1BhZ2VkXG4gICAgICAgICAgICAgICAgPyBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc1BhZ2VkLmVudHJpZXMoZXJhKS5waXBlKG1hcCgocikgPT4gc2V0RXJhQ2FjaGUoY2FjaGVLZXksIHdpdGhBY3RpdmUsIG1hcFN0YWtlcnNQYWdlZChlcmEsIHIpKSkpXG4gICAgICAgICAgICAgICAgOiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc0NsaXBwZWQuZW50cmllcyhlcmEpLnBpcGUobWFwKChyKSA9PiBzZXRFcmFDYWNoZShjYWNoZUtleSwgd2l0aEFjdGl2ZSwgbWFwU3Rha2Vyc0NsaXBwZWQoZXJhLCByKSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBlcmFFeHBvc3VyZSA9IC8qI19fUFVSRV9fKi8gc2luZ2xlRXJhKCdfZXJhRXhwb3N1cmUnKTtcbmV4cG9ydCBjb25zdCBfZXJhc0V4cG9zdXJlID0gLyojX19QVVJFX18qLyBjb21iaW5lRXJhcygnX2VyYUV4cG9zdXJlJyk7XG5leHBvcnQgY29uc3QgZXJhc0V4cG9zdXJlID0gLyojX19QVVJFX18qLyBlcmFzSGlzdG9yaWNBcHBseSgnX2VyYXNFeHBvc3VyZScpO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQk5fT05FLCBCTl9aRVJPIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGVyYXNIaXN0b3JpYyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAod2l0aEFjdGl2ZSkgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIGFwaS5xdWVyeS5zdGFraW5nLmFjdGl2ZUVyYSgpLFxuICAgICAgICBhcGkuY29uc3RzLnN0YWtpbmcuaGlzdG9yeURlcHRoXG4gICAgICAgICAgICA/IG9mKGFwaS5jb25zdHMuc3Rha2luZy5oaXN0b3J5RGVwdGgpXG4gICAgICAgICAgICA6IGFwaS5xdWVyeS5zdGFraW5nWydoaXN0b3J5RGVwdGgnXSgpXG4gICAgXSkucGlwZShtYXAoKFthY3RpdmVFcmFPcHQsIGhpc3RvcnlEZXB0aF0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IG1heCA9IGhpc3RvcnlEZXB0aC50b051bWJlcigpO1xuICAgICAgICBjb25zdCBhY3RpdmVFcmEgPSBhY3RpdmVFcmFPcHQudW53cmFwT3JEZWZhdWx0KCkuaW5kZXg7XG4gICAgICAgIGxldCBsYXN0RXJhID0gYWN0aXZlRXJhO1xuICAgICAgICB3aGlsZSAobGFzdEVyYS5ndGUoQk5fWkVSTykgJiYgKHJlc3VsdC5sZW5ndGggPCBtYXgpKSB7XG4gICAgICAgICAgICBpZiAoKGxhc3RFcmEgIT09IGFjdGl2ZUVyYSkgfHwgKHdpdGhBY3RpdmUgPT09IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0VyYUluZGV4JywgbGFzdEVyYSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdEVyYSA9IGxhc3RFcmEuc3ViKEJOX09ORSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ28gZnJvbSBvbGRlc3QgdG8gbmV3ZXN0XG4gICAgICAgIHJldHVybiByZXN1bHQucmV2ZXJzZSgpO1xuICAgIH0pKSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCTl9aRVJPIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZmlsdGVyQ2FjaGVkRXJhcywgZ2V0RXJhTXVsdGlDYWNoZSwgc2V0RXJhTXVsdGlDYWNoZSB9IGZyb20gJy4vY2FjaGUuanMnO1xuaW1wb3J0IHsgZXJhc0hpc3RvcmljQXBwbHksIGZpbHRlckVyYXMgfSBmcm9tICcuL3V0aWwuanMnO1xuY29uc3QgQ0FDSEVfS0VZID0gJ2VyYVBvaW50cyc7XG5mdW5jdGlvbiBtYXBWYWxpZGF0b3JzKHsgaW5kaXZpZHVhbCB9KSB7XG4gICAgcmV0dXJuIFsuLi5pbmRpdmlkdWFsLmVudHJpZXMoKV1cbiAgICAgICAgLmZpbHRlcigoWywgcG9pbnRzXSkgPT4gcG9pbnRzLmd0KEJOX1pFUk8pKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIFt2YWxpZGF0b3JJZCwgcG9pbnRzXSkgPT4ge1xuICAgICAgICByZXN1bHRbdmFsaWRhdG9ySWQudG9TdHJpbmcoKV0gPSBwb2ludHM7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gbWFwUG9pbnRzKGVyYXMsIHBvaW50cykge1xuICAgIHJldHVybiBlcmFzLm1hcCgoZXJhLCBpbmRleCkgPT4gKHtcbiAgICAgICAgZXJhLFxuICAgICAgICBlcmFQb2ludHM6IHBvaW50c1tpbmRleF0udG90YWwsXG4gICAgICAgIHZhbGlkYXRvcnM6IG1hcFZhbGlkYXRvcnMocG9pbnRzW2luZGV4XSlcbiAgICB9KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX2VyYXNQb2ludHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGVyYXMsIHdpdGhBY3RpdmUpID0+IHtcbiAgICAgICAgaWYgKCFlcmFzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSBnZXRFcmFNdWx0aUNhY2hlKENBQ0hFX0tFWSwgZXJhcywgd2l0aEFjdGl2ZSk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGZpbHRlckVyYXMoZXJhcywgY2FjaGVkKTtcbiAgICAgICAgcmV0dXJuICFyZW1haW5pbmcubGVuZ3RoXG4gICAgICAgICAgICA/IG9mKGNhY2hlZClcbiAgICAgICAgICAgIDogYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1Jld2FyZFBvaW50cy5tdWx0aShyZW1haW5pbmcpLnBpcGUobWFwKChwKSA9PiBmaWx0ZXJDYWNoZWRFcmFzKGVyYXMsIGNhY2hlZCwgc2V0RXJhTXVsdGlDYWNoZShDQUNIRV9LRVksIHdpdGhBY3RpdmUsIG1hcFBvaW50cyhyZW1haW5pbmcsIHApKSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBlcmFzUG9pbnRzID0gLyojX19QVVJFX18qLyBlcmFzSGlzdG9yaWNBcHBseSgnX2VyYXNQb2ludHMnKTtcbiIsImltcG9ydCB7IG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEVyYUNhY2hlLCBzZXRFcmFDYWNoZSB9IGZyb20gJy4vY2FjaGUuanMnO1xuaW1wb3J0IHsgY29tYmluZUVyYXMsIGVyYXNIaXN0b3JpY0FwcGx5LCBzaW5nbGVFcmEgfSBmcm9tICcuL3V0aWwuanMnO1xuY29uc3QgQ0FDSEVfS0VZID0gJ2VyYVByZWZzJztcbmZ1bmN0aW9uIG1hcFByZWZzKGVyYSwgYWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuICAgIGFsbC5mb3JFYWNoKChba2V5LCBwcmVmc10pID0+IHtcbiAgICAgICAgdmFsaWRhdG9yc1trZXkuYXJnc1sxXS50b1N0cmluZygpXSA9IHByZWZzO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGVyYSwgdmFsaWRhdG9ycyB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9lcmFQcmVmcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoZXJhLCB3aXRoQWN0aXZlKSA9PiB7XG4gICAgICAgIGNvbnN0IFtjYWNoZUtleSwgY2FjaGVkXSA9IGdldEVyYUNhY2hlKENBQ0hFX0tFWSwgZXJhLCB3aXRoQWN0aXZlKTtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFxuICAgICAgICAgICAgPyBvZihjYWNoZWQpXG4gICAgICAgICAgICA6IGFwaS5xdWVyeS5zdGFraW5nLmVyYXNWYWxpZGF0b3JQcmVmcy5lbnRyaWVzKGVyYSkucGlwZShtYXAoKHIpID0+IHNldEVyYUNhY2hlKGNhY2hlS2V5LCB3aXRoQWN0aXZlLCBtYXBQcmVmcyhlcmEsIHIpKSkpO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IGVyYVByZWZzID0gLyojX19QVVJFX18qLyBzaW5nbGVFcmEoJ19lcmFQcmVmcycpO1xuZXhwb3J0IGNvbnN0IF9lcmFzUHJlZnMgPSAvKiNfX1BVUkVfXyovIGNvbWJpbmVFcmFzKCdfZXJhUHJlZnMnKTtcbmV4cG9ydCBjb25zdCBlcmFzUHJlZnMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5KCdfZXJhc1ByZWZzJyk7XG4iLCJpbXBvcnQgeyBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJDYWNoZWRFcmFzLCBnZXRFcmFNdWx0aUNhY2hlLCBzZXRFcmFNdWx0aUNhY2hlIH0gZnJvbSAnLi9jYWNoZS5qcyc7XG5pbXBvcnQgeyBlcmFzSGlzdG9yaWNBcHBseSwgZmlsdGVyRXJhcyB9IGZyb20gJy4vdXRpbC5qcyc7XG5jb25zdCBDQUNIRV9LRVkgPSAnZXJhUmV3YXJkcyc7XG5mdW5jdGlvbiBtYXBSZXdhcmRzKGVyYXMsIG9wdFJld2FyZHMpIHtcbiAgICByZXR1cm4gZXJhcy5tYXAoKGVyYSwgaW5kZXgpID0+ICh7XG4gICAgICAgIGVyYSxcbiAgICAgICAgZXJhUmV3YXJkOiBvcHRSZXdhcmRzW2luZGV4XS51bndyYXBPckRlZmF1bHQoKVxuICAgIH0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfZXJhc1Jld2FyZHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGVyYXMsIHdpdGhBY3RpdmUpID0+IHtcbiAgICAgICAgaWYgKCFlcmFzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSBnZXRFcmFNdWx0aUNhY2hlKENBQ0hFX0tFWSwgZXJhcywgd2l0aEFjdGl2ZSk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGZpbHRlckVyYXMoZXJhcywgY2FjaGVkKTtcbiAgICAgICAgaWYgKCFyZW1haW5pbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoY2FjaGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1ZhbGlkYXRvclJld2FyZC5tdWx0aShyZW1haW5pbmcpLnBpcGUobWFwKChyKSA9PiBmaWx0ZXJDYWNoZWRFcmFzKGVyYXMsIGNhY2hlZCwgc2V0RXJhTXVsdGlDYWNoZShDQUNIRV9LRVksIHdpdGhBY3RpdmUsIG1hcFJld2FyZHMocmVtYWluaW5nLCByKSkpKSk7XG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgZXJhc1Jld2FyZHMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5KCdfZXJhc1Jld2FyZHMnKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEVyYUNhY2hlLCBzZXRFcmFDYWNoZSB9IGZyb20gJy4vY2FjaGUuanMnO1xuaW1wb3J0IHsgY29tYmluZUVyYXMsIGVyYXNIaXN0b3JpY0FwcGx5LCBzaW5nbGVFcmEgfSBmcm9tICcuL3V0aWwuanMnO1xuY29uc3QgQ0FDSEVfS0VZID0gJ2VyYVNsYXNoZXMnO1xuZnVuY3Rpb24gbWFwU2xhc2hlcyhlcmEsIG5vbXMsIHZhbHMpIHtcbiAgICBjb25zdCBub21pbmF0b3JzID0ge307XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuICAgIG5vbXMuZm9yRWFjaCgoW2tleSwgb3B0QmFsYW5jZV0pID0+IHtcbiAgICAgICAgbm9taW5hdG9yc1trZXkuYXJnc1sxXS50b1N0cmluZygpXSA9IG9wdEJhbGFuY2UudW53cmFwKCk7XG4gICAgfSk7XG4gICAgdmFscy5mb3JFYWNoKChba2V5LCBvcHRSZXNdKSA9PiB7XG4gICAgICAgIHZhbGlkYXRvcnNba2V5LmFyZ3NbMV0udG9TdHJpbmcoKV0gPSBvcHRSZXMudW53cmFwT3JEZWZhdWx0KClbMV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgZXJhLCBub21pbmF0b3JzLCB2YWxpZGF0b3JzIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX2VyYVNsYXNoZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGVyYSwgd2l0aEFjdGl2ZSkgPT4ge1xuICAgICAgICBjb25zdCBbY2FjaGVLZXksIGNhY2hlZF0gPSBnZXRFcmFDYWNoZShDQUNIRV9LRVksIGVyYSwgd2l0aEFjdGl2ZSk7XG4gICAgICAgIHJldHVybiBjYWNoZWRcbiAgICAgICAgICAgID8gb2YoY2FjaGVkKVxuICAgICAgICAgICAgOiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5ub21pbmF0b3JTbGFzaEluRXJhLmVudHJpZXMoZXJhKSxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy52YWxpZGF0b3JTbGFzaEluRXJhLmVudHJpZXMoZXJhKVxuICAgICAgICAgICAgXSkucGlwZShtYXAoKFtuLCB2XSkgPT4gc2V0RXJhQ2FjaGUoY2FjaGVLZXksIHdpdGhBY3RpdmUsIG1hcFNsYXNoZXMoZXJhLCBuLCB2KSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBlcmFTbGFzaGVzID0gLyojX19QVVJFX18qLyBzaW5nbGVFcmEoJ19lcmFTbGFzaGVzJyk7XG5leHBvcnQgY29uc3QgX2VyYXNTbGFzaGVzID0gLyojX19QVVJFX18qLyBjb21iaW5lRXJhcygnX2VyYVNsYXNoZXMnKTtcbmV4cG9ydCBjb25zdCBlcmFzU2xhc2hlcyA9IC8qI19fUFVSRV9fKi8gZXJhc0hpc3RvcmljQXBwbHkoJ19lcmFzU2xhc2hlcycpO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3VycmVudFBvaW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VsZWN0ZWRJbmZvLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJhc0V4cG9zdXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJhc0hpc3RvcmljLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJhc1BvaW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VyYXNQcmVmcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VyYXNSZXdhcmRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJhc1NsYXNoZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXlzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcnZpZXcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vd25FeHBvc3VyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL293blNsYXNoZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YWtlckV4cG9zdXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2VyUG9pbnRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2VyUHJlZnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFrZXJSZXdhcmRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2VyU2xhc2hlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXNoZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3JzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vd2FpdGluZ0luZm8uanMnO1xuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIGV4dHJhY3RzSWRzKHN0YXNoSWQsIHF1ZXVlZEtleXMsIG5leHRLZXlzKSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkcyA9IChxdWV1ZWRLZXlzLmZpbmQoKFtjdXJyZW50SWRdKSA9PiBjdXJyZW50SWQuZXEoc3Rhc2hJZCkpIHx8IFt1bmRlZmluZWQsIFtdXSlbMV07XG4gICAgY29uc3QgbmV4dFNlc3Npb25JZHMgPSBuZXh0S2V5cy51bndyYXBPcihbXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dFNlc3Npb25JZHM6IEFycmF5LmlzQXJyYXkobmV4dFNlc3Npb25JZHMpXG4gICAgICAgICAgICA/IG5leHRTZXNzaW9uSWRzXG4gICAgICAgICAgICA6IFsuLi5uZXh0U2Vzc2lvbklkcy52YWx1ZXMoKV0sXG4gICAgICAgIHNlc3Npb25JZHM6IEFycmF5LmlzQXJyYXkoc2Vzc2lvbklkcylcbiAgICAgICAgICAgID8gc2Vzc2lvbklkc1xuICAgICAgICAgICAgOiBbLi4uc2Vzc2lvbklkcy52YWx1ZXMoKV1cbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IGtleXMgPSAvKiNfX1BVUkVfXyovIGZpcnN0TWVtbygoYXBpLCBzdGFzaElkKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcua2V5c011bHRpKFtzdGFzaElkXSkpO1xuZXhwb3J0IGZ1bmN0aW9uIGtleXNNdWx0aShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoc3Rhc2hJZHMpID0+IHN0YXNoSWRzLmxlbmd0aFxuICAgICAgICA/IGFwaS5xdWVyeS5zZXNzaW9uLnF1ZXVlZEtleXMoKS5waXBlKHN3aXRjaE1hcCgocXVldWVkS2V5cykgPT4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBvZihxdWV1ZWRLZXlzKSxcbiAgICAgICAgICAgIGFwaS5jb25zdHNbJ3Nlc3Npb24nXT8uWydkZWR1cEtleVByZWZpeCddXG4gICAgICAgICAgICAgICAgPyBhcGkucXVlcnkuc2Vzc2lvbi5uZXh0S2V5cy5tdWx0aShzdGFzaElkcy5tYXAoKHMpID0+IFthcGkuY29uc3RzWydzZXNzaW9uJ11bJ2RlZHVwS2V5UHJlZml4J10sIHNdKSlcbiAgICAgICAgICAgICAgICA6IGNvbWJpbmVMYXRlc3Qoc3Rhc2hJZHMubWFwKChzKSA9PiBhcGkucXVlcnkuc2Vzc2lvbi5uZXh0S2V5cyhzKSkpXG4gICAgICAgIF0pKSwgbWFwKChbcXVldWVkS2V5cywgbmV4dEtleXNdKSA9PiBzdGFzaElkcy5tYXAoKHN0YXNoSWQsIGluZGV4KSA9PiBleHRyYWN0c0lkcyhzdGFzaElkLCBxdWV1ZWRLZXlzLCBuZXh0S2V5c1tpbmRleF0pKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmUgdGhlIHN0YWtpbmcgb3ZlcnZpZXcsIGluY2x1ZGluZyBlbGVjdGVkIGFuZCBwb2ludHMgZWFybmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVydmlldyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5zZXNzaW9uLmluZGV4ZXMoKSxcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLnZhbGlkYXRvcnMoKVxuICAgIF0pLnBpcGUobWFwKChbaW5kZXhlcywgeyBuZXh0RWxlY3RlZCwgdmFsaWRhdG9ycyB9XSkgPT4gb2JqZWN0U3ByZWFkKHt9LCBpbmRleGVzLCB7XG4gICAgICAgIG5leHRFbGVjdGVkLFxuICAgICAgICB2YWxpZGF0b3JzXG4gICAgfSkpKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCB9IGZyb20gJy4vdXRpbC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gX293bkV4cG9zdXJlcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkLCBlcmFzLCBfd2l0aEFjdGl2ZSwgcGFnZSkgPT4ge1xuICAgICAgICBjb25zdCBlbXB0eVN0YWtpbmdFeHBvc3VyZSA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdFeHBvc3VyZScpO1xuICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IGV4cGxpY2l0bHkgbWFrZSB0aGUgYWN0dWFsIHR5cGVzIGlzIGZvciBjb21wYXRpYmlsaXR5LiBJZiB0aGUgY2hhaW4gZG9lc24ndCBoYXZlIHRoZSBub3RlZCB0eXBlIGl0IHdpbGwgZmFpbFxuICAgICAgICAvLyBvbiBjb25zdHJ1Y3Rpb24uIFRoZXJlZm9yZSB3ZSBqdXN0IG1ha2UgYW4gZW1wdHkgb3B0aW9uLlxuICAgICAgICBjb25zdCBlbXB0eU9wdGlvblBhZ2UgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnT3B0aW9uPE51bGw+Jyk7XG4gICAgICAgIGNvbnN0IGVtcHR5T3B0aW9uTWV0YSA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdPcHRpb248TnVsbD4nKTtcbiAgICAgICAgcmV0dXJuIGVyYXMubGVuZ3RoXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkcyBhbmQgZm9yd2FyZCBjb21wYXQgZm9yIGhpc3RvcmljYWwgaW50ZWdyaXR5IHdoZW4gdXNpbmcgYGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudGBcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc0NsaXBwZWRcbiAgICAgICAgICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KGVyYXMubWFwKChlKSA9PiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc0NsaXBwZWQoZSwgYWNjb3VudElkKSkpXG4gICAgICAgICAgICAgICAgICAgIDogb2YoZXJhcy5tYXAoKF8pID0+IGVtcHR5U3Rha2luZ0V4cG9zdXJlKSksXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KGVyYXMubWFwKChlKSA9PiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2VycyhlLCBhY2NvdW50SWQpKSlcbiAgICAgICAgICAgICAgICAgICAgOiBvZihlcmFzLm1hcCgoXykgPT4gZW1wdHlTdGFraW5nRXhwb3N1cmUpKSxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc1BhZ2VkXG4gICAgICAgICAgICAgICAgICAgID8gY29tYmluZUxhdGVzdChlcmFzLm1hcCgoZSkgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnNQYWdlZChlLCBhY2NvdW50SWQsIHBhZ2UpKSlcbiAgICAgICAgICAgICAgICAgICAgOiBvZihlcmFzLm1hcCgoXykgPT4gZW1wdHlPcHRpb25QYWdlKSksXG4gICAgICAgICAgICAgICAgYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnNPdmVydmlld1xuICAgICAgICAgICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoZXJhcy5tYXAoKGUpID0+IGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzT3ZlcnZpZXcoZSwgYWNjb3VudElkKSkpXG4gICAgICAgICAgICAgICAgICAgIDogb2YoZXJhcy5tYXAoKF8pID0+IGVtcHR5T3B0aW9uTWV0YSkpXG4gICAgICAgICAgICBdKS5waXBlKG1hcCgoW2NscCwgZXhwLCBwYWdlZCwgZXhwTWV0YV0pID0+IGVyYXMubWFwKChlcmEsIGluZGV4KSA9PiAoeyBjbGlwcGVkOiBjbHBbaW5kZXhdLCBlcmEsIGV4cG9zdXJlOiBleHBbaW5kZXhdLCBleHBvc3VyZU1ldGE6IGV4cE1ldGFbaW5kZXhdLCBleHBvc3VyZVBhZ2VkOiBwYWdlZFtpbmRleF0gfSkpKSlcbiAgICAgICAgICAgIDogb2YoW10pO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IG93bkV4cG9zdXJlID0gLyojX19QVVJFX18qLyBmaXJzdE1lbW8oKGFwaSwgYWNjb3VudElkLCBlcmEsIHBhZ2UpID0+IGFwaS5kZXJpdmUuc3Rha2luZy5fb3duRXhwb3N1cmVzKGFjY291bnRJZCwgW2VyYV0sIHRydWUsIHBhZ2UgfHwgMCkpO1xuZXhwb3J0IGNvbnN0IG93bkV4cG9zdXJlcyA9IC8qI19fUFVSRV9fKi8gZXJhc0hpc3RvcmljQXBwbHlBY2NvdW50KCdfb3duRXhwb3N1cmVzJyk7XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmltcG9ydCB7IGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCB9IGZyb20gJy4vdXRpbC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gX293blNsYXNoZXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCwgZXJhcywgX3dpdGhBY3RpdmUpID0+IGVyYXMubGVuZ3RoXG4gICAgICAgID8gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KGVyYXMubWFwKChlKSA9PiBhcGkucXVlcnkuc3Rha2luZy52YWxpZGF0b3JTbGFzaEluRXJhKGUsIGFjY291bnRJZCkpKSxcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoZXJhcy5tYXAoKGUpID0+IGFwaS5xdWVyeS5zdGFraW5nLm5vbWluYXRvclNsYXNoSW5FcmEoZSwgYWNjb3VudElkKSkpXG4gICAgICAgIF0pLnBpcGUobWFwKChbdmFscywgbm9tc10pID0+IGVyYXMubWFwKChlcmEsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgdG90YWw6IHZhbHNbaW5kZXhdLmlzU29tZVxuICAgICAgICAgICAgICAgID8gdmFsc1tpbmRleF0udW53cmFwKClbMV1cbiAgICAgICAgICAgICAgICA6IG5vbXNbaW5kZXhdLnVud3JhcE9yRGVmYXVsdCgpXG4gICAgICAgIH0pKSkpXG4gICAgICAgIDogb2YoW10pKTtcbn1cbmV4cG9ydCBjb25zdCBvd25TbGFzaCA9IC8qI19fUFVSRV9fKi8gZmlyc3RNZW1vKChhcGksIGFjY291bnRJZCwgZXJhKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuX293blNsYXNoZXMoYWNjb3VudElkLCBbZXJhXSwgdHJ1ZSkpO1xuZXhwb3J0IGNvbnN0IG93blNsYXNoZXMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCgnX293blNsYXNoZXMnKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3RNZW1vLCBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5mdW5jdGlvbiByZXdhcmREZXN0aW5hdGlvbkNvbXBhdChyZXdhcmREZXN0aW5hdGlvbikge1xuICAgIC8vIFdlIGVuc3VyZSB0aGUgdHlwZSBpcyBhbiBPcHRpb24gYnkgY2hlY2tpbmcgaWYgaXNTb21lIGlzIGEgYm9vbGVhbi4gV2hlbiBpc1NvbWUgZG9lc24ndCBleGlzdCBpdCB3aWxsIGFsd2F5cyByZXR1cm4gdW5kZWZpbmVkLlxuICAgIHJldHVybiB0eXBlb2YgcmV3YXJkRGVzdGluYXRpb24uaXNTb21lID09PSAnYm9vbGVhbidcbiAgICAgICAgPyByZXdhcmREZXN0aW5hdGlvbi51bndyYXBPcihudWxsKVxuICAgICAgICA6IHJld2FyZERlc3RpbmF0aW9uO1xufVxuZnVuY3Rpb24gZmlsdGVyQ2xhaW1lZFJld2FyZHMoYXBpLCBjbCkge1xuICAgIHJldHVybiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVmVjPHUzMj4nLCBjbC5maWx0ZXIoKGMpID0+IGMgIT09IC0xKSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJSZXdhcmRzKHN0YXNoSWRzLCBlcmFzLCBjbGFpbWVkUmV3YXJkcywgc3Rha2Vyc092ZXJ2aWV3KSB7XG4gICAgY29uc3QgY2xhaW1lZERhdGEgPSB7fTtcbiAgICBjb25zdCBvdmVydmlld0RhdGEgPSB7fTtcbiAgICBjb25zdCBpZHMgPSBzdGFzaElkcy5tYXAoKGkpID0+IGkudG9TdHJpbmcoKSk7XG4gICAgY2xhaW1lZFJld2FyZHMuZm9yRWFjaCgoW2tleXMsIHJld2FyZHNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0ga2V5cy5hcmdzWzFdLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVyYSA9IGtleXMuYXJnc1swXS50b051bWJlcigpO1xuICAgICAgICBpZiAoaWRzLmluY2x1ZGVzKGlkKSkge1xuICAgICAgICAgICAgaWYgKGNsYWltZWREYXRhW2lkXSkge1xuICAgICAgICAgICAgICAgIGNsYWltZWREYXRhW2lkXS5zZXQoZXJhLCByZXdhcmRzLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjbGFpbWVkRGF0YVtpZF0gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgY2xhaW1lZERhdGFbaWRdLnNldChlcmEsIHJld2FyZHMudG9BcnJheSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHN0YWtlcnNPdmVydmlldy5mb3JFYWNoKChba2V5cywgb3ZlcnZpZXddKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0ga2V5cy5hcmdzWzFdLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVyYSA9IGtleXMuYXJnc1swXS50b051bWJlcigpO1xuICAgICAgICBpZiAoaWRzLmluY2x1ZGVzKGlkKSAmJiBvdmVydmlldy5pc1NvbWUpIHtcbiAgICAgICAgICAgIGlmIChvdmVydmlld0RhdGFbaWRdKSB7XG4gICAgICAgICAgICAgICAgb3ZlcnZpZXdEYXRhW2lkXS5zZXQoZXJhLCBvdmVydmlldy51bndyYXAoKS5wYWdlQ291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb3ZlcnZpZXdEYXRhW2lkXSA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBvdmVydmlld0RhdGFbaWRdLnNldChlcmEsIG92ZXJ2aWV3LnVud3JhcCgpLnBhZ2VDb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3Rhc2hJZHMubWFwKChpZCkgPT4ge1xuICAgICAgICBjb25zdCByZXdhcmRzUGVyRXJhID0gY2xhaW1lZERhdGFbaWQudG9TdHJpbmcoKV07XG4gICAgICAgIGNvbnN0IG92ZXJ2aWV3UGVyRXJhID0gb3ZlcnZpZXdEYXRhW2lkLnRvU3RyaW5nKCldO1xuICAgICAgICByZXR1cm4gZXJhcy5tYXAoKGVyYSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJld2FyZHNQZXJFcmEgJiYgcmV3YXJkc1BlckVyYS5oYXMoZXJhKSAmJiBvdmVydmlld1BlckVyYSAmJiBvdmVydmlld1BlckVyYS5oYXMoZXJhKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJld2FyZHMgPSByZXdhcmRzUGVyRXJhLmdldChlcmEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IG92ZXJ2aWV3UGVyRXJhLmdldChlcmEpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXdhcmRzLmxlbmd0aCA9PT0gcGFnZUNvdW50LnRvTnVtYmVyKClcbiAgICAgICAgICAgICAgICAgICAgPyBlcmFcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBwYXJzZURldGFpbHMoYXBpLCBzdGFzaElkLCBjb250cm9sbGVySWRPcHQsIG5vbWluYXRvcnNPcHQsIHJld2FyZERlc3RpbmF0aW9uT3B0cywgdmFsaWRhdG9yUHJlZnMsIGV4cG9zdXJlLCBzdGFraW5nTGVkZ2VyT3B0LCBleHBvc3VyZU1ldGEsIGNsYWltZWRSZXdhcmRzLCBleHBvc3VyZUVyYVN0YWtlcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhY2NvdW50SWQ6IHN0YXNoSWQsXG4gICAgICAgIGNsYWltZWRSZXdhcmRzRXJhczogZmlsdGVyQ2xhaW1lZFJld2FyZHMoYXBpLCBjbGFpbWVkUmV3YXJkcyksXG4gICAgICAgIGNvbnRyb2xsZXJJZDogY29udHJvbGxlcklkT3B0Py51bndyYXBPcihudWxsKSB8fCBudWxsLFxuICAgICAgICBleHBvc3VyZUVyYVN0YWtlcnMsXG4gICAgICAgIGV4cG9zdXJlTWV0YSxcbiAgICAgICAgZXhwb3N1cmVQYWdlZDogZXhwb3N1cmUsXG4gICAgICAgIG5vbWluYXRvcnM6IG5vbWluYXRvcnNPcHQuaXNTb21lXG4gICAgICAgICAgICA/IG5vbWluYXRvcnNPcHQudW53cmFwKCkudGFyZ2V0c1xuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgcmV3YXJkRGVzdGluYXRpb246IHJld2FyZERlc3RpbmF0aW9uQ29tcGF0KHJld2FyZERlc3RpbmF0aW9uT3B0cyksXG4gICAgICAgIHN0YWtpbmdMZWRnZXI6IHN0YWtpbmdMZWRnZXJPcHQudW53cmFwT3JEZWZhdWx0KCksXG4gICAgICAgIHN0YXNoSWQsXG4gICAgICAgIHZhbGlkYXRvclByZWZzXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldExlZGdlcnMoYXBpLCBvcHRJZHMsIHsgd2l0aExlZGdlciA9IGZhbHNlIH0pIHtcbiAgICBjb25zdCBpZHMgPSBvcHRJZHNcbiAgICAgICAgLmZpbHRlcigobykgPT4gd2l0aExlZGdlciAmJiAhIW8gJiYgby5pc1NvbWUpXG4gICAgICAgIC5tYXAoKG8pID0+IG8udW53cmFwKCkpO1xuICAgIGNvbnN0IGVtcHR5TGVkID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ09wdGlvbjxTdGFraW5nTGVkZ2VyPicpO1xuICAgIHJldHVybiAoaWRzLmxlbmd0aFxuICAgICAgICA/IGNvbWJpbmVMYXRlc3QoaWRzLm1hcCgocykgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcubGVkZ2VyKHMpKSlcbiAgICAgICAgOiBvZihbXSkpLnBpcGUobWFwKChvcHRMZWRnZXJzKSA9PiB7XG4gICAgICAgIGxldCBvZmZzZXQgPSAtMTtcbiAgICAgICAgcmV0dXJuIG9wdElkcy5tYXAoKG8pID0+IG8gJiYgby5pc1NvbWVcbiAgICAgICAgICAgID8gb3B0TGVkZ2Vyc1srK29mZnNldF0gfHwgZW1wdHlMZWRcbiAgICAgICAgICAgIDogZW1wdHlMZWQpO1xuICAgIH0pKTtcbn1cbmZ1bmN0aW9uIGdldFN0YXNoSW5mbyhhcGksIHN0YXNoSWRzLCBhY3RpdmVFcmEsIHsgd2l0aENsYWltZWRSZXdhcmRzRXJhcywgd2l0aENvbnRyb2xsZXIsIHdpdGhEZXN0aW5hdGlvbiwgd2l0aEV4cG9zdXJlLCB3aXRoRXhwb3N1cmVFcmFzU3Rha2Vyc0xlZ2FjeSwgd2l0aEV4cG9zdXJlTWV0YSwgd2l0aExlZGdlciwgd2l0aE5vbWluYXRpb25zLCB3aXRoUHJlZnMgfSwgcGFnZSkge1xuICAgIGNvbnN0IGVtcHR5Tm9tcyA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdPcHRpb248Tm9taW5hdGlvbnM+Jyk7XG4gICAgY29uc3QgZW1wdHlSZXdhID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1Jld2FyZERlc3RpbmF0aW9uJyk7XG4gICAgY29uc3QgZW1wdHlFeHBvRXJhU3Rha2VycyA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdFeHBvc3VyZScpO1xuICAgIGNvbnN0IGVtcHR5UHJlZnMgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnVmFsaWRhdG9yUHJlZnMnKTtcbiAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0IGV4cGxpY2l0bHkgbWFrZSB0aGUgYWN0dWFsIHR5cGVzIGlzIGZvciBjb21wYXRpYmlsaXR5LiBJZiB0aGUgY2hhaW4gZG9lc24ndCBoYXZlIHRoZSBub3RlZCB0eXBlIGl0IHdpbGwgZmFpbFxuICAgIC8vIG9uIGNvbnN0cnVjdGlvbi4gVGhlcmVmb3JlIHdlIGp1c3QgbWFrZSBhbiBlbXB0eSBvcHRpb24uXG4gICAgY29uc3QgZW1wdHlFeHBvID0gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ09wdGlvbjxOdWxsPicpO1xuICAgIGNvbnN0IGVtcHR5RXhwb01ldGEgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnT3B0aW9uPE51bGw+Jyk7XG4gICAgY29uc3QgZW1wdHlDbGFpbWVkUmV3YXJkcyA9IFstMV07XG4gICAgY29uc3QgZGVwdGggPSBOdW1iZXIoYXBpLmNvbnN0cy5zdGFraW5nLmhpc3RvcnlEZXB0aC50b051bWJlcigpKTtcbiAgICBjb25zdCBlcmFzID0gbmV3IEFycmF5KGRlcHRoKS5maWxsKDApLm1hcCgoXywgaWR4KSA9PiB7XG4gICAgICAgIGlmIChpZHggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmVFcmEudG9OdW1iZXIoKSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZUVyYS50b051bWJlcigpIC0gaWR4IC0gMTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHdpdGhDb250cm9sbGVyIHx8IHdpdGhMZWRnZXJcbiAgICAgICAgICAgID8gY29tYmluZUxhdGVzdChzdGFzaElkcy5tYXAoKHMpID0+IGFwaS5xdWVyeS5zdGFraW5nLmJvbmRlZChzKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBudWxsKSksXG4gICAgICAgIHdpdGhOb21pbmF0aW9uc1xuICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KHN0YXNoSWRzLm1hcCgocykgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcubm9taW5hdG9ycyhzKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBlbXB0eU5vbXMpKSxcbiAgICAgICAgd2l0aERlc3RpbmF0aW9uXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3Qoc3Rhc2hJZHMubWFwKChzKSA9PiBhcGkucXVlcnkuc3Rha2luZy5wYXllZShzKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBlbXB0eVJld2EpKSxcbiAgICAgICAgd2l0aFByZWZzXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3Qoc3Rhc2hJZHMubWFwKChzKSA9PiBhcGkucXVlcnkuc3Rha2luZy52YWxpZGF0b3JzKHMpKSlcbiAgICAgICAgICAgIDogb2Yoc3Rhc2hJZHMubWFwKCgpID0+IGVtcHR5UHJlZnMpKSxcbiAgICAgICAgd2l0aEV4cG9zdXJlICYmIGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzUGFnZWRcbiAgICAgICAgICAgID8gY29tYmluZUxhdGVzdChzdGFzaElkcy5tYXAoKHMpID0+IGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzUGFnZWQoYWN0aXZlRXJhLCBzLCBwYWdlKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBlbXB0eUV4cG8pKSxcbiAgICAgICAgd2l0aEV4cG9zdXJlTWV0YSAmJiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc092ZXJ2aWV3XG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3Qoc3Rhc2hJZHMubWFwKChzKSA9PiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc092ZXJ2aWV3KGFjdGl2ZUVyYSwgcykpKVxuICAgICAgICAgICAgOiBvZihzdGFzaElkcy5tYXAoKCkgPT4gZW1wdHlFeHBvTWV0YSkpLFxuICAgICAgICB3aXRoQ2xhaW1lZFJld2FyZHNFcmFzICYmIGFwaS5xdWVyeS5zdGFraW5nLmNsYWltZWRSZXdhcmRzXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIGFwaS5xdWVyeS5zdGFraW5nLmNsYWltZWRSZXdhcmRzLmVudHJpZXMoKSxcbiAgICAgICAgICAgICAgICBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc092ZXJ2aWV3LmVudHJpZXMoKVxuICAgICAgICAgICAgXSkucGlwZShtYXAoKFtyZXdhcmRzU3RvcmFnZVZlYywgb3ZlcnZpZXdTdG9yYWdlVmVjXSkgPT4gZmlsdGVyUmV3YXJkcyhzdGFzaElkcywgZXJhcywgcmV3YXJkc1N0b3JhZ2VWZWMsIG92ZXJ2aWV3U3RvcmFnZVZlYykpKVxuICAgICAgICAgICAgOiBvZihzdGFzaElkcy5tYXAoKCkgPT4gZW1wdHlDbGFpbWVkUmV3YXJkcykpLFxuICAgICAgICB3aXRoRXhwb3N1cmVFcmFzU3Rha2Vyc0xlZ2FjeSAmJiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vyc1xuICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KHN0YXNoSWRzLm1hcCgocykgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnMoYWN0aXZlRXJhLCBzKSkpXG4gICAgICAgICAgICA6IG9mKHN0YXNoSWRzLm1hcCgoKSA9PiBlbXB0eUV4cG9FcmFTdGFrZXJzKSlcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIGdldEJhdGNoKGFwaSwgYWN0aXZlRXJhLCBzdGFzaElkcywgZmxhZ3MsIHBhZ2UpIHtcbiAgICByZXR1cm4gZ2V0U3Rhc2hJbmZvKGFwaSwgc3Rhc2hJZHMsIGFjdGl2ZUVyYSwgZmxhZ3MsIHBhZ2UpLnBpcGUoc3dpdGNoTWFwKChbY29udHJvbGxlcklkT3B0LCBub21pbmF0b3JzT3B0LCByZXdhcmREZXN0aW5hdGlvbiwgdmFsaWRhdG9yUHJlZnMsIGV4cG9zdXJlLCBleHBvc3VyZU1ldGEsIGNsYWltZWRSZXdhcmRzRXJhcywgZXhwb3N1cmVFcmFTdGFrZXJzXSkgPT4gZ2V0TGVkZ2VycyhhcGksIGNvbnRyb2xsZXJJZE9wdCwgZmxhZ3MpLnBpcGUobWFwKChzdGFraW5nTGVkZ2VyT3B0cykgPT4gc3Rhc2hJZHMubWFwKChzdGFzaElkLCBpbmRleCkgPT4gcGFyc2VEZXRhaWxzKGFwaSwgc3Rhc2hJZCwgY29udHJvbGxlcklkT3B0W2luZGV4XSwgbm9taW5hdG9yc09wdFtpbmRleF0sIHJld2FyZERlc3RpbmF0aW9uW2luZGV4XSwgdmFsaWRhdG9yUHJlZnNbaW5kZXhdLCBleHBvc3VyZVtpbmRleF0sIHN0YWtpbmdMZWRnZXJPcHRzW2luZGV4XSwgZXhwb3N1cmVNZXRhW2luZGV4XSwgY2xhaW1lZFJld2FyZHNFcmFzW2luZGV4XSwgZXhwb3N1cmVFcmFTdGFrZXJzW2luZGV4XSkpKSkpKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZyb20gYSBzdGFzaCwgcmV0cmlldmUgdGhlIGNvbnRyb2xsZXJJZCBhbmQgYWxsIHJlbGV2YW50IGRldGFpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IHF1ZXJ5ID0gLyojX19QVVJFX18qLyBmaXJzdE1lbW8oKGFwaSwgYWNjb3VudElkLCBmbGFncywgcGFnZSkgPT4gYXBpLmRlcml2ZS5zdGFraW5nLnF1ZXJ5TXVsdGkoW2FjY291bnRJZF0sIGZsYWdzLCBwYWdlKSk7XG5leHBvcnQgZnVuY3Rpb24gcXVlcnlNdWx0aShpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkcywgZmxhZ3MsIHBhZ2UpID0+IGFwaS5kZXJpdmUuc2Vzc2lvbi5pbmRleGVzKCkucGlwZShzd2l0Y2hNYXAoKHsgYWN0aXZlRXJhIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc3Rhc2hJZHMgPSBhY2NvdW50SWRzLm1hcCgoYSkgPT4gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0FjY291bnRJZCcsIGEpKTtcbiAgICAgICAgY29uc3QgcCA9IHBhZ2UgfHwgMDtcbiAgICAgICAgcmV0dXJuIHN0YXNoSWRzLmxlbmd0aFxuICAgICAgICAgICAgPyBnZXRCYXRjaChhcGksIGFjdGl2ZUVyYSwgc3Rhc2hJZHMsIGZsYWdzLCBwKVxuICAgICAgICAgICAgOiBvZihbXSk7XG4gICAgfSkpKTtcbn1cbiIsImltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdE1lbW8sIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBfc3Rha2VyRXhwb3N1cmVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWRzLCBlcmFzLCB3aXRoQWN0aXZlID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3Qgc3Rha2VySWRzID0gYWNjb3VudElkcy5tYXAoKGEpID0+IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdBY2NvdW50SWQnLCBhKS50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuc3Rha2luZy5fZXJhc0V4cG9zdXJlKGVyYXMsIHdpdGhBY3RpdmUpLnBpcGUobWFwKChleHBvc3VyZXMpID0+IHN0YWtlcklkcy5tYXAoKHN0YWtlcklkKSA9PiBleHBvc3VyZXMubWFwKCh7IGVyYSwgbm9taW5hdG9yczogYWxsTm9taW5hdG9ycywgdmFsaWRhdG9yczogYWxsVmFsaWRhdG9ycyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkYXRvciA9ICEhYWxsVmFsaWRhdG9yc1tzdGFrZXJJZF07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0ge307XG4gICAgICAgICAgICBjb25zdCBub21pbmF0aW5nID0gYWxsTm9taW5hdG9yc1tzdGFrZXJJZF0gfHwgW107XG4gICAgICAgICAgICBpZiAoaXNWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzW3N0YWtlcklkXSA9IGFsbFZhbGlkYXRvcnNbc3Rha2VySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9taW5hdGluZykge1xuICAgICAgICAgICAgICAgIG5vbWluYXRpbmcuZm9yRWFjaCgoeyB2YWxpZGF0b3JJZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbdmFsaWRhdG9ySWRdID0gYWxsVmFsaWRhdG9yc1t2YWxpZGF0b3JJZF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBlcmEsIGlzRW1wdHk6ICFPYmplY3Qua2V5cyh2YWxpZGF0b3JzKS5sZW5ndGgsIGlzVmFsaWRhdG9yLCBub21pbmF0aW5nLCB2YWxpZGF0b3JzIH07XG4gICAgICAgIH0pKSkpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0YWtlckV4cG9zdXJlcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkcywgd2l0aEFjdGl2ZSA9IGZhbHNlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuZXJhc0hpc3RvcmljKHdpdGhBY3RpdmUpLnBpcGUoc3dpdGNoTWFwKChlcmFzKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuX3N0YWtlckV4cG9zdXJlcyhhY2NvdW50SWRzLCBlcmFzLCB3aXRoQWN0aXZlKSkpKTtcbn1cbmV4cG9ydCBjb25zdCBzdGFrZXJFeHBvc3VyZSA9IC8qI19fUFVSRV9fKi8gZmlyc3RNZW1vKChhcGksIGFjY291bnRJZCwgd2l0aEFjdGl2ZSkgPT4gYXBpLmRlcml2ZS5zdGFraW5nLnN0YWtlckV4cG9zdXJlcyhbYWNjb3VudElkXSwgd2l0aEFjdGl2ZSkpO1xuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBlcmFzSGlzdG9yaWNBcHBseUFjY291bnQgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFrZXJQb2ludHMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCwgZXJhcywgd2l0aEFjdGl2ZSkgPT4ge1xuICAgICAgICBjb25zdCBzdGFrZXJJZCA9IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdBY2NvdW50SWQnLCBhY2NvdW50SWQpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBhcGkuZGVyaXZlLnN0YWtpbmcuX2VyYXNQb2ludHMoZXJhcywgd2l0aEFjdGl2ZSkucGlwZShtYXAoKHBvaW50cykgPT4gcG9pbnRzLm1hcCgoeyBlcmEsIGVyYVBvaW50cywgdmFsaWRhdG9ycyB9KSA9PiAoe1xuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgZXJhUG9pbnRzLFxuICAgICAgICAgICAgcG9pbnRzOiB2YWxpZGF0b3JzW3N0YWtlcklkXSB8fCBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnUmV3YXJkUG9pbnQnKVxuICAgICAgICB9KSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBzdGFrZXJQb2ludHMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCgnX3N0YWtlclBvaW50cycpO1xuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBlcmFzSGlzdG9yaWNBcHBseUFjY291bnQgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFrZXJQcmVmcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkLCBlcmFzLCBfd2l0aEFjdGl2ZSkgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1ZhbGlkYXRvclByZWZzLm11bHRpKGVyYXMubWFwKChlKSA9PiBbZSwgYWNjb3VudElkXSkpLnBpcGUobWFwKChhbGwpID0+IGFsbC5tYXAoKHZhbGlkYXRvclByZWZzLCBpbmRleCkgPT4gKHtcbiAgICAgICAgZXJhOiBlcmFzW2luZGV4XSxcbiAgICAgICAgdmFsaWRhdG9yUHJlZnNcbiAgICB9KSkpKSk7XG59XG5leHBvcnQgY29uc3Qgc3Rha2VyUHJlZnMgPSAvKiNfX1BVUkVfXyovIGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudCgnX3N0YWtlclByZWZzJyk7XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJOX0JJTExJT04sIEJOX1pFUk8sIG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGZpcnN0TWVtbywgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gZXh0cmFjdENvbXBhdFJld2FyZHMoY2xhaW1lZFJld2FyZHNFcmFzLCBsZWRnZXIpIHtcbiAgICBjb25zdCBsID0gbGVkZ2VyXG4gICAgICAgID8gKGxlZGdlci5sZWdhY3lDbGFpbWVkUmV3YXJkcyB8fFxuICAgICAgICAgICAgbGVkZ2VyLmNsYWltZWRSZXdhcmRzKS50b0FycmF5KClcbiAgICAgICAgOiBbXTtcbiAgICByZXR1cm4gY2xhaW1lZFJld2FyZHNFcmFzLnRvQXJyYXkoKS5jb25jYXQobCk7XG59XG5mdW5jdGlvbiBwYXJzZVJld2FyZHMoYXBpLCBzdGFzaElkLCBbZXJhc1BvaW50cywgZXJhc1ByZWZzLCBlcmFzUmV3YXJkc10sIGV4cG9zdXJlcykge1xuICAgIHJldHVybiBleHBvc3VyZXMubWFwKCh7IGVyYSwgaXNFbXB0eSwgaXNWYWxpZGF0b3IsIG5vbWluYXRpbmcsIHZhbGlkYXRvcnM6IGVyYVZhbGlkYXRvcnMgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVyYVBvaW50cywgdmFsaWRhdG9yczogYWxsVmFsUG9pbnRzIH0gPSBlcmFzUG9pbnRzLmZpbmQoKHApID0+IHAuZXJhLmVxKGVyYSkpIHx8IHsgZXJhUG9pbnRzOiBCTl9aRVJPLCB2YWxpZGF0b3JzOiB7fSB9O1xuICAgICAgICBjb25zdCB7IGVyYVJld2FyZCB9ID0gZXJhc1Jld2FyZHMuZmluZCgocikgPT4gci5lcmEuZXEoZXJhKSkgfHwgeyBlcmFSZXdhcmQ6IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdCYWxhbmNlJykgfTtcbiAgICAgICAgY29uc3QgeyB2YWxpZGF0b3JzOiBhbGxWYWxQcmVmcyB9ID0gZXJhc1ByZWZzLmZpbmQoKHApID0+IHAuZXJhLmVxKGVyYSkpIHx8IHsgdmFsaWRhdG9yczoge30gfTtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuICAgICAgICBjb25zdCBzdGFrZXJJZCA9IHN0YXNoSWQudG9TdHJpbmcoKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZXJhVmFsaWRhdG9ycykuZm9yRWFjaCgoW3ZhbGlkYXRvcklkLCBleHBvc3VyZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbFBvaW50cyA9IGFsbFZhbFBvaW50c1t2YWxpZGF0b3JJZF0gfHwgQk5fWkVSTztcbiAgICAgICAgICAgIGNvbnN0IHZhbENvbW0gPSBhbGxWYWxQcmVmc1t2YWxpZGF0b3JJZF0/LmNvbW1pc3Npb24udW53cmFwKCkgfHwgQk5fWkVSTztcbiAgICAgICAgICAgIGNvbnN0IGV4cFRvdGFsID0gZXhwb3N1cmUudG90YWxcbiAgICAgICAgICAgICAgICA/IGV4cG9zdXJlLnRvdGFsPy51bndyYXAoKVxuICAgICAgICAgICAgICAgIDogZXhwb3N1cmUucGFnZVRvdGFsXG4gICAgICAgICAgICAgICAgICAgID8gZXhwb3N1cmUucGFnZVRvdGFsPy51bndyYXAoKVxuICAgICAgICAgICAgICAgICAgICA6IEJOX1pFUk87XG4gICAgICAgICAgICBsZXQgYXZhaWwgPSBCTl9aRVJPO1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCEoZXhwVG90YWwuaXNaZXJvKCkgfHwgdmFsUG9pbnRzLmlzWmVybygpIHx8IGVyYVBvaW50cy5pc1plcm8oKSkpIHtcbiAgICAgICAgICAgICAgICBhdmFpbCA9IGVyYVJld2FyZC5tdWwodmFsUG9pbnRzKS5kaXYoZXJhUG9pbnRzKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxDdXQgPSB2YWxDb21tLm11bChhdmFpbCkuZGl2KEJOX0JJTExJT04pO1xuICAgICAgICAgICAgICAgIGxldCBzdGFrZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcklkID09PSBzdGFrZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3N1cmUub3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFrZWQgPSBleHBvc3VyZS5vd24udW53cmFwKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBBY2NvdW50ID0gZXhwb3N1cmUub3RoZXJzLmZpbmQoKHsgd2hvIH0pID0+IHdoby5lcSh2YWxpZGF0b3JJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Rha2VkID0gZXhwQWNjb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXhwQWNjb3VudC52YWx1ZS51bndyYXAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQk5fWkVSTztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rha2VyRXhwID0gZXhwb3N1cmUub3RoZXJzLmZpbmQoKHsgd2hvIH0pID0+IHdoby5lcShzdGFrZXJJZCkpO1xuICAgICAgICAgICAgICAgICAgICBzdGFrZWQgPSBzdGFrZXJFeHBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3Rha2VyRXhwLnZhbHVlLnVud3JhcCgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEJOX1pFUk87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlID0gYXZhaWwuc3ViKHZhbEN1dCkuaW11bChzdGFrZWQpLmRpdihleHBUb3RhbCkuaWFkZCh2YWxpZGF0b3JJZCA9PT0gc3Rha2VySWQgPyB2YWxDdXQgOiBCTl9aRVJPKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRvcnNbdmFsaWRhdG9ySWRdID0ge1xuICAgICAgICAgICAgICAgIHRvdGFsOiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQmFsYW5jZScsIGF2YWlsKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnLCB2YWx1ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgZXJhUmV3YXJkLFxuICAgICAgICAgICAgaXNFbXB0eSxcbiAgICAgICAgICAgIGlzVmFsaWRhdG9yLFxuICAgICAgICAgICAgbm9taW5hdGluZyxcbiAgICAgICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFsbFVuaXFWYWxpZGF0b3JzKHJld2FyZHMpIHtcbiAgICByZXR1cm4gcmV3YXJkcy5yZWR1Y2UoKFthbGwsIHBlclN0YXNoXSwgcmV3YXJkcykgPT4ge1xuICAgICAgICBjb25zdCB1bmlxID0gW107XG4gICAgICAgIHBlclN0YXNoLnB1c2godW5pcSk7XG4gICAgICAgIHJld2FyZHMuZm9yRWFjaCgoeyB2YWxpZGF0b3JzIH0pID0+IE9iamVjdC5rZXlzKHZhbGlkYXRvcnMpLmZvckVhY2goKHZhbGlkYXRvcklkKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXVuaXEuaW5jbHVkZXModmFsaWRhdG9ySWQpKSB7XG4gICAgICAgICAgICAgICAgdW5pcS5wdXNoKHZhbGlkYXRvcklkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFsbC5pbmNsdWRlcyh2YWxpZGF0b3JJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsLnB1c2godmFsaWRhdG9ySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gW2FsbCwgcGVyU3Rhc2hdO1xuICAgIH0sIFtbXSwgW11dKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNsYWltZWQodmFsaWRhdG9ycywgcXVlcnlWYWxpZGF0b3JzLCByZXdhcmQsIGNsYWltZWRSZXdhcmRzRXJhcykge1xuICAgIGNvbnN0IHJtID0gW107XG4gICAgT2JqZWN0LmtleXMocmV3YXJkLnZhbGlkYXRvcnMpLmZvckVhY2goKHZhbGlkYXRvcklkKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdmFsaWRhdG9ycy5pbmRleE9mKHZhbGlkYXRvcklkKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgdmFsTGVkZ2VyID0gcXVlcnlWYWxpZGF0b3JzW2luZGV4XS5zdGFraW5nTGVkZ2VyO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RDb21wYXRSZXdhcmRzKGNsYWltZWRSZXdhcmRzRXJhcywgdmFsTGVkZ2VyKS5zb21lKChlKSA9PiByZXdhcmQuZXJhLmVxKGUpKSkge1xuICAgICAgICAgICAgICAgIHJtLnB1c2godmFsaWRhdG9ySWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcm0uZm9yRWFjaCgodmFsaWRhdG9ySWQpID0+IHtcbiAgICAgICAgZGVsZXRlIHJld2FyZC52YWxpZGF0b3JzW3ZhbGlkYXRvcklkXTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZpbHRlclJld2FyZHMoZXJhcywgdmFsSW5mbywgeyBjbGFpbWVkUmV3YXJkc0VyYXMsIHJld2FyZHMsIHN0YWtpbmdMZWRnZXIgfSkge1xuICAgIGNvbnN0IGZpbHRlciA9IGVyYXMuZmlsdGVyKChlKSA9PiAhZXh0cmFjdENvbXBhdFJld2FyZHMoY2xhaW1lZFJld2FyZHNFcmFzLCBzdGFraW5nTGVkZ2VyKS5zb21lKChzKSA9PiBzLmVxKGUpKSk7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHZhbEluZm8ubWFwKChbdl0pID0+IHYpO1xuICAgIGNvbnN0IHF1ZXJ5VmFsaWRhdG9ycyA9IHZhbEluZm8ubWFwKChbLCBxXSkgPT4gcSk7XG4gICAgcmV0dXJuIHJld2FyZHNcbiAgICAgICAgLmZpbHRlcigoeyBpc0VtcHR5IH0pID0+ICFpc0VtcHR5KVxuICAgICAgICAuZmlsdGVyKChyZXdhcmQpID0+IHtcbiAgICAgICAgaWYgKCFmaWx0ZXIuc29tZSgoZSkgPT4gcmV3YXJkLmVyYS5lcShlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVDbGFpbWVkKHZhbGlkYXRvcnMsIHF1ZXJ5VmFsaWRhdG9ycywgcmV3YXJkLCBjbGFpbWVkUmV3YXJkc0VyYXMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKCh7IHZhbGlkYXRvcnMgfSkgPT4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoICE9PSAwKVxuICAgICAgICAubWFwKChyZXdhcmQpID0+IG9iamVjdFNwcmVhZCh7fSwgcmV3YXJkLCB7XG4gICAgICAgIG5vbWluYXRvcnM6IHJld2FyZC5ub21pbmF0aW5nLmZpbHRlcigobikgPT4gcmV3YXJkLnZhbGlkYXRvcnNbbi52YWxpZGF0b3JJZF0pXG4gICAgfSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9zdGFrZXJSZXdhcmRzRXJhcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoZXJhcywgd2l0aEFjdGl2ZSA9IGZhbHNlKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLl9lcmFzUG9pbnRzKGVyYXMsIHdpdGhBY3RpdmUpLFxuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcuX2VyYXNQcmVmcyhlcmFzLCB3aXRoQWN0aXZlKSxcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLl9lcmFzUmV3YXJkcyhlcmFzLCB3aXRoQWN0aXZlKVxuICAgIF0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfc3Rha2VyUmV3YXJkcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoYWNjb3VudElkcywgZXJhcywgd2l0aEFjdGl2ZSA9IGZhbHNlKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLnF1ZXJ5TXVsdGkoYWNjb3VudElkcywgeyB3aXRoQ2xhaW1lZFJld2FyZHNFcmFzOiB0cnVlLCB3aXRoTGVkZ2VyOiB0cnVlIH0pLFxuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcuX3N0YWtlckV4cG9zdXJlcyhhY2NvdW50SWRzLCBlcmFzLCB3aXRoQWN0aXZlKSxcbiAgICAgICAgYXBpLmRlcml2ZS5zdGFraW5nLl9zdGFrZXJSZXdhcmRzRXJhcyhlcmFzLCB3aXRoQWN0aXZlKVxuICAgIF0pLnBpcGUoc3dpdGNoTWFwKChbcXVlcmllcywgZXhwb3N1cmVzLCBlcmFzUmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxSZXdhcmRzID0gcXVlcmllcy5tYXAoKHsgY2xhaW1lZFJld2FyZHNFcmFzLCBzdGFraW5nTGVkZ2VyLCBzdGFzaElkIH0sIGluZGV4KSA9PiAoIXN0YXNoSWQgfHwgKCFzdGFraW5nTGVkZ2VyICYmICFjbGFpbWVkUmV3YXJkc0VyYXMpKVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiBwYXJzZVJld2FyZHMoYXBpLCBzdGFzaElkLCBlcmFzUmVzdWx0LCBleHBvc3VyZXNbaW5kZXhdKSk7XG4gICAgICAgIGlmICh3aXRoQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoYWxsUmV3YXJkcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2FsbFZhbGlkYXRvcnMsIHN0YXNoVmFsaWRhdG9yc10gPSBhbGxVbmlxVmFsaWRhdG9ycyhhbGxSZXdhcmRzKTtcbiAgICAgICAgcmV0dXJuIGFwaS5kZXJpdmUuc3Rha2luZy5xdWVyeU11bHRpKGFsbFZhbGlkYXRvcnMsIHsgd2l0aENsYWltZWRSZXdhcmRzRXJhczogdHJ1ZSwgd2l0aExlZGdlcjogdHJ1ZSB9KS5waXBlKG1hcCgocXVlcmllZFZhbHMpID0+IHF1ZXJpZXMubWFwKCh7IGNsYWltZWRSZXdhcmRzRXJhcywgc3Rha2luZ0xlZGdlciB9LCBpbmRleCkgPT4gZmlsdGVyUmV3YXJkcyhlcmFzLCBzdGFzaFZhbGlkYXRvcnNbaW5kZXhdXG4gICAgICAgICAgICAubWFwKCh2YWxpZGF0b3JJZCkgPT4gW1xuICAgICAgICAgICAgdmFsaWRhdG9ySWQsXG4gICAgICAgICAgICBxdWVyaWVkVmFscy5maW5kKChxKSA9PiBxLmFjY291bnRJZC5lcSh2YWxpZGF0b3JJZCkpXG4gICAgICAgIF0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2KSA9PiAhIXZbMV0pLCB7XG4gICAgICAgICAgICBjbGFpbWVkUmV3YXJkc0VyYXMsXG4gICAgICAgICAgICByZXdhcmRzOiBhbGxSZXdhcmRzW2luZGV4XSxcbiAgICAgICAgICAgIHN0YWtpbmdMZWRnZXJcbiAgICAgICAgfSkpKSk7XG4gICAgfSkpKTtcbn1cbmV4cG9ydCBjb25zdCBzdGFrZXJSZXdhcmRzID0gLyojX19QVVJFX18qLyBmaXJzdE1lbW8oKGFwaSwgYWNjb3VudElkLCB3aXRoQWN0aXZlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuZXJhc0hpc3RvcmljKHdpdGhBY3RpdmUpLnBpcGUoc3dpdGNoTWFwKChlcmFzKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuX3N0YWtlclJld2FyZHMoW2FjY291bnRJZF0sIGVyYXMsIHdpdGhBY3RpdmUpKSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHN0YWtlclJld2FyZHNNdWx0aUVyYXMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZHMsIGVyYXMpID0+IGFjY291bnRJZHMubGVuZ3RoICYmIGVyYXMubGVuZ3RoXG4gICAgICAgID8gYXBpLmRlcml2ZS5zdGFraW5nLl9zdGFrZXJSZXdhcmRzKGFjY291bnRJZHMsIGVyYXMsIGZhbHNlKVxuICAgICAgICA6IG9mKFtdKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gc3Rha2VyUmV3YXJkc011bHRpKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWRzLCB3aXRoQWN0aXZlID0gZmFsc2UpID0+IGFwaS5kZXJpdmUuc3Rha2luZy5lcmFzSGlzdG9yaWMod2l0aEFjdGl2ZSkucGlwZShzd2l0Y2hNYXAoKGVyYXMpID0+IGFwaS5kZXJpdmUuc3Rha2luZy5zdGFrZXJSZXdhcmRzTXVsdGlFcmFzKGFjY291bnRJZHMsIGVyYXMpKSkpO1xufVxuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBlcmFzSGlzdG9yaWNBcHBseUFjY291bnQgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFrZXJTbGFzaGVzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChhY2NvdW50SWQsIGVyYXMsIHdpdGhBY3RpdmUpID0+IHtcbiAgICAgICAgY29uc3Qgc3Rha2VySWQgPSBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnQWNjb3VudElkJywgYWNjb3VudElkKS50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4gYXBpLmRlcml2ZS5zdGFraW5nLl9lcmFzU2xhc2hlcyhlcmFzLCB3aXRoQWN0aXZlKS5waXBlKG1hcCgoc2xhc2hlcykgPT4gc2xhc2hlcy5tYXAoKHsgZXJhLCBub21pbmF0b3JzLCB2YWxpZGF0b3JzIH0pID0+ICh7XG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b3RhbDogbm9taW5hdG9yc1tzdGFrZXJJZF0gfHwgdmFsaWRhdG9yc1tzdGFrZXJJZF0gfHwgYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0JhbGFuY2UnKVxuICAgICAgICB9KSkpKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBzdGFrZXJTbGFzaGVzID0gLyojX19QVVJFX18qLyBlcmFzSGlzdG9yaWNBcHBseUFjY291bnQoJ19zdGFrZXJTbGFzaGVzJyk7XG4iLCJpbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkcnIsIG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmZ1bmN0aW9uIG9uQm9uZGVkRXZlbnQoYXBpKSB7XG4gICAgbGV0IGN1cnJlbnQgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBhcGkucXVlcnkuc3lzdGVtLmV2ZW50cygpLnBpcGUobWFwKChldmVudHMpID0+IHtcbiAgICAgICAgY3VycmVudCA9IGV2ZW50cy5maWx0ZXIoKHsgZXZlbnQsIHBoYXNlIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBoYXNlLmlzQXBwbHlFeHRyaW5zaWMgJiZcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2VjdGlvbiA9PT0gJ3N0YWtpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGhvZCA9PT0gJ0JvbmRlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAgICAgPyBEYXRlLm5vdygpXG4gICAgICAgICAgICA6IGN1cnJlbnQ7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pLCBzdGFydFdpdGgoY3VycmVudCksIGRycih7IHNraXBUaW1lb3V0OiB0cnVlIH0pKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlIHRoZSBsaXN0IG9mIGFsbCB2YWxpZGF0b3Igc3Rhc2hlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3Rhc2hlcyhpbnN0YW5jZUlkLCBhcGkpIHtcbiAgICByZXR1cm4gbWVtbyhpbnN0YW5jZUlkLCAoKSA9PiBvbkJvbmRlZEV2ZW50KGFwaSkucGlwZShzd2l0Y2hNYXAoKCkgPT4gYXBpLnF1ZXJ5LnN0YWtpbmcudmFsaWRhdG9ycy5rZXlzKCkpLCBtYXAoKGtleXMpID0+IGtleXMubWFwKCh7IGFyZ3M6IFt2XSB9KSA9PiB2KS5maWx0ZXIoKGEpID0+IGEpKSkpO1xufVxuIiwiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXJyYXlDaHVuaywgYXJyYXlGbGF0dGVuLCBuZXh0VGljayB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG1lbW8gfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IEVSQV9DSFVOS19TSVpFID0gMTQ7XG5mdW5jdGlvbiBjaHVua0VyYXMoZXJhcywgZm4pIHtcbiAgICBjb25zdCBjaHVua2VkID0gYXJyYXlDaHVuayhlcmFzLCBFUkFfQ0hVTktfU0laRSk7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChjaHVua2VkW2luZGV4XSk7XG4gICAgcmV0dXJuIHN1YmplY3QucGlwZShzd2l0Y2hNYXAoZm4pLCB0YXAoKCkgPT4ge1xuICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaW5kZXggPT09IGNodW5rZWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBzdWJqZWN0LmNvbXBsZXRlKClcbiAgICAgICAgICAgICAgICA6IHN1YmplY3QubmV4dChjaHVua2VkW2luZGV4XSk7XG4gICAgICAgIH0pO1xuICAgIH0pLCB0b0FycmF5KCksIG1hcChhcnJheUZsYXR0ZW4pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJFcmFzKGVyYXMsIGxpc3QpIHtcbiAgICByZXR1cm4gZXJhcy5maWx0ZXIoKGUpID0+ICFsaXN0LnNvbWUoKHsgZXJhIH0pID0+IGUuZXEoZXJhKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVyYXNIaXN0b3JpY0FwcGx5KGZuKSB7XG4gICAgcmV0dXJuIChpbnN0YW5jZUlkLCBhcGkpID0+IFxuICAgIC8vIENhbm5vdCBxdWl0ZSBnZXQgdGhlIHR5cGluZyByaWdodCwgYnV0IGl0IGlzIHJpZ2h0IGluIHRoZSBjb2RlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgbWVtbyhpbnN0YW5jZUlkLCAod2l0aEFjdGl2ZSA9IGZhbHNlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuZXJhc0hpc3RvcmljKHdpdGhBY3RpdmUpLnBpcGUoc3dpdGNoTWFwKChlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmdbZm5dKGUsIHdpdGhBY3RpdmUpKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVyYXNIaXN0b3JpY0FwcGx5QWNjb3VudChmbikge1xuICAgIHJldHVybiAoaW5zdGFuY2VJZCwgYXBpKSA9PiBcbiAgICAvLyBDYW5ub3QgcXVpdGUgZ2V0IHRoZSB0eXBpbmcgcmlnaHQsIGJ1dCBpdCBpcyByaWdodCBpbiB0aGUgY29kZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIG1lbW8oaW5zdGFuY2VJZCwgKGFjY291bnRJZCwgd2l0aEFjdGl2ZSA9IGZhbHNlLCBwYWdlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmcuZXJhc0hpc3RvcmljKHdpdGhBY3RpdmUpLnBpcGUoc3dpdGNoTWFwKChlKSA9PiBhcGkuZGVyaXZlLnN0YWtpbmdbZm5dKGFjY291bnRJZCwgZSwgd2l0aEFjdGl2ZSwgcGFnZSB8fCAwKSkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaW5nbGVFcmEoZm4pIHtcbiAgICByZXR1cm4gKGluc3RhbmNlSWQsIGFwaSkgPT4gXG4gICAgLy8gQ2Fubm90IHF1aXRlIGdldCB0aGUgdHlwaW5nIHJpZ2h0LCBidXQgaXQgaXMgcmlnaHQgaW4gdGhlIGNvZGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICBtZW1vKGluc3RhbmNlSWQsIChlcmEpID0+IGFwaS5kZXJpdmUuc3Rha2luZ1tmbl0oZXJhLCB0cnVlKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUVyYXMoZm4pIHtcbiAgICByZXR1cm4gKGluc3RhbmNlSWQsIGFwaSkgPT4gXG4gICAgLy8gQ2Fubm90IHF1aXRlIGdldCB0aGUgdHlwaW5nIHJpZ2h0LCBidXQgaXQgaXMgcmlnaHQgaW4gdGhlIGNvZGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICBtZW1vKGluc3RhbmNlSWQsIChlcmFzLCB3aXRoQWN0aXZlKSA9PiAhZXJhcy5sZW5ndGhcbiAgICAgICAgPyBvZihbXSlcbiAgICAgICAgOiBjaHVua0VyYXMoZXJhcywgKGVyYXMpID0+IGNvbWJpbmVMYXRlc3QoZXJhcy5tYXAoKGUpID0+IGFwaS5kZXJpdmUuc3Rha2luZ1tmbl0oZSwgd2l0aEFjdGl2ZSkpKSkpO1xufVxuIiwiaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gbmV4dEVsZWN0ZWQoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gXG4gICAgLy8gQ29tcGF0aWJpbGl0eSBmb3IgZnV0dXJlIGdlbmVyYXRpb24gY2hhbmdlcyBpbiBzdGFraW5nLlxuICAgIGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzUGFnZWRcbiAgICAgICAgPyBhcGkuZGVyaXZlLnNlc3Npb24uaW5kZXhlcygpLnBpcGUoXG4gICAgICAgIC8vIG9ubHkgcG9wdWxhdGUgZm9yIG5leHQgZXJhIGluIHRoZSBsYXN0IHNlc3Npb24sIHNvIHRyYWNrIGJvdGggaGVyZSAtIGVudHJpZXMgYXJlIG5vdFxuICAgICAgICAvLyBzdWJzY3JpcHRpb25zLCBzbyB3ZSBuZWVkIGEgdHJpZ2dlciAtIGN1cnJlbnRJbmRleCBhY3RzIGFzIHRoYXQgdHJpZ2dlciB0byByZWZyZXNoXG4gICAgICAgIHN3aXRjaE1hcCgoeyBjdXJyZW50RXJhIH0pID0+IGFwaS5xdWVyeS5zdGFraW5nLmVyYXNTdGFrZXJzUGFnZWQua2V5cyhjdXJyZW50RXJhKSksIFxuICAgICAgICAvLyBEZWR1cGUgYW55IGR1cGxpY2F0ZXNcbiAgICAgICAgbWFwKChrZXlzKSA9PiBbLi4ubmV3IFNldChrZXlzLm1hcCgoeyBhcmdzOiBbLCBhY2NvdW50SWRdIH0pID0+IGFjY291bnRJZC50b1N0cmluZygpKSldLm1hcCgoYSkgPT4gYXBpLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0FjY291bnRJZCcsIGEpKSkpXG4gICAgICAgIDogYXBpLnF1ZXJ5LnN0YWtpbmcuZXJhc1N0YWtlcnNcbiAgICAgICAgICAgID8gYXBpLmRlcml2ZS5zZXNzaW9uLmluZGV4ZXMoKS5waXBlKFxuICAgICAgICAgICAgLy8gb25seSBwb3B1bGF0ZSBmb3IgbmV4dCBlcmEgaW4gdGhlIGxhc3Qgc2Vzc2lvbiwgc28gdHJhY2sgYm90aCBoZXJlIC0gZW50cmllcyBhcmUgbm90XG4gICAgICAgICAgICAvLyBzdWJzY3JpcHRpb25zLCBzbyB3ZSBuZWVkIGEgdHJpZ2dlciAtIGN1cnJlbnRJbmRleCBhY3RzIGFzIHRoYXQgdHJpZ2dlciB0byByZWZyZXNoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHsgY3VycmVudEVyYSB9KSA9PiBhcGkucXVlcnkuc3Rha2luZy5lcmFzU3Rha2Vycy5rZXlzKGN1cnJlbnRFcmEpKSwgXG4gICAgICAgICAgICAvLyBEZWR1cGUgYW55IGR1cGxpY2F0ZXNcbiAgICAgICAgICAgIG1hcCgoa2V5cykgPT4gWy4uLm5ldyBTZXQoa2V5cy5tYXAoKHsgYXJnczogWywgYWNjb3VudElkXSB9KSA9PiBhY2NvdW50SWQudG9TdHJpbmcoKSkpXS5tYXAoKGEpID0+IGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdBY2NvdW50SWQnLCBhKSkpKVxuICAgICAgICAgICAgOiBhcGkucXVlcnkuc3Rha2luZ1snY3VycmVudEVsZWN0ZWQnXSgpKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlIGxhdGVzdCBsaXN0IG9mIHZhbGlkYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRvcnMoaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgcmV0dXJuIG1lbW8oaW5zdGFuY2VJZCwgKCkgPT4gXG4gICAgLy8gU2FkbHkgdGhlIG5vZGUtdGVtcGxhdGUgaXMgKGZvciBzb21lIG9ic2N1cmUgcmVhc29uKSBub3QgY29tcHJlaGVuc2l2ZSwgc28gd2hpbGUgdGhlIGRlcml2ZSB3b3Jrc1xuICAgIC8vIGluIGFsbCBhY3R1YWwgcmVhbC13b3JsZCBkZXBsb3llZCBjaGFpbnMsIGl0IGRvZXMgY3JlYXRlIHNvbWUgY29uZnVzaW9uIGZvciBsaW1pdGVkIHRlbXBsYXRlIGNoYWluc1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucXVlcnkuc2Vzc2lvblxuICAgICAgICAgICAgPyBhcGkucXVlcnkuc2Vzc2lvbi52YWxpZGF0b3JzKClcbiAgICAgICAgICAgIDogb2YoW10pLFxuICAgICAgICBhcGkucXVlcnkuc3Rha2luZ1xuICAgICAgICAgICAgPyBhcGkuZGVyaXZlLnN0YWtpbmcubmV4dEVsZWN0ZWQoKVxuICAgICAgICAgICAgOiBvZihbXSlcbiAgICBdKS5waXBlKG1hcCgoW3ZhbGlkYXRvcnMsIG5leHRFbGVjdGVkXSkgPT4gKHtcbiAgICAgICAgbmV4dEVsZWN0ZWQ6IG5leHRFbGVjdGVkLmxlbmd0aFxuICAgICAgICAgICAgPyBuZXh0RWxlY3RlZFxuICAgICAgICAgICAgOiB2YWxpZGF0b3JzLFxuICAgICAgICB2YWxpZGF0b3JzXG4gICAgfSkpKSk7XG59XG4iLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuY29uc3QgREVGQVVMVF9GTEFHUyA9IHsgd2l0aENvbnRyb2xsZXI6IHRydWUsIHdpdGhQcmVmczogdHJ1ZSB9O1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRpbmdJbmZvKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChmbGFncyA9IERFRkFVTFRfRkxBR1MpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcudmFsaWRhdG9ycygpLFxuICAgICAgICBhcGkuZGVyaXZlLnN0YWtpbmcuc3Rhc2hlcygpXG4gICAgXSkucGlwZShzd2l0Y2hNYXAoKFt7IG5leHRFbGVjdGVkIH0sIHN0YXNoZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZWN0ZWQgPSBuZXh0RWxlY3RlZC5tYXAoKGEpID0+IGEudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IHdhaXRpbmcgPSBzdGFzaGVzLmZpbHRlcigodikgPT4gIWVsZWN0ZWQuaW5jbHVkZXModi50b1N0cmluZygpKSk7XG4gICAgICAgIHJldHVybiBhcGkuZGVyaXZlLnN0YWtpbmcucXVlcnlNdWx0aSh3YWl0aW5nLCBmbGFncykucGlwZShtYXAoKGluZm8pID0+ICh7XG4gICAgICAgICAgICBpbmZvLFxuICAgICAgICAgICAgd2FpdGluZ1xuICAgICAgICB9KSkpO1xuICAgIH0pKSk7XG59XG4iLCJpbXBvcnQgeyBoYXNQcm9wb3NhbHMgYXMgY29sbGVjdGl2ZUhhc1Byb3Bvc2FscywgbWVtYmVycyBhcyBjb2xsZWN0aXZlTWVtYmVycywgcHJpbWUgYXMgY29sbGVjdGl2ZVByaW1lLCBwcm9wb3NhbCBhcyBjb2xsZWN0aXZlUHJvcG9zYWwsIHByb3Bvc2FsQ291bnQgYXMgY29sbGVjdGl2ZVByb3Bvc2FsQ291bnQsIHByb3Bvc2FsSGFzaGVzIGFzIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcywgcHJvcG9zYWxzIGFzIGNvbGxlY3RpdmVQcm9wb3NhbHMgfSBmcm9tICcuLi9jb2xsZWN0aXZlL2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCBtZW1iZXJzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlTWVtYmVycygndGVjaG5pY2FsQ29tbWl0dGVlJyk7XG5leHBvcnQgY29uc3QgaGFzUHJvcG9zYWxzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlSGFzUHJvcG9zYWxzKCd0ZWNobmljYWxDb21taXR0ZWUnKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbCA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByb3Bvc2FsKCd0ZWNobmljYWxDb21taXR0ZWUnKTtcbmV4cG9ydCBjb25zdCBwcm9wb3NhbENvdW50ID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWxDb3VudCgndGVjaG5pY2FsQ29tbWl0dGVlJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxIYXNoZXMgPSAvKiNfX1BVUkVfXyovIGNvbGxlY3RpdmVQcm9wb3NhbEhhc2hlcygndGVjaG5pY2FsQ29tbWl0dGVlJyk7XG5leHBvcnQgY29uc3QgcHJvcG9zYWxzID0gLyojX19QVVJFX18qLyBjb2xsZWN0aXZlUHJvcG9zYWxzKCd0ZWNobmljYWxDb21taXR0ZWUnKTtcbmV4cG9ydCBjb25zdCBwcmltZSA9IC8qI19fUFVSRV9fKi8gY29sbGVjdGl2ZVByaW1lKCd0ZWNobmljYWxDb21taXR0ZWUnKTtcbiIsImV4cG9ydCAqIGZyb20gJy4vcHJvcG9zYWxzLmpzJztcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnO1xuZnVuY3Rpb24gcGFyc2VSZXN1bHQoYXBpLCB7IGFsbElkcywgYWxsUHJvcG9zYWxzLCBhcHByb3ZhbElkcywgY291bmNpbFByb3Bvc2FscywgcHJvcG9zYWxDb3VudCB9KSB7XG4gICAgY29uc3QgYXBwcm92YWxzID0gW107XG4gICAgY29uc3QgcHJvcG9zYWxzID0gW107XG4gICAgY29uc3QgY291bmNpbFRyZWFzdXJ5ID0gY291bmNpbFByb3Bvc2Fscy5maWx0ZXIoKHsgcHJvcG9zYWwgfSkgPT4gcHJvcG9zYWwgJiYgKGFwaS50eC50cmVhc3VyeS5hcHByb3ZlUHJvcG9zYWwuaXMocHJvcG9zYWwpIHx8XG4gICAgICAgIGFwaS50eC50cmVhc3VyeS5yZWplY3RQcm9wb3NhbC5pcyhwcm9wb3NhbCkpKTtcbiAgICBhbGxJZHMuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChhbGxQcm9wb3NhbHNbaW5kZXhdLmlzU29tZSkge1xuICAgICAgICAgICAgY29uc3QgY291bmNpbCA9IGNvdW5jaWxUcmVhc3VyeVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgcHJvcG9zYWwgfSkgPT4gcHJvcG9zYWwgJiYgaWQuZXEocHJvcG9zYWwuYXJnc1swXSkpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucHJvcG9zYWwgJiYgYi5wcm9wb3NhbFxuICAgICAgICAgICAgICAgID8gYS5wcm9wb3NhbC5tZXRob2QubG9jYWxlQ29tcGFyZShiLnByb3Bvc2FsLm1ldGhvZClcbiAgICAgICAgICAgICAgICA6IGEucHJvcG9zYWxcbiAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICA6IDEpO1xuICAgICAgICAgICAgY29uc3QgaXNBcHByb3ZhbCA9IGFwcHJvdmFsSWRzLnNvbWUoKGFwcHJvdmFsSWQpID0+IGFwcHJvdmFsSWQuZXEoaWQpKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcml2ZWQgPSB7IGNvdW5jaWwsIGlkLCBwcm9wb3NhbDogYWxsUHJvcG9zYWxzW2luZGV4XS51bndyYXAoKSB9O1xuICAgICAgICAgICAgaWYgKGlzQXBwcm92YWwpIHtcbiAgICAgICAgICAgICAgICBhcHByb3ZhbHMucHVzaChkZXJpdmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb3Bvc2Fscy5wdXNoKGRlcml2ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYXBwcm92YWxzLCBwcm9wb3NhbENvdW50LCBwcm9wb3NhbHMgfTtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlUHJvcG9zYWxzKGFwaSwgcHJvcG9zYWxDb3VudCwgYXBwcm92YWxJZHMpIHtcbiAgICBjb25zdCBwcm9wb3NhbElkcyA9IFtdO1xuICAgIGNvbnN0IGNvdW50ID0gcHJvcG9zYWxDb3VudC50b051bWJlcigpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgICAgICBpZiAoIWFwcHJvdmFsSWRzLnNvbWUoKGlkKSA9PiBpZC5lcW4oaW5kZXgpKSkge1xuICAgICAgICAgICAgcHJvcG9zYWxJZHMucHVzaChhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnUHJvcG9zYWxJbmRleCcsIGluZGV4KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWxsSWRzID0gWy4uLnByb3Bvc2FsSWRzLCAuLi5hcHByb3ZhbElkc107XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucXVlcnkudHJlYXN1cnkucHJvcG9zYWxzLm11bHRpKGFsbElkcyksXG4gICAgICAgIGFwaS5kZXJpdmUuY291bmNpbFxuICAgICAgICAgICAgPyBhcGkuZGVyaXZlLmNvdW5jaWwucHJvcG9zYWxzKClcbiAgICAgICAgICAgIDogb2YoW10pXG4gICAgXSkucGlwZShtYXAoKFthbGxQcm9wb3NhbHMsIGNvdW5jaWxQcm9wb3NhbHNdKSA9PiBwYXJzZVJlc3VsdChhcGksIHsgYWxsSWRzLCBhbGxQcm9wb3NhbHMsIGFwcHJvdmFsSWRzLCBjb3VuY2lsUHJvcG9zYWxzLCBwcm9wb3NhbENvdW50IH0pKSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSBhbGwgYWN0aXZlIGFuZCBhcHByb3ZlZCB0cmVhc3VyeSBwcm9wb3NhbHMsIGFsb25nIHdpdGggdGhlaXIgaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcG9zYWxzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsICgpID0+IGFwaS5xdWVyeS50cmVhc3VyeVxuICAgICAgICA/IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgYXBpLnF1ZXJ5LnRyZWFzdXJ5LnByb3Bvc2FsQ291bnQoKSxcbiAgICAgICAgICAgIGFwaS5xdWVyeS50cmVhc3VyeS5hcHByb3ZhbHMoKVxuICAgICAgICBdKS5waXBlKHN3aXRjaE1hcCgoW3Byb3Bvc2FsQ291bnQsIGFwcHJvdmFsSWRzXSkgPT4gcmV0cmlldmVQcm9wb3NhbHMoYXBpLCBwcm9wb3NhbENvdW50LCBhcHByb3ZhbElkcykpKVxuICAgICAgICA6IG9mKHtcbiAgICAgICAgICAgIGFwcHJvdmFsczogW10sXG4gICAgICAgICAgICBwcm9wb3NhbENvdW50OiBhcGkucmVnaXN0cnkuY3JlYXRlVHlwZSgnUHJvcG9zYWxJbmRleCcpLFxuICAgICAgICAgICAgcHJvcG9zYWxzOiBbXVxuICAgICAgICB9KSk7XG59XG4iLCJpbXBvcnQgeyBCTiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBjb25zdCBGQUxMQkFDS19NQVhfSEFTSF9DT1VOVCA9IDI1MDtcbmV4cG9ydCBjb25zdCBGQUxMQkFDS19QRVJJT0QgPSBuZXcgQk4oNiAqIDEwMDApO1xuZXhwb3J0IGNvbnN0IE1BWF9GSU5BTElUWV9MQUcgPSBuZXcgQk4oNSk7XG5leHBvcnQgY29uc3QgTU9SVEFMX1BFUklPRCA9IG5ldyBCTig1ICogNjAgKiAxMDAwKTtcbiIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZXZlbnRzKGluc3RhbmNlSWQsIGFwaSkge1xuICAgIHJldHVybiBtZW1vKGluc3RhbmNlSWQsIChibG9ja0hhc2gpID0+IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBhcGkucnBjLmNoYWluLmdldEJsb2NrKGJsb2NrSGFzaCksXG4gICAgICAgIGFwaS5xdWVyeUF0KGJsb2NrSGFzaCkucGlwZShzd2l0Y2hNYXAoKHF1ZXJ5QXQpID0+IHF1ZXJ5QXQuc3lzdGVtLmV2ZW50cygpKSlcbiAgICBdKS5waXBlKG1hcCgoW2Jsb2NrLCBldmVudHNdKSA9PiAoeyBibG9jaywgZXZlbnRzIH0pKSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9ldmVudHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zaWduaW5nSW5mby5qcyc7XG4iLCJpbXBvcnQgeyBjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzTnVtYmVyLCBpc1VuZGVmaW5lZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IHVud3JhcEJsb2NrTnVtYmVyIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBGQUxMQkFDS19NQVhfSEFTSF9DT1VOVCwgRkFMTEJBQ0tfUEVSSU9ELCBNQVhfRklOQUxJVFlfTEFHLCBNT1JUQUxfUEVSSU9EIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuZnVuY3Rpb24gbGF0ZXN0Tm9uY2UoYXBpLCBhZGRyZXNzKSB7XG4gICAgcmV0dXJuIGFwaS5kZXJpdmUuYmFsYW5jZXMuYWNjb3VudChhZGRyZXNzKS5waXBlKG1hcCgoeyBhY2NvdW50Tm9uY2UgfSkgPT4gYWNjb3VudE5vbmNlKSk7XG59XG5mdW5jdGlvbiBuZXh0Tm9uY2UoYXBpLCBhZGRyZXNzKSB7XG4gICAgcmV0dXJuIGFwaS5ycGMuc3lzdGVtPy5hY2NvdW50TmV4dEluZGV4XG4gICAgICAgID8gYXBpLnJwYy5zeXN0ZW0uYWNjb3VudE5leHRJbmRleChhZGRyZXNzKVxuICAgICAgICA6IGxhdGVzdE5vbmNlKGFwaSwgYWRkcmVzcyk7XG59XG5mdW5jdGlvbiBzaWduaW5nSGVhZGVyKGFwaSkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgYXBpLnJwYy5jaGFpbi5nZXRIZWFkZXIoKS5waXBlKHN3aXRjaE1hcCgoaGVhZGVyKSA9PiBcbiAgICAgICAgLy8gY2hlY2sgZm9yIGNoYWlucyBhdCBnZW5lc2lzICh1bnRpbCBibG9jayAxIGlzIHByb2R1Y2VkLCBlLmcuIDZzKSwgc2luY2VcbiAgICAgICAgLy8gd2UgZG8gbmVlZCB0byBhbGxvdyB0cmFuc2FjdGlvbnMgYXQgY2hhaW4gc3RhcnQgKGFsc28gZGV2L3NlYWwgY2hhaW5zKVxuICAgICAgICBoZWFkZXIucGFyZW50SGFzaC5pc0VtcHR5XG4gICAgICAgICAgICA/IG9mKGhlYWRlcilcbiAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIHRoZSBjdXJyZW50IGJsb2NrLCB3ZSB1c2UgdGhlIHBhcmVudCB0byBtaW5pbWl6ZSB0aGVcbiAgICAgICAgICAgIC8vIGltcGFjdCBvZiBmb3JrcyBvbiB0aGUgc3lzdGVtLCBidXQgbm90IGNvbXBsZXRlbHkgcmVtb3ZlIGl0XG4gICAgICAgICAgICA6IGFwaS5ycGMuY2hhaW4uZ2V0SGVhZGVyKGhlYWRlci5wYXJlbnRIYXNoKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YoaGVhZGVyKSkpKSksXG4gICAgICAgIGFwaS5ycGMuY2hhaW4uZ2V0RmluYWxpemVkSGVhZCgpLnBpcGUoc3dpdGNoTWFwKChoYXNoKSA9PiBhcGkucnBjLmNoYWluLmdldEhlYWRlcihoYXNoKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKSkpXG4gICAgXSkucGlwZShtYXAoKFtjdXJyZW50LCBmaW5hbGl6ZWRdKSA9PiBcbiAgICAvLyBkZXRlcm1pbmUgdGhlIGhhc2ggdG8gdXNlLCBjdXJyZW50IHdoZW4gbGFnID4gbWF4LCBlbHNlIGZpbmFsaXplZFxuICAgICFmaW5hbGl6ZWQgfHwgdW53cmFwQmxvY2tOdW1iZXIoY3VycmVudCkuc3ViKHVud3JhcEJsb2NrTnVtYmVyKGZpbmFsaXplZCkpLmd0KE1BWF9GSU5BTElUWV9MQUcpXG4gICAgICAgID8gY3VycmVudFxuICAgICAgICA6IGZpbmFsaXplZCkpO1xufVxuZnVuY3Rpb24gYmFiZU9yQXVyYVBlcmlvZChhcGkpIHtcbiAgICBjb25zdCBwZXJpb2QgPSBhcGkuY29uc3RzLmJhYmU/LmV4cGVjdGVkQmxvY2tUaW1lIHx8XG4gICAgICAgIC8vIHRoaXMgd2lsbCBiZSBwcmVzZW50IG9uZXMgaHR0cHM6Ly9naXRodWIuY29tL3Bhcml0eXRlY2gvcG9sa2Fkb3Qtc2RrL3B1bGwvMzczMiBpcyBtZXJnZWRcbiAgICAgICAgYXBpLmNvbnN0c1snYXVyYSddPy5zbG90RHVyYXRpb24gfHxcbiAgICAgICAgYXBpLmNvbnN0cy50aW1lc3RhbXA/Lm1pbmltdW1QZXJpb2QubXVsbigyKTtcbiAgICByZXR1cm4gIXBlcmlvZC5pc1plcm8oKSA/IHBlcmlvZCA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaWduaW5nSW5mbyhfaW5zdGFuY2VJZCwgYXBpKSB7XG4gICAgLy8gbm8gbWVtbywgd2Ugd2FudCB0byBkbyB0aGlzIGZyZXNoIG9uIGVhY2ggcnVuXG4gICAgcmV0dXJuIChhZGRyZXNzLCBub25jZSwgZXJhKSA9PiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgLy8gcmV0cmlldmUgbm9uY2UgaWYgbm9uZSB3YXMgc3BlY2lmaWVkXG4gICAgICAgIGlzVW5kZWZpbmVkKG5vbmNlKVxuICAgICAgICAgICAgPyBsYXRlc3ROb25jZShhcGksIGFkZHJlc3MpXG4gICAgICAgICAgICA6IG5vbmNlID09PSAtMVxuICAgICAgICAgICAgICAgID8gbmV4dE5vbmNlKGFwaSwgYWRkcmVzcylcbiAgICAgICAgICAgICAgICA6IG9mKGFwaS5yZWdpc3RyeS5jcmVhdGVUeXBlKCdJbmRleCcsIG5vbmNlKSksXG4gICAgICAgIC8vIGlmIG5vIGVyYSAoY3JlYXRlKSBvciBlcmEgPiAwIChtb3J0YWwpLCBkbyBibG9jayByZXRyaWV2YWxcbiAgICAgICAgKGlzVW5kZWZpbmVkKGVyYSkgfHwgKGlzTnVtYmVyKGVyYSkgJiYgZXJhID4gMCkpXG4gICAgICAgICAgICA/IHNpZ25pbmdIZWFkZXIoYXBpKVxuICAgICAgICAgICAgOiBvZihudWxsKVxuICAgIF0pLnBpcGUobWFwKChbbm9uY2UsIGhlYWRlcl0pID0+ICh7XG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgbW9ydGFsTGVuZ3RoOiBNYXRoLm1pbihhcGkuY29uc3RzLnN5c3RlbT8uYmxvY2tIYXNoQ291bnQ/LnRvTnVtYmVyKCkgfHwgRkFMTEJBQ0tfTUFYX0hBU0hfQ09VTlQsIE1PUlRBTF9QRVJJT0RcbiAgICAgICAgICAgIC5kaXYoYmFiZU9yQXVyYVBlcmlvZChhcGkpIHx8IEZBTExCQUNLX1BFUklPRClcbiAgICAgICAgICAgIC5pYWRkKE1BWF9GSU5BTElUWV9MQUcpXG4gICAgICAgICAgICAudG9OdW1iZXIoKSksXG4gICAgICAgIG5vbmNlXG4gICAgfSkpKTtcbn1cbiIsImltcG9ydCB7IGV4dHJhY3RBdXRob3IgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhlYWRlckV4dGVuZGVkKHJlZ2lzdHJ5LCBoZWFkZXIsIHZhbGlkYXRvcnMsIGF1dGhvcikge1xuICAgIC8vIGFuIGluc3RhbmNlIG9mIHRoZSBiYXNlIGV4dHJpbnNpYyBmb3IgdXMgdG8gZXh0ZW5kXG4gICAgY29uc3QgSGVhZGVyQmFzZSA9IHJlZ2lzdHJ5LmNyZWF0ZUNsYXNzKCdIZWFkZXInKTtcbiAgICBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEhlYWRlckJhc2Uge1xuICAgICAgICBfX2ludGVybmFsX19hdXRob3I7XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBoZWFkZXIsIHZhbGlkYXRvcnMsIGF1dGhvcikge1xuICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIGhlYWRlcik7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2F1dGhvciA9IGF1dGhvciB8fCBleHRyYWN0QXV0aG9yKHRoaXMuZGlnZXN0LCB2YWxpZGF0b3JzIHx8IFtdKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEF0SGFzaCA9IGhlYWRlcj8uY3JlYXRlZEF0SGFzaDtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlbmllbmNlIG1ldGhvZCwgcmV0dXJucyB0aGUgYXV0aG9yIGZvciB0aGUgYmxvY2tcbiAgICAgICAgICovXG4gICAgICAgIGdldCBhdXRob3IoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19hdXRob3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBsZW1lbnRhdGlvbihyZWdpc3RyeSwgaGVhZGVyLCB2YWxpZGF0b3JzLCBhdXRob3IpO1xufVxuIiwiaW1wb3J0IHsgZXh0cmFjdEF1dGhvciB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBtYXBFeHRyaW5zaWNzKGV4dHJpbnNpY3MsIHJlY29yZHMpIHtcbiAgICByZXR1cm4gZXh0cmluc2ljcy5tYXAoKGV4dHJpbnNpYywgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGRpc3BhdGNoRXJyb3I7XG4gICAgICAgIGxldCBkaXNwYXRjaEluZm87XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHJlY29yZHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgcGhhc2UgfSkgPT4gcGhhc2UuaXNBcHBseUV4dHJpbnNpYyAmJiBwaGFzZS5hc0FwcGx5RXh0cmluc2ljLmVxKGluZGV4KSlcbiAgICAgICAgICAgIC5tYXAoKHsgZXZlbnQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNlY3Rpb24gPT09ICdzeXN0ZW0nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Lm1ldGhvZCA9PT0gJ0V4dHJpbnNpY1N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoSW5mbyA9IGV2ZW50LmRhdGFbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50Lm1ldGhvZCA9PT0gJ0V4dHJpbnNpY0ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFcnJvciA9IGV2ZW50LmRhdGFbMF07XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoSW5mbyA9IGV2ZW50LmRhdGFbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgZGlzcGF0Y2hFcnJvciwgZGlzcGF0Y2hJbmZvLCBldmVudHMsIGV4dHJpbnNpYyB9O1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZ25lZEJsb2NrRXh0ZW5kZWQocmVnaXN0cnksIGJsb2NrLCBldmVudHMsIHZhbGlkYXRvcnMsIGF1dGhvcikge1xuICAgIC8vIGFuIGluc3RhbmNlIG9mIHRoZSBiYXNlIGV4dHJpbnNpYyBmb3IgdXMgdG8gZXh0ZW5kXG4gICAgY29uc3QgU2lnbmVkQmxvY2tCYXNlID0gcmVnaXN0cnkuY3JlYXRlQ2xhc3MoJ1NpZ25lZEJsb2NrJyk7XG4gICAgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBTaWduZWRCbG9ja0Jhc2Uge1xuICAgICAgICBfX2ludGVybmFsX19hdXRob3I7XG4gICAgICAgIF9faW50ZXJuYWxfX2V2ZW50cztcbiAgICAgICAgX19pbnRlcm5hbF9fZXh0cmluc2ljcztcbiAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIGJsb2NrLCBldmVudHMsIHZhbGlkYXRvcnMsIGF1dGhvcikge1xuICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIGJsb2NrKTtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXV0aG9yID0gYXV0aG9yIHx8IGV4dHJhY3RBdXRob3IodGhpcy5ibG9jay5oZWFkZXIuZGlnZXN0LCB2YWxpZGF0b3JzIHx8IFtdKTtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRzID0gZXZlbnRzIHx8IFtdO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19leHRyaW5zaWNzID0gbWFwRXh0cmluc2ljcyh0aGlzLmJsb2NrLmV4dHJpbnNpY3MsIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRzKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlZEF0SGFzaCA9IGJsb2NrPy5jcmVhdGVkQXRIYXNoO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVuaWVuY2UgbWV0aG9kLCByZXR1cm5zIHRoZSBhdXRob3IgZm9yIHRoZSBibG9ja1xuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IGF1dGhvcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2F1dGhvcjtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlbmllbmNlIG1ldGhvZCwgcmV0dXJucyB0aGUgZXZlbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmxvY2tcbiAgICAgICAgICovXG4gICAgICAgIGdldCBldmVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19ldmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBleHRyaW5zaWNzIGFuZCB0aGVpciBldmVudHMsIG1hcHBlZFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0IGV4dHJpbnNpY3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19leHRyaW5zaWNzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wbGVtZW50YXRpb24ocmVnaXN0cnksIGJsb2NrLCBldmVudHMsIHZhbGlkYXRvcnMsIGF1dGhvcik7XG59XG4iLCJleHBvcnQgeyBjcmVhdGVIZWFkZXJFeHRlbmRlZCB9IGZyb20gJy4vSGVhZGVyRXh0ZW5kZWQuanMnO1xuZXhwb3J0IHsgY3JlYXRlU2lnbmVkQmxvY2tFeHRlbmRlZCB9IGZyb20gJy4vU2lnbmVkQmxvY2tFeHRlbmRlZC5qcyc7XG4iLCJleHBvcnQgZnVuY3Rpb24gZXh0cmFjdEF1dGhvcihkaWdlc3QsIHNlc3Npb25WYWxpZGF0b3JzKSB7XG4gICAgY29uc3QgW2NpdGVtXSA9IGRpZ2VzdC5sb2dzLmZpbHRlcigoZSkgPT4gZS5pc0NvbnNlbnN1cyk7XG4gICAgY29uc3QgW3BpdGVtXSA9IGRpZ2VzdC5sb2dzLmZpbHRlcigoZSkgPT4gZS5pc1ByZVJ1bnRpbWUpO1xuICAgIGNvbnN0IFtzaXRlbV0gPSBkaWdlc3QubG9ncy5maWx0ZXIoKGUpID0+IGUuaXNTZWFsKTtcbiAgICBsZXQgYWNjb3VudElkO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgaXMgY3JpdGljYWwgdG8gYmUgZmlyc3QgZm9yIEJBQkUgKGJlZm9yZSBDb25zZW5zdXMpXG4gICAgICAgIC8vIElmIG5vdCBmaXJzdCwgd2UgZW5kIHVwIGRyb3BwaW5nIHRoZSBhdXRob3IgYXQgc2Vzc2lvbi1lbmRcbiAgICAgICAgaWYgKHBpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBbZW5naW5lLCBkYXRhXSA9IHBpdGVtLmFzUHJlUnVudGltZTtcbiAgICAgICAgICAgIGFjY291bnRJZCA9IGVuZ2luZS5leHRyYWN0QXV0aG9yKGRhdGEsIHNlc3Npb25WYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjY291bnRJZCAmJiBjaXRlbSkge1xuICAgICAgICAgICAgY29uc3QgW2VuZ2luZSwgZGF0YV0gPSBjaXRlbS5hc0NvbnNlbnN1cztcbiAgICAgICAgICAgIGFjY291bnRJZCA9IGVuZ2luZS5leHRyYWN0QXV0aG9yKGRhdGEsIHNlc3Npb25WYWxpZGF0b3JzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTRUFMLCBzdGlsbCB1c2VkIGluIGUuZy4gS3VsdXB1IGZvciBwb3dcbiAgICAgICAgaWYgKCFhY2NvdW50SWQgJiYgc2l0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IFtlbmdpbmUsIGRhdGFdID0gc2l0ZW0uYXNTZWFsO1xuICAgICAgICAgICAgYWNjb3VudElkID0gZW5naW5lLmV4dHJhY3RBdXRob3IoZGF0YSwgc2Vzc2lvblZhbGlkYXRvcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgfVxuICAgIHJldHVybiBhY2NvdW50SWQ7XG59XG4iLCJpbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgZnVuY3Rpb24gdW53cmFwQmxvY2tOdW1iZXIoaGRyKSB7XG4gICAgcmV0dXJuIGlzQ29tcGFjdChoZHIubnVtYmVyKVxuICAgICAgICA/IGhkci5udW1iZXIudW53cmFwKClcbiAgICAgICAgOiBoZHIubnVtYmVyO1xufVxuIiwiaW1wb3J0IHsgZGVyaXZlTm9vcENhY2hlIH0gZnJvbSAnLi9jYWNoZUltcGwuanMnO1xuY29uc3QgQ0hBQ0hFX0VYUElSWSA9IDcgKiAoMjQgKiA2MCkgKiAoNjAgKiAxMDAwKTtcbmxldCBkZXJpdmVDYWNoZTtcbmZ1bmN0aW9uIHdyYXBDYWNoZShrZXlTdGFydCwgY2FjaGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZWw6IChwYXJ0aWFsKSA9PiBjYWNoZS5kZWwoYCR7a2V5U3RhcnR9JHtwYXJ0aWFsfWApLFxuICAgICAgICBmb3JFYWNoOiBjYWNoZS5mb3JFYWNoLFxuICAgICAgICBnZXQ6IChwYXJ0aWFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgJHtrZXlTdGFydH0ke3BhcnRpYWx9YDtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgICAgIGNhY2hlZC54ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCBjYWNoZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWQudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKHBhcnRpYWwsIHYpID0+IHtcbiAgICAgICAgICAgIGNhY2hlLnNldChgJHtrZXlTdGFydH0ke3BhcnRpYWx9YCwgeyB2LCB4OiBEYXRlLm5vdygpIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2FjaGUoY2FjaGUpIHtcbiAgICAvLyBjbGVhciBhbGwgZXhwaXJlZCB2YWx1ZXNcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFsbCA9IFtdO1xuICAgIGNhY2hlLmZvckVhY2goKGtleSwgeyB4IH0pID0+IHtcbiAgICAgICAgKChub3cgLSB4KSA+IENIQUNIRV9FWFBJUlkpICYmIGFsbC5wdXNoKGtleSk7XG4gICAgfSk7XG4gICAgLy8gZG9uJ3QgZG8gZGVsZXRlIGluc2lkZSBsb29wLCBqdXN0IGluLWNhc2VcbiAgICBhbGwuZm9yRWFjaCgoa2V5KSA9PiBjYWNoZS5kZWwoa2V5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVyaXZlQ2FjaGUocHJlZml4ID0gJycsIGNhY2hlKSB7XG4gICAgZGVyaXZlQ2FjaGUgPSBjYWNoZVxuICAgICAgICA/IHdyYXBDYWNoZShgZGVyaXZlOiR7cHJlZml4fTpgLCBjYWNoZSlcbiAgICAgICAgOiBkZXJpdmVOb29wQ2FjaGU7XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGNsZWFyQ2FjaGUoY2FjaGUpO1xuICAgIH1cbn1cbnNldERlcml2ZUNhY2hlKCk7XG5leHBvcnQgeyBkZXJpdmVDYWNoZSB9O1xuIiwiY29uc3QgbWFwQ2FjaGUgPSBuZXcgTWFwKCk7XG5leHBvcnQgY29uc3QgZGVyaXZlTWFwQ2FjaGUgPSB7XG4gICAgZGVsOiAoa2V5KSA9PiB7XG4gICAgICAgIG1hcENhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH0sXG4gICAgZm9yRWFjaDogKGNiKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIG1hcENhY2hlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY2Ioaywgdik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldDogKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gbWFwQ2FjaGUuZ2V0KGtleSk7XG4gICAgfSxcbiAgICBzZXQ6IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIG1hcENhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IGRlcml2ZU5vb3BDYWNoZSA9IHtcbiAgICBkZWw6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBmb3JFYWNoOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgZ2V0OiAoKSA9PiB1bmRlZmluZWQsXG4gICAgc2V0OiAoXywgdmFsdWUpID0+IHZhbHVlXG59O1xuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAnQHBvbGthZG90L3JwYy1jb3JlJztcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdE9ic2VydmFibGUob2JzKSB7XG4gICAgcmV0dXJuIG9icy5waXBlKG1hcCgoW2FdKSA9PiBhKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RNZW1vKGZuKSB7XG4gICAgcmV0dXJuIChpbnN0YW5jZUlkLCBhcGkpID0+IG1lbW8oaW5zdGFuY2VJZCwgKC4uLmFyZ3MpID0+IGZpcnN0T2JzZXJ2YWJsZShmbihhcGksIC4uLmFyZ3MpKSk7XG59XG4iLCJpbXBvcnQgeyBsYXp5TWV0aG9kLCBsYXp5TWV0aG9kcyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBsYXp5RGVyaXZlU2VjdGlvbihyZXN1bHQsIHNlY3Rpb24sIGdldEtleXMsIGNyZWF0b3IpIHtcbiAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc2VjdGlvbiwgKCkgPT4gbGF6eU1ldGhvZHMoe30sIGdldEtleXMoc2VjdGlvbiksIChtZXRob2QpID0+IGNyZWF0b3Ioc2VjdGlvbiwgbWV0aG9kKSkpO1xufVxuIiwiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tLCBtYXAsIG9mLCBzd2l0Y2hNYXAsIHRhcCwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0QXZhaWxhYmxlRGVyaXZlcyB9IGZyb20gJ0Bwb2xrYWRvdC9hcGktZGVyaXZlJztcbmltcG9ydCB7IG1lbW8sIFJwY0NvcmUgfSBmcm9tICdAcG9sa2Fkb3QvcnBjLWNvcmUnO1xuaW1wb3J0IHsgV3NQcm92aWRlciB9IGZyb20gJ0Bwb2xrYWRvdC9ycGMtcHJvdmlkZXInO1xuaW1wb3J0IHsgZXhwYW5kTWV0YWRhdGEsIEdlbmVyaWNFeHRyaW5zaWMsIHR5cGVEZWZpbml0aW9ucywgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzJztcbmltcG9ydCB7IGdldFNwZWNSdW50aW1lIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWtub3duJztcbmltcG9ydCB7IGFycmF5Q2h1bmssIGFycmF5RmxhdHRlbiwgYXNzZXJ0UmV0dXJuLCBCTiwgY29tcGFjdFN0cmlwTGVuZ3RoLCBsYXp5TWV0aG9kLCBsYXp5TWV0aG9kcywgbG9nZ2VyLCBuZXh0VGljaywgb2JqZWN0U3ByZWFkLCBzdHJpbmdDYW1lbENhc2UsIHN0cmluZ1VwcGVyRmlyc3QsIHU4YUNvbmNhdFN0cmljdCwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBibGFrZTJBc0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5pbXBvcnQgeyBjcmVhdGVTdWJtaXR0YWJsZSB9IGZyb20gJy4uL3N1Ym1pdHRhYmxlL2luZGV4LmpzJztcbmltcG9ydCB7IGF1Z21lbnRPYmplY3QgfSBmcm9tICcuLi91dGlsL2F1Z21lbnRPYmplY3QuanMnO1xuaW1wb3J0IHsgZGVjb3JhdGVEZXJpdmVTZWN0aW9ucyB9IGZyb20gJy4uL3V0aWwvZGVjb3JhdGUuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFN0b3JhZ2VBcmdzIH0gZnJvbSAnLi4vdXRpbC92YWxpZGF0ZS5qcyc7XG5pbXBvcnQgeyBFdmVudHMgfSBmcm9tICcuL0V2ZW50cy5qcyc7XG5pbXBvcnQgeyBmaW5kQ2FsbCwgZmluZEVycm9yIH0gZnJvbSAnLi9maW5kLmpzJztcbmNvbnN0IFBBR0VfU0laRV9LID0gMTAwMDsgLy8gbGltaXQgYWxpZ25lZCB3aXRoIHRoZSAxayBvbiB0aGUgbm9kZSAodHJpZSBsb29rdXBzIGFyZSBoZWF2eSlcbmNvbnN0IFBBR0VfU0laRV9WID0gMjUwOyAvLyBsaW1pdGVkIHNpbmNlIHRoZSBkYXRhIG1heSBiZSA+IDE2TUIgKGUuZy4gbWlzZmlyaW5nIGVsZWN0aW9ucylcbmNvbnN0IFBBR0VfU0laRV9RID0gNTA7IC8vIHF1ZXVlIG9mIHBlbmRpbmcgc3RvcmFnZSBxdWVyaWVzIChtYXBwZWQgdG9nZXRoZXIsIG5leHQgdGljaylcbmNvbnN0IGwgPSBsb2dnZXIoJ2FwaS9pbml0Jyk7XG5sZXQgaW5zdGFuY2VDb3VudGVyID0gMDtcbmZ1bmN0aW9uIGdldEF0UXVlcnlGbihhcGksIHsgbWV0aG9kLCBzZWN0aW9uIH0pIHtcbiAgICByZXR1cm4gYXNzZXJ0UmV0dXJuKGFwaS5yeC5xdWVyeVtzZWN0aW9uXSAmJiBhcGkucngucXVlcnlbc2VjdGlvbl1bbWV0aG9kXSwgKCkgPT4gYHF1ZXJ5LiR7c2VjdGlvbn0uJHttZXRob2R9IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBtZXRhZGF0YWApO1xufVxuZXhwb3J0IGNsYXNzIERlY29yYXRlIGV4dGVuZHMgRXZlbnRzIHtcbiAgICBfX2ludGVybmFsX19pbnN0YW5jZUlkO1xuICAgIF9faW50ZXJuYWxfX3J1bnRpbWVMb2cgPSB7fTtcbiAgICBfX2ludGVybmFsX19yZWdpc3RyeTtcbiAgICBfX2ludGVybmFsX19zdG9yYWdlR2V0USA9IFtdO1xuICAgIF9faW50ZXJuYWxfX3N0b3JhZ2VTdWJRID0gW107XG4gICAgLy8gSEFDSyBVc2UgQk4gaW1wb3J0IHNvIGRlY29yYXRlRGVyaXZlIHdvcmtzLi4uIHllcywgd3RmLlxuICAgIF9fcGhhbnRvbSA9IG5ldyBCTigwKTtcbiAgICBfdHlwZTtcbiAgICBfY2FsbCA9IHt9O1xuICAgIF9jb25zdHMgPSB7fTtcbiAgICBfZGVyaXZlO1xuICAgIF9lcnJvcnMgPSB7fTtcbiAgICBfZXZlbnRzID0ge307XG4gICAgX2V4dHJpbnNpY3M7XG4gICAgX2V4dHJpbnNpY1R5cGUgPSBHZW5lcmljRXh0cmluc2ljLkxBVEVTVF9FWFRSSU5TSUNfVkVSU0lPTjtcbiAgICBfZ2VuZXNpc0hhc2g7XG4gICAgX2lzQ29ubmVjdGVkO1xuICAgIF9pc1JlYWR5ID0gZmFsc2U7XG4gICAgX3F1ZXJ5ID0ge307XG4gICAgX3F1ZXJ5TXVsdGk7XG4gICAgX3JwYztcbiAgICBfcnBjQ29yZTtcbiAgICBfcnVudGltZU1hcCA9IHt9O1xuICAgIF9ydW50aW1lQ2hhaW47XG4gICAgX3J1bnRpbWVNZXRhZGF0YTtcbiAgICBfcnVudGltZVZlcnNpb247XG4gICAgX3J4ID0geyBjYWxsOiB7fSwgY29uc3RzOiB7fSwgcXVlcnk6IHt9LCB0eDoge30gfTtcbiAgICBfb3B0aW9ucztcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRoZSBvbmUgYW5kIG9ubHkgbWV0aG9kIGNvbmNyZXRlIGNoaWxkcmVuIGNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQuXG4gICAgICogSXQncyBhIGhpZ2hlci1vcmRlciBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgb25lIGFyZ3VtZW50XG4gICAgICogYG1ldGhvZDogTWV0aG9kIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBPYnNlcnZhYmxlPGFueT5gXG4gICAgICogKGFuZCBvbmUgb3B0aW9uYWwgYG9wdGlvbnNgKSwgYW5kIHNob3VsZCByZXR1cm4gdGhlIHVzZXIgZmFjaW5nIG1ldGhvZC5cbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKiAtIEZvciBBcGlSeCwgYGRlY29yYXRlTWV0aG9kYCBzaG91bGQganVzdCBiZSBpZGVudGl0eSwgYmVjYXVzZSB0aGUgaW5wdXRcbiAgICAgKiBmdW5jdGlvbiBpcyBhbHJlYWR5IGFuIE9ic2VydmFibGVcbiAgICAgKiAtIEZvciBBcGlQcm9taXNlLCBgZGVjb3JhdGVNZXRob2RgIHNob3VsZCByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHRha2VzIGFsbFxuICAgICAqIHRoZSBwYXJhbWV0ZXJzIGZyb20gYG1ldGhvZGAsIGFkZHMgYW4gb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCwgYW5kXG4gICAgICogcmV0dXJucyBhIFByb21pc2UuXG4gICAgICpcbiAgICAgKiBXZSBjb3VsZCBlYXNpbHkgaW1hZ2luZSBvdGhlciB1c2VyLWZhY2luZyBpbnRlcmZhY2VzLCB3aGljaCBhcmUgc2ltcGx5XG4gICAgICogaW1wbGVtZW50ZWQgYnkgdHJhbnNmb3JtaW5nIHRoZSBPYnNlcnZhYmxlIHRvIFN0cmVhbS9JdGVyYXRvci9LZWZpci9CYWNvblxuICAgICAqIHZpYSBgZGVjb3JhdGVNZXRob2RgLlxuICAgICAqL1xuICAgIF9kZWNvcmF0ZU1ldGhvZDtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3QgdG8gY3JlYXRlIEFQSSBpbnN0YW5jZSBvciBhIFByb3ZpZGVyIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxCUj5cbiAgICAgKlxuICAgICAqIGBgYGphdmFzY3JpcHRcbiAgICAgKiBpbXBvcnQgQXBpIGZyb20gJ0Bwb2xrYWRvdC9hcGkvcHJvbWlzZSc7XG4gICAgICpcbiAgICAgKiBjb25zdCBhcGkgPSBuZXcgQXBpKCkuaXNSZWFkeSgpO1xuICAgICAqXG4gICAgICogYXBpLnJwYy5zdWJzY3JpYmVOZXdIZWFkcygoaGVhZGVyKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyhgbmV3IGJsb2NrICMke2hlYWRlci5udW1iZXIudG9OdW1iZXIoKX1gKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2luc3RhbmNlSWQgPSBgJHsrK2luc3RhbmNlQ291bnRlcn1gO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5ID0gb3B0aW9ucy5zb3VyY2U/LnJlZ2lzdHJ5IHx8IG9wdGlvbnMucmVnaXN0cnkgfHwgbmV3IFR5cGVSZWdpc3RyeSgpO1xuICAgICAgICB0aGlzLl9yeC5jYWxsQXQgPSAoYmxvY2tIYXNoLCBrbm93blZlcnNpb24pID0+IGZyb20odGhpcy5hdChibG9ja0hhc2gsIGtub3duVmVyc2lvbikpLnBpcGUobWFwKChhKSA9PiBhLnJ4LmNhbGwpKTtcbiAgICAgICAgdGhpcy5fcngucXVlcnlBdCA9IChibG9ja0hhc2gsIGtub3duVmVyc2lvbikgPT4gZnJvbSh0aGlzLmF0KGJsb2NrSGFzaCwga25vd25WZXJzaW9uKSkucGlwZShtYXAoKGEpID0+IGEucngucXVlcnkpKTtcbiAgICAgICAgdGhpcy5fcngucmVnaXN0cnkgPSB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5O1xuICAgICAgICB0aGlzLl9kZWNvcmF0ZU1ldGhvZCA9IGRlY29yYXRlTWV0aG9kO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gb3B0aW9ucy5zb3VyY2VcbiAgICAgICAgICAgID8gb3B0aW9ucy5zb3VyY2UuX3JwY0NvcmUucHJvdmlkZXIuaXNDbG9uYWJsZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5zb3VyY2UuX3JwY0NvcmUucHJvdmlkZXIuY2xvbmUoKVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5zb3VyY2UuX3JwY0NvcmUucHJvdmlkZXJcbiAgICAgICAgICAgIDogKG9wdGlvbnMucHJvdmlkZXIgfHwgbmV3IFdzUHJvdmlkZXIoKSk7XG4gICAgICAgIC8vIFRoZSBSUEMgaW50ZXJmYWNlIGRlY29yYXRlcyB0aGUga25vd24gaW50ZXJmYWNlcyBvbiBpbml0XG4gICAgICAgIHRoaXMuX3JwY0NvcmUgPSBuZXcgUnBjQ29yZSh0aGlzLl9faW50ZXJuYWxfX2luc3RhbmNlSWQsIHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnksIHtcbiAgICAgICAgICAgIGlzUGVkYW50aWM6IHRoaXMuX29wdGlvbnMuaXNQZWRhbnRpYyxcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgdXNlclJwYzogdGhpcy5fb3B0aW9ucy5ycGNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9ycGNDb3JlLnByb3ZpZGVyLmlzQ29ubmVjdGVkKTtcbiAgICAgICAgdGhpcy5fcnguaGFzU3Vic2NyaXB0aW9ucyA9IHRoaXMuX3JwY0NvcmUucHJvdmlkZXIuaGFzU3Vic2NyaXB0aW9ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybiB0aGUgY3VycmVudCB1c2VkIHJlZ2lzdHJ5XG4gICAgICovXG4gICAgZ2V0IHJlZ2lzdHJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yZWdpc3RyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSB0eXBlIGFzIHJlZ2lzdGVyZWRcbiAgICAgKi9cbiAgICBjcmVhdGVUeXBlKHR5cGUsIC4uLnBhcmFtcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yZWdpc3RyeS5jcmVhdGVUeXBlKHR5cGUsIC4uLnBhcmFtcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlciBhZGRpdGlvbmFsIHVzZXItZGVmaW5lZCBvZiBjaGFpbi1zcGVjaWZpYyB0eXBlcyBpbiB0aGUgdHlwZSByZWdpc3RyeVxuICAgICAqL1xuICAgIHJlZ2lzdGVyVHlwZXModHlwZXMpIHtcbiAgICAgICAgdHlwZXMgJiYgdGhpcy5fX2ludGVybmFsX19yZWdpc3RyeS5yZWdpc3Rlcih0eXBlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgQVBJIG9wZXJhdGVzIHdpdGggc3Vic2NyaXB0aW9uc1xuICAgICAqL1xuICAgIGdldCBoYXNTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnBjQ29yZS5wcm92aWRlci5oYXNTdWJzY3JpcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIEFQSSBkZWNvcmF0ZSBtdWx0aS1rZXkgcXVlcmllc1xuICAgICAqL1xuICAgIGdldCBzdXBwb3J0TXVsdGkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ycGNDb3JlLnByb3ZpZGVyLmhhc1N1YnNjcmlwdGlvbnMgfHwgISF0aGlzLl9ycGNDb3JlLnN0YXRlLnF1ZXJ5U3RvcmFnZUF0O1xuICAgIH1cbiAgICBfZW1wdHlEZWNvcmF0ZWQocmVnaXN0cnksIGJsb2NrSGFzaCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2FsbDoge30sXG4gICAgICAgICAgICBjb25zdHM6IHt9LFxuICAgICAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgICAgIGV2ZW50czoge30sXG4gICAgICAgICAgICBxdWVyeToge30sXG4gICAgICAgICAgICByZWdpc3RyeSxcbiAgICAgICAgICAgIHJ4OiB7XG4gICAgICAgICAgICAgICAgY2FsbDoge30sXG4gICAgICAgICAgICAgICAgcXVlcnk6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHg6IGNyZWF0ZVN1Ym1pdHRhYmxlKHRoaXMuX3R5cGUsIHRoaXMuX3J4LCB0aGlzLl9kZWNvcmF0ZU1ldGhvZCwgcmVnaXN0cnksIGJsb2NrSGFzaClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2NyZWF0ZURlY29yYXRlZChyZWdpc3RyeSwgZnJvbUVtcHR5LCBkZWNvcmF0ZWRBcGksIGJsb2NrSGFzaCkge1xuICAgICAgICBpZiAoIWRlY29yYXRlZEFwaSkge1xuICAgICAgICAgICAgZGVjb3JhdGVkQXBpID0gdGhpcy5fZW1wdHlEZWNvcmF0ZWQocmVnaXN0cnkucmVnaXN0cnksIGJsb2NrSGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21FbXB0eSB8fCAhcmVnaXN0cnkuZGVjb3JhdGVkTWV0YSkge1xuICAgICAgICAgICAgcmVnaXN0cnkuZGVjb3JhdGVkTWV0YSA9IGV4cGFuZE1ldGFkYXRhKHJlZ2lzdHJ5LnJlZ2lzdHJ5LCByZWdpc3RyeS5tZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnVudGltZSA9IHRoaXMuX2RlY29yYXRlQ2FsbHMocmVnaXN0cnksIHRoaXMuX2RlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpO1xuICAgICAgICBjb25zdCBydW50aW1lUnggPSB0aGlzLl9kZWNvcmF0ZUNhbGxzKHJlZ2lzdHJ5LCB0aGlzLl9yeERlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpO1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5fZGVjb3JhdGVTdG9yYWdlKHJlZ2lzdHJ5LmRlY29yYXRlZE1ldGEsIHRoaXMuX2RlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpO1xuICAgICAgICBjb25zdCBzdG9yYWdlUnggPSB0aGlzLl9kZWNvcmF0ZVN0b3JhZ2UocmVnaXN0cnkuZGVjb3JhdGVkTWV0YSwgdGhpcy5fcnhEZWNvcmF0ZU1ldGhvZCwgYmxvY2tIYXNoKTtcbiAgICAgICAgYXVnbWVudE9iamVjdCgnY29uc3RzJywgcmVnaXN0cnkuZGVjb3JhdGVkTWV0YS5jb25zdHMsIGRlY29yYXRlZEFwaS5jb25zdHMsIGZyb21FbXB0eSk7XG4gICAgICAgIGF1Z21lbnRPYmplY3QoJ2Vycm9ycycsIHJlZ2lzdHJ5LmRlY29yYXRlZE1ldGEuZXJyb3JzLCBkZWNvcmF0ZWRBcGkuZXJyb3JzLCBmcm9tRW1wdHkpO1xuICAgICAgICBhdWdtZW50T2JqZWN0KCdldmVudHMnLCByZWdpc3RyeS5kZWNvcmF0ZWRNZXRhLmV2ZW50cywgZGVjb3JhdGVkQXBpLmV2ZW50cywgZnJvbUVtcHR5KTtcbiAgICAgICAgYXVnbWVudE9iamVjdCgncXVlcnknLCBzdG9yYWdlLCBkZWNvcmF0ZWRBcGkucXVlcnksIGZyb21FbXB0eSk7XG4gICAgICAgIGF1Z21lbnRPYmplY3QoJ3F1ZXJ5Jywgc3RvcmFnZVJ4LCBkZWNvcmF0ZWRBcGkucngucXVlcnksIGZyb21FbXB0eSk7XG4gICAgICAgIGF1Z21lbnRPYmplY3QoJ2NhbGwnLCBydW50aW1lLCBkZWNvcmF0ZWRBcGkuY2FsbCwgZnJvbUVtcHR5KTtcbiAgICAgICAgYXVnbWVudE9iamVjdCgnY2FsbCcsIHJ1bnRpbWVSeCwgZGVjb3JhdGVkQXBpLnJ4LmNhbGwsIGZyb21FbXB0eSk7XG4gICAgICAgIGRlY29yYXRlZEFwaS5maW5kQ2FsbCA9IChjYWxsSW5kZXgpID0+IGZpbmRDYWxsKHJlZ2lzdHJ5LnJlZ2lzdHJ5LCBjYWxsSW5kZXgpO1xuICAgICAgICBkZWNvcmF0ZWRBcGkuZmluZEVycm9yID0gKGVycm9ySW5kZXgpID0+IGZpbmRFcnJvcihyZWdpc3RyeS5yZWdpc3RyeSwgZXJyb3JJbmRleCk7XG4gICAgICAgIGRlY29yYXRlZEFwaS5xdWVyeU11bHRpID0gYmxvY2tIYXNoXG4gICAgICAgICAgICA/IHRoaXMuX2RlY29yYXRlTXVsdGlBdChkZWNvcmF0ZWRBcGksIHRoaXMuX2RlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpXG4gICAgICAgICAgICA6IHRoaXMuX2RlY29yYXRlTXVsdGkodGhpcy5fZGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBkZWNvcmF0ZWRBcGkucnVudGltZVZlcnNpb24gPSByZWdpc3RyeS5ydW50aW1lVmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogYmxvY2tIYXNoLFxuICAgICAgICAgICAgZGVjb3JhdGVkQXBpLFxuICAgICAgICAgICAgZGVjb3JhdGVkTWV0YTogcmVnaXN0cnkuZGVjb3JhdGVkTWV0YVxuICAgICAgICB9O1xuICAgIH1cbiAgICBfaW5qZWN0TWV0YWRhdGEocmVnaXN0cnksIGZyb21FbXB0eSA9IGZhbHNlKSB7XG4gICAgICAgIC8vIGNsZWFyIHRoZSBkZWNvcmF0aW9uLCB3ZSBhcmUgcmVkb2luZyBpdCBoZXJlXG4gICAgICAgIGlmIChmcm9tRW1wdHkgfHwgIXJlZ2lzdHJ5LmRlY29yYXRlZEFwaSkge1xuICAgICAgICAgICAgcmVnaXN0cnkuZGVjb3JhdGVkQXBpID0gdGhpcy5fZW1wdHlEZWNvcmF0ZWQocmVnaXN0cnkucmVnaXN0cnkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGVjb3JhdGVkQXBpLCBkZWNvcmF0ZWRNZXRhIH0gPSB0aGlzLl9jcmVhdGVEZWNvcmF0ZWQocmVnaXN0cnksIGZyb21FbXB0eSwgcmVnaXN0cnkuZGVjb3JhdGVkQXBpKTtcbiAgICAgICAgdGhpcy5fY2FsbCA9IGRlY29yYXRlZEFwaS5jYWxsO1xuICAgICAgICB0aGlzLl9jb25zdHMgPSBkZWNvcmF0ZWRBcGkuY29uc3RzO1xuICAgICAgICB0aGlzLl9lcnJvcnMgPSBkZWNvcmF0ZWRBcGkuZXJyb3JzO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBkZWNvcmF0ZWRBcGkuZXZlbnRzO1xuICAgICAgICB0aGlzLl9xdWVyeSA9IGRlY29yYXRlZEFwaS5xdWVyeTtcbiAgICAgICAgdGhpcy5fcnguY2FsbCA9IGRlY29yYXRlZEFwaS5yeC5jYWxsO1xuICAgICAgICB0aGlzLl9yeC5xdWVyeSA9IGRlY29yYXRlZEFwaS5yeC5xdWVyeTtcbiAgICAgICAgY29uc3QgdHggPSB0aGlzLl9kZWNvcmF0ZUV4dHJpbnNpY3MoZGVjb3JhdGVkTWV0YSwgdGhpcy5fZGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBjb25zdCByeHR4ID0gdGhpcy5fZGVjb3JhdGVFeHRyaW5zaWNzKGRlY29yYXRlZE1ldGEsIHRoaXMuX3J4RGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBpZiAoZnJvbUVtcHR5IHx8ICF0aGlzLl9leHRyaW5zaWNzKSB7XG4gICAgICAgICAgICB0aGlzLl9leHRyaW5zaWNzID0gdHg7XG4gICAgICAgICAgICB0aGlzLl9yeC50eCA9IHJ4dHg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhdWdtZW50T2JqZWN0KCd0eCcsIHR4LCB0aGlzLl9leHRyaW5zaWNzLCBmYWxzZSk7XG4gICAgICAgICAgICBhdWdtZW50T2JqZWN0KG51bGwsIHJ4dHgsIHRoaXMuX3J4LnR4LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXVnbWVudE9iamVjdChudWxsLCBkZWNvcmF0ZWRNZXRhLmNvbnN0cywgdGhpcy5fcnguY29uc3RzLCBmcm9tRW1wdHkpO1xuICAgICAgICB0aGlzLmVtaXQoJ2RlY29yYXRlZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqIGJhY2t3YXJkcyBjb21wYXRpYmxlIGVuZHBvaW50IGZvciBtZXRhZGF0YSBpbmplY3Rpb24sIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgKEhvd2V2ZXIsIGl0IGlzIHN0aWxsIHVzZWZ1bCBmb3IgdGVzdGluZyBpbmplY3Rpb24pXG4gICAgICovXG4gICAgaW5qZWN0TWV0YWRhdGEobWV0YWRhdGEsIGZyb21FbXB0eSwgcmVnaXN0cnkpIHtcbiAgICAgICAgdGhpcy5faW5qZWN0TWV0YWRhdGEoeyBjb3VudGVyOiAwLCBtZXRhZGF0YSwgcmVnaXN0cnk6IHJlZ2lzdHJ5IHx8IHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnksIHJ1bnRpbWVWZXJzaW9uOiB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ1J1bnRpbWVWZXJzaW9uUGFydGlhbCcpIH0sIGZyb21FbXB0eSk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZUZ1bmN0aW9uTWV0YShpbnB1dCwgb3V0cHV0KSB7XG4gICAgICAgIG91dHB1dC5tZXRhID0gaW5wdXQubWV0YTtcbiAgICAgICAgb3V0cHV0Lm1ldGhvZCA9IGlucHV0Lm1ldGhvZDtcbiAgICAgICAgb3V0cHV0LnNlY3Rpb24gPSBpbnB1dC5zZWN0aW9uO1xuICAgICAgICBvdXRwdXQudG9KU09OID0gaW5wdXQudG9KU09OO1xuICAgICAgICBpZiAoaW5wdXQuY2FsbEluZGV4KSB7XG4gICAgICAgICAgICBvdXRwdXQuY2FsbEluZGV4ID0gaW5wdXQuY2FsbEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIC8vIEZpbHRlciBhbGwgUlBDIG1ldGhvZHMgYmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgdGhlIHJwY19tZXRob2RzIGNhbGwuIFdlIGRvIHRoaXMgaW4gdGhlIGZvbGxvd2luZ1xuICAgIC8vIG1hbm5lciB0byBjYXRlciBmb3IgYm90aCBvbGQgYW5kIG5ldzpcbiAgICAvLyAgIC0gd2hlbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYXJlIDAsIG9ubHkgcmVtb3ZlIHRoZSBvbmVzIHdpdGggaXNPcHRpb25hbCAoYWNjb3VudCAmIGNvbnRyYWN0cylcbiAgICAvLyAgIC0gd2hlbiBub24temVybywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGluIHRoZSBhcnJheSAod2UgZG9uJ3QgZG8gdGhpcylcbiAgICBfZmlsdGVyUnBjKG1ldGhvZHMsIGFkZGl0aW9uYWwpIHtcbiAgICAgICAgLy8gYWRkIGFueSBzcGVjaWZpYyB1c2VyLWJhc2UgUlBDc1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoYWRkaXRpb25hbCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ycGNDb3JlLmFkZFVzZXJJbnRlcmZhY2VzKGFkZGl0aW9uYWwpO1xuICAgICAgICAgICAgLy8gcmUtZGVjb3JhdGUsIG9ubHkgYWRkaW5nIGFueSBuZXcgYWRkaXRpb25hbCBpbnRlcmZhY2VzXG4gICAgICAgICAgICB0aGlzLl9kZWNvcmF0ZVJwYyh0aGlzLl9ycGNDb3JlLCB0aGlzLl9kZWNvcmF0ZU1ldGhvZCwgdGhpcy5fcnBjKTtcbiAgICAgICAgICAgIHRoaXMuX2RlY29yYXRlUnBjKHRoaXMuX3JwY0NvcmUsIHRoaXMuX3J4RGVjb3JhdGVNZXRob2QsIHRoaXMuX3J4LnJwYyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0cmFjdCB0aGUgYWN0dWFsIHNlY3Rpb25zIGZyb20gdGhlIG1ldGhvZHMgKHRoaXMgaXMgdXNlZnVsIHdoZW5cbiAgICAgICAgLy8gd2UgdHJ5IGFuZCBjcmVhdGUgbWFwcGluZ3MgdG8gcnVudGltZSBuYW1lcyB2aWEgYSBoYXNoIG1hcHBpbmcpXG4gICAgICAgIGNvbnN0IHNlY3Rpb25NYXAgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbc2VjdGlvbl0gPSBtZXRob2RzW2ldLnNwbGl0KCdfJyk7XG4gICAgICAgICAgICBzZWN0aW9uTWFwW3NlY3Rpb25dID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBhY3R1YWwgc2VjdGlvbiBuYW1lcyBpbnRvIGFuIGVhc3kgbmFtZSBsb29rdXBcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBPYmplY3Qua2V5cyhzZWN0aW9uTWFwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gc2VjdGlvbnMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbmFtZUEgPSBzdHJpbmdVcHBlckZpcnN0KHNlY3Rpb25zW2ldKTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVCID0gYCR7bmFtZUF9QXBpYDtcbiAgICAgICAgICAgIHRoaXMuX3J1bnRpbWVNYXBbYmxha2UyQXNIZXgobmFtZUEsIDY0KV0gPSBuYW1lQTtcbiAgICAgICAgICAgIHRoaXMuX3J1bnRpbWVNYXBbYmxha2UyQXNIZXgobmFtZUIsIDY0KV0gPSBuYW1lQjtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5hbGx5IHdlIGZpbHRlciB0aGUgYWN0dWFsIG1ldGhvZHMgdG8gZXhwb3NlXG4gICAgICAgIHRoaXMuX2ZpbHRlclJwY01ldGhvZHMobWV0aG9kcyk7XG4gICAgfVxuICAgIF9maWx0ZXJScGNNZXRob2RzKGV4cG9zZWQpIHtcbiAgICAgICAgY29uc3QgaGFzUmVzdWx0cyA9IGV4cG9zZWQubGVuZ3RoICE9PSAwO1xuICAgICAgICBjb25zdCBhbGxLbm93biA9IFsuLi50aGlzLl9ycGNDb3JlLm1hcHBpbmcuZW50cmllcygpXTtcbiAgICAgICAgY29uc3QgYWxsS2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBjb3VudCA9IGFsbEtub3duLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbLCB7IGFsaWFzLCBlbmRwb2ludCwgbWV0aG9kLCBwdWJzdWIsIHNlY3Rpb24gfV0gPSBhbGxLbm93bltpXTtcbiAgICAgICAgICAgIGFsbEtleXMucHVzaChgJHtzZWN0aW9ufV8ke21ldGhvZH1gKTtcbiAgICAgICAgICAgIGlmIChwdWJzdWIpIHtcbiAgICAgICAgICAgICAgICBhbGxLZXlzLnB1c2goYCR7c2VjdGlvbn1fJHtwdWJzdWJbMV19YCk7XG4gICAgICAgICAgICAgICAgYWxsS2V5cy5wdXNoKGAke3NlY3Rpb259XyR7cHVic3ViWzJdfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsaWFzKSB7XG4gICAgICAgICAgICAgICAgYWxsS2V5cy5wdXNoKC4uLmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRwb2ludCkge1xuICAgICAgICAgICAgICAgIGFsbEtleXMucHVzaChlbmRwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdW5rbm93biA9IGV4cG9zZWQuZmlsdGVyKChrKSA9PiAhYWxsS2V5cy5pbmNsdWRlcyhrKSAmJlxuICAgICAgICAgICAgIWsuaW5jbHVkZXMoJ191bnN0YWJsZV8nKSk7XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCAmJiAhdGhpcy5fb3B0aW9ucy5ub0luaXRXYXJuKSB7XG4gICAgICAgICAgICBsLndhcm4oYFJQQyBtZXRob2RzIG5vdCBkZWNvcmF0ZWQ6ICR7dW5rbm93bi5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbGwgZW50cmllcyB3ZSBoYXZlIChwb3B1bGF0ZWQgaW4gZGVjb3JhdGUpIGFuZCBmaWx0ZXIgYXMgcmVxdWlyZWRcbiAgICAgICAgLy8gb25seSByZW1vdmUgd2hlbiB3ZSBoYXZlIHJlc3VsdHMgYW5kIG1ldGhvZCBtaXNzaW5nLCBvciB3aXRoIG5vIHJlc3VsdHMgaWYgb3B0aW9uYWxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbaywgeyBtZXRob2QsIHNlY3Rpb24gfV0gPSBhbGxLbm93bltpXTtcbiAgICAgICAgICAgIGlmIChoYXNSZXN1bHRzICYmICFleHBvc2VkLmluY2x1ZGVzKGspICYmIGsgIT09ICdycGNfbWV0aG9kcycpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcnBjW3NlY3Rpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ycGNbc2VjdGlvbl1bbWV0aG9kXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3J4LnJwY1tzZWN0aW9uXVttZXRob2RdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfcnBjU3VibWl0dGVyKGRlY29yYXRlTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IChtZXRob2QsIC4uLnBhcmFtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5fcnBjQ29yZS5wcm92aWRlci5zZW5kKG1ldGhvZCwgcGFyYW1zKSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZChtZXRob2QpO1xuICAgIH1cbiAgICBfZGVjb3JhdGVScGMocnBjLCBkZWNvcmF0ZU1ldGhvZCwgaW5wdXQgPSB0aGlzLl9ycGNTdWJtaXR0ZXIoZGVjb3JhdGVNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IGlucHV0O1xuICAgICAgICBjb25zdCBkZWNvcmF0ZUZuID0gKHNlY3Rpb24sIG1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcnBjW3NlY3Rpb25dW21ldGhvZF07XG4gICAgICAgICAgICBjb25zdCBmbiA9IGRlY29yYXRlTWV0aG9kKHNvdXJjZSwgeyBtZXRob2ROYW1lOiBtZXRob2QgfSk7XG4gICAgICAgICAgICBmbi5tZXRhID0gc291cmNlLm1ldGE7XG4gICAgICAgICAgICBmbi5yYXcgPSBkZWNvcmF0ZU1ldGhvZChzb3VyY2UucmF3LCB7IG1ldGhvZE5hbWU6IG1ldGhvZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDAsIHNjb3VudCA9IHJwYy5zZWN0aW9ucy5sZW5ndGg7IHMgPCBzY291bnQ7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHJwYy5zZWN0aW9uc1tzXTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dCwgc2VjdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXMocnBjW3NlY3Rpb25dKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvcmF0ZUludGVybmFsID0gKG1ldGhvZCkgPT4gZGVjb3JhdGVGbihzZWN0aW9uLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwLCBtY291bnQgPSBtZXRob2RzLmxlbmd0aDsgbSA8IG1jb3VudDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbbV07XG4gICAgICAgICAgICAgICAgICAgIC8vICBza2lwIHN1YnNjcmlwdGlvbnMgd2hlcmUgd2UgaGF2ZSBhIG5vbi1zdWJzY3JpYmUgaW50ZXJmYWNlXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1N1YnNjcmlwdGlvbnMgfHwgIShtZXRob2Quc3RhcnRzV2l0aCgnc3Vic2NyaWJlJykgfHwgbWV0aG9kLnN0YXJ0c1dpdGgoJ3Vuc3Vic2NyaWJlJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXQsIHNlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0W3NlY3Rpb25dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXp5TWV0aG9kKG91dFtzZWN0aW9uXSwgbWV0aG9kLCBkZWNvcmF0ZUludGVybmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICAvLyBhZGQgYWxsIGRlZmluaXRpb24gZW50cmllc1xuICAgIF9hZGRSdW50aW1lRGVmKHJlc3VsdCwgYWRkaXRpb25hbCkge1xuICAgICAgICBpZiAoIWFkZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoYWRkaXRpb25hbCk7XG4gICAgICAgIGZvciAobGV0IGogPSAwLCBlY291bnQgPSBlbnRyaWVzLmxlbmd0aDsgaiA8IGVjb3VudDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCBkZWZzXSA9IGVudHJpZXNbal07XG4gICAgICAgICAgICBpZiAocmVzdWx0W2tleV0pIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIHRoaXMgb25lIGFscmVhZHksIHN0ZXAgdGhyb3VnaCBmb3IgbmV3IHZlcnNpb25zIG9yXG4gICAgICAgICAgICAgICAgLy8gbmV3IG1ldGhvZHMgYW5kIGFkZCB0aG9zZSBhcyBhcHBsaWNhYmxlXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDAsIGRjb3VudCA9IGRlZnMubGVuZ3RoOyBrIDwgZGNvdW50OyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmID0gZGVmc1trXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHJlc3VsdFtrZXldLmZpbmQoKHsgdmVyc2lvbiB9KSA9PiBkZWYudmVyc2lvbiA9PT0gdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcmxlYXZlIHRoZSBuZXcgbWV0aG9kcyB3aXRoIHRoZSBvbGQgLSBsYXN0IGRlZmluaXRpb24gd2luc1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3ByZWFkKHByZXYubWV0aG9kcywgZGVmLm1ldGhvZHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGlzIHNwZWNpZmljIHZlcnNpb24sIGFkZCBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaChkZWYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGlzIHJ1bnRpbWUgZGVmaW5pdGlvbiwgYWRkIGl0IGFzLWlzXG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBkZWZzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGV4dHJhY3QgYWxsIHJ1bnRpbWUgZGVmaW5pdGlvbnNcbiAgICBfZ2V0UnVudGltZURlZnMocmVnaXN0cnksIHNwZWNOYW1lLCBjaGFpbiA9ICcnKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBjb25zdCBkZWZWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHR5cGVEZWZpbml0aW9ucyk7XG4gICAgICAgIC8vIG9wdGlvbnMgPiBjaGFpbi9zcGVjID4gYnVpbHQtaW4sIGFwcGx5IGluIHJldmVyc2Ugb3JkZXIgd2l0aFxuICAgICAgICAvLyBtZXRob2RzIG92ZXJyaWRpbmcgcHJldmlvdXMgZGVmaW5pdGlvbnMgKG9yIGludGVybGVhdmUgbWlzc2luZylcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gZGVmVmFsdWVzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZFJ1bnRpbWVEZWYocmVzdWx0LCBkZWZWYWx1ZXNbaV0ucnVudGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWRkUnVudGltZURlZihyZXN1bHQsIGdldFNwZWNSdW50aW1lKHJlZ2lzdHJ5LCBjaGFpbiwgc3BlY05hbWUpKTtcbiAgICAgICAgdGhpcy5fYWRkUnVudGltZURlZihyZXN1bHQsIHRoaXMuX29wdGlvbnMucnVudGltZSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpO1xuICAgIH1cbiAgICAvLyBwcmUtbWV0YWRhdGEgZGVjb3JhdGlvblxuICAgIF9kZWNvcmF0ZUNhbGxzKHsgcmVnaXN0cnksIHJ1bnRpbWVWZXJzaW9uOiB7IGFwaXMsIHNwZWNOYW1lLCBzcGVjVmVyc2lvbiB9IH0sIGRlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNvbnN0IG5hbWVkID0ge307XG4gICAgICAgIGNvbnN0IGhhc2hlcyA9IHt9O1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldFJ1bnRpbWVEZWZzKHJlZ2lzdHJ5LCBzcGVjTmFtZSwgdGhpcy5fcnVudGltZUNoYWluKTtcbiAgICAgICAgY29uc3Qgb2xkZXIgPSBbXTtcbiAgICAgICAgY29uc3QgaW1wbE5hbWUgPSBgJHtzcGVjTmFtZS50b1N0cmluZygpfS8ke3NwZWNWZXJzaW9uLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgY29uc3QgaGFzTG9nZ2VkID0gdGhpcy5fX2ludGVybmFsX19ydW50aW1lTG9nW2ltcGxOYW1lXSB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ydW50aW1lTG9nW2ltcGxOYW1lXSA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBzY291bnQgPSBzZWN0aW9ucy5sZW5ndGg7IGkgPCBzY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgW19zZWN0aW9uLCBzZWNzXSA9IHNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkhhc2ggPSBibGFrZTJBc0hleChfc2VjdGlvbiwgNjQpO1xuICAgICAgICAgICAgY29uc3QgcnRBcGkgPSBhcGlzLmZpbmQoKFthXSkgPT4gYS5lcShzZWN0aW9uSGFzaCkpO1xuICAgICAgICAgICAgaGFzaGVzW3NlY3Rpb25IYXNoXSA9IHRydWU7XG4gICAgICAgICAgICBpZiAocnRBcGkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGwgPSBzZWNzLm1hcCgoeyB2ZXJzaW9uIH0pID0+IHZlcnNpb24pLnNvcnQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWMgPSBzZWNzLmZpbmQoKHsgdmVyc2lvbiB9KSA9PiBydEFwaVsxXS5lcSh2ZXJzaW9uKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gc3RyaW5nQ2FtZWxDYXNlKF9zZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5lbnRyaWVzKHNlYy5tZXRob2RzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWVkW3NlY3Rpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRbc2VjdGlvbl0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSAwLCBtY291bnQgPSBtZXRob2RzLmxlbmd0aDsgbSA8IG1jb3VudDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW19tZXRob2QsIGRlZl0gPSBtZXRob2RzW21dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHN0cmluZ0NhbWVsQ2FzZShfbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZFtzZWN0aW9uXVttZXRob2RdID0gb2JqZWN0U3ByZWFkKHsgbWV0aG9kLCBuYW1lOiBgJHtfc2VjdGlvbn1fJHtfbWV0aG9kfWAsIHNlY3Rpb24sIHNlY3Rpb25IYXNoIH0sIGRlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZGVyLnB1c2goYCR7X3NlY3Rpb259LyR7cnRBcGlbMV0udG9TdHJpbmcoKX0gKCR7YWxsLmpvaW4oJy8nKX0ga25vd24pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgdGhlIHJ1bnRpbWVzIHRoYXQgd2UgZG9uJ3QgaGF2ZSBoYXNoZXMgZm9yXG4gICAgICAgIGNvbnN0IG5vdEZvdW5kID0gYXBpc1xuICAgICAgICAgICAgLm1hcCgoW2EsIHZdKSA9PiBbYS50b0hleCgpLCB2LnRvU3RyaW5nKCldKVxuICAgICAgICAgICAgLmZpbHRlcigoW2FdKSA9PiAhaGFzaGVzW2FdKVxuICAgICAgICAgICAgLm1hcCgoW2EsIHZdKSA9PiBgJHt0aGlzLl9ydW50aW1lTWFwW2FdIHx8IGF9LyR7dn1gKTtcbiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLm5vSW5pdFdhcm4gJiYgIWhhc0xvZ2dlZCkge1xuICAgICAgICAgICAgaWYgKG9sZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGwud2FybihgJHtpbXBsTmFtZX06IE5vdCBkZWNvcmF0aW5nIHJ1bnRpbWUgYXBpcyB3aXRob3V0IG1hdGNoaW5nIHZlcnNpb25zOiAke29sZGVyLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90Rm91bmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbC53YXJuKGAke2ltcGxOYW1lfTogTm90IGRlY29yYXRpbmcgdW5rbm93biBydW50aW1lIGFwaXM6ICR7bm90Rm91bmQuam9pbignLCAnKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZUNhbGwgPSBibG9ja0hhc2hcbiAgICAgICAgICAgID8gKG5hbWUsIGJ5dGVzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmNhbGwobmFtZSwgYnl0ZXMsIGJsb2NrSGFzaClcbiAgICAgICAgICAgIDogKG5hbWUsIGJ5dGVzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmNhbGwobmFtZSwgYnl0ZXMpO1xuICAgICAgICBjb25zdCBsYXp5U2VjdGlvbiA9IChzZWN0aW9uKSA9PiBsYXp5TWV0aG9kcyh7fSwgT2JqZWN0LmtleXMobmFtZWRbc2VjdGlvbl0pLCAobWV0aG9kKSA9PiB0aGlzLl9kZWNvcmF0ZUNhbGwocmVnaXN0cnksIG5hbWVkW3NlY3Rpb25dW21ldGhvZF0sIHN0YXRlQ2FsbCwgZGVjb3JhdGVNZXRob2QpKTtcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IE9iamVjdC5rZXlzKG5hbWVkKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gbW9kdWxlcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgbW9kdWxlc1tpXSwgbGF6eVNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9kZWNvcmF0ZUNhbGwocmVnaXN0cnksIGRlZiwgc3RhdGVDYWxsLCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgIGNvbnN0IGRlY29yYXRlZCA9IGRlY29yYXRlTWV0aG9kKCguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IGRlZi5wYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2RlZi5uYW1lfTo6IEV4cGVjdGVkICR7ZGVmLnBhcmFtcy5sZW5ndGh9IGFyZ3VtZW50cywgZm91bmQgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVnaXN0cnkuY3JlYXRlVHlwZSgnUmF3JywgdThhQ29uY2F0U3RyaWN0KGFyZ3MubWFwKChhLCBpKSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKGRlZi5wYXJhbXNbaV0udHlwZSwgW2FdKS50b1U4YSgpKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlQ2FsbChkZWYubmFtZSwgYnl0ZXMpLnBpcGUobWFwKChyKSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKGRlZi50eXBlLCBbcl0pKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkZWNvcmF0ZWQubWV0YSA9IGRlZjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiBkZWNvcmF0ZWQ7XG4gICAgfVxuICAgIC8vIG9ubHkgYmUgY2FsbGVkIGlmIHN1cHBvcnRNdWx0aSBpcyB0cnVlXG4gICAgX2RlY29yYXRlTXVsdGkoZGVjb3JhdGVNZXRob2QpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCgoa2V5cykgPT4ga2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gKHRoaXMuaGFzU3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICAgID8gdGhpcy5fcnBjQ29yZS5zdGF0ZS5zdWJzY3JpYmVTdG9yYWdlXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9ycGNDb3JlLnN0YXRlLnF1ZXJ5U3RvcmFnZUF0KShrZXlzLm1hcCgoYXJncykgPT4gQXJyYXkuaXNBcnJheShhcmdzKVxuICAgICAgICAgICAgICAgID8gYXJnc1swXS5jcmVhdG9yLm1ldGEudHlwZS5pc1BsYWluXG4gICAgICAgICAgICAgICAgICAgID8gW2FyZ3NbMF0uY3JlYXRvcl1cbiAgICAgICAgICAgICAgICAgICAgOiBhcmdzWzBdLmNyZWF0b3IubWV0YS50eXBlLmFzTWFwLmhhc2hlcnMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFthcmdzWzBdLmNyZWF0b3IsIGFyZ3Muc2xpY2UoMSldXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFthcmdzWzBdLmNyZWF0b3IsIC4uLmFyZ3Muc2xpY2UoMSldXG4gICAgICAgICAgICAgICAgOiBbYXJncy5jcmVhdG9yXSkpXG4gICAgICAgICAgICA6IG9mKFtdKSk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZU11bHRpQXQoYXRBcGksIGRlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCgoY2FsbHMpID0+IGNhbGxzLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLl9ycGNDb3JlLnN0YXRlLnF1ZXJ5U3RvcmFnZUF0KGNhbGxzLm1hcCgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY3JlYXRvciB9ID0gZ2V0QXRRdWVyeUZuKGF0QXBpLCBhcmdzWzBdLmNyZWF0b3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRvci5tZXRhLnR5cGUuaXNQbGFpblxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbY3JlYXRvcl1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogY3JlYXRvci5tZXRhLnR5cGUuYXNNYXAuaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtjcmVhdG9yLCBhcmdzLnNsaWNlKDEpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW2NyZWF0b3IsIC4uLmFyZ3Muc2xpY2UoMSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW2dldEF0UXVlcnlGbihhdEFwaSwgYXJncy5jcmVhdG9yKS5jcmVhdG9yXTtcbiAgICAgICAgICAgIH0pLCBibG9ja0hhc2gpXG4gICAgICAgICAgICA6IG9mKFtdKSk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZUV4dHJpbnNpY3MoeyB0eCB9LCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVTdWJtaXR0YWJsZSh0aGlzLl90eXBlLCB0aGlzLl9yeCwgZGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBjb25zdCBsYXp5U2VjdGlvbiA9IChzZWN0aW9uKSA9PiBsYXp5TWV0aG9kcyh7fSwgT2JqZWN0LmtleXModHhbc2VjdGlvbl0pLCAobWV0aG9kKSA9PiBtZXRob2Quc3RhcnRzV2l0aCgnJCcpXG4gICAgICAgICAgICA/IHR4W3NlY3Rpb25dW21ldGhvZF1cbiAgICAgICAgICAgIDogdGhpcy5fZGVjb3JhdGVFeHRyaW5zaWNFbnRyeSh0eFtzZWN0aW9uXVttZXRob2RdLCByZXN1bHQpKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBPYmplY3Qua2V5cyh0eCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHNlY3Rpb25zLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGxhenlNZXRob2QocmVzdWx0LCBzZWN0aW9uc1tpXSwgbGF6eVNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9kZWNvcmF0ZUV4dHJpbnNpY0VudHJ5KG1ldGhvZCwgY3JlYXRvcikge1xuICAgICAgICBjb25zdCBkZWNvcmF0ZWQgPSAoLi4ucGFyYW1zKSA9PiBjcmVhdG9yKG1ldGhvZCguLi5wYXJhbXMpKTtcbiAgICAgICAgLy8gcGFzcyB0aHJvdWdoIHRoZSBgLmlzYFxuICAgICAgICBkZWNvcmF0ZWQuaXMgPSAob3RoZXIpID0+IG1ldGhvZC5pcyhvdGhlcik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5fZGVjb3JhdGVGdW5jdGlvbk1ldGEobWV0aG9kLCBkZWNvcmF0ZWQpO1xuICAgIH1cbiAgICBfZGVjb3JhdGVTdG9yYWdlKHsgcXVlcnksIHJlZ2lzdHJ5IH0sIGRlY29yYXRlTWV0aG9kLCBibG9ja0hhc2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNvbnN0IGxhenlTZWN0aW9uID0gKHNlY3Rpb24pID0+IGxhenlNZXRob2RzKHt9LCBPYmplY3Qua2V5cyhxdWVyeVtzZWN0aW9uXSksIChtZXRob2QpID0+IGJsb2NrSGFzaFxuICAgICAgICAgICAgPyB0aGlzLl9kZWNvcmF0ZVN0b3JhZ2VFbnRyeUF0KHJlZ2lzdHJ5LCBxdWVyeVtzZWN0aW9uXVttZXRob2RdLCBkZWNvcmF0ZU1ldGhvZCwgYmxvY2tIYXNoKVxuICAgICAgICAgICAgOiB0aGlzLl9kZWNvcmF0ZVN0b3JhZ2VFbnRyeShxdWVyeVtzZWN0aW9uXVttZXRob2RdLCBkZWNvcmF0ZU1ldGhvZCkpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gc2VjdGlvbnMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgbGF6eU1ldGhvZChyZXN1bHQsIHNlY3Rpb25zW2ldLCBsYXp5U2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX2RlY29yYXRlU3RvcmFnZUVudHJ5KGNyZWF0b3IsIGRlY29yYXRlTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IGdldEFyZ3MgPSAoYXJncywgcmVnaXN0cnkpID0+IGV4dHJhY3RTdG9yYWdlQXJncyhyZWdpc3RyeSB8fCB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5LCBjcmVhdG9yLCBhcmdzKTtcbiAgICAgICAgY29uc3QgZ2V0UXVlcnlBdCA9IChibG9ja0hhc2gpID0+IGZyb20odGhpcy5hdChibG9ja0hhc2gpKS5waXBlKG1hcCgoYXBpKSA9PiBnZXRBdFF1ZXJ5Rm4oYXBpLCBjcmVhdG9yKSkpO1xuICAgICAgICAvLyBEaXNhYmxlIHRoaXMgd2hlcmUgaXQgb2NjdXJzIGZvciBlYWNoIGZpZWxkIHdlIGFyZSBkZWNvcmF0aW5nXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQgKi9cbiAgICAgICAgY29uc3QgZGVjb3JhdGVkID0gdGhpcy5fZGVjb3JhdGVTdG9yYWdlQ2FsbChjcmVhdG9yLCBkZWNvcmF0ZU1ldGhvZCk7XG4gICAgICAgIGRlY29yYXRlZC5jcmVhdG9yID0gY3JlYXRvcjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGRlY29yYXRlZC5hdCA9IGRlY29yYXRlTWV0aG9kKChibG9ja0hhc2gsIC4uLmFyZ3MpID0+IGdldFF1ZXJ5QXQoYmxvY2tIYXNoKS5waXBlKHN3aXRjaE1hcCgocSkgPT4gcSguLi5hcmdzKSkpKTtcbiAgICAgICAgZGVjb3JhdGVkLmhhc2ggPSBkZWNvcmF0ZU1ldGhvZCgoLi4uYXJncykgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRTdG9yYWdlSGFzaChnZXRBcmdzKGFyZ3MpKSk7XG4gICAgICAgIGRlY29yYXRlZC5pcyA9IChrZXkpID0+IGtleS5zZWN0aW9uID09PSBjcmVhdG9yLnNlY3Rpb24gJiZcbiAgICAgICAgICAgIGtleS5tZXRob2QgPT09IGNyZWF0b3IubWV0aG9kO1xuICAgICAgICBkZWNvcmF0ZWQua2V5ID0gKC4uLmFyZ3MpID0+IHU4YVRvSGV4KGNvbXBhY3RTdHJpcExlbmd0aChjcmVhdG9yKC4uLmFyZ3MpKVsxXSk7XG4gICAgICAgIGRlY29yYXRlZC5rZXlQcmVmaXggPSAoLi4uYXJncykgPT4gdThhVG9IZXgoY3JlYXRvci5rZXlQcmVmaXgoLi4uYXJncykpO1xuICAgICAgICBkZWNvcmF0ZWQuc2l6ZSA9IGRlY29yYXRlTWV0aG9kKCguLi5hcmdzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmdldFN0b3JhZ2VTaXplKGdldEFyZ3MoYXJncykpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGRlY29yYXRlZC5zaXplQXQgPSBkZWNvcmF0ZU1ldGhvZCgoYmxvY2tIYXNoLCAuLi5hcmdzKSA9PiBnZXRRdWVyeUF0KGJsb2NrSGFzaCkucGlwZShzd2l0Y2hNYXAoKHEpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0U3RvcmFnZVNpemUoZ2V0QXJncyhhcmdzLCBxLmNyZWF0b3IubWV0YS5yZWdpc3RyeSksIGJsb2NrSGFzaCkpKSk7XG4gICAgICAgIC8vIC5rZXlzKCkgJiAuZW50cmllcygpIG9ubHkgYXZhaWxhYmxlIG9uIG1hcCB0eXBlc1xuICAgICAgICBpZiAoY3JlYXRvci5pdGVyS2V5ICYmIGNyZWF0b3IubWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICBkZWNvcmF0ZWQuZW50cmllcyA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAoLi4uYXJncykgPT4gdGhpcy5fcmV0cmlldmVNYXBFbnRyaWVzKGNyZWF0b3IsIG51bGwsIGFyZ3MpKSk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgICAgIGRlY29yYXRlZC5lbnRyaWVzQXQgPSBkZWNvcmF0ZU1ldGhvZChtZW1vKHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCwgKGJsb2NrSGFzaCwgLi4uYXJncykgPT4gZ2V0UXVlcnlBdChibG9ja0hhc2gpLnBpcGUoc3dpdGNoTWFwKChxKSA9PiB0aGlzLl9yZXRyaWV2ZU1hcEVudHJpZXMocS5jcmVhdG9yLCBibG9ja0hhc2gsIGFyZ3MpKSkpKTtcbiAgICAgICAgICAgIGRlY29yYXRlZC5lbnRyaWVzUGFnZWQgPSBkZWNvcmF0ZU1ldGhvZChtZW1vKHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCwgKG9wdHMpID0+IHRoaXMuX3JldHJpZXZlTWFwRW50cmllc1BhZ2VkKGNyZWF0b3IsIHVuZGVmaW5lZCwgb3B0cykpKTtcbiAgICAgICAgICAgIGRlY29yYXRlZC5rZXlzID0gZGVjb3JhdGVNZXRob2QobWVtbyh0aGlzLl9faW50ZXJuYWxfX2luc3RhbmNlSWQsICguLi5hcmdzKSA9PiB0aGlzLl9yZXRyaWV2ZU1hcEtleXMoY3JlYXRvciwgbnVsbCwgYXJncykpKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgICAgZGVjb3JhdGVkLmtleXNBdCA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAoYmxvY2tIYXNoLCAuLi5hcmdzKSA9PiBnZXRRdWVyeUF0KGJsb2NrSGFzaCkucGlwZShzd2l0Y2hNYXAoKHEpID0+IHRoaXMuX3JldHJpZXZlTWFwS2V5cyhxLmNyZWF0b3IsIGJsb2NrSGFzaCwgYXJncykpKSkpO1xuICAgICAgICAgICAgZGVjb3JhdGVkLmtleXNQYWdlZCA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAob3B0cykgPT4gdGhpcy5fcmV0cmlldmVNYXBLZXlzUGFnZWQoY3JlYXRvciwgdW5kZWZpbmVkLCBvcHRzKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRNdWx0aSAmJiBjcmVhdG9yLm1ldGEudHlwZS5pc01hcCkge1xuICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBkb3VibGUgbWFwIHN0b3JhZ2UgZnVuY3Rpb24sIHVzZXIgbmVlZCB0byBwYXNzIGRvdWJsZSBtYXAga2V5IGFzIGFuIGFycmF5XG4gICAgICAgICAgICBkZWNvcmF0ZWQubXVsdGkgPSBkZWNvcmF0ZU1ldGhvZCgoYXJncykgPT4gY3JlYXRvci5tZXRhLnR5cGUuYXNNYXAuaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3JldHJpZXZlTXVsdGkoYXJncy5tYXAoKGEpID0+IFtjcmVhdG9yLCBbYV1dKSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3JldHJpZXZlTXVsdGkoYXJncy5tYXAoKGEpID0+IFtjcmVhdG9yLCBhXSkpKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlY29yYXRlRnVuY3Rpb25NZXRhKGNyZWF0b3IsIGRlY29yYXRlZCk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZVN0b3JhZ2VFbnRyeUF0KHJlZ2lzdHJ5LCBjcmVhdG9yLCBkZWNvcmF0ZU1ldGhvZCwgYmxvY2tIYXNoKSB7XG4gICAgICAgIGNvbnN0IGdldEFyZ3MgPSAoYXJncykgPT4gZXh0cmFjdFN0b3JhZ2VBcmdzKHJlZ2lzdHJ5LCBjcmVhdG9yLCBhcmdzKTtcbiAgICAgICAgLy8gRGlzYWJsZSB0aGlzIHdoZXJlIGl0IG9jY3VycyBmb3IgZWFjaCBmaWVsZCB3ZSBhcmUgZGVjb3JhdGluZ1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50ICovXG4gICAgICAgIGNvbnN0IGRlY29yYXRlZCA9IGRlY29yYXRlTWV0aG9kKCguLi5hcmdzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmdldFN0b3JhZ2UoZ2V0QXJncyhhcmdzKSwgYmxvY2tIYXNoKSk7XG4gICAgICAgIGRlY29yYXRlZC5jcmVhdG9yID0gY3JlYXRvcjtcbiAgICAgICAgZGVjb3JhdGVkLmhhc2ggPSBkZWNvcmF0ZU1ldGhvZCgoLi4uYXJncykgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRTdG9yYWdlSGFzaChnZXRBcmdzKGFyZ3MpLCBibG9ja0hhc2gpKTtcbiAgICAgICAgZGVjb3JhdGVkLmlzID0gKGtleSkgPT4ga2V5LnNlY3Rpb24gPT09IGNyZWF0b3Iuc2VjdGlvbiAmJlxuICAgICAgICAgICAga2V5Lm1ldGhvZCA9PT0gY3JlYXRvci5tZXRob2Q7XG4gICAgICAgIGRlY29yYXRlZC5rZXkgPSAoLi4uYXJncykgPT4gdThhVG9IZXgoY29tcGFjdFN0cmlwTGVuZ3RoKGNyZWF0b3IoLi4uYXJncykpWzFdKTtcbiAgICAgICAgZGVjb3JhdGVkLmtleVByZWZpeCA9ICguLi5rZXlzKSA9PiB1OGFUb0hleChjcmVhdG9yLmtleVByZWZpeCguLi5rZXlzKSk7XG4gICAgICAgIGRlY29yYXRlZC5zaXplID0gZGVjb3JhdGVNZXRob2QoKC4uLmFyZ3MpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0U3RvcmFnZVNpemUoZ2V0QXJncyhhcmdzKSwgYmxvY2tIYXNoKSk7XG4gICAgICAgIC8vIC5rZXlzKCkgJiAuZW50cmllcygpIG9ubHkgYXZhaWxhYmxlIG9uIG1hcCB0eXBlc1xuICAgICAgICBpZiAoY3JlYXRvci5pdGVyS2V5ICYmIGNyZWF0b3IubWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICBkZWNvcmF0ZWQuZW50cmllcyA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAoLi4uYXJncykgPT4gdGhpcy5fcmV0cmlldmVNYXBFbnRyaWVzKGNyZWF0b3IsIGJsb2NrSGFzaCwgYXJncykpKTtcbiAgICAgICAgICAgIGRlY29yYXRlZC5lbnRyaWVzUGFnZWQgPSBkZWNvcmF0ZU1ldGhvZChtZW1vKHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCwgKG9wdHMpID0+IHRoaXMuX3JldHJpZXZlTWFwRW50cmllc1BhZ2VkKGNyZWF0b3IsIGJsb2NrSGFzaCwgb3B0cykpKTtcbiAgICAgICAgICAgIGRlY29yYXRlZC5rZXlzID0gZGVjb3JhdGVNZXRob2QobWVtbyh0aGlzLl9faW50ZXJuYWxfX2luc3RhbmNlSWQsICguLi5hcmdzKSA9PiB0aGlzLl9yZXRyaWV2ZU1hcEtleXMoY3JlYXRvciwgYmxvY2tIYXNoLCBhcmdzKSkpO1xuICAgICAgICAgICAgZGVjb3JhdGVkLmtleXNQYWdlZCA9IGRlY29yYXRlTWV0aG9kKG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAob3B0cykgPT4gdGhpcy5fcmV0cmlldmVNYXBLZXlzUGFnZWQoY3JlYXRvciwgYmxvY2tIYXNoLCBvcHRzKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRNdWx0aSAmJiBjcmVhdG9yLm1ldGEudHlwZS5pc01hcCkge1xuICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBkb3VibGUgbWFwIHN0b3JhZ2UgZnVuY3Rpb24sIHVzZXIgbmVlZCB0byBwYXNzIGRvdWJsZSBtYXAga2V5IGFzIGFuIGFycmF5XG4gICAgICAgICAgICBkZWNvcmF0ZWQubXVsdGkgPSBkZWNvcmF0ZU1ldGhvZCgoYXJncykgPT4gY3JlYXRvci5tZXRhLnR5cGUuYXNNYXAuaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3JldHJpZXZlTXVsdGkoYXJncy5tYXAoKGEpID0+IFtjcmVhdG9yLCBbYV1dKSwgYmxvY2tIYXNoKVxuICAgICAgICAgICAgICAgIDogdGhpcy5fcmV0cmlldmVNdWx0aShhcmdzLm1hcCgoYSkgPT4gW2NyZWF0b3IsIGFdKSwgYmxvY2tIYXNoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50ICovXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvcmF0ZUZ1bmN0aW9uTWV0YShjcmVhdG9yLCBkZWNvcmF0ZWQpO1xuICAgIH1cbiAgICBfcXVldWVTdG9yYWdlKGNhbGwsIHF1ZXVlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gcXVldWUgPT09IHRoaXMuX19pbnRlcm5hbF9fc3RvcmFnZVN1YlFcbiAgICAgICAgICAgID8gdGhpcy5fcnBjQ29yZS5zdGF0ZS5zdWJzY3JpYmVTdG9yYWdlXG4gICAgICAgICAgICA6IHRoaXMuX3JwY0NvcmUuc3RhdGUucXVlcnlTdG9yYWdlQXQ7XG4gICAgICAgIGxldCBxdWV1ZUlkeCA9IHF1ZXVlLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCB2YWx1ZUlkeCA9IDA7XG4gICAgICAgIGxldCB2YWx1ZU9icztcbiAgICAgICAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBxdWV1ZSBlbnRyaWVzIHlldCxcbiAgICAgICAgLy8gb3IgdGhlIGN1cnJlbnQgcXVldWUgaGFzIGZpcmVkIChzZWUgZnJvbSBiZWxvdyksXG4gICAgICAgIC8vIG9yIHRoZSBjdXJyZW50IHF1ZXVlIGhhcyB0aGUgbWF4IGVudHJpZXMsXG4gICAgICAgIC8vIHRoZW4gd2UgY3JlYXRlIGEgbmV3IHF1ZXVlXG4gICAgICAgIGlmIChxdWV1ZUlkeCA9PT0gLTEgfHwgIXF1ZXVlW3F1ZXVlSWR4XSB8fCBxdWV1ZVtxdWV1ZUlkeF1bMV0ubGVuZ3RoID09PSBQQUdFX1NJWkVfUSkge1xuICAgICAgICAgICAgcXVldWVJZHgrKztcbiAgICAgICAgICAgIHZhbHVlT2JzID0gZnJvbShcbiAgICAgICAgICAgIC8vIHdlIGRlbGF5IHRoZSBleGVjdXRpb24gdW50aWwgdGhlIG5leHQgdGljaywgdGhpcyBhbGxvd3NcbiAgICAgICAgICAgIC8vIGFueSBxdWVyaWVzIG1hZGUgaW4gdGhpcyB0aW1lZnJhbWUgdG8gYmUgYWRkZWQgdG8gdGhlIHNhbWVcbiAgICAgICAgICAgIC8vIHF1ZXVlIGZvciBhIHNpbmdsZSBxdWVyeVxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdldCBhbGwgdGhlIGNhbGxzIGluIHRoaXMgaW5zdGFuY2UsIHJlc29sdmUgd2l0aCBpdFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiBjbGVhciB0aGUgcXVldWUgc28gd2UgZG9uJ3QgYWRkIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgLy8gKGFueXRoaW5nIGFmdGVyIHRoaXMgd2lsbCBiZSBhZGRlZCB0byBhIG5ldyBxdWV1ZSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbHMgPSBxdWV1ZVtxdWV1ZUlkeF1bMV07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWV1ZVtxdWV1ZUlkeF07XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2FsbHMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpLnBpcGUoc3dpdGNoTWFwKChjYWxscykgPT4gcXVlcnkoY2FsbHMpKSk7XG4gICAgICAgICAgICBxdWV1ZS5wdXNoKFt2YWx1ZU9icywgW2NhbGxdXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZU9icyA9IHF1ZXVlW3F1ZXVlSWR4XVswXTtcbiAgICAgICAgICAgIHZhbHVlSWR4ID0gcXVldWVbcXVldWVJZHhdWzFdLmxlbmd0aDtcbiAgICAgICAgICAgIHF1ZXVlW3F1ZXVlSWR4XVsxXS5wdXNoKGNhbGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZU9icy5waXBlKFxuICAgICAgICAvLyByZXR1cm4gdGhlIHNpbmdsZSB2YWx1ZSBhdCB0aGlzIGluZGV4XG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXNbdmFsdWVJZHhdKSk7XG4gICAgfVxuICAgIC8vIERlY29yYXRlIHRoZSBiYXNlIHN0b3JhZ2UgY2FsbC4gSW4gdGhlIGNhc2Ugb3IgcnhqcyBvciBwcm9taXNlLXdpdGhvdXQtY2FsbGJhY2sgKGF3YWl0KVxuICAgIC8vIHdlIG1ha2UgYSBzdWJzY3JpcHRpb24sIGFsdGVybmF0aXZlbHkgd2UgcHVzaCB0aGlzIHRocm91Z2ggYSBzaW5nbGUtc2hvdCBxdWVyeVxuICAgIF9kZWNvcmF0ZVN0b3JhZ2VDYWxsKGNyZWF0b3IsIGRlY29yYXRlTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IG1lbW9lZCA9IG1lbW8odGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkLCAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FsbCA9IGV4dHJhY3RTdG9yYWdlQXJncyh0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5LCBjcmVhdG9yLCBhcmdzKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0U3RvcmFnZShjYWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9xdWV1ZVN0b3JhZ2UoY2FsbCwgdGhpcy5fX2ludGVybmFsX19zdG9yYWdlU3ViUSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QobWVtb2VkLCB7XG4gICAgICAgICAgICBtZXRob2ROYW1lOiBjcmVhdG9yLm1ldGhvZCxcbiAgICAgICAgICAgIG92ZXJyaWRlTm9TdWI6ICguLi5hcmdzKSA9PiB0aGlzLl9xdWV1ZVN0b3JhZ2UoZXh0cmFjdFN0b3JhZ2VBcmdzKHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnksIGNyZWF0b3IsIGFyZ3MpLCB0aGlzLl9faW50ZXJuYWxfX3N0b3JhZ2VHZXRRKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmV0cmlldmUgYSBzZXQgb2YgdmFsdWVzIGZvciBhIHNwZWNpZmljIHNldCBvZiBrZXlzIC0gaGVyZSB3ZSBjaHVuayB0aGUga2V5cyBpbnRvIFBBR0VfU0laRSBzaXplc1xuICAgIF9yZXRyaWV2ZU11bHRpKGtleXMsIGJsb2NrSGFzaCkge1xuICAgICAgICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5oYXNTdWJzY3JpcHRpb25zICYmICFibG9ja0hhc2hcbiAgICAgICAgICAgID8gdGhpcy5fcnBjQ29yZS5zdGF0ZS5zdWJzY3JpYmVTdG9yYWdlXG4gICAgICAgICAgICA6IHRoaXMuX3JwY0NvcmUuc3RhdGUucXVlcnlTdG9yYWdlQXQ7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA8PSBQQUdFX1NJWkVfVikge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2NrSGFzaFxuICAgICAgICAgICAgICAgID8gcXVlcnkoa2V5cywgYmxvY2tIYXNoKVxuICAgICAgICAgICAgICAgIDogcXVlcnkoa2V5cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoYXJyYXlDaHVuayhrZXlzLCBQQUdFX1NJWkVfVikubWFwKChrKSA9PiBibG9ja0hhc2hcbiAgICAgICAgICAgID8gcXVlcnkoaywgYmxvY2tIYXNoKVxuICAgICAgICAgICAgOiBxdWVyeShrKSkpLnBpcGUobWFwKGFycmF5RmxhdHRlbikpO1xuICAgIH1cbiAgICBfcmV0cmlldmVNYXBLZXlzKHsgaXRlcktleSwgbWV0YSwgbWV0aG9kLCBzZWN0aW9uIH0sIGF0LCBhcmdzKSB7XG4gICAgICAgIGlmICghaXRlcktleSB8fCAhbWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXMgY2FuIG9ubHkgYmUgcmV0cmlldmVkIG9uIG1hcHMnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkS2V5ID0gaXRlcktleSguLi5hcmdzKS50b0hleCgpO1xuICAgICAgICBjb25zdCBzdGFydFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGhlYWRLZXkpO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGF0XG4gICAgICAgICAgICA/IChzdGFydEtleSkgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRLZXlzUGFnZWQoaGVhZEtleSwgUEFHRV9TSVpFX0ssIHN0YXJ0S2V5LCBhdClcbiAgICAgICAgICAgIDogKHN0YXJ0S2V5KSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLmdldEtleXNQYWdlZChoZWFkS2V5LCBQQUdFX1NJWkVfSywgc3RhcnRLZXkpO1xuICAgICAgICBjb25zdCBzZXRNZXRhID0gKGtleSkgPT4ga2V5LnNldE1ldGEobWV0YSwgc2VjdGlvbiwgbWV0aG9kKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0U3ViamVjdC5waXBlKHN3aXRjaE1hcChxdWVyeSksIG1hcCgoa2V5cykgPT4ga2V5cy5tYXAoc2V0TWV0YSkpLCB0YXAoKGtleXMpID0+IG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGtleXMubGVuZ3RoID09PSBQQUdFX1NJWkVfS1xuICAgICAgICAgICAgICAgID8gc3RhcnRTdWJqZWN0Lm5leHQoa2V5c1tQQUdFX1NJWkVfSyAtIDFdLnRvSGV4KCkpXG4gICAgICAgICAgICAgICAgOiBzdGFydFN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgfSkpLCB0b0FycmF5KCksIC8vIHRvQXJyYXkgc2luY2Ugd2Ugd2FudCB0byBzdGFydFN1YmplY3QgdG8gYmUgY29tcGxldGVkXG4gICAgICAgIG1hcChhcnJheUZsYXR0ZW4pKTtcbiAgICB9XG4gICAgX3JldHJpZXZlTWFwS2V5c1BhZ2VkKHsgaXRlcktleSwgbWV0YSwgbWV0aG9kLCBzZWN0aW9uIH0sIGF0LCBvcHRzKSB7XG4gICAgICAgIGlmICghaXRlcktleSB8fCAhbWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXMgY2FuIG9ubHkgYmUgcmV0cmlldmVkIG9uIG1hcHMnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXRNZXRhID0gKGtleSkgPT4ga2V5LnNldE1ldGEobWV0YSwgc2VjdGlvbiwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBhdFxuICAgICAgICAgICAgPyAoaGVhZEtleSkgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRLZXlzUGFnZWQoaGVhZEtleSwgb3B0cy5wYWdlU2l6ZSwgb3B0cy5zdGFydEtleSB8fCBoZWFkS2V5LCBhdClcbiAgICAgICAgICAgIDogKGhlYWRLZXkpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0S2V5c1BhZ2VkKGhlYWRLZXksIG9wdHMucGFnZVNpemUsIG9wdHMuc3RhcnRLZXkgfHwgaGVhZEtleSk7XG4gICAgICAgIHJldHVybiBxdWVyeShpdGVyS2V5KC4uLm9wdHMuYXJncykudG9IZXgoKSkucGlwZShtYXAoKGtleXMpID0+IGtleXMubWFwKHNldE1ldGEpKSk7XG4gICAgfVxuICAgIF9yZXRyaWV2ZU1hcEVudHJpZXMoZW50cnksIGF0LCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gYXRcbiAgICAgICAgICAgID8gKGtleXMpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUucXVlcnlTdG9yYWdlQXQoa2V5cywgYXQpXG4gICAgICAgICAgICA6IChrZXlzKSA9PiB0aGlzLl9ycGNDb3JlLnN0YXRlLnF1ZXJ5U3RvcmFnZUF0KGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmV0cmlldmVNYXBLZXlzKGVudHJ5LCBhdCwgYXJncykucGlwZShzd2l0Y2hNYXAoKGtleXMpID0+IGtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IGNvbWJpbmVMYXRlc3QoYXJyYXlDaHVuayhrZXlzLCBQQUdFX1NJWkVfVikubWFwKHF1ZXJ5KSkucGlwZShtYXAoKHZhbHNBcnIpID0+IGFycmF5RmxhdHRlbih2YWxzQXJyKS5tYXAoKHZhbHVlLCBpbmRleCkgPT4gW2tleXNbaW5kZXhdLCB2YWx1ZV0pKSlcbiAgICAgICAgICAgIDogb2YoW10pKSk7XG4gICAgfVxuICAgIF9yZXRyaWV2ZU1hcEVudHJpZXNQYWdlZChlbnRyeSwgYXQsIG9wdHMpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBhdFxuICAgICAgICAgICAgPyAoa2V5cykgPT4gdGhpcy5fcnBjQ29yZS5zdGF0ZS5xdWVyeVN0b3JhZ2VBdChrZXlzLCBhdClcbiAgICAgICAgICAgIDogKGtleXMpID0+IHRoaXMuX3JwY0NvcmUuc3RhdGUucXVlcnlTdG9yYWdlQXQoa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXRyaWV2ZU1hcEtleXNQYWdlZChlbnRyeSwgYXQsIG9wdHMpLnBpcGUoc3dpdGNoTWFwKChrZXlzKSA9PiBrZXlzLmxlbmd0aFxuICAgICAgICAgICAgPyBxdWVyeShrZXlzKS5waXBlKG1hcCgodmFsc0FycikgPT4gdmFsc0Fyci5tYXAoKHZhbHVlLCBpbmRleCkgPT4gW2tleXNbaW5kZXhdLCB2YWx1ZV0pKSlcbiAgICAgICAgICAgIDogb2YoW10pKSk7XG4gICAgfVxuICAgIF9kZWNvcmF0ZURlcml2ZVJ4KGRlY29yYXRlTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IHNwZWNOYW1lID0gdGhpcy5fcnVudGltZVZlcnNpb24/LnNwZWNOYW1lLnRvU3RyaW5nKCk7XG4gICAgICAgIC8vIFB1bGwgaW4gZGVyaXZlIGZyb20gYXBpLWRlcml2ZVxuICAgICAgICBjb25zdCBhdmFpbGFibGUgPSBnZXRBdmFpbGFibGVEZXJpdmVzKHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCwgdGhpcy5fcngsIG9iamVjdFNwcmVhZCh7fSwgdGhpcy5fb3B0aW9ucy5kZXJpdmVzLCB0aGlzLl9vcHRpb25zLnR5cGVzQnVuZGxlPy5zcGVjPy5bc3BlY05hbWUgfHwgJyddPy5kZXJpdmVzKSk7XG4gICAgICAgIHJldHVybiBkZWNvcmF0ZURlcml2ZVNlY3Rpb25zKGRlY29yYXRlTWV0aG9kLCBhdmFpbGFibGUpO1xuICAgIH1cbiAgICBfZGVjb3JhdGVEZXJpdmUoZGVjb3JhdGVNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGRlY29yYXRlRGVyaXZlU2VjdGlvbnMoZGVjb3JhdGVNZXRob2QsIHRoaXMuX3J4LmRlcml2ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1dCB0aGUgYHRoaXMub25DYWxsYCBmdW5jdGlvbiBvZiBBcGlSeCBoZXJlLCBiZWNhdXNlIGl0IGlzIG5lZWRlZCBieVxuICAgICAqIGBhcGkuX3J4YC5cbiAgICAgKi9cbiAgICBfcnhEZWNvcmF0ZU1ldGhvZCA9IChtZXRob2QpID0+IHtcbiAgICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5leHBvcnQgY2xhc3MgRXZlbnRzIHtcbiAgICBfX2ludGVybmFsX19ldmVudGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgZW1pdCh0eXBlLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2V2ZW50ZW1pdHRlci5lbWl0KHR5cGUsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXR0YWNoIGFuIGV2ZW50ZW1pdHRlciBoYW5kbGVyIHRvIGxpc3RlbiB0byBhIHNwZWNpZmljIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBldmVudCB0byBsaXN0ZW4gdG8uIEF2YWlsYWJsZSBldmVudHMgYXJlIGBjb25uZWN0ZWRgLCBgZGlzY29ubmVjdGVkYCwgYHJlYWR5YCBhbmQgYGVycm9yYFxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgZmlyZXMuIERlcGVuZGluZyBvbiB0aGUgZXZlbnQgdHlwZSwgaXQgY291bGQgZmlyZSB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogYXBpLm9uKCdjb25uZWN0ZWQnLCAoKTogdm9pZCA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnQVBJIGhhcyBiZWVuIGNvbm5lY3RlZCB0byB0aGUgZW5kcG9pbnQnKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGFwaS5vbignZGlzY29ubmVjdGVkJywgKCk6IHZvaWQgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coJ0FQSSBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgZW5kcG9pbnQnKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBvbih0eXBlLCBoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRlbWl0dGVyLm9uKHR5cGUsIGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZSB0aGUgZ2l2ZW4gZXZlbnRlbWl0dGVyIGhhbmRsZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGV2ZW50IHRoZSBjYWxsYmFjayB3YXMgYXR0YWNoZWQgdG8uIEF2YWlsYWJsZSBldmVudHMgYXJlIGBjb25uZWN0ZWRgLCBgZGlzY29ubmVjdGVkYCwgYHJlYWR5YCBhbmQgYGVycm9yYFxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBjYWxsYmFjayB0byB1bnJlZ2lzdGVyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogY29uc3QgaGFuZGxlciA9ICgpOiB2b2lkID0+IHtcbiAgICAgKiAgY29uc29sZS5sb2coJ0Nvbm5lY3RlZCAhKTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gU3RhcnQgbGlzdGVuaW5nXG4gICAgICogYXBpLm9uKCdjb25uZWN0ZWQnLCBoYW5kbGVyKTtcbiAgICAgKlxuICAgICAqIC8vIFN0b3AgbGlzdGVuaW5nXG4gICAgICogYXBpLm9mZignY29ubmVjdGVkJywgaGFuZGxlcik7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgb2ZmKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ldmVudGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIodHlwZSwgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXR0YWNoIGFuIG9uZS10aW1lIGV2ZW50ZW1pdHRlciBoYW5kbGVyIHRvIGxpc3RlbiB0byBhIHNwZWNpZmljIGV2ZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBldmVudCB0byBsaXN0ZW4gdG8uIEF2YWlsYWJsZSBldmVudHMgYXJlIGBjb25uZWN0ZWRgLCBgZGlzY29ubmVjdGVkYCwgYHJlYWR5YCBhbmQgYGVycm9yYFxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgZmlyZXMuIERlcGVuZGluZyBvbiB0aGUgZXZlbnQgdHlwZSwgaXQgY291bGQgZmlyZSB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogYXBpLm9uY2UoJ2Nvbm5lY3RlZCcsICgpOiB2b2lkID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBUEkgaGFzIGJlZW4gY29ubmVjdGVkIHRvIHRoZSBlbmRwb2ludCcpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogYXBpLm9uY2UoJ2Rpc2Nvbm5lY3RlZCcsICgpOiB2b2lkID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBUEkgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gdGhlIGVuZHBvaW50Jyk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgb25jZSh0eXBlLCBoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRlbWl0dGVyLm9uY2UodHlwZSwgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi4vcGFja2FnZUluZm8uanMnO1xuaW1wb3J0IHsgZmluZENhbGwsIGZpbmRFcnJvciB9IGZyb20gJy4vZmluZC5qcyc7XG5pbXBvcnQgeyBJbml0IH0gZnJvbSAnLi9Jbml0LmpzJztcbmZ1bmN0aW9uIGFzc2VydFJlc3VsdCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFwaSBpbnRlcmZhY2VzIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2luZywgd2FpdCBmb3IgJ2lzUmVhZHknXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgY2xhc3MgR2V0dGVycyBleHRlbmRzIEluaXQge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSdW50aW1lIGNhbGwgaW50ZXJmYWNlcyAoY3VycmVudGx5IHVudHlwZWQsIG9ubHkgZGVjb3JhdGVkIHZpYSBBUEkgb3B0aW9ucylcbiAgICAgKi9cbiAgICBnZXQgY2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9jYWxsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgdHlwZXMgKGNvbnN0YW50cykgb2YgYWxsIG1vZHVsZXMuXG4gICAgICpcbiAgICAgKiBUaGUgdmFsdWVzIGFyZSBpbnN0YW5jZXMgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUgYW5kIGFyZSBhY2Nlc3NpYmxlIHVzaW5nIGBzZWN0aW9uYC5gY29uc3RhbnROYW1lYCxcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPEJSPlxuICAgICAqXG4gICAgICogYGBgamF2YXNjcmlwdFxuICAgICAqIGNvbnNvbGUubG9nKGFwaS5jb25zdHMuZGVtb2NyYWN5LmVuYWN0bWVudFBlcmlvZC50b1N0cmluZygpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBjb25zdHMoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fY29uc3RzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERlcml2ZWQgcmVzdWx0cyB0aGF0IGFyZSBpbmplY3RlZCBpbnRvIHRoZSBBUEksIGFsbG93aW5nIGZvciBjb21iaW5hdGlvbnMgb2YgdmFyaW91cyBxdWVyeSByZXN1bHRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogYXBpLmRlcml2ZS5jaGFpbi5iZXN0TnVtYmVyKChudW1iZXIpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdiZXN0IG51bWJlcicsIG51bWJlcik7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IGRlcml2ZSgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9kZXJpdmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXJyb3JzIGZyb20gbWV0YWRhdGFcbiAgICAgKi9cbiAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gYXNzZXJ0UmVzdWx0KHRoaXMuX2Vycm9ycyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudHMgZnJvbSBtZXRhZGF0YVxuICAgICAqL1xuICAgIGdldCBldmVudHMoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fZXZlbnRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uICBSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIGV4dHJpbnNpY3MgaW4tdXNlIG9uIHRoaXMgY2hhaW5cbiAgICAgKi9cbiAgICBnZXQgZXh0cmluc2ljVmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJpbnNpY1R5cGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250YWlucyB0aGUgZ2VuZXNpcyBIYXNoIG9mIHRoZSBhdHRhY2hlZCBjaGFpbi4gQXBhcnQgZnJvbSBiZWluZyB1c2VmdWwgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgY2hhaW4sIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gc2lnbiBpbW1vcnRhbCB0cmFuc2FjdGlvbnMuXG4gICAgICovXG4gICAgZ2V0IGdlbmVzaXNIYXNoKCkge1xuICAgICAgICByZXR1cm4gYXNzZXJ0UmVzdWx0KHRoaXMuX2dlbmVzaXNIYXNoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHRydWUgaXMgdGhlIHVuZGVybHlpbmcgcHJvdmlkZXIgaXMgY29ubmVjdGVkXG4gICAgICovXG4gICAgZ2V0IGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDb25uZWN0ZWQuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsaWJyYXJ5IGluZm9ybWF0aW9uIG5hbWUgJiB2ZXJzaW9uIChmcm9tIHBhY2thZ2UuanNvbilcbiAgICAgKi9cbiAgICBnZXQgbGlicmFyeUluZm8oKSB7XG4gICAgICAgIHJldHVybiBgJHtwYWNrYWdlSW5mby5uYW1lfSB2JHtwYWNrYWdlSW5mby52ZXJzaW9ufWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250YWlucyBhbGwgdGhlIGNoYWluIHN0YXRlIG1vZHVsZXMgYW5kIHRoZWlyIHN1YnNlcXVlbnQgbWV0aG9kcyBpbiB0aGUgQVBJLiBUaGVzZSBhcmUgYXR0YWNoZWQgZHluYW1pY2FsbHkgZnJvbSB0aGUgcnVudGltZSBtZXRhZGF0YS5cbiAgICAgKlxuICAgICAqIEFsbCBjYWxscyBpbnNpZGUgdGhlIG5hbWVzcGFjZSwgaXMgZGVub3RlZCBieSBgc2VjdGlvbmAuYG1ldGhvZGAgYW5kIG1heSB0YWtlIGFuIG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlci4gQXMgYW4gZXhhbXBsZSwgYGFwaS5xdWVyeS50aW1lc3RhbXAubm93KClgIChjdXJyZW50IGJsb2NrIHRpbWVzdGFtcCkgZG9lcyBub3QgdGFrZSBwYXJhbWV0ZXJzLCB3aGlsZSBgYXBpLnF1ZXJ5LnN5c3RlbS5hY2NvdW50KDxhY2NvdW50SWQ+KWAgKHJldHJpZXZpbmcgdGhlIGFzc29jaWF0ZWQgbm9uY2UgJiBiYWxhbmNlcyBmb3IgYW4gYWNjb3VudCksIHRha2VzIHRoZSBgQWNjb3VudElkYCBhcyBhIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPEJSPlxuICAgICAqXG4gICAgICogYGBgamF2YXNjcmlwdFxuICAgICAqIGFwaS5xdWVyeS5zeXN0ZW0uYWNjb3VudCg8YWNjb3VudElkPiwgKFtub25jZSwgYmFsYW5jZV0pID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCduZXcgZnJlZSBiYWxhbmNlJywgYmFsYW5jZS5mcmVlLCAnbmV3IG5vbmNlJywgbm9uY2UpO1xuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9xdWVyeSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBbGxvd3MgZm9yIHRoZSBxdWVyeWluZyBvZiBtdWx0aXBsZSBzdG9yYWdlIGVudHJpZXMgYW5kIHRoZSBjb21iaW5hdGlvbiB0aGVyZW9mIGludG8gYSBzaW5nbGUgcmVzdWx0LiBUaGlzIGlzIGEgdmVyeSBvcHRpbWFsIHdheSB0byBtYWtlIG11bHRpcGxlIHF1ZXJpZXMgc2luY2UgaXQgb25seSBtYWtlcyBhIHNpbmdsZSBjb25uZWN0aW9uIHRvIHRoZSBub2RlIGFuZCByZXRyaWV2ZXMgdGhlIGRhdGEgb3ZlciBvbmUgc3Vic2NyaXB0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogY29uc3QgdW5zdWIgPSBhd2FpdCBhcGkucXVlcnlNdWx0aShcbiAgICAgKiAgIFtcbiAgICAgKiAgICAgLy8geW91IGNhbiBpbmNsdWRlIHRoZSBzdG9yYWdlIHdpdGhvdXQgYW55IHBhcmFtZXRlcnNcbiAgICAgKiAgICAgYXBpLnF1ZXJ5LmJhbGFuY2VzLnRvdGFsSXNzdWFuY2UsXG4gICAgICogICAgIC8vIG9yIHlvdSBjYW4gcGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSBzdG9yYWdlIHF1ZXJ5XG4gICAgICogICAgIFthcGkucXVlcnkuc3lzdGVtLmFjY291bnQsICc1R3J3dmFFRjV6WGIyNkZ6OXJjUXBEV1M1N0N0RVJIcE5laFhDUGNOb0hHS3V0UVknXVxuICAgICAqICAgXSxcbiAgICAgKiAgIChbZXhpc3RlbnRpYWwsIFssIHsgZnJlZSB9XV0pID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coYFlvdSBoYXZlICR7ZnJlZS5zdWIoZXhpc3RlbnRpYWwpfSBtb3JlIHRoYW4gdGhlIGV4aXN0ZW50aWFsIGRlcG9zaXRgKTtcbiAgICAgKlxuICAgICAqICAgICB1bnN1YigpO1xuICAgICAqICAgfVxuICAgICAqICk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IHF1ZXJ5TXVsdGkoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fcXVlcnlNdWx0aSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250YWlucyBhbGwgdGhlIHJhdyBycGMgc2VjdGlvbnMgYW5kIHRoZWlyIHN1YnNlcXVlbnQgbWV0aG9kcyBpbiB0aGUgQVBJIGFzIGRlZmluZWQgYnkgdGhlIGpzb25ycGMgaW50ZXJmYWNlIGRlZmluaXRpb25zLiBVbmxpa2UgdGhlIGR5bmFtaWMgYGFwaS5xdWVyeWAgYW5kIGBhcGkudHhgIHNlY3Rpb25zLCB0aGVzZSBtZXRob2RzIGFyZSBmaXhlZCAoYWx0aG91Z2ggZXh0ZW5zaWJsZSB3aXRoIG5vZGUgdXBncmFkZXMpIGFuZCBub3QgZGV0ZXJtaW5lZCBieSB0aGUgcnVudGltZS5cbiAgICAgKlxuICAgICAqIFJQQyBlbmRwb2ludHMgYXZhaWxhYmxlIGhlcmUgYWxsb3cgZm9yIHRoZSBxdWVyeSBvZiBjaGFpbiwgbm9kZSBhbmQgc3lzdGVtIGluZm9ybWF0aW9uLCBpbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgaW50ZXJmYWNlcyBmb3IgdGhlIHJhdyBxdWVyaWVzIG9mIHN0YXRlICh1c2luZyBrbm93biBrZXlzKSBhbmQgdGhlIHN1Ym1pc3Npb24gb2YgdHJhbnNhY3Rpb25zLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogYXBpLnJwYy5jaGFpbi5zdWJzY3JpYmVOZXdIZWFkcygoaGVhZGVyKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZygnbmV3IGhlYWRlcicsIGhlYWRlcik7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IHJwYygpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9ycGMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udGFpbnMgdGhlIGNoYWluIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBub2RlLlxuICAgICAqL1xuICAgIGdldCBydW50aW1lQ2hhaW4oKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fcnVudGltZUNoYWluKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFlpZWxkcyB0aGUgY3VycmVudCBhdHRhY2hlZCBydW50aW1lIG1ldGFkYXRhLiBHZW5lcmFsbHkgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29uc3RydWN0IGV4dHJpbnNpY3MgJiBzdG9yYWdlLCBidXQgaXMgdXNlZnVsIGZvciBjdXJyZW50IHJ1bnRpbWUgaW5zcGVjdGlvbi5cbiAgICAgKi9cbiAgICBnZXQgcnVudGltZU1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gYXNzZXJ0UmVzdWx0KHRoaXMuX3J1bnRpbWVNZXRhZGF0YSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250YWlucyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgcnVudGltZS5cbiAgICAgKi9cbiAgICBnZXQgcnVudGltZVZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXN1bHQodGhpcy5fcnVudGltZVZlcnNpb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHVuZGVybHlpbmcgUnggQVBJIGludGVyZmFjZVxuICAgICAqL1xuICAgIGdldCByeCgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9yeCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHByb3ZpZGVyIHN0YXRzXG4gICAgICovXG4gICAgZ2V0IHN0YXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnBjQ29yZS5zdGF0cztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0eXBlIG9mIHRoaXMgQVBJIGluc3RhbmNlLCBlaXRoZXIgJ3J4anMnIG9yICdwcm9taXNlJ1xuICAgICAqL1xuICAgIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRhaW5zIGFsbCB0aGUgZXh0cmluc2ljIG1vZHVsZXMgYW5kIHRoZWlyIHN1YnNlcXVlbnQgbWV0aG9kcyBpbiB0aGUgQVBJLiBJdCBhbGxvd3MgZm9yIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdHJhbnNhY3Rpb25zIGFuZCB0aGUgc3VibWlzc2lvbiB0aGVyZW9mLiBUaGVzZSBhcmUgYXR0YWNoZWQgZHluYW1pY2FsbHkgZnJvbSB0aGUgcnVudGltZSBtZXRhZGF0YS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPEJSPlxuICAgICAqXG4gICAgICogYGBgamF2YXNjcmlwdFxuICAgICAqIGFwaS50eC5iYWxhbmNlc1xuICAgICAqICAgLnRyYW5zZmVyQWxsb3dEZWF0aCg8cmVjaXBpZW50SWQ+LCA8YmFsYW5jZT4pXG4gICAgICogICAuc2lnbkFuZFNlbmQoPGtleVBhaXI+LCAoe3N0YXR1c30pID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ3R4IHN0YXR1cycsIHN0YXR1cy5hc0ZpbmFsaXplZC50b0hleCgpKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCB0eCgpIHtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJlc3VsdCh0aGlzLl9leHRyaW5zaWNzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZpbmRzIHRoZSBkZWZpbml0aW9uIGZvciBhIHNwZWNpZmljIFtbQ2FsbEZ1bmN0aW9uXV0gYmFzZWQgb24gdGhlIGluZGV4IHN1cHBsaWVkXG4gICAgICovXG4gICAgZmluZENhbGwoY2FsbEluZGV4KSB7XG4gICAgICAgIHJldHVybiBmaW5kQ2FsbCh0aGlzLnJlZ2lzdHJ5LCBjYWxsSW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRmluZHMgdGhlIGRlZmluaXRpb24gZm9yIGEgc3BlY2lmaWMgW1tSZWdpc3RyeUVycm9yXV0gYmFzZWQgb24gdGhlIGluZGV4IHN1cHBsaWVkXG4gICAgICovXG4gICAgZmluZEVycm9yKGVycm9ySW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRFcnJvcih0aGlzLnJlZ2lzdHJ5LCBlcnJvckluZGV4KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZXRhZGF0YSwgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzJztcbmltcG9ydCB7IGdldFNwZWNBbGlhcywgZ2V0U3BlY0V4dGVuc2lvbnMsIGdldFNwZWNIYXNoZXIsIGdldFNwZWNScGMsIGdldFNwZWNUeXBlcywgZ2V0VXBncmFkZVZlcnNpb24gfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMta25vd24nO1xuaW1wb3J0IHsgYXNzZXJ0UmV0dXJuLCBCTl9aRVJPLCBpc1VuZGVmaW5lZCwgbG9nZ2VyLCBub29wLCBvYmplY3RTcHJlYWQsIHU4YUVxLCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjcnlwdG9XYWl0UmVhZHkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgRGVjb3JhdGUgfSBmcm9tICcuL0RlY29yYXRlLmpzJztcbmNvbnN0IEtFRVBBTElWRV9JTlRFUlZBTCA9IDEwMDAwO1xuY29uc3QgV0lUSF9WRVJTSU9OX1NIT1JUQ1VUID0gZmFsc2U7XG5jb25zdCBsID0gbG9nZ2VyKCdhcGkvaW5pdCcpO1xuZnVuY3Rpb24gdGV4dFRvU3RyaW5nKHQpIHtcbiAgICByZXR1cm4gdC50b1N0cmluZygpO1xufVxuZXhwb3J0IGNsYXNzIEluaXQgZXh0ZW5kcyBEZWNvcmF0ZSB7XG4gICAgX19pbnRlcm5hbF9fYXRMYXN0ID0gbnVsbDtcbiAgICBfX2ludGVybmFsX19oZWFsdGhUaW1lciA9IG51bGw7XG4gICAgX19pbnRlcm5hbF9fcmVnaXN0cmllcyA9IFtdO1xuICAgIF9faW50ZXJuYWxfX3VwZGF0ZVN1YiA9IG51bGw7XG4gICAgX19pbnRlcm5hbF9fd2FpdGluZ1JlZ2lzdHJpZXMgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICBzdXBlcihvcHRpb25zLCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCk7XG4gICAgICAgIC8vIGFsbCBpbmplY3RlZCB0eXBlcyBhZGRlZCB0byB0aGUgcmVnaXN0cnkgZm9yIG92ZXJyaWRlc1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5LnNldEtub3duVHlwZXMob3B0aW9ucyk7XG4gICAgICAgIC8vIFdlIG9ubHkgcmVnaXN0ZXIgdGhlIHR5cGVzIChnbG9iYWwpIGlmIHRoaXMgaXMgbm90IGEgY2xvbmVkIGluc3RhbmNlLlxuICAgICAgICAvLyBEbyByaWdodCB1cC1mcm9udCwgc28gd2UgZ2V0IGluIHRoZSB1c2VyIHR5cGVzIGJlZm9yZSB3ZSBhcmUgYWN0dWFsbHlcbiAgICAgICAgLy8gZG9pbmcgYW55dGhpbmcgb24tY2hhaW4sIHRoaXMgZW5zdXJlcyB3ZSBoYXZlIHRoZSBvdmVycmlkZXMgaW4tcGxhY2VcbiAgICAgICAgaWYgKCFvcHRpb25zLnNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVzKG9wdGlvbnMudHlwZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19yZWdpc3RyaWVzID0gb3B0aW9ucy5zb3VyY2UuX19pbnRlcm5hbF9fcmVnaXN0cmllcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ycGMgPSB0aGlzLl9kZWNvcmF0ZVJwYyh0aGlzLl9ycGNDb3JlLCB0aGlzLl9kZWNvcmF0ZU1ldGhvZCk7XG4gICAgICAgIHRoaXMuX3J4LnJwYyA9IHRoaXMuX2RlY29yYXRlUnBjKHRoaXMuX3JwY0NvcmUsIHRoaXMuX3J4RGVjb3JhdGVNZXRob2QpO1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0TXVsdGkpIHtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5TXVsdGkgPSB0aGlzLl9kZWNvcmF0ZU11bHRpKHRoaXMuX2RlY29yYXRlTWV0aG9kKTtcbiAgICAgICAgICAgIHRoaXMuX3J4LnF1ZXJ5TXVsdGkgPSB0aGlzLl9kZWNvcmF0ZU11bHRpKHRoaXMuX3J4RGVjb3JhdGVNZXRob2QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3J4LnNpZ25lciA9IG9wdGlvbnMuc2lnbmVyO1xuICAgICAgICB0aGlzLl9ycGNDb3JlLnNldFJlZ2lzdHJ5U3dhcCgoYmxvY2tIYXNoKSA9PiB0aGlzLmdldEJsb2NrUmVnaXN0cnkoYmxvY2tIYXNoKSk7XG4gICAgICAgIHRoaXMuX3JwY0NvcmUuc2V0UmVzb2x2ZUJsb2NrSGFzaCgoYmxvY2tOdW1iZXIpID0+IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuY2hhaW4uZ2V0QmxvY2tIYXNoKGJsb2NrTnVtYmVyKSkpO1xuICAgICAgICBpZiAodGhpcy5oYXNTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9ycGNDb3JlLnByb3ZpZGVyLm9uKCdkaXNjb25uZWN0ZWQnLCAoKSA9PiB0aGlzLl9faW50ZXJuYWxfX29uUHJvdmlkZXJEaXNjb25uZWN0KCkpO1xuICAgICAgICAgICAgdGhpcy5fcnBjQ29yZS5wcm92aWRlci5vbignZXJyb3InLCAoZSkgPT4gdGhpcy5fX2ludGVybmFsX19vblByb3ZpZGVyRXJyb3IoZSkpO1xuICAgICAgICAgICAgdGhpcy5fcnBjQ29yZS5wcm92aWRlci5vbignY29ubmVjdGVkJywgKCkgPT4gdGhpcy5fX2ludGVybmFsX19vblByb3ZpZGVyQ29ubmVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5fb3B0aW9ucy5ub0luaXRXYXJuKSB7XG4gICAgICAgICAgICBsLndhcm4oJ0FwaSB3aWxsIGJlIGF2YWlsYWJsZSBpbiBhIGxpbWl0ZWQgbW9kZSBzaW5jZSB0aGUgcHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydCBzdWJzY3JpcHRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIHByb3ZpZGVyIHdhcyBpbnN0YW50aWF0ZWQgZWFybGllciwgYW5kIGhhcyBhbHJlYWR5IGVtaXR0ZWQgYVxuICAgICAgICAvLyAnY29ubmVjdGVkJyBldmVudCwgdGhlbiB0aGUgYG9uKCdjb25uZWN0ZWQnKWAgd29uJ3QgZmlyZSBhbnltb3JlLiBUb1xuICAgICAgICAvLyBjYXRlciBmb3IgdGhpcyBjYXNlLCB3ZSBjYWxsIG1hbnVhbGx5IGB0aGlzLl9vblByb3ZpZGVyQ29ubmVjdGAuXG4gICAgICAgIGlmICh0aGlzLl9ycGNDb3JlLnByb3ZpZGVyLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX29uUHJvdmlkZXJDb25uZWN0KCkuY2F0Y2gobm9vcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERlY29yYXRlcyBhIHJlZ2lzdHJ5IGJhc2VkIG9uIHRoZSBydW50aW1lIHZlcnNpb25cbiAgICAgKi9cbiAgICBfaW5pdFJlZ2lzdHJ5KHJlZ2lzdHJ5LCBjaGFpbiwgdmVyc2lvbiwgbWV0YWRhdGEsIGNoYWluUHJvcHMpIHtcbiAgICAgICAgcmVnaXN0cnkuY2xlYXJDYWNoZSgpO1xuICAgICAgICByZWdpc3RyeS5zZXRDaGFpblByb3BlcnRpZXMoY2hhaW5Qcm9wcyB8fCB0aGlzLnJlZ2lzdHJ5LmdldENoYWluUHJvcGVydGllcygpKTtcbiAgICAgICAgcmVnaXN0cnkuc2V0S25vd25UeXBlcyh0aGlzLl9vcHRpb25zKTtcbiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoZ2V0U3BlY1R5cGVzKHJlZ2lzdHJ5LCBjaGFpbiwgdmVyc2lvbi5zcGVjTmFtZSwgdmVyc2lvbi5zcGVjVmVyc2lvbikpO1xuICAgICAgICByZWdpc3RyeS5zZXRIYXNoZXIoZ2V0U3BlY0hhc2hlcihyZWdpc3RyeSwgY2hhaW4sIHZlcnNpb24uc3BlY05hbWUpKTtcbiAgICAgICAgLy8gZm9yIGJ1bmRsZWQgdHlwZXMsIHB1bGwgdGhyb3VnaCB0aGUgYWxpYXNlcyBkZWZpbmVkXG4gICAgICAgIGlmIChyZWdpc3RyeS5rbm93blR5cGVzLnR5cGVzQnVuZGxlKSB7XG4gICAgICAgICAgICByZWdpc3RyeS5rbm93blR5cGVzLnR5cGVzQWxpYXMgPSBnZXRTcGVjQWxpYXMocmVnaXN0cnksIGNoYWluLCB2ZXJzaW9uLnNwZWNOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RyeS5zZXRNZXRhZGF0YShtZXRhZGF0YSwgdW5kZWZpbmVkLCBvYmplY3RTcHJlYWQoe30sIGdldFNwZWNFeHRlbnNpb25zKHJlZ2lzdHJ5LCBjaGFpbiwgdmVyc2lvbi5zcGVjTmFtZSksIHRoaXMuX29wdGlvbnMuc2lnbmVkRXh0ZW5zaW9ucyksIHRoaXMuX29wdGlvbnMubm9Jbml0V2Fybik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBkZWZhdWx0IHZlcnNpb25lZCByZWdpc3RyeVxuICAgICAqL1xuICAgIF9nZXREZWZhdWx0UmVnaXN0cnkoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXR1cm4odGhpcy5fX2ludGVybmFsX19yZWdpc3RyaWVzLmZpbmQoKHsgaXNEZWZhdWx0IH0pID0+IGlzRGVmYXVsdCksICdJbml0aWFsaXphdGlvbiBlcnJvciwgY2Fubm90IGZpbmQgdGhlIGRlZmF1bHQgcmVnaXN0cnknKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBkZWNvcmF0ZWQgQVBJIGluc3RhbmNlIGF0IGEgc3BlY2lmaWMgcG9pbnQgaW4gdGltZVxuICAgICAqL1xuICAgIGFzeW5jIGF0KGJsb2NrSGFzaCwga25vd25WZXJzaW9uKSB7XG4gICAgICAgIGNvbnN0IHU4YUhhc2ggPSB1OGFUb1U4YShibG9ja0hhc2gpO1xuICAgICAgICBjb25zdCB1OGFIZXggPSB1OGFUb0hleCh1OGFIYXNoKTtcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCB0aGlzLmdldEJsb2NrUmVnaXN0cnkodThhSGFzaCwga25vd25WZXJzaW9uKTtcbiAgICAgICAgaWYgKCF0aGlzLl9faW50ZXJuYWxfX2F0TGFzdCB8fCB0aGlzLl9faW50ZXJuYWxfX2F0TGFzdFswXSAhPT0gdThhSGV4KSB7XG4gICAgICAgICAgICAvLyBhbHdheXMgY3JlYXRlIGEgbmV3IGRlY29yYXRpb24gLSBzaW5jZSB3ZSBhcmUgcG9pbnRpbmcgdG8gYSBzcGVjaWZpYyBoYXNoLCB0aGlzXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGFsbCBxdWVyaWVzIG5lZWRzIHRvIHVzZSB0aGF0IGhhc2ggKG5vdCBhIHByZXZpb3VzIG9uZSBhbHJlYWR5IGV4aXN0aW5nKVxuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19hdExhc3QgPSBbdThhSGV4LCB0aGlzLl9jcmVhdGVEZWNvcmF0ZWQocmVnaXN0cnksIHRydWUsIG51bGwsIHU4YUhhc2gpLmRlY29yYXRlZEFwaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYXRMYXN0WzFdO1xuICAgIH1cbiAgICBhc3luYyBfY3JlYXRlQmxvY2tSZWdpc3RyeShibG9ja0hhc2gsIGhlYWRlciwgdmVyc2lvbikge1xuICAgICAgICBjb25zdCByZWdpc3RyeSA9IG5ldyBUeXBlUmVnaXN0cnkoYmxvY2tIYXNoKTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEocmVnaXN0cnksIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0TWV0YWRhdGEucmF3KGhlYWRlci5wYXJlbnRIYXNoKSkpO1xuICAgICAgICBjb25zdCBydW50aW1lQ2hhaW4gPSB0aGlzLl9ydW50aW1lQ2hhaW47XG4gICAgICAgIGlmICghcnVudGltZUNoYWluKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5pdGlhbGl6aW9uIG9yZGVyLCBydW50aW1lQ2hhaW4gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRSZWdpc3RyeShyZWdpc3RyeSwgcnVudGltZUNoYWluLCB2ZXJzaW9uLCBtZXRhZGF0YSk7XG4gICAgICAgIC8vIGFkZCBvdXIgbmV3IHJlZ2lzdHJ5XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgY291bnRlcjogMCwgbGFzdEJsb2NrSGFzaDogYmxvY2tIYXNoLCBtZXRhZGF0YSwgcmVnaXN0cnksIHJ1bnRpbWVWZXJzaW9uOiB2ZXJzaW9uIH07XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cmllcy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9jYWNoZUJsb2NrUmVnaXN0cnlQcm9ncmVzcyhrZXksIGNyZWF0b3IpIHtcbiAgICAgICAgLy8gbG9vayBmb3Igd2FpdGluZyByZXNvbHZlc1xuICAgICAgICBsZXQgd2FpdGluZyA9IHRoaXMuX19pbnRlcm5hbF9fd2FpdGluZ1JlZ2lzdHJpZXNba2V5XTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHdhaXRpbmcpKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHdhaXRpbmcsIGNvbnN0cnVjdCBuZXdcbiAgICAgICAgICAgIHdhaXRpbmcgPSB0aGlzLl9faW50ZXJuYWxfX3dhaXRpbmdSZWdpc3RyaWVzW2tleV0gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY3JlYXRvcigpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChyZWdpc3RyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fX2ludGVybmFsX193YWl0aW5nUmVnaXN0cmllc1trZXldO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9faW50ZXJuYWxfX3dhaXRpbmdSZWdpc3RyaWVzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2FpdGluZztcbiAgICB9XG4gICAgX2dldEJsb2NrUmVnaXN0cnlWaWFWZXJzaW9uKGJsb2NrSGFzaCwgdmVyc2lvbikge1xuICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHByZS1leGlzdGluZyByZWdpc3RyaWVzLiBXZSBhbHNvIGNoZWNrIHNwZWNOYW1lLCBlLmcuIGl0XG4gICAgICAgICAgICAvLyBjb3VsZCBiZSBjaGFuZ2VkIGxpa2UgaW4gV2VzdG1pbnQgd2l0aCB1cGdyYWRlIGZyb20gc2hlbGwgLT4gd2VzdG1pbnRcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nVmlhVmVyc2lvbiA9IHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cmllcy5maW5kKCh7IHJ1bnRpbWVWZXJzaW9uOiB7IHNwZWNOYW1lLCBzcGVjVmVyc2lvbiB9IH0pID0+IHNwZWNOYW1lLmVxKHZlcnNpb24uc3BlY05hbWUpICYmXG4gICAgICAgICAgICAgICAgc3BlY1ZlcnNpb24uZXEodmVyc2lvbi5zcGVjVmVyc2lvbikpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nVmlhVmVyc2lvbikge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nVmlhVmVyc2lvbi5jb3VudGVyKys7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdWaWFWZXJzaW9uLmxhc3RCbG9ja0hhc2ggPSBibG9ja0hhc2g7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVmlhVmVyc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgYXN5bmMgX2dldEJsb2NrUmVnaXN0cnlWaWFIYXNoKGJsb2NrSGFzaCkge1xuICAgICAgICAvLyBlbnN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHJlcXVpcmVkXG4gICAgICAgIGlmICghdGhpcy5fZ2VuZXNpc0hhc2ggfHwgIXRoaXMuX3J1bnRpbWVWZXJzaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBkYXRhIG9uIGFuIHVuaW5pdGlhbGl6ZWQgY2hhaW4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBoYXZlIHRvIGFzc3VtZSB0aGF0IG9uIHRoZSBSUEMgbGF5ZXIgdGhlIGNhbGxzIHVzZWQgaGVyZSBkb2VzIG5vdCBjYWxsIGJhY2sgaW50b1xuICAgICAgICAvLyB0aGUgcmVnaXN0cnkgc3dhcCwgc28gZ2V0SGVhZGVyICYgZ2V0UnVudGltZVZlcnNpb24gc2hvdWxkIG5vdCBiZSBoaXN0b3JpY1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0hlYWRlclBhcnRpYWwnLCB0aGlzLl9nZW5lc2lzSGFzaC5lcShibG9ja0hhc2gpXG4gICAgICAgICAgICA/IHsgbnVtYmVyOiBCTl9aRVJPLCBwYXJlbnRIYXNoOiB0aGlzLl9nZW5lc2lzSGFzaCB9XG4gICAgICAgICAgICA6IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuY2hhaW4uZ2V0SGVhZGVyLnJhdyhibG9ja0hhc2gpKSk7XG4gICAgICAgIGlmIChoZWFkZXIucGFyZW50SGFzaC5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSBoZWFkZXIgYW5kIHBhcmVudCBmcm9tIHN1cHBsaWVkIGhhc2gnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgdGhlIHJ1bnRpbWUgdmVyc2lvbiwgZWl0aGVyIG9uLWNoYWluIG9yIHZpYSBhbiBrbm93biB1cGdyYWRlIGhpc3RvcnlcbiAgICAgICAgY29uc3QgW2ZpcnN0VmVyc2lvbiwgbGFzdFZlcnNpb25dID0gZ2V0VXBncmFkZVZlcnNpb24odGhpcy5fZ2VuZXNpc0hhc2gsIGhlYWRlci5udW1iZXIpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5yZWdpc3RyeS5jcmVhdGVUeXBlKCdSdW50aW1lVmVyc2lvblBhcnRpYWwnLCBXSVRIX1ZFUlNJT05fU0hPUlRDVVQgJiYgKGZpcnN0VmVyc2lvbiAmJiAobGFzdFZlcnNpb24gfHxcbiAgICAgICAgICAgIGZpcnN0VmVyc2lvbi5zcGVjVmVyc2lvbi5lcSh0aGlzLl9ydW50aW1lVmVyc2lvbi5zcGVjVmVyc2lvbikpKVxuICAgICAgICAgICAgPyB7IGFwaXM6IGZpcnN0VmVyc2lvbi5hcGlzLCBzcGVjTmFtZTogdGhpcy5fcnVudGltZVZlcnNpb24uc3BlY05hbWUsIHNwZWNWZXJzaW9uOiBmaXJzdFZlcnNpb24uc3BlY1ZlcnNpb24gfVxuICAgICAgICAgICAgOiBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9ycGNDb3JlLnN0YXRlLmdldFJ1bnRpbWVWZXJzaW9uLnJhdyhoZWFkZXIucGFyZW50SGFzaCkpKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgdmlhIHZlcnNpb25cbiAgICAgICAgdGhpcy5fZ2V0QmxvY2tSZWdpc3RyeVZpYVZlcnNpb24oYmxvY2tIYXNoLCB2ZXJzaW9uKSB8fFxuICAgICAgICAgICAgLy8gcmV0dXJuIG5ldyBvciBpbi1mbGlnaHQgcmVzdWx0XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jYWNoZUJsb2NrUmVnaXN0cnlQcm9ncmVzcyh2ZXJzaW9uLnRvSGV4KCksICgpID0+IHRoaXMuX2NyZWF0ZUJsb2NrUmVnaXN0cnkoYmxvY2tIYXNoLCBoZWFkZXIsIHZlcnNpb24pKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRzIHVwIGEgcmVnaXN0cnkgYmFzZWQgb24gdGhlIGJsb2NrIGhhc2ggZGVmaW5lZFxuICAgICAqL1xuICAgIGFzeW5jIGdldEJsb2NrUmVnaXN0cnkoYmxvY2tIYXNoLCBrbm93blZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgdmlhIGJsb2NrSGFzaFxuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJpZXMuZmluZCgoeyBsYXN0QmxvY2tIYXNoIH0pID0+IGxhc3RCbG9ja0hhc2ggJiYgdThhRXEobGFzdEJsb2NrSGFzaCwgYmxvY2tIYXNoKSkgfHxcbiAgICAgICAgICAgIC8vIHRyeSB0byBmaW5kIHZpYSB2ZXJzaW9uXG4gICAgICAgICAgICB0aGlzLl9nZXRCbG9ja1JlZ2lzdHJ5VmlhVmVyc2lvbihibG9ja0hhc2gsIGtub3duVmVyc2lvbikgfHxcbiAgICAgICAgICAgIC8vIHJldHVybiBuZXcgb3IgaW4tZmxpZ2h0IHJlc3VsdFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2FjaGVCbG9ja1JlZ2lzdHJ5UHJvZ3Jlc3ModThhVG9IZXgoYmxvY2tIYXNoKSwgKCkgPT4gdGhpcy5fZ2V0QmxvY2tSZWdpc3RyeVZpYUhhc2goYmxvY2tIYXNoKSkpO1xuICAgIH1cbiAgICBhc3luYyBfbG9hZE1ldGEoKSB7XG4gICAgICAgIC8vIG9uIHJlLWNvbm5lY3Rpb24gdG8gdGhlIHNhbWUgY2hhaW4sIHdlIGRvbid0IHdhbnQgdG8gcmUtZG8gZXZlcnl0aGluZyBmcm9tIGNoYWluIGFnYWluXG4gICAgICAgIGlmICh0aGlzLl9pc1JlYWR5KSB7XG4gICAgICAgICAgICAvLyBvbiByZS1jb25uZWN0aW9uIG9ubHkgcmUtc3Vic2NyaWJlIHRvIGNoYWluIHVwZGF0ZXMgaWYgd2UgYXJlIG5vdCBhIGNsb25lXG4gICAgICAgICAgICBpZiAoIXRoaXMuX29wdGlvbnMuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlVXBkYXRlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVVcGRhdGVzKCk7XG4gICAgICAgIC8vIG9ubHkgbG9hZCBmcm9tIG9uLWNoYWluIGlmIHdlIGFyZSBub3QgYSBjbG9uZSAoZGVmYXVsdCBwYXRoKSwgYWx0ZXJuYXRpdmVseVxuICAgICAgICAvLyBqdXN0IHVzZSB0aGUgdmFsdWVzIGZyb20gdGhlIHNvdXJjZSBpbnN0YW5jZSBwcm92aWRlZFxuICAgICAgICBbdGhpcy5fZ2VuZXNpc0hhc2gsIHRoaXMuX3J1bnRpbWVNZXRhZGF0YV0gPSB0aGlzLl9vcHRpb25zLnNvdXJjZT8uX2lzUmVhZHlcbiAgICAgICAgICAgID8gYXdhaXQgdGhpcy5fbWV0YUZyb21Tb3VyY2UodGhpcy5fb3B0aW9ucy5zb3VyY2UpXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuX21ldGFGcm9tQ2hhaW4odGhpcy5fb3B0aW9ucy5tZXRhZGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0RnJvbU1ldGEodGhpcy5fcnVudGltZU1ldGFkYXRhKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gICAgYXN5bmMgX21ldGFGcm9tU291cmNlKHNvdXJjZSkge1xuICAgICAgICB0aGlzLl9leHRyaW5zaWNUeXBlID0gc291cmNlLmV4dHJpbnNpY1ZlcnNpb247XG4gICAgICAgIHRoaXMuX3J1bnRpbWVDaGFpbiA9IHNvdXJjZS5ydW50aW1lQ2hhaW47XG4gICAgICAgIHRoaXMuX3J1bnRpbWVWZXJzaW9uID0gc291cmNlLnJ1bnRpbWVWZXJzaW9uO1xuICAgICAgICAvLyBtYW51YWxseSBidWlsZCBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBtZXRob2RzIGluIHRoaXMgUlBDLCB3ZSBhcmVcbiAgICAgICAgLy8gZ29pbmcgdG8gZmlsdGVyIG9uIGl0IHRvIGFsaWduIHRoZSBjbG9uZWQgUlBDIHdpdGhvdXQgbWFraW5nIGEgY2FsbFxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IE9iamVjdC5rZXlzKHNvdXJjZS5ycGMpO1xuICAgICAgICBjb25zdCBycGNzID0gW107XG4gICAgICAgIGZvciAobGV0IHMgPSAwLCBzY291bnQgPSBzZWN0aW9ucy5sZW5ndGg7IHMgPCBzY291bnQ7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW3NdO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5rZXlzKHNvdXJjZS5ycGNbc2VjdGlvbl0pO1xuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDAsIG1jb3VudCA9IG1ldGhvZHMubGVuZ3RoOyBtIDwgbWNvdW50OyBtKyspIHtcbiAgICAgICAgICAgICAgICBycGNzLnB1c2goYCR7c2VjdGlvbn1fJHttZXRob2RzW21dfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpbHRlclJwYyhycGNzLCBnZXRTcGVjUnBjKHRoaXMucmVnaXN0cnksIHNvdXJjZS5ydW50aW1lQ2hhaW4sIHNvdXJjZS5ydW50aW1lVmVyc2lvbi5zcGVjTmFtZSkpO1xuICAgICAgICByZXR1cm4gW3NvdXJjZS5nZW5lc2lzSGFzaCwgc291cmNlLnJ1bnRpbWVNZXRhZGF0YV07XG4gICAgfVxuICAgIC8vIHN1YnNjcmliZSB0byBtZXRhZGF0YSB1cGRhdGVzLCBpbmplY3QgdGhlIHR5cGVzIG9uIGNoYW5nZXNcbiAgICBfc3Vic2NyaWJlVXBkYXRlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fdXBkYXRlU3ViIHx8ICF0aGlzLmhhc1N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3VwZGF0ZVN1YiA9IHRoaXMuX3JwY0NvcmUuc3RhdGUuc3Vic2NyaWJlUnVudGltZVZlcnNpb24oKS5waXBlKHN3aXRjaE1hcCgodmVyc2lvbikgPT4gXG4gICAgICAgIC8vIG9ubHkgcmV0cmlldmUgdGhlIG1ldGFkYXRhIHdoZW4gdGhlIG9uLWNoYWluIHZlcnNpb24gaGFzIGJlZW4gY2hhbmdlZFxuICAgICAgICB0aGlzLl9ydW50aW1lVmVyc2lvbj8uc3BlY1ZlcnNpb24uZXEodmVyc2lvbi5zcGVjVmVyc2lvbilcbiAgICAgICAgICAgID8gb2YoZmFsc2UpXG4gICAgICAgICAgICA6IHRoaXMuX3JwY0NvcmUuc3RhdGUuZ2V0TWV0YWRhdGEoKS5waXBlKG1hcCgobWV0YWRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBsLmxvZyhgUnVudGltZSB2ZXJzaW9uIHVwZGF0ZWQgdG8gc3BlYz0ke3ZlcnNpb24uc3BlY1ZlcnNpb24udG9TdHJpbmcoKX0sIHR4PSR7dmVyc2lvbi50cmFuc2FjdGlvblZlcnNpb24udG9TdHJpbmcoKX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ydW50aW1lTWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ydW50aW1lVmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgdGhpcy5fcngucnVudGltZVZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgZGVmYXVsdCByZWdpc3RyeSB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc1JlZ2lzdHJ5ID0gdGhpcy5fZ2V0RGVmYXVsdFJlZ2lzdHJ5KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVudGltZUNoYWluID0gdGhpcy5fcnVudGltZUNoYWluO1xuICAgICAgICAgICAgICAgIGlmICghcnVudGltZUNoYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbml0aWFsaXppb24gb3JkZXIsIHJ1bnRpbWVDaGFpbiBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNldHVwIHRoZSBkYXRhIGFzIHBlciB0aGUgY3VycmVudCB2ZXJzaW9uc1xuICAgICAgICAgICAgICAgIHRoaXNSZWdpc3RyeS5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXNSZWdpc3RyeS5ydW50aW1lVmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdFJlZ2lzdHJ5KHRoaXMucmVnaXN0cnksIHJ1bnRpbWVDaGFpbiwgdmVyc2lvbiwgbWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdE1ldGFkYXRhKHRoaXNSZWdpc3RyeSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSkpKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgYXN5bmMgX21ldGFGcm9tQ2hhaW4ob3B0TWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgW2dlbmVzaXNIYXNoLCBydW50aW1lVmVyc2lvbiwgY2hhaW4sIGNoYWluUHJvcHMsIHJwY01ldGhvZHMsIGNoYWluTWV0YWRhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20odGhpcy5fcnBjQ29yZS5jaGFpbi5nZXRCbG9ja0hhc2goMCkpLFxuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20odGhpcy5fcnBjQ29yZS5zdGF0ZS5nZXRSdW50aW1lVmVyc2lvbigpKSxcbiAgICAgICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuc3lzdGVtLmNoYWluKCkpLFxuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20odGhpcy5fcnBjQ29yZS5zeXN0ZW0ucHJvcGVydGllcygpKSxcbiAgICAgICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUucnBjLm1ldGhvZHMoKSksXG4gICAgICAgICAgICBvcHRNZXRhZGF0YVxuICAgICAgICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgICAgOiBmaXJzdFZhbHVlRnJvbSh0aGlzLl9ycGNDb3JlLnN0YXRlLmdldE1ldGFkYXRhKCkpXG4gICAgICAgIF0pO1xuICAgICAgICAvLyBzZXQgb3VyIGNoYWluIHZlcnNpb24gJiBnZW5lc2lzSGFzaCBhcyByZXR1cm5lZFxuICAgICAgICB0aGlzLl9ydW50aW1lQ2hhaW4gPSBjaGFpbjtcbiAgICAgICAgdGhpcy5fcnVudGltZVZlcnNpb24gPSBydW50aW1lVmVyc2lvbjtcbiAgICAgICAgdGhpcy5fcngucnVudGltZVZlcnNpb24gPSBydW50aW1lVmVyc2lvbjtcbiAgICAgICAgLy8gcmV0cmlldmUgbWV0YWRhdGEsIGVpdGhlciBmcm9tIGNoYWluICBvciBhcyBwYXNzLWluIHZpYSBvcHRpb25zXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhS2V5ID0gYCR7Z2VuZXNpc0hhc2gudG9IZXgoKSB8fCAnMHgnfS0ke3J1bnRpbWVWZXJzaW9uLnNwZWNWZXJzaW9uLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBjaGFpbk1ldGFkYXRhIHx8IChvcHRNZXRhZGF0YT8uW21ldGFkYXRhS2V5XVxuICAgICAgICAgICAgPyBuZXcgTWV0YWRhdGEodGhpcy5yZWdpc3RyeSwgb3B0TWV0YWRhdGFbbWV0YWRhdGFLZXldKVxuICAgICAgICAgICAgOiBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9ycGNDb3JlLnN0YXRlLmdldE1ldGFkYXRhKCkpKTtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZXMgdGhlIHJlZ2lzdHJ5ICYgUlBDXG4gICAgICAgIHRoaXMuX2luaXRSZWdpc3RyeSh0aGlzLnJlZ2lzdHJ5LCBjaGFpbiwgcnVudGltZVZlcnNpb24sIG1ldGFkYXRhLCBjaGFpblByb3BzKTtcbiAgICAgICAgdGhpcy5fZmlsdGVyUnBjKHJwY01ldGhvZHMubWV0aG9kcy5tYXAodGV4dFRvU3RyaW5nKSwgZ2V0U3BlY1JwYyh0aGlzLnJlZ2lzdHJ5LCBjaGFpbiwgcnVudGltZVZlcnNpb24uc3BlY05hbWUpKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVXBkYXRlcygpO1xuICAgICAgICAvLyBzZXR1cCB0aGUgaW5pdGlhbCByZWdpc3RyeSwgd2hlbiB3ZSBoYXZlIG5vbmVcbiAgICAgICAgaWYgKCF0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJpZXMucHVzaCh7IGNvdW50ZXI6IDAsIGlzRGVmYXVsdDogdHJ1ZSwgbWV0YWRhdGEsIHJlZ2lzdHJ5OiB0aGlzLnJlZ2lzdHJ5LCBydW50aW1lVmVyc2lvbiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgdW5pcXVlIHR5cGVzICYgdmFsaWRhdGVcbiAgICAgICAgbWV0YWRhdGEuZ2V0VW5pcVR5cGVzKHRoaXMuX29wdGlvbnMudGhyb3dPblVua25vd24gfHwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gW2dlbmVzaXNIYXNoLCBtZXRhZGF0YV07XG4gICAgfVxuICAgIF9pbml0RnJvbU1ldGEobWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgcnVudGltZVZlcnNpb24gPSB0aGlzLl9ydW50aW1lVmVyc2lvbjtcbiAgICAgICAgaWYgKCFydW50aW1lVmVyc2lvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluaXRpYWxpemlvbiBvcmRlciwgcnVudGltZVZlcnNpb24gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V4dHJpbnNpY1R5cGUgPSBtZXRhZGF0YS5hc0xhdGVzdC5leHRyaW5zaWMudmVyc2lvbi50b051bWJlcigpO1xuICAgICAgICB0aGlzLl9yeC5leHRyaW5zaWNUeXBlID0gdGhpcy5fZXh0cmluc2ljVHlwZTtcbiAgICAgICAgdGhpcy5fcnguZ2VuZXNpc0hhc2ggPSB0aGlzLl9nZW5lc2lzSGFzaDtcbiAgICAgICAgdGhpcy5fcngucnVudGltZVZlcnNpb24gPSBydW50aW1lVmVyc2lvbjtcbiAgICAgICAgLy8gaW5qZWN0IG1ldGFkYXRhIGFuZCBhZGp1c3QgdGhlIHR5cGVzIGFzIGRldGVjdGVkXG4gICAgICAgIHRoaXMuX2luamVjdE1ldGFkYXRhKHRoaXMuX2dldERlZmF1bHRSZWdpc3RyeSgpLCB0cnVlKTtcbiAgICAgICAgLy8gZGVyaXZlIGlzIGxhc3QsIHNpbmNlIGl0IHVzZXMgdGhlIGRlY29yYXRlZCByeFxuICAgICAgICB0aGlzLl9yeC5kZXJpdmUgPSB0aGlzLl9kZWNvcmF0ZURlcml2ZVJ4KHRoaXMuX3J4RGVjb3JhdGVNZXRob2QpO1xuICAgICAgICB0aGlzLl9kZXJpdmUgPSB0aGlzLl9kZWNvcmF0ZURlcml2ZSh0aGlzLl9kZWNvcmF0ZU1ldGhvZCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBfc3Vic2NyaWJlSGVhbHRoKCkge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUhlYWx0aCgpO1xuICAgICAgICAvLyBPbmx5IGVuYWJsZSB0aGUgaGVhbHRoIGtlZXBhbGl2ZSBvbiBXUywgbm90IG5lZWRlZCBvbiBIVFRQXG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhbHRoVGltZXIgPSB0aGlzLmhhc1N1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgID8gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuX3JwY0NvcmUuc3lzdGVtLmhlYWx0aC5yYXcoKSkuY2F0Y2gobm9vcCk7XG4gICAgICAgICAgICB9LCBLRUVQQUxJVkVfSU5URVJWQUwpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIF91bnN1YnNjcmliZUhlYWx0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9faGVhbHRoVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fX2ludGVybmFsX19oZWFsdGhUaW1lcik7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYWx0aFRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfdW5zdWJzY3JpYmVVcGRhdGVzKCkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX191cGRhdGVTdWIpIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fdXBkYXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3VwZGF0ZVN1YiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3Vuc3Vic2NyaWJlKCkge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUhlYWx0aCgpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZVVwZGF0ZXMoKTtcbiAgICB9XG4gICAgYXN5bmMgX19pbnRlcm5hbF9fb25Qcm92aWRlckNvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGVkJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjcnlwdG9SZWFkeSA9IHRoaXMuX29wdGlvbnMuaW5pdFdhc20gPT09IGZhbHNlXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiBhd2FpdCBjcnlwdG9XYWl0UmVhZHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc01ldGEgPSBhd2FpdCB0aGlzLl9sb2FkTWV0YSgpO1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlSGVhbHRoKCk7XG4gICAgICAgICAgICBpZiAoaGFzTWV0YSAmJiAhdGhpcy5faXNSZWFkeSAmJiBjcnlwdG9SZWFkeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZHknLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgRkFUQUw6IFVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBBUEk6ICR7X2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICBsLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX19pbnRlcm5hbF9fb25Qcm92aWRlckRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmVtaXQoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgIH1cbiAgICBfX2ludGVybmFsX19vblByb3ZpZGVyRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBmaW5kQ2FsbChyZWdpc3RyeSwgY2FsbEluZGV4KSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmZpbmRNZXRhQ2FsbCh1OGFUb1U4YShjYWxsSW5kZXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRXJyb3IocmVnaXN0cnksIGVycm9ySW5kZXgpIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuZmluZE1ldGFFcnJvcih1OGFUb1U4YShlcnJvckluZGV4KSk7XG59XG4iLCJpbXBvcnQgeyBpc1N0cmluZywgb2JqZWN0U3ByZWFkLCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBHZXR0ZXJzIH0gZnJvbSAnLi9HZXR0ZXJzLmpzJztcbmV4cG9ydCBjbGFzcyBBcGlCYXNlIGV4dGVuZHMgR2V0dGVycyB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0IHRvIGNyZWF0ZSBBUEkgaW5zdGFuY2Ugb3IgYSBQcm92aWRlciBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogaW1wb3J0IEFwaSBmcm9tICdAcG9sa2Fkb3QvYXBpL3Byb21pc2UnO1xuICAgICAqXG4gICAgICogY29uc3QgYXBpID0gbmV3IEFwaSgpLmlzUmVhZHkoKTtcbiAgICAgKlxuICAgICAqIGFwaS5ycGMuc3Vic2NyaWJlTmV3SGVhZHMoKGhlYWRlcikgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coYG5ldyBibG9jayAjJHtoZWFkZXIubnVtYmVyLnRvTnVtYmVyKCl9YCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCkge1xuICAgICAgICBzdXBlcihvcHRpb25zLCB0eXBlLCBkZWNvcmF0ZU1ldGhvZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25uZWN0IGZyb20gdGhlIHVuZGVybHlpbmcgcHJvdmlkZXIsIGhhbHRpbmcgYWxsIG5ldHdvcmsgdHJhZmZpY1xuICAgICAqL1xuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ycGNDb3JlLmNvbm5lY3QoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERpc2Nvbm5lY3QgZnJvbSB0aGUgdW5kZXJseWluZyBwcm92aWRlciwgaGFsdGluZyBhbGwgbmV0d29yayB0cmFmZmljXG4gICAgICovXG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JwY0NvcmUuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0IGFuIGV4dGVybmFsIHNpZ25lciB3aGljaCB3aWxsIGJlIHVzZWQgdG8gc2lnbiBleHRyaW5zaWMgd2hlbiBhY2NvdW50IHBhc3NlZCBpbiBpcyBub3QgS2V5cmluZ1BhaXJcbiAgICAgKi9cbiAgICBzZXRTaWduZXIoc2lnbmVyKSB7XG4gICAgICAgIHRoaXMuX3J4LnNpZ25lciA9IHNpZ25lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ25zIGEgcmF3IHNpZ25lciBwYXlsb2FkLCBzdHJpbmcgb3IgVWludDhBcnJheVxuICAgICAqL1xuICAgIGFzeW5jIHNpZ24oYWRkcmVzcywgZGF0YSwgeyBzaWduZXIgfSA9IHt9KSB7XG4gICAgICAgIGlmIChpc1N0cmluZyhhZGRyZXNzKSkge1xuICAgICAgICAgICAgY29uc3QgX3NpZ25lciA9IHNpZ25lciB8fCB0aGlzLl9yeC5zaWduZXI7XG4gICAgICAgICAgICBpZiAoIV9zaWduZXI/LnNpZ25SYXcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNpZ25lciBleGlzdHMgd2l0aCBhIHNpZ25SYXcgaW50ZXJmYWNlLiBZb3UgcG9zc2libHkgbmVlZCB0byBwYXNzIHRocm91Z2ggYW4gZXhwbGljaXQga2V5cGFpciBmb3IgdGhlIG9yaWdpbiBzbyBpdCBjYW4gYmUgdXNlZCBmb3Igc2lnbmluZy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoYXdhaXQgX3NpZ25lci5zaWduUmF3KG9iamVjdFNwcmVhZCh7IHR5cGU6ICdieXRlcycgfSwgZGF0YSwgeyBhZGRyZXNzIH0pKSkuc2lnbmF0dXJlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1OGFUb0hleChhZGRyZXNzLnNpZ24odThhVG9VOGEoZGF0YS5kYXRhKSkpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogJ0Bwb2xrYWRvdC9hcGknLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMS4yLjEnIH07XG4iLCJpbXBvcnQgeyBub29wLCBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBBcGlCYXNlIH0gZnJvbSAnLi4vYmFzZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBDb21iaW5hdG9yIH0gZnJvbSAnLi9Db21iaW5hdG9yLmpzJztcbmltcG9ydCB7IHByb21pc2VUcmFja2VyLCB0b1Byb21pc2VNZXRob2QgfSBmcm9tICcuL2RlY29yYXRlTWV0aG9kLmpzJztcbi8qKlxuICogIyBAcG9sa2Fkb3QvYXBpL3Byb21pc2VcbiAqXG4gKiAjIyBPdmVydmlld1xuICpcbiAqIEBuYW1lIEFwaVByb21pc2VcbiAqIEBkZXNjcmlwdGlvblxuICogQXBpUHJvbWlzZSBpcyBhIHN0YW5kYXJkIEphdmFTY3JpcHQgd3JhcHBlciBhcm91bmQgdGhlIFJQQyBhbmQgaW50ZXJmYWNlcyBvbiB0aGUgUG9sa2Fkb3QgbmV0d29yay4gQXMgYSBmdWxsIFByb21pc2UtYmFzZWQsIGFsbCBpbnRlcmZhY2UgY2FsbHMgcmV0dXJuIFByb21pc2VzLCBpbmNsdWRpbmcgdGhlIHN0YXRpYyBgLmNyZWF0ZSguLi4pYC4gU3Vic2NyaXB0aW9uIGNhbGxzIHV0aWxpc2UgYCh2YWx1ZSkgPT4ge31gIGNhbGxiYWNrcyB0byBwYXNzIHRocm91Z2ggdGhlIGxhdGVzdCB2YWx1ZXMuXG4gKlxuICogVGhlIEFQSSBpcyB3ZWxsIHN1aXRlZCB0byByZWFsLXRpbWUgYXBwbGljYXRpb25zIHdoZXJlIGVpdGhlciB0aGUgc2luZ2xlLXNob3Qgc3RhdGUgaXMgbmVlZGVkIG9yIHVzZSBpcyB0byBiZSBtYWRlIG9mIHRoZSBzdWJzY3JpcHRpb24tYmFzZWQgZmVhdHVyZXMgb2YgUG9sa2Fkb3QgKGFuZCBTdWJzdHJhdGUpIGNsaWVudHMuXG4gKlxuICogQHNlZSBbW0FwaVJ4XV1cbiAqXG4gKiAjIyBVc2FnZVxuICpcbiAqIE1ha2luZyBycGMgY2FsbHMgLVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBBcGlQcm9taXNlIGZyb20gJ0Bwb2xrYWRvdC9hcGkvcHJvbWlzZSc7XG4gKlxuICogLy8gaW5pdGlhbGlzZSB2aWEgc3RhdGljIGNyZWF0ZVxuICogY29uc3QgYXBpID0gYXdhaXQgQXBpUHJvbWlzZS5jcmVhdGUoKTtcbiAqXG4gKiAvLyBtYWtlIGEgc3Vic2NyaXB0aW9uIHRvIHRoZSBuZXR3b3JrIGhlYWRcbiAqIGFwaS5ycGMuY2hhaW4uc3Vic2NyaWJlTmV3SGVhZHMoKGhlYWRlcikgPT4ge1xuICogICBjb25zb2xlLmxvZyhgQ2hhaW4gaXMgYXQgIyR7aGVhZGVyLm51bWJlcn1gKTtcbiAqIH0pO1xuICogYGBgXG4gKiA8QlI+XG4gKlxuICogU3Vic2NyaWJpbmcgdG8gY2hhaW4gc3RhdGUgLVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IEFwaVByb21pc2UsIFdzUHJvdmlkZXIgfSBmcm9tICdAcG9sa2Fkb3QvYXBpJztcbiAqXG4gKiAvLyBpbml0aWFsaXNlIGEgcHJvdmlkZXIgd2l0aCBhIHNwZWNpZmljIGVuZHBvaW50XG4gKiBjb25zdCBwcm92aWRlciA9IG5ldyBXc1Byb3ZpZGVyKCd3c3M6Ly9leGFtcGxlLmNvbTo5OTQ0JylcbiAqXG4gKiAvLyBpbml0aWFsaXNlIHZpYSBpc1JlYWR5ICYgbmV3IHdpdGggc3BlY2lmaWMgcHJvdmlkZXJcbiAqIGNvbnN0IGFwaSA9IGF3YWl0IG5ldyBBcGlQcm9taXNlKHsgcHJvdmlkZXIgfSkuaXNSZWFkeTtcbiAqXG4gKiAvLyByZXRyaWV2ZSB0aGUgYmxvY2sgdGFyZ2V0IHRpbWVcbiAqIGNvbnN0IGJsb2NrUGVyaW9kID0gYXdhaXQgYXBpLnF1ZXJ5LnRpbWVzdGFtcC5ibG9ja1BlcmlvZCgpLnRvTnVtYmVyKCk7XG4gKiBsZXQgbGFzdCA9IDA7XG4gKlxuICogLy8gc3Vic2NyaWJlIHRvIHRoZSBjdXJyZW50IGJsb2NrIHRpbWVzdGFtcCwgdXBkYXRlcyBhdXRvbWF0aWNhbGx5IChjYWxsYmFjayBwcm92aWRlZClcbiAqIGFwaS5xdWVyeS50aW1lc3RhbXAubm93KCh0aW1lc3RhbXApID0+IHtcbiAqICAgY29uc3QgZWxhcHNlZCA9IGxhc3RcbiAqICAgICA/IGAsICR7dGltZXN0YW1wLnRvTnVtYmVyKCkgLSBsYXN0fXMgc2luY2UgbGFzdGBcbiAqICAgICA6ICcnO1xuICpcbiAqICAgbGFzdCA9IHRpbWVzdGFtcC50b051bWJlcigpO1xuICogICBjb25zb2xlLmxvZyhgdGltZXN0YW1wICR7dGltZXN0YW1wfSR7ZWxhcHNlZH0gKCR7YmxvY2tQZXJpb2R9cyB0YXJnZXQpYCk7XG4gKiB9KTtcbiAqIGBgYFxuICogPEJSPlxuICpcbiAqIFN1Ym1pdHRpbmcgYSB0cmFuc2FjdGlvbiAtXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IEFwaVByb21pc2UgZnJvbSAnQHBvbGthZG90L2FwaS9wcm9taXNlJztcbiAqXG4gKiBBcGlQcm9taXNlLmNyZWF0ZSgpLnRoZW4oKGFwaSkgPT4ge1xuICogICBjb25zdCBbbm9uY2VdID0gYXdhaXQgYXBpLnF1ZXJ5LnN5c3RlbS5hY2NvdW50KGtleXJpbmcuYWxpY2UuYWRkcmVzcyk7XG4gKlxuICogICBhcGkudHguYmFsYW5jZXNcbiAqICAgICAvLyBjcmVhdGUgdHJhbnNmZXJcbiAqICAgICB0cmFuc2ZlcihrZXlyaW5nLmJvYi5hZGRyZXNzLCAxMjM0NSlcbiAqICAgICAvLyBzaWduIHRoZSB0cmFuc2NhdGlvblxuICogICAgIC5zaWduKGtleXJpbmcuYWxpY2UsIHsgbm9uY2UgfSlcbiAqICAgICAvLyBzZW5kIHRoZSB0cmFuc2FjdGlvbiAob3B0aW9uYWwgc3RhdHVzIGNhbGxiYWNrKVxuICogICAgIC5zZW5kKChzdGF0dXMpID0+IHtcbiAqICAgICAgIGNvbnNvbGUubG9nKGBjdXJyZW50IHN0YXR1cyAke3N0YXR1cy50eXBlfWApO1xuICogICAgIH0pXG4gKiAgICAgLy8gcmV0cmlldmUgdGhlIHN1Ym1pdHRlZCBleHRyaW5zaWMgaGFzaFxuICogICAgIC50aGVuKChoYXNoKSA9PiB7XG4gKiAgICAgICBjb25zb2xlLmxvZyhgc3VibWl0dGVkIHdpdGggaGFzaCAke2hhc2h9YCk7XG4gKiAgICAgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXBpUHJvbWlzZSBleHRlbmRzIEFwaUJhc2Uge1xuICAgIF9faW50ZXJuYWxfX2lzUmVhZHlQcm9taXNlO1xuICAgIF9faW50ZXJuYWxfX2lzUmVhZHlPckVycm9yUHJvbWlzZTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgQXBpUHJvbWlzZSBjbGFzc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gY3JlYXRlIGFuIGluc3RhbmNlLiBUaGlzIGNhbiBiZSBlaXRoZXIgW1tBcGlPcHRpb25zXV0gb3JcbiAgICAgKiBhbiBbW1dzUHJvdmlkZXJdXS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxCUj5cbiAgICAgKlxuICAgICAqIGBgYGphdmFzY3JpcHRcbiAgICAgKiBpbXBvcnQgQXBpIGZyb20gJ0Bwb2xrYWRvdC9hcGkvcHJvbWlzZSc7XG4gICAgICpcbiAgICAgKiBuZXcgQXBpKCkuaXNSZWFkeS50aGVuKChhcGkpID0+IHtcbiAgICAgKiAgIGFwaS5ycGMuc3Vic2NyaWJlTmV3SGVhZHMoKGhlYWRlcikgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZyhgbmV3IGJsb2NrICMke2hlYWRlci5udW1iZXIudG9OdW1iZXIoKX1gKTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgJ3Byb21pc2UnLCB0b1Byb21pc2VNZXRob2QpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzUmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHN1cGVyLm9uY2UoJ3JlYWR5JywgKCkgPT4gcmVzb2x2ZSh0aGlzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzUmVhZHlPckVycm9yUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrZXIgPSBwcm9taXNlVHJhY2tlcihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgc3VwZXIub25jZSgncmVhZHknLCAoKSA9PiB0cmFja2VyLnJlc29sdmUodGhpcykpO1xuICAgICAgICAgICAgc3VwZXIub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHRyYWNrZXIucmVqZWN0KGVycm9yKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBBcGlQcm9taXNlIGluc3RhbmNlIHVzaW5nIHRoZSBzdXBwbGllZCBwcm92aWRlci4gUmV0dXJucyBhbiBQcm9taXNlIGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBBcGkgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyB0aGF0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3MgY29udHJ1Y3Rvci4gQ2FuIGJlIGVpdGhlciBbW0FwaU9wdGlvbnNdXSBvciBhXG4gICAgICogcHJvdmlkZXIgKHNlZSB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzKVxuICAgICAqIEBleGFtcGxlXG4gICAgICogPEJSPlxuICAgICAqXG4gICAgICogYGBgamF2YXNjcmlwdFxuICAgICAqIGltcG9ydCBBcGkgZnJvbSAnQHBvbGthZG90L2FwaS9wcm9taXNlJztcbiAgICAgKlxuICAgICAqIEFwaS5jcmVhdGUoKS50aGVuKGFzeW5jIChhcGkpID0+IHtcbiAgICAgKiAgIGNvbnN0IHRpbWVzdGFtcCA9IGF3YWl0IGFwaS5xdWVyeS50aW1lc3RhbXAubm93KCk7XG4gICAgICpcbiAgICAgKiAgIGNvbnNvbGUubG9nKGBsYXN0ZXN0IGJsb2NrIHRpbWVzdGFtcCAke3RpbWVzdGFtcH1gKTtcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQXBpUHJvbWlzZShvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50aHJvd09uQ29ubmVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmlzUmVhZHlPckVycm9yO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN3YWxsb3cgYW55IHJlamVjdGlvbnMgb24gaXNSZWFkeU9yRXJyb3JcbiAgICAgICAgLy8gKGluIE5vZGUgMTUueCB0aGlzIGNyZWF0ZXMgaXNzdWVzLCB3aGVuIG5vdCBiZWluZyBsb29rZWQgYXQpXG4gICAgICAgIGluc3RhbmNlLmlzUmVhZHlPckVycm9yLmNhdGNoKG5vb3ApO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UuaXNSZWFkeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFByb21pc2UgdGhhdCByZXNvbHZlcyB0aGUgZmlyc3QgdGltZSB3ZSBhcmUgY29ubmVjdGVkIGFuZCBsb2FkZWRcbiAgICAgKi9cbiAgICBnZXQgaXNSZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNSZWFkeVByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgaWYgd2UgY2FuIGNvbm5lY3QsIG9yIHJlamVjdCBpZiB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAqL1xuICAgIGdldCBpc1JlYWR5T3JFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNSZWFkeU9yRXJyb3JQcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgQXBpUHJvbWlzZSBpbnN0YW5jZSAobmV3IHVuZGVybHlpbmcgcHJvdmlkZXIgY29ubmVjdGlvbilcbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcGlQcm9taXNlKG9iamVjdFNwcmVhZCh7fSwgdGhpcy5fb3B0aW9ucywgeyBzb3VyY2U6IHRoaXMgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGNvbWJpbmF0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBjb21iaW5lIHRoZSBsYXRlc3QgcmVzdWx0cyBmcm9tIG11bHRpcGxlIHN1YnNjcmlwdGlvbnNcbiAgICAgKiBAcGFyYW0gZm5zIEFuIGFycmF5IG9mIGZ1bmN0aW9uIHRvIGNvbWJpbmUsIGVhY2ggaW4gdGhlIGZvcm0gb2YgYChjYjogKHZhbHVlOiB2b2lkKSkgPT4gdm9pZGBcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBjYWxsYmFjayB0aGF0IHdpbGwgcmV0dXJuIGFuIEFycmF5IG9mIGFsbCB0aGUgdmFsdWVzIHRoaXMgY29tYmluYXRvciBoYXMgYmVlbiBhcHBsaWVkIHRvXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8QlI+XG4gICAgICpcbiAgICAgKiBgYGBqYXZhc2NyaXB0XG4gICAgICogY29uc3QgYWRkcmVzcyA9ICc1RFRlc3RVUHRzM2tqZVhTVE15ZXJIaWhuMXV3TWZMajh2VThzcUY3cVlyRmFjVDcnO1xuICAgICAqXG4gICAgICogLy8gY29tYmluZXMgdmFsdWVzIGZyb20gYmFsYW5jZSAmIG5vbmNlIGFzIGl0IHVwZGF0ZXNcbiAgICAgKiBhcGkuY29tYmluZUxhdGVzdChbXG4gICAgICogICBhcGkucnBjLmNoYWluLnN1YnNjcmliZU5ld0hlYWRzLFxuICAgICAqICAgKGNiKSA9PiBhcGkucXVlcnkuc3lzdGVtLmFjY291bnQoYWRkcmVzcywgY2IpXG4gICAgICogXSwgKFtoZWFkLCBbYmFsYW5jZSwgbm9uY2VdXSkgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coYCMke2hlYWQubnVtYmVyfTogWW91IGhhdmUgJHtiYWxhbmNlLmZyZWV9IHVuaXRzLCB3aXRoICR7bm9uY2V9IHRyYW5zYWN0aW9ucyBzZW50YCk7XG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gICAgYXN5bmMgY29tYmluZUxhdGVzdChmbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihmbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbWJpbmF0b3IudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBub29wIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZXhwb3J0IGNsYXNzIENvbWJpbmF0b3Ige1xuICAgIF9faW50ZXJuYWxfX2FsbEhhc0ZpcmVkID0gZmFsc2U7XG4gICAgX19pbnRlcm5hbF9fY2FsbGJhY2s7XG4gICAgX19pbnRlcm5hbF9fZmlyZWQgPSBbXTtcbiAgICBfX2ludGVybmFsX19mbnMgPSBbXTtcbiAgICBfX2ludGVybmFsX19pc0FjdGl2ZSA9IHRydWU7XG4gICAgX19pbnRlcm5hbF9fcmVzdWx0cyA9IFtdO1xuICAgIF9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICBjb25zdHJ1Y3RvcihmbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcywgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdWJzY3JpcHRpb25zID0gZm5zLm1hcChhc3luYyAoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbZm4sIC4uLmFyZ3NdID0gQXJyYXkuaXNBcnJheShpbnB1dClcbiAgICAgICAgICAgICAgICA/IGlucHV0XG4gICAgICAgICAgICAgICAgOiBbaW5wdXRdO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19maXJlZC5wdXNoKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZm5zLnB1c2goZm4pO1xuICAgICAgICAgICAgLy8gTm90IHF1aXRlIDEwMCUgaG93IHRvIGhhdmUgYSB2YXJpYWJsZSBudW1iZXIgYXQgdGhlIGZyb250IGhlcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVybixAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gICAgICAgICAgICByZXR1cm4gZm4oLi4uYXJncywgdGhpcy5fY3JlYXRlQ2FsbGJhY2soaW5kZXgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hbGxIYXNGaXJlZCgpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19hbGxIYXNGaXJlZCB8fD0gdGhpcy5fX2ludGVybmFsX19maXJlZC5maWx0ZXIoKGhhc0ZpcmVkKSA9PiAhaGFzRmlyZWQpLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYWxsSGFzRmlyZWQ7XG4gICAgfVxuICAgIF9jcmVhdGVDYWxsYmFjayhpbmRleCkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2ZpcmVkW2luZGV4XSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3Jlc3VsdHNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyVXBkYXRlKCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIF90cmlnZ2VyVXBkYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX19pbnRlcm5hbF9faXNBY3RpdmUgfHwgIWlzRnVuY3Rpb24odGhpcy5fX2ludGVybmFsX19jYWxsYmFjaykgfHwgIXRoaXMuX2FsbEhhc0ZpcmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgUHJvbWlzZVxuICAgICAgICAgICAgICAgIC5yZXNvbHZlKHRoaXMuX19pbnRlcm5hbF9fY2FsbGJhY2sodGhpcy5fX2ludGVybmFsX19yZXN1bHRzKSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gobm9vcCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gc3dhbGxvdywgd2UgZG9uJ3Qgd2FudCB0aGUgaGFuZGxlciB0byB0cmlwIHVzIHVwXG4gICAgICAgIH1cbiAgICB9XG4gICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX19pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgICAgLmFsbCh0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMubWFwKGFzeW5jIChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBhd2FpdCBzdWJzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odW5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgLy8gaWdub3JlLCBhbHJlYWR5IGlnbm9yZWQgYWJvdmUsIHNob3VsZCBuZXZlciB0aHJvd1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjYXRjaEVycm9yLCBFTVBUWSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBuZXh0VGljayB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlVHJhY2tlcihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgaXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICByZWplY3Q6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIGlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9LFxuICAgICAgICByZXNvbHZlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICBpc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gZXh0cmFjdEFyZ3MoYXJncywgbmVlZHNDYWxsYmFjaykge1xuICAgIGNvbnN0IGFjdHVhbEFyZ3MgPSBhcmdzLnNsaWNlKCk7XG4gICAgLy8gSWYgdGhlIGxhc3QgYXJnIGlzIGEgZnVuY3Rpb24sIHdlIHBvcCBpdCwgcHV0IGl0IGludG8gY2FsbGJhY2suXG4gICAgLy8gYWN0dWFsQXJncyB3aWxsIHRoZW4gaG9sZCB0aGUgYWN0dWFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gYG1ldGhvZGBcbiAgICBjb25zdCBjYWxsYmFjayA9IChhcmdzLmxlbmd0aCAmJiBpc0Z1bmN0aW9uKGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpXG4gICAgICAgID8gYWN0dWFsQXJncy5wb3AoKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAvLyBXaGVuIHdlIG5lZWQgYSBzdWJzY3JpcHRpb24sIGVuc3VyZSB0aGF0IGEgdmFsaWQgY2FsbGJhY2sgaXMgYWN0dWFsbHkgcGFzc2VkXG4gICAgaWYgKG5lZWRzQ2FsbGJhY2sgJiYgIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYSBjYWxsYmFjayB0byBiZSBwYXNzZWQgd2l0aCBzdWJzY3JpcHRpb25zJyk7XG4gICAgfVxuICAgIHJldHVybiBbYWN0dWFsQXJncywgY2FsbGJhY2tdO1xufVxuZnVuY3Rpb24gZGVjb3JhdGVDYWxsKG1ldGhvZCwgYXJncykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIHNpbmdsZSByZXN1bHQgdHJhY2tlciAtIGVpdGhlciByZWplY3Qgd2l0aCBFcnJvciBvciByZXNvbHZlIHdpdGggQ29kZWMgcmVzdWx0XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSBwcm9taXNlVHJhY2tlcihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAvLyBlbmNvZGluZyBlcnJvcnMgcmVqZWN0IGltbWVkaWF0ZWx5LCBhbnkgcmVzdWx0IHVuc3Vic2NyaWJlcyBhbmQgcmVzb2x2ZXNcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbWV0aG9kKC4uLmFyZ3MpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnJvcikgPT4gdHJhY2tlci5yZWplY3QoZXJyb3IpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdHJhY2tlci5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICBuZXh0VGljaygoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGVjb3JhdGVTdWJzY3JpYmUobWV0aG9kLCBhcmdzLCByZXN1bHRDYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIGVpdGhlciByZWplY3Qgd2l0aCBlcnJvciBvciByZXNvbHZlIHdpdGggdW5zdWJzY3JpYmUgY2FsbGJhY2tcbiAgICAgICAgY29uc3QgdHJhY2tlciA9IHByb21pc2VUcmFja2VyKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIC8vIGVycm9ycyByZWplY3QgaW1tZWRpYXRlbHksIHRoZSBmaXJzdCByZXN1bHQgcmVzb2x2ZXMgd2l0aCBhbiB1bnN1YnNjcmliZSBwcm9taXNlLCBhbGwgcmVzdWx0cyB2aWEgY2FsbGJhY2tcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbWV0aG9kKC4uLmFyZ3MpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnJvcikgPT4gdHJhY2tlci5yZWplY3QoZXJyb3IpKSwgdGFwKCgpID0+IHRyYWNrZXIucmVzb2x2ZSgoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAvLyBxdWV1ZSByZXN1bHQgKGJhY2sgb2YgcXVldWUgdG8gY2xlYXIgY3VycmVudClcbiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHJlc3VsdENiKHJlc3VsdCkpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRlIG1ldGhvZCBmb3IgQXBpUHJvbWlzZSwgd2hlcmUgdGhlIHJlc3VsdHMgYXJlIGNvbnZlcnRlZCB0byB0aGUgUHJvbWlzZSBlcXVpdmFsZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Byb21pc2VNZXRob2QobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgY29uc3QgbmVlZHNDYWxsYmFjayA9ICEhKG9wdGlvbnM/Lm1ldGhvZE5hbWUgJiYgb3B0aW9ucy5tZXRob2ROYW1lLmluY2x1ZGVzKCdzdWJzY3JpYmUnKSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IFthY3R1YWxBcmdzLCByZXN1bHRDYl0gPSBleHRyYWN0QXJncyhhcmdzLCBuZWVkc0NhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdENiXG4gICAgICAgICAgICA/IGRlY29yYXRlU3Vic2NyaWJlKG1ldGhvZCwgYWN0dWFsQXJncywgcmVzdWx0Q2IpXG4gICAgICAgICAgICA6IGRlY29yYXRlQ2FsbChvcHRpb25zPy5vdmVycmlkZU5vU3ViIHx8IG1ldGhvZCwgYWN0dWFsQXJncyk7XG4gICAgfTtcbn1cbiIsImNvbnN0IHJlY29yZElkZW50aXR5ID0gKHJlY29yZCkgPT4gcmVjb3JkO1xuZnVuY3Rpb24gZmlsdGVyQW5kQXBwbHkoZXZlbnRzLCBzZWN0aW9uLCBtZXRob2RzLCBvbkZvdW5kKSB7XG4gICAgcmV0dXJuIGV2ZW50c1xuICAgICAgICAuZmlsdGVyKCh7IGV2ZW50IH0pID0+IHNlY3Rpb24gPT09IGV2ZW50LnNlY3Rpb24gJiZcbiAgICAgICAgbWV0aG9kcy5pbmNsdWRlcyhldmVudC5tZXRob2QpKVxuICAgICAgICAubWFwKChyZWNvcmQpID0+IG9uRm91bmQocmVjb3JkKSk7XG59XG5mdW5jdGlvbiBnZXREaXNwYXRjaEVycm9yKHsgZXZlbnQ6IHsgZGF0YTogW2Rpc3BhdGNoRXJyb3JdIH0gfSkge1xuICAgIHJldHVybiBkaXNwYXRjaEVycm9yO1xufVxuZnVuY3Rpb24gZ2V0RGlzcGF0Y2hJbmZvKHsgZXZlbnQ6IHsgZGF0YSwgbWV0aG9kIH0gfSkge1xuICAgIHJldHVybiBtZXRob2QgPT09ICdFeHRyaW5zaWNTdWNjZXNzJ1xuICAgICAgICA/IGRhdGFbMF1cbiAgICAgICAgOiBkYXRhWzFdO1xufVxuZnVuY3Rpb24gZXh0cmFjdEVycm9yKGV2ZW50cyA9IFtdKSB7XG4gICAgcmV0dXJuIGZpbHRlckFuZEFwcGx5KGV2ZW50cywgJ3N5c3RlbScsIFsnRXh0cmluc2ljRmFpbGVkJ10sIGdldERpc3BhdGNoRXJyb3IpWzBdO1xufVxuZnVuY3Rpb24gZXh0cmFjdEluZm8oZXZlbnRzID0gW10pIHtcbiAgICByZXR1cm4gZmlsdGVyQW5kQXBwbHkoZXZlbnRzLCAnc3lzdGVtJywgWydFeHRyaW5zaWNGYWlsZWQnLCAnRXh0cmluc2ljU3VjY2VzcyddLCBnZXREaXNwYXRjaEluZm8pWzBdO1xufVxuZXhwb3J0IGNsYXNzIFN1Ym1pdHRhYmxlUmVzdWx0IHtcbiAgICBkaXNwYXRjaEVycm9yO1xuICAgIGRpc3BhdGNoSW5mbztcbiAgICBpbnRlcm5hbEVycm9yO1xuICAgIGV2ZW50cztcbiAgICBzdGF0dXM7XG4gICAgdHhIYXNoO1xuICAgIHR4SW5kZXg7XG4gICAgYmxvY2tOdW1iZXI7XG4gICAgY29uc3RydWN0b3IoeyBibG9ja051bWJlciwgZGlzcGF0Y2hFcnJvciwgZGlzcGF0Y2hJbmZvLCBldmVudHMsIGludGVybmFsRXJyb3IsIHN0YXR1cywgdHhIYXNoLCB0eEluZGV4IH0pIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEVycm9yID0gZGlzcGF0Y2hFcnJvciB8fCBleHRyYWN0RXJyb3IoZXZlbnRzKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEluZm8gPSBkaXNwYXRjaEluZm8gfHwgZXh0cmFjdEluZm8oZXZlbnRzKTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBldmVudHMgfHwgW107XG4gICAgICAgIHRoaXMuaW50ZXJuYWxFcnJvciA9IGludGVybmFsRXJyb3I7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnR4SGFzaCA9IHR4SGFzaDtcbiAgICAgICAgdGhpcy50eEluZGV4ID0gdHhJbmRleDtcbiAgICAgICAgdGhpcy5ibG9ja051bWJlciA9IGJsb2NrTnVtYmVyO1xuICAgIH1cbiAgICBnZXQgaXNDb21wbGV0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRXJyb3IgfHwgdGhpcy5zdGF0dXMuaXNJbkJsb2NrIHx8IHRoaXMuc3RhdHVzLmlzRmluYWxpemVkO1xuICAgIH1cbiAgICBnZXQgaXNFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzLmlzRHJvcHBlZCB8fCB0aGlzLnN0YXR1cy5pc0ZpbmFsaXR5VGltZW91dCB8fCB0aGlzLnN0YXR1cy5pc0ludmFsaWQgfHwgdGhpcy5zdGF0dXMuaXNVc3VycGVkO1xuICAgIH1cbiAgICBnZXQgaXNGaW5hbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXR1cy5pc0ZpbmFsaXplZDtcbiAgICB9XG4gICAgZ2V0IGlzSW5CbG9jaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzLmlzSW5CbG9jaztcbiAgICB9XG4gICAgZ2V0IGlzV2FybmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzLmlzUmV0cmFjdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRmlsdGVycyBFdmVudFJlY29yZHMgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kICYgc2VjdGlvbiAodGhlcmUgY291bGQgYmUgbXVsdGlwbGUpXG4gICAgICovXG4gICAgZmlsdGVyUmVjb3JkcyhzZWN0aW9uLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckFuZEFwcGx5KHRoaXMuZXZlbnRzLCBzZWN0aW9uLCBBcnJheS5pc0FycmF5KG1ldGhvZCkgPyBtZXRob2QgOiBbbWV0aG9kXSwgcmVjb3JkSWRlbnRpdHkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRmluZHMgYW4gRXZlbnRSZWNvcmQgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kICYgc2VjdGlvblxuICAgICAqL1xuICAgIGZpbmRSZWNvcmQoc2VjdGlvbiwgbWV0aG9kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlclJlY29yZHMoc2VjdGlvbiwgbWV0aG9kKVswXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBodW1hbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3V0cHV0XG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkaXNwYXRjaEVycm9yOiB0aGlzLmRpc3BhdGNoRXJyb3I/LnRvSHVtYW4oKSxcbiAgICAgICAgICAgIGRpc3BhdGNoSW5mbzogdGhpcy5kaXNwYXRjaEluZm8/LnRvSHVtYW4oKSxcbiAgICAgICAgICAgIGV2ZW50czogdGhpcy5ldmVudHMubWFwKChlKSA9PiBlLnRvSHVtYW4oaXNFeHRlbmRlZCkpLFxuICAgICAgICAgICAgaW50ZXJuYWxFcnJvcjogdGhpcy5pbnRlcm5hbEVycm9yPy5tZXNzYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLnRvSHVtYW4oaXNFeHRlbmRlZClcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjYXRjaEVycm9yLCBmaXJzdCwgbWFwLCBtZXJnZU1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpZGVudGl0eSwgaXNCbiwgaXNGdW5jdGlvbiwgaXNOdW1iZXIsIGlzU3RyaW5nLCBpc1U4YSwgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZmlsdGVyRXZlbnRzLCBpc0tleXJpbmdQYWlyIH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBTdWJtaXR0YWJsZVJlc3VsdCB9IGZyb20gJy4vUmVzdWx0LmpzJztcbmZ1bmN0aW9uIG1ha2VFcmFPcHRpb25zKGFwaSwgcmVnaXN0cnksIHBhcnRpYWxPcHRpb25zLCB7IGhlYWRlciwgbW9ydGFsTGVuZ3RoLCBub25jZSB9KSB7XG4gICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgICAgaWYgKHBhcnRpYWxPcHRpb25zLmVyYSAmJiAhcGFydGlhbE9wdGlvbnMuYmxvY2tIYXNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJsb2NrSGFzaCB0byBiZSBwYXNzZWQgYWxvbmdzaWRlIG5vbi1pbW1vcnRhbCBlcmEgb3B0aW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihwYXJ0aWFsT3B0aW9ucy5lcmEpKSB7XG4gICAgICAgICAgICAvLyBzaW5jZSB3ZSBoYXZlIG5vIGhlYWRlciwgaXQgaXMgaW1tb3J0YWwsIHJlbW92ZSBhbnkgb3B0aW9uIG92ZXJyaWRlc1xuICAgICAgICAgICAgLy8gc28gd2Ugb25seSBzdXBwbHkgdGhlIGdlbmVzaXNIYXNoIGFuZCBubyBlcmEgdG8gdGhlIGNvbnN0cnVjdGlvblxuICAgICAgICAgICAgZGVsZXRlIHBhcnRpYWxPcHRpb25zLmVyYTtcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJ0aWFsT3B0aW9ucy5ibG9ja0hhc2g7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ha2VTaWduT3B0aW9ucyhhcGksIHBhcnRpYWxPcHRpb25zLCB7IG5vbmNlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWFrZVNpZ25PcHRpb25zKGFwaSwgcGFydGlhbE9wdGlvbnMsIHtcbiAgICAgICAgYmxvY2tIYXNoOiBoZWFkZXIuaGFzaCxcbiAgICAgICAgZXJhOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdFeHRyaW5zaWNFcmEnLCBbe1xuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IGhlYWRlci5udW1iZXIsXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBwYXJ0aWFsT3B0aW9ucy5lcmEgfHwgbW9ydGFsTGVuZ3RoXG4gICAgICAgICAgICB9XSksXG4gICAgICAgIG5vbmNlXG4gICAgfSk7XG59XG5mdW5jdGlvbiBtYWtlU2lnbkFuZFNlbmRPcHRpb25zKHBhcnRpYWxPcHRpb25zLCBzdGF0dXNDYikge1xuICAgIGxldCBvcHRpb25zID0ge307XG4gICAgaWYgKGlzRnVuY3Rpb24ocGFydGlhbE9wdGlvbnMpKSB7XG4gICAgICAgIHN0YXR1c0NiID0gcGFydGlhbE9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBvcHRpb25zID0gb2JqZWN0U3ByZWFkKHt9LCBwYXJ0aWFsT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBbb3B0aW9ucywgc3RhdHVzQ2JdO1xufVxuZnVuY3Rpb24gbWFrZVNpZ25PcHRpb25zKGFwaSwgcGFydGlhbE9wdGlvbnMsIGV4dHJhcykge1xuICAgIHJldHVybiBvYmplY3RTcHJlYWQoeyBibG9ja0hhc2g6IGFwaS5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2g6IGFwaS5nZW5lc2lzSGFzaCB9LCBwYXJ0aWFsT3B0aW9ucywgZXh0cmFzLCB7IHJ1bnRpbWVWZXJzaW9uOiBhcGkucnVudGltZVZlcnNpb24sIHNpZ25lZEV4dGVuc2lvbnM6IGFwaS5yZWdpc3RyeS5zaWduZWRFeHRlbnNpb25zLCB2ZXJzaW9uOiBhcGkuZXh0cmluc2ljVHlwZSB9KTtcbn1cbmZ1bmN0aW9uIG9wdGlvbnNPck5vbmNlKHBhcnRpYWxPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gaXNCbihwYXJ0aWFsT3B0aW9ucykgfHwgaXNOdW1iZXIocGFydGlhbE9wdGlvbnMpXG4gICAgICAgID8geyBub25jZTogcGFydGlhbE9wdGlvbnMgfVxuICAgICAgICA6IHBhcnRpYWxPcHRpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHsgYXBpLCBhcGlUeXBlLCBibG9ja0hhc2gsIGRlY29yYXRlTWV0aG9kIH0pIHtcbiAgICAvLyBhbiBpbnN0YW5jZSBvZiB0aGUgYmFzZSBleHRyaW5zaWMgZm9yIHVzIHRvIGV4dGVuZFxuICAgIGNvbnN0IEV4dHJpbnNpY0Jhc2UgPSBhcGkucmVnaXN0cnkuY3JlYXRlQ2xhc3MoJ0V4dHJpbnNpYycpO1xuICAgIGNsYXNzIFN1Ym1pdHRhYmxlIGV4dGVuZHMgRXh0cmluc2ljQmFzZSB7XG4gICAgICAgIF9faW50ZXJuYWxfX2lnbm9yZVN0YXR1c0NiO1xuICAgICAgICBfX2ludGVybmFsX190cmFuc2Zvcm1SZXN1bHQgPSAoaWRlbnRpdHkpO1xuICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgZXh0cmluc2ljKSB7XG4gICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgZXh0cmluc2ljLCB7IHZlcnNpb246IGFwaS5leHRyaW5zaWNUeXBlIH0pO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19pZ25vcmVTdGF0dXNDYiA9IGFwaVR5cGUgPT09ICdyeGpzJztcbiAgICAgICAgfVxuICAgICAgICBnZXQgaGFzRHJ5UnVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oYXBpLnJwYy5zeXN0ZW0/LmRyeVJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGhhc1BheW1lbnRJbmZvKCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oYXBpLmNhbGwudHJhbnNhY3Rpb25QYXltZW50QXBpPy5xdWVyeUluZm8pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRyeSBydW4gYW4gZXh0cmluc2ljXG4gICAgICAgIGRyeVJ1bihhY2NvdW50LCBvcHRpb25zT3JIYXNoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzRHJ5UnVuKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3lzdGVtLmRyeVJ1biBSUEMgY2FsbCBpcyBub3QgYXZhaWxhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChibG9ja0hhc2ggfHwgaXNTdHJpbmcob3B0aW9uc09ySGFzaCkgfHwgaXNVOGEob3B0aW9uc09ySGFzaCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QoKCkgPT4gYXBpLnJwYy5zeXN0ZW0uZHJ5UnVuKHRoaXMudG9IZXgoKSwgYmxvY2tIYXNoIHx8IG9wdGlvbnNPckhhc2gpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVybixAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCgoKSA9PiB0aGlzLl9faW50ZXJuYWxfX29ic2VydmVTaWduKGFjY291bnQsIG9wdGlvbnNPckhhc2gpLnBpcGUoc3dpdGNoTWFwKCgpID0+IGFwaS5ycGMuc3lzdGVtLmRyeVJ1bih0aGlzLnRvSGV4KCkpKSkpKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBwYXltZW50IGluZm8gZm9yIHRoaXMgdHJhbnNhY3Rpb24gKGlmIHNpZ25lZCBhbmQgc3VibWl0dGVkKVxuICAgICAgICBwYXltZW50SW5mbyhhY2NvdW50LCBvcHRpb25zT3JIYXNoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzUGF5bWVudEluZm8pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0cmFuc2FjdGlvblBheW1lbnRBcGkucXVlcnlJbmZvIHJ1bnRpbWUgY2FsbCBpcyBub3QgYXZhaWxhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChibG9ja0hhc2ggfHwgaXNTdHJpbmcob3B0aW9uc09ySGFzaCkgfHwgaXNVOGEob3B0aW9uc09ySGFzaCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QoKCkgPT4gYXBpLmNhbGxBdChibG9ja0hhc2ggfHwgb3B0aW9uc09ySGFzaCkucGlwZShzd2l0Y2hNYXAoKGNhbGxBdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1OGEgPSB0aGlzLnRvVThhKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsQXQudHJhbnNhY3Rpb25QYXltZW50QXBpLnF1ZXJ5SW5mbyh1OGEsIHU4YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbYWxsT3B0aW9uc10gPSBtYWtlU2lnbkFuZFNlbmRPcHRpb25zKG9wdGlvbnNPckhhc2gpO1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IGlzS2V5cmluZ1BhaXIoYWNjb3VudCkgPyBhY2NvdW50LmFkZHJlc3MgOiBhY2NvdW50LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4sQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QoKCkgPT4gYXBpLmRlcml2ZS50eC5zaWduaW5nSW5mbyhhZGRyZXNzLCBhbGxPcHRpb25zLm5vbmNlLCBhbGxPcHRpb25zLmVyYSkucGlwZShmaXJzdCgpLCBzd2l0Y2hNYXAoKHNpZ25pbmdJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dXAgb3VyIG9wdGlvbnMgKHNhbWUgd2F5IGFzIGluIHNpZ25BbmRTZW5kKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVyYU9wdGlvbnMgPSBtYWtlRXJhT3B0aW9ucyhhcGksIHRoaXMucmVnaXN0cnksIGFsbE9wdGlvbnMsIHNpZ25pbmdJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduT3B0aW9ucyA9IG1ha2VTaWduT3B0aW9ucyhhcGksIGVyYU9wdGlvbnMsIHt9KTtcbiAgICAgICAgICAgICAgICAvLyAxLiBEb24ndCB1c2UgdGhlIGludGVybmFsIG9iamVjdHMgaW5zaWRlIHRoZSBuZXcgdHggKGhlbmNlIHRvVThhKVxuICAgICAgICAgICAgICAgIC8vIDIuIERvbid0IG92ZXJyaWRlIHRoZSBkYXRhIGZyb20gZXhpc3Rpbmcgc2lnbmVkIGV4dHJpbnNpY3NcbiAgICAgICAgICAgICAgICAvLyAzLiBFbnN1cmUgdGhhdCB0aGlzIG9iamVjdCBzdGF5cyBpbnRhY3QsIHdpdGggbm8gbmV3IHNpZ24gYWZ0ZXIgb3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgdThhID0gYXBpLnR4KHRoaXMudG9VOGEoKSkuc2lnbkZha2UoYWRkcmVzcywgc2lnbk9wdGlvbnMpLnRvVThhKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5jYWxsLnRyYW5zYWN0aW9uUGF5bWVudEFwaS5xdWVyeUluZm8odThhLCB1OGEubGVuZ3RoKTtcbiAgICAgICAgICAgIH0pKSkoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZW5kIGltcGxlbWVudGF0aW9uIGZvciBib3RoIGltbWVkaWF0ZSBIYXNoIGFuZCBzdGF0dXNDYiB2YXJpYW50c1xuICAgICAgICBzZW5kKHN0YXR1c0NiKSB7XG4gICAgICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9IGFwaS5oYXNTdWJzY3JpcHRpb25zICYmICh0aGlzLl9faW50ZXJuYWxfX2lnbm9yZVN0YXR1c0NiIHx8ICEhc3RhdHVzQ2IpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRlTWV0aG9kKGlzU3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX29ic2VydmVTdWJzY3JpYmVcbiAgICAgICAgICAgICAgICA6IHRoaXMuX19pbnRlcm5hbF9fb2JzZXJ2ZVNlbmQpKHN0YXR1c0NiKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNpZ25zIGEgdHJhbnNhY3Rpb24sIHJldHVybmluZyBgdGhpc2AgdG8gYWxsb3cgY2hhaW5pbmcuIEUuZy46IGBzaWduQXN5bmMoLi4uKS5zZW5kKClgLiBMaWtlIGAuc2lnbkFuZFNlbmRgIHRoaXMgd2lsbCByZXRyaWV2ZSB0aGUgbm9uY2UgYW5kIGJsb2NrSGFzaCB0byBzZW5kIHRoZSB0eCB3aXRoLlxuICAgICAgICAgKi9cbiAgICAgICAgc2lnbkFzeW5jKGFjY291bnQsIHBhcnRpYWxPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4sQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgICAgICByZXR1cm4gZGVjb3JhdGVNZXRob2QoKCkgPT4gdGhpcy5fX2ludGVybmFsX19vYnNlcnZlU2lnbihhY2NvdW50LCBwYXJ0aWFsT3B0aW9ucykucGlwZShtYXAoKCkgPT4gdGhpcykpKSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNpZ25BbmRTZW5kIGltcGxlbWVudGF0aW9uIGZvciBhbGwgMyBjYXNlcyBhYm92ZVxuICAgICAgICBzaWduQW5kU2VuZChhY2NvdW50LCBwYXJ0aWFsT3B0aW9ucywgb3B0aW9uYWxTdGF0dXNDYikge1xuICAgICAgICAgICAgY29uc3QgW29wdGlvbnMsIHN0YXR1c0NiXSA9IG1ha2VTaWduQW5kU2VuZE9wdGlvbnMocGFydGlhbE9wdGlvbnMsIG9wdGlvbmFsU3RhdHVzQ2IpO1xuICAgICAgICAgICAgY29uc3QgaXNTdWJzY3JpcHRpb24gPSBhcGkuaGFzU3Vic2NyaXB0aW9ucyAmJiAodGhpcy5fX2ludGVybmFsX19pZ25vcmVTdGF0dXNDYiB8fCAhIXN0YXR1c0NiKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVybixAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCgoKSA9PiB0aGlzLl9faW50ZXJuYWxfX29ic2VydmVTaWduKGFjY291bnQsIG9wdGlvbnMpLnBpcGUoc3dpdGNoTWFwKChpbmZvKSA9PiBpc1N1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19vYnNlcnZlU3Vic2NyaWJlKGluZm8pXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9faW50ZXJuYWxfX29ic2VydmVTZW5kKGluZm8pKSkgLy8gRklYTUUgVGhpcyBpcyB3cm9uZywgU3VibWl0dGFibGVSZXN1bHQgaXMgX25vdF8gYSBjb2RlY1xuICAgICAgICAgICAgKShzdGF0dXNDYik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkcyBhIHRyYW5zZm9ybSB0byB0aGUgcmVzdWx0LCBhcHBsaWVkIGJlZm9yZSByZXN1bHQgaXMgcmV0dXJuZWRcbiAgICAgICAgd2l0aFJlc3VsdFRyYW5zZm9ybSh0cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fdHJhbnNmb3JtUmVzdWx0ID0gdHJhbnNmb3JtO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgX19pbnRlcm5hbF9fb2JzZXJ2ZVNpZ24gPSAoYWNjb3VudCwgcGFydGlhbE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBpc0tleXJpbmdQYWlyKGFjY291bnQpID8gYWNjb3VudC5hZGRyZXNzIDogYWNjb3VudC50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNPck5vbmNlKHBhcnRpYWxPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBhcGkuZGVyaXZlLnR4LnNpZ25pbmdJbmZvKGFkZHJlc3MsIG9wdGlvbnMubm9uY2UsIG9wdGlvbnMuZXJhKS5waXBlKGZpcnN0KCksIG1lcmdlTWFwKGFzeW5jIChzaWduaW5nSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyYU9wdGlvbnMgPSBtYWtlRXJhT3B0aW9ucyhhcGksIHRoaXMucmVnaXN0cnksIG9wdGlvbnMsIHNpZ25pbmdJbmZvKTtcbiAgICAgICAgICAgICAgICBsZXQgdXBkYXRlSWQgPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoaXNLZXlyaW5nUGFpcihhY2NvdW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ24oYWNjb3VudCwgZXJhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJZCA9IGF3YWl0IHRoaXMuX19pbnRlcm5hbF9fc2lnblZpYVNpZ25lcihhZGRyZXNzLCBlcmFPcHRpb25zLCBzaWduaW5nSW5mby5oZWFkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBvcHRpb25zOiBlcmFPcHRpb25zLCB1cGRhdGVJZCB9O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgICAgICBfX2ludGVybmFsX19vYnNlcnZlU3RhdHVzID0gKHR4SGFzaCwgc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXN0YXR1cy5pc0ZpbmFsaXplZCAmJiAhc3RhdHVzLmlzSW5CbG9jaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl9faW50ZXJuYWxfX3RyYW5zZm9ybVJlc3VsdChuZXcgU3VibWl0dGFibGVSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIHR4SGFzaFxuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBibG9ja0hhc2ggPSBzdGF0dXMuaXNJbkJsb2NrXG4gICAgICAgICAgICAgICAgPyBzdGF0dXMuYXNJbkJsb2NrXG4gICAgICAgICAgICAgICAgOiBzdGF0dXMuYXNGaW5hbGl6ZWQ7XG4gICAgICAgICAgICByZXR1cm4gYXBpLmRlcml2ZS50eC5ldmVudHMoYmxvY2tIYXNoKS5waXBlKG1hcCgoeyBibG9jaywgZXZlbnRzIH0pID0+IHRoaXMuX19pbnRlcm5hbF9fdHJhbnNmb3JtUmVzdWx0KG5ldyBTdWJtaXR0YWJsZVJlc3VsdCh7XG4gICAgICAgICAgICAgICAgLi4uZmlsdGVyRXZlbnRzKHR4SGFzaCwgYmxvY2ssIGV2ZW50cywgc3RhdHVzKSxcbiAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgdHhIYXNoXG4gICAgICAgICAgICB9KSkpLCBjYXRjaEVycm9yKChpbnRlcm5hbEVycm9yKSA9PiBvZih0aGlzLl9faW50ZXJuYWxfX3RyYW5zZm9ybVJlc3VsdChuZXcgU3VibWl0dGFibGVSZXN1bHQoe1xuICAgICAgICAgICAgICAgIGludGVybmFsRXJyb3IsXG4gICAgICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgICAgIHR4SGFzaFxuICAgICAgICAgICAgfSkpKSkpO1xuICAgICAgICB9O1xuICAgICAgICBfX2ludGVybmFsX19vYnNlcnZlU2VuZCA9IChpbmZvKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXBpLnJwYy5hdXRob3Iuc3VibWl0RXh0cmluc2ljKHRoaXMpLnBpcGUodGFwKChoYXNoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX191cGRhdGVTaWduZXIoaGFzaCwgaW5mbyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIF9faW50ZXJuYWxfX29ic2VydmVTdWJzY3JpYmUgPSAoaW5mbykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHhIYXNoID0gdGhpcy5oYXNoO1xuICAgICAgICAgICAgcmV0dXJuIGFwaS5ycGMuYXV0aG9yLnN1Ym1pdEFuZFdhdGNoRXh0cmluc2ljKHRoaXMpLnBpcGUoc3dpdGNoTWFwKChzdGF0dXMpID0+IHRoaXMuX19pbnRlcm5hbF9fb2JzZXJ2ZVN0YXR1cyh0eEhhc2gsIHN0YXR1cykpLCB0YXAoKHN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fdXBkYXRlU2lnbmVyKHN0YXR1cywgaW5mbyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIF9faW50ZXJuYWxfX3NpZ25WaWFTaWduZXIgPSBhc3luYyAoYWRkcmVzcywgb3B0aW9ucywgaGVhZGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaWduZXIgPSBvcHRpb25zLnNpZ25lciB8fCBhcGkuc2lnbmVyO1xuICAgICAgICAgICAgaWYgKCFzaWduZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNpZ25lciBzcGVjaWZpZWQsIGVpdGhlciB2aWEgYXBpLnNldFNpZ25lciBvciB2aWEgc2lnbiBvcHRpb25zLiBZb3UgcG9zc2libHkgbmVlZCB0byBwYXNzIHRocm91Z2ggYW4gZXhwbGljaXQga2V5cGFpciBmb3IgdGhlIG9yaWdpbiBzbyBpdCBjYW4gYmUgdXNlZCBmb3Igc2lnbmluZy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1NpZ25lclBheWxvYWQnLCBbb2JqZWN0U3ByZWFkKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrTnVtYmVyOiBoZWFkZXIgPyBoZWFkZXIubnVtYmVyIDogMCxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZFxuICAgICAgICAgICAgICAgIH0pXSk7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2lnbmVyLnNpZ25QYXlsb2FkKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHNpZ25lci5zaWduUGF5bG9hZChwYXlsb2FkLnRvUGF5bG9hZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24oc2lnbmVyLnNpZ25SYXcpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgc2lnbmVyLnNpZ25SYXcocGF5bG9hZC50b1JhdygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduZXIgaW50ZXJmYWNlLCBpdCBzaG91bGQgaW1wbGVtZW50IGVpdGhlciBzaWduUGF5bG9hZCBvciBzaWduUmF3IChvciBib3RoKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGVyZSB3ZSBleHBsaWNpdGx5IGNhbGwgYHRvUGF5bG9hZCgpYCBhZ2FpbiBpbnN0ZWFkIG9mIHdvcmtpbmcgd2l0aCBhbiBvYmplY3RcbiAgICAgICAgICAgIC8vIChyZWZlcmVuY2UpIGFzIHBhc3NlZCB0byB0aGUgc2lnbmVyLiBUaGlzIG1lYW5zIHRoYXQgd2UgYXJlIHN1cmUgdGhhdCB0aGVcbiAgICAgICAgICAgIC8vIHBheWxvYWQgZGF0YSBpcyBub3QgbW9kaWZpZWQgZnJvbSBvdXIgaW5wdXRzLCBidXQgdGhlIHNpZ25lclxuICAgICAgICAgICAgc3VwZXIuYWRkU2lnbmF0dXJlKGFkZHJlc3MsIHJlc3VsdC5zaWduYXR1cmUsIHBheWxvYWQudG9QYXlsb2FkKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pZDtcbiAgICAgICAgfTtcbiAgICAgICAgX19pbnRlcm5hbF9fdXBkYXRlU2lnbmVyID0gKHN0YXR1cywgaW5mbykgPT4ge1xuICAgICAgICAgICAgaWYgKGluZm8gJiYgKGluZm8udXBkYXRlSWQgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgb3B0aW9ucywgdXBkYXRlSWQgfSA9IGluZm87XG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVyID0gb3B0aW9ucy5zaWduZXIgfHwgYXBpLnNpZ25lcjtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmVyICYmIGlzRnVuY3Rpb24oc2lnbmVyLnVwZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmVyLnVwZGF0ZSh1cGRhdGVJZCwgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBTdWJtaXR0YWJsZTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUNsYXNzIH0gZnJvbSAnLi9jcmVhdGVDbGFzcy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3VibWl0dGFibGUoYXBpVHlwZSwgYXBpLCBkZWNvcmF0ZU1ldGhvZCwgcmVnaXN0cnksIGJsb2NrSGFzaCkge1xuICAgIGNvbnN0IFN1Ym1pdHRhYmxlID0gY3JlYXRlQ2xhc3MoeyBhcGksIGFwaVR5cGUsIGJsb2NrSGFzaCwgZGVjb3JhdGVNZXRob2QgfSk7XG4gICAgcmV0dXJuIChleHRyaW5zaWMpID0+IG5ldyBTdWJtaXR0YWJsZShyZWdpc3RyeSB8fCBhcGkucmVnaXN0cnksIGV4dHJpbnNpYyk7XG59XG4iLCJpbXBvcnQgeyBsYXp5TWV0aG9kcywgbG9nZ2VyLCBvYmplY3RDbGVhciB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmNvbnN0IGwgPSBsb2dnZXIoJ2FwaS9hdWdtZW50Jyk7XG5mdW5jdGlvbiBsb2dMZW5ndGgodHlwZSwgdmFsdWVzLCBhbmQgPSBbXSkge1xuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoXG4gICAgICAgID8gYCAke3ZhbHVlcy5sZW5ndGh9ICR7dHlwZX0ke2FuZC5sZW5ndGggPyAnIGFuZCcgOiAnJ31gXG4gICAgICAgIDogJyc7XG59XG5mdW5jdGlvbiBsb2dWYWx1ZXModHlwZSwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5sZW5ndGhcbiAgICAgICAgPyBgXFxuXFx0JHt0eXBlLnBhZFN0YXJ0KDcpfTogJHt2YWx1ZXMuc29ydCgpLmpvaW4oJywgJyl9YFxuICAgICAgICA6ICcnO1xufVxuZnVuY3Rpb24gd2FybihwcmVmaXgsIHR5cGUsIFthZGRlZCwgcmVtb3ZlZF0pIHtcbiAgICBpZiAoYWRkZWQubGVuZ3RoIHx8IHJlbW92ZWQubGVuZ3RoKSB7XG4gICAgICAgIGwud2FybihgYXBpLiR7cHJlZml4fTogRm91bmQke2xvZ0xlbmd0aCgnYWRkZWQnLCBhZGRlZCwgcmVtb3ZlZCl9JHtsb2dMZW5ndGgoJ3JlbW92ZWQnLCByZW1vdmVkKX0gJHt0eXBlfToke2xvZ1ZhbHVlcygnYWRkZWQnLCBhZGRlZCl9JHtsb2dWYWx1ZXMoJ3JlbW92ZWQnLCByZW1vdmVkKX1gKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmaW5kU2VjdGlvbkV4Y2x1ZGVzKGEsIGIpIHtcbiAgICByZXR1cm4gYS5maWx0ZXIoKHMpID0+ICFiLmluY2x1ZGVzKHMpKTtcbn1cbmZ1bmN0aW9uIGZpbmRTZWN0aW9uSW5jbHVkZXMoYSwgYikge1xuICAgIHJldHVybiBhLmZpbHRlcigocykgPT4gYi5pbmNsdWRlcyhzKSk7XG59XG5mdW5jdGlvbiBleHRyYWN0U2VjdGlvbnMoc3JjLCBkc3QpIHtcbiAgICBjb25zdCBzcmNTZWN0aW9ucyA9IE9iamVjdC5rZXlzKHNyYyk7XG4gICAgY29uc3QgZHN0U2VjdGlvbnMgPSBPYmplY3Qua2V5cyhkc3QpO1xuICAgIHJldHVybiBbXG4gICAgICAgIGZpbmRTZWN0aW9uRXhjbHVkZXMoc3JjU2VjdGlvbnMsIGRzdFNlY3Rpb25zKSxcbiAgICAgICAgZmluZFNlY3Rpb25FeGNsdWRlcyhkc3RTZWN0aW9ucywgc3JjU2VjdGlvbnMpXG4gICAgXTtcbn1cbmZ1bmN0aW9uIGZpbmRNZXRob2RFeGNsdWRlcyhzcmMsIGRzdCkge1xuICAgIGNvbnN0IHNyY1NlY3Rpb25zID0gT2JqZWN0LmtleXMoc3JjKTtcbiAgICBjb25zdCBkc3RTZWN0aW9ucyA9IGZpbmRTZWN0aW9uSW5jbHVkZXMoT2JqZWN0LmtleXMoZHN0KSwgc3JjU2VjdGlvbnMpO1xuICAgIGNvbnN0IGV4Y2x1ZGVzID0gW107XG4gICAgZm9yIChsZXQgcyA9IDAsIHNjb3VudCA9IGRzdFNlY3Rpb25zLmxlbmd0aDsgcyA8IHNjb3VudDsgcysrKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBkc3RTZWN0aW9uc1tzXTtcbiAgICAgICAgY29uc3Qgc3JjTWV0aG9kcyA9IE9iamVjdC5rZXlzKHNyY1tzZWN0aW9uXSk7XG4gICAgICAgIGNvbnN0IGRzdE1ldGhvZHMgPSBPYmplY3Qua2V5cyhkc3Rbc2VjdGlvbl0pO1xuICAgICAgICBmb3IgKGxldCBkID0gMCwgbWNvdW50ID0gZHN0TWV0aG9kcy5sZW5ndGg7IGQgPCBtY291bnQ7IGQrKykge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gZHN0TWV0aG9kc1tkXTtcbiAgICAgICAgICAgIGlmICghc3JjTWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZXMucHVzaChgJHtzZWN0aW9ufS4ke21ldGhvZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhjbHVkZXM7XG59XG5mdW5jdGlvbiBleHRyYWN0TWV0aG9kcyhzcmMsIGRzdCkge1xuICAgIHJldHVybiBbXG4gICAgICAgIGZpbmRNZXRob2RFeGNsdWRlcyhkc3QsIHNyYyksXG4gICAgICAgIGZpbmRNZXRob2RFeGNsdWRlcyhzcmMsIGRzdClcbiAgICBdO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGFrZXMgYSBkZWNvcmF0ZWQgYXBpIHNlY3Rpb24gKGUuZy4gYXBpLnR4KSBhbmQgYXVnbWVudCBpdCB3aXRoIHRoZSBkZXRhaWxzLiBJdCBkb2VzIG5vdCBvdmVycmlkZSB3aGF0IGlzXG4gKiBhbHJlYWR5IGF2YWlsYWJsZSwgYnV0IHJhdGhlciBqdXN0IGFkZHMgbmV3IG1pc3NpbmcgaXRlbXMgaW50byB0aGUgcmVzdWx0IG9iamVjdC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudE9iamVjdChwcmVmaXgsIHNyYywgZHN0LCBmcm9tRW1wdHkgPSBmYWxzZSkge1xuICAgIGZyb21FbXB0eSAmJiBvYmplY3RDbGVhcihkc3QpO1xuICAgIC8vIE5PVEU6IFRoaXMgcGFydCBpcyBzbGlnaHRseSBwcm9ibGVtYXRpYyBzaW5jZSBpdCB3aWxsIGdldCB0aGVcbiAgICAvLyB2YWx1ZXMgZm9yIGF0IGxlYXN0IGFsbCB0aGUgc2VjdGlvbnMgYW5kIHRoZSBuYW1lcyBvZiB0aGUgbWV0aG9kc1xuICAgIC8vIChTaW5jZSBtZXRob2RzIHdvbid0IGJlIGRlY29yYXRlZCBiZWZvcmUgbGF6eSwgdGhpcyBfbWF5XyBiZSBvaylcbiAgICBpZiAocHJlZml4ICYmIE9iamVjdC5rZXlzKGRzdCkubGVuZ3RoKSB7XG4gICAgICAgIHdhcm4ocHJlZml4LCAnbW9kdWxlcycsIGV4dHJhY3RTZWN0aW9ucyhzcmMsIGRzdCkpO1xuICAgICAgICB3YXJuKHByZWZpeCwgJ2NhbGxzJywgZXh0cmFjdE1ldGhvZHMoc3JjLCBkc3QpKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHNlY3Rpb25zLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW2ldO1xuICAgICAgICBjb25zdCBtZXRob2RzID0gc3JjW3NlY3Rpb25dO1xuICAgICAgICAvLyBXZSBkb24ndCBzZXQgaGVyZSB3aXRoIGEgbGF6eSBpbnRlcmZhY2UsIHdlIGRlY29yYXRlIGJhc2VkXG4gICAgICAgIC8vIG9uIHRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlICh0aGlzIGJ5cGFzc2VzIGFkZGluZyBsYXp5IG9udG8gbGF6eSlcbiAgICAgICAgaWYgKCFkc3Rbc2VjdGlvbl0pIHtcbiAgICAgICAgICAgIGRzdFtzZWN0aW9uXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGxhenlNZXRob2RzKGRzdFtzZWN0aW9uXSwgT2JqZWN0LmtleXMobWV0aG9kcyksIChtKSA9PiBtZXRob2RzW21dKTtcbiAgICB9XG4gICAgcmV0dXJuIGRzdDtcbn1cbiIsImltcG9ydCB7IGxhenlEZXJpdmVTZWN0aW9uIH0gZnJvbSAnQHBvbGthZG90L2FwaS1kZXJpdmUnO1xuLyoqXG4gKiBUaGlzIGlzIGEgc2VjdGlvbiBkZWNvcmF0b3Igd2hpY2gga2VlcHMgYWxsIHR5cGUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZURlcml2ZVNlY3Rpb25zKGRlY29yYXRlTWV0aG9kLCBkZXJpdmVzKSB7XG4gICAgY29uc3QgZ2V0S2V5cyA9IChzKSA9PiBPYmplY3Qua2V5cyhkZXJpdmVzW3NdKTtcbiAgICBjb25zdCBjcmVhdG9yID0gKHMsIG0pID0+IGRlY29yYXRlTWV0aG9kKGRlcml2ZXNbc11bbV0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoZGVyaXZlcyk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gbmFtZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBsYXp5RGVyaXZlU2VjdGlvbihyZXN1bHQsIG5hbWVzW2ldLCBnZXRLZXlzLCBjcmVhdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGwgfSBmcm9tICcuL2xvZ2dpbmcuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckV2ZW50cyh0eEhhc2gsIHsgYmxvY2s6IHsgZXh0cmluc2ljcywgaGVhZGVyIH0gfSwgYWxsRXZlbnRzLCBzdGF0dXMpIHtcbiAgICAvLyBleHRyaW5zaWNzIHRvIGhhc2hlc1xuICAgIGZvciAoY29uc3QgW3R4SW5kZXgsIHhdIG9mIGV4dHJpbnNpY3MuZW50cmllcygpKSB7XG4gICAgICAgIGlmICh4Lmhhc2guZXEodHhIYXNoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBibG9ja051bWJlcjogaXNDb21wYWN0KGhlYWRlci5udW1iZXIpID8gaGVhZGVyLm51bWJlci51bndyYXAoKSA6IGhlYWRlci5udW1iZXIsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiBhbGxFdmVudHMuZmlsdGVyKCh7IHBoYXNlIH0pID0+IHBoYXNlLmlzQXBwbHlFeHRyaW5zaWMgJiZcbiAgICAgICAgICAgICAgICAgICAgcGhhc2UuYXNBcHBseUV4dHJpbnNpYy5lcW4odHhJbmRleCkpLFxuICAgICAgICAgICAgICAgIHR4SW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaWYgd2UgZG8gZ2V0IHRoZSBibG9jayBhZnRlciBmaW5hbGl6ZWQsIGl0IF9zaG91bGRfIGJlIHRoZXJlXG4gICAgLy8gb25seSB3YXJuIG9uIGZpbHRlcmluZyB3aXRoIGlzSW5CbG9jayAoZmluYWxpemF0aW9uIGZpbmFsaXplcyBhZnRlcilcbiAgICBpZiAoc3RhdHVzLmlzSW5CbG9jaykge1xuICAgICAgICBjb25zdCBhbGxIYXNoZXMgPSBleHRyaW5zaWNzLm1hcCgoeCkgPT4geC5oYXNoLnRvSGV4KCkpO1xuICAgICAgICBsLndhcm4oYGJsb2NrICR7aGVhZGVyLmhhc2gudG9IZXgoKX06IFVuYWJsZSB0byBmaW5kIGV4dHJpbnNpYyAke3R4SGFzaC50b0hleCgpfSBpbnNpZGUgJHthbGxIYXNoZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBmdW5jdGlvbiBpc0tleXJpbmdQYWlyKGFjY291bnQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhY2NvdW50LnNpZ24pO1xufVxuIiwiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZXhwb3J0IGNvbnN0IGwgPSAvKiNfX1BVUkVfXyovIGxvZ2dlcignYXBpL3V0aWwnKTtcbiIsImltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gc2lnKHsgbG9va3VwIH0sIHsgbWV0aG9kLCBzZWN0aW9uIH0sIGFyZ3MpIHtcbiAgICByZXR1cm4gYCR7c2VjdGlvbn0uJHttZXRob2R9KCR7YXJncy5tYXAoKGEpID0+IGxvb2t1cC5nZXRUeXBlRGVmKGEpLnR5cGUpLmpvaW4oJywgJyl9KWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0b3JhZ2VBcmdzKHJlZ2lzdHJ5LCBjcmVhdG9yLCBfYXJncykge1xuICAgIGNvbnN0IGFyZ3MgPSBfYXJncy5maWx0ZXIoKGEpID0+ICFpc1VuZGVmaW5lZChhKSk7XG4gICAgaWYgKGNyZWF0b3IubWV0YS50eXBlLmlzUGxhaW4pIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c2lnKHJlZ2lzdHJ5LCBjcmVhdG9yLCBbXSl9IGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50cywgJHthcmdzLmxlbmd0aH0gZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBoYXNoZXJzLCBrZXkgfSA9IGNyZWF0b3IubWV0YS50eXBlLmFzTWFwO1xuICAgICAgICBjb25zdCBrZXlzID0gaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgID8gW2tleV1cbiAgICAgICAgICAgIDogcmVnaXN0cnkubG9va3VwLmdldFNpVHlwZShrZXkpLmRlZi5hc1R1cGxlLm1hcCgodCkgPT4gdCk7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0ga2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzaWcocmVnaXN0cnksIGNyZWF0b3IsIGtleXMpfSBpcyBhIG1hcCwgcmVxdWlyaW5nICR7a2V5cy5sZW5ndGh9IGFyZ3VtZW50cywgJHthcmdzLmxlbmd0aH0gZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBwYXNzIGFzIHR1cGxlXG4gICAgcmV0dXJuIFtjcmVhdG9yLCBhcmdzXTtcbn1cbiIsImltcG9ydCB7IGlzUHJvbWlzZSwgb2JqZWN0U3ByZWFkLCB1OGFFcSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MsIGVuY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgZG9jdW1lbnRSZWFkeVByb21pc2UgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IHsgcGFja2FnZUluZm8gfSBmcm9tICcuL3BhY2thZ2VJbmZvLmpzJztcbmV4cG9ydCB7IHVud3JhcEJ5dGVzLCB3cmFwQnl0ZXMgfSBmcm9tICcuL3dyYXBCeXRlcy5qcyc7XG5jb25zdCB3aW4gPSB3aW5kb3c7XG53aW4uaW5qZWN0ZWRXZWIzID0gd2luLmluamVjdGVkV2ViMyB8fCB7fTtcbmxldCBpc1dlYjNJbmplY3RlZCA9IHdlYjNJc0luamVjdGVkKCk7XG5sZXQgd2ViM0VuYWJsZVByb21pc2UgPSBudWxsO1xuZXhwb3J0IHsgaXNXZWIzSW5qZWN0ZWQsIHdlYjNFbmFibGVQcm9taXNlIH07XG4vKiogQGludGVybmFsIHRydWUgd2hlbiBhbnl0aGluZyBoYXMgYmVlbiBpbmplY3RlZCBhbmQgaXMgYXZhaWxhYmxlICovXG5mdW5jdGlvbiB3ZWIzSXNJbmplY3RlZCgpIHtcbiAgICByZXR1cm4gT2JqZWN0XG4gICAgICAgIC52YWx1ZXMod2luLmluamVjdGVkV2ViMylcbiAgICAgICAgLmZpbHRlcigoeyBjb25uZWN0LCBlbmFibGUgfSkgPT4gISEoY29ubmVjdCB8fCBlbmFibGUpKVxuICAgICAgICAubGVuZ3RoICE9PSAwO1xufVxuLyoqIEBpbnRlcm5hbCB0aHJvdyBhIGNvbnNpc3RlbnQgZXJyb3Igd2hlbiBub3QgZXh0ZW5zaW9ucyBoYXZlIG5vdCBiZWVuIGVuYWJsZWQgKi9cbmZ1bmN0aW9uIHRocm93RXJyb3IobWV0aG9kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH06IHdlYjNFbmFibGUob3JpZ2luTmFtZSkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSAke21ldGhvZH1gKTtcbn1cbi8qKiBAaW50ZXJuYWwgbWFwIGZyb20gQXJyYXk8SW5qZWN0ZWRBY2NvdW50PiB0byBBcnJheTxJbmplY3RlZEFjY291bnRXaXRoTWV0YT4gKi9cbmZ1bmN0aW9uIG1hcEFjY291bnRzKHNvdXJjZSwgbGlzdCwgc3M1OEZvcm1hdCkge1xuICAgIHJldHVybiBsaXN0Lm1hcCgoeyBhZGRyZXNzLCBnZW5lc2lzSGFzaCwgbmFtZSwgdHlwZSB9KSA9PiAoe1xuICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLmxlbmd0aCA9PT0gNDJcbiAgICAgICAgICAgID8gYWRkcmVzc1xuICAgICAgICAgICAgOiBlbmNvZGVBZGRyZXNzKGRlY29kZUFkZHJlc3MoYWRkcmVzcyksIHNzNThGb3JtYXQpLFxuICAgICAgICBtZXRhOiB7IGdlbmVzaXNIYXNoLCBuYW1lLCBzb3VyY2UgfSxcbiAgICAgICAgdHlwZVxuICAgIH0pKTtcbn1cbi8qKiBAaW50ZXJuYWwgZmlsdGVyIGFjY291bnRzIGJhc2VkIG9uIGdlbmVzaXNIYXNoIGFuZCB0eXBlIG9mIGFjY291bnQgKi9cbmZ1bmN0aW9uIGZpbHRlckFjY291bnRzKGxpc3QsIGdlbmVzaXNIYXNoLCB0eXBlKSB7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKChhKSA9PiAoIWEudHlwZSB8fCAhdHlwZSB8fCB0eXBlLmluY2x1ZGVzKGEudHlwZSkpICYmXG4gICAgICAgICghYS5nZW5lc2lzSGFzaCB8fCAhZ2VuZXNpc0hhc2ggfHwgYS5nZW5lc2lzSGFzaCA9PT0gZ2VuZXNpc0hhc2gpKTtcbn1cbi8qKiBAaW50ZXJuYWwgcmV0cmlldmVzIGFsbCB0aGUgZXh0ZW5zaW9ucyBhdmFpbGFibGUgb24gdGhlIHdpbmRvdyAqL1xuZnVuY3Rpb24gZ2V0V2luZG93RXh0ZW5zaW9ucyhvcmlnaW5OYW1lKSB7XG4gICAgcmV0dXJuIFByb21pc2VcbiAgICAgICAgLmFsbChPYmplY3RcbiAgICAgICAgLmVudHJpZXMod2luLmluamVjdGVkV2ViMylcbiAgICAgICAgLm1hcCgoW25hbWVPckhhc2gsIHsgY29ubmVjdCwgZW5hYmxlLCB2ZXJzaW9uIH1dKSA9PiBQcm9taXNlXG4gICAgICAgIC5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4oKCkgPT4gY29ubmVjdFxuICAgICAgICAvLyBuZXcgc3R5bGUsIHJldHVybmluZyBhbGwgaW5mb1xuICAgICAgICA/IGNvbm5lY3Qob3JpZ2luTmFtZSlcbiAgICAgICAgOiBlbmFibGVcbiAgICAgICAgICAgIC8vIHByZXZpb3VzIGludGVyZmFjZSwgbGVha2FnZXMgb24gbmFtZS92ZXJzaW9uXG4gICAgICAgICAgICA/IGVuYWJsZShvcmlnaW5OYW1lKS50aGVuKChlKSA9PiBvYmplY3RTcHJlYWQoeyBuYW1lOiBuYW1lT3JIYXNoLCB2ZXJzaW9uOiB2ZXJzaW9uIHx8ICd1bmtub3duJyB9LCBlKSlcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdObyBjb25uZWN0KC4uKSBvciBlbmFibGUoLi4uKSBob29rIGZvdW5kJykpKVxuICAgICAgICAuY2F0Y2goKHsgbWVzc2FnZSB9KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluaXRpYWxpemluZyAke25hbWVPckhhc2h9OiAke21lc3NhZ2V9YCk7XG4gICAgfSkpKVxuICAgICAgICAudGhlbigoZXh0cykgPT4gZXh0cy5maWx0ZXIoKGUpID0+ICEhZSkpO1xufVxuLyoqIEBpbnRlcm5hbCBFbnN1cmUgdGhlIGVuYWJsZSBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBmaWx0ZXIgYnkgZXh0ZW5zaW9ucyAqL1xuYXN5bmMgZnVuY3Rpb24gZmlsdGVyRW5hYmxlKGNhbGxlciwgZXh0ZW5zaW9ucykge1xuICAgIGlmICghd2ViM0VuYWJsZVByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbGVyKTtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlcyA9IGF3YWl0IHdlYjNFbmFibGVQcm9taXNlO1xuICAgIHJldHVybiBzb3VyY2VzLmZpbHRlcigoeyBuYW1lIH0pID0+ICFleHRlbnNpb25zIHx8XG4gICAgICAgIGV4dGVuc2lvbnMuaW5jbHVkZXMobmFtZSkpO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBFbmFibGVzIGFsbCB0aGUgcHJvdmlkZXJzIGZvdW5kIG9uIHRoZSBpbmplY3RlZCB3aW5kb3cgaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEVuYWJsZXMgYWxsIGluamVjdGVkIGV4dGVuc2lvbnMgdGhhdCBoYXMgYmVlbiBmb3VuZCBvbiB0aGUgcGFnZS4gVGhpc1xuICogc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgbWFraW5nIHVzZSBvZiBhbnkgb3RoZXIgd2ViMyogZnVuY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViM0VuYWJsZShvcmlnaW5OYW1lLCBjb21wYXRJbml0cyA9IFtdKSB7XG4gICAgaWYgKCFvcmlnaW5OYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcGFzcyBhIG5hbWUgZm9yIHlvdXIgYXBwIHRvIHRoZSB3ZWIzRW5hYmxlIGZ1bmN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGluaXRDb21wYXQgPSBjb21wYXRJbml0cy5sZW5ndGhcbiAgICAgICAgPyBQcm9taXNlLmFsbChjb21wYXRJbml0cy5tYXAoKGMpID0+IGMoKS5jYXRjaCgoKSA9PiBmYWxzZSkpKVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZShbdHJ1ZV0pO1xuICAgIHdlYjNFbmFibGVQcm9taXNlID0gZG9jdW1lbnRSZWFkeVByb21pc2UoKCkgPT4gaW5pdENvbXBhdC50aGVuKCgpID0+IGdldFdpbmRvd0V4dGVuc2lvbnMob3JpZ2luTmFtZSlcbiAgICAgICAgLnRoZW4oKHZhbHVlcykgPT4gdmFsdWVzLm1hcCgoZSkgPT4ge1xuICAgICAgICAvLyBpZiB3ZSBkb24ndCBoYXZlIGFuIGFjY291bnRzIHN1YnNjcmliZXIsIGFkZCBhIHNpbmdsZS1zaG90IHZlcnNpb25cbiAgICAgICAgaWYgKCFlLmFjY291bnRzLnN1YnNjcmliZSkge1xuICAgICAgICAgICAgZS5hY2NvdW50cy5zdWJzY3JpYmUgPSAoY2IpID0+IHtcbiAgICAgICAgICAgICAgICBlLmFjY291bnRzXG4gICAgICAgICAgICAgICAgICAgIC5nZXQoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihjYilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIHVic3Vic2NyaWJlIG5lZWRlZCwgdGhpcyBpcyBhIHNpbmdsZS1zaG90XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfSkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBbXSlcbiAgICAgICAgLnRoZW4oKHZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHZhbHVlcy5tYXAoKHsgbmFtZSwgdmVyc2lvbiB9KSA9PiBgJHtuYW1lfS8ke3ZlcnNpb259YCk7XG4gICAgICAgIGlzV2ViM0luamVjdGVkID0gd2ViM0lzSW5qZWN0ZWQoKTtcbiAgICAgICAgY29uc29sZS5pbmZvKGB3ZWIzRW5hYmxlOiBFbmFibGVkICR7dmFsdWVzLmxlbmd0aH0gZXh0ZW5zaW9uJHt2YWx1ZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9OiAke25hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfSkpKTtcbiAgICByZXR1cm4gd2ViM0VuYWJsZVByb21pc2U7XG59XG4vKipcbiAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbGwgdGhlIGFjY291bnRzIGFjcm9zcyBhbGwgcHJvdmlkZXJzXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgcmV0dXJucyB0aGUgZnVsbCBsaXN0IG9mIGFjY291bnQgYXZhaWxhYmxlIChhY3Jvc3MgYWxsIGV4dGVuc2lvbnMpIHRvXG4gKiB0aGUgcGFnZS4gRmlsdGVyaW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvZiBhIHBlci1leHRlbnNpb24sIHBlciB0eXBlIGFuZFxuICogcGVyLWdlbmVzaXNIYXNoIGJhc2lzLiBPcHRpb25hbGx5IHRoZSBhY2NvdW50cyBjYW4gYmUgZW5jb2RlZCB3aXRoIHRoZSBwcm92aWRlZFxuICogc3M1OEZvcm1hdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2ViM0FjY291bnRzKHsgYWNjb3VudFR5cGUsIGV4dGVuc2lvbnMsIGdlbmVzaXNIYXNoLCBzczU4Rm9ybWF0IH0gPSB7fSkge1xuICAgIGNvbnN0IGFjY291bnRzID0gW107XG4gICAgY29uc3Qgc291cmNlcyA9IGF3YWl0IGZpbHRlckVuYWJsZSgnd2ViM0FjY291bnRzJywgZXh0ZW5zaW9ucyk7XG4gICAgY29uc3QgcmV0cmlldmVkID0gYXdhaXQgUHJvbWlzZS5hbGwoc291cmNlcy5tYXAoYXN5bmMgKHsgYWNjb3VudHMsIG5hbWU6IHNvdXJjZSB9KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgYWNjb3VudHMuZ2V0KCk7XG4gICAgICAgICAgICByZXR1cm4gbWFwQWNjb3VudHMoc291cmNlLCBmaWx0ZXJBY2NvdW50cyhsaXN0LCBnZW5lc2lzSGFzaCwgYWNjb3VudFR5cGUpLCBzczU4Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAvLyBjYW5ub3QgaGFuZGxlIHRoaXMgb25lXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgcmV0cmlldmVkLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgICAgICBhY2NvdW50cy5wdXNoKC4uLnJlc3VsdCk7XG4gICAgfSk7XG4gICAgY29uc29sZS5pbmZvKGB3ZWIzQWNjb3VudHM6IEZvdW5kICR7YWNjb3VudHMubGVuZ3RofSBhZGRyZXNzJHthY2NvdW50cy5sZW5ndGggIT09IDEgPyAnZXMnIDogJyd9YCk7XG4gICAgcmV0dXJuIGFjY291bnRzO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBTdWJzY3JpYmVzIHRvIGFsbCB0aGUgYWNjb3VudHMgYWNyb3NzIGFsbCBwcm92aWRlcnNcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBpcyB0aGUgc3Vic2NyaXB0aW9uIHZlcnNpb24gb2YgdGhlIHdlYjNBY2NvdW50cyBpbnRlcmZhY2Ugd2l0aFxuICogdXBkYXRlcyBhcyB0byB3aGVuIG5ldyBhY2NvdW50cyBkbyBiZWNvbWUgYXZhaWxhYmxlLiBUaGUgbGlzdCBvZiBmaWx0ZXJpbmdcbiAqIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgd2ViM0FjY291bnRzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdlYjNBY2NvdW50c1N1YnNjcmliZShjYiwgeyBhY2NvdW50VHlwZSwgZXh0ZW5zaW9ucywgZ2VuZXNpc0hhc2gsIHNzNThGb3JtYXQgfSA9IHt9KSB7XG4gICAgY29uc3Qgc291cmNlcyA9IGF3YWl0IGZpbHRlckVuYWJsZSgnd2ViM0FjY291bnRzU3Vic2NyaWJlJywgZXh0ZW5zaW9ucyk7XG4gICAgY29uc3QgYWNjb3VudHMgPSB7fTtcbiAgICBjb25zdCB0cmlnZ2VyVXBkYXRlID0gKCkgPT4gY2IoT2JqZWN0XG4gICAgICAgIC5lbnRyaWVzKGFjY291bnRzKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIFtzb3VyY2UsIGxpc3RdKSA9PiB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLm1hcEFjY291bnRzKHNvdXJjZSwgZmlsdGVyQWNjb3VudHMobGlzdCwgZ2VuZXNpc0hhc2gsIGFjY291bnRUeXBlKSwgc3M1OEZvcm1hdCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKSk7XG4gICAgY29uc3QgdW5zdWJzID0gc291cmNlcy5tYXAoKHsgYWNjb3VudHM6IHsgc3Vic2NyaWJlIH0sIG5hbWU6IHNvdXJjZSB9KSA9PiBzdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBhY2NvdW50c1tzb3VyY2VdID0gcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdHJpZ2dlclVwZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVuc3Vicy5mb3JFYWNoKCh1bnN1YikgPT4ge1xuICAgICAgICAgICAgdW5zdWIoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbi8qKlxuICogQHN1bW1hcnkgRmluZHMgYSBzcGVjaWZpYyBwcm92aWRlciBiYXNlZCBvbiB0aGUgbmFtZVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHJldHJpZXZlcyBhIHNwZWNpZmljIHNvdXJjZSAoZXh0ZW5zaW9uKSBiYXNlZCBvbiB0aGUgbmFtZS4gSW4gbW9zdFxuICogY2FzZXMgaXQgc2hvdWxkIG5vdCBiZSBuZWVkZWQgdG8gY2FsbCBpdCBkaXJlY3RseSAoZS5nLiBpdCBpcyB1c2VkIGludGVybmFsbHlcbiAqIGJ5IGNhbGxzIHN1Y2ggYXMgd2ViM0Zyb21BZGRyZXNzKSBidXQgd291bGQgYWxsb3cgb3BlcmF0aW9uIG9uIGEgc3BlY2lmaWNcbiAqIGtub3duIGV4dGVuc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdlYjNGcm9tU291cmNlKHNvdXJjZSkge1xuICAgIGlmICghd2ViM0VuYWJsZVByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ3dlYjNGcm9tU291cmNlJyk7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZXMgPSBhd2FpdCB3ZWIzRW5hYmxlUHJvbWlzZTtcbiAgICBjb25zdCBmb3VuZCA9IHNvdXJjZSAmJiBzb3VyY2VzLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBzb3VyY2UpO1xuICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3ZWIzRnJvbVNvdXJjZTogVW5hYmxlIHRvIGZpbmQgYW4gaW5qZWN0ZWQgJHtzb3VyY2V9YCk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbn1cbi8qKlxuICogQHN1bW1hcnkgRmluZCBhIHNwZWNpZmljIHByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgYSBzcGVjaWZpYyBhZGRyZXNzXG4gKiBAZGVzY3JpcHRpb25cbiAqIEJhc2VkIG9uIGFuIGFkZHJlc3MsIHJldHVybiB0aGUgcHJvdmlkZXIgdGhhdCBoYXMgbWFrZXMgdGhpcyBhZGRyZXNzXG4gKiBhdmFpbGFibGUgdG8gdGhlIHBhZ2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3ZWIzRnJvbUFkZHJlc3MoYWRkcmVzcykge1xuICAgIGlmICghd2ViM0VuYWJsZVByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ3dlYjNGcm9tQWRkcmVzcycpO1xuICAgIH1cbiAgICBjb25zdCBhY2NvdW50cyA9IGF3YWl0IHdlYjNBY2NvdW50cygpO1xuICAgIGxldCBmb3VuZDtcbiAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICBjb25zdCBhY2NvdW50VThhID0gZGVjb2RlQWRkcmVzcyhhZGRyZXNzKTtcbiAgICAgICAgZm91bmQgPSBhY2NvdW50cy5maW5kKChhY2NvdW50KSA9PiB1OGFFcShkZWNvZGVBZGRyZXNzKGFjY291bnQuYWRkcmVzcyksIGFjY291bnRVOGEpKTtcbiAgICB9XG4gICAgaWYgKCFmb3VuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdlYjNGcm9tQWRkcmVzczogVW5hYmxlIHRvIGZpbmQgaW5qZWN0ZWQgJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICByZXR1cm4gd2ViM0Zyb21Tb3VyY2UoZm91bmQubWV0YS5zb3VyY2UpO1xufVxuLyoqXG4gKiBAc3VtbWFyeSBMaXN0IGFsbCBwcm92aWRlcnMgZXhwb3NlZCBieSBvbmUgc291cmNlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZvciBleHRlbnNpb25zIHRoYXQgc3VwcGx5IFJQQyBwcm92aWRlcnMsIHRoaXMgY2FsbCB3b3VsZCByZXR1cm4gdGhlIGxpc3RcbiAqIG9mIFJQQyBwcm92aWRlcnMgdGhhdCBhbnkgZXh0ZW5zaW9uIG1heSBzdXBwbHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3ZWIzTGlzdFJwY1Byb3ZpZGVycyhzb3VyY2UpIHtcbiAgICBjb25zdCB7IHByb3ZpZGVyIH0gPSBhd2FpdCB3ZWIzRnJvbVNvdXJjZShzb3VyY2UpO1xuICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFeHRlbnNpb24gJHtzb3VyY2V9IGRvZXMgbm90IGV4cG9zZSBhbnkgcHJvdmlkZXJgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwcm92aWRlci5saXN0UHJvdmlkZXJzKCk7XG59XG4vKipcbiAqIEBzdW1tYXJ5IFN0YXJ0IGFuIFJQQyBwcm92aWRlciBwcm92aWRlciBieSBhIHNwZWNpZmljIHNvdXJjZVxuICogQGRlc2NyaXB0aW9uXG4gKiBGb3IgZXh0ZW5zaW9ucyB0aGF0IHN1cHBseSBSUEMgcHJvdmlkZXJzLCB0aGlzIGNhbGwgd291bGQgcmV0dXJuIGFuXG4gKiBlbmFibGVkIHByb3ZpZGVyIChpbml0aWFsaXplZCB3aXRoIHRoZSBzcGVjaWZpYyBrZXkpIGZyb20gdGhlXG4gKiBzcGVjaWZpZWQgZXh0ZW5zaW9uIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdlYjNVc2VScGNQcm92aWRlcihzb3VyY2UsIGtleSkge1xuICAgIGNvbnN0IHsgcHJvdmlkZXIgfSA9IGF3YWl0IHdlYjNGcm9tU291cmNlKHNvdXJjZSk7XG4gICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dGVuc2lvbiAke3NvdXJjZX0gZG9lcyBub3QgZXhwb3NlIGFueSBwcm92aWRlcmApO1xuICAgIH1cbiAgICBjb25zdCBtZXRhID0gYXdhaXQgcHJvdmlkZXIuc3RhcnRQcm92aWRlcihrZXkpO1xuICAgIHJldHVybiB7IG1ldGEsIHByb3ZpZGVyIH07XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QvZXh0ZW5zaW9uLWRhcHAnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcwLjQ3LjUnIH07XG4iLCJleHBvcnQgZnVuY3Rpb24gZG9jdW1lbnRSZWFkeVByb21pc2UoY3JlYXRvcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgcmVzb2x2ZShjcmVhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiByZXNvbHZlKGNyZWF0b3IoKSkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBVOEFfV1JBUF9FVEhFUkVVTSwgVThBX1dSQVBfUE9TVEZJWCwgVThBX1dSQVBfUFJFRklYLCB1OGFJc1dyYXBwZWQsIHU4YVVud3JhcEJ5dGVzLCB1OGFXcmFwQnl0ZXMgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgY29uc3QgRVRIRVJFVU0gPSBVOEFfV1JBUF9FVEhFUkVVTTtcbmV4cG9ydCBjb25zdCBQT1NURklYID0gVThBX1dSQVBfUE9TVEZJWDtcbmV4cG9ydCBjb25zdCBQUkVGSVggPSBVOEFfV1JBUF9QUkVGSVg7XG5leHBvcnQgY29uc3QgaXNXcmFwcGVkID0gdThhSXNXcmFwcGVkO1xuZXhwb3J0IGNvbnN0IHVud3JhcEJ5dGVzID0gdThhVW53cmFwQnl0ZXM7XG5leHBvcnQgY29uc3Qgd3JhcEJ5dGVzID0gdThhV3JhcEJ5dGVzO1xuIiwiZXhwb3J0IGNvbnN0IGtub3duR2VuZXNpcyA9IHtcbiAgICBhY2FsYTogW1xuICAgICAgICAnMHhmYzQxYjliZDhlZjhmZTUzZDU4YzdlYTY3Yzc5NGM3ZWM5YTczZGFmMDVlNmQ1NGIxNGZmNjM0MmM5OWJhNjRjJ1xuICAgIF0sXG4gICAgYWp1bmE6IFtcbiAgICAgICAgJzB4ZTM1OGViMWQxMWIzMTI1NWEyODZjMTJlNDRmZTY3ODBiN2VkYjE3MWQ2NTc5MDVhOTdlMzlmNzFkOWM2YzNlZSdcbiAgICBdLFxuICAgICdhbGVwaC1ub2RlJzogW1xuICAgICAgICAnMHg3MDI1NWI0ZDI4ZGUwZmM0ZTFhMTkzZDdlMTc1YWQxY2NlZjQzMTU5ODIxMWM1NTUzOGYxMDE4NjUxYTAzNDRlJ1xuICAgIF0sXG4gICAgYXN0YXI6IFtcbiAgICAgICAgJzB4OWViNzZjNTE4NGM0YWI4Njc5ZDJkNWQ4MTlmZGY5MGI5YzAwMTQwM2U5ZTE3ZGEyZTE0YjZkOGFlYzQwMjljNidcbiAgICBdLFxuICAgIGJhc2lsaXNrOiBbXG4gICAgICAgICcweGE4NWNmYjliOWZkNGQ2MjJhNWIyODI4OWEwMjM0N2FmOTg3ZDhmNzNmYTMxMDg0NTBlMmI0YTExYzFjZTU3NTUnXG4gICAgXSxcbiAgICBiaWZyb3N0OiBbXG4gICAgICAgICcweDI2MmUxYjJhZDcyODQ3NWZkNmZlODhlNjJkMzRjMjAwYWJlNmZkNjkzOTMxZGRhZDE0NDA1OWIxZWI4ODRlNWInXG4gICAgXSxcbiAgICAnYmlmcm9zdC1rdXNhbWEnOiBbXG4gICAgICAgICcweDlmMjhjNmE2OGUwZmM5NjQ2ZWZmNjQ5MzU2ODRmNmVlZWVjZTUyN2UzN2JiZTFmMjEzZDIyY2FhMWQ5ZDZiZWQnXG4gICAgXSxcbiAgICBiaXR0ZW5zb3I6IFtcbiAgICAgICAgJzB4MmYwNTU1Y2M3NmZjMjg0MGEyNWE2ZWEzYjk2MzcxNDY4MDZmMWY0NGIwOTBjMTc1ZmZkZTJhN2U1YWIzNmMwMydcbiAgICBdLFxuICAgIGNlbnRyaWZ1Z2U6IFtcbiAgICAgICAgJzB4YjNkYjQxNDIxNzAyZGY5YTdmY2FjNjJiNTNmZmVhYzg1Zjc4NTNjYzRlNjg5ZTBiOTNhZWIzZGIxOGMwOWQ4MicsXG4gICAgICAgICcweDY3ZGRkZjI2NzNiNjllNWY4NzVmNmYyNTI3NzQ5NTgzNDM5OGVhZmQ2N2Y0OTJlMDlmM2YzMzQ1ZTAwM2QxYjUnXG4gICAgXSxcbiAgICBjZXJlOiBbXG4gICAgICAgICcweDgxNDQzODM2YTlhMjRjYWFhMjNmMTI0MTg5N2QxMjM1NzE3NTM1NzExZDFkM2ZlMjRlYWU0ZmRjOTQyYzA5MmMnXG4gICAgXSxcbiAgICBjb21wb3NhYmxlOiBbXG4gICAgICAgICcweGRhYWI4ZGY3NzZlYjUyZWM2MDRhNWRmNWQzODhiYjYyYTA1MGEwYWFlYzQ1NTZhNjQyNjViOWQ0Mjc1NTU1MmQnXG4gICAgXSxcbiAgICBkYXJ3aW5pYTogW1xuICAgICAgICAnMHhlNzE1NzhiMzdhN2M3OTliMGFiNGVlODdmZmE2ZjA1OWE2Yjk4ZjcxZjA2ZmI4Yzg0YThkODgwMTNhNTQ4YWQ2J1xuICAgIF0sXG4gICAgJ2RvY2stbWFpbm5ldCc6IFtcbiAgICAgICAgJzB4NmJmZTI0ZGNhMmEzYmUxMGYyMjIxMjY3OGFjMTNhNjQ0NmVjNzY0MTAzYzBmMzQ3MWM3MTYwOWVhYzM4NGFhZScsXG4gICAgICAgICcweGY3MzQ2N2M2NTQ0YWE2OGRmMmVlNTQ2YjEzNWY5NTVjNDZiOTBmYTYyN2U5YjVkNzkzNWY0MTA2MWJiOGE1YTknXG4gICAgXSxcbiAgICBlZGdld2FyZTogW1xuICAgICAgICAnMHg3NDJhMmNhNzBjMmZkYTZjZWU0ZjhkZjk4ZDY0YzRjNjcwYTA1MmQ5NTY4MDU4OTgyZGFkOWQ1YTdhMTM1YzViJ1xuICAgIF0sXG4gICAgZW5qaW46IFtcbiAgICAgICAgJzB4ZDg3NjFkM2M4OGYyNmRjMTI4NzVjMDBkMzE2NWY3ZDY3MjQzZDU2ZmM4NWI0Y2YxOTkzNzYwMWE3OTE2ZTVhOSdcbiAgICBdLFxuICAgIGVxdWlsaWJyaXVtOiBbXG4gICAgICAgICcweDZmMWE4MDBkZTNkYWZmN2Y1ZTAzN2RkZjY2YWIyMmNlMDNhYjkxODc0ZGViZWRkYjEwODZmNWY3ZGJkNDg5MjUnXG4gICAgXSxcbiAgICBnZW5zaGlybzogW1xuICAgICAgICAnMHg5YjhjZWZjMGViNWM1NjhiNTI3OTk4YmRkNzZjMTg0ZTJiNzZhZTU2MWJlNzZlNDY2NzA3MjIzMDIxN2VhMjQzJ1xuICAgIF0sXG4gICAgaHlkcmFkeDogW1xuICAgICAgICAnMHhhZmRjMTg4ZjQ1YzcxZGFjYmFhMGI2MmUxNmE5MWY3MjZjN2I4Njk5YTk3NDhjZGY3MTU0NTlkZTZiN2YzNjZkJywgLy8gSHlkcmFEWCBQYXJhY2hhaW5cbiAgICAgICAgJzB4ZDJhNjIwYzI3ZWM1Y2JjNTYyMWZmOWE1MjI2ODk4OTUwNzRmN2NjYTBkMDhlNzEzNGE3ODA0ZTFhM2JhODZmYycsIC8vIFNuYWtlbmV0IEdlbjMtMVxuICAgICAgICAnMHgxMGFmNmU4NDIzNDQ3N2Q4NGRjNTcyYmFjMDc4OTgxM2IyNTRhYTQ5MDc2N2VkMDZmYjk1OTExOTFkMTA3M2Y5JywgLy8gU25ha2VuZXQgR2VuM1xuICAgICAgICAnMHgzZDc1NTA3ZGQ0NjMwMTc2N2U2MDEyNjU3OTFkYTFkOWNiNDdiNmViYzk0ZTg3MzQ3YjYzNWU1YmY1OGJkMDQ3JywgLy8gU25ha2VuZXQgR2VuMlxuICAgICAgICAnMHgwZWQzMmJmY2FiNGE4MzUxN2ZhYzg4ZjJhYTdjYmMyZjg4ZDNhYjkzYmU5YTEyYjYxODhhMDM2YmY4YTk0M2MyJyAvLyBTbmFrZW5ldCBHZW4xXG4gICAgXSxcbiAgICAnaW50ZXJsYXktcGFyYWNoYWluJzogW1xuICAgICAgICAnMHhiZjg4ZWZlNzBlOWUwZTkxNjQxNmU4YmVkNjFmMmI0NTcxN2Y1MTdkN2YzNTIzZTMzYzdiMDAxZTVmZmNiYzcyJ1xuICAgIF0sXG4gICAga2FydXJhOiBbXG4gICAgICAgICcweGJhZjVhYWJlNDA2NDZkMTFmMGVlOGFiYmRjNjRmNGE0Yjc2NzQ5MjVjYmEwOGU0YTA1ZmY5ZWJlZDZlMjEyNmInXG4gICAgXSxcbiAgICBraGFsYTogW1xuICAgICAgICAnMHhkNDM1NDBiYTZkM2ViNDg5N2MyOGE3N2Q0OGNiNWI3MjlmZWEzNzYwM2NiYmZjN2E4NmE3M2I3MmFkYjNiZThkJ1xuICAgIF0sXG4gICAga3VsdXB1OiBbXG4gICAgICAgICcweGY3YTk5ZDNjYjkyODUzZDAwZDUyNzVjOTcxYzEzMmMwNzQ2MzYyNTY1ODNmZWU1M2IzYmJlNjBkN2I4NzY5YmEnXG4gICAgXSxcbiAgICBrdXNhbWE6IFtcbiAgICAgICAgJzB4YjBhOGQ0OTMyODVjMmRmNzMyOTBkZmI3ZTYxZjg3MGYxN2I0MTgwMTE5N2ExNDljYTkzNjU0NDk5ZWEzZGFmZScsIC8vIEt1c2FtYSBDQzMsXG4gICAgICAgICcweGUzNzc3ZmE5MjJjYWZiZmYyMDBjYWRlYWVhMWE3NmJkNzg5OGFkNWI4OWY3ODQ4OTk5MDU4YjUwZTcxNWY2MzYnLCAvLyBLdXNhbWEgQ0MyXG4gICAgICAgICcweDNmZDdiOWViNmEwMDM3NmU1YmU2MWYwMWFiYjQyOWZmYjBiMTA0YmUwNWVhZmY0ZDQ1OGRhNDhmY2Q0MjViYWYnIC8vIEt1c2FtYSBDQzFcbiAgICBdLFxuICAgIG1hdHJpeGNoYWluOiBbXG4gICAgICAgICcweDNhZjRmZjQ4ZWM3NmQyZWZjODQ3NjczMGY0MjNhYzA3ZTI1YWQ0OGY1ZjRjOWRjMzljNzc4YjE2NGQ4MDg2MTUnXG4gICAgXSxcbiAgICBub2RsZTogW1xuICAgICAgICAnMHg5N2RhN2VkZTk4ZDdiYWQ0ZTM2YjRkNzM0YjYwNTU0MjVhM2JlMDM2ZGEyYTMzMmVhNWE3MDM3NjU2NDI3YTIxJ1xuICAgIF0sXG4gICAgb3JpZ2ludHJhaWw6IFtcbiAgICAgICAgJzB4ZTdlMDk2MjMyNGEzYjg2YzgzNDA0ZGJlYTQ4M2YyNWZiNWRhYjRjMjI0NzkxYzgxYjc1NmNmYzk0ODAwNjE3NCdcbiAgICBdLFxuICAgIHAzZDogW1xuICAgICAgICAnMHg2YzU4OTQ4MzdhZDg5YjZkOTJiMTE0YTJmYjNlYWZhOGZlM2QyNmE1NDg0OGUzNDQ3MDE1NDQyY2Q2ZWY0ZTY2J1xuICAgIF0sXG4gICAgcGFyYWxsZWw6IFtcbiAgICAgICAgJzB4ZTYxYTQxYzUzZjVkY2QwYmViMDlkZjkzYjM0NDAyYWFkYTQ0Y2IwNTExN2I3MTA1OWNjZTQwYTI3MjNhNGU5NydcbiAgICBdLFxuICAgIHBlbmR1bHVtOiBbXG4gICAgICAgICcweDVkM2MyOTg2MjJkNTYzNGVkMDE5YmY2MWVhNGI3MTY1NTAzMDAxNWJkZTliZWIwZDZhMjQ3NDM3MTQ0NjJjODYnXG4gICAgXSxcbiAgICBwaGFsYTogW1xuICAgICAgICAnMHgxYmI5NjlkODU5NjVlNGJiNWE2NTFhYmJlZGYyMWE1NGI2YjMxYTIxZjY2YjU0MDFjYzNmMWUyODYyNjhkNzM2J1xuICAgIF0sXG4gICAgcGljYXNzbzogW1xuICAgICAgICAnMHg2ODExYTMzOTY3M2M5ZGFhODk3OTQ0ZGNkYWM5OWM2ZTI5MzljYzg4MjQ1ZWQyMTk1MWEwYTNjOWEyYmU3NWJjJyxcbiAgICAgICAgJzB4ZThlN2YwZjRjNGY1YTAwNzIwYjQ4MjFkYmZkZGVmZWE3NDkwYmNmMGIxOTAwOTk2MWNjNDY5NTc5ODRlMmMxYydcbiAgICBdLFxuICAgIHBvbGthZGV4OiBbXG4gICAgICAgICcweDM5MjBiY2I0OTYwYTFlZWY1NTgwY2Q1MzY3ZmYzZjQzMGVlZjA1Mjc3NGY3ODQ2ODg1MmY3YjljYjM5ZjhhM2MnXG4gICAgXSxcbiAgICBwb2xrYWRvdDogW1xuICAgICAgICAnMHg5MWIxNzFiYjE1OGUyZDM4NDhmYTIzYTlmMWMyNTE4MmZiOGUyMDMxM2IyYzFlYjQ5MjE5ZGE3YTcwY2U5MGMzJ1xuICAgIF0sXG4gICAgcG9seW1lc2g6IFtcbiAgICAgICAgJzB4NmZiZDc0ZTVlMWQwYTYxZDUyY2NmZTlkNGFkYWVkMTZkZDNhN2NhYTM3YzZiYzRkMGMyZmExMmU4YjJmNDA2MydcbiAgICBdLFxuICAgIHF1YXJ0ejogW1xuICAgICAgICAnMHhjZDRkNzMyMjAxZWJlNWQ2YjAxNGVkZGEwNzFjNDIwM2UxNjg2NzMwNTMzMjMwMWRjOGQwOTIwNDRiMjhlNTU0J1xuICAgIF0sXG4gICAgcm9jb2NvOiBbXG4gICAgICAgICcweDY0MDhkZTc3MzdjNTljMjM4ODkwNTMzYWYyNTg5NmEyYzIwNjA4ZDhiMzgwYmIwMTAyOWFjYjM5Mjc4MTA2M2UnLFxuICAgICAgICAnMHhhYWYyY2QxYjc0YjVmNzI2ODk1OTIxMjU5NDIxYjUzNDEyNDcyNjI2Mzk4MjUyMjE3NDE0NzA0NmI4ODI3ODk3JyxcbiAgICAgICAgJzB4MDM3ZjVmM2M4ZTY3YjMxNDA2MjAyNWZjODg2ZmNkNjIzOGVhMjVhNGE5YjQ1ZGNlOGQyNDY4MTVjOWViZTc3MCcsXG4gICAgICAgICcweGMxOTZmODEyNjBjZjE2ODYxNzJiNDdhNzljZjAwMjEyMDczNWQ3Y2IwZWIxNDc0ZThhZGNlNTY2MTg0NTZmZmYnLFxuICAgICAgICAnMHhmNmU5OTgzYzM3YmFmNjg4NDZmZWRhZmUyMWU1NjcxODc5MGUzOWZiMWM1ODJhYmM0MDhiODFiYzdiMjA4ZjlhJyxcbiAgICAgICAgJzB4NWZjZTY4N2RhMzkzMDVkZmU2ODJiMTE3ZjA4MjBiMzE5MzQ4ZThiYjM3ZWIxNmNmMzRhY2JmNmEyMDJkZTlkOScsXG4gICAgICAgICcweGU3YzNkNWVkZGU3ZGI5NjQzMTdjZDliNTFhM2EwNTlkN2NkOTlmODFiZGJjZTE0OTkwMDQ3MzU0MzM0Yzk3NzknLFxuICAgICAgICAnMHgxNjExZTFkYmYwNDA1Mzc5Yjg2MWUyZTI3ZGFhOTBmNDgwYjJlNmQzNjgyNDE0YTgwODM1YTUyZThjYjhhMjE1JyxcbiAgICAgICAgJzB4MzQzNDQyZjEyZmE3MTU0ODlhODcxNGU3OWE3YjI2NGVhODhjMGQ1YjhjNjZiNjg0YTc3ODhhNTE2MDMyZjZiOScsXG4gICAgICAgICcweDc4YmNkNTMwYzZiM2EwNjhiYzE3NDczY2Y1ZDJhZmY5YzI4NzEwMmJlZDlhZjNhZTNjNDFjMzNiOWQ2YzYxNDcnLFxuICAgICAgICAnMHg0NzM4MWVlMDY5NzE1M2Q2NDQwNGZjNTc4MzkyYzhmZDVjYmE5MDczMzkxOTA4ZjQ2Yzg4ODQ5ODQxNTY0N2JkJyxcbiAgICAgICAgJzB4MTljMGU0ZmE4YWI3NWY1YWM3ODY1ZTBiOGY3NGZmOTFlYjlhMTAwZDMzNmY0MjNjZDAxM2E4YmVmYmE0MDI5OSdcbiAgICBdLFxuICAgIHNvcmE6IFtcbiAgICAgICAgJzB4N2U0ZTMyZDBmZWFmZDRmOWM5NDE0YjBiZTg2MzczZjlhMWVmYTkwNDgwOWI2ODM0NTNhOWFmNjg1NmQzOGFkNSdcbiAgICBdLFxuICAgIHN0YWZpOiBbXG4gICAgICAgICcweDI5MGE0MTQ5ZjA5ZWEwZTQwMmM3NGMxYzdlOTZhZTQyMzk1ODg1NzdmZTc4OTMyZjk0ZjU0MDRjNjgyNDNkODAnXG4gICAgXSxcbiAgICBzdGF0ZW1pbmU6IFtcbiAgICAgICAgJzB4NDgyMzllZjYwN2Q3OTI4ODc0MDI3YTQzYTY3Njg5MjA5NzI3ZGZiM2QzZGM1ZTViMDNhMzliZGMyZWRhNzcxYSdcbiAgICBdLFxuICAgIHN0YXRlbWludDogW1xuICAgICAgICAnMHg2OGQ1NmYxNWY4NWQzMTM2OTcwZWMxNjk0NjA0MGJjMTc1MjY1NGU5MDYxNDdmN2U0M2U5ZDUzOWQ3YzNkZTJmJ1xuICAgIF0sXG4gICAgc3Vic29jaWFsOiBbXG4gICAgICAgICcweDBiZDcyYzFjMzA1MTcyZTEyNzUyNzhhYWViM2YxNjFlMDJlY2NiN2E4MTllNjNmNjJkNDdiZDUzYTI4MTg5ZjgnXG4gICAgXSxcbiAgICB0ZXJub2E6IFtcbiAgICAgICAgJzB4Njg1OWM4MWNhOTVlZjYyNGM5ZGZlNGRjNmUzMzgxYzMzZTVkNjUwOWUzNWUxNDcwOTJiZmJjNzgwZjc3N2M0ZSdcbiAgICBdLFxuICAgIHVuaXF1ZTogW1xuICAgICAgICAnMHg4NDMyMmQ5Y2RkYmYzNTA4OGYxZTU0ZTlhODVjOTY3YTQxYTU2YTRmNDM0NDU3NjgxMjVlNjFhZjE2NmM3ZDMxJ1xuICAgIF0sXG4gICAgdnRiOiBbXG4gICAgICAgICcweDI4NmJjODQxNGM3MDAwY2UxZDZlZTZhODM0ZTI5YTU0YzE3ODQ4MTRiNzYyNDNlYjc3ZWQwYjJjNTU3M2M2MGYnLFxuICAgICAgICAnMHg3NDgzYjg5NTcyZmIyYmQ2ODdjN2I5YTkzYjI0MmQwYjIzN2Y5YWJhNDYzYWJhMDdlYzI0NTAzOTMxMDM4YWFhJ1xuICAgIF0sXG4gICAgd2VzdGVuZDogW1xuICAgICAgICAnMHhlMTQzZjIzODAzYWM1MGU4ZjZmOGU2MjY5NWQxY2U5ZTRlMWQ2OGFhMzZjMWNkMmNmZDE1MzQwMjEzZjM0MjNlJ1xuICAgIF0sXG4gICAgeHhuZXR3b3JrOiBbXG4gICAgICAgICcweDUwZGQ1ZDIwNjkxN2JmMTA1MDJjNjhmYjRkMThhNTlmYzhhYTMxNTg2ZjRlODg1NmI0OTNlNDM1NDRhYTgyYWEnXG4gICAgXSxcbiAgICB6ZWl0Z2Vpc3Q6IFtcbiAgICAgICAgJzB4MWJmMmEyZWNiNGE4NjhkZTY2ZWE4NjEwZjJjZTdjOGM0MzcwNjU2MWI2NDc2MDMxMzE1ZjY2NDBmZTM4ZTA2MCdcbiAgICBdXG59O1xuIiwiZXhwb3J0IGNvbnN0IGtub3duSWNvbiA9IHtcbiAgICBjZW50cmlmdWdlOiAncG9sa2Fkb3QnLFxuICAgIGt1c2FtYTogJ3BvbGthZG90JyxcbiAgICBwb2xrYWRvdDogJ3BvbGthZG90JyxcbiAgICBzb3JhOiAncG9sa2Fkb3QnLFxuICAgIHN0YXRlbWluZTogJ3BvbGthZG90JyxcbiAgICBzdGF0ZW1pbnQ6ICdwb2xrYWRvdCcsXG4gICAgd2VzdG1pbnQ6ICdwb2xrYWRvdCdcbn07XG4iLCJleHBvcnQgY29uc3Qga25vd25MZWRnZXIgPSB7XG4gICAgYWNhbGE6IDB4MDAwMDAzMTMsXG4gICAgYWp1bmE6IDB4MDAwMDAxNjIsXG4gICAgJ2FsZXBoLW5vZGUnOiAweDAwMDAwMjgzLFxuICAgIGFzdGFyOiAweDAwMDAwMzJhLFxuICAgIGJpZnJvc3Q6IDB4MDAwMDAzMTQsXG4gICAgJ2JpZnJvc3Qta3VzYW1hJzogMHgwMDAwMDMxNCxcbiAgICBjZW50cmlmdWdlOiAweDAwMDAwMmViLFxuICAgIGNvbXBvc2FibGU6IDB4MDAwMDAxNjIsXG4gICAgZGFyd2luaWE6IDB4MDAwMDAxNjIsXG4gICAgJ2RvY2stbWFpbm5ldCc6IDB4MDAwMDAyNTIsXG4gICAgZWRnZXdhcmU6IDB4MDAwMDAyMGIsXG4gICAgZW5qaW46IDB4MDAwMDA0ODMsXG4gICAgZXF1aWxpYnJpdW06IDB4MDVmNWUwZmQsXG4gICAgZ2Vuc2hpcm86IDB4MDVmNWUwZmMsXG4gICAgaHlkcmFkeDogMHgwMDAwMDE2MixcbiAgICAnaW50ZXJsYXktcGFyYWNoYWluJzogMHgwMDAwMDE2MixcbiAgICBrYXJ1cmE6IDB4MDAwMDAyYWUsXG4gICAga2hhbGE6IDB4MDAwMDAxYjIsXG4gICAga3VzYW1hOiAweDAwMDAwMWIyLFxuICAgIG1hdHJpeGNoYWluOiAweDAwMDAwNDgzLFxuICAgIG5vZGxlOiAweDAwMDAwM2ViLFxuICAgIG9yaWdpbnRyYWlsOiAweDAwMDAwMTYyLFxuICAgIHBhcmFsbGVsOiAweDAwMDAwMTYyLFxuICAgIHBlbmR1bHVtOiAweDAwMDAwMTYyLFxuICAgIHBoYWxhOiAweDAwMDAwMTYyLFxuICAgIHBpY2Fzc286IDB4MDAwMDAxYjIsXG4gICAgcG9sa2FkZXg6IDB4MDAwMDAzMWYsXG4gICAgcG9sa2Fkb3Q6IDB4MDAwMDAxNjIsXG4gICAgcG9seW1lc2g6IDB4MDAwMDAyNTMsXG4gICAgcXVhcnR6OiAweDAwMDAwMjc3LFxuICAgIHNvcmE6IDB4MDAwMDAyNjksXG4gICAgc3RhZmk6IDB4MDAwMDAzOGIsXG4gICAgc3RhdGVtaW5lOiAweDAwMDAwMWIyLCAvLyBjb21tb24tZ29vZCBvbiBLdXNhbWEsIHNoYXJlcyBkZXJpdmF0aW9uXG4gICAgc3RhdGVtaW50OiAweDAwMDAwMTYyLCAvLyBjb21tb24tZ29vZCBvbiBQb2xrYWRvdCwgc2hhcmVzIGRlcml2YXRpb25cbiAgICB0ZXJub2E6IDB4MDAwMDNlMyxcbiAgICB1bmlxdWU6IDB4MDAwMDAyOTUsXG4gICAgdnRiOiAweDAwMDAwMmI2LFxuICAgIHh4bmV0d29yazogMHgwMDAwMDdhMyxcbiAgICB6ZWl0Z2Vpc3Q6IDB4MDAwMDAxNjJcbn07XG4iLCJleHBvcnQgY29uc3Qga25vd25UZXN0bmV0ID0ge1xuICAgICcnOiB0cnVlLCAvLyB0aGlzIGlzIHRoZSBkZWZhdWx0IG5vbi1uZXR3b3JrIGVudHJ5XG4gICAgJ2Nlc3MtdGVzdG5ldCc6IHRydWUsXG4gICAgJ2RvY2stdGVzdG5ldCc6IHRydWUsXG4gICAganVwaXRlcjogdHJ1ZSxcbiAgICAnbWF0aGNoYWluLXRlc3RuZXQnOiB0cnVlLFxuICAgIHAzZHQ6IHRydWUsXG4gICAgc3Vic3BhY2VfdGVzdG5ldDogdHJ1ZSxcbiAgICAnemVyby1hbHBoYXZpbGxlJzogdHJ1ZVxufTtcbiIsImltcG9ydCBrbm93blN1YnN0cmF0ZSBmcm9tICdAc3Vic3RyYXRlL3NzNTgtcmVnaXN0cnknO1xuaW1wb3J0IHsga25vd25HZW5lc2lzLCBrbm93bkljb24sIGtub3duTGVkZ2VyLCBrbm93blRlc3RuZXQgfSBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmNvbnN0IFVOU09SVEVEID0gWzAsIDIsIDQyXTtcbmNvbnN0IFRFU1RORVRTID0gWyd0ZXN0bmV0J107XG5mdW5jdGlvbiB0b0V4cGFuZGVkKG8pIHtcbiAgICBjb25zdCBuZXR3b3JrID0gby5uZXR3b3JrIHx8ICcnO1xuICAgIGNvbnN0IG5hbWVQYXJ0cyA9IG5ldHdvcmsucmVwbGFjZSgvXy9nLCAnLScpLnNwbGl0KCctJyk7XG4gICAgY29uc3QgbiA9IG87XG4gICAgLy8gbGVkZ2VyIGFkZGl0aW9uc1xuICAgIG4uc2xpcDQ0ID0ga25vd25MZWRnZXJbbmV0d29ya107XG4gICAgbi5oYXNMZWRnZXJTdXBwb3J0ID0gISFuLnNsaXA0NDtcbiAgICAvLyBnZW5lcmFsIGl0ZW1zXG4gICAgbi5nZW5lc2lzSGFzaCA9IGtub3duR2VuZXNpc1tuZXR3b3JrXSB8fCBbXTtcbiAgICBuLmljb24gPSBrbm93bkljb25bbmV0d29ya10gfHwgJ3N1YnN0cmF0ZSc7XG4gICAgLy8gZmlsdGVyaW5nXG4gICAgbi5pc1Rlc3RuZXQgPSAhIWtub3duVGVzdG5ldFtuZXR3b3JrXSB8fCBURVNUTkVUUy5pbmNsdWRlcyhuYW1lUGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdKTtcbiAgICBuLmlzSWdub3JlZCA9IG4uaXNUZXN0bmV0IHx8ICghKG8uc3RhbmRhcmRBY2NvdW50ICYmXG4gICAgICAgIG8uZGVjaW1hbHM/Lmxlbmd0aCAmJlxuICAgICAgICBvLnN5bWJvbHM/Lmxlbmd0aCkgJiZcbiAgICAgICAgby5wcmVmaXggIT09IDQyKTtcbiAgICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIGZpbHRlclNlbGVjdGFibGUoeyBnZW5lc2lzSGFzaCwgcHJlZml4IH0pIHtcbiAgICByZXR1cm4gISFnZW5lc2lzSGFzaC5sZW5ndGggfHwgcHJlZml4ID09PSA0Mjtcbn1cbmZ1bmN0aW9uIGZpbHRlckF2YWlsYWJsZShuKSB7XG4gICAgcmV0dXJuICFuLmlzSWdub3JlZCAmJiAhIW4ubmV0d29yaztcbn1cbmZ1bmN0aW9uIHNvcnROZXR3b3JrcyhhLCBiKSB7XG4gICAgY29uc3QgaXNVblNvcnRlZEEgPSBVTlNPUlRFRC5pbmNsdWRlcyhhLnByZWZpeCk7XG4gICAgY29uc3QgaXNVblNvcnRlZEIgPSBVTlNPUlRFRC5pbmNsdWRlcyhiLnByZWZpeCk7XG4gICAgcmV0dXJuIGlzVW5Tb3J0ZWRBID09PSBpc1VuU29ydGVkQlxuICAgICAgICA/IGlzVW5Tb3J0ZWRBXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpXG4gICAgICAgIDogaXNVblNvcnRlZEFcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogMTtcbn1cbmV4cG9ydCBjb25zdCBhbGxOZXR3b3JrcyA9IGtub3duU3Vic3RyYXRlLm1hcCh0b0V4cGFuZGVkKTtcbmV4cG9ydCBjb25zdCBhdmFpbGFibGVOZXR3b3JrcyA9IGFsbE5ldHdvcmtzLmZpbHRlcihmaWx0ZXJBdmFpbGFibGUpLnNvcnQoc29ydE5ldHdvcmtzKTtcbmV4cG9ydCBjb25zdCBzZWxlY3RhYmxlTmV0d29ya3MgPSBhdmFpbGFibGVOZXR3b3Jrcy5maWx0ZXIoZmlsdGVyU2VsZWN0YWJsZSk7XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlLCBwdWJsaXNoUmVwbGF5LCByZWZDb3VudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgcnBjRGVmaW5pdGlvbnMgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMnO1xuaW1wb3J0IHsgaGV4VG9VOGEsIGlzRnVuY3Rpb24sIGlzTnVsbCwgaXNVbmRlZmluZWQsIGxhenlNZXRob2QsIGxvZ2dlciwgbWVtb2l6ZSwgb2JqZWN0U3ByZWFkLCB1OGFDb25jYXQsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZHJyLCByZWZDb3VudERlbGF5IH0gZnJvbSAnLi91dGlsL2luZGV4LmpzJztcbmV4cG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWwvaW5kZXguanMnO1xuY29uc3QgbCA9IGxvZ2dlcigncnBjLWNvcmUnKTtcbmNvbnN0IEVNUFRZX01FVEEgPSB7XG4gICAgZmFsbGJhY2s6IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllcjogeyBpc09wdGlvbmFsOiB0cnVlIH0sXG4gICAgdHlwZToge1xuICAgICAgICBhc01hcDogeyBsaW5rZWQ6IHsgaXNUcnVlOiBmYWxzZSB9IH0sXG4gICAgICAgIGlzTWFwOiBmYWxzZVxuICAgIH1cbn07XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBsb2dFcnJvck1lc3NhZ2UobWV0aG9kLCB7IG5vRXJyb3JMb2csIHBhcmFtcywgdHlwZSB9LCBlcnJvcikge1xuICAgIGlmIChub0Vycm9yTG9nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbC5lcnJvcihgJHttZXRob2R9KCR7cGFyYW1zLm1hcCgoeyBpc09wdGlvbmFsLCBuYW1lLCB0eXBlIH0pID0+IGAke25hbWV9JHtpc09wdGlvbmFsID8gJz8nIDogJyd9OiAke3R5cGV9YCkuam9pbignLCAnKX0pOiAke3R5cGV9OjogJHtlcnJvci5tZXNzYWdlfWApO1xufVxuZnVuY3Rpb24gaXNUcmVhdEFzSGV4KGtleSkge1xuICAgIC8vIDpjb2RlIGlzIHByb2JsZW1hdGljIC0gaXQgZG9lcyBub3QgaGF2ZSB0aGUgbGVuZ3RoIGF0dGFjaGVkLCB3aGljaCBpc1xuICAgIC8vIHVubGlrZSBhbGwgb3RoZXIgc3RvcmFnZSBlbnRyaWVzIHdoZXJlIGl0IGlzIGluZGVlZCBwcm9wZXJseSBlbmNvZGVkXG4gICAgcmV0dXJuIFsnMHgzYTYzNmY2NDY1J10uaW5jbHVkZXMoa2V5LnRvSGV4KCkpO1xufVxuLyoqXG4gKiBAbmFtZSBScGNcbiAqIEBzdW1tYXJ5IFRoZSBBUEkgbWF5IHVzZSBhIEhUVFAgb3IgV2ViU29ja2V0cyBwcm92aWRlci5cbiAqIEBkZXNjcmlwdGlvbiBJdCBhbGxvd3MgZm9yIHF1ZXJ5aW5nIGEgUG9sa2Fkb3QgQ2xpZW50IE5vZGUuXG4gKiBXZWJTb2NrZXRzIHByb3ZpZGVyIGlzIHJlY29tbWVuZGVkIHNpbmNlIEhUVFAgcHJvdmlkZXIgb25seSBzdXBwb3J0cyBiYXNpYyBxdWVyeWluZy5cbiAqXG4gKiBgYGBtZXJtYWlkXG4gKiBncmFwaCBMUjtcbiAqICAgQVtBcGldIC0tPiB8V2ViU29ja2V0c3wgQltXc1Byb3ZpZGVyXTtcbiAqICAgQiAtLT4gfGVuZHBvaW50fCBDW3dzOi8vMTI3LjAuMC4xOjk5NDRdXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBScGMgZnJvbSAnQHBvbGthZG90L3JwYy1jb3JlJztcbiAqIGltcG9ydCB7IFdzUHJvdmlkZXIgfSBmcm9tICdAcG9sa2Fkb3QvcnBjLXByb3ZpZGVyL3dzJztcbiAqXG4gKiBjb25zdCBwcm92aWRlciA9IG5ldyBXc1Byb3ZpZGVyKCd3czovLzEyNy4wLjAuMTo5OTQ0Jyk7XG4gKiBjb25zdCBycGMgPSBuZXcgUnBjKHByb3ZpZGVyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUnBjQ29yZSB7XG4gICAgX19pbnRlcm5hbF9faW5zdGFuY2VJZDtcbiAgICBfX2ludGVybmFsX19pc1BlZGFudGljO1xuICAgIF9faW50ZXJuYWxfX3JlZ2lzdHJ5RGVmYXVsdDtcbiAgICBfX2ludGVybmFsX19zdG9yYWdlQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgX19pbnRlcm5hbF9fc3RvcmFnZUNhY2hlSGl0cyA9IDA7XG4gICAgX19pbnRlcm5hbF9fc3RvcmFnZUNhY2hlU2l6ZSA9IDA7XG4gICAgX19pbnRlcm5hbF9fZ2V0QmxvY2tSZWdpc3RyeTtcbiAgICBfX2ludGVybmFsX19nZXRCbG9ja0hhc2g7XG4gICAgbWFwcGluZyA9IG5ldyBNYXAoKTtcbiAgICBwcm92aWRlcjtcbiAgICBzZWN0aW9ucyA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoZSBjb3JlIFJQQyBoYW5kbGVyXG4gICAgICogQHBhcmFtICB7UHJvdmlkZXJJbnRlcmZhY2V9IHByb3ZpZGVyIEFuIEFQSSBwcm92aWRlciB1c2luZyBhbnkgb2YgdGhlIHN1cHBvcnRlZCBwcm92aWRlcnMgKEhUVFAsIFNDIG9yIFdlYlNvY2tldClcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpbnN0YW5jZUlkLCByZWdpc3RyeSwgeyBpc1BlZGFudGljID0gdHJ1ZSwgcHJvdmlkZXIsIHVzZXJScGMgPSB7fSB9KSB7XG4gICAgICAgIGlmICghcHJvdmlkZXIgfHwgIWlzRnVuY3Rpb24ocHJvdmlkZXIuc2VuZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgUHJvdmlkZXIgdG8gQVBJIGNyZWF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZCA9IGluc3RhbmNlSWQ7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faXNQZWRhbnRpYyA9IGlzUGVkYW50aWM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnlEZWZhdWx0ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgICAgICAgY29uc3Qgc2VjdGlvbk5hbWVzID0gT2JqZWN0LmtleXMocnBjRGVmaW5pdGlvbnMpO1xuICAgICAgICAvLyB0aGVzZSBhcmUgdGhlIGJhc2Uga2V5cyAoaS5lLiBwYXJ0IG9mIGpzb25ycGMpXG4gICAgICAgIHRoaXMuc2VjdGlvbnMucHVzaCguLi5zZWN0aW9uTmFtZXMpO1xuICAgICAgICAvLyBkZWNvcmF0ZSBhbGwgaW50ZXJmYWNlcywgZGVmaW5lZCBhbmQgdXNlciBvbiB0aGlzIGluc3RhbmNlXG4gICAgICAgIHRoaXMuYWRkVXNlckludGVyZmFjZXModXNlclJwYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBjb25uZWN0ZWQgc3RhdHVzIG9mIGEgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBnZXQgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmlzQ29ubmVjdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTWFudWFsbHkgY29ubmVjdCBmcm9tIHRoZSBhdHRhY2hlZCBwcm92aWRlclxuICAgICAqL1xuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmNvbm5lY3QoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE1hbnVhbGx5IGRpc2Nvbm5lY3QgZnJvbSB0aGUgYXR0YWNoZWQgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIGNvcmUgc3RhdHMsIGluY2x1ZGluZyB0aG9zZSBmcm9tIHRlaCBwcm92aWRlclxuICAgICAqL1xuICAgIGdldCBzdGF0cygpIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB0aGlzLnByb3ZpZGVyLnN0YXRzO1xuICAgICAgICByZXR1cm4gc3RhdHNcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRzLFxuICAgICAgICAgICAgICAgIGNvcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVIaXRzOiB0aGlzLl9faW50ZXJuYWxfX3N0b3JhZ2VDYWNoZUhpdHMsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlU2l6ZTogdGhpcy5fX2ludGVybmFsX19zdG9yYWdlQ2FjaGVTaXplXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRzIGEgcmVnaXN0cnkgc3dhcCAodHlwaWNhbGx5IGZyb20gQXBpKVxuICAgICAqL1xuICAgIHNldFJlZ2lzdHJ5U3dhcChyZWdpc3RyeVN3YXApIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19nZXRCbG9ja1JlZ2lzdHJ5ID0gbWVtb2l6ZShyZWdpc3RyeVN3YXAsIHtcbiAgICAgICAgICAgIGdldEluc3RhbmNlSWQ6ICgpID0+IHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHMgYSBmdW5jdGlvbiB0byByZXNvbHZlIGJsb2NrIGhhc2ggZnJvbSBibG9jayBudW1iZXJcbiAgICAgKi9cbiAgICBzZXRSZXNvbHZlQmxvY2tIYXNoKHJlc29sdmVCbG9ja0hhc2gpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19nZXRCbG9ja0hhc2ggPSBtZW1vaXplKHJlc29sdmVCbG9ja0hhc2gsIHtcbiAgICAgICAgICAgIGdldEluc3RhbmNlSWQ6ICgpID0+IHRoaXMuX19pbnRlcm5hbF9faW5zdGFuY2VJZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWRkVXNlckludGVyZmFjZXModXNlclJwYykge1xuICAgICAgICAvLyBhZGQgYW55IGV4dHJhIHVzZXItZGVmaW5lZCBzZWN0aW9uc1xuICAgICAgICB0aGlzLnNlY3Rpb25zLnB1c2goLi4uT2JqZWN0LmtleXModXNlclJwYykuZmlsdGVyKChrKSA9PiAhdGhpcy5zZWN0aW9ucy5pbmNsdWRlcyhrKSkpO1xuICAgICAgICBmb3IgKGxldCBzID0gMCwgc2NvdW50ID0gdGhpcy5zZWN0aW9ucy5sZW5ndGg7IHMgPCBzY291bnQ7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNbc107XG4gICAgICAgICAgICBjb25zdCBkZWZzID0gb2JqZWN0U3ByZWFkKHt9LCBycGNEZWZpbml0aW9uc1tzZWN0aW9uXSwgdXNlclJwY1tzZWN0aW9uXSk7XG4gICAgICAgICAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXMoZGVmcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMCwgbWNvdW50ID0gbWV0aG9kcy5sZW5ndGg7IG0gPCBtY291bnQ7IG0rKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbbV07XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmID0gZGVmc1ttZXRob2RdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25ycGMgPSBkZWYuZW5kcG9pbnQgfHwgYCR7c2VjdGlvbn1fJHttZXRob2R9YDtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFwcGluZy5oYXMoanNvbnJwYykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTdWJzY3JpcHRpb24gPSAhIWRlZi5wdWJzdWI7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpc1tzZWN0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcGluZy5zZXQoanNvbnJwYywgb2JqZWN0U3ByZWFkKHt9LCBkZWYsIHsgaXNTdWJzY3JpcHRpb24sIGpzb25ycGMsIG1ldGhvZCwgc2VjdGlvbiB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGxhenlNZXRob2QodGhpc1tzZWN0aW9uXSwgbWV0aG9kLCAoKSA9PiBpc1N1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jcmVhdGVNZXRob2RTdWJzY3JpYmUoc2VjdGlvbiwgbWV0aG9kLCBkZWYpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NyZWF0ZU1ldGhvZFNlbmQoc2VjdGlvbiwgbWV0aG9kLCBkZWYpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX21lbW9taXplKGNyZWF0b3IsIGRlZikge1xuICAgICAgICBjb25zdCBtZW1vT3B0cyA9IHsgZ2V0SW5zdGFuY2VJZDogKCkgPT4gdGhpcy5fX2ludGVybmFsX19pbnN0YW5jZUlkIH07XG4gICAgICAgIGNvbnN0IG1lbW9pemVkID0gbWVtb2l6ZShjcmVhdG9yKHRydWUpLCBtZW1vT3B0cyk7XG4gICAgICAgIG1lbW9pemVkLnJhdyA9IG1lbW9pemUoY3JlYXRvcihmYWxzZSksIG1lbW9PcHRzKTtcbiAgICAgICAgbWVtb2l6ZWQubWV0YSA9IGRlZjtcbiAgICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cbiAgICBfZm9ybWF0UmVzdWx0KGlzU2NhbGUsIHJlZ2lzdHJ5LCBibG9ja0hhc2gsIG1ldGhvZCwgZGVmLCBwYXJhbXMsIHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gaXNTY2FsZVxuICAgICAgICAgICAgPyB0aGlzLl9mb3JtYXRPdXRwdXQocmVnaXN0cnksIGJsb2NrSGFzaCwgbWV0aG9kLCBkZWYsIHBhcmFtcywgcmVzdWx0KVxuICAgICAgICAgICAgOiByZXN1bHQ7XG4gICAgfVxuICAgIF9jcmVhdGVNZXRob2RTZW5kKHNlY3Rpb24sIG1ldGhvZCwgZGVmKSB7XG4gICAgICAgIGNvbnN0IHJwY05hbWUgPSBkZWYuZW5kcG9pbnQgfHwgYCR7c2VjdGlvbn1fJHttZXRob2R9YDtcbiAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gZGVmLnBhcmFtcy5maW5kSW5kZXgoKHsgaXNIaXN0b3JpYyB9KSA9PiBpc0hpc3RvcmljKTtcbiAgICAgICAgbGV0IG1lbW9pemVkID0gbnVsbDtcbiAgICAgICAgLy8gZXhlY3V0ZSB0aGUgUlBDIGNhbGwsIGRvaW5nIGEgcmVnaXN0cnkgc3dhcCBmb3IgaGlzdG9yaWMgYXMgYXBwbGljYWJsZVxuICAgICAgICBjb25zdCBjYWxsV2l0aFJlZ2lzdHJ5ID0gYXN5bmMgKGlzU2NhbGUsIHZhbHVlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IGhhc2hJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHZhbHVlc1toYXNoSW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tIYXNoID0gYmxvY2tJZCAmJiBkZWYucGFyYW1zW2hhc2hJbmRleF0udHlwZSA9PT0gJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gYXdhaXQgdGhpcy5fX2ludGVybmFsX19nZXRCbG9ja0hhc2g/LihibG9ja0lkKVxuICAgICAgICAgICAgICAgIDogYmxvY2tJZDtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVnaXN0cnkgfSA9IGlzU2NhbGUgJiYgYmxvY2tIYXNoICYmIHRoaXMuX19pbnRlcm5hbF9fZ2V0QmxvY2tSZWdpc3RyeVxuICAgICAgICAgICAgICAgID8gYXdhaXQgdGhpcy5fX2ludGVybmFsX19nZXRCbG9ja1JlZ2lzdHJ5KHU4YVRvVThhKGJsb2NrSGFzaCkpXG4gICAgICAgICAgICAgICAgOiB7IHJlZ2lzdHJ5OiB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdHJ5RGVmYXVsdCB9O1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fZm9ybWF0UGFyYW1zKHJlZ2lzdHJ5LCBudWxsLCBkZWYsIHZhbHVlcyk7XG4gICAgICAgICAgICAvLyBvbmx5IGNhY2hlIC5hdCg8YmxvY2tIYXNoPikgcXVlcmllcywgZS5nLiB3aGVyZSB2YWxpZCBibG9ja0hhc2ggd2FzIHN1cHBsaWVkXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb3ZpZGVyLnNlbmQocnBjTmFtZSwgcGFyYW1zLm1hcCgocCkgPT4gcC50b0pTT04oKSksICEhYmxvY2tIYXNoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRSZXN1bHQoaXNTY2FsZSwgcmVnaXN0cnksIGJsb2NrSGFzaCwgbWV0aG9kLCBkZWYsIHBhcmFtcywgcmVzdWx0KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY3JlYXRvciA9IChpc1NjYWxlKSA9PiAoLi4udmFsdWVzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0RlbGF5ZWQgPSBpc1NjYWxlICYmIGhhc2hJbmRleCAhPT0gLTEgJiYgISF2YWx1ZXNbaGFzaEluZGV4XTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsV2l0aFJlZ2lzdHJ5KGlzU2NhbGUsIHZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3JNZXNzYWdlKG1ldGhvZCwgZGVmLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgb2xkIHJlc3VsdHMgZnJvbSBjYWNoZVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWQ/LnVubWVtb2l6ZSguLi52YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWQ/LnJhdy51bm1lbW9pemUoLi4udmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLCAvLyBjcmVhdGUgYSBSZXBsYXkoMSlcbiAgICAgICAgICAgIGlzRGVsYXllZFxuICAgICAgICAgICAgICAgID8gcmVmQ291bnREZWxheSgpIC8vIFVuc3Vic2NyaWJlIGFmdGVyIGRlbGF5XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgICAgICAgOiByZWZDb3VudCgpKTtcbiAgICAgICAgfTtcbiAgICAgICAgbWVtb2l6ZWQgPSB0aGlzLl9tZW1vbWl6ZShjcmVhdG9yLCBkZWYpO1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuICAgIC8vIGNyZWF0ZSBhIHN1YnNjcmlwdG9yLCBpdCBzdWJzY3JpYmVzIG9uY2UgYW5kIHJlc29sdmVzIHdpdGggdGhlIGlkIGFzIHN1YnNjcmliZVxuICAgIF9jcmVhdGVTdWJzY3JpYmVyKHsgcGFyYW1zSnNvbiwgc3ViTmFtZSwgc3ViVHlwZSwgdXBkYXRlIH0sIGVycm9ySGFuZGxlcikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoc3ViVHlwZSwgc3ViTmFtZSwgcGFyYW1zSnNvbiwgdXBkYXRlKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2NyZWF0ZU1ldGhvZFN1YnNjcmliZShzZWN0aW9uLCBtZXRob2QsIGRlZikge1xuICAgICAgICBjb25zdCBbdXBkYXRlVHlwZSwgc3ViTWV0aG9kLCB1bnN1Yk1ldGhvZF0gPSBkZWYucHVic3ViO1xuICAgICAgICBjb25zdCBzdWJOYW1lID0gYCR7c2VjdGlvbn1fJHtzdWJNZXRob2R9YDtcbiAgICAgICAgY29uc3QgdW5zdWJOYW1lID0gYCR7c2VjdGlvbn1fJHt1bnN1Yk1ldGhvZH1gO1xuICAgICAgICBjb25zdCBzdWJUeXBlID0gYCR7c2VjdGlvbn1fJHt1cGRhdGVUeXBlfWA7XG4gICAgICAgIGxldCBtZW1vaXplZCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGNyZWF0b3IgPSAoaXNTY2FsZSkgPT4gKC4uLnZhbHVlcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgcHJvbWlzZSwgYXMgdXNlZCBpbiB0aGUgdW5zdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBsZXQgc3Vic2NyaXB0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0cnlEZWZhdWx0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsb2dFcnJvck1lc3NhZ2UobWV0aG9kLCBkZWYsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fZm9ybWF0UGFyYW1zKHJlZ2lzdHJ5LCBudWxsLCBkZWYsIHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IChlcnJvciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dFcnJvck1lc3NhZ2UobWV0aG9kLCBkZWYsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5fZm9ybWF0UmVzdWx0KGlzU2NhbGUsIHJlZ2lzdHJ5LCBudWxsLCBtZXRob2QsIGRlZiwgcGFyYW1zLCByZXN1bHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uUHJvbWlzZSA9IHRoaXMuX2NyZWF0ZVN1YnNjcmliZXIoeyBwYXJhbXNKc29uOiBwYXJhbXMubWFwKChwKSA9PiBwLnRvSlNPTigpKSwgc3ViTmFtZSwgc3ViVHlwZSwgdXBkYXRlIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUZWFyZG93biBsb2dpY1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSBmcm9tIGNhY2hlLCBzbyBvbGQgcmVzdWx0cyBkb24ndCBoYW5nIGFyb3VuZFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWQ/LnVubWVtb2l6ZSguLi52YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWQ/LnJhdy51bm1lbW9pemUoLi4udmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIHByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvblByb21pc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChzdWJzY3JpcHRpb25JZCkgPT4gaXNOdWxsKHN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucHJvdmlkZXIudW5zdWJzY3JpYmUoc3ViVHlwZSwgdW5zdWJOYW1lLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBsb2dFcnJvck1lc3NhZ2UobWV0aG9kLCBkZWYsIGVycm9yKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLnBpcGUoZHJyKCkpO1xuICAgICAgICB9O1xuICAgICAgICBtZW1vaXplZCA9IHRoaXMuX21lbW9taXplKGNyZWF0b3IsIGRlZik7XG4gICAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9XG4gICAgX2Zvcm1hdFBhcmFtcyhyZWdpc3RyeSwgYmxvY2tIYXNoLCBkZWYsIGlucHV0cykge1xuICAgICAgICBjb25zdCBjb3VudCA9IGlucHV0cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlcUNvdW50ID0gZGVmLnBhcmFtcy5maWx0ZXIoKHsgaXNPcHRpb25hbCB9KSA9PiAhaXNPcHRpb25hbCkubGVuZ3RoO1xuICAgICAgICBpZiAoY291bnQgPCByZXFDb3VudCB8fCBjb3VudCA+IGRlZi5wYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZGVmLnBhcmFtcy5sZW5ndGh9IHBhcmFtZXRlcnMke3JlcUNvdW50ID09PSBkZWYucGFyYW1zLmxlbmd0aCA/ICcnIDogYCAoJHtkZWYucGFyYW1zLmxlbmd0aCAtIHJlcUNvdW50fSBvcHRpb25hbClgfSwgJHtjb3VudH0gZm91bmQgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgcGFyYW1zW2ldID0gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZShkZWYucGFyYW1zW2ldLnR5cGUsIFtpbnB1dHNbaV1dLCB7IGJsb2NrSGFzaCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cbiAgICBfZm9ybWF0T3V0cHV0KHJlZ2lzdHJ5LCBibG9ja0hhc2gsIG1ldGhvZCwgcnBjLCBwYXJhbXMsIHJlc3VsdCkge1xuICAgICAgICBpZiAocnBjLnR5cGUgPT09ICdTdG9yYWdlRGF0YScpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHBhcmFtc1swXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRTdG9yYWdlRGF0YShyZWdpc3RyeSwgYmxvY2tIYXNoLCBrZXksIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocnBjLnR5cGUgPT09ICdTdG9yYWdlQ2hhbmdlU2V0Jykge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IHBhcmFtc1swXTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9mb3JtYXRTdG9yYWdlU2V0KHJlZ2lzdHJ5LCByZXN1bHQuYmxvY2ssIGtleXMsIHJlc3VsdC5jaGFuZ2VzKVxuICAgICAgICAgICAgICAgIDogcmVnaXN0cnkuY3JlYXRlVHlwZSgnU3RvcmFnZUNoYW5nZVNldCcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocnBjLnR5cGUgPT09ICdWZWM8U3RvcmFnZUNoYW5nZVNldD4nKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uU2V0ID0gcmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSBqc29uU2V0Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGJsb2NrLCBjaGFuZ2VzIH0gPSBqc29uU2V0W2ldO1xuICAgICAgICAgICAgICAgIG1hcHBlZFtpXSA9IFtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnkuY3JlYXRlVHlwZSgnQmxvY2tIYXNoJywgYmxvY2spLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRTdG9yYWdlU2V0KHJlZ2lzdHJ5LCBibG9jaywgcGFyYW1zWzBdLCBjaGFuZ2VzKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBvbmx5IHF1ZXJ5IGF0IGEgc3BlY2lmaWMgYmxvY2ssIG5vdCBhIHJhbmdlIC0gZmxhdHRlblxuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZCA9PT0gJ3F1ZXJ5U3RvcmFnZUF0J1xuICAgICAgICAgICAgICAgID8gbWFwcGVkWzBdWzFdXG4gICAgICAgICAgICAgICAgOiBtYXBwZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUocnBjLnR5cGUsIFtyZXN1bHRdLCB7IGJsb2NrSGFzaCB9KTtcbiAgICB9XG4gICAgX2Zvcm1hdFN0b3JhZ2VEYXRhKHJlZ2lzdHJ5LCBibG9ja0hhc2gsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXNFbXB0eSA9IGlzTnVsbCh2YWx1ZSk7XG4gICAgICAgIC8vIHdlIGNvbnZlcnQgdG8gVWludDhBcnJheSBzaW5jZSBpdCBtYXBzIHRvIHRoZSByYXcgZW5jb2RpbmcsIGFsbFxuICAgICAgICAvLyBkYXRhIHdpbGwgYmUgY29ycmVjdGx5IGVuY29kZWQgKGluY2wuIG51bWJlcnMsIGV4Y2wuIDpjb2RlKVxuICAgICAgICBjb25zdCBpbnB1dCA9IGlzRW1wdHlcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBpc1RyZWF0QXNIZXgoa2V5KVxuICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICA6IHU4YVRvVThhKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25ld1R5cGUocmVnaXN0cnksIGJsb2NrSGFzaCwga2V5LCBpbnB1dCwgaXNFbXB0eSk7XG4gICAgfVxuICAgIF9mb3JtYXRTdG9yYWdlU2V0KHJlZ2lzdHJ5LCBibG9ja0hhc2gsIGtleXMsIGNoYW5nZXMpIHtcbiAgICAgICAgLy8gRm9yIFN0b3JhZ2VDaGFuZ2VTZXQsIHRoZSBjaGFuZ2VzIGhhcyB0aGUgW2tleSwgdmFsdWVdIG1hcHBpbmdzXG4gICAgICAgIGNvbnN0IGNvdW50ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHdpdGhDYWNoZSA9IGNvdW50ICE9PSAxO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICAvLyBtdWx0aXBsZSByZXR1cm4gdmFsdWVzICh2aWEgc3RhdGUuc3RvcmFnZSBzdWJzY3JpcHRpb24pLCBkZWNvZGUgdGhlXG4gICAgICAgIC8vIHZhbHVlcyBvbmUgYXQgYSB0aW1lLCBhbGwgYmFzZWQgb24gdGhlIHN1cHBsaWVkIHF1ZXJ5IHR5cGVzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdmFsdWVzW2ldID0gdGhpcy5fZm9ybWF0U3RvcmFnZVNldEVudHJ5KHJlZ2lzdHJ5LCBibG9ja0hhc2gsIGtleXNbaV0sIGNoYW5nZXMsIHdpdGhDYWNoZSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG4gICAgX2Zvcm1hdFN0b3JhZ2VTZXRFbnRyeShyZWdpc3RyeSwgYmxvY2tIYXNoLCBrZXksIGNoYW5nZXMsIHdpdGhDYWNoZSwgZW50cnlJbmRleCkge1xuICAgICAgICBjb25zdCBoZXhLZXkgPSBrZXkudG9IZXgoKTtcbiAgICAgICAgY29uc3QgZm91bmQgPSBjaGFuZ2VzLmZpbmQoKFtrZXldKSA9PiBrZXkgPT09IGhleEtleSk7XG4gICAgICAgIGNvbnN0IGlzTm90Rm91bmQgPSBpc1VuZGVmaW5lZChmb3VuZCk7XG4gICAgICAgIC8vIGlmIHdlIGRvbid0IGZpbmQgdGhlIHZhbHVlLCB0aGlzIGlzIG91ciBmYWxsYmFja1xuICAgICAgICAvLyAgIC0gaW4gdGhlIGNhc2Ugb2YgYW4gYXJyYXkgb2YgdmFsdWVzLCBmaWxsIHRoZSBob2xlIGZyb20gdGhlIGNhY2hlXG4gICAgICAgIC8vICAgLSBpZiBhIHNpbmdsZSByZXN1bHQgdmFsdWUsIGRvbid0IGZpbGwgLSBpdCBpcyBub3QgYW4gdXBkYXRlIGhvbGVcbiAgICAgICAgLy8gICAtIGZhbGxiYWNrIHRvIGFuIGVtcHR5IG9wdGlvbiBpbiBhbGwgY2FzZXNcbiAgICAgICAgaWYgKGlzTm90Rm91bmQgJiYgd2l0aENhY2hlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLl9faW50ZXJuYWxfX3N0b3JhZ2VDYWNoZS5nZXQoaGV4S2V5KTtcbiAgICAgICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N0b3JhZ2VDYWNoZUhpdHMrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNOb3RGb3VuZFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGZvdW5kWzFdO1xuICAgICAgICBjb25zdCBpc0VtcHR5ID0gaXNOdWxsKHZhbHVlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBpc0VtcHR5IHx8IGlzVHJlYXRBc0hleChrZXkpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IHU4YVRvVThhKHZhbHVlKTtcbiAgICAgICAgY29uc3QgY29kZWMgPSB0aGlzLl9uZXdUeXBlKHJlZ2lzdHJ5LCBibG9ja0hhc2gsIGtleSwgaW5wdXQsIGlzRW1wdHksIGVudHJ5SW5kZXgpO1xuICAgICAgICAvLyBzdG9yZSB0aGUgcmV0cmlldmVkIHJlc3VsdCAtIHRoZSBvbmx5IGlzc3VlIHdpdGggdGhpcyBjYWNoZSBpcyB0aGF0IHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIGNsZWFyaW5nIG9mIGl0LCBzbyB2ZXJ5IGxvbmcgcnVubmluZyBwcm9jZXNzZXMgKG5vdCBqdXN0IGEgY291cGxlIG9mIGhvdXJzLCBsb25nZXIpXG4gICAgICAgIC8vIHdpbGwgaW5jcmVhc2UgbWVtb3J5IGJleW9uZCB3aGF0IGlzIGFsbG93ZWQuXG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc3RvcmFnZUNhY2hlLnNldChoZXhLZXksIGNvZGVjKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdG9yYWdlQ2FjaGVTaXplKys7XG4gICAgICAgIHJldHVybiBjb2RlYztcbiAgICB9XG4gICAgX25ld1R5cGUocmVnaXN0cnksIGJsb2NrSGFzaCwga2V5LCBpbnB1dCwgaXNFbXB0eSwgZW50cnlJbmRleCA9IC0xKSB7XG4gICAgICAgIC8vIHNpbmdsZSByZXR1cm4gdmFsdWUgKHZpYSBzdGF0ZS5nZXRTdG9yYWdlKSwgZGVjb2RlIHRoZSB2YWx1ZSBiYXNlZCBvbiB0aGVcbiAgICAgICAgLy8gb3V0cHV0VHlwZSB0aGF0IHdlIGhhdmUgc3BlY2lmaWVkLiBGYWxsYmFjayB0byBSYXcgb24gbm90aGluZ1xuICAgICAgICBjb25zdCB0eXBlID0ga2V5Lm91dHB1dFR5cGUgfHwgJ1Jhdyc7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBrZXkubWV0YSB8fCBFTVBUWV9NRVRBO1xuICAgICAgICBjb25zdCBlbnRyeU51bSA9IGVudHJ5SW5kZXggPT09IC0xXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IGAgZW50cnkgJHtlbnRyeUluZGV4fTpgO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUodHlwZSwgW1xuICAgICAgICAgICAgICAgIGlzRW1wdHlcbiAgICAgICAgICAgICAgICAgICAgPyBtZXRhLmZhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Igb2xkLXN0eWxlIExpbmthZ2UsIHdlIGFkZCBhbiBlbXB0eSBsaW5rYWdlIGF0IHRoZSBlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHlwZS5pbmNsdWRlcygnTGlua2FnZTwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdThhQ29uY2F0KGhleFRvVThhKG1ldGEuZmFsbGJhY2sudG9IZXgoKSksIG5ldyBVaW50OEFycmF5KDIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGV4VG9VOGEobWV0YS5mYWxsYmFjay50b0hleCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgOiBtZXRhLm1vZGlmaWVyLmlzT3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSh0eXBlLCBbaW5wdXRdLCB7IGJsb2NrSGFzaCwgaXNQZWRhbnRpYzogdGhpcy5fX2ludGVybmFsX19pc1BlZGFudGljIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0XG4gICAgICAgICAgICBdLCB7IGJsb2NrSGFzaCwgaXNGYWxsYmFjazogaXNFbXB0eSAmJiAhIW1ldGEuZmFsbGJhY2ssIGlzT3B0aW9uYWw6IG1ldGEubW9kaWZpZXIuaXNPcHRpb25hbCwgaXNQZWRhbnRpYzogdGhpcy5fX2ludGVybmFsX19pc1BlZGFudGljICYmICFtZXRhLm1vZGlmaWVyLmlzT3B0aW9uYWwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZWNvZGUgc3RvcmFnZSAke2tleS5zZWN0aW9uIHx8ICd1bmtub3duJ30uJHtrZXkubWV0aG9kIHx8ICd1bmtub3duJ306JHtlbnRyeU51bX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogJ0Bwb2xrYWRvdC9ycGMtY29yZScsIHBhdGg6IChpbXBvcnQubWV0YSAmJiBpbXBvcnQubWV0YS51cmwpID8gbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLnN1YnN0cmluZygwLCBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpIDogJ2F1dG8nLCB0eXBlOiAnZXNtJywgdmVyc2lvbjogJzExLjIuMScgfTtcbiIsImltcG9ydCB7IGNhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBwdWJsaXNoUmVwbGF5LCByZWZDb3VudCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyByZWZDb3VudERlbGF5IH0gZnJvbSAnLi9yZWZDb3VudERlbGF5LmpzJztcbmZ1bmN0aW9uIENNUChhLCBiKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeSh7IHQ6IGEgfSkgPT09IHN0cmluZ2lmeSh7IHQ6IGIgfSk7XG59XG5mdW5jdGlvbiBFUlIoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbn1cbmZ1bmN0aW9uIE5PT1AoKSB7XG4gICAgLy8gZW1wdHlcbn1cbi8qKlxuICogU2hvcnRoYW5kIGZvciBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBwdWJsaXNoUmVwbGF5KDEpIGFuZCByZWZDb3VudCgpLlxuICpcbiAqIEBpZ25vcmVcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJyKHsgZGVsYXksIHNraXBDaGFuZ2UgPSBmYWxzZSwgc2tpcFRpbWVvdXQgPSBmYWxzZSB9ID0ge30pIHtcbiAgICByZXR1cm4gKHNvdXJjZSQpID0+IHNvdXJjZSQucGlwZShjYXRjaEVycm9yKEVSUiksIHNraXBDaGFuZ2VcbiAgICAgICAgPyB0YXAoTk9PUClcbiAgICAgICAgOiBkaXN0aW5jdFVudGlsQ2hhbmdlZChDTVApLCBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBwdWJsaXNoUmVwbGF5KDEpLCBza2lwVGltZW91dFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgPyByZWZDb3VudCgpXG4gICAgICAgIDogcmVmQ291bnREZWxheShkZWxheSkpO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9kcnIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZW1vLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmQ291bnREZWxheS5qcyc7XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZHJyIH0gZnJvbSAnLi9kcnIuanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW8oaW5zdGFuY2VJZCwgaW5uZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBnZXRJbnN0YW5jZUlkOiAoKSA9PiBpbnN0YW5jZUlkIH07XG4gICAgY29uc3QgY2FjaGVkID0gbWVtb2l6ZSgoLi4ucGFyYW1zKSA9PiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gaW5uZXIoLi4ucGFyYW1zKS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2FjaGVkLnVubWVtb2l6ZSguLi5wYXJhbXMpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH07XG4gICAgfSkucGlwZShkcnIoKSksIG9wdGlvbnMpO1xuICAgIHJldHVybiBjYWNoZWQ7XG59XG4iLCJpbXBvcnQgeyBhc2FwU2NoZWR1bGVyLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZDb3VudERlbGF5KGRlbGF5ID0gMTc1MCkge1xuICAgIHJldHVybiAoc291cmNlKSA9PiB7XG4gICAgICAgIC8vIHN0YXRlOiAwID0gZGlzY29ubmVjdGVkLCAxID0gZGlzY29ubmVjdGluZywgMiA9IGNvbm5lY3RpbmcsIDMgPSBjb25uZWN0ZWRcbiAgICAgICAgbGV0IFtzdGF0ZSwgcmVmQ291bnQsIGNvbm5lY3Rpb24sIHNjaGVkdWxlcl0gPSBbMCwgMCwgU3Vic2NyaXB0aW9uLkVNUFRZLCBTdWJzY3JpcHRpb24uRU1QVFldO1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9iKSA9PiB7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKG9iKTtcbiAgICAgICAgICAgIGlmIChyZWZDb3VudCsrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBzb3VyY2UuY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZSA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgtLXJlZkNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyID0gYXNhcFNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuY29uc3QgVU5LTk9XTiA9IC05OTk5OTtcbmZ1bmN0aW9uIGV4dGVuZCh0aGF0LCBuYW1lLCB2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBuYW1lLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlXG4gICAgfSk7XG59XG4vKipcbiAqIEBuYW1lIFJwY0Vycm9yXG4gKiBAc3VtbWFyeSBFeHRlbnNpb24gdG8gdGhlIGJhc2ljIEpTIEVycm9yLlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgYnVpbHQtaW4gSmF2YVNjcmlwdCBFcnJvciBjbGFzcyBpcyBleHRlbmRlZCBieSBhZGRpbmcgYSBjb2RlIHRvIGFsbG93IGZvciBFcnJvciBjYXRlZ29yaXphdGlvbi4gSW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBgc3RhY2tgLCBgbWVzc2FnZWAsIHRoZSBudW1lcmljIGBjb2RlYCBhbmQgYGRhdGFgIChhbnkgdHlwZXMpIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCB7IFJwY0Vycm9yIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnKTtcbiAqXG4gKiB0aHJvdyBuZXcgUnBjRXJyb3IoJ3NvbWUgbWVzc2FnZScsIFJwY0Vycm9yLkNPREVTLk1FVEhPRF9OT1RfRk9VTkQpOyAvLyA9PiBlcnJvci5jb2RlID0gLTMyNjAxXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnBjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29kZTtcbiAgICBkYXRhO1xuICAgIG1lc3NhZ2U7XG4gICAgbmFtZTtcbiAgICBzdGFjaztcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJycsIGNvZGUgPSBVTktOT1dOLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGV4dGVuZCh0aGlzLCAnbWVzc2FnZScsIFN0cmluZyhtZXNzYWdlKSk7XG4gICAgICAgIGV4dGVuZCh0aGlzLCAnbmFtZScsIHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG4gICAgICAgIGV4dGVuZCh0aGlzLCAnZGF0YScsIGRhdGEpO1xuICAgICAgICBleHRlbmQodGhpcywgJ2NvZGUnLCBjb2RlKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIHN0YWNrICYmIGV4dGVuZCh0aGlzLCAnc3RhY2snLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIENPREVTID0ge1xuICAgICAgICBBU1NFUlQ6IC05MDAwOSxcbiAgICAgICAgSU5WQUxJRF9KU09OUlBDOiAtOTk5OTgsXG4gICAgICAgIE1FVEhPRF9OT1RfRk9VTkQ6IC0zMjYwMSwgLy8gUnVzdCBjbGllbnRcbiAgICAgICAgVU5LTk9XTlxuICAgIH07XG59XG4iLCJpbXBvcnQgeyBpc051bWJlciwgaXNTdHJpbmcsIGlzVW5kZWZpbmVkLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgUnBjRXJyb3IgZnJvbSAnLi9lcnJvci5qcyc7XG5mdW5jdGlvbiBmb3JtYXRFcnJvckRhdGEoZGF0YSkge1xuICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGA6ICR7aXNTdHJpbmcoZGF0YSlcbiAgICAgICAgPyBkYXRhLnJlcGxhY2UoL0Vycm9yXFwoXCIvZywgJycpLnJlcGxhY2UoL1xcKFwiL2csICcoJykucmVwbGFjZSgvXCJcXCkvZywgJyknKS5yZXBsYWNlKC9cXCgvZywgJywgJykucmVwbGFjZSgvXFwpL2csICcnKVxuICAgICAgICA6IHN0cmluZ2lmeShkYXRhKX1gO1xuICAgIC8vIFdlIG5lZWQgc29tZSBzb3J0IG9mIGN1dC1vZmYgaGVyZSBzaW5jZSB0aGVzZSBjYW4gYmUgdmVyeSBsYXJnZSBhbmRcbiAgICAvLyB2ZXJ5IG5lc3RlZCwgcGljayBhIG51bWJlciBhbmQgdHJpbSB0aGUgcmVzdWx0IGRpc3BsYXkgdG8gaXRcbiAgICByZXR1cm4gZm9ybWF0dGVkLmxlbmd0aCA8PSAyNTZcbiAgICAgICAgPyBmb3JtYXR0ZWRcbiAgICAgICAgOiBgJHtmb3JtYXR0ZWQuc3Vic3RyaW5nKDAsIDI1NSl94oCmYDtcbn1cbmZ1bmN0aW9uIGNoZWNrRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtZXNzYWdlIH0gPSBlcnJvcjtcbiAgICAgICAgdGhyb3cgbmV3IFJwY0Vycm9yKGAke2NvZGV9OiAke21lc3NhZ2V9JHtmb3JtYXRFcnJvckRhdGEoZGF0YSl9YCwgY29kZSwgZGF0YSk7XG4gICAgfVxufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNsYXNzIFJwY0NvZGVyIHtcbiAgICBfX2ludGVybmFsX19pZCA9IDA7XG4gICAgZGVjb2RlUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5qc29ucnBjICE9PSAnMi4wJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGpzb25ycGMgZmllbGQgaW4gZGVjb2RlZCBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1N1YnNjcmlwdGlvbiA9ICFpc1VuZGVmaW5lZChyZXNwb25zZS5wYXJhbXMpICYmICFpc1VuZGVmaW5lZChyZXNwb25zZS5tZXRob2QpO1xuICAgICAgICBpZiAoIWlzTnVtYmVyKHJlc3BvbnNlLmlkKSAmJlxuICAgICAgICAgICAgKCFpc1N1YnNjcmlwdGlvbiB8fCAoIWlzTnVtYmVyKHJlc3BvbnNlLnBhcmFtcy5zdWJzY3JpcHRpb24pICYmXG4gICAgICAgICAgICAgICAgIWlzU3RyaW5nKHJlc3BvbnNlLnBhcmFtcy5zdWJzY3JpcHRpb24pKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpZCBmaWVsZCBpbiBkZWNvZGVkIG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0ID09PSB1bmRlZmluZWQgJiYgIWlzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlc3VsdCBmb3VuZCBpbiBqc29ucnBjIHJlc3BvbnNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjaGVja0Vycm9yKHJlc3BvbnNlLnBhcmFtcy5lcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucGFyYW1zLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0O1xuICAgIH1cbiAgICBlbmNvZGVKc29uKG1ldGhvZCwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IFtpZCwgZGF0YV0gPSB0aGlzLmVuY29kZU9iamVjdChtZXRob2QsIHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBbaWQsIHN0cmluZ2lmeShkYXRhKV07XG4gICAgfVxuICAgIGVuY29kZU9iamVjdChtZXRob2QsIHBhcmFtcykge1xuICAgICAgICBjb25zdCBpZCA9ICsrdGhpcy5fX2ludGVybmFsX19pZDtcbiAgICAgICAgcmV0dXJuIFtpZCwge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICAgIH1dO1xuICAgIH1cbn1cbiIsImNvbnN0IEhUVFBfVVJMID0gJ2h0dHA6Ly8xMjcuMC4wLjE6OTkzMyc7XG5jb25zdCBXU19VUkwgPSAnd3M6Ly8xMjcuMC4wLjE6OTk0NCc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgSFRUUF9VUkwsXG4gICAgV1NfVVJMXG59O1xuIiwiZXhwb3J0IGNvbnN0IERFRkFVTFRfQ0FQQUNJVFkgPSAxMjg7XG5jbGFzcyBMUlVOb2RlIHtcbiAgICBrZXk7XG4gICAgbmV4dDtcbiAgICBwcmV2O1xuICAgIGNvbnN0cnVjdG9yKGtleSkge1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5wcmV2ID0gdGhpcztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTFJVQ2FjaGUge1xuICAgIGNhcGFjaXR5O1xuICAgIF9faW50ZXJuYWxfX2RhdGEgPSBuZXcgTWFwKCk7XG4gICAgX19pbnRlcm5hbF9fcmVmcyA9IG5ldyBNYXAoKTtcbiAgICBfX2ludGVybmFsX19sZW5ndGggPSAwO1xuICAgIF9faW50ZXJuYWxfX2hlYWQ7XG4gICAgX19pbnRlcm5hbF9fdGFpbDtcbiAgICBjb25zdHJ1Y3RvcihjYXBhY2l0eSA9IERFRkFVTFRfQ0FQQUNJVFkpIHtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IGNhcGFjaXR5O1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYWQgPSB0aGlzLl9faW50ZXJuYWxfX3RhaWwgPSBuZXcgTFJVTm9kZSgnPGVtcHR5PicpO1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19sZW5ndGg7XG4gICAgfVxuICAgIGdldCBsZW5ndGhEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19kYXRhLnNpemU7XG4gICAgfVxuICAgIGdldCBsZW5ndGhSZWZzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yZWZzLnNpemU7XG4gICAgfVxuICAgIGVudHJpZXMoKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLmtleXMoKTtcbiAgICAgICAgY29uc3QgY291bnQgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGVudHJpZXNbaV0gPSBba2V5LCB0aGlzLl9faW50ZXJuYWxfX2RhdGEuZ2V0KGtleSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICBjb25zdCBrZXlzID0gW107XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX2xlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGN1cnIgPSB0aGlzLl9faW50ZXJuYWxfX2hlYWQ7XG4gICAgICAgICAgICB3aGlsZSAoY3VyciAhPT0gdGhpcy5fX2ludGVybmFsX190YWlsKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGN1cnIua2V5KTtcbiAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5cy5wdXNoKGN1cnIua2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5fX2ludGVybmFsX19kYXRhLmdldChrZXkpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190b0hlYWQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19kYXRhLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3RvSGVhZChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBMUlVOb2RlKGtleSk7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZnMuc2V0KG5vZGUua2V5LCBub2RlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhZCA9IHRoaXMuX19pbnRlcm5hbF9fdGFpbCA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYWQucHJldiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgbm9kZS5uZXh0ID0gdGhpcy5fX2ludGVybmFsX19oZWFkO1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhZCA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19sZW5ndGggPT09IHRoaXMuY2FwYWNpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2RhdGEuZGVsZXRlKHRoaXMuX19pbnRlcm5hbF9fdGFpbC5rZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmVmcy5kZWxldGUodGhpcy5fX2ludGVybmFsX190YWlsLmtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190YWlsID0gdGhpcy5fX2ludGVybmFsX190YWlsLnByZXY7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190YWlsLm5leHQgPSB0aGlzLl9faW50ZXJuYWxfX2hlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2xlbmd0aCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIF9faW50ZXJuYWxfX3RvSGVhZChrZXkpIHtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fX2ludGVybmFsX19yZWZzLmdldChrZXkpO1xuICAgICAgICBpZiAocmVmICYmIHJlZiAhPT0gdGhpcy5fX2ludGVybmFsX19oZWFkKSB7XG4gICAgICAgICAgICByZWYucHJldi5uZXh0ID0gcmVmLm5leHQ7XG4gICAgICAgICAgICByZWYubmV4dC5wcmV2ID0gcmVmLnByZXY7XG4gICAgICAgICAgICByZWYubmV4dCA9IHRoaXMuX19pbnRlcm5hbF9faGVhZDtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhZC5wcmV2ID0gcmVmO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19oZWFkID0gcmVmO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiY29uc3Qga25vd24gPSB7XG4gICAgMTAwMDogJ05vcm1hbCBDbG9zdXJlJyxcbiAgICAxMDAxOiAnR29pbmcgQXdheScsXG4gICAgMTAwMjogJ1Byb3RvY29sIEVycm9yJyxcbiAgICAxMDAzOiAnVW5zdXBwb3J0ZWQgRGF0YScsXG4gICAgMTAwNDogJyhGb3IgZnV0dXJlKScsXG4gICAgMTAwNTogJ05vIFN0YXR1cyBSZWNlaXZlZCcsXG4gICAgMTAwNjogJ0Fibm9ybWFsIENsb3N1cmUnLFxuICAgIDEwMDc6ICdJbnZhbGlkIGZyYW1lIHBheWxvYWQgZGF0YScsXG4gICAgMTAwODogJ1BvbGljeSBWaW9sYXRpb24nLFxuICAgIDEwMDk6ICdNZXNzYWdlIHRvbyBiaWcnLFxuICAgIDEwMTA6ICdNaXNzaW5nIEV4dGVuc2lvbicsXG4gICAgMTAxMTogJ0ludGVybmFsIEVycm9yJyxcbiAgICAxMDEyOiAnU2VydmljZSBSZXN0YXJ0JyxcbiAgICAxMDEzOiAnVHJ5IEFnYWluIExhdGVyJyxcbiAgICAxMDE0OiAnQmFkIEdhdGV3YXknLFxuICAgIDEwMTU6ICdUTFMgSGFuZHNoYWtlJ1xufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRXU0Vycm9yU3RyaW5nKGNvZGUpIHtcbiAgICBpZiAoY29kZSA+PSAwICYmIGNvZGUgPD0gOTk5KSB7XG4gICAgICAgIHJldHVybiAnKFVudXNlZCknO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2RlID49IDEwMTYpIHtcbiAgICAgICAgaWYgKGNvZGUgPD0gMTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuICcoRm9yIFdlYlNvY2tldCBzdGFuZGFyZCknO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgPD0gMjk5OSkge1xuICAgICAgICAgICAgcmV0dXJuICcoRm9yIFdlYlNvY2tldCBleHRlbnNpb25zKSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA8PSAzOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gJyhGb3IgbGlicmFyaWVzIGFuZCBmcmFtZXdvcmtzKSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA8PSA0OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gJyhGb3IgYXBwbGljYXRpb25zKSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGtub3duW2NvZGVdIHx8ICcoVW5rbm93biknO1xufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRlbWl0dGVyMyc7XG5pbXBvcnQgeyBpc0NoaWxkQ2xhc3MsIGlzTnVsbCwgaXNVbmRlZmluZWQsIGxvZ2dlciwgbm9vcCwgb2JqZWN0U3ByZWFkLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyB4Z2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmltcG9ydCB7IFdlYlNvY2tldCB9IGZyb20gJ0Bwb2xrYWRvdC94LXdzJztcbmltcG9ydCB7IFJwY0NvZGVyIH0gZnJvbSAnLi4vY29kZXIvaW5kZXguanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzLmpzJztcbmltcG9ydCB7IERFRkFVTFRfQ0FQQUNJVFksIExSVUNhY2hlIH0gZnJvbSAnLi4vbHJ1LmpzJztcbmltcG9ydCB7IGdldFdTRXJyb3JTdHJpbmcgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5jb25zdCBBTElBU0VTID0ge1xuICAgIGNoYWluX2ZpbmFsaXNlZEhlYWQ6ICdjaGFpbl9maW5hbGl6ZWRIZWFkJyxcbiAgICBjaGFpbl9zdWJzY3JpYmVGaW5hbGlzZWRIZWFkczogJ2NoYWluX3N1YnNjcmliZUZpbmFsaXplZEhlYWRzJyxcbiAgICBjaGFpbl91bnN1YnNjcmliZUZpbmFsaXNlZEhlYWRzOiAnY2hhaW5fdW5zdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcydcbn07XG5jb25zdCBSRVRSWV9ERUxBWSA9IDI1MDA7XG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSA2MCAqIDEwMDA7XG5jb25zdCBUSU1FT1VUX0lOVEVSVkFMID0gNTAwMDtcbmNvbnN0IGwgPSBsb2dnZXIoJ2FwaS13cycpO1xuLyoqIEBpbnRlcm5hbCBDbGVhcnMgYSBSZWNvcmQ8Kj4gb2YgYWxsIGtleXMsIG9wdGlvbmFsbHkgd2l0aCBhbGwgY2FsbGJhY2sgb24gY2xlYXIgKi9cbmZ1bmN0aW9uIGVyYXNlUmVjb3JkKHJlY29yZCwgY2IpIHtcbiAgICBPYmplY3Qua2V5cyhyZWNvcmQpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKHJlY29yZFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgcmVjb3JkW2tleV07XG4gICAgfSk7XG59XG4vKiogQGludGVybmFsIENyZWF0ZXMgYSBkZWZhdWx0L2VtcHR5IHN0YXRzIG9iamVjdCAqL1xuZnVuY3Rpb24gZGVmYXVsdEVuZHBvaW50U3RhdHMoKSB7XG4gICAgcmV0dXJuIHsgYnl0ZXNSZWN2OiAwLCBieXRlc1NlbnQ6IDAsIGNhY2hlZDogMCwgZXJyb3JzOiAwLCByZXF1ZXN0czogMCwgc3Vic2NyaXB0aW9uczogMCwgdGltZW91dDogMCB9O1xufVxuLyoqXG4gKiAjIEBwb2xrYWRvdC9ycGMtcHJvdmlkZXIvd3NcbiAqXG4gKiBAbmFtZSBXc1Byb3ZpZGVyXG4gKlxuICogQGRlc2NyaXB0aW9uIFRoZSBXZWJTb2NrZXQgUHJvdmlkZXIgYWxsb3dzIHNlbmRpbmcgcmVxdWVzdHMgdXNpbmcgV2ViU29ja2V0IHRvIGEgV2ViU29ja2V0IFJQQyBzZXJ2ZXIgVENQIHBvcnQuIFVubGlrZSB0aGUgW1tIdHRwUHJvdmlkZXJdXSwgaXQgZG9lcyBzdXBwb3J0IHN1YnNjcmlwdGlvbnMgYW5kIGFsbG93cyBsaXN0ZW5pbmcgdG8gZXZlbnRzIHN1Y2ggYXMgbmV3IGJsb2NrcyBvciBiYWxhbmNlIGNoYW5nZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgQXBpIGZyb20gJ0Bwb2xrYWRvdC9hcGkvcHJvbWlzZSc7XG4gKiBpbXBvcnQgeyBXc1Byb3ZpZGVyIH0gZnJvbSAnQHBvbGthZG90L3JwYy1wcm92aWRlci93cyc7XG4gKlxuICogY29uc3QgcHJvdmlkZXIgPSBuZXcgV3NQcm92aWRlcignd3M6Ly8xMjcuMC4wLjE6OTk0NCcpO1xuICogY29uc3QgYXBpID0gbmV3IEFwaShwcm92aWRlcik7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIFtbSHR0cFByb3ZpZGVyXV1cbiAqL1xuZXhwb3J0IGNsYXNzIFdzUHJvdmlkZXIge1xuICAgIF9faW50ZXJuYWxfX2NhbGxDYWNoZTtcbiAgICBfX2ludGVybmFsX19jb2RlcjtcbiAgICBfX2ludGVybmFsX19lbmRwb2ludHM7XG4gICAgX19pbnRlcm5hbF9faGVhZGVycztcbiAgICBfX2ludGVybmFsX19ldmVudGVtaXR0ZXI7XG4gICAgX19pbnRlcm5hbF9faGFuZGxlcnMgPSB7fTtcbiAgICBfX2ludGVybmFsX19pc1JlYWR5UHJvbWlzZTtcbiAgICBfX2ludGVybmFsX19zdGF0cztcbiAgICBfX2ludGVybmFsX193YWl0aW5nRm9ySWQgPSB7fTtcbiAgICBfX2ludGVybmFsX19hdXRvQ29ubmVjdE1zO1xuICAgIF9faW50ZXJuYWxfX2VuZHBvaW50SW5kZXg7XG4gICAgX19pbnRlcm5hbF9fZW5kcG9pbnRTdGF0cztcbiAgICBfX2ludGVybmFsX19pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIF9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICBfX2ludGVybmFsX190aW1lb3V0SWQgPSBudWxsO1xuICAgIF9faW50ZXJuYWxfX3dlYnNvY2tldDtcbiAgICBfX2ludGVybmFsX190aW1lb3V0O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119ICBlbmRwb2ludCAgICBUaGUgZW5kcG9pbnQgdXJsLiBVc3VhbGx5IGB3czovL2lwOjk5NDRgIG9yIGB3c3M6Ly9pcDo5OTQ0YCwgbWF5IHByb3ZpZGUgYW4gYXJyYXkgb2YgZW5kcG9pbnQgc3RyaW5ncy5cbiAgICAgKiBAcGFyYW0ge251bWJlciB8IGZhbHNlfSBhdXRvQ29ubmVjdE1zIFdoZXRoZXIgdG8gY29ubmVjdCBhdXRvbWF0aWNhbGx5IG9yIG5vdCAoZGVmYXVsdCkuIFByb3ZpZGVkIHZhbHVlIGlzIHVzZWQgYXMgYSBkZWxheSBiZXR3ZWVuIHJldHJpZXMuXG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzIFRoZSBoZWFkZXJzIHByb3ZpZGVkIHRvIHRoZSB1bmRlcmx5aW5nIFdlYlNvY2tldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZW91dF0gQ3VzdG9tIHRpbWVvdXQgdmFsdWUgdXNlZCBwZXIgcmVxdWVzdCAuIERlZmF1bHRzIHRvIGBERUZBVUxUX1RJTUVPVVRfTVNgXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZW5kcG9pbnQgPSBkZWZhdWx0cy5XU19VUkwsIGF1dG9Db25uZWN0TXMgPSBSRVRSWV9ERUxBWSwgaGVhZGVycyA9IHt9LCB0aW1lb3V0LCBjYWNoZUNhcGFjaXR5KSB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50cyA9IEFycmF5LmlzQXJyYXkoZW5kcG9pbnQpXG4gICAgICAgICAgICA/IGVuZHBvaW50XG4gICAgICAgICAgICA6IFtlbmRwb2ludF07XG4gICAgICAgIGlmIChlbmRwb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dzUHJvdmlkZXIgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIEVuZHBvaW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZW5kcG9pbnRzLmZvckVhY2goKGVuZHBvaW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eKHdzc3x3cyk6XFwvXFwvLy50ZXN0KGVuZHBvaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kcG9pbnQgc2hvdWxkIHN0YXJ0IHdpdGggJ3dzOi8vJywgcmVjZWl2ZWQgJyR7ZW5kcG9pbnR9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19jYWxsQ2FjaGUgPSBuZXcgTFJVQ2FjaGUoY2FjaGVDYXBhY2l0eSB8fCBERUZBVUxUX0NBUEFDSVRZKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ldmVudGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXV0b0Nvbm5lY3RNcyA9IGF1dG9Db25uZWN0TXMgfHwgMDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19jb2RlciA9IG5ldyBScGNDb2RlcigpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50SW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludHMgPSBlbmRwb2ludHM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cyA9IHtcbiAgICAgICAgICAgIGFjdGl2ZTogeyByZXF1ZXN0czogMCwgc3Vic2NyaXB0aW9uczogMCB9LFxuICAgICAgICAgICAgdG90YWw6IGRlZmF1bHRFbmRwb2ludFN0YXRzKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzID0gZGVmYXVsdEVuZHBvaW50U3RhdHMoKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX190aW1lb3V0ID0gdGltZW91dCB8fCBERUZBVUxUX1RJTUVPVVRfTVM7XG4gICAgICAgIGlmIChhdXRvQ29ubmVjdE1zICYmIGF1dG9Db25uZWN0TXMgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RXaXRoUmV0cnkoKS5jYXRjaChub29wKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzUmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRlbWl0dGVyLm9uY2UoJ2Nvbm5lY3RlZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBgdHJ1ZWAgd2hlbiB0aGlzIHByb3ZpZGVyIHN1cHBvcnRzIHN1YnNjcmlwdGlvbnNcbiAgICAgKi9cbiAgICBnZXQgaGFzU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuICEhdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgYHRydWVgIHdoZW4gdGhpcyBwcm92aWRlciBzdXBwb3J0cyBjbG9uZSgpXG4gICAgICovXG4gICAgZ2V0IGlzQ2xvbmFibGUoKSB7XG4gICAgICAgIHJldHVybiAhIXRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFdoZXRoZXIgdGhlIG5vZGUgaXMgY29ubmVjdGVkIG9yIG5vdC5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGNvbm5lY3RlZFxuICAgICAqL1xuICAgIGdldCBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNDb25uZWN0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdGhlIGZpcnN0IHRpbWUgd2UgYXJlIGNvbm5lY3RlZCBhbmQgbG9hZGVkXG4gICAgICovXG4gICAgZ2V0IGlzUmVhZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2lzUmVhZHlQcm9taXNlO1xuICAgIH1cbiAgICBnZXQgZW5kcG9pbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50c1t0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50SW5kZXhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBvYmplY3RcbiAgICAgKi9cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXc1Byb3ZpZGVyKHRoaXMuX19pbnRlcm5hbF9fZW5kcG9pbnRzKTtcbiAgICB9XG4gICAgc2VsZWN0RW5kcG9pbnRJbmRleChlbmRwb2ludHMpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50SW5kZXggKyAxKSAlIGVuZHBvaW50cy5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IE1hbnVhbGx5IGNvbm5lY3RcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbV3NQcm92aWRlcl1dIGNvbm5lY3RzIGF1dG9tYXRpY2FsbHkgYnkgZGVmYXVsdCwgaG93ZXZlciBpZiB5b3UgZGVjaWRlZCBvdGhlcndpc2UsIHlvdSBtYXlcbiAgICAgKiBjb25uZWN0IG1hbnVhbGx5IHVzaW5nIHRoaXMgbWV0aG9kLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdFxuICAgIGFzeW5jIGNvbm5lY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJTb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludEluZGV4ID0gdGhpcy5zZWxlY3RFbmRwb2ludEluZGV4KHRoaXMuX19pbnRlcm5hbF9fZW5kcG9pbnRzKTtcbiAgICAgICAgICAgIC8vIHRoZSBhcyBoZXJlIGlzIERlbm8tc3BlY2lmaWMgLSBub3QgYXZhaWxhYmxlIG9uIHRoZSBnbG9iYWxUaGlzXG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldCA9IHR5cGVvZiB4Z2xvYmFsLldlYlNvY2tldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNDaGlsZENsYXNzKHhnbG9iYWwuV2ViU29ja2V0LCBXZWJTb2NrZXQpXG4gICAgICAgICAgICAgICAgPyBuZXcgV2ViU29ja2V0KHRoaXMuZW5kcG9pbnQpXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgLSBXUyBtYXkgYmUgYW4gaW5zdGFuY2Ugb2Ygd3MsIHdoaWNoIHN1cHBvcnRzIG9wdGlvbnNcbiAgICAgICAgICAgICAgICA6IG5ldyBXZWJTb2NrZXQodGhpcy5lbmRwb2ludCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuX19pbnRlcm5hbF9faGVhZGVyc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX193ZWJzb2NrZXQub25jbG9zZSA9IHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRDbG9zZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldC5vbmVycm9yID0gdGhpcy5fX2ludGVybmFsX19vblNvY2tldEVycm9yO1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRNZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0Lm9ub3BlbiA9IHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRPcGVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGltZW91dCBhbnkgaGFuZGxlcnMgdGhhdCBoYXZlIG5vdCBoYWQgYSByZXNwb25zZVxuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190aW1lb3V0SWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXRIYW5kbGVycygpLCBUSU1FT1VUX0lOVEVSVkFMKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGwuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25uZWN0LCBuZXZlciB0aHJvd2luZyBhbiBlcnJvciwgYnV0IHJhdGhlciBmb3JjaW5nIGEgcmV0cnlcbiAgICAgKi9cbiAgICBhc3luYyBjb25uZWN0V2l0aFJldHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19hdXRvQ29ubmVjdE1zID4gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0V2l0aFJldHJ5KCkuY2F0Y2gobm9vcCk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5fX2ludGVybmFsX19hdXRvQ29ubmVjdE1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTWFudWFsbHkgZGlzY29ubmVjdCBmcm9tIHRoZSBjb25uZWN0aW9uLCBjbGVhcmluZyBhdXRvLWNvbm5lY3QgbG9naWNcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgICBhc3luYyBkaXNjb25uZWN0KCkge1xuICAgICAgICAvLyBzd2l0Y2ggb2ZmIGF1dG9Db25uZWN0LCB3ZSBhcmUgaW4gbWFudWFsIG1vZGUgbm93XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXV0b0Nvbm5lY3RNcyA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX193ZWJzb2NrZXQpIHtcbiAgICAgICAgICAgICAgICAvLyAxMDAwIC0gTm9ybWFsIGNsb3N1cmU7IHRoZSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWRcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldC5jbG9zZSgxMDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGwuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHN0YXRzXG4gICAgICovXG4gICAgZ2V0IHN0YXRzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZlOiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdHM6IE9iamVjdC5rZXlzKHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnMpLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiBPYmplY3Qua2V5cyh0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMpLmxlbmd0aFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9faW50ZXJuYWxfX3N0YXRzLnRvdGFsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldCBlbmRwb2ludFN0YXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBMaXN0ZW5zIG9uIGV2ZW50cyBhZnRlciBoYXZpbmcgc3Vic2NyaWJlZCB1c2luZyB0aGUgW1tzdWJzY3JpYmVdXSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gIHtQcm92aWRlckludGVyZmFjZUVtaXR0ZWR9IHR5cGUgRXZlbnRcbiAgICAgKiBAcGFyYW0gIHtQcm92aWRlckludGVyZmFjZUVtaXRDYn0gIHN1YiAgQ2FsbGJhY2tcbiAgICAgKiBAcmV0dXJuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uXG4gICAgICovXG4gICAgb24odHlwZSwgc3ViKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXZlbnRlbWl0dGVyLm9uKHR5cGUsIHN1Yik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2V2ZW50ZW1pdHRlci5yZW1vdmVMaXN0ZW5lcih0eXBlLCBzdWIpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBTZW5kIEpTT04gZGF0YSB1c2luZyBXZWJTb2NrZXRzIHRvIGNvbmZpZ3VyZWQgSFRUUCBFbmRwb2ludCBvciBxdWV1ZS5cbiAgICAgKiBAcGFyYW0gbWV0aG9kIFRoZSBSUEMgbWV0aG9kcyB0byBleGVjdXRlXG4gICAgICogQHBhcmFtIHBhcmFtcyBFbmNvZGVkIHBhcmFtZXRlcnMgYXMgYXBwbGljYWJsZSBmb3IgdGhlIG1ldGhvZFxuICAgICAqIEBwYXJhbSBzdWJzY3JpcHRpb24gU3Vic2NyaXB0aW9uIGRldGFpbHMgKGludGVybmFsbHkgdXNlZClcbiAgICAgKi9cbiAgICBzZW5kKG1ldGhvZCwgcGFyYW1zLCBpc0NhY2hlYWJsZSwgc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZW5kcG9pbnRTdGF0cy5yZXF1ZXN0cysrO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N0YXRzLnRvdGFsLnJlcXVlc3RzKys7XG4gICAgICAgIGNvbnN0IFtpZCwgYm9keV0gPSB0aGlzLl9faW50ZXJuYWxfX2NvZGVyLmVuY29kZUpzb24obWV0aG9kLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IGlzQ2FjaGVhYmxlID8gYCR7bWV0aG9kfTo6JHtzdHJpbmdpZnkocGFyYW1zKX1gIDogJyc7XG4gICAgICAgIGxldCByZXN1bHRQcm9taXNlID0gaXNDYWNoZWFibGVcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19jYWxsQ2FjaGUuZ2V0KGNhY2hlS2V5KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAoIXJlc3VsdFByb21pc2UpIHtcbiAgICAgICAgICAgIHJlc3VsdFByb21pc2UgPSB0aGlzLl9faW50ZXJuYWxfX3NlbmQoaWQsIGJvZHksIG1ldGhvZCwgcGFyYW1zLCBzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgaWYgKGlzQ2FjaGVhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jYWxsQ2FjaGUuc2V0KGNhY2hlS2V5LCByZXN1bHRQcm9taXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZW5kcG9pbnRTdGF0cy5jYWNoZWQrKztcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc3RhdHMudG90YWwuY2FjaGVkKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFByb21pc2U7XG4gICAgfVxuICAgIGFzeW5jIF9faW50ZXJuYWxfX3NlbmQoaWQsIGJvZHksIG1ldGhvZCwgcGFyYW1zLCBzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkIHx8IHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSAoZXJyb3IsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGwuZGVidWcoKCkgPT4gWydjYWxsaW5nJywgbWV0aG9kLCBib2R5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19oYW5kbGVyc1tpZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNTZW50ID0gYm9keS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLmJ5dGVzU2VudCArPSBieXRlc1NlbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5ieXRlc1NlbnQgKz0gYnl0ZXNTZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0LnNlbmQoYm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50U3RhdHMuZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5lcnJvcnMrKztcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQG5hbWUgc3Vic2NyaWJlXG4gICAgICogQHN1bW1hcnkgQWxsb3dzIHN1YnNjcmliaW5nIHRvIGEgc3BlY2lmaWMgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxCUj5cbiAgICAgKlxuICAgICAqIGBgYGphdmFzY3JpcHRcbiAgICAgKiBjb25zdCBwcm92aWRlciA9IG5ldyBXc1Byb3ZpZGVyKCd3czovLzEyNy4wLjAuMTo5OTQ0Jyk7XG4gICAgICogY29uc3QgcnBjID0gbmV3IFJwYyhwcm92aWRlcik7XG4gICAgICpcbiAgICAgKiBycGMuc3RhdGUuc3Vic2NyaWJlU3RvcmFnZShbW3N0b3JhZ2Uuc3lzdGVtLmFjY291bnQsIDxBZGRyZXNzPl1dLCAoXywgdmFsdWVzKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyh2YWx1ZXMpXG4gICAgICogfSkudGhlbigoc3Vic2NyaXB0aW9uSWQpID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdiYWxhbmNlIGNoYW5nZXMgc3Vic2NyaXB0aW9uIGlkOiAnLCBzdWJzY3JpcHRpb25JZClcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHN1YnNjcmliZSh0eXBlLCBtZXRob2QsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLnN1YnNjcmlwdGlvbnMrKztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5zdWJzY3JpcHRpb25zKys7XG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbnMgYXJlIG5vdCBjYWNoZWQsIExSVSBhcHBsaWVzIHRvIC5hdCg8YmxvY2tIYXNoPikgb25seVxuICAgICAgICByZXR1cm4gdGhpcy5zZW5kKG1ldGhvZCwgcGFyYW1zLCBmYWxzZSwgeyBjYWxsYmFjaywgdHlwZSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgQWxsb3dzIHVuc3Vic2NyaWJpbmcgdG8gc3Vic2NyaXB0aW9ucyBtYWRlIHdpdGggW1tzdWJzY3JpYmVdXS5cbiAgICAgKi9cbiAgICBhc3luYyB1bnN1YnNjcmliZSh0eXBlLCBtZXRob2QsIGlkKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGAke3R5cGV9Ojoke2lkfWA7XG4gICAgICAgIC8vIEZJWE1FIFRoaXMgbm93IGNvdWxkIGhhcHBlbiB3aXRoIHJlLXN1YnNjcmlwdGlvbnMuIFRoZSBpc3N1ZSBpcyB0aGF0IHdpdGggYSByZS1zdWJcbiAgICAgICAgLy8gdGhlIGFzc2lnbmVkIGlkIG5vdyBkb2VzIG5vdCBtYXRjaCB3aGF0IHRoZSBBUEkgdXNlciBvcmlnaW5hbGx5IHJlY2VpdmVkLiBJdCBoYXNcbiAgICAgICAgLy8gYSBzbGlnaHQgY29tcGxpY2F0aW9uIGluIHNvbHZpbmcgLSBzaW5jZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgc2VuZCBpZCwgYnV0IHJhdGhlclxuICAgICAgICAvLyBuZWVkIHRvIGZpbmQgdGhlIGFjdHVhbCBzdWJzY3JpcHRpb24gaWQgdG8gbWFwIGl0XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnNbc3Vic2NyaXB0aW9uXSkpIHtcbiAgICAgICAgICAgIGwuZGVidWcoKCkgPT4gYFVuYWJsZSB0byBmaW5kIGFjdGl2ZSBzdWJzY3JpcHRpb249JHtzdWJzY3JpcHRpb259YCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX19pbnRlcm5hbF9fc3Vic2NyaXB0aW9uc1tzdWJzY3JpcHRpb25dO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQgJiYgIWlzTnVsbCh0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldClcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2VuZChtZXRob2QsIFtpZF0pXG4gICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfX2ludGVybmFsX19lbWl0ID0gKHR5cGUsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19ldmVudGVtaXR0ZXIuZW1pdCh0eXBlLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX29uU29ja2V0Q2xvc2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYGRpc2Nvbm5lY3RlZCBmcm9tICR7dGhpcy5lbmRwb2ludH06ICR7ZXZlbnQuY29kZX06OiAke2V2ZW50LnJlYXNvbiB8fCBnZXRXU0Vycm9yU3RyaW5nKGV2ZW50LmNvZGUpfWApO1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19hdXRvQ29ubmVjdE1zID4gMCkge1xuICAgICAgICAgICAgbC5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX193ZWJzb2NrZXQub25jbG9zZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldC5vbmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0Lm9ubWVzc2FnZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dlYnNvY2tldC5vbm9wZW4gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX193ZWJzb2NrZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXRJZCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXRJZCk7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVqZWN0IGFsbCBoYW5naW5nIHJlcXVlc3RzXG4gICAgICAgIGVyYXNlUmVjb3JkKHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnMsIChoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGguY2FsbGJhY2soZXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgdGhyb3dcbiAgICAgICAgICAgICAgICBsLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlcmFzZVJlY29yZCh0aGlzLl9faW50ZXJuYWxfX3dhaXRpbmdGb3JJZCk7XG4gICAgICAgIC8vIFJlc2V0IHN0YXRzIGZvciBhY3RpdmUgZW5kcG9pbnRcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzID0gZGVmYXVsdEVuZHBvaW50U3RhdHMoKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbWl0KCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fYXV0b0Nvbm5lY3RNcyA+IDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdFdpdGhSZXRyeSgpLmNhdGNoKG5vb3ApO1xuICAgICAgICAgICAgfSwgdGhpcy5fX2ludGVybmFsX19hdXRvQ29ubmVjdE1zKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19pbnRlcm5hbF9fb25Tb2NrZXRFcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICBsLmRlYnVnKCgpID0+IFsnc29ja2V0IGVycm9yJywgZXJyb3JdKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX29uU29ja2V0TWVzc2FnZSA9IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGwuZGVidWcoKCkgPT4gWydyZWNlaXZlZCcsIG1lc3NhZ2UuZGF0YV0pO1xuICAgICAgICBjb25zdCBieXRlc1JlY3YgPSBtZXNzYWdlLmRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2VuZHBvaW50U3RhdHMuYnl0ZXNSZWN2ICs9IGJ5dGVzUmVjdjtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5ieXRlc1JlY3YgKz0gYnl0ZXNSZWN2O1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKHJlc3BvbnNlLm1ldGhvZClcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19vblNvY2tldE1lc3NhZ2VSZXN1bHQocmVzcG9uc2UpXG4gICAgICAgICAgICA6IHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRNZXNzYWdlU3Vic2NyaWJlKHJlc3BvbnNlKTtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX29uU29ja2V0TWVzc2FnZVJlc3VsdCA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5fX2ludGVybmFsX19oYW5kbGVyc1tyZXNwb25zZS5pZF07XG4gICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgbC5kZWJ1ZygoKSA9PiBgVW5hYmxlIHRvIGZpbmQgaGFuZGxlciBmb3IgaWQ9JHtyZXNwb25zZS5pZH1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBtZXRob2QsIHBhcmFtcywgc3Vic2NyaXB0aW9uIH0gPSBoYW5kbGVyO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fX2ludGVybmFsX19jb2Rlci5kZWNvZGVSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICAvLyBmaXJzdCBzZW5kIHRoZSByZXN1bHQgLSBpbiBjYXNlIG9mIHN1YnMsIHdlIG1heSBoYXZlIGFuIHVwZGF0ZVxuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgaWYgd2UgaGF2ZSBzb21lIHF1ZXVlZCByZXN1bHRzIGFscmVhZHlcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJJZCA9IGAke3N1YnNjcmlwdGlvbi50eXBlfTo6JHtyZXN1bHR9YDtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnNbc3ViSWRdID0gb2JqZWN0U3ByZWFkKHt9LCBzdWJzY3JpcHRpb24sIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgcmVzdWx0IHdhaXRpbmcgZm9yIHRoaXMgc3Vic2NyaXB0aW9uIGFscmVhZHlcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX193YWl0aW5nRm9ySWRbc3ViSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fb25Tb2NrZXRNZXNzYWdlU3Vic2NyaWJlKHRoaXMuX19pbnRlcm5hbF9fd2FpdGluZ0ZvcklkW3N1YklkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLmVycm9ycysrO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5lcnJvcnMrKztcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbGJhY2soZXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnNbcmVzcG9uc2UuaWRdO1xuICAgIH07XG4gICAgX19pbnRlcm5hbF9fb25Tb2NrZXRNZXNzYWdlU3Vic2NyaWJlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UubWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG1ldGhvZCBmb3VuZCBpbiBKU09OUlBDIHJlc3BvbnNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWV0aG9kID0gQUxJQVNFU1tyZXNwb25zZS5tZXRob2RdIHx8IHJlc3BvbnNlLm1ldGhvZDtcbiAgICAgICAgY29uc3Qgc3ViSWQgPSBgJHttZXRob2R9Ojoke3Jlc3BvbnNlLnBhcmFtcy5zdWJzY3JpcHRpb259YDtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX19pbnRlcm5hbF9fc3Vic2NyaXB0aW9uc1tzdWJJZF07XG4gICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgLy8gc3RvcmUgdGhlIEpTT04sIHdlIGNvdWxkIGhhdmUgb3V0LW9mLW9yZGVyIHN1YmlkIGNvbWluZyBpblxuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX193YWl0aW5nRm9ySWRbc3ViSWRdID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBsLmRlYnVnKCgpID0+IGBVbmFibGUgdG8gZmluZCBoYW5kbGVyIGZvciBzdWJzY3JpcHRpb249JHtzdWJJZH1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBob3VzZWtlZXBpbmdcbiAgICAgICAgZGVsZXRlIHRoaXMuX19pbnRlcm5hbF9fd2FpdGluZ0ZvcklkW3N1YklkXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX19pbnRlcm5hbF9fY29kZXIuZGVjb2RlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgaGFuZGxlci5jYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLmVycm9ycysrO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19zdGF0cy50b3RhbC5lcnJvcnMrKztcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbGJhY2soZXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX29uU29ja2V0T3BlbiA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fd2Vic29ja2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYlNvY2tldCBjYW5ub3QgYmUgbnVsbCBpbiBvbk9wZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBsLmRlYnVnKCgpID0+IFsnY29ubmVjdGVkIHRvJywgdGhpcy5lbmRwb2ludF0pO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2lzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yZXN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2VtaXQoJ2Nvbm5lY3RlZCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX3Jlc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gdGhpcy5fX2ludGVybmFsX19zdWJzY3JpcHRpb25zO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgICAgUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoc3Vic2NyaXB0aW9ucykubWFwKGFzeW5jIChpZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgbWV0aG9kLCBwYXJhbXMsIHR5cGUgfSA9IHN1YnNjcmlwdGlvbnNbaWRdO1xuICAgICAgICAgICAgLy8gb25seSByZS1jcmVhdGUgc3Vic2NyaXB0aW9ucyB3aGljaCBhcmUgbm90IGluIGF1dGhvciAob25seSBhcmVhIHdoZXJlXG4gICAgICAgICAgICAvLyB0cmFuc2FjdGlvbnMgYXJlIGNyZWF0ZWQsIGkuZS4gc3VibWlzc2lvbnMgc3VjaCBhcyAnYXV0aG9yX3N1Ym1pdEFuZFdhdGNoRXh0cmluc2ljJ1xuICAgICAgICAgICAgLy8gYXJlIG5vdCBpbmNsdWRlZCAoYW5kIHdpbGwgbm90IGJlIHJlLWJyb2FkY2FzdClcbiAgICAgICAgICAgIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2F1dGhvcl8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdWJzY3JpYmUodHlwZSwgbWV0aG9kLCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGwuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSkuY2F0Y2gobC5lcnJvcik7XG4gICAgfTtcbiAgICBfX2ludGVybmFsX190aW1lb3V0SGFuZGxlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBpZHMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX19pbnRlcm5hbF9faGFuZGxlcnNbaWRzW2ldXTtcbiAgICAgICAgICAgIGlmICgobm93IC0gaGFuZGxlci5zdGFydCkgPiB0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmNhbGxiYWNrKG5ldyBFcnJvcihgTm8gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBSUEMgZW5kcG9pbnQgaW4gJHt0aGlzLl9faW50ZXJuYWxfX3RpbWVvdXQgLyAxMDAwfXNgKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbmRwb2ludFN0YXRzLnRpbWVvdXQrKztcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3N0YXRzLnRvdGFsLnRpbWVvdXQrKztcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fX2ludGVybmFsX19oYW5kbGVyc1tpZHNbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNvbXBhY3RUb1U4YSwgdThhQ29uY2F0U3RyaWN0LCB1OGFUb0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGNvbXBhcmVBcnJheSB9IGZyb20gJy4uL3V0aWxzL2NvbXBhcmVBcnJheS5qcyc7XG4vKipcbiAqIEBuYW1lIEFic3RyYWN0QXJyYXlcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBtYW5hZ2VzIGNvZGVjIGFycmF5cy4gSXQgaXMgYW4gZXh0ZW5zaW9uIHRvIEFycmF5LCBwcm92aWRpbmdcbiAqIHNwZWNpZmljIGVuY29kaW5nL2RlY29kaW5nIG9uIHRvcCBvZiB0aGUgYmFzZSB0eXBlLlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RBcnJheSBleHRlbmRzIEFycmF5IHtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGg7XG4gICAgaXNTdG9yYWdlRmFsbGJhY2s7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgZW5zdXJlcyB0aGF0IG9wZXJhdG9ycyBzdWNoIGFzIGNsaWNlLCBmaWx0ZXIsIG1hcCwgZXRjLiByZXR1cm5cbiAgICAgKiBuZXcgQXJyYXkgaW5zdGFuY2VzICh3aXRob3V0IHRoaXMgd2UgbmVlZCB0byBhcHBseSBvdmVycmlkZXMpXG4gICAgICovXG4gICAgc3RhdGljIGdldCBbU3ltYm9sLnNwZWNpZXNdKCkge1xuICAgICAgICByZXR1cm4gQXJyYXk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBsZW5ndGgpIHtcbiAgICAgICAgc3VwZXIobGVuZ3RoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGxvb3AgdGhyb3VnaCBhbGwgZW50cmllcyBzaW5jZSB0aGV5IG1heSBoYXZlIGEgdmFyaWFibGUgbGVuZ3RoIHRoZW1zZWx2ZXMsXG4gICAgICAgIC8vIGUuZy4gd2hlbiBhIFZlYyBvciBDb21wYWN0IGlzIGNvbnRhaW5lZCB3aXRoaW5nLCBpdCBoYXMgYSB2YXJpYWJsZSBsZW5ndGggYmFzZWQgb24gZGF0YVxuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBsZXQgdG90YWwgPSBjb21wYWN0VG9VOGEoY291bnQpLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB0b3RhbCArPSB0aGlzW2ldLmVuY29kZWRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Lmhhc2godGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAvLyBvbmx5IGluY2x1ZGVkIGhlcmUgc2luY2Ugd2UgaWdub3JlIGluaGVyaXRlZCBkb2NzXG4gICAgICAgIHJldHVybiBzdXBlci5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVBcnJheSh0aGlzLCBvdGhlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5uZXI6IHRoaXMuaW5zcGVjdElubmVyKCksXG4gICAgICAgICAgICBvdXRlcjogW2NvbXBhY3RUb1U4YSh0aGlzLmxlbmd0aCldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBJbnRlcm5hbCBwZXItaXRlbSBpbnNwZWN0aW9uIG9mIGludGVybmFsIHZhbHVlc1xuICAgICAqL1xuICAgIGluc3BlY3RJbm5lcigpIHtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlubmVyW2ldID0gdGhpc1tpXS5pbnNwZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlubmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBhbiBzdGFuZGFyZCBKYXZhU2NyaXB0IEFycmF5XG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b0hleCgpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvSGV4KHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSB0aGlzW2ldICYmIHRoaXNbaV0udG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIC8vIFdlIGFjdHVhbGx5IGxvZyBpbnNpZGUgdGhlIFU4YSBkZWNvZGluZyBhbmQgdXNlIEpTT04uc3RyaW5naWZ5KC4uLiksIHdoaWNoXG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IHRoZSBWZWMgbWF5IGJlIHBhcnRpYWxseSBwb3B1bGF0ZWQgKHNhbWUgYXBwbGllcyB0byB0b0h1bWFuLCBzYW1lIGNoZWNrKVxuICAgICAgICAgICAgcmVzdWx0W2ldID0gdGhpc1tpXSAmJiB0aGlzW2ldLnRvSlNPTigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRoaXNbaV0gJiYgdGhpc1tpXS50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0W2ldID0gdGhpc1tpXS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgWyR7cmVzdWx0LmpvaW4oJywgJyl9XWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBTQ0FMRSBzcGVjaWZpY2F0aW9uc1xuICAgICAqIEBwYXJhbSBpc0JhcmUgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBwcmVmaXhlcyAoaW50ZXJuYWwpXG4gICAgICovXG4gICAgdG9VOGEoaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSB0aGlzLnRvVThhSW5uZXIoKTtcbiAgICAgICAgcmV0dXJuIGlzQmFyZVxuICAgICAgICAgICAgPyB1OGFDb25jYXRTdHJpY3QoZW5jb2RlZClcbiAgICAgICAgICAgIDogdThhQ29uY2F0U3RyaWN0KFtjb21wYWN0VG9VOGEodGhpcy5sZW5ndGgpLCAuLi5lbmNvZGVkXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBJbnRlcm5hbCBwZXItaXRlbSBTQ0FMRSBlbmNvZGluZyBvZiBjb250YWluZWQgdmFsdWVzXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YUlubmVyKGlzQmFyZSkge1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBlbmNvZGVkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBlbmNvZGVkW2ldID0gdGhpc1tpXS50b1U4YShpc0JhcmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmNvZGVkO1xuICAgIH1cbn1cbiIsIi8qKlxuICogQG5hbWUgQmFzZVxuICogQGRlc2NyaXB0aW9uIEEgdHlwZSBleHRlbmRzIHRoZSBCYXNlIGNsYXNzLCB3aGVuIGl0IGhvbGRzIGEgdmFsdWVcbiAqL1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0QmFzZSB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpbml0aWFsVThhTGVuZ3RoO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIF9faW50ZXJuYWxfX3JhdztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGluaXRpYWxVOGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gaW5pdGlhbFU4YUxlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yYXcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1U4YSgpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIHRoZSBpbm5lciAod3JhcHBlZCB2YWx1ZSlcbiAgICAgKi9cbiAgICBnZXQgaW5uZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LmlzRW1wdHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LmVxKG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy5pbnNwZWN0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUuIGlzTGUgcmV0dXJucyBhIExFIChudW1iZXItb25seSkgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICB0b0hleChpc0xlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b0hleChpc0xlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1N0cmluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9VOGEoaXNCYXJlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGlubmVyIHdyYXBwZWQgdmFsdWUgKGVxdWl2YWxlbnQgdG8gdmFsdWVPZilcbiAgICAgKi9cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGlubmVyIHdyYXBwZWQgdmFsdWVcbiAgICAgKi9cbiAgICB2YWx1ZU9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXc7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQk4sIEJOX0JJTExJT04sIEJOX0hVTkRSRUQsIEJOX01JTExJT04sIEJOX1FVSU5USUxMLCBiblRvQm4sIGJuVG9IZXgsIGJuVG9VOGEsIGZvcm1hdEJhbGFuY2UsIGZvcm1hdE51bWJlciwgaGV4VG9CbiwgaXNCaWdJbnQsIGlzQm4sIGlzRnVuY3Rpb24sIGlzSGV4LCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1U4YSwgdThhVG9CbiwgdThhVG9OdW1iZXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9VSU5UX0JJVFMgPSA2NDtcbmNvbnN0IE1BWF9OVU1CRVJfQklUUyA9IDUyO1xuY29uc3QgTVVMX1AgPSBuZXcgQk4oMTAwMDApO1xuY29uc3QgRk9STUFUVEVSUyA9IFtcbiAgICBbJ1BlcnF1aW50aWxsJywgQk5fUVVJTlRJTExdLFxuICAgIFsnUGVyYmlsbCcsIEJOX0JJTExJT05dLFxuICAgIFsnUGVybWlsbCcsIEJOX01JTExJT05dLFxuICAgIFsnUGVyY2VudCcsIEJOX0hVTkRSRURdXG5dO1xuZnVuY3Rpb24gaXNUb0JuKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUudG9Cbik7XG59XG5mdW5jdGlvbiB0b1BlcmNlbnRhZ2UodmFsdWUsIGRpdmlzb3IpIHtcbiAgICByZXR1cm4gYCR7KHZhbHVlLm11bChNVUxfUCkuZGl2KGRpdmlzb3IpLnRvTnVtYmVyKCkgLyAxMDApLnRvRml4ZWQoMil9JWA7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVBYnN0cmFjdEludCh2YWx1ZSwgaXNOZWdhdGl2ZSkge1xuICAgIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8IHZhbHVlIDwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVyIG5lZWRzIHRvIGJlIGFuIGludGVnZXIgPD0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGkuZS4gMiBeIDUzIC0gMScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIGlmIChpc0hleCh2YWx1ZSwgLTEsIHRydWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gaGV4VG9Cbih2YWx1ZSwgeyBpc0xlOiBmYWxzZSwgaXNOZWdhdGl2ZSB9KS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnLicpIHx8IHZhbHVlLmluY2x1ZGVzKCcsJykgfHwgdmFsdWUuaW5jbHVkZXMoJ2UnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgc2hvdWxkIG5vdCBjb250YWluIGRlY2ltYWwgcG9pbnRzIG9yIHNjaWVudGlmaWMgbm90YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQm4odmFsdWUpIHx8IGlzQmlnSW50KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGlmIChpc1RvQm4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9CbigpLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWxsb3cgdGhlIGNvbnN0cnVjdGlvbiBmcm9tIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIHRvcC1sZXZlbCBrZXkuIFRoaXMgbWVhbnMgdGhhdFxuICAgICAgICAvLyBzaW5nbGUga2V5IG9iamVjdHMgY2FuIGJlIHRyZWF0ZWQgZXF1aXZhbGVudGx5IHRvIG51bWJlcnMsIGFzc3VtaW5nIHRoZXkgbWVldCB0aGVcbiAgICAgICAgLy8gc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiAoVGhpcyBpcyB1c2VmdWwgaW4gV2VpZ2h0cyAxLjUgd2hlcmUgT2JqZWN0cyBhcmUgY29tcGFjdClcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjb25zdHJ1Y3QgbnVtYmVyIGZyb20gbXVsdGkta2V5IG9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNvZGVBYnN0cmFjdEludCh2YWx1ZVtrZXlzWzBdXSwgaXNOZWdhdGl2ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY3JlYXRlIEJOIGZyb20gdW5rbm93biB0eXBlICR7dHlwZW9mIHZhbHVlfWApO1xufVxuLyoqXG4gKiBAbmFtZSBBYnN0cmFjdEludFxuICogQGlnbm9yZVxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RJbnQgZXh0ZW5kcyBCTiB7XG4gICAgcmVnaXN0cnk7XG4gICAgZW5jb2RlZExlbmd0aDtcbiAgICBpc1Vuc2lnbmVkO1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19iaXRMZW5ndGg7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlID0gMCwgYml0TGVuZ3RoID0gREVGQVVMVF9VSU5UX0JJVFMsIGlzU2lnbmVkID0gZmFsc2UpIHtcbiAgICAgICAgLy8gQ29uc3RydWN0IHZpYSBhIHN0cmluZy9udW1iZXIsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGluIHRoZSBCTiBjb25zdHJ1Y3Rvci5cbiAgICAgICAgLy8gSXQgd291bGQgYmUgaWRlYWwgdG8gYWN0dWFsbHkgcmV0dXJuIGEgQk4sIGJ1dCB0aGVyZSBpcyBhbiBpc3N1ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvYm4uanMvaXNzdWVzLzIwNlxuICAgICAgICBzdXBlcihcbiAgICAgICAgLy8gc2hvcnRjdXQgaXNVOGEgYXMgdXNlZCBpbiBTQ0FMRSBkZWNvZGluZ1xuICAgICAgICBpc1U4YSh2YWx1ZSlcbiAgICAgICAgICAgID8gYml0TGVuZ3RoIDw9IDQ4XG4gICAgICAgICAgICAgICAgPyB1OGFUb051bWJlcih2YWx1ZS5zdWJhcnJheSgwLCBiaXRMZW5ndGggLyA4KSwgeyBpc05lZ2F0aXZlOiBpc1NpZ25lZCB9KVxuICAgICAgICAgICAgICAgIDogdThhVG9Cbih2YWx1ZS5zdWJhcnJheSgwLCBiaXRMZW5ndGggLyA4KSwgeyBpc0xlOiB0cnVlLCBpc05lZ2F0aXZlOiBpc1NpZ25lZCB9KS50b1N0cmluZygpXG4gICAgICAgICAgICA6IGRlY29kZUFic3RyYWN0SW50KHZhbHVlLCBpc1NpZ25lZCkpO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoID0gYml0TGVuZ3RoO1xuICAgICAgICB0aGlzLmVuY29kZWRMZW5ndGggPSB0aGlzLl9faW50ZXJuYWxfX2JpdExlbmd0aCAvIDg7XG4gICAgICAgIHRoaXMuaW5pdGlhbFU4YUxlbmd0aCA9IHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoIC8gODtcbiAgICAgICAgdGhpcy5pc1Vuc2lnbmVkID0gIWlzU2lnbmVkO1xuICAgICAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5pc05lZygpO1xuICAgICAgICBjb25zdCBtYXhCaXRzID0gYml0TGVuZ3RoIC0gKGlzU2lnbmVkICYmICFpc05lZ2F0aXZlID8gMSA6IDApO1xuICAgICAgICBpZiAoaXNOZWdhdGl2ZSAmJiAhaXNTaWduZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLnRvUmF3VHlwZSgpfTogTmVnYXRpdmUgbnVtYmVyIHBhc3NlZCB0byB1bnNpZ25lZCB0eXBlYCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3VwZXIuYml0TGVuZ3RoKCkgPiBtYXhCaXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50b1Jhd1R5cGUoKX06IElucHV0IHRvbyBsYXJnZS4gRm91bmQgaW5wdXQgd2l0aCAke3N1cGVyLmJpdExlbmd0aCgpfSBiaXRzLCBleHBlY3RlZCAke21heEJpdHN9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGEgemVybyB2YWx1ZSAoYWxpZ24gZWxzZXdoZXJlKVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1plcm8oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIGJpdExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgLy8gSGVyZSB3ZSBhcmUgYWN0dWFsbHkgb3ZlcnJpZGluZyB0aGUgYnVpbHQtaW4gLmVxIHRvIHRha2UgY2FyZSBvZiBib3RoXG4gICAgICAgIC8vIG51bWJlciBhbmQgQk4gaW5wdXRzIChubyBgLmVxbmAgbmVlZGVkKSAtIG51bWJlcnMgd2lsbCBiZSBjb252ZXJ0ZWRcbiAgICAgICAgcmV0dXJuIHN1cGVyLmVxKGlzSGV4KG90aGVyKVxuICAgICAgICAgICAgPyBoZXhUb0JuKG90aGVyLnRvU3RyaW5nKCksIHsgaXNMZTogZmFsc2UsIGlzTmVnYXRpdmU6ICF0aGlzLmlzVW5zaWduZWQgfSlcbiAgICAgICAgICAgIDogYm5Ub0JuKG90aGVyKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3V0ZXI6IFt0aGlzLnRvVThhKCldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgdGhlIG1heCBvZiB0aGUgdHlwZVxuICAgICAqL1xuICAgIGlzTWF4KCkge1xuICAgICAgICBjb25zdCB1OGEgPSB0aGlzLnRvVThhKCkuZmlsdGVyKChiKSA9PiBiID09PSAweGZmKTtcbiAgICAgICAgcmV0dXJuIHU4YS5sZW5ndGggPT09ICh0aGlzLl9faW50ZXJuYWxfX2JpdExlbmd0aCAvIDgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIEJpZ0ludCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyXG4gICAgICovXG4gICAgdG9CaWdJbnQoKSB7XG4gICAgICAgIHJldHVybiBCaWdJbnQodGhpcy50b1N0cmluZygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIEJOIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIuIChDb21wYXRpYmlsaXR5KVxuICAgICAqL1xuICAgIHRvQm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoaXNMZSA9IGZhbHNlKSB7XG4gICAgICAgIC8vIEZvciBkaXNwbGF5L0pTT04sIHRoaXMgaXMgQkUsIGZvciBjb21wYXJlLCB1c2UgaXNMZVxuICAgICAgICByZXR1cm4gYm5Ub0hleCh0aGlzLCB7XG4gICAgICAgICAgICBiaXRMZW5ndGg6IHRoaXMuYml0TGVuZ3RoKCksXG4gICAgICAgICAgICBpc0xlLFxuICAgICAgICAgICAgaXNOZWdhdGl2ZTogIXRoaXMuaXNVbnNpZ25lZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKF9pc0V4cGFuZGVkKSB7XG4gICAgICAgIGNvbnN0IHJhd1R5cGUgPSB0aGlzLnRvUmF3VHlwZSgpO1xuICAgICAgICBpZiAocmF3VHlwZSA9PT0gJ0JhbGFuY2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01heCgpXG4gICAgICAgICAgICAgICAgPyAnZXZlcnl0aGluZydcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZXMgd2UgbmVlZCBzb21lIHdheSBvZiBkZXRlY3Rpbmcgd2hpY2ggaW5zdGFuY2UgdGhpcyBiZWxvbmdzXG4gICAgICAgICAgICAgICAgLy8gdG8uIGFzIGl0IHN0YW5kcyB3ZSB3aWxsIGFsd2F5cyBmb3JtYXQgKGluY29ycmVjdGx5KSBhZ2FpbnN0IHRoZSBmaXJzdCB0b2tlbiBkZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBmb3JtYXRCYWxhbmNlKHRoaXMsIHsgZGVjaW1hbHM6IHRoaXMucmVnaXN0cnkuY2hhaW5EZWNpbWFsc1swXSwgd2l0aFNpOiB0cnVlLCB3aXRoVW5pdDogdGhpcy5yZWdpc3RyeS5jaGFpblRva2Vuc1swXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbLCBkaXZpc29yXSA9IEZPUk1BVFRFUlMuZmluZCgoW3R5cGVdKSA9PiB0eXBlID09PSByYXdUeXBlKSB8fCBbXTtcbiAgICAgICAgcmV0dXJuIGRpdmlzb3JcbiAgICAgICAgICAgID8gdG9QZXJjZW50YWdlKHRoaXMsIGRpdmlzb3IpXG4gICAgICAgICAgICA6IGZvcm1hdE51bWJlcih0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04ob25seUhleCA9IGZhbHNlKSB7XG4gICAgICAgIC8vIEZJWE1FIHRoaXMgcmV0dXJuIHR5cGUgc2hvdWxkIGJ5IHN0cmluZyB8IG51bWJlciwgaG93ZXZlciBCTiByZXR1cm5zIHN0cmluZ1xuICAgICAgICAvLyBPcHRpb25zIGhlcmUgYXJlXG4gICAgICAgIC8vICAgLSBzdXBlci5iaXRMZW5ndGgoKSAtIHRoZSBhY3R1YWwgdXNlZCBiaXRzLCB1c2UgaGV4IHdoZW4gY2xvc2UgdG8gTUFYX1NBRkVfSU5URUdFUlxuICAgICAgICAvLyAgIC0gdGhpcy5fX2ludGVybmFsX19iaXRMZW5ndGggLSB0aGUgbWF4IHVzZWQgYml0cywgdXNlIGhleCB3aGVuIGxhcmdlciB0aGFuIG5hdGl2ZSBSdXN0IHR5cGVcbiAgICAgICAgcmV0dXJuIG9ubHlIZXggfHwgKHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoID4gMTI4KSB8fCAoc3VwZXIuYml0TGVuZ3RoKCkgPiBNQVhfTlVNQkVSX0JJVFMpXG4gICAgICAgICAgICA/IHRoaXMudG9IZXgoKVxuICAgICAgICAgICAgOiB0aGlzLnRvTnVtYmVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB2YWx1ZSBpbiBhIHByaW1pdGl2ZSBmb3JtLCBlaXRoZXIgbnVtYmVyIHdoZW4gPD0gNTIgYml0cywgb3Igc3RyaW5nIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuYml0TGVuZ3RoKCkgPiBNQVhfTlVNQkVSX0JJVFNcbiAgICAgICAgICAgID8gdGhpcy50b1N0cmluZygpXG4gICAgICAgICAgICA6IHRoaXMudG9OdW1iZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIC8vIE5PVEUgSW4gdGhlIGNhc2Ugb2YgYmFsYW5jZXMsIHdoaWNoIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcgb24gdGhlIFVJXG4gICAgICAgIC8vIGFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHksIHJldHVybiBhIHNwZWNpZmljIHZhbHVlIGZvciBpdCBzb1xuICAgICAgICAvLyB1bmRlcmx5aW5nIGl0IGFsd2F5cyBtYXRjaGVzIChubyBtYXR0ZXIgd2hpY2ggbGVuZ3RoIGl0IGFjdHVhbGx5IGlzKVxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHRoaXMucmVnaXN0cnkuY3JlYXRlQ2xhc3NVbnNhZmUoJ0JhbGFuY2UnKVxuICAgICAgICAgICAgPyAnQmFsYW5jZSdcbiAgICAgICAgICAgIDogYCR7dGhpcy5pc1Vuc2lnbmVkID8gJ3UnIDogJ2knfSR7dGhpcy5iaXRMZW5ndGgoKX1gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqIEBwYXJhbSBiYXNlIFRoZSBiYXNlIHRvIHVzZSBmb3IgdGhlIGNvbnZlcnNpb25cbiAgICAgKi9cbiAgICB0b1N0cmluZyhiYXNlKSB7XG4gICAgICAgIC8vIG9ubHkgaW5jbHVkZWQgaGVyZSBzaW5jZSB3ZSBkbyBub3QgaW5oZXJpdCBkb2NzXG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZyhiYXNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gYm5Ub1U4YSh0aGlzLCB7XG4gICAgICAgICAgICBiaXRMZW5ndGg6IHRoaXMuYml0TGVuZ3RoKCksXG4gICAgICAgICAgICBpc0xlOiB0cnVlLFxuICAgICAgICAgICAgaXNOZWdhdGl2ZTogIXRoaXMuaXNVbnNpZ25lZFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0RnJvbVU4YSwgY29tcGFjdEZyb21VOGFMaW0sIGNvbXBhY3RUb1U4YSwgaWRlbnRpdHksIGlzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgdHlwZVRvQ29uc3RydWN0b3IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5mdW5jdGlvbiBkZWNvZGVDb21wYWN0KHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgW2RlY29kZWRMZW5ndGgsIGJuXSA9ICh2YWx1ZVswXSAmIDBiMTEpIDwgMGIxMVxuICAgICAgICAgICAgPyBjb21wYWN0RnJvbVU4YUxpbSh2YWx1ZSlcbiAgICAgICAgICAgIDogY29tcGFjdEZyb21VOGEodmFsdWUpO1xuICAgICAgICByZXR1cm4gW25ldyBUeXBlKHJlZ2lzdHJ5LCBibiksIGRlY29kZWRMZW5ndGhdO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIENvbXBhY3QpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gdmFsdWUudW53cmFwKCk7XG4gICAgICAgIHJldHVybiByYXcgaW5zdGFuY2VvZiBUeXBlXG4gICAgICAgICAgICA/IFtyYXcsIDBdXG4gICAgICAgICAgICA6IFtuZXcgVHlwZShyZWdpc3RyeSwgcmF3KSwgMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgICByZXR1cm4gW3ZhbHVlLCAwXTtcbiAgICB9XG4gICAgcmV0dXJuIFtuZXcgVHlwZShyZWdpc3RyeSwgdmFsdWUpLCAwXTtcbn1cbi8qKlxuICogQG5hbWUgQ29tcGFjdFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIGNvbXBhY3QgbGVuZ3RoLWVuY29kaW5nIGNvZGVjIHdyYXBwZXIuIEl0IHBlcmZvcm1zIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIExlbmd0aCwgaG93ZXZlclxuICogZGlmZmVycyBpbiB0aGF0IGl0IHVzZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYnl0ZXMgdG8gZG8gdGhlIGFjdHVhbCBlbmNvZGluZy4gVGhpcyBpcyBtb3N0bHlcbiAqIHVzZWQgYnkgb3RoZXIgdHlwZXMgdG8gYWRkIGxlbmd0aC1wcmVmaXhlZCBlbmNvZGluZywgb3IgaW4gdGhlIGNhc2Ugb2Ygd3JhcHBlZCB0eXBlcywgdGFraW5nXG4gKiBhIG51bWJlciBhbmQgbWFraW5nIHRoZSBjb21wYWN0IHJlcHJlc2VudGF0aW9uIHRoZXJlb2ZcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBhY3Qge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19UeXBlO1xuICAgIF9faW50ZXJuYWxfX3JhdztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUgPSAwLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gPSBpZGVudGl0eSB9ID0ge30pIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX1R5cGUgPSBkZWZpbml0aW9uIHx8IHNldERlZmluaXRpb24odHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIFR5cGUpKTtcbiAgICAgICAgY29uc3QgW3JhdywgZGVjb2RlZExlbmd0aF0gPSBkZWNvZGVDb21wYWN0KHJlZ2lzdHJ5LCB0aGlzLl9faW50ZXJuYWxfX1R5cGUsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gZGVjb2RlZExlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yYXcgPSByYXc7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGUpIHtcbiAgICAgICAgbGV0IGRlZmluaXRpb247XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgICAgIGNvbnN0IHNldERlZmluaXRpb24gPSAoZCkgPT4gKGRlZmluaXRpb24gPSBkKTtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29tcGFjdCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9VOGEoKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcuaXNFbXB0eTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIGJpdExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LmJpdExlbmd0aCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy5lcShvdGhlciBpbnN0YW5jZW9mIENvbXBhY3RcbiAgICAgICAgICAgID8gb3RoZXIuX19pbnRlcm5hbF9fcmF3XG4gICAgICAgICAgICA6IG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdXRlcjogW3RoaXMudG9VOGEoKV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBCaWdJbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlclxuICAgICAqL1xuICAgIHRvQmlnSW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9CaWdJbnQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIEJOIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXJcbiAgICAgKi9cbiAgICB0b0JuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9CbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLiBpc0xlIHJldHVybnMgYSBMRSAobnVtYmVyLW9ubHkpIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgdG9IZXgoaXNMZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9IZXgoaXNMZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9OdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b051bWJlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYENvbXBhY3Q8JHt0aGlzLnJlZ2lzdHJ5LmdldENsYXNzTmFtZSh0aGlzLl9faW50ZXJuYWxfX1R5cGUpIHx8IHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvUmF3VHlwZSgpfT5gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gY29tcGFjdFRvVThhKHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvQm4oKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBlbWJlZGRlZCBbW1VJbnRdXSBvciBbW01vbWVudF1dIHZhbHVlXG4gICAgICovXG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXc7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBAbmFtZSBEb05vdENvbnN0cnVjdFxuICogQGRlc2NyaXB0aW9uXG4gKiBBbiB1bmtub3duIHR5cGUgdGhhdCBmYWlscyBvbiBjb25zdHJ1Y3Rpb24gd2l0aCB0aGUgdHlwZSBpbmZvXG4gKi9cbmV4cG9ydCBjbGFzcyBEb05vdENvbnN0cnVjdCB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19uZXZlckVycm9yO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB0eXBlTmFtZSA9ICdEb05vdENvbnN0cnVjdCcpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3IgPSBuZXcgRXJyb3IoYERvTm90Q29uc3RydWN0OiBDYW5ub3QgY29uc3RydWN0IHVua25vd24gdHlwZSAke3R5cGVOYW1lfWApO1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKHR5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIERvTm90Q29uc3RydWN0IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIHR5cGVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5fX2ludGVybmFsX19uZXZlckVycm9yO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWUgKGFsd2F5cyB0cnVlKVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkXG4gICAgICovXG4gICAgZXEoKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWRcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWRcbiAgICAgKi9cbiAgICB0b0h1bWFuKCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkXG4gICAgICovXG4gICAgdG9QcmltaXRpdmUoKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWRcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHRocm93IHRoaXMuX19pbnRlcm5hbF9fbmV2ZXJFcnJvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWRcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5fX2ludGVybmFsX19uZXZlckVycm9yO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVW5pbXBsZW1lbnRlZFxuICAgICAqL1xuICAgIHRvVThhKCkge1xuICAgICAgICB0aHJvdyB0aGlzLl9faW50ZXJuYWxfX25ldmVyRXJyb3I7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaWRlbnRpdHksIGlzSGV4LCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1U4YSwgb2JqZWN0UHJvcGVydGllcywgc3RyaW5nQ2FtZWxDYXNlLCBzdHJpbmdpZnksIHN0cmluZ1Bhc2NhbENhc2UsIHU4YUNvbmNhdFN0cmljdCwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgbWFwVG9UeXBlTWFwLCB0eXBlc1RvTWFwIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IHsgTnVsbCB9IGZyb20gJy4vTnVsbC5qcyc7XG5mdW5jdGlvbiBpc1J1c3RFbnVtKGRlZikge1xuICAgIGNvbnN0IGRlZlZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZGVmKTtcbiAgICBpZiAoZGVmVmFsdWVzLnNvbWUoKHYpID0+IGlzTnVtYmVyKHYpKSkge1xuICAgICAgICBpZiAoIWRlZlZhbHVlcy5ldmVyeSgodikgPT4gaXNOdW1iZXIodikgJiYgdiA+PSAwICYmIHYgPD0gMjU1KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG51bWJlci1pbmRleGVkIGVudW0gZGVmaW5pdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBleHRyYWN0RGVmKHJlZ2lzdHJ5LCBfZGVmKSB7XG4gICAgY29uc3QgZGVmID0ge307XG4gICAgbGV0IGlzQmFzaWM7XG4gICAgbGV0IGlzSW5kZXhlZDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShfZGVmKSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBfZGVmLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGRlZltfZGVmW2ldXSA9IHsgVHlwZTogTnVsbCwgaW5kZXg6IGkgfTtcbiAgICAgICAgfVxuICAgICAgICBpc0Jhc2ljID0gdHJ1ZTtcbiAgICAgICAgaXNJbmRleGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUnVzdEVudW0oX2RlZikpIHtcbiAgICAgICAgY29uc3QgW1R5cGVzLCBrZXlzXSA9IG1hcFRvVHlwZU1hcChyZWdpc3RyeSwgX2RlZik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGtleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgZGVmW2tleXNbaV1dID0geyBUeXBlOiBUeXBlc1tpXSwgaW5kZXg6IGkgfTtcbiAgICAgICAgfVxuICAgICAgICBpc0Jhc2ljID0gIU9iamVjdC52YWx1ZXMoZGVmKS5zb21lKCh7IFR5cGUgfSkgPT4gVHlwZSAhPT0gTnVsbCk7XG4gICAgICAgIGlzSW5kZXhlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKF9kZWYpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBlbnRyaWVzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIGluZGV4XSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBkZWZba2V5XSA9IHsgVHlwZTogTnVsbCwgaW5kZXggfTtcbiAgICAgICAgfVxuICAgICAgICBpc0Jhc2ljID0gdHJ1ZTtcbiAgICAgICAgaXNJbmRleGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVmLFxuICAgICAgICBpc0Jhc2ljLFxuICAgICAgICBpc0luZGV4ZWRcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0RW50cnlUeXBlKGRlZiwgY2hlY2tJZHgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKGRlZik7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdmFsdWVzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBUeXBlLCBpbmRleCB9ID0gdmFsdWVzW2ldO1xuICAgICAgICBpZiAoaW5kZXggPT09IGNoZWNrSWR4KSB7XG4gICAgICAgICAgICByZXR1cm4gVHlwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjcmVhdGUgRW51bSB2aWEgaW5kZXggJHtjaGVja0lkeH0sIGluICR7T2JqZWN0LmtleXMoZGVmKS5qb2luKCcsICcpfWApO1xufVxuZnVuY3Rpb24gY3JlYXRlRnJvbVU4YShyZWdpc3RyeSwgZGVmLCBpbmRleCwgdmFsdWUpIHtcbiAgICBjb25zdCBUeXBlID0gZ2V0RW50cnlUeXBlKGRlZiwgaW5kZXgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICB2YWx1ZTogbmV3IFR5cGUocmVnaXN0cnksIHZhbHVlKVxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVGcm9tVmFsdWUocmVnaXN0cnksIGRlZiwgaW5kZXggPSAwLCB2YWx1ZSkge1xuICAgIGNvbnN0IFR5cGUgPSBnZXRFbnRyeVR5cGUoZGVmLCBpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSBpbnN0YW5jZW9mIFR5cGVcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbmV3IFR5cGUocmVnaXN0cnksIHZhbHVlKVxuICAgIH07XG59XG5mdW5jdGlvbiBkZWNvZGVGcm9tSlNPTihyZWdpc3RyeSwgZGVmLCBrZXksIHZhbHVlKSB7XG4gICAgLy8gSlNPTiBjb21lcyBpbiB0aGUgZm9ybSBvZiB7IFwiPHR5cGUgKGNhbWVsQ2FzZSk+XCI6IFwiPHZhbHVlIGZvciB0eXBlPlwiIH0sIGhlcmUgd2VcbiAgICAvLyBhZGRpdGlvbmFsbHkgZm9yY2UgdG8gbG93ZXIgdG8gZW5zdXJlIGZvcndhcmQgY29tcGF0XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZikubWFwKChrKSA9PiBrLnRvTG93ZXJDYXNlKCkpO1xuICAgIGNvbnN0IGtleUxvd2VyID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgaW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5TG93ZXIpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbWFwIEVudW0gSlNPTiwgdW5hYmxlIHRvIGZpbmQgJyR7a2V5fScgaW4gJHtrZXlzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tVmFsdWUocmVnaXN0cnksIGRlZiwgT2JqZWN0LnZhbHVlcyhkZWYpW2luZGV4XS5pbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnVtKCR7a2V5fSk6OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjb2RlRW51bShyZWdpc3RyeSwgZGVmLCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAvLyBOT1RFIFdlIGNoZWNrIHRoZSBpbmRleCBwYXRoIGZpcnN0LCBiZWZvcmUgbG9va2luZyBhdCB2YWx1ZXMgLSB0aGlzIGFsbG93cyB0cmVhdGluZ1xuICAgIC8vIHRoZSBvcHRpb25hbCBpbmRleGVzIGJlZm9yZSBhbnl0aGluZyBlbHNlLCBtb3JlLXNwZWNpZmljID4gbGVzcy1zcGVjaWZpY1xuICAgIGlmIChpc051bWJlcihpbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21WYWx1ZShyZWdpc3RyeSwgZGVmLCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1U4YSh2YWx1ZSkgfHwgaXNIZXgodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHU4YSA9IHU4YVRvVThhKHZhbHVlKTtcbiAgICAgICAgLy8gbmVzdGVkLCB3ZSBkb24ndCB3YW50IHRvIG1hdGNoIGlzT2JqZWN0IGJlbG93XG4gICAgICAgIGlmICh1OGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRnJvbVU4YShyZWdpc3RyeSwgZGVmLCB1OGFbMF0sIHU4YS5zdWJhcnJheSgxKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBFbnVtKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tVmFsdWUocmVnaXN0cnksIGRlZiwgdmFsdWUuaW5kZXgsIHZhbHVlLnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tVmFsdWUocmVnaXN0cnksIGRlZiwgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZUZyb21KU09OKHJlZ2lzdHJ5LCBkZWYsIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXModmFsdWUpWzBdO1xuICAgICAgICByZXR1cm4gZGVjb2RlRnJvbUpTT04ocmVnaXN0cnksIGRlZiwga2V5LCB2YWx1ZVtrZXldKTtcbiAgICB9XG4gICAgLy8gV29yc3QtY2FzZSBzY2VuYXJpbywgcmV0dXJuIHRoZSBmaXJzdCB3aXRoIGRlZmF1bHRcbiAgICByZXR1cm4gY3JlYXRlRnJvbVZhbHVlKHJlZ2lzdHJ5LCBkZWYsIE9iamVjdC52YWx1ZXMoZGVmKVswXS5pbmRleCk7XG59XG4vKipcbiAqIEBuYW1lIEVudW1cbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBpbXBsZW1lbnRzIGFuIGVudW0sIHRoYXQgYmFzZWQgb24gdGhlIHZhbHVlIHdyYXBzIGEgZGlmZmVyZW50IHR5cGUuIEl0IGlzIGVmZmVjdGl2ZWx5XG4gKiBhbiBleHRlbnNpb24gdG8gZW51bSB3aGVyZSB0aGUgdmFsdWUgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3R1YWwgaW5kZXguXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnVtIHtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGg7XG4gICAgaXNTdG9yYWdlRmFsbGJhY2s7XG4gICAgX19pbnRlcm5hbF9fZGVmO1xuICAgIF9faW50ZXJuYWxfX2VudHJ5SW5kZXg7XG4gICAgX19pbnRlcm5hbF9faW5kZXhlcztcbiAgICBfX2ludGVybmFsX19pc0Jhc2ljO1xuICAgIF9faW50ZXJuYWxfX2lzSW5kZXhlZDtcbiAgICBfX2ludGVybmFsX19yYXc7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIFR5cGVzLCB2YWx1ZSwgaW5kZXgsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiA9IGlkZW50aXR5IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB7IGRlZiwgaXNCYXNpYywgaXNJbmRleGVkIH0gPSBkZWZpbml0aW9uIHx8IHNldERlZmluaXRpb24oZXh0cmFjdERlZihyZWdpc3RyeSwgVHlwZXMpKTtcbiAgICAgICAgLy8gc2hvcnRjdXQgaXNVOGEgYXMgdXNlZCBpbiBTQ0FMRSBkZWNvZGluZ1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gaXNVOGEodmFsdWUpICYmIHZhbHVlLmxlbmd0aCAmJiAhaXNOdW1iZXIoaW5kZXgpXG4gICAgICAgICAgICA/IGNyZWF0ZUZyb21VOGEocmVnaXN0cnksIGRlZiwgdmFsdWVbMF0sIHZhbHVlLnN1YmFycmF5KDEpKVxuICAgICAgICAgICAgOiBkZWNvZGVFbnVtKHJlZ2lzdHJ5LCBkZWYsIHZhbHVlLCBpbmRleCk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19kZWYgPSBkZWY7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faXNCYXNpYyA9IGlzQmFzaWM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faXNJbmRleGVkID0gaXNJbmRleGVkO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2luZGV4ZXMgPSBPYmplY3QudmFsdWVzKGRlZikubWFwKCh7IGluZGV4IH0pID0+IGluZGV4KTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19lbnRyeUluZGV4ID0gdGhpcy5fX2ludGVybmFsX19pbmRleGVzLmluZGV4T2YoZGVjb2RlZC5pbmRleCk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmF3ID0gZGVjb2RlZC52YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fcmF3LmluaXRpYWxVOGFMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFU4YUxlbmd0aCA9IDEgKyB0aGlzLl9faW50ZXJuYWxfX3Jhdy5pbml0aWFsVThhTGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGVzKSB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmV0dXJuLWFzc2lnblxuICAgICAgICBjb25zdCBzZXREZWZpbml0aW9uID0gKGQpID0+IGRlZmluaXRpb24gPSBkO1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBFbnVtIHtcbiAgICAgICAgICAgIHN0YXRpYyB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IEFycmF5LmlzQXJyYXkoVHlwZXMpXG4gICAgICAgICAgICAgICAgICAgID8gVHlwZXNcbiAgICAgICAgICAgICAgICAgICAgOiBPYmplY3Qua2V5cyhUeXBlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBhc0tleXMgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzS2V5cyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBzdHJpbmdQYXNjYWxDYXNlKGtleXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICBhc0tleXNbaV0gPSBgYXMke25hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgaXNLZXlzW2ldID0gYGlzJHtuYW1lfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iamVjdFByb3BlcnRpZXModGhpcy5wcm90b3R5cGUsIGlzS2V5cywgKF8sIGksIHNlbGYpID0+IHNlbGYudHlwZSA9PT0ga2V5c1tpXSk7XG4gICAgICAgICAgICAgICAgb2JqZWN0UHJvcGVydGllcyh0aGlzLnByb3RvdHlwZSwgYXNLZXlzLCAoaywgaSwgc2VsZikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi50eXBlICE9PSBrZXlzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0ICcke3NlbGYudHlwZX0nIHZpYSAke2t9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIFR5cGVzLCB2YWx1ZSwgaW5kZXgsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIDEgKyB0aGlzLl9faW50ZXJuYWxfX3Jhdy5lbmNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Lmhhc2godGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmRleCBvZiB0aGUgZW51bSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faW5kZXhlc1t0aGlzLl9faW50ZXJuYWxfX2VudHJ5SW5kZXhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHZhbHVlIG9mIHRoZSBlbnVtXG4gICAgICovXG4gICAgZ2V0IGlubmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiB0cnVlIGlmIHRoaXMgaXMgYSBiYXNpYyBlbnVtIChubyB2YWx1ZXMpXG4gICAgICovXG4gICAgZ2V0IGlzQmFzaWMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2lzQmFzaWM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3Jhdy5pc0VtcHR5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSBFbnVtIHBvaW50cyB0byBhIFtbTnVsbF1dIHR5cGVcbiAgICAgKi9cbiAgICBnZXQgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcgaW5zdGFuY2VvZiBOdWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGF2YWlsYWJsZSBrZXlzIGZvciB0aGlzIGVudW1cbiAgICAgKi9cbiAgICBnZXQgZGVmSW5kZXhlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faW5kZXhlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhdmFpbGFibGUga2V5cyBmb3IgdGhpcyBlbnVtXG4gICAgICovXG4gICAgZ2V0IGRlZktleXMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9faW50ZXJuYWxfX2RlZik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGlzIGVudW0gdmFsdWUgcmVwcmVzZW50c1xuICAgICAqL1xuICAgIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZLZXlzW3RoaXMuX19pbnRlcm5hbF9fZW50cnlJbmRleF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdmFsdWUgb2YgdGhlIGVudW1cbiAgICAgKi9cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICAvLyBjYXRlciBmb3IgdGhlIGNhc2Ugd2hlcmUgd2Ugb25seSBwYXNzIHRoZSBlbnVtIGluZGV4XG4gICAgICAgIGlmIChpc1U4YShvdGhlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy50b1U4YSgpLnNvbWUoKGVudHJ5LCBpbmRleCkgPT4gZW50cnkgIT09IG90aGVyW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIob3RoZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b051bWJlcigpID09PSBvdGhlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9faW50ZXJuYWxfX2lzQmFzaWMgJiYgaXNTdHJpbmcob3RoZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBvdGhlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0hleChvdGhlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvSGV4KCkgPT09IG90aGVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG90aGVyIGluc3RhbmNlb2YgRW51bSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IG90aGVyLmluZGV4ICYmIHRoaXMudmFsdWUuZXEob3RoZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KG90aGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuZXEob3RoZXJbdGhpcy50eXBlXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29tcGFyZSB0aGUgYWN0dWFsIHdyYXBwZXIgdmFsdWVcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuZXEob3RoZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9faXNCYXNpYykge1xuICAgICAgICAgICAgcmV0dXJuIHsgb3V0ZXI6IFtuZXcgVWludDhBcnJheShbdGhpcy5pbmRleF0pXSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgaW5uZXIsIG91dGVyID0gW10gfSA9IHRoaXMuX19pbnRlcm5hbF9fcmF3Lmluc3BlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlubmVyLFxuICAgICAgICAgICAgb3V0ZXI6IFtuZXcgVWludDhBcnJheShbdGhpcy5pbmRleF0pLCAuLi5vdXRlcl1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KCkge1xuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19pc0Jhc2ljIHx8IHRoaXMuaXNOb25lXG4gICAgICAgICAgICA/IHRoaXMudHlwZVxuICAgICAgICAgICAgOiB7IFt0aGlzLnR5cGVdOiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2lzQmFzaWNcbiAgICAgICAgICAgID8gdGhpcy50eXBlXG4gICAgICAgICAgICA6IHsgW3N0cmluZ0NhbWVsQ2FzZSh0aGlzLnR5cGUpXTogdGhpcy5fX2ludGVybmFsX19yYXcudG9KU09OKCkgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9OdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNCYXNpY1xuICAgICAgICAgICAgPyB0aGlzLnR5cGVcbiAgICAgICAgICAgIDogeyBbc3RyaW5nQ2FtZWxDYXNlKHRoaXMudHlwZSldOiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgcmF3IHN0cnVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZW51bSB0eXBlc1xuICAgICAqL1xuICAgIF90b1Jhd1N0cnVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9faXNCYXNpYykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faXNJbmRleGVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmRlZktleXMucmVkdWNlKChvdXQsIGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0W2tleV0gPSB0aGlzLl9faW50ZXJuYWxfX2luZGV4ZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICAgICAgICAgIDogdGhpcy5kZWZLZXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9faW50ZXJuYWxfX2RlZik7XG4gICAgICAgIHJldHVybiB0eXBlc1RvTWFwKHRoaXMucmVnaXN0cnksIGVudHJpZXMucmVkdWNlKChvdXQsIFtrZXksIHsgVHlwZSB9XSwgaSkgPT4ge1xuICAgICAgICAgICAgb3V0WzBdW2ldID0gVHlwZTtcbiAgICAgICAgICAgIG91dFsxXVtpXSA9IGtleTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH0sIFtuZXcgQXJyYXkoZW50cmllcy5sZW5ndGgpLCBuZXcgQXJyYXkoZW50cmllcy5sZW5ndGgpXSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeSh7IF9lbnVtOiB0aGlzLl90b1Jhd1N0cnVjdCgpIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc05vbmVcbiAgICAgICAgICAgID8gdGhpcy50eXBlXG4gICAgICAgICAgICA6IHN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgcmV0dXJuIGlzQmFyZVxuICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1U4YShpc0JhcmUpXG4gICAgICAgICAgICA6IHU4YUNvbmNhdFN0cmljdChbXG4gICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoW3RoaXMuaW5kZXhdKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1U4YShpc0JhcmUpXG4gICAgICAgICAgICBdKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEludCB9IGZyb20gJy4uL2Fic3RyYWN0L0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIEludFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIGdlbmVyaWMgc2lnbmVkIGludGVnZXIgY29kZWMuIEZvciBTdWJzdHJhdGUgYWxsIG51bWJlcnMgYXJlIExpdHRsZSBFbmRpYW4gZW5jb2RlZCxcbiAqIHRoaXMgaGFuZGxlcyB0aGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHRob3NlIG51bWJlcnMuIFVwb24gY29uc3RydWN0aW9uXG4gKiB0aGUgYml0TGVuZ3RoIGlzIHByb3ZpZGVkIGFuZCBhbnkgYWRkaXRpb25hbCB1c2Uga2VlcHMgdGhlIG51bWJlciB0byB0aGlzXG4gKiBsZW5ndGguIFRoaXMgZXh0ZW5kcyBgQk5gLCBzbyBhbGwgbWV0aG9kcyBhdmFpbGFibGUgb24gYSBub3JtYWwgYEJOYCBvYmplY3RcbiAqIGlzIGF2YWlsYWJsZSBoZXJlLlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgSW50IGV4dGVuZHMgQWJzdHJhY3RJbnQge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSA9IDAsIGJpdExlbmd0aCkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgdmFsdWUsIGJpdExlbmd0aCwgdHJ1ZSk7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKGJpdExlbmd0aCwgdHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgSW50IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSwgYml0TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZU5hbWUgfHwgc3VwZXIudG9SYXdUeXBlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNOdWxsIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqXG4gKiBAbmFtZSBOdWxsXG4gKiBAZGVzY3JpcHRpb25cbiAqIEltcGxlbWVudHMgYSB0eXBlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnl0aGluZyAoYXBhcnQgZnJvbSBgbnVsbGApXG4gKi9cbmV4cG9ydCBjbGFzcyBOdWxsIHtcbiAgICBlbmNvZGVkTGVuZ3RoID0gMDtcbiAgICBpc0VtcHR5ID0gdHJ1ZTtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGggPSAwO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5KSB7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy5oYXNoIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBOdWxsJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgTnVsbCB8fCBpc051bGwob3RoZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiAnMHgnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgaXNDb2RlYywgaXNOdWxsLCBpc1U4YSwgaXNVbmRlZmluZWQsIHU4YVRvSGV4IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgdHlwZVRvQ29uc3RydWN0b3IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBOdWxsIH0gZnJvbSAnLi9OdWxsLmpzJztcbmNsYXNzIE5vbmUgZXh0ZW5kcyBOdWxsIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdOb25lJztcbiAgICB9XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVPcHRpb24ocmVnaXN0cnksIFR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgICAvLyBkb24ndCByZS1jcmVhdGUsIHVzZSBhcyBpdCAod2hpY2ggYWxzbyBjYXRlcnMgZm9yIGRlcml2ZWQgdHlwZXMpXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgICAgaWYgKHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgICAgICAgLy8gc2FtZSBpbnN0YW5jZSwgcmV0dXJuIGl0XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNOb25lKSB7XG4gICAgICAgICAgICAvLyBpbnRlcm5hbCBpcyBOb25lLCB3ZSBhcmUgYWxzbyBub25lXG4gICAgICAgICAgICByZXR1cm4gbmV3IE5vbmUocmVnaXN0cnkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnZlcnQgdGhlIGFjdHVhbCB2YWx1ZSBpbnRvIGtub3duXG4gICAgICAgIHJldHVybiBuZXcgVHlwZShyZWdpc3RyeSwgdmFsdWUudmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc051bGwodmFsdWUpIHx8IGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJzB4JyB8fCB2YWx1ZSBpbnN0YW5jZW9mIE5vbmUpIHtcbiAgICAgICAgLy8gYW55dGhpbmcgZW1wdHkgd2UgcGFzcyBhcy1pc1xuICAgICAgICByZXR1cm4gbmV3IE5vbmUocmVnaXN0cnkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gdGhlIGlzVThhIGNoZWNrIGhhcHBlbnMgbGFzdCBpbiB0aGUgaWYtdHJlZSAtIHNpbmNlIHRoZSB3cmFwcGVkIHZhbHVlXG4gICAgICAgIC8vIG1heSBiZSBhbiBpbnN0YW5jZSBvZiBpdCwgc28gVHlwZSBhbmQgT3B0aW9uIGNoZWNrcyBnbyBpbiBmaXJzdFxuICAgICAgICByZXR1cm4gIXZhbHVlLmxlbmd0aCB8fCB2YWx1ZVswXSA9PT0gMFxuICAgICAgICAgICAgPyBuZXcgTm9uZShyZWdpc3RyeSlcbiAgICAgICAgICAgIDogbmV3IFR5cGUocmVnaXN0cnksIHZhbHVlLnN1YmFycmF5KDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUeXBlKHJlZ2lzdHJ5LCB2YWx1ZSk7XG59XG4vKipcbiAqIEBuYW1lIE9wdGlvblxuICogQGRlc2NyaXB0aW9uXG4gKiBBbiBPcHRpb24gaXMgYW4gb3B0aW9uYWwgZmllbGQuIEJhc2ljYWxseSB0aGUgZmlyc3QgYnl0ZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpc1xuICogaXMgdmFsdWUgdG8gZm9sbG93LiBJZiB0aGUgYnl0ZSBpcyBgMWAgdGhlcmUgaXMgYW4gYWN0dWFsIHZhbHVlLiBTbyB0aGUgT3B0aW9uXG4gKiBpbXBsZW1lbnRzIHRoYXQgLSBkZWNvZGVzLCBjaGVja3MgZm9yIG9wdGlvbmFsaXR5IGFuZCB3cmFwcyB0aGUgcmVxdWlyZWQgc3RydWN0dXJlXG4gKiB3aXRoIGEgdmFsdWUgaWYvYXMgcmVxdWlyZWQvZm91bmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBPcHRpb24ge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19UeXBlO1xuICAgIF9faW50ZXJuYWxfX3JhdztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdHlwZU5hbWUsIHZhbHVlLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gPSBpZGVudGl0eSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgVHlwZSA9IGRlZmluaXRpb24gfHwgc2V0RGVmaW5pdGlvbih0eXBlVG9Db25zdHJ1Y3RvcihyZWdpc3RyeSwgdHlwZU5hbWUpKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGlzVThhKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggJiYgIWlzQ29kZWModmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlWzBdID09PSAwXG4gICAgICAgICAgICAgICAgPyBuZXcgTm9uZShyZWdpc3RyeSlcbiAgICAgICAgICAgICAgICA6IG5ldyBUeXBlKHJlZ2lzdHJ5LCB2YWx1ZS5zdWJhcnJheSgxKSlcbiAgICAgICAgICAgIDogZGVjb2RlT3B0aW9uKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19UeXBlID0gVHlwZTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19yYXcgPSBkZWNvZGVkO1xuICAgICAgICBpZiAoZGVjb2RlZD8uaW5pdGlhbFU4YUxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gMSArIGRlY29kZWQuaW5pdGlhbFU4YUxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgd2l0aChUeXBlKSB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uO1xuICAgICAgICBjb25zdCBzZXREZWZpbml0aW9uID0gKGQpID0+IHtcbiAgICAgICAgICAgIGRlZmluaXRpb24gPSBkO1xuICAgICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIE9wdGlvbiB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgLy8gYm9vbGVhbiBieXRlIChoYXMgdmFsdWUsIGRvZXNuJ3QgaGF2ZSkgYWxvbmcgd2l0aCB3cmFwcGVkIGxlbmd0aFxuICAgICAgICByZXR1cm4gMSArIHRoaXMuX19pbnRlcm5hbF9fcmF3LmVuY29kZWRMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSBPcHRpb24gaGFzIG5vIHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTm9uZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgT3B0aW9uIGhhcyBubyB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc05vbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdyBpbnN0YW5jZW9mIE5vbmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIE9wdGlvbiBoYXMgYSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc1NvbWUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc05vbmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0dWFsIHZhbHVlIGZvciB0aGUgT3B0aW9uXG4gICAgICovXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuaXNTb21lID09PSBvdGhlci5pc1NvbWUpICYmIHRoaXMudmFsdWUuZXEob3RoZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmVxKG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgb3V0ZXI6IFtuZXcgVWludDhBcnJheShbMF0pXSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgaW5uZXIsIG91dGVyID0gW10gfSA9IHRoaXMuX19pbnRlcm5hbF9fcmF3Lmluc3BlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlubmVyLFxuICAgICAgICAgICAgb3V0ZXI6IFtuZXcgVWludDhBcnJheShbMV0pLCAuLi5vdXRlcl1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KCkge1xuICAgICAgICAvLyBUaGlzIGF0dGVtcHRzIHRvIGFsaWduIHdpdGggdGhlIEpTT04gZW5jb2RpbmcgLSBhY3R1YWxseSBpbiB0aGlzIGNhc2VcbiAgICAgICAgLy8gdGhlIGlzU29tZSB2YWx1ZSBpcyBjb3JyZWN0LCBob3dldmVyIHRoZSBgaXNOb25lYCBtYXkgYmUgcHJvYmxlbWF0aWNcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNOb25lXG4gICAgICAgICAgICA/ICcweCdcbiAgICAgICAgICAgIDogdThhVG9IZXgodGhpcy50b1U4YSgpLnN1YmFycmF5KDEpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNOb25lXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogdGhpcy5fX2ludGVybmFsX19yYXcudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc05vbmVcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZShpc0JhcmUpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IHRoaXMucmVnaXN0cnkuZ2V0Q2xhc3NOYW1lKHRoaXMuX19pbnRlcm5hbF9fVHlwZSkgfHwgbmV3IHRoaXMuX19pbnRlcm5hbF9fVHlwZSh0aGlzLnJlZ2lzdHJ5KS50b1Jhd1R5cGUoKTtcbiAgICAgICAgcmV0dXJuIGlzQmFyZVxuICAgICAgICAgICAgPyB3cmFwcGVkXG4gICAgICAgICAgICA6IGBPcHRpb248JHt3cmFwcGVkfT5gO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19yYXcudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgaWYgKGlzQmFyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fcmF3LnRvVThhKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHU4YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuZW5jb2RlZExlbmd0aCk7XG4gICAgICAgIGlmICh0aGlzLmlzU29tZSkge1xuICAgICAgICAgICAgdThhLnNldChbMV0pO1xuICAgICAgICAgICAgdThhLnNldCh0aGlzLl9faW50ZXJuYWxfX3Jhdy50b1U4YSgpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdThhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgdmFsdWUgdGhhdCB0aGUgT3B0aW9uIHJlcHJlc2VudHMgKGlmIGF2YWlsYWJsZSksIHRocm93cyBpZiBudWxsXG4gICAgICovXG4gICAgdW53cmFwKCkge1xuICAgICAgICBpZiAodGhpcy5pc05vbmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3B0aW9uOiB1bndyYXBwaW5nIGEgTm9uZSB2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3JhdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgdGhlIE9wdGlvbiByZXByZXNlbnRzIChpZiBhdmFpbGFibGUpIG9yIGRlZmF1bHRWYWx1ZSBpZiBub25lXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBvcHRpb24gaXNOb25lXG4gICAgICovXG4gICAgdW53cmFwT3IoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU29tZVxuICAgICAgICAgICAgPyB0aGlzLnVud3JhcCgpXG4gICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgdGhlIE9wdGlvbiByZXByZXNlbnRzIChpZiBhdmFpbGFibGUpIG9yIGRlZmF1bHRWYWx1ZSBpZiBub25lXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBvcHRpb24gaXNOb25lXG4gICAgICovXG4gICAgdW53cmFwT3JEZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NvbWVcbiAgICAgICAgICAgID8gdGhpcy51bndyYXAoKVxuICAgICAgICAgICAgOiBuZXcgdGhpcy5fX2ludGVybmFsX19UeXBlKHRoaXMucmVnaXN0cnkpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVudW0gfSBmcm9tICcuL0VudW0uanMnO1xuLyoqXG4gKiBAbmFtZSBSZXN1bHRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBSZXN1bHQgbWFwcyB0byB0aGUgUnVzdCBSZXN1bHQgdHlwZSwgdGhhdCBjYW4gZWl0aGVyIHdyYXAgYSBzdWNjZXNzIG9yIGVycm9yIHZhbHVlXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN1bHQgZXh0ZW5kcyBFbnVtIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgT2ssIEVyciwgdmFsdWUpIHtcbiAgICAgICAgLy8gTk9URSBUaGlzIGlzIG9yZGVyLWRlcGVuZGVudCwgT2sgKHdpdGggaW5kZXggMCkgbmVlZHMgdG8gYmUgZmlyc3RcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgeyBPaywgRXJyIH0sIHZhbHVlKTtcbiAgICB9XG4gICAgc3RhdGljIHdpdGgoVHlwZXMpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgUmVzdWx0IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlcy5PaywgVHlwZXMuRXJyLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVyIEVyciB2YWx1ZSAoaWYgaXNFcnIpXG4gICAgICovXG4gICAgZ2V0IGFzRXJyKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4dHJhY3QgRXJyIHZhbHVlIGZyb20gT2sgcmVzdWx0LCBjaGVjayBpc0VyciBmaXJzdCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlciBPayB2YWx1ZSAoaWYgaXNPaylcbiAgICAgKi9cbiAgICBnZXQgYXNPaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4dHJhY3QgT2sgdmFsdWUgZnJvbSBFcnIgcmVzdWx0LCBjaGVjayBpc09rIGZpcnN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIFJlc3VsdCBoYXMgbm8gdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPayAmJiB0aGlzLnZhbHVlLmlzRW1wdHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIFJlc3VsdCB3cmFwcyBhbiBFcnIgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFcnIoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSBSZXN1bHQgd3JhcHMgYW4gT2sgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNPaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICBjb25zdCBUeXBlcyA9IHRoaXMuX3RvUmF3U3RydWN0KCk7XG4gICAgICAgIHJldHVybiBgUmVzdWx0PCR7VHlwZXMuT2t9LCR7VHlwZXMuRXJyfT5gO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGlkZW50aXR5LCBpc0Z1bmN0aW9uLCBpc0hleCwgaXNTdHJpbmcsIGlzVThhLCBzdHJpbmdpZnksIHU4YUNvbmNhdFN0cmljdCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBBYnN0cmFjdEFycmF5IH0gZnJvbSAnLi4vYWJzdHJhY3QvQXJyYXkuanMnO1xuaW1wb3J0IHsgZGVjb2RlVThhLCBtYXBUb1R5cGVNYXAsIHR5cGVzVG9Db25zdHJ1Y3RvcnMsIHR5cGVUb0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlVHVwbGUocmVnaXN0cnksIHJlc3VsdCwgdmFsdWUsIENsYXNzZXMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgVHlwZXMgPSBDbGFzc2VzWzBdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBUeXBlcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdmFsdWU/LltpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBlbnRyeSBpbnN0YW5jZW9mIFR5cGVzW2ldXG4gICAgICAgICAgICAgICAgICAgID8gZW50cnlcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgVHlwZXNbaV0ocmVnaXN0cnksIGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHVwbGU6IGZhaWxlZCBvbiAke2l9OjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmVzdWx0LCAwXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNIZXgodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVOGEocmVnaXN0cnksIHJlc3VsdCwgdThhVG9VOGEodmFsdWUpLCBDbGFzc2VzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXZhbHVlIHx8ICFyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IFR5cGVzID0gQ2xhc3Nlc1swXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gVHlwZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0W2ldID0gbmV3IFR5cGVzW2ldKHJlZ2lzdHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3Jlc3VsdCwgMF07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkgaW5wdXQgdG8gVHVwbGUgZGVjb2RpbmcsIGZvdW5kICR7dHlwZW9mIHZhbHVlfTogJHtzdHJpbmdpZnkodmFsdWUpfWApO1xufVxuLyoqXG4gKiBAbmFtZSBUdXBsZVxuICogQGRlc2NyaXB0aW9uXG4gKiBBIFR1cGxlIGRlZmluZXMgYW4gYW5vbnltb3VzIGZpeGVkLWxlbmd0aCBhcnJheSwgd2hlcmUgZWFjaCBlbGVtZW50IGhhcyBpdHNcbiAqIG93biB0eXBlLiBJdCBleHRlbmRzIHRoZSBiYXNlIEpTIGBBcnJheWAgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgVHVwbGUgZXh0ZW5kcyBBYnN0cmFjdEFycmF5IHtcbiAgICBfX2ludGVybmFsX19UeXBlcztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZXMsIHZhbHVlLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gPSBpZGVudGl0eSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgQ2xhc3NlcyA9IGRlZmluaXRpb24gfHwgc2V0RGVmaW5pdGlvbihBcnJheS5pc0FycmF5KFR5cGVzKVxuICAgICAgICAgICAgPyBbdHlwZXNUb0NvbnN0cnVjdG9ycyhyZWdpc3RyeSwgVHlwZXMpLCBbXV1cbiAgICAgICAgICAgIDogaXNGdW5jdGlvbihUeXBlcykgfHwgaXNTdHJpbmcoVHlwZXMpXG4gICAgICAgICAgICAgICAgPyBbW3R5cGVUb0NvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBUeXBlcyldLCBbXV1cbiAgICAgICAgICAgICAgICA6IG1hcFRvVHlwZU1hcChyZWdpc3RyeSwgVHlwZXMpKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIENsYXNzZXNbMF0ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gKGlzVThhKHZhbHVlKVxuICAgICAgICAgICAgPyBkZWNvZGVVOGEocmVnaXN0cnksIHRoaXMsIHZhbHVlLCBDbGFzc2VzKVxuICAgICAgICAgICAgOiBkZWNvZGVUdXBsZShyZWdpc3RyeSwgdGhpcywgdmFsdWUsIENsYXNzZXMpKVsxXTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19UeXBlcyA9IENsYXNzZXM7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGVzKSB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmV0dXJuLWFzc2lnblxuICAgICAgICBjb25zdCBzZXREZWZpbml0aW9uID0gKGQpID0+IGRlZmluaXRpb24gPSBkO1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBUdXBsZSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZXMsIHZhbHVlLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHRoaXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdG90YWwgKz0gdGhpc1tpXS5lbmNvZGVkTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0eXBlcyBkZWZpbml0aW9uIG9mIHRoZSB0dXBsZVxuICAgICAqL1xuICAgIGdldCBUeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fVHlwZXNbMV0ubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuX19pbnRlcm5hbF9fVHlwZXNbMV1cbiAgICAgICAgICAgIDogdGhpcy5fX2ludGVybmFsX19UeXBlc1swXS5tYXAoKFQpID0+IG5ldyBUKHRoaXMucmVnaXN0cnkpLnRvUmF3VHlwZSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbm5lcjogdGhpcy5pbnNwZWN0SW5uZXIoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgY29uc3QgdHlwZXMgPSB0aGlzLl9faW50ZXJuYWxfX1R5cGVzWzBdLm1hcCgoVCkgPT4gdGhpcy5yZWdpc3RyeS5nZXRDbGFzc05hbWUoVCkgfHwgbmV3IFQodGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCkpO1xuICAgICAgICByZXR1cm4gYCgke3R5cGVzLmpvaW4oJywnKX0pYDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgLy8gT3ZlcndyaXRlIHRoZSBkZWZhdWx0IHRvU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIEFycmF5LlxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICByZXR1cm4gdThhQ29uY2F0U3RyaWN0KHRoaXMudG9VOGFJbm5lcihpc0JhcmUpKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEludCB9IGZyb20gJy4uL2Fic3RyYWN0L0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIFVJbnRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBnZW5lcmljIHVuc2lnbmVkIGludGVnZXIgY29kZWMuIEZvciBTdWJzdHJhdGUgYWxsIG51bWJlcnMgYXJlIExpdHRsZSBFbmRpYW4gZW5jb2RlZCxcbiAqIHRoaXMgaGFuZGxlcyB0aGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHRob3NlIG51bWJlcnMuIFVwb24gY29uc3RydWN0aW9uXG4gKiB0aGUgYml0TGVuZ3RoIGlzIHByb3ZpZGVkIGFuZCBhbnkgYWRkaXRpb25hbCB1c2Uga2VlcHMgdGhlIG51bWJlciB0byB0aGlzXG4gKiBsZW5ndGguIFRoaXMgZXh0ZW5kcyBgQk5gLCBzbyBhbGwgbWV0aG9kcyBhdmFpbGFibGUgb24gYSBub3JtYWwgYEJOYCBvYmplY3RcbiAqIGlzIGF2YWlsYWJsZSBoZXJlLlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgVUludCBleHRlbmRzIEFic3RyYWN0SW50IHtcbiAgICBzdGF0aWMgd2l0aChiaXRMZW5ndGgsIHR5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIFVJbnQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlLCBiaXRMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9SYXdUeXBlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlTmFtZSB8fCBzdXBlci50b1Jhd1R5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0RnJvbVU4YUxpbSwgaWRlbnRpdHksIGlzSGV4LCBpc1U4YSwgbG9nZ2VyLCBzdHJpbmdpZnksIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcnJheSB9IGZyb20gJy4uL2Fic3RyYWN0L0FycmF5LmpzJztcbmltcG9ydCB7IGRlY29kZVU4YVZlYywgdHlwZVRvQ29uc3RydWN0b3IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCBNQVhfTEVOR1RIID0gNjQgKiAxMDI0O1xuY29uc3QgbCA9IGxvZ2dlcignVmVjJyk7XG5mdW5jdGlvbiBkZWNvZGVWZWNMZW5ndGgodmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFt2YWx1ZSwgdmFsdWUubGVuZ3RoLCAwXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSkge1xuICAgICAgICBjb25zdCB1OGEgPSB1OGFUb1U4YSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IFtzdGFydEF0LCBsZW5ndGhdID0gY29tcGFjdEZyb21VOGFMaW0odThhKTtcbiAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmVjIGxlbmd0aCAke2xlbmd0aC50b1N0cmluZygpfSBleGNlZWRzICR7TUFYX0xFTkdUSH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3U4YSwgbGVuZ3RoLCBzdGFydEF0XTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbbnVsbCwgMCwgMF07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkvaGV4IGlucHV0IHRvIFZlYzwqPiBkZWNvZGluZywgZm91bmQgJHt0eXBlb2YgdmFsdWV9OiAke3N0cmluZ2lmeSh2YWx1ZSl9YCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVmVjKHJlZ2lzdHJ5LCByZXN1bHQsIHZhbHVlLCBzdGFydEF0LCBUeXBlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAvLyAyNi8wOC8yMDIyIHRoaXMgaXMgYWN0dWFsbHkgYSBmYWxzZSBwb3NpdGl2ZSAtIGFmdGVyIHJlY2VudCBlc2xpbnQgdXBnZGF0ZXNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdmFsdWVbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGVudHJ5IGluc3RhbmNlb2YgVHlwZVxuICAgICAgICAgICAgICAgICAgICA/IGVudHJ5XG4gICAgICAgICAgICAgICAgICAgIDogbmV3IFR5cGUocmVnaXN0cnksIGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGwuZXJyb3IoYFVuYWJsZSB0byBkZWNvZGUgb24gaW5kZXggJHtpfWAsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbMCwgMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gWzAsIDBdO1xuICAgIH1cbiAgICAvLyB3ZSBkb24ndCBuZWVkIG1vcmUgY2hlY2tzLCB3ZSBhbHJlYWR5IGxpbWl0ZWQgaXQgdmlhIHRoZSBsZW5ndGggZGVjb2RpbmdcbiAgICByZXR1cm4gZGVjb2RlVThhVmVjKHJlZ2lzdHJ5LCByZXN1bHQsIHU4YVRvVThhKHZhbHVlKSwgc3RhcnRBdCwgVHlwZSk7XG59XG4vKipcbiAqIEBuYW1lIFZlY1xuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIG1hbmFnZXMgY29kZWMgYXJyYXlzLiBJbnRlcm5hbGx5IGl0IGtlZXBzIHRyYWNrIG9mIHRoZSBsZW5ndGggKGFzIGRlY29kZWQpIGFuZCBhbGxvd3NcbiAqIGNvbnN0cnVjdGlvbiB3aXRoIHRoZSBwYXNzZWQgYFR5cGVgIGluIHRoZSBjb25zdHJ1Y3Rvci4gSXQgaXMgYW4gZXh0ZW5zaW9uIHRvIEFycmF5LCBwcm92aWRpbmdcbiAqIHNwZWNpZmljIGVuY29kaW5nL2RlY29kaW5nIG9uIHRvcCBvZiB0aGUgYmFzZSB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgVmVjIGV4dGVuZHMgQWJzdHJhY3RBcnJheSB7XG4gICAgX19pbnRlcm5hbF9fVHlwZTtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUgPSBbXSwgeyBkZWZpbml0aW9uLCBzZXREZWZpbml0aW9uID0gaWRlbnRpdHkgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IFtkZWNvZGVGcm9tLCBsZW5ndGgsIHN0YXJ0QXRdID0gZGVjb2RlVmVjTGVuZ3RoKHZhbHVlKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGxlbmd0aCk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fVHlwZSA9IGRlZmluaXRpb24gfHwgc2V0RGVmaW5pdGlvbih0eXBlVG9Db25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSkpO1xuICAgICAgICB0aGlzLmluaXRpYWxVOGFMZW5ndGggPSAoaXNVOGEoZGVjb2RlRnJvbSlcbiAgICAgICAgICAgID8gZGVjb2RlVThhVmVjKHJlZ2lzdHJ5LCB0aGlzLCBkZWNvZGVGcm9tLCBzdGFydEF0LCB0aGlzLl9faW50ZXJuYWxfX1R5cGUpXG4gICAgICAgICAgICA6IGRlY29kZVZlYyhyZWdpc3RyeSwgdGhpcywgZGVjb2RlRnJvbSwgc3RhcnRBdCwgdGhpcy5fX2ludGVybmFsX19UeXBlKSlbMF07XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGUpIHtcbiAgICAgICAgbGV0IGRlZmluaXRpb247XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgICAgIGNvbnN0IHNldERlZmluaXRpb24gPSAoZCkgPT4gKGRlZmluaXRpb24gPSBkKTtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgVmVjIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSwgeyBkZWZpbml0aW9uLCBzZXREZWZpbml0aW9uIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHR5cGUgZm9yIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIGdldCBUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19UeXBlLm5hbWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIGluIHRoZSBhcnJheVxuICAgICAqL1xuICAgIGluZGV4T2Yob3RoZXIpIHtcbiAgICAgICAgLy8gY29udmVydCB0eXBlIGZpcnN0LCB0aGlzIHJlbW92ZXMgb3ZlcmhlYWQgZnJvbSB0aGUgZXFcbiAgICAgICAgY29uc3QgY2hlY2sgPSBvdGhlciBpbnN0YW5jZW9mIHRoaXMuX19pbnRlcm5hbF9fVHlwZVxuICAgICAgICAgICAgPyBvdGhlclxuICAgICAgICAgICAgOiBuZXcgdGhpcy5fX2ludGVybmFsX19UeXBlKHRoaXMucmVnaXN0cnksIG90aGVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdGhpcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2suZXEodGhpc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYFZlYzwke3RoaXMucmVnaXN0cnkuZ2V0Q2xhc3NOYW1lKHRoaXMuX19pbnRlcm5hbF9fVHlwZSkgfHwgbmV3IHRoaXMuX19pbnRlcm5hbF9fVHlwZSh0aGlzLnJlZ2lzdHJ5KS50b1Jhd1R5cGUoKX0+YDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgaXNVOGEsIHU4YUNvbmNhdFN0cmljdCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IEFic3RyYWN0QXJyYXkgfSBmcm9tICcuLi9hYnN0cmFjdC9BcnJheS5qcyc7XG5pbXBvcnQgeyBkZWNvZGVVOGFWZWMsIHR5cGVUb0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVjb2RlVmVjIH0gZnJvbSAnLi9WZWMuanMnO1xuLyoqXG4gKiBAbmFtZSBWZWNGaXhlZFxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIG1hbmFnZXMgY29kZWMgYXJyYXlzIG9mIGEgZml4ZWQgbGVuZ3RoXG4gKi9cbmV4cG9ydCBjbGFzcyBWZWNGaXhlZCBleHRlbmRzIEFic3RyYWN0QXJyYXkge1xuICAgIF9faW50ZXJuYWxfX1R5cGU7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIFR5cGUsIGxlbmd0aCwgdmFsdWUgPSBbXSwgeyBkZWZpbml0aW9uLCBzZXREZWZpbml0aW9uID0gaWRlbnRpdHkgfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX1R5cGUgPSBkZWZpbml0aW9uIHx8IHNldERlZmluaXRpb24odHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIFR5cGUpKTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gKGlzVThhKHZhbHVlKVxuICAgICAgICAgICAgPyBkZWNvZGVVOGFWZWMocmVnaXN0cnksIHRoaXMsIHZhbHVlLCAwLCB0aGlzLl9faW50ZXJuYWxfX1R5cGUpXG4gICAgICAgICAgICA6IGRlY29kZVZlYyhyZWdpc3RyeSwgdGhpcywgdmFsdWUsIDAsIHRoaXMuX19pbnRlcm5hbF9fVHlwZSkpWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aChUeXBlLCBsZW5ndGgpIHtcbiAgICAgICAgbGV0IGRlZmluaXRpb247XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgICAgIGNvbnN0IHNldERlZmluaXRpb24gPSAoZCkgPT4gKGRlZmluaXRpb24gPSBkKTtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgVmVjRml4ZWQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIFR5cGUsIGxlbmd0aCwgdmFsdWUsIHsgZGVmaW5pdGlvbiwgc2V0RGVmaW5pdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0eXBlIGZvciB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBnZXQgVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLl9faW50ZXJuYWxfX1R5cGUodGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHRoaXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdG90YWwgKz0gdGhpc1tpXS5lbmNvZGVkTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbm5lcjogdGhpcy5pbnNwZWN0SW5uZXIoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICB0b1U4YSgpIHtcbiAgICAgICAgLy8gd2Ugb3ZlcnJpZGUsIHdlIGRvbid0IGFkZCB0aGUgbGVuZ3RoIHByZWZpeCBmb3Igb3Vyc2VsdmVzLCBhbmQgYXQgdGhlIHNhbWUgdGltZSB3ZVxuICAgICAgICAvLyBpZ25vcmUgaXNCYXJlIG9uIGVudHJpZXMsIHNpbmNlIHRoZXkgc2hvdWxkIGJlIHByb3Blcmx5IGVuY29kZWQgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSB0aGlzLnRvVThhSW5uZXIoKTtcbiAgICAgICAgcmV0dXJuIGVuY29kZWQubGVuZ3RoXG4gICAgICAgICAgICA/IHU4YUNvbmNhdFN0cmljdChlbmNvZGVkKVxuICAgICAgICAgICAgOiBuZXcgVWludDhBcnJheShbXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYFske3RoaXMuVHlwZX07JHt0aGlzLmxlbmd0aH1dYDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBDb2RlY01hcCB9IGZyb20gJy4vTWFwLmpzJztcbmV4cG9ydCBjbGFzcyBCVHJlZU1hcCBleHRlbmRzIENvZGVjTWFwIHtcbiAgICBzdGF0aWMgd2l0aChrZXlUeXBlLCB2YWxUeXBlKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEJUcmVlTWFwIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBrZXlUeXBlLCB2YWxUeXBlLCB2YWx1ZSwgJ0JUcmVlTWFwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgY29tcGFjdEZyb21VOGFMaW0sIGNvbXBhY3RUb1U4YSwgaXNIZXgsIGlzVThhLCBsb2dnZXIsIHN0cmluZ2lmeSwgdThhQ29uY2F0U3RyaWN0LCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjb21wYXJlU2V0LCBkZWNvZGVVOGFWZWMsIHNvcnRTZXQsIHR5cGVUb0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgbCA9IGxvZ2dlcignQlRyZWVTZXQnKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVNldEZyb21VOGEocmVnaXN0cnksIFZhbENsYXNzLCB1OGEpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgW29mZnNldCwgY291bnRdID0gY29tcGFjdEZyb21VOGFMaW0odThhKTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGNvbnN0IFtkZWNvZGVkTGVuZ3RoXSA9IGRlY29kZVU4YVZlYyhyZWdpc3RyeSwgcmVzdWx0LCB1OGEsIG9mZnNldCwgVmFsQ2xhc3MpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBvdXRwdXQuYWRkKHJlc3VsdFtpXSk7XG4gICAgfVxuICAgIHJldHVybiBbVmFsQ2xhc3MsIG91dHB1dCwgZGVjb2RlZExlbmd0aF07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVTZXRGcm9tU2V0KHJlZ2lzdHJ5LCBWYWxDbGFzcywgdmFsdWUpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgU2V0KCk7XG4gICAgdmFsdWUuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvdXRwdXQuYWRkKCh2YWwgaW5zdGFuY2VvZiBWYWxDbGFzcykgPyB2YWwgOiBuZXcgVmFsQ2xhc3MocmVnaXN0cnksIHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbC5lcnJvcignRmFpbGVkIHRvIGRlY29kZSBrZXkgb3IgdmFsdWU6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbVmFsQ2xhc3MsIG91dHB1dCwgMF07XG59XG4vKipcbiAqIERlY29kZSBpbnB1dCB0byBwYXNzIGludG8gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIFZhbENsYXNzIC0gVHlwZSBvZiB0aGUgbWFwIHZhbHVlXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBkZWNvZGUsIG9uZSBvZjpcbiAqIC0gbnVsbFxuICogLSB1bmRlZmluZWRcbiAqIC0gaGV4XG4gKiAtIFVpbnQ4QXJyYXlcbiAqIC0gU2V0PGFueT4sIHdoZXJlIGJvdGgga2V5IGFuZCB2YWx1ZSB0eXBlcyBhcmUgZWl0aGVyXG4gKiAgIGNvbnN0cnVjdG9ycyBvciBkZWNvZGVhYmxlIHZhbHVlcyBmb3IgdGhlaXIgdHlwZXMuXG4gKiBAcGFyYW0ganNvblNldFxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVNldChyZWdpc3RyeSwgdmFsVHlwZSwgdmFsdWUpIHtcbiAgICBjb25zdCBWYWxDbGFzcyA9IHR5cGVUb0NvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWxUeXBlKTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbVmFsQ2xhc3MsIG5ldyBTZXQoKSwgMF07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzVThhKHZhbHVlKSB8fCBpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVNldEZyb21VOGEocmVnaXN0cnksIFZhbENsYXNzLCB1OGFUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICByZXR1cm4gZGVjb2RlU2V0RnJvbVNldChyZWdpc3RyeSwgVmFsQ2xhc3MsIHZhbHVlKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCVHJlZVNldDogY2Fubm90IGRlY29kZSB0eXBlJyk7XG59XG5leHBvcnQgY2xhc3MgQlRyZWVTZXQgZXh0ZW5kcyBTZXQge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19WYWxDbGFzcztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsVHlwZSwgcmF3VmFsdWUpIHtcbiAgICAgICAgY29uc3QgW1ZhbENsYXNzLCB2YWx1ZXMsIGRlY29kZWRMZW5ndGhdID0gZGVjb2RlU2V0KHJlZ2lzdHJ5LCB2YWxUeXBlLCByYXdWYWx1ZSk7XG4gICAgICAgIHN1cGVyKHNvcnRTZXQodmFsdWVzKSk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gZGVjb2RlZExlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19WYWxDbGFzcyA9IFZhbENsYXNzO1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aCh2YWxUeXBlKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEJUcmVlU2V0IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWxUeXBlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIGxldCBsZW4gPSBjb21wYWN0VG9VOGEodGhpcy5zaXplKS5sZW5ndGg7XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBsZW4gKz0gdi5lbmNvZGVkTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGFzaCBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSB2YWx1ZVxuICAgICAqL1xuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaXplID09PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFjdHVhbCBzZXQgdmFsdWVzIGFzIGEgc3RyaW5nW11cbiAgICAgKi9cbiAgICBnZXQgc3RyaW5ncygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi5zdXBlci52YWx1ZXMoKV0ubWFwKCh2KSA9PiB2LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlU2V0KHRoaXMsIG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpbm5lci5wdXNoKHYuaW5zcGVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5uZXIsXG4gICAgICAgICAgICBvdXRlcjogW2NvbXBhY3RUb1U4YSh0aGlzLnNpemUpXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLiBpc0xlIHJldHVybnMgYSBMRSAobnVtYmVyLW9ubHkpIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGpzb24ucHVzaCh2LnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqc29uID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBqc29uLnB1c2godi50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYEJUcmVlU2V0PCR7dGhpcy5yZWdpc3RyeS5nZXRDbGFzc05hbWUodGhpcy5fX2ludGVybmFsX19WYWxDbGFzcykgfHwgbmV3IHRoaXMuX19pbnRlcm5hbF9fVmFsQ2xhc3ModGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCl9PmA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICBjb25zdCBqc29uID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0aGlzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBqc29uLnB1c2godi50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IFtdO1xuICAgICAgICBpZiAoIWlzQmFyZSkge1xuICAgICAgICAgICAgZW5jb2RlZC5wdXNoKGNvbXBhY3RUb1U4YSh0aGlzLnNpemUpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgZW5jb2RlZC5wdXNoKHYudG9VOGEoaXNCYXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHU4YUNvbmNhdFN0cmljdChlbmNvZGVkKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0RnJvbVU4YUxpbSwgY29tcGFjdFRvVThhLCBpc1N0cmluZywgdThhQ29uY2F0U3RyaWN0LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IFJhdyB9IGZyb20gJy4uL25hdGl2ZS9SYXcuanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlQml0VmVjVThhKHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbMCwgbmV3IFVpbnQ4QXJyYXkoKV07XG4gICAgfVxuICAgIC8vIGhhbmRsZSBhbGwgb3RoZXIgVWludDhBcnJheSBpbnB1dHMsIHRoZXNlIGRvIGhhdmUgYSBsZW5ndGggcHJlZml4IHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgYml0cyBlbmNvZGVkXG4gICAgY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IGNvbXBhY3RGcm9tVThhTGltKHZhbHVlKTtcbiAgICBjb25zdCB0b3RhbCA9IG9mZnNldCArIE1hdGguY2VpbChsZW5ndGggLyA4KTtcbiAgICBpZiAodG90YWwgPiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCaXRWZWM6IHJlcXVpcmVkIGxlbmd0aCBsZXNzIHRoYW4gcmVtYWluZGVyLCBleHBlY3RlZCBhdCBsZWFzdCAke3RvdGFsfSwgZm91bmQgJHt2YWx1ZS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiBbbGVuZ3RoLCB2YWx1ZS5zdWJhcnJheShvZmZzZXQsIHRvdGFsKV07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVCaXRWZWModmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHU4YSA9IHU4YVRvVThhKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFt1OGEubGVuZ3RoIC8gOCwgdThhXTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZUJpdFZlY1U4YSh2YWx1ZSk7XG59XG4vKipcbiAqIEBuYW1lIEJpdFZlY1xuICogQGRlc2NyaXB0aW9uXG4gKiBBIEJpdFZlYyB0aGF0IHJlcHJlc2VudHMgYW4gYXJyYXkgb2YgYml0cy4gVGhlIGJpdHMgYXJlIGhvd2V2ZXIgc3RvcmVkIGVuY29kZWQuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpc1xuICogYW5kIGEgbm9ybWFsIEJ5dGVzIHdvdWxkIGJlIHRoYXQgdGhlIGxlbmd0aCBwcmVmaXggaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYml0cyBlbmNvZGVkLCBub3QgdGhlIGJ5dGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBCaXRWZWMgZXh0ZW5kcyBSYXcge1xuICAgIF9faW50ZXJuYWxfX2RlY29kZWRMZW5ndGg7XG4gICAgX19pbnRlcm5hbF9faXNNc2I7XG4gICAgLy8gSW4gbGlldSBvZiBoYXZpbmcgdGhlIE1zYi9Mc2IgaWRlbnRpZmllcnMgcGFzc2VkIHRocm91Z2gsIHdlIGRlZmF1bHQgdG8gYXNzdW1pbmdcbiAgICAvLyB3ZSBhcmUgZGVhbGluZyB3aXRoIExzYiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgKGFzIG9mIHdyaXRpbmcpIEJpdFZlYyBmb3JtYXQgdXNlZFxuICAgIC8vIGluIHRoZSBQb2xrYWRvdCBjb2RlICh0aGlzIG9ubHkgYWZmZWN0cyB0aGUgdG9IdW1hbiBkaXNwbGF5cylcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGlzTXNiID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgW2RlY29kZWRMZW5ndGgsIHU4YV0gPSBkZWNvZGVCaXRWZWModmFsdWUpO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgdThhKTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19kZWNvZGVkTGVuZ3RoID0gZGVjb2RlZExlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19pc01zYiA9IGlzTXNiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggKyBjb21wYWN0VG9VOGEodGhpcy5fX2ludGVybmFsX19kZWNvZGVkTGVuZ3RoKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3V0ZXI6IFtjb21wYWN0VG9VOGEodGhpcy5fX2ludGVybmFsX19kZWNvZGVkTGVuZ3RoKSwgc3VwZXIudG9VOGEoKV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBib29sZWFuIGFycmF5IG9mIHRoZSBiaXQgdmFsdWVzXG4gICAgICovXG4gICAgdG9Cb29sQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IFsuLi50aGlzLnRvVThhKHRydWUpXS5tYXAoKHYpID0+IFtcbiAgICAgICAgICAgICEhKHYgJiAxMjgpLFxuICAgICAgICAgICAgISEodiAmIDY0KSxcbiAgICAgICAgICAgICEhKHYgJiAzMiksXG4gICAgICAgICAgICAhISh2ICYgMTYpLFxuICAgICAgICAgICAgISEodiAmIDgpLFxuICAgICAgICAgICAgISEodiAmIDQpLFxuICAgICAgICAgICAgISEodiAmIDIpLFxuICAgICAgICAgICAgISEodiAmIDEpXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBjb3VudCA9IG1hcC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSg4ICogY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZiA9IGkgKiA4O1xuICAgICAgICAgICAgY29uc3QgdiA9IG1hcFtpXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W29mZiArIGpdID0gdGhpcy5fX2ludGVybmFsX19pc01zYlxuICAgICAgICAgICAgICAgICAgICA/IHZbal1cbiAgICAgICAgICAgICAgICAgICAgOiB2WzcgLSBqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiBgMGIke1suLi50aGlzLnRvVThhKHRydWUpXVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gYDAwMDAwMDAwJHtkLnRvU3RyaW5nKDIpfWAuc2xpY2UoLTgpKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gdGhpcy5fX2ludGVybmFsX19pc01zYiA/IHMgOiBzLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJykpXG4gICAgICAgICAgICAuam9pbignXycpfWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ0JpdFZlYyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBTQ0FMRSBzcGVjaWZpY2F0aW9uc1xuICAgICAqIEBwYXJhbSBpc0JhcmUgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBwcmVmaXhlcyAoaW50ZXJuYWwpXG4gICAgICovXG4gICAgdG9VOGEoaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IGJpdFZlYyA9IHN1cGVyLnRvVThhKGlzQmFyZSk7XG4gICAgICAgIHJldHVybiBpc0JhcmVcbiAgICAgICAgICAgID8gYml0VmVjXG4gICAgICAgICAgICA6IHU4YUNvbmNhdFN0cmljdChbY29tcGFjdFRvVThhKHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZExlbmd0aCksIGJpdFZlY10pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGNvbXBhY3RBZGRMZW5ndGgsIGNvbXBhY3RGcm9tVThhTGltLCBjb21wYWN0VG9VOGEsIGlzU3RyaW5nLCBpc1U4YSwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBSYXcgfSBmcm9tICcuLi9uYXRpdmUvUmF3LmpzJztcbmNvbnN0IE1BWF9MRU5HVEggPSAxMCAqIDEwMjQgKiAxMDI0O1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlQnl0ZXNVOGEodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW25ldyBVaW50OEFycmF5KCksIDBdO1xuICAgIH1cbiAgICAvLyBoYW5kbGUgYWxsIG90aGVyIFVpbnQ4QXJyYXkgaW5wdXRzLCB0aGVzZSBkbyBoYXZlIGEgbGVuZ3RoIHByZWZpeFxuICAgIGNvbnN0IFtvZmZzZXQsIGxlbmd0aF0gPSBjb21wYWN0RnJvbVU4YUxpbSh2YWx1ZSk7XG4gICAgY29uc3QgdG90YWwgPSBvZmZzZXQgKyBsZW5ndGg7XG4gICAgaWYgKGxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCeXRlcyBsZW5ndGggJHtsZW5ndGgudG9TdHJpbmcoKX0gZXhjZWVkcyAke01BWF9MRU5HVEh9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRvdGFsID4gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQnl0ZXM6IHJlcXVpcmVkIGxlbmd0aCBsZXNzIHRoYW4gcmVtYWluZGVyLCBleHBlY3RlZCBhdCBsZWFzdCAke3RvdGFsfSwgZm91bmQgJHt2YWx1ZS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiBbdmFsdWUuc3ViYXJyYXkob2Zmc2V0LCB0b3RhbCksIHRvdGFsXTtcbn1cbi8qKlxuICogQG5hbWUgQnl0ZXNcbiAqIEBkZXNjcmlwdGlvblxuICogQSBCeXRlcyB3cmFwcGVyIGZvciBWZWM8dTg+LiBUaGUgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIGEgbm9ybWFsIFVpbnQ4QXJyYXlcbiAqIGlzIHRoYXQgdGhpcyB2ZXJzaW9uIGFsbG93cyBmb3IgbGVuZ3RoLWVuY29kaW5nLiAoaS5lLiBpdCBpcyBhIHZhcmlhYmxlLWl0ZW0gY29kZWMsIHRoZSBzYW1lXG4gKiBhcyB3aGF0IGlzIGZvdW5kIGluIFtbVGV4dF1dIGFuZCBbW1ZlY11dKVxuICovXG5leHBvcnQgY2xhc3MgQnl0ZXMgZXh0ZW5kcyBSYXcge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBbdThhLCBkZWNvZGVkTGVuZ3RoXSA9IGlzVThhKHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgUmF3KVxuICAgICAgICAgICAgPyBkZWNvZGVCeXRlc1U4YSh2YWx1ZSlcbiAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAgICAgPyBbdThhVG9VOGEodmFsdWUpLCAwXVxuICAgICAgICAgICAgICAgIDogW3ZhbHVlLCAwXTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHU4YSwgZGVjb2RlZExlbmd0aCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCArIGNvbXBhY3RUb1U4YSh0aGlzLmxlbmd0aCkubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdChpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgY2xlbmd0aCA9IGNvbXBhY3RUb1U4YSh0aGlzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvdXRlcjogaXNCYXJlXG4gICAgICAgICAgICAgICAgPyBbc3VwZXIudG9VOGEoKV1cbiAgICAgICAgICAgICAgICA6IHRoaXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gW2NsZW5ndGgsIHN1cGVyLnRvVThhKCldXG4gICAgICAgICAgICAgICAgICAgIDogW2NsZW5ndGhdXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ0J5dGVzJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgcmV0dXJuIGlzQmFyZVxuICAgICAgICAgICAgPyBzdXBlci50b1U4YShpc0JhcmUpXG4gICAgICAgICAgICA6IGNvbXBhY3RBZGRMZW5ndGgodGhpcyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQ29kZWNNYXAgfSBmcm9tICcuL01hcC5qcyc7XG5leHBvcnQgY2xhc3MgSGFzaE1hcCBleHRlbmRzIENvZGVjTWFwIHtcbiAgICBzdGF0aWMgd2l0aChrZXlUeXBlLCB2YWxUeXBlKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEhhc2hNYXAge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIGtleVR5cGUsIHZhbFR5cGUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0RnJvbVU4YUxpbSwgY29tcGFjdFRvVThhLCBpc0hleCwgaXNPYmplY3QsIGlzVThhLCBsb2dnZXIsIHN0cmluZ2lmeSwgdThhQ29uY2F0U3RyaWN0LCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBBYnN0cmFjdEFycmF5IH0gZnJvbSAnLi4vYWJzdHJhY3QvQXJyYXkuanMnO1xuaW1wb3J0IHsgRW51bSB9IGZyb20gJy4uL2Jhc2UvRW51bS5qcyc7XG5pbXBvcnQgeyBSYXcgfSBmcm9tICcuLi9uYXRpdmUvUmF3LmpzJztcbmltcG9ydCB7IFN0cnVjdCB9IGZyb20gJy4uL25hdGl2ZS9TdHJ1Y3QuanMnO1xuaW1wb3J0IHsgY29tcGFyZU1hcCwgZGVjb2RlVThhLCBzb3J0TWFwLCB0eXBlVG9Db25zdHJ1Y3RvciB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IGwgPSBsb2dnZXIoJ01hcCcpO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlTWFwRnJvbVU4YShyZWdpc3RyeSwgS2V5Q2xhc3MsIFZhbENsYXNzLCB1OGEpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgW29mZnNldCwgY291bnRdID0gY29tcGFjdEZyb21VOGFMaW0odThhKTtcbiAgICBjb25zdCB0eXBlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICB0eXBlcy5wdXNoKEtleUNsYXNzLCBWYWxDbGFzcyk7XG4gICAgfVxuICAgIGNvbnN0IFt2YWx1ZXMsIGRlY29kZWRMZW5ndGhdID0gZGVjb2RlVThhKHJlZ2lzdHJ5LCBuZXcgQXJyYXkodHlwZXMubGVuZ3RoKSwgdThhLnN1YmFycmF5KG9mZnNldCksIFt0eXBlcywgW11dKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSB2YWx1ZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkgKz0gMikge1xuICAgICAgICBvdXRwdXQuc2V0KHZhbHVlc1tpXSwgdmFsdWVzW2kgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiBbS2V5Q2xhc3MsIFZhbENsYXNzLCBvdXRwdXQsIG9mZnNldCArIGRlY29kZWRMZW5ndGhdO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlTWFwRnJvbU1hcChyZWdpc3RyeSwgS2V5Q2xhc3MsIFZhbENsYXNzLCB2YWx1ZSkge1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdmFsdWUuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IGlzQ29tcGxleCA9IEtleUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEFic3RyYWN0QXJyYXkgfHxcbiAgICAgICAgICAgIEtleUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIFN0cnVjdCB8fFxuICAgICAgICAgICAgS2V5Q2xhc3MucHJvdG90eXBlIGluc3RhbmNlb2YgRW51bTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG91dHB1dC5zZXQoa2V5IGluc3RhbmNlb2YgS2V5Q2xhc3NcbiAgICAgICAgICAgICAgICA/IGtleVxuICAgICAgICAgICAgICAgIDogbmV3IEtleUNsYXNzKHJlZ2lzdHJ5LCBpc0NvbXBsZXggJiYgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGtleSkgOiBrZXkpLCB2YWwgaW5zdGFuY2VvZiBWYWxDbGFzc1xuICAgICAgICAgICAgICAgID8gdmFsXG4gICAgICAgICAgICAgICAgOiBuZXcgVmFsQ2xhc3MocmVnaXN0cnksIHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbC5lcnJvcignRmFpbGVkIHRvIGRlY29kZSBrZXkgb3IgdmFsdWU6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW0tleUNsYXNzLCBWYWxDbGFzcywgb3V0cHV0LCAwXTtcbn1cbi8qKlxuICogRGVjb2RlIGlucHV0IHRvIHBhc3MgaW50byBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gS2V5Q2xhc3MgLSBUeXBlIG9mIHRoZSBtYXAga2V5XG4gKiBAcGFyYW0gVmFsQ2xhc3MgLSBUeXBlIG9mIHRoZSBtYXAgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGRlY29kZSwgb25lIG9mOlxuICogLSBudWxsXG4gKiAtIHVuZGVmaW5lZFxuICogLSBoZXhcbiAqIC0gVWludDhBcnJheVxuICogLSBNYXA8YW55LCBhbnk+LCB3aGVyZSBib3RoIGtleSBhbmQgdmFsdWUgdHlwZXMgYXJlIGVpdGhlclxuICogICBjb25zdHJ1Y3RvcnMgb3IgZGVjb2RlYWJsZSB2YWx1ZXMgZm9yIHRoZWlyIHR5cGVzLlxuICogQHBhcmFtIGpzb25NYXBcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBkZWNvZGVNYXAocmVnaXN0cnksIGtleVR5cGUsIHZhbFR5cGUsIHZhbHVlKSB7XG4gICAgY29uc3QgS2V5Q2xhc3MgPSB0eXBlVG9Db25zdHJ1Y3RvcihyZWdpc3RyeSwga2V5VHlwZSk7XG4gICAgY29uc3QgVmFsQ2xhc3MgPSB0eXBlVG9Db25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsVHlwZSk7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gW0tleUNsYXNzLCBWYWxDbGFzcywgbmV3IE1hcCgpLCAwXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlTWFwRnJvbVU4YShyZWdpc3RyeSwgS2V5Q2xhc3MsIFZhbENsYXNzLCB1OGFUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICByZXR1cm4gZGVjb2RlTWFwRnJvbU1hcChyZWdpc3RyeSwgS2V5Q2xhc3MsIFZhbENsYXNzLCB2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlTWFwRnJvbU1hcChyZWdpc3RyeSwgS2V5Q2xhc3MsIFZhbENsYXNzLCBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHZhbHVlKSkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hcDogY2Fubm90IGRlY29kZSB0eXBlJyk7XG59XG5leHBvcnQgY2xhc3MgQ29kZWNNYXAgZXh0ZW5kcyBNYXAge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aDtcbiAgICBpc1N0b3JhZ2VGYWxsYmFjaztcbiAgICBfX2ludGVybmFsX19LZXlDbGFzcztcbiAgICBfX2ludGVybmFsX19WYWxDbGFzcztcbiAgICBfX2ludGVybmFsX190eXBlO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBrZXlUeXBlLCB2YWxUeXBlLCByYXdWYWx1ZSwgdHlwZSA9ICdIYXNoTWFwJykge1xuICAgICAgICBjb25zdCBbS2V5Q2xhc3MsIFZhbENsYXNzLCBkZWNvZGVkLCBkZWNvZGVkTGVuZ3RoXSA9IGRlY29kZU1hcChyZWdpc3RyeSwga2V5VHlwZSwgdmFsVHlwZSwgcmF3VmFsdWUpO1xuICAgICAgICBzdXBlcih0eXBlID09PSAnQlRyZWVNYXAnID8gc29ydE1hcChkZWNvZGVkKSA6IGRlY29kZWQpO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMuaW5pdGlhbFU4YUxlbmd0aCA9IGRlY29kZWRMZW5ndGg7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fS2V5Q2xhc3MgPSBLZXlDbGFzcztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19WYWxDbGFzcyA9IFZhbENsYXNzO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGUgPSB0eXBlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICBsZXQgbGVuID0gY29tcGFjdFRvVThhKHRoaXMuc2l6ZSkubGVuZ3RoO1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgbGVuICs9IGsuZW5jb2RlZExlbmd0aCArIHYuZW5jb2RlZExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhhc2ggb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Lmhhc2godGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gY29tcGFyZU1hcCh0aGlzLCBvdGhlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICBjb25zdCBpbm5lciA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaW5uZXIucHVzaChrLmluc3BlY3QoKSk7XG4gICAgICAgICAgICBpbm5lci5wdXNoKHYuaW5zcGVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5uZXIsXG4gICAgICAgICAgICBvdXRlcjogW2NvbXBhY3RUb1U4YSh0aGlzLnNpemUpXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLiBpc0xlIHJldHVybnMgYSBMRSAobnVtYmVyLW9ubHkpIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGpzb25bayBpbnN0YW5jZW9mIFJhdyAmJiAhZGlzYWJsZUFzY2lpICYmIGsuaXNBc2NpaVxuICAgICAgICAgICAgICAgID8gay50b1V0ZjgoKVxuICAgICAgICAgICAgICAgIDogay50b1N0cmluZygpXSA9IHYudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAganNvbltrLnRvU3RyaW5nKCldID0gdi50b0pTT04oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSB2YWx1ZSBpbiBhIGJlc3QtZml0IHByaW1pdGl2ZSBmb3JtXG4gICAgICovXG4gICAgdG9QcmltaXRpdmUoZGlzYWJsZUFzY2lpKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGpzb25bayBpbnN0YW5jZW9mIFJhdyAmJiAhZGlzYWJsZUFzY2lpICYmIGsuaXNBc2NpaVxuICAgICAgICAgICAgICAgID8gay50b1V0ZjgoKVxuICAgICAgICAgICAgICAgIDogay50b1N0cmluZygpXSA9IHYudG9QcmltaXRpdmUoZGlzYWJsZUFzY2lpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9faW50ZXJuYWxfX3R5cGV9PCR7dGhpcy5yZWdpc3RyeS5nZXRDbGFzc05hbWUodGhpcy5fX2ludGVybmFsX19LZXlDbGFzcykgfHwgbmV3IHRoaXMuX19pbnRlcm5hbF9fS2V5Q2xhc3ModGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCl9LCR7dGhpcy5yZWdpc3RyeS5nZXRDbGFzc05hbWUodGhpcy5fX2ludGVybmFsX19WYWxDbGFzcykgfHwgbmV3IHRoaXMuX19pbnRlcm5hbF9fVmFsQ2xhc3ModGhpcy5yZWdpc3RyeSkudG9SYXdUeXBlKCl9PmA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnkodGhpcy50b0pTT04oKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBTQ0FMRSBzcGVjaWZpY2F0aW9uc1xuICAgICAqIEBwYXJhbSBpc0JhcmUgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBwcmVmaXhlcyAoaW50ZXJuYWwpXG4gICAgICovXG4gICAgdG9VOGEoaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSBbXTtcbiAgICAgICAgaWYgKCFpc0JhcmUpIHtcbiAgICAgICAgICAgIGVuY29kZWQucHVzaChjb21wYWN0VG9VOGEodGhpcy5zaXplKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGVuY29kZWQucHVzaChrLnRvVThhKGlzQmFyZSksIHYudG9VOGEoaXNCYXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHU4YUNvbmNhdFN0cmljdChlbmNvZGVkKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc0hleCwgaXNVOGEsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vYmFzZS9PcHRpb24uanMnO1xuaW1wb3J0IHsgYm9vbCBhcyBCb29sIH0gZnJvbSAnLi4vbmF0aXZlL0Jvb2wuanMnO1xuZnVuY3Rpb24gZGVjb2RlVThhKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIC8vIEVuY29kZWQgYXMgLVxuICAgIC8vICAtIDAgPSBOb25lXG4gICAgLy8gIC0gMSA9IFRydWVcbiAgICAvLyAgLSAyID0gRmFsc2VcbiAgICByZXR1cm4gdmFsdWVbMF0gPT09IDBcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogbmV3IEJvb2wocmVnaXN0cnksIHZhbHVlWzBdID09PSAxKTtcbn1cbi8qKlxuICogQG5hbWUgT3B0aW9uQm9vbFxuICogQGRlc2NyaXB0aW9uIEEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgT3B0aW9uPGJvb2w+IHRoYW4gYWxsb3dzIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ1xuICovXG5leHBvcnQgY2xhc3MgT3B0aW9uQm9vbCBleHRlbmRzIE9wdGlvbiB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBCb29sLCBpc1U4YSh2YWx1ZSkgfHwgaXNIZXgodmFsdWUpXG4gICAgICAgICAgICA/IGRlY29kZVU4YShyZWdpc3RyeSwgdThhVG9VOGEodmFsdWUpKVxuICAgICAgICAgICAgOiB2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbFU4YUxlbmd0aCA9IDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiAxIHwgMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWUgKGFsd2F5cyBmYWxzZSlcbiAgICAgKi9cbiAgICBnZXQgaXNGYWxzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTb21lXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWUgKGFsd2F5cyBmYWxzZSlcbiAgICAgKi9cbiAgICBnZXQgaXNUcnVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NvbWVcbiAgICAgICAgICAgID8gdGhpcy52YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4geyBvdXRlcjogW3RoaXMudG9VOGEoKV0gfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoaXNCYXJlKSB7XG4gICAgICAgIHJldHVybiBpc0JhcmVcbiAgICAgICAgICAgID8gJ2Jvb2wnXG4gICAgICAgICAgICA6ICdPcHRpb248Ym9vbD4nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICBpZiAoaXNCYXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudG9VOGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTb21lXG4gICAgICAgICAgICA/IG5ldyBVaW50OEFycmF5KFt0aGlzLmlzVHJ1ZSA/IDEgOiAyXSlcbiAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoWzBdKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBUdXBsZSB9IGZyb20gJy4uL2Jhc2UvVHVwbGUuanMnO1xuLyoqXG4gKiBAbmFtZSBSYW5nZVxuICogQGRlc2NyaXB0aW9uXG4gKiBSdXN0IGBSYW5nZTxUPmAgcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlIGV4dGVuZHMgVHVwbGUge1xuICAgIF9faW50ZXJuYWxfX3JhbmdlTmFtZTtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUsIHsgcmFuZ2VOYW1lID0gJ1JhbmdlJyB9ID0ge30pIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIFtUeXBlLCBUeXBlXSwgdmFsdWUpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JhbmdlTmFtZSA9IHJhbmdlTmFtZTtcbiAgICB9XG4gICAgc3RhdGljIHdpdGgoVHlwZSkge1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBSYW5nZSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RhcnRpbmcgcmFuZ2UgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgc3RhcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzWzBdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgZW5kaW5nIHJhbmdlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbMV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fX2ludGVybmFsX19yYW5nZU5hbWV9PCR7dGhpcy5zdGFydC50b1Jhd1R5cGUoKX0+YDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4vUmFuZ2UuanMnO1xuZXhwb3J0IGNsYXNzIFJhbmdlSW5jbHVzaXZlIGV4dGVuZHMgUmFuZ2Uge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgVHlwZSwgdmFsdWUsIHsgcmFuZ2VOYW1lOiAnUmFuZ2VJbmNsdXNpdmUnIH0pO1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aChUeXBlKSB7XG4gICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIFJhbmdlSW5jbHVzaXZlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgVGV4dCB9IGZyb20gJy4uL25hdGl2ZS9UZXh0LmpzJztcbmltcG9ydCB7IHNhbml0aXplIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBUeXBlXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgaXMgYSBleHRlbmRlZCB2ZXJzaW9uIG9mIFRleHQsIHNwZWNpZmljYWxseSB0byBoYW5kbGUgdHlwZXMuIEhlcmUgd2UgcmVseSBmdWxseVxuICogb24gd2hhdCBUZXh0IHByb3ZpZGVzIHVzLCBob3dldmVyIHdlIGFsc28gYWRqdXN0IHRoZSB0eXBlcyByZWNlaXZlZCBmcm9tIHRoZSBydW50aW1lLFxuICogaS5lLiB3ZSByZW1vdmUgdGhlIGBUOjpgIHByZWZpeGVzIGZvdW5kIGluIHNvbWUgdHlwZXMgZm9yIGNvbnNpc3RlbmN5IGFjcm9zcyBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGUgZXh0ZW5kcyBUZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUgPSAnJykge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgdmFsdWUpO1xuICAgICAgICB0aGlzLnNldE92ZXJyaWRlKHNhbml0aXplKHRoaXMudG9TdHJpbmcoKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdUeXBlJztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc1U4YSwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBSYXcgfSBmcm9tICcuLi9uYXRpdmUvUmF3LmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVU4YUZpeGVkKHZhbHVlLCBiaXRMZW5ndGgpIHtcbiAgICBjb25zdCB1OGEgPSB1OGFUb1U4YSh2YWx1ZSk7XG4gICAgY29uc3QgYnl0ZUxlbmd0aCA9IGJpdExlbmd0aCAvIDg7XG4gICAgaWYgKCF1OGEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFVpbnQ4QXJyYXkoYnl0ZUxlbmd0aCksIDBdO1xuICAgIH1cbiAgICBpZiAoaXNVOGEodmFsdWUpID8gdThhLmxlbmd0aCA8IGJ5dGVMZW5ndGggOiB1OGEubGVuZ3RoICE9PSBieXRlTGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgaW5wdXQgd2l0aCAke2J5dGVMZW5ndGh9IGJ5dGVzICgke2JpdExlbmd0aH0gYml0cyksIGZvdW5kICR7dThhLmxlbmd0aH0gYnl0ZXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIFt1OGEuc3ViYXJyYXkoMCwgYnl0ZUxlbmd0aCksIGJ5dGVMZW5ndGhdO1xufVxuLyoqXG4gKiBAbmFtZSBVOGFGaXhlZFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIFU4YSB0aGF0IG1hbmFnZXMgYSBhIHNlcXVlbmNlIG9mIGJ5dGVzIHVwIHRvIHRoZSBzcGVjaWZpZWQgYml0TGVuZ3RoLiBOb3QgbWVhbnRcbiAqIHRvIGJlIHVzZWQgZGlyZWN0bHksIHJhdGhlciBpcyBzaG91bGQgYmUgc3ViY2xhc3NlZCB3aXRoIHRoZSBzcGVjaWZpYyBsZW5ndGhzLlxuICovXG5leHBvcnQgY2xhc3MgVThhRml4ZWQgZXh0ZW5kcyBSYXcge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSA9IG5ldyBVaW50OEFycmF5KCksIGJpdExlbmd0aCA9IDI1Nikge1xuICAgICAgICBjb25zdCBbdThhLCBkZWNvZGVkTGVuZ3RoXSA9IGRlY29kZVU4YUZpeGVkKHZhbHVlLCBiaXRMZW5ndGgpO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgdThhLCBkZWNvZGVkTGVuZ3RoKTtcbiAgICB9XG4gICAgc3RhdGljIHdpdGgoYml0TGVuZ3RoLCB0eXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBVOGFGaXhlZCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgdmFsdWUsIGJpdExlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVOYW1lIHx8IHN1cGVyLnRvUmF3VHlwZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIGBbdTg7JHt0aGlzLmxlbmd0aH1dYDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBjb21wYWN0QWRkTGVuZ3RoLCBjb21wYWN0U3RyaXBMZW5ndGgsIGNvbXBhY3RUb1U4YSwgaXNIZXgsIGlzVThhLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IFJhdyB9IGZyb20gJy4uL25hdGl2ZS9SYXcuanMnO1xuaW1wb3J0IHsgdHlwZVRvQ29uc3RydWN0b3IgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBCeXRlcyB9IGZyb20gJy4vQnl0ZXMuanMnO1xuZnVuY3Rpb24gZGVjb2RlUmF3KHJlZ2lzdHJ5LCB0eXBlTmFtZSwgdmFsdWUpIHtcbiAgICBjb25zdCBUeXBlID0gdHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIHR5cGVOYW1lKTtcbiAgICBpZiAoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgWywgdThhXSA9IGlzSGV4KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gWzAsIHU4YVRvVThhKHZhbHVlKV1cbiAgICAgICAgICAgICAgICA6ICh2YWx1ZSBpbnN0YW5jZW9mIFJhdylcbiAgICAgICAgICAgICAgICAgICAgPyBbMCwgdmFsdWUuc3ViYXJyYXkoKV1cbiAgICAgICAgICAgICAgICAgICAgOiBjb21wYWN0U3RyaXBMZW5ndGgodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtUeXBlLCBuZXcgVHlwZShyZWdpc3RyeSwgdThhKSwgdmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBbVHlwZSwgbnVsbCwgdmFsdWVdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFR5cGUocmVnaXN0cnksIHZhbHVlKTtcbiAgICByZXR1cm4gW1R5cGUsIGluc3RhbmNlLCBjb21wYWN0QWRkTGVuZ3RoKGluc3RhbmNlLnRvVThhKCkpXTtcbn1cbmV4cG9ydCBjbGFzcyBXcmFwcGVyS2VlcE9wYXF1ZSBleHRlbmRzIEJ5dGVzIHtcbiAgICBfX2ludGVybmFsX19UeXBlO1xuICAgIF9faW50ZXJuYWxfX2RlY29kZWQ7XG4gICAgX19pbnRlcm5hbF9fb3BhcXVlTmFtZTtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdHlwZU5hbWUsIHZhbHVlLCB7IG9wYXF1ZU5hbWUgPSAnV3JhcHBlcktlZXBPcGFxdWUnIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBbVHlwZSwgZGVjb2RlZCwgdThhXSA9IGRlY29kZVJhdyhyZWdpc3RyeSwgdHlwZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHU4YSk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fVHlwZSA9IFR5cGU7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZCA9IGRlY29kZWQ7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fb3BhcXVlTmFtZSA9IG9wYXF1ZU5hbWU7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgV3JhcHBlcktlZXBPcGFxdWUge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIFR5cGUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgd3JhcHBlciBpcyBkZWNvZGFibGVcbiAgICAgKi9cbiAgICBnZXQgaXNEZWNvZGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9faW50ZXJuYWxfX2RlY29kZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19kZWNvZGVkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBpbm5lcjogW3RoaXMuX19pbnRlcm5hbF9fZGVjb2RlZC5pbnNwZWN0KCldLFxuICAgICAgICAgICAgICAgIG91dGVyOiBbY29tcGFjdFRvVThhKHRoaXMubGVuZ3RoKV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIG91dGVyOiBbY29tcGFjdFRvVThhKHRoaXMubGVuZ3RoKSwgdGhpcy50b1U4YSh0cnVlKV1cbiAgICAgICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZFxuICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX2RlY29kZWQudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpXG4gICAgICAgICAgICA6IHN1cGVyLnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSB2YWx1ZSBpbiBhIGJlc3QtZml0IHByaW1pdGl2ZSBmb3JtXG4gICAgICovXG4gICAgdG9QcmltaXRpdmUoZGlzYWJsZUFzY2lpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2RlY29kZWRcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19kZWNvZGVkLnRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSlcbiAgICAgICAgICAgIDogc3VwZXIudG9QcmltaXRpdmUoZGlzYWJsZUFzY2lpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9faW50ZXJuYWxfX29wYXF1ZU5hbWV9PCR7dGhpcy5yZWdpc3RyeS5nZXRDbGFzc05hbWUodGhpcy5fX2ludGVybmFsX19UeXBlKSB8fCAodGhpcy5fX2ludGVybmFsX19kZWNvZGVkID8gdGhpcy5fX2ludGVybmFsX19kZWNvZGVkLnRvUmF3VHlwZSgpIDogbmV3IHRoaXMuX19pbnRlcm5hbF9fVHlwZSh0aGlzLnJlZ2lzdHJ5KS50b1Jhd1R5cGUoKSl9PmA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgc3RyaW5nIChlaXRoZXIgZGVjb2RlZCBvciBieXRlcylcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZFxuICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX2RlY29kZWQudG9TdHJpbmcoKVxuICAgICAgICAgICAgOiBzdXBlci50b1N0cmluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgZGVjb2RlZCB0aGF0IHRoZSBXcmFwcGVyS2VlcE9wYXF1ZSByZXByZXNlbnRzIChpZiBhdmFpbGFibGUpLCB0aHJvd3MgaWYgbm9uLWRlY29kYWJsZVxuICAgICAqL1xuICAgIHVud3JhcCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9faW50ZXJuYWxfX2RlY29kZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLl9faW50ZXJuYWxfX29wYXF1ZU5hbWV9OiB1bndyYXBwaW5nIGFuIHVuZGVjb2RhYmxlIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZGVjb2RlZDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBXcmFwcGVyS2VlcE9wYXF1ZSB9IGZyb20gJy4vV3JhcHBlcktlZXBPcGFxdWUuanMnO1xuZXhwb3J0IGNsYXNzIFdyYXBwZXJPcGFxdWUgZXh0ZW5kcyBXcmFwcGVyS2VlcE9wYXF1ZSB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHR5cGVOYW1lLCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgdHlwZU5hbWUsIHZhbHVlLCB7IG9wYXF1ZU5hbWU6ICdXcmFwcGVyT3BhcXVlJyB9KTtcbiAgICB9XG4gICAgc3RhdGljIHdpdGgoVHlwZSkge1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBXcmFwcGVyT3BhcXVlIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBUeXBlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgaW5uZXIgdmFsdWUgZm9yIHRoaXMgd3JhcHBlciwgaW4gYWxsIGNhc2VzIGl0IF9zaG91bGRfIGJlIGRlY29kYWJsZSAodW5saWtlIEtlZXBPcGFxdWUpXG4gICAgICovXG4gICAgZ2V0IGlubmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bndyYXAoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc1U4YSwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4vKipcbiAqIEBuYW1lIGJvb2xcbiAqIEBkZXNjcmlwdGlvblxuICogUmVwcmVzZW50YXRpb24gZm9yIGEgYm9vbGVhbiB2YWx1ZSBpbiB0aGUgc3lzdGVtLiBJdCBleHRlbmRzIHRoZSBiYXNlIEpTIGBCb29sZWFuYCBjbGFzc1xuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgYm9vbCBleHRlbmRzIEJvb2xlYW4ge1xuICAgIHJlZ2lzdHJ5O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgaW5pdGlhbFU4YUxlbmd0aCA9IDE7XG4gICAgaXNTdG9yYWdlRmFsbGJhY2s7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoaXNVOGEodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlWzBdID09PSAxXG4gICAgICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhblxuICAgICAgICAgICAgICAgID8gdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgOiAhIXZhbHVlKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gMSB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgaGFzaCBvZiB0aGUgY29udGVudHNcbiAgICAgKi9cbiAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuaGFzaCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSB2YWx1ZSAodHJ1ZSB3aGVuIGl0IHdyYXBzIGZhbHNlL2RlZmF1bHQpXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlIChhbHdheXMgZmFsc2UpXG4gICAgICovXG4gICAgZ2V0IGlzRmFsc2UoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1RydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlIChhbHdheXMgZmFsc2UpXG4gICAgICovXG4gICAgZ2V0IGlzVHJ1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gKG90aGVyIGluc3RhbmNlb2YgQm9vbGVhblxuICAgICAgICAgICAgPyBvdGhlci52YWx1ZU9mKClcbiAgICAgICAgICAgIDogb3RoZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGVyOiBbdGhpcy50b1U4YSgpXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ2Jvb2wnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKS50b1N0cmluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKi9cbiAgICB0b1U4YShfaXNCYXJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShbdGhpcy52YWx1ZU9mKCkgPyAxIDogMF0pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGZsb2F0VG9VOGEsIGlzSGV4LCBpc1U4YSwgdThhVG9GbG9hdCwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqXG4gKiBAbmFtZSBGbG9hdFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIENvZGVjIHdyYXBwZXIgZm9yIEYzMiAmIEY2NCB2YWx1ZXMuIFlvdSBnZW5lcmFsbHkgZG9uJ3Qgd2FudCB0byBiZSB1c2luZ1xuICogZjMyL2Y2NCBpbiB5b3VyIHJ1bnRpbWUsIG9wZXJhdGlvbnMgb24gZml4ZWQgcG9pbnRzIG51bWJlcnMgYXJlIHByZWZlcmFibGUuIFRoaXMgY2xhc3NcbiAqIHdhcyBleHBsaWNpdGx5IGFkZGVkIHNpbmNlIHNjYWxlLWNvZGVjIGhhcyBhIGZsYWcgdGhhdCBlbmFibGVzIHRoaXMgYW5kIGl0IGlzIGF2YWlsYWJsZVxuICogaW4gc29tZSBldGhfKiBSUENzXG4gKi9cbmV4cG9ydCBjbGFzcyBGbG9hdCBleHRlbmRzIE51bWJlciB7XG4gICAgZW5jb2RlZExlbmd0aDtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGg7XG4gICAgaXNTdG9yYWdlRmFsbGJhY2s7XG4gICAgX19pbnRlcm5hbF9fYml0TGVuZ3RoO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSwgeyBiaXRMZW5ndGggPSAzMiB9ID0ge30pIHtcbiAgICAgICAgc3VwZXIoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IHU4YVRvRmxvYXQodThhVG9VOGEodmFsdWUpLCB7IGJpdExlbmd0aCB9KVxuICAgICAgICAgICAgOiAodmFsdWUgfHwgMCkpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2JpdExlbmd0aCA9IGJpdExlbmd0aDtcbiAgICAgICAgdGhpcy5lbmNvZGVkTGVuZ3RoID0gYml0TGVuZ3RoIC8gODtcbiAgICAgICAgdGhpcy5pbml0aWFsVThhTGVuZ3RoID0gdGhpcy5lbmNvZGVkTGVuZ3RoO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgfVxuICAgIHN0YXRpYyB3aXRoKGJpdExlbmd0aCkge1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBGbG9hdCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgdmFsdWUsIHsgYml0TGVuZ3RoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Lmhhc2godGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHlwZSB3cmFwcyBhbiBlbXB0eS9kZWZhdWx0IGFsbC0wIHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IE51bWJlcihvdGhlcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3V0ZXI6IFt0aGlzLnRvVThhKCldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b0hleCgpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvSGV4KHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMgYWN0dWFsbHkgYSBoZXggb3IgYSBzdHJpbmcgdmFsdWVcbiAgICAgICAgLy8gKHdvdWxkIG5lZWQgdG8gY2hlY2sgYWdhaW5zdCBSUENzIHRvIHNlZSB0aGUgcmVzdWx0IGhlcmUpXG4gICAgICAgIHJldHVybiB0aGlzLnRvSGV4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBudW1iZXIgcmVwcmVzZW50YXRpb24gKFNhbWUgYXMgdmFsdWVPZilcbiAgICAgKi9cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9OdW1iZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiBgZiR7dGhpcy5fX2ludGVybmFsX19iaXRMZW5ndGh9YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICByZXR1cm4gZmxvYXRUb1U4YSh0aGlzLCB7XG4gICAgICAgICAgICBiaXRMZW5ndGg6IHRoaXMuX19pbnRlcm5hbF9fYml0TGVuZ3RoXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24sIG9iamVjdFByb3BlcnRpZXMsIHN0cmluZ2lmeSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGNvbXBhcmVNYXAgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVKc29uKHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlIHx8IHt9KTtcbn1cbi8qKlxuICogQG5hbWUgSnNvblxuICogQGRlc2NyaXB0aW9uXG4gKiBXcmFwcyB0aGUgYSBKU09OIHN0cnVjdHVyZSByZXRyaWV2ZSB2aWEgUlBDLiBJdCBleHRlbmRzIHRoZSBzdGFuZGFyZCBKUyBNYXAgd2l0aC4gV2hpbGUgaXRcbiAqIGltcGxlbWVudHMgYSBDb2RlYywgaXQgaXMgbGltaXRlZCBpbiB0aGF0IGl0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbnB1dCBvYmplY3RzIHZpYSBSUEMsXG4gKiBpLmUuIG5vIGhleCBkZWNvZGluZy4gVW5saWtlIGEgc3RydWN0LCB0aGlzIHdhcHMgYSBKU09OIG9iamVjdCB3aXRoIHVua25vd24ga2V5c1xuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgSnNvbiBleHRlbmRzIE1hcCB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpbml0aWFsVThhTGVuZ3RoO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlSnNvbih2YWx1ZSk7XG4gICAgICAgIHN1cGVyKGRlY29kZWQpO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgICAgIG9iamVjdFByb3BlcnRpZXModGhpcywgZGVjb2RlZC5tYXAoKFtrXSkgPT4gayksIChrKSA9PiB0aGlzLmdldChrKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBbHdheXMgMCwgbmV2ZXIgZW5jb2RlcyBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIDAgfCAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5Lmhhc2godGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmtleXMoKV0ubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlTWFwKHRoaXMsIG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSB0eXBlZCB2YWx1ZSBmcm9tIHRoZSBpbnRlcm5hbCBtYXBcbiAgICAgKi9cbiAgICBnZXRUKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoa2V5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWQsIHdpbGwgdGhyb3dcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaW1wbGVtZW50ZWQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaW1wbGVtZW50ZWQsIHdpbGwgdGhyb3dcbiAgICAgKi9cbiAgICB0b0hleCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmltcGxlbWVudGVkJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbigpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXMoKV0ucmVkdWNlKChqc29uLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGpzb25ba2V5XSA9IGlzRnVuY3Rpb24odmFsdWU/LnRvSHVtYW4pXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS50b0h1bWFuKClcbiAgICAgICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzKCldLnJlZHVjZSgoanNvbiwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBqc29uW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllcygpXS5yZWR1Y2UoKGpzb24sIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAganNvbltrZXldID0gaXNGdW5jdGlvbih2YWx1ZS50b1ByaW1pdGl2ZSlcbiAgICAgICAgICAgICAgICA/IHZhbHVlLnRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnSnNvbic7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnkodGhpcy50b0pTT04oKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmltcGxlbWVudGVkLCB3aWxsIHRocm93XG4gICAgICovXG4gICAgdG9VOGEoX2lzQmFyZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaW1wbGVtZW50ZWQnKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpc0FzY2lpLCBpc1VuZGVmaW5lZCwgaXNVdGY4LCB1OGFUb0hleCwgdThhVG9TdHJpbmcsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqXG4gKiBAbmFtZSBSYXdcbiAqIEBkZXNjcmlwdGlvblxuICogQSBiYXNpYyB3cmFwcGVyIGFyb3VuZCBVaW50OEFycmF5LCB3aXRoIG5vIGZyaWxscyBhbmQgbm8gZnVzcy4gSXQgZG9lcyBkaWZmZXJcbiAqIGZyb20gb3RoZXIgaW1wbGVtZW50YXRpb25zIHdoZXJlIGl0IHdpbGwgY29uc3VtZSB0aGUgZnVsbCBVaW50OEFycmF5IGFzIHBhc3NlZCB0byBpdC5cbiAqIEFzIHN1Y2ggaXQgaXMgbWVhbnQgdG8gYmUgc3ViY2xhc3NlZCB3aGVyZSB0aGUgd3JhcHBlciB0YWtlcyBjYXJlIG9mIHRoZVxuICogYWN0dWFsIGxlbmd0aHMgaW5zdGVhZCBvZiB1c2VkIGRpcmVjdGx5LlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgUmF3IGV4dGVuZHMgVWludDhBcnJheSB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpbml0aWFsVThhTGVuZ3RoO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGlzIGVuc3VyZXMgdGhhdCBvcGVyYXRvcnMgc3VjaCBhcyBjbGljZSwgZmlsdGVyLCBtYXAsIGV0Yy4gcmV0dXJuXG4gICAgICogbmV3IEFycmF5IGluc3RhbmNlcyAod2l0aG91dCB0aGlzIHdlIG5lZWQgdG8gYXBwbHkgb3ZlcnJpZGVzKVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQgW1N5bWJvbC5zcGVjaWVzXSgpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSwgaW5pdGlhbFU4YUxlbmd0aCkge1xuICAgICAgICBzdXBlcih1OGFUb1U4YSh2YWx1ZSkpO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMuaW5pdGlhbFU4YUxlbmd0aCA9IGluaXRpYWxVOGFMZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB3aGVuIGVuY29kZWQgYXMgYSBVaW50OEFycmF5XG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRydWUgaWYgdGhlIHdyYXBwZWQgdmFsdWUgY29udGFpbnMgb25seSBBU0NJSSBwcmludGFibGUgY2hhcmFjdGVyc1xuICAgICAqL1xuICAgIGdldCBpc0FzY2lpKCkge1xuICAgICAgICByZXR1cm4gaXNBc2NpaSh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHlwZSB3cmFwcyBhbiBlbXB0eS9kZWZhdWx0IGFsbC0wIHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5sZW5ndGggfHwgaXNVbmRlZmluZWQodGhpcy5maW5kKChiKSA9PiAhIWIpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdHJ1ZSBpZiB0aGUgd3JhcHBlZCB2YWx1ZSBjb250YWlucyBvbmx5IHV0ZjggY2hhcmFjdGVyc1xuICAgICAqL1xuICAgIGdldCBpc1V0ZjgoKSB7XG4gICAgICAgIHJldHVybiBpc1V0ZjgodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICBiaXRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCAqIDg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmxlbmd0aCA9PT0gb3RoZXIubGVuZ3RoKSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnNvbWUoKGIsIGluZGV4KSA9PiBiICE9PSBvdGhlcltpbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVxKHU4YVRvVThhKG90aGVyKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3V0ZXI6IFt0aGlzLnRvVThhKCldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b0hleCgpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvSGV4KHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oX2lzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9IZXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSB2YWx1ZSBpbiBhIGJlc3QtZml0IHByaW1pdGl2ZSBmb3JtXG4gICAgICovXG4gICAgdG9QcmltaXRpdmUoZGlzYWJsZUFzY2lpKSB7XG4gICAgICAgIGlmICghZGlzYWJsZUFzY2lpICYmIHRoaXMuaXNBc2NpaSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMudG9VdGY4KCk7XG4gICAgICAgICAgICAvLyBlbnN1cmUgd2UgZGlkbid0IGVuZCB1cCB3aXRoIG11bHRpYnl0ZSBjb2RlcG9pbnRzXG4gICAgICAgICAgICBpZiAoaXNBc2NpaSh0ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdSYXcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0hleCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKi9cbiAgICB0b1U4YShfaXNCYXJlKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LmZyb20odGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVkIGRhdGEgYXMgYSBVVEYtOCBzdHJpbmdcbiAgICAgKi9cbiAgICB0b1V0ZjgoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1V0ZjgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpcyBub3QgYSB2YWxpZCBVdGY4IHN0cmluZycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1OGFUb1N0cmluZyh0aGlzKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCTiwgYm5Ub0JuLCBiblRvVThhLCBpc0JuLCBpc051bWJlciwgaXNTdHJpbmcsIGlzVThhLCBpc1VuZGVmaW5lZCwgb2JqZWN0UHJvcGVydGllcywgc3RyaW5naWZ5LCBzdHJpbmdQYXNjYWxDYXNlLCB1OGFUb0JuLCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjb21wYXJlQXJyYXkgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5mdW5jdGlvbiBlbmNvZGVTZXQoc2V0VmFsdWVzLCB2YWx1ZXMpIHtcbiAgICBjb25zdCBlbmNvZGVkID0gbmV3IEJOKDApO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHZhbHVlcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGVuY29kZWQuaW9yKGJuVG9CbihzZXRWYWx1ZXNbdmFsdWVzW2ldXSB8fCAwKSk7XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVkO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlU2V0QXJyYXkoc2V0VmFsdWVzLCB2YWx1ZXMpIHtcbiAgICBjb25zdCBjb3VudCA9IHZhbHVlcy5sZW5ndGg7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdmFsdWVzW2ldO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoc2V0VmFsdWVzW2tleV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNldDogSW52YWxpZCBrZXkgJyR7a2V5fScgcGFzc2VkIHRvIFNldCwgYWxsb3dlZCAke09iamVjdC5rZXlzKHNldFZhbHVlcykuam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbaV0gPSBrZXk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVTZXROdW1iZXIoc2V0VmFsdWVzLCBfdmFsdWUpIHtcbiAgICBjb25zdCBibiA9IGJuVG9CbihfdmFsdWUpO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzZXRWYWx1ZXMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGtleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoYm4uYW5kKGJuVG9CbihzZXRWYWx1ZXNba2V5XSkpLmVxKGJuVG9CbihzZXRWYWx1ZXNba2V5XSkpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbXB1dGVkID0gZW5jb2RlU2V0KHNldFZhbHVlcywgcmVzdWx0KTtcbiAgICBpZiAoIWJuLmVxKGNvbXB1dGVkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNldDogTWlzbWF0Y2ggZGVjb2RpbmcgJyR7Ym4udG9TdHJpbmcoKX0nLCBjb21wdXRlZCBhcyAnJHtjb21wdXRlZC50b1N0cmluZygpfScgd2l0aCAke3Jlc3VsdC5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlU2V0KHNldFZhbHVlcywgdmFsdWUgPSAwLCBiaXRMZW5ndGgpIHtcbiAgICBpZiAoYml0TGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHZhbGlkIGJpdExlbmd0aCwgcG93ZXIgb2YgOCwgZm91bmQgJHtiaXRMZW5ndGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBiaXRMZW5ndGggLyA4O1xuICAgIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiBkZWNvZGVTZXROdW1iZXIoc2V0VmFsdWVzLCB1OGFUb0JuKHZhbHVlLnN1YmFycmF5KDAsIGJ5dGVMZW5ndGgpLCB7IGlzTGU6IHRydWUgfSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVNldChzZXRWYWx1ZXMsIHU4YVRvVThhKHZhbHVlKSwgYnl0ZUxlbmd0aCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0IHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogWy4uLnZhbHVlLnZhbHVlcygpXTtcbiAgICAgICAgcmV0dXJuIGRlY29kZVNldEFycmF5KHNldFZhbHVlcywgaW5wdXQpO1xuICAgIH1cbiAgICByZXR1cm4gZGVjb2RlU2V0TnVtYmVyKHNldFZhbHVlcywgdmFsdWUpO1xufVxuLyoqXG4gKiBAbmFtZSBTZXRcbiAqIEBkZXNjcmlwdGlvblxuICogQW4gU2V0IGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMsIHJlcHJlc2VudGVkIGFuIGFuIGVuY29kZWQgdHlwZSBieVxuICogYSBiaXR3aXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2RlY1NldCBleHRlbmRzIFNldCB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpbml0aWFsVThhTGVuZ3RoO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIF9faW50ZXJuYWxfX2FsbG93ZWQ7XG4gICAgX19pbnRlcm5hbF9fYnl0ZUxlbmd0aDtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgc2V0VmFsdWVzLCB2YWx1ZSwgYml0TGVuZ3RoID0gOCkge1xuICAgICAgICBzdXBlcihkZWNvZGVTZXQoc2V0VmFsdWVzLCB2YWx1ZSwgYml0TGVuZ3RoKSk7XG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19hbGxvd2VkID0gc2V0VmFsdWVzO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2J5dGVMZW5ndGggPSBiaXRMZW5ndGggLyA4O1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aCh2YWx1ZXMsIGJpdExlbmd0aCkge1xuICAgICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBDb2RlY1NldCB7XG4gICAgICAgICAgICBzdGF0aWMge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNLZXlzID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaXNLZXlzW2ldID0gYGlzJHtzdHJpbmdQYXNjYWxDYXNlKGtleXNbaV0pfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iamVjdFByb3BlcnRpZXModGhpcy5wcm90b3R5cGUsIGlzS2V5cywgKF8sIGksIHNlbGYpID0+IHNlbGYuc3RyaW5ncy5pbmNsdWRlcyhrZXlzW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwgdmFsdWVzLCB2YWx1ZSwgYml0TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiB0cnVlIGlzIHRoZSBTZXQgY29udGFpbnMgbm8gdmFsdWVzXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUgPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0dWFsIHNldCB2YWx1ZXMgYXMgYSBzdHJpbmdbXVxuICAgICAqL1xuICAgIGdldCBzdHJpbmdzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnN1cGVyLnZhbHVlcygpXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBlbmNvZGVkIHZhbHVlIGZvciB0aGUgc2V0IG1lbWJlcnNcbiAgICAgKi9cbiAgICBnZXQgdmFsdWVFbmNvZGVkKCkge1xuICAgICAgICByZXR1cm4gZW5jb2RlU2V0KHRoaXMuX19pbnRlcm5hbF9fYWxsb3dlZCwgdGhpcy5zdHJpbmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIGFkZHMgYSB2YWx1ZSB0byB0aGUgU2V0IChleHRlbmRlZCB0byBhbGxvdyBmb3IgdmFsaWRpdHkgY2hlY2tpbmcpXG4gICAgICovXG4gICAgYWRkID0gKGtleSkgPT4ge1xuICAgICAgICAvLyBeXl4gYWRkID0gKCkgcHJvcGVydHkgZG9uZSB0byBhc3NpZ24gdGhpcyBpbnN0YW5jZSdzIHRoaXMsIG90aGVyd2lzZSBTZXQuYWRkIGNyZWF0ZXMgXCJzb21lXCIgY2hhb3NcbiAgICAgICAgLy8gd2UgaGF2ZSB0aGUgaXNVbmRlZmluZWQodGhpcy5fc2V0VmFsdWVzKSBpbiBoZXJlIGFzIHdlbGwsIGFkZCBpcyB1c2VkIGludGVybmFsbHlcbiAgICAgICAgLy8gaW4gdGhlIFNldCBjb25zdHJ1Y3RvciAoc28gaXQgaXMgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnQsIGFuZCBzaG91bGQgYWxsb3cpXG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX2FsbG93ZWQgJiYgaXNVbmRlZmluZWQodGhpcy5fX2ludGVybmFsX19hbGxvd2VkW2tleV0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNldDogSW52YWxpZCBrZXkgJyR7a2V5fScgb24gYWRkYCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuYWRkKGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hcbiAgICAgKi9cbiAgICBlcShvdGhlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdGhlcikpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IGNhcmUgYWJvdXQgdGhlIG9yZGVyLCBzb3J0IHRoZSB2YWx1ZXNcbiAgICAgICAgICAgIHJldHVybiBjb21wYXJlQXJyYXkodGhpcy5zdHJpbmdzLnNvcnQoKSwgb3RoZXIuc29ydCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvdGhlciBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXEoWy4uLm90aGVyLnZhbHVlcygpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIob3RoZXIpIHx8IGlzQm4ob3RoZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUVuY29kZWQuZXEoYm5Ub0JuKG90aGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGVyOiBbdGhpcy50b1U4YSgpXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSlNPTigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBlbmNvZGVkIHZhbHVlIGZvciB0aGUgc2V0IG1lbWJlcnNcbiAgICAgKi9cbiAgICB0b051bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVFbmNvZGVkLnRvTnVtYmVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnkoeyBfc2V0OiB0aGlzLl9faW50ZXJuYWxfX2FsbG93ZWQgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgWyR7dGhpcy5zdHJpbmdzLmpvaW4oJywgJyl9XWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBTQ0FMRSBzcGVjaWZpY2F0aW9uc1xuICAgICAqL1xuICAgIHRvVThhKF9pc0JhcmUpIHtcbiAgICAgICAgcmV0dXJuIGJuVG9VOGEodGhpcy52YWx1ZUVuY29kZWQsIHtcbiAgICAgICAgICAgIGJpdExlbmd0aDogdGhpcy5fX2ludGVybmFsX19ieXRlTGVuZ3RoICogOCxcbiAgICAgICAgICAgIGlzTGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNCb29sZWFuLCBpc0hleCwgaXNPYmplY3QsIGlzVThhLCBpc1VuZGVmaW5lZCwgb2JqZWN0UHJvcGVydGllcywgc3RyaW5nQ2FtZWxDYXNlLCBzdHJpbmdpZnksIHU4YUNvbmNhdFN0cmljdCwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgY29tcGFyZU1hcCwgZGVjb2RlVThhU3RydWN0LCBtYXBUb1R5cGVNYXAsIHR5cGVzVG9NYXAgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5mdW5jdGlvbiBub29wU2V0RGVmaW5pdGlvbihkKSB7XG4gICAgcmV0dXJuIGQ7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVTdHJ1Y3RGcm9tT2JqZWN0KHJlZ2lzdHJ5LCBbVHlwZXMsIGtleXNdLCB2YWx1ZSwganNvbk1hcCkge1xuICAgIGxldCBqc29uT2JqO1xuICAgIGNvbnN0IHR5cGVvZkFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgY29uc3QgdHlwZW9mTWFwID0gdmFsdWUgaW5zdGFuY2VvZiBNYXA7XG4gICAgY29uc3QgY291bnQgPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAoIXR5cGVvZkFycmF5ICYmICF0eXBlb2ZNYXAgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cnVjdDogQ2Fubm90IGRlY29kZSB2YWx1ZSAke3N0cmluZ2lmeSh2YWx1ZSl9ICh0eXBlb2YgJHt0eXBlb2YgdmFsdWV9KSwgZXhwZWN0ZWQgYW4gaW5wdXQgb2JqZWN0LCBtYXAgb3IgYXJyYXlgKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mQXJyYXkgJiYgdmFsdWUubGVuZ3RoICE9PSBjb3VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cnVjdDogVW5hYmxlIHRvIG1hcCAke3N0cmluZ2lmeSh2YWx1ZSl9IGFycmF5IHRvIG9iamVjdCB3aXRoIGtub3duIGtleXMgJHtrZXlzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IHJhdyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGNvbnN0IGpzb25LZXkgPSBqc29uTWFwLmdldChrZXkpIHx8IGtleTtcbiAgICAgICAgY29uc3QgVHlwZSA9IFR5cGVzW2ldO1xuICAgICAgICBsZXQgYXNzaWduO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZkFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXNzaWduID0gdmFsdWVbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2ZNYXApIHtcbiAgICAgICAgICAgICAgICBhc3NpZ24gPSBqc29uS2V5ICYmIHZhbHVlLmdldChqc29uS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzc2lnbiA9IGpzb25LZXkgJiYgdmFsdWVbanNvbktleV07XG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGFzc2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGpzb25PYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbk9iaiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZSA9IDAsIGVjb3VudCA9IGVudHJpZXMubGVuZ3RoOyBlIDwgZWNvdW50OyBlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uT2JqW3N0cmluZ0NhbWVsQ2FzZShlbnRyaWVzW2VdWzBdKV0gPSBlbnRyaWVzW2VdWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbiA9IGpzb25LZXkgJiYganNvbk9ialtqc29uS2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYXdbaV0gPSBbXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGFzc2lnbiBpbnN0YW5jZW9mIFR5cGVcbiAgICAgICAgICAgICAgICAgICAgPyBhc3NpZ25cbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgVHlwZShyZWdpc3RyeSwgYXNzaWduKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gVHlwZS5uYW1lO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0eXBlID0gbmV3IFR5cGUocmVnaXN0cnkpLnRvUmF3VHlwZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdHJ1Y3Q6IGZhaWxlZCBvbiAke2pzb25LZXl9OiAke3R5cGV9OjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbcmF3LCAwXTtcbn1cbi8qKlxuICogQG5hbWUgU3RydWN0XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgU3RydWN0IGRlZmluZXMgYW4gT2JqZWN0IHdpdGgga2V5LXZhbHVlIHBhaXJzIC0gd2hlcmUgdGhlIHZhbHVlcyBhcmUgQ29kZWMgdmFsdWVzLiBJdCByZW1vdmVzXG4gKiBhIGxvdCBvZiByZXBldGl0aW9uIGZyb20gdGhlIGFjdHVhbCBjb2RpbmcsIGRlZmluZSBhIHN0cnVjdHVyZSB0eXBlLCBwYXNzIGl0IHRoZSBrZXkvQ29kZWNcbiAqIHZhbHVlcyBpbiB0aGUgY29uc3RydWN0b3IgYW5kIGl0IG1hbmFnZXMgdGhlIGRlY29kaW5nLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgY29uc3RydWN0b3JcbiAqIHZhbHVlcyBtYXRjaGVzIDEwMCUgdG8gdGhlIG9yZGVyIGluIHRoIFJ1c3QgY29kZSwgaS5lLiBkb24ndCBnbyBjcmF6eSBhbmQgbWFrZSBpdCBhbHBoYWJldGljYWwsXG4gKiBpdCBuZWVkcyB0byBkZWNvZGVkIGluIHRoZSBzcGVjaWZpYyBkZWZpbmVkIG9yZGVyLlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgU3RydWN0IGV4dGVuZHMgTWFwIHtcbiAgICByZWdpc3RyeTtcbiAgICBjcmVhdGVkQXRIYXNoO1xuICAgIGluaXRpYWxVOGFMZW5ndGg7XG4gICAgaXNTdG9yYWdlRmFsbGJhY2s7XG4gICAgX19pbnRlcm5hbF9fanNvbk1hcDtcbiAgICBfX2ludGVybmFsX19UeXBlcztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgVHlwZXMsIHZhbHVlLCBqc29uTWFwID0gbmV3IE1hcCgpLCB7IGRlZmluaXRpb24sIHNldERlZmluaXRpb24gPSBub29wU2V0RGVmaW5pdGlvbiB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgdHlwZU1hcCA9IGRlZmluaXRpb24gfHwgc2V0RGVmaW5pdGlvbihtYXBUb1R5cGVNYXAocmVnaXN0cnksIFR5cGVzKSk7XG4gICAgICAgIGNvbnN0IFtkZWNvZGVkLCBkZWNvZGVkTGVuZ3RoXSA9IGlzVThhKHZhbHVlKSB8fCBpc0hleCh2YWx1ZSlcbiAgICAgICAgICAgID8gZGVjb2RlVThhU3RydWN0KHJlZ2lzdHJ5LCBuZXcgQXJyYXkodHlwZU1hcFswXS5sZW5ndGgpLCB1OGFUb1U4YSh2YWx1ZSksIHR5cGVNYXApXG4gICAgICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgU3RydWN0XG4gICAgICAgICAgICAgICAgPyBbdmFsdWUsIDBdXG4gICAgICAgICAgICAgICAgOiBkZWNvZGVTdHJ1Y3RGcm9tT2JqZWN0KHJlZ2lzdHJ5LCB0eXBlTWFwLCB2YWx1ZSB8fCB7fSwganNvbk1hcCk7XG4gICAgICAgIHN1cGVyKGRlY29kZWQpO1xuICAgICAgICB0aGlzLmluaXRpYWxVOGFMZW5ndGggPSBkZWNvZGVkTGVuZ3RoO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fanNvbk1hcCA9IGpzb25NYXA7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fVHlwZXMgPSB0eXBlTWFwO1xuICAgIH1cbiAgICBzdGF0aWMgd2l0aChUeXBlcywganNvbk1hcCkge1xuICAgICAgICBsZXQgZGVmaW5pdGlvbjtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hc3NpZ25cbiAgICAgICAgY29uc3Qgc2V0RGVmaW5pdGlvbiA9IChkKSA9PiBkZWZpbml0aW9uID0gZDtcbiAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgU3RydWN0IHtcbiAgICAgICAgICAgIHN0YXRpYyB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKFR5cGVzKTtcbiAgICAgICAgICAgICAgICBvYmplY3RQcm9wZXJ0aWVzKHRoaXMucHJvdG90eXBlLCBrZXlzLCAoaywgXywgc2VsZikgPT4gc2VsZi5nZXQoaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocmVnaXN0cnksIFR5cGVzLCB2YWx1ZSwganNvbk1hcCwgeyBkZWZpbml0aW9uLCBzZXREZWZpbml0aW9uIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGF2YWlsYWJsZSBrZXlzIGZvciB0aGlzIHN0cnVjdFxuICAgICAqL1xuICAgIGdldCBkZWZLZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19UeXBlc1sxXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGlmICghdi5pc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICBsZXQgdG90YWwgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgdG90YWwgKz0gdi5lbmNvZGVkTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBUeXBlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdHJ1Y3R1cmVcbiAgICAgKi9cbiAgICBnZXQgVHlwZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNvbnN0IFtUeXBlcywga2V5c10gPSB0aGlzLl9faW50ZXJuYWxfX1R5cGVzO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBrZXlzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXlzW2ldXSA9IG5ldyBUeXBlc1tpXSh0aGlzLnJlZ2lzdHJ5KS50b1Jhd1R5cGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlTWFwKHRoaXMsIG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBzcGVjaWZpYyBuYW1lcyBlbnRyeSBpbiB0aGUgc3RydWN0dXJlXG4gICAgICogQHBhcmFtIGtleSBUaGUgbmFtZSBvZiB0aGUgZW50cnkgdG8gcmV0cmlldmVcbiAgICAgKi9cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXQoa2V5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHZhbHVlcyBvZiBhIG1lbWJlciBhdCBhIHNwZWNpZmljIGluZGV4IChSYXRoZXIgdXNlIGdldChuYW1lKSBmb3IgcGVyZm9ybWFuY2UpXG4gICAgICovXG4gICAgZ2V0QXRJbmRleChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KClbaW5kZXhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYSB0eXBlcyB2YWx1ZSBieSBuYW1lXG4gICAgICovXG4gICAgZ2V0VChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldChrZXkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdChpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlubmVyLnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLnYuaW5zcGVjdCghaXNCYXJlIHx8IGlzQm9vbGVhbihpc0JhcmUpXG4gICAgICAgICAgICAgICAgICAgID8gaXNCYXJlXG4gICAgICAgICAgICAgICAgICAgIDogaXNCYXJlW2tdKSxcbiAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmdDYW1lbENhc2UoaylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbm5lclxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBhbiBzdGFuZGFyZCBKYXZhU2NyaXB0IEFycmF5XG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnZhbHVlcygpXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KCkge1xuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICBjb25zdCBqc29uID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBqc29uW2tdID0gdi50b0h1bWFuKGlzRXh0ZW5kZWQsIGRpc2FibGVBc2NpaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqc29uID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAvLyBIZXJlIHdlIHB1bGwgb3V0IHRoZSBlbnRyeSBhZ2FpbnN0IHRoZSBKU09OIG1hcHBpbmcgKGlmIHN1cHBsaWVkKVxuICAgICAgICAgICAgLy8gc2luY2UgdGhpcyByZXByZXNlbnRhdGlvbiBnb2VzIG92ZXIgUlBDIGFuZCBuZWVkcyB0byBiZSBjb3JyZWN0XG4gICAgICAgICAgICBqc29uWyh0aGlzLl9faW50ZXJuYWxfX2pzb25NYXAuZ2V0KGspIHx8IGspXSA9IHYudG9KU09OKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKGRpc2FibGVBc2NpaSkge1xuICAgICAgICBjb25zdCBqc29uID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBqc29uW2tdID0gdi50b1ByaW1pdGl2ZShkaXNhYmxlQXNjaWkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeSh0eXBlc1RvTWFwKHRoaXMucmVnaXN0cnksIHRoaXMuX19pbnRlcm5hbF9fVHlwZXMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgZW5jb2RlZC5wdXNoKHYudG9VOGEoIWlzQmFyZSB8fCBpc0Jvb2xlYW4oaXNCYXJlKVxuICAgICAgICAgICAgICAgID8gaXNCYXJlXG4gICAgICAgICAgICAgICAgOiBpc0JhcmVba10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdThhQ29uY2F0U3RyaWN0KGVuY29kZWQpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGNvbXBhY3RBZGRMZW5ndGgsIGNvbXBhY3RGcm9tVThhTGltLCBjb21wYWN0VG9VOGEsIGhleFRvVThhLCBpc0hleCwgaXNTdHJpbmcsIGlzVThhLCBzdHJpbmdUb1U4YSwgdThhVG9IZXgsIHU4YVRvU3RyaW5nIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgUmF3IH0gZnJvbSAnLi9SYXcuanMnO1xuY29uc3QgTUFYX0xFTkdUSCA9IDEyOCAqIDEwMjQ7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVUZXh0KHZhbHVlKSB7XG4gICAgaWYgKGlzVThhKHZhbHVlKSkge1xuICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFsnJywgMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIFJhdywgdGhlIGludGVybmFsIGJ1ZmZlciBkb2VzIG5vdCBoYXZlIGFuIGludGVybmFsIGxlbmd0aFxuICAgICAgICAvLyAodGhlIHNhbWUgYXBwbGllcyBpbiBlLmcuIEJ5dGVzLCB3aGVyZSBsZW5ndGggaXMgYWRkZWQgYXQgZW5jb2RpbmctdGltZSlcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmF3KSB7XG4gICAgICAgICAgICByZXR1cm4gW3U4YVRvU3RyaW5nKHZhbHVlKSwgMF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IGNvbXBhY3RGcm9tVThhTGltKHZhbHVlKTtcbiAgICAgICAgY29uc3QgdG90YWwgPSBvZmZzZXQgKyBsZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPiBNQVhfTEVOR1RIKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRleHQ6IGxlbmd0aCAke2xlbmd0aC50b1N0cmluZygpfSBleGNlZWRzICR7TUFYX0xFTkdUSH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0b3RhbCA+IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZXh0OiByZXF1aXJlZCBsZW5ndGggbGVzcyB0aGFuIHJlbWFpbmRlciwgZXhwZWN0ZWQgYXQgbGVhc3QgJHt0b3RhbH0sIGZvdW5kICR7dmFsdWUubGVuZ3RofWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdThhVG9TdHJpbmcodmFsdWUuc3ViYXJyYXkob2Zmc2V0LCB0b3RhbCkpLCB0b3RhbF07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzSGV4KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW3U4YVRvU3RyaW5nKGhleFRvVThhKHZhbHVlKSksIDBdO1xuICAgIH1cbiAgICByZXR1cm4gW3ZhbHVlID8gdmFsdWUudG9TdHJpbmcoKSA6ICcnLCAwXTtcbn1cbi8qKlxuICogQG5hbWUgVGV4dFxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGlzIGEgc3RyaW5nIHdyYXBwZXIsIGFsb25nIHdpdGggdGhlIGxlbmd0aC4gSXQgaXMgdXNlZCBib3RoIGZvciBzdHJpbmdzIGFzIHdlbGxcbiAqIGFzIGl0ZW1zIHN1Y2ggYXMgZG9jdW1lbnRhdGlvbi4gSXQgc2ltcGx5IGV4dGVuZHMgdGhlIHN0YW5kYXJkIEpTIGBTdHJpbmdgIGJ1aWx0LWluXG4gKiBvYmplY3QsIGluaGVyaXRpbmcgYWxsIG1ldGhvZHMgZXhwb3NlZCBmcm9tIGBTdHJpbmdgLlxuICogQG5vSW5oZXJpdERvY1xuICovXG5leHBvcnQgY2xhc3MgVGV4dCBleHRlbmRzIFN0cmluZyB7XG4gICAgcmVnaXN0cnk7XG4gICAgY3JlYXRlZEF0SGFzaDtcbiAgICBpbml0aWFsVThhTGVuZ3RoO1xuICAgIGlzU3RvcmFnZUZhbGxiYWNrO1xuICAgIF9faW50ZXJuYWxfX292ZXJyaWRlID0gbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgW3N0ciwgZGVjb2RlZExlbmd0aF0gPSBkZWNvZGVUZXh0KHZhbHVlKTtcbiAgICAgICAgc3VwZXIoc3RyKTtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLmluaXRpYWxVOGFMZW5ndGggPSBkZWNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1U4YSgpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBoYXNoIG9mIHRoZSBjb250ZW50c1xuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgLy8gb25seSBpbmNsdWRlZCBoZXJlIHNpbmNlIHdlIGlnbm9yZSBpbmhlcml0ZWQgZG9jc1xuICAgICAgICByZXR1cm4gc3VwZXIubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhvdGhlcilcbiAgICAgICAgICAgID8gdGhpcy50b1N0cmluZygpID09PSBvdGhlci50b1N0cmluZygpXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdHJpbmdUb1U4YShzdXBlci50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGVyOiB2YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IFtjb21wYWN0VG9VOGEodmFsdWUubGVuZ3RoKSwgdmFsdWVdXG4gICAgICAgICAgICAgICAgOiBbY29tcGFjdFRvVThhKHZhbHVlLmxlbmd0aCldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgYW4gb3ZlcnJpZGUgdmFsdWUgZm9yIHRoaXNcbiAgICAgKi9cbiAgICBzZXRPdmVycmlkZShvdmVycmlkZSkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX292ZXJyaWRlID0gb3ZlcnJpZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b0hleCgpIHtcbiAgICAgICAgLy8gbGlrZSB3aXRoIFZlYzx1OD4sIHdoZW4gd2UgYXJlIGVuY29kaW5nIHRvIGhleCwgd2UgZG9uJ3QgYWN0dWFsbHkgYWRkXG4gICAgICAgIC8vIHRoZSBsZW5ndGggcHJlZml4IChpdCBpcyBhbHJlYWR5IGltcGxpZWQgYnkgdGhlIGFjdHVhbCBzdHJpbmcgbGVuZ3RoKVxuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YSh0cnVlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ1RleHQnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19vdmVycmlkZSB8fCBzdXBlci50b1N0cmluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICAvLyBOT1RFIEhlcmUgd2UgdXNlIHRoZSBzdXBlciB0b1N0cmluZyAod2UgYXJlIG5vdCB0YWtpbmcgb3ZlcnJpZGVzIGludG8gYWNjb3VudCxcbiAgICAgICAgLy8gcmF0aGVyIGVuY29kaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSB0aGUgc3RyaW5nIHdhcyBjb25zdHJ1Y3RlZCB3aXRoKVxuICAgICAgICBjb25zdCBlbmNvZGVkID0gc3RyaW5nVG9VOGEoc3VwZXIudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBpc0JhcmVcbiAgICAgICAgICAgID8gZW5jb2RlZFxuICAgICAgICAgICAgOiBjb21wYWN0QWRkTGVuZ3RoKGVuY29kZWQpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEZsb2F0IH0gZnJvbSAnLi4vbmF0aXZlL0Zsb2F0LmpzJztcbi8qKlxuICogQG5hbWUgZjMyXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgMzItYml0IGZsb2F0XG4gKi9cbmV4cG9ydCBjbGFzcyBmMzIgZXh0ZW5kcyBGbG9hdC53aXRoKDMyKSB7XG4gICAgLy8gTk9URSB3aXRob3V0IHRoaXMsIHdlIGNhbm5vdCBwcm9wZXJseSBkZXRlcm1pbmUgZXh0ZW5zaW9uc1xuICAgIF9fRmxvYXRUeXBlID0gJ2YzMic7XG59XG4iLCJpbXBvcnQgeyBGbG9hdCB9IGZyb20gJy4uL25hdGl2ZS9GbG9hdC5qcyc7XG4vKipcbiAqIEBuYW1lIGY2NFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDY0LWJpdCBmbG9hdFxuICovXG5leHBvcnQgY2xhc3MgZjY0IGV4dGVuZHMgRmxvYXQud2l0aCg2NCkge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX0Zsb2F0VHlwZSA9ICdmNjQnO1xufVxuIiwiaW1wb3J0IHsgSW50IH0gZnJvbSAnLi4vYmFzZS9JbnQuanMnO1xuLyoqXG4gKiBAbmFtZSBpMTI4XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgMTI4LWJpdCBzaWduZWQgaW50ZWdlclxuICovXG5leHBvcnQgY2xhc3MgaTEyOCBleHRlbmRzIEludC53aXRoKDEyOCkge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX0ludFR5cGUgPSAnaTEyOCc7XG59XG4iLCJpbXBvcnQgeyBJbnQgfSBmcm9tICcuLi9iYXNlL0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIGkxNlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDE2LWJpdCBzaWduZWQgaW50ZWdlclxuICovXG5leHBvcnQgY2xhc3MgaTE2IGV4dGVuZHMgSW50LndpdGgoMTYpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19JbnRUeXBlID0gJ2kxNic7XG59XG4iLCJpbXBvcnQgeyBJbnQgfSBmcm9tICcuLi9iYXNlL0ludC5qcyc7XG4vKipcbiAqIEBuYW1lIGkyNTZcbiAqIEBkZXNjcmlwdGlvblxuICogQSAyNTYtYml0IHNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyBpMjU2IGV4dGVuZHMgSW50LndpdGgoMjU2KSB7XG4gICAgLy8gTk9URSB3aXRob3V0IHRoaXMsIHdlIGNhbm5vdCBwcm9wZXJseSBkZXRlcm1pbmUgZXh0ZW5zaW9uc1xuICAgIF9fSW50VHlwZSA9ICdpMjU2Jztcbn1cbiIsImltcG9ydCB7IEludCB9IGZyb20gJy4uL2Jhc2UvSW50LmpzJztcbi8qKlxuICogQG5hbWUgaTMyXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgMzItYml0IHNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyBpMzIgZXh0ZW5kcyBJbnQud2l0aCgzMikge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX0ludFR5cGUgPSAnaTMyJztcbn1cbiIsImltcG9ydCB7IEludCB9IGZyb20gJy4uL2Jhc2UvSW50LmpzJztcbi8qKlxuICogQG5hbWUgaTY0XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyBpNjQgZXh0ZW5kcyBJbnQud2l0aCg2NCkge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX0ludFR5cGUgPSAnaTY0Jztcbn1cbiIsImltcG9ydCB7IEludCB9IGZyb20gJy4uL2Jhc2UvSW50LmpzJztcbi8qKlxuICogQG5hbWUgaThcbiAqIEBkZXNjcmlwdGlvblxuICogQW4gOC1iaXQgc2lnbmVkIGludGVnZXJcbiAqL1xuZXhwb3J0IGNsYXNzIGk4IGV4dGVuZHMgSW50LndpdGgoOCkge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX0ludFR5cGUgPSAnaTgnO1xufVxuIiwiaW1wb3J0IHsgaTMyIH0gZnJvbSAnLi9JMzIuanMnO1xuLyoqXG4gKiBAbmFtZSBJU2l6ZVxuICogQGRlc2NyaXB0aW9uXG4gKiBBIFN5c3RlbSBkZWZhdWx0IHNpZ25lZCBudW1iZXIsIHR5cGljYWxseSB1c2VkIGluIFJQQyB0byByZXBvcnQgbm9uLWNvbnNlbnN1c1xuICogZGF0YS4gSXQgaXMgYSB3cmFwcGVyIGZvciBbW0kzMl1dIGFzIGEgV0FTTSBkZWZhdWx0IChhcyBnZW5lcmF0ZWQgYnkgUnVzdCBiaW5kaW5ncykuXG4gKiBJdCBpcyBub3QgdG8gYmUgdXNlZCwgc2luY2UgaXQgY3JlYXRlcyBjb25zZW5zdXMgbWlzbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIGlzaXplIGV4dGVuZHMgaTMyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYGlzaXplYCB0eXBlIHNob3VsZCBub3QgYmUgdXNlZC4gU2luY2UgaXQgaXMgcGxhdGZvcm0tc3BlY2lmaWMsIGl0IGNyZWF0ZXMgaW5jb21wYXRpYmlsaXRpZXMgYmV0d2VlbiBuYXRpdmUgKGdlbmVyYWxseSBpNjQpIGFuZCBXQVNNIChhbHdheXMgaTMyKSBjb2RlLiBVc2Ugb25lIG9mIHRoZSBgaTMyYCBvciBgaTY0YCB0eXBlcyBleHBsaWNpdGx5LicpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFVJbnQgfSBmcm9tICcuLi9iYXNlL1VJbnQuanMnO1xuLyoqXG4gKiBAbmFtZSB1MTI4XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgMTI4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyB1MTI4IGV4dGVuZHMgVUludC53aXRoKDEyOCkge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX1VJbnRUeXBlID0gJ3UxMjgnO1xufVxuIiwiaW1wb3J0IHsgVUludCB9IGZyb20gJy4uL2Jhc2UvVUludC5qcyc7XG4vKipcbiAqIEBuYW1lIHUxNlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyB1MTYgZXh0ZW5kcyBVSW50LndpdGgoMTYpIHtcbiAgICAvLyBOT1RFIHdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHByb3Blcmx5IGRldGVybWluZSBleHRlbnNpb25zXG4gICAgX19VSW50VHlwZSA9ICd1MTYnO1xufVxuIiwiaW1wb3J0IHsgVUludCB9IGZyb20gJy4uL2Jhc2UvVUludC5qcyc7XG4vKipcbiAqIEBuYW1lIHUyNTZcbiAqIEBkZXNjcmlwdGlvblxuICogQSAyNTYtYml0IHVuc2lnbmVkIGludGVnZXJcbiAqL1xuZXhwb3J0IGNsYXNzIHUyNTYgZXh0ZW5kcyBVSW50LndpdGgoMjU2KSB7XG4gICAgLy8gTk9URSB3aXRob3V0IHRoaXMsIHdlIGNhbm5vdCBwcm9wZXJseSBkZXRlcm1pbmUgZXh0ZW5zaW9uc1xuICAgIF9fVUludFR5cGUgPSAndTI1Nic7XG59XG4iLCJpbXBvcnQgeyBVSW50IH0gZnJvbSAnLi4vYmFzZS9VSW50LmpzJztcbi8qKlxuICogQG5hbWUgdTMyXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgMzItYml0IHVuc2lnbmVkIGludGVnZXJcbiAqL1xuZXhwb3J0IGNsYXNzIHUzMiBleHRlbmRzIFVJbnQud2l0aCgzMikge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX1VJbnRUeXBlID0gJ3UzMic7XG59XG4iLCJpbXBvcnQgeyBVSW50IH0gZnJvbSAnLi4vYmFzZS9VSW50LmpzJztcbi8qKlxuICogQG5hbWUgdTY0XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgNjQtYml0IHVuc2lnbmVkIGludGVnZXJcbiAqL1xuZXhwb3J0IGNsYXNzIHU2NCBleHRlbmRzIFVJbnQud2l0aCg2NCkge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX1VJbnRUeXBlID0gJ3U2NCc7XG59XG4iLCJpbXBvcnQgeyBVSW50IH0gZnJvbSAnLi4vYmFzZS9VSW50LmpzJztcbi8qKlxuICogQG5hbWUgdThcbiAqIEBkZXNjcmlwdGlvblxuICogQW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlclxuICovXG5leHBvcnQgY2xhc3MgdTggZXh0ZW5kcyBVSW50LndpdGgoOCkge1xuICAgIC8vIE5PVEUgd2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcHJvcGVybHkgZGV0ZXJtaW5lIGV4dGVuc2lvbnNcbiAgICBfX1VJbnRUeXBlID0gJ3U4Jztcbn1cbiIsImltcG9ydCB7IHUzMiB9IGZyb20gJy4vVTMyLmpzJztcbi8qKlxuICogQG5hbWUgVVNpemVcbiAqIEBkZXNjcmlwdGlvblxuICogQSBTeXN0ZW0gZGVmYXVsdCB1bnNpZ25lZCBudW1iZXIsIHR5cGljYWxseSB1c2VkIGluIFJQQyB0byByZXBvcnQgbm9uLWNvbnNlbnN1c1xuICogZGF0YS4gSXQgaXMgYSB3cmFwcGVyIGZvciBbW1UzMl1dIGFzIGEgV0FTTSBkZWZhdWx0IChhcyBnZW5lcmF0ZWQgYnkgUnVzdCBiaW5kaW5ncykuXG4gKiBJdCBpcyBub3QgdG8gYmUgdXNlZCwgc2luY2UgaXQgY3JlYXRlZCBjb25zZW5zdXMgbWlzbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIHVzaXplIGV4dGVuZHMgdTMyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHVzaXplYCB0eXBlIHNob3VsZCBub3QgYmUgdXNlZC4gU2luY2UgaXQgaXMgcGxhdGZvcm0tc3BlY2lmaWMsIGl0IGNyZWF0ZXMgaW5jb21wYXRpYmlsaXRpZXMgYmV0d2VlbiBuYXRpdmUgKGdlbmVyYWxseSB1NjQpIGFuZCBXQVNNIChhbHdheXMgdTMyKSBjb2RlLiBVc2Ugb25lIG9mIHRoZSBgdTMyYCBvciBgdTY0YCB0eXBlcyBleHBsaWNpdGx5LicpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgaGFzRXEgfSBmcm9tICcuL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVBcnJheShhLCBiKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgcmV0dXJuIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpICYmIGlzVW5kZWZpbmVkKGEuZmluZCgodiwgaW5kZXgpID0+IGhhc0VxKHYpXG4gICAgICAgICAgICA/ICF2LmVxKGJbaW5kZXhdKVxuICAgICAgICAgICAgOiB2ICE9PSBiW2luZGV4XSkpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNVbmRlZmluZWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBoYXNFcSB9IGZyb20gJy4vdXRpbC5qcyc7XG5mdW5jdGlvbiBoYXNNaXNtYXRjaChhLCBiKSB7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKGEpIHx8IChoYXNFcShhKVxuICAgICAgICA/ICFhLmVxKGIpXG4gICAgICAgIDogYSAhPT0gYik7XG59XG5mdW5jdGlvbiBub3RFbnRyeSh2YWx1ZSkge1xuICAgIHJldHVybiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoICE9PSAyO1xufVxuZnVuY3Rpb24gY29tcGFyZU1hcEFycmF5KGEsIGIpIHtcbiAgICAvLyBlcXVhbCBudW1iZXIgb2YgZW50cmllcyBhbmQgZWFjaCBlbnRyeSBpbiB0aGUgYXJyYXkgc2hvdWxkIG1hdGNoXG4gICAgcmV0dXJuIChhLnNpemUgPT09IGIubGVuZ3RoKSAmJiAhYi5zb21lKChlKSA9PiBub3RFbnRyeShlKSB8fFxuICAgICAgICBoYXNNaXNtYXRjaChhLmdldChlWzBdKSwgZVsxXSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVNYXAoYSwgYikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlTWFwQXJyYXkoYSwgYik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVNYXBBcnJheShhLCBbLi4uYi5lbnRyaWVzKCldKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoYikpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVNYXBBcnJheShhLCBPYmplY3QuZW50cmllcyhiKSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gY29tcGFyZVNldEFycmF5KGEsIGIpIHtcbiAgICAvLyBlcXVhbCBudW1iZXIgb2YgZW50cmllcyBhbmQgZWFjaCBlbnRyeSBpbiB0aGUgYXJyYXkgc2hvdWxkIG1hdGNoXG4gICAgcmV0dXJuIChhLnNpemUgPT09IGIubGVuZ3RoKSAmJiAhYi5zb21lKChlKSA9PiAhYS5oYXMoZSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVTZXQoYSwgYikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlU2V0QXJyYXkoYSwgYik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGIgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVTZXRBcnJheShhLCBbLi4uYi52YWx1ZXMoKV0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdChiKSkge1xuICAgICAgICByZXR1cm4gY29tcGFyZVNldEFycmF5KGEsIE9iamVjdC52YWx1ZXMoYikpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgeyB1OGFUb0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGZvcm1hdEZhaWx1cmUocmVnaXN0cnksIGZuLCBfcmVzdWx0LCB7IG1lc3NhZ2UgfSwgdThhLCBpLCBjb3VudCwgVHlwZSwga2V5KSB7XG4gICAgbGV0IHR5cGUgPSAnJztcbiAgICB0cnkge1xuICAgICAgICB0eXBlID0gYDogJHtuZXcgVHlwZShyZWdpc3RyeSkudG9SYXdUeXBlKCl9YDtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICB9XG4gICAgLy8gVGhpcyBpcyBleHRyYSBkZWJ1Z2dpbmcgaW5mbyAod2UgbW9zdC1wcm9iYWJseSB3YW50IHRoaXMgaW4gaW4gc29tZSB3YXksIHNoYXBlIG9yIGZvcm0sXG4gICAgLy8gYnV0IGF0IHRoaXMgcG9pbnQgbm90IHF1aXRlIHN1cmUgaG93IHRvIGluY2x1ZGUgYW5kIGZvcm1hdCBpdCAoaXQgY2FuIGJlIHF1aXRlIG1hc3NpdmUpXG4gICAgLy8gY29uc29sZS5lcnJvcihKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpKTtcbiAgICByZXR1cm4gYCR7Zm59OiBmYWlsZWQgYXQgJHt1OGFUb0hleCh1OGEuc3ViYXJyYXkoMCwgMTYpKX3igKYke2tleSA/IGAgb24gJHtrZXl9YCA6ICcnfSAoaW5kZXggJHtpICsgMX0vJHtjb3VudH0pJHt0eXBlfTo6ICR7bWVzc2FnZX1gO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqXG4gKiBHaXZlbiBhbiB1OGEsIGFuZCBhbiBhcnJheSBvZiBUeXBlIGNvbnN0cnVjdG9ycywgZGVjb2RlIHRoZSB1OGEgYWdhaW5zdCB0aGVcbiAqIHR5cGVzLCBhbmQgcmV0dXJuIGFuIGFycmF5IG9mIGRlY29kZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB1OGEgLSBUaGUgdThhIHRvIGRlY29kZS5cbiAqIEBwYXJhbSByZXN1bHQgLSBUaGUgcmVzdWx0IGFycmF5ICh3aWxsIGJlIHJldHVybmVkIHdpdGggdmFsdWVzIHB1c2hlZClcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBhcnJheSBvZiBDb2RlY0NsYXNzIHRvIGRlY29kZSB0aGUgVThhIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVOGEocmVnaXN0cnksIHJlc3VsdCwgdThhLCBbVHlwZXMsIGtleXNdKSB7XG4gICAgY29uc3QgY291bnQgPSByZXN1bHQubGVuZ3RoO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoaSA8IGNvdW50KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyBUeXBlc1tpXShyZWdpc3RyeSwgdThhLnN1YmFycmF5KG9mZnNldCkpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZhbHVlLmluaXRpYWxVOGFMZW5ndGggfHwgdmFsdWUuZW5jb2RlZExlbmd0aDtcbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RmFpbHVyZShyZWdpc3RyeSwgJ2RlY29kZVU4YScsIHJlc3VsdCwgZXJyb3IsIHU4YS5zdWJhcnJheShvZmZzZXQpLCBpLCBjb3VudCwgVHlwZXNbaV0sIGtleXNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXN1bHQsIG9mZnNldF07XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIFNwbGl0IGZyb20gZGVjb2RlVThhIHNpbmNlIHRoaXMgaXMgc3BlY2lhbGl6ZWQgdG8gemlwIHJldHVybnMgLi4uIHdoaWxlIHdlIGR1cGxpY2F0ZSwgdGhpc1xuICogaXMgYWxsIG9uIHRoZSBob3QtcGF0aCwgc28gaXQgaXMgbm90IGdyZWF0LCBob3dldmVyIHRoZXJlIGlzIChzb21lKSBtZXRob2QgYmVoaW5kIHRoZSBtYWRuZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVOGFTdHJ1Y3QocmVnaXN0cnksIHJlc3VsdCwgdThhLCBbVHlwZXMsIGtleXNdKSB7XG4gICAgY29uc3QgY291bnQgPSByZXN1bHQubGVuZ3RoO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoaSA8IGNvdW50KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyBUeXBlc1tpXShyZWdpc3RyeSwgdThhLnN1YmFycmF5KG9mZnNldCkpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZhbHVlLmluaXRpYWxVOGFMZW5ndGggfHwgdmFsdWUuZW5jb2RlZExlbmd0aDtcbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IFtrZXlzW2ldLCB2YWx1ZV07XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRGYWlsdXJlKHJlZ2lzdHJ5LCAnZGVjb2RlVThhU3RydWN0JywgcmVzdWx0LCBlcnJvciwgdThhLnN1YmFycmF5KG9mZnNldCksIGksIGNvdW50LCBUeXBlc1tpXSwga2V5c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gW3Jlc3VsdCwgb2Zmc2V0XTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKlxuICogU3BsaXQgZnJvbSBkZWNvZGVVOGEgc2luY2UgdGhpcyBpcyBzcGVjaWFsaXplZCB0byAxIGluc3RhbmNlIC4uLiB3aGlsZSB3ZSBkdXBsaWNhdGUsIHRoaXNcbiAqIGlzIGFsbCBvbiB0aGUgaG90LXBhdGgsIHNvIGl0IGlzIG5vdCBncmVhdCwgaG93ZXZlciB0aGVyZSBpcyAoc29tZSkgbWV0aG9kIGJlaGluZCB0aGUgbWFkbmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVThhVmVjKHJlZ2lzdHJ5LCByZXN1bHQsIHU4YSwgc3RhcnRBdCwgVHlwZSkge1xuICAgIGNvbnN0IGNvdW50ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICBsZXQgb2Zmc2V0ID0gc3RhcnRBdDtcbiAgICBsZXQgaSA9IDA7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKGkgPCBjb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgVHlwZShyZWdpc3RyeSwgdThhLnN1YmFycmF5KG9mZnNldCkpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZhbHVlLmluaXRpYWxVOGFMZW5ndGggfHwgdmFsdWUuZW5jb2RlZExlbmd0aDtcbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RmFpbHVyZShyZWdpc3RyeSwgJ2RlY29kZVU4YVZlYycsIHJlc3VsdCwgZXJyb3IsIHU4YS5zdWJhcnJheShvZmZzZXQpLCBpLCBjb3VudCwgVHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gW29mZnNldCwgb2Zmc2V0IC0gc3RhcnRBdF07XG59XG4iLCJjb25zdCBCT1VOREVEID0gWydCVHJlZU1hcCcsICdCVHJlZVNldCcsICdIYXNoTWFwJywgJ1ZlYyddO1xuY29uc3QgQUxMT1dFRF9CT1hFUyA9IEJPVU5ERUQuY29uY2F0KFsnQ29tcGFjdCcsICdEb05vdENvbnN0cnVjdCcsICdJbnQnLCAnTGlua2FnZScsICdSYW5nZScsICdSYW5nZUluY2x1c2l2ZScsICdSZXN1bHQnLCAnT3BhcXVlJywgJ09wdGlvbicsICdVSW50JywgJ1dyYXBwZXJLZWVwT3BhcXVlJywgJ1dyYXBwZXJPcGFxdWUnXSk7XG5jb25zdCBCT1hfUFJFQ0VESU5HID0gWyc8JywgJygnLCAnWycsICdcIicsICcsJywgJyAnXTsgLy8gc3RhcnQgb2YgdmVjLCB0dXBsZSwgZml4ZWQgYXJyYXksIHBhcnQgb2Ygc3RydWN0IGRlZiBvciBpbiB0dXBsZVxuY29uc3QgbWFwcGluZ3MgPSBbXG4gICAgLy8gYWxpYXMgPFQ6OkluaGVyZW50T2ZmbGluZVJlcG9ydCBhcyBJbmhlcmVudE9mZmxpbmVSZXBvcnQ+OjpJbmhlcmVudCAtPiBJbmhlcmVudE9mZmxpbmVSZXBvcnRcbiAgICBhbGlhcygnPFQ6OkluaGVyZW50T2ZmbGluZVJlcG9ydCBhcyBJbmhlcmVudE9mZmxpbmVSZXBvcnQ+OjpJbmhlcmVudCcsICdJbmhlcmVudE9mZmxpbmVSZXBvcnQnLCBmYWxzZSksXG4gICAgYWxpYXMoJ1ZlY0RlcXVlPCcsICdWZWM8JywgZmFsc2UpLFxuICAgIC8vIDxUOjpCYWxhbmNlIGFzIEhhc0NvbXBhY3Q+XG4gICAgY2xlYW51cENvbXBhY3QoKSxcbiAgICAvLyBDaGFuZ2UgQm91bmRlZFZlYzxUeXBlLCBTaXplPiB0byBWZWM8VHlwZT5cbiAgICByZW1vdmVFeHRlbnNpb25zKCdCb3VuZGVkJywgdHJ1ZSksXG4gICAgLy8gQ2hhbmdlIFdlYWtWZWM8VHlwZT4gdG8gVmVjPFR5cGU+XG4gICAgcmVtb3ZlRXh0ZW5zaW9ucygnV2VhaycsIGZhbHNlKSxcbiAgICAvLyBSZW1vdmUgYWxsIHRoZSB0cmFpdCBwcmVmaXhlc1xuICAgIHJlbW92ZVRyYWl0cygpLFxuICAgIC8vIHJlbW92ZSBQYWlyT2Y8VD4gLT4gKFQsIFQpXG4gICAgcmVtb3ZlUGFpck9mKCksXG4gICAgLy8gcmVtb3ZlIGJveGluZywgYEJveDxQcm9wb3NhbD5gIC0+IGBQcm9wb3NhbGBcbiAgICByZW1vdmVXcmFwKCdCb3g8JyksXG4gICAgLy8gcmVtb3ZlIGdlbmVyaWNzLCBgTWlzYmVoYXZpb3JSZXBvcnQ8SGFzaCwgQmxvY2tOdW1iZXI+YCAtPiBgTWlzYmVoYXZpb3JSZXBvcnRgXG4gICAgcmVtb3ZlR2VuZXJpY3MoKSxcbiAgICAvLyBhbGlhcyBTdHJpbmcgLT4gVGV4dCAoY29tcGF0IHdpdGgganNvbnJwYyBtZXRob2RzKVxuICAgIGFsaWFzKCdTdHJpbmcnLCAnVGV4dCcpLFxuICAgIC8vIGFsaWFzIFZlYzx1OD4gLT4gQnl0ZXNcbiAgICBhbGlhcygnVmVjPHU4PicsICdCeXRlcycpLFxuICAgIGFsaWFzKCcmXFxcXFt1OFxcXFxdJywgJ0J5dGVzJyksXG4gICAgYWxpYXMoXCImJ3N0YXRpY1xcXFxbdThcXFxcXVwiLCAnQnl0ZXMnKSxcbiAgICAvLyBhbGlhcyBSYXdBZGRyZXNzIC0+IEFkZHJlc3NcbiAgICBhbGlhcygnUmF3QWRkcmVzcycsICdBZGRyZXNzJyksXG4gICAgLy8gbG9va3VwcywgbWFwcGVkIHRvIEFkZHJlc3MvQWNjb3VudElkIGFzIGFwcHJvcHJpYXRlIGluIHJ1bnRpbWVcbiAgICBhbGlhcygnTG9va3VwOjpTb3VyY2UnLCAnTG9va3VwU291cmNlJyksXG4gICAgYWxpYXMoJ0xvb2t1cDo6VGFyZ2V0JywgJ0xvb2t1cFRhcmdldCcpLFxuICAgIC8vIEhBQ0sgZHVwbGljYXRpb24gYmV0d2VlbiBjb250cmFjdHMgJiBwcmltaXRpdmVzLCBob3dldmVyIGNvbnRyYWN0cyBwcmVmaXhlZCB3aXRoIGV4ZWNcbiAgICBhbGlhcygnZXhlYzo6U3RvcmFnZUtleScsICdDb250cmFjdFN0b3JhZ2VLZXknKSxcbiAgICAvLyBmbGF0dGVucyB0dXBsZXMgd2l0aCBvbmUgdmFsdWUsIGAoQWNjb3VudElkKWAgLT4gYEFjY291bnRJZGBcbiAgICBmbGF0dGVuU2luZ2xlVHVwbGUoKSxcbiAgICAvLyBjb252ZXJ0cyA6OlR5cGUgdG8gVHlwZSwgPFQgYXMgVHJhaXQ8ST4+OjpQcm9wb3NhbCAtPiBQcm9wb3NhbFxuICAgIHJlbW92ZUNvbG9ucygpLFxuICAgIC8vIHJlbW92ZSBhbGwgdHJhaWxpbmcgc3BhY2VzIC0gdGhpcyBzaG91bGQgYWx3YXlzIGJlIHRoZSBsYXN0XG4gICAgdHJpbSgpXG5dO1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICh2YWx1ZSkgPT4gdmFsdWUudHJpbSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDbG9zaW5nKHZhbHVlLCBzdGFydCkge1xuICAgIGxldCBkZXB0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0LCBjb3VudCA9IHZhbHVlLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgaWYgKHZhbHVlW2ldID09PSAnPicpIHtcbiAgICAgICAgICAgIGlmICghZGVwdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWVbaV0gPT09ICc8Jykge1xuICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGNsb3NpbmcgbWF0Y2hpbmcgPD4gb24gJyR7dmFsdWV9JyAoc3RhcnQgJHtzdGFydH0pYCk7XG59XG5leHBvcnQgZnVuY3Rpb24gYWxpYXMoc3JjLCBkZXN0LCB3aXRoQ2hlY2tzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZyb20gPSBuZXcgUmVnRXhwKGAoXiR7c3JjfXwke0JPWF9QUkVDRURJTkcubWFwKChib3gpID0+IGBcXFxcJHtib3h9JHtzcmN9YCkuam9pbignfCcpfSlgLCAnZycpO1xuICAgIGNvbnN0IHRvID0gKHNyYykgPT4ge1xuICAgICAgICBmcm9tLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHJldHVybiB3aXRoQ2hlY2tzICYmIEJPWF9QUkVDRURJTkcuaW5jbHVkZXMoc3JjWzBdKVxuICAgICAgICAgICAgPyBgJHtzcmNbMF19JHtkZXN0fWBcbiAgICAgICAgICAgIDogZGVzdDtcbiAgICB9O1xuICAgIHJldHVybiAodmFsdWUpID0+IHZhbHVlLnJlcGxhY2UoZnJvbSwgdG8pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXBDb21wYWN0KCkge1xuICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKCcgYXMgSGFzQ29tcGFjdCcpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSB2YWx1ZS5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlW2ldID09PSAnPCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gZmluZENsb3NpbmcodmFsdWUsIGkgKyAxKSAtIDE0O1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3Vic3RyaW5nKGVuZCwgZW5kICsgMTQpID09PSAnIGFzIEhhc0NvbXBhY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGBDb21wYWN0PCR7dmFsdWUuc3Vic3RyaW5nKGkgKyAxLCBlbmQpfT5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5TaW5nbGVUdXBsZSgpIHtcbiAgICBjb25zdCBmcm9tMSA9IC8sXFwpL2c7XG4gICAgY29uc3QgZnJvbTIgPSAvXFwoKFteLF0rKVxcKS87XG4gICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICBmcm9tMS5sYXN0SW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIC8vIHR1cGxlcyBtYXkgaGF2ZSB0cmFpbGluZyBjb21tYXMsIGUuZy4gKHUzMiwgQmxvY2tOdW1iZXIsIClcbiAgICAgICAgICAgIC5yZXBsYWNlKGZyb20xLCAnKScpXG4gICAgICAgICAgICAvLyBjaGFuZ2UgKHUzMikgLT4gdTMyXG4gICAgICAgICAgICAucmVwbGFjZShmcm9tMiwgJyQxJyk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlcGxhY2VUYWdXaXRoKHZhbHVlLCBtYXRjaGVyLCByZXBsYWNlcikge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGluZGV4ID0gdmFsdWUuaW5kZXhPZihtYXRjaGVyLCBpbmRleCArIDEpO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCArIG1hdGNoZXIubGVuZ3RoO1xuICAgICAgICBjb25zdCBlbmQgPSBmaW5kQ2xvc2luZyh2YWx1ZSwgc3RhcnQpO1xuICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnN1YnN0cmluZygwLCBpbmRleCl9JHtyZXBsYWNlcih2YWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpfSR7dmFsdWUuc3Vic3RyaW5nKGVuZCArIDEpfWA7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUV4dGVuc2lvbnModHlwZSwgaXNTaXplZCkge1xuICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gQk9VTkRFRC5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBCT1VOREVEW2ldO1xuICAgICAgICAgICAgdmFsdWUgPSByZXBsYWNlVGFnV2l0aCh2YWx1ZSwgYCR7dHlwZX0ke3RhZ308YCwgKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHZcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHMpID0+IHMpO1xuICAgICAgICAgICAgICAgIGlmIChpc1NpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGFnfTwke3BhcnRzLmpvaW4oJywnKX0+YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNvbG9ucygpIHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGluZGV4ID0gdmFsdWUuaW5kZXhPZignOjonKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0ICE9PSAtMSAmJiAhQk9YX1BSRUNFRElORy5pbmNsdWRlcyh2YWx1ZVtzdGFydF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0LS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlID0gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIHN0YXJ0ICsgMSl9JHt2YWx1ZS5zdWJzdHJpbmcoaW5kZXggKyAyKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdlbmVyaWNzKCkge1xuICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdmFsdWUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbHVlW2ldID09PSAnPCcpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBhZ2FpbnN0IHRoZSBhbGxvd2VkIHdyYXBwZXJzLCBiZSBpdCBWZWM8Li4+LCBPcHRpb248Li4uPiAuLi5cbiAgICAgICAgICAgICAgICBjb25zdCBib3ggPSBBTExPV0VEX0JPWEVTLmZpbmQoKGJveCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGkgLSBib3gubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChzdGFydCA+PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGkpID09PSBib3gpICYmIChcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGl0IGlzIHN0YW5kLWFsb25lLCBpLmUuIGRvbid0IGNhdGNoIEVsZWN0aW9uUmVzdWx0PC4uLj4gYXMgUmVzdWx0PC4uLj5cbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJPWF9QUkVDRURJTkcuaW5jbHVkZXModmFsdWVbc3RhcnQgLSAxXSkpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIG5vdCBmb3VuZCBhbnl0aGluZywgdW53cmFwIGdlbmVyaWMgaW5uYXJkc1xuICAgICAgICAgICAgICAgIGlmICghYm94KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGZpbmRDbG9zaW5nKHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIGkpfSR7dmFsdWUuc3Vic3RyaW5nKGVuZCArIDEpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVBhaXJPZigpIHtcbiAgICBjb25zdCByZXBsYWNlciA9ICh2KSA9PiBgKCR7dn0sJHt2fSlgO1xuICAgIHJldHVybiAodmFsdWUpID0+IHJlcGxhY2VUYWdXaXRoKHZhbHVlLCAnUGFpck9mPCcsIHJlcGxhY2VyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUcmFpdHMoKSB7XG4gICAgY29uc3QgZnJvbTEgPSAvXFxzL2c7XG4gICAgY29uc3QgZnJvbTIgPSAvKFR8U2VsZik6Oi9nO1xuICAgIGNvbnN0IGZyb20zID0gLzwoVHxTZWxmKWFzVHJhaXQ+OjovZztcbiAgICBjb25zdCBmcm9tNCA9IC88VGFzW2Etel0rOjpUcmFpdD46Oi9nO1xuICAgIGNvbnN0IGZyb201ID0gLzxMb29rdXBhc1N0YXRpY0xvb2t1cD4vZztcbiAgICBjb25zdCBmcm9tNiA9IC86OlR5cGUvZztcbiAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgIGZyb20xLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGZyb20yLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGZyb20zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGZyb200Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGZyb201Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGZyb202Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCB3aGl0ZXNwYWNlc1xuICAgICAgICAgICAgLnJlcGxhY2UoZnJvbTEsICcnKVxuICAgICAgICAgICAgLy8gYW55dGhpbmcgYFQ6Ojx0eXBlPmAgdG8gZW5kIHVwIGFzIGA8dHlwZT5gXG4gICAgICAgICAgICAucmVwbGFjZShmcm9tMiwgJycpXG4gICAgICAgICAgICAvLyByZXBsYWNlIGA8VCBhcyBUcmFpdD46OmAgKHdoaXRlc3BhY2VzIHdlcmUgcmVtb3ZlZCBhYm92ZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKGZyb20zLCAnJylcbiAgICAgICAgICAgIC8vIHJlcGxhY2UgYDxUIGFzIHNvbWV0aGluZzo6VHJhaXQ+OjpgICh3aGl0ZXNwYWNlcyB3ZXJlIHJlbW92ZWQgYWJvdmUpXG4gICAgICAgICAgICAucmVwbGFjZShmcm9tNCwgJycpXG4gICAgICAgICAgICAvLyByZXBsYWNlIDxMb29rdXAgYXMgU3RhdGljTG9va3VwPlxuICAgICAgICAgICAgLnJlcGxhY2UoZnJvbTUsICdMb29rdXAnKVxuICAgICAgICAgICAgLy8gcmVwbGFjZSBgPC4uLj46OlR5cGVgXG4gICAgICAgICAgICAucmVwbGFjZShmcm9tNiwgJycpO1xuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlV3JhcChjaGVjaykge1xuICAgIGNvbnN0IHJlcGxhY2VyID0gKHYpID0+IHY7XG4gICAgcmV0dXJuICh2YWx1ZSkgPT4gcmVwbGFjZVRhZ1dpdGgodmFsdWUsIGNoZWNrLCByZXBsYWNlcik7XG59XG5jb25zdCBzYW5pdGl6ZU1hcCA9IG5ldyBNYXAoKTtcbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgIGNvbnN0IG1lbW9pemVkID0gc2FuaXRpemVNYXAuZ2V0KHN0YXJ0VmFsdWUpO1xuICAgIGlmIChtZW1vaXplZCkge1xuICAgICAgICByZXR1cm4gbWVtb2l6ZWQ7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSBzdGFydFZhbHVlO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gbWFwcGluZ3NbaV0ocmVzdWx0KTtcbiAgICB9XG4gICAgc2FuaXRpemVNYXAuc2V0KHN0YXJ0VmFsdWUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IGJuVG9CbiwgaXNCaWdJbnQsIGlzQm4sIGlzQm9vbGVhbiwgaXNDb2RlYywgaXNOdW1iZXIsIHN0cmluZ2lmeSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKiBAaW50ZXJuYWwgKiovXG5mdW5jdGlvbiBpc0FycmF5TGlrZShhcmcpIHtcbiAgICByZXR1cm4gYXJnIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBBcnJheS5pc0FycmF5KGFyZyk7XG59XG4vKiogQGludGVybmFsICoqL1xuZnVuY3Rpb24gaXNFbnVtKGFyZykge1xuICAgIHJldHVybiBpc0NvZGVjKGFyZykgJiYgaXNOdW1iZXIoYXJnLmluZGV4KSAmJiBpc0NvZGVjKGFyZy52YWx1ZSk7XG59XG4vKiogQGludGVybmFsICoqL1xuZnVuY3Rpb24gaXNPcHRpb24oYXJnKSB7XG4gICAgcmV0dXJuIGlzQ29kZWMoYXJnKSAmJiBpc0Jvb2xlYW4oYXJnLmlzU29tZSkgJiYgaXNDb2RlYyhhcmcudmFsdWUpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gaXNOdW1iZXJMaWtlKGFyZykge1xuICAgIHJldHVybiBpc051bWJlcihhcmcpIHx8IGlzQm4oYXJnKSB8fCBpc0JpZ0ludChhcmcpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gc29ydEFycmF5KGEsIGIpIHtcbiAgICAvLyBWZWMsIFR1cGxlLCBCeXRlcyBldGMuXG4gICAgbGV0IHNvcnRSZXMgPSAwO1xuICAgIGNvbnN0IG1pbkxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW5MZW47ICsraSkge1xuICAgICAgICBzb3J0UmVzID0gc29ydEFzYyhhW2ldLCBiW2ldKTtcbiAgICAgICAgaWYgKHNvcnRSZXMgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzb3J0UmVzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gY2hlY2tGb3JEdXBsaWNhdGVzKGNvbnRhaW5lciwgc2VlbiwgYXJnKSB7XG4gICAgLy8gQ29udmVydCB0aGUgdmFsdWUgdG8gaGV4LlxuICAgIGlmIChpc0NvZGVjKGFyZykpIHtcbiAgICAgICAgY29uc3QgaGV4ID0gYXJnLnRvSGV4KCk7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgc2VlbiB0aGUgdmFsdWUuXG4gICAgICAgIGlmIChzZWVuLmhhcyhoZXgpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGVzIGFyZSBub3QgYWxsb3dlZC5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHZhbHVlIGluICR7Y29udGFpbmVyfTogJHtzdHJpbmdpZnkoYXJnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBzZWVuLmFkZChoZXgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuKiBTb3J0IGtleXMvdmFsdWVzIG9mIEJUcmVlU2V0L0JUcmVlTWFwIGluIGFzY2VuZGluZyBvcmRlciBmb3IgZW5jb2RpbmcgY29tcGF0aWJpbGl0eSB3aXRoIFJ1c3QncyBCVHJlZVNldC9CVHJlZU1hcFxuKiAoaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvc3RkL2NvbGxlY3Rpb25zL3N0cnVjdC5CVHJlZVNldC5odG1sKVxuKiAoaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvc3RkL2NvbGxlY3Rpb25zL3N0cnVjdC5CVHJlZU1hcC5odG1sKVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0QXNjKGEsIGIpIHtcbiAgICBpZiAoaXNOdW1iZXJMaWtlKGEpICYmIGlzTnVtYmVyTGlrZShiKSkge1xuICAgICAgICByZXR1cm4gYm5Ub0JuKGEpLmNtcChiblRvQm4oYikpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhIGluc3RhbmNlb2YgTWFwICYmIGIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgcmV0dXJuIHNvcnRBc2MoQXJyYXkuZnJvbShhLnZhbHVlcygpKSwgQXJyYXkuZnJvbShiLnZhbHVlcygpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRW51bShhKSAmJiBpc0VudW0oYikpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRBc2MoYS5pbmRleCwgYi5pbmRleCkgfHwgc29ydEFzYyhhLnZhbHVlLCBiLnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPcHRpb24oYSkgJiYgaXNPcHRpb24oYikpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRBc2MoYS5pc05vbmUgPyAwIDogMSwgYi5pc05vbmUgPyAwIDogMSkgfHwgc29ydEFzYyhhLnZhbHVlLCBiLnZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheUxpa2UoYSkgJiYgaXNBcnJheUxpa2UoYikpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRBcnJheShhLCBiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDb2RlYyhhKSAmJiBpc0NvZGVjKGIpKSB7XG4gICAgICAgIC8vIFRleHQsIEJvb2wgZXRjLlxuICAgICAgICByZXR1cm4gc29ydEFzYyhhLnRvVThhKHRydWUpLCBiLnRvVThhKHRydWUpKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0aW5nIHRvIHNvcnQgdW5yZWNvZ25pemVkIHZhbHVlczogJHtzdHJpbmdpZnkoYSl9ICh0eXBlb2YgJHt0eXBlb2YgYX0pIDwtPiAke3N0cmluZ2lmeShiKX0gKHR5cGVvZiAke3R5cGVvZiBifSlgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzb3J0U2V0KHNldCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gICAgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShzZXQpLmZpbHRlcigodmFsdWUpID0+IGNoZWNrRm9yRHVwbGljYXRlcygnQlRyZWVTZXQnLCBzZWVuLCB2YWx1ZSkpLnNvcnQoc29ydEFzYykpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRNYXAobWFwKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTtcbiAgICByZXR1cm4gbmV3IE1hcChBcnJheS5mcm9tKG1hcC5lbnRyaWVzKCkpLmZpbHRlcigoW2tleV0pID0+IGNoZWNrRm9yRHVwbGljYXRlcygnQlRyZWVNYXAnLCBzZWVuLCBrZXkpKS5zb3J0KChba2V5QV0sIFtrZXlCXSkgPT4gc29ydEFzYyhrZXlBLCBrZXlCKSkpO1xufVxuIiwiLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEZyb20gYSB0eXBlIHN0cmluZyBvciBjbGFzcywgcmV0dXJuIHRoZSBhc3NvY2lhdGVkIHR5cGUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVUb0NvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdHlwZVxuICAgICAgICA6IHJlZ2lzdHJ5LmNyZWF0ZUNsYXNzVW5zYWZlKHR5cGUpO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFRha2VzIGFuIGlucHV0IGFycmF5IG9mIHR5cGVzIGFuZCByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGNsYXNzZXMgZm9yIGl0XG4qL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzVG9Db25zdHJ1Y3RvcnMocmVnaXN0cnksIHR5cGVzKSB7XG4gICAgY29uc3QgY291bnQgPSB0eXBlcy5sZW5ndGg7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgcmVzdWx0W2ldID0gdHlwZVRvQ29uc3RydWN0b3IocmVnaXN0cnksIHR5cGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKiBUYWtlcyBhbiBpbnB1dCBtYXAgb2YgdGhlIGZvcm0gYHsgW3N0cmluZ106IHN0cmluZyB8IENvZGVjQ2xhc3MgfWAgYW5kIHJldHVybnMgYSBtYXAgb2YgYHsgW3N0cmluZ106IENvZGVjQ2xhc3MgfWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvVHlwZU1hcChyZWdpc3RyeSwgaW5wdXQpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoaW5wdXQpO1xuICAgIGNvbnN0IGNvdW50ID0gZW50cmllcy5sZW5ndGg7XG4gICAgY29uc3Qgb3V0cHV0ID0gW25ldyBBcnJheShjb3VudCksIG5ldyBBcnJheShjb3VudCldO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBvdXRwdXRbMV1baV0gPSBlbnRyaWVzW2ldWzBdO1xuICAgICAgICBvdXRwdXRbMF1baV0gPSB0eXBlVG9Db25zdHJ1Y3RvcihyZWdpc3RyeSwgZW50cmllc1tpXVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gdHlwZXNUb01hcChyZWdpc3RyeSwgW1R5cGVzLCBrZXlzXSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGtleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICByZXN1bHRba2V5c1tpXV0gPSByZWdpc3RyeS5nZXRDbGFzc05hbWUoVHlwZXNbaV0pIHx8IG5ldyBUeXBlc1tpXShyZWdpc3RyeSkudG9SYXdUeXBlKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0VxKG8pIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvLmVxKTtcbn1cbiIsImltcG9ydCB7IEJUcmVlTWFwLCBCVHJlZVNldCwgQnl0ZXMsIENvZGVjU2V0LCBDb21wYWN0LCBEb05vdENvbnN0cnVjdCwgRW51bSwgSGFzaE1hcCwgSW50LCBOdWxsLCBPcHRpb24sIFJhbmdlLCBSYW5nZUluY2x1c2l2ZSwgUmVzdWx0LCBTdHJ1Y3QsIFR1cGxlLCBVOGFGaXhlZCwgVUludCwgVmVjLCBWZWNGaXhlZCwgV3JhcHBlcktlZXBPcGFxdWUsIFdyYXBwZXJPcGFxdWUgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaXNOdW1iZXIsIHN0cmluZ2lmeSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IFR5cGVEZWZJbmZvIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0VHlwZURlZiB9IGZyb20gJy4uL3V0aWwvZ2V0VHlwZURlZi5qcyc7XG5mdW5jdGlvbiBnZXRUeXBlRGVmVHlwZSh7IGxvb2t1cE5hbWUsIHR5cGUgfSkge1xuICAgIHJldHVybiBsb29rdXBOYW1lIHx8IHR5cGU7XG59XG5mdW5jdGlvbiBnZXRTdWJEZWZBcnJheSh2YWx1ZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZS5zdWIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgc3VidHlwZSBhcyBUeXBlRGVmW10gaW4gJHtzdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUuc3ViO1xufVxuZnVuY3Rpb24gZ2V0U3ViRGVmKHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZS5zdWIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZS5zdWIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgc3VidHlwZSBhcyBUeXBlRGVmIGluICR7c3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLnN1Yjtcbn1cbmZ1bmN0aW9uIGdldFN1YlR5cGUodmFsdWUpIHtcbiAgICByZXR1cm4gZ2V0VHlwZURlZlR5cGUoZ2V0U3ViRGVmKHZhbHVlKSk7XG59XG5mdW5jdGlvbiBnZXRUeXBlQ2xhc3NNYXAodmFsdWUpIHtcbiAgICBjb25zdCBzdWJzID0gZ2V0U3ViRGVmQXJyYXkodmFsdWUpO1xuICAgIGNvbnN0IG1hcCA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHN1YnMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBzdWIgPSBzdWJzW2ldO1xuICAgICAgICBpZiAoIXN1Yi5uYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG5hbWUgZm91bmQgaW4gZGVmaW5pdGlvbiAke3N0cmluZ2lmeShzdWIpfWApO1xuICAgICAgICB9XG4gICAgICAgIG1hcFtzdWIubmFtZV0gPSBnZXRUeXBlRGVmVHlwZShzdWIpO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gZ2V0VHlwZUNsYXNzQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gZ2V0U3ViRGVmQXJyYXkodmFsdWUpLm1hcChnZXRUeXBlRGVmVHlwZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnQoQ2xhenosIHsgZGlzcGxheU5hbWUsIGxlbmd0aCB9KSB7XG4gICAgaWYgKCFpc051bWJlcihsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYml0TGVuZ3RoIGluZm9ybWF0aW9uIGZvciAke2Rpc3BsYXlOYW1lIHx8IENsYXp6LmNvbnN0cnVjdG9yLm5hbWV9PGJpdExlbmd0aD5gKTtcbiAgICB9XG4gICAgcmV0dXJuIENsYXp6LndpdGgobGVuZ3RoLCBkaXNwbGF5TmFtZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVIYXNoTWFwKENsYXp6LCB2YWx1ZSkge1xuICAgIGNvbnN0IFtrZXlUeXBlLCB2YWx1ZVR5cGVdID0gZ2V0VHlwZUNsYXNzQXJyYXkodmFsdWUpO1xuICAgIHJldHVybiBDbGF6ei53aXRoKGtleVR5cGUsIHZhbHVlVHlwZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVXaXRoU3ViKENsYXp6LCB2YWx1ZSkge1xuICAgIHJldHVybiBDbGF6ei53aXRoKGdldFN1YlR5cGUodmFsdWUpKTtcbn1cbmNvbnN0IGluZm9NYXBwaW5nID0ge1xuICAgIFtUeXBlRGVmSW5mby5CVHJlZU1hcF06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBjcmVhdGVIYXNoTWFwKEJUcmVlTWFwLCB2YWx1ZSksXG4gICAgW1R5cGVEZWZJbmZvLkJUcmVlU2V0XTogKF9yZWdpc3RyeSwgdmFsdWUpID0+IGNyZWF0ZVdpdGhTdWIoQlRyZWVTZXQsIHZhbHVlKSxcbiAgICBbVHlwZURlZkluZm8uQ29tcGFjdF06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBjcmVhdGVXaXRoU3ViKENvbXBhY3QsIHZhbHVlKSxcbiAgICBbVHlwZURlZkluZm8uRG9Ob3RDb25zdHJ1Y3RdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gRG9Ob3RDb25zdHJ1Y3Qud2l0aCh2YWx1ZS5kaXNwbGF5TmFtZSB8fCB2YWx1ZS50eXBlKSxcbiAgICBbVHlwZURlZkluZm8uRW51bV06IChfcmVnaXN0cnksIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSBnZXRTdWJEZWZBcnJheSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBFbnVtLndpdGgoc3Vicy5ldmVyeSgoeyB0eXBlIH0pID0+IHR5cGUgPT09ICdOdWxsJylcbiAgICAgICAgICAgID8gc3Vicy5yZWR1Y2UoKG91dCwgeyBpbmRleCwgbmFtZSB9LCBjb3VudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5hbWUgZm91bmQgaW4gc3ViIGRlZmluaXRpb24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0W25hbWVdID0gaW5kZXggfHwgY291bnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICAgICAgOiBnZXRUeXBlQ2xhc3NNYXAodmFsdWUpKTtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5IYXNoTWFwXTogKF9yZWdpc3RyeSwgdmFsdWUpID0+IGNyZWF0ZUhhc2hNYXAoSGFzaE1hcCwgdmFsdWUpLFxuICAgIFtUeXBlRGVmSW5mby5JbnRdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gY3JlYXRlSW50KEludCwgdmFsdWUpLFxuICAgIC8vIFdlIGhhdmUgY2lyY3VsYXIgZGVwcyBiZXR3ZWVuIExpbmthZ2UgJiBTdHJ1Y3RcbiAgICBbVHlwZURlZkluZm8uTGlua2FnZV06IChfcmVnaXN0cnksIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBgT3B0aW9uPCR7Z2V0U3ViVHlwZSh2YWx1ZSl9PmA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb3J0LWtleXNcbiAgICAgICAgY29uc3QgQ2xhenogPSBTdHJ1Y3Qud2l0aCh7IHByZXZpb3VzOiB0eXBlLCBuZXh0OiB0eXBlIH0pO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIENsYXp6LnByb3RvdHlwZS50b1Jhd1R5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgIHJldHVybiBgTGlua2FnZTwke3RoaXMubmV4dC50b1Jhd1R5cGUodHJ1ZSl9PmA7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBDbGF6ejtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5OdWxsXTogKF9yZWdpc3RyeSwgX3ZhbHVlKSA9PiBOdWxsLFxuICAgIFtUeXBlRGVmSW5mby5PcHRpb25dOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlLnN1YiB8fCBBcnJheS5pc0FycmF5KHZhbHVlLnN1YikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdHlwZSBpbmZvcm1hdGlvbiBmb3IgT3B0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTk9URSBUaGlzIGlzIG9wdC1pbiAodW5oYW5kbGVkKSwgbm90IGJ5IGRlZmF1bHRcbiAgICAgICAgLy8gaWYgKHZhbHVlLnN1Yi50eXBlID09PSAnYm9vbCcpIHtcbiAgICAgICAgLy8gICByZXR1cm4gT3B0aW9uQm9vbDtcbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gY3JlYXRlV2l0aFN1YihPcHRpb24sIHZhbHVlKTtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5QbGFpbl06IChyZWdpc3RyeSwgdmFsdWUpID0+IHJlZ2lzdHJ5LmdldE9yVW5rbm93bih2YWx1ZS50eXBlKSxcbiAgICBbVHlwZURlZkluZm8uUmFuZ2VdOiAoX3JlZ2lzdHJ5LCB2YWx1ZSkgPT4gY3JlYXRlV2l0aFN1YihSYW5nZSwgdmFsdWUpLFxuICAgIFtUeXBlRGVmSW5mby5SYW5nZUluY2x1c2l2ZV06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBjcmVhdGVXaXRoU3ViKFJhbmdlSW5jbHVzaXZlLCB2YWx1ZSksXG4gICAgW1R5cGVEZWZJbmZvLlJlc3VsdF06IChfcmVnaXN0cnksIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IFtPaywgRXJyXSA9IGdldFR5cGVDbGFzc0FycmF5KHZhbHVlKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICByZXR1cm4gUmVzdWx0LndpdGgoeyBFcnIsIE9rIH0pO1xuICAgIH0sXG4gICAgW1R5cGVEZWZJbmZvLlNldF06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBDb2RlY1NldC53aXRoKGdldFN1YkRlZkFycmF5KHZhbHVlKS5yZWR1Y2UoKHJlc3VsdCwgeyBpbmRleCwgbmFtZSB9KSA9PiB7XG4gICAgICAgIGlmICghbmFtZSB8fCAhaXNOdW1iZXIoaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5hbWUgZm91bmQgaW4gc3ViIGRlZmluaXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbbmFtZV0gPSBpbmRleDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSksIHZhbHVlLmxlbmd0aCksXG4gICAgW1R5cGVEZWZJbmZvLlNpXTogKHJlZ2lzdHJ5LCB2YWx1ZSkgPT4gZ2V0VHlwZUNsYXNzKHJlZ2lzdHJ5LCByZWdpc3RyeS5sb29rdXAuZ2V0VHlwZURlZih2YWx1ZS50eXBlKSksXG4gICAgW1R5cGVEZWZJbmZvLlN0cnVjdF06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBTdHJ1Y3Qud2l0aChnZXRUeXBlQ2xhc3NNYXAodmFsdWUpLCB2YWx1ZS5hbGlhcyksXG4gICAgW1R5cGVEZWZJbmZvLlR1cGxlXTogKF9yZWdpc3RyeSwgdmFsdWUpID0+IFR1cGxlLndpdGgoZ2V0VHlwZUNsYXNzQXJyYXkodmFsdWUpKSxcbiAgICBbVHlwZURlZkluZm8uVUludF06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBjcmVhdGVJbnQoVUludCwgdmFsdWUpLFxuICAgIFtUeXBlRGVmSW5mby5WZWNdOiAoX3JlZ2lzdHJ5LCB7IHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghc3ViIHx8IEFycmF5LmlzQXJyYXkoc3ViKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0eXBlIGluZm9ybWF0aW9uIGZvciB2ZWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHN1Yi50eXBlID09PSAndTgnXG4gICAgICAgICAgICA/IEJ5dGVzXG4gICAgICAgICAgICA6IFZlYy53aXRoKGdldFR5cGVEZWZUeXBlKHN1YikpKTtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5WZWNGaXhlZF06IChfcmVnaXN0cnksIHsgZGlzcGxheU5hbWUsIGxlbmd0aCwgc3ViIH0pID0+IHtcbiAgICAgICAgaWYgKCFpc051bWJlcihsZW5ndGgpIHx8ICFzdWIgfHwgQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGxlbmd0aCAmIHR5cGUgaW5mb3JtYXRpb24gZm9yIGZpeGVkIHZlY3RvcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc3ViLnR5cGUgPT09ICd1OCdcbiAgICAgICAgICAgID8gVThhRml4ZWQud2l0aCgobGVuZ3RoICogOCksIGRpc3BsYXlOYW1lKVxuICAgICAgICAgICAgOiBWZWNGaXhlZC53aXRoKGdldFR5cGVEZWZUeXBlKHN1YiksIGxlbmd0aCkpO1xuICAgIH0sXG4gICAgW1R5cGVEZWZJbmZvLldyYXBwZXJLZWVwT3BhcXVlXTogKF9yZWdpc3RyeSwgdmFsdWUpID0+IGNyZWF0ZVdpdGhTdWIoV3JhcHBlcktlZXBPcGFxdWUsIHZhbHVlKSxcbiAgICBbVHlwZURlZkluZm8uV3JhcHBlck9wYXF1ZV06IChfcmVnaXN0cnksIHZhbHVlKSA9PiBjcmVhdGVXaXRoU3ViKFdyYXBwZXJPcGFxdWUsIHZhbHVlKVxufTtcbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RUeXBlQ2xhc3MocmVnaXN0cnksIHR5cGVEZWYpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBUeXBlID0gaW5mb01hcHBpbmdbdHlwZURlZi5pbmZvXShyZWdpc3RyeSwgdHlwZURlZik7XG4gICAgICAgIGlmICghVHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjbGFzcyBjcmVhdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgY2xvYmJlciBhbnkgZXhpc3RpbmdcbiAgICAgICAgaWYgKCFUeXBlLl9fZmFsbGJhY2tUeXBlICYmIHR5cGVEZWYuZmFsbGJhY2tUeXBlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIC4uLnRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2Ugd2UgYWN0dWFsbHkgYXNzaWduIHRoaXMuLi5cbiAgICAgICAgICAgIFR5cGUuX19mYWxsYmFja1R5cGUgPSB0eXBlRGVmLmZhbGxiYWNrVHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNvbnN0cnVjdCBjbGFzcyBmcm9tICR7c3RyaW5naWZ5KHR5cGVEZWYpfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ2xhc3MocmVnaXN0cnksIHR5cGVEZWYpIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuZ2V0VW5zYWZlKHR5cGVEZWYudHlwZSwgZmFsc2UsIHR5cGVEZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsYXNzVW5zYWZlKHJlZ2lzdHJ5LCB0eXBlKSB7XG4gICAgcmV0dXJuIChcbiAgICAvLyBqdXN0IHJldHJpZXZlIHZpYSBuYW1lLCBubyBjcmVhdGlvbiB2aWEgdHlwZURlZlxuICAgIHJlZ2lzdHJ5LmdldFVuc2FmZSh0eXBlKSB8fFxuICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIGFuIGV4aXN0aW5nIHR5cGUsIGNyZWF0ZSB0aGUgY2xhc3MgdmlhIHR5cGVEZWZcbiAgICAgICAgZ2V0VHlwZUNsYXNzKHJlZ2lzdHJ5LCByZWdpc3RyeS5pc0xvb2t1cFR5cGUodHlwZSlcbiAgICAgICAgICAgID8gcmVnaXN0cnkubG9va3VwLmdldFR5cGVEZWYodHlwZSlcbiAgICAgICAgICAgIDogZ2V0VHlwZURlZih0eXBlKSkpO1xufVxuIiwiaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzSGV4LCBpc1U4YSwgdThhRXEsIHU4YVRvSGV4LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGNyZWF0ZUNsYXNzVW5zYWZlIH0gZnJvbSAnLi9jbGFzcy5qcyc7XG5mdW5jdGlvbiBjaGVja0luc3RhbmNlKGNyZWF0ZWQsIG1hdGNoZXIpIHtcbiAgICBjb25zdCB1OGEgPSBjcmVhdGVkLnRvVThhKCk7XG4gICAgY29uc3QgcmF3VHlwZSA9IGNyZWF0ZWQudG9SYXdUeXBlKCk7XG4gICAgY29uc3QgaXNPayA9IChcbiAgICAvLyBmdWxsIG1hdGNoLCBhbGwgb2tcbiAgICB1OGFFcSh1OGEsIG1hdGNoZXIpIHx8XG4gICAgICAgIChcbiAgICAgICAgLy8gb24gYSBsZW5ndGgtcHJlZml4ZWQgdHlwZSwganVzdCBjaGVjayB0aGUgYWN0dWFsIGxlbmd0aFxuICAgICAgICBbJ0J5dGVzJywgJ1RleHQnLCAnVHlwZSddLmluY2x1ZGVzKHJhd1R5cGUpICYmXG4gICAgICAgICAgICBtYXRjaGVyLmxlbmd0aCA9PT0gY3JlYXRlZC5sZW5ndGgpIHx8XG4gICAgICAgIChcbiAgICAgICAgLy8gd2hlbiB0aGUgY3JlYXRlZCBpcyBlbXB0eSBhbmQgbWF0Y2hlciBpcyBhbHNvIGVtcHR5LCBsZXQgaXQgc2xpZGUuLi5cbiAgICAgICAgY3JlYXRlZC5pc0VtcHR5ICYmXG4gICAgICAgICAgICBtYXRjaGVyLmV2ZXJ5KCh2KSA9PiAhdikpKTtcbiAgICBpZiAoIWlzT2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Jhd1R5cGV9OjogRGVjb2RlZCBpbnB1dCBkb2Vzbid0IG1hdGNoIGlucHV0LCByZWNlaXZlZCAke3U4YVRvSGV4KG1hdGNoZXIsIDUxMil9ICgke21hdGNoZXIubGVuZ3RofSBieXRlcyksIGNyZWF0ZWQgJHt1OGFUb0hleCh1OGEsIDUxMil9ICgke3U4YS5sZW5ndGh9IGJ5dGVzKWApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrUGVkYW50aWMoY3JlYXRlZCwgW3ZhbHVlXSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgY2hlY2tJbnN0YW5jZShjcmVhdGVkLCB2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzSGV4KHZhbHVlKSkge1xuICAgICAgICBjaGVja0luc3RhbmNlKGNyZWF0ZWQsIHU4YVRvVThhKHZhbHVlKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdFR5cGUocmVnaXN0cnksIFR5cGUsIHBhcmFtcyA9IFtdLCB7IGJsb2NrSGFzaCwgaXNGYWxsYmFjaywgaXNPcHRpb25hbCwgaXNQZWRhbnRpYyB9ID0ge30pIHtcbiAgICBjb25zdCBjcmVhdGVkID0gbmV3IChpc09wdGlvbmFsXG4gICAgICAgID8gT3B0aW9uLndpdGgoVHlwZSlcbiAgICAgICAgOiBUeXBlKShyZWdpc3RyeSwgLi4ucGFyYW1zKTtcbiAgICBpc1BlZGFudGljICYmIGNoZWNrUGVkYW50aWMoY3JlYXRlZCwgcGFyYW1zKTtcbiAgICBpZiAoYmxvY2tIYXNoKSB7XG4gICAgICAgIGNyZWF0ZWQuY3JlYXRlZEF0SGFzaCA9IGNyZWF0ZVR5cGVVbnNhZmUocmVnaXN0cnksICdCbG9ja0hhc2gnLCBbYmxvY2tIYXNoXSk7XG4gICAgfVxuICAgIGlmIChpc0ZhbGxiYWNrKSB7XG4gICAgICAgIGNyZWF0ZWQuaXNTdG9yYWdlRmFsbGJhY2sgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUeXBlVW5zYWZlKHJlZ2lzdHJ5LCB0eXBlLCBwYXJhbXMgPSBbXSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IENsYXp6ID0gbnVsbDtcbiAgICBsZXQgZmlyc3RFcnJvciA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgICAgQ2xhenogPSBjcmVhdGVDbGFzc1Vuc2FmZShyZWdpc3RyeSwgdHlwZSk7XG4gICAgICAgIHJldHVybiBpbml0VHlwZShyZWdpc3RyeSwgQ2xhenosIHBhcmFtcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBmaXJzdEVycm9yID0gbmV3IEVycm9yKGBjcmVhdGVUeXBlKCR7dHlwZX0pOjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoQ2xheno/Ll9fZmFsbGJhY2tUeXBlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBDbGF6eiA9IGNyZWF0ZUNsYXNzVW5zYWZlKHJlZ2lzdHJ5LCBDbGF6ei5fX2ZhbGxiYWNrVHlwZSk7XG4gICAgICAgICAgICByZXR1cm4gaW5pdFR5cGUocmVnaXN0cnksIENsYXp6LCBwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIHN3YWxsb3csIHdlIHdpbGwgdGhyb3cgdGhlIGZpcnN0IGVycm9yIGFnYWluXG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgZmlyc3RFcnJvcjtcbn1cbiIsImV4cG9ydCB2YXIgVHlwZURlZkluZm87XG4oZnVuY3Rpb24gKFR5cGVEZWZJbmZvKSB7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJCVHJlZU1hcFwiXSA9IDBdID0gXCJCVHJlZU1hcFwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiQlRyZWVTZXRcIl0gPSAxXSA9IFwiQlRyZWVTZXRcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIkNvbXBhY3RcIl0gPSAyXSA9IFwiQ29tcGFjdFwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiRG9Ob3RDb25zdHJ1Y3RcIl0gPSAzXSA9IFwiRG9Ob3RDb25zdHJ1Y3RcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIkVudW1cIl0gPSA0XSA9IFwiRW51bVwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiSGFzaE1hcFwiXSA9IDVdID0gXCJIYXNoTWFwXCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJJbnRcIl0gPSA2XSA9IFwiSW50XCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJMaW5rYWdlXCJdID0gN10gPSBcIkxpbmthZ2VcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIk51bGxcIl0gPSA4XSA9IFwiTnVsbFwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiT3B0aW9uXCJdID0gOV0gPSBcIk9wdGlvblwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiUGxhaW5cIl0gPSAxMF0gPSBcIlBsYWluXCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJSYW5nZVwiXSA9IDExXSA9IFwiUmFuZ2VcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlJhbmdlSW5jbHVzaXZlXCJdID0gMTJdID0gXCJSYW5nZUluY2x1c2l2ZVwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiUmVzdWx0XCJdID0gMTNdID0gXCJSZXN1bHRcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlNldFwiXSA9IDE0XSA9IFwiU2V0XCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJTaVwiXSA9IDE1XSA9IFwiU2lcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlN0cnVjdFwiXSA9IDE2XSA9IFwiU3RydWN0XCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJUdXBsZVwiXSA9IDE3XSA9IFwiVHVwbGVcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlVJbnRcIl0gPSAxOF0gPSBcIlVJbnRcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIlZlY1wiXSA9IDE5XSA9IFwiVmVjXCI7XG4gICAgVHlwZURlZkluZm9bVHlwZURlZkluZm9bXCJWZWNGaXhlZFwiXSA9IDIwXSA9IFwiVmVjRml4ZWRcIjtcbiAgICBUeXBlRGVmSW5mb1tUeXBlRGVmSW5mb1tcIldyYXBwZXJLZWVwT3BhcXVlXCJdID0gMjFdID0gXCJXcmFwcGVyS2VlcE9wYXF1ZVwiO1xuICAgIFR5cGVEZWZJbmZvW1R5cGVEZWZJbmZvW1wiV3JhcHBlck9wYXF1ZVwiXSA9IDIyXSA9IFwiV3JhcHBlck9wYXF1ZVwiO1xufSkoVHlwZURlZkluZm8gfHwgKFR5cGVEZWZJbmZvID0ge30pKTtcbiIsImltcG9ydCB7IGlzTnVtYmVyLCBpc1VuZGVmaW5lZCwgb2JqZWN0U3ByZWFkLCBzdHJpbmdpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBUeXBlRGVmSW5mbyB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmNvbnN0IHN0cmluZ0lkZW50aXR5ID0gKHZhbHVlKSA9PiB2YWx1ZS50b1N0cmluZygpO1xuY29uc3QgSU5GT19XUkFQID0gWydCVHJlZU1hcCcsICdCVHJlZVNldCcsICdDb21wYWN0JywgJ0hhc2hNYXAnLCAnT3B0aW9uJywgJ1Jlc3VsdCcsICdWZWMnXTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJhbXNOb3RhdGlvbihvdXRlciwgaW5uZXIsIHRyYW5zZm9ybSA9IHN0cmluZ0lkZW50aXR5KSB7XG4gICAgcmV0dXJuIGAke291dGVyfSR7aW5uZXJcbiAgICAgICAgPyBgPCR7KEFycmF5LmlzQXJyYXkoaW5uZXIpID8gaW5uZXIgOiBbaW5uZXJdKS5tYXAodHJhbnNmb3JtKS5qb2luKCcsICcpfT5gXG4gICAgICAgIDogJyd9YDtcbn1cbmZ1bmN0aW9uIGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsIG91dGVyKSB7XG4gICAgY29uc3QgeyBpbmZvLCBzdWIgfSA9IHR5cGVEZWY7XG4gICAgc3dpdGNoIChpbmZvKSB7XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uQlRyZWVNYXA6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uQlRyZWVTZXQ6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uQ29tcGFjdDpcbiAgICAgICAgY2FzZSBUeXBlRGVmSW5mby5IYXNoTWFwOlxuICAgICAgICBjYXNlIFR5cGVEZWZJbmZvLkxpbmthZ2U6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uT3B0aW9uOlxuICAgICAgICBjYXNlIFR5cGVEZWZJbmZvLlJhbmdlOlxuICAgICAgICBjYXNlIFR5cGVEZWZJbmZvLlJhbmdlSW5jbHVzaXZlOlxuICAgICAgICBjYXNlIFR5cGVEZWZJbmZvLlJlc3VsdDpcbiAgICAgICAgY2FzZSBUeXBlRGVmSW5mby5WZWM6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uV3JhcHBlcktlZXBPcGFxdWU6XG4gICAgICAgIGNhc2UgVHlwZURlZkluZm8uV3JhcHBlck9wYXF1ZTpcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXNOb3RhdGlvbihvdXRlciwgc3ViLCAocCkgPT4gZW5jb2RlVHlwZURlZihyZWdpc3RyeSwgcCkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBlbmNvZGUgJHtzdHJpbmdpZnkodHlwZURlZil9IHdpdGggcGFyYW1zYCk7XG59XG5mdW5jdGlvbiBlbmNvZGVTdWJUeXBlcyhyZWdpc3RyeSwgc3ViLCBhc0VudW0sIGV4dHJhKSB7XG4gICAgY29uc3QgbmFtZXMgPSBzdWIubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSk7XG4gICAgaWYgKCFuYW1lcy5ldmVyeSgobikgPT4gISFuKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN1YnR5cGVzIGRvZXMgbm90IGhhdmUgY29uc2lzdGVudCBuYW1lcywgJHtuYW1lcy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBpbm5lciA9IG9iamVjdFNwcmVhZCh7fSwgZXh0cmEpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHN1Yi5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IHN1YltpXTtcbiAgICAgICAgaWYgKCFkZWYubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBuYW1lIGZvdW5kIGluICR7c3RyaW5naWZ5KGRlZil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5uZXJbZGVmLm5hbWVdID0gZW5jb2RlVHlwZURlZihyZWdpc3RyeSwgZGVmKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ2lmeShhc0VudW1cbiAgICAgICAgPyB7IF9lbnVtOiBpbm5lciB9XG4gICAgICAgIDogaW5uZXIpO1xufVxuY29uc3QgZW5jb2RlcnMgPSB7XG4gICAgW1R5cGVEZWZJbmZvLkJUcmVlTWFwXTogKHJlZ2lzdHJ5LCB0eXBlRGVmKSA9PiBlbmNvZGVXaXRoUGFyYW1zKHJlZ2lzdHJ5LCB0eXBlRGVmLCAnQlRyZWVNYXAnKSxcbiAgICBbVHlwZURlZkluZm8uQlRyZWVTZXRdOiAocmVnaXN0cnksIHR5cGVEZWYpID0+IGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsICdCVHJlZVNldCcpLFxuICAgIFtUeXBlRGVmSW5mby5Db21wYWN0XTogKHJlZ2lzdHJ5LCB0eXBlRGVmKSA9PiBlbmNvZGVXaXRoUGFyYW1zKHJlZ2lzdHJ5LCB0eXBlRGVmLCAnQ29tcGFjdCcpLFxuICAgIFtUeXBlRGVmSW5mby5Eb05vdENvbnN0cnVjdF06IChyZWdpc3RyeSwgeyBkaXNwbGF5TmFtZSwgbG9va3VwSW5kZXgsIGxvb2t1cE5hbWUgfSkgPT4gYERvTm90Q29uc3RydWN0PCR7bG9va3VwTmFtZSB8fCBkaXNwbGF5TmFtZSB8fCAoaXNVbmRlZmluZWQobG9va3VwSW5kZXgpID8gJ1Vua25vd24nIDogcmVnaXN0cnkuY3JlYXRlTG9va3VwVHlwZShsb29rdXBJbmRleCkpfT5gLFxuICAgIFtUeXBlRGVmSW5mby5FbnVtXTogKHJlZ2lzdHJ5LCB7IHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbmNvZGUgRW51bSB0eXBlJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYy1saWtlIGVudW1zIGhhdmUgYWxsIE51bGwgZW50cmllc1xuICAgICAgICAvLyBUT0RPIFdlIG5lZWQgdG8gdGFrZSB0aGUgZGlzY2ltaW5hbnQgaW50byBhY2NvdW50IGFuZCBhdXRvLWFkZCBlbXB0eSBlbnRyaWVzXG4gICAgICAgIHJldHVybiBzdWIuZXZlcnkoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAnTnVsbCcpXG4gICAgICAgICAgICA/IHN0cmluZ2lmeSh7IF9lbnVtOiBzdWIubWFwKCh7IG5hbWUgfSwgaW5kZXgpID0+IGAke25hbWUgfHwgYEVtcHR5JHtpbmRleH1gfWApIH0pXG4gICAgICAgICAgICA6IGVuY29kZVN1YlR5cGVzKHJlZ2lzdHJ5LCBzdWIsIHRydWUpO1xuICAgIH0sXG4gICAgW1R5cGVEZWZJbmZvLkhhc2hNYXBdOiAocmVnaXN0cnksIHR5cGVEZWYpID0+IGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsICdIYXNoTWFwJyksXG4gICAgW1R5cGVEZWZJbmZvLkludF06IChfcmVnaXN0cnksIHsgbGVuZ3RoID0gMzIgfSkgPT4gYEludDwke2xlbmd0aH0+YCxcbiAgICBbVHlwZURlZkluZm8uTGlua2FnZV06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ0xpbmthZ2UnKSxcbiAgICBbVHlwZURlZkluZm8uTnVsbF06IChfcmVnaXN0cnksIF90eXBlRGVmKSA9PiAnTnVsbCcsXG4gICAgW1R5cGVEZWZJbmZvLk9wdGlvbl06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ09wdGlvbicpLFxuICAgIFtUeXBlRGVmSW5mby5QbGFpbl06IChfcmVnaXN0cnksIHsgZGlzcGxheU5hbWUsIHR5cGUgfSkgPT4gZGlzcGxheU5hbWUgfHwgdHlwZSxcbiAgICBbVHlwZURlZkluZm8uUmFuZ2VdOiAocmVnaXN0cnksIHR5cGVEZWYpID0+IGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsICdSYW5nZScpLFxuICAgIFtUeXBlRGVmSW5mby5SYW5nZUluY2x1c2l2ZV06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ1JhbmdlSW5jbHVzaXZlJyksXG4gICAgW1R5cGVEZWZJbmZvLlJlc3VsdF06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ1Jlc3VsdCcpLFxuICAgIFtUeXBlRGVmSW5mby5TZXRdOiAoX3JlZ2lzdHJ5LCB7IGxlbmd0aCA9IDgsIHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbmNvZGUgU2V0IHR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIF9zZXQ6IHN1Yi5yZWR1Y2UoKGFsbCwgeyBpbmRleCwgbmFtZSB9LCBjb3VudCkgPT4gb2JqZWN0U3ByZWFkKGFsbCwgeyBbYCR7bmFtZSB8fCBgVW5rbm93biR7aW5kZXggfHwgY291bnR9YH1gXTogaW5kZXggfHwgY291bnQgfSksIHsgX2JpdExlbmd0aDogbGVuZ3RoIHx8IDggfSlcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBbVHlwZURlZkluZm8uU2ldOiAoX3JlZ2lzdHJ5LCB7IGxvb2t1cE5hbWUsIHR5cGUgfSkgPT4gbG9va3VwTmFtZSB8fCB0eXBlLFxuICAgIFtUeXBlRGVmSW5mby5TdHJ1Y3RdOiAocmVnaXN0cnksIHsgYWxpYXMsIHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbmNvZGUgU3RydWN0IHR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2RlU3ViVHlwZXMocmVnaXN0cnksIHN1YiwgZmFsc2UsIGFsaWFzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBfYWxpYXM6IFsuLi5hbGlhcy5lbnRyaWVzKCldLnJlZHVjZSgoYWxsLCBbaywgdl0pID0+IG9iamVjdFNwcmVhZChhbGwsIHsgW2tdOiB2IH0pLCB7fSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pO1xuICAgIH0sXG4gICAgW1R5cGVEZWZJbmZvLlR1cGxlXTogKHJlZ2lzdHJ5LCB7IHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzdWIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBlbmNvZGUgVHVwbGUgdHlwZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgKCR7c3ViLm1hcCgodHlwZSkgPT4gZW5jb2RlVHlwZURlZihyZWdpc3RyeSwgdHlwZSkpLmpvaW4oJywnKX0pYDtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5VSW50XTogKF9yZWdpc3RyeSwgeyBsZW5ndGggPSAzMiB9KSA9PiBgVUludDwke2xlbmd0aH0+YCxcbiAgICBbVHlwZURlZkluZm8uVmVjXTogKHJlZ2lzdHJ5LCB0eXBlRGVmKSA9PiBlbmNvZGVXaXRoUGFyYW1zKHJlZ2lzdHJ5LCB0eXBlRGVmLCAnVmVjJyksXG4gICAgW1R5cGVEZWZJbmZvLlZlY0ZpeGVkXTogKF9yZWdpc3RyeSwgeyBsZW5ndGgsIHN1YiB9KSA9PiB7XG4gICAgICAgIGlmICghaXNOdW1iZXIobGVuZ3RoKSB8fCAhc3ViIHx8IEFycmF5LmlzQXJyYXkoc3ViKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZW5jb2RlIFZlY0ZpeGVkIHR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFske3N1Yi50eXBlfTske2xlbmd0aH1dYDtcbiAgICB9LFxuICAgIFtUeXBlRGVmSW5mby5XcmFwcGVyS2VlcE9wYXF1ZV06IChyZWdpc3RyeSwgdHlwZURlZikgPT4gZW5jb2RlV2l0aFBhcmFtcyhyZWdpc3RyeSwgdHlwZURlZiwgJ1dyYXBwZXJLZWVwT3BhcXVlJyksXG4gICAgW1R5cGVEZWZJbmZvLldyYXBwZXJPcGFxdWVdOiAocmVnaXN0cnksIHR5cGVEZWYpID0+IGVuY29kZVdpdGhQYXJhbXMocmVnaXN0cnksIHR5cGVEZWYsICdXcmFwcGVyT3BhcXVlJylcbn07XG5mdW5jdGlvbiBlbmNvZGVUeXBlKHJlZ2lzdHJ5LCB0eXBlRGVmLCB3aXRoTG9va3VwID0gdHJ1ZSkge1xuICAgIHJldHVybiB3aXRoTG9va3VwICYmIHR5cGVEZWYubG9va3VwTmFtZVxuICAgICAgICA/IHR5cGVEZWYubG9va3VwTmFtZVxuICAgICAgICA6IGVuY29kZXJzW3R5cGVEZWYuaW5mb10ocmVnaXN0cnksIHR5cGVEZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVR5cGVEZWYocmVnaXN0cnksIHR5cGVEZWYpIHtcbiAgICAvLyBJbiB0aGUgY2FzZSBvZiBjb250cmFjdHMgd2UgZG8gaGF2ZSB0aGUgdW5mb3J0dW5hdGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBkaXNwbGF5TmFtZSB3b3VsZFxuICAgIC8vIHJlZmVyIHRvIFwiT3B0aW9uXCIgd2hlbiBpdCBpcyBhbiBvcHRpb24uIEZvciB0aGVzZSwgc3RyaW5nIGl0IG91dCwgb25seSB1c2luZyB3aGVuIGFjdHVhbGx5XG4gICAgLy8gbm90IGEgdG9wLWxldmVsIGVsZW1lbnQgdG8gYmUgdXNlZFxuICAgIHJldHVybiAodHlwZURlZi5kaXNwbGF5TmFtZSAmJiAhSU5GT19XUkFQLnNvbWUoKGkpID0+IHR5cGVEZWYuZGlzcGxheU5hbWUgPT09IGkpKVxuICAgICAgICA/IHR5cGVEZWYuZGlzcGxheU5hbWVcbiAgICAgICAgOiBlbmNvZGVUeXBlKHJlZ2lzdHJ5LCB0eXBlRGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVHlwZVN0cmluZyhyZWdpc3RyeSwgdHlwZURlZikge1xuICAgIHJldHVybiBvYmplY3RTcHJlYWQoe30sIHR5cGVEZWYsIHtcbiAgICAgICAgdHlwZTogZW5jb2RlVHlwZShyZWdpc3RyeSwgdHlwZURlZiwgZmFsc2UpXG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBzYW5pdGl6ZSB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBpc051bWJlciwgaXNTdHJpbmcsIG9iamVjdFNwcmVhZCwgc3RyaW5naWZ5IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgVHlwZURlZkluZm8gfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyB0eXBlU3BsaXQgfSBmcm9tICcuL3R5cGVTcGxpdC5qcyc7XG5jb25zdCBLTk9XTl9JTlRFUk5BTFMgPSBbJ19hbGlhcycsICdfZmFsbGJhY2snXTtcbmZ1bmN0aW9uIGdldFR5cGVTdHJpbmcodHlwZU9yT2JqKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHR5cGVPck9iailcbiAgICAgICAgPyB0eXBlT3JPYmoudG9TdHJpbmcoKVxuICAgICAgICA6IHN0cmluZ2lmeSh0eXBlT3JPYmopO1xufVxuZnVuY3Rpb24gaXNSdXN0RW51bShkZXRhaWxzKSB7XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhkZXRhaWxzKTtcbiAgICBpZiAodmFsdWVzLnNvbWUoKHYpID0+IGlzTnVtYmVyKHYpKSkge1xuICAgICAgICBpZiAoIXZhbHVlcy5ldmVyeSgodikgPT4gaXNOdW1iZXIodikgJiYgdiA+PSAwICYmIHYgPD0gMjU1KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG51bWJlci1pbmRleGVkIGVudW0gZGVmaW5pdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBfZGVjb2RlRW51bSh2YWx1ZSwgZGV0YWlscywgY291bnQsIGZhbGxiYWNrVHlwZSkge1xuICAgIHZhbHVlLmluZm8gPSBUeXBlRGVmSW5mby5FbnVtO1xuICAgIHZhbHVlLmZhbGxiYWNrVHlwZSA9IGZhbGxiYWNrVHlwZTtcbiAgICAvLyBub3QgYXMgcHJldHR5LCBidXQgcmVtYWluIGNvbXBhdGlibGUgd2l0aCBvbzcgZm9yIGJvdGggc3RydWN0IGFuZCBBcnJheSB0eXBlc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRldGFpbHMpKSB7XG4gICAgICAgIHZhbHVlLnN1YiA9IGRldGFpbHMubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSdXN0RW51bShkZXRhaWxzKSkge1xuICAgICAgICB2YWx1ZS5zdWIgPSBPYmplY3QuZW50cmllcyhkZXRhaWxzKS5tYXAoKFtuYW1lLCB0eXBlT3JPYmpdLCBpbmRleCkgPT4gb2JqZWN0U3ByZWFkKHt9LCBnZXRUeXBlRGVmKGdldFR5cGVTdHJpbmcodHlwZU9yT2JqIHx8ICdOdWxsJyksIHsgbmFtZSB9LCBjb3VudCksIHsgaW5kZXggfSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFsdWUuc3ViID0gT2JqZWN0LmVudHJpZXMoZGV0YWlscykubWFwKChbbmFtZSwgaW5kZXhdKSA9PiAoe1xuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5QbGFpbixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0eXBlOiAnTnVsbCdcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfZGVjb2RlU2V0KHZhbHVlLCBkZXRhaWxzLCBmYWxsYmFja1R5cGUpIHtcbiAgICB2YWx1ZS5pbmZvID0gVHlwZURlZkluZm8uU2V0O1xuICAgIHZhbHVlLmZhbGxiYWNrVHlwZSA9IGZhbGxiYWNrVHlwZTtcbiAgICB2YWx1ZS5sZW5ndGggPSBkZXRhaWxzLl9iaXRMZW5ndGg7XG4gICAgdmFsdWUuc3ViID0gT2JqZWN0XG4gICAgICAgIC5lbnRyaWVzKGRldGFpbHMpXG4gICAgICAgIC5maWx0ZXIoKFtuYW1lXSkgPT4gIW5hbWUuc3RhcnRzV2l0aCgnXycpKVxuICAgICAgICAubWFwKChbbmFtZSwgaW5kZXhdKSA9PiAoe1xuICAgICAgICBpbmRleCxcbiAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH0pKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfZGVjb2RlU3RydWN0KHZhbHVlLCB0eXBlLCBfLCBjb3VudCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodHlwZSk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCk7XG4gICAgaWYgKHBhcnNlZC5fZW51bSkge1xuICAgICAgICByZXR1cm4gX2RlY29kZUVudW0odmFsdWUsIHBhcnNlZC5fZW51bSwgY291bnQsIHBhcnNlZC5fZmFsbGJhY2spO1xuICAgIH1cbiAgICBlbHNlIGlmIChwYXJzZWQuX3NldCkge1xuICAgICAgICByZXR1cm4gX2RlY29kZVNldCh2YWx1ZSwgcGFyc2VkLl9zZXQsIHBhcnNlZC5fZmFsbGJhY2spO1xuICAgIH1cbiAgICB2YWx1ZS5hbGlhcyA9IHBhcnNlZC5fYWxpYXNcbiAgICAgICAgPyBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHBhcnNlZC5fYWxpYXMpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB2YWx1ZS5mYWxsYmFja1R5cGUgPSBwYXJzZWQuX2ZhbGxiYWNrO1xuICAgIHZhbHVlLnN1YiA9IGtleXNcbiAgICAgICAgLmZpbHRlcigobmFtZSkgPT4gIUtOT1dOX0lOVEVSTkFMUy5pbmNsdWRlcyhuYW1lKSlcbiAgICAgICAgLm1hcCgobmFtZSkgPT4gZ2V0VHlwZURlZihnZXRUeXBlU3RyaW5nKHBhcnNlZFtuYW1lXSksIHsgbmFtZSB9LCBjb3VudCkpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIF9kZWNvZGVGaXhlZFZlYyh2YWx1ZSwgdHlwZSwgXywgY291bnQpIHtcbiAgICBjb25zdCBtYXggPSB0eXBlLmxlbmd0aCAtIDE7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgbGV0IGlubmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgKGkgPCBtYXgpICYmIChpbmRleCA9PT0gLTEpOyBpKyspIHtcbiAgICAgICAgc3dpdGNoICh0eXBlW2ldKSB7XG4gICAgICAgICAgICBjYXNlICc7Jzoge1xuICAgICAgICAgICAgICAgIGlmIChpbm5lciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgIGlubmVyKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgY2FzZSAnPic6XG4gICAgICAgICAgICAgICAgaW5uZXItLTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfTogVW5hYmxlIHRvIGV4dHJhY3QgbG9jYXRpb24gb2YgJzsnYCk7XG4gICAgfVxuICAgIGNvbnN0IHZlY1R5cGUgPSB0eXBlLnN1YnN0cmluZygxLCBpbmRleCk7XG4gICAgY29uc3QgW3N0ckxlbmd0aCwgZGlzcGxheU5hbWVdID0gdHlwZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBtYXgpLnNwbGl0KCc7Jyk7XG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoc3RyTGVuZ3RoLnRyaW0oKSwgMTApO1xuICAgIGlmIChsZW5ndGggPiAyMDQ4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfTogT25seSBzdXBwb3J0IGZvciBbVHlwZTsgPGxlbmd0aD5dLCB3aGVyZSBsZW5ndGggPD0gMjA0OGApO1xuICAgIH1cbiAgICB2YWx1ZS5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgIHZhbHVlLmxlbmd0aCA9IGxlbmd0aDtcbiAgICB2YWx1ZS5zdWIgPSBnZXRUeXBlRGVmKHZlY1R5cGUsIHt9LCBjb3VudCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX2RlY29kZVR1cGxlKHZhbHVlLCBfLCBzdWJUeXBlLCBjb3VudCkge1xuICAgIHZhbHVlLnN1YiA9IHN1YlR5cGUubGVuZ3RoID09PSAwXG4gICAgICAgID8gW11cbiAgICAgICAgOiB0eXBlU3BsaXQoc3ViVHlwZSkubWFwKChpbm5lcikgPT4gZ2V0VHlwZURlZihpbm5lciwge30sIGNvdW50KSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX2RlY29kZUFueUludCh2YWx1ZSwgdHlwZSwgXywgY2xhenopIHtcbiAgICBjb25zdCBbc3RyTGVuZ3RoLCBkaXNwbGF5TmFtZV0gPSB0eXBlLnN1YnN0cmluZyhjbGF6ei5sZW5ndGggKyAxLCB0eXBlLmxlbmd0aCAtIDEpLnNwbGl0KCcsJyk7XG4gICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoc3RyTGVuZ3RoLnRyaW0oKSwgMTApO1xuICAgIGlmICgobGVuZ3RoID4gODE5MikgfHwgKGxlbmd0aCAlIDgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0eXBlfTogT25seSBzdXBwb3J0IGZvciAke2NsYXp6fTxiaXRMZW5ndGg+LCB3aGVyZSBsZW5ndGggPD0gODE5MiBhbmQgYSBwb3dlciBvZiA4LCBmb3VuZCAke2xlbmd0aH1gKTtcbiAgICB9XG4gICAgdmFsdWUuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICB2YWx1ZS5sZW5ndGggPSBsZW5ndGg7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX2RlY29kZUludCh2YWx1ZSwgdHlwZSwgc3ViVHlwZSkge1xuICAgIHJldHVybiBfZGVjb2RlQW55SW50KHZhbHVlLCB0eXBlLCBzdWJUeXBlLCAnSW50Jyk7XG59XG5mdW5jdGlvbiBfZGVjb2RlVUludCh2YWx1ZSwgdHlwZSwgc3ViVHlwZSkge1xuICAgIHJldHVybiBfZGVjb2RlQW55SW50KHZhbHVlLCB0eXBlLCBzdWJUeXBlLCAnVUludCcpO1xufVxuZnVuY3Rpb24gX2RlY29kZURvTm90Q29uc3RydWN0KHZhbHVlLCB0eXBlLCBfKSB7XG4gICAgY29uc3QgTkFNRV9MRU5HVEggPSAnRG9Ob3RDb25zdHJ1Y3QnLmxlbmd0aDtcbiAgICB2YWx1ZS5kaXNwbGF5TmFtZSA9IHR5cGUuc3Vic3RyaW5nKE5BTUVfTEVOR1RIICsgMSwgdHlwZS5sZW5ndGggLSAxKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBoYXNXcmFwcGVyKHR5cGUsIFtzdGFydCwgZW5kXSkge1xuICAgIHJldHVybiAodHlwZS5zdGFydHNXaXRoKHN0YXJ0KSkgJiYgKHR5cGUuc2xpY2UoLTEgKiBlbmQubGVuZ3RoKSA9PT0gZW5kKTtcbn1cbmNvbnN0IG5lc3RlZEV4dHJhY3Rpb24gPSBbXG4gICAgWydbJywgJ10nLCBUeXBlRGVmSW5mby5WZWNGaXhlZCwgX2RlY29kZUZpeGVkVmVjXSxcbiAgICBbJ3snLCAnfScsIFR5cGVEZWZJbmZvLlN0cnVjdCwgX2RlY29kZVN0cnVjdF0sXG4gICAgWycoJywgJyknLCBUeXBlRGVmSW5mby5UdXBsZSwgX2RlY29kZVR1cGxlXSxcbiAgICAvLyB0aGUgaW5uZXIgZm9yIHRoZXNlIGFyZSB0aGUgc2FtZSBhcyB0dXBsZSwgbXVsdGlwbGUgdmFsdWVzXG4gICAgWydCVHJlZU1hcDwnLCAnPicsIFR5cGVEZWZJbmZvLkJUcmVlTWFwLCBfZGVjb2RlVHVwbGVdLFxuICAgIFsnSGFzaE1hcDwnLCAnPicsIFR5cGVEZWZJbmZvLkhhc2hNYXAsIF9kZWNvZGVUdXBsZV0sXG4gICAgWydJbnQ8JywgJz4nLCBUeXBlRGVmSW5mby5JbnQsIF9kZWNvZGVJbnRdLFxuICAgIFsnUmVzdWx0PCcsICc+JywgVHlwZURlZkluZm8uUmVzdWx0LCBfZGVjb2RlVHVwbGVdLFxuICAgIFsnVUludDwnLCAnPicsIFR5cGVEZWZJbmZvLlVJbnQsIF9kZWNvZGVVSW50XSxcbiAgICBbJ0RvTm90Q29uc3RydWN0PCcsICc+JywgVHlwZURlZkluZm8uRG9Ob3RDb25zdHJ1Y3QsIF9kZWNvZGVEb05vdENvbnN0cnVjdF1cbl07XG5jb25zdCB3cmFwcGVkRXh0cmFjdGlvbiA9IFtcbiAgICBbJ0JUcmVlU2V0PCcsICc+JywgVHlwZURlZkluZm8uQlRyZWVTZXRdLFxuICAgIFsnQ29tcGFjdDwnLCAnPicsIFR5cGVEZWZJbmZvLkNvbXBhY3RdLFxuICAgIFsnTGlua2FnZTwnLCAnPicsIFR5cGVEZWZJbmZvLkxpbmthZ2VdLFxuICAgIFsnT3BhcXVlPCcsICc+JywgVHlwZURlZkluZm8uV3JhcHBlck9wYXF1ZV0sXG4gICAgWydPcHRpb248JywgJz4nLCBUeXBlRGVmSW5mby5PcHRpb25dLFxuICAgIFsnUmFuZ2U8JywgJz4nLCBUeXBlRGVmSW5mby5SYW5nZV0sXG4gICAgWydSYW5nZUluY2x1c2l2ZTwnLCAnPicsIFR5cGVEZWZJbmZvLlJhbmdlSW5jbHVzaXZlXSxcbiAgICBbJ1ZlYzwnLCAnPicsIFR5cGVEZWZJbmZvLlZlY10sXG4gICAgWydXcmFwcGVyS2VlcE9wYXF1ZTwnLCAnPicsIFR5cGVEZWZJbmZvLldyYXBwZXJLZWVwT3BhcXVlXSxcbiAgICBbJ1dyYXBwZXJPcGFxdWU8JywgJz4nLCBUeXBlRGVmSW5mby5XcmFwcGVyT3BhcXVlXVxuXTtcbmZ1bmN0aW9uIGV4dHJhY3RTdWJUeXBlKHR5cGUsIFtzdGFydCwgZW5kXSkge1xuICAgIHJldHVybiB0eXBlLnN1YnN0cmluZyhzdGFydC5sZW5ndGgsIHR5cGUubGVuZ3RoIC0gZW5kLmxlbmd0aCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZURlZihfdHlwZSwgeyBkaXNwbGF5TmFtZSwgbmFtZSB9ID0ge30sIGNvdW50ID0gMCkge1xuICAgIC8vIGNyZWF0ZSB0aGUgdHlwZSB2aWEgVHlwZSwgYWxsb3dpbmcgdHlwZXMgdG8gYmUgc2FuaXRpemVkXG4gICAgY29uc3QgdHlwZSA9IHNhbml0aXplKF90eXBlKTtcbiAgICBjb25zdCB2YWx1ZSA9IHsgZGlzcGxheU5hbWUsIGluZm86IFR5cGVEZWZJbmZvLlBsYWluLCBuYW1lLCB0eXBlIH07XG4gICAgaWYgKCsrY291bnQgPiA2NCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFR5cGVEZWY6IE1heGltdW0gbmVzdGVkIGxpbWl0IHJlYWNoZWQnKTtcbiAgICB9XG4gICAgY29uc3QgbmVzdGVkID0gbmVzdGVkRXh0cmFjdGlvbi5maW5kKChuZXN0ZWQpID0+IGhhc1dyYXBwZXIodHlwZSwgbmVzdGVkKSk7XG4gICAgaWYgKG5lc3RlZCkge1xuICAgICAgICB2YWx1ZS5pbmZvID0gbmVzdGVkWzJdO1xuICAgICAgICByZXR1cm4gbmVzdGVkWzNdKHZhbHVlLCB0eXBlLCBleHRyYWN0U3ViVHlwZSh0eXBlLCBuZXN0ZWQpLCBjb3VudCk7XG4gICAgfVxuICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwcGVkRXh0cmFjdGlvbi5maW5kKCh3cmFwcGVkKSA9PiBoYXNXcmFwcGVyKHR5cGUsIHdyYXBwZWQpKTtcbiAgICBpZiAod3JhcHBlZCkge1xuICAgICAgICB2YWx1ZS5pbmZvID0gd3JhcHBlZFsyXTtcbiAgICAgICAgdmFsdWUuc3ViID0gZ2V0VHlwZURlZihleHRyYWN0U3ViVHlwZSh0eXBlLCB3cmFwcGVkKSwge30sIGNvdW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHR5cGVTcGxpdCh0eXBlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgLy8gdGhlc2UgYXJlIHRoZSBkZXB0aHMgb2YgdGhlIHZhcmlvdXMgdG9rZW5zOiA8LCBbLCB7LCAoXG4gICAgbGV0IGMgPSAwO1xuICAgIGxldCBmID0gMDtcbiAgICBsZXQgcyA9IDA7XG4gICAgbGV0IHQgPSAwO1xuICAgIC8vIGN1cnJlbnQgc3RhcnQgcG9zaXRpb25cbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHR5cGUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBzd2l0Y2ggKHR5cGVbaV0pIHtcbiAgICAgICAgICAgIC8vIGlmIHdlIGFyZSBub3QgbmVzdGVkLCBhZGQgdGhlIHR5cGVcbiAgICAgICAgICAgIGNhc2UgJywnOiB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYyB8fCBmIHx8IHMgfHwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godHlwZS5zdWJzdHJpbmcoc3RhcnQsIGkpLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWRqdXN0IGNvbXBhY3QvdmVjIChhbmQgZnJpZW5kcykgZGVwdGhcbiAgICAgICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgICAgICAgIGMrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgICAgICAgIGMtLTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGFkanVzdCBmaXhlZCB2ZWMgZGVwdGhzXG4gICAgICAgICAgICBjYXNlICdbJzpcbiAgICAgICAgICAgICAgICBmKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICAgICAgICBmLS07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvLyBhZGp1c3Qgc3RydWN0IGRlcHRoXG4gICAgICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICAgICAgICBzKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvLyBhZGp1c3QgdHVwbGUgZGVwdGhcbiAgICAgICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgICAgIHQrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgICAgIHQtLTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBlbnN1cmUgd2UgaGF2ZSBhbGwgdGhlIHRlcm1pbmF0b3JzIHRha2VuIGNhcmUgb2ZcbiAgICBpZiAoYyB8fCBmIHx8IHMgfHwgdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGVmaW5pdGlvbiAobWlzc2luZyB0ZXJtaW5hdG9ycykgZm91bmQgaW4gJHt0eXBlfWApO1xuICAgIH1cbiAgICAvLyB0aGUgZmluYWwgbGVnIG9mIHRoZSBqb3VybmV5XG4gICAgcmVzdWx0LnB1c2godHlwZS5zdWJzdHJpbmcoc3RhcnQsIHR5cGUubGVuZ3RoKS50cmltKCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgY29uc3QgWENNX01BUFBJTkdTID0gWydBc3NldEluc3RhbmNlJywgJ0Z1bmdpYmlsaXR5JywgJ0p1bmN0aW9uJywgJ0p1bmN0aW9ucycsICdNdWx0aUFzc2V0JywgJ011bHRpQXNzZXRGaWx0ZXInLCAnTXVsdGlMb2NhdGlvbicsICdSZXNwb25zZScsICdXaWxkRnVuZ2liaWxpdHknLCAnV2lsZE11bHRpQXNzZXQnLCAnWGNtJywgJ1hjbUVycm9yJywgJ1hjbU9yZGVyJ107XG5leHBvcnQgZnVuY3Rpb24gbWFwWGNtVHlwZXModmVyc2lvbikge1xuICAgIHJldHVybiBYQ01fTUFQUElOR1MucmVkdWNlKChhbGwsIGtleSkgPT4gb2JqZWN0U3ByZWFkKGFsbCwgeyBba2V5XTogYCR7a2V5fSR7dmVyc2lvbn1gIH0pLCB7fSk7XG59XG4iLCJleHBvcnQgY29uc3QgdHlwZXNDaGFpbiA9IHt9O1xuIiwiY29uc3Qgc2hhcmVkVHlwZXMgPSB7XG4gICAgLy8gQW5jaG9yXG4gICAgQW5jaG9yRGF0YToge1xuICAgICAgICBhbmNob3JlZEJsb2NrOiAndTY0JyxcbiAgICAgICAgZG9jUm9vdDogJ0gyNTYnLFxuICAgICAgICBpZDogJ0gyNTYnXG4gICAgfSxcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBQcmVDb21taXREYXRhOiB7XG4gICAgICAgIGV4cGlyYXRpb25CbG9jazogJ3U2NCcsXG4gICAgICAgIGlkZW50aXR5OiAnSDI1NicsXG4gICAgICAgIHNpZ25pbmdSb290OiAnSDI1NidcbiAgICB9LFxuICAgIC8vIEZlZXNcbiAgICBGZWU6IHtcbiAgICAgICAga2V5OiAnSGFzaCcsXG4gICAgICAgIHByaWNlOiAnQmFsYW5jZSdcbiAgICB9LFxuICAgIC8vIE11bHRpQWNjb3VudFxuICAgIE11bHRpQWNjb3VudERhdGE6IHtcbiAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICBkZXBvc2l0b3I6ICdBY2NvdW50SWQnLFxuICAgICAgICBzaWduYXRvcmllczogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgdGhyZXNob2xkOiAndTE2J1xuICAgIH0sXG4gICAgLy8gQnJpZGdlXG4gICAgQ2hhaW5JZDogJ3U4JyxcbiAgICBEZXBvc2l0Tm9uY2U6ICd1NjQnLFxuICAgIFJlc291cmNlSWQ6ICdbdTg7IDMyXScsXG4gICAgJ2NoYWluYnJpZGdlOjpDaGFpbklkJzogJ3U4JyxcbiAgICAvLyBORlRcbiAgICBSZWdpc3RyeUlkOiAnSDE2MCcsXG4gICAgVG9rZW5JZDogJ1UyNTYnLFxuICAgIEFzc2V0SWQ6IHtcbiAgICAgICAgcmVnaXN0cnlJZDogJ1JlZ2lzdHJ5SWQnLFxuICAgICAgICB0b2tlbklkOiAnVG9rZW5JZCdcbiAgICB9LFxuICAgIEFzc2V0SW5mbzoge1xuICAgICAgICBtZXRhZGF0YTogJ0J5dGVzJ1xuICAgIH0sXG4gICAgTWludEluZm86IHtcbiAgICAgICAgYW5jaG9ySWQ6ICdIYXNoJyxcbiAgICAgICAgcHJvb2ZzOiAnVmVjPFByb29mTWludD4nLFxuICAgICAgICBzdGF0aWNIYXNoZXM6ICdbSGFzaDsgM10nXG4gICAgfSxcbiAgICBQcm9vZjoge1xuICAgICAgICBsZWFmSGFzaDogJ0gyNTYnLFxuICAgICAgICBzb3J0ZWRIYXNoZXM6ICdIMjU2J1xuICAgIH0sXG4gICAgUHJvb2ZNaW50OiB7XG4gICAgICAgIGhhc2hlczogJ1ZlYzxIYXNoPicsXG4gICAgICAgIHByb3BlcnR5OiAnQnl0ZXMnLFxuICAgICAgICBzYWx0OiAnW3U4OyAzMl0nLFxuICAgICAgICB2YWx1ZTogJ0J5dGVzJ1xuICAgIH0sXG4gICAgUmVnaXN0cnlJbmZvOiB7XG4gICAgICAgIGZpZWxkczogJ1ZlYzxCeXRlcz4nLFxuICAgICAgICBvd25lckNhbkJ1cm46ICdib29sJ1xuICAgIH0sXG4gICAgUHJveHlUeXBlOiB7XG4gICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAnQW55JyxcbiAgICAgICAgICAgICdOb25UcmFuc2ZlcicsXG4gICAgICAgICAgICAnR292ZXJuYW5jZScsXG4gICAgICAgICAgICAnU3Rha2luZycsXG4gICAgICAgICAgICAnTm9uUHJveHknXG4gICAgICAgIF1cbiAgICB9XG59O1xuY29uc3Qgc3RhbmRhbG9uZVR5cGVzID0ge1xuICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgIEFjY291bnRJbmZvOiAnQWNjb3VudEluZm9XaXRoUmVmQ291bnQnLFxuICAgIEFkZHJlc3M6ICdMb29rdXBTb3VyY2UnLFxuICAgIExvb2t1cFNvdXJjZTogJ0luZGljZXNMb29rdXBTb3VyY2UnLFxuICAgIE11bHRpcGxpZXI6ICdGaXhlZDY0JyxcbiAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknXG59O1xuZXhwb3J0IGNvbnN0IHZlcnNpb25lZCA9IFtcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzI0MCwgMjQzXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnN0YW5kYWxvbmVUeXBlcyxcbiAgICAgICAgICAgIFByb3h5VHlwZToge1xuICAgICAgICAgICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAgICAgICAgICdBbnknLFxuICAgICAgICAgICAgICAgICAgICAnTm9uVHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICAgICAnR292ZXJuYW5jZScsXG4gICAgICAgICAgICAgICAgICAgICdTdGFraW5nJyxcbiAgICAgICAgICAgICAgICAgICAgJ1Zlc3RpbmcnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzI0NCwgOTk5XSxcbiAgICAgICAgdHlwZXM6IHsgLi4uc3RhbmRhbG9uZVR5cGVzIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTAwMCwgdW5kZWZpbmVkXSxcbiAgICAgICAgdHlwZXM6IHsgLi4uc2hhcmVkVHlwZXMgfVxuICAgIH1cbl07XG4iLCJpbXBvcnQgeyB2ZXJzaW9uZWQgYXMgY2VudHJpZnVnZUNoYWluIH0gZnJvbSAnLi9jZW50cmlmdWdlLWNoYWluLmpzJztcbmltcG9ydCB7IHZlcnNpb25lZCBhcyBrdXNhbWEgfSBmcm9tICcuL2t1c2FtYS5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uZWQgYXMgbm9kZSB9IGZyb20gJy4vbm9kZS5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uZWQgYXMgbm9kZVRlbXBsYXRlIH0gZnJvbSAnLi9ub2RlLXRlbXBsYXRlLmpzJztcbmltcG9ydCB7IHZlcnNpb25lZCBhcyBwb2xrYWRvdCB9IGZyb20gJy4vcG9sa2Fkb3QuanMnO1xuaW1wb3J0IHsgdmVyc2lvbmVkIGFzIHJvY29jbyB9IGZyb20gJy4vcm9jb2NvLmpzJztcbmltcG9ydCB7IHZlcnNpb25lZCBhcyBzaGVsbCB9IGZyb20gJy4vc2hlbGwuanMnO1xuaW1wb3J0IHsgdmVyc2lvbmVkIGFzIHN0YXRlbWluZSB9IGZyb20gJy4vc3RhdGVtaW5lLmpzJztcbmltcG9ydCB7IHZlcnNpb25lZCBhcyBzdGF0ZW1pbnQgfSBmcm9tICcuL3N0YXRlbWludC5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uZWQgYXMgd2VzdGVuZCB9IGZyb20gJy4vd2VzdGVuZC5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uZWQgYXMgd2VzdG1pbnQgfSBmcm9tICcuL3dlc3RtaW50LmpzJztcbmV4cG9ydCBjb25zdCB0eXBlc1NwZWMgPSB7XG4gICAgJ2NlbnRyaWZ1Z2UtY2hhaW4nOiBjZW50cmlmdWdlQ2hhaW4sXG4gICAga3VzYW1hLFxuICAgIG5vZGUsXG4gICAgJ25vZGUtdGVtcGxhdGUnOiBub2RlVGVtcGxhdGUsXG4gICAgcG9sa2Fkb3QsXG4gICAgcm9jb2NvLFxuICAgIHNoZWxsLFxuICAgIHN0YXRlbWluZSxcbiAgICBzdGF0ZW1pbnQsXG4gICAgd2VzdGVuZCxcbiAgICB3ZXN0bWludFxufTtcbiIsImltcG9ydCB7IG1hcFhjbVR5cGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5jb25zdCBzaGFyZWRUeXBlcyA9IHtcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMjQnLFxuICAgIERpc3BhdGNoRXJyb3JNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlVTgnLFxuICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMjQnLFxuICAgIEtleXM6ICdTZXNzaW9uS2V5czYnLFxuICAgIFByb3h5VHlwZToge1xuICAgICAgICBfZW51bTogWydBbnknLCAnTm9uVHJhbnNmZXInLCAnR292ZXJuYW5jZScsICdTdGFraW5nJywgJ0lkZW50aXR5SnVkZ2VtZW50JywgJ0NhbmNlbFByb3h5JywgJ0F1Y3Rpb24nXVxuICAgIH0sXG4gICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG59O1xuY29uc3QgYWRkckluZGljZXNUeXBlcyA9IHtcbiAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aFJlZkNvdW50JyxcbiAgICBBZGRyZXNzOiAnTG9va3VwU291cmNlJyxcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIERpc3BhdGNoRXJyb3JNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlVTgnLFxuICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMTYnLFxuICAgIEtleXM6ICdTZXNzaW9uS2V5czUnLFxuICAgIExvb2t1cFNvdXJjZTogJ0luZGljZXNMb29rdXBTb3VyY2UnLFxuICAgIFZhbGlkYXRvclByZWZzOiAnVmFsaWRhdG9yUHJlZnNXaXRoQ29tbWlzc2lvbidcbn07XG5jb25zdCBhZGRyQWNjb3VudElkVHlwZXMgPSB7XG4gICAgQWNjb3VudEluZm86ICdBY2NvdW50SW5mb1dpdGhSZWZDb3VudCcsXG4gICAgQWRkcmVzczogJ0FjY291bnRJZCcsXG4gICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzV2l0aDE2JyxcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBSYXdTb2x1dGlvbjogJ1Jhd1NvbHV0aW9uV2l0aDE2JyxcbiAgICBLZXlzOiAnU2Vzc2lvbktleXM1JyxcbiAgICBMb29rdXBTb3VyY2U6ICdBY2NvdW50SWQnLFxuICAgIFZhbGlkYXRvclByZWZzOiAnVmFsaWRhdG9yUHJlZnNXaXRoQ29tbWlzc2lvbidcbn07XG5leHBvcnQgY29uc3QgdmVyc2lvbmVkID0gW1xuICAgIHtcbiAgICAgICAgLy8gMTAyMCBpcyBmaXJzdCBDQzNcbiAgICAgICAgbWlubWF4OiBbMTAxOSwgMTAzMV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5hZGRySW5kaWNlc1R5cGVzLFxuICAgICAgICAgICAgQmFsYW5jZUxvY2s6ICdCYWxhbmNlTG9ja1RvMjEyJyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIERpc3BhdGNoRXJyb3I6ICdEaXNwYXRjaEVycm9yVG8xOTgnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgSWRlbnRpdHlJbmZvOiAnSWRlbnRpdHlJbmZvVG8xOTgnLFxuICAgICAgICAgICAgS2V5czogJ1Nlc3Npb25LZXlzNScsXG4gICAgICAgICAgICBNdWx0aXBsaWVyOiAnRml4ZWQ2NCcsXG4gICAgICAgICAgICBPcGVuVGlwOiAnT3BlblRpcFRvMjI1JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OScsXG4gICAgICAgICAgICBSZWZlcmVuZHVtSW5mbzogJ1JlZmVyZW5kdW1JbmZvVG8yMzknLFxuICAgICAgICAgICAgU2NoZWR1bGVkOiAnU2NoZWR1bGVkVG8yNTQnLFxuICAgICAgICAgICAgU2xhc2hpbmdTcGFuczogJ1NsYXNoaW5nU3BhbnNUbzIwNCcsXG4gICAgICAgICAgICBTdGFraW5nTGVkZ2VyOiAnU3Rha2luZ0xlZGdlclRvMjIzJyxcbiAgICAgICAgICAgIFZvdGVzOiAnVm90ZXNUbzIzMCcsXG4gICAgICAgICAgICBXZWlnaHQ6ICd1MzInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTAzMiwgMTA0Ml0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5hZGRySW5kaWNlc1R5cGVzLFxuICAgICAgICAgICAgQmFsYW5jZUxvY2s6ICdCYWxhbmNlTG9ja1RvMjEyJyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIERpc3BhdGNoSW5mbzogJ0Rpc3BhdGNoSW5mb1RvMjQ0JyxcbiAgICAgICAgICAgIEhlYXJ0YmVhdDogJ0hlYXJ0YmVhdFRvMjQ0JyxcbiAgICAgICAgICAgIEtleXM6ICdTZXNzaW9uS2V5czUnLFxuICAgICAgICAgICAgTXVsdGlwbGllcjogJ0ZpeGVkNjQnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknLFxuICAgICAgICAgICAgUmVmZXJlbmR1bUluZm86ICdSZWZlcmVuZHVtSW5mb1RvMjM5JyxcbiAgICAgICAgICAgIFNjaGVkdWxlZDogJ1NjaGVkdWxlZFRvMjU0JyxcbiAgICAgICAgICAgIFNsYXNoaW5nU3BhbnM6ICdTbGFzaGluZ1NwYW5zVG8yMDQnLFxuICAgICAgICAgICAgU3Rha2luZ0xlZGdlcjogJ1N0YWtpbmdMZWRnZXJUbzIyMycsXG4gICAgICAgICAgICBWb3RlczogJ1ZvdGVzVG8yMzAnLFxuICAgICAgICAgICAgV2VpZ2h0OiAndTMyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIGFjdHVhbCBhdCAxMDQ1ICgxMDQzLTEwNDQgaXMgZGV2KVxuICAgICAgICBtaW5tYXg6IFsxMDQzLCAxMDQ1XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLmFkZHJJbmRpY2VzVHlwZXMsXG4gICAgICAgICAgICBCYWxhbmNlTG9jazogJ0JhbGFuY2VMb2NrVG8yMTInLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgS2V5czogJ1Nlc3Npb25LZXlzNScsXG4gICAgICAgICAgICBNdWx0aXBsaWVyOiAnRml4ZWQ2NCcsXG4gICAgICAgICAgICBPcGVuVGlwOiAnT3BlblRpcFRvMjI1JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OScsXG4gICAgICAgICAgICBSZWZlcmVuZHVtSW5mbzogJ1JlZmVyZW5kdW1JbmZvVG8yMzknLFxuICAgICAgICAgICAgU2NoZWR1bGVkOiAnU2NoZWR1bGVkVG8yNTQnLFxuICAgICAgICAgICAgU3Rha2luZ0xlZGdlcjogJ1N0YWtpbmdMZWRnZXJUbzIyMycsXG4gICAgICAgICAgICBWb3RlczogJ1ZvdGVzVG8yMzAnLFxuICAgICAgICAgICAgV2VpZ2h0OiAndTMyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzEwNDYsIDEwNDldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5hZGRyQWNjb3VudElkVHlwZXMsXG4gICAgICAgICAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNUbzI1NycsXG4gICAgICAgICAgICBEaXNwYXRjaEluZm86ICdEaXNwYXRjaEluZm9UbzI0NCcsXG4gICAgICAgICAgICBIZWFydGJlYXQ6ICdIZWFydGJlYXRUbzI0NCcsXG4gICAgICAgICAgICBNdWx0aXBsaWVyOiAnRml4ZWQ2NCcsXG4gICAgICAgICAgICBPcGVuVGlwOiAnT3BlblRpcFRvMjI1JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OScsXG4gICAgICAgICAgICBSZWZlcmVuZHVtSW5mbzogJ1JlZmVyZW5kdW1JbmZvVG8yMzknLFxuICAgICAgICAgICAgU2NoZWR1bGVkOiAnU2NoZWR1bGVkVG8yNTQnLFxuICAgICAgICAgICAgU3Rha2luZ0xlZGdlcjogJ1N0YWtpbmdMZWRnZXJUbzIyMycsXG4gICAgICAgICAgICBXZWlnaHQ6ICd1MzInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTA1MCwgMTA1NF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIERpc3BhdGNoSW5mbzogJ0Rpc3BhdGNoSW5mb1RvMjQ0JyxcbiAgICAgICAgICAgIEhlYXJ0YmVhdDogJ0hlYXJ0YmVhdFRvMjQ0JyxcbiAgICAgICAgICAgIE11bHRpcGxpZXI6ICdGaXhlZDY0JyxcbiAgICAgICAgICAgIE9wZW5UaXA6ICdPcGVuVGlwVG8yMjUnLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5JyxcbiAgICAgICAgICAgIFJlZmVyZW5kdW1JbmZvOiAnUmVmZXJlbmR1bUluZm9UbzIzOScsXG4gICAgICAgICAgICBTY2hlZHVsZWQ6ICdTY2hlZHVsZWRUbzI1NCcsXG4gICAgICAgICAgICBTdGFraW5nTGVkZ2VyOiAnU3Rha2luZ0xlZGdlclRvMjQwJyxcbiAgICAgICAgICAgIFdlaWdodDogJ3UzMidcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxMDU1LCAxMDU2XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgTXVsdGlwbGllcjogJ0ZpeGVkNjQnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknLFxuICAgICAgICAgICAgU2NoZWR1bGVkOiAnU2NoZWR1bGVkVG8yNTQnLFxuICAgICAgICAgICAgU3Rha2luZ0xlZGdlcjogJ1N0YWtpbmdMZWRnZXJUbzI0MCcsXG4gICAgICAgICAgICBXZWlnaHQ6ICd1MzInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTA1NywgMTA2MV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIERpc3BhdGNoSW5mbzogJ0Rpc3BhdGNoSW5mb1RvMjQ0JyxcbiAgICAgICAgICAgIEhlYXJ0YmVhdDogJ0hlYXJ0YmVhdFRvMjQ0JyxcbiAgICAgICAgICAgIE9wZW5UaXA6ICdPcGVuVGlwVG8yMjUnLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5JyxcbiAgICAgICAgICAgIC8vIExhc3QgMTAwJSBrbm93biBwcm9ibGVtYXRpYyBydW50aW1lIHJhbmdlIC0gdGhpcyBxdWl0ZSBwb3NzaWJseSBuZWVkIHRvXG4gICAgICAgICAgICAvLyBhcHBseSB0byBtb3JlIHJ1bnRpbWUgcmFuZ2VzIHRoYXQgZm9sbG93LCB3ZSBqdXN0IGRvbid0IGtub3cgaG93IGZhciB0aGlzXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYXBwbGllZCB0b1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFRMO0RSIHdoYWNrLWEtbW9sZSBzaW5jZSB0aGlzIHdhcyBub3QgaGlzdHJpY2FsbHkgY2hlY2tlZFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcG9sa2Fkb3QtanMvYXBpL2lzc3Vlcy81NjE4I2lzc3VlY29tbWVudC0xNTMwOTcwMzE2XG4gICAgICAgICAgICBTY2hlZHVsZWQ6ICdTY2hlZHVsZWRUbzI1NCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxMDYyLCAyMDEyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMjAxMywgMjAyMl0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1RvMjU3JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyMDIzLCAyMDI0XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzIwMjUsIDIwMjddLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5hZGRyQWNjb3VudElkVHlwZXNcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyMDI4LCAyMDI5XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgQWNjb3VudEluZm86ICdBY2NvdW50SW5mb1dpdGhEdWFsUmVmQ291bnQnLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzV2l0aDE2JyxcbiAgICAgICAgICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMTYnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMjAzMCwgOTAwMF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIENvbXBhY3RBc3NpZ25tZW50czogJ0NvbXBhY3RBc3NpZ25tZW50c1dpdGgxNicsXG4gICAgICAgICAgICBSYXdTb2x1dGlvbjogJ1Jhd1NvbHV0aW9uV2l0aDE2J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzkwMTAsIDkwOTldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjAnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIGp1bXAgZnJvbSA5MTAwIHRvIDkxMTAsIGhvd2V2ZXIgYWxpZ24gd2l0aCBSb2NvY29cbiAgICAgICAgbWlubWF4OiBbOTEwMCwgOTEwNV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLm1hcFhjbVR5cGVzKCdWMScpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgLy8gbWV0YWRhdGEgdjE0XG4gICAgICAgIG1pbm1heDogWzkxMDYsIHVuZGVmaW5lZF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAsXG4gICAgLy8ge1xuICAgIC8vICAgLy8gd2VpZ2h0IHYyIGludHJvZHVjdGlvblxuICAgIC8vICAgbWlubWF4OiBbOTMwMCwgdW5kZWZpbmVkXSxcbiAgICAvLyAgIHR5cGVzOiB7XG4gICAgLy8gICAgIFdlaWdodDogJ1dlaWdodFYyJ1xuICAgIC8vICAgfVxuICAgIC8vIH1cbl07XG4iLCJleHBvcnQgY29uc3QgdmVyc2lvbmVkID0gW1xuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMCwgdW5kZWZpbmVkXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcsIEFQSSB0cmFja3MgbWFzdGVyXG4gICAgICAgICAgICAvLyAodjIgd2VpZ2h0cyBhcmUgbm90IHlldCB0aGUgZGVmYXVsdClcbiAgICAgICAgICAgIFdlaWdodDogJ1dlaWdodFYyJ1xuICAgICAgICB9XG4gICAgfVxuXTtcbiIsImV4cG9ydCBjb25zdCB2ZXJzaW9uZWQgPSBbXG4gICAge1xuICAgICAgICBtaW5tYXg6IFswLCB1bmRlZmluZWRdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLy8gbm90aGluZywgQVBJIHRyYWNrcyBtYXN0ZXJcbiAgICAgICAgICAgIC8vICh2MiB3ZWlnaHRzIGFyZSBub3QgeWV0IHRoZSBkZWZhdWx0KVxuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjInXG4gICAgICAgIH1cbiAgICB9XG5dO1xuIiwiY29uc3Qgc2hhcmVkVHlwZXMgPSB7XG4gICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzV2l0aDE2JyxcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBSYXdTb2x1dGlvbjogJ1Jhd1NvbHV0aW9uV2l0aDE2JyxcbiAgICBLZXlzOiAnU2Vzc2lvbktleXM2JyxcbiAgICBQcm94eVR5cGU6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEFueTogMCxcbiAgICAgICAgICAgIE5vblRyYW5zZmVyOiAxLFxuICAgICAgICAgICAgR292ZXJuYW5jZTogMixcbiAgICAgICAgICAgIFN0YWtpbmc6IDMsXG4gICAgICAgICAgICBVbnVzZWRTdWRvQmFsYW5jZXM6IDQsXG4gICAgICAgICAgICBJZGVudGl0eUp1ZGdlbWVudDogNSxcbiAgICAgICAgICAgIENhbmNlbFByb3h5OiA2LFxuICAgICAgICAgICAgQXVjdGlvbjogN1xuICAgICAgICB9XG4gICAgfSxcbiAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbn07XG5jb25zdCBhZGRyQWNjb3VudElkVHlwZXMgPSB7XG4gICAgQWNjb3VudEluZm86ICdBY2NvdW50SW5mb1dpdGhSZWZDb3VudCcsXG4gICAgQWRkcmVzczogJ0FjY291bnRJZCcsXG4gICAgRGlzcGF0Y2hFcnJvck1vZHVsZTogJ0Rpc3BhdGNoRXJyb3JNb2R1bGVVOCcsXG4gICAgS2V5czogJ1Nlc3Npb25LZXlzNScsXG4gICAgTG9va3VwU291cmNlOiAnQWNjb3VudElkJyxcbiAgICBWYWxpZGF0b3JQcmVmczogJ1ZhbGlkYXRvclByZWZzV2l0aENvbW1pc3Npb24nXG59O1xuZXhwb3J0IGNvbnN0IHZlcnNpb25lZCA9IFtcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzAsIDEyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMTMsIDIyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzIzLCAyNF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyNSwgMjddLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5hZGRyQWNjb3VudElkVHlwZXNcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyOCwgMjldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aER1YWxSZWZDb3VudCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFszMCwgOTEwOV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlc1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIG1ldGFkYXRhIHYxNFxuICAgICAgICBtaW5tYXg6IFs5MTEwLCB1bmRlZmluZWRdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gLFxuICAgIC8vIHtcbiAgICAvLyAgIC8vIHdlaWdodCB2MiBpbnRyb2R1Y3Rpb25cbiAgICAvLyAgIG1pbm1heDogWzkzMDAsIHVuZGVmaW5lZF0sXG4gICAgLy8gICB0eXBlczoge1xuICAgIC8vICAgICBXZWlnaHQ6ICdXZWlnaHRWMidcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5dO1xuIiwiaW1wb3J0IHsgbWFwWGNtVHlwZXMgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbi8qIGVzbGludC1kaXNhYmxlIHNvcnQta2V5cyAqL1xuY29uc3Qgc2hhcmVkVHlwZXMgPSB7XG4gICAgRGlzcGF0Y2hFcnJvck1vZHVsZTogJ0Rpc3BhdGNoRXJyb3JNb2R1bGVVOCcsXG4gICAgRnVsbElkZW50aWZpY2F0aW9uOiAnKCknLCAvLyBObyBzdGFraW5nLCBvbmx5IHNlc3Npb24gKGFzIHBlciBjb25maWcpXG4gICAgS2V5czogJ1Nlc3Npb25LZXlzN0InLFxuICAgIFdlaWdodDogJ1dlaWdodFYxJ1xufTtcbmV4cG9ydCBjb25zdCB2ZXJzaW9uZWQgPSBbXG4gICAge1xuICAgICAgICBtaW5tYXg6IFswLCAyMDBdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aER1YWxSZWZDb3VudCcsXG4gICAgICAgICAgICBBZGRyZXNzOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIExvb2t1cFNvdXJjZTogJ0FjY291bnRJZCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyMDEsIDIxNF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIEFjY291bnRJbmZvOiAnQWNjb3VudEluZm9XaXRoRHVhbFJlZkNvdW50J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzIxNSwgMjI4XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgS2V5czogJ1Nlc3Npb25LZXlzNidcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsyMjksIDkwOTldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjAnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzkxMDAsIDkxMDVdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjEnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIG1ldGFkYXRhIHYxNFxuICAgICAgICBtaW5tYXg6IFs5MTA2LCB1bmRlZmluZWRdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gLFxuICAgIC8vIHtcbiAgICAvLyAgIC8vIHdlaWdodCB2MiBpbnRyb2R1Y3Rpb25cbiAgICAvLyAgIG1pbm1heDogWzkzMDAsIHVuZGVmaW5lZF0sXG4gICAgLy8gICB0eXBlczoge1xuICAgIC8vICAgICBXZWlnaHQ6ICdXZWlnaHRWMidcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5dO1xuIiwiZXhwb3J0IGNvbnN0IHZlcnNpb25lZCA9IFtcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzAsIHVuZGVmaW5lZF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgIC8vIG5vdGhpbmcsIGxpbWl0ZWQgcnVudGltZVxuICAgICAgICB9XG4gICAgfVxuXTtcbiIsImltcG9ydCB7IG1hcFhjbVR5cGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5jb25zdCBzaGFyZWRUeXBlcyA9IHtcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBUQXNzZXRCYWxhbmNlOiAndTEyOCcsXG4gICAgUHJveHlUeXBlOiB7XG4gICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAnQW55JyxcbiAgICAgICAgICAgICdOb25UcmFuc2ZlcicsXG4gICAgICAgICAgICAnQ2FuY2VsUHJveHknLFxuICAgICAgICAgICAgJ0Fzc2V0cycsXG4gICAgICAgICAgICAnQXNzZXRPd25lcicsXG4gICAgICAgICAgICAnQXNzZXRNYW5hZ2VyJyxcbiAgICAgICAgICAgICdTdGFraW5nJ1xuICAgICAgICBdXG4gICAgfSxcbiAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbn07XG5leHBvcnQgY29uc3QgdmVyc2lvbmVkID0gW1xuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMCwgM10sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAvLyBFbnVtIHdhcyBtb2RpZmllZCBtaWQtZmxpZ2h0IC1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9wdWxsLzEwMzgyL2ZpbGVzI2RpZmYtZTRlMDE2YjMzYTgyMjY4YjYyMDhkYzk3NGVlYTg0MWJhZDQ3NTk3ODY1YTc0OWZlZTJmOTM3ZWI2ZmRmNjdiNFI0OThcbiAgICAgICAgICAgIERpc3BhdGNoRXJyb3I6ICdEaXNwYXRjaEVycm9yUHJlNkZpcnN0JyxcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4ubWFwWGNtVHlwZXMoJ1YwJylcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs0LCA1XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC8vIEFzIGFib3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BvbGthZG90LWpzL2FwaS9pc3N1ZXMvNTMwMVxuICAgICAgICAgICAgRGlzcGF0Y2hFcnJvcjogJ0Rpc3BhdGNoRXJyb3JQcmU2Rmlyc3QnLFxuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjEnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIG1ldGFkYXRhIFYxNFxuICAgICAgICBtaW5tYXg6IFs1MDAsIDk5OTldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnLFxuICAgICAgICAgICAgVEFzc2V0Q29udmVyc2lvbjogJ09wdGlvbjxBc3NldElkPidcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxMDAwMCwgdW5kZWZpbmVkXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIFdlaWdodDogJ1dlaWdodFYxJ1xuICAgICAgICB9XG4gICAgfVxuXTtcbiIsImltcG9ydCB7IG1hcFhjbVR5cGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5jb25zdCBzaGFyZWRUeXBlcyA9IHtcbiAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICBUQXNzZXRCYWxhbmNlOiAndTEyOCcsXG4gICAgUHJveHlUeXBlOiB7XG4gICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAnQW55JyxcbiAgICAgICAgICAgICdOb25UcmFuc2ZlcicsXG4gICAgICAgICAgICAnQ2FuY2VsUHJveHknLFxuICAgICAgICAgICAgJ0Fzc2V0cycsXG4gICAgICAgICAgICAnQXNzZXRPd25lcicsXG4gICAgICAgICAgICAnQXNzZXRNYW5hZ2VyJyxcbiAgICAgICAgICAgICdTdGFraW5nJ1xuICAgICAgICBdXG4gICAgfSxcbiAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbn07XG5leHBvcnQgY29uc3QgdmVyc2lvbmVkID0gW1xuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMCwgM10sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAvLyBFbnVtIHdhcyBtb2RpZmllZCBtaWQtZmxpZ2h0IC1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9wdWxsLzEwMzgyL2ZpbGVzI2RpZmYtZTRlMDE2YjMzYTgyMjY4YjYyMDhkYzk3NGVlYTg0MWJhZDQ3NTk3ODY1YTc0OWZlZTJmOTM3ZWI2ZmRmNjdiNFI0OThcbiAgICAgICAgICAgIERpc3BhdGNoRXJyb3I6ICdEaXNwYXRjaEVycm9yUHJlNkZpcnN0JyxcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4ubWFwWGNtVHlwZXMoJ1YwJylcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs0LCA1XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC8vIEFzIGFib3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BvbGthZG90LWpzL2FwaS9pc3N1ZXMvNTMwMVxuICAgICAgICAgICAgRGlzcGF0Y2hFcnJvcjogJ0Rpc3BhdGNoRXJyb3JQcmU2Rmlyc3QnLFxuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5tYXBYY21UeXBlcygnVjEnKVxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIC8vIG1ldGFkYXRhIFYxNFxuICAgICAgICBtaW5tYXg6IFs1MDAsIDEwMDEwMDNdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnLFxuICAgICAgICAgICAgVEFzc2V0Q29udmVyc2lvbjogJ09wdGlvbjxBc3NldElkPidcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxMDAyMDAwLCB1bmRlZmluZWRdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gLFxuICAgIC8vIHtcbiAgICAvLyAgIC8vIHdlaWdodCB2MiBpbnRyb2R1Y3Rpb25cbiAgICAvLyAgIG1pbm1heDogWzkzMDAsIHVuZGVmaW5lZF0sXG4gICAgLy8gICB0eXBlczoge1xuICAgIC8vICAgICBXZWlnaHQ6ICdXZWlnaHRWMidcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5dO1xuIiwiaW1wb3J0IHsgbWFwWGNtVHlwZXMgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbmNvbnN0IHNoYXJlZFR5cGVzID0ge1xuICAgIC8vIDE2IHZhbGlkYXRvcnNcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIERpc3BhdGNoRXJyb3JNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlVTgnLFxuICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMTYnLFxuICAgIC8vIGdlbmVyYWxcbiAgICBLZXlzOiAnU2Vzc2lvbktleXM2JyxcbiAgICBQcm94eVR5cGU6IHtcbiAgICAgICAgX2VudW06IFsnQW55JywgJ05vblRyYW5zZmVyJywgJ1N0YWtpbmcnLCAnU3Vkb0JhbGFuY2VzJywgJ0lkZW50aXR5SnVkZ2VtZW50JywgJ0NhbmNlbFByb3h5J11cbiAgICB9LFxuICAgIFdlaWdodDogJ1dlaWdodFYxJ1xufTtcbmNvbnN0IGFkZHJBY2NvdW50SWRUeXBlcyA9IHtcbiAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aFJlZkNvdW50JyxcbiAgICBBZGRyZXNzOiAnQWNjb3VudElkJyxcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIERpc3BhdGNoRXJyb3JNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlVTgnLFxuICAgIExvb2t1cFNvdXJjZTogJ0FjY291bnRJZCcsXG4gICAgS2V5czogJ1Nlc3Npb25LZXlzNScsXG4gICAgUmF3U29sdXRpb246ICdSYXdTb2x1dGlvbldpdGgxNicsXG4gICAgVmFsaWRhdG9yUHJlZnM6ICdWYWxpZGF0b3JQcmVmc1dpdGhDb21taXNzaW9uJ1xufTtcbmV4cG9ydCBjb25zdCB2ZXJzaW9uZWQgPSBbXG4gICAge1xuICAgICAgICBtaW5tYXg6IFsxLCAyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgTXVsdGlwbGllcjogJ0ZpeGVkNjQnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknLFxuICAgICAgICAgICAgV2VpZ2h0OiAndTMyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzMsIDIyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgT3BlblRpcDogJ09wZW5UaXBUbzIyNScsXG4gICAgICAgICAgICBSZWZDb3VudDogJ1JlZkNvdW50VG8yNTknXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbMjMsIDQyXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4uYWRkckFjY291bnRJZFR5cGVzLFxuICAgICAgICAgICAgQ29tcGFjdEFzc2lnbm1lbnRzOiAnQ29tcGFjdEFzc2lnbm1lbnRzVG8yNTcnLFxuICAgICAgICAgICAgRGlzcGF0Y2hJbmZvOiAnRGlzcGF0Y2hJbmZvVG8yNDQnLFxuICAgICAgICAgICAgSGVhcnRiZWF0OiAnSGVhcnRiZWF0VG8yNDQnLFxuICAgICAgICAgICAgUmVmQ291bnQ6ICdSZWZDb3VudFRvMjU5J1xuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzQzLCA0NF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLmFkZHJBY2NvdW50SWRUeXBlcyxcbiAgICAgICAgICAgIERpc3BhdGNoSW5mbzogJ0Rpc3BhdGNoSW5mb1RvMjQ0JyxcbiAgICAgICAgICAgIEhlYXJ0YmVhdDogJ0hlYXJ0YmVhdFRvMjQ0JyxcbiAgICAgICAgICAgIFJlZkNvdW50OiAnUmVmQ291bnRUbzI1OSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs0NSwgNDddLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICAuLi5hZGRyQWNjb3VudElkVHlwZXNcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs0OCwgNDldLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uc2hhcmVkVHlwZXMsXG4gICAgICAgICAgICBBY2NvdW50SW5mbzogJ0FjY291bnRJbmZvV2l0aER1YWxSZWZDb3VudCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBtaW5tYXg6IFs1MCwgOTA5OV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLm1hcFhjbVR5cGVzKCdWMCcpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbOTEwMCwgOTEwNV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLm1hcFhjbVR5cGVzKCdWMScpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgLy8gbWV0YWRhdGEgdjE0XG4gICAgICAgIG1pbm1heDogWzkxMDYsIHVuZGVmaW5lZF0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICBXZWlnaHQ6ICdXZWlnaHRWMSdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAsXG4gICAgLy8ge1xuICAgIC8vICAgLy8gd2VpZ2h0IHYyIGludHJvZHVjdGlvblxuICAgIC8vICAgbWlubWF4OiBbOTMwMCwgdW5kZWZpbmVkXSxcbiAgICAvLyAgIHR5cGVzOiB7XG4gICAgLy8gICAgIFdlaWdodDogJ1dlaWdodFYyJ1xuICAgIC8vICAgfVxuICAgIC8vIH1cbl07XG4iLCJpbXBvcnQgeyBtYXBYY21UeXBlcyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUnO1xuY29uc3Qgc2hhcmVkVHlwZXMgPSB7XG4gICAgRGlzcGF0Y2hFcnJvck1vZHVsZTogJ0Rpc3BhdGNoRXJyb3JNb2R1bGVVOCcsXG4gICAgVEFzc2V0QmFsYW5jZTogJ3UxMjgnLFxuICAgIFByb3h5VHlwZToge1xuICAgICAgICBfZW51bTogW1xuICAgICAgICAgICAgJ0FueScsXG4gICAgICAgICAgICAnTm9uVHJhbnNmZXInLFxuICAgICAgICAgICAgJ0NhbmNlbFByb3h5JyxcbiAgICAgICAgICAgICdBc3NldHMnLFxuICAgICAgICAgICAgJ0Fzc2V0T3duZXInLFxuICAgICAgICAgICAgJ0Fzc2V0TWFuYWdlcicsXG4gICAgICAgICAgICAnU3Rha2luZydcbiAgICAgICAgXVxuICAgIH0sXG4gICAgV2VpZ2h0OiAnV2VpZ2h0VjEnXG59O1xuZXhwb3J0IGNvbnN0IHZlcnNpb25lZCA9IFtcbiAgICB7XG4gICAgICAgIG1pbm1heDogWzAsIDNdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLy8gRW51bSB3YXMgbW9kaWZpZWQgbWlkLWZsaWdodCAtXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGFyaXR5dGVjaC9zdWJzdHJhdGUvcHVsbC8xMDM4Mi9maWxlcyNkaWZmLWU0ZTAxNmIzM2E4MjI2OGI2MjA4ZGM5NzRlZWE4NDFiYWQ0NzU5Nzg2NWE3NDlmZWUyZjkzN2ViNmZkZjY3YjRSNDk4XG4gICAgICAgICAgICBEaXNwYXRjaEVycm9yOiAnRGlzcGF0Y2hFcnJvclByZTZGaXJzdCcsXG4gICAgICAgICAgICAuLi5zaGFyZWRUeXBlcyxcbiAgICAgICAgICAgIC4uLm1hcFhjbVR5cGVzKCdWMCcpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbNCwgNV0sXG4gICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAvLyBBcyBhYm92ZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wb2xrYWRvdC1qcy9hcGkvaXNzdWVzLzUzMDFcbiAgICAgICAgICAgIERpc3BhdGNoRXJyb3I6ICdEaXNwYXRjaEVycm9yUHJlNkZpcnN0JyxcbiAgICAgICAgICAgIC4uLnNoYXJlZFR5cGVzLFxuICAgICAgICAgICAgLi4ubWFwWGNtVHlwZXMoJ1YxJylcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICAvLyBtZXRhZGF0YSBWMTRcbiAgICAgICAgbWlubWF4OiBbNTAwLCA5NDM0XSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIFdlaWdodDogJ1dlaWdodFYxJyxcbiAgICAgICAgICAgIFRBc3NldENvbnZlcnNpb246ICdPcHRpb248QXNzZXRJZD4nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWlubWF4OiBbOTQzNSwgdW5kZWZpbmVkXSxcbiAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgIFdlaWdodDogJ1dlaWdodFYxJ1xuICAgICAgICB9XG4gICAgfVxuXTtcbiIsImV4cG9ydCB7IHVwZ3JhZGVzIGFzIGt1c2FtYSB9IGZyb20gJy4va3VzYW1hLmpzJztcbmV4cG9ydCB7IHVwZ3JhZGVzIGFzIHBvbGthZG90IH0gZnJvbSAnLi9wb2xrYWRvdC5qcyc7XG5leHBvcnQgeyB1cGdyYWRlcyBhcyB3ZXN0ZW5kIH0gZnJvbSAnLi93ZXN0ZW5kLmpzJztcbiIsImV4cG9ydCBjb25zdCB1cGdyYWRlcyA9IFtcbiAgICBbXG4gICAgICAgIDAsXG4gICAgICAgIDEwMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI2NjY5LFxuICAgICAgICAxMDIxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAzODI0NSxcbiAgICAgICAgMTAyMixcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNTQyNDgsXG4gICAgICAgIDEwMjMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU5NjU5LFxuICAgICAgICAxMDI0LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA2NzY1MSxcbiAgICAgICAgMTAyNSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgODIxOTEsXG4gICAgICAgIDEwMjcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDgzMjM4LFxuICAgICAgICAxMDI4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDE1MDMsXG4gICAgICAgIDEwMjksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwMzQ2NixcbiAgICAgICAgMTAzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMjk1Nzg3LFxuICAgICAgICAxMDMxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA0NjE2OTIsXG4gICAgICAgIDEwMzIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDUwNDMyOSxcbiAgICAgICAgMTAzMyxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNTY5MzI3LFxuICAgICAgICAxMDM4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA1ODc2ODcsXG4gICAgICAgIDEwMzksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDY1MzE4MyxcbiAgICAgICAgMTA0MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNjkzNDg4LFxuICAgICAgICAxMDQyLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA5MDE0NDIsXG4gICAgICAgIDEwNDUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEzNzUwODYsXG4gICAgICAgIDEwNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NDU0NTgsXG4gICAgICAgIDEwNTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NzI5NjAsXG4gICAgICAgIDEwNTIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NzU2NDgsXG4gICAgICAgIDEwNTMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0OTE1OTYsXG4gICAgICAgIDEwNTQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE1NzQ0MDgsXG4gICAgICAgIDEwNTUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwNjQ5NjEsXG4gICAgICAgIDEwNTgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIyMDE5OTEsXG4gICAgICAgIDEwNjIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI2NzE1MjgsXG4gICAgICAgIDIwMDUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI3MDQyMDIsXG4gICAgICAgIDIwMDcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI3MjgwMDIsXG4gICAgICAgIDIwMDgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI4MzI1MzQsXG4gICAgICAgIDIwMTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDI5NjIyOTQsXG4gICAgICAgIDIwMTIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDMyNDAwMDAsXG4gICAgICAgIDIwMTMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDMyNzQ0MDgsXG4gICAgICAgIDIwMTUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDMzMjM1NjUsXG4gICAgICAgIDIwMTksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM1MzQxNzUsXG4gICAgICAgIDIwMjIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM4NjAyODEsXG4gICAgICAgIDIwMjMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDQxNDMxMjksXG4gICAgICAgIDIwMjQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDQ0MDEyNDIsXG4gICAgICAgIDIwMjUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDQ4NDEzNjcsXG4gICAgICAgIDIwMjYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU5NjE2MDAsXG4gICAgICAgIDIwMjcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDYxMzc5MTIsXG4gICAgICAgIDIwMjgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDY1NjE4NTUsXG4gICAgICAgIDIwMjksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDcxMDA4OTEsXG4gICAgICAgIDIwMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc0Njg3OTIsXG4gICAgICAgIDkwMTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNzY2ODYwMCxcbiAgICAgICAgOTAzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA3ODEyNDc2LFxuICAgICAgICA5MDQwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDgwMTA5ODEsXG4gICAgICAgIDkwNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgODA3MzgzMyxcbiAgICAgICAgOTA3MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA4NTU1ODI1LFxuICAgICAgICA5MDgwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg5NDUyNDUsXG4gICAgICAgIDkwOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgOTYxMTM3NyxcbiAgICAgICAgOTEwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA5NjI1MTI5LFxuICAgICAgICA5MTExLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDk4NjY0MjIsXG4gICAgICAgIDkxMjIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA0MDM3ODQsXG4gICAgICAgIDkxMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA5NjA3NjUsXG4gICAgICAgIDkxNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTEwMDY2MTQsXG4gICAgICAgIDkxNTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE0MDQ0ODIsXG4gICAgICAgIDkxNjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE2MDE4MDMsXG4gICAgICAgIDkxNzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTIwMDgwMjIsXG4gICAgICAgIDkxODAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTI0MDU0NTEsXG4gICAgICAgIDkxOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTI2NjU0MTYsXG4gICAgICAgIDkyMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTI5MDk1MDgsXG4gICAgICAgIDkyMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTMxMDk3NTIsXG4gICAgICAgIDkyMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTM1NTU3NzcsXG4gICAgICAgIDkyNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTM3Mjc3NDcsXG4gICAgICAgIDkyNjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTQyNDgwNDQsXG4gICAgICAgIDkyNzEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NDMzODQwLFxuICAgICAgICA5MjgwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTQ2NDU5MDAsXG4gICAgICAgIDkyOTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTA0ODM3NSxcbiAgICAgICAgOTMwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE1NDI2MDE1LFxuICAgICAgICA5MzIwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTU2ODA3MTMsXG4gICAgICAgIDkzNDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTc1NjI5NixcbiAgICAgICAgOTM1MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE1OTEyMDA3LFxuICAgICAgICA5MzYwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTYzNTY1NDcsXG4gICAgICAgIDkzNzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNzMzNTQ1MCxcbiAgICAgICAgOTM4MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE4MDYyNzM5LFxuICAgICAgICA5NDIwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE4NjI1MDAwLFxuICAgICAgICA5NDMwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwNDY1ODA2LFxuICAgICAgICAxMDAwMDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMTU3MDAwMCxcbiAgICAgICAgMTAwMTAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA3XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIxNzg2MjkxLFxuICAgICAgICAxMDAxMDAyLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGZiYzU3N2I5ZDc0N2VmZDZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMjI1MTU5NjIsXG4gICAgICAgIDEwMDEwMDMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgN1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMjc5MDAwMCxcbiAgICAgICAgMTAwMjAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMzE3NjAxNSxcbiAgICAgICAgMTAwMjAwMSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF1cbl07XG4iLCJleHBvcnQgY29uc3QgdXBncmFkZXMgPSBbXG4gICAgW1xuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyOTIzMSxcbiAgICAgICAgMSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTg4ODM2LFxuICAgICAgICA1LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxOTk0MDUsXG4gICAgICAgIDYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIxNDI2NCxcbiAgICAgICAgNyxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMjQ0MzU4LFxuICAgICAgICA4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAzMDMwNzksXG4gICAgICAgIDksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDMxNDIwMSxcbiAgICAgICAgMTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM0MjQwMCxcbiAgICAgICAgMTEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDQ0Mzk2MyxcbiAgICAgICAgMTIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDUyODQ3MCxcbiAgICAgICAgMTMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDY4Nzc1MSxcbiAgICAgICAgMTQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc0NjA4NSxcbiAgICAgICAgMTUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc4NzkyMyxcbiAgICAgICAgMTYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc5OTMwMixcbiAgICAgICAgMTcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEyMDUxMjgsXG4gICAgICAgIDE4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNjAzNDIzLFxuICAgICAgICAyMyxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTczMzIxOCxcbiAgICAgICAgMjQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwMDU2NzMsXG4gICAgICAgIDI1LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyNDM2Njk4LFxuICAgICAgICAyNixcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMzYxMzU2NCxcbiAgICAgICAgMjcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM4OTk1NDcsXG4gICAgICAgIDI4LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA0MzQ1NzY3LFxuICAgICAgICAyOSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNDg3NjEzNCxcbiAgICAgICAgMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU2NjE0NDIsXG4gICAgICAgIDkwNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNjMyMTYxOSxcbiAgICAgICAgOTA4MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA2NzEzMjQ5LFxuICAgICAgICA5MDkwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDcyMTc5MDcsXG4gICAgICAgIDkxMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNzIyOTEyNixcbiAgICAgICAgOTExMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA3NTYwNTU4LFxuICAgICAgICA5MTIyLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDgxMTU4NjksXG4gICAgICAgIDkxNDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgODYzODEwMyxcbiAgICAgICAgOTE1MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA5MjgwMTc5LFxuICAgICAgICA5MTcwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDk3Mzg3MTcsXG4gICAgICAgIDkxODAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTAxNTY4NTYsXG4gICAgICAgIDkxOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA0NTg1NzYsXG4gICAgICAgIDkyMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA2NTUxMTYsXG4gICAgICAgIDkyMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTA4NzkzNzEsXG4gICAgICAgIDkyMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTEzMjg4ODQsXG4gICAgICAgIDkyNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE1MzI4NTYsXG4gICAgICAgIDkyNjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE5MzM4MTgsXG4gICAgICAgIDkyNzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTIyMTc1MzUsXG4gICAgICAgIDkyODAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEyMjQ1Mjc3LFxuICAgICAgICA5MjgxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMjUzMjY0NCxcbiAgICAgICAgOTI5MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEyODc2MTg5LFxuICAgICAgICA5MzAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTM4MDAwMTUsXG4gICAgICAgIDkzNDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNDE4ODgzMyxcbiAgICAgICAgOTM2MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0NTQzOTE4LFxuICAgICAgICA5MzcwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTU5NzgzNjIsXG4gICAgICAgIDk0MjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTY0NTAwMDAsXG4gICAgICAgIDk0MzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTc4NDAwMDAsXG4gICAgICAgIDk0MzEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTg0MDc0NzUsXG4gICAgICAgIDEwMDAwMDEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTk1NTEwMDAsXG4gICAgICAgIDEwMDEwMDIsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMDE4MTc1OCxcbiAgICAgICAgMTAwMTAwMyxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwNDM4NTMwLFxuICAgICAgICAxMDAyMDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXVxuXTtcbiIsImV4cG9ydCBjb25zdCB1cGdyYWRlcyA9IFtcbiAgICBbXG4gICAgICAgIDIxNDM1NixcbiAgICAgICAgNCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMzkyNzY0LFxuICAgICAgICA3LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA0MDk3NDAsXG4gICAgICAgIDgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDgwOTk3NixcbiAgICAgICAgMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg3NzU4MSxcbiAgICAgICAgMjQsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg3OTIzOCxcbiAgICAgICAgMjUsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg4OTQ3MixcbiAgICAgICAgMjYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDkwMjkzNyxcbiAgICAgICAgMjcsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDkzMjc1MSxcbiAgICAgICAgMjgsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDk5MTE0MixcbiAgICAgICAgMjksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEwMzAxNjIsXG4gICAgICAgIDMxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTE5NjU3LFxuICAgICAgICAzMixcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTE5OTI4MixcbiAgICAgICAgMzMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEzNDI1MzQsXG4gICAgICAgIDM0LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMzkyMjYzLFxuICAgICAgICAzNSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTQzMTcwMyxcbiAgICAgICAgMzYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0MzMzNjksXG4gICAgICAgIDM3LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNDkwOTcyLFxuICAgICAgICA0MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMjA4NzM5NyxcbiAgICAgICAgNDMsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIzMTY2ODgsXG4gICAgICAgIDQ0LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyNTQ5ODY0LFxuICAgICAgICA0NSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMzkyNTc4MixcbiAgICAgICAgNDYsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDM5MjU4NDMsXG4gICAgICAgIDQ3LFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA0MjA3ODAwLFxuICAgICAgICA0OCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNDYyNzk0NCxcbiAgICAgICAgNDksXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDUxMjQwNzYsXG4gICAgICAgIDUwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA1NDc4NjY0LFxuICAgICAgICA5MDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU0ODI0NTAsXG4gICAgICAgIDkwMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNTU4NDMwNSxcbiAgICAgICAgOTAxMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA1Nzg0NTY2LFxuICAgICAgICA5MDMwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDU4Nzk4MjIsXG4gICAgICAgIDkwMzEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNTg5Njg1NixcbiAgICAgICAgOTAzMixcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA1ODk3MzE2LFxuICAgICAgICA5MDMzLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDYxMTc5MjcsXG4gICAgICAgIDkwNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNjIxMDI3NCxcbiAgICAgICAgOTA3MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA2Mzc5MzE0LFxuICAgICAgICA5MDgwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDY5NzkxNDEsXG4gICAgICAgIDkwOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNzU2ODQ1MyxcbiAgICAgICAgOTEwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA3NzY2Mzk0LFxuICAgICAgICA5MTExLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDc5MTE2OTEsXG4gICAgICAgIDkxMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgNzk2ODg2NixcbiAgICAgICAgOTEyMSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA3OTgyODg5LFxuICAgICAgICA5MTIyLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDg1MTQzMjIsXG4gICAgICAgIDkxMzAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgOTA5MTcyNixcbiAgICAgICAgOTE0MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICA5MDkxNzc0LFxuICAgICAgICA5MTUwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDk0MDY3MjYsXG4gICAgICAgIDkxNjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgOTkyMTA2NixcbiAgICAgICAgOTE3MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDAwNzExNSxcbiAgICAgICAgOTE4MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDQ4MDk3MyxcbiAgICAgICAgOTE5MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDU3ODA5MSxcbiAgICAgICAgOTIwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDY3ODUwOSxcbiAgICAgICAgOTIxMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMDgxMTAwMSxcbiAgICAgICAgOTIyMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTA5NjExNixcbiAgICAgICAgOTIzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTQwOTI3OSxcbiAgICAgICAgOTI1MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTU4NDgyMCxcbiAgICAgICAgOTI1MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTcxNjgzNyxcbiAgICAgICAgOTI2MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTg3NjkxOSxcbiAgICAgICAgOTI2MSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMTk4NzkyNyxcbiAgICAgICAgOTI3MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTIwNzczMjQsXG4gICAgICAgIDkyNzEsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEyMzAxODcxLFxuICAgICAgICA5MjgwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTI2MDQzNDMsXG4gICAgICAgIDkyOTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMjg0MTAzNCxcbiAgICAgICAgOTMwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEzMTI4MjM3LFxuICAgICAgICA5MzEwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTMyNzIzNjMsXG4gICAgICAgIDkzMjAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMzQ4MzQ5NyxcbiAgICAgICAgOTMzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDEzNjQ5NDMzLFxuICAgICAgICA5MzQwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTM3NjExMDAsXG4gICAgICAgIDkzNTAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxMzg0NzQwMCxcbiAgICAgICAgOTM2MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE0MjQ5MjAwLFxuICAgICAgICA5MzcwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTQ1NzY4NTUsXG4gICAgICAgIDkzODAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNDg0OTgzMCxcbiAgICAgICAgOTM5MCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTE0NjgzMixcbiAgICAgICAgOTQwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTMzMjMxNyxcbiAgICAgICAgOTQwMSxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNTY2MTc5MyxcbiAgICAgICAgOTQyMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxNjE2NTQ2OSxcbiAgICAgICAgOTQzMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxODI5Mzk4NCxcbiAgICAgICAgMTAyMDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQ5ZWFhZjFiNTQ4YTBjYjBcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg5MWQ1ZGYxOGIwZDJjZjU4XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MmE1ZTkyNDY1NTM5OWU2MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGVkOTljNWFjYjI1ZWVkZjVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhjYmNhMjVlMzlmMTQyMzg3XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Njg3YWQ0NGFkMzdmMDNjMlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFiM2MwNTcyMjkxZmViOGJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhiYzlkODk5MDRmNWI5MjNmXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdjOGJiMTM1MGE5YTJhOFwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGYzZmYxNGQ1YWI1MjcwNTlcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGZiYzU3N2I5ZDc0N2VmZDZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFtcbiAgICAgICAgMTgyOTM5OTEsXG4gICAgICAgIDEwMzAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA4XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE4NDUxNzgzLFxuICAgICAgICAxMDQwMDAsXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZGY2YWNiNjg5OTA3NjA5YlwiLFxuICAgICAgICAgICAgICAgIDRcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3ZTM5N2ZjN2M5MWY1ZTRcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0MGZlM2FkNDAxZjg5NTlhXCIsXG4gICAgICAgICAgICAgICAgNlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZDJiYzk4OTdlZWQwOGYxNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGY3OGIyNzhiZTUzZjQ1NGNcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhZjJjMDI5N2EyM2U2ZDNkXCIsXG4gICAgICAgICAgICAgICAgOVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAxODY3OTc0MSxcbiAgICAgICAgMTAwNTAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5MTY2Njk1LFxuICAgICAgICAxMDA2MDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5MjM0MTU3LFxuICAgICAgICAxMDA2MDAxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5NTQyOTQ0LFxuICAgICAgICAxMDA3MDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5NjIxMjU4LFxuICAgICAgICAxMDA3MDAxLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDE5NzYxNDA2LFxuICAgICAgICAxMDA4MDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwMDU2OTk3LFxuICAgICAgICAxMDA5MDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MTdhNmJjMGQwMDYyYWViM1wiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE4ZWY1OGEzYjY3YmE3NzBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmYmM1NzdiOWQ3NDdlZmQ2XCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgXSxcbiAgICBbXG4gICAgICAgIDIwMzY4MzE4LFxuICAgICAgICAxMDEwMDAwLFxuICAgICAgICBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGRmNmFjYjY4OTkwNzYwOWJcIixcbiAgICAgICAgICAgICAgICA1XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2UzOTdmYzdjOTFmNWU0XCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDBmZTNhZDQwMWY4OTU5YVwiLFxuICAgICAgICAgICAgICAgIDZcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGQyYmM5ODk3ZWVkMDhmMTVcIixcbiAgICAgICAgICAgICAgICAzXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmNzhiMjc4YmU1M2Y0NTRjXCIsXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWYyYzAyOTdhMjNlNmQzZFwiLFxuICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg0OWVhYWYxYjU0OGEwY2IwXCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4OTFkNWRmMThiMGQyY2Y1OFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDJhNWU5MjQ2NTUzOTllNjBcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhlZDk5YzVhY2IyNWVlZGY1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Y2JjYTI1ZTM5ZjE0MjM4N1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDY4N2FkNDRhZDM3ZjAzYzJcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhhYjNjMDU3MjI5MWZlYjhiXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YmM5ZDg5OTA0ZjViOTIzZlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDM3YzhiYjEzNTBhOWEyYThcIixcbiAgICAgICAgICAgICAgICA0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhmM2ZmMTRkNWFiNTI3MDU5XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NmZmNTJlZTg1OGU2YzViZFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDE3YTZiYzBkMDA2MmFlYjNcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxOGVmNThhM2I2N2JhNzcwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZmJjNTc3YjlkNzQ3ZWZkNlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIF0sXG4gICAgW1xuICAgICAgICAyMDY0OTA4NixcbiAgICAgICAgMTAxMTAwMCxcbiAgICAgICAgW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkZjZhY2I2ODk5MDc2MDliXCIsXG4gICAgICAgICAgICAgICAgNVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MzdlMzk3ZmM3YzkxZjVlNFwiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDQwZmUzYWQ0MDFmODk1OWFcIixcbiAgICAgICAgICAgICAgICA2XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHhkMmJjOTg5N2VlZDA4ZjE1XCIsXG4gICAgICAgICAgICAgICAgM1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4Zjc4YjI3OGJlNTNmNDU0Y1wiLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGFmMmMwMjk3YTIzZTZkM2RcIixcbiAgICAgICAgICAgICAgICAxMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4NDllYWFmMWI1NDhhMGNiMFwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDkxZDVkZjE4YjBkMmNmNThcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgyYTVlOTI0NjU1Mzk5ZTYwXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZWQ5OWM1YWNiMjVlZWRmNVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGNiY2EyNWUzOWYxNDIzODdcIixcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHg2ODdhZDQ0YWQzN2YwM2MyXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4YWIzYzA1NzIyOTFmZWI4YlwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGJjOWQ4OTkwNGY1YjkyM2ZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgzN2M4YmIxMzUwYTlhMmE4XCIsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4ZjNmZjE0ZDVhYjUyNzA1OVwiLFxuICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweDZmZjUyZWU4NThlNmM1YmRcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiMHgxN2E2YmMwZDAwNjJhZWIzXCIsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIjB4MThlZjU4YTNiNjdiYTc3MFwiLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIweGZiYzU3N2I5ZDc0N2VmZDZcIixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICBdXG5dO1xuIiwiaW1wb3J0IHsgc2VsZWN0YWJsZU5ldHdvcmtzIH0gZnJvbSAnQHBvbGthZG90L25ldHdvcmtzJztcbmltcG9ydCB7IEJOLCBoZXhUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCAqIGFzIGFsbEtub3duIGZyb20gJy4vZTJlL2luZGV4LmpzJztcbmNvbnN0IE5FVF9FWFRSQSA9IHtcbiAgICB3ZXN0ZW5kOiB7XG4gICAgICAgIGdlbmVzaXNIYXNoOiBbJzB4ZTE0M2YyMzgwM2FjNTBlOGY2ZjhlNjI2OTVkMWNlOWU0ZTFkNjhhYTM2YzFjZDJjZmQxNTM0MDIxM2YzNDIzZSddXG4gICAgfVxufTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIG1hcFJhdyhbbmV0d29yaywgdmVyc2lvbnNdKSB7XG4gICAgY29uc3QgY2hhaW4gPSBzZWxlY3RhYmxlTmV0d29ya3MuZmluZCgobikgPT4gbi5uZXR3b3JrID09PSBuZXR3b3JrKSB8fCBORVRfRVhUUkFbbmV0d29ya107XG4gICAgaWYgKCFjaGFpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGluZm8gZm9yIGNoYWluICR7bmV0d29ya31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2VuZXNpc0hhc2g6IGhleFRvVThhKGNoYWluLmdlbmVzaXNIYXNoWzBdKSxcbiAgICAgICAgbmV0d29yayxcbiAgICAgICAgdmVyc2lvbnM6IHZlcnNpb25zLm1hcCgoW2Jsb2NrTnVtYmVyLCBzcGVjVmVyc2lvbiwgYXBpc10pID0+ICh7XG4gICAgICAgICAgICBhcGlzLFxuICAgICAgICAgICAgYmxvY2tOdW1iZXI6IG5ldyBCTihibG9ja051bWJlciksXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogbmV3IEJOKHNwZWNWZXJzaW9uKVxuICAgICAgICB9KSlcbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IHVwZ3JhZGVzID0gT2JqZWN0LmVudHJpZXMoYWxsS25vd24pLm1hcChtYXBSYXcpO1xuIiwiaW1wb3J0IHsgYm5Ub0JuIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgdHlwZXNDaGFpbiB9IGZyb20gJy4vY2hhaW4vaW5kZXguanMnO1xuaW1wb3J0IHsgdHlwZXNTcGVjIH0gZnJvbSAnLi9zcGVjL2luZGV4LmpzJztcbmltcG9ydCB7IHVwZ3JhZGVzIH0gZnJvbSAnLi91cGdyYWRlcy9pbmRleC5qcyc7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQZXJmb3JtIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2luZyB0aGUgc3RyaW5naWZpZWQgc3BlYy9jaGFpblxuICogQGludGVybmFsXG4gKiAqL1xuZnVuY3Rpb24gd2l0aE5hbWVzKGNoYWluTmFtZSwgc3BlY05hbWUsIGZuKSB7XG4gICAgcmV0dXJuIGZuKGNoYWluTmFtZS50b1N0cmluZygpLCBzcGVjTmFtZS50b1N0cmluZygpKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uRmZsYXR0ZW4gYSBWZXJzaW9uZWRUeXBlW10gaW50byBhIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqIEBpbnRlcm5hbFxuICogKi9cbmZ1bmN0aW9uIGZpbHRlclZlcnNpb25zKHZlcnNpb25zID0gW10sIHNwZWNWZXJzaW9uKSB7XG4gICAgcmV0dXJuIHZlcnNpb25zXG4gICAgICAgIC5maWx0ZXIoKHsgbWlubWF4OiBbbWluLCBtYXhdIH0pID0+IChtaW4gPT09IHVuZGVmaW5lZCB8fCBtaW4gPT09IG51bGwgfHwgc3BlY1ZlcnNpb24gPj0gbWluKSAmJlxuICAgICAgICAobWF4ID09PSB1bmRlZmluZWQgfHwgbWF4ID09PSBudWxsIHx8IHNwZWNWZXJzaW9uIDw9IG1heCkpXG4gICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwgeyB0eXBlcyB9KSA9PiAoeyAuLi5yZXN1bHQsIC4uLnR5cGVzIH0pLCB7fSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlZCBvbiB0aGUgY2hhaW4gYW5kIHJ1bnRpbWVWZXJzaW9uLCBnZXQgdGhlIGFwcGxpY2FibGUgc2lnbmVkIGV4dGVuc2lvbnMgKHJlYWR5IGZvciByZWdpc3RyYXRpb24pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGVjRXh0ZW5zaW9ucyh7IGtub3duVHlwZXMgfSwgY2hhaW5OYW1lLCBzcGVjTmFtZSkge1xuICAgIHJldHVybiB3aXRoTmFtZXMoY2hhaW5OYW1lLCBzcGVjTmFtZSwgKGMsIHMpID0+ICh7XG4gICAgICAgIC4uLihrbm93blR5cGVzLnR5cGVzQnVuZGxlPy5zcGVjPy5bc10/LnNpZ25lZEV4dGVuc2lvbnMgPz8ge30pLFxuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0J1bmRsZT8uY2hhaW4/LltjXT8uc2lnbmVkRXh0ZW5zaW9ucyA/PyB7fSlcbiAgICB9KSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlZCBvbiB0aGUgY2hhaW4gYW5kIHJ1bnRpbWVWZXJzaW9uLCBnZXQgdGhlIGFwcGxpY2FibGUgdHlwZXMgKHJlYWR5IGZvciByZWdpc3RyYXRpb24pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGVjVHlwZXMoeyBrbm93blR5cGVzIH0sIGNoYWluTmFtZSwgc3BlY05hbWUsIHNwZWNWZXJzaW9uKSB7XG4gICAgY29uc3QgX3NwZWNWZXJzaW9uID0gYm5Ub0JuKHNwZWNWZXJzaW9uKS50b051bWJlcigpO1xuICAgIHJldHVybiB3aXRoTmFtZXMoY2hhaW5OYW1lLCBzcGVjTmFtZSwgKGMsIHMpID0+ICh7XG4gICAgICAgIC8vIFRoZSBvcmRlciBoZXJlIGlzIGFsd2F5cywgYmFzZWQgb24gLVxuICAgICAgICAvLyAgIC0gc3BlYyB0aGVuIGNoYWluXG4gICAgICAgIC8vICAgLSB0eXBlc0J1bmRsZSB0YWtlcyBoaWdoZXIgcHJlY2VkZW5jZVxuICAgICAgICAvLyAgIC0gdHlwZXMgaXMgdGhlIGZpbmFsIGNhdGNoLWFsbCBvdmVycmlkZVxuICAgICAgICAuLi5maWx0ZXJWZXJzaW9ucyh0eXBlc1NwZWNbc10sIF9zcGVjVmVyc2lvbiksXG4gICAgICAgIC4uLmZpbHRlclZlcnNpb25zKHR5cGVzQ2hhaW5bY10sIF9zcGVjVmVyc2lvbiksXG4gICAgICAgIC4uLmZpbHRlclZlcnNpb25zKGtub3duVHlwZXMudHlwZXNCdW5kbGU/LnNwZWM/LltzXT8udHlwZXMsIF9zcGVjVmVyc2lvbiksXG4gICAgICAgIC4uLmZpbHRlclZlcnNpb25zKGtub3duVHlwZXMudHlwZXNCdW5kbGU/LmNoYWluPy5bY10/LnR5cGVzLCBfc3BlY1ZlcnNpb24pLFxuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc1NwZWM/LltzXSA/PyB7fSksXG4gICAgICAgIC4uLihrbm93blR5cGVzLnR5cGVzQ2hhaW4/LltjXSA/PyB7fSksXG4gICAgICAgIC4uLihrbm93blR5cGVzLnR5cGVzID8/IHt9KVxuICAgIH0pKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2VkIG9uIHRoZSBjaGFpbiBvciBzcGVjLCByZXR1cm4gdGhlIGhhc2hlciB1c2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGVjSGFzaGVyKHsga25vd25UeXBlcyB9LCBjaGFpbk5hbWUsIHNwZWNOYW1lKSB7XG4gICAgcmV0dXJuIHdpdGhOYW1lcyhjaGFpbk5hbWUsIHNwZWNOYW1lLCAoYywgcykgPT4ga25vd25UeXBlcy5oYXNoZXIgfHxcbiAgICAgICAga25vd25UeXBlcy50eXBlc0J1bmRsZT8uY2hhaW4/LltjXT8uaGFzaGVyIHx8XG4gICAgICAgIGtub3duVHlwZXMudHlwZXNCdW5kbGU/LnNwZWM/LltzXT8uaGFzaGVyIHx8XG4gICAgICAgIG51bGwpO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZWQgb24gdGhlIGNoYWluIGFuZCBydW50aW1lVmVyc2lvbiwgZ2V0IHRoZSBhcHBsaWNhYmxlIHJwYyBkZWZpbml0aW9ucyAocmVhZHkgZm9yIHJlZ2lzdHJhdGlvbilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwZWNScGMoeyBrbm93blR5cGVzIH0sIGNoYWluTmFtZSwgc3BlY05hbWUpIHtcbiAgICByZXR1cm4gd2l0aE5hbWVzKGNoYWluTmFtZSwgc3BlY05hbWUsIChjLCBzKSA9PiAoe1xuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0J1bmRsZT8uc3BlYz8uW3NdPy5ycGMgPz8ge30pLFxuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0J1bmRsZT8uY2hhaW4/LltjXT8ucnBjID8/IHt9KVxuICAgIH0pKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2VkIG9uIHRoZSBjaGFpbiBhbmQgcnVudGltZVZlcnNpb24sIGdldCB0aGUgYXBwbGljYWJsZSBydW50aW1lIGRlZmluaXRpb25zIChyZWFkeSBmb3IgcmVnaXN0cmF0aW9uKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BlY1J1bnRpbWUoeyBrbm93blR5cGVzIH0sIGNoYWluTmFtZSwgc3BlY05hbWUpIHtcbiAgICByZXR1cm4gd2l0aE5hbWVzKGNoYWluTmFtZSwgc3BlY05hbWUsIChjLCBzKSA9PiAoe1xuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0J1bmRsZT8uc3BlYz8uW3NdPy5ydW50aW1lID8/IHt9KSxcbiAgICAgICAgLi4uKGtub3duVHlwZXMudHlwZXNCdW5kbGU/LmNoYWluPy5bY10/LnJ1bnRpbWUgPz8ge30pXG4gICAgfSkpO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZWQgb24gdGhlIGNoYWluIGFuZCBydW50aW1lVmVyc2lvbiwgZ2V0IHRoZSBhcHBsaWNhYmxlIGFsaWFzIGRlZmluaXRpb25zIChyZWFkeSBmb3IgcmVnaXN0cmF0aW9uKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BlY0FsaWFzKHsga25vd25UeXBlcyB9LCBjaGFpbk5hbWUsIHNwZWNOYW1lKSB7XG4gICAgcmV0dXJuIHdpdGhOYW1lcyhjaGFpbk5hbWUsIHNwZWNOYW1lLCAoYywgcykgPT4gKHtcbiAgICAgICAgLy8gYXMgcGVyIHZlcnNpb25zLCBmaXJzdCBzcGVjLCB0aGVuIGNoYWluIHRoZW4gZmluYWxseSBub24tdmVyc2lvbmVkXG4gICAgICAgIC4uLihrbm93blR5cGVzLnR5cGVzQnVuZGxlPy5zcGVjPy5bc10/LmFsaWFzID8/IHt9KSxcbiAgICAgICAgLi4uKGtub3duVHlwZXMudHlwZXNCdW5kbGU/LmNoYWluPy5bY10/LmFsaWFzID8/IHt9KSxcbiAgICAgICAgLi4uKGtub3duVHlwZXMudHlwZXNBbGlhcyA/PyB7fSlcbiAgICB9KSk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgdmVyc2lvbiByZWNvcmQgZm9yIGtub3duIGNoYWlucyB3aGVyZSB1cGdyYWRlcyBhcmUgYmVpbmcgdHJhY2tlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBncmFkZVZlcnNpb24oZ2VuZXNpc0hhc2gsIGJsb2NrTnVtYmVyKSB7XG4gICAgY29uc3Qga25vd24gPSB1cGdyYWRlcy5maW5kKCh1KSA9PiBnZW5lc2lzSGFzaC5lcSh1LmdlbmVzaXNIYXNoKSk7XG4gICAgcmV0dXJuIGtub3duXG4gICAgICAgID8gW1xuICAgICAgICAgICAga25vd24udmVyc2lvbnMucmVkdWNlKChsYXN0LCB2ZXJzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrTnVtYmVyLmd0KHZlcnNpb24uYmxvY2tOdW1iZXIpXG4gICAgICAgICAgICAgICAgICAgID8gdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICA6IGxhc3Q7XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQpLFxuICAgICAgICAgICAga25vd24udmVyc2lvbnMuZmluZCgodmVyc2lvbikgPT4gYmxvY2tOdW1iZXIubHRlKHZlcnNpb24uYmxvY2tOdW1iZXIpKVxuICAgICAgICBdXG4gICAgICAgIDogW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbn1cbiIsImltcG9ydCB7IGxhenlNZXRob2QgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5leHBvcnQgZnVuY3Rpb24gbGF6eVZhcmlhbnRzKGxvb2t1cCwgeyB0eXBlIH0sIGdldE5hbWUsIGNyZWF0b3IpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB2YXJpYW50cyA9IGxvb2t1cC5nZXRTaVR5cGUodHlwZSkuZGVmLmFzVmFyaWFudC52YXJpYW50cztcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSB2YXJpYW50cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGxhenlNZXRob2QocmVzdWx0LCB2YXJpYW50c1tpXSwgY3JlYXRvciwgZ2V0TmFtZSwgaSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBEb05vdENvbnN0cnVjdCwgSnNvbiwgUmF3IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGNvbnN0cnVjdFR5cGVDbGFzcywgY3JlYXRlQ2xhc3NVbnNhZmUsIGNyZWF0ZVR5cGVVbnNhZmUgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbmltcG9ydCB7IGFzc2VydFJldHVybiwgQk5fWkVSTywgZm9ybWF0QmFsYW5jZSwgaXNCbiwgaXNGdW5jdGlvbiwgaXNOdW1iZXIsIGlzU3RyaW5nLCBpc1U4YSwgbGF6eU1ldGhvZCwgbG9nZ2VyLCBvYmplY3RTcHJlYWQsIHN0cmluZ0NhbWVsQ2FzZSwgc3RyaW5naWZ5IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgYmxha2UyQXNVOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgZXhwYW5kRXh0ZW5zaW9uVHlwZXMsIGZhbGxiYWNrRXh0ZW5zaW9ucywgZmluZFVua25vd25FeHRlbnNpb25zIH0gZnJvbSAnLi4vZXh0cmluc2ljL3NpZ25lZEV4dGVuc2lvbnMvaW5kZXguanMnO1xuaW1wb3J0IHsgR2VuZXJpY0V2ZW50RGF0YSB9IGZyb20gJy4uL2dlbmVyaWMvRXZlbnQuanMnO1xuaW1wb3J0ICogYXMgYmFzZVR5cGVzIGZyb20gJy4uL2luZGV4LnR5cGVzLmpzJztcbmltcG9ydCAqIGFzIGRlZmluaXRpb25zIGZyb20gJy4uL2ludGVyZmFjZXMvZGVmaW5pdGlvbnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ2FsbEZ1bmN0aW9uIH0gZnJvbSAnLi4vbWV0YWRhdGEvZGVjb3JhdGUvZXh0cmluc2ljcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZWNvcmF0ZUNvbnN0YW50cywgZmlsdGVyQ2FsbHNTb21lLCBmaWx0ZXJFdmVudHNTb21lIH0gZnJvbSAnLi4vbWV0YWRhdGEvZGVjb3JhdGUvaW5kZXguanMnO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuLi9tZXRhZGF0YS9NZXRhZGF0YS5qcyc7XG5pbXBvcnQgeyBQb3J0YWJsZVJlZ2lzdHJ5IH0gZnJvbSAnLi4vbWV0YWRhdGEvUG9ydGFibGVSZWdpc3RyeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBsYXp5VmFyaWFudHMgfSBmcm9tICcuL2xhenkuanMnO1xuY29uc3QgREVGQVVMVF9GSVJTVF9DQUxMX0lEWCA9IG5ldyBVaW50OEFycmF5KDIpO1xuY29uc3QgbCA9IGxvZ2dlcigncmVnaXN0cnknKTtcbmZ1bmN0aW9uIHNvcnREZWNpbWFsU3RyaW5ncyhhLCBiKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGEsIDEwKSAtIHBhcnNlSW50KGIsIDEwKTtcbn1cbmZ1bmN0aW9uIHZhbHVlVG9TdHJpbmcodikge1xuICAgIHJldHVybiB2LnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBnZXRGaWVsZEFyZ3MobG9va3VwLCBmaWVsZHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGZpZWxkcy5sZW5ndGg7XG4gICAgY29uc3QgYXJncyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBsb29rdXAuZ2V0VHlwZURlZihmaWVsZHNbaV0udHlwZSkudHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5mdW5jdGlvbiBjbGVhclJlY29yZChyZWNvcmQpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBrZXlzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgZGVsZXRlIHJlY29yZFtrZXlzW2ldXTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRWYXJpYW50U3RyaW5nSWR4KHsgaW5kZXggfSkge1xuICAgIHJldHVybiBpbmRleC50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gaW5qZWN0RXJyb3JzKF8sIHsgbG9va3VwLCBwYWxsZXRzIH0sIHZlcnNpb24sIHJlc3VsdCkge1xuICAgIGNsZWFyUmVjb3JkKHJlc3VsdCk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gcGFsbGV0cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JzLCBpbmRleCwgbmFtZSB9ID0gcGFsbGV0c1tpXTtcbiAgICAgICAgaWYgKGVycm9ycy5pc1NvbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gc3RyaW5nQ2FtZWxDYXNlKG5hbWUpO1xuICAgICAgICAgICAgbGF6eU1ldGhvZChyZXN1bHQsIHZlcnNpb24gPj0gMTIgPyBpbmRleC50b051bWJlcigpIDogaSwgKCkgPT4gbGF6eVZhcmlhbnRzKGxvb2t1cCwgZXJyb3JzLnVud3JhcCgpLCBnZXRWYXJpYW50U3RyaW5nSWR4LCAoeyBkb2NzLCBmaWVsZHMsIGluZGV4LCBuYW1lIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgYXJnczogZ2V0RmllbGRBcmdzKGxvb2t1cCwgZmllbGRzKSxcbiAgICAgICAgICAgICAgICBkb2NzOiBkb2NzLm1hcCh2YWx1ZVRvU3RyaW5nKSxcbiAgICAgICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LnRvTnVtYmVyKCksXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBuYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb25OYW1lXG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaW5qZWN0RXZlbnRzKHJlZ2lzdHJ5LCB7IGxvb2t1cCwgcGFsbGV0cyB9LCB2ZXJzaW9uLCByZXN1bHQpIHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHBhbGxldHMuZmlsdGVyKGZpbHRlckV2ZW50c1NvbWUpO1xuICAgIGNsZWFyUmVjb3JkKHJlc3VsdCk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gZmlsdGVyZWQubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB7IGV2ZW50cywgaW5kZXgsIG5hbWUgfSA9IGZpbHRlcmVkW2ldO1xuICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgdmVyc2lvbiA+PSAxMiA/IGluZGV4LnRvTnVtYmVyKCkgOiBpLCAoKSA9PiBsYXp5VmFyaWFudHMobG9va3VwLCBldmVudHMudW53cmFwKCksIGdldFZhcmlhbnRTdHJpbmdJZHgsICh2YXJpYW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gcmVnaXN0cnkuY3JlYXRlVHlwZSgnRXZlbnRNZXRhZGF0YUxhdGVzdCcsIG9iamVjdFNwcmVhZCh7fSwgdmFyaWFudCwgeyBhcmdzOiBnZXRGaWVsZEFyZ3MobG9va3VwLCB2YXJpYW50LmZpZWxkcykgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgR2VuZXJpY0V2ZW50RGF0YSB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSwgbWV0YSwgc3RyaW5nQ2FtZWxDYXNlKG5hbWUpLCB2YXJpYW50Lm5hbWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluamVjdEV4dHJpbnNpY3MocmVnaXN0cnksIHsgbG9va3VwLCBwYWxsZXRzIH0sIHZlcnNpb24sIHJlc3VsdCwgbWFwcGluZykge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gcGFsbGV0cy5maWx0ZXIoZmlsdGVyQ2FsbHNTb21lKTtcbiAgICBjbGVhclJlY29yZChyZXN1bHQpO1xuICAgIGNsZWFyUmVjb3JkKG1hcHBpbmcpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGZpbHRlcmVkLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBjYWxscywgaW5kZXgsIG5hbWUgfSA9IGZpbHRlcmVkW2ldO1xuICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSB2ZXJzaW9uID49IDEyID8gaW5kZXgudG9OdW1iZXIoKSA6IGk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gc3RyaW5nQ2FtZWxDYXNlKG5hbWUpO1xuICAgICAgICBjb25zdCBhbGxDYWxscyA9IGNhbGxzLnVud3JhcCgpO1xuICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc2VjdGlvbkluZGV4LCAoKSA9PiBsYXp5VmFyaWFudHMobG9va3VwLCBhbGxDYWxscywgZ2V0VmFyaWFudFN0cmluZ0lkeCwgKHZhcmlhbnQpID0+IGNyZWF0ZUNhbGxGdW5jdGlvbihyZWdpc3RyeSwgbG9va3VwLCB2YXJpYW50LCBzZWN0aW9uTmFtZSwgc2VjdGlvbkluZGV4KSkpO1xuICAgICAgICBjb25zdCB7IHBhdGggfSA9IHJlZ2lzdHJ5Lmxvb2t1cC5nZXRTaVR5cGUoYWxsQ2FsbHMudHlwZSk7XG4gICAgICAgIC8vIGZyYW1lX3N5c3RlbTo6cGFsbGV0OjpDYWxsIC8gcGFsbGV0X2JhbGFuY2VzOjpwYWxsZXQ6OkNhbGwgLyBwb2xrYWRvdF9ydW50aW1lX3BhcmFjaGFpbnM6OmNvbmZpZ3VyYXRpb246OnBhbGxldDo6Q2FsbCAvXG4gICAgICAgIGNvbnN0IHBhbGxldElkeCA9IHBhdGguZmluZEluZGV4KCh2KSA9PiB2LmVxKCdwYWxsZXQnKSk7XG4gICAgICAgIGlmIChwYWxsZXRJZHggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gc3RyaW5nQ2FtZWxDYXNlKHBhdGhcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgcGFsbGV0SWR4KVxuICAgICAgICAgICAgICAgIC5tYXAoKHAsIGkpID0+IGkgPT09IDBcbiAgICAgICAgICAgICAgICAvLyBmcmFtZV9zeXN0ZW0gfHwgcGFsbGV0X2JhbGFuY2VzXG4gICAgICAgICAgICAgICAgPyBwLnJlcGxhY2UoL14oZnJhbWV8cGFsbGV0KV8vLCAnJylcbiAgICAgICAgICAgICAgICA6IHApXG4gICAgICAgICAgICAgICAgLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICBpZiAoIW1hcHBpbmdbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nW25hbWVdID0gW3NlY3Rpb25OYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hcHBpbmdbbmFtZV0ucHVzaChzZWN0aW9uTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBleHRyYWN0UHJvcGVydGllcyhyZWdpc3RyeSwgbWV0YWRhdGEpIHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IHJlZ2lzdHJ5LmdldENoYWluUHJvcGVydGllcygpO1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IGRlY29yYXRlQ29uc3RhbnRzKHJlZ2lzdHJ5LCBtZXRhZGF0YS5hc0xhdGVzdCwgbWV0YWRhdGEudmVyc2lvbik7XG4gICAgY29uc3Qgc3M1OEZvcm1hdCA9IGNvbnN0YW50c1snc3lzdGVtJ10gJiYgKGNvbnN0YW50c1snc3lzdGVtJ11bJ3NTNThQcmVmaXgnXSB8fCBjb25zdGFudHNbJ3N5c3RlbSddWydzczU4UHJlZml4J10pO1xuICAgIGlmICghc3M1OEZvcm1hdCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgfVxuICAgIGNvbnN0IHsgaXNFdGhlcmV1bSwgdG9rZW5EZWNpbWFscywgdG9rZW5TeW1ib2wgfSA9IG9yaWdpbmFsIHx8IHt9O1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdDaGFpblByb3BlcnRpZXMnLCBbeyBpc0V0aGVyZXVtLCBzczU4Rm9ybWF0LCB0b2tlbkRlY2ltYWxzLCB0b2tlblN5bWJvbCB9XSk7XG59XG5leHBvcnQgY2xhc3MgVHlwZVJlZ2lzdHJ5IHtcbiAgICBfX2ludGVybmFsX19jaGFpblByb3BlcnRpZXM7XG4gICAgX19pbnRlcm5hbF9fY2xhc3NlcyA9IG5ldyBNYXAoKTtcbiAgICBfX2ludGVybmFsX19kZWZpbml0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICBfX2ludGVybmFsX19maXJzdENhbGxJbmRleCA9IG51bGw7XG4gICAgX19pbnRlcm5hbF9faGFzaGVyID0gYmxha2UyQXNVOGE7XG4gICAgX19pbnRlcm5hbF9fa25vd25UeXBlcyA9IHt9O1xuICAgIF9faW50ZXJuYWxfX2xvb2t1cDtcbiAgICBfX2ludGVybmFsX19tZXRhZGF0YTtcbiAgICBfX2ludGVybmFsX19tZXRhZGF0YVZlcnNpb24gPSAwO1xuICAgIF9faW50ZXJuYWxfX3NpZ25lZEV4dGVuc2lvbnMgPSBmYWxsYmFja0V4dGVuc2lvbnM7XG4gICAgX19pbnRlcm5hbF9fdW5rbm93blR5cGVzID0gbmV3IE1hcCgpO1xuICAgIF9faW50ZXJuYWxfX3VzZXJFeHRlbnNpb25zO1xuICAgIF9faW50ZXJuYWxfX2tub3duRGVmYXVsdHM7XG4gICAgX19pbnRlcm5hbF9fa25vd25EZWZhdWx0c0VudHJpZXM7XG4gICAgX19pbnRlcm5hbF9fa25vd25EZWZpbml0aW9ucztcbiAgICBfX2ludGVybmFsX19tZXRhZGF0YUNhbGxzID0ge307XG4gICAgX19pbnRlcm5hbF9fbWV0YWRhdGFFcnJvcnMgPSB7fTtcbiAgICBfX2ludGVybmFsX19tZXRhZGF0YUV2ZW50cyA9IHt9O1xuICAgIF9faW50ZXJuYWxfX21vZHVsZU1hcCA9IHt9O1xuICAgIGNyZWF0ZWRBdEhhc2g7XG4gICAgY29uc3RydWN0b3IoY3JlYXRlZEF0SGFzaCkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmYXVsdHMgPSBvYmplY3RTcHJlYWQoeyBKc29uLCBNZXRhZGF0YSwgUG9ydGFibGVSZWdpc3RyeSwgUmF3IH0sIGJhc2VUeXBlcyk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fa25vd25EZWZhdWx0c0VudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmYXVsdHMpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICAgICAgY29uc3QgYWxsS25vd24gPSBPYmplY3QudmFsdWVzKHRoaXMuX19pbnRlcm5hbF9fa25vd25EZWZpbml0aW9ucyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGFsbEtub3duLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoYWxsS25vd25baV0udHlwZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjcmVhdGVkQXRIYXNoKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWRBdEhhc2ggPSB0aGlzLmNyZWF0ZVR5cGUoJ0Jsb2NrSGFzaCcsIGNyZWF0ZWRBdEhhc2gpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjaGFpbkRlY2ltYWxzKCkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19jaGFpblByb3BlcnRpZXM/LnRva2VuRGVjaW1hbHMuaXNTb21lKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxEZWNpbWFscyA9IHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzLnRva2VuRGVjaW1hbHMudW53cmFwKCk7XG4gICAgICAgICAgICBpZiAoYWxsRGVjaW1hbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsbERlY2ltYWxzLm1hcCgoYikgPT4gYi50b051bWJlcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWzEyXTtcbiAgICB9XG4gICAgZ2V0IGNoYWluSXNFdGhlcmV1bSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzPy5pc0V0aGVyZXVtLmlzVHJ1ZSB8fCBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGNoYWluU1M1OCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzPy5zczU4Rm9ybWF0LmlzU29tZVxuICAgICAgICAgICAgPyB0aGlzLl9faW50ZXJuYWxfX2NoYWluUHJvcGVydGllcy5zczU4Rm9ybWF0LnVud3JhcCgpLnRvTnVtYmVyKClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgY2hhaW5Ub2tlbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9faW50ZXJuYWxfX2NoYWluUHJvcGVydGllcz8udG9rZW5TeW1ib2wuaXNTb21lKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUb2tlbnMgPSB0aGlzLl9faW50ZXJuYWxfX2NoYWluUHJvcGVydGllcy50b2tlblN5bWJvbC51bndyYXAoKTtcbiAgICAgICAgICAgIGlmIChhbGxUb2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsbFRva2Vucy5tYXAodmFsdWVUb1N0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtmb3JtYXRCYWxhbmNlLmdldERlZmF1bHRzKCkudW5pdF07XG4gICAgfVxuICAgIGdldCBmaXJzdENhbGxJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZmlyc3RDYWxsSW5kZXggfHwgREVGQVVMVF9GSVJTVF9DQUxMX0lEWDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHlwZSBpcyBpbiBhIENvbXBhdCBmb3JtYXRcbiAgICAgKi9cbiAgICBpc0xvb2t1cFR5cGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIC9Mb29rdXBcXGQrJC8udGVzdCh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbG9va3VwIHN0cmluZyBmcm9tIHRoZSBzdXBwbGllZCBpZFxuICAgICAqL1xuICAgIGNyZWF0ZUxvb2t1cFR5cGUobG9va3VwSWQpIHtcbiAgICAgICAgcmV0dXJuIGBMb29rdXAke3R5cGVvZiBsb29rdXBJZCA9PT0gJ251bWJlcicgPyBsb29rdXBJZCA6IGxvb2t1cElkLnRvTnVtYmVyKCl9YDtcbiAgICB9XG4gICAgZ2V0IGtub3duVHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2tub3duVHlwZXM7XG4gICAgfVxuICAgIGdldCBsb29rdXAoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXR1cm4odGhpcy5fX2ludGVybmFsX19sb29rdXAsICdQb3J0YWJsZVJlZ2lzdHJ5IGhhcyBub3QgYmVlbiBzZXQgb24gdGhpcyByZWdpc3RyeScpO1xuICAgIH1cbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXR1cm4odGhpcy5fX2ludGVybmFsX19tZXRhZGF0YSwgJ01ldGFkYXRhIGhhcyBub3QgYmVlbiBzZXQgb24gdGhpcyByZWdpc3RyeScpO1xuICAgIH1cbiAgICBnZXQgdW5rbm93blR5cGVzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuX19pbnRlcm5hbF9fdW5rbm93blR5cGVzLmtleXMoKV07XG4gICAgfVxuICAgIGdldCBzaWduZWRFeHRlbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19zaWduZWRFeHRlbnNpb25zO1xuICAgIH1cbiAgICBjbGVhckNhY2hlKCkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmliZSBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuICAgICAqL1xuICAgIGNyZWF0ZUNsYXNzKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNsYXNzVW5zYWZlKHRoaXMsIHR5cGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpYmUgQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBjcmVhdGVDbGFzc1Vuc2FmZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDbGFzc1Vuc2FmZSh0aGlzLCB0eXBlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSB0eXBlIGFzIHJlZ2lzdGVyZWRcbiAgICAgKi9cbiAgICBjcmVhdGVUeXBlKHR5cGUsIC4uLnBhcmFtcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZVVuc2FmZSh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBhIHR5cGUgYXMgcmVnaXN0ZXJlZFxuICAgICAqL1xuICAgIGNyZWF0ZVR5cGVVbnNhZmUodHlwZSwgcGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVUeXBlVW5zYWZlKHRoaXMsIHR5cGUsIHBhcmFtcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIGZpbmQgYSBzcGVjaWZpYyBjYWxsXG4gICAgZmluZE1ldGFDYWxsKGNhbGxJbmRleCkge1xuICAgICAgICBjb25zdCBbc2VjdGlvbiwgbWV0aG9kXSA9IFtjYWxsSW5kZXhbMF0sIGNhbGxJbmRleFsxXV07XG4gICAgICAgIHJldHVybiBhc3NlcnRSZXR1cm4odGhpcy5fX2ludGVybmFsX19tZXRhZGF0YUNhbGxzW2Ake3NlY3Rpb259YF0gJiYgdGhpcy5fX2ludGVybmFsX19tZXRhZGF0YUNhbGxzW2Ake3NlY3Rpb259YF1bYCR7bWV0aG9kfWBdLCAoKSA9PiBgZmluZE1ldGFDYWxsOiBVbmFibGUgdG8gZmluZCBDYWxsIHdpdGggaW5kZXggWyR7c2VjdGlvbn0sICR7bWV0aG9kfV0vWyR7Y2FsbEluZGV4LnRvU3RyaW5nKCl9XWApO1xuICAgIH1cbiAgICAvLyBmaW5kcyBhbiBlcnJvclxuICAgIGZpbmRNZXRhRXJyb3IoZXJyb3JJbmRleCkge1xuICAgICAgICBjb25zdCBbc2VjdGlvbiwgbWV0aG9kXSA9IGlzVThhKGVycm9ySW5kZXgpXG4gICAgICAgICAgICA/IFtlcnJvckluZGV4WzBdLCBlcnJvckluZGV4WzFdXVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgZXJyb3JJbmRleC5pbmRleC50b051bWJlcigpLFxuICAgICAgICAgICAgICAgIGlzVThhKGVycm9ySW5kZXguZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JJbmRleC5lcnJvclswXVxuICAgICAgICAgICAgICAgICAgICA6IGVycm9ySW5kZXguZXJyb3IudG9OdW1iZXIoKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGFzc2VydFJldHVybih0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhRXJyb3JzW2Ake3NlY3Rpb259YF0gJiYgdGhpcy5fX2ludGVybmFsX19tZXRhZGF0YUVycm9yc1tgJHtzZWN0aW9ufWBdW2Ake21ldGhvZH1gXSwgKCkgPT4gYGZpbmRNZXRhRXJyb3I6IFVuYWJsZSB0byBmaW5kIEVycm9yIHdpdGggaW5kZXggWyR7c2VjdGlvbn0sICR7bWV0aG9kfV0vWyR7ZXJyb3JJbmRleC50b1N0cmluZygpfV1gKTtcbiAgICB9XG4gICAgZmluZE1ldGFFdmVudChldmVudEluZGV4KSB7XG4gICAgICAgIGNvbnN0IFtzZWN0aW9uLCBtZXRob2RdID0gW2V2ZW50SW5kZXhbMF0sIGV2ZW50SW5kZXhbMV1dO1xuICAgICAgICByZXR1cm4gYXNzZXJ0UmV0dXJuKHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFFdmVudHNbYCR7c2VjdGlvbn1gXSAmJiB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhRXZlbnRzW2Ake3NlY3Rpb259YF1bYCR7bWV0aG9kfWBdLCAoKSA9PiBgZmluZE1ldGFFdmVudDogVW5hYmxlIHRvIGZpbmQgRXZlbnQgd2l0aCBpbmRleCBbJHtzZWN0aW9ufSwgJHttZXRob2R9XS9bJHtldmVudEluZGV4LnRvU3RyaW5nKCl9XWApO1xuICAgIH1cbiAgICBnZXQobmFtZSwgd2l0aFVua25vd24sIGtub3duVHlwZURlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRVbnNhZmUobmFtZSwgd2l0aFVua25vd24sIGtub3duVHlwZURlZik7XG4gICAgfVxuICAgIGdldFVuc2FmZShuYW1lLCB3aXRoVW5rbm93biwga25vd25UeXBlRGVmKSB7XG4gICAgICAgIGxldCBUeXBlID0gdGhpcy5fX2ludGVybmFsX19jbGFzc2VzLmdldChuYW1lKSB8fCB0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmYXVsdHNbbmFtZV07XG4gICAgICAgIC8vIHdlIGhhdmUgbm90IGFscmVhZHkgY3JlYXRlZCB0aGUgdHlwZSwgYXR0ZW1wdCBpdFxuICAgICAgICBpZiAoIVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLl9faW50ZXJuYWxfX2RlZmluaXRpb25zLmdldChuYW1lKTtcbiAgICAgICAgICAgIGxldCBCYXNlVHlwZTtcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBkZWZpbml0aW9uLCBzbyBjcmVhdGUgdGhlIGNsYXNzIG5vdyAobGF6aWx5KVxuICAgICAgICAgICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICBCYXNlVHlwZSA9IGNyZWF0ZUNsYXNzVW5zYWZlKHRoaXMsIGRlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa25vd25UeXBlRGVmKSB7XG4gICAgICAgICAgICAgICAgQmFzZVR5cGUgPSBjb25zdHJ1Y3RUeXBlQ2xhc3ModGhpcywga25vd25UeXBlRGVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHdpdGhVbmtub3duKSB7XG4gICAgICAgICAgICAgICAgbC53YXJuKGBVbmFibGUgdG8gcmVzb2x2ZSB0eXBlICR7bmFtZX0sIGl0IHdpbGwgZmFpbCBvbiBjb25zdHJ1Y3Rpb25gKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3Vua25vd25UeXBlcy5zZXQobmFtZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgQmFzZVR5cGUgPSBEb05vdENvbnN0cnVjdC53aXRoKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEJhc2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gTk9URSBJZiB3ZSBkaWRuJ3QgZXh0ZW5kIGhlcmUsIHdlIHdvdWxkIGhhdmUgc3RyYW5nZSBhcnRpZmFjdHMuIEFuIGV4YW1wbGUgaXNcbiAgICAgICAgICAgICAgICAvLyBCYWxhbmNlLCB3aXRoIHRoaXMsIG5ldyBCYWxhbmNlKCkgaW5zdGFuY2VvZiB1MTI4IGlzIHRydWUsIGJ1dCBCYWxhbmNlICE9PSB1MTI4XG4gICAgICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCB3ZSBub3cgcGFzcyB0aHJvdWdoIHRoZSByZWdpc3RyeSwgd2hpY2ggaXMgYSBsaW5rIHRvIG91cnNlbHZlc1xuICAgICAgICAgICAgICAgIFR5cGUgPSBjbGFzcyBleHRlbmRzIEJhc2VUeXBlIHtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fY2xhc3Nlcy5zZXQobmFtZSwgVHlwZSk7XG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgbG9va3Vwcywgd2UgYWxzbyB3YW50IHRvIHN0b3JlIHRoZSBhY3R1YWwgY2xhc3MgYWdhaW5zdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBsb29rdXAgbmFtZSwgaW5zdGFkIG9mIGhhdmluZyB0byB0cmF2ZXJzZSBhZ2FpblxuICAgICAgICAgICAgICAgIGlmIChrbm93blR5cGVEZWYgJiYgaXNOdW1iZXIoa25vd25UeXBlRGVmLmxvb2t1cEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMuc2V0KHRoaXMuY3JlYXRlTG9va3VwVHlwZShrbm93blR5cGVEZWYubG9va3VwSW5kZXgpLCBUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGU7XG4gICAgfVxuICAgIGdldENoYWluUHJvcGVydGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBnZXRDbGFzc05hbWUoVHlwZSkge1xuICAgICAgICAvLyB3ZSBjYW5ub3QgcmVseSBvbiBleHBvcnQgb3JkZXIgKGFueW1vcmUsIHNpbmNlIGJhYmVsL2NvcmUgNy4xNS44KSwgc28gaW4gdGhlIGNhc2Ugb2ZcbiAgICAgICAgLy8gaXRlbXMgc3VjaCBhcyB1MzIgJiBVMzIsIHdlIGdldCB0aGUgbG93ZXJjYXNlIHZlcnNpb25zIGhlcmUuLi4gbm90IHF1aXRlIGFzIG9wdGltYWxcbiAgICAgICAgLy8gKHByZXZpb3VzbHkgdGhpcyB1c2VkIHRvIGJlIGEgc2ltcGxlIGZpbmQgJiByZXR1cm4pXG4gICAgICAgIGNvbnN0IG5hbWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIENsYXp6XSBvZiB0aGlzLl9faW50ZXJuYWxfX2tub3duRGVmYXVsdHNFbnRyaWVzKSB7XG4gICAgICAgICAgICBpZiAoVHlwZSA9PT0gQ2xhenopIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIENsYXp6XSBvZiB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoVHlwZSA9PT0gQ2xhenopIHtcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lcy5sZW5ndGhcbiAgICAgICAgICAgIC8vIGJvdGggc29ydCBhbmQgcmV2ZXJzZSBhcmUgZG9uZSBpbi1wbGFjZVxuICAgICAgICAgICAgLy8gWydVMzInLCAndTMyJ10gLT4gWyd1MzInLCAnVTMyJ11cbiAgICAgICAgICAgID8gbmFtZXMuc29ydCgpLnJldmVyc2UoKVswXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldERlZmluaXRpb24odHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZGVmaW5pdGlvbnMuZ2V0KHR5cGVOYW1lKTtcbiAgICB9XG4gICAgZ2V0TW9kdWxlSW5zdGFuY2VzKHNwZWNOYW1lLCBtb2R1bGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2tub3duVHlwZXM/LnR5cGVzQnVuZGxlPy5zcGVjPy5bc3BlY05hbWUudG9TdHJpbmcoKV0/Lmluc3RhbmNlcz8uW21vZHVsZU5hbWVdIHx8IHRoaXMuX19pbnRlcm5hbF9fbW9kdWxlTWFwW21vZHVsZU5hbWVdO1xuICAgIH1cbiAgICBnZXRPclRocm93KG5hbWUpIHtcbiAgICAgICAgY29uc3QgQ2xhenogPSB0aGlzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFDbGF6eikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eXBlICR7bmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENsYXp6O1xuICAgIH1cbiAgICBnZXRPclVua25vd24obmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQobmFtZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGdldFNpZ25lZEV4dGVuc2lvbkV4dHJhKCkge1xuICAgICAgICByZXR1cm4gZXhwYW5kRXh0ZW5zaW9uVHlwZXModGhpcy5fX2ludGVybmFsX19zaWduZWRFeHRlbnNpb25zLCAncGF5bG9hZCcsIHRoaXMuX19pbnRlcm5hbF9fdXNlckV4dGVuc2lvbnMpO1xuICAgIH1cbiAgICBnZXRTaWduZWRFeHRlbnNpb25UeXBlcygpIHtcbiAgICAgICAgcmV0dXJuIGV4cGFuZEV4dGVuc2lvblR5cGVzKHRoaXMuX19pbnRlcm5hbF9fc2lnbmVkRXh0ZW5zaW9ucywgJ2V4dHJpbnNpYycsIHRoaXMuX19pbnRlcm5hbF9fdXNlckV4dGVuc2lvbnMpO1xuICAgIH1cbiAgICBoYXNDbGFzcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMuaGFzKG5hbWUpIHx8ICEhdGhpcy5fX2ludGVybmFsX19rbm93bkRlZmF1bHRzW25hbWVdO1xuICAgIH1cbiAgICBoYXNEZWYobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19kZWZpbml0aW9ucy5oYXMobmFtZSk7XG4gICAgfVxuICAgIGhhc1R5cGUobmFtZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX19pbnRlcm5hbF9fdW5rbm93blR5cGVzLmdldChuYW1lKSAmJiAodGhpcy5oYXNDbGFzcyhuYW1lKSB8fCB0aGlzLmhhc0RlZihuYW1lKSk7XG4gICAgfVxuICAgIGhhc2goZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUeXBlKCdDb2RlY0hhc2gnLCB0aGlzLl9faW50ZXJuYWxfX2hhc2hlcihkYXRhKSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBlLWNsYXNzLW1lbWJlcnNcbiAgICByZWdpc3RlcihhcmcxLCBhcmcyKSB7XG4gICAgICAgIC8vIE5PVEUgQ29uc3RydWN0b3JzIGFwcGVhciBhcyBmdW5jdGlvbnMgaGVyZVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihhcmcxKSkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jbGFzc2VzLnNldChhcmcxLm5hbWUsIGFyZzEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKGFyZzEpKSB7XG4gICAgICAgICAgICBpZiAoIWlzRnVuY3Rpb24oYXJnMikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNsYXNzIGRlZmluaXRpb24gcGFzc2VkIHRvICcke2FyZzF9JyByZWdpc3RyYXRpb25gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZzEgPT09IGFyZzIudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlZ2lzdGVyIGNpcmN1bGFyICR7YXJnMX0gPT09ICR7YXJnMX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fY2xhc3Nlcy5zZXQoYXJnMSwgYXJnMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3JlZ2lzdGVyT2JqZWN0KGFyZzEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9faW50ZXJuYWxfX3JlZ2lzdGVyT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMob2JqKTtcbiAgICAgICAgZm9yIChsZXQgZSA9IDAsIGNvdW50ID0gZW50cmllcy5sZW5ndGg7IGUgPCBjb3VudDsgZSsrKSB7XG4gICAgICAgICAgICBjb25zdCBbbmFtZSwgdHlwZV0gPSBlbnRyaWVzW2VdO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odHlwZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIF9sb29rc18gYSBiaXQgZnVubnksIGJ1dCBgdHlwZW9mIENsYXp6ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jbGFzc2VzLnNldChuYW1lLCB0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZiA9IGlzU3RyaW5nKHR5cGUpXG4gICAgICAgICAgICAgICAgICAgID8gdHlwZVxuICAgICAgICAgICAgICAgICAgICA6IHN0cmluZ2lmeSh0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZGVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlZ2lzdGVyIGNpcmN1bGFyICR7bmFtZX0gPT09ICR7ZGVmfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB3ZSBhbHJlYWR5IGhhdmUgdGhpcyB0eXBlLCByZW1vdmUgdGhlIGNsYXNzZXMgcmVnaXN0ZXJlZCBmb3IgaXRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19jbGFzc2VzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NsYXNzZXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2RlZmluaXRpb25zLnNldChuYW1lLCBkZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyBzZXRzIHRoZSBjaGFpbiBwcm9wZXJ0aWVzXG4gICAgc2V0Q2hhaW5Qcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fY2hhaW5Qcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRIYXNoZXIoaGFzaGVyKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGFzaGVyID0gaGFzaGVyIHx8IGJsYWtlMkFzVThhO1xuICAgIH1cbiAgICBzZXRLbm93blR5cGVzKGtub3duVHlwZXMpIHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19rbm93blR5cGVzID0ga25vd25UeXBlcztcbiAgICB9XG4gICAgc2V0TG9va3VwKGxvb2t1cCkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2xvb2t1cCA9IGxvb2t1cDtcbiAgICAgICAgLy8gcmVnaXN0ZXIgYWxsIGFwcGxpY2FibGUgdHlwZXMgZm91bmRcbiAgICAgICAgbG9va3VwLnJlZ2lzdGVyKCk7XG4gICAgfVxuICAgIC8vIHJlZ2lzdGVyIGFsaWFzIHR5cGVzIGFsb25nc2lkZSB0aGUgcG9ydGFibGUvbG9va3VwIHNldHVwXG4gICAgLy8gKHdlIGRvbid0IGNvbWJpbmUgdGhpcyBpbnRvIHNldExvb2t1cCBzaW5jZSB0aGF0IHdvdWxkL2NvdWxkXG4gICAgLy8gYWZmZWN0IHN0YW5kLWFsb25nIGxvb2t1cHMsIHN1Y2ggYXMgQUJJcyB3aGljaCBkb24ndCBoYXZlXG4gICAgLy8gYWN0dWFsIG9uLWNoYWluIG1ldGFkYXRhKVxuICAgIF9faW50ZXJuYWxfX3JlZ2lzdGVyTG9va3VwID0gKGxvb2t1cCkgPT4ge1xuICAgICAgICAvLyBhdHRhY2ggdGhlIGxvb2t1cCBiZWZvcmUgd2UgcmVnaXN0ZXIgYW55IHR5cGVzXG4gICAgICAgIHRoaXMuc2V0TG9va3VwKGxvb2t1cCk7XG4gICAgICAgIC8vIHdlIGRldGVjdCBiYXNlZCBvbiBydW50aW1lIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgbGV0IFdlaWdodCA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmhhc1R5cGUoJ1NwV2VpZ2h0c1dlaWdodFYyV2VpZ2h0JykpIHtcbiAgICAgICAgICAgIC8vIGRldGVjdGlvbiBmb3IgV2VpZ2h0VjIgdHlwZSBiYXNlZCBvbiBsYXRlc3QgbmFtaW5nXG4gICAgICAgICAgICBjb25zdCB3ZWlnaHR2MiA9IHRoaXMuY3JlYXRlVHlwZSgnU3BXZWlnaHRzV2VpZ2h0VjJXZWlnaHQnKTtcbiAgICAgICAgICAgIFdlaWdodCA9IHdlaWdodHYyLnJlZlRpbWUgJiYgd2VpZ2h0djIucHJvb2ZTaXplXG4gICAgICAgICAgICAgICAgLy8gd2l0aCBib3RoIHJlZlRpbWUgJiBwcm9vZlNpemUgd2UgdXNlIGFzLWlzIChXZWlnaHRWMilcbiAgICAgICAgICAgICAgICA/ICdTcFdlaWdodHNXZWlnaHRWMldlaWdodCdcbiAgICAgICAgICAgICAgICAvLyBmYWxsYmFjayB0byBXZWlnaHRWMSAoV2VpZ2h0VjEuNSBpcyBhIHN0cnVjdCwgc2luZ2xlIGZpZWxkKVxuICAgICAgICAgICAgICAgIDogJ1dlaWdodFYxJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXNCbih0aGlzLmNyZWF0ZVR5cGUoJ1dlaWdodCcpKSkge1xuICAgICAgICAgICAgLy8gd2hlcmUgd2UgaGF2ZSBhbiBhbHJlYWR5LXN1cHBsaWVkIEJOIG92ZXJyaWRlLCB3ZSBkb24ndCBjbG9iYmVyXG4gICAgICAgICAgICAvLyBpdCB3aXRoIG91ciBkZXRlY3RlZCB2YWx1ZSAoVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHByZS1kZWZpbmVzXG4gICAgICAgICAgICAvLyB3aGVyZSBXZWlnaHQgbWF5IGJlIGFsaWFzc2VkIHRvIFdlaWdodFYwLCBlLmcuIGluIGVhcmx5IEt1c2FtYSBjaGFpbnMpXG4gICAgICAgICAgICBXZWlnaHQgPSAnV2VpZ2h0VjEnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChXZWlnaHQpIHtcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgZGV0ZWN0ZWQgYSB2ZXJzaW9uLCBhZGp1c3QgdGhlIGRlZmluaXRpb25cbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoeyBXZWlnaHQgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIHNldHMgdGhlIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEobWV0YWRhdGEsIHNpZ25lZEV4dGVuc2lvbnMsIHVzZXJFeHRlbnNpb25zLCBub0luaXRXYXJuKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEgPSBtZXRhZGF0YS5hc0xhdGVzdDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19tZXRhZGF0YVZlcnNpb24gPSBtZXRhZGF0YS52ZXJzaW9uO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2ZpcnN0Q2FsbEluZGV4ID0gbnVsbDtcbiAgICAgICAgLy8gYXR0YWNoIHRoZSBsb29rdXAgYXQgdGhpcyBwb2ludCBhbmQgcmVnaXN0ZXIgcmVsZXZhbnQgdHlwZXMgKGJlZm9yZSBpbmplY3RpbmcpXG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fcmVnaXN0ZXJMb29rdXAodGhpcy5fX2ludGVybmFsX19tZXRhZGF0YS5sb29rdXApO1xuICAgICAgICBpbmplY3RFeHRyaW5zaWNzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFWZXJzaW9uLCB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhQ2FsbHMsIHRoaXMuX19pbnRlcm5hbF9fbW9kdWxlTWFwKTtcbiAgICAgICAgaW5qZWN0RXJyb3JzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFWZXJzaW9uLCB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhRXJyb3JzKTtcbiAgICAgICAgaW5qZWN0RXZlbnRzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEsIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFWZXJzaW9uLCB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhRXZlbnRzKTtcbiAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IGNhbGwgaW5kZXggKHRoZSBsb3dlc3Qgc2VjdGlvbiwgdGhlIGxvd2VzdCBtZXRob2QpXG4gICAgICAgIC8vIGluIG1vc3QgY2hhaW5zIHRoaXMgc2hvdWxkIGJlIDAsMFxuICAgICAgICBjb25zdCBbZGVmU2VjdGlvbl0gPSBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFDYWxscylcbiAgICAgICAgICAgIC5zb3J0KHNvcnREZWNpbWFsU3RyaW5ncyk7XG4gICAgICAgIGlmIChkZWZTZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBbZGVmTWV0aG9kXSA9IE9iamVjdFxuICAgICAgICAgICAgICAgIC5rZXlzKHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGFDYWxsc1tkZWZTZWN0aW9uXSlcbiAgICAgICAgICAgICAgICAuc29ydChzb3J0RGVjaW1hbFN0cmluZ3MpO1xuICAgICAgICAgICAgaWYgKGRlZk1ldGhvZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZmlyc3RDYWxsSW5kZXggPSBuZXcgVWludDhBcnJheShbcGFyc2VJbnQoZGVmU2VjdGlvbiwgMTApLCBwYXJzZUludChkZWZNZXRob2QsIDEwKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNldHVwIHRoZSBhdmFpbGFibGUgZXh0ZW5zaW9uc1xuICAgICAgICB0aGlzLnNldFNpZ25lZEV4dGVuc2lvbnMoc2lnbmVkRXh0ZW5zaW9ucyB8fCAodGhpcy5fX2ludGVybmFsX19tZXRhZGF0YS5leHRyaW5zaWMudmVyc2lvbi5ndChCTl9aRVJPKVxuICAgICAgICAgICAgLy8gRklYTUUgVXNlIHRoZSBleHRlbnNpb24gYW5kIHRoZWlyIGluamVjdGVkIHR5cGVzXG4gICAgICAgICAgICA/IHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEuZXh0cmluc2ljLnNpZ25lZEV4dGVuc2lvbnMubWFwKCh7IGlkZW50aWZpZXIgfSkgPT4gaWRlbnRpZmllci50b1N0cmluZygpKVxuICAgICAgICAgICAgOiBmYWxsYmFja0V4dGVuc2lvbnMpLCB1c2VyRXh0ZW5zaW9ucywgbm9Jbml0V2Fybik7XG4gICAgICAgIC8vIHNldHVwIHRoZSBjaGFpbiBwcm9wZXJ0aWVzIHdpdGggZm9ybWF0IG92ZXJyaWRlc1xuICAgICAgICB0aGlzLnNldENoYWluUHJvcGVydGllcyhleHRyYWN0UHJvcGVydGllcyh0aGlzLCBtZXRhZGF0YSkpO1xuICAgIH1cbiAgICAvLyBzZXRzIHRoZSBhdmFpbGFibGUgc2lnbmVkIGV4dGVuc2lvbnNcbiAgICBzZXRTaWduZWRFeHRlbnNpb25zKHNpZ25lZEV4dGVuc2lvbnMgPSBmYWxsYmFja0V4dGVuc2lvbnMsIHVzZXJFeHRlbnNpb25zLCBub0luaXRXYXJuKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc2lnbmVkRXh0ZW5zaW9ucyA9IHNpZ25lZEV4dGVuc2lvbnM7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fdXNlckV4dGVuc2lvbnMgPSB1c2VyRXh0ZW5zaW9ucztcbiAgICAgICAgaWYgKCFub0luaXRXYXJuKSB7XG4gICAgICAgICAgICBjb25zdCB1bmtub3duID0gZmluZFVua25vd25FeHRlbnNpb25zKHRoaXMuX19pbnRlcm5hbF9fc2lnbmVkRXh0ZW5zaW9ucywgdGhpcy5fX2ludGVybmFsX191c2VyRXh0ZW5zaW9ucyk7XG4gICAgICAgICAgICBpZiAodW5rbm93bi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsLndhcm4oYFVua25vd24gc2lnbmVkIGV4dGVuc2lvbnMgJHt1bmtub3duLmpvaW4oJywgJyl9IGZvdW5kLCB0cmVhdGluZyB0aGVtIGFzIG5vLWVmZmVjdGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgVThhRml4ZWQgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaGV4VG9VOGEsIGlzSGV4LCBpc1N0cmluZywgaXNVOGEsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZXRoZXJldW1FbmNvZGUsIGlzRXRoZXJldW1BZGRyZXNzIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUFjY291bnRJZCh2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvVThhKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNIZXgodmFsdWUpIHx8IGlzRXRoZXJldW1BZGRyZXNzKHZhbHVlLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgIHJldHVybiBoZXhUb1U4YSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1OGFUb1U4YSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgd3JhcHBlciBhcm91bmQgYW4gRXRoZXJldW0tY29tcGF0aWJsZSBBY2NvdW50SWQuIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGhcbiAqIHVuZGVybHlpbmcgYWRkcmVzc2VzICgyMCBieXRlcyBpbiBsZW5ndGgpLCB3ZSBleHRlbmQgZnJvbSBVOGFGaXhlZCB3aGljaCBpc1xuICoganVzdCBhIFVpbnQ4QXJyYXkgd3JhcHBlciB3aXRoIGEgZml4ZWQgbGVuZ3RoLlxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkIGV4dGVuZHMgVThhRml4ZWQge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSA9IG5ldyBVaW50OEFycmF5KCkpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGRlY29kZUFjY291bnRJZCh2YWx1ZSksIDE2MCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1hdGNoXG4gICAgICovXG4gICAgZXEob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuICEhb3RoZXIgJiYgc3VwZXIuZXEoZGVjb2RlQWNjb3VudElkKG90aGVyKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBldGhlcmV1bUVuY29kZSh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnQWNjb3VudElkJztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEJhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaXNCaWdJbnQsIGlzQm4sIGlzSGV4LCBpc051bWJlciwgaXNVOGEsIHU4YUNvbmNhdCwgdThhVG9CbiwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5pbXBvcnQgeyBHZW5lcmljQWNjb3VudEluZGV4IH0gZnJvbSAnLi4vZ2VuZXJpYy9BY2NvdW50SW5kZXguanMnO1xuaW1wb3J0IHsgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkIH0gZnJvbSAnLi9BY2NvdW50SWQuanMnO1xuZXhwb3J0IGNvbnN0IEFDQ09VTlRfSURfUFJFRklYID0gbmV3IFVpbnQ4QXJyYXkoWzB4ZmZdKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVN0cmluZyhyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlQWRkcmVzcyh2YWx1ZSk7XG4gICAgcmV0dXJuIGRlY29kZWQubGVuZ3RoID09PSAyMFxuICAgICAgICA/IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V0aGVyZXVtQWNjb3VudElkJywgW2RlY29kZWRdKVxuICAgICAgICA6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFt1OGFUb0JuKGRlY29kZWQpXSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVVOGEocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gaW5zdGFudGlhdGUgYW4gYWRkcmVzcyB3aXRoIGEgcmF3IHB1YmxpY0tleS4gRG8gdGhpcyBmaXJzdCBiZWZvcmVcbiAgICAvLyB3ZSBjaGVja2luZyB0aGUgZmlyc3QgYnl0ZSwgb3RoZXJ3aXNlIHdlIG1heSBzcGxpdCBhbiBhbHJlYWR5LWV4aXN0ZW50IHZhbGlkIGFkZHJlc3NcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAyMCkge1xuICAgICAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnRXRoZXJldW1BY2NvdW50SWQnLCBbdmFsdWVdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWVbMF0gPT09IDB4ZmYpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V0aGVyZXVtQWNjb3VudElkJywgW3ZhbHVlLnN1YmFycmF5KDEpXSk7XG4gICAgfVxuICAgIGNvbnN0IFtvZmZzZXQsIGxlbmd0aF0gPSBHZW5lcmljQWNjb3VudEluZGV4LnJlYWRMZW5ndGgodmFsdWUpO1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdBY2NvdW50SW5kZXgnLCBbdThhVG9Cbih2YWx1ZS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCkpXSk7XG59XG5mdW5jdGlvbiBkZWNvZGVBZGRyZXNzT3JJbmRleChyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBHZW5lcmljRXRoZXJldW1Mb29rdXBTb3VyY2VcbiAgICAgICAgPyB2YWx1ZS5pbm5lclxuICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkIHx8IHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0FjY291bnRJbmRleFxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBpc1U4YSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNIZXgodmFsdWUpXG4gICAgICAgICAgICAgICAgPyBkZWNvZGVVOGEocmVnaXN0cnksIHU4YVRvVThhKHZhbHVlKSlcbiAgICAgICAgICAgICAgICA6IGlzQm4odmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSB8fCBpc0JpZ0ludCh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdBY2NvdW50SW5kZXgnLCBbdmFsdWVdKVxuICAgICAgICAgICAgICAgICAgICA6IGRlY29kZVN0cmluZyhyZWdpc3RyeSwgdmFsdWUpO1xufVxuLyoqXG4gKiBAbmFtZSBHZW5lcmljRXRoZXJldW1Mb29rdXBTb3VyY2VcbiAqIEBkZXNjcmlwdGlvblxuICogQSB3cmFwcGVyIGFyb3VuZCBhbiBFdGhlcmV1bUFjY291bnRJZCBhbmQvb3IgQWNjb3VudEluZGV4IHRoYXQgaXMgZW5jb2RlZCB3aXRoIGEgcHJlZml4LlxuICogU2luY2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCB1bmRlcmx5aW5nIHB1YmxpY0tleXMgKG9yIHNob3J0ZXIgZW5jb2RlZCBhZGRyZXNzZXMpLFxuICogd2UgZXh0ZW5kIGZyb20gQmFzZSB3aXRoIGFuIEFjY291bnRJZC9BY2NvdW50SW5kZXggd3JhcHBlci4gQmFzaWNhbGx5IHRoZSBBZGRyZXNzXG4gKiBpcyBlbmNvZGVkIGFzIGBbIDxwcmVmaXgtYnl0ZT4sIC4uLnB1YmxpY0tleS8uLi5ieXRlcyBdYCBhcyBwZXIgc3BlY1xuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V0aGVyZXVtTG9va3VwU291cmNlIGV4dGVuZHMgQWJzdHJhY3RCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUgPSBuZXcgVWludDhBcnJheSgpKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBkZWNvZGVBZGRyZXNzT3JJbmRleChyZWdpc3RyeSwgdmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgY29uc3QgcmF3TGVuZ3RoID0gdGhpcy5fcmF3TGVuZ3RoO1xuICAgICAgICByZXR1cm4gcmF3TGVuZ3RoICsgKFxuICAgICAgICAvLyBmb3IgMSBieXRlIEFjY291bnRJbmRleGVzLCB3ZSBhcmUgbm90IGFkZGluZyBhIHNwZWNpZmljIHByZWZpeFxuICAgICAgICByYXdMZW5ndGggPiAxXG4gICAgICAgICAgICA/IDFcbiAgICAgICAgICAgIDogMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSByYXcgdmFsdWUsIGVpdGhlciBBY2NvdW50SW5kZXggb3IgQWNjb3VudElkXG4gICAgICovXG4gICAgZ2V0IF9yYXdMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyIGluc3RhbmNlb2YgR2VuZXJpY0FjY291bnRJbmRleFxuICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LmNhbGNMZW5ndGgodGhpcy5pbm5lcilcbiAgICAgICAgICAgIDogdGhpcy5pbm5lci5lbmNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdBZGRyZXNzJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IHRoaXMuaW5uZXIudG9VOGEoKS5zdWJhcnJheSgwLCB0aGlzLl9yYXdMZW5ndGgpO1xuICAgICAgICByZXR1cm4gaXNCYXJlXG4gICAgICAgICAgICA/IGVuY29kZWRcbiAgICAgICAgICAgIDogdThhQ29uY2F0KHRoaXMuaW5uZXIgaW5zdGFuY2VvZiBHZW5lcmljQWNjb3VudEluZGV4XG4gICAgICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LndyaXRlTGVuZ3RoKGVuY29kZWQpXG4gICAgICAgICAgICAgICAgOiBBQ0NPVU5UX0lEX1BSRUZJWCwgZW5jb2RlZCk7XG4gICAgfVxufVxuIiwiZXhwb3J0IHsgR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkIH0gZnJvbSAnLi9BY2NvdW50SWQuanMnO1xuZXhwb3J0IHsgR2VuZXJpY0V0aGVyZXVtTG9va3VwU291cmNlIH0gZnJvbSAnLi9Mb29rdXBTb3VyY2UuanMnO1xuIiwiaW1wb3J0IHsgQWJzdHJhY3RCYXNlIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGNvbXBhY3RBZGRMZW5ndGgsIGNvbXBhY3RGcm9tVThhLCBjb21wYWN0VG9VOGEsIGlzSGV4LCBpc1U4YSwgb2JqZWN0UHJvcGVydHksIG9iamVjdFNwcmVhZCwgdThhQ29uY2F0LCB1OGFUb0hleCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBFWFRSSU5TSUNfVkVSU0lPTiBhcyBMQVRFU1RfRVhUUklOU0lDX1ZFUlNJT04gfSBmcm9tICcuL3Y0L0V4dHJpbnNpYy5qcyc7XG5pbXBvcnQgeyBCSVRfU0lHTkVELCBCSVRfVU5TSUdORUQsIERFRkFVTFRfVkVSU0lPTiwgVU5NQVNLX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5jb25zdCBWRVJTSU9OUyA9IFtcbiAgICAnRXh0cmluc2ljVW5rbm93bicsIC8vIHYwIGlzIHVua25vd25cbiAgICAnRXh0cmluc2ljVW5rbm93bicsXG4gICAgJ0V4dHJpbnNpY1Vua25vd24nLFxuICAgICdFeHRyaW5zaWNVbmtub3duJyxcbiAgICAnRXh0cmluc2ljVjQnXG5dO1xuZXhwb3J0IHsgTEFURVNUX0VYVFJJTlNJQ19WRVJTSU9OIH07XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBuZXdGcm9tVmFsdWUocmVnaXN0cnksIHZhbHVlLCB2ZXJzaW9uKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0V4dHJpbnNpYykge1xuICAgICAgICByZXR1cm4gdmFsdWUudW53cmFwKCk7XG4gICAgfVxuICAgIGNvbnN0IGlzU2lnbmVkID0gKHZlcnNpb24gJiBCSVRfU0lHTkVEKSA9PT0gQklUX1NJR05FRDtcbiAgICBjb25zdCB0eXBlID0gVkVSU0lPTlNbdmVyc2lvbiAmIFVOTUFTS19WRVJTSU9OXSB8fCBWRVJTSU9OU1swXTtcbiAgICAvLyB3ZSBjYXN0IGhlcmUgc2luY2UgdGhlIFZFUlNJT04gZGVmaW5pdGlvbiBpcyBpbmNyZWRpYmx5IGJyb2FkIC0gd2UgZG9uJ3QgaGF2ZSBhXG4gICAgLy8gc2xpY2UgZm9yIFwib25seSBhZGQgZXh0cmluc2ljIHR5cGVzXCIsIGFuZCBtb3JlIHN0cmluZyBkZWZpbml0aW9ucyBiZWNvbWUgdW53aWVsZHlcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSh0eXBlLCBbdmFsdWUsIHsgaXNTaWduZWQsIHZlcnNpb24gfV0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlRXh0cmluc2ljKHJlZ2lzdHJ5LCB2YWx1ZSwgdmVyc2lvbiA9IERFRkFVTFRfVkVSU0lPTikge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNIZXgodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVOGEocmVnaXN0cnksIHU4YVRvVThhKHZhbHVlKSwgdmVyc2lvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgcmVnaXN0cnkuY3JlYXRlQ2xhc3NVbnNhZmUoJ0NhbGwnKSkge1xuICAgICAgICByZXR1cm4gbmV3RnJvbVZhbHVlKHJlZ2lzdHJ5LCB7IG1ldGhvZDogdmFsdWUgfSwgdmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXdGcm9tVmFsdWUocmVnaXN0cnksIHZhbHVlLCB2ZXJzaW9uKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZVU4YShyZWdpc3RyeSwgdmFsdWUsIHZlcnNpb24pIHtcbiAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3RnJvbVZhbHVlKHJlZ2lzdHJ5LCBuZXcgVWludDhBcnJheSgpLCB2ZXJzaW9uKTtcbiAgICB9XG4gICAgY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IGNvbXBhY3RGcm9tVThhKHZhbHVlKTtcbiAgICBjb25zdCB0b3RhbCA9IG9mZnNldCArIGxlbmd0aC50b051bWJlcigpO1xuICAgIGlmICh0b3RhbCA+IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dHJpbnNpYzogbGVuZ3RoIGxlc3MgdGhhbiByZW1haW5kZXIsIGV4cGVjdGVkIGF0IGxlYXN0ICR7dG90YWx9LCBmb3VuZCAke3ZhbHVlLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHZhbHVlLnN1YmFycmF5KG9mZnNldCwgdG90YWwpO1xuICAgIHJldHVybiBuZXdGcm9tVmFsdWUocmVnaXN0cnksIGRhdGEuc3ViYXJyYXkoMSksIGRhdGFbMF0pO1xufVxuY2xhc3MgRXh0cmluc2ljQmFzZSBleHRlbmRzIEFic3RyYWN0QmFzZSB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlLCBpbml0aWFsVThhTGVuZ3RoKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSwgaW5pdGlhbFU4YUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNpZ25LZXlzID0gT2JqZWN0LmtleXMocmVnaXN0cnkuZ2V0U2lnbmVkRXh0ZW5zaW9uVHlwZXMoKSk7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IChrZXkpID0+IHRoaXMuaW5uZXIuc2lnbmF0dXJlW2tleV07XG4gICAgICAgIC8vIFRoaXMgaXMgb24gdGhlIGFic3RyYWN0IGNsYXNzLCBlbnN1cmluZyB0aGF0IGhhc093blByb3BlcnR5IG9wZXJhdGVzXG4gICAgICAgIC8vIGNvcnJlY3RseSwgaS5lLiBpdCBuZWVkcyB0byBiZSBvbiB0aGUgYmFzZSBjbGFzcyBleHBvc2luZyBpdFxuICAgICAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBzaWduS2V5cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBvYmplY3RQcm9wZXJ0eSh0aGlzLCBzaWduS2V5c1tpXSwgZ2V0dGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gZm9yIHRoZSBjYWxsLCBleHBvc2VzIGFyZ3Mgc28gaXQgaXMgY29tcGF0aWJsZSB3aXRoIFtbQ2FsbF1dXG4gICAgICovXG4gICAgZ2V0IGFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZC5hcmdzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFyZ3VtZW50IGRlZmluaXRpb25zLCBjb21wYXRpYmxlIHdpdGggW1tDYWxsXV1cbiAgICAgKi9cbiAgICBnZXQgYXJnc0RlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kLmFyZ3NEZWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0dWFsIGBbc2VjdGlvbkluZGV4LCBtZXRob2RJbmRleF1gIGFzIHVzZWQgaW4gdGhlIENhbGxcbiAgICAgKi9cbiAgICBnZXQgY2FsbEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QuY2FsbEluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFjdHVhbCBkYXRhIGZvciB0aGUgQ2FsbFxuICAgICAqL1xuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QuZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBlcmEgZm9yIHRoaXMgZXh0cmluc2ljXG4gICAgICovXG4gICAgZ2V0IGVyYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIuc2lnbmF0dXJlLmVyYTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9VOGEoKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBgdHJ1ZWAgaWQgdGhlIGV4dHJpbnNpYyBpcyBzaWduZWRcbiAgICAgKi9cbiAgICBnZXQgaXNTaWduZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnNpZ25hdHVyZS5pc1NpZ25lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIGFjdHVhbCBkYXRhLCBleGNsdWRpbmcgcHJlZml4XG4gICAgICovXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9VOGEodHJ1ZSkubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRnVuY3Rpb25NZXRhZGF0YUxhdGVzdF1dIHRoYXQgZGVzY3JpYmVzIHRoZSBleHRyaW5zaWNcbiAgICAgKi9cbiAgICBnZXQgbWV0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kLm1ldGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgW1tDYWxsXV0gdGhpcyBleHRyaW5zaWMgd3JhcHNcbiAgICAgKi9cbiAgICBnZXQgbWV0aG9kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5tZXRob2Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbm9uY2UgZm9yIHRoaXMgZXh0cmluc2ljXG4gICAgICovXG4gICAgZ2V0IG5vbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5zaWduYXR1cmUubm9uY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0dWFsIFtbRWNkc2FTaWduYXR1cmVdXSwgW1tFZDI1NTE5U2lnbmF0dXJlXV0gb3IgW1tTcjI1NTE5U2lnbmF0dXJlXV1cbiAgICAgKi9cbiAgICBnZXQgc2lnbmF0dXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5zaWduYXR1cmUuc2lnbmF0dXJlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbQWRkcmVzc11dIHRoYXQgc2lnbmVkXG4gICAgICovXG4gICAgZ2V0IHNpZ25lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIuc2lnbmF0dXJlLnNpZ25lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvcndhcmRzIGNvbXBhdFxuICAgICAqL1xuICAgIGdldCB0aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnNpZ25hdHVyZS50aXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBGb3J3YXJkIGNvbXBhdFxuICAgICAqL1xuICAgIGdldCBhc3NldElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5zaWduYXR1cmUuYXNzZXRJZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvcndhcmQgY29tcGF0XG4gICAgICovXG4gICAgZ2V0IG1ldGFkYXRhSGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIuc2lnbmF0dXJlLm1ldGFkYXRhSGFzaDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHJhdyB0cmFuc2FjdGlvbiB2ZXJzaW9uIChub3QgZmxhZ2dlZCB3aXRoIHNpZ25pbmcgaW5mb3JtYXRpb24pXG4gICAgKi9cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIudmVyc2lvbjtcbiAgICB9XG4gICAgZ2V0IGlubmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bndyYXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGVuY29kZWQgdmVyc2lvbiBmbGFnXG4gICAgKi9cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSB8ICh0aGlzLmlzU2lnbmVkID8gQklUX1NJR05FRCA6IEJJVF9VTlNJR05FRCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHNvdXJjZSBtYXRjaGVzIHRoaXMgaW4gdHlwZVxuICAgICAqL1xuICAgIGlzKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZC5pcyhvdGhlcik7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVud3JhcCgpO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1xuICogQGRlc2NyaXB0aW9uXG4gKiBSZXByZXNlbnRhdGlvbiBvZiBhbiBFeHRyaW5zaWMgaW4gdGhlIHN5c3RlbS4gSXQgY29udGFpbnMgdGhlIGFjdHVhbCBjYWxsLFxuICogKG9wdGlvbmFsKSBzaWduYXR1cmUgYW5kIGVuY29kZXMgd2l0aCBhbiBhY3R1YWwgbGVuZ3RoIHByZWZpeFxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGFyaXR5dGVjaC93aWtpL2Jsb2IvbWFzdGVyL0V4dHJpbnNpYy5tZCN0aGUtZXh0cmluc2ljLWZvcm1hdC1mb3Itbm9kZX0uXG4gKlxuICogQ2FuIGJlOlxuICogLSBzaWduZWQsIHRvIGNyZWF0ZSBhIHRyYW5zYWN0aW9uXG4gKiAtIGxlZnQgYXMgaXMsIHRvIGNyZWF0ZSBhbiBpbmhlcmVudFxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpYyBleHRlbmRzIEV4dHJpbnNpY0Jhc2Uge1xuICAgIF9faW50ZXJuYWxfX2hhc2hDYWNoZTtcbiAgICBzdGF0aWMgTEFURVNUX0VYVFJJTlNJQ19WRVJTSU9OID0gTEFURVNUX0VYVFJJTlNJQ19WRVJTSU9OO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSwgeyB2ZXJzaW9uIH0gPSB7fSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZGVjb2RlRXh0cmluc2ljKHJlZ2lzdHJ5LCB2YWx1ZSwgdmVyc2lvbikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIGhhc2ggb2YgdGhlIGNvbnRlbnRzXG4gICAgICovXG4gICAgZ2V0IGhhc2goKSB7XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX19oYXNoQ2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGFzaENhY2hlID0gc3VwZXIuaGFzaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19oYXNoQ2FjaGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBJbmplY3RzIGFuIGFscmVhZHktZ2VuZXJhdGVkIHNpZ25hdHVyZSBpbnRvIHRoZSBleHRyaW5zaWNcbiAgICAgKi9cbiAgICBhZGRTaWduYXR1cmUoc2lnbmVyLCBzaWduYXR1cmUsIHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5pbm5lci5hZGRTaWduYXR1cmUoc2lnbmVyLCBzaWduYXR1cmUsIHBheWxvYWQpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hhc2hDYWNoZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICBjb25zdCBlbmNvZGVkID0gdThhQ29uY2F0KC4uLnRoaXMudG9VOGFJbm5lcigpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlubmVyOiB0aGlzLmlzU2lnbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlubmVyLmluc3BlY3QoKS5pbm5lclxuICAgICAgICAgICAgICAgIDogdGhpcy5pbm5lci5tZXRob2QuaW5zcGVjdCgpLmlubmVyLFxuICAgICAgICAgICAgb3V0ZXI6IFtjb21wYWN0VG9VOGEoZW5jb2RlZC5sZW5ndGgpLCBuZXcgVWludDhBcnJheShbdGhpcy52ZXJzaW9uXSldXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTaWduIHRoZSBleHRyaW5zaWMgd2l0aCBhIHNwZWNpZmljIGtleXBhaXJcbiAgICAgKi9cbiAgICBzaWduKGFjY291bnQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5pbm5lci5zaWduKGFjY291bnQsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hhc2hDYWNoZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmliZSBBZGRzIGEgZmFrZSBzaWduYXR1cmUgdG8gdGhlIGV4dHJpbnNpY1xuICAgICAqL1xuICAgIHNpZ25GYWtlKHNpZ25lciwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmlubmVyLnNpZ25GYWtlKHNpZ25lciwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGFzaENhY2hlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvSGV4KGlzQmFyZSkge1xuICAgICAgICByZXR1cm4gdThhVG9IZXgodGhpcy50b1U4YShpc0JhcmUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0U3ByZWFkKHt9LCB7XG4gICAgICAgICAgICBpc1NpZ25lZDogdGhpcy5pc1NpZ25lZCxcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QudG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpXG4gICAgICAgIH0sIHRoaXMuaXNTaWduZWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFzc2V0SWQ6IHRoaXMuYXNzZXRJZCA/IHRoaXMuYXNzZXRJZC50b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSkgOiBudWxsLFxuICAgICAgICAgICAgICAgIGVyYTogdGhpcy5lcmEudG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhSGFzaDogdGhpcy5tZXRhZGF0YUhhc2ggPyB0aGlzLm1ldGFkYXRhSGFzaC50b0hleCgpIDogbnVsbCxcbiAgICAgICAgICAgICAgICBub25jZTogdGhpcy5ub25jZS50b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSksXG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlOiB0aGlzLnNpZ25hdHVyZS50b0hleCgpLFxuICAgICAgICAgICAgICAgIHNpZ25lcjogdGhpcy5zaWduZXIudG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpLFxuICAgICAgICAgICAgICAgIHRpcDogdGhpcy50aXAudG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9IZXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnRXh0cmluc2ljJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBsZW5ndGgtcHJlZml4ZWRcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IHU4YUNvbmNhdCguLi50aGlzLnRvVThhSW5uZXIoKSk7XG4gICAgICAgIHJldHVybiBpc0JhcmVcbiAgICAgICAgICAgID8gZW5jb2RlZFxuICAgICAgICAgICAgOiBjb21wYWN0QWRkTGVuZ3RoKGVuY29kZWQpO1xuICAgIH1cbiAgICB0b1U4YUlubmVyKCkge1xuICAgICAgICAvLyB3ZSBkbyBub3QgYXBwbHkgYmFyZSB0byB0aGUgaW50ZXJuYWwgdmFsdWVzLCByYXRoZXIgdGhpcyBvbmx5IGRldGVybWluZXMgb3V0IGxlbmd0aCBhZGRpdGlvbixcbiAgICAgICAgLy8gd2hlcmUgd2Ugc3RyaXAgYWxsIGxlbmd0aHMgdGhpcyBjcmVhdGVzIGFuIGV4dHJpbnNpYyB0aGF0IGNhbm5vdCBiZSBkZWNvZGVkXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgVWludDhBcnJheShbdGhpcy52ZXJzaW9uXSksXG4gICAgICAgICAgICB0aGlzLmlubmVyLnRvVThhKClcbiAgICAgICAgXTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBFbnVtLCBSYXcsIFR1cGxlLCBVNjQgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgYm5Ub0JuLCBmb3JtYXROdW1iZXIsIGhleFRvVThhLCBpc0hleCwgaXNPYmplY3QsIGlzVThhLCB1OGFUb0JuLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IElNTU9SVEFMX0VSQSB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmZ1bmN0aW9uIGdldFRyYWlsaW5nWmVyb3MocGVyaW9kKSB7XG4gICAgY29uc3QgYmluYXJ5ID0gcGVyaW9kLnRvU3RyaW5nKDIpO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGJpbmFyeVtiaW5hcnkubGVuZ3RoIC0gMSAtIGluZGV4XSA9PT0gJzAnKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZU1vcnRhbEVyYShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBpZiAoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlTW9ydGFsVThhKHJlZ2lzdHJ5LCB1OGFUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVTY0KHJlZ2lzdHJ5KSwgbmV3IFU2NChyZWdpc3RyeSldO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZU1vcnRhbE9iamVjdChyZWdpc3RyeSwgdmFsdWUpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSBwYXNzZWQgdG8gTW9ydGFsIGVyYScpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlTW9ydGFsT2JqZWN0KHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGNvbnN0IHsgY3VycmVudCwgcGVyaW9kIH0gPSB2YWx1ZTtcbiAgICBsZXQgY2FsUGVyaW9kID0gTWF0aC5wb3coMiwgTWF0aC5jZWlsKE1hdGgubG9nMihwZXJpb2QpKSk7XG4gICAgY2FsUGVyaW9kID0gTWF0aC5taW4oTWF0aC5tYXgoY2FsUGVyaW9kLCA0KSwgMSA8PCAxNik7XG4gICAgY29uc3QgcGhhc2UgPSBjdXJyZW50ICUgY2FsUGVyaW9kO1xuICAgIGNvbnN0IHF1YW50aXplRmFjdG9yID0gTWF0aC5tYXgoY2FsUGVyaW9kID4+IDEyLCAxKTtcbiAgICBjb25zdCBxdWFudGl6ZWRQaGFzZSA9IHBoYXNlIC8gcXVhbnRpemVGYWN0b3IgKiBxdWFudGl6ZUZhY3RvcjtcbiAgICByZXR1cm4gW25ldyBVNjQocmVnaXN0cnksIGNhbFBlcmlvZCksIG5ldyBVNjQocmVnaXN0cnksIHF1YW50aXplZFBoYXNlKV07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVNb3J0YWxVOGEocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW25ldyBVNjQocmVnaXN0cnkpLCBuZXcgVTY0KHJlZ2lzdHJ5KV07XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0ID0gdThhVG9Cbih2YWx1ZS5zdWJhcnJheSgwLCAxKSkudG9OdW1iZXIoKTtcbiAgICBjb25zdCBzZWNvbmQgPSB1OGFUb0JuKHZhbHVlLnN1YmFycmF5KDEsIDIpKS50b051bWJlcigpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBmaXJzdCArIChzZWNvbmQgPDwgOCk7XG4gICAgY29uc3QgcGVyaW9kID0gMiA8PCAoZW5jb2RlZCAlICgxIDw8IDQpKTtcbiAgICBjb25zdCBxdWFudGl6ZUZhY3RvciA9IE1hdGgubWF4KHBlcmlvZCA+PiAxMiwgMSk7XG4gICAgY29uc3QgcGhhc2UgPSAoZW5jb2RlZCA+PiA0KSAqIHF1YW50aXplRmFjdG9yO1xuICAgIGlmIChwZXJpb2QgPCA0IHx8IHBoYXNlID49IHBlcmlvZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSBwYXNzZWQgdG8gTW9ydGFsIGVyYScpO1xuICAgIH1cbiAgICByZXR1cm4gW25ldyBVNjQocmVnaXN0cnksIHBlcmlvZCksIG5ldyBVNjQocmVnaXN0cnksIHBoYXNlKV07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVFeHRyaW5zaWNFcmEodmFsdWUgPSBuZXcgVWludDhBcnJheSgpKSB7XG4gICAgaWYgKGlzVThhKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKCF2YWx1ZS5sZW5ndGggfHwgdmFsdWVbMF0gPT09IDApXG4gICAgICAgICAgICA/IG5ldyBVaW50OEFycmF5KFswXSlcbiAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoWzEsIHZhbHVlWzBdLCB2YWx1ZVsxXV0pO1xuICAgIH1cbiAgICBlbHNlIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFswXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0V4dHJpbnNpY0VyYSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlRXh0cmluc2ljRXJhKHZhbHVlLnRvVThhKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZUV4dHJpbnNpY0VyYShoZXhUb1U4YSh2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtrLCB2XSkgPT4gW2sudG9Mb3dlckNhc2UoKSwgdl0pO1xuICAgICAgICBjb25zdCBtb3J0YWwgPSBlbnRyaWVzLmZpbmQoKFtrXSkgPT4gay50b0xvd2VyQ2FzZSgpID09PSAnbW9ydGFsZXJhJyk7XG4gICAgICAgIGNvbnN0IGltbW9ydGFsID0gZW50cmllcy5maW5kKChba10pID0+IGsudG9Mb3dlckNhc2UoKSA9PT0gJ2ltbW9ydGFsZXJhJyk7XG4gICAgICAgIC8vIHRoaXMgaXMgdG8gZGUtc2VyaWFsaXplIGZyb20gSlNPTlxuICAgICAgICByZXR1cm4gbW9ydGFsXG4gICAgICAgICAgICA/IHsgTW9ydGFsRXJhOiBtb3J0YWxbMV0gfVxuICAgICAgICAgICAgOiBpbW1vcnRhbFxuICAgICAgICAgICAgICAgID8geyBJbW1vcnRhbEVyYTogaW1tb3J0YWxbMV0gfVxuICAgICAgICAgICAgICAgIDogeyBNb3J0YWxFcmE6IHZhbHVlIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIHBhc3NlZCB0byBFcmEnKTtcbn1cbi8qKlxuICogQG5hbWUgSW1tb3J0YWxFcmFcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIEltbW9ydGFsRXJhIGZvciBhbiBleHRyaW5zaWNcbiAqL1xuZXhwb3J0IGNsYXNzIEltbW9ydGFsRXJhIGV4dGVuZHMgUmF3IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgX3ZhbHVlKSB7XG4gICAgICAgIC8vIEZvciBpbW1vcnRhbHMsIHdlIGFsd2F5cyBwcm92aWRlIHRoZSBrbm93biB2YWx1ZSAoaS5lLiB0cmVhdGVkIGFzIGFcbiAgICAgICAgLy8gY29uc3RhbnQgbm8gbWF0dGVyIGhvdyBpdCBpcyBjb25zdHJ1Y3RlZCAtIGl0IGlzIGEgZml4ZWQgc3RydWN0dXJlKVxuICAgICAgICBzdXBlcihyZWdpc3RyeSwgSU1NT1JUQUxfRVJBKTtcbiAgICB9XG59XG4vKipcbiAqIEBuYW1lIE1vcnRhbEVyYVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgTW9ydGFsRXJhIGZvciBhbiBleHRyaW5zaWMsIGluZGljYXRpbmcgcGVyaW9kIGFuZCBwaGFzZVxuICovXG5leHBvcnQgY2xhc3MgTW9ydGFsRXJhIGV4dGVuZHMgVHVwbGUge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgcGVyaW9kOiBVNjQsXG4gICAgICAgICAgICBwaGFzZTogVTY0XG4gICAgICAgIH0sIGRlY29kZU1vcnRhbEVyYShyZWdpc3RyeSwgdmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZWQgbGVuZ3RoIGZvciBtb3J0YWxzIG9jY3VweSAyIGJ5dGVzLCBkaWZmZXJlbnQgZnJvbSB0aGUgYWN0dWFsIFR1cGxlIHNpbmNlIGl0IGlzIGVuY29kZWQuIFRoaXMgaXMgYSBzaG9ydGN1dCBmcm8gYHRvVThhKCkubGVuZ3RoYFxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gMiB8IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgcGVyaW9kIG9mIHRoaXMgTW9ydGFsIHdyYXBzIGFzIGEgW1tVNjRdXVxuICAgICAqL1xuICAgIGdldCBwZXJpb2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzWzBdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHBoYXNlIG9mIHRoaXMgTW9ydGFsIHdyYXBzIGFzIGEgW1tVNjRdXVxuICAgICAqL1xuICAgIGdldCBwaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbMV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBlcmlvZDogZm9ybWF0TnVtYmVyKHRoaXMucGVyaW9kKSxcbiAgICAgICAgICAgIHBoYXNlOiBmb3JtYXROdW1iZXIodGhpcy5waGFzZSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgdmFsdWVcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSGV4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIHRoZSB2YWx1ZSBhcyBhIFVpbnQ4QXJyYXkgYXMgcGVyIHRoZSBwYXJpdHktY29kZWMgc3BlY2lmaWNhdGlvbnNcbiAgICAgKiBAcGFyYW0gaXNCYXJlIHRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIG5vbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgcHJlZml4ZXMgKGludGVybmFsKVxuICAgICAqIFBlcmlvZCBhbmQgcGhhc2UgYXJlIGVuY29kZWQ6XG4gICAgICogICAtIFRoZSBwZXJpb2Qgb2YgdmFsaWRpdHkgZnJvbSB0aGUgYmxvY2sgaGFzaCBmb3VuZCBpbiB0aGUgc2lnbmluZyBtYXRlcmlhbC5cbiAgICAgKiAgIC0gVGhlIHBoYXNlIGluIHRoZSBwZXJpb2QgdGhhdCB0aGlzIHRyYW5zYWN0aW9uJ3MgbGlmZXRpbWUgYmVnaW5zIChhbmQsIGltcG9ydGFudGx5LFxuICAgICAqICAgICBpbXBsaWVzIHdoaWNoIGJsb2NrIGhhc2ggaXMgaW5jbHVkZWQgaW4gdGhlIHNpZ25hdHVyZSBtYXRlcmlhbCkuIElmIHRoZSBgcGVyaW9kYCBpc1xuICAgICAqICAgICBncmVhdGVyIHRoYW4gMSA8PCAxMiwgdGhlbiBpdCB3aWxsIGJlIGEgZmFjdG9yIG9mIHRoZSB0aW1lcyBncmVhdGVyIHRoYW4gMTw8MTIgdGhhdFxuICAgICAqICAgICBgcGVyaW9kYCBpcy5cbiAgICAgKi9cbiAgICB0b1U4YShfaXNCYXJlKSB7XG4gICAgICAgIGNvbnN0IHBlcmlvZCA9IHRoaXMucGVyaW9kLnRvTnVtYmVyKCk7XG4gICAgICAgIGNvbnN0IGVuY29kZWQgPSBNYXRoLm1pbigxNSwgTWF0aC5tYXgoMSwgZ2V0VHJhaWxpbmdaZXJvcyhwZXJpb2QpIC0gMSkpICsgKCh0aGlzLnBoYXNlLnRvTnVtYmVyKCkgLyBNYXRoLm1heChwZXJpb2QgPj4gMTIsIDEpKSA8PCA0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtcbiAgICAgICAgICAgIGVuY29kZWQgJiAweGZmLFxuICAgICAgICAgICAgZW5jb2RlZCA+PiA4XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBibG9jayBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBlcmEgd2hvc2UgcHJvcGVydGllcyB0aGlzIG9iamVjdCBkZXNjcmliZXMgdGhhdCBgY3VycmVudGAgYmVsb25ncyB0by5cbiAgICAgKi9cbiAgICBiaXJ0aChjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHBoYXNlID0gdGhpcy5waGFzZS50b051bWJlcigpO1xuICAgICAgICBjb25zdCBwZXJpb2QgPSB0aGlzLnBlcmlvZC50b051bWJlcigpO1xuICAgICAgICAvLyBGSVhNRSBObyB0b051bWJlcigpIGhlcmVcbiAgICAgICAgcmV0dXJuICh+figoTWF0aC5tYXgoYm5Ub0JuKGN1cnJlbnQpLnRvTnVtYmVyKCksIHBoYXNlKSAtIHBoYXNlKSAvIHBlcmlvZCkgKiBwZXJpb2QpICsgcGhhc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIGJsb2NrIG51bWJlciBvZiB0aGUgZmlyc3QgYmxvY2sgYXQgd2hpY2ggdGhlIGVyYSBoYXMgZW5kZWQuXG4gICAgICovXG4gICAgZGVhdGgoY3VycmVudCkge1xuICAgICAgICAvLyBGSVhNRSBObyB0b051bWJlcigpIGhlcmVcbiAgICAgICAgcmV0dXJuIHRoaXMuYmlydGgoY3VycmVudCkgKyB0aGlzLnBlcmlvZC50b051bWJlcigpO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY0VyYVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZXJhIGZvciBhbiBleHRyaW5zaWMsIGluZGljYXRpbmcgZWl0aGVyIGEgbW9ydGFsIG9yIGltbW9ydGFsIGV4dHJpbnNpY1xuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpY0VyYSBleHRlbmRzIEVudW0ge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgSW1tb3J0YWxFcmEsXG4gICAgICAgICAgICBNb3J0YWxFcmFcbiAgICAgICAgfSwgZGVjb2RlRXh0cmluc2ljRXJhKHZhbHVlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBPdmVycmlkZSB0aGUgZW5jb2RlZCBsZW5ndGggbWV0aG9kXG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW1tb3J0YWxFcmFcbiAgICAgICAgICAgID8gdGhpcy5hc0ltbW9ydGFsRXJhLmVuY29kZWRMZW5ndGhcbiAgICAgICAgICAgIDogdGhpcy5hc01vcnRhbEVyYS5lbmNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgaXRlbSBhcyBhIFtbSW1tb3J0YWxFcmFdXVxuICAgICAqL1xuICAgIGdldCBhc0ltbW9ydGFsRXJhKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJbW1vcnRhbEVyYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAnJHt0aGlzLnR5cGV9JyB2aWEgYXNJbW1vcnRhbEVyYWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgaXRlbSBhcyBhIFtbTW9ydGFsRXJhXV1cbiAgICAgKi9cbiAgICBnZXQgYXNNb3J0YWxFcmEoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc01vcnRhbEVyYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAnJHt0aGlzLnR5cGV9JyB2aWEgYXNNb3J0YWxFcmFgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbm5lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIGB0cnVlYCBpZiBJbW1vcnRhbFxuICAgICAqL1xuICAgIGdldCBpc0ltbW9ydGFsRXJhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIGB0cnVlYCBpZiBNb3J0YWxcbiAgICAgKi9cbiAgICBnZXQgaXNNb3J0YWxFcmEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID4gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIHBhcml0eS1jb2RlYyBzcGVjaWZpY2F0aW9uc1xuICAgICAqIEBwYXJhbSBpc0JhcmUgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBwcmVmaXhlcyAoaW50ZXJuYWwpXG4gICAgICovXG4gICAgdG9VOGEoaXNCYXJlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW9ydGFsRXJhXG4gICAgICAgICAgICA/IHRoaXMuYXNNb3J0YWxFcmEudG9VOGEoaXNCYXJlKVxuICAgICAgICAgICAgOiB0aGlzLmFzSW1tb3J0YWxFcmEudG9VOGEoaXNCYXJlKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBBYnN0cmFjdEJhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBERUZBVUxUX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5jb25zdCBWRVJTSU9OUyA9IFtcbiAgICAnRXh0cmluc2ljUGF5bG9hZFVua25vd24nLCAvLyB2MCBpcyB1bmtub3duXG4gICAgJ0V4dHJpbnNpY1BheWxvYWRVbmtub3duJyxcbiAgICAnRXh0cmluc2ljUGF5bG9hZFVua25vd24nLFxuICAgICdFeHRyaW5zaWNQYXlsb2FkVW5rbm93bicsXG4gICAgJ0V4dHJpbnNpY1BheWxvYWRWNCdcbl07XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVFeHRyaW5zaWNQYXlsb2FkKHJlZ2lzdHJ5LCB2YWx1ZSwgdmVyc2lvbiA9IERFRkFVTFRfVkVSU0lPTikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS51bndyYXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoVkVSU0lPTlNbdmVyc2lvbl0gfHwgVkVSU0lPTlNbMF0sIFt2YWx1ZSwgeyB2ZXJzaW9uIH1dKTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBzaWduaW5nIHBheWxvYWQgZm9yIGFuIFtbRXh0cmluc2ljXV0uIEZvciB0aGUgZmluYWwgZW5jb2RpbmcsIGl0IGlzIHZhcmlhYmxlIGxlbmd0aCBiYXNlZFxuICogb24gdGhlIGNvbnRlbnRzIGluY2x1ZGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljRXh0cmluc2ljUGF5bG9hZCBleHRlbmRzIEFic3RyYWN0QmFzZSB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlLCB7IHZlcnNpb24gfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBkZWNvZGVFeHRyaW5zaWNQYXlsb2FkKHJlZ2lzdHJ5LCB2YWx1ZSwgdmVyc2lvbikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGJsb2NrIFtbQmxvY2tIYXNoXV0gdGhlIHNpZ25hdHVyZSBhcHBsaWVzIHRvIChtb3J0YWwvaW1tb3J0YWwpXG4gICAgICovXG4gICAgZ2V0IGJsb2NrSGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIuYmxvY2tIYXNoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXh0cmluc2ljRXJhXV1cbiAgICAgKi9cbiAgICBnZXQgZXJhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5lcmE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZ2VuZXNpcyBibG9jayBbW0Jsb2NrSGFzaF1dIHRoZSBzaWduYXR1cmUgYXBwbGllcyB0b1xuICAgICAqL1xuICAgIGdldCBnZW5lc2lzSGFzaCgpIHtcbiAgICAgICAgLy8gTk9URSBvbmx5IHYzK1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci5nZW5lc2lzSGFzaCB8fCB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0hhc2gnLCBbXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgW1tCeXRlc11dIGNvbnRhaW5lZCBpbiB0aGUgcGF5bG9hZFxuICAgICAqL1xuICAgIGdldCBtZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLm1ldGhvZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0luZGV4XV1cbiAgICAgKi9cbiAgICBnZXQgbm9uY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLm5vbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHNwZWNWZXJzaW9uIGFzIGEgW1t1MzJdXSBmb3IgdGhpcyBwYXlsb2FkXG4gICAgICovXG4gICAgZ2V0IHNwZWNWZXJzaW9uKCkge1xuICAgICAgICAvLyBOT1RFIG9ubHkgdjMrXG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnNwZWNWZXJzaW9uIHx8IHRoaXMucmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgndTMyJywgW10pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbQmFsYW5jZV1dXG4gICAgICovXG4gICAgZ2V0IHRpcCgpIHtcbiAgICAgICAgLy8gTk9URSBmcm9tIHYyK1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lci50aXAgfHwgdGhpcy5yZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdDb21wYWN0PEJhbGFuY2U+JywgW10pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHZlcnNpb24gYXMgYSBbW3UzMl1dIGZvciB0aGlzIHBheWxvYWRcbiAgICAgKi9cbiAgICBnZXQgdHJhbnNhY3Rpb25WZXJzaW9uKCkge1xuICAgICAgICAvLyBOT1RFIG9ubHkgdjQrXG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLnRyYW5zYWN0aW9uVmVyc2lvbiB8fCB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ3UzMicsIFtdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSAob3B0aW9uYWwpIGFzc2V0IGlkIGFzIGEgW1t1MzJdXSBvciBbW011bHRpTG9jYXRpb25dXSBmb3IgdGhpcyBwYXlsb2FkXG4gICAgICovXG4gICAgZ2V0IGFzc2V0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLmFzc2V0SWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgKG9wdGlvbmFsKSBbW0hhc2hdXSBvZiB0aGUgZ2VuZXNpcyBtZXRhZGF0YSBmb3IgdGhpcyBwYXlsb2FkXG4gICAgICovXG4gICAgZ2V0IG1ldGFkYXRhSGFzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIubWV0YWRhdGFIYXNoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyLmVxKG90aGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ24gdGhlIHBheWxvYWQgd2l0aCB0aGUga2V5cGFpclxuICAgICAqL1xuICAgIHNpZ24oc2lnbmVyUGFpcikge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmlubmVyLnNpZ24oc2lnbmVyUGFpcik7XG4gICAgICAgIC8vIFRoaXMgaXMgZXh0ZW5zaWJsZSwgc28gd2UgY291bGQgcXVpdGUgcmVhZGlseSBleHRlbmQgdG8gc2VuZCBiYWNrIGV4dHJhXG4gICAgICAgIC8vIGluZm9ybWF0aW9uLCBzdWNoIGFzIGZvciBpbnN0YW5jZSB0aGUgcGF5bG9hZCwgaS5lLiBgcGF5bG9hZDogdGhpcy50b0hleCgpYFxuICAgICAgICAvLyBGb3IgdGhlIGNhc2UgaGVyZSB3ZSBzaWduIHZpYSB0aGUgZXh0cmluc2ljLCB3ZSBpZ25vcmUgdGhlIHJldHVybiwgc28gZ2VuZXJhbGx5XG4gICAgICAgIC8vIHRoaXMgaXMgYXBwbGljYWJsZSBmb3IgZXh0ZXJuYWwgc2lnbmluZ1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lnbmF0dXJlOiB1OGFUb0hleChzaWduYXR1cmUpXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXIudG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byBKU09OLCB0eXBpY2FsbHkgdXNlZCBmb3IgUlBDIHRyYW5zZmVyc1xuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9IZXgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnRXh0cmluc2ljUGF5bG9hZCc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSGV4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgc2VyaWFsaXplZCB1OGEgZm9ybVxuICAgICAqL1xuICAgIHRvVThhKGlzQmFyZSkge1xuICAgICAgICAvLyBjYWxsIG91ciBwYXJlbnQsIHdpdGggb25seSB0aGUgbWV0aG9kIHN0cmlwcGVkXG4gICAgICAgIHJldHVybiBzdXBlci50b1U4YShpc0JhcmUgPyB7IG1ldGhvZDogdHJ1ZSB9IDogZmFsc2UpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN0cnVjdCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkVW5rbm93blxuICogQGRlc2NyaXB0aW9uXG4gKiBBIGRlZmF1bHQgaGFuZGxlciBmb3IgcGF5bG9hZHMgd2hlcmUgdGhlIHZlcnNpb24gaXMgbm90IGtub3duIChkZWZhdWx0IHRocm93KVxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRVbmtub3duIGV4dGVuZHMgU3RydWN0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgX3ZhbHVlLCB7IHZlcnNpb24gPSAwIH0gPSB7fSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge30pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV4dHJpbnNpYyBwYXlsb2FkIHZlcnNpb24gJHt2ZXJzaW9ufWApO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN0cnVjdCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBVTk1BU0tfVkVSU0lPTiB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1Vua25vd25cbiAqIEBkZXNjcmlwdGlvblxuICogQSBkZWZhdWx0IGhhbmRsZXIgZm9yIGV4dHJpbnNpY3Mgd2hlcmUgdGhlIHZlcnNpb24gaXMgbm90IGtub3duIChkZWZhdWx0IHRocm93KVxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpY1Vua25vd24gZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBfdmFsdWUsIHsgaXNTaWduZWQgPSBmYWxzZSwgdmVyc2lvbiA9IDAgfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB7fSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgJHtpc1NpZ25lZCA/ICcnIDogJ3VuJ31zaWduZWQgZXh0cmluc2ljIHZlcnNpb24gJHt2ZXJzaW9uICYgVU5NQVNLX1ZFUlNJT059YCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgT3B0aW9uLCBTdHJ1Y3QgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgb2JqZWN0UHJvcGVydHksIG9iamVjdFNwcmVhZCwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5jb25zdCBrbm93blR5cGVzID0ge1xuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICBhc3NldElkOiAnT3B0aW9uPFRBc3NldENvbnZlcnNpb24+JyxcbiAgICBibG9ja0hhc2g6ICdIYXNoJyxcbiAgICBibG9ja051bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICBlcmE6ICdFeHRyaW5zaWNFcmEnLFxuICAgIGdlbmVzaXNIYXNoOiAnSGFzaCcsXG4gICAgbWV0YWRhdGFIYXNoOiAnT3B0aW9uPFt1ODszMl0+JyxcbiAgICBtZXRob2Q6ICdDYWxsJyxcbiAgICBtb2RlOiAndTgnLFxuICAgIG5vbmNlOiAnQ29tcGFjdDxJbmRleD4nLFxuICAgIHJ1bnRpbWVWZXJzaW9uOiAnUnVudGltZVZlcnNpb24nLFxuICAgIHNpZ25lZEV4dGVuc2lvbnM6ICdWZWM8VGV4dD4nLFxuICAgIHRpcDogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgIHZlcnNpb246ICd1OCdcbn07XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNTaWduZXJQYXlsb2FkXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgZ2VuZXJpYyBzaWduZXIgcGF5bG9hZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBzZXJpYWxpemF0aW9uIGJldHdlZW4gQVBJIGFuZCBzaWduZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNTaWduZXJQYXlsb2FkIGV4dGVuZHMgU3RydWN0IHtcbiAgICBfX2ludGVybmFsX19leHRyYVR5cGVzO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBleHRlbnNpb25UeXBlcyA9IG9iamVjdFNwcmVhZCh7fSwgcmVnaXN0cnkuZ2V0U2lnbmVkRXh0ZW5zaW9uVHlwZXMoKSwgcmVnaXN0cnkuZ2V0U2lnbmVkRXh0ZW5zaW9uRXh0cmEoKSk7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBvYmplY3RTcHJlYWQoe30sIGV4dGVuc2lvblR5cGVzLCBrbm93blR5cGVzKSwgdmFsdWUpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2V4dHJhVHlwZXMgPSB7fTtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gKGtleSkgPT4gdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgLy8gYWRkIGFsbCBleHRyYXMgdGhhdCBhcmUgbm90IGluIHRoZSBiYXNlIHR5cGVzXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoZXh0ZW5zaW9uVHlwZXMpKSB7XG4gICAgICAgICAgICBpZiAoIWtub3duVHlwZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fZXh0cmFUeXBlc1trZXldID0gdHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9iamVjdFByb3BlcnR5KHRoaXMsIGtleSwgZ2V0dGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYWRkcmVzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnYWRkcmVzcycpO1xuICAgIH1cbiAgICBnZXQgYmxvY2tIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdibG9ja0hhc2gnKTtcbiAgICB9XG4gICAgZ2V0IGJsb2NrTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdibG9ja051bWJlcicpO1xuICAgIH1cbiAgICBnZXQgZXJhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdlcmEnKTtcbiAgICB9XG4gICAgZ2V0IGdlbmVzaXNIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdnZW5lc2lzSGFzaCcpO1xuICAgIH1cbiAgICBnZXQgbWV0aG9kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRob2QnKTtcbiAgICB9XG4gICAgZ2V0IG5vbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdub25jZScpO1xuICAgIH1cbiAgICBnZXQgcnVudGltZVZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3J1bnRpbWVWZXJzaW9uJyk7XG4gICAgfVxuICAgIGdldCBzaWduZWRFeHRlbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdzaWduZWRFeHRlbnNpb25zJyk7XG4gICAgfVxuICAgIGdldCB0aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3RpcCcpO1xuICAgIH1cbiAgICBnZXQgYXNzZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnYXNzZXRJZCcpO1xuICAgIH1cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgndmVyc2lvbicpO1xuICAgIH1cbiAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnbW9kZScpO1xuICAgIH1cbiAgICBnZXQgbWV0YWRhdGFIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRhZGF0YUhhc2gnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBhcyBhbiBJU2lnbmVyUGF5bG9hZCBKU09OXG4gICAgICovXG4gICAgdG9QYXlsb2FkKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX19pbnRlcm5hbF9fZXh0cmFUeXBlcyk7XG4gICAgICAgIC8vIGFkZCBhbnkgZXhwbGljaXQgb3ZlcnJpZGVzIHdlIG1heSBoYXZlXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGtleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRUKGtleSk7XG4gICAgICAgICAgICAvLyBEb24ndCBpbmNsdWRlIE9wdGlvbi5pc05vbmVcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgT3B0aW9uKSB8fCB2YWx1ZS5pc1NvbWUpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RFIEluIHRoZSBzcHJlYWQgYmVsb3cgd2UgY29udmVydCAobW9zdGx5KSB0byBIZXggdG8gYWxpZ25cbiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSB0eXBpbmdzLiBJbiB0aGUgY2FzZSBvZiBcInVua25vd25cIiBmaWVsZHMsIHdlIHVzZSB0aGVcbiAgICAgICAgICAgICAgICAvLyBwcmltaXRpdmUgdG9KU09OIGNvbnZlcnNpb24gKHdoaWNoIGlzIHNlcmlhbGl6YWJsZSkuIFRlY2huaWNhbGx5XG4gICAgICAgICAgICAgICAgLy8gd2UgY2FuIGluY2x1ZGUgaXNOb25lIGluIGhlcmUgYXMgd2VsbCAoXCJudWxsXCIgaXMgYWxsb3dlZCksIGhvd2V2ZXJcbiAgICAgICAgICAgICAgICAvLyBmb3IgZW1wdHkgZmllbGRzIHdlIGp1c3Qgc2tpcCBpdCBjb21wbGV0ZWx5IChoaXN0b3JpY2FsIGNvbXBhdClcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlLnRvSlNPTigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RTcHJlYWQocmVzdWx0LCB7XG4gICAgICAgICAgICAvLyB0aGUga25vd24gZGVmYXVsdHMgYXMgbWFuYWdlZCBleHBsaWNpdGx5IGFuZCBoYXMgZGlmZmVyZW50XG4gICAgICAgICAgICAvLyBmb3JtYXR0aW5nIGluIGNhc2VzLCBlLmcuIHdlIG1vc3RseSBleHBvc2UgYSBoZXggZm9ybWF0IGhlcmVcbiAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMuYWRkcmVzcy50b1N0cmluZygpLFxuICAgICAgICAgICAgYXNzZXRJZDogdGhpcy5hc3NldElkID8gdGhpcy5hc3NldElkLnRvSlNPTigpIDogbnVsbCxcbiAgICAgICAgICAgIGJsb2NrSGFzaDogdGhpcy5ibG9ja0hhc2gudG9IZXgoKSxcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyOiB0aGlzLmJsb2NrTnVtYmVyLnRvSGV4KCksXG4gICAgICAgICAgICBlcmE6IHRoaXMuZXJhLnRvSGV4KCksXG4gICAgICAgICAgICBnZW5lc2lzSGFzaDogdGhpcy5nZW5lc2lzSGFzaC50b0hleCgpLFxuICAgICAgICAgICAgbWV0YWRhdGFIYXNoOiB0aGlzLm1ldGFkYXRhSGFzaC5pc1NvbWUgPyB0aGlzLm1ldGFkYXRhSGFzaC50b0hleCgpIDogbnVsbCxcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QudG9IZXgoKSxcbiAgICAgICAgICAgIG1vZGU6IHRoaXMubW9kZS50b051bWJlcigpLFxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UudG9IZXgoKSxcbiAgICAgICAgICAgIHNpZ25lZEV4dGVuc2lvbnM6IHRoaXMuc2lnbmVkRXh0ZW5zaW9ucy5tYXAoKGUpID0+IGUudG9TdHJpbmcoKSksXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogdGhpcy5ydW50aW1lVmVyc2lvbi5zcGVjVmVyc2lvbi50b0hleCgpLFxuICAgICAgICAgICAgdGlwOiB0aGlzLnRpcC50b0hleCgpLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uOiB0aGlzLnJ1bnRpbWVWZXJzaW9uLnRyYW5zYWN0aW9uVmVyc2lvbi50b0hleCgpLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLnRvTnVtYmVyKClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBheWxvYWQgaW4gcmF3IEV4cmluc2ljIGZvcm1cbiAgICAgKi9cbiAgICB0b1JhdygpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMudG9QYXlsb2FkKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1OGFUb0hleCh0aGlzLnJlZ2lzdHJ5XG4gICAgICAgICAgICAuY3JlYXRlVHlwZVVuc2FmZSgnRXh0cmluc2ljUGF5bG9hZCcsIFtwYXlsb2FkLCB7IHZlcnNpb246IHBheWxvYWQudmVyc2lvbiB9XSlcbiAgICAgICAgICAgIC8vIE5PVEUgRXhwbGljaXRseSBwYXNzIHRoZSBiYXJlIGZsYWcgc28gdGhlIG1ldGhvZCBpcyBlbmNvZGVkIHVuLXByZWZpeGVkIChub24tZGVjb2RhYmxlLCBmb3Igc2lnbmluZyBvbmx5KVxuICAgICAgICAgICAgLnRvVThhKHsgbWV0aG9kOiB0cnVlIH0pKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHBheWxvYWQuYWRkcmVzcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0eXBlOiAncGF5bG9hZCdcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgQklUX1NJR05FRCA9IDBiMTAwMDAwMDA7XG5leHBvcnQgY29uc3QgQklUX1VOU0lHTkVEID0gMDtcbmV4cG9ydCBjb25zdCBFTVBUWV9VOEEgPSBuZXcgVWludDhBcnJheSgpO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVSU0lPTiA9IDQ7XG5leHBvcnQgY29uc3QgSU1NT1JUQUxfRVJBID0gbmV3IFVpbnQ4QXJyYXkoWzBdKTtcbmV4cG9ydCBjb25zdCBVTk1BU0tfVkVSU0lPTiA9IDBiMDExMTExMTE7XG4iLCJleHBvcnQgeyBHZW5lcmljRXh0cmluc2ljIH0gZnJvbSAnLi9FeHRyaW5zaWMuanMnO1xuZXhwb3J0IHsgR2VuZXJpY0V4dHJpbnNpY0VyYSwgSW1tb3J0YWxFcmEgYXMgR2VuZXJpY0ltbW9ydGFsRXJhLCBNb3J0YWxFcmEgYXMgR2VuZXJpY01vcnRhbEVyYSB9IGZyb20gJy4vRXh0cmluc2ljRXJhLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkIH0gZnJvbSAnLi9FeHRyaW5zaWNQYXlsb2FkLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkVW5rbm93biB9IGZyb20gJy4vRXh0cmluc2ljUGF5bG9hZFVua25vd24uanMnO1xuZXhwb3J0IHsgR2VuZXJpY0V4dHJpbnNpY1Vua25vd24gfSBmcm9tICcuL0V4dHJpbnNpY1Vua25vd24uanMnO1xuZXhwb3J0IHsgR2VuZXJpY1NpZ25lclBheWxvYWQgfSBmcm9tICcuL1NpZ25lclBheWxvYWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92NC9pbmRleC5qcyc7XG4iLCJleHBvcnQgY29uc3QgZW1wdHlDaGVjayA9IHtcbiAgICBleHRyaW5zaWM6IHt9LFxuICAgIHBheWxvYWQ6IHt9XG59O1xuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgcG9sa2Fkb3QgfSBmcm9tICcuL3BvbGthZG90LmpzJztcbmltcG9ydCB7IHNoZWxsIH0gZnJvbSAnLi9zaGVsbC5qcyc7XG5pbXBvcnQgeyBzdGF0ZW1pbnQgfSBmcm9tICcuL3N0YXRlbWludC5qcyc7XG5pbXBvcnQgeyBzdWJzdHJhdGUgfSBmcm9tICcuL3N1YnN0cmF0ZS5qcyc7XG5leHBvcnQgY29uc3QgYWxsRXh0ZW5zaW9ucyA9IG9iamVjdFNwcmVhZCh7fSwgc3Vic3RyYXRlLCBwb2xrYWRvdCwgc2hlbGwsIHN0YXRlbWludCk7XG5leHBvcnQgY29uc3QgZmFsbGJhY2tFeHRlbnNpb25zID0gW1xuICAgICdDaGVja1ZlcnNpb24nLFxuICAgICdDaGVja0dlbmVzaXMnLFxuICAgICdDaGVja0VyYScsXG4gICAgJ0NoZWNrTm9uY2UnLFxuICAgICdDaGVja1dlaWdodCcsXG4gICAgJ0NoYXJnZVRyYW5zYWN0aW9uUGF5bWVudCcsXG4gICAgJ0NoZWNrQmxvY2tHYXNMaW1pdCdcbl07XG5leHBvcnQgZnVuY3Rpb24gZmluZFVua25vd25FeHRlbnNpb25zKGV4dGVuc2lvbnMsIHVzZXJFeHRlbnNpb25zID0ge30pIHtcbiAgICBjb25zdCBuYW1lcyA9IFsuLi5PYmplY3Qua2V5cyhhbGxFeHRlbnNpb25zKSwgLi4uT2JqZWN0LmtleXModXNlckV4dGVuc2lvbnMpXTtcbiAgICByZXR1cm4gZXh0ZW5zaW9ucy5maWx0ZXIoKGspID0+ICFuYW1lcy5pbmNsdWRlcyhrKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kRXh0ZW5zaW9uVHlwZXMoZXh0ZW5zaW9ucywgdHlwZSwgdXNlckV4dGVuc2lvbnMgPSB7fSkge1xuICAgIHJldHVybiBleHRlbnNpb25zXG4gICAgICAgIC8vIEFsd2F5cyBhbGxvdyB1c2VyIGV4dGVuc2lvbnMgZmlyc3QgLSB0aGVzZSBzaG91bGQgcHJvdmlkZSBvdmVycmlkZXNcbiAgICAgICAgLm1hcCgoaykgPT4gdXNlckV4dGVuc2lvbnNba10gfHwgYWxsRXh0ZW5zaW9uc1trXSlcbiAgICAgICAgLmZpbHRlcigoaW5mbykgPT4gISFpbmZvKVxuICAgICAgICAucmVkdWNlKChyZXN1bHQsIGluZm8pID0+IG9iamVjdFNwcmVhZChyZXN1bHQsIGluZm9bdHlwZV0pLCB7fSk7XG59XG4iLCJpbXBvcnQgeyBlbXB0eUNoZWNrIH0gZnJvbSAnLi9lbXB0eUNoZWNrLmpzJztcbmV4cG9ydCBjb25zdCBwb2xrYWRvdCA9IHtcbiAgICBMaW1pdFBhcmF0aHJlYWRDb21taXRzOiBlbXB0eUNoZWNrLFxuICAgIE9ubHlTdGFraW5nQW5kQ2xhaW1zOiBlbXB0eUNoZWNrLFxuICAgIFByZXZhbGlkYXRlQXR0ZXN0czogZW1wdHlDaGVjayxcbiAgICBSZXN0cmljdEZ1bmN0aW9uYWxpdHk6IGVtcHR5Q2hlY2ssXG4gICAgVHJhbnNhY3Rpb25DYWxsRmlsdGVyOiBlbXB0eUNoZWNrLFxuICAgIFZhbGlkYXRlRG91YmxlVm90ZVJlcG9ydHM6IGVtcHR5Q2hlY2tcbn07XG4iLCJpbXBvcnQgeyBlbXB0eUNoZWNrIH0gZnJvbSAnLi9lbXB0eUNoZWNrLmpzJztcbmV4cG9ydCBjb25zdCBzaGVsbCA9IHtcbiAgICBEaXNhbGxvd1NpZ25lZDogZW1wdHlDaGVja1xufTtcbiIsImV4cG9ydCBjb25zdCBzdGF0ZW1pbnQgPSB7XG4gICAgQ2hhcmdlQXNzZXRUeFBheW1lbnQ6IHtcbiAgICAgICAgZXh0cmluc2ljOiB7XG4gICAgICAgICAgICB0aXA6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb3J0LWtleXNcbiAgICAgICAgICAgIGFzc2V0SWQ6ICdUQXNzZXRDb252ZXJzaW9uJ1xuICAgICAgICB9LFxuICAgICAgICBwYXlsb2FkOiB7fVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBlbXB0eUNoZWNrIH0gZnJvbSAnLi9lbXB0eUNoZWNrLmpzJztcbmNvbnN0IENoZWNrTWV0YWRhdGFIYXNoID0ge1xuICAgIGV4dHJpbnNpYzoge1xuICAgICAgICBtb2RlOiAndTgnXG4gICAgfSxcbiAgICBwYXlsb2FkOiB7XG4gICAgICAgIG1ldGFkYXRhSGFzaDogJ09wdGlvbjxbdTg7MzJdPidcbiAgICB9XG59O1xuY29uc3QgQ2hlY2tNb3J0YWxpdHkgPSB7XG4gICAgZXh0cmluc2ljOiB7XG4gICAgICAgIGVyYTogJ0V4dHJpbnNpY0VyYSdcbiAgICB9LFxuICAgIHBheWxvYWQ6IHtcbiAgICAgICAgYmxvY2tIYXNoOiAnSGFzaCdcbiAgICB9XG59O1xuY29uc3QgQ2hhcmdlVHJhbnNhY3Rpb25QYXltZW50ID0ge1xuICAgIGV4dHJpbnNpYzoge1xuICAgICAgICB0aXA6ICdDb21wYWN0PEJhbGFuY2U+J1xuICAgIH0sXG4gICAgcGF5bG9hZDoge31cbn07XG5leHBvcnQgY29uc3Qgc3Vic3RyYXRlID0ge1xuICAgIENoYXJnZVRyYW5zYWN0aW9uUGF5bWVudCxcbiAgICBDaGVja0Jsb2NrR2FzTGltaXQ6IGVtcHR5Q2hlY2ssXG4gICAgQ2hlY2tFcmE6IENoZWNrTW9ydGFsaXR5LFxuICAgIENoZWNrR2VuZXNpczoge1xuICAgICAgICBleHRyaW5zaWM6IHt9LFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBnZW5lc2lzSGFzaDogJ0hhc2gnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIENoZWNrTWV0YWRhdGFIYXNoLFxuICAgIENoZWNrTW9ydGFsaXR5LFxuICAgIENoZWNrTm9uWmVyb1NlbmRlcjogZW1wdHlDaGVjayxcbiAgICBDaGVja05vbmNlOiB7XG4gICAgICAgIGV4dHJpbnNpYzoge1xuICAgICAgICAgICAgbm9uY2U6ICdDb21wYWN0PEluZGV4PidcbiAgICAgICAgfSxcbiAgICAgICAgcGF5bG9hZDoge31cbiAgICB9LFxuICAgIENoZWNrU3BlY1ZlcnNpb246IHtcbiAgICAgICAgZXh0cmluc2ljOiB7fSxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgc3BlY1ZlcnNpb246ICd1MzInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIENoZWNrVHhWZXJzaW9uOiB7XG4gICAgICAgIGV4dHJpbnNpYzoge30sXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uVmVyc2lvbjogJ3UzMidcbiAgICAgICAgfVxuICAgIH0sXG4gICAgQ2hlY2tWZXJzaW9uOiB7XG4gICAgICAgIGV4dHJpbnNpYzoge30sXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiAndTMyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBDaGVja1dlaWdodDogZW1wdHlDaGVjayxcbiAgICBMb2NrU3Rha2luZ1N0YXR1czogZW1wdHlDaGVjayxcbiAgICBTa2lwQ2hlY2tJZkZlZWxlc3M6IENoYXJnZVRyYW5zYWN0aW9uUGF5bWVudCxcbiAgICBWYWxpZGF0ZUVxdWl2b2NhdGlvblJlcG9ydDogZW1wdHlDaGVja1xufTtcbiIsImV4cG9ydCBmdW5jdGlvbiBzaWduKHJlZ2lzdHJ5LCBzaWduZXJQYWlyLCB1OGEsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBlbmNvZGVkID0gdThhLmxlbmd0aCA+IDI1NlxuICAgICAgICA/IHJlZ2lzdHJ5Lmhhc2godThhKVxuICAgICAgICA6IHU4YTtcbiAgICByZXR1cm4gc2lnbmVyUGFpci5zaWduKGVuY29kZWQsIG9wdGlvbnMpO1xufVxuIiwiaW1wb3J0IHsgU3RydWN0IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZXhwb3J0IGNvbnN0IEVYVFJJTlNJQ19WRVJTSU9OID0gNDtcbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1Y0XG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSB0aGlyZCBnZW5lcmF0aW9uIG9mIGNvbXBhY3QgZXh0cmluc2ljc1xuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4dHJpbnNpY1Y0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIHsgaXNTaWduZWQgfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBzaWduYXR1cmU6ICdFeHRyaW5zaWNTaWduYXR1cmVWNCcsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgICAgICBtZXRob2Q6ICdDYWxsJ1xuICAgICAgICB9LCBHZW5lcmljRXh0cmluc2ljVjQuZGVjb2RlRXh0cmluc2ljKHJlZ2lzdHJ5LCB2YWx1ZSwgaXNTaWduZWQpKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHN0YXRpYyBkZWNvZGVFeHRyaW5zaWMocmVnaXN0cnksIHZhbHVlLCBpc1NpZ25lZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNFeHRyaW5zaWNWNCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgcmVnaXN0cnkuY3JlYXRlQ2xhc3NVbnNhZmUoJ0NhbGwnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWV0aG9kOiB2YWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVThhKHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gaGVyZSB3ZSBkZWNvZGUgbWFudWFsbHkgc2luY2Ugd2UgbmVlZCB0byBwdWxsIHRocm91Z2ggdGhlIHZlcnNpb24gaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V4dHJpbnNpY1NpZ25hdHVyZVY0JywgW3ZhbHVlLCB7IGlzU2lnbmVkIH1dKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0NhbGwnLCBbdmFsdWUuc3ViYXJyYXkoc2lnbmF0dXJlLmVuY29kZWRMZW5ndGgpXSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1U4YSgpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0NhbGxdXSB0aGlzIGV4dHJpbnNpYyB3cmFwc1xuICAgICAqL1xuICAgIGdldCBtZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ21ldGhvZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXh0cmluc2ljU2lnbmF0dXJlVjRdXVxuICAgICAqL1xuICAgIGdldCBzaWduYXR1cmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3NpZ25hdHVyZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHZlcnNpb24gZm9yIHRoZSBzaWduYXR1cmVcbiAgICAgKi9cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIEVYVFJJTlNJQ19WRVJTSU9OO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQWRkIGFuIFtbRXh0cmluc2ljU2lnbmF0dXJlVjRdXSB0byB0aGUgZXh0cmluc2ljIChhbHJlYWR5IGdlbmVyYXRlZClcbiAgICAgKi9cbiAgICBhZGRTaWduYXR1cmUoc2lnbmVyLCBzaWduYXR1cmUsIHBheWxvYWQpIHtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUuYWRkU2lnbmF0dXJlKHNpZ25lciwgc2lnbmF0dXJlLCBwYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTaWduIHRoZSBleHRyaW5zaWMgd2l0aCBhIHNwZWNpZmljIGtleXBhaXJcbiAgICAgKi9cbiAgICBzaWduKGFjY291bnQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUuc2lnbih0aGlzLm1ldGhvZCwgYWNjb3VudCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpYmUgQWRkcyBhIGZha2Ugc2lnbmF0dXJlIHRvIHRoZSBleHRyaW5zaWNcbiAgICAgKi9cbiAgICBzaWduRmFrZShzaWduZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zaWduYXR1cmUuc2lnbkZha2UodGhpcy5tZXRob2QsIHNpZ25lciwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVudW0sIFN0cnVjdCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBzaWduIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNFeHRyaW5zaWNQYXlsb2FkVjRcbiAqIEBkZXNjcmlwdGlvblxuICogQSBzaWduaW5nIHBheWxvYWQgZm9yIGFuIFtbRXh0cmluc2ljXV0uIEZvciB0aGUgZmluYWwgZW5jb2RpbmcsIGl0IGlzXG4gKiB2YXJpYWJsZSBsZW5ndGggYmFzZWQgb24gdGhlIGNvbnRlbnRzIGluY2x1ZGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljRXh0cmluc2ljUGF5bG9hZFY0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfX2ludGVybmFsX19zaWduT3B0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIG9iamVjdFNwcmVhZCh7IG1ldGhvZDogJ0J5dGVzJyB9LCByZWdpc3RyeS5nZXRTaWduZWRFeHRlbnNpb25UeXBlcygpLCByZWdpc3RyeS5nZXRTaWduZWRFeHRlbnNpb25FeHRyYSgpKSwgdmFsdWUpO1xuICAgICAgICAvLyBEbyBkZXRlY3Rpb24gZm9yIHRoZSB0eXBlIG9mIGV4dHJpbnNpYywgaW4gdGhlIGNhc2Ugb2YgTXVsdGlTaWduYXR1cmVcbiAgICAgICAgLy8gdGhpcyBpcyBhbiBlbnVtLCBpbiB0aGUgY2FzZSBvZiBBbnlTaWduYXR1cmUsIHRoaXMgaXMgYSBIYXNoIG9ubHlcbiAgICAgICAgLy8gKHdoaWNoIG1heSBiZSA2NCBvciA2NSBieXRlcylcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zaWduT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHdpdGhUeXBlOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdFeHRyaW5zaWNTaWduYXR1cmUnLCBbXSkgaW5zdGFuY2VvZiBFbnVtXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgYnJlYWtkb3duIG9mIHRoZSBoZXggZW5jb2RpbmcgZm9yIHRoaXMgQ29kZWNcbiAgICAgKi9cbiAgICBpbnNwZWN0KCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuaW5zcGVjdCh7IG1ldGhvZDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBibG9jayBbW0Jsb2NrSGFzaF1dIHRoZSBzaWduYXR1cmUgYXBwbGllcyB0byAobW9ydGFsL2ltbW9ydGFsKVxuICAgICAqL1xuICAgIGdldCBibG9ja0hhc2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2Jsb2NrSGFzaCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXh0cmluc2ljRXJhXV1cbiAgICAgKi9cbiAgICBnZXQgZXJhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdlcmEnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBnZW5lc2lzIFtbQmxvY2tIYXNoXV0gdGhlIHNpZ25hdHVyZSBhcHBsaWVzIHRvIChtb3J0YWwvaW1tb3J0YWwpXG4gICAgICovXG4gICAgZ2V0IGdlbmVzaXNIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdnZW5lc2lzSGFzaCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbQnl0ZXNdXSBjb250YWluZWQgaW4gdGhlIHBheWxvYWRcbiAgICAgKi9cbiAgICBnZXQgbWV0aG9kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRob2QnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0luZGV4XV1cbiAgICAgKi9cbiAgICBnZXQgbm9uY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ25vbmNlJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgc3BlY1ZlcnNpb24gZm9yIHRoaXMgc2lnbmF0dXJlXG4gICAgICovXG4gICAgZ2V0IHNwZWNWZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdzcGVjVmVyc2lvbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRpcCBbW0JhbGFuY2VdXVxuICAgICAqL1xuICAgIGdldCB0aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3RpcCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uVmVyc2lvbiBmb3IgdGhpcyBzaWduYXR1cmVcbiAgICAgKi9cbiAgICBnZXQgdHJhbnNhY3Rpb25WZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCd0cmFuc2FjdGlvblZlcnNpb24nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSAob3B0aW9uYWwpIGFzc2V0IGlkIGZvciB0aGlzIHNpZ25hdHVyZSBmb3IgY2hhaW5zIHRoYXQgc3VwcG9ydCB0cmFuc2FjdGlvbiBmZWVzIGluIGFzc2V0c1xuICAgICAqL1xuICAgIGdldCBhc3NldElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdhc3NldElkJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgKG9wdGlvbmFsKSBhc3NldCBpZCBmb3IgdGhpcyBzaWduYXR1cmUgZm9yIGNoYWlucyB0aGF0IHN1cHBvcnQgdHJhbnNhY3Rpb24gZmVlcyBpbiBhc3NldHNcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGFIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRhZGF0YUhhc2gnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ24gdGhlIHBheWxvYWQgd2l0aCB0aGUga2V5cGFpclxuICAgICAqL1xuICAgIHNpZ24oc2lnbmVyUGFpcikge1xuICAgICAgICAvLyBOT1RFIFRoZSBgdG9VOGEoeyBtZXRob2Q6IHRydWUgfSlgIGFyZ3VtZW50IGlzIGFic29sdXRlbHkgY3JpdGljYWwsIHdlXG4gICAgICAgIC8vIGRvbid0IHdhbnQgdGhlIG1ldGhvZCAoQnl0ZXMpIHRvIGhhdmUgdGhlIGxlbmd0aCBwcmVmaXggaW5jbHVkZWQuIFRoaXNcbiAgICAgICAgLy8gbWVhbnMgdGhhdCB0aGUgZGF0YS1hcy1zaWduZWQgaXMgdW4tZGVjb2RhYmxlLCBidXQgaXMgYWxzbyBkb2Vzbid0IG5lZWRcbiAgICAgICAgLy8gdGhlIGV4dHJhIGluZm9ybWF0aW9uLCBvbmx5IHRoZSBwdXJlIGRhdGEgKGFuZCBpcyBub3QgZGVjb2RlZCkgLi4uXG4gICAgICAgIC8vIFRoZSBzYW1lIGFwcGxpZXMgdG8gVjEuLlYzLCBpZiB3ZSBoYXZlIGEgVjUsIGNhcnJ5IHRoaXMgY29tbWVudFxuICAgICAgICByZXR1cm4gc2lnbih0aGlzLnJlZ2lzdHJ5LCBzaWduZXJQYWlyLCB0aGlzLnRvVThhKHsgbWV0aG9kOiB0cnVlIH0pLCB0aGlzLl9faW50ZXJuYWxfX3NpZ25PcHRpb25zKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdHJ1Y3QgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaXNVOGEsIGlzVW5kZWZpbmVkLCBvYmplY3RQcm9wZXJ0aWVzLCBvYmplY3RTcHJlYWQsIHN0cmluZ2lmeSwgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBFTVBUWV9VOEEsIElNTU9SVEFMX0VSQSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBHZW5lcmljRXh0cmluc2ljUGF5bG9hZFY0IH0gZnJvbSAnLi9FeHRyaW5zaWNQYXlsb2FkLmpzJztcbmNvbnN0IEZBS0VfU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoMjU2KS5maWxsKDEpO1xuZnVuY3Rpb24gdG9BZGRyZXNzKHJlZ2lzdHJ5LCBhZGRyZXNzKSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FkZHJlc3MnLCBbaXNVOGEoYWRkcmVzcykgPyB1OGFUb0hleChhZGRyZXNzKSA6IGFkZHJlc3NdKTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V4dHJpbnNpY1NpZ25hdHVyZVY0XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgY29udGFpbmVyIGZvciB0aGUgW1tTaWduYXR1cmVdXSBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBbW0V4dHJpbnNpY11dXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljRXh0cmluc2ljU2lnbmF0dXJlVjQgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9faW50ZXJuYWxfX3NpZ25LZXlzO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSwgeyBpc1NpZ25lZCB9ID0ge30pIHtcbiAgICAgICAgY29uc3Qgc2lnblR5cGVzID0gcmVnaXN0cnkuZ2V0U2lnbmVkRXh0ZW5zaW9uVHlwZXMoKTtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIG9iamVjdFNwcmVhZChcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICB7IHNpZ25lcjogJ0FkZHJlc3MnLCBzaWduYXR1cmU6ICdFeHRyaW5zaWNTaWduYXR1cmUnIH0sIHNpZ25UeXBlcyksIEdlbmVyaWNFeHRyaW5zaWNTaWduYXR1cmVWNC5kZWNvZGVFeHRyaW5zaWNTaWduYXR1cmUodmFsdWUsIGlzU2lnbmVkKSk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fc2lnbktleXMgPSBPYmplY3Qua2V5cyhzaWduVHlwZXMpO1xuICAgICAgICBvYmplY3RQcm9wZXJ0aWVzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fc2lnbktleXMsIChrKSA9PiB0aGlzLmdldChrKSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBzdGF0aWMgZGVjb2RlRXh0cmluc2ljU2lnbmF0dXJlKHZhbHVlLCBpc1NpZ25lZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9VOEE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBHZW5lcmljRXh0cmluc2ljU2lnbmF0dXJlVjQpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTaWduZWRcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogRU1QVFlfVThBO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgd2hlbiBlbmNvZGVkIGFzIGEgVWludDhBcnJheVxuICAgICAqL1xuICAgIGdldCBlbmNvZGVkTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NpZ25lZFxuICAgICAgICAgICAgPyBzdXBlci5lbmNvZGVkTGVuZ3RoXG4gICAgICAgICAgICA6IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBgdHJ1ZWAgaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZFxuICAgICAqL1xuICAgIGdldCBpc1NpZ25lZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNpZ25hdHVyZS5pc0VtcHR5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXh0cmluc2ljRXJhXV0gKG1vcnRhbCBvciBpbW1vcnRhbCkgdGhpcyBzaWduYXR1cmUgYXBwbGllcyB0b1xuICAgICAqL1xuICAgIGdldCBlcmEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2VyYScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbSW5kZXhdXSBmb3IgdGhlIHNpZ25hdHVyZVxuICAgICAqL1xuICAgIGdldCBub25jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnbm9uY2UnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhY3R1YWwgW1tFY2RzYVNpZ25hdHVyZV1dLCBbW0VkMjU1MTlTaWduYXR1cmVdXSBvciBbW1NyMjU1MTlTaWduYXR1cmVdXVxuICAgICAqL1xuICAgIGdldCBzaWduYXR1cmUoKSB7XG4gICAgICAgIC8vIHRoZSBzZWNvbmQgY2FzZSBoZXJlIGlzIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBlbnVtIHNpZ25hdHVyZSwgdHJlYXQgYXMgcmF3XG4gICAgICAgIHJldHVybiAodGhpcy5tdWx0aVNpZ25hdHVyZS52YWx1ZSB8fCB0aGlzLm11bHRpU2lnbmF0dXJlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSByYXcgW1tFeHRyaW5zaWNTaWduYXR1cmVdXVxuICAgICAqL1xuICAgIGdldCBtdWx0aVNpZ25hdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnc2lnbmF0dXJlJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgW1tBZGRyZXNzXV0gdGhhdCBzaWduZWRcbiAgICAgKi9cbiAgICBnZXQgc2lnbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdzaWduZXInKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0JhbGFuY2VdXSB0aXBcbiAgICAgKi9cbiAgICBnZXQgdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCd0aXAnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW3UzMl1dIG9yIFtbTXVsdGlMb2NhdGlvbl1dIGFzc2V0SWRcbiAgICAgKi9cbiAgICBnZXQgYXNzZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnYXNzZXRJZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbSGFzaF1dIGZvciB0aGUgbWV0YWRhdGFcbiAgICAgKi9cbiAgICBnZXQgbWV0YWRhdGFIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRhZGF0YUhhc2gnKTtcbiAgICB9XG4gICAgX2luamVjdFNpZ25hdHVyZShzaWduZXIsIHNpZ25hdHVyZSwgcGF5bG9hZCkge1xuICAgICAgICAvLyB1c2UgdGhlIGZpZWxkcyBleHBvc2VkIHRvIGd1aWRlIHRoZSBnZXR0ZXJzXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHRoaXMuX19pbnRlcm5hbF9fc2lnbktleXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgayA9IHRoaXMuX19pbnRlcm5hbF9fc2lnbktleXNbaV07XG4gICAgICAgICAgICBjb25zdCB2ID0gcGF5bG9hZC5nZXQoayk7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkaXRpb25hbCBmaWVsZHMgKGV4cG9zZWQgaW4gc3RydWN0IGl0c2VsZilcbiAgICAgICAgdGhpcy5zZXQoJ3NpZ25lcicsIHNpZ25lcik7XG4gICAgICAgIHRoaXMuc2V0KCdzaWduYXR1cmUnLCBzaWduYXR1cmUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFkZHMgYSByYXcgc2lnbmF0dXJlXG4gICAgICovXG4gICAgYWRkU2lnbmF0dXJlKHNpZ25lciwgc2lnbmF0dXJlLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RTaWduYXR1cmUodG9BZGRyZXNzKHRoaXMucmVnaXN0cnksIHNpZ25lciksIHRoaXMucmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnRXh0cmluc2ljU2lnbmF0dXJlJywgW3NpZ25hdHVyZV0pLCBuZXcgR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRWNCh0aGlzLnJlZ2lzdHJ5LCBwYXlsb2FkKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgcGF5bG9hZCBmcm9tIHRoZSBzdXBwbGllZCBvcHRpb25zXG4gICAgICovXG4gICAgY3JlYXRlUGF5bG9hZChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBlcmEsIHJ1bnRpbWVWZXJzaW9uOiB7IHNwZWNWZXJzaW9uLCB0cmFuc2FjdGlvblZlcnNpb24gfSB9ID0gb3B0aW9ucztcbiAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmljRXh0cmluc2ljUGF5bG9hZFY0KHRoaXMucmVnaXN0cnksIG9iamVjdFNwcmVhZCh7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgZXJhOiBlcmEgfHwgSU1NT1JUQUxfRVJBLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QudG9IZXgoKSxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlIGEgcGF5bG9hZCBhbmQgYXBwbGllcyB0aGUgc2lnbmF0dXJlIGZyb20gYSBrZXlwYWlyXG4gICAgICovXG4gICAgc2lnbihtZXRob2QsIGFjY291bnQsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFhY2NvdW50Py5hZGRyZXNzUmF3KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgdmFsaWQga2V5cGFpciBmb3Igc2lnbmluZywgZm91bmQgJHtzdHJpbmdpZnkoYWNjb3VudCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuY3JlYXRlUGF5bG9hZChtZXRob2QsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0U2lnbmF0dXJlKHRvQWRkcmVzcyh0aGlzLnJlZ2lzdHJ5LCBhY2NvdW50LmFkZHJlc3NSYXcpLCB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V4dHJpbnNpY1NpZ25hdHVyZScsIFtwYXlsb2FkLnNpZ24oYWNjb3VudCldKSwgcGF5bG9hZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZSBhIHBheWxvYWQgYW5kIGFwcGxpZXMgYSBmYWtlIHNpZ25hdHVyZVxuICAgICAqL1xuICAgIHNpZ25GYWtlKG1ldGhvZCwgYWRkcmVzcywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSB2YWxpZCBhZGRyZXNzIGZvciBzaWduaW5nLCBmb3VuZCAke3N0cmluZ2lmeShhZGRyZXNzKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jcmVhdGVQYXlsb2FkKG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3RTaWduYXR1cmUodG9BZGRyZXNzKHRoaXMucmVnaXN0cnksIGFkZHJlc3MpLCB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V4dHJpbnNpY1NpZ25hdHVyZScsIFtGQUtFX1NJR05BVFVSRV0pLCBwYXlsb2FkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTaWduZWRcbiAgICAgICAgICAgID8gc3VwZXIudG9VOGEoaXNCYXJlKVxuICAgICAgICAgICAgOiBFTVBUWV9VOEE7XG4gICAgfVxufVxuIiwiZXhwb3J0IHsgR2VuZXJpY0V4dHJpbnNpY1Y0IH0gZnJvbSAnLi9FeHRyaW5zaWMuanMnO1xuZXhwb3J0IHsgR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRWNCB9IGZyb20gJy4vRXh0cmluc2ljUGF5bG9hZC5qcyc7XG5leHBvcnQgeyBHZW5lcmljRXh0cmluc2ljU2lnbmF0dXJlVjQgfSBmcm9tICcuL0V4dHJpbnNpY1NpZ25hdHVyZS5qcyc7XG4iLCJpbXBvcnQgeyBVOGFGaXhlZCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBoZXhUb1U4YSwgaXNIZXgsIGlzU3RyaW5nLCBpc1U4YSwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBkZWNvZGVBZGRyZXNzLCBlbmNvZGVBZGRyZXNzIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUFjY291bnRJZCh2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvVThhKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0hleCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGhleFRvVThhKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVBZGRyZXNzKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBwYXNzZWQgdG8gQWNjb3VudElkIGNvbnN0cnVjdG9yLCBmb3VuZCB0eXBlb2YgJHt0eXBlb2YgdmFsdWV9YCk7XG59XG5jbGFzcyBCYXNlQWNjb3VudElkIGV4dGVuZHMgVThhRml4ZWQge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBhbGxvd2VkQml0cyA9IDI1NiB8IDI2NCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUFjY291bnRJZCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWRCaXRzID0gZGVjb2RlZC5sZW5ndGggKiA4O1xuICAgICAgICAvLyBQYXJ0IG9mIHN0cmVhbSBjb250YWluaW5nID49IDMyIGJ5dGVzIG9yIGEgYWxsIGVtcHR5IChkZWZhdWx0cylcbiAgICAgICAgaWYgKGRlY29kZWRCaXRzIDwgYWxsb3dlZEJpdHMgJiYgZGVjb2RlZC5zb21lKChiKSA9PiBiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEFjY291bnRJZCBwcm92aWRlZCwgZXhwZWN0ZWQgJHthbGxvd2VkQml0cyA+PiAzfSBieXRlcywgZm91bmQgJHtkZWNvZGVkLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZGVjb2RlZCwgYWxsb3dlZEJpdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5lcShkZWNvZGVBY2NvdW50SWQob3RoZXIpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZUFkZHJlc3ModGhpcywgdGhpcy5yZWdpc3RyeS5jaGFpblNTNTgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdBY2NvdW50SWQnO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0FjY291bnRJZFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHdyYXBwZXIgYXJvdW5kIGFuIEFjY291bnRJZC9QdWJsaWNLZXkgcmVwcmVzZW50YXRpb24uIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGhcbiAqIHVuZGVybHlpbmcgUHVibGljS2V5cyAoMzIgYnl0ZXMgaW4gbGVuZ3RoKSwgd2UgZXh0ZW5kIGZyb20gVThhRml4ZWQgd2hpY2ggaXNcbiAqIGp1c3QgYSBVaW50OEFycmF5IHdyYXBwZXIgd2l0aCBhIGZpeGVkIGxlbmd0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNBY2NvdW50SWQgZXh0ZW5kcyBCYXNlQWNjb3VudElkIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIDI1NiwgdmFsdWUpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBHZW5lcmljQWNjb3VudElkMzMgZXh0ZW5kcyBCYXNlQWNjb3VudElkIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIDI2NCwgdmFsdWUpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IHUzMiB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBCTiwgYm5Ub0JuLCBpc0JpZ0ludCwgaXNCbiwgaXNIZXgsIGlzTnVtYmVyLCBpc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MsIGVuY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuY29uc3QgUFJFRklYXzFCWVRFID0gMHhlZjtcbmNvbnN0IFBSRUZJWF8yQllURSA9IDB4ZmM7XG5jb25zdCBQUkVGSVhfNEJZVEUgPSAweGZkO1xuY29uc3QgUFJFRklYXzhCWVRFID0gMHhmZTtcbmNvbnN0IE1BWF8xQllURSA9IG5ldyBCTihQUkVGSVhfMUJZVEUpO1xuY29uc3QgTUFYXzJCWVRFID0gbmV3IEJOKDEpLnNobG4oMTYpO1xuY29uc3QgTUFYXzRCWVRFID0gbmV3IEJOKDEpLnNobG4oMzIpO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlQWNjb3VudEluZGV4KHZhbHVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNBY2NvdW50SW5kZXgpIHtcbiAgICAgICAgLy8gYHZhbHVlLnRvQm4oKWAgb24gQWNjb3VudEluZGV4IHJldHVybnMgYSBwdXJlIEJOIChpLmUuIG5vdCBhblxuICAgICAgICAvLyBBY2NvdW50SW5kZXgpLCB3aGljaCBoYXMgdGhlIGluaXRpYWwgYHRvU3RyaW5nKClgIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXR1cm4gdmFsdWUudG9CbigpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0JuKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkgfHwgaXNIZXgodmFsdWUpIHx8IGlzVThhKHZhbHVlKSB8fCBpc0JpZ0ludCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGVjb2RlQWNjb3VudEluZGV4KGRlY29kZUFkZHJlc3ModmFsdWUpKTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0FjY291bnRJbmRleFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHdyYXBwZXIgYXJvdW5kIGFuIEFjY291bnRJbmRleCwgd2hpY2ggaXMgYSBzaG9ydGVuZWQsIHZhcmlhYmxlLWxlbmd0aCBlbmNvZGluZ1xuICogZm9yIGFuIEFjY291bnQuIFdlIGV4dGVuZHMgZnJvbSBbW1UzMl1dIHRvIHByb3ZpZGUgdGhlIG51bWJlci1saWtlIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljQWNjb3VudEluZGV4IGV4dGVuZHMgdTMyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUgPSBuZXcgQk4oMCkpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGRlY29kZUFjY291bnRJbmRleCh2YWx1ZSkpO1xuICAgIH1cbiAgICBzdGF0aWMgY2FsY0xlbmd0aChfdmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBiblRvQm4oX3ZhbHVlKTtcbiAgICAgICAgaWYgKHZhbHVlLmx0ZShNQVhfMUJZVEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sdChNQVhfMkJZVEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sdChNQVhfNEJZVEUpKSB7XG4gICAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gODtcbiAgICB9XG4gICAgc3RhdGljIHJlYWRMZW5ndGgoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBpbnB1dFswXTtcbiAgICAgICAgaWYgKGZpcnN0ID09PSBQUkVGSVhfMkJZVEUpIHtcbiAgICAgICAgICAgIHJldHVybiBbMSwgMl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmlyc3QgPT09IFBSRUZJWF80QllURSkge1xuICAgICAgICAgICAgcmV0dXJuIFsxLCA0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaXJzdCA9PT0gUFJFRklYXzhCWVRFKSB7XG4gICAgICAgICAgICByZXR1cm4gWzEsIDhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbMCwgMV07XG4gICAgfVxuICAgIHN0YXRpYyB3cml0ZUxlbmd0aChpbnB1dCkge1xuICAgICAgICBzd2l0Y2ggKGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW1BSRUZJWF8yQllURV0pO1xuICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW1BSRUZJWF80QllURV0pO1xuICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW1BSRUZJWF84QllURV0pO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG5ldyBVaW50OEFycmF5KFtdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0byBzZWUgaWYgdGhlcmUgaXMgYSBtYXRjaFxuICAgICAqL1xuICAgIGVxKG90aGVyKSB7XG4gICAgICAgIC8vIHNob3J0Y3V0IGZvciBCTiBvciBOdW1iZXIsIGRvbid0IGNyZWF0ZSBhbiBvYmplY3RcbiAgICAgICAgaWYgKGlzQm4ob3RoZXIpIHx8IGlzTnVtYmVyKG90aGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmVxKG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb252ZXJ0IGFuZCBjb21wYXJlXG4gICAgICAgIHJldHVybiBzdXBlci5lcSh0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFtvdGhlcl0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gSlNPTiwgdHlwaWNhbGx5IHVzZWQgZm9yIFJQQyB0cmFuc2ZlcnNcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b0pTT04oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gR2VuZXJpY0FjY291bnRJbmRleC5jYWxjTGVuZ3RoKHRoaXMpO1xuICAgICAgICByZXR1cm4gZW5jb2RlQWRkcmVzcyh0aGlzLnRvVThhKCkuc3ViYXJyYXkoMCwgbGVuZ3RoKSwgdGhpcy5yZWdpc3RyeS5jaGFpblNTNTgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdBY2NvdW50SW5kZXgnO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN0cnVjdCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNCbG9ja1xuICogQGRlc2NyaXB0aW9uXG4gKiBBIGJsb2NrIGVuY29kZWQgd2l0aCBoZWFkZXIgYW5kIGV4dHJpbnNpY3NcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNCbG9jayBleHRlbmRzIFN0cnVjdCB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBoZWFkZXI6ICdIZWFkZXInLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICAgICAgZXh0cmluc2ljczogJ1ZlYzxFeHRyaW5zaWM+J1xuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbmNvZGVzIGEgY29udGVudCBbW0hhc2hdXSBmb3IgdGhlIGJsb2NrXG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnRIYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5oYXNoKHRoaXMudG9VOGEoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgW1tFeHRyaW5zaWNdXSBjb250YWluZWQgaW4gdGhlIGJsb2NrXG4gICAgICovXG4gICAgZ2V0IGV4dHJpbnNpY3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2V4dHJpbnNpY3MnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEJsb2NrL2hlYWRlciBbW0hhc2hdXVxuICAgICAqL1xuICAgIGdldCBoYXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXIuaGFzaDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0hlYWRlcl1dIG9mIHRoZSBibG9ja1xuICAgICAqL1xuICAgIGdldCBoZWFkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2hlYWRlcicpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN0cnVjdCwgVThhRml4ZWQgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaXNIZXgsIGlzT2JqZWN0LCBpc1U4YSwgb2JqZWN0U3ByZWFkLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKlxuICogR2V0IGEgbWFwcGluZyBvZiBgYXJndW1lbnQgbmFtZSAtPiBhcmd1bWVudCB0eXBlYCBmb3IgdGhlIGZ1bmN0aW9uLCBmcm9tXG4gKiBpdHMgbWV0YWRhdGEuXG4gKlxuICogQHBhcmFtIG1ldGEgLSBUaGUgZnVuY3Rpb24gbWV0YWRhdGEgdXNlZCB0byBnZXQgdGhlIGRlZmluaXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0QXJnc0RlZihyZWdpc3RyeSwgbWV0YSkge1xuICAgIHJldHVybiBtZXRhLmZpZWxkcy5yZWR1Y2UoKHJlc3VsdCwgeyBuYW1lLCB0eXBlIH0sIGluZGV4KSA9PiB7XG4gICAgICAgIHJlc3VsdFtuYW1lLnVud3JhcE9yKGBwYXJhbSR7aW5kZXh9YCkudG9TdHJpbmcoKV0gPSByZWdpc3RyeS5jcmVhdGVMb29rdXBUeXBlKHR5cGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUNhbGxWaWFPYmplY3QocmVnaXN0cnksIHZhbHVlLCBfbWV0YSkge1xuICAgIC8vIHdlIG9ubHkgcGFzcyBhcmdzL21ldGhvZHNJbmRleCBvdXRcbiAgICBjb25zdCB7IGFyZ3MsIGNhbGxJbmRleCB9ID0gdmFsdWU7XG4gICAgLy8gR2V0IHRoZSBjb3JyZWN0IGxvb2t1cEluZGV4XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGNvbnN0IGxvb2t1cEluZGV4ID0gY2FsbEluZGV4IGluc3RhbmNlb2YgR2VuZXJpY0NhbGxJbmRleFxuICAgICAgICA/IGNhbGxJbmRleC50b1U4YSgpXG4gICAgICAgIDogY2FsbEluZGV4O1xuICAgIC8vIEZpbmQgbWV0YWRhdGEgd2l0aCBjYWxsSW5kZXhcbiAgICBjb25zdCBtZXRhID0gX21ldGEgfHwgcmVnaXN0cnkuZmluZE1ldGFDYWxsKGxvb2t1cEluZGV4KS5tZXRhO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIGFyZ3NEZWY6IGdldEFyZ3NEZWYocmVnaXN0cnksIG1ldGEpLFxuICAgICAgICBjYWxsSW5kZXgsXG4gICAgICAgIG1ldGFcbiAgICB9O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlQ2FsbFZpYVU4YShyZWdpc3RyeSwgdmFsdWUsIF9tZXRhKSB7XG4gICAgLy8gV2UgbmVlZCAyIGJ5dGVzIGZvciB0aGUgY2FsbEluZGV4XG4gICAgY29uc3QgY2FsbEluZGV4ID0gcmVnaXN0cnkuZmlyc3RDYWxsSW5kZXguc2xpY2UoKTtcbiAgICBjYWxsSW5kZXguc2V0KHZhbHVlLnN1YmFycmF5KDAsIDIpLCAwKTtcbiAgICAvLyBGaW5kIG1ldGFkYXRhIHdpdGggY2FsbEluZGV4XG4gICAgY29uc3QgbWV0YSA9IF9tZXRhIHx8IHJlZ2lzdHJ5LmZpbmRNZXRhQ2FsbChjYWxsSW5kZXgpLm1ldGE7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogdmFsdWUuc3ViYXJyYXkoMiksXG4gICAgICAgIGFyZ3NEZWY6IGdldEFyZ3NEZWYocmVnaXN0cnksIG1ldGEpLFxuICAgICAgICBjYWxsSW5kZXgsXG4gICAgICAgIG1ldGFcbiAgICB9O1xufVxuLyoqXG4gKiBEZWNvZGUgaW5wdXQgdG8gcGFzcyBpbnRvIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGRlY29kZSwgb25lIG9mOlxuICogLSBoZXhcbiAqIC0gVWludDhBcnJheVxuICogLSB7QHNlZSBEZWNvZGVNZXRob2RJbnB1dH1cbiAqIEBwYXJhbSBfbWV0YSAtIE1ldGFkYXRhIHRvIHVzZSwgc28gdGhhdCBgaW5qZWN0TWV0aG9kc2AgbG9va3VwIGlzIG5vdFxuICogbmVjZXNzYXJ5LlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUNhbGwocmVnaXN0cnksIHZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoKSwgX21ldGEpIHtcbiAgICBpZiAoaXNVOGEodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlQ2FsbFZpYVU4YShyZWdpc3RyeSwgdThhVG9VOGEodmFsdWUpLCBfbWV0YSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5jYWxsSW5kZXggJiYgdmFsdWUuYXJncykge1xuICAgICAgICByZXR1cm4gZGVjb2RlQ2FsbFZpYU9iamVjdChyZWdpc3RyeSwgdmFsdWUsIF9tZXRhKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYWxsOiBDYW5ub3QgZGVjb2RlIHZhbHVlICcke3ZhbHVlfScgb2YgdHlwZSAke3R5cGVvZiB2YWx1ZX1gKTtcbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0NhbGxJbmRleFxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHdyYXBwZXIgYXJvdW5kIHRoZSBgW3NlY3Rpb25JbmRleCwgbWV0aG9kSW5kZXhdYCB2YWx1ZSB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBtZXRob2RcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNDYWxsSW5kZXggZXh0ZW5kcyBVOGFGaXhlZCB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCB2YWx1ZSwgMTYpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHZhbHVlIGluIGEgYmVzdC1maXQgcHJpbWl0aXZlIGZvcm1cbiAgICAgKi9cbiAgICB0b1ByaW1pdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9IZXgoKTtcbiAgICB9XG59XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNDYWxsXG4gKiBAZGVzY3JpcHRpb25cbiAqIEV4dHJpbnNpYyBmdW5jdGlvbiBkZXNjcmlwdG9yXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljQ2FsbCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX21ldGE7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlLCBtZXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVDYWxsKHJlZ2lzdHJ5LCB2YWx1ZSwgbWV0YSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgICAgIGNhbGxJbmRleDogR2VuZXJpY0NhbGxJbmRleCxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgICAgICAgICAgYXJnczogU3RydWN0LndpdGgoZGVjb2RlZC5hcmdzRGVmKVxuICAgICAgICAgICAgfSwgZGVjb2RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsZXQgbWV0aG9kID0gJ3Vua25vd24udW5rbm93bic7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSByZWdpc3RyeS5maW5kTWV0YUNhbGwoZGVjb2RlZC5jYWxsSW5kZXgpO1xuICAgICAgICAgICAgICAgIG1ldGhvZCA9IGAke2Muc2VjdGlvbn0uJHtjLm1ldGhvZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYWxsOiBmYWlsZWQgZGVjb2RpbmcgJHttZXRob2R9OjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21ldGEgPSBkZWNvZGVkLm1ldGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgYXJndW1lbnRzIGZvciB0aGUgZnVuY3Rpb24gY2FsbFxuICAgICAqL1xuICAgIGdldCBhcmdzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZ2V0VCgnYXJncycpLnZhbHVlcygpXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBhcmd1bWVudCBkZWZpbml0aW9uc1xuICAgICAqL1xuICAgIGdldCBhcmdzRGVmKCkge1xuICAgICAgICByZXR1cm4gZ2V0QXJnc0RlZih0aGlzLnJlZ2lzdHJ5LCB0aGlzLm1ldGEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGFyZ3VtZW50IGVudHJpZXNcbiAgICAgKi9cbiAgICBnZXQgYXJnc0VudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5nZXRUKCdhcmdzJykuZW50cmllcygpXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBlbmNvZGVkIGBbc2VjdGlvbkluZGV4LCBtZXRob2RJbmRleF1gIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICBnZXQgY2FsbEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdjYWxsSW5kZXgnKS50b1U4YSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVuY29kZWQgZGF0YVxuICAgICAqL1xuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdhcmdzJykudG9VOGEoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW0Z1bmN0aW9uTWV0YWRhdGFdXVxuICAgICAqL1xuICAgIGdldCBtZXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZFxuICAgICAqL1xuICAgIGdldCBtZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmZpbmRNZXRhQ2FsbCh0aGlzLmNhbGxJbmRleCkubWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIG1ldGhvZFxuICAgICAqL1xuICAgIGdldCBzZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5maW5kTWV0YUNhbGwodGhpcy5jYWxsSW5kZXgpLnNlY3Rpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgdGhlIHNvdXJjZSBtYXRjaGVzIHRoaXMgaW4gdHlwZVxuICAgICAqL1xuICAgIGlzKG90aGVyKSB7XG4gICAgICAgIHJldHVybiBvdGhlci5jYWxsSW5kZXhbMF0gPT09IHRoaXMuY2FsbEluZGV4WzBdICYmIG90aGVyLmNhbGxJbmRleFsxXSA9PT0gdGhpcy5jYWxsSW5kZXhbMV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4cGFuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgbGV0IGNhbGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsID0gdGhpcy5yZWdpc3RyeS5maW5kTWV0YUNhbGwodGhpcy5jYWxsSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIC8vIHN3YWxsb3dcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGFyZ3M6IHRoaXMuYXJnc0VudHJpZXMucmVkdWNlKChhcmdzLCBbbiwgYV0pID0+IG9iamVjdFNwcmVhZChhcmdzLCB7IFtuXTogYS50b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSkgfSksIHt9KSxcbiAgICAgICAgICAgIG1ldGhvZDogY2FsbD8ubWV0aG9kLFxuICAgICAgICAgICAgc2VjdGlvbjogY2FsbD8uc2VjdGlvblxuICAgICAgICB9LCBpc0V4cGFuZGVkICYmIGNhbGxcbiAgICAgICAgICAgID8geyBkb2NzOiBjYWxsLm1ldGEuZG9jcy5tYXAoKGQpID0+IGQudG9TdHJpbmcoKSkgfVxuICAgICAgICAgICAgOiBudWxsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnQ2FsbCc7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSnNvbiB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc051bGwsIGlzVW5kZWZpbmVkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuZnVuY3Rpb24gY3JlYXRlVmFsdWUocmVnaXN0cnksIHR5cGUsIHZhbHVlLCBhc0FycmF5ID0gdHJ1ZSkge1xuICAgIC8vIFdlIGRldGVjdCBjb2RlYyBoZXJlIGFzIHdlbGwgLSB3aGVuIGZvdW5kLCBnZW5lcmFsbHkgdGhpcyBpcyBjb25zdHJ1Y3RlZCBmcm9tIGl0c2VsZlxuICAgIGlmICh2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVud3JhcE9yRGVmYXVsdCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSh0eXBlLCBbXG4gICAgICAgIGFzQXJyYXlcbiAgICAgICAgICAgID8gaXNOdWxsKHZhbHVlKSB8fCBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBbdmFsdWVdXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgXSk7XG59XG5mdW5jdGlvbiBkZWNvZGVWYWx1ZShyZWdpc3RyeSwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBrZXkgPT09ICdzczU4Rm9ybWF0J1xuICAgICAgICA/IGNyZWF0ZVZhbHVlKHJlZ2lzdHJ5LCAnT3B0aW9uPHUzMj4nLCB2YWx1ZSwgZmFsc2UpXG4gICAgICAgIDoga2V5ID09PSAndG9rZW5EZWNpbWFscydcbiAgICAgICAgICAgID8gY3JlYXRlVmFsdWUocmVnaXN0cnksICdPcHRpb248VmVjPHUzMj4+JywgdmFsdWUpXG4gICAgICAgICAgICA6IGtleSA9PT0gJ3Rva2VuU3ltYm9sJ1xuICAgICAgICAgICAgICAgID8gY3JlYXRlVmFsdWUocmVnaXN0cnksICdPcHRpb248VmVjPFRleHQ+PicsIHZhbHVlKVxuICAgICAgICAgICAgICAgIDoga2V5ID09PSAnaXNFdGhlcmV1bSdcbiAgICAgICAgICAgICAgICAgICAgPyBjcmVhdGVWYWx1ZShyZWdpc3RyeSwgJ0Jvb2wnLCB2YWx1ZSwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIDogdmFsdWU7XG59XG5mdW5jdGlvbiBkZWNvZGUocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAvLyBhbGxvdyBkZWNvZGluZyBmcm9tIGEgbWFwIGFzIHdlbGwgKG91cnNlbHZlcylcbiAgICB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVudHJpZXMpXG4gICAgICAgID8gWy4uLnZhbHVlLmVudHJpZXMoKV1cbiAgICAgICAgOiBPYmplY3QuZW50cmllcyh2YWx1ZSB8fCB7fSkpLnJlZHVjZSgoYWxsLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWxsW2tleV0gPSBkZWNvZGVWYWx1ZShyZWdpc3RyeSwga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBhbGw7XG4gICAgfSwge1xuICAgICAgICBpc0V0aGVyZXVtOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdCb29sJywgW10pLFxuICAgICAgICBzczU4Rm9ybWF0OiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdPcHRpb248dTMyPicsIFtdKSxcbiAgICAgICAgdG9rZW5EZWNpbWFsczogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnT3B0aW9uPFZlYzx1MzI+PicsIFtdKSxcbiAgICAgICAgdG9rZW5TeW1ib2w6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ09wdGlvbjxWZWM8VGV4dD4+JywgW10pXG4gICAgfSk7XG59XG5leHBvcnQgY2xhc3MgR2VuZXJpY0NoYWluUHJvcGVydGllcyBleHRlbmRzIEpzb24ge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZGVjb2RlKHJlZ2lzdHJ5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGNoYWluIHVzZXMgRXRoZXJldW0gYWRkcmVzc2VzXG4gICAgICovXG4gICAgZ2V0IGlzRXRoZXJldW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ2lzRXRoZXJldW0nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBjaGFpbiBzczU4Rm9ybWF0XG4gICAgICovXG4gICAgZ2V0IHNzNThGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3NzNThGb3JtYXQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBkZWNpbWFscyBmb3IgZWFjaCBvZiB0aGUgdG9rZW5zXG4gICAgICovXG4gICAgZ2V0IHRva2VuRGVjaW1hbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3Rva2VuRGVjaW1hbHMnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBzeW1ib2xzIGZvciB0aGUgdG9rZW5zXG4gICAgICovXG4gICAgZ2V0IHRva2VuU3ltYm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCd0b2tlblN5bWJvbCcpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFU4YUZpeGVkIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IEJOLCBiblRvVThhLCBpc051bWJlciwgc3RyaW5nVG9VOGEsIHU4YVRvSGV4LCB1OGFUb1N0cmluZyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmV4cG9ydCBjb25zdCBDSURfQVVSQSA9IC8qI19fUFVSRV9fKi8gc3RyaW5nVG9VOGEoJ2F1cmEnKTtcbmV4cG9ydCBjb25zdCBDSURfQkFCRSA9IC8qI19fUFVSRV9fKi8gc3RyaW5nVG9VOGEoJ0JBQkUnKTtcbmV4cG9ydCBjb25zdCBDSURfR1JQQSA9IC8qI19fUFVSRV9fKi8gc3RyaW5nVG9VOGEoJ0ZSTksnKTtcbmV4cG9ydCBjb25zdCBDSURfUE9XID0gLyojX19QVVJFX18qLyBzdHJpbmdUb1U4YSgncG93XycpO1xuZXhwb3J0IGNvbnN0IENJRF9OTUJTID0gLyojX19QVVJFX18qLyBzdHJpbmdUb1U4YSgnbm1icycpO1xuZnVuY3Rpb24gZ2V0QXVyYUF1dGhvcihyZWdpc3RyeSwgYnl0ZXMsIHNlc3Npb25WYWxpZGF0b3JzKSB7XG4gICAgcmV0dXJuIHNlc3Npb25WYWxpZGF0b3JzW3JlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1Jhd0F1cmFQcmVEaWdlc3QnLCBbYnl0ZXMudG9VOGEodHJ1ZSldKVxuICAgICAgICAuc2xvdE51bWJlclxuICAgICAgICAubW9kKG5ldyBCTihzZXNzaW9uVmFsaWRhdG9ycy5sZW5ndGgpKVxuICAgICAgICAudG9OdW1iZXIoKV07XG59XG5mdW5jdGlvbiBnZXRCYWJlQXV0aG9yKHJlZ2lzdHJ5LCBieXRlcywgc2Vzc2lvblZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCBkaWdlc3QgPSByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdSYXdCYWJlUHJlRGlnZXN0Q29tcGF0JywgW2J5dGVzLnRvVThhKHRydWUpXSk7XG4gICAgcmV0dXJuIHNlc3Npb25WYWxpZGF0b3JzW2RpZ2VzdC52YWx1ZS50b051bWJlcigpXTtcbn1cbmZ1bmN0aW9uIGdldEJ5dGVzQXNBdXRob3IocmVnaXN0cnksIGJ5dGVzKSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJZCcsIFtieXRlc10pO1xufVxuLyoqXG4gKiBAbmFtZSBHZW5lcmljQ29uc2Vuc3VzRW5naW5lSWRcbiAqIEBkZXNjcmlwdGlvblxuICogQSA0LWJ5dGUgaWRlbnRpZmllciBpZGVudGlmeWluZyB0aGUgZW5naW5lXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljQ29uc2Vuc3VzRW5naW5lSWQgZXh0ZW5kcyBVOGFGaXhlZCB7XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBpc051bWJlcih2YWx1ZSlcbiAgICAgICAgICAgID8gYm5Ub1U4YSh2YWx1ZSwgeyBpc0xlOiBmYWxzZSB9KVxuICAgICAgICAgICAgOiB2YWx1ZSwgMzIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlmIHRoZSBlbmdpbmUgbWF0Y2hlcyBhdXJhXG4gICAgICovXG4gICAgZ2V0IGlzQXVyYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoQ0lEX0FVUkEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlzIHRoZSBlbmdpbmUgbWF0Y2hlcyBiYWJlXG4gICAgICovXG4gICAgZ2V0IGlzQmFiZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoQ0lEX0JBQkUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlzIHRoZSBlbmdpbmUgbWF0Y2hlcyBncmFuZHBhXG4gICAgICovXG4gICAgZ2V0IGlzR3JhbmRwYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoQ0lEX0dSUEEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlzIHRoZSBlbmdpbmUgbWF0Y2hlcyBwb3dcbiAgICAgKi9cbiAgICBnZXQgaXNQb3coKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVxKENJRF9QT1cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gYHRydWVgIGlzIHRoZSBlbmdpbmUgbWF0Y2hlcyBuaW1idXNcbiAgICAgKi9cbiAgICBnZXQgaXNOaW1idXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVxKENJRF9OTUJTKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZyb20gdGhlIGlucHV0IGJ5dGVzLCBkZWNvZGUgaW50byBhbiBhdXRob3JcbiAgICAgKi9cbiAgICBleHRyYWN0QXV0aG9yKGJ5dGVzLCBzZXNzaW9uVmFsaWRhdG9ycykge1xuICAgICAgICBpZiAoc2Vzc2lvblZhbGlkYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBdXJhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEF1cmFBdXRob3IodGhpcy5yZWdpc3RyeSwgYnl0ZXMsIHNlc3Npb25WYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNCYWJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEJhYmVBdXRob3IodGhpcy5yZWdpc3RyeSwgYnl0ZXMsIHNlc3Npb25WYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgcG93ICYgTmltYnVzLCB0aGUgYnl0ZXMgYXJlIHRoZSBhY3R1YWwgYXV0aG9yXG4gICAgICAgIGlmICh0aGlzLmlzUG93IHx8IHRoaXMuaXNOaW1idXMpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRCeXRlc0FzQXV0aG9yKHRoaXMucmVnaXN0cnksIGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIE9iamVjdCB0byB0byBhIGh1bWFuLWZyaWVuZGx5IEpTT04sIHdpdGggYWRkaXRpb25hbCBmaWVsZHMsIGV4cGFuc2lvbiBhbmQgZm9ybWF0dGluZyBvZiBpbmZvcm1hdGlvblxuICAgICAqL1xuICAgIHRvSHVtYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBiYXNlIHJ1bnRpbWUgdHlwZSBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAgICovXG4gICAgdG9SYXdUeXBlKCkge1xuICAgICAgICByZXR1cm4gJ0NvbnNlbnN1c0VuZ2luZUlkJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHRvU3RyaW5nIHRvIHJldHVybiBhIDQtYnl0ZSBzdHJpbmdcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBc2NpaVxuICAgICAgICAgICAgPyB1OGFUb1N0cmluZyh0aGlzKVxuICAgICAgICAgICAgOiB1OGFUb0hleCh0aGlzKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBOdWxsLCBTdHJ1Y3QsIFR1cGxlIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IG9iamVjdFByb3BlcnRpZXMsIG9iamVjdFNwcmVhZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUV2ZW50KHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGlmICghdmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4geyBEYXRhVHlwZTogTnVsbCB9O1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHZhbHVlLnN1YmFycmF5KDAsIDIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIERhdGFUeXBlOiByZWdpc3RyeS5maW5kTWV0YUV2ZW50KGluZGV4KSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlLnN1YmFycmF5KDIpLFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNFdmVudERhdGFcbiAqIEBkZXNjcmlwdGlvblxuICogV3JhcHBlciBmb3IgdGhlIGFjdHVhbCBkYXRhIHRoYXQgZm9ybXMgcGFydCBvZiBhbiBbW0V2ZW50XV1cbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNFdmVudERhdGEgZXh0ZW5kcyBUdXBsZSB7XG4gICAgX19pbnRlcm5hbF9fbWV0YTtcbiAgICBfX2ludGVybmFsX19tZXRob2Q7XG4gICAgX19pbnRlcm5hbF9fbmFtZXMgPSBudWxsO1xuICAgIF9faW50ZXJuYWxfX3NlY3Rpb247XG4gICAgX19pbnRlcm5hbF9fdHlwZURlZjtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIG1ldGEsIHNlY3Rpb24gPSAnPHVua25vd24+JywgbWV0aG9kID0gJzx1bmtub3duPicpIHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gbWV0YT8uZmllbGRzIHx8IFtdO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZmllbGRzLm1hcCgoeyB0eXBlIH0pID0+IHJlZ2lzdHJ5LmNyZWF0ZUxvb2t1cFR5cGUodHlwZSkpLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fbWV0YSA9IG1ldGE7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fbWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3NlY3Rpb24gPSBzZWN0aW9uO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWYgPSBmaWVsZHMubWFwKCh7IHR5cGUgfSkgPT4gcmVnaXN0cnkubG9va3VwLmdldFR5cGVEZWYodHlwZSkpO1xuICAgICAgICBjb25zdCBuYW1lcyA9IGZpZWxkc1xuICAgICAgICAgICAgLm1hcCgoeyBuYW1lIH0pID0+IHJlZ2lzdHJ5Lmxvb2t1cC5zYW5pdGl6ZUZpZWxkKG5hbWUpWzBdKVxuICAgICAgICAgICAgLmZpbHRlcigobikgPT4gISFuKTtcbiAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19uYW1lcyA9IG5hbWVzO1xuICAgICAgICAgICAgb2JqZWN0UHJvcGVydGllcyh0aGlzLCBuYW1lcywgKF8sIGkpID0+IHRoaXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgd3JhcHBlZCBbW0V2ZW50TWV0YWRhdGFdXVxuICAgICAqL1xuICAgIGdldCBtZXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19tZXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIG1ldGhvZCBhcyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGdldCBtZXRob2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX21ldGhvZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBmaWVsZCBuYW1lcyAoYXMgYXZhaWxhYmxlKVxuICAgICAqL1xuICAgIGdldCBuYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fbmFtZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VjdGlvbiBhcyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGdldCBzZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19zZWN0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbVHlwZURlZl1dIGZvciB0aGlzIGV2ZW50XG4gICAgICovXG4gICAgZ2V0IHR5cGVEZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4dGVuZGVkLCBkaXNhYmxlQXNjaWkpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fbmFtZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHRoaXMuX19pbnRlcm5hbF9fbmFtZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGpzb25bdGhpcy5fX2ludGVybmFsX19uYW1lc1tpXV0gPSB0aGlzW2ldLnRvSHVtYW4oaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBqc29uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci50b0h1bWFuKGlzRXh0ZW5kZWQpO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgR2VuZXJpY0V2ZW50XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBzeXN0ZW0gZXZlbnQuIFRoZXNlIGFyZSBnZW5lcmF0ZWQgdmlhIHRoZSBbW01ldGFkYXRhXV0gaW50ZXJmYWNlcyBhbmRcbiAqIHNwZWNpZmljIHRvIGEgc3BlY2lmaWMgU3Vic3RyYXRlIHJ1bnRpbWVcbiAqL1xuZXhwb3J0IGNsYXNzIEdlbmVyaWNFdmVudCBleHRlbmRzIFN0cnVjdCB7XG4gICAgLy8gQ3VycmVudGx5IHdlIF9vbmx5XyBkZWNvZGUgZnJvbSBVaW50OEFycmF5LCBzaW5jZSB3ZSBleHBlY3QgaXQgdG9cbiAgICAvLyBiZSB1c2VkIHZpYSBFdmVudFJlY29yZFxuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCBfdmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBEYXRhVHlwZSwgdmFsdWUgfSA9IGRlY29kZUV2ZW50KHJlZ2lzdHJ5LCBfdmFsdWUpO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgaW5kZXg6ICdFdmVudElkJyxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb3J0LWtleXNcbiAgICAgICAgICAgIGRhdGE6IERhdGFUeXBlXG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB3cmFwcGVkIFtbRXZlbnREYXRhXV1cbiAgICAgKi9cbiAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VCgnZGF0YScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXZlbnRJZF1dLCBpZGVudGlmeWluZyB0aGUgcmF3IGV2ZW50XG4gICAgICovXG4gICAgZ2V0IGluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdpbmRleCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIFtbRXZlbnRNZXRhZGF0YV1dIHdpdGggdGhlIGRvY3VtZW50YXRpb25cbiAgICAgKi9cbiAgICBnZXQgbWV0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tZXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIG1ldGhvZCBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGV2ZW50XG4gICAgICovXG4gICAgZ2V0IG1ldGhvZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tZXRob2Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VjdGlvbiBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGV2ZW50XG4gICAgICovXG4gICAgZ2V0IHNlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2VjdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBbW1R5cGVEZWZdXSBmb3IgdGhlIGV2ZW50XG4gICAgICovXG4gICAgZ2V0IHR5cGVEZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEudHlwZURlZjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBPYmplY3QgdG8gdG8gYSBodW1hbi1mcmllbmRseSBKU09OLCB3aXRoIGFkZGl0aW9uYWwgZmllbGRzLCBleHBhbnNpb24gYW5kIGZvcm1hdHRpbmcgb2YgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICB0b0h1bWFuKGlzRXhwYW5kZWQsIGRpc2FibGVBc2NpaSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICAgICAgICBzZWN0aW9uOiB0aGlzLnNlY3Rpb25cbiAgICAgICAgfSwgaXNFeHBhbmRlZFxuICAgICAgICAgICAgPyB7IGRvY3M6IHRoaXMubWV0YS5kb2NzLm1hcCgoZCkgPT4gZC50b1N0cmluZygpKSB9XG4gICAgICAgICAgICA6IG51bGwsIHN1cGVyLnRvSHVtYW4oaXNFeHBhbmRlZCwgZGlzYWJsZUFzY2lpKSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQWJzdHJhY3RCYXNlIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzQmlnSW50LCBpc0JuLCBpc0hleCwgaXNOdW1iZXIsIGlzVThhLCB1OGFDb25jYXQsIHU4YVRvQm4sIHU4YVRvSGV4LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgR2VuZXJpY0FjY291bnRJZCB9IGZyb20gJy4vQWNjb3VudElkLmpzJztcbmltcG9ydCB7IEdlbmVyaWNBY2NvdW50SW5kZXggfSBmcm9tICcuL0FjY291bnRJbmRleC5qcyc7XG5leHBvcnQgY29uc3QgQUNDT1VOVF9JRF9QUkVGSVggPSBuZXcgVWludDhBcnJheShbMHhmZl0pO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVBZGRyZXNzKHZhbHVlKTtcbiAgICByZXR1cm4gZGVjb2RlZC5sZW5ndGggPT09IDMyXG4gICAgICAgID8gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnQWNjb3VudElkJywgW2RlY29kZWRdKVxuICAgICAgICA6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFt1OGFUb0JuKGRlY29kZWQpXSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVVOGEocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gaW5zdGFudGlhdGUgYW4gYWRkcmVzcyB3aXRoIGEgcmF3IHB1YmxpY0tleS4gRG8gdGhpcyBmaXJzdCBiZWZvcmVcbiAgICAvLyB3ZSBjaGVja2luZyB0aGUgZmlyc3QgYnl0ZSwgb3RoZXJ3aXNlIHdlIG1heSBzcGxpdCBhbiBhbHJlYWR5LWV4aXN0ZW50IHZhbGlkIGFkZHJlc3NcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAzMikge1xuICAgICAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnQWNjb3VudElkJywgW3ZhbHVlXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlWzBdID09PSAweGZmKSB7XG4gICAgICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdBY2NvdW50SWQnLCBbdmFsdWUuc3ViYXJyYXkoMSldKTtcbiAgICB9XG4gICAgY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IEdlbmVyaWNBY2NvdW50SW5kZXgucmVhZExlbmd0aCh2YWx1ZSk7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFt1OGFUb0JuKHZhbHVlLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSldKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUFkZHJlc3NPckluZGV4KHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNMb29rdXBTb3VyY2VcbiAgICAgICAgPyB2YWx1ZS5pbm5lclxuICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgR2VuZXJpY0FjY291bnRJZCB8fCB2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNBY2NvdW50SW5kZXhcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogaXNCbih2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpIHx8IGlzQmlnSW50KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnQWNjb3VudEluZGV4JywgW3ZhbHVlXSlcbiAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGlzSGV4KHZhbHVlKSB8fCBpc1U4YSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyBkZWNvZGVVOGEocmVnaXN0cnksIHU4YVRvVThhKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgOiBkZWNvZGVTdHJpbmcocmVnaXN0cnksIHZhbHVlKTtcbn1cbi8qKlxuICogQG5hbWUgTG9va3VwU291cmNlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgd3JhcHBlciBhcm91bmQgYW4gQWNjb3VudElkIGFuZC9vciBBY2NvdW50SW5kZXggdGhhdCBpcyBlbmNvZGVkIHdpdGggYSBwcmVmaXguXG4gKiBTaW5jZSB3ZSBhcmUgZGVhbGluZyB3aXRoIHVuZGVybHlpbmcgcHVibGljS2V5cyAob3Igc2hvcnRlciBlbmNvZGVkIGFkZHJlc3NlcyksXG4gKiB3ZSBleHRlbmQgZnJvbSBCYXNlIHdpdGggYW4gQWNjb3VudElkL0FjY291bnRJbmRleCB3cmFwcGVyLiBCYXNpY2FsbHkgdGhlIEFkZHJlc3NcbiAqIGlzIGVuY29kZWQgYXMgYFsgPHByZWZpeC1ieXRlPiwgLi4ucHVibGljS2V5Ly4uLmJ5dGVzIF1gIGFzIHBlciBzcGVjXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmljTG9va3VwU291cmNlIGV4dGVuZHMgQWJzdHJhY3RCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUgPSBuZXcgVWludDhBcnJheSgpKSB7XG4gICAgICAgIHN1cGVyKHJlZ2lzdHJ5LCBkZWNvZGVBZGRyZXNzT3JJbmRleChyZWdpc3RyeSwgdmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHdoZW4gZW5jb2RlZCBhcyBhIFVpbnQ4QXJyYXlcbiAgICAgKi9cbiAgICBnZXQgZW5jb2RlZExlbmd0aCgpIHtcbiAgICAgICAgY29uc3QgcmF3TGVuZ3RoID0gdGhpcy5fcmF3TGVuZ3RoO1xuICAgICAgICByZXR1cm4gcmF3TGVuZ3RoICsgKFxuICAgICAgICAvLyBmb3IgMSBieXRlIEFjY291bnRJbmRleGVzLCB3ZSBhcmUgbm90IGFkZGluZyBhIHNwZWNpZmljIHByZWZpeFxuICAgICAgICByYXdMZW5ndGggPiAxXG4gICAgICAgICAgICA/IDFcbiAgICAgICAgICAgIDogMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbGVuZ3RoIG9mIHRoZSByYXcgdmFsdWUsIGVpdGhlciBBY2NvdW50SW5kZXggb3IgQWNjb3VudElkXG4gICAgICovXG4gICAgZ2V0IF9yYXdMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyIGluc3RhbmNlb2YgR2VuZXJpY0FjY291bnRJbmRleFxuICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LmNhbGNMZW5ndGgodGhpcy5pbm5lcilcbiAgICAgICAgICAgIDogdGhpcy5pbm5lci5lbmNvZGVkTGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGJyZWFrZG93biBvZiB0aGUgaGV4IGVuY29kaW5nIGZvciB0aGlzIENvZGVjXG4gICAgICovXG4gICAgaW5zcGVjdCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmlubmVyLnRvVThhKCkuc3ViYXJyYXkoMCwgdGhpcy5fcmF3TGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGVyOiBbXG4gICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkodGhpcy5pbm5lciBpbnN0YW5jZW9mIEdlbmVyaWNBY2NvdW50SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LndyaXRlTGVuZ3RoKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IEFDQ09VTlRfSURfUFJFRklYKSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gICAgICovXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb0hleCh0aGlzLnRvVThhKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgYmFzZSBydW50aW1lIHR5cGUgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZVxuICAgICAqL1xuICAgIHRvUmF3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICdBZGRyZXNzJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVuY29kZXMgdGhlIHZhbHVlIGFzIGEgVWludDhBcnJheSBhcyBwZXIgdGhlIFNDQUxFIHNwZWNpZmljYXRpb25zXG4gICAgICogQHBhcmFtIGlzQmFyZSB0cnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBub25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIHByZWZpeGVzIChpbnRlcm5hbClcbiAgICAgKi9cbiAgICB0b1U4YShpc0JhcmUpIHtcbiAgICAgICAgY29uc3QgZW5jb2RlZCA9IHRoaXMuaW5uZXIudG9VOGEoKS5zdWJhcnJheSgwLCB0aGlzLl9yYXdMZW5ndGgpO1xuICAgICAgICByZXR1cm4gaXNCYXJlXG4gICAgICAgICAgICA/IGVuY29kZWRcbiAgICAgICAgICAgIDogdThhQ29uY2F0KHRoaXMuaW5uZXIgaW5zdGFuY2VvZiBHZW5lcmljQWNjb3VudEluZGV4XG4gICAgICAgICAgICAgICAgPyBHZW5lcmljQWNjb3VudEluZGV4LndyaXRlTGVuZ3RoKGVuY29kZWQpXG4gICAgICAgICAgICAgICAgOiBBQ0NPVU5UX0lEX1BSRUZJWCwgZW5jb2RlZCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRW51bSB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBpc0JuLCBpc051bWJlciwgaXNTdHJpbmcsIGlzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5pbXBvcnQgeyBHZW5lcmljQWNjb3VudElkIH0gZnJvbSAnLi9BY2NvdW50SWQuanMnO1xuaW1wb3J0IHsgR2VuZXJpY0FjY291bnRJbmRleCB9IGZyb20gJy4vQWNjb3VudEluZGV4LmpzJztcbmZ1bmN0aW9uIGRlY29kZVU4YShyZWdpc3RyeSwgdThhKSB7XG4gICAgaWYgKFswLCAzMl0uaW5jbHVkZXModThhLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIHsgSWQ6IHU4YSB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh1OGEubGVuZ3RoID09PSAyMCkge1xuICAgICAgICByZXR1cm4geyBBZGRyZXNzMjA6IHU4YSB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh1OGEubGVuZ3RoIDw9IDgpIHtcbiAgICAgICAgcmV0dXJuIHsgSW5kZXg6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0FjY291bnRJbmRleCcsIFt1OGFdKS50b051bWJlcigpIH07XG4gICAgfVxuICAgIHJldHVybiB1OGE7XG59XG5mdW5jdGlvbiBkZWNvZGVNdWx0aUFueShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBHZW5lcmljQWNjb3VudElkKSB7XG4gICAgICAgIHJldHVybiB7IElkOiB2YWx1ZSB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1U4YSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gTk9URSBUaGlzIGlzIGFmdGVyIHRoZSBBY2NvdW50SWQgY2hlY2sgKHdoaWNoIGlzIFU4YSlcbiAgICAgICAgcmV0dXJuIGRlY29kZVU4YShyZWdpc3RyeSwgdmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNNdWx0aUFkZHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdlbmVyaWNBY2NvdW50SW5kZXggfHwgaXNCbih2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IEluZGV4OiBpc051bWJlcih2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlLnRvTnVtYmVyKCkgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVOGEocmVnaXN0cnksIGRlY29kZUFkZHJlc3ModmFsdWUudG9TdHJpbmcoKSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgY2xhc3MgR2VuZXJpY011bHRpQWRkcmVzcyBleHRlbmRzIEVudW0ge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgSWQ6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgSW5kZXg6ICdDb21wYWN0PEFjY291bnRJbmRleD4nLFxuICAgICAgICAgICAgUmF3OiAnQnl0ZXMnLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvcnQta2V5c1xuICAgICAgICAgICAgQWRkcmVzczMyOiAnSDI1NicsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgICAgICBBZGRyZXNzMjA6ICdIMTYwJ1xuICAgICAgICB9LCBkZWNvZGVNdWx0aUFueShyZWdpc3RyeSwgdmFsdWUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBicmVha2Rvd24gb2YgdGhlIGhleCBlbmNvZGluZyBmb3IgdGhpcyBDb2RlY1xuICAgICAqL1xuICAgIGluc3BlY3QoKSB7XG4gICAgICAgIGNvbnN0IHsgaW5uZXIsIG91dGVyID0gW10gfSA9IHRoaXMuaW5uZXIuaW5zcGVjdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5uZXIsXG4gICAgICAgICAgICBvdXRlcjogW25ldyBVaW50OEFycmF5KFt0aGlzLmluZGV4XSksIC4uLm91dGVyXVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJvb2wsIFU4YUZpeGVkIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzVThhLCBpc1VuZGVmaW5lZCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmNvbnN0IEFZRV9CSVRTID0gMGIxMDAwMDAwMDtcbmNvbnN0IE5BWV9CSVRTID0gMGIwMDAwMDAwMDtcbmNvbnN0IENPTl9NQVNLID0gMGIwMTExMTExMTtcbmNvbnN0IERFRl9DT05WID0gMGIwMDAwMDAwMDsgLy8gdGhlIGRlZmF1bHQgY29udmljdGlvbiwgTm9uZVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlVm90ZUJvb2wodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyBuZXcgVWludDhBcnJheShbQVlFX0JJVFMgfCBERUZfQ09OVl0pXG4gICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoW05BWV9CSVRTXSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVWb3RlVThhKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aFxuICAgICAgICA/IHZhbHVlLnN1YmFycmF5KDAsIDEpXG4gICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoW05BWV9CSVRTXSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVWb3RlVHlwZShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAobmV3IEJvb2wocmVnaXN0cnksIHZhbHVlLmF5ZSkuaXNUcnVlXG4gICAgICAgICAgICA/IEFZRV9CSVRTXG4gICAgICAgICAgICA6IE5BWV9CSVRTKSB8XG4gICAgICAgICAgICByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdDb252aWN0aW9uJywgW3ZhbHVlLmNvbnZpY3Rpb24gfHwgREVGX0NPTlZdKS5pbmRleFxuICAgIF0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlVm90ZShyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICBpZiAoaXNVOGEodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVWb3RlVThhKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbiB8fCBpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVWb3RlQm9vbChuZXcgQm9vbChyZWdpc3RyeSwgdmFsdWUpLmlzVHJ1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVm90ZUJvb2wodmFsdWUgPCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZVZvdGVUeXBlKHJlZ2lzdHJ5LCB2YWx1ZSk7XG59XG4vKipcbiAqIEBuYW1lIEdlbmVyaWNWb3RlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgbnVtYmVyIG9mIGxvY2sgcGVyaW9kcywgcGx1cyBhIHZvdGUsIG9uZSB3YXkgb3IgdGhlIG90aGVyLlxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY1ZvdGUgZXh0ZW5kcyBVOGFGaXhlZCB7XG4gICAgX19pbnRlcm5hbF9fYXllO1xuICAgIF9faW50ZXJuYWxfX2NvbnZpY3Rpb247XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgICAgIC8vIGRlY29kZWQgaXMganVzdCAxIGJ5dGVcbiAgICAgICAgLy8gQXllOiBNb3N0IFNpZ25pZmljYW50IEJpdFxuICAgICAgICAvLyBDb252aWN0aW9uOiAwMDAwIC0gMDEwMVxuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVm90ZShyZWdpc3RyeSwgdmFsdWUpO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwgZGVjb2RlZCwgOCk7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXllID0gKGRlY29kZWRbMF0gJiBBWUVfQklUUykgPT09IEFZRV9CSVRTO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NvbnZpY3Rpb24gPSB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0NvbnZpY3Rpb24nLCBbZGVjb2RlZFswXSAmIENPTl9NQVNLXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgVjIgY29udmljdGlvblxuICAgICAqL1xuICAgIGdldCBjb252aWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19jb252aWN0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gdHJ1ZSBpZiB0aGUgd3JhcHBlZCB2YWx1ZSBpcyBhIHBvc2l0aXZlIHZvdGVcbiAgICAgKi9cbiAgICBnZXQgaXNBeWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2F5ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIHRydWUgaWYgdGhlIHdyYXBwZWQgdmFsdWUgaXMgYSBuZWdhdGl2ZSB2b3RlXG4gICAgICovXG4gICAgZ2V0IGlzTmF5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNBeWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIHRvIGEgaHVtYW4tZnJpZW5kbHkgSlNPTiwgd2l0aCBhZGRpdGlvbmFsIGZpZWxkcywgZXhwYW5zaW9uIGFuZCBmb3JtYXR0aW5nIG9mIGluZm9ybWF0aW9uXG4gICAgICovXG4gICAgdG9IdW1hbihpc0V4cGFuZGVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb252aWN0aW9uOiB0aGlzLmNvbnZpY3Rpb24udG9IdW1hbihpc0V4cGFuZGVkKSxcbiAgICAgICAgICAgIHZvdGU6IHRoaXMuaXNBeWUgPyAnQXllJyA6ICdOYXknXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgdmFsdWUgaW4gYSBiZXN0LWZpdCBwcmltaXRpdmUgZm9ybVxuICAgICAqL1xuICAgIHRvUHJpbWl0aXZlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXllOiB0aGlzLmlzQXllLFxuICAgICAgICAgICAgY29udmljdGlvbjogdGhpcy5jb252aWN0aW9uLnRvUHJpbWl0aXZlKClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGJhc2UgcnVudGltZSB0eXBlIG5hbWUgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnVm90ZSc7XG4gICAgfVxufVxuIiwiZXhwb3J0IHsgR2VuZXJpY0FjY291bnRJZCwgR2VuZXJpY0FjY291bnRJZCBhcyBHZW5lcmljQWNjb3VudElkMzIsIEdlbmVyaWNBY2NvdW50SWQzMyB9IGZyb20gJy4vQWNjb3VudElkLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNBY2NvdW50SW5kZXggfSBmcm9tICcuL0FjY291bnRJbmRleC5qcyc7XG5leHBvcnQgeyBHZW5lcmljQmxvY2sgfSBmcm9tICcuL0Jsb2NrLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNDYWxsIH0gZnJvbSAnLi9DYWxsLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNDaGFpblByb3BlcnRpZXMgfSBmcm9tICcuL0NoYWluUHJvcGVydGllcy5qcyc7XG5leHBvcnQgeyBHZW5lcmljQ29uc2Vuc3VzRW5naW5lSWQgfSBmcm9tICcuL0NvbnNlbnN1c0VuZ2luZUlkLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNFdmVudCwgR2VuZXJpY0V2ZW50RGF0YSB9IGZyb20gJy4vRXZlbnQuanMnO1xuZXhwb3J0IHsgR2VuZXJpY0xvb2t1cFNvdXJjZSB9IGZyb20gJy4vTG9va3VwU291cmNlLmpzJztcbmV4cG9ydCB7IEdlbmVyaWNNdWx0aUFkZHJlc3MgYXMgR2VuZXJpY0FkZHJlc3MsIEdlbmVyaWNNdWx0aUFkZHJlc3MgfSBmcm9tICcuL011bHRpQWRkcmVzcy5qcyc7XG5leHBvcnQgeyBHZW5lcmljVm90ZSB9IGZyb20gJy4vVm90ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuLi9ldGhlcmV1bS9pbmRleC5qcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL2V4dHJpbnNpYy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcmltaXRpdmUvaW5kZXguanMnO1xuIiwiY29uc3QgdHlwZXNBbGlhcyA9IHtcbiAgICBhc3NldHM6IHtcbiAgICAgICAgQXBwcm92YWw6ICdBc3NldEFwcHJvdmFsJyxcbiAgICAgICAgQXBwcm92YWxLZXk6ICdBc3NldEFwcHJvdmFsS2V5JyxcbiAgICAgICAgQmFsYW5jZTogJ1RBc3NldEJhbGFuY2UnLFxuICAgICAgICBEZXN0cm95V2l0bmVzczogJ0Fzc2V0RGVzdHJveVdpdG5lc3MnXG4gICAgfSxcbiAgICBiYWJlOiB7XG4gICAgICAgIEVxdWl2b2NhdGlvblByb29mOiAnQmFiZUVxdWl2b2NhdGlvblByb29mJ1xuICAgIH0sXG4gICAgYmFsYW5jZXM6IHtcbiAgICAgICAgU3RhdHVzOiAnQmFsYW5jZVN0YXR1cydcbiAgICB9LFxuICAgIGJlZWZ5OiB7XG4gICAgICAgIEF1dGhvcml0eUlkOiAnQmVlZnlJZCdcbiAgICB9LFxuICAgIGNvbnRyYWN0czoge1xuICAgICAgICBTdG9yYWdlS2V5OiAnQ29udHJhY3RTdG9yYWdlS2V5J1xuICAgIH0sXG4gICAgZWxlY3Rpb25Qcm92aWRlck11bHRpUGhhc2U6IHtcbiAgICAgICAgUGhhc2U6ICdFbGVjdGlvblBoYXNlJ1xuICAgIH0sXG4gICAgZXRoZXJldW06IHtcbiAgICAgICAgQmxvY2s6ICdFdGhCbG9jaycsXG4gICAgICAgIEhlYWRlcjogJ0V0aEhlYWRlcicsXG4gICAgICAgIFJlY2VpcHQ6ICdFdGhSZWNlaXB0JyxcbiAgICAgICAgVHJhbnNhY3Rpb246ICdFdGhUcmFuc2FjdGlvbicsXG4gICAgICAgIFRyYW5zYWN0aW9uU3RhdHVzOiAnRXRoVHJhbnNhY3Rpb25TdGF0dXMnXG4gICAgfSxcbiAgICBldm06IHtcbiAgICAgICAgQWNjb3VudDogJ0V2bUFjY291bnQnLFxuICAgICAgICBMb2c6ICdFdm1Mb2cnLFxuICAgICAgICBWaWNpbml0eTogJ0V2bVZpY2luaXR5J1xuICAgIH0sXG4gICAgZ3JhbmRwYToge1xuICAgICAgICBFcXVpdm9jYXRpb246ICdHcmFuZHBhRXF1aXZvY2F0aW9uJyxcbiAgICAgICAgRXF1aXZvY2F0aW9uUHJvb2Y6ICdHcmFuZHBhRXF1aXZvY2F0aW9uUHJvb2YnXG4gICAgfSxcbiAgICBpZGVudGl0eToge1xuICAgICAgICBKdWRnZW1lbnQ6ICdJZGVudGl0eUp1ZGdlbWVudCdcbiAgICB9LFxuICAgIGluY2x1c2lvbjoge1xuICAgICAgICBWYWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICB9LFxuICAgIHBhcmFEaXNwdXRlczoge1xuICAgICAgICBWYWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICB9LFxuICAgIHBhcmFJbmNsdXNpb246IHtcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICdQYXJhVmFsaWRhdG9ySW5kZXgnXG4gICAgfSxcbiAgICBwYXJhU2NoZWR1bGVyOiB7XG4gICAgICAgIFZhbGlkYXRvckluZGV4OiAnUGFyYVZhbGlkYXRvckluZGV4J1xuICAgIH0sXG4gICAgcGFyYVNoYXJlZDoge1xuICAgICAgICBWYWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICB9LFxuICAgIHBhcmFjaGFpbnM6IHtcbiAgICAgICAgSWQ6ICdQYXJhSWQnXG4gICAgfSxcbiAgICBwYXJhc0Rpc3B1dGVzOiB7XG4gICAgICAgIFZhbGlkYXRvckluZGV4OiAnUGFyYVZhbGlkYXRvckluZGV4J1xuICAgIH0sXG4gICAgcGFyYXNJbmNsdXNpb246IHtcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICdQYXJhVmFsaWRhdG9ySW5kZXgnXG4gICAgfSxcbiAgICBwYXJhc1NjaGVkdWxlcjoge1xuICAgICAgICBWYWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICB9LFxuICAgIHBhcmFzU2hhcmVkOiB7XG4gICAgICAgIFZhbGlkYXRvckluZGV4OiAnUGFyYVZhbGlkYXRvckluZGV4J1xuICAgIH0sXG4gICAgcHJvcG9zZVBhcmFjaGFpbjoge1xuICAgICAgICBQcm9wb3NhbDogJ1BhcmFjaGFpblByb3Bvc2FsJ1xuICAgIH0sXG4gICAgcHJveHk6IHtcbiAgICAgICAgQW5ub3VuY2VtZW50OiAnUHJveHlBbm5vdW5jZW1lbnQnXG4gICAgfSxcbiAgICBzY2hlZHVsZXI6IHtcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICdQYXJhVmFsaWRhdG9ySW5kZXgnXG4gICAgfSxcbiAgICBzaGFyZWQ6IHtcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICdQYXJhVmFsaWRhdG9ySW5kZXgnXG4gICAgfSxcbiAgICBzb2NpZXR5OiB7XG4gICAgICAgIEp1ZGdlbWVudDogJ1NvY2lldHlKdWRnZW1lbnQnLFxuICAgICAgICBWb3RlOiAnU29jaWV0eVZvdGUnXG4gICAgfSxcbiAgICBzdGFraW5nOiB7XG4gICAgICAgIENvbXBhY3Q6ICdDb21wYWN0QXNzaWdubWVudHMnXG4gICAgfSxcbiAgICB0cmVhc3VyeToge1xuICAgICAgICBQcm9wb3NhbDogJ1RyZWFzdXJ5UHJvcG9zYWwnXG4gICAgfSxcbiAgICB4Y206IHtcbiAgICAgICAgQXNzZXRJZDogJ1hjbUFzc2V0SWQnXG4gICAgfSxcbiAgICB4Y21QYWxsZXQ6IHtcbiAgICAgICAgQXNzZXRJZDogJ1hjbUFzc2V0SWQnXG4gICAgfVxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldCB0eXBlcyBmb3Igc3BlY2lmaWMgbW9kdWxlcyAobWV0YWRhdGEgb3ZlcnJpZGUpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGlhc1R5cGVzKHsga25vd25UeXBlcyB9LCBzZWN0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHR5cGVzQWxpYXNbc2VjdGlvbl0gPz8ge30pLFxuICAgICAgICAuLi4oa25vd25UeXBlcy50eXBlc0FsaWFzPy5bc2VjdGlvbl0gPz8ge30pXG4gICAgfTtcbn1cbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBUQXNzZXRDb252ZXJzaW9uOiAnT3B0aW9uPE11bHRpTG9jYXRpb24+J1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBBc3NldENvbnZlcnNpb25BcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGdldF9yZXNlcnZlczoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCBwb29sIHJlc2VydmVzJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Fzc2V0MScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0YWdpbmdYY21WM011bHRpTG9jYXRpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhc3NldDInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTdGFnaW5nWGNtVjNNdWx0aUxvY2F0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPChCYWxhbmNlLEJhbGFuY2UpPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHF1b3RlX3ByaWNlX2V4YWN0X3Rva2Vuc19mb3JfdG9rZW5zOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUXVvdGUgcHJpY2U6IGV4YWN0IHRva2VucyBmb3IgdG9rZW5zJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Fzc2V0MScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0YWdpbmdYY21WM011bHRpTG9jYXRpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhc3NldDInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTdGFnaW5nWGNtVjNNdWx0aUxvY2F0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYW1vdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTEyOCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2luY2x1ZGVfZmVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjwoQmFsYW5jZSk+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcXVvdGVfcHJpY2VfdG9rZW5zX2Zvcl9leGFjdF90b2tlbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdRdW90ZSBwcmljZTogdG9rZW5zIGZvciBleGFjdCB0b2tlbnMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYXNzZXQxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU3RhZ2luZ1hjbVYzTXVsdGlMb2NhdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Fzc2V0MicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0YWdpbmdYY21WM011bHRpTG9jYXRpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhbW91bnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd1MTI4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaW5jbHVkZV9mZWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPChCYWxhbmNlKT4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgQXNzZXRBcHByb3ZhbEtleToge1xuICAgICAgICAgICAgb3duZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZGVsZWdhdGU6ICdBY2NvdW50SWQnXG4gICAgICAgIH0sXG4gICAgICAgIEFzc2V0QXBwcm92YWw6IHtcbiAgICAgICAgICAgIGFtb3VudDogJ1RBc3NldEJhbGFuY2UnLFxuICAgICAgICAgICAgZGVwb3NpdDogJ1RBc3NldERlcG9zaXRCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBBc3NldEJhbGFuY2U6IHtcbiAgICAgICAgICAgIGJhbGFuY2U6ICdUQXNzZXRCYWxhbmNlJyxcbiAgICAgICAgICAgIGlzRnJvemVuOiAnYm9vbCcsXG4gICAgICAgICAgICBpc1N1ZmZpY2llbnQ6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBBc3NldERlc3Ryb3lXaXRuZXNzOiB7XG4gICAgICAgICAgICBhY2NvdW50czogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBzdWZmaWNpZW50czogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBhcHByb3ZhbHM6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgIH0sXG4gICAgICAgIEFzc2V0RGV0YWlsczoge1xuICAgICAgICAgICAgb3duZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgaXNzdWVyOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGFkbWluOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGZyZWV6ZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgc3VwcGx5OiAnVEFzc2V0QmFsYW5jZScsXG4gICAgICAgICAgICBkZXBvc2l0OiAnVEFzc2V0RGVwb3NpdEJhbGFuY2UnLFxuICAgICAgICAgICAgbWluQmFsYW5jZTogJ1RBc3NldEJhbGFuY2UnLFxuICAgICAgICAgICAgaXNTdWZmaWNpZW50OiAnYm9vbCcsXG4gICAgICAgICAgICBhY2NvdW50czogJ3UzMicsXG4gICAgICAgICAgICBzdWZmaWNpZW50czogJ3UzMicsXG4gICAgICAgICAgICBhcHByb3ZhbHM6ICd1MzInLFxuICAgICAgICAgICAgaXNGcm96ZW46ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBBc3NldE1ldGFkYXRhOiB7XG4gICAgICAgICAgICBkZXBvc2l0OiAnVEFzc2V0RGVwb3NpdEJhbGFuY2UnLFxuICAgICAgICAgICAgbmFtZTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgc3ltYm9sOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBkZWNpbWFsczogJ3U4JyxcbiAgICAgICAgICAgIGlzRnJvemVuOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgVEFzc2V0QmFsYW5jZTogJ3U2NCcsXG4gICAgICAgIFRBc3NldERlcG9zaXRCYWxhbmNlOiAnQmFsYW5jZU9mJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBBc3NldHNBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGFjY291bnRfYmFsYW5jZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIGN1cnJlbnQgc2V0IG9mIGF1dGhvcml0aWVzLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPCh1MzIsIFRBc3NldEJhbGFuY2UpPidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEJsb2NrQXR0ZXN0YXRpb25zOiB7XG4gICAgICAgICAgICByZWNlaXB0OiAnQ2FuZGlkYXRlUmVjZWlwdCcsXG4gICAgICAgICAgICB2YWxpZDogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgICAgIGludmFsaWQ6ICdWZWM8QWNjb3VudElkPidcbiAgICAgICAgfSxcbiAgICAgICAgSW5jbHVkZWRCbG9ja3M6IHtcbiAgICAgICAgICAgIGFjdHVhbE51bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHNlc3Npb246ICdTZXNzaW9uSW5kZXgnLFxuICAgICAgICAgICAgcmFuZG9tU2VlZDogJ0gyNTYnLFxuICAgICAgICAgICAgYWN0aXZlUGFyYWNoYWluczogJ1ZlYzxQYXJhSWQ+JyxcbiAgICAgICAgICAgIHBhcmFCbG9ja3M6ICdWZWM8SGFzaD4nXG4gICAgICAgIH0sXG4gICAgICAgIE1vcmVBdHRlc3RhdGlvbnM6IHt9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBSYXdBdXJhUHJlRGlnZXN0OiB7XG4gICAgICAgICAgICBzbG90TnVtYmVyOiAndTY0J1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIEF1cmFBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGF1dGhvcml0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBjdXJyZW50IHNldCBvZiBhdXRob3JpdGllcy4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEF1dGhvcml0eUlkPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNsb3RfZHVyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzbG90IGR1cmF0aW9uIGZvciBBdXJhLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTbG90RHVyYXRpb24nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEV4dHJpbnNpY09ySGFzaDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICAgICAgRXh0cmluc2ljOiAnQnl0ZXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEV4dHJpbnNpY1N0YXR1czoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBGdXR1cmU6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBSZWFkeTogJ051bGwnLFxuICAgICAgICAgICAgICAgIEJyb2FkY2FzdDogJ1ZlYzxUZXh0PicsXG4gICAgICAgICAgICAgICAgSW5CbG9jazogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIFJldHJhY3RlZDogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIEZpbmFsaXR5VGltZW91dDogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIEZpbmFsaXplZDogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIFVzdXJwZWQ6ICdIYXNoJyxcbiAgICAgICAgICAgICAgICBEcm9wcGVkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgSW52YWxpZDogJ051bGwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBoYXNLZXk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRydWUgaWYgdGhlIGtleXN0b3JlIGhhcyBwcml2YXRlIGtleXMgZm9yIHRoZSBnaXZlbiBwdWJsaWMga2V5IGFuZCBrZXkgdHlwZS4nLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3B1YmxpY0tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5VHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH0sXG4gICAgaGFzU2Vzc2lvbktleXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRydWUgaWYgdGhlIGtleXN0b3JlIGhhcyBwcml2YXRlIGtleXMgZm9yIHRoZSBnaXZlbiBzZXNzaW9uIHB1YmxpYyBrZXlzLicsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2Vzc2lvbktleXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfSxcbiAgICBpbnNlcnRLZXk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnNlcnQgYSBrZXkgaW50byB0aGUga2V5c3RvcmUuJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXlUeXBlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVGV4dCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3N1cmknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdUZXh0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHVibGljS2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICB9LFxuICAgIHBlbmRpbmdFeHRyaW5zaWNzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhbGwgcGVuZGluZyBleHRyaW5zaWNzLCBwb3RlbnRpYWxseSBncm91cGVkIGJ5IHNlbmRlcicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8RXh0cmluc2ljPidcbiAgICB9LFxuICAgIHJlbW92ZUV4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JlbW92ZSBnaXZlbiBleHRyaW5zaWMgZnJvbSB0aGUgcG9vbCBhbmQgdGVtcG9yYXJpbHkgYmFuIGl0IHRvIHByZXZlbnQgcmVpbXBvcnRpbmcnLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2J5dGVzT3JIYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEV4dHJpbnNpY09ySGFzaD4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdWZWM8SGFzaD4nXG4gICAgfSxcbiAgICByb3RhdGVLZXlzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgbmV3IHNlc3Npb24ga2V5cyBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5cycsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgfSxcbiAgICBzdWJtaXRBbmRXYXRjaEV4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Ym1pdCBhbmQgc3Vic2NyaWJlIHRvIHdhdGNoIGFuIGV4dHJpbnNpYyB1bnRpbCB1bnN1YnNjcmliZWQnLFxuICAgICAgICBpc1NpZ25lZDogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4dHJpbnNpYycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcHVic3ViOiBbXG4gICAgICAgICAgICAnZXh0cmluc2ljVXBkYXRlJyxcbiAgICAgICAgICAgICdzdWJtaXRBbmRXYXRjaEV4dHJpbnNpYycsXG4gICAgICAgICAgICAndW53YXRjaEV4dHJpbnNpYydcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V4dHJpbnNpY1N0YXR1cydcbiAgICB9LFxuICAgIHN1Ym1pdEV4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Ym1pdCBhIGZ1bGx5IGZvcm1hdHRlZCBleHRyaW5zaWMgZm9yIGJsb2NrIGluY2x1c2lvbicsXG4gICAgICAgIGlzU2lnbmVkOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXh0cmluc2ljJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnRXh0cmluc2ljJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgVW5jbGVFbnRyeUl0ZW06IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgSW5jbHVzaW9uSGVpZ2h0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgICAgIFVuY2xlOiAnKEhhc2gsIE9wdGlvbjxBY2NvdW50SWQ+KSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBBbGxvd2VkU2xvdHM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1ByaW1hcnlTbG90cycsICdQcmltYXJ5QW5kU2Vjb25kYXJ5UGxhaW5TbG90cycsICdQcmltYXJ5QW5kU2Vjb25kYXJ5VlJGU2xvdHMnXVxuICAgICAgICB9LFxuICAgICAgICBCYWJlQXV0aG9yaXR5V2VpZ2h0OiAndTY0JyxcbiAgICAgICAgQmFiZUVwb2NoQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgYzogJyh1NjQsIHU2NCknLFxuICAgICAgICAgICAgYWxsb3dlZFNsb3RzOiAnQWxsb3dlZFNsb3RzJ1xuICAgICAgICB9LFxuICAgICAgICBCYWJlQmxvY2tXZWlnaHQ6ICd1MzInLFxuICAgICAgICBCYWJlRXF1aXZvY2F0aW9uUHJvb2Y6IHtcbiAgICAgICAgICAgIG9mZmVuZGVyOiAnQXV0aG9yaXR5SWQnLFxuICAgICAgICAgICAgc2xvdE51bWJlcjogJ1Nsb3ROdW1iZXInLFxuICAgICAgICAgICAgZmlyc3RIZWFkZXI6ICdIZWFkZXInLFxuICAgICAgICAgICAgc2Vjb25kSGVhZGVyOiAnSGVhZGVyJ1xuICAgICAgICB9LFxuICAgICAgICBCYWJlR2VuZXNpc0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIHNsb3REdXJhdGlvbjogJ3U2NCcsXG4gICAgICAgICAgICBlcG9jaExlbmd0aDogJ3U2NCcsXG4gICAgICAgICAgICBjOiAnKHU2NCwgdTY0KScsXG4gICAgICAgICAgICBnZW5lc2lzQXV0aG9yaXRpZXM6ICdWZWM8KEF1dGhvcml0eUlkLCBCYWJlQXV0aG9yaXR5V2VpZ2h0KT4nLFxuICAgICAgICAgICAgcmFuZG9tbmVzczogJ1JhbmRvbW5lc3MnLFxuICAgICAgICAgICAgYWxsb3dlZFNsb3RzOiAnQWxsb3dlZFNsb3RzJ1xuICAgICAgICB9LFxuICAgICAgICBCYWJlR2VuZXNpc0NvbmZpZ3VyYXRpb25WMToge1xuICAgICAgICAgICAgc2xvdER1cmF0aW9uOiAndTY0JyxcbiAgICAgICAgICAgIGVwb2NoTGVuZ3RoOiAndTY0JyxcbiAgICAgICAgICAgIGM6ICcodTY0LCB1NjQpJyxcbiAgICAgICAgICAgIGdlbmVzaXNBdXRob3JpdGllczogJ1ZlYzwoQXV0aG9yaXR5SWQsIEJhYmVBdXRob3JpdHlXZWlnaHQpPicsXG4gICAgICAgICAgICByYW5kb21uZXNzOiAnUmFuZG9tbmVzcycsXG4gICAgICAgICAgICBzZWNvbmRhcnlTbG90czogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIEJhYmVXZWlnaHQ6ICd1NjQnLFxuICAgICAgICBNYXliZVJhbmRvbW5lc3M6ICdPcHRpb248UmFuZG9tbmVzcz4nLFxuICAgICAgICBNYXliZVZyZjogJ09wdGlvbjxWcmZEYXRhPicsXG4gICAgICAgIEVwb2NoOiB7XG4gICAgICAgICAgICBlcG9jaEluZGV4OiAndTY0JyxcbiAgICAgICAgICAgIHN0YXJ0U2xvdDogJ1Nsb3QnLFxuICAgICAgICAgICAgZHVyYXRpb246ICd1NjQnLFxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6ICdWZWM8KEF1dGhvcml0eUlkLCBCYWJlQXV0aG9yaXR5V2VpZ2h0KT4nLFxuICAgICAgICAgICAgcmFuZG9tbmVzczogJ0hhc2gnLCAvLyBbdTg7IFZSRl9PVVRQVVRfTEVOR1RIXSxcbiAgICAgICAgICAgIGNvbmZpZzogJ0JhYmVFcG9jaENvbmZpZ3VyYXRpb24nXG4gICAgICAgIH0sXG4gICAgICAgIEVwb2NoQXV0aG9yc2hpcDoge1xuICAgICAgICAgICAgcHJpbWFyeTogJ1ZlYzx1NjQ+JyxcbiAgICAgICAgICAgIHNlY29uZGFyeTogJ1ZlYzx1NjQ+JyxcbiAgICAgICAgICAgIHNlY29uZGFyeV92cmY6ICdWZWM8dTY0PidcbiAgICAgICAgfSxcbiAgICAgICAgTmV4dENvbmZpZ0Rlc2NyaXB0b3I6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgVjA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBWMTogJ05leHRDb25maWdEZXNjcmlwdG9yVjEnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIE5leHRDb25maWdEZXNjcmlwdG9yVjE6IHtcbiAgICAgICAgICAgIGM6ICcodTY0LCB1NjQpJyxcbiAgICAgICAgICAgIGFsbG93ZWRTbG90czogJ0FsbG93ZWRTbG90cydcbiAgICAgICAgfSxcbiAgICAgICAgT3BhcXVlS2V5T3duZXJzaGlwUHJvb2Y6ICdCeXRlcycsXG4gICAgICAgIFJhbmRvbW5lc3M6ICdIYXNoJywgLy8gW3U4OyBSQU5ET01ORVNTX0xFTkdUSF0sXG4gICAgICAgIFJhd0JhYmVQcmVEaWdlc3Q6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgUGhhbnRvbTogJ051bGwnLCAvLyBpbmRleCBzdGFydHMgYXQgMS4uLiBlbXB0eSBzbG90IGF0IDBcbiAgICAgICAgICAgICAgICBQcmltYXJ5OiAnUmF3QmFiZVByZURpZ2VzdFByaW1hcnknLFxuICAgICAgICAgICAgICAgIFNlY29uZGFyeVBsYWluOiAnUmF3QmFiZVByZURpZ2VzdFNlY29uZGFyeVBsYWluJyxcbiAgICAgICAgICAgICAgICBTZWNvbmRhcnlWUkY6ICdSYXdCYWJlUHJlRGlnZXN0U2Vjb25kYXJ5VlJGJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBSYXdCYWJlUHJlRGlnZXN0UHJpbWFyeToge1xuICAgICAgICAgICAgYXV0aG9yaXR5SW5kZXg6ICd1MzInLCAvLyBBdXRob3JpdHlJbmRleCAoYWxzbyBpbiBhdXJhKVxuICAgICAgICAgICAgc2xvdE51bWJlcjogJ1Nsb3ROdW1iZXInLFxuICAgICAgICAgICAgdnJmT3V0cHV0OiAnVnJmT3V0cHV0JyxcbiAgICAgICAgICAgIHZyZlByb29mOiAnVnJmUHJvb2YnXG4gICAgICAgIH0sXG4gICAgICAgIFJhd0JhYmVQcmVEaWdlc3RTZWNvbmRhcnlQbGFpbjoge1xuICAgICAgICAgICAgYXV0aG9yaXR5SW5kZXg6ICd1MzInLCAvLyBBdXRob3JpdHlJbmRleCAoYWxzbyBpbiBhdXJhKVxuICAgICAgICAgICAgc2xvdE51bWJlcjogJ1Nsb3ROdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIFJhd0JhYmVQcmVEaWdlc3RTZWNvbmRhcnlWUkY6IHtcbiAgICAgICAgICAgIGF1dGhvcml0eUluZGV4OiAndTMyJyxcbiAgICAgICAgICAgIHNsb3ROdW1iZXI6ICdTbG90TnVtYmVyJyxcbiAgICAgICAgICAgIHZyZk91dHB1dDogJ1ZyZk91dHB1dCcsXG4gICAgICAgICAgICB2cmZQcm9vZjogJ1ZyZlByb29mJ1xuICAgICAgICB9LFxuICAgICAgICBSYXdCYWJlUHJlRGlnZXN0VG8xNTk6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgUHJpbWFyeTogJ1Jhd0JhYmVQcmVEaWdlc3RQcmltYXJ5VG8xNTknLFxuICAgICAgICAgICAgICAgIFNlY29uZGFyeTogJ1Jhd0JhYmVQcmVEaWdlc3RTZWNvbmRhcnlUbzE1OSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUmF3QmFiZVByZURpZ2VzdFByaW1hcnlUbzE1OToge1xuICAgICAgICAgICAgYXV0aG9yaXR5SW5kZXg6ICd1MzInLFxuICAgICAgICAgICAgc2xvdE51bWJlcjogJ1Nsb3ROdW1iZXInLFxuICAgICAgICAgICAgd2VpZ2h0OiAnQmFiZUJsb2NrV2VpZ2h0JyxcbiAgICAgICAgICAgIHZyZk91dHB1dDogJ1ZyZk91dHB1dCcsXG4gICAgICAgICAgICB2cmZQcm9vZjogJ1ZyZlByb29mJ1xuICAgICAgICB9LFxuICAgICAgICBSYXdCYWJlUHJlRGlnZXN0U2Vjb25kYXJ5VG8xNTk6IHtcbiAgICAgICAgICAgIGF1dGhvcml0eUluZGV4OiAndTMyJyxcbiAgICAgICAgICAgIHNsb3ROdW1iZXI6ICdTbG90TnVtYmVyJyxcbiAgICAgICAgICAgIHdlaWdodDogJ0JhYmVCbG9ja1dlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYSBjcm9zcyBvbGQvbmV3IGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgZGlnZXN0LCB0aGF0IGlzIF9vbmx5XyB1c2VmdWxcbiAgICAgICAgLy8gZm9yIHBhcnRpYWwgcGFyc2luZyBhbmQgZXh0cmFjdGlvbiBvZiB0aGUgYXV0aG9yLiBUaGlzIGFzc3VtZXMgdGhhdCBhbGxcbiAgICAgICAgLy8gZW50cmllcyBoYXMgdGhlIGF1dGhvcml0eUluZGV4IGluIHRoZSBmaXJzdCBwb3NpdGlvbiAtIGFuZCB0aGF0IGl0IGlzIGFsbFxuICAgICAgICAvLyB3ZSBhcmUgaW50ZXJlc3RlZCBpblxuICAgICAgICBSYXdCYWJlUHJlRGlnZXN0Q29tcGF0OiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFplcm86ICd1MzInLFxuICAgICAgICAgICAgICAgIE9uZTogJ3UzMicsXG4gICAgICAgICAgICAgICAgVHdvOiAndTMyJyxcbiAgICAgICAgICAgICAgICBUaHJlZTogJ3UzMidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2xvdE51bWJlcjogJ3U2NCcsXG4gICAgICAgIFZyZkRhdGE6ICdbdTg7IDMyXScsXG4gICAgICAgIFZyZk91dHB1dDogJ1t1ODsgMzJdJyxcbiAgICAgICAgVnJmUHJvb2Y6ICdbdTg7IDY0XSdcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBlcG9jaEF1dGhvcnNoaXA6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGRhdGEgYWJvdXQgd2hpY2ggc2xvdHMgKHByaW1hcnkgb3Igc2Vjb25kYXJ5KSBjYW4gYmUgY2xhaW1lZCBpbiB0aGUgY3VycmVudCBlcG9jaCB3aXRoIHRoZSBrZXlzIGluIHRoZSBrZXlzdG9yZScsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnSGFzaE1hcDxBdXRob3JpdHlJZCwgRXBvY2hBdXRob3JzaGlwPidcbiAgICB9XG59O1xuIiwiY29uc3QgVjFfVjJfU0hBUkVEID0ge1xuICAgIGN1cnJlbnRfZXBvY2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgY3VycmVudCBlcG9jaC4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnRXBvY2gnXG4gICAgfSxcbiAgICBjdXJyZW50X2Vwb2NoX3N0YXJ0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc2xvdCB0aGF0IHN0YXJ0ZWQgdGhlIGN1cnJlbnQgZXBvY2guJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1Nsb3QnXG4gICAgfSxcbiAgICBnZW5lcmF0ZV9rZXlfb3duZXJzaGlwX3Byb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGVzIGEgcHJvb2Ygb2Yga2V5IG93bmVyc2hpcCBmb3IgdGhlIGdpdmVuIGF1dGhvcml0eSBpbiB0aGUgY3VycmVudCBlcG9jaC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2xvdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1Nsb3QnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhdXRob3JpdHlJZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0F1dGhvcml0eUlkJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPE9wYXF1ZUtleU93bmVyc2hpcFByb29mPidcbiAgICB9LFxuICAgIG5leHRfZXBvY2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgbmV4dCBlcG9jaCAod2hpY2ggd2FzIGFscmVhZHkgcHJldmlvdXNseSBhbm5vdW5jZWQpLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdFcG9jaCdcbiAgICB9LFxuICAgIHN1Ym1pdF9yZXBvcnRfZXF1aXZvY2F0aW9uX3Vuc2lnbmVkX2V4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Ym1pdHMgYW4gdW5zaWduZWQgZXh0cmluc2ljIHRvIHJlcG9ydCBhbiBlcXVpdm9jYXRpb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VxdWl2b2NhdGlvblByb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmFiZUVxdWl2b2NhdGlvblByb29mJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5T3duZXJQcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wYXF1ZUtleU93bmVyc2hpcFByb29mJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPE51bGw+J1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBCYWJlQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBnZW5lc2lzIGNvbmZpZ3VyYXRpb24gZm9yIEJBQkUuIFRoZSBjb25maWd1cmF0aW9uIGlzIG9ubHkgcmVhZCBvbiBnZW5lc2lzLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWJlR2VuZXNpc0NvbmZpZ3VyYXRpb24nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5WMV9WMl9TSEFSRURcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGZvciBCQUJFLiBWZXJzaW9uIDEuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0JhYmVHZW5lc2lzQ29uZmlndXJhdGlvblYxJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uVjFfVjJfU0hBUkVEXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjY291bnREYXRhOiB7XG4gICAgICAgICAgICBmcmVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICByZXNlcnZlZDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgbWlzY0Zyb3plbjogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgZmVlRnJvemVuOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgQmFsYW5jZUxvY2tUbzIxMjoge1xuICAgICAgICAgICAgaWQ6ICdMb2NrSWRlbnRpZmllcicsXG4gICAgICAgICAgICBhbW91bnQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHVudGlsOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgcmVhc29uczogJ1dpdGhkcmF3UmVhc29ucydcbiAgICAgICAgfSxcbiAgICAgICAgQmFsYW5jZUxvY2s6IHtcbiAgICAgICAgICAgIGlkOiAnTG9ja0lkZW50aWZpZXInLFxuICAgICAgICAgICAgYW1vdW50OiAnQmFsYW5jZScsXG4gICAgICAgICAgICByZWFzb25zOiAnUmVhc29ucydcbiAgICAgICAgfSxcbiAgICAgICAgQmFsYW5jZVN0YXR1czoge1xuICAgICAgICAgICAgX2VudW06IFsnRnJlZScsICdSZXNlcnZlZCddXG4gICAgICAgIH0sXG4gICAgICAgIFJlYXNvbnM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0ZlZScsICdNaXNjJywgJ0FsbCddXG4gICAgICAgIH0sXG4gICAgICAgIFJlc2VydmVEYXRhOiB7XG4gICAgICAgICAgICBpZDogJ1Jlc2VydmVJZGVudGlmaWVyJyxcbiAgICAgICAgICAgIGFtb3VudDogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIFJlc2VydmVJZGVudGlmaWVyOiAnW3U4OyA4XScsXG4gICAgICAgIFZlc3RpbmdTY2hlZHVsZToge1xuICAgICAgICAgICAgb2Zmc2V0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBwZXJCbG9jazogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgc3RhcnRpbmdCbG9jazogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBXaXRoZHJhd1JlYXNvbnM6IHtcbiAgICAgICAgICAgIF9zZXQ6IHtcbiAgICAgICAgICAgICAgICBUcmFuc2FjdGlvblBheW1lbnQ6IDEsXG4gICAgICAgICAgICAgICAgVHJhbnNmZXI6IDIsXG4gICAgICAgICAgICAgICAgUmVzZXJ2ZTogNCxcbiAgICAgICAgICAgICAgICBGZWU6IDgsXG4gICAgICAgICAgICAgICAgVGlwOiAxNlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjLmpzJztcbmltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEJlZWZ5QXV0aG9yaXR5U2V0OiB7XG4gICAgICAgICAgICBpZDogJ3U2NCcsXG4gICAgICAgICAgICBsZW46ICd1MzInLFxuICAgICAgICAgICAgcm9vdDogJ0gyNTYnXG4gICAgICAgIH0sXG4gICAgICAgIEJlZWZ5Q29tbWl0bWVudDoge1xuICAgICAgICAgICAgcGF5bG9hZDogJ0JlZWZ5UGF5bG9hZCcsXG4gICAgICAgICAgICBibG9ja051bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHZhbGlkYXRvclNldElkOiAnVmFsaWRhdG9yU2V0SWQnXG4gICAgICAgIH0sXG4gICAgICAgIEJlZWZ5SWQ6ICdbdTg7IDMzXScsXG4gICAgICAgIEJlZWZ5RXF1aXZvY2F0aW9uUHJvb2Y6IHtcbiAgICAgICAgICAgIGZpcnN0OiAnQmVlZnlWb3RlTWVzc2FnZScsXG4gICAgICAgICAgICBzZWNvbmQ6ICdCZWVmeVZvdGVNZXNzYWdlJ1xuICAgICAgICB9LFxuICAgICAgICBCZWVmeUNvbXBhY3RTaWduZWRDb21taXRtZW50OiB7XG4gICAgICAgICAgICBjb21taXRtZW50OiAnQmVlZnlDb21taXRtZW50JyxcbiAgICAgICAgICAgIHNpZ25hdHVyZXNGcm9tOiAnVmVjPHU4PicsXG4gICAgICAgICAgICB2YWxpZGF0b3JTZXRMZW46ICd1MzInLFxuICAgICAgICAgICAgc2lnbmF0dXJlc0NvbXBhY3Q6ICdWZWM8RWNkc2FTaWduYXR1cmU+J1xuICAgICAgICB9LFxuICAgICAgICBCZWVmeVNpZ25lZENvbW1pdG1lbnQ6IHtcbiAgICAgICAgICAgIGNvbW1pdG1lbnQ6ICdCZWVmeUNvbW1pdG1lbnQnLFxuICAgICAgICAgICAgc2lnbmF0dXJlczogJ1ZlYzxPcHRpb248RWNkc2FTaWduYXR1cmU+PidcbiAgICAgICAgfSxcbiAgICAgICAgQmVlZnlWZXJzaW9uZWRGaW5hbGl0eVByb29mOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFYwOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgVjE6ICdCZWVmeUNvbXBhY3RTaWduZWRDb21taXRtZW50J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBCZWVmeU5leHRBdXRob3JpdHlTZXQ6IHtcbiAgICAgICAgICAgIGlkOiAndTY0JyxcbiAgICAgICAgICAgIGxlbjogJ3UzMicsXG4gICAgICAgICAgICByb290OiAnSDI1NidcbiAgICAgICAgfSxcbiAgICAgICAgQmVlZnlQYXlsb2FkOiAnVmVjPChCZWVmeVBheWxvYWRJZCwgQnl0ZXMpPicsXG4gICAgICAgIEJlZWZ5UGF5bG9hZElkOiAnW3U4OzJdJyxcbiAgICAgICAgQmVlZnlWb3RlTWVzc2FnZToge1xuICAgICAgICAgICAgY29tbWl0bWVudDogJ0JlZWZ5Q29tbWl0bWVudCcsXG4gICAgICAgICAgICBpZDogJ0F1dGhvcml0eUlkJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogJ1NpZ25hdHVyZSdcbiAgICAgICAgfSxcbiAgICAgICAgTW1yUm9vdEhhc2g6ICdIMjU2JyxcbiAgICAgICAgVmFsaWRhdG9yU2V0SWQ6ICd1NjQnLFxuICAgICAgICBWYWxpZGF0b3JTZXQ6IHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6ICdWZWM8QXV0aG9yaXR5SWQ+JyxcbiAgICAgICAgICAgIGlkOiAnVmFsaWRhdG9yU2V0SWQnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBnZXRGaW5hbGl6ZWRIZWFkOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBoYXNoIG9mIHRoZSBsYXRlc3QgQkVFRlkgZmluYWxpemVkIGJsb2NrIGFzIHNlZW4gYnkgdGhpcyBjbGllbnQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0gyNTYnXG4gICAgfSxcbiAgICBzdWJzY3JpYmVKdXN0aWZpY2F0aW9uczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJsb2NrIG1vc3QgcmVjZW50bHkgZmluYWxpemVkIGJ5IEJFRUZZLCBhbG9uZ3NpZGUgaXRzIGp1c3RpZmljYXRpb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgcHVic3ViOiBbXG4gICAgICAgICAgICAnanVzdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgJ3N1YnNjcmliZUp1c3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICd1bnN1YnNjcmliZUp1c3RpZmljYXRpb25zJ1xuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQmVlZnlWZXJzaW9uZWRGaW5hbGl0eVByb29mJ1xuICAgIH1cbn07XG4iLCJjb25zdCBCRUVGWV9WMV9WMyA9IHtcbiAgICBiZWVmeV9nZW5lc2lzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBibG9jayBudW1iZXIgd2hlcmUgQkVFRlkgY29uc2Vuc3VzIGlzIGVuYWJsZWQvc3RhcnRlZCcsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdPcHRpb248QmxvY2tOdW1iZXI+J1xuICAgIH0sXG4gICAgZ2VuZXJhdGVfa2V5X293bmVyc2hpcF9wcm9vZjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlcyBhIHByb29mIG9mIGtleSBvd25lcnNoaXAgZm9yIHRoZSBnaXZlbiBhdXRob3JpdHkgaW4gdGhlIGdpdmVuIHNldC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2V0SWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWYWxpZGF0b3JTZXRJZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2F1dGhvcml0eUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQXV0aG9yaXR5SWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248T3BhcXVlS2V5T3duZXJzaGlwUHJvb2Y+J1xuICAgIH0sXG4gICAgc3VibWl0X3JlcG9ydF9lcXVpdm9jYXRpb25fdW5zaWduZWRfZXh0cmluc2ljOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU3VibWl0cyBhbiB1bnNpZ25lZCBleHRyaW5zaWMgdG8gcmVwb3J0IGFuIGVxdWl2b2NhdGlvbi4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXF1aXZvY2F0aW9uUHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCZWVmeUVxdWl2b2NhdGlvblByb29mJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5T3duZXJQcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wYXF1ZUtleU93bmVyc2hpcFByb29mJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPE51bGw+J1xuICAgIH0sXG4gICAgdmFsaWRhdG9yX3NldDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiB0aGUgY3VycmVudCBhY3RpdmUgQkVFRlkgdmFsaWRhdG9yIHNldCcsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdPcHRpb248VmFsaWRhdG9yU2V0PidcbiAgICB9XG59O1xuY29uc3QgQkVFRllfTU1SX1YxID0ge1xuICAgIGF1dGhvcml0eV9zZXRfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIGN1cnJlbnRseSBhY3RpdmUgQkVFRlkgYXV0aG9yaXR5IHNldCBwcm9vZi4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnQmVlZnlBdXRob3JpdHlTZXQnXG4gICAgfSxcbiAgICBuZXh0X2F1dGhvcml0eV9zZXRfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIG5leHQvcXVldWVkIEJFRUZZIGF1dGhvcml0eSBzZXQgcHJvb2YuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0JlZWZ5TmV4dEF1dGhvcml0eVNldCdcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgQmVlZnlBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczogQkVFRllfVjFfVjMsXG4gICAgICAgICAgICB2ZXJzaW9uOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IEJFRUZZX1YxX1YzLFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiBCRUVGWV9WMV9WMyxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF0sXG4gICAgQmVlZnlNbXJBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczogQkVFRllfTU1SX1YxLFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBCZW5jaG1hcmtCYXRjaDoge1xuICAgICAgICAgICAgcGFsbGV0OiAnVGV4dCcsXG4gICAgICAgICAgICBpbnN0YW5jZTogJ1RleHQnLFxuICAgICAgICAgICAgYmVuY2htYXJrOiAnVGV4dCcsXG4gICAgICAgICAgICByZXN1bHRzOiAnVmVjPEJlbmNobWFya1Jlc3VsdD4nXG4gICAgICAgIH0sXG4gICAgICAgIEJlbmNobWFya0NvbmZpZzoge1xuICAgICAgICAgICAgcGFsbGV0OiAnQnl0ZXMnLFxuICAgICAgICAgICAgYmVuY2htYXJrOiAnQnl0ZXMnLFxuICAgICAgICAgICAgc2VsZWN0ZWRDb21wb25lbnRzOiAnVmVjPChCZW5jaG1hcmtQYXJhbWV0ZXIsIHUzMik+JyxcbiAgICAgICAgICAgIHZlcmlmeTogJ2Jvb2wnLFxuICAgICAgICAgICAgaW50ZXJuYWxSZXBlYXRzOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBCZW5jaG1hcmtMaXN0OiB7XG4gICAgICAgICAgICBwYWxsZXQ6ICdCeXRlcycsXG4gICAgICAgICAgICBpbnN0YW5jZTogJ0J5dGVzJyxcbiAgICAgICAgICAgIGJlbmNobWFya3M6ICdWZWM8QmVuY2htYXJrTWV0YWRhdGE+J1xuICAgICAgICB9LFxuICAgICAgICBCZW5jaG1hcmtNZXRhZGF0YToge1xuICAgICAgICAgICAgbmFtZTogJ0J5dGVzJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6ICdWZWM8KEJlbmNobWFya1BhcmFtZXRlciwgdTMyLCB1MzIpPidcbiAgICAgICAgfSxcbiAgICAgICAgQmVuY2htYXJrUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICBfZW51bTogWydhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJywgJ2snLCAnbCcsICdtJywgJ24nLCAnbycsICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onXVxuICAgICAgICB9LFxuICAgICAgICBCZW5jaG1hcmtSZXN1bHQ6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHM6ICdWZWM8KEJlbmNobWFya1BhcmFtZXRlciwgdTMyKT4nLFxuICAgICAgICAgICAgZXh0cmluc2ljVGltZTogJ3UxMjgnLFxuICAgICAgICAgICAgc3RvcmFnZVJvb3RUaW1lOiAndTEyOCcsXG4gICAgICAgICAgICByZWFkczogJ3UzMicsXG4gICAgICAgICAgICByZXBlYXRSZWFkczogJ3UzMicsXG4gICAgICAgICAgICB3cml0ZXM6ICd1MzInLFxuICAgICAgICAgICAgcmVwZWF0V3JpdGVzOiAndTMyJyxcbiAgICAgICAgICAgIHByb29mU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBiZW5jaEtleXM6ICdWZWM8KFZlYzx1OD4sIHUzMiwgdTMyLCBib29sKT4nXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgQmVuY2htYXJrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBiZW5jaG1hcmtfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGJlbmNobWFyayBtZXRhZGF0YSBhdmFpbGFibGUgZm9yIHRoaXMgcnVudGltZS4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXh0cmEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnKFZlYzxCZW5jaG1hcmtMaXN0PiwgVmVjPFN0b3JhZ2VJbmZvPiknXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaF9iZW5jaG1hcms6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEaXNwYXRjaCB0aGUgZ2l2ZW4gYmVuY2htYXJrLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb25maWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCZW5jaG1hcmtDb25maWcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdSZXN1bHQ8VmVjPEJlbmNobWFya0JhdGNoPiwgVGV4dD4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgQ2hlY2tJbmhlcmVudHNSZXN1bHQ6IHtcbiAgICAgICAgICAgIG9rYXk6ICdib29sJyxcbiAgICAgICAgICAgIGZhdGFsRXJyb3I6ICdib29sJyxcbiAgICAgICAgICAgIGVycm9yczogJ0luaGVyZW50RGF0YSdcbiAgICAgICAgfSxcbiAgICAgICAgSW5oZXJlbnREYXRhOiB7XG4gICAgICAgICAgICBkYXRhOiAnQlRyZWVNYXA8SW5oZXJlbnRJZGVudGlmaWVyLCBCeXRlcz4nXG4gICAgICAgIH0sXG4gICAgICAgIEluaGVyZW50SWRlbnRpZmllcjogJ1t1ODsgOF0nXG4gICAgfVxufTtcbiIsImNvbnN0IEJCX1YyX1RPX1Y0ID0ge1xuICAgIC8vIHRoaXMgd2FzIHJlbW92ZWQgYWZ0ZXIgVjRcbiAgICByYW5kb21fc2VlZDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGEgcmFuZG9tIHNlZWQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgfVxufTtcbmNvbnN0IEJCX1YyX1RPX1Y1ID0ge1xuICAgIGFwcGx5X2V4dHJpbnNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGx5IHRoZSBnaXZlbiBleHRyaW5zaWMuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4dHJpbnNpYycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0FwcGx5RXh0cmluc2ljUmVzdWx0UHJlNidcbiAgICB9XG59O1xuY29uc3QgQkJfVjJfVE9fVjYgPSB7XG4gICAgY2hlY2tfaW5oZXJlbnRzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgdGhhdCB0aGUgaW5oZXJlbnRzIGFyZSB2YWxpZC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2snLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9jaydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGEnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdJbmhlcmVudERhdGEnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdDaGVja0luaGVyZW50c1Jlc3VsdCdcbiAgICB9LFxuICAgIGluaGVyZW50X2V4dHJpbnNpY3M6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBpbmhlcmVudCBleHRyaW5zaWNzLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmhlcmVudCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0luaGVyZW50RGF0YSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxFeHRyaW5zaWM+J1xuICAgIH1cbn07XG5jb25zdCBCQl9WM19UT19WNiA9IHtcbiAgICAvLyByZW5hbWVkIGluIHYzIGZyb20gZmluYWxpemVfYmxvY2tcbiAgICBmaW5hbGl6ZV9ibG9jazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0ZpbmlzaCB0aGUgY3VycmVudCBibG9jay4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBCbG9ja0J1aWxkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGFwcGx5X2V4dHJpbnNpYzoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGx5IHRoZSBnaXZlbiBleHRyaW5zaWMuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2V4dHJpbnNpYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FwcGx5RXh0cmluc2ljUmVzdWx0J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uQkJfVjJfVE9fVjYsXG4gICAgICAgICAgICAgICAgLi4uQkJfVjNfVE9fVjZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA2XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAvLyBhcHBseV9leHRyaW5zaWMgcmVzdWx0IGNoYW5nZWQgaW4gNlxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y1LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y2LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YzX1RPX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLy8gcmFuZG9tX3NlZWQgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y0LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y1LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y2LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YzX1RPX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemVfYmxvY2sgcmVuYW1lZFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y0LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y2LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YzX1RPX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgZmluYWxpc2VfYmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdGaW5pc2ggdGhlIGN1cnJlbnQgYmxvY2suJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y0LFxuICAgICAgICAgICAgICAgIC4uLkJCX1YyX1RPX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEJyaWRnZWRCbG9ja0hhc2g6ICdIMjU2JyxcbiAgICAgICAgQnJpZGdlZEJsb2NrTnVtYmVyOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICBCcmlkZ2VkSGVhZGVyOiAnSGVhZGVyJyxcbiAgICAgICAgQnJpZGdlTWVzc2FnZUlkOiAnKExhbmVJZCwgTWVzc2FnZU5vbmNlKScsXG4gICAgICAgIENhbGxPcmlnaW46IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgU291cmNlUm9vdDogJ051bGwnLFxuICAgICAgICAgICAgICAgIFRhcmdldEFjY291bnQ6ICcoQWNjb3VudElkLCBNdWx0aVNpZ25lciwgTXVsdGlTaWduYXR1cmUpJyxcbiAgICAgICAgICAgICAgICBTb3VyY2VBY2NvdW50OiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDaGFpbklkOiAnW3U4OyA0XScsXG4gICAgICAgIERlbGl2ZXJlZE1lc3NhZ2VzOiB7XG4gICAgICAgICAgICBiZWdpbjogJ01lc3NhZ2VOb25jZScsXG4gICAgICAgICAgICBlbmQ6ICdNZXNzYWdlTm9uY2UnLFxuICAgICAgICAgICAgLy8gcHViIHR5cGUgRGlzcGF0Y2hSZXN1bHRzQml0VmVjID0gQml0VmVjPE1zYjAsIHU4PjtcbiAgICAgICAgICAgIGRpc3BhdGNoUmVzdWx0czogJ0JpdFZlYydcbiAgICAgICAgfSxcbiAgICAgICAgRGlzcGF0Y2hGZWVQYXltZW50OiB7XG4gICAgICAgICAgICBfZW51bTogWydBdFNvdXJjZUNoYWluJywgJ0F0VGFyZ2V0Q2hhaW4nXVxuICAgICAgICB9LFxuICAgICAgICBJbmJvdW5kTGFuZURhdGE6IHtcbiAgICAgICAgICAgIHJlbGF5ZXJzOiAnVmVjPFVucmV3YXJkZWRSZWxheWVyPicsXG4gICAgICAgICAgICBsYXN0Q29uZmlybWVkTm9uY2U6ICdNZXNzYWdlTm9uY2UnXG4gICAgICAgIH0sXG4gICAgICAgIEluYm91bmRSZWxheWVyOiAnQWNjb3VudElkJyxcbiAgICAgICAgSW5pdGlhbGl6YXRpb25EYXRhOiB7XG4gICAgICAgICAgICBoZWFkZXI6ICdIZWFkZXInLFxuICAgICAgICAgICAgYXV0aG9yaXR5TGlzdDogJ0F1dGhvcml0eUxpc3QnLFxuICAgICAgICAgICAgc2V0SWQ6ICdTZXRJZCcsXG4gICAgICAgICAgICBpc0hhbHRlZDogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIExhbmVJZDogJ1t1ODsgNF0nLFxuICAgICAgICBNZXNzYWdlRGF0YToge1xuICAgICAgICAgICAgcGF5bG9hZDogJ0J5dGVzJyxcbiAgICAgICAgICAgIGZlZTogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIE1lc3NhZ2VzRGVsaXZlcnlQcm9vZk9mOiB7XG4gICAgICAgICAgICBicmlkZ2VkSGVhZGVySGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICBzdG9yYWdlUHJvb2Y6ICdWZWM8Qnl0ZXM+JyxcbiAgICAgICAgICAgIGxhbmU6ICdMYW5lSWQnXG4gICAgICAgIH0sXG4gICAgICAgIE1lc3NhZ2VLZXk6IHtcbiAgICAgICAgICAgIGxhbmVJZDogJ0xhbmVJZCcsXG4gICAgICAgICAgICBub25jZTogJ01lc3NhZ2VOb25jZSdcbiAgICAgICAgfSxcbiAgICAgICAgTWVzc2FnZU5vbmNlOiAndTY0JyxcbiAgICAgICAgTWVzc2FnZXNQcm9vZk9mOiB7XG4gICAgICAgICAgICBicmlkZ2VkSGVhZGVySGFzaDogJ0JyaWRnZWRCbG9ja0hhc2gnLFxuICAgICAgICAgICAgc3RvcmFnZVByb29mOiAnVmVjPEJ5dGVzPicsXG4gICAgICAgICAgICBsYW5lOiAnTGFuZUlkJyxcbiAgICAgICAgICAgIG5vbmNlc1N0YXJ0OiAnTWVzc2FnZU5vbmNlJyxcbiAgICAgICAgICAgIG5vbmNlc0VuZDogJ01lc3NhZ2VOb25jZSdcbiAgICAgICAgfSxcbiAgICAgICAgT3BlcmF0aW5nTW9kZToge1xuICAgICAgICAgICAgX2VudW06IFsnTm9ybWFsJywgJ1JlamVjdGluZ091dGJvdW5kTWVzc2FnZXMnLCAnSGFsdGVkJ11cbiAgICAgICAgfSxcbiAgICAgICAgT3V0Ym91bmRMYW5lRGF0YToge1xuICAgICAgICAgICAgb2xkZXN0VW5wcnVuZWROb25jZTogJ01lc3NhZ2VOb25jZScsXG4gICAgICAgICAgICBsYXRlc3RSZWNlaXZlZE5vbmNlOiAnTWVzc2FnZU5vbmNlJyxcbiAgICAgICAgICAgIGxhdGVzdEdlbmVyYXRlZE5vbmNlOiAnTWVzc2FnZU5vbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBPdXRib3VuZE1lc3NhZ2VGZWU6ICdCYWxhbmNlJyxcbiAgICAgICAgT3V0Ym91bmRQYXlsb2FkOiB7XG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICB3ZWlnaHQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgb3JpZ2luOiAnQ2FsbE9yaWdpbicsXG4gICAgICAgICAgICBkaXNwYXRjaEZlZVBheW1lbnQ6ICdEaXNwYXRjaEZlZVBheW1lbnQnLFxuICAgICAgICAgICAgY2FsbDogJ0J5dGVzJ1xuICAgICAgICB9LFxuICAgICAgICBQYXJhbWV0ZXI6ICdOdWxsJyxcbiAgICAgICAgUmVsYXllcklkOiAnQWNjb3VudElkJyxcbiAgICAgICAgVW5yZXdhcmRlZFJlbGF5ZXI6IHtcbiAgICAgICAgICAgIHJlbGF5ZXI6ICdSZWxheWVySWQnLFxuICAgICAgICAgICAgbWVzc2FnZXM6ICdEZWxpdmVyZWRNZXNzYWdlcydcbiAgICAgICAgfSxcbiAgICAgICAgVW5yZXdhcmRlZFJlbGF5ZXJzU3RhdGU6IHtcbiAgICAgICAgICAgIHVucmV3YXJkZWRSZWxheWVyX0VudHJpZXM6ICdNZXNzYWdlTm9uY2UnLFxuICAgICAgICAgICAgbWVzc2FnZXNJbk9sZGVzdEVudHJ5OiAnTWVzc2FnZU5vbmNlJyxcbiAgICAgICAgICAgIHRvdGFsTWVzc2FnZXM6ICdNZXNzYWdlTm9uY2UnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICBCbG9ja0hhc2g6ICdIYXNoJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGdldEJsb2NrOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IGhlYWRlciBhbmQgYm9keSBvZiBhIHJlbGF5IGNoYWluIGJsb2NrJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnU2lnbmVkQmxvY2snXG4gICAgfSxcbiAgICBnZXRCbG9ja0hhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGJsb2NrIGhhc2ggZm9yIGEgc3BlY2lmaWMgYmxvY2snLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9ja051bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgIH0sXG4gICAgZ2V0RmluYWxpemVkSGVhZDoge1xuICAgICAgICBhbGlhczogWydjaGFpbl9nZXRGaW5hbGlzZWRIZWFkJ10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IGhhc2ggb2YgdGhlIGxhc3QgZmluYWxpemVkIGJsb2NrIGluIHRoZSBjYW5vbiBjaGFpbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgfSxcbiAgICBnZXRIZWFkZXI6IHtcbiAgICAgICAgYWxpYXM6IFsnY2hhaW5fZ2V0SGVhZCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgaGVhZGVyIGZvciBhIHNwZWNpZmljIGJsb2NrJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgIH0sXG4gICAgc3Vic2NyaWJlQWxsSGVhZHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIG5ld2VzdCBoZWFkZXIgdmlhIHN1YnNjcmlwdGlvbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHB1YnN1YjogW1xuICAgICAgICAgICAgJ2FsbEhlYWQnLFxuICAgICAgICAgICAgJ3N1YnNjcmliZUFsbEhlYWRzJyxcbiAgICAgICAgICAgICd1bnN1YnNjcmliZUFsbEhlYWRzJ1xuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgIH0sXG4gICAgc3Vic2NyaWJlRmluYWxpemVkSGVhZHM6IHtcbiAgICAgICAgYWxpYXM6IFsnY2hhaW5fc3Vic2NyaWJlRmluYWxpc2VkSGVhZHMnLCAnY2hhaW5fdW5zdWJzY3JpYmVGaW5hbGlzZWRIZWFkcyddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgYmVzdCBmaW5hbGl6ZWQgaGVhZGVyIHZpYSBzdWJzY3JpcHRpb24nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICBwdWJzdWI6IFtcbiAgICAgICAgICAgICdmaW5hbGl6ZWRIZWFkJyxcbiAgICAgICAgICAgICdzdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcycsXG4gICAgICAgICAgICAndW5zdWJzY3JpYmVGaW5hbGl6ZWRIZWFkcydcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICB9LFxuICAgIHN1YnNjcmliZU5ld0hlYWRzOiB7XG4gICAgICAgIGFsaWFzOiBbJ2NoYWluX3Vuc3Vic2NyaWJlTmV3SGVhZHMnLCAnc3Vic2NyaWJlX25ld0hlYWQnLCAndW5zdWJzY3JpYmVfbmV3SGVhZCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgYmVzdCBoZWFkZXIgdmlhIHN1YnNjcmlwdGlvbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIC8vIE5PVEUgVGhlc2Ugc3RpbGwgaGFzIHRoZSBhbGlhc3NlZCB2ZXJzaW9uLCBjb21wYXRpYmxlIHdpdGggMS54XG4gICAgICAgIHB1YnN1YjogW1xuICAgICAgICAgICAgJ25ld0hlYWQnLFxuICAgICAgICAgICAgJ3N1YnNjcmliZU5ld0hlYWQnLFxuICAgICAgICAgICAgJ3Vuc3Vic2NyaWJlTmV3SGVhZCdcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICAvLyBTdG9yYWdlS2V5IGV4dGVuZHMgQnl0ZXNcbiAgICAgICAgUHJlZml4ZWRTdG9yYWdlS2V5OiAnU3RvcmFnZUtleSdcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBnZXRLZXlzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUga2V5cyB3aXRoIHByZWZpeCBmcm9tIGEgY2hpbGQgc3RvcmFnZSwgbGVhdmUgZW1wdHkgdG8gZ2V0IGFsbCB0aGUga2V5cycsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZEtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ByZWZpeGVkU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ByZWZpeCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgIH0sXG4gICAgZ2V0S2V5c1BhZ2VkOiB7XG4gICAgICAgIGFsaWFzOiBbJ2NoaWxkc3RhdGVfZ2V0S2V5c1BhZ2VkQXQnXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBrZXlzIHdpdGggcHJlZml4IGZyb20gYSBjaGlsZCBzdG9yYWdlIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0JyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkS2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHJlZml4ZWRTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJlZml4JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NvdW50JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdzdGFydEtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYSBjaGlsZCBzdG9yYWdlIGVudHJ5IGF0IGEgc3BlY2lmaWMgYmxvY2sgc3RhdGUnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGRLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcmVmaXhlZFN0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxTdG9yYWdlRGF0YT4nXG4gICAgfSxcbiAgICBnZXRTdG9yYWdlRW50cmllczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgY2hpbGQgc3RvcmFnZSBlbnRyaWVzIGZvciBtdWx0aXBsZSBrZXlzIGF0IGEgc3BlY2lmaWMgYmxvY2sgc3RhdGUnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGRLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcmVmaXhlZFN0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXlzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxPcHRpb248U3RvcmFnZURhdGE+PidcbiAgICB9LFxuICAgIGdldFN0b3JhZ2VIYXNoOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgaGFzaCBvZiBhIGNoaWxkIHN0b3JhZ2UgZW50cnkgYXQgYSBibG9jayBzdGF0ZScsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZEtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ByZWZpeGVkU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPEhhc2g+J1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZVNpemU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzaXplIG9mIGEgY2hpbGQgc3RvcmFnZSBlbnRyeSBhdCBhIGJsb2NrIHN0YXRlJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkS2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHJlZml4ZWRTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248dTY0PidcbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgU3RhdGVtZW50S2luZDoge1xuICAgICAgICAgICAgX2VudW06IFsnUmVndWxhcicsICdTYWZ0J11cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBDb2xsZWN0aXZlT3JpZ2luOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE1lbWJlcnM6ICcoTWVtYmVyQ291bnQsIE1lbWJlckNvdW50KScsXG4gICAgICAgICAgICAgICAgTWVtYmVyOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBNZW1iZXJDb3VudDogJ3UzMicsXG4gICAgICAgIFByb3Bvc2FsSW5kZXg6ICd1MzInLFxuICAgICAgICBWb3Rlc1RvMjMwOiB7XG4gICAgICAgICAgICBpbmRleDogJ1Byb3Bvc2FsSW5kZXgnLFxuICAgICAgICAgICAgdGhyZXNob2xkOiAnTWVtYmVyQ291bnQnLFxuICAgICAgICAgICAgYXllczogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgICAgIG5heXM6ICdWZWM8QWNjb3VudElkPidcbiAgICAgICAgfSxcbiAgICAgICAgVm90ZXM6IHtcbiAgICAgICAgICAgIGluZGV4OiAnUHJvcG9zYWxJbmRleCcsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6ICdNZW1iZXJDb3VudCcsXG4gICAgICAgICAgICBheWVzOiAnVmVjPEFjY291bnRJZD4nLFxuICAgICAgICAgICAgbmF5czogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgICAgIGVuZDogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEF1dGhvcml0eUlkOiAnQWNjb3VudElkJyxcbiAgICAgICAgUmF3VlJGT3V0cHV0OiAnW3U4OyAzMl0nXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjLmpzJztcbmltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFsaXZlQ29udHJhY3RJbmZvOiB7XG4gICAgICAgICAgICB0cmllSWQ6ICdUcmllSWQnLFxuICAgICAgICAgICAgc3RvcmFnZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgcGFpckNvdW50OiAndTMyJyxcbiAgICAgICAgICAgIGNvZGVIYXNoOiAnQ29kZUhhc2gnLFxuICAgICAgICAgICAgcmVudEFsbG93YW5jZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgcmVudFBhaWQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGRlZHVjdEJsb2NrOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgbGFzdFdyaXRlOiAnT3B0aW9uPEJsb2NrTnVtYmVyPicsXG4gICAgICAgICAgICBfcmVzZXJ2ZWQ6ICdPcHRpb248TnVsbD4nXG4gICAgICAgIH0sXG4gICAgICAgIENvZGVIYXNoOiAnSGFzaCcsXG4gICAgICAgIENvZGVTb3VyY2U6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgVXBsb2FkOiAnQnl0ZXMnLFxuICAgICAgICAgICAgICAgIEV4aXN0aW5nOiAnSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgQ29kZVVwbG9hZFJlcXVlc3Q6IHtcbiAgICAgICAgICAgIG9yaWdpbjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBjb2RlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgc3RvcmFnZURlcG9zaXRMaW1pdDogJ09wdGlvbjxCYWxhbmNlPidcbiAgICAgICAgfSxcbiAgICAgICAgQ29kZVVwbG9hZFJlc3VsdDogJ1Jlc3VsdDxDb2RlVXBsb2FkUmVzdWx0VmFsdWUsIERpc3BhdGNoRXJyb3I+JyxcbiAgICAgICAgQ29kZVVwbG9hZFJlc3VsdFZhbHVlOiB7XG4gICAgICAgICAgICBjb2RlSGFzaDogJ0NvZGVIYXNoJyxcbiAgICAgICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdENhbGxSZXF1ZXN0OiB7XG4gICAgICAgICAgICBvcmlnaW46ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZGVzdDogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB2YWx1ZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgZ2FzTGltaXQ6ICd1NjQnLFxuICAgICAgICAgICAgc3RvcmFnZURlcG9zaXRMaW1pdDogJ09wdGlvbjxCYWxhbmNlPicsXG4gICAgICAgICAgICBpbnB1dERhdGE6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RFeGVjUmVzdWx0U3VjY2Vzc1RvMjU1OiB7XG4gICAgICAgICAgICBzdGF0dXM6ICd1OCcsXG4gICAgICAgICAgICBkYXRhOiAnUmF3J1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdEV4ZWNSZXN1bHRUbzI1NToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBTdWNjZXNzOiAnQ29udHJhY3RFeGVjUmVzdWx0U3VjY2Vzc1RvMjU1JyxcbiAgICAgICAgICAgICAgICBFcnJvcjogJ051bGwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0RXhlY1Jlc3VsdFN1Y2Nlc3NUbzI2MDoge1xuICAgICAgICAgICAgZmxhZ3M6ICdDb250cmFjdFJldHVybkZsYWdzJyxcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcycsXG4gICAgICAgICAgICBnYXNDb25zdW1lZDogJ3U2NCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RFeGVjUmVzdWx0VG8yNjA6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgU3VjY2VzczogJ0NvbnRyYWN0RXhlY1Jlc3VsdFN1Y2Nlc3NUbzI2MCcsXG4gICAgICAgICAgICAgICAgRXJyb3I6ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdEV4ZWNSZXN1bHRPazoge1xuICAgICAgICAgICAgZmxhZ3M6ICdDb250cmFjdFJldHVybkZsYWdzJyxcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RFeGVjUmVzdWx0UmVzdWx0OiAnUmVzdWx0PENvbnRyYWN0RXhlY1Jlc3VsdE9rLCBEaXNwYXRjaEVycm9yPicsXG4gICAgICAgIENvbnRyYWN0RXhlY1Jlc3VsdFRvMjY3OiB7XG4gICAgICAgICAgICBnYXNDb25zdW1lZDogJ3U2NCcsXG4gICAgICAgICAgICBkZWJ1Z01lc3NhZ2U6ICdUZXh0JyxcbiAgICAgICAgICAgIHJlc3VsdDogJ0NvbnRyYWN0RXhlY1Jlc3VsdFJlc3VsdCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RFeGVjUmVzdWx0OiB7XG4gICAgICAgICAgICBnYXNDb25zdW1lZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBnYXNSZXF1aXJlZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBzdG9yYWdlRGVwb3NpdDogJ1N0b3JhZ2VEZXBvc2l0JyxcbiAgICAgICAgICAgIGRlYnVnTWVzc2FnZTogJ1RleHQnLFxuICAgICAgICAgICAgcmVzdWx0OiAnQ29udHJhY3RFeGVjUmVzdWx0UmVzdWx0J1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdEV4ZWNSZXN1bHRVNjQ6IHtcbiAgICAgICAgICAgIGdhc0NvbnN1bWVkOiAndTY0JyxcbiAgICAgICAgICAgIGdhc1JlcXVpcmVkOiAndTY0JyxcbiAgICAgICAgICAgIHN0b3JhZ2VEZXBvc2l0OiAnU3RvcmFnZURlcG9zaXQnLFxuICAgICAgICAgICAgZGVidWdNZXNzYWdlOiAnVGV4dCcsXG4gICAgICAgICAgICByZXN1bHQ6ICdDb250cmFjdEV4ZWNSZXN1bHRSZXN1bHQnXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0SW5mbzoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBBbGl2ZTogJ0FsaXZlQ29udHJhY3RJbmZvJyxcbiAgICAgICAgICAgICAgICBUb21ic3RvbmU6ICdUb21ic3RvbmVDb250cmFjdEluZm8nXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0Q2FsbEZsYWdzOiB7XG4gICAgICAgICAgICBfc2V0OiB7XG4gICAgICAgICAgICAgICAgX2JpdExlbmd0aDogMzIsXG4gICAgICAgICAgICAgICAgRm9yd2FyZElucHV0OiAxLFxuICAgICAgICAgICAgICAgIENsb25lSW5wdXQ6IDIsXG4gICAgICAgICAgICAgICAgVGFpbENhbGw6IDQsXG4gICAgICAgICAgICAgICAgQWxsb3dSZWVudHJ5OiA4XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0UmV0dXJuRmxhZ3M6IHtcbiAgICAgICAgICAgIF9zZXQ6IHtcbiAgICAgICAgICAgICAgICBfYml0TGVuZ3RoOiAzMixcbiAgICAgICAgICAgICAgICBSZXZlcnQ6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RTdG9yYWdlS2V5OiAnW3U4OyAzMl0nLFxuICAgICAgICBEZWxldGVkQ29udHJhY3Q6IHtcbiAgICAgICAgICAgIHBhaXJDb3VudDogJ3UzMicsXG4gICAgICAgICAgICB0cmllSWQ6ICdUcmllSWQnXG4gICAgICAgIH0sXG4gICAgICAgIEV4ZWNSZXR1cm5WYWx1ZToge1xuICAgICAgICAgICAgZmxhZ3M6ICdDb250cmFjdFJldHVybkZsYWdzJyxcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgR2FzOiAndTY0JyxcbiAgICAgICAgSG9zdEZuV2VpZ2h0c1RvMjY0OiB7XG4gICAgICAgICAgICBjYWxsZXI6ICdXZWlnaHQnLFxuICAgICAgICAgICAgYWRkcmVzczogJ1dlaWdodCcsXG4gICAgICAgICAgICBnYXNMZWZ0OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGJhbGFuY2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgdmFsdWVUcmFuc2ZlcnJlZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBtaW5pbXVtQmFsYW5jZTogJ1dlaWdodCcsXG4gICAgICAgICAgICB0b21ic3RvbmVEZXBvc2l0OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHJlbnRBbGxvd2FuY2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgYmxvY2tOdW1iZXI6ICdXZWlnaHQnLFxuICAgICAgICAgICAgbm93OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHdlaWdodFRvRmVlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGdhczogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnB1dDogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnB1dFBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmV0dXJuOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHJldHVyblBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgdGVybWluYXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHJlc3RvcmVUbzogJ1dlaWdodCcsXG4gICAgICAgICAgICByZXN0b3JlVG9QZXJEZWx0YTogJ1dlaWdodCcsXG4gICAgICAgICAgICByYW5kb206ICdXZWlnaHQnLFxuICAgICAgICAgICAgZGVwb3NpdEV2ZW50OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGRlcG9zaXRFdmVudFBlclRvcGljOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGRlcG9zaXRFdmVudFBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgc2V0UmVudEFsbG93YW5jZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBzZXRTdG9yYWdlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHNldFN0b3JhZ2VQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNsZWFyU3RvcmFnZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBnZXRTdG9yYWdlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGdldFN0b3JhZ2VQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHRyYW5zZmVyOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNhbGw6ICdXZWlnaHQnLFxuICAgICAgICAgICAgY2FsbFRyYW5zZmVyU3VyY2hhcmdlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNhbGxQZXJJbnB1dEJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgY2FsbFBlck91dHB1dEJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5zdGFudGlhdGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5zdGFudGlhdGVQZXJJbnB1dEJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5zdGFudGlhdGVQZXJPdXRwdXRCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hTaGEyMjU2OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hTaGEyMjU2UGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBoYXNoS2VjY2FrMjU2OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hLZWNjYWsyNTZQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hCbGFrZTIyNTY6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaGFzaEJsYWtlMjI1NlBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaGFzaEJsYWtlMjEyODogJ1dlaWdodCcsXG4gICAgICAgICAgICBoYXNoQmxha2UyMTI4UGVyQnl0ZTogJ1dlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgSG9zdEZuV2VpZ2h0czoge1xuICAgICAgICAgICAgY2FsbGVyOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGFkZHJlc3M6ICdXZWlnaHQnLFxuICAgICAgICAgICAgZ2FzTGVmdDogJ1dlaWdodCcsXG4gICAgICAgICAgICBiYWxhbmNlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHZhbHVlVHJhbnNmZXJyZWQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgbWluaW11bUJhbGFuY2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgdG9tYnN0b25lRGVwb3NpdDogJ1dlaWdodCcsXG4gICAgICAgICAgICByZW50QWxsb3dhbmNlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIG5vdzogJ1dlaWdodCcsXG4gICAgICAgICAgICB3ZWlnaHRUb0ZlZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBnYXM6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5wdXQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaW5wdXRQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHJldHVybjogJ1dlaWdodCcsXG4gICAgICAgICAgICByZXR1cm5QZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHRlcm1pbmF0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICB0ZXJtaW5hdGVQZXJDb2RlQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICByZXN0b3JlVG86ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmVzdG9yZVRvUGVyQ2FsbGVyQ29kZUJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmVzdG9yZVRvUGVyVG9tYnN0b25lQ29kZUJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmVzdG9yZVRvUGVyRGVsdGE6ICdXZWlnaHQnLFxuICAgICAgICAgICAgcmFuZG9tOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGRlcG9zaXRFdmVudDogJ1dlaWdodCcsXG4gICAgICAgICAgICBkZXBvc2l0RXZlbnRQZXJUb3BpYzogJ1dlaWdodCcsXG4gICAgICAgICAgICBkZXBvc2l0RXZlbnRQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHNldFJlbnRBbGxvd2FuY2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgc2V0U3RvcmFnZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBzZXRTdG9yYWdlUGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBjbGVhclN0b3JhZ2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgZ2V0U3RvcmFnZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBnZXRTdG9yYWdlUGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICB0cmFuc2ZlcjogJ1dlaWdodCcsXG4gICAgICAgICAgICBjYWxsOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNhbGxQZXJDb2RlQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBjYWxsVHJhbnNmZXJTdXJjaGFyZ2U6ICdXZWlnaHQnLFxuICAgICAgICAgICAgY2FsbFBlcklucHV0Qnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBjYWxsUGVyT3V0cHV0Qnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnN0YW50aWF0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnN0YW50aWF0ZVBlckNvZGVCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGluc3RhbnRpYXRlUGVySW5wdXRCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGluc3RhbnRpYXRlUGVyT3V0cHV0Qnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBpbnN0YW50aWF0ZVBlclNhbHRCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hTaGEyMjU2OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hTaGEyMjU2UGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICBoYXNoS2VjY2FrMjU2OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hLZWNjYWsyNTZQZXJCeXRlOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGhhc2hCbGFrZTIyNTY6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaGFzaEJsYWtlMjI1NlBlckJ5dGU6ICdXZWlnaHQnLFxuICAgICAgICAgICAgaGFzaEJsYWtlMjEyODogJ1dlaWdodCcsXG4gICAgICAgICAgICBoYXNoQmxha2UyMTI4UGVyQnl0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICByZW50UGFyYW1zOiAnV2VpZ2h0J1xuICAgICAgICB9LFxuICAgICAgICBJbnN0YW50aWF0ZVJlcXVlc3RWMToge1xuICAgICAgICAgICAgb3JpZ2luOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBnYXNMaW1pdDogJ0dhcycsXG4gICAgICAgICAgICBjb2RlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJyxcbiAgICAgICAgICAgIHNhbHQ6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgSW5zdGFudGlhdGVSZXF1ZXN0VjI6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ0luc3RhbnRpYXRlUmVxdWVzdFYxJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB2YWx1ZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgZ2FzTGltaXQ6ICdHYXMnLFxuICAgICAgICAgICAgc3RvcmFnZURlcG9zaXRMaW1pdDogJ09wdGlvbjxCYWxhbmNlPicsXG4gICAgICAgICAgICBjb2RlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJyxcbiAgICAgICAgICAgIHNhbHQ6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgSW5zdGFudGlhdGVSZXF1ZXN0OiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdJbnN0YW50aWF0ZVJlcXVlc3RWMicsXG4gICAgICAgICAgICBvcmlnaW46ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgdmFsdWU6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGdhc0xpbWl0OiAnR2FzJyxcbiAgICAgICAgICAgIHN0b3JhZ2VEZXBvc2l0TGltaXQ6ICdPcHRpb248QmFsYW5jZT4nLFxuICAgICAgICAgICAgY29kZTogJ0NvZGVTb3VyY2UnLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJyxcbiAgICAgICAgICAgIHNhbHQ6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RJbnN0YW50aWF0ZVJlc3VsdFRvMjY3OiAnUmVzdWx0PEluc3RhbnRpYXRlUmV0dXJuVmFsdWVUbzI2NywgTnVsbD4nLFxuICAgICAgICBDb250cmFjdEluc3RhbnRpYXRlUmVzdWx0VG8yOTk6ICdSZXN1bHQ8SW5zdGFudGlhdGVSZXR1cm5WYWx1ZU9rLCBOdWxsPicsXG4gICAgICAgIENvbnRyYWN0SW5zdGFudGlhdGVSZXN1bHQ6IHtcbiAgICAgICAgICAgIGdhc0NvbnN1bWVkOiAnV2VpZ2h0VjInLFxuICAgICAgICAgICAgZ2FzUmVxdWlyZWQ6ICdXZWlnaHRWMicsXG4gICAgICAgICAgICBzdG9yYWdlRGVwb3NpdDogJ1N0b3JhZ2VEZXBvc2l0JyxcbiAgICAgICAgICAgIGRlYnVnTWVzc2FnZTogJ1RleHQnLFxuICAgICAgICAgICAgcmVzdWx0OiAnSW5zdGFudGlhdGVSZXR1cm5WYWx1ZSdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RJbnN0YW50aWF0ZVJlc3VsdFU2NDoge1xuICAgICAgICAgICAgLy8gb25seSB0aGlzIG9uZSBjYW4gZmFpbCwgdGhlIGN1cnJlbnQgdmVyc2lvbiAoYWJvdmUpIF9zaG91bGRfIGJlIGNvcnJlY3RseVxuICAgICAgICAgICAgLy8gdmVyc2lvbmVkIG5vdywgYWthIG5vIG1vcmUgZGVwcmVjYXRlZCBSUENzIGludm9sdmVkLCBvbmx5IHJ1bnRpbWUgY2FsbHNcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ0NvbnRyYWN0SW5zdGFudGlhdGVSZXN1bHRUbzI5OScsXG4gICAgICAgICAgICBnYXNDb25zdW1lZDogJ3U2NCcsXG4gICAgICAgICAgICBnYXNSZXF1aXJlZDogJ3U2NCcsXG4gICAgICAgICAgICBzdG9yYWdlRGVwb3NpdDogJ1N0b3JhZ2VEZXBvc2l0JyxcbiAgICAgICAgICAgIGRlYnVnTWVzc2FnZTogJ1RleHQnLFxuICAgICAgICAgICAgcmVzdWx0OiAnSW5zdGFudGlhdGVSZXR1cm5WYWx1ZSdcbiAgICAgICAgfSxcbiAgICAgICAgSW5zdGFudGlhdGVSZXR1cm5WYWx1ZVRvMjY3OiB7XG4gICAgICAgICAgICByZXN1bHQ6ICdFeGVjUmV0dXJuVmFsdWUnLFxuICAgICAgICAgICAgYWNjb3VudElkOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHJlbnRQcm9qZWN0aW9uOiAnT3B0aW9uPFJlbnRQcm9qZWN0aW9uPidcbiAgICAgICAgfSxcbiAgICAgICAgSW5zdGFudGlhdGVSZXR1cm5WYWx1ZU9rOiB7XG4gICAgICAgICAgICByZXN1bHQ6ICdFeGVjUmV0dXJuVmFsdWUnLFxuICAgICAgICAgICAgYWNjb3VudElkOiAnQWNjb3VudElkJ1xuICAgICAgICB9LFxuICAgICAgICBJbnN0YW50aWF0ZVJldHVyblZhbHVlOiAnUmVzdWx0PEluc3RhbnRpYXRlUmV0dXJuVmFsdWVPaywgRGlzcGF0Y2hFcnJvcj4nLFxuICAgICAgICBJbnN0cnVjdGlvbldlaWdodHM6IHtcbiAgICAgICAgICAgIGk2NGNvbnN0OiAndTMyJyxcbiAgICAgICAgICAgIGk2NGxvYWQ6ICd1MzInLFxuICAgICAgICAgICAgaTY0c3RvcmU6ICd1MzInLFxuICAgICAgICAgICAgc2VsZWN0OiAndTMyJyxcbiAgICAgICAgICAgIHJJZjogJ3UzMicsXG4gICAgICAgICAgICBicjogJ3UzMicsXG4gICAgICAgICAgICBicklmOiAndTMyJyxcbiAgICAgICAgICAgIGJySWFibGU6ICd1MzInLFxuICAgICAgICAgICAgYnJJYWJsZVBlckVudHJ5OiAndTMyJyxcbiAgICAgICAgICAgIGNhbGw6ICd1MzInLFxuICAgICAgICAgICAgY2FsbEluZGlyZWN0OiAndTMyJyxcbiAgICAgICAgICAgIGNhbGxJbmRpcmVjdFBlclBhcmFtOiAndTMyJyxcbiAgICAgICAgICAgIGxvY2FsR2V0OiAndTMyJyxcbiAgICAgICAgICAgIGxvY2FsU2V0OiAndTMyJyxcbiAgICAgICAgICAgIGxvY2FsX3RlZTogJ3UzMicsXG4gICAgICAgICAgICBnbG9iYWxHZXQ6ICd1MzInLFxuICAgICAgICAgICAgZ2xvYmFsU2V0OiAndTMyJyxcbiAgICAgICAgICAgIG1lbW9yeUN1cnJlbnQ6ICd1MzInLFxuICAgICAgICAgICAgbWVtb3J5R3JvdzogJ3UzMicsXG4gICAgICAgICAgICBpNjRjbHo6ICd1MzInLFxuICAgICAgICAgICAgaTY0Y3R6OiAndTMyJyxcbiAgICAgICAgICAgIGk2NHBvcGNudDogJ3UzMicsXG4gICAgICAgICAgICBpNjRlcXo6ICd1MzInLFxuICAgICAgICAgICAgaTY0ZXh0ZW5kc2kzMjogJ3UzMicsXG4gICAgICAgICAgICBpNjRleHRlbmR1aTMyOiAndTMyJyxcbiAgICAgICAgICAgIGkzMndyYXBpNjQ6ICd1MzInLFxuICAgICAgICAgICAgaTY0ZXE6ICd1MzInLFxuICAgICAgICAgICAgaTY0bmU6ICd1MzInLFxuICAgICAgICAgICAgaTY0bHRzOiAndTMyJyxcbiAgICAgICAgICAgIGk2NGx0dTogJ3UzMicsXG4gICAgICAgICAgICBpNjRndHM6ICd1MzInLFxuICAgICAgICAgICAgaTY0Z3R1OiAndTMyJyxcbiAgICAgICAgICAgIGk2NGxlczogJ3UzMicsXG4gICAgICAgICAgICBpNjRsZXU6ICd1MzInLFxuICAgICAgICAgICAgaTY0Z2VzOiAndTMyJyxcbiAgICAgICAgICAgIGk2NGdldTogJ3UzMicsXG4gICAgICAgICAgICBpNjRhZGQ6ICd1MzInLFxuICAgICAgICAgICAgaTY0c3ViOiAndTMyJyxcbiAgICAgICAgICAgIGk2NG11bDogJ3UzMicsXG4gICAgICAgICAgICBpNjRkaXZzOiAndTMyJyxcbiAgICAgICAgICAgIGk2NGRpdnU6ICd1MzInLFxuICAgICAgICAgICAgaTY0cmVtczogJ3UzMicsXG4gICAgICAgICAgICBpNjRyZW11OiAndTMyJyxcbiAgICAgICAgICAgIGk2NGFuZDogJ3UzMicsXG4gICAgICAgICAgICBpNjRvcjogJ3UzMicsXG4gICAgICAgICAgICBpNjR4b3I6ICd1MzInLFxuICAgICAgICAgICAgaTY0c2hsOiAndTMyJyxcbiAgICAgICAgICAgIGk2NHNocnM6ICd1MzInLFxuICAgICAgICAgICAgaTY0c2hydTogJ3UzMicsXG4gICAgICAgICAgICBpNjRyb3RsOiAndTMyJyxcbiAgICAgICAgICAgIGk2NHJvdHI6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIExpbWl0c1RvMjY0OiB7XG4gICAgICAgICAgICBldmVudFRvcGljczogJ3UzMicsXG4gICAgICAgICAgICBzdGFja0hlaWdodDogJ3UzMicsXG4gICAgICAgICAgICBnbG9iYWxzOiAndTMyJyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6ICd1MzInLFxuICAgICAgICAgICAgbWVtb3J5UGFnZXM6ICd1MzInLFxuICAgICAgICAgICAgdGFibGVTaXplOiAndTMyJyxcbiAgICAgICAgICAgIGJyVGFibGVTaXplOiAndTMyJyxcbiAgICAgICAgICAgIHN1YmplY3RMZW46ICd1MzInLFxuICAgICAgICAgICAgY29kZVNpemU6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIExpbWl0czoge1xuICAgICAgICAgICAgZXZlbnRUb3BpY3M6ICd1MzInLFxuICAgICAgICAgICAgc3RhY2tIZWlnaHQ6ICd1MzInLFxuICAgICAgICAgICAgZ2xvYmFsczogJ3UzMicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiAndTMyJyxcbiAgICAgICAgICAgIG1lbW9yeVBhZ2VzOiAndTMyJyxcbiAgICAgICAgICAgIHRhYmxlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBiclRhYmxlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBzdWJqZWN0TGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBQcmVmYWJXYXNtTW9kdWxlOiB7XG4gICAgICAgICAgICBzY2hlZHVsZVZlcnNpb246ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgaW5pdGlhbDogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBtYXhpbXVtOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIHJlZmNvdW50OiAnQ29tcGFjdDx1NjQ+JyxcbiAgICAgICAgICAgIF9yZXNlcnZlZDogJ09wdGlvbjxOdWxsPicsXG4gICAgICAgICAgICBjb2RlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgb3JpZ2luYWxDb2RlTGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBSZW50UHJvamVjdGlvbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBFdmljdGlvbkF0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgICAgIE5vRXZpY3Rpb246ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsZVRvMjEyOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIHB1dENvZGVQZXJCeXRlQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBncm93TWVtQ29zdDogJ0dhcycsXG4gICAgICAgICAgICByZWd1bGFyT3BDb3N0OiAnR2FzJyxcbiAgICAgICAgICAgIHJldHVybkRhdGFQZXJCeXRlQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBldmVudERhdGFQZXJCeXRlQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBldmVudFBlclRvcGljQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBldmVudEJhc2VDb3N0OiAnR2FzJyxcbiAgICAgICAgICAgIHNhbmRib3hEYXRhUmVhZENvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgc2FuZGJveERhdGFXcml0ZUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgbWF4RXZlbnRUb3BpY3M6ICd1MzInLFxuICAgICAgICAgICAgbWF4U3RhY2tIZWlnaHQ6ICd1MzInLFxuICAgICAgICAgICAgbWF4TWVtb3J5UGFnZXM6ICd1MzInLFxuICAgICAgICAgICAgZW5hYmxlUHJpbnRsbjogJ2Jvb2wnLFxuICAgICAgICAgICAgbWF4U3ViamVjdExlbjogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgU2NoZWR1bGVUbzI1ODoge1xuICAgICAgICAgICAgdmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBwdXRDb2RlUGVyQnl0ZUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgZ3Jvd01lbUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgcmVndWxhck9wQ29zdDogJ0dhcycsXG4gICAgICAgICAgICByZXR1cm5EYXRhUGVyQnl0ZUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgZXZlbnREYXRhUGVyQnl0ZUNvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgZXZlbnRQZXJUb3BpY0Nvc3Q6ICdHYXMnLFxuICAgICAgICAgICAgZXZlbnRCYXNlQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBzYW5kYm94RGF0YVJlYWRDb3N0OiAnR2FzJyxcbiAgICAgICAgICAgIHNhbmRib3hEYXRhV3JpdGVDb3N0OiAnR2FzJyxcbiAgICAgICAgICAgIHRyYW5zZmVyQ29zdDogJ0dhcycsXG4gICAgICAgICAgICBtYXhFdmVudFRvcGljczogJ3UzMicsXG4gICAgICAgICAgICBtYXhTdGFja0hlaWdodDogJ3UzMicsXG4gICAgICAgICAgICBtYXhNZW1vcnlQYWdlczogJ3UzMicsXG4gICAgICAgICAgICBlbmFibGVQcmludGxuOiAnYm9vbCcsXG4gICAgICAgICAgICBtYXhTdWJqZWN0TGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsZVRvMjY0OiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIGVuYWJsZVByaW50bG46ICdib29sJyxcbiAgICAgICAgICAgIGxpbWl0czogJ0xpbWl0c1RvMjY0JyxcbiAgICAgICAgICAgIGluc3RydWN0aW9uV2VpZ2h0czogJ0luc3RydWN0aW9uV2VpZ2h0cycsXG4gICAgICAgICAgICBob3N0Rm5XZWlnaHRzOiAnSG9zdEZuV2VpZ2h0c1RvMjY0J1xuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsZToge1xuICAgICAgICAgICAgdmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBlbmFibGVQcmludGxuOiAnYm9vbCcsXG4gICAgICAgICAgICBsaW1pdHM6ICdMaW1pdHMnLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25XZWlnaHRzOiAnSW5zdHJ1Y3Rpb25XZWlnaHRzJyxcbiAgICAgICAgICAgIGhvc3RGbldlaWdodHM6ICdIb3N0Rm5XZWlnaHRzJ1xuICAgICAgICB9LFxuICAgICAgICBTZWVkT2Y6ICdIYXNoJyxcbiAgICAgICAgU3RvcmFnZURlcG9zaXQ6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgUmVmdW5kOiAnQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgQ2hhcmdlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgVG9tYnN0b25lQ29udHJhY3RJbmZvOiAnSGFzaCcsXG4gICAgICAgIFRyaWVJZDogJ0J5dGVzJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGNhbGw6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSB0aGUgcnVudGltZSBpbnRlcmZhY2UgYGFwaS5jYWxsLmNvbnRyYWN0c0FwaS5jYWxsYCBpbnN0ZWFkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdFeGVjdXRlcyBhIGNhbGwgdG8gYSBjb250cmFjdCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjYWxsUmVxdWVzdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0NvbnRyYWN0Q2FsbFJlcXVlc3QnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdDb250cmFjdEV4ZWNSZXN1bHQnXG4gICAgfSxcbiAgICBnZXRTdG9yYWdlOiB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6ICdVc2UgdGhlIHJ1bnRpbWUgaW50ZXJmYWNlIGBhcGkuY2FsbC5jb250cmFjdHNBcGkuZ2V0U3RvcmFnZWAgaW5zdGVhZCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgdmFsdWUgdW5kZXIgYSBzcGVjaWZpZWQgc3RvcmFnZSBrZXkgaW4gYSBjb250cmFjdCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxCeXRlcz4nXG4gICAgfSxcbiAgICBpbnN0YW50aWF0ZToge1xuICAgICAgICBkZXByZWNhdGVkOiAnVXNlIHRoZSBydW50aW1lIGludGVyZmFjZSBgYXBpLmNhbGwuY29udHJhY3RzQXBpLmluc3RhbnRpYXRlYCBpbnN0ZWFkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnN0YW50aWF0ZSBhIG5ldyBjb250cmFjdCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdyZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSW5zdGFudGlhdGVSZXF1ZXN0VjEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdDb250cmFjdEluc3RhbnRpYXRlUmVzdWx0J1xuICAgIH0sXG4gICAgcmVudFByb2plY3Rpb246IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ05vdCBhdmFpbGFibGUgaW4gbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIGNvbnRyYWN0cyBpbnRlcmZhY2VzJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBwcm9qZWN0ZWQgdGltZSBhIGdpdmVuIGNvbnRyYWN0IHdpbGwgYmUgYWJsZSB0byBzdXN0YWluIHBheWluZyBpdHMgcmVudCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPEJsb2NrTnVtYmVyPidcbiAgICB9LFxuICAgIHVwbG9hZENvZGU6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSB0aGUgcnVudGltZSBpbnRlcmZhY2UgYGFwaS5jYWxsLmNvbnRyYWN0c0FwaS51cGxvYWRDb2RlYCBpbnN0ZWFkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWQgbmV3IGNvZGUgd2l0aG91dCBpbnN0YW50aWF0aW5nIGEgY29udHJhY3QgZnJvbSBpdCcsXG4gICAgICAgIC8vIFRoZSBSUEMgaGVyZSBpcyB0ZXJyaWJseSBtaXNuYW1lZCAtIHNvbWVib2R5IGZvcmdvdCBob3cgdGhlIFJQQ3NcbiAgICAgICAgLy8gYXJlIGFjdHVhbGx5IGRvbmUsIGllLiA8bW9kdWxlPl88Y2FtZWxDYXNlZE1ldGhvZD5cbiAgICAgICAgZW5kcG9pbnQ6ICdjb250cmFjdHNfdXBsb2FkX2NvZGUnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkUmVxdWVzdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0NvZGVVcGxvYWRSZXF1ZXN0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQ29kZVVwbG9hZFJlc3VsdCdcbiAgICB9XG59O1xuIiwiY29uc3QgU0hBUkVEX1YxX1YyID0ge1xuICAgIGdldF9zdG9yYWdlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUXVlcnkgYSBnaXZlbiBzdG9yYWdlIGtleSBpbiBhIGdpdmVuIGNvbnRyYWN0LicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248Qnl0ZXM+J1xuICAgIH0sXG4gICAgdXBsb2FkX2NvZGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWQgbmV3IGNvZGUgd2l0aG91dCBpbnN0YW50aWF0aW5nIGEgY29udHJhY3QgZnJvbSBpdC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3JpZ2luJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RvcmFnZURlcG9zaXRMaW1pdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCYWxhbmNlPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0NvZGVVcGxvYWRSZXN1bHQnXG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIENvbnRyYWN0c0FwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1BlcmZvcm0gYSBjYWxsIGZyb20gYSBzcGVjaWZpZWQgYWNjb3VudCB0byBhIGdpdmVuIGNvbnRyYWN0LicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvcmlnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZ2FzTGltaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248V2VpZ2h0VjI+J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc3RvcmFnZURlcG9zaXRMaW1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCYWxhbmNlPidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lucHV0RGF0YScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzx1OD4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb250cmFjdEV4ZWNSZXN1bHQnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZToge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luc3RhbnRpYXRlIGEgbmV3IGNvbnRyYWN0LicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvcmlnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0JhbGFuY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdnYXNMaW1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxXZWlnaHRWMj4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzdG9yYWdlRGVwb3NpdExpbWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPEJhbGFuY2U+J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0NvZGVTb3VyY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzYWx0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb250cmFjdEluc3RhbnRpYXRlUmVzdWx0J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uU0hBUkVEX1YxX1YyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgY2FsbDoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1BlcmZvcm0gYSBjYWxsIGZyb20gYSBzcGVjaWZpZWQgYWNjb3VudCB0byBhIGdpdmVuIGNvbnRyYWN0LicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvcmlnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZ2FzTGltaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd1NjQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzdG9yYWdlRGVwb3NpdExpbWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPEJhbGFuY2U+J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaW5wdXREYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU4PidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0NvbnRyYWN0RXhlY1Jlc3VsdFU2NCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSW5zdGFudGlhdGUgYSBuZXcgY29udHJhY3QuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ29yaWdpbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2dhc0xpbWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTY0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc3RvcmFnZURlcG9zaXRMaW1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCYWxhbmNlPidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb2RlU291cmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2FsdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ29udHJhY3RJbnN0YW50aWF0ZVJlc3VsdFU2NCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLlNIQVJFRF9WMV9WMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmNvbnN0IGxheW91dCA9IHtcbiAgICBDb250cmFjdENyeXB0b0hhc2hlcjoge1xuICAgICAgICBfZW51bTogWydCbGFrZTJ4MjU2JywgJ1NoYTJ4MjU2JywgJ0tlY2NhazI1NiddXG4gICAgfSxcbiAgICBDb250cmFjdERpc2NyaW1pbmFudDogJ3UzMicsXG4gICAgQ29udHJhY3RMYXlvdXRBcnJheToge1xuICAgICAgICBvZmZzZXQ6ICdDb250cmFjdExheW91dEtleScsXG4gICAgICAgIGxlbjogJ3UzMicsXG4gICAgICAgIGNlbGxzUGVyRWxlbTogJ3U2NCcsXG4gICAgICAgIGxheW91dDogJ0NvbnRyYWN0U3RvcmFnZUxheW91dCdcbiAgICB9LFxuICAgIENvbnRyYWN0TGF5b3V0Q2VsbDoge1xuICAgICAgICBrZXk6ICdDb250cmFjdExheW91dEtleScsXG4gICAgICAgIHR5OiAnU2lMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBDb250cmFjdExheW91dEVudW06IHtcbiAgICAgICAgZGlzcGF0Y2hLZXk6ICdDb250cmFjdExheW91dEtleScsXG4gICAgICAgIHZhcmlhbnRzOiAnQlRyZWVNYXA8Q29udHJhY3REaXNjcmltaW5hbnQsIENvbnRyYWN0TGF5b3V0U3RydWN0PidcbiAgICB9LFxuICAgIENvbnRyYWN0TGF5b3V0SGFzaDoge1xuICAgICAgICBvZmZzZXQ6ICdDb250cmFjdExheW91dEtleScsXG4gICAgICAgIHN0cmF0ZWd5OiAnQ29udHJhY3RMYXlvdXRIYXNoaW5nU3RyYXRlZ3knLFxuICAgICAgICBsYXlvdXQ6ICdDb250cmFjdFN0b3JhZ2VMYXlvdXQnXG4gICAgfSxcbiAgICBDb250cmFjdExheW91dEhhc2hpbmdTdHJhdGVneToge1xuICAgICAgICBoYXNoZXI6ICdDb250cmFjdENyeXB0b0hhc2hlcicsXG4gICAgICAgIHBvc3RmaXg6ICdWZWM8dTg+JyxcbiAgICAgICAgcHJlZml4OiAnVmVjPHU4PidcbiAgICB9LFxuICAgIENvbnRyYWN0TGF5b3V0S2V5OiAnW3U4OyAzMl0nLFxuICAgIENvbnRyYWN0TGF5b3V0U3RydWN0OiB7XG4gICAgICAgIGZpZWxkczogJ1ZlYzxDb250cmFjdExheW91dFN0cnVjdEZpZWxkPidcbiAgICB9LFxuICAgIENvbnRyYWN0TGF5b3V0U3RydWN0RmllbGQ6IHtcbiAgICAgICAgbGF5b3V0OiAnQ29udHJhY3RTdG9yYWdlTGF5b3V0JyxcbiAgICAgICAgbmFtZTogJ1RleHQnXG4gICAgfSxcbiAgICBDb250cmFjdFN0b3JhZ2VMYXlvdXQ6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENlbGw6ICdDb250cmFjdExheW91dENlbGwnLFxuICAgICAgICAgICAgSGFzaDogJ0NvbnRyYWN0TGF5b3V0SGFzaCcsXG4gICAgICAgICAgICBBcnJheTogJ0NvbnRyYWN0TGF5b3V0QXJyYXknLFxuICAgICAgICAgICAgU3RydWN0OiAnQ29udHJhY3RMYXlvdXRTdHJ1Y3QnLFxuICAgICAgICAgICAgRW51bTogJ0NvbnRyYWN0TGF5b3V0RW51bSdcbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCBzcGVjID0ge1xuICAgIENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjA6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzZWxlY3RvcjogJ0NvbnRyYWN0U2VsZWN0b3InLFxuICAgICAgICBhcmdzOiAnVmVjPENvbnRyYWN0TWVzc2FnZVBhcmFtU3BlY1YwPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdENvbnN0cnVjdG9yU3BlY1YxOiB7XG4gICAgICAgIG5hbWU6ICdWZWM8VGV4dD4nLFxuICAgICAgICBzZWxlY3RvcjogJ0NvbnRyYWN0U2VsZWN0b3InLFxuICAgICAgICBhcmdzOiAnVmVjPENvbnRyYWN0TWVzc2FnZVBhcmFtU3BlY1YwPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdENvbnN0cnVjdG9yU3BlY1YyOiB7XG4gICAgICAgIGxhYmVsOiAnVGV4dCcsXG4gICAgICAgIHNlbGVjdG9yOiAnQ29udHJhY3RTZWxlY3RvcicsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjI+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjM6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdDb250cmFjdFNlbGVjdG9yJyxcbiAgICAgICAgcGF5YWJsZTogJ2Jvb2wnLFxuICAgICAgICBhcmdzOiAnVmVjPENvbnRyYWN0TWVzc2FnZVBhcmFtU3BlY1YyPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdENvbnN0cnVjdG9yU3BlY1Y0OiB7XG4gICAgICAgIGxhYmVsOiAnVGV4dCcsXG4gICAgICAgIHNlbGVjdG9yOiAnQ29udHJhY3RTZWxlY3RvcicsXG4gICAgICAgIHBheWFibGU6ICdib29sJyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNWMj4nLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+JyxcbiAgICAgICAgZGVmYXVsdDogJ2Jvb2wnLFxuICAgICAgICByZXR1cm5UeXBlOiAnT3B0aW9uPENvbnRyYWN0VHlwZVNwZWM+J1xuICAgIH0sXG4gICAgQ29udHJhY3RDb250cmFjdFNwZWNWMDoge1xuICAgICAgICBjb25zdHJ1Y3RvcnM6ICdWZWM8Q29udHJhY3RDb25zdHJ1Y3RvclNwZWNWMD4nLFxuICAgICAgICBtZXNzYWdlczogJ1ZlYzxDb250cmFjdE1lc3NhZ2VTcGVjVjA+JyxcbiAgICAgICAgZXZlbnRzOiAnVmVjPENvbnRyYWN0RXZlbnRTcGVjVjA+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0Q29udHJhY3RTcGVjVjE6IHtcbiAgICAgICAgY29uc3RydWN0b3JzOiAnVmVjPENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjE+JyxcbiAgICAgICAgbWVzc2FnZXM6ICdWZWM8Q29udHJhY3RNZXNzYWdlU3BlY1YxPicsXG4gICAgICAgIGV2ZW50czogJ1ZlYzxDb250cmFjdEV2ZW50U3BlY1YxPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdENvbnRyYWN0U3BlY1YyOiB7XG4gICAgICAgIGNvbnN0cnVjdG9yczogJ1ZlYzxDb250cmFjdENvbnN0cnVjdG9yU3BlY1YyPicsXG4gICAgICAgIG1lc3NhZ2VzOiAnVmVjPENvbnRyYWN0TWVzc2FnZVNwZWNWMj4nLFxuICAgICAgICBldmVudHM6ICdWZWM8Q29udHJhY3RFdmVudFNwZWNWMj4nLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgQ29udHJhY3RDb250cmFjdFNwZWNWMzoge1xuICAgICAgICBjb25zdHJ1Y3RvcnM6ICdWZWM8Q29udHJhY3RDb25zdHJ1Y3RvclNwZWNWMz4nLFxuICAgICAgICBtZXNzYWdlczogJ1ZlYzxDb250cmFjdE1lc3NhZ2VTcGVjVjI+JyxcbiAgICAgICAgZXZlbnRzOiAnVmVjPENvbnRyYWN0RXZlbnRTcGVjVjI+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0Q29udHJhY3RTcGVjVjQ6IHtcbiAgICAgICAgY29uc3RydWN0b3JzOiAnVmVjPENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjQ+JyxcbiAgICAgICAgbWVzc2FnZXM6ICdWZWM8Q29udHJhY3RNZXNzYWdlU3BlY1YzPicsXG4gICAgICAgIGV2ZW50czogJ1ZlYzxDb250cmFjdEV2ZW50U3BlY1YyPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nLFxuICAgICAgICBlbnZpcm9ubWVudDogJ0NvbnRyYWN0RW52aXJvbm1lbnRWNCdcbiAgICB9LFxuICAgIENvbnRyYWN0Q29udHJhY3RTcGVjVjU6IHtcbiAgICAgICAgY29uc3RydWN0b3JzOiAnVmVjPENvbnRyYWN0Q29uc3RydWN0b3JTcGVjVjQ+JyxcbiAgICAgICAgbWVzc2FnZXM6ICdWZWM8Q29udHJhY3RNZXNzYWdlU3BlY1YzPicsXG4gICAgICAgIGV2ZW50czogJ1ZlYzxDb250cmFjdEV2ZW50U3BlY1YzPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nLFxuICAgICAgICBlbnZpcm9ubWVudDogJ0NvbnRyYWN0RW52aXJvbm1lbnRWNCdcbiAgICB9LFxuICAgIENvbnRyYWN0RGlzcGxheU5hbWU6ICdTaVBhdGgnLFxuICAgIENvbnRyYWN0RXZlbnRQYXJhbVNwZWNWMDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIGluZGV4ZWQ6ICdib29sJyxcbiAgICAgICAgdHlwZTogJ0NvbnRyYWN0VHlwZVNwZWMnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgQ29udHJhY3RFdmVudFBhcmFtU3BlY1YyOiB7XG4gICAgICAgIGxhYmVsOiAnVGV4dCcsXG4gICAgICAgIGluZGV4ZWQ6ICdib29sJyxcbiAgICAgICAgdHlwZTogJ0NvbnRyYWN0VHlwZVNwZWMnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgQ29udHJhY3RFdmVudFNwZWNWMDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RFdmVudFBhcmFtU3BlY1YwPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdEV2ZW50U3BlY1YxOiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdEV2ZW50UGFyYW1TcGVjVjA+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0RXZlbnRTcGVjVjI6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdEV2ZW50UGFyYW1TcGVjVjI+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0RXZlbnRTcGVjVjM6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdEV2ZW50UGFyYW1TcGVjVjI+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PicsXG4gICAgICAgIG1vZHVsZV9wYXRoOiAnVGV4dCcsXG4gICAgICAgIHNpZ25hdHVyZV90b3BpYzogJ09wdGlvbjxbdTg7IDMyXT4nXG4gICAgfSxcbiAgICBDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNWMDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIHR5cGU6ICdDb250cmFjdFR5cGVTcGVjJ1xuICAgIH0sXG4gICAgQ29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjI6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgdHlwZTogJ0NvbnRyYWN0VHlwZVNwZWMnXG4gICAgfSxcbiAgICBDb250cmFjdE1lc3NhZ2VTcGVjVjA6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzZWxlY3RvcjogJ0NvbnRyYWN0U2VsZWN0b3InLFxuICAgICAgICBtdXRhdGVzOiAnYm9vbCcsXG4gICAgICAgIHBheWFibGU6ICdib29sJyxcbiAgICAgICAgYXJnczogJ1ZlYzxDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNWMD4nLFxuICAgICAgICByZXR1cm5UeXBlOiAnT3B0aW9uPENvbnRyYWN0VHlwZVNwZWM+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIENvbnRyYWN0TWVzc2FnZVNwZWNWMToge1xuICAgICAgICBuYW1lOiAnVmVjPFRleHQ+JyxcbiAgICAgICAgc2VsZWN0b3I6ICdDb250cmFjdFNlbGVjdG9yJyxcbiAgICAgICAgbXV0YXRlczogJ2Jvb2wnLFxuICAgICAgICBwYXlhYmxlOiAnYm9vbCcsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjA+JyxcbiAgICAgICAgcmV0dXJuVHlwZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdE1lc3NhZ2VTcGVjVjI6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdDb250cmFjdFNlbGVjdG9yJyxcbiAgICAgICAgbXV0YXRlczogJ2Jvb2wnLFxuICAgICAgICBwYXlhYmxlOiAnYm9vbCcsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjI+JyxcbiAgICAgICAgcmV0dXJuVHlwZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBDb250cmFjdE1lc3NhZ2VTcGVjVjM6IHtcbiAgICAgICAgbGFiZWw6ICdUZXh0JyxcbiAgICAgICAgc2VsZWN0b3I6ICdDb250cmFjdFNlbGVjdG9yJyxcbiAgICAgICAgbXV0YXRlczogJ2Jvb2wnLFxuICAgICAgICBwYXlhYmxlOiAnYm9vbCcsXG4gICAgICAgIGFyZ3M6ICdWZWM8Q29udHJhY3RNZXNzYWdlUGFyYW1TcGVjVjI+JyxcbiAgICAgICAgcmV0dXJuVHlwZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nLFxuICAgICAgICBkZWZhdWx0OiAnYm9vbCdcbiAgICB9LFxuICAgIENvbnRyYWN0U2VsZWN0b3I6ICdbdTg7IDRdJyxcbiAgICBDb250cmFjdFR5cGVTcGVjOiB7XG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQ29udHJhY3REaXNwbGF5TmFtZSdcbiAgICB9XG59O1xuY29uc3QgbGF0ZXN0ID0ge1xuICAgIENvbnRyYWN0Q29uc3RydWN0b3JTcGVjTGF0ZXN0OiAnQ29udHJhY3RDb25zdHJ1Y3RvclNwZWNWNCcsXG4gICAgQ29udHJhY3RFdmVudFNwZWNMYXRlc3Q6ICdDb250cmFjdEV2ZW50U3BlY1YzJyxcbiAgICBDb250cmFjdEV2ZW50UGFyYW1TcGVjTGF0ZXN0OiAnQ29udHJhY3RFdmVudFBhcmFtU3BlY1YyJyxcbiAgICBDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNMYXRlc3Q6ICdDb250cmFjdE1lc3NhZ2VQYXJhbVNwZWNWMicsXG4gICAgQ29udHJhY3RNZXNzYWdlU3BlY0xhdGVzdDogJ0NvbnRyYWN0TWVzc2FnZVNwZWNWMycsXG4gICAgQ29udHJhY3RNZXRhZGF0YUxhdGVzdDogJ0NvbnRyYWN0TWV0YWRhdGFWNSdcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5sYXlvdXQsXG4gICAgICAgIC4uLnNwZWMsXG4gICAgICAgIC4uLmxhdGVzdCxcbiAgICAgICAgQ29udHJhY3RQcm9qZWN0SW5mbzoge1xuICAgICAgICAgICAgc291cmNlOiAnQ29udHJhY3RQcm9qZWN0U291cmNlJyxcbiAgICAgICAgICAgIGNvbnRyYWN0OiAnQ29udHJhY3RQcm9qZWN0Q29udHJhY3QnXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0TWV0YWRhdGFWMDoge1xuICAgICAgICAgICAgbWV0YWRhdGFWZXJzaW9uOiAnVGV4dCcsXG4gICAgICAgICAgICB0eXBlczogJ1ZlYzxTaTBUeXBlPicsXG4gICAgICAgICAgICBzcGVjOiAnQ29udHJhY3RDb250cmFjdFNwZWNWMCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RNZXRhZGF0YVYxOiB7XG4gICAgICAgICAgICB0eXBlczogJ1ZlYzxQb3J0YWJsZVR5cGU+JyxcbiAgICAgICAgICAgIHNwZWM6ICdDb250cmFjdENvbnRyYWN0U3BlY1YxJ1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdE1ldGFkYXRhVjI6IHtcbiAgICAgICAgICAgIHR5cGVzOiAnVmVjPFBvcnRhYmxlVHlwZT4nLFxuICAgICAgICAgICAgc3BlYzogJ0NvbnRyYWN0Q29udHJhY3RTcGVjVjInXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0TWV0YWRhdGFWMzoge1xuICAgICAgICAgICAgdHlwZXM6ICdWZWM8UG9ydGFibGVUeXBlPicsXG4gICAgICAgICAgICBzcGVjOiAnQ29udHJhY3RDb250cmFjdFNwZWNWMydcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RNZXRhZGF0YVY0OiB7XG4gICAgICAgICAgICB0eXBlczogJ1ZlYzxQb3J0YWJsZVR5cGU+JyxcbiAgICAgICAgICAgIHNwZWM6ICdDb250cmFjdENvbnRyYWN0U3BlY1Y0JyxcbiAgICAgICAgICAgIHZlcnNpb246ICdUZXh0J1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdE1ldGFkYXRhVjU6IHtcbiAgICAgICAgICAgIHR5cGVzOiAnVmVjPFBvcnRhYmxlVHlwZT4nLFxuICAgICAgICAgICAgc3BlYzogJ0NvbnRyYWN0Q29udHJhY3RTcGVjVjUnLFxuICAgICAgICAgICAgdmVyc2lvbjogJ3U2NCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RNZXRhZGF0YToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ0NvbnRyYWN0TWV0YWRhdGFWMCcsXG4gICAgICAgICAgICAgICAgVjE6ICdDb250cmFjdE1ldGFkYXRhVjEnLFxuICAgICAgICAgICAgICAgIFYyOiAnQ29udHJhY3RNZXRhZGF0YVYyJyxcbiAgICAgICAgICAgICAgICBWMzogJ0NvbnRyYWN0TWV0YWRhdGFWMycsXG4gICAgICAgICAgICAgICAgVjQ6ICdDb250cmFjdE1ldGFkYXRhVjQnLFxuICAgICAgICAgICAgICAgIFY1OiAnQ29udHJhY3RNZXRhZGF0YVY1J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdFByb2plY3RWMDoge1xuICAgICAgICAgICAgbWV0YWRhdGFWZXJzaW9uOiAnVGV4dCcsXG4gICAgICAgICAgICBzb3VyY2U6ICdDb250cmFjdFByb2plY3RTb3VyY2UnLFxuICAgICAgICAgICAgY29udHJhY3Q6ICdDb250cmFjdFByb2plY3RDb250cmFjdCcsXG4gICAgICAgICAgICB0eXBlczogJ1ZlYzxTaTBUeXBlPicsXG4gICAgICAgICAgICBzcGVjOiAnQ29udHJhY3RDb250cmFjdFNwZWNWMCdcbiAgICAgICAgfSxcbiAgICAgICAgQ29udHJhY3RQcm9qZWN0OiAnKENvbnRyYWN0UHJvamVjdEluZm8sIENvbnRyYWN0TWV0YWRhdGEpJyxcbiAgICAgICAgQ29udHJhY3RQcm9qZWN0Q29udHJhY3Q6IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIGRvY3M6ICdkb2N1bWVudGF0aW9uJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgICAgIHZlcnNpb246ICdUZXh0JyxcbiAgICAgICAgICAgIGF1dGhvcnM6ICdWZWM8VGV4dD4nLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb248VGV4dD4nLFxuICAgICAgICAgICAgZG9jczogJ09wdGlvbjxUZXh0PicsXG4gICAgICAgICAgICByZXBvc2l0b3J5OiAnT3B0aW9uPFRleHQ+JyxcbiAgICAgICAgICAgIGhvbWVwYWdlOiAnT3B0aW9uPFRleHQ+JyxcbiAgICAgICAgICAgIGxpY2Vuc2U6ICdPcHRpb248VGV4dD4nXG4gICAgICAgIH0sXG4gICAgICAgIENvbnRyYWN0UHJvamVjdFNvdXJjZToge1xuICAgICAgICAgICAgX2FsaWFzOiB7XG4gICAgICAgICAgICAgICAgd2FzbUhhc2g6ICdoYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdhc21IYXNoOiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICdUZXh0JyxcbiAgICAgICAgICAgIGNvbXBpbGVyOiAnVGV4dCcsXG4gICAgICAgICAgICB3YXNtOiAnUmF3J1xuICAgICAgICB9LFxuICAgICAgICBDb250cmFjdEVudmlyb25tZW50VjQ6IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIGhhc2hUeXBlOiAnaGFzaCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBOT1RFIFRoZXNlIGFyZSBub3QgbWFya2VkIG9wdGlvbmFsIGluIHRoZSBSdXN0IGNvZGUsIGhvd2V2ZXIgc2luY2Ugd2VcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgZnJvbSBvbGRlciB2ZXJzaW9ucyB0byBuZXdlciwgd2UgbWF5IG5vdCBoYXZlIHRoZXNlIGZpZWxkcy5cbiAgICAgICAgICAgIC8vIFRoZSBPcHRpb248Li4uPiB3b3JrcyBzaW5jZSBvdXIgaW5wdXRzIGFyZSBhbHdheXMgSlNPTiwgc28gaXQgd2lsbFxuICAgICAgICAgICAgLy8gYmUgTm9uZSB3aGVuIG5vdCBzcGVjaWZpZWQuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5IHdlIGRvbid0IG1hcmsgdGhlIGZ1bGwgc3RydWN0dXJlIGFzIE9wdGlvbiwgcmF0aGVyIHdlXG4gICAgICAgICAgICAvLyBkbyBpdCBvbiBhIHBlci1maWVsZCBiYXNpcyBzaW5jZSBmaWVsZHMgbWF5IGJlIGFkZGVkIGFzIHRoZSB2ZXJzaW9uc1xuICAgICAgICAgICAgLy8gcHJvZ3Jlc3MuXG4gICAgICAgICAgICBhY2NvdW50SWQ6ICdPcHRpb248Q29udHJhY3RUeXBlU3BlYz4nLFxuICAgICAgICAgICAgYmFsYW5jZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgICAgICBibG9ja051bWJlcjogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgICAgICBoYXNoVHlwZTogJ09wdGlvbjxDb250cmFjdFR5cGVTcGVjPicsXG4gICAgICAgICAgICB0aW1lc3RhbXA6ICdPcHRpb248Q29udHJhY3RUeXBlU3BlYz4nLFxuICAgICAgICAgICAgbWF4RXZlbnRUb3BpY3M6ICdPcHRpb248dTMyPidcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBGdW5kSW5kZXg6ICd1MzInLFxuICAgICAgICBMYXN0Q29udHJpYnV0aW9uOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE5ldmVyOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgUHJlRW5kaW5nOiAndTMyJyxcbiAgICAgICAgICAgICAgICBFbmRpbmc6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRnVuZEluZm86IHtcbiAgICAgICAgICAgIGRlcG9zaXRvcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB2ZXJpZmllcjogJ09wdGlvbjxNdWx0aVNpZ25lcj4nLFxuICAgICAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgcmFpc2VkOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBlbmQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBjYXA6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGxhc3RDb250cmlidXRpb246ICdMYXN0Q29udHJpYnV0aW9uJyxcbiAgICAgICAgICAgIGZpcnN0UGVyaW9kOiAnTGVhc2VQZXJpb2QnLFxuICAgICAgICAgICAgbGFzdFBlcmlvZDogJ0xlYXNlUGVyaW9kJyxcbiAgICAgICAgICAgIHRyaWVJbmRleDogJ1RyaWVJbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgVHJpZUluZGV4OiAndTMyJ1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmNvbnN0IGRtcFF1ZXVlID0ge1xuICAgIENvbGxhdGlvbkluZm86IHtcbiAgICAgICAgdXB3YXJkTWVzc2FnZXM6ICdWZWM8VXB3YXJkTWVzc2FnZT4nLFxuICAgICAgICBob3Jpem9udGFsTWVzc2FnZXM6ICdWZWM8T3V0Ym91bmRIcm1wTWVzc2FnZT4nLFxuICAgICAgICBuZXdWYWxpZGF0aW9uQ29kZTogJ09wdGlvbjxWYWxpZGF0aW9uQ29kZT4nLFxuICAgICAgICBwcm9jZXNzZWREb3dud2FyZE1lc3NhZ2VzOiAndTMyJyxcbiAgICAgICAgaHJtcFdhdGVybWFyazogJ1JlbGF5QmxvY2tOdW1iZXInLFxuICAgICAgICBoZWFkRGF0YTogJ0hlYWREYXRhJ1xuICAgIH0sXG4gICAgQ29sbGF0aW9uSW5mb1YxOiB7XG4gICAgICAgIHVwd2FyZE1lc3NhZ2VzOiAnVmVjPFVwd2FyZE1lc3NhZ2U+JyxcbiAgICAgICAgaG9yaXpvbnRhbE1lc3NhZ2VzOiAnVmVjPE91dGJvdW5kSHJtcE1lc3NhZ2U+JyxcbiAgICAgICAgbmV3VmFsaWRhdGlvbkNvZGU6ICdPcHRpb248VmFsaWRhdGlvbkNvZGU+JyxcbiAgICAgICAgcHJvY2Vzc2VkRG93bndhcmRNZXNzYWdlczogJ3UzMicsXG4gICAgICAgIGhybXBXYXRlcm1hcms6ICdSZWxheUJsb2NrTnVtYmVyJ1xuICAgIH0sXG4gICAgQ29uZmlnRGF0YToge1xuICAgICAgICBtYXhJbmRpdmlkdWFsOiAnV2VpZ2h0J1xuICAgIH0sXG4gICAgTWVzc2FnZUlkOiAnW3U4OyAzMl0nLFxuICAgIE92ZXJ3ZWlnaHRJbmRleDogJ3U2NCcsXG4gICAgUGFnZUNvdW50ZXI6ICd1MzInLFxuICAgIFBhZ2VJbmRleERhdGE6IHtcbiAgICAgICAgYmVnaW5Vc2VkOiAnUGFnZUNvdW50ZXInLFxuICAgICAgICBlbmRVc2VkOiAnUGFnZUNvdW50ZXInLFxuICAgICAgICBvdmVyd2VpZ2h0Q291bnQ6ICdPdmVyd2VpZ2h0SW5kZXgnXG4gICAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IGRtcFF1ZXVlXG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgQXVyYVVuaW5jbHVkZWRTZWdtZW50QXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjYW5fYnVpbGRfdXBvbjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgaXQgaXMgbGVnYWwgdG8gZXh0ZW5kIHRoZSBjaGFpbicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpbmNsdWRlZEhhc2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzbG90JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU2xvdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF0sXG4gICAgQ29sbGVjdENvbGxhdGlvbkluZm86IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGNvbGxlY3RfY29sbGF0aW9uX2luZm86IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb2xsZWN0IGluZm9ybWF0aW9uIGFib3V0IGEgY29sbGF0aW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdoZWFkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdIZWFkZXInXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb2xsYXRpb25JbmZvJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0X2NvbGxhdGlvbl9pbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbGxhdGlvbi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ29sbGF0aW9uSW5mb1YxJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9lc3NlbnRpYWxzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXNzZXRDb252ZXJzaW9uIH0gZnJvbSAnLi9hc3NldENvbnZlcnNpb24vZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3NldHMgfSBmcm9tICcuL2Fzc2V0cy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGF1cmEgfSBmcm9tICcuL2F1cmEvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhdXRob3JzaGlwIH0gZnJvbSAnLi9hdXRob3JzaGlwL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYmFiZSB9IGZyb20gJy4vYmFiZS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJhbGFuY2VzIH0gZnJvbSAnLi9iYWxhbmNlcy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJlZWZ5IH0gZnJvbSAnLi9iZWVmeS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJlbmNobWFyayB9IGZyb20gJy4vYmVuY2htYXJrL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYmxvY2tidWlsZGVyIH0gZnJvbSAnLi9ibG9ja2J1aWxkZXIvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb2xsZWN0aXZlIH0gZnJvbSAnLi9jb2xsZWN0aXZlL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29uc2Vuc3VzIH0gZnJvbSAnLi9jb25zZW5zdXMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb250cmFjdHMgfSBmcm9tICcuL2NvbnRyYWN0cy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRlbW9jcmFjeSB9IGZyb20gJy4vZGVtb2NyYWN5L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGV2IH0gZnJvbSAnLi9kZXYvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkaXNjb3ZlcnkgfSBmcm9tICcuL2Rpc2NvdmVyeS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVsZWN0aW9ucyB9IGZyb20gJy4vZWxlY3Rpb25zL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5naW5lIH0gZnJvbSAnLi9lbmdpbmUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBldm0gfSBmcm9tICcuL2V2bS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV4dHJpbnNpY3MgfSBmcm9tICcuL2V4dHJpbnNpY3MvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmdW5naWJsZXMgfSBmcm9tICcuL2Z1bmdpYmxlcy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdlbmVyaWNBc3NldCB9IGZyb20gJy4vZ2VuZXJpY0Fzc2V0L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2VuZXNpc0J1aWxkZXIgfSBmcm9tICcuL2dlbmVzaXNCdWlsZGVyL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2lsdCB9IGZyb20gJy4vZ2lsdC9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdyYW5kcGEgfSBmcm9tICcuL2dyYW5kcGEvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpZGVudGl0eSB9IGZyb20gJy4vaWRlbnRpdHkvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpbU9ubGluZSB9IGZyb20gJy4vaW1PbmxpbmUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsb3R0ZXJ5IH0gZnJvbSAnLi9sb3R0ZXJ5L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbWl4bmV0IH0gZnJvbSAnLi9taXhuZXQvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtbXIgfSBmcm9tICcuL21tci9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG5mdHMgfSBmcm9tICcuL25mdHMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBub21wb29scyB9IGZyb20gJy4vbm9tcG9vbHMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvZmZlbmNlcyB9IGZyb20gJy4vb2ZmZW5jZXMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3cgfSBmcm9tICcuL3Bvdy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByb3h5IH0gZnJvbSAnLi9wcm94eS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlY292ZXJ5IH0gZnJvbSAnLi9yZWNvdmVyeS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNjaGVkdWxlciB9IGZyb20gJy4vc2NoZWR1bGVyL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2Vzc2lvbiB9IGZyb20gJy4vc2Vzc2lvbi9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNvY2lldHkgfSBmcm9tICcuL3NvY2lldHkvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGFraW5nIH0gZnJvbSAnLi9zdGFraW5nL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdGVtZW50IH0gZnJvbSAnLi9zdGF0ZW1lbnQvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdXBwb3J0IH0gZnJvbSAnLi9zdXBwb3J0L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3luY3N0YXRlIH0gZnJvbSAnLi9zeW5jc3RhdGUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzeXN0ZW0gfSBmcm9tICcuL3N5c3RlbS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyZWFzdXJ5IH0gZnJvbSAnLi90cmVhc3VyeS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHR4cGF5bWVudCB9IGZyb20gJy4vdHhwYXltZW50L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHhxdWV1ZSB9IGZyb20gJy4vdHhxdWV1ZS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuaXF1ZXMgfSBmcm9tICcuL3VuaXF1ZXMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1dGlsaXR5IH0gZnJvbSAnLi91dGlsaXR5L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmVzdGluZyB9IGZyb20gJy4vdmVzdGluZy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGF0dGVzdGF0aW9ucyB9IGZyb20gJy4vYXR0ZXN0YXRpb25zL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYnJpZGdlcyB9IGZyb20gJy4vYnJpZGdlcy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYWltcyB9IGZyb20gJy4vY2xhaW1zL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3Jvd2Rsb2FuIH0gZnJvbSAnLi9jcm93ZGxvYW4vZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjdW11bHVzIH0gZnJvbSAnLi9jdW11bHVzL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmluYWxpdHkgfSBmcm9tICcuL2ZpbmFsaXR5L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFyYWNoYWlucyB9IGZyb20gJy4vcGFyYWNoYWlucy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvbGwgfSBmcm9tICcuL3BvbGwvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwdXJjaGFzZSB9IGZyb20gJy4vcHVyY2hhc2UvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB4Y20gfSBmcm9tICcuL3hjbS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRyYWN0c0FiaSB9IGZyb20gJy4vY29udHJhY3RzQWJpL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXRoIH0gZnJvbSAnLi9ldGgvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBuaW1idXMgfSBmcm9tICcuL25pbWJ1cy9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9ybWxPcmFjbGUgfSBmcm9tICcuL29ybWxPcmFjbGUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvcm1sVG9rZW5zIH0gZnJvbSAnLi9vcm1sVG9rZW5zL2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcnBjIH0gZnJvbSAnLi9ycGMvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhdXRob3IgfSBmcm9tICcuL2F1dGhvci9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYWluIH0gZnJvbSAnLi9jaGFpbi9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoaWxkc3RhdGUgfSBmcm9tICcuL2NoaWxkc3RhdGUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvZmZjaGFpbiB9IGZyb20gJy4vb2ZmY2hhaW4vZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXltZW50IH0gZnJvbSAnLi9wYXltZW50L2RlZmluaXRpb25zLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RhdGUgfSBmcm9tICcuL3N0YXRlL2RlZmluaXRpb25zLmpzJztcbiIsImV4cG9ydCBjb25zdCBBbGxDb252aWN0aW9ucyA9IFtcbiAgICAvLyAwLjF4IHZvdGVzLCB1bmxvY2tlZC5cbiAgICAnTm9uZScsXG4gICAgLy8gMXggdm90ZXMsIGxvY2tlZCBmb3IgYW4gZW5hY3RtZW50IHBlcmlvZCBmb2xsb3dpbmcgYSBzdWNjZXNzZnVsIHZvdGUuXG4gICAgJ0xvY2tlZDF4JyxcbiAgICAvLyAyeCB2b3RlcywgbG9ja2VkIGZvciAyeCBlbmFjdG1lbnQgcGVyaW9kcyBmb2xsb3dpbmcgYSBzdWNjZXNzZnVsIHZvdGUuXG4gICAgJ0xvY2tlZDJ4JyxcbiAgICAvLyAzeCB2b3RlcywgbG9ja2VkIGZvciA0eC4uLlxuICAgICdMb2NrZWQzeCcsXG4gICAgLy8gNHggdm90ZXMsIGxvY2tlZCBmb3IgOHguLi5cbiAgICAnTG9ja2VkNHgnLFxuICAgIC8vIDV4IHZvdGVzLCBsb2NrZWQgZm9yIDE2eC4uLlxuICAgICdMb2NrZWQ1eCcsXG4gICAgLy8gNnggdm90ZXMsIGxvY2tlZCBmb3IgMzJ4Li4uXG4gICAgJ0xvY2tlZDZ4J1xuXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjY291bnRWb3RlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFN0YW5kYXJkOiAnQWNjb3VudFZvdGVTdGFuZGFyZCcsXG4gICAgICAgICAgICAgICAgU3BsaXQ6ICdBY2NvdW50Vm90ZVNwbGl0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBBY2NvdW50Vm90ZVNwbGl0OiB7XG4gICAgICAgICAgICBheWU6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIG5heTogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIEFjY291bnRWb3RlU3RhbmRhcmQ6IHtcbiAgICAgICAgICAgIHZvdGU6ICdWb3RlJyxcbiAgICAgICAgICAgIGJhbGFuY2U6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBDb252aWN0aW9uOiB7XG4gICAgICAgICAgICBfZW51bTogQWxsQ29udmljdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgRGVsZWdhdGlvbnM6IHtcbiAgICAgICAgICAgIHZvdGVzOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBjYXBpdGFsOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgUHJlaW1hZ2VTdGF0dXM6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgTWlzc2luZzogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgICAgICBBdmFpbGFibGU6ICdQcmVpbWFnZVN0YXR1c0F2YWlsYWJsZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUHJlaW1hZ2VTdGF0dXNBdmFpbGFibGU6IHtcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcycsXG4gICAgICAgICAgICBwcm92aWRlcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBzaW5jZTogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGV4cGlyeTogJ09wdGlvbjxCbG9ja051bWJlcj4nXG4gICAgICAgIH0sXG4gICAgICAgIFByaW9yTG9jazogJyhCbG9ja051bWJlciwgQmFsYW5jZSknLFxuICAgICAgICBQcm9wSW5kZXg6ICd1MzInLFxuICAgICAgICBQcm9wb3NhbDogJ0NhbGwnLFxuICAgICAgICBQcm94eVN0YXRlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE9wZW46ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgICAgIEFjdGl2ZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUmVmZXJlbmR1bUluZGV4OiAndTMyJyxcbiAgICAgICAgUmVmZXJlbmR1bUluZm9UbzIzOToge1xuICAgICAgICAgICAgZW5kOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgcHJvcG9zYWxIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6ICdWb3RlVGhyZXNob2xkJyxcbiAgICAgICAgICAgIGRlbGF5OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIFJlZmVyZW5kdW1JbmZvOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE9uZ29pbmc6ICdSZWZlcmVuZHVtU3RhdHVzJyxcbiAgICAgICAgICAgICAgICBGaW5pc2hlZDogJ1JlZmVyZW5kdW1JbmZvRmluaXNoZWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFJlZmVyZW5kdW1JbmZvRmluaXNoZWQ6IHtcbiAgICAgICAgICAgIGFwcHJvdmVkOiAnYm9vbCcsXG4gICAgICAgICAgICBlbmQ6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgUmVmZXJlbmR1bVN0YXR1czoge1xuICAgICAgICAgICAgZW5kOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgcHJvcG9zYWxIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6ICdWb3RlVGhyZXNob2xkJyxcbiAgICAgICAgICAgIGRlbGF5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgdGFsbHk6ICdUYWxseSdcbiAgICAgICAgfSxcbiAgICAgICAgVGFsbHk6IHtcbiAgICAgICAgICAgIGF5ZXM6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIG5heXM6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHR1cm5vdXQ6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBWb3Rpbmc6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgRGlyZWN0OiAnVm90aW5nRGlyZWN0JyxcbiAgICAgICAgICAgICAgICBEZWxlZ2F0aW5nOiAnVm90aW5nRGVsZWdhdGluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgVm90aW5nRGlyZWN0OiB7XG4gICAgICAgICAgICB2b3RlczogJ1ZlYzxWb3RpbmdEaXJlY3RWb3RlPicsXG4gICAgICAgICAgICBkZWxlZ2F0aW9uczogJ0RlbGVnYXRpb25zJyxcbiAgICAgICAgICAgIHByaW9yOiAnUHJpb3JMb2NrJ1xuICAgICAgICB9LFxuICAgICAgICBWb3RpbmdEaXJlY3RWb3RlOiAnKFJlZmVyZW5kdW1JbmRleCwgQWNjb3VudFZvdGUpJyxcbiAgICAgICAgVm90aW5nRGVsZWdhdGluZzoge1xuICAgICAgICAgICAgYmFsYW5jZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgdGFyZ2V0OiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGNvbnZpY3Rpb246ICdDb252aWN0aW9uJyxcbiAgICAgICAgICAgIGRlbGVnYXRpb25zOiAnRGVsZWdhdGlvbnMnLFxuICAgICAgICAgICAgcHJpb3I6ICdQcmlvckxvY2snXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICBCbG9ja1N0YXRzOiB7XG4gICAgICAgICAgICB3aXRuZXNzTGVuOiAndTY0JyxcbiAgICAgICAgICAgIHdpdG5lc3NDb21wYWN0TGVuOiAndTY0JyxcbiAgICAgICAgICAgIGJsb2NrTGVuOiAndTY0JyxcbiAgICAgICAgICAgIGJsb2NrTnVtRXh0cmluc2ljczogJ3U2NCdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGdldEJsb2NrU3RhdHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZWV4ZWN1dGUgdGhlIHNwZWNpZmllZCBgYmxvY2tfaGFzaGAgYW5kIGdhdGhlciBzdGF0aXN0aWNzIHdoaWxlIGRvaW5nIHNvJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxCbG9ja1N0YXRzPidcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7fVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIEF1dGhvcml0eURpc2NvdmVyeUFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZSBhdXRob3JpdHkgaWRlbnRpZmllcnMgb2YgdGhlIGN1cnJlbnQgYW5kIG5leHQgYXV0aG9yaXR5IHNldC4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEF1dGhvcml0eUlkPidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFwcHJvdmFsRmxhZzogJ3UzMicsXG4gICAgICAgIERlZnVuY3RWb3Rlcjoge1xuICAgICAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHZvdGVDb3VudDogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBjYW5kaWRhdGVDb3VudDogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgfSxcbiAgICAgICAgUmVub3VuY2luZzoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBNZW1iZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBSdW5uZXJVcDogJ051bGwnLFxuICAgICAgICAgICAgICAgIENhbmRpZGF0ZTogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2V0SW5kZXg6ICd1MzInLFxuICAgICAgICBWb3RlOiAnR2VuZXJpY1ZvdGUnLFxuICAgICAgICBWb3RlSW5kZXg6ICd1MzInLFxuICAgICAgICBWb3RlckluZm86IHtcbiAgICAgICAgICAgIGxhc3RBY3RpdmU6ICdWb3RlSW5kZXgnLFxuICAgICAgICAgICAgbGFzdFdpbjogJ1ZvdGVJbmRleCcsXG4gICAgICAgICAgICBwb3Q6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHN0YWtlOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgVm90ZVRocmVzaG9sZDoge1xuICAgICAgICAgICAgX2VudW06IFtcbiAgICAgICAgICAgICAgICAnU3VwZXIgTWFqb3JpdHkgQXBwcm92ZScsXG4gICAgICAgICAgICAgICAgJ1N1cGVyIE1ham9yaXR5IEFnYWluc3QnLFxuICAgICAgICAgICAgICAgICdTaW1wbGUgTWFqb3JpdHknXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICBDcmVhdGVkQmxvY2s6IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIGJsb2NrSGFzaDogJ2hhc2gnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmxvY2tIYXNoOiAnQmxvY2tIYXNoJyxcbiAgICAgICAgICAgIGF1eDogJ0ltcG9ydGVkQXV4J1xuICAgICAgICB9LFxuICAgICAgICBJbXBvcnRlZEF1eDoge1xuICAgICAgICAgICAgaGVhZGVyT25seTogJ2Jvb2wnLFxuICAgICAgICAgICAgY2xlYXJKdXN0aWZpY2F0aW9uUmVxdWVzdHM6ICdib29sJyxcbiAgICAgICAgICAgIG5lZWRzSnVzdGlmaWNhdGlvbjogJ2Jvb2wnLFxuICAgICAgICAgICAgYmFkSnVzdGlmaWNhdGlvbjogJ2Jvb2wnLFxuICAgICAgICAgICAgbmVlZHNGaW5hbGl0eVByb29mOiAnYm9vbCcsXG4gICAgICAgICAgICBpc05ld0Jlc3Q6ICdib29sJ1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBycGMgPSB7XG4gICAgY3JlYXRlQmxvY2s6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnN0cnVjdHMgdGhlIG1hbnVhbC1zZWFsIGF1dGhvcnNoaXAgdGFzayB0byBjcmVhdGUgYSBuZXcgYmxvY2snLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY3JlYXRlRW1wdHknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmluYWxpemUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdwYXJlbnRIYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQ3JlYXRlZEJsb2NrJ1xuICAgIH0sXG4gICAgZmluYWxpemVCbG9jazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0luc3RydWN0cyB0aGUgbWFudWFsLXNlYWwgYXV0aG9yc2hpcCB0YXNrIHRvIGZpbmFsaXplIGEgYmxvY2snLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnanVzdGlmaWNhdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0p1c3RpZmljYXRpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIG1ldGFkYXRhIH0gZnJvbSAnLi9tZXRhZGF0YS9kZWZpbml0aW9ucy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUvZGVmaW5pdGlvbnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzY2FsZUluZm8gfSBmcm9tICcuL3NjYWxlSW5mby9kZWZpbml0aW9ucy5qcyc7XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmNvbnN0IFYwID0ge1xuICAgIEJsb2NrVjA6IHtcbiAgICAgICAgaGVhZGVyOiAnRXRoSGVhZGVyJyxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiAnVmVjPFRyYW5zYWN0aW9uVjA+JyxcbiAgICAgICAgb21tZXJzOiAnVmVjPEV0aEhlYWRlcj4nXG4gICAgfSxcbiAgICBMZWdhY3lUcmFuc2FjdGlvbjoge1xuICAgICAgICBub25jZTogJ1UyNTYnLFxuICAgICAgICBnYXNQcmljZTogJ1UyNTYnLFxuICAgICAgICBnYXNMaW1pdDogJ1UyNTYnLFxuICAgICAgICBhY3Rpb246ICdFdGhUcmFuc2FjdGlvbkFjdGlvbicsXG4gICAgICAgIHZhbHVlOiAnVTI1NicsXG4gICAgICAgIGlucHV0OiAnQnl0ZXMnLFxuICAgICAgICBzaWduYXR1cmU6ICdFdGhUcmFuc2FjdGlvblNpZ25hdHVyZSdcbiAgICB9LFxuICAgIFRyYW5zYWN0aW9uVjA6ICdMZWdhY3lUcmFuc2FjdGlvbidcbn07XG5jb25zdCBWMSA9IHtcbiAgICBCbG9ja1YxOiB7XG4gICAgICAgIGhlYWRlcjogJ0V0aEhlYWRlcicsXG4gICAgICAgIHRyYW5zYWN0aW9uczogJ1ZlYzxUcmFuc2FjdGlvblYxPicsXG4gICAgICAgIG9tbWVyczogJ1ZlYzxFdGhIZWFkZXI+J1xuICAgIH0sXG4gICAgRUlQMjkzMFRyYW5zYWN0aW9uOiB7XG4gICAgICAgIGNoYWluSWQ6ICd1NjQnLFxuICAgICAgICBub25jZTogJ1UyNTYnLFxuICAgICAgICBnYXNQcmljZTogJ1UyNTYnLFxuICAgICAgICBnYXNMaW1pdDogJ1UyNTYnLFxuICAgICAgICBhY3Rpb246ICdFdGhUcmFuc2FjdGlvbkFjdGlvbicsXG4gICAgICAgIHZhbHVlOiAnVTI1NicsXG4gICAgICAgIGlucHV0OiAnQnl0ZXMnLFxuICAgICAgICBhY2Nlc3NMaXN0OiAnRXRoQWNjZXNzTGlzdCcsXG4gICAgICAgIG9kZFlQYXJpdHk6ICdib29sJyxcbiAgICAgICAgcjogJ0gyNTYnLFxuICAgICAgICBzOiAnSDI1NidcbiAgICB9LFxuICAgIFRyYW5zYWN0aW9uVjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIExlZ2FjeTogJ0xlZ2FjeVRyYW5zYWN0aW9uJyxcbiAgICAgICAgICAgIEVJUDI5MzA6ICdFSVAyOTMwVHJhbnNhY3Rpb24nXG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3QgVjIgPSB7XG4gICAgQmxvY2tWMjoge1xuICAgICAgICBoZWFkZXI6ICdFdGhIZWFkZXInLFxuICAgICAgICB0cmFuc2FjdGlvbnM6ICdWZWM8VHJhbnNhY3Rpb25WMj4nLFxuICAgICAgICBvbW1lcnM6ICdWZWM8RXRoSGVhZGVyPidcbiAgICB9LFxuICAgIEVJUDE1NTlUcmFuc2FjdGlvbjoge1xuICAgICAgICBjaGFpbklkOiAndTY0JyxcbiAgICAgICAgbm9uY2U6ICdVMjU2JyxcbiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICdVMjU2JyxcbiAgICAgICAgbWF4RmVlUGVyR2FzOiAnVTI1NicsXG4gICAgICAgIGdhc0xpbWl0OiAnVTI1NicsXG4gICAgICAgIGFjdGlvbjogJ0V0aFRyYW5zYWN0aW9uQWN0aW9uJyxcbiAgICAgICAgdmFsdWU6ICdVMjU2JyxcbiAgICAgICAgaW5wdXQ6ICdCeXRlcycsXG4gICAgICAgIGFjY2Vzc0xpc3Q6ICdFdGhBY2Nlc3NMaXN0JyxcbiAgICAgICAgb2RkWVBhcml0eTogJ2Jvb2wnLFxuICAgICAgICByOiAnSDI1NicsXG4gICAgICAgIHM6ICdIMjU2J1xuICAgIH0sXG4gICAgVHJhbnNhY3Rpb25WMjoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgTGVnYWN5OiAnTGVnYWN5VHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgRUlQMjkzMDogJ0VJUDI5MzBUcmFuc2FjdGlvbicsXG4gICAgICAgICAgICBFSVAxNTU5OiAnRUlQMTU1OVRyYW5zYWN0aW9uJ1xuICAgICAgICB9XG4gICAgfVxufTtcbmNvbnN0IHR5cGVzID0ge1xuICAgIC4uLlYwLFxuICAgIC4uLlYxLFxuICAgIC4uLlYyLFxuICAgIEV0aGVyZXVtQWNjb3VudElkOiAnR2VuZXJpY0V0aGVyZXVtQWNjb3VudElkJyxcbiAgICBFdGhlcmV1bUFkZHJlc3M6ICdHZW5lcmljRXRoZXJldW1BY2NvdW50SWQnLFxuICAgIEV0aGVyZXVtTG9va3VwU291cmNlOiAnR2VuZXJpY0V0aGVyZXVtTG9va3VwU291cmNlJyxcbiAgICBFdGhlcmV1bVNpZ25hdHVyZTogJ1t1ODsgNjVdJyxcbiAgICBFdGhBY2Nlc3NMaXN0SXRlbToge1xuICAgICAgICBhZGRyZXNzOiAnRXRoQWRkcmVzcycsXG4gICAgICAgIHNsb3RzOiAnVmVjPEgyNTY+J1xuICAgIH0sXG4gICAgRXRoQWNjZXNzTGlzdDogJ1ZlYzxFdGhBY2Nlc3NMaXN0SXRlbT4nLFxuICAgIEV0aEFjY291bnQ6IHtcbiAgICAgICAgYWRkcmVzczogJ0V0aEFkZHJlc3MnLFxuICAgICAgICBiYWxhbmNlOiAnVTI1NicsXG4gICAgICAgIG5vbmNlOiAnVTI1NicsXG4gICAgICAgIGNvZGVIYXNoOiAnSDI1NicsXG4gICAgICAgIHN0b3JhZ2VIYXNoOiAnSDI1NicsXG4gICAgICAgIGFjY291bnRQcm9vZjogJ1ZlYzxCeXRlcz4nLFxuICAgICAgICBzdG9yYWdlUHJvb2Y6ICdWZWM8RXRoU3RvcmFnZVByb29mPidcbiAgICB9LFxuICAgIEV0aEFkZHJlc3M6ICdIMTYwJyxcbiAgICBFdGhCbG9jazoge1xuICAgICAgICBoZWFkZXI6ICdFdGhIZWFkZXInLFxuICAgICAgICB0cmFuc2FjdGlvbnM6ICdWZWM8RXRoVHJhbnNhY3Rpb24+JyxcbiAgICAgICAgb21tZXJzOiAnVmVjPEV0aEhlYWRlcj4nXG4gICAgfSxcbiAgICBFdGhIZWFkZXI6IHtcbiAgICAgICAgcGFyZW50SGFzaDogJ0gyNTYnLFxuICAgICAgICBvbW1lcnNIYXNoOiAnSDI1NicsXG4gICAgICAgIGJlbmVmaWNpYXJ5OiAnRXRoQWRkcmVzcycsXG4gICAgICAgIHN0YXRlUm9vdDogJ0gyNTYnLFxuICAgICAgICB0cmFuc2FjdGlvbnNSb290OiAnSDI1NicsXG4gICAgICAgIHJlY2VpcHRzUm9vdDogJ0gyNTYnLFxuICAgICAgICBsb2dzQmxvb206ICdFdGhCbG9vbScsXG4gICAgICAgIGRpZmZpY3VsdHk6ICdVMjU2JyxcbiAgICAgICAgbnVtYmVyOiAnVTI1NicsXG4gICAgICAgIGdhc0xpbWl0OiAnVTI1NicsXG4gICAgICAgIGdhc1VzZWQ6ICdVMjU2JyxcbiAgICAgICAgdGltZXN0YW1wOiAndTY0JyxcbiAgICAgICAgZXh0cmFEYXRhOiAnQnl0ZXMnLFxuICAgICAgICBtaXhNYXNoOiAnSDI1NicsXG4gICAgICAgIG5vbmNlOiAnSDY0J1xuICAgIH0sXG4gICAgRXRoUmljaEJsb2NrOiB7XG4gICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgYmxvY2tIYXNoOiAnaGFzaCcsXG4gICAgICAgICAgICBibG9ja1NpemU6ICdzaXplJ1xuICAgICAgICB9LFxuICAgICAgICBibG9ja0hhc2g6ICdPcHRpb248SDI1Nj4nLFxuICAgICAgICBwYXJlbnRIYXNoOiAnSDI1NicsXG4gICAgICAgIHNoYTNVbmNsZXM6ICdIMjU2JyxcbiAgICAgICAgYXV0aG9yOiAnRXRoQWRkcmVzcycsXG4gICAgICAgIG1pbmVyOiAnRXRoQWRkcmVzcycsXG4gICAgICAgIHN0YXRlUm9vdDogJ0gyNTYnLFxuICAgICAgICB0cmFuc2FjdGlvbnNSb290OiAnSDI1NicsXG4gICAgICAgIHJlY2VpcHRzUm9vdDogJ0gyNTYnLFxuICAgICAgICBudW1iZXI6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICBnYXNVc2VkOiAnVTI1NicsXG4gICAgICAgIGdhc0xpbWl0OiAnVTI1NicsXG4gICAgICAgIGV4dHJhRGF0YTogJ0J5dGVzJyxcbiAgICAgICAgbG9nc0Jsb29tOiAnRXRoQmxvb20nLFxuICAgICAgICB0aW1lc3RhbXA6ICdVMjU2JyxcbiAgICAgICAgZGlmZmljdWx0eTogJ1UyNTYnLFxuICAgICAgICB0b3RhbERpZmZpY3VsdHk6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICBzZWFsRmllbGRzOiAnVmVjPEJ5dGVzPicsXG4gICAgICAgIHVuY2xlczogJ1ZlYzxIMjU2PicsXG4gICAgICAgIHRyYW5zYWN0aW9uczogJ1ZlYzxFdGhUcmFuc2FjdGlvbj4nLFxuICAgICAgICBibG9ja1NpemU6ICdPcHRpb248VTI1Nj4nXG4gICAgfSxcbiAgICBFdGhCbG9vbTogJ0gyMDQ4JyxcbiAgICBFdGhDYWxsUmVxdWVzdDoge1xuICAgICAgICBmcm9tOiAnT3B0aW9uPEV0aEFkZHJlc3M+JyxcbiAgICAgICAgdG86ICdPcHRpb248RXRoQWRkcmVzcz4nLFxuICAgICAgICBnYXNQcmljZTogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGdhczogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIHZhbHVlOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgZGF0YTogJ09wdGlvbjxCeXRlcz4nLFxuICAgICAgICBub25jZTogJ09wdGlvbjxVMjU2PidcbiAgICB9LFxuICAgIEV0aEZlZUhpc3Rvcnk6IHtcbiAgICAgICAgb2xkZXN0QmxvY2s6ICdVMjU2JyxcbiAgICAgICAgYmFzZUZlZVBlckdhczogJ1ZlYzxVMjU2PicsXG4gICAgICAgIGdhc1VzZWRSYXRpbzogJ1ZlYzxmNjQ+JyxcbiAgICAgICAgcmV3YXJkOiAnT3B0aW9uPFZlYzxWZWM8VTI1Nj4+PidcbiAgICB9LFxuICAgIEV0aEZpbHRlcjoge1xuICAgICAgICBmcm9tQmxvY2s6ICdPcHRpb248QmxvY2tOdW1iZXI+JyxcbiAgICAgICAgdG9CbG9jazogJ09wdGlvbjxCbG9ja051bWJlcj4nLFxuICAgICAgICBibG9ja0hhc2g6ICdPcHRpb248SDI1Nj4nLFxuICAgICAgICBhZGRyZXNzOiAnT3B0aW9uPEV0aEZpbHRlckFkZHJlc3M+JyxcbiAgICAgICAgdG9waWNzOiAnT3B0aW9uPEV0aEZpbHRlclRvcGljPidcbiAgICB9LFxuICAgIEV0aEZpbHRlckFkZHJlc3M6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFNpbmdsZTogJ0V0aEFkZHJlc3MnLFxuICAgICAgICAgICAgTXVsdGlwbGU6ICdWZWM8RXRoQWRkcmVzcz4nLFxuICAgICAgICAgICAgTnVsbDogJ051bGwnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEV0aEZpbHRlckNoYW5nZXM6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIExvZ3M6ICdWZWM8RXRoTG9nPicsXG4gICAgICAgICAgICBIYXNoZXM6ICdWZWM8SDI1Nj4nLFxuICAgICAgICAgICAgRW1wdHk6ICdOdWxsJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFdGhGaWx0ZXJUb3BpYzoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgU2luZ2xlOiAnRXRoRmlsdGVyVG9waWNJbm5lcicsXG4gICAgICAgICAgICBNdWx0aXBsZTogJ1ZlYzxFdGhGaWx0ZXJUb3BpY0lubmVyPicsXG4gICAgICAgICAgICBOdWxsOiAnTnVsbCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRXRoRmlsdGVyVG9waWNFbnRyeTogJ09wdGlvbjxIMjU2PicsXG4gICAgRXRoRmlsdGVyVG9waWNJbm5lcjoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgU2luZ2xlOiAnRXRoRmlsdGVyVG9waWNFbnRyeScsXG4gICAgICAgICAgICBNdWx0aXBsZTogJ1ZlYzxFdGhGaWx0ZXJUb3BpY0VudHJ5PicsXG4gICAgICAgICAgICBOdWxsOiAnTnVsbCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRXRoUmljaEhlYWRlcjoge1xuICAgICAgICBfYWxpYXM6IHtcbiAgICAgICAgICAgIGJsb2NrSGFzaDogJ2hhc2gnLFxuICAgICAgICAgICAgYmxvY2tTaXplOiAnc2l6ZSdcbiAgICAgICAgfSxcbiAgICAgICAgYmxvY2tIYXNoOiAnT3B0aW9uPEgyNTY+JyxcbiAgICAgICAgcGFyZW50SGFzaDogJ0gyNTYnLFxuICAgICAgICBzaGEzVW5jbGVzOiAnSDI1NicsXG4gICAgICAgIGF1dGhvcjogJ0V0aEFkZHJlc3MnLFxuICAgICAgICBtaW5lcjogJ0V0aEFkZHJlc3MnLFxuICAgICAgICBzdGF0ZVJvb3Q6ICdIMjU2JyxcbiAgICAgICAgdHJhbnNhY3Rpb25zUm9vdDogJ0gyNTYnLFxuICAgICAgICByZWNlaXB0c1Jvb3Q6ICdIMjU2JyxcbiAgICAgICAgbnVtYmVyOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgZ2FzVXNlZDogJ1UyNTYnLFxuICAgICAgICBnYXNMaW1pdDogJ1UyNTYnLFxuICAgICAgICBleHRyYURhdGE6ICdCeXRlcycsXG4gICAgICAgIGxvZ3NCbG9vbTogJ0V0aEJsb29tJyxcbiAgICAgICAgdGltZXN0YW1wOiAnVTI1NicsXG4gICAgICAgIGRpZmZpY3VsdHk6ICdVMjU2JyxcbiAgICAgICAgc2VhbEZpZWxkczogJ1ZlYzxCeXRlcz4nLFxuICAgICAgICBibG9ja1NpemU6ICdPcHRpb248VTI1Nj4nXG4gICAgfSxcbiAgICBFdGhMb2c6IHtcbiAgICAgICAgYWRkcmVzczogJ0V0aEFkZHJlc3MnLFxuICAgICAgICB0b3BpY3M6ICdWZWM8SDI1Nj4nLFxuICAgICAgICBkYXRhOiAnQnl0ZXMnLFxuICAgICAgICBibG9ja0hhc2g6ICdPcHRpb248SDI1Nj4nLFxuICAgICAgICBibG9ja051bWJlcjogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIHRyYW5zYWN0aW9uSGFzaDogJ09wdGlvbjxIMjU2PicsXG4gICAgICAgIHRyYW5zYWN0aW9uSW5kZXg6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICBsb2dJbmRleDogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIHRyYW5zYWN0aW9uTG9nSW5kZXg6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICByZW1vdmVkOiAnYm9vbCdcbiAgICB9LFxuICAgIEV0aFJlY2VpcHQ6IHtcbiAgICAgICAgdHJhbnNhY3Rpb25IYXNoOiAnT3B0aW9uPEgyNTY+JyxcbiAgICAgICAgdHJhbnNhY3Rpb25JbmRleDogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGJsb2NrSGFzaDogJ09wdGlvbjxIMjU2PicsXG4gICAgICAgIGZyb206ICdPcHRpb248RXRoQWRkcmVzcz4nLFxuICAgICAgICB0bzogJ09wdGlvbjxFdGhBZGRyZXNzPicsXG4gICAgICAgIGJsb2NrTnVtYmVyOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgY3VtdWxhdGl2ZUdhc1VzZWQ6ICdVMjU2JyxcbiAgICAgICAgZ2FzVXNlZDogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJ09wdGlvbjxFdGhBZGRyZXNzPicsXG4gICAgICAgIGxvZ3M6ICdWZWM8RXRoTG9nPicsXG4gICAgICAgIHJvb3Q6ICdPcHRpb248SDI1Nj4nLFxuICAgICAgICBsb2dzQmxvb206ICdFdGhCbG9vbScsXG4gICAgICAgIHN0YXR1c0NvZGU6ICdPcHRpb248VTY0PidcbiAgICB9LFxuICAgIC8vIG5vdCBjb252aW5jZWQsIGhvd2V2ZXIgdGhlIG9yaWdpbmFsIGNvbW1pdCBtYXRjaGVzLCBzby4uLiAobWF5YmUgVjMgaXMgaW5jb3JyZWN0PylcbiAgICBFdGhSZWNlaXB0VjA6ICdFdGhSZWNlaXB0JyxcbiAgICBFdGhSZWNlaXB0VjM6ICdFdGhSZWNlaXB0JyxcbiAgICBFdGhTdG9yYWdlUHJvb2Y6IHtcbiAgICAgICAga2V5OiAnVTI1NicsXG4gICAgICAgIHZhbHVlOiAnVTI1NicsXG4gICAgICAgIHByb29mOiAnVmVjPEJ5dGVzPidcbiAgICB9LFxuICAgIEV0aFN1YktpbmQ6IHtcbiAgICAgICAgX2VudW06IFsnbmV3SGVhZHMnLCAnbG9ncycsICduZXdQZW5kaW5nVHJhbnNhY3Rpb25zJywgJ3N5bmNpbmcnXVxuICAgIH0sXG4gICAgRXRoU3ViUGFyYW1zOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBOb25lOiAnTnVsbCcsXG4gICAgICAgICAgICBMb2dzOiAnRXRoRmlsdGVyJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFdGhTdWJSZXN1bHQ6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEhlYWRlcjogJ0V0aFJpY2hIZWFkZXInLFxuICAgICAgICAgICAgTG9nOiAnRXRoTG9nJyxcbiAgICAgICAgICAgIFRyYW5zYWN0aW9uSGFzaDogJ0gyNTYnLFxuICAgICAgICAgICAgU3luY1N0YXRlOiAnRXRoU3luY1N0YXR1cydcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRXRoU3luY0luZm86IHtcbiAgICAgICAgc3RhcnRpbmdCbG9jazogJ1UyNTYnLFxuICAgICAgICBjdXJyZW50QmxvY2s6ICdVMjU2JyxcbiAgICAgICAgaGlnaGVzdEJsb2NrOiAnVTI1NicsXG4gICAgICAgIHdhcnBDaHVua3NBbW91bnQ6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICB3YXJwQ2h1bmtzUHJvY2Vzc2VkOiAnT3B0aW9uPFUyNTY+J1xuICAgIH0sXG4gICAgRXRoU3luY1N0YXR1czoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgSW5mbzogJ0V0aFN5bmNJbmZvJyxcbiAgICAgICAgICAgIE5vbmU6ICdOdWxsJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFdGhUcmFuc2FjdGlvbjoge1xuICAgICAgICBoYXNoOiAnSDI1NicsXG4gICAgICAgIG5vbmNlOiAnVTI1NicsXG4gICAgICAgIGJsb2NrSGFzaDogJ09wdGlvbjxIMjU2PicsXG4gICAgICAgIGJsb2NrTnVtYmVyOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgdHJhbnNhY3Rpb25JbmRleDogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGZyb206ICdIMTYwJyxcbiAgICAgICAgdG86ICdPcHRpb248SDE2MD4nLFxuICAgICAgICB2YWx1ZTogJ1UyNTYnLFxuICAgICAgICBnYXNQcmljZTogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIG1heEZlZVBlckdhczogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnT3B0aW9uPFUyNTY+JyxcbiAgICAgICAgZ2FzOiAnVTI1NicsXG4gICAgICAgIGlucHV0OiAnQnl0ZXMnLFxuICAgICAgICBjcmVhdGVzOiAnT3B0aW9uPEgxNjA+JyxcbiAgICAgICAgcmF3OiAnQnl0ZXMnLFxuICAgICAgICBwdWJsaWNLZXk6ICdPcHRpb248SDUxMj4nLFxuICAgICAgICBjaGFpbklkOiAnT3B0aW9uPFU2ND4nLFxuICAgICAgICBzdGFuZGFyZFY6ICdVMjU2JyxcbiAgICAgICAgdjogJ1UyNTYnLFxuICAgICAgICByOiAnVTI1NicsXG4gICAgICAgIHM6ICdVMjU2JyxcbiAgICAgICAgYWNjZXNzTGlzdDogJ09wdGlvbjxWZWM8RXRoQWNjZXNzTGlzdEl0ZW0+PicsXG4gICAgICAgIHRyYW5zYWN0aW9uVHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICB9LFxuICAgIEV0aFRyYW5zYWN0aW9uU2lnbmF0dXJlOiB7XG4gICAgICAgIHY6ICd1NjQnLFxuICAgICAgICByOiAnSDI1NicsXG4gICAgICAgIHM6ICdIMjU2J1xuICAgIH0sXG4gICAgRXRoVHJhbnNhY3Rpb25BY3Rpb246IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENhbGw6ICdIMTYwJyxcbiAgICAgICAgICAgIENyZWF0ZTogJ051bGwnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEV0aFRyYW5zYWN0aW9uQ29uZGl0aW9uOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBibG9jazogJ3U2NCcsXG4gICAgICAgICAgICB0aW1lOiAndTY0J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFdGhUcmFuc2FjdGlvblJlcXVlc3Q6IHtcbiAgICAgICAgZnJvbTogJ09wdGlvbjxFdGhBZGRyZXNzPicsXG4gICAgICAgIHRvOiAnT3B0aW9uPEV0aEFkZHJlc3M+JyxcbiAgICAgICAgZ2FzUHJpY2U6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICBnYXM6ICdPcHRpb248VTI1Nj4nLFxuICAgICAgICB2YWx1ZTogJ09wdGlvbjxVMjU2PicsXG4gICAgICAgIGRhdGE6ICdPcHRpb248Qnl0ZXM+JyxcbiAgICAgICAgbm9uY2U6ICdPcHRpb248VTI1Nj4nXG4gICAgfSxcbiAgICBFdGhUcmFuc2FjdGlvblN0YXR1czoge1xuICAgICAgICB0cmFuc2FjdGlvbkhhc2g6ICdIMjU2JyxcbiAgICAgICAgdHJhbnNhY3Rpb25JbmRleDogJ3UzMicsXG4gICAgICAgIGZyb206ICdFdGhBZGRyZXNzJyxcbiAgICAgICAgdG86ICdPcHRpb248RXRoQWRkcmVzcz4nLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICdPcHRpb248RXRoQWRkcmVzcz4nLFxuICAgICAgICBsb2dzOiAnVmVjPEV0aExvZz4nLFxuICAgICAgICBsb2dzQmxvb206ICdFdGhCbG9vbSdcbiAgICB9LFxuICAgIEV0aFdvcms6IHtcbiAgICAgICAgcG93SGFzaDogJ0gyNTYnLFxuICAgICAgICBzZWVkSGFzaDogJ0gyNTYnLFxuICAgICAgICB0YXJnZXQ6ICdIMjU2JyxcbiAgICAgICAgbnVtYmVyOiAnT3B0aW9uPHU2ND4nXG4gICAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IHsgcnBjLCBydW50aW1lLCB0eXBlcyB9O1xuIiwiY29uc3QgbmV0UnBjID0ge1xuICAgIGxpc3RlbmluZzoge1xuICAgICAgICBhbGlhc1NlY3Rpb246ICduZXQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdHJ1ZSBpZiBjbGllbnQgaXMgYWN0aXZlbHkgbGlzdGVuaW5nIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zLiBPdGhlcndpc2UgZmFsc2UuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfSxcbiAgICBwZWVyQ291bnQ6IHtcbiAgICAgICAgYWxpYXNTZWN0aW9uOiAnbmV0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIG51bWJlciBvZiBwZWVycyBjb25uZWN0ZWQgdG8gbm9kZS4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVGV4dCdcbiAgICB9LFxuICAgIHZlcnNpb246IHtcbiAgICAgICAgYWxpYXNTZWN0aW9uOiAnbmV0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHByb3RvY29sIHZlcnNpb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgfVxufTtcbmNvbnN0IHdlYjNScGMgPSB7XG4gICAgY2xpZW50VmVyc2lvbjoge1xuICAgICAgICBhbGlhc1NlY3Rpb246ICd3ZWIzJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGN1cnJlbnQgY2xpZW50IHZlcnNpb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgfSxcbiAgICBzaGEzOiB7XG4gICAgICAgIGFsaWFzU2VjdGlvbjogJ3dlYjMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgc2hhMyBvZiB0aGUgZ2l2ZW4gZGF0YScsXG4gICAgICAgIHBhcmFtczogW3sgbmFtZTogJ2RhdGEnLCB0eXBlOiAnQnl0ZXMnIH1dLFxuICAgICAgICB0eXBlOiAnSDI1NidcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICAuLi5uZXRScGMsXG4gICAgLi4ud2ViM1JwYyxcbiAgICBhY2NvdW50czoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYWNjb3VudHMgbGlzdC4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVmVjPEgxNjA+J1xuICAgIH0sXG4gICAgYmxvY2tOdW1iZXI6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBibG9ja051bWJlcicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdVMjU2J1xuICAgIH0sXG4gICAgY2FsbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0NhbGwgY29udHJhY3QsIHJldHVybmluZyB0aGUgb3V0cHV0IGRhdGEuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlcXVlc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhDYWxsUmVxdWVzdCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgIH0sXG4gICAgY2hhaW5JZDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGNoYWluIElEIHVzZWQgZm9yIHRyYW5zYWN0aW9uIHNpZ25pbmcgYXQgdGhlIGN1cnJlbnQgYmVzdCBibG9jay4gTm9uZSBpcyByZXR1cm5lZCBpZiBub3QgYXZhaWxhYmxlLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdVNjQnXG4gICAgfSxcbiAgICBjb2luYmFzZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYmxvY2sgYXV0aG9yLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgIH0sXG4gICAgZXN0aW1hdGVHYXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdFc3RpbWF0ZSBnYXMgbmVlZGVkIGZvciBleGVjdXRpb24gb2YgZ2l2ZW4gY29udHJhY3QuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3JlcXVlc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhDYWxsUmVxdWVzdCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgfSxcbiAgICBmZWVIaXN0b3J5OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBmZWUgaGlzdG9yeSBmb3IgZ2l2ZW4gYmxvY2sgY291bnQgJiByZXdhcmQgcGVyY2VudGlsZXMnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2tDb3VudCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICduZXdlc3RCbG9jaycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncmV3YXJkUGVyY2VudGlsZXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VmVjPGY2ND4+J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXRoRmVlSGlzdG9yeSdcbiAgICB9LFxuICAgIGdhc1ByaWNlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBjdXJyZW50IGdhcyBwcmljZS4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIGdldEJhbGFuY2U6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGJhbGFuY2Ugb2YgdGhlIGdpdmVuIGFjY291bnQuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIGdldEJsb2NrQnlIYXNoOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBibG9jayB3aXRoIGdpdmVuIGhhc2guJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hhc2gnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZnVsbCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248RXRoUmljaEJsb2NrPidcbiAgICB9LFxuICAgIGdldEJsb2NrQnlOdW1iZXI6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGJsb2NrIHdpdGggZ2l2ZW4gbnVtYmVyLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2Z1bGwnLCB0eXBlOiAnYm9vbCcgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPEV0aFJpY2hCbG9jaz4nXG4gICAgfSxcbiAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeUhhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGluIGEgYmxvY2sgd2l0aCBnaXZlbiBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgfSxcbiAgICBnZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeU51bWJlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgaW4gYSBibG9jayB3aXRoIGdpdmVuIGJsb2NrIG51bWJlci4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2snLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgfSxcbiAgICBnZXRDb2RlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgY29kZSBhdCBnaXZlbiBhZGRyZXNzIGF0IGdpdmVuIHRpbWUgKGJsb2NrIG51bWJlcikuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgfSxcbiAgICBnZXRGaWx0ZXJDaGFuZ2VzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBmaWx0ZXIgY2hhbmdlcyBzaW5jZSBsYXN0IHBvbGwuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2luZGV4JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVTI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V0aEZpbHRlckNoYW5nZXMnXG4gICAgfSxcbiAgICBnZXRGaWx0ZXJMb2dzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhbGwgbG9ncyBtYXRjaGluZyBnaXZlbiBmaWx0ZXIgKGluIGEgcmFuZ2UgXFwnZnJvbVxcJyAtIFxcJ3RvXFwnKS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPEV0aExvZz4nXG4gICAgfSxcbiAgICBnZXRMb2dzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBsb2dzIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBvYmplY3QuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZpbHRlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0V0aEZpbHRlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxFdGhMb2c+J1xuICAgIH0sXG4gICAgZ2V0UHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHByb29mIGZvciBhY2NvdW50IGFuZCBzdG9yYWdlLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDE2MCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3N0b3JhZ2VLZXlzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEgyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdGhBY2NvdW50J1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZUF0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBjb250ZW50IG9mIHRoZSBzdG9yYWdlIGF0IGdpdmVuIGFkZHJlc3MuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSDI1NidcbiAgICB9LFxuICAgIGdldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdHJhbnNhY3Rpb24gYXQgZ2l2ZW4gYmxvY2sgaGFzaCBhbmQgaW5kZXguJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hhc2gnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXRoVHJhbnNhY3Rpb24nXG4gICAgfSxcbiAgICBnZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdHJhbnNhY3Rpb24gYnkgZ2l2ZW4gYmxvY2sgbnVtYmVyIGFuZCBpbmRleC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdGhUcmFuc2FjdGlvbidcbiAgICB9LFxuICAgIGdldFRyYW5zYWN0aW9uQnlIYXNoOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRyYW5zYWN0aW9uIGJ5IGl0cyBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V0aFRyYW5zYWN0aW9uJ1xuICAgIH0sXG4gICAgZ2V0VHJhbnNhY3Rpb25Db3VudDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2VudCBmcm9tIGdpdmVuIGFkZHJlc3MgYXQgZ2l2ZW4gdGltZSAoYmxvY2sgbnVtYmVyKS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdVMjU2J1xuICAgIH0sXG4gICAgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0cmFuc2FjdGlvbiByZWNlaXB0IGJ5IHRyYW5zYWN0aW9uIGhhc2guJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hhc2gnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMjU2J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXRoUmVjZWlwdCdcbiAgICB9LFxuICAgIGdldFVuY2xlQnlCbG9ja0hhc2hBbmRJbmRleDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYW4gdW5jbGVzIGF0IGdpdmVuIGJsb2NrIGFuZCBpbmRleC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gyNTYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdGhSaWNoQmxvY2snXG4gICAgfSxcbiAgICBnZXRVbmNsZUJ5QmxvY2tOdW1iZXJBbmRJbmRleDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYW4gdW5jbGVzIGF0IGdpdmVuIGJsb2NrIGFuZCBpbmRleC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdGhSaWNoQmxvY2snXG4gICAgfSxcbiAgICBnZXRVbmNsZUNvdW50QnlCbG9ja0hhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jbGVzIGluIGEgYmxvY2sgd2l0aCBnaXZlbiBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgfSxcbiAgICBnZXRVbmNsZUNvdW50QnlCbG9ja051bWJlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIG51bWJlciBvZiB1bmNsZXMgaW4gYSBibG9jayB3aXRoIGdpdmVuIGJsb2NrIG51bWJlci4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdVMjU2J1xuICAgIH0sXG4gICAgZ2V0V29yazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGhhc2ggb2YgdGhlIGN1cnJlbnQgYmxvY2ssIHRoZSBzZWVkSGFzaCwgYW5kIHRoZSBib3VuZGFyeSBjb25kaXRpb24gdG8gYmUgbWV0LicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdFdGhXb3JrJ1xuICAgIH0sXG4gICAgaGFzaHJhdGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBudW1iZXIgb2YgaGFzaGVzIHBlciBzZWNvbmQgdGhhdCB0aGUgbm9kZSBpcyBtaW5pbmcgd2l0aC4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBtYXggcHJpb3JpdHkgZmVlIHBlciBnYXMnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIG1pbmluZzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdHJ1ZSBpZiBjbGllbnQgaXMgYWN0aXZlbHkgbWluaW5nIG5ldyBibG9ja3MuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfSxcbiAgICBuZXdCbG9ja0ZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgaWQgb2YgbmV3IGJsb2NrIGZpbHRlci4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIG5ld0ZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgaWQgb2YgbmV3IGZpbHRlci4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnRXRoRmlsdGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIG5ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgaWQgb2YgbmV3IGJsb2NrIGZpbHRlci4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVTI1NidcbiAgICB9LFxuICAgIHByb3RvY29sVmVyc2lvbjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgcHJvdG9jb2wgdmVyc2lvbiBlbmNvZGVkIGFzIGEgc3RyaW5nIChxdW90ZXMgYXJlIG5lY2Vzc2FyeSkuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ3U2NCdcbiAgICB9LFxuICAgIHNlbmRSYXdUcmFuc2FjdGlvbjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1NlbmRzIHNpZ25lZCB0cmFuc2FjdGlvbiwgcmV0dXJuaW5nIGl0cyBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdieXRlcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSDI1NidcbiAgICB9LFxuICAgIHNlbmRUcmFuc2FjdGlvbjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1NlbmRzIHRyYW5zYWN0aW9uOyB3aWxsIGJsb2NrIHdhaXRpbmcgZm9yIHNpZ25lciB0byByZXR1cm4gdGhlIHRyYW5zYWN0aW9uIGhhc2gnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndHgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhUcmFuc2FjdGlvblJlcXVlc3QnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdIMjU2J1xuICAgIH0sXG4gICAgc3VibWl0SGFzaHJhdGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdVc2VkIGZvciBzdWJtaXR0aW5nIG1pbmluZyBoYXNocmF0ZS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH0sXG4gICAgc3VibWl0V29yazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZWQgZm9yIHN1Ym1pdHRpbmcgYSBwcm9vZi1vZi13b3JrIHNvbHV0aW9uLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdub25jZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0g2NCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hlYWRlckhhc2gnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWl4RGlnZXN0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDI1NidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfSxcbiAgICBzdWJzY3JpYmU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJzY3JpYmUgdG8gRXRoIHN1YnNjcmlwdGlvbi4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2tpbmQnLCB0eXBlOiAnRXRoU3ViS2luZCcgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhTdWJQYXJhbXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHB1YnN1YjogW1xuICAgICAgICAgICAgJ3N1YnNjcmlwdGlvbicsXG4gICAgICAgICAgICAnc3Vic2NyaWJlJyxcbiAgICAgICAgICAgICd1bnN1YnNjcmliZSdcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ051bGwnXG4gICAgfSxcbiAgICBzeW5jaW5nOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBkYXRhIGFib3V0IHRoZSBzeW5jIHN0YXR1cyBvciBmYWxzZS4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnRXRoU3luY1N0YXR1cydcbiAgICB9LFxuICAgIHVuaW5zdGFsbEZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1VuaW5zdGFsbHMgZmlsdGVyLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH1cbn07XG4iLCJjb25zdCBldGhNZXRob2RzVjQgPSB7XG4gICAgYWNjb3VudF9iYXNpYzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgcGFsbGV0X2V2bTo6QWNjb3VudHMgYnkgYWRkcmVzcy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFdm1BY2NvdW50J1xuICAgIH0sXG4gICAgYWNjb3VudF9jb2RlX2F0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRm9yIGEgZ2l2ZW4gYWNjb3VudCBhZGRyZXNzLCByZXR1cm5zIHBhbGxldF9ldm06OkFjY291bnRDb2Rlcy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICB9LFxuICAgIGF1dGhvcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGNvbnZlcnRlZCBGaW5kQXV0aG9yOjpmaW5kX2F1dGhvciBhdXRob3JpdHkgaWQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgfSxcbiAgICBjYWxsOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhIGZyYW1lX2V0aGVyZXVtOjpjYWxsIHJlc3BvbnNlLiBJZiBgZXN0aW1hdGVgIGlzIHRydWUsJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Zyb20nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndG8nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIMTYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzx1OD4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdnYXNMaW1pdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1UyNTYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtYXhGZWVQZXJHYXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VTI1Nj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtYXhQcmlvcml0eUZlZVBlckdhcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25vbmNlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFUyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXN0aW1hdGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWNjZXNzTGlzdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxWZWM8KEgxNjAsIFZlYzxIMjU2Pik+PidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDxFdm1DYWxsSW5mbywgRGlzcGF0Y2hFcnJvcj4nXG4gICAgfSxcbiAgICBjaGFpbl9pZDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgcnVudGltZSBkZWZpbmVkIHBhbGxldF9ldm06OkNoYWluSWQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ3U2NCdcbiAgICB9LFxuICAgIGNyZWF0ZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYSBmcmFtZV9ldGhlcmV1bTo6Y2FsbCByZXNwb25zZS4gSWYgYGVzdGltYXRlYCBpcyB0cnVlLCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmcm9tJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDE2MCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGEnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8dTg+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2FzTGltaXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4RmVlUGVyR2FzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFUyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4UHJpb3JpdHlGZWVQZXJHYXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VTI1Nj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdub25jZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VzdGltYXRlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FjY2Vzc0xpc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VmVjPChIMTYwLCBWZWM8SDI1Nj4pPj4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8RXZtQ3JlYXRlSW5mbywgRGlzcGF0Y2hFcnJvcj4nXG4gICAgfSxcbiAgICBjdXJyZW50X2FsbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiBhbGwgdGhlIGN1cnJlbnQgZGF0YSBmb3IgYSBibG9jayBpbiBhIHNpbmdsZSBydW50aW1lIGNhbGwuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJyhPcHRpb248QmxvY2tWMj4sIE9wdGlvbjxWZWM8RXRoUmVjZWlwdFYzPj4sIE9wdGlvbjxWZWM8RXRoVHJhbnNhY3Rpb25TdGF0dXM+PiknXG4gICAgfSxcbiAgICBjdXJyZW50X2Jsb2NrOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBjdXJyZW50IGJsb2NrLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdCbG9ja1YyJ1xuICAgIH0sXG4gICAgY3VycmVudF9yZWNlaXB0czoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiB0aGUgY3VycmVudCByZWNlaXB0LicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdPcHRpb248VmVjPEV0aFJlY2VpcHRWMz4+J1xuICAgIH0sXG4gICAgY3VycmVudF90cmFuc2FjdGlvbl9zdGF0dXNlczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzdGF0dXMuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxWZWM8RXRoVHJhbnNhY3Rpb25TdGF0dXM+PidcbiAgICB9LFxuICAgIGVsYXN0aWNpdHk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIGVsYXN0aWNpdHkgbXVsdGlwbGllci4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPFBlcm1pbGw+J1xuICAgIH0sXG4gICAgZXh0cmluc2ljX2ZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JlY2VpdmVzIGEgYFZlYzxPcGFxdWVFeHRyaW5zaWM+YCBhbmQgZmlsdGVycyBhbGwgdGhlIGV0aGVyZXVtIHRyYW5zYWN0aW9ucy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAneHRzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEV4dHJpbnNpYz4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdWZWM8VHJhbnNhY3Rpb25WMj4nXG4gICAgfSxcbiAgICBnYXNfcHJpY2U6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIEZpeGVkR2FzUHJpY2U6Om1pbl9nYXNfcHJpY2UnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAndTI1NidcbiAgICB9LFxuICAgIHN0b3JhZ2VfYXQ6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdGb3IgYSBnaXZlbiBhY2NvdW50IGFkZHJlc3MgYW5kIGluZGV4LCByZXR1cm5zIHBhbGxldF9ldm06OkFjY291bnRTdG9yYWdlcy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3UyNTYnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdIMjU2J1xuICAgIH1cbn07XG5jb25zdCBldGhNZXRob2RzVjUgPSB7XG4gICAgY2FsbDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYSBmcmFtZV9ldGhlcmV1bTo6Y2FsbCByZXNwb25zZS4gSWYgYGVzdGltYXRlYCBpcyB0cnVlLCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmcm9tJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDE2MCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3RvJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSDE2MCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGEnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8dTg+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2FzTGltaXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVMjU2J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4RmVlUGVyR2FzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFUyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4UHJpb3JpdHlGZWVQZXJHYXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VTI1Nj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdub25jZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VzdGltYXRlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FjY2Vzc0xpc3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VmVjPChIMTYwLCBWZWM8SDI1Nj4pPj4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8RXZtQ2FsbEluZm9WMiwgRGlzcGF0Y2hFcnJvcj4nXG4gICAgfSxcbiAgICBjcmVhdGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGEgZnJhbWVfZXRoZXJldW06OmNhbGwgcmVzcG9uc2UuIElmIGBlc3RpbWF0ZWAgaXMgdHJ1ZSwnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZnJvbScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0gxNjAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdkYXRhJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU4PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVTI1NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2dhc0xpbWl0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVTI1NidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21heEZlZVBlckdhcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxVMjU2PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21heFByaW9yaXR5RmVlUGVyR2FzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFUyNTY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbm9uY2UnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VTI1Nj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlc3RpbWF0ZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhY2Nlc3NMaXN0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFZlYzwoSDE2MCwgVmVjPEgyNTY+KT4+J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVzdWx0PEV2bUNyZWF0ZUluZm9WMiwgRGlzcGF0Y2hFcnJvcj4nXG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIENvbnZlcnRUcmFuc2FjdGlvblJ1bnRpbWVBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRfdHJhbnNhY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb252ZXJ0cyBhbiBFdGhlcmV1bS1zdHlsZSB0cmFuc2FjdGlvbiB0byBFeHRyaW5zaWMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUcmFuc2FjdGlvblYyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnRXh0cmluc2ljJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH1cbiAgICBdLFxuICAgIERlYnVnUnVudGltZUFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdHJhY2VfYmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUcmFjZSBhbGwgYmxvY2sgZXh0cmluc2ljcycsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdleHRyaW5zaWNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPEV4dHJpbnNpYz4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdrbm93blRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxIMjU2PidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgRGlzcGF0Y2hFcnJvcj4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFjZV90cmFuc2FjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RyYWNlIHRyYW5zYWN0aW9uIGV4dHJpbnNpY3MnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXh0cmluc2ljcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxFeHRyaW5zaWM+J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNhY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdFdGhUcmFuc2FjdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgRGlzcGF0Y2hFcnJvcj4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgRXRoZXJldW1SdW50aW1lUlBDQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5ldGhNZXRob2RzVjRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5ldGhNZXRob2RzVjQsXG4gICAgICAgICAgICAgICAgLi4uZXRoTWV0aG9kc1Y1XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEV2bUFjY291bnQ6IHtcbiAgICAgICAgICAgIG5vbmNlOiAndTI1NicsXG4gICAgICAgICAgICBiYWxhbmNlOiAndTI1NidcbiAgICAgICAgfSxcbiAgICAgICAgRXZtQ2FsbEluZm86IHtcbiAgICAgICAgICAgIGV4aXRSZWFzb246ICdFeGl0UmVhc29uJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQnl0ZXMnLFxuICAgICAgICAgICAgdXNlZEdhczogJ1UyNTYnLFxuICAgICAgICAgICAgbG9nczogJ1ZlYzxFdm1Mb2c+J1xuICAgICAgICB9LFxuICAgICAgICBFdm1DcmVhdGVJbmZvOiB7XG4gICAgICAgICAgICBleGl0UmVhc29uOiAnRXhpdFJlYXNvbicsXG4gICAgICAgICAgICB2YWx1ZTogJ0gxNjAnLFxuICAgICAgICAgICAgdXNlZEdhczogJ1UyNTYnLFxuICAgICAgICAgICAgbG9nczogJ1ZlYzxFdm1Mb2c+J1xuICAgICAgICB9LFxuICAgICAgICBFdm1DYWxsSW5mb1YyOiB7XG4gICAgICAgICAgICBleGl0UmVhc29uOiAnRXhpdFJlYXNvbicsXG4gICAgICAgICAgICB2YWx1ZTogJ0J5dGVzJyxcbiAgICAgICAgICAgIHVzZWRHYXM6ICdVMjU2JyxcbiAgICAgICAgICAgIHdlaWdodEluZm86ICdPcHRpb248RXZtV2VpZ2h0SW5mbz4nLFxuICAgICAgICAgICAgbG9nczogJ1ZlYzxFdm1Mb2c+J1xuICAgICAgICB9LFxuICAgICAgICBFdm1DcmVhdGVJbmZvVjI6IHtcbiAgICAgICAgICAgIGV4aXRSZWFzb246ICdFeGl0UmVhc29uJyxcbiAgICAgICAgICAgIHZhbHVlOiAnSDE2MCcsXG4gICAgICAgICAgICB1c2VkR2FzOiAnVTI1NicsXG4gICAgICAgICAgICB3ZWlnaHRJbmZvOiAnT3B0aW9uPEV2bVdlaWdodEluZm8+JyxcbiAgICAgICAgICAgIGxvZ3M6ICdWZWM8RXZtTG9nPidcbiAgICAgICAgfSxcbiAgICAgICAgRXZtTG9nOiB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnSDE2MCcsXG4gICAgICAgICAgICB0b3BpY3M6ICdWZWM8SDI1Nj4nLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJ1xuICAgICAgICB9LFxuICAgICAgICBFdm1WaWNpbml0eToge1xuICAgICAgICAgICAgZ2FzUHJpY2U6ICd1MjU2JyxcbiAgICAgICAgICAgIG9yaWdpbjogJ0gxNjAnXG4gICAgICAgIH0sXG4gICAgICAgIEV2bVdlaWdodEluZm86IHtcbiAgICAgICAgICAgIHJlZlRpbWVMaW1pdDogJ09wdGlvbjx1NjQ+JyxcbiAgICAgICAgICAgIHByb29mU2l6ZUxpbWl0OiAnT3B0aW9uPHU2ND4nLFxuICAgICAgICAgICAgcmVmVGltZVVzYWdlOiAnT3B0aW9uPHU2ND4nLFxuICAgICAgICAgICAgcHJvb2ZTaXplVXNhZ2U6ICdPcHRpb248dTY0PidcbiAgICAgICAgfSxcbiAgICAgICAgRXhpdEVycm9yOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFN0YWNrVW5kZXJmbG93OiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgU3RhY2tPdmVyZmxvdzogJ051bGwnLFxuICAgICAgICAgICAgICAgIEludmFsaWRKdW1wOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgSW52YWxpZFJhbmdlOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgRGVzaWduYXRlZEludmFsaWQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDYWxsVG9vRGVlcDogJ051bGwnLFxuICAgICAgICAgICAgICAgIENyZWF0ZUNvbGxpc2lvbjogJ051bGwnLFxuICAgICAgICAgICAgICAgIENyZWF0ZUNvbnRyYWN0TGltaXQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBPdXRPZk9mZnNldDogJ051bGwnLFxuICAgICAgICAgICAgICAgIE91dE9mR2FzOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgT3V0T2ZGdW5kOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgUENVbmRlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVFbXB0eTogJ051bGwnLFxuICAgICAgICAgICAgICAgIE90aGVyOiAnVGV4dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRXhpdEZhdGFsOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE5vdFN1cHBvcnRlZDogJ051bGwnLFxuICAgICAgICAgICAgICAgIFVuaGFuZGxlZEludGVycnVwdDogJ051bGwnLFxuICAgICAgICAgICAgICAgIENhbGxFcnJvckFzRmF0YWw6ICdFeGl0RXJyb3InLFxuICAgICAgICAgICAgICAgIE90aGVyOiAnVGV4dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRXhpdFJlYXNvbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBTdWNjZWVkOiAnRXhpdFN1Y2NlZWQnLFxuICAgICAgICAgICAgICAgIEVycm9yOiAnRXhpdEVycm9yJyxcbiAgICAgICAgICAgICAgICBSZXZlcnQ6ICdFeGl0UmV2ZXJ0JyxcbiAgICAgICAgICAgICAgICBGYXRhbDogJ0V4aXRGYXRhbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRXhpdFJldmVydDoge1xuICAgICAgICAgICAgX2VudW06IFsnUmV2ZXJ0ZWQnXVxuICAgICAgICB9LFxuICAgICAgICBFeGl0U3VjY2VlZDoge1xuICAgICAgICAgICAgX2VudW06IFsnU3RvcHBlZCcsICdSZXR1cm5lZCcsICdTdWljaWRlZCddXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgRXh0cmluc2ljOiAnR2VuZXJpY0V4dHJpbnNpYycsXG4gICAgICAgIEV4dHJpbnNpY0VyYTogJ0dlbmVyaWNFeHRyaW5zaWNFcmEnLFxuICAgICAgICBFeHRyaW5zaWNQYXlsb2FkOiAnR2VuZXJpY0V4dHJpbnNpY1BheWxvYWQnLFxuICAgICAgICBFeHRyaW5zaWNTaWduYXR1cmU6ICdNdWx0aVNpZ25hdHVyZScsXG4gICAgICAgIEV4dHJpbnNpY1Y0OiAnR2VuZXJpY0V4dHJpbnNpY1Y0JyxcbiAgICAgICAgRXh0cmluc2ljUGF5bG9hZFY0OiAnR2VuZXJpY0V4dHJpbnNpY1BheWxvYWRWNCcsXG4gICAgICAgIEV4dHJpbnNpY1NpZ25hdHVyZVY0OiAnR2VuZXJpY0V4dHJpbnNpY1NpZ25hdHVyZVY0JyxcbiAgICAgICAgRXh0cmluc2ljVW5rbm93bjogJ0dlbmVyaWNFeHRyaW5zaWNVbmtub3duJyxcbiAgICAgICAgRXh0cmluc2ljUGF5bG9hZFVua25vd246ICdHZW5lcmljRXh0cmluc2ljUGF5bG9hZFVua25vd24nLFxuICAgICAgICAvLyBlcmFzXG4gICAgICAgIEVyYTogJ0V4dHJpbnNpY0VyYScsXG4gICAgICAgIEltbW9ydGFsRXJhOiAnR2VuZXJpY0ltbW9ydGFsRXJhJyxcbiAgICAgICAgTW9ydGFsRXJhOiAnR2VuZXJpY01vcnRhbEVyYScsXG4gICAgICAgIC8vIHNpZ25hdHVyZXMgJiBzaWduZXJcbiAgICAgICAgQW55U2lnbmF0dXJlOiAnSDUxMicsXG4gICAgICAgIE11bHRpU2lnbmF0dXJlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIEVkMjU1MTk6ICdFZDI1NTE5U2lnbmF0dXJlJyxcbiAgICAgICAgICAgICAgICBTcjI1NTE5OiAnU3IyNTUxOVNpZ25hdHVyZScsXG4gICAgICAgICAgICAgICAgRWNkc2E6ICdFY2RzYVNpZ25hdHVyZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2lnbmF0dXJlOiAnSDUxMicsXG4gICAgICAgIFNpZ25lclBheWxvYWQ6ICdHZW5lcmljU2lnbmVyUGF5bG9hZCcsXG4gICAgICAgIEVjZHNhU2lnbmF0dXJlOiAnW3U4OyA2NV0nLFxuICAgICAgICBFZDI1NTE5U2lnbmF0dXJlOiAnSDUxMicsXG4gICAgICAgIFNyMjU1MTlTaWduYXR1cmU6ICdINTEyJ1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHt9XG59O1xuIiwiY29uc3QgZmluYWxpdHlWMSA9IHtcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGJlc3RfZmluYWxpemVkOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgbnVtYmVyIGFuZCBoYXNoIG9mIHRoZSBiZXN0IGZpbmFsaXplZCBoZWFkZXIga25vd24gdG8gdGhlIGJyaWRnZSBtb2R1bGUuJyxcbiAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICB0eXBlOiAnKEJsb2NrTnVtYmVyLCBIYXNoKSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdmVyc2lvbjogMVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIEt1c2FtYUZpbmFsaXR5QXBpOiBbZmluYWxpdHlWMV0sXG4gICAgUG9sa2Fkb3RGaW5hbGl0eUFwaTogW2ZpbmFsaXR5VjFdLFxuICAgIFJvY29jb0ZpbmFsaXR5QXBpOiBbZmluYWxpdHlWMV0sXG4gICAgV2VzdGVuZEZpbmFsaXR5QXBpOiBbZmluYWxpdHlWMV1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgRnVuZ2libGVzQWNjZXNzRXJyb3I6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0Fzc2V0SWRDb252ZXJzaW9uRmFpbGVkJywgJ0Ftb3VudFRvQmFsYW5jZUNvbnZlcnNpb25GYWlsZWQnXVxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIEZ1bmdpYmxlc0FwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgcXVlcnlfYWNjb3VudF9iYWxhbmNlczoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGxpc3Qgb2YgYWxsIGBNdWx0aUFzc2V0YCB0aGF0IGFuIGBBY2NvdW50SWRgIGhhcycsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhY2NvdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmVzdWx0PFZlYzxYY21WM011bHRpQXNzZXQ+LCBGdW5naWJsZXNBY2Nlc3NFcnJvcj4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIHF1ZXJ5X2FjY291bnRfYmFsYW5jZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBgTXVsdGlBc3NldGAgdGhhdCBhbiBgQWNjb3VudElkYCBoYXMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Jlc3VsdDxYY21WZXJzaW9uZWRNdWx0aUFzc2V0cywgRnVuZ2libGVzQWNjZXNzRXJyb3I+J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgQXNzZXRPcHRpb25zOiB7XG4gICAgICAgICAgICBpbml0YWxJc3N1YW5jZTogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgcGVybWlzc2lvbnM6ICdQZXJtaXNzaW9uTGF0ZXN0J1xuICAgICAgICB9LFxuICAgICAgICBPd25lcjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBOb25lOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQWRkcmVzczogJ0FjY291bnRJZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUGVybWlzc2lvbnNWMToge1xuICAgICAgICAgICAgdXBkYXRlOiAnT3duZXInLFxuICAgICAgICAgICAgbWludDogJ093bmVyJyxcbiAgICAgICAgICAgIGJ1cm46ICdPd25lcidcbiAgICAgICAgfSxcbiAgICAgICAgUGVybWlzc2lvblZlcnNpb25zOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFYxOiAnUGVybWlzc2lvbnNWMSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUGVybWlzc2lvbkxhdGVzdDogJ1Blcm1pc3Npb25zVjEnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBHZW5lc2lzQnVpbGRFcnI6ICdUZXh0J1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBHZW5lc2lzQnVpbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgYnVpbGRfY29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQnVpbGQgYFJ1bnRpbWVHZW5lc2lzQ29uZmlnYCBmcm9tIGEgSlNPTiBibG9iIG5vdCB1c2luZyBhbnkgZGVmYXVsdHMgYW5kIHN0b3JlIGl0IGluIHRoZSBzdG9yYWdlLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU4PidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgR2VuZXNpc0J1aWxkRXJyPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNyZWF0ZV9kZWZhdWx0X2NvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZXMgdGhlIGRlZmF1bHQgYFJ1bnRpbWVHZW5lc2lzQ29uZmlnYCBhbmQgcmV0dXJucyBpdCBhcyBhIEpTT04gYmxvYi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU4PidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjdGl2ZUdpbHQ6IHtcbiAgICAgICAgICAgIHByb3BvcnRpb246ICdQZXJxdWludGlsbCcsXG4gICAgICAgICAgICBhbW91bnQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHdobzogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBleHBpcnk6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQWN0aXZlR2lsdHNUb3RhbDoge1xuICAgICAgICAgICAgZnJvemVuOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBwcm9wb3J0aW9uOiAnUGVycXVpbnRpbGwnLFxuICAgICAgICAgICAgaW5kZXg6ICdBY3RpdmVJbmRleCcsXG4gICAgICAgICAgICB0YXJnZXQ6ICdQZXJxdWludGlsbCdcbiAgICAgICAgfSxcbiAgICAgICAgQWN0aXZlSW5kZXg6ICd1MzInLFxuICAgICAgICBHaWx0QmlkOiB7XG4gICAgICAgICAgICBhbW91bnQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHdobzogJ0FjY291bnRJZCdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBBdXRob3JpdHlJbmRleDogJ3U2NCcsXG4gICAgICAgIEF1dGhvcml0eUxpc3Q6ICdWZWM8TmV4dEF1dGhvcml0eT4nLFxuICAgICAgICBBdXRob3JpdHlTZXQ6IHtcbiAgICAgICAgICAgIGN1cnJlbnRBdXRob3JpdGllczogJ0F1dGhvcml0eUxpc3QnLFxuICAgICAgICAgICAgc2V0SWQ6ICd1NjQnLFxuICAgICAgICAgICAgcGVuZGluZ1N0YW5kYXJkQ2hhbmdlczogJ0ZvcmtUcmVlUGVuZGluZ0NoYW5nZScsXG4gICAgICAgICAgICBwZW5kaW5nRm9yY2VkQ2hhbmdlczogJ1ZlYzxQZW5kaW5nQ2hhbmdlPicsXG4gICAgICAgICAgICBhdXRob3JpdHlTZXRDaGFuZ2VzOiAnQXV0aG9yaXR5U2V0Q2hhbmdlcydcbiAgICAgICAgfSxcbiAgICAgICAgRm9ya1RyZWVQZW5kaW5nQ2hhbmdlOiB7XG4gICAgICAgICAgICByb290czogJ1ZlYzxGb3JrVHJlZVBlbmRpbmdDaGFuZ2VOb2RlPicsXG4gICAgICAgICAgICBiZXN0RmluYWxpemVkTnVtYmVyOiAnT3B0aW9uPEJsb2NrTnVtYmVyPidcbiAgICAgICAgfSxcbiAgICAgICAgRm9ya1RyZWVQZW5kaW5nQ2hhbmdlTm9kZToge1xuICAgICAgICAgICAgaGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICBudW1iZXI6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBkYXRhOiAnUGVuZGluZ0NoYW5nZScsIC8vIGFjdHVhbCBkYXRhLCBoZXJlIFBlbmRpbmdDaGFuZ2VcbiAgICAgICAgICAgIGNoaWxkcmVuOiAnVmVjPEZvcmtUcmVlUGVuZGluZ0NoYW5nZU5vZGU+J1xuICAgICAgICB9LFxuICAgICAgICBBdXRob3JpdHlTZXRDaGFuZ2U6ICcoVTY0LCBCbG9ja051bWJlciknLFxuICAgICAgICBBdXRob3JpdHlTZXRDaGFuZ2VzOiAnVmVjPEF1dGhvcml0eVNldENoYW5nZT4nLFxuICAgICAgICBBdXRob3JpdHlXZWlnaHQ6ICd1NjQnLFxuICAgICAgICBEZWxheUtpbmQ6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgRmluYWxpemVkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQmVzdDogJ0RlbGF5S2luZEJlc3QnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIERlbGF5S2luZEJlc3Q6IHtcbiAgICAgICAgICAgIG1lZGlhbkxhc3RGaW5hbGl6ZWQ6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgRW5jb2RlZEZpbmFsaXR5UHJvb2ZzOiAnQnl0ZXMnLFxuICAgICAgICBHcmFuZHBhRXF1aXZvY2F0aW9uOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFByZXZvdGU6ICdHcmFuZHBhRXF1aXZvY2F0aW9uVmFsdWUnLFxuICAgICAgICAgICAgICAgIFByZWNvbW1pdDogJ0dyYW5kcGFFcXVpdm9jYXRpb25WYWx1ZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgR3JhbmRwYUVxdWl2b2NhdGlvblByb29mOiB7XG4gICAgICAgICAgICBzZXRJZDogJ1NldElkJyxcbiAgICAgICAgICAgIGVxdWl2b2NhdGlvbjogJ0dyYW5kcGFFcXVpdm9jYXRpb24nXG4gICAgICAgIH0sXG4gICAgICAgIEdyYW5kcGFFcXVpdm9jYXRpb25WYWx1ZToge1xuICAgICAgICAgICAgcm91bmROdW1iZXI6ICd1NjQnLFxuICAgICAgICAgICAgaWRlbnRpdHk6ICdBdXRob3JpdHlJZCcsXG4gICAgICAgICAgICBmaXJzdDogJyhHcmFuZHBhUHJldm90ZSwgQXV0aG9yaXR5U2lnbmF0dXJlKScsXG4gICAgICAgICAgICBzZWNvbmQ6ICcoR3JhbmRwYVByZXZvdGUsIEF1dGhvcml0eVNpZ25hdHVyZSknXG4gICAgICAgIH0sXG4gICAgICAgIEdyYW5kcGFQcmV2b3RlOiB7XG4gICAgICAgICAgICB0YXJnZXRIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICB0YXJnZXROdW1iZXI6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgR3JhbmRwYUNvbW1pdDoge1xuICAgICAgICAgICAgdGFyZ2V0SGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICB0YXJnZXROdW1iZXI6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBwcmVjb21taXRzOiAnVmVjPEdyYW5kcGFTaWduZWRQcmVjb21taXQ+J1xuICAgICAgICB9LFxuICAgICAgICBHcmFuZHBhUHJlY29tbWl0OiB7XG4gICAgICAgICAgICB0YXJnZXRIYXNoOiAnQmxvY2tIYXNoJyxcbiAgICAgICAgICAgIHRhcmdldE51bWJlcjogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBHcmFuZHBhU2lnbmVkUHJlY29tbWl0OiB7XG4gICAgICAgICAgICBwcmVjb21taXQ6ICdHcmFuZHBhUHJlY29tbWl0JyxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogJ0F1dGhvcml0eVNpZ25hdHVyZScsXG4gICAgICAgICAgICBpZDogJ0F1dGhvcml0eUlkJ1xuICAgICAgICB9LFxuICAgICAgICBHcmFuZHBhSnVzdGlmaWNhdGlvbjoge1xuICAgICAgICAgICAgcm91bmQ6ICd1NjQnLFxuICAgICAgICAgICAgY29tbWl0OiAnR3JhbmRwYUNvbW1pdCcsXG4gICAgICAgICAgICB2b3Rlc0FuY2VzdHJpZXM6ICdWZWM8SGVhZGVyPidcbiAgICAgICAgfSxcbiAgICAgICAgSnVzdGlmaWNhdGlvbk5vdGlmaWNhdGlvbjogJ0J5dGVzJyxcbiAgICAgICAgS2V5T3duZXJQcm9vZjogJ01lbWJlcnNoaXBQcm9vZicsXG4gICAgICAgIE5leHRBdXRob3JpdHk6ICcoQXV0aG9yaXR5SWQsIEF1dGhvcml0eVdlaWdodCknLFxuICAgICAgICBQZW5kaW5nQ2hhbmdlOiB7XG4gICAgICAgICAgICBuZXh0QXV0aG9yaXRpZXM6ICdBdXRob3JpdHlMaXN0JyxcbiAgICAgICAgICAgIGRlbGF5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgY2Fub25IZWlnaHQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBjYW5vbkhhc2g6ICdCbG9ja0hhc2gnLFxuICAgICAgICAgICAgZGVsYXlLaW5kOiAnRGVsYXlLaW5kJ1xuICAgICAgICB9LFxuICAgICAgICBQZW5kaW5nUGF1c2U6IHtcbiAgICAgICAgICAgIHNjaGVkdWxlZEF0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgZGVsYXk6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgUGVuZGluZ1Jlc3VtZToge1xuICAgICAgICAgICAgc2NoZWR1bGVkQXQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBkZWxheTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBQcmVjb21taXRzOiB7XG4gICAgICAgICAgICBjdXJyZW50V2VpZ2h0OiAndTMyJyxcbiAgICAgICAgICAgIG1pc3Npbmc6ICdCVHJlZVNldDxBdXRob3JpdHlJZD4nXG4gICAgICAgIH0sXG4gICAgICAgIFByZXZvdGVzOiB7XG4gICAgICAgICAgICBjdXJyZW50V2VpZ2h0OiAndTMyJyxcbiAgICAgICAgICAgIG1pc3Npbmc6ICdCVHJlZVNldDxBdXRob3JpdHlJZD4nXG4gICAgICAgIH0sXG4gICAgICAgIFJlcG9ydGVkUm91bmRTdGF0ZXM6IHtcbiAgICAgICAgICAgIHNldElkOiAndTMyJyxcbiAgICAgICAgICAgIGJlc3Q6ICdSb3VuZFN0YXRlJyxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICdWZWM8Um91bmRTdGF0ZT4nXG4gICAgICAgIH0sXG4gICAgICAgIFJvdW5kU3RhdGU6IHtcbiAgICAgICAgICAgIHJvdW5kOiAndTMyJyxcbiAgICAgICAgICAgIHRvdGFsV2VpZ2h0OiAndTMyJyxcbiAgICAgICAgICAgIHRocmVzaG9sZFdlaWdodDogJ3UzMicsXG4gICAgICAgICAgICBwcmV2b3RlczogJ1ByZXZvdGVzJyxcbiAgICAgICAgICAgIHByZWNvbW1pdHM6ICdQcmVjb21taXRzJ1xuICAgICAgICB9LFxuICAgICAgICBTZXRJZDogJ3U2NCcsXG4gICAgICAgIFN0b3JlZFBlbmRpbmdDaGFuZ2U6IHtcbiAgICAgICAgICAgIHNjaGVkdWxlZEF0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgZGVsYXk6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBuZXh0QXV0aG9yaXRpZXM6ICdBdXRob3JpdHlMaXN0J1xuICAgICAgICB9LFxuICAgICAgICBTdG9yZWRTdGF0ZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBMaXZlOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgUGVuZGluZ1BhdXNlOiAnUGVuZGluZ1BhdXNlJyxcbiAgICAgICAgICAgICAgICBQYXVzZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBQZW5kaW5nUmVzdW1lOiAnUGVuZGluZ1Jlc3VtZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIHByb3ZlRmluYWxpdHk6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQcm92ZSBmaW5hbGl0eSBmb3IgdGhlIGdpdmVuIGJsb2NrIG51bWJlciwgcmV0dXJuaW5nIHRoZSBKdXN0aWZpY2F0aW9uIGZvciB0aGUgbGFzdCBibG9jayBpbiB0aGUgc2V0LicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9ja051bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPEVuY29kZWRGaW5hbGl0eVByb29mcz4nXG4gICAgfSxcbiAgICByb3VuZFN0YXRlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgYmVzdCByb3VuZCBzdGF0ZSBhcyB3ZWxsIGFzIHRoZSBvbmdvaW5nIGJhY2tncm91bmQgcm91bmRzJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1JlcG9ydGVkUm91bmRTdGF0ZXMnXG4gICAgfSxcbiAgICBzdWJzY3JpYmVKdXN0aWZpY2F0aW9uczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1YnNjcmliZXMgdG8gZ3JhbmRwYSBqdXN0aWZpY2F0aW9ucycsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHB1YnN1YjogW1xuICAgICAgICAgICAgJ2p1c3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICdzdWJzY3JpYmVKdXN0aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAndW5zdWJzY3JpYmVKdXN0aWZpY2F0aW9ucydcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0p1c3RpZmljYXRpb25Ob3RpZmljYXRpb24nXG4gICAgfVxufTtcbiIsImNvbnN0IEdSQU5EUEFfVjJfVjMgPSB7XG4gICAgZ2VuZXJhdGVfa2V5X293bmVyc2hpcF9wcm9vZjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlcyBhIHByb29mIG9mIGtleSBvd25lcnNoaXAgZm9yIHRoZSBnaXZlbiBhdXRob3JpdHkgaW4gdGhlIGdpdmVuIHNldC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2V0SWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTZXRJZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2F1dGhvcml0eUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQXV0aG9yaXR5SWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248T3BhcXVlS2V5T3duZXJzaGlwUHJvb2Y+J1xuICAgIH0sXG4gICAgZ3JhbmRwYV9hdXRob3JpdGllczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgY3VycmVudCBHUkFORFBBIGF1dGhvcml0aWVzIGFuZCB3ZWlnaHRzLiBUaGlzIHNob3VsZCBub3QgY2hhbmdlIGV4Y2VwdCBmb3Igd2hlbiBjaGFuZ2VzIGFyZSBzY2hlZHVsZWQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRlbGF5IGhhcyBwYXNzZWQuJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0F1dGhvcml0eUxpc3QnXG4gICAgfSxcbiAgICBzdWJtaXRfcmVwb3J0X2VxdWl2b2NhdGlvbl91bnNpZ25lZF9leHRyaW5zaWM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJtaXRzIGFuIHVuc2lnbmVkIGV4dHJpbnNpYyB0byByZXBvcnQgYW4gZXF1aXZvY2F0aW9uLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlcXVpdm9jYXRpb25Qcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0dyYW5kcGFFcXVpdm9jYXRpb25Qcm9vZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleU93bmVyUHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcGFxdWVLZXlPd25lcnNoaXBQcm9vZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxOdWxsPidcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgR3JhbmRwYUFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudF9zZXRfaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgY3VycmVudCBHUkFORFBBIGF1dGhvcml0eSBzZXQgaWQuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1NldElkJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uR1JBTkRQQV9WMl9WM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczogR1JBTkRQQV9WMl9WMyxcbiAgICAgICAgICAgIHZlcnNpb246IDJcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBJZGVudGl0eUZpZWxkczoge1xuICAgICAgICAgICAgX3NldDoge1xuICAgICAgICAgICAgICAgIF9iaXRMZW5ndGg6IDY0LFxuICAgICAgICAgICAgICAgIC8vIE1hcHBlZCBoZXJlIHRvIDMyIGJpdHMsIGluIFJ1c3QgdGhlc2UgYXJlIDY0LWJpdCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBEaXNwbGF5OiAxLFxuICAgICAgICAgICAgICAgIExlZ2FsOiAyLFxuICAgICAgICAgICAgICAgIFdlYjogNCxcbiAgICAgICAgICAgICAgICBSaW90OiA4LFxuICAgICAgICAgICAgICAgIEVtYWlsOiAxNixcbiAgICAgICAgICAgICAgICBQZ3BGaW5nZXJwcmludDogMzIsXG4gICAgICAgICAgICAgICAgSW1hZ2U6IDY0LFxuICAgICAgICAgICAgICAgIFR3aXR0ZXI6IDEyOFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBJZGVudGl0eUluZm9BZGRpdGlvbmFsOiAnKERhdGEsIERhdGEpJyxcbiAgICAgICAgSWRlbnRpdHlJbmZvVG8xOTg6IHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWw6ICdWZWM8SWRlbnRpdHlJbmZvQWRkaXRpb25hbD4nLFxuICAgICAgICAgICAgZGlzcGxheTogJ0RhdGEnLFxuICAgICAgICAgICAgbGVnYWw6ICdEYXRhJyxcbiAgICAgICAgICAgIHdlYjogJ0RhdGEnLFxuICAgICAgICAgICAgcmlvdDogJ0RhdGEnLFxuICAgICAgICAgICAgZW1haWw6ICdEYXRhJyxcbiAgICAgICAgICAgIHBncEZpbmdlcnByaW50OiAnT3B0aW9uPEgxNjA+JyxcbiAgICAgICAgICAgIGltYWdlOiAnRGF0YSdcbiAgICAgICAgfSxcbiAgICAgICAgSWRlbnRpdHlJbmZvOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdJZGVudGl0eUluZm9UbzE5OCcsXG4gICAgICAgICAgICBhZGRpdGlvbmFsOiAnVmVjPElkZW50aXR5SW5mb0FkZGl0aW9uYWw+JyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdEYXRhJyxcbiAgICAgICAgICAgIGxlZ2FsOiAnRGF0YScsXG4gICAgICAgICAgICB3ZWI6ICdEYXRhJyxcbiAgICAgICAgICAgIHJpb3Q6ICdEYXRhJyxcbiAgICAgICAgICAgIGVtYWlsOiAnRGF0YScsXG4gICAgICAgICAgICBwZ3BGaW5nZXJwcmludDogJ09wdGlvbjxIMTYwPicsXG4gICAgICAgICAgICBpbWFnZTogJ0RhdGEnLFxuICAgICAgICAgICAgdHdpdHRlcjogJ0RhdGEnXG4gICAgICAgIH0sXG4gICAgICAgIElkZW50aXR5SnVkZ2VtZW50OiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFVua25vd246ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBGZWVQYWlkOiAnQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgUmVhc29uYWJsZTogJ051bGwnLFxuICAgICAgICAgICAgICAgIEtub3duR29vZDogJ051bGwnLFxuICAgICAgICAgICAgICAgIE91dE9mRGF0ZTogJ051bGwnLFxuICAgICAgICAgICAgICAgIExvd1F1YWxpdHk6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBFcnJvbmVvdXM6ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBSZWdpc3RyYXRpb25KdWRnZW1lbnQ6ICcoUmVnaXN0cmFySW5kZXgsIElkZW50aXR5SnVkZ2VtZW50KScsXG4gICAgICAgIFJlZ2lzdHJhdGlvblRvMTk4OiB7XG4gICAgICAgICAgICBqdWRnZW1lbnRzOiAnVmVjPFJlZ2lzdHJhdGlvbkp1ZGdlbWVudD4nLFxuICAgICAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgaW5mbzogJ0lkZW50aXR5SW5mb1RvMTk4J1xuICAgICAgICB9LFxuICAgICAgICBSZWdpc3RyYXRpb246IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ1JlZ2lzdHJhdGlvblRvMTk4JyxcbiAgICAgICAgICAgIGp1ZGdlbWVudHM6ICdWZWM8UmVnaXN0cmF0aW9uSnVkZ2VtZW50PicsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBpbmZvOiAnSWRlbnRpdHlJbmZvJ1xuICAgICAgICB9LFxuICAgICAgICBSZWdpc3RyYXJJbmRleDogJ3UzMicsXG4gICAgICAgIFJlZ2lzdHJhckluZm86IHtcbiAgICAgICAgICAgIGFjY291bnQ6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZmVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBmaWVsZHM6ICdJZGVudGl0eUZpZWxkcydcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBBdXRoSW5kZXg6ICd1MzInLFxuICAgICAgICBBdXRob3JpdHlTaWduYXR1cmU6ICdTaWduYXR1cmUnLFxuICAgICAgICBIZWFydGJlYXQ6IHtcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgbmV0d29ya1N0YXRlOiAnT3BhcXVlTmV0d29ya1N0YXRlJyxcbiAgICAgICAgICAgIHNlc3Npb25JbmRleDogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICBhdXRob3JpdHlJbmRleDogJ0F1dGhJbmRleCcsXG4gICAgICAgICAgICB2YWxpZGF0b3JzTGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBIZWFydGJlYXRUbzI0NDoge1xuICAgICAgICAgICAgYmxvY2tOdW1iZXI6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBuZXR3b3JrU3RhdGU6ICdPcGFxdWVOZXR3b3JrU3RhdGUnLFxuICAgICAgICAgICAgc2Vzc2lvbkluZGV4OiAnU2Vzc2lvbkluZGV4JyxcbiAgICAgICAgICAgIGF1dGhvcml0eUluZGV4OiAnQXV0aEluZGV4J1xuICAgICAgICB9LFxuICAgICAgICBPcGFxdWVNdWx0aWFkZHI6ICdPcGFxdWU8Qnl0ZXM+JyxcbiAgICAgICAgT3BhcXVlUGVlcklkOiAnT3BhcXVlPEJ5dGVzPicsXG4gICAgICAgIE9wYXF1ZU5ldHdvcmtTdGF0ZToge1xuICAgICAgICAgICAgcGVlcklkOiAnT3BhcXVlUGVlcklkJyxcbiAgICAgICAgICAgIGV4dGVybmFsQWRkcmVzc2VzOiAnVmVjPE9wYXF1ZU11bHRpYWRkcj4nXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0ICogYXMgZGVmcyBmcm9tICcuL2RlZmluaXRpb25zLmpzJztcbmNvbnN0IGpzb25ycGMgPSB7fTtcbk9iamVjdC5rZXlzKGRlZnMpLmZvckVhY2goKHMpID0+IE9iamVjdC5lbnRyaWVzKGRlZnNbc10ucnBjIHx8IHt9KS5mb3JFYWNoKChbbWV0aG9kLCBkZWZdKSA9PiB7XG4gICAgLy8gYWxsb3cgZm9yIHNlY3Rpb24gb3ZlcnJpZGVzXG4gICAgY29uc3Qgc2VjdGlvbiA9IGRlZi5hbGlhc1NlY3Rpb24gfHwgcztcbiAgICBpZiAoIWpzb25ycGNbc2VjdGlvbl0pIHtcbiAgICAgICAganNvbnJwY1tzZWN0aW9uXSA9IHt9O1xuICAgIH1cbiAgICBqc29ucnBjW3NlY3Rpb25dW21ldGhvZF0gPSBvYmplY3RTcHJlYWQoe30sIGRlZiwge1xuICAgICAgICBpc1N1YnNjcmlwdGlvbjogISFkZWYucHVic3ViLFxuICAgICAgICBqc29ucnBjOiBgJHtzZWN0aW9ufV8ke21ldGhvZH1gLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIHNlY3Rpb25cbiAgICB9KTtcbn0pKTtcbmV4cG9ydCBkZWZhdWx0IGpzb25ycGM7XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBDYWxsSW5kZXg6ICcodTgsIHU4KScsXG4gICAgICAgIExvdHRlcnlDb25maWc6IHtcbiAgICAgICAgICAgIHByaWNlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBzdGFydDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGxlbmd0aDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGRlbGF5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgcmVwZWF0OiAnYm9vbCdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBBbGxIYXNoZXJzIH0gZnJvbSAnLi9oYXNoZXJzLmpzJztcbmltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuaW1wb3J0IHsgdjkgfSBmcm9tICcuL3Y5LmpzJztcbmltcG9ydCB7IHYxMCB9IGZyb20gJy4vdjEwLmpzJztcbmltcG9ydCB7IHYxMSB9IGZyb20gJy4vdjExLmpzJztcbmltcG9ydCB7IHYxMiB9IGZyb20gJy4vdjEyLmpzJztcbmltcG9ydCB7IHYxMyB9IGZyb20gJy4vdjEzLmpzJztcbmltcG9ydCB7IHYxNCB9IGZyb20gJy4vdjE0LmpzJztcbmltcG9ydCB7IHYxNSB9IGZyb20gJy4vdjE1LmpzJztcbmV4cG9ydCB7IEFsbEhhc2hlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgLy8gYWxsIGtub3duXG4gICAgICAgIC4uLnY5LFxuICAgICAgICAuLi52MTAsXG4gICAgICAgIC4uLnYxMSxcbiAgICAgICAgLi4udjEyLFxuICAgICAgICAuLi52MTMsXG4gICAgICAgIC4uLnYxNCxcbiAgICAgICAgLi4udjE1LFxuICAgICAgICAvLyBsYXRlc3QgbWFwcGluZ3NcbiAgICAgICAgLy8gTk9URTogRm9yIHYxNSwgd2Ugb25seSBhZGRlZCB0aGUgcnVudGltZSBkZWZpbnRpb25zLFxuICAgICAgICAvLyBoZW5jZSBsYXRlc3QgZm9yIG1vc3QgcG9pbnRpbmcgdG8gdGhlIHByZXZpb3VzIFYxNFxuICAgICAgICBFcnJvck1ldGFkYXRhTGF0ZXN0OiAnRXJyb3JNZXRhZGF0YVYxNCcsXG4gICAgICAgIEV2ZW50TWV0YWRhdGFMYXRlc3Q6ICdFdmVudE1ldGFkYXRhVjE0JyxcbiAgICAgICAgRXh0cmluc2ljTWV0YWRhdGFMYXRlc3Q6ICdFeHRyaW5zaWNNZXRhZGF0YVYxNScsXG4gICAgICAgIEZ1bmN0aW9uQXJndW1lbnRNZXRhZGF0YUxhdGVzdDogJ0Z1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxNCcsXG4gICAgICAgIEZ1bmN0aW9uTWV0YWRhdGFMYXRlc3Q6ICdGdW5jdGlvbk1ldGFkYXRhVjE0JyxcbiAgICAgICAgTWV0YWRhdGFMYXRlc3Q6ICdNZXRhZGF0YVYxNScsXG4gICAgICAgIFBhbGxldENhbGxNZXRhZGF0YUxhdGVzdDogJ1BhbGxldENhbGxNZXRhZGF0YVYxNCcsXG4gICAgICAgIFBhbGxldENvbnN0YW50TWV0YWRhdGFMYXRlc3Q6ICdQYWxsZXRDb25zdGFudE1ldGFkYXRhVjE0JyxcbiAgICAgICAgUGFsbGV0RXJyb3JNZXRhZGF0YUxhdGVzdDogJ1BhbGxldEVycm9yTWV0YWRhdGFWMTQnLFxuICAgICAgICBQYWxsZXRFdmVudE1ldGFkYXRhTGF0ZXN0OiAnUGFsbGV0RXZlbnRNZXRhZGF0YVYxNCcsXG4gICAgICAgIFBhbGxldE1ldGFkYXRhTGF0ZXN0OiAnUGFsbGV0TWV0YWRhdGFWMTUnLFxuICAgICAgICBQYWxsZXRTdG9yYWdlTWV0YWRhdGFMYXRlc3Q6ICdQYWxsZXRTdG9yYWdlTWV0YWRhdGFWMTQnLFxuICAgICAgICBQb3J0YWJsZVR5cGU6ICdQb3J0YWJsZVR5cGVWMTQnLFxuICAgICAgICBSdW50aW1lQXBpTWV0YWRhdGFMYXRlc3Q6ICdSdW50aW1lQXBpTWV0YWRhdGFWMTUnLFxuICAgICAgICBTaWduZWRFeHRlbnNpb25NZXRhZGF0YUxhdGVzdDogJ1NpZ25lZEV4dGVuc2lvbk1ldGFkYXRhVjE0JyxcbiAgICAgICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFMYXRlc3Q6ICdTdG9yYWdlRW50cnlNZXRhZGF0YVYxNCcsXG4gICAgICAgIFN0b3JhZ2VFbnRyeU1vZGlmaWVyTGF0ZXN0OiAnU3RvcmFnZUVudHJ5TW9kaWZpZXJWMTQnLFxuICAgICAgICBTdG9yYWdlRW50cnlUeXBlTGF0ZXN0OiAnU3RvcmFnZUVudHJ5VHlwZVYxNCcsXG4gICAgICAgIFN0b3JhZ2VIYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjE0JyxcbiAgICAgICAgLy8gYWRkaXRpb25hbCB0eXBlc1xuICAgICAgICBPcGFxdWVNZXRhZGF0YTogJ09wYXF1ZTxCeXRlcz4nLFxuICAgICAgICAvLyB0aGUgZW51bSBjb250YWluaW5nIGFsbCB0aGUgbWFwcGluZ3NcbiAgICAgICAgTWV0YWRhdGFBbGw6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgVjA6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVYwPicsXG4gICAgICAgICAgICAgICAgVjE6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVYxPicsXG4gICAgICAgICAgICAgICAgVjI6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVYyPicsXG4gICAgICAgICAgICAgICAgVjM6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVYzPicsXG4gICAgICAgICAgICAgICAgVjQ6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY0PicsXG4gICAgICAgICAgICAgICAgVjU6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY1PicsXG4gICAgICAgICAgICAgICAgVjY6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY2PicsXG4gICAgICAgICAgICAgICAgVjc6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY3PicsXG4gICAgICAgICAgICAgICAgVjg6ICdEb05vdENvbnN0cnVjdDxNZXRhZGF0YVY4PicsXG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgdmVyc2lvbiBvbiBLdXNhbWEgaW4gVjksIGRyb3BwaW5nIHdpbGwgYmUgcHJvYmxlbWF0aWNcbiAgICAgICAgICAgICAgICBWOTogJ01ldGFkYXRhVjknLFxuICAgICAgICAgICAgICAgIFYxMDogJ01ldGFkYXRhVjEwJyxcbiAgICAgICAgICAgICAgICBWMTE6ICdNZXRhZGF0YVYxMScsXG4gICAgICAgICAgICAgICAgVjEyOiAnTWV0YWRhdGFWMTInLFxuICAgICAgICAgICAgICAgIFYxMzogJ01ldGFkYXRhVjEzJyxcbiAgICAgICAgICAgICAgICBWMTQ6ICdNZXRhZGF0YVYxNCcsXG4gICAgICAgICAgICAgICAgVjE1OiAnTWV0YWRhdGFWMTUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgc29ydC1rZXlzICovXG5leHBvcnQgY29uc3QgQWxsSGFzaGVycyA9IHtcbiAgICBCbGFrZTJfMTI4OiBudWxsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgIEJsYWtlMl8yNTY6IG51bGwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgQmxha2UyXzEyOENvbmNhdDogbnVsbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICBUd294MTI4OiBudWxsLFxuICAgIFR3b3gyNTY6IG51bGwsXG4gICAgVHdveDY0Q29uY2F0OiBudWxsLFxuICAgIC8vIG5ldyBpbiB2MTFcbiAgICBJZGVudGl0eTogbnVsbFxufTtcbiIsImNvbnN0IE1FVEFfVjFfVE9fVjIgPSB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBtZXRhZGF0YSBvZiBhIHJ1bnRpbWUnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnT3BhcXVlTWV0YWRhdGEnXG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIE1ldGFkYXRhOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YV9hdF92ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgbWV0YWRhdGEgYXQgYSBnaXZlbiB2ZXJzaW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPE9wYXF1ZU1ldGFkYXRhPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhX3ZlcnNpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc3VwcG9ydGVkIG1ldGFkYXRhIHZlcnNpb25zLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8dTMyPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLk1FVEFfVjFfVE9fVjJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5NRVRBX1YxX1RPX1YyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBjb25zdCB2MTAgPSB7XG4gICAgLy8gdjEwXG4gICAgRXJyb3JNZXRhZGF0YVYxMDogJ0Vycm9yTWV0YWRhdGFWOScsXG4gICAgRXZlbnRNZXRhZGF0YVYxMDogJ0V2ZW50TWV0YWRhdGFWOScsXG4gICAgRnVuY3Rpb25Bcmd1bWVudE1ldGFkYXRhVjEwOiAnRnVuY3Rpb25Bcmd1bWVudE1ldGFkYXRhVjknLFxuICAgIEZ1bmN0aW9uTWV0YWRhdGFWMTA6ICdGdW5jdGlvbk1ldGFkYXRhVjknLFxuICAgIE1ldGFkYXRhVjEwOiB7XG4gICAgICAgIG1vZHVsZXM6ICdWZWM8TW9kdWxlTWV0YWRhdGFWMTA+J1xuICAgIH0sXG4gICAgTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMDogJ01vZHVsZUNvbnN0YW50TWV0YWRhdGFWOScsXG4gICAgTW9kdWxlTWV0YWRhdGFWMTA6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzdG9yYWdlOiAnT3B0aW9uPFN0b3JhZ2VNZXRhZGF0YVYxMD4nLFxuICAgICAgICBjYWxsczogJ09wdGlvbjxWZWM8RnVuY3Rpb25NZXRhZGF0YVYxMD4+JyxcbiAgICAgICAgZXZlbnRzOiAnT3B0aW9uPFZlYzxFdmVudE1ldGFkYXRhVjEwPj4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8TW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMD4nLFxuICAgICAgICBlcnJvcnM6ICdWZWM8RXJyb3JNZXRhZGF0YVYxMD4nXG4gICAgfSxcbiAgICBTdG9yYWdlRW50cnlNb2RpZmllclYxMDogJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyVjknLFxuICAgIFN0b3JhZ2VFbnRyeU1ldGFkYXRhVjEwOiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgbW9kaWZpZXI6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxMCcsXG4gICAgICAgIHR5cGU6ICdTdG9yYWdlRW50cnlUeXBlVjEwJyxcbiAgICAgICAgZmFsbGJhY2s6ICdCeXRlcycsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBTdG9yYWdlRW50cnlUeXBlVjEwOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBQbGFpbjogJ1R5cGUnLFxuICAgICAgICAgICAgTWFwOiB7XG4gICAgICAgICAgICAgICAgaGFzaGVyOiAnU3RvcmFnZUhhc2hlclYxMCcsXG4gICAgICAgICAgICAgICAga2V5OiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBsaW5rZWQ6ICdib29sJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIERvdWJsZU1hcDoge1xuICAgICAgICAgICAgICAgIGhhc2hlcjogJ1N0b3JhZ2VIYXNoZXJWMTAnLFxuICAgICAgICAgICAgICAgIGtleTE6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBrZXkyOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBrZXkySGFzaGVyOiAnU3RvcmFnZUhhc2hlclYxMCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgU3RvcmFnZU1ldGFkYXRhVjEwOiB7XG4gICAgICAgIHByZWZpeDogJ1RleHQnLFxuICAgICAgICBpdGVtczogJ1ZlYzxTdG9yYWdlRW50cnlNZXRhZGF0YVYxMD4nXG4gICAgfSxcbiAgICBTdG9yYWdlSGFzaGVyVjEwOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBCbGFrZTJfMTI4OiBudWxsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgICAgICAgICAgQmxha2UyXzI1NjogbnVsbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgICAgICAgIEJsYWtlMl8xMjhDb25jYXQ6IG51bGwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgICAgICBUd294MTI4OiBudWxsLFxuICAgICAgICAgICAgVHdveDI1NjogbnVsbCxcbiAgICAgICAgICAgIFR3b3g2NENvbmNhdDogbnVsbFxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IEFsbEhhc2hlcnMgfSBmcm9tICcuL2hhc2hlcnMuanMnO1xuZXhwb3J0IGNvbnN0IHYxMSA9IHtcbiAgICAvLyB2MTFcbiAgICBFcnJvck1ldGFkYXRhVjExOiAnRXJyb3JNZXRhZGF0YVYxMCcsXG4gICAgRXZlbnRNZXRhZGF0YVYxMTogJ0V2ZW50TWV0YWRhdGFWMTAnLFxuICAgIEV4dHJpbnNpY01ldGFkYXRhVjExOiB7XG4gICAgICAgIHZlcnNpb246ICd1OCcsXG4gICAgICAgIHNpZ25lZEV4dGVuc2lvbnM6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWMTE6ICdGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWMTAnLFxuICAgIEZ1bmN0aW9uTWV0YWRhdGFWMTE6ICdGdW5jdGlvbk1ldGFkYXRhVjEwJyxcbiAgICBNZXRhZGF0YVYxMToge1xuICAgICAgICBtb2R1bGVzOiAnVmVjPE1vZHVsZU1ldGFkYXRhVjExPicsXG4gICAgICAgIGV4dHJpbnNpYzogJ0V4dHJpbnNpY01ldGFkYXRhVjExJ1xuICAgIH0sXG4gICAgTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMTogJ01vZHVsZUNvbnN0YW50TWV0YWRhdGFWMTAnLFxuICAgIE1vZHVsZU1ldGFkYXRhVjExOiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgc3RvcmFnZTogJ09wdGlvbjxTdG9yYWdlTWV0YWRhdGFWMTE+JyxcbiAgICAgICAgY2FsbHM6ICdPcHRpb248VmVjPEZ1bmN0aW9uTWV0YWRhdGFWMTE+PicsXG4gICAgICAgIGV2ZW50czogJ09wdGlvbjxWZWM8RXZlbnRNZXRhZGF0YVYxMT4+JyxcbiAgICAgICAgY29uc3RhbnRzOiAnVmVjPE1vZHVsZUNvbnN0YW50TWV0YWRhdGFWMTE+JyxcbiAgICAgICAgZXJyb3JzOiAnVmVjPEVycm9yTWV0YWRhdGFWMTE+J1xuICAgIH0sXG4gICAgU3RvcmFnZUVudHJ5TW9kaWZpZXJWMTE6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxMCcsXG4gICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFWMTE6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBtb2RpZmllcjogJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyVjExJyxcbiAgICAgICAgdHlwZTogJ1N0b3JhZ2VFbnRyeVR5cGVWMTEnLFxuICAgICAgICBmYWxsYmFjazogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFN0b3JhZ2VFbnRyeVR5cGVWMTE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFBsYWluOiAnVHlwZScsXG4gICAgICAgICAgICBNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjExJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGxpbmtlZDogJ2Jvb2wnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRG91YmxlTWFwOiB7XG4gICAgICAgICAgICAgICAgaGFzaGVyOiAnU3RvcmFnZUhhc2hlclYxMScsXG4gICAgICAgICAgICAgICAga2V5MTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGtleTI6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGtleTJIYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjExJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBTdG9yYWdlTWV0YWRhdGFWMTE6IHtcbiAgICAgICAgcHJlZml4OiAnVGV4dCcsXG4gICAgICAgIGl0ZW1zOiAnVmVjPFN0b3JhZ2VFbnRyeU1ldGFkYXRhVjExPidcbiAgICB9LFxuICAgIFN0b3JhZ2VIYXNoZXJWMTE6IHtcbiAgICAgICAgX2VudW06IEFsbEhhc2hlcnNcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHYxMiA9IHtcbiAgICAvLyB2MTJcbiAgICBFcnJvck1ldGFkYXRhVjEyOiAnRXJyb3JNZXRhZGF0YVYxMScsXG4gICAgRXZlbnRNZXRhZGF0YVYxMjogJ0V2ZW50TWV0YWRhdGFWMTEnLFxuICAgIEV4dHJpbnNpY01ldGFkYXRhVjEyOiAnRXh0cmluc2ljTWV0YWRhdGFWMTEnLFxuICAgIEZ1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxMjogJ0Z1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxMScsXG4gICAgRnVuY3Rpb25NZXRhZGF0YVYxMjogJ0Z1bmN0aW9uTWV0YWRhdGFWMTEnLFxuICAgIE1ldGFkYXRhVjEyOiB7XG4gICAgICAgIG1vZHVsZXM6ICdWZWM8TW9kdWxlTWV0YWRhdGFWMTI+JyxcbiAgICAgICAgZXh0cmluc2ljOiAnRXh0cmluc2ljTWV0YWRhdGFWMTInXG4gICAgfSxcbiAgICBNb2R1bGVDb25zdGFudE1ldGFkYXRhVjEyOiAnTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMScsXG4gICAgTW9kdWxlTWV0YWRhdGFWMTI6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzdG9yYWdlOiAnT3B0aW9uPFN0b3JhZ2VNZXRhZGF0YVYxMj4nLFxuICAgICAgICBjYWxsczogJ09wdGlvbjxWZWM8RnVuY3Rpb25NZXRhZGF0YVYxMj4+JyxcbiAgICAgICAgZXZlbnRzOiAnT3B0aW9uPFZlYzxFdmVudE1ldGFkYXRhVjEyPj4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8TW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMj4nLFxuICAgICAgICBlcnJvcnM6ICdWZWM8RXJyb3JNZXRhZGF0YVYxMj4nLFxuICAgICAgICBpbmRleDogJ3U4J1xuICAgIH0sXG4gICAgU3RvcmFnZUVudHJ5TW9kaWZpZXJWMTI6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxMScsXG4gICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFWMTI6ICdTdG9yYWdlRW50cnlNZXRhZGF0YVYxMScsXG4gICAgU3RvcmFnZUVudHJ5VHlwZVYxMjogJ1N0b3JhZ2VFbnRyeVR5cGVWMTEnLFxuICAgIFN0b3JhZ2VNZXRhZGF0YVYxMjogJ1N0b3JhZ2VNZXRhZGF0YVYxMScsXG4gICAgU3RvcmFnZUhhc2hlclYxMjogJ1N0b3JhZ2VIYXNoZXJWMTEnXG59O1xuIiwiZXhwb3J0IGNvbnN0IHYxMyA9IHtcbiAgICAvLyB2MTNcbiAgICBFcnJvck1ldGFkYXRhVjEzOiAnRXJyb3JNZXRhZGF0YVYxMicsXG4gICAgRXZlbnRNZXRhZGF0YVYxMzogJ0V2ZW50TWV0YWRhdGFWMTInLFxuICAgIEV4dHJpbnNpY01ldGFkYXRhVjEzOiAnRXh0cmluc2ljTWV0YWRhdGFWMTInLFxuICAgIEZ1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxMzogJ0Z1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxMicsXG4gICAgRnVuY3Rpb25NZXRhZGF0YVYxMzogJ0Z1bmN0aW9uTWV0YWRhdGFWMTInLFxuICAgIE1ldGFkYXRhVjEzOiB7XG4gICAgICAgIG1vZHVsZXM6ICdWZWM8TW9kdWxlTWV0YWRhdGFWMTM+JyxcbiAgICAgICAgZXh0cmluc2ljOiAnRXh0cmluc2ljTWV0YWRhdGFWMTMnXG4gICAgfSxcbiAgICBNb2R1bGVDb25zdGFudE1ldGFkYXRhVjEzOiAnTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMicsXG4gICAgTW9kdWxlTWV0YWRhdGFWMTM6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzdG9yYWdlOiAnT3B0aW9uPFN0b3JhZ2VNZXRhZGF0YVYxMz4nLFxuICAgICAgICBjYWxsczogJ09wdGlvbjxWZWM8RnVuY3Rpb25NZXRhZGF0YVYxMz4+JyxcbiAgICAgICAgZXZlbnRzOiAnT3B0aW9uPFZlYzxFdmVudE1ldGFkYXRhVjEzPj4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8TW9kdWxlQ29uc3RhbnRNZXRhZGF0YVYxMz4nLFxuICAgICAgICBlcnJvcnM6ICdWZWM8RXJyb3JNZXRhZGF0YVYxMz4nLFxuICAgICAgICBpbmRleDogJ3U4J1xuICAgIH0sXG4gICAgU3RvcmFnZUVudHJ5TW9kaWZpZXJWMTM6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxMicsXG4gICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFWMTM6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBtb2RpZmllcjogJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyVjEzJyxcbiAgICAgICAgdHlwZTogJ1N0b3JhZ2VFbnRyeVR5cGVWMTMnLFxuICAgICAgICBmYWxsYmFjazogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFN0b3JhZ2VFbnRyeVR5cGVWMTM6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFBsYWluOiAnVHlwZScsXG4gICAgICAgICAgICBNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjEzJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGxpbmtlZDogJ2Jvb2wnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRG91YmxlTWFwOiB7XG4gICAgICAgICAgICAgICAgaGFzaGVyOiAnU3RvcmFnZUhhc2hlclYxMycsXG4gICAgICAgICAgICAgICAga2V5MTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGtleTI6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIGtleTJIYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjEzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE5NYXA6IHtcbiAgICAgICAgICAgICAgICBrZXlWZWM6ICdWZWM8VHlwZT4nLFxuICAgICAgICAgICAgICAgIGhhc2hlcnM6ICdWZWM8U3RvcmFnZUhhc2hlclYxMz4nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnVHlwZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgU3RvcmFnZU1ldGFkYXRhVjEzOiB7XG4gICAgICAgIHByZWZpeDogJ1RleHQnLFxuICAgICAgICBpdGVtczogJ1ZlYzxTdG9yYWdlRW50cnlNZXRhZGF0YVYxMz4nXG4gICAgfSxcbiAgICBTdG9yYWdlSGFzaGVyVjEzOiAnU3RvcmFnZUhhc2hlclYxMidcbn07XG4iLCJpbXBvcnQgeyBTaTFWYXJpYW50IH0gZnJvbSAnLi4vc2NhbGVJbmZvL3YxLmpzJztcbmV4cG9ydCBjb25zdCB2MTQgPSB7XG4gICAgLy8gcmVnaXN0cnlcbiAgICBQb3J0YWJsZVR5cGVWMTQ6IHtcbiAgICAgICAgaWQ6ICdTaTFMb29rdXBUeXBlSWQnLFxuICAgICAgICB0eXBlOiAnU2kxVHlwZSdcbiAgICB9LFxuICAgIC8vIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIGxheW91dHMsIGkuZS4gZG9uJ3QgYnJlYWsgcHJldmlvdXMgdXNlcnNcbiAgICBFcnJvck1ldGFkYXRhVjE0OiB7XG4gICAgICAgIC4uLlNpMVZhcmlhbnQsXG4gICAgICAgIGFyZ3M6ICdWZWM8VHlwZT4nXG4gICAgfSxcbiAgICBFdmVudE1ldGFkYXRhVjE0OiB7XG4gICAgICAgIC4uLlNpMVZhcmlhbnQsXG4gICAgICAgIGFyZ3M6ICdWZWM8VHlwZT4nXG4gICAgfSxcbiAgICBGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWMTQ6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICB0eXBlOiAnVHlwZScsXG4gICAgICAgIHR5cGVOYW1lOiAnT3B0aW9uPFR5cGU+J1xuICAgIH0sXG4gICAgRnVuY3Rpb25NZXRhZGF0YVYxNDoge1xuICAgICAgICAuLi5TaTFWYXJpYW50LFxuICAgICAgICBhcmdzOiAnVmVjPEZ1bmN0aW9uQXJndW1lbnRNZXRhZGF0YVYxND4nXG4gICAgfSxcbiAgICAvLyBWMTRcbiAgICBFeHRyaW5zaWNNZXRhZGF0YVYxNDoge1xuICAgICAgICB0eXBlOiAnU2lMb29rdXBUeXBlSWQnLFxuICAgICAgICB2ZXJzaW9uOiAndTgnLFxuICAgICAgICBzaWduZWRFeHRlbnNpb25zOiAnVmVjPFNpZ25lZEV4dGVuc2lvbk1ldGFkYXRhVjE0PidcbiAgICB9LFxuICAgIE1ldGFkYXRhVjE0OiB7XG4gICAgICAgIGxvb2t1cDogJ1BvcnRhYmxlUmVnaXN0cnknLFxuICAgICAgICBwYWxsZXRzOiAnVmVjPFBhbGxldE1ldGFkYXRhVjE0PicsXG4gICAgICAgIGV4dHJpbnNpYzogJ0V4dHJpbnNpY01ldGFkYXRhVjE0JyxcbiAgICAgICAgdHlwZTogJ1NpTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgUGFsbGV0Q2FsbE1ldGFkYXRhVjE0OiB7XG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFBhbGxldENvbnN0YW50TWV0YWRhdGFWMTQ6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICB0eXBlOiAnU2lMb29rdXBUeXBlSWQnLFxuICAgICAgICB2YWx1ZTogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFBhbGxldEVycm9yTWV0YWRhdGFWMTQ6IHtcbiAgICAgICAgdHlwZTogJ1NpTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgUGFsbGV0RXZlbnRNZXRhZGF0YVYxNDoge1xuICAgICAgICB0eXBlOiAnU2lMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBQYWxsZXRNZXRhZGF0YVYxNDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIHN0b3JhZ2U6ICdPcHRpb248UGFsbGV0U3RvcmFnZU1ldGFkYXRhVjE0PicsXG4gICAgICAgIGNhbGxzOiAnT3B0aW9uPFBhbGxldENhbGxNZXRhZGF0YVYxND4nLFxuICAgICAgICBldmVudHM6ICdPcHRpb248UGFsbGV0RXZlbnRNZXRhZGF0YVYxND4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8UGFsbGV0Q29uc3RhbnRNZXRhZGF0YVYxND4nLFxuICAgICAgICBlcnJvcnM6ICdPcHRpb248UGFsbGV0RXJyb3JNZXRhZGF0YVYxND4nLFxuICAgICAgICBpbmRleDogJ3U4J1xuICAgIH0sXG4gICAgUGFsbGV0U3RvcmFnZU1ldGFkYXRhVjE0OiB7XG4gICAgICAgIHByZWZpeDogJ1RleHQnLFxuICAgICAgICAvLyBOT1RFOiBSZW5hbWVkIGZyb20gZW50cmllc1xuICAgICAgICBpdGVtczogJ1ZlYzxTdG9yYWdlRW50cnlNZXRhZGF0YVYxND4nXG4gICAgfSxcbiAgICBTaWduZWRFeHRlbnNpb25NZXRhZGF0YVYxNDoge1xuICAgICAgICBpZGVudGlmaWVyOiAnVGV4dCcsXG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGFkZGl0aW9uYWxTaWduZWQ6ICdTaUxvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFN0b3JhZ2VFbnRyeU1ldGFkYXRhVjE0OiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgbW9kaWZpZXI6ICdTdG9yYWdlRW50cnlNb2RpZmllclYxNCcsXG4gICAgICAgIHR5cGU6ICdTdG9yYWdlRW50cnlUeXBlVjE0JyxcbiAgICAgICAgZmFsbGJhY2s6ICdCeXRlcycsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBTdG9yYWdlRW50cnlNb2RpZmllclYxNDogJ1N0b3JhZ2VFbnRyeU1vZGlmaWVyVjEzJyxcbiAgICBTdG9yYWdlRW50cnlUeXBlVjE0OiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBQbGFpbjogJ1NpTG9va3VwVHlwZUlkJyxcbiAgICAgICAgICAgIE1hcDoge1xuICAgICAgICAgICAgICAgIGhhc2hlcnM6ICdWZWM8U3RvcmFnZUhhc2hlclYxND4nLFxuICAgICAgICAgICAgICAgIGtleTogJ1NpTG9va3VwVHlwZUlkJywgLy8gTk9URTogUmVuYW1lZCBmcm9tIFwia2V5c1wiXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdTaUxvb2t1cFR5cGVJZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgU3RvcmFnZUhhc2hlclYxNDogJ1N0b3JhZ2VIYXNoZXJWMTMnXG59O1xuIiwiZXhwb3J0IGNvbnN0IHYxNSA9IHtcbiAgICAvLyBuZXcvYWRqdXN0ZWQgaW4gdjE1XG4gICAgQ3VzdG9tTWV0YWRhdGExNToge1xuICAgICAgICBtYXA6ICdCVHJlZU1hcDxUZXh0LCBDdXN0b21WYWx1ZU1ldGFkYXRhMTU+J1xuICAgIH0sXG4gICAgQ3VzdG9tVmFsdWVNZXRhZGF0YTE1OiB7XG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIHZhbHVlOiAnQnl0ZXMnXG4gICAgfSxcbiAgICBFeHRyaW5zaWNNZXRhZGF0YVYxNToge1xuICAgICAgICB2ZXJzaW9uOiAndTgnLFxuICAgICAgICBhZGRyZXNzVHlwZTogJ1NpTG9va3VwVHlwZUlkJyxcbiAgICAgICAgY2FsbFR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIHNpZ25hdHVyZVR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGV4dHJhVHlwZTogJ1NpTG9va3VwVHlwZUlkJyxcbiAgICAgICAgc2lnbmVkRXh0ZW5zaW9uczogJ1ZlYzxTaWduZWRFeHRlbnNpb25NZXRhZGF0YVYxND4nXG4gICAgfSxcbiAgICBPdXRlckVudW1zMTU6IHtcbiAgICAgICAgY2FsbFR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGV2ZW50VHlwZTogJ1NpTG9va3VwVHlwZUlkJyxcbiAgICAgICAgZXJyb3JUeXBlOiAnU2lMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBQYWxsZXRNZXRhZGF0YVYxNToge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIHN0b3JhZ2U6ICdPcHRpb248UGFsbGV0U3RvcmFnZU1ldGFkYXRhVjE0PicsXG4gICAgICAgIGNhbGxzOiAnT3B0aW9uPFBhbGxldENhbGxNZXRhZGF0YVYxND4nLFxuICAgICAgICBldmVudHM6ICdPcHRpb248UGFsbGV0RXZlbnRNZXRhZGF0YVYxND4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8UGFsbGV0Q29uc3RhbnRNZXRhZGF0YVYxND4nLFxuICAgICAgICBlcnJvcnM6ICdPcHRpb248UGFsbGV0RXJyb3JNZXRhZGF0YVYxND4nLFxuICAgICAgICBpbmRleDogJ3U4JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFJ1bnRpbWVBcGlNZXRhZGF0YVYxNToge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIG1ldGhvZHM6ICdWZWM8UnVudGltZUFwaU1ldGhvZE1ldGFkYXRhVjE1PicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBSdW50aW1lQXBpTWV0aG9kTWV0YWRhdGFWMTU6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBpbnB1dHM6ICdWZWM8UnVudGltZUFwaU1ldGhvZFBhcmFtTWV0YWRhdGFWMTU+JyxcbiAgICAgICAgb3V0cHV0OiAnU2lMb29rdXBUeXBlSWQnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgUnVudGltZUFwaU1ldGhvZFBhcmFtTWV0YWRhdGFWMTU6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICB0eXBlOiAnU2lMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICAvLyBhY3R1YWwgdjE1IGRlZmluaXRpb25cbiAgICBNZXRhZGF0YVYxNToge1xuICAgICAgICBsb29rdXA6ICdQb3J0YWJsZVJlZ2lzdHJ5JyxcbiAgICAgICAgcGFsbGV0czogJ1ZlYzxQYWxsZXRNZXRhZGF0YVYxNT4nLFxuICAgICAgICBleHRyaW5zaWM6ICdFeHRyaW5zaWNNZXRhZGF0YVYxNScsXG4gICAgICAgIHR5cGU6ICdTaUxvb2t1cFR5cGVJZCcsXG4gICAgICAgIGFwaXM6ICdWZWM8UnVudGltZUFwaU1ldGFkYXRhVjE1PicsXG4gICAgICAgIG91dGVyRW51bXM6ICdPdXRlckVudW1zMTUnLFxuICAgICAgICBjdXN0b206ICdDdXN0b21NZXRhZGF0YTE1J1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdjkgPSB7XG4gICAgLy8gdjlcbiAgICBFcnJvck1ldGFkYXRhVjk6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgRXZlbnRNZXRhZGF0YVY5OiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxUeXBlPicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWOToge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIHR5cGU6ICdUeXBlJ1xuICAgIH0sXG4gICAgRnVuY3Rpb25NZXRhZGF0YVY5OiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgYXJnczogJ1ZlYzxGdW5jdGlvbkFyZ3VtZW50TWV0YWRhdGFWOT4nLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgTWV0YWRhdGFWOToge1xuICAgICAgICBtb2R1bGVzOiAnVmVjPE1vZHVsZU1ldGFkYXRhVjk+J1xuICAgIH0sXG4gICAgTW9kdWxlQ29uc3RhbnRNZXRhZGF0YVY5OiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgdHlwZTogJ1R5cGUnLFxuICAgICAgICB2YWx1ZTogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIE1vZHVsZU1ldGFkYXRhVjk6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICBzdG9yYWdlOiAnT3B0aW9uPFN0b3JhZ2VNZXRhZGF0YVY5PicsXG4gICAgICAgIGNhbGxzOiAnT3B0aW9uPFZlYzxGdW5jdGlvbk1ldGFkYXRhVjk+PicsXG4gICAgICAgIGV2ZW50czogJ09wdGlvbjxWZWM8RXZlbnRNZXRhZGF0YVY5Pj4nLFxuICAgICAgICBjb25zdGFudHM6ICdWZWM8TW9kdWxlQ29uc3RhbnRNZXRhZGF0YVY5PicsXG4gICAgICAgIGVycm9yczogJ1ZlYzxFcnJvck1ldGFkYXRhVjk+J1xuICAgIH0sXG4gICAgU3RvcmFnZUVudHJ5TWV0YWRhdGFWOToge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIG1vZGlmaWVyOiAnU3RvcmFnZUVudHJ5TW9kaWZpZXJWOScsXG4gICAgICAgIHR5cGU6ICdTdG9yYWdlRW50cnlUeXBlVjknLFxuICAgICAgICBmYWxsYmFjazogJ0J5dGVzJyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFN0b3JhZ2VFbnRyeU1vZGlmaWVyVjk6IHtcbiAgICAgICAgX2VudW06IFsnT3B0aW9uYWwnLCAnRGVmYXVsdCcsICdSZXF1aXJlZCddXG4gICAgfSxcbiAgICBTdG9yYWdlRW50cnlUeXBlVjk6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFBsYWluOiAnVHlwZScsXG4gICAgICAgICAgICBNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjknLFxuICAgICAgICAgICAgICAgIGtleTogJ1R5cGUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgbGlua2VkOiAnYm9vbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBEb3VibGVNYXA6IHtcbiAgICAgICAgICAgICAgICBoYXNoZXI6ICdTdG9yYWdlSGFzaGVyVjknLFxuICAgICAgICAgICAgICAgIGtleTE6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBrZXkyOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdUeXBlJyxcbiAgICAgICAgICAgICAgICBrZXkySGFzaGVyOiAnU3RvcmFnZUhhc2hlclY5J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBTdG9yYWdlSGFzaGVyVjk6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEJsYWtlMl8xMjg6IG51bGwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgICAgICBCbGFrZTJfMjU2OiBudWxsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgICAgICAgICAgVHdveDEyODogbnVsbCxcbiAgICAgICAgICAgIFR3b3gyNTY6IG51bGwsXG4gICAgICAgICAgICBUd294NjRDb25jYXQ6IG51bGxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgU3RvcmFnZU1ldGFkYXRhVjk6IHtcbiAgICAgICAgcHJlZml4OiAnVGV4dCcsXG4gICAgICAgIGl0ZW1zOiAnVmVjPFN0b3JhZ2VFbnRyeU1ldGFkYXRhVjk+J1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgTWl4bm9kZToge1xuICAgICAgICAgICAgZXh0ZXJuYWxBZGRyZXNzZXM6ICdWZWM8Qnl0ZXM+JyxcbiAgICAgICAgICAgIGt4UHVibGljOiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgcGVlcklkOiAnW3U4OyAzMl0nXG4gICAgICAgIH0sXG4gICAgICAgIE1peG5vZGVzRXJyOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIEluc3VmZmljaWVudFJlZ2lzdHJhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbWluOiAndTMyJyxcbiAgICAgICAgICAgICAgICAgICAgbnVtOiAndTMyJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2Vzc2lvblBoYXNlOiB7XG4gICAgICAgICAgICBfZW51bTogWydDb3ZlclRvQ3VycmVudCcsICdSZXF1ZXN0c1RvQ3VycmVudCcsICdDb3ZlclRvUHJldicsICdEaXNjb25uZWN0RnJvbVByZXYnXVxuICAgICAgICB9LFxuICAgICAgICBTZXNzaW9uU3RhdHVzOiB7XG4gICAgICAgICAgICBjdXJyZW50SW5kZXg6ICd1MzInLFxuICAgICAgICAgICAgcGhhc2U6ICdTZXNzaW9uUGhhc2UnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgTWl4bmV0QXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50X21peG5vZGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBpbmRleCBhbmQgcGhhc2Ugb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmVzdWx0PE1peG5vZGUsIE1peG5vZGVzRXJyPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1heWJlX3JlZ2lzdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVHJ5IHRvIHJlZ2lzdGVyIGEgbWl4bm9kZSBmb3IgdGhlIG5leHQgc2Vzc2lvbi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2Vzc2lvbl9pbmRleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ21peG5vZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdNaXhub2RlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZXZfbWl4bm9kZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGluZGV4IGFuZCBwaGFzZSBvZiB0aGUgY3VycmVudCBzZXNzaW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdSZXN1bHQ8TWl4bm9kZSwgTWl4bm9kZXNFcnI+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0dXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGluZGV4IGFuZCBwaGFzZSBvZiB0aGUgY3VycmVudCBzZXNzaW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTZXNzaW9uU3RhdHVzJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjLFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgTW1yQmF0Y2hQcm9vZjoge1xuICAgICAgICAgICAgbGVhZkluZGljZXM6ICdWZWM8TW1yTGVhZkluZGV4PicsXG4gICAgICAgICAgICBsZWFmQ291bnQ6ICdNbXJOb2RlSW5kZXgnLFxuICAgICAgICAgICAgaXRlbXM6ICdWZWM8SGFzaD4nXG4gICAgICAgIH0sXG4gICAgICAgIE1tckVuY29kYWJsZU9wYXF1ZUxlYWY6ICdCeXRlcycsXG4gICAgICAgIE1tckVycm9yOiB7XG4gICAgICAgICAgICBfZW51bTogWydJbnZhbGlkTnVtZXJpY09wJywgJ1B1c2gnLCAnR2V0Um9vdCcsICdDb21taXQnLCAnR2VuZXJhdGVQcm9vZicsICdWZXJpZnknLCAnTGVhZk5vdEZvdW5kJywgJyBQYWxsZXROb3RJbmNsdWRlZCcsICdJbnZhbGlkTGVhZkluZGV4JywgJ0ludmFsaWRCZXN0S25vd25CbG9jayddXG4gICAgICAgIH0sXG4gICAgICAgIE1tckhhc2g6ICdIYXNoJyxcbiAgICAgICAgTW1yTGVhZkJhdGNoUHJvb2Y6IHtcbiAgICAgICAgICAgIGJsb2NrSGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICBsZWF2ZXM6ICdCeXRlcycsXG4gICAgICAgICAgICBwcm9vZjogJ0J5dGVzJ1xuICAgICAgICB9LFxuICAgICAgICBNbXJMZWFmSW5kZXg6ICd1NjQnLFxuICAgICAgICBNbXJMZWFmUHJvb2Y6IHtcbiAgICAgICAgICAgIGJsb2NrSGFzaDogJ0Jsb2NrSGFzaCcsXG4gICAgICAgICAgICBsZWFmOiAnQnl0ZXMnLFxuICAgICAgICAgICAgcHJvb2Y6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgTW1yTm9kZUluZGV4OiAndTY0JyxcbiAgICAgICAgTW1yUHJvb2Y6IHtcbiAgICAgICAgICAgIGxlYWZJbmRleDogJ01tckxlYWZJbmRleCcsXG4gICAgICAgICAgICBsZWFmQ291bnQ6ICdNbXJOb2RlSW5kZXgnLFxuICAgICAgICAgICAgaXRlbXM6ICdWZWM8SGFzaD4nXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBnZW5lcmF0ZVByb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgTU1SIHByb29mIGZvciB0aGUgZ2l2ZW4gYmxvY2sgbnVtYmVycy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2tOdW1iZXJzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPHU2ND4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jlc3RLbm93bkJsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTY0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnTW1yTGVhZkJhdGNoUHJvb2YnXG4gICAgfSxcbiAgICByb290OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBNTVIgcm9vdCBoYXNoIGZvciB0aGUgY3VycmVudCBiZXN0IGJsb2NrLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdNbXJIYXNoJ1xuICAgIH0sXG4gICAgdmVyaWZ5UHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgYW4gTU1SIHByb29mJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Byb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yTGVhZkJhdGNoUHJvb2YnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdib29sJ1xuICAgIH0sXG4gICAgdmVyaWZ5UHJvb2ZTdGF0ZWxlc3M6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgYW4gTU1SIHByb29mIHN0YXRlbGVzc2x5IGdpdmVuIGFuIG1tcl9yb290JyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJIYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJMZWFmQmF0Y2hQcm9vZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgfVxufTtcbiIsImNvbnN0IE1NUl9WMiA9IHtcbiAgICBnZW5lcmF0ZV9wcm9vZjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIE1NUiBwcm9vZiBmb3IgdGhlIGdpdmVuIGJsb2NrIG51bWJlcnMuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrTnVtYmVycycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxCbG9ja051bWJlcj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdiZXN0S25vd25CbG9ja051bWJlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCbG9ja051bWJlcj4nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8KFZlYzxNbXJFbmNvZGFibGVPcGFxdWVMZWFmPiwgTW1yQmF0Y2hQcm9vZiksIE1tckVycm9yPidcbiAgICB9LFxuICAgIG1tcl9sZWFmX2NvdW50OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBudW1iZXIgb2YgTU1SIGJsb2NrcyBpbiB0aGUgY2hhaW4uJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDxVNjQsIE1tckVycm9yPidcbiAgICB9LFxuICAgIG1tcl9yb290OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBvbi1jaGFpbiBNTVIgcm9vdCBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8SGFzaCwgTW1yRXJyb3I+J1xuICAgIH0sXG4gICAgdmVyaWZ5X3Byb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmVyaWZ5IE1NUiBwcm9vZiBhZ2FpbnN0IG9uLWNoYWluIE1NUi4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVhdmVzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPE1tckVuY29kYWJsZU9wYXF1ZUxlYWY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJCYXRjaFByb29mJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVzdWx0PCgpLCBNbXJFcnJvcj4nXG4gICAgfSxcbiAgICB2ZXJpZnlfcHJvb2Zfc3RhdGVsZXNzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmVyaWZ5IE1NUiBwcm9vZiBhZ2FpbnN0IGdpdmVuIHJvb3QgaGFzaC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZWF2ZXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8TW1yRW5jb2RhYmxlT3BhcXVlTGVhZj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ01tckJhdGNoUHJvb2YnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8KCksIE1tckVycm9yPidcbiAgICB9XG59O1xuY29uc3QgTU1SX1YxID0ge1xuICAgIGdlbmVyYXRlX2JhdGNoX3Byb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgTU1SIHByb29mIGZvciBhIHNlcmllcyBvZiBsZWF2ZXMgdW5kZXIgZ2l2ZW4gaW5kaWNlcy4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVhZkluZGljZXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8TW1yTGVhZkluZGV4PidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDwoVmVjPE1tckVuY29kYWJsZU9wYXF1ZUxlYWY+LCBNbXJCYXRjaFByb29mKSwgTW1yRXJyb3I+J1xuICAgIH0sXG4gICAgZ2VuZXJhdGVfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBNTVIgcHJvb2YgZm9yIGEgbGVhZiB1bmRlciBnaXZlbiBpbmRleC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVhZkluZGV4JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yTGVhZkluZGV4J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVzdWx0PChNbXJFbmNvZGFibGVPcGFxdWVMZWFmLCBNbXJQcm9vZiksIE1tckVycm9yPidcbiAgICB9LFxuICAgIG1tcl9yb290OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIHRoZSBvbi1jaGFpbiBNTVIgcm9vdCBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8SGFzaCwgTW1yRXJyb3I+J1xuICAgIH0sXG4gICAgdmVyaWZ5X2JhdGNoX3Byb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmVyaWZ5IE1NUiBwcm9vZiBhZ2FpbnN0IG9uLWNoYWluIE1NUiBmb3IgYSBiYXRjaCBvZiBsZWF2ZXMuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2xlYXZlcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxNbXJFbmNvZGFibGVPcGFxdWVMZWFmPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Byb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yQmF0Y2hQcm9vZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgTW1yRXJyb3I+J1xuICAgIH0sXG4gICAgdmVyaWZ5X2JhdGNoX3Byb29mX3N0YXRlbGVzczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1ZlcmlmeSBNTVIgcHJvb2YgYWdhaW5zdCBnaXZlbiByb290IGhhc2ggb3IgYSBiYXRjaCBvZiBsZWF2ZXMuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVhdmVzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPE1tckVuY29kYWJsZU9wYXF1ZUxlYWY+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJCYXRjaFByb29mJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVzdWx0PCgpLCBNbXJFcnJvcj4nXG4gICAgfSxcbiAgICB2ZXJpZnlfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgTU1SIHByb29mIGFnYWluc3Qgb24tY2hhaW4gTU1SLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZWFmJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yRW5jb2RhYmxlT3BhcXVlTGVhZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Byb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTW1yUHJvb2YnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSZXN1bHQ8KCksIE1tckVycm9yPidcbiAgICB9LFxuICAgIHZlcmlmeV9wcm9vZl9zdGF0ZWxlc3M6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgTU1SIHByb29mIGFnYWluc3QgZ2l2ZW4gcm9vdCBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGFzaCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2xlYWYnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJFbmNvZGFibGVPcGFxdWVMZWFmJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncHJvb2YnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdNbXJQcm9vZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1Jlc3VsdDwoKSwgTW1yRXJyb3I+J1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBNbXJBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczogTU1SX1YyLFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiBNTVJfVjEsXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIE5mdENvbGxlY3Rpb25JZDogJ3UzMicsXG4gICAgICAgIE5mdEl0ZW1JZDogJ3UzMidcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgTmZ0c0FwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQW4gYXR0cmlidXRlJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmZ0SXRlbUlkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248Qnl0ZXM+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbl9hdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBIGNvbGxlY3Rpb24gYXR0cmlidXRlJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCeXRlcz4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX293bmVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQSBjb2xsZWN0aW9uIG93bmVyJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248QWNjb3VudElkPidcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGN1c3RvbV9hdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBIGN1c3RvbSBhdHRyaWJ1dGUnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmZ0SXRlbUlkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248Qnl0ZXM+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3duZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb2xsZWN0aW9uIG93bmVyJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOZnRDb2xsZWN0aW9uSWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmZ0SXRlbUlkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPEFjY291bnRJZD4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1fYXR0cmlidXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU3lzdGVtIGF0dHJpYnV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTmZ0Q29sbGVjdGlvbklkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05mdEl0ZW1JZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPEJ5dGVzPidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge31cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICAvLyBkZXByZWNhdGVkLCB0aGUgTmltYnVzQXBpIGlzIGN1cnJlbnQgLSB0aGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAgQXV0aG9yRmlsdGVyQVBJOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjYW5fYXV0aG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHJ1bnRpbWUgYXBpIHVzZWQgdG8gcHJlZGljdCB3aGV0aGVyIGFuIGF1dGhvciB3aWxsIGJlIGVsaWdpYmxlIGluIHRoZSBnaXZlbiBzbG90JyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2F1dGhvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3JlbGF5UGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGFyZW50SGVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgY2FuX2F1dGhvcjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBydW50aW1lIGFwaSB1c2VkIHRvIHByZWRpY3Qgd2hldGhlciBhbiBhdXRob3Igd2lsbCBiZSBlbGlnaWJsZSBpbiB0aGUgZ2l2ZW4gc2xvdCcsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhdXRob3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyZWxheVBhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF0sXG4gICAgTmltYnVzQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBjYW5fYXV0aG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHJ1bnRpbWUgYXBpIHVzZWQgdG8gcHJlZGljdCB3aGV0aGVyIGEgTmltYnVzIGF1dGhvciB3aWxsIGJlIGVsaWdpYmxlIGluIHRoZSBnaXZlbiBzbG90JyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2F1dGhvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjY291bnRJZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3JlbGF5UGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGFyZW50SGVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBOcEFwaUVycm9yOiB7XG4gICAgICAgICAgICBfZW51bTogWydNZW1iZXJOb3RGb3VuZCcsICdPdmVyZmxvd0luUGVuZGluZ1Jld2FyZHMnXVxuICAgICAgICB9LFxuICAgICAgICBOcFBvb2xJZDogJ3UzMidcbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgTm9taW5hdGlvblBvb2xzQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBiYWxhbmNlX3RvX3BvaW50czoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGVxdWl2YWxlbnQgcG9pbnRzIG9mIGBuZXdfZnVuZHNgIGZvciBhIGdpdmVuIHBvb2wuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Bvb2xJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05wUG9vbElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbmV3RnVuZHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBlbmRpbmdfcmV3YXJkczoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHBlbmRpbmcgcmV3YXJkcyBmb3IgdGhlIGdpdmVuIG1lbWJlci4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbWVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvaW50c190b19iYWxhbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgZXF1aXZhbGVudCBiYWxhbmNlIG9mIGBwb2ludHNgIGZvciBhIGdpdmVuIHBvb2wuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Bvb2xJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ05wUG9vbElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncG9pbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0JhbGFuY2UnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBTdG9yYWdlS2luZDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBQRVJTSVNURU5UOiAxLFxuICAgICAgICAgICAgICAgIExPQ0FMOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJwYyA9IHtcbiAgICBsb2NhbFN0b3JhZ2VHZXQ6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgb2ZmY2hhaW4gbG9jYWwgc3RvcmFnZSB1bmRlciBnaXZlbiBrZXkgYW5kIHByZWZpeCcsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2luZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLaW5kJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248Qnl0ZXM+J1xuICAgIH0sXG4gICAgbG9jYWxTdG9yYWdlU2V0OiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU2V0IG9mZmNoYWluIGxvY2FsIHN0b3JhZ2UgdW5kZXIgZ2l2ZW4ga2V5IGFuZCBwcmVmaXgnLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tpbmQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2luZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ051bGwnXG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIE9mZmNoYWluV29ya2VyQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBvZmZjaGFpbl93b3JrZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTdGFydHMgdGhlIG9mZi1jaGFpbiB0YXNrIGZvciBnaXZlbiBibG9jayBoZWFkZXIuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2hlYWRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIG9mZmNoYWluX3dvcmtlcjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyB0aGUgb2ZmLWNoYWluIHRhc2sgZm9yIGdpdmVuIGJsb2NrIGhlYWRlci4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgRGVmZXJyZWRPZmZlbmNlT2Y6ICcoVmVjPE9mZmVuY2VEZXRhaWxzPiwgVmVjPFBlcmJpbGw+LCBTZXNzaW9uSW5kZXgpJyxcbiAgICAgICAgS2luZDogJ1t1ODsgMTZdJyxcbiAgICAgICAgT2ZmZW5jZURldGFpbHM6IHtcbiAgICAgICAgICAgIG9mZmVuZGVyOiAnT2ZmZW5kZXInLFxuICAgICAgICAgICAgcmVwb3J0ZXJzOiAnVmVjPFJlcG9ydGVyPidcbiAgICAgICAgfSxcbiAgICAgICAgT2ZmZW5kZXI6ICdJZGVudGlmaWNhdGlvblR1cGxlJyxcbiAgICAgICAgT3BhcXVlVGltZVNsb3Q6ICdCeXRlcycsXG4gICAgICAgIFJlcG9ydElkT2Y6ICdIYXNoJyxcbiAgICAgICAgUmVwb3J0ZXI6ICdBY2NvdW50SWQnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge31cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3Blbi13ZWIzLXN0YWNrL29wZW4tcnVudGltZS1tb2R1bGUtbGlicmFyeS9ibG9iL2I1N2Y4OGIzOWNkNTQ3ZTJmYjUxNzI3ZDhiYjliY2M2NGZkZGY4YjUvb3JhY2xlL3JwYy9ydW50aW1lLWFwaS9zcmMvbGliLnJzI0wxMi1MMjFcbiAgICBPcmFjbGVBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGdldF9hbGxfdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIGFsbCB2YWx1ZXMnLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncHJvdmlkZXJJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIENvZGVjIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdvbid0IGFjdHVhbGx5IHdvcmsgYXMgZXhwZWN0ZWQgLSBzaW5jZSB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3R1YWwgUmF3IHNpemVzLCB3ZSBjYW5ub3RcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGl0IGluIHRoaXMgZm9ybWF0IChpdCB3b3VsZCBuZWVkIGFuIG92ZXJyaWRlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgc3BlY2lmaWMgQ29kZWMpLiBTbyByZXR1cm4gdGhlIFJhdyB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gdHlwZTogJ1ZlYzwoUmF3LCBPcHRpb248UmF3Pik+J1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0X3ZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIGEgc2luZ2xlIHZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3Byb3ZpZGVySWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBDb2RlYyB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1JhdydcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIENvZGVjIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIE9wdGlvbjxDb2RlYz4gdHlwZVxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFJhdz4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHJ1bnRpbWUsXG4gICAgdHlwZXM6IHt9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW4td2ViMy1zdGFjay9vcGVuLXJ1bnRpbWUtbW9kdWxlLWxpYnJhcnkvYmxvYi9iNTdmODhiMzljZDU0N2UyZmI1MTcyN2Q4YmI5YmNjNjRmZGRmOGI1L3Rva2Vucy9ycGMvcnVudGltZS1hcGkvc3JjL2xpYi5ycyNMMTEtTDE4XG4gICAgVG9rZW5zQXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBxdWVyeV9leGlzdGVudGlhbF9kZXBvc2l0OiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUXVlcnkgdGhlIGV4aXN0ZW50aWFsIGFtb3VudCBmb3IgYSBzcGVjaWZpYyBjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjdXJyZW5jeUlkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIEN1cnJlbmN5SWQsIGFzIHBlciB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBhcmUgdW5zdXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBzcGVjaWFsaXplZCBhbmQvb3IgZ2xvYmFsIHRvIHRoZSBjaGFpbiBvciBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIEJhbGFuY2UgLSBzaW5jZSB3ZSBkb24ndCB1bmRlcnN0YW5kIGVub3VnaCBhYm91dCB0aGUgd2F5XG4gICAgICAgICAgICAgICAgICAgIC8vIGluIHdoaWNoIHRoaXMgaXMgdXNlZCwgd2UgZGVmYXVsdCB0byB1MTI4IGhlcmUgKGl0IGNlcnRhaW5seSBjb3VsZFxuICAgICAgICAgICAgICAgICAgICAvLyBiZSBhIHNwZWNpYWxpemVkIHR5cGUgdGhhdCBkb2Vzbid0IG1hcCB0byB0aGUgb24tY2hhaW4gQmFsYW5jZSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3UxMjgnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJpbXBvcnQgaHJtcFR5cGVzIGZyb20gJy4vaHJtcC5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmltcG9ydCBzbG90VHlwZXMgZnJvbSAnLi9zbG90cy5qcyc7XG5jb25zdCBwcm9wb3NlVHlwZXMgPSB7XG4gICAgUGFyYWNoYWluUHJvcG9zYWw6IHtcbiAgICAgICAgcHJvcG9zZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICBnZW5lc2lzSGVhZDogJ0hlYWREYXRhJyxcbiAgICAgICAgdmFsaWRhdG9yczogJ1ZlYzxWYWxpZGF0b3JJZD4nLFxuICAgICAgICBuYW1lOiAnQnl0ZXMnLFxuICAgICAgICBiYWxhbmNlOiAnQmFsYW5jZSdcbiAgICB9LFxuICAgIFJlZ2lzdGVyZWRQYXJhY2hhaW5JbmZvOiB7XG4gICAgICAgIHZhbGlkYXRvcnM6ICdWZWM8VmFsaWRhdG9ySWQ+JyxcbiAgICAgICAgcHJvcG9zZXI6ICdBY2NvdW50SWQnXG4gICAgfVxufTtcbmNvbnN0IGN1bXVsdXNUeXBlcyA9IHtcbiAgICBTZXJ2aWNlUXVhbGl0eToge1xuICAgICAgICBfZW51bTogWydPcmRlcmVkJywgJ0Zhc3QnXVxuICAgIH1cbn07XG5jb25zdCBkaXNwdXRlVHlwZXMgPSB7XG4gICAgRGlzcHV0ZUxvY2F0aW9uOiB7XG4gICAgICAgIF9lbnVtOiBbJ0xvY2FsJywgJ1JlbW90ZSddXG4gICAgfSxcbiAgICBEaXNwdXRlUmVzdWx0OiB7XG4gICAgICAgIF9lbnVtOiBbJ1ZhbGlkJywgJ0ludmFsaWQnXVxuICAgIH0sXG4gICAgRGlzcHV0ZVN0YXRlOiB7XG4gICAgICAgIHZhbGlkYXRvcnNGb3I6ICdCaXRWZWMnLFxuICAgICAgICB2YWxpZGF0b3JzQWdhaW5zdDogJ0JpdFZlYycsXG4gICAgICAgIHN0YXJ0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICBjb25jbHVkZWRBdDogJ09wdGlvbjxCbG9ja051bWJlcj4nXG4gICAgfSxcbiAgICBEaXNwdXRlU3RhdGVtZW50OiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBWYWxpZDogJ1ZhbGlkRGlzcHV0ZVN0YXRlbWVudEtpbmQnLFxuICAgICAgICAgICAgSW52YWxpZDogJ0ludmFsaWREaXNwdXRlU3RhdGVtZW50S2luZCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRGlzcHV0ZVN0YXRlbWVudFNldDoge1xuICAgICAgICBjYW5kaWRhdGVIYXNoOiAnQ2FuZGlkYXRlSGFzaCcsXG4gICAgICAgIHNlc3Npb246ICdTZXNzaW9uSW5kZXgnLFxuICAgICAgICBzdGF0ZW1lbnRzOiAnVmVjPChEaXNwdXRlU3RhdGVtZW50LCBQYXJhVmFsaWRhdG9ySW5kZXgsIFZhbGlkYXRvclNpZ25hdHVyZSk+J1xuICAgIH0sXG4gICAgRXhlY3V0b3JQYXJhbToge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgUGhhbnRvbTogJ051bGwnLCAvLyBpbmRleCBzdGFydHMgYXQgMS4uLiBlbXB0eSBzbG90IGF0IDBcbiAgICAgICAgICAgIE1heE1lbW9yeVBhZ2VzOiAndTMyJyxcbiAgICAgICAgICAgIFN0YWNrTG9naWNhbE1heDogJ3UzMicsXG4gICAgICAgICAgICBTdGFja05hdGl2ZU1heDogJ3UzMicsXG4gICAgICAgICAgICBQcmVjaGVja2luZ01heE1lbW9yeTogJ3U2NCcsXG4gICAgICAgICAgICBQdmZQcmVwVGltZW91dDogJyhQdmZQcmVwVGltZW91dEtpbmQsIHU2NCknLFxuICAgICAgICAgICAgUHZmRXhlY1RpbWVvdXQ6ICcoUHZmRXhlY1RpbWVvdXRLaW5kLCB1NjQpJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBFeGVjdXRvclBhcmFtc0hhc2g6ICdIYXNoJyxcbiAgICBFeGVjdXRvclBhcmFtczogJ1ZlYzxFeGVjdXRvclBhcmFtPicsXG4gICAgRXhwbGljaXREaXNwdXRlU3RhdGVtZW50OiB7XG4gICAgICAgIHZhbGlkOiAnYm9vbCcsXG4gICAgICAgIGNhbmRpZGF0ZUhhc2g6ICdDYW5kaWRhdGVIYXNoJyxcbiAgICAgICAgc2Vzc2lvbjogJ1Nlc3Npb25JbmRleCdcbiAgICB9LFxuICAgIEludmFsaWREaXNwdXRlU3RhdGVtZW50S2luZDoge1xuICAgICAgICBfZW51bTogWydFeHBsaWNpdCddXG4gICAgfSxcbiAgICBNdWx0aURpc3B1dGVTdGF0ZW1lbnRTZXQ6ICdWZWM8RGlzcHV0ZVN0YXRlbWVudFNldD4nLFxuICAgIFB2ZkV4ZWNUaW1lb3V0S2luZDoge1xuICAgICAgICBfZW51bTogWydCYWNraW5nJywgJ0FwcHJvdmFsJ11cbiAgICB9LFxuICAgIFB2ZlByZXBUaW1lb3V0S2luZDoge1xuICAgICAgICBfZW51bTogWydQcmVjaGVjaycsICdMZW5pZW50J11cbiAgICB9LFxuICAgIFZhbGlkRGlzcHV0ZVN0YXRlbWVudEtpbmQ6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEV4cGxpY2l0OiAnTnVsbCcsXG4gICAgICAgICAgICBCYWNraW5nU2Vjb25kZWQ6ICdIYXNoJyxcbiAgICAgICAgICAgIEJhY2tpbmdWYWxpZDogJ0hhc2gnLFxuICAgICAgICAgICAgQXBwcm92YWxDaGVja2luZzogJ051bGwnXG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5jdW11bHVzVHlwZXMsXG4gICAgICAgIC4uLmRpc3B1dGVUeXBlcyxcbiAgICAgICAgLi4uaHJtcFR5cGVzLFxuICAgICAgICAuLi5wcm9wb3NlVHlwZXMsXG4gICAgICAgIC4uLnNsb3RUeXBlcyxcbiAgICAgICAgQWJyaWRnZWRDYW5kaWRhdGVSZWNlaXB0OiB7XG4gICAgICAgICAgICBwYXJhY2hhaW5JbmRleDogJ1BhcmFJZCcsXG4gICAgICAgICAgICByZWxheVBhcmVudDogJ0hhc2gnLFxuICAgICAgICAgICAgaGVhZERhdGE6ICdIZWFkRGF0YScsXG4gICAgICAgICAgICBjb2xsYXRvcjogJ0NvbGxhdG9ySWQnLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiAnQ29sbGF0b3JTaWduYXR1cmUnLFxuICAgICAgICAgICAgcG92QmxvY2tIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICBjb21taXRtZW50czogJ0NhbmRpZGF0ZUNvbW1pdG1lbnRzJ1xuICAgICAgICB9LFxuICAgICAgICBBYnJpZGdlZEhvc3RDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICBtYXhDb2RlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtYXhIZWFkRGF0YVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4VXB3YXJkUXVldWVDb3VudDogJ3UzMicsXG4gICAgICAgICAgICBtYXhVcHdhcmRRdWV1ZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4VXB3YXJkTWVzc2FnZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4VXB3YXJkTWVzc2FnZU51bVBlckNhbmRpZGF0ZTogJ3UzMicsXG4gICAgICAgICAgICBocm1wTWF4TWVzc2FnZU51bVBlckNhbmRpZGF0ZTogJ3UzMicsXG4gICAgICAgICAgICB2YWxpZGF0aW9uVXBncmFkZUZyZXF1ZW5jeTogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHZhbGlkYXRpb25VcGdyYWRlRGVsYXk6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQWJyaWRnZWRIcm1wQ2hhbm5lbDoge1xuICAgICAgICAgICAgbWF4Q2FwYWNpdHk6ICd1MzInLFxuICAgICAgICAgICAgbWF4VG90YWxTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1heE1lc3NhZ2VTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1zZ0NvdW50OiAndTMyJyxcbiAgICAgICAgICAgIHRvdGFsU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtcWNIZWFkOiAnT3B0aW9uPEhhc2g+J1xuICAgICAgICB9LFxuICAgICAgICBBcHByb3ZhbFZvdGluZ1BhcmFtczoge1xuICAgICAgICAgICAgbWF4QXBwcm92YWxDb2FsZXNjZUNvdW50OiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBBc3NpZ25tZW50SWQ6ICdBY2NvdW50SWQnLFxuICAgICAgICBBc3NpZ25tZW50S2luZDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBQYXJhY2hhaW46ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBQYXJhdGhyZWFkOiAnKENvbGxhdG9ySWQsIHUzMiknXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEFzeW5jQmFja2luZ1BhcmFtczoge1xuICAgICAgICAgICAgbWF4Q2FuZGlkYXRlRGVwdGg6ICd1MzInLFxuICAgICAgICAgICAgYWxsb3dlZEFuY2VzdHJ5TGVuOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBBdHRlc3RlZENhbmRpZGF0ZToge1xuICAgICAgICAgICAgY2FuZGlkYXRlOiAnQWJyaWRnZWRDYW5kaWRhdGVSZWNlaXB0JyxcbiAgICAgICAgICAgIHZhbGlkaXR5Vm90ZXM6ICdWZWM8VmFsaWRpdHlBdHRlc3RhdGlvbj4nLFxuICAgICAgICAgICAgdmFsaWRhdG9ySW5kaWNlczogJ0JpdFZlYydcbiAgICAgICAgfSxcbiAgICAgICAgQXV0aG9yaXR5RGlzY292ZXJ5SWQ6ICdBY2NvdW50SWQnLFxuICAgICAgICBBdmFpbGFiaWxpdHlCaXRmaWVsZDogJ0JpdFZlYycsXG4gICAgICAgIEF2YWlsYWJpbGl0eUJpdGZpZWxkUmVjb3JkOiB7XG4gICAgICAgICAgICBiaXRmaWVsZDogJ0F2YWlsYWJpbGl0eUJpdGZpZWxkJyxcbiAgICAgICAgICAgIHN1Ym1pdHRlZFR0OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIEJhY2tlZENhbmRpZGF0ZToge1xuICAgICAgICAgICAgY2FuZGlkYXRlOiAnQ29tbWl0dGVkQ2FuZGlkYXRlUmVjZWlwdCcsXG4gICAgICAgICAgICB2YWxpZGl0eVZvdGVzOiAnVmVjPFZhbGlkaXR5QXR0ZXN0YXRpb24+JyxcbiAgICAgICAgICAgIHZhbGlkYXRvckluZGljZXM6ICdCaXRWZWMnXG4gICAgICAgIH0sXG4gICAgICAgIEJhY2tpbmdTdGF0ZToge1xuICAgICAgICAgICAgY29uc3RyYWludHM6ICdDb25zdHJhaW50cycsXG4gICAgICAgICAgICBwZW5kaW5nQXZhaWxhYmlsaXR5OiAnVmVjPENhbmRpZGF0ZVBlbmRpbmdBdmFpbGFiaWxpdHk+J1xuICAgICAgICB9LFxuICAgICAgICBCdWZmZXJlZFNlc3Npb25DaGFuZ2U6IHtcbiAgICAgICAgICAgIGFwcGx5QXQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICB2YWxpZGF0b3JzOiAnVmVjPFZhbGlkYXRvcklkPicsXG4gICAgICAgICAgICBxdWV1ZWQ6ICdWZWM8VmFsaWRhdG9ySWQ+JyxcbiAgICAgICAgICAgIHNlc3Npb25JbmRleDogJ1Nlc3Npb25JbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgQ2FuZGlkYXRlQ29tbWl0bWVudHM6IHtcbiAgICAgICAgICAgIHVwd2FyZE1lc3NhZ2VzOiAnVmVjPFVwd2FyZE1lc3NhZ2U+JyxcbiAgICAgICAgICAgIGhvcml6b250YWxNZXNzYWdlczogJ1ZlYzxPdXRib3VuZEhybXBNZXNzYWdlPicsXG4gICAgICAgICAgICBuZXdWYWxpZGF0aW9uQ29kZTogJ09wdGlvbjxWYWxpZGF0aW9uQ29kZT4nLFxuICAgICAgICAgICAgaGVhZERhdGE6ICdIZWFkRGF0YScsXG4gICAgICAgICAgICBwcm9jZXNzZWREb3dud2FyZE1lc3NhZ2VzOiAndTMyJyxcbiAgICAgICAgICAgIGhybXBXYXRlcm1hcms6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQ2FuZGlkYXRlRGVzY3JpcHRvcjoge1xuICAgICAgICAgICAgcGFyYUlkOiAnUGFyYUlkJyxcbiAgICAgICAgICAgIHJlbGF5UGFyZW50OiAnUmVsYXlDaGFpbkhhc2gnLFxuICAgICAgICAgICAgY29sbGF0b3JJZDogJ0NvbGxhdG9ySWQnLFxuICAgICAgICAgICAgcGVyc2lzdGVkVmFsaWRhdGlvbkRhdGFIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICBwb3ZIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICBlcmFzdXJlUm9vdDogJ0hhc2gnLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiAnQ29sbGF0b3JTaWduYXR1cmUnLFxuICAgICAgICAgICAgcGFyYUhlYWQ6ICdIYXNoJyxcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db2RlSGFzaDogJ1ZhbGlkYXRpb25Db2RlSGFzaCdcbiAgICAgICAgfSxcbiAgICAgICAgQ2FuZGlkYXRlRXZlbnQ6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgQ2FuZGlkYXRlQmFja2VkOiAnKENhbmRpZGF0ZVJlY2VpcHQsIEhlYWREYXRhLCBDb3JlSW5kZXgsIEdyb3VwSW5kZXgpJyxcbiAgICAgICAgICAgICAgICBDYW5kaWRhdGVJbmNsdWRlZDogJyhDYW5kaWRhdGVSZWNlaXB0LCBIZWFkRGF0YSwgQ29yZUluZGV4LCBHcm91cEluZGV4KScsXG4gICAgICAgICAgICAgICAgQ2FuZGlkYXRlVGltZWRPdXQ6ICcoQ2FuZGlkYXRlUmVjZWlwdCwgSGVhZERhdGEsIENvcmVJbmRleCknXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENhbmRpZGF0ZUhhc2g6ICdIYXNoJyxcbiAgICAgICAgQ2FuZGlkYXRlSW5mbzoge1xuICAgICAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBDYW5kaWRhdGVQZW5kaW5nQXZhaWxhYmlsaXR5OiB7XG4gICAgICAgICAgICBjb3JlOiAnQ29yZUluZGV4JyxcbiAgICAgICAgICAgIGhhc2g6ICdDYW5kaWRhdGVIYXNoJyxcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdDYW5kaWRhdGVEZXNjcmlwdG9yJyxcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVZvdGVzOiAnQml0VmVjJyxcbiAgICAgICAgICAgIGJhY2tlcnM6ICdCaXRWZWMnLFxuICAgICAgICAgICAgcmVsYXlQYXJlbnROdW1iZXI6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBiYWNrZWRJbk51bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGJhY2tpbmdHcm91cDogJ0dyb3VwSW5kZXgnXG4gICAgICAgIH0sXG4gICAgICAgIENhbmRpZGF0ZVJlY2VpcHQ6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdDYW5kaWRhdGVEZXNjcmlwdG9yJyxcbiAgICAgICAgICAgIGNvbW1pdG1lbnRzSGFzaDogJ0hhc2gnXG4gICAgICAgIH0sXG4gICAgICAgIEdsb2JhbFZhbGlkYXRpb25EYXRhOiB7XG4gICAgICAgICAgICBtYXhDb2RlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtYXhIZWFkRGF0YVNpemU6ICd1MzInLFxuICAgICAgICAgICAgYmxvY2tOdW1iZXI6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQ29sbGF0b3JJZDogJ0gyNTYnLFxuICAgICAgICBDb2xsYXRvclNpZ25hdHVyZTogJ1NpZ25hdHVyZScsXG4gICAgICAgIENvbW1pdHRlZENhbmRpZGF0ZVJlY2VpcHQ6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdDYW5kaWRhdGVEZXNjcmlwdG9yJyxcbiAgICAgICAgICAgIGNvbW1pdG1lbnRzOiAnQ2FuZGlkYXRlQ29tbWl0bWVudHMnXG4gICAgICAgIH0sXG4gICAgICAgIENvbnN0cmFpbnRzOiB7XG4gICAgICAgICAgICBtaW5SZWxheVBhcmVudE51bWJlcjogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIG1heFBvdlNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4Q29kZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgdW1wUmVtYWluaW5nOiAndTMyJyxcbiAgICAgICAgICAgIHVtcFJlbWFpbmluZ0J5dGVzOiAndTMyJyxcbiAgICAgICAgICAgIG1heFVtcE51bVBlckNhbmRpZGF0ZTogJ3UzMicsXG4gICAgICAgICAgICBkbXBSZW1haW5pbmdNZXNzYWdlczogJ1ZlYzxCbG9ja051bWJlcj4nLFxuICAgICAgICAgICAgaHJtcEluYm91bmQ6ICdJbmJvdW5kSHJtcExpbWl0YXRpb25zJyxcbiAgICAgICAgICAgIGhybXBDaGFubmVsc091dDogJ0hhc2hNYXA8UGFyYUlkLCBPdXRib3VuZEhybXBDaGFubmVsTGltaXRhdGlvbnM+JyxcbiAgICAgICAgICAgIG1heEhybXBOdW1QZXJDYW5kaWRhdGU6ICd1MzInLFxuICAgICAgICAgICAgcmVxdWlyZWRQYXJlbnQ6ICdIZWFkRGF0YScsXG4gICAgICAgICAgICB2YWxpZGF0aW9uQ29kZUhhc2g6ICdWYWxpZGF0aW9uQ29kZUhhc2gnLFxuICAgICAgICAgICAgdXBncmFkZVJlc3RyaWN0aW9uOiAnT3B0aW9uPFVwZ3JhZGVSZXN0cmljdGlvbj4nLFxuICAgICAgICAgICAgZnV0dXJlVmFsaWRhdGlvbkNvZGU6ICdPcHRpb248KEJsb2NrTnVtYmVyLCBWYWxpZGF0aW9uQ29kZUhhc2gpPidcbiAgICAgICAgfSxcbiAgICAgICAgQ29yZUFzc2lnbm1lbnQ6IHtcbiAgICAgICAgICAgIGNvcmU6ICdDb3JlSW5kZXgnLFxuICAgICAgICAgICAgcGFyYUlkOiAnUGFyYUlkJyxcbiAgICAgICAgICAgIGtpbmQ6ICdBc3NpZ25tZW50S2luZCcsXG4gICAgICAgICAgICBncm91cElkeDogJ0dyb3VwSW5kZXgnXG4gICAgICAgIH0sXG4gICAgICAgIENvcmVJbmRleDogJ3UzMicsXG4gICAgICAgIENvcmVPY2N1cGllZDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBQYXJhdGhyZWFkOiAnUGFyYXRocmVhZEVudHJ5JyxcbiAgICAgICAgICAgICAgICBQYXJhY2hhaW46ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDb3JlU3RhdGU6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgT2NjdXBpZWQ6ICdPY2N1cGllZENvcmUnLFxuICAgICAgICAgICAgICAgIFNjaGVkdWxlZDogJ1NjaGVkdWxlZENvcmUnLFxuICAgICAgICAgICAgICAgIEZyZWU6ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBEaXNwdXRlUHJvb2Y6IHtcbiAgICAgICAgICAgIHRpbWVTbG90OiAnRGlzcHV0ZXNUaW1lU2xvdCcsXG4gICAgICAgICAgICBraW5kOiAnU2xhc2hpbmdPZmZlbmNlS2luZCcsXG4gICAgICAgICAgICB2YWxpZGF0b3JJbmRleDogJ1ZhbGlkYXRvckluZGV4JyxcbiAgICAgICAgICAgIHZhbGlkYXRvcklkOiAnVmFsaWRhdG9ySWQnXG4gICAgICAgIH0sXG4gICAgICAgIERpc3B1dGVzVGltZVNsb3Q6IHtcbiAgICAgICAgICAgIHNlc3Npb25JbmRleDogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICBjYW5kaWRhdGVIYXNoOiAnQ2FuZGlkYXRlSGFzaCdcbiAgICAgICAgfSxcbiAgICAgICAgRG91YmxlVm90ZVJlcG9ydDoge1xuICAgICAgICAgICAgaWRlbnRpdHk6ICdWYWxpZGF0b3JJZCcsXG4gICAgICAgICAgICBmaXJzdDogJyhTdGF0ZW1lbnQsIFZhbGlkYXRvclNpZ25hdHVyZSknLFxuICAgICAgICAgICAgc2Vjb25kOiAnKFN0YXRlbWVudCwgVmFsaWRhdG9yU2lnbmF0dXJlKScsXG4gICAgICAgICAgICBwcm9vZjogJ01lbWJlcnNoaXBQcm9vZicsXG4gICAgICAgICAgICBzaWduaW5nQ29udGV4dDogJ1NpZ25pbmdDb250ZXh0J1xuICAgICAgICB9LFxuICAgICAgICBEb3dud2FyZE1lc3NhZ2U6ICdCeXRlcycsXG4gICAgICAgIEdyb3VwSW5kZXg6ICd1MzInLFxuICAgICAgICBHcm91cFJvdGF0aW9uSW5mbzoge1xuICAgICAgICAgICAgc2Vzc2lvblN0YXJ0QmxvY2s6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBncm91cFJvdGF0aW9uRnJlcXVlbmN5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgbm93OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIEdsb2JhbFZhbGlkYXRpb25TY2hlZHVsZToge1xuICAgICAgICAgICAgbWF4Q29kZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4SGVhZERhdGFTaXplOiAndTMyJyxcbiAgICAgICAgICAgIGJsb2NrTnVtYmVyOiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIEhlYWREYXRhOiAnQnl0ZXMnLFxuICAgICAgICBIb3N0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgbWF4Q29kZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgbWF4SGVhZERhdGFTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1heFVwd2FyZFF1ZXVlQ291bnQ6ICd1MzInLFxuICAgICAgICAgICAgbWF4VXB3YXJkUXVldWVTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1heFVwd2FyZE1lc3NhZ2VTaXplOiAndTMyJyxcbiAgICAgICAgICAgIG1heFVwd2FyZE1lc3NhZ2VOdW1QZXJDYW5kaWRhdGU6ICd1MzInLFxuICAgICAgICAgICAgaHJtcE1heE1lc3NhZ2VOdW1QZXJDYW5kaWRhdGU6ICd1MzInLFxuICAgICAgICAgICAgdmFsaWRhdGlvblVwZ3JhZGVGcmVxdWVuY3k6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICB2YWxpZGF0aW9uVXBncmFkZURlbGF5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgbWF4UG92U2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtYXhEb3dud2FyZE1lc3NhZ2VTaXplOiAndTMyJyxcbiAgICAgICAgICAgIHByZWZlcnJlZERpc3BhdGNoYWJsZVVwd2FyZE1lc3NhZ2VzU3RlcFdlaWdodDogJ1dlaWdodCcsXG4gICAgICAgICAgICBocm1wTWF4UGFyYWNoYWluT3V0Ym91bmRDaGFubmVsczogJ3UzMicsXG4gICAgICAgICAgICBocm1wTWF4UGFyYXRocmVhZE91dGJvdW5kQ2hhbm5lbHM6ICd1MzInLFxuICAgICAgICAgICAgaHJtcE9wZW5SZXF1ZXN0VHRsOiAndTMyJyxcbiAgICAgICAgICAgIGhybXBTZW5kZXJEZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBocm1wUmVjaXBpZW50RGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgaHJtcENoYW5uZWxNYXhDYXBhY2l0eTogJ3UzMicsXG4gICAgICAgICAgICBocm1wQ2hhbm5lbE1heFRvdGFsU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBocm1wTWF4UGFyYWNoYWluSW5ib3VuZENoYW5uZWxzOiAndTMyJyxcbiAgICAgICAgICAgIGhybXBNYXhQYXJhdGhyZWFkSW5ib3VuZENoYW5uZWxzOiAndTMyJyxcbiAgICAgICAgICAgIGhybXBDaGFubmVsTWF4TWVzc2FnZVNpemU6ICd1MzInLFxuICAgICAgICAgICAgY29kZVJldGVudGlvblBlcmlvZDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHBhcmF0aHJlYWRDb3JlczogJ3UzMicsXG4gICAgICAgICAgICBwYXJhdGhyZWFkUmV0cmllczogJ3UzMicsXG4gICAgICAgICAgICBncm91cFJvdGF0aW9uRnJlcXVlbmN5OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgY2hhaW5BdmFpbGFiaWxpdHlQZXJpb2Q6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICB0aHJlYWRBdmFpbGFiaWxpdHlQZXJpb2Q6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBzY2hlZHVsaW5nTG9va2FoZWFkOiAndTMyJyxcbiAgICAgICAgICAgIG1heFZhbGlkYXRvcnNQZXJDb3JlOiAnT3B0aW9uPHUzMj4nLFxuICAgICAgICAgICAgbWF4VmFsaWRhdG9yczogJ09wdGlvbjx1MzI+JyxcbiAgICAgICAgICAgIGRpc3B1dGVQZXJpb2Q6ICdTZXNzaW9uSW5kZXgnLFxuICAgICAgICAgICAgZGlzcHV0ZVBvc3RDb25jbHVzaW9uQWNjZXB0YW5jZVBlcmlvZDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGRpc3B1dGVNYXhTcGFtU2xvdHM6ICd1MzInLFxuICAgICAgICAgICAgZGlzcHV0ZUNvbmNsdXNpb25CeVRpbWVPdXRQZXJpb2Q6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBub1Nob3dTbG90czogJ3UzMicsXG4gICAgICAgICAgICBuRGVsYXlUcmFuY2hlczogJ3UzMicsXG4gICAgICAgICAgICB6ZXJvdGhEZWxheVRyYW5jaGVXaWR0aDogJ3UzMicsXG4gICAgICAgICAgICBuZWVkZWRBcHByb3ZhbHM6ICd1MzInLFxuICAgICAgICAgICAgcmVsYXlWcmZNb2R1bG9TYW1wbGVzOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBJbmJvdW5kRG93bndhcmRNZXNzYWdlOiB7XG4gICAgICAgICAgICBwdWJTZW50QXQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBwdWJNc2c6ICdEb3dud2FyZE1lc3NhZ2UnXG4gICAgICAgIH0sXG4gICAgICAgIEluYm91bmRIcm1wTWVzc2FnZToge1xuICAgICAgICAgICAgc2VudEF0OiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgZGF0YTogJ0J5dGVzJ1xuICAgICAgICB9LFxuICAgICAgICBJbmJvdW5kSHJtcExpbWl0YXRpb25zOiB7XG4gICAgICAgICAgICB2YWxpZFdhdGVybWFya3M6ICdWZWM8QmxvY2tOdW1iZXI+J1xuICAgICAgICB9LFxuICAgICAgICBJbmJvdW5kSHJtcE1lc3NhZ2VzOiAnVmVjPEluYm91bmRIcm1wTWVzc2FnZT4nLFxuICAgICAgICBMb2NhbFZhbGlkYXRpb25EYXRhOiB7XG4gICAgICAgICAgICBwYXJlbnRIZWFkOiAnSGVhZERhdGEnLFxuICAgICAgICAgICAgYmFsYW5jZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgY29kZVVwZ3JhZGVBbGxvd2VkOiAnT3B0aW9uPEJsb2NrTnVtYmVyPidcbiAgICAgICAgfSxcbiAgICAgICAgTWVzc2FnZUluZ2VzdGlvblR5cGU6IHtcbiAgICAgICAgICAgIGRvd253YXJkTWVzc2FnZXM6ICdWZWM8SW5ib3VuZERvd253YXJkTWVzc2FnZT4nLFxuICAgICAgICAgICAgaG9yaXpvbnRhbE1lc3NhZ2VzOiAnQlRyZWVNYXA8UGFyYUlkLCBJbmJvdW5kSHJtcE1lc3NhZ2VzPidcbiAgICAgICAgfSxcbiAgICAgICAgTWVzc2FnZVF1ZXVlQ2hhaW46ICdSZWxheUNoYWluSGFzaCcsXG4gICAgICAgIE5vZGVGZWF0dXJlczogJ0JpdFZlYycsXG4gICAgICAgIE9jY3VwaWVkQ29yZToge1xuICAgICAgICAgICAgbmV4dFVwT25BdmFpbGFibGU6ICdPcHRpb248U2NoZWR1bGVkQ29yZT4nLFxuICAgICAgICAgICAgb2NjdXBpZWRTaW5jZTogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIHRpbWVPdXRBdDogJ0Jsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIG5leHRVcE9uVGltZU91dDogJ09wdGlvbjxTY2hlZHVsZWRDb3JlPicsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHk6ICdCaXRWZWMnLFxuICAgICAgICAgICAgZ3JvdXBSZXNwb25zaWJsZTogJ0dyb3VwSW5kZXgnLFxuICAgICAgICAgICAgY2FuZGlkYXRlSGFzaDogJ0NhbmRpZGF0ZUhhc2gnLFxuICAgICAgICAgICAgY2FuZGlkYXRlRGVzY3JpcHRvcjogJ0NhbmRpZGF0ZURlc2NyaXB0b3InXG4gICAgICAgIH0sXG4gICAgICAgIE9jY3VwaWVkQ29yZUFzc3VtcHRpb246IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0luY2x1ZGVkLCcsICdUaW1lZE91dCcsICdGcmVlJ11cbiAgICAgICAgfSxcbiAgICAgICAgT3V0Ym91bmRIcm1wQ2hhbm5lbExpbWl0YXRpb25zOiB7XG4gICAgICAgICAgICBieXRlc1JlbWFpbmluZzogJ3UzMicsXG4gICAgICAgICAgICBtZXNzYWdlc1JlbWFpbmluZzogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgT3V0Ym91bmRIcm1wTWVzc2FnZToge1xuICAgICAgICAgICAgcmVjaXBpZW50OiAndTMyJyxcbiAgICAgICAgICAgIGRhdGE6ICdCeXRlcydcbiAgICAgICAgfSxcbiAgICAgICAgUGVuZGluZ1NsYXNoZXM6IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIHNsYXNoS2V5czogJ2tleXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2xhc2hLZXlzOiAnQlRyZWVNYXA8VmFsaWRhdG9ySW5kZXgsIFZhbGlkYXRvcklkPicsXG4gICAgICAgICAgICBraW5kOiAnU2xhc2hpbmdPZmZlbmNlS2luZCdcbiAgICAgICAgfSxcbiAgICAgICAgUGFyYWNoYWluRGlzcGF0Y2hPcmlnaW46IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1NpZ25lZCcsICdQYXJhY2hhaW4nLCAnUm9vdCddXG4gICAgICAgIH0sXG4gICAgICAgIFBhcmFjaGFpbkluaGVyZW50RGF0YToge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkRhdGE6ICdQZXJzaXN0ZWRWYWxpZGF0aW9uRGF0YScsXG4gICAgICAgICAgICByZWxheUNoYWluU3RhdGU6ICdTdG9yYWdlUHJvb2YnLFxuICAgICAgICAgICAgZG93bndhcmRNZXNzYWdlczogJ1ZlYzxJbmJvdW5kRG93bndhcmRNZXNzYWdlPicsXG4gICAgICAgICAgICBob3Jpem9udGFsTWVzc2FnZXM6ICdCVHJlZU1hcDxQYXJhSWQsIFZlY0luYm91bmRIcm1wTWVzc2FnZT4nXG4gICAgICAgIH0sXG4gICAgICAgIFBhcmFjaGFpbnNJbmhlcmVudERhdGE6IHtcbiAgICAgICAgICAgIGJpdGZpZWxkczogJ1NpZ25lZEF2YWlsYWJpbGl0eUJpdGZpZWxkcycsXG4gICAgICAgICAgICBiYWNrZWRDYW5kaWRhdGVzOiAnVmVjPEJhY2tlZENhbmRpZGF0ZT4nLFxuICAgICAgICAgICAgZGlzcHV0ZXM6ICdNdWx0aURpc3B1dGVTdGF0ZW1lbnRTZXQnLFxuICAgICAgICAgICAgcGFyZW50SGVhZGVyOiAnSGVhZGVyJ1xuICAgICAgICB9LFxuICAgICAgICBQYXJhR2VuZXNpc0FyZ3M6IHtcbiAgICAgICAgICAgIGdlbmVzaXNIZWFkOiAnQnl0ZXMnLFxuICAgICAgICAgICAgdmFsaWRhdGlvbkNvZGU6ICdCeXRlcycsXG4gICAgICAgICAgICBwYXJhY2hhaW46ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBQYXJhSWQ6ICd1MzInLFxuICAgICAgICBQYXJhSW5mbzoge1xuICAgICAgICAgICAgbWFuYWdlcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBsb2NrZWQ6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBQYXJhTGlmZWN5Y2xlOiB7XG4gICAgICAgICAgICBfZW51bTogWydPbmJvYXJkaW5nJywgJ1BhcmF0aHJlYWQnLCAnUGFyYWNoYWluJywgJ1VwZ3JhZGluZ1RvUGFyYWNoYWluJywgJ0Rvd25ncmFkaW5nVG9QYXJhdGhyZWFkJywgJ091dGdvaW5nUGFyYXRocmVhZCcsICdPdXRnb2luZ1BhcmFjaGFpbiddXG4gICAgICAgIH0sXG4gICAgICAgIFBhcmFQYXN0Q29kZU1ldGE6IHtcbiAgICAgICAgICAgIHVwZ3JhZGVUaW1lczogJ1ZlYzxSZXBsYWNlbWVudFRpbWVzPicsXG4gICAgICAgICAgICBsYXN0UHJ1bmVkOiAnT3B0aW9uPEJsb2NrTnVtYmVyPidcbiAgICAgICAgfSxcbiAgICAgICAgUGFyYVNjaGVkdWxpbmc6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0Fsd2F5cycsICdEeW5hbWljJ11cbiAgICAgICAgfSxcbiAgICAgICAgUGFyYXRocmVhZENsYWltOiAnKFBhcmFJZCwgQ29sbGF0b3JJZCknLFxuICAgICAgICBQYXJhdGhyZWFkQ2xhaW1RdWV1ZToge1xuICAgICAgICAgICAgcXVldWU6ICdWZWM8UXVldWVkUGFyYXRocmVhZD4nLFxuICAgICAgICAgICAgbmV4dENvcmVPZmZzZXQ6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFBhcmF0aHJlYWRFbnRyeToge1xuICAgICAgICAgICAgY2xhaW06ICdQYXJhdGhyZWFkQ2xhaW0nLFxuICAgICAgICAgICAgcmV0cmllczogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgUGFyYVZhbGlkYXRvckluZGV4OiAndTMyJyxcbiAgICAgICAgUGVyc2lzdGVkVmFsaWRhdGlvbkRhdGE6IHtcbiAgICAgICAgICAgIHBhcmVudEhlYWQ6ICdIZWFkRGF0YScsXG4gICAgICAgICAgICByZWxheVBhcmVudE51bWJlcjogJ1JlbGF5Q2hhaW5CbG9ja051bWJlcicsXG4gICAgICAgICAgICByZWxheVBhcmVudFN0b3JhZ2VSb290OiAnSGFzaCcsXG4gICAgICAgICAgICBtYXhQb3ZTaXplOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBQdmZDaGVja1N0YXRlbWVudDoge1xuICAgICAgICAgICAgYWNjZXB0OiAnYm9vbCcsXG4gICAgICAgICAgICBzdWJqZWN0OiAnVmFsaWRhdGlvbkNvZGVIYXNoJyxcbiAgICAgICAgICAgIHNlc3Npb25JbmRleDogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICB2YWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCdcbiAgICAgICAgfSxcbiAgICAgICAgUXVldWVkUGFyYXRocmVhZDoge1xuICAgICAgICAgICAgY2xhaW06ICdQYXJhdGhyZWFkRW50cnknLFxuICAgICAgICAgICAgY29yZU9mZnNldDogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgUmVsYXlCbG9ja051bWJlcjogJ3UzMicsXG4gICAgICAgIFJlbGF5Q2hhaW5CbG9ja051bWJlcjogJ1JlbGF5QmxvY2tOdW1iZXInLFxuICAgICAgICBSZWxheUhhc2g6ICdIYXNoJyxcbiAgICAgICAgUmVsYXlDaGFpbkhhc2g6ICdSZWxheUhhc2gnLFxuICAgICAgICBSZW1hcms6ICdbdTg7IDMyXScsXG4gICAgICAgIFJlcGxhY2VtZW50VGltZXM6IHtcbiAgICAgICAgICAgIGV4cGVjdGVkQXQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBhY3RpdmF0ZWRBdDogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBSZXRyaWFibGU6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgTmV2ZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBXaXRoUmV0cmllczogJ3UzMidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgU2NoZWR1bGVkQ29yZToge1xuICAgICAgICAgICAgcGFyYUlkOiAnUGFyYUlkJyxcbiAgICAgICAgICAgIGNvbGxhdG9yOiAnT3B0aW9uPENvbGxhdG9ySWQ+J1xuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsaW5nOiB7XG4gICAgICAgICAgICBfZW51bTogWydBbHdheXMnLCAnRHluYW1pYyddXG4gICAgICAgIH0sXG4gICAgICAgIFNjcmFwZWRPbkNoYWluVm90ZXM6IHtcbiAgICAgICAgICAgIHNlc3Npb246ICdTZXNzaW9uSW5kZXgnLFxuICAgICAgICAgICAgYmFja2luZ1ZhbGlkYXRvcnNQZXJDYW5kaWRhdGU6ICdWZWM8KENhbmRpZGF0ZVJlY2VpcHQsIFZlYzwoUGFyYVZhbGlkYXRvckluZGV4LCBWYWxpZGl0eUF0dGVzdGF0aW9uKT4pPicsXG4gICAgICAgICAgICBkaXNwdXRlczogJ011bHRpRGlzcHV0ZVN0YXRlbWVudFNldCdcbiAgICAgICAgfSxcbiAgICAgICAgU2Vzc2lvbkluZm86IHtcbiAgICAgICAgICAgIGFjdGl2ZVZhbGlkYXRvckluZGljZXM6ICdWZWM8UGFyYVZhbGlkYXRvckluZGV4PicsXG4gICAgICAgICAgICByYW5kb21TZWVkOiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgZGlzcHV0ZVBlcmlvZDogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICB2YWxpZGF0b3JzOiAnVmVjPFZhbGlkYXRvcklkPicsXG4gICAgICAgICAgICBkaXNjb3ZlcnlLZXlzOiAnVmVjPEF1dGhvcml0eURpc2NvdmVyeUlkPicsXG4gICAgICAgICAgICBhc3NpZ25tZW50S2V5czogJ1ZlYzxBc3NpZ25tZW50SWQ+JyxcbiAgICAgICAgICAgIHZhbGlkYXRvckdyb3VwczogJ1ZlYzxWZWM8VmFsaWRhdG9ySW5kZXg+PicsXG4gICAgICAgICAgICBuQ29yZXM6ICd1MzInLFxuICAgICAgICAgICAgemVyb3RoRGVsYXlUcmFuY2hlV2lkdGg6ICd1MzInLFxuICAgICAgICAgICAgcmVsYXlWcmZNb2R1bG9TYW1wbGVzOiAndTMyJyxcbiAgICAgICAgICAgIG5EZWxheVRyYW5jaGVzOiAndTMyJyxcbiAgICAgICAgICAgIG5vU2hvd1Nsb3RzOiAndTMyJyxcbiAgICAgICAgICAgIG5lZWRlZEFwcHJvdmFsczogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgT2xkVjFTZXNzaW9uSW5mbzoge1xuICAgICAgICAgICAgdmFsaWRhdG9yczogJ1ZlYzxWYWxpZGF0b3JJZD4nLFxuICAgICAgICAgICAgZGlzY292ZXJ5S2V5czogJ1ZlYzxBdXRob3JpdHlEaXNjb3ZlcnlJZD4nLFxuICAgICAgICAgICAgYXNzaWdubWVudEtleXM6ICdWZWM8QXNzaWdubWVudElkPicsXG4gICAgICAgICAgICB2YWxpZGF0b3JHcm91cHM6ICdWZWM8VmVjPFBhcmFWYWxpZGF0b3JJbmRleD4+JyxcbiAgICAgICAgICAgIG5Db3JlczogJ3UzMicsXG4gICAgICAgICAgICB6ZXJvdGhEZWxheVRyYW5jaGVXaWR0aDogJ3UzMicsXG4gICAgICAgICAgICByZWxheVZyZk1vZHVsb1NhbXBsZXM6ICd1MzInLFxuICAgICAgICAgICAgbkRlbGF5VHJhbmNoZXM6ICd1MzInLFxuICAgICAgICAgICAgbm9TaG93U2xvdHM6ICd1MzInLFxuICAgICAgICAgICAgbmVlZGVkQXBwcm92YWxzOiAndTMyJ1xuICAgICAgICB9LFxuICAgICAgICBTZXNzaW9uSW5mb1ZhbGlkYXRvckdyb3VwOiAnVmVjPFBhcmFWYWxpZGF0b3JJbmRleD4nLFxuICAgICAgICBTaWduZWRBdmFpbGFiaWxpdHlCaXRmaWVsZDoge1xuICAgICAgICAgICAgcGF5bG9hZDogJ0JpdFZlYycsXG4gICAgICAgICAgICB2YWxpZGF0b3JJbmRleDogJ1BhcmFWYWxpZGF0b3JJbmRleCcsXG4gICAgICAgICAgICBzaWduYXR1cmU6ICdWYWxpZGF0b3JTaWduYXR1cmUnXG4gICAgICAgIH0sXG4gICAgICAgIFNpZ25lZEF2YWlsYWJpbGl0eUJpdGZpZWxkczogJ1ZlYzxTaWduZWRBdmFpbGFiaWxpdHlCaXRmaWVsZD4nLFxuICAgICAgICBTaWduaW5nQ29udGV4dDoge1xuICAgICAgICAgICAgc2Vzc2lvbkluZGV4OiAnU2Vzc2lvbkluZGV4JyxcbiAgICAgICAgICAgIHBhcmVudEhhc2g6ICdIYXNoJ1xuICAgICAgICB9LFxuICAgICAgICBTbGFzaGluZ09mZmVuY2VLaW5kOiB7XG4gICAgICAgICAgICBfZW51bTogWydGb3JJbnZhbGlkJywgJ0FnYWluc3RWYWxpZCddXG4gICAgICAgIH0sXG4gICAgICAgIFN0YXRlbWVudDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBOZXZlcjogJ051bGwnLCAvLyBzdGFydHMgYXQgMVxuICAgICAgICAgICAgICAgIENhbmRpZGF0ZTogJ0hhc2gnLFxuICAgICAgICAgICAgICAgIFZhbGlkOiAnSGFzaCcsXG4gICAgICAgICAgICAgICAgSW52YWxpZDogJ0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFRyYW5zaWVudFZhbGlkYXRpb25EYXRhOiB7XG4gICAgICAgICAgICBtYXhDb2RlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBtYXhIZWFkRGF0YVNpemU6ICd1MzInLFxuICAgICAgICAgICAgYmFsYW5jZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgY29kZVVwZ3JhZGVBbGxvd2VkOiAnT3B0aW9uPEJsb2NrTnVtYmVyPicsXG4gICAgICAgICAgICBkbXFMZW5ndGg6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFVwZ3JhZGVHb0FoZWFkOiB7XG4gICAgICAgICAgICBfZW51bTogWydBYm9ydCcsICdHb0FoZWFkJ11cbiAgICAgICAgfSxcbiAgICAgICAgVXBncmFkZVJlc3RyaWN0aW9uOiB7XG4gICAgICAgICAgICBfZW51bTogWydQcmVzZW50J11cbiAgICAgICAgfSxcbiAgICAgICAgVXB3YXJkTWVzc2FnZTogJ0J5dGVzJyxcbiAgICAgICAgVmFsaWRhdGlvbkZ1bmN0aW9uUGFyYW1zOiB7XG4gICAgICAgICAgICBtYXhDb2RlU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICByZWxheUNoYWluSGVpZ2h0OiAnUmVsYXlDaGFpbkJsb2NrTnVtYmVyJyxcbiAgICAgICAgICAgIGNvZGVVcGdyYWRlQWxsb3dlZDogJ09wdGlvbjxSZWxheUNoYWluQmxvY2tOdW1iZXI+J1xuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0aW9uQ29kZTogJ0J5dGVzJyxcbiAgICAgICAgVmFsaWRhdGlvbkNvZGVIYXNoOiAnSGFzaCcsXG4gICAgICAgIFZhbGlkYXRpb25EYXRhOiB7XG4gICAgICAgICAgICBwZXJzaXN0ZWQ6ICdQZXJzaXN0ZWRWYWxpZGF0aW9uRGF0YScsXG4gICAgICAgICAgICB0cmFuc2llbnQ6ICdUcmFuc2llbnRWYWxpZGF0aW9uRGF0YSdcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdGlvbkRhdGFUeXBlOiB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRGF0YTogJ1ZhbGlkYXRpb25EYXRhJyxcbiAgICAgICAgICAgIHJlbGF5Q2hhaW5TdGF0ZTogJ1ZlYzxCeXRlcz4nXG4gICAgICAgIH0sXG4gICAgICAgIFZhbGlkYXRvclNpZ25hdHVyZTogJ1NpZ25hdHVyZScsXG4gICAgICAgIFZhbGlkaXR5QXR0ZXN0YXRpb246IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgTmV2ZXI6ICdOdWxsJywgLy8gc3RhcnRzIGF0IDFcbiAgICAgICAgICAgICAgICBJbXBsaWNpdDogJ1ZhbGlkYXRvclNpZ25hdHVyZScsXG4gICAgICAgICAgICAgICAgRXhwbGljaXQ6ICdWYWxpZGF0b3JTaWduYXR1cmUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIE1lc3NhZ2luZ1N0YXRlU25hcHNob3Q6IHtcbiAgICAgICAgICAgIHJlbGF5RGlzcGF0Y2hRdWV1ZVNpemU6ICcodTMyLCB1MzIpJyxcbiAgICAgICAgICAgIGVncmVzc0NoYW5uZWxzOiAnVmVjPE1lc3NhZ2luZ1N0YXRlU25hcHNob3RFZ3Jlc3NFbnRyeT4nXG4gICAgICAgIH0sXG4gICAgICAgIE1lc3NhZ2luZ1N0YXRlU25hcHNob3RFZ3Jlc3NFbnRyeTogJyhQYXJhSWQsIEFicmlkZ2VkSHJtcENoYW5uZWwpJyxcbiAgICAgICAgU3lzdGVtSW5oZXJlbnREYXRhOiAnUGFyYWNoYWluSW5oZXJlbnREYXRhJyxcbiAgICAgICAgVmVjSW5ib3VuZEhybXBNZXNzYWdlOiAnVmVjPEluYm91bmRIcm1wTWVzc2FnZT4nXG4gICAgfVxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIHNvcnQta2V5cyAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIEhybXBDaGFubmVsOiB7XG4gICAgICAgIG1heENhcGFjaXR5OiAndTMyJyxcbiAgICAgICAgbWF4VG90YWxTaXplOiAndTMyJyxcbiAgICAgICAgbWF4TWVzc2FnZVNpemU6ICd1MzInLFxuICAgICAgICBtc2dDb3VudDogJ3UzMicsXG4gICAgICAgIHRvdGFsU2l6ZTogJ3UzMicsXG4gICAgICAgIG1xY0hlYWQ6ICdPcHRpb248SGFzaD4nLFxuICAgICAgICBzZW5kZXJEZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgIHJlY2lwaWVudERlcG9zaXQ6ICdCYWxhbmNlJ1xuICAgIH0sXG4gICAgSHJtcENoYW5uZWxJZDoge1xuICAgICAgICBzZW5kZXI6ICd1MzInLFxuICAgICAgICByZWNlaXZlcjogJ3UzMidcbiAgICB9LFxuICAgIEhybXBPcGVuQ2hhbm5lbFJlcXVlc3Q6IHtcbiAgICAgICAgY29uZmlybWVkOiAnYm9vbCcsXG4gICAgICAgIGFnZTogJ1Nlc3Npb25JbmRleCcsXG4gICAgICAgIHNlbmRlckRlcG9zaXQ6ICdCYWxhbmNlJyxcbiAgICAgICAgbWF4TWVzc2FnZVNpemU6ICd1MzInLFxuICAgICAgICBtYXhDYXBhY2l0eTogJ3UzMicsXG4gICAgICAgIG1heFRvdGFsU2l6ZTogJ3UzMidcbiAgICB9XG59O1xuIiwiY29uc3QgUEhfVjFfVE9fVjIgPSB7XG4gICAgYXNzdW1lZF92YWxpZGF0aW9uX2RhdGE6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBwZXJzaXN0ZWQgdmFsaWRhdGlvbiBkYXRhIGZvciB0aGUgZ2l2ZW4gYFBhcmFJZGAgYWxvbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2YWxpZGF0aW9uIGNvZGUgaGFzaC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzaCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248KFBlcnNpc3RlZFZhbGlkYXRpb25EYXRhLCBWYWxpZGF0aW9uQ29kZUhhc2gpPidcbiAgICB9LFxuICAgIGF2YWlsYWJpbGl0eV9jb3Jlczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1lpZWxkcyBpbmZvcm1hdGlvbiBvbiBhbGwgYXZhaWxhYmlsaXR5IGNvcmVzIGFzIHJlbGV2YW50IHRvIHRoZSBjaGlsZCBibG9jay4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVmVjPENvcmVTdGF0ZT4nXG4gICAgfSxcbiAgICBjYW5kaWRhdGVfZXZlbnRzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IGEgdmVjdG9yIG9mIGV2ZW50cyBjb25jZXJuaW5nIGNhbmRpZGF0ZXMgdGhhdCBvY2N1cnJlZCB3aXRoaW4gYSBibG9jay4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVmVjPENhbmRpZGF0ZUV2ZW50PidcbiAgICB9LFxuICAgIGNhbmRpZGF0ZV9wZW5kaW5nX2F2YWlsYWJpbGl0eToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgcmVjZWlwdCBvZiBhIGNhbmRpZGF0ZSBwZW5kaW5nIGF2YWlsYWJpbGl0eS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPENvbW1pdHRlZENhbmRpZGF0ZVJlY2VpcHQ+J1xuICAgIH0sXG4gICAgY2hlY2tfdmFsaWRhdGlvbl9vdXRwdXRzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWxpZGF0aW9uIG91dHB1dHMgcGFzcyB0aGUgYWNjZXB0YW5jZSBjcml0ZXJpYS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3V0cHV0cycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0NhbmRpZGF0ZUNvbW1pdG1lbnRzJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICB9LFxuICAgIGRtcV9jb250ZW50czoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCBhbGwgdGhlIHBlbmRpbmcgaW5ib3VuZCBtZXNzYWdlcyBpbiB0aGUgZG93bndhcmQgbWVzc2FnZSBxdWV1ZSBmb3IgYSBwYXJhLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwYXJhSWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXJhSWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdWZWM8SW5ib3VuZERvd253YXJkTWVzc2FnZT4nXG4gICAgfSxcbiAgICBpbmJvdW5kX2hybXBfY2hhbm5lbHNfY29udGVudHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGNvbnRlbnRzIG9mIGFsbCBjaGFubmVscyBhZGRyZXNzZWQgdG8gdGhlIGdpdmVuIHJlY2lwaWVudC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPEluYm91bmRIcm1wTWVzc2FnZT4nXG4gICAgfSxcbiAgICBvbl9jaGFpbl92b3Rlczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1NjcmFwZSBkaXNwdXRlIHJlbGV2YW50IGZyb20gb24tY2hhaW4sIGJhY2tpbmcgdm90ZXMgYW5kIHJlc29sdmVkIGRpc3B1dGVzLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdPcHRpb248U2NyYXBlZE9uQ2hhaW5Wb3Rlcz4nXG4gICAgfSxcbiAgICBwZXJzaXN0ZWRfdmFsaWRhdGlvbl9kYXRhOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnWWllbGRzIHRoZSBwZXJzaXN0ZWQgdmFsaWRhdGlvbiBkYXRhIGZvciB0aGUgZ2l2ZW4gYFBhcmFJZGAgYWxvbmcgd2l0aCBhbiBhc3N1bXB0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgaWYgdGhlIHBhcmEgY3VycmVudGx5IG9jY3VwaWVzIGEgY29yZS4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXNzdW1wdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09jY3VwaWVkQ29yZUFzc3VtcHRpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248UGVyc2lzdGVkVmFsaWRhdGlvbkRhdGE+J1xuICAgIH0sXG4gICAgc2Vzc2lvbl9pbmRleF9mb3JfY2hpbGQ6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzZXNzaW9uIGluZGV4IGV4cGVjdGVkIGF0IGEgY2hpbGQgb2YgdGhlIGJsb2NrLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdTZXNzaW9uSW5kZXgnXG4gICAgfSxcbiAgICB2YWxpZGF0aW9uX2NvZGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdGZXRjaCB0aGUgdmFsaWRhdGlvbiBjb2RlIHVzZWQgYnkgYSBwYXJhLCBtYWtpbmcgdGhlIGdpdmVuIGBPY2N1cGllZENvcmVBc3N1bXB0aW9uYC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXNzdW1wdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09jY3VwaWVkQ29yZUFzc3VtcHRpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248VmFsaWRhdGlvbkNvZGU+J1xuICAgIH0sXG4gICAgdmFsaWRhdGlvbl9jb2RlX2J5X2hhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIHZhbGlkYXRpb24gY29kZSBmcm9tIGl0cyBoYXNoLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdoYXNoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmFsaWRhdGlvbkNvZGVIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPFZhbGlkYXRpb25Db2RlPidcbiAgICB9LFxuICAgIHZhbGlkYXRvcl9ncm91cHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSB2YWxpZGF0b3IgZ3JvdXBzIGFuZCByb3RhdGlvbiBpbmZvIGxvY2FsaXplZCBiYXNlZCBvbiB0aGUgaHlwb3RoZXRpY2FsIGNoaWxkIG9mIGEgYmxvY2sgd2hvc2Ugc3RhdGUgIHRoaXMgaXMgaW52b2tlZCBvbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICcoVmVjPFZlYzxQYXJhVmFsaWRhdG9ySW5kZXg+PiwgR3JvdXBSb3RhdGlvbkluZm8pJ1xuICAgIH0sXG4gICAgdmFsaWRhdG9yczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgY3VycmVudCB2YWxpZGF0b3JzLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8VmFsaWRhdG9ySWQ+J1xuICAgIH1cbn07XG5jb25zdCBQSF9WMl9UT19WMyA9IHtcbiAgICBwdmZzX3JlcXVpcmVfcHJlY2hlY2s6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGNvZGUgaGFzaGVzIG9mIFBWRnMgdGhhdCByZXF1aXJlIHByZS1jaGVja2luZyBieSB2YWxpZGF0b3JzIGluIHRoZSBhY3RpdmUgc2V0LicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8VmFsaWRhdGlvbkNvZGVIYXNoPidcbiAgICB9LFxuICAgIHNlc3Npb25faW5mbzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgc2Vzc2lvbiBpbmZvIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiwgaWYgc3RvcmVkLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1Nlc3Npb25JbmRleCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxTZXNzaW9uSW5mbz4nXG4gICAgfSxcbiAgICBzdWJtaXRfcHZmX2NoZWNrX3N0YXRlbWVudDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Ym1pdHMgYSBQVkYgcHJlLWNoZWNraW5nIHN0YXRlbWVudCBpbnRvIHRoZSB0cmFuc2FjdGlvbiBwb29sLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdzdG10JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHZmQ2hlY2tTdGF0ZW1lbnQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdzaWduYXR1cmUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWYWxpZGF0b3JTaWduYXR1cmUnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH0sXG4gICAgdmFsaWRhdGlvbl9jb2RlX2hhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdGZXRjaCB0aGUgaGFzaCBvZiB0aGUgdmFsaWRhdGlvbiBjb2RlIHVzZWQgYnkgYSBwYXJhLCBtYWtpbmcgdGhlIGdpdmVuIGBPY2N1cGllZENvcmVBc3N1bXB0aW9uYC4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncGFyYUlkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGFyYUlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXNzdW1wdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09jY3VwaWVkQ29yZUFzc3VtcHRpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248VmFsaWRhdGlvbkNvZGVIYXNoPidcbiAgICB9XG59O1xuY29uc3QgUEhfVjMgPSB7XG4gICAgZGlzcHV0ZXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGFsbCBvbmNoYWluIGRpc3B1dGVzLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8KFNlc3Npb25JbmRleCwgQ2FuZGlkYXRlSGFzaCwgRGlzcHV0ZVN0YXRlKT4nXG4gICAgfVxufTtcbmNvbnN0IFBIX1Y0ID0ge1xuICAgIHNlc3Npb25fZXhlY3V0b3JfcGFyYW1zOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBleGVjdXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIHNlc3Npb24uJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Nlc3Npb25JbmRleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1Nlc3Npb25JbmRleCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxFeGVjdXRvclBhcmFtcz4nXG4gICAgfVxufTtcbmNvbnN0IFBIX1Y1ID0ge1xuICAgIGtleV9vd25lcnNoaXBfcHJvb2Y6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIGEgbWVya2xlIHByb29mIG9mIGEgdmFsaWRhdG9yIHNlc3Npb24ga2V5JyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbGlkYXRvcklkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmFsaWRhdG9ySWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248T3BhcXVlS2V5T3duZXJzaGlwUHJvb2Y+J1xuICAgIH0sXG4gICAgc3VibWl0X3JlcG9ydF9kaXNwdXRlX2xvc3Q6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJtaXQgYW4gdW5zaWduZWQgZXh0cmluc2ljIHRvIHNsYXNoIHZhbGlkYXRvcnMgd2hvIGxvc3QgYSBkaXNwdXRlIGFib3V0IGEgY2FuZGlkYXRlIG9mIGEgcGFzdCBzZXNzaW9uJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Rpc3B1dGVQcm9vZicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Rpc3B1dGVQcm9vZidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleU93bmVyc2hpcFByb29mJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3BhcXVlS2V5T3duZXJzaGlwUHJvb2YnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdPcHRpb248TnVsbD4nXG4gICAgfSxcbiAgICB1bmFwcGxpZWRfc2xhc2hlczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgYSBsaXN0IG9mIHZhbGlkYXRvcnMgdGhhdCBsb3N0IGEgcGFzdCBzZXNzaW9uIGRpc3B1dGUgYW5kIG5lZWQgdG8gYmUgc2xhc2hlZCcsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8KFNlc3Npb25JbmRleCwgQ2FuZGlkYXRlSGFzaCwgUGVuZGluZ1NsYXNoZXMpPidcbiAgICB9XG59O1xuY29uc3QgUEhfVjYgPSB7XG4gICAgbWluaW11bV9iYWNraW5nX3ZvdGVzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBiYWNraW5nIHZvdGVzIGZvciBhIHBhcmFjaGFpbiBjYW5kaWRhdGUuIFRoaXMgaXMgYSBzdGFnaW5nIG1ldGhvZCEgRG8gbm90IHVzZSBvbiBwcm9kdWN0aW9uIHJ1bnRpbWVzIScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICd1MzInXG4gICAgfVxufTtcbmNvbnN0IFBIX1Y3ID0ge1xuICAgIGFzeW5jX2JhY2tpbmdfcGFyYW1zOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBjYW5kaWRhdGVcXCdzIGFjY2VwdGFuY2UgbGltaXRhdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBiYWNraW5nIGZvciBhIHJlbGF5IHBhcmVudCcsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdBc3luY0JhY2tpbmdQYXJhbXMnXG4gICAgfSxcbiAgICBwYXJhX2JhY2tpbmdfc3RhdGU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzdGF0ZSBvZiBwYXJhY2hhaW4gYmFja2luZyBmb3IgYSBnaXZlbiBwYXJhJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BhcmFJZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BhcmFJZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxCYWNraW5nU3RhdGU+J1xuICAgIH1cbn07XG5jb25zdCBQSF9WOCA9IHtcbiAgICBkaXNhYmxlZF92YWxpZGF0b3JzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGRpc2FibGVkIHZhbGlkYXRvcnMgYXQgdGhlIGdpdmVuIGJsb2NrJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1ZhbGlkYXRvckluZGV4J1xuICAgIH1cbn07XG5jb25zdCBQSF9WOSA9IHtcbiAgICBub2RlX2ZlYXR1cmVzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IG5vZGUgZmVhdHVyZXMuIFRoaXMgaXMgYSBzdGFnaW5nIG1ldGhvZCEgRG8gbm90IHVzZSBvbiBwcm9kdWN0aW9uIHJ1bnRpbWVzIScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdOb2RlRmVhdHVyZXMnXG4gICAgfVxufTtcbmNvbnN0IFBIX1YxMCA9IHtcbiAgICBhcHByb3ZhbF92b3RpbmdfcGFyYW1zOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwcm92YWwgdm90aW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycycsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdBcHByb3ZhbFZvdGluZ1BhcmFtcydcbiAgICB9XG59O1xuY29uc3QgUEhfVjExID0ge1xuICAgIGNsYWltX3F1ZXVlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2xhaW0gcXVldWUnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnQlRyZWVNYXA8Q29yZUluZGV4LCBWZWM8dTMyPj4nXG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIFBhcmFjaGFpbkhvc3Q6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlBIX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YyX1RPX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y0LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y1LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y2LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y3LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y4LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y5LFxuICAgICAgICAgICAgICAgIC4uLlBIX1YxMCxcbiAgICAgICAgICAgICAgICAuLi5QSF9WMTFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxMVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uUEhfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjJfVE9fVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjQsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjUsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjYsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjcsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjgsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjksXG4gICAgICAgICAgICAgICAgLi4uUEhfVjEwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMTBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlBIX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YyX1RPX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y0LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y1LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y2LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y3LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y4LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogOVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uUEhfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjJfVE9fVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjQsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjUsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjYsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjcsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjhcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA4XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5QSF9WMV9UT19WMixcbiAgICAgICAgICAgICAgICAuLi5QSF9WMl9UT19WMyxcbiAgICAgICAgICAgICAgICAuLi5QSF9WMyxcbiAgICAgICAgICAgICAgICAuLi5QSF9WNCxcbiAgICAgICAgICAgICAgICAuLi5QSF9WNSxcbiAgICAgICAgICAgICAgICAuLi5QSF9WNixcbiAgICAgICAgICAgICAgICAuLi5QSF9WN1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlBIX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YyX1RPX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y0LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y1LFxuICAgICAgICAgICAgICAgIC4uLlBIX1Y2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uUEhfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjJfVE9fVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjMsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjQsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5QSF9WMV9UT19WMixcbiAgICAgICAgICAgICAgICAuLi5QSF9WMl9UT19WMyxcbiAgICAgICAgICAgICAgICAuLi5QSF9WMyxcbiAgICAgICAgICAgICAgICAuLi5QSF9WNFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlBIX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YyX1RPX1YzLFxuICAgICAgICAgICAgICAgIC4uLlBIX1YzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uUEhfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uUEhfVjJfVE9fVjNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uX2luZm86IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIHNlc3Npb24gaW5mbyBmb3IgdGhlIGdpdmVuIHNlc3Npb24sIGlmIHN0b3JlZC4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTZXNzaW9uSW5kZXgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248T2xkVjFTZXNzaW9uSW5mbz4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5QSF9WMV9UT19WMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmNvbnN0IFNsb3RSYW5nZTEwID0ge1xuICAgIF9lbnVtOiBbJ1plcm9aZXJvJywgJ1plcm9PbmUnLCAnWmVyb1R3bycsICdaZXJvVGhyZWUnLCAnT25lT25lJywgJ09uZVR3bycsICdPbmVUaHJlZScsICdUd29Ud28nLCAnVHdvVGhyZWUnLCAnVGhyZWVUaHJlZSddXG59O1xuY29uc3QgU2xvdFJhbmdlID0ge1xuICAgIF9lbnVtOiBbJ1plcm9aZXJvJywgJ1plcm9PbmUnLCAnWmVyb1R3bycsICdaZXJvVGhyZWUnLCAnWmVyb0ZvdXInLCAnWmVyb0ZpdmUnLCAnWmVyb1NpeCcsICdaZXJvU2V2ZW4nLCAnT25lT25lJywgJ09uZVR3bycsICdPbmVUaHJlZScsICdPbmVGb3VyJywgJ09uZUZpdmUnLCAnT25lU2l4JywgJ09uZVNldmVuJywgJ1R3b1R3bycsICdUd29UaHJlZScsICdUd29Gb3VyJywgJ1R3b0ZpdmUnLCAnVHdvU2l4JywgJ1R3b1NldmVuJywgJ1RocmVlVGhyZWUnLCAnVGhyZWVGb3VyJywgJ1RocmVlRml2ZScsICdUaHJlZVNpeCcsICdUaHJlZVNldmVuJywgJ0ZvdXJGb3VyJywgJ0ZvdXJGaXZlJywgJ0ZvdXJTaXgnLCAnRm91clNldmVuJywgJ0ZpdmVGaXZlJywgJ0ZpdmVTaXgnLCAnRml2ZVNldmVuJywgJ1NpeFNpeCcsICdTaXhTZXZlbicsICdTZXZlblNldmVuJ11cbn07XG5jb25zdCBvbGRUeXBlcyA9IHtcbiAgICBCaWRkZXI6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIE5ldzogJ05ld0JpZGRlcicsXG4gICAgICAgICAgICBFeGlzdGluZzogJ1BhcmFJZCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgSW5jb21pbmdQYXJhY2hhaW46IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFVuc2V0OiAnTmV3QmlkZGVyJyxcbiAgICAgICAgICAgIEZpeGVkOiAnSW5jb21pbmdQYXJhY2hhaW5GaXhlZCcsXG4gICAgICAgICAgICBEZXBsb3k6ICdJbmNvbWluZ1BhcmFjaGFpbkRlcGxveSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgSW5jb21pbmdQYXJhY2hhaW5EZXBsb3k6IHtcbiAgICAgICAgY29kZTogJ1ZhbGlkYXRpb25Db2RlJyxcbiAgICAgICAgaW5pdGlhbEhlYWREYXRhOiAnSGVhZERhdGEnXG4gICAgfSxcbiAgICBJbmNvbWluZ1BhcmFjaGFpbkZpeGVkOiB7XG4gICAgICAgIGNvZGVIYXNoOiAnSGFzaCcsXG4gICAgICAgIGNvZGVTaXplOiAndTMyJyxcbiAgICAgICAgaW5pdGlhbEhlYWREYXRhOiAnSGVhZERhdGEnXG4gICAgfSxcbiAgICBOZXdCaWRkZXI6IHtcbiAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgc3ViOiAnU3ViSWQnXG4gICAgfSxcbiAgICBTdWJJZDogJ3UzMidcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgLi4ub2xkVHlwZXMsXG4gICAgQXVjdGlvbkluZGV4OiAndTMyJyxcbiAgICBMZWFzZVBlcmlvZDogJ0Jsb2NrTnVtYmVyJyxcbiAgICBMZWFzZVBlcmlvZE9mOiAnQmxvY2tOdW1iZXInLFxuICAgIFNsb3RSYW5nZTEwLFxuICAgIFNsb3RSYW5nZSxcbiAgICBXaW5uaW5nRGF0YTEwOiBgW1dpbm5pbmdEYXRhRW50cnk7ICR7U2xvdFJhbmdlMTAuX2VudW0ubGVuZ3RofV1gLFxuICAgIFdpbm5pbmdEYXRhOiBgW1dpbm5pbmdEYXRhRW50cnk7ICR7U2xvdFJhbmdlLl9lbnVtLmxlbmd0aH1dYCxcbiAgICBXaW5uaW5nRGF0YUVudHJ5OiAnT3B0aW9uPChBY2NvdW50SWQsIFBhcmFJZCwgQmFsYW5jZU9mKT4nLFxuICAgIFdpbm5lcnNEYXRhMTA6ICdWZWM8V2lubmVyc0RhdGFUdXBsZTEwPicsXG4gICAgV2lubmVyc0RhdGE6ICdWZWM8V2lubmVyc0RhdGFUdXBsZT4nLFxuICAgIFdpbm5lcnNEYXRhVHVwbGUxMDogJyhBY2NvdW50SWQsIFBhcmFJZCwgQmFsYW5jZU9mLCBTbG90UmFuZ2UxMCknLFxuICAgIFdpbm5lcnNEYXRhVHVwbGU6ICcoQWNjb3VudElkLCBQYXJhSWQsIEJhbGFuY2VPZiwgU2xvdFJhbmdlKSdcbn07XG4iLCJpbXBvcnQgeyBycGMgfSBmcm9tICcuL3JwYy5qcyc7XG5pbXBvcnQgeyBydW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBGZWVEZXRhaWxzOiB7XG4gICAgICAgICAgICBpbmNsdXNpb25GZWU6ICdPcHRpb248SW5jbHVzaW9uRmVlPidcbiAgICAgICAgICAgIC8vIHNraXBwZWQgaW4gc2VyZGVcbiAgICAgICAgICAgIC8vIHRpcDogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIEluY2x1c2lvbkZlZToge1xuICAgICAgICAgICAgYmFzZUZlZTogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgbGVuRmVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBhZGp1c3RlZFdlaWdodEZlZTogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIFJ1bnRpbWVEaXNwYXRjaEluZm86IHtcbiAgICAgICAgICAgIHdlaWdodDogJ1dlaWdodCcsXG4gICAgICAgICAgICBjbGFzczogJ0Rpc3BhdGNoQ2xhc3MnLFxuICAgICAgICAgICAgcGFydGlhbEZlZTogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIFJ1bnRpbWVEaXNwYXRjaEluZm9WMToge1xuICAgICAgICAgICAgd2VpZ2h0OiAnV2VpZ2h0VjEnLFxuICAgICAgICAgICAgY2xhc3M6ICdEaXNwYXRjaENsYXNzJyxcbiAgICAgICAgICAgIHBhcnRpYWxGZWU6ICdCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBSdW50aW1lRGlzcGF0Y2hJbmZvVjI6IHtcbiAgICAgICAgICAgIHdlaWdodDogJ1dlaWdodFYyJyxcbiAgICAgICAgICAgIGNsYXNzOiAnRGlzcGF0Y2hDbGFzcycsXG4gICAgICAgICAgICBwYXJ0aWFsRmVlOiAnQmFsYW5jZSdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIHF1ZXJ5RmVlRGV0YWlsczoge1xuICAgICAgICAvLyBOT1RFOiBOb3QgZGVwcmVjYXRlZCAoeWV0KSBpbiBTdWJzdHJhdGUsIGJ1dCBpdCBpcyB0aGUgaW50ZW50IHRvIGRvIHNvXG4gICAgICAgIGRlcHJlY2F0ZWQ6ICdVc2UgYGFwaS5jYWxsLnRyYW5zYWN0aW9uUGF5bWVudEFwaS5xdWVyeUZlZURldGFpbHNgIGluc3RlYWQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1F1ZXJ5IHRoZSBkZXRhaWxlZCBmZWUgb2YgYSBnaXZlbiBlbmNvZGVkIGV4dHJpbnNpYycsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdleHRyaW5zaWMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0ZlZURldGFpbHMnXG4gICAgfSxcbiAgICBxdWVyeUluZm86IHtcbiAgICAgICAgLy8gTk9URTogTm90IGRlcHJlY2F0ZWQgKHlldCkgaW4gU3Vic3RyYXRlLCBidXQgaXQgaXMgdGhlIGludGVudCB0byBkbyBzb1xuICAgICAgICBkZXByZWNhdGVkOiAnVXNlIGBhcGkuY2FsbC50cmFuc2FjdGlvblBheW1lbnRBcGkucXVlcnlJbmZvYCBpbnN0ZWFkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIGZlZSBpbmZvcm1hdGlvbiBmb3IgYW4gZW5jb2RlZCBleHRyaW5zaWMnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZXh0cmluc2ljJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIC8vIE5PVEU6IFN0dWNrIG9uIFYxIGZvcmV2ZXIgKGF0IGxlYXN0IGZvciB0aGUgdGltZSBiZWluZylcbiAgICAgICAgdHlwZTogJ1J1bnRpbWVEaXNwYXRjaEluZm9WMSdcbiAgICB9XG59O1xuIiwiY29uc3QgVjFfVE9fVjRfU0hBUkVEX1BBWSA9IHtcbiAgICBxdWVyeV9mZWVfZGV0YWlsczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSB0cmFuc2FjdGlvbiBmZWUgZGV0YWlscycsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd1eHQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFeHRyaW5zaWMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZW4nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd1MzInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdGZWVEZXRhaWxzJ1xuICAgIH1cbn07XG5jb25zdCBWMV9UT19WM19TSEFSRURfQ0FMTCA9IHtcbiAgICBxdWVyeV9jYWxsX2ZlZV9kZXRhaWxzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGNhbGwgZmVlIGRldGFpbHMnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2FsbCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0NhbGwnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZW4nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd1MzInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdGZWVEZXRhaWxzJ1xuICAgIH1cbn07XG5jb25zdCBWMl9UT19WNF9TSEFSRURfUEFZID0ge1xuICAgIHF1ZXJ5X2luZm86IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgdHJhbnNhY3Rpb24gaW5mbycsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd1eHQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFeHRyaW5zaWMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsZW4nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd1MzInXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSdW50aW1lRGlzcGF0Y2hJbmZvJ1xuICAgIH1cbn07XG5jb25zdCBWMl9WM19TSEFSRURfQ0FMTCA9IHtcbiAgICBxdWVyeV9jYWxsX2luZm86IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgY2FsbCBpbmZvJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NhbGwnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdDYWxsJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVuJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUnVudGltZURpc3BhdGNoSW5mbydcbiAgICB9XG59O1xuY29uc3QgVjNfU0hBUkVEX1BBWV9DQUxMID0ge1xuICAgIHF1ZXJ5X2xlbmd0aF90b19mZWU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSB0aGUgb3V0cHV0IG9mIHRoZSBjdXJyZW50IExlbmd0aFRvRmVlIGdpdmVuIHNvbWUgaW5wdXQnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbGVuZ3RoJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICB9LFxuICAgIHF1ZXJ5X3dlaWdodF90b19mZWU6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSB0aGUgb3V0cHV0IG9mIHRoZSBjdXJyZW50IFdlaWdodFRvRmVlIGdpdmVuIHNvbWUgaW5wdXQnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnd2VpZ2h0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnV2VpZ2h0J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQmFsYW5jZSdcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgVHJhbnNhY3Rpb25QYXltZW50QXBpOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFY0IGlzIGVxdWl2YWxlbnQgdG8gVjMgKFY0IGp1c3QgZHJvcHBlZCBhbGwgVjEgcmVmZXJlbmNlcylcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5WM19TSEFSRURfUEFZX0NBTEwsXG4gICAgICAgICAgICAgICAgLi4uVjJfVE9fVjRfU0hBUkVEX1BBWSxcbiAgICAgICAgICAgICAgICAuLi5WMV9UT19WNF9TSEFSRURfUEFZXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uVjNfU0hBUkVEX1BBWV9DQUxMLFxuICAgICAgICAgICAgICAgIC4uLlYyX1RPX1Y0X1NIQVJFRF9QQVksXG4gICAgICAgICAgICAgICAgLi4uVjFfVE9fVjRfU0hBUkVEX1BBWVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLlYyX1RPX1Y0X1NIQVJFRF9QQVksXG4gICAgICAgICAgICAgICAgLi4uVjFfVE9fVjRfU0hBUkVEX1BBWVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIHF1ZXJ5X2luZm86IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgdHJhbnNhY3Rpb24gaW5mbycsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd1eHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdFeHRyaW5zaWMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdsZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd1MzInXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IF9TaG91bGRfIGJlIFYxIChhcyBwZXIgY3VycmVudCBTdWJzdHJhdGUpLCBob3dldmVyIHRoZSBpbnRlcmZhY2Ugd2FzXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQgbWlkLWZsaWdodCBiZXR3ZWVuIHZlcnNpb25zLiBTbyB3ZSBoYXZlIHNvbWUgb2YgZWFjaCBkZXBlbmRpbmcgb25cbiAgICAgICAgICAgICAgICAgICAgLy8gcnVudGltZS4gKFdlIGRvIGRldGVjdCB0aGUgd2VpZ2h0IHR5cGUsIHNvIGNvcnJlY3QpXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdSdW50aW1lRGlzcGF0Y2hJbmZvJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uVjFfVE9fVjRfU0hBUkVEX1BBWVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF0sXG4gICAgVHJhbnNhY3Rpb25QYXltZW50Q2FsbEFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uVjNfU0hBUkVEX1BBWV9DQUxMLFxuICAgICAgICAgICAgICAgIC4uLlYyX1YzX1NIQVJFRF9DQUxMLFxuICAgICAgICAgICAgICAgIC4uLlYxX1RPX1YzX1NIQVJFRF9DQUxMXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogM1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uVjJfVjNfU0hBUkVEX0NBTEwsXG4gICAgICAgICAgICAgICAgLi4uVjFfVE9fVjNfU0hBUkVEX0NBTExcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBDQUxMOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGNhbGwgaW5mbycsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjYWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ2FsbCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2xlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogQXMgcGVyIHRoZSBhYm92ZSBjb21tZW50LCB0aGUgYmVsb3cgaXMgY29ycmVjdCBhY2NvcmRpbmcgdG8gU3Vic3RyYXRlLCBidXRcbiAgICAgICAgICAgICAgICAgICAgLy8gX21heV8geWllbGQgZmFsbGJhY2sgZGVjb2Rpbmcgb24gc29tZSB2ZXJzaW9ucyBvZiB0aGUgcnVudGltZVxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUnVudGltZURpc3BhdGNoSW5mbydcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLlYxX1RPX1YzX1NIQVJFRF9DQUxMXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFwcHJvdmFsczogJ1tib29sOyA0XSdcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7fVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIERpZmZpY3VsdHlBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGRpZmZpY3VsdHk6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm4gdGhlIHRhcmdldCBkaWZmaWN1bHR5IG9mIHRoZSBuZXh0IGJsb2NrLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgRGlmZmljdWx0eSBpbiB0aGUgb3JpZ2luYWwsIGhvd2V2ZXIgdGhpcyBpcyBjaGFpbi1zcGVjaWZpY1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUmF3J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdLFxuICAgIFRpbWVzdGFtcEFwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQVBJIG5lY2Vzc2FyeSBmb3IgdGltZXN0YW1wLWJhc2VkIGRpZmZpY3VsdHkgYWRqdXN0bWVudCBhbGdvcml0aG1zLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdNb21lbnQnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBQcm94eURlZmluaXRpb246IHtcbiAgICAgICAgICAgIGRlbGVnYXRlOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHByb3h5VHlwZTogJ1Byb3h5VHlwZScsXG4gICAgICAgICAgICBkZWxheTogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9LFxuICAgICAgICBQcm94eVR5cGU6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0FueScsICdOb25UcmFuc2ZlcicsICdHb3Zlcm5hbmNlJywgJ1N0YWtpbmcnXVxuICAgICAgICB9LFxuICAgICAgICBQcm94eUFubm91bmNlbWVudDoge1xuICAgICAgICAgICAgcmVhbDogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBjYWxsSGFzaDogJ0hhc2gnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgdHlwZXM6IHtcbiAgICAgICAgQWNjb3VudFN0YXR1czoge1xuICAgICAgICAgICAgdmFsaWRpdHk6ICdBY2NvdW50VmFsaWRpdHknLFxuICAgICAgICAgICAgZnJlZUJhbGFuY2U6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGxvY2tlZEJhbGFuY2U6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgdmF0OiAnUGVybWlsbCdcbiAgICAgICAgfSxcbiAgICAgICAgQWNjb3VudFZhbGlkaXR5OiB7XG4gICAgICAgICAgICBfZW51bTogWydJbnZhbGlkJywgJ0luaXRpYXRlZCcsICdQZW5kaW5nJywgJ1ZhbGlkTG93JywgJ1ZhbGlkSGlnaCcsICdDb21wbGV0ZWQnXVxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjdGl2ZVJlY292ZXJ5OiB7XG4gICAgICAgICAgICBjcmVhdGVkOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgZnJpZW5kczogJ1ZlYzxBY2NvdW50SWQ+J1xuICAgICAgICB9LFxuICAgICAgICBSZWNvdmVyeUNvbmZpZzoge1xuICAgICAgICAgICAgZGVsYXlQZXJpb2Q6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBmcmllbmRzOiAnVmVjPEFjY291bnRJZD4nLFxuICAgICAgICAgICAgdGhyZXNob2xkOiAndTE2J1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGMsXG4gICAgdHlwZXM6IHtcbiAgICAgICAgUnBjTWV0aG9kczoge1xuICAgICAgICAgICAgdmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBtZXRob2RzOiAnVmVjPFRleHQ+J1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBycGMgPSB7XG4gICAgbWV0aG9kczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgbGlzdCBvZiBSUEMgbWV0aG9kcyB0aGF0IGFyZSBleHBvc2VkIGJ5IHRoZSBub2RlJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1JwY01ldGhvZHMnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuY29uc3QgbnVtYmVyVHlwZXMgPSB7XG4gICAgRml4ZWQ2NDogJ0ludDw2NCwgRml4ZWQ2ND4nLFxuICAgIEZpeGVkSTY0OiAnSW50PDY0LCBGaXhlZEk2ND4nLFxuICAgIEZpeGVkVTY0OiAnVUludDw2NCwgRml4ZWRVNjQ+JyxcbiAgICBGaXhlZDEyODogJ0ludDwxMjgsIEZpeGVkMTI4PicsXG4gICAgRml4ZWRJMTI4OiAnSW50PDEyOCwgRml4ZWRJMTI4PicsXG4gICAgRml4ZWRVMTI4OiAnVUludDwxMjgsIEZpeGVkVTEyOD4nLFxuICAgIEkzMkYzMjogJ0ludDw2NCwgSTMyRjMyPicsXG4gICAgVTMyRjMyOiAnVUludDw2NCwgVTMyRjMyPicsXG4gICAgUGVyVTE2OiAnVUludDwxNiwgUGVyVTE2PicsXG4gICAgUGVyYmlsbDogJ1VJbnQ8MzIsIFBlcmJpbGw+JyxcbiAgICBQZXJjZW50OiAnVUludDw4LCBQZXJjZW50PicsXG4gICAgUGVybWlsbDogJ1VJbnQ8MzIsIFBlcm1pbGw+JyxcbiAgICBQZXJxdWludGlsbDogJ1VJbnQ8NjQsIFBlcnF1aW50aWxsPidcbn07XG5leHBvcnQgY29uc3Qga25vd25PcmlnaW5zID0ge1xuICAgIC8vXG4gICAgLy8gKDEpIERlZmF1bHRzIGZyb20gU3Vic3RyYXRlXG4gICAgLy9cbiAgICBDb3VuY2lsOiAnQ29sbGVjdGl2ZU9yaWdpbicsXG4gICAgU3lzdGVtOiAnU3lzdGVtT3JpZ2luJyxcbiAgICBUZWNobmljYWxDb21taXR0ZWU6ICdDb2xsZWN0aXZlT3JpZ2luJyxcbiAgICAvL1xuICAgIC8vICgyKSBEZWZhdWx0cyBmcm9tIFBvbGthZG90XG4gICAgLy9cbiAgICBYY206ICdYY21PcmlnaW4nLFxuICAgIFhjbVBhbGxldDogJ1hjbU9yaWdpbicsXG4gICAgLy9cbiAgICAvLyAoMykgRGVmYXVsdHMgZnJvbSBBY2FsYVxuICAgIC8vXG4gICAgQXV0aG9yaXR5OiAnQXV0aG9yaXR5T3JpZ2luJyxcbiAgICBHZW5lcmFsQ291bmNpbDogJ0NvbGxlY3RpdmVPcmlnaW4nXG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5udW1iZXJUeXBlcyxcbiAgICAgICAgQWNjb3VudElkOiAnQWNjb3VudElkMzInLFxuICAgICAgICBBY2NvdW50SWQyMDogJ0dlbmVyaWNFdGhlcmV1bUFjY291bnRJZCcsXG4gICAgICAgIEFjY291bnRJZDMyOiAnR2VuZXJpY0FjY291bnRJZDMyJyxcbiAgICAgICAgQWNjb3VudElkMzM6ICdHZW5lcmljQWNjb3VudElkMzMnLFxuICAgICAgICBBY2NvdW50SWRPZjogJ0FjY291bnRJZCcsXG4gICAgICAgIEFjY291bnRJbmRleDogJ0dlbmVyaWNBY2NvdW50SW5kZXgnLFxuICAgICAgICBBZGRyZXNzOiAnTXVsdGlBZGRyZXNzJyxcbiAgICAgICAgQXNzZXRJZDogJ3UzMicsXG4gICAgICAgIEJhbGFuY2U6ICdVSW50PDEyOCwgQmFsYW5jZT4nLFxuICAgICAgICBCYWxhbmNlT2Y6ICdCYWxhbmNlJyxcbiAgICAgICAgQmxvY2s6ICdHZW5lcmljQmxvY2snLFxuICAgICAgICBCbG9ja051bWJlcjogJ3UzMicsXG4gICAgICAgIEJsb2NrTnVtYmVyRm9yOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICBCbG9ja051bWJlck9mOiAnQmxvY2tOdW1iZXInLFxuICAgICAgICBDYWxsOiAnR2VuZXJpY0NhbGwnLFxuICAgICAgICBDYWxsSGFzaDogJ0hhc2gnLFxuICAgICAgICBDYWxsSGFzaE9mOiAnQ2FsbEhhc2gnLFxuICAgICAgICBDaGFuZ2VzVHJpZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIGRpZ2VzdEludGVydmFsOiAndTMyJyxcbiAgICAgICAgICAgIGRpZ2VzdExldmVsczogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgQ2hhbmdlc1RyaWVTaWduYWw6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgTmV3Q29uZmlndXJhdGlvbjogJ09wdGlvbjxDaGFuZ2VzVHJpZUNvbmZpZ3VyYXRpb24+J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDb25zZW5zdXNFbmdpbmVJZDogJ0dlbmVyaWNDb25zZW5zdXNFbmdpbmVJZCcsXG4gICAgICAgIENvZGVjSGFzaDogJ0hhc2gnLFxuICAgICAgICBDcmF0ZVZlcnNpb246IHtcbiAgICAgICAgICAgIG1ham9yOiAndTE2JyxcbiAgICAgICAgICAgIG1pbm9yOiAndTgnLFxuICAgICAgICAgICAgcGF0Y2g6ICd1OCdcbiAgICAgICAgfSxcbiAgICAgICAgRGlnZXN0OiB7XG4gICAgICAgICAgICBsb2dzOiAnVmVjPERpZ2VzdEl0ZW0+J1xuICAgICAgICB9LFxuICAgICAgICBEaWdlc3RJdGVtOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE90aGVyOiAnQnl0ZXMnLCAvLyAwXG4gICAgICAgICAgICAgICAgQXV0aG9yaXRpZXNDaGFuZ2U6ICdWZWM8QXV0aG9yaXR5SWQ+JywgLy8gMVxuICAgICAgICAgICAgICAgIENoYW5nZXNUcmllUm9vdDogJ0hhc2gnLCAvLyAyXG4gICAgICAgICAgICAgICAgU2VhbFYwOiAnU2VhbFYwJywgLy8gM1xuICAgICAgICAgICAgICAgIENvbnNlbnN1czogJ0NvbnNlbnN1cycsIC8vIDRcbiAgICAgICAgICAgICAgICBTZWFsOiAnU2VhbCcsIC8vIDVcbiAgICAgICAgICAgICAgICBQcmVSdW50aW1lOiAnUHJlUnVudGltZScsIC8vIDZcbiAgICAgICAgICAgICAgICBDaGFuZ2VzVHJpZVNpZ25hbDogJ0NoYW5nZXNUcmllU2lnbmFsJywgLy8gN1xuICAgICAgICAgICAgICAgIFJ1bnRpbWVFbnZpcm9ubWVudFVwZGF0ZWQ6ICdOdWxsJyAvLyA4XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEV4dHJpbnNpY3NXZWlnaHQ6IHtcbiAgICAgICAgICAgIG5vcm1hbDogJ1dlaWdodCcsXG4gICAgICAgICAgICBvcGVyYXRpb25hbDogJ1dlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgSDMyOiAnW3U4OyA0OyBIMzJdJyxcbiAgICAgICAgSDY0OiAnW3U4OyA4OyBINjRdJyxcbiAgICAgICAgSDEyODogJ1t1ODsgMTY7IEgxMjhdJyxcbiAgICAgICAgSDE2MDogJ1t1ODsgMjA7IEgxNjBdJyxcbiAgICAgICAgSDI1NjogJ1t1ODsgMzI7IEgyNTZdJyxcbiAgICAgICAgSDUxMjogJ1t1ODsgNjQ7IEg1MTJdJyxcbiAgICAgICAgSDEwMjQ6ICdbdTg7IDEyODsgSDEwMjRdJyxcbiAgICAgICAgSDIwNDg6ICdbdTg7IDI1NjsgSDIwNDhdJyxcbiAgICAgICAgSGFzaDogJ0gyNTYnLFxuICAgICAgICBIZWFkZXI6IHtcbiAgICAgICAgICAgIHBhcmVudEhhc2g6ICdIYXNoJyxcbiAgICAgICAgICAgIG51bWJlcjogJ0NvbXBhY3Q8QmxvY2tOdW1iZXI+JyxcbiAgICAgICAgICAgIHN0YXRlUm9vdDogJ0hhc2gnLFxuICAgICAgICAgICAgZXh0cmluc2ljc1Jvb3Q6ICdIYXNoJyxcbiAgICAgICAgICAgIGRpZ2VzdDogJ0RpZ2VzdCdcbiAgICAgICAgfSxcbiAgICAgICAgSGVhZGVyUGFydGlhbDoge1xuICAgICAgICAgICAgcGFyZW50SGFzaDogJ0hhc2gnLFxuICAgICAgICAgICAgLy8gc2luY2Ugd2Ugb25seSBwYXJzZSBKU09OIHdpdGggdGhpcywgaGF2aW5nIG5vbi1jb21wYWN0IHdvcmtzXG4gICAgICAgICAgICBudW1iZXI6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgSW5kaWNlc0xvb2t1cFNvdXJjZTogJ0dlbmVyaWNMb29rdXBTb3VyY2UnLFxuICAgICAgICBJbmRleDogJ3UzMicsXG4gICAgICAgIEp1c3RpZmljYXRpb246ICcoQ29uc2Vuc3VzRW5naW5lSWQsIEVuY29kZWRKdXN0aWZpY2F0aW9uKScsXG4gICAgICAgIEVuY29kZWRKdXN0aWZpY2F0aW9uOiAnQnl0ZXMnLFxuICAgICAgICBKdXN0aWZpY2F0aW9uczogJ1ZlYzxKdXN0aWZpY2F0aW9uPicsXG4gICAgICAgIEtleVZhbHVlOiAnKFN0b3JhZ2VLZXksIFN0b3JhZ2VEYXRhKScsXG4gICAgICAgIEtleVR5cGVJZDogJ3UzMicsXG4gICAgICAgIExvY2tJZGVudGlmaWVyOiAnW3U4OyA4XScsXG4gICAgICAgIExvb2t1cFNvdXJjZTogJ011bHRpQWRkcmVzcycsXG4gICAgICAgIExvb2t1cFRhcmdldDogJ0FjY291bnRJZCcsXG4gICAgICAgIE1vZHVsZUlkOiAnTG9ja0lkZW50aWZpZXInLFxuICAgICAgICBNdWx0aUFkZHJlc3M6ICdHZW5lcmljTXVsdGlBZGRyZXNzJyxcbiAgICAgICAgTXVsdGlTaWduZXI6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgRWQyNTUxOTogJ1t1ODsgMzJdJyxcbiAgICAgICAgICAgICAgICBTcjI1NTE5OiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgICAgIEVjZHNhOiAnW3U4OyAzM10nXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIE1vbWVudDogJ1VJbnQ8NjQsIE1vbWVudD4nLFxuICAgICAgICBPcGFxdWVDYWxsOiAnQnl0ZXMnLFxuICAgICAgICBPcmlnaW46ICdEb05vdENvbnN0cnVjdDxPcmlnaW4+JyxcbiAgICAgICAgT3JpZ2luQ2FsbGVyOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGR5bmFtaWNhbGx5IGJ1aWx0IGZyb20gdGhlIGFjdHVhbCBtb2R1bGVzLCBiYXNlZCBvbiBpbmRleFxuICAgICAgICAgICAgICAgIFN5c3RlbTogJ1N5c3RlbU9yaWdpbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUGFsbGV0SWQ6ICdMb2NrSWRlbnRpZmllcicsXG4gICAgICAgIFBhbGxldHNPcmlnaW46ICdPcmlnaW5DYWxsZXInLFxuICAgICAgICBQYWxsZXRWZXJzaW9uOiB7XG4gICAgICAgICAgICBtYWpvcjogJ3UxNicsXG4gICAgICAgICAgICBtaW5vcjogJ3U4JyxcbiAgICAgICAgICAgIHBhdGNoOiAndTgnXG4gICAgICAgIH0sXG4gICAgICAgIFBheXM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1llcycsICdObyddXG4gICAgICAgIH0sXG4gICAgICAgIFBoYW50b206ICdOdWxsJyxcbiAgICAgICAgUGhhbnRvbURhdGE6ICdOdWxsJyxcbiAgICAgICAgUmVsZWFzZXM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1YxJywgJ1YyJywgJ1YzJywgJ1Y0JywgJ1Y1JywgJ1Y2JywgJ1Y3JywgJ1Y4JywgJ1Y5JywgJ1YxMCddXG4gICAgICAgIH0sXG4gICAgICAgIFJ1bnRpbWVDYWxsOiAnQ2FsbCcsXG4gICAgICAgIFJ1bnRpbWVFdmVudDogJ0V2ZW50JyxcbiAgICAgICAgUnVudGltZURiV2VpZ2h0OiB7XG4gICAgICAgICAgICByZWFkOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHdyaXRlOiAnV2VpZ2h0J1xuICAgICAgICB9LFxuICAgICAgICBTaWduZWRCbG9jazogJ1NpZ25lZEJsb2NrV2l0aEp1c3RpZmljYXRpb25zJyxcbiAgICAgICAgU2lnbmVkQmxvY2tXaXRoSnVzdGlmaWNhdGlvbjoge1xuICAgICAgICAgICAgYmxvY2s6ICdCbG9jaycsXG4gICAgICAgICAgICBqdXN0aWZpY2F0aW9uOiAnT3B0aW9uPEVuY29kZWRKdXN0aWZpY2F0aW9uPidcbiAgICAgICAgfSxcbiAgICAgICAgU2lnbmVkQmxvY2tXaXRoSnVzdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgICAgIGJsb2NrOiAnQmxvY2snLFxuICAgICAgICAgICAganVzdGlmaWNhdGlvbnM6ICdPcHRpb248SnVzdGlmaWNhdGlvbnM+J1xuICAgICAgICB9LFxuICAgICAgICBTbG90OiAndTY0JyxcbiAgICAgICAgU2xvdER1cmF0aW9uOiAndTY0JyxcbiAgICAgICAgU3RvcmFnZURhdGE6ICdCeXRlcycsXG4gICAgICAgIFN0b3JhZ2VJbmZvOiB7XG4gICAgICAgICAgICBwYWxsZXROYW1lOiAnQnl0ZXMnLFxuICAgICAgICAgICAgc3RvcmFnZV9uYW1lOiAnQnl0ZXMnLFxuICAgICAgICAgICAgcHJlZml4OiAnQnl0ZXMnLFxuICAgICAgICAgICAgbWF4VmFsdWVzOiAnT3B0aW9uPHUzMj4nLFxuICAgICAgICAgICAgbWF4U2l6ZTogJ09wdGlvbjx1MzI+J1xuICAgICAgICB9LFxuICAgICAgICBTdG9yYWdlUHJvb2Y6IHtcbiAgICAgICAgICAgIHRyaWVOb2RlczogJ1ZlYzxCeXRlcz4nXG4gICAgICAgIH0sXG4gICAgICAgIFRyYW5zYWN0aW9uUHJpb3JpdHk6ICd1NjQnLFxuICAgICAgICBUcmFuc2FjdGlvbkxvbmdldml0eTogJ3U2NCcsXG4gICAgICAgIFRyYW5zYWN0aW9uVGFnOiAnQnl0ZXMnLFxuICAgICAgICBUcmFuc2FjdGlvbkluZm86IHtcbiAgICAgICAgICAgIF9hbGlhczoge1xuICAgICAgICAgICAgICAgIGRhdGFTaXplOiAnc2l6ZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaHVua1Jvb3Q6ICdIMjU2JyxcbiAgICAgICAgICAgIGNvbnRlbnRIYXNoOiAnSDI1NicsXG4gICAgICAgICAgICBkYXRhU2l6ZTogJ3UzMicsXG4gICAgICAgICAgICBibG9ja0NodW5rczogJ3UzMidcbiAgICAgICAgfSxcbiAgICAgICAgVHJhbnNhY3Rpb25TdG9yYWdlUHJvb2Y6IHtcbiAgICAgICAgICAgIGNodW5rOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBwcm9vZjogJ1ZlYzxWZWM8dTg+PidcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdG9ySWQ6ICdBY2NvdW50SWQnLFxuICAgICAgICBWYWxpZGF0b3JJZE9mOiAnVmFsaWRhdG9ySWQnLFxuICAgICAgICBXZWlnaHRWMDogJ3UzMicsXG4gICAgICAgIFdlaWdodFYxOiAndTY0JyxcbiAgICAgICAgV2VpZ2h0VjI6IHtcbiAgICAgICAgICAgIHJlZlRpbWU6ICdDb21wYWN0PHU2ND4nLFxuICAgICAgICAgICAgcHJvb2ZTaXplOiAnQ29tcGFjdDx1NjQ+J1xuICAgICAgICB9LFxuICAgICAgICBXZWlnaHQ6ICdXZWlnaHRWMicsXG4gICAgICAgIFdlaWdodE11bHRpcGxpZXI6ICdGaXhlZDY0JyxcbiAgICAgICAgLy8gZGlnZXN0XG4gICAgICAgIFByZVJ1bnRpbWU6ICcoQ29uc2Vuc3VzRW5naW5lSWQsIEJ5dGVzKScsXG4gICAgICAgIFNlYWxWMDogJyh1NjQsIFNpZ25hdHVyZSknLFxuICAgICAgICBTZWFsOiAnKENvbnNlbnN1c0VuZ2luZUlkLCBCeXRlcyknLFxuICAgICAgICBDb25zZW5zdXM6ICcoQ29uc2Vuc3VzRW5naW5lSWQsIEJ5dGVzKScsXG4gICAgICAgIC8vIFR5cGUgd2hlbiBjb3JlIGluaXRpYWxpemVfYmxvY2sgd2VudCBmcm9tIHY0IHRvIHY1XG4gICAgICAgIEV4dHJpbnNpY0luY2x1c2lvbk1vZGU6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ0FsbEV4dHJpbnNpY3MnLCAnT25seUluaGVyZW50cyddXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiY29uc3QgQ09SRV9WMV9UT19WNCA9IHtcbiAgICBleGVjdXRlX2Jsb2NrOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0ZSB0aGUgZ2l2ZW4gYmxvY2suJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2snXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH1cbn07XG5jb25zdCBDT1JFX1YxX1RPX1YyID0ge1xuICAgIHZlcnNpb246IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIHRoZSBydW50aW1lLicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdSdW50aW1lVmVyc2lvblByZTMnXG4gICAgfVxufTtcbmNvbnN0IENPUkVfVjJfVE9fVjQgPSB7XG4gICAgaW5pdGlhbGl6ZV9ibG9jazoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgYSBibG9jayB3aXRoIHRoZSBnaXZlbiBoZWFkZXIuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hlYWRlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ051bGwnXG4gICAgfVxufTtcbmNvbnN0IENPUkVfVjRfVkVSU0lPTiA9IHtcbiAgICB2ZXJzaW9uOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgdmVyc2lvbiBvZiB0aGUgcnVudGltZS4nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnUnVudGltZVZlcnNpb24nXG4gICAgfVxufTtcbmNvbnN0IENPUkVfVjRfVE9fVjUgPSB7XG4gICAgLi4uQ09SRV9WMV9UT19WNCxcbiAgICBpbml0aWFsaXplX2Jsb2NrOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSW5pdGlhbGl6ZSBhIGJsb2NrIHdpdGggdGhlIGdpdmVuIGhlYWRlci4nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGVhZGVyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnSGVhZGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXh0cmluc2ljSW5jbHVzaW9uTW9kZSdcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgQ29yZTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgLi4uQ09SRV9WNF9WRVJTSU9OLFxuICAgICAgICAgICAgICAgIC4uLkNPUkVfVjRfVE9fVjVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiA1XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICAuLi5DT1JFX1Y0X1ZFUlNJT04sXG4gICAgICAgICAgICAgICAgLi4uQ09SRV9WMV9UT19WNCxcbiAgICAgICAgICAgICAgICAuLi5DT1JFX1YyX1RPX1Y0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogNFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIHJ1bnRpbWUuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1J1bnRpbWVWZXJzaW9uUHJlNCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLkNPUkVfVjFfVE9fVjQsXG4gICAgICAgICAgICAgICAgLi4uQ09SRV9WMl9UT19WNFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC4uLkNPUkVfVjFfVE9fVjIsXG4gICAgICAgICAgICAgICAgLi4uQ09SRV9WMV9UT19WNCxcbiAgICAgICAgICAgICAgICAuLi5DT1JFX1YyX1RPX1Y0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGlzZV9ibG9jazoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgYSBibG9jayB3aXRoIHRoZSBnaXZlbiBoZWFkZXIuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2hlYWRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0hlYWRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5DT1JFX1YxX1RPX1YyLFxuICAgICAgICAgICAgICAgIC4uLkNPUkVfVjFfVE9fVjRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiaW1wb3J0IHsgdjAgfSBmcm9tICcuL3YwLmpzJztcbmltcG9ydCB7IHYxIH0gZnJvbSAnLi92MS5qcyc7XG4vKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIC4uLnYwLFxuICAgICAgICAuLi52MSxcbiAgICAgICAgLy8gbGF0ZXN0IG1hcHBpbmdzXG4gICAgICAgIFNpRmllbGQ6ICdTaTFGaWVsZCcsXG4gICAgICAgIFNpTG9va3VwVHlwZUlkOiAnU2kxTG9va3VwVHlwZUlkJyxcbiAgICAgICAgU2lQYXRoOiAnU2kxUGF0aCcsXG4gICAgICAgIFNpVHlwZTogJ1NpMVR5cGUnLFxuICAgICAgICBTaVR5cGVEZWY6ICdTaTFUeXBlRGVmJyxcbiAgICAgICAgU2lUeXBlRGVmQXJyYXk6ICdTaTFUeXBlRGVmQXJyYXknLFxuICAgICAgICBTaVR5cGVEZWZCaXRTZXF1ZW5jZTogJ1NpMVR5cGVEZWZCaXRTZXF1ZW5jZScsXG4gICAgICAgIFNpVHlwZURlZkNvbXBhY3Q6ICdTaTFUeXBlRGVmQ29tcGFjdCcsXG4gICAgICAgIFNpVHlwZURlZkNvbXBvc2l0ZTogJ1NpMVR5cGVEZWZDb21wb3NpdGUnLFxuICAgICAgICBTaVR5cGVEZWZQcmltaXRpdmU6ICdTaTFUeXBlRGVmUHJpbWl0aXZlJyxcbiAgICAgICAgU2lUeXBlRGVmU2VxdWVuY2U6ICdTaTFUeXBlRGVmU2VxdWVuY2UnLFxuICAgICAgICBTaVR5cGVEZWZUdXBsZTogJ1NpMVR5cGVEZWZUdXBsZScsXG4gICAgICAgIFNpVHlwZVBhcmFtZXRlcjogJ1NpMVR5cGVQYXJhbWV0ZXInLFxuICAgICAgICBTaVR5cGVEZWZWYXJpYW50OiAnU2kxVHlwZURlZlZhcmlhbnQnLFxuICAgICAgICBTaVZhcmlhbnQ6ICdTaTFWYXJpYW50J1xuICAgIH1cbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbmV4cG9ydCBjb25zdCB2MCA9IHtcbiAgICBTaTBGaWVsZDoge1xuICAgICAgICBuYW1lOiAnT3B0aW9uPFRleHQ+JyxcbiAgICAgICAgdHlwZTogJ1NpMExvb2t1cFR5cGVJZCcsXG4gICAgICAgIHR5cGVOYW1lOiAnT3B0aW9uPFRleHQ+JyxcbiAgICAgICAgZG9jczogJ1ZlYzxUZXh0PidcbiAgICB9LFxuICAgIFNpMExvb2t1cFR5cGVJZDogJ3UzMicsXG4gICAgU2kwUGF0aDogJ1ZlYzxUZXh0PicsXG4gICAgU2kwVHlwZToge1xuICAgICAgICBwYXRoOiAnU2kwUGF0aCcsXG4gICAgICAgIHBhcmFtczogJ1ZlYzxTaTBMb29rdXBUeXBlSWQ+JyxcbiAgICAgICAgZGVmOiAnU2kwVHlwZURlZidcbiAgICB9LFxuICAgIFNpMFR5cGVEZWY6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENvbXBvc2l0ZTogJ1NpMFR5cGVEZWZDb21wb3NpdGUnLFxuICAgICAgICAgICAgVmFyaWFudDogJ1NpMFR5cGVEZWZWYXJpYW50JyxcbiAgICAgICAgICAgIFNlcXVlbmNlOiAnU2kwVHlwZURlZlNlcXVlbmNlJyxcbiAgICAgICAgICAgIEFycmF5OiAnU2kwVHlwZURlZkFycmF5JyxcbiAgICAgICAgICAgIFR1cGxlOiAnU2kwVHlwZURlZlR1cGxlJyxcbiAgICAgICAgICAgIFByaW1pdGl2ZTogJ1NpMFR5cGVEZWZQcmltaXRpdmUnLFxuICAgICAgICAgICAgQ29tcGFjdDogJ1NpMFR5cGVEZWZDb21wYWN0JyxcbiAgICAgICAgICAgIFBoYW50b206ICdTaTBUeXBlRGVmUGhhbnRvbScsXG4gICAgICAgICAgICBCaXRTZXF1ZW5jZTogJ1NpMFR5cGVEZWZCaXRTZXF1ZW5jZSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgU2kwVHlwZURlZkFycmF5OiB7XG4gICAgICAgIGxlbjogJ3UzMicsXG4gICAgICAgIHR5cGU6ICdTaTBMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBTaTBUeXBlRGVmQml0U2VxdWVuY2U6IHtcbiAgICAgICAgYml0U3RvcmVUeXBlOiAnU2kwTG9va3VwVHlwZUlkJyxcbiAgICAgICAgYml0T3JkZXJUeXBlOiAnU2kwTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgU2kwVHlwZURlZkNvbXBhY3Q6IHtcbiAgICAgICAgdHlwZTogJ1NpMExvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFNpMFR5cGVEZWZDb21wb3NpdGU6IHtcbiAgICAgICAgZmllbGRzOiAnVmVjPFNpMEZpZWxkPidcbiAgICB9LFxuICAgIFNpMFR5cGVEZWZQaGFudG9tOiAnTnVsbCcsXG4gICAgU2kwVHlwZURlZlZhcmlhbnQ6IHtcbiAgICAgICAgdmFyaWFudHM6ICdWZWM8U2kwVmFyaWFudD4nXG4gICAgfSxcbiAgICBTaTBUeXBlRGVmUHJpbWl0aXZlOiB7XG4gICAgICAgIF9lbnVtOiBbJ0Jvb2wnLCAnQ2hhcicsICdTdHInLCAnVTgnLCAnVTE2JywgJ1UzMicsICdVNjQnLCAnVTEyOCcsICdVMjU2JywgJ0k4JywgJ0kxNicsICdJMzInLCAnSTY0JywgJ0kxMjgnLCAnSTI1NiddXG4gICAgfSxcbiAgICBTaTBUeXBlRGVmU2VxdWVuY2U6IHtcbiAgICAgICAgdHlwZTogJ1NpMExvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFNpMFR5cGVEZWZUdXBsZTogJ1ZlYzxTaTBMb29rdXBUeXBlSWQ+JyxcbiAgICBTaTBUeXBlUGFyYW1ldGVyOiB7XG4gICAgICAgIG5hbWU6ICdUZXh0JyxcbiAgICAgICAgdHlwZTogJ09wdGlvbjxTaTBMb29rdXBUeXBlSWQ+J1xuICAgIH0sXG4gICAgU2kwVmFyaWFudDoge1xuICAgICAgICBuYW1lOiAnVGV4dCcsXG4gICAgICAgIGZpZWxkczogJ1ZlYzxTaTBGaWVsZD4nLFxuICAgICAgICBpbmRleDogJ09wdGlvbjx1OD4nLFxuICAgICAgICBkaXNjcmltaW5hbnQ6ICdPcHRpb248dTY0PicsXG4gICAgICAgIGRvY3M6ICdWZWM8VGV4dD4nXG4gICAgfVxufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIHNvcnQta2V5cyAqL1xuZXhwb3J0IGNvbnN0IFNpMVZhcmlhbnQgPSB7XG4gICAgbmFtZTogJ1RleHQnLFxuICAgIGZpZWxkczogJ1ZlYzxTaTFGaWVsZD4nLFxuICAgIGluZGV4OiAndTgnLFxuICAgIGRvY3M6ICdWZWM8VGV4dD4nXG59O1xuZXhwb3J0IGNvbnN0IHYxID0ge1xuICAgIFNpMUZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICdPcHRpb248VGV4dD4nLFxuICAgICAgICB0eXBlOiAnU2kxTG9va3VwVHlwZUlkJyxcbiAgICAgICAgdHlwZU5hbWU6ICdPcHRpb248VGV4dD4nLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgU2kxTG9va3VwVHlwZUlkOiAnQ29tcGFjdDx1MzI+JyxcbiAgICBTaTFQYXRoOiAnU2kwUGF0aCcsXG4gICAgU2kxVHlwZToge1xuICAgICAgICBwYXRoOiAnU2kxUGF0aCcsXG4gICAgICAgIHBhcmFtczogJ1ZlYzxTaTFUeXBlUGFyYW1ldGVyPicsXG4gICAgICAgIGRlZjogJ1NpMVR5cGVEZWYnLFxuICAgICAgICBkb2NzOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgU2kxVHlwZURlZjoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgQ29tcG9zaXRlOiAnU2kxVHlwZURlZkNvbXBvc2l0ZScsXG4gICAgICAgICAgICBWYXJpYW50OiAnU2kxVHlwZURlZlZhcmlhbnQnLFxuICAgICAgICAgICAgU2VxdWVuY2U6ICdTaTFUeXBlRGVmU2VxdWVuY2UnLFxuICAgICAgICAgICAgQXJyYXk6ICdTaTFUeXBlRGVmQXJyYXknLFxuICAgICAgICAgICAgVHVwbGU6ICdTaTFUeXBlRGVmVHVwbGUnLFxuICAgICAgICAgICAgUHJpbWl0aXZlOiAnU2kxVHlwZURlZlByaW1pdGl2ZScsXG4gICAgICAgICAgICBDb21wYWN0OiAnU2kxVHlwZURlZkNvbXBhY3QnLFxuICAgICAgICAgICAgQml0U2VxdWVuY2U6ICdTaTFUeXBlRGVmQml0U2VxdWVuY2UnLFxuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHByZS12MTQgbWV0YWRhdGFcbiAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkgKGFsd2F5cyBrZWVwIHRoaXMgYXMgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGVudW0pXG4gICAgICAgICAgICBIaXN0b3JpY01ldGFDb21wYXQ6ICdUeXBlJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBTaTFUeXBlRGVmQXJyYXk6IHtcbiAgICAgICAgbGVuOiAndTMyJyxcbiAgICAgICAgdHlwZTogJ1NpMUxvb2t1cFR5cGVJZCdcbiAgICB9LFxuICAgIFNpMVR5cGVEZWZCaXRTZXF1ZW5jZToge1xuICAgICAgICBiaXRTdG9yZVR5cGU6ICdTaTFMb29rdXBUeXBlSWQnLFxuICAgICAgICBiaXRPcmRlclR5cGU6ICdTaTFMb29rdXBUeXBlSWQnXG4gICAgfSxcbiAgICBTaTFUeXBlRGVmQ29tcGFjdDoge1xuICAgICAgICB0eXBlOiAnU2kxTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgU2kxVHlwZURlZkNvbXBvc2l0ZToge1xuICAgICAgICBmaWVsZHM6ICdWZWM8U2kxRmllbGQ+J1xuICAgIH0sXG4gICAgU2kxVHlwZURlZlByaW1pdGl2ZTogJ1NpMFR5cGVEZWZQcmltaXRpdmUnLFxuICAgIFNpMVR5cGVEZWZTZXF1ZW5jZToge1xuICAgICAgICB0eXBlOiAnU2kxTG9va3VwVHlwZUlkJ1xuICAgIH0sXG4gICAgU2kxVHlwZURlZlR1cGxlOiAnVmVjPFNpMUxvb2t1cFR5cGVJZD4nLFxuICAgIFNpMVR5cGVQYXJhbWV0ZXI6IHtcbiAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICB0eXBlOiAnT3B0aW9uPFNpMUxvb2t1cFR5cGVJZD4nXG4gICAgfSxcbiAgICBTaTFUeXBlRGVmVmFyaWFudDoge1xuICAgICAgICB2YXJpYW50czogJ1ZlYzxTaTFWYXJpYW50PidcbiAgICB9LFxuICAgIFNpMVZhcmlhbnRcbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBQZXJpb2Q6ICcoQmxvY2tOdW1iZXIsIHUzMiknLFxuICAgICAgICBQcmlvcml0eTogJ3U4JyxcbiAgICAgICAgU2NoZWR1bGVQZXJpb2Q6ICdQZXJpb2QnLFxuICAgICAgICBTY2hlZHVsZVByaW9yaXR5OiAnUHJpb3JpdHknLFxuICAgICAgICBTY2hlZHVsZWQ6IHtcbiAgICAgICAgICAgIG1heWJlSWQ6ICdPcHRpb248Qnl0ZXM+JyxcbiAgICAgICAgICAgIHByaW9yaXR5OiAnU2NoZWR1bGVQcmlvcml0eScsXG4gICAgICAgICAgICBjYWxsOiAnQ2FsbCcsXG4gICAgICAgICAgICBtYXliZVBlcmlvZGljOiAnT3B0aW9uPFNjaGVkdWxlUGVyaW9kPicsXG4gICAgICAgICAgICBvcmlnaW46ICdQYWxsZXRzT3JpZ2luJ1xuICAgICAgICB9LFxuICAgICAgICBTY2hlZHVsZWRUbzI1NDoge1xuICAgICAgICAgICAgbWF5YmVJZDogJ09wdGlvbjxCeXRlcz4nLFxuICAgICAgICAgICAgcHJpb3JpdHk6ICdTY2hlZHVsZVByaW9yaXR5JyxcbiAgICAgICAgICAgIGNhbGw6ICdDYWxsJyxcbiAgICAgICAgICAgIG1heWJlUGVyaW9kaWM6ICdPcHRpb248U2NoZWR1bGVQZXJpb2Q+J1xuICAgICAgICB9LFxuICAgICAgICBUYXNrQWRkcmVzczogJyhCbG9ja051bWJlciwgdTMyKSdcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5jb25zdCBrZXlUeXBlcyA9IHtcbiAgICAvLyBrZXkgZm9yIGJlZWZ5XG4gICAgQmVlZnlLZXk6ICdbdTg7IDMzXScsXG4gICAgLy8gZGVmYXVsdCB0byBTdWJzdHJhdGUgbWFzdGVyIGRlZmF1bHRzLCA0IGtleXMgKHBvbGthZG90IG1hc3RlciwgNSBrZXlzKVxuICAgIEtleXM6ICdTZXNzaW9uS2V5czQnLFxuICAgIFNlc3Npb25LZXlzMTogJyhBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czI6ICcoQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czM6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCknLFxuICAgIFNlc3Npb25LZXlzNDogJyhBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czU6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czY6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCknLFxuICAgIFNlc3Npb25LZXlzNkI6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEJlZWZ5S2V5KScsXG4gICAgU2Vzc2lvbktleXM3OiAnKEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCknLFxuICAgIFNlc3Npb25LZXlzN0I6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQmVlZnlLZXkpJyxcbiAgICBTZXNzaW9uS2V5czg6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czhCOiAnKEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQmVlZnlLZXkpJyxcbiAgICBTZXNzaW9uS2V5czk6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCknLFxuICAgIFNlc3Npb25LZXlzOUI6ICcoQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEJlZWZ5S2V5KScsXG4gICAgU2Vzc2lvbktleXMxMDogJyhBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQpJyxcbiAgICBTZXNzaW9uS2V5czEwQjogJyhBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBBY2NvdW50SWQsIEFjY291bnRJZCwgQWNjb3VudElkLCBCZWVmeUtleSknXG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5rZXlUeXBlcyxcbiAgICAgICAgRnVsbElkZW50aWZpY2F0aW9uOiAnRXhwb3N1cmUnLFxuICAgICAgICBJZGVudGlmaWNhdGlvblR1cGxlOiAnKFZhbGlkYXRvcklkLCBGdWxsSWRlbnRpZmljYXRpb24pJyxcbiAgICAgICAgTWVtYmVyc2hpcFByb29mOiB7XG4gICAgICAgICAgICBzZXNzaW9uOiAnU2Vzc2lvbkluZGV4JyxcbiAgICAgICAgICAgIHRyaWVOb2RlczogJ1ZlYzxCeXRlcz4nLFxuICAgICAgICAgICAgdmFsaWRhdG9yQ291bnQ6ICdWYWxpZGF0b3JDb3VudCdcbiAgICAgICAgfSxcbiAgICAgICAgU2Vzc2lvbkluZGV4OiAndTMyJyxcbiAgICAgICAgVmFsaWRhdG9yQ291bnQ6ICd1MzInXG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBydW50aW1lID0ge1xuICAgIFNlc3Npb25LZXlzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICBkZWNvZGVfc2Vzc2lvbl9rZXlzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGVjb2RlIHRoZSBnaXZlbiBwdWJsaWMgc2Vzc2lvbiBrZXlzLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VmVjPChCeXRlcywgS2V5VHlwZUlkKT4+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVfc2Vzc2lvbl9rZXlzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgYSBzZXQgb2Ygc2Vzc2lvbiBrZXlzIHdpdGggb3B0aW9uYWxseSB1c2luZyB0aGUgZ2l2ZW4gc2VlZC4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2VlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbjxCeXRlcz4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEJpZDoge1xuICAgICAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGtpbmQ6ICdCaWRLaW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgQmlkS2luZDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBEZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgVm91Y2g6ICcoQWNjb3VudElkLCBCYWxhbmNlKSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gYSBzb2NpZXR5LXNwZWNpZmljIEp1ZGdlbWVudCAobm90IHRoZSBzYW1lIGFzIGlkZW50aXR5IEp1ZGdlbWVudClcbiAgICAgICAgU29jaWV0eUp1ZGdlbWVudDoge1xuICAgICAgICAgICAgX2VudW06IFsnUmViaWQnLCAnUmVqZWN0JywgJ0FwcHJvdmUnXVxuICAgICAgICB9LFxuICAgICAgICAvLyBhIHNvY2lldHktc3BlY2lmaWMgVm90ZVxuICAgICAgICBTb2NpZXR5Vm90ZToge1xuICAgICAgICAgICAgX2VudW06IFsnU2tlcHRpYycsICdSZWplY3QnLCAnQXBwcm92ZSddXG4gICAgICAgIH0sXG4gICAgICAgIFN0cmlrZUNvdW50OiAndTMyJyxcbiAgICAgICAgVm91Y2hpbmdTdGF0dXM6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbJ1ZvdWNoaW5nJywgJ0Jhbm5lZCddXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5jb25zdCBkZXByZWNhdGVkID0ge1xuICAgIFBvaW50czogJ3UzMicsXG4gICAgRXJhUG9pbnRzOiB7XG4gICAgICAgIHRvdGFsOiAnUG9pbnRzJyxcbiAgICAgICAgaW5kaXZpZHVhbDogJ1ZlYzxQb2ludHM+J1xuICAgIH1cbn07XG5jb25zdCBwaHJhZ21lbiA9IHtcbiAgICBDb21wYWN0QXNzaWdubWVudHM6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIENvbXBhY3RBc3NpZ25tZW50c1dpdGgxNjoge1xuICAgICAgICB2b3RlczE6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczI6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgQ29tcGFjdFNjb3JlQ29tcGFjdCwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczM6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDJdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzNDogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgM10sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXM1OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyA0XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczY6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDVdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzNzogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgNl0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXM4OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyA3XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3Rlczk6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDhdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTA6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDldLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTE6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDEwXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczEyOiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxMV0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxMzogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMTJdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTQ6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDEzXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczE1OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxNF0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxNjogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMTVdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPidcbiAgICB9LFxuICAgIENvbXBhY3RBc3NpZ25tZW50c1dpdGgyNDoge1xuICAgICAgICB2b3RlczE6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczI6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgQ29tcGFjdFNjb3JlQ29tcGFjdCwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczM6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDJdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzNDogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgM10sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXM1OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyA0XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczY6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDVdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzNzogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgNl0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXM4OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyA3XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3Rlczk6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDhdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTA6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDldLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTE6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDEwXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczEyOiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxMV0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxMzogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMTJdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTQ6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDEzXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczE1OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxNF0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxNjogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMTVdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMTc6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDE2XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczE4OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAxN10sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMxOTogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMThdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMjA6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDE5XSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczIxOiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAyMF0sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+JyxcbiAgICAgICAgdm90ZXMyMjogJ1ZlYzwoTm9taW5hdG9ySW5kZXhDb21wYWN0LCBbQ29tcGFjdFNjb3JlQ29tcGFjdDsgMjFdLCBWYWxpZGF0b3JJbmRleENvbXBhY3QpPicsXG4gICAgICAgIHZvdGVzMjM6ICdWZWM8KE5vbWluYXRvckluZGV4Q29tcGFjdCwgW0NvbXBhY3RTY29yZUNvbXBhY3Q7IDIyXSwgVmFsaWRhdG9ySW5kZXhDb21wYWN0KT4nLFxuICAgICAgICB2b3RlczI0OiAnVmVjPChOb21pbmF0b3JJbmRleENvbXBhY3QsIFtDb21wYWN0U2NvcmVDb21wYWN0OyAyM10sIFZhbGlkYXRvckluZGV4Q29tcGFjdCk+J1xuICAgIH0sXG4gICAgQ29tcGFjdEFzc2lnbm1lbnRzVG8yNjU6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgIENvbXBhY3RBc3NpZ25tZW50c1RvMjU3OiB7XG4gICAgICAgIHZvdGVzMTogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDBdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXMyOiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgMV0sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3RlczM6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyAyXSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzNDogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDNdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXM1OiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgNF0sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3RlczY6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyA1XSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzNzogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDZdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXM4OiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgN10sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3Rlczk6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyA4XSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzMTA6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyA5XSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzMTE6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyAxMF0sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3RlczEyOiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgMTFdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXMxMzogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDEyXSwgVmFsaWRhdG9ySW5kZXgpPicsXG4gICAgICAgIHZvdGVzMTQ6ICdWZWM8KE5vbWluYXRvckluZGV4LCBbQ29tcGFjdFNjb3JlOyAxM10sIFZhbGlkYXRvckluZGV4KT4nLFxuICAgICAgICB2b3RlczE1OiAnVmVjPChOb21pbmF0b3JJbmRleCwgW0NvbXBhY3RTY29yZTsgMTRdLCBWYWxpZGF0b3JJbmRleCk+JyxcbiAgICAgICAgdm90ZXMxNjogJ1ZlYzwoTm9taW5hdG9ySW5kZXgsIFtDb21wYWN0U2NvcmU7IDE1XSwgVmFsaWRhdG9ySW5kZXgpPidcbiAgICB9LFxuICAgIENvbXBhY3RTY29yZTogJyhWYWxpZGF0b3JJbmRleCwgT2ZmY2hhaW5BY2N1cmFjeSknLFxuICAgIENvbXBhY3RTY29yZUNvbXBhY3Q6ICcoVmFsaWRhdG9ySW5kZXhDb21wYWN0LCBPZmZjaGFpbkFjY3VyYWN5Q29tcGFjdCknLFxuICAgIEVsZWN0aW9uQ29tcHV0ZToge1xuICAgICAgICAvLyBpbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGUgbGFzdCBlbnRyeSB3YXMgXCJBdXRob3JpdHlJZFwiXG4gICAgICAgIC8vIChzaW5jZSBubyBkYXRhIGF0dGFjaGVkLCBhbmQgaXQgaXMgdmlhIFNDQUxFIGNhbiByZW5hbWUpXG4gICAgICAgIF9lbnVtOiBbJ09uQ2hhaW4nLCAnU2lnbmVkJywgJ1Vuc2lnbmVkJ11cbiAgICB9LFxuICAgIEVsZWN0aW9uUGhhc2U6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIE9mZjogbnVsbCxcbiAgICAgICAgICAgIFNpZ25lZDogbnVsbCxcbiAgICAgICAgICAgIFVuc2lnbmVkOiAnKGJvb2wsIEJsb2NrTnVtYmVyKScsXG4gICAgICAgICAgICBFbWVyZ2VuY3k6IG51bGxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgRWxlY3Rpb25SZXN1bHQ6IHtcbiAgICAgICAgY29tcHV0ZTogJ0VsZWN0aW9uQ29tcHV0ZScsXG4gICAgICAgIHNsb3RTdGFrZTogJ0JhbGFuY2UnLFxuICAgICAgICBlbGVjdGVkU3Rhc2hlczogJ1ZlYzxBY2NvdW50SWQ+JyxcbiAgICAgICAgZXhwb3N1cmVzOiAnVmVjPChBY2NvdW50SWQsIEV4cG9zdXJlKT4nXG4gICAgfSxcbiAgICBFbGVjdGlvblNjb3JlOiAnW3UxMjg7IDNdJyxcbiAgICBFbGVjdGlvblNpemU6IHtcbiAgICAgICAgdmFsaWRhdG9yczogJ0NvbXBhY3Q8VmFsaWRhdG9ySW5kZXg+JyxcbiAgICAgICAgbm9taW5hdG9yczogJ0NvbXBhY3Q8Tm9taW5hdG9ySW5kZXg+J1xuICAgIH0sXG4gICAgRWxlY3Rpb25TdGF0dXM6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENsb3NlOiAnTnVsbCcsXG4gICAgICAgICAgICBPcGVuOiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEV4dGVuZGVkQmFsYW5jZTogJ3UxMjgnLFxuICAgIFJhd1NvbHV0aW9uOiAnUmF3U29sdXRpb25XaXRoMTYnLFxuICAgIFJhd1NvbHV0aW9uV2l0aDE2OiB7XG4gICAgICAgIGNvbXBhY3Q6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMTYnLFxuICAgICAgICBzY29yZTogJ0VsZWN0aW9uU2NvcmUnLFxuICAgICAgICByb3VuZDogJ3UzMidcbiAgICB9LFxuICAgIFJhd1NvbHV0aW9uV2l0aDI0OiB7XG4gICAgICAgIGNvbXBhY3Q6ICdDb21wYWN0QXNzaWdubWVudHNXaXRoMjQnLFxuICAgICAgICBzY29yZTogJ0VsZWN0aW9uU2NvcmUnLFxuICAgICAgICByb3VuZDogJ3UzMidcbiAgICB9LFxuICAgIFJhd1NvbHV0aW9uVG8yNjU6ICdSYXdTb2x1dGlvbldpdGgxNicsXG4gICAgUmVhZHlTb2x1dGlvbjoge1xuICAgICAgICBzdXBwb3J0czogJ1NvbHV0aW9uU3VwcG9ydHMnLFxuICAgICAgICBzY29yZTogJ0VsZWN0aW9uU2NvcmUnLFxuICAgICAgICBjb21wdXRlOiAnRWxlY3Rpb25Db21wdXRlJ1xuICAgIH0sXG4gICAgUm91bmRTbmFwc2hvdDoge1xuICAgICAgICB2b3RlcnM6ICdWZWM8KEFjY291bnRJZCwgVm90ZVdlaWdodCwgVmVjPEFjY291bnRJZD4pPicsXG4gICAgICAgIHRhcmdldHM6ICdWZWM8QWNjb3VudElkPidcbiAgICB9LFxuICAgIFNlYXRIb2xkZXI6IHtcbiAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgc3Rha2U6ICdCYWxhbmNlJyxcbiAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnXG4gICAgfSxcbiAgICBTaWduZWRTdWJtaXNzaW9uOiB7XG4gICAgICAgIF9mYWxsYmFjazogJ1NpZ25lZFN1Ym1pc3Npb25UbzI3NicsXG4gICAgICAgIHdobzogJ0FjY291bnRJZCcsXG4gICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJyxcbiAgICAgICAgc29sdXRpb246ICdSYXdTb2x1dGlvbicsXG4gICAgICAgIHJld2FyZDogJ0JhbGFuY2UnXG4gICAgfSxcbiAgICBTaWduZWRTdWJtaXNzaW9uVG8yNzY6IHtcbiAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgZGVwb3NpdDogJ0JhbGFuY2UnLFxuICAgICAgICBzb2x1dGlvbjogJ1Jhd1NvbHV0aW9uJ1xuICAgIH0sXG4gICAgU2lnbmVkU3VibWlzc2lvbk9mOiAnU2lnbmVkU3VibWlzc2lvbicsXG4gICAgU29sdXRpb25PclNuYXBzaG90U2l6ZToge1xuICAgICAgICB2b3RlcnM6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICB0YXJnZXRzOiAnQ29tcGFjdDx1MzI+J1xuICAgIH0sXG4gICAgU29sdXRpb25TdXBwb3J0OiB7XG4gICAgICAgIHRvdGFsOiAnRXh0ZW5kZWRCYWxhbmNlJyxcbiAgICAgICAgdm90ZXJzOiAnVmVjPChBY2NvdW50SWQsIEV4dGVuZGVkQmFsYW5jZSk+J1xuICAgIH0sXG4gICAgU29sdXRpb25TdXBwb3J0czogJ1ZlYzwoQWNjb3VudElkLCBTb2x1dGlvblN1cHBvcnQpPicsXG4gICAgU3VwcG9ydHM6ICdTb2x1dGlvblN1cHBvcnRzJyxcbiAgICBTdWJtaXNzaW9uSW5kaWNlc09mOiAnQlRyZWVNYXA8RWxlY3Rpb25TY29yZSwgdTMyPicsXG4gICAgVm90ZXI6IHtcbiAgICAgICAgdm90ZXM6ICdWZWM8QWNjb3VudElkPicsXG4gICAgICAgIHN0YWtlOiAnQmFsYW5jZScsXG4gICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJ1xuICAgIH0sXG4gICAgVm90ZVdlaWdodDogJ3U2NCdcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIC4uLmRlcHJlY2F0ZWQsXG4gICAgICAgIC4uLnBocmFnbWVuLFxuICAgICAgICBBY3RpdmVFcmFJbmZvOiB7XG4gICAgICAgICAgICBpbmRleDogJ0VyYUluZGV4JyxcbiAgICAgICAgICAgIHN0YXJ0OiAnT3B0aW9uPE1vbWVudD4nXG4gICAgICAgIH0sXG4gICAgICAgIEVyYUluZGV4OiAndTMyJyxcbiAgICAgICAgRXJhUmV3YXJkUG9pbnRzOiB7XG4gICAgICAgICAgICB0b3RhbDogJ1Jld2FyZFBvaW50JyxcbiAgICAgICAgICAgIGluZGl2aWR1YWw6ICdCVHJlZU1hcDxBY2NvdW50SWQsIFJld2FyZFBvaW50PidcbiAgICAgICAgfSxcbiAgICAgICAgRXJhUmV3YXJkczoge1xuICAgICAgICAgICAgdG90YWw6ICd1MzInLFxuICAgICAgICAgICAgcmV3YXJkczogJ1ZlYzx1MzI+J1xuICAgICAgICB9LFxuICAgICAgICBFeHBvc3VyZToge1xuICAgICAgICAgICAgdG90YWw6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIG93bjogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgb3RoZXJzOiAnVmVjPEluZGl2aWR1YWxFeHBvc3VyZT4nXG4gICAgICAgIH0sXG4gICAgICAgIEZvcmNpbmc6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAgICAgJ05vdEZvcmNpbmcnLFxuICAgICAgICAgICAgICAgICdGb3JjZU5ldycsXG4gICAgICAgICAgICAgICAgJ0ZvcmNlTm9uZScsXG4gICAgICAgICAgICAgICAgJ0ZvcmNlQWx3YXlzJ1xuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBJbmRpdmlkdWFsRXhwb3N1cmU6IHtcbiAgICAgICAgICAgIHdobzogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB2YWx1ZTogJ0NvbXBhY3Q8QmFsYW5jZT4nXG4gICAgICAgIH0sXG4gICAgICAgIEtleVR5cGU6ICdBY2NvdW50SWQnLFxuICAgICAgICBNb21lbnRPZjogJ01vbWVudCcsXG4gICAgICAgIE5vbWluYXRpb25zOiB7XG4gICAgICAgICAgICB0YXJnZXRzOiAnVmVjPEFjY291bnRJZD4nLFxuICAgICAgICAgICAgc3VibWl0dGVkSW46ICdFcmFJbmRleCcsXG4gICAgICAgICAgICBzdXBwcmVzc2VkOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgTm9taW5hdG9ySW5kZXg6ICd1MzInLFxuICAgICAgICBOb21pbmF0b3JJbmRleENvbXBhY3Q6ICdDb21wYWN0PE5vbWluYXRvckluZGV4PicsXG4gICAgICAgIE9mZmNoYWluQWNjdXJhY3k6ICdQZXJVMTYnLFxuICAgICAgICBPZmZjaGFpbkFjY3VyYWN5Q29tcGFjdDogJ0NvbXBhY3Q8T2ZmY2hhaW5BY2N1cmFjeT4nLFxuICAgICAgICBQaHJhZ21lblNjb3JlOiAnW3UxMjg7IDNdJyxcbiAgICAgICAgUG9pbnRzOiAndTMyJyxcbiAgICAgICAgUmV3YXJkRGVzdGluYXRpb246IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgU3Rha2VkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgU3Rhc2g6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDb250cm9sbGVyOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQWNjb3VudDogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICAgICAgTm9uZTogJ051bGwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFJld2FyZFBvaW50OiAndTMyJyxcbiAgICAgICAgU2xhc2hKb3VybmFsRW50cnk6IHtcbiAgICAgICAgICAgIHdobzogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBhbW91bnQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIG93blNsYXNoOiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgU2xhc2hpbmdTcGFuc1RvMjA0OiB7XG4gICAgICAgICAgICBzcGFuSW5kZXg6ICdTcGFuSW5kZXgnLFxuICAgICAgICAgICAgbGFzdFN0YXJ0OiAnRXJhSW5kZXgnLFxuICAgICAgICAgICAgcHJpb3I6ICdWZWM8RXJhSW5kZXg+J1xuICAgICAgICB9LFxuICAgICAgICBTbGFzaGluZ1NwYW5zOiB7XG4gICAgICAgICAgICBzcGFuSW5kZXg6ICdTcGFuSW5kZXgnLFxuICAgICAgICAgICAgbGFzdFN0YXJ0OiAnRXJhSW5kZXgnLFxuICAgICAgICAgICAgbGFzdE5vbnplcm9TbGFzaDogJ0VyYUluZGV4JyxcbiAgICAgICAgICAgIHByaW9yOiAnVmVjPEVyYUluZGV4PidcbiAgICAgICAgfSxcbiAgICAgICAgU3BhbkluZGV4OiAndTMyJyxcbiAgICAgICAgU3BhblJlY29yZDoge1xuICAgICAgICAgICAgc2xhc2hlZDogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgcGFpZE91dDogJ0JhbGFuY2UnXG4gICAgICAgIH0sXG4gICAgICAgIFN0YWtpbmdMZWRnZXJUbzIyMzoge1xuICAgICAgICAgICAgc3Rhc2g6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgdG90YWw6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIGFjdGl2ZTogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgdW5sb2NraW5nOiAnVmVjPFVubG9ja0NodW5rPidcbiAgICAgICAgfSxcbiAgICAgICAgU3Rha2luZ0xlZGdlclRvMjQwOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdTdGFraW5nTGVkZ2VyVG8yMjMnLFxuICAgICAgICAgICAgc3Rhc2g6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgdG90YWw6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIGFjdGl2ZTogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgdW5sb2NraW5nOiAnVmVjPFVubG9ja0NodW5rPicsXG4gICAgICAgICAgICBsYXN0UmV3YXJkOiAnT3B0aW9uPEVyYUluZGV4PidcbiAgICAgICAgfSxcbiAgICAgICAgU3Rha2luZ0xlZGdlcjoge1xuICAgICAgICAgICAgc3Rhc2g6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgdG90YWw6ICdDb21wYWN0PEJhbGFuY2U+JyxcbiAgICAgICAgICAgIGFjdGl2ZTogJ0NvbXBhY3Q8QmFsYW5jZT4nLFxuICAgICAgICAgICAgdW5sb2NraW5nOiAnVmVjPFVubG9ja0NodW5rPicsXG4gICAgICAgICAgICBjbGFpbWVkUmV3YXJkczogJ1ZlYzxFcmFJbmRleD4nXG4gICAgICAgIH0sXG4gICAgICAgIFVuYXBwbGllZFNsYXNoT3RoZXI6ICcoQWNjb3VudElkLCBCYWxhbmNlKScsXG4gICAgICAgIFVuYXBwbGllZFNsYXNoOiB7XG4gICAgICAgICAgICB2YWxpZGF0b3I6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgb3duOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBvdGhlcnM6ICdWZWM8VW5hcHBsaWVkU2xhc2hPdGhlcj4nLFxuICAgICAgICAgICAgcmVwb3J0ZXJzOiAnVmVjPEFjY291bnRJZD4nLFxuICAgICAgICAgICAgcGF5b3V0OiAnQmFsYW5jZSdcbiAgICAgICAgfSxcbiAgICAgICAgVW5sb2NrQ2h1bms6IHtcbiAgICAgICAgICAgIHZhbHVlOiAnQ29tcGFjdDxCYWxhbmNlPicsXG4gICAgICAgICAgICBlcmE6ICdDb21wYWN0PEJsb2NrTnVtYmVyPidcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdG9ySW5kZXg6ICd1MTYnLFxuICAgICAgICBWYWxpZGF0b3JJbmRleENvbXBhY3Q6ICdDb21wYWN0PFZhbGlkYXRvckluZGV4PicsXG4gICAgICAgIFZhbGlkYXRvclByZWZzOiAnVmFsaWRhdG9yUHJlZnNXaXRoQmxvY2tlZCcsXG4gICAgICAgIFZhbGlkYXRvclByZWZzV2l0aENvbW1pc3Npb246IHtcbiAgICAgICAgICAgIGNvbW1pc3Npb246ICdDb21wYWN0PFBlcmJpbGw+J1xuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0b3JQcmVmc1dpdGhCbG9ja2VkOiB7XG4gICAgICAgICAgICBjb21taXNzaW9uOiAnQ29tcGFjdDxQZXJiaWxsPicsXG4gICAgICAgICAgICBibG9ja2VkOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdG9yUHJlZnNUbzE5Njoge1xuICAgICAgICAgICAgdmFsaWRhdG9yUGF5bWVudDogJ0NvbXBhY3Q8QmFsYW5jZT4nXG4gICAgICAgIH0sXG4gICAgICAgIFZhbGlkYXRvclByZWZzVG8xNDU6IHtcbiAgICAgICAgICAgIHVuc3Rha2VUaHJlc2hvbGQ6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgdmFsaWRhdG9yUGF5bWVudDogJ0NvbXBhY3Q8QmFsYW5jZT4nXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgU3Rha2luZ0FwaTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgbm9taW5hdGlvbnNfcXVvdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBub21pbmF0aW9ucyBxdW90YSBmb3IgYSBub21pbmF0b3Igd2l0aCBhIGdpdmVuIGJhbGFuY2UuJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH1cbiAgICBdXG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge1xuICAgICAgICBBcGlJZDogJ1t1ODsgOF0nLFxuICAgICAgICBCbG9ja1RyYWNlOiB7XG4gICAgICAgICAgICBibG9ja0hhc2g6ICdUZXh0JyxcbiAgICAgICAgICAgIHBhcmVudEhhc2g6ICdUZXh0JyxcbiAgICAgICAgICAgIHRyYWNpbmdUYXJnZXRzOiAnVGV4dCcsXG4gICAgICAgICAgICBzdG9yYWdlS2V5czogJ1RleHQnLFxuICAgICAgICAgICAgc3BhbnM6ICdWZWM8QmxvY2tUcmFjZVNwYW4+JyxcbiAgICAgICAgICAgIGV2ZW50czogJ1ZlYzxCbG9ja1RyYWNlRXZlbnQ+J1xuICAgICAgICB9LFxuICAgICAgICBCbG9ja1RyYWNlRXZlbnQ6IHtcbiAgICAgICAgICAgIHRhcmdldDogJ1RleHQnLFxuICAgICAgICAgICAgZGF0YTogJ0Jsb2NrVHJhY2VFdmVudERhdGEnLFxuICAgICAgICAgICAgcGFyZW50SWQ6ICdPcHRpb248dTY0PidcbiAgICAgICAgfSxcbiAgICAgICAgQmxvY2tUcmFjZUV2ZW50RGF0YToge1xuICAgICAgICAgICAgc3RyaW5nVmFsdWVzOiAnSGFzaE1hcDxUZXh0LCBUZXh0PidcbiAgICAgICAgfSxcbiAgICAgICAgQmxvY2tUcmFjZVNwYW46IHtcbiAgICAgICAgICAgIGlkOiAndTY0JyxcbiAgICAgICAgICAgIHBhcmVudElkOiAnT3B0aW9uPHU2ND4nLFxuICAgICAgICAgICAgbmFtZTogJ1RleHQnLFxuICAgICAgICAgICAgdGFyZ2V0OiAnVGV4dCcsXG4gICAgICAgICAgICB3YXNtOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgS2V5VmFsdWVPcHRpb246ICcoU3RvcmFnZUtleSwgT3B0aW9uPFN0b3JhZ2VEYXRhPiknLFxuICAgICAgICBNaWdyYXRpb25TdGF0dXNSZXN1bHQ6IHtcbiAgICAgICAgICAgIHRvcFJlbWFpbmluZ1RvTWlncmF0ZTogJ3U2NCcsXG4gICAgICAgICAgICBjaGlsZFJlbWFpbmluZ1RvTWlncmF0ZTogJ3U2NCdcbiAgICAgICAgfSxcbiAgICAgICAgUmVhZFByb29mOiB7XG4gICAgICAgICAgICBhdDogJ0hhc2gnLFxuICAgICAgICAgICAgcHJvb2Y6ICdWZWM8Qnl0ZXM+J1xuICAgICAgICB9LFxuICAgICAgICBSdW50aW1lVmVyc2lvbkFwaTogJyhBcGlJZCwgdTMyKScsXG4gICAgICAgIFJ1bnRpbWVWZXJzaW9uOiB7XG4gICAgICAgICAgICBzcGVjTmFtZTogJ1RleHQnLFxuICAgICAgICAgICAgaW1wbE5hbWU6ICdUZXh0JyxcbiAgICAgICAgICAgIGF1dGhvcmluZ1ZlcnNpb246ICd1MzInLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb246ICd1MzInLFxuICAgICAgICAgICAgaW1wbFZlcnNpb246ICd1MzInLFxuICAgICAgICAgICAgYXBpczogJ1ZlYzxSdW50aW1lVmVyc2lvbkFwaT4nLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIHN0YXRlVmVyc2lvbjogJ3U4J1xuICAgICAgICB9LFxuICAgICAgICBSdW50aW1lVmVyc2lvblByZTQ6IHtcbiAgICAgICAgICAgIHNwZWNOYW1lOiAnVGV4dCcsXG4gICAgICAgICAgICBpbXBsTmFtZTogJ1RleHQnLFxuICAgICAgICAgICAgYXV0aG9yaW5nVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBpbXBsVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBhcGlzOiAnVmVjPFJ1bnRpbWVWZXJzaW9uQXBpPicsXG4gICAgICAgICAgICB0cmFuc2FjdGlvblZlcnNpb246ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFJ1bnRpbWVWZXJzaW9uUHJlMzoge1xuICAgICAgICAgICAgc3BlY05hbWU6ICdUZXh0JyxcbiAgICAgICAgICAgIGltcGxOYW1lOiAnVGV4dCcsXG4gICAgICAgICAgICBhdXRob3JpbmdWZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIGltcGxWZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIGFwaXM6ICdWZWM8UnVudGltZVZlcnNpb25BcGk+J1xuICAgICAgICB9LFxuICAgICAgICBSdW50aW1lVmVyc2lvblBhcnRpYWw6IHtcbiAgICAgICAgICAgIHNwZWNOYW1lOiAnVGV4dCcsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogJ3UzMicsXG4gICAgICAgICAgICBhcGlzOiAnVmVjPFJ1bnRpbWVWZXJzaW9uQXBpPidcbiAgICAgICAgfSxcbiAgICAgICAgU3BlY1ZlcnNpb246ICd1MzInLFxuICAgICAgICBTdG9yYWdlQ2hhbmdlU2V0OiB7XG4gICAgICAgICAgICBibG9jazogJ0hhc2gnLFxuICAgICAgICAgICAgY2hhbmdlczogJ1ZlYzxLZXlWYWx1ZU9wdGlvbj4nXG4gICAgICAgIH0sXG4gICAgICAgIFRyYWNlQmxvY2tSZXNwb25zZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBUcmFjZUVycm9yOiAnVHJhY2VFcnJvcicsXG4gICAgICAgICAgICAgICAgQmxvY2tUcmFjZTogJ0Jsb2NrVHJhY2UnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFRyYWNlRXJyb3I6IHtcbiAgICAgICAgICAgIGVycm9yOiAnVGV4dCdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGNhbGw6IHtcbiAgICAgICAgYWxpYXM6IFsnc3RhdGVfY2FsbEF0J10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUGVyZm9ybSBhIGNhbGwgdG8gYSBidWlsdGluIG9uIHRoZSBjaGFpbicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtZXRob2QnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdUZXh0J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgfSxcbiAgICBnZXRDaGlsZEtleXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIGtleXMgd2l0aCBwcmVmaXggb2YgYSBzcGVjaWZpYyBjaGlsZCBzdG9yYWdlJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkU3RvcmFnZUtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZERlZmluaXRpb24nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGRUeXBlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxTdG9yYWdlS2V5PidcbiAgICB9LFxuICAgIGdldENoaWxkUmVhZFByb29mOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBwcm9vZiBvZiBzdG9yYWdlIGZvciBjaGlsZCBrZXkgZW50cmllcyBhdCBhIHNwZWNpZmljIGJsb2NrIHN0YXRlLicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZFN0b3JhZ2VLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcmVmaXhlZFN0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXlzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUmVhZFByb29mJ1xuICAgIH0sXG4gICAgZ2V0Q2hpbGRTdG9yYWdlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIHRoZSBjaGlsZCBzdG9yYWdlIGZvciBhIGtleScsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZFN0b3JhZ2VLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdTdG9yYWdlRGF0YSdcbiAgICB9LFxuICAgIGdldENoaWxkU3RvcmFnZUhhc2g6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIGNoaWxkIHN0b3JhZ2UgaGFzaCcsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZFN0b3JhZ2VLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGREZWZpbml0aW9uJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgIH0sXG4gICAgZ2V0Q2hpbGRTdG9yYWdlU2l6ZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgY2hpbGQgc3RvcmFnZSBzaXplJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NoaWxkU3RvcmFnZUtleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGlsZERlZmluaXRpb24nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hpbGRUeXBlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndTMyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ3U2NCdcbiAgICB9LFxuICAgIGdldEtleXM6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSBgYXBpLnJwYy5zdGF0ZS5nZXRLZXlzUGFnZWRgIHRvIHJldHJpZXZlIGtleXMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUga2V5cyB3aXRoIGEgY2VydGFpbiBwcmVmaXgnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1ZlYzxTdG9yYWdlS2V5PidcbiAgICB9LFxuICAgIGdldEtleXNQYWdlZDoge1xuICAgICAgICBhbGlhczogWydzdGF0ZV9nZXRLZXlzUGFnZWRBdCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGtleXMgd2l0aCBwcmVmaXggd2l0aCBwYWdpbmF0aW9uIHN1cHBvcnQuJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjb3VudCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3UzMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RhcnRLZXknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgIH0sXG4gICAgZ2V0TWV0YWRhdGE6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBydW50aW1lIG1ldGFkYXRhJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ01ldGFkYXRhJ1xuICAgIH0sXG4gICAgZ2V0UGFpcnM6IHtcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSBgYXBpLnJwYy5zdGF0ZS5nZXRLZXlzUGFnZWRgIHRvIHJldHJpZXZlIGtleXMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGtleXMgd2l0aCBwcmVmaXgsIGxlYXZlIGVtcHR5IHRvIGdldCBhbGwgdGhlIGtleXMgKGRlcHJlY2F0ZWQ6IFVzZSBnZXRLZXlzUGFnZWQpJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdwcmVmaXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdTdG9yYWdlS2V5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPEtleVZhbHVlPidcbiAgICB9LFxuICAgIGdldFJlYWRQcm9vZjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgcHJvb2Ygb2Ygc3RvcmFnZSBlbnRyaWVzIGF0IGEgc3BlY2lmaWMgYmxvY2sgc3RhdGUnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5cycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxTdG9yYWdlS2V5PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1JlYWRQcm9vZidcbiAgICB9LFxuICAgIGdldFJ1bnRpbWVWZXJzaW9uOiB7XG4gICAgICAgIGFsaWFzOiBbJ2NoYWluX2dldFJ1bnRpbWVWZXJzaW9uJ10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBydW50aW1lIHZlcnNpb24nLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnUnVudGltZVZlcnNpb24nXG4gICAgfSxcbiAgICBnZXRTdG9yYWdlOiB7XG4gICAgICAgIGFsaWFzOiBbJ3N0YXRlX2dldFN0b3JhZ2VBdCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgc3RvcmFnZSBmb3IgYSBrZXknLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnU3RvcmFnZUtleSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ1N0b3JhZ2VEYXRhJ1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZUhhc2g6IHtcbiAgICAgICAgYWxpYXM6IFsnc3RhdGVfZ2V0U3RvcmFnZUhhc2hBdCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgc3RvcmFnZSBoYXNoJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgIH0sXG4gICAgZ2V0U3RvcmFnZVNpemU6IHtcbiAgICAgICAgYWxpYXM6IFsnc3RhdGVfZ2V0U3RvcmFnZVNpemVBdCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgc3RvcmFnZSBzaXplJyxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JhZ2VLZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICd1NjQnXG4gICAgfSxcbiAgICBxdWVyeVN0b3JhZ2U6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSBoaXN0b3JpY2FsIHN0b3JhZ2UgZW50cmllcyAoYnkga2V5KSBzdGFydGluZyBmcm9tIGEgc3RhcnQgYmxvY2snLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2tleXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdWZWM8U3RvcmFnZUtleT4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmcm9tQmxvY2snLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdIYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0b0Jsb2NrJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VDaGFuZ2VTZXQ+J1xuICAgIH0sXG4gICAgcXVlcnlTdG9yYWdlQXQ6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSBzdG9yYWdlIGVudHJpZXMgKGJ5IGtleSkgc3RhcnRpbmcgYXQgYmxvY2sgaGFzaCBnaXZlbiBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlcicsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdrZXlzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VLZXk+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpc0hpc3RvcmljOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2F0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmxvY2tIYXNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVmVjPFN0b3JhZ2VDaGFuZ2VTZXQ+J1xuICAgIH0sXG4gICAgc3Vic2NyaWJlUnVudGltZVZlcnNpb246IHtcbiAgICAgICAgYWxpYXM6IFsnY2hhaW5fc3Vic2NyaWJlUnVudGltZVZlcnNpb24nLCAnY2hhaW5fdW5zdWJzY3JpYmVSdW50aW1lVmVyc2lvbiddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgcnVudGltZSB2ZXJzaW9uIHZpYSBzdWJzY3JpcHRpb24nLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICBwdWJzdWI6IFtcbiAgICAgICAgICAgICdydW50aW1lVmVyc2lvbicsXG4gICAgICAgICAgICAnc3Vic2NyaWJlUnVudGltZVZlcnNpb24nLFxuICAgICAgICAgICAgJ3Vuc3Vic2NyaWJlUnVudGltZVZlcnNpb24nXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdSdW50aW1lVmVyc2lvbidcbiAgICB9LFxuICAgIHN1YnNjcmliZVN0b3JhZ2U6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJzY3JpYmVzIHRvIHN0b3JhZ2UgY2hhbmdlcyBmb3IgdGhlIHByb3ZpZGVkIGtleXMnLFxuICAgICAgICAvLyBOT1RFIEp1c3QgbWFya2luZyBpdCBoZXJlIHRvIGZvbGxvdyB0aGUgbG9naWMgLSB0aGlzIGlzIHVuc2FmZSB3aGVuIG5vXG4gICAgICAgIC8vIGtleXMgYXJlIHByb3ZpZGVkIChpLmUuIHN1YnNjcmliaW5nIHRvIGFsbCksIGdlbmVyYWxseSB0aGlzIGlzIHVzZWRcbiAgICAgICAgLy8gZXh0ZW5zaXZlbHkgd2l0aCBub3JtYWwgc3Vic2NyaXB0aW9uc1xuICAgICAgICAvLyBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAna2V5cycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1ZlYzxTdG9yYWdlS2V5PidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcHVic3ViOiBbXG4gICAgICAgICAgICAnc3RvcmFnZScsXG4gICAgICAgICAgICAnc3Vic2NyaWJlU3RvcmFnZScsXG4gICAgICAgICAgICAndW5zdWJzY3JpYmVTdG9yYWdlJ1xuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnU3RvcmFnZUNoYW5nZVNldCdcbiAgICB9LFxuICAgIHRyYWNlQmxvY2s6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQcm92aWRlcyBhIHdheSB0byB0cmFjZSB0aGUgcmUtZXhlY3V0aW9uIG9mIGEgc2luZ2xlIGJsb2NrJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0hhc2gnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0YXJnZXRzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFRleHQ+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RvcmFnZUtleXMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb248VGV4dD4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtZXRob2RzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uPFRleHQ+J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVHJhY2VCbG9ja1Jlc3BvbnNlJ1xuICAgIH0sXG4gICAgdHJpZU1pZ3JhdGlvblN0YXR1czoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0NoZWNrIGN1cnJlbnQgbWlncmF0aW9uIHN0YXRlJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzSGlzdG9yaWM6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdNaWdyYXRpb25TdGF0dXNSZXN1bHQnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBTdGF0ZW1lbnRTdG9yZVN0YXRlbWVudFNvdXJjZToge1xuICAgICAgICAgICAgX2VudW06IFsnQ2hhaW4nLCAnTmV0d29yaycsICdMb2NhbCddXG4gICAgICAgIH0sXG4gICAgICAgIFN0YXRlbWVudFN0b3JlVmFsaWRTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgIG1heENvdW50OiAndTMyJyxcbiAgICAgICAgICAgIG1heFNpemU6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFN0YXRlbWVudFN0b3JlSW52YWxpZFN0YXRlbWVudDoge1xuICAgICAgICAgICAgX2VudW06IFsnQmFkUHJvb2YnLCAnTm9Qcm9vZicsICdJbnRlcm5hbEVycm9yJ11cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBWYWxpZGF0ZVN0YXRlbWVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdmFsZGF0ZV9zdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdWYWxpZGF0ZSB0aGUgc3RhdGVtZW50LicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzb3VyY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTdGF0ZW1lbnRTdG9yZVN0YXRlbWVudFNvdXJjZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3N0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1NwU3RhdGVtZW50U3RvcmVTdGF0ZW1lbnQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdSZXN1bHQ8U3RhdGVtZW50U3RvcmVWYWxpZFN0YXRlbWVudCwgU3RhdGVtZW50U3RvcmVJbnZhbGlkU3RhdGVtZW50PidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyc2lvbjogMVxuICAgICAgICB9XG4gICAgXVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIFdlaWdodFRvRmVlQ29lZmZpY2llbnQ6IHtcbiAgICAgICAgICAgIGNvZWZmSW50ZWdlcjogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgY29lZmZGcmFjOiAnUGVyYmlsbCcsXG4gICAgICAgICAgICBuZWdhdGl2ZTogJ2Jvb2wnLFxuICAgICAgICAgICAgZGVncmVlOiAndTgnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICB0eXBlczoge31cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGdlblN5bmNTcGVjOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUganNvbi1zZXJpYWxpemVkIGNoYWluc3BlYyBydW5uaW5nIHRoZSBub2RlLCB3aXRoIGEgc3luYyBzdGF0ZS4nLFxuICAgICAgICBlbmRwb2ludDogJ3N5bmNfc3RhdGVfZ2VuU3luY1NwZWMnLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncmF3JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0pzb24nXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjLmpzJztcbmltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYyxcbiAgICBydW50aW1lLFxuICAgIHR5cGVzOiB7XG4gICAgICAgIEFjY291bnRJbmZvOiAnQWNjb3VudEluZm9XaXRoVHJpcGxlUmVmQ291bnQnLFxuICAgICAgICBBY2NvdW50SW5mb1dpdGhSZWZDb3VudFU4OiB7XG4gICAgICAgICAgICBub25jZTogJ0luZGV4JyxcbiAgICAgICAgICAgIHJlZmNvdW50OiAndTgnLFxuICAgICAgICAgICAgZGF0YTogJ0FjY291bnREYXRhJ1xuICAgICAgICB9LFxuICAgICAgICBBY2NvdW50SW5mb1dpdGhSZWZDb3VudDoge1xuICAgICAgICAgICAgX2ZhbGxiYWNrOiAnQWNjb3VudEluZm9XaXRoUmVmQ291bnRVOCcsXG4gICAgICAgICAgICBub25jZTogJ0luZGV4JyxcbiAgICAgICAgICAgIHJlZmNvdW50OiAnUmVmQ291bnQnLFxuICAgICAgICAgICAgZGF0YTogJ0FjY291bnREYXRhJ1xuICAgICAgICB9LFxuICAgICAgICBBY2NvdW50SW5mb1dpdGhEdWFsUmVmQ291bnQ6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ0FjY291bnRJbmZvV2l0aFJlZkNvdW50JyxcbiAgICAgICAgICAgIG5vbmNlOiAnSW5kZXgnLFxuICAgICAgICAgICAgY29uc3VtZXJzOiAnUmVmQ291bnQnLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiAnUmVmQ291bnQnLFxuICAgICAgICAgICAgZGF0YTogJ0FjY291bnREYXRhJ1xuICAgICAgICB9LFxuICAgICAgICAvLyBvcmlnaW5hbCBuYW1pbmdcbiAgICAgICAgQWNjb3VudEluZm9XaXRoUHJvdmlkZXJzOiAnQWNjb3VudEluZm9XaXRoRHVhbFJlZkNvdW50JyxcbiAgICAgICAgQWNjb3VudEluZm9XaXRoVHJpcGxlUmVmQ291bnQ6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ0FjY291bnRJbmZvV2l0aER1YWxSZWZDb3VudCcsXG4gICAgICAgICAgICBub25jZTogJ0luZGV4JyxcbiAgICAgICAgICAgIGNvbnN1bWVyczogJ1JlZkNvdW50JyxcbiAgICAgICAgICAgIHByb3ZpZGVyczogJ1JlZkNvdW50JyxcbiAgICAgICAgICAgIHN1ZmZpY2llbnRzOiAnUmVmQ291bnQnLFxuICAgICAgICAgICAgZGF0YTogJ0FjY291bnREYXRhJ1xuICAgICAgICB9LFxuICAgICAgICBBcHBseUV4dHJpbnNpY1Jlc3VsdDogJ1Jlc3VsdDxEaXNwYXRjaE91dGNvbWUsIFRyYW5zYWN0aW9uVmFsaWRpdHlFcnJvcj4nLFxuICAgICAgICBBcHBseUV4dHJpbnNpY1Jlc3VsdFByZTY6ICdSZXN1bHQ8RGlzcGF0Y2hPdXRjb21lUHJlNiwgVHJhbnNhY3Rpb25WYWxpZGl0eUVycm9yPicsXG4gICAgICAgIEFyaXRobWV0aWNFcnJvcjoge1xuICAgICAgICAgICAgX2VudW06IFtcbiAgICAgICAgICAgICAgICAnVW5kZXJmbG93JyxcbiAgICAgICAgICAgICAgICAnT3ZlcmZsb3cnLFxuICAgICAgICAgICAgICAgICdEaXZpc2lvbkJ5WmVybydcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgQmxvY2tMZW5ndGg6IHtcbiAgICAgICAgICAgIG1heDogJ1BlckRpc3BhdGNoQ2xhc3NVMzInXG4gICAgICAgIH0sXG4gICAgICAgIEJsb2NrV2VpZ2h0czoge1xuICAgICAgICAgICAgYmFzZUJsb2NrOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIG1heEJsb2NrOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIHBlckNsYXNzOiAnUGVyRGlzcGF0Y2hDbGFzc1dlaWdodHNQZXJDbGFzcydcbiAgICAgICAgfSxcbiAgICAgICAgQ2hhaW5Qcm9wZXJ0aWVzOiAnR2VuZXJpY0NoYWluUHJvcGVydGllcycsXG4gICAgICAgIENoYWluVHlwZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBEZXZlbG9wbWVudDogJ051bGwnLFxuICAgICAgICAgICAgICAgIExvY2FsOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgTGl2ZTogJ051bGwnLFxuICAgICAgICAgICAgICAgIEN1c3RvbTogJ1RleHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIENvbnN1bWVkV2VpZ2h0OiAnUGVyRGlzcGF0Y2hDbGFzc1dlaWdodCcsXG4gICAgICAgIERpZ2VzdE9mOiAnRGlnZXN0JyxcbiAgICAgICAgRGlzcGF0Y2hDbGFzczoge1xuICAgICAgICAgICAgX2VudW06IFsnTm9ybWFsJywgJ09wZXJhdGlvbmFsJywgJ01hbmRhdG9yeSddXG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoRXJyb3I6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgT3RoZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDYW5ub3RMb29rdXA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRPcmlnaW46ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlJyxcbiAgICAgICAgICAgICAgICBDb25zdW1lclJlbWFpbmluZzogJ051bGwnLFxuICAgICAgICAgICAgICAgIE5vUHJvdmlkZXJzOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgVG9vTWFueUNvbnN1bWVyczogJ051bGwnLFxuICAgICAgICAgICAgICAgIFRva2VuOiAnVG9rZW5FcnJvcicsXG4gICAgICAgICAgICAgICAgQXJpdGhtZXRpYzogJ0FyaXRobWV0aWNFcnJvcicsXG4gICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25hbDogJ1RyYW5zYWN0aW9uYWxFcnJvcicsXG4gICAgICAgICAgICAgICAgRXhoYXVzdGVkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQ29ycnVwdGlvbjogJ051bGwnLFxuICAgICAgICAgICAgICAgIFVuYXZhaWxhYmxlOiAnTnVsbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRGlzcGF0Y2hFcnJvclByZTY6IHtcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgT3RoZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDYW5ub3RMb29rdXA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRPcmlnaW46ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlUHJlNicsXG4gICAgICAgICAgICAgICAgQ29uc3VtZXJSZW1haW5pbmc6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBOb1Byb3ZpZGVyczogJ051bGwnLFxuICAgICAgICAgICAgICAgIFRvb01hbnlDb25zdW1lcnM6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBUb2tlbjogJ1Rva2VuRXJyb3InLFxuICAgICAgICAgICAgICAgIEFyaXRobWV0aWM6ICdBcml0aG1ldGljRXJyb3InLFxuICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uYWw6ICdUcmFuc2FjdGlvbmFsRXJyb3InXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoRXJyb3JQcmU2Rmlyc3Q6IHtcbiAgICAgICAgICAgIC8vIFRoZSBlbnVtIHdhcyBtb2RpZmllZCBtaWQtZmxpZ2h0LCBhZmZlY3RpbmcgYXNzZXQgY2hhaW5zIC1cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJpdHl0ZWNoL3N1YnN0cmF0ZS9wdWxsLzEwMzgyL2ZpbGVzI2RpZmYtZTRlMDE2YjMzYTgyMjY4YjYyMDhkYzk3NGVlYTg0MWJhZDQ3NTk3ODY1YTc0OWZlZTJmOTM3ZWI2ZmRmNjdiNFI0OThcbiAgICAgICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICAgICAgT3RoZXI6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDYW5ub3RMb29rdXA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRPcmlnaW46ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBNb2R1bGU6ICdEaXNwYXRjaEVycm9yTW9kdWxlUHJlNicsXG4gICAgICAgICAgICAgICAgQ29uc3VtZXJSZW1haW5pbmc6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBOb1Byb3ZpZGVyczogJ051bGwnLFxuICAgICAgICAgICAgICAgIFRva2VuOiAnVG9rZW5FcnJvcicsXG4gICAgICAgICAgICAgICAgQXJpdGhtZXRpYzogJ0FyaXRobWV0aWNFcnJvcicsXG4gICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25hbDogJ1RyYW5zYWN0aW9uYWxFcnJvcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgRGlzcGF0Y2hFcnJvck1vZHVsZVU4OiB7XG4gICAgICAgICAgICBpbmRleDogJ3U4JyxcbiAgICAgICAgICAgIGVycm9yOiAndTgnXG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoRXJyb3JNb2R1bGVVOGE6IHtcbiAgICAgICAgICAgIGluZGV4OiAndTgnLFxuICAgICAgICAgICAgZXJyb3I6ICdbdTg7IDRdJ1xuICAgICAgICB9LFxuICAgICAgICBEaXNwYXRjaEVycm9yTW9kdWxlOiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4YScsXG4gICAgICAgIERpc3BhdGNoRXJyb3JNb2R1bGVQcmU2OiAnRGlzcGF0Y2hFcnJvck1vZHVsZVU4JyxcbiAgICAgICAgRGlzcGF0Y2hFcnJvclRvMTk4OiB7XG4gICAgICAgICAgICBtb2R1bGU6ICdPcHRpb248dTg+JyxcbiAgICAgICAgICAgIGVycm9yOiAndTgnXG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoSW5mbzoge1xuICAgICAgICAgICAgd2VpZ2h0OiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIGNsYXNzOiAnRGlzcGF0Y2hDbGFzcycsXG4gICAgICAgICAgICBwYXlzRmVlOiAnUGF5cydcbiAgICAgICAgfSxcbiAgICAgICAgRGlzcGF0Y2hJbmZvVG8xOTA6IHtcbiAgICAgICAgICAgIHdlaWdodDogJ1dlaWdodCcsXG4gICAgICAgICAgICBjbGFzczogJ0Rpc3BhdGNoQ2xhc3MnXG4gICAgICAgIH0sXG4gICAgICAgIERpc3BhdGNoSW5mb1RvMjQ0OiB7XG4gICAgICAgICAgICB3ZWlnaHQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgY2xhc3M6ICdEaXNwYXRjaENsYXNzJyxcbiAgICAgICAgICAgIHBheXNGZWU6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBEaXNwYXRjaE91dGNvbWU6ICdSZXN1bHQ8KCksIERpc3BhdGNoRXJyb3I+JyxcbiAgICAgICAgRGlzcGF0Y2hPdXRjb21lUHJlNjogJ1Jlc3VsdDwoKSwgRGlzcGF0Y2hFcnJvclByZTY+JyxcbiAgICAgICAgRGlzcGF0Y2hSZXN1bHQ6ICdSZXN1bHQ8KCksIERpc3BhdGNoRXJyb3I+JyxcbiAgICAgICAgRGlzcGF0Y2hSZXN1bHRPZjogJ0Rpc3BhdGNoUmVzdWx0JyxcbiAgICAgICAgRGlzcGF0Y2hSZXN1bHRUbzE5ODogJ1Jlc3VsdDwoKSwgVGV4dD4nLFxuICAgICAgICBFdmVudDogJ0dlbmVyaWNFdmVudCcsXG4gICAgICAgIEV2ZW50SWQ6ICdbdTg7IDJdJyxcbiAgICAgICAgRXZlbnRJbmRleDogJ3UzMicsXG4gICAgICAgIEV2ZW50UmVjb3JkOiB7XG4gICAgICAgICAgICBwaGFzZTogJ1BoYXNlJyxcbiAgICAgICAgICAgIGV2ZW50OiAnRXZlbnQnLFxuICAgICAgICAgICAgdG9waWNzOiAnVmVjPEhhc2g+J1xuICAgICAgICB9LFxuICAgICAgICBIZWFsdGg6IHtcbiAgICAgICAgICAgIHBlZXJzOiAndTY0JyxcbiAgICAgICAgICAgIGlzU3luY2luZzogJ2Jvb2wnLFxuICAgICAgICAgICAgc2hvdWxkSGF2ZVBlZXJzOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAgSW52YWxpZFRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIENhbGw6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBQYXltZW50OiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgRnV0dXJlOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgU3RhbGU6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRQcm9vZjogJ051bGwnLFxuICAgICAgICAgICAgICAgIEFuY2llbnRCaXJ0aEJsb2NrOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgRXhoYXVzdHNSZXNvdXJjZXM6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDdXN0b206ICd1OCcsXG4gICAgICAgICAgICAgICAgQmFkTWFuZGF0b3J5OiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgTWFuZGF0b3J5RGlzcGF0Y2g6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBCYWRTaWduZXI6ICdOdWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBLZXk6ICdCeXRlcycsXG4gICAgICAgIExhc3RSdW50aW1lVXBncmFkZUluZm86IHtcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIHNwZWNOYW1lOiAnVGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAgTmV0d29ya1N0YXRlOiB7XG4gICAgICAgICAgICBwZWVySWQ6ICdUZXh0JyxcbiAgICAgICAgICAgIGxpc3RlbmVkQWRkcmVzc2VzOiAnVmVjPFRleHQ+JyxcbiAgICAgICAgICAgIGV4dGVybmFsQWRkcmVzc2VzOiAnVmVjPFRleHQ+JyxcbiAgICAgICAgICAgIGNvbm5lY3RlZFBlZXJzOiAnSGFzaE1hcDxUZXh0LCBQZWVyPicsXG4gICAgICAgICAgICBub3RDb25uZWN0ZWRQZWVyczogJ0hhc2hNYXA8VGV4dCwgTm90Q29ubmVjdGVkUGVlcj4nLFxuICAgICAgICAgICAgYXZlcmFnZURvd25sb2FkUGVyU2VjOiAndTY0JyxcbiAgICAgICAgICAgIGF2ZXJhZ2VVcGxvYWRQZXJTZWM6ICd1NjQnLFxuICAgICAgICAgICAgcGVlcnNldDogJ05ldHdvcmtTdGF0ZVBlZXJzZXQnXG4gICAgICAgIH0sXG4gICAgICAgIE5ldHdvcmtTdGF0ZVBlZXJzZXQ6IHtcbiAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZTogJ3U2NCcsXG4gICAgICAgICAgICBub2RlczogJ0hhc2hNYXA8VGV4dCwgTmV0d29ya1N0YXRlUGVlcnNldEluZm8+J1xuICAgICAgICB9LFxuICAgICAgICBOZXR3b3JrU3RhdGVQZWVyc2V0SW5mbzoge1xuICAgICAgICAgICAgY29ubmVjdGVkOiAnYm9vbCcsXG4gICAgICAgICAgICByZXB1dGF0aW9uOiAnaTMyJ1xuICAgICAgICB9LFxuICAgICAgICBOb2RlUm9sZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBGdWxsOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgTGlnaHRDbGllbnQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBBdXRob3JpdHk6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBVbmtub3duUm9sZTogJ3U4J1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBOb3RDb25uZWN0ZWRQZWVyOiB7XG4gICAgICAgICAgICBrbm93bkFkZHJlc3NlczogJ1ZlYzxUZXh0PicsXG4gICAgICAgICAgICBsYXRlc3RQaW5nVGltZTogJ09wdGlvbjxQZWVyUGluZz4nLFxuICAgICAgICAgICAgdmVyc2lvblN0cmluZzogJ09wdGlvbjxUZXh0PidcbiAgICAgICAgfSxcbiAgICAgICAgUGVlcjoge1xuICAgICAgICAgICAgZW5hYmxlZDogJ2Jvb2wnLFxuICAgICAgICAgICAgZW5kcG9pbnQ6ICdQZWVyRW5kcG9pbnQnLFxuICAgICAgICAgICAga25vd25BZGRyZXNzZXM6ICdWZWM8VGV4dD4nLFxuICAgICAgICAgICAgbGF0ZXN0UGluZ1RpbWU6ICdQZWVyUGluZycsXG4gICAgICAgICAgICBvcGVuOiAnYm9vbCcsXG4gICAgICAgICAgICB2ZXJzaW9uU3RyaW5nOiAnVGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAgUGVlckVuZHBvaW50OiB7XG4gICAgICAgICAgICBsaXN0ZW5pbmc6ICdQZWVyRW5kcG9pbnRBZGRyJ1xuICAgICAgICB9LFxuICAgICAgICBQZWVyRW5kcG9pbnRBZGRyOiB7XG4gICAgICAgICAgICBfYWxpYXM6IHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkZHI6ICdsb2NhbF9hZGRyJyxcbiAgICAgICAgICAgICAgICBzZW5kQmFja0FkZHI6ICdzZW5kX2JhY2tfYWRkcidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2NhbEFkZHI6ICdUZXh0JyxcbiAgICAgICAgICAgIHNlbmRCYWNrQWRkcjogJ1RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIFBlZXJQaW5nOiB7XG4gICAgICAgICAgICBuYW5vczogJ3U2NCcsXG4gICAgICAgICAgICBzZWNzOiAndTY0J1xuICAgICAgICB9LFxuICAgICAgICBQZWVySW5mbzoge1xuICAgICAgICAgICAgcGVlcklkOiAnVGV4dCcsXG4gICAgICAgICAgICByb2xlczogJ1RleHQnLFxuICAgICAgICAgICAgcHJvdG9jb2xWZXJzaW9uOiAndTMyJyxcbiAgICAgICAgICAgIGJlc3RIYXNoOiAnSGFzaCcsXG4gICAgICAgICAgICBiZXN0TnVtYmVyOiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIFBlckRpc3BhdGNoQ2xhc3NVMzI6IHtcbiAgICAgICAgICAgIG5vcm1hbDogJ3UzMicsXG4gICAgICAgICAgICBvcGVyYXRpb25hbDogJ3UzMicsXG4gICAgICAgICAgICBtYW5kYXRvcnk6ICd1MzInXG4gICAgICAgIH0sXG4gICAgICAgIFBlckRpc3BhdGNoQ2xhc3NXZWlnaHQ6IHtcbiAgICAgICAgICAgIG5vcm1hbDogJ1dlaWdodCcsXG4gICAgICAgICAgICBvcGVyYXRpb25hbDogJ1dlaWdodCcsXG4gICAgICAgICAgICBtYW5kYXRvcnk6ICdXZWlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIFBlckRpc3BhdGNoQ2xhc3NXZWlnaHRzUGVyQ2xhc3M6IHtcbiAgICAgICAgICAgIG5vcm1hbDogJ1dlaWdodFBlckNsYXNzJyxcbiAgICAgICAgICAgIG9wZXJhdGlvbmFsOiAnV2VpZ2h0UGVyQ2xhc3MnLFxuICAgICAgICAgICAgbWFuZGF0b3J5OiAnV2VpZ2h0UGVyQ2xhc3MnXG4gICAgICAgIH0sXG4gICAgICAgIFBoYXNlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIEFwcGx5RXh0cmluc2ljOiAndTMyJyxcbiAgICAgICAgICAgICAgICBGaW5hbGl6YXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbjogJ051bGwnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFJhd09yaWdpbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBSb290OiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgU2lnbmVkOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgICAgICBOb25lOiAnTnVsbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUmVmQ291bnQ6ICd1MzInLFxuICAgICAgICBSZWZDb3VudFRvMjU5OiAndTgnLFxuICAgICAgICBTeW5jU3RhdGU6IHtcbiAgICAgICAgICAgIHN0YXJ0aW5nQmxvY2s6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBjdXJyZW50QmxvY2s6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBoaWdoZXN0QmxvY2s6ICdPcHRpb248QmxvY2tOdW1iZXI+J1xuICAgICAgICB9LFxuICAgICAgICBTeXN0ZW1PcmlnaW46ICdSYXdPcmlnaW4nLFxuICAgICAgICBUb2tlbkVycm9yOiB7XG4gICAgICAgICAgICBfZW51bTogW1xuICAgICAgICAgICAgICAgICdOb0Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnV291bGREaWUnLFxuICAgICAgICAgICAgICAgICdCZWxvd01pbmltdW0nLFxuICAgICAgICAgICAgICAgICdDYW5ub3RDcmVhdGUnLFxuICAgICAgICAgICAgICAgICdVbmtub3duQXNzZXQnLFxuICAgICAgICAgICAgICAgICdGcm96ZW4nLFxuICAgICAgICAgICAgICAgICdVbnN1cHBvcnRlZCcsXG4gICAgICAgICAgICAgICAgLy8gdGhlc2UgYXJlIGRyb3BwZWQsIGJ1dCBzdGlsbCBpbiBvbGRlciB2ZXJzaW9uc1xuICAgICAgICAgICAgICAgIC8vIChpZiB0aGlzIGFkanVzdHMsIHdpbGwgbmVlZCB0byB0YWtlIGEgcmUtbG9vaylcbiAgICAgICAgICAgICAgICAnVW5kZXJmbG93JyxcbiAgICAgICAgICAgICAgICAnT3ZlcmZsb3cnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFRyYW5zYWN0aW9uVmFsaWRpdHlFcnJvcjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBJbnZhbGlkOiAnSW52YWxpZFRyYW5zYWN0aW9uJyxcbiAgICAgICAgICAgICAgICBVbmtub3duOiAnVW5rbm93blRyYW5zYWN0aW9uJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBUcmFuc2FjdGlvbmFsRXJyb3I6IHtcbiAgICAgICAgICAgIF9lbnVtOiBbXG4gICAgICAgICAgICAgICAgJ0xpbWl0UmVhY2hlZCcsXG4gICAgICAgICAgICAgICAgJ05vTGF5ZXInXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFVua25vd25UcmFuc2FjdGlvbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBDYW5ub3RMb29rdXA6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBOb1Vuc2lnbmVkVmFsaWRhdG9yOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQ3VzdG9tOiAndTgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFdlaWdodFBlckNsYXNzOiB7XG4gICAgICAgICAgICBiYXNlRXh0cmluc2ljOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIG1heEV4dHJpbnNpYzogJ09wdGlvbjxXZWlnaHQ+JyxcbiAgICAgICAgICAgIG1heFRvdGFsOiAnT3B0aW9uPFdlaWdodD4nLFxuICAgICAgICAgICAgcmVzZXJ2ZWQ6ICdPcHRpb248V2VpZ2h0PidcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnBjID0ge1xuICAgIGFjY291bnROZXh0SW5kZXg6IHtcbiAgICAgICAgYWxpYXM6IFsnYWNjb3VudF9uZXh0SW5kZXgnXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXRyaWV2ZXMgdGhlIG5leHQgYWNjb3VudEluZGV4IGFzIGF2YWlsYWJsZSBvbiB0aGUgbm9kZScsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhY2NvdW50SWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdJbmRleCdcbiAgICB9LFxuICAgIGFkZExvZ0ZpbHRlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FkZHMgdGhlIHN1cHBsaWVkIGRpcmVjdGl2ZXMgdG8gdGhlIGN1cnJlbnQgbG9nIGZpbHRlcicsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGlyZWN0aXZlcycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH0sXG4gICAgYWRkUmVzZXJ2ZWRQZWVyOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkcyBhIHJlc2VydmVkIHBlZXInLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BlZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdUZXh0J1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnVGV4dCdcbiAgICB9LFxuICAgIGNoYWluOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIHRoZSBjaGFpbicsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdUZXh0J1xuICAgIH0sXG4gICAgY2hhaW5UeXBlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIHRoZSBjaGFpbiB0eXBlJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0NoYWluVHlwZSdcbiAgICB9LFxuICAgIGRyeVJ1bjoge1xuICAgICAgICBhbGlhczogWydzeXN0ZW1fZHJ5UnVuQXQnXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdEcnkgcnVuIGFuIGV4dHJpbnNpYyBhdCBhIGdpdmVuIGJsb2NrJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdleHRyaW5zaWMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdCeXRlcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXNIaXN0b3JpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdhdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jsb2NrSGFzaCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0FwcGx5RXh0cmluc2ljUmVzdWx0J1xuICAgIH0sXG4gICAgaGVhbHRoOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGhlYWx0aCBzdGF0dXMgb2YgdGhlIG5vZGUnLFxuICAgICAgICBub0Vycm9yTG9nOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnSGVhbHRoJ1xuICAgIH0sXG4gICAgbG9jYWxMaXN0ZW5BZGRyZXNzZXM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgYWRkcmVzc2VzIGluY2x1ZGUgYSB0cmFpbGluZyAvcDJwLyB3aXRoIHRoZSBsb2NhbCBQZWVySWQsIGFuZCBhcmUgdGh1cyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gYWRkUmVzZXJ2ZWRQZWVyIG9yIGFzIGEgYm9vdG5vZGUgYWRkcmVzcyBmb3IgZXhhbXBsZScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8VGV4dD4nXG4gICAgfSxcbiAgICBsb2NhbFBlZXJJZDoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJhc2U1OC1lbmNvZGVkIFBlZXJJZCBvZiB0aGUgbm9kZScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdUZXh0J1xuICAgIH0sXG4gICAgbmFtZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgbm9kZSBuYW1lJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgfSxcbiAgICBuZXR3b3JrU3RhdGU6IHtcbiAgICAgICAgYWxpYXM6IFsnc3lzdGVtX3Vuc3RhYmxlX25ldHdvcmtTdGF0ZSddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgY3VycmVudCBzdGF0ZSBvZiB0aGUgbmV0d29yaycsXG4gICAgICAgIGlzVW5zYWZlOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnTmV0d29ya1N0YXRlJ1xuICAgIH0sXG4gICAgbm9kZVJvbGVzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgcm9sZXMgdGhlIG5vZGUgaXMgcnVubmluZyBhcycsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8Tm9kZVJvbGU+J1xuICAgIH0sXG4gICAgcGVlcnM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBjdXJyZW50bHkgY29ubmVjdGVkIHBlZXJzJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdWZWM8UGVlckluZm8+J1xuICAgIH0sXG4gICAgcHJvcGVydGllczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCBhIGN1c3RvbSBzZXQgb2YgcHJvcGVydGllcyBhcyBhIEpTT04gb2JqZWN0LCBkZWZpbmVkIGluIHRoZSBjaGFpbiBzcGVjJyxcbiAgICAgICAgcGFyYW1zOiBbXSxcbiAgICAgICAgdHlwZTogJ0NoYWluUHJvcGVydGllcydcbiAgICB9LFxuICAgIHJlbW92ZVJlc2VydmVkUGVlcjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JlbW92ZSBhIHJlc2VydmVkIHBlZXInLFxuICAgICAgICBpc1Vuc2FmZTogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BlZXJJZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1RleHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdUZXh0J1xuICAgIH0sXG4gICAgcmVzZXJ2ZWRQZWVyczoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgcGVlcnMnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnVmVjPFRleHQ+J1xuICAgIH0sXG4gICAgcmVzZXRMb2dGaWx0ZXI6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXNldHMgdGhlIGxvZyBmaWx0ZXIgdG8gU3Vic3RyYXRlIGRlZmF1bHRzJyxcbiAgICAgICAgaXNVbnNhZmU6IHRydWUsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgIH0sXG4gICAgc3luY1N0YXRlOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHN5bmNpbmcgb2YgdGhlIG5vZGUnLFxuICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICB0eXBlOiAnU3luY1N0YXRlJ1xuICAgIH0sXG4gICAgdmVyc2lvbjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyB0aGUgdmVyc2lvbiBvZiB0aGUgbm9kZScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIHR5cGU6ICdUZXh0J1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgcnVudGltZSA9IHtcbiAgICBBY2NvdW50Tm9uY2VBcGk6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIGFjY291bnRfbm9uY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgQVBJIHRvIHF1ZXJ5IGFjY291bnQgbm9uY2UgKGFrYSB0cmFuc2FjdGlvbiBpbmRleCknLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYWNjb3VudElkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWNjb3VudElkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSW5kZXgnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBCb3VudHk6IHtcbiAgICAgICAgICAgIHByb3Bvc2VyOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBmZWU6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGN1cmF0b3JEZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBib25kOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBzdGF0dXM6ICdCb3VudHlTdGF0dXMnXG4gICAgICAgIH0sXG4gICAgICAgIEJvdW50eUluZGV4OiAndTMyJyxcbiAgICAgICAgQm91bnR5U3RhdHVzOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIFByb3Bvc2VkOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgQXBwcm92ZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBGdW5kZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBDdXJhdG9yUHJvcG9zZWQ6ICdCb3VudHlTdGF0dXNDdXJhdG9yUHJvcG9zZWQnLFxuICAgICAgICAgICAgICAgIEFjdGl2ZTogJ0JvdW50eVN0YXR1c0FjdGl2ZScsXG4gICAgICAgICAgICAgICAgUGVuZGluZ1BheW91dDogJ0JvdW50eVN0YXR1c1BlbmRpbmdQYXlvdXQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEJvdW50eVN0YXR1c0FjdGl2ZToge1xuICAgICAgICAgICAgY3VyYXRvcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB1cGRhdGVEdWU6ICdCbG9ja051bWJlcidcbiAgICAgICAgfSxcbiAgICAgICAgQm91bnR5U3RhdHVzQ3VyYXRvclByb3Bvc2VkOiB7XG4gICAgICAgICAgICBjdXJhdG9yOiAnQWNjb3VudElkJ1xuICAgICAgICB9LFxuICAgICAgICBCb3VudHlTdGF0dXNQZW5kaW5nUGF5b3V0OiB7XG4gICAgICAgICAgICBjdXJhdG9yOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHVubG9ja0F0OiAnQmxvY2tOdW1iZXInXG4gICAgICAgIH0sXG4gICAgICAgIE9wZW5UaXA6IHtcbiAgICAgICAgICAgIHJlYXNvbjogJ0hhc2gnLFxuICAgICAgICAgICAgd2hvOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIGZpbmRlcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBkZXBvc2l0OiAnQmFsYW5jZScsXG4gICAgICAgICAgICBjbG9zZXM6ICdPcHRpb248QmxvY2tOdW1iZXI+JyxcbiAgICAgICAgICAgIHRpcHM6ICdWZWM8T3BlblRpcFRpcD4nLFxuICAgICAgICAgICAgZmluZGVyc0ZlZTogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIE9wZW5UaXBUbzIyNToge1xuICAgICAgICAgICAgcmVhc29uOiAnSGFzaCcsXG4gICAgICAgICAgICB3aG86ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZmluZGVyOiAnT3B0aW9uPE9wZW5UaXBGaW5kZXJUbzIyNT4nLFxuICAgICAgICAgICAgY2xvc2VzOiAnT3B0aW9uPEJsb2NrTnVtYmVyPicsXG4gICAgICAgICAgICB0aXBzOiAnVmVjPE9wZW5UaXBUaXA+J1xuICAgICAgICB9LFxuICAgICAgICBPcGVuVGlwRmluZGVyVG8yMjU6ICcoQWNjb3VudElkLCBCYWxhbmNlKScsXG4gICAgICAgIE9wZW5UaXBUaXA6ICcoQWNjb3VudElkLCBCYWxhbmNlKScsXG4gICAgICAgIFRyZWFzdXJ5UHJvcG9zYWw6IHtcbiAgICAgICAgICAgIHByb3Bvc2VyOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIHZhbHVlOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBiZW5lZmljaWFyeTogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBib25kOiAnQmFsYW5jZSdcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBNdWx0aXBsaWVyOiAnRml4ZWQxMjgnXG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJ1bnRpbWUgfSBmcm9tICcuL3J1bnRpbWUuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIHJwYzoge30sXG4gICAgcnVudGltZSxcbiAgICB0eXBlczoge1xuICAgICAgICBUcmFuc2FjdGlvblNvdXJjZToge1xuICAgICAgICAgICAgX2VudW06IFsnSW5CbG9jaycsICdMb2NhbCcsICdFeHRlcm5hbCddXG4gICAgICAgIH0sXG4gICAgICAgIFRyYW5zYWN0aW9uVmFsaWRpdHk6ICdSZXN1bHQ8VmFsaWRUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25WYWxpZGl0eUVycm9yPicsXG4gICAgICAgIFZhbGlkVHJhbnNhY3Rpb246IHtcbiAgICAgICAgICAgIHByaW9yaXR5OiAnVHJhbnNhY3Rpb25Qcmlvcml0eScsXG4gICAgICAgICAgICByZXF1aXJlczogJ1ZlYzxUcmFuc2FjdGlvblRhZz4nLFxuICAgICAgICAgICAgcHJvdmlkZXM6ICdWZWM8VHJhbnNhY3Rpb25UYWc+JyxcbiAgICAgICAgICAgIGxvbmdldml0eTogJ1RyYW5zYWN0aW9uTG9uZ2V2aXR5JyxcbiAgICAgICAgICAgIHByb3BhZ2F0ZTogJ2Jvb2wnXG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgVGFnZ2VkVHJhbnNhY3Rpb25RdWV1ZTogW1xuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVfdHJhbnNhY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdWYWxpZGF0ZSB0aGUgdHJhbnNhY3Rpb24uJyxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NvdXJjZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RyYW5zYWN0aW9uU291cmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdFeHRyaW5zaWMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdibG9ja0hhc2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdCbG9ja0hhc2gnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUcmFuc2FjdGlvblZhbGlkaXR5J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJzaW9uOiAzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZV90cmFuc2FjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRlIHRoZSB0cmFuc2FjdGlvbi4nLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVHJhbnNhY3Rpb25Tb3VyY2UnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd0eCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RyYW5zYWN0aW9uVmFsaWRpdHknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlX3RyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVmFsaWRhdGUgdGhlIHRyYW5zYWN0aW9uLicsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd0eCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0V4dHJpbnNpYydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RyYW5zYWN0aW9uVmFsaWRpdHknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcnNpb246IDFcbiAgICAgICAgfVxuICAgIF1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBDbGFzc0lkOiAndTMyJyxcbiAgICAgICAgSW5zdGFuY2VJZDogJ3UzMicsXG4gICAgICAgIERlcG9zaXRCYWxhbmNlOiAnQmFsYW5jZScsXG4gICAgICAgIERlcG9zaXRCYWxhbmNlT2Y6ICdCYWxhbmNlJyxcbiAgICAgICAgQ2xhc3NEZXRhaWxzOiB7XG4gICAgICAgICAgICBvd25lcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBpc3N1ZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgYWRtaW46ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgZnJlZXplcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICB0b3RhbERlcG9zaXQ6ICdEZXBvc2l0QmFsYW5jZScsXG4gICAgICAgICAgICBmcmVlSG9sZGluZzogJ2Jvb2wnLFxuICAgICAgICAgICAgaW5zdGFuY2VzOiAndTMyJyxcbiAgICAgICAgICAgIGluc3RhbmNlTWV0YWRhdGFzOiAndTMyJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6ICd1MzInLFxuICAgICAgICAgICAgaXNGcm96ZW46ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBEZXN0cm95V2l0bmVzczoge1xuICAgICAgICAgICAgaW5zdGFuY2VzOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIGluc3RhbmNlTWV0YWRhdGFzOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgIH0sXG4gICAgICAgIEluc3RhbmNlRGV0YWlsczoge1xuICAgICAgICAgICAgb3duZXI6ICdBY2NvdW50SWQnLFxuICAgICAgICAgICAgYXBwcm92ZWQ6ICdPcHRpb248QWNjb3VudElkPicsXG4gICAgICAgICAgICBpc0Zyb3plbjogJ2Jvb2wnLFxuICAgICAgICAgICAgZGVwb3NpdDogJ0RlcG9zaXRCYWxhbmNlJ1xuICAgICAgICB9LFxuICAgICAgICBDbGFzc01ldGFkYXRhOiB7XG4gICAgICAgICAgICBkZXBvc2l0OiAnRGVwb3NpdEJhbGFuY2UnLFxuICAgICAgICAgICAgZGF0YTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgaXNGcm96ZW46ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICBJbnN0YW5jZU1ldGFkYXRhOiB7XG4gICAgICAgICAgICBkZXBvc2l0OiAnRGVwb3NpdEJhbGFuY2UnLFxuICAgICAgICAgICAgZGF0YTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgaXNGcm96ZW46ICdib29sJ1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICBycGM6IHt9LFxuICAgIHR5cGVzOiB7XG4gICAgICAgIE11bHRpc2lnOiB7XG4gICAgICAgICAgICB3aGVuOiAnVGltZXBvaW50JyxcbiAgICAgICAgICAgIGRlcG9zaXQ6ICdCYWxhbmNlJyxcbiAgICAgICAgICAgIGRlcG9zaXRvcjogJ0FjY291bnRJZCcsXG4gICAgICAgICAgICBhcHByb3ZhbHM6ICdWZWM8QWNjb3VudElkPidcbiAgICAgICAgfSxcbiAgICAgICAgVGltZXBvaW50OiB7XG4gICAgICAgICAgICBoZWlnaHQ6ICdCbG9ja051bWJlcicsXG4gICAgICAgICAgICBpbmRleDogJ3UzMidcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICBWZXN0aW5nSW5mbzoge1xuICAgICAgICAgICAgbG9ja2VkOiAnQmFsYW5jZScsXG4gICAgICAgICAgICBwZXJCbG9jazogJ0JhbGFuY2UnLFxuICAgICAgICAgICAgc3RhcnRpbmdCbG9jazogJ0Jsb2NrTnVtYmVyJ1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IG1hcFhjbVR5cGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNyZWF0ZSc7XG5pbXBvcnQgeyB2MCB9IGZyb20gJy4vdjAuanMnO1xuaW1wb3J0IHsgdjEgfSBmcm9tICcuL3YxLmpzJztcbmltcG9ydCB7IHYyIH0gZnJvbSAnLi92Mi5qcyc7XG5jb25zdCBYQ01fTEFURVNUID0gJ1YyJztcbmNvbnN0IHhjbSA9IHtcbiAgICBYY21PcmlnaW46IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFhjbTogJ011bHRpTG9jYXRpb24nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbXBNZXNzYWdlRm9ybWF0OiB7XG4gICAgICAgIF9lbnVtOiBbJ0NvbmNhdGVuYXRlZFZlcnNpb25lZFhjbScsICdDb25jYXRlbmF0ZWRFbmNvZGVkQmxvYicsICdTaWduYWxzJ11cbiAgICB9LFxuICAgIFhjbUFzc2V0SWQ6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIENvbmNyZXRlOiAnTXVsdGlMb2NhdGlvbicsXG4gICAgICAgICAgICBBYnN0cmFjdDogJ0J5dGVzJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBJbmJvdW5kU3RhdHVzOiB7XG4gICAgICAgIF9lbnVtOiBbJ09rJywgJ1N1c3BlbmRlZCddXG4gICAgfSxcbiAgICBPdXRib3VuZFN0YXR1czoge1xuICAgICAgICBfZW51bTogWydPaycsICdTdXNwZW5kZWQnXVxuICAgIH0sXG4gICAgTXVsdGlBc3NldHM6ICdWZWM8TXVsdGlBc3NldD4nXG59O1xuY29uc3QgbG9jYXRpb24gPSB7XG4gICAgQm9keUlkOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBVbml0OiAnTnVsbCcsXG4gICAgICAgICAgICBOYW1lZDogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgSW5kZXg6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgRXhlY3V0aXZlOiAnTnVsbCcsXG4gICAgICAgICAgICBUZWNobmljYWw6ICdOdWxsJyxcbiAgICAgICAgICAgIExlZ2lzbGF0aXZlOiAnTnVsbCcsXG4gICAgICAgICAgICBKdWRpY2lhbDogJ051bGwnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEJvZHlQYXJ0OiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBWb2ljZTogJ051bGwnLFxuICAgICAgICAgICAgTWVtYmVyczogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICBGcmFjdGlvbjoge1xuICAgICAgICAgICAgICAgIG5vbTogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgZGVub206ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQXRMZWFzdFByb3BvcnRpb246IHtcbiAgICAgICAgICAgICAgICBub206ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIGRlbm9tOiAnQ29tcGFjdDx1MzI+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE1vcmVUaGFuUHJvcG9ydGlvbjoge1xuICAgICAgICAgICAgICAgIG5vbTogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgZGVub206ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIEludGVyaW9yTXVsdGlMb2NhdGlvbjogJ0p1bmN0aW9ucycsXG4gICAgTmV0d29ya0lkOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBBbnk6ICdOdWxsJyxcbiAgICAgICAgICAgIE5hbWVkOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBQb2xrYWRvdDogJ051bGwnLFxuICAgICAgICAgICAgS3VzYW1hOiAnTnVsbCdcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgcnBjOiB7fSxcbiAgICB0eXBlczoge1xuICAgICAgICAuLi5sb2NhdGlvbixcbiAgICAgICAgLi4ueGNtLFxuICAgICAgICAuLi52MCxcbiAgICAgICAgLi4udjEsXG4gICAgICAgIC4uLnYyLFxuICAgICAgICAuLi5tYXBYY21UeXBlcyhYQ01fTEFURVNUKSxcbiAgICAgICAgRG91YmxlRW5jb2RlZENhbGw6IHtcbiAgICAgICAgICAgIGVuY29kZWQ6ICdWZWM8dTg+J1xuICAgICAgICB9LFxuICAgICAgICBYY21PcmlnaW5LaW5kOiB7XG4gICAgICAgICAgICBfZW51bTogWydOYXRpdmUnLCAnU292ZXJlaWduQWNjb3VudCcsICdTdXBlcnVzZXInLCAnWGNtJ11cbiAgICAgICAgfSxcbiAgICAgICAgT3V0Y29tZToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBDb21wbGV0ZTogJ1dlaWdodCcsXG4gICAgICAgICAgICAgICAgSW5jb21wbGV0ZTogJyhXZWlnaHQsIFhjbUVycm9yVjApJyxcbiAgICAgICAgICAgICAgICBFcnJvcjogJ1hjbUVycm9yVjAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFF1ZXJ5SWQ6ICd1NjQnLFxuICAgICAgICBRdWVyeVN0YXR1czoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBQZW5kaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmRlcjogJ1ZlcnNpb25lZE11bHRpTG9jYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBtYXliZU5vdGlmeTogJ09wdGlvbjwodTgsIHU4KT4nLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiAnQmxvY2tOdW1iZXInXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBSZWFkeToge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogJ1ZlcnNpb25lZFJlc3BvbnNlJyxcbiAgICAgICAgICAgICAgICAgICAgYXQ6ICdCbG9ja051bWJlcidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFF1ZXVlQ29uZmlnRGF0YToge1xuICAgICAgICAgICAgc3VzcGVuZFRocmVzaG9sZDogJ3UzMicsXG4gICAgICAgICAgICBkcm9wVGhyZXNob2xkOiAndTMyJyxcbiAgICAgICAgICAgIHJlc3VtZVRocmVzaG9sZDogJ3UzMicsXG4gICAgICAgICAgICB0aHJlc2hvbGRXZWlnaHQ6ICdXZWlnaHQnLFxuICAgICAgICAgICAgd2VpZ2h0UmVzdHJpY3REZWNheTogJ1dlaWdodCdcbiAgICAgICAgfSxcbiAgICAgICAgVmVyc2lvbk1pZ3JhdGlvblN0YWdlOiB7XG4gICAgICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgICAgIE1pZ3JhdGVTdXBwb3J0ZWRWZXJzaW9uOiAnTnVsbCcsXG4gICAgICAgICAgICAgICAgTWlncmF0ZVZlcnNpb25Ob3RpZmllcnM6ICdOdWxsJyxcbiAgICAgICAgICAgICAgICBOb3RpZnlDdXJyZW50VGFyZ2V0czogJ09wdGlvbjxCeXRlcz4nLFxuICAgICAgICAgICAgICAgIE1pZ3JhdGVBbmROb3RpZnlPbGRUYXJnZXRzOiAnTnVsbCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgVmVyc2lvbmVkTXVsdGlBc3NldDoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ011bHRpQXNzZXRWMCcsXG4gICAgICAgICAgICAgICAgVjE6ICdNdWx0aUFzc2V0VjEnLFxuICAgICAgICAgICAgICAgIFYyOiAnTXVsdGlBc3NldFYyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBWZXJzaW9uZWRNdWx0aUFzc2V0czoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICBWMTogJ011bHRpQXNzZXRzVjEnLFxuICAgICAgICAgICAgICAgIFYyOiAnTXVsdGlBc3NldHNWMidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgVmVyc2lvbmVkTXVsdGlMb2NhdGlvbjoge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ011bHRpTG9jYXRpb25WMCcsXG4gICAgICAgICAgICAgICAgVjE6ICdNdWx0aUxvY2F0aW9uVjEnLFxuICAgICAgICAgICAgICAgIFYyOiAnTXVsdGlMb2NhdGlvblYyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBWZXJzaW9uZWRSZXNwb25zZToge1xuICAgICAgICAgICAgVjA6ICdSZXNwb25zZVYwJyxcbiAgICAgICAgICAgIFYxOiAnUmVzcG9uc2VWMScsXG4gICAgICAgICAgICBWMjogJ1Jlc3BvbnNlVjInXG4gICAgICAgIH0sXG4gICAgICAgIFZlcnNpb25lZFhjbToge1xuICAgICAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgICAgICBWMDogJ1hjbVYwJyxcbiAgICAgICAgICAgICAgICBWMTogJ1hjbVYxJyxcbiAgICAgICAgICAgICAgICBWMjogJ1hjbVYyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBYY21WZXJzaW9uOiAndTMyJ1xuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdjAgPSB7XG4gICAgRnVuZ2liaWxpdHlWMDogJ0Z1bmdpYmlsaXR5VjEnLFxuICAgIFdpbGRGdW5naWJpbGl0eVYwOiAnV2lsZEZ1bmdpYmlsaXR5VjEnLFxuICAgIEFzc2V0SW5zdGFuY2VWMDoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgVW5kZWZpbmVkOiAnTnVsbCcsXG4gICAgICAgICAgICBJbmRleDg6ICd1OCcsXG4gICAgICAgICAgICBJbmRleDE2OiAnQ29tcGFjdDx1MTY+JyxcbiAgICAgICAgICAgIEluZGV4MzI6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgSW5kZXg2NDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICBJbmRleDEyODogJ0NvbXBhY3Q8dTEyOD4nLFxuICAgICAgICAgICAgQXJyYXk0OiAnW3U4OyA0XScsXG4gICAgICAgICAgICBBcnJheTg6ICdbdTg7IDhdJyxcbiAgICAgICAgICAgIEFycmF5MTY6ICdbdTg7IDE2XScsXG4gICAgICAgICAgICBBcnJheTMyOiAnW3U4OyAzMl0nLFxuICAgICAgICAgICAgQmxvYjogJ1ZlYzx1OD4nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEp1bmN0aW9uVjA6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFBhcmVudDogJ051bGwnLFxuICAgICAgICAgICAgUGFyYWNoYWluOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIEFjY291bnRJZDMyOiB7XG4gICAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmtJZCcsXG4gICAgICAgICAgICAgICAgaWQ6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQWNjb3VudEluZGV4NjQ6IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29ya0lkJyxcbiAgICAgICAgICAgICAgICBpbmRleDogJ0NvbXBhY3Q8dTY0PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY2NvdW50S2V5MjA6IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29ya0lkJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdbdTg7IDIwXSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBQYWxsZXRJbnN0YW5jZTogJ3U4JyxcbiAgICAgICAgICAgIEdlbmVyYWxJbmRleDogJ0NvbXBhY3Q8dTEyOD4nLFxuICAgICAgICAgICAgR2VuZXJhbEtleTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgT25seUNoaWxkOiAnTnVsbCcsXG4gICAgICAgICAgICBQbHVyYWxpdHk6IHtcbiAgICAgICAgICAgICAgICBpZDogJ0JvZHlJZCcsXG4gICAgICAgICAgICAgICAgcGFydDogJ0JvZHlQYXJ0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBNdWx0aUFzc2V0VjA6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIE5vbmU6ICdOdWxsJyxcbiAgICAgICAgICAgIEFsbDogJ051bGwnLFxuICAgICAgICAgICAgQWxsRnVuZ2libGU6ICdOdWxsJyxcbiAgICAgICAgICAgIEFsbE5vbkZ1bmdpYmxlOiAnTnVsbCcsXG4gICAgICAgICAgICBBbGxBYnN0cmFjdEZ1bmdpYmxlOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBBbGxBYnN0cmFjdE5vbkZ1bmdpYmxlOiAnVmVjPHU4PicsXG4gICAgICAgICAgICBBbGxDb25jcmV0ZUZ1bmdpYmxlOiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgIEFsbENvbmNyZXRlTm9uRnVuZ2libGU6ICdNdWx0aUxvY2F0aW9uVjAnLFxuICAgICAgICAgICAgQWJzdHJhY3RGdW5naWJsZToge1xuICAgICAgICAgICAgICAgIGlkOiAnVmVjPHU4PicsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2U6ICdDb21wYWN0PHUxMjg+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFic3RyYWN0Tm9uRnVuZ2libGU6IHtcbiAgICAgICAgICAgICAgICBjbGFzczogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiAnQXNzZXRJbnN0YW5jZVYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIENvbmNyZXRlRnVuZ2libGU6IHtcbiAgICAgICAgICAgICAgICBpZDogJ011bHRpTG9jYXRpb25WMCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiAnQ29tcGFjdDx1MTI4PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBDb25jcmV0ZU5vbkZ1bmdpYmxlOiB7XG4gICAgICAgICAgICAgICAgY2xhc3M6ICdNdWx0aUxvY2F0aW9uVjAnLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiAnQXNzZXRJbnN0YW5jZVYwJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBNdWx0aUxvY2F0aW9uVjA6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEhlcmU6ICdOdWxsJyxcbiAgICAgICAgICAgIFgxOiAnSnVuY3Rpb25WMCcsXG4gICAgICAgICAgICBYMjogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYMzogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYNDogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYNTogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYNjogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYNzogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKScsXG4gICAgICAgICAgICBYODogJyhKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwLCBKdW5jdGlvblYwKSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgT3JpZ2luS2luZFYwOiB7XG4gICAgICAgIF9lbnVtOiBbJ05hdGl2ZScsICdTb3ZlcmVpZ25BY2NvdW50JywgJ1N1cGVydXNlcicsICdYY20nXVxuICAgIH0sXG4gICAgUmVzcG9uc2VWMDoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgQXNzZXRzOiAnVmVjPE11bHRpQXNzZXRWMD4nXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbVYwOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnVmVjPE11bHRpQXNzZXRWMD4nLFxuICAgICAgICAgICAgICAgIGVmZmVjdHM6ICdWZWM8WGNtT3JkZXJWMD4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgUmVzZXJ2ZUFzc2V0RGVwb3NpdDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjA+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlY2VpdmVUZWxlcG9ydGVkQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdWZWM8TXVsdGlBc3NldFYwPicsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYwPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBRdWVyeVJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6ICdSZXNwb25zZVYwJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zZmVyQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdWZWM8TXVsdGlBc3NldFYwPicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2ZlclJlc2VydmVBc3NldDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjA+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zYWN0OiB7XG4gICAgICAgICAgICAgICAgb3JpZ2luVHlwZTogJ1hjbU9yaWdpbktpbmQnLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVXZWlnaHRBdE1vc3Q6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGNhbGw6ICdEb3VibGVFbmNvZGVkQ2FsbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgICAgICBtYXhNZXNzYWdlU2l6ZTogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgbWF4Q2FwYWNpdHk6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSHJtcENoYW5uZWxBY2NlcHRlZDoge1xuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIcm1wQ2hhbm5lbENsb3Npbmc6IHtcbiAgICAgICAgICAgICAgICBpbml0aWF0b3I6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgcmVjaXBpZW50OiAnQ29tcGFjdDx1MzI+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlbGF5ZWRGcm9tOiB7XG4gICAgICAgICAgICAgICAgd2hvOiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnWGNtVjAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbUVycm9yVjA6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFVuZGVmaW5lZDogJ051bGwnLFxuICAgICAgICAgICAgT3ZlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaW1wbGVtZW50ZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZFhjbVZlcnNpb246ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZFhjbU1lc3NhZ2U6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZEVmZmVjdDogJ051bGwnLFxuICAgICAgICAgICAgRXNjYWxhdGlvbk9mUHJpdmlsZWdlOiAnTnVsbCcsXG4gICAgICAgICAgICBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgIFVudHJ1c3RlZFRlbGVwb3J0TG9jYXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQnVmZmVyT3ZlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgIFNlbmRGYWlsZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIENhbm5vdFJlYWNoRGVzdGluYXRpb246ICcoTXVsdGlMb2NhdGlvbiwgWGNtKScsXG4gICAgICAgICAgICBNdWx0aUxvY2F0aW9uRnVsbDogJ051bGwnLFxuICAgICAgICAgICAgRmFpbGVkVG9EZWNvZGU6ICdOdWxsJyxcbiAgICAgICAgICAgIEJhZE9yaWdpbjogJ051bGwnLFxuICAgICAgICAgICAgRXhjZWVkc01heE1lc3NhZ2VTaXplOiAnTnVsbCcsXG4gICAgICAgICAgICBGYWlsZWRUb1RyYW5zYWN0QXNzZXQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFdlaWdodExpbWl0UmVhY2hlZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBXaWxkY2FyZDogJ051bGwnLFxuICAgICAgICAgICAgVG9vTXVjaFdlaWdodFJlcXVpcmVkOiAnTnVsbCcsXG4gICAgICAgICAgICBOb3RIb2xkaW5nRmVlczogJ051bGwnLFxuICAgICAgICAgICAgV2VpZ2h0Tm90Q29tcHV0YWJsZTogJ051bGwnLFxuICAgICAgICAgICAgQmFycmllcjogJ051bGwnLFxuICAgICAgICAgICAgTm90V2l0aGRyYXdhYmxlOiAnTnVsbCcsXG4gICAgICAgICAgICBMb2NhdGlvbkNhbm5vdEhvbGQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFRvb0V4cGVuc2l2ZTogJ051bGwnLFxuICAgICAgICAgICAgQXNzZXROb3RGb3VuZDogJ051bGwnLFxuICAgICAgICAgICAgUmVjdXJzaW9uTGltaXRSZWFjaGVkOiAnTnVsbCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgWGNtT3JkZXJWMDoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgTnVsbDogJ051bGwnLFxuICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnVmVjPE11bHRpQXNzZXRWMD4nLFxuICAgICAgICAgICAgICAgIGRlc3Q6ICdNdWx0aUxvY2F0aW9uVjAnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRGVwb3NpdFJlc2VydmVBc3NldDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjA+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEV4Y2hhbmdlQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBnaXZlOiAnVmVjPE11bHRpQXNzZXRWMD4nLFxuICAgICAgICAgICAgICAgIHJlY2VpdmU6ICdWZWM8TXVsdGlBc3NldFYwPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbml0aWF0ZVJlc2VydmVXaXRoZHJhdzoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ1ZlYzxNdWx0aUFzc2V0VjA+JyxcbiAgICAgICAgICAgICAgICByZXNlcnZlOiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjA+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEluaXRpYXRlVGVsZXBvcnQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdWZWM8TXVsdGlBc3NldFYwPicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMCcsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYwPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBRdWVyeUhvbGRpbmc6IHtcbiAgICAgICAgICAgICAgICBxdWVyeUlkOiAnQ29tcGFjdDx1NjQ+JyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYwJyxcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdWZWM8TXVsdGlBc3NldFYwPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICBmZWVzOiAnTXVsdGlBc3NldFYwJyxcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGRlYnQ6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGhhbHRPbkVycm9yOiAnYm9vbCcsXG4gICAgICAgICAgICAgICAgeGNtOiAnVmVjPFhjbVYwPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdjEgPSB7XG4gICAgQXNzZXRJbnN0YW5jZVYxOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBVbmRlZmluZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIEluZGV4OiAnQ29tcGFjdDx1MTI4PicsXG4gICAgICAgICAgICBBcnJheTQ6ICdbdTg7IDRdJyxcbiAgICAgICAgICAgIEFycmF5ODogJ1t1ODsgOF0nLFxuICAgICAgICAgICAgQXJyYXkxNjogJ1t1ODsgMTZdJyxcbiAgICAgICAgICAgIEFycmF5MzI6ICdbdTg7IDMyXScsXG4gICAgICAgICAgICBCbG9iOiAnQnl0ZXMnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIEZ1bmdpYmlsaXR5VjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEZ1bmdpYmxlOiAnQ29tcGFjdDx1MTI4PicsXG4gICAgICAgICAgICBOb25GdW5naWJsZTogJ0Fzc2V0SW5zdGFuY2VWMSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgSnVuY3Rpb25WMToge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgUGFyYWNoYWluOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgIEFjY291bnRJZDMyOiB7XG4gICAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmtJZCcsXG4gICAgICAgICAgICAgICAgaWQ6ICdBY2NvdW50SWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQWNjb3VudEluZGV4NjQ6IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29ya0lkJyxcbiAgICAgICAgICAgICAgICBpbmRleDogJ0NvbXBhY3Q8dTY0PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBY2NvdW50S2V5MjA6IHtcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29ya0lkJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdbdTg7IDIwXSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBQYWxsZXRJbnN0YW5jZTogJ3U4JyxcbiAgICAgICAgICAgIEdlbmVyYWxJbmRleDogJ0NvbXBhY3Q8dTEyOD4nLFxuICAgICAgICAgICAgR2VuZXJhbEtleTogJ1ZlYzx1OD4nLFxuICAgICAgICAgICAgT25seUNoaWxkOiAnTnVsbCcsXG4gICAgICAgICAgICBQbHVyYWxpdHk6IHtcbiAgICAgICAgICAgICAgICBpZDogJ0JvZHlJZCcsXG4gICAgICAgICAgICAgICAgcGFydDogJ0JvZHlQYXJ0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBKdW5jdGlvbnNWMToge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgSGVyZTogJ051bGwnLFxuICAgICAgICAgICAgWDE6ICdKdW5jdGlvblYxJyxcbiAgICAgICAgICAgIFgyOiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFgzOiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg0OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg1OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg2OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg3OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJyxcbiAgICAgICAgICAgIFg4OiAnKEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEsIEp1bmN0aW9uVjEpJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBNdWx0aUFzc2V0c1YxOiAnVmVjPE11bHRpQXNzZXRWMT4nLFxuICAgIE11bHRpQXNzZXRWMToge1xuICAgICAgICBpZDogJ1hjbUFzc2V0SWQnLFxuICAgICAgICBmdW5naWJpbGl0eTogJ0Z1bmdpYmlsaXR5VjEnXG4gICAgfSxcbiAgICBNdWx0aUFzc2V0RmlsdGVyVjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIERlZmluaXRlOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICBXaWxkOiAnV2lsZE11bHRpQXNzZXRWMSdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgTXVsdGlMb2NhdGlvblYxOiB7XG4gICAgICAgIHBhcmVudHM6ICd1OCcsXG4gICAgICAgIGludGVyaW9yOiAnSnVuY3Rpb25zVjEnXG4gICAgfSxcbiAgICBPcmlnaW5LaW5kVjE6ICdPcmlnaW5LaW5kVjAnLFxuICAgIFJlc3BvbnNlVjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEFzc2V0czogJ011bHRpQXNzZXRzVjEnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFdpbGRGdW5naWJpbGl0eVYxOiB7XG4gICAgICAgIF9lbnVtOiBbJ0Z1bmdpYmxlJywgJ05vbkZ1bmdpYmxlJ11cbiAgICB9LFxuICAgIFdpbGRNdWx0aUFzc2V0VjE6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIEFsbDogJ051bGwnLFxuICAgICAgICAgICAgQWxsT2Y6IHtcbiAgICAgICAgICAgICAgICBpZDogJ1hjbUFzc2V0SWQnLFxuICAgICAgICAgICAgICAgIGZ1bmdpYmlsaXR5OiAnV2lsZEZ1bmdpYmlsaXR5VjEnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbVYxOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXNlcnZlQXNzZXREZXBvc2l0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZWNlaXZlVGVsZXBvcnRlZEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBRdWVyeVJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6ICdSZXNwb25zZVYxJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zZmVyQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdNdWx0aUFzc2V0c1YxJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYxJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zZmVyUmVzZXJ2ZUFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMScsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2FjdDoge1xuICAgICAgICAgICAgICAgIG9yaWdpblR5cGU6ICdYY21PcmlnaW5LaW5kJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlV2VpZ2h0QXRNb3N0OiAndTY0JyxcbiAgICAgICAgICAgICAgICBjYWxsOiAnRG91YmxlRW5jb2RlZENhbGwnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSHJtcE5ld0NoYW5uZWxPcGVuUmVxdWVzdDoge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgbWF4TWVzc2FnZVNpemU6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIG1heENhcGFjaXR5OiAnQ29tcGFjdDx1MzI+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEhybXBDaGFubmVsQWNjZXB0ZWQ6IHtcbiAgICAgICAgICAgICAgICByZWNpcGllbnQ6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSHJtcENoYW5uZWxDbG9zaW5nOiB7XG4gICAgICAgICAgICAgICAgaW5pdGlhdG9yOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZWxheWVkRnJvbToge1xuICAgICAgICAgICAgICAgIHdobzogJ011bHRpTG9jYXRpb25WMScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1hjbVYxJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBYY21FcnJvclYxOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBVbmRlZmluZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIE92ZXJmbG93OiAnTnVsbCcsXG4gICAgICAgICAgICBVbmltcGxlbWVudGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBVbmhhbmRsZWRYY21WZXJzaW9uOiAnTnVsbCcsXG4gICAgICAgICAgICBVbmhhbmRsZWRYY21NZXNzYWdlOiAnTnVsbCcsXG4gICAgICAgICAgICBVbmhhbmRsZWRFZmZlY3Q6ICdOdWxsJyxcbiAgICAgICAgICAgIEVzY2FsYXRpb25PZlByaXZpbGVnZTogJ051bGwnLFxuICAgICAgICAgICAgVW50cnVzdGVkUmVzZXJ2ZUxvY2F0aW9uOiAnTnVsbCcsXG4gICAgICAgICAgICBVbnRydXN0ZWRUZWxlcG9ydExvY2F0aW9uOiAnTnVsbCcsXG4gICAgICAgICAgICBEZXN0aW5hdGlvbkJ1ZmZlck92ZXJmbG93OiAnTnVsbCcsXG4gICAgICAgICAgICBTZW5kRmFpbGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBDYW5ub3RSZWFjaERlc3RpbmF0aW9uOiAnKE11bHRpTG9jYXRpb25WMSwgWGNtVjEpJyxcbiAgICAgICAgICAgIE11bHRpTG9jYXRpb25GdWxsOiAnTnVsbCcsXG4gICAgICAgICAgICBGYWlsZWRUb0RlY29kZTogJ051bGwnLFxuICAgICAgICAgICAgQmFkT3JpZ2luOiAnTnVsbCcsXG4gICAgICAgICAgICBFeGNlZWRzTWF4TWVzc2FnZVNpemU6ICdOdWxsJyxcbiAgICAgICAgICAgIEZhaWxlZFRvVHJhbnNhY3RBc3NldDogJ051bGwnLFxuICAgICAgICAgICAgV2VpZ2h0TGltaXRSZWFjaGVkOiAnV2VpZ2h0JyxcbiAgICAgICAgICAgIFdpbGRjYXJkOiAnTnVsbCcsXG4gICAgICAgICAgICBUb29NdWNoV2VpZ2h0UmVxdWlyZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIE5vdEhvbGRpbmdGZWVzOiAnTnVsbCcsXG4gICAgICAgICAgICBXZWlnaHROb3RDb21wdXRhYmxlOiAnTnVsbCcsXG4gICAgICAgICAgICBCYXJyaWVyOiAnTnVsbCcsXG4gICAgICAgICAgICBOb3RXaXRoZHJhd2FibGU6ICdOdWxsJyxcbiAgICAgICAgICAgIExvY2F0aW9uQ2Fubm90SG9sZDogJ051bGwnLFxuICAgICAgICAgICAgVG9vRXhwZW5zaXZlOiAnTnVsbCcsXG4gICAgICAgICAgICBBc3NldE5vdEZvdW5kOiAnTnVsbCcsXG4gICAgICAgICAgICBEZXN0aW5hdGlvblVuc3VwcG9ydGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBSZWN1cnNpb25MaW1pdFJlYWNoZWQ6ICdOdWxsJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBYY21PcmRlclYxOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBOb29wOiAnTnVsbCcsXG4gICAgICAgICAgICBEZXBvc2l0QXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdNdWx0aUFzc2V0RmlsdGVyVjEnLFxuICAgICAgICAgICAgICAgIG1heEFzc2V0czogJ3UzMicsXG4gICAgICAgICAgICAgICAgYmVuZWZpY2lhcnk6ICdNdWx0aUxvY2F0aW9uVjEnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRGVwb3NpdFJlc2VydmVBc3NldDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ011bHRpQXNzZXRGaWx0ZXJWMScsXG4gICAgICAgICAgICAgICAgbWF4QXNzZXRzOiAndTMyJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYxJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjE+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEV4Y2hhbmdlQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBnaXZlOiAnTXVsdGlBc3NldEZpbHRlclYxJyxcbiAgICAgICAgICAgICAgICByZWNlaXZlOiAnTXVsdGlBc3NldHNWMSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbml0aWF0ZVJlc2VydmVXaXRoZHJhdzoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ011bHRpQXNzZXRGaWx0ZXJWMScsXG4gICAgICAgICAgICAgICAgcmVzZXJ2ZTogJ011bHRpTG9jYXRpb25WMScsXG4gICAgICAgICAgICAgICAgZWZmZWN0czogJ1ZlYzxYY21PcmRlclYxPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbml0aWF0ZVRlbGVwb3J0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYxJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYxJyxcbiAgICAgICAgICAgICAgICBlZmZlY3RzOiAnVmVjPFhjbU9yZGVyVjE+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFF1ZXJ5SG9sZGluZzoge1xuICAgICAgICAgICAgICAgIHF1ZXJ5SWQ6ICdDb21wYWN0PHU2ND4nLFxuICAgICAgICAgICAgICAgIGRlc3Q6ICdNdWx0aUxvY2F0aW9uVjEnLFxuICAgICAgICAgICAgICAgIGFzc2V0czogJ011bHRpQXNzZXRGaWx0ZXJWMSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBCdXlFeGVjdXRpb246IHtcbiAgICAgICAgICAgICAgICBmZWVzOiAnTXVsdGlBc3NldFYxJyxcbiAgICAgICAgICAgICAgICB3ZWlnaHQ6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGRlYnQ6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGhhbHRPbkVycm9yOiAnYm9vbCcsXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnVmVjPFhjbVYxPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdjIgPSB7XG4gICAgQXNzZXRJbnN0YW5jZVYyOiAnQXNzZXRJbnN0YW5jZVYxJyxcbiAgICBGdW5naWJpbGl0eVYyOiAnRnVuZ2liaWxpdHlWMScsXG4gICAgSnVuY3Rpb25WMjogJ0p1bmN0aW9uVjEnLFxuICAgIEp1bmN0aW9uc1YyOiAnSnVuY3Rpb25zVjEnLFxuICAgIE11bHRpQXNzZXRzVjI6ICdNdWx0aUFzc2V0c1YxJyxcbiAgICBNdWx0aUFzc2V0VjI6ICdNdWx0aUFzc2V0VjEnLFxuICAgIE11bHRpQXNzZXRGaWx0ZXJWMjogJ011bHRpQXNzZXRGaWx0ZXJWMScsXG4gICAgTXVsdGlMb2NhdGlvblYyOiAnTXVsdGlMb2NhdGlvblYxJyxcbiAgICBPcmlnaW5LaW5kVjI6ICdPcmlnaW5LaW5kVjEnLFxuICAgIFdpbGRGdW5naWJpbGl0eVYyOiAnV2lsZEZ1bmdpYmlsaXR5VjEnLFxuICAgIFJlc3BvbnNlVjI6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIE51bGw6ICdOdWxsJyxcbiAgICAgICAgICAgIEFzc2V0czogJ011bHRpQXNzZXRzVjInLFxuICAgICAgICAgICAgRXhlY3V0aW9uUmVzdWx0OiAnUmVzcG9uc2VWMlJlc3VsdCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUmVzcG9uc2VWMkVycm9yOiAnKHUzMiwgWGNtRXJyb3JWMiknLFxuICAgIFJlc3BvbnNlVjJSZXN1bHQ6ICdSZXN1bHQ8TnVsbCwgUmVzcG9uc2VWMkVycm9yPicsXG4gICAgV2VpZ2h0TGltaXRWMjoge1xuICAgICAgICBfZW51bToge1xuICAgICAgICAgICAgVW5saW1pdGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBMaW1pdGVkOiAnQ29tcGFjdDx1NjQ+J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBJbnN0cnVjdGlvblYyOiB7XG4gICAgICAgIF9lbnVtOiB7XG4gICAgICAgICAgICBXaXRoZHJhd0Fzc2V0OiAnTXVsdGlBc3NldHNWMicsXG4gICAgICAgICAgICBSZXNlcnZlQXNzZXREZXBvc2l0ZWQ6ICdNdWx0aUFzc2V0c1YyJyxcbiAgICAgICAgICAgIFJlY2VpdmVUZWxlcG9ydGVkQXNzZXQ6ICdNdWx0aUFzc2V0c1YyJyxcbiAgICAgICAgICAgIFF1ZXJ5UmVzcG9uc2U6IHtcbiAgICAgICAgICAgICAgICBxdWVyeUlkOiAnQ29tcGFjdDx1NjQ+JyxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogJ1Jlc3BvbnNlVjInLFxuICAgICAgICAgICAgICAgIG1heFdlaWdodDogJ0NvbXBhY3Q8dTY0PidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2ZlckFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldHNWMicsXG4gICAgICAgICAgICAgICAgYmVuZWZpY2lhcnk6ICdNdWx0aUxvY2F0aW9uVjInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVHJhbnNmZXJSZXNlcnZlQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdNdWx0aUFzc2V0c1YyJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYyJyxcbiAgICAgICAgICAgICAgICB4Y206ICdYY21WMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2FjdDoge1xuICAgICAgICAgICAgICAgIG9yaWdpblR5cGU6ICdPcmlnaW5LaW5kVjInLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVXZWlnaHRBdE1vc3Q6ICd1NjQnLFxuICAgICAgICAgICAgICAgIGNhbGw6ICdEb3VibGVFbmNvZGVkQ2FsbCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIcm1wTmV3Q2hhbm5lbE9wZW5SZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiAnQ29tcGFjdDx1MzI+JyxcbiAgICAgICAgICAgICAgICBtYXhNZXNzYWdlU2l6ZTogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgbWF4Q2FwYWNpdHk6ICdDb21wYWN0PHUzMj4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSHJtcENoYW5uZWxBY2NlcHRlZDoge1xuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogJ0NvbXBhY3Q8dTMyPidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBIcm1wQ2hhbm5lbENsb3Npbmc6IHtcbiAgICAgICAgICAgICAgICBpbml0aWF0b3I6ICdDb21wYWN0PHUzMj4nLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogJ0NvbXBhY3Q8dTMyPicsXG4gICAgICAgICAgICAgICAgcmVjaXBpZW50OiAnQ29tcGFjdDx1MzI+J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIENsZWFyT3JpZ2luOiAnTnVsbCcsXG4gICAgICAgICAgICBEZXNjZW5kT3JpZ2luOiAnSW50ZXJpb3JNdWx0aUxvY2F0aW9uJyxcbiAgICAgICAgICAgIFJlcG9ydEVycm9yOiB7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMicsXG4gICAgICAgICAgICAgICAgbWF4UmVzcG9uc2VXZWlnaHQ6ICdDb21wYWN0PHU2ND4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRGVwb3NpdEFzc2V0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYyJyxcbiAgICAgICAgICAgICAgICBtYXhBc3NldHM6ICd1MzInLFxuICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJ5OiAnTXVsdGlMb2NhdGlvblYyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIERlcG9zaXRSZXNlcnZlQXNzZXQ6IHtcbiAgICAgICAgICAgICAgICBhc3NldHM6ICdNdWx0aUFzc2V0RmlsdGVyVjInLFxuICAgICAgICAgICAgICAgIG1heEFzc2V0czogJ3UzMicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMicsXG4gICAgICAgICAgICAgICAgeGNtOiAnWGNtVjInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRXhjaGFuZ2VBc3NldDoge1xuICAgICAgICAgICAgICAgIGdpdmU6ICdNdWx0aUFzc2V0RmlsdGVyVjInLFxuICAgICAgICAgICAgICAgIHJlY2VpdmU6ICdNdWx0aUFzc2V0c1YyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEluaXRpYXRlUmVzZXJ2ZVdpdGhkcmF3OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYyJyxcbiAgICAgICAgICAgICAgICByZXNlcnZlOiAnTXVsdGlMb2NhdGlvblYyJyxcbiAgICAgICAgICAgICAgICB4Y206ICdYY21WMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBJbml0aWF0ZVRlbGVwb3J0OiB7XG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYyJyxcbiAgICAgICAgICAgICAgICBkZXN0OiAnTXVsdGlMb2NhdGlvblYyJyxcbiAgICAgICAgICAgICAgICB4Y206ICdYY21WMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBRdWVyeUhvbGRpbmc6IHtcbiAgICAgICAgICAgICAgICBxdWVyeV9pZDogJ0NvbXBhY3Q8dTY0PicsXG4gICAgICAgICAgICAgICAgZGVzdDogJ011bHRpTG9jYXRpb25WMicsXG4gICAgICAgICAgICAgICAgYXNzZXRzOiAnTXVsdGlBc3NldEZpbHRlclYyJyxcbiAgICAgICAgICAgICAgICBtYXhSZXNwb25zZV9XZWlnaHQ6ICdDb21wYWN0PHU2ND4nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQnV5RXhlY3V0aW9uOiB7XG4gICAgICAgICAgICAgICAgZmVlczogJ011bHRpQXNzZXRWMicsXG4gICAgICAgICAgICAgICAgd2VpZ2h0TGltaXQ6ICdXZWlnaHRMaW1pdFYyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlZnVuZFN1cnBsdXM6ICdOdWxsJyxcbiAgICAgICAgICAgIFNldEVycm9ySGFuZGxlcjogJ1hjbVYyJyxcbiAgICAgICAgICAgIFNldEFwcGVuZGl4OiAnWGNtVjInLFxuICAgICAgICAgICAgQ2xlYXJFcnJvcjogJ051bGwnLFxuICAgICAgICAgICAgQ2xhaW1Bc3NldDoge1xuICAgICAgICAgICAgICAgIGFzc2V0czogJ011bHRpQXNzZXRzVjInLFxuICAgICAgICAgICAgICAgIHRpY2tldDogJ011bHRpTG9jYXRpb25WMidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFwOiAndTY0J1xuICAgICAgICB9XG4gICAgfSxcbiAgICBXaWxkTXVsdGlBc3NldFYyOiAnV2lsZE11bHRpQXNzZXRWMScsXG4gICAgWGNtVjI6ICdWZWM8SW5zdHJ1Y3Rpb25WMj4nLFxuICAgIFhjbUVycm9yVjI6IHtcbiAgICAgICAgX2VudW06IHtcbiAgICAgICAgICAgIFVuZGVmaW5lZDogJ051bGwnLFxuICAgICAgICAgICAgT3ZlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaW1wbGVtZW50ZWQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZFhjbVZlcnNpb246ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZFhjbU1lc3NhZ2U6ICdOdWxsJyxcbiAgICAgICAgICAgIFVuaGFuZGxlZEVmZmVjdDogJ051bGwnLFxuICAgICAgICAgICAgRXNjYWxhdGlvbk9mUHJpdmlsZWdlOiAnTnVsbCcsXG4gICAgICAgICAgICBVbnRydXN0ZWRSZXNlcnZlTG9jYXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgIFVudHJ1c3RlZFRlbGVwb3J0TG9jYXRpb246ICdOdWxsJyxcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQnVmZmVyT3ZlcmZsb3c6ICdOdWxsJyxcbiAgICAgICAgICAgIE11bHRpTG9jYXRpb25GdWxsOiAnTnVsbCcsXG4gICAgICAgICAgICBNdWx0aUxvY2F0aW9uTm90SW52ZXJ0aWJsZTogJ051bGwnLFxuICAgICAgICAgICAgRmFpbGVkVG9EZWNvZGU6ICdOdWxsJyxcbiAgICAgICAgICAgIEJhZE9yaWdpbjogJ051bGwnLFxuICAgICAgICAgICAgRXhjZWVkc01heE1lc3NhZ2VTaXplOiAnTnVsbCcsXG4gICAgICAgICAgICBGYWlsZWRUb1RyYW5zYWN0QXNzZXQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFdlaWdodExpbWl0UmVhY2hlZDogJ1dlaWdodCcsXG4gICAgICAgICAgICBXaWxkY2FyZDogJ051bGwnLFxuICAgICAgICAgICAgVG9vTXVjaFdlaWdodFJlcXVpcmVkOiAnTnVsbCcsXG4gICAgICAgICAgICBOb3RIb2xkaW5nRmVlczogJ051bGwnLFxuICAgICAgICAgICAgV2VpZ2h0Tm90Q29tcHV0YWJsZTogJ051bGwnLFxuICAgICAgICAgICAgQmFycmllcjogJ051bGwnLFxuICAgICAgICAgICAgTm90V2l0aGRyYXdhYmxlOiAnTnVsbCcsXG4gICAgICAgICAgICBMb2NhdGlvbkNhbm5vdEhvbGQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFRvb0V4cGVuc2l2ZTogJ051bGwnLFxuICAgICAgICAgICAgQXNzZXROb3RGb3VuZDogJ051bGwnLFxuICAgICAgICAgICAgRGVzdGluYXRpb25VbnN1cHBvcnRlZDogJ051bGwnLFxuICAgICAgICAgICAgUmVjdXJzaW9uTGltaXRSZWFjaGVkOiAnTnVsbCcsXG4gICAgICAgICAgICBUcmFuc3BvcnQ6ICdOdWxsJyxcbiAgICAgICAgICAgIFVucm91dGFibGU6ICdOdWxsJyxcbiAgICAgICAgICAgIFVua25vd25XZWlnaHRSZXF1aXJlZDogJ051bGwnLFxuICAgICAgICAgICAgVHJhcDogJ3U2NCcsXG4gICAgICAgICAgICBVbmtub3duQ2xhaW06ICdOdWxsJyxcbiAgICAgICAgICAgIEludmFsaWRMb2NhdGlvbjogJ051bGwnXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFhjbU9yZGVyVjI6ICdYY21PcmRlclYxJ1xufTtcbiIsImltcG9ydCB7IFUzMiB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5leHBvcnQgY29uc3QgTUFHSUNfTlVNQkVSID0gMHg2MTc0NjU2ZDsgLy8gYG1ldGFgLCByZXZlcnNlZCBmb3IgTGl0dGxlIEVuZGlhbiBlbmNvZGluZ1xuZXhwb3J0IGNsYXNzIE1hZ2ljTnVtYmVyIGV4dGVuZHMgVTMyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW1wdHkgJiYgIXRoaXMuZXEoTUFHSUNfTlVNQkVSKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYWdpY051bWJlciBtaXNtYXRjaDogZXhwZWN0ZWQgJHtyZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCd1MzInLCBbTUFHSUNfTlVNQkVSXSkudG9IZXgoKX0sIGZvdW5kICR7dGhpcy50b0hleCgpfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaXNTdHJpbmcsIGlzVThhLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IE1ldGFkYXRhVmVyc2lvbmVkIH0gZnJvbSAnLi9NZXRhZGF0YVZlcnNpb25lZC5qcyc7XG5jb25zdCBFTVBUWV9NRVRBREFUQSA9IG5ldyBVaW50OEFycmF5KFsweDZkLCAweDY1LCAweDc0LCAweDYxLCA5XSk7XG5jb25zdCBWRVJTSU9OX0lEWCA9IEVNUFRZX01FVEFEQVRBLmxlbmd0aCAtIDE7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBkZWNvZGVVOGEocmVnaXN0cnksIHU4YSkge1xuICAgIGlmICh1OGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBFTVBUWV9NRVRBREFUQTtcbiAgICB9XG4gICAgZWxzZSBpZiAodThhW1ZFUlNJT05fSURYXSA9PT0gOSkge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGYtaW5nIGhhY2sgYXMgYSBmb2xsb3ctdXAgdG8gYW5vdGhlciB1Z2x5IGhhY2tcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvbGthZG90LWpzL2FwaS9jb21taXQvYTkyMTE2OTBiZTZiNjhhZDZjNmRhZDc4NTJmMTY2NWNhZGNmYTViMlxuICAgICAgICAvLyB3aGVuIHdlIGZhaWwgb24gVjksIHRyeSB0byByZS1wYXJzZSBpdCBhcyB2MTAuLi5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWV0YWRhdGFWZXJzaW9uZWQocmVnaXN0cnksIHU4YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgdThhW1ZFUlNJT05fSURYXSA9IDEwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1OGE7XG59XG4vKipcbiAqIEBuYW1lIE1ldGFkYXRhXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSB2ZXJzaW9uZWQgcnVudGltZSBtZXRhZGF0YSBhcyBhIGRlY29kZWQgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBNZXRhZGF0YSBleHRlbmRzIE1ldGFkYXRhVmVyc2lvbmVkIHtcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUpIHtcbiAgICAgICAgLy8gY29uc3QgdGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIGlzVThhKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgID8gZGVjb2RlVThhKHJlZ2lzdHJ5LCB1OGFUb1U4YSh2YWx1ZSkpXG4gICAgICAgICAgICA6IHZhbHVlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ01ldGFkYXRhJywgYCR7KHBlcmZvcm1hbmNlLm5vdygpIC0gdGltZVN0YXJ0KS50b0ZpeGVkKDIpfW1zYClcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdHJ1Y3QgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgZ2V0VW5pcVR5cGVzLCB0b0NhbGxzT25seSB9IGZyb20gJy4vdXRpbC9pbmRleC5qcyc7XG5pbXBvcnQgeyB0b1YxMCB9IGZyb20gJy4vdjkvdG9WMTAuanMnO1xuaW1wb3J0IHsgdG9WMTEgfSBmcm9tICcuL3YxMC90b1YxMS5qcyc7XG5pbXBvcnQgeyB0b1YxMiB9IGZyb20gJy4vdjExL3RvVjEyLmpzJztcbmltcG9ydCB7IHRvVjEzIH0gZnJvbSAnLi92MTIvdG9WMTMuanMnO1xuaW1wb3J0IHsgdG9WMTQgfSBmcm9tICcuL3YxMy90b1YxNC5qcyc7XG5pbXBvcnQgeyB0b1YxNSB9IGZyb20gJy4vdjE0L3RvVjE1LmpzJztcbmltcG9ydCB7IHRvTGF0ZXN0IH0gZnJvbSAnLi92MTUvdG9MYXRlc3QuanMnO1xuaW1wb3J0IHsgTWFnaWNOdW1iZXIgfSBmcm9tICcuL01hZ2ljTnVtYmVyLmpzJztcbmltcG9ydCB7IExBVEVTVF9WRVJTSU9OLCBUT19DQUxMU19WRVJTSU9OIH0gZnJvbSAnLi92ZXJzaW9ucy5qcyc7XG4vKipcbiAqIEBuYW1lIE1ldGFkYXRhVmVyc2lvbmVkXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSB2ZXJzaW9uZWQgcnVudGltZSBtZXRhZGF0YSBhcyBhIGRlY29kZWQgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBNZXRhZGF0YVZlcnNpb25lZCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX19pbnRlcm5hbF9fY29udmVydGVkID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICAvLyBjb25zdCB0aW1lU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgbWFnaWNOdW1iZXI6IE1hZ2ljTnVtYmVyLFxuICAgICAgICAgICAgbWV0YWRhdGE6ICdNZXRhZGF0YUFsbCdcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnTWV0YWRhdGFWZXJzaW9uZWQnLCBgJHsocGVyZm9ybWFuY2Uubm93KCkgLSB0aW1lU3RhcnQpLnRvRml4ZWQoMil9bXNgKVxuICAgIH1cbiAgICBfX2ludGVybmFsX19hc3NlcnRWZXJzaW9uID0gKHZlcnNpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA+IHZlcnNpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgbWV0YWRhdGEgZnJvbSB2ZXJzaW9uICR7dGhpcy52ZXJzaW9ufSB0byAke3ZlcnNpb259YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmVyc2lvbiA9PT0gdmVyc2lvbjtcbiAgICB9O1xuICAgIF9faW50ZXJuYWxfX2dldFZlcnNpb24gPSAodmVyc2lvbiwgZnJvbVByZXYpID0+IHtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09ICdsYXRlc3QnICYmIHRoaXMuX19pbnRlcm5hbF9fYXNzZXJ0VmVyc2lvbih2ZXJzaW9uKSkge1xuICAgICAgICAgICAgY29uc3QgYXNDdXJyID0gYGFzViR7dmVyc2lvbn1gO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEoKVthc0N1cnJdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX19jb252ZXJ0ZWQuaGFzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBhc1ByZXYgPSB2ZXJzaW9uID09PSAnbGF0ZXN0J1xuICAgICAgICAgICAgICAgID8gYGFzViR7TEFURVNUX1ZFUlNJT059YFxuICAgICAgICAgICAgICAgIDogYGFzViR7KHZlcnNpb24gLSAxKX1gO1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jb252ZXJ0ZWQuc2V0KHZlcnNpb24sIGZyb21QcmV2KHRoaXMucmVnaXN0cnksIHRoaXNbYXNQcmV2XSwgdGhpcy52ZXJzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY29udmVydGVkLmdldCh2ZXJzaW9uKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiB0aGUgbWV0YWRhdGEgd3JhcHBlZFxuICAgICAqL1xuICAgIF9faW50ZXJuYWxfX21ldGFkYXRhID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUKCdtZXRhZGF0YScpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHdyYXBwZWQgbWV0YWRhdGEgYXMgYSBsaW1pdGVkIGNhbGxzLW9ubHkgKGxhdGVzdCkgdmVyc2lvblxuICAgICAqL1xuICAgIGdldCBhc0NhbGxzT25seSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXRhZGF0YVZlcnNpb25lZCh0aGlzLnJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBtYWdpY051bWJlcjogdGhpcy5tYWdpY051bWJlcixcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLnJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ01ldGFkYXRhQWxsJywgW3RvQ2FsbHNPbmx5KHRoaXMucmVnaXN0cnksIHRoaXMuYXNMYXRlc3QpLCBUT19DQUxMU19WRVJTSU9OXSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVkIG1ldGFkYXRhIGFzIGEgVjkgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0IGFzVjkoKSB7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fYXNzZXJ0VmVyc2lvbig5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fbWV0YWRhdGEoKS5hc1Y5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlZCB2YWx1ZXMgYXMgYSBWMTAgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0IGFzVjEwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19nZXRWZXJzaW9uKDEwLCB0b1YxMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVkIHZhbHVlcyBhcyBhIFYxMSBvYmplY3RcbiAgICAgKi9cbiAgICBnZXQgYXNWMTEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2dldFZlcnNpb24oMTEsIHRvVjExKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHdyYXBwZWQgdmFsdWVzIGFzIGEgVjEyIG9iamVjdFxuICAgICAqL1xuICAgIGdldCBhc1YxMigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZ2V0VmVyc2lvbigxMiwgdG9WMTIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlZCB2YWx1ZXMgYXMgYSBWMTMgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0IGFzVjEzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19nZXRWZXJzaW9uKDEzLCB0b1YxMyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSB3cmFwcGVkIHZhbHVlcyBhcyBhIFYxNCBvYmplY3RcbiAgICAgKi9cbiAgICBnZXQgYXNWMTQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2dldFZlcnNpb24oMTQsIHRvVjE0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHdyYXBwZWQgdmFsdWVzIGFzIGEgVjE0IG9iamVjdFxuICAgICAqL1xuICAgIGdldCBhc1YxNSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fZ2V0VmVyc2lvbigxNSwgdG9WMTUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgd3JhcHBlZCB2YWx1ZXMgYXMgYSBsYXRlc3QgdmVyc2lvbiBvYmplY3RcbiAgICAgKi9cbiAgICBnZXQgYXNMYXRlc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2dldFZlcnNpb24oJ2xhdGVzdCcsIHRvTGF0ZXN0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBtYWdpY051bWJlciBmb3IgdGhlIE1ldGFkYXRhIChrbm93biBjb25zdGFudClcbiAgICAgKi9cbiAgICBnZXQgbWFnaWNOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ21hZ2ljTnVtYmVyJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiB0aGUgbWV0YWRhdGEgdmVyc2lvbiB0aGlzIHN0cnVjdHVyZSByZXByZXNlbnRzXG4gICAgICovXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX21ldGFkYXRhKCkuaW5kZXg7XG4gICAgfVxuICAgIGdldFVuaXFUeXBlcyh0aHJvd0Vycm9yKSB7XG4gICAgICAgIHJldHVybiBnZXRVbmlxVHlwZXModGhpcy5yZWdpc3RyeSwgdGhpcy5hc0xhdGVzdCwgdGhyb3dFcnJvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgT2JqZWN0IHRvIEpTT04sIHR5cGljYWxseSB1c2VkIGZvciBSUEMgdHJhbnNmZXJzXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICAvLyBIQUNLKHkpOiBlbnN1cmUgdGhhdCB3ZSBhcHBseSB0aGUgYWxpYXNlcyBpZiB3ZSBoYXZlIG5vdCBkb25lIHNvIGFscmVhZHksIHRoaXMgaXNcbiAgICAgICAgLy8gbmVlZGVkIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IG92ZXJyaWRlcyAod2hpY2ggaXMgb25seSBhcHBsaWVkIGluIHRvTGF0ZXN0KVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgIHRoaXMuYXNMYXRlc3Q7XG4gICAgICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBzYW5pdGl6ZSwgU3RydWN0IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGdldFR5cGVEZWYsIFR5cGVEZWZJbmZvLCB3aXRoVHlwZVN0cmluZyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUnO1xuaW1wb3J0IHsgYXNzZXJ0VW5yZWFjaGFibGUsIGlzTnVtYmVyLCBpc1N0cmluZywgbG9nZ2VyLCBvYmplY3RTcHJlYWQsIHN0cmluZ0NhbWVsQ2FzZSwgc3RyaW5naWZ5LCBzdHJpbmdQYXNjYWxDYXNlIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuY29uc3QgbCA9IGxvZ2dlcignUG9ydGFibGVSZWdpc3RyeScpO1xuY29uc3QgVFlQRV9VTldSQVAgPSB7IHRvTnVtYmVyOiAoKSA9PiAtMSB9O1xuY29uc3QgUFJJTUlUSVZFX0FMSUFTID0ge1xuICAgIENoYXI6ICd1MzInLCAvLyBSdXN0IGNoYXIgaXMgNC1ieXRlc1xuICAgIFN0cjogJ1RleHQnXG59O1xuY29uc3QgUEFUSFNfQUxJQVMgPSBzcGxpdE5hbWVzcGFjZShbXG4gICAgLy8gZnVsbCBtYXRjaGluZyBvbiBleGFjdCBuYW1lcy4uLlxuICAgIC8vIHRoZXNlIGFyZSB3ZWxsLWtub3duIHR5cGVzIHdpdGggYWRkaXRpb25hbCBlbmNvZGluZ1xuICAgICdzcF9jb3JlOjpjcnlwdG86OkFjY291bnRJZDMyJyxcbiAgICAnc3BfcnVudGltZTo6Z2VuZXJpYzo6ZXJhOjpFcmEnLFxuICAgICdzcF9ydW50aW1lOjptdWx0aWFkZHJlc3M6Ok11bHRpQWRkcmVzcycsXG4gICAgLy8gZXRoZXJldW0gb3ZlcnJpZGVzIChGcm9udGllciwgTW9vbmJlYW0sIFBvbGthZG90IGNsYWltcylcbiAgICAnZnBfYWNjb3VudDo6QWNjb3VudElkMjAnLFxuICAgICdhY2NvdW50OjpBY2NvdW50SWQyMCcsXG4gICAgJ3BvbGthZG90X3J1bnRpbWVfY29tbW9uOjpjbGFpbXM6OkV0aGVyZXVtQWRkcmVzcycsXG4gICAgLy8gd2VpZ2h0cyAyIGlzIGEgc3RydWN0dXJlLCBob3dldmVyIGZvciAxLjUuIHdpdGggYSBzaW5nbGUgZmllbGQgaXRcbiAgICAvLyBzaG91bGQgYmUgZmxhdGVubmVkIChjYW4gYXBwZWFyIGluIENvbXBhY3Q8V2VpZ2h0PiBleHRyaW5zaWNzKVxuICAgICdmcmFtZV9zdXBwb3J0Ojp3ZWlnaHRzOjp3ZWlnaHRfdjI6OldlaWdodCcsXG4gICAgJ3NwX3dlaWdodHM6OndlaWdodF92Mjo6V2VpZ2h0JyxcbiAgICAvLyB3aWxkY2FyZCBtYXRjaGluZyBpbiBwbGFjZS4uLlxuICAgIC8vIHRoZXNlIGhhdmUgYSBzcGVjaWZpYyBlbmNvZGluZyBvciBsb2dpYywgdXNlIGEgd2lsZGNhcmQgZm9yIHtwYWxsZXQsIGRhcndpbmlhfV9kZW1vY3JhY3lcbiAgICAnKl9kZW1vY3JhY3k6OnZvdGU6OlZvdGUnLFxuICAgICcqX2NvbnZpY3Rpb25fdm90aW5nOjp2b3RlOjpWb3RlJyxcbiAgICAnKl9pZGVudGl0eTo6dHlwZXM6OkRhdGEnLFxuICAgIC8vIHRoZXNlIGFyZSBvcGFxdWUgVmVjPHU4PiB3cmFwcGVyc1xuICAgICdzcF9jb3JlOjpPcGFxdWVNZXRhZGF0YScsXG4gICAgJ3NwX2NvcmU6Ok9wYXF1ZVBlZXJJZCcsXG4gICAgJ3NwX2NvcmU6Om9mZmNoYWluOjpPcGFxdWVNdWx0aWFkZHInLFxuICAgIC8vIHNob3J0ZW4gc29tZSB3ZWxsLWtub3duIHR5cGVzXG4gICAgJ3ByaW1pdGl2ZV90eXBlczo6KicsXG4gICAgJ3NwX2FyaXRobWV0aWM6OnBlcl90aGluZ3M6OionLFxuICAgIC8vIHJ1bnRpbWVcbiAgICAnKl9ydW50aW1lOjpSdW50aW1lQ2FsbCcsXG4gICAgJypfcnVudGltZTo6UnVudGltZUV2ZW50JyxcbiAgICAvLyBpbmshXG4gICAgJ2luazo6ZW52Ojp0eXBlczo6KicsXG4gICAgJ2luazo6cHJpbWl0aXZlczo6dHlwZXM6OionLFxuICAgICdpbmtfZW52Ojp0eXBlczo6KicsXG4gICAgJ2lua19wcmltaXRpdmVzOjp0eXBlczo6KicsXG4gICAgLy8gbm9pclxuICAgICducF9ydW50aW1lOjphY2NvdW50bmFtZTo6QWNjb3VudE5hbWUnLFxuICAgICducF9ydW50aW1lOjp1bml2ZXJzYWxhZGRyZXNzOjpVbml2ZXJzYWxBZGRyZXNzJ1xuXSk7XG5jb25zdCBQQVRIU19TRVQgPSBzcGxpdE5hbWVzcGFjZShbXG4gICAgJ3BhbGxldF9pZGVudGl0eTo6dHlwZXM6OkJpdEZsYWdzJ1xuXSk7XG5jb25zdCBCSVRWRUNfTlNfTFNCID0gWydiaXR2ZWM6Om9yZGVyOjpMc2IwJywgJ0JpdE9yZGVyTHNiMCddO1xuY29uc3QgQklUVkVDX05TX01TQiA9IFsnYml0dmVjOjpvcmRlcjo6TXNiMCcsICdCaXRPcmRlck1zYjAnXTtcbmNvbnN0IEJJVFZFQ19OUyA9IFsuLi5CSVRWRUNfTlNfTFNCLCAuLi5CSVRWRUNfTlNfTVNCXTtcbmNvbnN0IFdSQVBQRVJTID0gWydCb3VuZGVkQlRyZWVNYXAnLCAnQm91bmRlZEJUcmVlU2V0JywgJ0JvdW5kZWRWZWMnLCAnQm94JywgJ0JUcmVlTWFwJywgJ0JUcmVlU2V0JywgJ0NvdycsICdPcHRpb24nLCAnUmFuZ2UnLCAnUmFuZ2VJbmNsdXNpdmUnLCAnUmVzdWx0JywgJ1dlYWtCb3VuZGVkVmVjJywgJ1dyYXBwZXJLZWVwT3BhcXVlJywgJ1dyYXBwZXJPcGFxdWUnXTtcbmNvbnN0IFJFU0VSVkVEID0gW1xuICAgIC8vIEpTIHJlc2VydmVkIHdvcmRzXG4gICAgJ2VudHJpZXMnLCAna2V5cycsICduZXcnLCAnc2l6ZScsXG4gICAgLy8gZXhwb3NlZCBieSBhbGwgQ29kZWMgb2JqZWN0c1xuICAgICdoYXNoJywgJ3JlZ2lzdHJ5J1xuXTtcbmNvbnN0IFBBVEhfUk1fSU5ERVhfMSA9IFsnZ2VuZXJpYycsICdtaXNjJywgJ3BhbGxldCcsICd0cmFpdHMnLCAndHlwZXMnXTtcbi8qKiBAaW50ZXJuYWwgQ29udmVydHMgYSBUZXh0W10gaW50byBzdHJpbmdbXSAodXNlZCBhcyBwYXJ0IG9mIGRlZmluaXRpb25zKSAqL1xuZnVuY3Rpb24gc2FuaXRpemVEb2NzKGRvY3MpIHtcbiAgICBjb25zdCBjb3VudCA9IGRvY3MubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdFtpXSA9IGRvY3NbaV0udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgU3BsaXQgYSBuYW1lc3BhY2Ugd2l0aCA6OiBpbnRvIGluZGl2aWR1YWwgcGFydHMgKi9cbmZ1bmN0aW9uIHNwbGl0TmFtZXNwYWNlKHZhbHVlcykge1xuICAgIGNvbnN0IGNvdW50ID0gdmFsdWVzLmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZXNbaV0uc3BsaXQoJzo6Jyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsIE1hdGNoIGEgbmFtZXNwYWNlIGJhc2VkIG9uIHBhcnRzIChhbG9uZ3NpZGUgd2lsZGNhcmRzKSAqL1xuZnVuY3Rpb24gbWF0Y2hQYXJ0cyhmaXJzdCwgc2Vjb25kKSB7XG4gICAgcmV0dXJuIGZpcnN0Lmxlbmd0aCA9PT0gc2Vjb25kLmxlbmd0aCAmJiBmaXJzdC5ldmVyeSgoYSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHNlY29uZFtpbmRleF0udG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKChhID09PSAnKicpIHx8IChhID09PSBiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuaW5jbHVkZXMoJyonKSAmJiBhLmluY2x1ZGVzKCdfJykgJiYgYi5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBsZXQgc3ViYSA9IGEuc3BsaXQoJ18nKTtcbiAgICAgICAgICAgIGxldCBzdWJiID0gYi5zcGxpdCgnXycpO1xuICAgICAgICAgICAgLy8gbWF0Y2ggaW5pdGlhbCAqJ3MgdG8gbXVsdGlwbGVzIGlmIHdlIGhhdmUgYSBtYXRjaCBmb3IgdGhlIG90aGVyXG4gICAgICAgICAgICBpZiAoc3ViYVswXSA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhPZiA9IHN1YmIuaW5kZXhPZihzdWJhWzFdKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViYSA9IHN1YmEuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmIgPSBzdWJiLnNsaWNlKGluZGV4T2YpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciAqIG1hdGNoZXMgYXQgdGhlIGVuZCwgYWRqdXN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICBpZiAoKHN1YmEubGVuZ3RoID09PSAyKSAmJiAoc3ViYVsxXSA9PT0gJyonKSAmJiAoc3ViYVswXSA9PT0gc3ViYlswXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXRjaFBhcnRzKHN1YmEsIHN1YmIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgY2hlY2sgaWYgdGhlIHBhdGggbWF0Y2hlcyB0aGUgUEFUSFNfQUxJQVMgKHdpdGggd2lsZGNhcmRzKSAqL1xuZnVuY3Rpb24gZ2V0QWxpYXNQYXRoKHsgZGVmLCBwYXRoIH0pIHtcbiAgICAvLyBzcGVjaWZpYyBsb2dpYyBmb3Igd2VpZ2h0cyAtIHdlIG92ZXJyaWRlIHdoZW4gbm9uLWNvbXBsZXggc3RydWN0XG4gICAgLy8gKGFzIGFwcGxpZWQgaW4gV2VpZ2h0IDEuNSB3aGVyZSB3ZSBhbHNvIGhhdmUgYENvbXBhY3Q8eyByZWZUaW1lOiB1NjQgfT4pXG4gICAgaWYgKFsnZnJhbWVfc3VwcG9ydDo6d2VpZ2h0czo6d2VpZ2h0X3YyOjpXZWlnaHQnLCAnc3Bfd2VpZ2h0czo6d2VpZ2h0X3YyOjpXZWlnaHQnXS5pbmNsdWRlcyhwYXRoLmpvaW4oJzo6JykpKSB7XG4gICAgICAgIHJldHVybiAhZGVmLmlzQ29tcG9zaXRlIHx8IGRlZi5hc0NvbXBvc2l0ZS5maWVsZHMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/ICdXZWlnaHRWMSdcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgLy8gVE9ETyBXZSBuZWVkIHRvIGhhbmRsZSBpbmshIEJhbGFuY2UgaW4gc29tZSB3YXlcbiAgICByZXR1cm4gcGF0aC5sZW5ndGggJiYgUEFUSFNfQUxJQVMuc29tZSgoYSkgPT4gbWF0Y2hQYXJ0cyhhLCBwYXRoKSlcbiAgICAgICAgPyBwYXRoW3BhdGgubGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxuICAgICAgICA6IG51bGw7XG59XG4vKiogQGludGVybmFsIENvbnZlcnRzIGEgdHlwZSBuYW1lIGludG8gYSBKUy1BUEkgY29tcGF0aWJsZSBuYW1lICovXG5mdW5jdGlvbiBleHRyYWN0TmFtZUZsYXQocG9ydGFibGUsIGxvb2t1cEluZGV4LCBwYXJhbXMsIHBhdGgsIGlzSW50ZXJuYWwgPSBmYWxzZSkge1xuICAgIGNvbnN0IGNvdW50ID0gcGF0aC5sZW5ndGg7XG4gICAgLy8gaWYgd2UgaGF2ZSBubyBwYXRoIG9yIGRldGVybWluZWQgYXMgYSB3cmFwcGVyLCB3ZSBqdXN0IHNraXAgaXRcbiAgICBpZiAoY291bnQgPT09IDAgfHwgV1JBUFBFUlMuaW5jbHVkZXMocGF0aFtjb3VudCAtIDFdLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjYW1lbHMgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGNvbnN0IGxvd2VycyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgLy8gaW5pdGlhbGx5IGp1c3QgY3JlYXRlIGFycmF5cyBvZiB0aGUgY2FtZWxDYXNlIGFuZCBsb3dlcmNhc2UgcGF0aFxuICAgIC8vIHBhcnRzIC0gd2Ugd2lsbCBjaGVjayB0aGVzZSB0byBleHRyYWN0IHRoZSBmaW5hbCB2YWx1ZXMuIFdoaWxlXG4gICAgLy8gd2UgaGF2ZSAyIGxvb3BzIGhlcmUsIHdlIGFsc28gZG9uJ3QgZG8gdGhlIHNhbWUgb3BlcmF0aW9uIHR3aWNlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGMgPSBzdHJpbmdQYXNjYWxDYXNlKGlzSW50ZXJuYWxcbiAgICAgICAgICAgID8gcGF0aFtpXS5yZXBsYWNlKCdwYWxsZXRfJywgJycpXG4gICAgICAgICAgICA6IHBhdGhbaV0pO1xuICAgICAgICBjb25zdCBsID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjYW1lbHNbaV0gPSBjO1xuICAgICAgICBsb3dlcnNbaV0gPSBsO1xuICAgIH1cbiAgICBsZXQgbmFtZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBsID0gbG93ZXJzW2ldO1xuICAgICAgICAvLyBSZW1vdmUgOjp7Z2VuZXJpYywgbWlzYywgcGFsbGV0LCB0cmFpdHMsIHR5cGVzfTo6XG4gICAgICAgIGlmIChpICE9PSAxIHx8ICFQQVRIX1JNX0lOREVYXzEuaW5jbHVkZXMobCkpIHtcbiAgICAgICAgICAgIC8vIHNwX3J1bnRpbWU6OmdlbmVyaWM6OmRpZ2VzdDo6RGlnZXN0IC0+IHNwX3J1bnRpbWU6OmdlbmVyaWM6OkRpZ2VzdFxuICAgICAgICAgICAgLy8gc3BfcnVudGltZTo6bXVsdGlhZGRyZXNzOjpNdWx0aUFkZHJlc3MgLT4gc3BfcnVudGltZTo6TXVsdGlBZGRyZXNzXG4gICAgICAgICAgICBpZiAobCAhPT0gbG93ZXJzW2kgKyAxXSkge1xuICAgICAgICAgICAgICAgIG5hbWUgKz0gY2FtZWxzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRvIG1hZ2ljIGZvciBSYXdPcmlnaW4gbG9va3VwLCBlLmcuIHBhbGxldF9jb2xsZWN0aXZlOjpSYXdPcmlnaW5cbiAgICBpZiAoY2FtZWxzWzFdID09PSAnUmF3T3JpZ2luJyAmJiBjb3VudCA9PT0gMiAmJiBwYXJhbXMubGVuZ3RoID09PSAyICYmIHBhcmFtc1sxXS50eXBlLmlzU29tZSkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZVR5cGUgPSBwb3J0YWJsZVtwYXJhbXNbMV0udHlwZS51bndyYXAoKS50b051bWJlcigpXTtcbiAgICAgICAgaWYgKGluc3RhbmNlVHlwZS50eXBlLnBhdGgubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBuYW1lID0gYCR7bmFtZX0ke2luc3RhbmNlVHlwZS50eXBlLnBhdGhbMV0udG9TdHJpbmcoKX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGxvb2t1cEluZGV4LCBuYW1lLCBwYXJhbXMgfTtcbn1cbi8qKiBAaW50ZXJuYWwgQWxpYXMgZm9yIGV4dHJhY3ROYW1lRmxhdCB3aXRoIFBvcnRhYmxlVHlwZSBhcyBhIGxhc3QgcGFyYW1ldGVyICovXG5mdW5jdGlvbiBleHRyYWN0TmFtZShwb3J0YWJsZSwgbG9va3VwSW5kZXgsIHsgdHlwZTogeyBwYXJhbXMsIHBhdGggfSB9KSB7XG4gICAgcmV0dXJuIGV4dHJhY3ROYW1lRmxhdChwb3J0YWJsZSwgbG9va3VwSW5kZXgsIHBhcmFtcywgcGF0aCk7XG59XG4vKiogQGludGVybmFsIENoZWNrIGZvciBkdXBlcyBmcm9tIGEgc3BlY2lmaWMgaW5kZXggb253YXJkcyAqL1xuZnVuY3Rpb24gbmV4dER1cGVNYXRjaGVzKG5hbWUsIHN0YXJ0QXQsIG5hbWVzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW25hbWVzW3N0YXJ0QXRdXTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRBdCArIDEsIGNvdW50ID0gbmFtZXMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB2ID0gbmFtZXNbaV07XG4gICAgICAgIGlmICh2Lm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogQGludGVybmFsIENoZWNrcyB0byBzZWUgaWYgYSB0eXBlIGlzIGEgZnVsbCBkdXBsaWNhdGUgKHdpdGggYWxsIHBhcmFtcyBtYXRjaGluZykgKi9cbmZ1bmN0aW9uIHJld3JpdGVEdXBlcyhpbnB1dCwgcmV3cml0ZSkge1xuICAgIGNvbnN0IGNvdW50ID0gaW5wdXQubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBhID0gaW5wdXRbaV07XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBpbnB1dFtqXTtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBpbmRleGVzIGFyZSBub3QgdGhlIHNhbWUgYW5kIHRoZSBuYW1lcyBtYXRjaCwgd2UgaGF2ZSBhIGR1cGVcbiAgICAgICAgICAgIGlmIChhLmxvb2t1cEluZGV4ICE9PSBiLmxvb2t1cEluZGV4ICYmIGEubmFtZSA9PT0gYi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCBhbGwgdGhlIGFkanVzdGVkIHZhbHVlcyB0byB0aGUgcmV3aXRlIG1hcFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBwID0gaW5wdXRbaV07XG4gICAgICAgIHJld3JpdGVbcC5sb29rdXBJbmRleF0gPSBwLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqIEBpbnRlcm5hbCBGaW5kIGR1cGxpY2F0ZXMgYW5kIGFkanVzdCB0aGUgbmFtZXMgYmFzZWQgb24gcGFyYW1ldGVycyAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwZU5hbWVzKGxvb2t1cCwgcG9ydGFibGUsIG5hbWVzKSB7XG4gICAgY29uc3QgcmV3cml0ZSA9IHt9O1xuICAgIHJldHVybiBuYW1lc1xuICAgICAgICAubWFwKChvcmlnaW5hbCwgc3RhcnRBdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGxvb2t1cEluZGV4LCBuYW1lLCBwYXJhbXMgfSA9IG9yaWdpbmFsO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIC8vIHRoZSBuYW1lIGlzIGVtcHR5ICh0aGlzIGlzIG5vdCBleHBlY3RlZCwgYnV0IGhhdmUgYSBmYWlsc2FmZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHJld3JpdGVbbG9va3VwSW5kZXhdKSB7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgcmV3cml0dGVuIHRoaXMgb25lLCB3ZSBjYW4gc2tpcCBpdFxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRob3NlIHdoZXJlIHRoZSBuYW1lIGlzIG1hdGNoaW5nIHN0YXJ0aW5nIGZyb20gdGhpcyBpbmRleFxuICAgICAgICBjb25zdCBhbGxTYW1lID0gbmV4dER1cGVNYXRjaGVzKG5hbWUsIHN0YXJ0QXQsIG5hbWVzKTtcbiAgICAgICAgLy8gd2Ugb25seSBoYXZlIG9uZSwgc28gYWxsIG9rXG4gICAgICAgIGlmIChhbGxTYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFyZSB0aGVyZSBwYXJhbSBkaWZmZXJlbmNlcyBiZXR3ZWVuIG1hdGNoaW5nIG5hbWVzXG4gICAgICAgIGNvbnN0IGFueURpZmYgPSBhbGxTYW1lLnNvbWUoKG8pID0+IHBhcmFtcy5sZW5ndGggIT09IG8ucGFyYW1zLmxlbmd0aCB8fFxuICAgICAgICAgICAgcGFyYW1zLnNvbWUoKHAsIGluZGV4KSA9PiAhcC5uYW1lLmVxKG8ucGFyYW1zW2luZGV4XS5uYW1lKSB8fFxuICAgICAgICAgICAgICAgIHAudHlwZS51bndyYXBPcihUWVBFX1VOV1JBUCkudG9OdW1iZXIoKSAhPT0gby5wYXJhbXNbaW5kZXhdLnR5cGUudW53cmFwT3IoVFlQRV9VTldSQVApLnRvTnVtYmVyKCkpKTtcbiAgICAgICAgLy8gZXZlcnl0aGluZyBtYXRjaGVzLCB3ZSBjYW4gY29tYmluZSB0aGVzZVxuICAgICAgICBpZiAoIWFueURpZmYpIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIFdlIHByb2JhYmx5IHdhbnQgdG8gYXR0YWNoIGFsbCB0aGUgaW5kZXhlcyB3aXRoIGRpZmZlcmVuY2VzLFxuICAgICAgICAvLyBub3QganVzdCB0aGUgZmlyc3RcbiAgICAgICAgLy8gZmluZCB0aGUgZmlyc3QgcGFyYW1ldGVyIHRoYXQgeWllbGRzIGRpZmZlcmVuY2VzXG4gICAgICAgIGNvbnN0IHBhcmFtSWR4ID0gcGFyYW1zLmZpbmRJbmRleCgoeyB0eXBlIH0sIGluZGV4KSA9PiBhbGxTYW1lLmV2ZXJ5KCh7IHBhcmFtcyB9LCBhSW5kZXgpID0+IHBhcmFtc1tpbmRleF0udHlwZS5pc1NvbWUgJiYgKGFJbmRleCA9PT0gMCB8fFxuICAgICAgICAgICAgIXBhcmFtc1tpbmRleF0udHlwZS5lcSh0eXBlKSkpKTtcbiAgICAgICAgLy8gTm8gcGFyYW0gZm91bmQgdGhhdCBpcyBkaWZmZXJlbnRcbiAgICAgICAgaWYgKHBhcmFtSWR4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNlZSBpZiB1c2luZyB0aGUgcGFyYW0gdHlwZSBoZWxwc1xuICAgICAgICBjb25zdCBzYW1lQ291bnQgPSBhbGxTYW1lLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWQgPSBuZXcgQXJyYXkoc2FtZUNvdW50KTtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFsbCwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIHRoYXQgaW5kZXggd2hlcmUgdGhlXG4gICAgICAgIC8vIGZpcnN0IHBhcmFtIHlpZWxkcyBkaWZmZXJlbmNlc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbWVDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB7IGxvb2t1cEluZGV4LCBuYW1lLCBwYXJhbXMgfSA9IGFsbFNhbWVbaV07XG4gICAgICAgICAgICBjb25zdCB7IGRlZiwgcGF0aCB9ID0gbG9va3VwLmdldFNpVHlwZShwYXJhbXNbcGFyYW1JZHhdLnR5cGUudW53cmFwKCkpO1xuICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IGEgcHJpbWl0aXZlIGFuZCBpdCBkb2Vzbid0IGhhdmUgYSBwYXRoLCB3ZSByZWFsbHkgY2Fubm90XG4gICAgICAgICAgICAvLyBkbyBhbnl0aGluZyBhdCB0aGlzIHBvaW50XG4gICAgICAgICAgICBpZiAoIWRlZi5pc1ByaW1pdGl2ZSAmJiAhcGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkanVzdGVkW2ldID0ge1xuICAgICAgICAgICAgICAgIGxvb2t1cEluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWU6IGRlZi5pc1ByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICAgICA/IGAke25hbWV9JHtkZWYuYXNQcmltaXRpdmUudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgIDogYCR7bmFtZX0ke3BhdGhbcGF0aC5sZW5ndGggLSAxXS50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSBhZGp1c3RlZCBuYW1lcyBoYXZlIG5vIGlzc3Vlc1xuICAgICAgICBpZiAocmV3cml0ZUR1cGVzKGFkanVzdGVkLCByZXdyaXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gVGhpcyBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIHNlY3Rpb24ganVzdCBhYm92ZS4uLlxuICAgICAgICAvLyAuLi4gd2UgY2VydGFpbmx5IG5lZWQgYSBiZXR0ZXIgc29sdXRpb24gaGVyZVxuICAgICAgICAvL1xuICAgICAgICAvLyBMYXN0LWRpdGNoIGVmZm9ydCB0byB1c2UgdGhlIGZ1bGwgdHlwZSBwYXRoIC0gdWdseVxuICAgICAgICAvLyBsb29wIHRocm91Z2ggYWxsLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgdGhhdCBpbmRleCB3aGVyZSB0aGVcbiAgICAgICAgLy8gZmlyc3QgcGFyYW0geWllbGRzIGRpZmZlcmVuY2VzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtZUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbG9va3VwSW5kZXgsIG5hbWUsIHBhcmFtcyB9ID0gYWxsU2FtZVtpXTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGVmLCBwYXRoIH0gPSBsb29rdXAuZ2V0U2lUeXBlKHBhcmFtc1twYXJhbUlkeF0udHlwZS51bndyYXAoKSk7XG4gICAgICAgICAgICBjb25zdCBmbGF0ID0gZXh0cmFjdE5hbWVGbGF0KHBvcnRhYmxlLCBsb29rdXBJbmRleCwgcGFyYW1zLCBwYXRoLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChkZWYuaXNQcmltaXRpdmUgfHwgIWZsYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkanVzdGVkW2ldID0ge1xuICAgICAgICAgICAgICAgIGxvb2t1cEluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWU6IGAke25hbWV9JHtmbGF0Lm5hbWV9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgdGhlIGFkanVzdGVkIG5hbWVzIGhhdmUgbm8gaXNzdWVzXG4gICAgICAgIGlmIChyZXdyaXRlRHVwZXMoYWRqdXN0ZWQsIHJld3JpdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcigobikgPT4gISFuKVxuICAgICAgICAubWFwKCh7IGxvb2t1cEluZGV4LCBuYW1lLCBwYXJhbXMgfSkgPT4gKHtcbiAgICAgICAgbG9va3VwSW5kZXgsXG4gICAgICAgIG5hbWU6IHJld3JpdGVbbG9va3VwSW5kZXhdIHx8IG5hbWUsXG4gICAgICAgIHBhcmFtc1xuICAgIH0pKTtcbn1cbi8qKiBAaW50ZXJuYWwgRGV0ZWN0IG9uLWNoYWluIHR5cGVzIChBY2NvdW50SWQvU2lnbmF0dXJlKSBhcyBzZXQgYXMgdGhlIGRlZmF1bHQgKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyVHlwZXMobG9va3VwLCBsb29rdXBzLCBuYW1lcywgcGFyYW1zKSB7XG4gICAgLy8gUmVnaXN0ZXIgdGhlIHR5cGVzIHdlIGV4dHJhY3RlZFxuICAgIGxvb2t1cC5yZWdpc3RyeS5yZWdpc3Rlcihsb29rdXBzKTtcbiAgICAvLyBUcnkgYW5kIGV4dHJhY3QgdGhlIEFjY291bnRJZC9BZGRyZXNzL1NpZ25hdHVyZSB0eXBlIGZyb20gVW5jaGVja2VkRXh0cmluc2ljXG4gICAgaWYgKHBhcmFtcy5TcFJ1bnRpbWVVbmNoZWNrZWRFeHRyaW5zaWMpIHtcbiAgICAgICAgLy8gQWRkcmVzcywgQ2FsbCwgU2lnbmF0dXJlLCBFeHRyYVxuICAgICAgICBjb25zdCBbYWRkclBhcmFtLCAsIHNpZ1BhcmFtXSA9IHBhcmFtcy5TcFJ1bnRpbWVVbmNoZWNrZWRFeHRyaW5zaWM7XG4gICAgICAgIGNvbnN0IHNpQWRkcmVzcyA9IGxvb2t1cC5nZXRTaVR5cGUoYWRkclBhcmFtLnR5cGUudW53cmFwKCkpO1xuICAgICAgICBjb25zdCBzaVNpZ25hdHVyZSA9IGxvb2t1cC5nZXRTaVR5cGUoc2lnUGFyYW0udHlwZS51bndyYXAoKSk7XG4gICAgICAgIGNvbnN0IG5zU2lnbmF0dXJlID0gc2lTaWduYXR1cmUucGF0aC5qb2luKCc6OicpO1xuICAgICAgICBsZXQgbnNBY2NvdW50SWQgPSBzaUFkZHJlc3MucGF0aC5qb2luKCc6OicpO1xuICAgICAgICBjb25zdCBpc011bHRpQWRkcmVzcyA9IG5zQWNjb3VudElkID09PSAnc3BfcnVudGltZTo6bXVsdGlhZGRyZXNzOjpNdWx0aUFkZHJlc3MnO1xuICAgICAgICAvLyBXaXRoIG11bHRpYWRkcmVzcywgd2UgY2hlY2sgdGhlIGZpcnN0IHR5cGUgcGFyYW0gYWdhaW5cbiAgICAgICAgaWYgKGlzTXVsdGlBZGRyZXNzKSB7XG4gICAgICAgICAgICAvLyBBY2NvdW50SWQsIEFjY291bnRJbmRleFxuICAgICAgICAgICAgY29uc3QgW2lkUGFyYW1dID0gc2lBZGRyZXNzLnBhcmFtcztcbiAgICAgICAgICAgIG5zQWNjb3VudElkID0gbG9va3VwLmdldFNpVHlwZShpZFBhcmFtLnR5cGUudW53cmFwKCkpLnBhdGguam9pbignOjonKTtcbiAgICAgICAgfVxuICAgICAgICBsb29rdXAucmVnaXN0cnkucmVnaXN0ZXIoe1xuICAgICAgICAgICAgLy8ga25vd246IGFjY291bnQ6OkFjY291bnRJZDIwLCBmcF9hY2NvdW50OjpBY2NvdW50SWQyMCwgcHJpbWl0aXZlX3R5cGVzOjpIMTYwXG4gICAgICAgICAgICBBY2NvdW50SWQ6IG5zQWNjb3VudElkLmVuZHNXaXRoKCc6OkFjY291bnRJZDIwJykgfHwgbnNBY2NvdW50SWQuZW5kc1dpdGgoJzo6SDE2MCcpXG4gICAgICAgICAgICAgICAgPyAnQWNjb3VudElkMjAnXG4gICAgICAgICAgICAgICAgOiAnQWNjb3VudElkMzInLFxuICAgICAgICAgICAgQWRkcmVzczogaXNNdWx0aUFkZHJlc3NcbiAgICAgICAgICAgICAgICA/ICdNdWx0aUFkZHJlc3MnXG4gICAgICAgICAgICAgICAgOiAnQWNjb3VudElkJyxcbiAgICAgICAgICAgIEV4dHJpbnNpY1NpZ25hdHVyZTogWydzcF9ydW50aW1lOjpNdWx0aVNpZ25hdHVyZSddLmluY2x1ZGVzKG5zU2lnbmF0dXJlKVxuICAgICAgICAgICAgICAgID8gJ011bHRpU2lnbmF0dXJlJ1xuICAgICAgICAgICAgICAgIDogbmFtZXNbc2lnUGFyYW0udHlwZS51bndyYXAoKS50b051bWJlcigpXSB8fCAnTXVsdGlTaWduYXR1cmUnXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQGludGVybmFsIEV4dHJhY3RzIGFsaWFzZXMgYmFzZWQgb24gd2hhdCB3ZSBrbm93IHRoZSBydW50aW1lIGNvbmZpZyBsb29rcyBsaWtlIGluIGFcbiAqIFN1YnN0cmF0ZSBjaGFpbi4gU3BlY2lmaWNhbGx5IHdlIHdhbnQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIENhbGwgYW5kIEV2ZW50IHBhcmFtc1xuICoqL1xuZnVuY3Rpb24gZXh0cmFjdEFsaWFzZXMocGFyYW1zLCBpc0NvbnRyYWN0KSB7XG4gICAgY29uc3QgaGFzUGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1zKS5zb21lKChrKSA9PiAhay5zdGFydHNXaXRoKCdQYWxsZXQnKSk7XG4gICAgY29uc3QgYWxpYXMgPSB7fTtcbiAgICBpZiAocGFyYW1zLlNwUnVudGltZVVuY2hlY2tlZEV4dHJpbnNpYykge1xuICAgICAgICAvLyBBZGRyZXNzLCBDYWxsLCBTaWduYXR1cmUsIEV4dHJhXG4gICAgICAgIGNvbnN0IFssIHsgdHlwZSB9XSA9IHBhcmFtcy5TcFJ1bnRpbWVVbmNoZWNrZWRFeHRyaW5zaWM7XG4gICAgICAgIGFsaWFzW3R5cGUudW53cmFwKCkudG9OdW1iZXIoKV0gPSAnQ2FsbCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhc1BhcmFtcyAmJiAhaXNDb250cmFjdCkge1xuICAgICAgICBsLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgcnVudGltZSBDYWxsIHR5cGUsIGNhbm5vdCBpbnNwZWN0IHNwX3J1bnRpbWU6OmdlbmVyaWM6OnVuY2hlY2tlZF9leHRyaW5zaWM6OlVuY2hlY2tlZEV4dHJpbnNpYycpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLkZyYW1lU3lzdGVtRXZlbnRSZWNvcmQpIHtcbiAgICAgICAgLy8gRXZlbnQsIFRvcGljXG4gICAgICAgIGNvbnN0IFt7IHR5cGUgfV0gPSBwYXJhbXMuRnJhbWVTeXN0ZW1FdmVudFJlY29yZDtcbiAgICAgICAgYWxpYXNbdHlwZS51bndyYXAoKS50b051bWJlcigpXSA9ICdFdmVudCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhc1BhcmFtcyAmJiAhaXNDb250cmFjdCkge1xuICAgICAgICBsLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgcnVudGltZSBFdmVudCB0eXBlLCBjYW5ub3QgaW5zcGVjdCBmcmFtZV9zeXN0ZW06OkV2ZW50UmVjb3JkJyk7XG4gICAgfVxuICAgIHJldHVybiBhbGlhcztcbn1cbi8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgYWxsIHRoZSBpbnRyZXJlc3RpbmcgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyByZWdpc3RyeSAqL1xuZnVuY3Rpb24gZXh0cmFjdFR5cGVJbmZvKGxvb2t1cCwgcG9ydGFibGUpIHtcbiAgICBjb25zdCBuYW1lSW5mbyA9IFtdO1xuICAgIGNvbnN0IHR5cGVzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gcG9ydGFibGUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB0eXBlID0gcG9ydGFibGVbaV07XG4gICAgICAgIGNvbnN0IGxvb2t1cEluZGV4ID0gdHlwZS5pZC50b051bWJlcigpO1xuICAgICAgICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0TmFtZShwb3J0YWJsZSwgbG9va3VwSW5kZXgsIHBvcnRhYmxlW2ldKTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZCkge1xuICAgICAgICAgICAgbmFtZUluZm8ucHVzaChleHRyYWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVzW2xvb2t1cEluZGV4XSA9IHR5cGU7XG4gICAgfVxuICAgIGNvbnN0IGxvb2t1cHMgPSB7fTtcbiAgICBjb25zdCBuYW1lcyA9IHt9O1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IGRlZHVwID0gcmVtb3ZlRHVwZU5hbWVzKGxvb2t1cCwgcG9ydGFibGUsIG5hbWVJbmZvKTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBkZWR1cC5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgbG9va3VwSW5kZXgsIG5hbWUsIHBhcmFtczogcCB9ID0gZGVkdXBbaV07XG4gICAgICAgIG5hbWVzW2xvb2t1cEluZGV4XSA9IG5hbWU7XG4gICAgICAgIGxvb2t1cHNbbmFtZV0gPSBsb29rdXAucmVnaXN0cnkuY3JlYXRlTG9va3VwVHlwZShsb29rdXBJbmRleCk7XG4gICAgICAgIHBhcmFtc1tuYW1lXSA9IHA7XG4gICAgfVxuICAgIHJldHVybiB7IGxvb2t1cHMsIG5hbWVzLCBwYXJhbXMsIHR5cGVzIH07XG59XG5leHBvcnQgY2xhc3MgUG9ydGFibGVSZWdpc3RyeSBleHRlbmRzIFN0cnVjdCB7XG4gICAgX19pbnRlcm5hbF9fYWxpYXM7XG4gICAgX19pbnRlcm5hbF9fbG9va3VwcztcbiAgICBfX2ludGVybmFsX19uYW1lcztcbiAgICBfX2ludGVybmFsX19wYXJhbXM7XG4gICAgX19pbnRlcm5hbF9fdHlwZURlZnMgPSB7fTtcbiAgICBfX2ludGVybmFsX190eXBlcztcbiAgICBjb25zdHJ1Y3RvcihyZWdpc3RyeSwgdmFsdWUsIGlzQ29udHJhY3QpIHtcbiAgICAgICAgLy8gY29uc3QgdGltZVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgICAgc3VwZXIocmVnaXN0cnksIHtcbiAgICAgICAgICAgIHR5cGVzOiAnVmVjPFBvcnRhYmxlVHlwZT4nXG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgY29uc3QgeyBsb29rdXBzLCBuYW1lcywgcGFyYW1zLCB0eXBlcyB9ID0gZXh0cmFjdFR5cGVJbmZvKHRoaXMsIHRoaXMudHlwZXMpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2FsaWFzID0gZXh0cmFjdEFsaWFzZXMocGFyYW1zLCBpc0NvbnRyYWN0KTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19sb29rdXBzID0gbG9va3VwcztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19uYW1lcyA9IG5hbWVzO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3BhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlcyA9IHR5cGVzO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnUG9ydGFibGVSZWdpc3RyeScsIGAkeyhwZXJmb3JtYW5jZS5ub3coKSAtIHRpbWVTdGFydCkudG9GaXhlZCgyKX1tc2ApXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGFsbCB0aGUgYXZhaWxhYmxlIHR5cGUgbmFtZXMgZm9yIHRoaXMgY2hhaW5cbiAgICAgKiovXG4gICAgZ2V0IG5hbWVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9faW50ZXJuYWxfX25hbWVzKS5zb3J0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGFsbCB0aGUgYXZhaWxhYmxlIHBhcmFtZXRlcml6ZWQgdHlwZXMgZm9yIHRoaXMgY2hhaW5cbiAgICAgKiovXG4gICAgZ2V0IHBhcmFtVHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3BhcmFtcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0eXBlcyBvZiB0aGUgcmVnaXN0cnlcbiAgICAgKi9cbiAgICBnZXQgdHlwZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFQoJ3R5cGVzJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlciBhbGwgYXZhaWxhYmxlIHR5cGVzIGludG8gdGhlIHJlZ2lzdHJ5IChnZW5lcmFsbHkgZm9yIGludGVybmFsIHVzYWdlKVxuICAgICAqL1xuICAgIHJlZ2lzdGVyKCkge1xuICAgICAgICByZWdpc3RlclR5cGVzKHRoaXMsIHRoaXMuX19pbnRlcm5hbF9fbG9va3VwcywgdGhpcy5fX2ludGVybmFsX19uYW1lcywgdGhpcy5fX2ludGVybmFsX19wYXJhbXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbmFtZSBmb3IgYSBzcGVjaWZpYyBsb29rdXBcbiAgICAgKi9cbiAgICBnZXROYW1lKGxvb2t1cElkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX25hbWVzW3RoaXMuX19pbnRlcm5hbF9fZ2V0TG9va3VwSWQobG9va3VwSWQpXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZpbmRzIGEgc3BlY2lmaWMgdHlwZSBpbiB0aGUgcmVnaXN0cnlcbiAgICAgKi9cbiAgICBnZXRTaVR5cGUobG9va3VwSWQpIHtcbiAgICAgICAgLy8gTk9URSBjYXRjaC0yMiAtIHRoaXMgbWF5IGFscmVhZHkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBjb25zdHJ1Y3Rvciwgc29cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBhY3R1YWxseSBpbml0aWFsaXplZCBpdCBjb3JyZWN0bHlcbiAgICAgICAgY29uc3QgZm91bmQgPSAodGhpcy5fX2ludGVybmFsX190eXBlcyB8fCB0aGlzLnR5cGVzKVt0aGlzLl9faW50ZXJuYWxfX2dldExvb2t1cElkKGxvb2t1cElkKV07XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9ydGFibGVSZWdpc3RyeTogVW5hYmxlIHRvIGZpbmQgdHlwZSB3aXRoIGxvb2t1cElkICR7bG9va3VwSWQudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm91bmQudHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvb2t1cCB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgaW5kZXhcbiAgICAgKi9cbiAgICBnZXRUeXBlRGVmKGxvb2t1cElkKSB7XG4gICAgICAgIGNvbnN0IGxvb2t1cEluZGV4ID0gdGhpcy5fX2ludGVybmFsX19nZXRMb29rdXBJZChsb29rdXBJZCk7XG4gICAgICAgIGlmICghdGhpcy5fX2ludGVybmFsX190eXBlRGVmc1tsb29rdXBJbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb2t1cE5hbWUgPSB0aGlzLl9faW50ZXJuYWxfX25hbWVzW2xvb2t1cEluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0ge1xuICAgICAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLkRvTm90Q29uc3RydWN0LFxuICAgICAgICAgICAgICAgIGxvb2t1cEluZGV4LFxuICAgICAgICAgICAgICAgIGxvb2t1cE5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy5yZWdpc3RyeS5jcmVhdGVMb29rdXBUeXBlKGxvb2t1cEluZGV4KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFNldCBuYW1lZCBpdGVtcyBzaW5jZSB3ZSB3aWxsIGdldCBpbnRvIGNpcmN1bGFyIGxvb2t1cHMgYWxvbmcgdGhlIHdheVxuICAgICAgICAgICAgaWYgKGxvb2t1cE5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XSA9IGVtcHR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0KHRoaXMuZ2V0U2lUeXBlKGxvb2t1cElkKSwgbG9va3VwSW5kZXgpO1xuICAgICAgICAgICAgLy8gRm9yIG5vbi1uYW1lZCBpdGVtcywgd2Ugb25seSBzZXQgdGhpcyByaWdodCBhdCB0aGUgZW5kXG4gICAgICAgICAgICBpZiAoIWxvb2t1cE5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XSA9IGVtcHR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZXh0cmFjdGVkKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICdsb29rdXBOYW1lJyB8fCBleHRyYWN0ZWRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgYXJlIHNhZmUgc2luY2Ugd2UgYXJlIGxvb2tpbmcgdGhyb3VnaCB0aGUga2V5cyBhcyBzZXRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlRGVmc1tsb29rdXBJbmRleF1ba10gPSBleHRyYWN0ZWRba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBkb24ndCBzZXQgbG9va3VwTmFtZSBvbiBsb3dlci1sZXZlbCwgd2Ugd2FudCB0byBhbHdheXMgZGlyZWN0IHRvIHRoZSB0eXBlXG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkLmluZm8gPT09IFR5cGVEZWZJbmZvLlBsYWluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlRGVmc1tsb29rdXBJbmRleF0ubG9va3VwTmFtZVJvb3QgPSB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XS5sb29rdXBOYW1lO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XS5sb29rdXBOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3R5cGVEZWZzW2xvb2t1cEluZGV4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZvciBhIHNwZWNpZmljIGZpZWxkLCBwZXJmb3JtIGFkanVzdG1lbnRzIHRvIG5vdCBoYXZlIGJ1aWx0LWluIGNvbmZsaWN0c1xuICAgICAqL1xuICAgIHNhbml0aXplRmllbGQobmFtZSkge1xuICAgICAgICBsZXQgbmFtZUZpZWxkID0gbnVsbDtcbiAgICAgICAgbGV0IG5hbWVPcmlnID0gbnVsbDtcbiAgICAgICAgaWYgKG5hbWUuaXNTb21lKSB7XG4gICAgICAgICAgICBuYW1lRmllbGQgPSBzdHJpbmdDYW1lbENhc2UobmFtZS51bndyYXAoKSk7XG4gICAgICAgICAgICBpZiAobmFtZUZpZWxkLmluY2x1ZGVzKCcjJykpIHtcbiAgICAgICAgICAgICAgICBuYW1lT3JpZyA9IG5hbWVGaWVsZDtcbiAgICAgICAgICAgICAgICBuYW1lRmllbGQgPSBuYW1lT3JpZy5yZXBsYWNlKC8jL2csICdfJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChSRVNFUlZFRC5pbmNsdWRlcyhuYW1lRmllbGQpKSB7XG4gICAgICAgICAgICAgICAgbmFtZU9yaWcgPSBuYW1lRmllbGQ7XG4gICAgICAgICAgICAgICAgbmFtZUZpZWxkID0gYCR7bmFtZUZpZWxkfV9gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbmFtZUZpZWxkLCBuYW1lT3JpZ107XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgQ3JlYXRlcyBhIFR5cGVEZWYgYmFzZWQgb24gYW4gaW50ZXJuYWwgbG9va3VwSWQgKi9cbiAgICBfX2ludGVybmFsX19jcmVhdGVTaURlZihsb29rdXBJZCkge1xuICAgICAgICBjb25zdCB0eXBlRGVmID0gdGhpcy5nZXRUeXBlRGVmKGxvb2t1cElkKTtcbiAgICAgICAgY29uc3QgbG9va3VwSW5kZXggPSBsb29rdXBJZC50b051bWJlcigpO1xuICAgICAgICAvLyBTZXR1cCBmb3IgYSBsb29rdXAgb24gY29tcGxleCB0eXBlc1xuICAgICAgICByZXR1cm4gW1R5cGVEZWZJbmZvLkRvTm90Q29uc3RydWN0LCBUeXBlRGVmSW5mby5FbnVtLCBUeXBlRGVmSW5mby5TdHJ1Y3RdLmluY2x1ZGVzKHR5cGVEZWYuaW5mbykgJiYgdHlwZURlZi5sb29rdXBOYW1lXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBkb2NzOiB0eXBlRGVmLmRvY3MsXG4gICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uU2ksXG4gICAgICAgICAgICAgICAgbG9va3VwSW5kZXgsXG4gICAgICAgICAgICAgICAgbG9va3VwTmFtZTogdGhpcy5fX2ludGVybmFsX19uYW1lc1tsb29rdXBJbmRleF0sXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy5yZWdpc3RyeS5jcmVhdGVMb29rdXBUeXBlKGxvb2t1cElkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0eXBlRGVmO1xuICAgIH1cbiAgICAvKiogQGludGVybmFsIENvbnZlcnRzIGEgbG9va3VwSWQgaW5wdXQgdG8gdGhlIGFjdHVhbCBsb29rdXAgaW5kZXggKi9cbiAgICBfX2ludGVybmFsX19nZXRMb29rdXBJZChsb29rdXBJZCkge1xuICAgICAgICBpZiAoaXNTdHJpbmcobG9va3VwSWQpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVnaXN0cnkuaXNMb29rdXBUeXBlKGxvb2t1cElkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUG9ydGFibGVSZWdpc3RyeTogRXhwZWN0ZWQgYSBsb29rdXAgc3RyaW5nIHR5cGUsIGZvdW5kICR7bG9va3VwSWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobG9va3VwSWQucmVwbGFjZSgnTG9va3VwJywgJycpLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIobG9va3VwSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9va3VwSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvb2t1cElkLnRvTnVtYmVyKCk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgQ29udmVydHMgYSB0eXBlIGludG8gYSBUeXBlRGVmIGZvciBDb2RlYyB1c2FnZSAqL1xuICAgIF9faW50ZXJuYWxfX2V4dHJhY3QodHlwZSwgbG9va3VwSW5kZXgpIHtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlID0gdHlwZS5wYXRoLmpvaW4oJzo6Jyk7XG4gICAgICAgIGxldCB0eXBlRGVmO1xuICAgICAgICBjb25zdCBhbGlhc1R5cGUgPSB0aGlzLl9faW50ZXJuYWxfX2FsaWFzW2xvb2t1cEluZGV4XSB8fCBnZXRBbGlhc1BhdGgodHlwZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYWxpYXNUeXBlKSB7XG4gICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdEFsaWFzUGF0aChsb29rdXBJbmRleCwgYWxpYXNUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5kZWYudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdBcnJheSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlRGVmID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0QXJyYXkobG9va3VwSW5kZXgsIHR5cGUuZGVmLmFzQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JpdFNlcXVlbmNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVEZWYgPSB0aGlzLl9faW50ZXJuYWxfX2V4dHJhY3RCaXRTZXF1ZW5jZShsb29rdXBJbmRleCwgdHlwZS5kZWYuYXNCaXRTZXF1ZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29tcGFjdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlRGVmID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0Q29tcGFjdChsb29rdXBJbmRleCwgdHlwZS5kZWYuYXNDb21wYWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdDb21wb3NpdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdENvbXBvc2l0ZShsb29rdXBJbmRleCwgdHlwZSwgdHlwZS5kZWYuYXNDb21wb3NpdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0hpc3RvcmljTWV0YUNvbXBhdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlRGVmID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0SGlzdG9yaWMobG9va3VwSW5kZXgsIHR5cGUuZGVmLmFzSGlzdG9yaWNNZXRhQ29tcGF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdQcmltaXRpdmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdFByaW1pdGl2ZShsb29rdXBJbmRleCwgdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2VxdWVuY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdFNlcXVlbmNlKGxvb2t1cEluZGV4LCB0eXBlLmRlZi5hc1NlcXVlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdUdXBsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlRGVmID0gdGhpcy5fX2ludGVybmFsX19leHRyYWN0VHVwbGUobG9va3VwSW5kZXgsIHR5cGUuZGVmLmFzVHVwbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1ZhcmlhbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZURlZiA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdFZhcmlhbnQobG9va3VwSW5kZXgsIHR5cGUsIHR5cGUuZGVmLmFzVmFyaWFudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogYXNzZXJ0VW5yZWFjaGFibGUodHlwZS5kZWYudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3J0YWJsZVJlZ2lzdHJ5OiAke2xvb2t1cEluZGV4fSR7bmFtZXNwYWNlID8gYCAoJHtuYW1lc3BhY2V9KWAgOiAnJ306IEVycm9yIGV4dHJhY3RpbmcgJHtzdHJpbmdpZnkodHlwZSl9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBkb2NzOiBzYW5pdGl6ZURvY3ModHlwZS5kb2NzKSxcbiAgICAgICAgICAgIG5hbWVzcGFjZVxuICAgICAgICB9LCB0eXBlRGVmKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBBcnJheSBpbnRvIFR5cGVEZWYuVmVjRml4ZWQgKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0QXJyYXkoXywgeyBsZW4sIHR5cGUgfSkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBsZW4udG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKGxlbmd0aCA+IDIwNDgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0IGZvciBbVHlwZTsgPGxlbmd0aD5dLCB3aGVyZSBsZW5ndGggPD0gMjA0OCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aXRoVHlwZVN0cmluZyh0aGlzLnJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5WZWNGaXhlZCxcbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIHN1YjogdGhpcy5fX2ludGVybmFsX19jcmVhdGVTaURlZih0eXBlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBCaXRTZXF1ZW5jZSBpbnRvIFR5cGVEZWYuUGxhaW4gKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0Qml0U2VxdWVuY2UoXywgeyBiaXRPcmRlclR5cGUsIGJpdFN0b3JlVHlwZSB9KSB7XG4gICAgICAgIC8vIFdpdGggdGhlIHYzIG9mIHNjYWxlLWluZm8gdGhpcyBzd2FwcGVkIGFyb3VuZCwgYnV0IG9idmlvdXNseSB0aGUgZGVjb2RlciBjYW5ub3QgZGV0ZXJtaW5lXG4gICAgICAgIC8vIHRoZSBvcmRlci4gV2l0aCB0aGF0IGluLW1pbmQsIHdlIGFwcGx5IGEgZGV0ZWN0aW9uIGZvciBMU2IwL01zYiBhbmQgc2V0IGFjY29yZGluZ2x5XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKGJpdE9yZGVyVHlwZSk7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKGJpdFN0b3JlVHlwZSk7XG4gICAgICAgIGNvbnN0IFtiaXRPcmRlciwgYml0U3RvcmVdID0gQklUVkVDX05TLmluY2x1ZGVzKGEubmFtZXNwYWNlIHx8ICcnKVxuICAgICAgICAgICAgPyBbYSwgYl1cbiAgICAgICAgICAgIDogW2IsIGFdO1xuICAgICAgICBpZiAoIWJpdE9yZGVyLm5hbWVzcGFjZSB8fCAhQklUVkVDX05TLmluY2x1ZGVzKGJpdE9yZGVyLm5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBiaXRPcmRlciBmb3VuZCBhcyAke2JpdE9yZGVyLm5hbWVzcGFjZSB8fCAnPHVua25vd24+J31gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiaXRTdG9yZS5pbmZvICE9PSBUeXBlRGVmSW5mby5QbGFpbiB8fCBiaXRTdG9yZS50eXBlICE9PSAndTgnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgdTggYml0U3RvcmUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCwgZm91bmQgJHtiaXRTdG9yZS50eXBlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzTHNiID0gQklUVkVDX05TX0xTQi5pbmNsdWRlcyhiaXRPcmRlci5uYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIWlzTHNiKSB7XG4gICAgICAgICAgICAvLyBUT0RPIFRvIHJlbW92ZSB0aGlzIGxpbWl0YXRpb24sIHdlIG5lZWQgdG8gcGFzcyBhbiBleHRyYSBpbmZvIGZsYWdcbiAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gdGhlIFR5cGVEZWYgKEhlcmUgd2UgY291bGQgcG90ZW50aWFsbHkgcmUtdXNlIHNvbWV0aGluZ1xuICAgICAgICAgICAgLy8gbGlrZSBpbmRleCAoPz8/KSB0byBpbmRpY2F0ZSBhbmQgZW5zdXJlIHdlIHVzZSBpdCB0byBwYXNzIHRvIHRoZVxuICAgICAgICAgICAgLy8gQml0VmVjIGNvbnN0cnVjdG9yIC0gd2hpY2ggZG9lcyBoYW5kbGUgdGhpcyB0eXBlKVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcG9sa2Fkb3QtanMvYXBpL2lzc3Vlcy81NTg4XG4gICAgICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgTFNCIEJpdFZlYyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLCBmb3VuZCAke2JpdE9yZGVyLm5hbWVzcGFjZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgICAgICB0eXBlOiAnQml0VmVjJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvKiogQGludGVybmFsIEV4dHJhY3RzIGEgU2NhbGVJbmZvIENvbXBhY3QgaW50byBUeXBlRGVmLkNvbXBhY3QgKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0Q29tcGFjdChfLCB7IHR5cGUgfSkge1xuICAgICAgICByZXR1cm4gd2l0aFR5cGVTdHJpbmcodGhpcy5yZWdpc3RyeSwge1xuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uQ29tcGFjdCxcbiAgICAgICAgICAgIHN1YjogdGhpcy5fX2ludGVybmFsX19jcmVhdGVTaURlZih0eXBlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBDb21wb3NpdGUgaW50byBUeXBlRGVmLntCVHJlZSosIFJhbmdlKiwgV3JhcHBlcip9ICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdENvbXBvc2l0ZShsb29rdXBJbmRleCwgeyBwYXJhbXMsIHBhdGggfSwgeyBmaWVsZHMgfSkge1xuICAgICAgICBpZiAocGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhGaXJzdCA9IHBhdGhbMF0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhMYXN0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAocGF0aC5sZW5ndGggPT09IDEgJiYgcGF0aEZpcnN0ID09PSAnQlRyZWVNYXAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCVHJlZU1hcCByZXF1aXJlcyAyIHBhcmFtZXRlcnMsIGZvdW5kICR7cGFyYW1zLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uQlRyZWVNYXAsXG4gICAgICAgICAgICAgICAgICAgIHN1YjogcGFyYW1zLm1hcCgoeyB0eXBlIH0pID0+IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYodHlwZS51bndyYXAoKSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoLmxlbmd0aCA9PT0gMSAmJiBwYXRoRmlyc3QgPT09ICdCVHJlZVNldCcpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJUcmVlU2V0IHJlcXVpcmVzIDEgcGFyYW1ldGVyLCBmb3VuZCAke3BhcmFtcy5sZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZVN0cmluZyh0aGlzLnJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLkJUcmVlU2V0LFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChbJ1JhbmdlJywgJ1JhbmdlSW5jbHVzaXZlJ10uaW5jbHVkZXMocGF0aEZpcnN0KSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmFuZ2UgcmVxdWlyZXMgMSBwYXJhbWV0ZXIsIGZvdW5kICR7cGFyYW1zLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogcGF0aEZpcnN0ID09PSAnUmFuZ2UnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFR5cGVEZWZJbmZvLlJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFR5cGVEZWZJbmZvLlJhbmdlSW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXRoRmlyc3RcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFsnV3JhcHBlcktlZXBPcGFxdWUnLCAnV3JhcHBlck9wYXF1ZSddLmluY2x1ZGVzKHBhdGhMYXN0KSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JhcHBlck9wYXF1ZSByZXF1aXJlcyAxIHBhcmFtZXRlciwgZm91bmQgJHtwYXJhbXMubGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aFR5cGVTdHJpbmcodGhpcy5yZWdpc3RyeSwge1xuICAgICAgICAgICAgICAgICAgICBpbmZvOiBwYXRoTGFzdCA9PT0gJ1dyYXBwZXJLZWVwT3BhcXVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBUeXBlRGVmSW5mby5XcmFwcGVyS2VlcE9wYXF1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBUeXBlRGVmSW5mby5XcmFwcGVyT3BhcXVlLFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXRoTGFzdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQQVRIU19TRVQuc29tZSgocCkgPT4gbWF0Y2hQYXJ0cyhwLCBwYXRoKSlcbiAgICAgICAgICAgID8gdGhpcy5fX2ludGVybmFsX19leHRyYWN0Q29tcG9zaXRlU2V0KGxvb2t1cEluZGV4LCBwYXJhbXMsIGZpZWxkcylcbiAgICAgICAgICAgIDogdGhpcy5fX2ludGVybmFsX19leHRyYWN0RmllbGRzKGxvb2t1cEluZGV4LCBmaWVsZHMpO1xuICAgIH1cbiAgICAvKiogQGludGVybmFsIEV4dHJhY3RzIGEgU2NhbGVJbmZvIENvbXBvc2l0ZVNldCBpbnRvIFR5cGVEZWYuU2V0ICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdENvbXBvc2l0ZVNldChfLCBwYXJhbXMsIGZpZWxkcykge1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMSB8fCBmaWVsZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldCBoYW5kbGluZyBleHBlY3RzIHBhcmFtL2ZpZWxkIGFzIHNpbmdsZSBlbnRyaWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLlNldCxcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5yZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKHRoaXMucmVnaXN0cnkuY3JlYXRlTG9va3VwVHlwZShmaWVsZHNbMF0udHlwZSksIFtdKS5iaXRMZW5ndGgoKSxcbiAgICAgICAgICAgIHN1YjogdGhpcy5nZXRTaVR5cGUocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpLmRlZi5hc1ZhcmlhbnQudmFyaWFudHMubWFwKCh7IGluZGV4LCBuYW1lIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGFuIGlzc3VlID4gMl41MyAtIDEgLi4uIGRvbid0IGhhdmUgdGhvc2UgKHlldClcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgudG9OdW1iZXIoKSxcbiAgICAgICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5QbGFpbixcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgU2NhbGVJbmZvIGVudW0vc3RydWN0IGZpZWxkcyBpbnRvIFR5cGVEZWYue1N0cnVjdCwgVHVwbGV9ICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdEZpZWxkcyhsb29rdXBJbmRleCwgZmllbGRzKSB7XG4gICAgICAgIGxldCBpc1N0cnVjdCA9IHRydWU7XG4gICAgICAgIGxldCBpc1R1cGxlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY291bnQgPSBmaWVsZHMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBmID0gMDsgZiA8IGNvdW50OyBmKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmllbGRzW2ZdO1xuICAgICAgICAgICAgaXNTdHJ1Y3QgPSBpc1N0cnVjdCAmJiBuYW1lLmlzU29tZTtcbiAgICAgICAgICAgIGlzVHVwbGUgPSBpc1R1cGxlICYmIG5hbWUuaXNOb25lO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNUdXBsZSAmJiAhaXNTdHJ1Y3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWVsZHMgdHlwZSBkZXRlY3RlZCwgZXhwZWN0ZWQgZWl0aGVyIFR1cGxlIChhbGwgdW5uYW1lZCkgb3IgU3RydWN0IChhbGwgbmFtZWQpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLk51bGwsXG4gICAgICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVHVwbGUgJiYgY291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVEZWYgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKGZpZWxkc1swXS50eXBlKTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RTcHJlYWQoe30sIHR5cGVEZWYsIGxvb2t1cEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBsb29rdXBJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbG9va3VwTmFtZTogdGhpcy5fX2ludGVybmFsX19uYW1lc1tsb29rdXBJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgIGxvb2t1cE5hbWVSb290OiB0eXBlRGVmLmxvb2t1cE5hbWVcbiAgICAgICAgICAgICAgICB9LCBmaWVsZHNbMF0udHlwZU5hbWUuaXNTb21lXG4gICAgICAgICAgICAgICAgPyB7IHR5cGVOYW1lOiBzYW5pdGl6ZShmaWVsZHNbMF0udHlwZU5hbWUudW53cmFwKCkpIH1cbiAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtzdWIsIGFsaWFzXSA9IHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdEZpZWxkc0FsaWFzKGZpZWxkcyk7XG4gICAgICAgIHJldHVybiB3aXRoVHlwZVN0cmluZyh0aGlzLnJlZ2lzdHJ5LCBvYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaW5mbzogaXNUdXBsZSAvLyBUdXBsZSBjaGVjayBmaXJzdFxuICAgICAgICAgICAgICAgID8gVHlwZURlZkluZm8uVHVwbGVcbiAgICAgICAgICAgICAgICA6IFR5cGVEZWZJbmZvLlN0cnVjdCxcbiAgICAgICAgICAgIHN1YlxuICAgICAgICB9LCBhbGlhcy5zaXplXG4gICAgICAgICAgICA/IHsgYWxpYXMgfVxuICAgICAgICAgICAgOiBudWxsLCBsb29rdXBJbmRleCA9PT0gLTFcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgbG9va3VwSW5kZXgsXG4gICAgICAgICAgICAgICAgbG9va3VwTmFtZTogdGhpcy5fX2ludGVybmFsX19uYW1lc1tsb29rdXBJbmRleF1cbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBBcHBseSBmaWVsZCBhbGlhc3NlZCAod2l0aCBubyBKUyBjb25mbGljdHMpICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdEZpZWxkc0FsaWFzKGZpZWxkcykge1xuICAgICAgICBjb25zdCBhbGlhcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgY291bnQgPSBmaWVsZHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBzdWIgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZG9jcywgbmFtZSwgdHlwZSwgdHlwZU5hbWUgfSA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVEZWYgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKHR5cGUpO1xuICAgICAgICAgICAgaWYgKG5hbWUuaXNOb25lKSB7XG4gICAgICAgICAgICAgICAgc3ViW2ldID0gdHlwZURlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lRmllbGQsIG5hbWVPcmlnXSA9IHRoaXMuc2FuaXRpemVGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZUZpZWxkICYmIG5hbWVPcmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzLnNldChuYW1lRmllbGQsIG5hbWVPcmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViW2ldID0gb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgZG9jczogc2FuaXRpemVEb2NzKGRvY3MpLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lRmllbGRcbiAgICAgICAgICAgICAgICB9LCB0eXBlRGVmLCB0eXBlTmFtZS5pc1NvbWVcbiAgICAgICAgICAgICAgICAgICAgPyB7IHR5cGVOYW1lOiBzYW5pdGl6ZSh0eXBlTmFtZS51bndyYXAoKSkgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc3ViLCBhbGlhc107XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgYW4gaW50ZXJuYWwgSGlzdG9yaWMgKHByZSBWMTQpIHR5cGUgICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdEhpc3RvcmljKF8sIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogdHlwZS50b1N0cmluZygpLFxuICAgICAgICAgICAgaXNGcm9tU2k6IHRydWVcbiAgICAgICAgfSwgZ2V0VHlwZURlZih0eXBlKSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgYSBTY2FsZUluZm8gUHJpbWl0aXZlIGludG8gVHlwZURlZi5QbGFpbiAqL1xuICAgIF9faW50ZXJuYWxfX2V4dHJhY3RQcmltaXRpdmUoXywgdHlwZSkge1xuICAgICAgICBjb25zdCB0eXBlU3RyID0gdHlwZS5kZWYuYXNQcmltaXRpdmUudHlwZS50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgICAgICB0eXBlOiBQUklNSVRJVkVfQUxJQVNbdHlwZVN0cl0gfHwgdHlwZVN0ci50b0xvd2VyQ2FzZSgpXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgQXBwbGllcyBhbiBhbGlhcyBwYXRoIG9udG8gdGhlIFR5cGVEZWYgKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0QWxpYXNQYXRoKF8sIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLlBsYWluLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKiogQGludGVybmFsIEV4dHJhY3RzIGEgU2NhbGVJbmZvIFNlcXVlbmNlIGludG8gVHlwZURlZi5WZWMgKHdpdGggQnl0ZXMgc2hvcnRjdXQpICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdFNlcXVlbmNlKGxvb2t1cEluZGV4LCB7IHR5cGUgfSkge1xuICAgICAgICBjb25zdCBzdWIgPSB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVNpRGVmKHR5cGUpO1xuICAgICAgICBpZiAoc3ViLnR5cGUgPT09ICd1OCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUGxhaW4sXG4gICAgICAgICAgICAgICAgdHlwZTogJ0J5dGVzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2l0aFR5cGVTdHJpbmcodGhpcy5yZWdpc3RyeSwge1xuICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uVmVjLFxuICAgICAgICAgICAgbG9va3VwSW5kZXgsXG4gICAgICAgICAgICBsb29rdXBOYW1lOiB0aGlzLl9faW50ZXJuYWxfX25hbWVzW2xvb2t1cEluZGV4XSxcbiAgICAgICAgICAgIHN1YlxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBUdXBsZSBpbnRvIFR5cGVEZWYuVHVwbGUgKi9cbiAgICBfX2ludGVybmFsX19leHRyYWN0VHVwbGUobG9va3VwSW5kZXgsIGlkcykge1xuICAgICAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5OdWxsLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmKGlkc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3ViID0gaWRzLm1hcCgodCkgPT4gdGhpcy5fX2ludGVybmFsX19jcmVhdGVTaURlZih0KSk7XG4gICAgICAgIHJldHVybiB3aXRoVHlwZVN0cmluZyh0aGlzLnJlZ2lzdHJ5LCB7XG4gICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5UdXBsZSxcbiAgICAgICAgICAgIGxvb2t1cEluZGV4LFxuICAgICAgICAgICAgbG9va3VwTmFtZTogdGhpcy5fX2ludGVybmFsX19uYW1lc1tsb29rdXBJbmRleF0sXG4gICAgICAgICAgICBzdWJcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgRXh0cmFjdHMgYSBTY2FsZUluZm8gVmFyaWFudCBpbnRvIFR5cGVEZWYue09wdGlvbiwgUmVzdWx0LCBFbnVtfSAqL1xuICAgIF9faW50ZXJuYWxfX2V4dHJhY3RWYXJpYW50KGxvb2t1cEluZGV4LCB7IHBhcmFtcywgcGF0aCB9LCB7IHZhcmlhbnRzIH0pIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsVmFyaWFudCA9IHBhdGhbMF0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsVmFyaWFudCA9PT0gJ09wdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbiByZXF1aXJlcyAxIHBhcmFtZXRlciwgZm91bmQgJHtwYXJhbXMubGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOT1RFIFRoaXMgaXMgb3B0LWluICh1bmhhbmRsZWQpLCBub3QgYnkgZGVmYXVsdFxuICAgICAgICAgICAgICAgIC8vIGlmIChzdWIudHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgICAgICAgICAgICAgLy8gICByZXR1cm4gd2l0aFR5cGVTdHJpbmcodGhpcy5yZWdpc3RyeSwge1xuICAgICAgICAgICAgICAgIC8vICAgICBpbmZvOiBUeXBlRGVmSW5mby5QbGFpbixcbiAgICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ09wdGlvbkJvb2wnXG4gICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uT3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHRoaXMuX19pbnRlcm5hbF9fY3JlYXRlU2lEZWYocGFyYW1zWzBdLnR5cGUudW53cmFwKCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzcGVjaWFsVmFyaWFudCA9PT0gJ1Jlc3VsdCcpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlc3VsdCByZXF1aXJlcyAyIHBhcmFtZXRlcnMsIGZvdW5kICR7cGFyYW1zLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBzdWI6IHBhcmFtcy5tYXAoKHsgdHlwZSB9LCBpbmRleCkgPT4gb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFsnT2snLCAnRXJyb3InXVtpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5fX2ludGVybmFsX19jcmVhdGVTaURlZih0eXBlLnVud3JhcCgpKSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhcmlhbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbmZvOiBUeXBlRGVmSW5mby5OdWxsLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19leHRyYWN0VmFyaWFudEVudW0obG9va3VwSW5kZXgsIHZhcmlhbnRzKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCBFeHRyYWN0cyBhIFNjYWxlSW5mbyBWYXJpYW50IGludG8gVHlwZURlZi5FbnVtICovXG4gICAgX19pbnRlcm5hbF9fZXh0cmFjdFZhcmlhbnRFbnVtKGxvb2t1cEluZGV4LCB2YXJpYW50cykge1xuICAgICAgICBjb25zdCBzdWIgPSBbXTtcbiAgICAgICAgLy8gd2UgbWF5IGdldCBlbnRyaWVzIG91dCBvZiBvcmRlciwgYXJyYW5nZSB0aGVtIGZpcnN0IGJlZm9yZSBjcmVhdGluZyB3aXRoIGdhcHMgZmlsbGVkXG4gICAgICAgIC8vIE5PVEU6IFNpbmNlIHdlIG11dGF0ZSwgdXNlIGEgY29weSBvZiB0aGUgYXJyYXkgYXMgYW4gaW5wdXRcbiAgICAgICAgdmFyaWFudHNcbiAgICAgICAgICAgIC5zbGljZSgpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleC5jbXAoYi5pbmRleCkpXG4gICAgICAgICAgICAuZm9yRWFjaCgoeyBmaWVsZHMsIGluZGV4OiBibkluZGV4LCBuYW1lIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYm5JbmRleC50b051bWJlcigpO1xuICAgICAgICAgICAgd2hpbGUgKHN1Yi5sZW5ndGggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgc3ViLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpbmRleDogc3ViLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgaW5mbzogVHlwZURlZkluZm8uTnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYF9fVW51c2VkJHtzdWIubGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdOdWxsJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3ViLnB1c2gob2JqZWN0U3ByZWFkKHRoaXMuX19pbnRlcm5hbF9fZXh0cmFjdEZpZWxkcygtMSwgZmllbGRzKSwge1xuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHdpdGhUeXBlU3RyaW5nKHRoaXMucmVnaXN0cnksIHtcbiAgICAgICAgICAgIGluZm86IFR5cGVEZWZJbmZvLkVudW0sXG4gICAgICAgICAgICBsb29rdXBJbmRleCxcbiAgICAgICAgICAgIGxvb2t1cE5hbWU6IHRoaXMuX19pbnRlcm5hbF9fbmFtZXNbbG9va3VwSW5kZXhdLFxuICAgICAgICAgICAgc3ViXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGhleFRvVThhLCBsYXp5TWV0aG9kLCBsYXp5TWV0aG9kcywgc3RyaW5nQ2FtZWxDYXNlIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgb2JqZWN0TmFtZVRvQ2FtZWwgfSBmcm9tICcuLi91dGlsLmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZUNvbnN0YW50cyhyZWdpc3RyeSwgeyBwYWxsZXRzIH0sIF92ZXJzaW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gcGFsbGV0cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgY29uc3RhbnRzLCBuYW1lIH0gPSBwYWxsZXRzW2ldO1xuICAgICAgICBpZiAoIWNvbnN0YW50cy5pc0VtcHR5KSB7XG4gICAgICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc3RyaW5nQ2FtZWxDYXNlKG5hbWUpLCAoKSA9PiBsYXp5TWV0aG9kcyh7fSwgY29uc3RhbnRzLCAoY29uc3RhbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlYyA9IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUocmVnaXN0cnkuY3JlYXRlTG9va3VwVHlwZShjb25zdGFudC50eXBlKSwgW2hleFRvVThhKGNvbnN0YW50LnZhbHVlLnRvSGV4KCkpXSk7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGNhc3RpbmcgaGVyZSBzaW5jZSB3ZSBhcmUgYXNzaWduaW5nIHRvIGEgcmVhZC1vbmx5IHByb3BlcnR5XG4gICAgICAgICAgICAgICAgY29kZWMubWV0YSA9IGNvbnN0YW50O1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2RlYztcbiAgICAgICAgICAgIH0sIG9iamVjdE5hbWVUb0NhbWVsKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IGlzQ29kZWMsIGlzVThhLCBsYXp5TWV0aG9kLCBvYmplY3RTcHJlYWQsIHN0cmluZ0NhbWVsQ2FzZSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGxhenlWYXJpYW50cyB9IGZyb20gJy4uLy4uLy4uL2NyZWF0ZS9sYXp5LmpzJztcbmltcG9ydCB7IG9iamVjdE5hbWVUb1N0cmluZyB9IGZyb20gJy4uL3V0aWwuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhbnRUb01ldGEobG9va3VwLCB2YXJpYW50KSB7XG4gICAgcmV0dXJuIG9iamVjdFNwcmVhZCh7IGFyZ3M6IHZhcmlhbnQuZmllbGRzLm1hcCgoeyB0eXBlIH0pID0+IGxvb2t1cC5nZXRUeXBlRGVmKHR5cGUpLnR5cGUpIH0sIHZhcmlhbnQpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlRXJyb3JzKHJlZ2lzdHJ5LCB7IGxvb2t1cCwgcGFsbGV0cyB9LCB2ZXJzaW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gcGFsbGV0cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3JzLCBpbmRleCwgbmFtZSB9ID0gcGFsbGV0c1tpXTtcbiAgICAgICAgaWYgKGVycm9ycy5pc1NvbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHZlcnNpb24gPj0gMTIgPyBpbmRleC50b051bWJlcigpIDogaTtcbiAgICAgICAgICAgIGxhenlNZXRob2QocmVzdWx0LCBzdHJpbmdDYW1lbENhc2UobmFtZSksICgpID0+IGxhenlWYXJpYW50cyhsb29rdXAsIGVycm9ycy51bndyYXAoKSwgb2JqZWN0TmFtZVRvU3RyaW5nLCAodmFyaWFudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAvLyBXZSBzcHJpbmtsZSBpbiBpc0NvZGVjICYgaXNVOGEgdG8gZW5zdXJlIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIGNvcnJlY3Qgb2JqZWN0c1xuICAgICAgICAgICAgICAgIGlzOiAoZXJyb3JNb2QpID0+IGlzQ29kZWMoZXJyb3JNb2QpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQ29kZWMoZXJyb3JNb2QuaW5kZXgpICYmXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTW9kLmluZGV4LmVxKHNlY3Rpb25JbmRleCkgJiYgKGlzVThhKGVycm9yTW9kLmVycm9yKVxuICAgICAgICAgICAgICAgICAgICA/IGVycm9yTW9kLmVycm9yWzBdID09PSB2YXJpYW50LmluZGV4LnRvTnVtYmVyKClcbiAgICAgICAgICAgICAgICAgICAgOiBpc0NvZGVjKGVycm9yTW9kLmVycm9yKSAmJiBlcnJvck1vZC5lcnJvci5lcSh2YXJpYW50LmluZGV4KSksXG4gICAgICAgICAgICAgICAgbWV0YTogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnRXJyb3JNZXRhZGF0YUxhdGVzdCcsIFt2YXJpYW50VG9NZXRhKGxvb2t1cCwgdmFyaWFudCldKVxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgaXNDb2RlYywgaXNVOGEsIGxhenlNZXRob2QsIHN0cmluZ0NhbWVsQ2FzZSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGxhenlWYXJpYW50cyB9IGZyb20gJy4uLy4uLy4uL2NyZWF0ZS9sYXp5LmpzJztcbmltcG9ydCB7IHZhcmlhbnRUb01ldGEgfSBmcm9tICcuLi9lcnJvcnMvaW5kZXguanMnO1xuaW1wb3J0IHsgb2JqZWN0TmFtZVRvU3RyaW5nIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRXZlbnRzU29tZSh7IGV2ZW50cyB9KSB7XG4gICAgcmV0dXJuIGV2ZW50cy5pc1NvbWU7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVFdmVudHMocmVnaXN0cnksIHsgbG9va3VwLCBwYWxsZXRzIH0sIHZlcnNpb24pIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHBhbGxldHMuZmlsdGVyKGZpbHRlckV2ZW50c1NvbWUpO1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IGZpbHRlcmVkLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBldmVudHMsIGluZGV4LCBuYW1lIH0gPSBmaWx0ZXJlZFtpXTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gdmVyc2lvbiA+PSAxMiA/IGluZGV4LnRvTnVtYmVyKCkgOiBpO1xuICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc3RyaW5nQ2FtZWxDYXNlKG5hbWUpLCAoKSA9PiBsYXp5VmFyaWFudHMobG9va3VwLCBldmVudHMudW53cmFwKCksIG9iamVjdE5hbWVUb1N0cmluZywgKHZhcmlhbnQpID0+ICh7XG4gICAgICAgICAgICAvLyBXZSBzcHJpbmtsZSBpbiBpc0NvZGVjICYgaXNVOGEgdG8gZW5zdXJlIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIGNvcnJlY3Qgb2JqZWN0c1xuICAgICAgICAgICAgaXM6IChldmVudFJlY29yZCkgPT4gaXNDb2RlYyhldmVudFJlY29yZCkgJiZcbiAgICAgICAgICAgICAgICBpc1U4YShldmVudFJlY29yZC5pbmRleCkgJiZcbiAgICAgICAgICAgICAgICBzZWN0aW9uSW5kZXggPT09IGV2ZW50UmVjb3JkLmluZGV4WzBdICYmXG4gICAgICAgICAgICAgICAgdmFyaWFudC5pbmRleC5lcShldmVudFJlY29yZC5pbmRleFsxXSksXG4gICAgICAgICAgICBtZXRhOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdFdmVudE1ldGFkYXRhTGF0ZXN0JywgW3ZhcmlhbnRUb01ldGEobG9va3VwLCB2YXJpYW50KV0pXG4gICAgICAgIH0pKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBzdHJpbmdDYW1lbENhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5mdW5jdGlvbiBpc1R4KHR4LCBjYWxsSW5kZXgpIHtcbiAgICByZXR1cm4gdHguY2FsbEluZGV4WzBdID09PSBjYWxsSW5kZXhbMF0gJiYgdHguY2FsbEluZGV4WzFdID09PSBjYWxsSW5kZXhbMV07XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5jaGVja2VkKHJlZ2lzdHJ5LCBzZWN0aW9uLCBjYWxsSW5kZXgsIGNhbGxNZXRhZGF0YSkge1xuICAgIGNvbnN0IGV4cGVjdGVkQXJncyA9IGNhbGxNZXRhZGF0YS5maWVsZHM7XG4gICAgY29uc3QgZnVuY05hbWUgPSBzdHJpbmdDYW1lbENhc2UoY2FsbE1ldGFkYXRhLm5hbWUpO1xuICAgIGNvbnN0IGV4dHJpbnNpY0ZuID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGV4cGVjdGVkQXJncy5sZW5ndGggIT09IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dHJpbnNpYyAke3NlY3Rpb259LiR7ZnVuY05hbWV9IGV4cGVjdHMgJHtleHBlY3RlZEFyZ3MubGVuZ3RofSBhcmd1bWVudHMsIGdvdCAke2FyZ3MubGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnQ2FsbCcsIFt7IGFyZ3MsIGNhbGxJbmRleCB9LCBjYWxsTWV0YWRhdGFdKTtcbiAgICB9O1xuICAgIGV4dHJpbnNpY0ZuLmlzID0gKHR4KSA9PiBpc1R4KHR4LCBjYWxsSW5kZXgpO1xuICAgIGV4dHJpbnNpY0ZuLmNhbGxJbmRleCA9IGNhbGxJbmRleDtcbiAgICBleHRyaW5zaWNGbi5tZXRhID0gY2FsbE1ldGFkYXRhO1xuICAgIGV4dHJpbnNpY0ZuLm1ldGhvZCA9IGZ1bmNOYW1lO1xuICAgIGV4dHJpbnNpY0ZuLnNlY3Rpb24gPSBzZWN0aW9uO1xuICAgIGV4dHJpbnNpY0ZuLnRvSlNPTiA9ICgpID0+IGNhbGxNZXRhZGF0YS50b0pTT04oKTtcbiAgICByZXR1cm4gZXh0cmluc2ljRm47XG59XG4iLCJpbXBvcnQgeyBsYXp5TWV0aG9kLCBvYmplY3RTcHJlYWQsIHN0cmluZ0NhbWVsQ2FzZSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGxhenlWYXJpYW50cyB9IGZyb20gJy4uLy4uLy4uL2NyZWF0ZS9sYXp5LmpzJztcbmltcG9ydCB7IGdldFNpTmFtZSB9IGZyb20gJy4uLy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgb2JqZWN0TmFtZVRvQ2FtZWwgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7IGNyZWF0ZVVuY2hlY2tlZCB9IGZyb20gJy4vY3JlYXRlVW5jaGVja2VkLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJDYWxsc1NvbWUoeyBjYWxscyB9KSB7XG4gICAgcmV0dXJuIGNhbGxzLmlzU29tZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYWxsRnVuY3Rpb24ocmVnaXN0cnksIGxvb2t1cCwgdmFyaWFudCwgc2VjdGlvbk5hbWUsIHNlY3Rpb25JbmRleCkge1xuICAgIGNvbnN0IHsgZmllbGRzLCBpbmRleCB9ID0gdmFyaWFudDtcbiAgICBjb25zdCBjb3VudCA9IGZpZWxkcy5sZW5ndGg7XG4gICAgY29uc3QgYXJncyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgdHlwZU5hbWUgfSA9IGZpZWxkc1tpXTtcbiAgICAgICAgYXJnc1tpXSA9IG9iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmdDYW1lbENhc2UobmFtZS51bndyYXBPcihgcGFyYW0ke2l9YCkpLFxuICAgICAgICAgICAgdHlwZTogZ2V0U2lOYW1lKGxvb2t1cCwgdHlwZSlcbiAgICAgICAgfSwgdHlwZU5hbWUuaXNTb21lXG4gICAgICAgICAgICA/IHsgdHlwZU5hbWU6IHR5cGVOYW1lLnVud3JhcCgpIH1cbiAgICAgICAgICAgIDogbnVsbCk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVVbmNoZWNrZWQocmVnaXN0cnksIHNlY3Rpb25OYW1lLCBuZXcgVWludDhBcnJheShbc2VjdGlvbkluZGV4LCBpbmRleC50b051bWJlcigpXSksIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0Z1bmN0aW9uTWV0YWRhdGFMYXRlc3QnLCBbb2JqZWN0U3ByZWFkKHsgYXJncyB9LCB2YXJpYW50KV0pKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZUV4dHJpbnNpY3MocmVnaXN0cnksIHsgbG9va3VwLCBwYWxsZXRzIH0sIHZlcnNpb24pIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHBhbGxldHMuZmlsdGVyKGZpbHRlckNhbGxzU29tZSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gZmlsdGVyZWQubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB7IGNhbGxzLCBpbmRleCwgbmFtZSB9ID0gZmlsdGVyZWRbaV07XG4gICAgICAgIGNvbnN0IHNlY3Rpb25OYW1lID0gc3RyaW5nQ2FtZWxDYXNlKG5hbWUpO1xuICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSB2ZXJzaW9uID49IDEyID8gaW5kZXgudG9OdW1iZXIoKSA6IGk7XG4gICAgICAgIGxhenlNZXRob2QocmVzdWx0LCBzZWN0aW9uTmFtZSwgKCkgPT4gbGF6eVZhcmlhbnRzKGxvb2t1cCwgY2FsbHMudW53cmFwKCksIG9iamVjdE5hbWVUb0NhbWVsLCAodmFyaWFudCkgPT4gY3JlYXRlQ2FsbEZ1bmN0aW9uKHJlZ2lzdHJ5LCBsb29rdXAsIHZhcmlhbnQsIHNlY3Rpb25OYW1lLCBzZWN0aW9uSW5kZXgpKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gJy4uL01ldGFkYXRhLmpzJztcbmltcG9ydCB7IGRlY29yYXRlQ29uc3RhbnRzIH0gZnJvbSAnLi9jb25zdGFudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVjb3JhdGVFcnJvcnMgfSBmcm9tICcuL2Vycm9ycy9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZWNvcmF0ZUV2ZW50cywgZmlsdGVyRXZlbnRzU29tZSB9IGZyb20gJy4vZXZlbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IGRlY29yYXRlRXh0cmluc2ljcywgZmlsdGVyQ2FsbHNTb21lIH0gZnJvbSAnLi9leHRyaW5zaWNzL2luZGV4LmpzJztcbmltcG9ydCB7IGRlY29yYXRlU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZS9pbmRleC5qcyc7XG4vKipcbiAqIEV4cGFuZHMgdGhlIG1ldGFkYXRhIGJ5IGRlY29yYXRpb24gaW50byBjb25zdHMsIHF1ZXJ5IGFuZCB0eCBzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kTWV0YWRhdGEocmVnaXN0cnksIG1ldGFkYXRhKSB7XG4gICAgaWYgKCEobWV0YWRhdGEgaW5zdGFuY2VvZiBNZXRhZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBwYXNzIGEgdmFsaWQgTWV0YWRhdGEgaW5zdGFuY2UgdG8gRGVjb3JhdGVkJyk7XG4gICAgfVxuICAgIGNvbnN0IGxhdGVzdCA9IG1ldGFkYXRhLmFzTGF0ZXN0O1xuICAgIGNvbnN0IHZlcnNpb24gPSBtZXRhZGF0YS52ZXJzaW9uO1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbnN0czogZGVjb3JhdGVDb25zdGFudHMocmVnaXN0cnksIGxhdGVzdCwgdmVyc2lvbiksXG4gICAgICAgIGVycm9yczogZGVjb3JhdGVFcnJvcnMocmVnaXN0cnksIGxhdGVzdCwgdmVyc2lvbiksXG4gICAgICAgIGV2ZW50czogZGVjb3JhdGVFdmVudHMocmVnaXN0cnksIGxhdGVzdCwgdmVyc2lvbiksXG4gICAgICAgIHF1ZXJ5OiBkZWNvcmF0ZVN0b3JhZ2UocmVnaXN0cnksIGxhdGVzdCwgdmVyc2lvbiksXG4gICAgICAgIHJlZ2lzdHJ5LFxuICAgICAgICB0eDogZGVjb3JhdGVFeHRyaW5zaWNzKHJlZ2lzdHJ5LCBsYXRlc3QsIHZlcnNpb24pXG4gICAgfTtcbn1cbmV4cG9ydCB7IGRlY29yYXRlQ29uc3RhbnRzLCBkZWNvcmF0ZUVycm9ycywgZGVjb3JhdGVFdmVudHMsIGRlY29yYXRlRXh0cmluc2ljcywgZGVjb3JhdGVTdG9yYWdlLCBmaWx0ZXJDYWxsc1NvbWUsIGZpbHRlckV2ZW50c1NvbWUgfTtcbiIsImltcG9ydCB7IFJhdyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5pbXBvcnQgeyBjb21wYWN0QWRkTGVuZ3RoLCBjb21wYWN0U3RyaXBMZW5ndGgsIGlzVW5kZWZpbmVkLCBvYmplY3RTcHJlYWQsIHN0cmluZ0NhbWVsQ2FzZSwgdThhQ29uY2F0LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IHh4aGFzaEFzVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvJztcbmltcG9ydCB7IGdldFNpTmFtZSB9IGZyb20gJy4uLy4uL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0SGFzaGVyIH0gZnJvbSAnLi9nZXRIYXNoZXIuanMnO1xuZXhwb3J0IGNvbnN0IE5PX1JBV19BUkdTID0ge1xuICAgIGFyZ3M6IFtdLFxuICAgIGhhc2hlcnM6IFtdLFxuICAgIGtleXM6IFtdXG59O1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZmlsdGVyRGVmaW5lZChhKSB7XG4gICAgcmV0dXJuICFpc1VuZGVmaW5lZChhKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGFzc2VydEFyZ3MoeyBtZXRob2QsIHNlY3Rpb24gfSwgeyBhcmdzLCBrZXlzIH0pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYWxsIHRvICR7c3RyaW5nQ2FtZWxDYXNlKHNlY3Rpb24gfHwgJ3Vua25vd24nKX0uJHtzdHJpbmdDYW1lbENhc2UobWV0aG9kIHx8ICd1bmtub3duJyl9IG5lZWRzICR7a2V5cy5sZW5ndGh9IGFyZ3VtZW50c2ApO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmdzLmZpbHRlcihmaWx0ZXJEZWZpbmVkKS5sZW5ndGggIT09IGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FsbCB0byAke3N0cmluZ0NhbWVsQ2FzZShzZWN0aW9uIHx8ICd1bmtub3duJyl9LiR7c3RyaW5nQ2FtZWxDYXNlKG1ldGhvZCB8fCAndW5rbm93bicpfSBuZWVkcyAke2tleXMubGVuZ3RofSBhcmd1bWVudHMsIGZvdW5kIFske2FyZ3Muam9pbignLCAnKX1dYCk7XG4gICAgfVxufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtleVJhd1BhcnRzKHJlZ2lzdHJ5LCBpdGVtRm4sIHsgYXJncywgaGFzaGVycywga2V5cyB9KSB7XG4gICAgY29uc3QgY291bnQgPSBrZXlzLmxlbmd0aDtcbiAgICBjb25zdCBleHRyYSA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGV4dHJhW2ldID0gZ2V0SGFzaGVyKGhhc2hlcnNbaV0pKHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUocmVnaXN0cnkuY3JlYXRlTG9va3VwVHlwZShrZXlzW2ldKSwgW2FyZ3NbaV1dKS50b1U4YSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgW1xuICAgICAgICAgICAgeHhoYXNoQXNVOGEoaXRlbUZuLnByZWZpeCwgMTI4KSxcbiAgICAgICAgICAgIHh4aGFzaEFzVThhKGl0ZW1Gbi5tZXRob2QsIDEyOClcbiAgICAgICAgXSxcbiAgICAgICAgZXh0cmFcbiAgICBdO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtleUluc3BlY3QocmVnaXN0cnksIGl0ZW1GbiwgYXJncykge1xuICAgIGFzc2VydEFyZ3MoaXRlbUZuLCBhcmdzKTtcbiAgICBjb25zdCB7IG1ldGEgfSA9IGl0ZW1GbjtcbiAgICBjb25zdCBbcHJlZml4LCBleHRyYV0gPSBjcmVhdGVLZXlSYXdQYXJ0cyhyZWdpc3RyeSwgaXRlbUZuLCBhcmdzKTtcbiAgICBsZXQgdHlwZXMgPSBbXTtcbiAgICBpZiAobWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgIGNvbnN0IHsgaGFzaGVycywga2V5IH0gPSBtZXRhLnR5cGUuYXNNYXA7XG4gICAgICAgIHR5cGVzID0gaGFzaGVycy5sZW5ndGggPT09IDFcbiAgICAgICAgICAgID8gW2Ake2hhc2hlcnNbMF0udHlwZX0oJHtnZXRTaU5hbWUocmVnaXN0cnkubG9va3VwLCBrZXkpfSlgXVxuICAgICAgICAgICAgOiByZWdpc3RyeS5sb29rdXAuZ2V0U2lUeXBlKGtleSkuZGVmLmFzVHVwbGUubWFwKChrLCBpKSA9PiBgJHtoYXNoZXJzW2ldLnR5cGV9KCR7Z2V0U2lOYW1lKHJlZ2lzdHJ5Lmxvb2t1cCwgayl9KWApO1xuICAgIH1cbiAgICBjb25zdCBuYW1lcyA9IFsnbW9kdWxlJywgJ21ldGhvZCddLmNvbmNhdCguLi5hcmdzLmFyZ3MubWFwKChfLCBpKSA9PiB0eXBlc1tpXSkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlubmVyOiBwcmVmaXhcbiAgICAgICAgICAgIC5jb25jYXQoLi4uZXh0cmEpXG4gICAgICAgICAgICAubWFwKCh2LCBpKSA9PiAoeyBuYW1lOiBuYW1lc1tpXSwgb3V0ZXI6IFt2XSB9KSlcbiAgICB9O1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtleVJhdyhyZWdpc3RyeSwgaXRlbUZuLCBhcmdzKSB7XG4gICAgY29uc3QgW3ByZWZpeCwgZXh0cmFdID0gY3JlYXRlS2V5UmF3UGFydHMocmVnaXN0cnksIGl0ZW1GbiwgYXJncyk7XG4gICAgcmV0dXJuIHU4YUNvbmNhdCguLi5wcmVmaXgsIC4uLmV4dHJhKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNyZWF0ZUtleShyZWdpc3RyeSwgaXRlbUZuLCBhcmdzKSB7XG4gICAgYXNzZXJ0QXJncyhpdGVtRm4sIGFyZ3MpO1xuICAgIC8vIGFsd2F5cyBhZGQgdGhlIGxlbmd0aCBwcmVmaXggKHVuZGVybHlpbmcgaXQgaXMgQnl0ZXMpXG4gICAgcmV0dXJuIGNvbXBhY3RBZGRMZW5ndGgoY3JlYXRlS2V5UmF3KHJlZ2lzdHJ5LCBpdGVtRm4sIGFyZ3MpKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2VJbnNwZWN0KHJlZ2lzdHJ5LCBpdGVtRm4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG1ldGE6IHsgdHlwZSB9IH0gPSBpdGVtRm47XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmICh0eXBlLmlzUGxhaW4pIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnNraXBIYXNoaW5nXG4gICAgICAgICAgICAgICAgPyB7IGlubmVyOiBbXSwgbmFtZTogJ3dlbGxLbm93bicsIG91dGVyOiBbdThhVG9VOGEob3B0aW9ucy5rZXkpXSB9XG4gICAgICAgICAgICAgICAgOiBjcmVhdGVLZXlJbnNwZWN0KHJlZ2lzdHJ5LCBpdGVtRm4sIE5PX1JBV19BUkdTKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGhhc2hlcnMsIGtleSB9ID0gdHlwZS5hc01hcDtcbiAgICAgICAgcmV0dXJuIGhhc2hlcnMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/IGNyZWF0ZUtleUluc3BlY3QocmVnaXN0cnksIGl0ZW1GbiwgeyBhcmdzLCBoYXNoZXJzLCBrZXlzOiBba2V5XSB9KVxuICAgICAgICAgICAgOiBjcmVhdGVLZXlJbnNwZWN0KHJlZ2lzdHJ5LCBpdGVtRm4sIHsgYXJncywgaGFzaGVycywga2V5czogcmVnaXN0cnkubG9va3VwLmdldFNpVHlwZShrZXkpLmRlZi5hc1R1cGxlIH0pO1xuICAgIH07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBjcmVhdGVTdG9yYWdlRm4ocmVnaXN0cnksIGl0ZW1Gbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IHsgbWV0YTogeyB0eXBlIH0gfSA9IGl0ZW1GbjtcbiAgICBsZXQgY2FjaGVLZXkgPSBudWxsO1xuICAgIC8vIENhbiBvbmx5IGhhdmUgemVybyBvciBvbmUgYXJndW1lbnQ6XG4gICAgLy8gICAtIHN0b3JhZ2Uuc3lzdGVtLmFjY291bnQoYWRkcmVzcylcbiAgICAvLyAgIC0gc3RvcmFnZS50aW1lc3RhbXAuYmxvY2tQZXJpb2QoKVxuICAgIC8vIEZvciBoaWdoZXItbWFwIHF1ZXJpZXMgdGhlIHBhcmFtcyBhcmUgcGFzc2VkIGluIGFzIGFuIHR1cGxlLCBba2V5MSwga2V5Ml1cbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgaWYgKHR5cGUuaXNQbGFpbikge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUtleSkge1xuICAgICAgICAgICAgICAgIGNhY2hlS2V5ID0gb3B0aW9ucy5za2lwSGFzaGluZ1xuICAgICAgICAgICAgICAgICAgICA/IGNvbXBhY3RBZGRMZW5ndGgodThhVG9VOGEob3B0aW9ucy5rZXkpKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUtleShyZWdpc3RyeSwgaXRlbUZuLCBOT19SQVdfQVJHUyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVLZXk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBoYXNoZXJzLCBrZXkgfSA9IHR5cGUuYXNNYXA7XG4gICAgICAgIHJldHVybiBoYXNoZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgPyBjcmVhdGVLZXkocmVnaXN0cnksIGl0ZW1GbiwgeyBhcmdzLCBoYXNoZXJzLCBrZXlzOiBba2V5XSB9KVxuICAgICAgICAgICAgOiBjcmVhdGVLZXkocmVnaXN0cnksIGl0ZW1GbiwgeyBhcmdzLCBoYXNoZXJzLCBrZXlzOiByZWdpc3RyeS5sb29rdXAuZ2V0U2lUeXBlKGtleSkuZGVmLmFzVHVwbGUgfSk7XG4gICAgfTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNyZWF0ZVdpdGhNZXRhKHJlZ2lzdHJ5LCBpdGVtRm4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG1ldGEsIG1ldGhvZCwgcHJlZml4LCBzZWN0aW9uIH0gPSBpdGVtRm47XG4gICAgY29uc3Qgc3RvcmFnZUZuID0gY3JlYXRlU3RvcmFnZUZuKHJlZ2lzdHJ5LCBpdGVtRm4sIG9wdGlvbnMpO1xuICAgIHN0b3JhZ2VGbi5pbnNwZWN0ID0gY3JlYXRlU3RvcmFnZUluc3BlY3QocmVnaXN0cnksIGl0ZW1Gbiwgb3B0aW9ucyk7XG4gICAgc3RvcmFnZUZuLm1ldGEgPSBtZXRhO1xuICAgIHN0b3JhZ2VGbi5tZXRob2QgPSBzdHJpbmdDYW1lbENhc2UobWV0aG9kKTtcbiAgICBzdG9yYWdlRm4ucHJlZml4ID0gcHJlZml4O1xuICAgIHN0b3JhZ2VGbi5zZWN0aW9uID0gc2VjdGlvbjtcbiAgICAvLyBleHBsaWNpdGx5IGFkZCB0aGUgYWN0dWFsIG1ldGhvZCBpbiB0aGUgdG9KU09OLCB0aGlzIGdldHMgdXNlZCB0byBkZXRlcm1pbmUgY2FjaGluZyBhbmQgd2l0aG91dCBpdFxuICAgIC8vIGluc3RhbmNlcyAoZS5nLiBjb2xsZWN0aXZlKSB3aWxsIG5vdCB3b3JrIHNpbmNlIGl0IGlzIG9ubHkgbWF0Y2hlZCBvbiBwYXJhbSBtZXRhXG4gICAgc3RvcmFnZUZuLnRvSlNPTiA9ICgpID0+IG9iamVjdFNwcmVhZCh7IHN0b3JhZ2U6IHsgbWV0aG9kLCBwcmVmaXgsIHNlY3Rpb24gfSB9LCBtZXRhLnRvSlNPTigpKTtcbiAgICByZXR1cm4gc3RvcmFnZUZuO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZXh0ZW5kSGVhZE1ldGEocmVnaXN0cnksIHsgbWV0YTogeyBkb2NzLCBuYW1lLCB0eXBlIH0sIHNlY3Rpb24gfSwgeyBtZXRob2QgfSwgaXRlckZuKSB7XG4gICAgLy8gbWV0YWRhdGEgd2l0aCBhIGZhbGxiYWNrIHZhbHVlIHVzaW5nIHRoZSB0eXBlIG9mIHRoZSBrZXksIHRoZSBub3JtYWxcbiAgICAvLyBtZXRhIGZhbGxiYWNrIG9ubHkgYXBwbGllcyB0byBhY3R1YWwgZW50cnkgdmFsdWVzLCBjcmVhdGUgb25lIGZvciBoZWFkXG4gICAgY29uc3QgbWV0YSA9IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VFbnRyeU1ldGFkYXRhTGF0ZXN0JywgW3tcbiAgICAgICAgICAgIGRvY3MsXG4gICAgICAgICAgICBmYWxsYmFjazogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnQnl0ZXMnLCBbXSksXG4gICAgICAgICAgICBtb2RpZmllcjogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU3RvcmFnZUVudHJ5TW9kaWZpZXJMYXRlc3QnLCBbMV0pLCAvLyByZXF1aXJlZFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VFbnRyeVR5cGVMYXRlc3QnLCBbdHlwZS5hc01hcC5rZXksIDBdKVxuICAgICAgICB9XSk7XG4gICAgaXRlckZuLm1ldGEgPSBtZXRhO1xuICAgIGNvbnN0IGZuID0gKC4uLmFyZ3MpID0+IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VLZXknLCBbaXRlckZuKC4uLmFyZ3MpLCB7IG1ldGhvZCwgc2VjdGlvbiB9XSk7XG4gICAgZm4ubWV0YSA9IG1ldGE7XG4gICAgcmV0dXJuIGZuO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZXh0ZW5kUHJlZml4ZWRNYXAocmVnaXN0cnksIGl0ZW1Gbiwgc3RvcmFnZUZuKSB7XG4gICAgY29uc3QgeyBtZXRhOiB7IHR5cGUgfSwgbWV0aG9kLCBzZWN0aW9uIH0gPSBpdGVtRm47XG4gICAgc3RvcmFnZUZuLml0ZXJLZXkgPSBleHRlbmRIZWFkTWV0YShyZWdpc3RyeSwgaXRlbUZuLCBzdG9yYWdlRm4sICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAmJiAodHlwZS5pc1BsYWluIHx8IChhcmdzLmxlbmd0aCA+PSB0eXBlLmFzTWFwLmhhc2hlcnMubGVuZ3RoKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSXRlcmF0aW9uIG9mICR7c3RyaW5nQ2FtZWxDYXNlKHNlY3Rpb24gfHwgJ3Vua25vd24nKX0uJHtzdHJpbmdDYW1lbENhc2UobWV0aG9kIHx8ICd1bmtub3duJyl9IG5lZWRzIGFyZ3VtZW50cyB0byBiZSBhdCBsZWFzdCBvbmUgbGVzcyB0aGFuIHRoZSBmdWxsIGFyZ3VtZW50cywgZm91bmQgWyR7YXJncy5qb2luKCcsICcpfV1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBoYXNoZXJzLCBrZXkgfSA9IHR5cGUuYXNNYXA7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5c1ZlYyA9IGhhc2hlcnMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gW2tleV1cbiAgICAgICAgICAgICAgICAgICAgOiByZWdpc3RyeS5sb29rdXAuZ2V0U2lUeXBlKGtleSkuZGVmLmFzVHVwbGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYXcocmVnaXN0cnksIGNyZWF0ZUtleVJhdyhyZWdpc3RyeSwgaXRlbUZuLCB7IGFyZ3MsIGhhc2hlcnM6IGhhc2hlcnMuc2xpY2UoMCwgYXJncy5sZW5ndGgpLCBrZXlzOiBrZXlzVmVjLnNsaWNlKDAsIGFyZ3MubGVuZ3RoKSB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSYXcocmVnaXN0cnksIGNyZWF0ZUtleVJhdyhyZWdpc3RyeSwgaXRlbUZuLCBOT19SQVdfQVJHUykpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdG9yYWdlRm47XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24ocmVnaXN0cnksIGl0ZW1Gbiwgb3B0aW9ucykge1xuICAgIGNvbnN0IHsgbWV0YTogeyB0eXBlIH0gfSA9IGl0ZW1GbjtcbiAgICBjb25zdCBzdG9yYWdlRm4gPSBjcmVhdGVXaXRoTWV0YShyZWdpc3RyeSwgaXRlbUZuLCBvcHRpb25zKTtcbiAgICBpZiAodHlwZS5pc01hcCkge1xuICAgICAgICBleHRlbmRQcmVmaXhlZE1hcChyZWdpc3RyeSwgaXRlbUZuLCBzdG9yYWdlRm4pO1xuICAgIH1cbiAgICBzdG9yYWdlRm4ua2V5UHJlZml4ID0gKC4uLmFyZ3MpID0+IChzdG9yYWdlRm4uaXRlcktleSAmJiBzdG9yYWdlRm4uaXRlcktleSguLi5hcmdzKSkgfHxcbiAgICAgICAgY29tcGFjdFN0cmlwTGVuZ3RoKHN0b3JhZ2VGbigpKVsxXTtcbiAgICByZXR1cm4gc3RvcmFnZUZuO1xufVxuIiwiaW1wb3J0IHsgdThhQ29uY2F0LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGJsYWtlMkFzVThhLCB4eGhhc2hBc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5jb25zdCBERUZBVUxUX0ZOID0gKGRhdGEpID0+IHh4aGFzaEFzVThhKGRhdGEsIDEyOCk7XG5jb25zdCBIQVNIRVJTID0ge1xuICAgIEJsYWtlMl8xMjg6IChkYXRhKSA9PiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgICBibGFrZTJBc1U4YShkYXRhLCAxMjgpLFxuICAgIEJsYWtlMl8xMjhDb25jYXQ6IChkYXRhKSA9PiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgICB1OGFDb25jYXQoYmxha2UyQXNVOGEoZGF0YSwgMTI4KSwgdThhVG9VOGEoZGF0YSkpLFxuICAgIEJsYWtlMl8yNTY6IChkYXRhKSA9PiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgICBibGFrZTJBc1U4YShkYXRhLCAyNTYpLFxuICAgIElkZW50aXR5OiAoZGF0YSkgPT4gdThhVG9VOGEoZGF0YSksXG4gICAgVHdveDEyODogKGRhdGEpID0+IHh4aGFzaEFzVThhKGRhdGEsIDEyOCksXG4gICAgVHdveDI1NjogKGRhdGEpID0+IHh4aGFzaEFzVThhKGRhdGEsIDI1NiksXG4gICAgVHdveDY0Q29uY2F0OiAoZGF0YSkgPT4gdThhQ29uY2F0KHh4aGFzaEFzVThhKGRhdGEsIDY0KSwgdThhVG9VOGEoZGF0YSkpXG59O1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhhc2hlcihoYXNoZXIpIHtcbiAgICByZXR1cm4gSEFTSEVSU1toYXNoZXIudHlwZV0gfHwgREVGQVVMVF9GTjtcbn1cbiIsImltcG9ydCB7IHN1YnN0cmF0ZSB9IGZyb20gJy4vc3Vic3RyYXRlLmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yYWdlKHJlZ2lzdHJ5KSB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHt9O1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzdWJzdHJhdGUpO1xuICAgIGZvciAobGV0IGUgPSAwLCBjb3VudCA9IGVudHJpZXMubGVuZ3RoOyBlIDwgY291bnQ7IGUrKykge1xuICAgICAgICBzdG9yYWdlW2VudHJpZXNbZV1bMF1dID0gZW50cmllc1tlXVsxXShyZWdpc3RyeSk7XG4gICAgfVxuICAgIHJldHVybiB7IHN1YnN0cmF0ZTogc3RvcmFnZSB9O1xufVxuIiwiaW1wb3J0IHsgbGF6eU1ldGhvZCwgbGF6eU1ldGhvZHMsIHN0cmluZ0NhbWVsQ2FzZSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IG9iamVjdE5hbWVUb0NhbWVsIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVGdW5jdGlvbiwgY3JlYXRlS2V5UmF3LCBOT19SQVdfQVJHUyB9IGZyb20gJy4vY3JlYXRlRnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gJy4vZ2V0U3RvcmFnZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSdW50aW1lRnVuY3Rpb24gfSBmcm9tICcuL3V0aWwuanMnO1xuY29uc3QgVkVSU0lPTl9OQU1FID0gJ3BhbGxldFZlcnNpb24nO1xuY29uc3QgVkVSU0lPTl9LRVkgPSAnOl9fU1RPUkFHRV9WRVJTSU9OX186JztcbmNvbnN0IFZFUlNJT05fRE9DUyA9IHsgZG9jczogJ1JldHVybnMgdGhlIGN1cnJlbnQgcGFsbGV0IHZlcnNpb24gZnJvbSBzdG9yYWdlJywgdHlwZTogJ3UxNicgfTtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZVN0b3JhZ2UocmVnaXN0cnksIHsgcGFsbGV0cyB9LCBfbWV0YVZlcnNpb24pIHtcbiAgICBjb25zdCByZXN1bHQgPSBnZXRTdG9yYWdlKHJlZ2lzdHJ5KTtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBwYWxsZXRzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBzdG9yYWdlIH0gPSBwYWxsZXRzW2ldO1xuICAgICAgICBpZiAoc3RvcmFnZS5pc1NvbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBzdHJpbmdDYW1lbENhc2UobmFtZSk7XG4gICAgICAgICAgICBjb25zdCB7IGl0ZW1zLCBwcmVmaXg6IF9wcmVmaXggfSA9IHN0b3JhZ2UudW53cmFwKCk7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBfcHJlZml4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBsYXp5TWV0aG9kKHJlc3VsdCwgc2VjdGlvbiwgKCkgPT4gbGF6eU1ldGhvZHMoe1xuICAgICAgICAgICAgICAgIHBhbGxldFZlcnNpb246IGNyZWF0ZVJ1bnRpbWVGdW5jdGlvbih7IG1ldGhvZDogVkVSU0lPTl9OQU1FLCBwcmVmaXgsIHNlY3Rpb24gfSwgY3JlYXRlS2V5UmF3KHJlZ2lzdHJ5LCB7IG1ldGhvZDogVkVSU0lPTl9LRVksIHByZWZpeDogbmFtZS50b1N0cmluZygpIH0sIE5PX1JBV19BUkdTKSwgVkVSU0lPTl9ET0NTKShyZWdpc3RyeSlcbiAgICAgICAgICAgIH0sIGl0ZW1zLCAobWV0YSkgPT4gY3JlYXRlRnVuY3Rpb24ocmVnaXN0cnksIHsgbWV0YSwgbWV0aG9kOiBtZXRhLm5hbWUudG9TdHJpbmcoKSwgcHJlZml4LCBzZWN0aW9uIH0sIHt9KSwgb2JqZWN0TmFtZVRvQ2FtZWwpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlUnVudGltZUZ1bmN0aW9uIH0gZnJvbSAnLi91dGlsLmpzJztcbmNvbnN0IHByZWZpeCA9ICdTdWJzdHJhdGUnO1xuY29uc3Qgc2VjdGlvbiA9ICdzdWJzdHJhdGUnO1xuZnVuY3Rpb24gY3JlYXRlU3Vic3RyYXRlRm4obWV0aG9kLCBrZXksIG1ldGEpIHtcbiAgICByZXR1cm4gY3JlYXRlUnVudGltZUZ1bmN0aW9uKHsgbWV0aG9kLCBwcmVmaXgsIHNlY3Rpb24gfSwga2V5LCBtZXRhKTtcbn1cbmV4cG9ydCBjb25zdCBzdWJzdHJhdGUgPSB7XG4gICAgY2hhbmdlc1RyaWVDb25maWc6IGNyZWF0ZVN1YnN0cmF0ZUZuKCdjaGFuZ2VzVHJpZUNvbmZpZycsICc6Y2hhbmdlc190cmllJywge1xuICAgICAgICBkb2NzOiAnQ2hhbmdlcyB0cmllIGNvbmZpZ3VyYXRpb24gaXMgc3RvcmVkIHVuZGVyIHRoaXMga2V5LicsXG4gICAgICAgIHR5cGU6ICd1MzInXG4gICAgfSksXG4gICAgY2hpbGRTdG9yYWdlS2V5UHJlZml4OiBjcmVhdGVTdWJzdHJhdGVGbignY2hpbGRTdG9yYWdlS2V5UHJlZml4JywgJzpjaGlsZF9zdG9yYWdlOicsIHtcbiAgICAgICAgZG9jczogJ1ByZWZpeCBvZiBjaGlsZCBzdG9yYWdlIGtleXMuJyxcbiAgICAgICAgdHlwZTogJ3UzMidcbiAgICB9KSxcbiAgICBjb2RlOiBjcmVhdGVTdWJzdHJhdGVGbignY29kZScsICc6Y29kZScsIHtcbiAgICAgICAgZG9jczogJ1dhc20gY29kZSBvZiB0aGUgcnVudGltZS4nLFxuICAgICAgICB0eXBlOiAnQnl0ZXMnXG4gICAgfSksXG4gICAgZXh0cmluc2ljSW5kZXg6IGNyZWF0ZVN1YnN0cmF0ZUZuKCdleHRyaW5zaWNJbmRleCcsICc6ZXh0cmluc2ljX2luZGV4Jywge1xuICAgICAgICBkb2NzOiAnQ3VycmVudCBleHRyaW5zaWMgaW5kZXggKHUzMikgaXMgc3RvcmVkIHVuZGVyIHRoaXMga2V5LicsXG4gICAgICAgIHR5cGU6ICd1MzInXG4gICAgfSksXG4gICAgaGVhcFBhZ2VzOiBjcmVhdGVTdWJzdHJhdGVGbignaGVhcFBhZ2VzJywgJzpoZWFwcGFnZXMnLCB7XG4gICAgICAgIGRvY3M6ICdOdW1iZXIgb2Ygd2FzbSBsaW5lYXIgbWVtb3J5IHBhZ2VzIHJlcXVpcmVkIGZvciBleGVjdXRpb24gb2YgdGhlIHJ1bnRpbWUuJyxcbiAgICAgICAgdHlwZTogJ3U2NCdcbiAgICB9KSxcbiAgICBpbnRyYWJsb2NrRW50cm9weTogY3JlYXRlU3Vic3RyYXRlRm4oJ2ludHJhYmxvY2tFbnRyb3B5JywgJzppbnRyYWJsb2NrX2VudHJvcHknLCB7XG4gICAgICAgIGRvY3M6ICdDdXJyZW50IGludHJhLWJsb2NrIGVudHJvcHkgKGEgdW5pdmVyc2FsbHkgdW5pcXVlIGBbdTg7IDMyXWAgdmFsdWUpIGlzIHN0b3JlZCBoZXJlLicsXG4gICAgICAgIHR5cGU6ICdbdTg7IDMyXSdcbiAgICB9KVxufTtcbiIsImltcG9ydCB7IGdldFR5cGVEZWYgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY3JlYXRlJztcbmltcG9ydCB7IGNyZWF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi9jcmVhdGVGdW5jdGlvbi5qcyc7XG5mdW5jdGlvbiBmaW5kU2lQcmltaXRpdmUocmVnaXN0cnksIHR5cGUpIHtcbiAgICBjb25zdCBwcmltID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiByZWdpc3RyeS5sb29rdXAudHlwZXMuZmluZCgodCkgPT4gKHQudHlwZS5kZWYuaXNQcmltaXRpdmUgJiZcbiAgICAgICAgdC50eXBlLmRlZi5hc1ByaW1pdGl2ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IHByaW0pIHx8ICh0LnR5cGUuZGVmLmlzSGlzdG9yaWNNZXRhQ29tcGF0ICYmXG4gICAgICAgIHQudHlwZS5kZWYuYXNIaXN0b3JpY01ldGFDb21wYXQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSBwcmltKSk7XG59XG5mdW5jdGlvbiBmaW5kU2lUeXBlKHJlZ2lzdHJ5LCB0eXBlKSB7XG4gICAgbGV0IHBvcnRhYmxlID0gZmluZFNpUHJpbWl0aXZlKHJlZ2lzdHJ5LCB0eXBlKTtcbiAgICAvLyBzb21lIHR5cGVzIGFyZSBlaXRoZXIgU2VxdWVuY2Ugb3IgQXJyYXlzLCBjYXRlciBmb3IgdGhlc2VcbiAgICAvLyBzcGVjaWZpY2FsbHkgKHRoZXNlIGFsbCBjb21lIGZyb20gdGhlIGJhc2Ugc3Vic3RyYXRlIGtub3duIGtleXMpXG4gICAgaWYgKCFwb3J0YWJsZSAmJiAodHlwZSA9PT0gJ0J5dGVzJyB8fCB0eXBlLnN0YXJ0c1dpdGgoJ1t1ODsnKSkpIHtcbiAgICAgICAgY29uc3QgdTggPSBmaW5kU2lQcmltaXRpdmUocmVnaXN0cnksICd1OCcpO1xuICAgICAgICBpZiAodTgpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnQnl0ZXMnKSB7XG4gICAgICAgICAgICAgICAgcG9ydGFibGUgPSByZWdpc3RyeS5sb29rdXAudHlwZXMuZmluZCgodCkgPT4gKHQudHlwZS5kZWYuaXNTZXF1ZW5jZSAmJlxuICAgICAgICAgICAgICAgICAgICB0LnR5cGUuZGVmLmFzU2VxdWVuY2UudHlwZS5lcSh1OC5pZCkpIHx8ICh0LnR5cGUuZGVmLmlzSGlzdG9yaWNNZXRhQ29tcGF0ICYmXG4gICAgICAgICAgICAgICAgICAgIHQudHlwZS5kZWYuYXNIaXN0b3JpY01ldGFDb21wYXQuZXEodHlwZSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRkID0gZ2V0VHlwZURlZih0eXBlKTtcbiAgICAgICAgICAgICAgICBwb3J0YWJsZSA9IHJlZ2lzdHJ5Lmxvb2t1cC50eXBlcy5maW5kKCh0KSA9PiAodC50eXBlLmRlZi5pc0FycmF5ICYmXG4gICAgICAgICAgICAgICAgICAgIHQudHlwZS5kZWYuYXNBcnJheS5lcSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZW46IHRkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHU4LmlkXG4gICAgICAgICAgICAgICAgICAgIH0pKSB8fCAodC50eXBlLmRlZi5pc0hpc3RvcmljTWV0YUNvbXBhdCAmJlxuICAgICAgICAgICAgICAgICAgICB0LnR5cGUuZGVmLmFzSGlzdG9yaWNNZXRhQ29tcGF0LmVxKHR5cGUpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwb3J0YWJsZSkge1xuICAgICAgICAvLyBOb3QgZmF0YWwsIGhvd2V2ZXIgaWYgdGhpcyBoYXBwZW5zIHRoZSBzdG9yYWdlIGtleSB1c2luZyB0aGlzXG4gICAgICAgIC8vIHR5cGUgd2lsbCBub3QgcmV0dXJuIHZhbGlkIHZhbHVlcywgcmF0aGVyIGl0IHdpbGwgbW9zdCBwcm9iYWJseVxuICAgICAgICAvLyBiZSBkZWNvZGVkIGluY29ycmVjdGx5XG4gICAgICAgIGNvbnNvbGUud2FybihgVW5hYmxlIHRvIG1hcCAke3R5cGV9IHRvIGEgbG9va3VwIGluZGV4YCk7XG4gICAgfVxuICAgIHJldHVybiBwb3J0YWJsZTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW50aW1lRnVuY3Rpb24oeyBtZXRob2QsIHByZWZpeCwgc2VjdGlvbiB9LCBrZXksIHsgZG9jcywgdHlwZSB9KSB7XG4gICAgcmV0dXJuIChyZWdpc3RyeSkgPT4gY3JlYXRlRnVuY3Rpb24ocmVnaXN0cnksIHtcbiAgICAgICAgbWV0YTogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU3RvcmFnZUVudHJ5TWV0YWRhdGFMYXRlc3QnLCBbe1xuICAgICAgICAgICAgICAgIGRvY3M6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1ZlYzxUZXh0PicsIFtbZG9jc11dKSxcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU3RvcmFnZUVudHJ5TW9kaWZpZXJMYXRlc3QnLCBbJ1JlcXVpcmVkJ10pLFxuICAgICAgICAgICAgICAgIG5hbWU6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1RleHQnLCBbbWV0aG9kXSksXG4gICAgICAgICAgICAgICAgdG9KU09OOiAoKSA9PiBrZXksXG4gICAgICAgICAgICAgICAgdHlwZTogcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU3RvcmFnZUVudHJ5VHlwZUxhdGVzdCcsIFt7IFBsYWluOiBmaW5kU2lUeXBlKHJlZ2lzdHJ5LCB0eXBlKT8uaWQgfHwgMCB9XSlcbiAgICAgICAgICAgIH1dKSxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIHNlY3Rpb25cbiAgICB9LCB7IGtleSwgc2tpcEhhc2hpbmc6IHRydWUgfSk7XG59XG4iLCJpbXBvcnQgeyBzdHJpbmdDYW1lbENhc2UgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5mdW5jdGlvbiBjb252ZXJ0KGZuKSB7XG4gICAgcmV0dXJuICh7IG5hbWUgfSkgPT4gZm4obmFtZSk7XG59XG5leHBvcnQgY29uc3Qgb2JqZWN0TmFtZVRvQ2FtZWwgPSAvKiNfX1BVUkVfXyovIGNvbnZlcnQoc3RyaW5nQ2FtZWxDYXNlKTtcbmV4cG9ydCBjb25zdCBvYmplY3ROYW1lVG9TdHJpbmcgPSAvKiNfX1BVUkVfXyovIGNvbnZlcnQoKG4pID0+IG4udG9TdHJpbmcoKSk7XG4iLCJpbXBvcnQgeyBnZXRUeXBlRGVmLCBUeXBlRGVmSW5mbyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jcmVhdGUnO1xuZnVuY3Rpb24gZXh0cmFjdFN1YlNpbmdsZShfLCB7IHN1YiB9KSB7XG4gICAgY29uc3QgeyBsb29rdXBOYW1lLCB0eXBlIH0gPSBzdWI7XG4gICAgcmV0dXJuIGV4dHJhY3RUeXBlcyhbbG9va3VwTmFtZSB8fCB0eXBlXSk7XG59XG5mdW5jdGlvbiBleHRyYWN0U3ViQXJyYXkoXywgeyBzdWIgfSkge1xuICAgIHJldHVybiBleHRyYWN0VHlwZXMoc3ViLm1hcCgoeyBsb29rdXBOYW1lLCB0eXBlIH0pID0+IGxvb2t1cE5hbWUgfHwgdHlwZSkpO1xufVxuZnVuY3Rpb24gdW5oYW5kbGVkKHR5cGUsIHsgaW5mbyB9KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQ6IFVuYWJsZSB0byBjcmVhdGUgYW5kIHZhbGlkYXRlIHR5cGUgZnJvbSAke3R5cGV9IChpbmZvPSR7VHlwZURlZkluZm9baW5mb119KWApO1xufVxuY29uc3QgbWFwcGluZyA9IHtcbiAgICBbVHlwZURlZkluZm8uQlRyZWVNYXBdOiBleHRyYWN0U3ViQXJyYXksXG4gICAgW1R5cGVEZWZJbmZvLkJUcmVlU2V0XTogZXh0cmFjdFN1YlNpbmdsZSxcbiAgICBbVHlwZURlZkluZm8uQ29tcGFjdF06IGV4dHJhY3RTdWJTaW5nbGUsXG4gICAgW1R5cGVEZWZJbmZvLkRvTm90Q29uc3RydWN0XTogdW5oYW5kbGVkLFxuICAgIFtUeXBlRGVmSW5mby5FbnVtXTogZXh0cmFjdFN1YkFycmF5LFxuICAgIFtUeXBlRGVmSW5mby5IYXNoTWFwXTogZXh0cmFjdFN1YkFycmF5LFxuICAgIFtUeXBlRGVmSW5mby5JbnRdOiB1bmhhbmRsZWQsXG4gICAgW1R5cGVEZWZJbmZvLkxpbmthZ2VdOiBleHRyYWN0U3ViU2luZ2xlLFxuICAgIFtUeXBlRGVmSW5mby5OdWxsXTogdW5oYW5kbGVkLFxuICAgIFtUeXBlRGVmSW5mby5PcHRpb25dOiBleHRyYWN0U3ViU2luZ2xlLFxuICAgIFtUeXBlRGVmSW5mby5QbGFpbl06IChfLCB0eXBlRGVmKSA9PiB0eXBlRGVmLmxvb2t1cE5hbWUgfHwgdHlwZURlZi50eXBlLFxuICAgIFtUeXBlRGVmSW5mby5SYW5nZV06IGV4dHJhY3RTdWJTaW5nbGUsXG4gICAgW1R5cGVEZWZJbmZvLlJhbmdlSW5jbHVzaXZlXTogZXh0cmFjdFN1YlNpbmdsZSxcbiAgICBbVHlwZURlZkluZm8uUmVzdWx0XTogZXh0cmFjdFN1YkFycmF5LFxuICAgIFtUeXBlRGVmSW5mby5TZXRdOiBleHRyYWN0U3ViQXJyYXksXG4gICAgW1R5cGVEZWZJbmZvLlNpXTogdW5oYW5kbGVkLFxuICAgIFtUeXBlRGVmSW5mby5TdHJ1Y3RdOiBleHRyYWN0U3ViQXJyYXksXG4gICAgW1R5cGVEZWZJbmZvLlR1cGxlXTogZXh0cmFjdFN1YkFycmF5LFxuICAgIFtUeXBlRGVmSW5mby5VSW50XTogdW5oYW5kbGVkLFxuICAgIFtUeXBlRGVmSW5mby5WZWNdOiBleHRyYWN0U3ViU2luZ2xlLFxuICAgIFtUeXBlRGVmSW5mby5WZWNGaXhlZF06IGV4dHJhY3RTdWJTaW5nbGUsXG4gICAgW1R5cGVEZWZJbmZvLldyYXBwZXJLZWVwT3BhcXVlXTogZXh0cmFjdFN1YlNpbmdsZSxcbiAgICBbVHlwZURlZkluZm8uV3JhcHBlck9wYXF1ZV06IGV4dHJhY3RTdWJTaW5nbGVcbn07XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFR5cGVzKHR5cGVzKSB7XG4gICAgY29uc3QgY291bnQgPSB0eXBlcy5sZW5ndGg7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW2ldO1xuICAgICAgICBjb25zdCB0eXBlRGVmID0gZ2V0VHlwZURlZih0eXBlKTtcbiAgICAgICAgcmVzdWx0W2ldID0gbWFwcGluZ1t0eXBlRGVmLmluZm9dKHR5cGUsIHR5cGVEZWYpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5VbmlxKGxpc3QsIHJlc3VsdCA9IFtdKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gbGlzdC5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbGlzdFtpXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cnkpKSB7XG4gICAgICAgICAgICBmbGF0dGVuVW5pcShlbnRyeSwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQocmVzdWx0KV07XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZ2V0U2lOYW1lKGxvb2t1cCwgdHlwZSkge1xuICAgIGNvbnN0IHR5cGVEZWYgPSBsb29rdXAuZ2V0VHlwZURlZih0eXBlKTtcbiAgICByZXR1cm4gdHlwZURlZi5sb29rdXBOYW1lIHx8IHR5cGVEZWYudHlwZTtcbn1cbiIsImltcG9ydCB7IGZsYXR0ZW5VbmlxIH0gZnJvbSAnLi9mbGF0dGVuVW5pcS5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVR5cGVzIH0gZnJvbSAnLi92YWxpZGF0ZVR5cGVzLmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGV4dHJhY3RUeXBlcyhsb29rdXAsIHR5cGVzKSB7XG4gICAgcmV0dXJuIHR5cGVzLm1hcCgoeyB0eXBlIH0pID0+IGxvb2t1cC5nZXRUeXBlRGVmKHR5cGUpLnR5cGUpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZXh0cmFjdEZpZWxkVHlwZXMobG9va3VwLCB0eXBlKSB7XG4gICAgcmV0dXJuIGxvb2t1cC5nZXRTaVR5cGUodHlwZSkuZGVmLmFzVmFyaWFudC52YXJpYW50cy5tYXAoKHsgZmllbGRzIH0pID0+IGV4dHJhY3RUeXBlcyhsb29rdXAsIGZpZWxkcykpO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0UGFsbGV0TmFtZXMoeyBsb29rdXAsIHBhbGxldHMgfSkge1xuICAgIHJldHVybiBwYWxsZXRzLnJlZHVjZSgoYWxsLCB7IGNhbGxzLCBjb25zdGFudHMsIGV2ZW50cywgc3RvcmFnZSB9KSA9PiB7XG4gICAgICAgIGFsbC5wdXNoKFtleHRyYWN0VHlwZXMobG9va3VwLCBjb25zdGFudHMpXSk7XG4gICAgICAgIGlmIChjYWxscy5pc1NvbWUpIHtcbiAgICAgICAgICAgIGFsbC5wdXNoKGV4dHJhY3RGaWVsZFR5cGVzKGxvb2t1cCwgY2FsbHMudW53cmFwKCkudHlwZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudHMuaXNTb21lKSB7XG4gICAgICAgICAgICBhbGwucHVzaChleHRyYWN0RmllbGRUeXBlcyhsb29rdXAsIGV2ZW50cy51bndyYXAoKS50eXBlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0b3JhZ2UuaXNTb21lKSB7XG4gICAgICAgICAgICBhbGwucHVzaChzdG9yYWdlLnVud3JhcCgpLml0ZW1zLm1hcCgoeyB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZS5pc1BsYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbbG9va3VwLmdldFR5cGVEZWYodHlwZS5hc1BsYWluKS50eXBlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBoYXNoZXJzLCBrZXksIHZhbHVlIH0gPSB0eXBlLmFzTWFwO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYXNoZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cC5nZXRUeXBlRGVmKHZhbHVlKS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwLmdldFR5cGVEZWYoa2V5KS50eXBlXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAuZ2V0VHlwZURlZih2YWx1ZSkudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxvb2t1cC5nZXRTaVR5cGUoa2V5KS5kZWYuYXNUdXBsZS5tYXAoKHQpID0+IGxvb2t1cC5nZXRUeXBlRGVmKHQpLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsbDtcbiAgICB9LCBbXSk7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pcVR5cGVzKHJlZ2lzdHJ5LCBtZXRhLCB0aHJvd0Vycm9yKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlVHlwZXMocmVnaXN0cnksIHRocm93RXJyb3IsIGZsYXR0ZW5VbmlxKGdldFBhbGxldE5hbWVzKG1ldGEpKSk7XG59XG4iLCJpbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5mdW5jdGlvbiB0cmltRG9jcyhkb2NzKSB7XG4gICAgY29uc3Qgc3RyaW5ncyA9IGRvY3MubWFwKChkKSA9PiBkLnRvU3RyaW5nKCkudHJpbSgpKTtcbiAgICBjb25zdCBmaXJzdEVtcHR5ID0gc3RyaW5ncy5maW5kSW5kZXgoKGQpID0+ICFkLmxlbmd0aCk7XG4gICAgcmV0dXJuIGZpcnN0RW1wdHkgPT09IC0xXG4gICAgICAgID8gc3RyaW5nc1xuICAgICAgICA6IHN0cmluZ3Muc2xpY2UoMCwgZmlyc3RFbXB0eSk7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYWxsc09ubHkocmVnaXN0cnksIHsgZXh0cmluc2ljLCBsb29rdXAsIHBhbGxldHMgfSkge1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdNZXRhZGF0YUxhdGVzdCcsIFt7XG4gICAgICAgICAgICBleHRyaW5zaWMsXG4gICAgICAgICAgICBsb29rdXA6IHtcbiAgICAgICAgICAgICAgICB0eXBlczogbG9va3VwLnR5cGVzLm1hcCgoeyBpZCwgdHlwZSB9KSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdQb3J0YWJsZVR5cGUnLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBvYmplY3RTcHJlYWQoe30sIHR5cGUsIHsgZG9jczogdHJpbURvY3ModHlwZS5kb2NzKSB9KVxuICAgICAgICAgICAgICAgICAgICB9XSkpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFsbGV0czogcGFsbGV0cy5tYXAoKHsgY2FsbHMsIGluZGV4LCBuYW1lIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgY2FsbHM6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ09wdGlvbjxQYWxsZXRDYWxsTWV0YWRhdGFMYXRlc3Q+JywgW2NhbGxzLnVud3JhcE9yKG51bGwpXSksXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1dKS50b0pTT04oKTtcbn1cbiIsImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGV4dHJhY3RUeXBlcyB9IGZyb20gJy4vZXh0cmFjdFR5cGVzLmpzJztcbmltcG9ydCB7IGZsYXR0ZW5VbmlxIH0gZnJvbSAnLi9mbGF0dGVuVW5pcS5qcyc7XG5jb25zdCBsID0gbG9nZ2VyKCdtZXRhZGF0YScpO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVHlwZXMocmVnaXN0cnksIHRocm93RXJyb3IsIHR5cGVzKSB7XG4gICAgY29uc3QgbWlzc2luZyA9IGZsYXR0ZW5VbmlxKGV4dHJhY3RUeXBlcyh0eXBlcykpXG4gICAgICAgIC5maWx0ZXIoKHR5cGUpID0+ICFyZWdpc3RyeS5oYXNUeXBlKHR5cGUpICYmXG4gICAgICAgICFyZWdpc3RyeS5pc0xvb2t1cFR5cGUodHlwZSkpXG4gICAgICAgIC5zb3J0KCk7XG4gICAgaWYgKG1pc3NpbmcubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVW5rbm93biB0eXBlcyBmb3VuZCwgbm8gdHlwZXMgZm9yICR7bWlzc2luZy5qb2luKCcsICcpfWA7XG4gICAgICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsLndhcm4obWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVzO1xufVxuIiwiLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVjExKHJlZ2lzdHJ5LCB7IG1vZHVsZXMgfSkge1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdNZXRhZGF0YVYxMScsIFt7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5ldyBpbiBWMTEsIHBhc3MgVjAgaGVyZSAtIHNvbWV0aGluZyBub24tZXhpc3RpbmcsIHRlbGxpbmcgdGhlIEFQSSB0byB1c2VcbiAgICAgICAgICAgIC8vIHRoZSBmYWxsYmFjayBmb3IgdGhpcyBpbmZvcm1hdGlvbiAob24tY2hhaW4gZGV0ZWN0aW9uKVxuICAgICAgICAgICAgZXh0cmluc2ljOiB7XG4gICAgICAgICAgICAgICAgc2lnbmVkRXh0ZW5zaW9uczogW10sXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vZHVsZXNcbiAgICAgICAgfV0pO1xufVxuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1YxMihyZWdpc3RyeSwgeyBleHRyaW5zaWMsIG1vZHVsZXMgfSkge1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdNZXRhZGF0YVYxMicsIFt7XG4gICAgICAgICAgICBleHRyaW5zaWMsXG4gICAgICAgICAgICBtb2R1bGVzOiBtb2R1bGVzLm1hcCgobW9kKSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdNb2R1bGVNZXRhZGF0YVYxMicsIFtvYmplY3RTcHJlYWQoe30sIG1vZCwgeyBpbmRleDogMjU1IH0pXSkpXG4gICAgICAgIH1dKTtcbn1cbiIsIi8qKlxuICogQGludGVybmFsXG4gKiovXG5leHBvcnQgZnVuY3Rpb24gdG9WMTMocmVnaXN0cnksIHYxMikge1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdNZXRhZGF0YVYxMycsIFt2MTJdKTtcbn1cbiIsImltcG9ydCB7IHN0cmluZ0NhbWVsQ2FzZSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGdldEFsaWFzVHlwZXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FsaWFzLmpzJztcbmltcG9ydCB7IGtub3duT3JpZ2lucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcnVudGltZS9kZWZpbml0aW9ucy5qcyc7XG5jb25zdCBCT1hFUyA9IFtbJzwnLCAnPiddLCBbJzwnLCAnLCddLCBbJywnLCAnPiddLCBbJygnLCAnKSddLCBbJygnLCAnLCddLCBbJywnLCAnLCddLCBbJywnLCAnKSddXTtcbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBhdGlibGUgdHlwZSBtYXBwaW5nXG4gKiBAaW50ZXJuYWxcbiAqKi9cbmZ1bmN0aW9uIGNvbXBhdFR5cGUoc3BlY3MsIF90eXBlKSB7XG4gICAgY29uc3QgdHlwZSA9IF90eXBlLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaW5kZXggPSBzcGVjcy5maW5kSW5kZXgoKHsgZGVmIH0pID0+IGRlZi5IaXN0b3JpY01ldGFDb21wYXQgPT09IHR5cGUpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gc3BlY3MucHVzaCh7XG4gICAgICAgIGRlZjoge1xuICAgICAgICAgICAgSGlzdG9yaWNNZXRhQ29tcGF0OiB0eXBlXG4gICAgICAgIH1cbiAgICB9KSAtIDE7XG59XG5mdW5jdGlvbiBjb21wYXRUeXBlcyhzcGVjcywgLi4udHlwZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSB0eXBlcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbXBhdFR5cGUoc3BlY3MsIHR5cGVzW2ldKTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWtlVHVwbGVUeXBlKHNwZWNzLCBlbnRyaWVzKSB7XG4gICAgcmV0dXJuIHNwZWNzLnB1c2goe1xuICAgICAgICBkZWY6IHtcbiAgICAgICAgICAgIFR1cGxlOiBlbnRyaWVzXG4gICAgICAgIH1cbiAgICB9KSAtIDE7XG59XG5mdW5jdGlvbiBtYWtlVmFyaWFudFR5cGUobW9kTmFtZSwgdmFyaWFudFR5cGUsIHNwZWNzLCB2YXJpYW50cykge1xuICAgIHJldHVybiBzcGVjcy5wdXNoKHtcbiAgICAgICAgZGVmOiB7XG4gICAgICAgICAgICBWYXJpYW50OiB7IHZhcmlhbnRzIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGF0aDogW2BwYWxsZXRfJHttb2ROYW1lLnRvU3RyaW5nKCl9YCwgJ3BhbGxldCcsIHZhcmlhbnRUeXBlXVxuICAgIH0pIC0gMTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKiBnZW5lcmF0ZSAmIHJlZ2lzdGVyIHRoZSBPcmlnaW5DYWxsZXIgdHlwZVxuICoqL1xuZnVuY3Rpb24gcmVnaXN0ZXJPcmlnaW5DYWxsZXIocmVnaXN0cnksIG1vZHVsZXMsIG1ldGFWZXJzaW9uKSB7XG4gICAgcmVnaXN0cnkucmVnaXN0ZXIoe1xuICAgICAgICBPcmlnaW5DYWxsZXI6IHtcbiAgICAgICAgICAgIF9lbnVtOiBtb2R1bGVzXG4gICAgICAgICAgICAgICAgLm1hcCgobW9kLCBpbmRleCkgPT4gW1xuICAgICAgICAgICAgICAgIG1vZC5uYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YVZlcnNpb24gPj0gMTJcbiAgICAgICAgICAgICAgICAgICAgPyBtb2QuaW5kZXgudG9OdW1iZXIoKVxuICAgICAgICAgICAgICAgICAgICA6IGluZGV4XG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIFtuYW1lLCBpbmRleF0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGg7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtgRW1wdHkke2l9YF0gPSAnTnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGtub3duT3JpZ2luc1tuYW1lXSB8fCAnTnVsbCc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEZpbmQgYW5kIGFwcGx5IHRoZSBjb3JyZWN0IHR5cGUgb3ZlcnJpZGVcbiAqIEBpbnRlcm5hbFxuICoqL1xuZnVuY3Rpb24gc2V0VHlwZU92ZXJyaWRlKHNlY3Rpb25UeXBlcywgdHlwZXMpIHtcbiAgICB0eXBlcy5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gT2JqZWN0LmtleXMoc2VjdGlvblR5cGVzKS5maW5kKChhbGlhc2VkKSA9PiB0eXBlLmVxKGFsaWFzZWQpKTtcbiAgICAgICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgICAgICB0eXBlLnNldE92ZXJyaWRlKHNlY3Rpb25UeXBlc1tvdmVycmlkZV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRklYTUU6IE5PVCBoYXBweSB3aXRoIHRoaXMgYXBwcm9hY2gsIGJ1dCBnZXRzIG92ZXIgdGhlIGluaXRpYWwgaHVtcCBjYXNlZCBieSAoVmVjPEFubm91bmNlbWVudD4sQmFsYW5jZU9mKVxuICAgICAgICAgICAgY29uc3Qgb3JpZyA9IHR5cGUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IGFsaWFzID0gT2JqZWN0XG4gICAgICAgICAgICAgICAgLmVudHJpZXMoc2VjdGlvblR5cGVzKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwgW3NyYywgZHN0XSkgPT4gQk9YRVMucmVkdWNlKChyZXN1bHQsIFthLCB6XSkgPT4gcmVzdWx0LnJlcGxhY2UoYCR7YX0ke3NyY30ke3p9YCwgYCR7YX0ke2RzdH0ke3p9YCksIHJlc3VsdCksIG9yaWcpO1xuICAgICAgICAgICAgaWYgKG9yaWcgIT09IGFsaWFzKSB7XG4gICAgICAgICAgICAgICAgdHlwZS5zZXRPdmVycmlkZShhbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQXBwbHkgbW9kdWxlLXNwZWNpZmljIHR5cGUgb3ZlcnJpZGVzIChhbHdheXMgYmUgZG9uZSBhcyBwYXJ0IG9mIHRvVjE0KVxuICogQGludGVybmFsXG4gKiovXG5mdW5jdGlvbiBjb252ZXJ0Q2FsbHMoc3BlY3MsIHJlZ2lzdHJ5LCBtb2ROYW1lLCBjYWxscywgc2VjdGlvblR5cGVzKSB7XG4gICAgY29uc3QgdmFyaWFudHMgPSBjYWxscy5tYXAoKHsgYXJncywgZG9jcywgbmFtZSB9LCBpbmRleCkgPT4ge1xuICAgICAgICBzZXRUeXBlT3ZlcnJpZGUoc2VjdGlvblR5cGVzLCBhcmdzLm1hcCgoeyB0eXBlIH0pID0+IHR5cGUpKTtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1NpVmFyaWFudCcsIFt7XG4gICAgICAgICAgICAgICAgZG9jcyxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IGFyZ3MubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU2lGaWVsZCcsIFt7IG5hbWUsIHR5cGU6IGNvbXBhdFR5cGUoc3BlY3MsIHR5cGUpIH1dKSksXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgfV0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdQYWxsZXRDYWxsTWV0YWRhdGFWMTQnLCBbe1xuICAgICAgICAgICAgdHlwZTogbWFrZVZhcmlhbnRUeXBlKG1vZE5hbWUsICdDYWxsJywgc3BlY3MsIHZhcmlhbnRzKVxuICAgICAgICB9XSk7XG59XG4vKipcbiAqIEFwcGx5IG1vZHVsZS1zcGVjaWZpYyB0eXBlIG92ZXJyaWRlcyAoYWx3YXlzIGJlIGRvbmUgYXMgcGFydCBvZiB0b1YxNClcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjb252ZXJ0Q29uc3RhbnRzKHNwZWNzLCByZWdpc3RyeSwgY29uc3RhbnRzLCBzZWN0aW9uVHlwZXMpIHtcbiAgICByZXR1cm4gY29uc3RhbnRzLm1hcCgoeyBkb2NzLCBuYW1lLCB0eXBlLCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgIHNldFR5cGVPdmVycmlkZShzZWN0aW9uVHlwZXMsIFt0eXBlXSk7XG4gICAgICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdQYWxsZXRDb25zdGFudE1ldGFkYXRhVjE0JywgW3tcbiAgICAgICAgICAgICAgICBkb2NzLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogY29tcGF0VHlwZShzcGVjcywgdHlwZSksXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH1dKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQXBwbHkgbW9kdWxlLXNwZWNpZmljIHR5cGUgb3ZlcnJpZGVzIChhbHdheXMgYmUgZG9uZSBhcyBwYXJ0IG9mIHRvVjE0KVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFcnJvcnMoc3BlY3MsIHJlZ2lzdHJ5LCBtb2ROYW1lLCBlcnJvcnMsIF9zZWN0aW9uVHlwZXMpIHtcbiAgICBjb25zdCB2YXJpYW50cyA9IGVycm9ycy5tYXAoKHsgZG9jcywgbmFtZSB9LCBpbmRleCkgPT4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU2lWYXJpYW50JywgW3tcbiAgICAgICAgICAgIGRvY3MsXG4gICAgICAgICAgICBmaWVsZHM6IFtdLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgIH1dKSk7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1BhbGxldEVycm9yTWV0YWRhdGFWMTQnLCBbe1xuICAgICAgICAgICAgdHlwZTogbWFrZVZhcmlhbnRUeXBlKG1vZE5hbWUsICdFcnJvcicsIHNwZWNzLCB2YXJpYW50cylcbiAgICAgICAgfV0pO1xufVxuLyoqXG4gKiBBcHBseSBtb2R1bGUtc3BlY2lmaWMgdHlwZSBvdmVycmlkZXMgKGFsd2F5cyBiZSBkb25lIGFzIHBhcnQgb2YgdG9WMTQpXG4gKiBAaW50ZXJuYWxcbiAqKi9cbmZ1bmN0aW9uIGNvbnZlcnRFdmVudHMoc3BlY3MsIHJlZ2lzdHJ5LCBtb2ROYW1lLCBldmVudHMsIHNlY3Rpb25UeXBlcykge1xuICAgIGNvbnN0IHZhcmlhbnRzID0gZXZlbnRzLm1hcCgoeyBhcmdzLCBkb2NzLCBuYW1lIH0sIGluZGV4KSA9PiB7XG4gICAgICAgIHNldFR5cGVPdmVycmlkZShzZWN0aW9uVHlwZXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU2lWYXJpYW50JywgW3tcbiAgICAgICAgICAgICAgICBkb2NzLFxuICAgICAgICAgICAgICAgIGZpZWxkczogYXJncy5tYXAoKHQpID0+IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1NpRmllbGQnLCBbeyB0eXBlOiBjb21wYXRUeXBlKHNwZWNzLCB0KSB9XSkpLFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIH1dKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnUGFsbGV0RXZlbnRNZXRhZGF0YVYxNCcsIFt7XG4gICAgICAgICAgICB0eXBlOiBtYWtlVmFyaWFudFR5cGUobW9kTmFtZSwgJ0V2ZW50Jywgc3BlY3MsIHZhcmlhbnRzKVxuICAgICAgICB9XSk7XG59XG5mdW5jdGlvbiBjcmVhdGVNYXBFbnRyeShzcGVjcywgcmVnaXN0cnksIHNlY3Rpb25UeXBlcywgeyBoYXNoZXJzLCBpc0xpbmtlZCwgaXNPcHRpb25hbCwga2V5cywgdmFsdWUgfSkge1xuICAgIHNldFR5cGVPdmVycmlkZShzZWN0aW9uVHlwZXMsIFt2YWx1ZSwgLi4uKEFycmF5LmlzQXJyYXkoa2V5cykgPyBrZXlzIDogW2tleXNdKV0pO1xuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTdG9yYWdlRW50cnlUeXBlVjE0JywgW3tcbiAgICAgICAgICAgIE1hcDoge1xuICAgICAgICAgICAgICAgIGhhc2hlcnMsXG4gICAgICAgICAgICAgICAga2V5OiBoYXNoZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/IGNvbXBhdFR5cGUoc3BlY3MsIGtleXNbMF0pXG4gICAgICAgICAgICAgICAgICAgIDogbWFrZVR1cGxlVHlwZShzcGVjcywga2V5cy5tYXAoKHQpID0+IGNvbXBhdFR5cGUoc3BlY3MsIHQpKSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGlzTGlua2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBwcmV2aW91cy1nZW5lcmF0aW9uIGxpbmtlZC1tYXAgc3VwcG9ydCwgdGhlIGFjdHVhbCBzdG9yYWdlIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAvLyBpcyBhIFR1cGxlIHdpdGggdGhlIHZhbHVlIGFuZCB0aGUgTGlua2FnZSAoT3B0aW9uIGFwcGVhcnMgaW4gdGVoIHZhbHVlLXBhcnQgb25seSlcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYXRUeXBlKHNwZWNzLCBgKCR7aXNPcHRpb25hbCA/IGBPcHRpb248JHt2YWx1ZS50b1N0cmluZygpfT5gIDogdmFsdWUudG9TdHJpbmcoKX0sIExpbmthZ2U8JHtrZXlzWzBdLnRvU3RyaW5nKCl9PilgKVxuICAgICAgICAgICAgICAgICAgICA6IGNvbXBhdFR5cGUoc3BlY3MsIHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XSk7XG59XG4vKipcbiAqIEFwcGx5IG1vZHVsZS1zcGVjaWZpYyBzdG9yYWdlIHR5cGUgb3ZlcnJpZGVzIChhbHdheXMgcGFydCBvZiB0b1YxNClcbiAqIEBpbnRlcm5hbFxuICoqL1xuZnVuY3Rpb24gY29udmVydFN0b3JhZ2Uoc3BlY3MsIHJlZ2lzdHJ5LCB7IGl0ZW1zLCBwcmVmaXggfSwgc2VjdGlvblR5cGVzKSB7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1BhbGxldFN0b3JhZ2VNZXRhZGF0YVYxNCcsIFt7XG4gICAgICAgICAgICBpdGVtczogaXRlbXMubWFwKCh7IGRvY3MsIGZhbGxiYWNrLCBtb2RpZmllciwgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5VHlwZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZS5pc1BsYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWluID0gdHlwZS5hc1BsYWluO1xuICAgICAgICAgICAgICAgICAgICBzZXRUeXBlT3ZlcnJpZGUoc2VjdGlvblR5cGVzLCBbcGxhaW5dKTtcbiAgICAgICAgICAgICAgICAgICAgZW50cnlUeXBlID0gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnU3RvcmFnZUVudHJ5VHlwZVYxNCcsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhaW46IGNvbXBhdFR5cGUoc3BlY3MsIHBsYWluKVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHR5cGUuYXNNYXA7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5VHlwZSA9IGNyZWF0ZU1hcEVudHJ5KHNwZWNzLCByZWdpc3RyeSwgc2VjdGlvblR5cGVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoZXJzOiBbbWFwLmhhc2hlcl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xpbmtlZDogbWFwLmxpbmtlZC5pc1RydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09wdGlvbmFsOiBtb2RpZmllci5pc09wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogW21hcC5rZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hcC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZS5pc0RvdWJsZU1hcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkbSA9IHR5cGUuYXNEb3VibGVNYXA7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5VHlwZSA9IGNyZWF0ZU1hcEVudHJ5KHNwZWNzLCByZWdpc3RyeSwgc2VjdGlvblR5cGVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoZXJzOiBbZG0uaGFzaGVyLCBkbS5rZXkySGFzaGVyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTGlua2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IG1vZGlmaWVyLmlzT3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiBbZG0ua2V5MSwgZG0ua2V5Ml0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZG0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBubSA9IHR5cGUuYXNOTWFwO1xuICAgICAgICAgICAgICAgICAgICBlbnRyeVR5cGUgPSBjcmVhdGVNYXBFbnRyeShzcGVjcywgcmVnaXN0cnksIHNlY3Rpb25UeXBlcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGVyczogbm0uaGFzaGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTGlua2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT3B0aW9uYWw6IG1vZGlmaWVyLmlzT3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiBubS5rZXlWZWMsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbm0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTdG9yYWdlRW50cnlNZXRhZGF0YVYxNCcsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2NzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfV0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBwcmVmaXhcbiAgICAgICAgfV0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gY29udmVydEV4dHJpbnNpYyhyZWdpc3RyeSwgeyBzaWduZWRFeHRlbnNpb25zLCB2ZXJzaW9uIH0pIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnRXh0cmluc2ljTWV0YWRhdGFWMTQnLCBbe1xuICAgICAgICAgICAgc2lnbmVkRXh0ZW5zaW9uczogc2lnbmVkRXh0ZW5zaW9ucy5tYXAoKGlkZW50aWZpZXIpID0+ICh7XG4gICAgICAgICAgICAgICAgaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICB0eXBlOiAwIC8vIHdlIGRvbid0IG1hcCB0aGUgZmllbGRzIGF0IGFsbFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdHlwZTogMCwgLy8gTWFwIHRvIGV4dHJpbnNpYyBsaWtlIGluIHYxND9cbiAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgfV0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gY3JlYXRlUGFsbGV0KHNwZWNzLCByZWdpc3RyeSwgbW9kLCB7IGNhbGxzLCBjb25zdGFudHMsIGVycm9ycywgZXZlbnRzLCBzdG9yYWdlIH0pIHtcbiAgICBjb25zdCBzZWN0aW9uVHlwZXMgPSBnZXRBbGlhc1R5cGVzKHJlZ2lzdHJ5LCBzdHJpbmdDYW1lbENhc2UobW9kLm5hbWUpKTtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnUGFsbGV0TWV0YWRhdGFWMTQnLCBbe1xuICAgICAgICAgICAgY2FsbHM6IGNhbGxzICYmIGNvbnZlcnRDYWxscyhzcGVjcywgcmVnaXN0cnksIG1vZC5uYW1lLCBjYWxscywgc2VjdGlvblR5cGVzKSxcbiAgICAgICAgICAgIGNvbnN0YW50czogY29udmVydENvbnN0YW50cyhzcGVjcywgcmVnaXN0cnksIGNvbnN0YW50cywgc2VjdGlvblR5cGVzKSxcbiAgICAgICAgICAgIGVycm9yczogZXJyb3JzICYmIGNvbnZlcnRFcnJvcnMoc3BlY3MsIHJlZ2lzdHJ5LCBtb2QubmFtZSwgZXJyb3JzLCBzZWN0aW9uVHlwZXMpLFxuICAgICAgICAgICAgZXZlbnRzOiBldmVudHMgJiYgY29udmVydEV2ZW50cyhzcGVjcywgcmVnaXN0cnksIG1vZC5uYW1lLCBldmVudHMsIHNlY3Rpb25UeXBlcyksXG4gICAgICAgICAgICBpbmRleDogbW9kLmluZGV4LFxuICAgICAgICAgICAgbmFtZTogbW9kLm5hbWUsXG4gICAgICAgICAgICBzdG9yYWdlOiBzdG9yYWdlICYmIGNvbnZlcnRTdG9yYWdlKHNwZWNzLCByZWdpc3RyeSwgc3RvcmFnZSwgc2VjdGlvblR5cGVzKVxuICAgICAgICB9XSk7XG59XG4vKipcbiAqIENvbnZlcnQgdGhlIE1ldGFkYXRhIHRvIHYxNFxuICogQGludGVybmFsXG4gKiovXG5leHBvcnQgZnVuY3Rpb24gdG9WMTQocmVnaXN0cnksIHYxMywgbWV0YVZlcnNpb24pIHtcbiAgICBjb25zdCBzcGVjcyA9IFtdO1xuICAgIC8vIHBvc2l0aW9uIDAgYWx3YXlzIGhhcyBOdWxsLCBhZGRpdGlvbmFsbHkgYWRkIGludGVybmFsIGRlZmF1bHRzXG4gICAgY29tcGF0VHlwZXMoc3BlY3MsICdOdWxsJywgJ3U4JywgJ3UxNicsICd1MzInLCAndTY0Jyk7XG4gICAgcmVnaXN0ZXJPcmlnaW5DYWxsZXIocmVnaXN0cnksIHYxMy5tb2R1bGVzLCBtZXRhVmVyc2lvbik7XG4gICAgY29uc3QgZXh0cmluc2ljID0gY29udmVydEV4dHJpbnNpYyhyZWdpc3RyeSwgdjEzLmV4dHJpbnNpYyk7XG4gICAgY29uc3QgcGFsbGV0cyA9IHYxMy5tb2R1bGVzLm1hcCgobW9kKSA9PiBjcmVhdGVQYWxsZXQoc3BlY3MsIHJlZ2lzdHJ5LCBtb2QsIHtcbiAgICAgICAgY2FsbHM6IG1vZC5jYWxscy51bndyYXBPcihudWxsKSxcbiAgICAgICAgY29uc3RhbnRzOiBtb2QuY29uc3RhbnRzLFxuICAgICAgICBlcnJvcnM6IG1vZC5lcnJvcnMubGVuZ3RoID8gbW9kLmVycm9ycyA6IG51bGwsXG4gICAgICAgIGV2ZW50czogbW9kLmV2ZW50cy51bndyYXBPcihudWxsKSxcbiAgICAgICAgc3RvcmFnZTogbW9kLnN0b3JhZ2UudW53cmFwT3IobnVsbClcbiAgICB9KSk7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ01ldGFkYXRhVjE0JywgW3tcbiAgICAgICAgICAgIGV4dHJpbnNpYyxcbiAgICAgICAgICAgIGxvb2t1cDoge1xuICAgICAgICAgICAgICAgIHR5cGVzOiBzcGVjcy5tYXAoKHR5cGUsIGlkKSA9PiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdQb3J0YWJsZVR5cGUnLCBbeyBpZCwgdHlwZSB9XSkpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFsbGV0c1xuICAgICAgICB9XSk7XG59XG4iLCJpbXBvcnQgeyBvYmplY3RTcHJlYWQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4vKipcbiAqIENvbnZlcnQgdGhlIE1ldGFkYXRhIHRvIHYxNVxuICogQGludGVybmFsXG4gKiovXG5leHBvcnQgZnVuY3Rpb24gdG9WMTUocmVnaXN0cnksIHYxNCwgXykge1xuICAgIC8vIFYxNSBpcyBtb3N0bHkgZXF1aXZhbGVudCB0byB2MTQgaG93ZXZlciBpdCBkb2VzIGFkZFxuICAgIC8vXG4gICAgLy8gMS4gVGhlIHRvcC1sZXZlbCBhcGlzIGVudHJ5IC0gaXQgaXMgYXNzdW1lZCB0aGF0IGluIHVzYWdlIHdlIHdvdWxkXG4gICAgLy8gICAganVzdCBjaGVjayBmb3IgYWxsLWVtcHR5IChsaWtlIHRoaXMgd291bGQgY29uc3RydWN0KVxuICAgIC8vIDIuIEEgZG9jcyBwYXJhbSBvbiB0aGUgcGFsbGV0IGl0c2VsZlxuICAgIC8vIDMuIEFkZGl0aW9uYWwgZXh0cmluc2ljIHBhcmFtZXRlcnNcbiAgICAvL1xuICAgIC8vIEEgc3RyYWlnaHQgY29udmVyc2lvbiB3aXRoIGNyZWF0ZVR5cGVVbmRhZmUgbWFnaWMgZmlsbHMgaW4gZGV0YWlsc1xuICAgIC8vIFdlIG5lZWQgdGhlIFVuY2hlY2tlZEV4dHJpbnNpYyB0byBleHRyYWN0IHRoZSB0eXBlcywgYXQgbGVhc3QgZm9yIHYxNFxuICAgIC8vIHdoaWNoIGRvZXMgaGF2ZSB0aGVzZSBkZXRhaWxzIGVtYmVkZGVkIChwcmV2aW91cy1nZW4gd29uJ3QgcG9wdWxhdGUpXG4gICAgY29uc3QgdW5jaGVja2VkID0gdjE0Lmxvb2t1cC5wYXJhbVR5cGVzLlNwUnVudGltZVVuY2hlY2tlZEV4dHJpbnNpYztcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnTWV0YWRhdGFWMTUnLCBbXG4gICAgICAgIG9iamVjdFNwcmVhZCh7fSwgdjE0LCB7XG4gICAgICAgICAgICBleHRyaW5zaWM6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ0V4dHJpbnNpY01ldGFkYXRhVjE1JywgW1xuICAgICAgICAgICAgICAgIG9iamVjdFNwcmVhZCh7fSwgdjE0LmV4dHJpbnNpYywge1xuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzVHlwZTogdW5jaGVja2VkPy5bMF0udHlwZS51bndyYXBPcigwKSxcbiAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGU6IHVuY2hlY2tlZD8uWzFdLnR5cGUudW53cmFwT3IoMCksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhVHlwZTogdW5jaGVja2VkPy5bM10udHlwZS51bndyYXBPcigwKSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlVHlwZTogdW5jaGVja2VkPy5bMl0udHlwZS51bndyYXBPcigwKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIG91dGVyRW51bXM6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ091dGVyRW51bXMxNScsIFt7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIFdlIG5lZWQgdG8gZXh0cmFjdCAmIGFkZCB0aGUgZXJyb3JUeXBlIGluIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgLy8gKHRoZXNlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbiBlc2F5IHdheSB0byBkZXRlY3QgJiBleHRyYWN0IGl0KVxuICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZTogdW5jaGVja2VkPy5bMV0udHlwZS51bndyYXBPcigwKSxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiB2MTQubG9va3VwLnBhcmFtVHlwZXMuRnJhbWVTeXN0ZW1FdmVudFJlY29yZD8uWzBdLnR5cGUudW53cmFwT3IoMClcbiAgICAgICAgICAgICAgICB9XSlcbiAgICAgICAgfSlcbiAgICBdKTtcbn1cbiIsIi8qKlxuICogQ29udmVydCB0aGUgTWV0YWRhdGEgKHdoaWNoIGlzIGFuIGFsaWFzKSB0byBsYXRlc3RcbiAqIEBpbnRlcm5hbFxuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTGF0ZXN0KF9yZWdpc3RyeSwgdjE1LCBfbWV0YVZlcnNpb24pIHtcbiAgICByZXR1cm4gdjE1O1xufVxuIiwiaW1wb3J0IHsgb2JqZWN0U3ByZWFkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gY3JlYXRlU3RvcmFnZUhhc2hlcihyZWdpc3RyeSwgaGFzaGVyKSB7XG4gICAgLy8gQmxha2UyXzEyOF9Db25jYXQgaGFzIGJlZW4gYWRkZWQgYXQgaW5kZXggMiwgc28gd2UgaW5jcmVtZW50IGFsbCB0aGVcbiAgICAvLyBpbmRleGVzIGdyZWF0ZXIgdGhhbiAyXG4gICAgaWYgKGhhc2hlci50b051bWJlcigpID49IDIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VIYXNoZXJWMTAnLCBbaGFzaGVyLnRvTnVtYmVyKCkgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdTdG9yYWdlSGFzaGVyVjEwJywgW2hhc2hlcl0pO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gY3JlYXRlU3RvcmFnZVR5cGUocmVnaXN0cnksIGVudHJ5VHlwZSkge1xuICAgIGlmIChlbnRyeVR5cGUuaXNNYXApIHtcbiAgICAgICAgcmV0dXJuIFtvYmplY3RTcHJlYWQoe30sIGVudHJ5VHlwZS5hc01hcCwge1xuICAgICAgICAgICAgICAgIGhhc2hlcjogY3JlYXRlU3RvcmFnZUhhc2hlcihyZWdpc3RyeSwgZW50cnlUeXBlLmFzTWFwLmhhc2hlcilcbiAgICAgICAgICAgIH0pLCAxXTtcbiAgICB9XG4gICAgaWYgKGVudHJ5VHlwZS5pc0RvdWJsZU1hcCkge1xuICAgICAgICByZXR1cm4gW29iamVjdFNwcmVhZCh7fSwgZW50cnlUeXBlLmFzRG91YmxlTWFwLCB7XG4gICAgICAgICAgICAgICAgaGFzaGVyOiBjcmVhdGVTdG9yYWdlSGFzaGVyKHJlZ2lzdHJ5LCBlbnRyeVR5cGUuYXNEb3VibGVNYXAuaGFzaGVyKSxcbiAgICAgICAgICAgICAgICBrZXkySGFzaGVyOiBjcmVhdGVTdG9yYWdlSGFzaGVyKHJlZ2lzdHJ5LCBlbnRyeVR5cGUuYXNEb3VibGVNYXAua2V5Mkhhc2hlcilcbiAgICAgICAgICAgIH0pLCAyXTtcbiAgICB9XG4gICAgcmV0dXJuIFtlbnRyeVR5cGUuYXNQbGFpbiwgMF07XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBjb252ZXJ0TW9kdWxlKHJlZ2lzdHJ5LCBtb2QpIHtcbiAgICBjb25zdCBzdG9yYWdlID0gbW9kLnN0b3JhZ2UudW53cmFwT3IobnVsbCk7XG4gICAgcmV0dXJuIHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ01vZHVsZU1ldGFkYXRhVjEwJywgW29iamVjdFNwcmVhZCh7fSwgbW9kLCB7XG4gICAgICAgICAgICBzdG9yYWdlOiBzdG9yYWdlXG4gICAgICAgICAgICAgICAgPyBvYmplY3RTcHJlYWQoe30sIHN0b3JhZ2UsIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHN0b3JhZ2UuaXRlbXMubWFwKChpdGVtKSA9PiBvYmplY3RTcHJlYWQoe30sIGl0ZW0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHJlZ2lzdHJ5LmNyZWF0ZVR5cGVVbnNhZmUoJ1N0b3JhZ2VFbnRyeVR5cGVWMTAnLCBjcmVhdGVTdG9yYWdlVHlwZShyZWdpc3RyeSwgaXRlbS50eXBlKSlcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgfSldKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1YxMChyZWdpc3RyeSwgeyBtb2R1bGVzIH0pIHtcbiAgICByZXR1cm4gcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnTWV0YWRhdGFWMTAnLCBbe1xuICAgICAgICAgICAgbW9kdWxlczogbW9kdWxlcy5tYXAoKG1vZCkgPT4gY29udmVydE1vZHVsZShyZWdpc3RyeSwgbW9kKSlcbiAgICAgICAgfV0pO1xufVxuIiwiZXhwb3J0IGNvbnN0IEtOT1dOX1ZFUlNJT05TID0gWzE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDldO1xuZXhwb3J0IGNvbnN0IExBVEVTVF9WRVJTSU9OID0gS05PV05fVkVSU0lPTlNbMF07XG5leHBvcnQgY29uc3QgVE9fQ0FMTFNfVkVSU0lPTiA9IDE0OyAvLyBMQVRFU1RfVkVSU0lPTjtcbiIsImltcG9ydCB7IEVudW0gfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMtY29kZWMnO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzVThhLCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZURhdGFVOGEocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdmFsdWVbMF07XG4gICAgaWYgKCFpbmRpY2F0b3IpIHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuICAgIGVsc2UgaWYgKGluZGljYXRvciA+PSAxICYmIGluZGljYXRvciA8PSAzMykge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBpbmRpY2F0b3IgLSAxO1xuICAgICAgICBjb25zdCBkYXRhID0gdmFsdWUuc3ViYXJyYXkoMSwgbGVuZ3RoICsgMSk7XG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSwgd2UgYXJlIHBhc3NpbmcgYSBSYXcgYmFjayAoc2luY2Ugd2UgaGF2ZSBubyBsZW5ndGgpXG4gICAgICAgIHJldHVybiBbcmVnaXN0cnkuY3JlYXRlVHlwZVVuc2FmZSgnUmF3JywgW2RhdGFdKSwgMV07XG4gICAgfVxuICAgIGVsc2UgaWYgKGluZGljYXRvciA+PSAzNCAmJiBpbmRpY2F0b3IgPD0gMzcpIHtcbiAgICAgICAgcmV0dXJuIFt2YWx1ZS5zdWJhcnJheSgxLCAzMiArIDEpLCBpbmRpY2F0b3IgLSAzMl07IC8vIDM0IGJlY29tZXMgMlxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZWNvZGUgRGF0YSwgaW52YWxpZCBpbmRpY2F0b3IgYnl0ZSAke2luZGljYXRvcn1gKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZURhdGEocmVnaXN0cnksIHZhbHVlKSB7XG4gICAgaWYgKGlzVThhKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZURhdGFVOGEocmVnaXN0cnksIHU4YVRvVThhKHZhbHVlKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgLy8gYXNzdW1lIHdlIGhhdmUgYW4gRW51bSBvciBhbiAgb2JqZWN0IGlucHV0LCBoYW5kbGUgdGhpcyB2aWEgdGhlIG5vcm1hbCBFbnVtIGRlY29kaW5nXG4gICAgcmV0dXJuIFt2YWx1ZSwgdW5kZWZpbmVkXTtcbn1cbi8qKlxuICogQG5hbWUgRGF0YVxuICogQGRlc2NyaXB0aW9uXG4gKiBBIFtbRGF0YV1dIGNvbnRhaW5lciB3aXRoIG5vZGUsIHJhdyBvciBoYXNoZWQgZGF0YVxuICovXG5leHBvcnQgY2xhc3MgRGF0YSBleHRlbmRzIEVudW0ge1xuICAgIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwge1xuICAgICAgICAgICAgTm9uZTogJ051bGwnLCAvLyAwXG4gICAgICAgICAgICBSYXc6ICdCeXRlcycsIC8vIDFcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb3J0LWtleXNcbiAgICAgICAgICAgIEJsYWtlVHdvMjU2OiAnSDI1NicsIC8vIDJcbiAgICAgICAgICAgIFNoYTI1NjogJ0gyNTYnLCAvLyAzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29ydC1rZXlzXG4gICAgICAgICAgICBLZWNjYWsyNTY6ICdIMjU2JywgLy8gNFxuICAgICAgICAgICAgU2hhVGhyZWUyNTY6ICdIMjU2JyAvLyA1XG4gICAgICAgIH0sIC4uLmRlY29kZURhdGEocmVnaXN0cnksIHZhbHVlKSk7XG4gICAgICAgIGlmICh0aGlzLmlzUmF3ICYmIHRoaXMuYXNSYXcubGVuZ3RoID4gMzIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YS5SYXcgdmFsdWVzIGFyZSBsaW1pdGVkIHRvIGEgbWF4aW11bSBsZW5ndGggb2YgMzIgYnl0ZXMnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYXNCbGFrZVR3bzI1NigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuICAgIGdldCBhc0tlY2NhazI1NigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuICAgIGdldCBhc1JhdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuICAgIGdldCBhc1NoYTI1NigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuICAgIGdldCBhc1NoYVRocmVlMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGlzQmxha2VUd28yNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID09PSAyO1xuICAgIH1cbiAgICBnZXQgaXNLZWNjYWsyNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID09PSA0O1xuICAgIH1cbiAgICBnZXQgaXNOb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gMDtcbiAgICB9XG4gICAgZ2V0IGlzUmF3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gMTtcbiAgICB9XG4gICAgZ2V0IGlzU2hhMjU2KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gMztcbiAgICB9XG4gICAgZ2V0IGlzU2hhVGhyZWUyNTYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID09PSA1O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVuY29kZWQgbGVuZ3RoXG4gICAgICovXG4gICAgZ2V0IGVuY29kZWRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvVThhKCkubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW5jb2RlcyB0aGUgdmFsdWUgYXMgYSBVaW50OEFycmF5IGFzIHBlciB0aGUgU0NBTEUgc3BlY2lmaWNhdGlvbnNcbiAgICAgKi9cbiAgICB0b1U4YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmluZGV4ID09PSAxKSB7XG4gICAgICAgICAgICAvLyBkb24ndCBhZGQgdGhlIGxlbmd0aCwganVzdCB0aGUgZGF0YVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMudmFsdWUudG9VOGEodHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihkYXRhLmxlbmd0aCwgMzIpO1xuICAgICAgICAgICAgY29uc3QgdThhID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoICsgMSk7XG4gICAgICAgICAgICB1OGEuc2V0KFtsZW5ndGggKyAxXSwgMCk7XG4gICAgICAgICAgICB1OGEuc2V0KGRhdGEuc3ViYXJyYXkoMCwgbGVuZ3RoKSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gdThhO1xuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSB3ZSBzaW1wbHkgaGF2ZSBhIGhhc2hcbiAgICAgICAgY29uc3QgdThhID0gbmV3IFVpbnQ4QXJyYXkoMzMpO1xuICAgICAgICB1OGEuc2V0KFt0aGlzLmluZGV4ICsgMzJdLCAwKTtcbiAgICAgICAgdThhLnNldCh0aGlzLnZhbHVlLnRvVThhKCksIDEpO1xuICAgICAgICByZXR1cm4gdThhO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVzIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzLWNvZGVjJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGdldFNpTmFtZSB9IGZyb20gJy4uL21ldGFkYXRhL3V0aWwvaW5kZXguanMnO1xuaW1wb3J0IHsgdW53cmFwU3RvcmFnZVR5cGUgfSBmcm9tICcuLi91dGlsL2luZGV4LmpzJztcbmNvbnN0IEhBU0hFUl9NQVAgPSB7XG4gICAgLy8gb3BhcXVlXG4gICAgQmxha2UyXzEyODogWzE2LCBmYWxzZV0sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgQmxha2UyXzEyOENvbmNhdDogWzE2LCB0cnVlXSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICBCbGFrZTJfMjU2OiBbMzIsIGZhbHNlXSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICBJZGVudGl0eTogWzAsIHRydWVdLFxuICAgIFR3b3gxMjg6IFsxNiwgZmFsc2VdLFxuICAgIFR3b3gyNTY6IFszMiwgZmFsc2VdLFxuICAgIFR3b3g2NENvbmNhdDogWzgsIHRydWVdXG59O1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZGVjb2RlU3RvcmFnZUtleSh2YWx1ZSkge1xuICAgIGlmIChpc1U4YSh2YWx1ZSkgfHwgIXZhbHVlIHx8IGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvLyBsZXQgQnl0ZXMgaGFuZGxlIHRoZXNlIGlucHV0c1xuICAgICAgICByZXR1cm4geyBrZXk6IHZhbHVlIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RvcmFnZUtleSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiB2YWx1ZSxcbiAgICAgICAgICAgIG1ldGhvZDogdmFsdWUubWV0aG9kLFxuICAgICAgICAgICAgc2VjdGlvbjogdmFsdWUuc2VjdGlvblxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiB2YWx1ZSgpLFxuICAgICAgICAgICAgbWV0aG9kOiB2YWx1ZS5tZXRob2QsXG4gICAgICAgICAgICBzZWN0aW9uOiB2YWx1ZS5zZWN0aW9uXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IFtmbiwgYXJncyA9IFtdXSA9IHZhbHVlO1xuICAgICAgICBpZiAoIWlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGZ1bmN0aW9uIGlucHV0IGZvciBrZXkgY29uc3RydWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZuLm1ldGEgJiYgZm4ubWV0YS50eXBlLmlzTWFwKSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSBmbi5tZXRhLnR5cGUuYXNNYXA7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggIT09IG1hcC5oYXNoZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYW4gYXJyYXkgb2YgJHttYXAuaGFzaGVycy5sZW5ndGh9IHZhbHVlcyBhcyBwYXJhbXMgdG8gYSBNYXAgcXVlcnlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBmbiguLi5hcmdzKSxcbiAgICAgICAgICAgIG1ldGhvZDogZm4ubWV0aG9kLFxuICAgICAgICAgICAgc2VjdGlvbjogZm4uc2VjdGlvblxuICAgICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb252ZXJ0IGlucHV0ICR7dmFsdWV9IHRvIFN0b3JhZ2VLZXlgKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUhhc2hlcnMocmVnaXN0cnksIHZhbHVlLCBoYXNoZXJzKSB7XG4gICAgLy8gdGhlIHN0b3JhZ2UgZW50cnkgaXMgeHhoYXNoQXNVOGEocHJlZml4LCAxMjgpICsgeHhoYXNoQXNVOGEobWV0aG9kLCAxMjgpLCAyNTYgYml0cyB0b3RhbFxuICAgIGxldCBvZmZzZXQgPSAzMjtcbiAgICBjb25zdCBjb3VudCA9IGhhc2hlcnMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IFtoYXNoZXIsIHR5cGVdID0gaGFzaGVyc1tpXTtcbiAgICAgICAgY29uc3QgW2hhc2hMZW4sIGNhbkRlY29kZV0gPSBIQVNIRVJfTUFQW2hhc2hlci50eXBlXTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGNhbkRlY29kZVxuICAgICAgICAgICAgPyByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKGdldFNpTmFtZShyZWdpc3RyeS5sb29rdXAsIHR5cGUpLCBbdmFsdWUuc3ViYXJyYXkob2Zmc2V0ICsgaGFzaExlbildKVxuICAgICAgICAgICAgOiByZWdpc3RyeS5jcmVhdGVUeXBlVW5zYWZlKCdSYXcnLCBbdmFsdWUuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBoYXNoTGVuKV0pO1xuICAgICAgICBvZmZzZXQgKz0gaGFzaExlbiArIChjYW5EZWNvZGUgPyBkZWNvZGVkLmVuY29kZWRMZW5ndGggOiAwKTtcbiAgICAgICAgcmVzdWx0W2ldID0gZGVjb2RlZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGRlY29kZUFyZ3NGcm9tTWV0YShyZWdpc3RyeSwgdmFsdWUsIG1ldGEpIHtcbiAgICBpZiAoIW1ldGEgfHwgIW1ldGEudHlwZS5pc01hcCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHsgaGFzaGVycywga2V5IH0gPSBtZXRhLnR5cGUuYXNNYXA7XG4gICAgY29uc3Qga2V5cyA9IGhhc2hlcnMubGVuZ3RoID09PSAxXG4gICAgICAgID8gW2tleV1cbiAgICAgICAgOiByZWdpc3RyeS5sb29rdXAuZ2V0U2lUeXBlKGtleSkuZGVmLmFzVHVwbGU7XG4gICAgcmV0dXJuIGRlY29kZUhhc2hlcnMocmVnaXN0cnksIHZhbHVlLCBoYXNoZXJzLm1hcCgoaCwgaSkgPT4gW2gsIGtleXNbaV1dKSk7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBnZXRNZXRhKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RvcmFnZUtleSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWV0YTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1ldGE7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IFtmbl0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZuLm1ldGE7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBnZXRUeXBlKHJlZ2lzdHJ5LCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0b3JhZ2VLZXkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm91dHB1dFR5cGU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bndyYXBTdG9yYWdlVHlwZShyZWdpc3RyeSwgdmFsdWUubWV0YS50eXBlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgW2ZuXSA9IHZhbHVlO1xuICAgICAgICBpZiAoZm4ubWV0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHVud3JhcFN0b3JhZ2VUeXBlKHJlZ2lzdHJ5LCBmbi5tZXRhLnR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmUgbm8gdHlwZSBzZXQsIGRlZmF1bHQgdG8gUmF3XG4gICAgcmV0dXJuICdSYXcnO1xufVxuLyoqXG4gKiBAbmFtZSBTdG9yYWdlS2V5XG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBzdG9yYWdlIGtleSAodHlwaWNhbGx5IGhhc2hlZCkgaW4gdGhlIHN5c3RlbS4gSXQgY2FuIGJlXG4gKiBjb25zdHJ1Y3RlZCBieSBwYXNzaW5nIGluIGEgcmF3IGtleSBvciBhIFN0b3JhZ2VFbnRyeSB3aXRoIChvcHRpb25hbCkgYXJndW1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgU3RvcmFnZUtleSBleHRlbmRzIEJ5dGVzIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgLy8gQHRzLWlnbm9yZSBUaGlzIGlzIGFzc2lnbmVkIHZpYSB0aGlzLmRlY29kZUFyZ3NGcm9tTWV0YSgpXG4gICAgX19pbnRlcm5hbF9fYXJncztcbiAgICBfX2ludGVybmFsX19tZXRhO1xuICAgIF9faW50ZXJuYWxfX291dHB1dFR5cGU7XG4gICAgX19pbnRlcm5hbF9fbWV0aG9kO1xuICAgIF9faW50ZXJuYWxfX3NlY3Rpb247XG4gICAgY29uc3RydWN0b3IocmVnaXN0cnksIHZhbHVlLCBvdmVycmlkZSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCBtZXRob2QsIHNlY3Rpb24gfSA9IGRlY29kZVN0b3JhZ2VLZXkodmFsdWUpO1xuICAgICAgICBzdXBlcihyZWdpc3RyeSwga2V5KTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19vdXRwdXRUeXBlID0gZ2V0VHlwZShyZWdpc3RyeSwgdmFsdWUpO1xuICAgICAgICAvLyBkZWNvZGUgdGhlIGFyZ3MgKGFzIGFwcGxpY2FibGUgYmFzZWQgb24gdGhlIGtleSBhbmQgdGhlIGhhc2hlcnMsIGFmdGVyIGFsbCBpbml0KVxuICAgICAgICB0aGlzLnNldE1ldGEoZ2V0TWV0YSh2YWx1ZSksIG92ZXJyaWRlLnNlY3Rpb24gfHwgc2VjdGlvbiwgb3ZlcnJpZGUubWV0aG9kIHx8IG1ldGhvZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm4gdGhlIGRlY29kZWQgYXJndW1lbnRzIChhcHBsaWNhYmxlIHRvIG1hcCB3aXRoIGRlY29kYWJsZSB2YWx1ZXMpXG4gICAgICovXG4gICAgZ2V0IGFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2FyZ3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbWV0YWRhdGEgb3IgYHVuZGVmaW5lZGAgd2hlbiBub3QgYXZhaWxhYmxlXG4gICAgICovXG4gICAgZ2V0IG1ldGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX21ldGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUga2V5IG1ldGhvZCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vdCBzcGVjaWZpZWRcbiAgICAgKi9cbiAgICBnZXQgbWV0aG9kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX19tZXRob2Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgb3V0cHV0IHR5cGVcbiAgICAgKi9cbiAgICBnZXQgb3V0cHV0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fb3V0cHV0VHlwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBrZXkgc2VjdGlvbiBvciBgdW5kZWZpbmVkYCB3aGVuIG5vdCBzcGVjaWZpZWRcbiAgICAgKi9cbiAgICBnZXQgc2VjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fc2VjdGlvbjtcbiAgICB9XG4gICAgaXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkuc2VjdGlvbiA9PT0gdGhpcy5zZWN0aW9uICYmIGtleS5tZXRob2QgPT09IHRoaXMubWV0aG9kO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWV0YSBmb3IgdGhpcyBrZXlcbiAgICAgKi9cbiAgICBzZXRNZXRhKG1ldGEsIHNlY3Rpb24sIG1ldGhvZCkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX21ldGEgPSBtZXRhO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX21ldGhvZCA9IG1ldGhvZCB8fCB0aGlzLl9faW50ZXJuYWxfX21ldGhvZDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19zZWN0aW9uID0gc2VjdGlvbiB8fCB0aGlzLl9faW50ZXJuYWxfX3NlY3Rpb247XG4gICAgICAgIGlmIChtZXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX291dHB1dFR5cGUgPSB1bndyYXBTdG9yYWdlVHlwZSh0aGlzLnJlZ2lzdHJ5LCBtZXRhLnR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2FyZ3MgPSBkZWNvZGVBcmdzRnJvbU1ldGEodGhpcy5yZWdpc3RyeSwgdGhpcy50b1U4YSh0cnVlKSwgbWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gaWdub3JlLi4uXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBIdW1hbiByZXByZXNlbnRhdGlvbiBmb3IgdGhpcyB0eXBlXG4gICAgICovXG4gICAgdG9IdW1hbihfaXNFeHRlbmRlZCwgZGlzYWJsZUFzY2lpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2FyZ3MubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuX19pbnRlcm5hbF9fYXJncy5tYXAoKGEpID0+IGEudG9IdW1hbih1bmRlZmluZWQsIGRpc2FibGVBc2NpaSkpXG4gICAgICAgICAgICA6IHN1cGVyLnRvSHVtYW4odW5kZWZpbmVkLCBkaXNhYmxlQXNjaWkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgcmF3IHR5cGUgZm9yIHRoaXNcbiAgICAgKi9cbiAgICB0b1Jhd1R5cGUoKSB7XG4gICAgICAgIHJldHVybiAnU3RvcmFnZUtleSc7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBAc3VtbWFyeSBUeXBlIGRlZmluaXRpb25zIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHN5c3RlbVxuICovXG5leHBvcnQgeyBCaXRWZWMsIEJvb2wsIGJvb2wsIEJ5dGVzLCBGMzIsIGYzMiwgRjY0LCBmNjQsIEk4LCBpOCwgSTE2LCBpMTYsIEkzMiwgaTMyLCBJNjQsIGk2NCwgSTEyOCwgaTEyOCwgSTI1NiwgaTI1NiwgSVNpemUsIGlzaXplLCBOdWxsLCBPcHRpb25Cb29sLCBUZXh0LCBUeXBlLCBVOCwgdTgsIFUxNiwgdTE2LCBVMzIsIHUzMiwgVTY0LCB1NjQsIFUxMjgsIHUxMjgsIFUyNTYsIHUyNTYsIFVTaXplLCB1c2l6ZSB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy1jb2RlYyc7XG5leHBvcnQgeyBEYXRhIH0gZnJvbSAnLi9EYXRhLmpzJztcbmV4cG9ydCB7IFN0b3JhZ2VLZXkgfSBmcm9tICcuL1N0b3JhZ2VLZXkuanMnO1xuIiwiaW1wb3J0IHsgZ2V0U2lOYW1lIH0gZnJvbSAnLi4vbWV0YWRhdGEvdXRpbC9pbmRleC5qcyc7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwU3RvcmFnZVNpKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZS5pc1BsYWluXG4gICAgICAgID8gdHlwZS5hc1BsYWluXG4gICAgICAgIDogdHlwZS5hc01hcC52YWx1ZTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBTdG9yYWdlVHlwZShyZWdpc3RyeSwgdHlwZSwgaXNPcHRpb25hbCkge1xuICAgIGNvbnN0IG91dHB1dFR5cGUgPSBnZXRTaU5hbWUocmVnaXN0cnkubG9va3VwLCB1bndyYXBTdG9yYWdlU2kodHlwZSkpO1xuICAgIHJldHVybiBpc09wdGlvbmFsXG4gICAgICAgID8gYE9wdGlvbjwke291dHB1dFR5cGV9PmBcbiAgICAgICAgOiBvdXRwdXRUeXBlO1xufVxuIiwiaW1wb3J0IHsgc3NoYXNoIH0gZnJvbSAnLi9zc2hhc2guanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQWRkcmVzc0NoZWNrc3VtKGRlY29kZWQpIHtcbiAgICBjb25zdCBzczU4TGVuZ3RoID0gKGRlY29kZWRbMF0gJiA2NCkgPyAyIDogMTtcbiAgICBjb25zdCBzczU4RGVjb2RlZCA9IHNzNThMZW5ndGggPT09IDFcbiAgICAgICAgPyBkZWNvZGVkWzBdXG4gICAgICAgIDogKChkZWNvZGVkWzBdICYgNjMpIDw8IDIpIHwgKGRlY29kZWRbMV0gPj4gNikgfCAoKGRlY29kZWRbMV0gJiA2MykgPDwgOCk7XG4gICAgLy8gMzIvMzMgYnl0ZXMgcHVibGljICsgMiBieXRlcyBjaGVja3N1bSArIHByZWZpeFxuICAgIGNvbnN0IGlzUHVibGljS2V5ID0gWzM0ICsgc3M1OExlbmd0aCwgMzUgKyBzczU4TGVuZ3RoXS5pbmNsdWRlcyhkZWNvZGVkLmxlbmd0aCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZGVjb2RlZC5sZW5ndGggLSAoaXNQdWJsaWNLZXkgPyAyIDogMSk7XG4gICAgLy8gY2FsY3VsYXRlIHRoZSBoYXNoIGFuZCBkbyB0aGUgY2hlY2tzdW0gYnl0ZSBjaGVja3NcbiAgICBjb25zdCBoYXNoID0gc3NoYXNoKGRlY29kZWQuc3ViYXJyYXkoMCwgbGVuZ3RoKSk7XG4gICAgY29uc3QgaXNWYWxpZCA9IChkZWNvZGVkWzBdICYgMTI4KSA9PT0gMCAmJiAhWzQ2LCA0N10uaW5jbHVkZXMoZGVjb2RlZFswXSkgJiYgKGlzUHVibGljS2V5XG4gICAgICAgID8gZGVjb2RlZFtkZWNvZGVkLmxlbmd0aCAtIDJdID09PSBoYXNoWzBdICYmIGRlY29kZWRbZGVjb2RlZC5sZW5ndGggLSAxXSA9PT0gaGFzaFsxXVxuICAgICAgICA6IGRlY29kZWRbZGVjb2RlZC5sZW5ndGggLSAxXSA9PT0gaGFzaFswXSk7XG4gICAgcmV0dXJuIFtpc1ZhbGlkLCBsZW5ndGgsIHNzNThMZW5ndGgsIHNzNThEZWNvZGVkXTtcbn1cbiIsImltcG9ydCB7IGlzSGV4LCBpc1U4YSwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBiYXNlNThEZWNvZGUgfSBmcm9tICcuLi9iYXNlNTgvaW5kZXguanMnO1xuaW1wb3J0IHsgY2hlY2tBZGRyZXNzQ2hlY2tzdW0gfSBmcm9tICcuL2NoZWNrc3VtLmpzJztcbmltcG9ydCB7IGRlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQWRkcmVzcyhlbmNvZGVkLCBpZ25vcmVDaGVja3N1bSwgc3M1OEZvcm1hdCA9IC0xKSB7XG4gICAgaWYgKCFlbmNvZGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbXB0eSBhZGRyZXNzIHBhc3NlZCcpO1xuICAgIH1cbiAgICBpZiAoaXNVOGEoZW5jb2RlZCkgfHwgaXNIZXgoZW5jb2RlZCkpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvVThhKGVuY29kZWQpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gYmFzZTU4RGVjb2RlKGVuY29kZWQpO1xuICAgICAgICBpZiAoIWRlZmF1bHRzLmFsbG93ZWRFbmNvZGVkTGVuZ3Rocy5pbmNsdWRlcyhkZWNvZGVkLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZWNvZGVkIGFkZHJlc3MgbGVuZ3RoJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2lzVmFsaWQsIGVuZFBvcywgc3M1OExlbmd0aCwgc3M1OERlY29kZWRdID0gY2hlY2tBZGRyZXNzQ2hlY2tzdW0oZGVjb2RlZCk7XG4gICAgICAgIGlmICghaXNWYWxpZCAmJiAhaWdub3JlQ2hlY2tzdW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZWNvZGVkIGFkZHJlc3MgY2hlY2tzdW0nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzczU4Rm9ybWF0ICE9PSAtMSAmJiBzczU4Rm9ybWF0ICE9PSBzczU4RGVjb2RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBzczU4Rm9ybWF0ICR7c3M1OEZvcm1hdH0sIHJlY2VpdmVkICR7c3M1OERlY29kZWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZWQuc2xpY2Uoc3M1OExlbmd0aCwgZW5kUG9zKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVjb2RpbmcgJHtlbmNvZGVkfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGF2YWlsYWJsZU5ldHdvcmtzIH0gZnJvbSAnLi4vbmV0d29ya3MuanMnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIGFsbG93ZWREZWNvZGVkTGVuZ3RoczogWzEsIDIsIDQsIDgsIDMyLCAzM10sXG4gICAgLy8gcHVibGljS2V5IGhhcyBwcmVmaXggKyAyIGNoZWNrc3VtIGJ5dGVzLCBzaG9ydCBvbmx5IHByZWZpeCArIDEgY2hlY2tzdW0gYnl0ZVxuICAgIGFsbG93ZWRFbmNvZGVkTGVuZ3RoczogWzMsIDQsIDYsIDEwLCAzNSwgMzYsIDM3LCAzOF0sXG4gICAgYWxsb3dlZFByZWZpeDogYXZhaWxhYmxlTmV0d29ya3MubWFwKCh7IHByZWZpeCB9KSA9PiBwcmVmaXgpLFxuICAgIHByZWZpeDogNDJcbn07XG4iLCJpbXBvcnQgeyB1OGFDb25jYXQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBiYXNlNThFbmNvZGUgfSBmcm9tICcuLi9iYXNlNTgvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJy4vZGVjb2RlLmpzJztcbmltcG9ydCB7IGRlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy5qcyc7XG5pbXBvcnQgeyBzc2hhc2ggfSBmcm9tICcuL3NzaGFzaC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlQWRkcmVzcyhrZXksIHNzNThGb3JtYXQgPSBkZWZhdWx0cy5wcmVmaXgpIHtcbiAgICAvLyBkZWNvZGUgaXQsIHRoaXMgbWVhbnMgd2UgY2FuIHJlLWVuY29kZSBhbiBhZGRyZXNzXG4gICAgY29uc3QgdThhID0gZGVjb2RlQWRkcmVzcyhrZXkpO1xuICAgIGlmICgoc3M1OEZvcm1hdCA8IDApIHx8IChzczU4Rm9ybWF0ID4gMTYzODMpIHx8IFs0NiwgNDddLmluY2x1ZGVzKHNzNThGb3JtYXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT3V0IG9mIHJhbmdlIHNzNThGb3JtYXQgc3BlY2lmaWVkJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFkZWZhdWx0cy5hbGxvd2VkRGVjb2RlZExlbmd0aHMuaW5jbHVkZXModThhLmxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHZhbGlkIGtleSB0byBjb252ZXJ0LCB3aXRoIGxlbmd0aCAke2RlZmF1bHRzLmFsbG93ZWREZWNvZGVkTGVuZ3Rocy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dCA9IHU4YUNvbmNhdChzczU4Rm9ybWF0IDwgNjRcbiAgICAgICAgPyBbc3M1OEZvcm1hdF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICAoKHNzNThGb3JtYXQgJiAyNTIpID4+IDIpIHwgNjQsXG4gICAgICAgICAgICAoc3M1OEZvcm1hdCA+PiA4KSB8ICgoc3M1OEZvcm1hdCAmIDMpIDw8IDYpXG4gICAgICAgIF0sIHU4YSk7XG4gICAgcmV0dXJuIGJhc2U1OEVuY29kZSh1OGFDb25jYXQoaW5wdXQsIHNzaGFzaChpbnB1dCkuc3ViYXJyYXkoMCwgWzMyLCAzM10uaW5jbHVkZXModThhLmxlbmd0aCkgPyAyIDogMSkpKTtcbn1cbiIsImltcG9ydCB7IHZhbGlkYXRlQWRkcmVzcyB9IGZyb20gJy4vdmFsaWRhdGUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWRkcmVzcyhhZGRyZXNzLCBpZ25vcmVDaGVja3N1bSwgc3M1OEZvcm1hdCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzcywgaWdub3JlQ2hlY2tzdW0sIHNzNThGb3JtYXQpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBzdHJpbmdUb1U4YSwgdThhQ29uY2F0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgYmxha2UyQXNVOGEgfSBmcm9tICcuLi9ibGFrZTIvYXNVOGEuanMnO1xuY29uc3QgU1M1OF9QUkVGSVggPSBzdHJpbmdUb1U4YSgnU1M1OFBSRScpO1xuZXhwb3J0IGZ1bmN0aW9uIHNzaGFzaChrZXkpIHtcbiAgICByZXR1cm4gYmxha2UyQXNVOGEodThhQ29uY2F0KFNTNThfUFJFRklYLCBrZXkpLCA1MTIpO1xufVxuIiwiaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJy4vZGVjb2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3MoZW5jb2RlZCwgaWdub3JlQ2hlY2tzdW0sIHNzNThGb3JtYXQpIHtcbiAgICByZXR1cm4gISFkZWNvZGVBZGRyZXNzKGVuY29kZWQsIGlnbm9yZUNoZWNrc3VtLCBzczU4Rm9ybWF0KTtcbn1cbiIsImltcG9ydCB7IHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlY29kZSh7IGNvZGVyLCBpcGZzIH0sIHZhbGlkYXRlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgaXBmc0NvbXBhdCkgPT4ge1xuICAgICAgICB2YWxpZGF0ZSh2YWx1ZSwgaXBmc0NvbXBhdCk7XG4gICAgICAgIHJldHVybiBjb2Rlci5kZWNvZGUoaXBmcyAmJiBpcGZzQ29tcGF0XG4gICAgICAgICAgICA/IHZhbHVlLnN1YnN0cmluZygxKVxuICAgICAgICAgICAgOiB2YWx1ZSk7XG4gICAgfTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbmNvZGUoeyBjb2RlciwgaXBmcyB9KSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgaXBmc0NvbXBhdCkgPT4ge1xuICAgICAgICBjb25zdCBvdXQgPSBjb2Rlci5lbmNvZGUodThhVG9VOGEodmFsdWUpKTtcbiAgICAgICAgcmV0dXJuIGlwZnMgJiYgaXBmc0NvbXBhdFxuICAgICAgICAgICAgPyBgJHtpcGZzfSR7b3V0fWBcbiAgICAgICAgICAgIDogb3V0O1xuICAgIH07XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSXModmFsaWRhdGUpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBpcGZzQ29tcGF0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGUodmFsdWUsIGlwZnNDb21wYXQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmFsaWRhdGUoeyBjaGFycywgaXBmcywgdHlwZSwgd2l0aFBhZGRpbmcgfSkge1xuICAgIHJldHVybiAodmFsdWUsIGlwZnNDb21wYXQpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHt0eXBlfSBzdHJpbmcgaW5wdXRgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpcGZzICYmIGlwZnNDb21wYXQgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoaXBmcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgaXBmcy1jb21wYXRpYmxlICR7dHlwZX0gdG8gc3RhcnQgd2l0aCAnJHtpcGZzfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gKGlwZnNDb21wYXQgPyAxIDogMCksIGNvdW50ID0gdmFsdWUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNoYXJzLmluY2x1ZGVzKHZhbHVlW2ldKSkge1xuICAgICAgICAgICAgICAgIC8vIGFsbCBvaywgY2hhcmFjdGVyIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh3aXRoUGFkZGluZyAmJiB2YWx1ZVtpXSA9PT0gJz0nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGNvdW50IC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBsYXN0IGNoYXJhY3RlciwgZXZlcnl0aGluZyBva1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVtpICsgMV0gPT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IG9uZSBpcyBhbHNvIHBhZGRpbmcsIHNlcXVlbmNlIG9rXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHt0eXBlfSBwYWRkaW5nIHNlcXVlbmNlIFwiJHt2YWx1ZVtpXX0ke3ZhbHVlW2kgKyAxXX1cIiBhdCBpbmRleCAke2l9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkICR7dHlwZX0gY2hhcmFjdGVyIFwiJHt2YWx1ZVtpXX1cIiAoMHgke3ZhbHVlLmNoYXJDb2RlQXQoaSkudG9TdHJpbmcoMTYpfSkgYXQgaW5kZXggJHtpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBiYXNlNTggfSBmcm9tICdAc2N1cmUvYmFzZSc7XG5pbXBvcnQgeyBjcmVhdGVEZWNvZGUsIGNyZWF0ZUVuY29kZSwgY3JlYXRlSXMsIGNyZWF0ZVZhbGlkYXRlIH0gZnJvbSAnLi4vYmFzZTMyL2hlbHBlcnMuanMnO1xuY29uc3QgY29uZmlnID0ge1xuICAgIGNoYXJzOiAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eicsXG4gICAgY29kZXI6IGJhc2U1OCxcbiAgICBpcGZzOiAneicsXG4gICAgdHlwZTogJ2Jhc2U1OCdcbn07XG4vKipcbiAqIEBuYW1lIGJhc2U1OFZhbGlkYXRlXG4gKiBAc3VtbWFyeSBWYWxpZGF0ZXMgYSBiYXNlNTggdmFsdWUuXG4gKiBAZGVzY3JpcHRpb25cbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSBzdXBwbGllZCB2YWx1ZSBpcyB2YWxpZCBiYXNlNTgsIHRocm93aW5nIGV4Y2VwdGlvbnMgaWYgbm90XG4gKi9cbmV4cG9ydCBjb25zdCBiYXNlNThWYWxpZGF0ZSA9IC8qI19fUFVSRV9fKi8gY3JlYXRlVmFsaWRhdGUoY29uZmlnKTtcbi8qKlxuICogQG5hbWUgYmFzZTU4RGVjb2RlXG4gKiBAc3VtbWFyeSBEZWNvZGVzIGEgYmFzZTU4IHZhbHVlLlxuICogQGRlc2NyaXB0aW9uXG4gKiBGcm9tIHRoZSBwcm92aWRlZCBpbnB1dCwgZGVjb2RlIHRoZSBiYXNlNTggYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGFuIGBVaW50OEFycmF5YC5cbiAqL1xuZXhwb3J0IGNvbnN0IGJhc2U1OERlY29kZSA9IC8qI19fUFVSRV9fKi8gY3JlYXRlRGVjb2RlKGNvbmZpZywgYmFzZTU4VmFsaWRhdGUpO1xuLyoqXG4qIEBuYW1lIGJhc2U1OEVuY29kZVxuKiBAc3VtbWFyeSBDcmVhdGVzIGEgYmFzZTU4IHZhbHVlLlxuKiBAZGVzY3JpcHRpb25cbiogRnJvbSB0aGUgcHJvdmlkZWQgaW5wdXQsIGNyZWF0ZSB0aGUgYmFzZTU4IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHN0cmluZy5cbiovXG5leHBvcnQgY29uc3QgYmFzZTU4RW5jb2RlID0gLyojX19QVVJFX18qLyBjcmVhdGVFbmNvZGUoY29uZmlnKTtcbi8qKlxuKiBAbmFtZSBpc0Jhc2U1OFxuKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSBpbnB1dCBpcyBpbiBiYXNlNTgsIHJldHVybmluZyB0cnVlL2ZhbHNlXG4qL1xuZXhwb3J0IGNvbnN0IGlzQmFzZTU4ID0gLyojX19QVVJFX18qLyBjcmVhdGVJcyhiYXNlNThWYWxpZGF0ZSk7XG4iLCJpbXBvcnQgeyBibGFrZTJiIGFzIGJsYWtlMmJKcyB9IGZyb20gJ0Bub2JsZS9oYXNoZXMvYmxha2UyYic7XG5pbXBvcnQgeyBoYXNCaWdJbnQsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgYmxha2UyYiwgaXNSZWFkeSB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWNyeXB0byc7XG5pbXBvcnQgeyBjcmVhdGVBc0hleCB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuLyoqXG4gKiBAbmFtZSBibGFrZTJBc1U4YVxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGJsYWtlMmIgdThhIGZyb20gdGhlIGlucHV0LlxuICogQGRlc2NyaXB0aW9uXG4gKiBGcm9tIGEgYFVpbnQ4QXJyYXlgIGlucHV0LCBjcmVhdGUgdGhlIGJsYWtlMmIgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgdThhIHdpdGggdGhlIHNwZWNpZmllZCBgYml0TGVuZ3RoYC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgYmxha2UyQXNVOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuICpcbiAqIGJsYWtlMkFzVThhKCdhYmMnKTsgLy8gPT4gWzB4YmEsIDB4ODAsIDB4YTUsIDB4M2YsIDB4OTgsIDB4MWMsIDB4NGQsIDB4MGRdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJsYWtlMkFzVThhKGRhdGEsIGJpdExlbmd0aCA9IDI1Niwga2V5LCBvbmx5SnMpIHtcbiAgICBjb25zdCBieXRlTGVuZ3RoID0gTWF0aC5jZWlsKGJpdExlbmd0aCAvIDgpO1xuICAgIGNvbnN0IHU4YSA9IHU4YVRvVThhKGRhdGEpO1xuICAgIHJldHVybiAhaGFzQmlnSW50IHx8ICghb25seUpzICYmIGlzUmVhZHkoKSlcbiAgICAgICAgPyBibGFrZTJiKHU4YSwgdThhVG9VOGEoa2V5KSwgYnl0ZUxlbmd0aClcbiAgICAgICAgOiBrZXlcbiAgICAgICAgICAgID8gYmxha2UyYkpzKHU4YSwgeyBka0xlbjogYnl0ZUxlbmd0aCwga2V5IH0pXG4gICAgICAgICAgICA6IGJsYWtlMmJKcyh1OGEsIHsgZGtMZW46IGJ5dGVMZW5ndGggfSk7XG59XG4vKipcbiAqIEBuYW1lIGJsYWtlMkFzSGV4XG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGJsYWtlMmIgaGV4IGZyb20gdGhlIGlucHV0LlxuICovXG5leHBvcnQgY29uc3QgYmxha2UyQXNIZXggPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUFzSGV4KGJsYWtlMkFzVThhKTtcbiIsImV4cG9ydCBjb25zdCBCTl9CRV9PUFRTID0geyBpc0xlOiBmYWxzZSB9O1xuZXhwb3J0IGNvbnN0IEJOX0xFX09QVFMgPSB7IGlzTGU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBCTl9MRV8xNl9PUFRTID0geyBiaXRMZW5ndGg6IDE2LCBpc0xlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgQk5fQkVfMzJfT1BUUyA9IHsgYml0TGVuZ3RoOiAzMiwgaXNMZTogZmFsc2UgfTtcbmV4cG9ydCBjb25zdCBCTl9MRV8zMl9PUFRTID0geyBiaXRMZW5ndGg6IDMyLCBpc0xlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgQk5fQkVfMjU2X09QVFMgPSB7IGJpdExlbmd0aDogMjU2LCBpc0xlOiBmYWxzZSB9O1xuZXhwb3J0IGNvbnN0IEJOX0xFXzI1Nl9PUFRTID0geyBiaXRMZW5ndGg6IDI1NiwgaXNMZTogdHJ1ZSB9O1xuZXhwb3J0IGNvbnN0IEJOX0xFXzUxMl9PUFRTID0geyBiaXRMZW5ndGg6IDUxMiwgaXNMZTogdHJ1ZSB9O1xuIiwiaW1wb3J0IHsgaXNSZWFkeSwgd2FpdFJlYWR5IH0gZnJvbSAnQHBvbGthZG90L3dhc20tY3J5cHRvJztcbmV4cG9ydCBjb25zdCBjcnlwdG9Jc1JlYWR5ID0gaXNSZWFkeTtcbmV4cG9ydCBmdW5jdGlvbiBjcnlwdG9XYWl0UmVhZHkoKSB7XG4gICAgcmV0dXJuIHdhaXRSZWFkeSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFpc1JlYWR5KCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGluaXRpYWxpemUgQHBvbGthZG90L3V0aWwtY3J5cHRvJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKTtcbn1cbiIsImltcG9ydCB7IHU4YVRvSGV4LCB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGtlY2Nha0FzVThhIH0gZnJvbSAnLi4va2VjY2FrL2luZGV4LmpzJztcbmltcG9ydCB7IHNlY3AyNTZrMUV4cGFuZCB9IGZyb20gJy4uL3NlY3AyNTZrMS9pbmRleC5qcyc7XG5mdW5jdGlvbiBnZXRIMTYwKHU4YSkge1xuICAgIGlmIChbMzMsIDY1XS5pbmNsdWRlcyh1OGEubGVuZ3RoKSkge1xuICAgICAgICB1OGEgPSBrZWNjYWtBc1U4YShzZWNwMjU2azFFeHBhbmQodThhKSk7XG4gICAgfVxuICAgIHJldHVybiB1OGEuc2xpY2UoLTIwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldGhlcmV1bUVuY29kZShhZGRyZXNzT3JQdWJsaWMpIHtcbiAgICBpZiAoIWFkZHJlc3NPclB1YmxpYykge1xuICAgICAgICByZXR1cm4gJzB4JztcbiAgICB9XG4gICAgY29uc3QgdThhQWRkcmVzcyA9IHU4YVRvVThhKGFkZHJlc3NPclB1YmxpYyk7XG4gICAgaWYgKCFbMjAsIDMyLCAzMywgNjVdLmluY2x1ZGVzKHU4YUFkZHJlc3MubGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWRkcmVzcyBvciBwdWJsaWNLZXkgcHJvdmlkZWQsIHJlY2VpdmVkICR7dThhQWRkcmVzcy5sZW5ndGh9IGJ5dGVzIGlucHV0YCk7XG4gICAgfVxuICAgIGNvbnN0IGFkZHJlc3MgPSB1OGFUb0hleChnZXRIMTYwKHU4YUFkZHJlc3MpLCAtMSwgZmFsc2UpO1xuICAgIGNvbnN0IGhhc2ggPSB1OGFUb0hleChrZWNjYWtBc1U4YShhZGRyZXNzKSwgLTEsIGZhbHNlKTtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0ke3BhcnNlSW50KGhhc2hbaV0sIDE2KSA+IDcgPyBhZGRyZXNzW2ldLnRvVXBwZXJDYXNlKCkgOiBhZGRyZXNzW2ldfWA7XG4gICAgfVxuICAgIHJldHVybiBgMHgke3Jlc3VsdH1gO1xufVxuIiwiaW1wb3J0IHsgaXNIZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBpc0V0aGVyZXVtQ2hlY2tzdW0gfSBmcm9tICcuL2lzQ2hlY2tzdW0uanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXRoZXJldW1BZGRyZXNzKGFkZHJlc3MpIHtcbiAgICBpZiAoIWFkZHJlc3MgfHwgYWRkcmVzcy5sZW5ndGggIT09IDQyIHx8ICFpc0hleChhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKC9eKDB4KT9bMC05YS1mXXs0MH0kLy50ZXN0KGFkZHJlc3MpIHx8IC9eKDB4KT9bMC05QS1GXXs0MH0kLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXNFdGhlcmV1bUNoZWNrc3VtKGFkZHJlc3MpO1xufVxuIiwiaW1wb3J0IHsgdThhVG9IZXggfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBrZWNjYWtBc1U4YSB9IGZyb20gJy4uL2tlY2Nhay9pbmRleC5qcyc7XG5mdW5jdGlvbiBpc0ludmFsaWRDaGFyKGNoYXIsIGJ5dGUpIHtcbiAgICByZXR1cm4gY2hhciAhPT0gKGJ5dGUgPiA3XG4gICAgICAgID8gY2hhci50b1VwcGVyQ2FzZSgpXG4gICAgICAgIDogY2hhci50b0xvd2VyQ2FzZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0V0aGVyZXVtQ2hlY2tzdW0oX2FkZHJlc3MpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gX2FkZHJlc3MucmVwbGFjZSgnMHgnLCAnJyk7XG4gICAgY29uc3QgaGFzaCA9IHU4YVRvSGV4KGtlY2Nha0FzVThhKGFkZHJlc3MudG9Mb3dlckNhc2UoKSksIC0xLCBmYWxzZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MDsgaSsrKSB7XG4gICAgICAgIGlmIChpc0ludmFsaWRDaGFyKGFkZHJlc3NbaV0sIHBhcnNlSW50KGhhc2hbaV0sIDE2KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsImltcG9ydCB7IGhhc0JpZ0ludCwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgaXNSZWFkeSB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWNyeXB0byc7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXNIZXgoZm4pIHtcbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHU4YVRvSGV4KGZuKC4uLmFyZ3MpKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCaXRIYXNoZXIoYml0TGVuZ3RoLCBmbikge1xuICAgIHJldHVybiAoZGF0YSwgb25seUpzKSA9PiBmbihkYXRhLCBiaXRMZW5ndGgsIG9ubHlKcyk7XG59XG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRHVhbEhhc2hlcih3YSwganMpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBiaXRMZW5ndGggPSAyNTYsIG9ubHlKcykgPT4ge1xuICAgICAgICBjb25zdCB1OGEgPSB1OGFUb1U4YSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiAhaGFzQmlnSW50IHx8ICghb25seUpzICYmIGlzUmVhZHkoKSlcbiAgICAgICAgICAgID8gd2FbYml0TGVuZ3RoXSh1OGEpXG4gICAgICAgICAgICA6IGpzW2JpdExlbmd0aF0odThhKTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsga2VjY2FrXzI1NiBhcyBrZWNjYWsyNTZKcywga2VjY2FrXzUxMiBhcyBrZWNjYWs1MTJKcyB9IGZyb20gJ0Bub2JsZS9oYXNoZXMvc2hhMyc7XG5pbXBvcnQgeyBrZWNjYWsyNTYsIGtlY2NhazUxMiB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWNyeXB0byc7XG5pbXBvcnQgeyBjcmVhdGVBc0hleCwgY3JlYXRlQml0SGFzaGVyLCBjcmVhdGVEdWFsSGFzaGVyIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG4vKipcbiAqIEBuYW1lIGtlY2Nha0FzVThhXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEga2VjY2FrIFVpbnQ4QXJyYXkgZnJvbSB0aGUgaW5wdXQuXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZyb20gZWl0aGVyIGEgYHN0cmluZ2Agb3IgYSBgQnVmZmVyYCBpbnB1dCwgY3JlYXRlIHRoZSBrZWNjYWsgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgYFVpbnQ4QXJyYXlgLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBrZWNjYWtBc1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG4gKlxuICoga2VjY2FrQXNVOGEoJzEyMycpOyAvLyA9PiBVaW50OEFycmF5XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGtlY2Nha0FzVThhID0gLyojX19QVVJFX18qLyBjcmVhdGVEdWFsSGFzaGVyKHsgMjU2OiBrZWNjYWsyNTYsIDUxMjoga2VjY2FrNTEyIH0sIHsgMjU2OiBrZWNjYWsyNTZKcywgNTEyOiBrZWNjYWs1MTJKcyB9KTtcbi8qKlxuICogQG5hbWUga2VjY2FrMjU2QXNVOGFcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEga2VjY2FrMjU2IFVpbnQ4QXJyYXkgZnJvbSB0aGUgaW5wdXQuXG4gKi9cbmV4cG9ydCBjb25zdCBrZWNjYWsyNTZBc1U4YSA9IC8qI19fUFVSRV9fKi8gY3JlYXRlQml0SGFzaGVyKDI1Niwga2VjY2FrQXNVOGEpO1xuLyoqXG4gKiBAbmFtZSBrZWNjYWs1MTJBc1U4YVxuICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBrZWNjYWs1MTIgVWludDhBcnJheSBmcm9tIHRoZSBpbnB1dC5cbiAqL1xuZXhwb3J0IGNvbnN0IGtlY2NhazUxMkFzVThhID0gLyojX19QVVJFX18qLyBjcmVhdGVCaXRIYXNoZXIoNTEyLCBrZWNjYWtBc1U4YSk7XG4vKipcbiAqIEBuYW1lIGtlY2Nha0FzSGV4XG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGtlY2NhayBoZXggc3RyaW5nIGZyb20gdGhlIGlucHV0LlxuICovXG5leHBvcnQgY29uc3Qga2VjY2FrQXNIZXggPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUFzSGV4KGtlY2Nha0FzVThhKTtcbiIsImltcG9ydCB7IHNlY3AyNTZrMSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvc2VjcDI1NmsxJztcbmltcG9ydCB7IGJuVG9VOGEsIGhhc0JpZ0ludCwgdThhQ29uY2F0IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgaXNSZWFkeSwgc2VjcDI1NmsxRXhwYW5kIGFzIHdhc20gfSBmcm9tICdAcG9sa2Fkb3Qvd2FzbS1jcnlwdG8nO1xuaW1wb3J0IHsgQk5fQkVfMjU2X09QVFMgfSBmcm9tICcuLi9ibi5qcyc7XG5leHBvcnQgZnVuY3Rpb24gc2VjcDI1NmsxRXhwYW5kKHB1YmxpY0tleSwgb25seUpzKSB7XG4gICAgaWYgKCFbMzMsIDY1XS5pbmNsdWRlcyhwdWJsaWNLZXkubGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHVibGljS2V5IHByb3ZpZGVkLCByZWNlaXZlZCAke3B1YmxpY0tleS5sZW5ndGh9IGJ5dGVzIGlucHV0YCk7XG4gICAgfVxuICAgIGlmIChwdWJsaWNLZXkubGVuZ3RoID09PSA2NSkge1xuICAgICAgICByZXR1cm4gcHVibGljS2V5LnN1YmFycmF5KDEpO1xuICAgIH1cbiAgICBpZiAoIWhhc0JpZ0ludCB8fCAoIW9ubHlKcyAmJiBpc1JlYWR5KCkpKSB7XG4gICAgICAgIHJldHVybiB3YXNtKHB1YmxpY0tleSkuc3ViYXJyYXkoMSk7XG4gICAgfVxuICAgIGNvbnN0IHsgcHgsIHB5IH0gPSBzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LmZyb21IZXgocHVibGljS2V5KTtcbiAgICByZXR1cm4gdThhQ29uY2F0KGJuVG9VOGEocHgsIEJOX0JFXzI1Nl9PUFRTKSwgYm5Ub1U4YShweSwgQk5fQkVfMjU2X09QVFMpKTtcbn1cbiIsImltcG9ydCB7IGhhc0JpZ0ludCwgdThhVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBpc1JlYWR5LCB0d294IH0gZnJvbSAnQHBvbGthZG90L3dhc20tY3J5cHRvJztcbmltcG9ydCB7IGNyZWF0ZUFzSGV4IH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyB4eGhhc2g2NCB9IGZyb20gJy4veHhoYXNoNjQuanMnO1xuLyoqXG4gKiBAbmFtZSB4eGhhc2hBc1U4YVxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHh4aGFzaDY0IHU4YSBmcm9tIHRoZSBpbnB1dC5cbiAqIEBkZXNjcmlwdGlvblxuICogRnJvbSBlaXRoZXIgYSBgc3RyaW5nYCwgYFVpbnQ4QXJyYXlgIG9yIGEgYEJ1ZmZlcmAgaW5wdXQsIGNyZWF0ZSB0aGUgeHhoYXNoNjQgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgYFVpbnQ4QXJyYXlgIHdpdGggdGhlIHNwZWNpZmllZCBgYml0TGVuZ3RoYC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgeHhoYXNoQXNVOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuICpcbiAqIHh4aGFzaEFzVThhKCdhYmMnKTsgLy8gPT4gMHg0NGJjMmNmNWFkNzcwOTk5XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHh4aGFzaEFzVThhKGRhdGEsIGJpdExlbmd0aCA9IDY0LCBvbmx5SnMpIHtcbiAgICBjb25zdCByb3VuZHMgPSBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gNjQpO1xuICAgIGNvbnN0IHU4YSA9IHU4YVRvVThhKGRhdGEpO1xuICAgIGlmICghaGFzQmlnSW50IHx8ICghb25seUpzICYmIGlzUmVhZHkoKSkpIHtcbiAgICAgICAgcmV0dXJuIHR3b3godThhLCByb3VuZHMpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShyb3VuZHMgKiA4KTtcbiAgICBmb3IgKGxldCBzZWVkID0gMDsgc2VlZCA8IHJvdW5kczsgc2VlZCsrKSB7XG4gICAgICAgIHJlc3VsdC5zZXQoeHhoYXNoNjQodThhLCBzZWVkKS5yZXZlcnNlKCksIHNlZWQgKiA4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQG5hbWUgeHhoYXNoQXNIZXhcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgeHhoYXNoNjQgaGV4IGZyb20gdGhlIGlucHV0LlxuICovXG5leHBvcnQgY29uc3QgeHhoYXNoQXNIZXggPSAvKiNfX1BVUkVfXyovIGNyZWF0ZUFzSGV4KHh4aGFzaEFzVThhKTtcbiIsImltcG9ydCB7IF8wbiwgXzFuIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgQmlnSW50IH0gZnJvbSAnQHBvbGthZG90L3gtYmlnaW50JztcbmNvbnN0IFA2NF8xID0gQmlnSW50KCcxMTQwMDcxNDc4NTA3NDY5NDc5MScpO1xuY29uc3QgUDY0XzIgPSBCaWdJbnQoJzE0MDI5NDY3MzY2ODk3MDE5NzI3Jyk7XG5jb25zdCBQNjRfMyA9IEJpZ0ludCgnMTYwOTU4NzkyOTM5MjgzOTE2MScpO1xuY29uc3QgUDY0XzQgPSBCaWdJbnQoJzk2NTAwMjkyNDIyODc4Mjg1NzknKTtcbmNvbnN0IFA2NF81ID0gQmlnSW50KCcyODcwMTc3NDUwMDEyNjAwMjYxJyk7XG5jb25zdCBVNjQgPSBCaWdJbnQoJzB4ZmZmZmZmZmZmZmZmZmZmZicpO1xuY29uc3QgXzduID0gQmlnSW50KDcpO1xuY29uc3QgXzExbiA9IEJpZ0ludCgxMSk7XG5jb25zdCBfMTJuID0gQmlnSW50KDEyKTtcbmNvbnN0IF8xNm4gPSBCaWdJbnQoMTYpO1xuY29uc3QgXzE4biA9IEJpZ0ludCgxOCk7XG5jb25zdCBfMjNuID0gQmlnSW50KDIzKTtcbmNvbnN0IF8yN24gPSBCaWdJbnQoMjcpO1xuY29uc3QgXzI5biA9IEJpZ0ludCgyOSk7XG5jb25zdCBfMzFuID0gQmlnSW50KDMxKTtcbmNvbnN0IF8zMm4gPSBCaWdJbnQoMzIpO1xuY29uc3QgXzMzbiA9IEJpZ0ludCgzMyk7XG5jb25zdCBfNjRuID0gQmlnSW50KDY0KTtcbmNvbnN0IF8yNTZuID0gQmlnSW50KDI1Nik7XG5mdW5jdGlvbiByb3RsKGEsIGIpIHtcbiAgICBjb25zdCBjID0gYSAmIFU2NDtcbiAgICByZXR1cm4gKChjIDw8IGIpIHwgKGMgPj4gKF82NG4gLSBiKSkpICYgVTY0O1xufVxuZnVuY3Rpb24gZnJvbVU4YSh1OGEsIHAsIGNvdW50KSB7XG4gICAgY29uc3QgYmlnaW50cyA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBvZmZzZXQgKz0gMikge1xuICAgICAgICBiaWdpbnRzW2ldID0gQmlnSW50KHU4YVtwICsgb2Zmc2V0XSB8ICh1OGFbcCArIDEgKyBvZmZzZXRdIDw8IDgpKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IF8wbjtcbiAgICBmb3IgKGxldCBpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICByZXN1bHQgPSAocmVzdWx0IDw8IF8xNm4pICsgYmlnaW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGluaXQoc2VlZCwgaW5wdXQpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgc2VlZCxcbiAgICAgICAgdThhOiBuZXcgVWludDhBcnJheSgzMiksXG4gICAgICAgIHU4YXNpemU6IDAsXG4gICAgICAgIHYxOiBzZWVkICsgUDY0XzEgKyBQNjRfMixcbiAgICAgICAgdjI6IHNlZWQgKyBQNjRfMixcbiAgICAgICAgdjM6IHNlZWQsXG4gICAgICAgIHY0OiBzZWVkIC0gUDY0XzFcbiAgICB9O1xuICAgIGlmIChpbnB1dC5sZW5ndGggPCAzMikge1xuICAgICAgICBzdGF0ZS51OGEuc2V0KGlucHV0KTtcbiAgICAgICAgc3RhdGUudThhc2l6ZSA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBsaW1pdCA9IGlucHV0Lmxlbmd0aCAtIDMyO1xuICAgIGxldCBwID0gMDtcbiAgICBpZiAobGltaXQgPj0gMCkge1xuICAgICAgICBjb25zdCBhZGp1c3RWID0gKHYpID0+IFA2NF8xICogcm90bCh2ICsgUDY0XzIgKiBmcm9tVThhKGlucHV0LCBwLCA0KSwgXzMxbik7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHN0YXRlLnYxID0gYWRqdXN0VihzdGF0ZS52MSk7XG4gICAgICAgICAgICBwICs9IDg7XG4gICAgICAgICAgICBzdGF0ZS52MiA9IGFkanVzdFYoc3RhdGUudjIpO1xuICAgICAgICAgICAgcCArPSA4O1xuICAgICAgICAgICAgc3RhdGUudjMgPSBhZGp1c3RWKHN0YXRlLnYzKTtcbiAgICAgICAgICAgIHAgKz0gODtcbiAgICAgICAgICAgIHN0YXRlLnY0ID0gYWRqdXN0VihzdGF0ZS52NCk7XG4gICAgICAgICAgICBwICs9IDg7XG4gICAgICAgIH0gd2hpbGUgKHAgPD0gbGltaXQpO1xuICAgIH1cbiAgICBpZiAocCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICBzdGF0ZS51OGEuc2V0KGlucHV0LnN1YmFycmF5KHAsIGlucHV0Lmxlbmd0aCkpO1xuICAgICAgICBzdGF0ZS51OGFzaXplID0gaW5wdXQubGVuZ3RoIC0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHh4aGFzaDY0KGlucHV0LCBpbml0U2VlZCkge1xuICAgIGNvbnN0IHsgc2VlZCwgdThhLCB1OGFzaXplLCB2MSwgdjIsIHYzLCB2NCB9ID0gaW5pdChCaWdJbnQoaW5pdFNlZWQpLCBpbnB1dCk7XG4gICAgbGV0IHAgPSAwO1xuICAgIGxldCBoNjQgPSBVNjQgJiAoQmlnSW50KGlucHV0Lmxlbmd0aCkgKyAoaW5wdXQubGVuZ3RoID49IDMyXG4gICAgICAgID8gKCgoKCgoKCgocm90bCh2MSwgXzFuKSArIHJvdGwodjIsIF83bikgKyByb3RsKHYzLCBfMTJuKSArIHJvdGwodjQsIF8xOG4pKSBeIChQNjRfMSAqIHJvdGwodjEgKiBQNjRfMiwgXzMxbikpKSAqIFA2NF8xICsgUDY0XzQpIF4gKFA2NF8xICogcm90bCh2MiAqIFA2NF8yLCBfMzFuKSkpICogUDY0XzEgKyBQNjRfNCkgXiAoUDY0XzEgKiByb3RsKHYzICogUDY0XzIsIF8zMW4pKSkgKiBQNjRfMSArIFA2NF80KSBeIChQNjRfMSAqIHJvdGwodjQgKiBQNjRfMiwgXzMxbikpKSAqIFA2NF8xICsgUDY0XzQpXG4gICAgICAgIDogKHNlZWQgKyBQNjRfNSkpKTtcbiAgICB3aGlsZSAocCA8PSAodThhc2l6ZSAtIDgpKSB7XG4gICAgICAgIGg2NCA9IFU2NCAmIChQNjRfNCArIFA2NF8xICogcm90bChoNjQgXiAoUDY0XzEgKiByb3RsKFA2NF8yICogZnJvbVU4YSh1OGEsIHAsIDQpLCBfMzFuKSksIF8yN24pKTtcbiAgICAgICAgcCArPSA4O1xuICAgIH1cbiAgICBpZiAoKHAgKyA0KSA8PSB1OGFzaXplKSB7XG4gICAgICAgIGg2NCA9IFU2NCAmIChQNjRfMyArIFA2NF8yICogcm90bChoNjQgXiAoUDY0XzEgKiBmcm9tVThhKHU4YSwgcCwgMikpLCBfMjNuKSk7XG4gICAgICAgIHAgKz0gNDtcbiAgICB9XG4gICAgd2hpbGUgKHAgPCB1OGFzaXplKSB7XG4gICAgICAgIGg2NCA9IFU2NCAmIChQNjRfMSAqIHJvdGwoaDY0IF4gKFA2NF81ICogQmlnSW50KHU4YVtwKytdKSksIF8xMW4pKTtcbiAgICB9XG4gICAgaDY0ID0gVTY0ICYgKFA2NF8yICogKGg2NCBeIChoNjQgPj4gXzMzbikpKTtcbiAgICBoNjQgPSBVNjQgJiAoUDY0XzMgKiAoaDY0IF4gKGg2NCA+PiBfMjluKSkpO1xuICAgIGg2NCA9IFU2NCAmIChoNjQgXiAoaDY0ID4+IF8zMm4pKTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSg4KTtcbiAgICBmb3IgKGxldCBpID0gNzsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgcmVzdWx0W2ldID0gTnVtYmVyKGg2NCAlIF8yNTZuKTtcbiAgICAgICAgaDY0ID0gaDY0IC8gXzI1Nm47XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCIvKipcbiAqIEBuYW1lIGFycmF5Q2h1bmtcbiAqIEBzdW1tYXJ5IFNwbGl0IFRbXSBpbnRvIFRbXVtdIGJhc2VkIG9uIHRoZSBkZWZpbmQgc2l6ZVxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgc2V0IGFvIGFycmF5cyBiYXNlZCBvbiB0aGUgY2h1bmtzaXplXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGFycmF5Q2h1bmsgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYXJyYXlDaHVuayhbMSwgMiwgMywgNCwgNV0pOyAvLyBbWzEsIDJdLCBbMywgNF0sIFs1XV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlDaHVuayhhcnJheSwgY2h1bmtTaXplKSB7XG4gICAgY29uc3Qgb3V0cHV0U2l6ZSA9IE1hdGguY2VpbChhcnJheS5sZW5ndGggLyBjaHVua1NpemUpO1xuICAgIC8vIHNob3J0Y3V0IGZvciB0aGUgc2luZ2xlLXNwbGl0IGNhc2VcbiAgICBpZiAob3V0cHV0U2l6ZSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gW2FycmF5XTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gQXJyYXkob3V0cHV0U2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRTaXplOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaSAqIGNodW5rU2l6ZTtcbiAgICAgICAgb3V0cHV0W2ldID0gYXJyYXkuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBjaHVua1NpemUpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLyoqXG4gKiBAbmFtZSBhcnJheUZsYXR0ZW5cbiAqIEBzdW1tYXJ5IE1lcmdlIFRbXVtdIGludG8gVFtdXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgYXJyYXlzIG1lcmdlZCBpbnRvIG9uZVxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBhcnJheUZsYXR0ZW4gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYXJyYXlGbGF0dGVuKFtbMSwgMl0sIFszLCA0XSwgWzVdXSk7IC8vIFsxLCAyLCAzLCA0LCA1XVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUZsYXR0ZW4oYXJyYXlzKSB7XG4gICAgY29uc3QgbnVtID0gYXJyYXlzLmxlbmd0aDtcbiAgICAvLyBzaG9ydGN1dHMgZm9yIHRoZSBlbXB0eSAmIHNpbmdsZS1lbnRyeSBjYXNlXG4gICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYXJyYXlzWzBdO1xuICAgIH1cbiAgICAvLyBwcmUtYWxsb2NhdGUgYmFzZWQgb24gdGhlIGNvbWJpbmVkIHNpemVcbiAgICBsZXQgc2l6ZSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICBzaXplICs9IGFycmF5c1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBBcnJheShzaXplKTtcbiAgICBsZXQgaSA9IC0xO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgY29uc3QgYSA9IGFycmF5c1tqXTtcbiAgICAgICAgLy8gaW5zdGVhZCBvZiBwdXNoaW5nLCB3ZSBqdXN0IHNldCB0aGUgZW50cmllc1xuICAgICAgICBmb3IgKGxldCBlID0gMCwgY291bnQgPSBhLmxlbmd0aDsgZSA8IGNvdW50OyBlKyspIHtcbiAgICAgICAgICAgIG91dHB1dFsrK2ldID0gYVtlXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXMvZnVuY3Rpb24uanMnO1xuLyoqXG4gKiBAbmFtZSBhc3NlcnRcbiAqIEBzdW1tYXJ5IENoZWNrcyBmb3IgYSB2YWxpZCB0ZXN0LCBpZiBub3QgRXJyb3IgaXMgdGhyb3duLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdGhhdCBgdGVzdGAgaXMgYSB0cnV0aHkgdmFsdWUuIElmIHZhbHVlIGlzIGZhbHN5IChgbnVsbGAsIGB1bmRlZmluZWRgLCBgZmFsc2VgLCAuLi4pLCBpdCB0aHJvd3MgYW4gRXJyb3Igd2l0aCB0aGUgc3VwcGxpZWQgYG1lc3NhZ2VgLiBXaGVuIGB0ZXN0YCBwYXNzZXMsIGB0cnVlYCBpcyByZXR1cm5lZC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgeyBhc3NlcnQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogYXNzZXJ0KHRydWUsICdUcnVlIHNob3VsZCBiZSB0cnVlJyk7IC8vIHBhc3Nlc1xuICogYXNzZXJ0KGZhbHNlLCAnRmFsc2Ugc2hvdWxkIG5vdCBiZSB0cnVlJyk7IC8vIEVycm9yIHRocm93blxuICogYXNzZXJ0KGZhbHNlLCAoKSA9PiAnbWVzc2FnZScpOyAvLyBFcnJvciB3aXRoICdtZXNzYWdlJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGlzRnVuY3Rpb24obWVzc2FnZSlcbiAgICAgICAgICAgID8gbWVzc2FnZSgpXG4gICAgICAgICAgICA6IG1lc3NhZ2UpO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgYXNzZXJ0UmV0dXJuXG4gKiBAZGVzY3JpcHRpb24gUmV0dXJucyB3aGVuIHRoZSB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkL251bGwsIG90aGVyd2lzZSB0aHJvd3MgYXNzZXJ0aW9uIGVycm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRSZXR1cm4odmFsdWUsIG1lc3NhZ2UpIHtcbiAgICBhc3NlcnQodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCwgbWVzc2FnZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLyoqXG4gKiBAbmFtZSBhc3NlcnRVbnJlYWNoYWJsZVxuICogQGRlc2NyaXB0aW9uIEFuIGFzc2VydGlvbiBoZWxwZXIgdGhhdCBlbnN1cmVzIGFsbCBjb2RlcGF0aHMgYXJlIGZvbGxvd2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGNvZGVwYXRoIHNob3VsZCBiZSB1bnJlYWNoYWJsZS4gVW5oYW5kbGVkIGlucHV0OiAke3h9YCk7XG59XG4iLCJpbXBvcnQgeyBCaWdJbnQgfSBmcm9tICdAcG9sa2Fkb3QveC1iaWdpbnQnO1xuLyoqXG4gKiBAbmFtZSBfMG5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgMC5cbiAqL1xuZXhwb3J0IGNvbnN0IF8wbiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDApO1xuLyoqXG4gKiBAbmFtZSBfMW5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgMS5cbiAqL1xuZXhwb3J0IGNvbnN0IF8xbiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDEpO1xuLyoqXG4gKiBAbmFtZSBfMm5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgMi5cbiAqL1xuZXhwb3J0IGNvbnN0IF8ybiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDIpO1xuLyoqXG4gKiBAbmFtZSBfM25cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgMy5cbiAqL1xuZXhwb3J0IGNvbnN0IF8zbiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDMpO1xuLyoqXG4gKiBAbmFtZSBfNG5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgNC5cbiAqL1xuZXhwb3J0IGNvbnN0IF80biA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDQpO1xuLyoqXG4gKiBAbmFtZSBfNW5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgNS5cbiAqL1xuZXhwb3J0IGNvbnN0IF81biA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDUpO1xuLyoqXG4gKiBAbmFtZSBfNm5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgNi5cbiAqL1xuZXhwb3J0IGNvbnN0IF82biA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDYpO1xuLyoqXG4gKiBAbmFtZSBfN25cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgNy5cbiAqL1xuZXhwb3J0IGNvbnN0IF83biA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDcpO1xuLyoqXG4gKiBAbmFtZSBfOG5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgOC5cbiAqL1xuZXhwb3J0IGNvbnN0IF84biA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDgpO1xuLyoqXG4gKiBAbmFtZSBfOW5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgOS5cbiAqL1xuZXhwb3J0IGNvbnN0IF85biA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDkpO1xuLyoqXG4gKiBAbmFtZSBfMTBuXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDEwLlxuICovXG5leHBvcnQgY29uc3QgXzEwbiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDEwKTtcbi8qKlxuICogQG5hbWUgXzEwMG5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgMTAwLlxuICovXG5leHBvcnQgY29uc3QgXzEwMG4gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCgxMDApO1xuLyoqXG4gKiBAbmFtZSBfMTAwMG5cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgMTAwMC5cbiAqL1xuZXhwb3J0IGNvbnN0IF8xMDAwbiA9IC8qI19fUFVSRV9fKi8gQmlnSW50KDEwMDApO1xuLyoqXG4gKiBAbmFtZSBfMU1uXG4gKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDEsMDAwLDAwMCAobWlsbGlvbikuXG4gKi9cbmV4cG9ydCBjb25zdCBfMU1uID0gLyojX19QVVJFX18qLyBCaWdJbnQoMTAwMDAwMCk7XG4vKipcbiogQG5hbWUgXzFCblxuKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDEsMDAwLDAwMCwwMDAgKGJpbGxpb24pLlxuKi9cbmV4cG9ydCBjb25zdCBfMUJuID0gLyojX19QVVJFX18qLyBCaWdJbnQoMTAwMDAwMDAwMCk7XG4vKipcbiogQG5hbWUgXzFRblxuKiBAc3VtbWFyeSBCaWdJbnQgY29uc3RhbnQgZm9yIDEsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAgKHF1aXRpbGxpb24pLlxuKi9cbmV4cG9ydCBjb25zdCBfMVFuID0gXzFCbiAqIF8xQm47XG4vKipcbiogQG5hbWUgXzJwb3c1M25cbiogQHN1bW1hcnkgQmlnSW50IGNvbnN0YW50IGZvciBNQVhfU0FGRV9JTlRFR0VSXG4qL1xuZXhwb3J0IGNvbnN0IF8ycG93NTNuID0gLyojX19QVVJFX18qLyBCaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuLyoqXG4gKiBAbmFtZSBfc3FydDJwb3c1M25cbiAqIEBzdW1tYXJ5IEJpZ0ludCBjb25zdGFudCBmb3IgTWF0aC5zcXJ0KE1BWF9TQUZFX0lOVEVHRVIpXG4gKi9cbmV4cG9ydCBjb25zdCBfc3FydDJwb3c1M24gPSAvKiNfX1BVUkVfXyovIEJpZ0ludCg5NDkwNjI2NSk7XG4iLCIvKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ21wKGNtcCkge1xuICAgIHJldHVybiAoLi4uaXRlbXMpID0+IHtcbiAgICAgICAgY29uc3QgY291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgYXJndW1lbnRzJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdCA9IGl0ZW1zWzBdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjbXAoaXRlbXNbaV0sIHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBCTiB9IGZyb20gJy4vYm4uanMnO1xuLyoqXG4gKiBAbmFtZSBCTl9aRVJPXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX1pFUk8gPSAvKiNfX1BVUkVfXyovIG5ldyBCTigwKTtcbi8qKlxuICogQG5hbWUgQk5fT05FXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMS5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX09ORSA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDEpO1xuLyoqXG4gKiBAbmFtZSBCTl9UV09cbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciAyLlxuICovXG5leHBvcnQgY29uc3QgQk5fVFdPID0gLyojX19QVVJFX18qLyBuZXcgQk4oMik7XG4vKipcbiAqIEBuYW1lIEJOX1RIUkVFXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMy5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX1RIUkVFID0gLyojX19QVVJFX18qLyBuZXcgQk4oMyk7XG4vKipcbiAqIEBuYW1lIEJOX0ZPVVJcbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciA0LlxuICovXG5leHBvcnQgY29uc3QgQk5fRk9VUiA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDQpO1xuLyoqXG4gKiBAbmFtZSBCTl9GSVZFXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgNS5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX0ZJVkUgPSAvKiNfX1BVUkVfXyovIG5ldyBCTig1KTtcbi8qKlxuICogQG5hbWUgQk5fU0lYXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgNi5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX1NJWCA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDYpO1xuLyoqXG4gKiBAbmFtZSBCTl9TRVZFTlxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDcuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9TRVZFTiA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDcpO1xuLyoqXG4gKiBAbmFtZSBCTl9FSUdIVFxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDguXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9FSUdIVCA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDgpO1xuLyoqXG4gKiBAbmFtZSBCTl9OSU5FXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgOS5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX05JTkUgPSAvKiNfX1BVUkVfXyovIG5ldyBCTig5KTtcbi8qKlxuICogQG5hbWUgQk5fVEVOXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgMTAuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9URU4gPSAvKiNfX1BVUkVfXyovIG5ldyBCTigxMCk7XG4vKipcbiAqIEBuYW1lIEJOX0hVTkRSRURcbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciAxMDAuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9IVU5EUkVEID0gLyojX19QVVJFX18qLyBuZXcgQk4oMTAwKTtcbi8qKlxuICogQG5hbWUgQk5fVEhPVVNBTkRcbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciAxLDAwMC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJOX1RIT1VTQU5EID0gLyojX19QVVJFX18qLyBuZXcgQk4oMTAwMCk7XG4vKipcbiAqIEBuYW1lIEJOX01JTExJT05cbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciAxLDAwMCwwMDAuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9NSUxMSU9OID0gLyojX19QVVJFX18qLyBuZXcgQk4oMTAwMDAwMCk7XG4vKipcbiAqIEBuYW1lIEJOX0JJTExJT05cbiAqIEBzdW1tYXJ5IEJOIGNvbnN0YW50IGZvciAxLDAwMCwwMDAsMDAwLlxuICovXG5leHBvcnQgY29uc3QgQk5fQklMTElPTiA9IC8qI19fUFVSRV9fKi8gbmV3IEJOKDEwMDAwMDAwMDApO1xuLyoqXG4gKiBAbmFtZSBCTl9RVUlOVElMTFxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIDEsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAuXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9RVUlOVElMTCA9IEJOX0JJTExJT04ubXVsKEJOX0JJTExJT04pO1xuLyoqXG4gKiBAbmFtZSBCTl9NQVhfSU5URUdFUlxuICogQHN1bW1hcnkgQk4gY29uc3RhbnQgZm9yIE1BWF9TQUZFX0lOVEVHRVJcbiAqL1xuZXhwb3J0IGNvbnN0IEJOX01BWF9JTlRFR0VSID0gLyojX19QVVJFX18qLyBuZXcgQk4oTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuLyoqXG4gKiBAbmFtZSBCTl9TUVJUX01BWF9JTlRFR0VSXG4gKiBAc3VtbWFyeSBCTiBjb25zdGFudCBmb3IgTWF0aC5zcXJ0KE1BWF9TQUZFX0lOVEVHRVIpXG4gKi9cbmV4cG9ydCBjb25zdCBCTl9TUVJUX01BWF9JTlRFR0VSID0gLyojX19QVVJFX18qLyBuZXcgQk4oOTQ5MDYyNjUpO1xuIiwiaW1wb3J0IHsgY3JlYXRlQ21wIH0gZnJvbSAnLi4vYmkvaGVscGVycy5qcyc7XG4vKipcbiAqIEBuYW1lIGJuTWF4XG4gKiBAc3VtbWFyeSBGaW5kcyBhbmQgcmV0dXJucyB0aGUgaGlnaGVzdCB2YWx1ZSBpbiBhbiBhcnJheSBvZiBCTnMuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBCTiBmcm9tICdibi5qcyc7XG4gKiBpbXBvcnQgeyBibk1heCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBibk1heChbbmV3IEJOKDEpLCBuZXcgQk4oMyksIG5ldyBCTigyKV0pLnRvU3RyaW5nKCk7IC8vID0+ICczJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBibk1heCA9IC8qI19fUFVSRV9fKi8gY3JlYXRlQ21wKChhLCBiKSA9PiBhLmd0KGIpKTtcbi8qKlxuICogQG5hbWUgYm5NaW5cbiAqIEBzdW1tYXJ5IEZpbmRzIGFuZCByZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWx1ZSBpbiBhbiBhcnJheSBvZiBCTnMuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBCTiBmcm9tICdibi5qcyc7XG4gKiBpbXBvcnQgeyBibk1pbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBibk1pbihbbmV3IEJOKDEpLCBuZXcgQk4oMyksIG5ldyBCTigyKV0pLnRvU3RyaW5nKCk7IC8vID0+ICcxJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBibk1pbiA9IC8qI19fUFVSRV9fKi8gY3JlYXRlQ21wKChhLCBiKSA9PiBhLmx0KGIpKTtcbiIsImltcG9ydCB7IEJOIH0gZnJvbSAnLi9ibi5qcyc7XG5pbXBvcnQgeyBCTl9NQVhfSU5URUdFUiwgQk5fT05FLCBCTl9TUVJUX01BWF9JTlRFR0VSIH0gZnJvbSAnLi9jb25zdHMuanMnO1xuaW1wb3J0IHsgYm5Ub0JuIH0gZnJvbSAnLi90b0JuLmpzJztcbi8qKlxuICogQG5hbWUgYm5TcXJ0XG4gKiBAc3VtbWFyeSBDYWxjdWxhdGVzIHRoZSBpbnRlZ2VyIHNxdWFyZSByb290IG9mIGEgQk5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IEJOIGZyb20gJ2JuLmpzJztcbiAqIGltcG9ydCB7IGJuU3FydCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBiblNxcnQobmV3IEJOKDE2KSkudG9TdHJpbmcoKTsgLy8gPT4gJzQnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJuU3FydCh2YWx1ZSkge1xuICAgIGNvbnN0IG4gPSBiblRvQm4odmFsdWUpO1xuICAgIGlmIChuLmlzTmVnKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzcXVhcmUgcm9vdCBvZiBuZWdhdGl2ZSBudW1iZXJzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTM2ODM5OTUvamF2YXNjcmlwdC1iaWctaW50ZWdlci1zcXVhcmUtcm9vdC9cbiAgICAvLyBzaG9ydGN1dCA8PSAyXjUzIC0gMSB0byB1c2UgdGhlIEpTIHV0aWxzXG4gICAgaWYgKG4ubHRlKEJOX01BWF9JTlRFR0VSKSkge1xuICAgICAgICAvLyB+fiBNb3JlIHBlcmZvcm1hbnQgdmVyc2lvbiBvZiBNYXRoLmZsb29yXG4gICAgICAgIHJldHVybiBuZXcgQk4ofn5NYXRoLnNxcnQobi50b051bWJlcigpKSk7XG4gICAgfVxuICAgIC8vIFVzZSBzcXJ0KE1BWF9TQUZFX0lOVEVHRVIpIGFzIHN0YXJ0aW5nIHBvaW50LiBzaW5jZSB3ZSBhbHJlYWR5IGtub3cgdGhlXG4gICAgLy8gb3V0cHV0IHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhpcywgd2UgZXhwZWN0IHRoaXMgdG8gYmUgYSBzYWZlIHN0YXJ0XG4gICAgbGV0IHgwID0gQk5fU1FSVF9NQVhfSU5URUdFUi5jbG9uZSgpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHgxID0gbi5kaXYoeDApLmlhZGQoeDApLmlzaHJuKDEpO1xuICAgICAgICBpZiAoeDAuZXEoeDEpIHx8IHgwLmVxKHgxLnN1YihCTl9PTkUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHgwO1xuICAgICAgICB9XG4gICAgICAgIHgwID0geDE7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgaGV4VG9CbiB9IGZyb20gJy4uL2hleC90b0JuLmpzJztcbmltcG9ydCB7IGlzQmlnSW50IH0gZnJvbSAnLi4vaXMvYmlnSW50LmpzJztcbmltcG9ydCB7IGlzSGV4IH0gZnJvbSAnLi4vaXMvaGV4LmpzJztcbmltcG9ydCB7IGlzVG9CaWdJbnQgfSBmcm9tICcuLi9pcy90b0JpZ0ludC5qcyc7XG5pbXBvcnQgeyBpc1RvQm4gfSBmcm9tICcuLi9pcy90b0JuLmpzJztcbmltcG9ydCB7IEJOIH0gZnJvbSAnLi9ibi5qcyc7XG4vKipcbiAqIEBuYW1lIGJuVG9CblxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIEJOIHZhbHVlIGZyb20gYSBCTiwgYmlnaW50LCBzdHJpbmcgKGJhc2UgMTAgb3IgaGV4KSBvciBudW1iZXIgaW5wdXQuXG4gKiBAZGVzY3JpcHRpb25cbiAqIGBudWxsYCBpbnB1dHMgcmV0dXJucyBhIGAweDBgIHJlc3VsdCwgQk4gdmFsdWVzIHJldHVybnMgdGhlIHZhbHVlLCBudW1iZXJzIHJldHVybnMgYSBCTiByZXByZXNlbnRhdGlvbi5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IEJOIGZyb20gJ2JuLmpzJztcbiAqIGltcG9ydCB7IGJuVG9CbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBiblRvQm4oMHgxMjM0KTsgLy8gPT4gQk4oMHgxMjM0KVxuICogYm5Ub0JuKG5ldyBCTigweDEyMzQpKTsgLy8gPT4gQk4oMHgxMjM0KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiblRvQm4odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyBCTi5pc0JOKHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBpc0hleCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IGhleFRvQm4odmFsdWUudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICA6IGlzQmlnSW50KHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBCTih2YWx1ZS50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICA6IGlzVG9Cbih2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWUudG9CbigpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlzVG9CaWdJbnQodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgQk4odmFsdWUudG9CaWdJbnQoKS50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IEJOKHZhbHVlKVxuICAgICAgICA6IG5ldyBCTigwKTtcbn1cbiIsImltcG9ydCB7IHU4YVRvSGV4IH0gZnJvbSAnLi4vdThhL2luZGV4LmpzJztcbmltcG9ydCB7IGJuVG9VOGEgfSBmcm9tICcuL3RvVThhLmpzJztcbi8qKlxuICogQG5hbWUgYm5Ub0hleFxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGhleCB2YWx1ZSBmcm9tIGEgQk4uanMgYmlnbnVtYmVyIG9iamVjdC5cbiAqIEBkZXNjcmlwdGlvblxuICogYG51bGxgIGlucHV0cyByZXR1cm5zIGEgYDB4YCByZXN1bHQsIEJOIHZhbHVlcyByZXR1cm4gdGhlIGFjdHVhbCB2YWx1ZSBhcyBhIGAweGAgcHJlZml4ZWQgaGV4IHZhbHVlLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBhIEJOIG9iamVjdCB0aHJvd3MgYW4gZXJyb3IuIFdpdGggYGJpdExlbmd0aGAgc2V0LCBpdCBmaXhlcyB0aGUgbnVtYmVyIHRvIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgQk4gZnJvbSAnYm4uanMnO1xuICogaW1wb3J0IHsgYm5Ub0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBiblRvSGV4KG5ldyBCTigweDEyMzQ1NikpOyAvLyA9PiAnMHgxMjM0NTYnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJuVG9IZXgodmFsdWUsIHsgYml0TGVuZ3RoID0gLTEsIGlzTGUgPSBmYWxzZSwgaXNOZWdhdGl2ZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIHJldHVybiB1OGFUb0hleChiblRvVThhKHZhbHVlLCB7IGJpdExlbmd0aCwgaXNMZSwgaXNOZWdhdGl2ZSB9KSk7XG59XG4iLCJpbXBvcnQgeyBiblRvQm4gfSBmcm9tICcuL3RvQm4uanMnO1xuY29uc3QgREVGQVVMVF9PUFRTID0geyBiaXRMZW5ndGg6IC0xLCBpc0xlOiB0cnVlLCBpc05lZ2F0aXZlOiBmYWxzZSB9O1xuLyoqXG4gKiBAbmFtZSBiblRvVThhXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgVWludDhBcnJheSBvYmplY3QgZnJvbSBhIEJOLlxuICogQGRlc2NyaXB0aW9uXG4gKiBgbnVsbGAvYHVuZGVmaW5lZGAvYE5hTmAgaW5wdXRzIHJldHVybnMgYW4gZW1wdHkgYFVpbnQ4QXJyYXlgIHJlc3VsdC4gYEJOYCBpbnB1dCB2YWx1ZXMgcmV0dXJuIHRoZSBhY3R1YWwgYnl0ZXMgdmFsdWUgY29udmVydGVkIHRvIGEgYFVpbnQ4QXJyYXlgLiBPcHRpb25hbGx5IGNvbnZlcnQgdXNpbmcgbGl0dGxlLWVuZGlhbiBmb3JtYXQgaWYgYGlzTEVgIGlzIHNldC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgYm5Ub1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBiblRvVThhKG5ldyBCTigweDEyMzQpKTsgLy8gPT4gWzB4MTIsIDB4MzRdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJuVG9VOGEodmFsdWUsIHsgYml0TGVuZ3RoID0gLTEsIGlzTGUgPSB0cnVlLCBpc05lZ2F0aXZlID0gZmFsc2UgfSA9IERFRkFVTFRfT1BUUykge1xuICAgIGNvbnN0IHZhbHVlQm4gPSBiblRvQm4odmFsdWUpO1xuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBiaXRMZW5ndGggPT09IC0xXG4gICAgICAgID8gTWF0aC5jZWlsKHZhbHVlQm4uYml0TGVuZ3RoKCkgLyA4KVxuICAgICAgICA6IE1hdGguY2VpbCgoYml0TGVuZ3RoIHx8IDApIC8gOCk7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYml0TGVuZ3RoID09PSAtMVxuICAgICAgICAgICAgPyBuZXcgVWludDhBcnJheSgxKVxuICAgICAgICAgICAgOiBuZXcgVWludDhBcnJheShieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUxlbmd0aCk7XG4gICAgY29uc3QgYm4gPSBpc05lZ2F0aXZlXG4gICAgICAgID8gdmFsdWVCbi50b1R3b3MoYnl0ZUxlbmd0aCAqIDgpXG4gICAgICAgIDogdmFsdWVCbjtcbiAgICBvdXRwdXQuc2V0KGJuLnRvQXJyYXkoaXNMZSA/ICdsZScgOiAnYmUnLCBieXRlTGVuZ3RoKSwgMCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbiIsImltcG9ydCB7IHU4YUNvbmNhdFN0cmljdCB9IGZyb20gJy4uL3U4YS9pbmRleC5qcyc7XG5pbXBvcnQgeyBjb21wYWN0VG9VOGEgfSBmcm9tICcuL3RvVThhLmpzJztcbi8qKlxuICogQG5hbWUgY29tcGFjdEFkZExlbmd0aFxuICogQGRlc2NyaXB0aW9uIEFkZHMgYSBsZW5ndGggcHJlZml4IHRvIHRoZSBpbnB1dCB2YWx1ZVxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBjb21wYWN0QWRkTGVuZ3RoIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnNvbGUubG9nKGNvbXBhY3RBZGRMZW5ndGgobmV3IFVpbnQ4QXJyYXkoWzB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWZdKSkpOyAvLyBVaW50OEFycmF5KFs0IDw8IDIsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWZdKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYWN0QWRkTGVuZ3RoKGlucHV0KSB7XG4gICAgcmV0dXJuIHU4YUNvbmNhdFN0cmljdChbXG4gICAgICAgIGNvbXBhY3RUb1U4YShpbnB1dC5sZW5ndGgpLFxuICAgICAgICBpbnB1dFxuICAgIF0pO1xufVxuIiwiaW1wb3J0IHsgQk4gfSBmcm9tICcuLi9ibi9pbmRleC5qcyc7XG5pbXBvcnQgeyB1OGFUb0JuLCB1OGFUb1U4YSB9IGZyb20gJy4uL3U4YS9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIGNvbXBhY3RGcm9tVThhXG4gKiBAZGVzY3JpcHRpb24gUmV0cml2ZXMgdGhlIG9mZnNldCBhbmQgZW5jb2RlZCBsZW5ndGggZnJvbSBhIGNvbXBhY3QtcHJlZml4ZWQgdmFsdWVcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgY29tcGFjdEZyb21VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc3QgW29mZnNldCwgbGVuZ3RoXSA9IGNvbXBhY3RGcm9tVThhKG5ldyBVaW50OEFycmF5KFsyNTQsIDI1NSwgMywgMF0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZygndmFsdWUgb2Zmc2V0PScsIG9mZnNldCwgJ2xlbmd0aD0nLCBsZW5ndGgpOyAvLyA0LCAweGZmZmZcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFjdEZyb21VOGEoaW5wdXQpIHtcbiAgICBjb25zdCB1OGEgPSB1OGFUb1U4YShpbnB1dCk7XG4gICAgLy8gVGhlIHU4YSBpcyBtYW51YWxseSBjb252ZXJ0ZWQgaGVyZSBmb3IgMSwgMiAmIDQgbGVuZ3RocywgaXQgaXMgMnggZmFzdGVyXG4gICAgLy8gdGhhbiBkb2luZyBhbiBhZGRpdGlvbmFsIGNhbGwgdG8gdThhVG9CbiAoYXMgd2l0aCB2YXJpYWJsZSBsZW5ndGgpXG4gICAgc3dpdGNoICh1OGFbMF0gJiAwYjExKSB7XG4gICAgICAgIGNhc2UgMGIwMDpcbiAgICAgICAgICAgIHJldHVybiBbMSwgbmV3IEJOKHU4YVswXSA+Pj4gMildO1xuICAgICAgICBjYXNlIDBiMDE6XG4gICAgICAgICAgICByZXR1cm4gWzIsIG5ldyBCTigodThhWzBdICsgKHU4YVsxXSA8PCA4KSkgPj4+IDIpXTtcbiAgICAgICAgY2FzZSAwYjEwOlxuICAgICAgICAgICAgLy8gZm9yIHRoZSAzcmQgYnl0ZSwgd2UgZG9uJ3QgPDwgMjQgLSBzaW5jZSBKUyBjb252ZXJ0cyBhbGwgYml0d2lzZSBvcGVyYXRvcnMgdG9cbiAgICAgICAgICAgIC8vIDMyLWJpdCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHRvcC1tb3N0IGJpdCBpcyBzZXQgdGhpcyB5aWVsZHMgYSBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIFs0LCBuZXcgQk4oKHU4YVswXSArICh1OGFbMV0gPDwgOCkgKyAodThhWzJdIDw8IDE2KSArICh1OGFbM10gKiAxNjc3NzIxNikpID4+PiAyKV07XG4gICAgICAgIC8vIDBiMTFcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgLy8gYWRkIDUgdG8gc2hpZnRlZCAoNCBmb3IgYmFzZSBsZW5ndGgsIDEgZm9yIHRoaXMgYnl0ZSlcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9ICh1OGFbMF0gPj4+IDIpICsgNTtcbiAgICAgICAgICAgIC8vIHdlIHVucm9sbCB0aGUgbG9vcFxuICAgICAgICAgICAgc3dpdGNoIChvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBzdGlsbCBjb3VsZCBiZSA0IGJ5dGVzIGRhdGEsIHNpbWlsYXIgdG8gMGIxMCBhYm92ZSAod2l0aCBvZmZzZXRzKVxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSAzcmQgYnl0ZSwgd2UgZG9uJ3QgPDwgMjQgLSBzaW5jZSBKUyBjb252ZXJ0cyBhbGwgYml0d2lzZSBvcGVyYXRvcnMgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gMzItYml0LCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgdG9wLW1vc3QgYml0IGlzIHNldCB0aGlzIHlpZWxkcyBhIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNSwgbmV3IEJOKHU4YVsxXSArICh1OGFbMl0gPDwgOCkgKyAodThhWzNdIDw8IDE2KSArICh1OGFbNF0gKiAxNjc3NzIxNikpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNiwgbmV3IEJOKHU4YVsxXSArICh1OGFbMl0gPDwgOCkgKyAodThhWzNdIDw8IDE2KSArICgodThhWzRdICsgKHU4YVs1XSA8PCA4KSkgKiAxNjc3NzIxNikpXTtcbiAgICAgICAgICAgICAgICAvLyA2IGJ5dGVzIGRhdGEgaXMgdGhlIG1heGltdW0sIDQ4IGJpdHMgKDU2IHdvdWxkIG92ZXJmbG93KVxuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3LCBuZXcgQk4odThhWzFdICsgKHU4YVsyXSA8PCA4KSArICh1OGFbM10gPDwgMTYpICsgKCh1OGFbNF0gKyAodThhWzVdIDw8IDgpICsgKHU4YVs2XSA8PCAxNikpICogMTY3NzcyMTYpKV07XG4gICAgICAgICAgICAgICAgLy8gZm9yIGFueXRoaW5nIGVsc2UsIHVzZSB0aGUgbm9uLXVucm9sbGVkIHZlcnNpb25cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW29mZnNldCwgdThhVG9Cbih1OGEuc3ViYXJyYXkoMSwgb2Zmc2V0KSldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBAbmFtZSBjb21wYWN0RnJvbVU4YUxpbVxuICogQGRlc2NyaXB0aW9uIEEgbGltaXRlZCB2ZXJzaW9uIG9mIFtbY29tcGFjdEZyb21VOGFdXSwgYWNjZXB0aW5nIG9ubHkgVWludDhBcnJheSBpbnB1dHMgZm9yIHZhbHVlcyA8PSA0OCBiaXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYWN0RnJvbVU4YUxpbSh1OGEpIHtcbiAgICAvLyBUaGUgdThhIGlzIG1hbnVhbGx5IGNvbnZlcnRlZCBoZXJlIGZvciAxLCAyICYgNCBsZW5ndGhzLCBpdCBpcyAyeCBmYXN0ZXJcbiAgICAvLyB0aGFuIGRvaW5nIGFuIGFkZGl0aW9uYWwgY2FsbCB0byB1OGFUb0JuIChhcyB3aXRoIHZhcmlhYmxlIGxlbmd0aClcbiAgICBzd2l0Y2ggKHU4YVswXSAmIDBiMTEpIHtcbiAgICAgICAgY2FzZSAwYjAwOlxuICAgICAgICAgICAgcmV0dXJuIFsxLCB1OGFbMF0gPj4+IDJdO1xuICAgICAgICBjYXNlIDBiMDE6XG4gICAgICAgICAgICByZXR1cm4gWzIsICh1OGFbMF0gKyAodThhWzFdIDw8IDgpKSA+Pj4gMl07XG4gICAgICAgIGNhc2UgMGIxMDpcbiAgICAgICAgICAgIC8vIGZvciB0aGUgM3JkIGJ5dGUsIHdlIGRvbid0IDw8IDI0IC0gc2luY2UgSlMgY29udmVydHMgYWxsIGJpdHdpc2Ugb3BlcmF0b3JzIHRvXG4gICAgICAgICAgICAvLyAzMi1iaXQsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSB0b3AtbW9zdCBiaXQgaXMgc2V0IHRoaXMgeWllbGRzIGEgbmVnYXRpdmUgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBbNCwgKHU4YVswXSArICh1OGFbMV0gPDwgOCkgKyAodThhWzJdIDw8IDE2KSArICh1OGFbM10gKiAxNjc3NzIxNikpID4+PiAyXTtcbiAgICAgICAgLy8gMGIxMVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAvLyBhZGQgNSB0byBzaGlmdGVkICg0IGZvciBiYXNlIGxlbmd0aCwgMSBmb3IgdGhpcyBieXRlKVxuICAgICAgICAgICAgLy8gd2UgdW5yb2xsIHRoZSBsb29wXG4gICAgICAgICAgICBzd2l0Y2ggKCh1OGFbMF0gPj4+IDIpICsgNSkge1xuICAgICAgICAgICAgICAgIC8vIHRoZXJlIHN0aWxsIGNvdWxkIGJlIDQgYnl0ZXMgZGF0YSwgc2ltaWxhciB0byAwYjEwIGFib3ZlICh3aXRoIG9mZnNldHMpXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzUsIHU4YVsxXSArICh1OGFbMl0gPDwgOCkgKyAodThhWzNdIDw8IDE2KSArICh1OGFbNF0gKiAxNjc3NzIxNildO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs2LCB1OGFbMV0gKyAodThhWzJdIDw8IDgpICsgKHU4YVszXSA8PCAxNikgKyAoKHU4YVs0XSArICh1OGFbNV0gPDwgOCkpICogMTY3NzcyMTYpXTtcbiAgICAgICAgICAgICAgICAvLyA2IGJ5dGVzIGRhdGEgaXMgdGhlIG1heGltdW0sIDQ4IGJpdHMgKDU2IHdvdWxkIG92ZXJmbG93KVxuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3LCB1OGFbMV0gKyAodThhWzJdIDw8IDgpICsgKHU4YVszXSA8PCAxNikgKyAoKHU4YVs0XSArICh1OGFbNV0gPDwgOCkgKyAodThhWzZdIDw8IDE2KSkgKiAxNjc3NzIxNildO1xuICAgICAgICAgICAgICAgIC8vIGZvciBhbnl0aGluZyBlbHNlLCB3ZSBhcmUgYWJvdmUgdGhlIGFjdHVhbCBNQVhfU0FGRV9JTlRFR0VSIC0gYmFpbCBvdXRcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBhY3QgaW5wdXQgaXMgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgY29tcGFjdEZyb21VOGEgfSBmcm9tICcuL2Zyb21VOGEuanMnO1xuLyoqXG4gKiBAbmFtZSBjb21wYWN0U3RyaXBMZW5ndGhcbiAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIHRoZSBsZW5ndGggcHJlZml4LCByZXR1cm5pbmcgYm90aCB0aGUgdG90YWwgbGVuZ3RoIChpbmNsdWRpbmcgdGhlIHZhbHVlICsgY29tcGFjdCBlbmNvZGluZykgYW5kIHRoZSBkZWNvZGVkIHZhbHVlIHdpdGggdGhlIGNvcnJlY3QgbGVuZ3RoXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGNvbXBhY3RTdHJpcExlbmd0aCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZyhjb21wYWN0U3RyaXBMZW5ndGgobmV3IFVpbnQ4QXJyYXkoWzIgPDwgMiwgMHhkZSwgMHhhZF0pKSk7IC8vIFsyLCBVaW50OEFycmF5WzB4ZGUsIDB4YWRdXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYWN0U3RyaXBMZW5ndGgoaW5wdXQpIHtcbiAgICBjb25zdCBbb2Zmc2V0LCBsZW5ndGhdID0gY29tcGFjdEZyb21VOGEoaW5wdXQpO1xuICAgIGNvbnN0IHRvdGFsID0gb2Zmc2V0ICsgbGVuZ3RoLnRvTnVtYmVyKCk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgdG90YWwsXG4gICAgICAgIGlucHV0LnN1YmFycmF5KG9mZnNldCwgdG90YWwpXG4gICAgXTtcbn1cbiIsImltcG9ydCB7IEJOLCBCTl9PTkUsIEJOX1RXTywgYm5Ub0JuLCBiblRvVThhIH0gZnJvbSAnLi4vYm4vaW5kZXguanMnO1xuaW1wb3J0IHsgdThhQ29uY2F0U3RyaWN0IH0gZnJvbSAnLi4vdThhL2luZGV4LmpzJztcbmNvbnN0IE1BWF9VOCA9IEJOX1RXTy5wb3cobmV3IEJOKDggLSAyKSkuaXN1YihCTl9PTkUpO1xuY29uc3QgTUFYX1UxNiA9IEJOX1RXTy5wb3cobmV3IEJOKDE2IC0gMikpLmlzdWIoQk5fT05FKTtcbmNvbnN0IE1BWF9VMzIgPSBCTl9UV08ucG93KG5ldyBCTigzMiAtIDIpKS5pc3ViKEJOX09ORSk7XG5jb25zdCBCTF8xNiA9IHsgYml0TGVuZ3RoOiAxNiB9O1xuY29uc3QgQkxfMzIgPSB7IGJpdExlbmd0aDogMzIgfTtcbi8qKlxuICogQG5hbWUgY29tcGFjdFRvVThhXG4gKiBAZGVzY3JpcHRpb24gRW5jb2RlcyBhIG51bWJlciBpbnRvIGEgY29tcGFjdCByZXByZXNlbnRhdGlvblxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBjb21wYWN0VG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coY29tcGFjdFRvVThhKDUxMSwgMzIpKTsgLy8gVWludDhBcnJheShbMGIxMTExMTEwMSwgMGIwMDAwMDExMV0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RUb1U4YSh2YWx1ZSkge1xuICAgIGNvbnN0IGJuID0gYm5Ub0JuKHZhbHVlKTtcbiAgICBpZiAoYm4ubHRlKE1BWF9VOCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtibi50b051bWJlcigpIDw8IDJdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYm4ubHRlKE1BWF9VMTYpKSB7XG4gICAgICAgIHJldHVybiBiblRvVThhKGJuLnNobG4oMikuaWFkZChCTl9PTkUpLCBCTF8xNik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGJuLmx0ZShNQVhfVTMyKSkge1xuICAgICAgICByZXR1cm4gYm5Ub1U4YShibi5zaGxuKDIpLmlhZGQoQk5fVFdPKSwgQkxfMzIpO1xuICAgIH1cbiAgICBjb25zdCB1OGEgPSBiblRvVThhKGJuKTtcbiAgICBsZXQgbGVuZ3RoID0gdThhLmxlbmd0aDtcbiAgICAvLyBhZGp1c3QgdG8gdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzXG4gICAgd2hpbGUgKHU4YVtsZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgICBsZW5ndGgtLTtcbiAgICB9XG4gICAgaWYgKGxlbmd0aCA8IDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxlbmd0aCwgcHJldmlvdXMgY2hlY2tzIG1hdGNoIGFueXRoaW5nIGxlc3MgdGhhbiAyXjMwJyk7XG4gICAgfVxuICAgIHJldHVybiB1OGFDb25jYXRTdHJpY3QoW1xuICAgICAgICAvLyBzdWJ0cmFjdCA0IGFzIG1pbmltdW0gKGFsc28gY2F0ZXJlZCBmb3IgaW4gZGVjb2RpbmcpXG4gICAgICAgIG5ldyBVaW50OEFycmF5KFsoKGxlbmd0aCAtIDQpIDw8IDIpICsgMGIxMV0pLFxuICAgICAgICB1OGEuc3ViYXJyYXkoMCwgbGVuZ3RoKVxuICAgIF0pO1xufVxuIiwiLyoqXG4gKiBAbmFtZSBmbG9hdFRvVThhXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBmbG9hdCBpbnRvIGEgVThhIHJlcHJlc2VudGF0aW9uIChXaGlsZSB3ZSBkb24ndCB1c2UgQkUgaW4gU0NBTEVcbiAqIHdlIHN0aWxsIGFsbG93IGZvciBlaXRoZXIgcmVwcmVzZW50YXRpb24sIGFsdGhvdWdoLCBhcyBlbHNld2hlcmUsIGlzTGUgaXMgZGVmYXVsdClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsb2F0VG9VOGEodmFsdWUgPSAwLjAsIHsgYml0TGVuZ3RoID0gMzIsIGlzTGUgPSB0cnVlIH0gPSB7fSkge1xuICAgIGlmIChiaXRMZW5ndGggIT09IDMyICYmIGJpdExlbmd0aCAhPT0gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJpdExlbmd0aCBwcm92aWRlZCwgZXhwZWN0ZWQgMzIgb3IgNjQnKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYml0TGVuZ3RoIC8gOCk7XG4gICAgY29uc3QgZHYgPSBuZXcgRGF0YVZpZXcocmVzdWx0LmJ1ZmZlciwgcmVzdWx0LmJ5dGVPZmZzZXQpO1xuICAgIGlmIChiaXRMZW5ndGggPT09IDMyKSB7XG4gICAgICAgIGR2LnNldEZsb2F0MzIoMCwgTnVtYmVyKHZhbHVlKSwgaXNMZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkdi5zZXRGbG9hdDY0KDAsIE51bWJlcih2YWx1ZSksIGlzTGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IHsgYm5Ub0JuIH0gZnJvbSAnLi4vYm4vdG9Cbi5qcyc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICcuLi9pcy9ib29sZWFuLmpzJztcbmltcG9ydCB7IGZvcm1hdERlY2ltYWwgfSBmcm9tICcuL2Zvcm1hdERlY2ltYWwuanMnO1xuaW1wb3J0IHsgZ2V0U2VwYXJhdG9yIH0gZnJvbSAnLi9nZXRTZXBhcmF0b3IuanMnO1xuaW1wb3J0IHsgY2FsY1NpLCBmaW5kU2ksIFNJLCBTSV9NSUQgfSBmcm9tICcuL3NpLmpzJztcbmNvbnN0IERFRkFVTFRfREVDSU1BTFMgPSAwO1xuY29uc3QgREVGQVVMVF9VTklUID0gU0lbU0lfTUlEXS50ZXh0O1xubGV0IGRlZmF1bHREZWNpbWFscyA9IERFRkFVTFRfREVDSU1BTFM7XG5sZXQgZGVmYXVsdFVuaXQgPSBERUZBVUxUX1VOSVQ7XG5mdW5jdGlvbiBfZm9ybWF0QmFsYW5jZShpbnB1dCwgeyBkZWNpbWFscyA9IGRlZmF1bHREZWNpbWFscywgZm9yY2VVbml0LCBsb2NhbGUgPSAnZW4nLCB3aXRoQWxsID0gZmFsc2UsIHdpdGhTaSA9IHRydWUsIHdpdGhTaUZ1bGwgPSBmYWxzZSwgd2l0aFVuaXQgPSB0cnVlLCB3aXRoWmVybyA9IHRydWUgfSA9IHt9KSB7XG4gICAgLy8gd2Ugb25seSB3b3JrIHdpdGggc3RyaW5nIGlucHV0cyBoZXJlIC0gY29udmVydCBhbnl0aGluZ1xuICAgIC8vIGludG8gdGhlIHN0cmluZy1vbmx5IHZhbHVlXG4gICAgbGV0IHRleHQgPSBiblRvQm4oaW5wdXQpLnRvU3RyaW5nKCk7XG4gICAgaWYgKHRleHQubGVuZ3RoID09PSAwIHx8IHRleHQgPT09ICcwJykge1xuICAgICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICAvLyBzdHJpcCB0aGUgbmVnYXRpdmUgc2lnbiBzbyB3ZSBjYW4gd29yayB3aXRoIGNsZWFuIGdyb3VwaW5ncywgcmUtYWRkIHRoaXMgaW4gdGhlXG4gICAgLy8gZW5kIHdoZW4gd2UgcmV0dXJuIHRoZSByZXN1bHQgKGZyb20gaGVyZSBvbiB3ZSB3b3JrIHdpdGggcG9zaXRpdmUgbnVtYmVycylcbiAgICBsZXQgc2lnbiA9ICcnO1xuICAgIGlmICh0ZXh0WzBdLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIC8vIFdlIHN0YXJ0IGF0IG1pZHBvaW50ICg4KSBtaW51cyAxIC0gdGhpcyBtZWFucyB0aGF0IHZhbHVlcyBkaXNwbGF5IGFzXG4gICAgLy8gMTIzLjQ1NjcgaW5zdGVhZCBvZiAwLjEyMzQgayAoc28gd2UgYWx3YXlzIGhhdmUgdGhlIG1vc3QgcmVsZXZhbnQpLlxuICAgIGNvbnN0IHNpID0gY2FsY1NpKHRleHQsIGRlY2ltYWxzLCBmb3JjZVVuaXQpO1xuICAgIGNvbnN0IG1pZCA9IHRleHQubGVuZ3RoIC0gKGRlY2ltYWxzICsgc2kucG93ZXIpO1xuICAgIGNvbnN0IHByZSA9IG1pZCA8PSAwID8gJzAnIDogdGV4dC5zdWJzdHJpbmcoMCwgbWlkKTtcbiAgICAvLyBnZXQgdGhlIHBvc3QgZnJvbSB0aGUgbWlkcG9pbnQgb253YXJkIGFuZCB0aGVuIGZpcnN0IGFkZCBtYXggZGVjaW1hbHNcbiAgICAvLyBiZWZvcmUgdHJpbW1pbmcgdG8gdGhlIGNvcnJlY3QgKGNhbGN1bGF0ZWQpIGFtb3VudCBvZiBkZWNpbWFscyBhZ2FpblxuICAgIGxldCBwb3N0ID0gdGV4dFxuICAgICAgICAucGFkU3RhcnQobWlkIDwgMCA/IGRlY2ltYWxzIDogMSwgJzAnKVxuICAgICAgICAuc3Vic3RyaW5nKG1pZCA8IDAgPyAwIDogbWlkKVxuICAgICAgICAucGFkRW5kKHdpdGhBbGwgPyBNYXRoLm1heChkZWNpbWFscywgNCkgOiA0LCAnMCcpXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgd2l0aEFsbCA/IE1hdGgubWF4KDQsIGRlY2ltYWxzICsgc2kucG93ZXIpIDogNCk7XG4gICAgLy8gcmVtb3ZlIGFsbCB0cmFpbGluZyAwJ3MgKGlmIHJlcXVpcmVkIHZpYSBmbGFnKVxuICAgIGlmICghd2l0aFplcm8pIHtcbiAgICAgICAgbGV0IGVuZCA9IHBvc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgLy8gVGhpcyBsb29rcyBpbmVmZmljaWVudCwgaG93ZXZlciBpdCBpcyBiZXR0ZXIgdG8gZG8gdGhlIGNoZWNrcyBhbmRcbiAgICAgICAgLy8gb25seSBtYWtlIG9uZSBmaW5hbCBzbGljZSB0aGFuIGl0IGlzIHRvIGRvIGl0IGluIG11bHRpcGxlc1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAocG9zdFtlbmRdID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICBlbmQtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAocG9zdFtlbmRdID09PSAnMCcpO1xuICAgICAgICBwb3N0ID0gcG9zdC5zdWJzdHJpbmcoMCwgZW5kICsgMSk7XG4gICAgfVxuICAgIC8vIHRoZSBkaXNwbGF5IHVuaXRcbiAgICBjb25zdCB1bml0ID0gaXNCb29sZWFuKHdpdGhVbml0KVxuICAgICAgICA/IFNJW1NJX01JRF0udGV4dFxuICAgICAgICA6IHdpdGhVbml0O1xuICAgIC8vIGZvcm1hdCB0aGUgdW5pdHMgZm9yIGRpc3BsYXkgYmFzZWQgb24gdGhlIGZsYWdzXG4gICAgY29uc3QgdW5pdHMgPSB3aXRoU2kgfHwgd2l0aFNpRnVsbFxuICAgICAgICA/IHNpLnZhbHVlID09PSAnLSdcbiAgICAgICAgICAgID8gd2l0aFVuaXRcbiAgICAgICAgICAgICAgICA/IGAgJHt1bml0fWBcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICA6IGAgJHt3aXRoU2lGdWxsID8gYCR7c2kudGV4dH0ke3dpdGhVbml0ID8gJyAnIDogJyd9YCA6IHNpLnZhbHVlfSR7d2l0aFVuaXQgPyB1bml0IDogJyd9YFxuICAgICAgICA6ICcnO1xuICAgIGNvbnN0IHsgZGVjaW1hbCwgdGhvdXNhbmQgfSA9IGdldFNlcGFyYXRvcihsb2NhbGUpO1xuICAgIHJldHVybiBgJHtzaWdufSR7Zm9ybWF0RGVjaW1hbChwcmUsIHRob3VzYW5kKX0ke3Bvc3QgJiYgYCR7ZGVjaW1hbH0ke3Bvc3R9YH0ke3VuaXRzfWA7XG59XG5leHBvcnQgY29uc3QgZm9ybWF0QmFsYW5jZSA9IF9mb3JtYXRCYWxhbmNlO1xuZm9ybWF0QmFsYW5jZS5jYWxjU2kgPSAodGV4dCwgZGVjaW1hbHMgPSBkZWZhdWx0RGVjaW1hbHMpID0+IGNhbGNTaSh0ZXh0LCBkZWNpbWFscyk7XG5mb3JtYXRCYWxhbmNlLmZpbmRTaSA9IGZpbmRTaTtcbmZvcm1hdEJhbGFuY2UuZ2V0RGVmYXVsdHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaW1hbHM6IGRlZmF1bHREZWNpbWFscyxcbiAgICAgICAgdW5pdDogZGVmYXVsdFVuaXRcbiAgICB9O1xufTtcbmZvcm1hdEJhbGFuY2UuZ2V0T3B0aW9ucyA9IChkZWNpbWFscyA9IGRlZmF1bHREZWNpbWFscykgPT4ge1xuICAgIHJldHVybiBTSS5maWx0ZXIoKHsgcG93ZXIgfSkgPT4gcG93ZXIgPCAwXG4gICAgICAgID8gKGRlY2ltYWxzICsgcG93ZXIpID49IDBcbiAgICAgICAgOiB0cnVlKTtcbn07XG5mb3JtYXRCYWxhbmNlLnNldERlZmF1bHRzID0gKHsgZGVjaW1hbHMsIHVuaXQgfSkgPT4ge1xuICAgIGRlZmF1bHREZWNpbWFscyA9IChBcnJheS5pc0FycmF5KGRlY2ltYWxzKVxuICAgICAgICA/IGRlY2ltYWxzWzBdXG4gICAgICAgIDogZGVjaW1hbHMpID8/IGRlZmF1bHREZWNpbWFscztcbiAgICBkZWZhdWx0VW5pdCA9IChBcnJheS5pc0FycmF5KHVuaXQpXG4gICAgICAgID8gdW5pdFswXVxuICAgICAgICA6IHVuaXQpID8/IGRlZmF1bHRVbml0O1xuICAgIFNJW1NJX01JRF0udGV4dCA9IGRlZmF1bHRVbml0O1xufTtcbiIsIi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIHplcm9QYWQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuLyoqXG4gKiBAbmFtZSBmb3JtYXREYXRlXG4gKiBAZGVzY3JpcHRpb24gRm9ybWF0cyBhIGRhdGUgaW4gQ0NZWS1NTS1ERCBISDpNTTpTUyBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBtb250aCA9IHplcm9QYWQoKGRhdGUuZ2V0TW9udGgoKSArIDEpKTtcbiAgICBjb25zdCBkYXkgPSB6ZXJvUGFkKGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICBjb25zdCBob3VyID0gemVyb1BhZChkYXRlLmdldEhvdXJzKCkpO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHplcm9QYWQoZGF0ZS5nZXRNaW51dGVzKCkpO1xuICAgIGNvbnN0IHNlY29uZCA9IHplcm9QYWQoZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0gJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9YDtcbn1cbiIsImNvbnN0IE5VTUJFUl9SRUdFWCA9IG5ldyBSZWdFeHAoJyhcXFxcZCs/KSg/PShcXFxcZHszfSkrKD8hXFxcXGQpfCQpJywgJ2cnKTtcbi8qKlxuICogQG5hbWUgZm9ybWF0RGVjaW1hbFxuICogQGRlc2NyaXB0aW9uIEZvcm1hdHMgYSBudW1iZXIgaW50byBzdHJpbmcgZm9ybWF0IHdpdGggdGhvdXNhbmQgc2VwYXJhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGVjaW1hbCh2YWx1ZSwgc2VwYXJhdG9yID0gJywnKSB7XG4gICAgLy8gV2UgY2FuIGRvIHRoaXMgYnkgYWRqdXN0aW5nIHRoZSByZWd4LCBob3dldmVyIGZvciB0aGUgc2FrZSBvZiBjbGFyaXR5XG4gICAgLy8gd2UgcmF0aGVyIHN0cmlwIGFuZCByZS1hZGQgdGhlIG5lZ2F0aXZlIHNpZ24gaW4gdGhlIG91dHB1dFxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB2YWx1ZVswXS5zdGFydHNXaXRoKCctJyk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGlzTmVnYXRpdmVcbiAgICAgICAgPyB2YWx1ZS5zdWJzdHJpbmcoMSkubWF0Y2goTlVNQkVSX1JFR0VYKVxuICAgICAgICA6IHZhbHVlLm1hdGNoKE5VTUJFUl9SRUdFWCk7XG4gICAgcmV0dXJuIG1hdGNoZWRcbiAgICAgICAgPyBgJHtpc05lZ2F0aXZlID8gJy0nIDogJyd9JHttYXRjaGVkLmpvaW4oc2VwYXJhdG9yKX1gXG4gICAgICAgIDogdmFsdWU7XG59XG4iLCJpbXBvcnQgeyBiblRvQm4gfSBmcm9tICcuLi9ibi90b0JuLmpzJztcbmltcG9ydCB7IGZvcm1hdERlY2ltYWwgfSBmcm9tICcuL2Zvcm1hdERlY2ltYWwuanMnO1xuaW1wb3J0IHsgZ2V0U2VwYXJhdG9yIH0gZnJvbSAnLi9nZXRTZXBhcmF0b3IuanMnO1xuLyoqXG4gKiBAbmFtZSBmb3JtYXROdW1iZXJcbiAqIEBkZXNjcmlwdGlvbiBGb3JtYXRzIGEgbnVtYmVyIGludG8gc3RyaW5nIGZvcm1hdCB3aXRoIHRob3VzYW5kIHNlcGFyYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWx1ZSwgeyBsb2NhbGUgPSAnZW4nIH0gPSB7fSkge1xuICAgIGNvbnN0IHsgdGhvdXNhbmQgfSA9IGdldFNlcGFyYXRvcihsb2NhbGUpO1xuICAgIHJldHVybiBmb3JtYXREZWNpbWFsKGJuVG9Cbih2YWx1ZSkudG9TdHJpbmcoKSwgdGhvdXNhbmQpO1xufVxuIiwiLyoqXG4gKiBHZXQgdGhlIGRlY2ltYWwgYW5kIHRob3VzYW5kIHNlcGFyYXRvciBvZiBhIGxvY2FsZVxuICogQHBhcmFtIGxvY2FsZVxuICogQHJldHVybnMge2RlY2ltYWw6IHN0cmluZywgdGhvdXNhbmQ6IHN0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcGFyYXRvcihsb2NhbGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZWNpbWFsOiAoMC4xKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpLnN1YnN0cmluZygxLCAyKSxcbiAgICAgICAgdGhvdXNhbmQ6ICgxMDAwKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpLnN1YnN0cmluZygxLCAyKVxuICAgIH07XG59XG4iLCIvKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgU0lfTUlEID0gODtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBTSSA9IFtcbiAgICB7IHBvd2VyOiAtMjQsIHRleHQ6ICd5b2N0bycsIHZhbHVlOiAneScgfSxcbiAgICB7IHBvd2VyOiAtMjEsIHRleHQ6ICd6ZXB0bycsIHZhbHVlOiAneicgfSxcbiAgICB7IHBvd2VyOiAtMTgsIHRleHQ6ICdhdHRvJywgdmFsdWU6ICdhJyB9LFxuICAgIHsgcG93ZXI6IC0xNSwgdGV4dDogJ2ZlbXRvJywgdmFsdWU6ICdmJyB9LFxuICAgIHsgcG93ZXI6IC0xMiwgdGV4dDogJ3BpY28nLCB2YWx1ZTogJ3AnIH0sXG4gICAgeyBwb3dlcjogLTksIHRleHQ6ICduYW5vJywgdmFsdWU6ICduJyB9LFxuICAgIHsgcG93ZXI6IC02LCB0ZXh0OiAnbWljcm8nLCB2YWx1ZTogJ8K1JyB9LFxuICAgIHsgcG93ZXI6IC0zLCB0ZXh0OiAnbWlsbGknLCB2YWx1ZTogJ20nIH0sXG4gICAgeyBwb3dlcjogMCwgdGV4dDogJ1VuaXQnLCB2YWx1ZTogJy0nIH0sIC8vIHBvc2l0aW9uIDhcbiAgICB7IHBvd2VyOiAzLCB0ZXh0OiAnS2lsbycsIHZhbHVlOiAnaycgfSxcbiAgICB7IHBvd2VyOiA2LCB0ZXh0OiAnTWlsbCcsIHZhbHVlOiAnTScgfSwgLy8gTWVnYSwgTVxuICAgIHsgcG93ZXI6IDksIHRleHQ6ICdCaWxsJywgdmFsdWU6ICdCJyB9LCAvLyBHaWdhLCBHXG4gICAgeyBwb3dlcjogMTIsIHRleHQ6ICdUcmlsJywgdmFsdWU6ICdUJyB9LCAvLyBUZXJhLCBUXG4gICAgeyBwb3dlcjogMTUsIHRleHQ6ICdQZXRhJywgdmFsdWU6ICdQJyB9LFxuICAgIHsgcG93ZXI6IDE4LCB0ZXh0OiAnRXhhJywgdmFsdWU6ICdFJyB9LFxuICAgIHsgcG93ZXI6IDIxLCB0ZXh0OiAnWmV0YScsIHZhbHVlOiAnWicgfSxcbiAgICB7IHBvd2VyOiAyNCwgdGV4dDogJ1lvdHRhJywgdmFsdWU6ICdZJyB9XG5dO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTaSh0eXBlKSB7XG4gICAgLy8gdXNlIGEgbG9vcCBoZXJlLCBiZXR0ZXIgUk4gc3VwcG9ydCAod2hpY2ggZG9lc24ndCBoYXZlIFtdLmZpbmQpXG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gU0kubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBpZiAoU0lbaV0udmFsdWUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBTSVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gU0lbU0lfTUlEXTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjU2kodGV4dCwgZGVjaW1hbHMsIGZvcmNlVW5pdCkge1xuICAgIGlmIChmb3JjZVVuaXQpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRTaShmb3JjZVVuaXQpO1xuICAgIH1cbiAgICBjb25zdCBzaURlZkluZGV4ID0gKFNJX01JRCAtIDEpICsgTWF0aC5jZWlsKCh0ZXh0Lmxlbmd0aCAtIGRlY2ltYWxzKSAvIDMpO1xuICAgIHJldHVybiBTSVtzaURlZkluZGV4XSB8fCBTSVtzaURlZkluZGV4IDwgMCA/IDAgOiBTSS5sZW5ndGggLSAxXTtcbn1cbiIsImltcG9ydCB7IEJpZ0ludCB9IGZyb20gJ0Bwb2xrYWRvdC94LWJpZ2ludCc7XG5pbXBvcnQgeyB4Z2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbi8qKiB0cnVlIGlmIHRoZSBlbnZpcm9ubWVudCBoYXMgcHJvcGVyIEJpZ0ludCBzdXBwb3J0ICovXG5leHBvcnQgY29uc3QgaGFzQmlnSW50ID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgQmlnSW50LmFzSW50TiA9PT0gJ2Z1bmN0aW9uJztcbi8qKiB0cnVlIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBDSlMgKi9cbmV4cG9ydCBjb25zdCBoYXNDanMgPSB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJztcbi8qKiB0cnVlIGlmIHRoZSBlbnZpcm9ubWVudCBoYXMgX19kaXJuYW1lIGF2YWlsYWJsZSAqL1xuZXhwb3J0IGNvbnN0IGhhc0Rpcm5hbWUgPSB0eXBlb2YgX19kaXJuYW1lICE9PSAndW5kZWZpbmVkJztcbi8qKiB0cnVlIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBFU00gKi9cbmV4cG9ydCBjb25zdCBoYXNFc20gPSAhaGFzQ2pzO1xuLyoqIHRydWUgaWYgdGhlIGVudmlyb25tZW50IGhhcyBXZWJBc3NlbWJseSBhdmFpbGFibGUgKi9cbmV4cG9ydCBjb25zdCBoYXNXYXNtID0gdHlwZW9mIFdlYkFzc2VtYmx5ICE9PSAndW5kZWZpbmVkJztcbi8qKiB0cnVlIGlmIHRoZSBlbnZpcm9ubWVudCBoYXMgc3VwcG9ydCBmb3IgQnVmZmVyICh0eXBpY2FsbHkgTm9kZS5qcykgKi9cbmV4cG9ydCBjb25zdCBoYXNCdWZmZXIgPSB0eXBlb2YgeGdsb2JhbC5CdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHhnbG9iYWwuQnVmZmVyLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nO1xuLyoqIHRydWUgaWYgdGhlIGVudmlyb25tZW50IGhhcyBwcm9jZXNzIGF2YWlsYWJsZSAodHlwaWNhbGx5IE5vZGUuanMpICovXG5leHBvcnQgY29uc3QgaGFzUHJvY2VzcyA9IHR5cGVvZiB4Z2xvYmFsLnByb2Nlc3MgPT09ICdvYmplY3QnO1xuIiwiaW1wb3J0IHsgUkVHRVhfSEVYX05PUFJFRklYLCBSRUdFWF9IRVhfUFJFRklYRUQgfSBmcm9tICcuLi9pcy9oZXguanMnO1xuLyoqXG4gKiBAbmFtZSBoZXhTdHJpcFByZWZpeFxuICogQHN1bW1hcnkgU3RyaXBzIGFueSBsZWFkaW5nIGAweGAgcHJlZml4LlxuICogQGRlc2NyaXB0aW9uXG4gKiBUZXN0cyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhIGAweGAgcHJlZml4LCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgd2l0aG91dCB0aGUgcHJlZml4LiBVbi1wcmVmaXhlZCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzLWlzLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBoZXhTdHJpcFByZWZpeCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZygnc3RyaXBwZWQnLCBoZXhTdHJpcFByZWZpeCgnMHgxMjM0JykpOyAvLyA9PiAxMjM0XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFN0cmlwUHJlZml4KHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJzB4Jykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGVsc2UgaWYgKFJFR0VYX0hFWF9QUkVGSVhFRC50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChSRUdFWF9IRVhfTk9QUkVGSVgudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGhleCB2YWx1ZSB0byBjb252ZXJ0LCBmb3VuZCAnJHt2YWx1ZX0nYCk7XG59XG4iLCJpbXBvcnQgeyBCTiB9IGZyb20gJy4uL2JuL2JuLmpzJztcbmltcG9ydCB7IGhleFN0cmlwUHJlZml4IH0gZnJvbSAnLi9zdHJpcFByZWZpeC5qcyc7XG4vKipcbiAqIEBuYW1lIGhleFRvQm5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBCTi5qcyBvYmplY3QgZnJvbSBhIGhleCBzdHJpbmcuXG4gKiBAZGVzY3JpcHRpb25cbiAqIGBudWxsYCBpbnB1dHMgcmV0dXJucyBhIGBCTigwKWAgcmVzdWx0LiBIZXggaW5wdXQgdmFsdWVzIHJldHVybiB0aGUgYWN0dWFsIHZhbHVlIGNvbnZlcnRlZCB0byBhIEJOLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBhIGhleCBzdHJpbmcgKGluY2x1ZGluZyB0aGUgYDB4YCBwcmVmaXgpIHRocm93cyBhbiBlcnJvci5cbiAqIEBwYXJhbSBfdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSBfb3B0aW9ucyBPcHRpb25zIHRvIHBhc3Mgd2hpbGUgY29udmVydGluZ1xuICogQHBhcmFtIF9vcHRpb25zLmlzTGUgQ29udmVydCB1c2luZyBMaXR0bGUgRW5kaWFuXG4gKiBAcGFyYW0gX29wdGlvbnMuaXNOZWdhdGl2ZSBDb252ZXJ0IHVzaW5nIHR3bydzIGNvbXBsZW1lbnRcbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaGV4VG9CbiB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBoZXhUb0JuKCcweDEyMzQ4MDAwMWYnKTsgLy8gPT4gQk4oMHgxMjM0ODAwMDFmKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb0JuKHZhbHVlLCB7IGlzTGUgPSBmYWxzZSwgaXNOZWdhdGl2ZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT09ICcweCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCTigwKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaXBwZWQgPSBoZXhTdHJpcFByZWZpeCh2YWx1ZSk7XG4gICAgY29uc3QgYm4gPSBuZXcgQk4oc3RyaXBwZWQsIDE2LCBpc0xlID8gJ2xlJyA6ICdiZScpO1xuICAgIC8vIGZyb21Ud29zIHRha2VzIGFzIHBhcmFtZXRlciB0aGUgbnVtYmVyIG9mIGJpdHMsIHdoaWNoIGlzIHRoZSBoZXggbGVuZ3RoXG4gICAgLy8gbXVsdGlwbGllZCBieSA0ICgyIGJ5dGVzIGJlaW5nIDggYml0cylcbiAgICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgICAgICA/IGJuLmZyb21Ud29zKHN0cmlwcGVkLmxlbmd0aCAqIDQpXG4gICAgICAgIDogYm47XG59XG4iLCJjb25zdCBDSFIgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5jb25zdCBVOCA9IG5ldyBVaW50OEFycmF5KDI1Nik7XG5jb25zdCBVMTYgPSBuZXcgVWludDhBcnJheSgyNTYgKiAyNTYpO1xuZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gQ0hSLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBVOFtDSFJbaV0uY2hhckNvZGVBdCgwKSB8IDBdID0gaSB8IDA7XG4gICAgaWYgKGkgPiA5KSB7XG4gICAgICAgIFU4W0NIUltpXS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCkgfCAwXSA9IGkgfCAwO1xuICAgIH1cbn1cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICBjb25zdCBzID0gaSA8PCA4O1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMjU2OyBqKyspIHtcbiAgICAgICAgVTE2W3MgfCBqXSA9IChVOFtpXSA8PCA0KSB8IFU4W2pdO1xuICAgIH1cbn1cbi8qKlxuICogQG5hbWUgaGV4VG9VOGFcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBVaW50OEFycmF5IG9iamVjdCBmcm9tIGEgaGV4IHN0cmluZy5cbiAqIEBkZXNjcmlwdGlvblxuICogYG51bGxgIGlucHV0cyByZXR1cm5zIGFuIGVtcHR5IGBVaW50OEFycmF5YCByZXN1bHQuIEhleCBpbnB1dCB2YWx1ZXMgcmV0dXJuIHRoZSBhY3R1YWwgYnl0ZXMgdmFsdWUgY29udmVydGVkIHRvIGEgVWludDhBcnJheS4gQW55dGhpbmcgdGhhdCBpcyBub3QgYSBoZXggc3RyaW5nIChpbmNsdWRpbmcgdGhlIGAweGAgcHJlZml4KSB0aHJvd3MgYW4gZXJyb3IuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGhleFRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGhleFRvVThhKCcweDgwMDAxZicpOyAvLyBVaW50OEFycmF5KFsweDgwLCAweDAwLCAweDFmXSlcbiAqIGhleFRvVThhKCcweDgwMDAxZicsIDMyKTsgLy8gVWludDhBcnJheShbMHgwMCwgMHg4MCwgMHgwMCwgMHgxZl0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvVThhKHZhbHVlLCBiaXRMZW5ndGggPSAtMSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KCk7XG4gICAgfVxuICAgIGxldCBzID0gdmFsdWUuc3RhcnRzV2l0aCgnMHgnKVxuICAgICAgICA/IDJcbiAgICAgICAgOiAwO1xuICAgIGNvbnN0IGRlY0xlbmd0aCA9IE1hdGguY2VpbCgodmFsdWUubGVuZ3RoIC0gcykgLyAyKTtcbiAgICBjb25zdCBlbmRMZW5ndGggPSBNYXRoLmNlaWwoYml0TGVuZ3RoID09PSAtMVxuICAgICAgICA/IGRlY0xlbmd0aFxuICAgICAgICA6IGJpdExlbmd0aCAvIDgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGVuZExlbmd0aCk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gZW5kTGVuZ3RoID4gZGVjTGVuZ3RoXG4gICAgICAgID8gZW5kTGVuZ3RoIC0gZGVjTGVuZ3RoXG4gICAgICAgIDogMDtcbiAgICBmb3IgKGxldCBpID0gb2Zmc2V0OyBpIDwgZW5kTGVuZ3RoOyBpKyssIHMgKz0gMikge1xuICAgICAgICAvLyBUaGUgYmlnIGZhY3RvciBoZXJlIGlzIGFjdHVhbGx5IHRoZSBzdHJpbmcgbG9va3Vwcy4gSWYgd2UgZG9cbiAgICAgICAgLy8gSEVYX1RPX1UxNlt2YWx1ZS5zdWJzdHJpbmcoKV0gd2UgZ2V0IGFuIDEweCBzbG93ZG93bi4gSW4gdGhlXG4gICAgICAgIC8vIHNhbWUgdmVpbiB1c2luZyBjaGFyQ29kZUF0IChhcyBvcHBvc2VkIHRvIHZhbHVlW3NdIG9yIHZhbHVlLmNoYXJBdChzKSkgaXNcbiAgICAgICAgLy8gYWxzbyB0aGUgZmFzdGVyIG9wZXJhdGlvbiBieSBhdCBsZWFzdCAyeCB3aXRoIHRoZSBjaGFyYWN0ZXIgbWFwIGFib3ZlXG4gICAgICAgIHJlc3VsdFtpXSA9IFUxNlsodmFsdWUuY2hhckNvZGVBdChzKSA8PCA4KSB8IHZhbHVlLmNoYXJDb2RlQXQocyArIDEpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsImltcG9ydCB7IHU4YVRvVThhIH0gZnJvbSAnLi4vdThhL3RvVThhLmpzJztcbmltcG9ydCB7IGlzSGV4IH0gZnJvbSAnLi9oZXguanMnO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuL3N0cmluZy5qcyc7XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBpc0FzY2lpU3RyKHN0cikge1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHN0ci5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gY2hlY2sgaXMgaW5saW5lZCBoZXJlLCBpdCBpcyBmYXN0ZXIgdGhhbiBtYWtpbmcgYSBjYWxsXG4gICAgICAgIGlmIChiIDwgMzIgfHwgYiA+IDEyNikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gaXNBc2NpaUJ5dGVzKHU4YSkge1xuICAgIGZvciAobGV0IGkgPSAwLCBjb3VudCA9IHU4YS5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGIgPSB1OGFbaV0gfCAwO1xuICAgICAgICAvLyBjaGVjayBpcyBpbmxpbmVkIGhlcmUsIGl0IGlzIGZhc3RlciB0aGFuIG1ha2luZyBhIGNhbGxcbiAgICAgICAgaWYgKGIgPCAzMiB8fCBiID4gMTI2KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEBuYW1lIGlzQXNjaWlcbiAqIEBzdW1tYXJ5IFRlc3RzIGlmIHRoZSBpbnB1dCBpcyBwcmludGFibGUgQVNDSUlcbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW5wdXQgc3RyaW5nIG9yIFVpbnQ4QXJyYXkgaXMgcHJpbnRhYmxlIEFTQ0lJLCAzMi0xMjcgKyBmb3JtYXR0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzY2lpKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICA/IGlzSGV4KHZhbHVlKVxuICAgICAgICAgICAgPyBpc0FzY2lpQnl0ZXModThhVG9VOGEodmFsdWUpKVxuICAgICAgICAgICAgOiBpc0FzY2lpU3RyKHZhbHVlKVxuICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICA/IGlzQXNjaWlCeXRlcyh2YWx1ZSlcbiAgICAgICAgICAgIDogZmFsc2U7XG59XG4iLCIvKipcbiAqIEBuYW1lIGlzQmlnSW50XG4gKiBAc3VtbWFyeSBUZXN0cyBmb3IgYSBgQmlnSW50YCBvYmplY3QgaW5zdGFuY2UuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBgQmlnSW50YFxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc0JpZ0ludCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZygnaXNCaWdJbnQnLCBpc0JpZ0ludCgxMjNfNDU2bikpOyAvLyA9PiB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCc7XG59XG4iLCJpbXBvcnQgeyBCTiB9IGZyb20gJy4uL2JuL2JuLmpzJztcbi8qKlxuICogQG5hbWUgaXNCblxuICogQHN1bW1hcnkgVGVzdHMgZm9yIGEgYEJOYCBvYmplY3QgaW5zdGFuY2UuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBgQk5gIChibi5qcykuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBCTiBmcm9tICdibi5qcyc7XG4gKiBpbXBvcnQgeyBpc0JuIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnNvbGUubG9nKCdpc0JuJywgaXNCbihuZXcgQk4oMSkpKTsgLy8gPT4gdHJ1ZVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JuKHZhbHVlKSB7XG4gICAgcmV0dXJuIEJOLmlzQk4odmFsdWUpO1xufVxuIiwiLyoqXG4gKiBAbmFtZSBpc0Jvb2xlYW5cbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhIGJvb2xlYW4gdmFsdWUuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGEgSmF2YVNjcmlwdCBib29sZWFuLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogaXNCb29sZWFuKGZhbHNlKTsgLy8gPT4gdHJ1ZVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG4iLCJpbXBvcnQgeyB4Z2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmltcG9ydCB7IGhhc0J1ZmZlciB9IGZyb20gJy4uL2hhcy5qcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9mdW5jdGlvbi5qcyc7XG4vKipcbiAqIEBuYW1lIGlzQnVmZmVyXG4gKiBAc3VtbWFyeSBUZXN0cyBmb3IgYSBgQnVmZmVyYCBvYmplY3QgaW5zdGFuY2UuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBgQnVmZmVyYC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coJ2lzQnVmZmVyJywgaXNCdWZmZXIoQnVmZmVyLmZyb20oW10pKSk7IC8vID0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCdWZmZXIodmFsdWUpIHtcbiAgICAvLyB3ZSBkbyBjaGVjayBhIGZ1bmN0aW9uIGZpcnN0LCBzaW5jZSBpdCBpcyBzbGlnaHRseSBmYXN0ZXIgdGhhbiBpc0J1ZmZlciBpdHNlbGZcbiAgICByZXR1cm4gaGFzQnVmZmVyICYmICEhdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZWFkRG91YmxlTEUpICYmIHhnbG9iYWwuQnVmZmVyLmlzQnVmZmVyKHZhbHVlKTtcbn1cbiIsImltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tICcuL2NsYXNzLmpzJztcbi8qKlxuICogQG5hbWUgaXNDaGlsZENsYXNzXG4gKiBAc3VtbWFyeSBUZXN0cyBpZiB0aGUgY2hpbGQgZXh0ZW5kcyB0aGUgcGFyZW50IENsYXNzXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGNoaWxkIENsYXNzIGV4dGVuZHMgdGhlIHBhcmVudCBDbGFzc1xuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc0NoaWxkQ2xhc3MgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coJ2lzQ2hpbGRDbGFzcycsIGlzQ2hpbGRDbGFzcyhCTiwgQk4pOyAvLyA9PiB0cnVlXG4gKiBjb25zb2xlLmxvZygnaXNDaGlsZENsYXNzJywgaXNDaGlsZENsYXNzKEJOLCBVaW50OEFycmF5KTsgLy8gPT4gZmFsc2VcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGlsZENsYXNzKFBhcmVudCwgQ2hpbGQpIHtcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDk5MzQzNC9jaGVjay1pZi1hLWNvbnN0cnVjdG9yLWluaGVyaXRzLWFub3RoZXItaW4tZXM2LzMwOTkzNjY0XG4gICAgcmV0dXJuIGlzQ2xhc3MoQ2hpbGQpICYmIGlzQ2xhc3MoUGFyZW50KVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgID8gUGFyZW50ID09PSBDaGlsZCB8fCBQYXJlbnQuaXNQcm90b3R5cGVPZihDaGlsZClcbiAgICAgICAgOiBmYWxzZTtcbn1cbiIsImltcG9ydCB7IGlzT25GdW5jdGlvbiB9IGZyb20gJy4vaGVscGVycy5qcyc7XG4vKipcbiAqIEBuYW1lIGlzQ2xhc3NcbiAqIFRlc3RzIGlmIHRoZSBzdXBwbGllZCBhcmd1bWVudCBpcyBhIENsYXNzXG4gKi9cbmV4cG9ydCBjb25zdCBpc0NsYXNzID0gLyojX19QVVJFX18qLyBpc09uRnVuY3Rpb24oJ2lzUHJvdG90eXBlT2YnLCAnaGFzT3duUHJvcGVydHknKTtcbiIsImltcG9ydCB7IGlzT25PYmplY3QgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuY29uc3QgY2hlY2tDb2RlYyA9IC8qI19fUFVSRV9fKi8gaXNPbk9iamVjdCgndG9IZXgnLCAndG9IdW1hbicsICd0b1U4YScpO1xuY29uc3QgY2hlY2tSZWdpc3RyeSA9IC8qI19fUFVSRV9fKi8gaXNPbk9iamVjdCgnZ2V0Jyk7XG5leHBvcnQgZnVuY3Rpb24gaXNDb2RlYyh2YWx1ZSkge1xuICAgIHJldHVybiBjaGVja0NvZGVjKHZhbHVlKSAmJiBjaGVja1JlZ2lzdHJ5KHZhbHVlLnJlZ2lzdHJ5KTtcbn1cbiIsImltcG9ydCB7IGlzT25PYmplY3QgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuLyoqXG4gKiBAbmFtZSBpc0NvbXBhY3RcbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBTQ0FMRS1Db21wYWN0LWxpa2Ugb2JqZWN0IGluc3RhbmNlLlxuICovXG5leHBvcnQgY29uc3QgaXNDb21wYWN0ID0gLyojX19QVVJFX18qLyBpc09uT2JqZWN0KCd0b0JpZ0ludCcsICd0b0JuJywgJ3RvTnVtYmVyJywgJ3Vud3JhcCcpO1xuIiwiLyoqXG4gKiBAbmFtZSBpc0Z1bmN0aW9uXG4gKiBAc3VtbWFyeSBUZXN0cyBmb3IgYSBgZnVuY3Rpb25gLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogaXNGdW5jdGlvbigoKSA9PiBmYWxzZSk7IC8vID0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4vb2JqZWN0LmpzJztcbmV4cG9ydCBmdW5jdGlvbiBpc09uKC4uLmZucykge1xuICAgIHJldHVybiAodmFsdWUpID0+IChpc09iamVjdCh2YWx1ZSkgfHwgaXNGdW5jdGlvbih2YWx1ZSkpICYmXG4gICAgICAgIGZucy5ldmVyeSgoZikgPT4gaXNGdW5jdGlvbih2YWx1ZVtmXSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzT25GdW5jdGlvbiguLi5mbnMpIHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiBpc0Z1bmN0aW9uKHZhbHVlKSAmJlxuICAgICAgICBmbnMuZXZlcnkoKGYpID0+IGlzRnVuY3Rpb24odmFsdWVbZl0pKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09uT2JqZWN0KC4uLmZucykge1xuICAgIHJldHVybiAodmFsdWUpID0+IGlzT2JqZWN0KHZhbHVlKSAmJlxuICAgICAgICBmbnMuZXZlcnkoKGYpID0+IGlzRnVuY3Rpb24odmFsdWVbZl0pKTtcbn1cbiIsImV4cG9ydCBjb25zdCBSRUdFWF9IRVhfUFJFRklYRUQgPSAvXjB4W1xcZGEtZkEtRl0rJC87XG5leHBvcnQgY29uc3QgUkVHRVhfSEVYX05PUFJFRklYID0gL15bXFxkYS1mQS1GXSskLztcbi8qKlxuICogQG5hbWUgaXNIZXhcbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhIGhleCBzdHJpbmcuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGEgYDB4YCBwcmVmaXhlZCBoZXggc3RyaW5nLiBPcHRpb25hbGx5IChgYml0TGVuZ3RoYCAhPT0gLTEpIGNoZWNrcyB0byBzZWUgaWYgdGhlIGJpdExlbmd0aCBpcyBjb3JyZWN0LlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBpc0hleCgnMHgxMjM0Jyk7IC8vID0+IHRydWVcbiAqIGlzSGV4KCcweDEyMzQnLCA4KTsgLy8gPT4gZmFsc2VcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIZXgodmFsdWUsIGJpdExlbmd0aCA9IC0xLCBpZ25vcmVMZW5ndGgpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgKHZhbHVlID09PSAnMHgnIHx8XG4gICAgICAgIFJFR0VYX0hFWF9QUkVGSVhFRC50ZXN0KHZhbHVlKSkpICYmIChiaXRMZW5ndGggPT09IC0xXG4gICAgICAgID8gKGlnbm9yZUxlbmd0aCB8fCAodmFsdWUubGVuZ3RoICUgMiA9PT0gMCkpXG4gICAgICAgIDogKHZhbHVlLmxlbmd0aCA9PT0gKDIgKyBNYXRoLmNlaWwoYml0TGVuZ3RoIC8gNCkpKSk7XG59XG4iLCIvKipcbiAqIEBuYW1lIGlzTnVsbFxuICogQHN1bW1hcnkgVGVzdHMgZm9yIGEgYG51bGxgIHZhbHVlcy5cbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYG51bGxgLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc051bGwgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogY29uc29sZS5sb2coJ2lzTnVsbCcsIGlzTnVsbChudWxsKSk7IC8vID0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuIiwiLyoqXG4gKiBAbmFtZSBpc051bWJlclxuICogQHN1bW1hcnkgVGVzdHMgZm9yIGEgSmF2YVNjcmlwdCBudW1iZXIuXG4gKiBAZGVzY3JpcHRpb25cbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGEgdmFsaWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc051bWJlciB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZygnaXNOdW1iZXInLCBpc051bWJlcigxMjM0KSk7IC8vID0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cbiIsIi8qKlxuICogQG5hbWUgaXNPYmplY3RcbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhbiBgb2JqZWN0YC5cbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogaXNPYmplY3Qoe30pOyAvLyA9PiB0cnVlXG4gKiBpc09iamVjdCgnc29tZXRoaW5nJyk7IC8vID0+IGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jztcbn1cbiIsImltcG9ydCB7IGlzT25PYmplY3QgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuZXhwb3J0IGNvbnN0IGlzUHJvbWlzZSA9IC8qI19fUFVSRV9fKi8gaXNPbk9iamVjdCgnY2F0Y2gnLCAndGhlbicpO1xuIiwiLyoqXG4gKiBAbmFtZSBpc1N0cmluZ1xuICogQHN1bW1hcnkgVGVzdHMgZm9yIGEgc3RyaW5nLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIEphdmFTY3JpcHQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zb2xlLmxvZygnaXNTdHJpbmcnLCBpc1N0cmluZygndGVzdCcpKTsgLy8gPT4gdHJ1ZVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufVxuIiwiaW1wb3J0IHsgaXNPbiB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5leHBvcnQgY29uc3QgaXNUb0JpZ0ludCA9IC8qI19fUFVSRV9fKi8gaXNPbigndG9CaWdJbnQnKTtcbiIsImltcG9ydCB7IGlzT24gfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuZXhwb3J0IGNvbnN0IGlzVG9CbiA9IC8qI19fUFVSRV9fKi8gaXNPbigndG9CbicpO1xuIiwiLyoqXG4gKiBAbmFtZSBpc1U4YVxuICogQHN1bW1hcnkgVGVzdHMgZm9yIGEgYFVpbnQ4QXJyYXlgIG9iamVjdCBpbnN0YW5jZS5cbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW5wdXQgb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGBVaW50OEFycmF5YC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgaXNVaW50OEFycmF5IH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnNvbGUubG9nKCdpc1U4YScsIGlzVThhKFtdKSk7IC8vID0+IGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVThhKHZhbHVlKSB7XG4gICAgLy8gaGVyZSB3ZSBkZWZlciB0aGUgaW5zdGFuY2VvZiBjaGVjayB3aGljaCBpcyBhY3R1YWxseSBzbGlnaHRseVxuICAgIC8vIHNsb3dlciB0aGFuIGp1c3QgY2hlY2tpbmcgdGhlIGNvbnN0cmN0b3IgKGRpcmVjdCBpbnN0YW5jZXMpXG4gICAgcmV0dXJuICgoKHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yKSA9PT0gVWludDhBcnJheSkgfHxcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KTtcbn1cbiIsIi8qKlxuICogQG5hbWUgaXNVbmRlZmluZWRcbiAqIEBzdW1tYXJ5IFRlc3RzIGZvciBhIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYHVuZGVmaW5lZGAuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIGNvbnNvbGUubG9nKCdpc1VuZGVmaW5lZCcsIGlzVW5kZWZpbmVkKHZvaWQoMCkpKTsgLy8gPT4gdHJ1ZVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuIiwiaW1wb3J0IHsgdThhVG9VOGEgfSBmcm9tICcuLi91OGEvdG9VOGEuanMnO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuL3N0cmluZy5qcyc7XG4vKipcbiAqIEBuYW1lIGlzVXRmOFxuICogQHN1bW1hcnkgVGVzdHMgaWYgdGhlIGlucHV0IGlzIHZhbGlkIFV0ZjhcbiAqIEBkZXNjcmlwdGlvblxuICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaW5wdXQgc3RyaW5nIG9yIFVpbnQ4QXJyYXkgaXMgdmFsaWQgVXRmOFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVdGY4KHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCB1OGEgPSB1OGFUb1U4YSh2YWx1ZSk7XG4gICAgY29uc3QgbGVuID0gdThhLmxlbmd0aDtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgaWYgKHU4YVtpXSA8PSAweDdGKSAvKiAwMC4uN0YgKi8ge1xuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHU4YVtpXSA+PSAweEMyICYmIHU4YVtpXSA8PSAweERGKSAvKiBDMi4uREYgODAuLkJGICovIHtcbiAgICAgICAgICAgIGlmIChpICsgMSA8IGxlbikgLyogRXhwZWN0IGEgMm5kIGJ5dGUgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDFdIDwgMHg4MCB8fCB1OGFbaSArIDFdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIGJldHdlZW4gQzIgYW5kIERGLCBleHBlY3RpbmcgYSAybmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgYmV0d2VlbiBDMiBhbmQgREYsIGV4cGVjdGluZyBhIDJuZCBieXRlLlwiO1xuICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1OGFbaV0gPT09IDB4RTApIC8qIEUwIEEwLi5CRiA4MC4uQkYgKi8ge1xuICAgICAgICAgICAgaWYgKGkgKyAyIDwgbGVuKSAvKiBFeHBlY3QgYSAybmQgYW5kIDNyZCBieXRlICovIHtcbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAxXSA8IDB4QTAgfHwgdThhW2kgKyAxXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBFMCwgZXhwZWN0aW5nIGEgMm5kIGJ5dGUgYmV0d2VlbiBBMCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAyO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDJdIDwgMHg4MCB8fCB1OGFbaSArIDJdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEUwLCBleHBlY3RpbmcgYSAzbmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEUwLCBleHBlY3RpbmcgdHdvIGZvbGxvd2luZyBieXRlcy5cIjtcbiAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodThhW2ldID49IDB4RTEgJiYgdThhW2ldIDw9IDB4RUMpIC8qIEUxLi5FQyA4MC4uQkYgODAuLkJGICovIHtcbiAgICAgICAgICAgIGlmIChpICsgMiA8IGxlbikgLyogRXhwZWN0IGEgMm5kIGFuZCAzcmQgYnl0ZSAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMV0gPCAweDgwIHx8IHU4YVtpICsgMV0gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgYmV0d2VlbiBFMSBhbmQgRUMsIGV4cGVjdGluZyB0aGUgMm5kIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAyO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDJdIDwgMHg4MCB8fCB1OGFbaSArIDJdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIGJldHdlZW4gRTEgYW5kIEVDLCBleHBlY3RpbmcgdGhlIDNyZCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgYmV0d2VlbiBFMSBhbmQgRUMsIGV4cGVjdGluZyB0d28gZm9sbG93aW5nIGJ5dGVzLlwiO1xuICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1OGFbaV0gPT09IDB4RUQpIC8qIEVEIDgwLi45RiA4MC4uQkYgKi8ge1xuICAgICAgICAgICAgaWYgKGkgKyAyIDwgbGVuKSAvKiBFeHBlY3QgYSAybmQgYW5kIDNyZCBieXRlICovIHtcbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAxXSA8IDB4ODAgfHwgdThhW2kgKyAxXSA+IDB4OUYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBFRCwgZXhwZWN0aW5nIDJuZCBieXRlIGJldHdlZW4gODAgYW5kIDlGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAyXSA8IDB4ODAgfHwgdThhW2kgKyAyXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBFRCwgZXhwZWN0aW5nIDNyZCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRUQsIGV4cGVjdGluZyB0d28gZm9sbG93aW5nIGJ5dGVzLlwiO1xuICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1OGFbaV0gPj0gMHhFRSAmJiB1OGFbaV0gPD0gMHhFRikgLyogRUUuLkVGIDgwLi5CRiA4MC4uQkYgKi8ge1xuICAgICAgICAgICAgaWYgKGkgKyAyIDwgbGVuKSAvKiBFeHBlY3QgYSAybmQgYW5kIDNyZCBieXRlICovIHtcbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAxXSA8IDB4ODAgfHwgdThhW2kgKyAxXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBiZXR3ZWVuIEVFIGFuZCBFRiwgZXhwZWN0aW5nIDJuZCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAyXSA8IDB4ODAgfHwgdThhW2kgKyAyXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBiZXR3ZWVuIEVFIGFuZCBFRiwgZXhwZWN0aW5nIDNyZCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgYmV0d2VlbiBFRSBhbmQgRUYsIHR3byBmb2xsb3dpbmcgYnl0ZXMuXCI7XG4gICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSAzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHU4YVtpXSA9PT0gMHhGMCkgLyogRjAgOTAuLkJGIDgwLi5CRiA4MC4uQkYgKi8ge1xuICAgICAgICAgICAgaWYgKGkgKyAzIDwgbGVuKSAvKiBFeHBlY3QgYSAybmQsIDNyZCAzdGggYnl0ZSAqLyB7XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMV0gPCAweDkwIHx8IHU4YVtpICsgMV0gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRjAsIGV4cGVjdGluZyAybmQgYnl0ZSBiZXR3ZWVuIDkwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgMl0gPCAweDgwIHx8IHU4YVtpICsgMl0gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRjAsIGV4cGVjdGluZyAzcmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgM10gPCAweDgwIHx8IHU4YVtpICsgM10gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRjAsIGV4cGVjdGluZyA0dGggYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEYwLCBleHBlY3RpbmcgdGhyZWUgZm9sbG93aW5nIGJ5dGVzLlwiO1xuICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1OGFbaV0gPj0gMHhGMSAmJiB1OGFbaV0gPD0gMHhGMykgLyogRjEuLkYzIDgwLi5CRiA4MC4uQkYgODAuLkJGICovIHtcbiAgICAgICAgICAgIGlmIChpICsgMyA8IGxlbikgLyogRXhwZWN0IGEgMm5kLCAzcmQgM3RoIGJ5dGUgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDFdIDwgMHg4MCB8fCB1OGFbaSArIDFdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEYxLCBGMiwgb3IgRjMsIGV4cGVjdGluZyBhIDJuZCBieXRlIGJldHdlZW4gODAgYW5kIEJGLlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodThhW2kgKyAyXSA8IDB4ODAgfHwgdThhW2kgKyAyXSA+IDB4QkYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBGMSwgRjIsIG9yIEYzLCBleHBlY3RpbmcgYSAzcmQgYnl0ZSBiZXR3ZWVuIDgwIGFuZCBCRi5cIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHU4YVtpICsgM10gPCAweDgwIHx8IHU4YVtpICsgM10gPiAweEJGKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vICptZXNzYWdlID0gXCJBZnRlciBhIGZpcnN0IGJ5dGUgb2YgRjEsIEYyLCBvciBGMywgZXhwZWN0aW5nIGEgNHRoIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSA0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBGMSwgRjIsIG9yIEYzLCBleHBlY3RpbmcgdGhyZWUgZm9sbG93aW5nIGJ5dGVzLlwiO1xuICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1OGFbaV0gPT09IDB4RjQpIC8qIEY0IDgwLi44RiA4MC4uQkYgODAuLkJGICovIHtcbiAgICAgICAgICAgIGlmIChpICsgMyA8IGxlbikgLyogRXhwZWN0IGEgMm5kLCAzcmQgM3RoIGJ5dGUgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDFdIDwgMHg4MCB8fCB1OGFbaSArIDFdID4gMHg4Rikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEY0LCBleHBlY3RpbmcgMm5kIGJ5dGUgYmV0d2VlbiA4MCBhbmQgOEYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAyO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDJdIDwgMHg4MCB8fCB1OGFbaSArIDJdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEY0LCBleHBlY3RpbmcgM3JkIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSAzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1OGFbaSArIDNdIDwgMHg4MCB8fCB1OGFbaSArIDNdID4gMHhCRikge1xuICAgICAgICAgICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiQWZ0ZXIgYSBmaXJzdCBieXRlIG9mIEY0LCBleHBlY3RpbmcgNHRoIGJ5dGUgYmV0d2VlbiA4MCBhbmQgQkYuXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vICpmYXVsdHlfYnl0ZXMgPSA0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gKm1lc3NhZ2UgPSBcIkFmdGVyIGEgZmlyc3QgYnl0ZSBvZiBGNCwgZXhwZWN0aW5nIHRocmVlIGZvbGxvd2luZyBieXRlcy5cIjtcbiAgICAgICAgICAgICAgICAvLyAqZmF1bHR5X2J5dGVzID0gMTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyAqbWVzc2FnZSA9IFwiRXhwZWN0aW5nIGJ5dGVzIGluIHRoZSBmb2xsb3dpbmcgcmFuZ2VzOiAwMC4uN0YgQzIuLkY0LlwiO1xuICAgICAgICAgICAgLy8gKmZhdWx0eV9ieXRlcyA9IDE7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCIvKipcbiAqIEBuYW1lIGxhenlNZXRob2RcbiAqIEBkZXNjcmlwdGlvblxuICogQ3JlYXRlcyBhIGxhenksIG9uLWRlbWFuZCBnZXR0ZXIgZm9yIHRoZSBzcGVjaWZpYyB2YWx1ZS4gVXBvbiBnZXQgdGhlIHZhbHVlIHdpbGwgYmUgZXZhbHVhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF6eU1ldGhvZChyZXN1bHQsIGl0ZW0sIGNyZWF0b3IsIGdldE5hbWUsIGluZGV4ID0gMCkge1xuICAgIGNvbnN0IG5hbWUgPSBnZXROYW1lXG4gICAgICAgID8gZ2V0TmFtZShpdGVtLCBpbmRleClcbiAgICAgICAgOiBpdGVtLnRvU3RyaW5nKCk7XG4gICAgbGV0IHZhbHVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIG5hbWUsIHtcbiAgICAgICAgLy8gVGhpcyBhbGxvd3MgZm9yIHJlLWNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgZW1iZWRkZWQgZGVmaW5lUHJvcGVydHkgYmVsb3dcbiAgICAgICAgLy8gYW5kIGVuc3VyZXMgdGhhdCBvbiB0ZXN0ZWQgYnJvd3NlcnMgYW5kIE5vZGUsIGl0IF93aWxsXyBiZSByZWRlZmluZWRcbiAgICAgICAgLy8gYW5kIHRodXMgc2hvcnQtY2lyY3VpdGVkIGZvciBmdXR1cmUgYWNjZXNzXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgLy8gVXNlIGEgZnVuY3Rpb24gaGVyZSwgd2UgZG9uJ3Qgd2FudCB0byBjYXB0dXJlIHRoZSBvdXRlciB0aGlzLCBpLmUuXG4gICAgICAgIC8vIGRvbid0IHVzZSBhcnJvdyBmdW5jdGlvbnMgaW4gdGhpcyBjb250ZXh0IHNpbmNlIHdlIGhhdmUgYSB0aGlzIGluc2lkZVxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIF9hbHdheXNfIGJlIGZhbHNlIGFuZCB1bm5lZWRlZCwgc2luY2Ugd2Ugb3ZlcnJpZGVcbiAgICAgICAgICAgIC8vIHdpdGggYSB2YWx1ZSBiZWxvdyAuLi4gaG93ZXZlciB3ZSBlbnN1cmUgd2UgYXJlIHF1aXJlIHZpZ2lsYW50IGFnYWluc3RcbiAgICAgICAgICAgIC8vIGFsbCBlbnZpcm9ubWVudCBmYWlsdXJlcywgc28gd2UgYXJlIHJhdGhlciBiZSBzYWZlIHRoYW4gc29ycnlcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjcmVhdG9yKGl0ZW0sIGluZGV4LCB0aGlzKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyByZS1kZWZpbmUgdGhlIHByb3BlcnR5IGFzIGEgdmFsdWUsIG5leHQgdGltZSBhcm91bmQgdGhpc1xuICAgICAgICAgICAgICAgICAgICAvLyBnZXR0ZXIgd2lsbCBvbmx5IHJldHVybiB0aGUgY29tcHV0ZWQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHsgdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGFueSBlcnJvcnMsIHNpbmNlIHRoaXMgX3Nob3VsZF8gbm90IGhhcHBlbiBkdWUgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFwiY29uZmlndXJhYmxlXCIgcHJvcGVydHkgYWJvdmUuIEJ1dCBpZiBpdCBldmVyIGRvZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBoZXJlLW9uIHdlIHdpbGwgYmUgdGhlIGNhY2hlZCB2YWx1ZSB0aGUgbmV4dCB0aW1lXG4gICAgICAgICAgICAgICAgICAgIC8vIGFyb3VuZCAod2l0aCBhIHZlcnkgc2xpZ2h0IGRpcCBpbiBwZXJmb3JtYW5jZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQG5hbWUgbGF6eU1ldGhvZHNcbiAqIEBkZXNjcmlwdGlvblxuICogQ3JlYXRlcyBsYXp5LCBvbi1kZW1hbmQgZ2V0dGVycyBmb3IgdGhlIHNwZWNpZmljIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhenlNZXRob2RzKHJlc3VsdCwgaXRlbXMsIGNyZWF0b3IsIGdldE5hbWUpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBpdGVtcy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGxhenlNZXRob2QocmVzdWx0LCBpdGVtc1tpXSwgY3JlYXRvciwgZ2V0TmFtZSwgaSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyB4Z2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuL2Zvcm1hdC9mb3JtYXREYXRlLmpzJztcbmltcG9ydCB7IGlzQm4gfSBmcm9tICcuL2lzL2JuLmpzJztcbmltcG9ydCB7IGlzQnVmZmVyIH0gZnJvbSAnLi9pcy9idWZmZXIuanMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXMvZnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuL2lzL29iamVjdC5qcyc7XG5pbXBvcnQgeyBpc1U4YSB9IGZyb20gJy4vaXMvdThhLmpzJztcbmltcG9ydCB7IHU4YVRvSGV4IH0gZnJvbSAnLi91OGEvdG9IZXguanMnO1xuaW1wb3J0IHsgdThhVG9VOGEgfSBmcm9tICcuL3U4YS90b1U4YS5qcyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi9ub29wLmpzJztcbmNvbnN0IGxvZ1RvID0ge1xuICAgIGRlYnVnOiAnbG9nJyxcbiAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICBsb2c6ICdsb2cnLFxuICAgIHdhcm46ICd3YXJuJ1xufTtcbmZ1bmN0aW9uIGZvcm1hdE90aGVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IGxvZ2dlckZvcm1hdCh2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gbG9nZ2VyRm9ybWF0KHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAobG9nZ2VyRm9ybWF0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNCbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzVThhKHZhbHVlKSB8fCBpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHU4YVRvSGV4KHU4YVRvVThhKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXRPdGhlcih2YWx1ZSk7XG59XG5mdW5jdGlvbiBmb3JtYXRXaXRoTGVuZ3RoKG1heExlbmd0aCkge1xuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICBpZiAobWF4TGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBgJHt2fWA7XG4gICAgICAgIHJldHVybiByLmxlbmd0aCA8IG1heExlbmd0aFxuICAgICAgICAgICAgPyB2XG4gICAgICAgICAgICA6IGAke3Iuc3Vic3RyaW5nKDAsIG1heExlbmd0aCl9IC4uLmA7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGFwcGx5KGxvZywgdHlwZSwgdmFsdWVzLCBtYXhTaXplID0gLTEpIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiBpc0Z1bmN0aW9uKHZhbHVlc1swXSkpIHtcbiAgICAgICAgY29uc3QgZm5SZXN1bHQgPSB2YWx1ZXNbMF0oKTtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGxvZywgdHlwZSwgQXJyYXkuaXNBcnJheShmblJlc3VsdCkgPyBmblJlc3VsdCA6IFtmblJlc3VsdF0sIG1heFNpemUpO1xuICAgIH1cbiAgICBjb25zb2xlW2xvZ1RvW2xvZ11dKGZvcm1hdERhdGUobmV3IERhdGUoKSksIHR5cGUsIC4uLnZhbHVlc1xuICAgICAgICAubWFwKGxvZ2dlckZvcm1hdClcbiAgICAgICAgLm1hcChmb3JtYXRXaXRoTGVuZ3RoKG1heFNpemUpKSk7XG59XG5mdW5jdGlvbiBpc0RlYnVnT24oZSwgdHlwZSkge1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09ICcqJyB8fFxuICAgICAgICB0eXBlID09PSBlIHx8XG4gICAgICAgIChlLmVuZHNXaXRoKCcqJykgJiZcbiAgICAgICAgICAgIHR5cGUuc3RhcnRzV2l0aChlLnNsaWNlKDAsIC0xKSkpKTtcbn1cbmZ1bmN0aW9uIGlzRGVidWdPZmYoZSwgdHlwZSkge1xuICAgIHJldHVybiAhIWUgJiYgKGUuc3RhcnRzV2l0aCgnLScpICYmXG4gICAgICAgICh0eXBlID09PSBlLnNsaWNlKDEpIHx8XG4gICAgICAgICAgICAoZS5lbmRzV2l0aCgnKicpICYmXG4gICAgICAgICAgICAgICAgdHlwZS5zdGFydHNXaXRoKGUuc2xpY2UoMSwgLTEpKSkpKTtcbn1cbmZ1bmN0aW9uIGdldERlYnVnRmxhZyhlbnYsIHR5cGUpIHtcbiAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgZSBvZiBlbnYpIHtcbiAgICAgICAgaWYgKGlzRGVidWdPbihlLCB0eXBlKSkge1xuICAgICAgICAgICAgZmxhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNEZWJ1Z09mZihlLCB0eXBlKSkge1xuICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbGFnO1xufVxuZnVuY3Rpb24gcGFyc2VFbnYodHlwZSkge1xuICAgIGNvbnN0IG1heFNpemUgPSBwYXJzZUludCh4Z2xvYmFsLnByb2Nlc3M/LmVudj8uWydERUJVR19NQVgnXSB8fCAnLTEnLCAxMCk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgZ2V0RGVidWdGbGFnKCh4Z2xvYmFsLnByb2Nlc3M/LmVudj8uWydERUJVRyddIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJyksIHR5cGUpLFxuICAgICAgICBpc05hTihtYXhTaXplKVxuICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgOiBtYXhTaXplXG4gICAgXTtcbn1cbi8qKlxuICogQG5hbWUgTG9nZ2VyXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgY29uc2lzdGVudCBsb2cgaW50ZXJmYWNlIGZvciBtZXNzYWdlc1xuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgYExvZ2dlcmAgdGhhdCBoYXMgYC5sb2dgLCBgLmVycm9yYCwgYC53YXJuYCBhbmQgYC5kZWJ1Z2AgKGNvbnRyb2xsZWQgd2l0aCBlbnZpcm9ubWVudCBgREVCVUc9dHlwZUEsdHlwZUJgKSBtZXRob2RzLiBMb2dnaW5nIGlzIGRvbmUgd2l0aCBhIGNvbnNpc3RlbnQgcHJlZml4ICh0eXBlIG9mIGxvZ2dlciwgZGF0ZSkgZm9sbG93ZWQgYnkgdGhlIGFjdHVhbCBtZXNzYWdlIHVzaW5nIHRoZSB1bmRlcmx5aW5nIGNvbnNvbGUuXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBjb25zdCBsID0gbG9nZ2VyKCd0ZXN0Jyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ2dlcihvcmlnaW4pIHtcbiAgICBjb25zdCB0eXBlID0gYCR7b3JpZ2luLnRvVXBwZXJDYXNlKCl9OmAucGFkU3RhcnQoMTYpO1xuICAgIGNvbnN0IFtpc0RlYnVnLCBtYXhTaXplXSA9IHBhcnNlRW52KG9yaWdpbi50b0xvd2VyQ2FzZSgpKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBkZWJ1ZzogaXNEZWJ1Z1xuICAgICAgICAgICAgPyAoLi4udmFsdWVzKSA9PiBhcHBseSgnZGVidWcnLCB0eXBlLCB2YWx1ZXMsIG1heFNpemUpXG4gICAgICAgICAgICA6IG5vb3AsXG4gICAgICAgIGVycm9yOiAoLi4udmFsdWVzKSA9PiBhcHBseSgnZXJyb3InLCB0eXBlLCB2YWx1ZXMpLFxuICAgICAgICBsb2c6ICguLi52YWx1ZXMpID0+IGFwcGx5KCdsb2cnLCB0eXBlLCB2YWx1ZXMpLFxuICAgICAgICBub29wLFxuICAgICAgICB3YXJuOiAoLi4udmFsdWVzKSA9PiBhcHBseSgnd2FybicsIHR5cGUsIHZhbHVlcylcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuZnVuY3Rpb24gZGVmYXVsdEdldElkKCkge1xuICAgIHJldHVybiAnbm9uZSc7XG59XG4vKipcbiAqIEBuYW1lIG1lbW9pemVcbiAqIEBkZXNjcmlwdGlvbiBNZW1vbWl6ZSB0aGUgZnVuY3Rpb24gd2l0aCBhIHNwZWNpZmljIGluc3RhbmNlSWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW9pemUoZm4sIHsgZ2V0SW5zdGFuY2VJZCA9IGRlZmF1bHRHZXRJZCB9ID0ge30pIHtcbiAgICBjb25zdCBjYWNoZSA9IHt9O1xuICAgIGNvbnN0IG1lbW9pemVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW1zID0gc3RyaW5naWZ5KGFyZ3MpO1xuICAgICAgICBjb25zdCBpbnN0YW5jZUlkID0gZ2V0SW5zdGFuY2VJZCgpO1xuICAgICAgICBpZiAoIWNhY2hlW2luc3RhbmNlSWRdKSB7XG4gICAgICAgICAgICBjYWNoZVtpbnN0YW5jZUlkXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWNoZVtpbnN0YW5jZUlkXVtzdHJpbmdQYXJhbXNdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNhY2hlW2luc3RhbmNlSWRdW3N0cmluZ1BhcmFtc10gPSBmbiguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVbaW5zdGFuY2VJZF1bc3RyaW5nUGFyYW1zXTtcbiAgICB9O1xuICAgIG1lbW9pemVkLnVubWVtb2l6ZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1BhcmFtcyA9IHN0cmluZ2lmeShhcmdzKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VJZCA9IGdldEluc3RhbmNlSWQoKTtcbiAgICAgICAgaWYgKGNhY2hlW2luc3RhbmNlSWRdPy5bc3RyaW5nUGFyYW1zXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWxldGUgY2FjaGVbaW5zdGFuY2VJZF1bc3RyaW5nUGFyYW1zXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuIiwiLyoqXG4gKiBAbmFtZSBuZXh0VGlja1xuICogQGRlc2NyaXB0aW9uIERlZmVyIHRoZSBvcGVyYXRpb24gdG8gdGhlIHF1ZXVlIGZvciBldmFsdWF0aW9uIG9uIHRoZSBuZXh0IHRpY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRUaWNrKG9uRXhlYywgb25FcnJvcikge1xuICAgIC8vIFdoaWxlIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oLi4uKSB3b3VsZCBkZWZlciB0byB0aGUgbmV4dFRpY2ssIHRoaXNcbiAgICAvLyBhY3R1YWxseSBkb2VzIG5vdCBwbGF5IGFzIG5pY2VseSBpbiBicm93c2VycyBsaWtlIHRoZSBzZXRUaW1lb3V0KC4uLilcbiAgICAvLyBhcHByb2FjaC4gU28gdGhlIHNhZmVyLCB0aG91Z2ggbGVzcyBvcHRpbWFsIGFwcHJvYWNoIGlzIHRoZSBvbmUgdGFrZW4gaGVyZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBQcm9taXNlXG4gICAgICAgICAgICAucmVzb2x2ZSgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBvbkV4ZWMoKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgMCk7XG59XG4iLCIvKipcbiAqIEEgc2hhcmFibGUgaWRlbnRpdHkgZnVuY3Rpb24uIFJldHVybnMgdGhlIGlucHV0IGFzLWlzIHdpdGggbm8gdHJhbnNmb3JtYXRpb24gYXBwbGllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLyoqXG4gKiBBIHNoYXJhYmxlIG5vb3AgZnVuY3Rpb24uIEFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBkb2VzIG5vdGhpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gICAgLy8gbm9vcFxufVxuIiwiLyoqXG4gKiBAbmFtZSBvYmplY3RDbGVhclxuICogQHN1bW1hcnkgUmVtb3ZlcyBhbGwgdGhlIGtleXMgZnJvbSB0aGUgaW5wdXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RDbGVhcih2YWx1ZSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0ga2V5cy5sZW5ndGg7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGRlbGV0ZSB2YWx1ZVtrZXlzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuIiwiLyoqXG4gKiBAbmFtZSBvYmplY3RQcm9wZXJ0eVxuICogQHN1bW1hcnkgQXNzaWduIGEgZ2V0IHByb3BlcnR5IG9uIHRoZSBpbnB1dCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdFByb3BlcnR5KHRoYXQsIGtleSwgZ2V0dGVyLCBnZXROYW1lLCBpbmRleCA9IDApIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0TmFtZVxuICAgICAgICA/IGdldE5hbWUoa2V5LCBpbmRleClcbiAgICAgICAgOiBrZXk7XG4gICAgLy8gVGhlcmUgYXJlIDMgYXBwcm9hY2hlcyBoZXJlIC1cbiAgICAvLyAgLSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhhdCwga2V5KSAtIHRoaXMgb25seSBjaGVja3MgdGhlIGN1cnJlbnQgY2xhc3MsIGkuZVxuICAgIC8vICAgIHdpbGwgcmV0dWlybiBmYWxzZSBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IGluIHRoZSBwYXJlbnQgY2xhc3NcbiAgICAvLyAgLSBpc1VuZGVmaW5lZCguLi4pIC0gdGhpcyBtYXkgeWllbGQgYSBmYWxzZSBwb3NpdGl2ZSB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGVyZSwgYnV0IG5vdCBzZXQuXG4gICAgLy8gICAgQWRkaXRpb25hbGx5LCBvbiBwcmUtZGVmaW5lZCBnZXR0ZXJzIGl0IG1heSBtYWtlIGEgY2FsbFxuICAgIC8vICAtIGtleSBpbiB0aGF0IC0gRG9lcyBub3QgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGVpdGhlciBvZiB0aGUgYWJvdmUgYW5kIGNoZWNrcyB0aGUgZnVsbCBjaGFpblxuICAgIGlmICghKG5hbWUgaW4gdGhhdCkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQsIG5hbWUsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAvLyBVbmxpa2UgaW4gbGF6eSwgd2UgYWx3YXlzIGNhbGwgaW50byB0aGUgdXBwZXIgZnVuY3Rpb24sIGkuZS4gdGhpcyBtZXRob2RcbiAgICAgICAgICAgIC8vIGRvZXMgbm90IGNhY2hlIG9sZCB2YWx1ZXMgKGl0IGlzIGV4cGVjdGVkIHRvIGJlIHVzZWQgZm9yIGR5bmFtaWMgdmFsdWVzKVxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcihrZXksIGluZGV4LCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBAbmFtZSBvYmplY3RQcm9wZXJ0aWVzXG4gKiBAc3VtbWFyeSBBc3NpZ24gZ2V0IHByb3BlcnRpZXMgb24gdGhlIGlucHV0IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0UHJvcGVydGllcyh0aGF0LCBrZXlzLCBnZXR0ZXIsIGdldE5hbWUpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBrZXlzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgb2JqZWN0UHJvcGVydHkodGhhdCwga2V5c1tpXSwgZ2V0dGVyLCBnZXROYW1lLCBpKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIEBuYW1lIG9iamVjdFNwcmVhZFxuICogQHN1bW1hcnkgQ29uY2F0cyBhbGwgc291cmNlcyBpbnRvIHRoZSBkZXN0aW5hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0U3ByZWFkKGRlc3QsIC4uLnNvdXJjZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgY291bnQgPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3JjID0gc291cmNlc1tpXTtcbiAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcmMuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNyYy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkZXN0LCBzcmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZXN0O1xufVxuIiwiZXhwb3J0IGNvbnN0IENDX1RPX1VQID0gbmV3IEFycmF5KDI1Nik7XG5leHBvcnQgY29uc3QgQ0NfVE9fTE8gPSBuZXcgQXJyYXkoMjU2KTtcbmZvciAobGV0IGkgPSAwLCBjb3VudCA9IENDX1RPX1VQLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBDQ19UT19MT1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSkudG9Mb3dlckNhc2UoKTtcbiAgICBDQ19UT19VUFtpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSkudG9VcHBlckNhc2UoKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGZvcm1hdEFsbENhcHModykge1xuICAgIHJldHVybiB3LnNsaWNlKDAsIHcubGVuZ3RoIC0gMSkudG9Mb3dlckNhc2UoKSArIENDX1RPX1VQW3cuY2hhckNvZGVBdCh3Lmxlbmd0aCAtIDEpXTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI5NzA2NjdcbiAqXG4gKiBUaGlzIGlzIG5vdCBhcyBvcHRpbWFsIGFzIHRoZSBvcmlnaW5hbCBTTyBhbnN3ZXIgKHdlIHNwbGl0IGludG8gcGVyLXdvcmQpLFxuICogaG93ZXZlciBpdCBkb2VzIHBhc3MgdGhlIHRlc3RzICh3aGljaCB0aGUgU08gdmVyc2lvbiBkb2Vzbid0KSBhbmQgaXMgc3RpbGxcbiAqIGEgbWFqb3IgaW1wcm92ZW1lbnQgb3ZlciB0aGUgb3JpZ2luYWwgY2FtZWxjYXNlIG5wbSBwYWNrYWdlIC1cbiAqXG4gKiAgIGNhbWVsY2FzZTogMjAuODggzrxzL29wXG4gKiAgICAgICAgdGhpczogIDEuMDAgzrxzL29wXG4gKlxuICogQ2F2ZWF0IG9mIHRoaXM6IG9ubHkgQXNjaWksIGJ1dCBhY2NlcHRhYmxlIGZvciB0aGUgaW50ZW5kZWQgdXNlY2FzZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0ZXIoZm9ybWF0KSB7XG4gICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbHVlXG4gICAgICAgICAgICAvLyByZXBsYWNlIGFsbCBzZXBhcmF0b3JzIChpbmNsdWRpbmcgY29uc2VxdXRpdmUpIHdpdGggc3BhY2VzXG4gICAgICAgICAgICAucmVwbGFjZSgvWy1fLiwgXSsvZywgJyAnKVxuICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlc1xuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLy8gc3BsaXQgaW50byB3b3Jkc1xuICAgICAgICAgICAgLnNwbGl0KCcgJyk7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gcGFydHMubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdyA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgLy8gYXBwbHkgdGhlIGZvcm1hdHRpbmdcbiAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXQoL15bXFxkQS1aXSskLy50ZXN0KHcpXG4gICAgICAgICAgICAgICAgLy8gYWxsIGZ1bGwgdXBwZXJjYXNlICsgbGV0dGVycyBhcmUgY2hhbmdlZCB0byBsb3dlcmNhc2VcbiAgICAgICAgICAgICAgICA/IHcudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIC8vIGFsbCBjb25zZWN1dGl2ZSBjYXBpdGFscyArIGxldHRlcnMgYXJlIGNoYW5nZWQgdG8gbG93ZXJjYXNlXG4gICAgICAgICAgICAgICAgLy8gZS5nLiBVVUlENjQgLT4gdXVpZDY0LCB3aGlsZSBwcmVzZXJ2aW5nIHNwbGl0cywgZWcuIE5GVE9yZGVyIC0+IG5mdE9yZGVyXG4gICAgICAgICAgICAgICAgOiB3LnJlcGxhY2UoL15bXFxkQS1aXXsyLH1bXmEtel0vLCBmb3JtYXRBbGxDYXBzKSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuLyoqXG4gKiBAbmFtZSBzdHJpbmdDYW1lbENhc2VcbiAqIEBzdW1tYXJ5IENvbnZlcnQgYSBkYXNoL2RvdC91bmRlcnNjb3JlL3NwYWNlIHNlcGFyYXRlZCBBc2NpaSBzdHJpbmcvU3RyaW5nIHRvIGNhbWVsQ2FzZVxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nQ2FtZWxDYXNlID0gLyojX19QVVJFX18qLyBjb252ZXJ0ZXIoKHcsIGkpID0+IFxuKGkgPyBDQ19UT19VUFt3LmNoYXJDb2RlQXQoMCldIDogQ0NfVE9fTE9bdy5jaGFyQ29kZUF0KDApXSkgKyB3LnNsaWNlKDEpKTtcbi8qKlxuICogQG5hbWUgc3RyaW5nUGFzY2FsQ2FzZVxuICogQHN1bW1hcnkgQ29udmVydCBhIGRhc2gvZG90L3VuZGVyc2NvcmUvc3BhY2Ugc2VwYXJhdGVkIEFzY2lpIHN0cmluZy9TdHJpbmcgdG8gUGFzY2FsQ2FzZVxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nUGFzY2FsQ2FzZSA9IC8qI19fUFVSRV9fKi8gY29udmVydGVyKCh3KSA9PiBcbkNDX1RPX1VQW3cuY2hhckNvZGVBdCgwKV0gKyB3LnNsaWNlKDEpKTtcbiIsImltcG9ydCB7IENDX1RPX0xPLCBDQ19UT19VUCB9IGZyb20gJy4vY2FtZWxDYXNlLmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGNvbnZlcnRlcihtYXApIHtcbiAgICByZXR1cm4gKHZhbHVlKSA9PiB2YWx1ZVxuICAgICAgICA/IG1hcFt2YWx1ZS5jaGFyQ29kZUF0KDApXSArIHZhbHVlLnNsaWNlKDEpXG4gICAgICAgIDogJyc7XG59XG4vKipcbiAqIEBuYW1lIHN0cmluZ0xvd2VyRmlyc3RcbiAqIEBzdW1tYXJ5IExvd2VyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGEgc3RyaW5nXG4gKiBAZGVzY3JpcHRpb25cbiAqIExvd2VyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGEgc3RyaW5nXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IHN0cmluZ0xvd2VyRmlyc3QgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogc3RyaW5nTG93ZXJGaXJzdCgnQUJDJyk7IC8vID0+ICdhQkMnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xvd2VyRmlyc3QgPSAvKiNfX1BVUkVfXyovIGNvbnZlcnRlcihDQ19UT19MTyk7XG4vKipcbiAqIEBuYW1lIHN0cmluZ1VwcGVyRmlyc3RcbiAqIEBzdW1tYXJ5IFVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGEgc3RyaW5nXG4gKiBAZGVzY3JpcHRpb25cbiAqIExvd2VyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGEgc3RyaW5nXG4gKiBAZXhhbXBsZVxuICogPEJSPlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7IHN0cmluZ1VwcGVyRmlyc3QgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogc3RyaW5nVXBwZXJGaXJzdCgnYWJjJyk7IC8vID0+ICdBYmMnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ1VwcGVyRmlyc3QgPSAvKiNfX1BVUkVfXyovIGNvbnZlcnRlcihDQ19UT19VUCk7XG4iLCJpbXBvcnQgeyB1OGFUb0hleCB9IGZyb20gJy4uL3U4YS90b0hleC5qcyc7XG5pbXBvcnQgeyBzdHJpbmdUb1U4YSB9IGZyb20gJy4vdG9VOGEuanMnO1xuLyoqXG4gKiBAbmFtZSBzdHJpbmdUb0hleFxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGhleCBzdHJpbmcgZnJvbSBhIHV0Zi04IHN0cmluZ1xuICogQGRlc2NyaXB0aW9uXG4gKiBTdHJpbmcgaW5wdXQgdmFsdWVzIHJldHVybiB0aGUgYWN0dWFsIGVuY29kZWQgaGV4IHZhbHVlLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBzdHJpbmdUb0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiBzdHJpbmdUb1U4YSgnaGVsbG8nKTsgLy8gMHg2ODY1NmM2YzZmXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvSGV4KHZhbHVlKSB7XG4gICAgcmV0dXJuIHU4YVRvSGV4KHN0cmluZ1RvVThhKHZhbHVlKSk7XG59XG4iLCJpbXBvcnQgeyBUZXh0RW5jb2RlciB9IGZyb20gJ0Bwb2xrYWRvdC94LXRleHRlbmNvZGVyJztcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbi8qKlxuICogQG5hbWUgc3RyaW5nVG9VOGFcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBVaW50OEFycmF5IG9iamVjdCBmcm9tIGEgdXRmLTggc3RyaW5nLlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdHJpbmcgaW5wdXQgdmFsdWVzIHJldHVybiB0aGUgYWN0dWFsIGVuY29kZWQgYFVJbnQ4QXJyYXlgLiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgdmFsdWVzIHJldHVybnMgYW4gZW1wdHkgZW5jb2RlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgc3RyaW5nVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogc3RyaW5nVG9VOGEoJ2hlbGxvJyk7IC8vIFsweDY4LCAweDY1LCAweDZjLCAweDZjLCAweDZmXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb1U4YSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgICA/IGVuY29kZXIuZW5jb2RlKHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoKTtcbn1cbiIsImltcG9ydCB7IGlzQmlnSW50IH0gZnJvbSAnLi9pcy9iaWdJbnQuanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gcmVwbGFjZXIoXywgdikge1xuICAgIHJldHVybiBpc0JpZ0ludCh2KVxuICAgICAgICA/IHYudG9TdHJpbmcoKVxuICAgICAgICA6IHY7XG59XG4vKipcbiAqIEBuYW1lIHN0cmluZ2lmeVxuICogQHN1bW1hcnkgUGVyZm9ybXMgYSBKU09OLnN0cmluZ2lmeSwgd2l0aCBCaWdJbnQgaGFuZGxpbmdcbiAqIEBkZXNjcmlwdGlvbiBBIHdyYXBwZXIgZm9yIEpTT04uc3RyaW5naWZ5IHRoYXQgaGFuZGxlcyBCaWdJbnQgdmFsdWVzIHRyYW5zcGFyZW50bHksIGNvbnZlcnRpbmcgdGhlbSB0byBzdHJpbmcuIE5vIGRpZmZlcmVuY2VzIGZyb20gdGhlIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSBmdW5jdGlvbiBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkodmFsdWUsIHNwYWNlKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpO1xufVxuIiwiaW1wb3J0IHsgdThhVG9VOGEgfSBmcm9tICcuL3RvVThhLmpzJztcbi8qKlxuICogQG5hbWUgdThhQ29uY2F0XG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgY29uY2F0ZW5hdGVkIFVpbnQ4QXJyYXkgZnJvbSB0aGUgaW5wdXRzLlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb25jYXRlbmF0ZXMgdGhlIGlucHV0IGFycmF5cyBpbnRvIGEgc2luZ2xlIGBVSW50OEFycmF5YC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgeyB1OGFDb25jYXQgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogdThhQ29uY2F0KFxuICogICBuZXcgVWludDhBcnJheShbMSwgMiwgM10pLFxuICogICBuZXcgVWludDhBcnJheShbNCwgNSwgNl0pXG4gKiApOyAvLyBbMSwgMiwgMywgNCwgNSwgNl1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdThhQ29uY2F0KC4uLmxpc3QpIHtcbiAgICBjb25zdCBjb3VudCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IHU4YXMgPSBuZXcgQXJyYXkoY291bnQpO1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICB1OGFzW2ldID0gdThhVG9VOGEobGlzdFtpXSk7XG4gICAgICAgIGxlbmd0aCArPSB1OGFzW2ldLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHU4YUNvbmNhdFN0cmljdCh1OGFzLCBsZW5ndGgpO1xufVxuLyoqXG4gKiBAbmFtZSB1OGFDb25jYXRTdHJpY3RcbiAqIEBkZXNjcmlwdGlvbiBBIHN0cmljdCB2ZXJzaW9uIG9mIFtbdThhQ29uY2F0XV0sIGFjY2VwdGluZyBvbmx5IFVpbnQ4QXJyYXkgaW5wdXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFDb25jYXRTdHJpY3QodThhcywgbGVuZ3RoID0gMCkge1xuICAgIGNvbnN0IGNvdW50ID0gdThhcy5sZW5ndGg7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBsZW5ndGggKz0gdThhc1tpXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgcmVzdWx0LnNldCh1OGFzW2ldLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gdThhc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJpbXBvcnQgeyB1OGFUb1U4YSB9IGZyb20gJy4vdG9VOGEuanMnO1xuLyoqXG4gKiBAbmFtZSB1OGFFcVxuICogQHN1bW1hcnkgQ29tcGFyZXMgdHdvIFVpbnQ4QXJyYXlzIGZvciBlcXVhbGl0eS5cbiAqIEBkZXNjcmlwdGlvblxuICogRm9yIGBVSW50OEFycmF5YCAob3IgaGV4IHN0cmluZykgaW5wdXQgdmFsdWVzIHRydWUgaWYgdGhlcmUgaXMgYSBtYXRjaC5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgdThhRXEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogdThhRXEobmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4NjVdKSwgbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4NjVdKSk7IC8vIHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdThhRXEoYSwgYikge1xuICAgIGNvbnN0IHU4YWEgPSB1OGFUb1U4YShhKTtcbiAgICBjb25zdCB1OGFiID0gdThhVG9VOGEoYik7XG4gICAgaWYgKHU4YWEubGVuZ3RoID09PSB1OGFiLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkdkEgPSBuZXcgRGF0YVZpZXcodThhYS5idWZmZXIsIHU4YWEuYnl0ZU9mZnNldCk7XG4gICAgICAgIGNvbnN0IGR2QiA9IG5ldyBEYXRhVmlldyh1OGFiLmJ1ZmZlciwgdThhYi5ieXRlT2Zmc2V0KTtcbiAgICAgICAgY29uc3QgbW9kID0gKHU4YWEubGVuZ3RoICUgNCkgfCAwO1xuICAgICAgICBjb25zdCBsZW5ndGggPSAodThhYS5sZW5ndGggLSBtb2QpIHwgMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICAgICAgaWYgKGR2QS5nZXRVaW50MzIoaSkgIT09IGR2Qi5nZXRVaW50MzIoaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGxlbmd0aCwgY291bnQgPSB1OGFhLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlmICh1OGFhW2ldICE9PSB1OGFiW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgeyBCTiB9IGZyb20gJy4uL2JuL2JuLmpzJztcbi8qKlxuICogQG5hbWUgdThhVG9CblxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIEJOIGZyb20gYSBVaW50OEFycmF5IG9iamVjdC5cbiAqIEBkZXNjcmlwdGlvblxuICogYFVJbnQ4QXJyYXlgIGlucHV0IHZhbHVlcyByZXR1cm4gdGhlIGFjdHVhbCBCTi4gYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcyByZXR1cm5zIGFuIGAweDBgIHZhbHVlLlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3Mgd2hpbGUgY29udmVydGluZ1xuICogQHBhcmFtIG9wdGlvbnMuaXNMZSBDb252ZXJ0IHVzaW5nIExpdHRsZSBFbmRpYW4gKGRlZmF1bHQpXG4gKiBAcGFyYW0gb3B0aW9ucy5pc05lZ2F0aXZlIENvbnZlcnQgdXNpbmcgdHdvJ3MgY29tcGxlbWVudFxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyB1OGFUb0JuIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuICpcbiAqIHU4YVRvSGV4KG5ldyBVaW50OEFycmF5KFsweDY4LCAweDY1LCAweDZjLCAweDZjLCAweGZdKSk7IC8vIDB4Njg2NTZjMGZcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdThhVG9Cbih2YWx1ZSwgeyBpc0xlID0gdHJ1ZSwgaXNOZWdhdGl2ZSA9IGZhbHNlIH0gPSB7fSkge1xuICAgIC8vIHNsaWNlICsgcmV2ZXJzZSBpcyBleHBlbnNpdmUsIGhvd2V2ZXIgU0NBTEUgaXMgTEUgYnkgZGVmYXVsdCBzbyB0aGlzIGlzIHRoZSBwYXRoXG4gICAgLy8gd2UgYXJlIG1vc3QgaW50ZXJlc3RlZCBpbiAodGhlIEJFIGlzIGFkZGVkIGZvciB0aGUgc2FrZSBvZiBiZWluZyBjb21wcmVoZW5zaXZlKVxuICAgIGlmICghaXNMZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBjb25zdCBjb3VudCA9IHZhbHVlLmxlbmd0aDtcbiAgICAvLyBzaG9ydGN1dCBmb3IgPD0gdTQ4IHZhbHVlcyAtIGluIHRoaXMgY2FzZSB0aGUgbWFudWFsIGNvbnZlcnNpb25cbiAgICAvLyBoZXJlIHNlZW1zIHRvIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gcGFzc2luZyB0aGUgZnVsbCBhcnJheVxuICAgIGlmIChpc05lZ2F0aXZlICYmIGNvdW50ICYmICh2YWx1ZVtjb3VudCAtIDFdICYgMHg4MCkpIHtcbiAgICAgICAgLy8gTW9zdCBjb21tb24gY2FzZSBpezgsIDE2LCAzMn0gZGVmYXVsdCBMRSBTQ0FMRS1lbmNvZGVkXG4gICAgICAgIC8vIEZvciA8PSAzMiwgd2UgYWxzbyBvcHRpbWl6ZSB0aGUgeG9yIHRvIGEgc2luZ2xlIG9wXG4gICAgICAgIHN3aXRjaCAoY291bnQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJOKDApO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQk4oKCh2YWx1ZVswXSBeIDI1NSkgKiAtMSkgLSAxKTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJOKCgoKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpKSBeIDY1NTM1KSAqIC0xKSAtIDEpO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQk4oKCgodmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpKSBeIDE2Nzc3MjE1KSAqIC0xKSAtIDEpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgM3JkIGJ5dGUsIHdlIGRvbid0IDw8IDI0IC0gc2luY2UgSlMgY29udmVydHMgYWxsIGJpdHdpc2Ugb3BlcmF0b3JzIHRvXG4gICAgICAgICAgICAgICAgLy8gMzItYml0LCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgdG9wLW1vc3QgYml0IGlzIHNldCB0aGlzIHlpZWxkcyBhIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCTigoKCh2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSArICh2YWx1ZVsyXSA8PCAxNikgKyAodmFsdWVbM10gKiAxNjc3NzIxNikpIF4gNDI5NDk2NzI5NSkgKiAtMSkgLSAxKTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJOKCgoKCh2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSArICh2YWx1ZVsyXSA8PCAxNikgKyAodmFsdWVbM10gKiAxNjc3NzIxNikpIF4gNDI5NDk2NzI5NSkgKyAoKHZhbHVlWzRdIF4gMHhmZikgKiA0Mjk0OTY3Mjk2KSkgKiAtMSkgLSAxKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJOKCgoKCh2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSArICh2YWx1ZVsyXSA8PCAxNikgKyAodmFsdWVbM10gKiAxNjc3NzIxNikpIF4gNDI5NDk2NzI5NSkgKyAoKCh2YWx1ZVs0XSArICh2YWx1ZVs1XSA8PCA4KSkgXiA2NTUzNSkgKiA0Mjk0OTY3Mjk2KSkgKiAtMSkgLSAxKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCTih2YWx1ZSwgJ2xlJykuZnJvbVR3b3MoY291bnQgKiA4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNb3N0IGNvbW1vbiBjYXNlIC0gdXs4LCAxNiwgMzJ9IGRlZmF1bHQgTEUgU0NBTEUtZW5jb2RlZFxuICAgIC8vXG4gICAgLy8gVGhlcmUgYXJlIHNvbWUgc2xpZ2h0IGJlbmVmaXRzIGluIHVucm9sbGluZyB0aGlzIHNwZWNpZmljIGxvb3AsXG4gICAgLy8gaG93ZXZlciBpdCBjb21lcyB3aXRoIGRpbWluaXNoaW5nIHJldHVybnMgc2luY2UgaGVyZSB0aGUgYWN0dWFsXG4gICAgLy8gYG5ldyBCTmAgZG9lcyBzZWVtIHRvIHRha2UgdXAgdGhlIGJ1bGsgb2YgdGhlIHRpbWVcbiAgICBzd2l0Y2ggKGNvdW50KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQk4oMCk7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQk4odmFsdWVbMF0pO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJOKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCTih2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSArICh2YWx1ZVsyXSA8PCAxNikpO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAvLyBmb3IgdGhlIDNyZCBieXRlLCB3ZSBkb24ndCA8PCAyNCAtIHNpbmNlIEpTIGNvbnZlcnRzIGFsbCBiaXR3aXNlIG9wZXJhdG9ycyB0b1xuICAgICAgICAgICAgLy8gMzItYml0LCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgdG9wLW1vc3QgYml0IGlzIHNldCB0aGlzIHlpZWxkcyBhIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJOKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSArICh2YWx1ZVszXSAqIDE2Nzc3MjE2KSk7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQk4odmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKCh2YWx1ZVszXSArICh2YWx1ZVs0XSA8PCA4KSkgKiAxNjc3NzIxNikpO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJOKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSArICgodmFsdWVbM10gKyAodmFsdWVbNF0gPDwgOCkgKyAodmFsdWVbNV0gPDwgMTYpKSAqIDE2Nzc3MjE2KSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJOKHZhbHVlLCAnbGUnKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIEBuYW1lIHU4YVRvRmxvYXRcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIFVpbnQ4QXJyYXkgdmFsdWUgaW50byB0aGUgZmxvYXQgKGVpdGhlciAzMiBvciA2NC1iaXQpXG4gKiByZXByZXNlbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHU4YVRvRmxvYXQodmFsdWUsIHsgYml0TGVuZ3RoID0gMzIsIGlzTGUgPSB0cnVlIH0gPSB7fSkge1xuICAgIGlmIChiaXRMZW5ndGggIT09IDMyICYmIGJpdExlbmd0aCAhPT0gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJpdExlbmd0aCBwcm92aWRlZCwgZXhwZWN0ZWQgMzIgb3IgNjQnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoIDwgKGJpdExlbmd0aCAvIDgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnB1dCBidWZmZXIgcHJvdmlkZWQsIGV4cGVjdGVkIGF0IGxlYXN0ICR7Yml0TGVuZ3RoIC8gOH0gYnl0ZXMsIGZvdW5kICR7dmFsdWUubGVuZ3RofWApO1xuICAgIH1cbiAgICBjb25zdCBkdiA9IG5ldyBEYXRhVmlldyh2YWx1ZS5idWZmZXIsIHZhbHVlLmJ5dGVPZmZzZXQpO1xuICAgIHJldHVybiBiaXRMZW5ndGggPT09IDMyXG4gICAgICAgID8gZHYuZ2V0RmxvYXQzMigwLCBpc0xlKVxuICAgICAgICA6IGR2LmdldEZsb2F0NjQoMCwgaXNMZSk7XG59XG4iLCJjb25zdCBVOCA9IG5ldyBBcnJheSgyNTYpO1xuY29uc3QgVTE2ID0gbmV3IEFycmF5KDI1NiAqIDI1Nik7XG5mb3IgKGxldCBuID0gMDsgbiA8IDI1NjsgbisrKSB7XG4gICAgVThbbl0gPSBuLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpO1xufVxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgIGNvbnN0IHMgPSBpIDw8IDg7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAyNTY7IGorKykge1xuICAgICAgICBVMTZbcyB8IGpdID0gVThbaV0gKyBVOFtqXTtcbiAgICB9XG59XG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBoZXgodmFsdWUsIHJlc3VsdCkge1xuICAgIGNvbnN0IG1vZCA9ICh2YWx1ZS5sZW5ndGggJSAyKSB8IDA7XG4gICAgY29uc3QgbGVuZ3RoID0gKHZhbHVlLmxlbmd0aCAtIG1vZCkgfCAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcmVzdWx0ICs9IFUxNlsodmFsdWVbaV0gPDwgOCkgfCB2YWx1ZVtpICsgMV1dO1xuICAgIH1cbiAgICBpZiAobW9kKSB7XG4gICAgICAgIHJlc3VsdCArPSBVOFt2YWx1ZVtsZW5ndGhdIHwgMF07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEBuYW1lIHU4YVRvSGV4XG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgaGV4IHN0cmluZyBmcm9tIGEgVWludDhBcnJheSBvYmplY3QuXG4gKiBAZGVzY3JpcHRpb25cbiAqIGBVSW50OEFycmF5YCBpbnB1dCB2YWx1ZXMgcmV0dXJuIHRoZSBhY3R1YWwgaGV4IHN0cmluZy4gYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcyByZXR1cm5zIGFuIGAweGAgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyB1OGFUb0hleCB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiB1OGFUb0hleChuZXcgVWludDhBcnJheShbMHg2OCwgMHg2NSwgMHg2YywgMHg2YywgMHhmXSkpOyAvLyAweDY4NjU2YzBmXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHU4YVRvSGV4KHZhbHVlLCBiaXRMZW5ndGggPSAtMSwgaXNQcmVmaXhlZCA9IHRydWUpIHtcbiAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3Qgc2lubWNlIHdlIHN1cHBvcnQgaXNQcmVmaXhlZCA9IGZhbHNlLi4uLlxuICAgIGNvbnN0IGVtcHR5ID0gaXNQcmVmaXhlZFxuICAgICAgICA/ICcweCdcbiAgICAgICAgOiAnJztcbiAgICBpZiAoIXZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH1cbiAgICBlbHNlIGlmIChiaXRMZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGguY2VpbChiaXRMZW5ndGggLyA4KTtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2hleCh2YWx1ZS5zdWJhcnJheSgwLCBsZW5ndGggLyAyKSwgZW1wdHkpfeKApiR7aGV4KHZhbHVlLnN1YmFycmF5KHZhbHVlLmxlbmd0aCAtIGxlbmd0aCAvIDIpLCAnJyl9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGV4KHZhbHVlLCBlbXB0eSk7XG59XG4iLCIvKipcbiAqIEBuYW1lIHU4YVRvTnVtYmVyXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgbnVtYmVyIGZyb20gYSBVaW50OEFycmF5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHU4YVRvTnVtYmVyKHZhbHVlLCB7IGlzTGUgPSB0cnVlLCBpc05lZ2F0aXZlID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgLy8gc2xpY2UgKyByZXZlcnNlIGlzIGV4cGVuc2l2ZSwgaG93ZXZlciBTQ0FMRSBpcyBMRSBieSBkZWZhdWx0IHNvIHRoaXMgaXMgdGhlIHBhdGhcbiAgICAvLyB3ZSBhcmUgbW9zdCBpbnRlcmVzdGVkIGluICh0aGUgQkUgaXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mIGJlaW5nIGNvbXByZWhlbnNpdmUpXG4gICAgaWYgKCFpc0xlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgfVxuICAgIGNvbnN0IGNvdW50ID0gdmFsdWUubGVuZ3RoO1xuICAgIC8vIFdoZW4gdGhlIHZhbHVlIGlzIGEgaXs4LCAxNiwgMjQsIDMyLCA0MCwgNDB9IHZhbHVlcyBhbmQgdGhlIHRvcC1tb3N0IGJpdFxuICAgIC8vIGluZGljYXRlcyBhIHNpZ25lZCB2YWx1ZSwgd2UgdXNlIGEgdHdvJ3MgY29tcGxlbWVudCBjb252ZXJzaW9uLiBJZiBvbmUgb2YgdGhlc2VcbiAgICAvLyBmbGFncyBhcmUgbm90IHNldCwgd2UganVzdCBkbyBhIG5vcm1hbCB1bnNpZ25lZCBjb252ZXJzaW9uICh0aGUgc2FtZSBzaG9ydGN1dFxuICAgIC8vIGFwcGxpZXMgaW4gYm90aCB0aGUgdThhVG97QmlnSW50LCBCbn0gY29udmVyc2lvbnMgYXMgd2VsbClcbiAgICBpZiAoaXNOZWdhdGl2ZSAmJiBjb3VudCAmJiAodmFsdWVbY291bnQgLSAxXSAmIDB4ODApKSB7XG4gICAgICAgIHN3aXRjaCAoY291bnQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gKCgodmFsdWVbMF0gXiAyNTUpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoKCh2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSkgXiA2NTUzNSkgKiAtMSkgLSAxKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKCgoKHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpICsgKHZhbHVlWzJdIDw8IDE2KSkgXiAxNjc3NzIxNSkgKiAtMSkgLSAxKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIDNyZCBieXRlLCB3ZSBkb24ndCA8PCAyNCAtIHNpbmNlIEpTIGNvbnZlcnRzIGFsbCBiaXR3aXNlIG9wZXJhdG9ycyB0b1xuICAgICAgICAgICAgICAgIC8vIDMyLWJpdCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHRvcC1tb3N0IGJpdCBpcyBzZXQgdGhpcyB5aWVsZHMgYSBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgICAgICAgIHJldHVybiAoKCgodmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKHZhbHVlWzNdICogMTY3NzcyMTYpKSBeIDQyOTQ5NjcyOTUpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoKCgodmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKHZhbHVlWzNdICogMTY3NzcyMTYpKSBeIDQyOTQ5NjcyOTUpICsgKCh2YWx1ZVs0XSBeIDB4ZmYpICogNDI5NDk2NzI5NikpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgcmV0dXJuICgoKCgodmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKHZhbHVlWzNdICogMTY3NzcyMTYpKSBeIDQyOTQ5NjcyOTUpICsgKCgodmFsdWVbNF0gKyAodmFsdWVbNV0gPDwgOCkpIF4gNjU1MzUpICogNDI5NDk2NzI5NikpICogLTEpIC0gMSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgbW9yZSB0aGFuIDQ4LWJpdHMgY2Fubm90IGJlIHJlbGlhYmx5IGNvbnZlcnRlZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN3aXRjaCAoY291bnQpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVswXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdICsgKHZhbHVlWzFdIDw8IDgpO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAvLyBmb3IgdGhlIDNyZCBieXRlLCB3ZSBkb24ndCA8PCAyNCAtIHNpbmNlIEpTIGNvbnZlcnRzIGFsbCBiaXR3aXNlIG9wZXJhdG9ycyB0b1xuICAgICAgICAgICAgLy8gMzItYml0LCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgdG9wLW1vc3QgYml0IGlzIHNldCB0aGlzIHlpZWxkcyBhIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKHZhbHVlWzNdICogMTY3NzcyMTYpO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVbMF0gKyAodmFsdWVbMV0gPDwgOCkgKyAodmFsdWVbMl0gPDwgMTYpICsgKCh2YWx1ZVszXSArICh2YWx1ZVs0XSA8PCA4KSkgKiAxNjc3NzIxNik7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVswXSArICh2YWx1ZVsxXSA8PCA4KSArICh2YWx1ZVsyXSA8PCAxNikgKyAoKHZhbHVlWzNdICsgKHZhbHVlWzRdIDw8IDgpICsgKHZhbHVlWzVdIDw8IDE2KSkgKiAxNjc3NzIxNik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG1vcmUgdGhhbiA0OC1iaXRzIGNhbm5vdCBiZSByZWxpYWJseSBjb252ZXJ0ZWQnKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBUZXh0RGVjb2RlciB9IGZyb20gJ0Bwb2xrYWRvdC94LXRleHRkZWNvZGVyJztcbmNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7XG4vKipcbiAqIEBuYW1lIHU4YVRvU3RyaW5nXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgdXRmLTggc3RyaW5nIGZyb20gYSBVaW50OEFycmF5IG9iamVjdC5cbiAqIEBkZXNjcmlwdGlvblxuICogYFVJbnQ4QXJyYXlgIGlucHV0IHZhbHVlcyByZXR1cm4gdGhlIGFjdHVhbCBkZWNvZGVkIHV0Zi04IHN0cmluZy4gYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcyByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKiA8QlI+XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgdThhVG9TdHJpbmcgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG4gKlxuICogdThhVG9TdHJpbmcobmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4NjUsIDB4NmMsIDB4NmMsIDB4NmZdKSk7IC8vIGhlbGxvXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHU4YVRvU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAgID8gZGVjb2Rlci5kZWNvZGUodmFsdWUpXG4gICAgICAgIDogJyc7XG59XG4iLCJpbXBvcnQgeyBoZXhUb1U4YSB9IGZyb20gJy4uL2hleC90b1U4YS5qcyc7XG5pbXBvcnQgeyBpc0J1ZmZlciB9IGZyb20gJy4uL2lzL2J1ZmZlci5qcyc7XG5pbXBvcnQgeyBpc0hleCB9IGZyb20gJy4uL2lzL2hleC5qcyc7XG5pbXBvcnQgeyBpc1U4YSB9IGZyb20gJy4uL2lzL3U4YS5qcyc7XG5pbXBvcnQgeyBzdHJpbmdUb1U4YSB9IGZyb20gJy4uL3N0cmluZy90b1U4YS5qcyc7XG4vKipcbiAqIEBuYW1lIHU4YVRvVThhXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgVWludDhBcnJheSB2YWx1ZSBmcm9tIGEgVWludDhBcnJheSwgQnVmZmVyLCBzdHJpbmcgb3IgaGV4IGlucHV0LlxuICogQGRlc2NyaXB0aW9uXG4gKiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaW5wdXRzIHJldHVybnMgYSBgW11gIHJlc3VsdCwgVWludDhBcnJheSB2YWx1ZXMgcmV0dXJucyB0aGUgdmFsdWUsIGhleCBzdHJpbmdzIHJldHVybnMgYSBVaW50OEFycmF5IHJlcHJlc2VudGF0aW9uLlxuICogQGV4YW1wbGVcbiAqIDxCUj5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyB1OGFUb1U4YSB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbiAqXG4gKiB1OGFUb1U4YShuZXcgVWludDhBcnJheShbMHgxMiwgMHgzNF0pOyAvLyA9PiBVaW50OEFycmF5KFsweDEyLCAweDM0XSlcbiAqIHU4YVRvVThhKDB4MTIzNCk7IC8vID0+IFVpbnQ4QXJyYXkoWzB4MTIsIDB4MzRdKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFUb1U4YSh2YWx1ZSkge1xuICAgIHJldHVybiBpc1U4YSh2YWx1ZSlcbiAgICAgICAgLy8gTk9URSBpc0J1ZmZlciBuZWVkcyB0byBnbyBoZXJlIHNpbmNlIGl0IGFjdHVhbGx5IGV4dGVuZHNcbiAgICAgICAgLy8gVWludDhBcnJheSBvbiBOb2RlLmpzIGVudmlyb25tZW50cywgc28gYWxsIEJ1ZmZlciBhcmUgVWludDhBcnJheSxcbiAgICAgICAgLy8gYnV0IFVpbnQ4QXJyYXkgaXMgbm90IEJ1ZmZlclxuICAgICAgICA/IGlzQnVmZmVyKHZhbHVlKVxuICAgICAgICAgICAgPyBuZXcgVWludDhBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgOiBpc0hleCh2YWx1ZSlcbiAgICAgICAgICAgID8gaGV4VG9VOGEodmFsdWUpXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgPyBuZXcgVWludDhBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgICAgICA6IHN0cmluZ1RvVThhKHZhbHVlKTtcbn1cbiIsImltcG9ydCB7IHU4YUNvbmNhdFN0cmljdCB9IGZyb20gJy4vY29uY2F0LmpzJztcbmltcG9ydCB7IHU4YUVxIH0gZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgeyB1OGFUb1U4YSB9IGZyb20gJy4vdG9VOGEuanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFU4QV9XUkFQX0VUSEVSRVVNID0gLyojX19QVVJFX18qLyB1OGFUb1U4YSgnXFx4MTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcXG4nKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBVOEFfV1JBUF9QUkVGSVggPSAvKiNfX1BVUkVfXyovIHU4YVRvVThhKCc8Qnl0ZXM+Jyk7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgVThBX1dSQVBfUE9TVEZJWCA9IC8qI19fUFVSRV9fKi8gdThhVG9VOGEoJzwvQnl0ZXM+Jyk7XG5jb25zdCBXUkFQX0xFTiA9IFU4QV9XUkFQX1BSRUZJWC5sZW5ndGggKyBVOEFfV1JBUF9QT1NURklYLmxlbmd0aDtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFJc1dyYXBwZWQodThhLCB3aXRoRXRoZXJldW0pIHtcbiAgICByZXR1cm4gKCh1OGEubGVuZ3RoID49IFdSQVBfTEVOICYmXG4gICAgICAgIHU4YUVxKHU4YS5zdWJhcnJheSgwLCBVOEFfV1JBUF9QUkVGSVgubGVuZ3RoKSwgVThBX1dSQVBfUFJFRklYKSAmJlxuICAgICAgICB1OGFFcSh1OGEuc2xpY2UoLVU4QV9XUkFQX1BPU1RGSVgubGVuZ3RoKSwgVThBX1dSQVBfUE9TVEZJWCkpIHx8XG4gICAgICAgICh3aXRoRXRoZXJldW0gJiZcbiAgICAgICAgICAgIHU4YS5sZW5ndGggPj0gVThBX1dSQVBfRVRIRVJFVU0ubGVuZ3RoICYmXG4gICAgICAgICAgICB1OGFFcSh1OGEuc3ViYXJyYXkoMCwgVThBX1dSQVBfRVRIRVJFVU0ubGVuZ3RoKSwgVThBX1dSQVBfRVRIRVJFVU0pKSk7XG59XG4vKipcbiAqIEBuYW1lIHU4YVVud3JhcEJ5dGVzXG4gKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhbGwgPEJ5dGVzPi4uLjwvQnl0ZXM+IHdyYXBwZXJzIGZyb20gdGhlIHN1cHBsaWVkIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1OGFVbndyYXBCeXRlcyhieXRlcykge1xuICAgIGNvbnN0IHU4YSA9IHU4YVRvVThhKGJ5dGVzKTtcbiAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHVud3JhcCBFdGhlcmV1bS1zdHlsZSB3cmFwc1xuICAgIHJldHVybiB1OGFJc1dyYXBwZWQodThhLCBmYWxzZSlcbiAgICAgICAgPyB1OGEuc3ViYXJyYXkoVThBX1dSQVBfUFJFRklYLmxlbmd0aCwgdThhLmxlbmd0aCAtIFU4QV9XUkFQX1BPU1RGSVgubGVuZ3RoKVxuICAgICAgICA6IHU4YTtcbn1cbi8qKlxuICogQG5hbWUgdThhV3JhcEJ5dGVzXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZHMgYSA8Qnl0ZXM+Li4uPC9CeXRlcz4gd3JhcHBlciB0byB0aGUgc3VwcGxpZWQgdmFsdWUsIGlmXG4gKiAtIFdlIGRvbid0IGFscmVhZHkgaGF2ZSBhIEJ5dGVzIHdyYXBwZXJcbiAqIC0gVGhlIG1lc3NhZ2UgaXMgbm90IGFuIEV0aGVyZXVtLXN0eWxlIG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHU4YVdyYXBCeXRlcyhieXRlcykge1xuICAgIGNvbnN0IHU4YSA9IHU4YVRvVThhKGJ5dGVzKTtcbiAgICByZXR1cm4gdThhSXNXcmFwcGVkKHU4YSwgdHJ1ZSlcbiAgICAgICAgPyB1OGFcbiAgICAgICAgOiB1OGFDb25jYXRTdHJpY3QoW1U4QV9XUkFQX1BSRUZJWCwgdThhLCBVOEFfV1JBUF9QT1NURklYXSk7XG59XG4iLCJpbXBvcnQgeyBzdHJpbmdUb1U4YSwgdThhVG9TdHJpbmcgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBXYmcgfSBmcm9tICcuL3diZy5qcyc7XG4vKipcbiAqIEBuYW1lIEJyaWRnZVxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGEgYnJpZGdlIGJldHdlZW4gdGhlIEpTIGFuZCBXQVNNIGVudmlyb25tZW50cy5cbiAqXG4gKiBGb3IgYW55IGJyaWRnZSBpdCBpcyBwYXNzZWQgYW4gZnVuY3Rpb24gd2hpY2ggaXMgdGhlbiBjYWxsZWQgaW50ZXJuYWxseSBhdCB0aGVcbiAqIHRpbWUgb2YgaW5pdGlhbGl6YXRpb24uIFRoaXMgYWZmZWN0aXZlbHkgaW1wbGVtZW50cyB0aGUgbGF5ZXIgYmV0d2VlbiBXQVNNIGFuZFxuICogdGhlIG5hdGl2ZSBlbnZpcm9ubWVudCwgcHJvdmlkaW5nIGFsbCB0aGUgcGx1bWJpbmcgbmVlZGVkIGZvciB0aGUgV2JnIGNsYXNzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCcmlkZ2Uge1xuICAgIF9faW50ZXJuYWxfX2NyZWF0ZVdhc207XG4gICAgX19pbnRlcm5hbF9faGVhcDtcbiAgICBfX2ludGVybmFsX193Ymc7XG4gICAgX19pbnRlcm5hbF9fY2FjaGVnZXRJbnQzMjtcbiAgICBfX2ludGVybmFsX19jYWNoZWdldFVpbnQ4O1xuICAgIF9faW50ZXJuYWxfX2hlYXBOZXh0O1xuICAgIF9faW50ZXJuYWxfX3dhc207XG4gICAgX19pbnRlcm5hbF9fd2FzbUVycm9yO1xuICAgIF9faW50ZXJuYWxfX3dhc21Qcm9taXNlO1xuICAgIF9faW50ZXJuYWxfX3R5cGU7XG4gICAgY29uc3RydWN0b3IoY3JlYXRlV2FzbSkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVdhc20gPSBjcmVhdGVXYXNtO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0SW50MzIgPSBudWxsO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0VWludDggPSBudWxsO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYXAgPSBuZXcgQXJyYXkoMzIpXG4gICAgICAgICAgICAuZmlsbCh1bmRlZmluZWQpXG4gICAgICAgICAgICAuY29uY2F0KHVuZGVmaW5lZCwgbnVsbCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2hlYXBOZXh0ID0gdGhpcy5fX2ludGVybmFsX19oZWFwLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX190eXBlID0gJ25vbmUnO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc20gPSBudWxsO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc21FcnJvciA9IG51bGw7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2FzbVByb21pc2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3diZyA9IHsgLi4ubmV3IFdiZyh0aGlzKSB9O1xuICAgIH1cbiAgICAvKiogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGluaXQgZXJyb3IgKi9cbiAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3dhc21FcnJvcjtcbiAgICB9XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBpbml0IHR5cGUgKi9cbiAgICBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fdHlwZTtcbiAgICB9XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBjcmVhdGVkIHdhc20gaW50ZXJmYWNlICovXG4gICAgZ2V0IHdhc20oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX3dhc207XG4gICAgfVxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGVyZm9ybXMgdGhlIHdhc20gaW5pdGlhbGl6YXRpb24gKi9cbiAgICBhc3luYyBpbml0KGNyZWF0ZVdhc20pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9faW50ZXJuYWxfX3dhc21Qcm9taXNlIHx8IGNyZWF0ZVdhc20pIHtcbiAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbF9fd2FzbVByb21pc2UgPSAoY3JlYXRlV2FzbSB8fCB0aGlzLl9faW50ZXJuYWxfX2NyZWF0ZVdhc20pKHRoaXMuX19pbnRlcm5hbF9fd2JnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGVycm9yLCB0eXBlLCB3YXNtIH0gPSBhd2FpdCB0aGlzLl9faW50ZXJuYWxfX3dhc21Qcm9taXNlO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3R5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc20gPSB3YXNtO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc21FcnJvciA9IGVycm9yO1xuICAgICAgICByZXR1cm4gdGhpcy5fX2ludGVybmFsX193YXNtO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbiBvYmplY3QgZnJvbSB0aGUgaGVhcFxuICAgICAqL1xuICAgIGdldE9iamVjdChpZHgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9faGVhcFtpZHhdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSB0aGUgaGVhcFxuICAgICAqL1xuICAgIGRyb3BPYmplY3QoaWR4KSB7XG4gICAgICAgIGlmIChpZHggPCAzNikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhcFtpZHhdID0gdGhpcy5fX2ludGVybmFsX19oZWFwTmV4dDtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19oZWFwTmV4dCA9IGlkeDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbmQgcmVtb3ZlcyBhbiBvYmplY3QgdG8gdGhlIGhlYXBcbiAgICAgKi9cbiAgICB0YWtlT2JqZWN0KGlkeCkge1xuICAgICAgICBjb25zdCByZXQgPSB0aGlzLmdldE9iamVjdChpZHgpO1xuICAgICAgICB0aGlzLmRyb3BPYmplY3QoaWR4KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIEFkZHMgYW4gb2JqZWN0IHRvIHRoZSBoZWFwXG4gICAgICovXG4gICAgYWRkT2JqZWN0KG9iaikge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19oZWFwTmV4dCA9PT0gdGhpcy5fX2ludGVybmFsX19oZWFwLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19oZWFwLnB1c2godGhpcy5fX2ludGVybmFsX19oZWFwLmxlbmd0aCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX19pbnRlcm5hbF9faGVhcE5leHQ7XG4gICAgICAgIHRoaXMuX19pbnRlcm5hbF9faGVhcE5leHQgPSB0aGlzLl9faW50ZXJuYWxfX2hlYXBbaWR4XTtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19oZWFwW2lkeF0gPSBvYmo7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSBhbiBJbnQzMiBpbiB0aGUgV0FTTSBpbnRlcmZhY2VcbiAgICAgKi9cbiAgICBnZXRJbnQzMigpIHtcbiAgICAgICAgaWYgKHRoaXMuX19pbnRlcm5hbF9fY2FjaGVnZXRJbnQzMiA9PT0gbnVsbCB8fCB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0SW50MzIuYnVmZmVyICE9PSB0aGlzLl9faW50ZXJuYWxfX3dhc20ubWVtb3J5LmJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5fX2ludGVybmFsX19jYWNoZWdldEludDMyID0gbmV3IEludDMyQXJyYXkodGhpcy5fX2ludGVybmFsX193YXNtLm1lbW9yeS5idWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0SW50MzI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSBhbiBVaW50OEFycmF5IGluIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIGdldFVpbnQ4KCkge1xuICAgICAgICBpZiAodGhpcy5fX2ludGVybmFsX19jYWNoZWdldFVpbnQ4ID09PSBudWxsIHx8IHRoaXMuX19pbnRlcm5hbF9fY2FjaGVnZXRVaW50OC5idWZmZXIgIT09IHRoaXMuX19pbnRlcm5hbF9fd2FzbS5tZW1vcnkuYnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2NhY2hlZ2V0VWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLl9faW50ZXJuYWxfX3dhc20ubWVtb3J5LmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fY2FjaGVnZXRVaW50ODtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbiBVaW50OEFycmF5IGluIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIGdldFU4YShwdHIsIGxlbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRVaW50OCgpLnN1YmFycmF5KHB0ciAvIDEsIHB0ciAvIDEgKyBsZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgc3RyaW5nIGluIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIGdldFN0cmluZyhwdHIsIGxlbikge1xuICAgICAgICByZXR1cm4gdThhVG9TdHJpbmcodGhpcy5nZXRVOGEocHRyLCBsZW4pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIEFsbG9jYXRlcyBhbiBVaW50OEFycmF5IGluIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIGFsbG9jVThhKGFyZykge1xuICAgICAgICBjb25zdCBwdHIgPSB0aGlzLl9faW50ZXJuYWxfX3dhc20uX193YmluZGdlbl9tYWxsb2MoYXJnLmxlbmd0aCAqIDEpO1xuICAgICAgICB0aGlzLmdldFVpbnQ4KCkuc2V0KGFyZywgcHRyIC8gMSk7XG4gICAgICAgIHJldHVybiBbcHRyLCBhcmcubGVuZ3RoXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICogQGRlc2NyaXB0aW9uIEFsbG9jYXRlcyBhIHN0cmluZyBpbiB0aGUgV0FTTSBpbnRlcmZhY2VcbiAgICAgKi9cbiAgICBhbGxvY1N0cmluZyhhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb2NVOGEoc3RyaW5nVG9VOGEoYXJnKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYW4gVWludDhBcnJheSBmcm9tIHRoZSBXQVNNIGludGVyZmFjZVxuICAgICAqL1xuICAgIHJlc3VsdFU4YSgpIHtcbiAgICAgICAgY29uc3QgcjAgPSB0aGlzLmdldEludDMyKClbOCAvIDQgKyAwXTtcbiAgICAgICAgY29uc3QgcjEgPSB0aGlzLmdldEludDMyKClbOCAvIDQgKyAxXTtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5nZXRVOGEocjAsIHIxKS5zbGljZSgpO1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX3dhc20uX193YmluZGdlbl9mcmVlKHIwLCByMSAqIDEpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmUgYSBzdHJpbmcgZnJvbSB0aGUgV0FTTSBpbnRlcmZhY2VcbiAgICAgKi9cbiAgICByZXN1bHRTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB1OGFUb1N0cmluZyh0aGlzLnJlc3VsdFU4YSgpKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIEBuYW1lIGNyZWF0ZVdhc21GblxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGUgYSBXQVNNIChvciBBU00uanMpIGNyZWF0b3IgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBJdCB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlIGEgV0FTTSBpbnRlcmZhY2UgZmlyc3QgYW5kIGlmIHRoaXMgZmFpbHMgb3IgaXMgbm90IGF2YWlsYWJsZSBpblxuICogdGhlIGVudmlyb25tZW50LCB3aWxsIGZhbGxiYWNrIHRvIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGFuIEFTTS5qcyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXYXNtRm4ocm9vdCwgd2FzbUJ5dGVzLCBhc21Gbikge1xuICAgIHJldHVybiBhc3luYyAod2JnKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgICAgICAgd2FzbTogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCF3YXNtQnl0ZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gV2ViQXNzZW1ibHkgcHJvdmlkZWQgZm9yIGluaXRpYWxpemF0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgV2ViQXNzZW1ibHkgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViQXNzZW1ibHkgaXMgbm90IGF2YWlsYWJsZSBpbiB5b3VyIGVudmlyb25tZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh3YXNtQnl0ZXMsIHsgd2JnIH0pO1xuICAgICAgICAgICAgcmVzdWx0Lndhc20gPSBzb3VyY2UuaW5zdGFuY2UuZXhwb3J0cztcbiAgICAgICAgICAgIHJlc3VsdC50eXBlID0gJ3dhc20nO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHZhbGlkIHN1cHBsaWVkIGFzbS5qcywgcmV0dXJuIHRoYXRcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXNtRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQud2FzbSA9IGFzbUZuKHdiZyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSAnYXNtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvciA9IGBGQVRBTDogVW5hYmxlIHRvIGluaXRpYWxpemUgQHBvbGthZG90L3dhc20tJHtyb290fTo6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBnZXRSYW5kb21WYWx1ZXMgfSBmcm9tICdAcG9sa2Fkb3QveC1yYW5kb212YWx1ZXMnO1xuY29uc3QgREVGQVVMVF9DUllQVE8gPSB7IGdldFJhbmRvbVZhbHVlcyB9O1xuY29uc3QgREVGQVVMVF9TRUxGID0geyBjcnlwdG86IERFRkFVTFRfQ1JZUFRPIH07XG4vKipcbiAqIEBuYW1lIFdiZ1xuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGRlZmluZXMgdGhlIGludGVybmFsIGludGVyZmFjZXMgdGhhdCB3YXNtLWJpbmRnZW4gdXNlZCB0byBjb21tdW5pY2F0ZVxuICogd2l0aCB0aGUgaG9zdCBsYXllci4gTm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgdXNlciwgcmF0aGVyXG4gKiB0aGV5IGFyZSBjYWxsZWQgaW50ZXJuYWxseSBmcm9tIHRoZSBXQVNNIGNvZGUgaXRzZWxmLlxuICpcbiAqIFRoZSBpbnRlcmZhY2VzIGhlcmUgYXJlIGV4cG9zZWQgaW4gdGhlIGltcG9ydHMgb24gdGhlIGNyZWF0ZWQgV0FTTSBpbnRlcmZhY2VzLlxuICpcbiAqIEludGVybmFsbHkgdGhlIGltcGxlbWVudGF0aW9uIGRvZXMgYSB0aGluIGxheWVyIGludG8gdGhlIHN1cHBsaWVkIGJyaWRnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFdiZyB7XG4gICAgX19pbnRlcm5hbF9fYnJpZGdlO1xuICAgIGNvbnN0cnVjdG9yKGJyaWRnZSkge1xuICAgICAgICB0aGlzLl9faW50ZXJuYWxfX2JyaWRnZSA9IGJyaWRnZTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGFib3J0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Fib3J0Jyk7XG4gICAgfTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX193YmluZGdlbl9pc191bmRlZmluZWQgPSAoaWR4KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2JyaWRnZS5nZXRPYmplY3QoaWR4KSA9PT0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JpbmRnZW5fdGhyb3cgPSAocHRyLCBsZW4pID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuX19pbnRlcm5hbF9fYnJpZGdlLmdldFN0cmluZyhwdHIsIGxlbikpO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JnX3NlbGZfMWI3YTM5ZTNhOTJjOTQ5YyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYnJpZGdlLmFkZE9iamVjdChERUZBVUxUX1NFTEYpO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JnX3JlcXVpcmVfNjA0ODM3NDI4NTMyYTczMyA9IChwdHIsIGxlbikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZXF1aXJlICR7dGhpcy5fX2ludGVybmFsX19icmlkZ2UuZ2V0U3RyaW5nKHB0ciwgbGVuKX1gKTtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfX3diZ19jcnlwdG9fOTY4ZjE3NzIyODdlMmRmMCA9IChfaWR4KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9faW50ZXJuYWxfX2JyaWRnZS5hZGRPYmplY3QoREVGQVVMVF9DUllQVE8pO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JnX2dldFJhbmRvbVZhbHVlc19hM2QzNGI0ZmVlM2MyODY5ID0gKF9pZHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19pbnRlcm5hbF9fYnJpZGdlLmFkZE9iamVjdChERUZBVUxUX0NSWVBUTy5nZXRSYW5kb21WYWx1ZXMpO1xuICAgIH07XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9fd2JnX2dldFJhbmRvbVZhbHVlc19mNWUxNGFiN2FjOGU5OTVkID0gKF9hcmcwLCBwdHIsIGxlbikgPT4ge1xuICAgICAgICBERUZBVUxUX0NSWVBUTy5nZXRSYW5kb21WYWx1ZXModGhpcy5fX2ludGVybmFsX19icmlkZ2UuZ2V0VThhKHB0ciwgbGVuKSk7XG4gICAgfTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX193YmdfcmFuZG9tRmlsbFN5bmNfZDViZDJkNjU1ZmRmMjU2YSA9IChfaWR4LCBfcHRyLCBfbGVuKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmFuZG9tRmlsbHN5bmMgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICAvLyBnZXRPYmplY3QoaWR4KS5yYW5kb21GaWxsU3luYyhnZXRVOGEocHRyLCBsZW4pKTtcbiAgICB9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfX3diaW5kZ2VuX29iamVjdF9kcm9wX3JlZiA9IChpZHgpID0+IHtcbiAgICAgICAgdGhpcy5fX2ludGVybmFsX19icmlkZ2UudGFrZU9iamVjdChpZHgpO1xuICAgIH07XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3Qvd2FzbS1jcnlwdG8taW5pdCcsIHBhdGg6IChpbXBvcnQubWV0YSAmJiBpbXBvcnQubWV0YS51cmwpID8gbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLnN1YnN0cmluZygwLCBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpIDogJ2F1dG8nLCB0eXBlOiAnZXNtJywgdmVyc2lvbjogJzcuMy4yJyB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlV2FzbUZuIH0gZnJvbSAnQHBvbGthZG90L3dhc20tYnJpZGdlJztcbmltcG9ydCB7IHdhc21CeXRlcyB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtJztcbmV4cG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG4vKipcbiAqIEBuYW1lIGNyZWF0ZVdhc21cbiAqIEBkZXNjcmlwdGlvblxuICogQ3JlYXRlcyBhbiBpbnRlcmZhY2UgdXNpbmcgb25seSBXQVNNXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVXYXNtID0gLyojX19QVVJFX18qLyBjcmVhdGVXYXNtRm4oJ2NyeXB0bycsIHdhc21CeXRlcywgbnVsbCk7XG4iLCJpbXBvcnQgeyBiYXNlNjREZWNvZGUsIHVuemxpYlN5bmMgfSBmcm9tICdAcG9sa2Fkb3Qvd2FzbS11dGlsJztcbmltcG9ydCB7IGJ5dGVzLCBsZW5JbiwgbGVuT3V0IH0gZnJvbSAnLi9janMvYnl0ZXMuanMnO1xuZXhwb3J0IHsgcGFja2FnZUluZm8gfSBmcm9tICcuL3BhY2thZ2VJbmZvLmpzJztcbi8qKlxuICogQG5hbWUgd2FzbUJ5dGVzXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBkZWNvZGVkIFdBU00gaW50ZXJmYWNlIGFzIGV4cG9zZWQgYnkgdGhpcyBwYWNrYWdlLlxuICpcbiAqIFRoZSBidWlsZCBwcm9jZXNzIHdpbGwgb3V0cHV0IGludG8gY2pzLyogaW50byBhIGNvbXByZXNzZWQgYmFzZTY0IGZvcm1hdC5cbiAqIFVwb24gbG9hZGluZyB0aGUgZXhwb3NlZCBieXRlcyB3aWxsIGJlIGRlY29kZWQgYW5kIGRlY29tcHJlc3NlZCBmcm9tIHRoaXNcbiAqIHNwZWNpZmljIGZvcm1hdCBhbmQgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB3YXNtQnl0ZXMgPSAvKiNfX1BVUkVfXyovIHVuemxpYlN5bmMoYmFzZTY0RGVjb2RlKGJ5dGVzLCBuZXcgVWludDhBcnJheShsZW5JbikpLCBuZXcgVWludDhBcnJheShsZW5PdXQpKTtcbiIsImV4cG9ydCBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogJ0Bwb2xrYWRvdC93YXNtLWNyeXB0by13YXNtJywgcGF0aDogKGltcG9ydC5tZXRhICYmIGltcG9ydC5tZXRhLnVybCkgPyBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUuc3Vic3RyaW5nKDAsIG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5sYXN0SW5kZXhPZignLycpICsgMSkgOiAnYXV0bycsIHR5cGU6ICdlc20nLCB2ZXJzaW9uOiAnNy4zLjInIH07XG4iLCJpbXBvcnQgeyBicmlkZ2UsIGluaXRCcmlkZ2UgfSBmcm9tICcuL2luaXQuanMnO1xuZXhwb3J0IHsgcGFja2FnZUluZm8gfSBmcm9tICcuL3BhY2thZ2VJbmZvLmpzJztcbmV4cG9ydCB7IGJyaWRnZSB9O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBjcmVhdGUgYW4gZXh0ZW5hbCBpbnRlcmZhY2UgZnVuY3Rpb24gZnJvbSB0aGUgc2lnbmF0dXJlLCBhbGwgdGhlIHdoaWxlIGNoZWNraW5nXG4gKiB0aGUgYWN0dWFsIGJyaWRnZSB3YXNtIGludGVyZmFjZSB0byBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIGl0XG4gKlxuICogICB3aXRoV2FzbSh3YXNtOiBXYXNtQ3J5cHRvSW5zdGFuY2UsIGE6IG51bWJlciwgYjogc3RyaW5nKSA9PiBVaW50OEFycmF5XG4gKlxuICogYW5kIGluIHRoaXMgY2FzZSBpdCB3aWxsIGNyZWF0ZSBhbiBpbnRlcmZhY2UgZnVuY3Rpb24gd2l0aCB0aGUgc2lnbmFydXJlXG4gKlxuICogICAoYTogbnVtYmVyLCBiOiBzdHJpbmcpID0+IFVpbnQ4QXJyYXlcbiAqL1xuZnVuY3Rpb24gd2l0aFdhc20oZm4pIHtcbiAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgICBpZiAoIWJyaWRnZS53YXNtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBXQVNNIGludGVyZmFjZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIEVuc3VyZSB0aGF0IHlvdSB3YWl0IGZvciB0aGUgaW5pdGlhbGl6YXRpb24gUHJvbWlzZSB3aXRoIHdhaXRSZWFkeSgpIGZyb20gQHBvbGthZG90L3dhc20tY3J5cHRvIChvciBjcnlwdG9XYWl0UmVhZHkoKSBmcm9tIEBwb2xrYWRvdC91dGlsLWNyeXB0bykgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIFdBU00tb25seSBpbnRlcmZhY2VzLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbihicmlkZ2Uud2FzbSwgLi4ucGFyYW1zKTtcbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IGJpcDM5R2VuZXJhdGUgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCB3b3JkcykgPT4ge1xuICAgIHdhc20uZXh0X2JpcDM5X2dlbmVyYXRlKDgsIHdvcmRzKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFN0cmluZygpO1xufSk7XG5leHBvcnQgY29uc3QgYmlwMzlUb0VudHJvcHkgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwaHJhc2UpID0+IHtcbiAgICB3YXNtLmV4dF9iaXAzOV90b19lbnRyb3B5KDgsIC4uLmJyaWRnZS5hbGxvY1N0cmluZyhwaHJhc2UpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgYmlwMzlUb01pbmlTZWNyZXQgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwaHJhc2UsIHBhc3N3b3JkKSA9PiB7XG4gICAgd2FzbS5leHRfYmlwMzlfdG9fbWluaV9zZWNyZXQoOCwgLi4uYnJpZGdlLmFsbG9jU3RyaW5nKHBocmFzZSksIC4uLmJyaWRnZS5hbGxvY1N0cmluZyhwYXNzd29yZCkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBiaXAzOVRvU2VlZCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHBocmFzZSwgcGFzc3dvcmQpID0+IHtcbiAgICB3YXNtLmV4dF9iaXAzOV90b19zZWVkKDgsIC4uLmJyaWRnZS5hbGxvY1N0cmluZyhwaHJhc2UpLCAuLi5icmlkZ2UuYWxsb2NTdHJpbmcocGFzc3dvcmQpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgYmlwMzlWYWxpZGF0ZSA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHBocmFzZSkgPT4ge1xuICAgIGNvbnN0IHJldCA9IHdhc20uZXh0X2JpcDM5X3ZhbGlkYXRlKC4uLmJyaWRnZS5hbGxvY1N0cmluZyhwaHJhc2UpKTtcbiAgICByZXR1cm4gcmV0ICE9PSAwO1xufSk7XG5leHBvcnQgY29uc3QgZWQyNTUxOUtleXBhaXJGcm9tU2VlZCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHNlZWQpID0+IHtcbiAgICB3YXNtLmV4dF9lZF9mcm9tX3NlZWQoOCwgLi4uYnJpZGdlLmFsbG9jVThhKHNlZWQpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgZWQyNTUxOVNpZ24gPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwdWJrZXksIHNlY2tleSwgbWVzc2FnZSkgPT4ge1xuICAgIHdhc20uZXh0X2VkX3NpZ24oOCwgLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSksIC4uLmJyaWRnZS5hbGxvY1U4YShzZWNrZXkpLCAuLi5icmlkZ2UuYWxsb2NVOGEobWVzc2FnZSkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBlZDI1NTE5VmVyaWZ5ID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgc2lnbmF0dXJlLCBtZXNzYWdlLCBwdWJrZXkpID0+IHtcbiAgICBjb25zdCByZXQgPSB3YXNtLmV4dF9lZF92ZXJpZnkoLi4uYnJpZGdlLmFsbG9jVThhKHNpZ25hdHVyZSksIC4uLmJyaWRnZS5hbGxvY1U4YShtZXNzYWdlKSwgLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSkpO1xuICAgIHJldHVybiByZXQgIT09IDA7XG59KTtcbmV4cG9ydCBjb25zdCBzZWNwMjU2azFGcm9tU2VlZCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHNlY2tleSkgPT4ge1xuICAgIHdhc20uZXh0X3NlY3BfZnJvbV9zZWVkKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShzZWNrZXkpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3Qgc2VjcDI1NmsxQ29tcHJlc3MgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwdWJrZXkpID0+IHtcbiAgICB3YXNtLmV4dF9zZWNwX3B1Yl9jb21wcmVzcyg4LCAuLi5icmlkZ2UuYWxsb2NVOGEocHVia2V5KSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNlY3AyNTZrMUV4cGFuZCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHB1YmtleSkgPT4ge1xuICAgIHdhc20uZXh0X3NlY3BfcHViX2V4cGFuZCg4LCAuLi5icmlkZ2UuYWxsb2NVOGEocHVia2V5KSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNlY3AyNTZrMVJlY292ZXIgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBtc2dIYXNoLCBzaWcsIHJlY292ZXJ5KSA9PiB7XG4gICAgd2FzbS5leHRfc2VjcF9yZWNvdmVyKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShtc2dIYXNoKSwgLi4uYnJpZGdlLmFsbG9jVThhKHNpZyksIHJlY292ZXJ5KTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3Qgc2VjcDI1NmsxU2lnbiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIG1zZ0hhc2gsIHNlY2tleSkgPT4ge1xuICAgIHdhc20uZXh0X3NlY3Bfc2lnbig4LCAuLi5icmlkZ2UuYWxsb2NVOGEobXNnSGFzaCksIC4uLmJyaWRnZS5hbGxvY1U4YShzZWNrZXkpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3Qgc3IyNTUxOURlcml2ZUtleXBhaXJIYXJkID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgcGFpciwgY2MpID0+IHtcbiAgICB3YXNtLmV4dF9zcl9kZXJpdmVfa2V5cGFpcl9oYXJkKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShwYWlyKSwgLi4uYnJpZGdlLmFsbG9jVThhKGNjKSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNyMjU1MTlEZXJpdmVLZXlwYWlyU29mdCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHBhaXIsIGNjKSA9PiB7XG4gICAgd2FzbS5leHRfc3JfZGVyaXZlX2tleXBhaXJfc29mdCg4LCAuLi5icmlkZ2UuYWxsb2NVOGEocGFpciksIC4uLmJyaWRnZS5hbGxvY1U4YShjYykpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBzcjI1NTE5RGVyaXZlUHVibGljU29mdCA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHB1YmtleSwgY2MpID0+IHtcbiAgICB3YXNtLmV4dF9zcl9kZXJpdmVfcHVibGljX3NvZnQoOCwgLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSksIC4uLmJyaWRnZS5hbGxvY1U4YShjYykpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBzcjI1NTE5S2V5cGFpckZyb21TZWVkID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgc2VlZCkgPT4ge1xuICAgIHdhc20uZXh0X3NyX2Zyb21fc2VlZCg4LCAuLi5icmlkZ2UuYWxsb2NVOGEoc2VlZCkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBzcjI1NTE5U2lnbiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHB1YmtleSwgc2VjcmV0LCBtZXNzYWdlKSA9PiB7XG4gICAgd2FzbS5leHRfc3Jfc2lnbig4LCAuLi5icmlkZ2UuYWxsb2NVOGEocHVia2V5KSwgLi4uYnJpZGdlLmFsbG9jVThhKHNlY3JldCksIC4uLmJyaWRnZS5hbGxvY1U4YShtZXNzYWdlKSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNyMjU1MTlWZXJpZnkgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBzaWduYXR1cmUsIG1lc3NhZ2UsIHB1YmtleSkgPT4ge1xuICAgIGNvbnN0IHJldCA9IHdhc20uZXh0X3NyX3ZlcmlmeSguLi5icmlkZ2UuYWxsb2NVOGEoc2lnbmF0dXJlKSwgLi4uYnJpZGdlLmFsbG9jVThhKG1lc3NhZ2UpLCAuLi5icmlkZ2UuYWxsb2NVOGEocHVia2V5KSk7XG4gICAgcmV0dXJuIHJldCAhPT0gMDtcbn0pO1xuZXhwb3J0IGNvbnN0IHNyMjU1MTlBZ3JlZSA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHB1YmtleSwgc2VjcmV0KSA9PiB7XG4gICAgd2FzbS5leHRfc3JfYWdyZWUoOCwgLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSksIC4uLmJyaWRnZS5hbGxvY1U4YShzZWNyZXQpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgdnJmU2lnbiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIHNlY3JldCwgY29udGV4dCwgbWVzc2FnZSwgZXh0cmEpID0+IHtcbiAgICB3YXNtLmV4dF92cmZfc2lnbig4LCAuLi5icmlkZ2UuYWxsb2NVOGEoc2VjcmV0KSwgLi4uYnJpZGdlLmFsbG9jVThhKGNvbnRleHQpLCAuLi5icmlkZ2UuYWxsb2NVOGEobWVzc2FnZSksIC4uLmJyaWRnZS5hbGxvY1U4YShleHRyYSkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCB2cmZWZXJpZnkgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwdWJrZXksIGNvbnRleHQsIG1lc3NhZ2UsIGV4dHJhLCBvdXRBbmRQcm9vZikgPT4ge1xuICAgIGNvbnN0IHJldCA9IHdhc20uZXh0X3ZyZl92ZXJpZnkoLi4uYnJpZGdlLmFsbG9jVThhKHB1YmtleSksIC4uLmJyaWRnZS5hbGxvY1U4YShjb250ZXh0KSwgLi4uYnJpZGdlLmFsbG9jVThhKG1lc3NhZ2UpLCAuLi5icmlkZ2UuYWxsb2NVOGEoZXh0cmEpLCAuLi5icmlkZ2UuYWxsb2NVOGEob3V0QW5kUHJvb2YpKTtcbiAgICByZXR1cm4gcmV0ICE9PSAwO1xufSk7XG5leHBvcnQgY29uc3QgYmxha2UyYiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIGRhdGEsIGtleSwgc2l6ZSkgPT4ge1xuICAgIHdhc20uZXh0X2JsYWtlMmIoOCwgLi4uYnJpZGdlLmFsbG9jVThhKGRhdGEpLCAuLi5icmlkZ2UuYWxsb2NVOGEoa2V5KSwgc2l6ZSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IGhtYWNTaGEyNTYgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBrZXksIGRhdGEpID0+IHtcbiAgICB3YXNtLmV4dF9obWFjX3NoYTI1Nig4LCAuLi5icmlkZ2UuYWxsb2NVOGEoa2V5KSwgLi4uYnJpZGdlLmFsbG9jVThhKGRhdGEpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgaG1hY1NoYTUxMiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIGtleSwgZGF0YSkgPT4ge1xuICAgIHdhc20uZXh0X2htYWNfc2hhNTEyKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShrZXkpLCAuLi5icmlkZ2UuYWxsb2NVOGEoZGF0YSkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBrZWNjYWsyNTYgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBkYXRhKSA9PiB7XG4gICAgd2FzbS5leHRfa2VjY2FrMjU2KDgsIC4uLmJyaWRnZS5hbGxvY1U4YShkYXRhKSk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IGtlY2NhazUxMiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIGRhdGEpID0+IHtcbiAgICB3YXNtLmV4dF9rZWNjYWs1MTIoOCwgLi4uYnJpZGdlLmFsbG9jVThhKGRhdGEpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3QgcGJrZGYyID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgZGF0YSwgc2FsdCwgcm91bmRzKSA9PiB7XG4gICAgd2FzbS5leHRfcGJrZGYyKDgsIC4uLmJyaWRnZS5hbGxvY1U4YShkYXRhKSwgLi4uYnJpZGdlLmFsbG9jVThhKHNhbHQpLCByb3VuZHMpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCBzY3J5cHQgPSAvKiNfX1BVUkVfXyovIHdpdGhXYXNtKCh3YXNtLCBwYXNzd29yZCwgc2FsdCwgbG9nMm4sIHIsIHApID0+IHtcbiAgICB3YXNtLmV4dF9zY3J5cHQoOCwgLi4uYnJpZGdlLmFsbG9jVThhKHBhc3N3b3JkKSwgLi4uYnJpZGdlLmFsbG9jVThhKHNhbHQpLCBsb2cybiwgciwgcCk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGNvbnN0IHNoYTI1NiA9IC8qI19fUFVSRV9fKi8gd2l0aFdhc20oKHdhc20sIGRhdGEpID0+IHtcbiAgICB3YXNtLmV4dF9zaGEyNTYoOCwgLi4uYnJpZGdlLmFsbG9jVThhKGRhdGEpKTtcbiAgICByZXR1cm4gYnJpZGdlLnJlc3VsdFU4YSgpO1xufSk7XG5leHBvcnQgY29uc3Qgc2hhNTEyID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgZGF0YSkgPT4ge1xuICAgIHdhc20uZXh0X3NoYTUxMig4LCAuLi5icmlkZ2UuYWxsb2NVOGEoZGF0YSkpO1xuICAgIHJldHVybiBicmlkZ2UucmVzdWx0VThhKCk7XG59KTtcbmV4cG9ydCBjb25zdCB0d294ID0gLyojX19QVVJFX18qLyB3aXRoV2FzbSgod2FzbSwgZGF0YSwgcm91bmRzKSA9PiB7XG4gICAgd2FzbS5leHRfdHdveCg4LCAuLi5icmlkZ2UuYWxsb2NVOGEoZGF0YSksIHJvdW5kcyk7XG4gICAgcmV0dXJuIGJyaWRnZS5yZXN1bHRVOGEoKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuICEhYnJpZGdlLndhc207XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdFJlYWR5KCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHdhc20gPSBhd2FpdCBpbml0QnJpZGdlKCk7XG4gICAgICAgIHJldHVybiAhIXdhc207XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJyaWRnZSB9IGZyb20gJ0Bwb2xrYWRvdC93YXNtLWJyaWRnZSc7XG5pbXBvcnQgeyBjcmVhdGVXYXNtIH0gZnJvbSAnQHBvbGthZG90L3dhc20tY3J5cHRvLWluaXQnO1xuLyoqXG4gKiBAbmFtZSBicmlkZ2VcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIEpTIDwtPiBXQVNNIGJyaWRnZSB0aGF0IGlzIGluIG9wZXJhdGlvbi4gRm9yIHRoZSBzcGVjaWZpYyBwYWNrYWdlXG4gKiBpdCBpcyBhIGdsb2JhbCwgaS5lLiBhbGwgb3BlcmF0aW9ucyBoYXBwZW5zIG9uIHRoaXMgc3BlY2lmaWMgYnJpZGdlXG4gKi9cbmV4cG9ydCBjb25zdCBicmlkZ2UgPSBuZXcgQnJpZGdlKGNyZWF0ZVdhc20pO1xuLyoqXG4gKiBAbmFtZSBpbml0QnJpZGdlXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZXMgYSBuZXcgYnJpZGdlIGludGVyZmFjZSB3aXRoIHRoZSAob3B0aW9uYWwpIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0QnJpZGdlKGNyZWF0ZVdhc20pIHtcbiAgICByZXR1cm4gYnJpZGdlLmluaXQoY3JlYXRlV2FzbSk7XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3Qvd2FzbS1jcnlwdG8nLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICc3LjMuMicgfTtcbiIsImNvbnN0IENIUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbmNvbnN0IG1hcCA9IG5ldyBBcnJheSgyNTYpO1xuZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gQ0hSLmxlbmd0aDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBtYXBbQ0hSLmNoYXJDb2RlQXQoaSldID0gaTtcbn1cbi8qKlxuICogQG5hbWUgYmFzZTY0RGVjb2RlXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgYmFzZTY0IGRlY29kaW5nIGZ1bmN0aW9uIHRoYXQgb3BlcmF0ZXMgaW4gYWxsIGVudmlyb25tZW50cy4gVW5saWtlIGRlY29kaW5nXG4gKiBmcm9tIEJ1ZmZlciAoTm9kZS5qcyBvbmx5KSBvciBhdG9iIChicm93c2VyLW9ubHkpIHRoaXMgaW1wbGVtZW50YXRpb24gaXNcbiAqIHNsaWdodGx5IHNsb3dlciwgYnV0IGl0IGlzIHBsYXRmb3JtIGluZGVwZW5kZW50LlxuICpcbiAqIEZvciBvdXIgdXNhZ2UsIHNpbmNlIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBzdGF0aWMgZmluYWwgc2l6ZSwgc28gd2UgZGVjb2RlXG4gKiB0byBhIHNwZWNpZmllZCBvdXRwdXQgYnVmZmVyLiBUaGlzIGFsc28gbWVhbnMgd2UgaGF2ZSBhcHBsaWVkIGEgbnVtYmVyIG9mXG4gKiBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoaXMgLSBjaGVja2luZyBvdXRwdXQgcG9zaXRpb24gaW5zdGVhZCBvZiBjaGFycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NERlY29kZShkYXRhLCBvdXQpIHtcbiAgICBsZXQgYnl0ZSA9IDA7XG4gICAgbGV0IGJpdHMgPSAwO1xuICAgIGxldCBwb3MgPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGFzdCA9IG91dC5sZW5ndGggLSAxOyBwb3MgIT09IGxhc3Q7IGkrKykge1xuICAgICAgICAvLyBlYWNoIGNoYXJhY3RlciByZXByZXNlbnRzIDYgYml0c1xuICAgICAgICBieXRlID0gKGJ5dGUgPDwgNikgfCBtYXBbZGF0YS5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgLy8gZWFjaCBieXRlIG5lZWRzIHRvIGNvbnRhaW4gOCBiaXRzXG4gICAgICAgIGlmICgoYml0cyArPSA2KSA+PSA4KSB7XG4gICAgICAgICAgICBvdXRbKytwb3NdID0gKGJ5dGUgPj4+IChiaXRzIC09IDgpKSAmIDB4ZmY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbiIsImNvbnN0IHU4ID0gVWludDhBcnJheSwgdTE2ID0gVWludDE2QXJyYXksIHUzMiA9IFVpbnQzMkFycmF5O1xuY29uc3QgY2xpbSA9IG5ldyB1OChbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0pO1xuY29uc3QgZmxlYiA9IG5ldyB1OChbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgMCwgLyogdW51c2VkICovIDAsIDAsIC8qIGltcG9zc2libGUgKi8gMF0pO1xuY29uc3QgZmRlYiA9IG5ldyB1OChbMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCwgOSwgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTMsIDEzLCAvKiB1bnVzZWQgKi8gMCwgMF0pO1xuY29uc3QgZnJlYiA9IChlYiwgc3RhcnQpID0+IHtcbiAgICBjb25zdCBiID0gbmV3IHUxNigzMSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMTsgKytpKSB7XG4gICAgICAgIGJbaV0gPSBzdGFydCArPSAxIDw8IGViW2kgLSAxXTtcbiAgICB9XG4gICAgLy8gbnVtYmVycyBoZXJlIGFyZSBhdCBtYXggMTggYml0c1xuICAgIGNvbnN0IHIgPSBuZXcgdTMyKGJbMzBdKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDMwOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGJbaV07IGogPCBiW2kgKyAxXTsgKytqKSB7XG4gICAgICAgICAgICByW2pdID0gKChqIC0gYltpXSkgPDwgNSkgfCBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbYiwgcl07XG59O1xuY29uc3QgW2ZsLCByZXZmbF0gPSBmcmViKGZsZWIsIDIpO1xuZmxbMjhdID0gMjU4LCByZXZmbFsyNThdID0gMjg7XG5jb25zdCBbZmRdID0gZnJlYihmZGViLCAwKTtcbmNvbnN0IHJldiA9IG5ldyB1MTYoMzI3NjgpO1xuZm9yIChsZXQgaSA9IDA7IGkgPCAzMjc2ODsgKytpKSB7XG4gICAgLy8gcmV2ZXJzZSB0YWJsZSBhbGdvcml0aG0gZnJvbSBTT1xuICAgIGxldCB4ID0gKChpICYgMHhBQUFBKSA+Pj4gMSkgfCAoKGkgJiAweDU1NTUpIDw8IDEpO1xuICAgIHggPSAoKHggJiAweENDQ0MpID4+PiAyKSB8ICgoeCAmIDB4MzMzMykgPDwgMik7XG4gICAgeCA9ICgoeCAmIDB4RjBGMCkgPj4+IDQpIHwgKCh4ICYgMHgwRjBGKSA8PCA0KTtcbiAgICByZXZbaV0gPSAoKCh4ICYgMHhGRjAwKSA+Pj4gOCkgfCAoKHggJiAweDAwRkYpIDw8IDgpKSA+Pj4gMTtcbn1cbmNvbnN0IGhNYXAgPSAoKGNkLCBtYiwgcikgPT4ge1xuICAgIGNvbnN0IHMgPSBjZC5sZW5ndGg7XG4gICAgLy8gaW5kZXhcbiAgICBsZXQgaSA9IDA7XG4gICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+ICMgb2YgY29kZXMgd2l0aCBiaXQgbGVuZ3RoID0gaW5kZXhcbiAgICBjb25zdCBsID0gbmV3IHUxNihtYik7XG4gICAgLy8gbGVuZ3RoIG9mIGNkIG11c3QgYmUgMjg4ICh0b3RhbCAjIG9mIGNvZGVzKVxuICAgIGZvciAoOyBpIDwgczsgKytpKSB7XG4gICAgICAgIGlmIChjZFtpXSlcbiAgICAgICAgICAgICsrbFtjZFtpXSAtIDFdO1xuICAgIH1cbiAgICAvLyB1MTYgXCJtYXBcIjogaW5kZXggLT4gbWluaW11bSBjb2RlIGZvciBiaXQgbGVuZ3RoID0gaW5kZXhcbiAgICBjb25zdCBsZSA9IG5ldyB1MTYobWIpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBtYjsgKytpKSB7XG4gICAgICAgIGxlW2ldID0gKGxlW2kgLSAxXSArIGxbaSAtIDFdKSA8PCAxO1xuICAgIH1cbiAgICBsZXQgY287XG4gICAgaWYgKHIpIHtcbiAgICAgICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+IG51bWJlciBvZiBhY3R1YWwgYml0cywgc3ltYm9sIGZvciBjb2RlXG4gICAgICAgIGNvID0gbmV3IHUxNigxIDw8IG1iKTtcbiAgICAgICAgLy8gYml0cyB0byByZW1vdmUgZm9yIHJldmVyc2VyXG4gICAgICAgIGNvbnN0IHJ2YiA9IDE1IC0gbWI7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSAwIGxlbmd0aHNcbiAgICAgICAgICAgIGlmIChjZFtpXSkge1xuICAgICAgICAgICAgICAgIC8vIG51bSBlbmNvZGluZyBib3RoIHN5bWJvbCBhbmQgYml0cyByZWFkXG4gICAgICAgICAgICAgICAgY29uc3Qgc3YgPSAoaSA8PCA0KSB8IGNkW2ldO1xuICAgICAgICAgICAgICAgIC8vIGZyZWUgYml0c1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBtYiAtIGNkW2ldO1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHZhbHVlXG4gICAgICAgICAgICAgICAgbGV0IHYgPSBsZVtjZFtpXSAtIDFdKysgPDwgcjtcbiAgICAgICAgICAgICAgICAvLyBtIGlzIGVuZCB2YWx1ZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSA9IHYgfCAoKDEgPDwgcikgLSAxKTsgdiA8PSBtOyArK3YpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlcnkgMTYgYml0IHZhbHVlIHN0YXJ0aW5nIHdpdGggdGhlIGNvZGUgeWllbGRzIHRoZSBzYW1lIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICBjb1tyZXZbdl0gPj4gcnZiXSA9IHN2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY28gPSBuZXcgdTE2KHMpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgczsgKytpKSB7XG4gICAgICAgICAgICBpZiAoY2RbaV0pIHtcbiAgICAgICAgICAgICAgICBjb1tpXSA9IHJldltsZVtjZFtpXSAtIDFdKytdID4+ICgxNSAtIGNkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY287XG59KTtcbmNvbnN0IGZsdCA9IG5ldyB1OCgyODgpO1xuZm9yIChsZXQgaSA9IDA7IGkgPCAxNDQ7ICsraSlcbiAgICBmbHRbaV0gPSA4O1xuZm9yIChsZXQgaSA9IDE0NDsgaSA8IDI1NjsgKytpKVxuICAgIGZsdFtpXSA9IDk7XG5mb3IgKGxldCBpID0gMjU2OyBpIDwgMjgwOyArK2kpXG4gICAgZmx0W2ldID0gNztcbmZvciAobGV0IGkgPSAyODA7IGkgPCAyODg7ICsraSlcbiAgICBmbHRbaV0gPSA4O1xuY29uc3QgZmR0ID0gbmV3IHU4KDMyKTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMzI7ICsraSlcbiAgICBmZHRbaV0gPSA1O1xuY29uc3QgZmxybSA9IGhNYXAoZmx0LCA5LCAxKTtcbmNvbnN0IGZkcm0gPSBoTWFwKGZkdCwgNSwgMSk7XG5jb25zdCBiaXRzID0gKGQsIHAsIG0pID0+IHtcbiAgICBjb25zdCBvID0gcCA+Pj4gMztcbiAgICByZXR1cm4gKChkW29dIHwgKGRbbyArIDFdIDw8IDgpKSA+Pj4gKHAgJiA3KSkgJiBtO1xufTtcbmNvbnN0IGJpdHMxNiA9IChkLCBwKSA9PiB7XG4gICAgY29uc3QgbyA9IHAgPj4+IDM7XG4gICAgcmV0dXJuICgoZFtvXSB8IChkW28gKyAxXSA8PCA4KSB8IChkW28gKyAyXSA8PCAxNikpID4+PiAocCAmIDcpKTtcbn07XG5jb25zdCBzaGZ0ID0gKHApID0+IChwID4+PiAzKSArIChwICYgNyAmJiAxKTtcbmNvbnN0IHNsYyA9ICh2LCBzLCBlKSA9PiB7XG4gICAgaWYgKHMgPT0gbnVsbCB8fCBzIDwgMClcbiAgICAgICAgcyA9IDA7XG4gICAgaWYgKGUgPT0gbnVsbCB8fCBlID4gdi5sZW5ndGgpXG4gICAgICAgIGUgPSB2Lmxlbmd0aDtcbiAgICAvLyBjYW4ndCB1c2UgLmNvbnN0cnVjdG9yIGluIGNhc2UgdXNlci1zdXBwbGllZFxuICAgIGNvbnN0IG4gPSBuZXcgKHYgaW5zdGFuY2VvZiB1MTYgPyB1MTYgOiB2IGluc3RhbmNlb2YgdTMyID8gdTMyIDogdTgpKGUgLSBzKTtcbiAgICBuLnNldCh2LnN1YmFycmF5KHMsIGUpKTtcbiAgICByZXR1cm4gbjtcbn07XG5jb25zdCBtYXggPSAoYSkgPT4ge1xuICAgIGxldCBtID0gYVswXTtcbiAgICBmb3IgKGxldCBpID0gMSwgY291bnQgPSBhLmxlbmd0aDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgaWYgKGFbaV0gPiBtKVxuICAgICAgICAgICAgbSA9IGFbaV07XG4gICAgfVxuICAgIHJldHVybiBtO1xufTtcbmNvbnN0IGluZmx0ID0gKGRhdCwgYnVmLCBzdCkgPT4ge1xuICAgIGNvbnN0IG5vU3QgPSAhc3QgfHwgc3QuaTtcbiAgICBpZiAoIXN0KVxuICAgICAgICBzdCA9IHt9O1xuICAgIC8vIHNvdXJjZSBsZW5ndGhcbiAgICBjb25zdCBzbCA9IGRhdC5sZW5ndGg7XG4gICAgLy8gaGF2ZSB0byBlc3RpbWF0ZSBzaXplXG4gICAgY29uc3Qgbm9CdWYgPSAhYnVmIHx8ICFub1N0O1xuICAgIC8vIEFzc3VtZXMgcm91Z2hseSAzMyUgY29tcHJlc3Npb24gcmF0aW8gYXZlcmFnZVxuICAgIGlmICghYnVmKVxuICAgICAgICBidWYgPSBuZXcgdTgoc2wgKiAzKTtcbiAgICAvLyBlbnN1cmUgYnVmZmVyIGNhbiBmaXQgYXQgbGVhc3QgbCBlbGVtZW50c1xuICAgIGNvbnN0IGNidWYgPSAobCkgPT4ge1xuICAgICAgICBsZXQgYmwgPSBidWYubGVuZ3RoO1xuICAgICAgICAvLyBuZWVkIHRvIGluY3JlYXNlIHNpemUgdG8gZml0XG4gICAgICAgIGlmIChsID4gYmwpIHtcbiAgICAgICAgICAgIC8vIERvdWJsZSBvciBzZXQgdG8gbmVjZXNzYXJ5LCB3aGljaGV2ZXIgaXMgZ3JlYXRlclxuICAgICAgICAgICAgY29uc3QgbmJ1ZiA9IG5ldyB1OChNYXRoLm1heChibCA8PCAxLCBsKSk7XG4gICAgICAgICAgICBuYnVmLnNldChidWYpO1xuICAgICAgICAgICAgYnVmID0gbmJ1ZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gIGxhc3QgY2h1bmsgICAgICAgICBiaXRwb3MgICAgICAgICAgIGJ5dGVzXG4gICAgbGV0IGZpbmFsID0gc3QuZiB8fCAwLCBwb3MgPSBzdC5wIHx8IDAsIGJ0ID0gc3QuYiB8fCAwLCBsbSA9IHN0LmwsIGRtID0gc3QuZCwgbGJ0ID0gc3QubSwgZGJ0ID0gc3QubjtcbiAgICBpZiAoZmluYWwgJiYgIWxtKVxuICAgICAgICByZXR1cm4gYnVmO1xuICAgIC8vIHRvdGFsIGJpdHNcbiAgICBjb25zdCB0YnRzID0gc2wgPDwgMztcbiAgICBkbyB7XG4gICAgICAgIGlmICghbG0pIHtcbiAgICAgICAgICAgIC8vIEJGSU5BTCAtIHRoaXMgaXMgb25seSAxIHdoZW4gbGFzdCBjaHVuayBpcyBuZXh0XG4gICAgICAgICAgICBzdC5mID0gZmluYWwgPSBiaXRzKGRhdCwgcG9zLCAxKTtcbiAgICAgICAgICAgIC8vIHR5cGU6IDAgPSBubyBjb21wcmVzc2lvbiwgMSA9IGZpeGVkIGh1ZmZtYW4sIDIgPSBkeW5hbWljIGh1ZmZtYW5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBiaXRzKGRhdCwgcG9zICsgMSwgMyk7XG4gICAgICAgICAgICBwb3MgKz0gMztcbiAgICAgICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGdvIHRvIGVuZCBvZiBieXRlIGJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IHNoZnQocG9zKSArIDQsIGwgPSBkYXRbcyAtIDRdIHwgKGRhdFtzIC0gM10gPDwgOCksIHQgPSBzICsgbDtcbiAgICAgICAgICAgICAgICBpZiAodCA+IHNsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ3VuZXhwZWN0ZWQgRU9GJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBzaXplXG4gICAgICAgICAgICAgICAgaWYgKG5vQnVmKVxuICAgICAgICAgICAgICAgICAgICBjYnVmKGJ0ICsgbCk7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBvdmVyIHVuY29tcHJlc3NlZCBkYXRhXG4gICAgICAgICAgICAgICAgYnVmLnNldChkYXQuc3ViYXJyYXkocywgdCksIGJ0KTtcbiAgICAgICAgICAgICAgICAvLyBHZXQgbmV3IGJpdHBvcywgdXBkYXRlIGJ5dGUgY291bnRcbiAgICAgICAgICAgICAgICBzdC5iID0gYnQgKz0gbCwgc3QucCA9IHBvcyA9IHQgPDwgMztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMSlcbiAgICAgICAgICAgICAgICBsbSA9IGZscm0sIGRtID0gZmRybSwgbGJ0ID0gOSwgZGJ0ID0gNTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMikge1xuICAgICAgICAgICAgICAgIC8vICBsaXRlcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aHNcbiAgICAgICAgICAgICAgICBjb25zdCBoTGl0ID0gYml0cyhkYXQsIHBvcywgMzEpICsgMjU3LCBoY0xlbiA9IGJpdHMoZGF0LCBwb3MgKyAxMCwgMTUpICsgNDtcbiAgICAgICAgICAgICAgICBjb25zdCB0bCA9IGhMaXQgKyBiaXRzKGRhdCwgcG9zICsgNSwgMzEpICsgMTtcbiAgICAgICAgICAgICAgICBwb3MgKz0gMTQ7XG4gICAgICAgICAgICAgICAgLy8gbGVuZ3RoK2Rpc3RhbmNlIHRyZWVcbiAgICAgICAgICAgICAgICBjb25zdCBsZHQgPSBuZXcgdTgodGwpO1xuICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RoIHRyZWVcbiAgICAgICAgICAgICAgICBjb25zdCBjbHQgPSBuZXcgdTgoMTkpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGNMZW47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1c2UgaW5kZXggbWFwIHRvIGdldCByZWFsIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgY2x0W2NsaW1baV1dID0gYml0cyhkYXQsIHBvcyArIGkgKiAzLCA3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcG9zICs9IGhjTGVuICogMztcbiAgICAgICAgICAgICAgICAvLyBjb2RlIGxlbmd0aHMgYml0c1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYiA9IG1heChjbHQpLCBjbGJtc2sgPSAoMSA8PCBjbGIpIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vU3QgJiYgcG9zICsgdGwgKiAoY2xiICsgNykgPiB0YnRzKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAvLyBjb2RlIGxlbmd0aHMgbWFwXG4gICAgICAgICAgICAgICAgY29uc3QgY2xtID0gaE1hcChjbHQsIGNsYiwgMSk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bDspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGNsbVtiaXRzKGRhdCwgcG9zLCBjbGJtc2spXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYml0cyByZWFkXG4gICAgICAgICAgICAgICAgICAgIHBvcyArPSByICYgMTU7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN5bWJvbFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gciA+Pj4gNDtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29kZSBsZW5ndGggdG8gY29weVxuICAgICAgICAgICAgICAgICAgICBpZiAocyA8IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZHRbaSsrXSA9IHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgY29weSAgIGNvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYyA9IDAsIG4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDMgKyBiaXRzKGRhdCwgcG9zLCAzKSwgcG9zICs9IDIsIGMgPSBsZHRbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocyA9PSAxNylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMyArIGJpdHMoZGF0LCBwb3MsIDcpLCBwb3MgKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMgPT0gMTgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDExICsgYml0cyhkYXQsIHBvcywgMTI3KSwgcG9zICs9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobi0tKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxkdFtpKytdID0gYztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICBsZW5ndGggdHJlZSAgICAgICAgICAgICAgICAgZGlzdGFuY2UgdHJlZVxuICAgICAgICAgICAgICAgIGNvbnN0IGx0ID0gbGR0LnN1YmFycmF5KDAsIGhMaXQpLCBkdCA9IGxkdC5zdWJhcnJheShoTGl0KTtcbiAgICAgICAgICAgICAgICAvLyBtYXggbGVuZ3RoIGJpdHNcbiAgICAgICAgICAgICAgICBsYnQgPSBtYXgobHQpO1xuICAgICAgICAgICAgICAgIC8vIG1heCBkaXN0IGJpdHNcbiAgICAgICAgICAgICAgICBkYnQgPSBtYXgoZHQpO1xuICAgICAgICAgICAgICAgIGxtID0gaE1hcChsdCwgbGJ0LCAxKTtcbiAgICAgICAgICAgICAgICBkbSA9IGhNYXAoZHQsIGRidCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgJ2ludmFsaWQgYmxvY2sgdHlwZSc7XG4gICAgICAgICAgICBpZiAocG9zID4gdGJ0cylcbiAgICAgICAgICAgICAgICB0aHJvdyAndW5leHBlY3RlZCBFT0YnO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIGNhbiBob2xkIHRoaXMgKyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBhZGRpdGlvblxuICAgICAgICAvLyBtYXhpbXVtIGNodW5rIHNpemUgKHByYWN0aWNhbGx5LCB0aGVvcmV0aWNhbGx5IGluZmluaXRlKSBpcyAyXjE3O1xuICAgICAgICBpZiAobm9CdWYpXG4gICAgICAgICAgICBjYnVmKGJ0ICsgMTMxMDcyKTtcbiAgICAgICAgY29uc3QgbG1zID0gKDEgPDwgbGJ0KSAtIDEsIGRtcyA9ICgxIDw8IGRidCkgLSAxO1xuICAgICAgICBjb25zdCBteGEgPSBsYnQgKyBkYnQgKyAxODtcbiAgICAgICAgd2hpbGUgKG5vU3QgfHwgcG9zICsgbXhhIDwgdGJ0cykge1xuICAgICAgICAgICAgLy8gYml0cyByZWFkLCBjb2RlXG4gICAgICAgICAgICBjb25zdCBjID0gbG1bYml0czE2KGRhdCwgcG9zKSAmIGxtc10sIHN5bSA9IGMgPj4+IDQ7XG4gICAgICAgICAgICBwb3MgKz0gYyAmIDE1O1xuICAgICAgICAgICAgaWYgKHBvcyA+IHRidHMpXG4gICAgICAgICAgICAgICAgdGhyb3cgJ3VuZXhwZWN0ZWQgRU9GJztcbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgICB0aHJvdyAnaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCc7XG4gICAgICAgICAgICBpZiAoc3ltIDwgMjU2KVxuICAgICAgICAgICAgICAgIGJ1ZltidCsrXSA9IHN5bTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHN5bSA9PSAyNTYpIHtcbiAgICAgICAgICAgICAgICBsbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBhZGQgPSBzeW0gLSAyNTQ7XG4gICAgICAgICAgICAgICAgLy8gbm8gZXh0cmEgYml0cyBuZWVkZWQgaWYgbGVzc1xuICAgICAgICAgICAgICAgIGlmIChzeW0gPiAyNjQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IHN5bSAtIDI1NywgYiA9IGZsZWJbaV07XG4gICAgICAgICAgICAgICAgICAgIGFkZCA9IGJpdHMoZGF0LCBwb3MsICgxIDw8IGIpIC0gMSkgKyBmbFtpXTtcbiAgICAgICAgICAgICAgICAgICAgcG9zICs9IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRpc3RcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZG1bYml0czE2KGRhdCwgcG9zKSAmIGRtc10sIGRzeW0gPSBkID4+PiA0O1xuICAgICAgICAgICAgICAgIGlmICghZClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ2ludmFsaWQgZGlzdGFuY2UnO1xuICAgICAgICAgICAgICAgIHBvcyArPSBkICYgMTU7XG4gICAgICAgICAgICAgICAgbGV0IGR0ID0gZmRbZHN5bV07XG4gICAgICAgICAgICAgICAgaWYgKGRzeW0gPiAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBmZGViW2RzeW1dO1xuICAgICAgICAgICAgICAgICAgICBkdCArPSBiaXRzMTYoZGF0LCBwb3MpICYgKCgxIDw8IGIpIC0gMSksIHBvcyArPSBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocG9zID4gdGJ0cylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ3VuZXhwZWN0ZWQgRU9GJztcbiAgICAgICAgICAgICAgICBpZiAobm9CdWYpXG4gICAgICAgICAgICAgICAgICAgIGNidWYoYnQgKyAxMzEwNzIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGJ0ICsgYWRkO1xuICAgICAgICAgICAgICAgIGZvciAoOyBidCA8IGVuZDsgYnQgKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICBidWZbYnRdID0gYnVmW2J0IC0gZHRdO1xuICAgICAgICAgICAgICAgICAgICBidWZbYnQgKyAxXSA9IGJ1ZltidCArIDEgLSBkdF07XG4gICAgICAgICAgICAgICAgICAgIGJ1ZltidCArIDJdID0gYnVmW2J0ICsgMiAtIGR0XTtcbiAgICAgICAgICAgICAgICAgICAgYnVmW2J0ICsgM10gPSBidWZbYnQgKyAzIC0gZHRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidCA9IGVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdC5sID0gbG0sIHN0LnAgPSBwb3MsIHN0LmIgPSBidDtcbiAgICAgICAgaWYgKGxtKVxuICAgICAgICAgICAgZmluYWwgPSAxLCBzdC5tID0gbGJ0LCBzdC5kID0gZG0sIHN0Lm4gPSBkYnQ7XG4gICAgfSB3aGlsZSAoIWZpbmFsKTtcbiAgICByZXR1cm4gYnQgPT0gYnVmLmxlbmd0aCA/IGJ1ZiA6IHNsYyhidWYsIDAsIGJ0KTtcbn07XG5jb25zdCB6bHYgPSAoZCkgPT4ge1xuICAgIGlmICgoZFswXSAmIDE1KSAhPSA4IHx8IChkWzBdID4+PiA0KSA+IDcgfHwgKChkWzBdIDw8IDggfCBkWzFdKSAlIDMxKSlcbiAgICAgICAgdGhyb3cgJ2ludmFsaWQgemxpYiBkYXRhJztcbiAgICBpZiAoZFsxXSAmIDMyKVxuICAgICAgICB0aHJvdyAnaW52YWxpZCB6bGliIGRhdGE6IHByZXNldCBkaWN0aW9uYXJpZXMgbm90IHN1cHBvcnRlZCc7XG59O1xuLyoqXG4gKiBFeHBhbmRzIFpsaWIgZGF0YVxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb21wcmVzc1xuICogQHBhcmFtIG91dCBXaGVyZSB0byB3cml0ZSB0aGUgZGF0YS4gU2F2ZXMgbWVtb3J5IGlmIHlvdSBrbm93IHRoZSBkZWNvbXByZXNzZWQgc2l6ZSBhbmQgcHJvdmlkZSBhbiBvdXRwdXQgYnVmZmVyIG9mIHRoYXQgbGVuZ3RoLlxuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnpsaWJTeW5jKGRhdGEsIG91dCkge1xuICAgIHJldHVybiBpbmZsdCgoemx2KGRhdGEpLCBkYXRhLnN1YmFycmF5KDIsIC00KSksIG91dCk7XG59XG4iLCJpbXBvcnQgeyBleHRyYWN0R2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmV4cG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIFRoZXJlIGFyZSBfc3RpbGxfIHNvbWUgb2xkZXIgZW52aXJvbm1lbnRzIChzcGVjaWZpY2FsbHkgUk4gPCAwLjcwKSwgdGhhdCBkb2VzXG4gKiBub3QgaGF2ZSBwcm9wZXIgQmlnSW50IHN1cHBvcnQgLSBhIG5vbi13b3JraW5nIGZhbGxiYWNrIGlzIHByb3ZpZGVkIGZvciB0aG9zZS5cbiAqXG4gKiBXZSBkZXRlY3QgYXZhaWxhYmlsaXR5IG9mIEJpZ0ludCB1cG9uIHVzYWdlLCBzbyB0aGlzIGlzIHB1cmVseSB0byBhbGxvdyBmdW5jdGlvbmFsXG4gKiBjb21waWxhdGlvbiAmIGJ1bmRsaW5nLiBTaW5jZSB3ZSBoYXZlIG9wZXJhdG9ycyBzdWNoIGFzICorLS8gdG9wLWxldmVsLCBhIG51bWJlci1pc2hcbiAqIHJlc3VsdCBpcyB1c2VkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRGYWxsYmFjaygpIHtcbiAgICByZXR1cm4gTnVtYmVyLk5hTjtcbn1cbmV4cG9ydCBjb25zdCBCaWdJbnQgPSAvKiNfX1BVUkVfXyovIGV4dHJhY3RHbG9iYWwoJ0JpZ0ludCcsIGludmFsaWRGYWxsYmFjayk7XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QveC1iaWdpbnQnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCJleHBvcnQgeyBwYWNrYWdlSW5mbyB9IGZyb20gJy4vcGFja2FnZUluZm8uanMnO1xuLyoqIEBpbnRlcm5hbCBMYXN0LXJlc29ydCBcInRoaXNcIiwgaWYgaXQgZ2V0cyBoZXJlIGl0IHByb2JhYmx5IHdvdWxkIGZhaWwgYW55d2F5ICovXG5mdW5jdGlvbiBldmFsdWF0ZVRoaXMoZm4pIHtcbiAgICByZXR1cm4gZm4oJ3JldHVybiB0aGlzJyk7XG59XG4vKipcbiAqIEEgY3Jvc3MtZW52aXJvbm1lbnQgaW1wbGVtZW50YXRpb24gZm9yIGdsb2JhbFRoaXNcbiAqL1xuZXhwb3J0IGNvbnN0IHhnbG9iYWwgPSAvKiNfX1BVUkVfXyovICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IGdsb2JhbFRoaXNcbiAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gZ2xvYmFsXG4gICAgICAgIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IHNlbGZcbiAgICAgICAgICAgIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICA/IHdpbmRvd1xuICAgICAgICAgICAgICAgIDogZXZhbHVhdGVUaGlzKEZ1bmN0aW9uKSk7XG4vKipcbiAqIEV4dHJhY3RzIGEga25vd24gZ2xvYmFsIGZyb20gdGhlIGVudmlyb25tZW50LCBhcHBseWluZyBhIGZhbGxiYWNrIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEdsb2JhbChuYW1lLCBmYWxsYmFjaykge1xuICAgIC8vIE5vdCBxdWl0ZSBzdXJlIHdoeSB0aGlzIGlzIGhlcmUgLSBzbnVjayBpbiB3aXRoIFRTIDQuNy4yIHdpdGggbm8gcmVhbCBpZGVhXG4gICAgLy8gKGFzIG9mIG5vdykgYXMgdG8gd2h5IHRoaXMgbG9va3MgbGlrZSBhbiBcImFueVwiIHdoZW4gd2UgZG8gY2FzdCBpdCB0byBhIFRcbiAgICAvL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiB0eXBlb2YgeGdsb2JhbFtuYW1lXSA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBmYWxsYmFja1xuICAgICAgICA6IHhnbG9iYWxbbmFtZV07XG59XG4vKipcbiAqIEV4cG9zZSBhIHZhbHVlIGFzIGEga25vd24gZ2xvYmFsLCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvc2VHbG9iYWwobmFtZSwgZmFsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIHhnbG9iYWxbbmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHhnbG9iYWxbbmFtZV0gPSBmYWxsYmFjaztcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QveC1nbG9iYWwnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCJpbXBvcnQgeyB4Z2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmV4cG9ydCB7IHBhY2thZ2VJbmZvIH0gZnJvbSAnLi9wYWNrYWdlSW5mby5qcyc7XG5leHBvcnQgY29uc3QgY3J5cHRvID0geGdsb2JhbC5jcnlwdG87XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tVmFsdWVzKGFycikge1xuICAgIHJldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG59XG4iLCJleHBvcnQgY29uc3QgcGFja2FnZUluZm8gPSB7IG5hbWU6ICdAcG9sa2Fkb3QveC1yYW5kb212YWx1ZXMnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCJpbXBvcnQgeyBleHRyYWN0R2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmltcG9ydCB7IFRleHREZWNvZGVyIGFzIEZhbGxiYWNrIH0gZnJvbSAnLi9mYWxsYmFjay5qcyc7XG5leHBvcnQgeyBwYWNrYWdlSW5mbyB9IGZyb20gJy4vcGFja2FnZUluZm8uanMnO1xuZXhwb3J0IGNvbnN0IFRleHREZWNvZGVyID0gLyojX19QVVJFX18qLyBleHRyYWN0R2xvYmFsKCdUZXh0RGVjb2RlcicsIEZhbGxiYWNrKTtcbiIsImV4cG9ydCBjbGFzcyBUZXh0RGVjb2RlciB7XG4gICAgX19lbmNvZGluZztcbiAgICBjb25zdHJ1Y3RvcihlbmNvZGluZykge1xuICAgICAgICB0aGlzLl9fZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICB9XG4gICAgZGVjb2RlKHZhbHVlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNvdW50ID0gdmFsdWUubGVuZ3RoOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWVbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiAnQHBvbGthZG90L3gtdGV4dGRlY29kZXInLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCJpbXBvcnQgeyBleHRyYWN0R2xvYmFsIH0gZnJvbSAnQHBvbGthZG90L3gtZ2xvYmFsJztcbmltcG9ydCB7IFRleHRFbmNvZGVyIGFzIEZhbGxiYWNrIH0gZnJvbSAnLi9mYWxsYmFjay5qcyc7XG5leHBvcnQgeyBwYWNrYWdlSW5mbyB9IGZyb20gJy4vcGFja2FnZUluZm8uanMnO1xuZXhwb3J0IGNvbnN0IFRleHRFbmNvZGVyID0gLyojX19QVVJFX18qLyBleHRyYWN0R2xvYmFsKCdUZXh0RW5jb2RlcicsIEZhbGxiYWNrKTtcbiIsImV4cG9ydCBjbGFzcyBUZXh0RW5jb2RlciB7XG4gICAgZW5jb2RlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBjb25zdCB1OGEgPSBuZXcgVWludDhBcnJheShjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdThhW2ldID0gdmFsdWUuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdThhO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogJ0Bwb2xrYWRvdC94LXRleHRlbmNvZGVyJywgcGF0aDogKGltcG9ydC5tZXRhICYmIGltcG9ydC5tZXRhLnVybCkgPyBuZXcgVVJMKGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUuc3Vic3RyaW5nKDAsIG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5sYXN0SW5kZXhPZignLycpICsgMSkgOiAnYXV0bycsIHR5cGU6ICdlc20nLCB2ZXJzaW9uOiAnMTIuNi4yJyB9O1xuIiwiaW1wb3J0IHsgeGdsb2JhbCB9IGZyb20gJ0Bwb2xrYWRvdC94LWdsb2JhbCc7XG5leHBvcnQgeyBwYWNrYWdlSW5mbyB9IGZyb20gJy4vcGFja2FnZUluZm8uanMnO1xuZXhwb3J0IGNvbnN0IFdlYlNvY2tldCA9IHhnbG9iYWwuV2ViU29ja2V0O1xuIiwiZXhwb3J0IGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiAnQHBvbGthZG90L3gtd3MnLCBwYXRoOiAoaW1wb3J0Lm1ldGEgJiYgaW1wb3J0Lm1ldGEudXJsKSA/IG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICdhdXRvJywgdHlwZTogJ2VzbScsIHZlcnNpb246ICcxMi42LjInIH07XG4iLCIvKiEgc2N1cmUtYmFzZSAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL1xuLy8gVXRpbGl0aWVzXG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROdW1iZXIobikge1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIobikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW50ZWdlcjogJHtufWApO1xufVxuZnVuY3Rpb24gaXNCeXRlcyhhKSB7XG4gICAgcmV0dXJuIChhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fFxuICAgICAgICAoYSAhPSBudWxsICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdVaW50OEFycmF5JykpO1xufVxuLyoqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBjaGFpbiguLi5hcmdzKSB7XG4gICAgY29uc3QgaWQgPSAoYSkgPT4gYTtcbiAgICAvLyBXcmFwIGNhbGwgaW4gY2xvc3VyZSBzbyBKSVQgY2FuIGlubGluZSBjYWxsc1xuICAgIGNvbnN0IHdyYXAgPSAoYSwgYikgPT4gKGMpID0+IGEoYihjKSk7XG4gICAgLy8gQ29uc3RydWN0IGNoYWluIG9mIGFyZ3NbLTFdLmVuY29kZShhcmdzWy0yXS5lbmNvZGUoWy4uLl0pKVxuICAgIGNvbnN0IGVuY29kZSA9IGFyZ3MubWFwKCh4KSA9PiB4LmVuY29kZSkucmVkdWNlUmlnaHQod3JhcCwgaWQpO1xuICAgIC8vIENvbnN0cnVjdCBjaGFpbiBvZiBhcmdzWzBdLmRlY29kZShhcmdzWzFdLmRlY29kZSguLi4pKVxuICAgIGNvbnN0IGRlY29kZSA9IGFyZ3MubWFwKCh4KSA9PiB4LmRlY29kZSkucmVkdWNlKHdyYXAsIGlkKTtcbiAgICByZXR1cm4geyBlbmNvZGUsIGRlY29kZSB9O1xufVxuLyoqXG4gKiBFbmNvZGVzIGludGVnZXIgcmFkaXggcmVwcmVzZW50YXRpb24gdG8gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyBhbHBoYWJldCBhbmQgYmFja1xuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gYWxwaGFiZXQoYWxwaGFiZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbmNvZGU6IChkaWdpdHMpID0+IHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkaWdpdHMpIHx8IChkaWdpdHMubGVuZ3RoICYmIHR5cGVvZiBkaWdpdHNbMF0gIT09ICdudW1iZXInKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FscGhhYmV0LmVuY29kZSBpbnB1dCBzaG91bGQgYmUgYW4gYXJyYXkgb2YgbnVtYmVycycpO1xuICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cy5tYXAoKGkpID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROdW1iZXIoaSk7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gYWxwaGFiZXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZ2l0IGluZGV4IG91dHNpZGUgYWxwaGFiZXQ6ICR7aX0gKGFscGhhYmV0OiAke2FscGhhYmV0Lmxlbmd0aH0pYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFscGhhYmV0W2ldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZTogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpIHx8IChpbnB1dC5sZW5ndGggJiYgdHlwZW9mIGlucHV0WzBdICE9PSAnc3RyaW5nJykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbHBoYWJldC5kZWNvZGUgaW5wdXQgc2hvdWxkIGJlIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5tYXAoKGxldHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGV0dGVyICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbHBoYWJldC5kZWNvZGU6IG5vdCBzdHJpbmcgZWxlbWVudD0ke2xldHRlcn1gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFscGhhYmV0LmluZGV4T2YobGV0dGVyKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGV0dGVyOiBcIiR7bGV0dGVyfVwiLiBBbGxvd2VkOiAke2FscGhhYmV0fWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yID0gJycpIHtcbiAgICBpZiAodHlwZW9mIHNlcGFyYXRvciAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignam9pbiBzZXBhcmF0b3Igc2hvdWxkIGJlIHN0cmluZycpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZTogKGZyb20pID0+IHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShmcm9tKSB8fCAoZnJvbS5sZW5ndGggJiYgdHlwZW9mIGZyb21bMF0gIT09ICdzdHJpbmcnKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2pvaW4uZW5jb2RlIGlucHV0IHNob3VsZCBiZSBhcnJheSBvZiBzdHJpbmdzJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpIG9mIGZyb20pXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBqb2luLmVuY29kZTogbm9uLXN0cmluZyBpbnB1dD0ke2l9YCk7XG4gICAgICAgICAgICByZXR1cm4gZnJvbS5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZTogKHRvKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRvICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2pvaW4uZGVjb2RlIGlucHV0IHNob3VsZCBiZSBzdHJpbmcnKTtcbiAgICAgICAgICAgIHJldHVybiB0by5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIFBhZCBzdHJpbmdzIGFycmF5IHNvIGl0IGhhcyBpbnRlZ2VyIG51bWJlciBvZiBiaXRzXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBwYWRkaW5nKGJpdHMsIGNociA9ICc9Jykge1xuICAgIGFzc2VydE51bWJlcihiaXRzKTtcbiAgICBpZiAodHlwZW9mIGNociAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFkZGluZyBjaHIgc2hvdWxkIGJlIHN0cmluZycpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZShkYXRhKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgKGRhdGEubGVuZ3RoICYmIHR5cGVvZiBkYXRhWzBdICE9PSAnc3RyaW5nJykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYWRkaW5nLmVuY29kZSBpbnB1dCBzaG91bGQgYmUgYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSBvZiBkYXRhKVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFkZGluZy5lbmNvZGU6IG5vbi1zdHJpbmcgaW5wdXQ9JHtpfWApO1xuICAgICAgICAgICAgd2hpbGUgKChkYXRhLmxlbmd0aCAqIGJpdHMpICUgOClcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goY2hyKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9LFxuICAgICAgICBkZWNvZGUoaW5wdXQpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkgfHwgKGlucHV0Lmxlbmd0aCAmJiB0eXBlb2YgaW5wdXRbMF0gIT09ICdzdHJpbmcnKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhZGRpbmcuZW5jb2RlIGlucHV0IHNob3VsZCBiZSBhcnJheSBvZiBzdHJpbmdzJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpIG9mIGlucHV0KVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcGFkZGluZy5kZWNvZGU6IG5vbi1zdHJpbmcgaW5wdXQ9JHtpfWApO1xuICAgICAgICAgICAgbGV0IGVuZCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICgoZW5kICogYml0cykgJSA4KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYWRkaW5nOiBzdHJpbmcgc2hvdWxkIGhhdmUgd2hvbGUgbnVtYmVyIG9mIGJ5dGVzJyk7XG4gICAgICAgICAgICBmb3IgKDsgZW5kID4gMCAmJiBpbnB1dFtlbmQgLSAxXSA9PT0gY2hyOyBlbmQtLSkge1xuICAgICAgICAgICAgICAgIGlmICghKCgoZW5kIC0gMSkgKiBiaXRzKSAlIDgpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFkZGluZzogc3RyaW5nIGhhcyB0b28gbXVjaCBwYWRkaW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuc2xpY2UoMCwgZW5kKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLyoqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBub3JtYWxpemUoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vcm1hbGl6ZSBmbiBzaG91bGQgYmUgZnVuY3Rpb24nKTtcbiAgICByZXR1cm4geyBlbmNvZGU6IChmcm9tKSA9PiBmcm9tLCBkZWNvZGU6ICh0bykgPT4gZm4odG8pIH07XG59XG4vKipcbiAqIFNsb3c6IE8obl4yKSB0aW1lIGNvbXBsZXhpdHlcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRSYWRpeChkYXRhLCBmcm9tLCB0bykge1xuICAgIC8vIGJhc2UgMSBpcyBpbXBvc3NpYmxlXG4gICAgaWYgKGZyb20gPCAyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDogd3JvbmcgZnJvbT0ke2Zyb219LCBiYXNlIGNhbm5vdCBiZSBsZXNzIHRoYW4gMmApO1xuICAgIGlmICh0byA8IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4OiB3cm9uZyB0bz0ke3RvfSwgYmFzZSBjYW5ub3QgYmUgbGVzcyB0aGFuIDJgKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29udmVydFJhZGl4OiBkYXRhIHNob3VsZCBiZSBhcnJheScpO1xuICAgIGlmICghZGF0YS5sZW5ndGgpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICBsZXQgcG9zID0gMDtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBjb25zdCBkaWdpdHMgPSBBcnJheS5mcm9tKGRhdGEpO1xuICAgIGRpZ2l0cy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgIGFzc2VydE51bWJlcihkKTtcbiAgICAgICAgaWYgKGQgPCAwIHx8IGQgPj0gZnJvbSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV3JvbmcgaW50ZWdlcjogJHtkfWApO1xuICAgIH0pO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGxldCBjYXJyeSA9IDA7XG4gICAgICAgIGxldCBkb25lID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBvczsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGlnaXQgPSBkaWdpdHNbaV07XG4gICAgICAgICAgICBjb25zdCBkaWdpdEJhc2UgPSBmcm9tICogY2FycnkgKyBkaWdpdDtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoZGlnaXRCYXNlKSB8fFxuICAgICAgICAgICAgICAgIChmcm9tICogY2FycnkpIC8gZnJvbSAhPT0gY2FycnkgfHxcbiAgICAgICAgICAgICAgICBkaWdpdEJhc2UgLSBkaWdpdCAhPT0gZnJvbSAqIGNhcnJ5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb252ZXJ0UmFkaXg6IGNhcnJ5IG92ZXJmbG93Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXJyeSA9IGRpZ2l0QmFzZSAlIHRvO1xuICAgICAgICAgICAgY29uc3Qgcm91bmRlZCA9IE1hdGguZmxvb3IoZGlnaXRCYXNlIC8gdG8pO1xuICAgICAgICAgICAgZGlnaXRzW2ldID0gcm91bmRlZDtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIocm91bmRlZCkgfHwgcm91bmRlZCAqIHRvICsgY2FycnkgIT09IGRpZ2l0QmFzZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnZlcnRSYWRpeDogY2Fycnkgb3ZlcmZsb3cnKTtcbiAgICAgICAgICAgIGlmICghZG9uZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCFyb3VuZGVkKVxuICAgICAgICAgICAgICAgIHBvcyA9IGk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5wdXNoKGNhcnJ5KTtcbiAgICAgICAgaWYgKGRvbmUpXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aCAtIDEgJiYgZGF0YVtpXSA9PT0gMDsgaSsrKVxuICAgICAgICByZXMucHVzaCgwKTtcbiAgICByZXR1cm4gcmVzLnJldmVyc2UoKTtcbn1cbmNvbnN0IGdjZCA9IC8qIEBfX05PX1NJREVfRUZGRUNUU19fICovIChhLCBiKSA9PiAoIWIgPyBhIDogZ2NkKGIsIGEgJSBiKSk7XG5jb25zdCByYWRpeDJjYXJyeSA9IC8qQF9fTk9fU0lERV9FRkZFQ1RTX18gKi8gKGZyb20sIHRvKSA9PiBmcm9tICsgKHRvIC0gZ2NkKGZyb20sIHRvKSk7XG4vKipcbiAqIEltcGxlbWVudGVkIHdpdGggbnVtYmVycywgYmVjYXVzZSBCaWdJbnQgaXMgNXggc2xvd2VyXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBjb252ZXJ0UmFkaXgyKGRhdGEsIGZyb20sIHRvLCBwYWRkaW5nKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnZlcnRSYWRpeDI6IGRhdGEgc2hvdWxkIGJlIGFycmF5Jyk7XG4gICAgaWYgKGZyb20gPD0gMCB8fCBmcm9tID4gMzIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4Mjogd3JvbmcgZnJvbT0ke2Zyb219YCk7XG4gICAgaWYgKHRvIDw9IDAgfHwgdG8gPiAzMilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXgyOiB3cm9uZyB0bz0ke3RvfWApO1xuICAgIGlmIChyYWRpeDJjYXJyeShmcm9tLCB0bykgPiAzMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDI6IGNhcnJ5IG92ZXJmbG93IGZyb209JHtmcm9tfSB0bz0ke3RvfSBjYXJyeUJpdHM9JHtyYWRpeDJjYXJyeShmcm9tLCB0byl9YCk7XG4gICAgfVxuICAgIGxldCBjYXJyeSA9IDA7XG4gICAgbGV0IHBvcyA9IDA7IC8vIGJpdHdpc2UgcG9zaXRpb24gaW4gY3VycmVudCBlbGVtZW50XG4gICAgY29uc3QgbWFzayA9IDIgKiogdG8gLSAxO1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbiBvZiBkYXRhKSB7XG4gICAgICAgIGFzc2VydE51bWJlcihuKTtcbiAgICAgICAgaWYgKG4gPj0gMiAqKiBmcm9tKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXgyOiBpbnZhbGlkIGRhdGEgd29yZD0ke259IGZyb209JHtmcm9tfWApO1xuICAgICAgICBjYXJyeSA9IChjYXJyeSA8PCBmcm9tKSB8IG47XG4gICAgICAgIGlmIChwb3MgKyBmcm9tID4gMzIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDI6IGNhcnJ5IG92ZXJmbG93IHBvcz0ke3Bvc30gZnJvbT0ke2Zyb219YCk7XG4gICAgICAgIHBvcyArPSBmcm9tO1xuICAgICAgICBmb3IgKDsgcG9zID49IHRvOyBwb3MgLT0gdG8pXG4gICAgICAgICAgICByZXMucHVzaCgoKGNhcnJ5ID4+IChwb3MgLSB0bykpICYgbWFzaykgPj4+IDApO1xuICAgICAgICBjYXJyeSAmPSAyICoqIHBvcyAtIDE7IC8vIGNsZWFuIGNhcnJ5LCBvdGhlcndpc2UgaXQgd2lsbCBjYXVzZSBvdmVyZmxvd1xuICAgIH1cbiAgICBjYXJyeSA9IChjYXJyeSA8PCAodG8gLSBwb3MpKSAmIG1hc2s7XG4gICAgaWYgKCFwYWRkaW5nICYmIHBvcyA+PSBmcm9tKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4Y2VzcyBwYWRkaW5nJyk7XG4gICAgaWYgKCFwYWRkaW5nICYmIGNhcnJ5KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vbi16ZXJvIHBhZGRpbmc6ICR7Y2Fycnl9YCk7XG4gICAgaWYgKHBhZGRpbmcgJiYgcG9zID4gMClcbiAgICAgICAgcmVzLnB1c2goY2FycnkgPj4+IDApO1xuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIHJhZGl4KG51bSkge1xuICAgIGFzc2VydE51bWJlcihudW0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZTogKGJ5dGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzQnl0ZXMoYnl0ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXguZW5jb2RlIGlucHV0IHNob3VsZCBiZSBVaW50OEFycmF5Jyk7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydFJhZGl4KEFycmF5LmZyb20oYnl0ZXMpLCAyICoqIDgsIG51bSk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZTogKGRpZ2l0cykgPT4ge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRpZ2l0cykgfHwgKGRpZ2l0cy5sZW5ndGggJiYgdHlwZW9mIGRpZ2l0c1swXSAhPT0gJ251bWJlcicpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXguZGVjb2RlIGlucHV0IHNob3VsZCBiZSBhcnJheSBvZiBudW1iZXJzJyk7XG4gICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGNvbnZlcnRSYWRpeChkaWdpdHMsIG51bSwgMiAqKiA4KSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogSWYgYm90aCBiYXNlcyBhcmUgcG93ZXIgb2Ygc2FtZSBudW1iZXIgKGxpa2UgYDIqKjggPC0+IDIqKjY0YCksXG4gKiB0aGVyZSBpcyBhIGxpbmVhciBhbGdvcml0aG0uIEZvciBub3cgd2UgaGF2ZSBpbXBsZW1lbnRhdGlvbiBmb3IgcG93ZXItb2YtdHdvIGJhc2VzIG9ubHkuXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiByYWRpeDIoYml0cywgcmV2UGFkZGluZyA9IGZhbHNlKSB7XG4gICAgYXNzZXJ0TnVtYmVyKGJpdHMpO1xuICAgIGlmIChiaXRzIDw9IDAgfHwgYml0cyA+IDMyKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JhZGl4MjogYml0cyBzaG91bGQgYmUgaW4gKDAuLjMyXScpO1xuICAgIGlmIChyYWRpeDJjYXJyeSg4LCBiaXRzKSA+IDMyIHx8IHJhZGl4MmNhcnJ5KGJpdHMsIDgpID4gMzIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXgyOiBjYXJyeSBvdmVyZmxvdycpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZTogKGJ5dGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzQnl0ZXMoYnl0ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXgyLmVuY29kZSBpbnB1dCBzaG91bGQgYmUgVWludDhBcnJheScpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRSYWRpeDIoQXJyYXkuZnJvbShieXRlcyksIDgsIGJpdHMsICFyZXZQYWRkaW5nKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVjb2RlOiAoZGlnaXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGlnaXRzKSB8fCAoZGlnaXRzLmxlbmd0aCAmJiB0eXBlb2YgZGlnaXRzWzBdICE9PSAnbnVtYmVyJykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyYWRpeDIuZGVjb2RlIGlucHV0IHNob3VsZCBiZSBhcnJheSBvZiBudW1iZXJzJyk7XG4gICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGNvbnZlcnRSYWRpeDIoZGlnaXRzLCBiaXRzLCA4LCByZXZQYWRkaW5nKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gdW5zYWZlV3JhcHBlcihmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zYWZlV3JhcHBlciBmbiBzaG91bGQgYmUgZnVuY3Rpb24nKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgfTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gY2hlY2tzdW0obGVuLCBmbikge1xuICAgIGFzc2VydE51bWJlcihsZW4pO1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2hlY2tzdW0gZm4gc2hvdWxkIGJlIGZ1bmN0aW9uJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5jb2RlKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghaXNCeXRlcyhkYXRhKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoZWNrc3VtLmVuY29kZTogaW5wdXQgc2hvdWxkIGJlIFVpbnQ4QXJyYXknKTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrc3VtID0gZm4oZGF0YSkuc2xpY2UoMCwgbGVuKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGRhdGEubGVuZ3RoICsgbGVuKTtcbiAgICAgICAgICAgIHJlcy5zZXQoZGF0YSk7XG4gICAgICAgICAgICByZXMuc2V0KGNoZWNrc3VtLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9LFxuICAgICAgICBkZWNvZGUoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFpc0J5dGVzKGRhdGEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hlY2tzdW0uZGVjb2RlOiBpbnB1dCBzaG91bGQgYmUgVWludDhBcnJheScpO1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGEuc2xpY2UoMCwgLWxlbik7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGVja3N1bSA9IGZuKHBheWxvYWQpLnNsaWNlKDAsIGxlbik7XG4gICAgICAgICAgICBjb25zdCBvbGRDaGVja3N1bSA9IGRhdGEuc2xpY2UoLWxlbik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgICAgIGlmIChuZXdDaGVja3N1bVtpXSAhPT0gb2xkQ2hlY2tzdW1baV0pXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8vIHByZXR0aWVyLWlnbm9yZVxuZXhwb3J0IGNvbnN0IHV0aWxzID0ge1xuICAgIGFscGhhYmV0LCBjaGFpbiwgY2hlY2tzdW0sIGNvbnZlcnRSYWRpeCwgY29udmVydFJhZGl4MiwgcmFkaXgsIHJhZGl4Miwgam9pbiwgcGFkZGluZyxcbn07XG4vLyBSRkMgNDY0OCBha2EgUkZDIDM1NDhcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNvbnN0IGJhc2UxNiA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNCksIGFscGhhYmV0KCcwMTIzNDU2Nzg5QUJDREVGJyksIGpvaW4oJycpKTtcbmV4cG9ydCBjb25zdCBiYXNlMzIgPSAvKiBAX19QVVJFX18gKi8gY2hhaW4ocmFkaXgyKDUpLCBhbHBoYWJldCgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnKSwgcGFkZGluZyg1KSwgam9pbignJykpO1xuZXhwb3J0IGNvbnN0IGJhc2UzMmhleCA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNSksIGFscGhhYmV0KCcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVicpLCBwYWRkaW5nKDUpLCBqb2luKCcnKSk7XG5leHBvcnQgY29uc3QgYmFzZTMyY3JvY2tmb3JkID0gLyogQF9fUFVSRV9fICovIGNoYWluKHJhZGl4Mig1KSwgYWxwaGFiZXQoJzAxMjM0NTY3ODlBQkNERUZHSEpLTU5QUVJTVFZXWFlaJyksIGpvaW4oJycpLCBub3JtYWxpemUoKHMpID0+IHMudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9PL2csICcwJykucmVwbGFjZSgvW0lMXS9nLCAnMScpKSk7XG5leHBvcnQgY29uc3QgYmFzZTY0ID0gLyogQF9fUFVSRV9fICovIGNoYWluKHJhZGl4Mig2KSwgYWxwaGFiZXQoJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nKSwgcGFkZGluZyg2KSwgam9pbignJykpO1xuZXhwb3J0IGNvbnN0IGJhc2U2NG5vcGFkID0gLyogQF9fUFVSRV9fICovIGNoYWluKHJhZGl4Mig2KSwgYWxwaGFiZXQoJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nKSwgam9pbignJykpO1xuZXhwb3J0IGNvbnN0IGJhc2U2NHVybCA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNiksIGFscGhhYmV0KCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJyksIHBhZGRpbmcoNiksIGpvaW4oJycpKTtcbmV4cG9ydCBjb25zdCBiYXNlNjR1cmxub3BhZCA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNiksIGFscGhhYmV0KCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJyksIGpvaW4oJycpKTtcbi8vIGJhc2U1OCBjb2RlXG4vLyAtLS0tLS0tLS0tLVxuY29uc3QgZ2VuQmFzZTU4ID0gKGFiYykgPT4gY2hhaW4ocmFkaXgoNTgpLCBhbHBoYWJldChhYmMpLCBqb2luKCcnKSk7XG5leHBvcnQgY29uc3QgYmFzZTU4ID0gLyogQF9fUFVSRV9fICovIGdlbkJhc2U1OCgnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eicpO1xuZXhwb3J0IGNvbnN0IGJhc2U1OGZsaWNrciA9IC8qIEBfX1BVUkVfXyAqLyBnZW5CYXNlNTgoJzEyMzQ1Njc4OWFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OUFFSU1RVVldYWVonKTtcbmV4cG9ydCBjb25zdCBiYXNlNTh4cnAgPSAvKiBAX19QVVJFX18gKi8gZ2VuQmFzZTU4KCdycHNobmFmMzl3QlVETkVHSEpLTE00UFFSU1Q3VldYWVoyYmNkZUNnNjVqa204b0ZxaTF0dXZBeHl6Jyk7XG4vLyB4bXIgdmVyIGlzIGRvbmUgaW4gOC1ieXRlIGJsb2NrcyAod2hpY2ggZXF1YWxzIDExIGNoYXJzIGluIGRlY29kaW5nKS4gTGFzdCAobm9uLWZ1bGwpIGJsb2NrIHBhZGRlZCB3aXRoICcxJyB0byBzaXplIGluIFhNUl9CTE9DS19MRU4uXG4vLyBCbG9jayBlbmNvZGluZyBzaWduaWZpY2FudGx5IHJlZHVjZXMgcXVhZHJhdGljIGNvbXBsZXhpdHkgb2YgYmFzZTU4LlxuLy8gRGF0YSBsZW4gKGluZGV4KSAtPiBlbmNvZGVkIGJsb2NrIGxlblxuY29uc3QgWE1SX0JMT0NLX0xFTiA9IFswLCAyLCAzLCA1LCA2LCA3LCA5LCAxMCwgMTFdO1xuZXhwb3J0IGNvbnN0IGJhc2U1OHhtciA9IHtcbiAgICBlbmNvZGUoZGF0YSkge1xuICAgICAgICBsZXQgcmVzID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gOCkge1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBkYXRhLnN1YmFycmF5KGksIGkgKyA4KTtcbiAgICAgICAgICAgIHJlcyArPSBiYXNlNTguZW5jb2RlKGJsb2NrKS5wYWRTdGFydChYTVJfQkxPQ0tfTEVOW2Jsb2NrLmxlbmd0aF0sICcxJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIGRlY29kZShzdHIpIHtcbiAgICAgICAgbGV0IHJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gc3RyLnNsaWNlKGksIGkgKyAxMSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0xlbiA9IFhNUl9CTE9DS19MRU4uaW5kZXhPZihzbGljZS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBiYXNlNTguZGVjb2RlKHNsaWNlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmxvY2subGVuZ3RoIC0gYmxvY2tMZW47IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChibG9ja1tqXSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYXNlNTh4bXI6IHdyb25nIHBhZGRpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoQXJyYXkuZnJvbShibG9jay5zbGljZShibG9jay5sZW5ndGggLSBibG9ja0xlbikpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKHJlcyk7XG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlQmFzZTU4Y2hlY2sgPSAvKiBAX19QVVJFX18gKi8gKHNoYTI1NikgPT4gY2hhaW4oY2hlY2tzdW0oNCwgKGRhdGEpID0+IHNoYTI1NihzaGEyNTYoZGF0YSkpKSwgYmFzZTU4KTtcbi8vIGxlZ2FjeSBleHBvcnQsIGJhZCBuYW1lXG5leHBvcnQgY29uc3QgYmFzZTU4Y2hlY2sgPSBjcmVhdGVCYXNlNThjaGVjaztcbmNvbnN0IEJFQ0hfQUxQSEFCRVQgPSAvKiBAX19QVVJFX18gKi8gY2hhaW4oYWxwaGFiZXQoJ3FwenJ5OXg4Z2YydHZkdzBzM2puNTRraGNlNm11YTdsJyksIGpvaW4oJycpKTtcbmNvbnN0IFBPTFlNT0RfR0VORVJBVE9SUyA9IFsweDNiNmE1N2IyLCAweDI2NTA4ZTZkLCAweDFlYTExOWZhLCAweDNkNDIzM2RkLCAweDJhMTQ2MmIzXTtcbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gYmVjaDMyUG9seW1vZChwcmUpIHtcbiAgICBjb25zdCBiID0gcHJlID4+IDI1O1xuICAgIGxldCBjaGsgPSAocHJlICYgMHgxZmZmZmZmKSA8PCA1O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgUE9MWU1PRF9HRU5FUkFUT1JTLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICgoKGIgPj4gaSkgJiAxKSA9PT0gMSlcbiAgICAgICAgICAgIGNoayBePSBQT0xZTU9EX0dFTkVSQVRPUlNbaV07XG4gICAgfVxuICAgIHJldHVybiBjaGs7XG59XG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIGJlY2hDaGVja3N1bShwcmVmaXgsIHdvcmRzLCBlbmNvZGluZ0NvbnN0ID0gMSkge1xuICAgIGNvbnN0IGxlbiA9IHByZWZpeC5sZW5ndGg7XG4gICAgbGV0IGNoayA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBjID0gcHJlZml4LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMzMgfHwgYyA+IDEyNilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcmVmaXggKCR7cHJlZml4fSlgKTtcbiAgICAgICAgY2hrID0gYmVjaDMyUG9seW1vZChjaGspIF4gKGMgPj4gNSk7XG4gICAgfVxuICAgIGNoayA9IGJlY2gzMlBvbHltb2QoY2hrKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoaykgXiAocHJlZml4LmNoYXJDb2RlQXQoaSkgJiAweDFmKTtcbiAgICBmb3IgKGxldCB2IG9mIHdvcmRzKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoaykgXiB2O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoayk7XG4gICAgY2hrIF49IGVuY29kaW5nQ29uc3Q7XG4gICAgcmV0dXJuIEJFQ0hfQUxQSEFCRVQuZW5jb2RlKGNvbnZlcnRSYWRpeDIoW2NoayAlIDIgKiogMzBdLCAzMCwgNSwgZmFsc2UpKTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gZ2VuQmVjaDMyKGVuY29kaW5nKSB7XG4gICAgY29uc3QgRU5DT0RJTkdfQ09OU1QgPSBlbmNvZGluZyA9PT0gJ2JlY2gzMicgPyAxIDogMHgyYmM4MzBhMztcbiAgICBjb25zdCBfd29yZHMgPSByYWRpeDIoNSk7XG4gICAgY29uc3QgZnJvbVdvcmRzID0gX3dvcmRzLmRlY29kZTtcbiAgICBjb25zdCB0b1dvcmRzID0gX3dvcmRzLmVuY29kZTtcbiAgICBjb25zdCBmcm9tV29yZHNVbnNhZmUgPSB1bnNhZmVXcmFwcGVyKGZyb21Xb3Jkcyk7XG4gICAgZnVuY3Rpb24gZW5jb2RlKHByZWZpeCwgd29yZHMsIGxpbWl0ID0gOTApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcmVmaXggIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiZWNoMzIuZW5jb2RlIHByZWZpeCBzaG91bGQgYmUgc3RyaW5nLCBub3QgJHt0eXBlb2YgcHJlZml4fWApO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkod29yZHMpIHx8ICh3b3Jkcy5sZW5ndGggJiYgdHlwZW9mIHdvcmRzWzBdICE9PSAnbnVtYmVyJykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJlY2gzMi5lbmNvZGUgd29yZHMgc2hvdWxkIGJlIGFycmF5IG9mIG51bWJlcnMsIG5vdCAke3R5cGVvZiB3b3Jkc31gKTtcbiAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHByZWZpeCBsZW5ndGggJHtwcmVmaXgubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBhY3R1YWxMZW5ndGggPSBwcmVmaXgubGVuZ3RoICsgNyArIHdvcmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpbWl0ICE9PSBmYWxzZSAmJiBhY3R1YWxMZW5ndGggPiBsaW1pdClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYExlbmd0aCAke2FjdHVhbExlbmd0aH0gZXhjZWVkcyBsaW1pdCAke2xpbWl0fWApO1xuICAgICAgICBjb25zdCBsb3dlcmVkID0gcHJlZml4LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHN1bSA9IGJlY2hDaGVja3N1bShsb3dlcmVkLCB3b3JkcywgRU5DT0RJTkdfQ09OU1QpO1xuICAgICAgICByZXR1cm4gYCR7bG93ZXJlZH0xJHtCRUNIX0FMUEhBQkVULmVuY29kZSh3b3Jkcyl9JHtzdW19YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVjb2RlKHN0ciwgbGltaXQgPSA5MCkge1xuICAgICAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJlY2gzMi5kZWNvZGUgaW5wdXQgc2hvdWxkIGJlIHN0cmluZywgbm90ICR7dHlwZW9mIHN0cn1gKTtcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPCA4IHx8IChsaW1pdCAhPT0gZmFsc2UgJiYgc3RyLmxlbmd0aCA+IGxpbWl0KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFdyb25nIHN0cmluZyBsZW5ndGg6ICR7c3RyLmxlbmd0aH0gKCR7c3RyfSkuIEV4cGVjdGVkICg4Li4ke2xpbWl0fSlgKTtcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbWl4ZWQgY2FzZVxuICAgICAgICBjb25zdCBsb3dlcmVkID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChzdHIgIT09IGxvd2VyZWQgJiYgc3RyICE9PSBzdHIudG9VcHBlckNhc2UoKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nIG11c3QgYmUgbG93ZXJjYXNlIG9yIHVwcGVyY2FzZWApO1xuICAgICAgICBjb25zdCBzZXBJbmRleCA9IGxvd2VyZWQubGFzdEluZGV4T2YoJzEnKTtcbiAgICAgICAgaWYgKHNlcEluZGV4ID09PSAwIHx8IHNlcEluZGV4ID09PSAtMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGV0dGVyIFwiMVwiIG11c3QgYmUgcHJlc2VudCBiZXR3ZWVuIHByZWZpeCBhbmQgZGF0YSBvbmx5YCk7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGxvd2VyZWQuc2xpY2UoMCwgc2VwSW5kZXgpO1xuICAgICAgICBjb25zdCBkYXRhID0gbG93ZXJlZC5zbGljZShzZXBJbmRleCArIDEpO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCA2KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIG11c3QgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzIGxvbmcnKTtcbiAgICAgICAgY29uc3Qgd29yZHMgPSBCRUNIX0FMUEhBQkVULmRlY29kZShkYXRhKS5zbGljZSgwLCAtNik7XG4gICAgICAgIGNvbnN0IHN1bSA9IGJlY2hDaGVja3N1bShwcmVmaXgsIHdvcmRzLCBFTkNPRElOR19DT05TVCk7XG4gICAgICAgIGlmICghZGF0YS5lbmRzV2l0aChzdW0pKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoZWNrc3VtIGluICR7c3RyfTogZXhwZWN0ZWQgXCIke3N1bX1cImApO1xuICAgICAgICByZXR1cm4geyBwcmVmaXgsIHdvcmRzIH07XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZVVuc2FmZSA9IHVuc2FmZVdyYXBwZXIoZGVjb2RlKTtcbiAgICBmdW5jdGlvbiBkZWNvZGVUb0J5dGVzKHN0cikge1xuICAgICAgICBjb25zdCB7IHByZWZpeCwgd29yZHMgfSA9IGRlY29kZShzdHIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHsgcHJlZml4LCB3b3JkcywgYnl0ZXM6IGZyb21Xb3Jkcyh3b3JkcykgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZW5jb2RlLCBkZWNvZGUsIGRlY29kZVRvQnl0ZXMsIGRlY29kZVVuc2FmZSwgZnJvbVdvcmRzLCBmcm9tV29yZHNVbnNhZmUsIHRvV29yZHMgfTtcbn1cbmV4cG9ydCBjb25zdCBiZWNoMzIgPSAvKiBAX19QVVJFX18gKi8gZ2VuQmVjaDMyKCdiZWNoMzInKTtcbmV4cG9ydCBjb25zdCBiZWNoMzJtID0gLyogQF9fUFVSRV9fICovIGdlbkJlY2gzMignYmVjaDMybScpO1xuZXhwb3J0IGNvbnN0IHV0ZjggPSB7XG4gICAgZW5jb2RlOiAoZGF0YSkgPT4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRhdGEpLFxuICAgIGRlY29kZTogKHN0cikgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0ciksXG59O1xuZXhwb3J0IGNvbnN0IGhleCA9IC8qIEBfX1BVUkVfXyAqLyBjaGFpbihyYWRpeDIoNCksIGFscGhhYmV0KCcwMTIzNDU2Nzg5YWJjZGVmJyksIGpvaW4oJycpLCBub3JtYWxpemUoKHMpID0+IHtcbiAgICBpZiAodHlwZW9mIHMgIT09ICdzdHJpbmcnIHx8IHMubGVuZ3RoICUgMilcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaGV4LmRlY29kZTogZXhwZWN0ZWQgc3RyaW5nLCBnb3QgJHt0eXBlb2Ygc30gd2l0aCBsZW5ndGggJHtzLmxlbmd0aH1gKTtcbiAgICByZXR1cm4gcy50b0xvd2VyQ2FzZSgpO1xufSkpO1xuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBDT0RFUlMgPSB7XG4gICAgdXRmOCwgaGV4LCBiYXNlMTYsIGJhc2UzMiwgYmFzZTY0LCBiYXNlNjR1cmwsIGJhc2U1OCwgYmFzZTU4eG1yXG59O1xuY29uc3QgY29kZXJUeXBlRXJyb3IgPSAnSW52YWxpZCBlbmNvZGluZyB0eXBlLiBBdmFpbGFibGUgdHlwZXM6IHV0ZjgsIGhleCwgYmFzZTE2LCBiYXNlMzIsIGJhc2U2NCwgYmFzZTY0dXJsLCBiYXNlNTgsIGJhc2U1OHhtcic7XG5leHBvcnQgY29uc3QgYnl0ZXNUb1N0cmluZyA9ICh0eXBlLCBieXRlcykgPT4ge1xuICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycgfHwgIUNPREVSUy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjb2RlclR5cGVFcnJvcik7XG4gICAgaWYgKCFpc0J5dGVzKGJ5dGVzKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYnl0ZXNUb1N0cmluZygpIGV4cGVjdHMgVWludDhBcnJheScpO1xuICAgIHJldHVybiBDT0RFUlNbdHlwZV0uZW5jb2RlKGJ5dGVzKTtcbn07XG5leHBvcnQgY29uc3Qgc3RyID0gYnl0ZXNUb1N0cmluZzsgLy8gYXMgaW4gcHl0aG9uLCBidXQgZm9yIGJ5dGVzIG9ubHlcbmV4cG9ydCBjb25zdCBzdHJpbmdUb0J5dGVzID0gKHR5cGUsIHN0cikgPT4ge1xuICAgIGlmICghQ09ERVJTLmhhc093blByb3BlcnR5KHR5cGUpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNvZGVyVHlwZUVycm9yKTtcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZ1RvQnl0ZXMoKSBleHBlY3RzIHN0cmluZycpO1xuICAgIHJldHVybiBDT0RFUlNbdHlwZV0uZGVjb2RlKHN0cik7XG59O1xuZXhwb3J0IGNvbnN0IGJ5dGVzID0gc3RyaW5nVG9CeXRlcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8vIENvcHlyaWdodCAoQykgMjAyMS0yMDI0IFBhcml0eSBUZWNobm9sb2dpZXMgKFVLKSBMdGQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyBcdGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbmV4cG9ydCBkZWZhdWx0IFtcblx0e1xuXHRcdFwicHJlZml4XCI6IDAsXG5cdFx0XCJuZXR3b3JrXCI6IFwicG9sa2Fkb3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9sa2Fkb3QgUmVsYXkgQ2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJET1RcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BvbGthZG90Lm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMSxcblx0XHRcIm5ldHdvcmtcIjogXCJCYXJlU3IyNTUxOVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJCYXJlIDMyLWJpdCBTY2hub3JyL1Jpc3RyZXR0byAoUy9SIDI1NTE5KSBwdWJsaWMga2V5LlwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiU3IyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyLFxuXHRcdFwibmV0d29ya1wiOiBcImt1c2FtYVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLdXNhbWEgUmVsYXkgQ2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLU01cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2t1c2FtYS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDMsXG5cdFx0XCJuZXR3b3JrXCI6IFwiQmFyZUVkMjU1MTlcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQmFyZSAzMi1iaXQgRWQyNTUxOSBwdWJsaWMga2V5LlwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiRWQyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA0LFxuXHRcdFwibmV0d29ya1wiOiBcImthdGFsY2hhaW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS2F0YWwgQ2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW10sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1LFxuXHRcdFwibmV0d29ya1wiOiBcImFzdGFyXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkFzdGFyIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBU1RSXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hc3Rhci5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiYmlmcm9zdFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJCaWZyb3N0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQk5DXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9iaWZyb3N0LmZpbmFuY2UvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDcsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZWRnZXdhcmVcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRWRnZXdhcmVcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJFREdcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2VkZ2V3YS5yZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA4LFxuXHRcdFwibmV0d29ya1wiOiBcImthcnVyYVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLYXJ1cmFcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLQVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2thcnVyYS5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA5LFxuXHRcdFwibmV0d29ya1wiOiBcInJleW5vbGRzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkxhbWluYXIgUmV5bm9sZHMgQ2FuYXJ5XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUkVZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cDovL2xhbWluYXIubmV0d29yay9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiYWNhbGFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQWNhbGFcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBQ0FcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2FjYWxhLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExLFxuXHRcdFwibmV0d29ya1wiOiBcImxhbWluYXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTGFtaW5hclwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkxBTUlcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwOi8vbGFtaW5hci5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMixcblx0XHRcIm5ldHdvcmtcIjogXCJwb2x5bWVzaFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJQb2x5bWVzaFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBPTFlYXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0NlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BvbHltYXRoLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDEzLFxuXHRcdFwibmV0d29ya1wiOiBcImludGVncml0ZWVcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSW50ZWdyaXRlZVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlRFRVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2ludGVncml0ZWUubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxNCxcblx0XHRcIm5ldHdvcmtcIjogXCJ0b3RlbVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJUb3RlbVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlRPVEVNXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3RvdGVtYWNjb3VudGluZy5jb21cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTUsXG5cdFx0XCJuZXR3b3JrXCI6IFwic3luZXN0aGVzaWFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU3luZXN0aGVzaWFcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJTWU5cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3N5bmVzdGhlc2lhLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE2LFxuXHRcdFwibmV0d29ya1wiOiBcImt1bHVwdVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLdWx1cHVcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLTFBcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2t1bHVwdS5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxNyxcblx0XHRcIm5ldHdvcmtcIjogXCJkYXJrXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkRhcmsgTWFpbm5ldFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IG51bGxcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE4LFxuXHRcdFwibmV0d29ya1wiOiBcImRhcndpbmlhXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkRhcndpbmlhIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJSSU5HXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwic2VjcDI1NmsxXCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9kYXJ3aW5pYS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE5LFxuXHRcdFwibmV0d29ya1wiOiBcIndhdHJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiV2F0ciBQcm90b2NvbFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIldBVFJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy53YXRyLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyMCxcblx0XHRcIm5ldHdvcmtcIjogXCJzdGFmaVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJTdGFmaVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkZJU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vc3RhZmkuaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjEsXG5cdFx0XCJuZXR3b3JrXCI6IFwia2FybWFjaGFpblwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLYXJtYWNvaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLQ09JTlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDZcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9rYXJtYWNvLmluXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIyLFxuXHRcdFwibmV0d29ya1wiOiBcImRvY2stcG9zLW1haW5uZXRcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRG9jayBNYWlubmV0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRENLXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0NlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2RvY2suaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjMsXG5cdFx0XCJuZXR3b3JrXCI6IFwic2hpZnRcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU2hpZnROcmdcIixcblx0XHRcInN5bWJvbHNcIjogW10sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyNCxcblx0XHRcIm5ldHdvcmtcIjogXCJ6ZXJvXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlpFUk9cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJaRVJPXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly96ZXJvLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDI1LFxuXHRcdFwibmV0d29ya1wiOiBcInplcm8tYWxwaGF2aWxsZVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJaRVJPIEFscGhhdmlsbGVcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJaRVJPXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly96ZXJvLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDI2LFxuXHRcdFwibmV0d29ya1wiOiBcImp1cGl0ZXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSnVwaXRlclwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcImpET1RcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2p1cGl0ZXIucGF0cmFjdC5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyNyxcblx0XHRcIm5ldHdvcmtcIjogXCJrYWJvY2hhXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkthYm9jaGFcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLQUJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2thYm9jaGEubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyOCxcblx0XHRcIm5ldHdvcmtcIjogXCJzdWJzb2NpYWxcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU3Vic29jaWFsXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtdLFxuXHRcdFwiZGVjaW1hbHNcIjogW10sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogbnVsbFxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjksXG5cdFx0XCJuZXR3b3JrXCI6IFwiY29yZFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJDT1JEIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJESElcIixcblx0XHRcdFwiV0FZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTIsXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2NvcmQubmV0d29yay9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMzAsXG5cdFx0XCJuZXR3b3JrXCI6IFwicGhhbGFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUGhhbGEgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBIQVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcGhhbGEubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAzMSxcblx0XHRcIm5ldHdvcmtcIjogXCJsaXRlbnRyeVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJMaXRlbnRyeSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTElUXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9saXRlbnRyeS5jb20vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDMyLFxuXHRcdFwibmV0d29ya1wiOiBcInJvYm9ub21pY3NcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUm9ib25vbWljc1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlhSVFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDlcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9yb2Jvbm9taWNzLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMzMsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZGF0YWhpZ2h3YXlcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRGF0YUhpZ2h3YXlcIixcblx0XHRcInN5bWJvbHNcIjogW10sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBudWxsXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAzNCxcblx0XHRcIm5ldHdvcmtcIjogXCJhcmVzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkFyZXMgUHJvdG9jb2xcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBUkVTXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly93d3cuYXJlc3Byb3RvY29sLmNvbS9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMzUsXG5cdFx0XCJuZXR3b3JrXCI6IFwidmxuXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlZhbGl1IExpcXVpZGl0eSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiVVNEdlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE1XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdmFsaXUuY29tL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAzNixcblx0XHRcIm5ldHdvcmtcIjogXCJjZW50cmlmdWdlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNlbnRyaWZ1Z2UgQ2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJDRkdcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2NlbnRyaWZ1Z2UuaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDM3LFxuXHRcdFwibmV0d29ya1wiOiBcIm5vZGxlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk5vZGxlIENoYWluXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTk9ETFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDExXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbm9kbGUuaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDM4LFxuXHRcdFwibmV0d29ya1wiOiBcImtpbHRcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS0lMVCBTcGlyaXRuZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLSUxUXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTVcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9raWx0LmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAzOSxcblx0XHRcIm5ldHdvcmtcIjogXCJtYXRoY2hhaW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTWF0aENoYWluIG1haW5uZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJNQVRIXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9tYXRod2FsbGV0Lm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA0MCxcblx0XHRcIm5ldHdvcmtcIjogXCJtYXRoY2hhaW4tdGVzdG5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJNYXRoQ2hhaW4gdGVzdG5ldFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk1BVEhcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL21hdGh3YWxsZXQub3JnXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQxLFxuXHRcdFwibmV0d29ya1wiOiBcInBvbGltZWNcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9saW1lYyBQcm90b2NvbFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBMTUNcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy5wb2xpbWVjLm9yZy9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNDIsXG5cdFx0XCJuZXR3b3JrXCI6IFwic3Vic3RyYXRlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlN1YnN0cmF0ZVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9zdWJzdHJhdGUuaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQzLFxuXHRcdFwibmV0d29ya1wiOiBcIkJhcmVTZWNwMjU2azFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQmFyZSAzMi1iaXQgRUNEU0EgU0VDUC0yNTZrMSBwdWJsaWMga2V5LlwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwic2VjcDI1NmsxXCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IG51bGxcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQ0LFxuXHRcdFwibmV0d29ya1wiOiBcImNoYWlueFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJDaGFpblhcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQQ1hcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQ4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vY2hhaW54Lm9yZy9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNDUsXG5cdFx0XCJuZXR3b3JrXCI6IFwidW5pYXJ0c1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJVbmlBcnRzIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJVQVJUXCIsXG5cdFx0XHRcIlVJTktcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMixcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdW5pYXJ0cy5tZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA0Nixcblx0XHRcIm5ldHdvcmtcIjogXCJyZXNlcnZlZDQ2XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlRoaXMgcHJlZml4IGlzIHJlc2VydmVkLlwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXSxcblx0XHRcImRlY2ltYWxzXCI6IFtdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IG51bGwsXG5cdFx0XCJ3ZWJzaXRlXCI6IG51bGxcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQ3LFxuXHRcdFwibmV0d29ya1wiOiBcInJlc2VydmVkNDdcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGhpcyBwcmVmaXggaXMgcmVzZXJ2ZWQuXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtdLFxuXHRcdFwiZGVjaW1hbHNcIjogW10sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogbnVsbCxcblx0XHRcIndlYnNpdGVcIjogbnVsbFxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNDgsXG5cdFx0XCJuZXR3b3JrXCI6IFwibmVhdGNvaW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTmVhdGNvaW4gTWFpbm5ldFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk5FQVRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL25lYXRjb2luLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA0OSxcblx0XHRcIm5ldHdvcmtcIjogXCJwaWNhc3NvXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlBpY2Fzc29cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQSUNBXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9waWNhc3NvLmNvbXBvc2FibGUuZmluYW5jZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1MCxcblx0XHRcIm5ldHdvcmtcIjogXCJjb21wb3NhYmxlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNvbXBvc2FibGUgRmluYW5jZVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkxBWVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2NvbXBvc2FibGUuZmluYW5jZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1MSxcblx0XHRcIm5ldHdvcmtcIjogXCJvYWtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiT0FLIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJPQUtcIixcblx0XHRcdFwiVFVSXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTAsXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL29hay50ZWNoXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDUyLFxuXHRcdFwibmV0d29ya1wiOiBcIktJQ09cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS0lDT1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIktJQ09cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxNFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2RpY28uaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNTMsXG5cdFx0XCJuZXR3b3JrXCI6IFwiRElDT1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJESUNPXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRElDT1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE0XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZGljby5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1NCxcblx0XHRcIm5ldHdvcmtcIjogXCJjZXJlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNlcmUgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkNFUkVcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2NlcmUubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1NSxcblx0XHRcIm5ldHdvcmtcIjogXCJ4eG5ldHdvcmtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwieHggbmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlhYXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0OVxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3h4Lm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNTYsXG5cdFx0XCJuZXR3b3JrXCI6IFwicGVuZHVsdW1cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUGVuZHVsdW0gY2hhaW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQRU5cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BlbmR1bHVtY2hhaW4ub3JnL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA1Nyxcblx0XHRcIm5ldHdvcmtcIjogXCJhbXBsaXR1ZGVcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQW1wbGl0dWRlIGNoYWluXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQU1QRVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcGVuZHVsdW1jaGFpbi5vcmcvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDU4LFxuXHRcdFwibmV0d29ya1wiOiBcImV0ZXJuYWwtY2l2aWxpemF0aW9uXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkV0ZXJuYWwgQ2l2aWxpemF0aW9uXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRUNDXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cDovL3d3dy55c2tuZnIuY24vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDYzLFxuXHRcdFwibmV0d29ya1wiOiBcImh5ZHJhZHhcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSHlkcmFEWFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkhEWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaHlkcmFkeC5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA2NSxcblx0XHRcIm5ldHdvcmtcIjogXCJhdmVudHVzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkF2ZW50dXMgTWFpbm5ldFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkFWVFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vYXZlbnR1cy5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA2Nixcblx0XHRcIm5ldHdvcmtcIjogXCJjcnVzdFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJDcnVzdCBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQ1JVXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9jcnVzdC5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDY3LFxuXHRcdFwibmV0d29ya1wiOiBcImdlbnNoaXJvXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkdlbnNoaXJvIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJHRU5TXCIsXG5cdFx0XHRcIkVRRFwiLFxuXHRcdFx0XCJMUFQwXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0OSxcblx0XHRcdDksXG5cdFx0XHQ5XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZ2Vuc2hpcm8uZXF1aWxpYnJpdW0uaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNjgsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZXF1aWxpYnJpdW1cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRXF1aWxpYnJpdW0gTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkVRXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0OVxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2VxdWlsaWJyaXVtLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDY5LFxuXHRcdFwibmV0d29ya1wiOiBcInNvcmFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU09SQSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiWE9SXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9zb3JhLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3MSxcblx0XHRcIm5ldHdvcmtcIjogXCJwM2RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiM0RQIG5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQM0RcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovLzNkcGFzcy5vcmdcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNzIsXG5cdFx0XCJuZXR3b3JrXCI6IFwicDNkdFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCIzRFAgdGVzdCBuZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUDNEdFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vM2RwYXNzLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3Myxcblx0XHRcIm5ldHdvcmtcIjogXCJ6ZWl0Z2Vpc3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiWmVpdGdlaXN0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiWlRHXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTBcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly96ZWl0Z2Vpc3QucG1cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNzcsXG5cdFx0XCJuZXR3b3JrXCI6IFwibWFudGFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTWFudGEgbmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk1BTlRBXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9tYW50YS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDc4LFxuXHRcdFwibmV0d29ya1wiOiBcImNhbGFtYXJpXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNhbGFtYXJpOiBNYW50YSBDYW5hcnkgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIktNQVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbWFudGEubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA4MSxcblx0XHRcIm5ldHdvcmtcIjogXCJzb3JhX2RvdF9wYXJhXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlNPUkEgUG9sa2Fkb3QgUGFyYWNoYWluXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiWE9SXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9zb3JhLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA4OCxcblx0XHRcIm5ldHdvcmtcIjogXCJwb2xrYWRleFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJQb2xrYWRleCBNYWlubmV0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUERFWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcG9sa2FkZXgudHJhZGVcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogODksXG5cdFx0XCJuZXR3b3JrXCI6IFwicG9sa2FkZXhwYXJhY2hhaW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9sa2FkZXggUGFyYWNoYWluXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUERFWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcG9sa2FkZXgudHJhZGVcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogOTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZnJlcXVlbmN5XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkZyZXF1ZW5jeVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkZSUUNZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0OFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy5mcmVxdWVuY3kueHl6XCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDkyLFxuXHRcdFwibmV0d29ya1wiOiBcImFubW9sXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkFubW9sIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBTk1MXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hbm1vbC5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA5Myxcblx0XHRcIm5ldHdvcmtcIjogXCJmcmFnbm92YVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJGcmFnbm92YSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTk9WQVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZnJhZ25vdmEuY29tXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDk4LFxuXHRcdFwibmV0d29ya1wiOiBcInBvbGthc21pdGhcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9sa2FTbWl0aCBDYW5hcnkgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBLU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcG9sa2Fmb3VuZHJ5LmNvbVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA5OSxcblx0XHRcIm5ldHdvcmtcIjogXCJwb2xrYWZvdW5kcnlcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9sa2FGb3VuZHJ5IE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQS0ZcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BvbGthZm91bmRyeS5jb21cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTAwLFxuXHRcdFwibmV0d29ya1wiOiBcImlidGlkYVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJBbm1vbCBOZXR3b3JrIElidGlkYSBDYW5hcnkgbmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIklBTk1MXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hbm1vbC5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMDEsXG5cdFx0XCJuZXR3b3JrXCI6IFwib3JpZ2ludHJhaWwtcGFyYWNoYWluXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk9yaWdpblRyYWlsIFBhcmFjaGFpblwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk9UUFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vcGFyYWNoYWluLm9yaWdpbnRyYWlsLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMDUsXG5cdFx0XCJuZXR3b3JrXCI6IFwicG9udGVtLW5ldHdvcmtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUG9udGVtIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJQT05UXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTBcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9wb250ZW0ubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiaGVpa29cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSGVpa29cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJIS09cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BhcmFsbGVsLmZpL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMTMsXG5cdFx0XCJuZXR3b3JrXCI6IFwiaW50ZWdyaXRlZS1pbmNvZ25pdG9cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSW50ZWdyaXRlZSBJbmNvZ25pdG9cIixcblx0XHRcInN5bWJvbHNcIjogW10sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaW50ZWdyaXRlZS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExNyxcblx0XHRcIm5ldHdvcmtcIjogXCJ0aW5rZXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGlua2VyXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiVE5LUlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaW52YXJjaC5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDEyNixcblx0XHRcIm5ldHdvcmtcIjogXCJqb3lzdHJlYW1cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSm95c3RyZWFtXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiSk9ZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTBcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly93d3cuam95c3RyZWFtLm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjgsXG5cdFx0XCJuZXR3b3JrXCI6IFwiY2xvdmVyXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNsb3ZlciBGaW5hbmNlXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQ0xWXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9jbG92ZXIuZmluYW5jZVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjksXG5cdFx0XCJuZXR3b3JrXCI6IFwiZG9yYWZhY3RvcnktcG9sa2Fkb3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiRG9yYWZhY3RvcnkgUG9sa2Fkb3QgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkRPUkFcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2RvcmFmYWN0b3J5Lm9yZ1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMzEsXG5cdFx0XCJuZXR3b3JrXCI6IFwibGl0bXVzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkxpdG11cyBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTElUXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9saXRlbnRyeS5jb20vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDEzNixcblx0XHRcIm5ldHdvcmtcIjogXCJhbHRhaXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQWx0YWlyXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQUlSXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9jZW50cmlmdWdlLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMzcsXG5cdFx0XCJuZXR3b3JrXCI6IFwidmFyYVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJWYXJhIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJWQVJBXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly92YXJhLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE3Mixcblx0XHRcIm5ldHdvcmtcIjogXCJwYXJhbGxlbFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJQYXJhbGxlbFwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBBUkFcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BhcmFsbGVsLmZpL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyNTIsXG5cdFx0XCJuZXR3b3JrXCI6IFwic29jaWFsLW5ldHdvcmtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU29jaWFsIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJORVRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3NvY2lhbC5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDI1NSxcblx0XHRcIm5ldHdvcmtcIjogXCJxdWFydHpfbWFpbm5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJRVUFSVFogYnkgVU5JUVVFXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUVRaXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly91bmlxdWUubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyNjgsXG5cdFx0XCJuZXR3b3JrXCI6IFwicGlvbmVlcl9uZXR3b3JrXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlBpb25lZXIgTmV0d29yayBieSBCaXQuQ291bnRyeVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk5FRVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2JpdC5jb3VudHJ5XCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQyMCxcblx0XHRcIm5ldHdvcmtcIjogXCJzb3JhX2t1c2FtYV9wYXJhXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlNPUkEgS3VzYW1hIFBhcmFjaGFpblwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlhPUlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vc29yYS5vcmdcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNDQwLFxuXHRcdFwibmV0d29ya1wiOiBcImFsbGZlYXRfbmV0d29ya1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJBbGxmZWF0IE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBRlRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2FsbGZlYXQubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA2NjYsXG5cdFx0XCJuZXR3b3JrXCI6IFwibWV0YXF1aXR5X25ldHdvcmtcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTWV0YXF1aXR5IE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJNUVRZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9tZXRhcXVpdHkueHl6L1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3NzcsXG5cdFx0XCJuZXR3b3JrXCI6IFwiY3VyaW9cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQ3VyaW9cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJDR1RcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3BhcmFjaGFpbi5jYXBpdGFsZGV4LmV4Y2hhbmdlL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3ODksXG5cdFx0XCJuZXR3b3JrXCI6IFwiZ2Vla1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJHRUVLIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJHRUVLXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9nZWVrLmdsXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDk5NSxcblx0XHRcIm5ldHdvcmtcIjogXCJ0ZXJub2FcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGVybm9hXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQ0FQU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vd3d3LnRlcm5vYS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExMTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZWZpbml0eVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJFZmluaXR5XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRUZJXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9lZmluaXR5LmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjIxLFxuXHRcdFwibmV0d29ya1wiOiBcInBlYXFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiUGVhcSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiUEVBUVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIlNyMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy5wZWFxLm5ldHdvcmsvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDEyMjIsXG5cdFx0XCJuZXR3b3JrXCI6IFwia3Jlc3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS3Jlc3QgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIktSRVNUXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiU3IyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vd3d3LnBlYXEubmV0d29yay9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTI4NCxcblx0XHRcIm5ldHdvcmtcIjogXCJtb29uYmVhbVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJNb29uYmVhbVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkdMTVJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCJzZWNwMjU2azFcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL21vb25iZWFtLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTI4NSxcblx0XHRcIm5ldHdvcmtcIjogXCJtb29ucml2ZXJcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTW9vbnJpdmVyXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTU9WUlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcInNlY3AyNTZrMVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbW9vbmJlYW0ubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMzI4LFxuXHRcdFwibmV0d29ya1wiOiBcImFqdW5hXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkFqdW5hIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJBSlVOXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hanVuYS5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMzM3LFxuXHRcdFwibmV0d29ya1wiOiBcImJhanVuXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkJhanVuIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJCQUpVXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hanVuYS5pb1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxNTE2LFxuXHRcdFwibmV0d29ya1wiOiBcInNvY2lldGFsXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlNvY2lldGFsXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiU0NUTFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vd3d3LnNjdGwueHl6XCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE5ODUsXG5cdFx0XCJuZXR3b3JrXCI6IFwic2VhbHNcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU2VhbHMgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlNFQUxcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQ5XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vc2VhbHMuYXBwXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIwMDcsXG5cdFx0XCJuZXR3b3JrXCI6IFwia2FwZXhcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiS2FwZXhcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJLQVBFWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdG90ZW1hY2NvdW50aW5nLmNvbVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyMDA5LFxuXHRcdFwibmV0d29ya1wiOiBcImNsb3Vkd2Fsa19tYWlubmV0XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNsb3VkV2FsayBOZXR3b3JrIE1haW5uZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJDV05cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2V4cGxvcmVyLm1haW5uZXQuY2xvdWR3YWxrLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIwMjEsXG5cdFx0XCJuZXR3b3JrXCI6IFwibG9naW9uXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcImxvZ2lvbiBuZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTEdOVFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbG9naW9uLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjAzMixcblx0XHRcIm5ldHdvcmtcIjogXCJpbnRlcmxheVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJJbnRlcmxheVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIklOVFJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2ludGVybGF5LmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyMDkyLFxuXHRcdFwibmV0d29ya1wiOiBcImtpbnRzdWdpXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIktpbnRzdWdpXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiS0lOVFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaW50ZXJsYXkuaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIxMDYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiYml0Z3JlZW5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQml0Z3JlZW5cIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJCQkJcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2JpdGdyZWVuLm9yZy9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjExMixcblx0XHRcIm5ldHdvcmtcIjogXCJjaGFpbmZsaXBcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiQ2hhaW5mbGlwXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRkxJUFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vY2hhaW5mbGlwLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAyMTk5LFxuXHRcdFwibmV0d29ya1wiOiBcIm1vb25zYW1hXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk1vb25zYW1hXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiU0FNQVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcInNlY3AyNTZrMVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbW9vbnNhbWEuY29tXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIyMDYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiSUNFXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIklDRSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiSUNZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9pY2VuZXR3b3JrLmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDIyMDcsXG5cdFx0XCJuZXR3b3JrXCI6IFwiU05PV1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJTTk9XOiBJQ0UgQ2FuYXJ5IE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJJQ1pcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2ljZW5ldHdvcmsuaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjI1NCxcblx0XHRcIm5ldHdvcmtcIjogXCJzdWJzcGFjZV90ZXN0bmV0XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlN1YnNwYWNlIHRlc3RuZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJ0U1NDXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9zdWJzcGFjZS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDMzMzMsXG5cdFx0XCJuZXR3b3JrXCI6IFwicGVlcnBsYXlzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIlBlZXJwbGF5c1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlBQWVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcInNlY3AyNTZrMVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vd3d3LnBlZXJwbGF5cy5jb20vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDQ0NTAsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZzFcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwixJ4xXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRzFcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZHVuaXRlci5vcmdcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNTIzNCxcblx0XHRcIm5ldHdvcmtcIjogXCJodW1hbm9kZVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJIdW1hbm9kZSBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiSE1ORFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vaHVtYW5vZGUuaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNTg0NSxcblx0XHRcIm5ldHdvcmtcIjogXCJ0YW5nbGVcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGFuZ2xlIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJUTlRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy50YW5nbGUudG9vbHMvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDYwOTQsXG5cdFx0XCJuZXR3b3JrXCI6IFwic3Vic3BhY2VcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiU3Vic3BhY2VcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJTU0NcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3N1YnNwYWNlLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNzAwNyxcblx0XHRcIm5ldHdvcmtcIjogXCJ0aWRlZmlcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiVGlkZWZpXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiVERGWVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdGlkZWZpLmNvbVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3MDEzLFxuXHRcdFwibmV0d29ya1wiOiBcImdtXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkdNXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiRlJFTlwiLFxuXHRcdFx0XCJHTVwiLFxuXHRcdFx0XCJHTlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyLFxuXHRcdFx0MCxcblx0XHRcdDBcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9nbW9yZGllLmNvbVwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA3MzA2LFxuXHRcdFwibmV0d29ya1wiOiBcImtyaWdhblwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJLcmlnYW4gTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIktSR05cIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQ5XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8va3JpZ2FuLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogNzM5MSxcblx0XHRcIm5ldHdvcmtcIjogXCJ1bmlxdWVfbWFpbm5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJVbmlxdWUgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlVOUVwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vdW5pcXVlLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogODg2Nixcblx0XHRcIm5ldHdvcmtcIjogXCJnb2xkZW5fZ2F0ZVwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJHb2xkZW4gR2F0ZVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkdHWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vZ2d4Y2hhaW4uaW8vXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDg4ODMsXG5cdFx0XCJuZXR3b3JrXCI6IFwic2FwcGhpcmVfbWFpbm5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJTYXBwaGlyZSBieSBVbmlxdWVcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJRVFpcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3VuaXF1ZS5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDg4ODYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZ29sZGVuX2dhdGVfc3lkbmV5XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkdvbGRlbiBHYXRlIFN5ZG5leVwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkdHWFRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2dneGNoYWluLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiA5MDcyLFxuXHRcdFwibmV0d29ya1wiOiBcImhhc2hlZFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJIYXNoZWQgTmV0d29ya1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkhBU0hcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL2hhc2hlZC5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDk4MDcsXG5cdFx0XCJuZXR3b3JrXCI6IFwiZGVudG5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJERU5UTmV0XCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiREVOVFhcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL3d3dy5kZW50bmV0LmlvXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDk5MzUsXG5cdFx0XCJuZXR3b3JrXCI6IFwidDNyblwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJ0M3JuXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiVFJOXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MTJcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly90M3JuLmlvL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMDA0MSxcblx0XHRcIm5ldHdvcmtcIjogXCJiYXNpbGlza1wiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJCYXNpbGlza1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIkJTWFwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDEyXG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vYnN4LmZpXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExMzMwLFxuXHRcdFwibmV0d29ya1wiOiBcImNlc3MtdGVzdG5ldFwiLFxuXHRcdFwiZGlzcGxheU5hbWVcIjogXCJDRVNTIFRlc3RuZXRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJUQ0VTU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vY2Vzcy5jbG91ZFwiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMTMzMSxcblx0XHRcIm5ldHdvcmtcIjogXCJjZXNzXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkNFU1NcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJDRVNTXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9jZXNzLmNsb3VkXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExNDg2LFxuXHRcdFwibmV0d29ya1wiOiBcImx1aG5cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiTHVobiBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiTFVITlwiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbHVobi5uZXR3b3JrXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDExODIwLFxuXHRcdFwibmV0d29ya1wiOiBcImNvbnRleHRmcmVlXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkF1dG9tYXRhIENvbnRleHRGcmVlXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiQ1RYXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9hdGEubmV0d29ya1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjE1NSxcblx0XHRcIm5ldHdvcmtcIjogXCJpbXBhY3RcIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiSW1wYWN0IFByb3RvY29sIE5ldHdvcmtcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJCU1RZXCJcblx0XHRdLFxuXHRcdFwiZGVjaW1hbHNcIjogW1xuXHRcdFx0MThcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9pbXBhY3Rwcm90b2NvbC5uZXR3b3JrL1wiXG5cdH0sXG5cdHtcblx0XHRcInByZWZpeFwiOiAxMjE5MSxcblx0XHRcIm5ldHdvcmtcIjogXCJuZnRtYXJ0XCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk5GVE1hcnRcIixcblx0XHRcInN5bWJvbHNcIjogW1xuXHRcdFx0XCJOTVRcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxMlxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCIqMjU1MTlcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL25mdG1hcnQuaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTMxMTYsXG5cdFx0XCJuZXR3b3JrXCI6IFwiYml0dGVuc29yXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIkJpdHRlbnNvclwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIlRBT1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDlcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9iaXR0ZW5zb3IuY29tXCJcblx0fSxcblx0e1xuXHRcdFwicHJlZml4XCI6IDE0Njk3LFxuXHRcdFwibmV0d29ya1wiOiBcImdvcm9cIixcblx0XHRcImRpc3BsYXlOYW1lXCI6IFwiR09STyBOZXR3b3JrXCIsXG5cdFx0XCJzeW1ib2xzXCI6IFtcblx0XHRcdFwiR09ST1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDlcblx0XHRdLFxuXHRcdFwic3RhbmRhcmRBY2NvdW50XCI6IFwiKjI1NTE5XCIsXG5cdFx0XCJ3ZWJzaXRlXCI6IFwiaHR0cHM6Ly9nb3JvLm5ldHdvcmtcIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMTQ5OTgsXG5cdFx0XCJuZXR3b3JrXCI6IFwibW9zYWljLWNoYWluXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk1vc2FpYyBDaGFpblwiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk1PU1wiXG5cdFx0XSxcblx0XHRcImRlY2ltYWxzXCI6IFtcblx0XHRcdDE4XG5cdFx0XSxcblx0XHRcInN0YW5kYXJkQWNjb3VudFwiOiBcIioyNTUxOVwiLFxuXHRcdFwid2Vic2l0ZVwiOiBcImh0dHBzOi8vbW9zYWljY2hhaW4uaW9cIlxuXHR9LFxuXHR7XG5cdFx0XCJwcmVmaXhcIjogMjk5NzIsXG5cdFx0XCJuZXR3b3JrXCI6IFwibXl0aG9zXCIsXG5cdFx0XCJkaXNwbGF5TmFtZVwiOiBcIk15dGhvc1wiLFxuXHRcdFwic3ltYm9sc1wiOiBbXG5cdFx0XHRcIk1ZVEhcIlxuXHRcdF0sXG5cdFx0XCJkZWNpbWFsc1wiOiBbXG5cdFx0XHQxOFxuXHRcdF0sXG5cdFx0XCJzdGFuZGFyZEFjY291bnRcIjogXCJzZWNwMjU2azFcIixcblx0XHRcIndlYnNpdGVcIjogXCJodHRwczovL215dGhvcy5mb3VuZGF0aW9uXCJcblx0fVxuXTtcbiIsImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9pbmRleC5qcydcblxuZXhwb3J0IHsgRXZlbnRFbWl0dGVyIH1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50RW1pdHRlclxuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZTtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKGVudi5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xuICAgICAgICBpZiAocmVjLmFzeW5jKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCJpbXBvcnQgeyB0b3B1cFRoZW5Jbml0aWF0aXZlU2V0dXAgfSBmcm9tIFwiLi9pbml0aWF0aXZlc1wiO1xuaW1wb3J0IHsgdG9wdXBUaGVuQ3JlYXRlQ29tbXVuaXR5IH0gZnJvbSBcIi4vdG9wLXVwLXRoZW4tY3JlYXRlLWNvbW11bml0eVwiO1xuaW1wb3J0IHsgdG9wdXBUaGVuSW5pdGlhdGl2ZVZvdGUgfSBmcm9tIFwiLi90b3AtdXAtdGhlbi12b3RlLWluaXRpYXRpdmVcIjtcbmV4cG9ydCB7IFhjbVByb2dyYW1zRXhlY3V0b3IgfSBmcm9tIFwiLi9leGVjdXRvclwiO1xuZXhwb3J0IGZ1bmN0aW9uIGdsb2JhbGx5SW5qZWN0UHJvZ3JhbXMoZXhlY3V0b3IpIHtcbiAgICBjb25zdCBmdW5jdGlvbnMgPSBbXG4gICAgICAgIHRvcHVwVGhlbkNyZWF0ZUNvbW11bml0eSxcbiAgICAgICAgdG9wdXBUaGVuSW5pdGlhdGl2ZVNldHVwLFxuICAgICAgICB0b3B1cFRoZW5Jbml0aWF0aXZlVm90ZVxuICAgIF07XG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgICAgZ2xvYmFsVGhpc1tmbi5uYW1lXSA9ICguLi5wYXJhbXMpID0+IGV4ZWN1dG9yLmV4ZWN1dGUoZm4sIC4uLnBhcmFtcyk7XG4gICAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/public/styles/main.scss b/public/styles/main.scss index 1ad8a28..07b7a59 100644 --- a/public/styles/main.scss +++ b/public/styles/main.scss @@ -458,6 +458,16 @@ $fw-bold: 700; padding: 44px 0; } +.form__inputs__disclaimer { + @extend %text-sm-font-medium; + color: var(--text-secondary); + background: var(--fill-50); + padding: 12px; + border-radius: 8px; + margin: 4px 0; + white-space: pre-line; +} + .form__input { display: flex; gap: 8px; @@ -728,6 +738,7 @@ $fw-bold: 700; width: 60px; padding: 0; transition: background-color 0.2s ease-in; + &:hover { background-color: var(--fill-600); } @@ -1113,9 +1124,7 @@ $fw-bold: 700; background: var(--state-primary-active); } -.markdown__wrapper--editor { - -} +.markdown__wrapper--editor {} .markdown__wrapper--preview {} @@ -1393,6 +1402,15 @@ textarea::placeholder { padding-top: 6px; } +.input--help { + @extend %text-sm-font-medium; + color: var(--text-secondary); + display: flex; + gap: 2px; + align-items: center; + padding-top: 6px; +} + .avatar { width: var(--avatar-size); min-width: var(--avatar-size); @@ -2125,10 +2143,11 @@ textarea::placeholder { justify-content: space-between; height: 300px; transition: all 0.2s ease-out; + &:hover { background-color: var(--fill-200); box-shadow: 0px 16px 32px 0px #00221833; - box-shadow: 0 4px 8px rgba(0,0,0,0.1); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } } @@ -2136,6 +2155,7 @@ textarea::placeholder { flex-direction: column-reverse; background: var(--fill-100); box-shadow: none; + &:hover { background-color: var(--fill-200); transform: scale(1.05); @@ -2179,6 +2199,7 @@ textarea::placeholder { .card__title { @extend %text-3xl-font-bold; color: var(--text-primary); + text-align: left } .card__description { diff --git a/src/components/atoms/combo_input.rs b/src/components/atoms/combo_input.rs index 805c39c..4bb9e6f 100644 --- a/src/components/atoms/combo_input.rs +++ b/src/components/atoms/combo_input.rs @@ -1,13 +1,20 @@ use dioxus::prelude::*; use dioxus_std::{i18n::use_i18, translate}; -use crate::components::atoms::{dropdown::DropdownItem, Dropdown, Input}; +use crate::components::atoms::{dropdown::DropdownItem, input::InputType, Dropdown, Input}; use super::dropdown::ElementSize; -#[derive(PartialEq, Clone)] +#[derive(PartialEq, Clone, Debug)] +pub enum ComboInputOption { + Dropdown(DropdownItem), + Date(String), + None, +} + +#[derive(PartialEq, Clone, Debug)] pub struct ComboInputValue { - pub dropdown: DropdownItem, + pub option: ComboInputOption, pub input: String, } @@ -15,6 +22,7 @@ pub struct ComboInputValue { pub struct ComboInputProps { value: ComboInputValue, placeholder: String, + error: Option, #[props(default = ElementSize::Medium)] size: ElementSize, on_change: EventHandler, @@ -23,27 +31,14 @@ pub struct ComboInputProps { pub fn ComboInput(props: ComboInputProps) -> Element { let i18 = use_i18(); - let mut dropdown_value = use_signal::(|| props.value.dropdown); + let mut option_value = use_signal(|| props.value.option.clone()); let mut input_value = use_signal::(|| props.value.input.clone()); - let mut soon = use_signal::(|| { - dropdown_value().key == "Email" || dropdown_value().key == "Telegram" - }); let mut items = vec![]; - let mut dropdown_options = vec![ - DropdownItem { - key: "Wallet".to_string(), - value: translate!(i18, "onboard.invite.form.wallet.label"), - }, - // DropdownItem { - // key: "Email".to_string(), - // value: translate!(i18, "onboard.invite.form.email.label"), - // }, - // DropdownItem { - // key: "Telegram".to_string(), - // value: translate!(i18, "onboard.invite.form.phone.label"), - // }, - ]; + let dropdown_options = vec![DropdownItem { + key: "Wallet".to_string(), + value: translate!(i18, "onboard.invite.form.wallet.label"), + }]; for account in dropdown_options.clone().into_iter() { items.push(rsx!(span { @@ -54,35 +49,49 @@ pub fn ComboInput(props: ComboInputProps) -> Element { rsx!( div { class: "combo-input", - class: if soon() { "combo-input--comming-soon" }, - Dropdown { - class: "dropdown--left".to_string(), - value: dropdown_value(), - placeholder: translate!(i18, "header.cta.account"), - size: props.size.clone(), - default: None, - on_change: move |event: usize| { - let to_assign = &dropdown_options[event]; - - if to_assign.value == "Email" || to_assign.value == "Telegram" { - soon.set(true) - } else { - soon.set(false) + match option_value() { + ComboInputOption::Date(value) => rsx!( + Input { + message: value, + size: props.size.clone(), + itype: InputType::Date, + placeholder: props.placeholder.clone(), + error: None, + on_input: move |event: Event| { + option_value.set(ComboInputOption::Date(event.value().clone())); + props.on_change.call(ComboInputValue { option: ComboInputOption::Date(event.value().clone()), input: input_value().clone() }) + }, + on_keypress: move |_| {}, + on_click: move |_| {}, } - - dropdown_value.set(to_assign.clone()); - props.on_change.call(ComboInputValue { dropdown: dropdown_value(), input: input_value().clone() }) - }, - body: items + ), + ComboInputOption::Dropdown(value) => rsx!( + Dropdown { + class: "dropdown--left".to_string(), + value: value, + placeholder: translate!(i18, "header.cta.account"), + size: props.size.clone(), + default: None, + on_change: move |event: usize| { + let to_assign = &dropdown_options[event]; + option_value.set(ComboInputOption::Dropdown(to_assign.clone())); + props.on_change.call(ComboInputValue { option: ComboInputOption::Dropdown(to_assign.clone()), input: input_value().clone() }) + }, + body: items + } + ), + ComboInputOption::None => { + rsx!() + } } Input { message: props.value.input.clone(), size: props.size, placeholder: props.placeholder, - error: None, + error: props.error, on_input: move |event: Event| { input_value.set(event.value().clone()); - props.on_change.call(ComboInputValue { dropdown: dropdown_value().clone(), input: input_value().clone() }) + props.on_change.call(ComboInputValue { option: option_value(), input: input_value().clone() }) }, on_keypress: move |_| {}, on_click: move |_| {}, diff --git a/src/components/atoms/input.rs b/src/components/atoms/input.rs index bd5ca31..c456e8d 100644 --- a/src/components/atoms/input.rs +++ b/src/components/atoms/input.rs @@ -1,4 +1,6 @@ use dioxus::prelude::*; +use wasm_bindgen::JsCast; +use web_sys::HtmlInputElement; use crate::components::atoms::{Icon, IconButton, Search, WarningSign}; @@ -10,6 +12,7 @@ pub enum InputType { Message, Search, Password, + Date, } #[derive(PartialEq, Props, Clone)] @@ -20,6 +23,7 @@ pub struct InputProps { placeholder: String, #[props(!optional)] error: Option, + help: Option, #[props(default = ElementSize::Medium)] size: ElementSize, label: Option, @@ -33,6 +37,8 @@ pub struct InputProps { } pub fn Input(props: InputProps) -> Element { + let mut input_ref = use_signal::>>(|| None); + let input_error_container = if let Some(_) = props.error { "input--error-container" } else { @@ -43,6 +49,7 @@ pub fn Input(props: InputProps) -> Element { InputType::Text => "text", InputType::Search => "text", InputType::Message => "text", + InputType::Date => "date", InputType::Password => "password", }; @@ -72,6 +79,27 @@ pub fn Input(props: InputProps) -> Element { input { r#type: "{input_type}", class: "input", + onmounted: move |event| { + event.data.downcast::() + .and_then(|element| element.clone().dyn_into::().ok()) + .map(|html_element| input_ref.set(Some(Box::new(html_element.clone())))); + + if input_type == "date" { + if let Some(input_element) = input_ref() { + input_element.set_type("text") + } + } + }, + onfocus: move |_| { + if let Some(input_element) = input_ref() { + input_element.set_type(input_type) + } + }, + onblur: move |_| { + if let Some(input_element) = input_ref() { + input_element.set_type("text") + } + }, value: props.message, required: props.required, maxlength: i64::from(props.maxlength), @@ -98,6 +126,15 @@ pub fn Input(props: InputProps) -> Element { } } } + if props.error.is_none() { + if let Some(help) = props.help { + div { + class: "input--help", + "{help}" + } + } + } + if let Some(error) = props.error { div { class: "input--error", diff --git a/src/components/atoms/search_input.rs b/src/components/atoms/search_input.rs index 93ae63b..68effac 100644 --- a/src/components/atoms/search_input.rs +++ b/src/components/atoms/search_input.rs @@ -2,12 +2,10 @@ use dioxus::prelude::*; use crate::components::atoms::{Icon, IconButton, Search}; -use super::{dropdown::ElementSize, input::InputType}; +use super::dropdown::ElementSize; #[derive(PartialEq, Props, Clone)] pub struct SearchInputProps { - #[props(default = InputType::Text)] - itype: InputType, message: String, placeholder: String, #[props(!optional)] @@ -27,30 +25,17 @@ pub fn SearchInput(props: SearchInputProps) -> Element { "" }; - let input_type = match props.itype { - InputType::Text => "text", - InputType::Search => "text", - InputType::Message => "text", - InputType::Password => "password", - }; - let size = match props.size { ElementSize::Big => "input-wrapper__container--big", ElementSize::Medium => "input-wrapper__container--medium", ElementSize::Small => "input-wrapper__container--small", }; - let is_search = if matches!(props.itype, InputType::Search) { - "input__wrapper--search" - } else { - "" - }; - let mut is_active = use_signal::(|| false); rsx!( section { - class: "input__wrapper {is_search}", + class: "input__wrapper input__wrapper--search", class: if is_active() {"input__wrapper--active"}, if let Some(value) = props.label { label { class: "input__label", "{value}" } @@ -58,29 +43,27 @@ pub fn SearchInput(props: SearchInputProps) -> Element { div { class: "input-wrapper {size} {input_error_container}", input { - r#type: "{input_type}", + r#type: "text", class: "input", value: props.message, placeholder: "{props.placeholder}", oninput: move |event| props.on_input.call(event), onkeypress: move |event| props.on_keypress.call(event) } - if matches!(props.itype, InputType::Search) { - IconButton { - class: "button--avatar bg--transparent", - size: props.size, - body: rsx!( - Icon { - icon: Search, - height: 26, - width: 26, - stroke_width: 1.5, - fill: "var(--text-secondary)" - } - ), - on_click: move |_| { - is_active.toggle(); + IconButton { + class: "button--avatar bg--transparent", + size: props.size, + body: rsx!( + Icon { + icon: Search, + height: 26, + width: 26, + stroke_width: 1.5, + fill: "var(--text-secondary)" } + ), + on_click: move |_| { + is_active.toggle(); } } } diff --git a/src/components/molecules/header.rs b/src/components/molecules/header.rs index fafddc9..a72b58e 100644 --- a/src/components/molecules/header.rs +++ b/src/components/molecules/header.rs @@ -2,7 +2,7 @@ use std::str::FromStr; use dioxus::prelude::*; use dioxus_std::{i18n::use_i18, translate}; -use futures_util::{StreamExt, TryFutureExt}; +use futures_util::TryFutureExt; use crate::{ components::atoms::{ @@ -16,7 +16,6 @@ use crate::{ use_connect_wallet::use_connect_wallet, use_notification::use_notification, use_session::{use_session, UserSession}, - use_timestamp::{use_timestamp, IsTimestampHandled}, }, services::kreivo::{balances::account, communities::is_admin}, }; @@ -41,8 +40,6 @@ pub fn Header() -> Element { let mut ksm_balance = use_signal::<(String, String)>(|| ('0'.to_string(), "00".to_string())); let mut usdt_balance = use_signal::<(String, String)>(|| ('0'.to_string(), "00".to_string())); let mut header_handled = consume_context::>(); - let is_timestamp_handled = consume_context::>(); - let timestamp = use_timestamp(); let get_account = move || { let Some(user_session) = session.get() else { @@ -79,9 +76,10 @@ pub fn Header() -> Element { return Ok(()); }; - let is_dao_owner = is_admin(&address.0) - .await - .map_err(|_| translate!(i18, "errors.wallet.account_address"))?; + let is_dao_owner = is_admin(&address.0).await.map_err(|_| { + log::warn!("Failed to get is admin"); + translate!(i18, "errors.wallet.account_address") + })?; accounts.set_is_active_account_an_admin(IsDaoOwner(is_dao_owner)); @@ -98,9 +96,12 @@ pub fn Header() -> Element { ksm_balance.set(( unscaled_value[0].to_string(), - format!("{:.2}", unscaled_value[1]), + format!("{:.2}", unscaled_value.get(1).unwrap_or(&"00")), + )); + usdt_balance.set(( + usdt_value[0].to_string(), + format!("{:.2}", usdt_value.get(1).unwrap_or(&"00")), )); - usdt_balance.set((usdt_value[0].to_string(), format!("{:.2}", usdt_value[1]))); if !header_handled() { header_handled.set(true); } @@ -168,32 +169,30 @@ pub fn Header() -> Element { get_balance(); }; - let handle_default_account = use_coroutine(move |mut rx: UnboundedReceiver<()>| async move { - while let Some(_) = rx.next().await { - if session.is_logged() { - match PjsExtension::connect(APP_NAME).await { - Ok(mut vault) => { - let Ok(_) = vault.fetch_accounts().await else { - notification - .handle_error(&translate!(i18, "errors.wallet.accounts_not_found")); - return; - }; - - let vault_accounts = vault.accounts(); - accounts.set(vault_accounts); - - if let Some(user_session) = session.get() { - on_handle_account(user_session.account_id); - } - } - Err(pjs::Error::NoPermission) => { - session.persist_session_file(""); + use_coroutine(move |_: UnboundedReceiver<()>| async move { + if session.is_logged() { + match PjsExtension::connect(APP_NAME).await { + Ok(mut vault) => { + let Ok(_) = vault.fetch_accounts().await else { + notification + .handle_error(&translate!(i18, "errors.wallet.accounts_not_found")); + return; + }; + + let vault_accounts = vault.accounts(); + accounts.set(vault_accounts); + + if let Some(user_session) = session.get() { + on_handle_account(user_session.account_id); } - Err(_) => todo!(), } - } else { - header_handled.set(true); + Err(pjs::Error::NoPermission) => { + session.persist_session_file(""); + } + Err(_) => todo!(), } + } else { + header_handled.set(true); } }); @@ -202,12 +201,6 @@ pub fn Header() -> Element { let active_class = if is_active() { "header--active" } else { "" }; - use_effect(use_reactive(&is_timestamp_handled(), move |_| { - if is_timestamp_handled.read().0 { - handle_default_account.send(()); - } - })); - rsx!( div { class: "dashboard__header", div { class: "dashboard__header__left", diff --git a/src/components/molecules/initiative/actions.rs b/src/components/molecules/initiative/actions.rs index 18a9d79..d8aa615 100644 --- a/src/components/molecules/initiative/actions.rs +++ b/src/components/molecules/initiative/actions.rs @@ -3,18 +3,22 @@ use dioxus_std::{i18n::use_i18, translate}; use crate::{ components::atoms::{ - combo_input::ComboInputValue, + combo_input::{ComboInputOption, ComboInputValue}, dropdown::{DropdownItem, ElementSize}, icon_button::Variant, AddPlus, ComboInput, Dropdown, Icon, IconButton, MinusCircle, SubstractLine, }, hooks::{ - use_initiative::{use_initiative, ActionItem, AddMembersAction, MediumOptions, MemberItem}, + use_initiative::{ + use_initiative, ActionItem, AddMembersAction, KusamaTreasury, MediumOptions, MemberItem, + }, use_notification::use_notification, use_spaces_client::use_spaces_client, }, }; +const KUSAMA_PRECISION_DECIMALS: u64 = 1_000_000_000_000; + #[component] pub fn InitiativeActions() -> Element { let i18 = use_i18(); @@ -22,8 +26,6 @@ pub fn InitiativeActions() -> Element { let mut notification = use_notification(); let spaces_client = use_spaces_client(); - let mut name_maxlength = use_signal(|| 24); - let actions_lock = initiative.get_actions(); let mut items = vec![]; @@ -79,30 +81,31 @@ pub fn InitiativeActions() -> Element { ul { class: "form__inputs form__inputs--combo", { meta.members.iter().enumerate().map(|(index_meta, member)| { + let dropdown_item = DropdownItem { key: match member.medium { + MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.label"), + }, value: match member.medium.clone() { + MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.label"), + } }; + rsx!( li { ComboInput { size: ElementSize::Small, - value: ComboInputValue { dropdown: DropdownItem { key: match member.medium { - MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.label"), - MediumOptions::Email => translate!(i18, "onboard.invite.form.email.label"), - MediumOptions::Telegram => translate!(i18, "onboard.invite.form.phone.label"), - }, value: match member.medium.clone() { - MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.label"), - MediumOptions::Email => translate!(i18, "onboard.invite.form.email.label"), - MediumOptions::Telegram => translate!(i18, "onboard.invite.form.phone.label"), - } }, input: member.account.clone() }, + value: ComboInputValue { + option: ComboInputOption::Dropdown(dropdown_item), + input: member.account.clone() + }, placeholder: match member.medium { MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.placeholder"), - MediumOptions::Email => translate!(i18, "onboard.invite.form.email.placeholder"), - MediumOptions::Telegram => translate!(i18, "onboard.invite.form.phone.placeholder"), }, on_change: move |event: ComboInputValue| { - log::info!("{:?}", event.dropdown.key); - let medium = match event.dropdown.key.as_str() { - "Wallet" => MediumOptions::Wallet, - "Email" => MediumOptions::Email, - "Telegram" => MediumOptions::Telegram, + let medium = match event.option { + ComboInputOption::Dropdown(value) => { + match value.key.as_str() { + "Wallet" => MediumOptions::Wallet, + _ => todo!() + } + }, _ => todo!() }; if let ActionItem::AddMembers(ref mut meta) = initiative.get_action(index) { @@ -156,9 +159,99 @@ pub fn InitiativeActions() -> Element { } ) }, - _ => { + ActionItem::KusamaTreasury(meta) => { rsx!( - span {""} + ul { class: "form__inputs form__inputs--combo", + p { class: "form__inputs__disclaimer", + {translate!(i18, "initiative.steps.actions.kusama_treasury.disclaimer.period_1")} + if meta.periods.len() > 1 { + {translate!(i18, "initiative.steps.actions.kusama_treasury.disclaimer.period_n")} + } + } + { + meta.periods.iter().enumerate().map(|(index_meta, period)| { + let option = if index_meta == 0 { + ComboInputOption::None + } else { + ComboInputOption::Date(period.date.clone()) + }; + + rsx!( + li { + ComboInput { + size: ElementSize::Small, + value: ComboInputValue { + option, + input: (period.amount / KUSAMA_PRECISION_DECIMALS).to_string() + }, + error: if period.amount <= 0 { + Some(translate!(i18, "initiative.steps.actions.kusama_treasury.error")) + } else { + None + }, + placeholder: translate!(i18, "initiative.steps.actions.kusama_treasury.placeholder"), + on_change: move |event: ComboInputValue| { + let date = match event.option { + ComboInputOption::Date(value) => { + value + }, + ComboInputOption::None => { + "".into() + } + _ => todo!() + }; + if let ActionItem::KusamaTreasury(ref mut meta) = initiative.get_action(index) { + // Scale amount + let amount = event.input.parse::().unwrap_or(0.0); + let scaled_amount = amount * KUSAMA_PRECISION_DECIMALS as f64; + meta.periods[index_meta] = KusamaTreasury { date, amount: scaled_amount as u64 }; + initiative.update_action(index, ActionItem::KusamaTreasury(meta.clone())); + } + } + } + IconButton { + variant: Variant::Round, + size: ElementSize::Small, + class: "button--avatar", + body: rsx!( + Icon { + icon: MinusCircle, + height: 24, + width: 24, + fill: "var(--state-primary-active)" + } + ), + on_click: move |_| { + if let ActionItem::KusamaTreasury(ref mut meta) = initiative.get_action(index) { + meta.periods.remove(index_meta); + initiative.update_action(index, ActionItem::KusamaTreasury(meta.clone())); + } + } + } + } + ) + }) + } + IconButton { + variant: Variant::Round, + size: ElementSize::Small, + class: "button--avatar", + body: rsx!( + Icon { + icon: AddPlus, + height: 24, + width: 24, + fill: "var(--state-primary-active)" + } + ), + on_click: move |_| { + if let ActionItem::KusamaTreasury(ref mut meta) = initiative.get_action(index) { + meta.add_period(KusamaTreasury::default()); + initiative.update_action(index, ActionItem::KusamaTreasury(meta.clone())); + } + } + } + } ) } } diff --git a/src/components/molecules/initiative/info.rs b/src/components/molecules/initiative/info.rs index 099129b..5af195e 100644 --- a/src/components/molecules/initiative/info.rs +++ b/src/components/molecules/initiative/info.rs @@ -3,21 +3,17 @@ use dioxus_std::{i18n::use_i18, translate}; use crate::{ components::atoms::{ - button::Variant, dropdown::ElementSize, input_tags::InputTagsEvent, markdown::MarkdownEvent, Button, Input, InputTags, Markdown - }, - hooks::{ - use_initiative::use_initiative, use_notification::use_notification, - use_onboard::use_onboard, use_spaces_client::use_spaces_client, + dropdown::ElementSize, input_tags::InputTagsEvent, markdown::MarkdownEvent, Input, + InputTags, Markdown, }, + hooks::{use_initiative::use_initiative, use_onboard::use_onboard}, }; #[component] pub fn InitiativeInfo(error: bool) -> Element { let i18 = use_i18(); - let mut onboard = use_onboard(); + let onboard = use_onboard(); let mut initiative = use_initiative(); - let mut notification = use_notification(); - let spaces_client = use_spaces_client(); let mut name_maxlength = use_signal(|| 24); @@ -43,10 +39,10 @@ pub fn InitiativeInfo(error: bool) -> Element { None } } else { None }, - maxlength: name_maxlength(), + maxlength: 150, required: true, on_input: move |event: Event| { - if event.value().as_bytes().len() < 24usize { + if event.value().len() < 150 { initiative.info_mut().with_mut(|info| info.name = event.value()); } else { name_maxlength.set(event.value().chars().count().try_into().expect("Should convert usize into u8") ); @@ -86,7 +82,7 @@ pub fn InitiativeInfo(error: bool) -> Element { InputTags { message: initiative.get_info().categories.join(","), size: ElementSize::Small, - placeholder: {translate!(i18, "initiative.steps.info.categories.placeholder")}, + placeholder: translate!(i18, "initiative.steps.info.categories.placeholder"), error: if error { if onboard.get_basics().industry.is_empty() { Some(translate!(i18, "errors.form.not_empty")) @@ -97,7 +93,6 @@ pub fn InitiativeInfo(error: bool) -> Element { maxlength: 5, required: true, on_input: move |event: InputTagsEvent| { - log::info!("tags: {:?}", event.tags); initiative.info_mut().with_mut(|info| info.categories = event.tags); }, on_keypress: move |_| {}, diff --git a/src/components/molecules/onboarding/invite.rs b/src/components/molecules/onboarding/invite.rs index b9724b1..9ba14ef 100644 --- a/src/components/molecules/onboarding/invite.rs +++ b/src/components/molecules/onboarding/invite.rs @@ -3,7 +3,7 @@ use dioxus_std::{i18n::use_i18, translate}; use crate::{ components::atoms::{ - combo_input::ComboInputValue, + combo_input::{ComboInputOption, ComboInputValue}, dropdown::{DropdownItem, ElementSize}, icon_button::Variant, AddPlus, ComboInput, Icon, IconButton, MinusCircle, Title, @@ -47,30 +47,31 @@ pub fn OnboardingInvite() -> Element { ul { class: "form__inputs", { members_lock.iter().enumerate().map(|(index, member)| { + let x = DropdownItem { key: match member.medium { + MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.label"), + }, value: match member.medium.clone() { + MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.label"), + } }; + rsx!( li { ComboInput { size: ElementSize::Big, - value: ComboInputValue { dropdown: DropdownItem { key: match member.medium { - MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.label"), - MediumOptions::Email => translate!(i18, "onboard.invite.form.email.label"), - MediumOptions::Telegram => translate!(i18, "onboard.invite.form.phone.label"), - }, value: match member.medium.clone() { - MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.label"), - MediumOptions::Email => translate!(i18, "onboard.invite.form.email.label"), - MediumOptions::Telegram => translate!(i18, "onboard.invite.form.phone.label"), - } }, input: member.account.clone() }, + value: ComboInputValue { + option: ComboInputOption::Dropdown(x), + input: member.account.clone() + }, placeholder: match member.medium { MediumOptions::Wallet => translate!(i18, "onboard.invite.form.wallet.placeholder"), - MediumOptions::Email => translate!(i18, "onboard.invite.form.email.placeholder"), - MediumOptions::Telegram => translate!(i18, "onboard.invite.form.phone.placeholder"), }, on_change: move |event: ComboInputValue| { - log::info!("{:?}", event.dropdown.key); - let medium = match event.dropdown.key.as_str() { - "Wallet" => MediumOptions::Wallet, - "Email" => MediumOptions::Email, - "Telegram" => MediumOptions::Telegram, + let medium = match event.option { + ComboInputOption::Dropdown(value) => { + match value.key.as_str() { + "Wallet" => MediumOptions::Wallet, + _ => todo!() + } + }, _ => todo!() }; diff --git a/src/hooks/use_initiative.rs b/src/hooks/use_initiative.rs index 65b7176..2e0c639 100644 --- a/src/hooks/use_initiative.rs +++ b/src/hooks/use_initiative.rs @@ -14,8 +14,6 @@ pub struct InfoForm { pub enum MediumOptions { #[default] Wallet, - Telegram, - Email, } #[derive(PartialEq, Clone, Default, Deserialize, Serialize, Debug)] @@ -27,9 +25,15 @@ pub struct MemberItem { pub type Members = Vec; #[derive(PartialEq, Clone, Default, Deserialize, Serialize, Debug)] -pub struct Treasury { - pub amount: u128, - pub dest: String, +pub struct KusamaTreasury { + pub date: String, + pub amount: u64, +} + +#[derive(PartialEq, Clone, Default, Deserialize, Serialize, Debug)] +pub struct KusamaTreasuryPeriod { + pub blocks: Option, + pub amount: u64, } #[derive(PartialEq, Clone, Debug, Deserialize, Serialize, Default)] @@ -59,10 +63,40 @@ impl AddMembersAction { } } +pub type KusamaTreasuryPeriods = Vec; + +#[derive(PartialEq, Clone, Debug, Deserialize, Serialize, Default)] +pub struct KusamaTreasuryAction { + pub periods: KusamaTreasuryPeriods, +} + +impl KusamaTreasuryAction { + pub fn add_period(&mut self, period: KusamaTreasury) { + self.periods.push(period); + } + + pub fn update_period(&mut self, index: usize, period: KusamaTreasury) { + if index < self.periods.len() { + self.periods[index] = period; + } else { + println!("Index out of bounds."); + } + } + + pub fn remove_period(&mut self, index: usize) { + if index < self.periods.len() { + self.periods.remove(index); + } else { + println!("Index out of bounds."); + } + } +} + #[derive(PartialEq, Clone, Deserialize, Serialize, Debug)] #[serde(tag = "action_type")] pub enum ActionItem { AddMembers(AddMembersAction), + KusamaTreasury(KusamaTreasuryAction), } impl ActionItem { @@ -72,12 +106,17 @@ impl ActionItem { key: "AddMembers".to_string(), value: "Add Members".to_string(), }, + ActionItem::KusamaTreasury(_) => DropdownItem { + key: "KusamaTreasury".to_string(), + value: "Kusama Treasury".to_string(), + }, } } fn to_option(option: String) -> ActionItem { match &*option { "AddMembers" => ActionItem::AddMembers(AddMembersAction::default()), + "KusamaTreasury" => ActionItem::KusamaTreasury(KusamaTreasuryAction::default()), _ => todo!(), } } @@ -85,6 +124,7 @@ impl ActionItem { fn get_options() -> Vec { vec![ ActionItem::AddMembers(AddMembersAction::default()).option(), + ActionItem::KusamaTreasury(KusamaTreasuryAction::default()).option(), ] } } diff --git a/src/hooks/use_onboard.rs b/src/hooks/use_onboard.rs index f8b3480..f3a063e 100644 --- a/src/hooks/use_onboard.rs +++ b/src/hooks/use_onboard.rs @@ -24,8 +24,6 @@ pub struct ManagementForm { pub enum MediumOptions { #[default] Wallet, - Telegram, - Email, } #[derive(Clone, Default, Debug)] @@ -45,7 +43,6 @@ pub fn use_onboard() -> UseOnboardState { let basics = consume_context::>(); let management = consume_context::>(); let invitations = consume_context::>(); - let name = consume_context::>(); use_hook(|| UseOnboardState { inner: UseOnboardInner { diff --git a/src/hooks/use_startup.rs b/src/hooks/use_startup.rs index 11f49d1..e92da60 100644 --- a/src/hooks/use_startup.rs +++ b/src/hooks/use_startup.rs @@ -7,7 +7,7 @@ use super::{ use_accounts::{Account, IsDaoOwner}, use_attach::AttachFile, use_communities::{Communities, Community}, - use_initiative::{ActionsForm, CommunityInitiative, ConfirmationForm, InfoForm, SettingsForm}, + use_initiative::{ActionsForm, ConfirmationForm, InfoForm, SettingsForm}, use_notification::NotificationItem, use_onboard::{BasicsForm, InvitationForm, ManagementForm}, use_paginator::Paginator, @@ -48,7 +48,7 @@ pub fn use_startup() { use_context_provider::>(|| Signal::new(ActionsForm::default())); use_context_provider::>(|| Signal::new(SettingsForm::default())); use_context_provider::>(|| Signal::new(ConfirmationForm::default())); - + use_context_provider::>(|| Signal::new(TimestampValue(0))); use_context_provider::>(|| Signal::new(IsTimestampHandled(false))); diff --git a/src/hooks/use_tooltip.rs b/src/hooks/use_tooltip.rs index 0d297eb..19fded9 100644 --- a/src/hooks/use_tooltip.rs +++ b/src/hooks/use_tooltip.rs @@ -26,7 +26,6 @@ impl UseTooltipState { } pub fn handle_tooltip(&mut self, item: TooltipItem) { - let mut this = self.clone(); let mut inner = self.inner.clone(); *inner.write() = item; } diff --git a/src/lib.rs b/src/lib.rs index d92bf44..6ffaf4a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -59,4 +59,8 @@ pub mod services { pub mod preimage; pub mod timestamp; } + + pub mod kusama { + pub mod system; + } } diff --git a/src/locales/en-US.json b/src/locales/en-US.json index 619c574..926049d 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -106,7 +106,15 @@ } }, "actions": { - "label": "Actions" + "label": "Actions", + "kusama_treasury": { + "disclaimer": { + "period_1": "The delivery of resources from the treasury will be made instantly once the proposal is approved.", + "period_n": "\nImportant: The resources for the other periods will be delivered on the dates established for each one." + }, + "error": "Must be greater than 0", + "placeholder": "Delivery date" + } }, "settings": { "label": "Settings" diff --git a/src/locales/es-ES.json b/src/locales/es-ES.json index 792e737..e7c647a 100644 --- a/src/locales/es-ES.json +++ b/src/locales/es-ES.json @@ -101,7 +101,15 @@ } }, "actions": { - "label": "Acciones" + "label": "Acciones", + "kusama_treasury": { + "disclaimer": { + "period_1": "La entrega de recursos por parte del tesoro se realizará instantáneamente, una vez la propuesta sea aprobada.", + "period_n": "\nImportante: Los recursos de los demás periodos serán entregados en las fechas establecidas para cada uno." + }, + "error": "Debe ser mayor a 0", + "placeholder": "Fecha de entrega" + } }, "settings": { "label": "Configuraciones" diff --git a/src/main.rs b/src/main.rs index 5042bcf..d9669fa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,7 +12,6 @@ use virto_communities::{ use_notification::{use_notification, NotificationHandler}, use_session::{use_session, UserSession}, use_startup::use_startup, - use_theme::use_theme, use_timestamp::{use_timestamp, IsTimestampHandled, TimestampValue}, use_tooltip::use_tooltip, }, diff --git a/src/pages/dashboard.rs b/src/pages/dashboard.rs index f910771..14a36b1 100644 --- a/src/pages/dashboard.rs +++ b/src/pages/dashboard.rs @@ -17,15 +17,14 @@ use crate::{ use_accounts::use_accounts, use_notification::use_notification, use_our_navigator::use_our_navigator, + use_session::use_session, use_tooltip::{use_tooltip, TooltipItem}, }, middlewares::{is_chain_available::is_chain_available, is_dao_owner::is_dao_owner}, - pages::route::Route, - services::kreivo::community_memberships::get_communities_by_member, + pages::{onboarding::convert_to_jsvalue, route::Route}, services::kreivo::{ - community_memberships::{collection, item}, + community_memberships::{collection, get_communities_by_member, item}, community_track::{tracks, tracksIds}, - identity::{identityOf, superOf}, }, }; @@ -54,9 +53,7 @@ pub fn Dashboard() -> Element { let mut notification = use_notification(); let mut tooltip = use_tooltip(); let nav = use_our_navigator(); - let accounts = use_accounts(); - - let header_handled = consume_context::>(); + let session = use_session(); let mut current_page = use_signal::(|| 1); let mut search_word = use_signal::(|| String::new()); @@ -71,48 +68,40 @@ pub fn Dashboard() -> Element { let mut communities_by_address = use_signal::>(|| vec![]); let mut filtered_communities = use_signal::>(|| vec![]); - let get_communities = use_coroutine(move |mut rx: UnboundedReceiver<()>| async move { - while let Some(_) = rx.next().await { - tooltip.handle_tooltip(TooltipItem { - title: translate!(i18, "dao.tips.loading.title"), - body: translate!(i18, "dao.tips.loading.description"), - show: true, - }); + use_coroutine(move |_: UnboundedReceiver<()>| async move { + tooltip.handle_tooltip(TooltipItem { + title: translate!(i18, "dao.tips.loading.title"), + body: translate!(i18, "dao.tips.loading.description"), + show: true, + }); - let Some(account) = accounts.get_account() else { - log::info!("error here by account"); - notification.handle_error(&translate!(i18, "errors.communities.query_failed")); - tooltip.hide(); - return; - }; + let Some(session) = session.get() else { + log::info!("error here by account"); + notification.handle_error(&translate!(i18, "errors.communities.query_failed")); + tooltip.hide(); + return; + }; - let Ok(address) = sp_core::sr25519::Public::from_str(&account.address()) else { - log::info!("error here by address"); - notification.handle_error(&translate!(i18, "errors.wallet.account_address")); - tooltip.hide(); - return; - }; + let Ok(address) = sp_core::sr25519::Public::from_str(&session.address) else { + log::info!("error here by address"); + notification.handle_error(&translate!(i18, "errors.wallet.account_address")); + tooltip.hide(); + return; + }; - let Ok(community_tracks) = get_communities_by_member(&address.0).await else { - log::info!("error here by memeber"); - notification.handle_error(&translate!(i18, "errors.communities.query_failed")); - tooltip.hide(); - return; - }; + let Ok(community_tracks) = get_communities_by_member(&address.0).await else { + log::info!("error here by memeber"); + notification.handle_error(&translate!(i18, "errors.communities.query_failed")); + tooltip.hide(); + return; + }; - communities_by_address.set(community_tracks.clone()); - filtered_communities.set(community_tracks.clone()); + communities_by_address.set(community_tracks.clone()); + filtered_communities.set(community_tracks.clone()); - tooltip.hide(); - } + tooltip.hide(); }); - use_effect(use_reactive(&header_handled(), move |_| { - if header_handled() { - get_communities.send(()); - } - })); - rsx! { div { class: "dashboard grid-main", @@ -132,7 +121,6 @@ pub fn Dashboard() -> Element { div { class: "head__actions", SearchInput { message: search_word(), - itype: InputType::Search, placeholder: translate!(i18, "dashboard.cta_header.search"), error: None, on_input: move |event: Event| { diff --git a/src/pages/explore.rs b/src/pages/explore.rs index 5903d53..62b470b 100644 --- a/src/pages/explore.rs +++ b/src/pages/explore.rs @@ -29,9 +29,7 @@ pub fn Explore() -> Element { let i18 = use_i18(); let mut notification = use_notification(); let mut tooltip = use_tooltip(); - let mut nav = use_our_navigator(); - - let header_handled = consume_context::>(); + let nav = use_our_navigator(); let mut current_page = use_signal::(|| 1); let mut search_word = use_signal::(|| String::new()); @@ -41,7 +39,7 @@ pub fn Explore() -> Element { value: translate!(i18, "dashboard.tabs.all"), }]; - let mut tab_value = use_signal::(|| String::from("all")); + let tab_value = use_signal::(|| String::from("all")); let mut communities_ids = use_signal::>(|| vec![]); let mut communities = use_signal::>(|| vec![]); @@ -90,7 +88,7 @@ pub fn Explore() -> Element { Err(_) => 0u16, }; - let mut community = Community { + let community = Community { id: *track, icon: None, name: String::from_utf8_lossy(filtered_name).to_string(), @@ -107,18 +105,7 @@ pub fn Explore() -> Element { } }); - // let mut items = vec![]; - // for item in tab_items.into_iter() { - // items.push(rsx!(Tab { - // text: item.value, - // on_click: move |_| { - // // tab_value.set(item.k); - // }, - // })) - // } - - let get_communities = use_coroutine(move |mut rx: UnboundedReceiver<()>| async move { - while let Some(_) = rx.next().await { + use_coroutine(move |_: UnboundedReceiver<()>| async move { tooltip.handle_tooltip(TooltipItem { title: translate!(i18, "dashboard.tips.loading.title"), body: translate!(i18, "dashboard.tips.loading.description"), @@ -133,15 +120,8 @@ pub fn Explore() -> Element { communities_ids.set(community_tracks.communities); get_community_track.send(current_page()); - } }); - use_effect(use_reactive(&header_handled(), move |_| { - if header_handled() { - get_communities.send(()) - } - })); - rsx! { div { class: "dashboard grid-main", @@ -161,7 +141,6 @@ pub fn Explore() -> Element { div { class: "head__actions", SearchInput { message: search_word(), - itype: InputType::Search, placeholder: translate!(i18, "dashboard.cta_header.search"), error: None, on_input: move |event: Event| { diff --git a/src/pages/initiative.rs b/src/pages/initiative.rs index 0e78ac9..9be81b4 100644 --- a/src/pages/initiative.rs +++ b/src/pages/initiative.rs @@ -1,10 +1,9 @@ -use std::{ops::Deref, vec}; +use std::str::FromStr; -use blake2::{digest::consts::U32, Blake2b, Blake2s256, Digest}; +use chrono::{DateTime, Duration, NaiveDate, Utc}; use dioxus::prelude::*; use dioxus_std::{i18n::use_i18, translate}; -use futures_util::{StreamExt, TryFutureExt}; -use serde::Serialize; +use futures_util::TryFutureExt; use wasm_bindgen::prelude::*; use crate::{ @@ -13,15 +12,12 @@ use crate::{ button::Variant, dropdown::ElementSize, icon_button::Variant as IconButtonVariant, Arrow, Button, Icon, IconButton, Step, StepCard, }, - molecules::{ - InitiativeActions, InitiativeConfirmation, InitiativeInfo, InitiativeSettings, - }, + molecules::{InitiativeActions, InitiativeInfo}, }, hooks::{ - use_accounts::use_accounts, use_initiative::{ use_initiative, ActionItem, InitiativeData, InitiativeInfoContent, - InitiativeInitContent, + InitiativeInitContent, KusamaTreasury, KusamaTreasuryPeriod, }, use_notification::use_notification, use_our_navigator::use_our_navigator, @@ -30,7 +26,10 @@ use crate::{ use_tooltip::{use_tooltip, TooltipItem}, }, pages::onboarding::convert_to_jsvalue, - services::kreivo::community_referenda::referendum_count, + services::{ + kreivo::{community_referenda::referendum_count, timestamp::now}, + kusama::system::number, + }, }; #[derive(Clone, Debug)] @@ -42,57 +41,35 @@ pub enum InitiativeStep { None, } -#[derive(Serialize)] -struct AccountMembership { - id: String, - membership_id: u32, -} - #[wasm_bindgen] extern "C" { - #[wasm_bindgen(catch, js_namespace = window, js_name = topupThenInitiativeAddMembers)] - async fn topup_then_initiative_add_members( + #[wasm_bindgen(catch, js_namespace = window, js_name = topupThenInitiativeSetup)] + pub async fn topup_then_initiative_setup( community_id: u16, initiative_id: u16, - membership_accounts_add: JsValue, - membership_accounts_remove: JsValue, room_id: JsValue, remark: JsValue, + membership_accounts_add: JsValue, + membership_accounts_remove: JsValue, + periods_treasury_request: JsValue, ) -> Result; } +const BLOCK_TIME_IN_SECONDS: i64 = 6; + #[component] pub fn Initiative(id: u16) -> Element { let i18 = use_i18(); let mut initiative = use_initiative(); - let mut accounts = use_accounts(); - let mut session = use_session(); - let mut nav = use_our_navigator(); + let session = use_session(); + let nav = use_our_navigator(); let mut tooltip = use_tooltip(); let mut notification = use_notification(); let spaces_client = use_spaces_client(); let mut onboarding_step = use_signal::(|| InitiativeStep::Info); - let mut onboarding_steps = use_signal::>(|| { - vec![ - InitiativeStep::Info, - InitiativeStep::Actions, - InitiativeStep::Settings, - InitiativeStep::Confirmation, - InitiativeStep::None, - ] - }); - let mut handle_required_inputs = use_signal::(|| false); - let get_account = move || { - let Some(user_session) = session.get() else { - return None; - }; - - accounts.get_one(user_session.account_id) - }; - use_before_render(move || { initiative.default(); }); @@ -133,7 +110,7 @@ pub fn Initiative(id: u16) -> Element { } div { class: "steps__wrapper", StepCard { - name: {translate!(i18, "initiative.steps.info.label")}, + name: translate!(i18, "initiative.steps.info.label"), checked: matches!(*onboarding_step.read(), InitiativeStep::Info ), body: rsx!( div { class: "step-card__info", @@ -176,7 +153,7 @@ pub fn Initiative(id: u16) -> Element { }, } StepCard { - name: {translate!(i18, "initiative.steps.actions.label")}, + name: translate!(i18, "initiative.steps.actions.label"), checked: matches!(*onboarding_step.read(), InitiativeStep::Actions ), body: rsx!( div { class: "step-card__info", @@ -273,13 +250,6 @@ pub fn Initiative(id: u16) -> Element { let room_id = response_bot.get_id(); - let mut hasher = Blake2b::::new(); - hasher.update(room_id.clone()); - let res = hasher.finalize(); - let res = res.deref(); - - let room_to_blake = format!("0x{}", hex::encode(res)); - let add_members_action = initiative.get_actions().into_iter().filter_map(|action| { match action { ActionItem::AddMembers(add_members_action) => { @@ -296,6 +266,48 @@ pub fn Initiative(id: u16) -> Element { let add_members_action = add_members_action.into_iter().flat_map(|v| v.into_iter()).collect::>(); + log::info!("add_members_action: {:?}", add_members_action); + + let current_block = number().await.map_err(|_| { + log::warn!("Failed to get last block kusama"); + translate!(i18, "errors.form.initiative_creation") + })?; + + let now_kusama = now().await.map_err(|_| { + log::warn!("Failed to get timestamp kusama"); + translate!(i18, "errors.form.initiative_creation") + })?; + + log::info!("{} {}", current_block, now_kusama); + + let treasury_action = initiative.get_actions().into_iter().filter_map(|action| { + match action { + ActionItem::KusamaTreasury(treasury_action) => { + Some(treasury_action.periods.clone() + .into_iter() + .filter_map(|period|{ + if period.amount > 0 { + Some(convert_treasury_to_period(period, current_block, now_kusama)) + } else { + None + } + }) + .collect::>()) + }, + _ => None + } + }).collect::>>(); + + let treasury_action = treasury_action.into_iter().flat_map(|v| v.into_iter()).collect::>(); + + log::info!("treasury {:?}", treasury_action); + + let treasury_action = convert_to_jsvalue(&treasury_action) + .map_err(|_| { + log::warn!("Malformed membership accounts add"); + translate!(i18, "errors.form.initiative_creation") + })?; + let membership_accounts_add = convert_to_jsvalue(&add_members_action) .map_err(|_| { log::warn!("Malformed membership accounts add"); @@ -315,23 +327,24 @@ pub fn Initiative(id: u16) -> Element { })?; let remark = - convert_to_jsvalue(&room_to_blake).map_err(|_| { + convert_to_jsvalue(&initiative.get_info().name).map_err(|_| { log::warn!("Malformed remark"); translate!(i18, "errors.form.initiative_creation") })?; - let response = topup_then_initiative_add_members( + let response = topup_then_initiative_setup( id, last_initiative, - membership_accounts_add, - membership_accounts_remove, room_id, remark, + membership_accounts_add, + membership_accounts_remove, + treasury_action, ) .await; - log::info!("response initiative: {:?}", response); - tooltip.hide(); + // log::info!("response initiative: {:?}", response); + // tooltip.hide(); let path = format!("/dao/{id}/initiatives"); nav.push(vec![], &path); @@ -350,3 +363,63 @@ pub fn Initiative(id: u16) -> Element { } } } + +fn calculate_future_block( + current_block: u32, + current_date_millis: u64, + future_date_str: &str, +) -> u32 { + let future_date_naive = NaiveDate::from_str(future_date_str).expect("Fecha futura no válida"); + let future_date = DateTime::::from_utc(future_date_naive.and_hms(0, 0, 0), Utc); + + let current_date = DateTime::::from_utc( + chrono::NaiveDateTime::from_timestamp( + (current_date_millis / 1000).try_into().unwrap(), + ((current_date_millis % 1000) * 1_000_000) as u32, + ), + Utc, + ); + + let elapsed_time_in_seconds = (future_date - current_date).num_seconds(); + let blocks_to_add = elapsed_time_in_seconds / BLOCK_TIME_IN_SECONDS; + (current_block + blocks_to_add as u32).into() +} + +fn calculate_date_from_block( + current_block: u32, + current_date_millis: u64, + target_block: u32, +) -> DateTime { + let current_date = DateTime::::from_utc( + chrono::NaiveDateTime::from_timestamp( + (current_date_millis / 1000).try_into().unwrap(), + ((current_date_millis % 1000) * 1_000_000) as u32, + ), + Utc, + ); + + let blocks_to_add = target_block as i64 - current_block as i64; + let elapsed_time_in_seconds = blocks_to_add * BLOCK_TIME_IN_SECONDS; + current_date + Duration::seconds(elapsed_time_in_seconds) +} + +fn convert_treasury_to_period( + treasury: KusamaTreasury, + current_block: u32, + current_date_millis: u64, +) -> KusamaTreasuryPeriod { + if treasury.date != "" { + let future_block = + calculate_future_block(current_block, current_date_millis, &treasury.date); + KusamaTreasuryPeriod { + blocks: Some(future_block as u64), + amount: treasury.amount, + } + } else { + KusamaTreasuryPeriod { + blocks: None, + amount: treasury.amount, + } + } +} + diff --git a/src/pages/initiatives.rs b/src/pages/initiatives.rs index c2701c9..f5de7db 100644 --- a/src/pages/initiatives.rs +++ b/src/pages/initiatives.rs @@ -1,14 +1,12 @@ use dioxus::prelude::*; use dioxus_std::{i18n::use_i18, translate}; -use futures_util::StreamExt; use serde::{Deserialize, Serialize}; use crate::{ components::{ atoms::{ - avatar::Variant as AvatarVariant, dropdown::ElementSize, icon_button::Variant, - input::InputType, AddPlus, ArrowLeft, ArrowRight, Avatar, Badge, Chat, CircleCheck, - Close, Icon, IconButton, SearchInput, StopSign, Suitcase, Tab, UserGroup, + dropdown::ElementSize, AddPlus, ArrowLeft, ArrowRight, Badge, CircleCheck, Icon, + IconButton, SearchInput, StopSign, Tab, }, molecules::tabs::TabItem, }, @@ -20,13 +18,9 @@ use crate::{ use_spaces_client::use_spaces_client, use_tooltip::{use_tooltip, TooltipItem}, }, - middlewares::is_dao_owner::is_dao_owner, services::kreivo::{ - community_referenda::{ - get_initiatives_by_community, metadata_of, referendum_count, referendum_info_for, - track_queue, Ongoing, - }, - preimage::preimage_for, + community_referenda::{metadata_of, referendum_count, referendum_info_for, Ongoing}, + preimage::{preimage_for, request_status_for}, }, }; @@ -42,14 +36,10 @@ pub struct InitiativeWrapper { #[component] pub fn Initiatives(id: u16) -> Element { let i18 = use_i18(); - let mut initiative = use_initiative(); - let mut notification = use_notification(); let mut tooltip = use_tooltip(); - let mut nav = use_our_navigator(); - let accounts = use_accounts(); + let nav = use_our_navigator(); let spaces_client = use_spaces_client(); - let header_handled = consume_context::>(); let mut initiative_wrapper = consume_context::>>(); let mut current_page = use_signal::(|| 1); @@ -60,83 +50,80 @@ pub fn Initiatives(id: u16) -> Element { value: translate!(i18, "dao.tabs.all"), }]; - let mut tab_value = use_signal::(|| String::from("all")); + let tab_value = use_signal::(|| String::from("all")); - let mut initiatives_ids = use_signal::>(|| vec![]); + let initiatives_ids = use_signal::>(|| vec![]); let mut initiatives = use_signal::>(|| vec![]); let mut filtered_initiatives = use_signal::>(|| vec![]); - let get_initiative_info = use_coroutine(move |mut rx: UnboundedReceiver<()>| async move { - while let Some(f) = rx.next().await { - // Temporal value for FIFO ongoing initiative - let from = 20; + use_coroutine(move |_: UnboundedReceiver<()>| async move { + tooltip.handle_tooltip(TooltipItem { + title: translate!(i18, "dao.tips.loading.title"), + body: translate!(i18, "dao.tips.loading.description"), + show: true, + }); + // Temporal value for FIFO ongoing initiative + let from = 29; - let count = referendum_count() - .await - .expect("Should get referendum count"); + let count = referendum_count() + .await + .expect("Should get referendum count"); - for track in from..count { - let Ok(response) = referendum_info_for(track).await else { - continue; - }; + for track in from..count { + let Ok(response) = referendum_info_for(track).await else { + continue; + }; - if response.ongoing.origin.communities.community_id == id { - let name = format!("Ref: {:?}", track); - let mut init = InitiativeWrapper { - id: track, - info: InitiativeInfoContent { - name, - description: String::new(), - tags: vec![], - actions: vec![], - }, - ongoing: response.ongoing, - }; + if response.ongoing.origin.communities.community_id == id { + let name = format!("Ref: {:?}", track); + let mut init = InitiativeWrapper { + id: track, + info: InitiativeInfoContent { + name, + description: String::new(), + tags: vec![], + actions: vec![], + }, + ongoing: response.ongoing, + }; - let Ok(initiative_metadata) = metadata_of(track).await else { - initiatives.with_mut(|c| c.push(init)); - continue; - }; + log::info!("{:?}", metadata_of(track).await); + let Ok(initiative_metadata) = metadata_of(track).await else { + initiatives.with_mut(|c| c.push(init)); + continue; + }; - let initiative_metadata = format!("0x{}", hex::encode(initiative_metadata)); + let initiative_metadata = format!("0x{}", hex::encode(initiative_metadata)); - log::info!("{}", initiative_metadata); + let Ok(preimage_len) = request_status_for(&initiative_metadata).await else { + continue; + }; - let Ok(room_id_metadata) = preimage_for(&initiative_metadata, 35).await else { - initiatives.with_mut(|c| c.push(init)); - continue; - }; + let Ok(room_id_metadata) = preimage_for(&initiative_metadata, preimage_len).await + else { + initiatives.with_mut(|c| c.push(init)); + continue; + }; - log::info!("{}", room_id_metadata); + let Ok(response) = spaces_client + .get() + .get_initiative_by_id(&room_id_metadata) + .await + else { + initiatives.with_mut(|c| c.push(init)); + continue; + }; - let Ok(response) = spaces_client - .get() - .get_initiative_by_id(&room_id_metadata) - .await - else { - initiatives.with_mut(|c| c.push(init)); - continue; - }; + log::info!("{:?}", response.info); - init.info = response.info; + init.info = response.info; - initiatives.with_mut(|c| c.push(init)); - } + initiatives.with_mut(|c| c.push(init)); } - - tooltip.hide(); - filtered_initiatives.set(initiatives()); } - }); - - use_coroutine(move |_: UnboundedReceiver<()>| async move { - tooltip.handle_tooltip(TooltipItem { - title: translate!(i18, "dao.tips.loading.title"), - body: translate!(i18, "dao.tips.loading.description"), - show: true, - }); - get_initiative_info.send(()); + tooltip.hide(); + filtered_initiatives.set(initiatives()); }); rsx! { @@ -155,7 +142,6 @@ pub fn Initiatives(id: u16) -> Element { div { class: "head__actions", SearchInput { message: search_word(), - itype: InputType::Search, placeholder: translate!(i18, "dao.cta_header.search"), error: None, on_input: move |event: Event| { diff --git a/src/pages/vote.rs b/src/pages/vote.rs index f03de30..45824ea 100644 --- a/src/pages/vote.rs +++ b/src/pages/vote.rs @@ -25,7 +25,7 @@ use crate::{ services::kreivo::{ community_memberships::{get_communities_by_member, get_membership_id}, community_referenda::{metadata_of, referendum_info_for}, - preimage::preimage_for, + preimage::{preimage_for, request_status_for}, }, }; use wasm_bindgen::prelude::*; @@ -135,8 +135,6 @@ pub fn Vote(id: u16, initiativeid: u16) -> Element { let mut content = use_signal(|| String::new()); let mut can_vote = use_signal(|| false); - let header_handled = consume_context::>(); - let mut initiative_wrapper = consume_context::>>(); let cont = &*content.read(); @@ -204,9 +202,11 @@ pub fn Vote(id: u16, initiativeid: u16) -> Element { let initiative_metadata = format!("0x{}", hex::encode(initiative_metadata)); - log::info!("{}", initiative_metadata); + let Ok(preimage_len) = request_status_for(&initiative_metadata).await else { + continue; + }; - let Ok(room_id_metadata) = preimage_for(&initiative_metadata, 35).await else { + let Ok(room_id_metadata) = preimage_for(&initiative_metadata, preimage_len).await else { continue; }; diff --git a/src/services/kreivo/identity.rs b/src/services/kreivo/identity.rs index 3b436fe..78021ad 100644 --- a/src/services/kreivo/identity.rs +++ b/src/services/kreivo/identity.rs @@ -18,7 +18,6 @@ struct Raw { pub async fn superOf(account: &str) -> Result { let query = format!("wss://people-kusama-rpc.dwellir.com/identity/superOf/0x6d6f646c6b762f636d7479730200000000000000000000000000000000000000"); - // log::info!("query: {:#?}", query); let response = sube!(&query).await.map_err(|e| { log::info!("{:?}", e); ChainStateError::FailedQuery @@ -37,9 +36,8 @@ pub async fn superOf(account: &str) -> Result { } pub async fn identityOf(account: &str) -> Result { - let query = format!("ws://127.0.0.1:11004/identity/identityOf/{}", account); + let query = format!("wss://people-kusama-rpc.dwellir.com/identity/identityOf/{}", account); - log::info!("query: {:#?}", query); let response = sube!(&query) .await .map_err(|_| ChainStateError::FailedQuery)?; diff --git a/src/services/kreivo/preimage.rs b/src/services/kreivo/preimage.rs index 644310f..42a09b8 100644 --- a/src/services/kreivo/preimage.rs +++ b/src/services/kreivo/preimage.rs @@ -1,16 +1,9 @@ -use codec::Decode; -use serde::Deserialize; -use serde_json::{from_str, from_value, to_string, Value}; -use std::str::FromStr; use sube::{sube, Response}; use crate::services::kreivo::community_track::ChainStateError; -pub async fn preimage_for(hash: &str, len: u8) -> Result { - let query = format!( - "wss://kreivo.io/preimage/preimageFor/{}/{}", - hash, len - ); +pub async fn preimage_for(hash: &str, len: u32) -> Result { + let query = format!("wss://kreivo.io/preimage/preimageFor/{}/{}", hash, len); let response = sube!(&query) .await .map_err(|_| ChainStateError::FailedQuery)?; @@ -30,3 +23,28 @@ pub async fn preimage_for(hash: &str, len: u8) -> Result Result { + let query = format!("wss://kreivo.io/preimage/requestStatusFor/{}", hash); + let response = sube!(&query) + .await + .map_err(|_| ChainStateError::FailedQuery)?; + + let Response::Value(ref value) = response else { + return Err(ChainStateError::InternalError); + }; + + let Ok(value) = serde_json::to_value(&value) else { + return Err(ChainStateError::InternalError); + }; + + let response = value + .get("Unrequested") + .ok_or(ChainStateError::FailedDecode)?; + let len = response.get("len").ok_or(ChainStateError::FailedDecode)?; + + let len = + serde_json::from_value::(len.clone()).map_err(|_| ChainStateError::FailedDecode)?; + + Ok(len) +} diff --git a/src/services/kusama/system.rs b/src/services/kusama/system.rs new file mode 100644 index 0000000..dcdf134 --- /dev/null +++ b/src/services/kusama/system.rs @@ -0,0 +1,21 @@ +use sube::{sube, Response}; + +use crate::services::kreivo::communities::ChainStateError; + +pub async fn number() -> Result { + let query = format!("wss://kusama-rpc.dwellir.com/system/number"); + + let response = sube!(&query) + .await + .map_err(|_| ChainStateError::FailedQuery)?; + + let Response::Value(value) = response else { + return Err(ChainStateError::InternalError); + }; + + let value = serde_json::to_value(&value).map_err(|_| ChainStateError::FailedDecode)?; + let number = + serde_json::from_value::(value).map_err(|_| ChainStateError::FailedDecode)?; + + Ok(number) +} diff --git a/src/services/kusama/timestamp.rs b/src/services/kusama/timestamp.rs new file mode 100644 index 0000000..409031e --- /dev/null +++ b/src/services/kusama/timestamp.rs @@ -0,0 +1,21 @@ +use sube::{sube, Response}; + +use crate::services::kreivo::communities::ChainStateError; + +pub async fn now() -> Result { + let query = format!("wss://kusama-rpc.dwellir.com/timestamp/now"); + + let response = sube!(&query) + .await + .map_err(|_| ChainStateError::FailedQuery)?; + + let Response::Value(value) = response else { + return Err(ChainStateError::InternalError); + }; + + let value = serde_json::to_value(&value).map_err(|_| ChainStateError::FailedDecode)?; + let number = + serde_json::from_value::(value).map_err(|_| ChainStateError::FailedDecode)?; + + Ok(number) +}