@bitgo/abstract-utxo 10.19.4 → 10.21.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 (105) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +16 -1
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +34 -11
  4. package/dist/cjs/src/transaction/decode.d.ts +2 -1
  5. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  6. package/dist/cjs/src/transaction/decode.js +5 -1
  7. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +32 -2
  8. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  9. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +71 -18
  10. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +7 -1
  11. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  12. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -1
  13. package/dist/cjs/src/transaction/fixedScript/index.d.ts +1 -1
  14. package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -1
  15. package/dist/cjs/src/transaction/fixedScript/index.js +4 -2
  16. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +3 -3
  17. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -0
  18. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  19. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +14 -5
  20. package/dist/cjs/src/transaction/index.d.ts +2 -0
  21. package/dist/cjs/src/transaction/index.d.ts.map +1 -1
  22. package/dist/cjs/src/transaction/index.js +6 -2
  23. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  24. package/dist/cjs/src/transaction/signTransaction.js +12 -2
  25. package/dist/cjs/src/transaction/types.d.ts +1 -0
  26. package/dist/cjs/src/transaction/types.d.ts.map +1 -1
  27. package/dist/cjs/src/transaction/types.js +1 -1
  28. package/dist/cjs/test/integration/impl/bch/bch.d.ts +1 -1
  29. package/dist/cjs/test/integration/impl/bch/bch.d.ts.map +1 -1
  30. package/dist/cjs/test/integration/impl/bch/bch.js +12 -10
  31. package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts +2 -0
  32. package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts.map +1 -0
  33. package/dist/cjs/test/unit/buildSignSendLegacyFormat.js +99 -0
  34. package/dist/cjs/test/unit/customSigner.d.ts +1 -2
  35. package/dist/cjs/test/unit/customSigner.d.ts.map +1 -1
  36. package/dist/cjs/test/unit/customSigner.js +5 -15
  37. package/dist/cjs/test/unit/impl/bch/unit/bch.js +41 -108
  38. package/dist/cjs/test/unit/impl/bcha/unit/index.js +13 -19
  39. package/dist/cjs/test/unit/impl/bsv/unit/index.js +9 -7
  40. package/dist/cjs/test/unit/impl/btg/unit/index.js +8 -4
  41. package/dist/cjs/test/unit/impl/dash/unit/index.js +9 -7
  42. package/dist/cjs/test/unit/impl/doge/unit/index.js +9 -7
  43. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts +1 -1
  44. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts.map +1 -1
  45. package/dist/cjs/test/unit/impl/zec/unit/index.js +9 -8
  46. package/dist/cjs/test/unit/keychains.d.ts +1 -1
  47. package/dist/cjs/test/unit/keychains.d.ts.map +1 -1
  48. package/dist/cjs/test/unit/keychains.js +2 -3
  49. package/dist/cjs/test/unit/postProcessPrebuild.d.ts +1 -1
  50. package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -1
  51. package/dist/cjs/test/unit/postProcessPrebuild.js +7 -4
  52. package/dist/cjs/test/unit/prebuildAndSign.js +3 -5
  53. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts +1 -1
  54. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts.map +1 -1
  55. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +5 -6
  56. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +6 -7
  57. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +1 -1
  58. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -1
  59. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +32 -29
  60. package/dist/cjs/test/unit/signTransaction.js +6 -5
  61. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +65 -1
  62. package/dist/cjs/test/unit/transaction.js +20 -21
  63. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -1
  64. package/dist/cjs/test/unit/txFormat.js +25 -10
  65. package/dist/cjs/test/unit/util/assert.d.ts +3 -0
  66. package/dist/cjs/test/unit/util/assert.d.ts.map +1 -0
  67. package/dist/cjs/test/unit/util/assert.js +24 -0
  68. package/dist/cjs/test/unit/util/fixtures.d.ts +1 -2
  69. package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -1
  70. package/dist/cjs/test/unit/util/fixtures.js +8 -5
  71. package/dist/cjs/test/unit/util/index.d.ts +1 -0
  72. package/dist/cjs/test/unit/util/index.d.ts.map +1 -1
  73. package/dist/cjs/test/unit/util/index.js +2 -1
  74. package/dist/cjs/test/unit/wallet.d.ts +1 -1
  75. package/dist/cjs/test/unit/wallet.d.ts.map +1 -1
  76. package/dist/cjs/test/unit/wallet.js +15 -12
  77. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  78. package/dist/esm/abstractUtxoCoin.d.ts +16 -1
  79. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  80. package/dist/esm/abstractUtxoCoin.js +35 -12
  81. package/dist/esm/transaction/decode.d.ts +2 -1
  82. package/dist/esm/transaction/decode.d.ts.map +1 -1
  83. package/dist/esm/transaction/decode.js +4 -1
  84. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +32 -2
  85. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  86. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +69 -18
  87. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +7 -1
  88. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  89. package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -1
  90. package/dist/esm/transaction/fixedScript/index.d.ts +1 -1
  91. package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -1
  92. package/dist/esm/transaction/fixedScript/index.js +2 -2
  93. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +3 -3
  94. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -0
  95. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  96. package/dist/esm/transaction/fixedScript/signTransaction.js +14 -5
  97. package/dist/esm/transaction/index.d.ts +2 -0
  98. package/dist/esm/transaction/index.d.ts.map +1 -1
  99. package/dist/esm/transaction/index.js +3 -1
  100. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  101. package/dist/esm/transaction/signTransaction.js +14 -4
  102. package/dist/esm/transaction/types.d.ts +1 -0
  103. package/dist/esm/transaction/types.d.ts.map +1 -1
  104. package/dist/esm/transaction/types.js +1 -1
  105. package/package.json +10 -10
@@ -34,7 +34,6 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const assert = __importStar(require("assert"));
37
- const should = require("should");
38
37
  const nock = require("nock");
39
38
  const sdk_test_1 = require("@bitgo/sdk-test");
40
39
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
@@ -143,18 +142,18 @@ function run(sourceCoin, recoveryCoin) {
143
142
  }
144
143
  }));
145
144
  }
146
- (0, util_1.shouldEqualJSON)(recoveryObj, await (0, util_1.getFixture)(sourceCoin, `recovery/crossChainRecovery-${recoveryCoin.getChain()}-${name}`, recoveryObj));
145
+ (0, util_1.assertEqualJSON)(recoveryObj, await (0, util_1.getFixture)(sourceCoin, `recovery/crossChainRecovery-${recoveryCoin.getChain()}-${name}`, recoveryObj));
147
146
  }
148
147
  function checkRecoveryPsbtSignature(psbtHex) {
149
148
  // Parse using wasm-utxo for signature verification
150
149
  const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(Buffer.from(psbtHex, 'hex'), sourceCoin.name);
151
150
  const parsed = wasmPsbt.parseTransactionWithWalletKeys(wasmWalletKeys, { replayProtection: { publicKeys: [] } });
152
151
  const unspents = getRecoveryUnspents();
153
- should.equal(parsed.inputs.length, unspents.length);
152
+ assert.strictEqual(parsed.inputs.length, unspents.length);
154
153
  // Verify user key has signed each input (same pattern as backupKeyRecovery test)
155
154
  parsed.inputs.forEach((_, i) => {
156
155
  const userSigned = wasmPsbt.verifySignature(i, xprivs[0]);
157
- userSigned.should.eql(true, `Input ${i} should be signed by user key`);
156
+ assert.strictEqual(userSigned, true, `Input ${i} should be signed by user key`);
158
157
  });
159
158
  }
160
159
  it('should test signed cross chain recovery', async () => {
@@ -176,7 +175,7 @@ function run(sourceCoin, recoveryCoin) {
176
175
  ...params,
177
176
  xprv: util_1.keychainsBase58[0].prv,
178
177
  }));
179
- should.equal(getRecoveryProviderStub.callCount, 1);
178
+ assert.strictEqual(getRecoveryProviderStub.callCount, 1);
180
179
  // Verify fixture match
181
180
  await matchFixture('signed', signedRecovery);
182
181
  // Verify PSBT has valid signatures (user key signed)
@@ -201,7 +200,7 @@ function run(sourceCoin, recoveryCoin) {
201
200
  ...params,
202
201
  signed: false,
203
202
  }));
204
- should.equal(getRecoveryProviderStub.callCount, 1);
203
+ assert.strictEqual(getRecoveryProviderStub.callCount, 1);
205
204
  // Verify fixture match
206
205
  await matchFixture('unsigned', unsignedRecovery);
207
206
  // Verify the unsigned PSBT can be signed
@@ -295,4 +294,4 @@ describe('convertLtcAddressToLegacyFormat', function () {
295
294
  assert.strictEqual(result, bech32Address);
296
295
  });
