@bitgo/abstract-utxo 11.6.1 → 11.7.0

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.
Files changed (76) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +14 -17
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +54 -86
  4. package/dist/cjs/src/impl/doge/doge.d.ts +0 -2
  5. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
  6. package/dist/cjs/src/impl/doge/doge.js +1 -4
  7. package/dist/cjs/src/keychains.d.ts +1 -2
  8. package/dist/cjs/src/keychains.d.ts.map +1 -1
  9. package/dist/cjs/src/keychains.js +3 -4
  10. package/dist/cjs/src/names.d.ts +0 -23
  11. package/dist/cjs/src/names.d.ts.map +1 -1
  12. package/dist/cjs/src/names.js +2 -140
  13. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  14. package/dist/cjs/src/recovery/backupKeyRecovery.js +3 -3
  15. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  16. package/dist/cjs/src/transaction/decode.js +2 -45
  17. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +0 -2
  18. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  19. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +1 -1
  20. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  21. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +1 -17
  22. package/dist/cjs/src/transaction/index.d.ts +0 -1
  23. package/dist/cjs/src/transaction/index.d.ts.map +1 -1
  24. package/dist/cjs/src/transaction/index.js +1 -2
  25. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  26. package/dist/cjs/src/transaction/signTransaction.js +1 -2
  27. package/dist/cjs/test/unit/address.js +24 -1
  28. package/dist/cjs/test/unit/buildSignSendLegacyFormat.js +3 -3
  29. package/dist/cjs/test/unit/customSigner.js +3 -3
  30. package/dist/cjs/test/unit/prebuildAndSign.js +5 -5
  31. package/dist/cjs/test/unit/signTransaction.js +9 -9
  32. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +15 -1
  33. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -3
  34. package/dist/cjs/test/unit/transaction.js +9 -9
  35. package/dist/cjs/test/unit/verifyTransaction.js +1 -21
  36. package/dist/cjs/test/unit/wallet.js +3 -3
  37. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  38. package/dist/esm/abstractUtxoCoin.d.ts +14 -17
  39. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  40. package/dist/esm/abstractUtxoCoin.js +57 -56
  41. package/dist/esm/impl/doge/doge.d.ts +0 -2
  42. package/dist/esm/impl/doge/doge.d.ts.map +1 -1
  43. package/dist/esm/impl/doge/doge.js +1 -4
  44. package/dist/esm/keychains.d.ts +1 -2
  45. package/dist/esm/keychains.d.ts.map +1 -1
  46. package/dist/esm/keychains.js +3 -4
  47. package/dist/esm/names.d.ts +0 -23
  48. package/dist/esm/names.d.ts.map +1 -1
  49. package/dist/esm/names.js +1 -102
  50. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  51. package/dist/esm/recovery/backupKeyRecovery.js +4 -4
  52. package/dist/esm/transaction/decode.d.ts.map +1 -1
  53. package/dist/esm/transaction/decode.js +2 -12
  54. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +0 -2
  55. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  56. package/dist/esm/transaction/fixedScript/signTransaction.js +1 -1
  57. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  58. package/dist/esm/transaction/fixedScript/verifyTransaction.js +1 -17
  59. package/dist/esm/transaction/index.d.ts +0 -1
  60. package/dist/esm/transaction/index.d.ts.map +1 -1
  61. package/dist/esm/transaction/index.js +1 -2
  62. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  63. package/dist/esm/transaction/signTransaction.js +1 -2
  64. package/package.json +6 -5
  65. package/dist/cjs/src/transaction/fetchInputs.d.ts +0 -27
  66. package/dist/cjs/src/transaction/fetchInputs.d.ts.map +0 -1
  67. package/dist/cjs/src/transaction/fetchInputs.js +0 -111
  68. package/dist/cjs/src/wasmUtil.d.ts +0 -34
  69. package/dist/cjs/src/wasmUtil.d.ts.map +0 -1
  70. package/dist/cjs/src/wasmUtil.js +0 -95
  71. package/dist/esm/transaction/fetchInputs.d.ts +0 -27
  72. package/dist/esm/transaction/fetchInputs.d.ts.map +0 -1
  73. package/dist/esm/transaction/fetchInputs.js +0 -74
  74. package/dist/esm/wasmUtil.d.ts +0 -34
  75. package/dist/esm/wasmUtil.d.ts.map +0 -1
  76. package/dist/esm/wasmUtil.js +0 -54
