@bitgo-beta/sdk-coin-icp 1.0.1-beta.1387 → 1.0.1-beta.1389
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/icp.d.ts.map +1 -1
- package/dist/src/icp.js +9 -4
- package/dist/test/unit/icp.js +29 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
package/dist/src/icp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icp.d.ts","sourceRoot":"","sources":["../../src/icp.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,+BAA+B,EAC/B,8BAA8B,EAC9B,QAAQ,EACR,SAAS,EAKT,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EAEjB,sBAAsB,EACtB,wBAAwB,EAGzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAsB,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtF,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAc,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG1C,OAAO,EAIL,YAAY,EAGZ,eAAe,EACf,mBAAmB,EAEnB,UAAU,EAEV,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,gCAAgC,EACjC,MAAM,aAAa,CAAC;AAMrB;;;;;;GAMG;AACH,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;IAIjB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAapF,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqC3E;;;;;;;OAOG;IACG,eAAe,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"icp.d.ts","sourceRoot":"","sources":["../../src/icp.ts"],"names":[],"mappings":"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"}
|
package/dist/src/icp.js
CHANGED
|
@@ -144,10 +144,15 @@ class Icp extends sdk_core_1.BaseCoin {
|
|
|
144
144
|
if (!extractedRootAddress || extractedRootAddress === address) {
|
|
145
145
|
throw new Error('memoId is required for wallet version 1 addresses');
|
|
146
146
|
}
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
// In the wallet.createAddress() verification flow, rootAddress is the wallet's
|
|
148
|
+
// memo-suffixed receiveAddress (e.g. 'root?memoId=3') for memo-based (walletVersion 1)
|
|
149
|
+
// wallets. Strip the memo so bare roots are compared and the bare root is
|
|
150
|
+
// what gets key-verified by verifyMPCWalletAddress.
|
|
151
|
+
const walletRootAddress = utils_1.default.validateMemoAndReturnRootAddress(rootAddress);
|
|
152
|
+
if (!walletRootAddress || extractedRootAddress.toLowerCase() !== walletRootAddress.toLowerCase()) {
|
|
153
|
+
throw new sdk_core_1.UnexpectedAddressError(`address validation failure: expected ${walletRootAddress} but got ${extractedRootAddress}`);
|
|
149
154
|
}
|
|
150
|
-
addressToVerify =
|
|
155
|
+
addressToVerify = walletRootAddress;
|
|
151
156
|
}
|
|
152
157
|
const indexToVerify = walletVersion === 1 ? 0 : params.index;
|
|
153
158
|
const result = await (0, sdk_core_1.verifyMPCWalletAddress)({ ...params, address: addressToVerify, index: indexToVerify, keyCurve: 'secp256k1' }, this.isValidAddress.bind(this), (pubKey) => utils_1.default.getAddressFromPublicKey(pubKey));
|
|
@@ -406,4 +411,4 @@ class Icp extends sdk_core_1.BaseCoin {
|
|
|
406
411
|
}
|
|
407
412
|
}
|
|
408
413
|
exports.Icp = Icp;
|
|
409
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbURBc0I4QjtBQUM5QixpREFBc0Y7QUFDdEYsa0RBQStDO0FBQy9DLGtEQUEwQjtBQUMxQixnRUFBcUM7QUFDckMsbUNBQTBDO0FBQzFDLDZEQUErQztBQUUvQyx1Q0FnQnFCO0FBQ3JCLCtFQUE0RTtBQUM1RSx3REFBZ0M7QUFDaEMseURBQStEO0FBQy9ELDZDQUEwQztBQUUxQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFB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QUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUEsa0NBQW9CLEVBQUMsR0FBYSxFQUFFLFNBQW1CLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUF0YkQsa0JBc2JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdCxcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgRWNkc2EsXG4gIEVDRFNBVXRpbHMsXG4gIEVudmlyb25tZW50cyxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgS2V5UGFpcixcbiAgTVBDQWxnb3JpdGhtLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25pbmdFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICB2ZXJpZnlNUENXYWxsZXRBZGRyZXNzLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucywgTmV0d29ya1R5cGUsIEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgUHJpbmNpcGFsIH0gZnJvbSAnQGRmaW5pdHkvcHJpbmNpcGFsJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoLCBIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIG1wYyBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5cbmltcG9ydCB7XG4gIEN1cnZlVHlwZSxcbiAgTEVER0VSX0NBTklTVEVSX0lELFxuICBURVNUTkVUX0xFREdFUl9DQU5JU1RFUl9JRCxcbiAgUGF5bG9hZHNEYXRhLFxuICBQVUJMSUNfTk9ERV9SRVFVRVNUX0VORFBPSU5ULFxuICBQdWJsaWNOb2RlU3VibWl0UmVzcG9uc2UsXG4gIFJlY292ZXJ5T3B0aW9ucyxcbiAgUmVjb3ZlcnlUcmFuc2FjdGlvbixcbiAgUk9PVF9QQVRILFxuICBTaWduYXR1cmVzLFxuICBTaWduaW5nUGF5bG9hZCxcbiAgSWNwVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHJhbnNhY3Rpb25IZXhQYXJhbXMsXG4gIFRzc1ZlcmlmeUljcEFkZHJlc3NPcHRpb25zLFxuICBVbnNpZ25lZFN3ZWVwUmVjb3ZlcnlUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IGF1ZGl0RWNkc2FQcml2YXRlS2V5IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgSWNwQWdlbnQgfSBmcm9tICcuL2xpYi9pY3BBZ2VudCc7XG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBJbnRlcm5ldCBDb21wdXRlciAoSUNQKSBjb2luLlxuICogRXh0ZW5kcyB0aGUgQmFzZUNvaW4gY2xhc3MgYW5kIHByb3ZpZGVzIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgSUNQLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaW50ZXJuZXRjb21wdXRlci5vcmcvfVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9pbnRlcm5ldGNvbXB1dGVyLm9yZy9kb2NzL2N1cnJlbnQvZGV2ZWxvcGVyLWRvY3MvZGVmaS9yb3NldHRhL2ljcF9yb3NldHRhL2RhdGFfYXBpL31cbiAqL1xuZXhwb3J0IGNsYXNzIEljcCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcblxuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEljcChiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2ljcCc7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2ljcCc7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZmFtaWx5O1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0ludGVybmV0IENvbXB1dGVyJztcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogVHJhbnNhY3Rpb25IZXhQYXJhbXMpOiBQcm9taXNlPEljcFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGF3YWl0IGZhY3RvcnkuZnJvbShwYXJhbXMudHJhbnNhY3Rpb25IZXgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgaWYgKHBhcmFtcy5zaWduYWJsZUhleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBnZW5lcmF0ZWRTaWduYWJsZUhleCA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0uaGV4X2J5dGVzO1xuICAgICAgaWYgKGdlbmVyYXRlZFNpZ25hYmxlSGV4ICE9PSBwYXJhbXMuc2lnbmFibGVIZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW5lcmF0ZWQgc2lnbmFibGVIZXggaXMgbm90IGVxdWFsIHRvIHBhcmFtcy5zaWduYWJsZUhleCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0eEhleCA9IHR4UHJlYnVpbGQ/LnR4SGV4O1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgY29uc3QgdHhIZXhQYXJhbXM6IFRyYW5zYWN0aW9uSGV4UGFyYW1zID0ge1xuICAgICAgdHJhbnNhY3Rpb25IZXg6IHR4SGV4LFxuICAgIH07XG5cbiAgICBpZiAodHhQcmVidWlsZC50eEluZm8gJiYgdHhQcmVidWlsZC50eEluZm8gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHhQcmVidWlsZC50eEluZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0eEhleFBhcmFtcy5zaWduYWJsZUhleCA9IHR4UHJlYnVpbGQudHhJbmZvO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24odHhIZXhQYXJhbXMpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHhQYXJhbXMucmVjaXBpZW50cykgJiYgdHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCA9PT0gMSwgJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG5cbiAgICAgIGNvbnN0IG91dHB1dCA9IGV4cGxhaW5lZFR4Lm91dHB1dHNbMF07XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuICAgICAgYXNzZXJ0KFxuICAgICAgICB0eXBlb2YgcmVjaXBpZW50LmFkZHJlc3MgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgdHlwZW9mIG91dHB1dC5hZGRyZXNzID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIG91dHB1dC5hZGRyZXNzID09PSByZWNpcGllbnQuYWRkcmVzcyAmJlxuICAgICAgICAgIEJpZ051bWJlcihvdXRwdXQuYW1vdW50KS5lcShCaWdOdW1iZXIocmVjaXBpZW50LmFtb3VudCkpLFxuICAgICAgICAnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhbiBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhpcyB3YWxsZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VHNzVmVyaWZ5SWNwQWRkcmVzc09wdGlvbnN9IHBhcmFtcyAtIFZlcmlmaWNhdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBUcnVlIGlmIGFkZHJlc3MgYmVsb25ncyB0byB3YWxsZXRcbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NFcnJvcn0gSWYgYWRkcmVzcyBmb3JtYXQgaXMgaW52YWxpZCBvciBkb2Vzbid0IG1hdGNoIGRlcml2ZWQgYWRkcmVzc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgaW52YWxpZCB3YWxsZXQgdmVyc2lvbiBvciBtaXNzaW5nIHBhcmFtZXRlcnNcbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFRzc1ZlcmlmeUljcEFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCByb290QWRkcmVzcywgd2FsbGV0VmVyc2lvbiB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgbGV0IGFkZHJlc3NUb1ZlcmlmeSA9IGFkZHJlc3M7XG4gICAgaWYgKHdhbGxldFZlcnNpb24gPT09IDEpIHtcbiAgICAgIGlmICghcm9vdEFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290QWRkcmVzcyBpcyByZXF1aXJlZCBmb3Igd2FsbGV0IHZlcnNpb24gMScpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXh0cmFjdGVkUm9vdEFkZHJlc3MgPSB1dGlscy52YWxpZGF0ZU1lbW9BbmRSZXR1cm5Sb290QWRkcmVzcyhhZGRyZXNzKTtcbiAgICAgIGlmICghZXh0cmFjdGVkUm9vdEFkZHJlc3MgfHwgZXh0cmFjdGVkUm9vdEFkZHJlc3MgPT09IGFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZW1vSWQgaXMgcmVxdWlyZWQgZm9yIHdhbGxldCB2ZXJzaW9uIDEgYWRkcmVzc2VzJyk7XG4gICAgICB9XG4gICAgICBpZiAoZXh0cmFjdGVkUm9vdEFkZHJlc3MudG9Mb3dlckNhc2UoKSAhPT0gcm9vdEFkZHJlc3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihcbiAgICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkICR7cm9vdEFkZHJlc3N9IGJ1dCBnb3QgJHtleHRyYWN0ZWRSb290QWRkcmVzc31gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhZGRyZXNzVG9WZXJpZnkgPSByb290QWRkcmVzcztcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleFRvVmVyaWZ5ID0gd2FsbGV0VmVyc2lvbiA9PT0gMSA/IDAgOiBwYXJhbXMuaW5kZXg7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgIHsgLi4ucGFyYW1zLCBhZGRyZXNzOiBhZGRyZXNzVG9WZXJpZnksIGluZGV4OiBpbmRleFRvVmVyaWZ5LCBrZXlDdXJ2ZTogJ3NlY3AyNTZrMScgfSxcbiAgICAgIHRoaXMuaXNWYWxpZEFkZHJlc3MuYmluZCh0aGlzKSxcbiAgICAgIChwdWJLZXkpID0+IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YktleSlcbiAgICApO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGFkZHJlc3MgJHthZGRyZXNzVG9WZXJpZnl9IGlzIG5vdCBhIHdhbGxldCBhZGRyZXNzYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcga2V5cGFpciBmb3IgdGhpcyBjb2luLlxuICAgKiBAcGFyYW0gc2VlZCBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIHJldHVybiB1dGlscy5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNhY3Rpb24oXG4gICAgcGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zICYgeyB0eFByZWJ1aWxkOiB7IHR4SGV4OiBzdHJpbmcgfTsgcHJ2OiBzdHJpbmcgfVxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXM/LnR4UHJlYnVpbGQ/LnR4SGV4O1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBwYXJhbXM/LnBydjtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4UHJlYnVpbGQgcGFyYW1ldGVyOiBwYXJhbXMudHhQcmVidWlsZC50eEhleCcpO1xuICAgIH1cbiAgICBpZiAoIXByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcHJ2IHBhcmFtZXRlcjogcGFyYW1zLnBydicpO1xuICAgIH1cbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGF3YWl0IGZhY3RvcnkuZnJvbShwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHBhcmFtcy5wcnYgfSk7XG4gICAgdHhCdWlsZGVyLmNvbWJpbmUoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHggPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICB9O1xuICB9XG5cbiAgaXNWYWxpZFB1YihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHVibGljS2V5KGtleSk7XG4gIH1cblxuICBpc1ZhbGlkUHJ2KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMudHNzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXRIYXNoRnVuY3Rpb24oKTogSGFzaCB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgcHJvdGVjdGVkIGdldFB1YmxpY05vZGVVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLmljcE5vZGVVcmw7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIC8vIHRoaXMgbWV0aG9kIGNhbGxzIHRoZSBwdWJsaWMgbm9kZSB0byBicm9hZGNhc3QgdGhlIHRyYW5zYWN0aW9uIGFuZCBub3QgdGhlIHJvc2V0dGEgbm9kZVxuICBwdWJsaWMgYXN5bmMgYnJvYWRjYXN0VHJhbnNhY3Rpb24ocGF5bG9hZDogQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8QmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmdldFB1YmxpY05vZGVCcm9hZGNhc3RFbmRwb2ludCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHlCeXRlcyA9IHV0aWxzLmJsb2JGcm9tSGV4KHBheWxvYWQuc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChlbmRwb2ludCwgYm9keUJ5dGVzLCB7XG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9jYm9yJyB9LFxuICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsIC8vIFRoaXMgZW5zdXJlcyB5b3UgZ2V0IGEgQnVmZmVyLCBub3QgYSBzdHJpbmdcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmFuc2FjdGlvbiBicm9hZGNhc3QgZmFpbGVkIHdpdGggc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c30gLSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY29kZWRSZXNwb25zZSA9IHV0aWxzLmNib3JEZWNvZGUocmVzcG9uc2UuZGF0YSkgYXMgUHVibGljTm9kZVN1Ym1pdFJlc3BvbnNlO1xuXG4gICAgICBpZiAoZGVjb2RlZFJlc3BvbnNlLnN0YXR1cyA9PT0gJ3JlcGxpZWQnKSB7XG4gICAgICAgIC8vIGl0IGlzIGNvbnNpZGVyZWQgYSBzdWNjZXNzIGJlY2F1c2UgSUNQIHJldHVybnMgcmVzcG9uc2UgaW4gYSBDQk9SIG1hcCB3aXRoIGEgc3RhdHVzIG9mICdyZXBsaWVkJ1xuICAgICAgICByZXR1cm4ge307IC8vIHJldHVybmVkIGVtcHR5IG9iamVjdCBhcyBJQ1AgZG9lcyBub3QgcmV0dXJuIGEgdHhpZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHJlc3BvbnNlIHN0YXR1cyBmcm9tIG5vZGU6ICR7ZGVjb2RlZFJlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmFuc2FjdGlvbiBicm9hZGNhc3QgZXJyb3I6ICR7ZXJyb3I/Lm1lc3NhZ2UgfHwgSlNPTi5zdHJpbmdpZnkoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHVibGljTm9kZUJyb2FkY2FzdEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9kZVVybCA9IHRoaXMuZ2V0UHVibGljTm9kZVVybCgpO1xuICAgIGNvbnN0IGxlZGdlckNhbmlzdGVySWQgPVxuICAgICAgdGhpcy5fc3RhdGljc0NvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5URVNUTkVUID8gVEVTVE5FVF9MRURHRVJfQ0FOSVNURVJfSUQgOiBMRURHRVJfQ0FOSVNURVJfSUQ7XG4gICAgY29uc3QgcHJpbmNpcGFsID0gUHJpbmNpcGFsLmZyb21VaW50OEFycmF5KGxlZGdlckNhbmlzdGVySWQpO1xuICAgIGNvbnN0IGNhbmlzdGVySWRIZXggPSBwcmluY2lwYWwudG9UZXh0KCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtub2RlVXJsfSR7UFVCTElDX05PREVfUkVRVUVTVF9FTkRQT0lOVH0ke2NhbmlzdGVySWRIZXh9L2NhbGxgO1xuICAgIHJldHVybiBlbmRwb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBhY2NvdW50IGJhbGFuY2UgZm9yIGEgZ2l2ZW4gcHVibGljIGtleS5cbiAgICogQHBhcmFtIHB1YmxpY0tleUhleCAtIEhleC1lbmNvZGVkIHB1YmxpYyBrZXkgb2YgdGhlIGFjY291bnQuXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBhY2NvdW50IGJhbGFuY2UgYXMgYSBzdHJpbmcuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGJhbGFuY2UgY291bGQgbm90IGJlIGZldGNoZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0QWNjb3VudEJhbGFuY2UocHVibGljS2V5SGV4OiBzdHJpbmcpOiBQcm9taXNlPEJpZ051bWJlcj4ge1xuICAgIGNvbnN0IHByaW5jaXBhbElkID0gdXRpbHMuZ2V0UHJpbmNpcGFsSWRGcm9tUHVibGljS2V5KHB1YmxpY0tleUhleCkudG9UZXh0KCk7XG4gICAgY29uc3QgYWdlbnQgPSBuZXcgSWNwQWdlbnQodGhpcy5nZXRQdWJsaWNOb2RlVXJsKCksIHRoaXMuX3N0YXRpY3NDb2luKTtcbiAgICByZXR1cm4gYWdlbnQuZ2V0QmFsYW5jZShwcmluY2lwYWxJZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGZlZSBkYXRhIGZyb20gdGhlIElDUCBwdWJsaWMgbm9kZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgSWNwQWdlbnRgIHVzaW5nIHRoZSBwdWJsaWMgbm9kZSBVUkwsXG4gICAqIHRoZW4gcXVlcmllcyB0aGUgbm9kZSBmb3IgdGhlIGN1cnJlbnQgZmVlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGBCaWdOdW1iZXJgIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBmZWUuXG4gICAqIEB0aHJvd3MgV2lsbCBwcm9wYWdhdGUgYW55IGVycm9ycyBlbmNvdW50ZXJlZCB3aGlsZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIElDUCBub2RlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEZlZURhdGEoKTogUHJvbWlzZTxCaWdOdW1iZXI+IHtcbiAgICBjb25zdCBhZ2VudCA9IG5ldyBJY3BBZ2VudCh0aGlzLmdldFB1YmxpY05vZGVVcmwoKSwgdGhpcy5fc3RhdGljc0NvaW4pO1xuICAgIHJldHVybiBhd2FpdCBhZ2VudC5nZXRGZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlckZhY3RvcnkoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIHNpZ25hdHVyZXMgZm9yIHRoZSBwcm92aWRlZCBwYXlsb2FkcyB1c2luZyBNUENcbiAgICpcbiAgICogQHBhcmFtIHBheWxvYWRzRGF0YSAtIFRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIHBheWxvYWRzIHRvIGJlIHNpZ25lZC5cbiAgICogQHBhcmFtIHNlbmRlclB1YmxpY0tleSAtIFRoZSBwdWJsaWMga2V5IG9mIHRoZSBzZW5kZXIgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LlxuICAgKiBAcGFyYW0gdXNlcktleVNoYXJlIC0gVGhlIHVzZXIncyBrZXkgc2hhcmUgYXMgYSBCdWZmZXIuXG4gICAqIEBwYXJhbSBiYWNrdXBLZXlTaGFyZSAtIFRoZSBiYWNrdXAga2V5IHNoYXJlIGFzIGEgQnVmZmVyLlxuICAgKiBAcGFyYW0gY29tbW9uS2V5Q2hhaW4gLSBUaGUgY29tbW9uIGtleSBjaGFpbiBpZGVudGlmaWVyIHVzZWQgZm9yIE1QQyBzaWduaW5nLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBgU2lnbmF0dXJlc2Agb2JqZWN0cywgZWFjaCBjb250YWluaW5nIHRoZSBzaWduaW5nIHBheWxvYWQsXG4gICAqICAgICAgICAgIHNpZ25hdHVyZSB0eXBlLCBwdWJsaWMga2V5LCBhbmQgdGhlIGdlbmVyYXRlZCBzaWduYXR1cmUgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LlxuICAgKi9cbiAgYXN5bmMgc2lnbmF0dXJlcyhcbiAgICBwYXlsb2Fkc0RhdGE6IFBheWxvYWRzRGF0YSxcbiAgICBzZW5kZXJQdWJsaWNLZXk6IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEJ1ZmZlcjxBcnJheUJ1ZmZlckxpa2U+LFxuICAgIGJhY2t1cEtleVNoYXJlOiBCdWZmZXI8QXJyYXlCdWZmZXJMaWtlPixcbiAgICBjb21tb25LZXlDaGFpbjogc3RyaW5nXG4gICk6IFByb21pc2U8U2lnbmF0dXJlc1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0gYXMgU2lnbmluZ1BheWxvYWQ7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20ocGF5bG9hZC5oZXhfYnl0ZXMsICdoZXgnKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG1lc3NhZ2UpLmRpZ2VzdCgpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgRUNEU0FVdGlscy5zaWduUmVjb3ZlcnlNcGNWMihtZXNzYWdlSGFzaCwgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW4pO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlUGF5bG9hZDogU2lnbmF0dXJlcyA9IHtcbiAgICAgICAgc2lnbmluZ19wYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICBzaWduYXR1cmVfdHlwZTogcGF5bG9hZC5zaWduYXR1cmVfdHlwZSxcbiAgICAgICAgcHVibGljX2tleToge1xuICAgICAgICAgIGhleF9ieXRlczogc2VuZGVyUHVibGljS2V5LFxuICAgICAgICAgIGN1cnZlX3R5cGU6IEN1cnZlVHlwZS5TRUNQMjU2SzEsXG4gICAgICAgIH0sXG4gICAgICAgIGhleF9ieXRlczogc2lnbmF0dXJlLnIgKyBzaWduYXR1cmUucyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBbc2lnbmF0dXJlUGF5bG9hZF07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZ2VuZXJhdGluZyBzaWduYXR1cmVzOiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlUcmFuc2FjdGlvbiB8IFVuc2lnbmVkU3dlZXBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24gfHwgIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9ICFwYXJhbXMudXNlcktleSAmJiAhcGFyYW1zLmJhY2t1cEtleSAmJiAhcGFyYW1zLndhbGxldFBhc3NwaHJhc2U7XG5cbiAgICAgIGxldCBwdWJsaWNLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBjb21tb25LZXlDaGFpbjtcbiAgICAgIGNvbnN0IE1QQyA9IG5ldyBFY2RzYSgpO1xuXG4gICAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgICBpZiAoIXBhcmFtcy51c2VyS2V5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyYW1zLmJhY2t1cEtleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiYWNrdXBLZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyYW1zLndhbGxldFBhc3NwaHJhc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3Npbmcgd2FsbGV0IHBhc3NwaHJhc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVzZXJLZXkgPSBwYXJhbXMudXNlcktleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBjb25zdCBiYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICAgICAgKHsgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW4gfSA9IGF3YWl0IEVDRFNBVXRpbHMuZ2V0TXBjVjJSZWNvdmVyeUtleVNoYXJlcyhcbiAgICAgICAgICB1c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgICBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICB0aGlzLmJpdGdvXG4gICAgICAgICkpO1xuICAgICAgICBwdWJsaWNLZXkgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXlDaGFpbiwgUk9PVF9QQVRIKS5zbGljZSgwLCA2Nik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBiaXRnb0tleSA9IHBhcmFtcy5iaXRnb0tleTtcbiAgICAgICAgaWYgKCFiaXRnb0tleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiaXRnb0tleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGRUcmVlID0gbmV3IG1wYy5TZWNwMjU2azFCaXAzMkhkVHJlZSgpO1xuICAgICAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuICAgICAgICBjb25zdCBkZXJpdmVkUHViID0gaGRUcmVlLnB1YmxpY0Rlcml2ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwazogbXBjLmJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShiaXRnb0tleS5zbGljZSgwLCA2NiksICdoZXgnKSksXG4gICAgICAgICAgICBjaGFpbmNvZGU6IG1wYy5iaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYml0Z29LZXkuc2xpY2UoNjYpLCAnaGV4JykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGhcbiAgICAgICAgKTtcblxuICAgICAgICBwdWJsaWNLZXkgPSBtcGMuYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkUHViLnBrKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcHVibGljS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGRlcml2ZSBwdWJsaWMga2V5Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleSk7XG4gICAgICBjb25zdCBiYWxhbmNlID0gYXdhaXQgdGhpcy5nZXRBY2NvdW50QmFsYW5jZShwdWJsaWNLZXkpO1xuICAgICAgY29uc3QgZmVlRGF0YSA9IGF3YWl0IHRoaXMuZ2V0RmVlRGF0YSgpO1xuICAgICAgY29uc3QgYWN0dWFsQmFsYW5jZSA9IGJhbGFuY2UubWludXMoZmVlRGF0YSk7XG4gICAgICBpZiAoYWN0dWFsQmFsYW5jZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBoYXZlIGVub3VnaCBmdW5kcyB0byByZWNvdmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcihzZW5kZXJBZGRyZXNzLCBwdWJsaWNLZXkgYXMgc3RyaW5nKTtcbiAgICAgIHR4QnVpbGRlci5yZWNlaXZlcklkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnQoYWN0dWFsQmFsYW5jZS50b1N0cmluZygpKTtcbiAgICAgIGlmIChwYXJhbXMubWVtbyAhPT0gdW5kZWZpbmVkICYmIHV0aWxzLnZhbGlkYXRlTWVtbyhwYXJhbXMubWVtbykpIHtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oTnVtYmVyKHBhcmFtcy5tZW1vKSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGlmICh0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLnBheWxvYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcGF5bG9hZHMgdG8gZ2VuZXJhdGUgc2lnbmF0dXJlcycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHhIZXg6IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uLFxuICAgICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IGF3YWl0IHRoaXMuc2lnbmF0dXJlcyhcbiAgICAgICAgdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBjb21tb25LZXlDaGFpblxuICAgICAgKTtcbiAgICAgIGlmICghc2lnbmF0dXJlcyB8fCBzaWduYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBzaWduYXR1cmVzJyk7XG4gICAgICB9XG4gICAgICB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHNpZ25hdHVyZXMpO1xuICAgICAgdHhCdWlsZGVyLmNvbWJpbmUoKTtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJvYWRjYXN0VHJhbnNhY3Rpb24oeyBzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb246IGJyb2FkY2FzdGFibGVUeG4gfSk7XG4gICAgICBjb25zdCB0eElkID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLmlkO1xuICAgICAgY29uc3QgcmVjb3ZlcmVkVHJhbnNhY3Rpb246IFJlY292ZXJ5VHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIGlkOiB0eElkLFxuICAgICAgICB0eDogYnJvYWRjYXN0YWJsZVR4bixcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVjb3ZlcmVkVHJhbnNhY3Rpb247XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZHVyaW5nIElDUCByZWNvdmVyeTogJHtlcnJvci5tZXNzYWdlIHx8IGVycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7IG11bHRpU2lnVHlwZSwgcHJ2LCBwdWJsaWNLZXkgfTogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlICE9PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aXNpZ3R5cGUgJyk7XG4gICAgfVxuICAgIGF1ZGl0RWNkc2FQcml2YXRlS2V5KHBydiBhcyBzdHJpbmcsIHB1YmxpY0tleSBhcyBzdHJpbmcpO1xuICB9XG59XG4iXX0=
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbURBc0I4QjtBQUM5QixpREFBc0Y7QUFDdEYsa0RBQStDO0FBQy9DLGtEQUEwQjtBQUMxQixnRUFBcUM7QUFDckMsbUNBQTBDO0FBQzFDLDZEQUErQztBQUUvQyx1Q0FnQnFCO0FBQ3JCLCtFQUE0RTtBQUM1RSx3REFBZ0M7QUFDaEMseURBQStEO0FBQy9ELDZDQUEwQztBQUUxQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFB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QUMxRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUEyQjtRQUN6RSxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUEsa0NBQW9CLEVBQUMsR0FBYSxFQUFFLFNBQW1CLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUEzYkQsa0JBMmJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdCxcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgRWNkc2EsXG4gIEVDRFNBVXRpbHMsXG4gIEVudmlyb25tZW50cyxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgS2V5UGFpcixcbiAgTVBDQWxnb3JpdGhtLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25pbmdFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICB2ZXJpZnlNUENXYWxsZXRBZGRyZXNzLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucywgTmV0d29ya1R5cGUsIEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgUHJpbmNpcGFsIH0gZnJvbSAnQGRmaW5pdHkvcHJpbmNpcGFsJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoLCBIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIG1wYyBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5cbmltcG9ydCB7XG4gIEN1cnZlVHlwZSxcbiAgTEVER0VSX0NBTklTVEVSX0lELFxuICBURVNUTkVUX0xFREdFUl9DQU5JU1RFUl9JRCxcbiAgUGF5bG9hZHNEYXRhLFxuICBQVUJMSUNfTk9ERV9SRVFVRVNUX0VORFBPSU5ULFxuICBQdWJsaWNOb2RlU3VibWl0UmVzcG9uc2UsXG4gIFJlY292ZXJ5T3B0aW9ucyxcbiAgUmVjb3ZlcnlUcmFuc2FjdGlvbixcbiAgUk9PVF9QQVRILFxuICBTaWduYXR1cmVzLFxuICBTaWduaW5nUGF5bG9hZCxcbiAgSWNwVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHJhbnNhY3Rpb25IZXhQYXJhbXMsXG4gIFRzc1ZlcmlmeUljcEFkZHJlc3NPcHRpb25zLFxuICBVbnNpZ25lZFN3ZWVwUmVjb3ZlcnlUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IGF1ZGl0RWNkc2FQcml2YXRlS2V5IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgSWNwQWdlbnQgfSBmcm9tICcuL2xpYi9pY3BBZ2VudCc7XG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBJbnRlcm5ldCBDb21wdXRlciAoSUNQKSBjb2luLlxuICogRXh0ZW5kcyB0aGUgQmFzZUNvaW4gY2xhc3MgYW5kIHByb3ZpZGVzIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgSUNQLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaW50ZXJuZXRjb21wdXRlci5vcmcvfVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9pbnRlcm5ldGNvbXB1dGVyLm9yZy9kb2NzL2N1cnJlbnQvZGV2ZWxvcGVyLWRvY3MvZGVmaS9yb3NldHRhL2ljcF9yb3NldHRhL2RhdGFfYXBpL31cbiAqL1xuZXhwb3J0IGNsYXNzIEljcCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcblxuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEljcChiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2ljcCc7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2ljcCc7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZmFtaWx5O1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0ludGVybmV0IENvbXB1dGVyJztcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogVHJhbnNhY3Rpb25IZXhQYXJhbXMpOiBQcm9taXNlPEljcFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGF3YWl0IGZhY3RvcnkuZnJvbShwYXJhbXMudHJhbnNhY3Rpb25IZXgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgaWYgKHBhcmFtcy5zaWduYWJsZUhleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBnZW5lcmF0ZWRTaWduYWJsZUhleCA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0uaGV4X2J5dGVzO1xuICAgICAgaWYgKGdlbmVyYXRlZFNpZ25hYmxlSGV4ICE9PSBwYXJhbXMuc2lnbmFibGVIZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW5lcmF0ZWQgc2lnbmFibGVIZXggaXMgbm90IGVxdWFsIHRvIHBhcmFtcy5zaWduYWJsZUhleCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0eEhleCA9IHR4UHJlYnVpbGQ/LnR4SGV4O1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHhIZXggaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgY29uc3QgdHhIZXhQYXJhbXM6IFRyYW5zYWN0aW9uSGV4UGFyYW1zID0ge1xuICAgICAgdHJhbnNhY3Rpb25IZXg6IHR4SGV4LFxuICAgIH07XG5cbiAgICBpZiAodHhQcmVidWlsZC50eEluZm8gJiYgdHhQcmVidWlsZC50eEluZm8gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHhQcmVidWlsZC50eEluZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0eEhleFBhcmFtcy5zaWduYWJsZUhleCA9IHR4UHJlYnVpbGQudHhJbmZvO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24odHhIZXhQYXJhbXMpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHhQYXJhbXMucmVjaXBpZW50cykgJiYgdHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0aGlzLmdldENoYWluKCl9IGRvZXNuJ3Qgc3VwcG9ydCBzZW5kaW5nIHRvIG1vcmUgdGhhbiAxIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUcnkgYWdhaW4sIHVzaW5nIG9ubHkgYSBzaW5nbGUgcmVjaXBpZW50LmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCA9PT0gMSwgJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG5cbiAgICAgIGNvbnN0IG91dHB1dCA9IGV4cGxhaW5lZFR4Lm91dHB1dHNbMF07XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuICAgICAgYXNzZXJ0KFxuICAgICAgICB0eXBlb2YgcmVjaXBpZW50LmFkZHJlc3MgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgdHlwZW9mIG91dHB1dC5hZGRyZXNzID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIG91dHB1dC5hZGRyZXNzID09PSByZWNpcGllbnQuYWRkcmVzcyAmJlxuICAgICAgICAgIEJpZ051bWJlcihvdXRwdXQuYW1vdW50KS5lcShCaWdOdW1iZXIocmVjaXBpZW50LmFtb3VudCkpLFxuICAgICAgICAnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhbiBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhpcyB3YWxsZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VHNzVmVyaWZ5SWNwQWRkcmVzc09wdGlvbnN9IHBhcmFtcyAtIFZlcmlmaWNhdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBUcnVlIGlmIGFkZHJlc3MgYmVsb25ncyB0byB3YWxsZXRcbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NFcnJvcn0gSWYgYWRkcmVzcyBmb3JtYXQgaXMgaW52YWxpZCBvciBkb2Vzbid0IG1hdGNoIGRlcml2ZWQgYWRkcmVzc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgaW52YWxpZCB3YWxsZXQgdmVyc2lvbiBvciBtaXNzaW5nIHBhcmFtZXRlcnNcbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFRzc1ZlcmlmeUljcEFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCByb290QWRkcmVzcywgd2FsbGV0VmVyc2lvbiB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgbGV0IGFkZHJlc3NUb1ZlcmlmeSA9IGFkZHJlc3M7XG4gICAgaWYgKHdhbGxldFZlcnNpb24gPT09IDEpIHtcbiAgICAgIGlmICghcm9vdEFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290QWRkcmVzcyBpcyByZXF1aXJlZCBmb3Igd2FsbGV0IHZlcnNpb24gMScpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXh0cmFjdGVkUm9vdEFkZHJlc3MgPSB1dGlscy52YWxpZGF0ZU1lbW9BbmRSZXR1cm5Sb290QWRkcmVzcyhhZGRyZXNzKTtcbiAgICAgIGlmICghZXh0cmFjdGVkUm9vdEFkZHJlc3MgfHwgZXh0cmFjdGVkUm9vdEFkZHJlc3MgPT09IGFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZW1vSWQgaXMgcmVxdWlyZWQgZm9yIHdhbGxldCB2ZXJzaW9uIDEgYWRkcmVzc2VzJyk7XG4gICAgICB9XG4gICAgICAvLyBJbiB0aGUgd2FsbGV0LmNyZWF0ZUFkZHJlc3MoKSB2ZXJpZmljYXRpb24gZmxvdywgcm9vdEFkZHJlc3MgaXMgdGhlIHdhbGxldCdzXG4gICAgICAvLyBtZW1vLXN1ZmZpeGVkIHJlY2VpdmVBZGRyZXNzIChlLmcuICdyb290P21lbW9JZD0zJykgZm9yIG1lbW8tYmFzZWQgKHdhbGxldFZlcnNpb24gMSlcbiAgICAgIC8vIHdhbGxldHMuIFN0cmlwIHRoZSBtZW1vIHNvIGJhcmUgcm9vdHMgYXJlIGNvbXBhcmVkIGFuZCB0aGUgYmFyZSByb290IGlzXG4gICAgICAvLyB3aGF0IGdldHMga2V5LXZlcmlmaWVkIGJ5IHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MuXG4gICAgICBjb25zdCB3YWxsZXRSb290QWRkcmVzcyA9IHV0aWxzLnZhbGlkYXRlTWVtb0FuZFJldHVyblJvb3RBZGRyZXNzKHJvb3RBZGRyZXNzKTtcbiAgICAgIGlmICghd2FsbGV0Um9vdEFkZHJlc3MgfHwgZXh0cmFjdGVkUm9vdEFkZHJlc3MudG9Mb3dlckNhc2UoKSAhPT0gd2FsbGV0Um9vdEFkZHJlc3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihcbiAgICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkICR7d2FsbGV0Um9vdEFkZHJlc3N9IGJ1dCBnb3QgJHtleHRyYWN0ZWRSb290QWRkcmVzc31gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhZGRyZXNzVG9WZXJpZnkgPSB3YWxsZXRSb290QWRkcmVzcztcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleFRvVmVyaWZ5ID0gd2FsbGV0VmVyc2lvbiA9PT0gMSA/IDAgOiBwYXJhbXMuaW5kZXg7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgIHsgLi4ucGFyYW1zLCBhZGRyZXNzOiBhZGRyZXNzVG9WZXJpZnksIGluZGV4OiBpbmRleFRvVmVyaWZ5LCBrZXlDdXJ2ZTogJ3NlY3AyNTZrMScgfSxcbiAgICAgIHRoaXMuaXNWYWxpZEFkZHJlc3MuYmluZCh0aGlzKSxcbiAgICAgIChwdWJLZXkpID0+IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YktleSlcbiAgICApO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGFkZHJlc3MgJHthZGRyZXNzVG9WZXJpZnl9IGlzIG5vdCBhIHdhbGxldCBhZGRyZXNzYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcga2V5cGFpciBmb3IgdGhpcyBjb2luLlxuICAgKiBAcGFyYW0gc2VlZCBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIHJldHVybiB1dGlscy5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNhY3Rpb24oXG4gICAgcGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zICYgeyB0eFByZWJ1aWxkOiB7IHR4SGV4OiBzdHJpbmcgfTsgcHJ2OiBzdHJpbmcgfVxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXM/LnR4UHJlYnVpbGQ/LnR4SGV4O1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBwYXJhbXM/LnBydjtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4UHJlYnVpbGQgcGFyYW1ldGVyOiBwYXJhbXMudHhQcmVidWlsZC50eEhleCcpO1xuICAgIH1cbiAgICBpZiAoIXByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcHJ2IHBhcmFtZXRlcjogcGFyYW1zLnBydicpO1xuICAgIH1cbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGF3YWl0IGZhY3RvcnkuZnJvbShwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHBhcmFtcy5wcnYgfSk7XG4gICAgdHhCdWlsZGVyLmNvbWJpbmUoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHggPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICB9O1xuICB9XG5cbiAgaXNWYWxpZFB1YihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHVibGljS2V5KGtleSk7XG4gIH1cblxuICBpc1ZhbGlkUHJ2KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMudHNzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXRIYXNoRnVuY3Rpb24oKTogSGFzaCB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgcHJvdGVjdGVkIGdldFB1YmxpY05vZGVVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLmljcE5vZGVVcmw7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIC8vIHRoaXMgbWV0aG9kIGNhbGxzIHRoZSBwdWJsaWMgbm9kZSB0byBicm9hZGNhc3QgdGhlIHRyYW5zYWN0aW9uIGFuZCBub3QgdGhlIHJvc2V0dGEgbm9kZVxuICBwdWJsaWMgYXN5bmMgYnJvYWRjYXN0VHJhbnNhY3Rpb24ocGF5bG9hZDogQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8QmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmdldFB1YmxpY05vZGVCcm9hZGNhc3RFbmRwb2ludCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHlCeXRlcyA9IHV0aWxzLmJsb2JGcm9tSGV4KHBheWxvYWQuc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChlbmRwb2ludCwgYm9keUJ5dGVzLCB7XG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9jYm9yJyB9LFxuICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsIC8vIFRoaXMgZW5zdXJlcyB5b3UgZ2V0IGEgQnVmZmVyLCBub3QgYSBzdHJpbmdcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmFuc2FjdGlvbiBicm9hZGNhc3QgZmFpbGVkIHdpdGggc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c30gLSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY29kZWRSZXNwb25zZSA9IHV0aWxzLmNib3JEZWNvZGUocmVzcG9uc2UuZGF0YSkgYXMgUHVibGljTm9kZVN1Ym1pdFJlc3BvbnNlO1xuXG4gICAgICBpZiAoZGVjb2RlZFJlc3BvbnNlLnN0YXR1cyA9PT0gJ3JlcGxpZWQnKSB7XG4gICAgICAgIC8vIGl0IGlzIGNvbnNpZGVyZWQgYSBzdWNjZXNzIGJlY2F1c2UgSUNQIHJldHVybnMgcmVzcG9uc2UgaW4gYSBDQk9SIG1hcCB3aXRoIGEgc3RhdHVzIG9mICdyZXBsaWVkJ1xuICAgICAgICByZXR1cm4ge307IC8vIHJldHVybmVkIGVtcHR5IG9iamVjdCBhcyBJQ1AgZG9lcyBub3QgcmV0dXJuIGEgdHhpZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHJlc3BvbnNlIHN0YXR1cyBmcm9tIG5vZGU6ICR7ZGVjb2RlZFJlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmFuc2FjdGlvbiBicm9hZGNhc3QgZXJyb3I6ICR7ZXJyb3I/Lm1lc3NhZ2UgfHwgSlNPTi5zdHJpbmdpZnkoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHVibGljTm9kZUJyb2FkY2FzdEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9kZVVybCA9IHRoaXMuZ2V0UHVibGljTm9kZVVybCgpO1xuICAgIGNvbnN0IGxlZGdlckNhbmlzdGVySWQgPVxuICAgICAgdGhpcy5fc3RhdGljc0NvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5URVNUTkVUID8gVEVTVE5FVF9MRURHRVJfQ0FOSVNURVJfSUQgOiBMRURHRVJfQ0FOSVNURVJfSUQ7XG4gICAgY29uc3QgcHJpbmNpcGFsID0gUHJpbmNpcGFsLmZyb21VaW50OEFycmF5KGxlZGdlckNhbmlzdGVySWQpO1xuICAgIGNvbnN0IGNhbmlzdGVySWRIZXggPSBwcmluY2lwYWwudG9UZXh0KCk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtub2RlVXJsfSR7UFVCTElDX05PREVfUkVRVUVTVF9FTkRQT0lOVH0ke2NhbmlzdGVySWRIZXh9L2NhbGxgO1xuICAgIHJldHVybiBlbmRwb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBhY2NvdW50IGJhbGFuY2UgZm9yIGEgZ2l2ZW4gcHVibGljIGtleS5cbiAgICogQHBhcmFtIHB1YmxpY0tleUhleCAtIEhleC1lbmNvZGVkIHB1YmxpYyBrZXkgb2YgdGhlIGFjY291bnQuXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBhY2NvdW50IGJhbGFuY2UgYXMgYSBzdHJpbmcuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGJhbGFuY2UgY291bGQgbm90IGJlIGZldGNoZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0QWNjb3VudEJhbGFuY2UocHVibGljS2V5SGV4OiBzdHJpbmcpOiBQcm9taXNlPEJpZ051bWJlcj4ge1xuICAgIGNvbnN0IHByaW5jaXBhbElkID0gdXRpbHMuZ2V0UHJpbmNpcGFsSWRGcm9tUHVibGljS2V5KHB1YmxpY0tleUhleCkudG9UZXh0KCk7XG4gICAgY29uc3QgYWdlbnQgPSBuZXcgSWNwQWdlbnQodGhpcy5nZXRQdWJsaWNOb2RlVXJsKCksIHRoaXMuX3N0YXRpY3NDb2luKTtcbiAgICByZXR1cm4gYWdlbnQuZ2V0QmFsYW5jZShwcmluY2lwYWxJZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGZlZSBkYXRhIGZyb20gdGhlIElDUCBwdWJsaWMgbm9kZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgSWNwQWdlbnRgIHVzaW5nIHRoZSBwdWJsaWMgbm9kZSBVUkwsXG4gICAqIHRoZW4gcXVlcmllcyB0aGUgbm9kZSBmb3IgdGhlIGN1cnJlbnQgZmVlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGBCaWdOdW1iZXJgIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBmZWUuXG4gICAqIEB0aHJvd3MgV2lsbCBwcm9wYWdhdGUgYW55IGVycm9ycyBlbmNvdW50ZXJlZCB3aGlsZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIElDUCBub2RlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEZlZURhdGEoKTogUHJvbWlzZTxCaWdOdW1iZXI+IHtcbiAgICBjb25zdCBhZ2VudCA9IG5ldyBJY3BBZ2VudCh0aGlzLmdldFB1YmxpY05vZGVVcmwoKSwgdGhpcy5fc3RhdGljc0NvaW4pO1xuICAgIHJldHVybiBhd2FpdCBhZ2VudC5nZXRGZWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlckZhY3RvcnkoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIHNpZ25hdHVyZXMgZm9yIHRoZSBwcm92aWRlZCBwYXlsb2FkcyB1c2luZyBNUENcbiAgICpcbiAgICogQHBhcmFtIHBheWxvYWRzRGF0YSAtIFRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIHBheWxvYWRzIHRvIGJlIHNpZ25lZC5cbiAgICogQHBhcmFtIHNlbmRlclB1YmxpY0tleSAtIFRoZSBwdWJsaWMga2V5IG9mIHRoZSBzZW5kZXIgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LlxuICAgKiBAcGFyYW0gdXNlcktleVNoYXJlIC0gVGhlIHVzZXIncyBrZXkgc2hhcmUgYXMgYSBCdWZmZXIuXG4gICAqIEBwYXJhbSBiYWNrdXBLZXlTaGFyZSAtIFRoZSBiYWNrdXAga2V5IHNoYXJlIGFzIGEgQnVmZmVyLlxuICAgKiBAcGFyYW0gY29tbW9uS2V5Q2hhaW4gLSBUaGUgY29tbW9uIGtleSBjaGFpbiBpZGVudGlmaWVyIHVzZWQgZm9yIE1QQyBzaWduaW5nLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBgU2lnbmF0dXJlc2Agb2JqZWN0cywgZWFjaCBjb250YWluaW5nIHRoZSBzaWduaW5nIHBheWxvYWQsXG4gICAqICAgICAgICAgIHNpZ25hdHVyZSB0eXBlLCBwdWJsaWMga2V5LCBhbmQgdGhlIGdlbmVyYXRlZCBzaWduYXR1cmUgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LlxuICAgKi9cbiAgYXN5bmMgc2lnbmF0dXJlcyhcbiAgICBwYXlsb2Fkc0RhdGE6IFBheWxvYWRzRGF0YSxcbiAgICBzZW5kZXJQdWJsaWNLZXk6IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEJ1ZmZlcjxBcnJheUJ1ZmZlckxpa2U+LFxuICAgIGJhY2t1cEtleVNoYXJlOiBCdWZmZXI8QXJyYXlCdWZmZXJMaWtlPixcbiAgICBjb21tb25LZXlDaGFpbjogc3RyaW5nXG4gICk6IFByb21pc2U8U2lnbmF0dXJlc1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0gYXMgU2lnbmluZ1BheWxvYWQ7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20ocGF5bG9hZC5oZXhfYnl0ZXMsICdoZXgnKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG1lc3NhZ2UpLmRpZ2VzdCgpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgRUNEU0FVdGlscy5zaWduUmVjb3ZlcnlNcGNWMihtZXNzYWdlSGFzaCwgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW4pO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlUGF5bG9hZDogU2lnbmF0dXJlcyA9IHtcbiAgICAgICAgc2lnbmluZ19wYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICBzaWduYXR1cmVfdHlwZTogcGF5bG9hZC5zaWduYXR1cmVfdHlwZSxcbiAgICAgICAgcHVibGljX2tleToge1xuICAgICAgICAgIGhleF9ieXRlczogc2VuZGVyUHVibGljS2V5LFxuICAgICAgICAgIGN1cnZlX3R5cGU6IEN1cnZlVHlwZS5TRUNQMjU2SzEsXG4gICAgICAgIH0sXG4gICAgICAgIGhleF9ieXRlczogc2lnbmF0dXJlLnIgKyBzaWduYXR1cmUucyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBbc2lnbmF0dXJlUGF5bG9hZF07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZ2VuZXJhdGluZyBzaWduYXR1cmVzOiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlUcmFuc2FjdGlvbiB8IFVuc2lnbmVkU3dlZXBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24gfHwgIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9ICFwYXJhbXMudXNlcktleSAmJiAhcGFyYW1zLmJhY2t1cEtleSAmJiAhcGFyYW1zLndhbGxldFBhc3NwaHJhc2U7XG5cbiAgICAgIGxldCBwdWJsaWNLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBjb21tb25LZXlDaGFpbjtcbiAgICAgIGNvbnN0IE1QQyA9IG5ldyBFY2RzYSgpO1xuXG4gICAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgICBpZiAoIXBhcmFtcy51c2VyS2V5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyYW1zLmJhY2t1cEtleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiYWNrdXBLZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyYW1zLndhbGxldFBhc3NwaHJhc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3Npbmcgd2FsbGV0IHBhc3NwaHJhc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVzZXJLZXkgPSBwYXJhbXMudXNlcktleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBjb25zdCBiYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICAgICAgKHsgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW4gfSA9IGF3YWl0IEVDRFNBVXRpbHMuZ2V0TXBjVjJSZWNvdmVyeUtleVNoYXJlcyhcbiAgICAgICAgICB1c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgICBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICB0aGlzLmJpdGdvXG4gICAgICAgICkpO1xuICAgICAgICBwdWJsaWNLZXkgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXlDaGFpbiwgUk9PVF9QQVRIKS5zbGljZSgwLCA2Nik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBiaXRnb0tleSA9IHBhcmFtcy5iaXRnb0tleTtcbiAgICAgICAgaWYgKCFiaXRnb0tleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiaXRnb0tleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGRUcmVlID0gbmV3IG1wYy5TZWNwMjU2azFCaXAzMkhkVHJlZSgpO1xuICAgICAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuICAgICAgICBjb25zdCBkZXJpdmVkUHViID0gaGRUcmVlLnB1YmxpY0Rlcml2ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwazogbXBjLmJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShiaXRnb0tleS5zbGljZSgwLCA2NiksICdoZXgnKSksXG4gICAgICAgICAgICBjaGFpbmNvZGU6IG1wYy5iaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYml0Z29LZXkuc2xpY2UoNjYpLCAnaGV4JykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGhcbiAgICAgICAgKTtcblxuICAgICAgICBwdWJsaWNLZXkgPSBtcGMuYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkUHViLnBrKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcHVibGljS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGRlcml2ZSBwdWJsaWMga2V5Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleSk7XG4gICAgICBjb25zdCBiYWxhbmNlID0gYXdhaXQgdGhpcy5nZXRBY2NvdW50QmFsYW5jZShwdWJsaWNLZXkpO1xuICAgICAgY29uc3QgZmVlRGF0YSA9IGF3YWl0IHRoaXMuZ2V0RmVlRGF0YSgpO1xuICAgICAgY29uc3QgYWN0dWFsQmFsYW5jZSA9IGJhbGFuY2UubWludXMoZmVlRGF0YSk7XG4gICAgICBpZiAoYWN0dWFsQmFsYW5jZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBoYXZlIGVub3VnaCBmdW5kcyB0byByZWNvdmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcihzZW5kZXJBZGRyZXNzLCBwdWJsaWNLZXkgYXMgc3RyaW5nKTtcbiAgICAgIHR4QnVpbGRlci5yZWNlaXZlcklkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnQoYWN0dWFsQmFsYW5jZS50b1N0cmluZygpKTtcbiAgICAgIGlmIChwYXJhbXMubWVtbyAhPT0gdW5kZWZpbmVkICYmIHV0aWxzLnZhbGlkYXRlTWVtbyhwYXJhbXMubWVtbykpIHtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oTnVtYmVyKHBhcmFtcy5tZW1vKSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGlmICh0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLnBheWxvYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcGF5bG9hZHMgdG8gZ2VuZXJhdGUgc2lnbmF0dXJlcycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHhIZXg6IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uLFxuICAgICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IGF3YWl0IHRoaXMuc2lnbmF0dXJlcyhcbiAgICAgICAgdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBjb21tb25LZXlDaGFpblxuICAgICAgKTtcbiAgICAgIGlmICghc2lnbmF0dXJlcyB8fCBzaWduYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBzaWduYXR1cmVzJyk7XG4gICAgICB9XG4gICAgICB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHNpZ25hdHVyZXMpO1xuICAgICAgdHhCdWlsZGVyLmNvbWJpbmUoKTtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJvYWRjYXN0VHJhbnNhY3Rpb24oeyBzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb246IGJyb2FkY2FzdGFibGVUeG4gfSk7XG4gICAgICBjb25zdCB0eElkID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLmlkO1xuICAgICAgY29uc3QgcmVjb3ZlcmVkVHJhbnNhY3Rpb246IFJlY292ZXJ5VHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIGlkOiB0eElkLFxuICAgICAgICB0eDogYnJvYWRjYXN0YWJsZVR4bixcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVjb3ZlcmVkVHJhbnNhY3Rpb247XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZHVyaW5nIElDUCByZWNvdmVyeTogJHtlcnJvci5tZXNzYWdlIHx8IGVycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7IG11bHRpU2lnVHlwZSwgcHJ2LCBwdWJsaWNLZXkgfTogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlICE9PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aXNpZ3R5cGUgJyk7XG4gICAgfVxuICAgIGF1ZGl0RWNkc2FQcml2YXRlS2V5KHBydiBhcyBzdHJpbmcsIHB1YmxpY0tleSBhcyBzdHJpbmcpO1xuICB9XG59XG4iXX0=
|
package/dist/test/unit/icp.js
CHANGED
|
@@ -331,6 +331,34 @@ describe('Internet computer', function () {
|
|
|
331
331
|
const result = await basecoin.isWalletAddress(params);
|
|
332
332
|
result.should.equal(true);
|
|
333
333
|
});
|
|
334
|
+
it('should verify a valid memo-based address when rootAddress param is the memo-suffixed wallet receiveAddress', async function () {
|
|
335
|
+
const rootAddress = addressVerificationData.rootAddress;
|
|
336
|
+
// Production shape from wallet.createAddress() verification:
|
|
337
|
+
// rootAddress param = wallet.receiveAddress.address (memo-suffixed).
|
|
338
|
+
const params = {
|
|
339
|
+
address: `${rootAddress}?memoId=4`,
|
|
340
|
+
rootAddress: `${rootAddress}?memoId=3`,
|
|
341
|
+
walletVersion: 1,
|
|
342
|
+
keychains: keychains,
|
|
343
|
+
index: 0,
|
|
344
|
+
};
|
|
345
|
+
const result = await basecoin.isWalletAddress(params);
|
|
346
|
+
result.should.equal(true);
|
|
347
|
+
});
|
|
348
|
+
it('should reject when the memo-suffixed rootAddress param has a different root', async function () {
|
|
349
|
+
const rootAddress = addressVerificationData.rootAddress;
|
|
350
|
+
const differentAddress = testData.Accounts.account2.address;
|
|
351
|
+
const params = {
|
|
352
|
+
address: `${differentAddress}?memoId=123`,
|
|
353
|
+
rootAddress: `${rootAddress}?memoId=3`,
|
|
354
|
+
walletVersion: 1,
|
|
355
|
+
keychains: keychains,
|
|
356
|
+
index: 0,
|
|
357
|
+
};
|
|
358
|
+
await basecoin
|
|
359
|
+
.isWalletAddress(params)
|
|
360
|
+
.should.be.rejectedWith(`address validation failure: expected ${rootAddress} but got ${differentAddress}`);
|
|
361
|
+
});
|
|
334
362
|
it('should fail when rootAddress does not match commonKeychain derivation', async function () {
|
|
335
363
|
// Use a rootAddress that doesn't match what's derived from commonKeychain
|
|
336
364
|
const invalidRootAddress = testData.Accounts.account1.address;
|
|
@@ -415,4 +443,4 @@ describe('Internet computer', function () {
|
|
|
415
443
|
});
|
|
416
444
|
});
|
|
417
445
|
});
|
|
418
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUErRDtBQUMvRCxpREFBK0M7QUFDL0MsZ0VBQXdDO0FBQ3hDLDJEQUF3RDtBQUV4RCwyQ0FBNEM7QUFDNUMsZ0RBQXdCO0FBQ3hCLDJEQUE2QztBQUM3QyxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGNBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBRXhCLE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTlDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxJQUFJLFNBQWMsQ0FBQztJQUVuQixNQUFNLENBQUMsS0FBSztRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0YsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RCxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9DLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDO1FBQ0osY0FBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsY0FBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sbUJBQW1CLEdBQ3ZCLG9JQUFvSSxDQUFDO1FBQ3ZJLE1BQU0sb0JBQW9CLEdBQUcsb0VBQW9FLENBQUM7UUFDbEcsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxrRUFBa0UsQ0FBQztRQUMxRixNQUFNLGVBQWUsR0FBRyxrRUFBa0UsQ0FBQztRQUUzRixFQUFFLENBQUMsNkRBQTZELEVBQUU7WUFDaEUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUU7WUFDL0UsUUFBUSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUU7WUFDN0QsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztZQUN6RSxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzlFLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEtBQUs7WUFDdkYsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMvRSxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRTtZQUM5RCxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3BILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlFQUFpRSxFQUFFO1lBQ3BFLE1BQU0sU0FBUyxHQUFHLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3JFLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFO1lBQzlELENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDakgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdEMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtZQUM1QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BHLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQ2pELEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN4RCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDO1lBQzlELFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztZQUN4RCxNQUFNLGtCQUFrQixHQUFHO2dCQUN6QixlQUFlLEVBQUUsWUFBWTtnQkFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDaEQsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRyxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQy9DLFVBQVUsRUFBRTtvQkFDVixLQUFLLEVBQUUsZUFBZTtpQkFDdkI7Z0JBQ0QsR0FBRyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDMUMsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUM3QixNQUFNLGlCQUFpQixHQUFHLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO1FBQ3BDLEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDO1lBQzlELFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztZQUN4RCxNQUFNLGtCQUFrQixHQUFHO2dCQUN6QixlQUFlLEVBQUUsWUFBWTtnQkFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDaEQsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3ZELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRyxNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87d0JBQzNDLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDO2dCQUNoRCxVQUFVLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLGVBQWU7b0JBQ3RCLE1BQU0sRUFBRSxXQUFXO2lCQUNwQjtnQkFDRCxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7WUFDSCxJQUFBLGdCQUFNLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0UsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztZQUM5RCxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDeEQsTUFBTSxrQkFBa0IsR0FBRztnQkFDekIsZUFBZSxFQUFFLFlBQVk7Z0JBQzdCLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2FBQ2hELENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakcsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPO3dCQUMzQyxNQUFNLEVBQUUsSUFBSTtxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsVUFBVSxFQUFFO29CQUNWLEtBQUssRUFBRSxlQUFlO2lCQUN2QjtnQkFDRCxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7WUFDSCxJQUFBLGdCQUFNLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDM0UsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztZQUM5RCxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDeEQsTUFBTSxrQkFBa0IsR0FBRztnQkFDekIsZUFBZSxFQUFFLFlBQVk7Z0JBQzdCLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2FBQ2hELENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakcsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPO3dCQUMzQyxNQUFNLEVBQUUsSUFBSTtxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFFRixNQUFNLHNCQUFzQixHQUMxQix3RkFBd0YsQ0FBQztZQUUzRixNQUFNLFFBQVE7aUJBQ1gsaUJBQWlCLENBQUM7Z0JBQ2pCLFVBQVUsRUFBRTtvQkFDVixLQUFLLEVBQUUsZUFBZTtvQkFDdEIsTUFBTSxFQUFFLHNCQUFzQjtpQkFDL0I7Z0JBQ0QsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQztpQkFDRCxNQUFNLENBQUMsWUFBWSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7UUFDcEMsTUFBTSx1QkFBdUIsR0FBRztZQUM5QixjQUFjLEVBQ1osb0lBQW9JO1lBQ3RJLFdBQVcsRUFBRSxrRUFBa0U7U0FDaEYsQ0FBQztRQUVGLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDbkMsSUFBSSxTQUFTLENBQUM7WUFFZCxNQUFNLENBQUM7Z0JBQ0wsU0FBUyxHQUFHO29CQUNWLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixDQUFDLGNBQWMsRUFBRTtvQkFDMUQsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLENBQUMsY0FBYyxFQUFFO29CQUMxRCxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsQ0FBQyxjQUFjLEVBQUU7aUJBQzNELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLO2dCQUNsRCxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUM7Z0JBQ3hELE1BQU0sZUFBZSxHQUFHLEdBQUcsV0FBVyxhQUFhLENBQUM7Z0JBRXBELE1BQU0sTUFBTSxHQUFHO29CQUNiLE9BQU8sRUFBRSxlQUFlO29CQUN4QixXQUFXLEVBQUUsV0FBVztvQkFDeEIsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLFNBQVMsRUFBRSxTQUFTO29CQUNwQixLQUFLLEVBQUUsQ0FBQztpQkFDVCxDQUFDO2dCQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUUsS0FBSztnQkFDN0MsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDO2dCQUN4RCxNQUFNLGVBQWUsR0FBRyxHQUFHLFdBQVcsV0FBVyxDQUFDO2dCQUVsRCxNQUFNLE1BQU0sR0FBRztvQkFDYixPQUFPLEVBQUUsZUFBZTtvQkFDeEIsV0FBVyxFQUFFLFdBQVc7b0JBQ3hCLGFBQWEsRUFBRSxDQUFDO29CQUNoQixTQUFTLEVBQUUsU0FBUztvQkFDcEIsS0FBSyxFQUFFLENBQUM7aUJBQ1QsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDJFQUEyRSxFQUFFLEtBQUs7Z0JBQ25GLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQztnQkFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQzVELE1BQU0sZUFBZSxHQUFHLEdBQUcsZ0JBQWdCLGFBQWEsQ0FBQztnQkFFekQsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFdBQVcsRUFBRSxXQUFXO29CQUN4QixhQUFhLEVBQUUsQ0FBQztvQkFDaEIsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLEtBQUssRUFBRSxDQUFDO2lCQUNULENBQUM7Z0JBRUYsMkVBQTJFO2dCQUMzRSxNQUFNLFFBQVE7cUJBQ1gsZUFBZSxDQUFDLE1BQU0sQ0FBQztxQkFDdkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsd0NBQXdDLFdBQVcsWUFBWSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDL0csQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztnQkFDN0UsTUFBTSxPQUFPLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLGFBQWEsQ0FBQztnQkFFcEUsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLGFBQWEsRUFBRSxDQUFDO29CQUNoQixTQUFTLEVBQUUsU0FBUztvQkFDcEIsS0FBSyxFQUFFLENBQUM7aUJBQ1QsQ0FBQztnQkFFRixNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUNoSCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLO2dCQUN4RSxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUM7Z0JBRXhELE1BQU0sTUFBTSxHQUFHO29CQUNiLE9BQU8sRUFBRSxXQUFXO29CQUNwQixXQUFXLEVBQUUsV0FBVztvQkFDeEIsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLFNBQVMsRUFBRSxTQUFTO29CQUNwQixLQUFLLEVBQUUsQ0FBQztpQkFDVCxDQUFDO2dCQUVGLE1BQU0sUUFBUTtxQkFDWCxlQUFlLENBQUMsTUFBTSxDQUFDO3FCQUN2QixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEtBQUs7Z0JBQzNDLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQztnQkFDeEQsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ3ZDLE1BQU0sZUFBZSxHQUFHLEdBQUcsV0FBVyxXQUFXLFdBQVcsRUFBRSxDQUFDO2dCQUUvRCxNQUFNLE1BQU0sR0FBRztvQkFDYixPQUFPLEVBQUUsZUFBZTtvQkFDeEIsV0FBVyxFQUFFLFdBQVc7b0JBQ3hCLGFBQWEsRUFBRSxDQUFDO29CQUNoQixTQUFTLEVBQUUsU0FBUztvQkFDcEIsS0FBSyxFQUFFLENBQUM7aUJBQ1QsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEtBQUs7Z0JBQy9FLDBFQUEwRTtnQkFDMUUsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQzlELE1BQU0sZUFBZSxHQUFHLEdBQUcsa0JBQWtCLGFBQWEsQ0FBQztnQkFFM0QsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFdBQVcsRUFBRSxrQkFBa0I7b0JBQy9CLGFBQWEsRUFBRSxDQUFDO29CQUNoQixTQUFTLEVBQUUsU0FBUztvQkFDcEIsS0FBSyxFQUFFLENBQUM7aUJBQ1QsQ0FBQztnQkFFRixtRUFBbUU7Z0JBQ25FLE1BQU0sUUFBUTtxQkFDWCxlQUFlLENBQUMsTUFBTSxDQUFDO3FCQUN2QixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1Q0FBdUMsa0JBQWtCLDBCQUEwQixDQUFDLENBQUM7WUFDakgsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7WUFDcEMsSUFBSSxTQUFTLENBQUM7WUFFZCxNQUFNLENBQUM7Z0JBQ0wsU0FBUyxHQUFHO29CQUNWLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixDQUFDLGNBQWMsRUFBRTtvQkFDMUQsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLENBQUMsY0FBYyxFQUFFO29CQUMxRCxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsQ0FBQyxjQUFjLEVBQUU7aUJBQzNELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLO2dCQUMxRCxNQUFNLE1BQU0sR0FBRztvQkFDYixPQUFPLEVBQUUsdUJBQXVCLENBQUMsV0FBVztvQkFDNUMsV0FBVyxFQUFFLHVCQUF1QixDQUFDLFdBQVc7b0JBQ2hELFNBQVMsRUFBRSxTQUFTO29CQUNwQixLQUFLLEVBQUUsQ0FBQztvQkFDUixhQUFhLEVBQUUsQ0FBQztpQkFDakIsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUs7Z0JBQ3BELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFFMUQsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFNBQVMsRUFBRSxTQUFTO29CQUNwQixLQUFLLEVBQUUsQ0FBQztvQkFDUixhQUFhLEVBQUUsQ0FBQztpQkFDakIsQ0FBQztnQkFFRixNQUFNLFFBQVE7cUJBQ1gsZUFBZSxDQUFDLE1BQU0sQ0FBQztxQkFDdkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsdUNBQXVDLGNBQWMsMEJBQTBCLENBQUMsQ0FBQztZQUM3RyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLO2dCQUN0RCxNQUFNLE1BQU0sR0FBRztvQkFDYixPQUFPLEVBQUUsdUJBQXVCLENBQUMsV0FBVztvQkFDNUMsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsS0FBSyxFQUFFLENBQUM7b0JBQ1IsYUFBYSxFQUFFLENBQUM7aUJBQ2pCLENBQUM7Z0JBRUYsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDcEcsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNEJBQTRCLEVBQUUsS0FBSztnQkFDcEMsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsT0FBTyxFQUFFLHVCQUF1QixDQUFDLFdBQVc7b0JBQzVDLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXO29CQUNoRCxTQUFTLEVBQUUsU0FBUztvQkFDcEIsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsYUFBYSxFQUFFLENBQUM7aUJBQ2pCLENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSztnQkFDdkQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUM7Z0JBRXpDLE1BQU0sTUFBTSxHQUFHO29CQUNiLE9BQU8sRUFBRSxjQUFjO29CQUN2QixhQUFhLEVBQUUsQ0FBQztvQkFDaEIsU0FBUyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZFLEtBQUssRUFBRSxDQUFDO2lCQUNULENBQUM7Z0JBRUYsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG9CQUFvQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3RHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2dldEJ1aWxkZXJGYWN0b3J5JztcblxuaW1wb3J0IHsgSWNwLCBUaWNwIH0gZnJvbSAnLi4vLi4vc3JjL2luZGV4JztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5ub2NrLmVuYWJsZU5ldENvbm5lY3QoKTtcblxuY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbmJpdGdvLnNhZmVSZWdpc3RlcignaWNwJywgSWNwLmNyZWF0ZUluc3RhbmNlKTtcblxuZGVzY3JpYmUoJ0ludGVybmV0IGNvbXB1dGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z287XG4gIGxldCBiYXNlY29pbjtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdpY3AnKTtcbiAgbGV0IHR4QnVpbGRlcjogYW55O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdpY3AnLCBJY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGljcCcsIFRpY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbignaWNwJyk7XG5cbiAgICB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIucmVjZWl2ZXJJZCh0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KCcxMCcpO1xuICAgIHR4QnVpbGRlci5tZW1vKHRlc3REYXRhLk1ldGFEYXRhV2l0aE1lbW8ubWVtbyk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIG5vY2sucGVuZGluZ01vY2tzKCkuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpY3AgPSBiaXRnby5jb2luKCdpY3AnKTtcbiAgICBjb25zdCB0aWNwID0gYml0Z28uY29pbigndGljcCcpO1xuXG4gICAgaWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0ludGVybmV0IENvbXB1dGVyJyk7XG4gICAgaWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICB0aWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0aWNwJyk7XG4gICAgdGljcC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ljcCcpO1xuICAgIHRpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgSW50ZXJuZXQgQ29tcHV0ZXInKTtcbiAgICB0aWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIGNyZWF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkgPVxuICAgICAgJzA0N2E4M2UzNzgwNTNmODdiNDlhZWFlNTNiM2VkMjc0YzhiMmZmYmU1OWQ5YTUxZTNjNGQ4NTBjYThhYzE2ODRmNzEzMWI3NzgzMTdjMGRiMDRkZTY2MWM3ZDA4MzIxZDYwYzA1MDc4NjhhZjQxZmUzMTUwZDIxYjNjNmM3NTczNjcnO1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkyID0gJzAyYWQwMTBjZTY4Yjc1MjY2YzcyM2JmMjVmYmUzYTBjNDhlYjI5ZjE0YjI1OTI1YjA2YjdmNTAyNmEwZjEyNzAyZSc7XG4gICAgY29uc3QgaW52YWxpZFB1YmxpY0tleSA9ICdpbnZhbGlkLXB1YmxpYy1rZXknO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEID0gJzhiODRjM2EzNTI5ZDAyYTlkZWNiNWIxYTI3ZTdjOGQ4ODZlMTdlMDdlYTBhNTM4MjY5Njk3ZWYwOWMyYTI3YjQnO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEMiA9ICcyYjliODk2MDQzNjJlMTg1NTQ0YzhiYmE3NmNhZGZmMWEzYWYyNmUxNDY3ZTg1MzBkMTM3NDNhMDhhNTJkZDdiJztcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWxpZGF0aW5nIGEgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoaGV4RW5jb2RlZFB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSBoZXggZW5jb2RlZCBwdWJsaWMga2V5IHdpdGggMzMgYnl0ZXMgJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihoZXhFbmNvZGVkUHVibGljS2V5Mikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGEgaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihpbnZhbGlkUHVibGljS2V5KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjY291bnRJRCA9IGF3YWl0IGJhc2Vjb2luLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXkpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleSB3aXRoIDMzIGJ5dGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleTIpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSkpLnNob3VsZC50aHJvdygnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHZhbGlkIGFkZHJlc3MgZnJvbSBhIHZhbGlkIGhleCBlbmNvZGVkIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhY2NvdW50SUQgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5KTtcbiAgICAgIGFjY291bnRJRC5zaG91bGQuZGVlcEVxdWFsKHZhbGlkQWNjb3VudElEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSkpLnNob3VsZC50aHJvdygnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0dlbmVyYXRlIHdhbGxldCBrZXkgcGFpcjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5IHBhaXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrcCA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGtleSBwYWlyIGZyb20gc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnOWQ2MWIxOWRlZmZkNWE2MGJhODQ0YWY0OTJlYzJjYzQ0NDQ5YzU2OTdiMzI2OTE5NzAzYmFjMDMxY2FlN2Y2MCcsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtwID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIGEgcmF3IHR4biB3aXRoIGEgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIGEgcmF3IHR4biB3aXRoIGEgcHJpdmF0ZSBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3Qgc2lnbmVkVHhuID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuc2VjcmV0S2V5LFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeG4uc2hvdWxkLmJlLmEuc3RyaW5nO1xuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBmYWN0b3J5LnBhcnNlVHJhbnNhY3Rpb24oc2lnbmVkVHhuLnR4SGV4LCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1sxXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMl0uYWNjb3VudC5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFtb3VudC52YWx1ZSwgJy0xMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLmFjY291bnRfaWRlbnRpZmllcl9zaWduZXJzWzBdLmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aCBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2lnbmFibGVIZXggPSBwYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0uaGV4X2J5dGVzO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgIHR4SW5mbzogc2lnbmFibGVIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0KHJlc3BvbnNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgc2lnbmFibGUgSGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIHVuc2lnbmVkVHhuLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBwYXlsb2Fkc0RhdGEsXG4gICAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRUeEZvcm1hdCksICd1dGYtOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQocmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGggd3Jvbmcgc2lnbmFibGUgSGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIHVuc2lnbmVkVHhuLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBwYXlsb2Fkc0RhdGEsXG4gICAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRUeEZvcm1hdCksICd1dGYtOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgd3JvbmdTaWduYWJsZUhleFZhbHVlcyA9XG4gICAgICAgICcwYTY5NjMyZDcyNjU3MTc1NjU3Mzc0NTIzZGUzYzdjNWI0NjEzMTU1Yjc0ZWRlMmU1NDQ5M2Y2YWNiZThiZjZkOTEwMTU0ZmJiYjNhOThiYTNlMDA5OCc7XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICAgIHR4SW5mbzogd3JvbmdTaWduYWJsZUhleFZhbHVlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ2dlbmVyYXRlZCBzaWduYWJsZUhleCBpcyBub3QgZXF1YWwgdG8gcGFyYW1zLnNpZ25hYmxlSGV4Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZlcmlmaWNhdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YSA9IHtcbiAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAnMDM2YjM4Y2E1ZTYzZTk4MDBiNTA0MGFmNDk4ZWI2ZTlhOWM3N2UyNDRhYzI4NThlZGFmYTRiZDA5MjZhNjM1NzMxYzNmYWJkZTkwMDdhNTc3MWU5MzYyMWQ5ZmNiMWM4Nzk2NjAyMDhkYzc5Y2M2MDlmZThkZGQxODlmN2E5NTVhYicsXG4gICAgICByb290QWRkcmVzczogJ2ZkM2VhZWQzZTIwNjRiZDMwYWI0OTdlMjJlOGFjNWEwZGNhZGQ4MWZhNTM1Mzg3OWRiYWI2NGUyNTllYzcwYzAnLFxuICAgIH07XG5cbiAgICBkZXNjcmliZSgnV2FsbGV0IFZlcnNpb25LZXkgMScsICgpID0+IHtcbiAgICAgIGxldCBrZXljaGFpbnM7XG5cbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGtleWNoYWlucyA9IFtcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIG1lbW8tYmFzZWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcbiAgICAgICAgY29uc3QgYWRkcmVzc1dpdGhNZW1vID0gYCR7cm9vdEFkZHJlc3N9P21lbW9JZD0xMjNgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aXRoIG1lbW9JZD0wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPTBgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gZXh0cmFjdGVkIHJvb3QgZG9lcyBub3QgbWF0Y2ggcHJvdmlkZWQgcm9vdEFkZHJlc3MgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVudEFkZHJlc3MgPSB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtkaWZmZXJlbnRBZGRyZXNzfT9tZW1vSWQ9MTIzYDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRoZSBleHRyYWN0ZWQgcm9vdCAoZGlmZmVyZW50QWRkcmVzcykgZG9lc24ndCBtYXRjaCBwcm92aWRlZCByb290QWRkcmVzc1xuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgJHtyb290QWRkcmVzc30gYnV0IGdvdCAke2RpZmZlcmVudEFkZHJlc3N9YCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHJvb3RBZGRyZXNzIGlzIG1pc3NpbmcgZm9yIHdhbGxldCB2ZXJzaW9uIDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBgJHthZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdyb290QWRkcmVzcyBpcyByZXF1aXJlZCBmb3Igd2FsbGV0IHZlcnNpb24gMScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBtZW1vSWQgaXMgbWlzc2luZyBmb3Igd2FsbGV0IHZlcnNpb24gMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWVtb0lkIGlzIHJlcXVpcmVkIGZvciB3YWxsZXQgdmVyc2lvbiAxIGFkZHJlc3NlcycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGxhcmdlIG1lbW9JZCB2YWx1ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGxhcmdlTWVtb0lkID0gJzkwMDcxOTkyNTQ3NDA5OTEnO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPSR7bGFyZ2VNZW1vSWR9YDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHJvb3RBZGRyZXNzIGRvZXMgbm90IG1hdGNoIGNvbW1vbktleWNoYWluIGRlcml2YXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFVzZSBhIHJvb3RBZGRyZXNzIHRoYXQgZG9lc24ndCBtYXRjaCB3aGF0J3MgZGVyaXZlZCBmcm9tIGNvbW1vbktleWNoYWluXG4gICAgICAgIGNvbnN0IGludmFsaWRSb290QWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NXaXRoTWVtbyA9IGAke2ludmFsaWRSb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NXaXRoTWVtbyxcbiAgICAgICAgICByb290QWRkcmVzczogaW52YWxpZFJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcm9vdEFkZHJlc3MgaXMgY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZpZWQgYWdhaW5zdCBjb21tb25LZXljaGFpblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogYWRkcmVzcyAke2ludmFsaWRSb290QWRkcmVzc30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1dhbGxldCBWZXJzaW9uS2V5IDIrJywgKCkgPT4ge1xuICAgICAgbGV0IGtleWNoYWlucztcblxuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAga2V5Y2hhaW5zID0gW1xuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICBdO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgVFNTIHJvb3QgYWRkcmVzcyAoaW5kZXggMCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIFRTUyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGludmFsaWRBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGFkZHJlc3MgJHtpbnZhbGlkQWRkcmVzc30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4ga2V5Y2hhaW5zIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IFtdLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzdHJpbmcgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6ICcwJyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQWRkcmVzcyB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzIGZvcm1hdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSAnaW52YWxpZC1hZGRyZXNzJztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogaW52YWxpZEFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgICBrZXljaGFpbnM6IFt7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9XSxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBpbnZhbGlkIGFkZHJlc3M6ICR7aW52YWxpZEFkZHJlc3N9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUErRDtBQUMvRCxpREFBK0M7QUFDL0MsZ0VBQXdDO0FBQ3hDLDJEQUF3RDtBQUV4RCwyQ0FBNEM7QUFDNUMsZ0RBQXdCO0FBQ3hCLDJEQUE2QztBQUM3QyxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGNBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBRXhCLE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTlDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxJQUFJLFNBQWMsQ0FBQztJQUVuQixNQUFNLENBQUMsS0FBSztRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3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TSxNQUFNLEdBQUc7b0JBQ2IsT0FBTyxFQUFFLHVCQUF1QixDQUFDLFdBQVc7b0JBQzVDLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXO29CQUNoRCxTQUFTLEVBQUUsU0FBUztvQkFDcEIsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsYUFBYSxFQUFFLENBQUM7aUJBQ2pCLENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSztnQkFDdkQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUM7Z0JBRXpDLE1BQU0sTUFBTSxHQUFHO29CQUNiLE9BQU8sRUFBRSxjQUFjO29CQUN2QixhQUFhLEVBQUUsQ0FBQztvQkFDaEIsU0FBUyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZFLEtBQUssRUFBRSxDQUFDO2lCQUNULENBQUM7Z0JBRUYsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG9CQUFvQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3RHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2dldEJ1aWxkZXJGYWN0b3J5JztcblxuaW1wb3J0IHsgSWNwLCBUaWNwIH0gZnJvbSAnLi4vLi4vc3JjL2luZGV4JztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5ub2NrLmVuYWJsZU5ldENvbm5lY3QoKTtcblxuY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbmJpdGdvLnNhZmVSZWdpc3RlcignaWNwJywgSWNwLmNyZWF0ZUluc3RhbmNlKTtcblxuZGVzY3JpYmUoJ0ludGVybmV0IGNvbXB1dGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z287XG4gIGxldCBiYXNlY29pbjtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdpY3AnKTtcbiAgbGV0IHR4QnVpbGRlcjogYW55O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdpY3AnLCBJY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGljcCcsIFRpY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbignaWNwJyk7XG5cbiAgICB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIucmVjZWl2ZXJJZCh0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KCcxMCcpO1xuICAgIHR4QnVpbGRlci5tZW1vKHRlc3REYXRhLk1ldGFEYXRhV2l0aE1lbW8ubWVtbyk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIG5vY2sucGVuZGluZ01vY2tzKCkuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpY3AgPSBiaXRnby5jb2luKCdpY3AnKTtcbiAgICBjb25zdCB0aWNwID0gYml0Z28uY29pbigndGljcCcpO1xuXG4gICAgaWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0ludGVybmV0IENvbXB1dGVyJyk7XG4gICAgaWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICB0aWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0aWNwJyk7XG4gICAgdGljcC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ljcCcpO1xuICAgIHRpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgSW50ZXJuZXQgQ29tcHV0ZXInKTtcbiAgICB0aWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIGNyZWF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkgPVxuICAgICAgJzA0N2E4M2UzNzgwNTNmODdiNDlhZWFlNTNiM2VkMjc0YzhiMmZmYmU1OWQ5YTUxZTNjNGQ4NTBjYThhYzE2ODRmNzEzMWI3NzgzMTdjMGRiMDRkZTY2MWM3ZDA4MzIxZDYwYzA1MDc4NjhhZjQxZmUzMTUwZDIxYjNjNmM3NTczNjcnO1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkyID0gJzAyYWQwMTBjZTY4Yjc1MjY2YzcyM2JmMjVmYmUzYTBjNDhlYjI5ZjE0YjI1OTI1YjA2YjdmNTAyNmEwZjEyNzAyZSc7XG4gICAgY29uc3QgaW52YWxpZFB1YmxpY0tleSA9ICdpbnZhbGlkLXB1YmxpYy1rZXknO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEID0gJzhiODRjM2EzNTI5ZDAyYTlkZWNiNWIxYTI3ZTdjOGQ4ODZlMTdlMDdlYTBhNTM4MjY5Njk3ZWYwOWMyYTI3YjQnO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEMiA9ICcyYjliODk2MDQzNjJlMTg1NTQ0YzhiYmE3NmNhZGZmMWEzYWYyNmUxNDY3ZTg1MzBkMTM3NDNhMDhhNTJkZDdiJztcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWxpZGF0aW5nIGEgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoaGV4RW5jb2RlZFB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSBoZXggZW5jb2RlZCBwdWJsaWMga2V5IHdpdGggMzMgYnl0ZXMgJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihoZXhFbmNvZGVkUHVibGljS2V5Mikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGEgaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihpbnZhbGlkUHVibGljS2V5KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjY291bnRJRCA9IGF3YWl0IGJhc2Vjb2luLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXkpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleSB3aXRoIDMzIGJ5dGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleTIpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSkpLnNob3VsZC50aHJvdygnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHZhbGlkIGFkZHJlc3MgZnJvbSBhIHZhbGlkIGhleCBlbmNvZGVkIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhY2NvdW50SUQgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5KTtcbiAgICAgIGFjY291bnRJRC5zaG91bGQuZGVlcEVxdWFsKHZhbGlkQWNjb3VudElEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSkpLnNob3VsZC50aHJvdygnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0dlbmVyYXRlIHdhbGxldCBrZXkgcGFpcjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5IHBhaXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrcCA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGtleSBwYWlyIGZyb20gc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnOWQ2MWIxOWRlZmZkNWE2MGJhODQ0YWY0OTJlYzJjYzQ0NDQ5YzU2OTdiMzI2OTE5NzAzYmFjMDMxY2FlN2Y2MCcsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtwID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIGEgcmF3IHR4biB3aXRoIGEgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIGEgcmF3IHR4biB3aXRoIGEgcHJpdmF0ZSBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3Qgc2lnbmVkVHhuID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuc2VjcmV0S2V5LFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeG4uc2hvdWxkLmJlLmEuc3RyaW5nO1xuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBmYWN0b3J5LnBhcnNlVHJhbnNhY3Rpb24oc2lnbmVkVHhuLnR4SGV4LCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1sxXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMl0uYWNjb3VudC5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFtb3VudC52YWx1ZSwgJy0xMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLmFjY291bnRfaWRlbnRpZmllcl9zaWduZXJzWzBdLmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aCBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2lnbmFibGVIZXggPSBwYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0uaGV4X2J5dGVzO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgIHR4SW5mbzogc2lnbmFibGVIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0KHJlc3BvbnNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgc2lnbmFibGUgSGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIHVuc2lnbmVkVHhuLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBwYXlsb2Fkc0RhdGEsXG4gICAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRUeEZvcm1hdCksICd1dGYtOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQocmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGggd3Jvbmcgc2lnbmFibGUgSGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIHVuc2lnbmVkVHhuLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBwYXlsb2Fkc0RhdGEsXG4gICAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRUeEZvcm1hdCksICd1dGYtOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgd3JvbmdTaWduYWJsZUhleFZhbHVlcyA9XG4gICAgICAgICcwYTY5NjMyZDcyNjU3MTc1NjU3Mzc0NTIzZGUzYzdjNWI0NjEzMTU1Yjc0ZWRlMmU1NDQ5M2Y2YWNiZThiZjZkOTEwMTU0ZmJiYjNhOThiYTNlMDA5OCc7XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICAgIHR4SW5mbzogd3JvbmdTaWduYWJsZUhleFZhbHVlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ2dlbmVyYXRlZCBzaWduYWJsZUhleCBpcyBub3QgZXF1YWwgdG8gcGFyYW1zLnNpZ25hYmxlSGV4Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZlcmlmaWNhdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YSA9IHtcbiAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAnMDM2YjM4Y2E1ZTYzZTk4MDBiNTA0MGFmNDk4ZWI2ZTlhOWM3N2UyNDRhYzI4NThlZGFmYTRiZDA5MjZhNjM1NzMxYzNmYWJkZTkwMDdhNTc3MWU5MzYyMWQ5ZmNiMWM4Nzk2NjAyMDhkYzc5Y2M2MDlmZThkZGQxODlmN2E5NTVhYicsXG4gICAgICByb290QWRkcmVzczogJ2ZkM2VhZWQzZTIwNjRiZDMwYWI0OTdlMjJlOGFjNWEwZGNhZGQ4MWZhNTM1Mzg3OWRiYWI2NGUyNTllYzcwYzAnLFxuICAgIH07XG5cbiAgICBkZXNjcmliZSgnV2FsbGV0IFZlcnNpb25LZXkgMScsICgpID0+IHtcbiAgICAgIGxldCBrZXljaGFpbnM7XG5cbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGtleWNoYWlucyA9IFtcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIG1lbW8tYmFzZWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcbiAgICAgICAgY29uc3QgYWRkcmVzc1dpdGhNZW1vID0gYCR7cm9vdEFkZHJlc3N9P21lbW9JZD0xMjNgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aXRoIG1lbW9JZD0wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPTBgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gZXh0cmFjdGVkIHJvb3QgZG9lcyBub3QgbWF0Y2ggcHJvdmlkZWQgcm9vdEFkZHJlc3MgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVudEFkZHJlc3MgPSB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtkaWZmZXJlbnRBZGRyZXNzfT9tZW1vSWQ9MTIzYDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRoZSBleHRyYWN0ZWQgcm9vdCAoZGlmZmVyZW50QWRkcmVzcykgZG9lc24ndCBtYXRjaCBwcm92aWRlZCByb290QWRkcmVzc1xuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgJHtyb290QWRkcmVzc30gYnV0IGdvdCAke2RpZmZlcmVudEFkZHJlc3N9YCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHJvb3RBZGRyZXNzIGlzIG1pc3NpbmcgZm9yIHdhbGxldCB2ZXJzaW9uIDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBgJHthZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdyb290QWRkcmVzcyBpcyByZXF1aXJlZCBmb3Igd2FsbGV0IHZlcnNpb24gMScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBtZW1vSWQgaXMgbWlzc2luZyBmb3Igd2FsbGV0IHZlcnNpb24gMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWVtb0lkIGlzIHJlcXVpcmVkIGZvciB3YWxsZXQgdmVyc2lvbiAxIGFkZHJlc3NlcycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGxhcmdlIG1lbW9JZCB2YWx1ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGxhcmdlTWVtb0lkID0gJzkwMDcxOTkyNTQ3NDA5OTEnO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPSR7bGFyZ2VNZW1vSWR9YDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgbWVtby1iYXNlZCBhZGRyZXNzIHdoZW4gcm9vdEFkZHJlc3MgcGFyYW0gaXMgdGhlIG1lbW8tc3VmZml4ZWQgd2FsbGV0IHJlY2VpdmVBZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuXG4gICAgICAgIC8vIFByb2R1Y3Rpb24gc2hhcGUgZnJvbSB3YWxsZXQuY3JlYXRlQWRkcmVzcygpIHZlcmlmaWNhdGlvbjpcbiAgICAgICAgLy8gcm9vdEFkZHJlc3MgcGFyYW0gPSB3YWxsZXQucmVjZWl2ZUFkZHJlc3MuYWRkcmVzcyAobWVtby1zdWZmaXhlZCkuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBgJHtyb290QWRkcmVzc30/bWVtb0lkPTRgLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiBgJHtyb290QWRkcmVzc30/bWVtb0lkPTNgLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiB0aGUgbWVtby1zdWZmaXhlZCByb290QWRkcmVzcyBwYXJhbSBoYXMgYSBkaWZmZXJlbnQgcm9vdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcbiAgICAgICAgY29uc3QgZGlmZmVyZW50QWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGAke2RpZmZlcmVudEFkZHJlc3N9P21lbW9JZD0xMjNgLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiBgJHtyb290QWRkcmVzc30/bWVtb0lkPTNgLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkICR7cm9vdEFkZHJlc3N9IGJ1dCBnb3QgJHtkaWZmZXJlbnRBZGRyZXNzfWApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHJvb3RBZGRyZXNzIGRvZXMgbm90IG1hdGNoIGNvbW1vbktleWNoYWluIGRlcml2YXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFVzZSBhIHJvb3RBZGRyZXNzIHRoYXQgZG9lc24ndCBtYXRjaCB3aGF0J3MgZGVyaXZlZCBmcm9tIGNvbW1vbktleWNoYWluXG4gICAgICAgIGNvbnN0IGludmFsaWRSb290QWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NXaXRoTWVtbyA9IGAke2ludmFsaWRSb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NXaXRoTWVtbyxcbiAgICAgICAgICByb290QWRkcmVzczogaW52YWxpZFJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcm9vdEFkZHJlc3MgaXMgY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZpZWQgYWdhaW5zdCBjb21tb25LZXljaGFpblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogYWRkcmVzcyAke2ludmFsaWRSb290QWRkcmVzc30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1dhbGxldCBWZXJzaW9uS2V5IDIrJywgKCkgPT4ge1xuICAgICAgbGV0IGtleWNoYWlucztcblxuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAga2V5Y2hhaW5zID0gW1xuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICBdO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgVFNTIHJvb3QgYWRkcmVzcyAoaW5kZXggMCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIFRTUyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGludmFsaWRBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGFkZHJlc3MgJHtpbnZhbGlkQWRkcmVzc30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4ga2V5Y2hhaW5zIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IFtdLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzdHJpbmcgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6ICcwJyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQWRkcmVzcyB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzIGZvcm1hdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSAnaW52YWxpZC1hZGRyZXNzJztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogaW52YWxpZEFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgICBrZXljaGFpbnM6IFt7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9XSxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBpbnZhbGlkIGFkZHJlc3M6ICR7aW52YWxpZEFkZHJlc3N9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|