@bitgo/abstract-utxo 11.3.0 → 11.5.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 (41) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +4 -1
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +3 -3
  4. package/dist/cjs/src/descriptor/builder/builder.d.ts +5 -0
  5. package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -1
  6. package/dist/cjs/src/descriptor/builder/builder.js +18 -1
  7. package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -1
  8. package/dist/cjs/src/descriptor/builder/parse.js +34 -2
  9. package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -1
  10. package/dist/cjs/src/descriptor/validatePolicy.js +3 -1
  11. package/dist/cjs/src/recovery/backupKeyRecovery.js +4 -4
  12. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  13. package/dist/cjs/src/recovery/crossChainRecovery.js +3 -3
  14. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  15. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +11 -1
  16. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  17. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +28 -2
  18. package/dist/cjs/test/unit/descriptor/builder.js +15 -1
  19. package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.d.ts +2 -0
  20. package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.d.ts.map +1 -0
  21. package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.js +102 -0
  22. package/dist/cjs/test/unit/verifyTransaction.js +230 -1
  23. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  24. package/dist/esm/abstractUtxoCoin.d.ts +4 -1
  25. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  26. package/dist/esm/abstractUtxoCoin.js +3 -3
  27. package/dist/esm/descriptor/builder/builder.d.ts +5 -0
  28. package/dist/esm/descriptor/builder/builder.d.ts.map +1 -1
  29. package/dist/esm/descriptor/builder/builder.js +18 -1
  30. package/dist/esm/descriptor/builder/parse.d.ts.map +1 -1
  31. package/dist/esm/descriptor/builder/parse.js +34 -2
  32. package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -1
  33. package/dist/esm/descriptor/validatePolicy.js +3 -1
  34. package/dist/esm/recovery/backupKeyRecovery.js +5 -5
  35. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  36. package/dist/esm/recovery/crossChainRecovery.js +3 -3
  37. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  38. package/dist/esm/transaction/descriptor/verifyTransaction.js +11 -1
  39. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  40. package/dist/esm/transaction/fixedScript/verifyTransaction.js +28 -2
  41. package/package.json +11 -10
@@ -6,8 +6,8 @@ exports.isWalletAddress = isWalletAddress;
6
6
  exports.convertLtcAddressToLegacyFormat = convertLtcAddressToLegacyFormat;
7
7
  exports.recoverCrossChain = recoverCrossChain;
8
8
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
9
- const sdk_core_1 = require("@bitgo/sdk-core");
10
9
  const sdk_api_1 = require("@bitgo/sdk-api");
10
+ const sdk_core_1 = require("@bitgo/sdk-core");
11
11
  const signTransaction_1 = require("../transaction/fixedScript/signTransaction");
12
12
  const decode_1 = require("../transaction/decode");
13
13
  const replayProtection_1 = require("../transaction/fixedScript/replayProtection");
@@ -229,7 +229,7 @@ async function getPrv(xprv, passphrase, wallet) {
229
229
  else {
230
230
  encryptedPrv = (await wallet.getEncryptedUserKeychain()).encryptedXprv;
231
231
  }
232
- return getPrv((0, sdk_api_1.decrypt)(passphrase, encryptedPrv));
232
+ return getPrv(await (0, sdk_api_1.decryptAsync)(passphrase, encryptedPrv));
233
233
  }