297
296
  });
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyxpQ0FBa0M7QUFDbEMsNkJBQThCO0FBRTlCLDhDQUEwQztBQUMxQyxnREFBNkU7QUFDN0UsNkNBQStCO0FBRS9CLHNDQVFzQjtBQUN0Qiw4Q0FBa0U7QUFFbEUsa0NBVWlCO0FBQ2pCLGlEQUE4QztBQUU5QyxpQ0FBd0Q7QUFFeEQsU0FBUyxRQUFRLENBQUMsQ0FBaUI7SUFDakMsT0FBTyxJQUFBLGtCQUFPLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBc0IsRUFBRSxRQUFnQixFQUFFLFVBQWtDO0lBQzlGLE9BQU87UUFDTCxJQUFBLHFCQUFTLEdBQUU7YUFDUixHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsUUFBUSxFQUFFLENBQUM7YUFDcEQsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNWLEVBQUUsRUFBRSxRQUFRO1lBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDckIsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixJQUFJLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDLENBQUM7YUFDRCxPQUFPLEVBQUU7UUFDWixHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN0QixJQUFBLHFCQUFTLEdBQUU7YUFDUixHQUFHLENBQUMsV0FBVyxJQUFJLENB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QUUseUJBQXlCLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvRUFBb0UsRUFBRTtRQUN2RSxNQUFNLE9BQU8sR0FBRyxvQ0FBb0MsQ0FBQztRQUNyRCxNQUFNLGFBQWEsR0FBRyxJQUFBLHFDQUErQixFQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0RSxpREFBaUQ7UUFDakQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLDRDQUE0QyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3hHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLDZDQUE2QyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUEscUNBQStCLEVBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZ2V0U2VlZCB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIHdhc21BZGRyZXNzLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBnZXRXYWxsZXQsXG4gIHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzLFxuICBnZW5lcmF0ZUFkZHJlc3MsXG4gIGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBpc01haW5uZXRDb2luLCBpc1Rlc3RuZXRDb2luIH0gZnJvbSAnLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB0eXBlIHsgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uLy4uLy4uL3NyYy91bnNwZW50JztcbmltcG9ydCB7XG4gIGdldEZpeHR1cmUsXG4gIGtleWNoYWluc0Jhc2U1OCxcbiAgS2V5Y2hhaW5CYXNlNTgsXG4gIHNob3VsZEVxdWFsSlNPTixcbiAgdXR4b0NvaW5zLFxuICBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gIGRlZmF1bHRCaXRHbyxcbiAgZ2V0VXR4b0NvaW4sXG4gIGNyZWF0ZVdhc21XYWxsZXRVbnNwZW50LFxufSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IG5vY2tCaXRHbyB9IGZyb20gJy4uL3V0aWwvbm9ja0JpdEdvJztcblxuaW1wb3J0IHsgV2FzbUNyb3NzQ2hhaW5SZWNvdmVyeVByb3ZpZGVyIH0gZnJvbSAnLi9tb2NrJztcblxuZnVuY3Rpb24gZ2V0S2V5SWQoazogS2V5Y2hhaW5CYXNlNTgpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0U2VlZChrLnB1YikudG9TdHJpbmcoJ2hleCcpO1xufVxuXG5mdW5jdGlvbiBub2NrV2FsbGV0KGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldElkOiBzdHJpbmcsIHdhbGxldEtleXM6IFRyaXBsZTxLZXljaGFpbkJhc2U1OD4pOiBub2NrLlNjb3BlW10ge1xuICByZXR1cm4gW1xuICAgIG5vY2tCaXRHbygpXG4gICAgICAuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHt3YWxsZXRJZH1gKVxuICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogd2FsbGV0SWQsXG4gICAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgICAgbGFiZWw6ICdjcm9zc0NoYWluUmVjb3ZlcnknLFxuICAgICAgICBrZXlzOiB3YWxsZXRLZXlzLm1hcCgoaykgPT4gZ2V0S2V5SWQoaykpLFxuICAgICAgfSlcbiAgICAgIC5wZXJzaXN0KCksXG4gICAgLi4ud2FsbGV0S2V5cy5tYXAoKGspID0+XG4gICAgICBub2NrQml0R28oKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS9rZXkvJHtnZXRLZXlJZChrKX1gKVxuICAgICAgICAucmVwbHkoMjAwLCBrKVxuICAgICAgICAucGVyc2lzdCgpXG4gICAgKSxcbiAgXTtcbn1cblxudHlwZSBBZGRyZXNzID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBub2NrV2FsbGV0QWRkcmVzcyhjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXRJZDogc3RyaW5nLCBhZGRyZXNzOiBBZGRyZXNzKTogbm9jay5TY29wZSB7XG4gIHJldHVybiBub2NrQml0R28oKVxuICAgIC5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3dhbGxldC8ke3dhbGxldElkfS9hZGRyZXNzLyR7YWRkcmVzcy5hZGRyZXNzfWApXG4gICAgLnJlcGx5KDIwMCwge1xuICAgICAgYWRkcmVzczogYWRkcmVzcy5hZGRyZXNzLFxuICAgICAgY2hhaW46IGFkZHJlc3MuY2hhaW4sXG4gICAgICBpbmRleDogYWRkcmVzcy5pbmRleCxcbiAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgIHdhbGxldDogd2FsbGV0SWQsXG4gICAgfSlcbiAgICAucGVyc2lzdCgpO1xufVxuXG4vKipcbiAqIFNldHVwIHRlc3QgZm9yIGNyb3NzLWNoYWluIHJlY292ZXJ5LlxuICpcbiAqIFVzZXJzIGNhbiByZWNlaXZlIGRlcG9zaXRzIG9uIHdhbGxldCBhZGRyZXNzZXMgdGhhdCBhcmUgb24gYSBkaWZmZXJlbnQgY2hhaW4uXG4gKlxuICogRm9yIGluc3RhbmNlLCBhIHVzZXIgY2FuIHJlY2VpdmUgbGl0ZWNvaW4gb24gYSBiaXRjb2luIHdhbGxldC5cbiAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgbGl0ZWNvaW4gYmxvY2tjaGFpbiBoYXMgYSB0cmFuc2FjdGlvbiB3aXRoIG91dHB1dHMgdGhhdCBhcmUgc3BlbmRhYmxlXG4gKiB3aXRoIGtleXMgdGhhdCB3ZXJlIG9yaWdpbmFsbHkgY3JlYXRlZCBmb3IgYSBCaXRHbyBCVEMgd2FsbGV0LlxuICogSW4gdGhpcyBleGFtcGxlLCBMVEMgaXMgdGhlIFwic291cmNlIGNvaW5cIiBhbmQgQlRDIGlzIHRoZSBcInJlY292ZXJ5IGNvaW5cIlxuICogSW4gY2FzZXMgbGlrZSB0aGVzZSB3ZSBtdXN0IHVzZSBjb25zdHJ1Y3QgYSB0cmFuc2FjdGlvbiBmb3IgbGl0ZWNvaW4gbmV0d29yayB1c2luZyBrZXlzIG9mIHRoZVxuICogYml0Y29pbiB3YWxsZXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZUNvaW4gLSB0aGUgY29pbiB0byBjb25zdHJ1Y3QgdGhlIHRyYW5zYWN0aW9uIGZvclxuICogQHBhcmFtIHJlY292ZXJ5Q29pbiAtIHRoZSBjb2luIHRoZSByZWNlaXZpbmcgd2FsbGV0IHdhcyBzZXQgdXAgZm9yXG4gKi9cbi8vIEdldCB3YXNtIHdhbGxldCBrZXlzIGZvciBzaWduYXR1cmUgdmVyaWZpY2F0aW9uXG5jb25zdCB7IHdhbGxldEtleXM6IHdhc21XYWxsZXRLZXlzLCB4cHJpdnMgfSA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpO1xuXG5mdW5jdGlvbiBydW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbiwgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luKSB7XG4gIGRlc2NyaWJlKGBDcm9zcy1DaGFpbiBSZWNvdmVyeSBbc291cmNlQ29pbj0ke3NvdXJjZUNvaW4uZ2V0Q2hhaW4oKX0gcmVjb3ZlcnlDb2luPSR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9XWAsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNvdmVyeVdhbGxldElkID0gJzVhYmFjZWJlMjhkNzJmYmQwN2UwYjhjYmJhMGZmMzllJztcbiAgICAvLyB0aGUgYWRkcmVzcyB0aGUgYWNjaWRlbnRhbCBkZXBvc2l0IHdlbnQgdG8sIGluIGJvdGggc291cmNlQ29pbiBhbmQgYWRkcmVzc0NvaW4gZm9ybWF0c1xuICAgIGNvbnN0IFtkZXBvc2l0QWRkcmVzc1NvdXJjZUNvaW4sIGRlcG9zaXRBZGRyZXNzUmVjb3ZlcnlDb2luXSA9IFtzb3VyY2VDb2luLCByZWNvdmVyeUNvaW5dLm1hcCgoY29pbikgPT4gKHtcbiAgICAgIGFkZHJlc3M6IGdlbmVyYXRlQWRkcmVzcyhjb2luLm5hbWUsIHsga2V5Y2hhaW5zOiBrZXljaGFpbnNCYXNlNTgsIGNoYWluOiAwLCBpbmRleDogMCB9KSxcbiAgICAgIGNoYWluOiAwLFxuICAgICAgaW5kZXg6IDAsXG4gICAgfSkpO1xuICAgIGNvbnN0IGNoYWluID0gMDtcbiAgICBjb25zdCBpbmRleCA9IDE7XG4gICAgLy8gdGhlIGFkZHJlc3Mgd2hlcmUgd2Ugd2FudCB0byByZWNvdmVyIG91ciBmdW5kcyB0b1xuICAgIGNvbnN0IHJlY292ZXJ5QWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzcyhzb3VyY2VDb2luLm5hbWUsIHtcbiAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zQmFzZTU4LFxuICAgICAgY2hhaW4sXG4gICAgICBpbmRleCxcbiAgICB9KTtcbiAgICBjb25zdCBub2Nrczogbm9jay5TY29wZVtdID0gW107XG5cbiAgICAvLyBDcmVhdGUgcmVjb3ZlcnkgdW5zcGVudCB1c2luZyB3YXNtLXV0eG8gKG5vIHV0eG9saWIgZGVwZW5kZW5jeSlcbiAgICBmdW5jdGlvbiBnZXRSZWNvdmVyeVVuc3BlbnRzKCk6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSB7XG4gICAgICBjb25zdCBkZXBvc2l0VmFsdWUgPSAoc291cmNlQ29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50JyA/IEJpZ0ludCgxZTgpIDogMWU4KSBhcyBUTnVtYmVyO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgY3JlYXRlV2FzbVdhbGxldFVuc3BlbnQ8VE51bWJlcj4oZGVwb3NpdEFkZHJlc3NTb3VyY2VDb2luLmFkZHJlc3MsIGNoYWluLCBpbmRleCwgZGVwb3NpdFZhbHVlLCBzb3VyY2VDb2luLm5hbWUpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBiZWZvcmUoJ3NldHVwIG5vY2tzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbm9ja3MucHVzaCguLi5ub2NrV2FsbGV0KHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCwga2V5Y2hhaW5zQmFzZTU4KSk7XG4gICAgICBub2Nrcy5wdXNoKG5vY2tXYWxsZXRBZGRyZXNzKHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCwgZGVwb3NpdEFkZHJlc3NSZWNvdmVyeUNvaW4pKTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tzLmZvckVhY2goKG4pID0+IG4uZG9uZSgpKTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBtYXRjaEZpeHR1cmUoXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICByZWNvdmVyeTogQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj5cbiAgICApIHtcbiAgICAgIGxldCByZWNvdmVyeU9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLnJlY292ZXJ5IH07XG4gICAgICBpZiAoc291cmNlQ29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50Jykge1xuICAgICAgICByZWNvdmVyeU9iaiA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkocmVjb3ZlcnlPYmosIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2hvdWxkRXF1YWxKU09OKFxuICAgICAgICByZWNvdmVyeU9iaixcbiAgICAgICAgYXdhaXQgZ2V0Rml4dHVyZShzb3VyY2VDb2luLCBgcmVjb3ZlcnkvY3Jvc3NDaGFpblJlY292ZXJ5LSR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9LSR7bmFtZX1gLCByZWNvdmVyeU9iailcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tSZWNvdmVyeVBzYnRTaWduYXR1cmUocHNidEhleDogc3RyaW5nKSB7XG4gICAgICAvLyBQYXJzZSB1c2luZyB3YXNtLXV0eG8gZm9yIHNpZ25hdHVyZSB2ZXJpZmljYXRpb25cbiAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhCdWZmZXIuZnJvbShwc2J0SGV4LCAnaGV4JyksIHNvdXJjZUNvaW4ubmFtZSk7XG4gICAgICBjb25zdCBwYXJzZWQgPSB3YXNtUHNidC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMod2FzbVdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9IH0pO1xuICAgICAgY29uc3QgdW5zcGVudHMgPSBnZXRSZWNvdmVyeVVuc3BlbnRzKCk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkLmlucHV0cy5sZW5ndGgsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICAvLyBWZXJpZnkgdXNlciBrZXkgaGFzIHNpZ25lZCBlYWNoIGlucHV0IChzYW1lIHBhdHRlcm4gYXMgYmFja3VwS2V5UmVjb3ZlcnkgdGVzdClcbiAgICAgIHBhcnNlZC5pbnB1dHMuZm9yRWFjaCgoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyU2lnbmVkID0gd2FzbVBzYnQudmVyaWZ5U2lnbmF0dXJlKGksIHhwcml2c1swXSk7XG4gICAgICAgIHVzZXJTaWduZWQuc2hvdWxkLmVxbCh0cnVlLCBgSW5wdXQgJHtpfSBzaG91bGQgYmUgc2lnbmVkIGJ5IHVzZXIga2V5YCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpdCgnc2hvdWxkIHRlc3Qgc2lnbmVkIGNyb3NzIGNoYWluIHJlY292ZXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGVwb3NpdFVuc3BlbnQgPSBnZXRSZWNvdmVyeVVuc3BlbnRzKClbMF07XG4gICAgICAvLyBQYXJzZSB0eGlkIGZyb20gdGhlIHVuc3BlbnQgaWQgKGZvcm1hdDogdHhpZDp2b3V0KVxuICAgICAgY29uc3QgZGVwb3NpdFR4aWQgPSBkZXBvc2l0VW5zcGVudC5pZC5zcGxpdCgnOicpWzBdO1xuICAgICAgLy8gVXNlIHRoZSBkZXBvc2l0IGFkZHJlc3MgYXMgdGhlIGlucHV0IGFkZHJlc3MgKHNpbXVsYXRpbmcgYSBwMnNoIGlucHV0KVxuICAgICAgY29uc3QgaW5wdXRBZGRyZXNzID0gZ2VuZXJhdGVBZGRyZXNzKHNvdXJjZUNvaW4ubmFtZSwgeyBrZXljaGFpbnM6IGtleWNoYWluc0Jhc2U1OCwgY2hhaW46IDAsIGluZGV4OiAyIH0pO1xuICAgICAgY29uc3QgZ2V0UmVjb3ZlcnlQcm92aWRlclN0dWIgPSBzaW5vblxuICAgICAgICAuc3R1YihBYnN0cmFjdFV0eG9Db2luLnByb3RvdHlwZSwgJ2dldFJlY292ZXJ5UHJvdmlkZXInKVxuICAgICAgICAucmV0dXJucyhuZXcgV2FzbUNyb3NzQ2hhaW5SZWNvdmVyeVByb3ZpZGVyPFROdW1iZXI+KHNvdXJjZUNvaW4sIGRlcG9zaXRVbnNwZW50LCBbaW5wdXRBZGRyZXNzXSkpO1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICByZWNvdmVyeUNvaW4sXG4gICAgICAgIHR4aWQ6IGRlcG9zaXRUeGlkLFxuICAgICAgICByZWNvdmVyeUFkZHJlc3MsXG4gICAgICAgIHdhbGxldDogcmVjb3ZlcnlXYWxsZXRJZCxcbiAgICAgIH07XG4gICAgICBjb25zdCBzaWduZWRSZWNvdmVyeSA9IChhd2FpdCBzb3VyY2VDb2luLnJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyPih7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgeHBydjoga2V5Y2hhaW5zQmFzZTU4WzBdLnBydixcbiAgICAgIH0pKSBhcyBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj47XG4gICAgICBzaG91bGQuZXF1YWwoZ2V0UmVjb3ZlcnlQcm92aWRlclN0dWIuY2FsbENvdW50LCAxKTtcblxuICAgICAgLy8gVmVyaWZ5IGZpeHR1cmUgbWF0Y2hcbiAgICAgIGF3YWl0IG1hdGNoRml4dHVyZSgnc2lnbmVkJywgc2lnbmVkUmVjb3ZlcnkpO1xuXG4gICAgICAvLyBWZXJpZnkgUFNCVCBoYXMgdmFsaWQgc2lnbmF0dXJlcyAodXNlciBrZXkgc2lnbmVkKVxuICAgICAgY2hlY2tSZWNvdmVyeVBzYnRTaWduYXR1cmUoc2lnbmVkUmVjb3ZlcnkudHhIZXggYXMgc3RyaW5nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGVzdCB1bnNpZ25lZCBjcm9zcyBjaGFpbiByZWNvdmVyeScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRlcG9zaXRVbnNwZW50ID0gZ2V0UmVjb3ZlcnlVbnNwZW50cygpWzBdO1xuICAgICAgLy8gUGFyc2UgdHhpZCBmcm9tIHRoZSB1bnNwZW50IGlkIChmb3JtYXQ6IHR4aWQ6dm91dClcbiAgICAgIGNvbnN0IGRlcG9zaXRUeGlkID0gZGVwb3NpdFVuc3BlbnQuaWQuc3BsaXQoJzonKVswXTtcbiAgICAgIC8vIFVzZSB0aGUgZGVwb3NpdCBhZGRyZXNzIGFzIHRoZSBpbnB1dCBhZGRyZXNzIChzaW11bGF0aW5nIGEgcDJzaCBpbnB1dClcbiAgICAgIGNvbnN0IGlucHV0QWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzcyhzb3VyY2VDb2luLm5hbWUsIHsga2V5Y2hhaW5zOiBrZXljaGFpbnNCYXNlNTgsIGNoYWluOiAwLCBpbmRleDogMiB9KTtcbiAgICAgIGNvbnN0IGdldFJlY292ZXJ5UHJvdmlkZXJTdHViID0gc2lub25cbiAgICAgICAgLnN0dWIoQWJzdHJhY3RVdHhvQ29pbi5wcm90b3R5cGUsICdnZXRSZWNvdmVyeVByb3ZpZGVyJylcbiAgICAgICAgLnJldHVybnMobmV3IFdhc21Dcm9zc0NoYWluUmVjb3ZlcnlQcm92aWRlcjxUTnVtYmVyPihzb3VyY2VDb2luLCBkZXBvc2l0VW5zcGVudCwgW2lucHV0QWRkcmVzc10pKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgcmVjb3ZlcnlDb2luLFxuICAgICAgICB0eGlkOiBkZXBvc2l0VHhpZCxcbiAgICAgICAgcmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgICB3YWxsZXQ6IHJlY292ZXJ5V2FsbGV0SWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdW5zaWduZWRSZWNvdmVyeSA9IChhd2FpdCBzb3VyY2VDb2luLnJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyPih7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgc2lnbmVkOiBmYWxzZSxcbiAgICAgIH0pKSBhcyBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPjtcbiAgICAgIHNob3VsZC5lcXVhbChnZXRSZWNvdmVyeVByb3ZpZGVyU3R1Yi5jYWxsQ291bnQsIDEpO1xuXG4gICAgICAvLyBWZXJpZnkgZml4dHVyZSBtYXRjaFxuICAgICAgYXdhaXQgbWF0Y2hGaXh0dXJlKCd1bnNpZ25lZCcsIHVuc2lnbmVkUmVjb3ZlcnkpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHVuc2lnbmVkIFBTQlQgY2FuIGJlIHNpZ25lZFxuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBzb3VyY2VDb2luLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHVuc2lnbmVkUmVjb3ZlcnksXG4gICAgICAgIHBydjoga2V5Y2hhaW5zQmFzZTU4WzBdLnBydixcbiAgICAgICAgcHViczoga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgICAgfSk7XG4gICAgICBjaGVja1JlY292ZXJ5UHNidFNpZ25hdHVyZSgoc2lnbmVkVHggYXMgeyB0eEhleDogc3RyaW5nIH0pLnR4SGV4KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJ5KHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXNbc291cmNlQ29pbi5nZXRGYW1pbHkoKV0/LmluY2x1ZGVzKHJlY292ZXJ5Q29pbi5nZXRGYW1pbHkoKSk7XG59XG5cbnV0eG9Db2lucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gIHV0eG9Db2luc1xuICAgIC5maWx0ZXIoXG4gICAgICAob3RoZXJDb2luKSA9PlxuICAgICAgICBjb2luICE9PSBvdGhlckNvaW4gJiZcbiAgICAgICAgaXNTdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3ZlcnkoY29pbiwgb3RoZXJDb2luKSAmJlxuICAgICAgICAoKGlzTWFpbm5ldENvaW4oY29pbi5uYW1lKSAmJiBpc01haW5uZXRDb2luKG90aGVyQ29pbi5uYW1lKSkgfHxcbiAgICAgICAgICAoaXNUZXN0bmV0Q29pbihjb2luLm5hbWUpICYmIGlzVGVzdG5ldENvaW4ob3RoZXJDb2luLm5hbWUpKSlcbiAgICApXG4gICAgLmZvckVhY2goKG90aGVyQ29pbikgPT4ge1xuICAgICAgaWYgKGNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgcnVuPGJpZ2ludD4oY29pbiwgb3RoZXJDb2luKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJ1bihjb2luLCBvdGhlckNvaW4pO1xuICAgICAgfVxuICAgIH0pO1xufSk7XG5cbmRlc2NyaWJlKGBDcm9zcy1DaGFpbiBSZWNvdmVyeSBnZXRXYWxsZXRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpdGdvID0gZGVmYXVsdEJpdEdvO1xuICBjb25zdCByZWNvdmVyeUNvaW4gPSBnZXRVdHhvQ29pbignYnRjJyk7XG4gIGNvbnN0IHJlY292ZXJ5V2FsbGV0SWQgPSAnNWFiYWNlYmUyOGQ3MmZiZDA3ZTBiOGNiYmEwZmYzOWUnO1xuXG4gIGl0KCdzaG91bGQgc2VhcmNoIHYxIHdhbGxldHMgaWYgdGhlIHYyIGVuZHBvaW50IHJlc3BvbmRzIHdpdGggYSA0eHggZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXJyb3JSZXNwb25zZXMgPSBbNDAwLCA0MDRdO1xuXG4gICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvclJlc3BvbnNlcykge1xuICAgICAgY29uc3Qgbm9ja1YyV2FsbGV0ID0gbm9ja0JpdEdvKGJpdGdvKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9L3dhbGxldC8ke3JlY292ZXJ5V2FsbGV0SWR9YClcbiAgICAgICAgLnJlcGx5KGVycm9yKTtcbiAgICAgIGNvbnN0IG5vY2tWMVdhbGxldCA9IG5vY2tCaXRHbyhiaXRnbykuZ2V0KGAvYXBpL3YxL3dhbGxldC8ke3JlY292ZXJ5V2FsbGV0SWR9YCkucmVwbHkoZXJyb3IpO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+IGdldFdhbGxldChiaXRnbywgcmVjb3ZlcnlDb2luLCByZWNvdmVyeVdhbGxldElkKSxcbiAgICAgICAgRXJyb3IoYGNvdWxkIG5vdCBnZXQgd2FsbGV0ICR7cmVjb3ZlcnlXYWxsZXRJZH0gZnJvbSB2MSBvciB2MjogQXBpUmVzcG9uc2VFcnJvcjogJHtlcnJvcn1gKVxuICAgICAgKTtcbiAgICAgIG5vY2tWMldhbGxldC5kb25lKCk7XG4gICAgICBub2NrVjFXYWxsZXQuZG9uZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdjIgZW5kcG9pbnQgcmVzcG9uZHMgd2l0aCBhIDV4eCBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBlcnJvclJlc3BvbnNlcyA9IFs1MDBdO1xuICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JSZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IG5vY2tWMldhbGxldCA9IG5vY2tCaXRHbyhiaXRnbylcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3JlY292ZXJ5Q29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHtyZWNvdmVyeVdhbGxldElkfWApXG4gICAgICAgIC5yZXBseShlcnJvcik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cygoKSA9PiBnZXRXYWxsZXQoYml0Z28sIHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCksIHtcbiAgICAgICAgbmFtZTogJ0FwaVJlc3BvbnNlRXJyb3InLFxuICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgcmVzdWx0OiB7fSxcbiAgICAgICAgaW52YWxpZFRva2VuOiBmYWxzZSxcbiAgICAgICAgbmVlZHNPVFA6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBub2NrVjJXYWxsZXQuZG9uZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2NvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IEJ1ZmZlci5mcm9tKCdhOTE0OWYwYmY1MWZhYjRkMzNhYjIxOTc3ZTFiODlmNzc2ZjY0MTYxZWY0Mjg3JywgJ2hleCcpO1xuICBpdCgnc2hvdWxkIGNvbnZlcnQgTS4uLiBQMlNIIGFkZHJlc3MgdG8gMy4uLiBsZWdhY3kgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoZXNlIHR3byBhZGRyZXNzZXMgcmVwcmVzZW50IHRoZSBzYW1lIHVuZGVybHlpbmcgc2NyaXB0IGhhc2g6XG4gICAgLy8gLSBNTlE3emtnTXNhVjY3cnNqQTNKdVA1OVJDNXd4Ulhwd2dFIGlzIHRoZSBMVEMgZm9ybWF0IChzY3JpcHRIYXNoIDB4MzIpXG4gICAgLy8gLSAzR0J5Z3NHUHZUZGZLTWJxNEFLWlpSdTFzUE1XUEVzQmZkIGlzIHRoZSBCVEMgZm9ybWF0IChzY3JpcHRIYXNoIDB4MDUpXG4gICAgLy8gY29uc3QgbHRjQWRkcmVzcyA9ICdNTlE3emtnTXNhVjY3cnNqQTNKdVA1OVJDNXd4Ulhwd2dFJztcbiAgICBjb25zdCBsdGNBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdFB1YktleSwgJ2x0YycpO1xuICAgIGNvbnN0IHRsdGNBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdFB1YktleSwgJ3RsdGMnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobHRjQWRkcmVzcywgJ01OUTd6a2dNc2FWNjdyc2pBM0p1UDU5UkM1d3hSWHB3Z0UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGx0Y0FkZHJlc3MsICdRYjZ3c2Q0ZloyQzZmS3pSTVB5VEc1S2lFODFXNlFDeGhVJyk7XG5cbiAgICBjb25zdCBsZWdhY3lBZGRyZXNzID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChsdGNBZGRyZXNzLCAnbHRjJyk7XG4gICAgY29uc3QgZXhwZWN0ZWRMdGNMZWdhY3lBZGRyZXNzID0gJzNHQnlnc0dQdlRkZktNYnE0QUtaWlJ1MXNQTVdQRXNCZmQnO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChsZWdhY3lBZGRyZXNzLCBleHBlY3RlZEx0Y0xlZ2FjeUFkZHJlc3MpO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRUbHRjTGVnYWN5QWRkcmVzcyA9ICcyTjdrQmtjQ1JYdjkxWDlFTmpId1NCTnRINWpaZzh5eWU2cic7XG4gICAgY29uc3QgdGx0Y0xlZ2FjeUFkZHJlc3MgPSBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KHRsdGNBZGRyZXNzLCAndGx0YycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0bHRjTGVnYWN5QWRkcmVzcywgZXhwZWN0ZWRUbHRjTGVnYWN5QWRkcmVzcyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29udmVydCBNRDY4UHNkaGVLeGNZc3JWTHlaUlhnb1NETG5CMU1kVnRFIHRvIGxlZ2FjeSBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9ICdNRDY4UHNkaGVLeGNZc3JWTHlaUlhnb1NETG5CMU1kVnRFJztcbiAgICBjb25zdCBsZWdhY3lBZGRyZXNzID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChhZGRyZXNzLCAnbHRjJyk7XG5cbiAgICAvLyBTaG91bGQgc3RhcnQgd2l0aCAnMycgKGxlZ2FjeSBCVEMgUDJTSCBmb3JtYXQpXG4gICAgYXNzZXJ0Lm9rKGxlZ2FjeUFkZHJlc3Muc3RhcnRzV2l0aCgnMycpLCBgRXhwZWN0ZWQgYWRkcmVzcyB0byBzdGFydCB3aXRoICczJywgZ290OiAke2xlZ2FjeUFkZHJlc3N9YCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IG1vZGlmeSBiZWNoMzIgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJlY2gzMkFkZHJlc3MgPSAnbHRjMXFncmw4enBuZHNrbGFhOXN3Z2Q1dmV2eXhteDV4NjN2Y3JsN2RrNCc7XG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChiZWNoMzJBZGRyZXNzLCAnbHRjJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYmVjaDMyQWRkcmVzcyk7XG4gIH0pO1xufSk7XG4iXX0=
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyw2QkFBOEI7QUFFOUIsOENBQTBDO0FBQzFDLGdEQUE2RTtBQUM3RSw2Q0FBK0I7QUFFL0Isc0NBUXNCO0FBQ3RCLDhDQUFrRTtBQUVsRSxrQ0FVaUI7QUFDakIsaURBQThDO0FBRTlDLGlDQUF3RDtBQUV4RCxTQUFTLFFBQVEsQ0FBQyxDQUFpQjtJQUNqQyxPQUFPLElBQUEsa0JBQU8sRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFzQixFQUFFLFFBQWdCLEVBQUUsVUFBa0M7SUFDOUYsT0FBTztRQUNMLElBQUEscUJBQVMsR0FBRTthQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekMsQ0FBQzthQUNELE9BQU8sRUFBRTtRQUNaLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3RCLElBQUEscUJBQVMsR0FBRTthQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUs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QyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFO1FBQ3ZFLE1BQU0sT0FBTyxHQUFHLG9DQUFvQyxDQUFDO1FBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEscUNBQStCLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRFLGlEQUFpRDtRQUNqRCxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsNENBQTRDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDeEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7UUFDdkMsTUFBTSxhQUFhLEdBQUcsNkNBQTZDLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRTZWVkIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0VXR4b0NvaW4sXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZCxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQsXG4gIGdldFdhbGxldCxcbiAgc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXMsXG4gIGdlbmVyYXRlQWRkcmVzcyxcbiAgY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdCxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGlzTWFpbm5ldENvaW4sIGlzVGVzdG5ldENvaW4gfSBmcm9tICcuLi8uLi8uLi9zcmMvbmFtZXMnO1xuaW1wb3J0IHR5cGUgeyBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Vuc3BlbnQnO1xuaW1wb3J0IHtcbiAgZ2V0Rml4dHVyZSxcbiAga2V5Y2hhaW5zQmFzZTU4LFxuICBLZXljaGFpbkJhc2U1OCxcbiAgYXNzZXJ0RXF1YWxKU09OLFxuICB1dHhvQ29pbnMsXG4gIGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgZGVmYXVsdEJpdEdvLFxuICBnZXRVdHhvQ29pbixcbiAgY3JlYXRlV2FzbVdhbGxldFVuc3BlbnQsXG59IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgbm9ja0JpdEdvIH0gZnJvbSAnLi4vdXRpbC9ub2NrQml0R28nO1xuXG5pbXBvcnQgeyBXYXNtQ3Jvc3NDaGFpblJlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuL21vY2snO1xuXG5mdW5jdGlvbiBnZXRLZXlJZChrOiBLZXljaGFpbkJhc2U1OCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRTZWVkKGsucHViKS50b1N0cmluZygnaGV4Jyk7XG59XG5cbmZ1bmN0aW9uIG5vY2tXYWxsZXQoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgd2FsbGV0SWQ6IHN0cmluZywgd2FsbGV0S2V5czogVHJpcGxlPEtleWNoYWluQmFzZTU4Pik6IG5vY2suU2NvcGVbXSB7XG4gIHJldHVybiBbXG4gICAgbm9ja0JpdEdvKClcbiAgICAgIC5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3dhbGxldC8ke3dhbGxldElkfWApXG4gICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgIGlkOiB3YWxsZXRJZCxcbiAgICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgICAgICBsYWJlbDogJ2Nyb3NzQ2hhaW5SZWNvdmVyeScsXG4gICAgICAgIGtleXM6IHdhbGxldEtleXMubWFwKChrKSA9PiBnZXRLZXlJZChrKSksXG4gICAgICB9KVxuICAgICAgLnBlcnNpc3QoKSxcbiAgICAuLi53YWxsZXRLZXlzLm1hcCgoaykgPT5cbiAgICAgIG5vY2tCaXRHbygpXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L2tleS8ke2dldEtleUlkKGspfWApXG4gICAgICAgIC5yZXBseSgyMDAsIGspXG4gICAgICAgIC5wZXJzaXN0KClcbiAgICApLFxuICBdO1xufVxuXG50eXBlIEFkZHJlc3MgPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIG5vY2tXYWxsZXRBZGRyZXNzKGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldElkOiBzdHJpbmcsIGFkZHJlc3M6IEFkZHJlc3MpOiBub2NrLlNjb3BlIHtcbiAgcmV0dXJuIG5vY2tCaXRHbygpXG4gICAgLmdldChgL2FwaS92Mi8ke2NvaW4uZ2V0Q2hhaW4oKX0vd2FsbGV0LyR7d2FsbGV0SWR9L2FkZHJlc3MvJHthZGRyZXNzLmFkZHJlc3N9YClcbiAgICAucmVwbHkoMjAwLCB7XG4gICAgICBhZGRyZXNzOiBhZGRyZXNzLmFkZHJlc3MsXG4gICAgICBjaGFpbjogYWRkcmVzcy5jaGFpbixcbiAgICAgIGluZGV4OiBhZGRyZXNzLmluZGV4LFxuICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgICAgd2FsbGV0OiB3YWxsZXRJZCxcbiAgICB9KVxuICAgIC5wZXJzaXN0KCk7XG59XG5cbi8qKlxuICogU2V0dXAgdGVzdCBmb3IgY3Jvc3MtY2hhaW4gcmVjb3ZlcnkuXG4gKlxuICogVXNlcnMgY2FuIHJlY2VpdmUgZGVwb3NpdHMgb24gd2FsbGV0IGFkZHJlc3NlcyB0aGF0IGFyZSBvbiBhIGRpZmZlcmVudCBjaGFpbi5cbiAqXG4gKiBGb3IgaW5zdGFuY2UsIGEgdXNlciBjYW4gcmVjZWl2ZSBsaXRlY29pbiBvbiBhIGJpdGNvaW4gd2FsbGV0LlxuICogVGhpcyBtZWFucyB0aGF0IHRoZSBsaXRlY29pbiBibG9ja2NoYWluIGhhcyBhIHRyYW5zYWN0aW9uIHdpdGggb3V0cHV0cyB0aGF0IGFyZSBzcGVuZGFibGVcbiAqIHdpdGgga2V5cyB0aGF0IHdlcmUgb3JpZ2luYWxseSBjcmVhdGVkIGZvciBhIEJpdEdvIEJUQyB3YWxsZXQuXG4gKiBJbiB0aGlzIGV4YW1wbGUsIExUQyBpcyB0aGUgXCJzb3VyY2UgY29pblwiIGFuZCBCVEMgaXMgdGhlIFwicmVjb3ZlcnkgY29pblwiXG4gKiBJbiBjYXNlcyBsaWtlIHRoZXNlIHdlIG11c3QgdXNlIGNvbnN0cnVjdCBhIHRyYW5zYWN0aW9uIGZvciBsaXRlY29pbiBuZXR3b3JrIHVzaW5nIGtleXMgb2YgdGhlXG4gKiBiaXRjb2luIHdhbGxldC5cbiAqXG4gKiBAcGFyYW0gc291cmNlQ29pbiAtIHRoZSBjb2luIHRvIGNvbnN0cnVjdCB0aGUgdHJhbnNhY3Rpb24gZm9yXG4gKiBAcGFyYW0gcmVjb3ZlcnlDb2luIC0gdGhlIGNvaW4gdGhlIHJlY2VpdmluZyB3YWxsZXQgd2FzIHNldCB1cCBmb3JcbiAqL1xuLy8gR2V0IHdhc20gd2FsbGV0IGtleXMgZm9yIHNpZ25hdHVyZSB2ZXJpZmljYXRpb25cbmNvbnN0IHsgd2FsbGV0S2V5czogd2FzbVdhbGxldEtleXMsIHhwcml2cyB9ID0gZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzKCk7XG5cbmZ1bmN0aW9uIHJ1bjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihzb3VyY2VDb2luOiBBYnN0cmFjdFV0eG9Db2luLCByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4pIHtcbiAgZGVzY3JpYmUoYENyb3NzLUNoYWluIFJlY292ZXJ5IFtzb3VyY2VDb2luPSR7c291cmNlQ29pbi5nZXRDaGFpbigpfSByZWNvdmVyeUNvaW49JHtyZWNvdmVyeUNvaW4uZ2V0Q2hhaW4oKX1dYCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlY292ZXJ5V2FsbGV0SWQgPSAnNWFiYWNlYmUyOGQ3MmZiZDA3ZTBiOGNiYmEwZmYzOWUnO1xuICAgIC8vIHRoZSBhZGRyZXNzIHRoZSBhY2NpZGVudGFsIGRlcG9zaXQgd2VudCB0bywgaW4gYm90aCBzb3VyY2VDb2luIGFuZCBhZGRyZXNzQ29pbiBmb3JtYXRzXG4gICAgY29uc3QgW2RlcG9zaXRBZGRyZXNzU291cmNlQ29pbiwgZGVwb3NpdEFkZHJlc3NSZWNvdmVyeUNvaW5dID0gW3NvdXJjZUNvaW4sIHJlY292ZXJ5Q29pbl0ubWFwKChjb2luKSA9PiAoe1xuICAgICAgYWRkcmVzczogZ2VuZXJhdGVBZGRyZXNzKGNvaW4ubmFtZSwgeyBrZXljaGFpbnM6IGtleWNoYWluc0Jhc2U1OCwgY2hhaW46IDAsIGluZGV4OiAwIH0pLFxuICAgICAgY2hhaW46IDAsXG4gICAgICBpbmRleDogMCxcbiAgICB9KSk7XG4gICAgY29uc3QgY2hhaW4gPSAwO1xuICAgIGNvbnN0IGluZGV4ID0gMTtcbiAgICAvLyB0aGUgYWRkcmVzcyB3aGVyZSB3ZSB3YW50IHRvIHJlY292ZXIgb3VyIGZ1bmRzIHRvXG4gICAgY29uc3QgcmVjb3ZlcnlBZGRyZXNzID0gZ2VuZXJhdGVBZGRyZXNzKHNvdXJjZUNvaW4ubmFtZSwge1xuICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnNCYXNlNTgsXG4gICAgICBjaGFpbixcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuICAgIGNvbnN0IG5vY2tzOiBub2NrLlNjb3BlW10gPSBbXTtcblxuICAgIC8vIENyZWF0ZSByZWNvdmVyeSB1bnNwZW50IHVzaW5nIHdhc20tdXR4byAobm8gdXR4b2xpYiBkZXBlbmRlbmN5KVxuICAgIGZ1bmN0aW9uIGdldFJlY292ZXJ5VW5zcGVudHMoKTogV2FsbGV0VW5zcGVudDxUTnVtYmVyPltdIHtcbiAgICAgIGNvbnN0IGRlcG9zaXRWYWx1ZSA9IChzb3VyY2VDb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnID8gQmlnSW50KDFlOCkgOiAxZTgpIGFzIFROdW1iZXI7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBjcmVhdGVXYXNtV2FsbGV0VW5zcGVudDxUTnVtYmVyPihkZXBvc2l0QWRkcmVzc1NvdXJjZUNvaW4uYWRkcmVzcywgY2hhaW4sIGluZGV4LCBkZXBvc2l0VmFsdWUsIHNvdXJjZUNvaW4ubmFtZSksXG4gICAgICBdO1xuICAgIH1cblxuICAgIGJlZm9yZSgnc2V0dXAgbm9ja3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBub2Nrcy5wdXNoKC4uLm5vY2tXYWxsZXQocmVjb3ZlcnlDb2luLCByZWNvdmVyeVdhbGxldElkLCBrZXljaGFpbnNCYXNlNTgpKTtcbiAgICAgIG5vY2tzLnB1c2gobm9ja1dhbGxldEFkZHJlc3MocmVjb3ZlcnlDb2luLCByZWNvdmVyeVdhbGxldElkLCBkZXBvc2l0QWRkcmVzc1JlY292ZXJ5Q29pbikpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgbm9ja3MuZm9yRWFjaCgobikgPT4gbi5kb25lKCkpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIG1hdGNoRml4dHVyZShcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIHJlY292ZXJ5OiBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj4gfCBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPlxuICAgICkge1xuICAgICAgbGV0IHJlY292ZXJ5T2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4ucmVjb3ZlcnkgfTtcbiAgICAgIGlmIChzb3VyY2VDb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHJlY292ZXJ5T2JqID0gSlNPTi5wYXJzZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShyZWNvdmVyeU9iaiwgKGssIHYpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhc3NlcnRFcXVhbEpTT04oXG4gICAgICAgIHJlY292ZXJ5T2JqLFxuICAgICAgICBhd2FpdCBnZXRGaXh0dXJlKHNvdXJjZUNvaW4sIGByZWNvdmVyeS9jcm9zc0NoYWluUmVjb3ZlcnktJHtyZWNvdmVyeUNvaW4uZ2V0Q2hhaW4oKX0tJHtuYW1lfWAsIHJlY292ZXJ5T2JqKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1JlY292ZXJ5UHNidFNpZ25hdHVyZShwc2J0SGV4OiBzdHJpbmcpIHtcbiAgICAgIC8vIFBhcnNlIHVzaW5nIHdhc20tdXR4byBmb3Igc2lnbmF0dXJlIHZlcmlmaWNhdGlvblxuICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKEJ1ZmZlci5mcm9tKHBzYnRIZXgsICdoZXgnKSwgc291cmNlQ29pbi5uYW1lKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHdhc21Qc2J0LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyh3YXNtV2FsbGV0S2V5cywgeyByZXBsYXlQcm90ZWN0aW9uOiB7IHB1YmxpY0tleXM6IFtdIH0gfSk7XG4gICAgICBjb25zdCB1bnNwZW50cyA9IGdldFJlY292ZXJ5VW5zcGVudHMoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuaW5wdXRzLmxlbmd0aCwgdW5zcGVudHMubGVuZ3RoKTtcbiAgICAgIC8vIFZlcmlmeSB1c2VyIGtleSBoYXMgc2lnbmVkIGVhY2ggaW5wdXQgKHNhbWUgcGF0dGVybiBhcyBiYWNrdXBLZXlSZWNvdmVyeSB0ZXN0KVxuICAgICAgcGFyc2VkLmlucHV0cy5mb3JFYWNoKChfLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXJTaWduZWQgPSB3YXNtUHNidC52ZXJpZnlTaWduYXR1cmUoaSwgeHByaXZzWzBdKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHVzZXJTaWduZWQsIHRydWUsIGBJbnB1dCAke2l9IHNob3VsZCBiZSBzaWduZWQgYnkgdXNlciBrZXlgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdzaG91bGQgdGVzdCBzaWduZWQgY3Jvc3MgY2hhaW4gcmVjb3ZlcnknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkZXBvc2l0VW5zcGVudCA9IGdldFJlY292ZXJ5VW5zcGVudHMoKVswXTtcbiAgICAgIC8vIFBhcnNlIHR4aWQgZnJvbSB0aGUgdW5zcGVudCBpZCAoZm9ybWF0OiB0eGlkOnZvdXQpXG4gICAgICBjb25zdCBkZXBvc2l0VHhpZCA9IGRlcG9zaXRVbnNwZW50LmlkLnNwbGl0KCc6JylbMF07XG4gICAgICAvLyBVc2UgdGhlIGRlcG9zaXQgYWRkcmVzcyBhcyB0aGUgaW5wdXQgYWRkcmVzcyAoc2ltdWxhdGluZyBhIHAyc2ggaW5wdXQpXG4gICAgICBjb25zdCBpbnB1dEFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3Moc291cmNlQ29pbi5uYW1lLCB7IGtleWNoYWluczoga2V5Y2hhaW5zQmFzZTU4LCBjaGFpbjogMCwgaW5kZXg6IDIgfSk7XG4gICAgICBjb25zdCBnZXRSZWNvdmVyeVByb3ZpZGVyU3R1YiA9IHNpbm9uXG4gICAgICAgIC5zdHViKEFic3RyYWN0VXR4b0NvaW4ucHJvdG90eXBlLCAnZ2V0UmVjb3ZlcnlQcm92aWRlcicpXG4gICAgICAgIC5yZXR1cm5zKG5ldyBXYXNtQ3Jvc3NDaGFpblJlY292ZXJ5UHJvdmlkZXI8VE51bWJlcj4oc291cmNlQ29pbiwgZGVwb3NpdFVuc3BlbnQsIFtpbnB1dEFkZHJlc3NdKSk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHJlY292ZXJ5Q29pbixcbiAgICAgICAgdHhpZDogZGVwb3NpdFR4aWQsXG4gICAgICAgIHJlY292ZXJ5QWRkcmVzcyxcbiAgICAgICAgd2FsbGV0OiByZWNvdmVyeVdhbGxldElkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNpZ25lZFJlY292ZXJ5ID0gKGF3YWl0IHNvdXJjZUNvaW4ucmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXI+KHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB4cHJ2OiBrZXljaGFpbnNCYXNlNThbMF0ucHJ2LFxuICAgICAgfSkpIGFzIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPjtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRSZWNvdmVyeVByb3ZpZGVyU3R1Yi5jYWxsQ291bnQsIDEpO1xuXG4gICAgICAvLyBWZXJpZnkgZml4dHVyZSBtYXRjaFxuICAgICAgYXdhaXQgbWF0Y2hGaXh0dXJlKCdzaWduZWQnLCBzaWduZWRSZWNvdmVyeSk7XG5cbiAgICAgIC8vIFZlcmlmeSBQU0JUIGhhcyB2YWxpZCBzaWduYXR1cmVzICh1c2VyIGtleSBzaWduZWQpXG4gICAgICBjaGVja1JlY292ZXJ5UHNidFNpZ25hdHVyZShzaWduZWRSZWNvdmVyeS50eEhleCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0ZXN0IHVuc2lnbmVkIGNyb3NzIGNoYWluIHJlY292ZXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGVwb3NpdFVuc3BlbnQgPSBnZXRSZWNvdmVyeVVuc3BlbnRzKClbMF07XG4gICAgICAvLyBQYXJzZSB0eGlkIGZyb20gdGhlIHVuc3BlbnQgaWQgKGZvcm1hdDogdHhpZDp2b3V0KVxuICAgICAgY29uc3QgZGVwb3NpdFR4aWQgPSBkZXBvc2l0VW5zcGVudC5pZC5zcGxpdCgnOicpWzBdO1xuICAgICAgLy8gVXNlIHRoZSBkZXBvc2l0IGFkZHJlc3MgYXMgdGhlIGlucHV0IGFkZHJlc3MgKHNpbXVsYXRpbmcgYSBwMnNoIGlucHV0KVxuICAgICAgY29uc3QgaW5wdXRBZGRyZXNzID0gZ2VuZXJhdGVBZGRyZXNzKHNvdXJjZUNvaW4ubmFtZSwgeyBrZXljaGFpbnM6IGtleWNoYWluc0Jhc2U1OCwgY2hhaW46IDAsIGluZGV4OiAyIH0pO1xuICAgICAgY29uc3QgZ2V0UmVjb3ZlcnlQcm92aWRlclN0dWIgPSBzaW5vblxuICAgICAgICAuc3R1YihBYnN0cmFjdFV0eG9Db2luLnByb3RvdHlwZSwgJ2dldFJlY292ZXJ5UHJvdmlkZXInKVxuICAgICAgICAucmV0dXJucyhuZXcgV2FzbUNyb3NzQ2hhaW5SZWNvdmVyeVByb3ZpZGVyPFROdW1iZXI+KHNvdXJjZUNvaW4sIGRlcG9zaXRVbnNwZW50LCBbaW5wdXRBZGRyZXNzXSkpO1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICByZWNvdmVyeUNvaW4sXG4gICAgICAgIHR4aWQ6IGRlcG9zaXRUeGlkLFxuICAgICAgICByZWNvdmVyeUFkZHJlc3MsXG4gICAgICAgIHdhbGxldDogcmVjb3ZlcnlXYWxsZXRJZCxcbiAgICAgIH07XG4gICAgICBjb25zdCB1bnNpZ25lZFJlY292ZXJ5ID0gKGF3YWl0IHNvdXJjZUNvaW4ucmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXI+KHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBzaWduZWQ6IGZhbHNlLFxuICAgICAgfSkpIGFzIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+O1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFJlY292ZXJ5UHJvdmlkZXJTdHViLmNhbGxDb3VudCwgMSk7XG5cbiAgICAgIC8vIFZlcmlmeSBmaXh0dXJlIG1hdGNoXG4gICAgICBhd2FpdCBtYXRjaEZpeHR1cmUoJ3Vuc2lnbmVkJywgdW5zaWduZWRSZWNvdmVyeSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdW5zaWduZWQgUFNCVCBjYW4gYmUgc2lnbmVkXG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHNvdXJjZUNvaW4uc2lnblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgICAgdHhQcmVidWlsZDogdW5zaWduZWRSZWNvdmVyeSxcbiAgICAgICAgcHJ2OiBrZXljaGFpbnNCYXNlNThbMF0ucHJ2LFxuICAgICAgICBwdWJzOiBrZXljaGFpbnNCYXNlNTgubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgICB9KTtcbiAgICAgIGNoZWNrUmVjb3ZlcnlQc2J0U2lnbmF0dXJlKChzaWduZWRUeCBhcyB7IHR4SGV4OiBzdHJpbmcgfSkudHhIZXgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNTdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcnkoc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbiwgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luKTogYm9vbGVhbiB7XG4gIHJldHVybiBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcmllc1tzb3VyY2VDb2luLmdldEZhbWlseSgpXT8uaW5jbHVkZXMocmVjb3ZlcnlDb2luLmdldEZhbWlseSgpKTtcbn1cblxudXR4b0NvaW5zLmZvckVhY2goKGNvaW4pID0+IHtcbiAgdXR4b0NvaW5zXG4gICAgLmZpbHRlcihcbiAgICAgIChvdGhlckNvaW4pID0+XG4gICAgICAgIGNvaW4gIT09IG90aGVyQ29pbiAmJlxuICAgICAgICBpc1N1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyeShjb2luLCBvdGhlckNvaW4pICYmXG4gICAgICAgICgoaXNNYWlubmV0Q29pbihjb2luLm5hbWUpICYmIGlzTWFpbm5ldENvaW4ob3RoZXJDb2luLm5hbWUpKSB8fFxuICAgICAgICAgIChpc1Rlc3RuZXRDb2luKGNvaW4ubmFtZSkgJiYgaXNUZXN0bmV0Q29pbihvdGhlckNvaW4ubmFtZSkpKVxuICAgIClcbiAgICAuZm9yRWFjaCgob3RoZXJDb2luKSA9PiB7XG4gICAgICBpZiAoY29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50Jykge1xuICAgICAgICBydW48YmlnaW50Pihjb2luLCBvdGhlckNvaW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnVuKGNvaW4sIG90aGVyQ29pbik7XG4gICAgICB9XG4gICAgfSk7XG59KTtcblxuZGVzY3JpYmUoYENyb3NzLUNoYWluIFJlY292ZXJ5IGdldFdhbGxldGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYml0Z28gPSBkZWZhdWx0Qml0R287XG4gIGNvbnN0IHJlY292ZXJ5Q29pbiA9IGdldFV0eG9Db2luKCdidGMnKTtcbiAgY29uc3QgcmVjb3ZlcnlXYWxsZXRJZCA9ICc1YWJhY2ViZTI4ZDcyZmJkMDdlMGI4Y2JiYTBmZjM5ZSc7XG5cbiAgaXQoJ3Nob3VsZCBzZWFyY2ggdjEgd2FsbGV0cyBpZiB0aGUgdjIgZW5kcG9pbnQgcmVzcG9uZHMgd2l0aCBhIDR4eCBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBlcnJvclJlc3BvbnNlcyA9IFs0MDAsIDQwNF07XG5cbiAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVycm9yUmVzcG9uc2VzKSB7XG4gICAgICBjb25zdCBub2NrVjJXYWxsZXQgPSBub2NrQml0R28oYml0Z28pXG4gICAgICAgIC5nZXQoYC9hcGkvdjIvJHtyZWNvdmVyeUNvaW4uZ2V0Q2hhaW4oKX0vd2FsbGV0LyR7cmVjb3ZlcnlXYWxsZXRJZH1gKVxuICAgICAgICAucmVwbHkoZXJyb3IpO1xuICAgICAgY29uc3Qgbm9ja1YxV2FsbGV0ID0gbm9ja0JpdEdvKGJpdGdvKS5nZXQoYC9hcGkvdjEvd2FsbGV0LyR7cmVjb3ZlcnlXYWxsZXRJZH1gKS5yZXBseShlcnJvcik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgKCkgPT4gZ2V0V2FsbGV0KGJpdGdvLCByZWNvdmVyeUNvaW4sIHJlY292ZXJ5V2FsbGV0SWQpLFxuICAgICAgICBFcnJvcihgY291bGQgbm90IGdldCB3YWxsZXQgJHtyZWNvdmVyeVdhbGxldElkfSBmcm9tIHYxIG9yIHYyOiBBcGlSZXNwb25zZUVycm9yOiAke2Vycm9yfWApXG4gICAgICApO1xuICAgICAgbm9ja1YyV2FsbGV0LmRvbmUoKTtcbiAgICAgIG5vY2tWMVdhbGxldC5kb25lKCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHRoZSB2MiBlbmRwb2ludCByZXNwb25kcyB3aXRoIGEgNXh4IGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVycm9yUmVzcG9uc2VzID0gWzUwMF07XG4gICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvclJlc3BvbnNlcykge1xuICAgICAgY29uc3Qgbm9ja1YyV2FsbGV0ID0gbm9ja0JpdEdvKGJpdGdvKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9L3dhbGxldC8ke3JlY292ZXJ5V2FsbGV0SWR9YClcbiAgICAgICAgLnJlcGx5KGVycm9yKTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKCgpID0+IGdldFdhbGxldChiaXRnbywgcmVjb3ZlcnlDb2luLCByZWNvdmVyeVdhbGxldElkKSwge1xuICAgICAgICBuYW1lOiAnQXBpUmVzcG9uc2VFcnJvcicsXG4gICAgICAgIHN0YXR1czogNTAwLFxuICAgICAgICByZXN1bHQ6IHt9LFxuICAgICAgICBpbnZhbGlkVG9rZW46IGZhbHNlLFxuICAgICAgICBuZWVkc09UUDogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIG5vY2tWMldhbGxldC5kb25lKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2NyaXB0UHViS2V5ID0gQnVmZmVyLmZyb20oJ2E5MTQ5ZjBiZjUxZmFiNGQzM2FiMjE5NzdlMWI4OWY3NzZmNjQxNjFlZjQyODcnLCAnaGV4Jyk7XG4gIGl0KCdzaG91bGQgY29udmVydCBNLi4uIFAyU0ggYWRkcmVzcyB0byAzLi4uIGxlZ2FjeSBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhlc2UgdHdvIGFkZHJlc3NlcyByZXByZXNlbnQgdGhlIHNhbWUgdW5kZXJseWluZyBzY3JpcHQgaGFzaDpcbiAgICAvLyAtIE1OUTd6a2dNc2FWNjdyc2pBM0p1UDU5UkM1d3hSWHB3Z0UgaXMgdGhlIExUQyBmb3JtYXQgKHNjcmlwdEhhc2ggMHgzMilcbiAgICAvLyAtIDNHQnlnc0dQdlRkZktNYnE0QUtaWlJ1MXNQTVdQRXNCZmQgaXMgdGhlIEJUQyBmb3JtYXQgKHNjcmlwdEhhc2ggMHgwNSlcbiAgICAvLyBjb25zdCBsdGNBZGRyZXNzID0gJ01OUTd6a2dNc2FWNjdyc2pBM0p1UDU5UkM1d3hSWHB3Z0UnO1xuICAgIGNvbnN0IGx0Y0FkZHJlc3MgPSB3YXNtQWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0V2l0aENvaW4oc2NyaXB0UHViS2V5LCAnbHRjJyk7XG4gICAgY29uc3QgdGx0Y0FkZHJlc3MgPSB3YXNtQWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0V2l0aENvaW4oc2NyaXB0UHViS2V5LCAndGx0YycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChsdGNBZGRyZXNzLCAnTU5RN3prZ01zYVY2N3JzakEzSnVQNTlSQzV3eFJYcHdnRScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0bHRjQWRkcmVzcywgJ1FiNndzZDRmWjJDNmZLelJNUHlURzVLaUU4MVc2UUN4aFUnKTtcblxuICAgIGNvbnN0IGxlZ2FjeUFkZHJlc3MgPSBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KGx0Y0FkZHJlc3MsICdsdGMnKTtcbiAgICBjb25zdCBleHBlY3RlZEx0Y0xlZ2FjeUFkZHJlc3MgPSAnM0dCeWdzR1B2VGRmS01icTRBS1paUnUxc1BNV1BFc0JmZCc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxlZ2FjeUFkZHJlc3MsIGV4cGVjdGVkTHRjTGVnYWN5QWRkcmVzcyk7XG5cbiAgICBjb25zdCBleHBlY3RlZFRsdGNMZWdhY3lBZGRyZXNzID0gJzJON2tCa2NDUlh2OTFYOUVOakh3U0JOdEg1alpnOHl5ZTZyJztcbiAgICBjb25zdCB0bHRjTGVnYWN5QWRkcmVzcyA9IGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQodGx0Y0FkZHJlc3MsICd0bHRjJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRsdGNMZWdhY3lBZGRyZXNzLCBleHBlY3RlZFRsdGNMZWdhY3lBZGRyZXNzKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb252ZXJ0IE1ENjhQc2RoZUt4Y1lzclZMeVpSWGdvU0RMbkIxTWRWdEUgdG8gbGVnYWN5IGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gJ01ENjhQc2RoZUt4Y1lzclZMeVpSWGdvU0RMbkIxTWRWdEUnO1xuICAgIGNvbnN0IGxlZ2FjeUFkZHJlc3MgPSBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KGFkZHJlc3MsICdsdGMnKTtcblxuICAgIC8vIFNob3VsZCBzdGFydCB3aXRoICczJyAobGVnYWN5IEJUQyBQMlNIIGZvcm1hdClcbiAgICBhc3NlcnQub2sobGVnYWN5QWRkcmVzcy5zdGFydHNXaXRoKCczJyksIGBFeHBlY3RlZCBhZGRyZXNzIHRvIHN0YXJ0IHdpdGggJzMnLCBnb3Q6ICR7bGVnYWN5QWRkcmVzc31gKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgbW9kaWZ5IGJlY2gzMiBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmVjaDMyQWRkcmVzcyA9ICdsdGMxcWdybDh6cG5kc2tsYWE5c3dnZDV2ZXZ5eG14NXg2M3Zjcmw3ZGs0JztcbiAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KGJlY2gzMkFkZHJlc3MsICdsdGMnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBiZWNoMzJBZGRyZXNzKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,2 +1,2 @@
1
- import 'should';
1
+ export {};
2
2
  //# sourceMappingURL=formatBackupKeyRecoveryResult.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatBackupKeyRecoveryResult.d.ts","sourceRoot":"","sources":["../../../../../test/unit/recovery/formatBackupKeyRecoveryResult.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
