@bitgo/abstract-utxo 12.7.0 → 13.0.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 (64) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  2. package/dist/cjs/src/abstractUtxoCoin.js +3 -3
  3. package/dist/cjs/src/impl/zec/address.d.ts +6 -0
  4. package/dist/cjs/src/impl/zec/address.d.ts.map +1 -1
  5. package/dist/cjs/src/impl/zec/address.js +38 -1
  6. package/dist/cjs/src/impl/zec/recipients.d.ts +2 -1
  7. package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -1
  8. package/dist/cjs/src/impl/zec/recipients.js +7 -3
  9. package/dist/cjs/src/impl/zec/types.d.ts +5 -0
  10. package/dist/cjs/src/impl/zec/types.d.ts.map +1 -1
  11. package/dist/cjs/src/impl/zec/types.js +1 -1
  12. package/dist/cjs/src/impl/zec/zec.d.ts +21 -2
  13. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  14. package/dist/cjs/src/impl/zec/zec.js +57 -1
  15. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  16. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  17. package/dist/cjs/src/transaction/explainTransaction.js +3 -2
  18. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  19. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  20. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +4 -1
  21. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  22. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +9 -3
  23. package/dist/cjs/src/transaction/recipient.d.ts +24 -1
  24. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  25. package/dist/cjs/src/transaction/recipient.js +32 -4
  26. package/dist/cjs/test/unit/bip322.js +14 -4
  27. package/dist/cjs/test/unit/customChangeWallet.js +3 -1
  28. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts +2 -0
  29. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts.map +1 -0
  30. package/dist/cjs/test/unit/impl/zec/psbtDecode.js +69 -0
  31. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts +2 -0
  32. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts.map +1 -0
  33. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.js +329 -0
  34. package/dist/cjs/test/unit/impl/zec/unit/address.js +23 -1
  35. package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +7 -5
  36. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +9 -1
  37. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -1
  38. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  39. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  40. package/dist/esm/abstractUtxoCoin.js +3 -3
  41. package/dist/esm/impl/zec/address.d.ts +6 -0
  42. package/dist/esm/impl/zec/address.d.ts.map +1 -1
  43. package/dist/esm/impl/zec/address.js +38 -1
  44. package/dist/esm/impl/zec/recipients.d.ts +2 -1
  45. package/dist/esm/impl/zec/recipients.d.ts.map +1 -1
  46. package/dist/esm/impl/zec/recipients.js +7 -3
  47. package/dist/esm/impl/zec/types.d.ts +5 -0
  48. package/dist/esm/impl/zec/types.d.ts.map +1 -1
  49. package/dist/esm/impl/zec/types.js +1 -1
  50. package/dist/esm/impl/zec/zec.d.ts +21 -2
  51. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  52. package/dist/esm/impl/zec/zec.js +57 -1
  53. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  54. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  55. package/dist/esm/transaction/explainTransaction.js +3 -2
  56. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  57. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  58. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +4 -1
  59. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  60. package/dist/esm/transaction/fixedScript/parseTransaction.js +9 -3
  61. package/dist/esm/transaction/recipient.d.ts +24 -1
  62. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  63. package/dist/esm/transaction/recipient.js +32 -4
  64. package/package.json +6 -6
@@ -63,6 +63,7 @@ function toExpectedOutputs(addressCodec, txParams) {
63
63
  {
64
64
  script: addressCodec.fromExtendedAddressFormatToScript(output.address),
65
65
  value: output.amount === 'max' ? 'max' : BigInt(output.amount),
66
+ address: output.address,
66
67
  },
67
68
  ];
68
69
  });
@@ -74,6 +75,7 @@ function toExpectedOutputs(addressCodec, txParams) {
74
75
  value: 'max',
75
76
  // Note that the change output is not required to exist, so we mark it as optional.
76
77
  optional: true,
78
+ address: txParams.changeAddress,
77
79
  });
78
80
  }
79
81
  return expectedOutputs;
@@ -178,9 +180,13 @@ async function parseTransaction(coin, params, addressCodec = coin.addressCodec)
178
180
  const changeOutputs = lodash_1.default.filter(allOutputDetails, { external: false });
179
181
  function toComparableOutputsWithExternal(outputs) {
180
182
  return outputs.map((output) => ({
181
- script: addressCodec.fromExtendedAddressFormatToScript(output.address),
183
+ // Change/custom-change outputs are always transparent wallet addresses.
184
+ script: output.external
185
+ ? addressCodec.fromExtendedAddressFormatToScript(output.address)
186
+ : Buffer.from(addressCodec.decodeChangeAddress(output.address)),
182
187
  value: output.amount === 'max' ? 'max' : BigInt(output.amount),
183
188
  external: output.external,
189
+ address: output.address,
184
190
  }));
185
191
  }
186
192
  const missingOutputs = (0, outputDifference_1.outputDifference)(expectedOutputs, toComparableOutputsWithExternal(allOutputs));
@@ -206,7 +212,7 @@ async function parseTransaction(coin, params, addressCodec = coin.addressCodec)
206
212
  const implicitExternalSpendAmount = (0, tnumber_1.toTNumber)(implicitExternalOutputs.reduce((sum, o) => sum + BigInt(o.value), BigInt(0)), coin.amountType);
207
213
  function toOutputs(outputs) {
208
214
  return outputs.map((output) => ({
209
- address: addressCodec.toExtendedAddressFormat(output.script),
215
+ address: addressCodec.toExtendedAddressFormat(output.script, output.address),
210
216
  amount: output.value.toString(),
211
217
  external: output.external,
212
218
  }));
@@ -225,4 +231,4 @@ async function parseTransaction(coin, params, addressCodec = coin.addressCodec)
225
231
  customChange,
226
232
  };
