@bitgo-beta/utxo-lib 8.0.3-beta.794 → 8.0.3-beta.796

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.
@@ -1,5 +1,5 @@
1
1
  import * as bitcoinjs from 'bitcoinjs-lib';
2
- import { Network } from '..';
2
+ import { Network } from '../networks';
3
3
  import { Triple, Tuple } from './types';
4
4
  export { scriptTypeForChain } from './wallet/chains';
5
5
  export declare const scriptTypeP2shP2pk = "p2shP2pk";
@@ -1 +1 @@
1
- {"version":3,"file":"outputScripts.d.ts","sourceRoot":"","sources":["../../../src/bitgo/outputScripts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"outputScripts.d.ts","sourceRoot":"","sources":["../../../src/bitgo/outputScripts.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,9 @@ exports.createSpendScriptP2tr = createSpendScriptP2tr;
21
21
  exports.createSpendScriptP2trMusig2 = createSpendScriptP2trMusig2;
22
22
  const assert = require("assert");
23
23
  const bitcoinjs = require("bitcoinjs-lib");
24
- const __1 = require("..");
24
+ const networks_1 = require("../networks");
25
+ const p2trPayments = require("../payments");
26
+ const taproot = require("../taproot");
25
27
  const types_1 = require("./types");
26
28
  const noble_ecc_1 = require("../noble_ecc");
27
29
  const taproot_1 = require("../taproot");
@@ -50,10 +52,10 @@ function isSupportedScriptType(network, scriptType) {
50
52
  return true;
51
53
  case 'p2shP2wsh':
52
54
  case 'p2wsh':
53
- return (0, __1.supportsSegwit)(network);
55
+ return (0, networks_1.supportsSegwit)(network);
54
56
  case 'p2tr':
55
57
  case 'p2trMusig2':
56
- return (0, __1.supportsTaproot)(network);
58
+ return (0, networks_1.supportsTaproot)(network);
57
59
  }
58
60
  /* istanbul ignore next */
59
61
  throw new Error(`unexpected script type ${scriptType}`);
@@ -232,11 +234,11 @@ function createPaymentP2trCommon(scriptType, pubkeys, redeemIndex) {
232
234
  if (typeof redeemIndex === 'object') {
233
235
  redeemIndex = getRedeemIndex(keyCombinations2of2, redeemIndex.signer, redeemIndex.cosigner);
234
236
  }
235
- const redeems = keyCombinations2of2.map((pubkeys, index) => __1.p2trPayments.p2tr_ns({
237
+ const redeems = keyCombinations2of2.map((pubkeys, index) => p2trPayments.p2tr_ns({
236
238
  pubkeys,
237
239
  depth: scriptType === 'p2trMusig2' || index === 0 ? 1 : 2,
238
240
  }, { eccLib: noble_ecc_1.ecc }));
239
- return __1.p2trPayments.p2tr({
241
+ return p2trPayments.p2tr({
240
242
  pubkeys: getKeyPathCombination(scriptType, pubkeys),
241
243
  redeems,
242
244
  redeemIndex,
@@ -256,7 +258,7 @@ function getLeafHashCommon(scriptType, params) {
256
258
  if (!output || !controlBlock || !redeem || !redeem.output) {
257
259
  throw new Error(`invalid state`);
258
260
  }
259
- return __1.taproot.getTapleafHash(noble_ecc_1.ecc, controlBlock, redeem.output);
261
+ return taproot.getTapleafHash(noble_ecc_1.ecc, controlBlock, redeem.output);
260
262
  }
261
263
  function getLeafHash(params) {
262
264
  return getLeafHashCommon('p2tr', params);
@@ -284,9 +286,9 @@ function createSpendScriptP2trCommon(scriptType, pubkeys, keyCombination) {
284
286
  assert(payment.redeem);
285
287
  const leafScript = payment.redeem.output;
286
288
  assert(Buffer.isBuffer(leafScript));
287
- const parsedControlBlock = __1.taproot.parseControlBlock(noble_ecc_1.ecc, controlBlock);
289
+ const parsedControlBlock = taproot.parseControlBlock(noble_ecc_1.ecc, controlBlock);
288
290
  const { leafVersion } = parsedControlBlock;
289
- const leafHash = __1.taproot.getTapleafHash(noble_ecc_1.ecc, parsedControlBlock, leafScript);
291
+ const leafHash = taproot.getTapleafHash(noble_ecc_1.ecc, parsedControlBlock, leafScript);
290
292
  return {
291
293
  controlBlock,
292
294
  witnessScript: leafScript,
@@ -317,4 +319,4 @@ function createTaprootScript2of3(scriptType, pubkeys) {
317
319
  scriptPubKey: output,
318
320
  };
319
321
  }
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0U2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9vdXRwdXRTY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWtCQSw0Q0FFQztBQU9ELHdDQUVDO0FBT0Qsc0RBZUM7QUFNRCxrRUFnQkM7QUE0QkQsZ0VBVUM7QUFFRCwwQ0FtQkM7QUFTRCx3REFvREM7QUFFRCw0Q0FRQztBQVlELGtEQUVDO0FBS0Qsa0RBRUM7QUFFRCxnREFFQztBQUVELGtDQUVDO0FBaUVELDhDQUtDO0FBRUQsMERBS0M7QUFnQkQsa0NBSUM7QUFFRCwwREFTQztBQXFDRCxzREFFQztBQUVELGtFQUVDO0FBL1hELGlDQUFpQztBQUNqQywyQ0FBMkM7QUFFM0MsMEJBQXFGO0FBRXJGLG1DQUFrRDtBQUVsRCw0Q0FBNkM7QUFDN0Msd0NBQXVFO0FBRXZFLDBDQUFxRDtBQUE1Qyw0R0FBQSxrQkFBa0IsT0FBQTtBQUVkLFFBQUEsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBR2hDLFFBQUEsZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBVSxDQUFDO0FBRzdGLFNBQWdCLGdCQUFnQixDQUFDLENBQVM7SUFDeEMsT0FBTyx1QkFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFtQixDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUlEOztHQUVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLFVBQXNCO0lBQ25ELE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxPQUFnQixFQUFFLFVBQXNCO0lBQzVFLFFBQVEsVUFBVSxFQUFFLENBQUM7UUFDbkIsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLFVB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Q0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxPQUF1QixFQUFFLGNBQTZCO0lBQzFGLE9BQU8sMkJBQTJCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQUMsT0FBdUIsRUFBRSxjQUE2QjtJQUNoRyxPQUFPLDJCQUEyQixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsdUJBQXVCLENBQUMsVUFBaUMsRUFBRSxPQUF1QjtJQUN6RixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEMsT0FBTztRQUNMLFlBQVksRUFBRSxNQUFNO0tBQ3JCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBiaXRjb2luanMgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5cbmltcG9ydCB7IE5ldHdvcmssIHAydHJQYXltZW50cywgc3VwcG9ydHNTZWd3aXQsIHN1cHBvcnRzVGFwcm9vdCwgdGFwcm9vdCB9IGZyb20gJy4uJztcblxuaW1wb3J0IHsgaXNUcmlwbGUsIFRyaXBsZSwgVHVwbGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgZWNjIGFzIGVjY0xpYiB9IGZyb20gJy4uL25vYmxlX2VjYyc7XG5pbXBvcnQgeyBnZXREZXB0aEZpcnN0VGFwdHJlZSwgZ2V0VHdlYWtlZE91dHB1dEtleSB9IGZyb20gJy4uL3RhcHJvb3QnO1xuXG5leHBvcnQgeyBzY3JpcHRUeXBlRm9yQ2hhaW4gfSBmcm9tICcuL3dhbGxldC9jaGFpbnMnO1xuXG5leHBvcnQgY29uc3Qgc2NyaXB0VHlwZVAyc2hQMnBrID0gJ3Ayc2hQMnBrJztcbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGVQMnNoUDJwayA9IHR5cGVvZiBzY3JpcHRUeXBlUDJzaFAycGs7XG5cbmV4cG9ydCBjb25zdCBzY3JpcHRUeXBlczJPZjMgPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJywgJ3AydHInLCAncDJ0ck11c2lnMiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU2NyaXB0VHlwZTJPZjMgPSAodHlwZW9mIHNjcmlwdFR5cGVzMk9mMylbbnVtYmVyXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NyaXB0VHlwZTJPZjModDogc3RyaW5nKTogdCBpcyBTY3JpcHRUeXBlMk9mMyB7XG4gIHJldHVybiBzY3JpcHRUeXBlczJPZjMuaW5jbHVkZXModCBhcyBTY3JpcHRUeXBlMk9mMyk7XG59XG5cbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGUgPSBTY3JpcHRUeXBlUDJzaFAycGsgfCBTY3JpcHRUeXBlMk9mMztcblxuLyoqXG4gKiBAcmV0dXJuIHRydWUgaWZmIHNjcmlwdFR5cGUgcmVxdWlyZXMgd2l0bmVzcyBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNXaXRuZXNzRGF0YShzY3JpcHRUeXBlOiBTY3JpcHRUeXBlKTogc2NyaXB0VHlwZSBpcyAncDJzaFAyd3NoJyB8ICdwMndzaCcgfCAncDJ0cicgfCAncDJ0ck11c2lnMicge1xuICByZXR1cm4gWydwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0cicsICdwMnRyTXVzaWcyJ10uaW5jbHVkZXMoc2NyaXB0VHlwZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEBwYXJhbSBzY3JpcHRUeXBlXG4gKiBAcmV0dXJuIHRydWUgaWZmIHNjcmlwdCB0eXBlIGlzIHN1cHBvcnRlZCBmb3IgbmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKG5ldHdvcms6IE5ldHdvcmssIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUpOiBib29sZWFuIHtcbiAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAncDJzaCc6XG4gICAgY2FzZSAncDJzaFAycGsnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICBjYXNlICdwMndzaCc6XG4gICAgICByZXR1cm4gc3VwcG9ydHNTZWd3aXQobmV0d29yayk7XG4gICAgY2FzZSAncDJ0cic6XG4gICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICByZXR1cm4gc3VwcG9ydHNUYXByb290KG5ldHdvcmspO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdCB0eXBlICR7c2NyaXB0VHlwZX1gKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdFxuICogQHJldHVybiBzdHJpbmcgcHJldk91dCBhcyBkZWZpbmVkIGluIFBSRVZPVVRfVFlQRVMgKGJpdGNvaW5qcy1saWIvLi4uL3RyYW5zYWN0aW9uX2J1aWxkZXIuanMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JpcHRUeXBlMk9mM0FzUHJldk91dFR5cGUodDogU2NyaXB0VHlwZTJPZjMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHQpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgIHJldHVybiAncDJzaC1wMm1zJztcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgcmV0dXJuICdwMnNoLXAyd3NoLXAybXMnO1xuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHJldHVybiAncDJ3c2gtcDJtcyc7XG4gICAgY2FzZSAncDJ0cic6XG4gICAgICByZXR1cm4gJ3AydHItcDJucyc7XG4gICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICByZXR1cm4gJ3AydHInO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBzY3JpcHQgdHlwZSAke3R9YCk7XG59XG5cbmV4cG9ydCB0eXBlIFNwZW5kYWJsZVNjcmlwdCA9IHtcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdD86IEJ1ZmZlcjtcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFNwZW5kU2NyaXB0UDJ0ciA9IHtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlcjtcbiAgbGVhZlZlcnNpb246IG51bWJlcjtcbiAgbGVhZkhhc2g6IEJ1ZmZlcjtcbn07XG5cbi8qKlxuICogVHdlYWsgZGF0YSBob2xkZXIgZm9yIFAydHIgTXVzaWcyIGtleSBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBLZXlQYXRoUDJ0ck11c2lnMiA9IHtcbiAgaW50ZXJuYWxQdWJrZXk6IEJ1ZmZlcjtcbiAgb3V0cHV0UHVia2V5OiBCdWZmZXI7XG4gIHRhcHRyZWVSb290OiBCdWZmZXI7XG59O1xuXG4vKipcbiAqIFJldHVybiBzY3JpcHRzIGZvciBwMnNoLXAycGsgKHVzZWQgZm9yIEJDSC9CU1YgcmVwbGF5IHByb3RlY3Rpb24pXG4gKiBAcGFyYW0gcHVia2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayhwdWJrZXk6IEJ1ZmZlcik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHAycGsgPSBiaXRjb2luanMucGF5bWVudHMucDJwayh7IHB1YmtleSB9KTtcbiAgY29uc3QgcDJzaCA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnNoKHsgcmVkZWVtOiBwMnBrIH0pO1xuICBpZiAoIXAyc2gub3V0cHV0IHx8ICFwMnBrLm91dHB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzdGF0ZWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBwMnNoLm91dHB1dCxcbiAgICByZWRlZW1TY3JpcHQ6IHAycGsub3V0cHV0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0U2NyaXB0KHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJywgY29uZGl0aW9uU2NyaXB0OiBCdWZmZXIpOiBCdWZmZXIge1xuICBsZXQgb3V0cHV0O1xuICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgICh7IG91dHB1dCB9ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyc2goeyByZWRlZW06IHsgb3V0cHV0OiBjb25kaXRpb25TY3JpcHQgfSB9KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgKHsgb3V0cHV0IH0gPSBiaXRjb2luanMucGF5bWVudHMucDJzaCh7XG4gICAgICAgIHJlZGVlbTogeyBvdXRwdXQ6IGdldE91dHB1dFNjcmlwdCgncDJ3c2gnLCBjb25kaXRpb25TY3JpcHQpIH0sXG4gICAgICB9KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMndzaCc6XG4gICAgICAoeyBvdXRwdXQgfSA9IGJpdGNvaW5qcy5wYXltZW50cy5wMndzaCh7IHJlZGVlbTogeyBvdXRwdXQ6IGNvbmRpdGlvblNjcmlwdCB9IH0pKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgb3V0cHV0IHVuZGVmaW5lZGApO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHNjcmlwdHMgZm9yIDItb2YtMyBtdWx0aXNpZyBvdXRwdXRcbiAqIEBwYXJhbSBwdWJrZXlzIC0gdGhlIGtleSB0cmlwbGUgZm9yIG11bHRpc2lnXG4gKiBAcGFyYW0gc2NyaXB0VHlwZVxuICogQHBhcmFtIG5ldHdvcmsgLSBpZiBzZXQsIHBlcmZvcm1zIHNhbml0eSBjaGVjayBmb3Igc2NyaXB0VHlwZSBzdXBwb3J0XG4gKiBAcmV0dXJucyB7e3JlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCwgc2NyaXB0UHViS2V5fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gIHB1YmtleXM6IEJ1ZmZlcltdLFxuICBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyxcbiAgbmV0d29yaz86IE5ldHdvcmtcbik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGlmIChuZXR3b3JrKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZFNjcmlwdFR5cGUobmV0d29yaywgc2NyaXB0VHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUgJHtzY3JpcHRUeXBlfSBmb3IgbmV0d29ya2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNUcmlwbGUocHVia2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBwdWJrZXkgdHJpcGxlYCk7XG4gIH1cblxuICBwdWJrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChrZXkubGVuZ3RoICE9PSAzMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGtleSBsZW5ndGggJHtrZXkubGVuZ3RofS4gTXVzdCB1c2UgY29tcHJlc3NlZCBrZXlzLmApO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJyB8fCBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICAvLyBwMnRyL3AydHJNdXNpZzIgYWRkcmVzc2VzIHVzZSBhIGNvbWJpbmF0aW9uIG9mIDIgb2YgMiBtdWx0aXNpZyBzY3JpcHRzIGRpc3RpbmN0IGZyb21cbiAgICAvLyB0aGUgMiBvZiAzIG11bHRpc2lnIHVzZWQgZm9yIG90aGVyIHNjcmlwdCB0eXBlc1xuICAgIHJldHVybiBjcmVhdGVUYXByb290U2NyaXB0Mm9mMyhzY3JpcHRUeXBlLCBwdWJrZXlzKTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdDJvZjMgPSBiaXRjb2luanMucGF5bWVudHMucDJtcyh7IG06IDIsIHB1YmtleXMgfSk7XG4gIGFzc2VydChzY3JpcHQyb2YzLm91dHB1dCk7XG5cbiAgbGV0IHJlZGVlbVNjcmlwdDogYml0Y29pbmpzLlBheW1lbnQgfCB1bmRlZmluZWQ7XG4gIGxldCB3aXRuZXNzU2NyaXB0OiBiaXRjb2luanMuUGF5bWVudCB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAncDJzaCc6XG4gICAgICByZWRlZW1TY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIHdpdG5lc3NTY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgcmVkZWVtU2NyaXB0ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyd3NoKHsgcmVkZWVtOiBzY3JpcHQyb2YzIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJ3c2gnOlxuICAgICAgd2l0bmVzc1NjcmlwdCA9IHNjcmlwdDJvZjM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIG11bHRpc2lnIHNjcmlwdCB0eXBlICR7c2NyaXB0VHlwZX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBnZXRPdXRwdXRTY3JpcHQoc2NyaXB0VHlwZSwgc2NyaXB0Mm9mMy5vdXRwdXQpLFxuICAgIHJlZGVlbVNjcmlwdDogcmVkZWVtU2NyaXB0Py5vdXRwdXQsXG4gICAgd2l0bmVzc1NjcmlwdDogd2l0bmVzc1NjcmlwdD8ub3V0cHV0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9YT25seVB1YmxpY0tleShiOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAoYi5sZW5ndGggPT09IDMzKSB7XG4gICAgcmV0dXJuIGIuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKGIubGVuZ3RoID09PSAzMikge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBrZXkgc2l6ZSAke2IubGVuZ3RofWApO1xufVxuXG5mdW5jdGlvbiBjaGVja1NpemUoYjogQnVmZmVyLCB0YXJnZXRTaXplOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmIChiLmxlbmd0aCA9PT0gdGFyZ2V0U2l6ZSkge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzaXplICR7Yi5sZW5ndGh9LiBNdXN0IHVzZSAke25hbWV9LmApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBzaXplIG9mIHRoZSBwdWIga2V5IGZvciAzMiBieXRlcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBpZmYgdHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrWE9ubHlQdWJsaWNLZXkoYjogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIGNoZWNrU2l6ZShiLCAzMiwgJ3gtb25seSBrZXknKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgc2l6ZSBvZiB0aGUgcHViIGtleSBmb3IgMzIgYnl0ZXMgYW5kIHJldHVybnMgdGhlIHNhbWUgaWZmIHRydWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsYWluUHVibGljS2V5KGI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiBjaGVja1NpemUoYiwgMzMsICdwbGFpbiBrZXknKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVGFwTWVya2xlUm9vdChiOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY2hlY2tTaXplKGIsIDMyLCAndGFwIG1lcmtsZSByb290Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1R4SGFzaChiOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY2hlY2tTaXplKGIsIDMyLCAndHggaGFzaCcpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHNjcmlwdFR5cGU6ICdwMnRyJyB8ICdwMnRyTXVzaWcyJywga2V5czogVHJpcGxlPEJ1ZmZlcj4pOiBUdXBsZTxCdWZmZXI+W10ge1xuICBjb25zdCBbdXNlcktleSwgYmFja3VwS2V5LCBiaXRHb0tleV0gPSBrZXlzLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIHJldHVybiBzY3JpcHRUeXBlID09PSAncDJ0cidcbiAgICA/IFtcbiAgICAgICAgW3VzZXJLZXksIGJpdEdvS2V5XSxcbiAgICAgICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgICAgIFtiYWNrdXBLZXksIGJpdEdvS2V5XSxcbiAgICAgIF1cbiAgICA6IFtcbiAgICAgICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgICAgIFtiYWNrdXBLZXksIGJpdEdvS2V5XSxcbiAgICAgIF07XG59XG5cbmZ1bmN0aW9uIGdldEtleVBhdGhDb21iaW5hdGlvbihzY3JpcHRUeXBlOiAncDJ0cicgfCAncDJ0ck11c2lnMicsIGtleXM6IFRyaXBsZTxCdWZmZXI+KTogVHVwbGU8QnVmZmVyPiB7XG4gIGNvbnN0IHNhbml0aXplUHVibGljS2V5ID0gc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gdG9YT25seVB1YmxpY0tleSA6IGNoZWNrUGxhaW5QdWJsaWNLZXk7XG4gIHJldHVybiBbc2FuaXRpemVQdWJsaWNLZXkoa2V5c1swXSksIHNhbml0aXplUHVibGljS2V5KGtleXNbMl0pXTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkZWVtSW5kZXgoa2V5Q29tYmluYXRpb25zOiBbQnVmZmVyLCBCdWZmZXJdW10sIHNpZ25lcjogQnVmZmVyLCBjb3NpZ25lcjogQnVmZmVyKTogbnVtYmVyIHtcbiAgc2lnbmVyID0gdG9YT25seVB1YmxpY0tleShzaWduZXIpO1xuICBjb3NpZ25lciA9IHRvWE9ubHlQdWJsaWNLZXkoY29zaWduZXIpO1xuICBjb25zdCBpID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleCgoW2EsIGJdKSA9PiB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBzaWduZXIubGVuZ3RoIHx8IGIubGVuZ3RoICE9PSBjb3NpZ25lci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb21wYXJpc29uYCk7XG4gICAgfVxuICAgIHJldHVybiAoYS5lcXVhbHMoc2lnbmVyKSAmJiBiLmVxdWFscyhjb3NpZ25lcikpIHx8IChhLmVxdWFscyhjb3NpZ25lcikgJiYgYi5lcXVhbHMoc2lnbmVyKSk7XG4gIH0pO1xuICBpZiAoMCA8PSBpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCBzaW5nZXIvY29zaWduZXIgY29tYmluYXRpb25gKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHJDb21tb24oXG4gIHNjcmlwdFR5cGU6ICdwMnRyJyB8ICdwMnRyTXVzaWcyJyxcbiAgcHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sXG4gIHJlZGVlbUluZGV4PzogbnVtYmVyIHwgeyBzaWduZXI6IEJ1ZmZlcjsgY29zaWduZXI6IEJ1ZmZlciB9XG4pOiBiaXRjb2luanMuUGF5bWVudCB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9uczJvZjIgPSBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHNjcmlwdFR5cGUsIHB1YmtleXMpO1xuICBpZiAodHlwZW9mIHJlZGVlbUluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIHJlZGVlbUluZGV4ID0gZ2V0UmVkZWVtSW5kZXgoa2V5Q29tYmluYXRpb25zMm9mMiwgcmVkZWVtSW5kZXguc2lnbmVyLCByZWRlZW1JbmRleC5jb3NpZ25lcik7XG4gIH1cbiAgY29uc3QgcmVkZWVtcyA9IGtleUNvbWJpbmF0aW9uczJvZjIubWFwKChwdWJrZXlzLCBpbmRleCkgPT5cbiAgICBwMnRyUGF5bWVudHMucDJ0cl9ucyhcbiAgICAgIHtcbiAgICAgICAgcHVia2V5cyxcbiAgICAgICAgZGVwdGg6IHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJyB8fCBpbmRleCA9PT0gMCA/IDEgOiAyLFxuICAgICAgfSxcbiAgICAgIHsgZWNjTGliIH1cbiAgICApXG4gICk7XG5cbiAgcmV0dXJuIHAydHJQYXltZW50cy5wMnRyKFxuICAgIHtcbiAgICAgIHB1YmtleXM6IGdldEtleVBhdGhDb21iaW5hdGlvbihzY3JpcHRUeXBlLCBwdWJrZXlzKSxcbiAgICAgIHJlZGVlbXMsXG4gICAgICByZWRlZW1JbmRleCxcbiAgICB9LFxuICAgIHsgZWNjTGliIH1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBheW1lbnRQMnRyKFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAgcmVkZWVtSW5kZXg/OiBudW1iZXIgfCB7IHNpZ25lcjogQnVmZmVyOyBjb3NpZ25lcjogQnVmZmVyIH1cbik6IGJpdGNvaW5qcy5QYXltZW50IHtcbiAgcmV0dXJuIGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKCdwMnRyJywgcHVia2V5cywgcmVkZWVtSW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHJNdXNpZzIoXG4gIHB1YmtleXM6IFRyaXBsZTxCdWZmZXI+LFxuICByZWRlZW1JbmRleD86IG51bWJlciB8IHsgc2lnbmVyOiBCdWZmZXI7IGNvc2lnbmVyOiBCdWZmZXIgfVxuKTogYml0Y29pbmpzLlBheW1lbnQge1xuICByZXR1cm4gY3JlYXRlUGF5bWVudFAydHJDb21tb24oJ3AydHJNdXNpZzInLCBwdWJrZXlzLCByZWRlZW1JbmRleCk7XG59XG5cbmZ1bmN0aW9uIGdldExlYWZIYXNoQ29tbW9uKFxuICBzY3JpcHRUeXBlOiAncDJ0cicgfCAncDJ0ck11c2lnMicsXG4gIHBhcmFtczogYml0Y29pbmpzLlBheW1lbnQgfCB7IHB1YmxpY0tleXM6IFRyaXBsZTxCdWZmZXI+OyBzaWduZXI6IEJ1ZmZlcjsgY29zaWduZXI6IEJ1ZmZlciB9XG4pOiBCdWZmZXIge1xuICBpZiAoJ3B1YmxpY0tleXMnIGluIHBhcmFtcykge1xuICAgIHBhcmFtcyA9IGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKHNjcmlwdFR5cGUsIHBhcmFtcy5wdWJsaWNLZXlzLCBwYXJhbXMpO1xuICB9XG4gIGNvbnN0IHsgb3V0cHV0LCBjb250cm9sQmxvY2ssIHJlZGVlbSB9ID0gcGFyYW1zO1xuICBpZiAoIW91dHB1dCB8fCAhY29udHJvbEJsb2NrIHx8ICFyZWRlZW0gfHwgIXJlZGVlbS5vdXRwdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgfVxuICByZXR1cm4gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIGNvbnRyb2xCbG9jaywgcmVkZWVtLm91dHB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWFmSGFzaChcbiAgcGFyYW1zOiBiaXRjb2luanMuUGF5bWVudCB8IHsgcHVibGljS2V5czogVHJpcGxlPEJ1ZmZlcj47IHNpZ25lcjogQnVmZmVyOyBjb3NpZ25lcjogQnVmZmVyIH1cbik6IEJ1ZmZlciB7XG4gIHJldHVybiBnZXRMZWFmSGFzaENvbW1vbigncDJ0cicsIHBhcmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXlQYXRoUDJ0ck11c2lnMihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IEtleVBhdGhQMnRyTXVzaWcyIHtcbiAgY29uc3QgcGF5bWVudCA9IGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKCdwMnRyTXVzaWcyJywgcHVia2V5cyk7XG4gIGFzc2VydChwYXltZW50LmludGVybmFsUHVia2V5KTtcbiAgYXNzZXJ0KHBheW1lbnQudGFwVHJlZSk7XG4gIHJldHVybiB7XG4gICAgaW50ZXJuYWxQdWJrZXk6IHBheW1lbnQuaW50ZXJuYWxQdWJrZXksXG4gICAgb3V0cHV0UHVia2V5OiBnZXRUd2Vha2VkT3V0cHV0S2V5KHBheW1lbnQpLFxuICAgIHRhcHRyZWVSb290OiBnZXREZXB0aEZpcnN0VGFwdHJlZShwYXltZW50LnRhcFRyZWUpLnJvb3QsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ckNvbW1vbihcbiAgc2NyaXB0VHlwZTogJ3AydHInIHwgJ3AydHJNdXNpZzInLFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAga2V5Q29tYmluYXRpb246IFR1cGxlPEJ1ZmZlcj5cbik6IFNwZW5kU2NyaXB0UDJ0ciB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9ucyA9IGdldFRhcHRyZWVLZXlDb21iaW5hdGlvbnMoc2NyaXB0VHlwZSwgcHVia2V5cyk7XG4gIGNvbnN0IFthLCBiXSA9IGtleUNvbWJpbmF0aW9uLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIGNvbnN0IHJlZGVlbUluZGV4ID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleChcbiAgICAoW2MsIGRdKSA9PiAoYS5lcXVhbHMoYykgJiYgYi5lcXVhbHMoZCkpIHx8IChhLmVxdWFscyhkKSAmJiBiLmVxdWFscyhjKSlcbiAgKTtcblxuICBpZiAocmVkZWVtSW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCByZWRlZW1JbmRleCBmb3Iga2V5IGNvbWJpbmF0aW9uYCk7XG4gIH1cblxuICBjb25zdCBwYXltZW50ID0gY3JlYXRlUGF5bWVudFAydHJDb21tb24oc2NyaXB0VHlwZSwgcHVia2V5cywgcmVkZWVtSW5kZXgpO1xuICBjb25zdCB7IGNvbnRyb2xCbG9jayB9ID0gcGF5bWVudDtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spKTtcblxuICBhc3NlcnQocGF5bWVudC5yZWRlZW0pO1xuICBjb25zdCBsZWFmU2NyaXB0ID0gcGF5bWVudC5yZWRlZW0ub3V0cHV0O1xuICBhc3NlcnQoQnVmZmVyLmlzQnVmZmVyKGxlYWZTY3JpcHQpKTtcblxuICBjb25zdCBwYXJzZWRDb250cm9sQmxvY2sgPSB0YXByb290LnBhcnNlQ29udHJvbEJsb2NrKGVjY0xpYiwgY29udHJvbEJsb2NrKTtcbiAgY29uc3QgeyBsZWFmVmVyc2lvbiB9ID0gcGFyc2VkQ29udHJvbEJsb2NrO1xuICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBwYXJzZWRDb250cm9sQmxvY2ssIGxlYWZTY3JpcHQpO1xuXG4gIHJldHVybiB7XG4gICAgY29udHJvbEJsb2NrLFxuICAgIHdpdG5lc3NTY3JpcHQ6IGxlYWZTY3JpcHQsXG4gICAgbGVhZlZlcnNpb24sXG4gICAgbGVhZkhhc2gsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGVuZFNjcmlwdFAydHIocHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sIGtleUNvbWJpbmF0aW9uOiBUdXBsZTxCdWZmZXI+KTogU3BlbmRTY3JpcHRQMnRyIHtcbiAgcmV0dXJuIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ckNvbW1vbigncDJ0cicsIHB1YmtleXMsIGtleUNvbWJpbmF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ck11c2lnMihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPiwga2V5Q29tYmluYXRpb246IFR1cGxlPEJ1ZmZlcj4pOiBTcGVuZFNjcmlwdFAydHIge1xuICByZXR1cm4gY3JlYXRlU3BlbmRTY3JpcHRQMnRyQ29tbW9uKCdwMnRyTXVzaWcyJywgcHVia2V5cywga2V5Q29tYmluYXRpb24pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB0YXByb290IG91dHB1dCBzY3JpcHQgdXNpbmcgdGhlIHVzZXIrYml0Z28ga2V5cyBmb3IgdGhlIGFnZ3JlZ2F0ZVxuICogcHVibGljIGtleSB1c2luZyBNdVNpZzIgYW5kIGEgdGFwdHJlZSBjb250YWluaW5nIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGRlcGVuZHMgb24gc2NyaXB0VHlwZS5cbiAqIHAydHIgdHlwZTogYSB1c2VyK2JpdGdvIDItb2YtMiBzY3JpcHQgYXQgdGhlIGZpcnN0IGRlcHRoIGxldmVsIG9mIHRoZSB0cmVlIGFuZCB1c2VyK2JhY2t1cFxuICogYW5kIGJpdGdvK2JhY2t1cCAyLW9mLTIgc2NyaXB0cyBvbmUgbGV2ZWwgZGVlcGVyLlxuICogcDJ0ck11c2lnMiB0eXBlOiB1c2VyK2JhY2t1cCBhbmQgYml0Z28rYmFja3VwIDItb2YtMiBzY3JpcHRzIGF0IHRoZSBmaXJzdCBkZXB0aCBsZXZlbCBvZiB0aGVcbiAqIHRyZWUuXG4gKiBAcGFyYW0gcHVia2V5cyAtIGEgcHVia2V5IGFycmF5IGNvbnRhaW5pbmcgdGhlIHVzZXIga2V5LCBiYWNrdXAga2V5LCBhbmQgYml0Z28ga2V5IGluIHRoYXQgb3JkZXJcbiAqIEByZXR1cm5zIHt7c2NyaXB0UHViS2V5fX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGFwcm9vdFNjcmlwdDJvZjMoc2NyaXB0VHlwZTogJ3AydHInIHwgJ3AydHJNdXNpZzInLCBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHsgb3V0cHV0IH0gPSBjcmVhdGVQYXltZW50UDJ0ckNvbW1vbihzY3JpcHRUeXBlLCBwdWJrZXlzKTtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihvdXRwdXQpKTtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRQdWJLZXk6IG91dHB1dCxcbiAgfTtcbn1cbiJdfQ==
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0U2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9vdXRwdXRTY3JpcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW9CQSw0Q0FFQztBQU9ELHdDQUVDO0FBT0Qsc0RBZUM7QUFNRCxrRUFnQkM7QUE0QkQsZ0VBVUM7QUFFRCwwQ0FtQkM7QUFTRCx3REFvREM7QUFFRCw0Q0FRQztBQVlELGtEQUVDO0FBS0Qsa0RBRUM7QUFFRCxnREFFQztBQUVELGtDQUVDO0FBaUVELDhDQUtDO0FBRUQsMERBS0M7QUFnQkQsa0NBSUM7QUFFRCwwREFTQztBQXFDRCxzREFFQztBQUVELGtFQUVDO0FBallELGlDQUFpQztBQUNqQywyQ0FBMkM7QUFFM0MsMENBQXVFO0FBQ3ZFLDRDQUE0QztBQUM1QyxzQ0FBc0M7QUFFdEMsbUNBQWtEO0FBRWxELDRDQUE2QztBQUM3Qyx3Q0FBdUU7QUFFdkUsMENBQXFEO0FBQTVDLDRHQUFBLGtCQUFrQixPQUFBO0FBRWQsUUFBQSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7QUFHaEMsUUFBQSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFVLENBQUM7QUFHN0YsU0FBZ0IsZ0JBQWdCLENBQUMsQ0FBUztJQUN4QyxPQUFPLHVCQUFlLENBQUMsUUFBUSxDQUFDLENBQW1CLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBSUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQUMsVUFBc0I7SUFDbkQsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLE9BQWdCLEVBQUUsVUFBc0I7SUFDNUUsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNuQixL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Q3pCLFdBQVc7UUFDWCxRQUFRO0tBQ1QsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxPQUF1QixFQUFFLGNBQTZCO0lBQzFGLE9BQU8sMkJBQTJCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQUMsT0FBdUIsRUFBRSxjQUE2QjtJQUNoRyxPQUFPLDJCQUEyQixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsdUJBQXVCLENBQUMsVUFBaUMsRUFBRSxPQUF1QjtJQUN6RixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEMsT0FBTztRQUNMLFlBQVksRUFBRSxNQUFNO0tBQ3JCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBiaXRjb2luanMgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5cbmltcG9ydCB7IE5ldHdvcmssIHN1cHBvcnRzU2Vnd2l0LCBzdXBwb3J0c1RhcHJvb3QgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5pbXBvcnQgKiBhcyBwMnRyUGF5bWVudHMgZnJvbSAnLi4vcGF5bWVudHMnO1xuaW1wb3J0ICogYXMgdGFwcm9vdCBmcm9tICcuLi90YXByb290JztcblxuaW1wb3J0IHsgaXNUcmlwbGUsIFRyaXBsZSwgVHVwbGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgZWNjIGFzIGVjY0xpYiB9IGZyb20gJy4uL25vYmxlX2VjYyc7XG5pbXBvcnQgeyBnZXREZXB0aEZpcnN0VGFwdHJlZSwgZ2V0VHdlYWtlZE91dHB1dEtleSB9IGZyb20gJy4uL3RhcHJvb3QnO1xuXG5leHBvcnQgeyBzY3JpcHRUeXBlRm9yQ2hhaW4gfSBmcm9tICcuL3dhbGxldC9jaGFpbnMnO1xuXG5leHBvcnQgY29uc3Qgc2NyaXB0VHlwZVAyc2hQMnBrID0gJ3Ayc2hQMnBrJztcbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGVQMnNoUDJwayA9IHR5cGVvZiBzY3JpcHRUeXBlUDJzaFAycGs7XG5cbmV4cG9ydCBjb25zdCBzY3JpcHRUeXBlczJPZjMgPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJywgJ3AydHInLCAncDJ0ck11c2lnMiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU2NyaXB0VHlwZTJPZjMgPSAodHlwZW9mIHNjcmlwdFR5cGVzMk9mMylbbnVtYmVyXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NyaXB0VHlwZTJPZjModDogc3RyaW5nKTogdCBpcyBTY3JpcHRUeXBlMk9mMyB7XG4gIHJldHVybiBzY3JpcHRUeXBlczJPZjMuaW5jbHVkZXModCBhcyBTY3JpcHRUeXBlMk9mMyk7XG59XG5cbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGUgPSBTY3JpcHRUeXBlUDJzaFAycGsgfCBTY3JpcHRUeXBlMk9mMztcblxuLyoqXG4gKiBAcmV0dXJuIHRydWUgaWZmIHNjcmlwdFR5cGUgcmVxdWlyZXMgd2l0bmVzcyBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNXaXRuZXNzRGF0YShzY3JpcHRUeXBlOiBTY3JpcHRUeXBlKTogc2NyaXB0VHlwZSBpcyAncDJzaFAyd3NoJyB8ICdwMndzaCcgfCAncDJ0cicgfCAncDJ0ck11c2lnMicge1xuICByZXR1cm4gWydwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0cicsICdwMnRyTXVzaWcyJ10uaW5jbHVkZXMoc2NyaXB0VHlwZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEBwYXJhbSBzY3JpcHRUeXBlXG4gKiBAcmV0dXJuIHRydWUgaWZmIHNjcmlwdCB0eXBlIGlzIHN1cHBvcnRlZCBmb3IgbmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKG5ldHdvcms6IE5ldHdvcmssIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUpOiBib29sZWFuIHtcbiAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAncDJzaCc6XG4gICAgY2FzZSAncDJzaFAycGsnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICBjYXNlICdwMndzaCc6XG4gICAgICByZXR1cm4gc3VwcG9ydHNTZWd3aXQobmV0d29yayk7XG4gICAgY2FzZSAncDJ0cic6XG4gICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICByZXR1cm4gc3VwcG9ydHNUYXByb290KG5ldHdvcmspO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdCB0eXBlICR7c2NyaXB0VHlwZX1gKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdFxuICogQHJldHVybiBzdHJpbmcgcHJldk91dCBhcyBkZWZpbmVkIGluIFBSRVZPVVRfVFlQRVMgKGJpdGNvaW5qcy1saWIvLi4uL3RyYW5zYWN0aW9uX2J1aWxkZXIuanMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JpcHRUeXBlMk9mM0FzUHJldk91dFR5cGUodDogU2NyaXB0VHlwZTJPZjMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHQpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgIHJldHVybiAncDJzaC1wMm1zJztcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgcmV0dXJuICdwMnNoLXAyd3NoLXAybXMnO1xuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHJldHVybiAncDJ3c2gtcDJtcyc7XG4gICAgY2FzZSAncDJ0cic6XG4gICAgICByZXR1cm4gJ3AydHItcDJucyc7XG4gICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICByZXR1cm4gJ3AydHInO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBzY3JpcHQgdHlwZSAke3R9YCk7XG59XG5cbmV4cG9ydCB0eXBlIFNwZW5kYWJsZVNjcmlwdCA9IHtcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdD86IEJ1ZmZlcjtcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFNwZW5kU2NyaXB0UDJ0ciA9IHtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlcjtcbiAgbGVhZlZlcnNpb246IG51bWJlcjtcbiAgbGVhZkhhc2g6IEJ1ZmZlcjtcbn07XG5cbi8qKlxuICogVHdlYWsgZGF0YSBob2xkZXIgZm9yIFAydHIgTXVzaWcyIGtleSBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBLZXlQYXRoUDJ0ck11c2lnMiA9IHtcbiAgaW50ZXJuYWxQdWJrZXk6IEJ1ZmZlcjtcbiAgb3V0cHV0UHVia2V5OiBCdWZmZXI7XG4gIHRhcHRyZWVSb290OiBCdWZmZXI7XG59O1xuXG4vKipcbiAqIFJldHVybiBzY3JpcHRzIGZvciBwMnNoLXAycGsgKHVzZWQgZm9yIEJDSC9CU1YgcmVwbGF5IHByb3RlY3Rpb24pXG4gKiBAcGFyYW0gcHVia2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayhwdWJrZXk6IEJ1ZmZlcik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHAycGsgPSBiaXRjb2luanMucGF5bWVudHMucDJwayh7IHB1YmtleSB9KTtcbiAgY29uc3QgcDJzaCA9IGJpdGNvaW5qcy5wYXltZW50cy5wMnNoKHsgcmVkZWVtOiBwMnBrIH0pO1xuICBpZiAoIXAyc2gub3V0cHV0IHx8ICFwMnBrLm91dHB1dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzdGF0ZWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBwMnNoLm91dHB1dCxcbiAgICByZWRlZW1TY3JpcHQ6IHAycGsub3V0cHV0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0U2NyaXB0KHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJywgY29uZGl0aW9uU2NyaXB0OiBCdWZmZXIpOiBCdWZmZXIge1xuICBsZXQgb3V0cHV0O1xuICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgICh7IG91dHB1dCB9ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyc2goeyByZWRlZW06IHsgb3V0cHV0OiBjb25kaXRpb25TY3JpcHQgfSB9KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgKHsgb3V0cHV0IH0gPSBiaXRjb2luanMucGF5bWVudHMucDJzaCh7XG4gICAgICAgIHJlZGVlbTogeyBvdXRwdXQ6IGdldE91dHB1dFNjcmlwdCgncDJ3c2gnLCBjb25kaXRpb25TY3JpcHQpIH0sXG4gICAgICB9KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwMndzaCc6XG4gICAgICAoeyBvdXRwdXQgfSA9IGJpdGNvaW5qcy5wYXltZW50cy5wMndzaCh7IHJlZGVlbTogeyBvdXRwdXQ6IGNvbmRpdGlvblNjcmlwdCB9IH0pKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgb3V0cHV0IHVuZGVmaW5lZGApO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHNjcmlwdHMgZm9yIDItb2YtMyBtdWx0aXNpZyBvdXRwdXRcbiAqIEBwYXJhbSBwdWJrZXlzIC0gdGhlIGtleSB0cmlwbGUgZm9yIG11bHRpc2lnXG4gKiBAcGFyYW0gc2NyaXB0VHlwZVxuICogQHBhcmFtIG5ldHdvcmsgLSBpZiBzZXQsIHBlcmZvcm1zIHNhbml0eSBjaGVjayBmb3Igc2NyaXB0VHlwZSBzdXBwb3J0XG4gKiBAcmV0dXJucyB7e3JlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCwgc2NyaXB0UHViS2V5fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gIHB1YmtleXM6IEJ1ZmZlcltdLFxuICBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyxcbiAgbmV0d29yaz86IE5ldHdvcmtcbik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGlmIChuZXR3b3JrKSB7XG4gICAgaWYgKCFpc1N1cHBvcnRlZFNjcmlwdFR5cGUobmV0d29yaywgc2NyaXB0VHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUgJHtzY3JpcHRUeXBlfSBmb3IgbmV0d29ya2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNUcmlwbGUocHVia2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBwdWJrZXkgdHJpcGxlYCk7XG4gIH1cblxuICBwdWJrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChrZXkubGVuZ3RoICE9PSAzMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGtleSBsZW5ndGggJHtrZXkubGVuZ3RofS4gTXVzdCB1c2UgY29tcHJlc3NlZCBrZXlzLmApO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJyB8fCBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICAvLyBwMnRyL3AydHJNdXNpZzIgYWRkcmVzc2VzIHVzZSBhIGNvbWJpbmF0aW9uIG9mIDIgb2YgMiBtdWx0aXNpZyBzY3JpcHRzIGRpc3RpbmN0IGZyb21cbiAgICAvLyB0aGUgMiBvZiAzIG11bHRpc2lnIHVzZWQgZm9yIG90aGVyIHNjcmlwdCB0eXBlc1xuICAgIHJldHVybiBjcmVhdGVUYXByb290U2NyaXB0Mm9mMyhzY3JpcHRUeXBlLCBwdWJrZXlzKTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdDJvZjMgPSBiaXRjb2luanMucGF5bWVudHMucDJtcyh7IG06IDIsIHB1YmtleXMgfSk7XG4gIGFzc2VydChzY3JpcHQyb2YzLm91dHB1dCk7XG5cbiAgbGV0IHJlZGVlbVNjcmlwdDogYml0Y29pbmpzLlBheW1lbnQgfCB1bmRlZmluZWQ7XG4gIGxldCB3aXRuZXNzU2NyaXB0OiBiaXRjb2luanMuUGF5bWVudCB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAncDJzaCc6XG4gICAgICByZWRlZW1TY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIHdpdG5lc3NTY3JpcHQgPSBzY3JpcHQyb2YzO1xuICAgICAgcmVkZWVtU2NyaXB0ID0gYml0Y29pbmpzLnBheW1lbnRzLnAyd3NoKHsgcmVkZWVtOiBzY3JpcHQyb2YzIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncDJ3c2gnOlxuICAgICAgd2l0bmVzc1NjcmlwdCA9IHNjcmlwdDJvZjM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIG11bHRpc2lnIHNjcmlwdCB0eXBlICR7c2NyaXB0VHlwZX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0UHViS2V5OiBnZXRPdXRwdXRTY3JpcHQoc2NyaXB0VHlwZSwgc2NyaXB0Mm9mMy5vdXRwdXQpLFxuICAgIHJlZGVlbVNjcmlwdDogcmVkZWVtU2NyaXB0Py5vdXRwdXQsXG4gICAgd2l0bmVzc1NjcmlwdDogd2l0bmVzc1NjcmlwdD8ub3V0cHV0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9YT25seVB1YmxpY0tleShiOiBCdWZmZXIpOiBCdWZmZXIge1xuICBpZiAoYi5sZW5ndGggPT09IDMzKSB7XG4gICAgcmV0dXJuIGIuc2xpY2UoMSk7XG4gIH1cbiAgaWYgKGIubGVuZ3RoID09PSAzMikge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBrZXkgc2l6ZSAke2IubGVuZ3RofWApO1xufVxuXG5mdW5jdGlvbiBjaGVja1NpemUoYjogQnVmZmVyLCB0YXJnZXRTaXplOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmIChiLmxlbmd0aCA9PT0gdGFyZ2V0U2l6ZSkge1xuICAgIHJldHVybiBiO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzaXplICR7Yi5sZW5ndGh9LiBNdXN0IHVzZSAke25hbWV9LmApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBzaXplIG9mIHRoZSBwdWIga2V5IGZvciAzMiBieXRlcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBpZmYgdHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrWE9ubHlQdWJsaWNLZXkoYjogQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIGNoZWNrU2l6ZShiLCAzMiwgJ3gtb25seSBrZXknKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgc2l6ZSBvZiB0aGUgcHViIGtleSBmb3IgMzIgYnl0ZXMgYW5kIHJldHVybnMgdGhlIHNhbWUgaWZmIHRydWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsYWluUHVibGljS2V5KGI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiBjaGVja1NpemUoYiwgMzMsICdwbGFpbiBrZXknKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVGFwTWVya2xlUm9vdChiOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY2hlY2tTaXplKGIsIDMyLCAndGFwIG1lcmtsZSByb290Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1R4SGFzaChiOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY2hlY2tTaXplKGIsIDMyLCAndHggaGFzaCcpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHNjcmlwdFR5cGU6ICdwMnRyJyB8ICdwMnRyTXVzaWcyJywga2V5czogVHJpcGxlPEJ1ZmZlcj4pOiBUdXBsZTxCdWZmZXI+W10ge1xuICBjb25zdCBbdXNlcktleSwgYmFja3VwS2V5LCBiaXRHb0tleV0gPSBrZXlzLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIHJldHVybiBzY3JpcHRUeXBlID09PSAncDJ0cidcbiAgICA/IFtcbiAgICAgICAgW3VzZXJLZXksIGJpdEdvS2V5XSxcbiAgICAgICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgICAgIFtiYWNrdXBLZXksIGJpdEdvS2V5XSxcbiAgICAgIF1cbiAgICA6IFtcbiAgICAgICAgW3VzZXJLZXksIGJhY2t1cEtleV0sXG4gICAgICAgIFtiYWNrdXBLZXksIGJpdEdvS2V5XSxcbiAgICAgIF07XG59XG5cbmZ1bmN0aW9uIGdldEtleVBhdGhDb21iaW5hdGlvbihzY3JpcHRUeXBlOiAncDJ0cicgfCAncDJ0ck11c2lnMicsIGtleXM6IFRyaXBsZTxCdWZmZXI+KTogVHVwbGU8QnVmZmVyPiB7XG4gIGNvbnN0IHNhbml0aXplUHVibGljS2V5ID0gc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gdG9YT25seVB1YmxpY0tleSA6IGNoZWNrUGxhaW5QdWJsaWNLZXk7XG4gIHJldHVybiBbc2FuaXRpemVQdWJsaWNLZXkoa2V5c1swXSksIHNhbml0aXplUHVibGljS2V5KGtleXNbMl0pXTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkZWVtSW5kZXgoa2V5Q29tYmluYXRpb25zOiBbQnVmZmVyLCBCdWZmZXJdW10sIHNpZ25lcjogQnVmZmVyLCBjb3NpZ25lcjogQnVmZmVyKTogbnVtYmVyIHtcbiAgc2lnbmVyID0gdG9YT25seVB1YmxpY0tleShzaWduZXIpO1xuICBjb3NpZ25lciA9IHRvWE9ubHlQdWJsaWNLZXkoY29zaWduZXIpO1xuICBjb25zdCBpID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleCgoW2EsIGJdKSA9PiB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBzaWduZXIubGVuZ3RoIHx8IGIubGVuZ3RoICE9PSBjb3NpZ25lci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb21wYXJpc29uYCk7XG4gICAgfVxuICAgIHJldHVybiAoYS5lcXVhbHMoc2lnbmVyKSAmJiBiLmVxdWFscyhjb3NpZ25lcikpIHx8IChhLmVxdWFscyhjb3NpZ25lcikgJiYgYi5lcXVhbHMoc2lnbmVyKSk7XG4gIH0pO1xuICBpZiAoMCA8PSBpKSB7XG4gICAgcmV0dXJuIGk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCBzaW5nZXIvY29zaWduZXIgY29tYmluYXRpb25gKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHJDb21tb24oXG4gIHNjcmlwdFR5cGU6ICdwMnRyJyB8ICdwMnRyTXVzaWcyJyxcbiAgcHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sXG4gIHJlZGVlbUluZGV4PzogbnVtYmVyIHwgeyBzaWduZXI6IEJ1ZmZlcjsgY29zaWduZXI6IEJ1ZmZlciB9XG4pOiBiaXRjb2luanMuUGF5bWVudCB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9uczJvZjIgPSBnZXRUYXB0cmVlS2V5Q29tYmluYXRpb25zKHNjcmlwdFR5cGUsIHB1YmtleXMpO1xuICBpZiAodHlwZW9mIHJlZGVlbUluZGV4ID09PSAnb2JqZWN0Jykge1xuICAgIHJlZGVlbUluZGV4ID0gZ2V0UmVkZWVtSW5kZXgoa2V5Q29tYmluYXRpb25zMm9mMiwgcmVkZWVtSW5kZXguc2lnbmVyLCByZWRlZW1JbmRleC5jb3NpZ25lcik7XG4gIH1cbiAgY29uc3QgcmVkZWVtcyA9IGtleUNvbWJpbmF0aW9uczJvZjIubWFwKChwdWJrZXlzLCBpbmRleCkgPT5cbiAgICBwMnRyUGF5bWVudHMucDJ0cl9ucyhcbiAgICAgIHtcbiAgICAgICAgcHVia2V5cyxcbiAgICAgICAgZGVwdGg6IHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJyB8fCBpbmRleCA9PT0gMCA/IDEgOiAyLFxuICAgICAgfSxcbiAgICAgIHsgZWNjTGliIH1cbiAgICApXG4gICk7XG5cbiAgcmV0dXJuIHAydHJQYXltZW50cy5wMnRyKFxuICAgIHtcbiAgICAgIHB1YmtleXM6IGdldEtleVBhdGhDb21iaW5hdGlvbihzY3JpcHRUeXBlLCBwdWJrZXlzKSxcbiAgICAgIHJlZGVlbXMsXG4gICAgICByZWRlZW1JbmRleCxcbiAgICB9LFxuICAgIHsgZWNjTGliIH1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBheW1lbnRQMnRyKFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAgcmVkZWVtSW5kZXg/OiBudW1iZXIgfCB7IHNpZ25lcjogQnVmZmVyOyBjb3NpZ25lcjogQnVmZmVyIH1cbik6IGJpdGNvaW5qcy5QYXltZW50IHtcbiAgcmV0dXJuIGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKCdwMnRyJywgcHVia2V5cywgcmVkZWVtSW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF5bWVudFAydHJNdXNpZzIoXG4gIHB1YmtleXM6IFRyaXBsZTxCdWZmZXI+LFxuICByZWRlZW1JbmRleD86IG51bWJlciB8IHsgc2lnbmVyOiBCdWZmZXI7IGNvc2lnbmVyOiBCdWZmZXIgfVxuKTogYml0Y29pbmpzLlBheW1lbnQge1xuICByZXR1cm4gY3JlYXRlUGF5bWVudFAydHJDb21tb24oJ3AydHJNdXNpZzInLCBwdWJrZXlzLCByZWRlZW1JbmRleCk7XG59XG5cbmZ1bmN0aW9uIGdldExlYWZIYXNoQ29tbW9uKFxuICBzY3JpcHRUeXBlOiAncDJ0cicgfCAncDJ0ck11c2lnMicsXG4gIHBhcmFtczogYml0Y29pbmpzLlBheW1lbnQgfCB7IHB1YmxpY0tleXM6IFRyaXBsZTxCdWZmZXI+OyBzaWduZXI6IEJ1ZmZlcjsgY29zaWduZXI6IEJ1ZmZlciB9XG4pOiBCdWZmZXIge1xuICBpZiAoJ3B1YmxpY0tleXMnIGluIHBhcmFtcykge1xuICAgIHBhcmFtcyA9IGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKHNjcmlwdFR5cGUsIHBhcmFtcy5wdWJsaWNLZXlzLCBwYXJhbXMpO1xuICB9XG4gIGNvbnN0IHsgb3V0cHV0LCBjb250cm9sQmxvY2ssIHJlZGVlbSB9ID0gcGFyYW1zO1xuICBpZiAoIW91dHB1dCB8fCAhY29udHJvbEJsb2NrIHx8ICFyZWRlZW0gfHwgIXJlZGVlbS5vdXRwdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgfVxuICByZXR1cm4gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIGNvbnRyb2xCbG9jaywgcmVkZWVtLm91dHB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWFmSGFzaChcbiAgcGFyYW1zOiBiaXRjb2luanMuUGF5bWVudCB8IHsgcHVibGljS2V5czogVHJpcGxlPEJ1ZmZlcj47IHNpZ25lcjogQnVmZmVyOyBjb3NpZ25lcjogQnVmZmVyIH1cbik6IEJ1ZmZlciB7XG4gIHJldHVybiBnZXRMZWFmSGFzaENvbW1vbigncDJ0cicsIHBhcmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXlQYXRoUDJ0ck11c2lnMihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IEtleVBhdGhQMnRyTXVzaWcyIHtcbiAgY29uc3QgcGF5bWVudCA9IGNyZWF0ZVBheW1lbnRQMnRyQ29tbW9uKCdwMnRyTXVzaWcyJywgcHVia2V5cyk7XG4gIGFzc2VydChwYXltZW50LmludGVybmFsUHVia2V5KTtcbiAgYXNzZXJ0KHBheW1lbnQudGFwVHJlZSk7XG4gIHJldHVybiB7XG4gICAgaW50ZXJuYWxQdWJrZXk6IHBheW1lbnQuaW50ZXJuYWxQdWJrZXksXG4gICAgb3V0cHV0UHVia2V5OiBnZXRUd2Vha2VkT3V0cHV0S2V5KHBheW1lbnQpLFxuICAgIHRhcHRyZWVSb290OiBnZXREZXB0aEZpcnN0VGFwdHJlZShwYXltZW50LnRhcFRyZWUpLnJvb3QsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ckNvbW1vbihcbiAgc2NyaXB0VHlwZTogJ3AydHInIHwgJ3AydHJNdXNpZzInLFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAga2V5Q29tYmluYXRpb246IFR1cGxlPEJ1ZmZlcj5cbik6IFNwZW5kU2NyaXB0UDJ0ciB7XG4gIGNvbnN0IGtleUNvbWJpbmF0aW9ucyA9IGdldFRhcHRyZWVLZXlDb21iaW5hdGlvbnMoc2NyaXB0VHlwZSwgcHVia2V5cyk7XG4gIGNvbnN0IFthLCBiXSA9IGtleUNvbWJpbmF0aW9uLm1hcCgoaykgPT4gdG9YT25seVB1YmxpY0tleShrKSk7XG4gIGNvbnN0IHJlZGVlbUluZGV4ID0ga2V5Q29tYmluYXRpb25zLmZpbmRJbmRleChcbiAgICAoW2MsIGRdKSA9PiAoYS5lcXVhbHMoYykgJiYgYi5lcXVhbHMoZCkpIHx8IChhLmVxdWFscyhkKSAmJiBiLmVxdWFscyhjKSlcbiAgKTtcblxuICBpZiAocmVkZWVtSW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZmluZCByZWRlZW1JbmRleCBmb3Iga2V5IGNvbWJpbmF0aW9uYCk7XG4gIH1cblxuICBjb25zdCBwYXltZW50ID0gY3JlYXRlUGF5bWVudFAydHJDb21tb24oc2NyaXB0VHlwZSwgcHVia2V5cywgcmVkZWVtSW5kZXgpO1xuICBjb25zdCB7IGNvbnRyb2xCbG9jayB9ID0gcGF5bWVudDtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spKTtcblxuICBhc3NlcnQocGF5bWVudC5yZWRlZW0pO1xuICBjb25zdCBsZWFmU2NyaXB0ID0gcGF5bWVudC5yZWRlZW0ub3V0cHV0O1xuICBhc3NlcnQoQnVmZmVyLmlzQnVmZmVyKGxlYWZTY3JpcHQpKTtcblxuICBjb25zdCBwYXJzZWRDb250cm9sQmxvY2sgPSB0YXByb290LnBhcnNlQ29udHJvbEJsb2NrKGVjY0xpYiwgY29udHJvbEJsb2NrKTtcbiAgY29uc3QgeyBsZWFmVmVyc2lvbiB9ID0gcGFyc2VkQ29udHJvbEJsb2NrO1xuICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBwYXJzZWRDb250cm9sQmxvY2ssIGxlYWZTY3JpcHQpO1xuXG4gIHJldHVybiB7XG4gICAgY29udHJvbEJsb2NrLFxuICAgIHdpdG5lc3NTY3JpcHQ6IGxlYWZTY3JpcHQsXG4gICAgbGVhZlZlcnNpb24sXG4gICAgbGVhZkhhc2gsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGVuZFNjcmlwdFAydHIocHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sIGtleUNvbWJpbmF0aW9uOiBUdXBsZTxCdWZmZXI+KTogU3BlbmRTY3JpcHRQMnRyIHtcbiAgcmV0dXJuIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ckNvbW1vbigncDJ0cicsIHB1YmtleXMsIGtleUNvbWJpbmF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwZW5kU2NyaXB0UDJ0ck11c2lnMihwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPiwga2V5Q29tYmluYXRpb246IFR1cGxlPEJ1ZmZlcj4pOiBTcGVuZFNjcmlwdFAydHIge1xuICByZXR1cm4gY3JlYXRlU3BlbmRTY3JpcHRQMnRyQ29tbW9uKCdwMnRyTXVzaWcyJywgcHVia2V5cywga2V5Q29tYmluYXRpb24pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSB0YXByb290IG91dHB1dCBzY3JpcHQgdXNpbmcgdGhlIHVzZXIrYml0Z28ga2V5cyBmb3IgdGhlIGFnZ3JlZ2F0ZVxuICogcHVibGljIGtleSB1c2luZyBNdVNpZzIgYW5kIGEgdGFwdHJlZSBjb250YWluaW5nIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGRlcGVuZHMgb24gc2NyaXB0VHlwZS5cbiAqIHAydHIgdHlwZTogYSB1c2VyK2JpdGdvIDItb2YtMiBzY3JpcHQgYXQgdGhlIGZpcnN0IGRlcHRoIGxldmVsIG9mIHRoZSB0cmVlIGFuZCB1c2VyK2JhY2t1cFxuICogYW5kIGJpdGdvK2JhY2t1cCAyLW9mLTIgc2NyaXB0cyBvbmUgbGV2ZWwgZGVlcGVyLlxuICogcDJ0ck11c2lnMiB0eXBlOiB1c2VyK2JhY2t1cCBhbmQgYml0Z28rYmFja3VwIDItb2YtMiBzY3JpcHRzIGF0IHRoZSBmaXJzdCBkZXB0aCBsZXZlbCBvZiB0aGVcbiAqIHRyZWUuXG4gKiBAcGFyYW0gcHVia2V5cyAtIGEgcHVia2V5IGFycmF5IGNvbnRhaW5pbmcgdGhlIHVzZXIga2V5LCBiYWNrdXAga2V5LCBhbmQgYml0Z28ga2V5IGluIHRoYXQgb3JkZXJcbiAqIEByZXR1cm5zIHt7c2NyaXB0UHViS2V5fX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGFwcm9vdFNjcmlwdDJvZjMoc2NyaXB0VHlwZTogJ3AydHInIHwgJ3AydHJNdXNpZzInLCBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPik6IFNwZW5kYWJsZVNjcmlwdCB7XG4gIGNvbnN0IHsgb3V0cHV0IH0gPSBjcmVhdGVQYXltZW50UDJ0ckNvbW1vbihzY3JpcHRUeXBlLCBwdWJrZXlzKTtcbiAgYXNzZXJ0KEJ1ZmZlci5pc0J1ZmZlcihvdXRwdXQpKTtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRQdWJLZXk6IG91dHB1dCxcbiAgfTtcbn1cbiJdfQ==
@@ -117,8 +117,4 @@ export declare function parsePubScript(inputPubScript: InputPubScript, scriptTyp
117
117
  export declare function parsePubScript(inputPubScript: InputPubScript, scriptType: 'p2shP2pk'): ParsedPubScriptP2shP2pk;
118
118
  export declare function parsePubScript(inputPubScript: InputPubScript, scriptType: 'p2sh' | 'p2shP2wsh' | 'p2wsh'): ParsedPubScriptP2ms;
119
119
  export declare function parsePubScript(inputPubScript: InputPubScript, scriptType: ParsedScriptType): ParsedPubScriptP2ms | ParsedPubScriptTaproot | ParsedPubScriptP2shP2pk;
120
- export declare function getChainAndIndexFromPath(path: string): {
121
- chain: number;
122
- index: number;
123
- };
124
120
  //# sourceMappingURL=parseInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseInput.d.ts","sourceRoot":"","sources":["../../../src/bitgo/parseInput.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parseInput.d.ts","sourceRoot":"","sources":["../../../src/bitgo/parseInput.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,6 @@ exports.parseSignatureScript = parseSignatureScript;
8
8
  exports.parseSignatureScript2Of3 = parseSignatureScript2Of3;
9
9
  exports.parsePubScript2Of3 = parsePubScript2Of3;
10
10
  exports.parsePubScript = parsePubScript;
11
- exports.getChainAndIndexFromPath = getChainAndIndexFromPath;
12
11
  /* eslint no-redeclare: 0 */
13
12
  const opcodes = require("bitcoin-ops");
14
13
  const bitcoinjs_lib_1 = require("bitcoinjs-lib");
@@ -425,19 +424,4 @@ function parsePubScript(inputPubScript, scriptType) {
425
424
  }
426
425
  return result;
427
426
  }
428
- function getChainAndIndexFromPath(path) {
429
- const parts = path.split('/');
430
- if (parts.length <= 2) {
431
- throw new Error(`invalid path "${path}"`);
432
- }
433
- const chain = Number(parts[parts.length - 2]);
434
- const index = Number(parts[parts.length - 1]);
435
- if (isNaN(chain) || isNaN(index)) {
436
- throw new Error(`Could not parse chain and index into numbers from path ${path}`);
437
- }
438
- if (chain < 0 || index < 0) {
439
- throw new Error(`chain and index must be non-negative`);
440
- }
441
- return { chain, index };
442
- }
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9wYXJzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esd0RBS0M7QUFLRCxnREFHQztBQUtELDREQVdDO0FBS0Qsd0NBS0M7QUFnYUQsb0RBdUJDO0FBRUQsNERBdUJDO0FBdUhELGdEQXdCQztBQTRCRCx3Q0FrQkM7QUFFRCw0REFlQztBQTVzQkQsNEJBQTRCO0FBQzVCLHVDQUF1QztBQUN2QyxpREFBMkQ7QUFFM0QsbUNBQW1DO0FBQ25DLG1EQUFtRDtBQUVuRCxTQUFnQixzQkFBc0IsQ0FBQyxDQUFrQjtJQUN2RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsWUFBb0I7SUFDckQsc0ZBQXNGO0lBQ3RGLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdEcsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsWUFBb0I7SUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMvQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFN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LEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1yZWRlY2xhcmU6IDAgKi9cbmltcG9ydCAqIGFzIG9wY29kZXMgZnJvbSAnYml0Y29pbi1vcHMnO1xuaW1wb3J0IHsgVHhJbnB1dCwgc2NyaXB0IGFzIGJzY3JpcHQgfSBmcm9tICdiaXRjb2luanMtbGliJztcblxuaW1wb3J0IHsgaXNUcmlwbGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzU2NyaXB0VHlwZTJPZjMgfSBmcm9tICcuL291dHB1dFNjcmlwdHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFjZWhvbGRlclNpZ25hdHVyZSh2OiBudW1iZXIgfCBCdWZmZXIpOiBib29sZWFuIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgIHJldHVybiB2Lmxlbmd0aCA9PT0gMDtcbiAgfVxuICByZXR1cm4gdiA9PT0gMDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHRydWUgaWZmIFAyVFIgc2NyaXB0IHBhdGgncyBjb250cm9sIGJsb2NrIG1hdGNoZXMgQml0R28ncyBuZWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29udHJvbEJvY2soY29udHJvbEJsb2NrOiBCdWZmZXIpOiBib29sZWFuIHtcbiAgLy8gVGhlIGxhc3Qgc3RhY2sgZWxlbWVudCBpcyBjYWxsZWQgdGhlIGNvbnRyb2wgYmxvY2sgYywgYW5kIG11c3QgaGF2ZSBsZW5ndGggMzMgKyAzMm1cbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spICYmIDMzIDw9IGNvbnRyb2xCbG9jay5sZW5ndGggJiYgY29udHJvbEJsb2NrLmxlbmd0aCAlIDMyID09PSAxO1xufVxuXG4vKipcbiAqIEByZXR1cm4gc2NyaXB0IHBhdGggbGV2ZWwgZm9yIFAyVFIgY29udHJvbCBibG9ja1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2NyaXB0UGF0aExldmVsKGNvbnRyb2xCbG9jazogQnVmZmVyKTogbnVtYmVyIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb250cm9sIGJsb2NrIHR5cGUuJyk7XG4gIH1cbiAgaWYgKGNvbnRyb2xCbG9jay5sZW5ndGggPT09IDY1KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKGNvbnRyb2xCbG9jay5sZW5ndGggPT09IDk3KSB7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGNvbnRyb2wgYmxvY2sgbGVuZ3RoLicpO1xufVxuXG4vKipcbiAqIEByZXR1cm4gbGVhZiB2ZXJzaW9uIGZvciBQMlRSIGNvbnRyb2wgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWFmVmVyc2lvbihjb250cm9sQmxvY2s6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSAmJiBjb250cm9sQmxvY2subGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBjb250cm9sQmxvY2tbMF0gJiAweGZlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBsZWFmVmVyc2lvbi4nKTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU2NyaXB0VHlwZTJPZjMgPVxuICB8ICdwMnNoJ1xuICB8ICdwMnNoUDJ3c2gnXG4gIHwgJ3Ayd3NoJ1xuICB8ICd0YXByb290S2V5UGF0aFNwZW5kJyAvLyBvbmx5IGltcGxlbWVudGVkIGZvciBwMnRyTXVzaWcyXG4gIHwgJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnOyAvLyBjYW4gYmUgZm9yIGVpdGhlciBwMnRyIG9yIHAydHJNdXNpZzIgb3V0cHV0IHNjcmlwdFxuXG5leHBvcnQgdHlwZSBQYXJzZWRTY3JpcHRUeXBlID0gUGFyc2VkU2NyaXB0VHlwZTJPZjMgfCAncDJzaFAycGsnO1xuXG5leHBvcnQgdHlwZSBQYXJzZWRQdWJTY3JpcHQgPSB7XG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZWRTaWduYXR1cmVTY3JpcHQgPSB7XG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGU7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJztcbiAgcHVibGljS2V5czogW0J1ZmZlcl07XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICAvLyB4LW9ubHkgdGFwT3V0cHV0S2V5XG4gIHB1YmxpY0tleXM6IFtCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgPSBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aCB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFAybXMgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0UDJzaFAycGsgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaFAycGsnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXTtcbiAgc2lnbmF0dXJlczpcbiAgICB8IFtCdWZmZXIsIEJ1ZmZlcl0gLy8gZnVsbHktc2lnbmVkIHRyYW5zYWN0aW9ucyB3aXRoIHNpZ25hdHVyZXNcbiAgICAvKiBQYXJ0aWFsbHkgc2lnbmVkIHRyYW5zYWN0aW9ucyB3aXRoIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAgICAgRm9yIHAyc2gsIHRoZSBwbGFjZWhvbGRlciBpcyBPUF8wIChudW1iZXIgMCkgKi9cbiAgICB8IFtCdWZmZXIgfCAwLCBCdWZmZXIgfCAwLCBCdWZmZXIgfCAwXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogS2V5cGF0aCBzcGVuZHMgb25seSBoYXZlIGEgc2luZ2xlIHNpZ25hdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RLZXlQYXRoIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyXTtcbn1cblxuLyoqXG4gKiBUYXByb290IFNjcmlwdHBhdGggc3BlbmRzIGFyZSBtb3JlIHNpbWlsYXIgdG8gcmVndWxhciBwMm1zIHNwZW5kcyBhbmQgaGF2ZSB0d28gcHVibGljIGtleXMgYW5kXG4gKiB0d28gc2lnbmF0dXJlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBjb250cm9sQmxvY2s6IEJ1ZmZlcjtcbiAgbGVhZlZlcnNpb246IG51bWJlcjtcbiAgLyoqIEluZGljYXRlcyB0aGUgbGV2ZWwgaW5zaWRlIHRoZSB0YXB0cmVlLiAqL1xuICBzY3JpcHRQYXRoTGV2ZWw6IG51bWJlcjtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3QgPSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aCB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuXG50eXBlIERlY29tcGlsZWRTY3JpcHQgPSBBcnJheTxCdWZmZXIgfCBudW1iZXI+O1xuXG4vKipcbiAqIFN0YXRpYyBzY3JpcHQgZWxlbWVudHNcbiAqL1xudHlwZSBTY3JpcHRQYXR0ZXJuQ29uc3RhbnQgPVxuICB8ICdPUF8wJ1xuICB8ICdPUF8xJ1xuICB8ICdPUF8yJ1xuICB8ICdPUF8zJ1xuICB8ICdPUF9DSEVDS01VTFRJU0lHJ1xuICB8ICdPUF9DSEVDS1NJRydcbiAgfCAnT1BfQ0hFQ0tTSUdWRVJJRlknO1xuXG4vKipcbiAqIFNjcmlwdCBlbGVtZW50cyB0aGF0IGNhbiBiZSBjYXB0dXJlZFxuICovXG50eXBlIFNjcmlwdFBhdHRlcm5DYXB0dXJlID1cbiAgfCAnOnB1YmtleSdcbiAgfCAnOnB1YmtleS14b25seSdcbiAgfCAnOnNpZ25hdHVyZSdcbiAgfCAnOmNvbnRyb2wtYmxvY2snXG4gIHwgeyAnOnNjcmlwdCc6IFNjcmlwdFBhdHRlcm5FbGVtZW50W10gfTtcblxudHlwZSBTY3JpcHRQYXR0ZXJuRWxlbWVudCA9IFNjcmlwdFBhdHRlcm5Db25zdGFudCB8IFNjcmlwdFBhdHRlcm5DYXB0dXJlO1xuXG4vKipcbiAqIFJlc3VsdCBmb3IgYSBzdWNjZXNzZnVsIHNjcmlwdCBtYXRjaFxuICovXG50eXBlIE1hdGNoUmVzdWx0ID0ge1xuICAnOnB1YmtleSc6IEJ1ZmZlcltdO1xuICAnOnB1YmtleS14b25seSc6IEJ1ZmZlcltdO1xuICAnOmNvbnRyb2wtYmxvY2snOiBCdWZmZXJbXTtcbiAgJzpzaWduYXR1cmUnOiAoQnVmZmVyIHwgMClbXTtcbiAgJzpzY3JpcHQnOiB7IGJ1ZmZlcjogQnVmZmVyOyBtYXRjaDogTWF0Y2hSZXN1bHQgfVtdO1xufTtcblxuZnVuY3Rpb24gZW1wdHlNYXRjaFJlc3VsdCgpOiBNYXRjaFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgJzpwdWJrZXknOiBbXSxcbiAgICAnOnB1YmtleS14b25seSc6IFtdLFxuICAgICc6Y29udHJvbC1ibG9jayc6IFtdLFxuICAgICc6c2lnbmF0dXJlJzogW10sXG4gICAgJzpzY3JpcHQnOiBbXSxcbiAgfTtcbn1cblxuY2xhc3MgTWF0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLy8gdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB0byBwcm9oaWJpdCBgcmV0dXJuIG5ldyBFcnJvcigpYCB3aGVuIHRoZSByZXR1cm4gdHlwZSBkZW1hbmRzIGBNYXRjaEVycm9yYFxuICBfX3R5cGUgPSAnTWF0Y2hFcnJvcic7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG5cbiAgc3RhdGljIGZvclBhdHRlcm5FbGVtZW50KHA6IFNjcmlwdFBhdHRlcm5FbGVtZW50KTogTWF0Y2hFcnJvciB7XG4gICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiAnOnNjcmlwdCcgaW4gcCkge1xuICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBlcnJvciBtYXRjaGluZyBuZXN0ZWQgc2NyaXB0YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgbWF0Y2hpbmcgJHtwfWApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIHBhdHRlcm5cbiAqIEByZXR1cm4gTWF0Y2hSZXN1bHQgaWYgc2NyaXB0IG1hdGNoZXMgcGF0dGVybi4gVGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gdGhlIG1hdGNoZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBtYXRjaFNjcmlwdChzY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsIHBhdHRlcm46IFNjcmlwdFBhdHRlcm5FbGVtZW50W10pOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3Ige1xuICAvKipcbiAgICogTWF0Y2ggYSBzaW5nbGUgc2NyaXB0IGVsZW1lbnQgd2l0aCBhIFNjcmlwdFBhdHRlcm5FbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiBtYXRjaEVsZW1lbnQoZTogQnVmZmVyIHwgbnVtYmVyLCBwOiBTY3JpcHRQYXR0ZXJuRWxlbWVudCk6IE1hdGNoUmVzdWx0IHwgYm9vbGVhbiB7XG4gICAgc3dpdGNoIChwKSB7XG4gICAgICBjYXNlICdPUF8wJzpcbiAgICAgICAgcmV0dXJuIGUgPT09IG9wY29kZXMuT1BfMCB8fCAoQnVmZmVyLmlzQnVmZmVyKGUpICYmIGUubGVuZ3RoID09PSAwKTtcbiAgICAgIGNhc2UgJ09QXzEnOlxuICAgICAgY2FzZSAnT1BfMic6XG4gICAgICBjYXNlICdPUF8zJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLTVVMVElTSUcnOlxuICAgICAgY2FzZSAnT1BfQ0hFQ0tTSUcnOlxuICAgICAgY2FzZSAnT1BfQ0hFQ0tTSUdWRVJJRlknOlxuICAgICAgICByZXR1cm4gZSA9PT0gb3Bjb2Rlc1twXTtcbiAgICAgIGNhc2UgJzpwdWJrZXknOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIChlLmxlbmd0aCA9PT0gMzMgfHwgZS5sZW5ndGggPT09IDY1KTtcbiAgICAgIGNhc2UgJzpwdWJrZXkteG9ubHknOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIGUubGVuZ3RoID09PSAzMjtcbiAgICAgIGNhc2UgJzpzaWduYXR1cmUnOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpIHx8IGlzUGxhY2Vob2xkZXJTaWduYXR1cmUoZSk7XG4gICAgICBjYXNlICc6Y29udHJvbC1ibG9jayc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgJiYgaXNWYWxpZENvbnRyb2xCb2NrKGUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHBhdHRlcm4gZWxlbWVudCAke3B9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNjcmlwdC5sZW5ndGggIT09IHBhdHRlcm4ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBsZW5ndGggbWlzbWF0Y2hgKTtcbiAgfVxuXG4gIC8vIEdvIG92ZXIgZWFjaCBwYXR0ZXJuIGVsZW1lbnQuXG4gIC8vIENvbGxlY3QgY2FwdHVyZXMgaW50byBhIHJlc3VsdCBvYmplY3QuXG4gIHJldHVybiBwYXR0ZXJuLnJlZHVjZSgob2JqOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3IsIHAsIGkpOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3IgPT4ge1xuICAgIC8vIGlmIHdlIGhhZCBhIHByZXZpb3VzIG1pc21hdGNoLCBzaG9ydC1jaXJjdWl0XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgY29uc3QgZSA9IHNjcmlwdFtpXTtcblxuICAgIC8vIGZvciAnOnNjcmlwdCcgcGF0dGVybiBlbGVtZW50cywgZGVjb21waWxlIHNjcmlwdCBlbGVtZW50IGFuZCByZWN1cnNlXG4gICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiAnOnNjcmlwdCcgaW4gcCkge1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBidWZmZXIgZm9yIDpzY3JpcHRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlYyA9IGJzY3JpcHQuZGVjb21waWxlKGUpO1xuICAgICAgaWYgKCFkZWMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBlcnJvciBkZWNvbXBpbGluZyBuZXN0ZWQgc2NyaXB0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KGRlYywgcFsnOnNjcmlwdCddKTtcbiAgICAgIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuICAgICAgb2JqWyc6c2NyaXB0J10ucHVzaCh7XG4gICAgICAgIGJ1ZmZlcjogZSxcbiAgICAgICAgbWF0Y2gsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaEVsZW1lbnQoZSwgcCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIE1hdGNoRXJyb3IuZm9yUGF0dGVybkVsZW1lbnQocCk7XG4gICAgfVxuXG4gICAgLy8gaWYgcGF0dGVybiBlbGVtZW50IGlzIGEgY2FwdHVyZSwgYWRkIGl0IHRvIHRoZSByZXN1bHQgb2JqXG4gICAgaWYgKHAgPT09ICc6c2lnbmF0dXJlJyAmJiBlID09PSAwKSB7XG4gICAgICBvYmpbcF0ucHVzaChlKTtcbiAgICB9IGVsc2UgaWYgKHAgaW4gb2JqKSB7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgY2FwdHVyZSB2YWx1ZWApO1xuICAgICAgfVxuICAgICAgb2JqW3BdLnB1c2goZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfSwgZW1wdHlNYXRjaFJlc3VsdCgpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gcGF0dGVybnNcbiAqIEByZXR1cm4gZmlyc3QgbWF0Y2hcbiAqL1xuZnVuY3Rpb24gbWF0Y2hTY3JpcHRTb21lKHNjcmlwdDogRGVjb21waWxlZFNjcmlwdCwgcGF0dGVybnM6IFNjcmlwdFBhdHRlcm5FbGVtZW50W11bXSk6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciB7XG4gIGZvciAoY29uc3QgcCBvZiBwYXR0ZXJucykge1xuICAgIGNvbnN0IG0gPSBtYXRjaFNjcmlwdChzY3JpcHQsIHApO1xuICAgIGlmIChtIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBtO1xuICB9XG4gIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgbm8gbWF0Y2ggZm9yIHNjcmlwdGApO1xufVxuXG50eXBlIElucHV0U2NyaXB0czxUU2NyaXB0LCBUV2l0bmVzcz4gPSB7XG4gIHNjcmlwdDogVFNjcmlwdDtcbiAgd2l0bmVzczogVFdpdG5lc3M7XG59O1xuXG50eXBlIElucHV0U2NyaXB0c0xlZ2FjeSA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0LCBudWxsPjtcbnR5cGUgSW5wdXRTY3JpcHRzV3JhcHBlZFNlZ3dpdCA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0LCBCdWZmZXJbXT47XG50eXBlIElucHV0U2NyaXB0c05hdGl2ZVNlZ3dpdCA9IElucHV0U2NyaXB0czxudWxsLCBCdWZmZXJbXT47XG5cbnR5cGUgSW5wdXRTY3JpcHRzVW5rbm93biA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0IHwgbnVsbCwgQnVmZmVyW10gfCBudWxsPjtcblxudHlwZSBJbnB1dFBhcnNlcjxUIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGsgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdD4gPSAoXG4gIHA6IElucHV0U2NyaXB0c1Vua25vd25cbikgPT4gVCB8IE1hdGNoRXJyb3I7XG5cbmV4cG9ydCB0eXBlIElucHV0UHViU2NyaXB0ID0gQnVmZmVyO1xuXG50eXBlIFB1YlNjcmlwdFBhcnNlcjxUIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB8IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaz4gPSAoXG4gIHA6IElucHV0UHViU2NyaXB0LFxuICB0OiBQYXJzZWRTY3JpcHRUeXBlXG4pID0+IFQgfCBNYXRjaEVycm9yO1xuXG5mdW5jdGlvbiBpc0xlZ2FjeShwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNMZWdhY3kge1xuICByZXR1cm4gQm9vbGVhbihwLnNjcmlwdCAmJiAhcC53aXRuZXNzKTtcbn1cblxuZnVuY3Rpb24gaXNXcmFwcGVkU2Vnd2l0KHA6IElucHV0U2NyaXB0c1Vua25vd24pOiBwIGlzIElucHV0U2NyaXB0c1dyYXBwZWRTZWd3aXQge1xuICByZXR1cm4gQm9vbGVhbihwLnNjcmlwdCAmJiBwLndpdG5lc3MpO1xufVxuXG5mdW5jdGlvbiBpc05hdGl2ZVNlZ3dpdChwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNOYXRpdmVTZWd3aXQge1xuICByZXR1cm4gQm9vbGVhbighcC5zY3JpcHQgJiYgcC53aXRuZXNzKTtcbn1cblxuY29uc3QgcGFyc2VQMnNoUDJwazogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGs+ID0gKHApID0+IHtcbiAgaWYgKCFpc0xlZ2FjeShwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbGVnYWN5IGlucHV0YCk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLnNjcmlwdCwgWyc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IFsnOnB1YmtleScsICdPUF9DSEVDS1NJRyddIH1dKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJwaycsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleSddIGFzIFtCdWZmZXJdLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlcl0sXG4gIH07XG59O1xuXG5mdW5jdGlvbiBwYXJzZVAybXMoXG4gIGRlY1NjcmlwdDogRGVjb21waWxlZFNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgTWF0Y2hFcnJvciB7XG4gIGNvbnN0IHBhdHRlcm4yT2YzOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdID0gWydPUF8yJywgJzpwdWJrZXknLCAnOnB1YmtleScsICc6cHVia2V5JywgJ09QXzMnLCAnT1BfQ0hFQ0tNVUxUSVNJRyddO1xuXG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHRTb21lKGRlY1NjcmlwdCwgW1xuICAgIC8qIGZ1bGwtc2lnbmVkLCBubyBwbGFjZWhvbGRlciBzaWduYXR1cmUgKi9cbiAgICBbJ09QXzAnLCAnOnNpZ25hdHVyZScsICc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IHBhdHRlcm4yT2YzIH1dLFxuICAgIC8qIGhhbGYtc2lnbmVkLCBwbGFjZWhvbGRlciBzaWduYXR1cmVzICovXG4gICAgWydPUF8wJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsICc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IHBhdHRlcm4yT2YzIH1dLFxuICBdKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtyZWRlZW1TY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICBpZiAoIWlzVHJpcGxlKHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdWJrZXkgY291bnRgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJsaWNLZXlzOiByZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSxcbiAgICBwdWJTY3JpcHQ6IHJlZGVlbVNjcmlwdC5idWZmZXIsXG4gICAgc2lnbmF0dXJlczogbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zWydzaWduYXR1cmVzJ10sXG4gICAgcmVkZWVtU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIHdpdG5lc3NTY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8IHNjcmlwdFR5cGUgPT09ICdwMndzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5jb25zdCBwYXJzZVAyc2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNMZWdhY3kocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIGxlZ2FjeSBpbnB1dGApO1xuICB9XG4gIHJldHVybiBwYXJzZVAybXMocC5zY3JpcHQsICdwMnNoJyk7XG59O1xuXG5jb25zdCBwYXJzZVAyc2hQMndzaDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXM+ID0gKHApID0+IHtcbiAgaWYgKCFpc1dyYXBwZWRTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIHdyYXBwZWQgc2Vnd2l0IGlucHV0YCk7XG4gIH1cbiAgcmV0dXJuIHsgLi4ucGFyc2VQMm1zKHAud2l0bmVzcywgJ3Ayc2hQMndzaCcpLCByZWRlZW1TY3JpcHQ6IHAuc2NyaXB0WzBdIGFzIEJ1ZmZlciB9O1xufTtcblxuY29uc3QgcGFyc2VQMndzaDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXM+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIHJldHVybiBwYXJzZVAybXMocC53aXRuZXNzLCAncDJ3c2gnKTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdEtleVBhdGgyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aD4gPSAocCkgPT4ge1xuICBpZiAoIWlzTmF0aXZlU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBuYXRpdmUgc2Vnd2l0YCk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLndpdG5lc3MsIFsnOnNpZ25hdHVyZSddKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICBjb25zdCBzaWduYXR1cmVzID0gbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBbQnVmZmVyXTtcbiAgaWYgKGlzUGxhY2Vob2xkZXJTaWduYXR1cmUoc2lnbmF0dXJlc1swXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdGFwcm9vdCBrZXkgcGF0aCBzaWduYXR1cmVgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJyxcbiAgICBzaWduYXR1cmVzLFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VUYXByb290U2NyaXB0UGF0aDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIC8vIGFzc3VtZXMgbm8gYW5uZXhcbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLndpdG5lc3MsIFtcbiAgICAnOnNpZ25hdHVyZScsXG4gICAgJzpzaWduYXR1cmUnLFxuICAgIHsgJzpzY3JpcHQnOiBbJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUdWRVJJRlknLCAnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJRyddIH0sXG4gICAgJzpjb250cm9sLWJsb2NrJyxcbiAgXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3QgW2NvbnRyb2xCbG9ja10gPSBtYXRjaFsnOmNvbnRyb2wtYmxvY2snXTtcbiAgY29uc3Qgc2NyaXB0UGF0aExldmVsID0gY2FsY3VsYXRlU2NyaXB0UGF0aExldmVsKGNvbnRyb2xCbG9jayk7XG5cbiAgY29uc3QgbGVhZlZlcnNpb24gPSBnZXRMZWFmVmVyc2lvbihjb250cm9sQmxvY2spO1xuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnLFxuICAgIHB1YlNjcmlwdDogbWF0Y2hbJzpzY3JpcHQnXVswXS5idWZmZXIsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleS14b25seSddIGFzIFtCdWZmZXIsIEJ1ZmZlcl0sXG4gICAgc2lnbmF0dXJlczogbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBbQnVmZmVyLCBCdWZmZXJdLFxuICAgIGNvbnRyb2xCbG9jayxcbiAgICBzY3JpcHRQYXRoTGV2ZWwsXG4gICAgbGVhZlZlcnNpb24sXG4gIH07XG59O1xuXG4vKipcbiAqIFBhcnNlIGEgdHJhbnNhY3Rpb24ncyBzaWduYXR1cmUgc2NyaXB0IHRvIG9idGFpbiBwdWJsaWMga2V5cywgc2lnbmF0dXJlcywgdGhlIHNpZyBzY3JpcHQsXG4gKiBhbmQgb3RoZXIgcHJvcGVydGllcy5cbiAqXG4gKiBPbmx5IHN1cHBvcnRzIHNjcmlwdCB0eXBlcyB1c2VkIGluIEJpdEdvIHRyYW5zYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEByZXR1cm5zIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQoXG4gIGlucHV0OiBUeElucHV0XG4pOiBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwayB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgY29uc3QgZGVjU2NyaXB0ID0gYnNjcmlwdC5kZWNvbXBpbGUoaW5wdXQuc2NyaXB0KTtcbiAgY29uc3QgcGFyc2VycyA9IFtcbiAgICBwYXJzZVAyc2gyT2YzLFxuICAgIHBhcnNlUDJzaFAyd3NoMk9mMyxcbiAgICBwYXJzZVAyd3NoMk9mMyxcbiAgICBwYXJzZVRhcHJvb3RLZXlQYXRoMk9mMyxcbiAgICBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoMk9mMyxcbiAgICBwYXJzZVAyc2hQMnBrLFxuICBdIGFzIGNvbnN0O1xuICBmb3IgKGNvbnN0IGYgb2YgcGFyc2Vycykge1xuICAgIGNvbnN0IHBhcnNlZCA9IGYoe1xuICAgICAgc2NyaXB0OiBkZWNTY3JpcHQ/Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiBkZWNTY3JpcHQsXG4gICAgICB3aXRuZXNzOiBpbnB1dC53aXRuZXNzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBpbnB1dC53aXRuZXNzLFxuICAgIH0pO1xuICAgIGlmIChwYXJzZWQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBwYXJzZSBpbnB1dGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzKGlucHV0OiBUeElucHV0KTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVNpZ25hdHVyZVNjcmlwdChpbnB1dCk7XG5cbiAgaWYgKFxuICAgICFpc1NjcmlwdFR5cGUyT2YzKHJlc3VsdC5zY3JpcHRUeXBlKSAmJlxuICAgIHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiZcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzY3JpcHQgdHlwZWApO1xuICB9XG5cbiAgaWYgKCFyZXN1bHQuc2lnbmF0dXJlcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbWlzc2luZyBzaWduYXR1cmVzYCk7XG4gIH1cbiAgaWYgKFxuICAgIHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiZcbiAgICByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDMgJiZcbiAgICAocmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAyIHx8IHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBwdWJrZXkgY291bnRgKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgYXMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q7XG59XG5cbmNvbnN0IHBhcnNlUDJzaFAycGtQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaz4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChzY3JpcHRUeXBlICE9PSAncDJzaFAycGsnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChbcHViU2NyaXB0XSwgW3sgJzpzY3JpcHQnOiBbJzpwdWJrZXknLCAnT1BfQ0hFQ0tTSUcnXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3QgW3NjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogc2NyaXB0Lm1hdGNoWyc6cHVia2V5J10gYXMgW0J1ZmZlcl0sXG4gICAgcHViU2NyaXB0OiBwdWJTY3JpcHQsXG4gICAgcmVkZWVtU2NyaXB0OiBwdWJTY3JpcHQsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVAybXNQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRQMm1zPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyB8fCBzY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoXG4gICAgW3B1YlNjcmlwdF0sXG4gICAgW3sgJzpzY3JpcHQnOiBbJ09QXzInLCAnOnB1YmtleScsICc6cHVia2V5JywgJzpwdWJrZXknLCAnT1BfMycsICdPUF9DSEVDS01VTFRJU0lHJ10gfV1cbiAgKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtyZWRlZW1TY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICBpZiAoIWlzVHJpcGxlKHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwdWJrZXkgY291bnQnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJsaWNLZXlzOiByZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSxcbiAgICBwdWJTY3JpcHQ6IHJlZGVlbVNjcmlwdC5idWZmZXIsXG4gICAgcmVkZWVtU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIHdpdG5lc3NTY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8IHNjcmlwdFR5cGUgPT09ICdwMndzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VUYXByb290S2V5UGF0aFB1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChbcHViU2NyaXB0XSwgW3sgJzpzY3JpcHQnOiBbJ09QXzEnLCAnOnB1YmtleS14b25seSddIH1dKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtzY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJyxcbiAgICBwdWJsaWNLZXlzOiBzY3JpcHQubWF0Y2hbJzpwdWJrZXkteG9ubHknXSBhcyBbQnVmZmVyXSxcbiAgICBwdWJTY3JpcHQ6IHB1YlNjcmlwdCxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdFNjcmlwdFBhdGhQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aD4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoXG4gICAgW3B1YlNjcmlwdF0sXG4gICAgW3sgJzpzY3JpcHQnOiBbJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUdWRVJJRlknLCAnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJRyddIH1dXG4gICk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHViU2NyaXB0OiBtYXRjaFsnOnNjcmlwdCddWzBdLmJ1ZmZlcixcbiAgICBwdWJsaWNLZXlzOiBtYXRjaFsnOnNjcmlwdCddWzBdLm1hdGNoWyc6cHVia2V5LXhvbmx5J10gYXMgW0J1ZmZlciwgQnVmZmVyXSxcbiAgfTtcbn07XG5cbi8qKlxuICogQHJldHVybiBwdWJTY3JpcHQgKHNjcmlwdFB1YktleS9yZWRlZW1TY3JpcHQvd2l0bmVzc1NjcmlwdCkgaXMgcGFyc2VkLlxuICogUDJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHJlZGVlbVNjcmlwdCksIHJlZGVlbVNjcmlwdCwgcHVibGljIGtleXNcbiAqIFBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogUDJTSC1QVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIHRhcHJvb3RTY3JpcHRQYXRoU3BlbmQgKFAyVFIgYW5kIFAyVFJNVUlTRzIgc2NyaXB0IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleXMuXG4gKiB0YXByb290S2V5UGF0aFNwZW5kIChQMlRSTVVJU0cyIGtleSBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKDM0LWJ5dGUgb3V0cHV0IHNjcmlwdCksIHB1YiBrZXkgKHRhcE91dHB1dEtleSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mM1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3Q7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGUyT2YzXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4gICAgICA/IHBhcnNlVGFwcm9vdEtleVBhdGhQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpXG4gICAgICA6IHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuICAgICAgPyBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBwYXJzZVAybXNQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpO1xuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgfVxuXG4gIGlmIChcbiAgICAocmVzdWx0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDEpIHx8XG4gICAgKHJlc3VsdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAyKSB8fFxuICAgIChpc1NjcmlwdFR5cGUyT2YzKHJlc3VsdC5zY3JpcHRUeXBlKSAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDMpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBwdWJrZXkgY291bnQnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHJldHVybiBwdWJTY3JpcHQgKHNjcmlwdFB1YktleS9yZWRlZW1TY3JpcHQvd2l0bmVzc1NjcmlwdCkgaXMgcGFyc2VkLlxuICogUDJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHJlZGVlbVNjcmlwdCksIHJlZGVlbVNjcmlwdCwgcHVibGljIGtleXNcbiAqIFBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogUDJTSC1QVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIHRhcHJvb3RTY3JpcHRQYXRoU3BlbmQgKFAyVFIgYW5kIFAyVFJNVUlTRzIgc2NyaXB0IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleXMuXG4gKiB0YXByb290S2V5UGF0aFNwZW5kIChQMlRSTVVJU0cyIGtleSBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKDM0LWJ5dGUgb3V0cHV0IHNjcmlwdCksIHB1YiBrZXkgKHRhcE91dHB1dEtleSkuXG4gKiBQMlNILVAyUEsgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0LCBwdWIga2V5LCByZWRlZW1TY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlOiAncDJzaFAycGsnKTogUGFyc2VkUHViU2NyaXB0UDJzaFAycGs7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGVcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290IHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGs7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZVxuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgfCBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwayB7XG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJ1xuICAgICAgPyBwYXJzZVAyc2hQMnBrUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBwYXJzZVB1YlNjcmlwdDJPZjMoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpO1xuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJyAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhaW5BbmRJbmRleEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IHsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9IHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPD0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwYXRoIFwiJHtwYXRofVwiYCk7XG4gIH1cbiAgY29uc3QgY2hhaW4gPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pO1xuICBjb25zdCBpbmRleCA9IE51bWJlcihwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSk7XG4gIGlmIChpc05hTihjaGFpbikgfHwgaXNOYU4oaW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgY2hhaW4gYW5kIGluZGV4IGludG8gbnVtYmVycyBmcm9tIHBhdGggJHtwYXRofWApO1xuICB9XG4gIGlmIChjaGFpbiA8IDAgfHwgaW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjaGFpbiBhbmQgaW5kZXggbXVzdCBiZSBub24tbmVnYXRpdmVgKTtcbiAgfVxuXG4gIHJldHVybiB7IGNoYWluLCBpbmRleCB9O1xufVxuIl19
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9wYXJzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esd0RBS0M7QUFLRCxnREFHQztBQUtELDREQVdDO0FBS0Qsd0NBS0M7QUFnYUQsb0RBdUJDO0FBRUQsNERBdUJDO0FBdUhELGdEQXdCQztBQTRCRCx3Q0FrQkM7QUEzckJELDRCQUE0QjtBQUM1Qix1Q0FBdUM7QUFDdkMsaURBQTJEO0FBRTNELG1DQUFtQztBQUNuQyxtREFBbUQ7QUFFbkQsU0FBZ0Isc0JBQXNCLENBQUMsQ0FBa0I7SUFDdkQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFlBQW9CO0lBQ3JELHNGQUFzRjtJQUN0RixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLFlBQVksQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RHLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFlBQW9CO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLEVBQUUs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QUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUN2RSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBNEJELFNBQWdCLGNBQWMsQ0FDNUIsY0FBOEIsRUFDOUIsVUFBNEI7SUFFNUIsTUFBTSxNQUFNLEdBQ1YsVUFBVSxLQUFLLFVBQVU7UUFDdkIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUM7UUFDcEQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUVyRCxJQUFJLE1BQU0sWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2RSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tcmVkZWNsYXJlOiAwICovXG5pbXBvcnQgKiBhcyBvcGNvZGVzIGZyb20gJ2JpdGNvaW4tb3BzJztcbmltcG9ydCB7IHNjcmlwdCBhcyBic2NyaXB0LCBUeElucHV0IH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5cbmltcG9ydCB7IGlzVHJpcGxlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBpc1NjcmlwdFR5cGUyT2YzIH0gZnJvbSAnLi9vdXRwdXRTY3JpcHRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhY2Vob2xkZXJTaWduYXR1cmUodjogbnVtYmVyIHwgQnVmZmVyKTogYm9vbGVhbiB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICByZXR1cm4gdi5sZW5ndGggPT09IDA7XG4gIH1cbiAgcmV0dXJuIHYgPT09IDA7XG59XG5cbi8qKlxuICogQHJldHVybiB0cnVlIGlmZiBQMlRSIHNjcmlwdCBwYXRoJ3MgY29udHJvbCBibG9jayBtYXRjaGVzIEJpdEdvJ3MgbmVlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZENvbnRyb2xCb2NrKGNvbnRyb2xCbG9jazogQnVmZmVyKTogYm9vbGVhbiB7XG4gIC8vIFRoZSBsYXN0IHN0YWNrIGVsZW1lbnQgaXMgY2FsbGVkIHRoZSBjb250cm9sIGJsb2NrIGMsIGFuZCBtdXN0IGhhdmUgbGVuZ3RoIDMzICsgMzJtXG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSAmJiAzMyA8PSBjb250cm9sQmxvY2subGVuZ3RoICYmIGNvbnRyb2xCbG9jay5sZW5ndGggJSAzMiA9PT0gMTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHNjcmlwdCBwYXRoIGxldmVsIGZvciBQMlRSIGNvbnRyb2wgYmxvY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcmlwdFBhdGhMZXZlbChjb250cm9sQmxvY2s6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udHJvbCBibG9jayB0eXBlLicpO1xuICB9XG4gIGlmIChjb250cm9sQmxvY2subGVuZ3RoID09PSA2NSkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChjb250cm9sQmxvY2subGVuZ3RoID09PSA5Nykge1xuICAgIHJldHVybiAyO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBjb250cm9sIGJsb2NrIGxlbmd0aC4nKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIGxlYWYgdmVyc2lvbiBmb3IgUDJUUiBjb250cm9sIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVhZlZlcnNpb24oY29udHJvbEJsb2NrOiBCdWZmZXIpOiBudW1iZXIge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykgJiYgY29udHJvbEJsb2NrLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gY29udHJvbEJsb2NrWzBdICYgMHhmZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgbGVhZlZlcnNpb24uJyk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNjcmlwdFR5cGUyT2YzID1cbiAgfCAncDJzaCdcbiAgfCAncDJzaFAyd3NoJ1xuICB8ICdwMndzaCdcbiAgfCAndGFwcm9vdEtleVBhdGhTcGVuZCcgLy8gb25seSBpbXBsZW1lbnRlZCBmb3IgcDJ0ck11c2lnMlxuICB8ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzsgLy8gY2FuIGJlIGZvciBlaXRoZXIgcDJ0ciBvciBwMnRyTXVzaWcyIG91dHB1dCBzY3JpcHRcblxuZXhwb3J0IHR5cGUgUGFyc2VkU2NyaXB0VHlwZSA9IFBhcnNlZFNjcmlwdFR5cGUyT2YzIHwgJ3Ayc2hQMnBrJztcblxuZXhwb3J0IHR5cGUgUGFyc2VkUHViU2NyaXB0ID0ge1xuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VkU2lnbmF0dXJlU2NyaXB0ID0ge1xuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwayBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoUDJwayc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXJdO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJztcbiAgLy8geC1vbmx5IHRhcE91dHB1dEtleVxuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGggZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRQdWJTY3JpcHRUYXByb290ID0gUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGggfCBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRQMm1zIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXIsIEJ1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgd2l0bmVzc1NjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJztcbiAgcHVibGljS2V5czogW0J1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXIsIEJ1ZmZlcl07XG4gIHNpZ25hdHVyZXM6XG4gICAgfCBbQnVmZmVyLCBCdWZmZXJdIC8vIGZ1bGx5LXNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBzaWduYXR1cmVzXG4gICAgLyogUGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgICAgIEZvciBwMnNoLCB0aGUgcGxhY2Vob2xkZXIgaXMgT1BfMCAobnVtYmVyIDApICovXG4gICAgfCBbQnVmZmVyIHwgMCwgQnVmZmVyIHwgMCwgQnVmZmVyIHwgMF07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgd2l0bmVzc1NjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEtleXBhdGggc3BlbmRzIG9ubHkgaGF2ZSBhIHNpbmdsZSBzaWduYXR1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJztcbiAgc2lnbmF0dXJlczogW0J1ZmZlcl07XG59XG5cbi8qKlxuICogVGFwcm9vdCBTY3JpcHRwYXRoIHNwZW5kcyBhcmUgbW9yZSBzaW1pbGFyIHRvIHJlZ3VsYXIgcDJtcyBzcGVuZHMgYW5kIGhhdmUgdHdvIHB1YmxpYyBrZXlzIGFuZFxuICogdHdvIHNpZ25hdHVyZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290U2NyaXB0UGF0aCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyXTtcbiAgc2lnbmF0dXJlczogW0J1ZmZlciwgQnVmZmVyXTtcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIGxlYWZWZXJzaW9uOiBudW1iZXI7XG4gIC8qKiBJbmRpY2F0ZXMgdGhlIGxldmVsIGluc2lkZSB0aGUgdGFwdHJlZS4gKi9cbiAgc2NyaXB0UGF0aExldmVsOiBudW1iZXI7XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290ID0gUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdEtleVBhdGggfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcblxudHlwZSBEZWNvbXBpbGVkU2NyaXB0ID0gQXJyYXk8QnVmZmVyIHwgbnVtYmVyPjtcblxuLyoqXG4gKiBTdGF0aWMgc2NyaXB0IGVsZW1lbnRzXG4gKi9cbnR5cGUgU2NyaXB0UGF0dGVybkNvbnN0YW50ID1cbiAgfCAnT1BfMCdcbiAgfCAnT1BfMSdcbiAgfCAnT1BfMidcbiAgfCAnT1BfMydcbiAgfCAnT1BfQ0hFQ0tNVUxUSVNJRydcbiAgfCAnT1BfQ0hFQ0tTSUcnXG4gIHwgJ09QX0NIRUNLU0lHVkVSSUZZJztcblxuLyoqXG4gKiBTY3JpcHQgZWxlbWVudHMgdGhhdCBjYW4gYmUgY2FwdHVyZWRcbiAqL1xudHlwZSBTY3JpcHRQYXR0ZXJuQ2FwdHVyZSA9XG4gIHwgJzpwdWJrZXknXG4gIHwgJzpwdWJrZXkteG9ubHknXG4gIHwgJzpzaWduYXR1cmUnXG4gIHwgJzpjb250cm9sLWJsb2NrJ1xuICB8IHsgJzpzY3JpcHQnOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdIH07XG5cbnR5cGUgU2NyaXB0UGF0dGVybkVsZW1lbnQgPSBTY3JpcHRQYXR0ZXJuQ29uc3RhbnQgfCBTY3JpcHRQYXR0ZXJuQ2FwdHVyZTtcblxuLyoqXG4gKiBSZXN1bHQgZm9yIGEgc3VjY2Vzc2Z1bCBzY3JpcHQgbWF0Y2hcbiAqL1xudHlwZSBNYXRjaFJlc3VsdCA9IHtcbiAgJzpwdWJrZXknOiBCdWZmZXJbXTtcbiAgJzpwdWJrZXkteG9ubHknOiBCdWZmZXJbXTtcbiAgJzpjb250cm9sLWJsb2NrJzogQnVmZmVyW107XG4gICc6c2lnbmF0dXJlJzogKEJ1ZmZlciB8IDApW107XG4gICc6c2NyaXB0JzogeyBidWZmZXI6IEJ1ZmZlcjsgbWF0Y2g6IE1hdGNoUmVzdWx0IH1bXTtcbn07XG5cbmZ1bmN0aW9uIGVtcHR5TWF0Y2hSZXN1bHQoKTogTWF0Y2hSZXN1bHQge1xuICByZXR1cm4ge1xuICAgICc6cHVia2V5JzogW10sXG4gICAgJzpwdWJrZXkteG9ubHknOiBbXSxcbiAgICAnOmNvbnRyb2wtYmxvY2snOiBbXSxcbiAgICAnOnNpZ25hdHVyZSc6IFtdLFxuICAgICc6c2NyaXB0JzogW10sXG4gIH07XG59XG5cbmNsYXNzIE1hdGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8vIHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgdG8gcHJvaGliaXQgYHJldHVybiBuZXcgRXJyb3IoKWAgd2hlbiB0aGUgcmV0dXJuIHR5cGUgZGVtYW5kcyBgTWF0Y2hFcnJvcmBcbiAgX190eXBlID0gJ01hdGNoRXJyb3InO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JQYXR0ZXJuRWxlbWVudChwOiBTY3JpcHRQYXR0ZXJuRWxlbWVudCk6IE1hdGNoRXJyb3Ige1xuICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcgJiYgJzpzY3JpcHQnIGluIHApIHtcbiAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgbWF0Y2hpbmcgbmVzdGVkIHNjcmlwdGApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGVycm9yIG1hdGNoaW5nICR7cH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEBwYXJhbSBwYXR0ZXJuXG4gKiBAcmV0dXJuIE1hdGNoUmVzdWx0IGlmIHNjcmlwdCBtYXRjaGVzIHBhdHRlcm4uIFRoZSByZXN1bHQgd2lsbCBjb250YWluIHRoZSBtYXRjaGVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hTY3JpcHQoc2NyaXB0OiBEZWNvbXBpbGVkU2NyaXB0LCBwYXR0ZXJuOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdKTogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yIHtcbiAgLyoqXG4gICAqIE1hdGNoIGEgc2luZ2xlIHNjcmlwdCBlbGVtZW50IHdpdGggYSBTY3JpcHRQYXR0ZXJuRWxlbWVudFxuICAgKi9cbiAgZnVuY3Rpb24gbWF0Y2hFbGVtZW50KGU6IEJ1ZmZlciB8IG51bWJlciwgcDogU2NyaXB0UGF0dGVybkVsZW1lbnQpOiBNYXRjaFJlc3VsdCB8IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocCkge1xuICAgICAgY2FzZSAnT1BfMCc6XG4gICAgICAgIHJldHVybiBlID09PSBvcGNvZGVzLk9QXzAgfHwgKEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBlLmxlbmd0aCA9PT0gMCk7XG4gICAgICBjYXNlICdPUF8xJzpcbiAgICAgIGNhc2UgJ09QXzInOlxuICAgICAgY2FzZSAnT1BfMyc6XG4gICAgICBjYXNlICdPUF9DSEVDS01VTFRJU0lHJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLU0lHJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLU0lHVkVSSUZZJzpcbiAgICAgICAgcmV0dXJuIGUgPT09IG9wY29kZXNbcF07XG4gICAgICBjYXNlICc6cHVia2V5JzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiAoZS5sZW5ndGggPT09IDMzIHx8IGUubGVuZ3RoID09PSA2NSk7XG4gICAgICBjYXNlICc6cHVia2V5LXhvbmx5JzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBlLmxlbmd0aCA9PT0gMzI7XG4gICAgICBjYXNlICc6c2lnbmF0dXJlJzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSB8fCBpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKGUpO1xuICAgICAgY2FzZSAnOmNvbnRyb2wtYmxvY2snOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIGlzVmFsaWRDb250cm9sQm9jayhlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBwYXR0ZXJuIGVsZW1lbnQgJHtwfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzY3JpcHQubGVuZ3RoICE9PSBwYXR0ZXJuLmxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgbGVuZ3RoIG1pc21hdGNoYCk7XG4gIH1cblxuICAvLyBHbyBvdmVyIGVhY2ggcGF0dGVybiBlbGVtZW50LlxuICAvLyBDb2xsZWN0IGNhcHR1cmVzIGludG8gYSByZXN1bHQgb2JqZWN0LlxuICByZXR1cm4gcGF0dGVybi5yZWR1Y2UoKG9iajogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yLCBwLCBpKTogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yID0+IHtcbiAgICAvLyBpZiB3ZSBoYWQgYSBwcmV2aW91cyBtaXNtYXRjaCwgc2hvcnQtY2lyY3VpdFxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNvbnN0IGUgPSBzY3JpcHRbaV07XG5cbiAgICAvLyBmb3IgJzpzY3JpcHQnIHBhdHRlcm4gZWxlbWVudHMsIGRlY29tcGlsZSBzY3JpcHQgZWxlbWVudCBhbmQgcmVjdXJzZVxuICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcgJiYgJzpzY3JpcHQnIGluIHApIHtcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgYnVmZmVyIGZvciA6c2NyaXB0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZWMgPSBic2NyaXB0LmRlY29tcGlsZShlKTtcbiAgICAgIGlmICghZGVjKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgZGVjb21waWxpbmcgbmVzdGVkIHNjcmlwdGApO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChkZWMsIHBbJzpzY3JpcHQnXSk7XG4gICAgICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH1cbiAgICAgIG9ialsnOnNjcmlwdCddLnB1c2goe1xuICAgICAgICBidWZmZXI6IGUsXG4gICAgICAgIG1hdGNoLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hFbGVtZW50KGUsIHApO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiBNYXRjaEVycm9yLmZvclBhdHRlcm5FbGVtZW50KHApO1xuICAgIH1cblxuICAgIC8vIGlmIHBhdHRlcm4gZWxlbWVudCBpcyBhIGNhcHR1cmUsIGFkZCBpdCB0byB0aGUgcmVzdWx0IG9ialxuICAgIGlmIChwID09PSAnOnNpZ25hdHVyZScgJiYgZSA9PT0gMCkge1xuICAgICAgb2JqW3BdLnB1c2goZSk7XG4gICAgfSBlbHNlIGlmIChwIGluIG9iaikge1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGNhcHR1cmUgdmFsdWVgKTtcbiAgICAgIH1cbiAgICAgIG9ialtwXS5wdXNoKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH0sIGVtcHR5TWF0Y2hSZXN1bHQoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIHBhdHRlcm5zXG4gKiBAcmV0dXJuIGZpcnN0IG1hdGNoXG4gKi9cbmZ1bmN0aW9uIG1hdGNoU2NyaXB0U29tZShzY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsIHBhdHRlcm5zOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdW10pOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3Ige1xuICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybnMpIHtcbiAgICBjb25zdCBtID0gbWF0Y2hTY3JpcHQoc2NyaXB0LCBwKTtcbiAgICBpZiAobSBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4gbTtcbiAgfVxuICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYG5vIG1hdGNoIGZvciBzY3JpcHRgKTtcbn1cblxudHlwZSBJbnB1dFNjcmlwdHM8VFNjcmlwdCwgVFdpdG5lc3M+ID0ge1xuICBzY3JpcHQ6IFRTY3JpcHQ7XG4gIHdpdG5lc3M6IFRXaXRuZXNzO1xufTtcblxudHlwZSBJbnB1dFNjcmlwdHNMZWdhY3kgPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCwgbnVsbD47XG50eXBlIElucHV0U2NyaXB0c1dyYXBwZWRTZWd3aXQgPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCwgQnVmZmVyW10+O1xudHlwZSBJbnB1dFNjcmlwdHNOYXRpdmVTZWd3aXQgPSBJbnB1dFNjcmlwdHM8bnVsbCwgQnVmZmVyW10+O1xuXG50eXBlIElucHV0U2NyaXB0c1Vua25vd24gPSBJbnB1dFNjcmlwdHM8RGVjb21waWxlZFNjcmlwdCB8IG51bGwsIEJ1ZmZlcltdIHwgbnVsbD47XG5cbnR5cGUgSW5wdXRQYXJzZXI8VCBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q+ID0gKFxuICBwOiBJbnB1dFNjcmlwdHNVbmtub3duXG4pID0+IFQgfCBNYXRjaEVycm9yO1xuXG5leHBvcnQgdHlwZSBJbnB1dFB1YlNjcmlwdCA9IEJ1ZmZlcjtcblxudHlwZSBQdWJTY3JpcHRQYXJzZXI8VCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgfCBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGs+ID0gKFxuICBwOiBJbnB1dFB1YlNjcmlwdCxcbiAgdDogUGFyc2VkU2NyaXB0VHlwZVxuKSA9PiBUIHwgTWF0Y2hFcnJvcjtcblxuZnVuY3Rpb24gaXNMZWdhY3kocDogSW5wdXRTY3JpcHRzVW5rbm93bik6IHAgaXMgSW5wdXRTY3JpcHRzTGVnYWN5IHtcbiAgcmV0dXJuIEJvb2xlYW4ocC5zY3JpcHQgJiYgIXAud2l0bmVzcyk7XG59XG5cbmZ1bmN0aW9uIGlzV3JhcHBlZFNlZ3dpdChwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNXcmFwcGVkU2Vnd2l0IHtcbiAgcmV0dXJuIEJvb2xlYW4ocC5zY3JpcHQgJiYgcC53aXRuZXNzKTtcbn1cblxuZnVuY3Rpb24gaXNOYXRpdmVTZWd3aXQocDogSW5wdXRTY3JpcHRzVW5rbm93bik6IHAgaXMgSW5wdXRTY3JpcHRzTmF0aXZlU2Vnd2l0IHtcbiAgcmV0dXJuIEJvb2xlYW4oIXAuc2NyaXB0ICYmIHAud2l0bmVzcyk7XG59XG5cbmNvbnN0IHBhcnNlUDJzaFAycGs6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrPiA9IChwKSA9PiB7XG4gIGlmICghaXNMZWdhY3kocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIGxlZ2FjeSBpbnB1dGApO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC5zY3JpcHQsIFsnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBbJzpwdWJrZXknLCAnT1BfQ0hFQ0tTSUcnXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAncDJzaFAycGsnLFxuICAgIHB1YmxpY0tleXM6IG1hdGNoWyc6c2NyaXB0J11bMF0ubWF0Y2hbJzpwdWJrZXknXSBhcyBbQnVmZmVyXSxcbiAgICBzaWduYXR1cmVzOiBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFtCdWZmZXJdLFxuICB9O1xufTtcblxuZnVuY3Rpb24gcGFyc2VQMm1zKFxuICBkZWNTY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IE1hdGNoRXJyb3Ige1xuICBjb25zdCBwYXR0ZXJuMk9mMzogU2NyaXB0UGF0dGVybkVsZW1lbnRbXSA9IFsnT1BfMicsICc6cHVia2V5JywgJzpwdWJrZXknLCAnOnB1YmtleScsICdPUF8zJywgJ09QX0NIRUNLTVVMVElTSUcnXTtcblxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0U29tZShkZWNTY3JpcHQsIFtcbiAgICAvKiBmdWxsLXNpZ25lZCwgbm8gcGxhY2Vob2xkZXIgc2lnbmF0dXJlICovXG4gICAgWydPUF8wJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBwYXR0ZXJuMk9mMyB9XSxcbiAgICAvKiBoYWxmLXNpZ25lZCwgcGxhY2Vob2xkZXIgc2lnbmF0dXJlcyAqL1xuICAgIFsnT1BfMCcsICc6c2lnbmF0dXJlJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsIHsgJzpzY3JpcHQnOiBwYXR0ZXJuMk9mMyB9XSxcbiAgXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbcmVkZWVtU2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgaWYgKCFpc1RyaXBsZShyZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgcHVia2V5IGNvdW50YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogcmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10sXG4gICAgcHViU2NyaXB0OiByZWRlZW1TY3JpcHQuYnVmZmVyLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtc1snc2lnbmF0dXJlcyddLFxuICAgIHJlZGVlbVNjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICB3aXRuZXNzU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fCBzY3JpcHRUeXBlID09PSAncDJ3c2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuY29uc3QgcGFyc2VQMnNoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcz4gPSAocCkgPT4ge1xuICBpZiAoIWlzTGVnYWN5KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBsZWdhY3kgaW5wdXRgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VQMm1zKHAuc2NyaXB0LCAncDJzaCcpO1xufTtcblxuY29uc3QgcGFyc2VQMnNoUDJ3c2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNXcmFwcGVkU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCB3cmFwcGVkIHNlZ3dpdCBpbnB1dGApO1xuICB9XG4gIHJldHVybiB7IC4uLnBhcnNlUDJtcyhwLndpdG5lc3MsICdwMnNoUDJ3c2gnKSwgcmVkZWVtU2NyaXB0OiBwLnNjcmlwdFswXSBhcyBCdWZmZXIgfTtcbn07XG5cbmNvbnN0IHBhcnNlUDJ3c2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNOYXRpdmVTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIG5hdGl2ZSBzZWd3aXRgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VQMm1zKHAud2l0bmVzcywgJ3Ayd3NoJyk7XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RLZXlQYXRoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdEtleVBhdGg+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC53aXRuZXNzLCBbJzpzaWduYXR1cmUnXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3Qgc2lnbmF0dXJlcyA9IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlcl07XG4gIGlmIChpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKHNpZ25hdHVyZXNbMF0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRhcHJvb3Qga2V5IHBhdGggc2lnbmF0dXJlYCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCcsXG4gICAgc2lnbmF0dXJlcyxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdFNjcmlwdFBhdGgyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290PiA9IChwKSA9PiB7XG4gIGlmICghaXNOYXRpdmVTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIG5hdGl2ZSBzZWd3aXRgKTtcbiAgfVxuICAvLyBhc3N1bWVzIG5vIGFubmV4XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQocC53aXRuZXNzLCBbXG4gICAgJzpzaWduYXR1cmUnLFxuICAgICc6c2lnbmF0dXJlJyxcbiAgICB7ICc6c2NyaXB0JzogWyc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHVkVSSUZZJywgJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUcnXSB9LFxuICAgICc6Y29udHJvbC1ibG9jaycsXG4gIF0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IFtjb250cm9sQmxvY2tdID0gbWF0Y2hbJzpjb250cm9sLWJsb2NrJ107XG4gIGNvbnN0IHNjcmlwdFBhdGhMZXZlbCA9IGNhbGN1bGF0ZVNjcmlwdFBhdGhMZXZlbChjb250cm9sQmxvY2spO1xuXG4gIGNvbnN0IGxlYWZWZXJzaW9uID0gZ2V0TGVhZlZlcnNpb24oY29udHJvbEJsb2NrKTtcblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyxcbiAgICBwdWJTY3JpcHQ6IG1hdGNoWyc6c2NyaXB0J11bMF0uYnVmZmVyLFxuICAgIHB1YmxpY0tleXM6IG1hdGNoWyc6c2NyaXB0J11bMF0ubWF0Y2hbJzpwdWJrZXkteG9ubHknXSBhcyBbQnVmZmVyLCBCdWZmZXJdLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlciwgQnVmZmVyXSxcbiAgICBjb250cm9sQmxvY2ssXG4gICAgc2NyaXB0UGF0aExldmVsLFxuICAgIGxlYWZWZXJzaW9uLFxuICB9O1xufTtcblxuLyoqXG4gKiBQYXJzZSBhIHRyYW5zYWN0aW9uJ3Mgc2lnbmF0dXJlIHNjcmlwdCB0byBvYnRhaW4gcHVibGljIGtleXMsIHNpZ25hdHVyZXMsIHRoZSBzaWcgc2NyaXB0LFxuICogYW5kIG90aGVyIHByb3BlcnRpZXMuXG4gKlxuICogT25seSBzdXBwb3J0cyBzY3JpcHQgdHlwZXMgdXNlZCBpbiBCaXRHbyB0cmFuc2FjdGlvbnMuXG4gKlxuICogQHBhcmFtIGlucHV0XG4gKiBAcmV0dXJucyBQYXJzZWRTaWduYXR1cmVTY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2NyaXB0KFxuICBpbnB1dDogVHhJbnB1dFxuKTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGsgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IGRlY1NjcmlwdCA9IGJzY3JpcHQuZGVjb21waWxlKGlucHV0LnNjcmlwdCk7XG4gIGNvbnN0IHBhcnNlcnMgPSBbXG4gICAgcGFyc2VQMnNoMk9mMyxcbiAgICBwYXJzZVAyc2hQMndzaDJPZjMsXG4gICAgcGFyc2VQMndzaDJPZjMsXG4gICAgcGFyc2VUYXByb290S2V5UGF0aDJPZjMsXG4gICAgcGFyc2VUYXByb290U2NyaXB0UGF0aDJPZjMsXG4gICAgcGFyc2VQMnNoUDJwayxcbiAgXSBhcyBjb25zdDtcbiAgZm9yIChjb25zdCBmIG9mIHBhcnNlcnMpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBmKHtcbiAgICAgIHNjcmlwdDogZGVjU2NyaXB0Py5sZW5ndGggPT09IDAgPyBudWxsIDogZGVjU2NyaXB0LFxuICAgICAgd2l0bmVzczogaW5wdXQud2l0bmVzcy5sZW5ndGggPT09IDAgPyBudWxsIDogaW5wdXQud2l0bmVzcyxcbiAgICB9KTtcbiAgICBpZiAocGFyc2VkIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgcGFyc2UgaW5wdXRgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyhpbnB1dDogVHhJbnB1dCk6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VTaWduYXR1cmVTY3JpcHQoaW5wdXQpO1xuXG4gIGlmIChcbiAgICAhaXNTY3JpcHRUeXBlMk9mMyhyZXN1bHQuc2NyaXB0VHlwZSkgJiZcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmXG4gICAgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc2NyaXB0IHR5cGVgKTtcbiAgfVxuXG4gIGlmICghcmVzdWx0LnNpZ25hdHVyZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc2lnbmF0dXJlc2ApO1xuICB9XG4gIGlmIChcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmXG4gICAgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAzICYmXG4gICAgKHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMiB8fCByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgcHVia2V5IGNvdW50YCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290O1xufVxuXG5jb25zdCBwYXJzZVAyc2hQMnBrUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0UDJzaFAycGs+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoc2NyaXB0VHlwZSAhPT0gJ3Ayc2hQMnBrJykge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoW3B1YlNjcmlwdF0sIFt7ICc6c2NyaXB0JzogWyc6cHVia2V5JywgJ09QX0NIRUNLU0lHJ10gfV0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IFtzY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YmxpY0tleXM6IHNjcmlwdC5tYXRjaFsnOnB1YmtleSddIGFzIFtCdWZmZXJdLFxuICAgIHB1YlNjcmlwdDogcHViU2NyaXB0LFxuICAgIHJlZGVlbVNjcmlwdDogcHViU2NyaXB0LFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VQMm1zUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0UDJtcz4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIHx8IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFxuICAgIFtwdWJTY3JpcHRdLFxuICAgIFt7ICc6c2NyaXB0JzogWydPUF8yJywgJzpwdWJrZXknLCAnOnB1YmtleScsICc6cHVia2V5JywgJ09QXzMnLCAnT1BfQ0hFQ0tNVUxUSVNJRyddIH1dXG4gICk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbcmVkZWVtU2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgaWYgKCFpc1RyaXBsZShyZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogcmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10sXG4gICAgcHViU2NyaXB0OiByZWRlZW1TY3JpcHQuYnVmZmVyLFxuICAgIHJlZGVlbVNjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICB3aXRuZXNzU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fCBzY3JpcHRUeXBlID09PSAncDJ3c2gnID8gcmVkZWVtU2NyaXB0LmJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdEtleVBhdGhQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aD4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoW3B1YlNjcmlwdF0sIFt7ICc6c2NyaXB0JzogWydPUF8xJywgJzpwdWJrZXkteG9ubHknXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25zdCBbc2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCcsXG4gICAgcHVibGljS2V5czogc2NyaXB0Lm1hdGNoWyc6cHVia2V5LXhvbmx5J10gYXMgW0J1ZmZlcl0sXG4gICAgcHViU2NyaXB0OiBwdWJTY3JpcHQsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoXG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFxuICAgIFtwdWJTY3JpcHRdLFxuICAgIFt7ICc6c2NyaXB0JzogWyc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHVkVSSUZZJywgJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUcnXSB9XVxuICApO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YlNjcmlwdDogbWF0Y2hbJzpzY3JpcHQnXVswXS5idWZmZXIsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleS14b25seSddIGFzIFtCdWZmZXIsIEJ1ZmZlcl0sXG4gIH07XG59O1xuXG4vKipcbiAqIEByZXR1cm4gcHViU2NyaXB0IChzY3JpcHRQdWJLZXkvcmVkZWVtU2NyaXB0L3dpdG5lc3NTY3JpcHQpIGlzIHBhcnNlZC5cbiAqIFAyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0IChyZWRlZW1TY3JpcHQpLCByZWRlZW1TY3JpcHQsIHB1YmxpYyBrZXlzXG4gKiBQVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIFAyU0gtUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiB0YXByb290U2NyaXB0UGF0aFNwZW5kIChQMlRSIGFuZCBQMlRSTVVJU0cyIHNjcmlwdCBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQsIHB1YiBrZXlzLlxuICogdGFwcm9vdEtleVBhdGhTcGVuZCAoUDJUUk1VSVNHMiBrZXkgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICgzNC1ieXRlIG91dHB1dCBzY3JpcHQpLCBwdWIga2V5ICh0YXBPdXRwdXRLZXkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTJPZjNcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290O1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mM1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCByZXN1bHQgPVxuICAgIHNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuICAgICAgPyBwYXJzZVRhcHJvb3RLZXlQYXRoUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBzY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbiAgICAgID8gcGFyc2VUYXByb290U2NyaXB0UGF0aFB1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSlcbiAgICAgIDogcGFyc2VQMm1zUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKTtcblxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XG4gIH1cblxuICBpZiAoXG4gICAgKHJlc3VsdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAxKSB8fFxuICAgIChyZXN1bHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMikgfHxcbiAgICAoaXNTY3JpcHRUeXBlMk9mMyhyZXN1bHQuc2NyaXB0VHlwZSkgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAzKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEByZXR1cm4gcHViU2NyaXB0IChzY3JpcHRQdWJLZXkvcmVkZWVtU2NyaXB0L3dpdG5lc3NTY3JpcHQpIGlzIHBhcnNlZC5cbiAqIFAyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0IChyZWRlZW1TY3JpcHQpLCByZWRlZW1TY3JpcHQsIHB1YmxpYyBrZXlzXG4gKiBQVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIFAyU0gtUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiB0YXByb290U2NyaXB0UGF0aFNwZW5kIChQMlRSIGFuZCBQMlRSTVVJU0cyIHNjcmlwdCBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQsIHB1YiBrZXlzLlxuICogdGFwcm9vdEtleVBhdGhTcGVuZCAoUDJUUk1VSVNHMiBrZXkgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICgzNC1ieXRlIG91dHB1dCBzY3JpcHQpLCBwdWIga2V5ICh0YXBPdXRwdXRLZXkpLlxuICogUDJTSC1QMlBLID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleSwgcmVkZWVtU2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJyk6IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJ1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB8IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGVcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290IHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGsge1xuICBjb25zdCByZXN1bHQgPVxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaydcbiAgICAgID8gcGFyc2VQMnNoUDJwa1B1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSlcbiAgICAgIDogcGFyc2VQdWJTY3JpcHQyT2YzKGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKTtcblxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XG4gIH1cblxuICBpZiAocmVzdWx0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHB1YmtleSBjb3VudCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ import { ChainCode } from './chains';
2
+ export type ScriptId = {
3
+ chain: ChainCode;
4
+ index: number;
5
+ };
6
+ /**
7
+ * Get the chain and index from a bip32 path.
8
+ *
9
+ * @param path
10
+ */
11
+ export declare function getScriptIdFromPath(path: string): ScriptId;
12
+ /** @deprecated use getScriptId */
13
+ export declare const getChainAndIndexFromPath: typeof getScriptIdFromPath;
14
+ //# sourceMappingURL=ScriptId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptId.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/ScriptId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,UAAU,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAe1D;AAED,kCAAkC;AAClC,eAAO,MAAM,wBAAwB,4BAAsB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getChainAndIndexFromPath = void 0;
4
+ exports.getScriptIdFromPath = getScriptIdFromPath;
5
+ const chains_1 = require("./chains");
6
+ /**
7
+ * Get the chain and index from a bip32 path.
8
+ *
9
+ * @param path
10
+ */
11
+ function getScriptIdFromPath(path) {
12
+ const parts = path.split('/');
13
+ if (parts.length <= 2) {
14
+ throw new Error(`invalid path "${path}"`);
15
+ }
16
+ const chain = Number(parts[parts.length - 2]);
17
+ const index = Number(parts[parts.length - 1]);
18
+ if (!(0, chains_1.isChainCode)(chain)) {
19
+ throw new Error(`invalid chain "${chain}"`);
20
+ }
21
+ if (!Number.isInteger(index) || index < 0) {
22
+ throw new Error(`invalid index "${index}"`);
23
+ }
24
+ return { chain, index };
25
+ }
26
+ /** @deprecated use getScriptId */
27
+ exports.getChainAndIndexFromPath = getScriptIdFromPath;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NyaXB0SWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L1NjcmlwdElkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVlBLGtEQWVDO0FBM0JELHFDQUFrRDtBQU9sRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsSUFBQSxvQkFBVyxFQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVELGtDQUFrQztBQUNyQixRQUFBLHdCQUF3QixHQUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhaW5Db2RlLCBpc0NoYWluQ29kZSB9IGZyb20gJy4vY2hhaW5zJztcblxuZXhwb3J0IHR5cGUgU2NyaXB0SWQgPSB7XG4gIGNoYWluOiBDaGFpbkNvZGU7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY2hhaW4gYW5kIGluZGV4IGZyb20gYSBiaXAzMiBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JpcHRJZEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFNjcmlwdElkIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPD0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwYXRoIFwiJHtwYXRofVwiYCk7XG4gIH1cbiAgY29uc3QgY2hhaW4gPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pO1xuICBjb25zdCBpbmRleCA9IE51bWJlcihwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSk7XG4gIGlmICghaXNDaGFpbkNvZGUoY2hhaW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGNoYWluIFwiJHtjaGFpbn1cImApO1xuICB9XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgfHwgaW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGluZGV4IFwiJHtpbmRleH1cImApO1xuICB9XG5cbiAgcmV0dXJuIHsgY2hhaW4sIGluZGV4IH07XG59XG5cbi8qKiBAZGVwcmVjYXRlZCB1c2UgZ2V0U2NyaXB0SWQgKi9cbmV4cG9ydCBjb25zdCBnZXRDaGFpbkFuZEluZGV4RnJvbVBhdGggPSBnZXRTY3JpcHRJZEZyb21QYXRoO1xuIl19
@@ -1,20 +1,43 @@
1
+ import { Payment } from 'bitcoinjs-lib';
2
+ import { PsbtOutput, PsbtOutputUpdate } from 'bip174/src/lib/interfaces';
1
3
  import { UtxoPsbt } from '../UtxoPsbt';
2
- import { RootWalletKeys } from './WalletKeys';
4
+ import { RootWalletKeys, DerivedWalletKeys } from './WalletKeys';
3
5
  import { ChainCode } from './chains';
6
+ import { ScriptId } from './ScriptId';
4
7
  /**
5
- * Add a verifiable wallet output to the PSBT. The output and all data
6
- * needed to verify it from public keys only are added to the PSBT.
7
- * Typically these are change outputs.
8
+ * Get the BIP32 derivation data for a PSBT output.
8
9
  *
9
- * @param psbt the PSBT to add change output to
10
+ * @param rootWalletKeys root wallet keys used for master fingerprints
11
+ * @param walletKeys derived wallet keys for the specific chain and index
12
+ * @param scriptType the script type to determine whether to use regular or taproot derivation
13
+ * @param payment optional payment object for taproot scripts to calculate leaf hashes
14
+ * @returns Object containing BIP32 derivation data
15
+ */
16
+ export declare function getPsbtBip32DerivationOutputUpdate(rootWalletKeys: RootWalletKeys, walletKeys: DerivedWalletKeys, scriptType: string, payment?: Payment): PsbtOutputUpdate;
17
+ /**
18
+ * Get the PSBT output update object from a PSBT output and output script.
19
+ *
20
+ * @param output the PSBT output to get update for
21
+ * @param outputScript the output script
22
+ * @param rootWalletKeys keys that will be able to spend the output
23
+ * @param chain chain code to use for deriving scripts (and to determine script type)
24
+ * @param index derivation index for the change address
25
+ * @returns PsbtOutputUpdate object with the required information
26
+ */
27
+ export declare function getPsbtOutputUpdateFromPsbtOutput(output: PsbtOutput, outputScript: Buffer, rootWalletKeys: RootWalletKeys, chain: ChainCode, index: number): PsbtOutputUpdate;
28
+ /**
29
+ * Get the PSBT output update object with the required information.
30
+ *
31
+ * @param psbt the PSBT to get output update for
10
32
  * @param rootWalletKeys keys that will be able to spend the output
33
+ * @param outputIndex output index where to update the output
11
34
  * @param chain chain code to use for deriving scripts (and to determine script
12
35
  * type) chain is an API parameter in the BitGo API, and may be
13
36
  * any valid ChainCode
14
37
  * @param index derivation index for the change address
15
- * @param value value of the change output
38
+ * @returns PsbtOutputUpdate object with the required information
16
39
  */
17
- export declare function addWalletOutputToPsbt(psbt: UtxoPsbt, rootWalletKeys: RootWalletKeys, chain: ChainCode, index: number, value: bigint): void;
40
+ export declare function getPsbtOutputUpdate(psbt: UtxoPsbt, rootWalletKeys: RootWalletKeys, outputIndex: number, chain: ChainCode, index: number): PsbtOutputUpdate;
18
41
  /**
19
42
  * Update the wallet output with the required information when necessary. If the
20
43
  * information is there already, it will skip over it.
@@ -28,7 +51,36 @@ export declare function addWalletOutputToPsbt(psbt: UtxoPsbt, rootWalletKeys: Ro
28
51
  * type) chain is an API parameter in the BitGo API, and may be
29
52
  * any valid ChainCode
30
53
  * @param index derivation index for the change address
31
- * @param value value of the change output
32
54
  */
33
55
  export declare function updateWalletOutputForPsbt(psbt: UtxoPsbt, rootWalletKeys: RootWalletKeys, outputIndex: number, chain: ChainCode, index: number): void;
56
+ /**
57
+ * Add a verifiable wallet output to the PSBT. The output and all data
58
+ * needed to verify it from public keys only are added to the PSBT.
59
+ * Typically these are change outputs.
60
+ *
61
+ * @param psbt the PSBT to add change output to
62
+ * @param rootWalletKeys keys that will be able to spend the output
63
+ * @param chain chain code to use for deriving scripts (and to determine script
64
+ * type) chain is an API parameter in the BitGo API, and may be
65
+ * any valid ChainCode
66
+ * @param index derivation index for the change address
67
+ * @param value value of the change output
68
+ */
69
+ export declare function addWalletOutputToPsbt(psbt: UtxoPsbt, rootWalletKeys: RootWalletKeys, chain: ChainCode, index: number, value: bigint): void;
70
+ /**
71
+ * Get the script id from the output.
72
+ * The output can have either bip32Derivation or tapBip32Derivation, but not both.
73
+ * @param output
74
+ * @throws Error if neither or both bip32Derivation and tapBip32Derivation are present
75
+ * @throws Error if the output is empty
76
+ * @throws Error if we cannot fold the script ids into a single script id
77
+ */
78
+ export declare function getScriptIdFromOutput(output: {
79
+ bip32Derivation?: {
80
+ path: string;
81
+ }[];
82
+ tapBip32Derivation?: {
83
+ path: string;
84
+ }[];
85
+ }): ScriptId;
34
86
  //# sourceMappingURL=WalletOutput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WalletOutput.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/WalletOutput.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAsB,MAAM,UAAU,CAAC;AAGzD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,IAAI,CAYN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAgEN"}
1
+ {"version":3,"file":"WalletOutput.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/WalletOutput.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAW,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,SAAS,EAAsB,MAAM,UAAU,CAAC;AACzD,OAAO,EAAuB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3D;;;;;;;;GAQG;AACH,wBAAgB,kCAAkC,CAChD,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,gBAAgB,CAqClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,GACZ,gBAAgB,CA2ClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,GACZ,gBAAgB,CAWlB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAEN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,IAAI,CAYN;AAqBD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,eAAe,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrC,kBAAkB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACzC,GAAG,QAAQ,CAWX"}
@@ -1,66 +1,77 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addWalletOutputToPsbt = addWalletOutputToPsbt;
3
+ exports.getPsbtBip32DerivationOutputUpdate = getPsbtBip32DerivationOutputUpdate;
4
+ exports.getPsbtOutputUpdateFromPsbtOutput = getPsbtOutputUpdateFromPsbtOutput;
5
+ exports.getPsbtOutputUpdate = getPsbtOutputUpdate;
4
6
  exports.updateWalletOutputForPsbt = updateWalletOutputForPsbt;
7
+ exports.addWalletOutputToPsbt = addWalletOutputToPsbt;
8
+ exports.getScriptIdFromOutput = getScriptIdFromOutput;
9
+ const assert = require("assert");
5
10
  const bitcoinjs_lib_1 = require("bitcoinjs-lib");
6
11
  const chains_1 = require("./chains");
12
+ const ScriptId_1 = require("./ScriptId");
7
13
  const outputScripts_1 = require("../outputScripts");
8
14
  /**
9
- * Add a verifiable wallet output to the PSBT. The output and all data
10
- * needed to verify it from public keys only are added to the PSBT.
11
- * Typically these are change outputs.
15
+ * Get the BIP32 derivation data for a PSBT output.
12
16
  *
13
- * @param psbt the PSBT to add change output to
14
- * @param rootWalletKeys keys that will be able to spend the output
15
- * @param chain chain code to use for deriving scripts (and to determine script
16
- * type) chain is an API parameter in the BitGo API, and may be
17
- * any valid ChainCode
18
- * @param index derivation index for the change address
19
- * @param value value of the change output
17
+ * @param rootWalletKeys root wallet keys used for master fingerprints
18
+ * @param walletKeys derived wallet keys for the specific chain and index
19
+ * @param scriptType the script type to determine whether to use regular or taproot derivation
20
+ * @param payment optional payment object for taproot scripts to calculate leaf hashes
21
+ * @returns Object containing BIP32 derivation data
20
22
  */
21
- function addWalletOutputToPsbt(psbt, rootWalletKeys, chain, index, value) {
22
- const walletKeys = rootWalletKeys.deriveForChainAndIndex(chain, index);
23
- const scriptType = (0, chains_1.scriptTypeForChain)(chain);
23
+ function getPsbtBip32DerivationOutputUpdate(rootWalletKeys, walletKeys, scriptType, payment) {
24
+ const update = {};
24
25
  if (scriptType === 'p2tr' || scriptType === 'p2trMusig2') {
25
- const payment = scriptType === 'p2tr' ? (0, outputScripts_1.createPaymentP2tr)(walletKeys.publicKeys) : (0, outputScripts_1.createPaymentP2trMusig2)(walletKeys.publicKeys);
26
- psbt.addOutput({ script: payment.output, value });
26
+ if (!payment || !payment.redeems) {
27
+ throw new Error('Payment object with redeems is required for taproot derivation');
28
+ }
29
+ const allLeafHashes = payment.redeems.map((r) => bitcoinjs_lib_1.taproot.hashTapLeaf(r.output));
30
+ update.tapBip32Derivation = [0, 1, 2].map((idx) => {
31
+ const pubkey = (0, outputScripts_1.toXOnlyPublicKey)(walletKeys.triple[idx].publicKey);
32
+ const leafHashes = [];
33
+ assert(payment.redeems);
34
+ payment.redeems.forEach((r, redeemIdx) => {
35
+ if (r.pubkeys.find((pk) => pk.equals(pubkey))) {
36
+ leafHashes.push(allLeafHashes[redeemIdx]);
37
+ }
38
+ });
39
+ return {
40
+ leafHashes,
41
+ pubkey,
42
+ path: walletKeys.paths[idx],
43
+ masterFingerprint: rootWalletKeys.triple[idx].fingerprint,
44
+ };
45
+ });
27
46
  }
28
47
  else {
29
- const { scriptPubKey: script } = (0, outputScripts_1.createOutputScript2of3)(walletKeys.publicKeys, scriptType);
30
- psbt.addOutput({ script, value });
48
+ update.bip32Derivation = [0, 1, 2].map((idx) => ({
49
+ pubkey: walletKeys.triple[idx].publicKey,
50
+ path: walletKeys.paths[idx],
51
+ masterFingerprint: rootWalletKeys.triple[idx].fingerprint,
52
+ }));
31
53
  }
32
- updateWalletOutputForPsbt(psbt, rootWalletKeys, psbt.data.outputs.length - 1, chain, index);
54
+ return update;
33
55
  }
34
56
  /**
35
- * Update the wallet output with the required information when necessary. If the
36
- * information is there already, it will skip over it.
37
- *
38
- * This function assumes that the output script and value have already been set.
57
+ * Get the PSBT output update object from a PSBT output and output script.
39
58
  *
40
- * @param psbt the PSBT to update change output at
59
+ * @param output the PSBT output to get update for
60
+ * @param outputScript the output script
41
61
  * @param rootWalletKeys keys that will be able to spend the output
42
- * @param outputIndex output index where to update the output
43
- * @param chain chain code to use for deriving scripts (and to determine script
44
- * type) chain is an API parameter in the BitGo API, and may be
45
- * any valid ChainCode
62
+ * @param chain chain code to use for deriving scripts (and to determine script type)
46
63
  * @param index derivation index for the change address
47
- * @param value value of the change output
64
+ * @returns PsbtOutputUpdate object with the required information
48
65
  */
49
- function updateWalletOutputForPsbt(psbt, rootWalletKeys, outputIndex, chain, index) {
50
- if (psbt.data.outputs.length <= outputIndex) {
51
- throw new Error(`outputIndex (${outputIndex}) is too large for the number of outputs (${psbt.data.outputs.length})`);
52
- }
53
- const outputScript = psbt.getOutputScript(outputIndex);
66
+ function getPsbtOutputUpdateFromPsbtOutput(output, outputScript, rootWalletKeys, chain, index) {
54
67
  const walletKeys = rootWalletKeys.deriveForChainAndIndex(chain, index);
55
68
  const scriptType = (0, chains_1.scriptTypeForChain)(chain);
56
- const output = psbt.data.outputs[outputIndex];
57
69
  const update = {};
58
70
  if (scriptType === 'p2tr' || scriptType === 'p2trMusig2') {
59
71
  const payment = scriptType === 'p2tr' ? (0, outputScripts_1.createPaymentP2tr)(walletKeys.publicKeys) : (0, outputScripts_1.createPaymentP2trMusig2)(walletKeys.publicKeys);
60
72
  if (!payment.output || !payment.output.equals(outputScript)) {
61
73
  throw new Error(`cannot update a p2tr output where the scripts do not match - Failing.`);
62
74
  }
63
- const allLeafHashes = payment.redeems.map((r) => bitcoinjs_lib_1.taproot.hashTapLeaf(r.output));
64
75
  if (!output.tapTree) {
65
76
  update.tapTree = payment.tapTree;
66
77
  }
@@ -68,21 +79,8 @@ function updateWalletOutputForPsbt(psbt, rootWalletKeys, outputIndex, chain, ind
68
79
  update.tapInternalKey = payment.internalPubkey;
69
80
  }
70
81
  if (!output.tapBip32Derivation) {
71
- update.tapBip32Derivation = [0, 1, 2].map((idx) => {
72
- const pubkey = (0, outputScripts_1.toXOnlyPublicKey)(walletKeys.triple[idx].publicKey);
73
- const leafHashes = [];
74
- payment.redeems.forEach((r, idx) => {
75
- if (r.pubkeys.find((pk) => pk.equals(pubkey))) {
76
- leafHashes.push(allLeafHashes[idx]);
77
- }
78
- });
79
- return {
80
- leafHashes,
81
- pubkey,
82
- path: walletKeys.paths[idx],
83
- masterFingerprint: rootWalletKeys.triple[idx].fingerprint,
84
- };
85
- });
82
+ const derivationUpdate = getPsbtBip32DerivationOutputUpdate(rootWalletKeys, walletKeys, scriptType, payment);
83
+ update.tapBip32Derivation = derivationUpdate.tapBip32Derivation;
86
84
  }
87
85
  }
88
86
  else {
@@ -91,11 +89,8 @@ function updateWalletOutputForPsbt(psbt, rootWalletKeys, outputIndex, chain, ind
91
89
  throw new Error(`cannot update an output where the scripts do not match - Failing.`);
92
90
  }
93
91
  if (!output.bip32Derivation) {
94
- update.bip32Derivation = [0, 1, 2].map((idx) => ({
95
- pubkey: walletKeys.triple[idx].publicKey,
96
- path: walletKeys.paths[idx],
97
- masterFingerprint: rootWalletKeys.triple[idx].fingerprint,
98
- }));
92
+ const derivationUpdate = getPsbtBip32DerivationOutputUpdate(rootWalletKeys, walletKeys, scriptType);
93
+ update.bip32Derivation = derivationUpdate.bip32Derivation;
99
94
  }
100
95
  if (!output.witnessScript && witnessScript) {
101
96
  update.witnessScript = witnessScript;
@@ -104,6 +99,107 @@ function updateWalletOutputForPsbt(psbt, rootWalletKeys, outputIndex, chain, ind
104
99
  update.redeemScript = redeemScript;
105
100
  }
106
101
  }
107
- psbt.updateOutput(outputIndex, update);
102
+ return update;
103
+ }
104
+ /**
105
+ * Get the PSBT output update object with the required information.
106
+ *
107
+ * @param psbt the PSBT to get output update for
108
+ * @param rootWalletKeys keys that will be able to spend the output
109
+ * @param outputIndex output index where to update the output
110
+ * @param chain chain code to use for deriving scripts (and to determine script
111
+ * type) chain is an API parameter in the BitGo API, and may be
112
+ * any valid ChainCode
113
+ * @param index derivation index for the change address
114
+ * @returns PsbtOutputUpdate object with the required information
115
+ */
116
+ function getPsbtOutputUpdate(psbt, rootWalletKeys, outputIndex, chain, index) {
117
+ if (psbt.data.outputs.length <= outputIndex) {
118
+ throw new Error(`outputIndex (${outputIndex}) is too large for the number of outputs (${psbt.data.outputs.length})`);
119
+ }
120
+ const outputScript = psbt.getOutputScript(outputIndex);
121
+ const output = psbt.data.outputs[outputIndex];
122
+ return getPsbtOutputUpdateFromPsbtOutput(output, outputScript, rootWalletKeys, chain, index);
123
+ }
124
+ /**
125
+ * Update the wallet output with the required information when necessary. If the
126
+ * information is there already, it will skip over it.
127
+ *
128
+ * This function assumes that the output script and value have already been set.
129
+ *
130
+ * @param psbt the PSBT to update change output at
131
+ * @param rootWalletKeys keys that will be able to spend the output
132
+ * @param outputIndex output index where to update the output
133
+ * @param chain chain code to use for deriving scripts (and to determine script
134
+ * type) chain is an API parameter in the BitGo API, and may be
135
+ * any valid ChainCode
136
+ * @param index derivation index for the change address
137
+ */
138
+ function updateWalletOutputForPsbt(psbt, rootWalletKeys, outputIndex, chain, index) {
139
+ psbt.updateOutput(outputIndex, getPsbtOutputUpdate(psbt, rootWalletKeys, outputIndex, chain, index));
140
+ }
141
+ /**
142
+ * Add a verifiable wallet output to the PSBT. The output and all data
143
+ * needed to verify it from public keys only are added to the PSBT.
144
+ * Typically these are change outputs.
145
+ *
146
+ * @param psbt the PSBT to add change output to
147
+ * @param rootWalletKeys keys that will be able to spend the output
148
+ * @param chain chain code to use for deriving scripts (and to determine script
149
+ * type) chain is an API parameter in the BitGo API, and may be
150
+ * any valid ChainCode
151
+ * @param index derivation index for the change address
152
+ * @param value value of the change output
153
+ */
154
+ function addWalletOutputToPsbt(psbt, rootWalletKeys, chain, index, value) {
155
+ const walletKeys = rootWalletKeys.deriveForChainAndIndex(chain, index);
156
+ const scriptType = (0, chains_1.scriptTypeForChain)(chain);
157
+ if (scriptType === 'p2tr' || scriptType === 'p2trMusig2') {
158
+ const payment = scriptType === 'p2tr' ? (0, outputScripts_1.createPaymentP2tr)(walletKeys.publicKeys) : (0, outputScripts_1.createPaymentP2trMusig2)(walletKeys.publicKeys);
159
+ psbt.addOutput({ script: payment.output, value });
160
+ }
161
+ else {
162
+ const { scriptPubKey: script } = (0, outputScripts_1.createOutputScript2of3)(walletKeys.publicKeys, scriptType);
163
+ psbt.addOutput({ script, value });
164
+ }
165
+ updateWalletOutputForPsbt(psbt, rootWalletKeys, psbt.data.outputs.length - 1, chain, index);
166
+ }
167
+ /**
168
+ * Fold the script ids into a single script id, if they are all the same.
169
+ * @param scriptIds
170
+ */
171
+ function foldScriptIds(scriptIds) {
172
+ if (scriptIds.length === 0) {
173
+ throw new Error('cannot fold empty script ids');
174
+ }
175
+ scriptIds.forEach((scriptId, i) => {
176
+ if (scriptId.chain !== scriptIds[0].chain) {
177
+ throw new Error(`chain mismatch: ${scriptId.chain} != ${scriptIds[0].chain}`);
178
+ }
179
+ if (scriptId.index !== scriptIds[0].index) {
180
+ throw new Error(`index mismatch: ${scriptId.index} != ${scriptIds[0].index}`);
181
+ }
182
+ });
183
+ return scriptIds[0];
184
+ }
185
+ /**
186
+ * Get the script id from the output.
187
+ * The output can have either bip32Derivation or tapBip32Derivation, but not both.
188
+ * @param output
189
+ * @throws Error if neither or both bip32Derivation and tapBip32Derivation are present
190
+ * @throws Error if the output is empty
191
+ * @throws Error if we cannot fold the script ids into a single script id
192
+ */
193
+ function getScriptIdFromOutput(output) {
194
+ if (output.bip32Derivation && output.tapBip32Derivation) {
195
+ throw new Error('cannot get script id from output with both bip32Derivation and tapBip32Derivation');
196
+ }
197
+ if (output.bip32Derivation) {
198
+ return foldScriptIds(output.bip32Derivation.map((d) => (0, ScriptId_1.getScriptIdFromPath)(d.path)));
199
+ }
200
+ if (output.tapBip32Derivation) {
201
+ return foldScriptIds(output.tapBip32Derivation.map((d) => (0, ScriptId_1.getScriptIdFromPath)(d.path)));
202
+ }
203
+ throw new Error('cannot get script id from output without bip32Derivation or tapBip32Derivation');
108
204
  }
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2FsbGV0T3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9XYWxsZXRPdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvQkEsc0RBa0JDO0FBaUJELDhEQXNFQztBQTdIRCxpREFBd0M7QUFJeEMscUNBQXlEO0FBQ3pELG9EQUF3SDtBQUV4SDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsSUFBYyxFQUNkLGNBQThCLEVBQzlCLEtBQWdCLEVBQ2hCLEtBQWEsRUFDYixLQUFhO0lBRWIsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxNQUFNLFVBQVUsR0FBRyxJQUFBLDJCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLElBQUksVUFBVSxLQUFLLE1BQU0sSUFBSSxVQUFVLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQ1gsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxpQ0FBaUIsRUFBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsdUNBQXVCLEVBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLHNDQUFzQixFQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCx5QkFBeUIsQ0FB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RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0YXByb290IH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgeyBQc2J0T3V0cHV0VXBkYXRlIH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBVdHhvUHNidCB9IGZyb20gJy4uL1V0eG9Qc2J0JztcbmltcG9ydCB7IFJvb3RXYWxsZXRLZXlzIH0gZnJvbSAnLi9XYWxsZXRLZXlzJztcbmltcG9ydCB7IENoYWluQ29kZSwgc2NyaXB0VHlwZUZvckNoYWluIH0gZnJvbSAnLi9jaGFpbnMnO1xuaW1wb3J0IHsgY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMywgY3JlYXRlUGF5bWVudFAydHIsIGNyZWF0ZVBheW1lbnRQMnRyTXVzaWcyLCB0b1hPbmx5UHVibGljS2V5IH0gZnJvbSAnLi4vb3V0cHV0U2NyaXB0cyc7XG5cbi8qKlxuICogQWRkIGEgdmVyaWZpYWJsZSB3YWxsZXQgb3V0cHV0IHRvIHRoZSBQU0JULiBUaGUgb3V0cHV0IGFuZCBhbGwgZGF0YVxuICogbmVlZGVkIHRvIHZlcmlmeSBpdCBmcm9tIHB1YmxpYyBrZXlzIG9ubHkgYXJlIGFkZGVkIHRvIHRoZSBQU0JULlxuICogVHlwaWNhbGx5IHRoZXNlIGFyZSBjaGFuZ2Ugb3V0cHV0cy5cbiAqXG4gKiBAcGFyYW0gcHNidCB0aGUgUFNCVCB0byBhZGQgY2hhbmdlIG91dHB1dCB0b1xuICogQHBhcmFtIHJvb3RXYWxsZXRLZXlzIGtleXMgdGhhdCB3aWxsIGJlIGFibGUgdG8gc3BlbmQgdGhlIG91dHB1dFxuICogQHBhcmFtIGNoYWluIGNoYWluIGNvZGUgdG8gdXNlIGZvciBkZXJpdmluZyBzY3JpcHRzIChhbmQgdG8gZGV0ZXJtaW5lIHNjcmlwdFxuICogICAgICAgICAgICAgIHR5cGUpIGNoYWluIGlzIGFuIEFQSSBwYXJhbWV0ZXIgaW4gdGhlIEJpdEdvIEFQSSwgYW5kIG1heSBiZVxuICogICAgICAgICAgICAgIGFueSB2YWxpZCBDaGFpbkNvZGVcbiAqIEBwYXJhbSBpbmRleCBkZXJpdmF0aW9uIGluZGV4IGZvciB0aGUgY2hhbmdlIGFkZHJlc3NcbiAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSBvZiB0aGUgY2hhbmdlIG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkV2FsbGV0T3V0cHV0VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyLFxuICB2YWx1ZTogYmlnaW50XG4pOiB2b2lkIHtcbiAgY29uc3Qgd2FsbGV0S2V5cyA9IHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoY2hhaW4sIGluZGV4KTtcbiAgY29uc3Qgc2NyaXB0VHlwZSA9IHNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbik7XG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicgfHwgc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzInKSB7XG4gICAgY29uc3QgcGF5bWVudCA9XG4gICAgICBzY3JpcHRUeXBlID09PSAncDJ0cicgPyBjcmVhdGVQYXltZW50UDJ0cih3YWxsZXRLZXlzLnB1YmxpY0tleXMpIDogY3JlYXRlUGF5bWVudFAydHJNdXNpZzIod2FsbGV0S2V5cy5wdWJsaWNLZXlzKTtcbiAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogcGF5bWVudC5vdXRwdXQhLCB2YWx1ZSB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IHNjcmlwdFB1YktleTogc2NyaXB0IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHdhbGxldEtleXMucHVibGljS2V5cywgc2NyaXB0VHlwZSk7XG4gICAgcHNidC5hZGRPdXRwdXQoeyBzY3JpcHQsIHZhbHVlIH0pO1xuICB9XG4gIHVwZGF0ZVdhbGxldE91dHB1dEZvclBzYnQocHNidCwgcm9vdFdhbGxldEtleXMsIHBzYnQuZGF0YS5vdXRwdXRzLmxlbmd0aCAtIDEsIGNoYWluLCBpbmRleCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSB3YWxsZXQgb3V0cHV0IHdpdGggdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIHdoZW4gbmVjZXNzYXJ5LiBJZiB0aGVcbiAqIGluZm9ybWF0aW9uIGlzIHRoZXJlIGFscmVhZHksIGl0IHdpbGwgc2tpcCBvdmVyIGl0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBvdXRwdXQgc2NyaXB0IGFuZCB2YWx1ZSBoYXZlIGFscmVhZHkgYmVlbiBzZXQuXG4gKlxuICogQHBhcmFtIHBzYnQgdGhlIFBTQlQgdG8gdXBkYXRlIGNoYW5nZSBvdXRwdXQgYXRcbiAqIEBwYXJhbSByb290V2FsbGV0S2V5cyBrZXlzIHRoYXQgd2lsbCBiZSBhYmxlIHRvIHNwZW5kIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSBvdXRwdXRJbmRleCBvdXRwdXQgaW5kZXggd2hlcmUgdG8gdXBkYXRlIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSBjaGFpbiBjaGFpbiBjb2RlIHRvIHVzZSBmb3IgZGVyaXZpbmcgc2NyaXB0cyAoYW5kIHRvIGRldGVybWluZSBzY3JpcHRcbiAqICAgICAgICAgICAgICB0eXBlKSBjaGFpbiBpcyBhbiBBUEkgcGFyYW1ldGVyIGluIHRoZSBCaXRHbyBBUEksIGFuZCBtYXkgYmVcbiAqICAgICAgICAgICAgICBhbnkgdmFsaWQgQ2hhaW5Db2RlXG4gKiBAcGFyYW0gaW5kZXggZGVyaXZhdGlvbiBpbmRleCBmb3IgdGhlIGNoYW5nZSBhZGRyZXNzXG4gKiBAcGFyYW0gdmFsdWUgdmFsdWUgb2YgdGhlIGNoYW5nZSBvdXRwdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVdhbGxldE91dHB1dEZvclBzYnQoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIG91dHB1dEluZGV4OiBudW1iZXIsXG4gIGNoYWluOiBDaGFpbkNvZGUsXG4gIGluZGV4OiBudW1iZXJcbik6IHZvaWQge1xuICBpZiAocHNidC5kYXRhLm91dHB1dHMubGVuZ3RoIDw9IG91dHB1dEluZGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYG91dHB1dEluZGV4ICgke291dHB1dEluZGV4fSkgaXMgdG9vIGxhcmdlIGZvciB0aGUgbnVtYmVyIG9mIG91dHB1dHMgKCR7cHNidC5kYXRhLm91dHB1dHMubGVuZ3RofSlgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dFNjcmlwdCA9IHBzYnQuZ2V0T3V0cHV0U2NyaXB0KG91dHB1dEluZGV4KTtcblxuICBjb25zdCB3YWxsZXRLZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpO1xuICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKTtcbiAgY29uc3Qgb3V0cHV0ID0gcHNidC5kYXRhLm91dHB1dHNbb3V0cHV0SW5kZXhdO1xuICBjb25zdCB1cGRhdGU6IFBzYnRPdXRwdXRVcGRhdGUgPSB7fTtcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJyB8fCBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICBjb25zdCBwYXltZW50ID1cbiAgICAgIHNjcmlwdFR5cGUgPT09ICdwMnRyJyA/IGNyZWF0ZVBheW1lbnRQMnRyKHdhbGxldEtleXMucHVibGljS2V5cykgOiBjcmVhdGVQYXltZW50UDJ0ck11c2lnMih3YWxsZXRLZXlzLnB1YmxpY0tleXMpO1xuICAgIGlmICghcGF5bWVudC5vdXRwdXQgfHwgIXBheW1lbnQub3V0cHV0LmVxdWFscyhvdXRwdXRTY3JpcHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCB1cGRhdGUgYSBwMnRyIG91dHB1dCB3aGVyZSB0aGUgc2NyaXB0cyBkbyBub3QgbWF0Y2ggLSBGYWlsaW5nLmApO1xuICAgIH1cbiAgICBjb25zdCBhbGxMZWFmSGFzaGVzID0gcGF5bWVudC5yZWRlZW1zIS5tYXAoKHIpID0+IHRhcHJvb3QuaGFzaFRhcExlYWYoci5vdXRwdXQhKSk7XG5cbiAgICBpZiAoIW91dHB1dC50YXBUcmVlKSB7XG4gICAgICB1cGRhdGUudGFwVHJlZSA9IHBheW1lbnQudGFwVHJlZTtcbiAgICB9XG4gICAgaWYgKCFvdXRwdXQudGFwSW50ZXJuYWxLZXkpIHtcbiAgICAgIHVwZGF0ZS50YXBJbnRlcm5hbEtleSA9IHBheW1lbnQuaW50ZXJuYWxQdWJrZXk7XG4gICAgfVxuICAgIGlmICghb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbikge1xuICAgICAgdXBkYXRlLnRhcEJpcDMyRGVyaXZhdGlvbiA9IFswLCAxLCAyXS5tYXAoKGlkeCkgPT4ge1xuICAgICAgICBjb25zdCBwdWJrZXkgPSB0b1hPbmx5UHVibGljS2V5KHdhbGxldEtleXMudHJpcGxlW2lkeF0ucHVibGljS2V5KTtcbiAgICAgICAgY29uc3QgbGVhZkhhc2hlczogQnVmZmVyW10gPSBbXTtcbiAgICAgICAgcGF5bWVudC5yZWRlZW1zIS5mb3JFYWNoKChyLCBpZHgpID0+IHtcbiAgICAgICAgICBpZiAoci5wdWJrZXlzIS5maW5kKChwaykgPT4gcGsuZXF1YWxzKHB1YmtleSkpKSB7XG4gICAgICAgICAgICBsZWFmSGFzaGVzLnB1c2goYWxsTGVhZkhhc2hlc1tpZHhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxlYWZIYXNoZXMsXG4gICAgICAgICAgcHVia2V5LFxuICAgICAgICAgIHBhdGg6IHdhbGxldEtleXMucGF0aHNbaWR4XSxcbiAgICAgICAgICBtYXN0ZXJGaW5nZXJwcmludDogcm9vdFdhbGxldEtleXMudHJpcGxlW2lkeF0uZmluZ2VycHJpbnQsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBzY3JpcHRQdWJLZXksIHdpdG5lc3NTY3JpcHQsIHJlZGVlbVNjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyh3YWxsZXRLZXlzLnB1YmxpY0tleXMsIHNjcmlwdFR5cGUpO1xuICAgIGlmICghc2NyaXB0UHViS2V5LmVxdWFscyhvdXRwdXRTY3JpcHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCB1cGRhdGUgYW4gb3V0cHV0IHdoZXJlIHRoZSBzY3JpcHRzIGRvIG5vdCBtYXRjaCAtIEZhaWxpbmcuYCk7XG4gICAgfVxuICAgIGlmICghb3V0cHV0LmJpcDMyRGVyaXZhdGlvbikge1xuICAgICAgdXBkYXRlLmJpcDMyRGVyaXZhdGlvbiA9IFswLCAxLCAyXS5tYXAoKGlkeCkgPT4gKHtcbiAgICAgICAgcHVia2V5OiB3YWxsZXRLZXlzLnRyaXBsZVtpZHhdLnB1YmxpY0tleSxcbiAgICAgICAgcGF0aDogd2FsbGV0S2V5cy5wYXRoc1tpZHhdLFxuICAgICAgICBtYXN0ZXJGaW5nZXJwcmludDogcm9vdFdhbGxldEtleXMudHJpcGxlW2lkeF0uZmluZ2VycHJpbnQsXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmICghb3V0cHV0LndpdG5lc3NTY3JpcHQgJiYgd2l0bmVzc1NjcmlwdCkge1xuICAgICAgdXBkYXRlLndpdG5lc3NTY3JpcHQgPSB3aXRuZXNzU2NyaXB0O1xuICAgIH1cbiAgICBpZiAoIW91dHB1dC5yZWRlZW1TY3JpcHQgJiYgcmVkZWVtU2NyaXB0KSB7XG4gICAgICB1cGRhdGUucmVkZWVtU2NyaXB0ID0gcmVkZWVtU2NyaXB0O1xuICAgIH1cbiAgfVxuICBwc2J0LnVwZGF0ZU91dHB1dChvdXRwdXRJbmRleCwgdXBkYXRlKTtcbn1cbiJdfQ==
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2FsbGV0T3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9XYWxsZXRPdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsZ0ZBMENDO0FBWUQsOEVBaURDO0FBY0Qsa0RBaUJDO0FBZ0JELDhEQVFDO0FBZUQsc0RBa0JDO0FBNkJELHNEQWNDO0FBN1BELGlDQUFpQztBQUVqQyxpREFBaUQ7QUFJakQscUNBQXlEO0FBQ3pELHlDQUEyRDtBQUMzRCxvREFBd0g7QUFFeEg7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixrQ0FBa0MsQ0FDaEQsY0FBOEIsRUFDOUIsVUFBNkIsRUFDN0IsVUFBa0IsRUFDbEIsT0FBaUI7SUFFakIsTUFBTSxNQUFNLEdBQXFCLEVBQUUsQ0FBQztJQUVwQyxJQUFJLFVBQVUsS0FBSyxNQUFNLElBQUksVUFBVSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsdUJBQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxDQUFDLENBQUM7UUFFakYsTUFBTSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGdDQUFnQixFQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO1lBRWhDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsU0FBaUIsRUFBRSxFQUFFO2dCQUNwRCxJQUFJLENBQUMsQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdkQsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTztnQkFDTCxVQUFVO2dCQUNWLE1BQU07Z0JBQ04sSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUMzQixpQkFBaUIsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVc7YUFDMUQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0MsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUztZQUN4QyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDM0IsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXO1NBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixpQ0FBaUMsQ0FDL0MsTUFBa0IsRUFDbEIsWUFBb0IsRUFDcEIsY0FBOEIsRUFDOUIsS0FBZ0IsRUFDaEIsS0FBYTtJQUViLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkUsTUFBTSxVQUFVLEdBQUcsSUFBQSwyQkFBa0IsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBcUIsRUFBRSxDQUFDO0lBRXBDLElBQUksVUFBVSxLQUFLLE1BQU0sSUFBSSxVQUFVLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQ1gsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxpQ0FBaUIsRUFBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsdUNBQXVCLEVBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsa0NBQWtDLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0csTUFBTSxDQUFDLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUEsc0NBQXNCLEVBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1QixNQUFNLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDcEcsTUFBTSxDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7UUFDNUQsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxJQUFjLEVBQ2QsY0FBOEIsRUFDOUIsV0FBbUIsRUFDbkIsS0FBZ0IsRUFDaEIsS0FBYTtJQUViLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0JBQWdCLFdBQVcsNkNBQTZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUNwRyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsT0FBTyxpQ0FBaUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0YsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFnQix5QkFBeUIsQ0FDdkMsSUFBYyxFQUNkLGNBQThCLEVBQzlCLFdBQW1CLEVBQ25CLEtBQWdCLEVBQ2hCLEtBQWE7SUFFYixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLElBQWMsRUFDZCxjQUE4QixFQUM5QixLQUFnQixFQUNoQixLQUFhLEVBQ2IsS0FBYTtJQUViLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkUsTUFBTSxVQUFVLEdBQUcsSUFBQSwyQkFBa0IsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxJQUFJLFVBQVUsS0FBSyxNQUFNLElBQUksVUFBVSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUNYLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUEsaUNBQWlCLEVBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLHVDQUF1QixFQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwSCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSxzQ0FBc0IsRUFBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QseUJBQXlCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQUMsU0FBcUI7SUFDMUMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNoQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLFFBQVEsQ0FBQyxLQUFLLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsUUFBUSxDQUFDLEtBQUssT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLE1BR3JDO0lBQ0MsSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsbUZBQW1GLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUEsOEJBQW1CLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM5QixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDhCQUFtQixFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztBQUNwRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IFBheW1lbnQsIHRhcHJvb3QgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IFBzYnRPdXRwdXQsIFBzYnRPdXRwdXRVcGRhdGUgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFV0eG9Qc2J0IH0gZnJvbSAnLi4vVXR4b1BzYnQnO1xuaW1wb3J0IHsgUm9vdFdhbGxldEtleXMsIERlcml2ZWRXYWxsZXRLZXlzIH0gZnJvbSAnLi9XYWxsZXRLZXlzJztcbmltcG9ydCB7IENoYWluQ29kZSwgc2NyaXB0VHlwZUZvckNoYWluIH0gZnJvbSAnLi9jaGFpbnMnO1xuaW1wb3J0IHsgZ2V0U2NyaXB0SWRGcm9tUGF0aCwgU2NyaXB0SWQgfSBmcm9tICcuL1NjcmlwdElkJztcbmltcG9ydCB7IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMsIGNyZWF0ZVBheW1lbnRQMnRyLCBjcmVhdGVQYXltZW50UDJ0ck11c2lnMiwgdG9YT25seVB1YmxpY0tleSB9IGZyb20gJy4uL291dHB1dFNjcmlwdHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQklQMzIgZGVyaXZhdGlvbiBkYXRhIGZvciBhIFBTQlQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSByb290V2FsbGV0S2V5cyByb290IHdhbGxldCBrZXlzIHVzZWQgZm9yIG1hc3RlciBmaW5nZXJwcmludHNcbiAqIEBwYXJhbSB3YWxsZXRLZXlzIGRlcml2ZWQgd2FsbGV0IGtleXMgZm9yIHRoZSBzcGVjaWZpYyBjaGFpbiBhbmQgaW5kZXhcbiAqIEBwYXJhbSBzY3JpcHRUeXBlIHRoZSBzY3JpcHQgdHlwZSB0byBkZXRlcm1pbmUgd2hldGhlciB0byB1c2UgcmVndWxhciBvciB0YXByb290IGRlcml2YXRpb25cbiAqIEBwYXJhbSBwYXltZW50IG9wdGlvbmFsIHBheW1lbnQgb2JqZWN0IGZvciB0YXByb290IHNjcmlwdHMgdG8gY2FsY3VsYXRlIGxlYWYgaGFzaGVzXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBCSVAzMiBkZXJpdmF0aW9uIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBzYnRCaXAzMkRlcml2YXRpb25PdXRwdXRVcGRhdGUoXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgd2FsbGV0S2V5czogRGVyaXZlZFdhbGxldEtleXMsXG4gIHNjcmlwdFR5cGU6IHN0cmluZyxcbiAgcGF5bWVudD86IFBheW1lbnRcbik6IFBzYnRPdXRwdXRVcGRhdGUge1xuICBjb25zdCB1cGRhdGU6IFBzYnRPdXRwdXRVcGRhdGUgPSB7fTtcblxuICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3AydHInIHx8IHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJykge1xuICAgIGlmICghcGF5bWVudCB8fCAhcGF5bWVudC5yZWRlZW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BheW1lbnQgb2JqZWN0IHdpdGggcmVkZWVtcyBpcyByZXF1aXJlZCBmb3IgdGFwcm9vdCBkZXJpdmF0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsTGVhZkhhc2hlcyA9IHBheW1lbnQucmVkZWVtcy5tYXAoKHIpID0+IHRhcHJvb3QuaGFzaFRhcExlYWYoci5vdXRwdXQhKSk7XG5cbiAgICB1cGRhdGUudGFwQmlwMzJEZXJpdmF0aW9uID0gWzAsIDEsIDJdLm1hcCgoaWR4KSA9PiB7XG4gICAgICBjb25zdCBwdWJrZXkgPSB0b1hPbmx5UHVibGljS2V5KHdhbGxldEtleXMudHJpcGxlW2lkeF0ucHVibGljS2V5KTtcbiAgICAgIGNvbnN0IGxlYWZIYXNoZXM6IEJ1ZmZlcltdID0gW107XG5cbiAgICAgIGFzc2VydChwYXltZW50LnJlZGVlbXMpO1xuICAgICAgcGF5bWVudC5yZWRlZW1zLmZvckVhY2goKHI6IGFueSwgcmVkZWVtSWR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKHIucHVia2V5cyEuZmluZCgocGs6IEJ1ZmZlcikgPT4gcGsuZXF1YWxzKHB1YmtleSkpKSB7XG4gICAgICAgICAgbGVhZkhhc2hlcy5wdXNoKGFsbExlYWZIYXNoZXNbcmVkZWVtSWR4XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWFmSGFzaGVzLFxuICAgICAgICBwdWJrZXksXG4gICAgICAgIHBhdGg6IHdhbGxldEtleXMucGF0aHNbaWR4XSxcbiAgICAgICAgbWFzdGVyRmluZ2VycHJpbnQ6IHJvb3RXYWxsZXRLZXlzLnRyaXBsZVtpZHhdLmZpbmdlcnByaW50LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUuYmlwMzJEZXJpdmF0aW9uID0gWzAsIDEsIDJdLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgcHVia2V5OiB3YWxsZXRLZXlzLnRyaXBsZVtpZHhdLnB1YmxpY0tleSxcbiAgICAgIHBhdGg6IHdhbGxldEtleXMucGF0aHNbaWR4XSxcbiAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5cy50cmlwbGVbaWR4XS5maW5nZXJwcmludCxcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgUFNCVCBvdXRwdXQgdXBkYXRlIG9iamVjdCBmcm9tIGEgUFNCVCBvdXRwdXQgYW5kIG91dHB1dCBzY3JpcHQuXG4gKlxuICogQHBhcmFtIG91dHB1dCB0aGUgUFNCVCBvdXRwdXQgdG8gZ2V0IHVwZGF0ZSBmb3JcbiAqIEBwYXJhbSBvdXRwdXRTY3JpcHQgdGhlIG91dHB1dCBzY3JpcHRcbiAqIEBwYXJhbSByb290V2FsbGV0S2V5cyBrZXlzIHRoYXQgd2lsbCBiZSBhYmxlIHRvIHNwZW5kIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSBjaGFpbiBjaGFpbiBjb2RlIHRvIHVzZSBmb3IgZGVyaXZpbmcgc2NyaXB0cyAoYW5kIHRvIGRldGVybWluZSBzY3JpcHQgdHlwZSlcbiAqIEBwYXJhbSBpbmRleCBkZXJpdmF0aW9uIGluZGV4IGZvciB0aGUgY2hhbmdlIGFkZHJlc3NcbiAqIEByZXR1cm5zIFBzYnRPdXRwdXRVcGRhdGUgb2JqZWN0IHdpdGggdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQc2J0T3V0cHV0VXBkYXRlRnJvbVBzYnRPdXRwdXQoXG4gIG91dHB1dDogUHNidE91dHB1dCxcbiAgb3V0cHV0U2NyaXB0OiBCdWZmZXIsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IENoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlclxuKTogUHNidE91dHB1dFVwZGF0ZSB7XG4gIGNvbnN0IHdhbGxldEtleXMgPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KGNoYWluLCBpbmRleCk7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pO1xuICBjb25zdCB1cGRhdGU6IFBzYnRPdXRwdXRVcGRhdGUgPSB7fTtcblxuICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3AydHInIHx8IHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJykge1xuICAgIGNvbnN0IHBheW1lbnQgPVxuICAgICAgc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gY3JlYXRlUGF5bWVudFAydHIod2FsbGV0S2V5cy5wdWJsaWNLZXlzKSA6IGNyZWF0ZVBheW1lbnRQMnRyTXVzaWcyKHdhbGxldEtleXMucHVibGljS2V5cyk7XG4gICAgaWYgKCFwYXltZW50Lm91dHB1dCB8fCAhcGF5bWVudC5vdXRwdXQuZXF1YWxzKG91dHB1dFNjcmlwdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHVwZGF0ZSBhIHAydHIgb3V0cHV0IHdoZXJlIHRoZSBzY3JpcHRzIGRvIG5vdCBtYXRjaCAtIEZhaWxpbmcuYCk7XG4gICAgfVxuXG4gICAgaWYgKCFvdXRwdXQudGFwVHJlZSkge1xuICAgICAgdXBkYXRlLnRhcFRyZWUgPSBwYXltZW50LnRhcFRyZWU7XG4gICAgfVxuICAgIGlmICghb3V0cHV0LnRhcEludGVybmFsS2V5KSB7XG4gICAgICB1cGRhdGUudGFwSW50ZXJuYWxLZXkgPSBwYXltZW50LmludGVybmFsUHVia2V5O1xuICAgIH1cblxuICAgIGlmICghb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbikge1xuICAgICAgY29uc3QgZGVyaXZhdGlvblVwZGF0ZSA9IGdldFBzYnRCaXAzMkRlcml2YXRpb25PdXRwdXRVcGRhdGUocm9vdFdhbGxldEtleXMsIHdhbGxldEtleXMsIHNjcmlwdFR5cGUsIHBheW1lbnQpO1xuICAgICAgdXBkYXRlLnRhcEJpcDMyRGVyaXZhdGlvbiA9IGRlcml2YXRpb25VcGRhdGUudGFwQmlwMzJEZXJpdmF0aW9uO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IHNjcmlwdFB1YktleSwgd2l0bmVzc1NjcmlwdCwgcmVkZWVtU2NyaXB0IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHdhbGxldEtleXMucHVibGljS2V5cywgc2NyaXB0VHlwZSk7XG4gICAgaWYgKCFzY3JpcHRQdWJLZXkuZXF1YWxzKG91dHB1dFNjcmlwdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHVwZGF0ZSBhbiBvdXRwdXQgd2hlcmUgdGhlIHNjcmlwdHMgZG8gbm90IG1hdGNoIC0gRmFpbGluZy5gKTtcbiAgICB9XG5cbiAgICBpZiAoIW91dHB1dC5iaXAzMkRlcml2YXRpb24pIHtcbiAgICAgIGNvbnN0IGRlcml2YXRpb25VcGRhdGUgPSBnZXRQc2J0QmlwMzJEZXJpdmF0aW9uT3V0cHV0VXBkYXRlKHJvb3RXYWxsZXRLZXlzLCB3YWxsZXRLZXlzLCBzY3JpcHRUeXBlKTtcbiAgICAgIHVwZGF0ZS5iaXAzMkRlcml2YXRpb24gPSBkZXJpdmF0aW9uVXBkYXRlLmJpcDMyRGVyaXZhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoIW91dHB1dC53aXRuZXNzU2NyaXB0ICYmIHdpdG5lc3NTY3JpcHQpIHtcbiAgICAgIHVwZGF0ZS53aXRuZXNzU2NyaXB0ID0gd2l0bmVzc1NjcmlwdDtcbiAgICB9XG4gICAgaWYgKCFvdXRwdXQucmVkZWVtU2NyaXB0ICYmIHJlZGVlbVNjcmlwdCkge1xuICAgICAgdXBkYXRlLnJlZGVlbVNjcmlwdCA9IHJlZGVlbVNjcmlwdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgUFNCVCBvdXRwdXQgdXBkYXRlIG9iamVjdCB3aXRoIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHNidCB0aGUgUFNCVCB0byBnZXQgb3V0cHV0IHVwZGF0ZSBmb3JcbiAqIEBwYXJhbSByb290V2FsbGV0S2V5cyBrZXlzIHRoYXQgd2lsbCBiZSBhYmxlIHRvIHNwZW5kIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSBvdXRwdXRJbmRleCBvdXRwdXQgaW5kZXggd2hlcmUgdG8gdXBkYXRlIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSBjaGFpbiBjaGFpbiBjb2RlIHRvIHVzZSBmb3IgZGVyaXZpbmcgc2NyaXB0cyAoYW5kIHRvIGRldGVybWluZSBzY3JpcHRcbiAqICAgICAgICAgICAgICB0eXBlKSBjaGFpbiBpcyBhbiBBUEkgcGFyYW1ldGVyIGluIHRoZSBCaXRHbyBBUEksIGFuZCBtYXkgYmVcbiAqICAgICAgICAgICAgICBhbnkgdmFsaWQgQ2hhaW5Db2RlXG4gKiBAcGFyYW0gaW5kZXggZGVyaXZhdGlvbiBpbmRleCBmb3IgdGhlIGNoYW5nZSBhZGRyZXNzXG4gKiBAcmV0dXJucyBQc2J0T3V0cHV0VXBkYXRlIG9iamVjdCB3aXRoIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHNidE91dHB1dFVwZGF0ZShcbiAgcHNidDogVXR4b1BzYnQsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgb3V0cHV0SW5kZXg6IG51bWJlcixcbiAgY2hhaW46IENoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlclxuKTogUHNidE91dHB1dFVwZGF0ZSB7XG4gIGlmIChwc2J0LmRhdGEub3V0cHV0cy5sZW5ndGggPD0gb3V0cHV0SW5kZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgb3V0cHV0SW5kZXggKCR7b3V0cHV0SW5kZXh9KSBpcyB0b28gbGFyZ2UgZm9yIHRoZSBudW1iZXIgb2Ygb3V0cHV0cyAoJHtwc2J0LmRhdGEub3V0cHV0cy5sZW5ndGh9KWBcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0U2NyaXB0ID0gcHNidC5nZXRPdXRwdXRTY3JpcHQob3V0cHV0SW5kZXgpO1xuICBjb25zdCBvdXRwdXQgPSBwc2J0LmRhdGEub3V0cHV0c1tvdXRwdXRJbmRleF07XG5cbiAgcmV0dXJuIGdldFBzYnRPdXRwdXRVcGRhdGVGcm9tUHNidE91dHB1dChvdXRwdXQsIG91dHB1dFNjcmlwdCwgcm9vdFdhbGxldEtleXMsIGNoYWluLCBpbmRleCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSB3YWxsZXQgb3V0cHV0IHdpdGggdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIHdoZW4gbmVjZXNzYXJ5LiBJZiB0aGVcbiAqIGluZm9ybWF0aW9uIGlzIHRoZXJlIGFscmVhZHksIGl0IHdpbGwgc2tpcCBvdmVyIGl0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBvdXRwdXQgc2NyaXB0IGFuZCB2YWx1ZSBoYXZlIGFscmVhZHkgYmVlbiBzZXQuXG4gKlxuICogQHBhcmFtIHBzYnQgdGhlIFBTQlQgdG8gdXBkYXRlIGNoYW5nZSBvdXRwdXQgYXRcbiAqIEBwYXJhbSByb290V2FsbGV0S2V5cyBrZXlzIHRoYXQgd2lsbCBiZSBhYmxlIHRvIHNwZW5kIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSBvdXRwdXRJbmRleCBvdXRwdXQgaW5kZXggd2hlcmUgdG8gdXBkYXRlIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSBjaGFpbiBjaGFpbiBjb2RlIHRvIHVzZSBmb3IgZGVyaXZpbmcgc2NyaXB0cyAoYW5kIHRvIGRldGVybWluZSBzY3JpcHRcbiAqICAgICAgICAgICAgICB0eXBlKSBjaGFpbiBpcyBhbiBBUEkgcGFyYW1ldGVyIGluIHRoZSBCaXRHbyBBUEksIGFuZCBtYXkgYmVcbiAqICAgICAgICAgICAgICBhbnkgdmFsaWQgQ2hhaW5Db2RlXG4gKiBAcGFyYW0gaW5kZXggZGVyaXZhdGlvbiBpbmRleCBmb3IgdGhlIGNoYW5nZSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVXYWxsZXRPdXRwdXRGb3JQc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBvdXRwdXRJbmRleDogbnVtYmVyLFxuICBjaGFpbjogQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyXG4pOiB2b2lkIHtcbiAgcHNidC51cGRhdGVPdXRwdXQob3V0cHV0SW5kZXgsIGdldFBzYnRPdXRwdXRVcGRhdGUocHNidCwgcm9vdFdhbGxldEtleXMsIG91dHB1dEluZGV4LCBjaGFpbiwgaW5kZXgpKTtcbn1cblxuLyoqXG4gKiBBZGQgYSB2ZXJpZmlhYmxlIHdhbGxldCBvdXRwdXQgdG8gdGhlIFBTQlQuIFRoZSBvdXRwdXQgYW5kIGFsbCBkYXRhXG4gKiBuZWVkZWQgdG8gdmVyaWZ5IGl0IGZyb20gcHVibGljIGtleXMgb25seSBhcmUgYWRkZWQgdG8gdGhlIFBTQlQuXG4gKiBUeXBpY2FsbHkgdGhlc2UgYXJlIGNoYW5nZSBvdXRwdXRzLlxuICpcbiAqIEBwYXJhbSBwc2J0IHRoZSBQU0JUIHRvIGFkZCBjaGFuZ2Ugb3V0cHV0IHRvXG4gKiBAcGFyYW0gcm9vdFdhbGxldEtleXMga2V5cyB0aGF0IHdpbGwgYmUgYWJsZSB0byBzcGVuZCB0aGUgb3V0cHV0XG4gKiBAcGFyYW0gY2hhaW4gY2hhaW4gY29kZSB0byB1c2UgZm9yIGRlcml2aW5nIHNjcmlwdHMgKGFuZCB0byBkZXRlcm1pbmUgc2NyaXB0XG4gKiAgICAgICAgICAgICAgdHlwZSkgY2hhaW4gaXMgYW4gQVBJIHBhcmFtZXRlciBpbiB0aGUgQml0R28gQVBJLCBhbmQgbWF5IGJlXG4gKiAgICAgICAgICAgICAgYW55IHZhbGlkIENoYWluQ29kZVxuICogQHBhcmFtIGluZGV4IGRlcml2YXRpb24gaW5kZXggZm9yIHRoZSBjaGFuZ2UgYWRkcmVzc1xuICogQHBhcmFtIHZhbHVlIHZhbHVlIG9mIHRoZSBjaGFuZ2Ugb3V0cHV0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRXYWxsZXRPdXRwdXRUb1BzYnQoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIHZhbHVlOiBiaWdpbnRcbik6IHZvaWQge1xuICBjb25zdCB3YWxsZXRLZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpO1xuICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKTtcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJyB8fCBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICBjb25zdCBwYXltZW50ID1cbiAgICAgIHNjcmlwdFR5cGUgPT09ICdwMnRyJyA/IGNyZWF0ZVBheW1lbnRQMnRyKHdhbGxldEtleXMucHVibGljS2V5cykgOiBjcmVhdGVQYXltZW50UDJ0ck11c2lnMih3YWxsZXRLZXlzLnB1YmxpY0tleXMpO1xuICAgIHBzYnQuYWRkT3V0cHV0KHsgc2NyaXB0OiBwYXltZW50Lm91dHB1dCEsIHZhbHVlIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgc2NyaXB0UHViS2V5OiBzY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMod2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBzY3JpcHRUeXBlKTtcbiAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdCwgdmFsdWUgfSk7XG4gIH1cbiAgdXBkYXRlV2FsbGV0T3V0cHV0Rm9yUHNidChwc2J0LCByb290V2FsbGV0S2V5cywgcHNidC5kYXRhLm91dHB1dHMubGVuZ3RoIC0gMSwgY2hhaW4sIGluZGV4KTtcbn1cblxuLyoqXG4gKiBGb2xkIHRoZSBzY3JpcHQgaWRzIGludG8gYSBzaW5nbGUgc2NyaXB0IGlkLCBpZiB0aGV5IGFyZSBhbGwgdGhlIHNhbWUuXG4gKiBAcGFyYW0gc2NyaXB0SWRzXG4gKi9cbmZ1bmN0aW9uIGZvbGRTY3JpcHRJZHMoc2NyaXB0SWRzOiBTY3JpcHRJZFtdKTogU2NyaXB0SWQge1xuICBpZiAoc2NyaXB0SWRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGZvbGQgZW1wdHkgc2NyaXB0IGlkcycpO1xuICB9XG4gIHNjcmlwdElkcy5mb3JFYWNoKChzY3JpcHRJZCwgaSkgPT4ge1xuICAgIGlmIChzY3JpcHRJZC5jaGFpbiAhPT0gc2NyaXB0SWRzWzBdLmNoYWluKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNoYWluIG1pc21hdGNoOiAke3NjcmlwdElkLmNoYWlufSAhPSAke3NjcmlwdElkc1swXS5jaGFpbn1gKTtcbiAgICB9XG4gICAgaWYgKHNjcmlwdElkLmluZGV4ICE9PSBzY3JpcHRJZHNbMF0uaW5kZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW5kZXggbWlzbWF0Y2g6ICR7c2NyaXB0SWQuaW5kZXh9ICE9ICR7c2NyaXB0SWRzWzBdLmluZGV4fWApO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzY3JpcHRJZHNbMF07XG59XG5cbi8qKlxuICogR2V0IHRoZSBzY3JpcHQgaWQgZnJvbSB0aGUgb3V0cHV0LlxuICogVGhlIG91dHB1dCBjYW4gaGF2ZSBlaXRoZXIgYmlwMzJEZXJpdmF0aW9uIG9yIHRhcEJpcDMyRGVyaXZhdGlvbiwgYnV0IG5vdCBib3RoLlxuICogQHBhcmFtIG91dHB1dFxuICogQHRocm93cyBFcnJvciBpZiBuZWl0aGVyIG9yIGJvdGggYmlwMzJEZXJpdmF0aW9uIGFuZCB0YXBCaXAzMkRlcml2YXRpb24gYXJlIHByZXNlbnRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIG91dHB1dCBpcyBlbXB0eVxuICogQHRocm93cyBFcnJvciBpZiB3ZSBjYW5ub3QgZm9sZCB0aGUgc2NyaXB0IGlkcyBpbnRvIGEgc2luZ2xlIHNjcmlwdCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyaXB0SWRGcm9tT3V0cHV0KG91dHB1dDoge1xuICBiaXAzMkRlcml2YXRpb24/OiB7IHBhdGg6IHN0cmluZyB9W107XG4gIHRhcEJpcDMyRGVyaXZhdGlvbj86IHsgcGF0aDogc3RyaW5nIH1bXTtcbn0pOiBTY3JpcHRJZCB7XG4gIGlmIChvdXRwdXQuYmlwMzJEZXJpdmF0aW9uICYmIG91dHB1dC50YXBCaXAzMkRlcml2YXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBnZXQgc2NyaXB0IGlkIGZyb20gb3V0cHV0IHdpdGggYm90aCBiaXAzMkRlcml2YXRpb24gYW5kIHRhcEJpcDMyRGVyaXZhdGlvbicpO1xuICB9XG4gIGlmIChvdXRwdXQuYmlwMzJEZXJpdmF0aW9uKSB7XG4gICAgcmV0dXJuIGZvbGRTY3JpcHRJZHMob3V0cHV0LmJpcDMyRGVyaXZhdGlvbi5tYXAoKGQpID0+IGdldFNjcmlwdElkRnJvbVBhdGgoZC5wYXRoKSkpO1xuICB9XG4gIGlmIChvdXRwdXQudGFwQmlwMzJEZXJpdmF0aW9uKSB7XG4gICAgcmV0dXJuIGZvbGRTY3JpcHRJZHMob3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbi5tYXAoKGQpID0+IGdldFNjcmlwdElkRnJvbVBhdGgoZC5wYXRoKSkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignY2Fubm90IGdldCBzY3JpcHQgaWQgZnJvbSBvdXRwdXQgd2l0aG91dCBiaXAzMkRlcml2YXRpb24gb3IgdGFwQmlwMzJEZXJpdmF0aW9uJyk7XG59XG4iXX0=
@@ -7,4 +7,5 @@ export * from './WalletScripts';
7
7
  export * from './WalletKeys';
8
8
  export * from './psbt/PsbtOutputs';
9
9
  export * from './psbt/RootNodes';
10
+ export * from './ScriptId';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
@@ -23,4 +23,5 @@ __exportStar(require("./WalletScripts"), exports);
23
23
  __exportStar(require("./WalletKeys"), exports);
24
24
  __exportStar(require("./psbt/PsbtOutputs"), exports);
25
25
  __exportStar(require("./psbt/RootNodes"), exports);
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQixpREFBK0I7QUFDL0Isd0RBQXNDO0FBQ3RDLGtEQUFnQztBQUNoQywrQ0FBNkI7QUFDN0IscURBQW1DO0FBQ25DLG1EQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2hhaW5zJztcbmV4cG9ydCAqIGZyb20gJy4vUHNidCc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3BlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9XYWxsZXRPdXRwdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9XYWxsZXRVbnNwZW50U2lnbmVyJztcbmV4cG9ydCAqIGZyb20gJy4vV2FsbGV0U2NyaXB0cyc7XG5leHBvcnQgKiBmcm9tICcuL1dhbGxldEtleXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wc2J0L1BzYnRPdXRwdXRzJztcbmV4cG9ydCAqIGZyb20gJy4vcHNidC9Sb290Tm9kZXMnO1xuIl19
26
+ __exportStar(require("./ScriptId"), exports);
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQixpREFBK0I7QUFDL0Isd0RBQXNDO0FBQ3RDLGtEQUFnQztBQUNoQywrQ0FBNkI7QUFDN0IscURBQW1DO0FBQ25DLG1EQUFpQztBQUNqQyw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NoYWlucyc7XG5leHBvcnQgKiBmcm9tICcuL1BzYnQnO1xuZXhwb3J0ICogZnJvbSAnLi9VbnNwZW50JztcbmV4cG9ydCAqIGZyb20gJy4vV2FsbGV0T3V0cHV0JztcbmV4cG9ydCAqIGZyb20gJy4vV2FsbGV0VW5zcGVudFNpZ25lcic7XG5leHBvcnQgKiBmcm9tICcuL1dhbGxldFNjcmlwdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9XYWxsZXRLZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vcHNidC9Qc2J0T3V0cHV0cyc7XG5leHBvcnQgKiBmcm9tICcuL3BzYnQvUm9vdE5vZGVzJztcbmV4cG9ydCAqIGZyb20gJy4vU2NyaXB0SWQnO1xuIl19
@@ -1,6 +1,6 @@
1
1
  import { BIP32Interface } from 'bip32';
2
- import { Triple } from '../bitgo';
3
- import { RootWalletKeys } from '../bitgo';
2
+ import { Triple } from '../bitgo/types';
3
+ import { RootWalletKeys } from '../bitgo/wallet/WalletKeys';
4
4
  import { ECPairInterface } from '../noble_ecc';
5
5
  export type KeyTriple = Triple<BIP32Interface>;
6
6
  export type UncompressedKeyTriple = Triple<ECPairInterface>;
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/testutil/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,cAAc,EAAE,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAe,eAAe,EAAE,MAAM,cAAc,CAAC;AAK5D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC/C,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAE5D,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAEnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAEpD;AAaD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,qBAAqB,CAEtF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAEhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAarE;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/testutil/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,cAAc,EAAE,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAe,eAAe,EAAE,MAAM,cAAc,CAAC;AAK5D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC/C,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAE5D,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAEnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAEpD;AAaD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,qBAAqB,CAEtF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAEhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAarE;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
@@ -8,7 +8,7 @@ exports.getDefaultCosigner = getDefaultCosigner;
8
8
  exports.getDefaultWalletKeys = getDefaultWalletKeys;
9
9
  const bip32_1 = require("bip32");
10
10
  const crypto = require("crypto");
11
- const bitgo_1 = require("../bitgo");
11
+ const WalletKeys_1 = require("../bitgo/wallet/WalletKeys");
12
12
  const noble_ecc_1 = require("../noble_ecc");
13
13
  const networks_1 = require("../networks");
14
14
  const bip32 = (0, bip32_1.BIP32Factory)(noble_ecc_1.ecc);
@@ -49,6 +49,6 @@ function getDefaultCosigner(keyset, signer) {
49
49
  throw new Error(`signer not in pubkeys`);
50
50
  }
51
51
  function getDefaultWalletKeys() {
52
- return new bitgo_1.RootWalletKeys(getKeyTriple('default'));
52
+ return new WalletKeys_1.RootWalletKeys(getKeyTriple('default'));
53
53
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsd0JBRUM7QUFFRCxvQ0FFQztBQWFELDREQUVDO0FBRUQsZ0NBRUM7QUFFRCxnREFhQztBQUVELG9EQUVDO0FBekRELGlDQUErRDtBQUMvRCxpQ0FBaUM7QUFHakMsb0NBQTBDO0FBQzFDLDRDQUE0RDtBQUM1RCwwQ0FBdUM7QUFFdkMsTUFBTSxLQUFLLEdBQWEsSUFBQSxvQkFBWSxFQUFDLGVBQUcsQ0FBQyxDQUFDO0FBSzFDLFNBQWdCLE1BQU0sQ0FBQyxJQUFZO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsSUFBWTtJQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFLO0lBQy9CLDJDQUEyQztJQUMzQyxPQUFPLGtCQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3ZCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxtQkFBUSxDQUFDLE9BQU87UUFDekIsR0FBRyxFQUFFLEdBQVcsRUFBRTtZQUNoQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsTUFBc0I7SUFDN0QsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkcsQ0FBQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxNQUE4QixFQUFFLENBQWlCO0lBQzFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUksTUFBaUIsRUFBRSxNQUFTO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBSSxFQUFFLENBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3JDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CO0lBQ2xDLE9BQU8sSUFBSSxzQkFBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMkFQSSwgQklQMzJGYWN0b3J5LCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICcuLi9iaXRnbyc7XG5pbXBvcnQgeyBSb290V2FsbGV0S2V5cyB9IGZyb20gJy4uL2JpdGdvJztcbmltcG9ydCB7IGVjYywgRUNQYWlyLCBFQ1BhaXJJbnRlcmZhY2UgfSBmcm9tICcuLi9ub2JsZV9lY2MnO1xuaW1wb3J0IHsgbmV0d29ya3MgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5cbmNvbnN0IGJpcDMyOiBCSVAzMkFQSSA9IEJJUDMyRmFjdG9yeShlY2MpO1xuXG5leHBvcnQgdHlwZSBLZXlUcmlwbGUgPSBUcmlwbGU8QklQMzJJbnRlcmZhY2U+O1xuZXhwb3J0IHR5cGUgVW5jb21wcmVzc2VkS2V5VHJpcGxlID0gVHJpcGxlPEVDUGFpckludGVyZmFjZT47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoc2VlZDogc3RyaW5nKTogQklQMzJJbnRlcmZhY2Uge1xuICByZXR1cm4gYmlwMzIuZnJvbVNlZWQoY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShzZWVkKS5kaWdlc3QoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlUcmlwbGUoc2VlZDogc3RyaW5nKTogS2V5VHJpcGxlIHtcbiAgcmV0dXJuIFtnZXRLZXkoc2VlZCArICcuMCcpLCBnZXRLZXkoc2VlZCArICcuMScpLCBnZXRLZXkoc2VlZCArICcuMicpXTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5jb21wcmVzc2VkS2V5KGlucHV0KSB7XG4gIC8vIFVzaW5nIGlucHV0IGZvciBkZXRlcm1pbmlzdGljIHJhbmRvbW5lc3NcbiAgcmV0dXJuIEVDUGFpci5tYWtlUmFuZG9tKHtcbiAgICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgICBuZXR3b3JrOiBuZXR3b3Jrcy50ZXN0bmV0LFxuICAgIHJuZzogKCk6IEJ1ZmZlciA9PiB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDMyLCBpbnB1dCk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmNvbXByZXNzZWRLZXlUcmlwbGUoaW5wdXRzOiBUcmlwbGU8bnVtYmVyPik6IFVuY29tcHJlc3NlZEtleVRyaXBsZSB7XG4gIHJldHVybiBbZ2V0VW5jb21wcmVzc2VkS2V5KGlucHV0c1swXSksIGdldFVuY29tcHJlc3NlZEtleShpbnB1dHNbMV0pLCBnZXRVbmNvbXByZXNzZWRLZXkoaW5wdXRzWzJdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYW1lKHRyaXBsZTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPiwgazogQklQMzJJbnRlcmZhY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gWyd1c2VyJywgJ2JhY2t1cCcsICdiaXRnbyddW3RyaXBsZS5pbmRleE9mKGspXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRDb3NpZ25lcjxUPihrZXlzZXQ6IFRyaXBsZTxUPiwgc2lnbmVyOiBUKTogVCB7XG4gIGNvbnN0IGVxID0gKGE6IFQsIGI6IFQpID0+IGEgPT09IGIgfHwgKEJ1ZmZlci5pc0J1ZmZlcihhKSAmJiBCdWZmZXIuaXNCdWZmZXIoYikgJiYgYS5lcXVhbHMoYikpO1xuICBjb25zdCBbdXNlciwgYmFja3VwLCBiaXRnb10gPSBrZXlzZXQ7XG4gIGlmIChlcShzaWduZXIsIHVzZXIpKSB7XG4gICAgcmV0dXJuIGJpdGdvO1xuICB9XG4gIGlmIChlcShzaWduZXIsIGJhY2t1cCkpIHtcbiAgICByZXR1cm4gYml0Z287XG4gIH1cbiAgaWYgKGVxKHNpZ25lciwgYml0Z28pKSB7XG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBzaWduZXIgbm90IGluIHB1YmtleXNgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRXYWxsZXRLZXlzKCk6IFJvb3RXYWxsZXRLZXlzIHtcbiAgcmV0dXJuIG5ldyBSb290V2FsbGV0S2V5cyhnZXRLZXlUcmlwbGUoJ2RlZmF1bHQnKSk7XG59XG4iXX0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsd0JBRUM7QUFFRCxvQ0FFQztBQWFELDREQUVDO0FBRUQsZ0NBRUM7QUFFRCxnREFhQztBQUVELG9EQUVDO0FBekRELGlDQUErRDtBQUMvRCxpQ0FBaUM7QUFHakMsMkRBQTREO0FBQzVELDRDQUE0RDtBQUM1RCwwQ0FBdUM7QUFFdkMsTUFBTSxLQUFLLEdBQWEsSUFBQSxvQkFBWSxFQUFDLGVBQUcsQ0FBQyxDQUFDO0FBSzFDLFNBQWdCLE1BQU0sQ0FBQyxJQUFZO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsSUFBWTtJQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFLO0lBQy9CLDJDQUEyQztJQUMzQyxPQUFPLGtCQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3ZCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxtQkFBUSxDQUFDLE9BQU87UUFDekIsR0FBRyxFQUFFLEdBQVcsRUFBRTtZQUNoQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsTUFBc0I7SUFDN0QsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkcsQ0FBQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxNQUE4QixFQUFFLENBQWlCO0lBQzFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUksTUFBaUIsRUFBRSxNQUFTO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBSSxFQUFFLENBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3JDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CO0lBQ2xDLE9BQU8sSUFBSSwyQkFBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMkFQSSwgQklQMzJGYWN0b3J5LCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICcuLi9iaXRnby90eXBlcyc7XG5pbXBvcnQgeyBSb290V2FsbGV0S2V5cyB9IGZyb20gJy4uL2JpdGdvL3dhbGxldC9XYWxsZXRLZXlzJztcbmltcG9ydCB7IGVjYywgRUNQYWlyLCBFQ1BhaXJJbnRlcmZhY2UgfSBmcm9tICcuLi9ub2JsZV9lY2MnO1xuaW1wb3J0IHsgbmV0d29ya3MgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5cbmNvbnN0IGJpcDMyOiBCSVAzMkFQSSA9IEJJUDMyRmFjdG9yeShlY2MpO1xuXG5leHBvcnQgdHlwZSBLZXlUcmlwbGUgPSBUcmlwbGU8QklQMzJJbnRlcmZhY2U+O1xuZXhwb3J0IHR5cGUgVW5jb21wcmVzc2VkS2V5VHJpcGxlID0gVHJpcGxlPEVDUGFpckludGVyZmFjZT47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoc2VlZDogc3RyaW5nKTogQklQMzJJbnRlcmZhY2Uge1xuICByZXR1cm4gYmlwMzIuZnJvbVNlZWQoY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShzZWVkKS5kaWdlc3QoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlUcmlwbGUoc2VlZDogc3RyaW5nKTogS2V5VHJpcGxlIHtcbiAgcmV0dXJuIFtnZXRLZXkoc2VlZCArICcuMCcpLCBnZXRLZXkoc2VlZCArICcuMScpLCBnZXRLZXkoc2VlZCArICcuMicpXTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5jb21wcmVzc2VkS2V5KGlucHV0KSB7XG4gIC8vIFVzaW5nIGlucHV0IGZvciBkZXRlcm1pbmlzdGljIHJhbmRvbW5lc3NcbiAgcmV0dXJuIEVDUGFpci5tYWtlUmFuZG9tKHtcbiAgICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgICBuZXR3b3JrOiBuZXR3b3Jrcy50ZXN0bmV0LFxuICAgIHJuZzogKCk6IEJ1ZmZlciA9PiB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDMyLCBpbnB1dCk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmNvbXByZXNzZWRLZXlUcmlwbGUoaW5wdXRzOiBUcmlwbGU8bnVtYmVyPik6IFVuY29tcHJlc3NlZEtleVRyaXBsZSB7XG4gIHJldHVybiBbZ2V0VW5jb21wcmVzc2VkS2V5KGlucHV0c1swXSksIGdldFVuY29tcHJlc3NlZEtleShpbnB1dHNbMV0pLCBnZXRVbmNvbXByZXNzZWRLZXkoaW5wdXRzWzJdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYW1lKHRyaXBsZTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPiwgazogQklQMzJJbnRlcmZhY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gWyd1c2VyJywgJ2JhY2t1cCcsICdiaXRnbyddW3RyaXBsZS5pbmRleE9mKGspXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRDb3NpZ25lcjxUPihrZXlzZXQ6IFRyaXBsZTxUPiwgc2lnbmVyOiBUKTogVCB7XG4gIGNvbnN0IGVxID0gKGE6IFQsIGI6IFQpID0+IGEgPT09IGIgfHwgKEJ1ZmZlci5pc0J1ZmZlcihhKSAmJiBCdWZmZXIuaXNCdWZmZXIoYikgJiYgYS5lcXVhbHMoYikpO1xuICBjb25zdCBbdXNlciwgYmFja3VwLCBiaXRnb10gPSBrZXlzZXQ7XG4gIGlmIChlcShzaWduZXIsIHVzZXIpKSB7XG4gICAgcmV0dXJuIGJpdGdvO1xuICB9XG4gIGlmIChlcShzaWduZXIsIGJhY2t1cCkpIHtcbiAgICByZXR1cm4gYml0Z287XG4gIH1cbiAgaWYgKGVxKHNpZ25lciwgYml0Z28pKSB7XG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBzaWduZXIgbm90IGluIHB1YmtleXNgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRXYWxsZXRLZXlzKCk6IFJvb3RXYWxsZXRLZXlzIHtcbiAgcmV0dXJuIG5ldyBSb290V2FsbGV0S2V5cyhnZXRLZXlUcmlwbGUoJ2RlZmF1bHQnKSk7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/utxo-lib",
3
- "version": "8.0.3-beta.794",
3
+ "version": "8.0.3-beta.796",
4
4
  "description": "Client-side Bitcoin JavaScript library",
5
5
  "main": "./dist/src/index.js",
6
6
  "engines": {
@@ -46,7 +46,7 @@
46
46
  "dist/src"
47
47
  ],
48
48
  "dependencies": {
49
- "@bitgo-beta/blake2b": "3.0.4-beta.1030",
49
+ "@bitgo-beta/blake2b": "3.0.4-beta.1032",
50
50
  "@brandonblack/musig": "^0.0.1-alpha.0",
51
51
  "@noble/curves": "1.8.1",
52
52
  "@noble/secp256k1": "1.6.3",
@@ -82,5 +82,5 @@
82
82
  },
83
83
  "author": "BitGo SDK Team <sdkteam@bitgo.com>",
84
84
  "license": "MIT",
85
- "gitHead": "fa65999c82377b2da2ec43e15161871cbc0c51b5"
85
+ "gitHead": "024f8441159145dff776a0e1eac9f512d7d4d128"
86
86
  }