1
+ {"version":3,"file":"formatBackupKeyRecoveryResult.d.ts","sourceRoot":"","sources":["../../../../../test/unit/recovery/formatBackupKeyRecoveryResult.ts"],"names":[],"mappings":""}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- require("should");
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
4
7
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
5
8
  const src_1 = require("../../../src");
6
9
  const util_1 = require("../util");
@@ -51,13 +54,13 @@ describe('formatBackupKeyRecoveryResult', function () {
51
54
  recoveryDestination,
52
55
  unspents,
53
56
  });
54
- result.should.have.property('txHex');
55
- result.should.have.property('txInfo');
56
- result.should.have.property('feeInfo');
57
- result.should.have.property('coin');
58
- result.coin.should.equal(coin.getChain());
57
+ (0, util_1.assertHasProperty)(result, 'txHex');
58
+ (0, util_1.assertHasProperty)(result, 'txInfo');
59
+ (0, util_1.assertHasProperty)(result, 'feeInfo');
60
+ (0, util_1.assertHasProperty)(result, 'coin');
61
+ strict_1.default.strictEqual(result.coin, coin.getChain());
59
62
  const txBuf = Buffer.from(result.txHex, 'hex');
60
- (0, wasm_utxo_1.hasPsbtMagic)(txBuf).should.equal(true);
63
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), true);
61
64
  });