227
233
  }
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBdUlBLDRDQThLQztBQXJURCxvREFBNEI7QUFFNUIsb0RBQXVCO0FBQ3ZCLDhDQUF5RztBQUl6RywrQ0FPeUI7QUFDekIsK0NBQXFEO0FBQ3JELDRDQUE0QztBQUM1QywwREFBeUY7QUFDekYsMkNBQTBDO0FBRzFDLCtDQUFpRTtBQU1qRSxTQUFTLCtCQUErQixDQUN0QyxJQUFzQixFQUN0QixNQUFpRDtJQUtqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLHdCQUFZLENBQUMsK0JBQStCLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDOUMsSUFBSSx3QkFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ3BFLENBQUM7QUFFRCxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLElBQXNCLEVBQ3RCLE1BQXdDLEVBQ3hDLGVBQTZCLElBQUksQ0FBQyxZQUFZO0lBRTlDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRXBDLElB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QU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BGLElBQUksQ0FBQyxVQUFVLENBQ0wsQ0FBQztJQUViLFNBQVMsU0FBUyxDQUFDLE9BQTBFO1FBQzNGLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QixPQUFPLEVBQUUsWUFBWSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDNUQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQy9CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtTQUMxQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPO1FBQ0wsU0FBUztRQUNULGFBQWEsRUFBRSxJQUFBLDRCQUFnQixFQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDN0MsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixjQUFjLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUN6Qyx1QkFBdUIsRUFBRSxTQUFTLENBQUMsdUJBQXVCLENBQUM7UUFDM0QsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLHVCQUF1QixDQUFDO1FBQzNELGFBQWE7UUFDYiwyQkFBMkI7UUFDM0IsMkJBQTJCO1FBQzNCLHlDQUF5QztRQUN6QyxZQUFZO0tBQ2IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJVHJhbnNhY3Rpb25SZWNpcGllbnQsIEtleUluZGljZXMsIFRyaXBsZSwgVmVyaWZpY2F0aW9uT3B0aW9ucywgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFV0eG9Db2luLCBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHR5cGUgeyBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCwgT3V0cHV0LCBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGZldGNoS2V5Y2hhaW5zLFxuICBnZXRLZXlTaWduYXR1cmVzLFxuICB0b0tleWNoYWluVHJpcGxlLFxuICB0b1hwdWJUcmlwbGUsXG4gIFV0eG9LZXljaGFpbixcbiAgVXR4b05hbWVkS2V5Y2hhaW5zLFxufSBmcm9tICcuLi8uLi9rZXljaGFpbnMnO1xuaW1wb3J0IHsgdmVyaWZ5S2V5U2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vdmVyaWZ5S2V5JztcbmltcG9ydCB7IEFkZHJlc3NDb2RlYyB9IGZyb20gJy4uL3JlY2lwaWVudCc7XG5pbXBvcnQgeyBDb21wYXJhYmxlT3V0cHV0LCBFeHBlY3RlZE91dHB1dCwgb3V0cHV0RGlmZmVyZW5jZSB9IGZyb20gJy4uL291dHB1dERpZmZlcmVuY2UnO1xuaW1wb3J0IHsgdG9UTnVtYmVyIH0gZnJvbSAnLi4vLi4vdG51bWJlcic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUNoYW5nZU9wdGlvbnMsIHBhcnNlT3V0cHV0IH0gZnJvbSAnLi9wYXJzZU91dHB1dCc7XG5cbmV4cG9ydCB0eXBlIENvbXBhcmFibGVPdXRwdXRXaXRoRXh0ZXJuYWw8VFZhbHVlPiA9IChDb21wYXJhYmxlT3V0cHV0PFRWYWx1ZT4gfCBFeHBlY3RlZE91dHB1dCkgJiB7XG4gIGV4dGVybmFsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gdG9DYW5vbmljYWxUcmFuc2FjdGlvblJlY2lwaWVudChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgb3V0cHV0OiB7IHZhbHVlU3RyaW5nOiBzdHJpbmc7IGFkZHJlc3M/OiBzdHJpbmcgfVxuKToge1xuICBhbW91bnQ6IGJpZ2ludDtcbiAgYWRkcmVzczogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGFtb3VudCA9IEJpZ0ludChvdXRwdXQudmFsdWVTdHJpbmcpO1xuICBBZGRyZXNzQ29kZWMuYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudCh7IGFtb3VudCwgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MgfSk7XG4gIGFzc2VydChvdXRwdXQuYWRkcmVzcywgJ2FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgaWYgKEFkZHJlc3NDb2RlYy5pc1NjcmlwdFJlY2lwaWVudChvdXRwdXQuYWRkcmVzcykpIHtcbiAgICByZXR1cm4geyBhbW91bnQsIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzIH07XG4gIH1cbiAgcmV0dXJuIHsgYW1vdW50LCBhZGRyZXNzOiBjb2luLmNhbm9uaWNhbEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlUmJmVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4sXG4gIGFkZHJlc3NDb2RlYzogQWRkcmVzc0NvZGVjID0gY29pbi5hZGRyZXNzQ29kZWNcbik6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgY29uc3QgeyB0eFBhcmFtcywgd2FsbGV0IH0gPSBwYXJhbXM7XG5cbiAgYXNzZXJ0KHR4UGFyYW1zLnJiZlR4SWRzKTtcbiAgYXNzZXJ0KHR4UGFyYW1zLnJiZlR4SWRzLmxlbmd0aCA9PT0gMSk7XG5cbiAgY29uc3QgdHhUb0JlUmVwbGFjZWQgPSBhd2FpdCB3YWxsZXQuZ2V0VHJhbnNhY3Rpb24oeyB0eEhhc2g6IHR4UGFyYW1zLnJiZlR4SWRzWzBdLCBpbmNsdWRlUmJmOiB0cnVlIH0pO1xuICBjb25zdCByZWNpcGllbnRzID0gdHhUb0JlUmVwbGFjZWQub3V0cHV0cy5mbGF0TWFwKFxuICAgIChvdXRwdXQ6IHsgdmFsdWVTdHJpbmc6IHN0cmluZzsgYWRkcmVzcz86IHN0cmluZzsgd2FsbGV0Pzogc3RyaW5nIH0pID0+IHtcbiAgICAgIC8vIEZvciBzZWxmLXNlbmRzLCB0aGUgd2FsbGV0SWQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgd2FsbGV0J3MgaWRcbiAgICAgIGlmIChvdXRwdXQud2FsbGV0ID09PSB3YWxsZXQuaWQoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gW3RvQ2Fub25pY2FsVHJhbnNhY3Rpb25SZWNpcGllbnQoY29pbiwgb3V0cHV0KV07XG4gICAgfVxuICApO1xuXG4gIC8vIFJlY3Vyc2UgaW50byBwYXJzZVRyYW5zYWN0aW9uIHdpdGggdGhlIGRlcml2ZWQgcmVjaXBpZW50cyBhbmQgd2l0aG91dCByYmZUeElkc1xuICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbihcbiAgICBjb2luLFxuICAgIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgIC4uLnR4UGFyYW1zLFxuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICByYmZUeElkczogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFkZHJlc3NDb2RlY1xuICApO1xufVxuXG5mdW5jdGlvbiB0b0V4cGVjdGVkT3V0cHV0cyhcbiAgYWRkcmVzc0NvZGVjOiBBZGRyZXNzQ29kZWMsXG4gIHR4UGFyYW1zOiB7XG4gICAgcmVjaXBpZW50cz86IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgIGFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICB9XG4pOiBFeHBlY3RlZE91dHB1dFtdIHtcbiAgLy8gdmVyaWZ5IHRoYXQgZWFjaCByZWNpcGllbnQgZnJvbSB0eFBhcmFtcyBoYXMgdGhlaXIgb3duIG91dHB1dFxuICBjb25zdCBleHBlY3RlZE91dHB1dHM6IEV4cGVjdGVkT3V0cHV0W10gPSAodHhQYXJhbXMucmVjaXBpZW50cyA/PyBbXSkuZmxhdE1hcCgob3V0cHV0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5hZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydCgnc2NyaXB0JyBpbiBvdXRwdXQsICdzY3JpcHQgaXMgcmVxdWlyZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXMnKTtcbiAgICAgIGlmIChvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCkgIT09ICcwJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgemVybyBhbW91bnRzIGFsbG93ZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXM6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHNjcmlwdDogYWRkcmVzc0NvZGVjLnRvT3V0cHV0U2NyaXB0KG91dHB1dCksXG4gICAgICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQgPT09ICdtYXgnID8gJ21heCcgOiBCaWdJbnQob3V0cHV0LmFtb3VudCksXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzY3JpcHQ6IGFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQob3V0cHV0LmFkZHJlc3MpLFxuICAgICAgICB2YWx1ZTogb3V0cHV0LmFtb3VudCA9PT0gJ21heCcgPyAnbWF4JyA6IEJpZ0ludChvdXRwdXQuYW1vdW50KSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSk7XG4gIGlmICh0eFBhcmFtcy5hbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcyAmJiB0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzKSB7XG4gICAgZXhwZWN0ZWRPdXRwdXRzLnB1c2goe1xuICAgICAgc2NyaXB0OiBhZGRyZXNzQ29kZWMudG9PdXRwdXRTY3JpcHQodHhQYXJhbXMuY2hhbmdlQWRkcmVzcyksXG4gICAgICAvLyBXaGVuIGFuIGV4dGVybmFsIGNoYW5nZSBhZGRyZXNzIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBjb3VudCBhbGwgb3V0cHV0cyBnb2luZyB0b3dhcmRzIHRoYXRcbiAgICAgIC8vIGFkZHJlc3MgaW4gdGhlIGV4cGVjdGVkIG91dHB1dHMgKHJlZ2FyZGxlc3Mgb2YgdGhlIG91dHB1dCBhbW91bnQpXG4gICAgICB2YWx1ZTogJ21heCcsXG4gICAgICAvLyBOb3RlIHRoYXQgdGhlIGNoYW5nZSBvdXRwdXQgaXMgbm90IHJlcXVpcmVkIHRvIGV4aXN0LCBzbyB3ZSBtYXJrIGl0IGFzIG9wdGlvbmFsLlxuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdGVkT3V0cHV0cztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Q3VzdG9tQ2hhbmdlS2V5cyh1c2VyS2V5Y2hhaW46IFV0eG9LZXljaGFpbiwgY3VzdG9tQ2hhbmdlOiBDdXN0b21DaGFuZ2VPcHRpb25zKTogdm9pZCB7XG4gIGZvciAoY29uc3Qga2V5SW5kZXggb2YgW0tleUluZGljZXMuVVNFUiwgS2V5SW5kaWNlcy5CQUNLVVAsIEtleUluZGljZXMuQklUR09dKSB7XG4gICAgaWYgKFxuICAgICAgIXZlcmlmeUtleVNpZ25hdHVyZSh7XG4gICAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgICAga2V5Y2hhaW5Ub1ZlcmlmeTogY3VzdG9tQ2hhbmdlLmtleXNba2V5SW5kZXhdLFxuICAgICAgICBrZXlTaWduYXR1cmU6IGN1c3RvbUNoYW5nZS5zaWduYXR1cmVzW2tleUluZGV4XSxcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB2ZXJpZnkgY3VzdG9tIGNoYW5nZSAke0tleUluZGljZXNba2V5SW5kZXhdLnRvTG93ZXJDYXNlKCl9IGtleSBzaWduYXR1cmVgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4sXG4gIGFkZHJlc3NDb2RlYzogQWRkcmVzc0NvZGVjID0gY29pbi5hZGRyZXNzQ29kZWNcbik6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgY29uc3QgeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gPSB7fSwgcmVxSWQgfSA9IHBhcmFtcztcblxuICAvLyBCcmFuY2ggb2ZmIGVhcmx5IGZvciBSQkYgdHJhbnNhY3Rpb25zXG4gIGlmICh0eFBhcmFtcy5yYmZUeElkcykge1xuICAgIHJldHVybiBwYXJzZVJiZlRyYW5zYWN0aW9uKGNvaW4sIHBhcmFtcywgYWRkcmVzc0NvZGVjKTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZCh2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpICYmICFfLmlzQm9vbGVhbih2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgfVxuICBjb25zdCBkaXNhYmxlTmV0d29ya2luZyA9IHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZztcblxuICAvLyBvYnRhaW4gdGhlIGtleWNoYWlucyBhbmQga2V5IHNpZ25hdHVyZXNcbiAgbGV0IGtleWNoYWluczogVXR4b05hbWVkS2V5Y2hhaW5zIHwgVmVyaWZpY2F0aW9uT3B0aW9uc1sna2V5Y2hhaW5zJ10gfCB1bmRlZmluZWQgPSB2ZXJpZmljYXRpb24ua2V5Y2hhaW5zO1xuICBpZiAoIWtleWNoYWlucykge1xuICAgIGlmIChkaXNhYmxlTmV0d29ya2luZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZmV0Y2gga2V5Y2hhaW5zIHdpdGhvdXQgbmV0d29ya2luZycpO1xuICAgIH1cbiAgICBrZXljaGFpbnMgPSBhd2FpdCBmZXRjaEtleWNoYWlucyhjb2luLCB3YWxsZXQsIHJlcUlkKTtcbiAgfVxuXG4gIGlmICghVXR4b05hbWVkS2V5Y2hhaW5zLmlzKGtleWNoYWlucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQga2V5Y2hhaW5zJyk7XG4gIH1cblxuICBjb25zdCBrZXljaGFpbkFycmF5OiBUcmlwbGU8VXR4b0tleWNoYWluPiA9IHRvS2V5Y2hhaW5UcmlwbGUoa2V5Y2hhaW5zKTtcblxuICBjb25zdCBlZmZlY3RpdmVUeEhleCA9IHR4UHJlYnVpbGQudHhIZXhQc2J0ID8/IHR4UHJlYnVpbGQudHhIZXg7XG4gIGlmIChfLmlzVW5kZWZpbmVkKGVmZmVjdGl2ZVR4SGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eFByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZE91dHB1dHMgPSB0b0V4cGVjdGVkT3V0cHV0cyhhZGRyZXNzQ29kZWMsIHR4UGFyYW1zKTtcblxuICAvLyBnZXQgdGhlIGtleWNoYWlucyBmcm9tIHRoZSBjdXN0b20gY2hhbmdlIHdhbGxldCBpZiBuZWVkZWRcbiAgbGV0IGN1c3RvbUNoYW5nZTogQ3VzdG9tQ2hhbmdlT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgeyBjdXN0b21DaGFuZ2VXYWxsZXRJZCA9IHVuZGVmaW5lZCB9ID0gd2FsbGV0LmNvaW5TcGVjaWZpYygpIHx8IHt9O1xuICBpZiAoY3VzdG9tQ2hhbmdlV2FsbGV0SWQpIHtcbiAgICAvLyBmZXRjaCBrZXljaGFpbnMgZnJvbSBjdXN0b20gY2hhbmdlIHdhbGxldCBmb3IgZGVyaXZpbmcgYWRkcmVzc2VzLlxuICAgIC8vIFRoZXNlIGtleWNoYWlucyBzaG91bGQgYmUgc2lnbmVkIGFuZCB0aGlzIHNob3VsZCBiZSB2ZXJpZmllZCBpbiB2ZXJpZnlUcmFuc2FjdGlvblxuICAgIGNvbnN0IGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMgPSB3YWxsZXQuX3dhbGxldC5jdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzO1xuICAgIGNvbnN0IGN1c3RvbUNoYW5nZVdhbGxldDogV2FsbGV0ID0gYXdhaXQgY29pbi53YWxsZXRzKCkuZ2V0KHsgaWQ6IGN1c3RvbUNoYW5nZVdhbGxldElkIH0pO1xuICAgIGNvbnN0IGN1c3RvbUNoYW5nZUtleXMgPSBhd2FpdCBmZXRjaEtleWNoYWlucyhjb2luLCBjdXN0b21DaGFuZ2VXYWxsZXQsIHJlcUlkKTtcblxuICAgIGlmICghY3VzdG9tQ2hhbmdlS2V5cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gZmV0Y2gga2V5Y2hhaW5zIGZvciBjdXN0b20gY2hhbmdlIHdhbGxldCcpO1xuICAgIH1cblxuICAgIGlmIChjdXN0b21DaGFuZ2VLZXlzLnVzZXIgJiYgY3VzdG9tQ2hhbmdlS2V5cy5iYWNrdXAgJiYgY3VzdG9tQ2hhbmdlS2V5cy5iaXRnbyAmJiBjdXN0b21DaGFuZ2VXYWxsZXQpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUNoYW5nZUtleWNoYWluczogVHJpcGxlPFV0eG9LZXljaGFpbj4gPSBbXG4gICAgICAgIGN1c3RvbUNoYW5nZUtleXMudXNlcixcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy5iYWNrdXAsXG4gICAgICAgIGN1c3RvbUNoYW5nZUtleXMuYml0Z28sXG4gICAgICBdO1xuXG4gICAgICBjdXN0b21DaGFuZ2UgPSB7XG4gICAgICAgIGtleXM6IGN1c3RvbUNoYW5nZUtleWNoYWlucyxcbiAgICAgICAgc2lnbmF0dXJlczogW2N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMudXNlciwgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy5iYWNrdXAsIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYml0Z29dLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBsZXQgY3VzdG9tQ2hhbmdlWHB1YnM6IFRyaXBsZTxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuICBpZiAoY3VzdG9tQ2hhbmdlKSB7XG4gICAgdmVyaWZ5Q3VzdG9tQ2hhbmdlS2V5cyhrZXljaGFpbkFycmF5W0tleUluZGljZXMuVVNFUl0sIGN1c3RvbUNoYW5nZSk7XG4gICAgY3VzdG9tQ2hhbmdlWHB1YnMgPSB0b1hwdWJUcmlwbGUoY3VzdG9tQ2hhbmdlLmtleXMpO1xuICB9XG5cbiAgLy8gb2J0YWluIGFsbCBvdXRwdXRzXG4gIGNvbnN0IGV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0gYXdhaXQgY29pbi5leHBsYWluVHJhbnNhY3Rpb248VE51bWJlcj4oe1xuICAgIHR4SGV4OiBlZmZlY3RpdmVUeEhleCxcbiAgICB0eEluZm86IHR4UHJlYnVpbGQudHhJbmZvLFxuICAgIHB1YnM6IGtleWNoYWluQXJyYXkubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgY3VzdG9tQ2hhbmdlWHB1YnMsXG4gIH0pO1xuXG4gIGNvbnN0IGFsbE91dHB1dHMgPSBbLi4uZXhwbGFuYXRpb24ub3V0cHV0cywgLi4uZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0c107XG5cbiAgLyoqXG4gICAqIExvb3AgdGhyb3VnaCBhbGwgdGhlIG91dHB1dHMgYW5kIGNsYXNzaWZ5IGVhY2ggb2YgdGhlbSBhcyBlaXRoZXIgaW50ZXJuYWwgc3BlbmRzXG4gICAqIG9yIGV4dGVybmFsIHNwZW5kcyBieSBzZXR0aW5nIHRoZSBcImV4dGVybmFsXCIgcHJvcGVydHkgdG8gdHJ1ZSBvciBmYWxzZSBvbiB0aGUgb3V0cHV0IG9iamVjdC5cbiAgICovXG4gIGNvbnN0IGFsbE91dHB1dERldGFpbHM6IE91dHB1dFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgYWxsT3V0cHV0cy5tYXAoKGN1cnJlbnRPdXRwdXQpID0+IHtcbiAgICAgIHJldHVybiBwYXJzZU91dHB1dCh7XG4gICAgICAgIGN1cnJlbnRPdXRwdXQsXG4gICAgICAgIGNvaW4sXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAga2V5Y2hhaW5BcnJheTogdG9LZXljaGFpblRyaXBsZShrZXljaGFpbnMpLFxuICAgICAgICB3YWxsZXQsXG4gICAgICAgIGFkZHJlc3NDb2RlYyxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICByZWNpcGllbnRzOiB0eFBhcmFtcy5yZWNpcGllbnRzID8/IFtdLFxuICAgICAgICAgIGNoYW5nZUFkZHJlc3M6IHR4UGFyYW1zLmNoYW5nZUFkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbUNoYW5nZSxcbiAgICAgICAgcmVxSWQsXG4gICAgICB9KTtcbiAgICB9KVxuICApO1xuXG4gIGNvbnN0IG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uID0gYWxsT3V0cHV0RGV0YWlscy5zb21lKFxuICAgIChvdXRwdXQpID0+IChvdXRwdXQgYXMgRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQpPy5uZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvblxuICApO1xuXG4gIGNvbnN0IGNoYW5nZU91dHB1dHMgPSBfLmZpbHRlcihhbGxPdXRwdXREZXRhaWxzLCB7IGV4dGVybmFsOiBmYWxzZSB9KTtcblxuICBmdW5jdGlvbiB0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKG91dHB1dHM6IE91dHB1dFtdKTogQ29tcGFyYWJsZU91dHB1dFdpdGhFeHRlcm5hbDxiaWdpbnQgfCAnbWF4Jz5bXSB7XG4gICAgcmV0dXJuIG91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICBzY3JpcHQ6IGFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQob3V0cHV0LmFkZHJlc3MpLFxuICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQgPT09ICdtYXgnID8gJ21heCcgOiAoQmlnSW50KG91dHB1dC5hbW91bnQpIGFzIGJpZ2ludCB8ICdtYXgnKSxcbiAgICAgIGV4dGVybmFsOiBvdXRwdXQuZXh0ZXJuYWwsXG4gICAgfSkpO1xuICB9XG5cbiAgY29uc3QgbWlzc2luZ091dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKGV4cGVjdGVkT3V0cHV0cywgdG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChhbGxPdXRwdXRzKSk7XG5cbiAgY29uc3QgaW1wbGljaXRPdXRwdXRzID0gb3V0cHV0RGlmZmVyZW5jZSh0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKGFsbE91dHB1dERldGFpbHMpLCBleHBlY3RlZE91dHB1dHMpO1xuICBjb25zdCBleHBsaWNpdE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoYWxsT3V0cHV0RGV0YWlscyksIGltcGxpY2l0T3V0cHV0cyk7XG5cbiAgLy8gdGhlc2UgYXJlIGFsbCB0aGUgbm9uLXdhbGxldCBvdXRwdXRzIHRoYXQgaGFkIGJlZW4gb3JpZ2luYWxseSBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiByZWNpcGllbnRzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzID0gZXhwbGljaXRPdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuZXh0ZXJuYWwpO1xuICAvLyB0aGlzIGlzIHRoZSBzdW0gb2YgYWxsIHRoZSBvcmlnaW5hbGx5IGV4cGxpY2l0bHkgc3BlY2lmaWVkIG5vbi13YWxsZXQgb3V0cHV0IHZhbHVlc1xuICBjb25zdCBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgPSB0b1ROdW1iZXIoXG4gICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHMucmVkdWNlKChzdW06IGJpZ2ludCwgbykgPT4gc3VtICsgQmlnSW50KG8udmFsdWUpLCBCaWdJbnQoMCkpLFxuICAgIGNvaW4uYW1vdW50VHlwZVxuICApIGFzIFROdW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IHBlcnRhaW5zIHRvIHZlcmlmeWluZyB0aGUgcGF5LWFzLXlvdS1nby1mZWUgQml0R29cbiAgICogYXV0b21hdGljYWxseSBhcHBsaWVkIHRvIHRyYW5zYWN0aW9ucyBzZW5kaW5nIG1vbmV5IG91dCBvZiB0aGUgd2FsbGV0LiBUaGUgbG9naWMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZFxuICAgKiBpbiB0aGF0IHdlIGNvbXBhcmUgdGhlIGV4dGVybmFsIHNwZW5kIGFtb3VudCB0aGF0IHdhcyBzcGVjaWZpZWQgZXhwbGljaXRseSBieSB0aGUgdXNlciB0byB0aGUgcG9ydGlvblxuICAgKiB0aGF0IHdhcyBzcGVjaWZpZWQgaW1wbGljaXRseS4gVG8gcHJvdGVjdCBjdXN0b21lcnMgZnJvbSBwZW9wbGUgdGFtcGVyaW5nIHdpdGggdGhlIHRyYW5zYWN0aW9uIG91dHB1dHMsIHdlXG4gICAqIGRlZmluZSBhIHRocmVzaG9sZCBmb3IgdGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgaW4gcmVsYXRpb24gdG8gdGhlIGV4cGxpY2l0XG4gICAqIGV4dGVybmFsIHNwZW5kLlxuICAgKlxuICAgKiBUaGlzIGhhcyBiZWNvbWUgb2Jzb2xldGUgd2l0aCB0aGUgaW50b2R1Y3Rpb24gb2YgYHV0eG9jb3JlLnBheWdvLnZlcmlmeVBheUdvQWRkcmVzc1Byb29mKClgLlxuICAgKi9cblxuICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIGV4dHJhIGFkZHJlc3NlcyBhcmUgY2hhbmdlIGFkZHJlc3Nlc1xuICAvLyBnZXQgYWxsIHRoZSBhZGRpdGlvbmFsIGV4dGVybmFsIG91dHB1dHMgdGhlIHNlcnZlciBhZGRlZCBhbmQgY2FsY3VsYXRlIHRoZWlyIHZhbHVlc1xuICBjb25zdCBpbXBsaWNpdEV4dGVybmFsT3V0cHV0cyA9IGltcGxpY2l0T3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LmV4dGVybmFsKTtcbiAgY29uc3QgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50ID0gdG9UTnVtYmVyKFxuICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLnJlZHVjZSgoc3VtOiBiaWdpbnQsIG8pID0+IHN1bSArIEJpZ0ludChvLnZhbHVlKSwgQmlnSW50KDApKSxcbiAgICBjb2luLmFtb3VudFR5cGVcbiAgKSBhcyBUTnVtYmVyO1xuXG4gIGZ1bmN0aW9uIHRvT3V0cHV0cyhvdXRwdXRzOiBFeHBlY3RlZE91dHB1dFtdIHwgQ29tcGFyYWJsZU91dHB1dFdpdGhFeHRlcm5hbDxiaWdpbnQgfCAnbWF4Jz5bXSk6IE91dHB1dFtdIHtcbiAgICByZXR1cm4gb3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIGFkZHJlc3M6IGFkZHJlc3NDb2RlYy50b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChvdXRwdXQuc2NyaXB0KSxcbiAgICAgIGFtb3VudDogb3V0cHV0LnZhbHVlLnRvU3RyaW5nKCksXG4gICAgICBleHRlcm5hbDogb3V0cHV0LmV4dGVybmFsLFxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAga2V5Y2hhaW5zLFxuICAgIGtleVNpZ25hdHVyZXM6IGdldEtleVNpZ25hdHVyZXMod2FsbGV0KSA/PyB7fSxcbiAgICBvdXRwdXRzOiBhbGxPdXRwdXREZXRhaWxzLFxuICAgIG1pc3NpbmdPdXRwdXRzOiB0b091dHB1dHMobWlzc2luZ091dHB1dHMpLFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b091dHB1dHMoZXhwbGljaXRFeHRlcm5hbE91dHB1dHMpLFxuICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b091dHB1dHMoaW1wbGljaXRFeHRlcm5hbE91dHB1dHMpLFxuICAgIGNoYW5nZU91dHB1dHMsXG4gICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbixcbiAgICBjdXN0b21DaGFuZ2UsXG4gIH07XG59XG4iXX0=
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBNElBLDRDQWlMQztBQTdURCxvREFBNEI7QUFFNUIsb0RBQXVCO0FBQ3ZCLDhDQUF5RztBQUl6RywrQ0FPeUI7QUFDekIsK0NBQXFEO0FBQ3JELDRDQUE0QztBQUM1QywwREFBeUY7QUFDekYsMkNBQTBDO0FBRzFDLCtDQUFpRTtBQVNqRSxTQUFTLCtCQUErQixDQUN0QyxJQUFzQixFQUN0QixNQUFpRDtJQUtqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLHdCQUFZLENBQUMsK0JBQStCLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDOUMsSUFBSSx3QkFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ3BFLENBQUM7QUFFRCxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLElBQXNCLEVBQ3RCLE1BQXdDLEVBQ3hDLGVBQTZCLElBQUksQ0FBQyxZQUFZO0lBRTlDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRXBDLElB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cnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJVHJhbnNhY3Rpb25SZWNpcGllbnQsIEtleUluZGljZXMsIFRyaXBsZSwgVmVyaWZpY2F0aW9uT3B0aW9ucywgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFV0eG9Db2luLCBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHR5cGUgeyBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCwgT3V0cHV0LCBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGZldGNoS2V5Y2hhaW5zLFxuICBnZXRLZXlTaWduYXR1cmVzLFxuICB0b0tleWNoYWluVHJpcGxlLFxuICB0b1hwdWJUcmlwbGUsXG4gIFV0eG9LZXljaGFpbixcbiAgVXR4b05hbWVkS2V5Y2hhaW5zLFxufSBmcm9tICcuLi8uLi9rZXljaGFpbnMnO1xuaW1wb3J0IHsgdmVyaWZ5S2V5U2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vdmVyaWZ5S2V5JztcbmltcG9ydCB7IEFkZHJlc3NDb2RlYyB9IGZyb20gJy4uL3JlY2lwaWVudCc7XG5pbXBvcnQgeyBDb21wYXJhYmxlT3V0cHV0LCBFeHBlY3RlZE91dHB1dCwgb3V0cHV0RGlmZmVyZW5jZSB9IGZyb20gJy4uL291dHB1dERpZmZlcmVuY2UnO1xuaW1wb3J0IHsgdG9UTnVtYmVyIH0gZnJvbSAnLi4vLi4vdG51bWJlcic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUNoYW5nZU9wdGlvbnMsIHBhcnNlT3V0cHV0IH0gZnJvbSAnLi9wYXJzZU91dHB1dCc7XG5cbmV4cG9ydCB0eXBlIENvbXBhcmFibGVPdXRwdXRXaXRoRXh0ZXJuYWw8VFZhbHVlPiA9IChDb21wYXJhYmxlT3V0cHV0PFRWYWx1ZT4gfCBFeHBlY3RlZE91dHB1dCkgJiB7XG4gIGV4dGVybmFsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxudHlwZSBFeHBlY3RlZE91dHB1dFdpdGhBZGRyZXNzID0gRXhwZWN0ZWRPdXRwdXQgJiB7IGFkZHJlc3M/OiBzdHJpbmcgfTtcbnR5cGUgQ29tcGFyYWJsZU91dHB1dFdpdGhBZGRyZXNzPFRWYWx1ZT4gPSBDb21wYXJhYmxlT3V0cHV0V2l0aEV4dGVybmFsPFRWYWx1ZT4gJiB7IGFkZHJlc3M6IHN0cmluZyB9O1xuXG5mdW5jdGlvbiB0b0Nhbm9uaWNhbFRyYW5zYWN0aW9uUmVjaXBpZW50KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBvdXRwdXQ6IHsgdmFsdWVTdHJpbmc6IHN0cmluZzsgYWRkcmVzcz86IHN0cmluZyB9XG4pOiB7XG4gIGFtb3VudDogYmlnaW50O1xuICBhZGRyZXNzOiBzdHJpbmc7XG59IHtcbiAgY29uc3QgYW1vdW50ID0gQmlnSW50KG91dHB1dC52YWx1ZVN0cmluZyk7XG4gIEFkZHJlc3NDb2RlYy5hc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50KHsgYW1vdW50LCBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyB9KTtcbiAgYXNzZXJ0KG91dHB1dC5hZGRyZXNzLCAnYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuICBpZiAoQWRkcmVzc0NvZGVjLmlzU2NyaXB0UmVjaXBpZW50KG91dHB1dC5hZGRyZXNzKSkge1xuICAgIHJldHVybiB7IGFtb3VudCwgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MgfTtcbiAgfVxuICByZXR1cm4geyBhbW91bnQsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcykgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VSYmZUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPixcbiAgYWRkcmVzc0NvZGVjOiBBZGRyZXNzQ29kZWMgPSBjb2luLmFkZHJlc3NDb2RlY1xuKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICBjb25zdCB7IHR4UGFyYW1zLCB3YWxsZXQgfSA9IHBhcmFtcztcblxuICBhc3NlcnQodHhQYXJhbXMucmJmVHhJZHMpO1xuICBhc3NlcnQodHhQYXJhbXMucmJmVHhJZHMubGVuZ3RoID09PSAxKTtcblxuICBjb25zdCB0eFRvQmVSZXBsYWNlZCA9IGF3YWl0IHdhbGxldC5nZXRUcmFuc2FjdGlvbih7IHR4SGFzaDogdHhQYXJhbXMucmJmVHhJZHNbMF0sIGluY2x1ZGVSYmY6IHRydWUgfSk7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSB0eFRvQmVSZXBsYWNlZC5vdXRwdXRzLmZsYXRNYXAoXG4gICAgKG91dHB1dDogeyB2YWx1ZVN0cmluZzogc3RyaW5nOyBhZGRyZXNzPzogc3RyaW5nOyB3YWxsZXQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgLy8gRm9yIHNlbGYtc2VuZHMsIHRoZSB3YWxsZXRJZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB3YWxsZXQncyBpZFxuICAgICAgaWYgKG91dHB1dC53YWxsZXQgPT09IHdhbGxldC5pZCgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdG9DYW5vbmljYWxUcmFuc2FjdGlvblJlY2lwaWVudChjb2luLCBvdXRwdXQpXTtcbiAgICB9XG4gICk7XG5cbiAgLy8gUmVjdXJzZSBpbnRvIHBhcnNlVHJhbnNhY3Rpb24gd2l0aCB0aGUgZGVyaXZlZCByZWNpcGllbnRzIGFuZCB3aXRob3V0IHJiZlR4SWRzXG4gIHJldHVybiBwYXJzZVRyYW5zYWN0aW9uKFxuICAgIGNvaW4sXG4gICAge1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgLi4udHhQYXJhbXMsXG4gICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIHJiZlR4SWRzOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0sXG4gICAgYWRkcmVzc0NvZGVjXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRvRXhwZWN0ZWRPdXRwdXRzKFxuICBhZGRyZXNzQ29kZWM6IEFkZHJlc3NDb2RlYyxcbiAgdHhQYXJhbXM6IHtcbiAgICByZWNpcGllbnRzPzogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICAgIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG4gIH1cbik6IEV4cGVjdGVkT3V0cHV0V2l0aEFkZHJlc3NbXSB7XG4gIC8vIHZlcmlmeSB0aGF0IGVhY2ggcmVjaXBpZW50IGZyb20gdHhQYXJhbXMgaGFzIHRoZWlyIG93biBvdXRwdXRcbiAgY29uc3QgZXhwZWN0ZWRPdXRwdXRzOiBFeHBlY3RlZE91dHB1dFdpdGhBZGRyZXNzW10gPSAodHhQYXJhbXMucmVjaXBpZW50cyA/PyBbXSkuZmxhdE1hcCgob3V0cHV0KSA9PiB7XG4gICAgaWYgKG91dHB1dC5hZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydCgnc2NyaXB0JyBpbiBvdXRwdXQsICdzY3JpcHQgaXMgcmVxdWlyZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXMnKTtcbiAgICAgIGlmIChvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCkgIT09ICcwJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgemVybyBhbW91bnRzIGFsbG93ZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXM6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHNjcmlwdDogYWRkcmVzc0NvZGVjLnRvT3V0cHV0U2NyaXB0KG91dHB1dCksXG4gICAgICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQgPT09ICdtYXgnID8gJ21heCcgOiBCaWdJbnQob3V0cHV0LmFtb3VudCksXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzY3JpcHQ6IGFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQob3V0cHV0LmFkZHJlc3MpLFxuICAgICAgICB2YWx1ZTogb3V0cHV0LmFtb3VudCA9PT0gJ21heCcgPyAnbWF4JyA6IEJpZ0ludChvdXRwdXQuYW1vdW50KSxcbiAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICB9LFxuICAgIF07XG4gIH0pO1xuICBpZiAodHhQYXJhbXMuYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3MgJiYgdHhQYXJhbXMuY2hhbmdlQWRkcmVzcykge1xuICAgIGV4cGVjdGVkT3V0cHV0cy5wdXNoKHtcbiAgICAgIHNjcmlwdDogYWRkcmVzc0NvZGVjLnRvT3V0cHV0U2NyaXB0KHR4UGFyYW1zLmNoYW5nZUFkZHJlc3MpLFxuICAgICAgLy8gV2hlbiBhbiBleHRlcm5hbCBjaGFuZ2UgYWRkcmVzcyBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgY291bnQgYWxsIG91dHB1dHMgZ29pbmcgdG93YXJkcyB0aGF0XG4gICAgICAvLyBhZGRyZXNzIGluIHRoZSBleHBlY3RlZCBvdXRwdXRzIChyZWdhcmRsZXNzIG9mIHRoZSBvdXRwdXQgYW1vdW50KVxuICAgICAgdmFsdWU6ICdtYXgnLFxuICAgICAgLy8gTm90ZSB0aGF0IHRoZSBjaGFuZ2Ugb3V0cHV0IGlzIG5vdCByZXF1aXJlZCB0byBleGlzdCwgc28gd2UgbWFyayBpdCBhcyBvcHRpb25hbC5cbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgYWRkcmVzczogdHhQYXJhbXMuY2hhbmdlQWRkcmVzcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZXhwZWN0ZWRPdXRwdXRzO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlDdXN0b21DaGFuZ2VLZXlzKHVzZXJLZXljaGFpbjogVXR4b0tleWNoYWluLCBjdXN0b21DaGFuZ2U6IEN1c3RvbUNoYW5nZU9wdGlvbnMpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBrZXlJbmRleCBvZiBbS2V5SW5kaWNlcy5VU0VSLCBLZXlJbmRpY2VzLkJBQ0tVUCwgS2V5SW5kaWNlcy5CSVRHT10pIHtcbiAgICBpZiAoXG4gICAgICAhdmVyaWZ5S2V5U2lnbmF0dXJlKHtcbiAgICAgICAgdXNlcktleWNoYWluLFxuICAgICAgICBrZXljaGFpblRvVmVyaWZ5OiBjdXN0b21DaGFuZ2Uua2V5c1trZXlJbmRleF0sXG4gICAgICAgIGtleVNpZ25hdHVyZTogY3VzdG9tQ2hhbmdlLnNpZ25hdHVyZXNba2V5SW5kZXhdLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIHZlcmlmeSBjdXN0b20gY2hhbmdlICR7S2V5SW5kaWNlc1trZXlJbmRleF0udG9Mb3dlckNhc2UoKX0ga2V5IHNpZ25hdHVyZWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPixcbiAgYWRkcmVzc0NvZGVjOiBBZGRyZXNzQ29kZWMgPSBjb2luLmFkZHJlc3NDb2RlY1xuKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiA9IHt9LCByZXFJZCB9ID0gcGFyYW1zO1xuXG4gIC8vIEJyYW5jaCBvZmYgZWFybHkgZm9yIFJCRiB0cmFuc2FjdGlvbnNcbiAgaWYgKHR4UGFyYW1zLnJiZlR4SWRzKSB7XG4gICAgcmV0dXJuIHBhcnNlUmJmVHJhbnNhY3Rpb24oY29pbiwgcGFyYW1zLCBhZGRyZXNzQ29kZWMpO1xuICB9XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZykgJiYgIV8uaXNCb29sZWFuKHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZyBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICB9XG4gIGNvbnN0IGRpc2FibGVOZXR3b3JraW5nID0gdmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nO1xuXG4gIC8vIG9idGFpbiB0aGUga2V5Y2hhaW5zIGFuZCBrZXkgc2lnbmF0dXJlc1xuICBsZXQga2V5Y2hhaW5zOiBVdHhvTmFtZWRLZXljaGFpbnMgfCBWZXJpZmljYXRpb25PcHRpb25zWydrZXljaGFpbnMnXSB8IHVuZGVmaW5lZCA9IHZlcmlmaWNhdGlvbi5rZXljaGFpbnM7XG4gIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgaWYgKGRpc2FibGVOZXR3b3JraW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBmZXRjaCBrZXljaGFpbnMgd2l0aG91dCBuZXR3b3JraW5nJyk7XG4gICAgfVxuICAgIGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKGNvaW4sIHdhbGxldCwgcmVxSWQpO1xuICB9XG5cbiAgaWYgKCFVdHhvTmFtZWRLZXljaGFpbnMuaXMoa2V5Y2hhaW5zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBrZXljaGFpbnMnKTtcbiAgfVxuXG4gIGNvbnN0IGtleWNoYWluQXJyYXk6IFRyaXBsZTxVdHhvS2V5Y2hhaW4+ID0gdG9LZXljaGFpblRyaXBsZShrZXljaGFpbnMpO1xuXG4gIGNvbnN0IGVmZmVjdGl2ZVR4SGV4ID0gdHhQcmVidWlsZC50eEhleFBzYnQgPz8gdHhQcmVidWlsZC50eEhleDtcbiAgaWYgKF8uaXNVbmRlZmluZWQoZWZmZWN0aXZlVHhIZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4UHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgfVxuXG4gIGNvbnN0IGV4cGVjdGVkT3V0cHV0cyA9IHRvRXhwZWN0ZWRPdXRwdXRzKGFkZHJlc3NDb2RlYywgdHhQYXJhbXMpO1xuXG4gIC8vIGdldCB0aGUga2V5Y2hhaW5zIGZyb20gdGhlIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGlmIG5lZWRlZFxuICBsZXQgY3VzdG9tQ2hhbmdlOiBDdXN0b21DaGFuZ2VPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBjb25zdCB7IGN1c3RvbUNoYW5nZVdhbGxldElkID0gdW5kZWZpbmVkIH0gPSB3YWxsZXQuY29pblNwZWNpZmljKCkgfHwge307XG4gIGlmIChjdXN0b21DaGFuZ2VXYWxsZXRJZCkge1xuICAgIC8vIGZldGNoIGtleWNoYWlucyBmcm9tIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0IGZvciBkZXJpdmluZyBhZGRyZXNzZXMuXG4gICAgLy8gVGhlc2Uga2V5Y2hhaW5zIHNob3VsZCBiZSBzaWduZWQgYW5kIHRoaXMgc2hvdWxkIGJlIHZlcmlmaWVkIGluIHZlcmlmeVRyYW5zYWN0aW9uXG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcyA9IHdhbGxldC5fd2FsbGV0LmN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXM7XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlV2FsbGV0OiBXYWxsZXQgPSBhd2FpdCBjb2luLndhbGxldHMoKS5nZXQoeyBpZDogY3VzdG9tQ2hhbmdlV2FsbGV0SWQgfSk7XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5cyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKGNvaW4sIGN1c3RvbUNoYW5nZVdhbGxldCwgcmVxSWQpO1xuXG4gICAgaWYgKCFjdXN0b21DaGFuZ2VLZXlzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCBrZXljaGFpbnMgZm9yIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0Jyk7XG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbUNoYW5nZUtleXMudXNlciAmJiBjdXN0b21DaGFuZ2VLZXlzLmJhY2t1cCAmJiBjdXN0b21DaGFuZ2VLZXlzLmJpdGdvICYmIGN1c3RvbUNoYW5nZVdhbGxldCkge1xuICAgICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5Y2hhaW5zOiBUcmlwbGU8VXR4b0tleWNoYWluPiA9IFtcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy51c2VyLFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLmJhY2t1cCxcbiAgICAgICAgY3VzdG9tQ2hhbmdlS2V5cy5iaXRnbyxcbiAgICAgIF07XG5cbiAgICAgIGN1c3RvbUNoYW5nZSA9IHtcbiAgICAgICAga2V5czogY3VzdG9tQ2hhbmdlS2V5Y2hhaW5zLFxuICAgICAgICBzaWduYXR1cmVzOiBbY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy51c2VyLCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLmJhY2t1cCwgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcy5iaXRnb10sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGxldCBjdXN0b21DaGFuZ2VYcHViczogVHJpcGxlPHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gIGlmIChjdXN0b21DaGFuZ2UpIHtcbiAgICB2ZXJpZnlDdXN0b21DaGFuZ2VLZXlzKGtleWNoYWluQXJyYXlbS2V5SW5kaWNlcy5VU0VSXSwgY3VzdG9tQ2hhbmdlKTtcbiAgICBjdXN0b21DaGFuZ2VYcHVicyA9IHRvWHB1YlRyaXBsZShjdXN0b21DaGFuZ2Uua2V5cyk7XG4gIH1cblxuICAvLyBvYnRhaW4gYWxsIG91dHB1dHNcbiAgY29uc3QgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSBhd2FpdCBjb2luLmV4cGxhaW5UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgdHhIZXg6IGVmZmVjdGl2ZVR4SGV4LFxuICAgIHR4SW5mbzogdHhQcmVidWlsZC50eEluZm8sXG4gICAgcHViczoga2V5Y2hhaW5BcnJheS5tYXAoKGspID0+IGsucHViKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgICBjdXN0b21DaGFuZ2VYcHVicyxcbiAgfSk7XG5cbiAgY29uc3QgYWxsT3V0cHV0cyA9IFsuLi5leHBsYW5hdGlvbi5vdXRwdXRzLCAuLi5leHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzXTtcblxuICAvKipcbiAgICogTG9vcCB0aHJvdWdoIGFsbCB0aGUgb3V0cHV0cyBhbmQgY2xhc3NpZnkgZWFjaCBvZiB0aGVtIGFzIGVpdGhlciBpbnRlcm5hbCBzcGVuZHNcbiAgICogb3IgZXh0ZXJuYWwgc3BlbmRzIGJ5IHNldHRpbmcgdGhlIFwiZXh0ZXJuYWxcIiBwcm9wZXJ0eSB0byB0cnVlIG9yIGZhbHNlIG9uIHRoZSBvdXRwdXQgb2JqZWN0LlxuICAgKi9cbiAgY29uc3QgYWxsT3V0cHV0RGV0YWlsczogT3V0cHV0W10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBhbGxPdXRwdXRzLm1hcCgoY3VycmVudE91dHB1dCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcnNlT3V0cHV0KHtcbiAgICAgICAgY3VycmVudE91dHB1dCxcbiAgICAgICAgY29pbixcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICBrZXljaGFpbkFycmF5OiB0b0tleWNoYWluVHJpcGxlKGtleWNoYWlucyksXG4gICAgICAgIHdhbGxldCxcbiAgICAgICAgYWRkcmVzc0NvZGVjLFxuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHJlY2lwaWVudHM6IHR4UGFyYW1zLnJlY2lwaWVudHMgPz8gW10sXG4gICAgICAgICAgY2hhbmdlQWRkcmVzczogdHhQYXJhbXMuY2hhbmdlQWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgIH0pXG4gICk7XG5cbiAgY29uc3QgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24gPSBhbGxPdXRwdXREZXRhaWxzLnNvbWUoXG4gICAgKG91dHB1dCkgPT4gKG91dHB1dCBhcyBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCk/Lm5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uXG4gICk7XG5cbiAgY29uc3QgY2hhbmdlT3V0cHV0cyA9IF8uZmlsdGVyKGFsbE91dHB1dERldGFpbHMsIHsgZXh0ZXJuYWw6IGZhbHNlIH0pO1xuXG4gIGZ1bmN0aW9uIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwob3V0cHV0czogT3V0cHV0W10pOiBDb21wYXJhYmxlT3V0cHV0V2l0aEFkZHJlc3M8YmlnaW50IHwgJ21heCc+W10ge1xuICAgIHJldHVybiBvdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgLy8gQ2hhbmdlL2N1c3RvbS1jaGFuZ2Ugb3V0cHV0cyBhcmUgYWx3YXlzIHRyYW5zcGFyZW50IHdhbGxldCBhZGRyZXNzZXMuXG4gICAgICBzY3JpcHQ6IG91dHB1dC5leHRlcm5hbFxuICAgICAgICA/IGFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQob3V0cHV0LmFkZHJlc3MpXG4gICAgICAgIDogQnVmZmVyLmZyb20oYWRkcmVzc0NvZGVjLmRlY29kZUNoYW5nZUFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpKSxcbiAgICAgIHZhbHVlOiBvdXRwdXQuYW1vdW50ID09PSAnbWF4JyA/ICdtYXgnIDogKEJpZ0ludChvdXRwdXQuYW1vdW50KSBhcyBiaWdpbnQgfCAnbWF4JyksXG4gICAgICBleHRlcm5hbDogb3V0cHV0LmV4dGVybmFsLFxuICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgfSkpO1xuICB9XG5cbiAgY29uc3QgbWlzc2luZ091dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKGV4cGVjdGVkT3V0cHV0cywgdG9Db21wYXJhYmxlT3V0cHV0c1dpdGhFeHRlcm5hbChhbGxPdXRwdXRzKSk7XG5cbiAgY29uc3QgaW1wbGljaXRPdXRwdXRzID0gb3V0cHV0RGlmZmVyZW5jZSh0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKGFsbE91dHB1dERldGFpbHMpLCBleHBlY3RlZE91dHB1dHMpO1xuICBjb25zdCBleHBsaWNpdE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoYWxsT3V0cHV0RGV0YWlscyksIGltcGxpY2l0T3V0cHV0cyk7XG5cbiAgLy8gdGhlc2UgYXJlIGFsbCB0aGUgbm9uLXdhbGxldCBvdXRwdXRzIHRoYXQgaGFkIGJlZW4gb3JpZ2luYWxseSBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiByZWNpcGllbnRzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzID0gZXhwbGljaXRPdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuZXh0ZXJuYWwpO1xuICAvLyB0aGlzIGlzIHRoZSBzdW0gb2YgYWxsIHRoZSBvcmlnaW5hbGx5IGV4cGxpY2l0bHkgc3BlY2lmaWVkIG5vbi13YWxsZXQgb3V0cHV0IHZhbHVlc1xuICBjb25zdCBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgPSB0b1ROdW1iZXIoXG4gICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHMucmVkdWNlKChzdW06IGJpZ2ludCwgbykgPT4gc3VtICsgQmlnSW50KG8udmFsdWUpLCBCaWdJbnQoMCkpLFxuICAgIGNvaW4uYW1vdW50VHlwZVxuICApIGFzIFROdW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IHBlcnRhaW5zIHRvIHZlcmlmeWluZyB0aGUgcGF5LWFzLXlvdS1nby1mZWUgQml0R29cbiAgICogYXV0b21hdGljYWxseSBhcHBsaWVkIHRvIHRyYW5zYWN0aW9ucyBzZW5kaW5nIG1vbmV5IG91dCBvZiB0aGUgd2FsbGV0LiBUaGUgbG9naWMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZFxuICAgKiBpbiB0aGF0IHdlIGNvbXBhcmUgdGhlIGV4dGVybmFsIHNwZW5kIGFtb3VudCB0aGF0IHdhcyBzcGVjaWZpZWQgZXhwbGljaXRseSBieSB0aGUgdXNlciB0byB0aGUgcG9ydGlvblxuICAgKiB0aGF0IHdhcyBzcGVjaWZpZWQgaW1wbGljaXRseS4gVG8gcHJvdGVjdCBjdXN0b21lcnMgZnJvbSBwZW9wbGUgdGFtcGVyaW5nIHdpdGggdGhlIHRyYW5zYWN0aW9uIG91dHB1dHMsIHdlXG4gICAqIGRlZmluZSBhIHRocmVzaG9sZCBmb3IgdGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiB0aGUgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgaW4gcmVsYXRpb24gdG8gdGhlIGV4cGxpY2l0XG4gICAqIGV4dGVybmFsIHNwZW5kLlxuICAgKlxuICAgKiBUaGlzIGhhcyBiZWNvbWUgb2Jzb2xldGUgd2l0aCB0aGUgaW50b2R1Y3Rpb24gb2YgYHV0eG9jb3JlLnBheWdvLnZlcmlmeVBheUdvQWRkcmVzc1Byb29mKClgLlxuICAgKi9cbiAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBleHRyYSBhZGRyZXNzZXMgYXJlIGNoYW5nZSBhZGRyZXNzZXNcbiAgLy8gZ2V0IGFsbCB0aGUgYWRkaXRpb25hbCBleHRlcm5hbCBvdXRwdXRzIHRoZSBzZXJ2ZXIgYWRkZWQgYW5kIGNhbGN1bGF0ZSB0aGVpciB2YWx1ZXNcbiAgY29uc3QgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMgPSBpbXBsaWNpdE91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5leHRlcm5hbCk7XG4gIGNvbnN0IGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCA9IHRvVE51bWJlcihcbiAgICBpbXBsaWNpdEV4dGVybmFsT3V0cHV0cy5yZWR1Y2UoKHN1bTogYmlnaW50LCBvKSA9PiBzdW0gKyBCaWdJbnQoby52YWx1ZSksIEJpZ0ludCgwKSksXG4gICAgY29pbi5hbW91bnRUeXBlXG4gICkgYXMgVE51bWJlcjtcblxuICBmdW5jdGlvbiB0b091dHB1dHMob3V0cHV0czogRXhwZWN0ZWRPdXRwdXRXaXRoQWRkcmVzc1tdIHwgQ29tcGFyYWJsZU91dHB1dFdpdGhBZGRyZXNzPGJpZ2ludCB8ICdtYXgnPltdKTogT3V0cHV0W10ge1xuICAgIHJldHVybiBvdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgYWRkcmVzczogYWRkcmVzc0NvZGVjLnRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KG91dHB1dC5zY3JpcHQsIG91dHB1dC5hZGRyZXNzKSxcbiAgICAgIGFtb3VudDogb3V0cHV0LnZhbHVlLnRvU3RyaW5nKCksXG4gICAgICBleHRlcm5hbDogb3V0cHV0LmV4dGVybmFsLFxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAga2V5Y2hhaW5zLFxuICAgIGtleVNpZ25hdHVyZXM6IGdldEtleVNpZ25hdHVyZXMod2FsbGV0KSA/PyB7fSxcbiAgICBvdXRwdXRzOiBhbGxPdXRwdXREZXRhaWxzLFxuICAgIG1pc3NpbmdPdXRwdXRzOiB0b091dHB1dHMobWlzc2luZ091dHB1dHMpLFxuICAgIGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b091dHB1dHMoZXhwbGljaXRFeHRlcm5hbE91dHB1dHMpLFxuICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiB0b091dHB1dHMoaW1wbGljaXRFeHRlcm5hbE91dHB1dHMpLFxuICAgIGNoYW5nZU91dHB1dHMsXG4gICAgZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgIGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBuZWVkc0N1c3RvbUNoYW5nZUtleVNpZ25hdHVyZVZlcmlmaWNhdGlvbixcbiAgICBjdXN0b21DaGFuZ2UsXG4gIH07XG59XG4iXX0=
@@ -1,4 +1,8 @@
1
1
  import { UtxoCoinName, WasmUtxoCoinName } from '../names';