234
234
  /**
235
235
  * Create a sweep transaction for cross-chain recovery using wasm-utxo
@@ -296,4 +296,4 @@ async function recoverCrossChain(bitgo, params) {
296
296
  recoveryAmount: (0, tnumber_1.toTNumber)((0, psbt_1.getRecoveryAmount)(psbt, walletKeys, params.recoveryAddress), params.sourceCoin.amountType),
297
297
  };
298
298
  }
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FhQztBQVlELDBFQWNDO0FBb1BELDhDQXFEQztBQW5iRCxnREFBOEY7QUFDOUYsOENBQStFO0FBQy9FLDRDQUF5QztBQUd6QyxnRkFBK0U7QUFFL0Usa0RBQTBEO0FBQzFELGtGQUF5RjtBQUN6Rix3Q0FBdUM7QUFDdkMsd0NBQTBFO0FBRTFFLGlDQUFnSDtBQXlDekcsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBZ0IsRUFDaEIsSUFBc0IsRUFDdEIsUUFBZ0I7SUFFaEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLCtDQUErQztRQUMvQyxrSkFBa0o7UUFDbEosSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxD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b250ZW50IjpbImltcG9ydCB7IEJJUDMyLCBDb2luTmFtZSwgZml4ZWRTY3JpcHRXYWxsZXQsIGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IEJpdEdvQmFzZSwgSVdhbGxldCwgS2V5Y2hhaW4sIFRyaXBsZSwgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGRlY3J5cHQgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFRyYW5zYWN0aW9uSW5mbyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVBzYnQgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vbmFtZXMnO1xuaW1wb3J0IHsgZW5jb2RlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9kZWNvZGUnO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmltcG9ydCB7IHRvVE51bWJlciB9IGZyb20gJy4uL3RudW1iZXInO1xuaW1wb3J0IHsgdW5zcGVudFN1bSwgdHlwZSBVbnNwZW50LCB0eXBlIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi91bnNwZW50JztcblxuaW1wb3J0IHsgY3JlYXRlRW1wdHlXYXNtUHNidCwgYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidCwgYWRkT3V0cHV0VG9XYXNtUHNidCwgZ2V0UmVjb3ZlcnlBbW91bnQgfSBmcm9tICcuL3BzYnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkUmVjb3ZlcnlUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB3YWxsZXQ6IHN0cmluZztcbiAgZmF1bHR5VHhJZDogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbn1cblxudHlwZSBGZWVJbmZvID0ge1xuICBzaXplOiBudW1iZXI7XG4gIGZlZVJhdGU6IG51bWJlcjtcbiAgZmVlOiBudW1iZXI7XG4gIHBheUdvRmVlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBmZWVJbmZvPzogRmVlSW5mbztcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdmVyc2lvbjogMSB8IDI7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgc291cmNlQ29pbjogc3RyaW5nO1xuICByZWNvdmVyeUNvaW46IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzPzogc3RyaW5nO1xuICByZWNvdmVyeUFtb3VudD86IFROdW1iZXI7XG59XG5cbnR5cGUgV2FsbGV0VjEgPSB7XG4gIGtleWNoYWluczogeyB4cHViOiBzdHJpbmcgfVtdO1xuICBhZGRyZXNzKHsgYWRkcmVzcyB9OiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTx7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfT47XG4gIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpOiBQcm9taXNlPHsgZW5jcnlwdGVkWHBydjogc3RyaW5nIH0+O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdhbGxldChcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxJV2FsbGV0IHwgV2FsbGV0VjE+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgY29pbi53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETzogQkctNDYzNjQgaGFuZGxlIGVycm9ycyBtb3JlIGdyYWNlZnVsbHlcbiAgICAvLyBUaGUgdjIgZW5kcG9pbnQgY29pbi53YWxsZXRzKCkuZ2V0KCkgbWF5IHRocm93IDQwNCBvciA0MDAgZXJyb3JzLCBidXQgdGhpcyBzaG91bGQgbm90IHByZXZlbnQgdXMgZnJvbSBzZWFyY2hpbmcgZm9yIHRoZSB3YWxsZXRJZCBpbiB2MSB3YWxsZXRzLlxuICAgIGlmIChlLnN0YXR1cyA+PSA1MDApIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgYml0Z28ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IGdldCB3YWxsZXQgJHt3YWxsZXRJZH0gZnJvbSB2MSBvciB2MjogJHtlLnRvU3RyaW5nKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjb3ZlcnlDb2luXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHdhbGxldCBwdWJrZXlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXYWxsZXRLZXlzKFxuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxXG4pOiBQcm9taXNlPGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzPiB7XG4gIGxldCB4cHViczogVHJpcGxlPHN0cmluZz47XG5cbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IChhd2FpdCByZWNvdmVyeUNvaW4ua2V5Y2hhaW5zKCkuZ2V0S2V5c0ZvclNpZ25pbmcoeyB3YWxsZXQgfSkpIGFzIHVua25vd24gYXMgS2V5Y2hhaW5bXTtcbiAgICBpZiAoa2V5Y2hhaW5zLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCB0cmlwbGUgZ290ICR7a2V5Y2hhaW5zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgeHB1YnMgPSBrZXljaGFpbnMubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz47XG4gIH0gZWxzZSB7XG4gICAgeHB1YnMgPSAod2FsbGV0IGFzIFdhbGxldFYxKS5rZXljaGFpbnMubWFwKChrKSA9PiBrLnhwdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICB9XG5cbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNXYWxsZXRBZGRyZXNzKHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxLCBhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYWRkcmVzc0RhdGE7XG4gICAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgICAgYWRkcmVzc0RhdGEgPSBhd2FpdCB3YWxsZXQuZ2V0QWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuYWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZHJlc3NEYXRhICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgTGl0ZWNvaW4gUDJTSCBhZGRyZXNzIGZyb20gTS4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgzMikgdG8gdGhlIGxlZ2FjeSAzLi4uIGZvcm1hdCAoc2NyaXB0SGFzaCAweDA1KVxuICogYW5kIFEuLi4gZm9ybWF0IChzY3JpcHRIYXNoIDB4MzIpIHRvIHRoZSBsZWdhY3kgMi4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgwNSkuXG4gKiBUaGlzIGlzIG5lZWRlZCBmb3IgY3Jvc3MtY2hhaW4gcmVjb3Zlcnkgd2hlbiAoVClMVEMgd2FzIHNlbnQgdG8gYSAoVClCVEMgYWRkcmVzcywgYmVjYXVzZSB0aGUgKFQpQlRDIHdhbGxldFxuICogc3RvcmVzIGFkZHJlc3NlcyBpbiB0aGUgMy4uLiBmb3JtYXQgd2hpbGUgdGhlIExUQyBibG9ja2NoYWluIHJldHVybnMgYWRkcmVzc2VzIGluIE0uLi4gZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBhZGRyZXNzIC0gTFRDIGFkZHJlc3MgdG8gY29udmVydFxuICogQHBhcmFtIGNvaW5OYW1lIC0gVGhlIGNvaW4gbmFtZSAoZS5nLiAnbHRjJywgJ3RsdGMnKVxuICogQHJldHVybnMgVGhlIGFkZHJlc3MgaW4gbGVnYWN5IDMuLi4gZm9ybWF0LCBvciB0aGUgb3JpZ2luYWwgYWRkcmVzcyBpZiBpdCdzIG5vdCBhIFAyU0ggYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChhZGRyZXNzOiBzdHJpbmcsIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBzdHJpbmcge1xuICBpZiAoY29pbk5hbWUgIT09ICdsdGMnICYmIGNvaW5OYW1lICE9PSAndGx0YycpIHtcbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIC8vIG9ubHkgY29uc2lkZXIgYWRkcmVzc2VzIHRoYXQgc3RhcnQgd2l0aCBNIG9yIFEgKG1vZGVybiBsdGMgcDJzaCBwcmVmaXhlcylcbiAgaWYgKCFhZGRyZXNzLnN0YXJ0c1dpdGgoJ00nKSAmJiAhYWRkcmVzcy5zdGFydHNXaXRoKCdRJykpIHtcbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4oYWRkcmVzcywgY29pbk5hbWUpO1xuICBjb25zdCBkc3RDb2luID0gY29pbk5hbWUgPT09ICdsdGMnID8gJ2J0YycgOiAndGJ0Yyc7XG4gIGNvbnN0IGRzdEFkZHJlc3MgPSB3YXNtQWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0V2l0aENvaW4oc2NyaXB0UHViS2V5LCBkc3RDb2luKTtcbiAgcmV0dXJuIGRzdEFkZHJlc3M7XG59XG5cbi8qKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSB0eGlkXG4gKiBAcGFyYW0gYW1vdW50VHlwZVxuICogQHBhcmFtIHdhbGxldFxuICogQHBhcmFtIGFwaUtleSAtIGEgYmxvY2tjaGFpciBhcGkga2V5XG4gKiBAcmV0dXJuIGFsbCB1bnNwZW50cyBmb3IgdHJhbnNhY3Rpb24gb3V0cHV0cywgaW5jbHVkaW5nIG91dHB1dHMgZnJvbSBvdGhlciB0cmFuc2FjdGlvbnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUmVjb3ZlcnlPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB0eGlkOiBzdHJpbmcsXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJyxcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsXG4gIGFwaUtleT86IHN0cmluZ1xuKTogUHJvbWlzZTxVbnNwZW50PFROdW1iZXI+W10+IHtcbiAgY29uc3QgYXBpID0gY29pbi5nZXRSZWNvdmVyeVByb3ZpZGVyKGFwaUtleSk7XG4gIGNvbnN0IHR4ID0gYXdhaXQgYXBpLmdldFRyYW5zYWN0aW9uSU8odHhpZCk7XG4gIGNvbnN0IHdhbGxldEFkZHJlc3NlcyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHR4Lm91dHB1dHMubWFwKGFzeW5jIChvdXRwdXQpID0+IHtcbiAgICAgICAgLy8gRm9yIHNvbWUgY29pbnMgKGJjaCkgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBhZGRyZXNzIHRvIGxlZ2FjeSBmb3JtYXQgc2luY2UgdGhlIGFwaSByZXR1cm5zIHRoZSBhZGRyZXNzXG4gICAgICAgIC8vIGluIG5vbiBsZWdhY3kgZm9ybWF0LiBIb3dldmVyLCB3ZSB3YW50IHRvIGtlZXAgdGhlIGFkZHJlc3MgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSByZXNwb25zZSBzaW5jZSB3ZVxuICAgICAgICAvLyBhcmUgZ29pbmcgdG8gaGl0IHRoZSBBUEkgYWdhaW4gdG8gZmV0Y2ggYWRkcmVzcyB1bnNwZW50cy5cbiAgICAgICAgY29uc3QgY2Fub25pY2FsQWRkcmVzcyA9IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcyk7XG4gICAgICAgIGxldCBpc1dhbGxldE93bmVkID0gYXdhaXQgaXNXYWxsZXRBZGRyZXNzKHdhbGxldCwgY2Fub25pY2FsQWRkcmVzcyk7XG5cbiAgICAgICAgLy8gRm9yIExUQyBjcm9zcy1jaGFpbiByZWNvdmVyeTogaWYgdGhlIGFkZHJlc3MgaXNuJ3QgZm91bmQsIHRyeSB0aGUgbGVnYWN5IGZvcm1hdC5cbiAgICAgICAgLy8gV2hlbiBMVEMgaXMgc2VudCB0byBhIEJUQyBhZGRyZXNzLCB0aGUgTFRDIGJsb2NrY2hhaW4gcmV0dXJucyBNLi4uIGFkZHJlc3Nlc1xuICAgICAgICAvLyBidXQgdGhlIEJUQyB3YWxsZXQgc3RvcmVzIGFkZHJlc3NlcyBpbiAzLi4uIGZvcm1hdC5cbiAgICAgICAgaWYgKCFpc1dhbGxldE93bmVkICYmIGNvaW4uZ2V0RmFtaWx5KCkgPT09ICdsdGMnKSB7XG4gICAgICAgICAgY29uc3QgbGVnYWN5QWRkcmVzcyA9IGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQob3V0cHV0LmFkZHJlc3MsIGNvaW4ubmFtZSk7XG4gICAgICAgICAgaWYgKGxlZ2FjeUFkZHJlc3MgIT09IG91dHB1dC5hZGRyZXNzKSB7XG4gICAgICAgICAgICBpc1dhbGxldE93bmVkID0gYXdhaXQgaXNXYWxsZXRBZGRyZXNzKHdhbGxldCwgbGVnYWN5QWRkcmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzV2FsbGV0T3duZWQgPyBvdXRwdXQuYWRkcmVzcyA6IG51bGw7XG4gICAgICB9KVxuICAgIClcbiAgKS5maWx0ZXIoKGFkZHJlc3MpID0+IGFkZHJlc3MgIT09IG51bGwpO1xuXG4gIGNvbnN0IHVuc3BlbnRzID0gYXdhaXQgYXBpLmdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKHdhbGxldEFkZHJlc3NlcyBhcyBzdHJpbmdbXSk7XG4gIGlmICh1bnNwZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlY292ZXJ5IHVuc3BlbnRzIGZvdW5kLmApO1xuICB9XG4gIC8vIHRoZSBhcGkgbWF5IHJldHVybiBjYXNoYWRkcidzIGluc3RlYWQgb2YgbGVnYWN5IGZvciBCQ0ggYW5kIEJDSEFcbiAgLy8gZG93bnN0cmVhbSBwcm9jZXNzZXMncyBvbmx5IGV4cGVjdCBsZWdhY3kgYWRkcmVzc2VzXG4gIHJldHVybiB1bnNwZW50cy5tYXAoKHJlY292ZXJ5T3V0cHV0KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlY292ZXJ5T3V0cHV0LFxuICAgICAgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHJlY292ZXJ5T3V0cHV0LmFkZHJlc3MpLFxuICAgICAgdmFsdWU6IHRvVE51bWJlcihCaWdJbnQocmVjb3ZlcnlPdXRwdXQudmFsdWUpLCBhbW91bnRUeXBlKSBhcyBUTnVtYmVyLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIERhdGEgcmVxdWlyZWQgZm9yIGFkZHJlc3MgYW5kIHNpZ25hdHVyZSBkZXJpdmF0aW9uXG4gKi9cbnR5cGUgU2NyaXB0SWQgPSB7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRJZChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgc2NyaXB0OiBVaW50OEFycmF5KTogUHJvbWlzZTxTY3JpcHRJZD4ge1xuICBjb25zdCBhZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdCwgY29pbi5uYW1lKTtcbiAgbGV0IGFkZHJlc3NEYXRhOiB7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfTtcbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICB9IGVsc2Uge1xuICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuYWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBhZGRyZXNzRGF0YS5jaGFpbiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGFkZHJlc3NEYXRhLmluZGV4ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB7IGNoYWluOiBhZGRyZXNzRGF0YS5jaGFpbiwgaW5kZXg6IGFkZHJlc3NEYXRhLmluZGV4IH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYWRkcmVzcyBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGFkZHJlc3NEYXRhKX1gKTtcbn1cblxuLyoqXG4gKiBMb29rdXAgYWRkcmVzcyBkYXRhIGZyb20gdW5zcGVudHMgb24gc291cmNlQ29pbiBpbiBhZGRyZXNzIGRhdGFiYXNlIG9mIHJlY292ZXJ5Q29pbi5cbiAqIFJldHVybiBmdWxsIHdhbGxldFVuc3BlbnRzIGluY2x1ZGluZyBzY3JpcHRJZCBpbiBzb3VyY2VDb2luIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gc291cmNlQ29pblxuICogQHBhcmFtIHJlY292ZXJ5Q29pblxuICogQHBhcmFtIHVuc3BlbnRzXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHdhbGxldFVuc3BlbnRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvV2FsbGV0VW5zcGVudHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjFcbik6IFByb21pc2U8V2FsbGV0VW5zcGVudDxUTnVtYmVyPltdPiB7XG4gIGNvbnN0IGFkZHJlc3NlcyA9IG5ldyBTZXQodW5zcGVudHMubWFwKCh1KSA9PiB1LmFkZHJlc3MpKTtcbiAgY29uc3Qgd2FsbGV0VW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYWRkcmVzcyBvZiBhZGRyZXNzZXMpIHtcbiAgICBsZXQgc2NyaXB0SWQ7XG4gICAgdHJ5IHtcbiAgICAgIHNjcmlwdElkID0gYXdhaXQgZ2V0U2NyaXB0SWQocmVjb3ZlcnlDb2luLCB3YWxsZXQsIHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4oYWRkcmVzcywgc291cmNlQ29pbi5uYW1lKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgZXJyb3IgZ2V0dGluZyBzY3JpcHRJZCBmb3IgJHthZGRyZXNzfTpgLCBlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJlZFVuc3BlbnRzID0gdW5zcGVudHNcbiAgICAgIC5maWx0ZXIoKHUpID0+IHUuYWRkcmVzcyA9PT0gYWRkcmVzcylcbiAgICAgIC5tYXAoKHUpID0+ICh7XG4gICAgICAgIC4uLnUsXG4gICAgICAgIC4uLnNjcmlwdElkLFxuICAgICAgfSkpO1xuICAgIHdhbGxldFVuc3BlbnRzLnB1c2goLi4uZmlsdGVyZWRVbnNwZW50cyk7XG4gIH1cblxuICByZXR1cm4gd2FsbGV0VW5zcGVudHM7XG59XG5cbi8qKlxuICogQHBhcmFtIGNvaW5cbiAqIEByZXR1cm4gZmVlUmF0ZSBmb3IgdHJhbnNhY3Rpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RmVlUmF0ZVNhdFZCKGNvaW46IEFic3RyYWN0VXR4b0NvaW4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAvLyBUT0RPOiB1c2UgZmVlUmF0ZSBBUElcbiAgY29uc3QgZmVlUmF0ZSA9IHtcbiAgICBiY2g6IDIwLFxuICAgIHRiY2g6IDIwLFxuICAgIGJjaGE6IDIwLFxuICAgIHRiY2hhOiAyMCxcbiAgICBic3Y6IDIwLFxuICAgIHRic3Y6IDIwLFxuICAgIGJ0YzogODAsXG4gICAgdGJ0YzogODAsXG4gICAgdGJ0Y3NpZzogODAsXG4gICAgdGJ0YzQ6IDgwLFxuICAgIHRidGNiZ3NpZzogODAsXG4gICAgbHRjOiAxMDAsXG4gICAgdGx0YzogMTAwLFxuICAgIGRvZ2U6IDEwMDAsXG4gICAgdGRvZ2U6IDEwMDAsXG4gIH1bY29pbi5nZXRDaGFpbigpXTtcblxuICBpZiAoIWZlZVJhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGZlZVJhdGUgZm9yICR7Y29pbi5nZXRDaGFpbigpfWApO1xuICB9XG5cbiAgcmV0dXJuIGZlZVJhdGU7XG59XG5cbi8qKlxuICogQHBhcmFtIHhwcnZcbiAqIEBwYXJhbSBwYXNzcGhyYXNlXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHNpZ25pbmcga2V5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBydih4cHJ2Pzogc3RyaW5nLCBwYXNzcGhyYXNlPzogc3RyaW5nLCB3YWxsZXQ/OiBJV2FsbGV0IHwgV2FsbGV0VjEpOiBQcm9taXNlPEJJUDMyPiB7XG4gIGlmICh4cHJ2KSB7XG4gICAgY29uc3Qga2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJ2KTtcbiAgICBpZiAoa2V5LmlzTmV1dGVyZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3QgYSBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgaWYgKCF3YWxsZXQgfHwgIXBhc3NwaHJhc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHhwcnYgZ2l2ZW46IG5lZWQgd2FsbGV0IGFuZCBwYXNzcGhyYXNlIHRvIGNvbnRpbnVlYCk7XG4gIH1cblxuICBsZXQgZW5jcnlwdGVkUHJ2OiBzdHJpbmc7XG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBlbmNyeXB0ZWRQcnYgPSAoYXdhaXQgd2FsbGV0LmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpKS5lbmNyeXB0ZWRQcnY7XG4gIH0gZWxzZSB7XG4gICAgZW5jcnlwdGVkUHJ2ID0gKGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpKS5lbmNyeXB0ZWRYcHJ2O1xuICB9XG5cbiAgcmV0dXJuIGdldFBydihkZWNyeXB0KHBhc3NwaHJhc2UsIGVuY3J5cHRlZFBydikpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN3ZWVwIHRyYW5zYWN0aW9uIGZvciBjcm9zcy1jaGFpbiByZWNvdmVyeSB1c2luZyB3YXNtLXV0eG9cbiAqIEBwYXJhbSBjb2luTmFtZSAtIEJpdEdvIGNvaW4gbmFtZSAoZS5nLiAnYnRjJywgJ3RidGMnLCAnbHRjJylcbiAqIEBwYXJhbSB3YWxsZXRLZXlzXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB0YXJnZXRBZGRyZXNzXG4gKiBAcGFyYW0gZmVlUmF0ZVNhdFZCXG4gKiBAcmV0dXJuIHVuc2lnbmVkIFBTQlRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3dlZXBUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbk5hbWU6IENvaW5OYW1lLFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgdGFyZ2V0QWRkcmVzczogc3RyaW5nLFxuICBmZWVSYXRlU2F0VkI6IG51bWJlclxuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgY29uc3QgaW5wdXRWYWx1ZSA9IHVuc3BlbnRTdW0odW5zcGVudHMpO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHdpdGggd2FzbS11dHhvIGFuZCBhZGQgd2FsbGV0IGlucHV0cyB1c2luZyBzaGFyZWQgdXRpbGl0aWVzXG4gIGNvbnN0IHVuc3BlbnRzQmlnaW50ID0gdW5zcGVudHMubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogQmlnSW50KHUudmFsdWUpIH0pKTtcbiAgY29uc3Qgd2FzbVBzYnQgPSBjcmVhdGVFbXB0eVdhc21Qc2J0KGNvaW5OYW1lLCB3YWxsZXRLZXlzKTtcbiAgYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidCh3YXNtUHNidCwgdW5zcGVudHNCaWdpbnQsIHdhbGxldEtleXMpO1xuXG4gIC8vIENhbGN1bGF0ZSBkaW1lbnNpb25zIHVzaW5nIHdhc20tdXR4byBEaW1lbnNpb25zXG4gIGNvbnN0IHZzaXplID0gZml4ZWRTY3JpcHRXYWxsZXQuRGltZW5zaW9ucy5mcm9tUHNidCh3YXNtUHNidClcbiAgICAucGx1cyhmaXhlZFNjcmlwdFdhbGxldC5EaW1lbnNpb25zLmZyb21PdXRwdXQodGFyZ2V0QWRkcmVzcywgY29pbk5hbWUpKVxuICAgIC5nZXRWU2l6ZSgpO1xuICBjb25zdCBmZWUgPSBCaWdJbnQoTWF0aC5yb3VuZCh2c2l6ZSAqIGZlZVJhdGVTYXRWQikpO1xuXG4gIC8vIEFkZCBvdXRwdXQgdG8gd2FzbSBQU0JUXG4gIGFkZE91dHB1dFRvV2FzbVBzYnQod2FzbVBzYnQsIHRhcmdldEFkZHJlc3MsIGlucHV0VmFsdWUgLSBmZWUsIGNvaW5OYW1lKTtcblxuICByZXR1cm4gd2FzbVBzYnQ7XG59XG5cbnR5cGUgUmVjb3ZlclBhcmFtcyA9IHtcbiAgLyoqIFdhbGxldCBJRCAoY2FuIGJlIHYxIHdhbGxldCBvciB2MiB3YWxsZXQpICovXG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIC8qKiBDb2luIHRvIGNyZWF0ZSB0aGUgdHJhbnNhY3Rpb24gZm9yICovXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW47XG4gIC8qKiBDb2luIHRoYXQgd2FsbGV0IGtleXMgd2VyZSBzZXQgdXAgZm9yICovXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIFNvdXJjZSBjb2luIHRyYW5zYWN0aW9uIHRvIHJlY292ZXIgb3V0cHV0cyBmcm9tIChzb3VyY2VDb2luKSAqL1xuICB0eGlkOiBzdHJpbmc7XG4gIC8qKiBTb3VyY2UgY29pbiBhZGRyZXNzIHRvIHNlbmQgdGhlIGZ1bmRzIHRvICovXG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBkZWNyeXB0cyBwcml2YXRlIGtleSBhbmQgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgLyoqIElmIHNldCwgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgeHBydj86IHN0cmluZztcbiAgLyoqIGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleSAqKi9cbiAgYXBpS2V5Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZWNvdmVyIHdhbGxldCBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgb24gdGhlIHdyb25nIGJsb2NrY2hhaW5cbiAqIChmb3IgaW5zdGFuY2UgYml0Y29pbiBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgZm9yIGEgbGl0ZWNvaW4gd2FsbGV0KS5cbiAqXG4gKiBGZXRjaGVzIHRoZSB1bnNwZW50IGRhdGEgZnJvbSBCaXRHbydzIHB1YmxpYyBibG9ja2NoYWluIEFQSSBhbmQgdGhlIHNjcmlwdCBkYXRhIGZyb20gdGhlIHVzZXInc1xuICogd2FsbGV0LlxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnb1xuICogQHBhcmFtIHtSZWNvdmVyUGFyYW1zfSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgZ2V0V2FsbGV0KGJpdGdvLCBwYXJhbXMucmVjb3ZlcnlDb2luLCBwYXJhbXMud2FsbGV0SWQpO1xuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyPihcbiAgICBwYXJhbXMuc291cmNlQ29pbixcbiAgICBwYXJhbXMudHhpZCxcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlLFxuICAgIHdhbGxldCxcbiAgICBwYXJhbXMuYXBpS2V5XG4gICk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzID0gYXdhaXQgdG9XYWxsZXRVbnNwZW50czxUTnVtYmVyPihwYXJhbXMuc291cmNlQ29pbiwgcGFyYW1zLnJlY292ZXJ5Q29pbiwgdW5zcGVudHMsIHdhbGxldCk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGF3YWl0IGdldFdhbGxldEtleXMocGFyYW1zLnJlY292ZXJ5Q29pbiwgd2FsbGV0KSk7XG4gIGNvbnN0IHBydiA9XG4gICAgcGFyYW1zLnhwcnYgfHwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyBhd2FpdCBnZXRQcnYocGFyYW1zLnhwcnYsIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLCB3YWxsZXQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBmZWVSYXRlU2F0VkIgPSBhd2FpdCBnZXRGZWVSYXRlU2F0VkIocGFyYW1zLnNvdXJjZUNvaW4pO1xuXG4gIC8vIENyZWF0ZSBQU0JUIGZvciBib3RoIHNpZ25lZCBhbmQgdW5zaWduZWQgcmVjb3ZlcnlcbiAgbGV0IHBzYnQgPSBjcmVhdGVTd2VlcFRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgd2FsbGV0S2V5cyxcbiAgICB3YWxsZXRVbnNwZW50cyxcbiAgICBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgIGZlZVJhdGVTYXRWQlxuICApO1xuXG4gIC8vIEZvciB1bnNpZ25lZCByZWNvdmVyeSwgcmV0dXJuIHVuc2lnbmVkIFBTQlQgaGV4XG4gIGlmICghcHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JyksXG4gICAgICB3YWxsZXRJZDogcGFyYW1zLndhbGxldElkLFxuICAgICAgYWRkcmVzczogcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIGNvaW46IHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZvciBzaWduZWQgcmVjb3ZlcnksIHNpZ24gdGhlIFBTQlQgd2l0aCB1c2VyIGtleSBhbmQgcmV0dXJuIGhhbGYtc2lnbmVkIFBTQlRcbiAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIHBydiwgd2FsbGV0S2V5cywge1xuICAgIHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKHBhcmFtcy5zb3VyY2VDb2luLm5hbWUpLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246IHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCA/IDIgOiAxLFxuICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBzb3VyY2VDb2luOiBwYXJhbXMuc291cmNlQ29pbi5nZXRDaGFpbigpLFxuICAgIHJlY292ZXJ5Q29pbjogcGFyYW1zLnJlY292ZXJ5Q29pbi5nZXRDaGFpbigpLFxuICAgIHJlY292ZXJ5QW1vdW50OiB0b1ROdW1iZXIoXG4gICAgICBnZXRSZWNvdmVyeUFtb3VudChwc2J0LCB3YWxsZXRLZXlzLCBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzKSxcbiAgICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGVcbiAgICApIGFzIFROdW1iZXIsXG4gIH07XG59XG4iXX0=
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FhQztBQVlELDBFQWNDO0FBb1BELDhDQXFEQztBQW5iRCxnREFBOEY7QUFDOUYsNENBQThDO0FBQzlDLDhDQUErRTtBQUcvRSxnRkFBK0U7QUFFL0Usa0RBQTBEO0FBQzFELGtGQUF5RjtBQUN6Rix3Q0FBdUM7QUFDdkMsd0NBQTBFO0FBRTFFLGlDQUFnSDtBQXlDekcsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBZ0IsRUFDaEIsSUFBc0IsRUFDdEIsUUFBZ0I7SUFFaEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLCtDQUErQztRQUMvQyxrSkFBa0o7UUFDbEosSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxD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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQklQMzIsIENvaW5OYW1lLCBmaXhlZFNjcmlwdFdhbGxldCwgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgZGVjcnlwdEFzeW5jIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgQml0R29CYXNlLCBJV2FsbGV0LCBLZXljaGFpbiwgVHJpcGxlLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBUcmFuc2FjdGlvbkluZm8gfSBmcm9tICcuLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IHNpZ25BbmRWZXJpZnlQc2J0IH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcbmltcG9ydCB7IGVuY29kZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyB0b1ROdW1iZXIgfSBmcm9tICcuLi90bnVtYmVyJztcbmltcG9ydCB7IHVuc3BlbnRTdW0sIHR5cGUgVW5zcGVudCwgdHlwZSBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vdW5zcGVudCc7XG5cbmltcG9ydCB7IGNyZWF0ZUVtcHR5V2FzbVBzYnQsIGFkZFdhbGxldElucHV0c1RvV2FzbVBzYnQsIGFkZE91dHB1dFRvV2FzbVBzYnQsIGdldFJlY292ZXJ5QW1vdW50IH0gZnJvbSAnLi9wc2J0JztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFJlY292ZXJ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIGZhdWx0eVR4SWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG59XG5cbnR5cGUgRmVlSW5mbyA9IHtcbiAgc2l6ZTogbnVtYmVyO1xuICBmZWVSYXRlOiBudW1iZXI7XG4gIGZlZTogbnVtYmVyO1xuICBwYXlHb0ZlZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgZmVlSW5mbz86IEZlZUluZm87XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHZlcnNpb246IDEgfCAyO1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIHNvdXJjZUNvaW46IHN0cmluZztcbiAgcmVjb3ZlcnlDb2luOiBzdHJpbmc7XG4gIHJlY292ZXJ5QWRkcmVzcz86IHN0cmluZztcbiAgcmVjb3ZlcnlBbW91bnQ/OiBUTnVtYmVyO1xufVxuXG50eXBlIFdhbGxldFYxID0ge1xuICBrZXljaGFpbnM6IHsgeHB1Yjogc3RyaW5nIH1bXTtcbiAgYWRkcmVzcyh7IGFkZHJlc3MgfTogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8eyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH0+O1xuICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKTogUHJvbWlzZTx7IGVuY3J5cHRlZFhwcnY6IHN0cmluZyB9Pjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXYWxsZXQoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldElkOiBzdHJpbmdcbik6IFByb21pc2U8SVdhbGxldCB8IFdhbGxldFYxPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IEJHLTQ2MzY0IGhhbmRsZSBlcnJvcnMgbW9yZSBncmFjZWZ1bGx5XG4gICAgLy8gVGhlIHYyIGVuZHBvaW50IGNvaW4ud2FsbGV0cygpLmdldCgpIG1heSB0aHJvdyA0MDQgb3IgNDAwIGVycm9ycywgYnV0IHRoaXMgc2hvdWxkIG5vdCBwcmV2ZW50IHVzIGZyb20gc2VhcmNoaW5nIGZvciB0aGUgd2FsbGV0SWQgaW4gdjEgd2FsbGV0cy5cbiAgICBpZiAoZS5zdGF0dXMgPj0gNTAwKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBnZXQgd2FsbGV0ICR7d2FsbGV0SWR9IGZyb20gdjEgb3IgdjI6ICR7ZS50b1N0cmluZygpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY292ZXJ5Q29pblxuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXQgcHVia2V5c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0S2V5cyhcbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMVxuKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cz4ge1xuICBsZXQgeHB1YnM6IFRyaXBsZTxzdHJpbmc+O1xuXG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBjb25zdCBrZXljaGFpbnMgPSAoYXdhaXQgcmVjb3ZlcnlDb2luLmtleWNoYWlucygpLmdldEtleXNGb3JTaWduaW5nKHsgd2FsbGV0IH0pKSBhcyB1bmtub3duIGFzIEtleWNoYWluW107XG4gICAgaWYgKGtleWNoYWlucy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgdHJpcGxlIGdvdCAke2tleWNoYWlucy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHhwdWJzID0ga2V5Y2hhaW5zLm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICB9IGVsc2Uge1xuICAgIHhwdWJzID0gKHdhbGxldCBhcyBXYWxsZXRWMSkua2V5Y2hhaW5zLm1hcCgoaykgPT4gay54cHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgfVxuXG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHhwdWJzKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgbGV0IGFkZHJlc3NEYXRhO1xuICAgIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRyZXNzRGF0YSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIExpdGVjb2luIFAyU0ggYWRkcmVzcyBmcm9tIE0uLi4gZm9ybWF0IChzY3JpcHRIYXNoIDB4MzIpIHRvIHRoZSBsZWdhY3kgMy4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgwNSlcbiAqIGFuZCBRLi4uIGZvcm1hdCAoc2NyaXB0SGFzaCAweDMyKSB0byB0aGUgbGVnYWN5IDIuLi4gZm9ybWF0IChzY3JpcHRIYXNoIDB4MDUpLlxuICogVGhpcyBpcyBuZWVkZWQgZm9yIGNyb3NzLWNoYWluIHJlY292ZXJ5IHdoZW4gKFQpTFRDIHdhcyBzZW50IHRvIGEgKFQpQlRDIGFkZHJlc3MsIGJlY2F1c2UgdGhlIChUKUJUQyB3YWxsZXRcbiAqIHN0b3JlcyBhZGRyZXNzZXMgaW4gdGhlIDMuLi4gZm9ybWF0IHdoaWxlIHRoZSBMVEMgYmxvY2tjaGFpbiByZXR1cm5zIGFkZHJlc3NlcyBpbiBNLi4uIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gYWRkcmVzcyAtIExUQyBhZGRyZXNzIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSBjb2luTmFtZSAtIFRoZSBjb2luIG5hbWUgKGUuZy4gJ2x0YycsICd0bHRjJylcbiAqIEByZXR1cm5zIFRoZSBhZGRyZXNzIGluIGxlZ2FjeSAzLi4uIGZvcm1hdCwgb3IgdGhlIG9yaWdpbmFsIGFkZHJlc3MgaWYgaXQncyBub3QgYSBQMlNIIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQoYWRkcmVzczogc3RyaW5nLCBjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogc3RyaW5nIHtcbiAgaWYgKGNvaW5OYW1lICE9PSAnbHRjJyAmJiBjb2luTmFtZSAhPT0gJ3RsdGMnKSB7XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICAvLyBvbmx5IGNvbnNpZGVyIGFkZHJlc3NlcyB0aGF0IHN0YXJ0IHdpdGggTSBvciBRIChtb2Rlcm4gbHRjIHAyc2ggcHJlZml4ZXMpXG4gIGlmICghYWRkcmVzcy5zdGFydHNXaXRoKCdNJykgJiYgIWFkZHJlc3Muc3RhcnRzV2l0aCgnUScpKSB7XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICBjb25zdCBzY3JpcHRQdWJLZXkgPSB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIGNvaW5OYW1lKTtcbiAgY29uc3QgZHN0Q29pbiA9IGNvaW5OYW1lID09PSAnbHRjJyA/ICdidGMnIDogJ3RidGMnO1xuICBjb25zdCBkc3RBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdFB1YktleSwgZHN0Q29pbik7XG4gIHJldHVybiBkc3RBZGRyZXNzO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gdHhpZFxuICogQHBhcmFtIGFtb3VudFR5cGVcbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEBwYXJhbSBhcGlLZXkgLSBhIGJsb2NrY2hhaXIgYXBpIGtleVxuICogQHJldHVybiBhbGwgdW5zcGVudHMgZm9yIHRyYW5zYWN0aW9uIG91dHB1dHMsIGluY2x1ZGluZyBvdXRwdXRzIGZyb20gb3RoZXIgdHJhbnNhY3Rpb25zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgdHhpZDogc3RyaW5nLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcicsXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxLFxuICBhcGlLZXk/OiBzdHJpbmdcbik6IFByb21pc2U8VW5zcGVudDxUTnVtYmVyPltdPiB7XG4gIGNvbnN0IGFwaSA9IGNvaW4uZ2V0UmVjb3ZlcnlQcm92aWRlcihhcGlLZXkpO1xuICBjb25zdCB0eCA9IGF3YWl0IGFwaS5nZXRUcmFuc2FjdGlvbklPKHR4aWQpO1xuICBjb25zdCB3YWxsZXRBZGRyZXNzZXMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0eC5vdXRwdXRzLm1hcChhc3luYyAob3V0cHV0KSA9PiB7XG4gICAgICAgIC8vIEZvciBzb21lIGNvaW5zIChiY2gpIHdlIG5lZWQgdG8gY29udmVydCB0aGUgYWRkcmVzcyB0byBsZWdhY3kgZm9ybWF0IHNpbmNlIHRoZSBhcGkgcmV0dXJucyB0aGUgYWRkcmVzc1xuICAgICAgICAvLyBpbiBub24gbGVnYWN5IGZvcm1hdC4gSG93ZXZlciwgd2Ugd2FudCB0byBrZWVwIHRoZSBhZGRyZXNzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgcmVzcG9uc2Ugc2luY2Ugd2VcbiAgICAgICAgLy8gYXJlIGdvaW5nIHRvIGhpdCB0aGUgQVBJIGFnYWluIHRvIGZldGNoIGFkZHJlc3MgdW5zcGVudHMuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbEFkZHJlc3MgPSBjb2luLmNhbm9uaWNhbEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpO1xuICAgICAgICBsZXQgaXNXYWxsZXRPd25lZCA9IGF3YWl0IGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQsIGNhbm9uaWNhbEFkZHJlc3MpO1xuXG4gICAgICAgIC8vIEZvciBMVEMgY3Jvc3MtY2hhaW4gcmVjb3Zlcnk6IGlmIHRoZSBhZGRyZXNzIGlzbid0IGZvdW5kLCB0cnkgdGhlIGxlZ2FjeSBmb3JtYXQuXG4gICAgICAgIC8vIFdoZW4gTFRDIGlzIHNlbnQgdG8gYSBCVEMgYWRkcmVzcywgdGhlIExUQyBibG9ja2NoYWluIHJldHVybnMgTS4uLiBhZGRyZXNzZXNcbiAgICAgICAgLy8gYnV0IHRoZSBCVEMgd2FsbGV0IHN0b3JlcyBhZGRyZXNzZXMgaW4gMy4uLiBmb3JtYXQuXG4gICAgICAgIGlmICghaXNXYWxsZXRPd25lZCAmJiBjb2luLmdldEZhbWlseSgpID09PSAnbHRjJykge1xuICAgICAgICAgIGNvbnN0IGxlZ2FjeUFkZHJlc3MgPSBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KG91dHB1dC5hZGRyZXNzLCBjb2luLm5hbWUpO1xuICAgICAgICAgIGlmIChsZWdhY3lBZGRyZXNzICE9PSBvdXRwdXQuYWRkcmVzcykge1xuICAgICAgICAgICAgaXNXYWxsZXRPd25lZCA9IGF3YWl0IGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQsIGxlZ2FjeUFkZHJlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1dhbGxldE93bmVkID8gb3V0cHV0LmFkZHJlc3MgOiBudWxsO1xuICAgICAgfSlcbiAgICApXG4gICkuZmlsdGVyKChhZGRyZXNzKSA9PiBhZGRyZXNzICE9PSBudWxsKTtcblxuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGFwaS5nZXRVbnNwZW50c0ZvckFkZHJlc3Nlcyh3YWxsZXRBZGRyZXNzZXMgYXMgc3RyaW5nW10pO1xuICBpZiAodW5zcGVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyByZWNvdmVyeSB1bnNwZW50cyBmb3VuZC5gKTtcbiAgfVxuICAvLyB0aGUgYXBpIG1heSByZXR1cm4gY2FzaGFkZHIncyBpbnN0ZWFkIG9mIGxlZ2FjeSBmb3IgQkNIIGFuZCBCQ0hBXG4gIC8vIGRvd25zdHJlYW0gcHJvY2Vzc2VzJ3Mgb25seSBleHBlY3QgbGVnYWN5IGFkZHJlc3Nlc1xuICByZXR1cm4gdW5zcGVudHMubWFwKChyZWNvdmVyeU91dHB1dCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZWNvdmVyeU91dHB1dCxcbiAgICAgIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhyZWNvdmVyeU91dHB1dC5hZGRyZXNzKSxcbiAgICAgIHZhbHVlOiB0b1ROdW1iZXIoQmlnSW50KHJlY292ZXJ5T3V0cHV0LnZhbHVlKSwgYW1vdW50VHlwZSkgYXMgVE51bWJlcixcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBEYXRhIHJlcXVpcmVkIGZvciBhZGRyZXNzIGFuZCBzaWduYXR1cmUgZGVyaXZhdGlvblxuICovXG50eXBlIFNjcmlwdElkID0ge1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0U2NyaXB0SWQoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsIHNjcmlwdDogVWludDhBcnJheSk6IFByb21pc2U8U2NyaXB0SWQ+IHtcbiAgY29uc3QgYWRkcmVzcyA9IHdhc21BZGRyZXNzLmZyb21PdXRwdXRTY3JpcHRXaXRoQ29pbihzY3JpcHQsIGNvaW4ubmFtZSk7XG4gIGxldCBhZGRyZXNzRGF0YTogeyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH07XG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0IHdhbGxldC5nZXRBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgfSBlbHNlIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICB9XG4gIGlmICh0eXBlb2YgYWRkcmVzc0RhdGEuY2hhaW4gPT09ICdudW1iZXInICYmIHR5cGVvZiBhZGRyZXNzRGF0YS5pbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4geyBjaGFpbjogYWRkcmVzc0RhdGEuY2hhaW4sIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFkZHJlc3MgZGF0YTogJHtKU09OLnN0cmluZ2lmeShhZGRyZXNzRGF0YSl9YCk7XG59XG5cbi8qKlxuICogTG9va3VwIGFkZHJlc3MgZGF0YSBmcm9tIHVuc3BlbnRzIG9uIHNvdXJjZUNvaW4gaW4gYWRkcmVzcyBkYXRhYmFzZSBvZiByZWNvdmVyeUNvaW4uXG4gKiBSZXR1cm4gZnVsbCB3YWxsZXRVbnNwZW50cyBpbmNsdWRpbmcgc2NyaXB0SWQgaW4gc291cmNlQ29pbiBmb3JtYXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZUNvaW5cbiAqIEBwYXJhbSByZWNvdmVyeUNvaW5cbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXRVbnNwZW50c1xuICovXG5hc3luYyBmdW5jdGlvbiB0b1dhbGxldFVuc3BlbnRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBzb3VyY2VDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxXG4pOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXT4ge1xuICBjb25zdCBhZGRyZXNzZXMgPSBuZXcgU2V0KHVuc3BlbnRzLm1hcCgodSkgPT4gdS5hZGRyZXNzKSk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgYWRkcmVzc2VzKSB7XG4gICAgbGV0IHNjcmlwdElkO1xuICAgIHRyeSB7XG4gICAgICBzY3JpcHRJZCA9IGF3YWl0IGdldFNjcmlwdElkKHJlY292ZXJ5Q29pbiwgd2FsbGV0LCB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIHNvdXJjZUNvaW4ubmFtZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYGVycm9yIGdldHRpbmcgc2NyaXB0SWQgZm9yICR7YWRkcmVzc306YCwgZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyZWRVbnNwZW50cyA9IHVuc3BlbnRzXG4gICAgICAuZmlsdGVyKCh1KSA9PiB1LmFkZHJlc3MgPT09IGFkZHJlc3MpXG4gICAgICAubWFwKCh1KSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICAuLi5zY3JpcHRJZCxcbiAgICAgIH0pKTtcbiAgICB3YWxsZXRVbnNwZW50cy5wdXNoKC4uLmZpbHRlcmVkVW5zcGVudHMpO1xuICB9XG5cbiAgcmV0dXJuIHdhbGxldFVuc3BlbnRzO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb2luXG4gKiBAcmV0dXJuIGZlZVJhdGUgZm9yIHRyYW5zYWN0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEZlZVJhdGVTYXRWQihjb2luOiBBYnN0cmFjdFV0eG9Db2luKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgLy8gVE9ETzogdXNlIGZlZVJhdGUgQVBJXG4gIGNvbnN0IGZlZVJhdGUgPSB7XG4gICAgYmNoOiAyMCxcbiAgICB0YmNoOiAyMCxcbiAgICBiY2hhOiAyMCxcbiAgICB0YmNoYTogMjAsXG4gICAgYnN2OiAyMCxcbiAgICB0YnN2OiAyMCxcbiAgICBidGM6IDgwLFxuICAgIHRidGM6IDgwLFxuICAgIHRidGNzaWc6IDgwLFxuICAgIHRidGM0OiA4MCxcbiAgICB0YnRjYmdzaWc6IDgwLFxuICAgIGx0YzogMTAwLFxuICAgIHRsdGM6IDEwMCxcbiAgICBkb2dlOiAxMDAwLFxuICAgIHRkb2dlOiAxMDAwLFxuICB9W2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgaWYgKCFmZWVSYXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBmZWVSYXRlIGZvciAke2NvaW4uZ2V0Q2hhaW4oKX1gKTtcbiAgfVxuXG4gIHJldHVybiBmZWVSYXRlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB4cHJ2XG4gKiBAcGFyYW0gcGFzc3BocmFzZVxuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiBzaWduaW5nIGtleVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQcnYoeHBydj86IHN0cmluZywgcGFzc3BocmFzZT86IHN0cmluZywgd2FsbGV0PzogSVdhbGxldCB8IFdhbGxldFYxKTogUHJvbWlzZTxCSVAzMj4ge1xuICBpZiAoeHBydikge1xuICAgIGNvbnN0IGtleSA9IEJJUDMyLmZyb21CYXNlNTgoeHBydik7XG4gICAgaWYgKGtleS5pc05ldXRlcmVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIGlmICghd2FsbGV0IHx8ICFwYXNzcGhyYXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyB4cHJ2IGdpdmVuOiBuZWVkIHdhbGxldCBhbmQgcGFzc3BocmFzZSB0byBjb250aW51ZWApO1xuICB9XG5cbiAgbGV0IGVuY3J5cHRlZFBydjogc3RyaW5nO1xuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgZW5jcnlwdGVkUHJ2ID0gKGF3YWl0IHdhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKSkuZW5jcnlwdGVkUHJ2O1xuICB9IGVsc2Uge1xuICAgIGVuY3J5cHRlZFBydiA9IChhd2FpdCAod2FsbGV0IGFzIFdhbGxldFYxKS5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKSkuZW5jcnlwdGVkWHBydjtcbiAgfVxuXG4gIHJldHVybiBnZXRQcnYoYXdhaXQgZGVjcnlwdEFzeW5jKHBhc3NwaHJhc2UsIGVuY3J5cHRlZFBydikpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN3ZWVwIHRyYW5zYWN0aW9uIGZvciBjcm9zcy1jaGFpbiByZWNvdmVyeSB1c2luZyB3YXNtLXV0eG9cbiAqIEBwYXJhbSBjb2luTmFtZSAtIEJpdEdvIGNvaW4gbmFtZSAoZS5nLiAnYnRjJywgJ3RidGMnLCAnbHRjJylcbiAqIEBwYXJhbSB3YWxsZXRLZXlzXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB0YXJnZXRBZGRyZXNzXG4gKiBAcGFyYW0gZmVlUmF0ZVNhdFZCXG4gKiBAcmV0dXJuIHVuc2lnbmVkIFBTQlRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3dlZXBUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbk5hbWU6IENvaW5OYW1lLFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgdGFyZ2V0QWRkcmVzczogc3RyaW5nLFxuICBmZWVSYXRlU2F0VkI6IG51bWJlclxuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgY29uc3QgaW5wdXRWYWx1ZSA9IHVuc3BlbnRTdW0odW5zcGVudHMpO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHdpdGggd2FzbS11dHhvIGFuZCBhZGQgd2FsbGV0IGlucHV0cyB1c2luZyBzaGFyZWQgdXRpbGl0aWVzXG4gIGNvbnN0IHVuc3BlbnRzQmlnaW50ID0gdW5zcGVudHMubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogQmlnSW50KHUudmFsdWUpIH0pKTtcbiAgY29uc3Qgd2FzbVBzYnQgPSBjcmVhdGVFbXB0eVdhc21Qc2J0KGNvaW5OYW1lLCB3YWxsZXRLZXlzKTtcbiAgYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidCh3YXNtUHNidCwgdW5zcGVudHNCaWdpbnQsIHdhbGxldEtleXMpO1xuXG4gIC8vIENhbGN1bGF0ZSBkaW1lbnNpb25zIHVzaW5nIHdhc20tdXR4byBEaW1lbnNpb25zXG4gIGNvbnN0IHZzaXplID0gZml4ZWRTY3JpcHRXYWxsZXQuRGltZW5zaW9ucy5mcm9tUHNidCh3YXNtUHNidClcbiAgICAucGx1cyhmaXhlZFNjcmlwdFdhbGxldC5EaW1lbnNpb25zLmZyb21PdXRwdXQodGFyZ2V0QWRkcmVzcywgY29pbk5hbWUpKVxuICAgIC5nZXRWU2l6ZSgpO1xuICBjb25zdCBmZWUgPSBCaWdJbnQoTWF0aC5yb3VuZCh2c2l6ZSAqIGZlZVJhdGVTYXRWQikpO1xuXG4gIC8vIEFkZCBvdXRwdXQgdG8gd2FzbSBQU0JUXG4gIGFkZE91dHB1dFRvV2FzbVBzYnQod2FzbVBzYnQsIHRhcmdldEFkZHJlc3MsIGlucHV0VmFsdWUgLSBmZWUsIGNvaW5OYW1lKTtcblxuICByZXR1cm4gd2FzbVBzYnQ7XG59XG5cbnR5cGUgUmVjb3ZlclBhcmFtcyA9IHtcbiAgLyoqIFdhbGxldCBJRCAoY2FuIGJlIHYxIHdhbGxldCBvciB2MiB3YWxsZXQpICovXG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIC8qKiBDb2luIHRvIGNyZWF0ZSB0aGUgdHJhbnNhY3Rpb24gZm9yICovXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW47XG4gIC8qKiBDb2luIHRoYXQgd2FsbGV0IGtleXMgd2VyZSBzZXQgdXAgZm9yICovXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIFNvdXJjZSBjb2luIHRyYW5zYWN0aW9uIHRvIHJlY292ZXIgb3V0cHV0cyBmcm9tIChzb3VyY2VDb2luKSAqL1xuICB0eGlkOiBzdHJpbmc7XG4gIC8qKiBTb3VyY2UgY29pbiBhZGRyZXNzIHRvIHNlbmQgdGhlIGZ1bmRzIHRvICovXG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBkZWNyeXB0cyBwcml2YXRlIGtleSBhbmQgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgLyoqIElmIHNldCwgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgeHBydj86IHN0cmluZztcbiAgLyoqIGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleSAqKi9cbiAgYXBpS2V5Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZWNvdmVyIHdhbGxldCBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgb24gdGhlIHdyb25nIGJsb2NrY2hhaW5cbiAqIChmb3IgaW5zdGFuY2UgYml0Y29pbiBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgZm9yIGEgbGl0ZWNvaW4gd2FsbGV0KS5cbiAqXG4gKiBGZXRjaGVzIHRoZSB1bnNwZW50IGRhdGEgZnJvbSBCaXRHbydzIHB1YmxpYyBibG9ja2NoYWluIEFQSSBhbmQgdGhlIHNjcmlwdCBkYXRhIGZyb20gdGhlIHVzZXInc1xuICogd2FsbGV0LlxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnb1xuICogQHBhcmFtIHtSZWNvdmVyUGFyYW1zfSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgZ2V0V2FsbGV0KGJpdGdvLCBwYXJhbXMucmVjb3ZlcnlDb2luLCBwYXJhbXMud2FsbGV0SWQpO1xuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyPihcbiAgICBwYXJhbXMuc291cmNlQ29pbixcbiAgICBwYXJhbXMudHhpZCxcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlLFxuICAgIHdhbGxldCxcbiAgICBwYXJhbXMuYXBpS2V5XG4gICk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzID0gYXdhaXQgdG9XYWxsZXRVbnNwZW50czxUTnVtYmVyPihwYXJhbXMuc291cmNlQ29pbiwgcGFyYW1zLnJlY292ZXJ5Q29pbiwgdW5zcGVudHMsIHdhbGxldCk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGF3YWl0IGdldFdhbGxldEtleXMocGFyYW1zLnJlY292ZXJ5Q29pbiwgd2FsbGV0KSk7XG4gIGNvbnN0IHBydiA9XG4gICAgcGFyYW1zLnhwcnYgfHwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyBhd2FpdCBnZXRQcnYocGFyYW1zLnhwcnYsIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLCB3YWxsZXQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBmZWVSYXRlU2F0VkIgPSBhd2FpdCBnZXRGZWVSYXRlU2F0VkIocGFyYW1zLnNvdXJjZUNvaW4pO1xuXG4gIC8vIENyZWF0ZSBQU0JUIGZvciBib3RoIHNpZ25lZCBhbmQgdW5zaWduZWQgcmVjb3ZlcnlcbiAgbGV0IHBzYnQgPSBjcmVhdGVTd2VlcFRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgd2FsbGV0S2V5cyxcbiAgICB3YWxsZXRVbnNwZW50cyxcbiAgICBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgIGZlZVJhdGVTYXRWQlxuICApO1xuXG4gIC8vIEZvciB1bnNpZ25lZCByZWNvdmVyeSwgcmV0dXJuIHVuc2lnbmVkIFBTQlQgaGV4XG4gIGlmICghcHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JyksXG4gICAgICB3YWxsZXRJZDogcGFyYW1zLndhbGxldElkLFxuICAgICAgYWRkcmVzczogcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIGNvaW46IHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZvciBzaWduZWQgcmVjb3ZlcnksIHNpZ24gdGhlIFBTQlQgd2l0aCB1c2VyIGtleSBhbmQgcmV0dXJuIGhhbGYtc2lnbmVkIFBTQlRcbiAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIHBydiwgd2FsbGV0S2V5cywge1xuICAgIHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKHBhcmFtcy5zb3VyY2VDb2luLm5hbWUpLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246IHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCA/IDIgOiAxLFxuICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBzb3VyY2VDb2luOiBwYXJhbXMuc291cmNlQ29pbi5nZXRDaGFpbigpLFxuICAgIHJlY292ZXJ5Q29pbjogcGFyYW1zLnJlY292ZXJ5Q29pbi5nZXRDaGFpbigpLFxuICAgIHJlY292ZXJ5QW1vdW50OiB0b1ROdW1iZXIoXG4gICAgICBnZXRSZWNvdmVyeUFtb3VudChwc2J0LCB3YWxsZXRLZXlzLCBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzKSxcbiAgICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGVcbiAgICApIGFzIFROdW1iZXIsXG4gIH07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAoC,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;IACnC,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAA5C,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGhE;AAED,qBAAa,4BAA6B,SAAQ,eAAe;IAC5C,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAArD,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGzE;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IACxC,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;CAG7C;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,GAC9E,IAAI,CAcN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,GAAG,UAAU,EACvB,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAC3C,UAAU,EAAE,qBAAqB,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,IAAI,CAEN;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,EACzC,aAAa,EAAE,gBAAgB,CAAC,aAAa,GAC5C,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
1
+ {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAoC,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;IACnC,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAA5C,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGhE;AAED,qBAAa,4BAA6B,SAAQ,eAAe;IAC5C,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAArD,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGzE;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IACxC,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;CAG7C;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,GAC9E,IAAI,CAcN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,GAAG,UAAU,EACvB,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAC3C,UAAU,EAAE,qBAAqB,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,IAAI,CAEN;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,EACzC,aAAa,EAAE,gBAAgB,CAAC,aAAa,GAC5C,OAAO,CAAC,OAAO,CAAC,CAiDlB"}
@@ -75,6 +75,16 @@ async function verifyTransaction(coin, params, descriptorMap) {
75
75
  throw new sdk_core_1.TxIntentMismatchError(`unexpected transaction type: ${errorDetail}`, params.reqId, [params.txParams], params.txPrebuild.txHex, txExplanation);
76
76
  }
77
77
  assertValidTransaction(psbt, descriptorMap, params.txParams.recipients ?? [], coin.name);
78
+ const parsedOutputs = (0, parse_1.toBaseParsedTransactionOutputsFromPsbt)(psbt, descriptorMap, params.txParams.recipients ?? [], coin.name);
79
+ if (params.txParams.qr) {
80
+ const allExternalOutputs = [...parsedOutputs.explicitExternalOutputs, ...parsedOutputs.implicitExternalOutputs];
81
+ if (allExternalOutputs.length > 0) {
82
+ const txExplanation = await sdk_core_1.TxIntentMismatchError.tryGetTxExplanation(coin, params.txPrebuild);
83
+ throw new sdk_core_1.TxIntentMismatchError('quantum-resistant sweep transactions must only contain wallet-internal outputs', params.reqId, [params.txParams], params.txPrebuild.txHex, txExplanation);
84
+ }
85
+ return true;
86
+ }
87
+ assertExpectedOutputDifference(parsedOutputs);
78
88
  return true;
79
89
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrQ0Esd0VBZ0JDO0FBRUQsd0RBT0M7QUFjRCw4Q0EwQkM7QUFuR0QsOENBQTBGO0FBTTFGLHNDQUFpRDtBQUVqRCxtQ0FBaUU7QUFFakUsTUFBYSxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFKRCwwQ0FJQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsZUFBZTtJQUN0RCxZQUFtQixjQUE0QztRQUM3RCxLQUFLLENBQUMsMEJBQTBCLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRHpDLG1CQUFjLEdBQWQsY0FBYyxDQUE4QjtJQUUvRCxDQUFDO0NBQ0Y7QUFKRCxrREFJQztBQUVELE1BQWEsNEJBQTZCLFNBQVEsZUFBZTtJQUMvRCxZQUFtQix1QkFBcUQ7UUFDdEUsS0FBSyxDQUFDLCtDQUErQyx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRHZFLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBOEI7SUFFeEUsQ0FBQztDQUNGO0FBSkQsb0VBSUM7QUFFRCxNQUFhLHdCQUF5QixTQUFRLGVBQWU7SUFDM0QsWUFBbUIsTUFBeUI7UUFDMUMsS0FBSyxDQUFDLHFDQUFxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUQ1QyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtJQUU1QyxDQUFDO0NBQ0Y7QUFKRCw0REFJQztBQUVELFNBQWdCLDhCQUE4QixDQUM1QyxhQUErRTtJQUUvRSxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQ3JDLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxJQUFJLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckQsc0RBQXNEO1FBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsaUNBQWlDO1FBQ2pDLG9DQUFvQztRQUNwQyxNQUFNLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FDcEMsSUFBdUIsRUFDdkIsV0FBMkMsRUFDM0MsVUFBbUMsRUFDbkMsUUFBc0I7SUFFdEIsOEJBQThCLENBQUMsSUFBQSw4Q0FBc0MsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2xILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsSUFBc0IsRUFDdEIsTUFBeUMsRUFDekMsYUFBNkM7SUFFN0MsSUFBSSxJQUFVLENBQUM7SUFDZixJQUFJLENBQUM7UUFDSCxJQUFJLEdBQUcsSUFBQSw2QkFBb0IsRUFBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLGFBQWEsR0FBRyxNQUFNLGdDQUFxQixDQUFDLG1CQUFtQixDQUNuRSxJQUE0QixFQUM1QixNQUFNLENBQUMsVUFBVSxDQUNsQixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sSUFBSSxnQ0FBcUIsQ0FDN0IsZ0NBQWdDLFdBQVcsRUFBRSxFQUM3QyxNQUFNLENBQUMsS0FBSyxFQUNaLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUNqQixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFDdkIsYUFBYSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUcmFuc2FjdGlvblJlY2lwaWVudCwgVHhJbnRlbnRNaXNtYXRjaEVycm9yLCBJQmFzZUNvaW4gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQc2J0LCBkZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgQmFzZU91dHB1dCwgQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcbmltcG9ydCB7IGRlY29kZURlc2NyaXB0b3JQc2J0IH0gZnJvbSAnLi4vZGVjb2RlJztcblxuaW1wb3J0IHsgdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQgfSBmcm9tICcuL3BhcnNlJztcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yTWlzc2luZ091dHB1dHMgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWlzc2luZ091dHB1dHM6IEJhc2VPdXRwdXQ8YmlnaW50IHwgJ21heCc+W10pIHtcbiAgICBzdXBlcihgbWlzc2luZyBvdXRwdXRzIChjb3VudD0ke21pc3NpbmdPdXRwdXRzLmxlbmd0aH0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IEJhc2VPdXRwdXQ8YmlnaW50IHwgJ21heCc+W10pIHtcbiAgICBzdXBlcihgdW5leHBlY3RlZCBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXRzIChjb3VudD0ke2ltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLmxlbmd0aH0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdKSB7XG4gICAgc3VwZXIoYGFnZ3JlZ2F0ZSB2YWxpZGF0aW9uIGVycm9yIChjb3VudD0ke2Vycm9ycy5sZW5ndGh9KWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFeHBlY3RlZE91dHB1dERpZmZlcmVuY2UoXG4gIHBhcnNlZE91dHB1dHM6IEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHM8YmlnaW50LCBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPj5cbik6IHZvaWQge1xuICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gIGlmIChwYXJzZWRPdXRwdXRzLm1pc3NpbmdPdXRwdXRzLmxlbmd0aCA+IDApIHtcbiAgICBlcnJvcnMucHVzaChuZXcgRXJyb3JNaXNzaW5nT3V0cHV0cyhwYXJzZWRPdXRwdXRzLm1pc3NpbmdPdXRwdXRzKSk7XG4gIH1cbiAgaWYgKHBhcnNlZE91dHB1dHMuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZJWE1FOiBmb3IgcGF5Z28gd2UgbmVlZCB0byByZWxheCB0aGlzIGEgbGl0dGxlIGJpdFxuICAgIGVycm9ycy5wdXNoKG5ldyBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKHBhcnNlZE91dHB1dHMuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMpKTtcbiAgfVxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBGSVhNRShCVEMtMTY4OCk6IGVuYWJsZSBFUzIwMjFcbiAgICAvLyB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICB0aHJvdyBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKGVycm9ycyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkVHJhbnNhY3Rpb24oXG4gIHBzYnQ6IFBzYnQgfCBVaW50OEFycmF5LFxuICBkZXNjcmlwdG9yczogZGVzY3JpcHRvcldhbGxldC5EZXNjcmlwdG9yTWFwLFxuICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXSxcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZVxuKTogdm9pZCB7XG4gIGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZSh0b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidChwc2J0LCBkZXNjcmlwdG9ycywgcmVjaXBpZW50cywgY29pbk5hbWUpKTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4gaW5zdGVhZCBvZiB0aHJvd2luZy5cbiAqXG4gKiBXZSBmb2xsb3cgdGhlIEFic3RyYWN0VXR4b0NvaW4gaW50ZXJmYWNlIGhlcmUgd2hpY2ggaXMgYSBiaXQgY29uZnVzZWQgLSB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgYm9vbGVhbiBidXQgd2VcbiAqIGFsc28gdGhyb3cgZXJyb3JzIChiZWNhdXNlIHdlIGFjdHVhbGx5IHdhbnQgdG8ga25vdyB3aGF0IHdlbnQgd3JvbmcpLlxuICpcbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gZGVzY3JpcHRvck1hcFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3Nlc1xuICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaEVycm9yfSBpZiB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4sXG4gIGRlc2NyaXB0b3JNYXA6IGRlc2NyaXB0b3JXYWxsZXQuRGVzY3JpcHRvck1hcFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxldCBwc2J0OiBQc2J0O1xuICB0cnkge1xuICAgIHBzYnQgPSBkZWNvZGVEZXNjcmlwdG9yUHNidChwYXJhbXMudHhQcmVidWlsZCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB0eEV4cGxhbmF0aW9uID0gYXdhaXQgVHhJbnRlbnRNaXNtYXRjaEVycm9yLnRyeUdldFR4RXhwbGFuYXRpb24oXG4gICAgICBjb2luIGFzIHVua25vd24gYXMgSUJhc2VDb2luLFxuICAgICAgcGFyYW1zLnR4UHJlYnVpbGRcbiAgICApO1xuICAgIGNvbnN0IGVycm9yRGV0YWlsID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgIHRocm93IG5ldyBUeEludGVudE1pc21hdGNoRXJyb3IoXG4gICAgICBgdW5leHBlY3RlZCB0cmFuc2FjdGlvbiB0eXBlOiAke2Vycm9yRGV0YWlsfWAsXG4gICAgICBwYXJhbXMucmVxSWQsXG4gICAgICBbcGFyYW1zLnR4UGFyYW1zXSxcbiAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgdHhFeHBsYW5hdGlvblxuICAgICk7XG4gIH1cblxuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uKHBzYnQsIGRlc2NyaXB0b3JNYXAsIHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzID8/IFtdLCBjb2luLm5hbWUpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrQ0Esd0VBZ0JDO0FBRUQsd0RBT0M7QUFjRCw4Q0FxREM7QUE5SEQsOENBQTBGO0FBTTFGLHNDQUFpRDtBQUVqRCxtQ0FBaUU7QUFFakUsTUFBYSxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFKRCwwQ0FJQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsZUFBZTtJQUN0RCxZQUFtQixjQUE0QztRQUM3RCxLQUFLLENBQUMsMEJBQTBCLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRHpDLG1CQUFjLEdBQWQsY0FBYyxDQUE4QjtJQUUvRCxDQUFDO0NBQ0Y7QUFKRCxrREFJQztBQUVELE1BQWEsNEJBQTZCLFNBQVEsZUFBZTtJQUMvRCxZQUFtQix1QkFBcUQ7UUFDdEUsS0FBSyxDQUFDLCtDQUErQyx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRHZFLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBOEI7SUFFeEUsQ0FBQztDQUNGO0FBSkQsb0VBSUM7QUFFRCxNQUFhLHdCQUF5QixTQUFRLGVBQWU7SUFDM0QsWUFBbUIsTUFBeUI7UUFDMUMsS0FBSyxDQUFDLHFDQUFxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUQ1QyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtJQUU1QyxDQUFDO0NBQ0Y7QUFKRCw0REFJQztBQUVELFNBQWdCLDhCQUE4QixDQUM1QyxhQUErRTtJQUUvRSxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQ3JDLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFN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OEIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUU5QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVHJhbnNhY3Rpb25SZWNpcGllbnQsIFR4SW50ZW50TWlzbWF0Y2hFcnJvciwgSUJhc2VDb2luIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB0eXBlIHsgUHNidCwgZGVzY3JpcHRvcldhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IEJhc2VPdXRwdXQsIEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5pbXBvcnQgeyBkZWNvZGVEZXNjcmlwdG9yUHNidCB9IGZyb20gJy4uL2RlY29kZSc7XG5cbmltcG9ydCB7IHRvQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0c0Zyb21Qc2J0IH0gZnJvbSAnLi9wYXJzZSc7XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvck1pc3NpbmdPdXRwdXRzIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIG1pc3NpbmdPdXRwdXRzOiBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPltdKSB7XG4gICAgc3VwZXIoYG1pc3Npbmcgb3V0cHV0cyAoY291bnQ9JHttaXNzaW5nT3V0cHV0cy5sZW5ndGh9KWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPltdKSB7XG4gICAgc3VwZXIoYHVuZXhwZWN0ZWQgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0cyAoY291bnQ9JHtpbXBsaWNpdEV4dGVybmFsT3V0cHV0cy5sZW5ndGh9KWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXSkge1xuICAgIHN1cGVyKGBhZ2dyZWdhdGUgdmFsaWRhdGlvbiBlcnJvciAoY291bnQ9JHtlcnJvcnMubGVuZ3RofSlgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlKFxuICBwYXJzZWRPdXRwdXRzOiBCYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzPGJpZ2ludCwgQmFzZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz4+XG4pOiB2b2lkIHtcbiAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICBpZiAocGFyc2VkT3V0cHV0cy5taXNzaW5nT3V0cHV0cy5sZW5ndGggPiAwKSB7XG4gICAgZXJyb3JzLnB1c2gobmV3IEVycm9yTWlzc2luZ091dHB1dHMocGFyc2VkT3V0cHV0cy5taXNzaW5nT3V0cHV0cykpO1xuICB9XG4gIGlmIChwYXJzZWRPdXRwdXRzLmltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBGSVhNRTogZm9yIHBheWdvIHdlIG5lZWQgdG8gcmVsYXggdGhpcyBhIGxpdHRsZSBiaXRcbiAgICBlcnJvcnMucHVzaChuZXcgRXJyb3JJbXBsaWNpdEV4dGVybmFsT3V0cHV0cyhwYXJzZWRPdXRwdXRzLmltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSk7XG4gIH1cbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gRklYTUUoQlRDLTE2ODgpOiBlbmFibGUgRVMyMDIxXG4gICAgLy8gdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcihlcnJvcnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uKFxuICBwc2J0OiBQc2J0IHwgVWludDhBcnJheSxcbiAgZGVzY3JpcHRvcnM6IGRlc2NyaXB0b3JXYWxsZXQuRGVzY3JpcHRvck1hcCxcbiAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W10sXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IHZvaWQge1xuICBhc3NlcnRFeHBlY3RlZE91dHB1dERpZmZlcmVuY2UodG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQocHNidCwgZGVzY3JpcHRvcnMsIHJlY2lwaWVudHMsIGNvaW5OYW1lKSk7XG59XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvbiB0aGF0IHJldHVybnMgYSBib29sZWFuIGluc3RlYWQgb2YgdGhyb3dpbmcuXG4gKlxuICogV2UgZm9sbG93IHRoZSBBYnN0cmFjdFV0eG9Db2luIGludGVyZmFjZSBoZXJlIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2VkIC0gdGhlIHJldHVybiB2YWx1ZSBpcyBhIGJvb2xlYW4gYnV0IHdlXG4gKiBhbHNvIHRocm93IGVycm9ycyAoYmVjYXVzZSB3ZSBhY3R1YWxseSB3YW50IHRvIGtub3cgd2hhdCB3ZW50IHdyb25nKS5cbiAqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBwYXNzZXNcbiAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hFcnJvcn0gaWYgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICBkZXNjcmlwdG9yTWFwOiBkZXNjcmlwdG9yV2FsbGV0LkRlc2NyaXB0b3JNYXBcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBsZXQgcHNidDogUHNidDtcbiAgdHJ5IHtcbiAgICBwc2J0ID0gZGVjb2RlRGVzY3JpcHRvclBzYnQocGFyYW1zLnR4UHJlYnVpbGQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgdHhFeHBsYW5hdGlvbiA9IGF3YWl0IFR4SW50ZW50TWlzbWF0Y2hFcnJvci50cnlHZXRUeEV4cGxhbmF0aW9uKFxuICAgICAgY29pbiBhcyB1bmtub3duIGFzIElCYXNlQ29pbixcbiAgICAgIHBhcmFtcy50eFByZWJ1aWxkXG4gICAgKTtcbiAgICBjb25zdCBlcnJvckRldGFpbCA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICB0aHJvdyBuZXcgVHhJbnRlbnRNaXNtYXRjaEVycm9yKFxuICAgICAgYHVuZXhwZWN0ZWQgdHJhbnNhY3Rpb24gdHlwZTogJHtlcnJvckRldGFpbH1gLFxuICAgICAgcGFyYW1zLnJlcUlkLFxuICAgICAgW3BhcmFtcy50eFBhcmFtc10sXG4gICAgICBwYXJhbXMudHhQcmVidWlsZC50eEhleCxcbiAgICAgIHR4RXhwbGFuYXRpb25cbiAgICApO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvbihwc2J0LCBkZXNjcmlwdG9yTWFwLCBwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cyA/PyBbXSwgY29pbi5uYW1lKTtcblxuICBjb25zdCBwYXJzZWRPdXRwdXRzID0gdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQoXG4gICAgcHNidCxcbiAgICBkZXNjcmlwdG9yTWFwLFxuICAgIHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzID8/IFtdLFxuICAgIGNvaW4ubmFtZVxuICApO1xuXG4gIGlmIChwYXJhbXMudHhQYXJhbXMucXIpIHtcbiAgICBjb25zdCBhbGxFeHRlcm5hbE91dHB1dHMgPSBbLi4ucGFyc2VkT3V0cHV0cy5leHBsaWNpdEV4dGVybmFsT3V0cHV0cywgLi4ucGFyc2VkT3V0cHV0cy5pbXBsaWNpdEV4dGVybmFsT3V0cHV0c107XG4gICAgaWYgKGFsbEV4dGVybmFsT3V0cHV0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0eEV4cGxhbmF0aW9uID0gYXdhaXQgVHhJbnRlbnRNaXNtYXRjaEVycm9yLnRyeUdldFR4RXhwbGFuYXRpb24oXG4gICAgICAgIGNvaW4gYXMgdW5rbm93biBhcyBJQmFzZUNvaW4sXG4gICAgICAgIHBhcmFtcy50eFByZWJ1aWxkXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IFR4SW50ZW50TWlzbWF0Y2hFcnJvcihcbiAgICAgICAgJ3F1YW50dW0tcmVzaXN0YW50IHN3ZWVwIHRyYW5zYWN0aW9ucyBtdXN0IG9ubHkgY29udGFpbiB3YWxsZXQtaW50ZXJuYWwgb3V0cHV0cycsXG4gICAgICAgIHBhcmFtcy5yZXFJZCxcbiAgICAgICAgW3BhcmFtcy50eFBhcmFtc10sXG4gICAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgICB0eEV4cGxhbmF0aW9uXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZShwYXJzZWRPdXRwdXRzKTtcblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/verifyTransaction.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAoC,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAsBpF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC,CAuJlB"}
1
+ {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/verifyTransaction.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAoC,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAsBpF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC,CAiLlB"}
@@ -91,6 +91,7 @@ async function verifyTransaction(coin, bitgo, params) {
91
91
  throw new Error('should not have unspents in txInfo for psbt');
92
92
  }
93
93
  const disableNetworking = !!verification.disableNetworking;
94
+ const isBridging = txParams.type === 'bridging';
94
95
  const parsedTransaction = await coin.parseTransaction({
95
96
  txParams,
96
97
  txPrebuild,
@@ -147,6 +148,16 @@ async function verifyTransaction(coin, bitgo, params) {
147
148
  }
148
149
  debug('successfully verified user public key and custom change key signatures');
149
150
  }
151
+ if (txParams.qr) {
152
+ const allExternalOutputs = [
153
+ ...parsedTransaction.explicitExternalOutputs,
154
+ ...parsedTransaction.implicitExternalOutputs,
155
+ ];
156
+ if (allExternalOutputs.length > 0) {
157
+ throwTxMismatch('quantum-resistant sweep transactions must only contain wallet-internal outputs');
158
+ }
159
+ return true;
160
+ }
150
161
  const missingOutputs = parsedTransaction.missingOutputs;
151
162
  if (missingOutputs.length !== 0) {
152
163
  // there are some outputs in the recipients list that have not made it into the actual transaction
@@ -168,7 +179,22 @@ async function verifyTransaction(coin, bitgo, params) {
168
179
  debug('Intended spend is %s, Non-change amount is %s, paygo limit is %s', intendedExternalSpend.toString(), nonChangeAmount.toString(), payAsYouGoLimit.toString());
169
180
  // There are two instances where we will get into this point here
170
181
  if (nonChangeAmount.gt(payAsYouGoLimit)) {
171
- if (isPsbt && parsedTransaction.customChange) {
182
+ if (isBridging) {
183
+ // The implicit external output is the bridge deposit address (see note above); it has no
184
+ // recipient to match against, so instead verify the total implicit external spend equals the
185
+ // intended bridge amount from bridgingParams.
186
+ const bridgeAmount = txParams.bridgingParams?.sbtc?.amount;
187
+ if (bridgeAmount === undefined) {
188
+ throwTxMismatch('bridging transaction is missing bridgingParams.sbtc.amount');
189
+ }
190
+ else if (!nonChangeAmount.eq(bridgeAmount.toString())) {
191
+ throwTxMismatch(`bridging output amount (${nonChangeAmount.toString()}) does not match intended bridge amount (${bridgeAmount})`);
192
+ }
193
+ else {
194
+ debug('verified bridging output amount matches bridgingParams.sbtc.amount');
195
+ }
196
+ }
197
+ else if (isPsbt && parsedTransaction.customChange) {
172
198
  // In the case that we have a custom change address on a wallet and we are building the transaction
173
199
  // with a PSBT, we do not have the metadata to verify the address from the custom change wallet, nor
174
200
  // can we fetch that information from the other wallet because we may not have the credentials. Therefore,
@@ -200,4 +226,4 @@ async function verifyTransaction(coin, bitgo, params) {
200
226
  }
201
227
  return true;
202
228
  }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2Q0EsOENBMkpDO0FBeE1ELGtEQUErQjtBQUMvQixvREFBdUI7QUFDdkIsZ0VBQXFDO0FBQ3JDLDhDQUE4RTtBQUM5RSx5REFBMkM7QUFJM0MsK0NBQTJHO0FBQzNHLGdEQUE4RDtBQUU5RCxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVUsRUFBQyx1Q0FBdUMsQ0FBQyxDQUFDO0FBRWxFOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxnQkFBMEI7SUFDL0MsaUdBQWlHO0lBQ2pHLHFEQUFxRDtJQUNyRCxJQUFJLENBQUMsZ0JBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDcEQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0Qsa0ZBQWtGO0lBQ2xGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxJQUFzQixFQUN0QixLQUFnQixFQUNoQixNQUF5QztJQUV6QyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxnQ0FBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUE0QixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWhILGdFQUFnRTtJQUNoRSxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQWUsRUFBUyxFQUFFO1FBQ2pELE1BQU0sSUFBSSxnQ0FBcUIs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Q0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ3hGLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDVixDQUFDO0lBQ0YsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sR0FBRyxHQUFHLFdBQVcsR0FBRyxZQUFZLENBQUM7SUFFdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksS0FBSyxDQUNiLHVCQUF1QixZQUFZLDhDQUE4QyxXQUFXLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUNwSCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UsIFR4SW50ZW50TWlzbWF0Y2hFcnJvciwgSUJhc2VDb2luIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBPdXRwdXQsIFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgdmVyaWZ5Q3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcywgdmVyaWZ5S2V5U2lnbmF0dXJlLCB2ZXJpZnlVc2VyUHVibGljS2V5IH0gZnJvbSAnLi4vLi4vdmVyaWZ5S2V5JztcbmltcG9ydCB7IGdldFBzYnRUeElucHV0cywgZ2V0VHhJbnB1dHMgfSBmcm9tICcuLi9mZXRjaElucHV0cyc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygnYml0Z286YWJzdHJhY3QtdXR4bzp2ZXJpZnlUcmFuc2FjdGlvbicpO1xuXG4vKipcbiAqIEdldCB0aGUgbWF4aW11bSBwZXJjZW50YWdlIGxpbWl0IGZvciBwYXktYXMteW91LWdvIG91dHB1dHNcbiAqXG4gKiBAcHJvdGVjdGVkXG4gKi9cbmZ1bmN0aW9uIGdldFBheUdvTGltaXQoYWxsb3dQYXlnb091dHB1dD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAvLyBhbGxvd2luZyBwYXlnbyBvdXRwdXRzIG5lZWRzIHRvIGJlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBzbyBvbmx5IGRpc2FsbG93IHBheWdvIG91dHB1dHMgaWYgdGhlXG4gIC8vIHJlbGV2YW50IHZlcmlmaWNhdGlvbiBvcHRpb24gaXMgYm90aCBzZXQgYW5kIGZhbHNlXG4gIGlmICghXy5pc05pbChhbGxvd1BheWdvT3V0cHV0KSAmJiAhYWxsb3dQYXlnb091dHB1dCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIC8vIDE1MCBiYXNpcyBwb2ludHMgaXMgdGhlIGFic29sdXRlIHBlcm1pdHRlZCBtYXhpbXVtIGlmIHBheWdvIG91dHB1dHMgYXJlIGFsbG93ZWRcbiAgcmV0dXJuIDAuMDE1O1xufVxuXG4vKipcbiAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uIGZvciBmaXhlZC1zY3JpcHQgd2FsbGV0c1xuICpcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0cmFuc2FjdGlvbiB2ZXJpZmljYXRpb24gZm9yIHRyYWRpdGlvbmFsIFVUWE8gY29pbnMgdXNpbmcgZml4ZWQgc2NyaXB0c1xuICogKG5vbi1kZXNjcmlwdG9yIHdhbGxldHMpLiBJdCB2YWxpZGF0ZXMga2V5Y2hhaW5zLCBzaWduYXR1cmVzLCBvdXRwdXRzLCBhbmQgYW1vdW50cy5cbiAqXG4gKiBAcGFyYW0gY29pbiAtIFRoZSBVVFhPIGNvaW4gaW5zdGFuY2VcbiAqIEBwYXJhbSBiaXRnbyAtIEJpdEdvIEFQSSBpbnN0YW5jZSBmb3IgbmV0d29yayBjYWxsc1xuICogQHBhcmFtIHBhcmFtcyAtIFZlcmlmaWNhdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gcGFyYW1zLnR4UGFyYW1zIC0gVHJhbnNhY3Rpb24gcGFyYW1ldGVycyBwYXNzZWQgdG8gc2VuZFxuICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIC0gUHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHNlcnZlclxuICogQHBhcmFtIHBhcmFtcy53YWxsZXQgLSBXYWxsZXQgb2JqZWN0IHRvIG9idGFpbiBrZXlzIHRvIHZlcmlmeSBhZ2FpbnN0XG4gKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbiAtIFZlcmlmaWNhdGlvbiBvcHRpb25zIChkaXNhYmxlTmV0d29ya2luZywga2V5Y2hhaW5zLCBhZGRyZXNzZXMpXG4gKiBAcGFyYW0gcGFyYW1zLnJlcUlkIC0gT3B0aW9uYWwgcmVxdWVzdCBJRCBmb3IgbG9nZ2luZ1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3Nlc1xuICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaEVycm9yfSBpZiB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiA9IHt9LCByZXFJZCB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHR4RXhwbGFuYXRpb24gPSBhd2FpdCBUeEludGVudE1pc21hdGNoRXJyb3IudHJ5R2V0VHhFeHBsYW5hdGlvbihjb2luIGFzIHVua25vd24gYXMgSUJhc2VDb2luLCB0eFByZWJ1aWxkKTtcblxuICAvLyBIZWxwZXIgdG8gdGhyb3cgVHhJbnRlbnRNaXNtYXRjaEVycm9yIHdpdGggY29uc2lzdGVudCBjb250ZXh0XG4gIGNvbnN0IHRocm93VHhNaXNtYXRjaCA9IChtZXNzYWdlOiBzdHJpbmcpOiBuZXZlciA9PiB7XG4gICAgdGhyb3cgbmV3IFR4SW50ZW50TWlzbWF0Y2hFcnJvcihtZXNzYWdlLCByZXFJZCwgW3R4UGFyYW1zXSwgdHhQcmVidWlsZC50eEhleCwgdHhFeHBsYW5hdGlvbik7XG4gIH07XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZykgJiYgIV8uaXNCb29sZWFuKHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgfVxuICBjb25zdCBpc1BzYnQgPSB0eFByZWJ1aWxkLnR4SGV4ICYmIHV0eG9saWIuYml0Z28uaXNQc2J0KHR4UHJlYnVpbGQudHhIZXgpO1xuICBpZiAoaXNQc2J0ICYmIHR4UHJlYnVpbGQudHhJbmZvPy51bnNwZW50cykge1xuICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBoYXZlIHVuc3BlbnRzIGluIHR4SW5mbyBmb3IgcHNidCcpO1xuICB9XG4gIGNvbnN0IGRpc2FibGVOZXR3b3JraW5nID0gISF2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmc7XG4gIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uOiBQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPiA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgdHhQYXJhbXMsXG4gICAgdHhQcmVidWlsZCxcbiAgICB3YWxsZXQsXG4gICAgdmVyaWZpY2F0aW9uLFxuICAgIHJlcUlkLFxuICB9KTtcblxuICBjb25zdCBrZXljaGFpbnMgPSBwYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnM7XG5cbiAgLy8gdmVyaWZ5IHRoYXQgdGhlIGNsYWltZWQgdXNlciBwdWJsaWMga2V5IGNvcnJlc3BvbmRzIHRvIHRoZSB3YWxsZXQncyB1c2VyIHByaXZhdGUga2V5XG4gIGxldCB1c2VyUHVibGljS2V5VmVyaWZpZWQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICAvLyB2ZXJpZnkgdGhlIHVzZXIgcHVibGljIGtleSBtYXRjaGVzIHRoZSBwcml2YXRlIGtleSAtIHRoaXMgd2lsbCB0aHJvdyBpZiB0aGVyZSBpcyBubyBtYXRjaFxuICAgIHVzZXJQdWJsaWNLZXlWZXJpZmllZCA9IHZlcmlmeVVzZXJQdWJsaWNLZXkoYml0Z28sIHtcbiAgICAgIHVzZXJLZXljaGFpbjoga2V5Y2hhaW5zLnVzZXIsXG4gICAgICBkaXNhYmxlTmV0d29ya2luZyxcbiAgICAgIHR4UGFyYW1zLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZGVidWcoJ2ZhaWxlZCB0byB2ZXJpZnkgdXNlciBwdWJsaWMga2V5IScsIGUpO1xuICB9XG5cbiAgLy8gbGV0J3MgdmVyaWZ5IHRoZXNlIGtleWNoYWluc1xuICBjb25zdCBrZXlTaWduYXR1cmVzID0gcGFyc2VkVHJhbnNhY3Rpb24ua2V5U2lnbmF0dXJlcztcbiAgaWYgKCFfLmlzRW1wdHkoa2V5U2lnbmF0dXJlcykpIHtcbiAgICBjb25zdCB2ZXJpZnkgPSAoa2V5LCBwdWIpID0+IHtcbiAgICAgIGlmICgha2V5Y2hhaW5zLnVzZXIgfHwgIWtleWNoYWlucy51c2VyLnB1Yikge1xuICAgICAgICB0aHJvd1R4TWlzbWF0Y2goJ21pc3NpbmcgdXNlciBrZXljaGFpbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZlcmlmeUtleVNpZ25hdHVyZSh7XG4gICAgICAgIHVzZXJLZXljaGFpbjoga2V5Y2hhaW5zLnVzZXIgYXMgeyBwdWI6IHN0cmluZyB9LFxuICAgICAgICBrZXljaGFpblRvVmVyaWZ5OiBrZXksXG4gICAgICAgIGtleVNpZ25hdHVyZTogcHViLFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpc0JhY2t1cEtleVNpZ25hdHVyZVZhbGlkID0gdmVyaWZ5KGtleWNoYWlucy5iYWNrdXAsIGtleVNpZ25hdHVyZXMuYmFja3VwUHViKTtcbiAgICBjb25zdCBpc0JpdGdvS2V5U2lnbmF0dXJlVmFsaWQgPSB2ZXJpZnkoa2V5Y2hhaW5zLmJpdGdvLCBrZXlTaWduYXR1cmVzLmJpdGdvUHViKTtcbiAgICBpZiAoIWlzQmFja3VwS2V5U2lnbmF0dXJlVmFsaWQgfHwgIWlzQml0Z29LZXlTaWduYXR1cmVWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWNvbmRhcnkgcHVibGljIGtleSBzaWduYXR1cmVzIGludmFsaWQnKTtcbiAgICB9XG4gICAgZGVidWcoJ3N1Y2Nlc3NmdWxseSB2ZXJpZmllZCBiYWNrdXAgYW5kIGJpdGdvIGtleSBzaWduYXR1cmVzJyk7XG4gIH0gZWxzZSBpZiAoIWRpc2FibGVOZXR3b3JraW5nKSB7XG4gICAgLy8gdGhlc2Uga2V5cyB3ZXJlIG9idGFpbmVkIG9ubGluZSBhbmQgdGhlaXIgc2lnbmF0dXJlcyB3ZXJlIG5vdCB2ZXJpZmllZFxuICAgIC8vIHRoaXMgY291bGQgYmUgZGFuZ2Vyb3VzXG4gICAgY29uc29sZS5sb2coJ3Vuc2lnbmVkIGtleXMgb2J0YWluZWQgb25saW5lIGFyZSBiZWluZyB1c2VkIGZvciBhZGRyZXNzIHZlcmlmaWNhdGlvbicpO1xuICB9XG5cbiAgaWYgKHBhcnNlZFRyYW5zYWN0aW9uLm5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uKSB7XG4gICAgaWYgKCFrZXljaGFpbnMudXNlciB8fCAhdXNlclB1YmxpY0tleVZlcmlmaWVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIHJlcXVpcmVzIHZlcmlmaWNhdGlvbiBvZiB1c2VyIHB1YmxpYyBrZXksIGJ1dCBpdCB3YXMgdW5hYmxlIHRvIGJlIHZlcmlmaWVkJyk7XG4gICAgfVxuICAgIGNvbnN0IGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXNWZXJpZmllZCA9IHZlcmlmeUN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMocGFyc2VkVHJhbnNhY3Rpb24sIGtleWNoYWlucy51c2VyKTtcbiAgICBpZiAoIWN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXNWZXJpZmllZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndHJhbnNhY3Rpb24gcmVxdWlyZXMgdmVyaWZpY2F0aW9uIG9mIGN1c3RvbSBjaGFuZ2Uga2V5IHNpZ25hdHVyZXMsIGJ1dCB0aGV5IHdlcmUgdW5hYmxlIHRvIGJlIHZlcmlmaWVkJ1xuICAgICAgKTtcbiAgICB9XG4gICAgZGVidWcoJ3N1Y2Nlc3NmdWxseSB2ZXJpZmllZCB1c2VyIHB1YmxpYyBrZXkgYW5kIGN1c3RvbSBjaGFuZ2Uga2V5IHNpZ25hdHVyZXMnKTtcbiAgfVxuXG4gIGNvbnN0IG1pc3NpbmdPdXRwdXRzID0gcGFyc2VkVHJhbnNhY3Rpb24ubWlzc2luZ091dHB1dHM7XG4gIGlmIChtaXNzaW5nT3V0cHV0cy5sZW5ndGggIT09IDApIHtcbiAgICAvLyB0aGVyZSBhcmUgc29tZSBvdXRwdXRzIGluIHRoZSByZWNpcGllbnRzIGxpc3QgdGhhdCBoYXZlIG5vdCBtYWRlIGl0IGludG8gdGhlIGFjdHVhbCB0cmFuc2FjdGlvblxuICAgIHRocm93VHhNaXNtYXRjaCgnZXhwZWN0ZWQgb3V0cHV0cyBtaXNzaW5nIGluIHRyYW5zYWN0aW9uIHByZWJ1aWxkJyk7XG4gIH1cblxuICBjb25zdCBpbnRlbmRlZEV4dGVybmFsU3BlbmQgPSBwYXJzZWRUcmFuc2FjdGlvbi5leHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ7XG5cbiAgLy8gdGhpcyBpcyBhIGxpbWl0IHdlIGltcG9zZSBmb3IgdGhlIHRvdGFsIHZhbHVlIHRoYXQgaXMgYW1lbmRlZCB0byB0aGUgdHJhbnNhY3Rpb24gYmV5b25kIHdoYXQgd2FzIG9yaWdpbmFsbHkgaW50ZW5kZWRcbiAgY29uc3QgcGF5QXNZb3VHb0xpbWl0ID0gbmV3IEJpZ051bWJlcihnZXRQYXlHb0xpbWl0KHZlcmlmaWNhdGlvbi5hbGxvd1BheWdvT3V0cHV0KSkubXVsdGlwbGllZEJ5KFxuICAgIGludGVuZGVkRXh0ZXJuYWxTcGVuZC50b1N0cmluZygpXG4gICk7XG5cbiAgLypcbiAgU29tZSBleHBsYW5hdGlvbiBmb3Igd2h5IHdlJ3JlIGRvaW5nIHdoYXQgd2UncmUgZG9pbmc6XG4gIFNvbWUgY3VzdG9tZXJzIHdpbGwgaGF2ZSBhbiBvdXRwdXQgdG8gQml0R28ncyBQQVlHbyB3YWxsZXQgYWRkZWQgdG8gdGhlaXIgdHJhbnNhY3Rpb24sIGFuZCB3ZSBuZWVkIHRvIGFjY291bnQgZm9yXG4gIGl0IGhlcmUuIFRvIHByb3RlY3Qgc29tZW9uZSB0YW1wZXJpbmcgd2l0aCB0aGUgb3V0cHV0IHRvIG1ha2UgaXQgc2VuZCBtb3JlIHRoYW4gaXQgc2hvdWxkIHRvIEJpdEdvLCB3ZSBkZWZpbmUgYVxuICB0aHJlc2hvbGQgZm9yIHRoZSBvdXRwdXQncyB2YWx1ZSBhYm92ZSB3aGljaCB3ZSdsbCB0aHJvdyBhbiBlcnJvciwgYmVjYXVzZSB0aGUgcGF5Z28gb3V0cHV0IHNob3VsZCBuZXZlciBiZSB0aGF0XG4gIGhpZ2guXG4gICAqL1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgZXh0cmEgYWRkcmVzc2VzIGFyZSBjaGFuZ2UgYWRkcmVzc2VzXG4gIC8vIGdldCBhbGwgdGhlIGFkZGl0aW9uYWwgZXh0ZXJuYWwgb3V0cHV0cyB0aGUgc2VydmVyIGFkZGVkIGFuZCBjYWxjdWxhdGUgdGhlaXIgdmFsdWVzXG4gIGNvbnN0IG5vbkNoYW5nZUFtb3VudCA9IG5ldyBCaWdOdW1iZXIocGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LnRvU3RyaW5nKCkpO1xuXG4gIGRlYnVnKFxuICAgICdJbnRlbmRlZCBzcGVuZCBpcyAlcywgTm9uLWNoYW5nZSBhbW91bnQgaXMgJXMsIHBheWdvIGxpbWl0IGlzICVzJyxcbiAgICBpbnRlbmRlZEV4dGVybmFsU3BlbmQudG9TdHJpbmcoKSxcbiAgICBub25DaGFuZ2VBbW91bnQudG9TdHJpbmcoKSxcbiAgICBwYXlBc1lvdUdvTGltaXQudG9TdHJpbmcoKVxuICApO1xuXG4gIC8vIFRoZXJlIGFyZSB0d28gaW5zdGFuY2VzIHdoZXJlIHdlIHdpbGwgZ2V0IGludG8gdGhpcyBwb2ludCBoZXJlXG4gIGlmIChub25DaGFuZ2VBbW91bnQuZ3QocGF5QXNZb3VHb0xpbWl0KSkge1xuICAgIGlmIChpc1BzYnQgJiYgcGFyc2VkVHJhbnNhY3Rpb24uY3VzdG9tQ2hhbmdlKSB7XG4gICAgICAvLyBJbiB0aGUgY2FzZSB0aGF0IHdlIGhhdmUgYSBjdXN0b20gY2hhbmdlIGFkZHJlc3Mgb24gYSB3YWxsZXQgYW5kIHdlIGFyZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb25cbiAgICAgIC8vIHdpdGggYSBQU0JULCB3ZSBkbyBub3QgaGF2ZSB0aGUgbWV0YWRhdGEgdG8gdmVyaWZ5IHRoZSBhZGRyZXNzIGZyb20gdGhlIGN1c3RvbSBjaGFuZ2Ugd2FsbGV0LCBub3JcbiAgICAgIC8vIGNhbiB3ZSBmZXRjaCB0aGF0IGluZm9ybWF0aW9uIGZyb20gdGhlIG90aGVyIHdhbGxldCBiZWNhdXNlIHdlIG1heSBub3QgaGF2ZSB0aGUgY3JlZGVudGlhbHMuIFRoZXJlZm9yZSxcbiAgICAgIC8vIHdlIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGhlcmUsIGJ1dCB3ZSB3aWxsIGxvZyBhIHdhcm5pbmcuXG4gICAgICBkZWJ1ZyhgY2Fubm90IHZlcmlmeSBzb21lIG9mIHRoZSBhZGRyZXNzZXMgYmVjYXVzZSBpdCBiZWxvbmdzIHRvIGEgc2VwYXJhdGUgd2FsbGV0YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZSBhZGRpdGlvbmFsIGV4dGVybmFsIG91dHB1dHMgY2FuIG9ubHkgYmUgQml0R28ncyBwYXktYXMteW91LWdvIGZlZSwgYnV0IHdlIGNhbm5vdCB2ZXJpZnkgdGhlIHdhbGxldCBhZGRyZXNzXG4gICAgICAvLyB0aGVyZSBhcmUgc29tZSBhZGRyZXNzZXMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgaW50ZW5kZWQgcmVjaXBpZW50cyB0aGF0IGFyZSBub3QgY2hhbmdlIGFkZHJlc3Nlc1xuICAgICAgdGhyb3dUeE1pc21hdGNoKCdwcmVidWlsZCBhdHRlbXB0cyB0byBzcGVuZCB0byB1bmludGVuZGVkIGV4dGVybmFsIHJlY2lwaWVudHMnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhbGxPdXRwdXRzID0gcGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cztcbiAgaWYgKCF0eFByZWJ1aWxkLnR4SGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB0eFByZWJ1aWxkLnR4SGV4IG5vdCBzZXRgKTtcbiAgfVxuICBjb25zdCBpbnB1dHMgPSBpc1BzYnRcbiAgICA/IGdldFBzYnRUeElucHV0cyh0eFByZWJ1aWxkLnR4SGV4LCBjb2luLm5hbWUpLm1hcCgodikgPT4gKHtcbiAgICAgICAgLi4udixcbiAgICAgICAgdmFsdWU6IHV0eG9saWIuYml0Z28udG9UTnVtYmVyKHYudmFsdWUsIGNvaW4uYW1vdW50VHlwZSksXG4gICAgICB9KSlcbiAgICA6IGF3YWl0IGdldFR4SW5wdXRzKHsgdHhQcmVidWlsZCwgYml0Z28sIGNvaW4sIGRpc2FibGVOZXR3b3JraW5nLCByZXFJZCB9KTtcbiAgLy8gY29pbnMgKGRvZ2UpIHRoYXQgY2FuIGV4Y2VlZCBudW1iZXIgbGltaXRzIChhbmQgdGh1cyB3aWxsIHVzZSBiaWdpbnQpIHdpbGwgaGF2ZSB0aGUgYHZhbHVlU3RyaW5nYCBmaWVsZFxuICBjb25zdCBpbnB1dEFtb3VudCA9IGlucHV0cy5yZWR1Y2UoXG4gICAgKHN1bTogYmlnaW50LCBpKSA9PiBzdW0gKyBCaWdJbnQoY29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50JyA/IGkudmFsdWVTdHJpbmcgOiBpLnZhbHVlKSxcbiAgICBCaWdJbnQoMClcbiAgKTtcbiAgY29uc3Qgb3V0cHV0QW1vdW50ID0gYWxsT3V0cHV0cy5yZWR1Y2UoKHN1bTogYmlnaW50LCBvOiBPdXRwdXQpID0+IHN1bSArIEJpZ0ludChvLmFtb3VudCksIEJpZ0ludCgwKSk7XG4gIGNvbnN0IGZlZSA9IGlucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50O1xuXG4gIGlmIChmZWUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYGF0dGVtcHRpbmcgdG8gc3BlbmQgJHtvdXRwdXRBbW91bnR9IHNhdG9zaGlzLCB3aGljaCBleGNlZWRzIHRoZSBpbnB1dCBhbW91bnQgKCR7aW5wdXRBbW91bnR9IHNhdG9zaGlzKSBieSAkey1mZWV9YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2Q0EsOENBcUxDO0FBbE9ELGtEQUErQjtBQUMvQixvREFBdUI7QUFDdkIsZ0VBQXFDO0FBQ3JDLDhDQUE4RTtBQUM5RSx5REFBMkM7QUFJM0MsK0NBQTJHO0FBQzNHLGdEQUE4RDtBQUU5RCxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVUsRUFBQyx1Q0FBdUMsQ0FBQyxDQUFDO0FBRWxFOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxnQkFBMEI7SUFDL0MsaUdBQWlHO0lBQ2pHLHFEQUFxRDtJQUNyRCxJQUFJLENBQUMsZ0JBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDcEQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0Qsa0ZBQWtGO0lBQ2xGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxJQUFzQixFQUN0QixLQUFnQixFQUNoQixNQUF5QztJQUV6QyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxnQ0FBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUE0QixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWhILGdFQUFnRTtJQUNoRSxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQWUsRUFBUyxFQUFFO1FBQ2pELE1BQU0sSUFBSSxnQ0FBcUIs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Q0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RyxNQUFNLEdBQUcsR0FBRyxXQUFXLEdBQUcsWUFBWSxDQUFDO0lBRXZDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsWUFBWSw4Q0FBOEMsV0FBVyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDcEgsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQml0R29CYXNlLCBUeEludGVudE1pc21hdGNoRXJyb3IsIElCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgT3V0cHV0LCBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHZlcmlmeUN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMsIHZlcmlmeUtleVNpZ25hdHVyZSwgdmVyaWZ5VXNlclB1YmxpY0tleSB9IGZyb20gJy4uLy4uL3ZlcmlmeUtleSc7XG5pbXBvcnQgeyBnZXRQc2J0VHhJbnB1dHMsIGdldFR4SW5wdXRzIH0gZnJvbSAnLi4vZmV0Y2hJbnB1dHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ2JpdGdvOmFic3RyYWN0LXV0eG86dmVyaWZ5VHJhbnNhY3Rpb24nKTtcblxuLyoqXG4gKiBHZXQgdGhlIG1heGltdW0gcGVyY2VudGFnZSBsaW1pdCBmb3IgcGF5LWFzLXlvdS1nbyBvdXRwdXRzXG4gKlxuICogQHByb3RlY3RlZFxuICovXG5mdW5jdGlvbiBnZXRQYXlHb0xpbWl0KGFsbG93UGF5Z29PdXRwdXQ/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgLy8gYWxsb3dpbmcgcGF5Z28gb3V0cHV0cyBuZWVkcyB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvciwgc28gb25seSBkaXNhbGxvdyBwYXlnbyBvdXRwdXRzIGlmIHRoZVxuICAvLyByZWxldmFudCB2ZXJpZmljYXRpb24gb3B0aW9uIGlzIGJvdGggc2V0IGFuZCBmYWxzZVxuICBpZiAoIV8uaXNOaWwoYWxsb3dQYXlnb091dHB1dCkgJiYgIWFsbG93UGF5Z29PdXRwdXQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICAvLyAxNTAgYmFzaXMgcG9pbnRzIGlzIHRoZSBhYnNvbHV0ZSBwZXJtaXR0ZWQgbWF4aW11bSBpZiBwYXlnbyBvdXRwdXRzIGFyZSBhbGxvd2VkXG4gIHJldHVybiAwLjAxNTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvbiBmb3IgZml4ZWQtc2NyaXB0IHdhbGxldHNcbiAqXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZvciB0cmFkaXRpb25hbCBVVFhPIGNvaW5zIHVzaW5nIGZpeGVkIHNjcmlwdHNcbiAqIChub24tZGVzY3JpcHRvciB3YWxsZXRzKS4gSXQgdmFsaWRhdGVzIGtleWNoYWlucywgc2lnbmF0dXJlcywgb3V0cHV0cywgYW5kIGFtb3VudHMuXG4gKlxuICogQHBhcmFtIGNvaW4gLSBUaGUgVVRYTyBjb2luIGluc3RhbmNlXG4gKiBAcGFyYW0gYml0Z28gLSBCaXRHbyBBUEkgaW5zdGFuY2UgZm9yIG5ldHdvcmsgY2FsbHNcbiAqIEBwYXJhbSBwYXJhbXMgLSBWZXJpZmljYXRpb24gcGFyYW1ldGVyc1xuICogQHBhcmFtIHBhcmFtcy50eFBhcmFtcyAtIFRyYW5zYWN0aW9uIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHNlbmRcbiAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZCAtIFByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBzZXJ2ZXJcbiAqIEBwYXJhbSBwYXJhbXMud2FsbGV0IC0gV2FsbGV0IG9iamVjdCB0byBvYnRhaW4ga2V5cyB0byB2ZXJpZnkgYWdhaW5zdFxuICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24gLSBWZXJpZmljYXRpb24gb3B0aW9ucyAoZGlzYWJsZU5ldHdvcmtpbmcsIGtleWNoYWlucywgYWRkcmVzc2VzKVxuICogQHBhcmFtIHBhcmFtcy5yZXFJZCAtIE9wdGlvbmFsIHJlcXVlc3QgSUQgZm9yIGxvZ2dpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBwYXNzZXNcbiAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hFcnJvcn0gaWYgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gPSB7fSwgcmVxSWQgfSA9IHBhcmFtcztcblxuICBjb25zdCB0eEV4cGxhbmF0aW9uID0gYXdhaXQgVHhJbnRlbnRNaXNtYXRjaEVycm9yLnRyeUdldFR4RXhwbGFuYXRpb24oY29pbiBhcyB1bmtub3duIGFzIElCYXNlQ29pbiwgdHhQcmVidWlsZCk7XG5cbiAgLy8gSGVscGVyIHRvIHRocm93IFR4SW50ZW50TWlzbWF0Y2hFcnJvciB3aXRoIGNvbnNpc3RlbnQgY29udGV4dFxuICBjb25zdCB0aHJvd1R4TWlzbWF0Y2ggPSAobWVzc2FnZTogc3RyaW5nKTogbmV2ZXIgPT4ge1xuICAgIHRocm93IG5ldyBUeEludGVudE1pc21hdGNoRXJyb3IobWVzc2FnZSwgcmVxSWQsIFt0eFBhcmFtc10sIHR4UHJlYnVpbGQudHhIZXgsIHR4RXhwbGFuYXRpb24pO1xuICB9O1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZCh2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpICYmICFfLmlzQm9vbGVhbih2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nIG11c3QgYmUgYSBib29sZWFuJyk7XG4gIH1cbiAgY29uc3QgaXNQc2J0ID0gdHhQcmVidWlsZC50eEhleCAmJiB1dHhvbGliLmJpdGdvLmlzUHNidCh0eFByZWJ1aWxkLnR4SGV4KTtcbiAgaWYgKGlzUHNidCAmJiB0eFByZWJ1aWxkLnR4SW5mbz8udW5zcGVudHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgaGF2ZSB1bnNwZW50cyBpbiB0eEluZm8gZm9yIHBzYnQnKTtcbiAgfVxuICBjb25zdCBkaXNhYmxlTmV0d29ya2luZyA9ICEhdmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nO1xuICBjb25zdCBpc0JyaWRnaW5nID0gdHhQYXJhbXMudHlwZSA9PT0gJ2JyaWRnaW5nJztcbiAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb246IFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+ID0gYXdhaXQgY29pbi5wYXJzZVRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICB0eFBhcmFtcyxcbiAgICB0eFByZWJ1aWxkLFxuICAgIHdhbGxldCxcbiAgICB2ZXJpZmljYXRpb24sXG4gICAgcmVxSWQsXG4gIH0pO1xuXG4gIGNvbnN0IGtleWNoYWlucyA9IHBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucztcblxuICAvLyB2ZXJpZnkgdGhhdCB0aGUgY2xhaW1lZCB1c2VyIHB1YmxpYyBrZXkgY29ycmVzcG9uZHMgdG8gdGhlIHdhbGxldCdzIHVzZXIgcHJpdmF0ZSBrZXlcbiAgbGV0IHVzZXJQdWJsaWNLZXlWZXJpZmllZCA9IGZhbHNlO1xuICB0cnkge1xuICAgIC8vIHZlcmlmeSB0aGUgdXNlciBwdWJsaWMga2V5IG1hdGNoZXMgdGhlIHByaXZhdGUga2V5IC0gdGhpcyB3aWxsIHRocm93IGlmIHRoZXJlIGlzIG5vIG1hdGNoXG4gICAgdXNlclB1YmxpY0tleVZlcmlmaWVkID0gdmVyaWZ5VXNlclB1YmxpY0tleShiaXRnbywge1xuICAgICAgdXNlcktleWNoYWluOiBrZXljaGFpbnMudXNlcixcbiAgICAgIGRpc2FibGVOZXR3b3JraW5nLFxuICAgICAgdHhQYXJhbXMsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkZWJ1ZygnZmFpbGVkIHRvIHZlcmlmeSB1c2VyIHB1YmxpYyBrZXkhJywgZSk7XG4gIH1cblxuICAvLyBsZXQncyB2ZXJpZnkgdGhlc2Uga2V5Y2hhaW5zXG4gIGNvbnN0IGtleVNpZ25hdHVyZXMgPSBwYXJzZWRUcmFuc2FjdGlvbi5rZXlTaWduYXR1cmVzO1xuICBpZiAoIV8uaXNFbXB0eShrZXlTaWduYXR1cmVzKSkge1xuICAgIGNvbnN0IHZlcmlmeSA9IChrZXksIHB1YikgPT4ge1xuICAgICAgaWYgKCFrZXljaGFpbnMudXNlciB8fCAha2V5Y2hhaW5zLnVzZXIucHViKSB7XG4gICAgICAgIHRocm93VHhNaXNtYXRjaCgnbWlzc2luZyB1c2VyIGtleWNoYWluJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmVyaWZ5S2V5U2lnbmF0dXJlKHtcbiAgICAgICAgdXNlcktleWNoYWluOiBrZXljaGFpbnMudXNlciBhcyB7IHB1Yjogc3RyaW5nIH0sXG4gICAgICAgIGtleWNoYWluVG9WZXJpZnk6IGtleSxcbiAgICAgICAga2V5U2lnbmF0dXJlOiBwdWIsXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQmFja3VwS2V5U2lnbmF0dXJlVmFsaWQgPSB2ZXJpZnkoa2V5Y2hhaW5zLmJhY2t1cCwga2V5U2lnbmF0dXJlcy5iYWNrdXBQdWIpO1xuICAgIGNvbnN0IGlzQml0Z29LZXlTaWduYXR1cmVWYWxpZCA9IHZlcmlmeShrZXljaGFpbnMuYml0Z28sIGtleVNpZ25hdHVyZXMuYml0Z29QdWIpO1xuICAgIGlmICghaXNCYWNrdXBLZXlTaWduYXR1cmVWYWxpZCB8fCAhaXNCaXRnb0tleVNpZ25hdHVyZVZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY29uZGFyeSBwdWJsaWMga2V5IHNpZ25hdHVyZXMgaW52YWxpZCcpO1xuICAgIH1cbiAgICBkZWJ1Zygnc3VjY2Vzc2Z1bGx5IHZlcmlmaWVkIGJhY2t1cCBhbmQgYml0Z28ga2V5IHNpZ25hdHVyZXMnKTtcbiAgfSBlbHNlIGlmICghZGlzYWJsZU5ldHdvcmtpbmcpIHtcbiAgICAvLyB0aGVzZSBrZXlzIHdlcmUgb2J0YWluZWQgb25saW5lIGFuZCB0aGVpciBzaWduYXR1cmVzIHdlcmUgbm90IHZlcmlmaWVkXG4gICAgLy8gdGhpcyBjb3VsZCBiZSBkYW5nZXJvdXNcbiAgICBjb25zb2xlLmxvZygndW5zaWduZWQga2V5cyBvYnRhaW5lZCBvbmxpbmUgYXJlIGJlaW5nIHVzZWQgZm9yIGFkZHJlc3MgdmVyaWZpY2F0aW9uJyk7XG4gIH1cblxuICBpZiAocGFyc2VkVHJhbnNhY3Rpb24ubmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24pIHtcbiAgICBpZiAoIWtleWNoYWlucy51c2VyIHx8ICF1c2VyUHVibGljS2V5VmVyaWZpZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gcmVxdWlyZXMgdmVyaWZpY2F0aW9uIG9mIHVzZXIgcHVibGljIGtleSwgYnV0IGl0IHdhcyB1bmFibGUgdG8gYmUgdmVyaWZpZWQnKTtcbiAgICB9XG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlc1ZlcmlmaWVkID0gdmVyaWZ5Q3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcyhwYXJzZWRUcmFuc2FjdGlvbiwga2V5Y2hhaW5zLnVzZXIpO1xuICAgIGlmICghY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlc1ZlcmlmaWVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0cmFuc2FjdGlvbiByZXF1aXJlcyB2ZXJpZmljYXRpb24gb2YgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcywgYnV0IHRoZXkgd2VyZSB1bmFibGUgdG8gYmUgdmVyaWZpZWQnXG4gICAgICApO1xuICAgIH1cbiAgICBkZWJ1Zygnc3VjY2Vzc2Z1bGx5IHZlcmlmaWVkIHVzZXIgcHVibGljIGtleSBhbmQgY3VzdG9tIGNoYW5nZSBrZXkgc2lnbmF0dXJlcycpO1xuICB9XG5cbiAgaWYgKHR4UGFyYW1zLnFyKSB7XG4gICAgY29uc3QgYWxsRXh0ZXJuYWxPdXRwdXRzID0gW1xuICAgICAgLi4ucGFyc2VkVHJhbnNhY3Rpb24uZXhwbGljaXRFeHRlcm5hbE91dHB1dHMsXG4gICAgICAuLi5wYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsT3V0cHV0cyxcbiAgICBdO1xuICAgIGlmIChhbGxFeHRlcm5hbE91dHB1dHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3dUeE1pc21hdGNoKCdxdWFudHVtLXJlc2lzdGFudCBzd2VlcCB0cmFuc2FjdGlvbnMgbXVzdCBvbmx5IGNvbnRhaW4gd2FsbGV0LWludGVybmFsIG91dHB1dHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBtaXNzaW5nT3V0cHV0cyA9IHBhcnNlZFRyYW5zYWN0aW9uLm1pc3NpbmdPdXRwdXRzO1xuICBpZiAobWlzc2luZ091dHB1dHMubGVuZ3RoICE9PSAwKSB7XG4gICAgLy8gdGhlcmUgYXJlIHNvbWUgb3V0cHV0cyBpbiB0aGUgcmVjaXBpZW50cyBsaXN0IHRoYXQgaGF2ZSBub3QgbWFkZSBpdCBpbnRvIHRoZSBhY3R1YWwgdHJhbnNhY3Rpb25cbiAgICB0aHJvd1R4TWlzbWF0Y2goJ2V4cGVjdGVkIG91dHB1dHMgbWlzc2luZyBpbiB0cmFuc2FjdGlvbiBwcmVidWlsZCcpO1xuICB9XG5cbiAgY29uc3QgaW50ZW5kZWRFeHRlcm5hbFNwZW5kID0gcGFyc2VkVHJhbnNhY3Rpb24uZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50O1xuXG4gIC8vIHRoaXMgaXMgYSBsaW1pdCB3ZSBpbXBvc2UgZm9yIHRoZSB0b3RhbCB2YWx1ZSB0aGF0IGlzIGFtZW5kZWQgdG8gdGhlIHRyYW5zYWN0aW9uIGJleW9uZCB3aGF0IHdhcyBvcmlnaW5hbGx5IGludGVuZGVkXG4gIGNvbnN0IHBheUFzWW91R29MaW1pdCA9IG5ldyBCaWdOdW1iZXIoZ2V0UGF5R29MaW1pdCh2ZXJpZmljYXRpb24uYWxsb3dQYXlnb091dHB1dCkpLm11bHRpcGxpZWRCeShcbiAgICBpbnRlbmRlZEV4dGVybmFsU3BlbmQudG9TdHJpbmcoKVxuICApO1xuXG4gIC8qXG4gIFNvbWUgZXhwbGFuYXRpb24gZm9yIHdoeSB3ZSdyZSBkb2luZyB3aGF0IHdlJ3JlIGRvaW5nOlxuICBTb21lIGN1c3RvbWVycyB3aWxsIGhhdmUgYW4gb3V0cHV0IHRvIEJpdEdvJ3MgUEFZR28gd2FsbGV0IGFkZGVkIHRvIHRoZWlyIHRyYW5zYWN0aW9uLCBhbmQgd2UgbmVlZCB0byBhY2NvdW50IGZvclxuICBpdCBoZXJlLiBUbyBwcm90ZWN0IHNvbWVvbmUgdGFtcGVyaW5nIHdpdGggdGhlIG91dHB1dCB0byBtYWtlIGl0IHNlbmQgbW9yZSB0aGFuIGl0IHNob3VsZCB0byBCaXRHbywgd2UgZGVmaW5lIGFcbiAgdGhyZXNob2xkIGZvciB0aGUgb3V0cHV0J3MgdmFsdWUgYWJvdmUgd2hpY2ggd2UnbGwgdGhyb3cgYW4gZXJyb3IsIGJlY2F1c2UgdGhlIHBheWdvIG91dHB1dCBzaG91bGQgbmV2ZXIgYmUgdGhhdFxuICBoaWdoLlxuICAgKi9cblxuICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIGV4dHJhIGFkZHJlc3NlcyBhcmUgY2hhbmdlIGFkZHJlc3Nlc1xuICAvLyBnZXQgYWxsIHRoZSBhZGRpdGlvbmFsIGV4dGVybmFsIG91dHB1dHMgdGhlIHNlcnZlciBhZGRlZCBhbmQgY2FsY3VsYXRlIHRoZWlyIHZhbHVlc1xuICBjb25zdCBub25DaGFuZ2VBbW91bnQgPSBuZXcgQmlnTnVtYmVyKHBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudC50b1N0cmluZygpKTtcblxuICBkZWJ1ZyhcbiAgICAnSW50ZW5kZWQgc3BlbmQgaXMgJXMsIE5vbi1jaGFuZ2UgYW1vdW50IGlzICVzLCBwYXlnbyBsaW1pdCBpcyAlcycsXG4gICAgaW50ZW5kZWRFeHRlcm5hbFNwZW5kLnRvU3RyaW5nKCksXG4gICAgbm9uQ2hhbmdlQW1vdW50LnRvU3RyaW5nKCksXG4gICAgcGF5QXNZb3VHb0xpbWl0LnRvU3RyaW5nKClcbiAgKTtcblxuICAvLyBUaGVyZSBhcmUgdHdvIGluc3RhbmNlcyB3aGVyZSB3ZSB3aWxsIGdldCBpbnRvIHRoaXMgcG9pbnQgaGVyZVxuICBpZiAobm9uQ2hhbmdlQW1vdW50Lmd0KHBheUFzWW91R29MaW1pdCkpIHtcbiAgICBpZiAoaXNCcmlkZ2luZykge1xuICAgICAgLy8gVGhlIGltcGxpY2l0IGV4dGVybmFsIG91dHB1dCBpcyB0aGUgYnJpZGdlIGRlcG9zaXQgYWRkcmVzcyAoc2VlIG5vdGUgYWJvdmUpOyBpdCBoYXMgbm9cbiAgICAgIC8vIHJlY2lwaWVudCB0byBtYXRjaCBhZ2FpbnN0LCBzbyBpbnN0ZWFkIHZlcmlmeSB0aGUgdG90YWwgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgZXF1YWxzIHRoZVxuICAgICAgLy8gaW50ZW5kZWQgYnJpZGdlIGFtb3VudCBmcm9tIGJyaWRnaW5nUGFyYW1zLlxuICAgICAgY29uc3QgYnJpZGdlQW1vdW50ID0gdHhQYXJhbXMuYnJpZGdpbmdQYXJhbXM/LnNidGM/LmFtb3VudDtcbiAgICAgIGlmIChicmlkZ2VBbW91bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvd1R4TWlzbWF0Y2goJ2JyaWRnaW5nIHRyYW5zYWN0aW9uIGlzIG1pc3NpbmcgYnJpZGdpbmdQYXJhbXMuc2J0Yy5hbW91bnQnKTtcbiAgICAgIH0gZWxzZSBpZiAoIW5vbkNoYW5nZUFtb3VudC5lcShicmlkZ2VBbW91bnQudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgdGhyb3dUeE1pc21hdGNoKFxuICAgICAgICAgIGBicmlkZ2luZyBvdXRwdXQgYW1vdW50ICgke25vbkNoYW5nZUFtb3VudC50b1N0cmluZygpfSkgZG9lcyBub3QgbWF0Y2ggaW50ZW5kZWQgYnJpZGdlIGFtb3VudCAoJHticmlkZ2VBbW91bnR9KWBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCd2ZXJpZmllZCBicmlkZ2luZyBvdXRwdXQgYW1vdW50IG1hdGNoZXMgYnJpZGdpbmdQYXJhbXMuc2J0Yy5hbW91bnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHNidCAmJiBwYXJzZWRUcmFuc2FjdGlvbi5jdXN0b21DaGFuZ2UpIHtcbiAgICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBhIGN1c3RvbSBjaGFuZ2UgYWRkcmVzcyBvbiBhIHdhbGxldCBhbmQgd2UgYXJlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvblxuICAgICAgLy8gd2l0aCBhIFBTQlQsIHdlIGRvIG5vdCBoYXZlIHRoZSBtZXRhZGF0YSB0byB2ZXJpZnkgdGhlIGFkZHJlc3MgZnJvbSB0aGUgY3VzdG9tIGNoYW5nZSB3YWxsZXQsIG5vclxuICAgICAgLy8gY2FuIHdlIGZldGNoIHRoYXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3RoZXIgd2FsbGV0IGJlY2F1c2Ugd2UgbWF5IG5vdCBoYXZlIHRoZSBjcmVkZW50aWFscy4gVGhlcmVmb3JlLFxuICAgICAgLy8gd2Ugd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaGVyZSwgYnV0IHdlIHdpbGwgbG9nIGEgd2FybmluZy5cbiAgICAgIGRlYnVnKGBjYW5ub3QgdmVyaWZ5IHNvbWUgb2YgdGhlIGFkZHJlc3NlcyBiZWNhdXNlIGl0IGJlbG9uZ3MgdG8gYSBzZXBhcmF0ZSB3YWxsZXRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIGFkZGl0aW9uYWwgZXh0ZXJuYWwgb3V0cHV0cyBjYW4gb25seSBiZSBCaXRHbydzIHBheS1hcy15b3UtZ28gZmVlLCBidXQgd2UgY2Fubm90IHZlcmlmeSB0aGUgd2FsbGV0IGFkZHJlc3NcbiAgICAgIC8vIHRoZXJlIGFyZSBzb21lIGFkZHJlc3NlcyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBpbnRlbmRlZCByZWNpcGllbnRzIHRoYXQgYXJlIG5vdCBjaGFuZ2UgYWRkcmVzc2VzXG4gICAgICB0aHJvd1R4TWlzbWF0Y2goJ3ByZWJ1aWxkIGF0dGVtcHRzIHRvIHNwZW5kIHRvIHVuaW50ZW5kZWQgZXh0ZXJuYWwgcmVjaXBpZW50cycpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFsbE91dHB1dHMgPSBwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzO1xuICBpZiAoIXR4UHJlYnVpbGQudHhIZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHR4UHJlYnVpbGQudHhIZXggbm90IHNldGApO1xuICB9XG4gIGNvbnN0IGlucHV0cyA9IGlzUHNidFxuICAgID8gZ2V0UHNidFR4SW5wdXRzKHR4UHJlYnVpbGQudHhIZXgsIGNvaW4ubmFtZSkubWFwKCh2KSA9PiAoe1xuICAgICAgICAuLi52LFxuICAgICAgICB2YWx1ZTogdXR4b2xpYi5iaXRnby50b1ROdW1iZXIodi52YWx1ZSwgY29pbi5hbW91bnRUeXBlKSxcbiAgICAgIH0pKVxuICAgIDogYXdhaXQgZ2V0VHhJbnB1dHMoeyB0eFByZWJ1aWxkLCBiaXRnbywgY29pbiwgZGlzYWJsZU5ldHdvcmtpbmcsIHJlcUlkIH0pO1xuICAvLyBjb2lucyAoZG9nZSkgdGhhdCBjYW4gZXhjZWVkIG51bWJlciBsaW1pdHMgKGFuZCB0aHVzIHdpbGwgdXNlIGJpZ2ludCkgd2lsbCBoYXZlIHRoZSBgdmFsdWVTdHJpbmdgIGZpZWxkXG4gIGNvbnN0IGlucHV0QW1vdW50ID0gaW5wdXRzLnJlZHVjZShcbiAgICAoc3VtOiBiaWdpbnQsIGkpID0+IHN1bSArIEJpZ0ludChjb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnID8gaS52YWx1ZVN0cmluZyA6IGkudmFsdWUpLFxuICAgIEJpZ0ludCgwKVxuICApO1xuICBjb25zdCBvdXRwdXRBbW91bnQgPSBhbGxPdXRwdXRzLnJlZHVjZSgoc3VtOiBiaWdpbnQsIG86IE91dHB1dCkgPT4gc3VtICsgQmlnSW50KG8uYW1vdW50KSwgQmlnSW50KDApKTtcbiAgY29uc3QgZmVlID0gaW5wdXRBbW91bnQgLSBvdXRwdXRBbW91bnQ7XG5cbiAgaWYgKGZlZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgYXR0ZW1wdGluZyB0byBzcGVuZCAke291dHB1dEFtb3VudH0gc2F0b3NoaXMsIHdoaWNoIGV4Y2VlZHMgdGhlIGlucHV0IGFtb3VudCAoJHtpbnB1dEFtb3VudH0gc2F0b3NoaXMpIGJ5ICR7LWZlZX1gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const assert = __importStar(require("assert"));
37
37
  const testutils = __importStar(require("@bitgo/wasm-utxo/testutils"));
38
38
  const builder_1 = require("../../../src/descriptor/builder");
39
+ const SBTC_SIGNERS_AGGREGATE_KEY = Buffer.from('c9c2312ca406dcb8eed50b829b5292f5fb3e846db0a556af61cc53834ce75421', 'hex');
40
+ const SBTC_STACKS_RECIPIENT = Buffer.from('05' + '16' + '6d'.repeat(20), 'hex');
39
41
  function getDescriptorBuilderForType(name) {
40
42
  const keys = testutils.getKeyTriple('default').map((k) => k.neutered());
41
43
  switch (name) {
@@ -54,6 +56,17 @@ function getDescriptorBuilderForType(name) {
54
56
  path: '0/*',
55
57
  locktime: 1,
56
58
  };
59
+ case 'SbtcDeposit':
60
+ return {
61
+ name,
62
+ keys,
63
+ // sBTC reclaim leaf uses bare `/*` wildcard (no chain prefix).
64
+ path: '*',
65
+ lockTime: 950,
66
+ maxFee: 80000n,
67
+ stacksRecipient: SBTC_STACKS_RECIPIENT,
68
+ signersAggregateKey: SBTC_SIGNERS_AGGREGATE_KEY,
69
+ };
57
70
  }
58
71
  }
59
72
  function toComparable(builder) {
@@ -75,4 +88,5 @@ describeForName('Wsh2Of2');
75
88
  describeForName('Wsh2Of3');
76
89
  describeForName('Wsh2Of3CltvDrop');
77
90
  describeForName('ShWsh2Of3CltvDrop');
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9kZXNjcmlwdG9yL2J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsc0VBQXdEO0FBRXhELDZEQUErRztBQUUvRyxTQUFTLDJCQUEyQixDQUFDLElBQStCO0lBQ2xFLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN4RSxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLFNBQVM7WUFDWixPQUFPO2dCQUNMLElBQUk7Z0JBQ0osSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLEVBQUUsS0FBSzthQUNaLENBQUM7UUFDSixLQUFLLGlCQUFpQixDQUFDO1FBQ3ZCLEtBQUssbUJBQW1CO1lBQ3RCLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixJQUFJO2dCQUNKLElBQUksRUFBRSxLQUFLO2dCQUNYLFFBQVEsRUFBRSxDQUFDO2FBQ1osQ0FBQztJQUNOLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBMEI7SUFDOUMsT0FBTztRQUNMLEdBQUcsT0FBTztRQUNWLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsQ0FBNEI7SUFDbkQsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDdEMsRUFBRSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLE9BQU8sR0FBRywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLFVBQVUsR0FBRyxJQUFBLGtDQUF3QixFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFBLHlCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNCLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQixlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNuQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB0ZXN0dXRpbHMgZnJvbSAnQGJpdGdvL3dhc20tdXR4by90ZXN0dXRpbHMnO1xuXG5pbXBvcnQgeyBwYXJzZURlc2NyaXB0b3IsIERlc2NyaXB0b3JCdWlsZGVyLCBnZXREZXNjcmlwdG9yRnJvbUJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9idWlsZGVyJztcblxuZnVuY3Rpb24gZ2V0RGVzY3JpcHRvckJ1aWxkZXJGb3JUeXBlKG5hbWU6IERlc2NyaXB0b3JCdWlsZGVyWyduYW1lJ10pOiBEZXNjcmlwdG9yQnVpbGRlciB7XG4gIGNvbnN0IGtleXMgPSB0ZXN0dXRpbHMuZ2V0S2V5VHJpcGxlKCdkZWZhdWx0JykubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkpO1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdXc2gyT2YyJzpcbiAgICBjYXNlICdXc2gyT2YzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGtleXM6IGtleXMuc2xpY2UoMCwgbmFtZSA9PT0gJ1dzaDJPZjMnID8gMyA6IDIpLFxuICAgICAgICBwYXRoOiAnMC8qJyxcbiAgICAgIH07XG4gICAgY2FzZSAnV3NoMk9mM0NsdHZEcm9wJzpcbiAgICBjYXNlICdTaFdzaDJPZjNDbHR2RHJvcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBrZXlzLFxuICAgICAgICBwYXRoOiAnMC8qJyxcbiAgICAgICAgbG9ja3RpbWU6IDEsXG4gICAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ29tcGFyYWJsZShidWlsZGVyOiBEZXNjcmlwdG9yQnVpbGRlcik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5idWlsZGVyLFxuICAgIGtleXM6IGJ1aWxkZXIua2V5cy5tYXAoKGspID0+IGsudG9CYXNlNTgoKSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRm9yTmFtZShuOiBEZXNjcmlwdG9yQnVpbGRlclsnbmFtZSddKSB7XG4gIGRlc2NyaWJlKGBEZXNjcmlwdG9yQnVpbGRlciAke259YCwgKCkgPT4ge1xuICAgIGl0KCdwYXJzZXMgZGVzY3JpcHRvciB0ZW1wbGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXREZXNjcmlwdG9yQnVpbGRlckZvclR5cGUobik7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID0gZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyKGJ1aWxkZXIpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0b0NvbXBhcmFibGUoYnVpbGRlciksIHRvQ29tcGFyYWJsZShwYXJzZURlc2NyaXB0b3IoZGVzY3JpcHRvcikpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmRlc2NyaWJlRm9yTmFtZSgnV3NoMk9mMicpO1xuZGVzY3JpYmVGb3JOYW1lKCdXc2gyT2YzJyk7XG5kZXNjcmliZUZvck5hbWUoJ1dzaDJPZjNDbHR2RHJvcCcpO1xuZGVzY3JpYmVGb3JOYW1lKCdTaFdzaDJPZjNDbHR2RHJvcCcpO1xuIl19
91
+ describeForName('SbtcDeposit');
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9kZXNjcmlwdG9yL2J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsc0VBQXdEO0FBRXhELDZEQUErRztBQUUvRyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzVDLGtFQUFrRSxFQUNsRSxLQUFLLENBQ04sQ0FBQztBQUNGLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFaEYsU0FBUywyQkFBMkIsQ0FBQyxJQUErQjtJQUNsRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDeEUsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxTQUFTO1lBQ1osT0FBTztnQkFDTCxJQUFJO2dCQUNKLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxFQUFFLEtBQUs7YUFDWixDQUFDO1FBQ0osS0FBSyxpQkFBaUIsQ0FBQztRQUN2QixLQUFLLG1CQUFtQjtZQUN0QixPQUFPO2dCQUNMLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixJQUFJLEVBQUUsS0FBSztnQkFDWCxRQUFRLEVBQUUsQ0FBQzthQUNaLENBQUM7UUFDSixLQUFLLGFBQWE7WUFDaEIsT0FBTztnQkFDTCxJQUFJO2dCQUNKLElBQUk7Z0JBQ0osK0RBQStEO2dCQUMvRCxJQUFJLEVBQUUsR0FBRztnQkFDVCxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxlQUFlLEVBQUUscUJBQXFCO2dCQUN0QyxtQkFBbUIsRUFBRSwwQkFBMEI7YUFDaEQsQ0FBQztJQUNOLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBMEI7SUFDOUMsT0FBTztRQUNMLEdBQUcsT0FBTztRQUNWLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsQ0FBNEI7SUFDbkQsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDdEMsRUFBRSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLE9BQU8sR0FBRywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLFVBQVUsR0FBRyxJQUFBLGtDQUF3QixFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFBLHlCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNCLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQixlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNuQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNyQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdGVzdHV0aWxzIGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHsgcGFyc2VEZXNjcmlwdG9yLCBEZXNjcmlwdG9yQnVpbGRlciwgZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvYnVpbGRlcic7XG5cbmNvbnN0IFNCVENfU0lHTkVSU19BR0dSRUdBVEVfS0VZID0gQnVmZmVyLmZyb20oXG4gICdjOWMyMzEyY2E0MDZkY2I4ZWVkNTBiODI5YjUyOTJmNWZiM2U4NDZkYjBhNTU2YWY2MWNjNTM4MzRjZTc1NDIxJyxcbiAgJ2hleCdcbik7XG5jb25zdCBTQlRDX1NUQUNLU19SRUNJUElFTlQgPSBCdWZmZXIuZnJvbSgnMDUnICsgJzE2JyArICc2ZCcucmVwZWF0KDIwKSwgJ2hleCcpO1xuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yQnVpbGRlckZvclR5cGUobmFtZTogRGVzY3JpcHRvckJ1aWxkZXJbJ25hbWUnXSk6IERlc2NyaXB0b3JCdWlsZGVyIHtcbiAgY29uc3Qga2V5cyA9IHRlc3R1dGlscy5nZXRLZXlUcmlwbGUoJ2RlZmF1bHQnKS5tYXAoKGspID0+IGsubmV1dGVyZWQoKSk7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ1dzaDJPZjInOlxuICAgIGNhc2UgJ1dzaDJPZjMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAga2V5czoga2V5cy5zbGljZSgwLCBuYW1lID09PSAnV3NoMk9mMycgPyAzIDogMiksXG4gICAgICAgIHBhdGg6ICcwLyonLFxuICAgICAgfTtcbiAgICBjYXNlICdXc2gyT2YzQ2x0dkRyb3AnOlxuICAgIGNhc2UgJ1NoV3NoMk9mM0NsdHZEcm9wJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGtleXMsXG4gICAgICAgIHBhdGg6ICcwLyonLFxuICAgICAgICBsb2NrdGltZTogMSxcbiAgICAgIH07XG4gICAgY2FzZSAnU2J0Y0RlcG9zaXQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAga2V5cyxcbiAgICAgICAgLy8gc0JUQyByZWNsYWltIGxlYWYgdXNlcyBiYXJlIGAvKmAgd2lsZGNhcmQgKG5vIGNoYWluIHByZWZpeCkuXG4gICAgICAgIHBhdGg6ICcqJyxcbiAgICAgICAgbG9ja1RpbWU6IDk1MCxcbiAgICAgICAgbWF4RmVlOiA4MDAwMG4sXG4gICAgICAgIHN0YWNrc1JlY2lwaWVudDogU0JUQ19TVEFDS1NfUkVDSVBJRU5ULFxuICAgICAgICBzaWduZXJzQWdncmVnYXRlS2V5OiBTQlRDX1NJR05FUlNfQUdHUkVHQVRFX0tFWSxcbiAgICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9Db21wYXJhYmxlKGJ1aWxkZXI6IERlc2NyaXB0b3JCdWlsZGVyKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIC4uLmJ1aWxkZXIsXG4gICAga2V5czogYnVpbGRlci5rZXlzLm1hcCgoaykgPT4gay50b0Jhc2U1OCgpKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVGb3JOYW1lKG46IERlc2NyaXB0b3JCdWlsZGVyWyduYW1lJ10pIHtcbiAgZGVzY3JpYmUoYERlc2NyaXB0b3JCdWlsZGVyICR7bn1gLCAoKSA9PiB7XG4gICAgaXQoJ3BhcnNlcyBkZXNjcmlwdG9yIHRlbXBsYXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldERlc2NyaXB0b3JCdWlsZGVyRm9yVHlwZShuKTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBnZXREZXNjcmlwdG9yRnJvbUJ1aWxkZXIoYnVpbGRlcik7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHRvQ29tcGFyYWJsZShidWlsZGVyKSwgdG9Db21wYXJhYmxlKHBhcnNlRGVzY3JpcHRvcihkZXNjcmlwdG9yKSkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmVGb3JOYW1lKCdXc2gyT2YyJyk7XG5kZXNjcmliZUZvck5hbWUoJ1dzaDJPZjMnKTtcbmRlc2NyaWJlRm9yTmFtZSgnV3NoMk9mM0NsdHZEcm9wJyk7XG5kZXNjcmliZUZvck5hbWUoJ1NoV3NoMk9mM0NsdHZEcm9wJyk7XG5kZXNjcmliZUZvck5hbWUoJ1NidGNEZXBvc2l0Jyk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=verifyTransactionQr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyTransactionQr.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/transaction/descriptor/verifyTransactionQr.ts"],"names":[],"mappings":""}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const testutils = __importStar(require("@bitgo/wasm-utxo/testutils"));
41
+ const verifyTransaction_1 = require("../../../../src/transaction/descriptor/verifyTransaction");
42
+ const recipient_1 = require("../../../../src/transaction/recipient");
43
+ const util_1 = require("../../util");
44
+ const { getDefaultXPubs, getDescriptor, getDescriptorMap, mockPsbt } = testutils.descriptor;
45
+ describe('descriptor verifyTransaction - quantum-resistant sweep', function () {
46
+ const coin = (0, util_1.getUtxoCoin)('tbtc');
47
+ const xpubsSelf = getDefaultXPubs('a');
48
+ const xpubsOther = getDefaultXPubs('b');
49
+ const descriptorSelf = getDescriptor('Wsh2Of3', xpubsSelf);
50
+ const descriptorOther = getDescriptor('Wsh2Of3', xpubsOther);
51
+ const descriptorMap = getDescriptorMap('Wsh2Of3', xpubsSelf);
52
+ function buildPsbtAllInternal() {
53
+ return mockPsbt([
54
+ { descriptor: descriptorSelf, index: 0 },
55
+ { descriptor: descriptorSelf, index: 1, id: { vout: 1 } },
56
+ ], [
57
+ { descriptor: descriptorSelf, index: 0, value: BigInt(4e5) },
58
+ { descriptor: descriptorSelf, index: 1, value: BigInt(4e5) },
59
+ ]);
60
+ }
61
+ function buildPsbtWithExternal() {
62
+ return mockPsbt([
63
+ { descriptor: descriptorSelf, index: 0 },
64
+ { descriptor: descriptorSelf, index: 1, id: { vout: 1 } },
65
+ ], [
66
+ { descriptor: descriptorOther, index: 0, value: BigInt(4e5), external: true },
67
+ { descriptor: descriptorSelf, index: 0, value: BigInt(4e5) },
68
+ ]);
69
+ }
70
+ it('should reject when external outputs exist and qr is true', async function () {
71
+ const psbt = buildPsbtWithExternal();
72
+ const externalScript = Buffer.from(descriptorOther.atDerivationIndex(0).scriptPubkey());
73
+ const externalAddress = (0, recipient_1.toExtendedAddressFormat)(externalScript, 'tbtc');
74
+ await assert_1.default.rejects((0, verifyTransaction_1.verifyTransaction)(coin, {
75
+ txParams: {
76
+ qr: true,
77
+ recipients: [{ address: externalAddress, amount: '400000' }],
78
+ },
79
+ txPrebuild: { txHex: Buffer.from(psbt.serialize()).toString('hex') },
80
+ wallet: {},
81
+ }, descriptorMap), /quantum-resistant sweep transactions must only contain wallet-internal outputs/);
82
+ });
83
+ it('should pass when all outputs are internal and qr is true', async function () {
84
+ const psbt = buildPsbtAllInternal();
85
+ const result = await (0, verifyTransaction_1.verifyTransaction)(coin, {
86
+ txParams: { qr: true, recipients: [] },
87
+ txPrebuild: { txHex: Buffer.from(psbt.serialize()).toString('hex') },
88
+ wallet: {},
89
+ }, descriptorMap);
90
+ assert_1.default.strictEqual(result, true);
91
+ });
92
+ it('should not apply qr check when qr is not set (internal-only outputs pass normally)', async function () {
93
+ const psbt = buildPsbtAllInternal();
94
+ const result = await (0, verifyTransaction_1.verifyTransaction)(coin, {
95
+ txParams: { recipients: [] },
96
+ txPrebuild: { txHex: Buffer.from(psbt.serialize()).toString('hex') },
97
+ wallet: {},
98
+ }, descriptorMap);
99
+ assert_1.default.strictEqual(result, true);
100
+ });
101
+ });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb25Rci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbi9kZXNjcmlwdG9yL3ZlcmlmeVRyYW5zYWN0aW9uUXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsc0VBQXdEO0FBRXhELGdHQUE2RjtBQUM3RixxRUFBZ0Y7QUFDaEYscUNBQXlDO0FBRXpDLE1BQU0sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7QUFFNUYsUUFBUSxDQUFDLHdEQUF3RCxFQUFFO0lBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUVqQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0QsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3RCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFN0QsU0FBUyxvQkFBb0I7UUFDM0IsT0FBTyxRQUFRLENBQ2I7WUFDRSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUN4QyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7U0FDMUQsRUFDRDtZQUNFLEVBQUUs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QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sRUFBRSxFQUFTO1NBQ2xCLEVBQ0QsYUFBYSxDQUNkLENBQUM7UUFFRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdGVzdHV0aWxzIGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHsgdmVyaWZ5VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9yZWNpcGllbnQnO1xuaW1wb3J0IHsgZ2V0VXR4b0NvaW4gfSBmcm9tICcuLi8uLi91dGlsJztcblxuY29uc3QgeyBnZXREZWZhdWx0WFB1YnMsIGdldERlc2NyaXB0b3IsIGdldERlc2NyaXB0b3JNYXAsIG1vY2tQc2J0IH0gPSB0ZXN0dXRpbHMuZGVzY3JpcHRvcjtcblxuZGVzY3JpYmUoJ2Rlc2NyaXB0b3IgdmVyaWZ5VHJhbnNhY3Rpb24gLSBxdWFudHVtLXJlc2lzdGFudCBzd2VlcCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG5cbiAgY29uc3QgeHB1YnNTZWxmID0gZ2V0RGVmYXVsdFhQdWJzKCdhJyk7XG4gIGNvbnN0IHhwdWJzT3RoZXIgPSBnZXREZWZhdWx0WFB1YnMoJ2InKTtcbiAgY29uc3QgZGVzY3JpcHRvclNlbGYgPSBnZXREZXNjcmlwdG9yKCdXc2gyT2YzJywgeHB1YnNTZWxmKTtcbiAgY29uc3QgZGVzY3JpcHRvck90aGVyID0gZ2V0RGVzY3JpcHRvcignV3NoMk9mMycsIHhwdWJzT3RoZXIpO1xuICBjb25zdCBkZXNjcmlwdG9yTWFwID0gZ2V0RGVzY3JpcHRvck1hcCgnV3NoMk9mMycsIHhwdWJzU2VsZik7XG5cbiAgZnVuY3Rpb24gYnVpbGRQc2J0QWxsSW50ZXJuYWwoKSB7XG4gICAgcmV0dXJuIG1vY2tQc2J0KFxuICAgICAgW1xuICAgICAgICB7IGRlc2NyaXB0b3I6IGRlc2NyaXB0b3JTZWxmLCBpbmRleDogMCB9LFxuICAgICAgICB7IGRlc2NyaXB0b3I6IGRlc2NyaXB0b3JTZWxmLCBpbmRleDogMSwgaWQ6IHsgdm91dDogMSB9IH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICB7IGRlc2NyaXB0b3I6IGRlc2NyaXB0b3JTZWxmLCBpbmRleDogMCwgdmFsdWU6IEJpZ0ludCg0ZTUpIH0sXG4gICAgICAgIHsgZGVzY3JpcHRvcjogZGVzY3JpcHRvclNlbGYsIGluZGV4OiAxLCB2YWx1ZTogQmlnSW50KDRlNSkgfSxcbiAgICAgIF1cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRQc2J0V2l0aEV4dGVybmFsKCkge1xuICAgIHJldHVybiBtb2NrUHNidChcbiAgICAgIFtcbiAgICAgICAgeyBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yU2VsZiwgaW5kZXg6IDAgfSxcbiAgICAgICAgeyBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yU2VsZiwgaW5kZXg6IDEsIGlkOiB7IHZvdXQ6IDEgfSB9LFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yT3RoZXIsIGluZGV4OiAwLCB2YWx1ZTogQmlnSW50KDRlNSksIGV4dGVybmFsOiB0cnVlIH0sXG4gICAgICAgIHsgZGVzY3JpcHRvcjogZGVzY3JpcHRvclNlbGYsIGluZGV4OiAwLCB2YWx1ZTogQmlnSW50KDRlNSkgfSxcbiAgICAgIF1cbiAgICApO1xuICB9XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBleHRlcm5hbCBvdXRwdXRzIGV4aXN0IGFuZCBxciBpcyB0cnVlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSBidWlsZFBzYnRXaXRoRXh0ZXJuYWwoKTtcbiAgICBjb25zdCBleHRlcm5hbFNjcmlwdCA9IEJ1ZmZlci5mcm9tKGRlc2NyaXB0b3JPdGhlci5hdERlcml2YXRpb25JbmRleCgwKS5zY3JpcHRQdWJrZXkoKSk7XG4gICAgY29uc3QgZXh0ZXJuYWxBZGRyZXNzID0gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoZXh0ZXJuYWxTY3JpcHQsICd0YnRjJyk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHZlcmlmeVRyYW5zYWN0aW9uKFxuICAgICAgICBjb2luLFxuICAgICAgICB7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHFyOiB0cnVlLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogZXh0ZXJuYWxBZGRyZXNzLCBhbW91bnQ6ICc0MDAwMDAnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpIH0sXG4gICAgICAgICAgd2FsbGV0OiB7fSBhcyBhbnksXG4gICAgICAgIH0sXG4gICAgICAgIGRlc2NyaXB0b3JNYXBcbiAgICAgICksXG4gICAgICAvcXVhbnR1bS1yZXNpc3RhbnQgc3dlZXAgdHJhbnNhY3Rpb25zIG11c3Qgb25seSBjb250YWluIHdhbGxldC1pbnRlcm5hbCBvdXRwdXRzL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyB3aGVuIGFsbCBvdXRwdXRzIGFyZSBpbnRlcm5hbCBhbmQgcXIgaXMgdHJ1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0ID0gYnVpbGRQc2J0QWxsSW50ZXJuYWwoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVRyYW5zYWN0aW9uKFxuICAgICAgY29pbixcbiAgICAgIHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcXI6IHRydWUsIHJlY2lwaWVudHM6IFtdIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSB9LFxuICAgICAgICB3YWxsZXQ6IHt9IGFzIGFueSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdG9yTWFwXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIG5vdCBhcHBseSBxciBjaGVjayB3aGVuIHFyIGlzIG5vdCBzZXQgKGludGVybmFsLW9ubHkgb3V0cHV0cyBwYXNzIG5vcm1hbGx5KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0ID0gYnVpbGRQc2J0QWxsSW50ZXJuYWwoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVRyYW5zYWN0aW9uKFxuICAgICAgY29pbixcbiAgICAgIHtcbiAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpIH0sXG4gICAgICAgIHdhbGxldDoge30gYXMgYW55LFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0b3JNYXBcbiAgICApO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7XG4gIH0pO1xufSk7XG4iXX0=