@bitgo-beta/sdk-coin-avaxp 2.0.1-beta.93 → 2.0.1-beta.95

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.4.2](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-avaxp@3.4.1...@bitgo/sdk-coin-avaxp@3.4.2) (2022-12-09)
7
+
8
+ **Note:** Version bump only for package @bitgo/sdk-coin-avaxp
9
+
10
+ ## [3.4.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-avaxp@3.4.0...@bitgo/sdk-coin-avaxp@3.4.1) (2022-12-06)
11
+
12
+ **Note:** Version bump only for package @bitgo/sdk-coin-avaxp
13
+
6
14
  # [3.4.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-avaxp@3.3.0...@bitgo/sdk-coin-avaxp@3.4.0) (2022-12-01)
7
15
 
8
16
  ### Features
@@ -1 +1 @@
1
- {"version":3,"file":"avaxp.d.ts","sourceRoot":"","sources":["../../src/avaxp.ts"],"names":[],"mappings":";AAAA,OAAO,EAAoB,QAAQ,IAAI,eAAe,EAAE,UAAU,EAAS,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACL,QAAQ,EACR,SAAS,EACT,OAAO,EACP,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EAIvB,kBAAkB,EAKlB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,OAAO,CAAC;AAClC,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAMjB,qBAAa,KAAM,SAAQ,QAAQ;IACjC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAE/C,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAUrE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAGlB,SAAS,IAAI,UAAU;IAGvB,WAAW,IAAI,MAAM;IAGrB,aAAa,IAAI,MAAM,GAAG,MAAM;IAIhC;;;;;OAKG;IACH,iBAAiB,CACf,cAAc,EAAE,8BAA8B,EAC9C,WAAW,EAAE,QAAQ,CAAC,sBAAsB,GAC3C,IAAI;IAYP;;;;;;OAMG;IACH,gBAAgB,CACd,UAAU,EAAE,qBAAqB,EAAE,EACnC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,QAAQ,CAAC,sBAAsB,GAC3C,IAAI;IA8BP;;;;;OAKG;IACH,gBAAgB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAgB5F,iBAAiB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IA+DhF;;;;;OAKG;IACG,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BrE;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;;;OAKG;IACH,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAcvC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO;IAQnD;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBhF,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAKtE,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAInF;;;;OAIG;IACG,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAcrG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAIvD,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1E,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"avaxp.d.ts","sourceRoot":"","sources":["../../src/avaxp.ts"],"names":[],"mappings":";AAAA,OAAO,EAAoB,QAAQ,IAAI,eAAe,EAAE,UAAU,EAAS,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACL,QAAQ,EACR,SAAS,EACT,OAAO,EACP,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EAIvB,kBAAkB,EAKlB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,OAAO,CAAC;AAClC,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAMjB,qBAAa,KAAM,SAAQ,QAAQ;IACjC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAE/C,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAUrE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAGlB,SAAS,IAAI,UAAU;IAGvB,WAAW,IAAI,MAAM;IAGrB,aAAa,IAAI,MAAM,GAAG,MAAM;IAIhC;;;;;OAKG;IACH,iBAAiB,CACf,cAAc,EAAE,8BAA8B,EAC9C,WAAW,EAAE,QAAQ,CAAC,sBAAsB,GAC3C,IAAI;IAYP;;;;;;OAMG;IACH,gBAAgB,CACd,UAAU,EAAE,qBAAqB,EAAE,EACnC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,QAAQ,CAAC,sBAAsB,GAC3C,IAAI;IA8BP;;;;;OAKG;IACH,gBAAgB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAgB5F,iBAAiB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IAgEhF;;;;;OAKG;IACG,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BrE;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;;;OAKG;IACH,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAcvC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO;IAQnD;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBhF,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAKtE,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAInF;;;;OAIG;IACG,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAcrG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAIvD,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1E,OAAO,CAAC,UAAU;CAGnB"}
package/dist/src/avaxp.js CHANGED
@@ -129,20 +129,20 @@ class AvaxP extends sdk_core_1.BaseCoin {
129
129
  throw new Error('Invalid transaction');
130
130
  }
131
131
  const explainedTx = tx.explainTransaction();
132
- const { type, stakingOptions, memo } = params.txParams;
132
+ const { type, stakingOptions } = params.txParams;
133
133
  // TODO(BG-62112): change ImportToC type to Import
134
134
  if (!type || (type !== 'ImportToC' && explainedTx.type !== sdk_core_1.TransactionType[type])) {
135
135
  throw new Error('Tx type does not match with expected txParams type');
136
136
  }
137
- if (memo && explainedTx.memo !== memo.value) {
138
- throw new Error('Tx memo does not match with expected txParams memo');
139
- }
140
137
  switch (explainedTx.type) {
141
138
  case sdk_core_1.TransactionType.AddDelegator:
142
139
  case sdk_core_1.TransactionType.AddValidator:
143
140
  if (params.txParams.recipients && params.txParams.recipients.length !== 0) {
144
141
  throw new Error('Stake Tx does not require recipients');
145
142
  }
143
+ if (params.txParams.memo && explainedTx.memo !== params.txParams.memo.value) {
144
+ throw new Error('Tx memo does not match with expected txParams memo');
145
+ }
146
146
  this.validateStakingTx(stakingOptions, explainedTx);
147
147
  break;
148
148
  case sdk_core_1.TransactionType.Export:
@@ -329,4 +329,4 @@ class AvaxP extends sdk_core_1.BaseCoin {
329
329
  }
330
330
  }
331
331
  exports.AvaxP = AvaxP;
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZheHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZheHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUF1RztBQUN2RyxtREFnQjhCO0FBQzlCLGdEQUFrQztBQVNsQyx3REFBZ0M7QUFDaEMsb0RBQXVCO0FBQ3ZCLGdFQUFxQztBQUNyQyxxREFBaUQ7QUFFakQsTUFBYSxLQUFNLFNBQVEsbUJBQVE7SUFHakMsWUFBWSxLQUFnQixFQUFFLFdBQXVDO1FBQ25FLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUNELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFDRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FDZixjQUE4QyxFQUM5QyxXQUE0QztRQUU1QyxNQUFNLGtCQUFrQixHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUs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LGlCQUFpQixDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUNsRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUEyQixFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFZLEVBQUUsT0FBd0I7UUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLElBQUksdUJBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDL0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQTJCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSxRQUFRLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Q0FDRjtBQTVWRCxzQkE0VkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdmFsYW5jaGVOZXR3b3JrLCBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHksIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBLZXlQYWlyLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yLFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBGZWVFc3RpbWF0ZU9wdGlvbnMsXG4gIFNpZ25pbmdFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBJVHJhbnNhY3Rpb25SZWNpcGllbnQsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIEF2YXhwTGliIGZyb20gJy4vbGliJztcbmltcG9ydCB7XG4gIEF2YXhwU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25GZWUsXG4gIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEF2YXhwVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBBdmF4cFRyYW5zYWN0aW9uU3Rha2luZ09wdGlvbnMsXG4gIEF2YXhwVHJhbnNhY3Rpb25QYXJhbXMsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBpc1ZhbGlkQWRkcmVzcyB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBdmF4UCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBBdmF4UChiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4ubmFtZTtcbiAgfVxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mdWxsTmFtZTtcbiAgfVxuICBnZXRCYXNlRmFjdG9yKCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBzdGFraW5nIHR4biBpcyB2YWxpZCwgYmFzZWQgb24gZXhwZWN0ZWQgdHggcGFyYW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge0F2YXhwVHJhbnNhY3Rpb25TdGFraW5nT3B0aW9uc30gc3Rha2luZ09wdGlvbnMgZXhwZWN0ZWQgc3Rha2luZyBwYXJhbXMgdG8gY2hlY2sgYWdhaW5zdFxuICAgKiBAcGFyYW0ge0F2YXhwTGliLlRyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhaW5lZFR4IGV4cGxhaW5lZCBzdGFraW5nIHRyYW5zYWN0aW9uXG4gICAqL1xuICB2YWxpZGF0ZVN0YWtpbmdUeChcbiAgICBzdGFraW5nT3B0aW9uczogQXZheHBUcmFuc2FjdGlvblN0YWtpbmdPcHRpb25zLFxuICAgIGV4cGxhaW5lZFR4OiBBdmF4cExpYi5UcmFuc2FjdGlvbkV4cGxhbmF0aW9uXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcmVkUmVjaXBpZW50cyA9IFt7IGFkZHJlc3M6IHN0YWtpbmdPcHRpb25zLm5vZGVJRCwgYW1vdW50OiBzdGFraW5nT3B0aW9ucy5hbW91bnQgfV07XG4gICAgY29uc3QgZmlsdGVyZWRPdXRwdXRzID0gZXhwbGFpbmVkVHgub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gXy5waWNrKG91dHB1dCwgWydhZGRyZXNzJywgJ2Ftb3VudCddKSk7XG5cbiAgICBpZiAoIV8uaXNFcXVhbChmaWx0ZXJlZE91dHB1dHMsIGZpbHRlcmVkUmVjaXBpZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfVxuICAgIGlmIChzdGFraW5nT3B0aW9ucz8uYW1vdW50ICE9PSBleHBsYWluZWRUeC5vdXRwdXRBbW91bnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggdG90YWwgYW1vdW50IGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdG90YWwgYW1vdW50IGZpZWxkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGV4cG9ydCB0eG4gaXMgdmFsaWQsIGJhc2VkIG9uIGV4cGVjdGVkIHR4IHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHtJVHJhbnNhY3Rpb25SZWNpcGllbnRbXX0gcmVjaXBpZW50cyBleHBlY3RlZCByZWNpcGllbnRzIGFuZCBpbmZvXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIHR4biBtZW1vIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0ge0F2YXhwTGliLlRyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhaW5lZFR4IGV4cGxhaW5lZCBleHBvcnQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHZhbGlkYXRlRXhwb3J0VHgoXG4gICAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W10sXG4gICAgbWVtbzogc3RyaW5nLFxuICAgIGV4cGxhaW5lZFR4OiBBdmF4cExpYi5UcmFuc2FjdGlvbkV4cGxhbmF0aW9uXG4gICk6IHZvaWQge1xuICAgIGlmIChyZWNpcGllbnRzLmxlbmd0aCAhPT0gMSB8fCBleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBvcnQgVHggcmVxdWlyZXMgb25lIHJlY2lwaWVudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwaWVudEFtb3VudCA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50c1swXS5hbW91bnQpO1xuXG4gICAgaWYgKFxuICAgICAgcmVjaXBpZW50QW1vdW50LmlzR3JlYXRlclRoYW4oZXhwbGFpbmVkVHgub3V0cHV0QW1vdW50KSB8fFxuICAgICAgcmVjaXBpZW50QW1vdW50LnBsdXMoZXhwbGFpbmVkVHguZmVlLmZlZSkuaXNMZXNzVGhhbihleHBsYWluZWRUeC5vdXRwdXRBbW91bnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUeCB0b3RhbCBhbW91bnQgJHtleHBsYWluZWRUeC5vdXRwdXRBbW91bnR9IGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdG90YWwgYW1vdW50IGZpZWxkICR7cmVjaXBpZW50QW1vdW50fSBhbmQgZml4ZWQgZmVlICR7ZXhwbGFpbmVkVHguZmVlLmZlZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChleHBsYWluZWRUeC5vdXRwdXRzICYmICF1dGlscy5pc1ZhbGlkQWRkcmVzcyhleHBsYWluZWRUeC5vdXRwdXRzWzBdLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgUC1jaGFpbiBhZGRyZXNzICR7ZXhwbGFpbmVkVHgub3V0cHV0c1swXS5hZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbW9WYWx1ZSA9IG1lbW8uc3BsaXQoJ34nKTtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKG1lbW9WYWx1ZVswXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHhuIG1lbW8gbXVzdCBjb250YWluIHZhbGlkIEMtY2hhaW4gYWRkcmVzcyBkZXN0aW5hdGlvbiwgcmVjZWl2ZWQ6ICR7bWVtb31gKTtcbiAgICB9IGVsc2UgaWYgKG1lbW9WYWx1ZVswXSAhPT0gcmVjaXBpZW50c1swXS5hZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIEMtY2hhaW4gcmVjZWl2ZSBhZGRyZXNzICR7bWVtb1ZhbHVlWzBdfSwgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcGFyYW1zIGFkZHJlc3MgJHtyZWNpcGllbnRzWzBdLmFkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaW1wb3J0IHR4biBpbnRvIFAgaXMgdmFsaWQsIGJhc2VkIG9uIGV4cGVjdGVkIHR4IHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHtBdmF4cExpYi5BdmF4cEVudHJ5W119IGV4cGxhaW5lZFR4SW5wdXRzIHR4IGlucHV0cyAodW5zcGVudHMgdG8gYmUgaW1wb3J0ZWQpXG4gICAqIEBwYXJhbSB7QXZheHBUcmFuc2FjdGlvblBhcmFtc30gdHhQYXJhbXMgZXhwZWN0ZWQgdHggaW5mbyB0byBjaGVjayBhZ2FpbnN0XG4gICAqL1xuICB2YWxpZGF0ZUltcG9ydFR4KGV4cGxhaW5lZFR4SW5wdXRzOiBBdmF4cExpYi5BdmF4cEVudHJ5W10sIHR4UGFyYW1zOiBBdmF4cFRyYW5zYWN0aW9uUGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKHR4UGFyYW1zLnVuc3BlbnRzKSB7XG4gICAgICBpZiAoZXhwbGFpbmVkVHhJbnB1dHMubGVuZ3RoICE9PSB0eFBhcmFtcy51bnNwZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3R4UGFyYW1zLnVuc3BlbnRzLmxlbmd0aH0gVVRYT3MsIHRyYW5zYWN0aW9uIGhhZCAke2V4cGxhaW5lZFR4SW5wdXRzLmxlbmd0aH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5zcGVudHMgPSBuZXcgU2V0KHR4UGFyYW1zLnVuc3BlbnRzKTtcblxuICAgICAgZm9yIChjb25zdCB1bnNwZW50IG9mIGV4cGxhaW5lZFR4SW5wdXRzKSB7XG4gICAgICAgIGlmICghdW5zcGVudHMuaGFzKHVuc3BlbnQuaWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmFuc2FjdGlvbiBzaG91bGQgbm90IGNvbnRhaW4gdGhlIFVUWE86ICR7dW5zcGVudC5pZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogQXZheHBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eFByZWJ1aWxkICYmIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4O1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH1cbiAgICBsZXQgdHg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20odHhIZXgpO1xuICAgICAgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG5cbiAgICBjb25zdCB7IHR5cGUsIHN0YWtpbmdPcHRpb25zLCBtZW1vIH0gPSBwYXJhbXMudHhQYXJhbXM7XG4gICAgLy8gVE9ETyhCRy02MjExMik6IGNoYW5nZSBJbXBvcnRUb0MgdHlwZSB0byBJbXBvcnRcbiAgICBpZiAoIXR5cGUgfHwgKHR5cGUgIT09ICdJbXBvcnRUb0MnICYmIGV4cGxhaW5lZFR4LnR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZVt0eXBlXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggdHlwZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHR5cGUnKTtcbiAgICB9XG5cbiAgICBpZiAobWVtbyAmJiBleHBsYWluZWRUeC5tZW1vICE9PSBtZW1vLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG1lbW8gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyBtZW1vJyk7XG4gICAgfVxuICAgIHN3aXRjaCAoZXhwbGFpbmVkVHgudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkRGVsZWdhdG9yOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yOlxuICAgICAgICBpZiAocGFyYW1zLnR4UGFyYW1zLnJlY2lwaWVudHMgJiYgcGFyYW1zLnR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFrZSBUeCBkb2VzIG5vdCByZXF1aXJlIHJlY2lwaWVudHMnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlU3Rha2luZ1R4KHN0YWtpbmdPcHRpb25zLCBleHBsYWluZWRUeCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuRXhwb3J0OlxuICAgICAgICBpZiAoIXBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBvcnQgVHggcmVxdWlyZXMgYSByZWNpcGllbnQnKTtcbiAgICAgICAgfSBlbHNlIGlmICghZXhwbGFpbmVkVHgubWVtbykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwb3J0IFR4IHJlcXVpcmVzIGEgbWVtbyB3aXRoIGMtY2hhaW4gYWRkcmVzcycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVFeHBvcnRUeChwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cywgZXhwbGFpbmVkVHgubWVtbywgZXhwbGFpbmVkVHgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuSW1wb3J0OlxuICAgICAgICBpZiAodHguaXNUcmFuc2FjdGlvbkZvckNDaGFpbikge1xuICAgICAgICAgIC8vIEltcG9ydCB0byBDLWNoYWluXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzICYmIHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aCAhPT0gMCkgfHxcbiAgICAgICAgICAgIGV4cGxhaW5lZFR4Lm91dHB1dHMubGVuZ3RoICE9PSAxXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIDEgb3V0cHV0IGluIGltcG9ydCB0eG4gYW5kIGRvZXMgbm90IHJlcXVpcmUgcmVjaXBpZW50cycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJbXBvcnQgdG8gUC1jaGFpblxuICAgICAgICAgIGlmIChleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAxIG91dHB1dCBpbiBpbXBvcnQgdHhuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudmFsaWRhdGVJbXBvcnRUeChleHBsYWluZWRUeC5pbnB1dHMsIHBhcmFtcy50eFBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IHR5cGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYWRkcmVzcyBpcyB2YWxpZCwgdGhlbiBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB0aGUgcm9vdCBhZGRyZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3MgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyBwdWJsaWMga2V5cyB0byBnZW5lcmF0ZSB0aGUgd2FsbGV0XG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywga2V5Y2hhaW5zIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG4gICAgaWYgKCFrZXljaGFpbnMgfHwga2V5Y2hhaW5zLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIC8vIG11bHRpc2lnIGFkZHJlc3NlcyBhcmUgc2VwYXJhdGVkIGJ5IH5cbiAgICBjb25zdCBzcGxpdEFkZHJlc3NlcyA9IGFkZHJlc3Muc3BsaXQoJ34nKTtcblxuICAgIC8vIGRlcml2ZSBhZGRyZXNzZXMgZnJvbSBrZXljaGFpblxuICAgIGNvbnN0IHVubG9ja0FkZHJlc3NlcyA9IGtleWNoYWlucy5tYXAoKGtleWNoYWluKSA9PlxuICAgICAgbmV3IEF2YXhwTGliLktleVBhaXIoeyBwdWI6IGtleWNoYWluLnB1YiB9KS5nZXRBZGRyZXNzKHRoaXMuX3N0YXRpY3NDb2luLm5ldHdvcmsudHlwZSlcbiAgICApO1xuXG4gICAgaWYgKHNwbGl0QWRkcmVzc2VzLmxlbmd0aCAhPT0gdW5sb2NrQWRkcmVzc2VzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBtdWx0aXNpZyBhZGRyZXNzIGxlbmd0aCBkb2VzIG5vdCBtYXRjaGApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hZHJlc3Nlc0FycmF5c01hdGNoKHNwbGl0QWRkcmVzc2VzLCB1bmxvY2tBZGRyZXNzZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6ICR7YWRkcmVzc30gaXMgbm90IG9mIHRoaXMgd2FsbGV0YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0d28gbXVsdGlzaWcgYWRkcmVzcyBhcnJheXMgaGF2ZSB0aGUgc2FtZSBlbGVtZW50cywgb3JkZXIgZG9lc250IG1hdHRlclxuICAgKiBAcGFyYW0gYWRkcmVzc0FycmF5MVxuICAgKiBAcGFyYW0gYWRkcmVzc0FycmF5MlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGFkZHJlc3MgYXJyYXlzIGhhdmUgdGhlIHNhbWUgYWRkcmVzc2VzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFkcmVzc2VzQXJyYXlzTWF0Y2goYWRkcmVzc0FycmF5MTogc3RyaW5nW10sIGFkZHJlc3NBcnJheTI6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFkZHJlc3NBcnJheTEuc29ydCgpKSA9PT0gSlNPTi5zdHJpbmdpZnkoYWRkcmVzc0FycmF5Mi5zb3J0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIEF2YXhwIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzZWVkIC0gU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBBdmF4cExpYi5LZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBBdmF4cExpYi5LZXlQYWlyKCk7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuXG4gICAgaWYgKCFrZXlzLnBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnB1YixcbiAgICAgIHBydjoga2V5cy5wcnYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YiB0aGUgcHJ2IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBBdmF4cExpYi5LZXlQYWlyKHsgcHViIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHJpdmF0ZSBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFBydihwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgQXZheHBMaWIuS2V5UGFpcih7IHBydiB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChhZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXZheHBMaWIuVXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgQXZheHAgdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IEF2YXhwU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAvLyBkZXNlcmlhbGl6ZSByYXcgdHJhbnNhY3Rpb24gKG5vdGU6IGZyb21BZGRyZXNzIGhhcyBvbmNoYWluIG9yZGVyKVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIGNvbnN0IGtleSA9IHBhcmFtcy5wcnY7XG5cbiAgICAvLyBwdXNoIHRoZSBrZXlwYWlyIHRvIHNpZ25lciBhcnJheVxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5IH0pO1xuXG4gICAgLy8gYnVpbGQgdGhlIHRyYW5zYWN0aW9uXG4gICAgY29uc3QgdHJhbnNhY3Rpb246IEJhc2VUcmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGJ1aWxkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID49IDJcbiAgICAgID8geyB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSB9XG4gICAgICA6IHsgaGFsZlNpZ25lZDogeyB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSB9IH07XG4gIH1cblxuICBhc3luYyBmZWVFc3RpbWF0ZShwYXJhbXM6IEZlZUVzdGltYXRlT3B0aW9ucyk6IFByb21pc2U8VHJhbnNhY3Rpb25GZWU+IHtcbiAgICAvLyBzdGFraW5nIHRyYW5zYWN0aW9ucyBhcmUgZmVlLWxlc3NcbiAgICByZXR1cm4geyBmZWU6ICcwJyB9O1xuICB9XG5cbiAgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucz4ge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yKCdwYXJzZVRyYW5zYWN0aW9uIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIGEgQXZheHAgdHJhbnNhY3Rpb24gZnJvbSB0eEhleFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8QXZheHBMaWIuVHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gcGFyYW1zLnR4SGV4ID8/IHBhcmFtcz8uaGFsZlNpZ25lZD8udHhIZXg7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHRyYW5zYWN0aW9uIGhleCcpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRCdWlsZGVyKCkuZnJvbSh0eEhleCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgcmV0dXJuIHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVjb3ZlcnlTaWduYXR1cmUobWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEF2YXhwTGliLlV0aWxzLnJlY292ZXJ5U2lnbmF0dXJlKHRoaXMuX3N0YXRpY3NDb2luLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZSwgc2lnbmF0dXJlKTtcbiAgfVxuXG4gIGFzeW5jIHNpZ25NZXNzYWdlKGtleTogS2V5UGFpciwgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBjb25zdCBwcnYgPSBuZXcgQXZheHBMaWIuS2V5UGFpcihrZXkpLmdldFByaXZhdGVLZXkoKTtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1lc3NhZ2UgPSBCdWZmZXIuZnJvbShtZXNzYWdlLCAnaGV4Jyk7XG4gICAgfVxuICAgIHJldHVybiBBdmF4cExpYi5VdGlscy5jcmVhdGVTaWduYXR1cmUodGhpcy5fc3RhdGljc0NvaW4ubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrLCBtZXNzYWdlLCBwcnYpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyKCk6IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gIH1cbn1cbiJdfQ==
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZheHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZheHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUF1RztBQUN2RyxtREFnQjhCO0FBQzlCLGdEQUFrQztBQVNsQyx3REFBZ0M7QUFDaEMsb0RBQXVCO0FBQ3ZCLGdFQUFxQztBQUNyQyxxREFBaUQ7QUFFakQsTUFBYSxLQUFNLFNBQVEsbUJBQVE7SUFHakMsWUFBWSxLQUFnQixFQUFFLFdBQXVDO1FBQ25FLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUNELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFDRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FDZixjQUE4QyxFQUM5QyxXQUE0QztRQUU1QyxNQUFNLGtCQUFrQixHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUs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QUUsQ0FBQyxDQUFDO1NBQ3REO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUNsRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUEyQixFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFZLEVBQUUsT0FBd0I7UUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLElBQUksdUJBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDL0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQTJCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSxRQUFRLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Q0FDRjtBQTdWRCxzQkE2VkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdmFsYW5jaGVOZXR3b3JrLCBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHksIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBLZXlQYWlyLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yLFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBGZWVFc3RpbWF0ZU9wdGlvbnMsXG4gIFNpZ25pbmdFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBJVHJhbnNhY3Rpb25SZWNpcGllbnQsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIEF2YXhwTGliIGZyb20gJy4vbGliJztcbmltcG9ydCB7XG4gIEF2YXhwU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25GZWUsXG4gIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEF2YXhwVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBBdmF4cFRyYW5zYWN0aW9uU3Rha2luZ09wdGlvbnMsXG4gIEF2YXhwVHJhbnNhY3Rpb25QYXJhbXMsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBpc1ZhbGlkQWRkcmVzcyB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBdmF4UCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBBdmF4UChiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4ubmFtZTtcbiAgfVxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mdWxsTmFtZTtcbiAgfVxuICBnZXRCYXNlRmFjdG9yKCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBzdGFraW5nIHR4biBpcyB2YWxpZCwgYmFzZWQgb24gZXhwZWN0ZWQgdHggcGFyYW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge0F2YXhwVHJhbnNhY3Rpb25TdGFraW5nT3B0aW9uc30gc3Rha2luZ09wdGlvbnMgZXhwZWN0ZWQgc3Rha2luZyBwYXJhbXMgdG8gY2hlY2sgYWdhaW5zdFxuICAgKiBAcGFyYW0ge0F2YXhwTGliLlRyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhaW5lZFR4IGV4cGxhaW5lZCBzdGFraW5nIHRyYW5zYWN0aW9uXG4gICAqL1xuICB2YWxpZGF0ZVN0YWtpbmdUeChcbiAgICBzdGFraW5nT3B0aW9uczogQXZheHBUcmFuc2FjdGlvblN0YWtpbmdPcHRpb25zLFxuICAgIGV4cGxhaW5lZFR4OiBBdmF4cExpYi5UcmFuc2FjdGlvbkV4cGxhbmF0aW9uXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcmVkUmVjaXBpZW50cyA9IFt7IGFkZHJlc3M6IHN0YWtpbmdPcHRpb25zLm5vZGVJRCwgYW1vdW50OiBzdGFraW5nT3B0aW9ucy5hbW91bnQgfV07XG4gICAgY29uc3QgZmlsdGVyZWRPdXRwdXRzID0gZXhwbGFpbmVkVHgub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gXy5waWNrKG91dHB1dCwgWydhZGRyZXNzJywgJ2Ftb3VudCddKSk7XG5cbiAgICBpZiAoIV8uaXNFcXVhbChmaWx0ZXJlZE91dHB1dHMsIGZpbHRlcmVkUmVjaXBpZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zJyk7XG4gICAgfVxuICAgIGlmIChzdGFraW5nT3B0aW9ucz8uYW1vdW50ICE9PSBleHBsYWluZWRUeC5vdXRwdXRBbW91bnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggdG90YWwgYW1vdW50IGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdG90YWwgYW1vdW50IGZpZWxkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGV4cG9ydCB0eG4gaXMgdmFsaWQsIGJhc2VkIG9uIGV4cGVjdGVkIHR4IHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHtJVHJhbnNhY3Rpb25SZWNpcGllbnRbXX0gcmVjaXBpZW50cyBleHBlY3RlZCByZWNpcGllbnRzIGFuZCBpbmZvXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIHR4biBtZW1vIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0ge0F2YXhwTGliLlRyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhaW5lZFR4IGV4cGxhaW5lZCBleHBvcnQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHZhbGlkYXRlRXhwb3J0VHgoXG4gICAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W10sXG4gICAgbWVtbzogc3RyaW5nLFxuICAgIGV4cGxhaW5lZFR4OiBBdmF4cExpYi5UcmFuc2FjdGlvbkV4cGxhbmF0aW9uXG4gICk6IHZvaWQge1xuICAgIGlmIChyZWNpcGllbnRzLmxlbmd0aCAhPT0gMSB8fCBleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBvcnQgVHggcmVxdWlyZXMgb25lIHJlY2lwaWVudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwaWVudEFtb3VudCA9IG5ldyBCaWdOdW1iZXIocmVjaXBpZW50c1swXS5hbW91bnQpO1xuXG4gICAgaWYgKFxuICAgICAgcmVjaXBpZW50QW1vdW50LmlzR3JlYXRlclRoYW4oZXhwbGFpbmVkVHgub3V0cHV0QW1vdW50KSB8fFxuICAgICAgcmVjaXBpZW50QW1vdW50LnBsdXMoZXhwbGFpbmVkVHguZmVlLmZlZSkuaXNMZXNzVGhhbihleHBsYWluZWRUeC5vdXRwdXRBbW91bnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUeCB0b3RhbCBhbW91bnQgJHtleHBsYWluZWRUeC5vdXRwdXRBbW91bnR9IGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdG90YWwgYW1vdW50IGZpZWxkICR7cmVjaXBpZW50QW1vdW50fSBhbmQgZml4ZWQgZmVlICR7ZXhwbGFpbmVkVHguZmVlLmZlZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChleHBsYWluZWRUeC5vdXRwdXRzICYmICF1dGlscy5pc1ZhbGlkQWRkcmVzcyhleHBsYWluZWRUeC5vdXRwdXRzWzBdLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgUC1jaGFpbiBhZGRyZXNzICR7ZXhwbGFpbmVkVHgub3V0cHV0c1swXS5hZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbW9WYWx1ZSA9IG1lbW8uc3BsaXQoJ34nKTtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKG1lbW9WYWx1ZVswXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHhuIG1lbW8gbXVzdCBjb250YWluIHZhbGlkIEMtY2hhaW4gYWRkcmVzcyBkZXN0aW5hdGlvbiwgcmVjZWl2ZWQ6ICR7bWVtb31gKTtcbiAgICB9IGVsc2UgaWYgKG1lbW9WYWx1ZVswXSAhPT0gcmVjaXBpZW50c1swXS5hZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIEMtY2hhaW4gcmVjZWl2ZSBhZGRyZXNzICR7bWVtb1ZhbHVlWzBdfSwgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcGFyYW1zIGFkZHJlc3MgJHtyZWNpcGllbnRzWzBdLmFkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaW1wb3J0IHR4biBpbnRvIFAgaXMgdmFsaWQsIGJhc2VkIG9uIGV4cGVjdGVkIHR4IHBhcmFtcy5cbiAgICpcbiAgICogQHBhcmFtIHtBdmF4cExpYi5BdmF4cEVudHJ5W119IGV4cGxhaW5lZFR4SW5wdXRzIHR4IGlucHV0cyAodW5zcGVudHMgdG8gYmUgaW1wb3J0ZWQpXG4gICAqIEBwYXJhbSB7QXZheHBUcmFuc2FjdGlvblBhcmFtc30gdHhQYXJhbXMgZXhwZWN0ZWQgdHggaW5mbyB0byBjaGVjayBhZ2FpbnN0XG4gICAqL1xuICB2YWxpZGF0ZUltcG9ydFR4KGV4cGxhaW5lZFR4SW5wdXRzOiBBdmF4cExpYi5BdmF4cEVudHJ5W10sIHR4UGFyYW1zOiBBdmF4cFRyYW5zYWN0aW9uUGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKHR4UGFyYW1zLnVuc3BlbnRzKSB7XG4gICAgICBpZiAoZXhwbGFpbmVkVHhJbnB1dHMubGVuZ3RoICE9PSB0eFBhcmFtcy51bnNwZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3R4UGFyYW1zLnVuc3BlbnRzLmxlbmd0aH0gVVRYT3MsIHRyYW5zYWN0aW9uIGhhZCAke2V4cGxhaW5lZFR4SW5wdXRzLmxlbmd0aH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5zcGVudHMgPSBuZXcgU2V0KHR4UGFyYW1zLnVuc3BlbnRzKTtcblxuICAgICAgZm9yIChjb25zdCB1bnNwZW50IG9mIGV4cGxhaW5lZFR4SW5wdXRzKSB7XG4gICAgICAgIGlmICghdW5zcGVudHMuaGFzKHVuc3BlbnQuaWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmFuc2FjdGlvbiBzaG91bGQgbm90IGNvbnRhaW4gdGhlIFVUWE86ICR7dW5zcGVudC5pZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogQXZheHBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eFByZWJ1aWxkICYmIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4O1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH1cbiAgICBsZXQgdHg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20odHhIZXgpO1xuICAgICAgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG5cbiAgICBjb25zdCB7IHR5cGUsIHN0YWtpbmdPcHRpb25zIH0gPSBwYXJhbXMudHhQYXJhbXM7XG4gICAgLy8gVE9ETyhCRy02MjExMik6IGNoYW5nZSBJbXBvcnRUb0MgdHlwZSB0byBJbXBvcnRcbiAgICBpZiAoIXR5cGUgfHwgKHR5cGUgIT09ICdJbXBvcnRUb0MnICYmIGV4cGxhaW5lZFR4LnR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZVt0eXBlXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggdHlwZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHR5cGUnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGV4cGxhaW5lZFR4LnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZERlbGVnYXRvcjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcjpcbiAgICAgICAgaWYgKHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzICYmIHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3Rha2UgVHggZG9lcyBub3QgcmVxdWlyZSByZWNpcGllbnRzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy50eFBhcmFtcy5tZW1vICYmIGV4cGxhaW5lZFR4Lm1lbW8gIT09IHBhcmFtcy50eFBhcmFtcy5tZW1vLnZhbHVlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBtZW1vIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgbWVtbycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZVN0YWtpbmdUeChzdGFraW5nT3B0aW9ucywgZXhwbGFpbmVkVHgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkV4cG9ydDpcbiAgICAgICAgaWYgKCFwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwb3J0IFR4IHJlcXVpcmVzIGEgcmVjaXBpZW50Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWV4cGxhaW5lZFR4Lm1lbW8pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cG9ydCBUeCByZXF1aXJlcyBhIG1lbW8gd2l0aCBjLWNoYWluIGFkZHJlc3MnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRXhwb3J0VHgocGFyYW1zLnR4UGFyYW1zLnJlY2lwaWVudHMsIGV4cGxhaW5lZFR4Lm1lbW8sIGV4cGxhaW5lZFR4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkltcG9ydDpcbiAgICAgICAgaWYgKHR4LmlzVHJhbnNhY3Rpb25Gb3JDQ2hhaW4pIHtcbiAgICAgICAgICAvLyBJbXBvcnQgdG8gQy1jaGFpblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cyAmJiBwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggIT09IDApIHx8XG4gICAgICAgICAgICBleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCAhPT0gMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAxIG91dHB1dCBpbiBpbXBvcnQgdHhuIGFuZCBkb2VzIG5vdCByZXF1aXJlIHJlY2lwaWVudHMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW1wb3J0IHRvIFAtY2hhaW5cbiAgICAgICAgICBpZiAoZXhwbGFpbmVkVHgub3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgMSBvdXRwdXQgaW4gaW1wb3J0IHR4bicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnZhbGlkYXRlSW1wb3J0VHgoZXhwbGFpbmVkVHguaW5wdXRzLCBwYXJhbXMudHhQYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgaXMgdmFsaWQsIHRoZW4gbWFrZSBzdXJlIGl0IG1hdGNoZXMgdGhlIHJvb3QgYWRkcmVzcy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzIGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgcHVibGljIGtleXMgdG8gZ2VuZXJhdGUgdGhlIHdhbGxldFxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucyB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIGlmICgha2V5Y2hhaW5zIHx8IGtleWNoYWlucy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXljaGFpbnMnKTtcbiAgICB9XG5cbiAgICAvLyBtdWx0aXNpZyBhZGRyZXNzZXMgYXJlIHNlcGFyYXRlZCBieSB+XG4gICAgY29uc3Qgc3BsaXRBZGRyZXNzZXMgPSBhZGRyZXNzLnNwbGl0KCd+Jyk7XG5cbiAgICAvLyBkZXJpdmUgYWRkcmVzc2VzIGZyb20ga2V5Y2hhaW5cbiAgICBjb25zdCB1bmxvY2tBZGRyZXNzZXMgPSBrZXljaGFpbnMubWFwKChrZXljaGFpbikgPT5cbiAgICAgIG5ldyBBdmF4cExpYi5LZXlQYWlyKHsgcHViOiBrZXljaGFpbi5wdWIgfSkuZ2V0QWRkcmVzcyh0aGlzLl9zdGF0aWNzQ29pbi5uZXR3b3JrLnR5cGUpXG4gICAgKTtcblxuICAgIGlmIChzcGxpdEFkZHJlc3Nlcy5sZW5ndGggIT09IHVubG9ja0FkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogbXVsdGlzaWcgYWRkcmVzcyBsZW5ndGggZG9lcyBub3QgbWF0Y2hgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWRyZXNzZXNBcnJheXNNYXRjaChzcGxpdEFkZHJlc3NlcywgdW5sb2NrQWRkcmVzc2VzKSkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiAke2FkZHJlc3N9IGlzIG5vdCBvZiB0aGlzIHdhbGxldGApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdHdvIG11bHRpc2lnIGFkZHJlc3MgYXJyYXlzIGhhdmUgdGhlIHNhbWUgZWxlbWVudHMsIG9yZGVyIGRvZXNudCBtYXR0ZXJcbiAgICogQHBhcmFtIGFkZHJlc3NBcnJheTFcbiAgICogQHBhcmFtIGFkZHJlc3NBcnJheTJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhZGRyZXNzIGFycmF5cyBoYXZlIHRoZSBzYW1lIGFkZHJlc3Nlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhZHJlc3Nlc0FycmF5c01hdGNoKGFkZHJlc3NBcnJheTE6IHN0cmluZ1tdLCBhZGRyZXNzQXJyYXkyOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhZGRyZXNzQXJyYXkxLnNvcnQoKSkgPT09IEpTT04uc3RyaW5naWZ5KGFkZHJlc3NBcnJheTIuc29ydCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBBdmF4cCBrZXkgcGFpclxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gc2VlZCAtIFNlZWQgZnJvbSB3aGljaCB0aGUgbmV3IGtleXBhaXIgc2hvdWxkIGJlIGdlbmVyYXRlZCwgb3RoZXJ3aXNlIGEgcmFuZG9tIHNlZWQgaXMgdXNlZFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3Qgd2l0aCBnZW5lcmF0ZWQgcHViIGFuZCBwcnZcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgQXZheHBMaWIuS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgQXZheHBMaWIuS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcblxuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcnYgaW4ga2V5IGdlbmVyYXRpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy5wdWIsXG4gICAgICBwcnY6IGtleXMucHJ2LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgQXZheHBMaWIuS2V5UGFpcih7IHB1YiB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHByaXZhdGUga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJ2IHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQcnYocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEF2YXhwTGliLktleVBhaXIoeyBwcnYgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBpZiAoYWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIEF2YXhwTGliLlV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIEF2YXhwIHRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBBdmF4cFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgLy8gZGVzZXJpYWxpemUgcmF3IHRyYW5zYWN0aW9uIChub3RlOiBmcm9tQWRkcmVzcyBoYXMgb25jaGFpbiBvcmRlcilcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIoKS5mcm9tKHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICBjb25zdCBrZXkgPSBwYXJhbXMucHJ2O1xuXG4gICAgLy8gcHVzaCB0aGUga2V5cGFpciB0byBzaWduZXIgYXJyYXlcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleSB9KTtcblxuICAgIC8vIGJ1aWxkIHRoZSB0cmFuc2FjdGlvblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0Vycm9yIHdoaWxlIHRyeWluZyB0byBidWlsZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA+PSAyXG4gICAgICA/IHsgdHhIZXg6IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCkgfVxuICAgICAgOiB7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCkgfSB9O1xuICB9XG5cbiAgYXN5bmMgZmVlRXN0aW1hdGUocGFyYW1zOiBGZWVFc3RpbWF0ZU9wdGlvbnMpOiBQcm9taXNlPFRyYW5zYWN0aW9uRmVlPiB7XG4gICAgLy8gc3Rha2luZyB0cmFuc2FjdGlvbnMgYXJlIGZlZS1sZXNzXG4gICAgcmV0dXJuIHsgZmVlOiAnMCcgfTtcbiAgfVxuXG4gIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM+IHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWRFcnJvcigncGFyc2VUcmFuc2FjdGlvbiBtZXRob2Qgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbiBhIEF2YXhwIHRyYW5zYWN0aW9uIGZyb20gdHhIZXhcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEF2YXhwTGliLlRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eEhleCA/PyBwYXJhbXM/LmhhbGZTaWduZWQ/LnR4SGV4O1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB0cmFuc2FjdGlvbiBoZXgnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20odHhIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHJldHVybiB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb246ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJlY292ZXJ5U2lnbmF0dXJlKG1lc3NhZ2U6IEJ1ZmZlciwgc2lnbmF0dXJlOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiBBdmF4cExpYi5VdGlscy5yZWNvdmVyeVNpZ25hdHVyZSh0aGlzLl9zdGF0aWNzQ29pbi5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcmssIG1lc3NhZ2UsIHNpZ25hdHVyZSk7XG4gIH1cblxuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IEtleVBhaXIsIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgcHJ2ID0gbmV3IEF2YXhwTGliLktleVBhaXIoa2V5KS5nZXRQcml2YXRlS2V5KCk7XG4gICAgaWYgKCFwcnYpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtZXNzYWdlID0gQnVmZmVyLmZyb20obWVzc2FnZSwgJ2hleCcpO1xuICAgIH1cbiAgICByZXR1cm4gQXZheHBMaWIuVXRpbHMuY3JlYXRlU2lnbmF0dXJlKHRoaXMuX3N0YXRpY3NDb2luLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaywgbWVzc2FnZSwgcHJ2KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlcigpOiBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgICByZXR1cm4gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICB9XG59XG4iXX0=