2
+ export interface AddressCodecOutput {
3
+ address?: string | null;
4
+ script: Uint8Array;
5
+ }
2
6
  /** Address/network-aware recipient conversion. */
3
7
  export declare class AddressCodec {
4
8
  readonly coinName: UtxoCoinName;
@@ -17,6 +21,26 @@ export declare class AddressCodec {
17
21
  address?: string;
18
22
  }): void;
19
23
  decode(address: string): Uint8Array;
24
+ /**
25
+ * Resolve a change address to its script. Change addresses are always transparent wallet
26
+ * addresses, so coins whose address resolution depends on transaction context (e.g. Zcash
27
+ * Unified Addresses with a bound recipient preference) override this to bypass that
28
+ * context. The base implementation defers to decode.
29
+ */
30
+ decodeChangeAddress(address: string): Uint8Array;
31
+ /**
32
+ * Validate that an output address represents its raw script. Coins with multiple receiver
33
+ * types may override this to choose the receiver represented by parsed output metadata.
34
+ */
35
+ isMatchingScript(output: {
36
+ address?: string | null;
37
+ script: Uint8Array;
38
+ }): boolean;
39
+ /**
40
+ * Convert an output script back to its address form. The optional original address is accepted
41
+ * by coin-specific codecs that need to preserve an address not re-encodable from the script.
42
+ */
43
+ toExtendedAddressFormat(script: Buffer, _address?: string): string;
20
44
  encode(script: Uint8Array): string;
