@bitgo-beta/unspents 0.13.2-beta.208 → 0.13.2-beta.2080

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +0 -9
  2. package/dist/bin/generate_tables.js +25 -12
  3. package/dist/src/codes.d.ts +10 -10
  4. package/dist/src/codes.d.ts.map +1 -1
  5. package/dist/src/codes.js +27 -13
  6. package/dist/src/dimensions.d.ts +13 -15
  7. package/dist/src/dimensions.d.ts.map +1 -1
  8. package/dist/src/dimensions.js +30 -16
  9. package/dist/src/index.d.ts +1 -0
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +26 -10
  12. package/dist/src/inputWeights.d.ts +3 -3
  13. package/dist/src/inputWeights.d.ts.map +1 -1
  14. package/dist/src/inputWeights.js +6 -6
  15. package/dist/src/scriptSizes.js +3 -4
  16. package/dist/src/types.js +23 -9
  17. package/dist/src/virtualSizes.d.ts +12 -12
  18. package/dist/src/virtualSizes.js +2 -2
  19. package/dist/src/zcash.js +4 -6
  20. package/dist/test/dimensions.js +26 -12
  21. package/dist/test/signedTx/inputWeights.js +27 -13
  22. package/dist/test/signedTx/txCombinations.d.ts +1 -1
  23. package/dist/test/signedTx/txCombinations.d.ts.map +1 -1
  24. package/dist/test/signedTx/txCombinations.js +29 -15
  25. package/dist/test/signedTx/txGen.d.ts +2 -3
  26. package/dist/test/signedTx/txGen.d.ts.map +1 -1
  27. package/dist/test/signedTx/txGen.js +26 -12
  28. package/dist/test/testutils.d.ts +2 -2
  29. package/dist/test/testutils.d.ts.map +1 -1
  30. package/dist/test/testutils.js +28 -14
  31. package/dist/test/zcash.js +8 -8
  32. package/dist/tsconfig.build.tsbuildinfo +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +9 -6
  35. package/.eslintignore +0 -1
  36. package/.eslintrc.js +0 -3
  37. package/.mocharc.js +0 -6
  38. package/.prettierrc.yml +0 -3
  39. package/CHANGELOG.md +0 -479
  40. package/bin/generate_tables.ts +0 -94
  41. package/docs/input-costs.md +0 -13
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,22 +15,31 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.Dimensions = exports.OutputDimensions = exports.VirtualSizes = void 0;
36
+ exports.Dimensions = exports.OutputDimensions = void 0;
23
37
  const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
24
38
  const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
25
39
  const { isChainCode, scriptTypeForChain } = utxo_lib_1.bitgo;
26
40
  const scriptSizes_1 = require("./scriptSizes");
27
41
  const types_1 = require("./types");
28
42
  const virtualSizes_1 = require("./virtualSizes");
29
- Object.defineProperty(exports, "VirtualSizes", { enumerable: true, get: function () { return virtualSizes_1.VirtualSizes; } });
30
43
  /**
31
44
  * Apply `f` to all properties of `d`
32
45
  */
@@ -172,7 +185,7 @@ class Dimensions {
172
185
  if (!types_1.PositiveInteger.is(scriptLength)) {
173
186
  throw new TypeError(`expected positive integer for scriptLength, got ${scriptLength}`);
174
187
  }
175
- return scriptLength + scriptSizes_1.compactSize(scriptLength) + virtualSizes_1.VirtualSizes.txOutputAmountSize;
188
+ return scriptLength + (0, scriptSizes_1.compactSize)(scriptLength) + virtualSizes_1.VirtualSizes.txOutputAmountSize;
176
189
  }
177
190
  /**
178
191
  * @return
@@ -222,8 +235,7 @@ class Dimensions {
222
235
  * [param.assumeUnsigned] - default type for unsigned input
223
236
  */