@@ -58,14 +58,14 @@ function run(coin, inputScripts, txFormat) {
58
58
  const fullSign = !(isTransactionWithReplayProtection || isTransactionWithKeyPathSpend);
59
59
  function getUnspentsForPsbt() {
60
60
  return inputScripts.map((t, index) => {
61
- return utxo_lib_1.testutil.toUnspent({ scriptType: t, value: t === 'p2shP2pk' ? BigInt(1000) : BigInt(value) }, index, coin.network, walletKeys);
61
+ return utxo_lib_1.testutil.toUnspent({ scriptType: t, value: t === 'p2shP2pk' ? BigInt(1000) : BigInt(value) }, index, (0, util_1.getNetworkForCoinName)(coin.name), walletKeys);
62
62
  });
63
63
  }
64
64
  function toTxnInputScriptType(type) {
65
65
  return type === 'p2shP2pk' ? 'replayProtection' : type === 'taprootKeyPathSpend' ? 'p2trMusig2' : type;
66
66
  }
67
67
  function getUnspents() {
68
- return inputScripts.map((type, i) => (0, util_1.mockUnspent)(coin.network, walletKeys, toTxnInputScriptType(type), i, value));
68
+ return inputScripts.map((type, i) => (0, util_1.mockUnspent)((0, util_1.getNetworkForCoinName)(coin.name), walletKeys, toTxnInputScriptType(type), i, value));
69
69
  }
70
70
  function getOutputAddress(rootWalletKeys) {
71
71
  return (0, src_1.generateAddress)(coin.name, {
@@ -94,7 +94,7 @@ function run(coin, inputScripts, txFormat) {
94
94
  scope = nock(bgUrl)
95
95
  .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/signpsbt`, (body) => body.psbt)
96
96
  .reply(200, (_uri, requestBody) => {
97
- const networkName = utxolib.getNetworkName(coin.network);
97
+ const networkName = utxolib.getNetworkName((0, util_1.getNetworkForCoinName)(coin.name));
98
98
  const reqBytes = Buffer.from(requestBody.psbt, 'hex');
99
99
  const reqPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(reqBytes, networkName);
100
100
  const cosignerWasm = wasm_utxo_1.BIP32.fromBase58(cosigner.toBase58());
@@ -124,7 +124,7 @@ function run(coin, inputScripts, txFormat) {
124
124
  const outputs = [
125
125
  { address: getOutputAddress((0, util_1.getWalletKeys)('test')), value: unspentSum - BigInt(1000) },
126
126
  ];
127
- const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, coin.network, walletKeys, 'unsigned', {
127
+ const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, (0, util_1.getNetworkForCoinName)(coin.name), walletKeys, 'unsigned', {
128
128
  p2shP2pkKey: (0, src_1.getReplayProtectionPubkeys)(coin.name)[0],
129
129
  });
130
130
  utxolib.bitgo.addXpubsToPsbt(psbt, walletKeys);
@@ -133,7 +133,7 @@ function run(coin, inputScripts, txFormat) {
133
133
  async function getTransactionStages() {
134
134
  const prebuild = txFormat === 'psbt'
135
135
  ? createPrebuildPsbt()
136
- : (0, util_1.createPrebuildTransaction)(coin.network, getUnspents(), getOutputAddress(walletKeys));
136
+ : (0, util_1.createPrebuildTransaction)((0, util_1.getNetworkForCoinName)(coin.name), getUnspents(), getOutputAddress(walletKeys));
137
137
  const halfSignedUserBitGo = await createHalfSignedTransaction(prebuild, walletKeys.user, walletKeys.bitgo);
138
138
  const fullSignedUserBitGo = fullSign && !isTransactionWithP2trMusig2
139
139
  ? await createFullSignedTransaction(halfSignedUserBitGo, walletKeys.bitgo, walletKeys.user)
@@ -168,12 +168,12 @@ function run(coin, inputScripts, txFormat) {
168
168
  ? undefined
169
169
  : v instanceof utxolib.bitgo.UtxoTransaction
170
170
  ? (0, util_1.transactionToObj)(v)
171
- : (0, util_1.transactionHexToObj)(v.txHex, coin.network, amountType));
171
+ : (0, util_1.transactionHexToObj)(v.txHex, (0, util_1.getNetworkForCoinName)(coin.name), amountType));
172
172
  }
173
173
  (0, util_1.assertEqualJSON)(toTransactionStagesObj(transactionStages), await (0, util_1.getFixture)(coin, `transactions-${inputScripts.map((t) => toTxnInputScriptType(t)).join('-')}`, toTransactionStagesObj(transactionStages)));
174
174
  });
175
175
  function testPsbtValidSignatures(tx, signedBy) {
176
- const psbt = utxolib.bitgo.createPsbtFromHex(tx.txHex, coin.network);
176
+ const psbt = utxolib.bitgo.createPsbtFromHex(tx.txHex, (0, util_1.getNetworkForCoinName)(coin.name));
177
177
  const unspents = getUnspentsForPsbt();
178
178
  psbt.data.inputs.forEach((input, index) => {
179
179
  const unspent = unspents[index];
@@ -198,7 +198,7 @@ function run(coin, inputScripts, txFormat) {
198
198
  script: Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(u.address, coin.name)),
199
199
  value: u.value,
200
200
  }));
201
- const transaction = utxolib.bitgo.createTransactionFromBuffer(Buffer.from(tx.txHex, 'hex'), coin.network, { amountType });
201
+ const transaction = utxolib.bitgo.createTransactionFromBuffer(Buffer.from(tx.txHex, 'hex'), (0, util_1.getNetworkForCoinName)(coin.name), { amountType });
202
202
  transaction.ins.forEach((input, index) => {
203
203
  if (inputScripts[index] === 'p2shP2pk') {
204
204
  assert.ok(coin.isBitGoTaintedUnspent(unspents[index]));
@@ -298,4 +298,4 @@ describe('Transaction Suite', function () {
298
298
  });
299
299
  });
300
300
  });
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQkFBZTtBQUNmLCtDQUFpQztBQUVqQywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLDZCQUE4QjtBQUM5Qiw4Q0FBa0U7QUFDbEUsZ0RBQW9GO0FBQ3BGLDhDQU15QjtBQUV6QixtQ0FBMEY7QUFHMUYsaUNBZWdCO0FBRWhCLFNBQVMsR0FBRyxDQUNWLElBQXNCLEVBQ3RCLFlBQXdDLEVBQ3hDLFFBQTJCO0lBRTNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksUUFBUSxFQUFFLEVBQUUsY0FBYyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM3QixNQUFNLEtBQUssR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRTdELE1BQU0sNkJBQTZCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLHFCQUFxQixDQUFDLENBQUM7UUFDNUYsTUFBTSxpQ0FBaUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDckYsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFB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QUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFtQixDQUFDO2dCQUNyRixNQUFNLFFBQVEsR0FDWixRQUFRLEtBQUssTUFBTTtvQkFDakIsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLGdCQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFZLEVBQUUsQ0FBQyxDQUFDO29CQUNyRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQXNCO0lBQzVDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBQSxxQkFBYyxFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsUUFBUSxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLElBQUEsc0JBQWUsR0FBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2pDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQzdCLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ21vY2hhJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlLCBiaXRnbywgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgZml4ZWRTY3JpcHRXYWxsZXQsIEJJUDMyIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQge1xuICBjb21tb24sXG4gIEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24sXG4gIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sXG4gIFRyaXBsZSxcbiAgV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgZ2VuZXJhdGVBZGRyZXNzLCBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7XG4gIGFzc2VydEVxdWFsSlNPTixcbiAgZ2V0Rml4dHVyZSxcbiAgZ2V0VXR4b1dhbGxldCxcbiAgbW9ja1Vuc3BlbnQsXG4gIElucHV0U2NyaXB0VHlwZSxcbiAgVHJhbnNhY3Rpb25PYmosXG4gIHRyYW5zYWN0aW9uVG9PYmosXG4gIHRyYW5zYWN0aW9uSGV4VG9PYmosXG4gIGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb24sXG4gIGdldERlZmF1bHRXYWxsZXRLZXlzLFxuICBnZXRXYWxsZXRLZXlzLFxuICBkZWZhdWx0Qml0R28sXG4gIGdldE1pblV0eG9Db2lucyxcbiAgZ2V0U2NyaXB0VHlwZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbmZ1bmN0aW9uIHJ1bjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgaW5wdXRTY3JpcHRzOiB0ZXN0dXRpbC5JbnB1dFNjcmlwdFR5cGVbXSxcbiAgdHhGb3JtYXQ6ICdsZWdhY3knIHwgJ3BzYnQnXG4pIHtcbiAgY29uc3QgYW1vdW50VHlwZSA9IGNvaW4uYW1vdW50VHlwZTtcbiAgY29uc3QgdGl0bGUgPSBbaW5wdXRTY3JpcHRzLmpvaW4oJywnKSwgYHR4Rm9ybWF0PSR7dHhGb3JtYXR9YCwgYGFtb3VudFR5cGU9JHthbW91bnRUeXBlfWBdO1xuICBkZXNjcmliZShgJHt0aXRsZS5qb2luKCcgJyl9YCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnNoUDJwaycpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ciA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0cicpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMiA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0ck11c2lnMicpO1xuXG4gICAgY29uc3QgdmFsdWUgPSAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBCaWdJbnQoJzEwOTk5OTk5ODAwMDAwMDAxJykgOiAxZTgpIGFzIFROdW1iZXI7XG4gICAgY29uc3Qgd2FsbGV0ID0gZ2V0VXR4b1dhbGxldChjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLCBjb2luOiBjb2luLmdldENoYWluKCkgfSk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG5cbiAgICBjb25zdCBmdWxsU2lnbiA9ICEoaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uIHx8IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKTtcblxuICAgIGZ1bmN0aW9uIGdldFVuc3BlbnRzRm9yUHNidCgpOiBVbnNwZW50PGJpZ2ludD5bXSB7XG4gICAgICByZXR1cm4gaW5wdXRTY3JpcHRzLm1hcCgodCwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRlc3R1dGlsLnRvVW5zcGVudChcbiAgICAgICAgICB7IHNjcmlwdFR5cGU6IHQsIHZhbHVlOiB0ID09PSAncDJzaFAycGsnID8gQmlnSW50KDEwMDApIDogQmlnSW50KHZhbHVlKSB9LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGNvaW4ubmV0d29yayxcbiAgICAgICAgICB3YWxsZXRLZXlzXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b1R4bklucHV0U2NyaXB0VHlwZSh0eXBlOiB0ZXN0dXRpbC5JbnB1dFNjcmlwdFR5cGUpOiBJbnB1dFNjcmlwdFR5cGUge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICdwMnNoUDJwaycgPyAncmVwbGF5UHJvdGVjdGlvbicgOiB0eXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiB0eXBlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFVuc3BlbnRzKCk6IFVuc3BlbnQ8VE51bWJlcj5bXSB7XG4gICAgICByZXR1cm4gaW5wdXRTY3JpcHRzLm1hcCgodHlwZSwgaSkgPT5cbiAgICAgICAgbW9ja1Vuc3BlbnQ8VE51bWJlcj4oY29pbi5uZXR3b3JrLCB3YWxsZXRLZXlzLCB0b1R4bklucHV0U2NyaXB0VHlwZSh0eXBlKSwgaSwgdmFsdWUpXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE91dHB1dEFkZHJlc3Mocm9vdFdhbGxldEtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQWRkcmVzcyhjb2luLm5hbWUsIHtcbiAgICAgICAga2V5Y2hhaW5zOiByb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiAoeyBwdWI6IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0pKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNpZ25QYXJhbXMoXG4gICAgICBwcmVidWlsZEhleDogc3RyaW5nLFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFdhbGxldFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICAgICAgY29uc3QgdHhJbmZvID0ge1xuICAgICAgICB1bnNwZW50czogdHhGb3JtYXQgPT09ICdwc2J0JyA/IHVuZGVmaW5lZCA6IGdldFVuc3BlbnRzKCksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHdhbGxldElkOiBpc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZCA/IHdhbGxldC5pZCgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHR4SGV4OiBwcmVidWlsZEhleCxcbiAgICAgICAgICB0eEluZm8sXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogc2lnbmVyLnRvQmFzZTU4KCksXG4gICAgICAgIHB1YnM6IHdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpLFxuICAgICAgICBjb3NpZ25lclB1YjogY29zaWduZXIubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgICAgICBleHRyYWN0VHJhbnNhY3Rpb246IGZhbHNlLFxuICAgICAgfSBhcyBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihcbiAgICAgIHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gICAgICBzaWduZXI6IEJJUDMySW50ZXJmYWNlLFxuICAgICAgY29zaWduZXI6IEJJUDMySW50ZXJmYWNlXG4gICAgKTogUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPiB7XG4gICAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQpIHtcbiAgICAgICAgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NpZ25wc2J0YCwgKGJvZHkpID0+IGJvZHkucHNidClcbiAgICAgICAgICAucmVwbHkoMjAwLCAoX3VyaTogc3RyaW5nLCByZXF1ZXN0Qm9keTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGNvaW4ubmV0d29yaykgYXMgZml4ZWRTY3JpcHRXYWxsZXQuTmV0d29ya05hbWU7XG4gICAgICAgICAgICBjb25zdCByZXFCeXRlcyA9IEJ1ZmZlci5mcm9tKChyZXF1ZXN0Qm9keSBhcyB7IHBzYnQ6IHN0cmluZyB9KS5wc2J0LCAnaGV4Jyk7XG4gICAgICAgICAgICBjb25zdCByZXFQc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhyZXFCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29zaWduZXJXYXNtID0gQklQMzIuZnJvbUJhc2U1OChjb3NpZ25lci50b0Jhc2U1OCgpKTtcbiAgICAgICAgICAgIHJlcVBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXMoY29zaWduZXJXYXNtKTtcbiAgICAgICAgICAgIHJldHVybiB7IHBzYnQ6IEJ1ZmZlci5mcm9tKHJlcVBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBoYWxmLXNpZ24gd2l0aCB0aGUgdXNlciBrZXlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKFxuICAgICAgICBnZXRTaWduUGFyYW1zKHByZWJ1aWxkLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLCBzaWduZXIsIGNvc2lnbmVyKVxuICAgICAgKSkgYXMgUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPjtcblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKFxuICAgICAgaGFsZlNpZ25lZDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgICApOiBQcm9taXNlPEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAgIHJldHVybiAoYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIC4uLmdldFNpZ25QYXJhbXMoaGFsZlNpZ25lZC50eEhleCwgc2lnbmVyLCBjb3NpZ25lciksXG4gICAgICAgIGlzTGFzdFNpZ25hdHVyZTogdHJ1ZSxcbiAgICAgIH0pKSBhcyBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIHR5cGUgVHJhbnNhY3Rpb25TdGFnZXMgPSB7XG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgICAgaGFsZlNpZ25lZFVzZXJCYWNrdXA/OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uO1xuICAgICAgaGFsZlNpZ25lZFVzZXJCaXRHbzogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQmFja3VwPzogRnVsbHlTaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQml0R28/OiBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH07XG5cbiAgICB0eXBlIFRyYW5zYWN0aW9uT2JqU3RhZ2VzID0gUmVjb3JkPGtleW9mIFRyYW5zYWN0aW9uU3RhZ2VzLCBUcmFuc2FjdGlvbk9iaj47XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQcmVidWlsZFBzYnQoKSB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBpbnB1dFNjcmlwdHMubWFwKFxuICAgICAgICAodCk6IHRlc3R1dGlsLklucHV0ID0+ICh7XG4gICAgICAgICAgc2NyaXB0VHlwZTogdCxcbiAgICAgICAgICB2YWx1ZTogdCA9PT0gJ3Ayc2hQMnBrJyA/IEJpZ0ludCgxMDAwKSA6IEJpZ0ludCh2YWx1ZSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFtcbiAgICAgICAgeyBhZGRyZXNzOiBnZXRPdXRwdXRBZGRyZXNzKGdldFdhbGxldEtleXMoJ3Rlc3QnKSksIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHdhbGxldEtleXMsICd1bnNpZ25lZCcsIHtcbiAgICAgICAgcDJzaFAycGtLZXk6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW4ubmFtZSlbMF0sXG4gICAgICB9KTtcbiAgICAgIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgd2FsbGV0S2V5cyk7XG4gICAgICByZXR1cm4gcHNidDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblN0YWdlcygpOiBQcm9taXNlPFRyYW5zYWN0aW9uU3RhZ2VzPiB7XG4gICAgICBjb25zdCBwcmVidWlsZCA9XG4gICAgICAgIHR4Rm9ybWF0ID09PSAncHNidCdcbiAgICAgICAgICA/IGNyZWF0ZVByZWJ1aWxkUHNidCgpXG4gICAgICAgICAgOiBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uPFROdW1iZXI+KGNvaW4ubmV0d29yaywgZ2V0VW5zcGVudHMoKSwgZ2V0T3V0cHV0QWRkcmVzcyh3YWxsZXRLZXlzKSk7XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRVc2VyQml0R28gPSBhd2FpdCBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24ocHJlYnVpbGQsIHdhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVXNlckJpdEdvID1cbiAgICAgICAgZnVsbFNpZ24gJiYgIWlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMlxuICAgICAgICAgID8gYXdhaXQgY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKGhhbGZTaWduZWRVc2VyQml0R28sIHdhbGxldEtleXMuYml0Z28sIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFVzZXJCYWNrdXAgPVxuICAgICAgICAhaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgJiYgISh0eEZvcm1hdCA9PT0gJ3BzYnQnICYmIGlzVHJhbnNhY3Rpb25XaXRoUDJ0cilcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihwcmVidWlsZCwgd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJhY2t1cClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRVc2VyQmFja3VwID1cbiAgICAgICAgZnVsbFNpZ24gJiYgaGFsZlNpZ25lZFVzZXJCYWNrdXBcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihoYWxmU2lnbmVkVXNlckJhY2t1cCwgd2FsbGV0S2V5cy5iYWNrdXAsIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlYnVpbGQsXG4gICAgICAgIGhhbGZTaWduZWRVc2VyQmFja3VwLFxuICAgICAgICBoYWxmU2lnbmVkVXNlckJpdEdvLFxuICAgICAgICBmdWxsU2lnbmVkVXNlckJhY2t1cCxcbiAgICAgICAgZnVsbFNpZ25lZFVzZXJCaXRHbyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uU3RhZ2VzOiBUcmFuc2FjdGlvblN0YWdlcztcblxuICAgIGJlZm9yZSgncHJlcGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyYW5zYWN0aW9uU3RhZ2VzID0gYXdhaXQgZ2V0VHJhbnNhY3Rpb25TdGFnZXMoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChub2NrLmNsZWFuQWxsKTtcblxuICAgIGl0KCdtYXRjaCBmaXh0dXJlcycsIGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBNb2NoYS5Db250ZXh0KSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICAvLyBUT0RPIChtYXliZSkgLSBvbmNlIGZ1bGwgUFNCVCBzdXBwb3J0IGlzIGFkZGVkIHRvIGFic3RyYWN0LXV0eG8gbW9kdWxlLCBjdXN0b20gSlNPTiByZXByZXNlbnRhdGlvbiBvZiBQU0JUIGNhbiBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgaGVyZS5cbiAgICAgICAgLy8gc2lnbmF0dXJlcyBvZiB0YXByb290S2V5UGF0aFNwZW5kcyBhcmUgcmFuZG9tIHNpbmNlIHJhbmRvbSBuYXR1cmUgb2YgTXVTaWcyIG5vbmNlLCBzbyBwc2J0IGhleCBjb21wYXJpc29uIGFsc28gd29udCB3b3JrLlxuXG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvblN0YWdlc09iaihzdGFnZXM6IFRyYW5zYWN0aW9uU3RhZ2VzKTogVHJhbnNhY3Rpb25PYmpTdGFnZXMge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMoc3RhZ2VzLCAodikgPT5cbiAgICAgICAgICB2ID09PSB1bmRlZmluZWQgfHwgdiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgdiBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogdiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgICA/IHRyYW5zYWN0aW9uVG9PYmo8VE51bWJlcj4odilcbiAgICAgICAgICAgIDogdHJhbnNhY3Rpb25IZXhUb09iaih2LnR4SGV4LCBjb2luLm5ldHdvcmssIGFtb3VudFR5cGUpXG4gICAgICAgICkgYXMgVHJhbnNhY3Rpb25PYmpTdGFnZXM7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydEVxdWFsSlNPTihcbiAgICAgICAgdG9UcmFuc2FjdGlvblN0YWdlc09iaih0cmFuc2FjdGlvblN0YWdlcyksXG4gICAgICAgIGF3YWl0IGdldEZpeHR1cmUoXG4gICAgICAgICAgY29pbixcbiAgICAgICAgICBgdHJhbnNhY3Rpb25zLSR7aW5wdXRTY3JpcHRzLm1hcCgodCkgPT4gdG9UeG5JbnB1dFNjcmlwdFR5cGUodCkpLmpvaW4oJy0nKX1gLFxuICAgICAgICAgIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmoodHJhbnNhY3Rpb25TdGFnZXMpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiB0ZXN0UHNidFZhbGlkU2lnbmF0dXJlcyh0eDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbiwgc2lnbmVkQnk6IEJJUDMySW50ZXJmYWNlW10pIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4LnR4SGV4LCBjb2luLm5ldHdvcmspO1xuICAgICAgY29uc3QgdW5zcGVudHMgPSBnZXRVbnNwZW50c0ZvclBzYnQoKTtcbiAgICAgIHBzYnQuZGF0YS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbmRleF07XG4gICAgICAgIGlmICghdXR4b2xpYi5iaXRnby5pc1dhbGxldFVuc3BlbnQodW5zcGVudCkpIHtcbiAgICAgICAgICBhc3NlcnQub2sodXR4b2xpYi5iaXRnby5nZXRQc2J0SW5wdXRTY3JpcHRUeXBlKGlucHV0KSwgJ3Ayc2hQMnBrJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdhbGxldFVuc3BlbnQgPSB1bnNwZW50IGFzIFdhbGxldFVuc3BlbnQ8YmlnaW50PjtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IHdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCh3YWxsZXRVbnNwZW50LmNoYWluLCB3YWxsZXRVbnNwZW50LmluZGV4KS5wdWJsaWNLZXlzO1xuICAgICAgICBwdWJrZXlzLmZvckVhY2goKHBrLCBwa0luZGV4KSA9PiB7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgICAgcHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0Q29tbW9uKGluZGV4LCBwayksXG4gICAgICAgICAgICBzaWduZWRCeS5pbmNsdWRlcyh3YWxsZXRLZXlzLnRyaXBsZVtwa0luZGV4XSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRlc3RWYWxpZFNpZ25hdHVyZXMoXG4gICAgICB0eDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbiB8IEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24sXG4gICAgICBzaWduZWRCeTogQklQMzJJbnRlcmZhY2VbXSxcbiAgICAgIHNpZ246ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJ1xuICAgICkge1xuICAgICAgaWYgKHR4Rm9ybWF0ID09PSAncHNidCcpIHtcbiAgICAgICAgdGVzdFBzYnRWYWxpZFNpZ25hdHVyZXModHgsIHNpZ25lZEJ5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdW5zcGVudHMgPSBnZXRVbnNwZW50cygpO1xuICAgICAgY29uc3QgcHJldk91dHB1dHMgPSB1bnNwZW50cy5tYXAoXG4gICAgICAgICh1KTogdXR4b2xpYi5UeE91dHB1dDxUTnVtYmVyPiA9PiAoe1xuICAgICAgICAgIHNjcmlwdDogQnVmZmVyLmZyb20od2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbih1LmFkZHJlc3MsIGNvaW4ubmFtZSkpLFxuICAgICAgICAgIHZhbHVlOiB1LnZhbHVlLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcjxUTnVtYmVyPihcbiAgICAgICAgQnVmZmVyLmZyb20odHgudHhIZXgsICdoZXgnKSxcbiAgICAgICAgY29pbi5uZXR3b3JrLFxuICAgICAgICB7IGFtb3VudFR5cGUgfVxuICAgICAgKTtcbiAgICAgIHRyYW5zYWN0aW9uLmlucy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGlucHV0U2NyaXB0c1tpbmRleF0gPT09ICdwMnNoUDJwaycpIHtcbiAgICAgICAgICBhc3NlcnQub2soY29pbi5pc0JpdEdvVGFpbnRlZFVuc3BlbnQodW5zcGVudHNbaW5kZXhdKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2luZGV4XSBhcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+O1xuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG5cbiAgICAgICAgcHVia2V5cy5mb3JFYWNoKChwaywgcGtJbmRleCkgPT4ge1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgICAgIHV0eG9saWIuYml0Z28udmVyaWZ5U2lnbmF0dXJlPFROdW1iZXI+KFxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHByZXZPdXRwdXRzW2luZGV4XS52YWx1ZSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmxpY0tleTogcGssXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByZXZPdXRwdXRzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc2lnbmVkQnkuaW5jbHVkZXMod2FsbGV0S2V5cy50cmlwbGVbcGtJbmRleF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB0ZXN0RXhwbGFpblR4KFxuICAgICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgICB0eEhleDogc3RyaW5nLFxuICAgICAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgICAgIHB1YnM6IFRyaXBsZTxzdHJpbmc+IHwgdW5kZWZpbmVkXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgIHVuc3BlbnRzLFxuICAgICAgICB9LFxuICAgICAgICBwdWJzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJvcGVydGllcyA9IFsnaWQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRBbW91bnQnXTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGV4cGVjdGVkUHJvcGVydGllcykge1xuICAgICAgICBhc3NlcnQub2socHJvcCBpbiBleHBsYW5hdGlvbiwgYGV4cGVjdGVkIGV4cGxhbmF0aW9uIHRvIGhhdmUgcHJvcGVydHkgJyR7cHJvcH0nYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnbmF0dXJlQ291bnQgPVxuICAgICAgICBzdGFnZU5hbWUgPT09ICdwcmVidWlsZCcgfHwgcHVicyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBzdGFnZU5hbWUuc3RhcnRzV2l0aCgnaGFsZlNpZ25lZCcpXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiBzdGFnZU5hbWUuc3RhcnRzV2l0aCgnZnVsbFNpZ25lZCcpXG4gICAgICAgICAgPyAyXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICgnaW5wdXRTaWduYXR1cmVzJyBpbiBleHBsYW5hdGlvbikge1xuICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICAgIGV4cGxhbmF0aW9uLmlucHV0U2lnbmF0dXJlcyxcbiAgICAgICAgICAvLyBGSVhNRShCRy0zNTE1NCk6IGltcGxlbWVudCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZvciByZXBsYXkgcHJvdGVjdGlvbiBpbnB1dHNcbiAgICAgICAgICBpbnB1dFNjcmlwdHMubWFwKCh0eXBlKSA9PiAodHlwZSA9PT0gJ3Ayc2hQMnBrJyA/IDAgOiBleHBlY3RlZFNpZ25hdHVyZUNvdW50KSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICgnc2lnbmF0dXJlcycgaW4gZXhwbGFuYXRpb24pIHtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5zaWduYXR1cmVzLCBleHBlY3RlZFNpZ25hdHVyZUNvdW50KTtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VBbW91bnQsICcwJyk7IC8vIG5vIGNoYW5nZSBhZGRyZXNzZXMgZ2l2ZW5cbiAgICAgIH1cbiAgICAgIGxldCBleHBlY3RlZE91dHB1dEFtb3VudCA9XG4gICAgICAgIEJpZ0ludCgodHhGb3JtYXQgPT09ICdwc2J0JyA/IGdldFVuc3BlbnRzRm9yUHNidCgpIDogZ2V0VW5zcGVudHMoKSkubGVuZ3RoKSAqIEJpZ0ludCh2YWx1ZSk7XG4gICAgICBpbnB1dFNjcmlwdHMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICAgIC8vIHJlcGxheVByb3RlY3Rpb24gdW5zcGVudHMgaGF2ZSB2YWx1ZSAxMDAwXG4gICAgICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgLT0gQmlnSW50KHZhbHVlKTtcbiAgICAgICAgICBleHBlY3RlZE91dHB1dEFtb3VudCArPSBCaWdJbnQoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgLT0gQmlnSW50KDEwMDApOyAvLyBmZWUgb2YgMTAwMFxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsIGV4cGVjdGVkT3V0cHV0QW1vdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGl0KCdoYXZlIHZhbGlkIHNpZ25hdHVyZSBmb3IgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuaGFsZlNpZ25lZFVzZXJCYWNrdXApIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5oYWxmU2lnbmVkVXNlckJhY2t1cCwgW3dhbGxldEtleXMudXNlcl0sICdoYWxmc2lnbmVkJyk7XG4gICAgICB9XG4gICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmhhbGZTaWduZWRVc2VyQml0R28sIFt3YWxsZXRLZXlzLnVzZXJdLCAnaGFsZnNpZ25lZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhdmUgdmFsaWQgc2lnbmF0dXJlcyBmb3IgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWZ1bGxTaWduKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJhY2t1cCkge1xuICAgICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQmFja3VwLCBbd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJhY2t1cF0sICdmdWxsc2lnbmVkJyk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuZnVsbFNpZ25lZFVzZXJCaXRHbykge1xuICAgICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQml0R28sIFt3YWxsZXRLZXlzLnVzZXIsIHdhbGxldEtleXMuYml0Z29dLCAnZnVsbHNpZ25lZCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ2hhdmUgY29ycmVjdCByZXN1bHRzIGZvciBleHBsYWluVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtzdGFnZU5hbWUsIHN0YWdlVHhdIG9mIE9iamVjdC5lbnRyaWVzKHRyYW5zYWN0aW9uU3RhZ2VzKSkge1xuICAgICAgICBpZiAoIXN0YWdlVHgpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR4SGV4ID1cbiAgICAgICAgICBzdGFnZVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8fCBzdGFnZVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25cbiAgICAgICAgICAgID8gc3RhZ2VUeC50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICAgOiBzdGFnZVR4IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0XG4gICAgICAgICAgICA/IEJ1ZmZlci5mcm9tKHN0YWdlVHguc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICAgOiBzdGFnZVR4LnR4SGV4O1xuXG4gICAgICAgIGNvbnN0IHB1YnMgPSB3YWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgICAgY29uc3QgdW5zcGVudHMgPVxuICAgICAgICAgIHR4Rm9ybWF0ID09PSAncHNidCdcbiAgICAgICAgICAgID8gZ2V0VW5zcGVudHNGb3JQc2J0KCkubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogYml0Z28udG9UTnVtYmVyKHUudmFsdWUsIGFtb3VudFR5cGUpIGFzIFROdW1iZXIgfSkpXG4gICAgICAgICAgICA6IGdldFVuc3BlbnRzKCk7XG4gICAgICAgIGF3YWl0IHRlc3RFeHBsYWluVHgoc3RhZ2VOYW1lLCB0eEhleCwgdW5zcGVudHMsIHB1YnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuVGVzdEZvckNvaW4oY29pbjogQWJzdHJhY3RVdHhvQ29pbikge1xuICBydW4oY29pbiwgZ2V0U2NyaXB0VHlwZXMoY29pbiwgJ3BzYnQnKSwgJ3BzYnQnKTtcbn1cblxuZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFN1aXRlJywgZnVuY3Rpb24gKCkge1xuICBnZXRNaW5VdHhvQ29pbnMoKS5mb3JFYWNoKChjb2luKSA9PiB7XG4gICAgZGVzY3JpYmUoYCR7Y29pbi5nZXRDaGFpbigpfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJ1blRlc3RGb3JDb2luKGNvaW4pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQkFBZTtBQUNmLCtDQUFpQztBQUVqQywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLDZCQUE4QjtBQUM5Qiw4Q0FBa0U7QUFDbEUsZ0RBQW9GO0FBQ3BGLDhDQU15QjtBQUV6QixtQ0FBMEY7QUFHMUYsaUNBZ0JnQjtBQUVoQixTQUFTLEdBQUcsQ0FDVixJQUFzQixFQUN0QixZQUF3QyxFQUN4QyxRQUEyQjtJQUUzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLFFBQVEsRUFBRSxFQUFFLGNBQWMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMzRixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsbUJBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUU3RCxNQUFNLDZCQUE2QixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVGLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1B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USxFQUFFLEVBQUUsRUFBRTtZQUM3QixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSwgYml0Z28sIHRlc3R1dGlsIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0LCBCSVAzMiB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHtcbiAgY29tbW9uLFxuICBGdWxseVNpZ25lZFRyYW5zYWN0aW9uLFxuICBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICBUcmlwbGUsXG4gIFdhbGxldFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIGdlbmVyYXRlQWRkcmVzcywgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50LCBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vc3JjL3Vuc3BlbnQnO1xuXG5pbXBvcnQge1xuICBhc3NlcnRFcXVhbEpTT04sXG4gIGdldEZpeHR1cmUsXG4gIGdldFV0eG9XYWxsZXQsXG4gIG1vY2tVbnNwZW50LFxuICBJbnB1dFNjcmlwdFR5cGUsXG4gIFRyYW5zYWN0aW9uT2JqLFxuICB0cmFuc2FjdGlvblRvT2JqLFxuICB0cmFuc2FjdGlvbkhleFRvT2JqLFxuICBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uLFxuICBnZXREZWZhdWx0V2FsbGV0S2V5cyxcbiAgZ2V0V2FsbGV0S2V5cyxcbiAgZGVmYXVsdEJpdEdvLFxuICBnZXRNaW5VdHhvQ29pbnMsXG4gIGdldE5ldHdvcmtGb3JDb2luTmFtZSxcbiAgZ2V0U2NyaXB0VHlwZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbmZ1bmN0aW9uIHJ1bjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgaW5wdXRTY3JpcHRzOiB0ZXN0dXRpbC5JbnB1dFNjcmlwdFR5cGVbXSxcbiAgdHhGb3JtYXQ6ICdsZWdhY3knIHwgJ3BzYnQnXG4pIHtcbiAgY29uc3QgYW1vdW50VHlwZSA9IGNvaW4uYW1vdW50VHlwZTtcbiAgY29uc3QgdGl0bGUgPSBbaW5wdXRTY3JpcHRzLmpvaW4oJywnKSwgYHR4Rm9ybWF0PSR7dHhGb3JtYXR9YCwgYGFtb3VudFR5cGU9JHthbW91bnRUeXBlfWBdO1xuICBkZXNjcmliZShgJHt0aXRsZS5qb2luKCcgJyl9YCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnNoUDJwaycpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ciA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0cicpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMiA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0ck11c2lnMicpO1xuXG4gICAgY29uc3QgdmFsdWUgPSAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBCaWdJbnQoJzEwOTk5OTk5ODAwMDAwMDAxJykgOiAxZTgpIGFzIFROdW1iZXI7XG4gICAgY29uc3Qgd2FsbGV0ID0gZ2V0VXR4b1dhbGxldChjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLCBjb2luOiBjb2luLmdldENoYWluKCkgfSk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG5cbiAgICBjb25zdCBmdWxsU2lnbiA9ICEoaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uIHx8IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKTtcblxuICAgIGZ1bmN0aW9uIGdldFVuc3BlbnRzRm9yUHNidCgpOiBVbnNwZW50PGJpZ2ludD5bXSB7XG4gICAgICByZXR1cm4gaW5wdXRTY3JpcHRzLm1hcCgodCwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRlc3R1dGlsLnRvVW5zcGVudChcbiAgICAgICAgICB7IHNjcmlwdFR5cGU6IHQsIHZhbHVlOiB0ID09PSAncDJzaFAycGsnID8gQmlnSW50KDEwMDApIDogQmlnSW50KHZhbHVlKSB9LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgICAgIHdhbGxldEtleXNcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvVHhuSW5wdXRTY3JpcHRUeXBlKHR5cGU6IHRlc3R1dGlsLklucHV0U2NyaXB0VHlwZSk6IElucHV0U2NyaXB0VHlwZSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3Ayc2hQMnBrJyA/ICdyZXBsYXlQcm90ZWN0aW9uJyA6IHR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IHR5cGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0VW5zcGVudHMoKTogVW5zcGVudDxUTnVtYmVyPltdIHtcbiAgICAgIHJldHVybiBpbnB1dFNjcmlwdHMubWFwKCh0eXBlLCBpKSA9PlxuICAgICAgICBtb2NrVW5zcGVudDxUTnVtYmVyPihnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgd2FsbGV0S2V5cywgdG9UeG5JbnB1dFNjcmlwdFR5cGUodHlwZSksIGksIHZhbHVlKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRPdXRwdXRBZGRyZXNzKHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uYW1lLCB7XG4gICAgICAgIGtleWNoYWluczogcm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gKHsgcHViOiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9KSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTaWduUGFyYW1zKFxuICAgICAgcHJlYnVpbGRIZXg6IHN0cmluZyxcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgICApOiBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgICAgIGNvbnN0IHR4SW5mbyA9IHtcbiAgICAgICAgdW5zcGVudHM6IHR4Rm9ybWF0ID09PSAncHNidCcgPyB1bmRlZmluZWQgOiBnZXRVbnNwZW50cygpLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB3YWxsZXRJZDogaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgPyB3YWxsZXQuaWQoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eEhleDogcHJlYnVpbGRIZXgsXG4gICAgICAgICAgdHhJbmZvLFxuICAgICAgICB9LFxuICAgICAgICBwcnY6IHNpZ25lci50b0Jhc2U1OCgpLFxuICAgICAgICBwdWJzOiB3YWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSxcbiAgICAgICAgY29zaWduZXJQdWI6IGNvc2lnbmVyLm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgICAgICAgZXh0cmFjdFRyYW5zYWN0aW9uOiBmYWxzZSxcbiAgICAgIH0gYXMgV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFByb21pc2U8SGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgICAgbGV0IHNjb3BlOiBub2NrLlNjb3BlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKSB7XG4gICAgICAgIHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zaWducHNidGAsIChib2R5KSA9PiBib2R5LnBzYnQpXG4gICAgICAgICAgLnJlcGx5KDIwMCwgKF91cmk6IHN0cmluZywgcmVxdWVzdEJvZHk6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShcbiAgICAgICAgICAgICAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSlcbiAgICAgICAgICAgICkgYXMgZml4ZWRTY3JpcHRXYWxsZXQuTmV0d29ya05hbWU7XG4gICAgICAgICAgICBjb25zdCByZXFCeXRlcyA9IEJ1ZmZlci5mcm9tKChyZXF1ZXN0Qm9keSBhcyB7IHBzYnQ6IHN0cmluZyB9KS5wc2J0LCAnaGV4Jyk7XG4gICAgICAgICAgICBjb25zdCByZXFQc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhyZXFCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29zaWduZXJXYXNtID0gQklQMzIuZnJvbUJhc2U1OChjb3NpZ25lci50b0Jhc2U1OCgpKTtcbiAgICAgICAgICAgIHJlcVBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXMoY29zaWduZXJXYXNtKTtcbiAgICAgICAgICAgIHJldHVybiB7IHBzYnQ6IEJ1ZmZlci5mcm9tKHJlcVBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBoYWxmLXNpZ24gd2l0aCB0aGUgdXNlciBrZXlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKFxuICAgICAgICBnZXRTaWduUGFyYW1zKHByZWJ1aWxkLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLCBzaWduZXIsIGNvc2lnbmVyKVxuICAgICAgKSkgYXMgUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPjtcblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKFxuICAgICAgaGFsZlNpZ25lZDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgICApOiBQcm9taXNlPEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAgIHJldHVybiAoYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIC4uLmdldFNpZ25QYXJhbXMoaGFsZlNpZ25lZC50eEhleCwgc2lnbmVyLCBjb3NpZ25lciksXG4gICAgICAgIGlzTGFzdFNpZ25hdHVyZTogdHJ1ZSxcbiAgICAgIH0pKSBhcyBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIHR5cGUgVHJhbnNhY3Rpb25TdGFnZXMgPSB7XG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgICAgaGFsZlNpZ25lZFVzZXJCYWNrdXA/OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uO1xuICAgICAgaGFsZlNpZ25lZFVzZXJCaXRHbzogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQmFja3VwPzogRnVsbHlTaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQml0R28/OiBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH07XG5cbiAgICB0eXBlIFRyYW5zYWN0aW9uT2JqU3RhZ2VzID0gUmVjb3JkPGtleW9mIFRyYW5zYWN0aW9uU3RhZ2VzLCBUcmFuc2FjdGlvbk9iaj47XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQcmVidWlsZFBzYnQoKSB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBpbnB1dFNjcmlwdHMubWFwKFxuICAgICAgICAodCk6IHRlc3R1dGlsLklucHV0ID0+ICh7XG4gICAgICAgICAgc2NyaXB0VHlwZTogdCxcbiAgICAgICAgICB2YWx1ZTogdCA9PT0gJ3Ayc2hQMnBrJyA/IEJpZ0ludCgxMDAwKSA6IEJpZ0ludCh2YWx1ZSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFtcbiAgICAgICAgeyBhZGRyZXNzOiBnZXRPdXRwdXRBZGRyZXNzKGdldFdhbGxldEtleXMoJ3Rlc3QnKSksIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgd2FsbGV0S2V5cywgJ3Vuc2lnbmVkJywge1xuICAgICAgICBwMnNoUDJwa0tleTogZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMoY29pbi5uYW1lKVswXSxcbiAgICAgIH0pO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCB3YWxsZXRLZXlzKTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uU3RhZ2VzKCk6IFByb21pc2U8VHJhbnNhY3Rpb25TdGFnZXM+IHtcbiAgICAgIGNvbnN0IHByZWJ1aWxkID1cbiAgICAgICAgdHhGb3JtYXQgPT09ICdwc2J0J1xuICAgICAgICAgID8gY3JlYXRlUHJlYnVpbGRQc2J0KClcbiAgICAgICAgICA6IGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgICAgICAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgICAgICAgICBnZXRVbnNwZW50cygpLFxuICAgICAgICAgICAgICBnZXRPdXRwdXRBZGRyZXNzKHdhbGxldEtleXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICBjb25zdCBoYWxmU2lnbmVkVXNlckJpdEdvID0gYXdhaXQgY3JlYXRlSGFsZlNpZ25lZFRyYW5zYWN0aW9uKHByZWJ1aWxkLCB3YWxsZXRLZXlzLnVzZXIsIHdhbGxldEtleXMuYml0Z28pO1xuICAgICAgY29uc3QgZnVsbFNpZ25lZFVzZXJCaXRHbyA9XG4gICAgICAgIGZ1bGxTaWduICYmICFpc1RyYW5zYWN0aW9uV2l0aFAydHJNdXNpZzJcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihoYWxmU2lnbmVkVXNlckJpdEdvLCB3YWxsZXRLZXlzLmJpdGdvLCB3YWxsZXRLZXlzLnVzZXIpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRVc2VyQmFja3VwID1cbiAgICAgICAgIWlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kICYmICEodHhGb3JtYXQgPT09ICdwc2J0JyAmJiBpc1RyYW5zYWN0aW9uV2l0aFAydHIpXG4gICAgICAgICAgPyBhd2FpdCBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24ocHJlYnVpbGQsIHdhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iYWNrdXApXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVXNlckJhY2t1cCA9XG4gICAgICAgIGZ1bGxTaWduICYmIGhhbGZTaWduZWRVc2VyQmFja3VwXG4gICAgICAgICAgPyBhd2FpdCBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb24oaGFsZlNpZ25lZFVzZXJCYWNrdXAsIHdhbGxldEtleXMuYmFja3VwLCB3YWxsZXRLZXlzLnVzZXIpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWJ1aWxkLFxuICAgICAgICBoYWxmU2lnbmVkVXNlckJhY2t1cCxcbiAgICAgICAgaGFsZlNpZ25lZFVzZXJCaXRHbyxcbiAgICAgICAgZnVsbFNpZ25lZFVzZXJCYWNrdXAsXG4gICAgICAgIGZ1bGxTaWduZWRVc2VyQml0R28sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCB0cmFuc2FjdGlvblN0YWdlczogVHJhbnNhY3Rpb25TdGFnZXM7XG5cbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cmFuc2FjdGlvblN0YWdlcyA9IGF3YWl0IGdldFRyYW5zYWN0aW9uU3RhZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2gobm9jay5jbGVhbkFsbCk7XG5cbiAgICBpdCgnbWF0Y2ggZml4dHVyZXMnLCBhc3luYyBmdW5jdGlvbiAodGhpczogTW9jaGEuQ29udGV4dCkge1xuICAgICAgaWYgKHR4Rm9ybWF0ID09PSAncHNidCcpIHtcbiAgICAgICAgLy8gVE9ETyAobWF5YmUpIC0gb25jZSBmdWxsIFBTQlQgc3VwcG9ydCBpcyBhZGRlZCB0byBhYnN0cmFjdC11dHhvIG1vZHVsZSwgY3VzdG9tIEpTT04gcmVwcmVzZW50YXRpb24gb2YgUFNCVCBjYW4gYmUgY3JlYXRlZCBhbmQgdGVzdGVkIGhlcmUuXG4gICAgICAgIC8vIHNpZ25hdHVyZXMgb2YgdGFwcm9vdEtleVBhdGhTcGVuZHMgYXJlIHJhbmRvbSBzaW5jZSByYW5kb20gbmF0dXJlIG9mIE11U2lnMiBub25jZSwgc28gcHNidCBoZXggY29tcGFyaXNvbiBhbHNvIHdvbnQgd29yay5cblxuICAgICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmooc3RhZ2VzOiBUcmFuc2FjdGlvblN0YWdlcyk6IFRyYW5zYWN0aW9uT2JqU3RhZ2VzIHtcbiAgICAgICAgcmV0dXJuIF8ubWFwVmFsdWVzKHN0YWdlcywgKHYpID0+XG4gICAgICAgICAgdiA9PT0gdW5kZWZpbmVkIHx8IHYgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHx8IHYgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHYgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvblxuICAgICAgICAgICAgPyB0cmFuc2FjdGlvblRvT2JqPFROdW1iZXI+KHYpXG4gICAgICAgICAgICA6IHRyYW5zYWN0aW9uSGV4VG9PYmoodi50eEhleCwgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksIGFtb3VudFR5cGUpXG4gICAgICAgICkgYXMgVHJhbnNhY3Rpb25PYmpTdGFnZXM7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydEVxdWFsSlNPTihcbiAgICAgICAgdG9UcmFuc2FjdGlvblN0YWdlc09iaih0cmFuc2FjdGlvblN0YWdlcyksXG4gICAgICAgIGF3YWl0IGdldEZpeHR1cmUoXG4gICAgICAgICAgY29pbixcbiAgICAgICAgICBgdHJhbnNhY3Rpb25zLSR7aW5wdXRTY3JpcHRzLm1hcCgodCkgPT4gdG9UeG5JbnB1dFNjcmlwdFR5cGUodCkpLmpvaW4oJy0nKX1gLFxuICAgICAgICAgIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmoodHJhbnNhY3Rpb25TdGFnZXMpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiB0ZXN0UHNidFZhbGlkU2lnbmF0dXJlcyh0eDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbiwgc2lnbmVkQnk6IEJJUDMySW50ZXJmYWNlW10pIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4LnR4SGV4LCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSk7XG4gICAgICBjb25zdCB1bnNwZW50cyA9IGdldFVuc3BlbnRzRm9yUHNidCgpO1xuICAgICAgcHNidC5kYXRhLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2luZGV4XTtcbiAgICAgICAgaWYgKCF1dHhvbGliLmJpdGdvLmlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSkge1xuICAgICAgICAgIGFzc2VydC5vayh1dHhvbGliLmJpdGdvLmdldFBzYnRJbnB1dFNjcmlwdFR5cGUoaW5wdXQpLCAncDJzaFAycGsnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2FsbGV0VW5zcGVudCA9IHVuc3BlbnQgYXMgV2FsbGV0VW5zcGVudDxiaWdpbnQ+O1xuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHdhbGxldFVuc3BlbnQuY2hhaW4sIHdhbGxldFVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG4gICAgICAgIHB1YmtleXMuZm9yRWFjaCgocGssIHBrSW5kZXgpID0+IHtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgICBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRDb21tb24oaW5kZXgsIHBrKSxcbiAgICAgICAgICAgIHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdFZhbGlkU2lnbmF0dXJlcyhcbiAgICAgIHR4OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uIHwgRnVsbHlTaWduZWRUcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lZEJ5OiBCSVAzMkludGVyZmFjZVtdLFxuICAgICAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4gICAgKSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICB0ZXN0UHNidFZhbGlkU2lnbmF0dXJlcyh0eCwgc2lnbmVkQnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB1bnNwZW50cyA9IGdldFVuc3BlbnRzKCk7XG4gICAgICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcChcbiAgICAgICAgKHUpOiB1dHhvbGliLlR4T3V0cHV0PFROdW1iZXI+ID0+ICh7XG4gICAgICAgICAgc2NyaXB0OiBCdWZmZXIuZnJvbSh3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKHUuYWRkcmVzcywgY29pbi5uYW1lKSksXG4gICAgICAgICAgdmFsdWU6IHUudmFsdWUsXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyPFROdW1iZXI+KFxuICAgICAgICBCdWZmZXIuZnJvbSh0eC50eEhleCwgJ2hleCcpLFxuICAgICAgICBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSxcbiAgICAgICAgeyBhbW91bnRUeXBlIH1cbiAgICAgICk7XG4gICAgICB0cmFuc2FjdGlvbi5pbnMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFNjcmlwdHNbaW5kZXhdID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgICAgYXNzZXJ0Lm9rKGNvaW4uaXNCaXRHb1RhaW50ZWRVbnNwZW50KHVuc3BlbnRzW2luZGV4XSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbmRleF0gYXMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPjtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IHdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCh1bnNwZW50LmNoYWluLCB1bnNwZW50LmluZGV4KS5wdWJsaWNLZXlzO1xuXG4gICAgICAgIHB1YmtleXMuZm9yRWFjaCgocGssIHBrSW5kZXgpID0+IHtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgICB1dHhvbGliLmJpdGdvLnZlcmlmeVNpZ25hdHVyZTxUTnVtYmVyPihcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICBwcmV2T3V0cHV0c1tpbmRleF0udmFsdWUsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHBrLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwcmV2T3V0cHV0c1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gdGVzdEV4cGxhaW5UeChcbiAgICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgICAgdHhIZXg6IHN0cmluZyxcbiAgICAgIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gICAgICBwdWJzOiBUcmlwbGU8c3RyaW5nPiB8IHVuZGVmaW5lZFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBhd2FpdCBjb2luLmV4cGxhaW5UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAgIHR4SGV4LFxuICAgICAgICB0eEluZm86IHtcbiAgICAgICAgICB1bnNwZW50cyxcbiAgICAgICAgfSxcbiAgICAgICAgcHVicyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFByb3BlcnRpZXMgPSBbJ2lkJywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0QW1vdW50J107XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBleHBlY3RlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgYXNzZXJ0Lm9rKHByb3AgaW4gZXhwbGFuYXRpb24sIGBleHBlY3RlZCBleHBsYW5hdGlvbiB0byBoYXZlIHByb3BlcnR5ICcke3Byb3B9J2ApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZFNpZ25hdHVyZUNvdW50ID1cbiAgICAgICAgc3RhZ2VOYW1lID09PSAncHJlYnVpbGQnIHx8IHB1YnMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2hhbGZTaWduZWQnKVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2Z1bGxTaWduZWQnKVxuICAgICAgICAgID8gMlxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoJ2lucHV0U2lnbmF0dXJlcycgaW4gZXhwbGFuYXRpb24pIHtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgICBleHBsYW5hdGlvbi5pbnB1dFNpZ25hdHVyZXMsXG4gICAgICAgICAgLy8gRklYTUUoQkctMzUxNTQpOiBpbXBsZW1lbnQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmb3IgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzXG4gICAgICAgICAgaW5wdXRTY3JpcHRzLm1hcCgodHlwZSkgPT4gKHR5cGUgPT09ICdwMnNoUDJwaycgPyAwIDogZXhwZWN0ZWRTaWduYXR1cmVDb3VudCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoJ3NpZ25hdHVyZXMnIGluIGV4cGxhbmF0aW9uKSB7XG4gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uc2lnbmF0dXJlcywgZXhwZWN0ZWRTaWduYXR1cmVDb3VudCk7XG4gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlQW1vdW50LCAnMCcpOyAvLyBubyBjaGFuZ2UgYWRkcmVzc2VzIGdpdmVuXG4gICAgICB9XG4gICAgICBsZXQgZXhwZWN0ZWRPdXRwdXRBbW91bnQgPVxuICAgICAgICBCaWdJbnQoKHR4Rm9ybWF0ID09PSAncHNidCcgPyBnZXRVbnNwZW50c0ZvclBzYnQoKSA6IGdldFVuc3BlbnRzKCkpLmxlbmd0aCkgKiBCaWdJbnQodmFsdWUpO1xuICAgICAgaW5wdXRTY3JpcHRzLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgICAgICAvLyByZXBsYXlQcm90ZWN0aW9uIHVuc3BlbnRzIGhhdmUgdmFsdWUgMTAwMFxuICAgICAgICAgIGV4cGVjdGVkT3V0cHV0QW1vdW50IC09IEJpZ0ludCh2YWx1ZSk7XG4gICAgICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgKz0gQmlnSW50KDEwMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGV4cGVjdGVkT3V0cHV0QW1vdW50IC09IEJpZ0ludCgxMDAwKTsgLy8gZmVlIG9mIDEwMDBcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0QW1vdW50LCBleHBlY3RlZE91dHB1dEFtb3VudC50b1N0cmluZygpKTtcbiAgICB9XG5cbiAgICBpdCgnaGF2ZSB2YWxpZCBzaWduYXR1cmUgZm9yIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmhhbGZTaWduZWRVc2VyQmFja3VwKSB7XG4gICAgICAgIHRlc3RWYWxpZFNpZ25hdHVyZXModHJhbnNhY3Rpb25TdGFnZXMuaGFsZlNpZ25lZFVzZXJCYWNrdXAsIFt3YWxsZXRLZXlzLnVzZXJdLCAnaGFsZnNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5oYWxmU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyXSwgJ2hhbGZzaWduZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIHZhbGlkIHNpZ25hdHVyZXMgZm9yIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFmdWxsU2lnbikge1xuICAgICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuZnVsbFNpZ25lZFVzZXJCYWNrdXApIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJhY2t1cCwgW3dhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iYWNrdXBdLCAnZnVsbHNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQml0R28pIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJpdGdvXSwgJ2Z1bGxzaWduZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIGNvcnJlY3QgcmVzdWx0cyBmb3IgZXhwbGFpblRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBbc3RhZ2VOYW1lLCBzdGFnZVR4XSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2FjdGlvblN0YWdlcykpIHtcbiAgICAgICAgaWYgKCFzdGFnZVR4KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgICAgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgICA/IHN0YWdlVHgudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgIDogc3RhZ2VUeCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuICAgICAgICAgICAgPyBCdWZmZXIuZnJvbShzdGFnZVR4LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgIDogc3RhZ2VUeC50eEhleDtcblxuICAgICAgICBjb25zdCBwdWJzID0gd2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz47XG4gICAgICAgIGNvbnN0IHVuc3BlbnRzID1cbiAgICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgICA/IGdldFVuc3BlbnRzRm9yUHNidCgpLm1hcCgodSkgPT4gKHsgLi4udSwgdmFsdWU6IGJpdGdvLnRvVE51bWJlcih1LnZhbHVlLCBhbW91bnRUeXBlKSBhcyBUTnVtYmVyIH0pKVxuICAgICAgICAgICAgOiBnZXRVbnNwZW50cygpO1xuICAgICAgICBhd2FpdCB0ZXN0RXhwbGFpblR4KHN0YWdlTmFtZSwgdHhIZXgsIHVuc3BlbnRzLCBwdWJzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJ1blRlc3RGb3JDb2luKGNvaW46IEFic3RyYWN0VXR4b0NvaW4pIHtcbiAgcnVuKGNvaW4sIGdldFNjcmlwdFR5cGVzKGNvaW4sICdwc2J0JyksICdwc2J0Jyk7XG59XG5cbmRlc2NyaWJlKCdUcmFuc2FjdGlvbiBTdWl0ZScsIGZ1bmN0aW9uICgpIHtcbiAgZ2V0TWluVXR4b0NvaW5zKCkuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgIGRlc2NyaWJlKGAke2NvaW4uZ2V0Q2hhaW4oKX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICBydW5UZXN0Rm9yQ29pbihjb2luKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -208,9 +208,6 @@ describe('Verify Transaction', function () {
208
208
  implicitExternalSpendAmount: 15,
209
209
  needsCustomChangeKeySignatureVerification: false,
210
210
  });
211
- const bitcoinMock = sinon
212
- .stub(coin, 'createTransactionFromHex')
213
- .returns({ ins: [] });
214
211
  const result = await coin.verifyTransaction({
215
212
  txParams: {
216
213
  walletPassphrase: passphrase,
@@ -222,7 +219,6 @@ describe('Verify Transaction', function () {
222
219
  });
223
220
  assert_1.default.strictEqual(result, true);
224
221
  coinMock.restore();
225
- bitcoinMock.restore();
226
222
  });
227
223
  it('should not allow any implicit external outputs if paygo outputs are disallowed', async () => {
228
224
  const coinMock = sinon.stub(coin, 'parseTransaction').resolves({
@@ -264,9 +260,6 @@ describe('Verify Transaction', function () {
264
260
  implicitExternalSpendAmount: 15,
265
261
  needsCustomChangeKeySignatureVerification: false,
266
262
  });
267
- const bitcoinMock = sinon
268
- .stub(coin, 'createTransactionFromHex')
269
- .returns({ ins: [] });
270
263
  const result = await coin.verifyTransaction({
271
264
  txParams: {
272
265
  walletPassphrase: passphrase,
@@ -279,7 +272,6 @@ describe('Verify Transaction', function () {
279
272
  });
280
273
  assert_1.default.strictEqual(result, true);
281
274
  coinMock.restore();
282
- bitcoinMock.restore();
283
275
  });
284
276
  it('should verify a bridging transaction whose implicit external output matches the bridge amount', async () => {
285
277
  // Bridging intents (e.g. BTC -> sBTC peg-in) carry no recipients; the single external output
@@ -304,9 +296,6 @@ describe('Verify Transaction', function () {
304
296
  implicitExternalSpendAmount: 22000,
305
297
  needsCustomChangeKeySignatureVerification: false,
306
298
  });
307
- const bitcoinMock = sinon
308
- .stub(coin, 'createTransactionFromHex')
309
- .returns({ ins: [] });
310
299
  const result = await coin.verifyTransaction({
311
300
  txParams: {
312
301
  walletPassphrase: passphrase,
@@ -321,7 +310,6 @@ describe('Verify Transaction', function () {
321
310
  });
322
311
  assert_1.default.strictEqual(result, true);
323
312
  coinMock.restore();
324
- bitcoinMock.restore();
325
313
  });
326
314
  it('should reject a bridging transaction whose implicit external output does not match the bridge amount', async () => {
327
315
  const coinMock = sinon.stub(coin, 'parseTransaction').resolves({
@@ -496,9 +484,6 @@ describe('Verify Transaction', function () {
496
484
  implicitExternalSpendAmount: 0,
497
485
  needsCustomChangeKeySignatureVerification: false,
498
486
  });
499
- const bitcoinMock = sinon
500
- .stub(coin, 'createTransactionFromHex')
501
- .returns({ ins: [] });
502
487
  const result = await coin.verifyTransaction({
503
488
  txParams: { walletPassphrase: passphrase },
504
489
  txPrebuild: { txHex: '00' },
@@ -507,7 +492,6 @@ describe('Verify Transaction', function () {
507
492
  });
508
493
  assert_1.default.strictEqual(result, true);
509
494
  coinMock.restore();
510
- bitcoinMock.restore();
511
495
  });
512
496
  });
513
497
  it('should work with bigint amounts', async () => {
@@ -535,9 +519,6 @@ describe('Verify Transaction', function () {
535
519
  implicitExternalSpendAmount: BigInt(15),
536
520
  needsCustomChangeKeySignatureVerification: false,
537
521
  });
538
- const bitcoinMock = sinon
539
- .stub(bigintCoin, 'createTransactionFromHex')
540
- .returns({ ins: [] });
541
522
  const result = await bigintCoin.verifyTransaction({
542
523
  txParams: {
543
524
  walletPassphrase: passphrase,
@@ -550,7 +531,6 @@ describe('Verify Transaction', function () {
550
531
  });
551
532
  assert_1.default.strictEqual(result, true);
552
533
  coinMock.restore();
553
- bitcoinMock.restore();
554
534
  });
555
535
  });
556
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFHNUIsNkNBQStCO0FBQy9CLDhDQUF5QztBQUV6QyxpQ0FBbUQ7QUFFbkQsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUVqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRWhELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO0tBQ2pDLENBQUM7SUFFRixvRUFBb0U7SUFDcEUsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUs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V0FBVyxHQUFHLEtBQUs7YUFDdEIsSUFBSSxDQUFDLFVBQVUsRUFBRSwwQkFBMEIsQ0FBQzthQUM1QyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUE4QyxDQUFDLENBQUM7UUFFcEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsaUJBQWlCLENBQUM7WUFDaEQsUUFBUSxFQUFFO2dCQUNSLGdCQUFnQixFQUFFLFVBQVU7YUFDN0I7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNELE1BQU0sRUFBRSxxQkFBNEI7WUFDcEMsWUFBWSxFQUFFLEVBQUU7U0FDakIsQ0FBQyxDQUFDO1FBRUgsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgZGVmYXVsdEJpdEdvLCBnZXRVdHhvQ29pbiB9IGZyb20gJy4vdXRpbCc7XG5cbmRlc2NyaWJlKCdWZXJpZnkgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW4gPSBnZXRVdHhvQ29pbigndGJ0YycpO1xuXG4gIGNvbnN0IHVzZXJLZXljaGFpbiA9IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCk7XG4gIGNvbnN0IG90aGVyS2V5Y2hhaW4gPSBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpO1xuXG4gIGNvbnN0IGNoYW5nZUtleXMgPSB7XG4gICAgdXNlcjogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSxcbiAgICBiYWNrdXA6IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCksXG4gICAgYml0Z286IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCksXG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgY29uc3Qgc2lnbiA9IGFzeW5jIChrZXksIGtleWNoYWluKSA9PiAoYXdhaXQgY29pbi5zaWduTWVzc2FnZShrZXljaGFpbiwga2V5LnB1YiEpKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHNpZ25Vc2VyID0gKGtleSkgPT4gc2lnbihrZXksIHVzZXJLZXljaGFpbik7XG4gIGNvbnN0IHNpZ25PdGhlciA9IChrZXkpID0+IHNpZ24oa2V5LCBvdGhlcktleWNoYWluKTtcbiAgY29uc3QgcGFzc3BocmFzZSA9ICd0ZXN0X3Bhc3NwaHJhc2UnO1xuXG4gIGNvbnN0IHN0dWJEYXRhID0ge1xuICAgIHVuc2lnbmVkU2VuZGluZ1dhbGxldDoge1xuICAgICAga2V5SWRzOiBzaW5vbi5zdHViKCkucmV0dXJucyhbJzAnLCAnMScsICcyJ10pLFxuICAgIH0sXG4gICAgcGFyc2VUcmFuc2FjdGlvbkRhdGE6IHtcbiAgICAgIGJhZEtleToge1xuICAgICAgICBrZXljaGFpbnM6IHtcbiAgICAgICAgICAvLyB1c2VyIHB1YmxpYyBrZXkgc3dhcHBlZCBvdXRcbiAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICBwdWI6IG90aGVyS2V5Y2hhaW4ucHViLFxuICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiBkZWZhdWx0Qml0R28uZW5jcnlwdCh7XG4gICAgICAgICAgICAgIGlucHV0OiB1c2VyS2V5Y2hhaW4ucHJ2LFxuICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3BocmFzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG5vQ3VzdG9tQ2hhbmdlOiB7XG4gICAgICAgIGtleWNoYWluczogeyB1c2VyOiB1c2VyS2V5Y2hhaW4gfSxcbiAgICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICB9LFxuICAgICAgZW1wdHlDdXN0b21DaGFuZ2U6IHtcbiAgICAgICAga2V5Y2hhaW5zOiB7IHVzZXI6IHVzZXJLZXljaGFpbiB9LFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlOiB7fSxcbiAgICAgIH0sXG4gICAgICAvLyBuZWVkcyB0byBiZSBhc3luYyBmdW5jdGlvbiB0byBjcmVhdGUgc2lnbmF0dXJlc1xuICAgICAgYmFkU2lnczogYXN5bmMgKCkgPT4gKHtcbiAgICAgICAga2V5Y2hhaW5zOiB7IHVzZXI6IHVzZXJLZXljaGFpbiB9LFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlOiB7XG4gICAgICAgICAga2V5czogW2NoYW5nZUtleXMudXNlciwgY2hhbmdlS2V5cy5iYWNrdXAsIGNoYW5nZUtleXMuYml0Z29dLFxuICAgICAgICAgIHNpZ25hdHVyZXM6IFtcbiAgICAgICAgICAgIGF3YWl0IHNpZ25PdGhlcihjaGFuZ2VLZXlzLnVzZXIpLFxuICAgICAgICAgICAgYXdhaXQgc2lnbk90aGVyKGNoYW5nZUtleXMuYmFja3VwKSxcbiAgICAgICAgICAgIGF3YWl0IHNpZ25PdGhlcihjaGFuZ2VLZXlzLmJpdGdvKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBnb29kU2lnczogYXN5bmMgKCkgPT4gKHtcbiAgICAgICAga2V5Y2hhaW5zOiB7IHVzZXI6IHVzZXJLZXljaGFpbiB9LFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlOiB7XG4gICAgICAgICAga2V5czogW2NoYW5nZUtleXMudXNlciwgY2hhbmdlS2V5cy5iYWNrdXAsIGNoYW5nZUtleXMuYml0Z29dLFxuICAgICAgICAgIHNpZ25hdHVyZXM6IFtcbiAgICAgICAgICAgIGF3YWl0IHNpZ25Vc2VyKGNoYW5nZUtleXMudXNlciksXG4gICAgICAgICAgICBhd2FpdCBzaWduVXNlcihjaGFuZ2VLZXlzLmJhY2t1cCksXG4gICAgICAgICAgICBhd2FpdCBzaWduVXNlcihjaGFuZ2VLZXlzLmJpdGdvKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBtaXNzaW5nT3V0cHV0czogMSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgdW5zaWduZWRTZW5kaW5nV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCwgc3R1YkRhdGEudW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSB1c2VyIHByaXZhdGUga2V5IGNhbm5vdCBiZSB2ZXJpZmllZCB0byBtYXRjaCB0aGUgdXNlciBwdWJsaWMga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgIHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5iYWRLZXkgYXMgYW55KTtcbiAgICBjb25zdCB2ZXJpZnlXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0LCB7fSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHZlcmlmeVdhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC90cmFuc2FjdGlvbiByZXF1aXJlcyB2ZXJpZmljYXRpb24gb2YgdXNlciBwdWJsaWMga2V5LCBidXQgaXQgd2FzIHVuYWJsZSB0byBiZSB2ZXJpZmllZC9cbiAgICApO1xuXG4gICAgKGNvaW4ucGFyc2VUcmFuc2FjdGlvbiBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBjdXN0b20gY2hhbmdlIHZlcmlmaWNhdGlvbiBkYXRhIGlzIHJlcXVpcmVkIGJ1dCBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5ub0N1c3RvbUNoYW5nZSBhcyBhbnkpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvcGFyc2VkIHRyYW5zYWN0aW9uIGlzIG1pc3NpbmcgcmVxdWlyZWQgY3VzdG9tIGNoYW5nZSB2ZXJpZmljYXRpb24gZGF0YS9cbiAgICApO1xuXG4gICAgKGNvaW4ucGFyc2VUcmFuc2FjdGlvbiBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBjdXN0b20gY2hhbmdlIGtleXMgb3Iga2V5IHNpZ25hdHVyZXMgYXJlIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHN0dWJEYXRhLnBhcnNlVHJhbnNhY3Rpb25EYXRhLmVtcHR5Q3VzdG9tQ2hhbmdlIGFzIGFueSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC9jdXN0b21DaGFuZ2UgcHJvcGVydHkgaXMgbWlzc2luZyBrZXlzIG9yIHNpZ25hdHVyZXMvXG4gICAgKTtcblxuICAgIChjb2luLnBhcnNlVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcyBjYW5ub3QgYmUgdmVyaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKChhd2FpdCBzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5iYWRTaWdzKCkpIGFzIGFueSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC90cmFuc2FjdGlvbiByZXF1aXJlcyB2ZXJpZmljYXRpb24gb2YgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcywgYnV0IHRoZXkgd2VyZSB1bmFibGUgdG8gYmUgdmVyaWZpZWQvXG4gICAgKTtcblxuICAgIChjb2luLnBhcnNlVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIGN1c3RvbSBjaGFuZ2UgdHJhbnNhY3Rpb24gd2hlbiBjaGFuZ2Uga2V5cyBhbmQgc2lnbmF0dXJlcyBhcmUgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKChhd2FpdCBzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5nb29kU2lncygpKSBhcyBhbnkpO1xuXG4gICAgLy8gaWYgdmVyaWZ5IHRyYW5zYWN0aW9uIGdldHMgcmVqZWN0ZWQgd2l0aCB0aGUgb3V0cHV0cyBtaXNzaW5nIGVycm9yIG1lc3NhZ2UsXG4gICAgLy8gdGhlbiB3ZSBrbm93IHRoYXQgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcyB3YXMgc3VjY2Vzc2Z1bFxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL2V4cGVjdGVkIG91dHB1dHMgbWlzc2luZyBpbiB0cmFuc2FjdGlvbiBwcmVidWlsZC9cbiAgICApO1xuXG4gICAgKGNvaW4ucGFyc2VUcmFuc2FjdGlvbiBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgbW9yZSB0aGFuIDE1MCBiYXNpcyBwb2ludHMgb2YgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0cyAoZm9yIHBheWdvIG91dHB1dHMpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxMDAwMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTUxLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgfSksXG4gICAgICAvcHJlYnVpbGQgYXR0ZW1wdHMgdG8gc3BlbmQgdG8gdW5pbnRlbmRlZCBleHRlcm5hbCByZWNpcGllbnRzL1xuICAgICk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgMTUwIGJhc2lzIHBvaW50cyBvZiBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXRzIChmb3IgcGF5Z28gb3V0cHV0cyknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDEwMDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE1LFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Y29pbk1vY2sgPSBzaW5vblxuICAgICAgLnN0dWIoY29pbiwgJ2NyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCcpXG4gICAgICAucmV0dXJucyh7IGluczogW10gfSBhcyB1bmtub3duIGFzIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgfSxcbiAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgIGJpdGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgYW55IGltcGxpY2l0IGV4dGVybmFsIG91dHB1dHMgaWYgcGF5Z28gb3V0cHV0cyBhcmUgZGlzYWxsb3dlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTAsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHtcbiAgICAgICAgICBhbGxvd1BheWdvT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgL3ByZWJ1aWxkIGF0dGVtcHRzIHRvIHNwZW5kIHRvIHVuaW50ZW5kZWQgZXh0ZXJuYWwgcmVjaXBpZW50cy9cbiAgICApO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IHBheWdvIG91dHB1dHMgaWYgZW1wdHkgdmVyaWZpY2F0aW9uIG9iamVjdCBpcyBwYXNzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDEwMDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE1LFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Y29pbk1vY2sgPSBzaW5vblxuICAgICAgLnN0dWIoY29pbiwgJ2NyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCcpXG4gICAgICAucmV0dXJucyh7IGluczogW10gfSBhcyB1bmtub3duIGFzIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgfSxcbiAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgICBiaXRjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGEgYnJpZGdpbmcgdHJhbnNhY3Rpb24gd2hvc2UgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0IG1hdGNoZXMgdGhlIGJyaWRnZSBhbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQnJpZGdpbmcgaW50ZW50cyAoZS5nLiBCVEMgLT4gc0JUQyBwZWctaW4pIGNhcnJ5IG5vIHJlY2lwaWVudHM7IHRoZSBzaW5nbGUgZXh0ZXJuYWwgb3V0cHV0XG4gICAgLy8gaXMgdGhlIGJyaWRnZSBkZXBvc2l0IGFkZHJlc3MgY29tcHV0ZWQgc2VydmVyLXNpZGUuIFdpdGggZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50IDAgdGhlXG4gICAgLy8gcGF5Z28gbGltaXQgaXMgMCwgc28gYW55IGltcGxpY2l0IGV4dGVybmFsIG91dHB1dCB3b3VsZCBub3JtYWxseSBiZSByZWplY3RlZCBhcyBhblxuICAgIC8vIFwidW5pbnRlbmRlZCBleHRlcm5hbCByZWNpcGllbnRcIi4gRm9yIHR5cGU6ICdicmlkZ2luZycgd2UgaW5zdGVhZCB2ZXJpZnkgdGhhdCB0aGUgaW1wbGljaXRcbiAgICAvLyBleHRlcm5hbCBzcGVuZCBlcXVhbHMgYnJpZGdpbmdQYXJhbXMuc2J0Yy5hbW91bnQuXG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdzYnRjX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgYW1vdW50OiAnMjIwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAyMjAwMCxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJpdGNvaW5Nb2NrID0gc2lub25cbiAgICAgIC5zdHViKGNvaW4sICdjcmVhdGVUcmFuc2FjdGlvbkZyb21IZXgnKVxuICAgICAgLnJldHVybnMoeyBpbnM6IFtdIH0gYXMgdW5rbm93biBhcyB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbik7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgIGJyaWRnaW5nUGFyYW1zOiB7IHNidGM6IHsgYW1vdW50OiAnMjIwMDAnLCBzdGFja3NSZWNpcGllbnQ6ICdTTTFYJywgbWF4RmVlOiAnMTAwMCcsIGxvY2tUaW1lOiAxMDAgfSB9LFxuICAgICAgfSxcbiAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICB9LFxuICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgIGJpdGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgYSBicmlkZ2luZyB0cmFuc2FjdGlvbiB3aG9zZSBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGJyaWRnZSBhbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdzYnRjX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgYW1vdW50OiAnNTAwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiA1MDAwMCxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgICB0eXBlOiAnYnJpZGdpbmcnLFxuICAgICAgICAgIGJyaWRnaW5nUGFyYW1zOiB7IHNidGM6IHsgYW1vdW50OiAnMjIwMDAnLCBzdGFja3NSZWNpcGllbnQ6ICdTTTFYJywgbWF4RmVlOiAnMTAwMCcsIGxvY2tUaW1lOiAxMDAgfSB9LFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL2JyaWRnaW5nIG91dHB1dCBhbW91bnQgXFwoNTAwMDBcXCkgZG9lcyBub3QgbWF0Y2ggaW50ZW5kZWQgYnJpZGdlIGFtb3VudCBcXCgyMjAwMFxcKS9cbiAgICApO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCBhIGJyaWRnaW5nIHRyYW5zYWN0aW9uIHRoYXQgaXMgbWlzc2luZyBicmlkZ2luZ1BhcmFtcy5zYnRjLmFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ3NidGNfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICBhbW91bnQ6ICcyMjAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDIyMDAwLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICAgIHR5cGU6ICdicmlkZ2luZycsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvYnJpZGdpbmcgdHJhbnNhY3Rpb24gaXMgbWlzc2luZyBicmlkZ2luZ1BhcmFtcy5zYnRjLmFtb3VudC9cbiAgICApO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0aWxsIHJlamVjdCB0aGUgc2FtZSBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXQgd2hlbiB0aGUgaW50ZW50IGlzIG5vdCBicmlkZ2luZycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBTYW1lIHNoYXBlIGFzIHRoZSBicmlkZ2luZyB0ZXN0IGFib3ZlLCBidXQgd2l0aG91dCB0eXBlOiAnYnJpZGdpbmcnIHRoZSBpbXBsaWNpdCBleHRlcm5hbFxuICAgIC8vIG91dHB1dCBpcyB0cmVhdGVkIGFzIGFuIHVuaW50ZW5kZWQgZXh0ZXJuYWwgcmVjaXBpZW50IGFuZCByZWplY3RlZC5cbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ3NidGNfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICBhbW91bnQ6ICcyMjAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDIyMDAwLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL3ByZWJ1aWxkIGF0dGVtcHRzIHRvIHNwZW5kIHRvIHVuaW50ZW5kZWQgZXh0ZXJuYWwgcmVjaXBpZW50cy9cbiAgICApO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgncXVhbnR1bS1yZXNpc3RhbnQgc3dlZXAgKHFyOiB0cnVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIGV4cGxpY2l0IGV4dGVybmFsIG91dHB1dHMgYXJlIHByZXNlbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFt7IGFkZHJlc3M6ICdleHRlcm5hbF9hZGRyJywgYW1vdW50OiAnNTAwMCcgfV0sXG4gICAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW3sgYWRkcmVzczogJ2NoYW5nZV9hZGRyJywgYW1vdW50OiAnNDAwMCcgfV0sXG4gICAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogNTAwMCxcbiAgICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB7IHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsIHFyOiB0cnVlIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICAgIH0pLFxuICAgICAgICAvcXVhbnR1bS1yZXNpc3RhbnQgc3dlZXAgdHJhbnNhY3Rpb25zIG11c3Qgb25seSBjb250YWluIHdhbGxldC1pbnRlcm5hbCBvdXRwdXRzL1xuICAgICAgKTtcblxuICAgICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXRzIGFyZSBwcmVzZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFt7IGFkZHJlc3M6ICdwYXlnb19hZGRyJywgYW1vdW50OiAnMTAwJyB9XSxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW3sgYWRkcmVzczogJ2NoYW5nZV9hZGRyJywgYW1vdW50OiAnOTkwMCcgfV0sXG4gICAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxMDAsXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHsgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSwgcXI6IHRydWUgfSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgICAgfSksXG4gICAgICAgIC9xdWFudHVtLXJlc2lzdGFudCBzd2VlcCB0cmFuc2FjdGlvbnMgbXVzdCBvbmx5IGNvbnRhaW4gd2FsbGV0LWludGVybmFsIG91dHB1dHMvXG4gICAgICApO1xuXG4gICAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3Mgd2hlbiBhbGwgb3V0cHV0cyBhcmUgaW50ZXJuYWwgKGNoYW5nZSBvbmx5KScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgICBvdXRwdXRzOiBbeyBhZGRyZXNzOiAnY2hhbmdlX2FkZHInLCBhbW91bnQ6ICcxMDAwMCcgfV0sXG4gICAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFt7IGFkZHJlc3M6ICdjaGFuZ2VfYWRkcicsIGFtb3VudDogJzEwMDAwJyB9XSxcbiAgICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDAsXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSwgcXI6IHRydWUgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcblxuICAgICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgcXIgY2hlY2sgd2hlbiBxciBpcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbeyBhZGRyZXNzOiAnZXh0ZXJuYWxfYWRkcicsIGFtb3VudDogJzUwMDAnIH1dLFxuICAgICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDUwMDAsXG4gICAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGNvaW5Nb2NrID0gc2lub25cbiAgICAgICAgLnN0dWIoY29pbiwgJ2NyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCcpXG4gICAgICAgIC5yZXR1cm5zKHsgaW5zOiBbXSB9IGFzIHVua25vd24gYXMgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnMDAnIH0sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcblxuICAgICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgICAgYml0Y29pbk1vY2sucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBiaWdpbnQgYW1vdW50cycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBuZWVkIGEgY29pbiB0aGF0IHVzZXMgYmlnaW50XG4gICAgY29uc3QgYmlnaW50Q29pbiA9IGdldFV0eG9Db2luKCd0ZG9nZScpO1xuXG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGJpZ2ludENvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdleHRlcm5hbF9hZGRyZXNzJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdleHRlcm5hbF9hZGRyZXNzXzInLFxuICAgICAgICAgIGFtb3VudDogJzE1JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogQmlnSW50KDEwMDAwKSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogQmlnSW50KDE1KSxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJpdGNvaW5Nb2NrID0gc2lub25cbiAgICAgIC5zdHViKGJpZ2ludENvaW4sICdjcmVhdGVUcmFuc2FjdGlvbkZyb21IZXgnKVxuICAgICAgLnJldHVybnMoeyBpbnM6IFtdIH0gYXMgdW5rbm93biBhcyB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbik7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiaWdpbnRDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICB9LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgIH0sXG4gICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gICAgYml0Y29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcbn0pO1xuIl19
536
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsNkNBQStCO0FBQy9CLDhDQUF5QztBQUV6QyxpQ0FBbUQ7QUFFbkQsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUVqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRWhELE1BQU0sVUFBVSxHQUFHO1FBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFO0tBQ2pDLENBQUM7SUFFRixvRUFBb0U7SUFDcEUsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUs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QUU7WUFDbEIsdUJBQXVCLEVBQUU7Z0JBQ3ZCO29CQUNFLE9BQU8sRUFBRSxrQkFBa0I7b0JBQzNCLE1BQU0sRUFBRSxPQUFPO2lCQUNoQjthQUNGO1lBQ0QsdUJBQXVCLEVBQUU7Z0JBQ3ZCO29CQUNFLE9BQU8sRUFBRSxvQkFBb0I7b0JBQzdCLE1BQU0sRUFBRSxJQUFJO2lCQUNiO2FBQ0Y7WUFDRCxhQUFhLEVBQUUsRUFBRTtZQUNqQiwyQkFBMkIsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzFDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkMseUNBQXlDLEVBQUUsS0FBSztTQUNqRCxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztZQUNoRCxRQUFRLEVBQUU7Z0JBQ1IsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QjtZQUNELFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0QsTUFBTSxFQUFFLHFCQUE0QjtZQUNwQyxZQUFZLEVBQUUsRUFBRTtTQUNqQixDQUFDLENBQUM7UUFFSCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IGRlZmF1bHRCaXRHbywgZ2V0VXR4b0NvaW4gfSBmcm9tICcuL3V0aWwnO1xuXG5kZXNjcmliZSgnVmVyaWZ5IFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcblxuICBjb25zdCB1c2VyS2V5Y2hhaW4gPSBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpO1xuICBjb25zdCBvdGhlcktleWNoYWluID0gY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKTtcblxuICBjb25zdCBjaGFuZ2VLZXlzID0ge1xuICAgIHVzZXI6IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCksXG4gICAgYmFja3VwOiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpLFxuICAgIGJpdGdvOiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpLFxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gIGNvbnN0IHNpZ24gPSBhc3luYyAoa2V5LCBrZXljaGFpbikgPT4gKGF3YWl0IGNvaW4uc2lnbk1lc3NhZ2Uoa2V5Y2hhaW4sIGtleS5wdWIhKSkudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBzaWduVXNlciA9IChrZXkpID0+IHNpZ24oa2V5LCB1c2VyS2V5Y2hhaW4pO1xuICBjb25zdCBzaWduT3RoZXIgPSAoa2V5KSA9PiBzaWduKGtleSwgb3RoZXJLZXljaGFpbik7XG4gIGNvbnN0IHBhc3NwaHJhc2UgPSAndGVzdF9wYXNzcGhyYXNlJztcblxuICBjb25zdCBzdHViRGF0YSA9IHtcbiAgICB1bnNpZ25lZFNlbmRpbmdXYWxsZXQ6IHtcbiAgICAgIGtleUlkczogc2lub24uc3R1YigpLnJldHVybnMoWycwJywgJzEnLCAnMiddKSxcbiAgICB9LFxuICAgIHBhcnNlVHJhbnNhY3Rpb25EYXRhOiB7XG4gICAgICBiYWRLZXk6IHtcbiAgICAgICAga2V5Y2hhaW5zOiB7XG4gICAgICAgICAgLy8gdXNlciBwdWJsaWMga2V5IHN3YXBwZWQgb3V0XG4gICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgcHViOiBvdGhlcktleWNoYWluLnB1YixcbiAgICAgICAgICAgIGVuY3J5cHRlZFBydjogZGVmYXVsdEJpdEdvLmVuY3J5cHQoe1xuICAgICAgICAgICAgICBpbnB1dDogdXNlcktleWNoYWluLnBydixcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBub0N1c3RvbUNoYW5nZToge1xuICAgICAgICBrZXljaGFpbnM6IHsgdXNlcjogdXNlcktleWNoYWluIH0sXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGVtcHR5Q3VzdG9tQ2hhbmdlOiB7XG4gICAgICAgIGtleWNoYWluczogeyB1c2VyOiB1c2VyS2V5Y2hhaW4gfSxcbiAgICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICAgIGN1c3RvbUNoYW5nZToge30sXG4gICAgICB9LFxuICAgICAgLy8gbmVlZHMgdG8gYmUgYXN5bmMgZnVuY3Rpb24gdG8gY3JlYXRlIHNpZ25hdHVyZXNcbiAgICAgIGJhZFNpZ3M6IGFzeW5jICgpID0+ICh7XG4gICAgICAgIGtleWNoYWluczogeyB1c2VyOiB1c2VyS2V5Y2hhaW4gfSxcbiAgICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICAgIGN1c3RvbUNoYW5nZToge1xuICAgICAgICAgIGtleXM6IFtjaGFuZ2VLZXlzLnVzZXIsIGNoYW5nZUtleXMuYmFja3VwLCBjaGFuZ2VLZXlzLmJpdGdvXSxcbiAgICAgICAgICBzaWduYXR1cmVzOiBbXG4gICAgICAgICAgICBhd2FpdCBzaWduT3RoZXIoY2hhbmdlS2V5cy51c2VyKSxcbiAgICAgICAgICAgIGF3YWl0IHNpZ25PdGhlcihjaGFuZ2VLZXlzLmJhY2t1cCksXG4gICAgICAgICAgICBhd2FpdCBzaWduT3RoZXIoY2hhbmdlS2V5cy5iaXRnbyksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgZ29vZFNpZ3M6IGFzeW5jICgpID0+ICh7XG4gICAgICAgIGtleWNoYWluczogeyB1c2VyOiB1c2VyS2V5Y2hhaW4gfSxcbiAgICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgICAgIGN1c3RvbUNoYW5nZToge1xuICAgICAgICAgIGtleXM6IFtjaGFuZ2VLZXlzLnVzZXIsIGNoYW5nZUtleXMuYmFja3VwLCBjaGFuZ2VLZXlzLmJpdGdvXSxcbiAgICAgICAgICBzaWduYXR1cmVzOiBbXG4gICAgICAgICAgICBhd2FpdCBzaWduVXNlcihjaGFuZ2VLZXlzLnVzZXIpLFxuICAgICAgICAgICAgYXdhaXQgc2lnblVzZXIoY2hhbmdlS2V5cy5iYWNrdXApLFxuICAgICAgICAgICAgYXdhaXQgc2lnblVzZXIoY2hhbmdlS2V5cy5iaXRnbyksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgbWlzc2luZ091dHB1dHM6IDEsXG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHVuc2lnbmVkU2VuZGluZ1dhbGxldCA9IHNpbm9uLmNyZWF0ZVN0dWJJbnN0YW5jZShXYWxsZXQsIHN0dWJEYXRhLnVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnkpO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgdXNlciBwcml2YXRlIGtleSBjYW5ub3QgYmUgdmVyaWZpZWQgdG8gbWF0Y2ggdGhlIHVzZXIgcHVibGljIGtleScsIGFzeW5jICgpID0+IHtcbiAgICBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoc3R1YkRhdGEucGFyc2VUcmFuc2FjdGlvbkRhdGEuYmFkS2V5IGFzIGFueSk7XG4gICAgY29uc3QgdmVyaWZ5V2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCwge30pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgd2FsbGV0OiB2ZXJpZnlXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvdHJhbnNhY3Rpb24gcmVxdWlyZXMgdmVyaWZpY2F0aW9uIG9mIHVzZXIgcHVibGljIGtleSwgYnV0IGl0IHdhcyB1bmFibGUgdG8gYmUgdmVyaWZpZWQvXG4gICAgKTtcblxuICAgIChjb2luLnBhcnNlVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgY3VzdG9tIGNoYW5nZSB2ZXJpZmljYXRpb24gZGF0YSBpcyByZXF1aXJlZCBidXQgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoc3R1YkRhdGEucGFyc2VUcmFuc2FjdGlvbkRhdGEubm9DdXN0b21DaGFuZ2UgYXMgYW55KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL3BhcnNlZCB0cmFuc2FjdGlvbiBpcyBtaXNzaW5nIHJlcXVpcmVkIGN1c3RvbSBjaGFuZ2UgdmVyaWZpY2F0aW9uIGRhdGEvXG4gICAgKTtcblxuICAgIChjb2luLnBhcnNlVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgY3VzdG9tIGNoYW5nZSBrZXlzIG9yIGtleSBzaWduYXR1cmVzIGFyZSBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhzdHViRGF0YS5wYXJzZVRyYW5zYWN0aW9uRGF0YS5lbXB0eUN1c3RvbUNoYW5nZSBhcyBhbnkpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvY3VzdG9tQ2hhbmdlIHByb3BlcnR5IGlzIG1pc3Npbmcga2V5cyBvciBzaWduYXR1cmVzL1xuICAgICk7XG5cbiAgICAoY29pbi5wYXJzZVRyYW5zYWN0aW9uIGFzIGFueSkucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIGN1c3RvbSBjaGFuZ2Uga2V5IHNpZ25hdHVyZXMgY2Fubm90IGJlIHZlcmlmaWVkJywgYXN5bmMgKCkgPT4ge1xuICAgIHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcygoYXdhaXQgc3R1YkRhdGEucGFyc2VUcmFuc2FjdGlvbkRhdGEuYmFkU2lncygpKSBhcyBhbnkpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7fSxcbiAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgfSksXG4gICAgICAvdHJhbnNhY3Rpb24gcmVxdWlyZXMgdmVyaWZpY2F0aW9uIG9mIGN1c3RvbSBjaGFuZ2Uga2V5IHNpZ25hdHVyZXMsIGJ1dCB0aGV5IHdlcmUgdW5hYmxlIHRvIGJlIHZlcmlmaWVkL1xuICAgICk7XG5cbiAgICAoY29pbi5wYXJzZVRyYW5zYWN0aW9uIGFzIGFueSkucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgYSBjdXN0b20gY2hhbmdlIHRyYW5zYWN0aW9uIHdoZW4gY2hhbmdlIGtleXMgYW5kIHNpZ25hdHVyZXMgYXJlIHZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgIHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcygoYXdhaXQgc3R1YkRhdGEucGFyc2VUcmFuc2FjdGlvbkRhdGEuZ29vZFNpZ3MoKSkgYXMgYW55KTtcblxuICAgIC8vIGlmIHZlcmlmeSB0cmFuc2FjdGlvbiBnZXRzIHJlamVjdGVkIHdpdGggdGhlIG91dHB1dHMgbWlzc2luZyBlcnJvciBtZXNzYWdlLFxuICAgIC8vIHRoZW4gd2Uga25vdyB0aGF0IHRoZSB2ZXJpZmljYXRpb24gb2YgdGhlIGN1c3RvbSBjaGFuZ2Uga2V5IHNpZ25hdHVyZXMgd2FzIHN1Y2Nlc3NmdWxcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC9leHBlY3RlZCBvdXRwdXRzIG1pc3NpbmcgaW4gdHJhbnNhY3Rpb24gcHJlYnVpbGQvXG4gICAgKTtcblxuICAgIChjb2luLnBhcnNlVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGFsbG93IG1vcmUgdGhhbiAxNTAgYmFzaXMgcG9pbnRzIG9mIGltcGxpY2l0IGV4dGVybmFsIG91dHB1dHMgKGZvciBwYXlnbyBvdXRwdXRzKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTAwMDAsXG4gICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE1MSxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIH0pLFxuICAgICAgL3ByZWJ1aWxkIGF0dGVtcHRzIHRvIHNwZW5kIHRvIHVuaW50ZW5kZWQgZXh0ZXJuYWwgcmVjaXBpZW50cy9cbiAgICApO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IDE1MCBiYXNpcyBwb2ludHMgb2YgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0cyAoZm9yIHBheWdvIG91dHB1dHMpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxMDAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxNSxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgfSxcbiAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuXG4gICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBhbnkgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0cyBpZiBwYXlnbyBvdXRwdXRzIGFyZSBkaXNhbGxvd2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxMCxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge1xuICAgICAgICAgIGFsbG93UGF5Z29PdXRwdXQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICAvcHJlYnVpbGQgYXR0ZW1wdHMgdG8gc3BlbmQgdG8gdW5pbnRlbmRlZCBleHRlcm5hbCByZWNpcGllbnRzL1xuICAgICk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYWxsb3cgcGF5Z28gb3V0cHV0cyBpZiBlbXB0eSB2ZXJpZmljYXRpb24gb2JqZWN0IGlzIHBhc3NlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTAwMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTUsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICB9LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgIH0sXG4gICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IGEgYnJpZGdpbmcgdHJhbnNhY3Rpb24gd2hvc2UgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0IG1hdGNoZXMgdGhlIGJyaWRnZSBhbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQnJpZGdpbmcgaW50ZW50cyAoZS5nLiBCVEMgLT4gc0JUQyBwZWctaW4pIGNhcnJ5IG5vIHJlY2lwaWVudHM7IHRoZSBzaW5nbGUgZXh0ZXJuYWwgb3V0cHV0XG4gICAgLy8gaXMgdGhlIGJyaWRnZSBkZXBvc2l0IGFkZHJlc3MgY29tcHV0ZWQgc2VydmVyLXNpZGUuIFdpdGggZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50IDAgdGhlXG4gICAgLy8gcGF5Z28gbGltaXQgaXMgMCwgc28gYW55IGltcGxpY2l0IGV4dGVybmFsIG91dHB1dCB3b3VsZCBub3JtYWxseSBiZSByZWplY3RlZCBhcyBhblxuICAgIC8vIFwidW5pbnRlbmRlZCBleHRlcm5hbCByZWNpcGllbnRcIi4gRm9yIHR5cGU6ICdicmlkZ2luZycgd2UgaW5zdGVhZCB2ZXJpZnkgdGhhdCB0aGUgaW1wbGljaXRcbiAgICAvLyBleHRlcm5hbCBzcGVuZCBlcXVhbHMgYnJpZGdpbmdQYXJhbXMuc2J0Yy5hbW91bnQuXG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdzYnRjX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgYW1vdW50OiAnMjIwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAyMjAwMCxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgYnJpZGdpbmdQYXJhbXM6IHsgc2J0YzogeyBhbW91bnQ6ICcyMjAwMCcsIHN0YWNrc1JlY2lwaWVudDogJ1NNMVgnLCBtYXhGZWU6ICcxMDAwJywgbG9ja1RpbWU6IDEwMCB9IH0sXG4gICAgICB9LFxuICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICB0eEhleDogJzAwJyxcbiAgICAgIH0sXG4gICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG5cbiAgICBjb2luTW9jay5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IGEgYnJpZGdpbmcgdHJhbnNhY3Rpb24gd2hvc2UgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSBicmlkZ2UgYW1vdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIG1pc3NpbmdPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnc2J0Y19kZXBvc2l0X2FkZHJlc3MnLFxuICAgICAgICAgIGFtb3VudDogJzUwMDAwJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogNTAwMDAsXG4gICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgICAgdHlwZTogJ2JyaWRnaW5nJyxcbiAgICAgICAgICBicmlkZ2luZ1BhcmFtczogeyBzYnRjOiB7IGFtb3VudDogJzIyMDAwJywgc3RhY2tzUmVjaXBpZW50OiAnU00xWCcsIG1heEZlZTogJzEwMDAnLCBsb2NrVGltZTogMTAwIH0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC9icmlkZ2luZyBvdXRwdXQgYW1vdW50IFxcKDUwMDAwXFwpIGRvZXMgbm90IG1hdGNoIGludGVuZGVkIGJyaWRnZSBhbW91bnQgXFwoMjIwMDBcXCkvXG4gICAgKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgYSBicmlkZ2luZyB0cmFuc2FjdGlvbiB0aGF0IGlzIG1pc3NpbmcgYnJpZGdpbmdQYXJhbXMuc2J0Yy5hbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdzYnRjX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgYW1vdW50OiAnMjIwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAyMjAwMCxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgICB0eXBlOiAnYnJpZGdpbmcnLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pLFxuICAgICAgL2JyaWRnaW5nIHRyYW5zYWN0aW9uIGlzIG1pc3NpbmcgYnJpZGdpbmdQYXJhbXMuc2J0Yy5hbW91bnQvXG4gICAgKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdGlsbCByZWplY3QgdGhlIHNhbWUgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0IHdoZW4gdGhlIGludGVudCBpcyBub3QgYnJpZGdpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gU2FtZSBzaGFwZSBhcyB0aGUgYnJpZGdpbmcgdGVzdCBhYm92ZSwgYnV0IHdpdGhvdXQgdHlwZTogJ2JyaWRnaW5nJyB0aGUgaW1wbGljaXQgZXh0ZXJuYWxcbiAgICAvLyBvdXRwdXQgaXMgdHJlYXRlZCBhcyBhbiB1bmludGVuZGVkIGV4dGVybmFsIHJlY2lwaWVudCBhbmQgcmVqZWN0ZWQuXG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdzYnRjX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgYW1vdW50OiAnMjIwMDAnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAyMjAwMCxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KSxcbiAgICAgIC9wcmVidWlsZCBhdHRlbXB0cyB0byBzcGVuZCB0byB1bmludGVuZGVkIGV4dGVybmFsIHJlY2lwaWVudHMvXG4gICAgKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3F1YW50dW0tcmVzaXN0YW50IHN3ZWVwIChxcjogdHJ1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBleHBsaWNpdCBleHRlcm5hbCBvdXRwdXRzIGFyZSBwcmVzZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGNvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAgICBrZXljaGFpbnM6IHt9IGFzIGFueSxcbiAgICAgICAga2V5U2lnbmF0dXJlczoge30sXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbeyBhZGRyZXNzOiAnZXh0ZXJuYWxfYWRkcicsIGFtb3VudDogJzUwMDAnIH1dLFxuICAgICAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFt7IGFkZHJlc3M6ICdjaGFuZ2VfYWRkcicsIGFtb3VudDogJzQwMDAnIH1dLFxuICAgICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDUwMDAsXG4gICAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczogeyB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLCBxcjogdHJ1ZSB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgICB2ZXJpZmljYXRpb246IHt9LFxuICAgICAgICB9KSxcbiAgICAgICAgL3F1YW50dW0tcmVzaXN0YW50IHN3ZWVwIHRyYW5zYWN0aW9ucyBtdXN0IG9ubHkgY29udGFpbiB3YWxsZXQtaW50ZXJuYWwgb3V0cHV0cy9cbiAgICAgICk7XG5cbiAgICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHdoZW4gaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0cyBhcmUgcHJlc2VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgICBvdXRwdXRzOiBbXSxcbiAgICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW10sXG4gICAgICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbeyBhZGRyZXNzOiAncGF5Z29fYWRkcicsIGFtb3VudDogJzEwMCcgfV0sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFt7IGFkZHJlc3M6ICdjaGFuZ2VfYWRkcicsIGFtb3VudDogJzk5MDAnIH1dLFxuICAgICAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDAsXG4gICAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTAwLFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB7IHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsIHFyOiB0cnVlIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDoge30sXG4gICAgICAgICAgd2FsbGV0OiB1bnNpZ25lZFNlbmRpbmdXYWxsZXQgYXMgYW55LFxuICAgICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICAgIH0pLFxuICAgICAgICAvcXVhbnR1bS1yZXNpc3RhbnQgc3dlZXAgdHJhbnNhY3Rpb25zIG11c3Qgb25seSBjb250YWluIHdhbGxldC1pbnRlcm5hbCBvdXRwdXRzL1xuICAgICAgKTtcblxuICAgICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHdoZW4gYWxsIG91dHB1dHMgYXJlIGludGVybmFsIChjaGFuZ2Ugb25seSknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb2luTW9jayA9IHNpbm9uLnN0dWIoY29pbiwgJ3BhcnNlVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICAgIGtleWNoYWluczoge30gYXMgYW55LFxuICAgICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgICAgb3V0cHV0czogW3sgYWRkcmVzczogJ2NoYW5nZV9hZGRyJywgYW1vdW50OiAnMTAwMDAnIH1dLFxuICAgICAgICBtaXNzaW5nT3V0cHV0czogW10sXG4gICAgICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBbXSxcbiAgICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbeyBhZGRyZXNzOiAnY2hhbmdlX2FkZHInLCBhbW91bnQ6ICcxMDAwMCcgfV0sXG4gICAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMCxcbiAgICAgICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwLFxuICAgICAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbjogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7IHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsIHFyOiB0cnVlIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHt9LFxuICAgICAgICB3YWxsZXQ6IHVuc2lnbmVkU2VuZGluZ1dhbGxldCBhcyBhbnksXG4gICAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG5cbiAgICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IHFyIGNoZWNrIHdoZW4gcXIgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNvaW5Nb2NrID0gc2lub24uc3R1Yihjb2luLCAncGFyc2VUcmFuc2FjdGlvbicpLnJlc29sdmVzKHtcbiAgICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICAgIGtleVNpZ25hdHVyZXM6IHt9LFxuICAgICAgICBvdXRwdXRzOiBbXSxcbiAgICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0czogW3sgYWRkcmVzczogJ2V4dGVybmFsX2FkZHInLCBhbW91bnQ6ICc1MDAwJyB9XSxcbiAgICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiA1MDAwLFxuICAgICAgICBpbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDAsXG4gICAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHsgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSB9LFxuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnMDAnIH0sXG4gICAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcblxuICAgICAgY29pbk1vY2sucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBiaWdpbnQgYW1vdW50cycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBuZWVkIGEgY29pbiB0aGF0IHVzZXMgYmlnaW50XG4gICAgY29uc3QgYmlnaW50Q29pbiA9IGdldFV0eG9Db2luKCd0ZG9nZScpO1xuXG4gICAgY29uc3QgY29pbk1vY2sgPSBzaW5vbi5zdHViKGJpZ2ludENvaW4sICdwYXJzZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoe1xuICAgICAga2V5Y2hhaW5zOiB7fSBhcyBhbnksXG4gICAgICBrZXlTaWduYXR1cmVzOiB7fSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgbWlzc2luZ091dHB1dHM6IFtdLFxuICAgICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdleHRlcm5hbF9hZGRyZXNzJyxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICdleHRlcm5hbF9hZGRyZXNzXzInLFxuICAgICAgICAgIGFtb3VudDogJzE1JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogQmlnSW50KDEwMDAwKSxcbiAgICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogQmlnSW50KDE1KSxcbiAgICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJpZ2ludENvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgfSxcbiAgICAgIHdhbGxldDogdW5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge30sXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcblxuICAgIGNvaW5Nb2NrLnJlc3RvcmUoKTtcbiAgfSk7XG59KTtcbiJdfQ==