21
45
  isValidAddress(address: string): boolean;
22
46
  fromExtendedAddressFormatToScript(extendedAddress: string): Buffer;
@@ -25,7 +49,6 @@ export declare class AddressCodec {
25
49
  } | {
26
50
  script: string;
27
51
  }): Buffer;
28
- toExtendedAddressFormat(script: Buffer): string;
29
52
  }
30
53
  /** Legacy helper retained for consumers that use the module-level recipient API. */
31
54
  export declare function isScriptRecipient(address: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"recipient.d.ts","sourceRoot":"","sources":["../../../../src/transaction/recipient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK9E,kDAAkD;AAClD,qBAAa,YAAY;aAEL,QAAQ,EAAE,YAAY;aACtB,QAAQ,EAAE,gBAAgB;gBAD1B,QAAQ,EAAE,YAAY,EACtB,QAAQ,GAAE,gBAA+C;IAG3E,gFAAgF;IAChF,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,+EAA+E;IAC/E,MAAM,CAAC,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAOnG,MAAM,CAAC,+BAA+B,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAY5G,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAInC,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAIlC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQxC,iCAAiC,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAQlE,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAa5E,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAGhD;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAE3G;AAED,oFAAoF;AACpF,wBAAgB,iCAAiC,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEzG;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEnH;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEtF;AAED,oFAAoF;AACpF,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEpH"}
1
+ {"version":3,"file":"recipient.d.ts","sourceRoot":"","sources":["../../../../src/transaction/recipient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK9E,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,kDAAkD;AAClD,qBAAa,YAAY;aAEL,QAAQ,EAAE,YAAY;aACtB,QAAQ,EAAE,gBAAgB;gBAD1B,QAAQ,EAAE,YAAY,EACtB,QAAQ,GAAE,gBAA+C;IAG3E,gFAAgF;IAChF,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,+EAA+E;IAC/E,MAAM,CAAC,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAOnG,MAAM,CAAC,+BAA+B,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAY5G,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAInC;;;;;OAKG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAIhD;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO;IAUlF;;;OAGG;IACH,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIlE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAIlC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQxC,iCAAiC,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAQlE,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAY7E;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAE3G;AAED,oFAAoF;AACpF,wBAAgB,iCAAiC,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEzG;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEnH;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEtF;AAED,oFAAoF;AACpF,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEpH"}
@@ -40,6 +40,37 @@ class AddressCodec {
40
40
  decode(address) {
41
41
  return wasm_utxo_1.address.toOutputScriptWithCoin(address, this.wasmName);
42
42
  }
43
+ /**
44
+ * Resolve a change address to its script. Change addresses are always transparent wallet
45
+ * addresses, so coins whose address resolution depends on transaction context (e.g. Zcash
46
+ * Unified Addresses with a bound recipient preference) override this to bypass that
47
+ * context. The base implementation defers to decode.
48
+ */
49
+ decodeChangeAddress(address) {
50
+ return this.decode(address);
51
+ }
52
+ /**
53
+ * Validate that an output address represents its raw script. Coins with multiple receiver
54
+ * types may override this to choose the receiver represented by parsed output metadata.
55
+ */
56
+ isMatchingScript(output) {
57
+ if (output.address === undefined || output.address === null) {
58
+ return true;
59
+ }
60
+ try {
61
+ return this.fromExtendedAddressFormatToScript(output.address).equals(Buffer.from(output.script));
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /**
68
+ * Convert an output script back to its address form. The optional original address is accepted
69
+ * by coin-specific codecs that need to preserve an address not re-encodable from the script.
70
+ */
71
+ toExtendedAddressFormat(script, _address) {
72
+ return script[0] === OP_RETURN ? `${ScriptRecipientPrefix}${script.toString('hex')}` : this.encode(script);
73
+ }
43
74
  encode(script) {
44
75
  return wasm_utxo_1.address.fromOutputScriptWithCoin(script, this.wasmName);
45
76
  }
@@ -70,9 +101,6 @@ class AddressCodec {
70
101
  }
71
102
  throw new Error('invalid input');
72
103
  }
73
- toExtendedAddressFormat(script) {
74
- return script[0] === OP_RETURN ? `${ScriptRecipientPrefix}${script.toString('hex')}` : this.encode(script);
75
- }
76
104
  }
77
105
  exports.AddressCodec = AddressCodec;
78
106
  /** Legacy helper retained for consumers that use the module-level recipient API. */
@@ -99,4 +127,4 @@ function toExtendedAddressFormat(script, coinName) {
99
127
  function assertValidTransactionRecipient(output) {
100
128
  AddressCodec.assertValidTransactionRecipient(output);
101
129
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3JlY2lwaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrRkEsOENBRUM7QUFHRCw4REFFQztBQUdELDhFQUVDO0FBR0Qsd0NBRUM7QUFHRCwwREFFQztBQUdELDBFQUVDO0FBN0dELGdEQUEwRDtBQUUxRCxvQ0FBOEU7QUFFOUUsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBRXZCLGtEQUFrRDtBQUNsRCxNQUFhLFlBQVk7SUFDdkIsWUFDa0IsUUFBc0IsRUFDdEIsV0FBNkIsSUFBQSwwQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFEekQsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpRDtJQUN4RSxDQUFDO0lBRUosZ0ZBQWdGO0lBQ2hGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3RDLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsTUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQXVCO1FBQ3RELElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxNQUE4RDtRQUNuRywrR0FBK0c7UUFDL0csc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQyxNQUFNLENBQUMsT0FB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QyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRCxvRkFBb0Y7QUFDcEYsU0FBZ0IsY0FBYyxDQUFDLENBQW9ELEVBQUUsUUFBc0I7SUFDekcsT0FBTyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELG9GQUFvRjtBQUNwRixTQUFnQix1QkFBdUIsQ0FBQyxNQUFjLEVBQUUsUUFBc0I7SUFDNUUsT0FBTyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLFNBQWdCLCtCQUErQixDQUFDLE1BQThEO0lBQzVHLFlBQVksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyB0b1dhc21VdHhvQ29pbk5hbWUsIFV0eG9Db2luTmFtZSwgV2FzbVV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcblxuY29uc3QgU2NyaXB0UmVjaXBpZW50UHJlZml4ID0gJ3NjcmlwdFB1YktleTonO1xuY29uc3QgT1BfUkVUVVJOID0gMHg2YTtcblxuLyoqIEFkZHJlc3MvbmV0d29yay1hd2FyZSByZWNpcGllbnQgY29udmVyc2lvbi4gKi9cbmV4cG9ydCBjbGFzcyBBZGRyZXNzQ29kZWMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FzbU5hbWU6IFdhc21VdHhvQ29pbk5hbWUgPSB0b1dhc21VdHhvQ29pbk5hbWUoY29pbk5hbWUpXG4gICkge31cblxuICAvKiogQ2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgYSBzY3JpcHQgcmVjaXBpZW50IChzdGFydHMgd2l0aCBgc2NyaXB0UHViS2V5OmApLiAqL1xuICBzdGF0aWMgaXNTY3JpcHRSZWNpcGllbnQoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFkZHJlc3MudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFNjcmlwdFJlY2lwaWVudFByZWZpeC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0IGFuIGV4dGVuZGVkIGFkZHJlc3MgdG8gZWl0aGVyIGEgcmVndWxhciBhZGRyZXNzIG9yIGEgcmF3IHNjcmlwdC4gKi9cbiAgc3RhdGljIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoZXh0ZW5kZWRBZGRyZXNzOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZyB9IHwgeyBzY3JpcHQ6IHN0cmluZyB9IHtcbiAgICBpZiAoQWRkcmVzc0NvZGVjLmlzU2NyaXB0UmVjaXBpZW50KGV4dGVuZGVkQWRkcmVzcykpIHtcbiAgICAgIHJldHVybiB7IHNjcmlwdDogZXh0ZW5kZWRBZGRyZXNzLnNsaWNlKFNjcmlwdFJlY2lwaWVudFByZWZpeC5sZW5ndGgpIH07XG4gICAgfVxuICAgIHJldHVybiB7IGFkZHJlc3M6IGV4dGVuZGVkQWRkcmVzcyB9O1xuICB9XG5cbiAgc3RhdGljIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQob3V0cHV0OiB7IGFtb3VudDogYmlnaW50IHwgbnVtYmVyIHwgc3RyaW5nOyBhZGRyZXNzPzogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICAvLyBJbiB0aGUgY2FzZSB0aGF0IHRoaXMgaXMgYW4gT1BfUkVUVVJOIG91dHB1dCBvciBhbm90aGVyIG5vbi1lbmNvZGFibGUgc2NyaXB0UHVia2V5LCB3ZSBkb250IGhhdmUgYW4gYWRkcmVzcy5cbiAgICAvLyBXZSB3aWxsIHZlcmlmeSB0aGF0IHRoZSBhbW91bnQgaXMgemVybywgYW5kIGlmIGl0IGlzbnQgdGhlbiB3ZSB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgIGlmICghb3V0cHV0LmFkZHJlc3MgfHwgQWRkcmVzc0NvZGVjLmlzU2NyaXB0UmVjaXBpZW50KG91dHB1dC5hZGRyZXNzKSkge1xuICAgICAgaWYgKG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSAhPT0gJzAnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgT25seSB6ZXJvIGFtb3VudHMgYWxsb3dlZCBmb3Igbm9uLWVuY29kZWFibGUgc2NyaXB0UHVia2V5czogYW1vdW50OiAke291dHB1dC5hbW91bnR9LCBhZGRyZXNzOiAke291dHB1dC5hZGRyZXNzfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZWNvZGUoYWRkcmVzczogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4oYWRkcmVzcywgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICBlbmNvZGUoc2NyaXB0OiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdCwgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHRoaXMuZGVjb2RlKGFkZHJlc3MpKSA9PT0gYWRkcmVzcztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQoZXh0ZW5kZWRBZGRyZXNzOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIGNvbnN0IHJlc3VsdCA9IEFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGV4dGVuZGVkQWRkcmVzcyk7XG4gICAgaWYgKCdzY3JpcHQnIGluIHJlc3VsdCkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlc3VsdC5zY3JpcHQsICdoZXgnKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuZGVjb2RlKHJlc3VsdC5hZGRyZXNzKSk7XG4gIH1cblxuICB0b091dHB1dFNjcmlwdCh2OiBzdHJpbmcgfCB7IGFkZHJlc3M6IHN0cmluZyB9IHwgeyBzY3JpcHQ6IHN0cmluZyB9KTogQnVmZmVyIHtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQodik7XG4gICAgfVxuICAgIGlmICgnc2NyaXB0JyBpbiB2KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20odi5zY3JpcHQsICdoZXgnKTtcbiAgICB9XG4gICAgaWYgKCdhZGRyZXNzJyBpbiB2KSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQodi5hZGRyZXNzKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlucHV0Jyk7XG4gIH1cblxuICB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChzY3JpcHQ6IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNjcmlwdFswXSA9PT0gT1BfUkVUVVJOID8gYCR7U2NyaXB0UmVjaXBpZW50UHJlZml4fSR7c2NyaXB0LnRvU3RyaW5nKCdoZXgnKX1gIDogdGhpcy5lbmNvZGUoc2NyaXB0KTtcbiAgfVxufVxuXG4vKiogTGVnYWN5IGhlbHBlciByZXRhaW5lZCBmb3IgY29uc3VtZXJzIHRoYXQgdXNlIHRoZSBtb2R1bGUtbGV2ZWwgcmVjaXBpZW50IEFQSS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NjcmlwdFJlY2lwaWVudChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFkZHJlc3NDb2RlYy5pc1NjcmlwdFJlY2lwaWVudChhZGRyZXNzKTtcbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdChleHRlbmRlZEFkZHJlc3M6IHN0cmluZyk6IHsgYWRkcmVzczogc3RyaW5nIH0gfCB7IHNjcmlwdDogc3RyaW5nIH0ge1xuICByZXR1cm4gQWRkcmVzc0NvZGVjLmZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoZXh0ZW5kZWRBZGRyZXNzKTtcbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KGV4dGVuZGVkQWRkcmVzczogc3RyaW5nLCBjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogQnVmZmVyIHtcbiAgcmV0dXJuIG5ldyBBZGRyZXNzQ29kZWMoY29pbk5hbWUpLmZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdChleHRlbmRlZEFkZHJlc3MpO1xufVxuXG4vKiogTGVnYWN5IGhlbHBlciByZXRhaW5lZCBmb3IgY29uc3VtZXJzIHRoYXQgdXNlIHRoZSBtb2R1bGUtbGV2ZWwgcmVjaXBpZW50IEFQSS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b091dHB1dFNjcmlwdCh2OiBzdHJpbmcgfCB7IGFkZHJlc3M6IHN0cmluZyB9IHwgeyBzY3JpcHQ6IHN0cmluZyB9LCBjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogQnVmZmVyIHtcbiAgcmV0dXJuIG5ldyBBZGRyZXNzQ29kZWMoY29pbk5hbWUpLnRvT3V0cHV0U2NyaXB0KHYpO1xufVxuXG4vKiogTGVnYWN5IGhlbHBlciByZXRhaW5lZCBmb3IgY29uc3VtZXJzIHRoYXQgdXNlIHRoZSBtb2R1bGUtbGV2ZWwgcmVjaXBpZW50IEFQSS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChzY3JpcHQ6IEJ1ZmZlciwgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgQWRkcmVzc0NvZGVjKGNvaW5OYW1lKS50b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChzY3JpcHQpO1xufVxuXG4vKiogTGVnYWN5IGhlbHBlciByZXRhaW5lZCBmb3IgY29uc3VtZXJzIHRoYXQgdXNlIHRoZSBtb2R1bGUtbGV2ZWwgcmVjaXBpZW50IEFQSS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50KG91dHB1dDogeyBhbW91bnQ6IGJpZ2ludCB8IG51bWJlciB8IHN0cmluZzsgYWRkcmVzcz86IHN0cmluZyB9KTogdm9pZCB7XG4gIEFkZHJlc3NDb2RlYy5hc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50KG91dHB1dCk7XG59XG4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3JlY2lwaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtSEEsOENBRUM7QUFHRCw4REFFQztBQUdELDhFQUVDO0FBR0Qsd0NBRUM7QUFHRCwwREFFQztBQUdELDBFQUVDO0FBOUlELGdEQUEwRDtBQUUxRCxvQ0FBOEU7QUFFOUUsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBT3ZCLGtEQUFrRDtBQUNsRCxNQUFhLFlBQVk7SUFDdkIsWUFDa0IsUUFBc0IsRUFDdEIsV0FBNkIsSUFBQSwwQkFBa0IsRUFBQyxRQUFRLENBQUM7UUFEekQsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpRDtJQUN4RSxDQUFDO0lBRUosZ0ZBQWdGO0lBQ2hGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3RDLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsTUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQXVCO1FBQ3RELElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxNQUE4RDtRQUNuRywrR0FBK0c7UUFDL0csc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQyxNQUFNLENBQUMsT0FB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b20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyB0b1dhc21VdHhvQ29pbk5hbWUsIFV0eG9Db2luTmFtZSwgV2FzbVV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcblxuY29uc3QgU2NyaXB0UmVjaXBpZW50UHJlZml4ID0gJ3NjcmlwdFB1YktleTonO1xuY29uc3QgT1BfUkVUVVJOID0gMHg2YTtcblxuZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzQ29kZWNPdXRwdXQge1xuICBhZGRyZXNzPzogc3RyaW5nIHwgbnVsbDtcbiAgc2NyaXB0OiBVaW50OEFycmF5O1xufVxuXG4vKiogQWRkcmVzcy9uZXR3b3JrLWF3YXJlIHJlY2lwaWVudCBjb252ZXJzaW9uLiAqL1xuZXhwb3J0IGNsYXNzIEFkZHJlc3NDb2RlYyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICAgIHB1YmxpYyByZWFkb25seSB3YXNtTmFtZTogV2FzbVV0eG9Db2luTmFtZSA9IHRvV2FzbVV0eG9Db2luTmFtZShjb2luTmFtZSlcbiAgKSB7fVxuXG4gIC8qKiBDaGVjayBpZiB0aGUgYWRkcmVzcyBpcyBhIHNjcmlwdCByZWNpcGllbnQgKHN0YXJ0cyB3aXRoIGBzY3JpcHRQdWJLZXk6YCkuICovXG4gIHN0YXRpYyBpc1NjcmlwdFJlY2lwaWVudChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWRkcmVzcy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoU2NyaXB0UmVjaXBpZW50UHJlZml4LnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgYW4gZXh0ZW5kZWQgYWRkcmVzcyB0byBlaXRoZXIgYSByZWd1bGFyIGFkZHJlc3Mgb3IgYSByYXcgc2NyaXB0LiAqL1xuICBzdGF0aWMgZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdChleHRlbmRlZEFkZHJlc3M6IHN0cmluZyk6IHsgYWRkcmVzczogc3RyaW5nIH0gfCB7IHNjcmlwdDogc3RyaW5nIH0ge1xuICAgIGlmIChBZGRyZXNzQ29kZWMuaXNTY3JpcHRSZWNpcGllbnQoZXh0ZW5kZWRBZGRyZXNzKSkge1xuICAgICAgcmV0dXJuIHsgc2NyaXB0OiBleHRlbmRlZEFkZHJlc3Muc2xpY2UoU2NyaXB0UmVjaXBpZW50UHJlZml4Lmxlbmd0aCkgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWRkcmVzczogZXh0ZW5kZWRBZGRyZXNzIH07XG4gIH1cblxuICBzdGF0aWMgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChvdXRwdXQ6IHsgYW1vdW50OiBiaWdpbnQgfCBudW1iZXIgfCBzdHJpbmc7IGFkZHJlc3M/OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgdGhpcyBpcyBhbiBPUF9SRVRVUk4gb3V0cHV0IG9yIGFub3RoZXIgbm9uLWVuY29kYWJsZSBzY3JpcHRQdWJrZXksIHdlIGRvbnQgaGF2ZSBhbiBhZGRyZXNzLlxuICAgIC8vIFdlIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIGFtb3VudCBpcyB6ZXJvLCBhbmQgaWYgaXQgaXNudCB0aGVuIHdlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgaWYgKCFvdXRwdXQuYWRkcmVzcyB8fCBBZGRyZXNzQ29kZWMuaXNTY3JpcHRSZWNpcGllbnQob3V0cHV0LmFkZHJlc3MpKSB7XG4gICAgICBpZiAob3V0cHV0LmFtb3VudC50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBPbmx5IHplcm8gYW1vdW50cyBhbGxvd2VkIGZvciBub24tZW5jb2RlYWJsZSBzY3JpcHRQdWJrZXlzOiBhbW91bnQ6ICR7b3V0cHV0LmFtb3VudH0sIGFkZHJlc3M6ICR7b3V0cHV0LmFkZHJlc3N9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlY29kZShhZGRyZXNzOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gd2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbihhZGRyZXNzLCB0aGlzLndhc21OYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgY2hhbmdlIGFkZHJlc3MgdG8gaXRzIHNjcmlwdC4gQ2hhbmdlIGFkZHJlc3NlcyBhcmUgYWx3YXlzIHRyYW5zcGFyZW50IHdhbGxldFxuICAgKiBhZGRyZXNzZXMsIHNvIGNvaW5zIHdob3NlIGFkZHJlc3MgcmVzb2x1dGlvbiBkZXBlbmRzIG9uIHRyYW5zYWN0aW9uIGNvbnRleHQgKGUuZy4gWmNhc2hcbiAgICogVW5pZmllZCBBZGRyZXNzZXMgd2l0aCBhIGJvdW5kIHJlY2lwaWVudCBwcmVmZXJlbmNlKSBvdmVycmlkZSB0aGlzIHRvIGJ5cGFzcyB0aGF0XG4gICAqIGNvbnRleHQuIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIGRlZmVycyB0byBkZWNvZGUuXG4gICAqL1xuICBkZWNvZGVDaGFuZ2VBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiB0aGlzLmRlY29kZShhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IGFuIG91dHB1dCBhZGRyZXNzIHJlcHJlc2VudHMgaXRzIHJhdyBzY3JpcHQuIENvaW5zIHdpdGggbXVsdGlwbGUgcmVjZWl2ZXJcbiAgICogdHlwZXMgbWF5IG92ZXJyaWRlIHRoaXMgdG8gY2hvb3NlIHRoZSByZWNlaXZlciByZXByZXNlbnRlZCBieSBwYXJzZWQgb3V0cHV0IG1ldGFkYXRhLlxuICAgKi9cbiAgaXNNYXRjaGluZ1NjcmlwdChvdXRwdXQ6IHsgYWRkcmVzcz86IHN0cmluZyB8IG51bGw7IHNjcmlwdDogVWludDhBcnJheSB9KTogYm9vbGVhbiB7XG4gICAgaWYgKG91dHB1dC5hZGRyZXNzID09PSB1bmRlZmluZWQgfHwgb3V0cHV0LmFkZHJlc3MgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KG91dHB1dC5hZGRyZXNzKS5lcXVhbHMoQnVmZmVyLmZyb20ob3V0cHV0LnNjcmlwdCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ29udmVydCBhbiBvdXRwdXQgc2NyaXB0IGJhY2sgdG8gaXRzIGFkZHJlc3MgZm9ybS4gVGhlIG9wdGlvbmFsIG9yaWdpbmFsIGFkZHJlc3MgaXMgYWNjZXB0ZWRcbiAgICogYnkgY29pbi1zcGVjaWZpYyBjb2RlY3MgdGhhdCBuZWVkIHRvIHByZXNlcnZlIGFuIGFkZHJlc3Mgbm90IHJlLWVuY29kYWJsZSBmcm9tIHRoZSBzY3JpcHQuXG4gICAqL1xuICB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChzY3JpcHQ6IEJ1ZmZlciwgX2FkZHJlc3M/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzY3JpcHRbMF0gPT09IE9QX1JFVFVSTiA/IGAke1NjcmlwdFJlY2lwaWVudFByZWZpeH0ke3NjcmlwdC50b1N0cmluZygnaGV4Jyl9YCA6IHRoaXMuZW5jb2RlKHNjcmlwdCk7XG4gIH1cblxuICBlbmNvZGUoc2NyaXB0OiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdCwgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlKHRoaXMuZGVjb2RlKGFkZHJlc3MpKSA9PT0gYWRkcmVzcztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQoZXh0ZW5kZWRBZGRyZXNzOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIGNvbnN0IHJlc3VsdCA9IEFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGV4dGVuZGVkQWRkcmVzcyk7XG4gICAgaWYgKCdzY3JpcHQnIGluIHJlc3VsdCkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlc3VsdC5zY3JpcHQsICdoZXgnKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuZGVjb2RlKHJlc3VsdC5hZGRyZXNzKSk7XG4gIH1cblxuICB0b091dHB1dFNjcmlwdCh2OiBzdHJpbmcgfCB7IGFkZHJlc3M6IHN0cmluZyB9IHwgeyBzY3JpcHQ6IHN0cmluZyB9KTogQnVmZmVyIHtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQodik7XG4gICAgfVxuICAgIGlmICgnc2NyaXB0JyBpbiB2KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20odi5zY3JpcHQsICdoZXgnKTtcbiAgICB9XG4gICAgaWYgKCdhZGRyZXNzJyBpbiB2KSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQodi5hZGRyZXNzKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlucHV0Jyk7XG4gIH1cbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JpcHRSZWNpcGllbnQoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBBZGRyZXNzQ29kZWMuaXNTY3JpcHRSZWNpcGllbnQoYWRkcmVzcyk7XG59XG5cbi8qKiBMZWdhY3kgaGVscGVyIHJldGFpbmVkIGZvciBjb25zdW1lcnMgdGhhdCB1c2UgdGhlIG1vZHVsZS1sZXZlbCByZWNpcGllbnQgQVBJLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoZXh0ZW5kZWRBZGRyZXNzOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZyB9IHwgeyBzY3JpcHQ6IHN0cmluZyB9IHtcbiAgcmV0dXJuIEFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGV4dGVuZGVkQWRkcmVzcyk7XG59XG5cbi8qKiBMZWdhY3kgaGVscGVyIHJldGFpbmVkIGZvciBjb25zdW1lcnMgdGhhdCB1c2UgdGhlIG1vZHVsZS1sZXZlbCByZWNpcGllbnQgQVBJLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdChleHRlbmRlZEFkZHJlc3M6IHN0cmluZywgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IEJ1ZmZlciB7XG4gIHJldHVybiBuZXcgQWRkcmVzc0NvZGVjKGNvaW5OYW1lKS5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQoZXh0ZW5kZWRBZGRyZXNzKTtcbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9PdXRwdXRTY3JpcHQodjogc3RyaW5nIHwgeyBhZGRyZXNzOiBzdHJpbmcgfSB8IHsgc2NyaXB0OiBzdHJpbmcgfSwgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IEJ1ZmZlciB7XG4gIHJldHVybiBuZXcgQWRkcmVzc0NvZGVjKGNvaW5OYW1lKS50b091dHB1dFNjcmlwdCh2KTtcbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoc2NyaXB0OiBCdWZmZXIsIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBzdHJpbmcge1xuICByZXR1cm4gbmV3IEFkZHJlc3NDb2RlYyhjb2luTmFtZSkudG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoc2NyaXB0KTtcbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChvdXRwdXQ6IHsgYW1vdW50OiBiaWdpbnQgfCBudW1iZXIgfCBzdHJpbmc7IGFkZHJlc3M/OiBzdHJpbmcgfSk6IHZvaWQge1xuICBBZGRyZXNzQ29kZWMuYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChvdXRwdXQpO1xufVxuIl19
@@ -42,6 +42,7 @@ const utxo_core_1 = require("@bitgo/utxo-core");
42
42
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
43
43
  const testutils_1 = require("@bitgo/wasm-utxo/testutils");
44
44
  const fixedScript_1 = require("../../src/transaction/fixedScript");
45
+ const recipient_1 = require("../../src/transaction/recipient");
45
46
  const bip322_1 = require("../../src/transaction/bip322");
46
47
  function createTestWalletKeys(seed) {
47
48
  const keys = (0, testutils_1.getKeyTriple)(seed);
@@ -389,18 +390,27 @@ describe('BIP322', function () {
389
390
  }
390
391
  it('should successfully run with a user nonce', function () {
391
392
  const psbt = createUnsignedPsbt();
392
- assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 0);
393
+ assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
394
+ addressCodec: new recipient_1.AddressCodec('btc'),
395
+ replayProtection: { publicKeys: [] },
396
+ }), 0);
393
397
  });
394
398
  it('should successfully run with a user signature', function () {
395
399
  const psbt = createUnsignedPsbt();
396
400
  psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
397
- assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 1);
401
+ assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
402
+ addressCodec: new recipient_1.AddressCodec('btc'),
403
+ replayProtection: { publicKeys: [] },
404
+ }), 1);
398
405
  });