224
237
  static fromInput(input, params = {}) {
225
- var _a, _b;
226
- if (((_a = input.script) === null || _a === void 0 ? void 0 : _a.length) || ((_b = input.witness) === null || _b === void 0 ? void 0 : _b.length)) {
238
+ if (input.script?.length || input.witness?.length) {
227
239
  const parsed = utxolib.bitgo.parseSignatureScript(input);
228
240
  return Dimensions.fromScriptType(parsed.scriptType, parsed);
229
241
  }
@@ -369,8 +381,7 @@ class Dimensions {
369
381
  }
370
382
  }
371
383
  return mapDimensions(this, (key, v) => {
372
- var _a;
373
- const w = (_a = dimensions[key]) !== null && _a !== void 0 ? _a : Dimensions.ZERO[key];
384
+ const w = dimensions[key] ?? Dimensions.ZERO[key];
374
385
  if (key === 'outputs') {
375
386
  const vOutputs = v;
376
387
  const wOutputs = w;
@@ -461,6 +472,7 @@ class Dimensions {
461
472
  }
462
473
  exports.Dimensions = Dimensions;
463
474
  Dimensions.ZERO = Object.freeze(new Dimensions());
475
+ // Initialize static properties that require the class to be fully defined first
464
476
  Dimensions.SingleOutput = Object.freeze({
465
477
  p2sh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2shOutputSize),
466
478
  p2shP2wsh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2shP2wshOutputSize),
@@ -469,6 +481,7 @@ Dimensions.SingleOutput = Object.freeze({
469
481
  p2pkh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2pkhOutputSize),
470
482
  p2wpkh: Dimensions.singleOutput(virtualSizes_1.VirtualSizes.txP2wpkhOutputSize),
471
483
  });
484
+ // Initialize SingleInput after the class is fully defined
472
485
  Dimensions.SingleInput = Object.freeze({
473
486
  p2sh: Dimensions.sum({ nP2shInputs: 1 }),
474
487
  p2shP2wsh: Dimensions.sum({ nP2shP2wshInputs: 1 }),
@@ -478,6 +491,7 @@ Dimensions.SingleInput = Object.freeze({
478
491
  p2trScriptPathLevel2: Dimensions.sum({ nP2trScriptPathLevel2Inputs: 1 }),
479
492
  p2shP2pk: Dimensions.sum({ nP2shP2pkInputs: 1 }),
480
493
  });
494
+ // Initialize the ASSUME_ constants
481
495
  Dimensions.ASSUME_P2SH = Dimensions.SingleInput.p2sh;
482
496
  Dimensions.ASSUME_P2SH_P2WSH = Dimensions.SingleInput.p2shP2wsh;
483
497
  Dimensions.ASSUME_P2WSH = Dimensions.SingleInput.p2wsh;
@@ -485,4 +499,4 @@ Dimensions.ASSUME_P2TR_KEYPATH = Dimensions.SingleInput.p2trKeypath;
485
499
  Dimensions.ASSUME_P2TR_SCRIPTPATH_LEVEL1 = Dimensions.SingleInput.p2trScriptPathLevel1;
486
500
  Dimensions.ASSUME_P2TR_SCRIPTPATH_LEVEL2 = Dimensions.SingleInput.p2trScriptPathLevel2;
487
501
  Dimensions.ASSUME_P2SH_P2PK_INPUT = Dimensions.SingleInput.p2shP2pk;
488
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaW1lbnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBZ0Q7QUFDaEQsbURBQTZDO0FBQzdDLE1BQU0sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxnQkFBSyxDQUFDO0FBR2xELCtDQUE0QztBQUM1QyxtQ0FBMEM7QUFFMUMsaURBQThDO0FBQ3JDLDZGQURBLDJCQUFZLE9BQ0E7QUFFckI7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FDcEIsQ0FBc0IsRUFDdEIsQ0FBZ0Y7SUFFaEYsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEcsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQWEsZ0JBQWdCO0lBVTNCLFlBQVksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEtBQXVCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQzNFLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7YUFDcEU7U0FDRjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxD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L3V0eG8tbGliJztcbmltcG9ydCB7IGJpdGdvIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuY29uc3QgeyBpc0NoYWluQ29kZSwgc2NyaXB0VHlwZUZvckNoYWluIH0gPSBiaXRnbztcbnR5cGUgQ2hhaW5Db2RlID0gYml0Z28uQ2hhaW5Db2RlO1xuXG5pbXBvcnQgeyBjb21wYWN0U2l6ZSB9IGZyb20gJy4vc2NyaXB0U2l6ZXMnO1xuaW1wb3J0IHsgUG9zaXRpdmVJbnRlZ2VyIH0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB7IFZpcnR1YWxTaXplcyB9IGZyb20gJy4vdmlydHVhbFNpemVzJztcbmV4cG9ydCB7IFZpcnR1YWxTaXplcyB9O1xuXG4vKipcbiAqIEFwcGx5IGBmYCB0byBhbGwgcHJvcGVydGllcyBvZiBgZGBcbiAqL1xuZnVuY3Rpb24gbWFwRGltZW5zaW9ucyhcbiAgZDogUGFydGlhbDxEaW1lbnNpb25zPixcbiAgZjogPFQgZXh0ZW5kcyBrZXlvZiBEaW1lbnNpb25zPihrZXk6IFQsIHY6IERpbWVuc2lvbnNbVF0gfCB1bmRlZmluZWQpID0+IHVua25vd25cbik6IERpbWVuc2lvbnMge1xuICByZXR1cm4gbmV3IERpbWVuc2lvbnMoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGQpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCBmKGtleSBhcyBrZXlvZiBEaW1lbnNpb25zLCB2YWx1ZSldKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGUgY291bnQgYW5kIHNpemUgb2YgdHJhbnNhY3Rpb24gb3V0cHV0c1xuICovXG5leHBvcnQgY2xhc3MgT3V0cHV0RGltZW5zaW9ucyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygb3V0cHV0c1xuICAgKi9cbiAgY291bnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEFnZ3JlZ2F0ZSB2U2l6ZVxuICAgKi9cbiAgc2l6ZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHsgY291bnQgPSAwLCBzaXplID0gMCB9OiBPdXRwdXREaW1lbnNpb25zID0geyBjb3VudDogMCwgc2l6ZTogMCB9KSB7XG4gICAgaWYgKGNvdW50ID09PSAwIHx8IHNpemUgPT09IDApIHtcbiAgICAgIGlmIChjb3VudCAhPT0gMCB8fCBzaXplICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY291bnQgYW5kIHNpemUgbXVzdCBib3RoIGJlIHplcm8gaWYgb25lIGlzIHplcm9gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvdW50ID0gY291bnQ7XG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEZyb21JbnB1dFBhcmFtcyB7XG4gIC8vIEluIGNhc2VzIHdoZXJlIHRoZSBpbnB1dCB0eXBlIGlzIGFtYmlndW91cywgd2UgbXVzdCBwcm92aWRlIGEgaGludCBhYm91dCBzcGVuZCBzY3JpcHQgdHlwZS5cbiAgYXNzdW1lVW5zaWduZWQ/OiBEaW1lbnNpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyb21VbnNwZW50UGFyYW1zIHtcbiAgcDJ0cjoge1xuICAgIHNjcmlwdFBhdGhMZXZlbD86IG51bWJlcjtcbiAgfTtcbiAgcDJ0ck11c2lnMjoge1xuICAgIHNjcmlwdFBhdGhMZXZlbD86IG51bWJlcjtcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFVuc3BlbnRQYXJhbXM6IEZyb21VbnNwZW50UGFyYW1zID0ge1xuICBwMnRyOiB7XG4gICAgLy8gRGVmYXVsdCB0byByZWNvdmVyeSBzY3JpcHQgcGF0aHMsIHRvIG1ha2UgaXQgZWFzaWVyIGZvciByZWNvdmVyeSBjYXNlIGNhbGxlcnMgKFdSVyBldGMpLlxuICAgIC8vIFdQIGNhbiBleHBsaWNpdGx5IHBhc3Mgc2NyaXB0UGF0aExldmVsOiAxIHRvIHVzZSBoYXBweSBwYXRoLlxuICAgIHNjcmlwdFBhdGhMZXZlbDogMixcbiAgfSxcbiAgcDJ0ck11c2lnMjoge1xuICAgIC8vIERlZmF1bHQgdG8gc2NyaXB0IHBhdGggc3BlbmQsIHRvIG1ha2UgaXQgZWFzaWVyIGZvciByZWNvdmVyeSBjYXNlIGNhbGxlcnMgKFdSVyBldGMpLlxuICAgIC8vIFdQIGNhbiBleHBsaWNpdGx5IHBhc3Mgc2NyaXB0UGF0aExldmVsOiB1bmRlZmluZWQgdG8gdXNlIGtleSBwYXRoLlxuICAgIHNjcmlwdFBhdGhMZXZlbDogMSxcbiAgfSxcbn07XG5cbi8qKlxuICogRGltZW5zaW9ucyBvZiBhIEJpdEdvIHdhbGxldCB0cmFuc2FjdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25zIHtcbiAgLyoqIElucHV0IGNvdW50cyBmb3IgQml0R28gd2FsbGV0IG11bHRpLXNpZ25hdHVyZSBpbnB1dHMgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5QMnNoSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAyc2hQMndzaElucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMndzaElucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMnRyS2V5cGF0aElucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0czogbnVtYmVyID0gMDtcblxuICAvKiBJbnB1dCBjb3VudCBmb3Igc2luZ2xlLXNpZ25hdHVyZSBpbnB1dHMgKFJlcGxheSBQcm90ZWN0aW9uIGlucHV0cykgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5QMnNoUDJwa0lucHV0czogbnVtYmVyID0gMDtcblxuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogT3V0cHV0RGltZW5zaW9ucyA9IG5ldyBPdXRwdXREaW1lbnNpb25zKCk7XG5cbiAgY29uc3RydWN0b3IoZDogUGFydGlhbDxEaW1lbnNpb25zPiA9IHt9KSB7XG4gICAgT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB0aGlzLnNldFByb3BlcnR5KGtleSwgdmFsdWUpKTtcblxuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cblxuICBwcml2YXRlIHNldFByb3BlcnR5KGs6IHN0cmluZywgdjogdW5rbm93bik6IHZvaWQge1xuICAgIHN3aXRjaCAoaykge1xuICAgICAgY2FzZSAnblAyc2hJbnB1dHMnOlxuICAgICAgY2FzZSAnblAyc2hQMndzaElucHV0cyc6XG4gICAgICBjYXNlICduUDJ3c2hJbnB1dHMnOlxuICAgICAgY2FzZSAnblAydHJLZXlwYXRoSW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyc6XG4gICAgICBjYXNlICduUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMnOlxuICAgICAgY2FzZSAnblAyc2hQMnBrSW5wdXRzJzpcbiAgICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtrfSBtdXN0IGJlIG51bWJlcmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodikgfHwgdiA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3BlcnR5ICR7a30gbXVzdCBiZSB6ZXJvIG9yIHBvc2l0aXZlIGludGVnZXJgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ291dHB1dHMnOlxuICAgICAgICBpZiAoISh2IGluc3RhbmNlb2YgT3V0cHV0RGltZW5zaW9ucykpIHtcbiAgICAgICAgICB2ID0gbmV3IE91dHB1dERpbWVuc2lvbnModiBhcyBPdXRwdXREaW1lbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBwcm9wZXJ0eSAke2t9YCk7XG4gICAgfVxuXG4gICAgKHRoaXMgYXMgYW55KVtrXSA9IHY7XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IERpbWVuc2lvbnMoKSk7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBaRVJPXG4gICAqIEByZXR1cm4gRGltZW5zaW9ucyBmb3IgYW4gZW1wdHkgdHJhbnNhY3Rpb25cbiAgICovXG4gIHN0YXRpYyB6ZXJvKCk6IFJlYWRvbmx5PERpbWVuc2lvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5aRVJPO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzaXplXG4gICAqIEByZXR1cm4gRGltZW5zaW9ucyBmb3IgYSBzaW5nbGUgb3V0cHV0IHdpdGggZ2l2ZW4gc2l6ZVxuICAgKi9cbiAgc3RhdGljIHNpbmdsZU91dHB1dChzaXplOiBudW1iZXIpOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oeyBvdXRwdXRzOiB7IGNvdW50OiAxLCBzaXplIH0gfSk7XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgU2luZ2xlT3V0cHV0ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgcDJzaDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJzaE91dHB1dFNpemUpLFxuICAgIHAyc2hQMndzaDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJzaFAyd3NoT3V0cHV0U2l6ZSksXG4gICAgcDJ3c2g6IERpbWVuc2lvbnMuc2luZ2xlT3V0cHV0KFZpcnR1YWxTaXplcy50eFAyd3NoT3V0cHV0U2l6ZSksXG4gICAgcDJ0cjogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJ0ck91dHB1dFNpemUpLFxuXG4gICAgcDJwa2g6IERpbWVuc2lvbnMuc2luZ2xlT3V0cHV0KFZpcnR1YWxTaXplcy50eFAycGtoT3V0cHV0U2l6ZSksXG4gICAgcDJ3cGtoOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMndwa2hPdXRwdXRTaXplKSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm4gTnVtYmVyIG9mIHRvdGFsIGlucHV0cyAocDJzaCArIHAyc2hQMndzaCArIHAyd3NoICsgcDJ0cilcbiAgICovXG4gIGdldCBuSW5wdXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMublAyc2hJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJzaFAyd3NoSW5wdXRzICtcbiAgICAgIHRoaXMublAyd3NoSW5wdXRzICtcbiAgICAgIHRoaXMublAydHJLZXlwYXRoSW5wdXRzICtcbiAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzICtcbiAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzICtcbiAgICAgIHRoaXMublAyc2hQMnBrSW5wdXRzXG4gICAgKTtcbiAgfVxuXG4gIHNldCBuSW5wdXRzKF86IG51bWJlcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVhZC1vbmx5IHByb3BlcnR5IG5JbnB1dHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIE51bWJlciBvZiB0b3RhbCBvdXRwdXRzXG4gICAqL1xuICBnZXQgbk91dHB1dHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vdXRwdXRzLmNvdW50O1xuICB9XG5cbiAgc2V0IG5PdXRwdXRzKF86IG51bWJlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmVhZC1vbmx5IHByb3BlcnR5IG5PdXRwdXRzYCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGFyZ3MgLSBEaW1lbnNpb25zIChjYW4gYmUgcGFydGlhbGx5IGRlZmluZWQpXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IHN1bSBvZiBhcmd1bWVudHNcbiAgICovXG4gIHN0YXRpYyBzdW0oLi4uYXJnczogUGFydGlhbDxEaW1lbnNpb25zPltdKTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKChhOiBEaW1lbnNpb25zLCBiOiBQYXJ0aWFsPERpbWVuc2lvbnM+KSA9PiBhLnBsdXMoYiksIG5ldyBEaW1lbnNpb25zKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0T3V0cHV0U2NyaXB0TGVuZ3RoRm9yQ2hhaW4oY2hhaW46IENoYWluQ29kZSk6IG51bWJlciB7XG4gICAgc3dpdGNoIChzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pKSB7XG4gICAgICBjYXNlICdwMndzaCc6XG4gICAgICBjYXNlICdwMnRyJzpcbiAgICAgIGNhc2UgJ3AydHJNdXNpZzInOlxuICAgICAgICByZXR1cm4gMzQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gMjM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzY3JpcHRMZW5ndGhcbiAgICogQHJldHVybiB7TnVtYmVyfSB2U2l6ZSBvZiBhbiBvdXRwdXQgd2l0aCBzY3JpcHQgbGVuZ3RoXG4gICAqL1xuICBzdGF0aWMgZ2V0VlNpemVGb3JPdXRwdXRXaXRoU2NyaXB0TGVuZ3RoKHNjcmlwdExlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIVBvc2l0aXZlSW50ZWdlci5pcyhzY3JpcHRMZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBleHBlY3RlZCBwb3NpdGl2ZSBpbnRlZ2VyIGZvciBzY3JpcHRMZW5ndGgsIGdvdCAke3NjcmlwdExlbmd0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjcmlwdExlbmd0aCArIGNvbXBhY3RTaXplKHNjcmlwdExlbmd0aCkgKyBWaXJ0dWFsU2l6ZXMudHhPdXRwdXRBbW91bnRTaXplO1xuICB9XG5cbiAgc3RhdGljIHJlYWRvbmx5IFNpbmdsZUlucHV0ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgcDJzaDogRGltZW5zaW9ucy5zdW0oeyBuUDJzaElucHV0czogMSB9KSxcbiAgICBwMnNoUDJ3c2g6IERpbWVuc2lvbnMuc3VtKHsgblAyc2hQMndzaElucHV0czogMSB9KSxcbiAgICBwMndzaDogRGltZW5zaW9ucy5zdW0oeyBuUDJ3c2hJbnB1dHM6IDEgfSksXG4gICAgcDJ0cktleXBhdGg6IERpbWVuc2lvbnMuc3VtKHsgblAydHJLZXlwYXRoSW5wdXRzOiAxIH0pLFxuICAgIHAydHJTY3JpcHRQYXRoTGV2ZWwxOiBEaW1lbnNpb25zLnN1bSh7IG5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0czogMSB9KSxcbiAgICBwMnRyU2NyaXB0UGF0aExldmVsMjogRGltZW5zaW9ucy5zdW0oeyBuUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHM6IDEgfSksXG4gICAgcDJzaFAycGs6IERpbWVuc2lvbnMuc3VtKHsgblAyc2hQMnBrSW5wdXRzOiAxIH0pLFxuICB9KTtcblxuICAvKipcbiAgICogQHJldHVyblxuICAgKi9cbiAgc3RhdGljIGZyb21TY3JpcHRUeXBlKFxuICAgIHNjcmlwdFR5cGU6IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlIHwgdXR4b2xpYi5iaXRnby5QYXJzZWRTY3JpcHRUeXBlMk9mMyB8ICdwMnBraCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBzY3JpcHRQYXRoTGV2ZWw/OiBudW1iZXI7XG4gICAgfSA9IHt9XG4gICk6IERpbWVuc2lvbnMge1xuICAgIHN3aXRjaCAoc2NyaXB0VHlwZSkge1xuICAgICAgY2FzZSAncDJzaCc6XG4gICAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgY2FzZSAncDJ3c2gnOlxuICAgICAgY2FzZSAncDJzaFAycGsnOlxuICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dFtzY3JpcHRUeXBlXTtcbiAgICAgIGNhc2UgJ3AydHInOlxuICAgICAgY2FzZSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc6XG4gICAgICAgIHN3aXRjaCAocGFyYW1zLnNjcmlwdFBhdGhMZXZlbCkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwxO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwyO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgc2NyaXB0IHBhdGggbGV2ZWxgKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICAgIHN3aXRjaCAocGFyYW1zLnNjcmlwdFBhdGhMZXZlbCkge1xuICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0cktleXBhdGg7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0clNjcmlwdFBhdGhMZXZlbDE7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBzY3JpcHQgcGF0aCBsZXZlbGApO1xuICAgICAgICB9XG4gICAgICBjYXNlICd0YXByb290S2V5UGF0aFNwZW5kJzpcbiAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0cktleXBhdGg7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgc2NyaXB0VHlwZSAke3NjcmlwdFR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHJlYWRvbmx5IEFTU1VNRV9QMlNIID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnNoO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyU0hfUDJXU0ggPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyc2hQMndzaDtcbiAgc3RhdGljIHJlYWRvbmx5IEFTU1VNRV9QMldTSCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ3c2g7XG4gIHN0YXRpYyByZWFkb25seSBBU1NVTUVfUDJUUl9LRVlQQVRIID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyS2V5cGF0aDtcbiAgc3RhdGljIHJlYWRvbmx5IEFTU1VNRV9QMlRSX1NDUklQVFBBVEhfTEVWRUwxID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMTtcbiAgc3RhdGljIHJlYWRvbmx5IEFTU1VNRV9QMlRSX1NDUklQVFBBVEhfTEVWRUwyID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMjtcbiAgc3RhdGljIHJlYWRvbmx5IEFTU1VNRV9QMlNIX1AyUEtfSU5QVVQgPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyc2hQMnBrO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEFzc3VtZWREaW1lbnNpb24ocGFyYW1zOiBGcm9tSW5wdXRQYXJhbXMgPSB7fSwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHsgYXNzdW1lVW5zaWduZWQgfSA9IHBhcmFtcztcbiAgICBpZiAoIWFzc3VtZVVuc2lnbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGlsbGVnYWwgaW5wdXQgJHtpbmRleH06IGVtcHR5IHNjcmlwdCBhbmQgYXNzdW1lVW5zaWduZWQgbm90IHNldGApO1xuICAgIH1cbiAgICByZXR1cm4gYXNzdW1lVW5zaWduZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGlucHV0IC0gdGhlIHRyYW5zYWN0aW9uIGlucHV0IHRvIGNvdW50XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogICAgICAgIFtwYXJhbS5hc3N1bWVVbnNpZ25lZF0gLSBkZWZhdWx0IHR5cGUgZm9yIHVuc2lnbmVkIGlucHV0XG4gICAqL1xuICBzdGF0aWMgZnJvbUlucHV0KGlucHV0OiB1dHhvbGliLlR4SW5wdXQsIHBhcmFtczogRnJvbUlucHV0UGFyYW1zID0ge30pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoaW5wdXQuc2NyaXB0Py5sZW5ndGggfHwgaW5wdXQud2l0bmVzcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB1dHhvbGliLmJpdGdvLnBhcnNlU2lnbmF0dXJlU2NyaXB0KGlucHV0KTtcbiAgICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21TY3JpcHRUeXBlKHBhcnNlZC5zY3JpcHRUeXBlLCBwYXJzZWQgYXMgeyBzY3JpcHRQYXRoTGV2ZWw/OiBudW1iZXIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZ2V0QXNzdW1lZERpbWVuc2lvbihwYXJhbXMsIGlucHV0LmluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgRGltZW5zaW9ucyBmcm9tIHBzYnQgaW5wdXRcbiAgICogQHBhcmFtIGlucHV0IC0gcHNidCBpbnB1dFxuICAgKi9cbiAgc3RhdGljIGZyb21Qc2J0SW5wdXQoaW5wdXQ6IGJpdGdvLlBzYnRJbnB1dFR5cGUpOiBEaW1lbnNpb25zIHtcbiAgICBjb25zdCBwYXJzZWQgPSBiaXRnby5wYXJzZVBzYnRJbnB1dChpbnB1dCk7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVNjcmlwdFR5cGUocGFyc2VkLnNjcmlwdFR5cGUsIHBhcnNlZCBhcyB7IHNjcmlwdFBhdGhMZXZlbD86IG51bWJlciB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaW5wdXRzIC0gQXJyYXkgb2YgaW5wdXRzXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBAc2VlIERpbWVuc2lvbnMuZnJvbUlucHV0KClcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIHRoZSBkaW1lbnNpb25zIGZvciBlYWNoIGlucHV0IChAc2VlIERpbWVuc2lvbnMuZnJvbUlucHV0KCkpXG4gICAqL1xuICBzdGF0aWMgZnJvbUlucHV0cyhpbnB1dHM6IHV0eG9saWIuVHhJbnB1dFtdLCBwYXJhbXM/OiBGcm9tSW5wdXRQYXJhbXMpOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW5wdXRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLmlucHV0cy5tYXAoKGkpID0+IERpbWVuc2lvbnMuZnJvbUlucHV0KGksIHBhcmFtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgRGltZW5zaW9ucyBmcm9tIG11bHRpcGxlIHBzYnQgaW5wdXRzXG4gICAqIEBwYXJhbSBpbnB1dHMgcHNidCBpbnB1dCBhcnJheVxuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSBzdW0gb2YgdGhlIGRpbWVuc2lvbnMgZm9yIGVhY2ggaW5wdXQgKEBzZWUgRGltZW5zaW9ucy5mcm9tUHNidElucHV0KCkpXG4gICAqL1xuICBzdGF0aWMgZnJvbVBzYnRJbnB1dHMoaW5wdXRzOiBiaXRnby5Qc2J0SW5wdXRUeXBlW10pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW5wdXRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLmlucHV0cy5tYXAoKGlucHV0LCBfKSA9PiBEaW1lbnNpb25zLmZyb21Qc2J0SW5wdXQoaW5wdXQpKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNjcmlwdExlbmd0aCB7bnVtYmVyfSAtIHNpemUgb2YgdGhlIG91dHB1dCBzY3JpcHQgaW4gYnl0ZXNcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gLSBEaW1lbnNpb25zIG9mIHRoZSBvdXRwdXRcbiAgICovXG4gIHN0YXRpYyBmcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKHNjcmlwdExlbmd0aDogbnVtYmVyKTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKHtcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgY291bnQ6IDEsXG4gICAgICAgIHNpemU6IERpbWVuc2lvbnMuZ2V0VlNpemVGb3JPdXRwdXRXaXRoU2NyaXB0TGVuZ3RoKHNjcmlwdExlbmd0aCksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvdXRwdXQgLSBhIHR4IG91dHB1dFxuICAgKiBAcmV0dXJuIERpbWVuc2lvbnMgLSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZ2l2ZW4gb3V0cHV0XG4gICAqL1xuICBzdGF0aWMgZnJvbU91dHB1dCh7IHNjcmlwdCB9OiB7IHNjcmlwdDogQnVmZmVyIH0pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoIXNjcmlwdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBvdXRwdXQgc2NyaXB0IHRvIGJlIGRlZmluZWQnKTtcbiAgICB9XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2NyaXB0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgc2NyaXB0IHRvIGJlIGJ1ZmZlciwgZ290ICcgKyB0eXBlb2Ygc2NyaXB0KTtcbiAgICB9XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aChzY3JpcHQubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3V0cHV0cyAtIEFycmF5IG9mIG91dHB1dHNcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIHRoZSBkaW1lbnNpb25zIGZvciBlYWNoIG91dHB1dCAoQHNlZSBEaW1lbnNpb25zLmZyb21PdXRwdXQoKSlcbiAgICovXG4gIHN0YXRpYyBmcm9tT3V0cHV0cyhvdXRwdXRzOiB7IHNjcmlwdDogQnVmZmVyIH1bXSk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvdXRwdXRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgb3V0cHV0cyBtdXN0IGJlIGFycmF5YCk7XG4gICAgfVxuICAgIHJldHVybiBEaW1lbnNpb25zLnN1bSguLi5vdXRwdXRzLm1hcChEaW1lbnNpb25zLmZyb21PdXRwdXQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkaW1lbnNpb25zIG9mIGFuIG91dHB1dCB0aGF0IHdpbGwgYmUgY3JlYXRlZCBvbiBhIHNwZWNpZmljIGNoYWluLlxuICAgKiBDdXJyZW50bHksIHRoaXMgc2ltcGx5IGFkZHMgYSBkZWZhdWx0IG91dHB1dC5cbiAgICpcbiAgICogQHBhcmFtIGNoYWluIC0gQ2hhaW4gY29kZSBhcyBkZWZpbmVkIGJ5IHV0eG9saWIuYml0Z29cbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gLSBEaW1lbnNpb25zIGZvciBhIHNpbmdsZSBvdXRwdXQgb24gdGhlIGdpdmVuIGNoYWluLlxuICAgKi9cbiAgc3RhdGljIGZyb21PdXRwdXRPbkNoYWluKGNoYWluOiBDaGFpbkNvZGUpOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKERpbWVuc2lvbnMuZ2V0T3V0cHV0U2NyaXB0TGVuZ3RoRm9yQ2hhaW4oY2hhaW4pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGltZW5zaW9ucyBvZiBhbiB1bnNwZW50IGFjY29yZGluZyB0byBgY2hhaW5gIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gY2hhaW4gLSBDaGFpbiBjb2RlIGFzIGRlZmluZWQgYnkgdXR4by5jaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zIC0gSGludCBmb3IgdW5zcGVudHMgd2l0aCB2YXJpYWJsZSBpbnB1dCBzaXplcyAocDJ0ciwgcDJ0ck11c2lnMilcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gb2YgdGhlIHVuc3BlbnRcbiAgICogQHRocm93cyBpZiB0aGUgY2hhaW4gY29kZSBpcyBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkXG4gICAqL1xuICBzdGF0aWMgZnJvbVVuc3BlbnQoeyBjaGFpbiB9OiB7IGNoYWluOiBudW1iZXIgfSwgcGFyYW1zOiBGcm9tVW5zcGVudFBhcmFtcyA9IGRlZmF1bHRVbnNwZW50UGFyYW1zKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFpc0NoYWluQ29kZShjaGFpbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgY2hhaW4gY29kZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pO1xuXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVNjcmlwdFR5cGUoXG4gICAgICBzY3JpcHRUeXBlLFxuICAgICAgc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gcGFyYW1zLnAydHIgOiBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicgPyBwYXJhbXMucDJ0ck11c2lnMiA6IHt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudHNcbiAgICogQHBhcmFtIHBhcmFtcyAtIEhpbnQgZm9yIHVuc3BlbnRzIHdpdGggdmFyaWFibGUgaW5wdXQgc2l6ZXMgKHAydHIsIHAydHJNdXNpZzIpXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IHN1bSBvZiB0aGUgZGltZW5zaW9ucyBmb3IgZWFjaCB1bnNwZW50IChAc2VlIERpbWVuc2lvbnMuZnJvbVVuc3BlbnQoKSlcbiAgICovXG4gIHN0YXRpYyBmcm9tVW5zcGVudHModW5zcGVudHM6IHsgY2hhaW46IENoYWluQ29kZSB9W10sIHBhcmFtczogRnJvbVVuc3BlbnRQYXJhbXMgPSBkZWZhdWx0VW5zcGVudFBhcmFtcyk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh1bnNwZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3BlbnRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgLy8gQ29udmVydCB0aGUgaW5kaXZpZHVhbCB1bnNwZW50cyBpbnRvIGRpbWVuc2lvbnMgYW5kIHN1bSB0aGVtIHVwXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLnVuc3BlbnRzLm1hcCgodSkgPT4gRGltZW5zaW9ucy5mcm9tVW5zcGVudCh1LCBwYXJhbXMpKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIC0gYml0Y29pbi1saWtlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBbcGFyYW0uYXNzdW1lVW5zaWduZWRdIC0gZGVmYXVsdCB0eXBlIGZvciB1bnNpZ25lZCBpbnB1dHNcbiAgICogQHJldHVybiB7RGltZW5zaW9uc31cbiAgICovXG4gIHN0YXRpYyBmcm9tVHJhbnNhY3Rpb24oXG4gICAge1xuICAgICAgaW5zLFxuICAgICAgb3V0cyxcbiAgICB9OiB7XG4gICAgICBpbnM6IHV0eG9saWIuVHhJbnB1dFtdO1xuICAgICAgb3V0czogdXR4b2xpYi5UeE91dHB1dFtdO1xuICAgIH0sXG4gICAgcGFyYW1zPzogRnJvbUlucHV0UGFyYW1zXG4gICk6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21JbnB1dHMoaW5zLCBwYXJhbXMpLnBsdXMoRGltZW5zaW9ucy5mcm9tT3V0cHV0cyhvdXRzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIERpbWVuc2lvbnMgZnJvbSBwc2J0IGlucHV0cyBhbmQgb3V0cHV0c1xuICAgKiBAcGFyYW0gcHNidFxuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfVxuICAgKi9cbiAgc3RhdGljIGZyb21Qc2J0KHBzYnQ6IGJpdGdvLlV0eG9Qc2J0KTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVBzYnRJbnB1dHMocHNidC5kYXRhLmlucHV0cykucGx1cyhEaW1lbnNpb25zLmZyb21PdXRwdXRzKHBzYnQuZ2V0VW5zaWduZWRUeCgpLm91dHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZGltZW5zaW9ucyAoY2FuIGJlIHBhcnRpYWxseSBkZWZpbmVkKVxuICAgKiBAcmV0dXJuIG5ldyBkaW1lbnNpb25zIHdpdGggYXJndW1lbnQgYWRkZWRcbiAgICovXG4gIHBsdXMoZGltZW5zaW9uczogUGFydGlhbDxEaW1lbnNpb25zPik6IERpbWVuc2lvbnMge1xuICAgIGlmICh0eXBlb2YgZGltZW5zaW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIG9iamVjdGApO1xuICAgIH1cblxuICAgIGlmICghKGRpbWVuc2lvbnMgaW5zdGFuY2VvZiBEaW1lbnNpb25zKSkge1xuICAgICAgZGltZW5zaW9ucyA9IG5ldyBEaW1lbnNpb25zKGRpbWVuc2lvbnMpO1xuICAgIH1cblxuICAgIC8vIENhdGNoIGluc3RhbmNlcyB3aGVyZSB3ZSB0cnkgdG8gaW5pdGlhbGl6ZSBEaW1lbnNpb25zIGZyb20gcGFydGlhbCBkYXRhIHVzaW5nIGRlcHJlY2F0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIHVzaW5nIG9ubHkgXCJuT3V0cHV0c1wiLlxuICAgIGlmICgnbk91dHB1dHMnIGluIGRpbWVuc2lvbnMpIHtcbiAgICAgIGlmICghKCdvdXRwdXRzJyBpbiBkaW1lbnNpb25zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgcGFydGlhbCBhZGRpdGlvbjogYXJndW1lbnQgaGFzIGtleSBcIm5PdXRwdXRzXCIgYnV0IG5vIFwib3V0cHV0c1wiJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgb3V0cHV0cywgbk91dHB1dHMgfSA9IGRpbWVuc2lvbnMgYXMgRGltZW5zaW9ucztcblxuICAgICAgaWYgKG91dHB1dHMuY291bnQgIT09IG5PdXRwdXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCBwYXJ0aWFsIGFkZGl0aW9uOiBpbmNvbnNpc3RlbnQgdmFsdWVzIGZvciBcIm5PdXRwdXRzXCIgYW5kIFwib3V0cHV0cy5jb3VudFwiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcERpbWVuc2lvbnModGhpcywgKGtleSwgdikgPT4ge1xuICAgICAgY29uc3QgdyA9IGRpbWVuc2lvbnNba2V5XSA/PyBEaW1lbnNpb25zLlpFUk9ba2V5XTtcbiAgICAgIGlmIChrZXkgPT09ICdvdXRwdXRzJykge1xuICAgICAgICBjb25zdCB2T3V0cHV0cyA9IHYgYXMgT3V0cHV0RGltZW5zaW9ucztcbiAgICAgICAgY29uc3Qgd091dHB1dHMgPSB3IGFzIE91dHB1dERpbWVuc2lvbnM7XG4gICAgICAgIHJldHVybiBuZXcgT3V0cHV0RGltZW5zaW9ucyh7XG4gICAgICAgICAgY291bnQ6IHZPdXRwdXRzLmNvdW50ICsgd091dHB1dHMuY291bnQsXG4gICAgICAgICAgc2l6ZTogdk91dHB1dHMuc2l6ZSArIHdPdXRwdXRzLnNpemUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICh2IGFzIG51bWJlcikgKyAodyBhcyBudW1iZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGx5IGRpbWVuc2lvbnMgYnkgYSBnaXZlbiBmYWN0b3JcbiAgICogQHBhcmFtIGZhY3RvciAtIFBvc2l0aXZlIGludGVnZXJcbiAgICogQHJldHVybiB7RGltZW5zaW9uc31cbiAgICovXG4gIHRpbWVzKGZhY3RvcjogbnVtYmVyKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFQb3NpdGl2ZUludGVnZXIuaXMoZmFjdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgZXhwZWN0ZWQgZmFjdG9yIHRvIGJlIHBvc2l0aXZlIGludGVnZXJgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwRGltZW5zaW9ucyh0aGlzLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJ291dHB1dHMnKSB7XG4gICAgICAgIGNvbnN0IHZPdXRwdXRzID0gdmFsdWUgYXMgT3V0cHV0RGltZW5zaW9ucztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb3VudDogdk91dHB1dHMuY291bnQgKiBmYWN0b3IsXG4gICAgICAgICAgc2l6ZTogdk91dHB1dHMuc2l6ZSAqIGZhY3RvcixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodmFsdWUgYXMgbnVtYmVyKSAqIGZhY3RvcjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIE51bWJlciBvZiB0b3RhbCBpbnB1dHMgKHAyc2gsIHAyc2hQMndzaCBhbmQgcDJ3c2gpXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZGltZW5zaW9uLm5JbnB1dHNgIGluc3RlYWRcbiAgICovXG4gIGdldE5JbnB1dHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5uSW5wdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmZiBkaW1lbnNpb25zIGhhdmUgb25lIG9yIG1vcmUgKHAyc2gpcDJ3c2ggaW5wdXRzXG4gICAqL1xuICBpc1NlZ3dpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5uUDJ3c2hJbnB1dHMgK1xuICAgICAgICB0aGlzLm5QMnNoUDJ3c2hJbnB1dHMgK1xuICAgICAgICB0aGlzLm5QMnRyS2V5cGF0aElucHV0cyArXG4gICAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzICtcbiAgICAgICAgdGhpcy5uUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMgPlxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7TnVtYmVyfSBvdmVyaGVhZCB2c2l6ZSwgYmFzZWQgb24gcmVzdWx0IGlzU2Vnd2l0KCkuXG4gICAqL1xuICBnZXRPdmVyaGVhZFZTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWd3aXQoKSA/IFZpcnR1YWxTaXplcy50eFNlZ092ZXJoZWFkVlNpemUgOiBWaXJ0dWFsU2l6ZXMudHhPdmVyaGVhZFNpemU7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gdnNpemUgb2YgaW5wdXRzLCB3aXRob3V0IHRyYW5zYWN0aW9uIG92ZXJoZWFkXG4gICAqL1xuICBnZXRJbnB1dHNWU2l6ZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHtcbiAgICAgIHR4UDJzaElucHV0U2l6ZSxcbiAgICAgIHR4UDJzaFAyd3NoSW5wdXRTaXplLFxuICAgICAgdHhQMndzaElucHV0U2l6ZSxcbiAgICAgIHR4UDJ0cktleXBhdGhJbnB1dFNpemUsXG4gICAgICB0eFAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRTaXplLFxuICAgICAgdHhQMnRyU2NyaXB0UGF0aExldmVsMklucHV0U2l6ZSxcbiAgICAgIHR4UDJzaFAycGtJbnB1dFNpemUsXG4gICAgfSA9IFZpcnR1YWxTaXplcztcblxuICAgIGNvbnN0IHtcbiAgICAgIG5QMnNoSW5wdXRzLFxuICAgICAgblAyc2hQMndzaElucHV0cyxcbiAgICAgIG5QMndzaElucHV0cyxcbiAgICAgIG5QMnRyS2V5cGF0aElucHV0cyxcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyxcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0cyxcbiAgICAgIG5QMnNoUDJwa0lucHV0cyxcbiAgICB9ID0gdGhpcztcblxuICAgIGNvbnN0IHNpemUgPVxuICAgICAgblAyc2hJbnB1dHMgKiB0eFAyc2hJbnB1dFNpemUgK1xuICAgICAgblAyc2hQMndzaElucHV0cyAqIHR4UDJzaFAyd3NoSW5wdXRTaXplICtcbiAgICAgIG5QMndzaElucHV0cyAqIHR4UDJ3c2hJbnB1dFNpemUgK1xuICAgICAgblAydHJLZXlwYXRoSW5wdXRzICogdHhQMnRyS2V5cGF0aElucHV0U2l6ZSArXG4gICAgICBuUDJzaFAycGtJbnB1dHMgKiB0eFAyc2hQMnBrSW5wdXRTaXplICtcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyAqIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dFNpemUgK1xuICAgICAgblAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzICogdHhQMnRyU2NyaXB0UGF0aExldmVsMklucHV0U2l6ZTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc2l6ZWApO1xuICAgIH1cblxuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHJldHVybiB2c2l6ZSBvZiBvdXRwdXRzLCB3aXRob3V0IG92ZXJoZWFkXG4gICAqL1xuICBnZXRPdXRwdXRzVlNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vdXRwdXRzLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogRXN0aW1hdGVzIHRoZSB2aXJ0dWFsIHNpemUgKDEvNCB3ZWlnaHQpIG9mIGEgc2lnbmVkIHRyYW5zYWN0aW9uIGFzIHN1bSBvZlxuICAgKiBvdmVyaGVhZCB2c2l6ZSwgaW5wdXQgdnNpemUgYW5kIG91dHB1dCB2c2l6ZS5cbiAgICogQHJldHVybnMge051bWJlcn0gVGhlIGVzdGltYXRlZCB2c2l6ZSBvZiB0aGUgdHJhbnNhY3Rpb24gZGltZW5zaW9ucy5cbiAgICovXG4gIGdldFZTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3ZlcmhlYWRWU2l6ZSgpICsgdGhpcy5nZXRJbnB1dHNWU2l6ZSgpICsgdGhpcy5nZXRPdXRwdXRzVlNpemUoKTtcbiAgfVxufVxuIl19
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaW1lbnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUFnRDtBQUNoRCxtREFBNkM7QUFDN0MsTUFBTSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLGdCQUFLLENBQUM7QUFHbEQsK0NBQTRDO0FBQzVDLG1DQUEwQztBQUUxQyxpREFBOEM7QUFFOUM7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FDcEIsQ0FBc0IsRUFDdEIsQ0FBZ0Y7SUFFaEYsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEcsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQWEsZ0JBQWdCO0lBVTNCLFlBQVksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEtBQXVCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQzNFLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUks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QixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO0FBQ2hFLFVBQVUsQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDdkQsVUFBVSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3BFLFVBQVUsQ0FBQyw2QkFBNkIsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO0FBQ3ZGLFVBQVUsQ0FBQyw2QkFBNkIsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO0FBQ3ZGLFVBQVUsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgYml0Z28gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5jb25zdCB7IGlzQ2hhaW5Db2RlLCBzY3JpcHRUeXBlRm9yQ2hhaW4gfSA9IGJpdGdvO1xudHlwZSBDaGFpbkNvZGUgPSBiaXRnby5DaGFpbkNvZGU7XG5cbmltcG9ydCB7IGNvbXBhY3RTaXplIH0gZnJvbSAnLi9zY3JpcHRTaXplcyc7XG5pbXBvcnQgeyBQb3NpdGl2ZUludGVnZXIgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgVmlydHVhbFNpemVzIH0gZnJvbSAnLi92aXJ0dWFsU2l6ZXMnO1xuXG4vKipcbiAqIEFwcGx5IGBmYCB0byBhbGwgcHJvcGVydGllcyBvZiBgZGBcbiAqL1xuZnVuY3Rpb24gbWFwRGltZW5zaW9ucyhcbiAgZDogUGFydGlhbDxEaW1lbnNpb25zPixcbiAgZjogPFQgZXh0ZW5kcyBrZXlvZiBEaW1lbnNpb25zPihrZXk6IFQsIHY6IERpbWVuc2lvbnNbVF0gfCB1bmRlZmluZWQpID0+IHVua25vd25cbik6IERpbWVuc2lvbnMge1xuICByZXR1cm4gbmV3IERpbWVuc2lvbnMoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGQpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCBmKGtleSBhcyBrZXlvZiBEaW1lbnNpb25zLCB2YWx1ZSldKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGUgY291bnQgYW5kIHNpemUgb2YgdHJhbnNhY3Rpb24gb3V0cHV0c1xuICovXG5leHBvcnQgY2xhc3MgT3V0cHV0RGltZW5zaW9ucyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygb3V0cHV0c1xuICAgKi9cbiAgY291bnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEFnZ3JlZ2F0ZSB2U2l6ZVxuICAgKi9cbiAgc2l6ZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHsgY291bnQgPSAwLCBzaXplID0gMCB9OiBPdXRwdXREaW1lbnNpb25zID0geyBjb3VudDogMCwgc2l6ZTogMCB9KSB7XG4gICAgaWYgKGNvdW50ID09PSAwIHx8IHNpemUgPT09IDApIHtcbiAgICAgIGlmIChjb3VudCAhPT0gMCB8fCBzaXplICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY291bnQgYW5kIHNpemUgbXVzdCBib3RoIGJlIHplcm8gaWYgb25lIGlzIHplcm9gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvdW50ID0gY291bnQ7XG4gICAgdGhpcy5zaXplID0gc2l6ZTtcblxuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEZyb21JbnB1dFBhcmFtcyB7XG4gIC8vIEluIGNhc2VzIHdoZXJlIHRoZSBpbnB1dCB0eXBlIGlzIGFtYmlndW91cywgd2UgbXVzdCBwcm92aWRlIGEgaGludCBhYm91dCBzcGVuZCBzY3JpcHQgdHlwZS5cbiAgYXNzdW1lVW5zaWduZWQ/OiBEaW1lbnNpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyb21VbnNwZW50UGFyYW1zIHtcbiAgcDJ0cjoge1xuICAgIHNjcmlwdFBhdGhMZXZlbD86IG51bWJlcjtcbiAgfTtcbiAgcDJ0ck11c2lnMjoge1xuICAgIHNjcmlwdFBhdGhMZXZlbD86IG51bWJlcjtcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFVuc3BlbnRQYXJhbXM6IEZyb21VbnNwZW50UGFyYW1zID0ge1xuICBwMnRyOiB7XG4gICAgLy8gRGVmYXVsdCB0byByZWNvdmVyeSBzY3JpcHQgcGF0aHMsIHRvIG1ha2UgaXQgZWFzaWVyIGZvciByZWNvdmVyeSBjYXNlIGNhbGxlcnMgKFdSVyBldGMpLlxuICAgIC8vIFdQIGNhbiBleHBsaWNpdGx5IHBhc3Mgc2NyaXB0UGF0aExldmVsOiAxIHRvIHVzZSBoYXBweSBwYXRoLlxuICAgIHNjcmlwdFBhdGhMZXZlbDogMixcbiAgfSxcbiAgcDJ0ck11c2lnMjoge1xuICAgIC8vIERlZmF1bHQgdG8gc2NyaXB0IHBhdGggc3BlbmQsIHRvIG1ha2UgaXQgZWFzaWVyIGZvciByZWNvdmVyeSBjYXNlIGNhbGxlcnMgKFdSVyBldGMpLlxuICAgIC8vIFdQIGNhbiBleHBsaWNpdGx5IHBhc3Mgc2NyaXB0UGF0aExldmVsOiB1bmRlZmluZWQgdG8gdXNlIGtleSBwYXRoLlxuICAgIHNjcmlwdFBhdGhMZXZlbDogMSxcbiAgfSxcbn07XG5cbi8qKlxuICogRGltZW5zaW9ucyBvZiBhIEJpdEdvIHdhbGxldCB0cmFuc2FjdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25zIHtcbiAgLyoqIElucHV0IGNvdW50cyBmb3IgQml0R28gd2FsbGV0IG11bHRpLXNpZ25hdHVyZSBpbnB1dHMgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5QMnNoSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAyc2hQMndzaElucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMndzaElucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMnRyS2V5cGF0aElucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0czogbnVtYmVyID0gMDtcblxuICAvKiBJbnB1dCBjb3VudCBmb3Igc2luZ2xlLXNpZ25hdHVyZSBpbnB1dHMgKFJlcGxheSBQcm90ZWN0aW9uIGlucHV0cykgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5QMnNoUDJwa0lucHV0czogbnVtYmVyID0gMDtcblxuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogT3V0cHV0RGltZW5zaW9ucyA9IG5ldyBPdXRwdXREaW1lbnNpb25zKCk7XG5cbiAgY29uc3RydWN0b3IoZDogUGFydGlhbDxEaW1lbnNpb25zPiA9IHt9KSB7XG4gICAgT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB0aGlzLnNldFByb3BlcnR5KGtleSwgdmFsdWUpKTtcblxuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cblxuICBwcml2YXRlIHNldFByb3BlcnR5KGs6IHN0cmluZywgdjogdW5rbm93bik6IHZvaWQge1xuICAgIHN3aXRjaCAoaykge1xuICAgICAgY2FzZSAnblAyc2hJbnB1dHMnOlxuICAgICAgY2FzZSAnblAyc2hQMndzaElucHV0cyc6XG4gICAgICBjYXNlICduUDJ3c2hJbnB1dHMnOlxuICAgICAgY2FzZSAnblAydHJLZXlwYXRoSW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyc6XG4gICAgICBjYXNlICduUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMnOlxuICAgICAgY2FzZSAnblAyc2hQMnBrSW5wdXRzJzpcbiAgICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtrfSBtdXN0IGJlIG51bWJlcmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodikgfHwgdiA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3BlcnR5ICR7a30gbXVzdCBiZSB6ZXJvIG9yIHBvc2l0aXZlIGludGVnZXJgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ291dHB1dHMnOlxuICAgICAgICBpZiAoISh2IGluc3RhbmNlb2YgT3V0cHV0RGltZW5zaW9ucykpIHtcbiAgICAgICAgICB2ID0gbmV3IE91dHB1dERpbWVuc2lvbnModiBhcyBPdXRwdXREaW1lbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBwcm9wZXJ0eSAke2t9YCk7XG4gICAgfVxuXG4gICAgKHRoaXMgYXMgYW55KVtrXSA9IHY7XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IERpbWVuc2lvbnMoKSk7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBaRVJPXG4gICAqIEByZXR1cm4gRGltZW5zaW9ucyBmb3IgYW4gZW1wdHkgdHJhbnNhY3Rpb25cbiAgICovXG4gIHN0YXRpYyB6ZXJvKCk6IFJlYWRvbmx5PERpbWVuc2lvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5aRVJPO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzaXplXG4gICAqIEByZXR1cm4gRGltZW5zaW9ucyBmb3IgYSBzaW5nbGUgb3V0cHV0IHdpdGggZ2l2ZW4gc2l6ZVxuICAgKi9cbiAgc3RhdGljIHNpbmdsZU91dHB1dChzaXplOiBudW1iZXIpOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oeyBvdXRwdXRzOiB7IGNvdW50OiAxLCBzaXplIH0gfSk7XG4gIH1cblxuICBzdGF0aWMgU2luZ2xlT3V0cHV0OiB7XG4gICAgcDJzaDogRGltZW5zaW9ucztcbiAgICBwMnNoUDJ3c2g6IERpbWVuc2lvbnM7XG4gICAgcDJ3c2g6IERpbWVuc2lvbnM7XG4gICAgcDJ0cjogRGltZW5zaW9ucztcbiAgICBwMnBraDogRGltZW5zaW9ucztcbiAgICBwMndwa2g6IERpbWVuc2lvbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEByZXR1cm4gTnVtYmVyIG9mIHRvdGFsIGlucHV0cyAocDJzaCArIHAyc2hQMndzaCArIHAyd3NoICsgcDJ0cilcbiAgICovXG4gIGdldCBuSW5wdXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMublAyc2hJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJzaFAyd3NoSW5wdXRzICtcbiAgICAgIHRoaXMublAyd3NoSW5wdXRzICtcbiAgICAgIHRoaXMublAydHJLZXlwYXRoSW5wdXRzICtcbiAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzICtcbiAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzICtcbiAgICAgIHRoaXMublAyc2hQMnBrSW5wdXRzXG4gICAgKTtcbiAgfVxuXG4gIHNldCBuSW5wdXRzKF86IG51bWJlcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVhZC1vbmx5IHByb3BlcnR5IG5JbnB1dHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIE51bWJlciBvZiB0b3RhbCBvdXRwdXRzXG4gICAqL1xuICBnZXQgbk91dHB1dHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vdXRwdXRzLmNvdW50O1xuICB9XG5cbiAgc2V0IG5PdXRwdXRzKF86IG51bWJlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmVhZC1vbmx5IHByb3BlcnR5IG5PdXRwdXRzYCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGFyZ3MgLSBEaW1lbnNpb25zIChjYW4gYmUgcGFydGlhbGx5IGRlZmluZWQpXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IHN1bSBvZiBhcmd1bWVudHNcbiAgICovXG4gIHN0YXRpYyBzdW0oLi4uYXJnczogUGFydGlhbDxEaW1lbnNpb25zPltdKTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIGFyZ3MucmVkdWNlKChhOiBEaW1lbnNpb25zLCBiOiBQYXJ0aWFsPERpbWVuc2lvbnM+KSA9PiBhLnBsdXMoYiksIG5ldyBEaW1lbnNpb25zKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0T3V0cHV0U2NyaXB0TGVuZ3RoRm9yQ2hhaW4oY2hhaW46IENoYWluQ29kZSk6IG51bWJlciB7XG4gICAgc3dpdGNoIChzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pKSB7XG4gICAgICBjYXNlICdwMndzaCc6XG4gICAgICBjYXNlICdwMnRyJzpcbiAgICAgIGNhc2UgJ3AydHJNdXNpZzInOlxuICAgICAgICByZXR1cm4gMzQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gMjM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzY3JpcHRMZW5ndGhcbiAgICogQHJldHVybiB7TnVtYmVyfSB2U2l6ZSBvZiBhbiBvdXRwdXQgd2l0aCBzY3JpcHQgbGVuZ3RoXG4gICAqL1xuICBzdGF0aWMgZ2V0VlNpemVGb3JPdXRwdXRXaXRoU2NyaXB0TGVuZ3RoKHNjcmlwdExlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIVBvc2l0aXZlSW50ZWdlci5pcyhzY3JpcHRMZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBleHBlY3RlZCBwb3NpdGl2ZSBpbnRlZ2VyIGZvciBzY3JpcHRMZW5ndGgsIGdvdCAke3NjcmlwdExlbmd0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjcmlwdExlbmd0aCArIGNvbXBhY3RTaXplKHNjcmlwdExlbmd0aCkgKyBWaXJ0dWFsU2l6ZXMudHhPdXRwdXRBbW91bnRTaXplO1xuICB9XG5cbiAgc3RhdGljIFNpbmdsZUlucHV0OiB7XG4gICAgcDJzaDogRGltZW5zaW9ucztcbiAgICBwMnNoUDJ3c2g6IERpbWVuc2lvbnM7XG4gICAgcDJ3c2g6IERpbWVuc2lvbnM7XG4gICAgcDJ0cktleXBhdGg6IERpbWVuc2lvbnM7XG4gICAgcDJ0clNjcmlwdFBhdGhMZXZlbDE6IERpbWVuc2lvbnM7XG4gICAgcDJ0clNjcmlwdFBhdGhMZXZlbDI6IERpbWVuc2lvbnM7XG4gICAgcDJzaFAycGs6IERpbWVuc2lvbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEByZXR1cm5cbiAgICovXG4gIHN0YXRpYyBmcm9tU2NyaXB0VHlwZShcbiAgICBzY3JpcHRUeXBlOiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZSB8IHV0eG9saWIuYml0Z28uUGFyc2VkU2NyaXB0VHlwZTJPZjMgfCAncDJwa2gnLFxuICAgIHBhcmFtczoge1xuICAgICAgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyO1xuICAgIH0gPSB7fVxuICApOiBEaW1lbnNpb25zIHtcbiAgICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIGNhc2UgJ3Ayc2hQMnBrJzpcbiAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXRbc2NyaXB0VHlwZV07XG4gICAgICBjYXNlICdwMnRyJzpcbiAgICAgIGNhc2UgJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnOlxuICAgICAgICBzd2l0Y2ggKHBhcmFtcy5zY3JpcHRQYXRoTGV2ZWwpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMjtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdCBwYXRoIGxldmVsYCk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3AydHJNdXNpZzInOlxuICAgICAgICBzd2l0Y2ggKHBhcmFtcy5zY3JpcHRQYXRoTGV2ZWwpIHtcbiAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJLZXlwYXRoO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwxO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgc2NyaXB0IHBhdGggbGV2ZWxgKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAndGFwcm9vdEtleVBhdGhTcGVuZCc6XG4gICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJLZXlwYXRoO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdFR5cGUgJHtzY3JpcHRUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBBU1NVTUVfUDJTSDogRGltZW5zaW9ucztcbiAgc3RhdGljIEFTU1VNRV9QMlNIX1AyV1NIOiBEaW1lbnNpb25zO1xuICBzdGF0aWMgQVNTVU1FX1AyV1NIOiBEaW1lbnNpb25zO1xuICBzdGF0aWMgQVNTVU1FX1AyVFJfS0VZUEFUSDogRGltZW5zaW9ucztcbiAgc3RhdGljIEFTU1VNRV9QMlRSX1NDUklQVFBBVEhfTEVWRUwxOiBEaW1lbnNpb25zO1xuICBzdGF0aWMgQVNTVU1FX1AyVFJfU0NSSVBUUEFUSF9MRVZFTDI6IERpbWVuc2lvbnM7XG4gIHN0YXRpYyBBU1NVTUVfUDJTSF9QMlBLX0lOUFVUOiBEaW1lbnNpb25zO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEFzc3VtZWREaW1lbnNpb24ocGFyYW1zOiBGcm9tSW5wdXRQYXJhbXMgPSB7fSwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHsgYXNzdW1lVW5zaWduZWQgfSA9IHBhcmFtcztcbiAgICBpZiAoIWFzc3VtZVVuc2lnbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGlsbGVnYWwgaW5wdXQgJHtpbmRleH06IGVtcHR5IHNjcmlwdCBhbmQgYXNzdW1lVW5zaWduZWQgbm90IHNldGApO1xuICAgIH1cbiAgICByZXR1cm4gYXNzdW1lVW5zaWduZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGlucHV0IC0gdGhlIHRyYW5zYWN0aW9uIGlucHV0IHRvIGNvdW50XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogICAgICAgIFtwYXJhbS5hc3N1bWVVbnNpZ25lZF0gLSBkZWZhdWx0IHR5cGUgZm9yIHVuc2lnbmVkIGlucHV0XG4gICAqL1xuICBzdGF0aWMgZnJvbUlucHV0KGlucHV0OiB1dHhvbGliLlR4SW5wdXQsIHBhcmFtczogRnJvbUlucHV0UGFyYW1zID0ge30pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoaW5wdXQuc2NyaXB0Py5sZW5ndGggfHwgaW5wdXQud2l0bmVzcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB1dHhvbGliLmJpdGdvLnBhcnNlU2lnbmF0dXJlU2NyaXB0KGlucHV0KTtcbiAgICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21TY3JpcHRUeXBlKHBhcnNlZC5zY3JpcHRUeXBlLCBwYXJzZWQgYXMgeyBzY3JpcHRQYXRoTGV2ZWw/OiBudW1iZXIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZ2V0QXNzdW1lZERpbWVuc2lvbihwYXJhbXMsIGlucHV0LmluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgRGltZW5zaW9ucyBmcm9tIHBzYnQgaW5wdXRcbiAgICogQHBhcmFtIGlucHV0IC0gcHNidCBpbnB1dFxuICAgKi9cbiAgc3RhdGljIGZyb21Qc2J0SW5wdXQoaW5wdXQ6IGJpdGdvLlBzYnRJbnB1dFR5cGUpOiBEaW1lbnNpb25zIHtcbiAgICBjb25zdCBwYXJzZWQgPSBiaXRnby5wYXJzZVBzYnRJbnB1dChpbnB1dCk7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVNjcmlwdFR5cGUocGFyc2VkLnNjcmlwdFR5cGUsIHBhcnNlZCBhcyB7IHNjcmlwdFBhdGhMZXZlbD86IG51bWJlciB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaW5wdXRzIC0gQXJyYXkgb2YgaW5wdXRzXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBAc2VlIERpbWVuc2lvbnMuZnJvbUlucHV0KClcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIHRoZSBkaW1lbnNpb25zIGZvciBlYWNoIGlucHV0IChAc2VlIERpbWVuc2lvbnMuZnJvbUlucHV0KCkpXG4gICAqL1xuICBzdGF0aWMgZnJvbUlucHV0cyhpbnB1dHM6IHV0eG9saWIuVHhJbnB1dFtdLCBwYXJhbXM/OiBGcm9tSW5wdXRQYXJhbXMpOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW5wdXRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLmlucHV0cy5tYXAoKGkpID0+IERpbWVuc2lvbnMuZnJvbUlucHV0KGksIHBhcmFtcykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgRGltZW5zaW9ucyBmcm9tIG11bHRpcGxlIHBzYnQgaW5wdXRzXG4gICAqIEBwYXJhbSBpbnB1dHMgcHNidCBpbnB1dCBhcnJheVxuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSBzdW0gb2YgdGhlIGRpbWVuc2lvbnMgZm9yIGVhY2ggaW5wdXQgKEBzZWUgRGltZW5zaW9ucy5mcm9tUHNidElucHV0KCkpXG4gICAqL1xuICBzdGF0aWMgZnJvbVBzYnRJbnB1dHMoaW5wdXRzOiBiaXRnby5Qc2J0SW5wdXRUeXBlW10pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW5wdXRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLmlucHV0cy5tYXAoKGlucHV0LCBfKSA9PiBEaW1lbnNpb25zLmZyb21Qc2J0SW5wdXQoaW5wdXQpKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNjcmlwdExlbmd0aCB7bnVtYmVyfSAtIHNpemUgb2YgdGhlIG91dHB1dCBzY3JpcHQgaW4gYnl0ZXNcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gLSBEaW1lbnNpb25zIG9mIHRoZSBvdXRwdXRcbiAgICovXG4gIHN0YXRpYyBmcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKHNjcmlwdExlbmd0aDogbnVtYmVyKTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKHtcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgY291bnQ6IDEsXG4gICAgICAgIHNpemU6IERpbWVuc2lvbnMuZ2V0VlNpemVGb3JPdXRwdXRXaXRoU2NyaXB0TGVuZ3RoKHNjcmlwdExlbmd0aCksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvdXRwdXQgLSBhIHR4IG91dHB1dFxuICAgKiBAcmV0dXJuIERpbWVuc2lvbnMgLSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZ2l2ZW4gb3V0cHV0XG4gICAqL1xuICBzdGF0aWMgZnJvbU91dHB1dCh7IHNjcmlwdCB9OiB7IHNjcmlwdDogQnVmZmVyIH0pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoIXNjcmlwdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBvdXRwdXQgc2NyaXB0IHRvIGJlIGRlZmluZWQnKTtcbiAgICB9XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2NyaXB0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgc2NyaXB0IHRvIGJlIGJ1ZmZlciwgZ290ICcgKyB0eXBlb2Ygc2NyaXB0KTtcbiAgICB9XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aChzY3JpcHQubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3V0cHV0cyAtIEFycmF5IG9mIG91dHB1dHNcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIHRoZSBkaW1lbnNpb25zIGZvciBlYWNoIG91dHB1dCAoQHNlZSBEaW1lbnNpb25zLmZyb21PdXRwdXQoKSlcbiAgICovXG4gIHN0YXRpYyBmcm9tT3V0cHV0cyhvdXRwdXRzOiB7IHNjcmlwdDogQnVmZmVyIH1bXSk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvdXRwdXRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgb3V0cHV0cyBtdXN0IGJlIGFycmF5YCk7XG4gICAgfVxuICAgIHJldHVybiBEaW1lbnNpb25zLnN1bSguLi5vdXRwdXRzLm1hcChEaW1lbnNpb25zLmZyb21PdXRwdXQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkaW1lbnNpb25zIG9mIGFuIG91dHB1dCB0aGF0IHdpbGwgYmUgY3JlYXRlZCBvbiBhIHNwZWNpZmljIGNoYWluLlxuICAgKiBDdXJyZW50bHksIHRoaXMgc2ltcGx5IGFkZHMgYSBkZWZhdWx0IG91dHB1dC5cbiAgICpcbiAgICogQHBhcmFtIGNoYWluIC0gQ2hhaW4gY29kZSBhcyBkZWZpbmVkIGJ5IHV0eG9saWIuYml0Z29cbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gLSBEaW1lbnNpb25zIGZvciBhIHNpbmdsZSBvdXRwdXQgb24gdGhlIGdpdmVuIGNoYWluLlxuICAgKi9cbiAgc3RhdGljIGZyb21PdXRwdXRPbkNoYWluKGNoYWluOiBDaGFpbkNvZGUpOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKERpbWVuc2lvbnMuZ2V0T3V0cHV0U2NyaXB0TGVuZ3RoRm9yQ2hhaW4oY2hhaW4pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGltZW5zaW9ucyBvZiBhbiB1bnNwZW50IGFjY29yZGluZyB0byBgY2hhaW5gIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gY2hhaW4gLSBDaGFpbiBjb2RlIGFzIGRlZmluZWQgYnkgdXR4by5jaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zIC0gSGludCBmb3IgdW5zcGVudHMgd2l0aCB2YXJpYWJsZSBpbnB1dCBzaXplcyAocDJ0ciwgcDJ0ck11c2lnMilcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gb2YgdGhlIHVuc3BlbnRcbiAgICogQHRocm93cyBpZiB0aGUgY2hhaW4gY29kZSBpcyBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkXG4gICAqL1xuICBzdGF0aWMgZnJvbVVuc3BlbnQoeyBjaGFpbiB9OiB7IGNoYWluOiBudW1iZXIgfSwgcGFyYW1zOiBGcm9tVW5zcGVudFBhcmFtcyA9IGRlZmF1bHRVbnNwZW50UGFyYW1zKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFpc0NoYWluQ29kZShjaGFpbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgY2hhaW4gY29kZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pO1xuXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVNjcmlwdFR5cGUoXG4gICAgICBzY3JpcHRUeXBlLFxuICAgICAgc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gcGFyYW1zLnAydHIgOiBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicgPyBwYXJhbXMucDJ0ck11c2lnMiA6IHt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudHNcbiAgICogQHBhcmFtIHBhcmFtcyAtIEhpbnQgZm9yIHVuc3BlbnRzIHdpdGggdmFyaWFibGUgaW5wdXQgc2l6ZXMgKHAydHIsIHAydHJNdXNpZzIpXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IHN1bSBvZiB0aGUgZGltZW5zaW9ucyBmb3IgZWFjaCB1bnNwZW50IChAc2VlIERpbWVuc2lvbnMuZnJvbVVuc3BlbnQoKSlcbiAgICovXG4gIHN0YXRpYyBmcm9tVW5zcGVudHModW5zcGVudHM6IHsgY2hhaW46IENoYWluQ29kZSB9W10sIHBhcmFtczogRnJvbVVuc3BlbnRQYXJhbXMgPSBkZWZhdWx0VW5zcGVudFBhcmFtcyk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh1bnNwZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3BlbnRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgLy8gQ29udmVydCB0aGUgaW5kaXZpZHVhbCB1bnNwZW50cyBpbnRvIGRpbWVuc2lvbnMgYW5kIHN1bSB0aGVtIHVwXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLnVuc3BlbnRzLm1hcCgodSkgPT4gRGltZW5zaW9ucy5mcm9tVW5zcGVudCh1LCBwYXJhbXMpKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIC0gYml0Y29pbi1saWtlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBbcGFyYW0uYXNzdW1lVW5zaWduZWRdIC0gZGVmYXVsdCB0eXBlIGZvciB1bnNpZ25lZCBpbnB1dHNcbiAgICogQHJldHVybiB7RGltZW5zaW9uc31cbiAgICovXG4gIHN0YXRpYyBmcm9tVHJhbnNhY3Rpb24oXG4gICAge1xuICAgICAgaW5zLFxuICAgICAgb3V0cyxcbiAgICB9OiB7XG4gICAgICBpbnM6IHV0eG9saWIuVHhJbnB1dFtdO1xuICAgICAgb3V0czogdXR4b2xpYi5UeE91dHB1dFtdO1xuICAgIH0sXG4gICAgcGFyYW1zPzogRnJvbUlucHV0UGFyYW1zXG4gICk6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21JbnB1dHMoaW5zLCBwYXJhbXMpLnBsdXMoRGltZW5zaW9ucy5mcm9tT3V0cHV0cyhvdXRzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIERpbWVuc2lvbnMgZnJvbSBwc2J0IGlucHV0cyBhbmQgb3V0cHV0c1xuICAgKiBAcGFyYW0gcHNidFxuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfVxuICAgKi9cbiAgc3RhdGljIGZyb21Qc2J0KHBzYnQ6IGJpdGdvLlV0eG9Qc2J0KTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVBzYnRJbnB1dHMocHNidC5kYXRhLmlucHV0cykucGx1cyhEaW1lbnNpb25zLmZyb21PdXRwdXRzKHBzYnQuZ2V0VW5zaWduZWRUeCgpLm91dHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZGltZW5zaW9ucyAoY2FuIGJlIHBhcnRpYWxseSBkZWZpbmVkKVxuICAgKiBAcmV0dXJuIG5ldyBkaW1lbnNpb25zIHdpdGggYXJndW1lbnQgYWRkZWRcbiAgICovXG4gIHBsdXMoZGltZW5zaW9uczogUGFydGlhbDxEaW1lbnNpb25zPik6IERpbWVuc2lvbnMge1xuICAgIGlmICh0eXBlb2YgZGltZW5zaW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIG9iamVjdGApO1xuICAgIH1cblxuICAgIGlmICghKGRpbWVuc2lvbnMgaW5zdGFuY2VvZiBEaW1lbnNpb25zKSkge1xuICAgICAgZGltZW5zaW9ucyA9IG5ldyBEaW1lbnNpb25zKGRpbWVuc2lvbnMpO1xuICAgIH1cblxuICAgIC8vIENhdGNoIGluc3RhbmNlcyB3aGVyZSB3ZSB0cnkgdG8gaW5pdGlhbGl6ZSBEaW1lbnNpb25zIGZyb20gcGFydGlhbCBkYXRhIHVzaW5nIGRlcHJlY2F0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIHVzaW5nIG9ubHkgXCJuT3V0cHV0c1wiLlxuICAgIGlmICgnbk91dHB1dHMnIGluIGRpbWVuc2lvbnMpIHtcbiAgICAgIGlmICghKCdvdXRwdXRzJyBpbiBkaW1lbnNpb25zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgcGFydGlhbCBhZGRpdGlvbjogYXJndW1lbnQgaGFzIGtleSBcIm5PdXRwdXRzXCIgYnV0IG5vIFwib3V0cHV0c1wiJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgb3V0cHV0cywgbk91dHB1dHMgfSA9IGRpbWVuc2lvbnMgYXMgRGltZW5zaW9ucztcblxuICAgICAgaWYgKG91dHB1dHMuY291bnQgIT09IG5PdXRwdXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCBwYXJ0aWFsIGFkZGl0aW9uOiBpbmNvbnNpc3RlbnQgdmFsdWVzIGZvciBcIm5PdXRwdXRzXCIgYW5kIFwib3V0cHV0cy5jb3VudFwiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcERpbWVuc2lvbnModGhpcywgKGtleSwgdikgPT4ge1xuICAgICAgY29uc3QgdyA9IGRpbWVuc2lvbnNba2V5XSA/PyBEaW1lbnNpb25zLlpFUk9ba2V5XTtcbiAgICAgIGlmIChrZXkgPT09ICdvdXRwdXRzJykge1xuICAgICAgICBjb25zdCB2T3V0cHV0cyA9IHYgYXMgT3V0cHV0RGltZW5zaW9ucztcbiAgICAgICAgY29uc3Qgd091dHB1dHMgPSB3IGFzIE91dHB1dERpbWVuc2lvbnM7XG4gICAgICAgIHJldHVybiBuZXcgT3V0cHV0RGltZW5zaW9ucyh7XG4gICAgICAgICAgY291bnQ6IHZPdXRwdXRzLmNvdW50ICsgd091dHB1dHMuY291bnQsXG4gICAgICAgICAgc2l6ZTogdk91dHB1dHMuc2l6ZSArIHdPdXRwdXRzLnNpemUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICh2IGFzIG51bWJlcikgKyAodyBhcyBudW1iZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGx5IGRpbWVuc2lvbnMgYnkgYSBnaXZlbiBmYWN0b3JcbiAgICogQHBhcmFtIGZhY3RvciAtIFBvc2l0aXZlIGludGVnZXJcbiAgICogQHJldHVybiB7RGltZW5zaW9uc31cbiAgICovXG4gIHRpbWVzKGZhY3RvcjogbnVtYmVyKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFQb3NpdGl2ZUludGVnZXIuaXMoZmFjdG9yKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgZXhwZWN0ZWQgZmFjdG9yIHRvIGJlIHBvc2l0aXZlIGludGVnZXJgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwRGltZW5zaW9ucyh0aGlzLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJ291dHB1dHMnKSB7XG4gICAgICAgIGNvbnN0IHZPdXRwdXRzID0gdmFsdWUgYXMgT3V0cHV0RGltZW5zaW9ucztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb3VudDogdk91dHB1dHMuY291bnQgKiBmYWN0b3IsXG4gICAgICAgICAgc2l6ZTogdk91dHB1dHMuc2l6ZSAqIGZhY3RvcixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodmFsdWUgYXMgbnVtYmVyKSAqIGZhY3RvcjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIE51bWJlciBvZiB0b3RhbCBpbnB1dHMgKHAyc2gsIHAyc2hQMndzaCBhbmQgcDJ3c2gpXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZGltZW5zaW9uLm5JbnB1dHNgIGluc3RlYWRcbiAgICovXG4gIGdldE5JbnB1dHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5uSW5wdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmZiBkaW1lbnNpb25zIGhhdmUgb25lIG9yIG1vcmUgKHAyc2gpcDJ3c2ggaW5wdXRzXG4gICAqL1xuICBpc1NlZ3dpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5uUDJ3c2hJbnB1dHMgK1xuICAgICAgICB0aGlzLm5QMnNoUDJ3c2hJbnB1dHMgK1xuICAgICAgICB0aGlzLm5QMnRyS2V5cGF0aElucHV0cyArXG4gICAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzICtcbiAgICAgICAgdGhpcy5uUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMgPlxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7TnVtYmVyfSBvdmVyaGVhZCB2c2l6ZSwgYmFzZWQgb24gcmVzdWx0IGlzU2Vnd2l0KCkuXG4gICAqL1xuICBnZXRPdmVyaGVhZFZTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWd3aXQoKSA/IFZpcnR1YWxTaXplcy50eFNlZ092ZXJoZWFkVlNpemUgOiBWaXJ0dWFsU2l6ZXMudHhPdmVyaGVhZFNpemU7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gdnNpemUgb2YgaW5wdXRzLCB3aXRob3V0IHRyYW5zYWN0aW9uIG92ZXJoZWFkXG4gICAqL1xuICBnZXRJbnB1dHNWU2l6ZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHtcbiAgICAgIHR4UDJzaElucHV0U2l6ZSxcbiAgICAgIHR4UDJzaFAyd3NoSW5wdXRTaXplLFxuICAgICAgdHhQMndzaElucHV0U2l6ZSxcbiAgICAgIHR4UDJ0cktleXBhdGhJbnB1dFNpemUsXG4gICAgICB0eFAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRTaXplLFxuICAgICAgdHhQMnRyU2NyaXB0UGF0aExldmVsMklucHV0U2l6ZSxcbiAgICAgIHR4UDJzaFAycGtJbnB1dFNpemUsXG4gICAgfSA9IFZpcnR1YWxTaXplcztcblxuICAgIGNvbnN0IHtcbiAgICAgIG5QMnNoSW5wdXRzLFxuICAgICAgblAyc2hQMndzaElucHV0cyxcbiAgICAgIG5QMndzaElucHV0cyxcbiAgICAgIG5QMnRyS2V5cGF0aElucHV0cyxcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyxcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0cyxcbiAgICAgIG5QMnNoUDJwa0lucHV0cyxcbiAgICB9ID0gdGhpcztcblxuICAgIGNvbnN0IHNpemUgPVxuICAgICAgblAyc2hJbnB1dHMgKiB0eFAyc2hJbnB1dFNpemUgK1xuICAgICAgblAyc2hQMndzaElucHV0cyAqIHR4UDJzaFAyd3NoSW5wdXRTaXplICtcbiAgICAgIG5QMndzaElucHV0cyAqIHR4UDJ3c2hJbnB1dFNpemUgK1xuICAgICAgblAydHJLZXlwYXRoSW5wdXRzICogdHhQMnRyS2V5cGF0aElucHV0U2l6ZSArXG4gICAgICBuUDJzaFAycGtJbnB1dHMgKiB0eFAyc2hQMnBrSW5wdXRTaXplICtcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyAqIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dFNpemUgK1xuICAgICAgblAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzICogdHhQMnRyU2NyaXB0UGF0aExldmVsMklucHV0U2l6ZTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc2l6ZWApO1xuICAgIH1cblxuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHJldHVybiB2c2l6ZSBvZiBvdXRwdXRzLCB3aXRob3V0IG92ZXJoZWFkXG4gICAqL1xuICBnZXRPdXRwdXRzVlNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vdXRwdXRzLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogRXN0aW1hdGVzIHRoZSB2aXJ0dWFsIHNpemUgKDEvNCB3ZWlnaHQpIG9mIGEgc2lnbmVkIHRyYW5zYWN0aW9uIGFzIHN1bSBvZlxuICAgKiBvdmVyaGVhZCB2c2l6ZSwgaW5wdXQgdnNpemUgYW5kIG91dHB1dCB2c2l6ZS5cbiAgICogQHJldHVybnMge051bWJlcn0gVGhlIGVzdGltYXRlZCB2c2l6ZSBvZiB0aGUgdHJhbnNhY3Rpb24gZGltZW5zaW9ucy5cbiAgICovXG4gIGdldFZTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3ZlcmhlYWRWU2l6ZSgpICsgdGhpcy5nZXRJbnB1dHNWU2l6ZSgpICsgdGhpcy5nZXRPdXRwdXRzVlNpemUoKTtcbiAgfVxufVxuXG4vLyBJbml0aWFsaXplIHN0YXRpYyBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSB0aGUgY2xhc3MgdG8gYmUgZnVsbHkgZGVmaW5lZCBmaXJzdFxuRGltZW5zaW9ucy5TaW5nbGVPdXRwdXQgPSBPYmplY3QuZnJlZXplKHtcbiAgcDJzaDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJzaE91dHB1dFNpemUpLFxuICBwMnNoUDJ3c2g6IERpbWVuc2lvbnMuc2luZ2xlT3V0cHV0KFZpcnR1YWxTaXplcy50eFAyc2hQMndzaE91dHB1dFNpemUpLFxuICBwMndzaDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJ3c2hPdXRwdXRTaXplKSxcbiAgcDJ0cjogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJ0ck91dHB1dFNpemUpLFxuICBwMnBraDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJwa2hPdXRwdXRTaXplKSxcbiAgcDJ3cGtoOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMndwa2hPdXRwdXRTaXplKSxcbn0pO1xuXG4vLyBJbml0aWFsaXplIFNpbmdsZUlucHV0IGFmdGVyIHRoZSBjbGFzcyBpcyBmdWxseSBkZWZpbmVkXG5EaW1lbnNpb25zLlNpbmdsZUlucHV0ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHAyc2g6IERpbWVuc2lvbnMuc3VtKHsgblAyc2hJbnB1dHM6IDEgfSksXG4gIHAyc2hQMndzaDogRGltZW5zaW9ucy5zdW0oeyBuUDJzaFAyd3NoSW5wdXRzOiAxIH0pLFxuICBwMndzaDogRGltZW5zaW9ucy5zdW0oeyBuUDJ3c2hJbnB1dHM6IDEgfSksXG4gIHAydHJLZXlwYXRoOiBEaW1lbnNpb25zLnN1bSh7IG5QMnRyS2V5cGF0aElucHV0czogMSB9KSxcbiAgcDJ0clNjcmlwdFBhdGhMZXZlbDE6IERpbWVuc2lvbnMuc3VtKHsgblAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzOiAxIH0pLFxuICBwMnRyU2NyaXB0UGF0aExldmVsMjogRGltZW5zaW9ucy5zdW0oeyBuUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHM6IDEgfSksXG4gIHAyc2hQMnBrOiBEaW1lbnNpb25zLnN1bSh7IG5QMnNoUDJwa0lucHV0czogMSB9KSxcbn0pO1xuXG4vLyBJbml0aWFsaXplIHRoZSBBU1NVTUVfIGNvbnN0YW50c1xuRGltZW5zaW9ucy5BU1NVTUVfUDJTSCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJzaDtcbkRpbWVuc2lvbnMuQVNTVU1FX1AyU0hfUDJXU0ggPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyc2hQMndzaDtcbkRpbWVuc2lvbnMuQVNTVU1FX1AyV1NIID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMndzaDtcbkRpbWVuc2lvbnMuQVNTVU1FX1AyVFJfS0VZUEFUSCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0cktleXBhdGg7XG5EaW1lbnNpb25zLkFTU1VNRV9QMlRSX1NDUklQVFBBVEhfTEVWRUwxID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMTtcbkRpbWVuc2lvbnMuQVNTVU1FX1AyVFJfU0NSSVBUUEFUSF9MRVZFTDIgPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwyO1xuRGltZW5zaW9ucy5BU1NVTUVfUDJTSF9QMlBLX0lOUFVUID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnNoUDJwaztcbiJdfQ==
@@ -5,4 +5,5 @@ Codes,
5
5
  /** @deprecated - use utxolib.bitgo */
6
6
  CodesTypes, };
7
7
  export * from './dimensions';
8
+ export { VirtualSizes } from './virtualSizes';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,UAAU,MAAM,SAAS,CAAC;AAC7C,OAAO;AACL,sCAAsC;AACtC,KAAK;AACL,sCAAsC;AACtC,UAAU,GACX,CAAC;AAEF,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,UAAU,MAAM,SAAS,CAAC;AAC7C,OAAO;AACL,sCAAsC;AACtC,KAAK;AACL,sCAAsC;AACtC,UAAU,GACX,CAAC;AAEF,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/src/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,20 +15,32 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
37
  };
24
38
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.CodesTypes = exports.Codes = void 0;
39
+ exports.VirtualSizes = exports.CodesTypes = exports.Codes = void 0;
26
40
  const codes_1 = __importStar(require("./codes")), CodesTypes = codes_1;
27
41
  exports.Codes = codes_1.default;
28
42
  exports.CodesTypes = CodesTypes;
29
43
  __exportStar(require("./dimensions"), exports);
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVFQUE2QztBQUczQyxnQkFISyxlQUFLLENBR0w7QUFFTCxnQ0FBVTtBQUdaLCtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb2RlcywgKiBhcyBDb2Rlc1R5cGVzIGZyb20gJy4vY29kZXMnO1xuZXhwb3J0IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgQ29kZXMsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIENvZGVzVHlwZXMsXG59O1xuXG5leHBvcnQgKiBmcm9tICcuL2RpbWVuc2lvbnMnO1xuIl19
44
+ var virtualSizes_1 = require("./virtualSizes");
45
+ Object.defineProperty(exports, "VirtualSizes", { enumerable: true, get: function () { return virtualSizes_1.VirtualSizes; } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUVBQTZDO0FBRzNDLGdCQUhLLGVBQUssQ0FHTDtBQUVMLGdDQUFVO0FBR1osK0NBQTZCO0FBQzdCLCtDQUE4QztBQUFyQyw0R0FBQSxZQUFZLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29kZXMsICogYXMgQ29kZXNUeXBlcyBmcm9tICcuL2NvZGVzJztcbmV4cG9ydCB7XG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIENvZGVzLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBDb2Rlc1R5cGVzLFxufTtcblxuZXhwb3J0ICogZnJvbSAnLi9kaW1lbnNpb25zJztcbmV4cG9ydCB7IFZpcnR1YWxTaXplcyB9IGZyb20gJy4vdmlydHVhbFNpemVzJztcbiJdfQ==
@@ -2,16 +2,16 @@
2
2
  * Defines input sizes for BitGo signature scripts.
3
3
  */
4
4
  export declare function varSliceSize(someScript: Sized): number;
5
- export declare type Sized = {
5
+ export type Sized = {
6
6
  length: number;
7
7
  };
8
- export declare type Input = {
8
+ export type Input = {
9
9
  script: Sized;
10
10
  witness: Sized[];
11
11
  };
12
12
  export declare function getInputByteLength(input: Input, allowWitness: boolean): number;
13
13
  export declare function getInputWeight(input: Input): number;
14
- export declare type InputComponents = {
14
+ export type InputComponents = {
15
15
  script: number[];
16
16
  witness: number[];
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"inputWeights.d.ts","sourceRoot":"","sources":["../../src/inputWeights.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,YAAY,CAAC,UAAU,EAAE,KAAK,GAAG,MAAM,CAItD;AAaD,oBAAY,KAAK,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,KAAK,GAAG;IAClB,MAAM,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,KAAK,EAAE,CAAC;CAClB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAM9E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEnD;AAED,oBAAY,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAMnE;AAgCD,eAAO,MAAM,mBAAmB,EAAE,eAGjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAGtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAGlC,CAAC;AAGF,eAAO,MAAM,2BAA2B,EAAE,eAGzC,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,eAGlD,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,eAGlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAGrC,CAAC"}
1
+ {"version":3,"file":"inputWeights.d.ts","sourceRoot":"","sources":["../../src/inputWeights.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,YAAY,CAAC,UAAU,EAAE,KAAK,GAAG,MAAM,CAItD;AAaD,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,KAAK,EAAE,CAAC;CAClB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAM9E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEnD;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAMnE;AAgCD,eAAO,MAAM,mBAAmB,EAAE,eAGjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAGtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAGlC,CAAC;AAGF,eAAO,MAAM,2BAA2B,EAAE,eAGzC,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,eAGlD,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,eAGlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAGrC,CAAC"}
@@ -6,13 +6,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.inputComponentsP2shP2pk = exports.inputComponentsP2trScriptSpendLevel2 = exports.inputComponentsP2trScriptSpendLevel1 = exports.inputComponentsP2trKeySpend = exports.inputComponentsP2wsh = exports.inputComponentsP2shP2wsh = exports.inputComponentsP2sh = exports.getInputComponentsWeight = exports.getInputWeight = exports.getInputByteLength = exports.varSliceSize = void 0;
9
+ exports.inputComponentsP2shP2pk = exports.inputComponentsP2trScriptSpendLevel2 = exports.inputComponentsP2trScriptSpendLevel1 = exports.inputComponentsP2trKeySpend = exports.inputComponentsP2wsh = exports.inputComponentsP2shP2wsh = exports.inputComponentsP2sh = void 0;
10
+ exports.varSliceSize = varSliceSize;
11
+ exports.getInputByteLength = getInputByteLength;
12
+ exports.getInputWeight = getInputWeight;
13
+ exports.getInputComponentsWeight = getInputComponentsWeight;
10
14
  const varuint_bitcoin_1 = __importDefault(require("varuint-bitcoin"));
11
15
  function varSliceSize(someScript) {
12
16
  const length = someScript.length;
13
17
  return varuint_bitcoin_1.default.encodingLength(length) + length;
14
18
  }
15
- exports.varSliceSize = varSliceSize;
16
19
  function vectorSize(someVector) {
17
20
  const length = someVector.length;
18
21
  return (varuint_bitcoin_1.default.encodingLength(length) +
@@ -25,11 +28,9 @@ function getInputByteLength(input, allowWitness) {
25
28
  varSliceSize(input.script) +
26
29
  (allowWitness ? vectorSize(input.witness) : 0));
27
30
  }
28
- exports.getInputByteLength = getInputByteLength;
29
31
  function getInputWeight(input) {
30
32
  return 3 * getInputByteLength(input, false) + getInputByteLength(input, true);
31
33
  }
32
- exports.getInputWeight = getInputWeight;
33
34
  function getInputComponentsWeight(c) {
34
35
  const scriptSize = c.script.reduce((a, b) => a + b, 0);
35
36
  return getInputWeight({
@@ -37,7 +38,6 @@ function getInputComponentsWeight(c) {
37
38
  witness: c.witness.map((v) => ({ length: v })),
38
39
  });
39
40
  }
40
- exports.getInputComponentsWeight = getInputComponentsWeight;
41
41
  const opSize = 1;
42
42
  const op0Size = opSize;
43
43
  const opPushSize = opSize;
@@ -94,4 +94,4 @@ exports.inputComponentsP2shP2pk = {
94
94
  script: [opPushSize + ecdsaSignatureSize, opPushSize + p2pkPubScriptSize],
95
95
  witness: [],
96
96
  };
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRXZWlnaHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0V2VpZ2h0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7OztBQUVILHNFQUFzQztBQUV0QyxTQUFnQixZQUFZLENBQUMsVUFBaUI7SUFDNUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUVqQyxPQUFPLHlCQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxDQUFDO0FBSkQsb0NBSUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxVQUFtQjtJQUNyQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBRWpDLE9BQU8sQ0FDTCx5QkFBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNqQyxPQUFPLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNOLENBQUM7QUFDSixDQUFDO0FBV0QsU0FBZ0Isa0JBQWtCLENBQUMsS0FBWSxFQUFFLFlBQXFCO0lBQ3BFLE9BQU8sQ0FDTCxFQUFFLENBQUMseUNBQXlDO1FBQzVDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzFCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0MsQ0FBQztBQUNKLENBQUM7QUFORCxnREFNQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUFZO0lBQ3pDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENB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Q0FBQztDQUM1QixDQUFDO0FBRVcsUUFBQSxvQ0FBb0MsR0FBb0I7SUFDbkUsTUFBTSxFQUFFLEVBQUU7SUFDVixPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztDQUM1QixDQUFDO0FBRVcsUUFBQSx1QkFBdUIsR0FBb0I7SUFDdEQsTUFBTSxFQUFFLENBQUMsVUFBVSxHQUFHLGtCQUFrQixFQUFFLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQztJQUN6RSxPQUFPLEVBQUUsRUFBRTtDQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmluZXMgaW5wdXQgc2l6ZXMgZm9yIEJpdEdvIHNpZ25hdHVyZSBzY3JpcHRzLlxuICovXG5cbmltcG9ydCB2YXJ1aW50IGZyb20gJ3ZhcnVpbnQtYml0Y29pbic7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJTbGljZVNpemUoc29tZVNjcmlwdDogU2l6ZWQpOiBudW1iZXIge1xuICBjb25zdCBsZW5ndGggPSBzb21lU2NyaXB0Lmxlbmd0aDtcblxuICByZXR1cm4gdmFydWludC5lbmNvZGluZ0xlbmd0aChsZW5ndGgpICsgbGVuZ3RoO1xufVxuXG5mdW5jdGlvbiB2ZWN0b3JTaXplKHNvbWVWZWN0b3I6IFNpemVkW10pOiBudW1iZXIge1xuICBjb25zdCBsZW5ndGggPSBzb21lVmVjdG9yLmxlbmd0aDtcblxuICByZXR1cm4gKFxuICAgIHZhcnVpbnQuZW5jb2RpbmdMZW5ndGgobGVuZ3RoKSArXG4gICAgc29tZVZlY3Rvci5yZWR1Y2UoKHN1bSwgd2l0bmVzcykgPT4ge1xuICAgICAgcmV0dXJuIHN1bSArIHZhclNsaWNlU2l6ZSh3aXRuZXNzKTtcbiAgICB9LCAwKVxuICApO1xufVxuXG5leHBvcnQgdHlwZSBTaXplZCA9IHtcbiAgbGVuZ3RoOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJbnB1dCA9IHtcbiAgc2NyaXB0OiBTaXplZDtcbiAgd2l0bmVzczogU2l6ZWRbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dEJ5dGVMZW5ndGgoaW5wdXQ6IElucHV0LCBhbGxvd1dpdG5lc3M6IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIDQwIC8qIGlucHV0SWQoMzIpLCBpbmRleCg0KSwgblNlcXVlbmNlKDQpICovICtcbiAgICB2YXJTbGljZVNpemUoaW5wdXQuc2NyaXB0KSArXG4gICAgKGFsbG93V2l0bmVzcyA/IHZlY3RvclNpemUoaW5wdXQud2l0bmVzcykgOiAwKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRXZWlnaHQoaW5wdXQ6IElucHV0KTogbnVtYmVyIHtcbiAgcmV0dXJuIDMgKiBnZXRJbnB1dEJ5dGVMZW5ndGgoaW5wdXQsIGZhbHNlKSArIGdldElucHV0Qnl0ZUxlbmd0aChpbnB1dCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCB0eXBlIElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBudW1iZXJbXTtcbiAgd2l0bmVzczogbnVtYmVyW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRDb21wb25lbnRzV2VpZ2h0KGM6IElucHV0Q29tcG9uZW50cyk6IG51bWJlciB7XG4gIGNvbnN0IHNjcmlwdFNpemUgPSBjLnNjcmlwdC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgcmV0dXJuIGdldElucHV0V2VpZ2h0KHtcbiAgICBzY3JpcHQ6IHsgbGVuZ3RoOiBzY3JpcHRTaXplIH0sXG4gICAgd2l0bmVzczogYy53aXRuZXNzLm1hcCgodikgPT4gKHsgbGVuZ3RoOiB2IH0pKSxcbiAgfSk7XG59XG5cbmNvbnN0IG9wU2l6ZSA9IDE7XG5jb25zdCBvcDBTaXplID0gb3BTaXplO1xuY29uc3Qgb3BQdXNoU2l6ZSA9IG9wU2l6ZTtcbmNvbnN0IG9wQ2hlY2tTaWdWZXJpZnlTaXplID0gb3BTaXplO1xuY29uc3Qgb3BDaGVja1NpZ1NpemUgPSBvcFNpemU7XG5jb25zdCBlY2RzYVNpZ25hdHVyZVNpemUgPSA3MjtcbmNvbnN0IHNjaG5vcnJQdWJrZXlTaXplID0gMzI7XG5jb25zdCBzY2hub3JyU2lnbmF0dXJlTm9TaWdoYXNoU2l6ZSA9IDY0O1xuY29uc3QgcDJtc1B1YlNjcmlwdFNpemUgPSAxMDU7IC8vIE5vdGU6IFRoaXMgaXMgdmFsaWQgZm9yIGEgY29tcHJlc3NlZCBwdWJsaWMga2V5IG9ubHlcbmNvbnN0IHAyd3NoUHViU2NyaXB0U2l6ZSA9IDM0O1xuY29uc3QgcDJwa1B1YlNjcmlwdFNpemUgPSAzNTtcblxuZnVuY3Rpb24gcDJ0clNjcmlwdFNwZW5kKGxldmVsOiAxIHwgMik6IG51bWJlcltdIHtcbiAgcmV0dXJuIFtcbiAgICBzY2hub3JyU2lnbmF0dXJlTm9TaWdoYXNoU2l6ZSxcbiAgICBzY2hub3JyU2lnbmF0dXJlTm9TaWdoYXNoU2l6ZSxcbiAgICBvcFB1c2hTaXplICsgc2Nobm9yclB1YmtleVNpemUgKyBvcENoZWNrU2lnU2l6ZSArIG9wUHVzaFNpemUgKyBzY2hub3JyUHVia2V5U2l6ZSArIG9wQ2hlY2tTaWdWZXJpZnlTaXplLFxuICAgIC8qIGhlYWRlciBieXRlICovIDEgKyAvKiBpbm5lciBrZXkgKi8gMzIgKyAvKiBpbm5lciBsZWFmICovIDMyICogbGV2ZWwsXG4gIF07XG59XG5cbmZ1bmN0aW9uIHAybXNTaWdTY3JpcHRTaXplKHdpdG5lc3M6IGJvb2xlYW4pIHtcbiAgcmV0dXJuIFtcbiAgICB3aXRuZXNzID8gMCA6IG9wMFNpemUsXG4gICAgKHdpdG5lc3MgPyAwIDogb3BQdXNoU2l6ZSkgKyBlY2RzYVNpZ25hdHVyZVNpemUsXG4gICAgKHdpdG5lc3MgPyAwIDogb3BQdXNoU2l6ZSkgKyBlY2RzYVNpZ25hdHVyZVNpemUsXG4gICAgKHdpdG5lc3MgPyAwIDogLyogT1BfUFVTSERBVEEyICovIG9wUHVzaFNpemUgKyAxKSArIHAybXNQdWJTY3JpcHRTaXplLFxuICBdO1xufVxuXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJzaDogSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IHAybXNTaWdTY3JpcHRTaXplKGZhbHNlKSxcbiAgd2l0bmVzczogW10sXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJzaFAyd3NoOiBJbnB1dENvbXBvbmVudHMgPSB7XG4gIHNjcmlwdDogW29wU2l6ZSArIHAyd3NoUHViU2NyaXB0U2l6ZV0sXG4gIHdpdG5lc3M6IHAybXNTaWdTY3JpcHRTaXplKHRydWUpLFxufTtcblxuZXhwb3J0IGNvbnN0IGlucHV0Q29tcG9uZW50c1Ayd3NoOiBJbnB1dENvbXBvbmVudHMgPSB7XG4gIHNjcmlwdDogW10sXG4gIHdpdG5lc3M6IHAybXNTaWdTY3JpcHRTaXplKHRydWUpLFxufTtcblxuLy8gU2VlOiBodHRwczovL211cmNoYW5kYW11cy5tZWRpdW0uY29tLzItb2YtMy1tdWx0aXNpZy1pbnB1dHMtdXNpbmctcGF5LXRvLXRhcHJvb3QtZDVmYWYyMzEyYmEzXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJ0cktleVNwZW5kOiBJbnB1dENvbXBvbmVudHMgPSB7XG4gIHNjcmlwdDogW10sXG4gIHdpdG5lc3M6IFtzY2hub3JyU2lnbmF0dXJlTm9TaWdoYXNoU2l6ZV0sXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJ0clNjcmlwdFNwZW5kTGV2ZWwxOiBJbnB1dENvbXBvbmVudHMgPSB7XG4gIHNjcmlwdDogW10sXG4gIHdpdG5lc3M6IHAydHJTY3JpcHRTcGVuZCgxKSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnRyU2NyaXB0U3BlbmRMZXZlbDI6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbXSxcbiAgd2l0bmVzczogcDJ0clNjcmlwdFNwZW5kKDIpLFxufTtcblxuZXhwb3J0IGNvbnN0IGlucHV0Q29tcG9uZW50c1Ayc2hQMnBrOiBJbnB1dENvbXBvbmVudHMgPSB7XG4gIHNjcmlwdDogW29wUHVzaFNpemUgKyBlY2RzYVNpZ25hdHVyZVNpemUsIG9wUHVzaFNpemUgKyBwMnBrUHViU2NyaXB0U2l6ZV0sXG4gIHdpdG5lc3M6IFtdLFxufTtcbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRXZWlnaHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0V2VpZ2h0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7OztBQUlILG9DQUlDO0FBc0JELGdEQU1DO0FBRUQsd0NBRUM7QUFPRCw0REFNQztBQW5ERCxzRUFBc0M7QUFFdEMsU0FBZ0IsWUFBWSxDQUFDLFVBQWlCO0lBQzVDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFFakMsT0FBTyx5QkFBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFVBQW1CO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFFakMsT0FBTyxDQUNMLHlCQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUM5QixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2pDLE9BQU8sR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ04sQ0FBQztBQUNKLENBQUM7QUFXRCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFZLEVBQUUsWUFBcUI7SUFDcEUsT0FBTyxDQUNMLEVBQUUsQ0FBQyx5Q0FBeUM7UUFDNUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUFZO0lBQ3pDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FB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QyxDQUFDO0NBQzVCLENBQUM7QUFFVyxRQUFBLG9DQUFvQyxHQUFvQjtJQUNuRSxNQUFNLEVBQUUsRUFBRTtJQUNWLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0NBQzVCLENBQUM7QUFFVyxRQUFBLHVCQUF1QixHQUFvQjtJQUN0RCxNQUFNLEVBQUUsQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLEVBQUUsVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ3pFLE9BQU8sRUFBRSxFQUFFO0NBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVmaW5lcyBpbnB1dCBzaXplcyBmb3IgQml0R28gc2lnbmF0dXJlIHNjcmlwdHMuXG4gKi9cblxuaW1wb3J0IHZhcnVpbnQgZnJvbSAndmFydWludC1iaXRjb2luJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhclNsaWNlU2l6ZShzb21lU2NyaXB0OiBTaXplZCk6IG51bWJlciB7XG4gIGNvbnN0IGxlbmd0aCA9IHNvbWVTY3JpcHQubGVuZ3RoO1xuXG4gIHJldHVybiB2YXJ1aW50LmVuY29kaW5nTGVuZ3RoKGxlbmd0aCkgKyBsZW5ndGg7XG59XG5cbmZ1bmN0aW9uIHZlY3RvclNpemUoc29tZVZlY3RvcjogU2l6ZWRbXSk6IG51bWJlciB7XG4gIGNvbnN0IGxlbmd0aCA9IHNvbWVWZWN0b3IubGVuZ3RoO1xuXG4gIHJldHVybiAoXG4gICAgdmFydWludC5lbmNvZGluZ0xlbmd0aChsZW5ndGgpICtcbiAgICBzb21lVmVjdG9yLnJlZHVjZSgoc3VtLCB3aXRuZXNzKSA9PiB7XG4gICAgICByZXR1cm4gc3VtICsgdmFyU2xpY2VTaXplKHdpdG5lc3MpO1xuICAgIH0sIDApXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFNpemVkID0ge1xuICBsZW5ndGg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIElucHV0ID0ge1xuICBzY3JpcHQ6IFNpemVkO1xuICB3aXRuZXNzOiBTaXplZFtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0Qnl0ZUxlbmd0aChpbnB1dDogSW5wdXQsIGFsbG93V2l0bmVzczogYm9vbGVhbik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgNDAgLyogaW5wdXRJZCgzMiksIGluZGV4KDQpLCBuU2VxdWVuY2UoNCkgKi8gK1xuICAgIHZhclNsaWNlU2l6ZShpbnB1dC5zY3JpcHQpICtcbiAgICAoYWxsb3dXaXRuZXNzID8gdmVjdG9yU2l6ZShpbnB1dC53aXRuZXNzKSA6IDApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFdlaWdodChpbnB1dDogSW5wdXQpOiBudW1iZXIge1xuICByZXR1cm4gMyAqIGdldElucHV0Qnl0ZUxlbmd0aChpbnB1dCwgZmFsc2UpICsgZ2V0SW5wdXRCeXRlTGVuZ3RoKGlucHV0LCB0cnVlKTtcbn1cblxuZXhwb3J0IHR5cGUgSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IG51bWJlcltdO1xuICB3aXRuZXNzOiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dENvbXBvbmVudHNXZWlnaHQoYzogSW5wdXRDb21wb25lbnRzKTogbnVtYmVyIHtcbiAgY29uc3Qgc2NyaXB0U2l6ZSA9IGMuc2NyaXB0LnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICByZXR1cm4gZ2V0SW5wdXRXZWlnaHQoe1xuICAgIHNjcmlwdDogeyBsZW5ndGg6IHNjcmlwdFNpemUgfSxcbiAgICB3aXRuZXNzOiBjLndpdG5lc3MubWFwKCh2KSA9PiAoeyBsZW5ndGg6IHYgfSkpLFxuICB9KTtcbn1cblxuY29uc3Qgb3BTaXplID0gMTtcbmNvbnN0IG9wMFNpemUgPSBvcFNpemU7XG5jb25zdCBvcFB1c2hTaXplID0gb3BTaXplO1xuY29uc3Qgb3BDaGVja1NpZ1ZlcmlmeVNpemUgPSBvcFNpemU7XG5jb25zdCBvcENoZWNrU2lnU2l6ZSA9IG9wU2l6ZTtcbmNvbnN0IGVjZHNhU2lnbmF0dXJlU2l6ZSA9IDcyO1xuY29uc3Qgc2Nobm9yclB1YmtleVNpemUgPSAzMjtcbmNvbnN0IHNjaG5vcnJTaWduYXR1cmVOb1NpZ2hhc2hTaXplID0gNjQ7XG5jb25zdCBwMm1zUHViU2NyaXB0U2l6ZSA9IDEwNTsgLy8gTm90ZTogVGhpcyBpcyB2YWxpZCBmb3IgYSBjb21wcmVzc2VkIHB1YmxpYyBrZXkgb25seVxuY29uc3QgcDJ3c2hQdWJTY3JpcHRTaXplID0gMzQ7XG5jb25zdCBwMnBrUHViU2NyaXB0U2l6ZSA9IDM1O1xuXG5mdW5jdGlvbiBwMnRyU2NyaXB0U3BlbmQobGV2ZWw6IDEgfCAyKTogbnVtYmVyW10ge1xuICByZXR1cm4gW1xuICAgIHNjaG5vcnJTaWduYXR1cmVOb1NpZ2hhc2hTaXplLFxuICAgIHNjaG5vcnJTaWduYXR1cmVOb1NpZ2hhc2hTaXplLFxuICAgIG9wUHVzaFNpemUgKyBzY2hub3JyUHVia2V5U2l6ZSArIG9wQ2hlY2tTaWdTaXplICsgb3BQdXNoU2l6ZSArIHNjaG5vcnJQdWJrZXlTaXplICsgb3BDaGVja1NpZ1ZlcmlmeVNpemUsXG4gICAgLyogaGVhZGVyIGJ5dGUgKi8gMSArIC8qIGlubmVyIGtleSAqLyAzMiArIC8qIGlubmVyIGxlYWYgKi8gMzIgKiBsZXZlbCxcbiAgXTtcbn1cblxuZnVuY3Rpb24gcDJtc1NpZ1NjcmlwdFNpemUod2l0bmVzczogYm9vbGVhbikge1xuICByZXR1cm4gW1xuICAgIHdpdG5lc3MgPyAwIDogb3AwU2l6ZSxcbiAgICAod2l0bmVzcyA/IDAgOiBvcFB1c2hTaXplKSArIGVjZHNhU2lnbmF0dXJlU2l6ZSxcbiAgICAod2l0bmVzcyA/IDAgOiBvcFB1c2hTaXplKSArIGVjZHNhU2lnbmF0dXJlU2l6ZSxcbiAgICAod2l0bmVzcyA/IDAgOiAvKiBPUF9QVVNIREFUQTIgKi8gb3BQdXNoU2l6ZSArIDEpICsgcDJtc1B1YlNjcmlwdFNpemUsXG4gIF07XG59XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnNoOiBJbnB1dENvbXBvbmVudHMgPSB7XG4gIHNjcmlwdDogcDJtc1NpZ1NjcmlwdFNpemUoZmFsc2UpLFxuICB3aXRuZXNzOiBbXSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnNoUDJ3c2g6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbb3BTaXplICsgcDJ3c2hQdWJTY3JpcHRTaXplXSxcbiAgd2l0bmVzczogcDJtc1NpZ1NjcmlwdFNpemUodHJ1ZSksXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJ3c2g6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbXSxcbiAgd2l0bmVzczogcDJtc1NpZ1NjcmlwdFNpemUodHJ1ZSksXG59O1xuXG4vLyBTZWU6IGh0dHBzOi8vbXVyY2hhbmRhbXVzLm1lZGl1bS5jb20vMi1vZi0zLW11bHRpc2lnLWlucHV0cy11c2luZy1wYXktdG8tdGFwcm9vdC1kNWZhZjIzMTJiYTNcbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnRyS2V5U3BlbmQ6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbXSxcbiAgd2l0bmVzczogW3NjaG5vcnJTaWduYXR1cmVOb1NpZ2hhc2hTaXplXSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnRyU2NyaXB0U3BlbmRMZXZlbDE6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbXSxcbiAgd2l0bmVzczogcDJ0clNjcmlwdFNwZW5kKDEpLFxufTtcblxuZXhwb3J0IGNvbnN0IGlucHV0Q29tcG9uZW50c1AydHJTY3JpcHRTcGVuZExldmVsMjogSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IFtdLFxuICB3aXRuZXNzOiBwMnRyU2NyaXB0U3BlbmQoMiksXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJzaFAycGs6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBbb3BQdXNoU2l6ZSArIGVjZHNhU2lnbmF0dXJlU2l6ZSwgb3BQdXNoU2l6ZSArIHAycGtQdWJTY3JpcHRTaXplXSxcbiAgd2l0bmVzczogW10sXG59O1xuIl19
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compactSize = exports.pushdataEncodingLength = void 0;
3
+ exports.pushdataEncodingLength = pushdataEncodingLength;
4
+ exports.compactSize = compactSize;
4
5
  const types_1 = require("./types");
5
6
  /**
6
7
  * Overhead size for a pushdata element in a script
@@ -25,7 +26,6 @@ function pushdataEncodingLength(i) {
25
26
  }
26
27
  throw new Error(`invalid pushdata size`);
27
28
  }
28
- exports.pushdataEncodingLength = pushdataEncodingLength;
29
29
  /**
30
30
  * https://developer.bitcoin.org/reference/transactions.html#compactsize-unsigned-integers
31
31
  * https://github.com/bitcoinjs/varuint-bitcoin/blob/1d5b253/index.js#L79
@@ -47,5 +47,4 @@ function compactSize(integer) {
47
47
  }
48
48
  return 9;
49
49
  }
50
- exports.compactSize = compactSize;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0U2l6ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0U2l6ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTBDO0FBRTFDOzs7R0FHRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLENBQVM7SUFDOUM7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ1YsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUNYLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7SUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7UUFDWCxPQUFPLENBQUMsQ0FBQztLQUNWO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFsQkQsd0RBa0JDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixXQUFXLENBQUMsT0FBZTtJQUN6QyxJQUFJLENBQUMsdUJBQWUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsTUFBTSxJQUFJLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7SUFDRCxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUU7UUFDckIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRTtRQUN6QixPQUFPLENBQUMsQ0FBQztLQUNWO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBZEQsa0NBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb3NpdGl2ZUludGVnZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBPdmVyaGVhZCBzaXplIGZvciBhIHB1c2hkYXRhIGVsZW1lbnQgaW4gYSBzY3JpcHRcbiAqIEBwYXJhbSBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoZGF0YUVuY29kaW5nTGVuZ3RoKGk6IG51bWJlcik6IG51bWJlciB7XG4gIC8qXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAwNjIubWVkaWF3aWtpI3B1c2gtb3BlcmF0b3JzXG4gICAqIFB1c2hpbmcgYW55IG90aGVyIGJ5dGUgc2VxdWVuY2UgdXAgdG8gNzUgYnl0ZXMgbXVzdCB1c2UgdGhlIG5vcm1hbCBkYXRhIHB1c2ggKG9wY29kZSBieXRlIG4sIHdpdGggbiB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBmb2xsb3dlZCBuIGJ5dGVzIG9mIGRhdGEgYmVpbmcgcHVzaGVkKS5cbiAgICogUHVzaGluZyA3NiB0byAyNTUgYnl0ZXMgbXVzdCB1c2UgT1BfUFVTSERBVEExLlxuICAgKiBQdXNoaW5nIDI1NiB0byA1MjAgYnl0ZXMgbXVzdCB1c2UgT1BfUFVTSERBVEEyLlxuICAgKiBPUF9QVVNIREFUQTQgY2FuIG5ldmVyIGJlIHVzZWQsIGFzIHB1c2hlcyBvdmVyIDUyMCBieXRlcyBhcmUgbm90IGFsbG93ZWQsIGFuZCB0aG9zZSBiZWxvdyBjYW4gYmUgZG9uZSB1c2luZyBvdGhlciBvcGVyYXRvcnMuXG4gICAqL1xuICBpZiAoaSA8IDc2KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKGkgPCAyNTUpIHtcbiAgICByZXR1cm4gMjtcbiAgfVxuICBpZiAoaSA8IDUyMCkge1xuICAgIHJldHVybiAzO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdXNoZGF0YSBzaXplYCk7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYml0Y29pbi5vcmcvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy5odG1sI2NvbXBhY3RzaXplLXVuc2lnbmVkLWludGVnZXJzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL3ZhcnVpbnQtYml0Y29pbi9ibG9iLzFkNWIyNTMvaW5kZXguanMjTDc5XG4gKiBAcGFyYW0gaW50ZWdlclxuICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBjb21wYWN0IHNpemUgdGhlIGludGVnZXIgcmVxdWlyZXMgd2hlbiBzZXJpYWxpemVkIGluIGEgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RTaXplKGludGVnZXI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghUG9zaXRpdmVJbnRlZ2VyLmlzKGludGVnZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcmApO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDI1Mikge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDB4ZmZmZikge1xuICAgIHJldHVybiAzO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDB4ZmZmZmZmZmYpIHtcbiAgICByZXR1cm4gNTtcbiAgfVxuICByZXR1cm4gOTtcbn1cbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0U2l6ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0U2l6ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSx3REFrQkM7QUFRRCxrQ0FjQztBQTlDRCxtQ0FBMEM7QUFFMUM7OztHQUdHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsQ0FBUztJQUM5Qzs7Ozs7O09BTUc7SUFDSCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1osT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDWixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLE9BQWU7SUFDekMsSUFBSSxDQUFDLHVCQUFlLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb3NpdGl2ZUludGVnZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBPdmVyaGVhZCBzaXplIGZvciBhIHB1c2hkYXRhIGVsZW1lbnQgaW4gYSBzY3JpcHRcbiAqIEBwYXJhbSBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoZGF0YUVuY29kaW5nTGVuZ3RoKGk6IG51bWJlcik6IG51bWJlciB7XG4gIC8qXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAwNjIubWVkaWF3aWtpI3B1c2gtb3BlcmF0b3JzXG4gICAqIFB1c2hpbmcgYW55IG90aGVyIGJ5dGUgc2VxdWVuY2UgdXAgdG8gNzUgYnl0ZXMgbXVzdCB1c2UgdGhlIG5vcm1hbCBkYXRhIHB1c2ggKG9wY29kZSBieXRlIG4sIHdpdGggbiB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBmb2xsb3dlZCBuIGJ5dGVzIG9mIGRhdGEgYmVpbmcgcHVzaGVkKS5cbiAgICogUHVzaGluZyA3NiB0byAyNTUgYnl0ZXMgbXVzdCB1c2UgT1BfUFVTSERBVEExLlxuICAgKiBQdXNoaW5nIDI1NiB0byA1MjAgYnl0ZXMgbXVzdCB1c2UgT1BfUFVTSERBVEEyLlxuICAgKiBPUF9QVVNIREFUQTQgY2FuIG5ldmVyIGJlIHVzZWQsIGFzIHB1c2hlcyBvdmVyIDUyMCBieXRlcyBhcmUgbm90IGFsbG93ZWQsIGFuZCB0aG9zZSBiZWxvdyBjYW4gYmUgZG9uZSB1c2luZyBvdGhlciBvcGVyYXRvcnMuXG4gICAqL1xuICBpZiAoaSA8IDc2KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKGkgPCAyNTUpIHtcbiAgICByZXR1cm4gMjtcbiAgfVxuICBpZiAoaSA8IDUyMCkge1xuICAgIHJldHVybiAzO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdXNoZGF0YSBzaXplYCk7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYml0Y29pbi5vcmcvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy5odG1sI2NvbXBhY3RzaXplLXVuc2lnbmVkLWludGVnZXJzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL3ZhcnVpbnQtYml0Y29pbi9ibG9iLzFkNWIyNTMvaW5kZXguanMjTDc5XG4gKiBAcGFyYW0gaW50ZWdlclxuICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBjb21wYWN0IHNpemUgdGhlIGludGVnZXIgcmVxdWlyZXMgd2hlbiBzZXJpYWxpemVkIGluIGEgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RTaXplKGludGVnZXI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghUG9zaXRpdmVJbnRlZ2VyLmlzKGludGVnZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcmApO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDI1Mikge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDB4ZmZmZikge1xuICAgIHJldHVybiAzO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDB4ZmZmZmZmZmYpIHtcbiAgICByZXR1cm4gNTtcbiAgfVxuICByZXR1cm4gOTtcbn1cbiJdfQ==
package/dist/src/types.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,15 +15,25 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  exports.PositiveInteger = void 0;
23
37
  const t = __importStar(require("tcomb"));
24
38
  exports.PositiveInteger = t.refinement(t.Integer, (n) => n >= 0, 'PositiveInteger');
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUEyQjtBQUVkLFFBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdCBmcm9tICd0Y29tYic7XG5cbmV4cG9ydCBjb25zdCBQb3NpdGl2ZUludGVnZXIgPSB0LnJlZmluZW1lbnQodC5JbnRlZ2VyLCAobikgPT4gbiA+PSAwLCAnUG9zaXRpdmVJbnRlZ2VyJyk7XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQTJCO0FBRWQsUUFBQSxlQUFlLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0IGZyb20gJ3Rjb21iJztcblxuZXhwb3J0IGNvbnN0IFBvc2l0aXZlSW50ZWdlciA9IHQucmVmaW5lbWVudCh0LkludGVnZXIsIChuKSA9PiBuID49IDAsICdQb3NpdGl2ZUludGVnZXInKTtcbiJdfQ==
@@ -1,8 +1,8 @@
1
1
  export declare const VirtualSizes: Readonly<{
2
2
  /** @deprecated */
3
- txP2pkhInputSizeCompressedKey: number;
3
+ txP2pkhInputSizeCompressedKey: 148;
4
4
  /** @deprecated */
5
- txP2pkhInputSizeUncompressedKey: number;
5
+ txP2pkhInputSizeUncompressedKey: 180;
6
6
  txP2shInputSize: number;
7
7
  txP2shP2wshInputSize: number;
8
8
  txP2wshInputSize: number;
@@ -10,16 +10,16 @@ export declare const VirtualSizes: Readonly<{
10
10
  txP2shP2pkInputSize: number;
11
11
  txP2trScriptPathLevel1InputSize: number;
12
12
  txP2trScriptPathLevel2InputSize: number;
13
- txOutputAmountSize: number;
14
- txP2shOutputSize: number;
15
- txP2shP2wshOutputSize: number;
16
- txP2wshOutputSize: number;
17
- txP2trOutputSize: number;
18
- txP2pkhOutputSize: number;
19
- txP2wpkhOutputSize: number;
13
+ txOutputAmountSize: 8;
14
+ txP2shOutputSize: 32;
15
+ txP2shP2wshOutputSize: 32;
16
+ txP2wshOutputSize: 43;
17
+ txP2trOutputSize: 43;
18
+ txP2pkhOutputSize: 34;
19
+ txP2wpkhOutputSize: 31;
20
20
  /** @deprecated - use txP2pkhOutputSize instead */
21
- txOutputSize: number;
22
- txOverheadSize: number;
23
- txSegOverheadVSize: number;
21
+ txOutputSize: 34;
22
+ txOverheadSize: 10;
23
+ txSegOverheadVSize: 11;
24
24
  }>;
25
25
  //# sourceMappingURL=virtualSizes.d.ts.map