62
65
  it('matches fixture', async function () {
63
66
  const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
@@ -67,7 +70,7 @@ describe('formatBackupKeyRecoveryResult', function () {
67
70
  unspents,
68
71
  });
69
72
  const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-unsigned', result);
70
- (0, util_1.shouldEqualJSON)(result, fixture);
73
+ (0, util_1.assertEqualJSON)(result, fixture);
71
74
  });
72
75
  });
73
76
  describe('KRS recovery with keyternal (legacy format)', function () {
@@ -88,14 +91,14 @@ describe('formatBackupKeyRecoveryResult', function () {
88
91
  backupKey: 'test-backup-key',
89
92
  unspents,
90
93
  });
91
- result.should.have.property('transactionHex');
92
- result.should.have.property('coin');
93
- result.should.have.property('backupKey');
94
- result.should.have.property('recoveryAmount');
95
- result.should.have.property('inputs');
96
- result.backupKey.should.equal('test-backup-key');
94
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
95
+ (0, util_1.assertHasProperty)(result, 'coin');
96
+ (0, util_1.assertHasProperty)(result, 'backupKey');
97
+ (0, util_1.assertHasProperty)(result, 'recoveryAmount');
98
+ (0, util_1.assertHasProperty)(result, 'inputs');
99
+ strict_1.default.strictEqual(result.backupKey, 'test-backup-key');
97
100
  const txBuf = Buffer.from(result.transactionHex, 'hex');
98
- (0, wasm_utxo_1.hasPsbtMagic)(txBuf).should.equal(false);
101
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), false);
99
102
  });