399
406
  it('should successfully run with a hsm signature', function () {
400
407
  const psbt = createUnsignedPsbt();
401
408
  psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
402
409
  psbt.sign(wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
403
- assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 2);
410
+ assertCommon((0, fixedScript_1.explainPsbtWasm)(psbt, walletKeys, {
411
+ addressCodec: new recipient_1.AddressCodec('btc'),
412
+ replayProtection: { publicKeys: [] },
413
+ }), 2);
404
414
  });
405
415
  });
406
416
  describe('p2trMusig2 BIP322 signing', function () {
@@ -478,4 +488,4 @@ describe('BIP322', function () {
478
488
  });
479
489
  });
480
490
  });
481
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFBMkM7QUFDM0MsZ0RBQXdEO0FBQ3hELGdEQUErRjtBQUMvRiwwREFBMEQ7QUFFMUQsbUVBQW9FO0FBQ3BFLHlEQU9zQztBQUV0QyxTQUFTLG9CQUFvQixDQUFDLElBQVk7SUFJeEMsTUFBTSxJQUFJLEdBQUcsSUFBQSx3QkFBWSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE9BQU87UUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFtQjtRQUNqRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFtQjtLQUN4RCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBQ25FLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQzdELENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFVBQTRDLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDNUYsT0FBTyw2QkFBaUIsQ0FB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LENBQUM7WUFDbEMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQzdFLGdCQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztZQUN0RixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMjIgYXMgY29yZUJpcDMyMiB9IGZyb20gJ0BiaXRnby91dHhvLWNvcmUnO1xuaW1wb3J0IHsgYmlwMzIyIGFzIHdhc21CaXAzMjIsIGZpeGVkU2NyaXB0V2FsbGV0LCBCSVAzMiwgdHlwZSBUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IGdldEtleVRyaXBsZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHsgZXhwbGFpblBzYnRXYXNtIH0gZnJvbSAnLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IGdldEtleVRyaXBsZShzZWVkKTtcbiAgcmV0dXJuIHtcbiAgICB4cHViczoga2V5cy5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgICB4cHJpdnM6IGtleXMubWFwKChrKSA9PiBrLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZXJpdmVkUHVia2V5cyhzZWVkOiBzdHJpbmcsIGNoYWluOiBudW1iZXIsIGluZGV4OiBudW1iZXIpOiBUcmlwbGU8c3RyaW5nPiB7XG4gIGNvbnN0IGtleXMgPSBnZXRLZXlUcmlwbGUoc2VlZCk7XG4gIHJldHVybiBrZXlzLm1hcCgoaykgPT5cbiAgICBCdWZmZXIuZnJvbShrLmRlcml2ZVBhdGgoYG0vMC8wLyR7Y2hhaW59LyR7aW5kZXh9YCkucHVibGljS2V5KS50b1N0cmluZygnaGV4JylcbiAgKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgJ2J0YycpO1xufVxuXG5kZXNjcmliZSgnQklQMzIyJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2Uoc2VyaWFsaXplZCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGRlc2VyaWFsaXplZCwgbWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgYW4gdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGU7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gJ2JpcDMyMl92ZXJpZnlfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHAyc2hQMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0hlbGxvLCBCaXRHbyEnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaWduIHdpdGggdXNlciBhbmQgYml0Z28ga2V5c1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAyMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gNTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1AyV1NIIHByb29mIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IG11bHRpcGxlIGlucHV0cyBpbiBhIHNpbmdsZSBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbJ01lc3NhZ2UgMScsICdNZXNzYWdlIDInXTtcbiAgICAgIGNvbnN0IHNjcmlwdElkcyA9IFtcbiAgICAgICAgeyBjaGFpbjogMTAsIGluZGV4OiAwIH0sXG4gICAgICAgIHsgY2hhaW46IDIwLCBpbmRleDogMSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNjcmlwdFR5cGVzOiBCSVAzMjJNZXNzYWdlSW5mb1snc2NyaXB0VHlwZSddW10gPSBbJ3Ayc2hQMndzaCcsICdwMndzaCddO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZXNbaV0sXG4gICAgICAgICAgc2NyaXB0SWQ6IHNjcmlwdElkc1tpXSxcbiAgICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpZ24gYWxsIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwc2J0LnNpZ24oaSwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VJbmZvOiBCSVAzMjJNZXNzYWdlSW5mb1tdID0gbWVzc2FnZXMubWFwKChtc2csIGkpID0+IHtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiBnZXRBZGRyZXNzKHdhbGxldEtleXMsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KSxcbiAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICBzY3JpcHRUeXBlOiBzY3JpcHRUeXBlc1tpXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm8sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB3cm9uZyBtZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ09yaWdpbmFsIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRGlmZmVyZW50IG1lc3NhZ2UnLCAvLyBXcm9uZyBtZXNzYWdlXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdsdGMnKSxcbiAgICAgICAgL09ubHkgdGJ0YzQgb3IgYnRjIGNvaW5OYW1lcyBhcmUgc3VwcG9ydGVkL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfZ2VuZXJhdGVfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG1lc3NhZ2UgbGlzdCBmcm9tIHZhbGlkIHByb29mcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQcm9vZiBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLmFkZHJlc3MsIGFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5tZXNzYWdlLCBtZXNzYWdlVGV4dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZHVwbGljYXRlIGFkZHJlc3NlcyB3aXRoIHNhbWUgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdTYW1lIG1lc3NhZ2UnO1xuXG4gICAgICAvLyBDcmVhdGUgdHdvIHNlcGFyYXRlIFBTQlRzIGZvciB0aGUgc2FtZSBhZGRyZXNzL21lc3NhZ2VcbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyk7XG5cbiAgICAgIC8vIFNob3VsZCBkZWR1cGxpY2F0ZSB0byBhIHNpbmdsZSBlbnRyeVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgZHVwbGljYXRlIGFkZHJlc3Mgd2l0aCBkaWZmZXJlbnQgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogJ01lc3NhZ2UgMicsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAyJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9EdXBsaWNhdGUgYWRkcmVzcy4qaGFzIGRpZmZlcmVudCBtZXNzYWdlcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1ZhbGlkIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1dyb25nIG1lc3NhZ2UnLCAvLyBEb2Vzbid0IG1hdGNoIHdoYXQgd2FzIHNpZ25lZFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKSxcbiAgICAgICAgL2RpZCBub3QgaGF2ZSBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCSVAzMjIgUHJvb2YnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9ICdJIGNhbiBiZWxpZXZlIGl0IGlzIG5vdCBidXR0ZXInO1xuICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgY29uc3QgaW5kZXggPSAwO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoJ2JpcDMyMi1wcm9vZicpO1xuICAgIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHhwdWJzKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuc2lnbmVkUHNidCgpOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7IG1lc3NhZ2UsIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LCByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyB9KTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzc2VydENvbW1vbihyZXN1bHQ6IFJldHVyblR5cGU8dHlwZW9mIGV4cGxhaW5Qc2J0V2FzbT4sIGV4cGVjdGVkU2lnbmVyQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRBbW91bnQsICcwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNoYW5nZUFtb3VudCwgJzAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRzWzBdLmFkZHJlc3MsICdzY3JpcHRQdWJLZXk6NmEnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmVlLCAnMCcpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiByZXN1bHQuaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lckNvdW50ID0gT2JqZWN0LnZhbHVlcyhpbnB1dC5zaWduZWRCeSkuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25lckNvdW50LCBleHBlY3RlZFNpZ25lckNvdW50KTtcbiAgICAgIH1cbiAgICAgIGFzc2VydC5vayhyZXN1bHQubWVzc2FnZXMpO1xuICAgICAgZm9yIChjb25zdCBvYmogb2YgcmVzdWx0Lm1lc3NhZ2VzID8/IFtdKSB7XG4gICAgICAgIGFzc2VydC5vayhvYmouYWRkcmVzcyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmoubWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSB1c2VyIG5vbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgYXNzZXJ0Q29tbW9uKGV4cGxhaW5Qc2J0V2FzbShwc2J0LCB3YWxsZXRLZXlzLCB7IHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW10gfSB9KSwgMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSBydW4gd2l0aCBhIHVzZXIgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBhc3NlcnRDb21tb24oZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9IH0pLCAxKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJ1biB3aXRoIGEgaHNtIHNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSBjcmVhdGVVbnNpZ25lZFBzYnQoKTtcbiAgICAgIHBzYnQuc2lnbihCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICBhc3NlcnRDb21tb24oZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9IH0pLCAyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3AydHJNdXNpZzIgQklQMzIyIHNpZ25pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHZlcmlmaWFibGUgbXVzaWcyIHNpZ25hdHVyZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gJ3AydHJNdXNpZzJfc2lnaGFzaF90ZXN0JztcbiAgICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICAgIGNvbnN0IGNoYWluID0gNDA7IC8vIHAydHJNdXNpZzIgZXh0ZXJuYWxcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0JJUDMyMiBzaWdoYXNoIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgc2lnblBhdGg6IHsgc2lnbmVyOiAndXNlcicsIGNvc2lnbmVyOiAnYml0Z28nIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdXNlcktleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pO1xuICAgICAgcHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyh1c2VyS2V5KTtcbiAgICAgIHBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXMoYml0Z29LZXkpO1xuICAgICAgcHNidC5zaWduKHVzZXJLZXkpO1xuICAgICAgcHNidC5zaWduKGJpdGdvS2V5KTtcblxuICAgICAgY29uc3Qgc2lnbmVycyA9IHdhc21CaXAzMjIudmVyaWZ5QmlwMzIyUHNidElucHV0KHBzYnQsIDAsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ25lcnMuaW5jbHVkZXMoJ3VzZXInKSk7XG4gICAgICBhc3NlcnQub2soc2lnbmVycy5pbmNsdWRlcygnYml0Z28nKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1dHhvbGliIGludGVyb3BlcmFiaWxpdHkgLSB3YXNtLXV0eG8gY2FuIHZlcmlmeSB1dHhvbGliLWdlbmVyYXRlZCBCSVAzMjIgcHJvb2ZzJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyBjcm9zcy1saWJyYXJ5IGNvbXBhdGliaWxpdHk6XG4gICAgLy8gMS4gdXR4by1jb3JlICh1dHhvbGliKSBjcmVhdGVzIGEgQklQMzIyIFBTQlRcbiAgICAvLyAyLiB3YXNtLXV0eG8gc2lnbnMgaXQgd2l0aCBtdXNpZzJcbiAgICAvLyAzLiB1dHhvLWNvcmUgdmFsaWRhdGVzIHRoZSB3YXNtLXV0eG8gc2lnbmF0dXJlc1xuICAgIC8vXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2FzbS11dHhvIGFuZCB1dHhvbGliIGdlbmVyYXRlIGNvbXBhdGlibGUgQklQMzIyIHByb29mcy5cblxuICAgIGl0KCdzaG91bGQgc2lnbiB1dHhvbGliLWNyZWF0ZWQgQklQMzIyIFBTQlQgYW5kIHZhbGlkYXRlIHdpdGggdXR4b2xpYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSAncDJ0ck11c2lnMl91dHhvbGliX2NvbXBhdF90ZXN0JztcbiAgICAgIGNvbnN0IHsgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcblxuICAgICAgLy8gQ3JlYXRlIHV0eG9saWIgUm9vdFdhbGxldEtleXMgZm9yIHV0eG8tY29yZSBQU0JUIGNvbnN0cnVjdGlvblxuICAgICAgY29uc3QgdXR4b2xpYlJvb3RXYWxsZXRLZXlzID0gbmV3IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXModXR4b2xpYi50ZXN0dXRpbC5nZXRLZXlUcmlwbGUoc2VlZCkpO1xuXG4gICAgICAvLyBwMnRyTXVzaWcyIGV4dGVybmFsIGNoYWluIGNvZGVcbiAgICAgIGNvbnN0IGNoYWluID0gdXR4b2xpYi5iaXRnby5nZXRFeHRlcm5hbENoYWluQ29kZSgncDJ0ck11c2lnMicpO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnQklQMzIyIHV0eG9saWIgaW50ZXJvcCB0ZXN0JztcblxuICAgICAgLy8gQ3JlYXRlIEJJUDMyMiBQU0JUIHVzaW5nIHV0eG8tY29yZVxuICAgICAgY29uc3QgcHNidCA9IGNvcmVCaXAzMjIuY3JlYXRlQmFzZVRvU2lnblBzYnQodXR4b2xpYlJvb3RXYWxsZXRLZXlzLCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICAgICAgY29yZUJpcDMyMi5hZGRCaXAzMjJJbnB1dFdpdGhDaGFpbkFuZEluZGV4KHBzYnQsIG1lc3NhZ2VUZXh0LCB1dHhvbGliUm9vdFdhbGxldEtleXMsIHtcbiAgICAgICAgY2hhaW4sXG4gICAgICAgIGluZGV4LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENvbnZlcnQgdG8gd2FzbS11dHhvIFBTQlQgZm9yIHNpZ25pbmdcbiAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LnRvQnVmZmVyKCksICdidGMnKTtcblxuICAgICAgLy8gR2VuZXJhdGUgbXVzaWcyIG5vbmNlcyBhbmQgc2lnbiB3aXRoIHdhc20tdXR4b1xuICAgICAgY29uc3QgdXNlcktleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pO1xuXG4gICAgICB3YXNtUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyh1c2VyS2V5KTtcbiAgICAgIHdhc21Qc2J0LmdlbmVyYXRlTXVzaWcyTm9uY2VzKGJpdGdvS2V5KTtcbiAgICAgIHdhc21Qc2J0LnNpZ24odXNlcktleSk7XG4gICAgICB3YXNtUHNidC5zaWduKGJpdGdvS2V5KTtcblxuICAgICAgLy8gQ29udmVydCBiYWNrIHRvIHV0eG9saWIgUFNCVCBmb3IgdmFsaWRhdGlvblxuICAgICAgY29uc3Qgc2lnbmVkUHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoXG4gICAgICAgIEJ1ZmZlci5mcm9tKHdhc21Qc2J0LnNlcmlhbGl6ZSgpKSxcbiAgICAgICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICAgICApO1xuXG4gICAgICAvLyBWYWxpZGF0aW9uIHNob3VsZCBzdWNjZWVkIC0gd2FzbS11dHhvIHNpZ25hdHVyZXMgYXJlIGNvbXBhdGlibGUgd2l0aCB1dHhvbGliXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdXR4b2xpYi5iaXRnby5nZXRTaWduYXR1cmVWYWxpZGF0aW9uQXJyYXlQc2J0KHNpZ25lZFBzYnQsIHV0eG9saWJSb290V2FsbGV0S2V5cyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IGJvdGggdXNlciAoaW5kZXggMCkgYW5kIGJpdGdvIChpbmRleCAyKSBzaWduYXR1cmVzIGFyZSB2YWxpZFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZhbGlkYXRpb25SZXN1bHQubGVuZ3RoLCAxKTtcbiAgICAgIGNvbnN0IFtpbnB1dEluZGV4LCBzaWdWYWxpZGF0aW9uXSA9IHZhbGlkYXRpb25SZXN1bHRbMF07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW5wdXRJbmRleCwgMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnVmFsaWRhdGlvblswXSwgdHJ1ZSwgJ3VzZXIgc2lnbmF0dXJlIHNob3VsZCBiZSB2YWxpZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1ZhbGlkYXRpb25bMV0sIGZhbHNlLCAnYmFja3VwIHNpZ25hdHVyZSBzaG91bGQgbm90IGJlIHByZXNlbnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdWYWxpZGF0aW9uWzJdLCB0cnVlLCAnYml0Z28gc2lnbmF0dXJlIHNob3VsZCBiZSB2YWxpZCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFBMkM7QUFDM0MsZ0RBQXdEO0FBQ3hELGdEQUErRjtBQUMvRiwwREFBMEQ7QUFFMUQsbUVBQW9FO0FBQ3BFLCtEQUErRDtBQUMvRCx5REFPc0M7QUFFdEMsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBSXhDLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxPQUFPO1FBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBbUI7UUFDakUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBbUI7S0FDeEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUNuRSxNQUFNLElBQUksR0FBRyxJQUFBLHdCQUFZLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUM3RCxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxVQUE0QyxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBQzVGLE9B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QWdCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLGdCQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztZQUM3RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLHdDQUF3QyxDQUFDLENBQUM7WUFDdEYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIyIGFzIGNvcmVCaXAzMjIgfSBmcm9tICdAYml0Z28vdXR4by1jb3JlJztcbmltcG9ydCB7IGJpcDMyMiBhcyB3YXNtQmlwMzIyLCBmaXhlZFNjcmlwdFdhbGxldCwgQklQMzIsIHR5cGUgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvL3Rlc3R1dGlscyc7XG5cbmltcG9ydCB7IGV4cGxhaW5Qc2J0V2FzbSB9IGZyb20gJy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBBZGRyZXNzQ29kZWMgfSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vcmVjaXBpZW50JztcbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IGdldEtleVRyaXBsZShzZWVkKTtcbiAgcmV0dXJuIHtcbiAgICB4cHViczoga2V5cy5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgICB4cHJpdnM6IGtleXMubWFwKChrKSA9PiBrLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZXJpdmVkUHVia2V5cyhzZWVkOiBzdHJpbmcsIGNoYWluOiBudW1iZXIsIGluZGV4OiBudW1iZXIpOiBUcmlwbGU8c3RyaW5nPiB7XG4gIGNvbnN0IGtleXMgPSBnZXRLZXlUcmlwbGUoc2VlZCk7XG4gIHJldHVybiBrZXlzLm1hcCgoaykgPT5cbiAgICBCdWZmZXIuZnJvbShrLmRlcml2ZVBhdGgoYG0vMC8wLyR7Y2hhaW59LyR7aW5kZXh9YCkucHVibGljS2V5KS50b1N0cmluZygnaGV4JylcbiAgKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgJ2J0YycpO1xufVxuXG5kZXNjcmliZSgnQklQMzIyJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2Uoc2VyaWFsaXplZCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGRlc2VyaWFsaXplZCwgbWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgaXMgYW4gdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0eEhleDogJzAxMDIwMycsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ3NvbWVBZGRyZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdzb21lTWVzc2FnZScsXG4gICAgICAgICAgICBwdWJrZXlzOiBbJ3B1YmtleTEnLCAncHVia2V5MicsICdwdWJrZXkzJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGU7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWVkID0gJ2JpcDMyMl92ZXJpZnlfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHAyc2hQMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0hlbGxvLCBCaXRHbyEnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaWduIHdpdGggdXNlciBhbmQgYml0Z28ga2V5c1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMndzaCBQU0JUIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAyMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gNTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1AyV1NIIHByb29mIHRlc3QnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IG11bHRpcGxlIGlucHV0cyBpbiBhIHNpbmdsZSBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbJ01lc3NhZ2UgMScsICdNZXNzYWdlIDInXTtcbiAgICAgIGNvbnN0IHNjcmlwdElkcyA9IFtcbiAgICAgICAgeyBjaGFpbjogMTAsIGluZGV4OiAwIH0sXG4gICAgICAgIHsgY2hhaW46IDIwLCBpbmRleDogMSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHNjcmlwdFR5cGVzOiBCSVAzMjJNZXNzYWdlSW5mb1snc2NyaXB0VHlwZSddW10gPSBbJ3Ayc2hQMndzaCcsICdwMndzaCddO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgICAgbWVzc2FnZTogbWVzc2FnZXNbaV0sXG4gICAgICAgICAgc2NyaXB0SWQ6IHNjcmlwdElkc1tpXSxcbiAgICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpZ24gYWxsIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwc2J0LnNpZ24oaSwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VJbmZvOiBCSVAzMjJNZXNzYWdlSW5mb1tdID0gbWVzc2FnZXMubWFwKChtc2csIGkpID0+IHtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiBnZXRBZGRyZXNzKHdhbGxldEtleXMsIHNjcmlwdElkc1tpXS5jaGFpbiwgc2NyaXB0SWRzW2ldLmluZGV4KSxcbiAgICAgICAgICBtZXNzYWdlOiBtc2csXG4gICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICBzY3JpcHRUeXBlOiBzY3JpcHRUeXBlc1tpXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm8sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB3cm9uZyBtZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ09yaWdpbmFsIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGU6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlID0ge1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRGlmZmVyZW50IG1lc3NhZ2UnLCAvLyBXcm9uZyBtZXNzYWdlXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnYnRjJyksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMCcsXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdsdGMnKSxcbiAgICAgICAgL09ubHkgdGJ0YzQgb3IgYnRjIGNvaW5OYW1lcyBhcmUgc3VwcG9ydGVkL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfZ2VuZXJhdGVfdGVzdCc7XG4gICAgY29uc3QgeyB4cHVicywgeHByaXZzIH0gPSBjcmVhdGVUZXN0V2FsbGV0S2V5cyhzZWVkKTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbSh4cHVicyk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIG1lc3NhZ2UgbGlzdCBmcm9tIHZhbGlkIHByb29mcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQcm9vZiBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLmFkZHJlc3MsIGFkZHJlc3MpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5tZXNzYWdlLCBtZXNzYWdlVGV4dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlZHVwbGljYXRlIGFkZHJlc3NlcyB3aXRoIHNhbWUgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdTYW1lIG1lc3NhZ2UnO1xuXG4gICAgICAvLyBDcmVhdGUgdHdvIHNlcGFyYXRlIFBTQlRzIGZvciB0aGUgc2FtZSBhZGRyZXNzL21lc3NhZ2VcbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyk7XG5cbiAgICAgIC8vIFNob3VsZCBkZWR1cGxpY2F0ZSB0byBhIHNpbmdsZSBlbnRyeVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgZHVwbGljYXRlIGFkZHJlc3Mgd2l0aCBkaWZmZXJlbnQgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IHBzYnQxID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQxLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQxLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHNidDIgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidDIsIHtcbiAgICAgICAgbWVzc2FnZTogJ01lc3NhZ2UgMicsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidDIuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuXG4gICAgICBjb25zdCBwdWJrZXlzID0gZ2V0RGVyaXZlZFB1YmtleXMoc2VlZCwgY2hhaW4sIGluZGV4KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG5cbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVzOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQxLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFt7IGFkZHJlc3MsIG1lc3NhZ2U6ICdNZXNzYWdlIDEnLCBwdWJrZXlzLCBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0Mi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAyJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9EdXBsaWNhdGUgYWRkcmVzcy4qaGFzIGRpZmZlcmVudCBtZXNzYWdlcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIHByb29mJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW4gPSAxMDtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ1ZhbGlkIG1lc3NhZ2UnO1xuXG4gICAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LFxuICAgICAgICByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyxcbiAgICAgIH0pO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1dyb25nIG1lc3NhZ2UnLCAvLyBEb2Vzbid0IG1hdGNoIHdoYXQgd2FzIHNpZ25lZFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKSxcbiAgICAgICAgL2RpZCBub3QgaGF2ZSBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCSVAzMjIgUHJvb2YnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9ICdJIGNhbiBiZWxpZXZlIGl0IGlzIG5vdCBidXR0ZXInO1xuICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgY29uc3QgaW5kZXggPSAwO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoJ2JpcDMyMi1wcm9vZicpO1xuICAgIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHhwdWJzKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuc2lnbmVkUHNidCgpOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7IG1lc3NhZ2UsIHNjcmlwdElkOiB7IGNoYWluLCBpbmRleCB9LCByb290V2FsbGV0S2V5czogd2FsbGV0S2V5cyB9KTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzc2VydENvbW1vbihyZXN1bHQ6IFJldHVyblR5cGU8dHlwZW9mIGV4cGxhaW5Qc2J0V2FzbT4sIGV4cGVjdGVkU2lnbmVyQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRBbW91bnQsICcwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNoYW5nZUFtb3VudCwgJzAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5vdXRwdXRzWzBdLmFkZHJlc3MsICdzY3JpcHRQdWJLZXk6NmEnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmVlLCAnMCcpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiByZXN1bHQuaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHNpZ25lckNvdW50ID0gT2JqZWN0LnZhbHVlcyhpbnB1dC5zaWduZWRCeSkuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25lckNvdW50LCBleHBlY3RlZFNpZ25lckNvdW50KTtcbiAgICAgIH1cbiAgICAgIGFzc2VydC5vayhyZXN1bHQubWVzc2FnZXMpO1xuICAgICAgZm9yIChjb25zdCBvYmogb2YgcmVzdWx0Lm1lc3NhZ2VzID8/IFtdKSB7XG4gICAgICAgIGFzc2VydC5vayhvYmouYWRkcmVzcyk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvYmoubWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSB1c2VyIG5vbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgYXNzZXJ0Q29tbW9uKFxuICAgICAgICBleHBsYWluUHNidFdhc20ocHNidCwgd2FsbGV0S2V5cywge1xuICAgICAgICAgIGFkZHJlc3NDb2RlYzogbmV3IEFkZHJlc3NDb2RlYygnYnRjJyksXG4gICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9LFxuICAgICAgICB9KSxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHJ1biB3aXRoIGEgdXNlciBzaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwc2J0ID0gY3JlYXRlVW5zaWduZWRQc2J0KCk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIGFzc2VydENvbW1vbihcbiAgICAgICAgZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHtcbiAgICAgICAgICBhZGRyZXNzQ29kZWM6IG5ldyBBZGRyZXNzQ29kZWMoJ2J0YycpLFxuICAgICAgICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW10gfSxcbiAgICAgICAgfSksXG4gICAgICAgIDFcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcnVuIHdpdGggYSBoc20gc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IGNyZWF0ZVVuc2lnbmVkUHNidCgpO1xuICAgICAgcHNidC5zaWduKEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcbiAgICAgIGFzc2VydENvbW1vbihcbiAgICAgICAgZXhwbGFpblBzYnRXYXNtKHBzYnQsIHdhbGxldEtleXMsIHtcbiAgICAgICAgICBhZGRyZXNzQ29kZWM6IG5ldyBBZGRyZXNzQ29kZWMoJ2J0YycpLFxuICAgICAgICAgIHJlcGxheVByb3RlY3Rpb246IHsgcHVibGljS2V5czogW10gfSxcbiAgICAgICAgfSksXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwMnRyTXVzaWcyIEJJUDMyMiBzaWduaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSB2ZXJpZmlhYmxlIG11c2lnMiBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9ICdwMnRyTXVzaWcyX3NpZ2hhc2hfdGVzdCc7XG4gICAgICBjb25zdCB7IHhwdWJzLCB4cHJpdnMgfSA9IGNyZWF0ZVRlc3RXYWxsZXRLZXlzKHNlZWQpO1xuICAgICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgICBjb25zdCBjaGFpbiA9IDQwOyAvLyBwMnRyTXVzaWcyIGV4dGVybmFsXG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdCSVAzMjIgc2lnaGFzaCB0ZXN0JztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICAgIHNpZ25QYXRoOiB7IHNpZ25lcjogJ3VzZXInLCBjb3NpZ25lcjogJ2JpdGdvJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHVzZXJLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSk7XG4gICAgICBjb25zdCBiaXRnb0tleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKTtcbiAgICAgIHBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXModXNlcktleSk7XG4gICAgICBwc2J0LmdlbmVyYXRlTXVzaWcyTm9uY2VzKGJpdGdvS2V5KTtcbiAgICAgIHBzYnQuc2lnbih1c2VyS2V5KTtcbiAgICAgIHBzYnQuc2lnbihiaXRnb0tleSk7XG5cbiAgICAgIGNvbnN0IHNpZ25lcnMgPSB3YXNtQmlwMzIyLnZlcmlmeUJpcDMyMlBzYnRJbnB1dChwc2J0LCAwLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5vayhzaWduZXJzLmluY2x1ZGVzKCd1c2VyJykpO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ25lcnMuaW5jbHVkZXMoJ2JpdGdvJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXR4b2xpYiBpbnRlcm9wZXJhYmlsaXR5IC0gd2FzbS11dHhvIGNhbiB2ZXJpZnkgdXR4b2xpYi1nZW5lcmF0ZWQgQklQMzIyIHByb29mcycsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIHRlc3QgdmVyaWZpZXMgY3Jvc3MtbGlicmFyeSBjb21wYXRpYmlsaXR5OlxuICAgIC8vIDEuIHV0eG8tY29yZSAodXR4b2xpYikgY3JlYXRlcyBhIEJJUDMyMiBQU0JUXG4gICAgLy8gMi4gd2FzbS11dHhvIHNpZ25zIGl0IHdpdGggbXVzaWcyXG4gICAgLy8gMy4gdXR4by1jb3JlIHZhbGlkYXRlcyB0aGUgd2FzbS11dHhvIHNpZ25hdHVyZXNcbiAgICAvL1xuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdhc20tdXR4byBhbmQgdXR4b2xpYiBnZW5lcmF0ZSBjb21wYXRpYmxlIEJJUDMyMiBwcm9vZnMuXG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gdXR4b2xpYi1jcmVhdGVkIEJJUDMyMiBQU0JUIGFuZCB2YWxpZGF0ZSB3aXRoIHV0eG9saWInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gJ3AydHJNdXNpZzJfdXR4b2xpYl9jb21wYXRfdGVzdCc7XG4gICAgICBjb25zdCB7IHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG5cbiAgICAgIC8vIENyZWF0ZSB1dHhvbGliIFJvb3RXYWxsZXRLZXlzIGZvciB1dHhvLWNvcmUgUFNCVCBjb25zdHJ1Y3Rpb25cbiAgICAgIGNvbnN0IHV0eG9saWJSb290V2FsbGV0S2V5cyA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpKTtcblxuICAgICAgLy8gcDJ0ck11c2lnMiBleHRlcm5hbCBjaGFpbiBjb2RlXG4gICAgICBjb25zdCBjaGFpbiA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoJ3AydHJNdXNpZzInKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gJ0JJUDMyMiB1dHhvbGliIGludGVyb3AgdGVzdCc7XG5cbiAgICAgIC8vIENyZWF0ZSBCSVAzMjIgUFNCVCB1c2luZyB1dHhvLWNvcmVcbiAgICAgIGNvbnN0IHBzYnQgPSBjb3JlQmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHV0eG9saWJSb290V2FsbGV0S2V5cywgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbiAgICAgIGNvcmVCaXAzMjIuYWRkQmlwMzIySW5wdXRXaXRoQ2hhaW5BbmRJbmRleChwc2J0LCBtZXNzYWdlVGV4dCwgdXR4b2xpYlJvb3RXYWxsZXRLZXlzLCB7XG4gICAgICAgIGNoYWluLFxuICAgICAgICBpbmRleCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDb252ZXJ0IHRvIHdhc20tdXR4byBQU0JUIGZvciBzaWduaW5nXG4gICAgICBjb25zdCB3YXNtUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC50b0J1ZmZlcigpLCAnYnRjJyk7XG5cbiAgICAgIC8vIEdlbmVyYXRlIG11c2lnMiBub25jZXMgYW5kIHNpZ24gd2l0aCB3YXNtLXV0eG9cbiAgICAgIGNvbnN0IHVzZXJLZXkgPSBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSk7XG4gICAgICBjb25zdCBiaXRnb0tleSA9IEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKTtcblxuICAgICAgd2FzbVBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXModXNlcktleSk7XG4gICAgICB3YXNtUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyhiaXRnb0tleSk7XG4gICAgICB3YXNtUHNidC5zaWduKHVzZXJLZXkpO1xuICAgICAgd2FzbVBzYnQuc2lnbihiaXRnb0tleSk7XG5cbiAgICAgIC8vIENvbnZlcnQgYmFjayB0byB1dHhvbGliIFBTQlQgZm9yIHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IHNpZ25lZFBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tQnVmZmVyKFxuICAgICAgICBCdWZmZXIuZnJvbSh3YXNtUHNidC5zZXJpYWxpemUoKSksXG4gICAgICAgIHV0eG9saWIubmV0d29ya3MuYml0Y29pblxuICAgICAgKTtcblxuICAgICAgLy8gVmFsaWRhdGlvbiBzaG91bGQgc3VjY2VlZCAtIHdhc20tdXR4byBzaWduYXR1cmVzIGFyZSBjb21wYXRpYmxlIHdpdGggdXR4b2xpYlxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHV0eG9saWIuYml0Z28uZ2V0U2lnbmF0dXJlVmFsaWRhdGlvbkFycmF5UHNidChzaWduZWRQc2J0LCB1dHhvbGliUm9vdFdhbGxldEtleXMpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBib3RoIHVzZXIgKGluZGV4IDApIGFuZCBiaXRnbyAoaW5kZXggMikgc2lnbmF0dXJlcyBhcmUgdmFsaWRcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2YWxpZGF0aW9uUmVzdWx0Lmxlbmd0aCwgMSk7XG4gICAgICBjb25zdCBbaW5wdXRJbmRleCwgc2lnVmFsaWRhdGlvbl0gPSB2YWxpZGF0aW9uUmVzdWx0WzBdO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlucHV0SW5kZXgsIDApO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1ZhbGlkYXRpb25bMF0sIHRydWUsICd1c2VyIHNpZ25hdHVyZSBzaG91bGQgYmUgdmFsaWQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdWYWxpZGF0aW9uWzFdLCBmYWxzZSwgJ2JhY2t1cCBzaWduYXR1cmUgc2hvdWxkIG5vdCBiZSBwcmVzZW50Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnVmFsaWRhdGlvblsyXSwgdHJ1ZSwgJ2JpdGdvIHNpZ25hdHVyZSBzaG91bGQgYmUgdmFsaWQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==