@bitgo-beta/abstract-utxo 1.6.1-alpha.420 → 1.6.1-alpha.422

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 (132) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +6 -52
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +14 -23
  4. package/dist/cjs/src/address/fixedScript.d.ts +2 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +11 -6
  7. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  8. package/dist/cjs/src/impl/bch/bch.js +5 -1
  9. package/dist/cjs/src/impl/bcha/bcha.d.ts +0 -1
  10. package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -1
  11. package/dist/cjs/src/impl/bcha/bcha.js +1 -11
  12. package/dist/cjs/src/impl/doge/doge.d.ts +2 -1
  13. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
  14. package/dist/cjs/src/impl/doge/doge.js +1 -1
  15. package/dist/cjs/src/keychains.d.ts +6 -2
  16. package/dist/cjs/src/keychains.d.ts.map +1 -1
  17. package/dist/cjs/src/keychains.js +33 -1
  18. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  19. package/dist/cjs/src/recovery/backupKeyRecovery.js +20 -13
  20. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +2 -2
  21. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  22. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +1 -1
  23. package/dist/cjs/src/transaction/descriptor/parse.d.ts +2 -1
  24. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  25. package/dist/cjs/src/transaction/descriptor/parse.js +1 -1
  26. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +2 -1
  27. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  28. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +1 -1
  29. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +2 -1
  30. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  31. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +1 -1
  32. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +1 -0
  33. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  34. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +42 -18
  35. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +15 -5
  36. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  37. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +61 -38
  38. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +3 -1
  39. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  40. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +14 -7
  41. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +2 -1
  42. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  43. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +56 -44
  44. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  45. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +1 -1
  46. package/dist/cjs/src/transaction/index.d.ts +1 -0
  47. package/dist/cjs/src/transaction/index.d.ts.map +1 -1
  48. package/dist/cjs/src/transaction/index.js +2 -1
  49. package/dist/cjs/src/transaction/parseTransaction.d.ts +2 -1
  50. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -1
  51. package/dist/cjs/src/transaction/parseTransaction.js +1 -1
  52. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  53. package/dist/cjs/src/transaction/recipient.js +2 -2
  54. package/dist/cjs/src/transaction/types.d.ts +44 -0
  55. package/dist/cjs/src/transaction/types.d.ts.map +1 -0
  56. package/dist/cjs/src/transaction/types.js +3 -0
  57. package/dist/cjs/src/verifyKey.d.ts +2 -1
  58. package/dist/cjs/src/verifyKey.d.ts.map +1 -1
  59. package/dist/cjs/src/verifyKey.js +1 -1
  60. package/dist/cjs/test/unit/parseTransaction.js +1 -1
  61. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +2 -1
  62. package/dist/cjs/test/unit/transaction/descriptor/parse.js +1 -1
  63. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +40 -16
  64. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts +2 -0
  65. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts.map +1 -0
  66. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +288 -0
  67. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +3 -0
  68. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +1 -0
  69. package/dist/cjs/test/unit/transaction/fixedScript/util.js +46 -0
  70. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -1
  71. package/dist/cjs/test/unit/txFormat.js +14 -2
  72. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  73. package/dist/esm/abstractUtxoCoin.d.ts +6 -52
  74. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  75. package/dist/esm/abstractUtxoCoin.js +12 -21
  76. package/dist/esm/address/fixedScript.d.ts +2 -4
  77. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  78. package/dist/esm/address/fixedScript.js +12 -7
  79. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  80. package/dist/esm/impl/bch/bch.js +5 -1
  81. package/dist/esm/impl/bcha/bcha.d.ts +0 -1
  82. package/dist/esm/impl/bcha/bcha.d.ts.map +1 -1
  83. package/dist/esm/impl/bcha/bcha.js +1 -11
  84. package/dist/esm/impl/doge/doge.d.ts +2 -1
  85. package/dist/esm/impl/doge/doge.d.ts.map +1 -1
  86. package/dist/esm/impl/doge/doge.js +1 -1
  87. package/dist/esm/keychains.d.ts +6 -2
  88. package/dist/esm/keychains.d.ts.map +1 -1
  89. package/dist/esm/keychains.js +32 -1
  90. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  91. package/dist/esm/recovery/backupKeyRecovery.js +20 -13
  92. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +2 -2
  93. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  94. package/dist/esm/transaction/descriptor/explainPsbt.js +1 -1
  95. package/dist/esm/transaction/descriptor/parse.d.ts +2 -1
  96. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  97. package/dist/esm/transaction/descriptor/parse.js +1 -1
  98. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +2 -1
  99. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  100. package/dist/esm/transaction/descriptor/parseToAmountType.js +1 -1
  101. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +2 -1
  102. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  103. package/dist/esm/transaction/descriptor/verifyTransaction.js +1 -1
  104. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +1 -0
  105. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  106. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +42 -18
  107. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +15 -5
  108. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  109. package/dist/esm/transaction/fixedScript/explainTransaction.js +61 -38
  110. package/dist/esm/transaction/fixedScript/parseOutput.d.ts +3 -1
  111. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  112. package/dist/esm/transaction/fixedScript/parseOutput.js +13 -7
  113. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +2 -1
  114. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  115. package/dist/esm/transaction/fixedScript/parseTransaction.js +56 -44
  116. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  117. package/dist/esm/transaction/fixedScript/verifyTransaction.js +1 -1
  118. package/dist/esm/transaction/index.d.ts +1 -0
  119. package/dist/esm/transaction/index.d.ts.map +1 -1
  120. package/dist/esm/transaction/index.js +2 -1
  121. package/dist/esm/transaction/parseTransaction.d.ts +2 -1
  122. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -1
  123. package/dist/esm/transaction/parseTransaction.js +1 -1
  124. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  125. package/dist/esm/transaction/recipient.js +2 -2
  126. package/dist/esm/transaction/types.d.ts +44 -0
  127. package/dist/esm/transaction/types.d.ts.map +1 -0
  128. package/dist/esm/transaction/types.js +2 -0
  129. package/dist/esm/verifyKey.d.ts +2 -1
  130. package/dist/esm/verifyKey.d.ts.map +1 -1
  131. package/dist/esm/verifyKey.js +1 -1
  132. package/package.json +11 -11
@@ -41,44 +41,52 @@ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
41
  const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
42
42
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
43
43
  const fixedScript_1 = require("../../../../src/transaction/fixedScript");
