@bitgo-beta/sdk-coin-flrp 1.0.1-beta.783 → 1.0.1-beta.784

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ImportInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ImportInCTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAGL,UAAU,EAMX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAmE,EAAE,EAAE,MAAM,SAAS,CAAC;AAQ9F,qBAAa,kBAAmB,SAAQ,2BAA2B;gBACrD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ7C;;;;OAIG;IACH,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK1B,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI;IA4E9E,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItC;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAyIvC;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;CAyBrB"}
1
+ {"version":3,"file":"ImportInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ImportInCTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAGL,UAAU,EAMX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAmE,EAAE,EAAE,MAAM,SAAS,CAAC;AAQ9F,qBAAa,kBAAmB,SAAQ,2BAA2B;gBACrD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ7C;;;;OAIG;IACH,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK1B,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI;IA4E9E,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItC;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAgJvC;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;CAyBrB"}
@@ -111,14 +111,21 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
111
111
  if (this.transaction._to.length !== 1) {
112
112
  throw new sdk_core_1.BuildTransactionError('to is required');
113
113
  }
114
- const hasFee = !!this.transaction._fee.fee && BigInt(this.transaction._fee.fee) !== BigInt(0);
114
+ let hasFee = !!this.transaction._fee.fee && BigInt(this.transaction._fee.fee) !== BigInt(0);
115
115
  const hasBaseFee = !!this.transaction._fee.baseFee && BigInt(this.transaction._fee.baseFee) !== BigInt(0);
116
- if (!hasFee && !hasBaseFee) {
117
- throw new sdk_core_1.BuildTransactionError('fee is required');
118
- }
119
116
  if (hasFee && hasBaseFee) {
120
117
  throw new sdk_core_1.BuildTransactionError('fee and baseFee are mutually exclusive: use baseFee for gas-aware fee calculation, or fee for a fixed amount, not both');
121
118
  }
119
+ // Constructor clears the inherited network.txFee so an unset fee is distinguishable from an
120
+ // explicit fee() call (needed for the baseFee-only path). When the caller sets neither fee
121
+ // nor baseFee, fall back to network.txFee to preserve pre-CECHO-1821 behavior.
122
+ if (!hasFee && !hasBaseFee) {
123
+ this.transaction._fee.fee = this.fixedFee;
124
+ hasFee = !!this.transaction._fee.fee && BigInt(this.transaction._fee.fee) !== BigInt(0);
125
+ if (!hasFee) {
126
+ throw new sdk_core_1.BuildTransactionError('Either fee or baseFee is required');
127
+ }
128
+ }
122
129
  if (!this.transaction._context) {
123
130
  throw new sdk_core_1.BuildTransactionError('context is required');
124
131
  }
@@ -224,4 +231,4 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
224
231
  }
225
232
  }