100
103
  it('matches fixture', async function () {
101
104
  const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
@@ -107,7 +110,7 @@ describe('formatBackupKeyRecoveryResult', function () {
107
110
  unspents,
108
111
  });
109
112
  const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-krs-keyternal', result);
110
- (0, util_1.shouldEqualJSON)(result, fixture);
113
+ (0, util_1.assertEqualJSON)(result, fixture);
111
114
  });
112
115
  });
113
116
  describe('KRS recovery with dai (PSBT format)', function () {
@@ -128,14 +131,14 @@ describe('formatBackupKeyRecoveryResult', function () {
128
131
  backupKey: 'test-backup-key',
129
132
  unspents,
130
133
  });
131
- result.should.have.property('transactionHex');
132
- result.should.have.property('coin');
133
- result.should.have.property('backupKey');
134
- result.should.have.property('recoveryAmount');
135
- result.backupKey.should.equal('test-backup-key');
134
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
135
+ (0, util_1.assertHasProperty)(result, 'coin');
136
+ (0, util_1.assertHasProperty)(result, 'backupKey');
137
+ (0, util_1.assertHasProperty)(result, 'recoveryAmount');
138
+ strict_1.default.strictEqual(result.backupKey, 'test-backup-key');
136
139
  const txBuf = Buffer.from(result.transactionHex, 'hex');
137
- (0, wasm_utxo_1.hasPsbtMagic)(txBuf).should.equal(true);
138
- (result.inputs === undefined).should.equal(true);
140
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), true);
141
+ strict_1.default.strictEqual(result.inputs, undefined);
139
142
  });
140
143
  it('matches fixture', async function () {
141
144
  const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
@@ -147,7 +150,7 @@ describe('formatBackupKeyRecoveryResult', function () {
147
150
  unspents,
148
151
  });
149
152
  const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-krs-dai', result);
150
- (0, util_1.shouldEqualJSON)(result, fixture);
153
+ (0, util_1.assertEqualJSON)(result, fixture);
151
154
  });
152
155
  });
153
156
  describe('full recovery (user + backup signatures)', function () {
@@ -166,10 +169,10 @@ describe('formatBackupKeyRecoveryResult', function () {
166
169
  recoveryDestination,
167
170
  unspents,
168
171
  });
169
- result.should.have.property('transactionHex');
170
- result.should.have.property('inputs');
172
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
173
+ (0, util_1.assertHasProperty)(result, 'inputs');
171
174
  const txBuf = Buffer.from(result.transactionHex, 'hex');
172
- (0, wasm_utxo_1.hasPsbtMagic)(txBuf).should.equal(false);
175
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), false);
173
176
  });
174
177
  it('matches fixture', async function () {
175
178
  const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
@@ -179,8 +182,8 @@ describe('formatBackupKeyRecoveryResult', function () {
179
182
  unspents,
180
183
  });
181
184
  const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-fullySigned', result);
182
- (0, util_1.shouldEqualJSON)(result, fixture);
185
+ (0, util_1.assertEqualJSON)(result, fixture);
183
186
  });
184
187
  });