44
- function hasWasmUtxoSupport(network) {
45
- return ![
46
- utxolib.networks.bitcoincash,
47
- utxolib.networks.bitcoingold,
48
- utxolib.networks.ecash,
49
- utxolib.networks.zcash,
50
- ].includes(utxolib.getMainnet(network));
51
- }
44
+ const util_1 = require("./util");
52
45
  function describeTransactionWith(acidTest) {
53
46
  describe(`${acidTest.name}`, function () {
47
+ let psbt;
54
48
  let psbtBytes;
49
+ let walletXpubs;
50
+ let customChangeWalletXpubs;
51
+ let wasmPsbt;
55
52
  let refExplanation;
56
53
  before('prepare', function () {
57
- const psbt = acidTest.createPsbt();
54
+ psbt = acidTest.createPsbt();
58
55
  refExplanation = (0, fixedScript_1.explainPsbt)(psbt, { pubs: acidTest.rootWalletKeys }, acidTest.network, {
59
56
  strict: true,
60
57
  });
61
58
  psbtBytes = psbt.toBuffer();
59
+ const networkName = utxolib.getNetworkName(acidTest.network);
60
+ (0, strict_1.default)(networkName);
61
+ walletXpubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
62
+ customChangeWalletXpubs = acidTest.otherWalletKeys.triple.map((k) => k.neutered().toBase58());
63
+ if ((0, util_1.hasWasmUtxoSupport)(acidTest.network)) {
64
+ wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbtBytes, networkName);
65
+ }
62
66
  });
63
67
  it('should match the expected values for explainPsbt', function () {
64
68
  // note: `outputs` means external outputs here
65
69
  strict_1.default.strictEqual(refExplanation.outputs.length, 3);
66
70
  strict_1.default.strictEqual(refExplanation.changeOutputs.length, acidTest.outputs.length - 3);
67
- strict_1.default.strictEqual(refExplanation.outputAmount, '2700');
71
+ strict_1.default.strictEqual(refExplanation.outputAmount, '1800');
68
72
  strict_1.default.strictEqual(refExplanation.changeOutputs.length, acidTest.outputs.length - 3);
69
73
  refExplanation.changeOutputs.forEach((change) => {
70
74
  strict_1.default.strictEqual(change.amount, '900');
71
75
  strict_1.default.strictEqual(typeof change.address, 'string');
72
76
  });
73
77
  });
78
+ it('reference implementation should support custom change outputs', function () {
79
+ const customChangeExplanation = (0, fixedScript_1.explainPsbt)(psbt, { pubs: acidTest.rootWalletKeys, customChangePubs: acidTest.otherWalletKeys }, acidTest.network, { strict: true });
80
+ strict_1.default.ok(customChangeExplanation.customChangeOutputs);
81
+ strict_1.default.strictEqual(customChangeExplanation.changeOutputs.length, refExplanation.changeOutputs.length);
82
+ strict_1.default.strictEqual(customChangeExplanation.outputs.length, refExplanation.outputs.length - 1);
83
+ strict_1.default.strictEqual(customChangeExplanation.customChangeOutputs.length, 1);
84
+ strict_1.default.strictEqual(customChangeExplanation.customChangeOutputs[0].amount, '900');
85
+ });
74
86
  it('should match explainPsbtWasm', function () {
75
- if (!hasWasmUtxoSupport(acidTest.network)) {
87
+ if (!(0, util_1.hasWasmUtxoSupport)(acidTest.network)) {
76
88
  return this.skip();
77
89
  }
78
- const networkName = utxolib.getNetworkName(acidTest.network);
79
- (0, strict_1.default)(networkName);
80
- const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbtBytes, networkName);
81
- const walletXpubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
82
90
  const wasmExplanation = (0, fixedScript_1.explainPsbtWasm)(wasmPsbt, walletXpubs, {
83
91
  replayProtection: {
84
92
  outputScripts: [acidTest.getReplayProtectionOutputScript()],
@@ -100,9 +108,25 @@ function describeTransactionWith(acidTest) {
100
108
  }
101
109
  }
102
110
  });
111
+ if (acidTest.network !== utxolib.networks.bitcoin) {
112
+ return;
113
+ }
114
+ // extended test suite for bitcoin
115
+ it('returns custom change outputs when parameter is set', function () {
116
+ const wasmExplanation = (0, fixedScript_1.explainPsbtWasm)(wasmPsbt, walletXpubs, {
117
+ replayProtection: {
118
+ outputScripts: [acidTest.getReplayProtectionOutputScript()],
119
+ },
120
+ customChangeWalletXpubs,
121
+ });
122
+ strict_1.default.ok(wasmExplanation.customChangeOutputs);
123
+ strict_1.default.deepStrictEqual(wasmExplanation.outputs.length, 2);
124
+ strict_1.default.deepStrictEqual(wasmExplanation.customChangeOutputs.length, 1);
125
+ strict_1.default.deepStrictEqual(wasmExplanation.customChangeOutputs[0].amount, '900');
126
+ });
103
127
  });
104
128
  }
105
129
  describe('explainPsbt(Wasm)', function () {
106
130
  utxo_lib_1.testutil.AcidTest.suite().forEach((test) => describeTransactionWith(test));
107
131
  });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsOERBQWdEO0FBQ2hELG1EQUFnRDtBQUNoRCxnREFBNkQ7QUFHN0QseUVBQXVGO0FBRXZGLFNBQVMsa0JBQWtCLENBQUMsT0FBd0I7SUFDbEQsT0FBTyxDQUFDO1FBQ04sT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXO1FBQzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVztRQUM1QixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO0tBQ3ZCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxRQUEyQjtJQUMxRCxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDM0IsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksY0FBc0MsQ0FBQztRQUMzQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxjQUFjLEdBQUcsSUFBQSx5QkFBVyxFQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDdEYsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDLENBQUM7WUFDSCxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFO1lBQ3JELDhDQUE4QztZQUM5QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELGdCQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzlDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsQ0FBQztZQUNwQixNQUFNLFFBQVEsR0FBRyw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMvRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBbUIsQ0FBQztZQUN6RyxNQUFNLGVBQWUsR0FBRyxJQUFBLDZCQUFlLEVBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRTtnQkFDN0QsZ0JBQWdCLEVBQUU7b0JBQ2hCLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2lCQUM1RDthQUNGLENBQUMsQ0FBQztZQUVILEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsUUFBUSxHQUFHLEVBQUUsQ0FBQztvQkFDWixLQUFLLGNBQWMsQ0FBQztvQkFDcEIsS0FBSyxpQkFBaUIsQ0FBQztvQkFDdkIsS0FBSyxZQUFZO3dCQUNmLHlEQUF5RDt3QkFDekQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUM3QyxNQUFNO29CQUNSO3dCQUNFLGdCQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQ3ZFLE1BQU07Z0JBQ1YsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixtQkFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCwgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZXhwbGFpblBzYnQsIGV4cGxhaW5Qc2J0V2FzbSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdCc7XG5cbmZ1bmN0aW9uIGhhc1dhc21VdHhvU3VwcG9ydChuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBib29sZWFuIHtcbiAgcmV0dXJuICFbXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luY2FzaCxcbiAgICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5nb2xkLFxuICAgIHV0eG9saWIubmV0d29ya3MuZWNhc2gsXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy56Y2FzaCxcbiAgXS5pbmNsdWRlcyh1dHhvbGliLmdldE1haW5uZXQobmV0d29yaykpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVRyYW5zYWN0aW9uV2l0aChhY2lkVGVzdDogdGVzdHV0aWwuQWNpZFRlc3QpIHtcbiAgZGVzY3JpYmUoYCR7YWNpZFRlc3QubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnRCeXRlczogQnVmZmVyO1xuICAgIGxldCByZWZFeHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwc2J0ID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpO1xuICAgICAgcmVmRXhwbGFuYXRpb24gPSBleHBsYWluUHNidChwc2J0LCB7IHB1YnM6IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzIH0sIGFjaWRUZXN0Lm5ldHdvcmssIHtcbiAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBwc2J0Qnl0ZXMgPSBwc2J0LnRvQnVmZmVyKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIHRoZSBleHBlY3RlZCB2YWx1ZXMgZm9yIGV4cGxhaW5Qc2J0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gbm90ZTogYG91dHB1dHNgIG1lYW5zIGV4dGVybmFsIG91dHB1dHMgaGVyZVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZkV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZFeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCwgYWNpZFRlc3Qub3V0cHV0cy5sZW5ndGggLSAzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZFeHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsICcyNzAwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmRXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGgsIGFjaWRUZXN0Lm91dHB1dHMubGVuZ3RoIC0gMyk7XG4gICAgICByZWZFeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2hhbmdlLmFtb3VudCwgJzkwMCcpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGNoYW5nZS5hZGRyZXNzLCAnc3RyaW5nJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggZXhwbGFpblBzYnRXYXNtJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFoYXNXYXNtVXR4b1N1cHBvcnQoYWNpZFRlc3QubmV0d29yaykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2tpcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXR3b3JrTmFtZSA9IHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICBhc3NlcnQobmV0d29ya05hbWUpO1xuICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnRCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgY29uc3Qgd2FsbGV0WHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz47XG4gICAgICBjb25zdCB3YXNtRXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20od2FzbVBzYnQsIHdhbGxldFhwdWJzLCB7XG4gICAgICAgIHJlcGxheVByb3RlY3Rpb246IHtcbiAgICAgICAgICBvdXRwdXRTY3JpcHRzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvbk91dHB1dFNjcmlwdCgpXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZWZFeHBsYW5hdGlvbikpIHtcbiAgICAgICAgY29uc3QgcmVmVmFsdWUgPSByZWZFeHBsYW5hdGlvbltrZXldO1xuICAgICAgICBjb25zdCB3YXNtVmFsdWUgPSB3YXNtRXhwbGFuYXRpb25ba2V5XTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICBjYXNlICdkaXNwbGF5T3JkZXInOlxuICAgICAgICAgIGNhc2UgJ2lucHV0U2lnbmF0dXJlcyc6XG4gICAgICAgICAgY2FzZSAnc2lnbmF0dXJlcyc6XG4gICAgICAgICAgICAvLyB0aGVzZSBhcmUgZGVwcmVjYXRlZCBmaWVsZHMgdGhhdCB3ZSB3YW50IHRvIGdldCByaWQgb2ZcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwod2FzbVZhbHVlLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwod2FzbVZhbHVlLCByZWZWYWx1ZSwgYG1pc21hdGNoIGZvciBrZXkgJHtrZXl9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmUoJ2V4cGxhaW5Qc2J0KFdhc20pJywgZnVuY3Rpb24gKCkge1xuICB0ZXN0dXRpbC5BY2lkVGVzdC5zdWl0ZSgpLmZvckVhY2goKHRlc3QpID0+IGRlc2NyaWJlVHJhbnNhY3Rpb25XaXRoKHRlc3QpKTtcbn0pO1xuIl19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsOERBQWdEO0FBQ2hELG1EQUFnRDtBQUNoRCxnREFBNkQ7QUFHN0QseUVBQXVGO0FBRXZGLGlDQUE0QztBQUU1QyxTQUFTLHVCQUF1QixDQUFDLFFBQTJCO0lBQzFELFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMzQixJQUFJLElBQTRCLENBQUM7UUFDakMsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksV0FBMkIsQ0FBQztRQUNoQyxJQUFJLHVCQUFtRCxDQUFDO1FBQ3hELElBQUksUUFBcUMsQ0FBQztRQUMxQyxJQUFJLGNBQXNDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdCLGNBQWMsR0FBRyxJQUFBLHlCQUFXLEVBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUN0RixNQUFNLEVBQUUsSUFBSTthQUNiLENBQUMsQ0FBQztZQUNILFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BCLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUs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QyxlQUFlLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RSxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsUUFBUSxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLG1CQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQvc3RyaWN0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0LCBUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBleHBsYWluUHNidCwgZXhwbGFpblBzYnRXYXNtIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcblxuaW1wb3J0IHsgaGFzV2FzbVV0eG9TdXBwb3J0IH0gZnJvbSAnLi91dGlsJztcblxuZnVuY3Rpb24gZGVzY3JpYmVUcmFuc2FjdGlvbldpdGgoYWNpZFRlc3Q6IHRlc3R1dGlsLkFjaWRUZXN0KSB7XG4gIGRlc2NyaWJlKGAke2FjaWRUZXN0Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIGxldCBwc2J0Qnl0ZXM6IEJ1ZmZlcjtcbiAgICBsZXQgd2FsbGV0WHB1YnM6IFRyaXBsZTxzdHJpbmc+O1xuICAgIGxldCBjdXN0b21DaGFuZ2VXYWxsZXRYcHViczogVHJpcGxlPHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IHdhc21Qc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHJlZkV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgIGJlZm9yZSgncHJlcGFyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBzYnQgPSBhY2lkVGVzdC5jcmVhdGVQc2J0KCk7XG4gICAgICByZWZFeHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0KHBzYnQsIHsgcHViczogYWNpZFRlc3Qucm9vdFdhbGxldEtleXMgfSwgYWNpZFRlc3QubmV0d29yaywge1xuICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHBzYnRCeXRlcyA9IHBzYnQudG9CdWZmZXIoKTtcbiAgICAgIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShhY2lkVGVzdC5uZXR3b3JrKTtcbiAgICAgIGFzc2VydChuZXR3b3JrTmFtZSk7XG4gICAgICB3YWxsZXRYcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgIGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzID0gYWNpZFRlc3Qub3RoZXJXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgIGlmIChoYXNXYXNtVXR4b1N1cHBvcnQoYWNpZFRlc3QubmV0d29yaykpIHtcbiAgICAgICAgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnRCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCB0aGUgZXhwZWN0ZWQgdmFsdWVzIGZvciBleHBsYWluUHNidCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG5vdGU6IGBvdXRwdXRzYCBtZWFucyBleHRlcm5hbCBvdXRwdXRzIGhlcmVcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZFeHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmRXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGgsIGFjaWRUZXN0Lm91dHB1dHMubGVuZ3RoIC0gMyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmRXhwbGFuYXRpb24ub3V0cHV0QW1vdW50LCAnMTgwMCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZkV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCBhY2lkVGVzdC5vdXRwdXRzLmxlbmd0aCAtIDMpO1xuICAgICAgcmVmRXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5mb3JFYWNoKChjaGFuZ2UpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNoYW5nZS5hbW91bnQsICc5MDAnKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBjaGFuZ2UuYWRkcmVzcywgJ3N0cmluZycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHNob3VsZCBzdXBwb3J0IGN1c3RvbSBjaGFuZ2Ugb3V0cHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnQoXG4gICAgICAgIHBzYnQsXG4gICAgICAgIHsgcHViczogYWNpZFRlc3Qucm9vdFdhbGxldEtleXMsIGN1c3RvbUNoYW5nZVB1YnM6IGFjaWRUZXN0Lm90aGVyV2FsbGV0S2V5cyB9LFxuICAgICAgICBhY2lkVGVzdC5uZXR3b3JrLFxuICAgICAgICB7IHN0cmljdDogdHJ1ZSB9XG4gICAgICApO1xuICAgICAgYXNzZXJ0Lm9rKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoLCByZWZFeHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VzdG9tQ2hhbmdlRXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIHJlZkV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoIC0gMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VzdG9tQ2hhbmdlRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1c3RvbUNoYW5nZUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHNbMF0uYW1vdW50LCAnOTAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGV4cGxhaW5Qc2J0V2FzbScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghaGFzV2FzbVV0eG9TdXBwb3J0KGFjaWRUZXN0Lm5ldHdvcmspKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2FzbUV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnRXYXNtKHdhc21Qc2J0LCB3YWxsZXRYcHVicywge1xuICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICAgICAgb3V0cHV0U2NyaXB0czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25PdXRwdXRTY3JpcHQoKV0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVmRXhwbGFuYXRpb24pKSB7XG4gICAgICAgIGNvbnN0IHJlZlZhbHVlID0gcmVmRXhwbGFuYXRpb25ba2V5XTtcbiAgICAgICAgY29uc3Qgd2FzbVZhbHVlID0gd2FzbUV4cGxhbmF0aW9uW2tleV07XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgY2FzZSAnZGlzcGxheU9yZGVyJzpcbiAgICAgICAgICBjYXNlICdpbnB1dFNpZ25hdHVyZXMnOlxuICAgICAgICAgIGNhc2UgJ3NpZ25hdHVyZXMnOlxuICAgICAgICAgICAgLy8gdGhlc2UgYXJlIGRlcHJlY2F0ZWQgZmllbGRzIHRoYXQgd2Ugd2FudCB0byBnZXQgcmlkIG9mXG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21WYWx1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHdhc21WYWx1ZSwgcmVmVmFsdWUsIGBtaXNtYXRjaCBmb3Iga2V5ICR7a2V5fWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhY2lkVGVzdC5uZXR3b3JrICE9PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBleHRlbmRlZCB0ZXN0IHN1aXRlIGZvciBiaXRjb2luXG5cbiAgICBpdCgncmV0dXJucyBjdXN0b20gY2hhbmdlIG91dHB1dHMgd2hlbiBwYXJhbWV0ZXIgaXMgc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FzbUV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnRXYXNtKHdhc21Qc2J0LCB3YWxsZXRYcHVicywge1xuICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICAgICAgb3V0cHV0U2NyaXB0czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25PdXRwdXRTY3JpcHQoKV0sXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbUNoYW5nZVdhbGxldFhwdWJzLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQub2sod2FzbUV4cGxhbmF0aW9uLmN1c3RvbUNoYW5nZU91dHB1dHMpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh3YXNtRXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDIpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh3YXNtRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh3YXNtRXhwbGFuYXRpb24uY3VzdG9tQ2hhbmdlT3V0cHV0c1swXS5hbW91bnQsICc5MDAnKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmRlc2NyaWJlKCdleHBsYWluUHNidChXYXNtKScsIGZ1bmN0aW9uICgpIHtcbiAgdGVzdHV0aWwuQWNpZFRlc3Quc3VpdGUoKS5mb3JFYWNoKCh0ZXN0KSA9PiBkZXNjcmliZVRyYW5zYWN0aW9uV2l0aCh0ZXN0KSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parsePsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsePsbt.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/transaction/fixedScript/parsePsbt.ts"],"names":[],"mappings":""}
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const strict_1 = __importDefault(require("node:assert/strict"));
40
+ const sinon = __importStar(require("sinon"));
41
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
42
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
43
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
44
+ const parseTransaction_1 = require("../../../../src/transaction/fixedScript/parseTransaction");
45
+ const util_1 = require("../../util");
46
+ const fixedScript_1 = require("../../../../src/transaction/fixedScript");
47
+ const names_1 = require("../../../../src/names");
48
+ const util_2 = require("./util");
49
+ function getTxParamsFromExplanation(explanation, { externalCustomChangeAddress }) {
50
+ // The external outputs are the ones that are in outputs but not in changeOutputs
51
+ const changeAddresses = new Set(explanation.changeOutputs.map((o) => o.address));
52
+ let externalOutputs = explanation.outputs.filter((o) => o.address && !changeAddresses.has(o.address));
53
+ let changeAddress;
54
+ if (externalCustomChangeAddress) {
55
+ // convert an external output to a change output
56
+ //
57
+ // in combination with allowExternalChangeAddress, this allows an external
58
+ // output on the transaction without a size constraint
59
+ const externalOutput = externalOutputs[0];
60
+ if (!externalOutput) {
61
+ throw new Error('no external output found');
62
+ }
63
+ changeAddress = externalOutput.address;
64
+ externalOutputs = externalOutputs.slice(1);
65
+ }
66
+ return {
67
+ recipients: externalOutputs.map((output) => ({
68
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
69
+ address: output.address,
70
+ amount: output.amount,
71
+ })),
72
+ changeAddress,
73
+ };
74
+ }
75
+ function getChangeInfoFromPsbt(psbt) {
76
+ try {
77
+ return utxolib.bitgo.findInternalOutputIndices(psbt).map((i) => {
78
+ const output = psbt.data.outputs[i];
79
+ const derivations = output.bip32Derivation ?? output.tapBip32Derivation ?? undefined;
80
+ if (!derivations || derivations.length !== 3) {
81
+ throw new Error('expected 3 derivation paths');
82
+ }
83
+ const path = derivations[0].path;
84
+ const { chain, index } = utxolib.bitgo.getChainAndIndexFromPath(path);
85
+ return {
86
+ address: utxolib.address.fromOutputScript(psbt.txOutputs[i].script, psbt.network),
87
+ chain,
88
+ index,
89
+ };
90
+ });
91
+ }
92
+ catch (e) {
93
+ if (e instanceof utxolib.bitgo.ErrorNoMultiSigInputFound) {
94
+ return undefined;
95
+ }
96
+ throw e;
97
+ }
98
+ }
99
+ function describeParseTransactionWith(acidTest, label, backend, { txParams, externalCustomChangeAddress = false, expectedExplicitExternalSpendAmount, expectedImplicitExternalSpendAmount, txFormat = 'psbt', }) {
100
+ describe(`${acidTest.name}/${label}`, function () {
101
+ let refParsedTransaction;
102
+ let coin;
103
+ let mockWallet;
104
+ let stubExplainTransaction;
105
+ before('prepare', async function () {
106
+ const coinName = (0, names_1.getChainFromNetwork)(acidTest.network);
107
+ coin = (0, util_1.getUtxoCoin)(coinName);
108
+ // Create PSBT and explanation
109
+ const psbt = acidTest.createPsbt();
110
+ const tx = psbt.getUnsignedTx();
111
+ const txHash = tx.getId();
112
+ let explanation;
113
+ if (txFormat === 'psbt') {
114
+ if (backend === 'utxolib') {
115
+ explanation = (0, fixedScript_1.explainPsbt)(psbt, { pubs: acidTest.rootWalletKeys }, acidTest.network, {
116
+ strict: true,
117
+ });
118
+ }
119
+ else if (backend === 'wasm') {
120
+ const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.toBuffer(), utxolib.getNetworkName(acidTest.network));
121
+ explanation = (0, fixedScript_1.explainPsbtWasm)(wasmPsbt, acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58()), {
122
+ replayProtection: {
123
+ outputScripts: [acidTest.getReplayProtectionOutputScript()],
124
+ },
125
+ });
126
+ }
127
+ else {
128
+ throw new Error(`Invalid backend: ${backend}`);
129
+ }
130
+ }
131
+ else if (txFormat === 'legacy') {
132
+ const pubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
133
+ // Extract change info from PSBT to pass to explainLegacyTx
134
+ const changeInfo = getChangeInfoFromPsbt(psbt);
135
+ explanation = (0, fixedScript_1.explainLegacyTx)(tx, { pubs, changeInfo }, acidTest.network);
136
+ }
137
+ else {
138
+ throw new Error(`Invalid txFormat: ${txFormat}`);
139
+ }
140
+ // Determine txParams
141
+ let resolvedTxParams;
142
+ if (txParams === 'inferFromExplanation' || txParams === undefined) {
143
+ resolvedTxParams = getTxParamsFromExplanation(explanation, { externalCustomChangeAddress });
144
+ }
145
+ else if ('rbfTxIds' in txParams) {
146
+ // Replace placeholder txHash with actual computed txHash
147
+ resolvedTxParams = {
148
+ rbfTxIds: txParams.rbfTxIds.map((hash) => (hash === 'PLACEHOLDER' ? txHash : hash)),
149
+ };
150
+ }
151
+ else {
152
+ resolvedTxParams = txParams;
153
+ }
154
+ if (externalCustomChangeAddress) {
155
+ resolvedTxParams.allowExternalChangeAddress = true;
156
+ }
157
+ // Create mock wallet
158
+ mockWallet = sinon.createStubInstance(sdk_core_1.Wallet);
159
+ mockWallet.id.returns('test-wallet-id');
160
+ mockWallet.coin.returns(coin.getChain());
161
+ mockWallet.coinSpecific.returns(undefined);
162
+ // Mock getTransaction for RBF case
163
+ if ('rbfTxIds' in resolvedTxParams) {
164
+ const rbfTxParams = getTxParamsFromExplanation(explanation, { externalCustomChangeAddress: false });
165
+ mockWallet.getTransaction.resolves({
166
+ outputs: rbfTxParams.recipients.map((r) => ({
167
+ valueString: typeof r.amount === 'string' ? r.amount : r.amount.toString(),
168
+ address: r.address,
169
+ // wallet field is undefined for external outputs (not self-sends)
170
+ })),
171
+ });
172
+ }
173
+ // Mock verification options with keychains to disable networking
174
+ // Use the same keychains that were used to create the PSBT
175
+ const pubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
176
+ const verification = {
177
+ disableNetworking: true,
178
+ keychains: {
179
+ user: { id: '0', pub: pubs[0], type: 'independent' },
180
+ backup: { id: '1', pub: pubs[1], type: 'independent' },
181
+ bitgo: { id: '2', pub: pubs[2], type: 'independent' },
182
+ },
183
+ };
184
+ // Stub explainTransaction to return the explanation without making network calls
185
+ stubExplainTransaction = sinon.stub(coin, 'explainTransaction').resolves(explanation);
186
+ let txPrebuild;
187
+ if (txFormat === 'psbt') {
188
+ txPrebuild = {
189
+ txHex: psbt.toHex(),
190
+ };
191
+ }
192
+ else if (txFormat === 'legacy') {
193
+ txPrebuild = {
194
+ txHex: psbt.getUnsignedTx().toHex(),
195
+ };
196
+ }
197
+ else {
198
+ throw new Error(`Invalid txFormat: ${txFormat}`);
199
+ }
200
+ refParsedTransaction = await (0, parseTransaction_1.parseTransaction)(coin, {
201
+ wallet: mockWallet,
202
+ txParams: resolvedTxParams,
203
+ txPrebuild,
204
+ verification,
205
+ });
206
+ });
207
+ after('cleanup', function () {
208
+ if (stubExplainTransaction) {
209
+ stubExplainTransaction.restore();
210
+ }
211
+ });
212
+ it('should parse transaction without network calls', function () {
213
+ strict_1.default.ok(refParsedTransaction);
214
+ strict_1.default.ok(refParsedTransaction.keychains);
215
+ strict_1.default.ok(refParsedTransaction.outputs);
216
+ });
217
+ it('should have valid keychains', function () {
218
+ strict_1.default.ok(refParsedTransaction.keychains.user);
219
+ strict_1.default.ok(refParsedTransaction.keychains.backup);
220
+ strict_1.default.ok(refParsedTransaction.keychains.bitgo);
221
+ const pubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
222
+ strict_1.default.strictEqual(refParsedTransaction.keychains.user.pub, pubs[0]);
223
+ strict_1.default.strictEqual(refParsedTransaction.keychains.backup.pub, pubs[1]);
224
+ strict_1.default.strictEqual(refParsedTransaction.keychains.bitgo.pub, pubs[2]);
225
+ });
226
+ it('should have outputs classified as internal or external', function () {
227
+ // Since we didn't specify any recipients, outputs will be classified based on whether they can be
228
+ // verified as wallet addresses. Some may be external if address verification fails without a proper wallet setup.
229
+ const totalOutputs = refParsedTransaction.outputs.length;
230
+ const changeOutputs = refParsedTransaction.changeOutputs.length;
231
+ const externalOutputs = refParsedTransaction.outputs.filter((o) => o.external === true).length;
232
+ strict_1.default.strictEqual(externalOutputs, 3);
233
+ strict_1.default.ok(totalOutputs > 0, 'should have at least one output');
234
+ strict_1.default.strictEqual(changeOutputs + externalOutputs, totalOutputs, 'all outputs should be classified');
235
+ });
236
+ it('should have expected explicit and implicit external spend amounts', function () {
237
+ strict_1.default.strictEqual(BigInt(refParsedTransaction.explicitExternalSpendAmount), expectedExplicitExternalSpendAmount);
238
+ strict_1.default.strictEqual(BigInt(refParsedTransaction.implicitExternalSpendAmount), expectedImplicitExternalSpendAmount);
239
+ });
240
+ });
241
+ }
242
+ function describeTransaction(backend, filter = () => true) {
243
+ describe(`parseTransaction (${backend})`, function () {
244
+ utxolib.testutil.AcidTest.suite()
245
+ .filter(filter)
246
+ .forEach((test) => {
247
+ // Default case: psbt format, infer recipients from explanation
248
+ describeParseTransactionWith(test, 'default', backend, {
249
+ txParams: 'inferFromExplanation',
250
+ expectedExplicitExternalSpendAmount: 1800n,
251
+ expectedImplicitExternalSpendAmount: 0n,
252
+ });
253
+ if (test.network !== utxolib.networks.bitcoin) {
254
+ return;
255
+ }
256
+ // extended test suite for bitcoin
257
+ describeParseTransactionWith(test, 'legacy', backend, {
258
+ txFormat: 'legacy',
259
+ txParams: 'inferFromExplanation',
260
+ expectedExplicitExternalSpendAmount: 1800n,
261
+ expectedImplicitExternalSpendAmount: 0n,
262
+ });
263
+ describeParseTransactionWith(test, 'empty recipients', backend, {
264
+ txParams: {
265
+ recipients: [],
266
+ },
267
+ expectedExplicitExternalSpendAmount: 0n,
268
+ expectedImplicitExternalSpendAmount: 1800n,
269
+ });
270
+ describeParseTransactionWith(test, 'rbf', backend, {
271
+ txParams: {
272
+ rbfTxIds: ['PLACEHOLDER'],
273
+ },
274
+ expectedExplicitExternalSpendAmount: 1800n,
275
+ expectedImplicitExternalSpendAmount: 0n,
276
+ });
277
+ describeParseTransactionWith(test, 'allowExternalChangeAddress', backend, {
278
+ txParams: 'inferFromExplanation',
279
+ externalCustomChangeAddress: true,
280
+ expectedExplicitExternalSpendAmount: 1800n,
281
+ expectedImplicitExternalSpendAmount: 0n,
282
+ });
283
+ });
284
+ });
285
+ }
286
+ describeTransaction('utxolib');
287
+ describeTransaction('wasm', (test) => (0, util_2.hasWasmUtxoSupport)(test.network));
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2Q0FBK0I7QUFDL0IsOERBQWdEO0FBQ2hELG1EQUFrRztBQUNsRyxnREFBcUQ7QUFFckQsK0ZBQTRGO0FBRzVGLHFDQUF5QztBQUN6Qyx5RUFBd0c7QUFLeEcsaURBQTREO0FBRzVELGlDQUE0QztBQUU1QyxTQUFTLDBCQUEwQixDQUNqQyxXQUFtQyxFQUNuQyxFQUFFLDJCQUEyQixFQUE0QztJQUt6RSxpRkFBaUY7SUFDakYsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLElBQUksZUFBZSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUV0RyxJQUFJLGFBQWlDLENBQUM7SUFDdEMsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO1FBQ2hDLGdEQUFnRDtRQUNoRCxFQUFFO1FBQ0YsMEVBQTBFO1FBQzFFLHNEQUFzRDtRQUN0RCxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsYUFBYSxH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O0FBQ0wsQ0FBQztBQUVELG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBQSx5QkFBa0IsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQvc3RyaWN0JztcblxuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBXYWxsZXQsIFZlcmlmaWNhdGlvbk9wdGlvbnMsIElUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJpcGxlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgcGFyc2VUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3R5cGVzJztcbmltcG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvd2FsbGV0JztcbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBleHBsYWluTGVnYWN5VHgsIGV4cGxhaW5Qc2J0LCBleHBsYWluUHNidFdhc20gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQnO1xuaW1wb3J0IHR5cGUge1xuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBDaGFuZ2VBZGRyZXNzSW5mbyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXRDaGFpbkZyb21OZXR3b3JrIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUHJlYnVpbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYWJzdHJhY3RVdHhvQ29pbic7XG5cbmltcG9ydCB7IGhhc1dhc21VdHhvU3VwcG9ydCB9IGZyb20gJy4vdXRpbCc7XG5cbmZ1bmN0aW9uIGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKFxuICBleHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgfTogeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IGJvb2xlYW4gfVxuKToge1xuICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgY2hhbmdlQWRkcmVzcz86IHN0cmluZztcbn0ge1xuICAvLyBUaGUgZXh0ZXJuYWwgb3V0cHV0cyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW4gb3V0cHV0cyBidXQgbm90IGluIGNoYW5nZU91dHB1dHNcbiAgY29uc3QgY2hhbmdlQWRkcmVzc2VzID0gbmV3IFNldChleHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLm1hcCgobykgPT4gby5hZGRyZXNzKSk7XG4gIGxldCBleHRlcm5hbE91dHB1dHMgPSBleHBsYW5hdGlvbi5vdXRwdXRzLmZpbHRlcigobykgPT4gby5hZGRyZXNzICYmICFjaGFuZ2VBZGRyZXNzZXMuaGFzKG8uYWRkcmVzcykpO1xuXG4gIGxldCBjaGFuZ2VBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MpIHtcbiAgICAvLyBjb252ZXJ0IGFuIGV4dGVybmFsIG91dHB1dCB0byBhIGNoYW5nZSBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGluIGNvbWJpbmF0aW9uIHdpdGggYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3MsIHRoaXMgYWxsb3dzIGFuIGV4dGVybmFsXG4gICAgLy8gb3V0cHV0IG9uIHRoZSB0cmFuc2FjdGlvbiB3aXRob3V0IGEgc2l6ZSBjb25zdHJhaW50XG4gICAgY29uc3QgZXh0ZXJuYWxPdXRwdXQgPSBleHRlcm5hbE91dHB1dHNbMF07XG4gICAgaWYgKCFleHRlcm5hbE91dHB1dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBleHRlcm5hbCBvdXRwdXQgZm91bmQnKTtcbiAgICB9XG4gICAgY2hhbmdlQWRkcmVzcyA9IGV4dGVybmFsT3V0cHV0LmFkZHJlc3M7XG4gICAgZXh0ZXJuYWxPdXRwdXRzID0gZXh0ZXJuYWxPdXRwdXRzLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZWNpcGllbnRzOiBleHRlcm5hbE91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MhLFxuICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LFxuICAgIH0pKSxcbiAgICBjaGFuZ2VBZGRyZXNzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDaGFuZ2VJbmZvRnJvbVBzYnQocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCk6IENoYW5nZUFkZHJlc3NJbmZvW10gfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmZpbmRJbnRlcm5hbE91dHB1dEluZGljZXMocHNidCkubWFwKChpKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBwc2J0LmRhdGEub3V0cHV0c1tpXTtcbiAgICAgIGNvbnN0IGRlcml2YXRpb25zID0gb3V0cHV0LmJpcDMyRGVyaXZhdGlvbiA/PyBvdXRwdXQudGFwQmlwMzJEZXJpdmF0aW9uID8/IHVuZGVmaW5lZDtcbiAgICAgIGlmICghZGVyaXZhdGlvbnMgfHwgZGVyaXZhdGlvbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgMyBkZXJpdmF0aW9uIHBhdGhzJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXRoID0gZGVyaXZhdGlvbnNbMF0ucGF0aDtcbiAgICAgIGNvbnN0IHsgY2hhaW4sIGluZGV4IH0gPSB1dHhvbGliLmJpdGdvLmdldENoYWluQW5kSW5kZXhGcm9tUGF0aChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHBzYnQudHhPdXRwdXRzW2ldLnNjcmlwdCwgcHNidC5uZXR3b3JrKSxcbiAgICAgICAgY2hhaW4sXG4gICAgICAgIGluZGV4LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5FcnJvck5vTXVsdGlTaWdJbnB1dEZvdW5kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgoXG4gIGFjaWRUZXN0OiB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LFxuICBsYWJlbDogc3RyaW5nLFxuICBiYWNrZW5kOiAndXR4b2xpYicgfCAnd2FzbScsXG4gIHtcbiAgICB0eFBhcmFtcyxcbiAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgPSBmYWxzZSxcbiAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICB0eEZvcm1hdCA9ICdwc2J0JyxcbiAgfToge1xuICAgIHR4UGFyYW1zOlxuICAgICAgfCB7XG4gICAgICAgICAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHJiZlR4SWRzOiBzdHJpbmdbXTtcbiAgICAgICAgfVxuICAgICAgfCAnaW5mZXJGcm9tRXhwbGFuYXRpb24nO1xuICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IGJpZ2ludDtcbiAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogYmlnaW50O1xuICAgIHR4Rm9ybWF0PzogJ3BzYnQnIHwgJ2xlZ2FjeSc7XG4gIH1cbikge1xuICBkZXNjcmliZShgJHthY2lkVGVzdC5uYW1lfS8ke2xhYmVsfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcmVmUGFyc2VkVHJhbnNhY3Rpb246IFBhcnNlZFRyYW5zYWN0aW9uPGJpZ2ludD47XG4gICAgbGV0IGNvaW46IFJldHVyblR5cGU8dHlwZW9mIGdldFV0eG9Db2luPjtcbiAgICBsZXQgbW9ja1dhbGxldDogc2lub24uU2lub25TdHViYmVkSW5zdGFuY2U8V2FsbGV0PjtcbiAgICBsZXQgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbjogc2lub24uU2lub25TdHViO1xuXG4gICAgYmVmb3JlKCdwcmVwYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29pbk5hbWUgPSBnZXRDaGFpbkZyb21OZXR3b3JrKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgY29pbiA9IGdldFV0eG9Db2luKGNvaW5OYW1lKTtcblxuICAgICAgLy8gQ3JlYXRlIFBTQlQgYW5kIGV4cGxhbmF0aW9uXG4gICAgICBjb25zdCBwc2J0ID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpO1xuICAgICAgY29uc3QgdHggPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcbiAgICAgIGNvbnN0IHR4SGFzaCA9IHR4LmdldElkKCk7XG5cbiAgICAgIGxldCBleHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGlmICh0eEZvcm1hdCA9PT0gJ3BzYnQnKSB7XG4gICAgICAgIGlmIChiYWNrZW5kID09PSAndXR4b2xpYicpIHtcbiAgICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0KHBzYnQsIHsgcHViczogYWNpZFRlc3Qucm9vdFdhbGxldEtleXMgfSwgYWNpZFRlc3QubmV0d29yaywge1xuICAgICAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGJhY2tlbmQgPT09ICd3YXNtJykge1xuICAgICAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhcbiAgICAgICAgICAgIHBzYnQudG9CdWZmZXIoKSxcbiAgICAgICAgICAgIHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yaykhXG4gICAgICAgICAgKTtcbiAgICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0V2FzbShcbiAgICAgICAgICAgIHdhc21Qc2J0LFxuICAgICAgICAgICAgYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgb3V0cHV0U2NyaXB0czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25PdXRwdXRTY3JpcHQoKV0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYmFja2VuZDogJHtiYWNrZW5kfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR4Rm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgICBjb25zdCBwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgICAvLyBFeHRyYWN0IGNoYW5nZSBpbmZvIGZyb20gUFNCVCB0byBwYXNzIHRvIGV4cGxhaW5MZWdhY3lUeFxuICAgICAgICBjb25zdCBjaGFuZ2VJbmZvID0gZ2V0Q2hhbmdlSW5mb0Zyb21Qc2J0KHBzYnQpO1xuICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW5MZWdhY3lUeCh0eCwgeyBwdWJzLCBjaGFuZ2VJbmZvIH0sIGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR4Rm9ybWF0OiAke3R4Rm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgdHhQYXJhbXNcbiAgICAgIGxldCByZXNvbHZlZFR4UGFyYW1zO1xuICAgICAgaWYgKHR4UGFyYW1zID09PSAnaW5mZXJGcm9tRXhwbGFuYXRpb24nIHx8IHR4UGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKGV4cGxhbmF0aW9uLCB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcyB9KTtcbiAgICAgIH0gZWxzZSBpZiAoJ3JiZlR4SWRzJyBpbiB0eFBhcmFtcykge1xuICAgICAgICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVyIHR4SGFzaCB3aXRoIGFjdHVhbCBjb21wdXRlZCB0eEhhc2hcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IHtcbiAgICAgICAgICByYmZUeElkczogdHhQYXJhbXMucmJmVHhJZHMubWFwKChoYXNoKSA9PiAoaGFzaCA9PT0gJ1BMQUNFSE9MREVSJyA/IHR4SGFzaCA6IGhhc2gpKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSB0eFBhcmFtcztcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcykge1xuICAgICAgICByZXNvbHZlZFR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG1vY2sgd2FsbGV0XG4gICAgICBtb2NrV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCk7XG4gICAgICBtb2NrV2FsbGV0LmlkLnJldHVybnMoJ3Rlc3Qtd2FsbGV0LWlkJyk7XG4gICAgICBtb2NrV2FsbGV0LmNvaW4ucmV0dXJucyhjb2luLmdldENoYWluKCkpO1xuICAgICAgbW9ja1dhbGxldC5jb2luU3BlY2lmaWMucmV0dXJucyh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBNb2NrIGdldFRyYW5zYWN0aW9uIGZvciBSQkYgY2FzZVxuICAgICAgaWYgKCdyYmZUeElkcycgaW4gcmVzb2x2ZWRUeFBhcmFtcykge1xuICAgICAgICBjb25zdCByYmZUeFBhcmFtcyA9IGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKGV4cGxhbmF0aW9uLCB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogZmFsc2UgfSk7XG4gICAgICAgIG1vY2tXYWxsZXQuZ2V0VHJhbnNhY3Rpb24ucmVzb2x2ZXMoe1xuICAgICAgICAgIG91dHB1dHM6IHJiZlR4UGFyYW1zLnJlY2lwaWVudHMubWFwKChyKSA9PiAoe1xuICAgICAgICAgICAgdmFsdWVTdHJpbmc6IHR5cGVvZiByLmFtb3VudCA9PT0gJ3N0cmluZycgPyByLmFtb3VudCA6IHIuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhZGRyZXNzOiByLmFkZHJlc3MsXG4gICAgICAgICAgICAvLyB3YWxsZXQgZmllbGQgaXMgdW5kZWZpbmVkIGZvciBleHRlcm5hbCBvdXRwdXRzIChub3Qgc2VsZi1zZW5kcylcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBNb2NrIHZlcmlmaWNhdGlvbiBvcHRpb25zIHdpdGgga2V5Y2hhaW5zIHRvIGRpc2FibGUgbmV0d29ya2luZ1xuICAgICAgLy8gVXNlIHRoZSBzYW1lIGtleWNoYWlucyB0aGF0IHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIFBTQlRcbiAgICAgIGNvbnN0IHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb246IFZlcmlmaWNhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGRpc2FibGVOZXR3b3JraW5nOiB0cnVlLFxuICAgICAgICBrZXljaGFpbnM6IHtcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnMCcsIHB1YjogcHVic1swXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgICAgIGJhY2t1cDogeyBpZDogJzEnLCBwdWI6IHB1YnNbMV0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgICBiaXRnbzogeyBpZDogJzInLCBwdWI6IHB1YnNbMl0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgZXhwbGFpblRyYW5zYWN0aW9uIHRvIHJldHVybiB0aGUgZXhwbGFuYXRpb24gd2l0aG91dCBtYWtpbmcgbmV0d29yayBjYWxsc1xuICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbiA9IHNpbm9uLnN0dWIoY29pbiwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpLnJlc29sdmVzKGV4cGxhbmF0aW9uKTtcblxuICAgICAgbGV0IHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8YmlnaW50PjtcbiAgICAgIGlmICh0eEZvcm1hdCA9PT0gJ3BzYnQnKSB7XG4gICAgICAgIHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgdHhIZXg6IHBzYnQudG9IZXgoKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHhGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgdHhIZXg6IHBzYnQuZ2V0VW5zaWduZWRUeCgpLnRvSGV4KCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHhGb3JtYXQ6ICR7dHhGb3JtYXR9YCk7XG4gICAgICB9XG5cbiAgICAgIHJlZlBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgcGFyc2VUcmFuc2FjdGlvbihjb2luLCB7XG4gICAgICAgIHdhbGxldDogbW9ja1dhbGxldCBhcyB1bmtub3duIGFzIFV0eG9XYWxsZXQsXG4gICAgICAgIHR4UGFyYW1zOiByZXNvbHZlZFR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyKCdjbGVhbnVwJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHN0dWJFeHBsYWluVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbi5yZXN0b3JlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHRyYW5zYWN0aW9uIHdpdGhvdXQgbmV0d29yayBjYWxscycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB2YWxpZCBrZXljaGFpbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLnVzZXIpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iYWNrdXApO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iaXRnbyk7XG4gICAgICBjb25zdCBwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy51c2VyLnB1YiwgcHVic1swXSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJhY2t1cC5wdWIsIHB1YnNbMV0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iaXRnby5wdWIsIHB1YnNbMl0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIG91dHB1dHMgY2xhc3NpZmllZCBhcyBpbnRlcm5hbCBvciBleHRlcm5hbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRpZG4ndCBzcGVjaWZ5IGFueSByZWNpcGllbnRzLCBvdXRwdXRzIHdpbGwgYmUgY2xhc3NpZmllZCBiYXNlZCBvbiB3aGV0aGVyIHRoZXkgY2FuIGJlXG4gICAgICAvLyB2ZXJpZmllZCBhcyB3YWxsZXQgYWRkcmVzc2VzLiBTb21lIG1heSBiZSBleHRlcm5hbCBpZiBhZGRyZXNzIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRob3V0IGEgcHJvcGVyIHdhbGxldCBzZXR1cC5cbiAgICAgIGNvbnN0IHRvdGFsT3V0cHV0cyA9IHJlZlBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHMubGVuZ3RoO1xuICAgICAgY29uc3QgY2hhbmdlT3V0cHV0cyA9IHJlZlBhcnNlZFRyYW5zYWN0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoO1xuICAgICAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzID0gcmVmUGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uZXh0ZXJuYWwgPT09IHRydWUpLmxlbmd0aDtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHRlcm5hbE91dHB1dHMsIDMpO1xuXG4gICAgICBhc3NlcnQub2sodG90YWxPdXRwdXRzID4gMCwgJ3Nob3VsZCBoYXZlIGF0IGxlYXN0IG9uZSBvdXRwdXQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjaGFuZ2VPdXRwdXRzICsgZXh0ZXJuYWxPdXRwdXRzLCB0b3RhbE91dHB1dHMsICdhbGwgb3V0cHV0cyBzaG91bGQgYmUgY2xhc3NpZmllZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGV4cGVjdGVkIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBleHRlcm5hbCBzcGVuZCBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJpZ0ludChyZWZQYXJzZWRUcmFuc2FjdGlvbi5leHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpLCBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQmlnSW50KHJlZlBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCksIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVHJhbnNhY3Rpb24oXG4gIGJhY2tlbmQ6ICd1dHhvbGliJyB8ICd3YXNtJyxcbiAgZmlsdGVyOiAodGVzdDogdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdCkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWVcbikge1xuICBkZXNjcmliZShgcGFyc2VUcmFuc2FjdGlvbiAoJHtiYWNrZW5kfSlgLCBmdW5jdGlvbiAoKSB7XG4gICAgdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdC5zdWl0ZSgpXG4gICAgICAuZmlsdGVyKGZpbHRlcilcbiAgICAgIC5mb3JFYWNoKCh0ZXN0KSA9PiB7XG4gICAgICAgIC8vIERlZmF1bHQgY2FzZTogcHNidCBmb3JtYXQsIGluZmVyIHJlY2lwaWVudHMgZnJvbSBleHBsYW5hdGlvblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdkZWZhdWx0JywgYmFja2VuZCwge1xuICAgICAgICAgIHR4UGFyYW1zOiAnaW5mZXJGcm9tRXhwbGFuYXRpb24nLFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXN0Lm5ldHdvcmsgIT09IHV0eG9saWIubmV0d29ya3MuYml0Y29pbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHRlbmRlZCB0ZXN0IHN1aXRlIGZvciBiaXRjb2luXG5cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnbGVnYWN5JywgYmFja2VuZCwge1xuICAgICAgICAgIHR4Rm9ybWF0OiAnbGVnYWN5JyxcbiAgICAgICAgICB0eFBhcmFtczogJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdlbXB0eSByZWNpcGllbnRzJywgYmFja2VuZCwge1xuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ3JiZicsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgcmJmVHhJZHM6IFsnUExBQ0VIT0xERVInXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2FsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzJywgYmFja2VuZCwge1xuICAgICAgICAgIHR4UGFyYW1zOiAnaW5mZXJGcm9tRXhwbGFuYXRpb24nLFxuICAgICAgICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmVUcmFuc2FjdGlvbigndXR4b2xpYicpO1xuZGVzY3JpYmVUcmFuc2FjdGlvbignd2FzbScsICh0ZXN0KSA9PiBoYXNXYXNtVXR4b1N1cHBvcnQodGVzdC5uZXR3b3JrKSk7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ export declare function hasWasmUtxoSupport(network: utxolib.Network): boolean;
3
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/transaction/fixedScript/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAOpE"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.hasWasmUtxoSupport = hasWasmUtxoSupport;
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ function hasWasmUtxoSupport(network) {
39
+ return ![
40
+ utxolib.networks.bitcoincash,
41
+ utxolib.networks.bitcoingold,
42
+ utxolib.networks.ecash,
43
+ utxolib.networks.zcash,
44
+ ].includes(utxolib.getMainnet(network));
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsZ0RBT0M7QUFURCw4REFBZ0Q7QUFFaEQsU0FBZ0Isa0JBQWtCLENBQUMsT0FBd0I7SUFDekQsT0FBTyxDQUFDO1FBQ04sT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXO1FBQzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVztRQUM1QixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO0tBQ3ZCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNXYXNtVXR4b1N1cHBvcnQobmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogYm9vbGVhbiB7XG4gIHJldHVybiAhW1xuICAgIHV0eG9saWIubmV0d29ya3MuYml0Y29pbmNhc2gsXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luZ29sZCxcbiAgICB1dHhvbGliLm5ldHdvcmtzLmVjYXNoLFxuICAgIHV0eG9saWIubmV0d29ya3MuemNhc2gsXG4gIF0uaW5jbHVkZXModXR4b2xpYi5nZXRNYWlubmV0KG5ldHdvcmspKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"txFormat.d.ts","sourceRoot":"","sources":["../../../../test/unit/txFormat.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIvD,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAC/E,KAAK,aAAa,GAAG,oBAAoB,CAAC;AAC1C,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CASzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAS5F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAEpH"}
1
+ {"version":3,"file":"txFormat.d.ts","sourceRoot":"","sources":["../../../../test/unit/txFormat.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAA2B,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIhF,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAC/E,KAAK,aAAa,GAAG,oBAAoB,CAAC;AAC1C,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,CASzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAS5F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAEpH"}