226
233
  exports.ImportInCTxBuilder = ImportInCTxBuilder;
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLCtFQUE0RTtBQUM1RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5Rjs7O0dBR0c7QUFDSCxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUVuQyxNQUFhLGtCQUFtQixTQUFRLHlEQUEyQjtJQUNqRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixzRkFBc0Y7UUFDdEYseUZBQXlGO1FBQ3pGLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsRUFBRSxDQUFDLFFBQWdCO1FBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBTSxFQUFFLFFBQWlCLEVBQUUsaUJBQWdDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLEVBQXdCLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLHVCQUFZLENBQUMscUVBQXFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLE9BQU8sQ0FBQyxNQUFN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QUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELFNBQVMsRUFBRSxTQUFTO2dCQUNwQixTQUFTLEVBQUUsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQzVELFNBQVMsRUFBRSxjQUFjO2dCQUN6QixjQUFjLEVBQUUsV0FBVzthQUM1QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUExUkQsZ0RBMFJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBOb3RTdXBwb3J0ZWQsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEF0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vYXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIGV2bVNlcmlhbCxcbiAgVW5zaWduZWRUeCxcbiAgQ3JlZGVudGlhbCxcbiAgVHJhbnNmZXJhYmxlSW5wdXQsXG4gIFRyYW5zZmVySW5wdXQsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICB1dGlscyBhcyBGbGFyZVV0aWxzLFxuICBldm0sXG59IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgRmxhcmVUcmFuc2FjdGlvblR5cGUsIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5cbi8qKlxuICogQnVmZmVyIGFwcGxpZWQgdG8gYSBjYWxsZXItc3VwcGxpZWQgYmFzZSBmZWUgdG8gYWJzb3JiIEMtY2hhaW4gYmFzZS1mZWUgdm9sYXRpbGl0eVxuICogYmV0d2VlbiB0cmFuc2FjdGlvbiBzaWduaW5nIGFuZCBicm9hZGNhc3QuIEV4cHJlc3NlZCBpbiBiYXNpcyBwb2ludHMgKDEwMDAgPSAxMCUpLlxuICovXG5jb25zdCBCQVNFX0ZFRV9QQURESU5HX0JQUyA9IDEwMDBuO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0SW5DVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIC8vIFVubGlrZSBQLWNoYWluLW9yaWVudGVkIGF0b21pYyB0eHMsIGEgQy1jaGFpbiBpbXBvcnQgaGFzIG5vIG1lYW5pbmdmdWwgZGVmYXVsdCBmZWUuXG4gICAgLy8gQ2xlYXIgdGhlIGluaGVyaXRlZCBuZXR3b3JrIHR4RmVlIGRlZmF1bHQgc28gYW4gdW5zZXQgZmVlIGlzIGRldGVjdGFibGUgYXQgYnVpbGQgdGltZSxcbiAgICAvLyByYXRoZXIgdGhhbiBzaWxlbnRseSBidWlsZGluZyB3aXRoIHRoYXQgdW5yZWxhdGVkIGRlZmF1bHQgdmFsdWUuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSA9ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEMtY2hhaW4gYWRkcmVzcyB3aG8gaXMgdGFyZ2V0IG9mIHRoZSBpbXBvcnQuXG4gICAqIEFkZHJlc3MgZm9ybWF0IGlzIGV0aCBsaWtlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjQWRkcmVzc1xuICAgKi9cbiAgdG8oY0FkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RvID0gW3V0aWxzLnBhcnNlQWRkcmVzcyhjQWRkcmVzcyldO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkltcG9ydDtcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUeCwgcmF3Qnl0ZXM/OiBCdWZmZXIsIHBhcnNlZENyZWRlbnRpYWxzPzogQ3JlZGVudGlhbFtdKTogdGhpcyB7XG4gICAgY29uc3QgYmFzZVR4ID0gdHggYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgIGlmICghdGhpcy52ZXJpZnlUeFR5cGUoYmFzZVR4Ll90eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHMgPSBiYXNlVHguT3V0cztcbiAgICBpZiAob3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGNhbiBoYXZlIG9uZSBvdXRwdXQnKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTtcblxuICAgIGlmIChCdWZmZXIuZnJvbShvdXRwdXQuYXNzZXRJZC50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSAhPT0gdGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NldElEIGFyZSBub3QgZXF1YWxzJyk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RvID0gW0J1ZmZlci5mcm9tKG91dHB1dC5hZGRyZXNzLnRvQnl0ZXMoKSldO1xuXG4gICAgY29uc3QgaW5wdXRzID0gYmFzZVR4LmltcG9ydGVkSW5wdXRzO1xuXG4gICAgY29uc3QgZmlyc3RJbnB1dCA9IGlucHV0c1swXTtcbiAgICBjb25zdCBpbnB1dFRocmVzaG9sZCA9IGZpcnN0SW5wdXQuc2lnSW5kaWNpZXMoKS5sZW5ndGggfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IGlucHV0VGhyZXNob2xkO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB0aGlzLnJlY292ZXJVdHhvcyhpbnB1dHMpO1xuXG4gICAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGlucHV0cy5yZWR1Y2UoKHQsIGkpID0+IHQgKyBpLmFtb3VudCgpLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IHRvdGFsT3V0cHV0QW1vdW50ID0gb3V0cHV0LmFtb3VudC52YWx1ZSgpO1xuXG4gICAgY29uc3QgZmVlID0gdG90YWxJbnB1dEFtb3VudCAtIHRvdGFsT3V0cHV0QW1vdW50O1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBwYXJzZWRDcmVkZW50aWFscyB8fCBbXTtcbiAgICBjb25zdCBoYXNDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoaGFzQ3JlZGVudGlhbHMgJiYgcmF3Qnl0ZXMpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX3Jhd1NpZ25lZEJ5dGVzID0gcmF3Qnl0ZXM7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlID0ge1xuICAgICAgZmVlOiBmZWUudG9TdHJpbmcoKSxcbiAgICB9O1xuXG4gICAgdGhpcy5jb21wdXRlQWRkcmVzc2VzSW5kZXgodHJ1ZSk7XG5cbiAgICAvLyBDcmVhdGUgYWRkcmVzc01hcHMgdXNpbmcgc2lnSW5kaWNlcyBmcm9tIHBhcnNlZCB0cmFuc2FjdGlvbiBmb3IgY29uc2lzdGVuY3lcbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLm1hcCgodXR4bykgPT4ge1xuICAgICAgY29uc3QgdXR4b1RocmVzaG9sZCA9IHV0eG8udGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICAgIGNvbnN0IHNpZ0luZGljZXMgPSB1dHhvLmFkZHJlc3Nlc0luZGV4ID8/IFtdO1xuICAgICAgaWYgKHNpZ0luZGljZXMubGVuZ3RoID49IHV0eG9UaHJlc2hvbGQgJiYgc2lnSW5kaWNlcy5ldmVyeSgoaWR4KSA9PiBpZHggPj0gMCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4b1RocmVzaG9sZCwgc2lnSW5kaWNlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZsYXJlQWRkcmVzc01hcHMgPSBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyk7XG5cbiAgICAvLyBVc2UgcGFyc2VkIGNyZWRlbnRpYWxzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNyZWF0ZSBuZXcgb25lcyBiYXNlZCBvbiBzaWdJbmRpY2VzXG4gICAgbGV0IHR4Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXTtcbiAgICBpZiAoY3JlZGVudGlhbHMubGVuZ3RoID4gMCkge1xuICAgICAgdHhDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eENyZWRlbnRpYWxzID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubWFwKCh1dHhvKSA9PiB7XG4gICAgICAgIGNvbnN0IHV0eG9UaHJlc2hvbGQgPSB1dHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgICAgIGNvbnN0IHNpZ0luZGljZXMgPSB1dHhvLmFkZHJlc3Nlc0luZGV4ID8/IFtdO1xuICAgICAgICBpZiAoc2lnSW5kaWNlcy5sZW5ndGggPj0gdXR4b1RocmVzaG9sZCAmJiBzaWdJbmRpY2VzLmV2ZXJ5KChpZHgpID0+IGlkeCA+PSAwKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHV0eG9UaHJlc2hvbGQsIHNpZ0luZGljZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHV0eG9UaHJlc2hvbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGJhc2VUeCwgW10sIGZsYXJlQWRkcmVzc01hcHMsIHR4Q3JlZGVudGlhbHMpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih1bnNpZ25lZFR4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR4blR5cGUgPT09IEZsYXJlVHJhbnNhY3Rpb25UeXBlLkV2bUltcG9ydFR4O1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJbXBvcnRJbkNUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4blR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBpbXBvcnQgaW4gQy1jaGFpbiB0cmFuc2FjdGlvblxuICAgKiBGb2xsb3dpbmcgQVZBWCBQIGFwcHJvYWNoIGZvciBVVFhPIGhhbmRsaW5nIGFuZCBzaWduYXR1cmUgc2xvdCBhc3NpZ25tZW50LlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmhhc0NyZWRlbnRpYWxzKSByZXR1cm47XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uX3RvLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndG8gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgY29uc3QgaGFzRmVlID0gISF0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlICYmIEJpZ0ludCh0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlKSAhPT0gQmlnSW50KDApO1xuICAgIGNvbnN0IGhhc0Jhc2VGZWUgPSAhIXRoaXMudHJhbnNhY3Rpb24uX2ZlZS5iYXNlRmVlICYmIEJpZ0ludCh0aGlzLnRyYW5zYWN0aW9uLl9mZWUuYmFzZUZlZSkgIT09IEJpZ0ludCgwKTtcbiAgICBpZiAoIWhhc0ZlZSAmJiAhaGFzQmFzZUZlZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZmVlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmIChoYXNGZWUgJiYgaGFzQmFzZUZlZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgJ2ZlZSBhbmQgYmFzZUZlZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOiB1c2UgYmFzZUZlZSBmb3IgZ2FzLWF3YXJlIGZlZSBjYWxjdWxhdGlvbiwgb3IgZmVlIGZvciBhIGZpeGVkIGFtb3VudCwgbm90IGJvdGgnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2NvbnRleHQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzIHx8IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdmcm9tQWRkcmVzc2VzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3V0eG9zIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0aHJlc2hvbGQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXB1dGVBZGRyZXNzZXNJbmRleCgpO1xuXG4gICAgdGhpcy52YWxpZGF0ZVV0eG9BZGRyZXNzZXMoKTtcblxuICAgIGNvbnN0IHNvdXJjZUNoYWluID0gJ1AnO1xuXG4gICAgLy8gQ29udmVydCBkZWNvZGVkIFVUWE9zIHRvIG5hdGl2ZSBGbGFyZUpTIFV0eG8gb2JqZWN0c1xuICAgIGNvbnN0IGFzc2V0SWQgPSB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQsICdoZXgnKSk7XG4gICAgY29uc3QgbmF0aXZlVXR4b3MgPSB1dGlscy5kZWNvZGVkVG9VdHhvcyh0aGlzLnRyYW5zYWN0aW9uLl91dHhvcywgYXNzZXRJZCk7XG5cbiAgICBjb25zdCB0b3RhbFV0eG9BbW91bnQgPSBuYXRpdmVVdHhvcy5yZWR1Y2UoKHN1bSwgdXR4bykgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdXR4by5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgICByZXR1cm4gc3VtICsgb3V0cHV0LmFtb3VudCgpO1xuICAgIH0sIEJpZ0ludCgwKSk7XG5cbiAgICBjb25zdCBzaWduaW5nQWRkcmVzc2VzID0gdGhpcy5nZXRTaWduaW5nQWRkcmVzc2VzKCk7XG5cbiAgICBsZXQgaW1wb3J0VHg6IFVuc2lnbmVkVHg7XG5cbiAgICBpZiAoaGFzQmFzZUZlZSkge1xuICAgICAgLy8gR2FzLWF3YXJlIHBhdGg6IGxldCBmbGFyZWpzIGNvbXB1dGUgdGhlIGFjdHVhbCBpbXBvcnQgZ2FzIGNvc3QgKGluY2x1ZGluZyB0aGVcbiAgICAgIC8vIH4xMCwwMDAgQXRvbWljVHhCYXNlQ29zdCkgZnJvbSB0aGUgcmVhbCB0eCBzaXplL2lucHV0cywgaW5zdGVhZCBvZiB0cnVzdGluZyBhXG4gICAgICAvLyBwcmUtY29tcHV0ZWQgZmVlIGFtb3VudC4gUGFkIHRoZSBiYXNlIGZlZSB0byBhYnNvcmIgdm9sYXRpbGl0eSBiZXR3ZWVuIHNpZ25pbmdcbiAgICAgIC8vIGFuZCBicm9hZGNhc3QuXG4gICAgICBjb25zdCBzdXBwbGllZEJhc2VGZWUgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fZmVlLmJhc2VGZWUgYXMgc3RyaW5nKTtcbiAgICAgIGNvbnN0IHBhZGRlZEJhc2VGZWUgPSAoc3VwcGxpZWRCYXNlRmVlICogKDEwMDAwbiArIEJBU0VfRkVFX1BBRERJTkdfQlBTKSkgLyAxMDAwMG47XG5cbiAgICAgIGltcG9ydFR4ID0gZXZtLm5ld0ltcG9ydFR4RnJvbUJhc2VGZWUoXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHQsXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX3RvWzBdLFxuICAgICAgICBzaWduaW5nQWRkcmVzc2VzLFxuICAgICAgICBuYXRpdmVVdHhvcyxcbiAgICAgICAgc291cmNlQ2hhaW4sXG4gICAgICAgIHBhZGRlZEJhc2VGZWVcbiAgICAgICkgYXMgVW5zaWduZWRUeDtcblxuICAgICAgY29uc3QgaW5uZXJJbXBvcnRUeCA9IGltcG9ydFR4LmdldFR4KCkgYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgY29uc3QgdG90YWxPdXRwdXRBbW91bnQgPSBpbm5lckltcG9ydFR4Lk91dHMucmVkdWNlKChzdW0sIG91dCkgPT4gc3VtICsgb3V0LmFtb3VudC52YWx1ZSgpLCBCaWdJbnQoMCkpO1xuICAgICAgY29uc3QgY29tcHV0ZWRGZWUgPSB0b3RhbFV0eG9BbW91bnQgLSB0b3RhbE91dHB1dEFtb3VudDtcbiAgICAgIC8vIE1pcnJvciB0aGUgbGVnYWN5IGZpeGVkLWZlZSBwYXRoOiB0aGUgZmVlIG11c3Qgbm90IGNvbnN1bWUgdGhlIGVudGlyZSBVVFhPIGFtb3VudCxcbiAgICAgIC8vIG90aGVyd2lzZSBub3RoaW5nIGlzIGFjdHVhbGx5IGltcG9ydGVkICh0b3RhbE91dHB1dEFtb3VudCB3b3VsZCBiZSAwKS5cbiAgICAgIGlmIChjb21wdXRlZEZlZSA8PSBCaWdJbnQoMCkgfHwgdG90YWxPdXRwdXRBbW91bnQgPD0gQmlnSW50KDApKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgYEluc3VmZmljaWVudCBVVFhPIGJhbGFuY2U6IGhhdmUgJHt0b3RhbFV0eG9BbW91bnQudG9TdHJpbmcoKX0gbkZMUiwgY29tcHV0ZWQgaW1wb3J0IGZlZSBvZiAke2NvbXB1dGVkRmVlLnRvU3RyaW5nKCl9IG5GTFIgbGVhdmVzIG5vdGhpbmcgdG8gaW1wb3J0YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSA9IGNvbXB1dGVkRmVlLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFjdHVhbEZlZU5GbHIgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIFVUWE8gYmFsYW5jZSBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIHRoZSBpbXBvcnQgZmVlXG4gICAgICBpZiAodG90YWxVdHhvQW1vdW50IDw9IGFjdHVhbEZlZU5GbHIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgSW5zdWZmaWNpZW50IFVUWE8gYmFsYW5jZTogaGF2ZSAke3RvdGFsVXR4b0Ftb3VudC50b1N0cmluZygpfSBuRkxSLCBuZWVkIG1vcmUgdGhhbiAke2FjdHVhbEZlZU5GbHIudG9TdHJpbmcoKX0gbkZMUiB0byBjb3ZlciBpbXBvcnQgZmVlYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpbXBvcnRUeCA9IGV2bS5uZXdJbXBvcnRUeChcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fY29udGV4dCxcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fdG9bMF0sXG4gICAgICAgIHNpZ25pbmdBZGRyZXNzZXMsXG4gICAgICAgIG5hdGl2ZVV0eG9zLFxuICAgICAgICBzb3VyY2VDaGFpbixcbiAgICAgICAgYWN0dWFsRmVlTkZsclxuICAgICAgKSBhcyBVbnNpZ25lZFR4O1xuICAgIH1cblxuICAgIGNvbnN0IGZsYXJlVW5zaWduZWRUeCA9IGltcG9ydFR4O1xuICAgIGNvbnN0IGlubmVyVHggPSBmbGFyZVVuc2lnbmVkVHguZ2V0VHgoKSBhcyBldm1TZXJpYWwuSW1wb3J0VHg7XG5cbiAgICBjb25zdCB1dHhvc1dpdGhJbmRleCA9IGlubmVyVHguaW1wb3J0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRUeGlkID0gdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbShpbnB1dC51dHhvSUQudHhJRC50b0J5dGVzKCkpKTtcbiAgICAgIGNvbnN0IGlucHV0T3V0cHV0SWR4ID0gaW5wdXQudXR4b0lELm91dHB1dElkeC52YWx1ZSgpLnRvU3RyaW5nKCk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVXR4byA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZpbmQoXG4gICAgICAgICh1dHhvKSA9PiB1dHhvLnR4aWQgPT09IGlucHV0VHhpZCAmJiB1dHhvLm91dHB1dGlkeCA9PT0gaW5wdXRPdXRwdXRJZHhcbiAgICAgICk7XG5cbiAgICAgIGlmICghb3JpZ2luYWxVdHhvKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYENvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIFVUWE8gZm9yIGlucHV0ICR7aW5wdXRUeGlkfToke2lucHV0T3V0cHV0SWR4fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IGFjdHVhbFNpZ0luZGljZXMgPSB0cmFuc2ZlcklucHV0LnNpZ0luZGljaWVzKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9yaWdpbmFsVXR4byxcbiAgICAgICAgYWRkcmVzc2VzSW5kZXg6IG9yaWdpbmFsVXR4by5hZGRyZXNzZXNJbmRleCxcbiAgICAgICAgYWRkcmVzc2VzOiBvcmlnaW5hbFV0eG8uYWRkcmVzc2VzLFxuICAgICAgICB0aHJlc2hvbGQ6IG9yaWdpbmFsVXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBhY3R1YWxTaWdJbmRpY2VzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdXR4b3NXaXRoSW5kZXg7XG5cbiAgICBjb25zdCB0eENyZWRlbnRpYWxzID0gdXR4b3NXaXRoSW5kZXgubWFwKCh1dHhvKSA9PlxuICAgICAgdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvLnRocmVzaG9sZCwgdXR4by5hY3R1YWxTaWdJbmRpY2VzKVxuICAgICk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHV0eG9zV2l0aEluZGV4Lm1hcCgodXR4bykgPT5cbiAgICAgIHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4by50aHJlc2hvbGQsIHV0eG8uYWN0dWFsU2lnSW5kaWNlcylcbiAgICApO1xuXG4gICAgY29uc3QgZml4ZWRVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoaW5uZXJUeCwgW10sIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSwgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKGZpeGVkVW5zaWduZWRUeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGltcG9ydGVkIGlucHV0cy5cbiAgICogVXNlcyBmcm9tQWRkcmVzc2VzIGFzIHByb3h5IGZvciBVVFhPIGFkZHJlc3NlcyBzaW5jZSB0aGV5IHNob3VsZCBiZSB0aGUgc2FtZVxuICAgKiBhZGRyZXNzZXMgY29udHJvbGxpbmcgdGhlIG11bHRpc2lnLlxuICAgKlxuICAgKiBAcGFyYW0gaW1wb3J0ZWRJbnB1dHMgQXJyYXkgb2YgdHJhbnNmZXJhYmxlIGlucHV0c1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBkZWNvZGVkIFVUWE8gb2JqZWN0c1xuICAgKi9cbiAgcHJpdmF0ZSByZWNvdmVyVXR4b3MoaW1wb3J0ZWRJbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10pOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgICBjb25zdCBwcm94eUFkZHJlc3NlcyA9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzICYmIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubWFwKChhZGRyKSA9PlxuICAgICAgICAgICAgdXRpbHMuYWRkcmVzc1RvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLCAnUCcsIEJ1ZmZlci5mcm9tKGFkZHIpKVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXTtcblxuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB0eGlkID0gaW5wdXQudXR4b0lELnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBvdXRwdXRpZHggPSBpbnB1dC51dHhvSUQub3V0cHV0SWR4LnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IHNpZ0luZGljaWVzID0gdHJhbnNmZXJJbnB1dC5zaWdJbmRpY2llcygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgICAgYW1vdW50OiBpbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHR4aWQsICdoZXgnKSksXG4gICAgICAgIG91dHB1dGlkeDogb3V0cHV0aWR4LFxuICAgICAgICB0aHJlc2hvbGQ6IHNpZ0luZGljaWVzLmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGFkZHJlc3NlczogcHJveHlBZGRyZXNzZXMsXG4gICAgICAgIGFkZHJlc3Nlc0luZGV4OiBzaWdJbmRpY2llcyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLCtFQUE0RTtBQUM1RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5Rjs7O0dBR0c7QUFDSCxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUVuQyxNQUFhLGtCQUFtQixTQUFRLHlEQUEyQjtJQUNqRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixzRkFBc0Y7UUFDdEYseUZBQXlGO1FBQ3pGLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsRUFBRSxDQUFDLFFBQWdCO1FBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBTSxFQUFFLFFBQWlCLEVBQUUsaUJBQWdDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLEVBQXdCLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLHVCQUFZLENBQUMscUVBQXFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLE9BQU8sQ0FBQyxNQUFN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QUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQXNCLENBQUM7WUFDbkQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRWhELE9BQU87Z0JBQ0wsUUFBUSxFQUFFLGlDQUF5QjtnQkFDbkMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pDLElBQUksRUFBRSxlQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxTQUFTLEVBQUUsU0FBUztnQkFDcEIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVO2dCQUM1RCxTQUFTLEVBQUUsY0FBYztnQkFDekIsY0FBYyxFQUFFLFdBQVc7YUFDNUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBalNELGdEQWlTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgTm90U3VwcG9ydGVkLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBldm1TZXJpYWwsXG4gIFVuc2lnbmVkVHgsXG4gIENyZWRlbnRpYWwsXG4gIFRyYW5zZmVyYWJsZUlucHV0LFxuICBUcmFuc2ZlcklucHV0LFxuICBUcmFuc2Zlck91dHB1dCxcbiAgdXRpbHMgYXMgRmxhcmVVdGlscyxcbiAgZXZtLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIEZsYXJlVHJhbnNhY3Rpb25UeXBlLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG4vKipcbiAqIEJ1ZmZlciBhcHBsaWVkIHRvIGEgY2FsbGVyLXN1cHBsaWVkIGJhc2UgZmVlIHRvIGFic29yYiBDLWNoYWluIGJhc2UtZmVlIHZvbGF0aWxpdHlcbiAqIGJldHdlZW4gdHJhbnNhY3Rpb24gc2lnbmluZyBhbmQgYnJvYWRjYXN0LiBFeHByZXNzZWQgaW4gYmFzaXMgcG9pbnRzICgxMDAwID0gMTAlKS5cbiAqL1xuY29uc3QgQkFTRV9GRUVfUEFERElOR19CUFMgPSAxMDAwbjtcblxuZXhwb3J0IGNsYXNzIEltcG9ydEluQ1R4QnVpbGRlciBleHRlbmRzIEF0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICAvLyBVbmxpa2UgUC1jaGFpbi1vcmllbnRlZCBhdG9taWMgdHhzLCBhIEMtY2hhaW4gaW1wb3J0IGhhcyBubyBtZWFuaW5nZnVsIGRlZmF1bHQgZmVlLlxuICAgIC8vIENsZWFyIHRoZSBpbmhlcml0ZWQgbmV0d29yayB0eEZlZSBkZWZhdWx0IHNvIGFuIHVuc2V0IGZlZSBpcyBkZXRlY3RhYmxlIGF0IGJ1aWxkIHRpbWUsXG4gICAgLy8gcmF0aGVyIHRoYW4gc2lsZW50bHkgYnVpbGRpbmcgd2l0aCB0aGF0IHVucmVsYXRlZCBkZWZhdWx0IHZhbHVlLlxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDLWNoYWluIGFkZHJlc3Mgd2hvIGlzIHRhcmdldCBvZiB0aGUgaW1wb3J0LlxuICAgKiBBZGRyZXNzIGZvcm1hdCBpcyBldGggbGlrZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY0FkZHJlc3NcbiAgICovXG4gIHRvKGNBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90byA9IFt1dGlscy5wYXJzZUFkZHJlc3MoY0FkZHJlc3MpXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHgsIHJhd0J5dGVzPzogQnVmZmVyLCBwYXJzZWRDcmVkZW50aWFscz86IENyZWRlbnRpYWxbXSk6IHRoaXMge1xuICAgIGNvbnN0IGJhc2VUeCA9IHR4IGFzIGV2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICBpZiAoIXRoaXMudmVyaWZ5VHhUeXBlKGJhc2VUeC5fdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzID0gYmFzZVR4Lk91dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgb3V0cHV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF07XG5cbiAgICBpZiAoQnVmZmVyLmZyb20ob3V0cHV0LmFzc2V0SWQudG9CeXRlcygpKS50b1N0cmluZygnaGV4JykgIT09IHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXNzZXRJRCBhcmUgbm90IGVxdWFscycpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90byA9IFtCdWZmZXIuZnJvbShvdXRwdXQuYWRkcmVzcy50b0J5dGVzKCkpXTtcblxuICAgIGNvbnN0IGlucHV0cyA9IGJhc2VUeC5pbXBvcnRlZElucHV0cztcblxuICAgIGNvbnN0IGZpcnN0SW5wdXQgPSBpbnB1dHNbMF07XG4gICAgY29uc3QgaW5wdXRUaHJlc2hvbGQgPSBmaXJzdElucHV0LnNpZ0luZGljaWVzKCkubGVuZ3RoIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBpbnB1dFRocmVzaG9sZDtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdGhpcy5yZWNvdmVyVXR4b3MoaW5wdXRzKTtcblxuICAgIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbnB1dHMucmVkdWNlKCh0LCBpKSA9PiB0ICsgaS5hbW91bnQoKSwgQmlnSW50KDApKTtcbiAgICBjb25zdCB0b3RhbE91dHB1dEFtb3VudCA9IG91dHB1dC5hbW91bnQudmFsdWUoKTtcblxuICAgIGNvbnN0IGZlZSA9IHRvdGFsSW5wdXRBbW91bnQgLSB0b3RhbE91dHB1dEFtb3VudDtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKGhhc0NyZWRlbnRpYWxzICYmIHJhd0J5dGVzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9yYXdTaWduZWRCeXRlcyA9IHJhd0J5dGVzO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZSA9IHtcbiAgICAgIGZlZTogZmVlLnRvU3RyaW5nKCksXG4gICAgfTtcblxuICAgIHRoaXMuY29tcHV0ZUFkZHJlc3Nlc0luZGV4KHRydWUpO1xuXG4gICAgLy8gQ3JlYXRlIGFkZHJlc3NNYXBzIHVzaW5nIHNpZ0luZGljZXMgZnJvbSBwYXJzZWQgdHJhbnNhY3Rpb24gZm9yIGNvbnNpc3RlbmN5XG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IHV0eG9UaHJlc2hvbGQgPSB1dHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgICBjb25zdCBzaWdJbmRpY2VzID0gdXR4by5hZGRyZXNzZXNJbmRleCA/PyBbXTtcbiAgICAgIGlmIChzaWdJbmRpY2VzLmxlbmd0aCA+PSB1dHhvVGhyZXNob2xkICYmIHNpZ0luZGljZXMuZXZlcnkoKGlkeCkgPT4gaWR4ID49IDApKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG8sIHV0eG9UaHJlc2hvbGQsIHNpZ0luZGljZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4b1RocmVzaG9sZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmbGFyZUFkZHJlc3NNYXBzID0gbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpO1xuXG4gICAgLy8gVXNlIHBhcnNlZCBjcmVkZW50aWFscyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBjcmVhdGUgbmV3IG9uZXMgYmFzZWQgb24gc2lnSW5kaWNlc1xuICAgIGxldCB0eENyZWRlbnRpYWxzOiBDcmVkZW50aWFsW107XG4gICAgaWYgKGNyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHR4Q3JlZGVudGlhbHMgPSBjcmVkZW50aWFscztcbiAgICB9IGVsc2Uge1xuICAgICAgdHhDcmVkZW50aWFscyA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLm1hcCgodXR4bykgPT4ge1xuICAgICAgICBjb25zdCB1dHhvVGhyZXNob2xkID0gdXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkO1xuICAgICAgICBjb25zdCBzaWdJbmRpY2VzID0gdXR4by5hZGRyZXNzZXNJbmRleCA/PyBbXTtcbiAgICAgICAgaWYgKHNpZ0luZGljZXMubGVuZ3RoID49IHV0eG9UaHJlc2hvbGQgJiYgc2lnSW5kaWNlcy5ldmVyeSgoaWR4KSA9PiBpZHggPj0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkLCBzaWdJbmRpY2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChiYXNlVHgsIFtdLCBmbGFyZUFkZHJlc3NNYXBzLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odW5zaWduZWRUeCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Fdm1JbXBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgaW1wb3J0IGluIEMtY2hhaW4gdHJhbnNhY3Rpb25cbiAgICogRm9sbG93aW5nIEFWQVggUCBhcHByb2FjaCBmb3IgVVRYTyBoYW5kbGluZyBhbmQgc2lnbmF0dXJlIHNsb3QgYXNzaWdubWVudC5cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5oYXNDcmVkZW50aWFscykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLl90by5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3RvIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGxldCBoYXNGZWUgPSAhIXRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgJiYgQmlnSW50KHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUpICE9PSBCaWdJbnQoMCk7XG4gICAgY29uc3QgaGFzQmFzZUZlZSA9ICEhdGhpcy50cmFuc2FjdGlvbi5fZmVlLmJhc2VGZWUgJiYgQmlnSW50KHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5iYXNlRmVlKSAhPT0gQmlnSW50KDApO1xuICAgIGlmIChoYXNGZWUgJiYgaGFzQmFzZUZlZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgJ2ZlZSBhbmQgYmFzZUZlZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOiB1c2UgYmFzZUZlZSBmb3IgZ2FzLWF3YXJlIGZlZSBjYWxjdWxhdGlvbiwgb3IgZmVlIGZvciBhIGZpeGVkIGFtb3VudCwgbm90IGJvdGgnXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBDb25zdHJ1Y3RvciBjbGVhcnMgdGhlIGluaGVyaXRlZCBuZXR3b3JrLnR4RmVlIHNvIGFuIHVuc2V0IGZlZSBpcyBkaXN0aW5ndWlzaGFibGUgZnJvbSBhblxuICAgIC8vIGV4cGxpY2l0IGZlZSgpIGNhbGwgKG5lZWRlZCBmb3IgdGhlIGJhc2VGZWUtb25seSBwYXRoKS4gV2hlbiB0aGUgY2FsbGVyIHNldHMgbmVpdGhlciBmZWVcbiAgICAvLyBub3IgYmFzZUZlZSwgZmFsbCBiYWNrIHRvIG5ldHdvcmsudHhGZWUgdG8gcHJlc2VydmUgcHJlLUNFQ0hPLTE4MjEgYmVoYXZpb3IuXG4gICAgaWYgKCFoYXNGZWUgJiYgIWhhc0Jhc2VGZWUpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSB0aGlzLmZpeGVkRmVlO1xuICAgICAgaGFzRmVlID0gISF0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlICYmIEJpZ0ludCh0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlKSAhPT0gQmlnSW50KDApO1xuICAgICAgaWYgKCFoYXNGZWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRWl0aGVyIGZlZSBvciBiYXNlRmVlIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignY29udGV4dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgfHwgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2Zyb21BZGRyZXNzZXMgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgfHwgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3RocmVzaG9sZCBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcHV0ZUFkZHJlc3Nlc0luZGV4KCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlVXR4b0FkZHJlc3NlcygpO1xuXG4gICAgY29uc3Qgc291cmNlQ2hhaW4gPSAnUCc7XG5cbiAgICAvLyBDb252ZXJ0IGRlY29kZWQgVVRYT3MgdG8gbmF0aXZlIEZsYXJlSlMgVXR4byBvYmplY3RzXG4gICAgY29uc3QgYXNzZXRJZCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcbiAgICBjb25zdCBuYXRpdmVVdHhvcyA9IHV0aWxzLmRlY29kZWRUb1V0eG9zKHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLCBhc3NldElkKTtcblxuICAgIGNvbnN0IHRvdGFsVXR4b0Ftb3VudCA9IG5hdGl2ZVV0eG9zLnJlZHVjZSgoc3VtLCB1dHhvKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB1dHhvLm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICAgIHJldHVybiBzdW0gKyBvdXRwdXQuYW1vdW50KCk7XG4gICAgfSwgQmlnSW50KDApKTtcblxuICAgIGNvbnN0IHNpZ25pbmdBZGRyZXNzZXMgPSB0aGlzLmdldFNpZ25pbmdBZGRyZXNzZXMoKTtcblxuICAgIGxldCBpbXBvcnRUeDogVW5zaWduZWRUeDtcblxuICAgIGlmIChoYXNCYXNlRmVlKSB7XG4gICAgICAvLyBHYXMtYXdhcmUgcGF0aDogbGV0IGZsYXJlanMgY29tcHV0ZSB0aGUgYWN0dWFsIGltcG9ydCBnYXMgY29zdCAoaW5jbHVkaW5nIHRoZVxuICAgICAgLy8gfjEwLDAwMCBBdG9taWNUeEJhc2VDb3N0KSBmcm9tIHRoZSByZWFsIHR4IHNpemUvaW5wdXRzLCBpbnN0ZWFkIG9mIHRydXN0aW5nIGFcbiAgICAgIC8vIHByZS1jb21wdXRlZCBmZWUgYW1vdW50LiBQYWQgdGhlIGJhc2UgZmVlIHRvIGFic29yYiB2b2xhdGlsaXR5IGJldHdlZW4gc2lnbmluZ1xuICAgICAgLy8gYW5kIGJyb2FkY2FzdC5cbiAgICAgIGNvbnN0IHN1cHBsaWVkQmFzZUZlZSA9IEJpZ0ludCh0aGlzLnRyYW5zYWN0aW9uLl9mZWUuYmFzZUZlZSBhcyBzdHJpbmcpO1xuICAgICAgY29uc3QgcGFkZGVkQmFzZUZlZSA9IChzdXBwbGllZEJhc2VGZWUgKiAoMTAwMDBuICsgQkFTRV9GRUVfUEFERElOR19CUFMpKSAvIDEwMDAwbjtcblxuICAgICAgaW1wb3J0VHggPSBldm0ubmV3SW1wb3J0VHhGcm9tQmFzZUZlZShcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fY29udGV4dCxcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fdG9bMF0sXG4gICAgICAgIHNpZ25pbmdBZGRyZXNzZXMsXG4gICAgICAgIG5hdGl2ZVV0eG9zLFxuICAgICAgICBzb3VyY2VDaGFpbixcbiAgICAgICAgcGFkZGVkQmFzZUZlZVxuICAgICAgKSBhcyBVbnNpZ25lZFR4O1xuXG4gICAgICBjb25zdCBpbm5lckltcG9ydFR4ID0gaW1wb3J0VHguZ2V0VHgoKSBhcyBldm1TZXJpYWwuSW1wb3J0VHg7XG4gICAgICBjb25zdCB0b3RhbE91dHB1dEFtb3VudCA9IGlubmVySW1wb3J0VHguT3V0cy5yZWR1Y2UoKHN1bSwgb3V0KSA9PiBzdW0gKyBvdXQuYW1vdW50LnZhbHVlKCksIEJpZ0ludCgwKSk7XG4gICAgICBjb25zdCBjb21wdXRlZEZlZSA9IHRvdGFsVXR4b0Ftb3VudCAtIHRvdGFsT3V0cHV0QW1vdW50O1xuICAgICAgLy8gTWlycm9yIHRoZSBsZWdhY3kgZml4ZWQtZmVlIHBhdGg6IHRoZSBmZWUgbXVzdCBub3QgY29uc3VtZSB0aGUgZW50aXJlIFVUWE8gYW1vdW50LFxuICAgICAgLy8gb3RoZXJ3aXNlIG5vdGhpbmcgaXMgYWN0dWFsbHkgaW1wb3J0ZWQgKHRvdGFsT3V0cHV0QW1vdW50IHdvdWxkIGJlIDApLlxuICAgICAgaWYgKGNvbXB1dGVkRmVlIDw9IEJpZ0ludCgwKSB8fCB0b3RhbE91dHB1dEFtb3VudCA8PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgSW5zdWZmaWNpZW50IFVUWE8gYmFsYW5jZTogaGF2ZSAke3RvdGFsVXR4b0Ftb3VudC50b1N0cmluZygpfSBuRkxSLCBjb21wdXRlZCBpbXBvcnQgZmVlIG9mICR7Y29tcHV0ZWRGZWUudG9TdHJpbmcoKX0gbkZMUiBsZWF2ZXMgbm90aGluZyB0byBpbXBvcnRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlID0gY29tcHV0ZWRGZWUudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWN0dWFsRmVlTkZsciA9IEJpZ0ludCh0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlKTtcblxuICAgICAgLy8gVmFsaWRhdGUgVVRYTyBiYWxhbmNlIGlzIHN1ZmZpY2llbnQgdG8gY292ZXIgdGhlIGltcG9ydCBmZWVcbiAgICAgIGlmICh0b3RhbFV0eG9BbW91bnQgPD0gYWN0dWFsRmVlTkZscikge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgIGBJbnN1ZmZpY2llbnQgVVRYTyBiYWxhbmNlOiBoYXZlICR7dG90YWxVdHhvQW1vdW50LnRvU3RyaW5nKCl9IG5GTFIsIG5lZWQgbW9yZSB0aGFuICR7YWN0dWFsRmVlTkZsci50b1N0cmluZygpfSBuRkxSIHRvIGNvdmVyIGltcG9ydCBmZWVgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGltcG9ydFR4ID0gZXZtLm5ld0ltcG9ydFR4KFxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uLl9jb250ZXh0LFxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uLl90b1swXSxcbiAgICAgICAgc2lnbmluZ0FkZHJlc3NlcyxcbiAgICAgICAgbmF0aXZlVXR4b3MsXG4gICAgICAgIHNvdXJjZUNoYWluLFxuICAgICAgICBhY3R1YWxGZWVORmxyXG4gICAgICApIGFzIFVuc2lnbmVkVHg7XG4gICAgfVxuXG4gICAgY29uc3QgZmxhcmVVbnNpZ25lZFR4ID0gaW1wb3J0VHg7XG4gICAgY29uc3QgaW5uZXJUeCA9IGZsYXJlVW5zaWduZWRUeC5nZXRUeCgpIGFzIGV2bVNlcmlhbC5JbXBvcnRUeDtcblxuICAgIGNvbnN0IHV0eG9zV2l0aEluZGV4ID0gaW5uZXJUeC5pbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBpbnB1dFR4aWQgPSB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKGlucHV0LnV0eG9JRC50eElELnRvQnl0ZXMoKSkpO1xuICAgICAgY29uc3QgaW5wdXRPdXRwdXRJZHggPSBpbnB1dC51dHhvSUQub3V0cHV0SWR4LnZhbHVlKCkudG9TdHJpbmcoKTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxVdHhvID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MuZmluZChcbiAgICAgICAgKHV0eG8pID0+IHV0eG8udHhpZCA9PT0gaW5wdXRUeGlkICYmIHV0eG8ub3V0cHV0aWR4ID09PSBpbnB1dE91dHB1dElkeFxuICAgICAgKTtcblxuICAgICAgaWYgKCFvcmlnaW5hbFV0eG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgVVRYTyBmb3IgaW5wdXQgJHtpbnB1dFR4aWR9OiR7aW5wdXRPdXRwdXRJZHh9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYW5zZmVySW5wdXQgPSBpbnB1dC5pbnB1dCBhcyBUcmFuc2ZlcklucHV0O1xuICAgICAgY29uc3QgYWN0dWFsU2lnSW5kaWNlcyA9IHRyYW5zZmVySW5wdXQuc2lnSW5kaWNpZXMoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3JpZ2luYWxVdHhvLFxuICAgICAgICBhZGRyZXNzZXNJbmRleDogb3JpZ2luYWxVdHhvLmFkZHJlc3Nlc0luZGV4LFxuICAgICAgICBhZGRyZXNzZXM6IG9yaWdpbmFsVXR4by5hZGRyZXNzZXMsXG4gICAgICAgIHRocmVzaG9sZDogb3JpZ2luYWxVdHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGFjdHVhbFNpZ0luZGljZXMsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB1dHhvc1dpdGhJbmRleDtcblxuICAgIGNvbnN0IHR4Q3JlZGVudGlhbHMgPSB1dHhvc1dpdGhJbmRleC5tYXAoKHV0eG8pID0+XG4gICAgICB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHV0eG8udGhyZXNob2xkLCB1dHhvLmFjdHVhbFNpZ0luZGljZXMpXG4gICAgKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdXR4b3NXaXRoSW5kZXgubWFwKCh1dHhvKSA9PlxuICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvLnRocmVzaG9sZCwgdXR4by5hY3R1YWxTaWdJbmRpY2VzKVxuICAgICk7XG5cbiAgICBjb25zdCBmaXhlZFVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChpbm5lclR4LCBbXSwgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24oZml4ZWRVbnNpZ25lZFR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzLlxuICAgKiBVc2VzIGZyb21BZGRyZXNzZXMgYXMgcHJveHkgZm9yIFVUWE8gYWRkcmVzc2VzIHNpbmNlIHRoZXkgc2hvdWxkIGJlIHRoZSBzYW1lXG4gICAqIGFkZHJlc3NlcyBjb250cm9sbGluZyB0aGUgbXVsdGlzaWcuXG4gICAqXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhpbXBvcnRlZElucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIGNvbnN0IHByb3h5QWRkcmVzc2VzID1cbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgJiYgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+XG4gICAgICAgICAgICB1dGlscy5hZGRyZXNzVG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ocnAsICdQJywgQnVmZmVyLmZyb20oYWRkcikpXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdO1xuXG4gICAgcmV0dXJuIGltcG9ydGVkSW5wdXRzLm1hcCgoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHR4aWQgPSBpbnB1dC51dHhvSUQudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IG91dHB1dGlkeCA9IGlucHV0LnV0eG9JRC5vdXRwdXRJZHgudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5wdXQgPSBpbnB1dC5pbnB1dCBhcyBUcmFuc2ZlcklucHV0O1xuICAgICAgY29uc3Qgc2lnSW5kaWNpZXMgPSB0cmFuc2ZlcklucHV0LnNpZ0luZGljaWVzKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dElEOiBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LFxuICAgICAgICBhbW91bnQ6IGlucHV0LmFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgIHR4aWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odHhpZCwgJ2hleCcpKSxcbiAgICAgICAgb3V0cHV0aWR4OiBvdXRwdXRpZHgsXG4gICAgICAgIHRocmVzaG9sZDogc2lnSW5kaWNpZXMubGVuZ3RoIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgICAgYWRkcmVzc2VzOiBwcm94eUFkZHJlc3NlcyxcbiAgICAgICAgYWRkcmVzc2VzSW5kZXg6IHNpZ0luZGljaWVzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -188,6 +188,19 @@ describe('Flrp Import In C Tx Builder', () => {
188
188
  outputidx: '1',
189
189
  locktime: '0',
190
190
  };
191
+ it('should fall back to network.txFee when neither fee nor baseFee is set', async () => {
192
+ const networkTxFee = statics_1.coins.get('tflrp').network.txFee;
193
+ const txBuilder = factory
194
+ .getImportInCBuilder()
195
+ .threshold(1)
196
+ .locktime(0)
197
+ .fromPubKey([account_1.ON_CHAIN_TEST_WALLET.user.pChainAddress])
198
+ .to('0x96993BAEb6AaE2e06BF95F144e2775D4f8efbD35')
199
+ .decodedUtxos([utxo])
200
+ .context(importInC_1.IMPORT_IN_C.context);
201
+ const tx = (await txBuilder.build());
202
+ tx.fee.fee.should.equal(networkTxFee);
203
+ });
191
204
  it('should derive a fee that accounts for the AtomicTxBaseCost and exceeds a naive gas*baseFee estimate', async () => {
192
205
  const baseFeeWei = 500n; // base fee in wei/gas used in the reported failure
193
206
  const underpricedGasEstimate = 5700n; // naive/legacy gas estimate missing AtomicTxBaseCost
@@ -336,4 +349,4 @@ describe('Flrp Import In C Tx Builder', () => {
336
349
  });
337
350
  });
338
351
  });
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9pbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsa0JBQWdCO0FBQ2hCLDBDQUFpRjtBQUNqRixpREFBNEM7QUFDNUMseUVBQW9GO0FBQ3BGLHFEQUErRDtBQUMvRCwwRUFBOEM7QUFDOUMsbURBQThFO0FBRTlFLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7SUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFbEUsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUN6QyxFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2hELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyw2QkFBNkIsQ0FDeEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JELE1BQU0sU0FBUyxHQUFHLE9BQU87aUJBQ3RCLG1CQUFtQixFQUFFO2lCQUNyQixTQUFTLENBQUMsdUJBQVEsQ0FBQyxTQUFTLENBQUM7aUJBQzdCLFVBQVUsQ0FBQyx1QkFBUSxDQUFDLFVBQVUsQ0FBQztpQkFDL0IsWUFBWSxDQUFDLHVCQUFRLENBQUMsS0FBSyxDQUFDO2lCQUM1QixHQUFHLENBQUMsdUJBQVEsQ0FBQyxH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USxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxQyxtQkFBbUI7WUFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUUsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVHJhbnNhY3Rpb24sIFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgSU1QT1JUX0lOX0MgYXMgdGVzdERhdGEgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHJhbnNhY3Rpb25EYXRhL2ltcG9ydEluQyc7XG5pbXBvcnQgeyBPTl9DSEFJTl9URVNUX1dBTExFVCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9hY2NvdW50JztcbmltcG9ydCBzaWduRmxvd1Rlc3QgZnJvbSAnLi9zaWduRmxvd1Rlc3RTdWl0JztcbmltcG9ydCB7IHNlY3AyNTZrMSwgVW5zaWduZWRUeCwgZXZtLCBldm1TZXJpYWwgfSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuXG5kZXNjcmliZSgnRmxycCBJbXBvcnQgSW4gQyBUeCBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKTtcblxuICBkZXNjcmliZSgndmFsaWRhdGUgdHhCdWlsZGVyIGZpZWxkcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgdmFsaWRhdGUgVXR4b3MgZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIudmFsaWRhdGVVdHhvcyhbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ1VUWE9zIGFycmF5IGNhbm5vdCBiZSBlbXB0eSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHRvIGFkZHJlc3MgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmRlY29kZWRVdHhvcyh0ZXN0RGF0YS51dHhvcylcbiAgICAgICAgLmZlZSh0ZXN0RGF0YS5mZWUpXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpO1xuICAgICAgLy8gdG8gaXMgTk9UIHNldFxuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0byBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBjb250ZXh0IGlzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRJbXBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLnBBZGRyZXNzZXMpXG4gICAgICAgIC5kZWNvZGVkVXR4b3ModGVzdERhdGEudXR4b3MpXG4gICAgICAgIC50byh0ZXN0RGF0YS50bylcbiAgICAgICAgLmZlZSh0ZXN0RGF0YS5mZWUpO1xuICAgICAgLy8gY29udGV4dCBpcyBOT1Qgc2V0XG5cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2NvbnRleHQgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgZnJvbUFkZHJlc3NlcyBpcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeVxuICAgICAgICAuZ2V0SW1wb3J0SW5DQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAuZGVjb2RlZFV0eG9zKHRlc3REYXRhLnV0eG9zKVxuICAgICAgICAudG8odGVzdERhdGEudG8pXG4gICAgICAgIC5mZWUodGVzdERhdGEuZmVlKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KTtcbiAgICAgIC8vIGZyb21QdWJLZXkgaXMgTk9UIHNldFxuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdmcm9tQWRkcmVzc2VzIGFyZSByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBVVFhPcyBhcmUgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLnRvKHRlc3REYXRhLnRvKVxuICAgICAgICAuZmVlKHRlc3REYXRhLmZlZSlcbiAgICAgICAgLmNvbnRleHQodGVzdERhdGEuY29udGV4dCk7XG4gICAgICAvLyB1dHhvcyBpcyBOT1Qgc2V0XG5cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1VUWE9zIGFyZSByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gdXR4b3MgaGV4IGFycmF5IGlzIGVtcHR5JywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRJbXBvcnRJbkNCdWlsZGVyKCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmRlY29kZWRVdHhvcyhbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ1VUWE9zIGFycmF5IGNhbm5vdCBiZSBlbXB0eSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBpbnZhbGlkIHRocmVzaG9sZCB2YWx1ZSAoMCknLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIudGhyZXNob2xkKDApO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3RocmVzaG9sZCcpIHx8IGUubWVzc2FnZS5pbmNsdWRlcygnZ3JlYXRlcicpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggaW52YWxpZCB0aHJlc2hvbGQgdmFsdWUgKG5lZ2F0aXZlKScsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci50aHJlc2hvbGQoLTEpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3RocmVzaG9sZCcpIHx8IGUubWVzc2FnZS5pbmNsdWRlcygnZ3JlYXRlcicpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggaW52YWxpZCB0byBhZGRyZXNzIGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci50bygnaW52YWxpZC1hZGRyZXNzJyk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCcpIHx8IGUubWVzc2FnZS5pbmNsdWRlcygnYWRkcmVzcycpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgdmFsaWQgdG8gYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgKCgpID0+IHR4QnVpbGRlci50byh0ZXN0RGF0YS50bykpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IHZhbGlkIHRocmVzaG9sZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgKCgpID0+IHR4QnVpbGRlci50aHJlc2hvbGQoMikpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IHZhbGlkIGNvbnRleHQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICgoKSA9PiB0eEJ1aWxkZXIuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgdmFsaWQgZnJvbVB1YktleSBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICgoKSA9PiB0eEJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBzaWduRmxvd1Rlc3Qoe1xuICAgIHRyYW5zYWN0aW9uVHlwZTogJ0ltcG9ydCBDMlAnLFxuICAgIG5ld1R4RmFjdG9yeTogKCkgPT4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKSxcbiAgICBuZXdUeEJ1aWxkZXI6ICgpID0+XG4gICAgICBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpXG4gICAgICAgIC5nZXRJbXBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLnBBZGRyZXNzZXMpXG4gICAgICAgIC5kZWNvZGVkVXR4b3ModGVzdERhdGEudXR4b3MpXG4gICAgICAgIC50byh0ZXN0RGF0YS50bylcbiAgICAgICAgLmZlZSh0ZXN0RGF0YS5mZWUpXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpLFxuICAgIHVuc2lnbmVkVHhIZXg6IHRlc3REYXRhLnVuc2lnbmVkSGV4LFxuICAgIGhhbGZTaWduZWRUeEhleDogdGVzdERhdGEuaGFsZlNpZ250eEhleCxcbiAgICBmdWxsU2lnbmVkVHhIZXg6IHRlc3REYXRhLmZ1bGxTaWdudHhIZXgsXG4gICAgcHJpdmF0ZUtleToge1xuICAgICAgcHJ2MTogdGVzdERhdGEucHJpdmF0ZUtleXNbMl0sXG4gICAgICBwcnYyOiB0ZXN0RGF0YS5wcml2YXRlS2V5c1swXSxcbiAgICB9LFxuICAgIHR4SGFzaDogdGVzdERhdGEudHhoYXNoLFxuICB9KTtcblxuICBkZXNjcmliZSgnb24tY2hhaW4gdmVyaWZpZWQgdHJhbnNhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYW5kIHNpZ24gaW1wb3J0IHRvIEMtY2hhaW4gdHggd2l0aCBjb3JyZWN0IHNpZ0luZGljZXMgLSBvbi1jaGFpbiB2ZXJpZmllZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHV0eG8gPSB7XG4gICAgICAgIG91dHB1dElEOiA3LFxuICAgICAgICBhbW91bnQ6ICczMDAwMDAwMCcsXG4gICAgICAgIHR4aWQ6ICduU0J3TmNnZkxiazVTNDI1YjFxYVlhcVRUQ2lNQ1Y3NUtVNEZibnE4U1BVVXFMcTInLFxuICAgICAgICB0aHJlc2hvbGQ6IDIsXG4gICAgICAgIGFkZHJlc3NlczogW1xuICAgICAgICAgIE9OX0NIQUlOX1RFU1RfV0FMTEVULmJpdGdvLnBDaGFpbkFkZHJlc3MsXG4gICAgICAgICAgT05fQ0hBSU5fVEVTVF9XQUxMRVQuYmFja3VwLnBDaGFpbkFkZHJlc3MsXG4gICAgICAgICAgT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzLFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRpZHg6ICcxJyxcbiAgICAgICAgbG9ja3RpbWU6ICcwJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlbmRlclBBZGRyZXNzZXMgPSBbXG4gICAgICAgIE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzcyxcbiAgICAgICAgT05fQ0hBSU5fVEVTVF9XQUxMRVQuYml0Z28ucENoYWluQWRkcmVzcyxcbiAgICAgICAgT05fQ0hBSU5fVEVTVF9XQUxMRVQuYmFja3VwLnBDaGFpbkFkZHJlc3MsXG4gICAgICBdO1xuXG4gICAgICBjb25zdCB0b0FkZHJlc3MgPSAnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JztcbiAgICAgIGNvbnN0IGltcG9ydEZlZSA9ICcxMDAwMDAwJztcblxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeVxuICAgICAgICAuZ2V0SW1wb3J0SW5DQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQoMilcbiAgICAgICAgLmxvY2t0aW1lKDApXG4gICAgICAgIC5mcm9tUHViS2V5KHNlbmRlclBBZGRyZXNzZXMpXG4gICAgICAgIC50byh0b0FkZHJlc3MpXG4gICAgICAgIC5mZWUoaW1wb3J0RmVlKVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKHRlc3REYXRhLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5kZWNvZGVkVXR4b3MoW3V0eG9dKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KTtcblxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleSB9KTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBPTl9DSEFJTl9URVNUX1dBTExFVC5iaXRnby5wcml2YXRlS2V5IH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwoJzJ0NGd4RUFkUExpaXk5SHNiamFRdW4xbVZGZXdNb2l4TlM2NGVaNTZDMzhMNG1wUDFqJyk7XG5cbiAgICAgIGNvbnN0IGhleCA9IHJhd1R4LnJlcGxhY2UoJzB4JywgJycpO1xuXG4gICAgICBjb25zdCBhbW91bnRIZXggPSAnMDAwMDAwMDAwMWM5YzM4MCc7XG4gICAgICBjb25zdCBhbW91bnRQb3MgPSBoZXguaW5kZXhPZihhbW91bnRIZXgpO1xuICAgICAgYW1vdW50UG9zLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcblxuICAgICAgY29uc3QgaW5wdXRTZWN0aW9uID0gaGV4LnN1YnN0cmluZyhhbW91bnRQb3MgKyAxNiwgYW1vdW50UG9zICsgNDApO1xuICAgICAgY29uc3QgbnVtU2lnSW5kaWNlcyA9IHBhcnNlSW50KGlucHV0U2VjdGlvbi5zdWJzdHJpbmcoMCwgOCksIDE2KTtcbiAgICAgIGNvbnN0IHNpZ0lkeDAgPSBwYXJzZUludChpbnB1dFNlY3Rpb24uc3Vic3RyaW5nKDgsIDE2KSwgMTYpO1xuICAgICAgY29uc3Qgc2lnSWR4MSA9IHBhcnNlSW50KGlucHV0U2VjdGlvbi5zdWJzdHJpbmcoMTYsIDI0KSwgMTYpO1xuXG4gICAgICBudW1TaWdJbmRpY2VzLnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIHNpZ0lkeDAuc2hvdWxkLmVxdWFsKDApO1xuICAgICAgc2lnSWR4MS5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gcGFyc2VJbnQodXR4by5hbW91bnQsIDEwKSAtIHBhcnNlSW50KGltcG9ydEZlZSwgMTApO1xuICAgICAgY29uc3Qgb3V0cHV0SGV4ID0gZXhwZWN0ZWRPdXRwdXQudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCAnMCcpO1xuICAgICAgaGV4LnNob3VsZC5jb250YWluRXFsKG91dHB1dEhleCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdiYXNlLWZlZSBkcml2ZW4gZ2FzIGVzdGltYXRpb24gKENFQ0hPLTE4MjEpJywgKCkgPT4ge1xuICAgIGNvbnN0IHV0eG8gPSB7XG4gICAgICBvdXRwdXRJRDogNyxcbiAgICAgIGFtb3VudDogJzMwMDAwMDAwJyxcbiAgICAgIHR4aWQ6ICduU0J3TmNnZkxiazVTNDI1YjFxYVlhcVRUQ2lNQ1Y3NUtVNEZibnE4U1BVVXFMcTInLFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgYWRkcmVzc2VzOiBbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSxcbiAgICAgIG91dHB1dGlkeDogJzEnLFxuICAgICAgbG9ja3RpbWU6ICcwJyxcbiAgICB9O1xuXG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgYSBmZWUgdGhhdCBhY2NvdW50cyBmb3IgdGhlIEF0b21pY1R4QmFzZUNvc3QgYW5kIGV4Y2VlZHMgYSBuYWl2ZSBnYXMqYmFzZUZlZSBlc3RpbWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VGZWVXZWkgPSA1MDBuOyAvLyBiYXNlIGZlZSBpbiB3ZWkvZ2FzIHVzZWQgaW4gdGhlIHJlcG9ydGVkIGZhaWx1cmVcbiAgICAgIGNvbnN0IHVuZGVycHJpY2VkR2FzRXN0aW1hdGUgPSA1NzAwbjsgLy8gbmFpdmUvbGVnYWN5IGdhcyBlc3RpbWF0ZSBtaXNzaW5nIEF0b21pY1R4QmFzZUNvc3RcbiAgICAgIGNvbnN0IHVuZGVycHJpY2VkRmVlID0gYmFzZUZlZVdlaSAqIHVuZGVycHJpY2VkR2FzRXN0aW1hdGU7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLnRvKCcweDk2OTkzQkFFYjZBYUUyZTA2QkY5NUYxNDRlMjc3NUQ0ZjhlZmJEMzUnKVxuICAgICAgICAuYmFzZUZlZShiYXNlRmVlV2VpKVxuICAgICAgICAuZGVjb2RlZFV0eG9zKFt1dHhvXSlcbiAgICAgICAgLmNvbnRleHQodGVzdERhdGEuY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGFjdHVhbEZlZSA9IEJpZ0ludCh0eC5mZWUuZmVlKTtcblxuICAgICAgLy8gVGhlIGdhcy1hd2FyZSBmZWUgKGluY2x1ZGluZyB0aGUgcmVhbCBBdG9taWNUeEJhc2VDb3N0LCB+MTAsMDAwKSBtdXN0IGV4Y2VlZFxuICAgICAgLy8gdGhlIHVuZGVycHJpY2VkIGxlZ2FjeSBlc3RpbWF0ZSB0aGF0IGNhdXNlZCBcImluc3VmZmljaWVudCBmdW5kc1wiIG9uIGJyb2FkY2FzdC5cbiAgICAgIGFzc2VydChcbiAgICAgICAgYWN0dWFsRmVlID4gdW5kZXJwcmljZWRGZWUsXG4gICAgICAgIGBFeHBlY3RlZCBhY3R1YWxGZWUgKCR7YWN0dWFsRmVlfSkgdG8gYmUgYWJvdmUgdW5kZXJwcmljZWRGZWUgKCR7dW5kZXJwcmljZWRGZWV9KWBcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhZCB0aGUgc3VwcGxpZWQgYmFzZSBmZWUgb24gdG9wIG9mIHRoZSByYXcgZmxhcmVqcyBnYXMqYmFzZUZlZSBlc3RpbWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VGZWVXZWkgPSA1MDBuO1xuICAgICAgY29uc3QgZnJvbUFkZHJlc3MgPSBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3M7XG4gICAgICBjb25zdCB0b0FkZHJlc3MgPSAnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JztcblxuICAgICAgY29uc3QgcGFkZGVkVHggPSAoYXdhaXQgZmFjdG9yeVxuICAgICAgICAuZ2V0SW1wb3J0SW5DQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQoMSlcbiAgICAgICAgLmxvY2t0aW1lKDApXG4gICAgICAgIC5mcm9tUHViS2V5KFtmcm9tQWRkcmVzc10pXG4gICAgICAgIC50byh0b0FkZHJlc3MpXG4gICAgICAgIC5iYXNlRmVlKGJhc2VGZWVXZWkpXG4gICAgICAgIC5kZWNvZGVkVXR4b3MoW3V0eG9dKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KVxuICAgICAgICAuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBwYWRkZWRGZWUgPSBCaWdJbnQocGFkZGVkVHguZmVlLmZlZSk7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBzYW1lIGltcG9ydCB0eCBkaXJlY3RseSB2aWEgZmxhcmVqcyB1c2luZyB0aGUgKnVucGFkZGVkKiBiYXNlIGZlZSxcbiAgICAgIC8vIHRvIHJlY292ZXIgdGhlIG5ldHdvcmsncyByYXcgZ2FzKmJhc2VGZWUgcmVxdWlyZW1lbnQgd2l0aCBubyBidWZmZXIgYXBwbGllZC5cbiAgICAgIGNvbnN0IGFzc2V0SWQgPSAoY29pbnMuZ2V0KCd0ZmxycCcpLm5ldHdvcmsgYXMgdW5rbm93biBhcyB7IGFzc2V0SWQ6IHN0cmluZyB9KS5hc3NldElkO1xuICAgICAgY29uc3QgbmF0aXZlVXR4b3MgPSBVdGlscy5kZWNvZGVkVG9VdHhvcyhbdXR4b10sIGFzc2V0SWQpO1xuICAgICAgY29uc3QgcmF3SW1wb3J0VHggPSBldm0ubmV3SW1wb3J0VHhGcm9tQmFzZUZlZShcbiAgICAgICAgdGVzdERhdGEuY29udGV4dCxcbiAgICAgICAgVXRpbHMucGFyc2VBZGRyZXNzKHRvQWRkcmVzcyksXG4gICAgICAgIFtVdGlscy5wYXJzZUFkZHJlc3MoZnJvbUFkZHJlc3MpXSxcbiAgICAgICAgbmF0aXZlVXR4b3MsXG4gICAgICAgICdQJyxcbiAgICAgICAgYmFzZUZlZVdlaVxuICAgICAgKSBhcyBVbnNpZ25lZFR4O1xuICAgICAgY29uc3QgcmF3SW5uZXJUeCA9IHJhd0ltcG9ydFR4LmdldFR4KCkgYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgY29uc3QgcmF3VG90YWxPdXRwdXQgPSByYXdJbm5lclR4Lk91dHMucmVkdWNlKChzdW0sIG91dCkgPT4gc3VtICsgb3V0LmFtb3VudC52YWx1ZSgpLCBCaWdJbnQoMCkpO1xuICAgICAgY29uc3QgcmF3RmVlID0gQmlnSW50KHV0eG8uYW1vdW50KSAtIHJhd1RvdGFsT3V0cHV0O1xuXG4gICAgICBhc3NlcnQocGFkZGVkRmVlID4gcmF3RmVlLCBgRXhwZWN0ZWQgcGFkZGVkIGZlZSAoJHtwYWRkZWRGZWV9KSB0byBleGNlZWQgdGhlIHVucGFkZGVkIHJhdyBmZWUgKCR7cmF3RmVlfSlgKTtcbiAgICAgIC8vIFBhZGRpbmcgaXMgZXhhY3RseSB0aGUgY29uZmlndXJlZCAxMCUgYnVmZmVyIGFwcGxpZWQgdG8gdGhlIGJhc2UgZmVlIGJlZm9yZSBlc3RpbWF0aW9uLlxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhZGRlZEZlZSwgKHJhd0ZlZSAqIDExMDAwbikgLyAxMDAwMG4pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTVBDIHNpZ25pbmcgKHRocmVzaG9sZD0xKScsICgpID0+IHtcbiAgICBjb25zdCBtcGNVdHhvID0ge1xuICAgICAgb3V0cHV0SUQ6IDcsXG4gICAgICBhbW91bnQ6ICczMDAwMDAwMCcsXG4gICAgICB0eGlkOiAnblNCd05jZ2ZMYms1UzQyNWIxcWFZYXFUVENpTUNWNzVLVTRGYm5xOFNQVVVxTHEyJyxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIGFkZHJlc3NlczogW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10sXG4gICAgICBvdXRwdXRpZHg6ICcxJyxcbiAgICAgIGxvY2t0aW1lOiAnMCcsXG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYW5kIHNpZ24gaW1wb3J0IHRvIEMtY2hhaW4gd2l0aCB0aHJlc2hvbGQ9MSB1c2luZyBzaWduKCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRJbXBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCgxKVxuICAgICAgICAubG9ja3RpbWUoMClcbiAgICAgICAgLmZyb21QdWJLZXkoW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10pXG4gICAgICAgIC50bygnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JylcbiAgICAgICAgLmZlZSgnMTAwMDAwMCcpXG4gICAgICAgIC5kZWNvZGVkVXR4b3MoW21wY1V0eG9dKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KTtcblxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBqc29uLnRocmVzaG9sZC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBqc29uLnNvdXJjZUNoYWluIS5zaG91bGQuZXF1YWwoJ1AnKTtcbiAgICAgIGpzb24uZGVzdGluYXRpb25DaGFpbiEuc2hvdWxkLmVxdWFsKCdDJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuZCBzaWduIGltcG9ydCB0byBDLWNoYWluIHdpdGggdGhyZXNob2xkPTEgdXNpbmcgYWRkRXh0ZXJuYWxTaWduYXR1cmUoKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLnRvKCcweDk2OTkzQkFFYjZBYUUyZTA2QkY5NUYxNDRlMjc3NUQ0ZjhlZmJEMzUnKVxuICAgICAgICAuZmVlKCcxMDAwMDAwJylcbiAgICAgICAgLmRlY29kZWRVdHhvcyhbbXBjVXR4b10pXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB1bnNpZ25lZEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFNpbXVsYXRlIE1QQyBzaWduaW5nXG4gICAgICBjb25zdCBmbGFyZVVuc2lnbmVkVHggPSB0eC5nZXRGbGFyZVRyYW5zYWN0aW9uKCkgYXMgVW5zaWduZWRUeDtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNlY3AyNTZrMS5zaWduKFxuICAgICAgICBmbGFyZVVuc2lnbmVkVHgudG9CeXRlcygpLFxuICAgICAgICBCdWZmZXIuZnJvbShPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnByaXZhdGVLZXksICdoZXgnKVxuICAgICAgKTtcblxuICAgICAgdHguYWRkRXh0ZXJuYWxTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgICAgIGNvbnN0IHNpZ25lZEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaWduZWRIZXguc2hvdWxkLm5vdC5lcXVhbCh1bnNpZ25lZEhleCk7XG5cbiAgICAgIC8vIFZlcmlmeSByb3VuZHRyaXBcbiAgICAgIGNvbnN0IHBhcnNlZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oc2lnbmVkSGV4KTtcbiAgICAgIGNvbnN0IHBhcnNlZFR4ID0gYXdhaXQgcGFyc2VkQnVpbGRlci5idWlsZCgpO1xuICAgICAgcGFyc2VkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwoc2lnbmVkSGV4KTtcblxuICAgICAgdHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb2R1Y2Ugc2FtZSBzaWduZWQgdHggdmlhIHNpZ24oKSBhbmQgYWRkRXh0ZXJuYWxTaWduYXR1cmUoKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkQXJncyA9ICgpID0+XG4gICAgICAgIGZhY3RvcnlcbiAgICAgICAgICAuZ2V0SW1wb3J0SW5DQnVpbGRlcigpXG4gICAgICAgICAgLnRocmVzaG9sZCgxKVxuICAgICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAgIC5mcm9tUHViS2V5KFtPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3NdKVxuICAgICAgICAgIC50bygnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JylcbiAgICAgICAgICAuZmVlKCcxMDAwMDAwJylcbiAgICAgICAgICAuZGVjb2RlZFV0eG9zKFttcGNVdHhvXSlcbiAgICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KTtcblxuICAgICAgLy8gc2lnbigpXG4gICAgICBjb25zdCB0eEJ1aWxkZXIxID0gYnVpbGRBcmdzKCk7XG4gICAgICB0eEJ1aWxkZXIxLnNpZ24oeyBrZXk6IE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IHR4MSA9IGF3YWl0IHR4QnVpbGRlcjEuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNpZ25lZEhleDEgPSB0eDEudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gYWRkRXh0ZXJuYWxTaWduYXR1cmUoKVxuICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IGJ1aWxkQXJncygpO1xuICAgICAgY29uc3QgdHgyID0gKGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBmbGFyZVVuc2lnbmVkVHggPSB0eDIuZ2V0RmxhcmVUcmFuc2FjdGlvbigpIGFzIFVuc2lnbmVkVHg7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzZWNwMjU2azEuc2lnbihcbiAgICAgICAgZmxhcmVVbnNpZ25lZFR4LnRvQnl0ZXMoKSxcbiAgICAgICAgQnVmZmVyLmZyb20oT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wcml2YXRlS2V5LCAnaGV4JylcbiAgICAgICk7XG4gICAgICB0eDIuYWRkRXh0ZXJuYWxTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgICAgIGNvbnN0IHNpZ25lZEhleDIgPSB0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgc2lnbmVkSGV4MS5zaG91bGQuZXF1YWwoc2lnbmVkSGV4Mik7XG4gICAgICB0eDEuaWQuc2hvdWxkLmVxdWFsKHR4Mi5pZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlc2VyaWFsaXplIHVuc2lnbmVkIE1QQyB0eCBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLnRvKCcweDk2OTkzQkFFYjZBYUUyZTA2QkY5NUYxNDRlMjc3NUQ0ZjhlZmJEMzUnKVxuICAgICAgICAuZmVlKCcxMDAwMDAwJylcbiAgICAgICAgLmRlY29kZWRVdHhvcyhbbXBjVXR4b10pXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB1bnNpZ25lZEhleCA9IHVuc2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gRGVzZXJpYWxpemUgYW5kIHNpZ25cbiAgICAgIGNvbnN0IHR4QnVpbGRlcjIgPSBmYWN0b3J5LmZyb20odW5zaWduZWRIZXgpO1xuICAgICAgdHhCdWlsZGVyMi5zaWduKHsga2V5OiBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcblxuICAgICAgc2lnbmVkVHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAgIC8vIFZlcmlmeSByb3VuZHRyaXBcbiAgICAgIGNvbnN0IHBhcnNlZFR4ID0gYXdhaXQgZmFjdG9yeS5mcm9tKHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpLmJ1aWxkKCk7XG4gICAgICBwYXJzZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChzaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHBhcnNlZFR4LmlkLnNob3VsZC5lcXVhbChzaWduZWRUeC5pZCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9pbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsa0JBQWdCO0FBQ2hCLDBDQUFpRjtBQUNqRixpREFBNEM7QUFDNUMseUVBQW9GO0FBQ3BGLHFEQUErRDtBQUMvRCwwRUFBOEM7QUFDOUMsbURBQThFO0FBRTlFLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7SUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFbEUsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUN6QyxFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2hELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyw2QkFBNkIsQ0FDeEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JELE1BQU0sU0FBUyxHQUFHLE9BQU87aUJBQ3RCLG1CQUFtQixFQUFFO2lCQUNyQixTQUFTLENBQUMsdUJBQVEsQ0FBQyxTQUFTLENBQUM7aUJBQzdCLFVBQVUsQ0FBQyx1QkFBUSxDQUFDLFVBQVUsQ0FBQztpQkFDL0IsWUFBWSxDQUFDLHVCQUFRLENBQUMsS0FBSyxDQUFDO2lCQUM1QixHQUFHLENBQUMsdUJBQVEsQ0FBQyxH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QUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRyYW5zYWN0aW9uLCBVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IElNUE9SVF9JTl9DIGFzIHRlc3REYXRhIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9pbXBvcnRJbkMnO1xuaW1wb3J0IHsgT05fQ0hBSU5fVEVTVF9XQUxMRVQgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYWNjb3VudCc7XG5pbXBvcnQgc2lnbkZsb3dUZXN0IGZyb20gJy4vc2lnbkZsb3dUZXN0U3VpdCc7XG5pbXBvcnQgeyBzZWNwMjU2azEsIFVuc2lnbmVkVHgsIGV2bSwgZXZtU2VyaWFsIH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcblxuZGVzY3JpYmUoJ0ZscnAgSW1wb3J0IEluIEMgVHggQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlIHR4QnVpbGRlciBmaWVsZHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIHZhbGlkYXRlIFV0eG9zIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRJbXBvcnRJbkNCdWlsZGVyKCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLnZhbGlkYXRlVXR4b3MoW10pO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdVVFhPcyBhcnJheSBjYW5ub3QgYmUgZW1wdHknXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB0byBhZGRyZXNzIGlzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRJbXBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLnBBZGRyZXNzZXMpXG4gICAgICAgIC5kZWNvZGVkVXR4b3ModGVzdERhdGEudXR4b3MpXG4gICAgICAgIC5mZWUodGVzdERhdGEuZmVlKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KTtcbiAgICAgIC8vIHRvIGlzIE5PVCBzZXRcblxuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndG8gaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgY29udGV4dCBpcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeVxuICAgICAgICAuZ2V0SW1wb3J0SW5DQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuZGVjb2RlZFV0eG9zKHRlc3REYXRhLnV0eG9zKVxuICAgICAgICAudG8odGVzdERhdGEudG8pXG4gICAgICAgIC5mZWUodGVzdERhdGEuZmVlKTtcbiAgICAgIC8vIGNvbnRleHQgaXMgTk9UIHNldFxuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdjb250ZXh0IGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIGZyb21BZGRyZXNzZXMgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmRlY29kZWRVdHhvcyh0ZXN0RGF0YS51dHhvcylcbiAgICAgICAgLnRvKHRlc3REYXRhLnRvKVxuICAgICAgICAuZmVlKHRlc3REYXRhLmZlZSlcbiAgICAgICAgLmNvbnRleHQodGVzdERhdGEuY29udGV4dCk7XG4gICAgICAvLyBmcm9tUHViS2V5IGlzIE5PVCBzZXRcblxuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnZnJvbUFkZHJlc3NlcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgVVRYT3MgYXJlIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRJbXBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLnBBZGRyZXNzZXMpXG4gICAgICAgIC50byh0ZXN0RGF0YS50bylcbiAgICAgICAgLmZlZSh0ZXN0RGF0YS5mZWUpXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpO1xuICAgICAgLy8gdXR4b3MgaXMgTk9UIHNldFxuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdVVFhPcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHV0eG9zIGhleCBhcnJheSBpcyBlbXB0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5kZWNvZGVkVXR4b3MoW10pO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdVVFhPcyBhcnJheSBjYW5ub3QgYmUgZW1wdHknXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggaW52YWxpZCB0aHJlc2hvbGQgdmFsdWUgKDApJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRJbXBvcnRJbkNCdWlsZGVyKCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLnRocmVzaG9sZCgwKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLmluY2x1ZGVzKCd0aHJlc2hvbGQnKSB8fCBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2dyZWF0ZXInKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgdGhyZXNob2xkIHZhbHVlIChuZWdhdGl2ZSknLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIudGhyZXNob2xkKC0xKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLmluY2x1ZGVzKCd0aHJlc2hvbGQnKSB8fCBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2dyZWF0ZXInKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgdG8gYWRkcmVzcyBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIudG8oJ2ludmFsaWQtYWRkcmVzcycpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ0ludmFsaWQnKSB8fCBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2FkZHJlc3MnKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IHZhbGlkIHRvIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICgoKSA9PiB0eEJ1aWxkZXIudG8odGVzdERhdGEudG8pKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCB2YWxpZCB0aHJlc2hvbGQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICgoKSA9PiB0eEJ1aWxkZXIudGhyZXNob2xkKDIpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCB2YWxpZCBjb250ZXh0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRJbXBvcnRJbkNCdWlsZGVyKCk7XG4gICAgICAoKCkgPT4gdHhCdWlsZGVyLmNvbnRleHQodGVzdERhdGEuY29udGV4dCkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IHZhbGlkIGZyb21QdWJLZXkgYWRkcmVzc2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRJbXBvcnRJbkNCdWlsZGVyKCk7XG4gICAgICAoKCkgPT4gdHhCdWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEucEFkZHJlc3NlcykpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgc2lnbkZsb3dUZXN0KHtcbiAgICB0cmFuc2FjdGlvblR5cGU6ICdJbXBvcnQgQzJQJyxcbiAgICBuZXdUeEZhY3Rvcnk6ICgpID0+IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSksXG4gICAgbmV3VHhCdWlsZGVyOiAoKSA9PlxuICAgICAgbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKVxuICAgICAgICAuZ2V0SW1wb3J0SW5DQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuZGVjb2RlZFV0eG9zKHRlc3REYXRhLnV0eG9zKVxuICAgICAgICAudG8odGVzdERhdGEudG8pXG4gICAgICAgIC5mZWUodGVzdERhdGEuZmVlKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KSxcbiAgICB1bnNpZ25lZFR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZEhleCxcbiAgICBoYWxmU2lnbmVkVHhIZXg6IHRlc3REYXRhLmhhbGZTaWdudHhIZXgsXG4gICAgZnVsbFNpZ25lZFR4SGV4OiB0ZXN0RGF0YS5mdWxsU2lnbnR4SGV4LFxuICAgIHByaXZhdGVLZXk6IHtcbiAgICAgIHBydjE6IHRlc3REYXRhLnByaXZhdGVLZXlzWzJdLFxuICAgICAgcHJ2MjogdGVzdERhdGEucHJpdmF0ZUtleXNbMF0sXG4gICAgfSxcbiAgICB0eEhhc2g6IHRlc3REYXRhLnR4aGFzaCxcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ29uLWNoYWluIHZlcmlmaWVkIHRyYW5zYWN0aW9ucycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuZCBzaWduIGltcG9ydCB0byBDLWNoYWluIHR4IHdpdGggY29ycmVjdCBzaWdJbmRpY2VzIC0gb24tY2hhaW4gdmVyaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1dHhvID0ge1xuICAgICAgICBvdXRwdXRJRDogNyxcbiAgICAgICAgYW1vdW50OiAnMzAwMDAwMDAnLFxuICAgICAgICB0eGlkOiAnblNCd05jZ2ZMYms1UzQyNWIxcWFZYXFUVENpTUNWNzVLVTRGYm5xOFNQVVVxTHEyJyxcbiAgICAgICAgdGhyZXNob2xkOiAyLFxuICAgICAgICBhZGRyZXNzZXM6IFtcbiAgICAgICAgICBPTl9DSEFJTl9URVNUX1dBTExFVC5iaXRnby5wQ2hhaW5BZGRyZXNzLFxuICAgICAgICAgIE9OX0NIQUlOX1RFU1RfV0FMTEVULmJhY2t1cC5wQ2hhaW5BZGRyZXNzLFxuICAgICAgICAgIE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzcyxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0aWR4OiAnMScsXG4gICAgICAgIGxvY2t0aW1lOiAnMCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZW5kZXJQQWRkcmVzc2VzID0gW1xuICAgICAgICBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3MsXG4gICAgICAgIE9OX0NIQUlOX1RFU1RfV0FMTEVULmJpdGdvLnBDaGFpbkFkZHJlc3MsXG4gICAgICAgIE9OX0NIQUlOX1RFU1RfV0FMTEVULmJhY2t1cC5wQ2hhaW5BZGRyZXNzLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgdG9BZGRyZXNzID0gJzB4OTY5OTNCQUViNkFhRTJlMDZCRjk1RjE0NGUyNzc1RDRmOGVmYkQzNSc7XG4gICAgICBjb25zdCBpbXBvcnRGZWUgPSAnMTAwMDAwMCc7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDIpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShzZW5kZXJQQWRkcmVzc2VzKVxuICAgICAgICAudG8odG9BZGRyZXNzKVxuICAgICAgICAuZmVlKGltcG9ydEZlZSlcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5zb3VyY2VDaGFpbklkKVxuICAgICAgICAuZGVjb2RlZFV0eG9zKFt1dHhvXSlcbiAgICAgICAgLmNvbnRleHQodGVzdERhdGEuY29udGV4dCk7XG5cbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnByaXZhdGVLZXkgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogT05fQ0hBSU5fVEVTVF9XQUxMRVQuYml0Z28ucHJpdmF0ZUtleSB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKCcydDRneEVBZFBMaWl5OUhzYmphUXVuMW1WRmV3TW9peE5TNjRlWjU2QzM4TDRtcFAxaicpO1xuXG4gICAgICBjb25zdCBoZXggPSByYXdUeC5yZXBsYWNlKCcweCcsICcnKTtcblxuICAgICAgY29uc3QgYW1vdW50SGV4ID0gJzAwMDAwMDAwMDFjOWMzODAnO1xuICAgICAgY29uc3QgYW1vdW50UG9zID0gaGV4LmluZGV4T2YoYW1vdW50SGV4KTtcbiAgICAgIGFtb3VudFBvcy5zaG91bGQuYmUuZ3JlYXRlclRoYW4oMCk7XG5cbiAgICAgIGNvbnN0IGlucHV0U2VjdGlvbiA9IGhleC5zdWJzdHJpbmcoYW1vdW50UG9zICsgMTYsIGFtb3VudFBvcyArIDQwKTtcbiAgICAgIGNvbnN0IG51bVNpZ0luZGljZXMgPSBwYXJzZUludChpbnB1dFNlY3Rpb24uc3Vic3RyaW5nKDAsIDgpLCAxNik7XG4gICAgICBjb25zdCBzaWdJZHgwID0gcGFyc2VJbnQoaW5wdXRTZWN0aW9uLnN1YnN0cmluZyg4LCAxNiksIDE2KTtcbiAgICAgIGNvbnN0IHNpZ0lkeDEgPSBwYXJzZUludChpbnB1dFNlY3Rpb24uc3Vic3RyaW5nKDE2LCAyNCksIDE2KTtcblxuICAgICAgbnVtU2lnSW5kaWNlcy5zaG91bGQuZXF1YWwoMik7XG4gICAgICBzaWdJZHgwLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHNpZ0lkeDEuc2hvdWxkLmVxdWFsKDIpO1xuXG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9IHBhcnNlSW50KHV0eG8uYW1vdW50LCAxMCkgLSBwYXJzZUludChpbXBvcnRGZWUsIDEwKTtcbiAgICAgIGNvbnN0IG91dHB1dEhleCA9IGV4cGVjdGVkT3V0cHV0LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwgJzAnKTtcbiAgICAgIGhleC5zaG91bGQuY29udGFpbkVxbChvdXRwdXRIZXgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYmFzZS1mZWUgZHJpdmVuIGdhcyBlc3RpbWF0aW9uIChDRUNITy0xODIxKScsICgpID0+IHtcbiAgICBjb25zdCB1dHhvID0ge1xuICAgICAgb3V0cHV0SUQ6IDcsXG4gICAgICBhbW91bnQ6ICczMDAwMDAwMCcsXG4gICAgICB0eGlkOiAnblNCd05jZ2ZMYms1UzQyNWIxcWFZYXFUVENpTUNWNzVLVTRGYm5xOFNQVVVxTHEyJyxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIGFkZHJlc3NlczogW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10sXG4gICAgICBvdXRwdXRpZHg6ICcxJyxcbiAgICAgIGxvY2t0aW1lOiAnMCcsXG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgZmFsbCBiYWNrIHRvIG5ldHdvcmsudHhGZWUgd2hlbiBuZWl0aGVyIGZlZSBub3IgYmFzZUZlZSBpcyBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBuZXR3b3JrVHhGZWUgPSAoY29pbnMuZ2V0KCd0ZmxycCcpLm5ldHdvcmsgYXMgdW5rbm93biBhcyB7IHR4RmVlOiBzdHJpbmcgfSkudHhGZWU7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRJbXBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCgxKVxuICAgICAgICAubG9ja3RpbWUoMClcbiAgICAgICAgLmZyb21QdWJLZXkoW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10pXG4gICAgICAgIC50bygnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JylcbiAgICAgICAgLmRlY29kZWRVdHhvcyhbdXR4b10pXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICB0eC5mZWUuZmVlLnNob3VsZC5lcXVhbChuZXR3b3JrVHhGZWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgYSBmZWUgdGhhdCBhY2NvdW50cyBmb3IgdGhlIEF0b21pY1R4QmFzZUNvc3QgYW5kIGV4Y2VlZHMgYSBuYWl2ZSBnYXMqYmFzZUZlZSBlc3RpbWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VGZWVXZWkgPSA1MDBuOyAvLyBiYXNlIGZlZSBpbiB3ZWkvZ2FzIHVzZWQgaW4gdGhlIHJlcG9ydGVkIGZhaWx1cmVcbiAgICAgIGNvbnN0IHVuZGVycHJpY2VkR2FzRXN0aW1hdGUgPSA1NzAwbjsgLy8gbmFpdmUvbGVnYWN5IGdhcyBlc3RpbWF0ZSBtaXNzaW5nIEF0b21pY1R4QmFzZUNvc3RcbiAgICAgIGNvbnN0IHVuZGVycHJpY2VkRmVlID0gYmFzZUZlZVdlaSAqIHVuZGVycHJpY2VkR2FzRXN0aW1hdGU7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLnRvKCcweDk2OTkzQkFFYjZBYUUyZTA2QkY5NUYxNDRlMjc3NUQ0ZjhlZmJEMzUnKVxuICAgICAgICAuYmFzZUZlZShiYXNlRmVlV2VpKVxuICAgICAgICAuZGVjb2RlZFV0eG9zKFt1dHhvXSlcbiAgICAgICAgLmNvbnRleHQodGVzdERhdGEuY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGFjdHVhbEZlZSA9IEJpZ0ludCh0eC5mZWUuZmVlKTtcblxuICAgICAgLy8gVGhlIGdhcy1hd2FyZSBmZWUgKGluY2x1ZGluZyB0aGUgcmVhbCBBdG9taWNUeEJhc2VDb3N0LCB+MTAsMDAwKSBtdXN0IGV4Y2VlZFxuICAgICAgLy8gdGhlIHVuZGVycHJpY2VkIGxlZ2FjeSBlc3RpbWF0ZSB0aGF0IGNhdXNlZCBcImluc3VmZmljaWVudCBmdW5kc1wiIG9uIGJyb2FkY2FzdC5cbiAgICAgIGFzc2VydChcbiAgICAgICAgYWN0dWFsRmVlID4gdW5kZXJwcmljZWRGZWUsXG4gICAgICAgIGBFeHBlY3RlZCBhY3R1YWxGZWUgKCR7YWN0dWFsRmVlfSkgdG8gYmUgYWJvdmUgdW5kZXJwcmljZWRGZWUgKCR7dW5kZXJwcmljZWRGZWV9KWBcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhZCB0aGUgc3VwcGxpZWQgYmFzZSBmZWUgb24gdG9wIG9mIHRoZSByYXcgZmxhcmVqcyBnYXMqYmFzZUZlZSBlc3RpbWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VGZWVXZWkgPSA1MDBuO1xuICAgICAgY29uc3QgZnJvbUFkZHJlc3MgPSBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3M7XG4gICAgICBjb25zdCB0b0FkZHJlc3MgPSAnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JztcblxuICAgICAgY29uc3QgcGFkZGVkVHggPSAoYXdhaXQgZmFjdG9yeVxuICAgICAgICAuZ2V0SW1wb3J0SW5DQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQoMSlcbiAgICAgICAgLmxvY2t0aW1lKDApXG4gICAgICAgIC5mcm9tUHViS2V5KFtmcm9tQWRkcmVzc10pXG4gICAgICAgIC50byh0b0FkZHJlc3MpXG4gICAgICAgIC5iYXNlRmVlKGJhc2VGZWVXZWkpXG4gICAgICAgIC5kZWNvZGVkVXR4b3MoW3V0eG9dKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KVxuICAgICAgICAuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBwYWRkZWRGZWUgPSBCaWdJbnQocGFkZGVkVHguZmVlLmZlZSk7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBzYW1lIGltcG9ydCB0eCBkaXJlY3RseSB2aWEgZmxhcmVqcyB1c2luZyB0aGUgKnVucGFkZGVkKiBiYXNlIGZlZSxcbiAgICAgIC8vIHRvIHJlY292ZXIgdGhlIG5ldHdvcmsncyByYXcgZ2FzKmJhc2VGZWUgcmVxdWlyZW1lbnQgd2l0aCBubyBidWZmZXIgYXBwbGllZC5cbiAgICAgIGNvbnN0IGFzc2V0SWQgPSAoY29pbnMuZ2V0KCd0ZmxycCcpLm5ldHdvcmsgYXMgdW5rbm93biBhcyB7IGFzc2V0SWQ6IHN0cmluZyB9KS5hc3NldElkO1xuICAgICAgY29uc3QgbmF0aXZlVXR4b3MgPSBVdGlscy5kZWNvZGVkVG9VdHhvcyhbdXR4b10sIGFzc2V0SWQpO1xuICAgICAgY29uc3QgcmF3SW1wb3J0VHggPSBldm0ubmV3SW1wb3J0VHhGcm9tQmFzZUZlZShcbiAgICAgICAgdGVzdERhdGEuY29udGV4dCxcbiAgICAgICAgVXRpbHMucGFyc2VBZGRyZXNzKHRvQWRkcmVzcyksXG4gICAgICAgIFtVdGlscy5wYXJzZUFkZHJlc3MoZnJvbUFkZHJlc3MpXSxcbiAgICAgICAgbmF0aXZlVXR4b3MsXG4gICAgICAgICdQJyxcbiAgICAgICAgYmFzZUZlZVdlaVxuICAgICAgKSBhcyBVbnNpZ25lZFR4O1xuICAgICAgY29uc3QgcmF3SW5uZXJUeCA9IHJhd0ltcG9ydFR4LmdldFR4KCkgYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuICAgICAgY29uc3QgcmF3VG90YWxPdXRwdXQgPSByYXdJbm5lclR4Lk91dHMucmVkdWNlKChzdW0sIG91dCkgPT4gc3VtICsgb3V0LmFtb3VudC52YWx1ZSgpLCBCaWdJbnQoMCkpO1xuICAgICAgY29uc3QgcmF3RmVlID0gQmlnSW50KHV0eG8uYW1vdW50KSAtIHJhd1RvdGFsT3V0cHV0O1xuXG4gICAgICBhc3NlcnQocGFkZGVkRmVlID4gcmF3RmVlLCBgRXhwZWN0ZWQgcGFkZGVkIGZlZSAoJHtwYWRkZWRGZWV9KSB0byBleGNlZWQgdGhlIHVucGFkZGVkIHJhdyBmZWUgKCR7cmF3RmVlfSlgKTtcbiAgICAgIC8vIFBhZGRpbmcgaXMgZXhhY3RseSB0aGUgY29uZmlndXJlZCAxMCUgYnVmZmVyIGFwcGxpZWQgdG8gdGhlIGJhc2UgZmVlIGJlZm9yZSBlc3RpbWF0aW9uLlxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhZGRlZEZlZSwgKHJhd0ZlZSAqIDExMDAwbikgLyAxMDAwMG4pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTVBDIHNpZ25pbmcgKHRocmVzaG9sZD0xKScsICgpID0+IHtcbiAgICBjb25zdCBtcGNVdHhvID0ge1xuICAgICAgb3V0cHV0SUQ6IDcsXG4gICAgICBhbW91bnQ6ICczMDAwMDAwMCcsXG4gICAgICB0eGlkOiAnblNCd05jZ2ZMYms1UzQyNWIxcWFZYXFUVENpTUNWNzVLVTRGYm5xOFNQVVVxTHEyJyxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIGFkZHJlc3NlczogW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10sXG4gICAgICBvdXRwdXRpZHg6ICcxJyxcbiAgICAgIGxvY2t0aW1lOiAnMCcsXG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYW5kIHNpZ24gaW1wb3J0IHRvIEMtY2hhaW4gd2l0aCB0aHJlc2hvbGQ9MSB1c2luZyBzaWduKCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRJbXBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCgxKVxuICAgICAgICAubG9ja3RpbWUoMClcbiAgICAgICAgLmZyb21QdWJLZXkoW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10pXG4gICAgICAgIC50bygnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JylcbiAgICAgICAgLmZlZSgnMTAwMDAwMCcpXG4gICAgICAgIC5kZWNvZGVkVXR4b3MoW21wY1V0eG9dKVxuICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KTtcblxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBqc29uLnRocmVzaG9sZC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBqc29uLnNvdXJjZUNoYWluIS5zaG91bGQuZXF1YWwoJ1AnKTtcbiAgICAgIGpzb24uZGVzdGluYXRpb25DaGFpbiEuc2hvdWxkLmVxdWFsKCdDJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuZCBzaWduIGltcG9ydCB0byBDLWNoYWluIHdpdGggdGhyZXNob2xkPTEgdXNpbmcgYWRkRXh0ZXJuYWxTaWduYXR1cmUoKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLnRvKCcweDk2OTkzQkFFYjZBYUUyZTA2QkY5NUYxNDRlMjc3NUQ0ZjhlZmJEMzUnKVxuICAgICAgICAuZmVlKCcxMDAwMDAwJylcbiAgICAgICAgLmRlY29kZWRVdHhvcyhbbXBjVXR4b10pXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB1bnNpZ25lZEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFNpbXVsYXRlIE1QQyBzaWduaW5nXG4gICAgICBjb25zdCBmbGFyZVVuc2lnbmVkVHggPSB0eC5nZXRGbGFyZVRyYW5zYWN0aW9uKCkgYXMgVW5zaWduZWRUeDtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNlY3AyNTZrMS5zaWduKFxuICAgICAgICBmbGFyZVVuc2lnbmVkVHgudG9CeXRlcygpLFxuICAgICAgICBCdWZmZXIuZnJvbShPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnByaXZhdGVLZXksICdoZXgnKVxuICAgICAgKTtcblxuICAgICAgdHguYWRkRXh0ZXJuYWxTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgICAgIGNvbnN0IHNpZ25lZEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaWduZWRIZXguc2hvdWxkLm5vdC5lcXVhbCh1bnNpZ25lZEhleCk7XG5cbiAgICAgIC8vIFZlcmlmeSByb3VuZHRyaXBcbiAgICAgIGNvbnN0IHBhcnNlZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oc2lnbmVkSGV4KTtcbiAgICAgIGNvbnN0IHBhcnNlZFR4ID0gYXdhaXQgcGFyc2VkQnVpbGRlci5idWlsZCgpO1xuICAgICAgcGFyc2VkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwoc2lnbmVkSGV4KTtcblxuICAgICAgdHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb2R1Y2Ugc2FtZSBzaWduZWQgdHggdmlhIHNpZ24oKSBhbmQgYWRkRXh0ZXJuYWxTaWduYXR1cmUoKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkQXJncyA9ICgpID0+XG4gICAgICAgIGZhY3RvcnlcbiAgICAgICAgICAuZ2V0SW1wb3J0SW5DQnVpbGRlcigpXG4gICAgICAgICAgLnRocmVzaG9sZCgxKVxuICAgICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAgIC5mcm9tUHViS2V5KFtPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3NdKVxuICAgICAgICAgIC50bygnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JylcbiAgICAgICAgICAuZmVlKCcxMDAwMDAwJylcbiAgICAgICAgICAuZGVjb2RlZFV0eG9zKFttcGNVdHhvXSlcbiAgICAgICAgICAuY29udGV4dCh0ZXN0RGF0YS5jb250ZXh0KTtcblxuICAgICAgLy8gc2lnbigpXG4gICAgICBjb25zdCB0eEJ1aWxkZXIxID0gYnVpbGRBcmdzKCk7XG4gICAgICB0eEJ1aWxkZXIxLnNpZ24oeyBrZXk6IE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IHR4MSA9IGF3YWl0IHR4QnVpbGRlcjEuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNpZ25lZEhleDEgPSB0eDEudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gYWRkRXh0ZXJuYWxTaWduYXR1cmUoKVxuICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IGJ1aWxkQXJncygpO1xuICAgICAgY29uc3QgdHgyID0gKGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBmbGFyZVVuc2lnbmVkVHggPSB0eDIuZ2V0RmxhcmVUcmFuc2FjdGlvbigpIGFzIFVuc2lnbmVkVHg7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzZWNwMjU2azEuc2lnbihcbiAgICAgICAgZmxhcmVVbnNpZ25lZFR4LnRvQnl0ZXMoKSxcbiAgICAgICAgQnVmZmVyLmZyb20oT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wcml2YXRlS2V5LCAnaGV4JylcbiAgICAgICk7XG4gICAgICB0eDIuYWRkRXh0ZXJuYWxTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgICAgIGNvbnN0IHNpZ25lZEhleDIgPSB0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgc2lnbmVkSGV4MS5zaG91bGQuZXF1YWwoc2lnbmVkSGV4Mik7XG4gICAgICB0eDEuaWQuc2hvdWxkLmVxdWFsKHR4Mi5pZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlc2VyaWFsaXplIHVuc2lnbmVkIE1QQyB0eCBhbmQgc2lnbiBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLnRvKCcweDk2OTkzQkFFYjZBYUUyZTA2QkY5NUYxNDRlMjc3NUQ0ZjhlZmJEMzUnKVxuICAgICAgICAuZmVlKCcxMDAwMDAwJylcbiAgICAgICAgLmRlY29kZWRVdHhvcyhbbXBjVXR4b10pXG4gICAgICAgIC5jb250ZXh0KHRlc3REYXRhLmNvbnRleHQpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB1bnNpZ25lZEhleCA9IHVuc2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gRGVzZXJpYWxpemUgYW5kIHNpZ25cbiAgICAgIGNvbnN0IHR4QnVpbGRlcjIgPSBmYWN0b3J5LmZyb20odW5zaWduZWRIZXgpO1xuICAgICAgdHhCdWlsZGVyMi5zaWduKHsga2V5OiBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcblxuICAgICAgc2lnbmVkVHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAgIC8vIFZlcmlmeSByb3VuZHRyaXBcbiAgICAgIGNvbnN0IHBhcnNlZFR4ID0gYXdhaXQgZmFjdG9yeS5mcm9tKHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpLmJ1aWxkKCk7XG4gICAgICBwYXJzZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChzaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHBhcnNlZFR4LmlkLnNob3VsZC5lcXVhbChzaWduZWRUeC5pZCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=