185
188
  });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFFaEIsZ0RBQTBFO0FBRTFFLHNDQUtzQjtBQUV0QixrQ0FRaUI7QUFFakIsaUVBQWlFO0FBQ2pFLE1BQU0sSUFBSSxHQUFHLGdCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFFLENBQUM7QUFDN0QsTUFBTSxVQUFVLEdBQUcsV0FBb0IsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRXhGOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF5RDtJQUNqRixPQUFPO1FBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsT0FBTztRQUNMLElBQUEsZ0JBQVMsRUFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVB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QyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0LCBoYXNQc2J0TWFnaWMgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHtcbiAgYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMsXG4gIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24sXG4gIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0LFxuICBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8sXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5pbXBvcnQge1xuICBjcmVhdGVXYXNtV2FsbGV0S2V5cyxcbiAgZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICBnZXRGaXh0dXJlLFxuICBnZXRXYWxsZXRBZGRyZXNzLFxuICBzaG91bGRFcXVhbEpTT04sXG4gIHRvVW5zcGVudCxcbiAgdXR4b0NvaW5zLFxufSBmcm9tICcuLi91dGlsJztcblxuLy8gVXNlIHRidGMgZm9yIGFsbCB0ZXN0cyAtIGZvcm1hdHRpbmcgbG9naWMgZG9lc24ndCB2YXJ5IGJ5IGNvaW5cbmNvbnN0IGNvaW4gPSB1dHhvQ29pbnMuZmluZCgoYykgPT4gYy5nZXRDaGFpbigpID09PSAndGJ0YycpITtcbmNvbnN0IHNjcmlwdFR5cGUgPSAncDJzaFAyd3NoJyBhcyBjb25zdDtcblxuLy8gR2V0IGRlZmF1bHQgd2FzbSB3YWxsZXQga2V5cyAoeHB1YnMgYW5kIHhwcml2cylcbmNvbnN0IHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCB4cHVicywgeHByaXZzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuLyoqXG4gKiBCdWlsZCBzaWduaW5nIGtleXMgdHJpcGxlIHdpdGggc3BlY2lmaWVkIG5ldXRlciBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBidWlsZFNpZ25pbmdLZXlzKG9wdGlvbnM6IHsgbmV1dGVyVXNlcj86IGJvb2xlYW47IG5ldXRlckJhY2t1cD86IGJvb2xlYW4gfSk6IFRyaXBsZTxCSVAzMj4ge1xuICByZXR1cm4gW1xuICAgIG9wdGlvbnMubmV1dGVyVXNlciA/IHhwdWJzWzBdIDogeHByaXZzWzBdLFxuICAgIG9wdGlvbnMubmV1dGVyQmFja3VwID8geHB1YnNbMV0gOiB4cHJpdnNbMV0sXG4gICAgeHB1YnNbMl0sIC8vIGJpdGdvIGlzIGFsd2F5cyB4cHViXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRlc3RVbnNwZW50cygpOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSB7XG4gIHJldHVybiBbXG4gICAgdG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgxZTgpIH0sIDAsIGNvaW4ubmFtZSwgZGVmYXVsdFdhc21XYWxsZXRLZXlzKSxcbiAgICB0b1Vuc3BlbnQoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDJlOCkgfSwgMCwgY29pbi5uYW1lLCBkZWZhdWx0V2FzbVdhbGxldEtleXMpLFxuICBdO1xufVxuXG4vKipcbiAqIENsb25lIGEgUFNCVCAtIG5lY2Vzc2FyeSBiZWNhdXNlIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0IG11dGF0ZXMgd2hlbiBmaW5hbGl6aW5nLlxuICovXG5mdW5jdGlvbiBjbG9uZVBzYnQocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC5zZXJpYWxpemUoKSwgY29pbi5uYW1lKTtcbn1cblxuZGVzY3JpYmUoJ2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHdhbGxldEtleXM6IGV4dGVybmFsV2FsbGV0IH0gPSBjcmVhdGVXYXNtV2FsbGV0S2V5cygnZXh0ZXJuYWwnKTtcbiAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9IGdldFdhbGxldEFkZHJlc3MoY29pbi5uYW1lLCBleHRlcm5hbFdhbGxldCk7XG4gIGNvbnN0IGZlZVJhdGVTYXRWQiA9IDEwMDtcblxuICBkZXNjcmliZSgndW5zaWduZWQgc3dlZXAgKG5vIHNpZ25hdHVyZXMpJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHNpZ25pbmdLZXlzOiBUcmlwbGU8QklQMzI+O1xuICAgIGxldCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdW5zcGVudHMgPSBjcmVhdGVUZXN0VW5zcGVudHMoKTtcbiAgICAgIHNpZ25pbmdLZXlzID0gYnVpbGRTaWduaW5nS2V5cyh7IG5ldXRlclVzZXI6IHRydWUsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB3aXRoIFBTQlQgaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4SGV4Jyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4SW5mbycpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWVJbmZvJyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NvaW4nKTtcbiAgICAgIHJlc3VsdC5jb2luIS5zaG91bGQuZXF1YWwoY29pbi5nZXRDaGFpbigpKTtcblxuICAgICAgY29uc3QgdHhCdWYgPSBCdWZmZXIuZnJvbShyZXN1bHQudHhIZXgsICdoZXgnKTtcbiAgICAgIGhhc1BzYnRNYWdpYyh0eEJ1Zikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LXVuc2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIHNob3VsZEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS1JTIHJlY292ZXJ5IHdpdGgga2V5dGVybmFsIChsZWdhY3kgZm9ybWF0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIGxlZ2FjeSB0eCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdrZXl0ZXJuYWwnLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29pbicpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdiYWNrdXBLZXknKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVjb3ZlcnlBbW91bnQnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaW5wdXRzJyk7XG4gICAgICByZXN1bHQuYmFja3VwS2V5IS5zaG91bGQuZXF1YWwoJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGhhc1BzYnRNYWdpYyh0eEJ1Zikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIGZpeHR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdrZXl0ZXJuYWwnLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWtycy1rZXl0ZXJuYWwnLCByZXN1bHQpO1xuICAgICAgc2hvdWxkRXF1YWxKU09OKHJlc3VsdCwgZml4dHVyZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLUlMgcmVjb3Zlcnkgd2l0aCBkYWkgKFBTQlQgZm9ybWF0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIFBTQlQgaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGtyc1Byb3ZpZGVyOiAnZGFpJyxcbiAgICAgICAgYmFja3VwS2V5OiAndGVzdC1iYWNrdXAta2V5JyxcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NvaW4nKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYmFja3VwS2V5Jyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3JlY292ZXJ5QW1vdW50Jyk7XG4gICAgICByZXN1bHQuYmFja3VwS2V5IS5zaG91bGQuZXF1YWwoJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGhhc1BzYnRNYWdpYyh0eEJ1Zikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgKHJlc3VsdC5pbnB1dHMgPT09IHVuZGVmaW5lZCkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2RhaScsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaXh0dXJlID0gYXdhaXQgZ2V0Rml4dHVyZShjb2luLCAncmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3Zlcnkta3JzLWRhaScsIHJlc3VsdCk7XG4gICAgICBzaG91bGRFcXVhbEpTT04ocmVzdWx0LCBmaXh0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Z1bGwgcmVjb3ZlcnkgKHVzZXIgKyBiYWNrdXAgc2lnbmF0dXJlcyknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogZmFsc2UgfSk7XG4gICAgICBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgICAgIGNvaW4ubmFtZSxcbiAgICAgICAgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIGtleXM6IHNpZ25pbmdLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIgfSxcbiAgICAgICAgdW5zcGVudHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggZmluYWxpemVkIHR4IGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaW5wdXRzJyk7XG5cbiAgICAgIGNvbnN0IHR4QnVmID0gQnVmZmVyLmZyb20ocmVzdWx0LnRyYW5zYWN0aW9uSGV4ISwgJ2hleCcpO1xuICAgICAgaGFzUHNidE1hZ2ljKHR4QnVmKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWZ1bGx5U2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIHNob3VsZEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFHeEMsZ0RBQTBFO0FBRTFFLHNDQUtzQjtBQUV0QixrQ0FTaUI7QUFFakIsaUVBQWlFO0FBQ2pFLE1BQU0sSUFBSSxHQUFHLGdCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFFLENBQUM7QUFDN0QsTUFBTSxVQUFVLEdBQUcsV0FBb0IsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRXhGOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF5RDtJQUNqRixPQUFPO1FBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsT0FBTztRQUNMLElBQUEsZ0JBQVMsRUFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJ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LEVBQUUscUJBQXFCO2dCQUNqQyxJQUFJLEVBQUUsV0FBVztnQkFDakIsbUJBQW1CO2dCQUNuQixRQUFRO2FBQ1QsQ0FBb0MsQ0FBQztZQUV0QyxJQUFBLHdCQUFpQixFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVDLElBQUEsd0JBQWlCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUJBQWlCLEVBQUUsS0FBSztZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUE2QixFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xFLFVBQVUsRUFBRSxxQkFBcUI7Z0JBQ2pDLElBQUksRUFBRSxXQUFXO2dCQUNqQixtQkFBbUI7Z0JBQ25CLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsaUJBQVUsRUFBQyxJQUFJLEVBQUUsOENBQThDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0YsSUFBQSxzQkFBZSxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQsIGhhc1BzYnRNYWdpYyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyxcbiAgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbixcbiAgZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQsXG4gIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB0eXBlIHsgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uLy4uLy4uL3NyYy91bnNwZW50JztcbmltcG9ydCB7XG4gIGFzc2VydEVxdWFsSlNPTixcbiAgYXNzZXJ0SGFzUHJvcGVydHksXG4gIGNyZWF0ZVdhc21XYWxsZXRLZXlzLFxuICBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gIGdldEZpeHR1cmUsXG4gIGdldFdhbGxldEFkZHJlc3MsXG4gIHRvVW5zcGVudCxcbiAgdXR4b0NvaW5zLFxufSBmcm9tICcuLi91dGlsJztcblxuLy8gVXNlIHRidGMgZm9yIGFsbCB0ZXN0cyAtIGZvcm1hdHRpbmcgbG9naWMgZG9lc24ndCB2YXJ5IGJ5IGNvaW5cbmNvbnN0IGNvaW4gPSB1dHhvQ29pbnMuZmluZCgoYykgPT4gYy5nZXRDaGFpbigpID09PSAndGJ0YycpITtcbmNvbnN0IHNjcmlwdFR5cGUgPSAncDJzaFAyd3NoJyBhcyBjb25zdDtcblxuLy8gR2V0IGRlZmF1bHQgd2FzbSB3YWxsZXQga2V5cyAoeHB1YnMgYW5kIHhwcml2cylcbmNvbnN0IHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCB4cHVicywgeHByaXZzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuLyoqXG4gKiBCdWlsZCBzaWduaW5nIGtleXMgdHJpcGxlIHdpdGggc3BlY2lmaWVkIG5ldXRlciBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBidWlsZFNpZ25pbmdLZXlzKG9wdGlvbnM6IHsgbmV1dGVyVXNlcj86IGJvb2xlYW47IG5ldXRlckJhY2t1cD86IGJvb2xlYW4gfSk6IFRyaXBsZTxCSVAzMj4ge1xuICByZXR1cm4gW1xuICAgIG9wdGlvbnMubmV1dGVyVXNlciA/IHhwdWJzWzBdIDogeHByaXZzWzBdLFxuICAgIG9wdGlvbnMubmV1dGVyQmFja3VwID8geHB1YnNbMV0gOiB4cHJpdnNbMV0sXG4gICAgeHB1YnNbMl0sIC8vIGJpdGdvIGlzIGFsd2F5cyB4cHViXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRlc3RVbnNwZW50cygpOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSB7XG4gIHJldHVybiBbXG4gICAgdG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgxZTgpIH0sIDAsIGNvaW4ubmFtZSwgZGVmYXVsdFdhc21XYWxsZXRLZXlzKSxcbiAgICB0b1Vuc3BlbnQoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDJlOCkgfSwgMCwgY29pbi5uYW1lLCBkZWZhdWx0V2FzbVdhbGxldEtleXMpLFxuICBdO1xufVxuXG4vKipcbiAqIENsb25lIGEgUFNCVCAtIG5lY2Vzc2FyeSBiZWNhdXNlIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0IG11dGF0ZXMgd2hlbiBmaW5hbGl6aW5nLlxuICovXG5mdW5jdGlvbiBjbG9uZVBzYnQocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC5zZXJpYWxpemUoKSwgY29pbi5uYW1lKTtcbn1cblxuZGVzY3JpYmUoJ2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHdhbGxldEtleXM6IGV4dGVybmFsV2FsbGV0IH0gPSBjcmVhdGVXYXNtV2FsbGV0S2V5cygnZXh0ZXJuYWwnKTtcbiAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9IGdldFdhbGxldEFkZHJlc3MoY29pbi5uYW1lLCBleHRlcm5hbFdhbGxldCk7XG4gIGNvbnN0IGZlZVJhdGVTYXRWQiA9IDEwMDtcblxuICBkZXNjcmliZSgndW5zaWduZWQgc3dlZXAgKG5vIHNpZ25hdHVyZXMpJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHNpZ25pbmdLZXlzOiBUcmlwbGU8QklQMzI+O1xuICAgIGxldCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdW5zcGVudHMgPSBjcmVhdGVUZXN0VW5zcGVudHMoKTtcbiAgICAgIHNpZ25pbmdLZXlzID0gYnVpbGRTaWduaW5nS2V5cyh7IG5ldXRlclVzZXI6IHRydWUsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB3aXRoIFBTQlQgaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvO1xuXG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICd0eEhleCcpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHhJbmZvJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdmZWVJbmZvJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdjb2luJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNvaW4hLCBjb2luLmdldENoYWluKCkpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50eEhleCwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhhc1BzYnRNYWdpYyh0eEJ1ZiksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LXVuc2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS1JTIHJlY292ZXJ5IHdpdGgga2V5dGVybmFsIChsZWdhY3kgZm9ybWF0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIGxlZ2FjeSB0eCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdrZXl0ZXJuYWwnLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdjb2luJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdiYWNrdXBLZXknKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3JlY292ZXJ5QW1vdW50Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdpbnB1dHMnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuYmFja3VwS2V5ISwgJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoYXNQc2J0TWFnaWModHhCdWYpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyBmaXh0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGtyc1Byb3ZpZGVyOiAna2V5dGVybmFsJyxcbiAgICAgICAgYmFja3VwS2V5OiAndGVzdC1iYWNrdXAta2V5JyxcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKGNvaW4sICdyZWNvdmVyeS9mb3JtYXRCYWNrdXBLZXlSZWNvdmVyeS1rcnMta2V5dGVybmFsJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS1JTIHJlY292ZXJ5IHdpdGggZGFpIChQU0JUIGZvcm1hdCknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBQU0JUIGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2RhaScsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2NvaW4nKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2JhY2t1cEtleScpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAncmVjb3ZlcnlBbW91bnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuYmFja3VwS2V5ISwgJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoYXNQc2J0TWFnaWModHhCdWYpLCB0cnVlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuaW5wdXRzLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2RhaScsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaXh0dXJlID0gYXdhaXQgZ2V0Rml4dHVyZShjb2luLCAncmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3Zlcnkta3JzLWRhaScsIHJlc3VsdCk7XG4gICAgICBhc3NlcnRFcXVhbEpTT04ocmVzdWx0LCBmaXh0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Z1bGwgcmVjb3ZlcnkgKHVzZXIgKyBiYWNrdXAgc2lnbmF0dXJlcyknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogZmFsc2UgfSk7XG4gICAgICBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgICAgIGNvaW4ubmFtZSxcbiAgICAgICAgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIGtleXM6IHNpZ25pbmdLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIgfSxcbiAgICAgICAgdW5zcGVudHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggZmluYWxpemVkIHR4IGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdpbnB1dHMnKTtcblxuICAgICAgY29uc3QgdHhCdWYgPSBCdWZmZXIuZnJvbShyZXN1bHQudHJhbnNhY3Rpb25IZXghLCAnaGV4Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGFzUHNidE1hZ2ljKHR4QnVmKSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWZ1bGx5U2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -184,7 +184,7 @@ describe('signTransaction', function () {
184
184
  await signTransaction(psbt, v);
185
185
  }
186
186
  });
187
- it('customSigningFunction flow - Network Tx', async function () {
187
+ it('customSigningFunction flow - Network Tx should reject legacy format', async function () {
188
188
  const inputs = utxo_lib_1.testutil.txnInputScriptTypes
189
189
  .filter((v) => v !== 'p2shP2pk')
190
190
  .map((scriptType) => ({
@@ -195,9 +195,10 @@ describe('signTransaction', function () {
195
195
  const outputs = [{ scriptType: 'p2sh', value: unspentSum - BigInt(1000) }];
196
196
  const txBuilder = utxo_lib_1.testutil.constructTxnBuilder(inputs, outputs, coin.network, rootWalletKeys, 'unsigned');
197
197
  const unspents = inputs.map((v, i) => utxo_lib_1.testutil.toTxnUnspent(v, i, coin.network, rootWalletKeys));
198
- for (const v of [false, true]) {
199
- await signTransaction(txBuilder.buildIncomplete(), v, unspents);
200
- }
198
+ // Legacy format transactions are now deprecated and should throw ErrorDeprecatedTxFormat
199
+ await assert.rejects(async () => {
200
+ await signTransaction(txBuilder.buildIncomplete(), false, unspents);
201
+ }, src_1.ErrorDeprecatedTxFormat);
201
202
  });
202
203
  it('fails on PSBT cache miss', async function () {
203
204
  const inputs = [{ scriptType: 'taprootKeyPathSpend', value: BigInt(1000) }];
@@ -241,4 +242,4 @@ describe('signTransaction', function () {
241
242
  });
242
243
  });
243
244
  });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlCQUFlO0FBQ2YsK0NBQWlDO0FBRWpDLHlEQUEyQztBQUMzQyw2QkFBOEI7QUFDOUIsOENBQTJDO0FBQzNDLDhDQUFpRDtBQUVqRCxtQ0FBdUQ7QUFHdkQsaUNBQXlHO0FBRXpHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixNQUFNLEtBQUssR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRTdELE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLGtDQUFrQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sY0FBYyxHQUFHLElBQUEsMkJBQW9CLEdBQUUsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLHNCQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFtQixDQUFDO0lBRWpFLFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBRSxjQUFxQixFQUFFLGdCQUF3QjtRQUNsRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLElB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LENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBjb21tb24sIFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB0eXBlIHsgVW5zcGVudCB9IGZyb20gJy4uLy4uL3NyYy91bnNwZW50JztcblxuaW1wb3J0IHsgZ2V0VXR4b1dhbGxldCwgZ2V0RGVmYXVsdFdhbGxldEtleXMsIGdldFV0eG9Db2luLCBrZXljaGFpbnNCYXNlNTgsIGRlZmF1bHRCaXRHbyB9IGZyb20gJy4vdXRpbCc7XG5cbmRlc2NyaWJlKCdzaWduVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ2J0YycpO1xuICBjb25zdCB3YWxsZXQgPSBnZXRVdHhvV2FsbGV0KGNvaW4sIHsgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSB9KTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICBjb25zdCB1c2VyUHJ2ID0gcm9vdFdhbGxldEtleXMudXNlci50b0Jhc2U1OCgpO1xuICBjb25zdCBwdWJzID0ga2V5Y2hhaW5zQmFzZTU4Lm1hcCgodikgPT4gdi5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUHNidCh0eEhleDogc3RyaW5nLCB0YXJnZXRTaWdDb3VudDogMCB8IDEsIHRhcmdldE5vbmNlQ291bnQ/OiAxIHwgMikge1xuICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4SGV4LCBjb2luLm5ldHdvcmspO1xuICAgIHBzYnQuZGF0YS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB1dHhvbGliLmJpdGdvLnBhcnNlUHNidElucHV0KGlucHV0KTtcbiAgICAgIGlmIChwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICAgIGFzc2VydC5vayh0YXJnZXROb25jZUNvdW50KTtcbiAgICAgICAgY29uc3Qgbm9uY2UgPSBwc2J0LmdldFByb3ByaWV0YXJ5S2V5VmFscyhpbmRleCwge1xuICAgICAgICAgIGlkZW50aWZpZXI6IHV0eG9saWIuYml0Z28uUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSLFxuICAgICAgICAgIHN1YnR5cGU6IHV0eG9saWIuYml0Z28uUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLk1VU0lHMl9QVUJfTk9OQ0UsXG4gICAgICAgIH0pO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobm9uY2UubGVuZ3RoLCB0YXJnZXROb25jZUNvdW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnQ291bnQgPSBwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJyB8fCB0YXJnZXRTaWdDb3VudCA9PT0gMCA/IHVuZGVmaW5lZCA6IDE7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnNpZ25hdHVyZXM/Lmxlbmd0aCwgZXhwZWN0ZWRTaWdDb3VudCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZVR4KHR4SGV4OiBzdHJpbmcsIHVuc3BlbnRzOiBVbnNwZW50PGJpZ2ludD5bXSwgdGFyZ2V0U2lnQ291bnQ6IDAgfCAxKSB7XG4gICAgY29uc3QgdHggPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCh0eEhleCwgY29pbi5uZXR3b3JrKTtcbiAgICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpKSA9PiB7XG4gICAgICBjb25zdCBzaWdDb3VudCA9IHV0eG9saWIuYml0Z28uZ2V0U3RyaWN0U2lnbmF0dXJlQ291bnQodHguaW5zW2ldKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnQ291bnQgPSB1dHhvbGliLmJpdGdvLmlzV2FsbGV0VW5zcGVudCh1KSAmJiAhIXRhcmdldFNpZ0NvdW50ID8gMSA6IDA7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnQ291bnQsIGV4cGVjdGVkU2lnQ291bnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2lnblRyYW5zYWN0aW9uKFxuICAgIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgICB1c2VTaWduaW5nU3RlcHM6IGJvb2xlYW4sXG4gICAgdW5zcGVudHM/OiBVbnNwZW50PGJpZ2ludD5bXVxuICApIHtcbiAgICBjb25zdCBpc1BzYnQgPSB0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG4gICAgY29uc3QgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID0gaXNQc2J0ICYmIHV0eG9saWIuYml0Z28uaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmRJbnB1dCh0eCk7XG4gICAgY29uc3QgdHhIZXggPSB0eC50b0hleCgpO1xuXG4gICAgZnVuY3Rpb24gbm9ja1NpZ25Qc2J0KHBzYnRIZXg6IHN0cmluZyk6IG5vY2suU2NvcGUge1xuICAgICAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgocHNidEhleCwgY29pbi5uZXR3b3JrKTtcbiAgICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zaWducHNidGAsIChib2R5KSA9PiBib2R5LnBzYnQpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgcHNidDogcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKS50b0hleCgpIH0pO1xuICAgIH1cblxuICAgIGlmICghdXNlU2lnbmluZ1N0ZXBzKSB7XG4gICAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0ICYmIGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCkge1xuICAgICAgICBzY29wZSA9IG5vY2tTaWduUHNidCh0eC5jbG9uZSgpLnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMuYml0Z28pLnRvSGV4KCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcHNidCA9IGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4LFxuICAgICAgICAgIHR4SW5mbzogaXNQc2J0ID8gdW5kZWZpbmVkIDogeyB1bnNwZW50cyB9LFxuICAgICAgICAgIHdhbGxldElkOiBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyB3YWxsZXQuaWQoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgICBwdWJzOiBpc1BzYnQgPyB1bmRlZmluZWQgOiBwdWJzLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBwc2J0KTtcbiAgICAgIGlmIChpc1BzYnQpIHtcbiAgICAgICAgdmFsaWRhdGVQc2J0KHBzYnQudHhIZXgsIDEsIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgICAgdmFsaWRhdGVUeChwc2J0LnR4SGV4LCB1bnNwZW50cywgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjb3BlLmlzRG9uZSgpLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduZXJOb25jZVBzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICBzaWduaW5nU3RlcDogJ3NpZ25lck5vbmNlJyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBzaWduZXJOb25jZVBzYnQpO1xuICAgIGlmIChpc1BzYnQpIHtcbiAgICAgIHZhbGlkYXRlUHNidChzaWduZXJOb25jZVBzYnQudHhIZXgsIDAsIGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCA/IDEgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQub2sodW5zcGVudHMpO1xuICAgICAgdmFsaWRhdGVUeChzaWduZXJOb25jZVBzYnQudHhIZXgsIHVuc3BlbnRzLCAwKTtcbiAgICB9XG5cbiAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCkge1xuICAgICAgc2NvcGUgPSBub2NrU2lnblBzYnQoc2lnbmVyTm9uY2VQc2J0LnR4SGV4KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlUHNidCA9IGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHsgLi4uc2lnbmVyTm9uY2VQc2J0LCB3YWxsZXRJZDogd2FsbGV0LmlkKCkgfSxcbiAgICAgIHNpZ25pbmdTdGVwOiAnY29zaWduZXJOb25jZScsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gY29zaWduZXJOb25jZVBzYnQpO1xuICAgIGlmIChpc1BzYnQpIHtcbiAgICAgIHZhbGlkYXRlUHNidChjb3NpZ25lck5vbmNlUHNidC50eEhleCwgMCwgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gMiA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICB2YWxpZGF0ZVR4KGNvc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCB1bnNwZW50cywgMCk7XG4gICAgfVxuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NvcGUuaXNEb25lKCksIHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25lclNpZ1BzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLmNvc2lnbmVyTm9uY2VQc2J0LCB0eEluZm86IGlzUHNidCA/IHVuZGVmaW5lZCA6IHsgdW5zcGVudHMgfSB9LFxuICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgcHViczogaXNQc2J0ID8gdW5kZWZpbmVkIDogcHVicyxcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyU2lnbmF0dXJlJyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBzaWduZXJTaWdQc2J0KTtcbiAgICBpZiAoaXNQc2J0KSB7XG4gICAgICB2YWxpZGF0ZVBzYnQoc2lnbmVyU2lnUHNidC50eEhleCwgMSwgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gMiA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICB2YWxpZGF0ZVR4KHNpZ25lclNpZ1BzYnQudHhIZXgsIHVuc3BlbnRzLCAxKTtcbiAgICB9XG4gIH1cblxuICBpdCgnY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGZsb3cgLSBQU0JUIHdpdGggdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gdGVzdHV0aWwuaW5wdXRTY3JpcHRUeXBlcy5tYXAoKHNjcmlwdFR5cGUpID0+ICh7XG4gICAgICBzY3JpcHRUeXBlLFxuICAgICAgdmFsdWU6IEJpZ0ludCgxMDAwKSxcbiAgICB9KSk7XG4gICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0czogdGVzdHV0aWwuT3V0cHV0W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHBzYnQgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJywge1xuICAgICAgcDJzaFAycGtLZXk6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW4ubmFtZSlbMF0sXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgYXdhaXQgc2lnblRyYW5zYWN0aW9uKHBzYnQsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2N1c3RvbVNpZ25pbmdGdW5jdGlvbiBmbG93IC0gUFNCVCB3aXRob3V0IHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlucHV0czogdGVzdHV0aWwuSW5wdXRbXSA9IHRlc3R1dGlsLmlucHV0U2NyaXB0VHlwZXNcbiAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT09ICd0YXByb290S2V5UGF0aFNwZW5kJylcbiAgICAgIC5tYXAoKHNjcmlwdFR5cGUpID0+ICh7XG4gICAgICAgIHNjcmlwdFR5cGUsXG4gICAgICAgIHZhbHVlOiBCaWdJbnQoMTAwMCksXG4gICAgICB9KSk7XG4gICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VyKSA9PiBwcmV2ICsgY3VyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGNvaW4ubmV0d29yaywgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcpO1xuXG4gICAgZm9yIChjb25zdCB2IG9mIFtmYWxzZSwgdHJ1ZV0pIHtcbiAgICAgIGF3YWl0IHNpZ25UcmFuc2FjdGlvbihwc2J0LCB2KTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdjdXN0b21TaWduaW5nRnVuY3Rpb24gZmxvdyAtIE5ldHdvcmsgVHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5UeG5JbnB1dDxiaWdpbnQ+W10gPSB0ZXN0dXRpbC50eG5JbnB1dFNjcmlwdFR5cGVzXG4gICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSAncDJzaFAycGsnKVxuICAgICAgLm1hcCgoc2NyaXB0VHlwZSkgPT4gKHtcbiAgICAgICAgc2NyaXB0VHlwZSxcbiAgICAgICAgdmFsdWU6IEJpZ0ludCgxMDAwKSxcbiAgICAgIH0pKTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5UeG5PdXRwdXQ8YmlnaW50PltdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RUeG5CdWlsZGVyKGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJyk7XG4gICAgY29uc3QgdW5zcGVudHMgPSBpbnB1dHMubWFwKCh2LCBpKSA9PiB0ZXN0dXRpbC50b1R4blVuc3BlbnQodiwgaSwgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cykpO1xuXG4gICAgZm9yIChjb25zdCB2IG9mIFtmYWxzZSwgdHJ1ZV0pIHtcbiAgICAgIGF3YWl0IHNpZ25UcmFuc2FjdGlvbih0eEJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCksIHYsIHVuc3BlbnRzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdmYWlscyBvbiBQU0JUIGNhY2hlIG1pc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnLCB2YWx1ZTogQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGNvaW4ubmV0d29yaywgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBwc2J0LnRvSGV4KCkgfSxcbiAgICAgICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1lc3NhZ2U6IGBQc2J0IGlzIG1pc3NpbmcgZnJvbSB0eENhY2hlIChjYWNoZSBzaXplIDApLlxuICAgICAgICAgICAgVGhpcyBtYXkgYmUgZHVlIHRvIHRoZSByZXF1ZXN0IGJlaW5nIHJvdXRlZCB0byBhIGRpZmZlcmVudCBCaXRHby1FeHByZXNzIGluc3RhbmNlIHRoYXQgZm9yIHNpZ25pbmcgc3RlcCAnc2lnbmVyTm9uY2UnLmAsXG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2ZhaWxzIG9uIHVuc3VwcG9ydGVkIGxvY2tpbmcgc2NyaXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlucHV0czogdGVzdHV0aWwuSW5wdXRbXSA9IFtcbiAgICAgIHsgc2NyaXB0VHlwZTogJ3Ayd3NoJywgdmFsdWU6IEJpZ0ludCgxMDAwKSB9LFxuICAgICAgeyBzY3JpcHRUeXBlOiAncDJ0ck11c2lnMicsIHZhbHVlOiBCaWdJbnQoMTAwMCkgfSxcbiAgICBdO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCg1MDApIH1dO1xuICAgIGNvbnN0IHBzYnQgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJyk7XG5cbiAgICAvLyBvdmVycmlkZSB0aGUgMXN0IFBTQlQgaW5wdXQgd2l0aCB1bnN1cHBvcnRlZCAyIG9mIDIgbXVsdGktc2lnIGxvY2tpbmcgc2NyaXB0LlxuICAgIGNvbnN0IHVuc3BlbnQgPSB0ZXN0dXRpbC50b1Vuc3BlbnQoaW5wdXRzWzBdLCAwLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzKTtcbiAgICBpZiAoIXV0eG9saWIuYml0Z28uaXNXYWxsZXRVbnNwZW50KHVuc3BlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdW5zcGVudCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHB1YmxpY0tleXMgfSA9IHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgodW5zcGVudC5jaGFpbiwgdW5zcGVudC5pbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0Mk9mMiA9IHV0eG9saWIucGF5bWVudHMucDJtcyh7IG06IDIsIHB1YmtleXM6IFtwdWJsaWNLZXlzWzBdLCBwdWJsaWNLZXlzWzFdXSB9KTtcbiAgICBwc2J0LmRhdGEuaW5wdXRzWzBdLndpdG5lc3NTY3JpcHQgPSBzY3JpcHQyT2YyLm91dHB1dDtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogcHNidC50b0hleCgpIH0sXG4gICAgICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1lc3NhZ2U6IGBsZW5ndGggbWlzbWF0Y2hgLFxuICAgICAgfVxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3NpZ25UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlCQUFlO0FBQ2YsK0NBQWlDO0FBRWpDLHlEQUEyQztBQUMzQyw2QkFBOEI7QUFDOUIsOENBQTJDO0FBQzNDLDhDQUFpRDtBQUVqRCxtQ0FBZ0Y7QUFHaEYsaUNBQXlHO0FBRXpHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixNQUFNLEtBQUssR0FBRyxpQkFBTSxDQUFDLFlBQVksQ0FBQyxtQkFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRTdELE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLGtDQUFrQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sY0FBYyxHQUFHLElBQUEsMkJBQW9CLEdBQUUsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLHNCQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFtQixDQUFDO0lBRWpFLFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBRSxjQUFxQixFQUFFLGdCQUF3QjtRQUNsRixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLElB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QixDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBjb21tb24sIFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzLCBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7IGdldFV0eG9XYWxsZXQsIGdldERlZmF1bHRXYWxsZXRLZXlzLCBnZXRVdHhvQ29pbiwga2V5Y2hhaW5zQmFzZTU4LCBkZWZhdWx0Qml0R28gfSBmcm9tICcuL3V0aWwnO1xuXG5kZXNjcmliZSgnc2lnblRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbZGVmYXVsdEJpdEdvLmdldEVudigpXS51cmk7XG5cbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCdidGMnKTtcbiAgY29uc3Qgd2FsbGV0ID0gZ2V0VXR4b1dhbGxldChjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLCBjb2luOiBjb2luLmdldENoYWluKCkgfSk7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgY29uc3QgdXNlclBydiA9IHJvb3RXYWxsZXRLZXlzLnVzZXIudG9CYXNlNTgoKTtcbiAgY29uc3QgcHVicyA9IGtleWNoYWluc0Jhc2U1OC5tYXAoKHYpID0+IHYucHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZVBzYnQodHhIZXg6IHN0cmluZywgdGFyZ2V0U2lnQ291bnQ6IDAgfCAxLCB0YXJnZXROb25jZUNvdW50PzogMSB8IDIpIHtcbiAgICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eEhleCwgY29pbi5uZXR3b3JrKTtcbiAgICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkID0gdXR4b2xpYi5iaXRnby5wYXJzZVBzYnRJbnB1dChpbnB1dCk7XG4gICAgICBpZiAocGFyc2VkLnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgICBhc3NlcnQub2sodGFyZ2V0Tm9uY2VDb3VudCk7XG4gICAgICAgIGNvbnN0IG5vbmNlID0gcHNidC5nZXRQcm9wcmlldGFyeUtleVZhbHMoaW5kZXgsIHtcbiAgICAgICAgICBpZGVudGlmaWVyOiB1dHhvbGliLmJpdGdvLlBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUixcbiAgICAgICAgICBzdWJ0eXBlOiB1dHhvbGliLmJpdGdvLlByb3ByaWV0YXJ5S2V5U3VidHlwZS5NVVNJRzJfUFVCX05PTkNFLFxuICAgICAgICB9KTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5vbmNlLmxlbmd0aCwgdGFyZ2V0Tm9uY2VDb3VudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBleHBlY3RlZFNpZ0NvdW50ID0gcGFyc2VkLnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycgfHwgdGFyZ2V0U2lnQ291bnQgPT09IDAgPyB1bmRlZmluZWQgOiAxO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5zaWduYXR1cmVzPy5sZW5ndGgsIGV4cGVjdGVkU2lnQ291bnQpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVUeCh0eEhleDogc3RyaW5nLCB1bnNwZW50czogVW5zcGVudDxiaWdpbnQ+W10sIHRhcmdldFNpZ0NvdW50OiAwIHwgMSkge1xuICAgIGNvbnN0IHR4ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXgodHhIZXgsIGNvaW4ubmV0d29yayk7XG4gICAgdW5zcGVudHMuZm9yRWFjaCgodSwgaSkgPT4ge1xuICAgICAgY29uc3Qgc2lnQ291bnQgPSB1dHhvbGliLmJpdGdvLmdldFN0cmljdFNpZ25hdHVyZUNvdW50KHR4Lmluc1tpXSk7XG4gICAgICBjb25zdCBleHBlY3RlZFNpZ0NvdW50ID0gdXR4b2xpYi5iaXRnby5pc1dhbGxldFVuc3BlbnQodSkgJiYgISF0YXJnZXRTaWdDb3VudCA/IDEgOiAwO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ0NvdW50LCBleHBlY3RlZFNpZ0NvdW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihcbiAgICB0eDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sXG4gICAgdXNlU2lnbmluZ1N0ZXBzOiBib29sZWFuLFxuICAgIHVuc3BlbnRzPzogVW5zcGVudDxiaWdpbnQ+W11cbiAgKSB7XG4gICAgY29uc3QgaXNQc2J0ID0gdHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIGNvbnN0IGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCA9IGlzUHNidCAmJiB1dHhvbGliLmJpdGdvLmlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kSW5wdXQodHgpO1xuICAgIGNvbnN0IHR4SGV4ID0gdHgudG9IZXgoKTtcblxuICAgIGZ1bmN0aW9uIG5vY2tTaWduUHNidChwc2J0SGV4OiBzdHJpbmcpOiBub2NrLlNjb3BlIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHBzYnRIZXgsIGNvaW4ubmV0d29yayk7XG4gICAgICByZXR1cm4gbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2lnbnBzYnRgLCAoYm9keSkgPT4gYm9keS5wc2J0KVxuICAgICAgICAucmVwbHkoMjAwLCB7IHBzYnQ6IHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy5iaXRnbykudG9IZXgoKSB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZVNpZ25pbmdTdGVwcykge1xuICAgICAgbGV0IHNjb3BlOiBub2NrLlNjb3BlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCAmJiBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQpIHtcbiAgICAgICAgc2NvcGUgPSBub2NrU2lnblBzYnQodHguY2xvbmUoKS5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKS50b0hleCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleCxcbiAgICAgICAgICB0eEluZm86IGlzUHNidCA/IHVuZGVmaW5lZCA6IHsgdW5zcGVudHMgfSxcbiAgICAgICAgICB3YWxsZXRJZDogaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gd2FsbGV0LmlkKCkgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogdXNlclBydixcbiAgICAgICAgcHViczogaXNQc2J0ID8gdW5kZWZpbmVkIDogcHVicyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gcHNidCk7XG4gICAgICBpZiAoaXNQc2J0KSB7XG4gICAgICAgIHZhbGlkYXRlUHNidChwc2J0LnR4SGV4LCAxLCAyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICAgIHZhbGlkYXRlVHgocHNidC50eEhleCwgdW5zcGVudHMsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVyTm9uY2VQc2J0ID0gYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gc2lnbmVyTm9uY2VQc2J0KTtcbiAgICBpZiAoaXNQc2J0KSB7XG4gICAgICB2YWxpZGF0ZVBzYnQoc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCAwLCBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyAxIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgIHZhbGlkYXRlVHgoc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCB1bnNwZW50cywgMCk7XG4gICAgfVxuXG4gICAgbGV0IHNjb3BlOiBub2NrLlNjb3BlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQpIHtcbiAgICAgIHNjb3BlID0gbm9ja1NpZ25Qc2J0KHNpZ25lck5vbmNlUHNidC50eEhleCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29zaWduZXJOb25jZVBzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25lck5vbmNlUHNidCwgd2FsbGV0SWQ6IHdhbGxldC5pZCgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuICAgIGFzc2VydC5vaygndHhIZXgnIGluIGNvc2lnbmVyTm9uY2VQc2J0KTtcbiAgICBpZiAoaXNQc2J0KSB7XG4gICAgICB2YWxpZGF0ZVBzYnQoY29zaWduZXJOb25jZVBzYnQudHhIZXgsIDAsIGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCA/IDIgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQub2sodW5zcGVudHMpO1xuICAgICAgdmFsaWRhdGVUeChjb3NpZ25lck5vbmNlUHNidC50eEhleCwgdW5zcGVudHMsIDApO1xuICAgIH1cblxuICAgIGlmIChzY29wZSkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjb3BlLmlzRG9uZSgpLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduZXJTaWdQc2J0ID0gYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQcmVidWlsZDogeyAuLi5jb3NpZ25lck5vbmNlUHNidCwgdHhJbmZvOiBpc1BzYnQgPyB1bmRlZmluZWQgOiB7IHVuc3BlbnRzIH0gfSxcbiAgICAgIHBydjogdXNlclBydixcbiAgICAgIHB1YnM6IGlzUHNidCA/IHVuZGVmaW5lZCA6IHB1YnMsXG4gICAgICBzaWduaW5nU3RlcDogJ3NpZ25lclNpZ25hdHVyZScsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gc2lnbmVyU2lnUHNidCk7XG4gICAgaWYgKGlzUHNidCkge1xuICAgICAgdmFsaWRhdGVQc2J0KHNpZ25lclNpZ1BzYnQudHhIZXgsIDEsIGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCA/IDIgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQub2sodW5zcGVudHMpO1xuICAgICAgdmFsaWRhdGVUeChzaWduZXJTaWdQc2J0LnR4SGV4LCB1bnNwZW50cywgMSk7XG4gICAgfVxuICB9XG5cbiAgaXQoJ2N1c3RvbVNpZ25pbmdGdW5jdGlvbiBmbG93IC0gUFNCVCB3aXRoIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlucHV0czogdGVzdHV0aWwuSW5wdXRbXSA9IHRlc3R1dGlsLmlucHV0U2NyaXB0VHlwZXMubWFwKChzY3JpcHRUeXBlKSA9PiAoe1xuICAgICAgc2NyaXB0VHlwZSxcbiAgICAgIHZhbHVlOiBCaWdJbnQoMTAwMCksXG4gICAgfSkpO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGNvaW4ubmV0d29yaywgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcsIHtcbiAgICAgIHAyc2hQMnBrS2V5OiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luLm5hbWUpWzBdLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCB2IG9mIFtmYWxzZSwgdHJ1ZV0pIHtcbiAgICAgIGF3YWl0IHNpZ25UcmFuc2FjdGlvbihwc2J0LCB2KTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdjdXN0b21TaWduaW5nRnVuY3Rpb24gZmxvdyAtIFBTQlQgd2l0aG91dCB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLklucHV0W10gPSB0ZXN0dXRpbC5pbnB1dFNjcmlwdFR5cGVzXG4gICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpXG4gICAgICAubWFwKChzY3JpcHRUeXBlKSA9PiAoe1xuICAgICAgICBzY3JpcHRUeXBlLFxuICAgICAgICB2YWx1ZTogQmlnSW50KDEwMDApLFxuICAgICAgfSkpO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cikgPT4gcHJldiArIGN1ci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoMTAwMCkgfV07XG4gICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnKTtcblxuICAgIGZvciAoY29uc3QgdiBvZiBbZmFsc2UsIHRydWVdKSB7XG4gICAgICBhd2FpdCBzaWduVHJhbnNhY3Rpb24ocHNidCwgdik7XG4gICAgfVxuICB9KTtcblxuICBpdCgnY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGZsb3cgLSBOZXR3b3JrIFR4IHNob3VsZCByZWplY3QgbGVnYWN5IGZvcm1hdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLlR4bklucHV0PGJpZ2ludD5bXSA9IHRlc3R1dGlsLnR4bklucHV0U2NyaXB0VHlwZXNcbiAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT09ICdwMnNoUDJwaycpXG4gICAgICAubWFwKChzY3JpcHRUeXBlKSA9PiAoe1xuICAgICAgICBzY3JpcHRUeXBlLFxuICAgICAgICB2YWx1ZTogQmlnSW50KDEwMDApLFxuICAgICAgfSkpO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLlR4bk91dHB1dDxiaWdpbnQ+W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRlc3R1dGlsLmNvbnN0cnVjdFR4bkJ1aWxkZXIoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnKTtcbiAgICBjb25zdCB1bnNwZW50cyA9IGlucHV0cy5tYXAoKHYsIGkpID0+IHRlc3R1dGlsLnRvVHhuVW5zcGVudCh2LCBpLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzKSk7XG5cbiAgICAvLyBMZWdhY3kgZm9ybWF0IHRyYW5zYWN0aW9ucyBhcmUgbm93IGRlcHJlY2F0ZWQgYW5kIHNob3VsZCB0aHJvdyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdFxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNpZ25UcmFuc2FjdGlvbih0eEJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCksIGZhbHNlLCB1bnNwZW50cyk7XG4gICAgfSwgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQpO1xuICB9KTtcblxuICBpdCgnZmFpbHMgb24gUFNCVCBjYWNoZSBtaXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlucHV0czogdGVzdHV0aWwuSW5wdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJywgdmFsdWU6IEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoMTAwMCkgfV07XG4gICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogcHNidC50b0hleCgpIH0sXG4gICAgICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyU2lnbmF0dXJlJyxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtZXNzYWdlOiBgUHNidCBpcyBtaXNzaW5nIGZyb20gdHhDYWNoZSAoY2FjaGUgc2l6ZSAwKS5cbiAgICAgICAgICAgIFRoaXMgbWF5IGJlIGR1ZSB0byB0aGUgcmVxdWVzdCBiZWluZyByb3V0ZWQgdG8gYSBkaWZmZXJlbnQgQml0R28tRXhwcmVzcyBpbnN0YW5jZSB0aGF0IGZvciBzaWduaW5nIHN0ZXAgJ3NpZ25lck5vbmNlJy5gLFxuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyBvbiB1bnN1cHBvcnRlZCBsb2NraW5nIHNjcmlwdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLklucHV0W10gPSBbXG4gICAgICB7IHNjcmlwdFR5cGU6ICdwMndzaCcsIHZhbHVlOiBCaWdJbnQoMTAwMCkgfSxcbiAgICAgIHsgc2NyaXB0VHlwZTogJ3AydHJNdXNpZzInLCB2YWx1ZTogQmlnSW50KDEwMDApIH0sXG4gICAgXTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoNTAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGNvaW4ubmV0d29yaywgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcpO1xuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIDFzdCBQU0JUIGlucHV0IHdpdGggdW5zdXBwb3J0ZWQgMiBvZiAyIG11bHRpLXNpZyBsb2NraW5nIHNjcmlwdC5cbiAgICBjb25zdCB1bnNwZW50ID0gdGVzdHV0aWwudG9VbnNwZW50KGlucHV0c1swXSwgMCwgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cyk7XG4gICAgaWYgKCF1dHhvbGliLmJpdGdvLmlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVuc3BlbnQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBwdWJsaWNLZXlzIH0gPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdDJPZjIgPSB1dHhvbGliLnBheW1lbnRzLnAybXMoeyBtOiAyLCBwdWJrZXlzOiBbcHVibGljS2V5c1swXSwgcHVibGljS2V5c1sxXV0gfSk7XG4gICAgcHNidC5kYXRhLmlucHV0c1swXS53aXRuZXNzU2NyaXB0ID0gc2NyaXB0Mk9mMi5vdXRwdXQ7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHBzYnQudG9IZXgoKSB9LFxuICAgICAgICAgIHBydjogdXNlclBydixcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtZXNzYWdlOiBgbGVuZ3RoIG1pc21hdGNoYCxcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn0pO1xuIl19